<?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>164527</bug_id>
          
          <creation_ts>2016-11-08 15:16:57 -0800</creation_ts>
          <short_desc>Network event record/replay</short_desc>
          <delta_ts>2016-12-08 23:49:39 -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>WebKit2</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Rollin">krollin</reporter>
          <assigned_to name="Keith Rollin">krollin</assigned_to>
          <cc>achristensen</cc>
    
    <cc>barraclough</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
    
    <cc>rniwa</cc>
    
    <cc>slewis</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1249141</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-11-08 15:16:57 -0800</bug_when>
    <thetext>Add mechanism for recording and replaying network events as part of rdar://problem/28273781 (&quot;New Content Capture for Performance Benchmarks&quot;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249143</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-11-08 15:20:12 -0800</bug_when>
    <thetext>&lt;rdar://problem/29168157&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1249167</commentid>
    <comment_count>2</comment_count>
      <attachid>294198</attachid>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-11-08 15:55:16 -0800</bug_when>
    <thetext>Created attachment 294198
This is not entirely tested, so doesn&apos;t necessarily completely work. I&apos;m uploading this early patch for early review comments since there&apos;s a significant amount of work here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251966</commentid>
    <comment_count>3</comment_count>
      <attachid>294962</attachid>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-11-16 12:32:55 -0800</bug_when>
    <thetext>Created attachment 294962
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1251967</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-16 12:35:16 -0800</bug_when>
    <thetext>Attachment 294962 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/capture/NetworkCaptureCachedResource.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/NetworkProcess/capture/NetworkCaptureRecorder.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252921</commentid>
    <comment_count>5</comment_count>
      <attachid>295208</attachid>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-11-18 16:01:15 -0800</bug_when>
    <thetext>Created attachment 295208
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252933</commentid>
    <comment_count>6</comment_count>
      <attachid>295212</attachid>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-11-18 16:19:42 -0800</bug_when>
    <thetext>Created attachment 295212
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252935</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-18 16:22:50 -0800</bug_when>
    <thetext>Attachment 295212 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/capture/NetworkCaptureCachedResource.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebKit2/NetworkProcess/capture/NetworkCaptureRecorder.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253403</commentid>
    <comment_count>8</comment_count>
      <attachid>295212</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-11-22 10:50:29 -0800</bug_when>
    <thetext>Comment on attachment 295212
Patch

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

I didn’t get a chance to review the whole patch yet, but this looks really good. I’ll review the details of the patch as soon as I get a chance, but if someone else wants to do it first, please don’t wait for me.

&gt; Source/WebKit2/NetworkProcess/NetworkLoad.cpp:95
&gt; +    if (!m_task)
&gt; +#endif
&gt; +
&gt;      m_task = NetworkDataTask::create(networkSession, *this, m_parameters);

This is awkward. We should try to find a more elegant way to do this. Maybe just create a shouldCreateTask boolean to avoid the if that straddles and #endif boundary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253483</commentid>
    <comment_count>9</comment_count>
      <attachid>295212</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-11-23 06:19:55 -0800</bug_when>
    <thetext>Comment on attachment 295212
Patch

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

&gt;&gt; Source/WebKit2/NetworkProcess/NetworkLoad.cpp:95
&gt;&gt;      m_task = NetworkDataTask::create(networkSession, *this, m_parameters);
&gt; 
&gt; This is awkward. We should try to find a more elegant way to do this. Maybe just create a shouldCreateTask boolean to avoid the if that straddles and #endif boundary.

Or just move if (!m_task) to the other side. It is not like we need to branch optimize here.

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureCachedResource.cpp:38
&gt; +namespace WebKit {
&gt; +namespace NetworkCapture {
&gt; +
&gt; +CachedResource::CachedResource(const String&amp; eventFilePath)

Does &quot;Cached&quot; add anything? Maybe just WebCore::NetworkCapture::Resource?

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureCachedResource.cpp:97
&gt; +    , m_mappedEventFile(WebCore::MappedFileData(m_eventFilePath, m_haveMappedEventFile))

, m_mappedEventFile(m_eventFilePath, m_haveMappedEventFile)

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureCachedResource.cpp:102
&gt; +WTF::Optional&lt;CaptureEvent&gt; CachedResource::EventStream::nextEvent()

No need for &quot;WTF::&quot;, here or elsewhere.

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureCachedResource.cpp:106
&gt; +        return WTF::Optional&lt;CaptureEvent&gt;();

return { };

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureCachedResource.h:87
&gt; +    // Lazily calculated.
&gt; +    WebCore::URL m_url;
&gt; +    WebCore::URL m_baseURL;
&gt; +    WebCore::URLParser::URLEncodedForm m_queryParameters;
&gt; +
&gt; +    bool m_haveURL { false };
&gt; +    bool m_haveBaseURL { false };
&gt; +    bool m_haveQueryParameters { false };

Often this sort of bool+field pairs end up reading better with Optional:

Optional&lt;WebCore::URL&gt; m_url;

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.cpp:46
&gt; +void ArgumentCoder&lt;CaptureTimeType&gt;::encode(IPC::Encoder&amp; encoder, const CaptureTimeType&amp; time)

As discussed, this shouldn&apos;t use IPC coders since they are not safe to persist. Cache coders are a better option though they haven&apos;t really been desingned for permanent storage either. Using something like plist or json might be a good idea.

Still, this is probably ok to get things up and running.

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.h:82
&gt; +    static constexpr uint8_t kType { CaptureEventTypes::TypeIndex&lt;RequestSentEvent&gt; };

We don&apos;t usually use kFoo naming. How about just &apos;type&apos;?

Does constexpr do something here?

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:468
&gt; +bool Manager::ensureFileHandle(const String&amp; filePath, FileHandle* fileHandle)

This could take FileHandle&amp; instead. 

This is always called before printToFile(). Maybe it could be invoked unconditionally and this functionality be part of printToFile.

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:486
&gt; +    FileHandle f = FileHandle::openFile(filePath, mode);

Please use full variable names. Also this sort of things can use auto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253523</commentid>
    <comment_count>10</comment_count>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-11-23 16:28:13 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 295212 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=295212&amp;action=review
&gt; 
&gt; I didn’t get a chance to review the whole patch yet, but this looks really
&gt; good. I’ll review the details of the patch as soon as I get a chance, but if
&gt; someone else wants to do it first, please don’t wait for me.

I&apos;ve asked Antti and Alex for their reviews.

&gt; &gt; Source/WebKit2/NetworkProcess/NetworkLoad.cpp:95
&gt; &gt; +    if (!m_task)
&gt; &gt; +#endif
&gt; &gt; +
&gt; &gt;      m_task = NetworkDataTask::create(networkSession, *this, m_parameters);
&gt; 
&gt; This is awkward. We should try to find a more elegant way to do this. Maybe
&gt; just create a shouldCreateTask boolean to avoid the if that straddles and
&gt; #endif boundary.

I agree on the awkwardness. I went with Antti&apos;s suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253526</commentid>
    <comment_count>11</comment_count>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-11-23 16:40:04 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Comment on attachment 295212 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=295212&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit2/NetworkProcess/NetworkLoad.cpp:95
&gt; &gt;&gt;      m_task = NetworkDataTask::create(networkSession, *this, m_parameters);
&gt; &gt; 
&gt; &gt; This is awkward. We should try to find a more elegant way to do this. Maybe just create a shouldCreateTask boolean to avoid the if that straddles and #endif boundary.
&gt; 
&gt; Or just move if (!m_task) to the other side. It is not like we need to
&gt; branch optimize here.

Done.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureCachedResource.cpp:38
&gt; &gt; +namespace WebKit {
&gt; &gt; +namespace NetworkCapture {
&gt; &gt; +
&gt; &gt; +CachedResource::CachedResource(const String&amp; eventFilePath)
&gt; 
&gt; Does &quot;Cached&quot; add anything? Maybe just WebCore::NetworkCapture::Resource?

I could agree to that. Especially since there&apos;s another CachedResource in WebCore.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureCachedResource.cpp:97
&gt; &gt; +    , m_mappedEventFile(WebCore::MappedFileData(m_eventFilePath, m_haveMappedEventFile))
&gt; 
&gt; , m_mappedEventFile(m_eventFilePath, m_haveMappedEventFile)

Yikes, what was I thinking?

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureCachedResource.cpp:102
&gt; &gt; +WTF::Optional&lt;CaptureEvent&gt; CachedResource::EventStream::nextEvent()
&gt; 
&gt; No need for &quot;WTF::&quot;, here or elsewhere.

Done.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureCachedResource.cpp:106
&gt; &gt; +        return WTF::Optional&lt;CaptureEvent&gt;();
&gt; 
&gt; return { };

Done.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureCachedResource.h:87
&gt; &gt; +    // Lazily calculated.
&gt; &gt; +    WebCore::URL m_url;
&gt; &gt; +    WebCore::URL m_baseURL;
&gt; &gt; +    WebCore::URLParser::URLEncodedForm m_queryParameters;
&gt; &gt; +
&gt; &gt; +    bool m_haveURL { false };
&gt; &gt; +    bool m_haveBaseURL { false };
&gt; &gt; +    bool m_haveQueryParameters { false };
&gt; 
&gt; Often this sort of bool+field pairs end up reading better with Optional:
&gt; 
&gt; Optional&lt;WebCore::URL&gt; m_url;

Done. This will lead to a change in behavior, but I&apos;m OK with that. The old way, if the value could not be lazily calculated, an empty instance will be returned. The new way, there may not be an empty instance to return, so the process may crash (due to calling Optional::get() on an &quot;unengaged&quot; instance). I&apos;m OK with that because there&apos;s nothing useful to be done if the lazily-calculated value can&apos;t be calculated.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.cpp:46
&gt; &gt; +void ArgumentCoder&lt;CaptureTimeType&gt;::encode(IPC::Encoder&amp; encoder, const CaptureTimeType&amp; time)
&gt; 
&gt; As discussed, this shouldn&apos;t use IPC coders since they are not safe to
&gt; persist. Cache coders are a better option though they haven&apos;t really been
&gt; desingned for permanent storage either. Using something like plist or json
&gt; might be a good idea.
&gt; 
&gt; Still, this is probably ok to get things up and running.

I&apos;ve got a JSON-based implementation for an upcoming patch. It looks and works great.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.h:82
&gt; &gt; +    static constexpr uint8_t kType { CaptureEventTypes::TypeIndex&lt;RequestSentEvent&gt; };
&gt; 
&gt; We don&apos;t usually use kFoo naming. How about just &apos;type&apos;?
&gt; 
&gt; Does constexpr do something here?

This will change in the JSON-based implementation. A scalar-based kType seemed like a good idea for an IPC::Encoder-based storage mechanism, but a string-based kTypeName fits better with a JSON-based storage mechanism. Those strings are already just &quot;const&quot;, and I&apos;ll change the name to &quot;typeName&quot;.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:468
&gt; &gt; +bool Manager::ensureFileHandle(const String&amp; filePath, FileHandle* fileHandle)
&gt; 
&gt; This could take FileHandle&amp; instead. 

Done.

&gt; This is always called before printToFile(). Maybe it could be invoked
&gt; unconditionally and this functionality be part of printToFile.

I&apos;m not sure what you&apos;re envisioning here. Do you mean change something like:

    if (ensureFileHandle(reportLoadPath(), m_loadFileHandle))
        printToFile(m_loadFileHandle, &quot;%s\n&quot;, DEBUG_STR(resource.url().string()));

to:

    printToFile(reportLoadPath(), m_loadFileHandle, &quot;%s\n&quot;, DEBUG_STR(resource.url().string()));

I would have to pass in the name of the file in order to merge ensureFileHandle wth printToFile. And while that seems unwieldy to me, I guess it&apos;s nonetheless better the two-line sequences I currently have.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:486
&gt; &gt; +    FileHandle f = FileHandle::openFile(filePath, mode);
&gt; 
&gt; Please use full variable names. Also this sort of things can use auto.

Done (here and in other places).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253527</commentid>
    <comment_count>12</comment_count>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-11-23 16:41:02 -0800</bug_when>
    <thetext>I&apos;ll post a new patch once Alex has a chance to review the old one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253553</commentid>
    <comment_count>13</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-11-24 02:07:34 -0800</bug_when>
    <thetext>&gt; I&apos;m not sure what you&apos;re envisioning here. Do you mean change something like:
&gt; 
&gt;     if (ensureFileHandle(reportLoadPath(), m_loadFileHandle))
&gt;         printToFile(m_loadFileHandle, &quot;%s\n&quot;,
&gt; DEBUG_STR(resource.url().string()));
&gt; 
&gt; to:
&gt; 
&gt;     printToFile(reportLoadPath(), m_loadFileHandle, &quot;%s\n&quot;,
&gt; DEBUG_STR(resource.url().string()));
&gt; 
&gt; I would have to pass in the name of the file in order to merge
&gt; ensureFileHandle wth printToFile. And while that seems unwieldy to me, I
&gt; guess it&apos;s nonetheless better the two-line sequences I currently have.

Or maybe just do ensureFileHandle() for the relevant file once when starting recording/playback and have printToFile do nothing if the file is not open. 

Or maybe FileHandle could be more of a File and have open/closed states. Then it could encapsulate the path for files that are not open too:

Manager::Manager() {
   : m_loadFile(reportLoadPath())

printToFile(m_loadFile, ...):
...

void printToFile(File&amp; file) {
    if (!file.ensureOpen())
       return;
    ...

Anyway, not super important.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254214</commentid>
    <comment_count>14</comment_count>
      <attachid>295212</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-11-28 22:33:32 -0800</bug_when>
    <thetext>Comment on attachment 295212
Patch

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

partial review.  This is going to be really cool, but it needs some refining.

&gt;&gt;&gt;&gt;&gt; Source/WebKit2/NetworkProcess/NetworkLoad.cpp:95
&gt;&gt;&gt;&gt;&gt;      m_task = NetworkDataTask::create(networkSession, *this, m_parameters);
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; This is awkward. We should try to find a more elegant way to do this. Maybe just create a shouldCreateTask boolean to avoid the if that straddles and #endif boundary.
&gt;&gt;&gt; 
&gt;&gt;&gt; Or just move if (!m_task) to the other side. It is not like we need to branch optimize here.
&gt;&gt; 
&gt;&gt; I agree on the awkwardness. I went with Antti&apos;s suggestion.
&gt; 
&gt; Done.

Most users of WebKit will not be using NetworkCapture at all, so I think we should make it a quick check, which would also make it more straightforward.

switch (NetworkCapture::Manager::singleton().state()) {
case Disabled:
    // This is the common case.
    doRegularStuff();
    return;
case Recording:
    doRecordingStuff();
    return;
case Replaying:
    doReplayingStuff();
    return;
}

&gt; Source/WebKit2/NetworkProcess/NetworkProcess.cpp:233
&gt; +        parameters.shouldRecordNetworkRequests,
&gt; +        parameters.shouldReplayNetworkRequests,
&gt; +        parameters.recordReplayCacheLocation);

This could definitely be put into an enum instead of two bools.  Would we ever be recording and replaying at the same time?

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureCachedResource.cpp:84
&gt; +        m_queryParameters = WebCore::URLParser::parseURLEncodedForm(url().query());

I intended this to only be used with URLSearchParams which takes any string as input.  This takes a URL&apos;s query, which has already been parsed.  I&apos;m not sure what I think about the use here.

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureCachedResource.cpp:111
&gt; +        DEBUG_LOG_ERROR(&quot;Unable to read event type: file = %{public}s&quot;, DEBUG_STR(m_eventFilePath));

I&apos;m curious about this &quot;%{public}s&quot;.  You&apos;re the only one who seems to have used it in WebKit, Keith.  What is it and what does it do?  Should more people be using it?

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureCachedResource.cpp:130
&gt; +        return WTF::Optional&lt;CaptureEvent&gt;();

Isn&apos;t this the same as Nullopt?

&gt;&gt;&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.cpp:46
&gt;&gt;&gt; +void ArgumentCoder&lt;CaptureTimeType&gt;::encode(IPC::Encoder&amp; encoder, const CaptureTimeType&amp; time)
&gt;&gt; 
&gt;&gt; As discussed, this shouldn&apos;t use IPC coders since they are not safe to persist. Cache coders are a better option though they haven&apos;t really been desingned for permanent storage either. Using something like plist or json might be a good idea.
&gt;&gt; 
&gt;&gt; Still, this is probably ok to get things up and running.
&gt; 
&gt; I&apos;ve got a JSON-based implementation for an upcoming patch. It looks and works great.

If you have a JSON-based implementation, should we even land this binary implementation?

Also, I don&apos;t quite understand how this recorded cache is going to be used.  Will it be read from disk and the entire recording stored in memory in the NetworkProcess, or just read from disk as needed?  It could get really big.  (The answer to this question is probably in this patch, but I haven&apos;t read the whole thing yet.)

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.cpp:135
&gt; +    // Force the creation of needed platform-specific data that otherwise is not created.

Why?  If this is actually needed, we shouldn&apos;t need (void).

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.cpp:156
&gt; +        return WTF::Optional&lt;CaptureEvent&gt;();

Nullopt

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.cpp:195
&gt; +        return WTF::Optional&lt;CaptureEvent&gt;();

Nullopt

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.cpp:197
&gt; +    return WTF::Optional&lt;CaptureEvent&gt;(CaptureEvent(FinishedEvent(WTFMove(time), WTFMove(error))));

WTF::Optional&lt;...&gt; not needed, I think.

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.h:72
&gt; +    CaptureTimeType time;

Is this used in this patch?  It seems like it&apos;s just encoded, decoded, and moved around.  It would be good to have.

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.h:88
&gt; +        : TimedEvent(), response(response) { }

response should be on its own line here and elsewhere in this file.

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureLogging.h:42
&gt; +#define DEBUG_LOG(...)                  ((void) 0)

Lots of unnecessary spaces.
Also, why not just define it to be nothing?

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:63
&gt; +// TODO: What&apos;s the threading model in which we&apos;re running? We&apos;re acting as a
&gt; +// singleton that gets called all over the place, but we&apos;re not doing anything
&gt; +// to protect ourself from multi-threaded access. On the other hand, perhaps
&gt; +// we&apos;re OK without synchronization. When recording, we&apos;re just writing data to
&gt; +// files. When playing things back, we initialize our data up front and then
&gt; +// use it in a read-only manner afterwards.

Things like this are done on the main thread in the NetworkProcess right now.

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:71
&gt; +void Manager::initialize(

Let&apos;s just put all the parameters on the same line.

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:90
&gt; +void Manager::terminate()
&gt; +{
&gt; +}

This doesn&apos;t do anything.  Why not just make the Manager a member variable of the NetworkProcess singleton?

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:160
&gt; +int Manager::fuzzyMatchURLs(

parameters on same line.

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:167
&gt; +#if 0

:(

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:215
&gt; +    int score = 0;

can score ever be negative?

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:402
&gt; +    WTF::MD5 md5;

This is a strange hash function.  Why MD5?  We already have StringHash and StringHasher.  Were they lacking something?

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:417
&gt; +    String result;

StringBuilder.

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.h:85
&gt; +    int fuzzyMatchURLs(

Is the need for fuzzy matching driven by any real-world examples?  I could see it leading to nondeterministic behavior, which could cause strange things to happen when measuring performance data.  Let&apos;s talk in person about this.

&gt; Source/WebKit2/NetworkProcess/capture/NetworkDataTaskReplay.h:92
&gt; +    enum { kPositionNotSpecified = -1 };

This is never used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254261</commentid>
    <comment_count>15</comment_count>
      <attachid>295212</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-11-29 07:24:56 -0800</bug_when>
    <thetext>Comment on attachment 295212
Patch

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

&gt;&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.h:85
&gt;&gt; +    int fuzzyMatchURLs(
&gt; 
&gt; Is the need for fuzzy matching driven by any real-world examples?  I could see it leading to nondeterministic behavior, which could cause strange things to happen when measuring performance data.  Let&apos;s talk in person about this.

Cache busting.  Of course this is necessary</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254337</commentid>
    <comment_count>16</comment_count>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-11-29 10:59:32 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Comment on attachment 295212 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=295212&amp;action=review
&gt; 
&gt; partial review.  This is going to be really cool, but it needs some refining.
&gt; 
&gt; &gt;&gt;&gt;&gt;&gt; Source/WebKit2/NetworkProcess/NetworkLoad.cpp:95
&gt; &gt;&gt;&gt;&gt;&gt;      m_task = NetworkDataTask::create(networkSession, *this, m_parameters);
&gt; &gt;&gt;&gt;&gt; 
&gt; &gt;&gt;&gt;&gt; This is awkward. We should try to find a more elegant way to do this. Maybe just create a shouldCreateTask boolean to avoid the if that straddles and #endif boundary.
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; Or just move if (!m_task) to the other side. It is not like we need to branch optimize here.
&gt; &gt;&gt; 
&gt; &gt;&gt; I agree on the awkwardness. I went with Antti&apos;s suggestion.
&gt; &gt; 
&gt; &gt; Done.
&gt; 
&gt; Most users of WebKit will not be using NetworkCapture at all, so I think we
&gt; should make it a quick check, which would also make it more straightforward.
&gt; 
&gt; switch (NetworkCapture::Manager::singleton().state()) {
&gt; case Disabled:
&gt;     // This is the common case.
&gt;     doRegularStuff();
&gt;     return;
&gt; case Recording:
&gt;     doRecordingStuff();
&gt;     return;
&gt; case Replaying:
&gt;     doReplayingStuff();
&gt;     return;
&gt; }

Currently, the NetworkCapture facility is optionally included. I&apos;m not sure what maintaining that would do to the above. Wouldn&apos;t it end up looking like the following?

#if ENABLE(NETWORK_CAPTURE)
switch (NetworkCapture::Manager::singleton().state()) {
case Disabled:
    // This is the common case.
    doRegularStuff();
    return;
case Recording:
    doRecordingStuff();
    return;
case Replaying:
    doReplayingStuff();
    return;
}
#else
    doRegularStuff();
#endif

&gt; &gt; Source/WebKit2/NetworkProcess/NetworkProcess.cpp:233
&gt; &gt; +        parameters.shouldRecordNetworkRequests,
&gt; &gt; +        parameters.shouldReplayNetworkRequests,
&gt; &gt; +        parameters.recordReplayCacheLocation);
&gt; 
&gt; This could definitely be put into an enum instead of two bools.  Would we
&gt; ever be recording and replaying at the same time?

Probably not. I&apos;ll make the change.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureCachedResource.cpp:84
&gt; &gt; +        m_queryParameters = WebCore::URLParser::parseURLEncodedForm(url().query());
&gt; 
&gt; I intended this to only be used with URLSearchParams which takes any string
&gt; as input.  This takes a URL&apos;s query, which has already been parsed.  I&apos;m not
&gt; sure what I think about the use here.

What&apos;s the alternative for getting the query parameters from the URL in a form where I can examine each key/value pair?

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureCachedResource.cpp:111
&gt; &gt; +        DEBUG_LOG_ERROR(&quot;Unable to read event type: file = %{public}s&quot;, DEBUG_STR(m_eventFilePath));
&gt; 
&gt; I&apos;m curious about this &quot;%{public}s&quot;.  You&apos;re the only one who seems to have
&gt; used it in WebKit, Keith.  What is it and what does it do?  Should more
&gt; people be using it?

It depends on your approach to debugging. Some people use Xcode and its debugger. Some use logging to the Xcode console. Some use logging to the terminal. Some use logging to the Console. There are likely other approaches of which I&apos;m completely unaware. Personally, when I joined WebKit, I was first involved with adding support for the new os_log() logging facility and the new Console application. I thus got headed down that route out of the starting gate. As part of os_log(), strings are not captured by default. In order to tell os_log() that you are not capturing information that is possibly personally identifiable, you need to annotate the string as you see it. Since this logging is only enabled when the record/replay facility is activated, and since it won&apos;t be activated on user&apos;s devices, I&apos;ve marked all strings as {public}, allowing me to capture things such as URLs and filenames.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureCachedResource.cpp:130
&gt; &gt; +        return WTF::Optional&lt;CaptureEvent&gt;();
&gt; 
&gt; Isn&apos;t this the same as Nullopt?

I&apos;m not familiar with Nullopt and don&apos;t find it in WebKit sources anywhere. I see std::nullopt on cppreference.com. Is that what you&apos;re referring to? I&apos;ve not used this before. I now see it used liberally through WebKit. I believe you&apos;re suggesting I use &quot;return std::nullopt&quot;? I could do that, but Antti suggested using &quot;return { }&quot;. Is one preferred over the other?

&gt; &gt;&gt;&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.cpp:46
&gt; &gt;&gt;&gt; +void ArgumentCoder&lt;CaptureTimeType&gt;::encode(IPC::Encoder&amp; encoder, const CaptureTimeType&amp; time)
&gt; &gt;&gt; 
&gt; &gt;&gt; As discussed, this shouldn&apos;t use IPC coders since they are not safe to persist. Cache coders are a better option though they haven&apos;t really been desingned for permanent storage either. Using something like plist or json might be a good idea.
&gt; &gt;&gt; 
&gt; &gt;&gt; Still, this is probably ok to get things up and running.
&gt; &gt; 
&gt; &gt; I&apos;ve got a JSON-based implementation for an upcoming patch. It looks and works great.
&gt; 
&gt; If you have a JSON-based implementation, should we even land this binary
&gt; implementation?

I could upload the JSON version if you want. I was working on the JSON version as a follow-up to the binary version in order to keep a pipeline of changes going. But with the Thanksgiving holiday holding up reviews for a while, the JSON implementation came in before this current patch could be fully reviewed.

So, whichever way you prefer. Whatever makes it easier for you to review.

&gt; Also, I don&apos;t quite understand how this recorded cache is going to be used. 
&gt; Will it be read from disk and the entire recording stored in memory in the
&gt; NetworkProcess, or just read from disk as needed?  It could get really big. 
&gt; (The answer to this question is probably in this patch, but I haven&apos;t read
&gt; the whole thing yet.)

The idea is that minimal cache information will be read in to serve as an index of available resources. The actual resources won&apos;t be read in until actually needed.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.cpp:135
&gt; &gt; +    // Force the creation of needed platform-specific data that otherwise is not created.
&gt; 
&gt; Why?  If this is actually needed, we shouldn&apos;t need (void).

The information that we need created is some state internal to the object (in particular, the m_nsResponse object).

This kludge is not needed or used in the JSON implementation, wherein the ResourceResponse is created in a different way that allows the m_nsResponse to be created without forcing it with this dummy call.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.cpp:156
&gt; &gt; +        return WTF::Optional&lt;CaptureEvent&gt;();
&gt; 
&gt; Nullopt
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.cpp:195
&gt; &gt; +        return WTF::Optional&lt;CaptureEvent&gt;();
&gt; 
&gt; Nullopt

Ok. Ok. :-)

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.cpp:197
&gt; &gt; +    return WTF::Optional&lt;CaptureEvent&gt;(CaptureEvent(FinishedEvent(WTFMove(time), WTFMove(error))));
&gt; 
&gt; WTF::Optional&lt;...&gt; not needed, I think.

I think this was supposed to follow the form of the other similar methods that resurrect stored events and call the wrap() function to take care of all that nesting. And I think I tried it without the WTF::Optional&lt;...&gt; and it didn&apos;t work.

Since this code is based on IPC::Decoder, it&apos;s all getting replaced in the JSON version anyway.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.h:72
&gt; &gt; +    CaptureTimeType time;
&gt; 
&gt; Is this used in this patch?  It seems like it&apos;s just encoded, decoded, and
&gt; moved around.  It would be good to have.

It&apos;s not currently used. It&apos;s there because we intend to use it to optionally replay events at the same rate they were recorded.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.h:88
&gt; &gt; +        : TimedEvent(), response(response) { }
&gt; 
&gt; response should be on its own line here and elsewhere in this file.

OK.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureLogging.h:42
&gt; &gt; +#define DEBUG_LOG(...)                  ((void) 0)
&gt; 
&gt; Lots of unnecessary spaces.
&gt; Also, why not just define it to be nothing?

The spaces are there to line up the definitions. For me, it makes it easier to read. It also helps me see the differences between similar macros.

Defining a function-like macro to ((void) 0) is a standard technique for accounting for the trailing semi-colon. If you don&apos;t account for it, some compilers will complain about &quot;if&quot; or &quot;else&quot; bodies that contain a bare semi-colon, or about seeing two semi-colons in a row (one from the now-missing logging line, and one from the previous statement). You can find other examples in WebKit by searching for &quot;((void)0)&quot;.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:71
&gt; &gt; +void Manager::initialize(
&gt; 
&gt; Let&apos;s just put all the parameters on the same line.

OK.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:90
&gt; &gt; +void Manager::terminate()
&gt; &gt; +{
&gt; &gt; +}
&gt; 
&gt; This doesn&apos;t do anything.

It used to. It used to close the various logging files that I open up and write to over the course of recording or replaying. The code in there got removed when I added the FileHandle class to manage the lifetime of the open files. I kept the terminate function around in case I came up with a new use for it. And come to think of it, I may actually still need it for closing files. Since the Manager is a NeverDestroyed singleton, it&apos;s destructor will never be called. That means that the FileHandle objects managing the lifetime of my files will never be destroyed. Which means that the files they manage will not be properly closed. I don&apos;t know if this will lead to information not getting flushed to disk or not.

&gt; Why not just make the Manager a member variable
&gt; of the NetworkProcess singleton?

I guess that could be done. What are the advantages or reasons for doing so?

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:160
&gt; &gt; +int Manager::fuzzyMatchURLs(
&gt; 
&gt; parameters on same line.

OK.

&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:167
&gt; &gt; +#if 0
&gt; 
&gt; :(

Gone in the JSON version.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:215
&gt; &gt; +    int score = 0;
&gt; 
&gt; can score ever be negative?

Yes, if the URLs are sufficiently different (I add to the score on positive correlations and subtract from it on mismatches). I think I have a note somewhere considering completely ignoring results with negative scores, regardless of whether or not they are considered the best match.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:402
&gt; &gt; +    WTF::MD5 md5;
&gt; 
&gt; This is a strange hash function.  Why MD5?  We already have StringHash and
&gt; StringHasher.  Were they lacking something?

I&apos;d never known MD5 to be odd or of it being insufficient for the task I&apos;m using it for. Mostly I&apos;m using it because the approach I&apos;m using for naming files is based on code I was originally using from Apache mod_cache. I was using that code because of an early desire to be compatible with our current PLT data corpus, which is stored using that facility. I later moved away from that decision, but the MD5 code stayed because there was no reason to change it. Additionally, I was not familiar with StringHash and/or StringHasher. I could look into them but am not sure they&apos;ll be what I need. Going forward, I may be creating a hash out of more than a single string. I&apos;ll need to throw several strings into the hash, and MD5 handles that type of usage.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:417
&gt; &gt; +    String result;
&gt; 
&gt; StringBuilder.

OK. Looking into that, I see that String::append() is considered inefficient and slated for possible removal. I didn&apos;t know that.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.h:85
&gt; &gt; +    int fuzzyMatchURLs(
&gt; 
&gt; Is the need for fuzzy matching driven by any real-world examples?  I could
&gt; see it leading to nondeterministic behavior, which could cause strange
&gt; things to happen when measuring performance data.  Let&apos;s talk in person
&gt; about this.

Yes, this is driven be real-world cases. In addition to cache-busters as you noted in a follow-up, URLs can contain session IDs and/or analytics such as time screen size. One of the main motivations for implementing this new record/replay facility was to address these dynamic URLs in a way that couldn&apos;t properly be done with the current Apache + mod_rewrite + hand-tweaked corpus approach.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkDataTaskReplay.h:92
&gt; &gt; +    enum { kPositionNotSpecified = -1 };
&gt; 
&gt; This is never used.

Yeah, I don&apos;t know what was up with that. It&apos;s been removed in the JSON version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254501</commentid>
    <comment_count>17</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-11-29 15:04:31 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Currently, the NetworkCapture facility is optionally included. I&apos;m not sure
&gt; what maintaining that would do to the above. Wouldn&apos;t it end up looking like
&gt; the following?
&gt; 
&gt; #if ENABLE(NETWORK_CAPTURE)
&gt; switch (NetworkCapture::Manager::singleton().state()) {
&gt; case Disabled:
&gt;     // This is the common case.
&gt;     doRegularStuff();
&gt;     return;
&gt; case Recording:
&gt;     doRecordingStuff();
&gt;     return;
&gt; case Replaying:
&gt;     doReplayingStuff();
&gt;     return;
&gt; }
&gt; #else
&gt;     doRegularStuff();
&gt; #endif
It would.  I think this is straightforward and efficient.

&gt; &gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureCachedResource.cpp:84
&gt; &gt; &gt; +        m_queryParameters = WebCore::URLParser::parseURLEncodedForm(url().query());
&gt; &gt; 
&gt; &gt; I intended this to only be used with URLSearchParams which takes any string
&gt; &gt; as input.  This takes a URL&apos;s query, which has already been parsed.  I&apos;m not
&gt; &gt; sure what I think about the use here.
&gt; 
&gt; What&apos;s the alternative for getting the query parameters from the URL in a
&gt; form where I can examine each key/value pair?
The URL query has been parsed as a query, but not as key/value pairs until we make a URLEncodedForm.  This is exactly what that function is for.  Disregard my comment.

&gt; &gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureCachedResource.cpp:130
&gt; &gt; &gt; +        return WTF::Optional&lt;CaptureEvent&gt;();
&gt; &gt; 
&gt; &gt; Isn&apos;t this the same as Nullopt?
&gt; 
&gt; I&apos;m not familiar with Nullopt and don&apos;t find it in WebKit sources anywhere.
&gt; I see std::nullopt on cppreference.com. Is that what you&apos;re referring to?
&gt; I&apos;ve not used this before. I now see it used liberally through WebKit. I
&gt; believe you&apos;re suggesting I use &quot;return std::nullopt&quot;? I could do that, but
&gt; Antti suggested using &quot;return { }&quot;. Is one preferred over the other?
I find 656 instances of &quot;Nullopt&quot; in WebKit, unless someone did something big in the last week since I last updated.  It means the same as std::nullopt, but with WTF::Optional instead of std::optional.  I prefer Nullopt over { }.  Others may disagree.

&gt; &gt; If you have a JSON-based implementation, should we even land this binary
&gt; &gt; implementation?
&gt; 
&gt; I could upload the JSON version if you want. I was working on the JSON
&gt; version as a follow-up to the binary version in order to keep a pipeline of
&gt; changes going. But with the Thanksgiving holiday holding up reviews for a
&gt; while, the JSON implementation came in before this current patch could be
&gt; fully reviewed.
Let&apos;s see the JSON version.  Do we base-64 encode binary data or something?

&gt; &gt; Why not just make the Manager a member variable
&gt; &gt; of the NetworkProcess singleton?
&gt; 
&gt; I guess that could be done. What are the advantages or reasons for doing so?
That would make more organizational sense.  Unfortunately we still do some networking in the WebProcess, so I don&apos;t think we can actually do this right now.

&gt; &gt; This is a strange hash function.  Why MD5?  We already have StringHash and
&gt; &gt; StringHasher.  Were they lacking something?
&gt; 
&gt; I&apos;d never known MD5 to be odd or of it being insufficient for the task I&apos;m
&gt; using it for. Mostly I&apos;m using it because the approach I&apos;m using for naming
&gt; files is based on code I was originally using from Apache mod_cache. I was
&gt; using that code because of an early desire to be compatible with our current
&gt; PLT data corpus, which is stored using that facility. I later moved away
&gt; from that decision, but the MD5 code stayed because there was no reason to
&gt; change it. Additionally, I was not familiar with StringHash and/or
&gt; StringHasher. I could look into them but am not sure they&apos;ll be what I need.
&gt; Going forward, I may be creating a hash out of more than a single string.
&gt; I&apos;ll need to throw several strings into the hash, and MD5 handles that type
&gt; of usage.
I was just thinking of other hash functions I&apos;ve reviewed, like IDBDatabaseIdentifier::hash which combines hashes of other things.  I was just curious if you explicitly chose MD5 because of some cool properties instead of SHA1 or SHA256 or one of our custom hashes.  I guess it&apos;s not a big deal here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254528</commentid>
    <comment_count>18</comment_count>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-11-29 15:39:59 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; I find 656 instances of &quot;Nullopt&quot; in WebKit, unless someone did something
&gt; big in the last week since I last updated.  It means the same as
&gt; std::nullopt, but with WTF::Optional instead of std::optional.  I prefer
&gt; Nullopt over { }.  Others may disagree.

Yes, the contents of Optional.h was replaced with something more akin to std::optional a few days ago. The latter is now used instead of WTF::Optional. I guess WTF::Nullopt was changed to std::nullopt at the same time.

&gt; Let&apos;s see the JSON version.

OK, I&apos;ll upload a new version once I&apos;ve finished incorporating the previous review comments.

&gt; Do we base-64 encode binary data or something?

It is currently base-64 encoded. I&apos;ve discussed plans with Gavin regarding possibly splitting the raw data out into its own file if the base-64 encoding/decoding is too expensive.

&gt; I was just thinking of other hash functions I&apos;ve reviewed, like
&gt; IDBDatabaseIdentifier::hash which combines hashes of other things.  I was
&gt; just curious if you explicitly chose MD5 because of some cool properties
&gt; instead of SHA1 or SHA256 or one of our custom hashes.  I guess it&apos;s not a
&gt; big deal here.

No deep purpose here. I just started with the mod_cache code (which used MD5) and evolved it. I could use SHA1 or SHA256, but the main need for hashing here is to create a unique name of reasonable size with legal characters based on the URL (and, in the future, some other identifying data). I don&apos;t need to avoid collision attacks or any of the other reasons why SHA is favored over MD5. And MD5 is faster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255039</commentid>
    <comment_count>19</comment_count>
      <attachid>295782</attachid>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-11-30 16:16:58 -0800</bug_when>
    <thetext>Created attachment 295782
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255042</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-30 16:19:12 -0800</bug_when>
    <thetext>Attachment 295782 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255043</commentid>
    <comment_count>21</comment_count>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-11-30 16:19:51 -0800</bug_when>
    <thetext>This new patch includes the initial JSON implementation that uses the header-only JSON library. Gavin wanted me to get a version up for review sooner than later, suggesting that we can revisit the storage mechanism (which can include a binary format, one that is XML-based, one that uses JSC&apos;s JSON facilities, etc.) in a subsequent update.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255077</commentid>
    <comment_count>22</comment_count>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-11-30 17:29:21 -0800</bug_when>
    <thetext>The mac-debug build failed because of:

/Volumes/Data/EWS/WebKit/WebKitBuild/Debug/DerivedSources/WebCore/JSInternalSettingsGenerated.cpp:986:10: error: no member named &apos;setAsyncImageDecodingEnabled&apos; in &apos;WebCore::InternalSettingsGenerated&apos;
    impl.setAsyncImageDecodingEnabled(WTFMove(asyncImageDecodingEnabled));
    ~~~~ ^
1 error generated.

It&apos;s not apparent to me how this is related to my patch. I see that setAsyncImageDecodingEnabled was removed in 209159 just a couple of hours ago, so perhaps there&apos;s a build lag.

The gtk-wk2 build failed with:

g++-4.9: error: ../../Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp: No such file or directory
g++-4.9: fatal error: no input files
compilation terminated.

And others. I&apos;m not sure why this is happening. I&apos;ve updated CMakeLists.txt with my new files. And a previous patch successfully built with the same change to CMakeLists.txt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255087</commentid>
    <comment_count>23</comment_count>
      <attachid>295800</attachid>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-11-30 17:40:21 -0800</bug_when>
    <thetext>Created attachment 295800
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255089</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-30 17:42:58 -0800</bug_when>
    <thetext>Attachment 295800 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255817</commentid>
    <comment_count>25</comment_count>
      <attachid>295800</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-12-02 12:32:56 -0800</bug_when>
    <thetext>Comment on attachment 295800
Patch

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

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureResource.h:55
&gt; +public:

This public is unnecessary.

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureTypes.h:36
&gt; +class FileHandle final {
&gt; +public:

This seems like an odd file to define a primitive like this.  It should probably go in its own file, and probably go to WebCore.

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureTypes.h:95
&gt; +template &lt;typename ... Types&gt;
&gt; +struct TypeHolder {

This seems to duplicate a bit of what we have in Brigand.h. I think you can brigand::list&lt;...&gt; and brigand::for_each&lt;list&gt;(...).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255826</commentid>
    <comment_count>26</comment_count>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-12-02 12:43:29 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; Comment on attachment 295800 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=295800&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureResource.h:55
&gt; &gt; +public:
&gt; 
&gt; This public is unnecessary.

I tend to use additional public/private statements to serve as section dividers -- to break apart different areas of the interface. But I&apos;ll take it out since it sounds like that approach is not part of WebKit&apos;s MO.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureTypes.h:36
&gt; &gt; +class FileHandle final {
&gt; &gt; +public:
&gt; 
&gt; This seems like an odd file to define a primitive like this.  It should
&gt; probably go in its own file, and probably go to WebCore.

I totally agree. Antti suggested that it could be expanded a little bit, too. I figured I would do that work and move it into FileSystem.h in a follow-up patch.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureTypes.h:95
&gt; &gt; +template &lt;typename ... Types&gt;
&gt; &gt; +struct TypeHolder {
&gt; 
&gt; This seems to duplicate a bit of what we have in Brigand.h. I think you can
&gt; brigand::list&lt;...&gt; and brigand::for_each&lt;list&gt;(...).

Cool. I wasn&apos;t familiar with Brigand.h. I&apos;ll look into it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1256764</commentid>
    <comment_count>27</comment_count>
      <attachid>295800</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-12-05 23:13:18 -0800</bug_when>
    <thetext>Comment on attachment 295800
Patch

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

Let&apos;s land this after addressing these comments

&gt; Source/WebKit2/ChangeLog:150
&gt; +        * NetworkProcess/capture/json.hpp: Added.

After discussing with Gavin, I&apos;m ok with us having this in WebKit for short-term experimentation for this project, but it should have comments added saying not to use it for anything else, especially not anything a user would ever run.  We should also put a FIXME in saying to make JSONParse use callbacks for constructing objects like our YarrParser does, and replace this use and other uses including the JSONParse call in ContentExtensionParser.cpp

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.cpp:50
&gt; +static Headers copyHeaders(const WebCore::HTTPHeaderMap&amp; httpHeaders)

HTTPHeaderMap::isolatedCopy() does the same thing as this.

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.cpp:173
&gt; +using json = nlohmann::basic_json&lt;&gt;;

grumble, grumble, grumble
This would be a good place for a comment saying we should use JSONParse after its generalization is complete.

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.cpp:358
&gt; +        (void) base64Decode(str.c_str(), str.size(), data);

Let&apos;s assert the return value of this is true instead of the (void)
This should probably return an optional value, but let&apos;s not do that in this patch.

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.h:65
&gt; +struct KeyValuePair {

Can we just use std::pair&lt;String, String&gt;?  This class seems excessive.

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.h:75
&gt; +struct ResourceRequest {

I don&apos;t particularly like using these names because they already exist in the WebCore namespace.  I know, that&apos;s what namespaces are for, but I often search for class names, and IDEs get confused.  What about just Request, Response, and Error?

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.h:207
&gt; +struct FinishedEvent final : public TimedEvent {

Seems like a lot of structs in one file.

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:92
&gt; +    // DEBUG_LOG(&quot;URL = %{public}s&quot;, DEBUG_STR(request.url().string()));

uncomment or remove

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:120
&gt; +        // DEBUG_LOG(&quot;Found exact match: %{public}s&quot;, DEBUG_STR(lower-&gt;url().string()));

ditto

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:407
&gt; +    for (int dirNum = 0; dirNum &lt; kNumberOfParentDirectories; ++dirNum) {

This loop seems unnecessary since kNumberOfParentDirectories is always exactly 1.

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:496
&gt; +bool Manager::readFile(const String&amp; filePath, Vector&lt;Vector&lt;String&gt;&gt;&amp; lines)

This should return a std::optional&lt;Vector&lt;Vector&lt;String&gt;&gt;&gt;

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:499
&gt; +    WebCore::MappedFileData file(filePath, success);

I&apos;m not sure it&apos;s necessary to find a consecutive section of the virtual address space large enough for the file, especially since all we need is a bunch of little pieces of the file.  I think this would be better implemented with openFile/readFromFile/closeFile

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureRecorder.cpp:74
&gt; +    // TODO: Is there a better response to receiving a multi-part resource?

multipart responses probably won&apos;t be common in any content we&apos;re going to be recording.  It&apos;s mostly used for webcams these days.  If we find it&apos;s necessary or useful, we can make new abstractions.

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureRecorder.cpp:140
&gt; +        if (handle.writeToFile(asString.c_str(), asString.size() + 1) == -1) {

Do we want to write the null-terminating character to file?

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureTypes.h:35
&gt; +class FileHandle final {

I don&apos;t think this adds much that PlatformFileHandle doesn&apos;t already do, but maybe that&apos;s just the old C programmer in me.  It doesn&apos;t do anything cool like handle errors, keep state, buffer, have stream operators, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1256918</commentid>
    <comment_count>28</comment_count>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-12-06 12:56:26 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; Comment on attachment 295800 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=295800&amp;action=review
&gt; 
&gt; Let&apos;s land this after addressing these comments
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:150
&gt; &gt; +        * NetworkProcess/capture/json.hpp: Added.
&gt; 
&gt; After discussing with Gavin, I&apos;m ok with us having this in WebKit for
&gt; short-term experimentation for this project, but it should have comments
&gt; added saying not to use it for anything else, especially not anything a user
&gt; would ever run.  We should also put a FIXME in saying to make JSONParse use
&gt; callbacks for constructing objects like our YarrParser does, and replace
&gt; this use and other uses including the JSONParse call in
&gt; ContentExtensionParser.cpp

OK.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.cpp:50
&gt; &gt; +static Headers copyHeaders(const WebCore::HTTPHeaderMap&amp; httpHeaders)
&gt; 
&gt; HTTPHeaderMap::isolatedCopy() does the same thing as this.

This function copies from HTTPHeaderMap to Headers, which is a different structure. Structures like Headers, Request, Response, and Error were defined to help bridge the transition between WebKit types and a json library that works best with STL-like structures.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.cpp:173
&gt; &gt; +using json = nlohmann::basic_json&lt;&gt;;
&gt; 
&gt; grumble, grumble, grumble
&gt; This would be a good place for a comment saying we should use JSONParse
&gt; after its generalization is complete.

OK.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.cpp:358
&gt; &gt; +        (void) base64Decode(str.c_str(), str.size(), data);
&gt; 
&gt; Let&apos;s assert the return value of this is true instead of the (void)
&gt; This should probably return an optional value, but let&apos;s not do that in this
&gt; patch.

OK.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.h:65
&gt; &gt; +struct KeyValuePair {
&gt; 
&gt; Can we just use std::pair&lt;String, String&gt;?  This class seems excessive.

OK.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.h:75
&gt; &gt; +struct ResourceRequest {
&gt; 
&gt; I don&apos;t particularly like using these names because they already exist in
&gt; the WebCore namespace.  I know, that&apos;s what namespaces are for, but I often
&gt; search for class names, and IDEs get confused.  What about just Request,
&gt; Response, and Error?

OK.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.h:207
&gt; &gt; +struct FinishedEvent final : public TimedEvent {
&gt; 
&gt; Seems like a lot of structs in one file.

Are you suggesting splitting them out into ten different files? I&apos;m not sure what we&apos;d gain from that. These structs tend to be used in tandem, so clients of them would end up #including ten files instead of one.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:92
&gt; &gt; +    // DEBUG_LOG(&quot;URL = %{public}s&quot;, DEBUG_STR(request.url().string()));
&gt; 
&gt; uncomment or remove
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:120
&gt; &gt; +        // DEBUG_LOG(&quot;Found exact match: %{public}s&quot;, DEBUG_STR(lower-&gt;url().string()));
&gt; 
&gt; ditto

These line exist because they were useful during bring-up, but are now commented out because they have served their purpose. I kept them around because I can imagine their being useful again when we revisit the fuzzy matching and try to make it better. If we remove them, someone will just have to add them back when needed.

How about my changing them to DEBUG_LOG_VERBOSE, which will be a no-op in the normal case but could be re-enabled if/when needed?

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:407
&gt; &gt; +    for (int dirNum = 0; dirNum &lt; kNumberOfParentDirectories; ++dirNum) {
&gt; 
&gt; This loop seems unnecessary since kNumberOfParentDirectories is always
&gt; exactly 1.

OK. That loop is an artifact of (a) the fact that I originally adopted the code from Apache mod_cache as part of being compatible with their disk format, and (b) that I didn&apos;t know if we&apos;d be staying with the xx/xxxxx... format specifically. But we&apos;re no longer trying to be compatible with Apache, and the xx/xxxxx... format looks like it will hold up, so I&apos;ll simplify the code.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:496
&gt; &gt; +bool Manager::readFile(const String&amp; filePath, Vector&lt;Vector&lt;String&gt;&gt;&amp; lines)
&gt; 
&gt; This should return a std::optional&lt;Vector&lt;Vector&lt;String&gt;&gt;&gt;

OK.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:499
&gt; &gt; +    WebCore::MappedFileData file(filePath, success);
&gt; 
&gt; I&apos;m not sure it&apos;s necessary to find a consecutive section of the virtual
&gt; address space large enough for the file, especially since all we need is a
&gt; bunch of little pieces of the file.  I think this would be better
&gt; implemented with openFile/readFromFile/closeFile

We&apos;ll be using this record/replay facility not only for the PLT, but for the PLUM as well. The idea (suggested by Stephanie and Gavin) was to use an approach that wouldn&apos;t affect our memory-reporting facilities. Doing an open/read/close would create some dirty memory that would then be reported. If we map the file, not only will it not get reported, but the feeling is that mapping the file rather than reading it would be faster.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureRecorder.cpp:140
&gt; &gt; +        if (handle.writeToFile(asString.c_str(), asString.size() + 1) == -1) {
&gt; 
&gt; Do we want to write the null-terminating character to file?

Yes. The json library I&apos;m using reads until a terminating NUL when reading from a string. If I didn&apos;t write the NUL to the file, I&apos;d have to copy the substring that I was interested in from the file (identifying its end in some way) and add a NUL to it. Rather than do all that, I just write the NUL to the file. I can add a comment to that effect if you think it would help.

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureTypes.h:35
&gt; &gt; +class FileHandle final {
&gt; 
&gt; I don&apos;t think this adds much that PlatformFileHandle doesn&apos;t already do, but
&gt; maybe that&apos;s just the old C programmer in me.  It doesn&apos;t do anything cool
&gt; like handle errors, keep state, buffer, have stream operators, etc.

The original intent of the FileHandle was to merely manage the closing of the PlatformFileHandle in the destructor. I then added openFile and readFromFile because &quot;file.readFromFile(...)&quot; seemed better than &quot;WebCore::readFromFile(file, ...)&quot;. I added writeToFile for symmetry. I added closeFile when I realized that I needed a way to manually close the file because my destructor wasn&apos;t being called. I will probably add an ensureOpenFile at Antti&apos;s suggestion, and flesh it out more and move it to FileSystem.h at Sam&apos;s suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1256994</commentid>
    <comment_count>29</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-12-06 14:58:35 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; &gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.h:207
&gt; &gt; &gt; +struct FinishedEvent final : public TimedEvent {
&gt; &gt; 
&gt; &gt; Seems like a lot of structs in one file.
&gt; 
&gt; Are you suggesting splitting them out into ten different files?
Not necessarily.  We usually have one header per class, but I think this is fine.
&gt; 
&gt; &gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:92
&gt; &gt; &gt; +    // DEBUG_LOG(&quot;URL = %{public}s&quot;, DEBUG_STR(request.url().string()));
&gt; &gt; 
&gt; &gt; uncomment or remove
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:120
&gt; &gt; &gt; +        // DEBUG_LOG(&quot;Found exact match: %{public}s&quot;, DEBUG_STR(lower-&gt;url().string()));
&gt; &gt; 
&gt; &gt; ditto
&gt; 
&gt; These line exist because they were useful during bring-up, but are now
&gt; commented out because they have served their purpose. I kept them around
&gt; because I can imagine their being useful again when we revisit the fuzzy
&gt; matching and try to make it better. If we remove them, someone will just
&gt; have to add them back when needed.
&gt; 
&gt; How about my changing them to DEBUG_LOG_VERBOSE, which will be a no-op in
&gt; the normal case but could be re-enabled if/when needed?
Sure.  Commented out debug logs are clutter.
&gt; &gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:499
&gt; &gt; &gt; +    WebCore::MappedFileData file(filePath, success);
&gt; &gt; 
&gt; &gt; I&apos;m not sure it&apos;s necessary to find a consecutive section of the virtual
&gt; &gt; address space large enough for the file, especially since all we need is a
&gt; &gt; bunch of little pieces of the file.  I think this would be better
&gt; &gt; implemented with openFile/readFromFile/closeFile
&gt; 
&gt; We&apos;ll be using this record/replay facility not only for the PLT, but for the
&gt; PLUM as well. The idea (suggested by Stephanie and Gavin) was to use an
&gt; approach that wouldn&apos;t affect our memory-reporting facilities. Doing an
&gt; open/read/close would create some dirty memory that would then be reported.
&gt; If we map the file, not only will it not get reported, but the feeling is
&gt; that mapping the file rather than reading it would be faster.
We could read it to buffers that are fixed size and only on the stack.  That wouldn&apos;t do anything to the heap memory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1257000</commentid>
    <comment_count>30</comment_count>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-12-06 15:06:49 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; We could read it to buffers that are fixed size and only on the stack.  That
&gt; wouldn&apos;t do anything to the heap memory.

If I understand your proposal correctly, the amount of work to take that approach would be pretty large. We&apos;re reading JSON strings from this file. These strings could be large since they include the resource data. This in turn means that the JSON parser would have to support paging in subsets of the string as needed, since not all of the string could fit in this fixed-size buffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1257022</commentid>
    <comment_count>31</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-12-06 15:33:06 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #29)
&gt; &gt; We could read it to buffers that are fixed size and only on the stack.  That
&gt; &gt; wouldn&apos;t do anything to the heap memory.
&gt; 
&gt; If I understand your proposal correctly, the amount of work to take that
&gt; approach would be pretty large. We&apos;re reading JSON strings from this file.
&gt; These strings could be large since they include the resource data. This in
&gt; turn means that the JSON parser would have to support paging in subsets of
&gt; the string as needed, since not all of the string could fit in this
&gt; fixed-size buffer.

Whatever.  If you&apos;re ok with the current mmap approach, I&apos;m ok with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1257206</commentid>
    <comment_count>32</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-12-06 23:49:33 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; Comment on attachment 295800 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=295800&amp;action=review
&gt; 
&gt; Let&apos;s land this after addressing these comments
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:150
&gt; &gt; +        * NetworkProcess/capture/json.hpp: Added.
&gt; 
&gt; After discussing with Gavin, I&apos;m ok with us having this in WebKit for
&gt; short-term experimentation for this project, but it should have comments
&gt; added saying not to use it for anything else, especially not anything a user
&gt; would ever run.  We should also put a FIXME in saying to make JSONParse use
&gt; callbacks for constructing objects like our YarrParser does, and replace
&gt; this use and other uses including the JSONParse call in
&gt; ContentExtensionParser.cpp
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.cpp:50
&gt; &gt; +static Headers copyHeaders(const WebCore::HTTPHeaderMap&amp; httpHeaders)
&gt; 
&gt; HTTPHeaderMap::isolatedCopy() does the same thing as this.
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.cpp:173
&gt; &gt; +using json = nlohmann::basic_json&lt;&gt;;
&gt; 
&gt; grumble, grumble, grumble
&gt; This would be a good place for a comment saying we should use JSONParse
&gt; after its generalization is complete.

I wonder, would it be possible to move JSONParse to WTF after the generalization? or will not be so general?

&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.cpp:358
&gt; &gt; +        (void) base64Decode(str.c_str(), str.size(), data);
&gt; 
&gt; Let&apos;s assert the return value of this is true instead of the (void)
&gt; This should probably return an optional value, but let&apos;s not do that in this
&gt; patch.
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.h:65
&gt; &gt; +struct KeyValuePair {
&gt; 
&gt; Can we just use std::pair&lt;String, String&gt;?  This class seems excessive.
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.h:75
&gt; &gt; +struct ResourceRequest {
&gt; 
&gt; I don&apos;t particularly like using these names because they already exist in
&gt; the WebCore namespace.  I know, that&apos;s what namespaces are for, but I often
&gt; search for class names, and IDEs get confused.  What about just Request,
&gt; Response, and Error?
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureEvent.h:207
&gt; &gt; +struct FinishedEvent final : public TimedEvent {
&gt; 
&gt; Seems like a lot of structs in one file.
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:92
&gt; &gt; +    // DEBUG_LOG(&quot;URL = %{public}s&quot;, DEBUG_STR(request.url().string()));
&gt; 
&gt; uncomment or remove
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:120
&gt; &gt; +        // DEBUG_LOG(&quot;Found exact match: %{public}s&quot;, DEBUG_STR(lower-&gt;url().string()));
&gt; 
&gt; ditto
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:407
&gt; &gt; +    for (int dirNum = 0; dirNum &lt; kNumberOfParentDirectories; ++dirNum) {
&gt; 
&gt; This loop seems unnecessary since kNumberOfParentDirectories is always
&gt; exactly 1.
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:496
&gt; &gt; +bool Manager::readFile(const String&amp; filePath, Vector&lt;Vector&lt;String&gt;&gt;&amp; lines)
&gt; 
&gt; This should return a std::optional&lt;Vector&lt;Vector&lt;String&gt;&gt;&gt;
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:499
&gt; &gt; +    WebCore::MappedFileData file(filePath, success);
&gt; 
&gt; I&apos;m not sure it&apos;s necessary to find a consecutive section of the virtual
&gt; address space large enough for the file, especially since all we need is a
&gt; bunch of little pieces of the file.  I think this would be better
&gt; implemented with openFile/readFromFile/closeFile
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureRecorder.cpp:74
&gt; &gt; +    // TODO: Is there a better response to receiving a multi-part resource?
&gt; 
&gt; multipart responses probably won&apos;t be common in any content we&apos;re going to
&gt; be recording.  It&apos;s mostly used for webcams these days.  If we find it&apos;s
&gt; necessary or useful, we can make new abstractions.
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureRecorder.cpp:140
&gt; &gt; +        if (handle.writeToFile(asString.c_str(), asString.size() + 1) == -1) {
&gt; 
&gt; Do we want to write the null-terminating character to file?
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureTypes.h:35
&gt; &gt; +class FileHandle final {
&gt; 
&gt; I don&apos;t think this adds much that PlatformFileHandle doesn&apos;t already do, but
&gt; maybe that&apos;s just the old C programmer in me.  It doesn&apos;t do anything cool
&gt; like handle errors, keep state, buffer, have stream operators, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1257335</commentid>
    <comment_count>33</comment_count>
      <attachid>296410</attachid>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-12-07 13:23:38 -0800</bug_when>
    <thetext>Created attachment 296410
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1257336</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-07 13:25:18 -0800</bug_when>
    <thetext>Attachment 296410 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/capture/NetworkCaptureManager.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1257338</commentid>
    <comment_count>35</comment_count>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2016-12-07 13:25:38 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; &gt; This would be a good place for a comment saying we should use JSONParse
&gt; &gt; after its generalization is complete.
&gt; 
&gt; I wonder, would it be possible to move JSONParse to WTF after the
&gt; generalization? or will not be so general?

I&apos;m hoping to the be the one to do this work. I&apos;ll keep your suggestion in mind. I have no idea what I&apos;ll find once I get in there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1257351</commentid>
    <comment_count>36</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-12-07 13:50:05 -0800</bug_when>
    <thetext>JSONParse should be general enough to not depend on JavaScriptCore kind of like YarrParser, but I don&apos;t see a reason to move it.  I don&apos;t see a reason not to move it, either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1257358</commentid>
    <comment_count>37</comment_count>
      <attachid>296410</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-12-07 13:56:54 -0800</bug_when>
    <thetext>Comment on attachment 296410
Patch

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

&gt; Source/WebKit2/NetworkProcess/capture/NetworkCaptureTypes.h:35
&gt; +class FileHandle final {

Let&apos;s move this to WebCore in a file called FileHandle.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1257454</commentid>
    <comment_count>38</comment_count>
      <attachid>296410</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-07 16:44:49 -0800</bug_when>
    <thetext>Comment on attachment 296410
Patch

Clearing flags on attachment: 296410

Committed r209498: &lt;http://trac.webkit.org/changeset/209498&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1257455</commentid>
    <comment_count>39</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-07 16:44:57 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1257659</commentid>
    <comment_count>40</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-12-08 00:12:02 -0800</bug_when>
    <thetext>This broke the iOS debug build. https://build.webkit.org/builders/Apple%20iOS%2010%20Simulator%20Debug%20%28Build%29/builds/2458/steps/compile-webkit/logs/stdio

Speculative fix in https://trac.webkit.org/changeset/209530
Please investigate before re-enabling logs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258092</commentid>
    <comment_count>41</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-12-08 23:49:39 -0800</bug_when>
    <thetext>(In reply to comment #36)
&gt; JSONParse should be general enough to not depend on JavaScriptCore kind of
&gt; like YarrParser, but I don&apos;t see a reason to move it.  I don&apos;t see a reason
&gt; not to move it, either.

I&apos;m currently working on WebDriver implementation for the GTK+ port. The Web Driver process needs to parse JSON, so I made it link to JSC only to use JSONParse (well, actually InspectorValues). If we had a general purpose JSON parser in WTF, the Web Driver process would only depend on WTF. Not a big deal in any case.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294198</attachid>
            <date>2016-11-08 15:55:16 -0800</date>
            <delta_ts>2016-11-16 12:32:51 -0800</delta_ts>
            <desc>This is not entirely tested, so doesn&apos;t necessarily completely work. I&apos;m uploading this early patch for early review comments since there&apos;s a significant amount of work here.</desc>
            <filename>bug-164527-20161108155106.patch</filename>
            <type>text/plain</type>
            <size>147020</size>
            <attacher name="Keith Rollin">krollin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4NDIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDM5ZGJiOGI1ZWE3OGMyMTMyNDZhY2M0
YmU2ZWY0NTA2YzczNDQyZGIuLmM5OTQzZDdkYTA4OWU4MDQ1MTM2M2M1YTdhMjlmZWU3MDZkMzRh
Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTYtMTEtMDggIEtlaXRoIFJvbGxpbiAgPGtyb2xs
aW5AYXBwbGUuY29tPgorCisgICAgICAgIE5ldHdvcmsgZXZlbnQgcmVjb3JkL3JlcGxheQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NTI3CisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8yOTE2ODE1Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBSRUxFQVNFX0xPRy1iYXNlZCBiYWNrdHJhY2Uu
CisKKyAgICAgICAgKiB3dGYvQXNzZXJ0aW9ucy5jcHA6CisgICAgICAgICogd3RmL0Fzc2VydGlv
bnMuaDoKKwogMjAxNi0xMS0wNSAgS29uc3RhbnRpbiBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgu
cnU+CiAKICAgICAgICAgRml4ZWQgY29tcGlsYXRpb24gb2YgTExJbnQgd2l0aCBNaW5HVwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGEyMzdmOWE4N2Q4NDdjYzQxZjEyNWYwZGM5Y2U4YzhkNzNjZjJmZjcuLjc3Y2U4
MDE4MmE2ZmUyZjU0ZDRmY2VhZmU5Y2I3M2M1ZDQ0OTRlMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxOSBAQAorMjAxNi0xMS0wOCAgS2VpdGggUm9sbGluICA8a3JvbGxpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgTmV0d29yayBldmVudCByZWNvcmQvcmVwbGF5CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ1MjcKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzI5MTY4MTU3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEV4cG9ydCBuZWVkZWQgZmFjaWxpdGllcy4KKworICAgICAgICBObyBuZXcgdGVzdHMg
LS0gbm8gZnVuY3Rpb25hbGl0eSBhZGRlZCwgcmVtb3ZlZCwgb3IgY2hhbmdlZC4KKworICAgICAg
ICAqIHBsYXRmb3JtL0ZpbGVTeXN0ZW0uaDogRXhwb3J0IHJlYWRGcm9tRmlsZS4KKyAgICAgICAg
KiBwbGF0Zm9ybS9VUkxQYXJzZXIuaDogRXhwb3J0IHBhcnNlVVJMRW5jb2RlZEZvcm0uCisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5oOiBFeHBvcnQgZXh0cmFjdE1JTUVU
eXBlRnJvbU1lZGlhVHlwZS4KKwogMjAxNi0xMS0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBw
bGUuY29tPgogCiAgICAgICAgIFdURjo6UGFya2luZ0xvdCBzaG91bGQgc3RvcCB1c2luZyBzdGQ6
OmNocm9ubyBiZWNhdXNlIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbiBjYXN0cyBhcmUgcHJvbmUgdG8g
b3ZlcmZsb3dzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNDYyZDk3OGE3YWNiZjRlNDAzMzhjZjRiMWJhOTVkMzlm
YzdlMWU3Yi4uOTg4YzRjN2RkMjEzNzg3MmU5MmVjZTc1OTA3MWNmYjNlNzFjZDgxYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEyOSBAQAorMjAxNi0xMS0wOCAgS2VpdGggUm9sbGluICA8a3JvbGxp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgTmV0d29yayBldmVudCByZWNvcmQvcmVwbGF5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ1MjcKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzI5MTY4MTU3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBXZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUv
Ki4gVXBkYXRlIE5ldHdvcmtMb2FkIHRvIGludm9rZQorICAgICAgICByZWNvcmQvcmVwbGF5Lgor
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IEFkZCBuZXcgZmlsZXMuCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwOiBDcmVhdGUgYW5kIHVzZSBOZXR3b3JrOjpDYXB0
dXJlOjpSZWNvcmQgYW5kIFJlcGxheSBvYmplY3RzLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
TG9hZDo6TmV0d29ya0xvYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6Y29udGlu
dWVXaWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6c2hhcmVk
V2lsbFNlbmRSZWRpcmVjdGVkUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2Fk
Ojpub3RpZnlEaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9h
ZDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6ZGlkQ29t
cGxldGVXaXRoRXJyb3IpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmg6
IE93biBvcHRpb25hbCBOZXR3b3JrOjpDYXB0dXJlOjpSZWNvcmQgYW5kIFJlcGxheSBvYmplY3Rz
LgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDogTWFuYWdlIGNy
ZWF0aW9uL3Rlcm1pbmF0aW9uIG9mIE5ldHdvcms6OkNhcHR1cmU6Ok1hbmFnZXIgaW5zdGFuY2Uu
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6dGVybWluYXRlKToKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6
IFRyYW5zcG9ydCBwcmVmZXJlbmNlcyBmb3IgZW5hYmxpbmcgcmVjb3JkL3JlcGxheS4KKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUp
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmg6IFRyYW5zcG9ydCBwcmVmZXJlbmNlcyBmb3IgZW5hYmxpbmcgcmVjb3JkL3JlcGxheS4K
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlQ2FjaGVkUmVz
b3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkNhY2hl
ZFJlc291cmNlOjpDYWNoZWRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0
dXJlOjpDYWNoZWRSZXNvdXJjZTo6fkNhY2hlZFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhcHR1cmU6OkNhY2hlZFJlc291cmNlOjpiYXNlVVJMKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhcHR1cmU6OkNhY2hlZFJlc291cmNlOjpxdWVyeVBhcmFtZXRlcnMpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6Q2FjaGVkUmVzb3VyY2U6OmdldE5leHRFdmVu
dCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpDYWNoZWRSZXNvdXJjZTo6bWFw
RmlsZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkNhY2hlZFJl
c291cmNlOjpldmVudFN0cmVhbUZpbGVQYXRoKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YXB0dXJlL05ldHdvcmtDYXB0dXJlQ2FjaGVkUmVzb3VyY2UuaDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpDYWNoZWRSZXNvdXJjZTo6ZnVsbFVSTCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpDYWNoZWRSZXNvdXJjZTo6YnVmZmVyUG9pbnRlcik6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmNw
cDogQWRkZWQuCisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8Q2FwdHVyZVRpbWVUeXBlPjo6
ZW5jb2RlKToKKyAgICAgICAgKElQQzo6QXJndW1lbnRDb2RlcjxDYXB0dXJlVGltZVR5cGU+Ojpk
ZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6d3JhcCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZXF1ZXN0U2VudEV2ZW50OjplbmNvZGUpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVxdWVzdFNlbnRFdmVudDo6ZGVjb2RlKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlc3BvbnNlUmVjZWl2ZWRFdmVudDo6
ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlc3BvbnNlUmVjZWl2
ZWRFdmVudDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlZGly
ZWN0UmVjZWl2ZWRFdmVudDo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1
cmU6OlJlZGlyZWN0UmVjZWl2ZWRFdmVudDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhcHR1cmU6OlJlZGlyZWN0U2VudEV2ZW50OjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FwdHVyZTo6UmVkaXJlY3RTZW50RXZlbnQ6OmRlY29kZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpEYXRhUmVjZWl2ZWRFdmVudDo6ZW5jb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkRhdGFSZWNlaXZlZEV2ZW50OjpkZWNvZGUpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6RmluaXNoZWRFdmVudDo6ZW5jb2RlKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkZpbmlzaGVkRXZlbnQ6OmRlY29kZSk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50Lmg6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6VGltZWRFdmVudDo6VGlt
ZWRFdmVudCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVy
ZUxvZ2dpbmcuaDogQWRkZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3
b3JrQ2FwdHVyZU1hbmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
cHR1cmU6Ok1hbmFnZXI6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0
dXJlOjpNYW5hZ2VyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1
cmU6Ok1hbmFnZXI6OnRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJl
OjpNYW5hZ2VyOjpmaW5kTWF0Y2gpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6
TWFuYWdlcjo6ZmluZEV4YWN0TWF0Y2gpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVy
ZTo6TWFuYWdlcjo6ZmluZEJlc3RGdXp6eU1hdGNoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhcHR1cmU6Ok1hbmFnZXI6OmZ1enp5TWF0Y2hVUkxzKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhcHR1cmU6Ok1hbmFnZXI6OmxvYWRDYWNoZWRSZXNvdXJjZXMpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6cmVwb3J0TG9hZFBhdGgpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6cmVwb3J0UmVjb3JkUGF0aCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpyZXBvcnRSZXBsYXlQYXRoKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OnVybFRvUGF0aCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpzdHJpbmdUb0hhc2gpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6aGFzaFRvUGF0aCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpsb2dSZWNvcmRlZFJlc291
cmNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OmxvZ0xvYWRl
ZFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6Omxv
Z1BsYXllZEJhY2tSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpN
YW5hZ2VyOjplbnN1cmVGaWxlSGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1
cmU6Ok1hbmFnZXI6Om9wZW5DYWNoZUZpbGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fw
dHVyZTo6TWFuYWdlcjo6cmVhZEZpbGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVy
ZTo6TWFuYWdlcjo6Z2V0TGluZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpN
YW5hZ2VyOjpnZXRXb3JkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFn
ZXI6OnByaW50VG9GaWxlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFn
ZXI6OmJhc2VVUkxBc1N0cmluZyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9O
ZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YXB0dXJlOjpNYW5hZ2VyOjppc1JlY29yZGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YXB0dXJlOjpNYW5hZ2VyOjppc1JlcGxheWluZyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Y2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZWNvcmRlcjo6cmVjb3JkUmVxdWVzdFNlbnQpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVjb3JkZXI6OnJlY29yZFJlc3BvbnNlUmVjZWl2
ZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVjb3JkZXI6OnJlY29yZFJl
ZGlyZWN0UmVjZWl2ZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVjb3Jk
ZXI6OnJlY29yZFJlZGlyZWN0U2VudCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJl
OjpSZWNvcmRlcjo6cmVjb3JkRGF0YVJlY2VpdmVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhcHR1cmU6OlJlY29yZGVyOjpyZWNvcmRGaW5pc2gpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FwdHVyZTo6UmVjb3JkZXI6OndyaXRlRXZlbnRzKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhcHR1cmU6OlJlY29yZGVyOjpvcGVuRmlsZUZvclJlcXVlc3QpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVjb3JkZXI6OndyaXRlRGF0YSk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVjb3JkZXI6OnJlY29yZEV2ZW50KToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlcGxheWVyOjpSZXBs
YXllcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZXBsYXllcjo6cmVwbGF5
UmVzb3VyY2UpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1
cmVSZXBsYXllci5oOiBBZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05l
dHdvcmtEYXRhVGFza1JlcGxheS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5OjpOZXR3b3JrRGF0YVRhc2tSZXBsYXkpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5Ojp+
TmV0d29ya0RhdGFUYXNrUmVwbGF5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6
Ok5ldHdvcmtEYXRhVGFza1JlcGxheTo6cmVzdW1lKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxheTo6c3VzcGVuZCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYXB0dXJlOjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmNhbmNlbCk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmNvbXBs
ZXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFza1Jl
cGxheTo6aW52YWxpZGF0ZUFuZENhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0
dXJlOjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmVucXVldWVDYWNoZWRFdmVudEhhbmRsZXIpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5Ojpy
ZXBsYXlSZXF1ZXN0U2VudCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpOZXR3
b3JrRGF0YVRhc2tSZXBsYXk6OnJlcGxheVJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5OjpyZXBsYXlSZWRpcmVj
dFJlY2VpdmVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRh
VGFza1JlcGxheTo6cmVwbGF5UmVkaXJlY3RTZW50KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxheTo6cmVwbGF5RGF0YVJlY2VpdmVkKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxheTo6cmVw
bGF5RmluaXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0Rh
dGFUYXNrUmVwbGF5OjpkaWRSZWNlaXZlRXJyb3IpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5OjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5OjpkaWRG
aW5pc2gpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0RhdGFUYXNr
UmVwbGF5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29y
a0RhdGFUYXNrUmVwbGF5OjpjcmVhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQ
cm9jZXNzUG9vbENvY29hLm1tOiBUcmFuc3BvcnQgcHJlZmVyZW5jZXMgZm9yIGVuYWJsaW5nIHJl
Y29yZC9yZXBsYXkuCisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUlu
aXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOiBBZGRlZCBuZXcgZmlsZXMuCisgICAgICAgICogY29uZmlnLmg6IEFkZGVk
IGZsYWcgdG8gY29udHJvbCBpbmNsdXNpb24gb2YgcmVjb3JkL3JlcGxheS4KKwogMjAxNi0xMS0w
NSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAg
W1NPVVBdIExheW91dCB0ZXN0IGh0dHAvdGVzdHMvbWlzYy9hdXRoZW50aWNhdGlvbi1yZWRpcmVj
dC0zL2F1dGhlbnRpY2F0aW9uLXNlbnQtdG8tcmVkaXJlY3Qtc2FtZS1vcmlnaW4td2l0aC1sb2Nh
dGlvbi1jcmVkZW50aWFscy5odG1sIGZhaWxzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9B
c3NlcnRpb25zLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCmluZGV4IDg2MTNk
ZjVkZThmNGFhNzdmZTVhODc4ZjMyOTcwZjM2MDRjY2Q2MGEuLjJlYTg1NGFiNDQyNDU0YjNmY2Vm
MjIwOWRkMTI0NTZhYTFmMTNhZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlv
bnMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuY3BwCkBAIC00MSw2ICs0MSw3
IEBACiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAjaW5j
bHVkZSA8d3RmL0xvZ2dpbmdBY2N1bXVsYXRvci5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgog
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFz
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtMjcwLDQxICsyNzEsMTM2IEBA
IHZvaWQgV1RGUmVwb3J0QmFja3RyYWNlKCkKICMgIGVuZGlmCiAjZW5kaWYKIAorLy8gUGFzcyBp
biBpbmZvcm1hdGlvbiByZXR1cm5lZCBmcm9tIFdURkdldEJhY2t0cmFjZS4gUGFzcyBudWxscHRy
IGZvciBgc3RhY2tgCisvLyBpZiB5b3Ugd2FudCBXVEZHZXRCYWNrdHJhY2VTeW1ib2xzIHRvIGNh
bGwgV1RGR2V0QmFja3RyYWNlIGZvciB5b3UsIHVzaW5nCisvLyB0aGUgcGFzc2VkLWluIGBzaXpl
YCBhbmQgc2tpcHBpbmcgdGhlIGZpcnN0IHR3byBzdGFjayBmcmFtZXMgYXMgYmVpbmcKKy8vIHVu
aW50ZXJlc3RpbmcuIFBhc3MgaW4gemVybyBmb3IgYHNpemVgIGlmIHlvdSB3YW50IHRvIHVzZSBh
IGRlZmF1bHQgdmFsdWUuCisvLyBJbiBhbnkgY2FzZSwgdGhlIGFjdHVhbCBzaXplIGlzIHJldHVy
bmVkIGluIGBzaXplYCwgd2hpY2ggY2FuIGJlIGRpZmZlcmVudAorLy8gaWYgdGhlIGRlZmF1bHQg
aXMgc3BlY2lmaWVkIG9yIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGZyYW1lcyBjb3VsZCBub3Qg
YmUKKy8vIGZldGNoZWQuCisvLworLy8gSW4gZ2VuZXJhbCwgaXQncyB1bnNhZmUgdG8gcGFzcyBp
biBhIG5vbi1udWxsIGBzdGFja2AgYW5kIGEgemVybyBgc2l6ZWAuCisvLyBUaGlzIGlzIGJlY2F1
c2UgdGhlIGRlZmF1bHQgdXNlZCBmb3IgYHNpemVgIGNvdWxkIGVhc2lseSBiZSBsYXJnZXIgdGhh
biB0aGUKKy8vIG51bWJlciBvZiBlbnRyaWVzIHBhc3NlZCBhbG9uZyBpbiBgc3RhY2tgLgorCitj
aGFyKiogV1RGR2V0QmFja3RyYWNlU3ltYm9scyh2b2lkKiogc3RhY2ssIGludCogc2l6ZSkKK3sK
KyAgICBjaGFyKiogcmVzdWx0ID0gbnVsbHB0cjsKKworI2lmIFVTRShCQUNLVFJBQ0VfU1lNQk9M
UykgfHwgVVNFKERMQUREUikKKyAgICBzdGF0aWMgY29uc3QgaW50IGZyYW1lc1RvU2hvdyA9IDMw
OworICAgIHN0YXRpYyBjb25zdCBpbnQgZnJhbWVzVG9Ta2lwID0gMzsKKworICAgIHZvaWQqKiBz
YW1wbGVzID0gbnVsbHB0cjsKKyAgICBhdXRvIGZyZWVfc2FtcGxlcyA9IG1ha2VTY29wZUV4aXQo
WyZzYW1wbGVzXSgpIHsKKyAgICAgICAgZnJlZShzYW1wbGVzKTsKKyAgICB9KTsKKworICAgIGlm
ICghKnNpemUpCisgICAgICAgICpzaXplID0gZnJhbWVzVG9TaG93OworCisgICAgaWYgKCFzdGFj
aykgeworICAgICAgICAqc2l6ZSArPSBmcmFtZXNUb1NraXA7CisgICAgICAgIHN0YWNrID0gc2Ft
cGxlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihtYWxsb2MoKnNpemUgKiBzaXplb2Yodm9p
ZCopKSk7CisgICAgICAgIFdURkdldEJhY2t0cmFjZShzYW1wbGVzLCBzaXplKTsKKyAgICAgICAg
c3RhY2sgKz0gZnJhbWVzVG9Ta2lwOworICAgICAgICAqc2l6ZSAtPSBmcmFtZXNUb1NraXA7Cisg
ICAgfQorI2VuZGlmCisKKyNpZiBVU0UoQkFDS1RSQUNFX1NZTUJPTFMpCisgICAgcmVzdWx0ID0g
YmFja3RyYWNlX3N5bWJvbHMoc3RhY2ssICpzaXplKTsKKyNlbmRpZgorCisjaWYgVVNFKERMQURE
UikKKyAgICBzdHJ1Y3QgU3RhY2tGcmFtZSB7CisgICAgICAgIERsX2luZm8gZGxJbmZvOworICAg
ICAgICBjb25zdCBjaGFyKiBkZW1hbmdsZWROYW1lOworICAgICAgICBjb25zdCBjaGFyKiBuYW1l
OworICAgIH07CisKKyAgICBpbnQgaSA9IDA7CisgICAgU3RhY2tGcmFtZSBzdGFja0ZyYW1lc1sq
c2l6ZV07CisKKyAgICBmb3IgKGF1dG8mIGFGcmFtZSA6IHN0YWNrRnJhbWVzKSB7CisgICAgICAg
IGlmIChkbGFkZHIoc3RhY2tbaSsrXSwgJmFGcmFtZS5kbEluZm8pKSB7CisgICAgICAgICAgICBp
ZiAoYUZyYW1lLmRsSW5mby5kbGlfc25hbWUpIHsKKyAgICAgICAgICAgICAgICBhRnJhbWUuZGVt
YW5nbGVkTmFtZSA9IGFiaTo6X19jeGFfZGVtYW5nbGUoYUZyYW1lLmRsSW5mby5kbGlfc25hbWUs
IDAsIDAsIDApOworICAgICAgICAgICAgICAgIGFGcmFtZS5uYW1lID0gYUZyYW1lLmRlbWFuZ2xl
ZE5hbWUgPyBhRnJhbWUuZGVtYW5nbGVkTmFtZSA6IGFGcmFtZS5kbEluZm8uZGxpX3NuYW1lOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhRnJhbWUuZGVtYW5nbGVkTmFt
ZSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgYUZyYW1lLm5hbWUgPSBudWxscHRyOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1lbXNldCgmYUZyYW1lLCAw
LCBzaXplb2YoYUZyYW1lKSk7CisgICAgfQorCisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSAoKnNp
emUpICogc2l6ZW9mKGNoYXIqKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGFGcmFtZSA6IHN0YWNr
RnJhbWVzKSB7CisgICAgICAgIGlmIChhRnJhbWUubmFtZSkKKyAgICAgICAgICAgIGJ1ZmZlclNp
emUgKz0gc3RybGVuKGFGcmFtZS5uYW1lKSArIDE7CisgICAgfQorCisgICAgcmVzdWx0ID0gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKio+KG1hbGxvYyhidWZmZXJTaXplKSk7CisgICAgY2hhcioqIHB0
cnMgPSByZXN1bHQ7CisgICAgY2hhciogc3RycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJl
c3VsdCkgKyAoKnNpemUpICogc2l6ZW9mKGNoYXIqKTsKKyAgICBmb3IgKGF1dG8mIGFGcmFtZSA6
IHN0YWNrRnJhbWVzKSB7CisgICAgICAgIGlmIChhRnJhbWUubmFtZSkgeworICAgICAgICAgICAg
KnB0cnMgPSBzdHJzOworICAgICAgICAgICAgc3RyY3B5KHN0cnMsIGFGcmFtZS5uYW1lKTsKKyAg
ICAgICAgICAgIHB0cnMgKz0gMTsKKyAgICAgICAgICAgIHN0cnMgKz0gc3RybGVuKGFGcmFtZS5u
YW1lKSArIDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAqcHRycyA9IG51bGxwdHI7
CisgICAgICAgICAgICBwdHJzICs9IDE7CisgICAgICAgIH0KKworICAgICAgICBmcmVlKGNvbnN0
X2Nhc3Q8Y2hhcio+KGFGcmFtZS5kZW1hbmdsZWROYW1lKSk7CisgICAgfQorI2VuZGlmCisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCisjdW5kZWYgVVNFX0JBQ0tUUkFDRV9TWU1CT0xTCisjdW5k
ZWYgVVNFX0RMQUREUgorCiB2b2lkIFdURlByaW50QmFja3RyYWNlKHZvaWQqKiBzdGFjaywgaW50
IHNpemUpCiB7Ci0jaWYgVVNFKEJBQ0tUUkFDRV9TWU1CT0xTKQotICAgIGNoYXIqKiBzeW1ib2xz
ID0gYmFja3RyYWNlX3N5bWJvbHMoc3RhY2ssIHNpemUpOworICAgIGNoYXIqKiBzeW1ib2xzID0g
V1RGR2V0QmFja3RyYWNlU3ltYm9scyhzdGFjaywgJnNpemUpOwogICAgIGlmICghc3ltYm9scykK
ICAgICAgICAgcmV0dXJuOwotI2VuZGlmCiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewotICAgICAgICBjb25zdCBjaGFyKiBtYW5nbGVkTmFtZSA9IDA7Ci0gICAgICAgIGNo
YXIqIGN4YURlbWFuZ2xlZCA9IDA7Ci0jaWYgVVNFKEJBQ0tUUkFDRV9TWU1CT0xTKQotICAgICAg
ICBtYW5nbGVkTmFtZSA9IHN5bWJvbHNbaV07Ci0jZWxpZiBVU0UoRExBRERSKQotICAgICAgICBE
bF9pbmZvIGluZm87Ci0gICAgICAgIGlmIChkbGFkZHIoc3RhY2tbaV0sICZpbmZvKSAmJiBpbmZv
LmRsaV9zbmFtZSkKLSAgICAgICAgICAgIG1hbmdsZWROYW1lID0gaW5mby5kbGlfc25hbWU7Ci0g
ICAgICAgIGlmIChtYW5nbGVkTmFtZSkKLSAgICAgICAgICAgIGN4YURlbWFuZ2xlZCA9IGFiaTo6
X19jeGFfZGVtYW5nbGUobWFuZ2xlZE5hbWUsIDAsIDAsIDApOwotI2VuZGlmCisgICAgICAgIGNv
bnN0IGNoYXIqIG5hbWUgPSBzeW1ib2xzW2ldOwogICAgICAgICBjb25zdCBpbnQgZnJhbWVOdW1i
ZXIgPSBpICsgMTsKLSAgICAgICAgaWYgKG1hbmdsZWROYW1lIHx8IGN4YURlbWFuZ2xlZCkKLSAg
ICAgICAgICAgIHByaW50Zl9zdGRlcnJfY29tbW9uKCIlLTNkICVwICVzXG4iLCBmcmFtZU51bWJl
ciwgc3RhY2tbaV0sIGN4YURlbWFuZ2xlZCA/IGN4YURlbWFuZ2xlZCA6IG1hbmdsZWROYW1lKTsK
KyAgICAgICAgaWYgKG5hbWUpCisgICAgICAgICAgICBwcmludGZfc3RkZXJyX2NvbW1vbigiJS0z
ZCAlcCAlc1xuIiwgZnJhbWVOdW1iZXIsIHN0YWNrW2ldLCBuYW1lKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgcHJpbnRmX3N0ZGVycl9jb21tb24oIiUtM2QgJXBcbiIsIGZyYW1lTnVtYmVy
LCBzdGFja1tpXSk7Ci0gICAgICAgIGZyZWUoY3hhRGVtYW5nbGVkKTsKICAgICB9CiAKLSNpZiBV
U0UoQkFDS1RSQUNFX1NZTUJPTFMpCiAgICAgZnJlZShzeW1ib2xzKTsKLSNlbmRpZgogfQogCi0j
dW5kZWYgVVNFX0JBQ0tUUkFDRV9TWU1CT0xTCi0jdW5kZWYgVVNFX0RMQUREUgordm9pZCBXVEZS
ZWxlYXNlTG9nQmFja3RyYWNlKFdURkxvZ0NoYW5uZWwqIGNoYW5uZWwpCit7CisgICAgaW50IHNp
emUgPSAwOworICAgIGNoYXIqKiBzeW1ib2xzID0gV1RGR2V0QmFja3RyYWNlU3ltYm9scyhudWxs
cHRyLCAmc2l6ZSk7CisgICAgaWYgKCFzeW1ib2xzKQorICAgICAgICByZXR1cm47CisKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBjb25zdCBjaGFyKiBuYW1l
ID0gc3ltYm9sc1tpXTsKKyAgICAgICAgY29uc3QgaW50IGZyYW1lTnVtYmVyID0gaSArIDE7Cisg
ICAgICAgIGlmIChuYW1lKQorICAgICAgICAgICAgb3NfbG9nKGNoYW5uZWwtPm9zTG9nQ2hhbm5l
bCwgIiUtM2QgJXtwdWJsaWN9c1xuIiwgZnJhbWVOdW1iZXIsIG5hbWUpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBvc19sb2coY2hhbm5lbC0+b3NMb2dDaGFubmVsLCAiJS0zZCBcbiIsIGZy
YW1lTnVtYmVyKTsKKyAgICB9CisKKyAgICBmcmVlKHN5bWJvbHMpOworfQogCiBzdGF0aWMgV1RG
Q3Jhc2hIb29rRnVuY3Rpb24gZ2xvYmFsSG9vayA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL0Fzc2VydGlvbnMuaCBiL1NvdXJjZS9XVEYvd3RmL0Fzc2VydGlvbnMuaAppbmRleCA4
NGM0Njk0ZDExMDI5Y2YxYjg5NjQ3MTFkZGQzYjU4NDY3MjAzNmUxLi5iYzFhNWU1NDk2NDA0MDAx
MWMzZjI2NDExMmY1MjgxMTU5OThkMmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Bc3Nl
cnRpb25zLmgKKysrIGIvU291cmNlL1dURi93dGYvQXNzZXJ0aW9ucy5oCkBAIC0xNzgsOCArMTc4
LDEwIEBAIFdURl9FWFBPUlRfUFJJVkFURSBXVEZMb2dDaGFubmVsKiBXVEZMb2dDaGFubmVsQnlO
YW1lKFdURkxvZ0NoYW5uZWwqW10sIHNpemVfdCBjCiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBX
VEZJbml0aWFsaXplTG9nQ2hhbm5lbFN0YXRlc0Zyb21TdHJpbmcoV1RGTG9nQ2hhbm5lbCpbXSwg
c2l6ZV90IGNvdW50LCBjb25zdCBjaGFyKik7CiAKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIFdU
RkdldEJhY2t0cmFjZSh2b2lkKiogc3RhY2ssIGludCogc2l6ZSk7CitXVEZfRVhQT1JUX1BSSVZB
VEUgY2hhcioqIFdURkdldEJhY2t0cmFjZVN5bWJvbHModm9pZCoqIHN0YWNrLCBpbnQqIHNpemUp
OwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgV1RGUmVwb3J0QmFja3RyYWNlKCk7CiBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBXVEZQcmludEJhY2t0cmFjZSh2b2lkKiogc3RhY2ssIGludCBzaXpl
KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkIFdURlJlbGVhc2VMb2dCYWNrdHJhY2UoV1RGTG9n
Q2hhbm5lbCopOwogCiB0eXBlZGVmIHZvaWQgKCpXVEZDcmFzaEhvb2tGdW5jdGlvbikoKTsKIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIFdURlNldENyYXNoSG9vayhXVEZDcmFzaEhvb2tGdW5jdGlv
bik7CkBAIC00MTMsMTIgKzQxNSwxNiBAQCBXVEZfRVhQT1JUX1BSSVZBVEUgTk9fUkVUVVJOX0RV
RV9UT19DUkFTSCB2b2lkIFdURkNyYXNoV2l0aFNlY3VyaXR5SW1wbGljYXRpb24oKQogCiAjZGVm
aW5lIFJFTEVBU0VfTE9HX0lGKCAgICAgIGlzQWxsb3dlZCwgY2hhbm5lbCwgZm9ybWF0LCAuLi4p
ICgodm9pZCkwKQogI2RlZmluZSBSRUxFQVNFX0xPR19FUlJPUl9JRihpc0FsbG93ZWQsIGNoYW5u
ZWwsIGZvcm1hdCwgLi4uKSBkbyB7IGlmIChpc0FsbG93ZWQpIFJFTEVBU0VfTE9HX0VSUk9SKGNo
YW5uZWwsIGZvcm1hdCwgIyNfX1ZBX0FSR1NfXyk7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgUkVM
RUFTRV9MT0dfQkFDS1RSQUNFKGNoYW5uZWwpICgodm9pZCkwKQogI2Vsc2UKICNkZWZpbmUgUkVM
RUFTRV9MT0coICAgICAgY2hhbm5lbCwgZm9ybWF0LCAuLi4pIG9zX2xvZyggICAgICBMT0dfQ0hB
Tk5FTChjaGFubmVsKS5vc0xvZ0NoYW5uZWwsIGZvcm1hdCwgIyNfX1ZBX0FSR1NfXykKICNkZWZp
bmUgUkVMRUFTRV9MT0dfRVJST1IoY2hhbm5lbCwgZm9ybWF0LCAuLi4pIG9zX2xvZ19lcnJvcihM
T0dfQ0hBTk5FTChjaGFubmVsKS5vc0xvZ0NoYW5uZWwsIGZvcm1hdCwgIyNfX1ZBX0FSR1NfXykK
IAogI2RlZmluZSBSRUxFQVNFX0xPR19JRiggICAgICBpc0FsbG93ZWQsIGNoYW5uZWwsIGZvcm1h
dCwgLi4uKSBkbyB7IGlmIChpc0FsbG93ZWQpIFJFTEVBU0VfTE9HKCAgICAgIGNoYW5uZWwsIGZv
cm1hdCwgIyNfX1ZBX0FSR1NfXyk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIFJFTEVBU0VfTE9HX0VS
Uk9SX0lGKGlzQWxsb3dlZCwgY2hhbm5lbCwgZm9ybWF0LCAuLi4pIGRvIHsgaWYgKGlzQWxsb3dl
ZCkgUkVMRUFTRV9MT0dfRVJST1IoY2hhbm5lbCwgZm9ybWF0LCAjI19fVkFfQVJHU19fKTsgfSB3
aGlsZSAoMCkKKworI2RlZmluZSBSRUxFQVNFX0xPR19CQUNLVFJBQ0UoY2hhbm5lbCkgV1RGUmVs
ZWFzZUxvZ0JhY2t0cmFjZSgmTE9HX0NIQU5ORUwoY2hhbm5lbCkpCiAjZW5kaWYKIAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgKaW5kZXggMjg5ZWY4NGNmZDc5MGY2NDBmMTk4OTBi
YmYzMjA3YWVkOGVlNDUwZS4uOWY3MTdiMmQ3Y2YwNjg0Yjg1MmEwN2JkMjRlMWEzMTYyMDhmOWUy
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaApAQCAtMjgsOCArMjgsNyBAQAog
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEZpbGVTeXN0ZW1faAotI2RlZmluZSBGaWxlU3lz
dGVtX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPHV0aWxp
dHk+CkBAIC0xNzIsNyArMTcxLDcgQEAgYm9vbCB0cnVuY2F0ZUZpbGUoUGxhdGZvcm1GaWxlSGFu
ZGxlLCBsb25nIGxvbmcgb2Zmc2V0KTsKIC8vIFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIGFjdHVh
bGx5IHJlYWQgaWYgc3VjY2Vzc2Z1bCwgLTEgb3RoZXJ3aXNlLgogV0VCQ09SRV9FWFBPUlQgaW50
IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxl
bmd0aCk7CiAvLyBSZXR1cm5zIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSB3cml0dGVuIGlmIHN1
Y2Nlc3NmdWwsIC0xIG90aGVyd2lzZS4KLWludCByZWFkRnJvbUZpbGUoUGxhdGZvcm1GaWxlSGFu
ZGxlLCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKTsKK1dFQkNPUkVfRVhQT1JUIGludCByZWFkRnJv
bUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKTsKIAogLy8g
QXBwZW5kcyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgZm91bmQgYXQgJ3BhdGgnIHRvIHRoZSBv
cGVuIFBsYXRmb3JtRmlsZUhhbmRsZS4KIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgd3JpdGUgd2Fz
IHN1Y2Nlc3NmdWwsIGZhbHNlIGlmIGl0IHdhcyBub3QuCkBAIC0yMzksNSArMjM4LDMgQEAgaW5s
aW5lIE1hcHBlZEZpbGVEYXRhJiBNYXBwZWRGaWxlRGF0YTo6b3BlcmF0b3I9KE1hcHBlZEZpbGVE
YXRhJiYgb3RoZXIpCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEZp
bGVTeXN0ZW1faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2Vy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAppbmRleCA3NTM4MWIzNjk4
MTJlMTc5ZGQwZThlMjc3M2MwOTg1NWM1MjIwMWYyLi4wOGE5ZjRhYjk5N2NkNWU5ZDQyNGFjNWRh
NTE0OWY1ODQ4NTViYWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQ
YXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaApAQCAtNDUs
NyArNDUsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0RW5h
YmxlZChib29sKTsKICAgICAKICAgICB0eXBlZGVmIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBT
dHJpbmc+PiBVUkxFbmNvZGVkRm9ybTsKLSAgICBzdGF0aWMgVVJMRW5jb2RlZEZvcm0gcGFyc2VV
UkxFbmNvZGVkRm9ybShTdHJpbmdWaWV3KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgVVJM
RW5jb2RlZEZvcm0gcGFyc2VVUkxFbmNvZGVkRm9ybShTdHJpbmdWaWV3KTsKICAgICBzdGF0aWMg
U3RyaW5nIHNlcmlhbGl6ZShjb25zdCBVUkxFbmNvZGVkRm9ybSYpOwogCiBwcml2YXRlOgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5oCmluZGV4IDdmNmI0
MjZhYzA5NWNkOTU2OGJhZTk0YzczM2QyZTMzOTI4M2YwZTkuLjg5ZDI0Nzc2ZmI4NTMxN2ZhM2Nk
OGRlZTg3NTIzNmJiYzI4NGZmZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvSFRUUFBhcnNlcnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0hUVFBQYXJzZXJzLmgKQEAgLTI4LDggKzI4LDcgQEAKICAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2lmbmRlZiBIVFRQUGFyc2Vyc19oCi0jZGVmaW5lIEhUVFBQYXJzZXJzX2gKKyNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpA
QCAtNzMsNyArNzIsNyBAQCBib29sIGlzVmFsaWRIVFRQVG9rZW4oY29uc3QgU3RyaW5nJik7CiBi
b29sIHBhcnNlSFRUUFJlZnJlc2goY29uc3QgU3RyaW5nJiByZWZyZXNoLCBkb3VibGUmIGRlbGF5
LCBTdHJpbmcmIHVybCk7CiBPcHRpb25hbDxzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1l
X3BvaW50PiBwYXJzZUhUVFBEYXRlKGNvbnN0IFN0cmluZyYpOwogU3RyaW5nIGZpbGVuYW1lRnJv
bUhUVFBDb250ZW50RGlzcG9zaXRpb24oY29uc3QgU3RyaW5nJik7Ci1TdHJpbmcgZXh0cmFjdE1J
TUVUeXBlRnJvbU1lZGlhVHlwZShjb25zdCBTdHJpbmcmKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmlu
ZyBleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKGNvbnN0IFN0cmluZyYpOwogU3RyaW5nIGV4
dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZShjb25zdCBTdHJpbmcmKTsKIHZvaWQgZmluZENoYXJz
ZXRJbk1lZGlhVHlwZShjb25zdCBTdHJpbmcmIG1lZGlhVHlwZSwgdW5zaWduZWQgaW50JiBjaGFy
c2V0UG9zLCB1bnNpZ25lZCBpbnQmIGNoYXJzZXRMZW4sIHVuc2lnbmVkIGludCBzdGFydCA9IDAp
OwogWFNTUHJvdGVjdGlvbkRpc3Bvc2l0aW9uIHBhcnNlWFNTUHJvdGVjdGlvbkhlYWRlcihjb25z
dCBTdHJpbmcmIGhlYWRlciwgU3RyaW5nJiBmYWlsdXJlUmVhc29uLCB1bnNpZ25lZCYgZmFpbHVy
ZVBvc2l0aW9uLCBTdHJpbmcmIHJlcG9ydFVSTCk7CkBAIC0xMTUsNSArMTE0LDMgQEAgaW5saW5l
IFN0cmluZyBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUVFBTcGFjZXMoY29uc3QgU3RyaW5nJiBz
dHJpbmcpCiB9CiAKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DTWFr
ZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CmluZGV4IDg3MjY2OGUw
YjFlYWQyNGZjMTIwZmEwOTcyY2NkYzZkMzJkYjEyNjkuLjUwMWQ3YjYyOTg2YzMwNDdkNWFmNjNj
N2VkMWRmOTUwYmRhY2Y0N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMu
dHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC0yMDQsNiArMjA0LDEz
IEBAIHNldChOZXR3b3JrUHJvY2Vzc19DT01NT05fU09VUkNFUwogICAgIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAogICAgIE5ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwCiAgICAgTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKKworICAgIE5ldHdvcmtQcm9jZXNzL2NhcHR1
cmUvTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9j
YXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuY3BwCisgICAgTmV0d29ya1Byb2Nlc3MvY2FwdHVy
ZS9OZXR3b3JrQ2FwdHVyZU1hbmFnZXIuY3BwCisgICAgTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9O
ZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmNwcAorICAgIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0
d29ya0NhcHR1cmVSZXBsYXllci5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdv
cmtEYXRhVGFza1JlcGxheS5jcHAKICkKIAogc2V0KFdlYktpdDJfU09VUkNFUwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCmluZGV4IDEyNjc1MDViN2Zi
NDJhMjM4NDIwZTM2ZmYyZGRlMTUxMzgyOTU4YjYuLmI2ZmEzODY3NDYxZmU1ZWRmZjZmMzNhN2Vi
NzVjOTQ4MmQyNzMyZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtMb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrTG9hZC5jcHAKQEAgLTQzLDYgKzQzLDEyIEBACiAjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNr
Q29jb2EuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyNpbmNsdWRl
ICJOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZVJlY29y
ZGVyLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVSZXBsYXllci5oIgorI2VuZGlmCisKIG5h
bWVzcGFjZSBXZWJLaXQgewogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTY3LDkgKzcz
LDM0IEBAIE5ldHdvcmtMb2FkOjpOZXR3b3JrTG9hZChOZXR3b3JrTG9hZENsaWVudCYgY2xpZW50
LCBOZXR3b3JrTG9hZFBhcmFtZXRlcnMmJiBwYXJhCiAgICAgLCBtX3BhcmFtZXRlcnMoV1RGTW92
ZShwYXJhbWV0ZXJzKSkKICAgICAsIG1fY3VycmVudFJlcXVlc3QobV9wYXJhbWV0ZXJzLnJlcXVl
c3QpCiB7CisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyAgICBpZiAobV9wYXJhbWV0ZXJz
LnJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKSB7CisgICAgICAgIGlmIChO
ZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6c2luZ2xldG9uKCkuaXNSZWNvcmRpbmcoKSkgeworICAg
ICAgICAgICAgbV9yZWNvcmRlciA9IHN0ZDo6bWFrZV91bmlxdWU8TmV0d29ya0NhcHR1cmU6OlJl
Y29yZGVyPigpOworICAgICAgICB9IGVsc2UgaWYgKE5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpz
aW5nbGV0b24oKS5pc1JlcGxheWluZygpKSB7CisgICAgICAgICAgICAvLyBUT0RPOiBQdXQgdGhp
cyBpbiBOZXR3b3JrRGF0YVRhc2s6OmNyZWF0ZT8gV2UgZG9uJ3QgcmVhbGx5IG5lZWQKKyAgICAg
ICAgICAgIC8vIG1fcmVwbGF5ZXIuIEF0IGxlYXN0LCBub3QgYXQgdGhlIG1vbWVudC4KKyAgICAg
ICAgICAgIG1fcmVwbGF5ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtDYXB0dXJlOjpSZXBs
YXllcj4oKTsKKyAgICAgICAgICAgIG1fdGFzayA9IG1fcmVwbGF5ZXItPnJlcGxheVJlc291cmNl
KG5ldHdvcmtTZXNzaW9uLCAqdGhpcywgbV9wYXJhbWV0ZXJzLnJlcXVlc3QsIG1fcGFyYW1ldGVy
cy5hbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBtX3BhcmFtZXRlcnMuc2hvdWxkQ2xlYXJSZWZlcnJl
ck9uSFRUUFNUb0hUVFBSZWRpcmVjdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1f
dGFzaykKKyNlbmRpZgorCiAgICAgbV90YXNrID0gTmV0d29ya0RhdGFUYXNrOjpjcmVhdGUobmV0
d29ya1Nlc3Npb24sICp0aGlzLCBtX3BhcmFtZXRlcnMucmVxdWVzdCwgbV9wYXJhbWV0ZXJzLmFs
bG93U3RvcmVkQ3JlZGVudGlhbHMsIG1fcGFyYW1ldGVycy5jb250ZW50U25pZmZpbmdQb2xpY3ks
IG1fcGFyYW1ldGVycy5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KTsK
LSAgICBpZiAoIW1fcGFyYW1ldGVycy5kZWZlcnNMb2FkaW5nKQorICAgIGlmICghbV9wYXJhbWV0
ZXJzLmRlZmVyc0xvYWRpbmcpIHsKICAgICAgICAgbV90YXNrLT5yZXN1bWUoKTsKKworI2lmIEVO
QUJMRShORVRXT1JLX0NBUFRVUkUpCisgICAgICAgIC8vIFRPRE86IFdoYXQgdG8gZG8gYWJvdXQg
ZGVmZXJyZWQgbG9hZGluZz8gVGhpcyBnZXRzIGhhbmRsZWQgd2l0aCBhCisgICAgICAgIC8vIGNh
bGwgdG8gc2V0RGVmZXJzTG9hZGluZy4gV2UgY291bGQgaG9vayB0aGVyZSwgYnV0IHdoYXQgdG8g
ZG8gYWJvdXQKKyAgICAgICAgLy8gZGVmZXJzID09IGZhbHNlLCBvciBtdWx0aXBsZSBjYWxscyB0
byByZXN1bWU/CisKKyAgICAgICAgaWYgKG1fcmVjb3JkZXIpCisgICAgICAgICAgICBtX3JlY29y
ZGVyLT5yZWNvcmRSZXF1ZXN0U2VudChtX3BhcmFtZXRlcnMucmVxdWVzdCk7CisjZW5kaWYKKyAg
ICB9CiB9CiAKICNlbHNlCkBAIC0xNDIsNiArMTczLDExIEBAIHZvaWQgTmV0d29ya0xvYWQ6OmNv
bnRpbnVlV2lsbFNlbmRSZXF1ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIG5ld1JlcXVl
c3QpCiAgICAgbV9jdXJyZW50UmVxdWVzdC51cGRhdGVGcm9tRGVsZWdhdGVQcmVzZXJ2aW5nT2xk
UHJvcGVydGllcyhuZXdSZXF1ZXN0KTsKICNlbmRpZgogCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQ
VFVSRSkKKyAgICBpZiAobV9yZWNvcmRlcikKKyAgICAgICAgbV9yZWNvcmRlci0+cmVjb3JkUmVk
aXJlY3RTZW50KG5ld1JlcXVlc3QpOworI2VuZGlmCisKICNpZiBVU0UoTkVUV09SS19TRVNTSU9O
KQogICAgIGF1dG8gcmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlciA9IHN0ZDo6ZXhjaGFuZ2UobV9y
ZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyLCBudWxscHRyKTsKICAgICBBU1NFUlQocmVkaXJlY3RD
b21wbGV0aW9uSGFuZGxlcik7CkBAIC0xOTQsNiArMjMwLDExIEBAIHZvaWQgTmV0d29ya0xvYWQ6
OnNoYXJlZFdpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVz
dCwgUmVzCiAgICAgQVNTRVJUKCFyZWRpcmVjdFJlc3BvbnNlLmlzTnVsbCgpKTsKICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyAg
ICBpZiAobV9yZWNvcmRlcikKKyAgICAgICAgbV9yZWNvcmRlci0+cmVjb3JkUmVkaXJlY3RSZWNl
aXZlZChyZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKKyNlbmRpZgorCiAgICAgYXV0byBvbGRS
ZXF1ZXN0ID0gV1RGTW92ZShtX2N1cnJlbnRSZXF1ZXN0KTsKICAgICBtX2N1cnJlbnRSZXF1ZXN0
ID0gcmVxdWVzdDsKICAgICBtX2NsaWVudC53aWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0KFdURk1v
dmUob2xkUmVxdWVzdCksIFdURk1vdmUocmVxdWVzdCksIFdURk1vdmUocmVkaXJlY3RSZXNwb25z
ZSkpOwpAQCAtMzI1LDYgKzM2NiwxMSBAQCB2b2lkIE5ldHdvcmtMb2FkOjpub3RpZnlEaWRSZWNl
aXZlUmVzcG9uc2UoUmVzb3VyY2VSZXNwb25zZSYmIHJlc3BvbnNlLCBSZXNwb25zZQogewogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQor
ICAgIGlmIChtX3JlY29yZGVyKQorICAgICAgICBtX3JlY29yZGVyLT5yZWNvcmRSZXNwb25zZVJl
Y2VpdmVkKHJlc3BvbnNlKTsKKyNlbmRpZgorCiAgICAgaWYgKHNoYXJlZERpZFJlY2VpdmVSZXNw
b25zZShXVEZNb3ZlKHJlc3BvbnNlKSkgPT0gTmV0d29ya0xvYWRDbGllbnQ6OlNob3VsZENvbnRp
bnVlRGlkUmVjZWl2ZVJlc3BvbnNlOjpObykgewogICAgICAgICBtX3Jlc3BvbnNlQ29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtMzM2LDYgKzM4MiwxMSBAQCB2b2lkIE5ldHdvcmtMb2FkOjpkaWRSZWNlaXZlRGF0YShSZWY8
U2hhcmVkQnVmZmVyPiYmIGJ1ZmZlcikKIHsKICAgICBBU1NFUlQoIW1fdGhyb3R0bGUpOwogCisj
aWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyAgICBpZiAobV9yZWNvcmRlcikKKyAgICAgICAg
bV9yZWNvcmRlci0+cmVjb3JkRGF0YVJlY2VpdmVkKGJ1ZmZlci5nZXQoKSk7CisjZW5kaWYKKwog
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSB0aGUgZW5jb2RlZCBkYXRhIGxlbmd0aCwgbm90
IHRoZSBkZWNvZGVkIGRhdGEgbGVuZ3RoLgogICAgIGF1dG8gc2l6ZSA9IGJ1ZmZlci0+c2l6ZSgp
OwogICAgIG1fY2xpZW50LmRpZFJlY2VpdmVCdWZmZXIoV1RGTW92ZShidWZmZXIpLCBzaXplKTsK
QEAgLTM0NSw2ICszOTYsMTEgQEAgdm9pZCBOZXR3b3JrTG9hZDo6ZGlkQ29tcGxldGVXaXRoRXJy
b3IoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7CiAgICAgQVNTRVJUKCFtX3Rocm90dGxl
KTsKIAorI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisgICAgaWYgKG1fcmVjb3JkZXIpCisg
ICAgICAgIG1fcmVjb3JkZXItPnJlY29yZEZpbmlzaChlcnJvcik7CisjZW5kaWYKKwogICAgIGlm
IChlcnJvci5pc051bGwoKSkKICAgICAgICAgbV9jbGllbnQuZGlkRmluaXNoTG9hZGluZyhXVEY6
Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsKICAgICBlbHNlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5oIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaAppbmRleCAzZjYxMzAxNDY1NzQyOGExMjg3
OTU4NjY0YThkMTVlZGMyNzlmMjQ4Li5mNDFiNDA1OGYzMDI1OTc1NzAyZTM2ZWE4YmIyYTU4ZGM3
MDkwZmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
TG9hZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmgK
QEAgLTM4LDYgKzM4LDExIEBACiAjaW5jbHVkZSA8V2ViQ29yZS9BdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZS5oPgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorI2luY2x1ZGUg
Ik5ldHdvcmtDYXB0dXJlUmVjb3JkZXIuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZVJlcGxh
eWVyLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIE5ldHdvcmtMb2Fk
IGZpbmFsIDoKQEAgLTQ4LDYgKzUzLDcgQEAgY2xhc3MgTmV0d29ya0xvYWQgZmluYWwgOgogI2Vu
ZGlmCiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgZnJpZW5kIGNsYXNzIFdl
YktpdDo6TmV0d29ya0NhcHR1cmU6OlJlcGxheWVyOwogcHVibGljOgogI2lmIFVTRShORVRXT1JL
X1NFU1NJT04pCiAgICAgTmV0d29ya0xvYWQoTmV0d29ya0xvYWRDbGllbnQmLCBOZXR3b3JrTG9h
ZFBhcmFtZXRlcnMmJiwgTmV0d29ya1Nlc3Npb24mKTsKQEAgLTE1Miw2ICsxNTgsMTEgQEAgcHJp
dmF0ZToKICNlbmRpZgogCiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1fY3VycmVudFJl
cXVlc3Q7IC8vIFVwZGF0ZWQgb24gcmVkaXJlY3RzLgorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQ
VFVSRSkKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhcHR1cmU6OlJlY29yZGVyPiBtX3Jl
Y29yZGVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FwdHVyZTo6UmVwbGF5ZXI+IG1f
cmVwbGF5ZXI7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDEyNzBl
M2I0OWJmMjQ5ZTY1MjQ2NTgzMzJmMzQyZmZmN2Y5YTYxZGQuLjc3ZWMzMjI1MDA5ZDlmNTYzZTAx
MmYwMWJjMDNkYzlmZGJkMjVjODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTc0LDYgKzc0LDEwIEBACiAjaW5jbHVkZSAiTmV0
d29ya0NhY2hlQ29kZXJzLmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUp
CisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmgiCisjZW5kaWYKKwogI2lmIFBMQVRG
T1JNKENPQ09BKQogI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uQ29jb2EuaCIKICNlbmRpZgpAQCAt
MjIyLDYgKzIyNiwxMyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1By
b2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJgogICAgICAgICBtZW1vcnlQ
cmVzc3VyZUhhbmRsZXIuaW5zdGFsbCgpOwogICAgIH0KIAorI2lmIEVOQUJMRShORVRXT1JLX0NB
UFRVUkUpCisgICAgTmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OnNpbmdsZXRvbigpLmluaXRpYWxp
emUoCisgICAgICAgIHBhcmFtZXRlcnMuc2hvdWxkUmVjb3JkTmV0d29ya1JlcXVlc3RzLAorICAg
ICAgICBwYXJhbWV0ZXJzLnNob3VsZFJlcGxheU5ldHdvcmtSZXF1ZXN0cywKKyAgICAgICAgcGFy
YW1ldGVycy5yZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uKTsKKyNlbmRpZgorCiAgICAgbV9kaXNr
Q2FjaGVJc0Rpc2FibGVkRm9yVGVzdGluZyA9IHBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05l
dHdvcmtTZXNzaW9uOwogCiAgICAgbV9kaXNrQ2FjaGVTaXplT3ZlcnJpZGUgPSBwYXJhbWV0ZXJz
LmRpc2tDYWNoZVNpemVPdmVycmlkZTsKQEAgLTYwNiw2ICs2MTcsMTAgQEAgdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6bG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoVmFsdWUodWludDY0X3Qgd2ViUGFnZUlE
LCBjb25zdCBTdHIKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6dGVybWluYXRlKCkKIHsKKyNpZiBF
TkFCTEUoTkVUV09SS19DQVBUVVJFKQorICAgIE5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpzaW5n
bGV0b24oKS50ZXJtaW5hdGUoKTsKKyNlbmRpZgorCiAgICAgcGxhdGZvcm1UZXJtaW5hdGUoKTsK
ICAgICBDaGlsZFByb2Nlc3M6OnRlcm1pbmF0ZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3Bw
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMuY3BwCmluZGV4IGJkN2FiNTQ4YjljNDU3NGQyNDFmNDc3ZDljODk3N2MyYTRjMmQ3
YzEuLjJlNDBkMTJhMDU2ODQ0ODk5NjQ1YjAwNDYzYjkwNDg3MDUyYTc4MWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKQEAgLTkzLDYgKzkzLDExIEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIp
IGNvbnN0CiAjaWYgT1MoTElOVVgpCiAgICAgZW5jb2RlciA8PCBtZW1vcnlQcmVzc3VyZU1vbml0
b3JIYW5kbGU7CiAjZW5kaWYKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorICAgIGVuY29k
ZXIgPDwgc2hvdWxkUmVjb3JkTmV0d29ya1JlcXVlc3RzOworICAgIGVuY29kZXIgPDwgc2hvdWxk
UmVwbGF5TmV0d29ya1JlcXVlc3RzOworICAgIGVuY29kZXIgPDwgcmVjb3JkUmVwbGF5Q2FjaGVM
b2NhdGlvbjsKKyNlbmRpZgogfQogCiBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycyYgcmVzdWx0KQpAQCAtMTg4LDYgKzE5MywxNSBAQCBib29sIE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3
b3JrUHJvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShORVRX
T1JLX0NBUFRVUkUpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2hvdWxkUmVjb3Jk
TmV0d29ya1JlcXVlc3RzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUocmVzdWx0LnNob3VsZFJlcGxheU5ldHdvcmtSZXF1ZXN0cykpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5yZWNvcmRSZXBsYXlD
YWNoZUxvY2F0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggZjQ1Njlj
OTQ2OWE1NzcyZTYwYjFjOWJmZjU2MDg1ZDNhY2I0M2MzZC4uMTQ1ZTBmMzFhNWQyNzQ0NzY1ZjJh
M2ViN2MzOWE0Y2E5YWVkNTA3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCkBA
IC0xMDYsNiArMTA2LDEyIEBAIHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cyB7CiAjaWYgT1MoTElOVVgpCiAgICAgSVBDOjpBdHRhY2htZW50IG1lbW9yeVByZXNzdXJlTW9u
aXRvckhhbmRsZTsKICNlbmRpZgorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyAgICBi
b29sIHNob3VsZFJlY29yZE5ldHdvcmtSZXF1ZXN0cyB7IGZhbHNlIH07CisgICAgYm9vbCBzaG91
bGRSZXBsYXlOZXR3b3JrUmVxdWVzdHMgeyBmYWxzZSB9OworICAgIFN0cmluZyByZWNvcmRSZXBs
YXlDYWNoZUxvY2F0aW9uOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0Nh
cHR1cmVDYWNoZWRSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YXB0dXJlL05ldHdvcmtDYXB0dXJlQ2FjaGVkUmVzb3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA1NjRi
YzNiMDYwNjU1ZGZlNmJhZmJkNmYzY2M1NDhjNWJmMmQwYWUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlQ2FjaGVk
UmVzb3VyY2UuY3BwCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlQ2FjaGVkUmVzb3VyY2UuaCIKKworI2lm
IEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRlICJBdHRhY2htZW50LmgiCisjaW5j
bHVkZSAiRGF0YVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIkRlY29kZXIuaCIKKyNpbmNsdWRlICJO
ZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZU1hbmFnZXIu
aCIKKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgeworCitD
YWNoZWRSZXNvdXJjZTo6Q2FjaGVkUmVzb3VyY2UoY29uc3QgV2ViQ29yZTo6VVJMJiBmdWxsVVJM
KQorICAgIDogbV9mdWxsVVJMKGZ1bGxVUkwpCit7Cit9CisKK0NhY2hlZFJlc291cmNlOjpDYWNo
ZWRSZXNvdXJjZShXZWJDb3JlOjpVUkwmJiBmdWxsVVJMKQorICAgIDogbV9mdWxsVVJMKFdURk1v
dmUoZnVsbFVSTCkpCit7Cit9CisKK0NhY2hlZFJlc291cmNlOjp+Q2FjaGVkUmVzb3VyY2UoKQor
eworfQorCitjb25zdCBXZWJDb3JlOjpVUkwmIENhY2hlZFJlc291cmNlOjpiYXNlVVJMKCkKK3sK
KyAgICBpZiAoIW1faGF2ZUJhc2VVUkwpIHsKKyAgICAgICAgbV9oYXZlQmFzZVVSTCA9IHRydWU7
CisgICAgICAgIGF1dG8gcGF0aFN0YXJ0ID0gZnVsbFVSTCgpLnBhdGhTdGFydCgpOworICAgICAg
ICBhdXRvIGJhc2VVUkxTdHIgPSBmdWxsVVJMKCkuc3RyaW5nKCkubGVmdChwYXRoU3RhcnQpOwor
CisjaWYgMAorICAgICAgICAvLyBGb3Igc29tZSByZWFzb24sIFVSTFBhcnNlcjo6ZW5hYmxlZCgp
IGlzIHJldHVybmluZyBmYWxzZS4gVGhpcworICAgICAgICAvLyByZXN1bHRzIGluIHRoZSBvbGQg
cGFyc2VyIGJlaW5nIHVzZWQuIFRoZSBvbGQgcGFyc2VyIHdpbGwgY2hlY2sgdGhhdAorICAgICAg
ICAvLyB0aGUgaW5jb21pbmcgVVJMIHN0cmluZyBtYXRjaGVzIHRoZSBwYXJzZWQgcmVzdWx0IGFu
ZCBBU1NFUlRzIGlmCisgICAgICAgIC8vIHRoZXkgZG9uJ3QuIEJlY2F1c2UgdGhlIGJhc2UgVVJM
IHdlIHByb3ZpZGUgZG9lcyBub3QgZW5kIHdpdGggIi8iCisgICAgICAgIC8vIGFuZCB0aGUgcGFy
c2VkIHJlc3VsdCBkb2VzLCB0aGUgQVNTRVJUIGZhaWxzLgorCisgICAgICAgIERFQlVHX0xPRygi
ZnVsbFVSTCA9ICV7cHVibGljfXMiLCBmdWxsVVJMKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkp
OworICAgICAgICBERUJVR19MT0coInBhdGhTdGFydCA9ICVkIiwgc3RhdGljX2Nhc3Q8aW50Pihw
YXRoU3RhcnQpKTsKKyAgICAgICAgREVCVUdfTE9HKCJiYXNlVVJMU3RyID0gJXtwdWJsaWN9cyIs
IGJhc2VVUkxTdHIuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBERUJVR19MT0coImJhc2VVUkwg
PSAle3B1YmxpY31zIiwgbV9iYXNlVVJMLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKworICAg
ICAgICBtX2Jhc2VVUkwgPSBXZWJDb3JlOjpVUkwoV2ViQ29yZTo6UGFyc2VkVVJMU3RyaW5nLCBi
YXNlVVJMU3RyKTsKKyNlbHNlCisgICAgICAgIFdlYkNvcmU6OlVSTFBhcnNlciBwYXJzZXIoYmFz
ZVVSTFN0cik7CisgICAgICAgIG1fYmFzZVVSTCA9IHBhcnNlci5yZXN1bHQoKTsKKyNlbmRpZgor
ICAgIH0KKworICAgIHJldHVybiBtX2Jhc2VVUkw7Cit9CisKK1dlYkNvcmU6OlVSTFBhcnNlcjo6
VVJMRW5jb2RlZEZvcm0gQ2FjaGVkUmVzb3VyY2U6OnF1ZXJ5UGFyYW1ldGVycygpCit7CisgICAg
aWYgKCFtX2hhdmVRdWVyeVBhcmFtZXRlcnMpIHsKKyAgICAgICAgbV9oYXZlUXVlcnlQYXJhbWV0
ZXJzID0gdHJ1ZTsKKyAgICAgICAgbV9xdWVyeVBhcmFtZXRlcnMgPSBXZWJDb3JlOjpVUkxQYXJz
ZXI6OnBhcnNlVVJMRW5jb2RlZEZvcm0oZnVsbFVSTCgpLnF1ZXJ5KCkpOworICAgIH0KKworICAg
IHJldHVybiBtX3F1ZXJ5UGFyYW1ldGVyczsKK30KKworV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZl
bnQ+IENhY2hlZFJlc291cmNlOjpnZXROZXh0RXZlbnQoKQoreworICAgIGlmICghbWFwRmlsZUlm
TmVlZGVkKCkpCisgICAgICAgIHJldHVybiBXVEY6Ok9wdGlvbmFsPENhcHR1cmVFdmVudD4oKTsK
KworICAgIC8vIFRPRE86IGJldHRlciBlcnJvciBjaGVja2luZyAtLSBtYWtlIHN1cmUgd2UgZG9u
J3QgcnVuIG9mZiB0aGUgZW5kIG9mIHRoZSBtYXBwZWQgZmlsZS4KKworICAgIENhcHR1cmVFdmVu
dFR5cGUgZXZlbnRUeXBlOworICAgIGV2ZW50VHlwZSA9ICpidWZmZXJQb2ludGVyPGRlY2x0eXBl
KGV2ZW50VHlwZSk+KCk7CisgICAgbV9idWZmZXJPZmZzZXQgKz0gc2l6ZW9mKGV2ZW50VHlwZSk7
CisKKyAgICBzaXplX3QgbGVuZ3RoOworICAgIGxlbmd0aCA9ICpidWZmZXJQb2ludGVyPGRlY2x0
eXBlKGxlbmd0aCk+KCk7CisgICAgbV9idWZmZXJPZmZzZXQgKz0gc2l6ZW9mKGxlbmd0aCk7CisK
KyAgICBhdXRvIGJ1ZmZlciA9IGJ1ZmZlclBvaW50ZXI8dWludDhfdD4oKTsKKyAgICBtX2J1ZmZl
ck9mZnNldCArPSBsZW5ndGg7CisKKyAgICBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YShidWZmZXIs
IGxlbmd0aCk7CisgICAgSVBDOjpEZWNvZGVyIGRlY29kZXIoZGF0YSwgVmVjdG9yPElQQzo6QXR0
YWNobWVudD4oKSk7CisKKyAgICBzd2l0Y2ggKGV2ZW50VHlwZSkgeworICAgIGNhc2Uga0V2ZW50
VHlwZVJlcXVlc3RTZW50OgorICAgICAgICByZXR1cm4gUmVxdWVzdFNlbnRFdmVudDo6ZGVjb2Rl
KGRlY29kZXIpOworICAgIGNhc2Uga0V2ZW50VHlwZVJlc3BvbnNlUmVjZWl2ZWQ6CisgICAgICAg
IHJldHVybiBSZXNwb25zZVJlY2VpdmVkRXZlbnQ6OmRlY29kZShkZWNvZGVyKTsKKyAgICBjYXNl
IGtFdmVudFR5cGVSZWRpcmVjdFJlY2VpdmVkOgorICAgICAgICByZXR1cm4gUmVkaXJlY3RSZWNl
aXZlZEV2ZW50OjpkZWNvZGUoZGVjb2Rlcik7CisgICAgY2FzZSBrRXZlbnRUeXBlUmVkaXJlY3RT
ZW50OgorICAgICAgICByZXR1cm4gUmVkaXJlY3RTZW50RXZlbnQ6OmRlY29kZShkZWNvZGVyKTsK
KyAgICBjYXNlIGtFdmVudFR5cGVEYXRhUmVjZWl2ZWQ6CisgICAgICAgIHJldHVybiBEYXRhUmVj
ZWl2ZWRFdmVudDo6ZGVjb2RlKGRlY29kZXIpOworICAgIGNhc2Uga0V2ZW50VHlwZUZpbmlzaGVk
OgorICAgICAgICByZXR1cm4gRmluaXNoZWRFdmVudDo6ZGVjb2RlKGRlY29kZXIpOworICAgIH0K
K30KKworYm9vbCBDYWNoZWRSZXNvdXJjZTo6bWFwRmlsZUlmTmVlZGVkKCkKK3sKKyAgICBpZiAo
IW1faGF2ZUV2ZW50U3RyZWFtQnVmZmVyKSB7CisgICAgICAgIG1fZXZlbnRTdHJlYW1CdWZmZXIg
PSBXZWJDb3JlOjpNYXBwZWRGaWxlRGF0YShldmVudFN0cmVhbUZpbGVQYXRoKCksIG1faGF2ZUV2
ZW50U3RyZWFtQnVmZmVyKTsKKyAgICAgICAgaWYgKCFtX2V2ZW50U3RyZWFtQnVmZmVyKQorICAg
ICAgICAgICAgREVCVUdfTE9HKCJVbmFibGUgdG8gbWFwICV7cHVibGljfXMiLCBldmVudFN0cmVh
bUZpbGVQYXRoKCkuYXNjaWkoKS5kYXRhKCkpOworICAgIH0KKyAgICByZXR1cm4gbV9oYXZlRXZl
bnRTdHJlYW1CdWZmZXI7Cit9CisKK1N0cmluZyBDYWNoZWRSZXNvdXJjZTo6ZXZlbnRTdHJlYW1G
aWxlUGF0aCgpCit7CisgICAgcmV0dXJuIE1hbmFnZXI6OnNpbmdsZXRvbigpLnVybFRvUGF0aChm
dWxsVVJMKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVy
ZUNhY2hlZFJlc291cmNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJl
L05ldHdvcmtDYXB0dXJlQ2FjaGVkUmVzb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMDMyM2FmNGZlZmY2
NmExOGUxZGE4M2FiMjgyZTRjNzc3NGZlOGE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUNhY2hlZFJlc291cmNl
LmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKE5FVFdPUktfQ0FQVFVSRSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlRXZlbnQuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VSTC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvVVJMUGFyc2VyLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlIHsKKwor
Y2xhc3MgQ2FjaGVkUmVzb3VyY2UgeworcHVibGljOgorICAgIENhY2hlZFJlc291cmNlKGNvbnN0
IFdlYkNvcmU6OlVSTCYgZnVsbFVSTCk7CisgICAgQ2FjaGVkUmVzb3VyY2UoV2ViQ29yZTo6VVJM
JiYgZnVsbFVSTCk7CisgICAgQ2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UmJikgPSBkZWZh
dWx0OworICAgIH5DYWNoZWRSZXNvdXJjZSgpOworCisgICAgQ2FjaGVkUmVzb3VyY2UmIG9wZXJh
dG9yPShjb25zdCBDYWNoZWRSZXNvdXJjZSYgb3RoZXIpID0gZGVmYXVsdDsKKyAgICBDYWNoZWRS
ZXNvdXJjZSYgb3BlcmF0b3I9KENhY2hlZFJlc291cmNlJiYgb3RoZXIpID0gZGVmYXVsdDsKKwor
ICAgIGNvbnN0IFdlYkNvcmU6OlVSTCYgZnVsbFVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fZnVsbFVS
TDsgfQorICAgIGNvbnN0IFdlYkNvcmU6OlVSTCYgYmFzZVVSTCgpOworICAgIFdlYkNvcmU6OlVS
TFBhcnNlcjo6VVJMRW5jb2RlZEZvcm0gcXVlcnlQYXJhbWV0ZXJzKCk7CisKKyAgICBXVEY6Ok9w
dGlvbmFsPENhcHR1cmVFdmVudD4gZ2V0TmV4dEV2ZW50KCk7CisKK3ByaXZhdGU6CisgICAgYm9v
bCBtYXBGaWxlSWZOZWVkZWQoKTsKKyAgICBTdHJpbmcgZXZlbnRTdHJlYW1GaWxlUGF0aCgpOwor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgY29uc3QgVCogYnVmZmVyUG9pbnRlcigp
CisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4oKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fZXZlbnRTdHJlYW1CdWZmZXIuZGF0YSgpKSAr
IG1fYnVmZmVyT2Zmc2V0KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFdlYkNvcmU6OlVSTCBt
X2Z1bGxVUkw7IC8vIEEgU3RyaW5nLCB0ZW4gdW5zaWduZWQgaW50cywgYW5kIHRocmVlIHBhY2tl
ZCBib29scy4KKyAgICBzaXplX3QgbV9idWZmZXJPZmZzZXQgeyAwIH07CisKKyAgICAvLyBMYXpp
bHkgY2FsY3VsYXRlZC4KKyAgICBXZWJDb3JlOjpVUkwgbV9iYXNlVVJMOworICAgIFdlYkNvcmU6
OlVSTFBhcnNlcjo6VVJMRW5jb2RlZEZvcm0gbV9xdWVyeVBhcmFtZXRlcnM7CisgICAgV2ViQ29y
ZTo6TWFwcGVkRmlsZURhdGEgbV9ldmVudFN0cmVhbUJ1ZmZlcjsKKworICAgIGJvb2wgbV9oYXZl
QmFzZVVSTCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhdmVRdWVyeVBhcmFtZXRlcnMgeyBmYWxz
ZSB9OworICAgIGJvb2wgbV9oYXZlRXZlbnRTdHJlYW1CdWZmZXIgeyBmYWxzZSB9OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjdiNDMwZmM2MzMwYzMwN2ZhZGFhYWQwN2Y5MjA2YjRiYjBmOTZkYjYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05l
dHdvcmtDYXB0dXJlRXZlbnQuY3BwCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlRXZlbnQuaCIKKworI2lm
IEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCisj
aW5jbHVkZSAiRGVjb2Rlci5oIgorI2luY2x1ZGUgIkVuY29kZXIuaCIKKyNpbmNsdWRlICJOZXR3
b3JrQ2FwdHVyZUxvZ2dpbmcuaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIK
KworbmFtZXNwYWNlIElQQyB7CisKK3VzaW5nIFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkNhcHR1
cmVUaW1lVHlwZTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxDYXB0dXJlVGlt
ZVR5cGU+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IENhcHR1cmVU
aW1lVHlwZSYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgQ2FwdHVyZVRpbWVU
eXBlJik7Cit9OworCit2b2lkIEFyZ3VtZW50Q29kZXI8Q2FwdHVyZVRpbWVUeXBlPjo6ZW5jb2Rl
KElQQzo6RW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ2FwdHVyZVRpbWVUeXBlJiB0aW1lKQorewor
ICAgIGVuY29kZXIgPDwgdGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCk7Cit9CisKK2Jv
b2wgQXJndW1lbnRDb2RlcjxDYXB0dXJlVGltZVR5cGU+OjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBk
ZWNvZGVyLCBDYXB0dXJlVGltZVR5cGUmIHRpbWUpCit7CisgICAgZG91YmxlIHZhbHVlOworICAg
IGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICB0aW1lID0gQ2FwdHVyZVRpbWVUeXBlOjpmcm9tUmF3U2Vjb25kcyh2YWx1ZSk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIElQQworCituYW1lc3BhY2UgV2ViS2l0IHsK
K25hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZSB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3Rh
dGljIFdURjo6T3B0aW9uYWw8Q2FwdHVyZUV2ZW50PiB3cmFwKFQmJiBldmVudCkKK3sKKyAgICBy
ZXR1cm4gV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+KENhcHR1cmVFdmVudChXVEZNb3ZlKGV2
ZW50KSkpOworfQorCitib29sIFJlcXVlc3RTZW50RXZlbnQ6OmVuY29kZShJUEM6OkVuY29kZXIm
IGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCB0aW1lOworICAgIGVuY29kZXIgPDwg
cmVxdWVzdDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZl
bnQ+IFJlcXVlc3RTZW50RXZlbnQ6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIpCit7Cisg
ICAgQ2FwdHVyZVRpbWVUeXBlIHRpbWU7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJl
cXVlc3Q7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRpbWUpCisgICAgICAgIHx8ICFkZWNv
ZGVyLmRlY29kZShyZXF1ZXN0KSkKKyAgICAgICAgcmV0dXJuIFdURjo6T3B0aW9uYWw8Q2FwdHVy
ZUV2ZW50PigpOworCisgICAgcmV0dXJuIHdyYXAoUmVxdWVzdFNlbnRFdmVudChXVEZNb3ZlKHRp
bWUpLCBXVEZNb3ZlKHJlcXVlc3QpKSk7Cit9CisKK2Jvb2wgUmVzcG9uc2VSZWNlaXZlZEV2ZW50
OjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwg
dGltZTsKKyAgICBlbmNvZGVyIDw8IHJlc3BvbnNlOworICAgIHJldHVybiB0cnVlOworfQorCitX
VEY6Ok9wdGlvbmFsPENhcHR1cmVFdmVudD4gUmVzcG9uc2VSZWNlaXZlZEV2ZW50OjpkZWNvZGUo
SVBDOjpEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIENhcHR1cmVUaW1lVHlwZSB0aW1lOworICAg
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHRpbWUpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShyZXNwb25zZSkpCisgICAg
ICAgIHJldHVybiBXVEY6Ok9wdGlvbmFsPENhcHR1cmVFdmVudD4oKTsKKworI2lmIFBMQVRGT1JN
KENPQ09BKQorICAgICh2b2lkKSByZXNwb25zZS5uc1VSTFJlc3BvbnNlKCk7IC8vIEZvcmNlIHRo
ZSBjcmVhdGlvbiBvZiBuZWVkZWQgcGxhdGZvcm0tc3BlY2lmaWMgZGF0YSB0aGF0IG90aGVyd2lz
ZSBpcyBub3QgY3JlYXRlZC4KKyNlbmRpZgorCisgICAgcmV0dXJuIHdyYXAoUmVzcG9uc2VSZWNl
aXZlZEV2ZW50KFdURk1vdmUodGltZSksIFdURk1vdmUocmVzcG9uc2UpKSk7Cit9CisKK2Jvb2wg
UmVkaXJlY3RSZWNlaXZlZEV2ZW50OjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAoreworICAgIGVuY29kZXIgPDwgdGltZTsKKyAgICBlbmNvZGVyIDw8IHJlcXVlc3Q7CisgICAg
ZW5jb2RlciA8PCByZXNwb25zZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworV1RGOjpPcHRpb25h
bDxDYXB0dXJlRXZlbnQ+IFJlZGlyZWN0UmVjZWl2ZWRFdmVudDo6ZGVjb2RlKElQQzo6RGVjb2Rl
ciYgZGVjb2RlcikKK3sKKyAgICBDYXB0dXJlVGltZVR5cGUgdGltZTsKKyAgICBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QgcmVxdWVzdDsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJl
c3BvbnNlOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0aW1lKQorICAgICAgICB8fCAhZGVj
b2Rlci5kZWNvZGUocmVxdWVzdCkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKHJlc3BvbnNl
KSkKKyAgICAgICAgcmV0dXJuIFdURjo6T3B0aW9uYWw8Q2FwdHVyZUV2ZW50PigpOworCisjaWYg
UExBVEZPUk0oQ09DT0EpCisgICAgKHZvaWQpIHJlc3BvbnNlLm5zVVJMUmVzcG9uc2UoKTsgLy8g
Rm9yY2UgdGhlIGNyZWF0aW9uIG9mIG5lZWRlZCBwbGF0Zm9ybS1zcGVjaWZpYyBkYXRhIHRoYXQg
b3RoZXJ3aXNlIGlzIG5vdCBjcmVhdGVkLgorI2VuZGlmCisKKyAgICByZXR1cm4gd3JhcChSZWRp
cmVjdFJlY2VpdmVkRXZlbnQoV1RGTW92ZSh0aW1lKSwgV1RGTW92ZShyZXF1ZXN0KSwgV1RGTW92
ZShyZXNwb25zZSkpKTsKK30KKworYm9vbCBSZWRpcmVjdFNlbnRFdmVudDo6ZW5jb2RlKElQQzo6
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IHRpbWU7CisgICAgZW5j
b2RlciA8PCByZXF1ZXN0OworICAgIHJldHVybiB0cnVlOworfQorCitXVEY6Ok9wdGlvbmFsPENh
cHR1cmVFdmVudD4gUmVkaXJlY3RTZW50RXZlbnQ6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29k
ZXIpCit7CisgICAgQ2FwdHVyZVRpbWVUeXBlIHRpbWU7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0IHJlcXVlc3Q7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRpbWUpCisgICAgICAg
IHx8ICFkZWNvZGVyLmRlY29kZShyZXF1ZXN0KSkKKyAgICAgICAgcmV0dXJuIFdURjo6T3B0aW9u
YWw8Q2FwdHVyZUV2ZW50PigpOworCisgICAgcmV0dXJuIHdyYXAoUmVkaXJlY3RTZW50RXZlbnQo
V1RGTW92ZSh0aW1lKSwgV1RGTW92ZShyZXF1ZXN0KSkpOworfQorCitib29sIERhdGFSZWNlaXZl
ZEV2ZW50OjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29k
ZXIgPDwgdGltZTsKKyAgICBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YVJlZihyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhLT5kYXRhKCkpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGRh
dGEtPnNpemUoKSkpOworICAgIGVuY29kZXIuZW5jb2RlVmFyaWFibGVMZW5ndGhCeXRlQXJyYXko
ZGF0YVJlZik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1dURjo6T3B0aW9uYWw8Q2FwdHVyZUV2
ZW50PiBEYXRhUmVjZWl2ZWRFdmVudDo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlcikKK3sK
KyAgICBDYXB0dXJlVGltZVR5cGUgdGltZTsKKyAgICBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YVJl
ZjsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUodGltZSkKKyAgICAgICAgfHwgIWRlY29kZXIu
ZGVjb2RlVmFyaWFibGVMZW5ndGhCeXRlQXJyYXkoZGF0YVJlZikpCisgICAgICAgIHJldHVybiBX
VEY6Ok9wdGlvbmFsPENhcHR1cmVFdmVudD4oKTsKKworICAgIHJldHVybiB3cmFwKERhdGFSZWNl
aXZlZEV2ZW50KFdURk1vdmUodGltZSksIFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRh
dGFSZWYuZGF0YSgpLCBkYXRhUmVmLnNpemUoKSkpKTsKK30KKworYm9vbCBGaW5pc2hlZEV2ZW50
OjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwg
dGltZTsKKyAgICBlbmNvZGVyIDw8IGVycm9yOworICAgIHJldHVybiB0cnVlOworfQorCitXVEY6
Ok9wdGlvbmFsPENhcHR1cmVFdmVudD4gRmluaXNoZWRFdmVudDo6ZGVjb2RlKElQQzo6RGVjb2Rl
ciYgZGVjb2RlcikKK3sKKyAgICBDYXB0dXJlVGltZVR5cGUgdGltZTsKKyAgICBXZWJDb3JlOjpS
ZXNvdXJjZUVycm9yIGVycm9yOworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0aW1lKQorICAg
ICAgICB8fCAhZGVjb2Rlci5kZWNvZGUoZXJyb3IpKQorICAgICAgICByZXR1cm4gV1RGOjpPcHRp
b25hbDxDYXB0dXJlRXZlbnQ+KCk7CisKKyAgICByZXR1cm4gV1RGOjpPcHRpb25hbDxDYXB0dXJl
RXZlbnQ+KENhcHR1cmVFdmVudChGaW5pc2hlZEV2ZW50KFdURk1vdmUodGltZSksIFdURk1vdmUo
ZXJyb3IpKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVy
ZUV2ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtD
YXB0dXJlRXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZTM3ZWRmNDQ3MTVhYmI1YWMzMzNlZTQ3YWQ5ODYy
NmE0YzE1OGMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmgKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisKKyNp
bmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291
cmNlUmVxdWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL01vbm90b25pY1Rp
bWUuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvU2Vjb25kcy5o
PgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisKK25hbWVzcGFjZSBJUEMgeworY2xhc3MgRGVj
b2RlcjsKK2NsYXNzIEVuY29kZXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNl
IE5ldHdvcmtDYXB0dXJlIHsKKworc3RydWN0IFJlcXVlc3RTZW50RXZlbnQ7CitzdHJ1Y3QgUmVz
cG9uc2VSZWNlaXZlZEV2ZW50Oworc3RydWN0IFJlZGlyZWN0UmVjZWl2ZWRFdmVudDsKK3N0cnVj
dCBSZWRpcmVjdFNlbnRFdmVudDsKK3N0cnVjdCBEYXRhUmVjZWl2ZWRFdmVudDsKK3N0cnVjdCBG
aW5pc2hlZEV2ZW50OwordXNpbmcgQ2FwdHVyZUV2ZW50ID0gV1RGOjpWYXJpYW50PFJlcXVlc3RT
ZW50RXZlbnQsIFJlc3BvbnNlUmVjZWl2ZWRFdmVudCwgUmVkaXJlY3RSZWNlaXZlZEV2ZW50LCBS
ZWRpcmVjdFNlbnRFdmVudCwgRGF0YVJlY2VpdmVkRXZlbnQsIEZpbmlzaGVkRXZlbnQ+OworCitl
bnVtIENhcHR1cmVFdmVudFR5cGUgeworICAgIGtFdmVudFR5cGVSZXF1ZXN0U2VudCwKKyAgICBr
RXZlbnRUeXBlUmVzcG9uc2VSZWNlaXZlZCwKKyAgICBrRXZlbnRUeXBlUmVkaXJlY3RSZWNlaXZl
ZCwKKyAgICBrRXZlbnRUeXBlUmVkaXJlY3RTZW50LAorICAgIGtFdmVudFR5cGVEYXRhUmVjZWl2
ZWQsCisgICAga0V2ZW50VHlwZUZpbmlzaGVkCit9OworCisvLyBUT0RPOiBNYXkgd2FudCB0byB0
aGluayBpbiB0ZXJtcyBvZiByZWxhdGl2ZSBTZWNvbmRzIHJhdGhlciB0aGFuIGFic29sdXRlIFRp
bWUuCit1c2luZyBDYXB0dXJlQ2xvY2tUeXBlID0gV1RGOjpNb25vdG9uaWNUaW1lOwordXNpbmcg
Q2FwdHVyZVRpbWVUeXBlID0gV1RGOjpNb25vdG9uaWNUaW1lOworCitzdHJ1Y3QgVGltZWRFdmVu
dCB7CisgICAgVGltZWRFdmVudCgpCisgICAgICAgIDogdGltZShDYXB0dXJlQ2xvY2tUeXBlOjpu
b3coKSkgeyB9CisgICAgVGltZWRFdmVudChDYXB0dXJlVGltZVR5cGUmJiB0aW1lKQorICAgICAg
ICA6IHRpbWUoV1RGTW92ZSh0aW1lKSkgeyB9CisgICAgQ2FwdHVyZVRpbWVUeXBlIHRpbWU7Cit9
OworCitzdHJ1Y3QgUmVxdWVzdFNlbnRFdmVudCBmaW5hbCA6IHB1YmxpYyBUaW1lZEV2ZW50IHsK
KyAgICBSZXF1ZXN0U2VudEV2ZW50KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCkKKyAgICAgICAgOiBUaW1lZEV2ZW50KCksIHJlcXVlc3QocmVxdWVzdCkgeyB9CisgICAg
UmVxdWVzdFNlbnRFdmVudChDYXB0dXJlVGltZVR5cGUmJiB0aW1lLCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmJiByZXF1ZXN0KQorICAgICAgICA6IFRpbWVkRXZlbnQoV1RGTW92ZSh0aW1lKSks
IHJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSkgeyB9CisgICAgYm9vbCBlbmNvZGUoSVBDOjpFbmNv
ZGVyJikgY29uc3Q7CisgICAgc3RhdGljIFdURjo6T3B0aW9uYWw8Q2FwdHVyZUV2ZW50PiBkZWNv
ZGUoSVBDOjpEZWNvZGVyJik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBDYXB0dXJlRXZlbnRUeXBl
IGtUeXBlID0ga0V2ZW50VHlwZVJlcXVlc3RTZW50OworICAgIFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCByZXF1ZXN0OworfTsKKworc3RydWN0IFJlc3BvbnNlUmVjZWl2ZWRFdmVudCBmaW5hbCA6
IHB1YmxpYyBUaW1lZEV2ZW50IHsKKyAgICBSZXNwb25zZVJlY2VpdmVkRXZlbnQoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCisgICAgICAgIDogVGltZWRFdmVudCgp
LCByZXNwb25zZShyZXNwb25zZSkgeyB9CisgICAgUmVzcG9uc2VSZWNlaXZlZEV2ZW50KENhcHR1
cmVUaW1lVHlwZSYmIHRpbWUsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiByZXNwb25zZSkK
KyAgICAgICAgOiBUaW1lZEV2ZW50KFdURk1vdmUodGltZSkpLCByZXNwb25zZShXVEZNb3ZlKHJl
c3BvbnNlKSkgeyB9CisgICAgYm9vbCBlbmNvZGUoSVBDOjpFbmNvZGVyJikgY29uc3Q7CisgICAg
c3RhdGljIFdURjo6T3B0aW9uYWw8Q2FwdHVyZUV2ZW50PiBkZWNvZGUoSVBDOjpEZWNvZGVyJik7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBDYXB0dXJlRXZlbnRUeXBlIGtUeXBlID0ga0V2ZW50VHlw
ZVJlc3BvbnNlUmVjZWl2ZWQ7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25z
ZTsKK307CisKK3N0cnVjdCBSZWRpcmVjdFJlY2VpdmVkRXZlbnQgZmluYWwgOiBwdWJsaWMgVGlt
ZWRFdmVudCB7CisgICAgUmVkaXJlY3RSZWNlaXZlZEV2ZW50KGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UpCisgICAgICAgIDogVGltZWRFdmVudCgpLCByZXF1ZXN0KHJlcXVlc3QpLCByZXNwb25z
ZShyZXNwb25zZSkgeyB9CisgICAgUmVkaXJlY3RSZWNlaXZlZEV2ZW50KENhcHR1cmVUaW1lVHlw
ZSYmIHRpbWUsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UmJiByZXNwb25zZSkKKyAgICAgICAgOiBUaW1lZEV2ZW50KFdURk1vdmUo
dGltZSkpLCByZXF1ZXN0KFdURk1vdmUocmVxdWVzdCkpLCByZXNwb25zZShXVEZNb3ZlKHJlc3Bv
bnNlKSkgeyB9CisgICAgYm9vbCBlbmNvZGUoSVBDOjpFbmNvZGVyJikgY29uc3Q7CisgICAgc3Rh
dGljIFdURjo6T3B0aW9uYWw8Q2FwdHVyZUV2ZW50PiBkZWNvZGUoSVBDOjpEZWNvZGVyJik7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBDYXB0dXJlRXZlbnRUeXBlIGtUeXBlID0ga0V2ZW50VHlwZVJl
ZGlyZWN0UmVjZWl2ZWQ7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Q7Cisg
ICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKK307CisKK3N0cnVjdCBSZWRp
cmVjdFNlbnRFdmVudCBmaW5hbCA6IHB1YmxpYyBUaW1lZEV2ZW50IHsKKyAgICBSZWRpcmVjdFNl
bnRFdmVudChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCisgICAgICAg
IDogVGltZWRFdmVudCgpLCByZXF1ZXN0KHJlcXVlc3QpIHsgfQorICAgIFJlZGlyZWN0U2VudEV2
ZW50KENhcHR1cmVUaW1lVHlwZSYmIHRpbWUsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJl
cXVlc3QpCisgICAgICAgIDogVGltZWRFdmVudChXVEZNb3ZlKHRpbWUpKSwgcmVxdWVzdChXVEZN
b3ZlKHJlcXVlc3QpKSB7IH0KKyAgICBib29sIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25zdDsK
KyAgICBzdGF0aWMgV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+IGRlY29kZShJUEM6OkRlY29k
ZXImKTsKKyAgICBzdGF0aWMgY29uc3RleHByIENhcHR1cmVFdmVudFR5cGUga1R5cGUgPSBrRXZl
bnRUeXBlUmVkaXJlY3RTZW50OworICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0
OworfTsKKworc3RydWN0IERhdGFSZWNlaXZlZEV2ZW50IGZpbmFsIDogcHVibGljIFRpbWVkRXZl
bnQgeworICAgIERhdGFSZWNlaXZlZEV2ZW50KFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciYgZGF0YSkK
KyAgICAgICAgOiBUaW1lZEV2ZW50KCksIGRhdGEoZGF0YSkgeyB9CisgICAgRGF0YVJlY2VpdmVk
RXZlbnQoQ2FwdHVyZVRpbWVUeXBlJiYgdGltZSwgUmVmPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4m
JiBkYXRhKQorICAgICAgICA6IFRpbWVkRXZlbnQoV1RGTW92ZSh0aW1lKSksIGRhdGEoV1RGTW92
ZShkYXRhKSkgeyB9CisgICAgYm9vbCBlbmNvZGUoSVBDOjpFbmNvZGVyJikgY29uc3Q7CisgICAg
c3RhdGljIFdURjo6T3B0aW9uYWw8Q2FwdHVyZUV2ZW50PiBkZWNvZGUoSVBDOjpEZWNvZGVyJik7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBDYXB0dXJlRXZlbnRUeXBlIGtUeXBlID0ga0V2ZW50VHlw
ZURhdGFSZWNlaXZlZDsKKyAgICBSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBkYXRhOworfTsK
Kworc3RydWN0IEZpbmlzaGVkRXZlbnQgZmluYWwgOiBwdWJsaWMgVGltZWRFdmVudCB7CisgICAg
RmluaXNoZWRFdmVudChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvcikKKyAgICAg
ICAgOiBUaW1lZEV2ZW50KCksIGVycm9yKGVycm9yKSB7IH0KKyAgICBGaW5pc2hlZEV2ZW50KENh
cHR1cmVUaW1lVHlwZSYmIHRpbWUsIFdlYkNvcmU6OlJlc291cmNlRXJyb3ImJiBlcnJvcikKKyAg
ICAgICAgOiBUaW1lZEV2ZW50KFdURk1vdmUodGltZSkpLCBlcnJvcihXVEZNb3ZlKGVycm9yKSkg
eyB9CisgICAgYm9vbCBlbmNvZGUoSVBDOjpFbmNvZGVyJikgY29uc3Q7CisgICAgc3RhdGljIFdU
Rjo6T3B0aW9uYWw8Q2FwdHVyZUV2ZW50PiBkZWNvZGUoSVBDOjpEZWNvZGVyJik7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBDYXB0dXJlRXZlbnRUeXBlIGtUeXBlID0ga0V2ZW50VHlwZUZpbmlzaGVk
OworICAgIFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJyb3I7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVMb2dnaW5nLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MjFiYjM1N2Q3YzExNjdlZjM1MmM2NzFjYWNlMjZmMTRmOWRmMDQyOQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVM
b2dnaW5nLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKworI2Rl
ZmluZSBFTkFCTEVfV1RGX0lOVEVSTkFMX0RFQlVHR0lORyAxCisKKyNpZiBFTkFCTEUoV1RGX0lO
VEVSTkFMX0RFQlVHR0lORykKKyNkZWZpbmUgUVVPVEUoc3RyKSAjc3RyCisjZGVmaW5lIEVYUEFO
RF9BTkRfUVVPVEUoc3RyKSBRVU9URShzdHIpCisjZGVmaW5lIERFQlVHX0xPRyhmb3JtYXQsIC4u
LikgICAgICAgUkVMRUFTRV9MT0coTmV0d29yaywgIiNQTFQ6ICVwIC0gJXtwdWJsaWN9czo6JXtw
dWJsaWN9czogIiBmb3JtYXQsIHRoaXMsIEVYUEFORF9BTkRfUVVPVEUoREVCVUdfQ0xBU1MpLCBf
X0ZVTkNUSU9OX18sICMjX19WQV9BUkdTX18pCisjZGVmaW5lIERFQlVHX0xPR19FUlJPUihmb3Jt
YXQsIC4uLikgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiNQTFQ6ICVwIC0gJXtwdWJsaWN9
czo6JXtwdWJsaWN9czogIiBmb3JtYXQsIHRoaXMsIEVYUEFORF9BTkRfUVVPVEUoREVCVUdfQ0xB
U1MpLCBfX0ZVTkNUSU9OX18sICMjX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSBERUJVR19M
T0coLi4uKSAgICAgICAgICAgICAgICgodm9pZCkgMCkKKyNkZWZpbmUgREVCVUdfTE9HX0VSUk9S
KC4uLikgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCBfX1ZBX0FSR1NfXykKKyNl
bmRpZgorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVNYW5hZ2Vy
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1
cmVNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNTU2ZGUxNzdhMWZkOWJjMjFiOWQ4YTQ4OWIzMDE2
OWQ0MjBlZmYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZU1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsNzE2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJl
TWFuYWdlci5oIgorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKworI2luY2x1ZGUgIk5l
dHdvcmtDYXB0dXJlQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZUxv
Z2dpbmcuaCIKKyNpbmNsdWRlICJXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUg
IldlYkNvcmUvVVJMLmgiCisjaW5jbHVkZSA8d3RmL01ENS5oPgorI2luY2x1ZGUgPHd0Zi9TY29w
ZS5oPgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGl0ZXJhdG9yPgorI2luY2x1
ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2RlZmluZSBFTkFCTEVfV1RGX1VS
TF9GVVpaWV9NQVRDSElORyAxCisjZGVmaW5lIERFQlVHX0NMQVNTIE1hbmFnZXIKKworbmFtZXNw
YWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgeworCitzdGF0aWMgY29uc3Qg
Y2hhcioga0Rpck5hbWVSZWNvcmRSZXBsYXkgPSAiV2ViS2l0UGVyZi9yZWNvcmRfcmVwbGF5IjsK
K3N0YXRpYyBjb25zdCBjaGFyKiBrRGlyTmFtZVJlc291cmNlcyA9ICJyZXNvdXJjZXMiOworc3Rh
dGljIGNvbnN0IGNoYXIqIGtGaWxlTmFtZVJlcG9ydExvYWQgPSAicmVwb3J0X2xvYWQudHh0IjsK
K3N0YXRpYyBjb25zdCBjaGFyKiBrRmlsZU5hbWVSZXBvcnRSZWNvcmQgPSAicmVwb3J0X3JlY29y
ZC50eHQiOworc3RhdGljIGNvbnN0IGNoYXIqIGtGaWxlTmFtZVJlcG9ydFJlcGxheSA9ICJyZXBv
cnRfcmVwbGF5LnR4dCI7CisKK3N0YXRpYyBpbnQga01heE1hdGNoID0gc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKTsKK3N0YXRpYyBpbnQga01pbk1hdGNoID0gc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptaW4oKTsKKworLy8gVE9ETzogZGV0ZXJtaW5lIHdoYXQncyBhbGxvd2VkIGFz
IGEgY2hhcmFjdGVyIGluIFVSTCBvciBoZWFkZXIuIFdlIGFyZQorLy8gdHJlYXRpbmcgdGhlbSBh
cyBhc2NpaSwgYnV0IHBlcmhhcHMgdGhleSBzaG91bGQgYmUgVVRGOD8gSWYgc28sIHRoZW4gd2hh
dAorLy8gZG9lcyBXVEY6OlN0cmluZzo6bGVuZ3RoICh1c2VkIHdoZW4gaGFzaGluZyBhIHN0cmlu
ZykgcmV0dXJuPyBCeXRlcz8KKy8vIENoYXJhY3RlcnM/IEdyYXBoZW1lcz8gKFdlIGFzayBmb3Ig
dGhlIGxlbmd0aCB3aGVuIGhhc2hpbmcgdGhlIFVSTCBhbmQgd2hlbgorLy8gY2FydmluZyBvdXQg
YSBzcGFjZSBmb3IgaXQgb24gZGlzaywgbWVhbmluZyB0aGF0IHdlIHJlYWxseSB3YW50IGJ5dGVz
LikKKy8vIEFOU1dFUjogaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHVzZWQgdWludDhfdCdzIG9y
IHVpbnQxNl90J3MuIEl0IHRha2VzIG5vCisvLyBhY2NvdW50IG9mIFVURjggb3IgVVRGMTYgb3Ig
Z3JhcGhlbWUgY2x1c3RlcnMuCisKKy8vIFRPRE86IFdoYXQncyB0aGUgdGhyZWFkaW5nIG1vZGVs
IGluIHdoaWNoIHdlJ3JlIHJ1bm5pbmc/IFdlJ3JlIGFjdGluZyBhcyBhCisvLyBzaW5nbGV0b24g
dGhhdCBnZXRzIGNhbGxlZCBhbGwgb3ZlciB0aGUgcGxhY2UsIGJ1dCB3ZSdyZSBub3QgZG9pbmcg
YW55dGhpbmcKKy8vIHRvIHByb3RlY3Qgb3Vyc2VsZiBmcm9tIG11bHRpLXRocmVhZGVkIGFjY2Vz
cy4gT24gdGhlIG90aGVyIGhhbmQsIHBlcmhhcHMKKy8vIHdlJ3JlIE9LIHdpdGhvdXQgc3luY2hy
b25pemF0aW9uLiBXaGVuIHJlY29yZGluZywgd2UncmUganVzdCB3cml0aW5nIGRhdGEgdG8KKy8v
IGZpbGVzLiBXaGVuIHBsYXlpbmcgdGhpbmdzIGJhY2ssIHdlIGluaXRpYWxpemUgb3VyIGRhdGEg
dXAgZnJvbnQgYW5kIHRoZW4KKy8vIHVzZSBpdCBpbiBhIHJlYWQtb25seSBtYW5uZXIgYWZ0ZXJ3
YXJkcy4KKworTWFuYWdlciYgTWFuYWdlcjo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8TWFuYWdlcj4gaW5zdGFuY2U7CisgICAgcmV0dXJuIGluc3RhbmNlOworfQor
Cit2b2lkIE1hbmFnZXI6OmluaXRpYWxpemUoCisgICAgYm9vbCBzaG91bGRSZWNvcmROZXR3b3Jr
UmVxdWVzdHMsCisgICAgYm9vbCBzaG91bGRSZXBsYXlOZXR3b3JrUmVxdWVzdHMsCisgICAgY29u
c3QgU3RyaW5nJiByZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uKQoreworICAgIERFQlVHX0xPRygi
SW5pdGlhbGl6aW5nIik7CisKKyAgICBtX3Nob3VsZFJlY29yZE5ldHdvcmtSZXF1ZXN0cyA9IHNo
b3VsZFJlY29yZE5ldHdvcmtSZXF1ZXN0czsKKyAgICBtX3Nob3VsZFJlcGxheU5ldHdvcmtSZXF1
ZXN0cyA9IHNob3VsZFJlcGxheU5ldHdvcmtSZXF1ZXN0czsKKyAgICBtX3JlY29yZFJlcGxheUNh
Y2hlTG9jYXRpb24gPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocmVjb3JkUmVw
bGF5Q2FjaGVMb2NhdGlvbiwga0Rpck5hbWVSZWNvcmRSZXBsYXkpOworCisgICAgLy8gREVCVUdf
TE9HKCJDYWNoZSBsb2NhdGlvbiA9ICV7cHVibGljfXMiLCBtX3JlY29yZFJlcGxheUNhY2hlTG9j
YXRpb24uYXNjaWkoKS5kYXRhKCkpOworCisgICAgaWYgKG1fc2hvdWxkUmVwbGF5TmV0d29ya1Jl
cXVlc3RzKQorICAgICAgICBsb2FkQ2FjaGVkUmVzb3VyY2VzKCk7Cit9CisKK3ZvaWQgTWFuYWdl
cjo6dGVybWluYXRlKCkKK3sKKyAgICAvLyBERUJVR19MT0coIlRlcm1pbmF0aW5nIC0tICVkIHRl
cm1pbmF0b3JzIiwgKGludCkgbV90ZXJtaW5hdGlvbkZ1bmN0aW9ucy5zaXplKCkpOworCisgICAg
Zm9yIChjb25zdCBhdXRvJiB0ZXJtaW5hdGlvbkZ1bmN0aW9uIDogbV90ZXJtaW5hdGlvbkZ1bmN0
aW9ucykKKyAgICAgICAgdGVybWluYXRpb25GdW5jdGlvbigpOworCisgICAgbV90ZXJtaW5hdGlv
bkZ1bmN0aW9ucy5jbGVhcigpOworfQorCitDYWNoZWRSZXNvdXJjZSogTWFuYWdlcjo6ZmluZE1h
dGNoKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICAvLyBE
RUJVR19MT0coIlVSTCA9ICV7cHVibGljfXMiLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLmFzY2lp
KCkuZGF0YSgpKTsKKworICAgIGNvbnN0IGF1dG8mIHVybCA9IHJlcXVlc3QudXJsKCk7CisgICAg
YXV0byBiZXN0TWF0Y2ggPSBmaW5kRXhhY3RNYXRjaCh1cmwpOworICAgIGlmICghYmVzdE1hdGNo
KQorICAgICAgICBiZXN0TWF0Y2ggPSBmaW5kQmVzdEZ1enp5TWF0Y2godXJsKTsKKworICAgIHJl
dHVybiBiZXN0TWF0Y2g7Cit9CisKK0NhY2hlZFJlc291cmNlKiBNYW5hZ2VyOjpmaW5kRXhhY3RN
YXRjaChjb25zdCBXZWJDb3JlOjpVUkwmIHVybCkKK3sKKyAgICBhdXRvIGxvd2VyID0gc3RkOjps
b3dlcl9ib3VuZChzdGQ6OmJlZ2luKG1fY2FjaGVkUmVzb3VyY2VzKSwgc3RkOjplbmQobV9jYWNo
ZWRSZXNvdXJjZXMpLCB1cmwsIFtdKGF1dG8mIHJlc291cmNlLCBjb25zdCBhdXRvJiB1cmwpIHsK
KyAgICAgICAgcmV0dXJuIFdURjo6Y29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKHJlc291cmNlLmZ1
bGxVUkwoKS5zdHJpbmcoKSwgdXJsLnN0cmluZygpKTsKKyAgICB9KTsKKworICAgIGlmIChsb3dl
ciAhPSBzdGQ6OmVuZChtX2NhY2hlZFJlc291cmNlcykgJiYgbG93ZXItPmZ1bGxVUkwoKSA9PSB1
cmwpIHsKKyAgICAgICAgLy8gREVCVUdfTE9HKCJGb3VuZCBleGFjdCBtYXRjaDogJXtwdWJsaWN9
cyIsIGxvd2VyLT5mdWxsVVJMKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBy
ZXR1cm4gJipsb3dlcjsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQ2FjaGVk
UmVzb3VyY2UqIE1hbmFnZXI6OmZpbmRCZXN0RnV6enlNYXRjaChjb25zdCBXZWJDb3JlOjpVUkwm
IHJlcXVlc3RVUkwpCit7CisgICAgQ2FjaGVkUmVzb3VyY2UqIGJlc3RNYXRjaCA9IG51bGxwdHI7
CisgICAgaW50IGJlc3RTY29yZSA9IGtNaW5NYXRjaDsKKyAgICBjb25zdCBhdXRvJiBiYXNlVVJM
ID0gYmFzZVVSTEFzU3RyaW5nKHJlcXVlc3RVUkwpOworCisgICAgY29uc3QgYXV0byYgbG93ZXIg
PSBzdGQ6Omxvd2VyX2JvdW5kKHN0ZDo6YmVnaW4obV9jYWNoZWRSZXNvdXJjZXMpLCBzdGQ6OmVu
ZChtX2NhY2hlZFJlc291cmNlcyksIGJhc2VVUkwsIFtdKGF1dG8mIHJlc291cmNlLCBjb25zdCBh
dXRvJiB1cmwpIHsKKyAgICAgICAgcmV0dXJuIFdURjo6Y29kZVBvaW50Q29tcGFyZUxlc3NUaGFu
KHJlc291cmNlLmJhc2VVUkwoKS5zdHJpbmcoKSwgdXJsKTsKKyAgICB9KTsKKyAgICBjb25zdCBh
dXRvJiB1cHBlciA9IHN0ZDo6dXBwZXJfYm91bmQobG93ZXIsIHN0ZDo6ZW5kKG1fY2FjaGVkUmVz
b3VyY2VzKSwgYmFzZVVSTCwgW10oY29uc3QgYXV0byYgdXJsLCBhdXRvJiByZXNvdXJjZSkgewor
ICAgICAgICByZXR1cm4gV1RGOjpjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4ocmVzb3VyY2UuYmFz
ZVVSTCgpLnN0cmluZygpLCB1cmwpOworICAgIH0pOworCisgICAgY29uc3QgYXV0byYgcmVxdWVz
dFBhcmFtZXRlcnMgPSBXZWJDb3JlOjpVUkxQYXJzZXI6OnBhcnNlVVJMRW5jb2RlZEZvcm0ocmVx
dWVzdFVSTC5xdWVyeSgpKTsKKyAgICBmb3IgKGF1dG8gaVJlc291cmNlID0gbG93ZXI7IGlSZXNv
dXJjZSAhPSB1cHBlcjsgKytpUmVzb3VyY2UpIHsKKyAgICAgICAgaW50IHRoaXNTY29yZSA9IGZ1
enp5TWF0Y2hVUkxzKHJlcXVlc3RVUkwsIHJlcXVlc3RQYXJhbWV0ZXJzLCBpUmVzb3VyY2UtPmZ1
bGxVUkwoKSwgaVJlc291cmNlLT5xdWVyeVBhcmFtZXRlcnMoKSk7CisgICAgICAgIGlmIChiZXN0
U2NvcmUgPCB0aGlzU2NvcmUpIHsKKyAgICAgICAgICAgIERFQlVHX0xPRygiTmV3IGJlc3QgbWF0
Y2ggKCVkKTogJXtwdWJsaWN9cyIsIHRoaXNTY29yZSwgaVJlc291cmNlLT5mdWxsVVJMKCkuc3Ry
aW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgYmVzdFNjb3JlID0gdGhpc1Njb3Jl
OworICAgICAgICAgICAgYmVzdE1hdGNoID0gJippUmVzb3VyY2U7CisgICAgICAgICAgICBpZiAo
YmVzdFNjb3JlID09IGtNYXhNYXRjaCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBiZXN0TWF0Y2g7Cit9CisKK2ludCBNYW5hZ2VyOjpmdXp6
eU1hdGNoVVJMcygKKyAgICBjb25zdCBXZWJDb3JlOjpVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IFdl
YkNvcmU6OlVSTFBhcnNlcjo6VVJMRW5jb2RlZEZvcm0mIHJlcXVlc3RQYXJhbWV0ZXJzLAorICAg
IGNvbnN0IFdlYkNvcmU6OlVSTCYgcmVzb3VyY2VVUkwsIGNvbnN0IFdlYkNvcmU6OlVSTFBhcnNl
cjo6VVJMRW5jb2RlZEZvcm0mIHJlc291cmNlUGFyYW1ldGVycykKK3sKKyAgICAvLyBJZiBldmVy
eXRoaW5nIG1hdGNoZXMsIHJldHVybiB0aGlzIGFzIHRoZSAiYmVzdCIgbWF0Y2guCisKKyAgICBp
ZiAocmVxdWVzdFVSTCA9PSByZXNvdXJjZVVSTCkgeworICAgICAgICBERUJVR19MT0coIkNvbXBs
ZXRlIG1hdGNoOiAle3B1YmxpY31zID09ICV7cHVibGljfXMiLAorICAgICAgICAgICAgcmVxdWVz
dFVSTC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwKKyAgICAgICAgICAgIHJlc291cmNlVVJMLnN0
cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGtNYXhNYXRjaDsKKyAgICB9
CisKKyNpZiAhRU5BQkxFKFdURl9VUkxfRlVaWllfTUFUQ0hJTkcpCisgICAgREVCVUdfTE9HKCJN
aXNtYXRjaDogJXtwdWJsaWN9cyA9PSAle3B1YmxpY31zIiwgcmVxdWVzdFVSTC5zdHJpbmcoKS5h
c2NpaSgpLmRhdGEoKSwgcmVzb3VyY2VVUkwuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAg
IHJldHVybiBrTWluTWF0Y2g7CisjZWxzZQorICAgIC8vIFdlIGRvIGZ1enp5IG1hdGNoaW5nIG9u
IHRoZSBwYXRoIGFuZCBxdWVyeSBwYXJhbWV0ZXJzLiBTbyBsZXQncyBmaXJzdAorICAgIC8vIG1h
a2Ugc3VyZSB0aGF0IGFsbCB0aGUgb3RoZXIgcGFydHMgYXJlIGVxdWFsLgorCisgICAgLy8gSWYg
c2NoZW1lLCBob3N0LCBhbmQgcG9ydCBkb24ndCBhbGwgbWF0Y2gsIHJldHVybiB0aGlzIGFzIHRo
ZSAid29yc3QiCisgICAgLy8gbWF0Y2guCisKKyAgICBpZiAoIXByb3RvY29sSG9zdEFuZFBvcnRB
cmVFcXVhbChyZXF1ZXN0VVJMLCByZXNvdXJjZVVSTCkpIHsKKyAgICAgICAgREVCVUdfTE9HKCJT
Y2hlbWUvaG9zdC9wb3J0IG1pc21hdGNoOiAle3B1YmxpY31zID09ICV7cHVibGljfXMiLCByZXF1
ZXN0VVJMLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpLCByZXNvdXJjZVVSTC5zdHJpbmcoKS5hc2Np
aSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBrTWluTWF0Y2g7CisgICAgfQorCisgICAgLy8g
SWYgZnJhZ21lbnRzIGRvbid0IG1hdGNoLCByZXR1cm4gdGhpcyBhcyB0aGUgIndvcnN0IiBtYXRj
aC4KKworICAgIGlmIChyZXF1ZXN0VVJMLmZyYWdtZW50SWRlbnRpZmllcigpICE9IHJlc291cmNl
VVJMLmZyYWdtZW50SWRlbnRpZmllcigpKSB7CisgICAgICAgIERFQlVHX0xPRygiRnJhZ21lbnRz
IG1pc21hdGNoOiAle3B1YmxpY31zID09ICV7cHVibGljfXMiLCByZXF1ZXN0VVJMLnN0cmluZygp
LmFzY2lpKCkuZGF0YSgpLCByZXNvdXJjZVVSTC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Cisg
ICAgICAgIHJldHVybiBrTWluTWF0Y2g7CisgICAgfQorCisgICAgREVCVUdfTE9HKCJGdXp6eSBt
YXRjaGluZzoiKTsKKyAgICBERUJVR19MT0coIiAgIDogJXtwdWJsaWN9cyIsIHJlcXVlc3RVUkwu
c3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgIERFQlVHX0xPRygiICAgOiAle3B1YmxpY31z
IiwgcmVzb3VyY2VVUkwuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworCisgICAgLy8gQ29tcGFy
ZSB0aGUgcGF0aCBjb21wb25lbnRzIGFuZCB0aGUgcXVlcnkgcGFyYW1ldGVycy4gU2NvcmUgZWFj
aCBwYXJ0aWFsCisgICAgLy8gbWF0Y2ggYXMgKzQsIGVhY2ggbWlzbWF0Y2ggYXMgLTEsIGFuZCBl
YWNoIG1pc3NpbmcgY29tcG9uZW50ICBhcyAtMS4KKworICAgIGNvbnN0IGludCBrUGF0aE1hdGNo
U2NvcmUgPSA0OworICAgIGNvbnN0IGludCBrUGF0aE1pc21hdGNoU2NvcmUgPSAtMTsKKyAgICBj
b25zdCBpbnQga1BhdGhNaXNzaW5nU2NvcmUgPSAtMTsKKyAgICBjb25zdCBpbnQga1BhcmFtZXRl
ck1hdGNoU2NvcmUgPSA0OworICAgIGNvbnN0IGludCBrUGFyYW1ldGVyTWlzbWF0Y2hTY29yZSA9
IC0xOworICAgIGNvbnN0IGludCBrUGFyYW1ldGVyTWlzc2luZ1Njb3JlID0gLTE7CisKKyAgICBp
bnQgc2NvcmUgPSAwOworCisgICAgLy8gUXVhbnRpemUgdGhlIGRpZmZlcmVuY2VzIGluIFVSTCBw
YXRocy4KKyAgICAvLworICAgIC8vIFRoZSBhcHByb2FjaCBoZXJlIGlzIHRvIGluY3JlYXNlIG91
ciBzY29yZSBmb3IgZWFjaCBtYXRjaGluZyBwYXRoCisgICAgLy8gY29tcG9uZW50LCBhbmQgdG8g
c3VidHJhY3QgZm9yIGVhY2ggZGlmZmVyaW5nIGNvbXBvbmVudCBhcyB3ZWxsIGFzIGZvcgorICAg
IC8vIGNvbXBvbmVudHMgdGhhdCBleGlzdCBpbiBvbmUgcGF0aCBidXQgbm90IHRoZSBvdGhlci4K
KworICAgIGNvbnN0IGF1dG8mIHJlcXVlc3RQYXRoID0gcmVxdWVzdFVSTC5wYXRoKCk7CisgICAg
Y29uc3QgYXV0byYgcmVzb3VyY2VQYXRoID0gcmVzb3VyY2VVUkwucGF0aCgpOworCisgICAgVmVj
dG9yPFN0cmluZz4gcmVxdWVzdFBhdGhDb21wb25lbnRzLCByZXNvdXJjZVBhdGhDb21wb25lbnRz
OworICAgIHJlcXVlc3RQYXRoLnNwbGl0KCcvJywgcmVxdWVzdFBhdGhDb21wb25lbnRzKTsKKyAg
ICByZXNvdXJjZVBhdGguc3BsaXQoJy8nLCByZXNvdXJjZVBhdGhDb21wb25lbnRzKTsKKworICAg
IGF1dG8gdXBkYXRlZEl0ZXJhdG9ycyA9IHN0ZDo6bWlzbWF0Y2goCisgICAgICAgIHN0ZDo6YmVn
aW4ocmVxdWVzdFBhdGhDb21wb25lbnRzKSwgc3RkOjplbmQocmVxdWVzdFBhdGhDb21wb25lbnRz
KSwKKyAgICAgICAgc3RkOjpiZWdpbihyZXNvdXJjZVBhdGhDb21wb25lbnRzKSwgc3RkOjplbmQo
cmVzb3VyY2VQYXRoQ29tcG9uZW50cykpOworCisgICAgYXV0byBtYXRjaGluZ0Rpc3RhbmNlID0g
c3RkOjpkaXN0YW5jZShzdGQ6OmJlZ2luKHJlcXVlc3RQYXRoQ29tcG9uZW50cyksIHVwZGF0ZWRJ
dGVyYXRvcnMuZmlyc3QpOworICAgIGF1dG8gcmVxdWVzdFBhdGhNaXNtYXRjaERpc3RhbmNlID0g
c3RkOjpkaXN0YW5jZSh1cGRhdGVkSXRlcmF0b3JzLmZpcnN0LCBzdGQ6OmVuZChyZXF1ZXN0UGF0
aENvbXBvbmVudHMpKTsKKyAgICBhdXRvIHJlc291cmNlUGF0aE1pc21hdGNoRGlzdGFuY2UgPSBz
dGQ6OmRpc3RhbmNlKHVwZGF0ZWRJdGVyYXRvcnMuc2Vjb25kLCBzdGQ6OmVuZChyZXNvdXJjZVBh
dGhDb21wb25lbnRzKSk7CisgICAgZGVjbHR5cGUobWF0Y2hpbmdEaXN0YW5jZSkgbWlzbWF0Y2hp
bmdEaXN0YW5jZTsKKyAgICBkZWNsdHlwZShtYXRjaGluZ0Rpc3RhbmNlKSBtaXNzaW5nRGlzdGFu
Y2U7CisgICAgaWYgKHJlcXVlc3RQYXRoTWlzbWF0Y2hEaXN0YW5jZSA8IHJlc291cmNlUGF0aE1p
c21hdGNoRGlzdGFuY2UpIHsKKyAgICAgICAgbWlzbWF0Y2hpbmdEaXN0YW5jZSA9IHJlcXVlc3RQ
YXRoTWlzbWF0Y2hEaXN0YW5jZTsKKyAgICAgICAgbWlzc2luZ0Rpc3RhbmNlID0gcmVzb3VyY2VQ
YXRoTWlzbWF0Y2hEaXN0YW5jZSAtIHJlcXVlc3RQYXRoTWlzbWF0Y2hEaXN0YW5jZTsKKyAgICB9
IGVsc2UgeworICAgICAgICBtaXNtYXRjaGluZ0Rpc3RhbmNlID0gcmVzb3VyY2VQYXRoTWlzbWF0
Y2hEaXN0YW5jZTsKKyAgICAgICAgbWlzc2luZ0Rpc3RhbmNlID0gcmVxdWVzdFBhdGhNaXNtYXRj
aERpc3RhbmNlIC0gcmVzb3VyY2VQYXRoTWlzbWF0Y2hEaXN0YW5jZTsKKyAgICB9CisKKyAgICBE
RUJVR19MT0coIlBhdGggbWF0Y2hpbmcgcmVzdWx0czogbWF0Y2hpbmcgPSAlZCwgbWlzbWF0Y2hp
bmcgPSAlZCwgbWlzc2luZyA9ICVkIiwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtYXRjaGlu
Z0Rpc3RhbmNlKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtaXNtYXRjaGluZ0Rpc3RhbmNl
KSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtaXNzaW5nRGlzdGFuY2UpKTsKKworICAgIHNj
b3JlICs9IG1hdGNoaW5nRGlzdGFuY2UgKiBrUGF0aE1hdGNoU2NvcmUKKyAgICAgICAgKyBtaXNt
YXRjaGluZ0Rpc3RhbmNlICoga1BhdGhNaXNtYXRjaFNjb3JlCisgICAgICAgICsgbWlzc2luZ0Rp
c3RhbmNlICoga1BhdGhNaXNzaW5nU2NvcmU7CisgICAgREVCVUdfTE9HKCJTY29yZSA9ICVkIiwg
c2NvcmUpOworCisgICAgLy8gUXVhbnRpemUgdGhlIGRpZmZlcmVuY2VzIGluIHF1ZXJ5IHBhcmFt
ZXRlcnMuCisgICAgLy8KKyAgICAvLyBUaGUgYXBwcm9hY2ggaGVyZSBpcyB0byB3YWxrIGxvY2st
c3RlcCBvdmVyIHRoZSB0d28gc2V0cyBvZiBxdWVyeQorICAgIC8vIHBhcmFtZXRlcnMuIEZvciBl
YWNoIHBhaXIgb2YgcGFyYW1ldGVycyBmb3IgZWFjaCBVUkwsIHdlIGNvbXBhcmUgdGhlaXIKKyAg
ICAvLyBuYW1lcyBhbmQgdmFsdWVzLiBJZiB0aGUgbmFtZXMgYW5kIHZhbHVlcyBtYXRjaCwgd2Ug
YWRkIGEgaGlnaCBzY29yZS4gSWYKKyAgICAvLyBqdXN0IHRoZSBuYW1lcyBtYXRjaCwgd2UgYWRk
IGEgbG93ZXIgc2NvcmUuCisgICAgLy8KKyAgICAvLyBJZiB0aGUgbmFtZXMgZG9uJ3QgbWF0Y2gs
IHdlIHRoZW4gYXNzdW1lIHRoYXQgc29tZSBpbnRlcnZlbmluZyBxdWVyeQorICAgIC8vIHBhcmFt
ZXRlcnMgaGF2ZSBiZWVuIGFkZGVkIHRvIG9uZSBvciB0aGUgb3RoZXIgVVJMLiBXZSB0aGVyZWZv
cmUgdHJ5IHRvCisgICAgLy8gc3luYyB1cCB0aGUgaXRlcmF0b3JzIHVzZWQgdG8gdHJhdmVyc2Ug
dGhlIHF1ZXJ5IHBhcmFtZXRlciBjb2xsZWN0aW9ucworICAgIC8vIHNvIHRoYXQgdGhleSdyZSBh
Z2FpbiBwb2ludGluZyB0byBwYXJhbWV0ZXJzIHdpdGggdGhlIHNhbWUgbmFtZXMuIFdlCisgICAg
Ly8gZmlyc3Qgc3RhcnQgc2Nhbm5pbmcgZm9yd2FyZCBkb3duIHRoZSBxdWVyeSBwYXJhbWV0ZXJz
IGZvciBvbmUgVVJMLAorICAgIC8vIGxvb2tpbmcgZm9yIG9uZSB3aXRoIHRoZSBzYW1lIG5hbWUg
YXMgdGhlIG9uZSB3ZSdyZSBvbiBpbiB0aGUgb3RoZXIgVVJMLgorICAgIC8vIElmIHRoYXQgZG9l
c24ndCB0dXJuIHVwIGEgbWF0Y2gsIHdlIHJldmVyc2UgdGhlIHJvbGVzIG9mIHRoZSBxdWVyeQor
ICAgIC8vIHBhcmFtZXRlcnMgcGVyZm9ybSB0aGUgc2FtZSBwcm9jZXNzIG9mIHNjYW5uaW5nIGZv
cndhcmQuIElmIG5laXRoZXIgb2YKKyAgICAvLyB0aGVzZSBzY2FucyBwcm9kdWNlcyBhIG1hdGNo
LCB3ZSBmaWd1cmUgdGhhdCBlYWNoIHF1ZXJ5IHBhcmFtZXRlciB3ZSdyZQorICAgIC8vIGxvb2tp
bmcgYXQgZnJvbSBlYWNoIG9mIHRoZSBxdWVyeSBwYXJhbWV0ZXIgY29sbGVjdGlvbnMgaXMgdW5p
cXVlLiBXZQorICAgIC8vIGRlZHVjdCBwb2ludHMgZnJvbSB0aGUgb3ZlcmFsbCBzY29yZSBhbmQg
bW92ZSBvbiB0byB0aGUgbmV4dCBxdWVyeQorICAgIC8vIHBhcmFtZXRlcnMgaW4gZWFjaCBzZXQu
CisgICAgLy8KKyAgICAvLyBJZiwgb24gdGhlIG90aGVyIGhhbmQsIHRoZSBmb3J3YXJkLXNjYW5u
aW5nIGRvZXMgdHVybiB1cCBhIG1hdGNoLCB3ZQorICAgIC8vIGFkanVzdCBvdXQgaXRlcmF0b3Jz
IHNvIHRoYXQgdGhleSdyZSBub3cgYWdhaW4gcG9pbnRpbmcgdG8gcXVlcnkKKyAgICAvLyBwYXJh
bWV0ZXJzIHdpdGggdGhlIHNhbWUgbmFtZS4gVGhpcyBzeW5jaHJvbml6YXRpb24gaW52b2x2ZXMg
c2tpcHBpbmcKKyAgICAvLyBvdmVyIGFueSBpbnRlcnZlbmluZyBxdWVyeSBwYXJhbWV0ZXJzIGlu
IG9uZSBjb2xsZWN0aW9uIG9yIHRoZSBvdGhlci4KKyAgICAvLyBUaGUgYXNzdW1wdGlvbiBoZXJl
IGlzIHRoYXQgdGhlc2UgaW50ZXJ2ZW5pbmcgcXVlcnkgcGFyYW1ldGVycyBhcmUKKyAgICAvLyBp
bnNlcnRpb25zIHRoYXQgZXhpc3QgaW4gb25lIFVSTCBidXQgbm90IHRoZSBvdGhlci4gV2UgdHJl
YXQgdGhlbSBhcworICAgIC8vIHN1Y2gsIHN1YnRyYWN0aW5nIGZyb20gdGhlIG92ZXJhbGwgc2Nv
cmUgZm9yIGVhY2ggb25lLiBIb3dldmVyLCB0aGlzCisgICAgLy8gYXNzdW1wdGlvbiBtaWdodCBl
YXNpbHkgYmUgaW5jb3JyZWN0LiBJdCBtaWdodCBiZSB0aGF0IHRoZSBxdWVyeQorICAgIC8vIHBh
cmFtZXRlcnMgdGhhdCB3ZSdyZSBza2lwcGluZyBvdmVyIGluIG9uZSBVUkwgbWlnaHQgZXhpc3Qg
aW4gdGhlIG90aGVyCisgICAgLy8gVVJMLiBJZiBzbywgdGhlbiB3ZSBhcmUgZm9yZWdvaW5nIHRo
ZSBwb3NzaWJpbGl0eSBvZiB1c2luZyB0aG9zZSBtYXRjaGVzCisgICAgLy8gdG8gaW5jcmVhc2Ug
dGhlIG92ZXJhbGwgbWF0Y2ggc2NvcmUgYmV0d2VlbiB0aGUgdHdvIFVSTHMuCisgICAgLy8KKyAg
ICAvLyBUbyBhZGRyZXNzIHRoaXMgcHJvYmxlbSwgd2UgbWlnaHQgd2FudCB0byBjb25zaWRlciBz
b3J0aW5nIHRoZSBxdWVyeQorICAgIC8vIHBhcmFtZXRlcnMgYnkgdGhlaXIgbmFtZXMuIEhvd2V2
ZXIsIGRvaW5nIHRoaXMgbWF5IGNhdXNlIHByb2JsZW1zIGlmIHRoZQorICAgIC8vIG9yZGVyIG9m
IHRoZSBwYXJhbWV0ZXJzIGlzIHNpZ25pZmljYW50LiBTbyBpZiB3ZSBkZWNpZGUgdG8gdGFrZSB0
aGUKKyAgICAvLyBhcHByb2FjaCBvZiBzb3J0aW5nIHRoZSBwYXJhbWV0ZXJzLCBrZWVwIGluIG1p
bmQgdGhpcyBwb3NzaWJsZSBkcmF3YmFjay4KKworICAgIGF1dG8gcmVxdWVzdFBhcmFtZXRlciA9
IHN0ZDo6YmVnaW4ocmVxdWVzdFBhcmFtZXRlcnMpOworICAgIGF1dG8gcmVzb3VyY2VQYXJhbWV0
ZXIgPSBzdGQ6OmJlZ2luKHJlc291cmNlUGFyYW1ldGVycyk7CisKKyAgICBmb3IgKDsgcmVxdWVz
dFBhcmFtZXRlciAhPSBzdGQ6OmVuZChyZXF1ZXN0UGFyYW1ldGVycykgJiYgcmVzb3VyY2VQYXJh
bWV0ZXIgIT0gc3RkOjplbmQocmVzb3VyY2VQYXJhbWV0ZXJzKTsgKytyZXF1ZXN0UGFyYW1ldGVy
LCArK3Jlc291cmNlUGFyYW1ldGVyKSB7CisgICAgICAgIGlmIChyZXF1ZXN0UGFyYW1ldGVyLT5m
aXJzdCA9PSByZXNvdXJjZVBhcmFtZXRlci0+Zmlyc3QpIHsKKyNpZiBFTkFCTEUoV1RGX0lOVEVS
TkFMX0RFQlVHR0lORykKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0UGFyYW1ldGVyLT5zZWNvbmQg
PT0gcmVzb3VyY2VQYXJhbWV0ZXItPnNlY29uZCkKKyAgICAgICAgICAgICAgICBERUJVR19MT0co
Ik1hdGNoaW5nIHBhcmFtZXRlciBuYW1lcyBhbmQgdmFsdWVzOiBcIiV7cHVibGljfXNcIiA9IFwi
JXtwdWJsaWN9c1wiIiwgcmVxdWVzdFBhcmFtZXRlci0+Zmlyc3QuYXNjaWkoKS5kYXRhKCksIHJl
cXVlc3RQYXJhbWV0ZXItPnNlY29uZC5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgREVCVUdfTE9HKCJNaXNtYXRjaGluZyBwYXJhbWV0ZXIgdmFsdWVz
OiBcIiV7cHVibGljfXNcIiA9IFwiJXtwdWJsaWN9c1wiIHZzLiBcIiV7cHVibGljfXNcIiIsIHJl
cXVlc3RQYXJhbWV0ZXItPmZpcnN0LmFzY2lpKCkuZGF0YSgpLCByZXF1ZXN0UGFyYW1ldGVyLT5z
ZWNvbmQuYXNjaWkoKS5kYXRhKCksIHJlc291cmNlUGFyYW1ldGVyLT5zZWNvbmQuYXNjaWkoKS5k
YXRhKCkpOworI2VuZGlmCisgICAgICAgICAgICBzY29yZSArPSAocmVxdWVzdFBhcmFtZXRlci0+
c2Vjb25kID09IHJlc291cmNlUGFyYW1ldGVyLT5zZWNvbmQpID8ga1BhcmFtZXRlck1hdGNoU2Nv
cmUgOiBrUGFyYW1ldGVyTWlzbWF0Y2hTY29yZTsKKyAgICAgICAgICAgIERFQlVHX0xPRygiU2Nv
cmUgPSAlZCIsIHNjb3JlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIERFQlVHX0xP
RygiTWlzbWF0Y2hpbmcgcGFyYW1ldGVyIG5hbWVzOiAle3B1YmxpY31zLCAle3B1YmxpY31zIiwg
cmVxdWVzdFBhcmFtZXRlci0+Zmlyc3QuYXNjaWkoKS5kYXRhKCksIHJlc291cmNlUGFyYW1ldGVy
LT5maXJzdC5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICAgICAgICAgIGNvbnN0IGF1dG8gc2NhbkZv
cndhcmRGb3JNYXRjaCA9IFt0aGlzLCAmc2NvcmUsIGtQYXJhbWV0ZXJNYXRjaFNjb3JlLCBrUGFy
YW1ldGVyTWlzbWF0Y2hTY29yZSwga1BhcmFtZXRlck1pc3NpbmdTY29yZV0oY29uc3QgYXV0byYg
Zml4ZWRJdGVyLCBhdXRvJiBzY2FubmluZ0l0ZXIsIGNvbnN0IGF1dG8mIHNjYW5uZXJFbmQpIHsK
KyAgICAgICAgICAgICAgICBhdXRvIHNjYW5uZXIgPSBzY2FubmluZ0l0ZXI7CisgICAgICAgICAg
ICAgICAgd2hpbGUgKHNjYW5uZXIgIT0gc2Nhbm5lckVuZCAmJiBzY2FubmVyLT5maXJzdCAhPSBm
aXhlZEl0ZXItPmZpcnN0KQorICAgICAgICAgICAgICAgICAgICArK3NjYW5uZXI7CisgICAgICAg
ICAgICAgICAgaWYgKHNjYW5uZXIgPT0gc2Nhbm5lckVuZCkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIERFQlVHX0xPRygiU2tpcHBpbmcgcGFzdCAl
ZCBub24tbWF0Y2hpbmcgcGFyYW1ldGVyIG5hbWVzIiwgc3RhdGljX2Nhc3Q8aW50PihzdGQ6OmRp
c3RhbmNlKHNjYW5uaW5nSXRlciwgc2Nhbm5lcikpKTsKKyAgICAgICAgICAgICAgICBzY29yZSAr
PSBrUGFyYW1ldGVyTWlzc2luZ1Njb3JlICogc3RkOjpkaXN0YW5jZShzY2FubmluZ0l0ZXIsIHNj
YW5uZXIpOworICAgICAgICAgICAgICAgIERFQlVHX0xPRygiU2NvcmUgPSAlZCIsIHNjb3JlKTsK
KyNpZiBFTkFCTEUoV1RGX0lOVEVSTkFMX0RFQlVHR0lORykKKyAgICAgICAgICAgICAgICBpZiAo
Zml4ZWRJdGVyLT5zZWNvbmQgPT0gc2Nhbm5lci0+c2Vjb25kKQorICAgICAgICAgICAgICAgICAg
ICBERUJVR19MT0coIk1hdGNoaW5nIHBhcmFtZXRlciBuYW1lcyBhbmQgdmFsdWVzOiBcIiV7cHVi
bGljfXNcIiA9IFwiJXtwdWJsaWN9c1wiIiwgZml4ZWRJdGVyLT5maXJzdC5hc2NpaSgpLmRhdGEo
KSwgZml4ZWRJdGVyLT5zZWNvbmQuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgREVCVUdfTE9HKCJNaXNtYXRjaGluZyBwYXJhbWV0ZXIg
dmFsdWVzOiBcIiV7cHVibGljfXNcIiA9IFwiJXtwdWJsaWN9c1wiIHZzLiBcIiV7cHVibGljfXNc
IiIsIGZpeGVkSXRlci0+Zmlyc3QuYXNjaWkoKS5kYXRhKCksIGZpeGVkSXRlci0+c2Vjb25kLmFz
Y2lpKCkuZGF0YSgpLCBzY2FubmVyLT5zZWNvbmQuYXNjaWkoKS5kYXRhKCkpOworI2VuZGlmCisg
ICAgICAgICAgICAgICAgc2NvcmUgKz0gKGZpeGVkSXRlci0+c2Vjb25kID09IHNjYW5uZXItPnNl
Y29uZCkgPyBrUGFyYW1ldGVyTWF0Y2hTY29yZSA6IGtQYXJhbWV0ZXJNaXNtYXRjaFNjb3JlOwor
ICAgICAgICAgICAgICAgIERFQlVHX0xPRygiU2NvcmUgPSAlZCIsIHNjb3JlKTsKKyAgICAgICAg
ICAgICAgICBzY2FubmluZ0l0ZXIgPSBzY2FubmVyOworICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKCFzY2FuRm9yd2FyZEZvck1h
dGNoKHJlcXVlc3RQYXJhbWV0ZXIsIHJlc291cmNlUGFyYW1ldGVyLCBzdGQ6OmVuZChyZXNvdXJj
ZVBhcmFtZXRlcnMpKSkgeworICAgICAgICAgICAgICAgIGlmICghc2NhbkZvcndhcmRGb3JNYXRj
aChyZXNvdXJjZVBhcmFtZXRlciwgcmVxdWVzdFBhcmFtZXRlciwgc3RkOjplbmQocmVxdWVzdFBh
cmFtZXRlcnMpKSkgeworICAgICAgICAgICAgICAgICAgICBERUJVR19MT0coIlVubWF0Y2hlZCBw
YXJhbWV0ZXI6ICV7cHVibGljfXM9JXtwdWJsaWN9cyIsIHJlcXVlc3RQYXJhbWV0ZXItPmZpcnN0
LmFzY2lpKCkuZGF0YSgpLCByZXF1ZXN0UGFyYW1ldGVyLT5zZWNvbmQuYXNjaWkoKS5kYXRhKCkp
OworICAgICAgICAgICAgICAgICAgICBERUJVR19MT0coIlVubWF0Y2hlZCBwYXJhbWV0ZXI6ICV7
cHVibGljfXM9JXtwdWJsaWN9cyIsIHJlc291cmNlUGFyYW1ldGVyLT5maXJzdC5hc2NpaSgpLmRh
dGEoKSwgcmVzb3VyY2VQYXJhbWV0ZXItPnNlY29uZC5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHNjb3JlICs9IGtQYXJhbWV0ZXJNaXNzaW5nU2NvcmUgKyBrUGFyYW1ldGVy
TWlzc2luZ1Njb3JlOworICAgICAgICAgICAgICAgICAgICBERUJVR19MT0coIlNjb3JlID0gJWQi
LCBzY29yZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgREVCVUdfTE9HKCJBZGp1c3RpbmcgZm9yIHRyYWlsaW5nIHBhcmFtZXRlcnMi
KTsKKyAgICBzY29yZSArPSBrUGFyYW1ldGVyTWlzc2luZ1Njb3JlCisgICAgICAgICogKHN0ZDo6
ZGlzdGFuY2UocmVxdWVzdFBhcmFtZXRlciwgc3RkOjplbmQocmVxdWVzdFBhcmFtZXRlcnMpKQor
ICAgICAgICAgICAgKyBzdGQ6OmRpc3RhbmNlKHJlc291cmNlUGFyYW1ldGVyLCBzdGQ6OmVuZChy
ZXNvdXJjZVBhcmFtZXRlcnMpKSk7CisgICAgREVCVUdfTE9HKCJTY29yZSA9ICVkIiwgc2NvcmUp
OworCisgICAgcmV0dXJuIHNjb3JlOworI2VuZGlmCit9CisKK3ZvaWQgTWFuYWdlcjo6bG9hZENh
Y2hlZFJlc291cmNlcygpCit7CisgICAgVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiBsaW5lczsKKyAg
ICBpZiAoIXJlYWRGaWxlKHJlcG9ydFJlY29yZFBhdGgoKSwgbGluZXMpKQorICAgICAgICByZXR1
cm47CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGxpbmUgOiBsaW5lcykgeworICAgICAgICBpZiAo
bGluZS5zaXplKCkgIT0gMikgeworICAgICAgICAgICAgREVCVUdfTE9HX0VSUk9SKCJsaW5lLnNp
emUgPT0gJWQiLCAoaW50KSBsaW5lLnNpemUoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIENhY2hlZFJlc291cmNlIG5ld1Jlc291cmNlKFdlYkNvcmU6OlVS
TChXZWJDb3JlOjpQYXJzZWRVUkxTdHJpbmcsIGxpbmVbMV0pKTsKKyAgICAgICAgbV9jYWNoZWRS
ZXNvdXJjZXMuYXBwZW5kKFdURk1vdmUobmV3UmVzb3VyY2UpKTsKKyAgICB9CisKKyAgICBzdGQ6
OnNvcnQoc3RkOjpiZWdpbihtX2NhY2hlZFJlc291cmNlcyksIHN0ZDo6ZW5kKG1fY2FjaGVkUmVz
b3VyY2VzKSwgW10oY29uc3QgYXV0byYgbGVmdCwgY29uc3QgYXV0byYgcmlnaHQpIHsKKyAgICAg
ICAgcmV0dXJuIFdURjo6Y29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKGxlZnQuZnVsbFVSTCgpLnN0
cmluZygpLCByaWdodC5mdWxsVVJMKCkuc3RyaW5nKCkpOworICAgIH0pOworCisgICAgZm9yIChj
b25zdCBhdXRvJiByZXNvdXJjZSA6IG1fY2FjaGVkUmVzb3VyY2VzKQorICAgICAgICBsb2dMb2Fk
ZWRSZXNvdXJjZShyZXNvdXJjZSk7Cit9CisKK1N0cmluZyBNYW5hZ2VyOjpyZXBvcnRMb2FkUGF0
aCgpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX3Jl
Y29yZFJlcGxheUNhY2hlTG9jYXRpb24sIGtGaWxlTmFtZVJlcG9ydExvYWQpOworfQorCitTdHJp
bmcgTWFuYWdlcjo6cmVwb3J0UmVjb3JkUGF0aCgpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX3JlY29yZFJlcGxheUNhY2hlTG9jYXRpb24sIGtGaWxl
TmFtZVJlcG9ydFJlY29yZCk7Cit9CisKK1N0cmluZyBNYW5hZ2VyOjpyZXBvcnRSZXBsYXlQYXRo
KCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fcmVj
b3JkUmVwbGF5Q2FjaGVMb2NhdGlvbiwga0ZpbGVOYW1lUmVwb3J0UmVwbGF5KTsKK30KKworU3Ry
aW5nIE1hbmFnZXI6OnVybFRvUGF0aChjb25zdCBXZWJDb3JlOjpVUkwmIHVybCkKK3sKKyAgICAv
LyBVc2VkIGluOgorICAgIC8vICogQ2FjaGVkUmVzb3VyY2U6OmV2ZW50U3RyZWFtRmlsZVBhdGgK
KyAgICAvLyAqIFJlY29yZGVyOjpvcGVuRmlsZUZvclJlcXVlc3QKKworICAgIGNvbnN0IGF1dG8m
IGhhc2ggPSBzdHJpbmdUb0hhc2godXJsLnN0cmluZygpKTsKKyAgICBjb25zdCBhdXRvJiBwYXRo
ID0gaGFzaFRvUGF0aChoYXNoKTsKKyAgICByZXR1cm4gcGF0aDsKK30KKworU3RyaW5nIE1hbmFn
ZXI6OnN0cmluZ1RvSGFzaChjb25zdCBTdHJpbmcmIHMpCit7CisgICAgLy8gVXNlZCBpbjoKKyAg
ICAvLyAqIHVybFRvUGF0aAorICAgIC8vICogbG9nUmVjb3JkZWRSZXNvdXJjZQorCisgICAgLy8g
VGhpcyBmdW5jdGlvbiBpcyBiYXNlZCBvbjoKKyAgICAvLyBodHRwczovL3N2bi5hcGFjaGUub3Jn
L3JlcG9zL2FzZi9odHRwZC9zYW5kYm94L3JlcGxhY2VsaW1pdC9tb2R1bGVzL2NhY2hlL2NhY2hl
X3V0aWwuYworCisgICAgV1RGOjpNRDUgbWQ1OworICAgIG1kNS5hZGRCeXRlcyhyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzLmFzY2lpKCkuZGF0YSgpKSwgcy5sZW5ndGgoKSk7CisK
KyAgICBXVEY6Ok1ENTo6RGlnZXN0IGRpZ2VzdDsKKyAgICBtZDUuY2hlY2tzdW0oZGlnZXN0KTsK
KworICAgIGNoYXIgdG1wWzIyXTsKKyAgICBpbnQgaSwgazsKKyAgICB1bnNpZ25lZCB4OworICAg
IHN0YXRpYyBjb25zdCBjaGFyIGVuY29kaW5nVGFibGVbXSA9CisgICAgICAgICJBQkNERUZHSElK
S0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OV9AIjsK
KworICAgIC8qIGVuY29kZSAxMjggYml0cyBhcyAyMiBjaGFyYWN0ZXJzLCB1c2luZyBhIG1vZGlm
aWVkIHV1ZW5jb2RpbmcKKyAgICAgKiB0aGUgZW5jb2RpbmcgaXMgMyBieXRlcyAtPiA0IGNoYXJh
Y3RlcnMqIGkuZS4gMTI4IGJpdHMgaXMKKyAgICAgKiA1IHggMyBieXRlcyArIDEgYnl0ZSAtPiA1
ICogNCBjaGFyYWN0ZXJzICsgMiBjaGFyYWN0ZXJzCisgICAgICovCisgICAgZm9yIChpID0gMCwg
ayA9IDA7IGkgPCAxNTsgaSArPSAzKSB7CisgICAgICAgIHggPSAoZGlnZXN0W2ldIDw8IDE2KSB8
IChkaWdlc3RbaSArIDFdIDw8IDgpIHwgZGlnZXN0W2kgKyAyXTsKKyAgICAgICAgdG1wW2srK10g
PSBlbmNvZGluZ1RhYmxlW3ggPj4gMThdOworICAgICAgICB0bXBbaysrXSA9IGVuY29kaW5nVGFi
bGVbKHggPj4gMTIpICYgMHgzZl07CisgICAgICAgIHRtcFtrKytdID0gZW5jb2RpbmdUYWJsZVso
eCA+PiA2KSAmIDB4M2ZdOworICAgICAgICB0bXBbaysrXSA9IGVuY29kaW5nVGFibGVbeCAmIDB4
M2ZdOworICAgIH0KKworICAgIC8qIG9uZSBieXRlIGxlZnQgKi8KKyAgICB4ID0gZGlnZXN0WzE1
XTsKKyAgICB0bXBbaysrXSA9IGVuY29kaW5nVGFibGVbeCA+PiAyXTsgICAgLyogdXNlIHVwIDYg
Yml0cyAqLworICAgIHRtcFtrKytdID0gZW5jb2RpbmdUYWJsZVsoeCA8PCA0KSAmIDB4M2ZdOwor
CisgICAgcmV0dXJuIFN0cmluZyh0bXAsIDIyKTsKK30KKworU3RyaW5nIE1hbmFnZXI6Omhhc2hU
b1BhdGgoY29uc3QgU3RyaW5nJiBoYXNoKQoreworICAgIC8vIFVzZWQgaW46CisgICAgLy8gKiB1
cmxUb1BhdGgKKworICAgIFN0cmluZyByZXN1bHQ7CisKKyAgICBjb25zdCBpbnQga051bWJlck9m
UGFyZW50RGlyZWN0b3JpZXMgPSAxOworICAgIGNvbnN0IGludCBrUGFyZW50RGlyZWN0b3J5TmFt
ZUxlbmd0aCA9IDI7CisgICAgdW5zaWduZWQgaW5kZXggPSAwOworCisgICAgZm9yIChpbnQgZGly
TnVtID0gMDsgZGlyTnVtIDwga051bWJlck9mUGFyZW50RGlyZWN0b3JpZXM7ICsrZGlyTnVtKSB7
CisgICAgICAgIHJlc3VsdC5hcHBlbmQoaGFzaC5zdWJzdHJpbmcoaW5kZXgsIGtQYXJlbnREaXJl
Y3RvcnlOYW1lTGVuZ3RoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoJy8nKTsKKyAgICAgICAg
aW5kZXggKz0ga1BhcmVudERpcmVjdG9yeU5hbWVMZW5ndGg7CisgICAgfQorCisgICAgcmVzdWx0
LmFwcGVuZChoYXNoLnN1YnN0cmluZyhpbmRleCkpOworICAgIGF1dG8gcGF0aDEgPSBXZWJDb3Jl
OjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9yZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uLCBr
RGlyTmFtZVJlc291cmNlcyk7CisgICAgYXV0byBwYXRoMiA9IFdlYkNvcmU6OnBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChwYXRoMSwgcmVzdWx0KTsKKyAgICByZXR1cm4gcGF0aDIgKyAiLmRhdGEi
OworfQorCit2b2lkIE1hbmFnZXI6OmxvZ1JlY29yZGVkUmVzb3VyY2UoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIC8vIExvZyBuZXR3b3JrIHJlc291cmNl
cyBhcyB0aGV5IGFyZSBjYWNoZWQgdG8gZGlzay4KKworICAgIGlmIChlbnN1cmVGaWxlSGFuZGxl
KHJlcG9ydFJlY29yZFBhdGgoKSwgJm1fcmVjb3JkRmlsZUhhbmRsZSkpIHsKKyAgICAgICAgY29u
c3QgYXV0byYgdXJsID0gcmVxdWVzdC51cmwoKTsKKyAgICAgICAgcHJpbnRUb0ZpbGUobV9yZWNv
cmRGaWxlSGFuZGxlLCAiJXMgJXNcbiIsIHN0cmluZ1RvSGFzaCh1cmwuc3RyaW5nKCkpLmFzY2lp
KCkuZGF0YSgpLCB1cmwuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgIH0KK30KKwordm9p
ZCBNYW5hZ2VyOjpsb2dMb2FkZWRSZXNvdXJjZShjb25zdCBDYWNoZWRSZXNvdXJjZSYgcmVzb3Vy
Y2UpCit7CisgICAgLy8gTG9nIGNhY2hlZCByZXNvdXJjZXMgYXMgdGhleSBhcmUgbG9hZGVkIGZy
b20gZGlzay4KKworICAgIGlmIChlbnN1cmVGaWxlSGFuZGxlKHJlcG9ydExvYWRQYXRoKCksICZt
X2xvYWRGaWxlSGFuZGxlKSkKKyAgICAgICAgcHJpbnRUb0ZpbGUobV9sb2FkRmlsZUhhbmRsZSwg
IiVzXG4iLCByZXNvdXJjZS5mdWxsVVJMKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworfQor
Cit2b2lkIE1hbmFnZXI6OmxvZ1BsYXllZEJhY2tSZXNvdXJjZShjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgd2FzQ2FjaGVNaXNzKQoreworICAgIC8vIExvZyBu
ZXR3b3JrIHJlc291cmNlcyB0aGF0IGFyZSByZXF1ZXN0ZWQgZHVyaW5nIHJlcGxheS4KKworICAg
IGNvbnN0IGF1dG8mIHVybCA9IHJlcXVlc3QudXJsKCk7CisKKyAgICBpZiAod2FzQ2FjaGVNaXNz
KQorICAgICAgICBERUJVR19MT0coIkNhY2hlIG1pc3M6IFVSTCA9ICV7cHVibGljfXMiLCB1cmwu
c3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgIGVsc2UKKyAgICAgICAgREVCVUdfTE9HKCJD
YWNoZSBoaXQ6ICBVUkwgPSAle3B1YmxpY31zIiwgdXJsLnN0cmluZygpLmFzY2lpKCkuZGF0YSgp
KTsKKworICAgIGlmIChlbnN1cmVGaWxlSGFuZGxlKHJlcG9ydFJlcGxheVBhdGgoKSwgJm1fcmVw
bGF5RmlsZUhhbmRsZSkpCisgICAgICAgIHByaW50VG9GaWxlKG1fcmVwbGF5RmlsZUhhbmRsZSwg
IiVzICVzXG4iLCB3YXNDYWNoZU1pc3MgPyAibWlzcyIgOiAiaGl0ICIsIHVybC5zdHJpbmcoKS5h
c2NpaSgpLmRhdGEoKSk7Cit9CisKK2Jvb2wgTWFuYWdlcjo6ZW5zdXJlRmlsZUhhbmRsZShjb25z
dCBTdHJpbmcmIGZpbGVQYXRoLCBXZWJDb3JlOjpQbGF0Zm9ybUZpbGVIYW5kbGUqIGZpbGVIYW5k
bGUpCit7CisgICAgLy8gVXNlZCBpbjoKKyAgICAvLyAqIGxvZ0ZvbyAoeDMpCisKKyAgICAvLyBJ
ZiB0aGUgZmlsZSBpcyBhbHJlYWR5IG9wZW4sIHRoZW4gZG8gbm90aGluZy4KKworICAgIGlmIChX
ZWJDb3JlOjppc0hhbmRsZVZhbGlkKCpmaWxlSGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAvLyBUcnkgb3BlbmluZyB0aGUgZmlsZS4KKworICAgICpmaWxlSGFuZGxlID0gb3Bl
bkNhY2hlRmlsZShmaWxlUGF0aCwgV2ViQ29yZTo6T3BlbkZvcldyaXRlKTsKKyAgICBpZiAoV2Vi
Q29yZTo6aXNIYW5kbGVWYWxpZCgqZmlsZUhhbmRsZSkpIHsKKyAgICAgICAgbV90ZXJtaW5hdGlv
bkZ1bmN0aW9ucy5hcHBlbmQoW2ZpbGVIYW5kbGVdIHsKKyAgICAgICAgICAgIFdlYkNvcmU6OmNs
b3NlRmlsZSgqZmlsZUhhbmRsZSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1dlYkNvcmU6OlBsYXRmb3JtRmlsZUhh
bmRsZSBNYW5hZ2VyOjpvcGVuQ2FjaGVGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIFdlYkNv
cmU6OkZpbGVPcGVuTW9kZSBtb2RlKQoreworICAgIC8vIFVzZWQgaW46CisgICAgLy8gKiB3cml0
ZUhlYWRlckZpbGUKKyAgICAvLyAqIHdyaXRlQm9keUZpbGUKKyAgICAvLyAqIGVuc3VyZUZpbGVI
YW5kbGUKKworICAgIC8vIElmIHdlIGNhbiB0cml2aWFsbHkgb3BlbiB0aGUgZmlsZSwgdGhlbiBk
byB0aGF0IGFuZCByZXR1cm4gdGhlIG5ldyBmaWxlCisgICAgLy8gaGFuZGxlLgorCisgICAgYXV0
byBmID0gV2ViQ29yZTo6b3BlbkZpbGUoZmlsZVBhdGgsIG1vZGUpOworICAgIGlmIChXZWJDb3Jl
Ojppc0hhbmRsZVZhbGlkKGYpKQorICAgICAgICByZXR1cm4gZjsKKworICAgIC8vIElmIHdlJ3Jl
IG9wZW5pbmcgdGhlIGZpbGUgZm9yIHdyaXRpbmcgKGluY2x1ZGluZyBhcHBlbmRpbmcpLCB0aGVu
IHRyeQorICAgIC8vIGFnYWluIGFmdGVyIG1ha2luZyBzdXJlIGFsbCBpbnRlcm1lZGlhdGUgZGly
ZWN0b3JpZXMgaGF2ZSBiZWVuIGNyZWF0ZWQuCisKKyAgICBpZiAobW9kZSAhPSBXZWJDb3JlOjpP
cGVuRm9yUmVhZCkgeworICAgICAgICBjb25zdCBhdXRvJiBwYXJlbnREaXIgPSBXZWJDb3JlOjpk
aXJlY3RvcnlOYW1lKGZpbGVQYXRoKTsKKyAgICAgICAgaWYgKCFXZWJDb3JlOjptYWtlQWxsRGly
ZWN0b3JpZXMocGFyZW50RGlyKSkgeworICAgICAgICAgICAgREVCVUdfTE9HX0VSUk9SKCJFcnJv
ciAlZCB0cnlpbmcgdG8gY3JlYXRlIGludGVybWVkaWF0ZSBkaXJlY3RvcmllczogJXtwdWJsaWN9
cyIsIGVycm5vLCBwYXJlbnREaXIuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJu
IGY7CisgICAgICAgIH0KKworICAgICAgICBmID0gV2ViQ29yZTo6b3BlbkZpbGUoZmlsZVBhdGgs
IG1vZGUpOworICAgICAgICBpZiAoV2ViQ29yZTo6aXNIYW5kbGVWYWxpZChmKSkKKyAgICAgICAg
ICAgIHJldHVybiBmOworICAgIH0KKworICAgIC8vIENvdWxkIG5vdCBvcGVuIHRoZSBmaWxlLiBM
b2cgdGhlIGVycm9yIGFuZCBsZWF2ZSwgcmV0dXJuaW5nIHRoZSBpbnZhbGlkCisgICAgLy8gZmls
ZSBoYW5kbGUuCisKKyAgICBpZiAobW9kZSA9PSBXZWJDb3JlOjpPcGVuRm9yUmVhZCkKKyAgICAg
ICAgREVCVUdfTE9HX0VSUk9SKCJFcnJvciAlZCB0cnlpbmcgdG8gb3BlbiAle3B1YmxpY31zIGZv
ciByZWFkaW5nIiwgZXJybm8sIGZpbGVQYXRoLmFzY2lpKCkuZGF0YSgpKTsKKyAgICBlbHNlCisg
ICAgICAgIERFQlVHX0xPR19FUlJPUigiRXJyb3IgJWQgdHJ5aW5nIHRvIG9wZW4gJXtwdWJsaWN9
cyBmb3Igd3JpdGluZyIsIGVycm5vLCBmaWxlUGF0aC5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICBy
ZXR1cm4gZjsKK30KKworYm9vbCBNYW5hZ2VyOjpyZWFkRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQ
YXRoLCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiBsaW5lcykKK3sKKyAgICAvLyBUT0RPOiBUaGlz
IGNvdWxkIGJlIGEgbG90IHNpbXBsZXIgYnkgc2ltcGx5IHVzaW5nIHN0ZDo6Z2V0bGluZSBhbmQK
KyAgICAvLyBzcGxpdHRpbmcgYXQgdGhlIGZpcnN0IHdoaXRlc3BhY2UuIFdlIGRvbid0IG5lZWQg
YWxsIHRoYXQgb3RoZXIgc2hpenpsZS4KKyAgICAvLworICAgIC8vIFRPRE86IE1heWJlIGp1c3Qg
bW1hcCB0aGUgZmlsZS4KKworICAgIC8vIFVzZWQgaW46CisgICAgLy8gKiBsb2FkQ2FjaGVkQ29u
dGVudAorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICBpZiAoIXJlYWRGaWxlKGZp
bGVQYXRoLCBidWZmZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWZWN0b3I8dWlu
dDhfdD46OmNvbnN0X2l0ZXJhdG9yIHAgPSBzdGQ6OmJlZ2luKGJ1ZmZlcik7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBzdGQ6OmVuZChidWZmZXIpOworCisgICAg
VmVjdG9yPFN0cmluZz4gbGluZTsKKyAgICB3aGlsZSAoZ2V0TGluZShwLCBlbmQsIGxpbmUpKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoV1RGTW92ZShsaW5lKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBNYW5hZ2VyOjpyZWFkRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoLCBWZWN0
b3I8dWludDhfdD4mIGJ1ZmZlcikKK3sKKyAgICAvLyBVc2VkIGluOgorICAgIC8vICogcmVhZEZp
bGUgKGFib3ZlKQorCisgICAgYXV0byBmID0gb3BlbkNhY2hlRmlsZShmaWxlUGF0aCwgV2ViQ29y
ZTo6T3BlbkZvclJlYWQpOworICAgIGlmICghV2ViQ29yZTo6aXNIYW5kbGVWYWxpZChmKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBjbG9zZSA9IG1ha2VTY29wZUV4aXQoWyZd
IHsKKyAgICAgICAgV2ViQ29yZTo6Y2xvc2VGaWxlKGYpOworICAgIH0pOworCisgICAgbG9uZyBs
b25nIGZpbGVTaXplID0gLTE7CisgICAgaWYgKCFXZWJDb3JlOjpnZXRGaWxlU2l6ZShmLCBmaWxl
U2l6ZSkgfHwgZmlsZVNpemUgPCAwKSB7CisgICAgICAgIERFQlVHX0xPR19FUlJPUigiRXJyb3Ig
dHJ5aW5nIHRvIGdldCB0aGUgc2l6ZSBvZiAle3B1YmxpY31zIiwgZmlsZVBhdGguYXNjaWkoKS5k
YXRhKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYnVmZmVyLnJlc2l6
ZShmaWxlU2l6ZSk7CisgICAgaWYgKFdlYkNvcmU6OnJlYWRGcm9tRmlsZShmLCByZWludGVycHJl
dF9jYXN0PGNoYXIqPihidWZmZXIuZGF0YSgpKSwgc3RhdGljX2Nhc3Q8aW50PihmaWxlU2l6ZSkp
IDwgMCkgeworICAgICAgICBERUJVR19MT0dfRVJST1IoIkVycm9yIHRyeWluZyB0byByZWFkICV7
cHVibGljfXMiLCBmaWxlUGF0aC5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNYW5hZ2VyOjpnZXRMaW5l
KFZlY3Rvcjx1aW50OF90Pjo6Y29uc3RfaXRlcmF0b3ImIHAsIGNvbnN0IFZlY3Rvcjx1aW50OF90
Pjo6Y29uc3RfaXRlcmF0b3ImIGVuZCwgVmVjdG9yPFN0cmluZz4mIGxpbmUpCit7CisgICAgLy8g
VXNlZCBpbjoKKyAgICAvLyAqIHJlYWRGaWxlCisKKyAgICAvLyBOQjogUmV0dXJucyB0cnVlIGlm
IHRoZXJlIG1heSBiZSBtb3JlIGRhdGEgdG8gZ2V0LCBmYWxzZSBpZiB3ZSd2ZSBoaXQKKyAgICAv
LyB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisKKyAgICAvLyBERUJVR19MT0coIkdldHRpbmcgYSBs
aW5lIik7CisKKyAgICBsaW5lLmNsZWFyKCk7CisKKyAgICBpZiAocCA9PSBlbmQpIHsKKyAgICAg
ICAgLy8gREVCVUdfTE9HKCJJdGVyYXRvciBhdCBlbmQ7IHJldHVybmluZyBmYWxzZSIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgU3RyaW5nIHdvcmQ7CisgICAgd2hpbGUg
KGdldFdvcmQocCwgZW5kLCB3b3JkKSkgeworICAgICAgICBpZiAoIXdvcmQuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICAvLyBERUJVR19MT0coIkFkZGluZyB3b3JkOiAle3B1YmxpY31zIiwgd29y
ZC5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICBsaW5lLmFwcGVuZCh3b3JkKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1hbmFnZXI6OmdldFdv
cmQoVmVjdG9yPHVpbnQ4X3Q+Ojpjb25zdF9pdGVyYXRvciYgcCwgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+Ojpjb25zdF9pdGVyYXRvciYgZW5kLCBTdHJpbmcmIHdvcmQpCit7CisgICAgLy8gVXNlZCBp
bjoKKyAgICAvLyAqIGdldExpbmUKKworICAgIC8vIE5COiBSZXR1cm5zIHRydWUgaWYgYSAocG9z
c2libHkgZW1wdHkpIHdvcmQgd2FzIGZvdW5kIGFuZCB0aGVyZSBtYXkgYmUKKyAgICAvLyBtb3Jl
LCBmYWxzZSBpZiB3ZSd2ZSBoaXQgdGhlIGVuZCBvZiBsaW5lIG9yIGJ1ZmZlci4KKworICAgIC8v
IERFQlVHX0xPRygiR2V0dGluZyBhIHdvcmQiKTsKKworICAgIGlmIChwID09IGVuZCkgeworICAg
ICAgICAvLyBERUJVR19MT0coIkl0ZXJhdG9yIGF0IGVuZDsgcmV0dXJuaW5nIGZhbHNlIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoKnAgPT0gJ1xuJykgeworICAg
ICAgICAvLyBERUJVR19MT0coIkl0ZXJhdG9yIGhpdCBFT0w7IHJldHVybmluZyBmYWxzZSIpOwor
ICAgICAgICArK3A7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIGVz
Y2FwaW5nID0gZmFsc2U7CisgICAgYm9vbCBpZ25vcmluZyA9IGZhbHNlOworCisgICAgd29yZCA9
IFN0cmluZygpOworCisgICAgLy8gREVCVUdfTE9HKCJJdGVyYXRpbmciKTsKKworICAgIGZvciAo
IDsgcCAhPSBlbmQ7ICsrcCkgeworICAgICAgICBpZiAoaWdub3JpbmcpIHsKKyAgICAgICAgICAg
IGlmICgqcCA9PSAnXG4nKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2Ug
aWYgKGVzY2FwaW5nKSB7CisgICAgICAgICAgICB3b3JkLmFwcGVuZCgqcCk7CisgICAgICAgICAg
ICBlc2NhcGluZyA9IGZhbHNlOworICAgICAgICB9IGVsc2UgaWYgKCpwID09ICcjJykgeworICAg
ICAgICAgICAgaWdub3JpbmcgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKCpwID09ICdcXCcp
IHsKKyAgICAgICAgICAgIGVzY2FwaW5nID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmICgqcCA9
PSAnICcpIHsKKyAgICAgICAgICAgIGlmICghd29yZC5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSBpZiAoKnAgPT0gJ1xuJykKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBlbHNlCisgICAgICAgICAgICB3b3JkLmFwcGVuZCgqcCk7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTWFuYWdlcjo6cHJpbnRUb0ZpbGUoY29uc3Qg
V2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlJiBmLCBjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikK
K3sKKyAgICAvLyBVc2VkIGluOgorICAgIC8vICogbG9nRm9vICh4MykKKworICAgIHZhX2xpc3Qg
YXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworCisgICAgY2hhciogYnVmZmVyID0g
bnVsbHB0cjsKKyAgICB2YXNwcmludGYoJmJ1ZmZlciwgZm9ybWF0LCBhcmdzKTsKKyAgICBhdXRv
IHdyaXRlUmVzdWx0ID0gV2ViQ29yZTo6d3JpdGVUb0ZpbGUoZiwgYnVmZmVyLCBzdHJsZW4oYnVm
ZmVyKSk7CisgICAgZnJlZShidWZmZXIpOworCisgICAgdmFfZW5kKGFyZ3MpOworCisgICAgcmV0
dXJuIHdyaXRlUmVzdWx0ID49IDA7Cit9CisKK1N0cmluZyBNYW5hZ2VyOjpiYXNlVVJMQXNTdHJp
bmcoY29uc3QgV2ViQ29yZTo6VVJMJiB1cmwpCit7CisgICAgLy8gVXNlZCBpbjoKKyAgICAvLyAq
IGZpbmRCZXN0RnV6enlNYXRjaAorCisgICAgcmV0dXJuIHVybC5zdHJpbmcoKS5sZWZ0KHVybC5w
YXRoU3RhcnQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0
dXJlTWFuYWdlci5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3
b3JrQ2FwdHVyZU1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYjAzOWFhMzQ5ZTZkYzdiMDE0NDAwMzhj
MDAzOTAxOGNmMTQyNmI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaApAQCAtMCwwICsxLDEyNSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVS
RSkKKworI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
VVJMUGFyc2VyLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBSZXNvdXJjZVJl
cXVlc3Q7CitjbGFzcyBVUkw7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIE5l
dHdvcmtDYXB0dXJlIHsKKworY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CisKKy8qCisgKiBTZXJ2ZXMg
dGhyZWUgcHVycG9zZXM6CisgKgorICogKiBLZWVwcyB0aGUgc3RhdGUgb2Ygd2hldGhlciB3ZSBh
cmUgcmVjb3JkaW5nLCByZXBsYXlpbmcsIG9yIG5laXRoZXIuCisgKiAqIEtlZXBzIHRoZSBsaXN0
IG9mIGNhY2hlZCByZXNvdXJjZXMgKGlmIHJlcGxheWluZyksIHBlcmZvcm1zIGZ1enp5IG1hdGNo
aW5nIG9uIHRoZW0uCisgKiAqIFV0aWxpdGllcyBmb3IgbG9nZ2luZyBhbmQgZmlsZSBtYW5hZ2Vt
ZW50LgorICoKKyAqIFRPRE86IFBlcmhhcHMgd2Ugc2hvdWxkIGJyZWFrIHRoaXMgdXAgaW50byB0
aHJlZSBjbGFzc2VzPworICovCitjbGFzcyBNYW5hZ2VyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShNYW5hZ2VyKTsKKyAgICBmcmllbmQgY2xhc3MgV1RGOjpOZXZlckRlc3Ryb3llZDxNYW5h
Z2VyPjsKKworcHVibGljOgorICAgIHN0YXRpYyBNYW5hZ2VyJiBzaW5nbGV0b24oKTsKKworICAg
IHZvaWQgaW5pdGlhbGl6ZShib29sIHNob3VsZFJlY29yZE5ldHdvcmtSZXF1ZXN0cywgYm9vbCBz
aG91bGRSZXBsYXlOZXR3b3JrUmVxdWVzdHMsIGNvbnN0IFN0cmluZyYgcmVjb3JkUmVwbGF5Q2Fj
aGVMb2NhdGlvbik7CisgICAgdm9pZCB0ZXJtaW5hdGUoKTsKKworICAgIGJvb2wgaXNSZWNvcmRp
bmcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFJlY29yZE5ldHdvcmtSZXF1ZXN0czsgfQorICAg
IGJvb2wgaXNSZXBsYXlpbmcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFJlcGxheU5ldHdvcmtS
ZXF1ZXN0czsgfQorCisgICAgQ2FjaGVkUmVzb3VyY2UqIGZpbmRNYXRjaChjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmKTsKKworICAgIHZvaWQgbG9nUmVjb3JkZWRSZXNvdXJjZShjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIGxvZ0xvYWRlZFJlc291cmNl
KGNvbnN0IENhY2hlZFJlc291cmNlJik7CisgICAgdm9pZCBsb2dQbGF5ZWRCYWNrUmVzb3VyY2Uo
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCB3YXNDYWNoZU1pc3MpOworCisg
ICAgV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5DYWNoZUZpbGUoY29uc3QgU3RyaW5n
JiwgV2ViQ29yZTo6RmlsZU9wZW5Nb2RlKTsKKworICAgIFN0cmluZyB1cmxUb1BhdGgoY29uc3Qg
V2ViQ29yZTo6VVJMJik7CisKK3ByaXZhdGU6CisgICAgTWFuYWdlcigpID0gZGVmYXVsdDsKKyAg
ICB+TWFuYWdlcigpID0gZGVsZXRlOworCisgICAgQ2FjaGVkUmVzb3VyY2UqIGZpbmRFeGFjdE1h
dGNoKGNvbnN0IFdlYkNvcmU6OlVSTCYpOworICAgIENhY2hlZFJlc291cmNlKiBmaW5kQmVzdEZ1
enp5TWF0Y2goY29uc3QgV2ViQ29yZTo6VVJMJik7CisgICAgaW50IGZ1enp5TWF0Y2hVUkxzKAor
ICAgICAgICBjb25zdCBXZWJDb3JlOjpVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IFdlYkNvcmU6OlVS
TFBhcnNlcjo6VVJMRW5jb2RlZEZvcm0mIHJlcXVlc3RQYXJhbWV0ZXJzLAorICAgICAgICBjb25z
dCBXZWJDb3JlOjpVUkwmIHJlc291cmNlVVJMLCBjb25zdCBXZWJDb3JlOjpVUkxQYXJzZXI6OlVS
TEVuY29kZWRGb3JtJiByZXNvdXJjZVBhcmFtZXRlcnMpOworCisgICAgdm9pZCBsb2FkQ2FjaGVk
UmVzb3VyY2VzKCk7CisKKyAgICBTdHJpbmcgcmVwb3J0TG9hZFBhdGgoKTsKKyAgICBTdHJpbmcg
cmVwb3J0UmVjb3JkUGF0aCgpOworICAgIFN0cmluZyByZXBvcnRSZXBsYXlQYXRoKCk7CisKKyAg
ICBTdHJpbmcgc3RyaW5nVG9IYXNoKGNvbnN0IFN0cmluZyYpOworICAgIFN0cmluZyBoYXNoVG9Q
YXRoKGNvbnN0IFN0cmluZyYgaGFzaCk7CisKKyAgICBib29sIGVuc3VyZUZpbGVIYW5kbGUoY29u
c3QgU3RyaW5nJiBmaWxlUGF0aCwgV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlKik7CisKKyAg
ICBib29sIHJlYWRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIFZlY3RvcjxWZWN0b3I8U3Ry
aW5nPj4mIGJ1ZmZlcik7CisgICAgYm9vbCByZWFkRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRo
LCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlcik7CisgICAgYm9vbCBnZXRMaW5lKFZlY3Rvcjx1aW50
OF90Pjo6Y29uc3RfaXRlcmF0b3ImIHAsIGNvbnN0IFZlY3Rvcjx1aW50OF90Pjo6Y29uc3RfaXRl
cmF0b3ImIGVuZCwgVmVjdG9yPFN0cmluZz4mIGxpbmUpOyAvLyBPbmx5IGNhbGxlZCBieSByZWFk
RmlsZQorICAgIGJvb2wgZ2V0V29yZChWZWN0b3I8dWludDhfdD46OmNvbnN0X2l0ZXJhdG9yJiBw
LCBjb25zdCBWZWN0b3I8dWludDhfdD46OmNvbnN0X2l0ZXJhdG9yJiBlbmQsIFN0cmluZyYgd29y
ZCk7IC8vIE9ubHkgY2FsbGVkIGJ5IGdldExpbmUKKyAgICBib29sIHByaW50VG9GaWxlKGNvbnN0
IFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSYsIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKTsK
KworICAgIFN0cmluZyBiYXNlVVJMQXNTdHJpbmcoY29uc3QgV2ViQ29yZTo6VVJMJik7CisKK3By
aXZhdGU6CisgICAgYm9vbCBtX3Nob3VsZFJlY29yZE5ldHdvcmtSZXF1ZXN0cyB7IGZhbHNlIH07
CisgICAgYm9vbCBtX3Nob3VsZFJlcGxheU5ldHdvcmtSZXF1ZXN0cyB7IGZhbHNlIH07CisKKyAg
ICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPj4gbV90ZXJtaW5hdGlvbkZ1bmN0aW9uczsKKyAgICBT
dHJpbmcgbV9yZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uOworCisgICAgV2ViQ29yZTo6UGxhdGZv
cm1GaWxlSGFuZGxlIG1fbG9hZEZpbGVIYW5kbGUgeyBXZWJDb3JlOjppbnZhbGlkUGxhdGZvcm1G
aWxlSGFuZGxlIH07CisgICAgV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlIG1fcmVwbGF5Rmls
ZUhhbmRsZSB7IFdlYkNvcmU6OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUgfTsKKyAgICBXZWJD
b3JlOjpQbGF0Zm9ybUZpbGVIYW5kbGUgbV9yZWNvcmRGaWxlSGFuZGxlIHsgV2ViQ29yZTo6aW52
YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSB9OworCisgICAgVmVjdG9yPENhY2hlZFJlc291cmNlPiBt
X2NhY2hlZFJlc291cmNlczsKK307CisKK30gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBUFRVUkUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdv
cmtDYXB0dXJlUmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fw
dHVyZS9OZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYWNlOTlkOGZmZTE0
MGQxNTFkNTFhYzdiOWU1MTU3MjI4YzU2NGEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmNwcApA
QCAtMCwwICsxLDIxNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJOZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmgiCisKKyNpbmNsdWRlICJFbmNvZGVyLmgiCisj
aW5jbHVkZSAiTmV0d29ya0NhcHR1cmVMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1
cmVNYW5hZ2VyLmgiCisjaW5jbHVkZSAiU3RyaW5nUmVmZXJlbmNlLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9TaGFyZWRCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKworI2RlZmluZSBE
RUJVR19DTEFTUyBNYW5hZ2VyCisKK25hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIE5ldHdv
cmtDYXB0dXJlIHsKKworc3RhdGljIGNvbnN0IGNoYXIga01lc3NhZ2VSZWNlaXZlck5hbWVbXSA9
ICJ4IjsgLy8gTXVzdCBiZSBub24tZW1wdHkuCitzdGF0aWMgY29uc3QgY2hhciBrTWVzc2FnZU5h
bWVbXSA9ICIiOworCit2b2lkIFJlY29yZGVyOjpyZWNvcmRSZXF1ZXN0U2VudChjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgREVCVUdfTE9HKCJTZW50IHJl
cXVlc3QgZm9yIFVSTCA9ICV7cHVibGljfXMiLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLmFzY2lp
KCkuZGF0YSgpKTsKKyAgICBBU1NFUlQoIW1fZXZlbnRzLnNpemUoKSk7CisKKyAgICByZWNvcmRF
dmVudChSZXF1ZXN0U2VudEV2ZW50KHJlcXVlc3QpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6cmVj
b3JkUmVzcG9uc2VSZWNlaXZlZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSkKK3sKKyAgICAvLyBDYWxsZWQgd2hlbiByZWNlaXZpbmcgYSByZXNwb25zZSBvdGhlciB0
aGFuIGEgcmVkaXJlY3Qgb3IgZXJyb3IuCisKKyAgICBERUJVR19MT0coIlJlY2VpdmVkIHJlc3Bv
bnNlIGZyb20gVVJMID0gJXtwdWJsaWN9cyIsIHJlc3BvbnNlLnVybCgpLnN0cmluZygpLmFzY2lp
KCkuZGF0YSgpKTsKKyAgICBBU1NFUlQobV9ldmVudHMuc2l6ZSgpKTsKKworICAgIC8vIFRPRE86
IElzIHRoZXJlIGEgYmV0dGVyIHJlc3BvbnNlIHRvIHJlY2VpdmluZyBhIG11bHRpLXBhcnQgcmVz
b3VyY2U/CisgICAgLy8gTGVhcm4gbW9yZSBhYm91dCBtdWx0aS1wYXJ0IHJlc291cmNlcy4gV2h5
IGRvbid0IHdlIHJlY29yZCB0aGVzZT8gKE5vdGUsCisgICAgLy8gdGhpcyBkZWNpc2lvbiBpcyBi
YXNlZCBvbiBzb21lIE5ldHdvcmtDYWNoZSBjb2RlLikKKworICAgIGlmICghcmVzcG9uc2UuaXNN
dWx0aXBhcnQoKSkKKyAgICAgICAgcmVjb3JkRXZlbnQoUmVzcG9uc2VSZWNlaXZlZEV2ZW50KHJl
c3BvbnNlKSk7CisgICAgZWxzZQorICAgICAgICBtX2V2ZW50cy5jbGVhcigpOworfQorCit2b2lk
IFJlY29yZGVyOjpyZWNvcmRSZWRpcmVjdFJlY2VpdmVkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UpCit7CisgICAgREVCVUdfTE9HKCJSZWNlaXZlZCByZWRpcmVjdCB0byBVUkwgPSAle3B1Ymxp
Y31zIiwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgQVNTRVJU
KG1fZXZlbnRzLnNpemUoKSk7CisKKyAgICByZWNvcmRFdmVudChSZWRpcmVjdFJlY2VpdmVkRXZl
bnQocmVxdWVzdCwgcmVzcG9uc2UpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6cmVjb3JkUmVkaXJl
Y3RTZW50KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBE
RUJVR19MT0coIlNlbnQgcmVkaXJlY3QgZm9yIFVSTCA9ICV7cHVibGljfXMiLCByZXF1ZXN0LnVy
bCgpLnN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICBBU1NFUlQobV9ldmVudHMuc2l6ZSgp
KTsKKworICAgIHJlY29yZEV2ZW50KFJlZGlyZWN0U2VudEV2ZW50KHJlcXVlc3QpKTsKK30KKwor
dm9pZCBSZWNvcmRlcjo6cmVjb3JkRGF0YVJlY2VpdmVkKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciYg
YnVmZmVyKQoreworICAgIERFQlVHX0xPRygiUmVjZWl2ZWQgJXUgYnl0ZXMgb2YgZGF0YSIsIGJ1
ZmZlci5zaXplKCkpOworCisgICAgaWYgKCFtX2V2ZW50cy5zaXplKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIFByZXZlbnQgbWVtb3J5IGdyb3d0aCBpbiBjYXNlIG9mIHN0cmVhbWluZyBk
YXRhLiBUT0RPOiBJcyB0aGVyZSBhIGJldHRlcgorICAgIC8vIHJlc29uc2UgdG8gdGhpcz8gSWYg
d2UgZW5jb3VudGVyIHRoaXMgY29uZGl0aW9uLCBhbGwgb2Ygb3VyIHJlY29yZGluZworICAgIC8v
IHNpbGVudGx5IGdvZXMgb3V0IHRoZSB3aW5kb3cuIFJlcGxheSB3aWxsIG5vdCB3b3JrLCBhbmQg
dGhlIHVzZXIgZG9lc24ndAorICAgIC8vIGtub3cgdGhhdC4KKworICAgIGNvbnN0ZXhwciBzaXpl
X3Qga01heGltdW1DYWNoZUJ1ZmZlclNpemUgPSAxMCAqIDEwMjQgKiAxMDI0OworICAgIG1fZGF0
YUxlbmd0aCArPSBidWZmZXIuc2l6ZSgpOworICAgIGlmIChtX2RhdGFMZW5ndGggPD0ga01heGlt
dW1DYWNoZUJ1ZmZlclNpemUpCisgICAgICAgIHJlY29yZEV2ZW50KERhdGFSZWNlaXZlZEV2ZW50
KGJ1ZmZlcikpOworICAgIGVsc2UKKyAgICAgICAgbV9ldmVudHMuY2xlYXIoKTsKK30KKwordm9p
ZCBSZWNvcmRlcjo6cmVjb3JkRmluaXNoKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVy
cm9yKQoreworICAgIERFQlVHX0xPRygiRmluaXNoZWQiKTsKKworICAgIGlmICghbV9ldmVudHMu
c2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICByZWNvcmRFdmVudChGaW5pc2hlZEV2ZW50
KGVycm9yKSk7CisgICAgd3JpdGVFdmVudHMoKTsKK30KKwordm9pZCBSZWNvcmRlcjo6d3JpdGVF
dmVudHMoKQoreworICAgIC8vIFRPRE86IERldGVybWluZSB3aGF0IHRvIGRvIGlmIHdlJ3JlIGFz
a2VkIHRvIGNhY2hlIGEgcmVzb3VyY2UgdGhhdCdzCisgICAgLy8gYWxyZWFkeSBpbiB0aGUgY2Fj
aGUuIFdoYXQgZG9lcyBzdWNoIGFuIG9jY3VycmVuY2UgbWVhbj8gU2hvdWxkbid0IG91cgorICAg
IC8vIG5vcm1hbCBjYWNoZXMgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nPworCisgICAgV2Vi
Q29yZTo6VVJMIGN1cnJlbnRVUkw7CisgICAgV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlIGN1
cnJlbnRGaWxlID0gV2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKKyAgICBhdXRv
IGNsb3NlID0gbWFrZVNjb3BlRXhpdChbJmN1cnJlbnRGaWxlXSB7CisgICAgICAgIFdlYkNvcmU6
OmNsb3NlRmlsZShjdXJyZW50RmlsZSk7CisgICAgfSk7CisKKyAgICBhdXRvIHN0b3JlRXZlbnQg
PSBbdGhpcywgJmN1cnJlbnRGaWxlLCAmY3VycmVudFVSTF0oY29uc3QgYXV0byYgZXZlbnQpIC0+
IGJvb2wgeworICAgICAgICBBU1NFUlQoY3VycmVudEZpbGUgIT0gV2ViQ29yZTo6aW52YWxpZFBs
YXRmb3JtRmlsZUhhbmRsZSk7CisKKyAgICAgICAgLy8gVE9ETzpVc2luZyBJUEM6OkVuY29kZXIg
aXMgYSBiaXQgaGVhdnktaGFuZGVkLiBJdCB3cml0ZXMgb3V0IGEKKyAgICAgICAgLy8gaGVhZGVy
IHdlIGRvbid0IG5lZWQsIGFuZCBJJ20gbm90IHN1cmUgd2UgbmVlZCB0byBhYmlkZSBieSBpdHMK
KyAgICAgICAgLy8gYWxpZ25tZW50IHJ1bGVzLiBOZXR3b3JrQ2FjaGUgaGFzIGl0cyBvd24gRW5j
b2Rlci9EZWNvZGVyIC0tIHBlcmhhcHMKKyAgICAgICAgLy8gd2Ugc2hvdWxkIHRha2UgdGhlIHNh
bWUgYXBwcm9hY2guIEhvd2V2ZXIsIHdlIGRvbid0IHdhbnQgdG8gdXNlCisgICAgICAgIC8vIHRo
b3NlIGNsYXNzZXMgZGlyZWN0bHkuIEZpcnN0LCB0aGV5IGRvIHNvbWUgY2hlY2tzdW1taW5nIHRo
YXQgd2UKKyAgICAgICAgLy8gZG9uJ3QgbmVlZC4gU2Vjb25kLCBJJ3ZlIGJlZW4gd2FybmVkIG5v
dCB0byByZWx5IG9uIHRoZSBzdG9yYWdlCisgICAgICAgIC8vIGZvcm1hdCBvZiBOZXR3b3JrQ2Fj
aGUsIHdoaWNoIG1lYW5zIG5vdCB1c2luZyB0aGVpciBzdG9yYWdlIGNsYXNzZXMKKyAgICAgICAg
Ly8gZGlyZWN0bHkuIFRoaXJkLCBzaW5jZSB3ZSBsaW1pdCByZXNvdXJjZXMgdG8gMTBNaUIsIHdl
IGRvbid0IG5lZWQgdG8KKyAgICAgICAgLy8gc3RvcmUgYWxsIGxlbmd0aHMgYXMgNjQtYml0IHZh
bHVlczsgMzItYml0IHdpbGwgd29yayBmaW5lLgorICAgICAgICAvLworICAgICAgICAvLyBUT0RP
OiBDb25zaWRlciBpZiB3ZSB3YW50IHRvIHVzZSBvbmUgRW5jb2RlciBwZXIgZXZlbnQsIG9yIHBl
cmhhcHMKKyAgICAgICAgLy8gb25lIGVuY29kZXIgZm9yIGFsbCBldmVudHMuIFRoZSBmb3JtZXIg
YWxsb3dzIGZvciByYW5kb20gYWNjZXNzIGFzCisgICAgICAgIC8vIG9wcG9zZWQgdG8gc3RyZWFt
IGFjY2Vzcy4gVGhlIGxhdHRlciByZWR1Y2VzIHRoZSBFbmNvZGVyIG92ZXJoZWFkCisgICAgICAg
IC8vIGFuZCByZWxpZXZlcyB1cyBmcm9tIGhhdmluZyB0byBzdG9yZSB0aGUgbGVuZ3RoIG9mIGVh
Y2ggZW5jb2RlZAorICAgICAgICAvLyBldmVudC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVE9E
TzogQ29uc2lkZXIgaWYgd2Ugd2FudCB0byBzdG9yZSBhbGwgZXZlbnRzIGluIG9uZSBmaWxlLCBv
ciBpZiB3ZQorICAgICAgICAvLyB3YW50IHRvIHNwbGl0IHRoZW0gYXQgcmVkaXJlY3QgZXZlbnRz
LiBUaGUgZm9ybWVyIGlzIGVhc2llciB0bworICAgICAgICAvLyBtYW5hZ2UgKHdlIGRvbid0IGhh
dmUgdG8gd29ycnkgYWJvdXQgc3dpdGNoaW5nIENhY2hlZFJlc291cmNlCisgICAgICAgIC8vIHJl
Y29yZHMgb3IgY2FjaGVkIGV2ZW50IGZpbGVzIHdoZW4gcmVwbGF5aW5nIGV2ZW50cykuIFRoZSBs
YXR0ZXIgaXMKKyAgICAgICAgLy8gYmV0dGVyIGNvbXBvc2VkLgorCisgICAgICAgIElQQzo6RW5j
b2RlciBlbmNvZGVyKGtNZXNzYWdlUmVjZWl2ZXJOYW1lLCBrTWVzc2FnZU5hbWUsIDApOworICAg
ICAgICBldmVudC5lbmNvZGUoZW5jb2Rlcik7CisgICAgICAgIGlmICghd3JpdGVEYXRhKGN1cnJl
bnRGaWxlLCBldmVudC5rVHlwZSwgZW5jb2RlcikpIHsKKyAgICAgICAgICAgIERFQlVHX0xPR19F
UlJPUigiRXJyb3IgdHJ5aW5nIHRvIHdyaXRlIHRvIGZpbGUgZm9yIFVSTDogJXtwdWJsaWN9cyIs
IGN1cnJlbnRVUkwuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisKKyAgICBh
dXRvIHJvdGF0ZUZpbGVBbmRTdG9yZUV2ZW50ID0gW3RoaXMsICZjdXJyZW50RmlsZSwgJmN1cnJl
bnRVUkwsICZzdG9yZUV2ZW50XShjb25zdCBhdXRvJiBldmVudCkgLT4gYm9vbCB7CisgICAgICAg
IFdlYkNvcmU6OmNsb3NlRmlsZShjdXJyZW50RmlsZSk7CisgICAgICAgIGN1cnJlbnRGaWxlID0g
b3BlbkZpbGVGb3JSZXF1ZXN0KGV2ZW50LnJlcXVlc3QpOworICAgICAgICBjdXJyZW50VVJMID0g
ZXZlbnQucmVxdWVzdC51cmwoKTsKKyAgICAgICAgaWYgKGN1cnJlbnRGaWxlID09IFdlYkNvcmU6
OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpIHsKKyAgICAgICAgICAgIERFQlVHX0xPR19FUlJP
UigiRXJyb3IgdHJ5aW5nIHRvIG9wZW4gZmlsZSBmb3IgVVJMOiAle3B1YmxpY31zIiwgY3VycmVu
dFVSTC5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0b3JlRXZlbnQoZXZlbnQpOworICAgIH07CisK
KyAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9yKAorICAgICAgICBbdGhpcywgJmN1
cnJlbnRGaWxlLCAmcm90YXRlRmlsZUFuZFN0b3JlRXZlbnRdKGNvbnN0IFJlcXVlc3RTZW50RXZl
bnQmIGV2ZW50KSB7CisgICAgICAgICAgICByb3RhdGVGaWxlQW5kU3RvcmVFdmVudChldmVudCk7
CisgICAgICAgIH0sCisgICAgICAgIFt0aGlzLCAmY3VycmVudEZpbGUsICZzdG9yZUV2ZW50XShj
b25zdCBSZXNwb25zZVJlY2VpdmVkRXZlbnQmIGV2ZW50KSB7CisgICAgICAgICAgICBzdG9yZUV2
ZW50KGV2ZW50KTsKKyAgICAgICAgfSwKKyAgICAgICAgW3RoaXMsICZjdXJyZW50RmlsZSwgJnN0
b3JlRXZlbnRdKGNvbnN0IFJlZGlyZWN0UmVjZWl2ZWRFdmVudCYgZXZlbnQpIHsKKyAgICAgICAg
ICAgIHN0b3JlRXZlbnQoZXZlbnQpOworICAgICAgICB9LAorICAgICAgICBbdGhpcywgJmN1cnJl
bnRGaWxlLCAmc3RvcmVFdmVudF0oY29uc3QgUmVkaXJlY3RTZW50RXZlbnQmIGV2ZW50KSB7Cisg
ICAgICAgICAgICBzdG9yZUV2ZW50KGV2ZW50KTsKKyAgICAgICAgfSwKKyAgICAgICAgW3RoaXMs
ICZjdXJyZW50RmlsZSwgJnN0b3JlRXZlbnRdKGNvbnN0IERhdGFSZWNlaXZlZEV2ZW50JiBldmVu
dCkgeworICAgICAgICAgICAgc3RvcmVFdmVudChldmVudCk7CisgICAgICAgIH0sCisgICAgICAg
IFt0aGlzLCAmY3VycmVudEZpbGUsICZzdG9yZUV2ZW50XShjb25zdCBGaW5pc2hlZEV2ZW50JiBl
dmVudCkgeworICAgICAgICAgICAgc3RvcmVFdmVudChldmVudCk7CisgICAgICAgIH0pOworCisg
ICAgZm9yIChjb25zdCBhdXRvJiBhbnlFdmVudCA6IG1fZXZlbnRzKQorICAgICAgICBXVEY6OnZp
c2l0KHZpc2l0b3IsIGFueUV2ZW50KTsKK30KKworV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxl
IFJlY29yZGVyOjpvcGVuRmlsZUZvclJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0KQoreworICAgIFN0cmluZyBwYXRoID0gTWFuYWdlcjo6c2luZ2xldG9uKCku
dXJsVG9QYXRoKHJlcXVlc3QudXJsKCkpOworICAgIGNvbnN0IGF1dG8mIGhhbmRsZSA9IE1hbmFn
ZXI6OnNpbmdsZXRvbigpLm9wZW5DYWNoZUZpbGUocGF0aCwgV2ViQ29yZTo6T3BlbkZvcldyaXRl
KTsKKworICAgIGlmIChoYW5kbGUgIT0gV2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRs
ZSkKKyAgICAgICAgTWFuYWdlcjo6c2luZ2xldG9uKCkubG9nUmVjb3JkZWRSZXNvdXJjZShyZXF1
ZXN0KTsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisKK2Jvb2wgUmVjb3JkZXI6OndyaXRlRGF0
YShjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybUZpbGVIYW5kbGUmIGYsIENhcHR1cmVFdmVudFR5cGUg
dHlwZSwgSVBDOjpFbmNvZGVyJiBlbmNvZGVyKQoreworICAgIHNpemVfdCBsZW5ndGggPSBlbmNv
ZGVyLmJ1ZmZlclNpemUoKTsKKyAgICByZXR1cm4gKChXZWJDb3JlOjp3cml0ZVRvRmlsZShmLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmdHlwZSksIHNpemVvZih0eXBlKSkgIT0gLTEp
CisgICAgICAgICYmIChXZWJDb3JlOjp3cml0ZVRvRmlsZShmLCByZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPigmbGVuZ3RoKSwgc2l6ZW9mKGxlbmd0aCkpICE9IC0xKQorICAgICAgICAmJiAo
V2ViQ29yZTo6d3JpdGVUb0ZpbGUoZiwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZW5j
b2Rlci5idWZmZXIoKSksIGxlbmd0aCkgIT0gLTEpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgTmV0
d29ya0NhcHR1cmUKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmggYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVjb3Jk
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi40MTVkZmUzMjg0YjU5YzNkNjUxMDRkNGVjYTk0OGYxODM5MjI5YjRi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVy
ZS9OZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKworI2luY2x1ZGUg
Ik5ldHdvcmtDYXB0dXJlRXZlbnQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpbmNsdWRlIDxjaHJvbm8+CisjaW5jbHVkZSA8
dXRpbGl0eT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgUmVzb3VyY2VFcnJvcjsKK2Ns
YXNzIFJlc291cmNlUmVxdWVzdDsKK2NsYXNzIFJlc291cmNlUmVzcG9uc2U7CitjbGFzcyBTaGFy
ZWRCdWZmZXI7Cit9CisKK25hbWVzcGFjZSBJUEMgeworY2xhc3MgRW5jb2RlcjsKK30KKworbmFt
ZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgeworCitjbGFzcyBSZWNv
cmRlciB7CitwdWJsaWM6CisgICAgdm9pZCByZWNvcmRSZXF1ZXN0U2VudChjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIHJlY29yZFJlc3BvbnNlUmVjZWl2ZWQoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOworICAgIHZvaWQgcmVjb3JkUmVkaXJlY3RS
ZWNlaXZlZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdm9pZCByZWNvcmRSZWRpcmVjdFNlbnQoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgdm9pZCByZWNvcmREYXRhUmVjZWl2ZWQoV2Vi
Q29yZTo6U2hhcmVkQnVmZmVyJik7CisgICAgdm9pZCByZWNvcmRGaW5pc2goY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VFcnJvciYpOworCitwcml2YXRlOgorICAgIHZvaWQgd3JpdGVFdmVudHMoKTsK
KyAgICBXZWJDb3JlOjpQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGVGb3JSZXF1ZXN0KGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIGJvb2wgd3JpdGVEYXRhKGNvbnN0IFdl
YkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSYsIENhcHR1cmVFdmVudFR5cGUsIElQQzo6RW5jb2Rl
ciYpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgdm9pZCByZWNvcmRFdmVudChU
JiYgZXZlbnQpCisgICAgeworICAgICAgICBtX2V2ZW50cy5hcHBlbmQoQ2FwdHVyZUV2ZW50KFdU
Rk1vdmUoZXZlbnQpKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHVzaW5nIENhcHR1cmVFdmVu
dHMgPSBWZWN0b3I8Q2FwdHVyZUV2ZW50PjsKKyAgICBDYXB0dXJlRXZlbnRzIG1fZXZlbnRzOwor
ICAgIHNpemVfdCBtX2RhdGFMZW5ndGggeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBOZXR3
b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVU
V09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXBsYXllci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NGUzOTdiMTE5Y2UwZmFjMDM3ZTFiMmIxNzQxYTU3Mzk3ZjkyYjFhMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVS
ZXBsYXllci5jcHAKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmgiCisKKyNpZiBFTkFCTEUo
TkVUV09SS19DQVBUVVJFKQorCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVMb2dnaW5nLmgiCisj
aW5jbHVkZSAiTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmgiCisjaW5jbHVkZSAiTmV0d29ya0RhdGFU
YXNrUmVwbGF5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKworI2Rl
ZmluZSBERUJVR19DTEFTUyBSZXBsYXllcgorCituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFj
ZSBOZXR3b3JrQ2FwdHVyZSB7CisKK1JlcGxheWVyOjpSZXBsYXllcigpCit7Cit9CisKK1JlZjxO
ZXR3b3JrRGF0YVRhc2s+IFJlcGxheWVyOjpyZXBsYXlSZXNvdXJjZSgKKyAgICBOZXR3b3JrU2Vz
c2lvbiYgc2Vzc2lvbiwKKyAgICBOZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNsaWVudCwKKyAgICBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsCisgICAgV2ViQ29yZTo6U3Rv
cmVkQ3JlZGVudGlhbHMgY3JlZGVudGlhbHMsCisgICAgYm9vbCBzaG91bGRDbGVhclJlZmVycmVy
T25IVFRQU1RvSFRUUFJlZGlyZWN0KQoreworICAgIGF1dG8gZm91bmRSZXNvdXJjZSA9IE1hbmFn
ZXI6OnNpbmdsZXRvbigpLmZpbmRNYXRjaChyZXF1ZXN0KTsKKyAgICBNYW5hZ2VyOjpzaW5nbGV0
b24oKS5sb2dQbGF5ZWRCYWNrUmVzb3VyY2UocmVxdWVzdCwgIWZvdW5kUmVzb3VyY2UpOworCisg
ICAgaWYgKCFmb3VuZFJlc291cmNlKQorICAgICAgICBERUJVR19MT0dfRVJST1IoIlVuYWJsZSB0
byBmaW5kIGNhY2hlZCByZXNvdXJjZSBmb3I6ICV7cHVibGljfXMiLCByZXF1ZXN0LnVybCgpLnN0
cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICBlbHNlCisgICAgICAgIERFQlVHX0xPRygiRm91
bmQgY2FjaGVkIHJlc291cmNlIGZvcjogJXtwdWJsaWN9cyIsIHJlcXVlc3QudXJsKCkuc3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCkpOworCisgICAgcmV0dXJuIE5ldHdvcmtEYXRhVGFza1JlcGxheTo6
Y3JlYXRlKHNlc3Npb24sIGNsaWVudCwgcmVxdWVzdCwgY3JlZGVudGlhbHMsIHNob3VsZENsZWFy
UmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QsIGZvdW5kUmVzb3VyY2UpOworfQorCit9IC8v
IG5hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41Nzk2OWRmMmE5YWE2ZTM2N2MzYmQ2OTM5Y2YyMmFjZWM5ZDk3ZmE2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3
b3JrQ2FwdHVyZVJlcGxheWVyLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKworI2luY2x1ZGUgPFdlYkNv
cmUvUmVzb3VyY2VIYW5kbGVUeXBlcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2Fk
ZXJPcHRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CitjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3Mg
TmV0d29ya0RhdGFUYXNrOworY2xhc3MgTmV0d29ya0RhdGFUYXNrQ2xpZW50OworY2xhc3MgTmV0
d29ya1Nlc3Npb247Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIE5ldHdvcmtD
YXB0dXJlIHsKKworY2xhc3MgUmVwbGF5ZXIgeworcHVibGljOgorICAgIFJlcGxheWVyKCk7Cisg
ICAgUmVmPE5ldHdvcmtEYXRhVGFzaz4gcmVwbGF5UmVzb3VyY2UoCisgICAgICAgIE5ldHdvcmtT
ZXNzaW9uJiwKKyAgICAgICAgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiwKKyAgICAgICAgY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwKKyAgICAgICAgV2ViQ29yZTo6U3RvcmVkQ3JlZGVu
dGlhbHMsCisgICAgICAgIGJvb2wgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRp
cmVjdCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tS
ZXBsYXkuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3Jr
RGF0YVRhc2tSZXBsYXkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4Y2JlZmFlYjM2NzgzMTRmNjkzZGRjMmJk
Nzk2Y2VkZjQxYmNlNmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtEYXRhVGFza1JlcGxheS5jcHAKQEAgLTAsMCArMSwzODYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya0Rh
dGFUYXNrUmVwbGF5LmgiCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorCisjaW5jbHVk
ZSAiTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0
dXJlRXZlbnQuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCIKKyNpbmNsdWRl
ICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSFRUUEhlYWRlck5hbWVzLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9IVFRQUGFyc2Vycy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFy
c2VkQ29udGVudFJhbmdlLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworI2RlZmluZSBE
RUJVR19DTEFTUyBOZXR3b3JrRGF0YVRhc2tSZXBsYXkKKworbmFtZXNwYWNlIFdlYktpdCB7Citu
YW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgeworCisjaWYgMAorLy8gVE9ETzogUHV0IHRoZXNlIGlu
IGEgY2VudHJhbCBwbGFjZS4gVGhlcmUgYXJlIG5vdyBzZXZlcmFsIGNvcGllczoKKy8vIHNlZSBh
bHNvIEJsb2JSZXNvdXJjZUhhbmRsZSBhbmQgTmV0d29ya0RhdGFUYXNrQmxvYi5jcHAuCitzdGF0
aWMgY29uc3QgaW50IGh0dHBPSyA9IDIwMDsKK3N0YXRpYyBjb25zdCBpbnQgaHR0cFBhcnRpYWxD
b250ZW50ID0gMjA2Oworc3RhdGljIGNvbnN0IGludCBodHRwTm90QWxsb3dlZCA9IDQwMzsKK3N0
YXRpYyBjb25zdCBpbnQgaHR0cFJlcXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGUgPSA0MTY7Citz
dGF0aWMgY29uc3QgaW50IGh0dHBJbnRlcm5hbEVycm9yID0gNTAwOworc3RhdGljIGNvbnN0IGNo
YXIqIGh0dHBPS1RleHQgPSAiT0siOworc3RhdGljIGNvbnN0IGNoYXIqIGh0dHBQYXJ0aWFsQ29u
dGVudFRleHQgPSAiUGFydGlhbCBDb250ZW50IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBodHRwTm90
QWxsb3dlZFRleHQgPSAiTm90IEFsbG93ZWQiOworc3RhdGljIGNvbnN0IGNoYXIqIGh0dHBSZXF1
ZXN0ZWRSYW5nZU5vdFNhdGlzZmlhYmxlVGV4dCA9ICJSZXF1ZXN0ZWQgUmFuZ2UgTm90IFNhdGlz
ZmlhYmxlIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBodHRwSW50ZXJuYWxFcnJvclRleHQgPSAiSW50
ZXJuYWwgU2VydmVyIEVycm9yIjsKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
d2ViS2l0UmVsYXlEb21haW4gPSAiV2ViS2l0UmVwbGF5IjsKKworTmV0d29ya0RhdGFUYXNrUmVw
bGF5OjpOZXR3b3JrRGF0YVRhc2tSZXBsYXkoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdv
cmtEYXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzIGNyZWRlbnRpYWxzLCBib29sIHNo
b3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QsIENhY2hlZFJlc291cmNlKiBy
ZXNvdXJjZSkKKyAgICA6IE5ldHdvcmtEYXRhVGFzayhzZXNzaW9uLCBjbGllbnQsIHJlcXVlc3Qs
IGNyZWRlbnRpYWxzLCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KQor
ICAgICwgbV9yZXNvdXJjZShyZXNvdXJjZSkKKyAgICAsIG1fY3VycmVudFJlcXVlc3QobV9maXJz
dFJlcXVlc3QpCit7CisgICAgREVCVUdfTE9HKCIiKTsKKworICAgIG1fc2Vzc2lvbi0+cmVnaXN0
ZXJOZXR3b3JrRGF0YVRhc2soKnRoaXMpOworfQorCitOZXR3b3JrRGF0YVRhc2tSZXBsYXk6On5O
ZXR3b3JrRGF0YVRhc2tSZXBsYXkoKQoreworICAgIERFQlVHX0xPRygiIik7CisKKyAgICBtX3Nl
c3Npb24tPnVucmVnaXN0ZXJOZXR3b3JrRGF0YVRhc2soKnRoaXMpOworfQorCit2b2lkIE5ldHdv
cmtEYXRhVGFza1JlcGxheTo6cmVzdW1lKCkKK3sKKyAgICBERUJVR19MT0coIiIpOworCisgICAg
QVNTRVJUKG1fc3RhdGUgIT0gU3RhdGU6OlJ1bm5pbmcpOworICAgIGlmIChtX3N0YXRlID09IFN0
YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3N0YXRlID0gU3RhdGU6OlJ1bm5pbmc7CisKKyAgICBpZiAobV9zY2hl
ZHVsZWRGYWlsdXJlVHlwZSAhPSBOb0ZhaWx1cmUpIHsKKyAgICAgICAgQVNTRVJUKG1fZmFpbHVy
ZVRpbWVyLmlzQWN0aXZlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW5xdWV1
ZUNhY2hlZEV2ZW50SGFuZGxlcigpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza1JlcGxheTo6
c3VzcGVuZCgpCit7CisgICAgREVCVUdfTE9HKCIiKTsKKworICAgIC8vIFRPRE86IEFueXRoaW5n
IHRvIGRvIGhlcmU/IE5ldHdvcmtEYXRhVGFza0Jsb2IgZG9lc24ndCBkbyBhbnl0aGluZy4KK30K
Kwordm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmNhbmNlbCgpCit7CisgICAgREVCVUdfTE9H
KCIiKTsKKworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9
PSBTdGF0ZTo6Q29tcGxldGVkKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUT0RPOiBGb3Ig
dXMsIGlzIHRoZXJlIGFueSBwb2ludCBpbiB0aGlzIHN0YXRlPworICAgIG1fc3RhdGUgPSBTdGF0
ZTo6Q2FuY2VsaW5nOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza1JlcGxheTo6Y29tcGxldGUo
KQoreworICAgIERFQlVHX0xPRygiIik7CisKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q29t
cGxldGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXRlID0gU3RhdGU6OkNvbXBsZXRl
ZDsKKyAgICBtX3Jlc291cmNlID0gbnVsbHB0cjsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tS
ZXBsYXk6OmludmFsaWRhdGVBbmRDYW5jZWwoKQoreworICAgIERFQlVHX0xPRygiIik7CisKKyAg
ICBjYW5jZWwoKTsKKyAgICBjb21wbGV0ZSgpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza1Jl
cGxheTo6ZW5xdWV1ZUNhY2hlZEV2ZW50SGFuZGxlcigpCit7CisgICAgREVCVUdfTE9HKCIiKTsK
KworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpXSB7CisgICAgICAgIERFQlVHX0xPRygiZW5xdWV1ZUNhY2hlZEV2ZW50SGFu
ZGxlciBjYWxsYmFjayIpOworCisgICAgICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxp
bmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICFtX2NsaWVudCkgeworICAgICAg
ICAgICAgY29tcGxldGUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobV9jdXJyZW50UmVxdWVzdC5o
dHRwTWV0aG9kKCksICJnZXQiKSkgeworICAgICAgICAgICAgZGlkRmluaXNoKEVycm9yOjpNZXRo
b2ROb3RBbGxvd2VkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICghbV9yZXNvdXJjZSkgeworICAgICAgICAgICAgZGlkRmluaXNoKEVycm9yOjpOb3RGb3Vu
ZEVycm9yKTsgLy8gVE9ETzogVHVybiB0aGlzIGludG8gYSA0MDQ/CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworI2lmIDAKKyAgICAgICAgU3RyaW5nIHJhbmdlID0gbV9jdXJyZW50
UmVxdWVzdC5odHRwSGVhZGVyRmllbGQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OlJhbmdlKTsK
KyAgICAgICAgaWYgKCFyYW5nZS5pc0VtcHR5KCkgJiYgIVdlYkNvcmU6OnBhcnNlUmFuZ2UocmFu
Z2UsIG1fcmFuZ2VPZmZzZXQsIG1fcmFuZ2VFbmQsIG1fcmFuZ2VTdWZmaXhMZW5ndGgpKSB7Cisg
ICAgICAgICAgICBkaWRSZWNlaXZlRXJyb3IoRXJyb3I6OlJhbmdlRXJyb3IpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBhdXRvIGV2ZW50ID0gbV9y
ZXNvdXJjZS0+Z2V0TmV4dEV2ZW50KCk7CisgICAgICAgIGlmICghZXZlbnQpIHsKKyAgICAgICAg
ICAgIERFQlVHX0xPRygiZ2V0TmV4dEV2ZW50IHJldHVybmVkIG51bGwiKTsKKyAgICAgICAgICAg
IGRpZEZpbmlzaChFcnJvcjo6Tm90Rm91bmRFcnJvcik7IC8vIFRPRE86IFR1cm4gdGhpcyBpbnRv
IGEgNDA0PworICAgICAgICB9CisKKyAgICAgICAgLy8gVE9ETzogSXMgY3JlYXRpbmcgdGhpcyBl
eHBlbnNpdmU/IFNob3VsZCB3ZSBtYWtlIGl0IHN0YXRpYz8KKyAgICAgICAgY29uc3QgYXV0byB2
aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcigKKyAgICAgICAgICAgIFt0aGlzXShjb25zdCBSZXF1
ZXN0U2VudEV2ZW50JiBldmVudCkgeworICAgICAgICAgICAgICAgIHJlcGxheVJlcXVlc3RTZW50
KGV2ZW50KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbdGhpc10oY29uc3QgUmVzcG9u
c2VSZWNlaXZlZEV2ZW50JiBldmVudCkgeworICAgICAgICAgICAgICAgIHJlcGxheVJlc3BvbnNl
UmVjZWl2ZWQoZXZlbnQpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFt0aGlzXShjb25z
dCBSZWRpcmVjdFJlY2VpdmVkRXZlbnQmIGV2ZW50KSB7CisgICAgICAgICAgICAgICAgcmVwbGF5
UmVkaXJlY3RSZWNlaXZlZChldmVudCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgW3Ro
aXNdKGNvbnN0IFJlZGlyZWN0U2VudEV2ZW50JiBldmVudCkgeworICAgICAgICAgICAgICAgIHJl
cGxheVJlZGlyZWN0U2VudChldmVudCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgW3Ro
aXNdKGNvbnN0IERhdGFSZWNlaXZlZEV2ZW50JiBldmVudCkgeworICAgICAgICAgICAgICAgIHJl
cGxheURhdGFSZWNlaXZlZChldmVudCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgW3Ro
aXNdKGNvbnN0IEZpbmlzaGVkRXZlbnQmIGV2ZW50KSB7CisgICAgICAgICAgICAgICAgcmVwbGF5
RmluaXNoZWQoZXZlbnQpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgV1RGOjp2aXNpdCh2
aXNpdG9yLCAqZXZlbnQpOworICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza1JlcGxh
eTo6cmVwbGF5UmVxdWVzdFNlbnQoY29uc3QgUmVxdWVzdFNlbnRFdmVudCYgZXZlbnQpCit7Cisg
ICAgREVCVUdfTE9HKCIiKTsKKworICAgIGlmIChldmVudC5yZXF1ZXN0LnVybCgpICE9IG1fY3Vy
cmVudFJlcXVlc3QudXJsKCkpIHsKKyAgICAgICAgREVCVUdfTE9HKCJNaXNtYXRjaGluZyByZXF1
ZXN0IFVSTHM6Iik7CisgICAgICAgIERFQlVHX0xPRygiICAgIG1fY3VycmVudFJlcXVlc3QudXJs
OiAle3B1YmxpY31zIiwgbV9jdXJyZW50UmVxdWVzdC51cmwoKS5zdHJpbmcoKS5hc2NpaSgpLmRh
dGEoKSk7CisgICAgICAgIERFQlVHX0xPRygiICAgIGV2ZW50LnJlcXVlc3QudXJsOiAle3B1Ymxp
Y31zIiwgZXZlbnQucmVxdWVzdC51cmwoKS5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CisgICAg
fQorCisgICAgZW5xdWV1ZUNhY2hlZEV2ZW50SGFuZGxlcigpOworfQorCit2b2lkIE5ldHdvcmtE
YXRhVGFza1JlcGxheTo6cmVwbGF5UmVzcG9uc2VSZWNlaXZlZChjb25zdCBSZXNwb25zZVJlY2Vp
dmVkRXZlbnQmIGV2ZW50KQoreworICAgIERFQlVHX0xPRygiIik7CisKKyAgICBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlKGV2ZW50LnJlc3BvbnNlKTsKKworI2lmIDAKKyAgICAv
LyBUT0RPOiBNdWNoIG9mIHRoaXMgY29kZSB3YXMgbGlmdGVkIGZyb20gTmV0d29ya0RhdGFUYXNr
QmxvYiwgd2hpY2ggbWlnaHQKKyAgICAvLyBiZSBhc2tlZCBmb3IgYSBkYXRhIHJhbmdlLiBCdXQg
Zm9yIHVzLCB3ZSBwcm9iYWJseSByZWNvcmRlZCBvbmx5IHRoZQorICAgIC8vIG9yaWdpbmFsbHkt
cmVxdWVzdGVkIHJhbmdlLiBUaGVyZWZvcmUsIG9uIHBsYXliYWNrLCB3ZSdkIGJldHRlciBiZSBh
c2tlZAorICAgIC8vIGZvciB0aGUgc2FtZSByYW5nZSEgQ2hlY2sgZm9yIHRoYXQgYW5kIGFib3J0
IGlmIHRoZSByZXF1ZXN0ZWQgcmFuZ2UgZG9lcworICAgIC8vIG5vdCBtYXRjaCB3aGF0IHdlIGhh
dmUuCisgICAgLy8KKyAgICAvLyBUT0RPOiBBY3R1YWxseSBkbyB3ZSBuZWVkIG11Y2ggb2YgdGhp
cz8gV2UgYXJlIHN1cHBvc2VkIHRvIGJlIHJlcGxheWluZworICAgIC8vIGEgcmVzcG9uc2UgZXZl
bnQuIFdlIGhhdmUgdGhlIHJlc3BvbnNlIG9iamVjdCBhcyBpdCB3YXMgcmVjb3JkZWQgLS0gd2UK
KyAgICAvLyBzaG91bGQgYmUgYWJsZSB0byBqdXN0IHJldHVybiBpdC4gV2Ugc2hvdWxkbid0IGhh
dmUgdG8gZnV0eiB3aXRoCisgICAgLy8gY29udGVudFR5cGUgb3IgYW55dGhpbmcgbGlrZSB0aGF0
LgorICAgIC8vCisgICAgLy8gVE9ETzogSWYgaXQgdHVybnMgb3V0IHRoYXQgd2UgZG9uJ3QgbmVl
ZCB0byBmdXR6IHdpdGggY29udGVudFR5cGUsCisgICAgLy8gcmVtb3ZlIGl0cyBzdXBwb3J0aW5n
IHJvdXRpbmVzLiBFLmcuLCBkbyB3ZSBuZWVkIHRvIGV4cG9ydAorICAgIC8vIGV4dHJhY3RNSU1F
VHlwZUZyb21NZWRpYVR5cGUgZnJvbSBXZWJDb3JlPworCisgICAgY29uc3QgYXV0byYgaGVhZGVy
cyA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKTsKKyAgICBhdXRvIGNvbnRlbnRUeXBlID0g
aGVhZGVycy5nZXQoV2ViQ29yZTo6SFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlKTsKKyAgICBj
b250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7CisgICAg
Y29udGVudFR5cGUgPSBXZWJDb3JlOjpleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKGNvbnRl
bnRUeXBlKTsKKworICAgIGJvb2wgaXNSYW5nZVJlcXVlc3QgPSBtX3JhbmdlT2Zmc2V0ICE9IGtQ
b3NpdGlvbk5vdFNwZWNpZmllZDsKKyAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZShpc1Jh
bmdlUmVxdWVzdCA/IGh0dHBQYXJ0aWFsQ29udGVudCA6IGh0dHBPSyk7CisgICAgcmVzcG9uc2Uu
c2V0SFRUUFN0YXR1c1RleHQoaXNSYW5nZVJlcXVlc3QgPyBodHRwUGFydGlhbENvbnRlbnRUZXh0
IDogaHR0cE9LVGV4dCk7CisKKyAgICByZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoV2ViQ29y
ZTo6SFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlLCBjb250ZW50VHlwZSk7CisgICAgcmVzcG9u
c2Uuc2V0SFRUUEhlYWRlckZpZWxkKFdlYkNvcmU6OkhUVFBIZWFkZXJOYW1lOjpDb250ZW50TGVu
Z3RoLCBTdHJpbmc6Om51bWJlcigwKSk7IC8vIFRPRE86IHB1dCByZWFsIHJlbWFpbmluZyBzaXpl
IGluIGhlcmUKKworICAgIGlmIChpc1JhbmdlUmVxdWVzdCkKKyAgICAgICAgcmVzcG9uc2Uuc2V0
SFRUUEhlYWRlckZpZWxkKFdlYkNvcmU6OkhUVFBIZWFkZXJOYW1lOjpDb250ZW50UmFuZ2UsIFdl
YkNvcmU6OlBhcnNlZENvbnRlbnRSYW5nZShtX3JhbmdlT2Zmc2V0LCBtX3JhbmdlRW5kLCAwKS5o
ZWFkZXJWYWx1ZSgpKTsgLy8gVE9ETzogcHV0IHJlYWwgdG90YWwgc2l6ZSBoZXJlCisjZW5kaWYK
KworICAgIC8vIEZvcndhcmQgdXAgdGhlIHJlc3BvbnNlLiBJZiB3ZSBhcmUgdG8gY29udGludWUg
cmVjZWl2aW5nIHRoZSByZXNvdXJjZSwgYQorICAgIC8vIGNhbGxiYWNrIGluIGRpZFJlY2VpdmVS
ZXNwb25zZSB3aWxsIGdldCBjYWxsZWQuIEF0IHRoYXQgdGltZSwgd2UnbGwgY29udGludWUKKyAg
ICAvLyByZWFkaW5nIGFuZCBkaXNwYXRjaGluZyBjYWNoZWQgZXZlbnRzLgorCisgICAgZGlkUmVj
ZWl2ZVJlc3BvbnNlKFdURk1vdmUocmVzcG9uc2UpKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRh
c2tSZXBsYXk6OnJlcGxheVJlZGlyZWN0UmVjZWl2ZWQoY29uc3QgUmVkaXJlY3RSZWNlaXZlZEV2
ZW50JiBldmVudCkKK3sKKyAgICBERUJVR19MT0coIiIpOworCisgICAgLy8gVE9ETzogTmV0d29y
a0RhdGFUYXNrQ29jb2E6OndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uIGRvZXMgbG90cyBvZgor
ICAgIC8vIG11Y2tpbmcgd2l0aCByZXF1ZXN0IGZpZWxkcy4gRG8gd2UgbmVlZCB0byBkbyB0aGF0
PyBJIHRoaW5rIHRoYXQgdGhlCisgICAgLy8gZXZlbnQgcmVjb3JkZWQgdGhlIGFscmVhZHktbXVu
Z2VkIHJlcXVlc3QsIHNvIHdlIHNob3VsZG4ndCBuZWVkIHRvIGRvCisgICAgLy8gYW55IG9mIHRo
YXQgYWdhaW4uCisgICAgLy8KKyAgICAvLyAqIGNsZWFySFRUUFJlZmVycmVyCisgICAgLy8gKiBy
ZW1vdmVDcmVkZW50aWFscworICAgIC8vICogY2xlYXJIVFRQQXV0aG9yaXphdGlvbgorICAgIC8v
ICogY2xlYXJIVFRQT3JpZ2luCisKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlY2Vp
dmVkUmVzcG9uc2UgPSBldmVudC5yZXNwb25zZTsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QgcmVjZWl2ZWRSZXF1ZXN0ID0gZXZlbnQucmVxdWVzdDsKKworICAgIEFTU0VSVChtX2NsaWVu
dCk7CisgICAgbV9jbGllbnQtPndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uKFdURk1vdmUocmVj
ZWl2ZWRSZXNwb25zZSksIFdURk1vdmUocmVjZWl2ZWRSZXF1ZXN0KSwgW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYg
dXBkYXRlZFJlcXVlc3QpIHsKKyAgICAgICAgREVCVUdfTE9HKCJyZXBsYXlSZWRpcmVjdFJlY2Vp
dmVkIGNhbGxiYWNrIik7CisKKyAgICAgICAgbV9jdXJyZW50UmVxdWVzdCA9IHVwZGF0ZWRSZXF1
ZXN0OworICAgICAgICBlbnF1ZXVlQ2FjaGVkRXZlbnRIYW5kbGVyKCk7CisgICAgfSk7Cit9CisK
K3ZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjpyZXBsYXlSZWRpcmVjdFNlbnQoY29uc3QgUmVk
aXJlY3RTZW50RXZlbnQmIGV2ZW50KQoreworICAgIERFQlVHX0xPRygiIik7CisKKyAgICBpZiAo
ZXZlbnQucmVxdWVzdC51cmwoKSAhPSBtX2N1cnJlbnRSZXF1ZXN0LnVybCgpKSB7CisgICAgICAg
IERFQlVHX0xPRygiTWlzbWF0Y2hpbmcgcmVxdWVzdCBVUkxzOiIpOworICAgICAgICBERUJVR19M
T0coIiAgICBtX2N1cnJlbnRSZXF1ZXN0LnVybDogJXtwdWJsaWN9cyIsIG1fY3VycmVudFJlcXVl
c3QudXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICBERUJVR19MT0coIiAg
ICBldmVudC5yZXF1ZXN0LnVybDogJXtwdWJsaWN9cyIsIGV2ZW50LnJlcXVlc3QudXJsKCkuc3Ry
aW5nKCkuYXNjaWkoKS5kYXRhKCkpOworICAgIH0KKworICAgIGVucXVldWVDYWNoZWRFdmVudEhh
bmRsZXIoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnJlcGxheURhdGFSZWNl
aXZlZChjb25zdCBEYXRhUmVjZWl2ZWRFdmVudCYgZXZlbnQpCit7CisgICAgREVCVUdfTE9HKCIi
KTsKKworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRh
KGV2ZW50LmRhdGEuY29weVJlZigpKTsKKworICAgIGVucXVldWVDYWNoZWRFdmVudEhhbmRsZXIo
KTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnJlcGxheUZpbmlzaGVkKGNvbnN0
IEZpbmlzaGVkRXZlbnQmIC8qZXZlbnQqLykKK3sKKyAgICBERUJVR19MT0coIiIpOworCisgICAg
ZGlkRmluaXNoKC8qZXZlbnQqLyk7Cit9CisKKyNpZiAwCit2b2lkIE5ldHdvcmtEYXRhVGFza1Jl
cGxheTo6ZGlkUmVjZWl2ZUVycm9yKEVycm9yIGVycm9yQ29kZSkKK3sKKyAgICAvLyBDYWxsZWQg
b25jZSBpbiBtYWluIGV2ZW50IGxvb3AuCisKKyAgICAvLyBTaG91bGQgb25seSBiZSBjYWxsZWQg
aW4gY2FzZXMgd2hlcmUgZXJyb3JDb2RlICE9IE5vRXJyb3IuCisKKyAgICBERUJVR19MT0coTmV0
d29ya1Nlc3Npb24sICIlcCAtIE5ldHdvcmtEYXRhVGFza1JlcGxheTo6ZGlkUmVjZWl2ZUVycm9y
ICgldSkiLCB0aGlzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZXJyb3JDb2RlKSk7CisKKyAgICBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlKG1fY3VycmVudFJlcXVlc3QudXJsKCks
ICJ0ZXh0L3BsYWluIiwgMCwgU3RyaW5nKCkpOworICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7Cisg
ICAgY2FzZSBFcnJvcjo6UmFuZ2VFcnJvcjoKKyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1
c0NvZGUoaHR0cFJlcXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGUpOworICAgICAgICByZXNwb25z
ZS5zZXRIVFRQU3RhdHVzVGV4dChodHRwUmVxdWVzdGVkUmFuZ2VOb3RTYXRpc2ZpYWJsZVRleHQp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEVycm9yOjpTZWN1cml0eUVycm9yOiAvLyBUT0RP
OiBOb3QgaXNzdWVkLiBEbyBzb21ldGhpbmcgYWJvdXQgdGhhdD8KKyAgICAgICAgcmVzcG9uc2Uu
c2V0SFRUUFN0YXR1c0NvZGUoaHR0cE5vdEFsbG93ZWQpOworICAgICAgICByZXNwb25zZS5zZXRI
VFRQU3RhdHVzVGV4dChodHRwTm90QWxsb3dlZFRleHQpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZShodHRwSW50ZXJuYWxF
cnJvcik7CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KGh0dHBJbnRlcm5hbEVy
cm9yVGV4dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRpZFJlY2VpdmVSZXNwb25z
ZShXVEZNb3ZlKHJlc3BvbnNlKSwgZXJyb3JDb2RlKTsKK30KKyNlbmRpZgorCit2b2lkIE5ldHdv
cmtEYXRhVGFza1JlcGxheTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UmJiByZXNwb25zZSwgRXJyb3IgZXJyb3JDb2RlKQoreworICAgIERFQlVHX0xPRygiKCV1
KSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlcnJvckNvZGUpKTsKKworICAgIEFTU0VSVChtX2Ns
aWVudCk7CisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZU5ldHdvcmtTZXNzaW9uKFdU
Rk1vdmUocmVzcG9uc2UpLCBbdGhpcywgZXJyb3JDb2RlLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyldKFdlYkNvcmU6OlBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24pIHsKKyAgICAgICAg
REVCVUdfTE9HKCJkaWRSZWNlaXZlUmVzcG9uc2UgY2FsbGJhY2sgKCV1KSIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihwb2xpY3lBY3Rpb24pKTsKKworICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0
ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkgeworICAgICAgICAg
ICAgY29tcGxldGUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChlcnJvckNvZGUgIT0gRXJyb3I6Ok5vRXJyb3IpIHsKKyAgICAgICAgICAgIGRpZEZpbmlz
aCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChw
b2xpY3lBY3Rpb24pIHsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpQb2xpY3lBY3Rpb246OlBvbGlj
eVVzZToKKyAgICAgICAgICAgIGVucXVldWVDYWNoZWRFdmVudEhhbmRsZXIoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkNvcmU6OlBvbGljeUFjdGlvbjo6UG9saWN5SWdu
b3JlOgorICAgICAgICAgICAgY29tcGxldGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFdlYkNvcmU6OlBvbGljeUFjdGlvbjo6UG9saWN5RG93bmxvYWQ6CisgICAgICAgICAg
ICBERUJVR19MT0coIldlYkNvcmU6OlBvbGljeUFjdGlvbjo6UG9saWN5RG93bmxvYWQiKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrUmVwbGF5OjpkaWRGaW5pc2goRXJyb3IgZXJyb3JDb2RlKQoreworICAgIERFQlVHX0xP
RygiKCV1KSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlcnJvckNvZGUpKTsKKworICAgIGNvbXBs
ZXRlKCk7CisKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIGlmIChlcnJvckNvZGUgIT0gRXJy
b3I6Ok5vRXJyb3IpCisgICAgICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJvcihXZWJD
b3JlOjpSZXNvdXJjZUVycm9yKHdlYktpdFJlbGF5RG9tYWluLCBzdGF0aWNfY2FzdDxpbnQ+KGVy
cm9yQ29kZSksIG1fZmlyc3RSZXF1ZXN0LnVybCgpLCBTdHJpbmcoKSkpOworICAgIGVsc2UKKyAg
ICAgICAgbV9jbGllbnQtPmRpZENvbXBsZXRlV2l0aEVycm9yKHsgfSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIE5ldHdvcmtDYXB0dXJlCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtEYXRhVGFza1JlcGxheS5oIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wZDNhZjM5NjQ4YjYzMTJkMGJkMmM0OTdkNjgwYTc3MWY1Y2E0NGRiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0
YVRhc2tSZXBsYXkuaApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKworI2luY2x1ZGUgIk5ldHdvcmtEYXRh
VGFzay5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGVUeXBlcy5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkZXJPcHRpb25zLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFz
cyBOZXR3b3JrRGF0YVRhc2tDbGllbnQ7CitjbGFzcyBOZXR3b3JrU2Vzc2lvbjsKK30KKworbmFt
ZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgeworCitjbGFzcyBDYWNo
ZWRSZXNvdXJjZTsKK3N0cnVjdCBSZXF1ZXN0U2VudEV2ZW50Oworc3RydWN0IFJlc3BvbnNlUmVj
ZWl2ZWRFdmVudDsKK3N0cnVjdCBSZWRpcmVjdFJlY2VpdmVkRXZlbnQ7CitzdHJ1Y3QgUmVkaXJl
Y3RTZW50RXZlbnQ7CitzdHJ1Y3QgRGF0YVJlY2VpdmVkRXZlbnQ7CitzdHJ1Y3QgRmluaXNoZWRF
dmVudDsKKworY2xhc3MgTmV0d29ya0RhdGFUYXNrUmVwbGF5IDogcHVibGljIE5ldHdvcmtEYXRh
VGFzayB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxOZXR3b3JrRGF0YVRhc2tSZXBsYXk+IGNy
ZWF0ZSgKKyAgICAgICAgTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sCisgICAgICAgIE5ldHdvcmtE
YXRhVGFza0NsaWVudCYgY2xpZW50LAorICAgICAgICBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsCisgICAgICAgIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxzIGNyZWRl
bnRpYWxzLAorICAgICAgICBib29sIHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVk
aXJlY3QsCisgICAgICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtEYXRhVGFza1JlcGxheShzZXNzaW9uLCBjbGll
bnQsIHJlcXVlc3QsIGNyZWRlbnRpYWxzLCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRU
UFJlZGlyZWN0LCByZXNvdXJjZSkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBOZXR3b3JrRGF0
YVRhc2tSZXBsYXkoCisgICAgICAgIE5ldHdvcmtTZXNzaW9uJiwKKyAgICAgICAgTmV0d29ya0Rh
dGFUYXNrQ2xpZW50JiwKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwK
KyAgICAgICAgV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHMsCisgICAgICAgIGJvb2wgc2hvdWxk
Q2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCwKKyAgICAgICAgQ2FjaGVkUmVzb3Vy
Y2UqKTsKKyAgICB+TmV0d29ya0RhdGFUYXNrUmVwbGF5KCkgb3ZlcnJpZGU7CisKKyAgICB2b2lk
IHJlc3VtZSgpIG92ZXJyaWRlOworICAgIHZvaWQgc3VzcGVuZCgpIG92ZXJyaWRlOworICAgIHZv
aWQgY2FuY2VsKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjb21wbGV0ZSgpOworICAgIHZvaWQgaW52
YWxpZGF0ZUFuZENhbmNlbCgpIG92ZXJyaWRlOworCisgICAgU3RhdGUgc3RhdGUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX3N0YXRlOyB9CisKKyAgICB2b2lkIGVucXVldWVDYWNoZWRFdmVu
dEhhbmRsZXIoKTsKKyAgICB2b2lkIHJlcGxheVJlcXVlc3RTZW50KGNvbnN0IFJlcXVlc3RTZW50
RXZlbnQmKTsKKyAgICB2b2lkIHJlcGxheVJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgUmVzcG9uc2VS
ZWNlaXZlZEV2ZW50Jik7CisgICAgdm9pZCByZXBsYXlSZWRpcmVjdFJlY2VpdmVkKGNvbnN0IFJl
ZGlyZWN0UmVjZWl2ZWRFdmVudCYpOworICAgIHZvaWQgcmVwbGF5UmVkaXJlY3RTZW50KGNvbnN0
IFJlZGlyZWN0U2VudEV2ZW50Jik7CisgICAgdm9pZCByZXBsYXlEYXRhUmVjZWl2ZWQoY29uc3Qg
RGF0YVJlY2VpdmVkRXZlbnQmKTsKKyAgICB2b2lkIHJlcGxheUZpbmlzaGVkKGNvbnN0IEZpbmlz
aGVkRXZlbnQmKTsKKworICAgIGVudW0gY2xhc3MgRXJyb3IgeworICAgICAgICBOb0Vycm9yID0g
MCwKKyAgICAgICAgTm90Rm91bmRFcnJvciA9IDEsCisjaWYgMAorICAgICAgICBTZWN1cml0eUVy
cm9yID0gMiwKKyAgICAgICAgUmFuZ2VFcnJvciA9IDMsCisgICAgICAgIE5vdFJlYWRhYmxlRXJy
b3IgPSA0LAorI2VuZGlmCisgICAgICAgIE1ldGhvZE5vdEFsbG93ZWQgPSA1CisgICAgfTsKKwor
I2lmIDAKKyAgICB2b2lkIGRpZFJlY2VpdmVFcnJvcihFcnJvcik7CisjZW5kaWYKKyAgICB2b2lk
IGRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYsIEVycm9yID0g
RXJyb3I6Ok5vRXJyb3IpOworICAgIHZvaWQgZGlkRmluaXNoKEVycm9yID0gRXJyb3I6Ok5vRXJy
b3IpOworCitwcml2YXRlOgorICAgIGVudW0geyBrUG9zaXRpb25Ob3RTcGVjaWZpZWQgPSAtMSB9
OworCisgICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpTdXNwZW5kZWQgfTsKKyAgICBDYWNoZWRS
ZXNvdXJjZSogbV9yZXNvdXJjZTsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9jdXJy
ZW50UmVxdWVzdDsKKyNpZiAwCisgICAgbG9uZyBsb25nIG1fcmFuZ2VPZmZzZXQgeyBrUG9zaXRp
b25Ob3RTcGVjaWZpZWQgfTsKKyAgICBsb25nIGxvbmcgbV9yYW5nZUVuZCB7IGtQb3NpdGlvbk5v
dFNwZWNpZmllZCB9OworICAgIGxvbmcgbG9uZyBtX3JhbmdlU3VmZml4TGVuZ3RoIHsga1Bvc2l0
aW9uTm90U3BlY2lmaWVkIH07CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIE5ldHdvcmtD
YXB0dXJlCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JL
X0NBUFRVUkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2Vi
UHJvY2Vzc1Bvb2xDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQ
cm9jZXNzUG9vbENvY29hLm1tCmluZGV4IDQ5ZDRkNWJkNWE5OWQ0ZDk4MTExNmEwOGExMzI3ZDUw
MWNiYWI5NTEuLjFlZmIyMGUyZDM3ZjU0YWViZjE1ZTJlYTRlODIxZjNmYWU5MDBkNzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29h
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENv
Y29hLm1tCkBAIC04Nyw2ICs4NywxMiBAQCBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBXZWJLaXRO
ZXR3b3JrTG9hZFRocm90dGxlTGF0ZW5jeU1pbGxpc2Vjb25kc0RlZmF1bHRzS2V5CiAKIHN0YXRp
YyBOU1N0cmluZyAqIGNvbnN0IFdlYktpdFZhcmlhdGlvbkZvbnRzRW5hYmxlZERlZmF1bHRzS2V5
ID0gQCJFeHBlcmltZW50YWxWYXJpYXRpb25Gb250c0VuYWJsZWQiOwogCisjaWYgRU5BQkxFKE5F
VFdPUktfQ0FQVFVSRSkKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdlYktpdFJlY29yZE5ldHdv
cmtSZXF1ZXN0c0RlZmF1bHRzS2V5ID0gQCJXZWJLaXRSZWNvcmROZXR3b3JrUmVxdWVzdHMiOwor
c3RhdGljIE5TU3RyaW5nICogY29uc3QgV2ViS2l0UmVwbGF5TmV0d29ya1JlcXVlc3RzRGVmYXVs
dHNLZXkgPSBAIldlYktpdFJlcGxheU5ldHdvcmtSZXF1ZXN0cyI7CitzdGF0aWMgTlNTdHJpbmcg
KiBjb25zdCBXZWJLaXRSZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uRGVmYXVsdHNLZXkgPSBAIldl
YktpdFJlY29yZFJlcGxheUNhY2hlTG9jYXRpb24iOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBOU1N0cmluZyAqU2NoZW1lRm9yQ3VzdG9tUHJvdG9jb2xSZWdpc3RlcmVkTm90aWZp
Y2F0aW9uTmFtZSA9IEAiV2ViS2l0U2NoZW1lRm9yQ3VzdG9tUHJvdG9jb2xSZWdpc3RlcmVkTm90
aWZpY2F0aW9uIjsKQEAgLTI2Miw2ICsyNjgsMTQgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxh
dGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmEK
ICNlbmRpZgogCiAgICAgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxl
ZCA9IGNvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkKCk7CisKKyNpZiBFTkFCTEUoTkVU
V09SS19DQVBUVVJFKQorICAgIHBhcmFtZXRlcnMuc2hvdWxkUmVjb3JkTmV0d29ya1JlcXVlc3Rz
ID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6V2ViS2l0UmVjb3JkTmV0d29ya1JlcXVlc3RzRGVmYXVs
dHNLZXldOworICAgIHBhcmFtZXRlcnMuc2hvdWxkUmVwbGF5TmV0d29ya1JlcXVlc3RzID0gW2Rl
ZmF1bHRzIGJvb2xGb3JLZXk6V2ViS2l0UmVwbGF5TmV0d29ya1JlcXVlc3RzRGVmYXVsdHNLZXld
OworICAgIHBhcmFtZXRlcnMucmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbiA9IFtkZWZhdWx0cyBz
dHJpbmdGb3JLZXk6V2ViS2l0UmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbkRlZmF1bHRzS2V5XTsK
KyAgICBpZiAocGFyYW1ldGVycy5yZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uLmlzRW1wdHkoKSkK
KyAgICAgICAgcGFyYW1ldGVycy5yZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uID0gcGFyYW1ldGVy
cy5kaXNrQ2FjaGVEaXJlY3Rvcnk7CisjZW5kaWYKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6
cGxhdGZvcm1JbnZhbGlkYXRlQ29udGV4dCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMWE2MDY3OWZjZTVjZGQzMTdmOTQ4NDA2
ODM2NzRlMTU3MmRjOTdhNS4uNmVkYjk2YjVlMmZmMDJlYzFlYWQxY2Q3OGFkYWJiMzA5ZGI2NjM3
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMTAzOSw2ICsxMDM5LDE5IEBACiAJCTUyRDVBMUIwMUM1NzQ5NUEwMERFMzRBMyAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUFBMUM1NzQ5NEUwMERFMzRBMyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCAqLzsgfTsKIAkJNTJENUExQjExQzU3NDk2MjAw
REUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUFDMUM1NzQ5NEUwMERFMzRB
MyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gKi87IH07CiAJCTUyRDVBMUI3
MUM1NzRBMDIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQjQxQzU3NDlGMjAw
REUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gKi87IH07CisJCTUzMDI1ODNC
MURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUNhY2hlZFJlc291cmNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1ODJFMURDQkJE
MUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUNhY2hlZFJlc291cmNlLmNwcCAqLzsgfTsKKwkJ
NTMwMjU4M0MxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlQ2FjaGVkUmVzb3VyY2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1ODJG
MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUNhY2hlZFJlc291cmNlLmggKi87IH07
CisJCTUzMDI1ODNEMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1ODMwMURD
QkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcCAqLzsgfTsKKwkJNTMwMjU4
M0UxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1ODMxMURDQkJEMUQwMERBODlD
MiAvKiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmggKi87IH07CisJCTUzMDI1ODNGMURDQkJEMjIwMERB
ODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1ODMyMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3Jr
Q2FwdHVyZUxvZ2dpbmcuaCAqLzsgfTsKKwkJNTMwMjU4NDAxRENCQkQyMjAwREE4OUMyIC8qIE5l
dHdvcmtDYXB0dXJlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MzAyNTgzMzFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVN
YW5hZ2VyLmNwcCAqLzsgfTsKKwkJNTMwMjU4NDExRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtD
YXB0dXJlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwMjU4MzQxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTWFuYWdlci5o
ICovOyB9OworCQk1MzAyNTg0MjFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZWNv
cmRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MzAyNTgzNTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZWNvcmRlci5jcHAgKi87
IH07CisJCTUzMDI1ODQzMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlY29yZGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgz
NjFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZWNvcmRlci5oICovOyB9OworCQk1
MzAyNTg0NDFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXBsYXllci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgzNzFEQ0JC
RDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXBsYXllci5jcHAgKi87IH07CisJCTUzMDI1
ODQ1MURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgzODFEQ0JCRDFEMDBE
QTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXBsYXllci5oICovOyB9OworCQk1MzAyNTg0NjFEQ0JC
RDIyMDBEQTg5QzIgLyogTmV0d29ya0RhdGFUYXNrUmVwbGF5LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1ODM5MURDQkJEMUQwMERBODlDMiAv
KiBOZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwICovOyB9OworCQk1MzAyNTg0NzFEQ0JCRDIyMDBE
QTg5QzIgLyogTmV0d29ya0RhdGFUYXNrUmVwbGF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgzQTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29y
a0RhdGFUYXNrUmVwbGF5LmggKi87IH07CiAJCTUzMjE1OTUzMURCQUU3MTgwMDU0QUEzQyAvKiBO
ZXR3b3JrU2Vzc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzIxNTk1MjFEQkFFNkZDMDA1NEFBM0MgLyogTmV0d29ya1Nlc3Npb24uY3BwICov
OyB9OwogCQk1MzIxNTk1NDFEQkFFNzFEMDA1NEFBM0MgLyogTmV0d29ya0RhdGFUYXNrLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMjE1OTUxMURC
QUU2RkMwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2suY3BwICovOyB9OwogCQk1MzIxNTk1NTFE
QkFFNzI5MDA1NEFBM0MgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMyMTU5NTAxREJBRTZENzAwNTRBQTNDIC8q
IE5ldHdvcmtTZXNzaW9uQ29jb2EuaCAqLzsgfTsKQEAgLTMxMzEsNiArMzE0NCwxOSBAQAogCQk1
MkQ1QTFCMjFDNTc0OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDVBMUIzMUM1NzQ5RjIwMERFMzRB
MyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDVBMUI0MUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTMwMjU4MkUxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlQ2FjaGVk
UmVzb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29y
a0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJl
L05ldHdvcmtDYXB0dXJlQ2FjaGVkUmVzb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MzAyNTgyRjFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVDYWNoZWRS
ZXNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrQ2FwdHVy
ZUNhY2hlZFJlc291cmNlLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtD
YXB0dXJlQ2FjaGVkUmVzb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMw
MjU4MzAxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya0NhcHR1cmVFdmVudC5jcHA7IHBh
dGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzAyNTgzMTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0
d29ya0NhcHR1cmVFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3
b3JrQ2FwdHVyZUV2ZW50Lmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtD
YXB0dXJlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMwMjU4MzIxRENC
QkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTG9nZ2luZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaDsgcGF0aCA9IE5ldHdvcmtQ
cm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVMb2dnaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUzMDI1ODMzMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZU1h
bmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya0Nh
cHR1cmVNYW5hZ2VyLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0Nh
cHR1cmVNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMwMjU4MzQx
RENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTWFuYWdlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaDsgcGF0aCA9IE5ldHdv
cmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUzMDI1ODM1MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVy
ZVJlY29yZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdv
cmtDYXB0dXJlUmVjb3JkZXIuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3
b3JrQ2FwdHVyZVJlY29yZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMw
MjU4MzYxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVjb3JkZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya0NhcHR1cmVSZWNvcmRlci5oOyBwYXRo
ID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMDI1ODM3MURDQkJEMUQwMERBODlDMiAvKiBOZXR3
b3JrQ2FwdHVyZVJlcGxheWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IE5ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2Fw
dHVyZS9OZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTMwMjU4MzgxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVwbGF5ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya0NhcHR1cmVSZXBsYXll
ci5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlcGxheWVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMDI1ODM5MURDQkJEMUQwMERBODlD
MiAvKiBOZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gTmV0d29ya0RhdGFUYXNrUmVwbGF5LmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9j
ZXNzL2NhcHR1cmUvTmV0d29ya0RhdGFUYXNrUmVwbGF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTMwMjU4M0ExRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtEYXRhVGFza1Jl
cGxheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrRGF0YVRhc2tS
ZXBsYXkuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0RhdGFUYXNrUmVw
bGF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMjE1OTRGMURCQUU2RDcwMDU0
QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY29j
b2EvTmV0d29ya0RhdGFUYXNrQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTMyMTU5NTAxREJBRTZENzAwNTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya1Nlc3Npb25Db2NvYS5oOyBwYXRoID0g
TmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MzIxNTk1MTFEQkFFNkZDMDA1NEFBM0MgLyogTmV0d29ya0RhdGFU
YXNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtEYXRh
VGFzay5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTQ1OSw2ICs1NDg1LDcgQEAKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJRTQ4OUQyODIxQTBBMkJFODAwNzhDMDZBIC8q
IGNhY2hlICovLAorCQkJCTUzOUJENUIyMURBREIwQkEwMEYyRTRFMSAvKiBjYXB0dXJlICovLAog
CQkJCTdFQzRGMEY4MThFNEE5MjIwMDgwNTZBRiAvKiBjb2NvYSAqLywKIAkJCQk1QzE0MjZGMjFD
MjNGODJEMDBENDExODMgLyogQ3VzdG9tUHJvdG9jb2xzICovLAogCQkJCTVDMTQyNkYxMUMyM0Y4
MTcwMEQ0MTE4MyAvKiBEb3dubG9hZHMgKi8sCkBAIC01NzY5LDYgKzU3OTYsMjYgQEAKIAkJCW5h
bWUgPSBJY29uRGF0YWJhc2U7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk1
MzlCRDVCMjFEQURCMEJBMDBGMkU0RTEgLyogY2FwdHVyZSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdy
b3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNTMwMjU4MkUxRENCQkQxRDAwREE4OUMyIC8qIE5l
dHdvcmtDYXB0dXJlQ2FjaGVkUmVzb3VyY2UuY3BwICovLAorCQkJCTUzMDI1ODJGMURDQkJEMUQw
MERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUNhY2hlZFJlc291cmNlLmggKi8sCisJCQkJNTMwMjU4
MzAxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwICovLAorCQkJCTUz
MDI1ODMxMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmggKi8sCisJCQkJ
NTMwMjU4MzIxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTG9nZ2luZy5oICovLAor
CQkJCTUzMDI1ODMzMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuY3Bw
ICovLAorCQkJCTUzMDI1ODM0MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZU1hbmFn
ZXIuaCAqLywKKwkJCQk1MzAyNTgzNTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVS
ZWNvcmRlci5jcHAgKi8sCisJCQkJNTMwMjU4MzYxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtD
YXB0dXJlUmVjb3JkZXIuaCAqLywKKwkJCQk1MzAyNTgzNzFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0
d29ya0NhcHR1cmVSZXBsYXllci5jcHAgKi8sCisJCQkJNTMwMjU4MzgxRENCQkQxRDAwREE4OUMy
IC8qIE5ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuaCAqLywKKwkJCQk1MzAyNTgzOTFEQ0JCRDFEMDBE
QTg5QzIgLyogTmV0d29ya0RhdGFUYXNrUmVwbGF5LmNwcCAqLywKKwkJCQk1MzAyNTgzQTFEQ0JC
RDFEMDBEQTg5QzIgLyogTmV0d29ya0RhdGFUYXNrUmVwbGF5LmggKi8sCisJCQkpOworCQkJbmFt
ZSA9IGNhcHR1cmU7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1QzA1MkYy
MzFDNkQzQUExMDA3NkU5MTkgLyogY29jb2EgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKApAQCAtNzUyMCw2ICs3NTY3LDcgQEAKIAkJCQkzN0E2NEU1NzE4RjM4RjQ2
MDBFQjMwRjEgLyogX1dLRm9ybUlucHV0U2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzcz
RDEyMjMxOEE0NzMwMTAwNjZEOUNDIC8qIF9XS0ZyYW1lSGFuZGxlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzNzNEMTIyNzE4QTQ3M0Y2MDA2NkQ5Q0MgLyogX1dLRnJhbWVIYW5kbGVJbnRlcm5hbC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQ0Q3OEUxMTkxREI3RTVBRDAwMTRBMkRFIC8qIF9XS0Z1bGxz
Y3JlZW5EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNFNkE0RUUxQkM1REQzOTAwRjhB
MEU3IC8qIF9XS0hpdFRlc3RSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQTg4QjNCMUJD
NzEwRDkwMEFCQTVDMiAvKiBfV0tIaXRUZXN0UmVzdWx0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTM3QTY0RTU1MThGMzhFM0MwMEVCMzBGMSAvKiBfV0tJbnB1dERlbGVnYXRlLmggaW4g
SGVhZGVycyAqLywKQEAgLTc1NjAsNyArNzYwOCw2IEBACiAJCQkJMUFGQjRDNzIxQURGMTU1RDAw
QjMzMzM5IC8qIF9XS1dlYnNpdGVEYXRhU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNEE5
M0I3MUFFQjA4RUEwMDE1MEU5QyAvKiBfV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUExMTVEQzcyMTkxRDgyREEwMERBODA3MiAvKiBfV0tXZWJWaWV3UHJp
bnRGb3JtYXR0ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUNENzhFMTE5MURCN0U1QUQwMDE0QTJE
RSAvKiBfV0tGdWxsc2NyZWVuRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUExOUREM0Mw
MUQwN0QxNjgwMEFDODIzQiAvKiBfV0tXZWJWaWV3UHJpbnRGb3JtYXR0ZXJJbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTE4MkQ1QjUxQkU2QkQyNTAwODdBN0NDIC8qIEFjY2Vzc2liaWxp
dHlJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDc5MkQ4MTc2N0NDQTMwMDg4MUNCRSAvKiBB
Y3Rpdml0eUFzc2VydGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC03NTgwLDYgKzc2MjcsNyBAQAog
CQkJCTM3RTI1RDZFMThGREU1RDYwMDVEM0EwMCAvKiBBUElGb3JtQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQUMxMzM3MjE4NTY2QzdDMDBGM0VDMDUgLyogQVBJRnJhbWVIYW5kbGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTJERjlFRUU2MUE3ODFGQjQwMEI2Q0ZCRSAvKiBBUElGcmFtZUlu
Zm8uaCBpbiBIZWFkZXJzICovLAorCQkJCUNENzhFMTE3MURCN0RDMEEwMDE0QTJERSAvKiBBUElG
dWxsc2NyZWVuQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE3NEFBMzE0MkE0Q0I3MDAz
OTI1MEYgLyogQVBJR2VvbWV0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEQUJBNzc2MUE4MkI0
MjEwMEVGMEYxQSAvKiBBUElIaXN0b3J5Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0E4
OEI0NjFCQzg4MjkzMDBBQkE1QzIgLyogQVBJSGl0VGVzdFJlc3VsdC5oIGluIEhlYWRlcnMgKi8s
CkBAIC03NjkyLDYgKzc3NDAsNyBAQAogCQkJCUJDRTgxRDhEMTMxOUY3RUYwMDI0MTkxMCAvKiBG
b250SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUExNEY4RTIxRDc0QzgzNDAwNkNCRUM2IC8q
IEZyYW1lSW5mb0RhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTAwRDYxMTgzMTc5MjEwMDA4
N0RENyAvKiBGcmFtZUxvYWRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0Q3OEUxMTUxREI3
RDdFRDAwMTRBMkRFIC8qIEZ1bGxzY3JlZW5DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
NUJFMUIzMUQ1OTAyREQwMEREN0M2OCAvKiBHYW1lcGFkRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxNzc1M0YxMThCQUJGMDAwN0Q5RTlBIC8qIEdlbmVyaWNDYWxsYmFjay5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMwNkY0MkYxMkRCQjlCNjAwMkQ3OERFIC8qIEdlb2xvY2F0aW9uUGVybWlz
c2lvblJlcXVlc3RNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTc3NzAsOSArNzgxOSwxOCBA
QAogCQkJCTgzNEIyNTEyMUE4NDJDODcwMENGQjE1MCAvKiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDQzNkVDRjFBMEQwNDBCMDBFQUQyMDQgLyogTmV0d29y
a0NhY2hlU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODMxMDQyOEIxQkQ2QjY2RjAwQTcx
NUU0IC8qIE5ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmggaW4gSGVhZGVycyAqLywKKwkJ
CQk1MzAyNTgzQzFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJj
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMwMjU4M0UxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdv
cmtDYXB0dXJlRXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzMDI1ODNGMURDQkJEMjIwMERB
ODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzMDI1
ODQxMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUzMDI1ODQzMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlY29y
ZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzAyNTg0NTFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0
d29ya0NhcHR1cmVSZXBsYXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEzQTE2NEQxNjMwQTlC
RjAwNUQ3RDIyIC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MUREOUYyOTE2MzY3REEyMDAxNTc4RTkgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3NNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCQzlCOEUxQzY1MkNBMDAw
QThGRENGIC8qIE5ldHdvcmtEYXRhVGFzay5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNCQTQ3RDEx
REMyRUY1RTAwNERGNEFEIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuaCBpbiBIZWFkZXJzICovLAor
CQkJCTUzMjE1OTU2MURCQUU3MkQwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNTMwMjU4NDcxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtEYXRh
VGFza1JlcGxheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM5OTAyMDMxQkU5QTAyQjAwMEYzNjUz
IC8qIE5ldHdvcmtMb2FkLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0Q0NTRENzFCRTlEM0M0MDA2
QzkzQkQgLyogTmV0d29ya0xvYWRDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzOTE0OTY1
MUJFQTgzODUwMEQyRDk1MyAvKiBOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICov
LApAQCAtNzc4OCw2ICs3ODQ2LDcgQEAKIAkJCQlFMTUyNTUxQjE3MDExODE5MDAzRDdBREIgLyog
TmV0d29ya1Jlc291cmNlTG9hZGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMTQy
NkYwMUMyM0Y4MDkwMEQ0MTE4MyAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNUMyMENCQTAxQkIxRUNEODAwODk1QkIxIC8qIE5ldHdvcmtTZXNz
aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzIxNTk1NTFEQkFFNzI5MDA1NEFBM0MgLyogTmV0
d29ya1Nlc3Npb25Db2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFBMkVDNTYxNDg5OUMwOTAw
ODEwRDcxIC8qIE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkzMTMxMjYxRjE0OEZGODJDMDBCQTJBMzkgLyogTm90aWZpY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUEyRUM1MjE0ODk5ODE5MDA4MTBE
NzEgLyogTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuaCBpbiBIZWFk
ZXJzICovLApAQCAtNzg0MCw3ICs3ODk5LDYgQEAKIAkJCQkxQTBFQzZDMDEyNEJCRDlCMDA3RUY0
QTUgLyogUGx1Z2luUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTBFQzc1
RTEyNEJDN0IyMDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5LmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQTA0M0I1RTEyNEQ1RTlEMDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5TWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTUzQkE0N0QxMURDMkVGNUUwMDRERjRBRCAvKiBOZXR3
b3JrRGF0YVRhc2tCbG9iLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTA0M0RDMTEyNEZGODc1MDBG
RkJGQjUgLyogUGx1Z2luUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOEVGQTcxMTI1MkI4
NDEwMEY3MDY3RiAvKiBQbHVnaW5Qcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QTRBOUYzMzEyQjg0NEUyMDA4RkU5ODQgLyogUGx1Z2luUXVpcmtzLmggaW4gSGVhZGVycyAqLywK
QEAgLTc5NjAsNiArODAxOCw3IEBACiAJCQkJQkMwMzJENzcxMEY0Mzc4RDAwNThDMTVBIC8qIFdl
YkNvbnRleHRNZW51Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTI5MzVEODEyODhEMTk0
MDBBNEI2OTUgLyogV2ViQ29udGV4dE1lbnVJdGVtLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTBG
QkI5QjEyODhDOTVFMDBBRkZERjQgLyogV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQTFFQTAyNDAxREFDMzFEQjAwOTYwMjFGIC8qIFdlYkNvbnRleHRNZW51TGlz
dGVuZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBQ0JCODIxMjdBOEJBRDAwRDIwM0I5
IC8qIFdlYkNvbnRleHRNZW51UHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQUNCQkEwMTI3
QThGMkMwMEQyMDNCOSAvKiBXZWJDb250ZXh0TWVudVByb3h5TWFjLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0Y0REUyNTE2OEZBNDQ4MDBDOTRBRkMgLyogV2ViQ29udGV4dFN1cHBsZW1lbnQuaCBp
biBIZWFkZXJzICovLApAQCAtODA0Niw3ICs4MTA1LDYgQEAKIAkJCQlCQzdCNjI1MjEyQTQzQzk2
MDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3QjYy
MTUxMkE0MjE5QTAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cFByb3h5LmggaW4gSGVhZGVycyAqLywK
IAkJCQkyRDlFQTMwRjFBOTZDQkZGMDAyRDI4MDcgLyogV2ViUGFnZUluamVjdGVkQnVuZGxlQ2xp
ZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQlBMUVBMDIzODFEQUJGRjdFMDA5NjAyMUYgLyogV0tD
b250ZXh0TWVudUxpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMENFNzJBMTEyNDdFNzFE
MDBCQzBFQzQgLyogV2ViUGFnZU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDVDOUQw
NjE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMDMyREQxMTBGNDM4OUYwMDU4QzE1QSAvKiBXZWJQYWdlUHJveHkuaCBpbiBIZWFkZXJzICov
LApAQCAtODE3MSw3ICs4MjI5LDYgQEAKIAkJCQlCQzdCNjMzRDEyQTQ1RDEyMDBEMTc0QTQgLyog
V0tCdW5kbGVQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjQ3NEQ4MTg0RDQzRkQw
MDUxQjYyMiAvKiBXS0J1bmRsZVBhZ2VMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUVEODJBN0YyMTI4QzZGQUYwMDQ0NzdCMyAvKiBXS0J1bmRsZVBhZ2VPdmVybGF5LmggaW4gSGVh
ZGVycyAqLywKLQkJCQk1MzIxNTk1NjFEQkFFNzJEMDA1NEFBM0MgLyogTmV0d29ya0RhdGFUYXNr
Q29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjQ3NEVBMTg0RDQ1MTMwMDUxQjYyMiAvKiBX
S0J1bmRsZVBhZ2VQb2xpY3lDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMUI0MTk4MTFE
NDFENTcwMDExRThERCAvKiBXS0J1bmRsZVBhZ2VQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQUI0NzREQTE4NEQ0NDI1MDA1MUI2MjIgLyogV0tCdW5kbGVQYWdlUmVzb3VyY2VMb2FkQ2xp
ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTgxOTUsNiArODI1Miw3IEBACiAJCQkJMUE0NDVCOUYx
ODRENUZCNTAwNEIzNDE0IC8qIFdLQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MUE1NTVGNjEyOEM2QzQ3MDA5QUJDRUMgLyogV0tDb250ZXh0TWVudUl0
ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQTU1NjAxMTI4QzZEOTIwMDlBQkNFQyAvKiBXS0Nv
bnRleHRNZW51SXRlbVR5cGVzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMUVBMDIzODFEQUJGRjdF
MDA5NjAyMUYgLyogV0tDb250ZXh0TWVudUxpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0M5MzhFMTExODBERTQ0MDA4NUU1RkUgLyogV0tDb250ZXh0UHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOUZCNUYzOTUxNjlFNkE4MDAwMkMyNUJGIC8qIFdLQ29udGV4dFByaXZhdGVNYWMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTMzMDkzNDVCMTMxNUI5OTgwMDk3QTdCQyAvKiBXS0Nvb2tp
ZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLApAQCAtODI0MSw3ICs4Mjk5LDYgQEAKIAkJCQlCQzU0
Q0MxMjEyRDY3NEVFMDA1QzY3QjAgLyogV0tHZW9sb2NhdGlvbk1hbmFnZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMDZGNDRFMTJEQkRGM0YwMDJENzhERSAvKiBXS0dlb2xvY2F0aW9uUGVybWlz
c2lvblJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMEU2MTk4MTJENkNEMTIwMDEyQTcy
QSAvKiBXS0dlb2xvY2F0aW9uUG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTUzMjE1OTU1
MURCQUU3MjkwMDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkNCNEU0RjE4QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9T
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0M4QjM3NDEyNUZCNjkwMDBERTQ2QTQgLyogV0tHZW9t
ZXRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0MjJGOEIxOEIyOUI1NDAwRDhDRDk2IC8qIFdL
SGlzdG9yeURlbGVnYXRlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04MzAwLDcgKzgzNTcs
NiBAQAogCQkJCTdDRDVFQkI5MTc0NkExNUIwMDBDMUM0NSAvKiBXS09iakNUeXBlV3JhcHBlclJl
Zi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc4RTFBNDAxODFFREEwMTAwMzEwMDdBIC8qIFdLT2Jq
ZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUNDNTBGMjFDQkMzODFEMDAzQzdEMDMgLyogV0tP
cGVuUGFuZWxQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMUVBMDI0MDFEQUMzMURC
MDA5NjAyMUYgLyogV2ViQ29udGV4dE1lbnVMaXN0ZW5lclByb3h5LmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQTY3Q0QyRTFDQkM1MTNGMDBCRkUzRUEgLyogV0tPcGVuUGFuZWxQYXJhbWV0ZXJzSW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDODU3RkU2MTJCODQzRDgwMEVERUIyRSAvKiBX
S09wZW5QYW5lbFBhcmFtZXRlcnNSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMURGRThGMTJC
MzFDQTgwMDVERjczMCAvKiBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmggaW4gSGVhZGVycyAq
LywKQEAgLTgzMTAsNyArODM2Niw2IEBACiAJCQkJODM3MkRCMjUxQTY3NEM4RjAwQzY5N0M1IC8q
IFdLUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUI4
QTFGNDE4NDAwQjhGMDBFOUFFNjkgLyogV0tQYWdlRmluZENsaWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUFCOEExRjYxODQwMEI5RDAwRTlBRTY5IC8qIFdLUGFnZUZpbmRNYXRjaGVzQ2xpZW50
LmggaW4gSGVhZGVycyAqLywKLQkJCQlDRDc4RTExNTFEQjdEN0VEMDAxNEEyREUgLyogRnVsbHNj
cmVlbkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCOEExRjAxODQwMEIwMDAwRTlBRTY5
IC8qIFdLUGFnZUZvcm1DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDN0I2MzM3MTJBNDVB
QkEwMEQxNzRBNCAvKiBXS1BhZ2VHcm91cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5RUEzMEQx
QTk2Q0I1OTAwMkQyODA3IC8qIFdLUGFnZUluamVjdGVkQnVuZGxlQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywKQEAgLTgzNDIsNyArODM5Nyw2IEBACiAJCQkJOTM5MTA3NEYxQkY2QkM2NTAwOEMxN0FE
IC8qIFdLUHJldmlld0VsZW1lbnRJbmZvSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
Q0I0RTY2MThCQkUzRDkwMDBGQ0ZDOSAvKiBXS1ByaW50aW5nVmlldy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkNCQUFDRUIxNDUyMjVFMzAwNTNGODJGIC8qIFdLUHJvY2Vzc0dyb3VwLmggaW4gSGVh
ZGVycyAqLywKLQkJCQlDRDc4RTExNzFEQjdEQzBBMDAxNEEyREUgLyogQVBJRnVsbHNjcmVlbkNs
aWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCQUFDRUQxNDUyMjVFMzAwNTNGODJGIC8qIFdL
UHJvY2Vzc0dyb3VwUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUExNTg0MUExODkwNDRG
NTAwMTc2MTZDIC8qIFdLUHJvY2Vzc1Bvb2wuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBM0NDMTY5
MTg5MDdFQjAwMDFFNkVEOCAvKiBXS1Byb2Nlc3NQb29sSW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LApAQCAtOTA2Nyw2ICs5MTIxLDcgQEAKIAkJCQkxQUMxMzM3MTE4NTY2QzdDMDBGM0VDMDUgLyog
QVBJRnJhbWVIYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkRGOUVFRTUxQTc4MUZCNDAw
QjZDRkJFIC8qIEFQSUZyYW1lSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUMxMzM3NDE4
NTdDMjFFMDBGM0VDMDUgLyogQVBJR2VvbWV0cnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTMw
MjU4NDIxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVjb3JkZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTNBODhCNDcxQkM4ODI5NzAwQUJBNUMyIC8qIEFQSUhpdFRlc3RSZXN1
bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NEM0E0ODIxQTVEMDJGQTAwOTYyM0I4IC8qIEFQ
SU5hdmlnYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNGNjlGQTMxMTc2RDAxNDAwNDcx
QTUyIC8qIEFQSU5hdmlnYXRpb25EYXRhLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTIzMCw2ICs5
Mjg1LDcgQEAKIAkJCQkxQURDQjg2QTE4OTgzMUIzMDAyMkVFNUEgLyogTmF2aWdhdGlvbkFjdGlv
bkRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCQzNERjUxODk5RTQzNzAwNEYwNjI2IC8q
IE5hdmlnYXRpb25TdGF0ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBNkZCQTJCMTFFNjg2Mjcw
MERCMTM3MSAvKiBOZXRzY2FwZUJyb3dzZXJGdW5jcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1
MzAyNTgzRDFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVFdmVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxQTZGQkQyOTExRTY5QkMyMDBEQjEzNzEgLyogTmV0c2NhcGVQbHVnaW4u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFNUI3RkIxMUU3QUVEMjAwQkE2NzY3IC8qIE5ldHNj
YXBlUGx1Z2luTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE0QTlDNTUxMkI4MTZDRjAwOEZF
OTg0IC8qIE5ldHNjYXBlUGx1Z2luTW9kdWxlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTUyMiw2
ICs5NTc4LDcgQEAKIAkJCQk1MTFCMjRBNjEzMkUwOTU3MDAwNjVBMEMgLyogV2ViSWNvbkRhdGFi
YXNlUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFEMDJGNkIxMzJFQzczNzAwQkVBQTk2
IC8qIFdlYkljb25EYXRhYmFzZVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUxMDUyMzZGMUM3MzlENDIwMDc5OTNDQiAvKiBXZWJJREJDb25uZWN0aW9uVG9DbGll
bnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTMwMjU4NDQxRENCQkQyMjAwREE4OUMyIC8qIE5l
dHdvcmtDYXB0dXJlUmVwbGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEwNTIzNzkxQzcz
REE3NzAwNzk5M0NCIC8qIFdlYklEQkNvbm5lY3Rpb25Ub0NsaWVudE1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTQxMjk5NTFDNjQyOEMyMDA1OUU3MTQgLyogV2ViSURC
Q29ubmVjdGlvblRvU2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMDUyMzc1MUM3M0Qz
OEYwMDc5OTNDQiAvKiBXZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXJNZXNzYWdlUmVjZWl2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC05NjQ5LDYgKzk3MDYsNyBAQAogCQkJCUJDQTBFRjgwMTIzMzFF
NzgwMDdEM0NGQiAvKiBXZWJVbmRvU3RlcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUFGMDhB
RDE5MjY5MzY3MDBCNjM5MEMgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDMDY1RjJCMUM4Q0Q5NUYwMEMyRDk1MCAvKiBXZWJVc2VyQ29udGVudENv
bnRyb2xsZXJEYXRhVHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTMwMjU4NDYxRENCQkQy
MjAwREE4OUMyIC8qIE5ldHdvcmtEYXRhVGFza1JlcGxheS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxQUFGMDhCNzE5MjY5RTZEMDBCNjM5MEMgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyTWVz
c2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQUYwOEExMTkyNjgxRDEwMEI2
MzkwQyAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3QzM2MUQ3ODE5MjgwM0JEMDAzNkE1OUQgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05NjY3LDYgKzk3MjUs
NyBAQAogCQkJCTBGQ0I0RTQ5MThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0FjdGlvblNoZWV0Lm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZDQjRFNEIxOEJCRTA0NDAwMEZDRkM5IC8qIFdLQWN0aW9uU2hl
ZXRBc3Npc3RhbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQlDNUZBMUVENDE4RTEwNjIyMDBCM0Y0
MDIgLyogV0tBaXJQbGF5Um91dGVQaWNrZXIubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MzAyNTg0
MDFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxMkUzNEU0MTMwQjREMDUwMEFCRDE5QSAvKiBXS0FwcGxpY2F0aW9uQ2FjaGVN
YW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNDA3NUYzMTI0RkYwMjcwMDY4RjIwQSAv
KiBXS0FycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMkY1OEY1MTJBODhBNTQwMDYyOTUz
MCAvKiBXS0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTg2
MSw2ICs5OTIwLDcgQEAKIAkJCQkxQUQ2MEY1RDE4RTIwRjRDMDAyMEMwMzQgLyogV0tXaW5kb3dG
ZWF0dXJlcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBN0MwREY2MUI3RDFGMTAwMEE5Qjg0OCAv
KiBXS1dpbmRvd0ZlYXR1cmVzUmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQkVDREU3MTZC
NjQxNjgwMDA0N0ExQSAvKiBYUENTZXJ2aWNlRW50cnlQb2ludC5tbSBpbiBTb3VyY2VzICovLAor
CQkJCTUzMDI1ODNCMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUNhY2hlZFJlc291
cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvY29uZmln
LmggYi9Tb3VyY2UvV2ViS2l0Mi9jb25maWcuaAppbmRleCA4MDM1OTI5OGI5ZGFmZmU4Y2QwYTNj
NTc4OGZkZjkyNjAzMDJlYTkyLi43NjY5M2RmM2IxMzMwNjZhNWM3Y2E1MTA5ODZkNDgxN2I3ZThk
ZjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9jb25maWcuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9jb25maWcuaApAQCAtMTEwLDYgKzExMCwxMiBAQAogI2VuZGlmCiAjZW5kaWYKIAorI2lm
bmRlZiBFTkFCTEVfTkVUV09SS19DQVBUVVJFCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikgJiYg
UExBVEZPUk0oQ09DT0EpCisjZGVmaW5lIEVOQUJMRV9ORVRXT1JLX0NBUFRVUkUgMQorI2VuZGlm
CisjZW5kaWYKKwogI2lmbmRlZiBFTkFCTEVfTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZB
TElEQVRJT04KICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkgJiYgKFBMQVRGT1JNKENPQ09BKSB8
fCBQTEFURk9STShHVEspKQogI2RlZmluZSBFTkFCTEVfTkVUV09SS19DQUNIRV9TUEVDVUxBVElW
RV9SRVZBTElEQVRJT04gMQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>294962</attachid>
            <date>2016-11-16 12:32:55 -0800</date>
            <delta_ts>2016-11-18 16:01:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164527-20161116123251.patch</filename>
            <type>text/plain</type>
            <size>138283</size>
            <attacher name="Keith Rollin">krollin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4NzI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjgwYzkyZjFiZjQ5Y2Jl
NTdkNWY3YTA5ZWM2NWY0MTQ1N2I3NTNmMi4uNjNmOTM0OTc4MWQ2M2MyZDUyZWE4MDZiNzYzZjNj
ODBiNDYyYmUwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE2LTExLTE2ICBLZWl0
aCBSb2xsaW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KKworICAgICAgICBOZXR3b3JrIGV2ZW50IHJl
Y29yZC9yZXBsYXkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NDUyNworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjkxNjgxNTc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhwb3J0IHBhcnNlVVJMRW5j
b2RlZEZvcm0uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0tIG5vIGZ1bmN0aW9uYWxpdHkgYWRk
ZWQsIGNoYW5nZWQsIG9yIHJlbW92ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9VUkxQYXJzZXIu
aDoKKwogMjAxNi0xMS0xNCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29t
PgogCiAgICAgICAgIFtXZWJHTDJdIFRlYWNoIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UgYWJv
dXQgbmV3IHRleHR1cmUgaW50ZXJuYWwgZm9ybWF0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDVmYjI2MmRmZmQ0
MDFkOTkwZWI2MjYzYTM3Mjg5MzM0ZGRlOGE3NDMuLmZhOTIwOGE0MDVkZDYyYzc5MTljMzI4ZGMz
NzA1NDNkZTEzOTVkYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMzEgQEAKKzIwMTYtMTEtMTYg
IEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5AYXBwbGUuY29tPgorCisgICAgICAgIE5ldHdvcmsgZXZl
bnQgcmVjb3JkL3JlcGxheQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY0NTI3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yOTE2ODE1Nz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYXB0dXJlLyogZm9yIHJlY29yZGluZyB0aGUgbmV0d29yayBldmVudHMK
KyAgICAgICAgdGhhdCBvY2N1ciB3aGVuIGxvYWRpbmcgYSBwYWdlIGFuZCBmb3IgcmVwbGF5aW5n
IHRoZW0gbGF0ZXIuIFVwZGF0ZQorICAgICAgICBOZXR3b3JrTG9hZCB0byBpbnZva2UgY2FwdHVy
ZSBmYWNpbGl0aWVzLiBBZGQgcHJlZmVyZW5jZXMgZm9yIGVuYWJsaW5nCisgICAgICAgIHJlY29y
ZCBvciByZXBsYXkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2Fk
OjpOZXR3b3JrTG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkOjpzZXREZWZlcnNM
b2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6OmNvbnRpbnVlV2lsbFNlbmRS
ZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6OnNoYXJlZFdpbGxTZW5kUmVk
aXJlY3RlZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6bm90aWZ5RGlk
UmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6OmRpZFJlY2Vp
dmVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6OmRpZENvbXBsZXRlV2l0aEVy
cm9yKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5oOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzOjp0ZXJtaW5hdGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUNhY2hlZFJlc291cmNlLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpDYWNoZWRSZXNvdXJj
ZTo6Q2FjaGVkUmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6Q2Fj
aGVkUmVzb3VyY2U6On5DYWNoZWRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YXB0dXJlOjpDYWNoZWRSZXNvdXJjZTo6dXJsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
cHR1cmU6OkNhY2hlZFJlc291cmNlOjpiYXNlVVJMKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhcHR1cmU6OkNhY2hlZFJlc291cmNlOjpxdWVyeVBhcmFtZXRlcnMpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FwdHVyZTo6Q2FjaGVkUmVzb3VyY2U6OmV2ZW50U3RyZWFtKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkNhY2hlZFJlc291cmNlOjpFdmVudFN0cmVhbTo6
RXZlbnRTdHJlYW0pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6Q2FjaGVkUmVz
b3VyY2U6OkV2ZW50U3RyZWFtOjpuZXh0RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FwdHVyZTo6Q2FjaGVkUmVzb3VyY2U6OkV2ZW50U3RyZWFtOjptYWtlRGVjb2Rlcik6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUNhY2hlZFJlc291cmNl
Lmg6IEFkZGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1
cmVFdmVudC5jcHA6IEFkZGVkLgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPENhcHR1cmVU
aW1lVHlwZT46OmVuY29kZSk6CisgICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8Q2FwdHVyZVRp
bWVUeXBlPjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OndyYXAp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVxdWVzdFNlbnRFdmVudDo6ZW5j
b2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlcXVlc3RTZW50RXZlbnQ6
OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZXNwb25zZVJlY2Vp
dmVkRXZlbnQ6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZXNw
b25zZVJlY2VpdmVkRXZlbnQ6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0
dXJlOjpSZWRpcmVjdFJlY2VpdmVkRXZlbnQ6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYXB0dXJlOjpSZWRpcmVjdFJlY2VpdmVkRXZlbnQ6OmRlY29kZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZWRpcmVjdFNlbnRFdmVudDo6ZW5jb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlZGlyZWN0U2VudEV2ZW50OjpkZWNvZGUpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6RGF0YVJlY2VpdmVkRXZlbnQ6OmVuY29k
ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpEYXRhUmVjZWl2ZWRFdmVudDo6
ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkZpbmlzaGVkRXZlbnQ6
OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpGaW5pc2hlZEV2ZW50
OjpkZWNvZGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1
cmVFdmVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlRpbWVk
RXZlbnQ6OlRpbWVkRXZlbnQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0
d29ya0NhcHR1cmVMb2dnaW5nLmg6IEFkZGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nh
cHR1cmUvTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpzaW5nbGV0b24pOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjp0ZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FwdHVyZTo6TWFuYWdlcjo6ZmluZE1hdGNoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhcHR1cmU6Ok1hbmFnZXI6OmZpbmRFeGFjdE1hdGNoKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhcHR1cmU6Ok1hbmFnZXI6OmZpbmRCZXN0RnV6enlNYXRjaCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpmdXp6eU1hdGNoVVJMcyk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpsb2FkQ2FjaGVkUmVzb3VyY2VzKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OnJlcG9ydExvYWRQYXRoKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OnJlcG9ydFJlY29yZFBh
dGgpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6cmVwb3J0UmVw
bGF5UGF0aCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpyZXF1
ZXN0VG9QYXRoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OnN0
cmluZ1RvSGFzaCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpo
YXNoVG9QYXRoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6Omxv
Z1JlY29yZGVkUmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFu
YWdlcjo6bG9nTG9hZGVkUmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVy
ZTo6TWFuYWdlcjo6bG9nUGxheWVkQmFja1Jlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhcHR1cmU6Ok1hbmFnZXI6OmVuc3VyZUZpbGVIYW5kbGUpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6b3BlbkNhY2hlRmlsZSk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpyZWFkRmlsZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpnZXRMaW5lKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhcHR1cmU6Ok1hbmFnZXI6OmdldFdvcmQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FwdHVyZTo6TWFuYWdlcjo6cHJpbnRUb0ZpbGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FwdHVyZTo6TWFuYWdlcjo6YmFzZVVSTEFzU3RyaW5nKToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlTWFuYWdlci5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OmlzUmVjb3JkaW5nKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OmlzUmVwbGF5aW5nKToKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVjb3JkZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlY29yZGVyOjpyZWNvcmRSZXF1ZXN0
U2VudCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZWNvcmRlcjo6cmVjb3Jk
UmVzcG9uc2VSZWNlaXZlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZWNv
cmRlcjo6cmVjb3JkUmVkaXJlY3RSZWNlaXZlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YXB0dXJlOjpSZWNvcmRlcjo6cmVjb3JkUmVkaXJlY3RTZW50KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhcHR1cmU6OlJlY29yZGVyOjpyZWNvcmREYXRhUmVjZWl2ZWQpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVjb3JkZXI6OnJlY29yZEZpbmlzaCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZWNvcmRlcjo6d3JpdGVFdmVudHMpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVjb3JkZXI6Om9wZW5GaWxlRm9yUmVxdWVzdCk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlY29yZGVy
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVjb3JkZXI6OnJl
Y29yZEV2ZW50KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0
dXJlUmVwbGF5ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6
OlJlcGxheWVyOjpSZXBsYXllcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpS
ZXBsYXllcjo6cmVwbGF5UmVzb3VyY2UpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1
cmUvTmV0d29ya0NhcHR1cmVSZXBsYXllci5oOiBBZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlVHlwZXMuaDogQWRkZWQuCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxheTo6TmV0
d29ya0RhdGFUYXNrUmVwbGF5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5l
dHdvcmtEYXRhVGFza1JlcGxheTo6fk5ldHdvcmtEYXRhVGFza1JlcGxheSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnJlc3VtZSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnN1
c3BlbmQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNr
UmVwbGF5OjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29y
a0RhdGFUYXNrUmVwbGF5Ojpjb21wbGV0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0
dXJlOjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmludmFsaWRhdGVBbmRDYW5jZWwpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5OjplbnF1ZXVl
Q2FjaGVkRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5l
dHdvcmtEYXRhVGFza1JlcGxheTo6cmVwbGF5UmVxdWVzdFNlbnQpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5OjpyZXBsYXlSZXNwb25zZVJl
Y2VpdmVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFz
a1JlcGxheTo6cmVwbGF5UmVkaXJlY3RSZWNlaXZlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYXB0dXJlOjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnJlcGxheVJlZGlyZWN0U2VudCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnJl
cGxheURhdGFSZWNlaXZlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpOZXR3
b3JrRGF0YVRhc2tSZXBsYXk6OnJlcGxheUZpbmlzaGVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxheTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxheTo6
ZGlkRmluaXNoKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtEYXRh
VGFza1JlcGxheS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5l
dHdvcmtEYXRhVGFza1JlcGxheTo6Y3JlYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2Ev
V2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6
OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKiBXZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY29uZmlnLmg6CisKIDIwMTYtMTEt
MTQgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY11b
aU9TXVtXSzJdIFRpZ2h0ZW4gcGVybWlzc2lvbnMgdG8gY2hhbmdlIENhcHNMb2NrIGRlbGF5CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5oCmluZGV4IDc1MzgxYjM2OTgxMmUxNzlkZDBlOGUy
NzczYzA5ODU1YzUyMjAxZjIuLjA4YTlmNGFiOTk3Y2Q1ZTlkNDI0YWM1ZGE1MTQ5ZjU4NDg1NWJh
Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5oCkBAIC00NSw3ICs0NSw3IEBAIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRFbmFibGVkKGJvb2wpOwog
ICAgIAogICAgIHR5cGVkZWYgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IFVSTEVu
Y29kZWRGb3JtOwotICAgIHN0YXRpYyBVUkxFbmNvZGVkRm9ybSBwYXJzZVVSTEVuY29kZWRGb3Jt
KFN0cmluZ1ZpZXcpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBVUkxFbmNvZGVkRm9ybSBw
YXJzZVVSTEVuY29kZWRGb3JtKFN0cmluZ1ZpZXcpOwogICAgIHN0YXRpYyBTdHJpbmcgc2VyaWFs
aXplKGNvbnN0IFVSTEVuY29kZWRGb3JtJik7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0
CmluZGV4IDg3MjY2OGUwYjFlYWQyNGZjMTIwZmEwOTcyY2NkYzZkMzJkYjEyNjkuLjUwMWQ3YjYy
OTg2YzMwNDdkNWFmNjNjN2VkMWRmOTUwYmRhY2Y0N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBA
IC0yMDQsNiArMjA0LDEzIEBAIHNldChOZXR3b3JrUHJvY2Vzc19DT01NT05fU09VUkNFUwogICAg
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAog
ICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwCiAgICAg
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKKworICAgIE5ldHdv
cmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5jcHAKKyAgICBO
ZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuY3BwCisgICAgTmV0d29y
a1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZU1hbmFnZXIuY3BwCisgICAgTmV0d29ya1By
b2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmNwcAorICAgIE5ldHdvcmtQcm9j
ZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXBsYXllci5jcHAKKyAgICBOZXR3b3JrUHJvY2Vz
cy9jYXB0dXJlL05ldHdvcmtEYXRhVGFza1JlcGxheS5jcHAKICkKIAogc2V0KFdlYktpdDJfU09V
UkNFUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xv
YWQuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCmlu
ZGV4IDUxN2Y4NDVhYWJlNTIzZjJlZmE5NjE4NGVlZjcyNTNhZTJjYTRkOWYuLjE0MzdmYjlhODcz
MjM3ODU1ZTYzZWNiOWVjMmMxNjkzY2I5NDg1YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKQEAgLTQzLDYgKzQzLDEyIEBACiAjaW5jbHVkZSAi
TmV0d29ya0RhdGFUYXNrQ29jb2EuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQ
VFVSRSkKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJOZXR3
b3JrQ2FwdHVyZVJlY29yZGVyLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVSZXBsYXllci5o
IgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKQEAgLTY3LDkgKzczLDMzIEBAIE5ldHdvcmtMb2FkOjpOZXR3b3JrTG9hZChOZXR3b3JrTG9h
ZENsaWVudCYgY2xpZW50LCBOZXR3b3JrTG9hZFBhcmFtZXRlcnMmJiBwYXJhCiAgICAgLCBtX3Bh
cmFtZXRlcnMoV1RGTW92ZShwYXJhbWV0ZXJzKSkKICAgICAsIG1fY3VycmVudFJlcXVlc3QobV9w
YXJhbWV0ZXJzLnJlcXVlc3QpCiB7CisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyAgICBp
ZiAobV9wYXJhbWV0ZXJzLnJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKSB7
CisgICAgICAgIGlmIChOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6c2luZ2xldG9uKCkuaXNSZWNv
cmRpbmcoKSkgeworICAgICAgICAgICAgbV9yZWNvcmRlciA9IHN0ZDo6bWFrZV91bmlxdWU8TmV0
d29ya0NhcHR1cmU6OlJlY29yZGVyPigpOworICAgICAgICB9IGVsc2UgaWYgKE5ldHdvcmtDYXB0
dXJlOjpNYW5hZ2VyOjpzaW5nbGV0b24oKS5pc1JlcGxheWluZygpKSB7CisgICAgICAgICAgICAv
LyBUT0RPOiBUaGUgcGFyYWxsZWwgb2YgY3JlYXRpbmcgYW4gbV9yZWNvcmRlciAoYXMgYWJvdmUp
IGlzIHRvCisgICAgICAgICAgICAvLyBjcmVhdGUgYW4gbV9yZXBsYXllciAoYXMgYmVsb3cpLiBI
b3dldmVyLCB3ZSBkb24ndCByZWFsbHkgdXNlCisgICAgICAgICAgICAvLyB0aGUgcmVwbGF5ZXIg
ZXhjZXB0IHRvIGNyZWF0ZSB0aGUgTmV0d29ya0RhdGFUYXNrUmVwbGF5ZXIKKyAgICAgICAgICAg
IC8vIGluc3RhbmNlLiBJZiB0aGF0J3MgYWxsIHdlIG5lZWQsIG1heWJlIHdlIHNob3VsZCByZW1v
dmUgdGhlCisgICAgICAgICAgICAvLyByZXBsYXllciBhbmQgcHV0IHRoZSBjcmVhdGlvbiBvZiB0
aGUgdGFzayBpbgorICAgICAgICAgICAgLy8gTmV0d29ya0RhdGFUYXNrOjpjcmVhdGUuCisgICAg
ICAgICAgICBtX3JlcGxheWVyID0gc3RkOjptYWtlX3VuaXF1ZTxOZXR3b3JrQ2FwdHVyZTo6UmVw
bGF5ZXI+KCk7CisgICAgICAgICAgICBtX3Rhc2sgPSBtX3JlcGxheWVyLT5yZXBsYXlSZXNvdXJj
ZShuZXR3b3JrU2Vzc2lvbiwgKnRoaXMsIG1fcGFyYW1ldGVycyk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoIW1fdGFzaykKKyNlbmRpZgorCiAgICAgbV90YXNrID0gTmV0d29ya0RhdGFU
YXNrOjpjcmVhdGUobmV0d29ya1Nlc3Npb24sICp0aGlzLCBtX3BhcmFtZXRlcnMpOwotICAgIGlm
ICghbV9wYXJhbWV0ZXJzLmRlZmVyc0xvYWRpbmcpCisgICAgaWYgKCFtX3BhcmFtZXRlcnMuZGVm
ZXJzTG9hZGluZykgewogICAgICAgICBtX3Rhc2stPnJlc3VtZSgpOworI2lmIEVOQUJMRShORVRX
T1JLX0NBUFRVUkUpCisgICAgICAgIGlmIChtX3JlY29yZGVyKQorICAgICAgICAgICAgbV9yZWNv
cmRlci0+cmVjb3JkUmVxdWVzdFNlbnQobV9wYXJhbWV0ZXJzLnJlcXVlc3QpOworI2VuZGlmCisg
ICAgfQogfQogCiAjZWxzZQpAQCAtMTEzLDggKzE0MywxMyBAQCB2b2lkIE5ldHdvcmtMb2FkOjpz
ZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQogICAgIGlmIChtX3Rhc2spIHsKICAgICAgICAg
aWYgKGRlZmVycykKICAgICAgICAgICAgIG1fdGFzay0+c3VzcGVuZCgpOwotICAgICAgICBlbHNl
CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbV90YXNrLT5yZXN1bWUoKTsKKyNpZiBFTkFC
TEUoTkVUV09SS19DQVBUVVJFKQorICAgICAgICAgICAgaWYgKG1fcmVjb3JkZXIpCisgICAgICAg
ICAgICAgICAgbV9yZWNvcmRlci0+cmVjb3JkUmVxdWVzdFNlbnQobV9wYXJhbWV0ZXJzLnJlcXVl
c3QpOworI2VuZGlmCisgICAgICAgIH0KICAgICB9CiAjZWxzZQogICAgIGlmIChtX2hhbmRsZSkK
QEAgLTE0Miw2ICsxNzcsMTEgQEAgdm9pZCBOZXR3b3JrTG9hZDo6Y29udGludWVXaWxsU2VuZFJl
cXVlc3QoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgbmV3UmVxdWVzdCkKICAgICBtX2N1cnJl
bnRSZXF1ZXN0LnVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRQcm9wZXJ0aWVzKG5ld1Jl
cXVlc3QpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorICAgIGlmICht
X3JlY29yZGVyKQorICAgICAgICBtX3JlY29yZGVyLT5yZWNvcmRSZWRpcmVjdFNlbnQobmV3UmVx
dWVzdCk7CisjZW5kaWYKKwogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgYXV0byByZWRp
cmVjdENvbXBsZXRpb25IYW5kbGVyID0gc3RkOjpleGNoYW5nZShtX3JlZGlyZWN0Q29tcGxldGlv
bkhhbmRsZXIsIG51bGxwdHIpOwogICAgIEFTU0VSVChyZWRpcmVjdENvbXBsZXRpb25IYW5kbGVy
KTsKQEAgLTE5NCw2ICsyMzQsMTEgQEAgdm9pZCBOZXR3b3JrTG9hZDo6c2hhcmVkV2lsbFNlbmRS
ZWRpcmVjdGVkUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBSZXMKICAgICBBU1NF
UlQoIXJlZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCkpOwogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CiAKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorICAgIGlmIChtX3JlY29yZGVy
KQorICAgICAgICBtX3JlY29yZGVyLT5yZWNvcmRSZWRpcmVjdFJlY2VpdmVkKHJlcXVlc3QsIHJl
ZGlyZWN0UmVzcG9uc2UpOworI2VuZGlmCisKICAgICBhdXRvIG9sZFJlcXVlc3QgPSBXVEZNb3Zl
KG1fY3VycmVudFJlcXVlc3QpOwogICAgIG1fY3VycmVudFJlcXVlc3QgPSByZXF1ZXN0OwogICAg
IG1fY2xpZW50LmdldCgpLndpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoV1RGTW92ZShvbGRSZXF1
ZXN0KSwgV1RGTW92ZShyZXF1ZXN0KSwgV1RGTW92ZShyZWRpcmVjdFJlc3BvbnNlKSk7CkBAIC0z
MjQsNiArMzY5LDExIEBAIHZvaWQgTmV0d29ya0xvYWQ6Om5vdGlmeURpZFJlY2VpdmVSZXNwb25z
ZShSZXNvdXJjZVJlc3BvbnNlJiYgcmVzcG9uc2UsIFJlc3BvbnNlCiB7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKIAorI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisgICAgaWYgKG1f
cmVjb3JkZXIpCisgICAgICAgIG1fcmVjb3JkZXItPnJlY29yZFJlc3BvbnNlUmVjZWl2ZWQocmVz
cG9uc2UpOworI2VuZGlmCisKICAgICBpZiAoc2hhcmVkRGlkUmVjZWl2ZVJlc3BvbnNlKFdURk1v
dmUocmVzcG9uc2UpKSA9PSBOZXR3b3JrTG9hZENsaWVudDo6U2hvdWxkQ29udGludWVEaWRSZWNl
aXZlUmVzcG9uc2U6Ok5vKSB7CiAgICAgICAgIG1fcmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpOwogICAgICAgICByZXR1cm47CkBAIC0zMzUsNiAr
Mzg1LDExIEBAIHZvaWQgTmV0d29ya0xvYWQ6OmRpZFJlY2VpdmVEYXRhKFJlZjxTaGFyZWRCdWZm
ZXI+JiYgYnVmZmVyKQogewogICAgIEFTU0VSVCghbV90aHJvdHRsZSk7CiAKKyNpZiBFTkFCTEUo
TkVUV09SS19DQVBUVVJFKQorICAgIGlmIChtX3JlY29yZGVyKQorICAgICAgICBtX3JlY29yZGVy
LT5yZWNvcmREYXRhUmVjZWl2ZWQoYnVmZmVyLmdldCgpKTsKKyNlbmRpZgorCiAgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGJlIHRoZSBlbmNvZGVkIGRhdGEgbGVuZ3RoLCBub3QgdGhlIGRlY29k
ZWQgZGF0YSBsZW5ndGguCiAgICAgYXV0byBzaXplID0gYnVmZmVyLT5zaXplKCk7CiAgICAgbV9j
bGllbnQuZ2V0KCkuZGlkUmVjZWl2ZUJ1ZmZlcihXVEZNb3ZlKGJ1ZmZlciksIHNpemUpOwpAQCAt
MzQ0LDYgKzM5OSwxMSBAQCB2b2lkIE5ldHdvcmtMb2FkOjpkaWRDb21wbGV0ZVdpdGhFcnJvcihj
b25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKICAgICBBU1NFUlQoIW1fdGhyb3R0bGUpOwog
CisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyAgICBpZiAobV9yZWNvcmRlcikKKyAgICAg
ICAgbV9yZWNvcmRlci0+cmVjb3JkRmluaXNoKGVycm9yKTsKKyNlbmRpZgorCiAgICAgaWYgKGVy
cm9yLmlzTnVsbCgpKQogICAgICAgICBtX2NsaWVudC5nZXQoKS5kaWRGaW5pc2hMb2FkaW5nKFdU
Rjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOwogICAgIGVsc2UKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5oCmluZGV4IDdkMTRjOGMyYWE2MzgzNmE3
MDFkZDE0YjJjNzg3M2Q1OGYzMmRlMDMuLjViOTA5NGQ5M2VkYmMyYzk2NTcwZmNlNmU4NTliZTYy
NDgxYTFkYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtMb2FkLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQu
aApAQCAtMzgsNiArMzgsMTEgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlLmg+CiAjZW5kaWYKIAorI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisjaW5jbHVk
ZSAiTmV0d29ya0NhcHR1cmVSZWNvcmRlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlUmVw
bGF5ZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTmV0d29ya0xv
YWQgZmluYWwgOgpAQCAtNDgsNiArNTMsNyBAQCBjbGFzcyBOZXR3b3JrTG9hZCBmaW5hbCA6CiAj
ZW5kaWYKIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBmcmllbmQgY2xhc3Mg
V2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVwbGF5ZXI7CiBwdWJsaWM6CiAjaWYgVVNFKE5FVFdP
UktfU0VTU0lPTikKICAgICBOZXR3b3JrTG9hZChOZXR3b3JrTG9hZENsaWVudCYsIE5ldHdvcmtM
b2FkUGFyYW1ldGVycyYmLCBOZXR3b3JrU2Vzc2lvbiYpOwpAQCAtMTUxLDYgKzE1NywxMSBAQCBw
cml2YXRlOgogI2VuZGlmCiAKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50
UmVxdWVzdDsgLy8gVXBkYXRlZCBvbiByZWRpcmVjdHMuCisKKyNpZiBFTkFCTEUoTkVUV09SS19D
QVBUVVJFKQorICAgIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FwdHVyZTo6UmVjb3JkZXI+IG1f
cmVjb3JkZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYXB0dXJlOjpSZXBsYXllcj4g
bV9yZXBsYXllcjsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggYTY5
M2U0NDVkMmY0OTMwODE3YzM2YzQyYWU2OTA2ODQ4YWE0NjZiNS4uNDU1Y2IwZGRhYmNlMzIzYjc4
MmM0MGFjNmY1MjZlZjdhN2E0NGIxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtNzQsNiArNzQsMTAgQEAKICNpbmNsdWRlICJO
ZXR3b3JrQ2FjaGVDb2RlcnMuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVS
RSkKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCIKKyNlbmRpZgorCiAjaWYgUExB
VEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb25Db2NvYS5oIgogI2VuZGlmCkBA
IC0yMjIsNiArMjI2LDEzIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3Jr
UHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmCiAgICAgICAgIG1lbW9y
eVByZXNzdXJlSGFuZGxlci5pbnN0YWxsKCk7CiAgICAgfQogCisjaWYgRU5BQkxFKE5FVFdPUktf
Q0FQVFVSRSkKKyAgICBOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6c2luZ2xldG9uKCkuaW5pdGlh
bGl6ZSgKKyAgICAgICAgcGFyYW1ldGVycy5zaG91bGRSZWNvcmROZXR3b3JrUmVxdWVzdHMsCisg
ICAgICAgIHBhcmFtZXRlcnMuc2hvdWxkUmVwbGF5TmV0d29ya1JlcXVlc3RzLAorICAgICAgICBw
YXJhbWV0ZXJzLnJlY29yZFJlcGxheUNhY2hlTG9jYXRpb24pOworI2VuZGlmCisKICAgICBtX2Rp
c2tDYWNoZUlzRGlzYWJsZWRGb3JUZXN0aW5nID0gcGFyYW1ldGVycy5zaG91bGRVc2VUZXN0aW5n
TmV0d29ya1Nlc3Npb247CiAKICAgICBtX2Rpc2tDYWNoZVNpemVPdmVycmlkZSA9IHBhcmFtZXRl
cnMuZGlza0NhY2hlU2l6ZU92ZXJyaWRlOwpAQCAtNTk1LDYgKzYwNiwxMCBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpsb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZSh1aW50NjRfdCB3ZWJQYWdl
SUQsIGNvbnN0IFN0cgogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjp0ZXJtaW5hdGUoKQogeworI2lm
IEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisgICAgTmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OnNp
bmdsZXRvbigpLnRlcm1pbmF0ZSgpOworI2VuZGlmCisKICAgICBwbGF0Zm9ybVRlcm1pbmF0ZSgp
OwogICAgIENoaWxkUHJvY2Vzczo6dGVybWluYXRlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5jcHAKaW5kZXggYmQ3YWI1NDhiOWM0NTc0ZDI0MWY0NzdkOWM4OTc3YzJhNGMy
ZDdjMS4uMmU0MGQxMmEwNTY4NDQ4OTk2NDViMDA0NjNiOTA0ODcwNTJhNzgxYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcApAQCAtOTMsNiArOTMsMTEgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2Rl
cikgY29uc3QKICNpZiBPUyhMSU5VWCkKICAgICBlbmNvZGVyIDw8IG1lbW9yeVByZXNzdXJlTW9u
aXRvckhhbmRsZTsKICNlbmRpZgorI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisgICAgZW5j
b2RlciA8PCBzaG91bGRSZWNvcmROZXR3b3JrUmVxdWVzdHM7CisgICAgZW5jb2RlciA8PCBzaG91
bGRSZXBsYXlOZXR3b3JrUmVxdWVzdHM7CisgICAgZW5jb2RlciA8PCByZWNvcmRSZXBsYXlDYWNo
ZUxvY2F0aW9uOworI2VuZGlmCiB9CiAKIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzJiByZXN1bHQpCkBAIC0xODgsNiArMTkzLDE1IEBAIGJvb2wgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIE5l
dHdvcmtQcm9jCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCisjaWYgRU5BQkxFKE5F
VFdPUktfQ0FQVFVSRSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG91bGRSZWNv
cmROZXR3b3JrUmVxdWVzdHMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQuc2hvdWxkUmVwbGF5TmV0d29ya1JlcXVlc3RzKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnJlY29yZFJlcGxh
eUNhY2hlTG9jYXRpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKwogICAgIHJl
dHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAppbmRleCBmNDU2
OWM5NDY5YTU3NzJlNjBiMWM5YmZmNTYwODVkM2FjYjQzYzNkLi4xNDVlMGYzMWE1ZDI3NDQ3NjVm
MmEzZWI3YzM5YTRjYTlhZWQ1MDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgK
QEAgLTEwNiw2ICsxMDYsMTIgQEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzIHsKICNpZiBPUyhMSU5VWCkKICAgICBJUEM6OkF0dGFjaG1lbnQgbWVtb3J5UHJlc3N1cmVN
b25pdG9ySGFuZGxlOwogI2VuZGlmCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorICAg
IGJvb2wgc2hvdWxkUmVjb3JkTmV0d29ya1JlcXVlc3RzIHsgZmFsc2UgfTsKKyAgICBib29sIHNo
b3VsZFJlcGxheU5ldHdvcmtSZXF1ZXN0cyB7IGZhbHNlIH07CisgICAgU3RyaW5nIHJlY29yZFJl
cGxheUNhY2hlTG9jYXRpb247CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3Jr
Q2FwdHVyZUNhY2hlZFJlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhcHR1cmUvTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDE2
MWQzM2Q4ZDE2ZTRhZDg3MTQyZTQ1YWVkMDE5NGRlZjgxNzg0NAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVDYWNo
ZWRSZXNvdXJjZS5jcHAKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5oIgorCisj
aWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKworI2luY2x1ZGUgIkF0dGFjaG1lbnQuaCIKKyNp
bmNsdWRlICJOZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVy
ZU1hbmFnZXIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhcHR1
cmUgeworCitDYWNoZWRSZXNvdXJjZTo6Q2FjaGVkUmVzb3VyY2UoY29uc3QgU3RyaW5nJiBldmVu
dEZpbGVQYXRoKQorICAgIDogbV9ldmVudEZpbGVQYXRoKGV2ZW50RmlsZVBhdGgpCit7Cit9CisK
K0NhY2hlZFJlc291cmNlOjp+Q2FjaGVkUmVzb3VyY2UoKQoreworfQorCitjb25zdCBXZWJDb3Jl
OjpVUkwmIENhY2hlZFJlc291cmNlOjp1cmwoKQoreworICAgIGlmICghbV9oYXZlVVJMKSB7Cisg
ICAgICAgIGF1dG8gZXZlbnRzID0gZXZlbnRTdHJlYW0oKTsKKyAgICAgICAgYXV0byBldmVudCA9
IGV2ZW50cy5uZXh0RXZlbnQoKTsKKyAgICAgICAgaWYgKCFldmVudCkKKyAgICAgICAgICAgIERF
QlVHX0xPR19FUlJPUigiRXZlbnQgc3RyZWFtIGRvZXMgbm90IGNvbnRhaW4gZXZlbnRzOiBmaWxl
ID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2V2ZW50RmlsZVBhdGgpKTsKKyAgICAgICAgZWxz
ZSBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVxdWVzdFNlbnRFdmVudD4oKmV2ZW50KSkK
KyAgICAgICAgICAgIERFQlVHX0xPR19FUlJPUigiRXZlbnQgc3RyZWFtIGRvZXMgbm90IGhhdmUg
YSByZXF1ZXN0U2VudCBldmVudDogZmlsZSA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9ldmVu
dEZpbGVQYXRoKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY29uc3QgYXV0byYgcmVx
dWVzdFNlbnRFdmVudCA9IFdURjo6Z2V0PFJlcXVlc3RTZW50RXZlbnQ+KCpldmVudCk7CisgICAg
ICAgICAgICBtX3VybCA9IHJlcXVlc3RTZW50RXZlbnQucmVxdWVzdC51cmwoKTsKKyAgICAgICAg
ICAgIG1faGF2ZVVSTCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbV91
cmw7Cit9CisKK2NvbnN0IFdlYkNvcmU6OlVSTCYgQ2FjaGVkUmVzb3VyY2U6OmJhc2VVUkwoKQor
eworICAgIGlmICghbV9oYXZlQmFzZVVSTCkgeworICAgICAgICBtX2hhdmVCYXNlVVJMID0gdHJ1
ZTsKKyAgICAgICAgYXV0byBwYXRoU3RhcnQgPSB1cmwoKS5wYXRoU3RhcnQoKTsKKyAgICAgICAg
YXV0byBiYXNlVVJMU3RyID0gdXJsKCkuc3RyaW5nKCkubGVmdChwYXRoU3RhcnQpOworCisgICAg
ICAgIFdlYkNvcmU6OlVSTFBhcnNlciBwYXJzZXIoYmFzZVVSTFN0cik7CisgICAgICAgIG1fYmFz
ZVVSTCA9IHBhcnNlci5yZXN1bHQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9iYXNlVVJMOwor
fQorCitXZWJDb3JlOjpVUkxQYXJzZXI6OlVSTEVuY29kZWRGb3JtIENhY2hlZFJlc291cmNlOjpx
dWVyeVBhcmFtZXRlcnMoKQoreworICAgIGlmICghbV9oYXZlUXVlcnlQYXJhbWV0ZXJzKSB7Cisg
ICAgICAgIG1faGF2ZVF1ZXJ5UGFyYW1ldGVycyA9IHRydWU7CisgICAgICAgIG1fcXVlcnlQYXJh
bWV0ZXJzID0gV2ViQ29yZTo6VVJMUGFyc2VyOjpwYXJzZVVSTEVuY29kZWRGb3JtKHVybCgpLnF1
ZXJ5KCkpOworICAgIH0KKworICAgIHJldHVybiBtX3F1ZXJ5UGFyYW1ldGVyczsKK30KKworQ2Fj
aGVkUmVzb3VyY2U6OkV2ZW50U3RyZWFtIENhY2hlZFJlc291cmNlOjpldmVudFN0cmVhbSgpCit7
CisgICAgcmV0dXJuIEV2ZW50U3RyZWFtKG1fZXZlbnRGaWxlUGF0aCk7Cit9CisKK0NhY2hlZFJl
c291cmNlOjpFdmVudFN0cmVhbTo6RXZlbnRTdHJlYW0oY29uc3QgU3RyaW5nJiBldmVudEZpbGVQ
YXRoKQorICAgIDogbV9ldmVudEZpbGVQYXRoKGV2ZW50RmlsZVBhdGgpCisgICAgLCBtX21hcHBl
ZEV2ZW50RmlsZShXZWJDb3JlOjpNYXBwZWRGaWxlRGF0YShtX2V2ZW50RmlsZVBhdGgsIG1faGF2
ZU1hcHBlZEV2ZW50RmlsZSkpCisgICAgLCBtX2RlY29kZXIobWFrZURlY29kZXIoKSkKK3sKK30K
KworV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+IENhY2hlZFJlc291cmNlOjpFdmVudFN0cmVh
bTo6bmV4dEV2ZW50KCkKK3sKKyAgICBpZiAoIW1fZGVjb2Rlci5nZXQoKSkgeworICAgICAgICBE
RUJVR19MT0dfRVJST1IoIkFza2VkIHRvIHJldHVybiBhbiBldmVudCBmcm9tIGEgZmlsZSB3ZSBj
b3VsZG4ndCBvcGVuOiBmaWxlID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2V2ZW50RmlsZVBh
dGgpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6T3B0aW9uYWw8Q2FwdHVyZUV2ZW50PigpOworICAg
IH0KKworICAgIHVpbnQ4X3QgZXZlbnRUeXBlOworICAgIGlmICghbV9kZWNvZGVyLT5kZWNvZGUo
ZXZlbnRUeXBlKSkgeworICAgICAgICBERUJVR19MT0dfRVJST1IoIlVuYWJsZSB0byByZWFkIGV2
ZW50IHR5cGU6IGZpbGUgPSAle3B1YmxpY31zIiwgREVCVUdfU1RSKG1fZXZlbnRGaWxlUGF0aCkp
OworICAgICAgICByZXR1cm4gV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+KCk7CisgICAgfQor
CisgICAgc3dpdGNoIChldmVudFR5cGUpIHsKKyAgICBjYXNlIFJlcXVlc3RTZW50RXZlbnQ6OmtU
eXBlOgorICAgICAgICByZXR1cm4gUmVxdWVzdFNlbnRFdmVudDo6ZGVjb2RlKCptX2RlY29kZXIp
OworICAgIGNhc2UgUmVzcG9uc2VSZWNlaXZlZEV2ZW50OjprVHlwZToKKyAgICAgICAgcmV0dXJu
IFJlc3BvbnNlUmVjZWl2ZWRFdmVudDo6ZGVjb2RlKCptX2RlY29kZXIpOworICAgIGNhc2UgUmVk
aXJlY3RSZWNlaXZlZEV2ZW50OjprVHlwZToKKyAgICAgICAgcmV0dXJuIFJlZGlyZWN0UmVjZWl2
ZWRFdmVudDo6ZGVjb2RlKCptX2RlY29kZXIpOworICAgIGNhc2UgUmVkaXJlY3RTZW50RXZlbnQ6
OmtUeXBlOgorICAgICAgICByZXR1cm4gUmVkaXJlY3RTZW50RXZlbnQ6OmRlY29kZSgqbV9kZWNv
ZGVyKTsKKyAgICBjYXNlIERhdGFSZWNlaXZlZEV2ZW50OjprVHlwZToKKyAgICAgICAgcmV0dXJu
IERhdGFSZWNlaXZlZEV2ZW50OjpkZWNvZGUoKm1fZGVjb2Rlcik7CisgICAgY2FzZSBGaW5pc2hl
ZEV2ZW50OjprVHlwZToKKyAgICAgICAgcmV0dXJuIEZpbmlzaGVkRXZlbnQ6OmRlY29kZSgqbV9k
ZWNvZGVyKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBERUJVR19MT0dfRVJST1IoIkV2ZW50IHN0
cmVhbSBjb250YWlucyB1bmtub3duIGV2ZW50ICglZCk6IGZpbGUgPSAle3B1YmxpY31zIiwgc3Rh
dGljX2Nhc3Q8aW50PihldmVudFR5cGUpLCBERUJVR19TVFIobV9ldmVudEZpbGVQYXRoKSk7Cisg
ICAgICAgIHJldHVybiBXVEY6Ok9wdGlvbmFsPENhcHR1cmVFdmVudD4oKTsKKyAgICB9Cit9CisK
K3N0ZDo6dW5pcXVlX3B0cjxJUEM6OkRlY29kZXI+IENhY2hlZFJlc291cmNlOjpFdmVudFN0cmVh
bTo6bWFrZURlY29kZXIoKQoreworICAgIGlmICghbV9oYXZlTWFwcGVkRXZlbnRGaWxlKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPElQQzo6
RGVjb2Rlcj4oCisgICAgICAgIElQQzo6RGF0YVJlZmVyZW5jZSgKKyAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fbWFwcGVkRXZlbnRGaWxlLmRhdGEoKSksCisg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fbWFwcGVkRXZlbnRGaWxlLnNpemUoKSkp
LAorICAgICAgICBWZWN0b3I8SVBDOjpBdHRhY2htZW50PigpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgTmV0d29ya0NhcHR1cmUKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKE5FVFdPUktfQ0FQVFVSRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5oIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUNhY2hlZFJlc291cmNl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOGZkMTBiNzlhNmM5NjI2OTQzNDZiMTkwYjAyMWJkZDg5NTAxZDUyMgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUv
TmV0d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisKKyNpbmNs
dWRlICJEYXRhUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiRGVjb2Rlci5oIgorI2luY2x1ZGUgIk5l
dHdvcmtDYXB0dXJlRXZlbnQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1VSTC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVVJMUGFyc2VyLmg+Cisj
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisKKyNpbmNsdWRlIDxtZW1vcnk+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlIHsKKworY2xhc3MgQ2FjaGVkUmVz
b3VyY2UgeworcHVibGljOgorICAgIGNsYXNzIEV2ZW50U3RyZWFtIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIEV2ZW50U3RyZWFtKCkgPSBkZWZhdWx0OworICAgICAgICBFdmVudFN0cmVhbShjb25z
dCBTdHJpbmcmIGV2ZW50RmlsZVBhdGgpOworICAgICAgICBFdmVudFN0cmVhbShFdmVudFN0cmVh
bSYmKSA9IGRlZmF1bHQ7CisgICAgICAgIEV2ZW50U3RyZWFtJiBvcGVyYXRvcj0oRXZlbnRTdHJl
YW0mJiBvdGhlcikgPSBkZWZhdWx0OworCisgICAgICAgIFdURjo6T3B0aW9uYWw8Q2FwdHVyZUV2
ZW50PiBuZXh0RXZlbnQoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxJUEM6OkRlY29kZXI+IG1ha2VEZWNvZGVyKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBT
dHJpbmcgbV9ldmVudEZpbGVQYXRoOworICAgICAgICBib29sIG1faGF2ZU1hcHBlZEV2ZW50Rmls
ZSB7IGZhbHNlIH07CisgICAgICAgIFdlYkNvcmU6Ok1hcHBlZEZpbGVEYXRhIG1fbWFwcGVkRXZl
bnRGaWxlOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpEZWNvZGVyPiBtX2RlY29kZXI7
CisgICAgfTsKKworcHVibGljOgorICAgIENhY2hlZFJlc291cmNlKGNvbnN0IFN0cmluZyYgZXZl
bnRGaWxlUGF0aCk7CisgICAgQ2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UmJikgPSBkZWZh
dWx0OworICAgIH5DYWNoZWRSZXNvdXJjZSgpOworCisgICAgQ2FjaGVkUmVzb3VyY2UmIG9wZXJh
dG9yPShjb25zdCBDYWNoZWRSZXNvdXJjZSYgb3RoZXIpID0gZGVmYXVsdDsKKyAgICBDYWNoZWRS
ZXNvdXJjZSYgb3BlcmF0b3I9KENhY2hlZFJlc291cmNlJiYgb3RoZXIpID0gZGVmYXVsdDsKKwor
ICAgIGNvbnN0IFdlYkNvcmU6OlVSTCYgdXJsKCk7CisgICAgY29uc3QgV2ViQ29yZTo6VVJMJiBi
YXNlVVJMKCk7CisgICAgV2ViQ29yZTo6VVJMUGFyc2VyOjpVUkxFbmNvZGVkRm9ybSBxdWVyeVBh
cmFtZXRlcnMoKTsKKyAgICBFdmVudFN0cmVhbSBldmVudFN0cmVhbSgpOworCitwcml2YXRlOgor
ICAgIFN0cmluZyBtX2V2ZW50RmlsZVBhdGg7CisKKyAgICAvLyBMYXppbHkgY2FsY3VsYXRlZC4K
KyAgICBXZWJDb3JlOjpVUkwgbV91cmw7CisgICAgV2ViQ29yZTo6VVJMIG1fYmFzZVVSTDsKKyAg
ICBXZWJDb3JlOjpVUkxQYXJzZXI6OlVSTEVuY29kZWRGb3JtIG1fcXVlcnlQYXJhbWV0ZXJzOwor
CisgICAgYm9vbCBtX2hhdmVVUkwgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXZlQmFzZVVSTCB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2hhdmVRdWVyeVBhcmFtZXRlcnMgeyBmYWxzZSB9OworfTsK
KworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjM5N2M4ODJiNjYwNmYzMWZlODYwM2NjOWZlMGY4MGRmOGQyMzIyMzIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJl
L05ldHdvcmtDYXB0dXJlRXZlbnQuY3BwCkBAIC0wLDAgKzEsMjAzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlRXZlbnQuaCIKKwor
I2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgi
CisjaW5jbHVkZSAiRGVjb2Rlci5oIgorI2luY2x1ZGUgIkVuY29kZXIuaCIKKyNpbmNsdWRlICJO
ZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMu
aCIKKworbmFtZXNwYWNlIElQQyB7CisKK3VzaW5nIFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkNh
cHR1cmVUaW1lVHlwZTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxDYXB0dXJl
VGltZVR5cGU+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IENhcHR1
cmVUaW1lVHlwZSYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgQ2FwdHVyZVRp
bWVUeXBlJik7Cit9OworCit2b2lkIEFyZ3VtZW50Q29kZXI8Q2FwdHVyZVRpbWVUeXBlPjo6ZW5j
b2RlKElQQzo6RW5jb2RlciYgZW5jb2RlciwgY29uc3QgQ2FwdHVyZVRpbWVUeXBlJiB0aW1lKQor
eworICAgIGVuY29kZXIgPDwgdGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCk7Cit9CisK
K2Jvb2wgQXJndW1lbnRDb2RlcjxDYXB0dXJlVGltZVR5cGU+OjpkZWNvZGUoSVBDOjpEZWNvZGVy
JiBkZWNvZGVyLCBDYXB0dXJlVGltZVR5cGUmIHRpbWUpCit7CisgICAgZG91YmxlIHZhbHVlOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICB0aW1lID0gQ2FwdHVyZVRpbWVUeXBlOjpmcm9tUmF3U2Vjb25kcyh2YWx1ZSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIElQQworCituYW1lc3BhY2UgV2ViS2l0
IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZSB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
c3RhdGljIFdURjo6T3B0aW9uYWw8Q2FwdHVyZUV2ZW50PiB3cmFwKFQmJiBldmVudCkKK3sKKyAg
ICByZXR1cm4gV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+KENhcHR1cmVFdmVudChXVEZNb3Zl
KGV2ZW50KSkpOworfQorCitib29sIFJlcXVlc3RTZW50RXZlbnQ6OmVuY29kZShJUEM6OkVuY29k
ZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCB0aW1lOworICAgIGVuY29kZXIg
PDwgcmVxdWVzdDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworV1RGOjpPcHRpb25hbDxDYXB0dXJl
RXZlbnQ+IFJlcXVlc3RTZW50RXZlbnQ6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIpCit7
CisgICAgQ2FwdHVyZVRpbWVUeXBlIHRpbWU7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
IHJlcXVlc3Q7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRpbWUpCisgICAgICAgIHx8ICFk
ZWNvZGVyLmRlY29kZShyZXF1ZXN0KSkKKyAgICAgICAgcmV0dXJuIFdURjo6T3B0aW9uYWw8Q2Fw
dHVyZUV2ZW50PigpOworCisgICAgcmV0dXJuIHdyYXAoUmVxdWVzdFNlbnRFdmVudChXVEZNb3Zl
KHRpbWUpLCBXVEZNb3ZlKHJlcXVlc3QpKSk7Cit9CisKK2Jvb2wgUmVzcG9uc2VSZWNlaXZlZEV2
ZW50OjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIg
PDwgdGltZTsKKyAgICBlbmNvZGVyIDw8IHJlc3BvbnNlOworICAgIHJldHVybiB0cnVlOworfQor
CitXVEY6Ok9wdGlvbmFsPENhcHR1cmVFdmVudD4gUmVzcG9uc2VSZWNlaXZlZEV2ZW50OjpkZWNv
ZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIENhcHR1cmVUaW1lVHlwZSB0aW1lOwor
ICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHRpbWUpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShyZXNwb25zZSkpCisg
ICAgICAgIHJldHVybiBXVEY6Ok9wdGlvbmFsPENhcHR1cmVFdmVudD4oKTsKKworI2lmIFBMQVRG
T1JNKENPQ09BKQorICAgIC8vIEZvcmNlIHRoZSBjcmVhdGlvbiBvZiBuZWVkZWQgcGxhdGZvcm0t
c3BlY2lmaWMgZGF0YSB0aGF0IG90aGVyd2lzZSBpcyBub3QgY3JlYXRlZC4KKyAgICAodm9pZCkg
cmVzcG9uc2UubnNVUkxSZXNwb25zZSgpOworI2VuZGlmCisKKyAgICByZXR1cm4gd3JhcChSZXNw
b25zZVJlY2VpdmVkRXZlbnQoV1RGTW92ZSh0aW1lKSwgV1RGTW92ZShyZXNwb25zZSkpKTsKK30K
KworYm9vbCBSZWRpcmVjdFJlY2VpdmVkRXZlbnQ6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29k
ZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCB0aW1lOworICAgIGVuY29kZXIgPDwgcmVxdWVz
dDsKKyAgICBlbmNvZGVyIDw8IHJlc3BvbnNlOworICAgIHJldHVybiB0cnVlOworfQorCitXVEY6
Ok9wdGlvbmFsPENhcHR1cmVFdmVudD4gUmVkaXJlY3RSZWNlaXZlZEV2ZW50OjpkZWNvZGUoSVBD
OjpEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIENhcHR1cmVUaW1lVHlwZSB0aW1lOworICAgIFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0OworICAgIFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UgcmVzcG9uc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRpbWUpCisgICAgICAg
IHx8ICFkZWNvZGVyLmRlY29kZShyZXF1ZXN0KQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUo
cmVzcG9uc2UpKQorICAgICAgICByZXR1cm4gV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+KCk7
CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAvLyBGb3JjZSB0aGUgY3JlYXRpb24gb2YgbmVl
ZGVkIHBsYXRmb3JtLXNwZWNpZmljIGRhdGEgdGhhdCBvdGhlcndpc2UgaXMgbm90IGNyZWF0ZWQu
CisgICAgKHZvaWQpIHJlc3BvbnNlLm5zVVJMUmVzcG9uc2UoKTsKKyNlbmRpZgorCisgICAgcmV0
dXJuIHdyYXAoUmVkaXJlY3RSZWNlaXZlZEV2ZW50KFdURk1vdmUodGltZSksIFdURk1vdmUocmVx
dWVzdCksIFdURk1vdmUocmVzcG9uc2UpKSk7Cit9CisKK2Jvb2wgUmVkaXJlY3RTZW50RXZlbnQ6
OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCB0
aW1lOworICAgIGVuY29kZXIgPDwgcmVxdWVzdDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworV1RG
OjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+IFJlZGlyZWN0U2VudEV2ZW50OjpkZWNvZGUoSVBDOjpE
ZWNvZGVyJiBkZWNvZGVyKQoreworICAgIENhcHR1cmVUaW1lVHlwZSB0aW1lOworICAgIFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0OworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0
aW1lKQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUocmVxdWVzdCkpCisgICAgICAgIHJldHVy
biBXVEY6Ok9wdGlvbmFsPENhcHR1cmVFdmVudD4oKTsKKworICAgIHJldHVybiB3cmFwKFJlZGly
ZWN0U2VudEV2ZW50KFdURk1vdmUodGltZSksIFdURk1vdmUocmVxdWVzdCkpKTsKK30KKworYm9v
bCBEYXRhUmVjZWl2ZWRFdmVudDo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QK
K3sKKyAgICBlbmNvZGVyIDw8IHRpbWU7CisgICAgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFSZWYo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YS0+ZGF0YSgpKSwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihkYXRhLT5zaXplKCkpKTsKKyAgICBlbmNvZGVyLmVuY29kZVZhcmlhYmxlTGVu
Z3RoQnl0ZUFycmF5KGRhdGFSZWYpOworICAgIHJldHVybiB0cnVlOworfQorCitXVEY6Ok9wdGlv
bmFsPENhcHR1cmVFdmVudD4gRGF0YVJlY2VpdmVkRXZlbnQ6OmRlY29kZShJUEM6OkRlY29kZXIm
IGRlY29kZXIpCit7CisgICAgQ2FwdHVyZVRpbWVUeXBlIHRpbWU7CisgICAgSVBDOjpEYXRhUmVm
ZXJlbmNlIGRhdGFSZWY7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRpbWUpCisgICAgICAg
IHx8ICFkZWNvZGVyLmRlY29kZVZhcmlhYmxlTGVuZ3RoQnl0ZUFycmF5KGRhdGFSZWYpKQorICAg
ICAgICByZXR1cm4gV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+KCk7CisKKyAgICByZXR1cm4g
d3JhcChEYXRhUmVjZWl2ZWRFdmVudChXVEZNb3ZlKHRpbWUpLCBXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI6OmNyZWF0ZShkYXRhUmVmLmRhdGEoKSwgZGF0YVJlZi5zaXplKCkpKSk7Cit9CisKK2Jvb2wg
RmluaXNoZWRFdmVudDo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAg
ICBlbmNvZGVyIDw8IHRpbWU7CisgICAgZW5jb2RlciA8PCBlcnJvcjsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+IEZpbmlzaGVkRXZlbnQ6OmRlY29k
ZShJUEM6OkRlY29kZXImIGRlY29kZXIpCit7CisgICAgQ2FwdHVyZVRpbWVUeXBlIHRpbWU7Cisg
ICAgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBlcnJvcjsKKworICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUodGltZSkKKyAgICAgICAgfHwgIWRlY29kZXIuZGVjb2RlKGVycm9yKSkKKyAgICAgICAgcmV0
dXJuIFdURjo6T3B0aW9uYWw8Q2FwdHVyZUV2ZW50PigpOworCisgICAgcmV0dXJuIFdURjo6T3B0
aW9uYWw8Q2FwdHVyZUV2ZW50PihDYXB0dXJlRXZlbnQoRmluaXNoZWRFdmVudChXVEZNb3ZlKHRp
bWUpLCBXVEZNb3ZlKGVycm9yKSkpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhcHR1
cmUKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FQ
VFVSRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUv
TmV0d29ya0NhcHR1cmVFdmVudC5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fw
dHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTA2NTJjNjAyN2ZiNDk3MDgz
YTY2NTBiNjFjZDEzYTI3YjA0NWJhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5oCkBAIC0wLDAgKzEs
MTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTkVUV09SS19D
QVBUVVJFKQorCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVUeXBlcy5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvUmVzb3VyY2VFcnJvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9TaGFyZWRCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisjaW5jbHVk
ZSA8d3RmL1ZhcmlhbnQuaD4KKworbmFtZXNwYWNlIElQQyB7CitjbGFzcyBEZWNvZGVyOworY2xh
c3MgRW5jb2RlcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29ya0Nh
cHR1cmUgeworCitzdHJ1Y3QgUmVxdWVzdFNlbnRFdmVudDsKK3N0cnVjdCBSZXNwb25zZVJlY2Vp
dmVkRXZlbnQ7CitzdHJ1Y3QgUmVkaXJlY3RSZWNlaXZlZEV2ZW50Oworc3RydWN0IFJlZGlyZWN0
U2VudEV2ZW50Oworc3RydWN0IERhdGFSZWNlaXZlZEV2ZW50Oworc3RydWN0IEZpbmlzaGVkRXZl
bnQ7CisKK3VzaW5nIENhcHR1cmVFdmVudFR5cGVzID0gVHlwZUhvbGRlcjwKKyAgICBSZXF1ZXN0
U2VudEV2ZW50LAorICAgIFJlc3BvbnNlUmVjZWl2ZWRFdmVudCwKKyAgICBSZWRpcmVjdFJlY2Vp
dmVkRXZlbnQsCisgICAgUmVkaXJlY3RTZW50RXZlbnQsCisgICAgRGF0YVJlY2VpdmVkRXZlbnQs
CisgICAgRmluaXNoZWRFdmVudD47CisKK3VzaW5nIENhcHR1cmVFdmVudCA9IENhcHR1cmVFdmVu
dFR5cGVzOjpWYXJpYW50VHlwZTsKK3VzaW5nIENhcHR1cmVDbG9ja1R5cGUgPSBXVEY6Ok1vbm90
b25pY1RpbWU7Cit1c2luZyBDYXB0dXJlVGltZVR5cGUgPSBXVEY6Ok1vbm90b25pY1RpbWU7CisK
K3N0cnVjdCBUaW1lZEV2ZW50IHsKKyAgICBUaW1lZEV2ZW50KCkKKyAgICAgICAgOiB0aW1lKENh
cHR1cmVDbG9ja1R5cGU6Om5vdygpKSB7IH0KKyAgICBUaW1lZEV2ZW50KENhcHR1cmVUaW1lVHlw
ZSYmIHRpbWUpCisgICAgICAgIDogdGltZShXVEZNb3ZlKHRpbWUpKSB7IH0KKyAgICBDYXB0dXJl
VGltZVR5cGUgdGltZTsKK307CisKK3N0cnVjdCBSZXF1ZXN0U2VudEV2ZW50IGZpbmFsIDogcHVi
bGljIFRpbWVkRXZlbnQgeworICAgIFJlcXVlc3RTZW50RXZlbnQoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorICAgICAgICA6IFRpbWVkRXZlbnQoKSwgcmVxdWVzdChy
ZXF1ZXN0KSB7IH0KKyAgICBSZXF1ZXN0U2VudEV2ZW50KENhcHR1cmVUaW1lVHlwZSYmIHRpbWUs
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QpCisgICAgICAgIDogVGltZWRFdmVu
dChXVEZNb3ZlKHRpbWUpKSwgcmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKSB7IH0KKyAgICBib29s
IGVuY29kZShJUEM6OkVuY29kZXImKSBjb25zdDsKKyAgICBzdGF0aWMgV1RGOjpPcHRpb25hbDxD
YXB0dXJlRXZlbnQ+IGRlY29kZShJUEM6OkRlY29kZXImKTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVpbnQ4X3Qga1R5cGUgeyBDYXB0dXJlRXZlbnRUeXBlczo6VHlwZUluZGV4PFJlcXVlc3RTZW50
RXZlbnQ+IH07CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Q7Cit9OworCitz
dHJ1Y3QgUmVzcG9uc2VSZWNlaXZlZEV2ZW50IGZpbmFsIDogcHVibGljIFRpbWVkRXZlbnQgewor
ICAgIFJlc3BvbnNlUmVjZWl2ZWRFdmVudChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkKKyAgICAgICAgOiBUaW1lZEV2ZW50KCksIHJlc3BvbnNlKHJlc3BvbnNlKSB7
IH0KKyAgICBSZXNwb25zZVJlY2VpdmVkRXZlbnQoQ2FwdHVyZVRpbWVUeXBlJiYgdGltZSwgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYmIHJlc3BvbnNlKQorICAgICAgICA6IFRpbWVkRXZlbnQo
V1RGTW92ZSh0aW1lKSksIHJlc3BvbnNlKFdURk1vdmUocmVzcG9uc2UpKSB7IH0KKyAgICBib29s
IGVuY29kZShJUEM6OkVuY29kZXImKSBjb25zdDsKKyAgICBzdGF0aWMgV1RGOjpPcHRpb25hbDxD
YXB0dXJlRXZlbnQ+IGRlY29kZShJUEM6OkRlY29kZXImKTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVpbnQ4X3Qga1R5cGUgeyBDYXB0dXJlRXZlbnRUeXBlczo6VHlwZUluZGV4PFJlc3BvbnNlUmVj
ZWl2ZWRFdmVudD4gfTsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwor
fTsKKworc3RydWN0IFJlZGlyZWN0UmVjZWl2ZWRFdmVudCBmaW5hbCA6IHB1YmxpYyBUaW1lZEV2
ZW50IHsKKyAgICBSZWRpcmVjdFJlY2VpdmVkRXZlbnQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSkKKyAgICAgICAgOiBUaW1lZEV2ZW50KCksIHJlcXVlc3QocmVxdWVzdCksIHJlc3BvbnNlKHJl
c3BvbnNlKSB7IH0KKyAgICBSZWRpcmVjdFJlY2VpdmVkRXZlbnQoQ2FwdHVyZVRpbWVUeXBlJiYg
dGltZSwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYmIHJlc3BvbnNlKQorICAgICAgICA6IFRpbWVkRXZlbnQoV1RGTW92ZSh0aW1l
KSksIHJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSksIHJlc3BvbnNlKFdURk1vdmUocmVzcG9uc2Up
KSB7IH0KKyAgICBib29sIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25zdDsKKyAgICBzdGF0aWMg
V1RGOjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+IGRlY29kZShJUEM6OkRlY29kZXImKTsKKyAgICBz
dGF0aWMgY29uc3RleHByIHVpbnQ4X3Qga1R5cGUgeyBDYXB0dXJlRXZlbnRUeXBlczo6VHlwZUlu
ZGV4PFJlZGlyZWN0UmVjZWl2ZWRFdmVudD4gfTsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QgcmVxdWVzdDsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOworfTsK
Kworc3RydWN0IFJlZGlyZWN0U2VudEV2ZW50IGZpbmFsIDogcHVibGljIFRpbWVkRXZlbnQgewor
ICAgIFJlZGlyZWN0U2VudEV2ZW50KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCkKKyAgICAgICAgOiBUaW1lZEV2ZW50KCksIHJlcXVlc3QocmVxdWVzdCkgeyB9CisgICAg
UmVkaXJlY3RTZW50RXZlbnQoQ2FwdHVyZVRpbWVUeXBlJiYgdGltZSwgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiYgcmVxdWVzdCkKKyAgICAgICAgOiBUaW1lZEV2ZW50KFdURk1vdmUodGltZSkp
LCByZXF1ZXN0KFdURk1vdmUocmVxdWVzdCkpIHsgfQorICAgIGJvb2wgZW5jb2RlKElQQzo6RW5j
b2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBXVEY6Ok9wdGlvbmFsPENhcHR1cmVFdmVudD4gZGVj
b2RlKElQQzo6RGVjb2RlciYpOworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBrVHlwZSB7
IENhcHR1cmVFdmVudFR5cGVzOjpUeXBlSW5kZXg8UmVkaXJlY3RTZW50RXZlbnQ+IH07CisgICAg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Q7Cit9OworCitzdHJ1Y3QgRGF0YVJlY2Vp
dmVkRXZlbnQgZmluYWwgOiBwdWJsaWMgVGltZWRFdmVudCB7CisgICAgRGF0YVJlY2VpdmVkRXZl
bnQoV2ViQ29yZTo6U2hhcmVkQnVmZmVyJiBkYXRhKQorICAgICAgICA6IFRpbWVkRXZlbnQoKSwg
ZGF0YShkYXRhKSB7IH0KKyAgICBEYXRhUmVjZWl2ZWRFdmVudChDYXB0dXJlVGltZVR5cGUmJiB0
aW1lLCBSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmIGRhdGEpCisgICAgICAgIDogVGltZWRF
dmVudChXVEZNb3ZlKHRpbWUpKSwgZGF0YShXVEZNb3ZlKGRhdGEpKSB7IH0KKyAgICBib29sIGVu
Y29kZShJUEM6OkVuY29kZXImKSBjb25zdDsKKyAgICBzdGF0aWMgV1RGOjpPcHRpb25hbDxDYXB0
dXJlRXZlbnQ+IGRlY29kZShJUEM6OkRlY29kZXImKTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVp
bnQ4X3Qga1R5cGUgeyBDYXB0dXJlRXZlbnRUeXBlczo6VHlwZUluZGV4PERhdGFSZWNlaXZlZEV2
ZW50PiB9OworICAgIFJlZjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGRhdGE7Cit9OworCitzdHJ1
Y3QgRmluaXNoZWRFdmVudCBmaW5hbCA6IHB1YmxpYyBUaW1lZEV2ZW50IHsKKyAgICBGaW5pc2hl
ZEV2ZW50KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yKQorICAgICAgICA6IFRp
bWVkRXZlbnQoKSwgZXJyb3IoZXJyb3IpIHsgfQorICAgIEZpbmlzaGVkRXZlbnQoQ2FwdHVyZVRp
bWVUeXBlJiYgdGltZSwgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYmIGVycm9yKQorICAgICAgICA6
IFRpbWVkRXZlbnQoV1RGTW92ZSh0aW1lKSksIGVycm9yKFdURk1vdmUoZXJyb3IpKSB7IH0KKyAg
ICBib29sIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25zdDsKKyAgICBzdGF0aWMgV1RGOjpPcHRp
b25hbDxDYXB0dXJlRXZlbnQ+IGRlY29kZShJUEM6OkRlY29kZXImKTsKKyAgICBzdGF0aWMgY29u
c3RleHByIHVpbnQ4X3Qga1R5cGUgeyBDYXB0dXJlRXZlbnRUeXBlczo6VHlwZUluZGV4PEZpbmlz
aGVkRXZlbnQ+IH07CisgICAgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBlcnJvcjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlTG9nZ2luZy5oIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41YjM3ZGFmODI1MzljMDUyYzE3Yjg2N2IwMGZkYjk4OTc5YzA3NWIyCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3
b3JrQ2FwdHVyZUxvZ2dpbmcuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorCisjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgorCisjZGVmaW5lIEVOQUJMRV9XVEZfSU5URVJOQUxfREVCVUdHSU5HIDEKKworI2lmIEVO
QUJMRShXVEZfSU5URVJOQUxfREVCVUdHSU5HKQorI2RlZmluZSBERUJVR19TVFIocykgICAgICAg
ICAgICAgICAgICAgIChzKS5hc2NpaSgpLmRhdGEoKQorI2RlZmluZSBERUJVR19MT0dfUVVPVEUo
c3RyKSAgICAgICAgICAgICNzdHIKKyNkZWZpbmUgREVCVUdfTE9HX0VYUEFORF9BTkRfUVVPVEUo
c3RyKSBERUJVR19MT0dfUVVPVEUoc3RyKQorI2RlZmluZSBERUJVR19MT0coZm9ybWF0LCAuLi4p
ICAgICAgICAgIFJFTEVBU0VfTE9HKE5ldHdvcmssICIjUExUOiAlcCAtICV7cHVibGljfXM6OiV7
cHVibGljfXM6ICIgZm9ybWF0LCB0aGlzLCBERUJVR19MT0dfRVhQQU5EX0FORF9RVU9URShERUJV
R19DTEFTUyksIF9fRlVOQ1RJT05fXywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgREVCVUdfTE9H
X0VSUk9SKGZvcm1hdCwgLi4uKSAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiI1BMVDog
JXAgLSAle3B1YmxpY31zOjole3B1YmxpY31zOiAiIGZvcm1hdCwgdGhpcywgREVCVUdfTE9HX0VY
UEFORF9BTkRfUVVPVEUoREVCVUdfQ0xBU1MpLCBfX0ZVTkNUSU9OX18sICMjX19WQV9BUkdTX18p
CisjZWxzZQorI2RlZmluZSBERUJVR19MT0coLi4uKSAgICAgICAgICAgICAgICAgICgodm9pZCkg
MCkKKyNkZWZpbmUgREVCVUdfTE9HX0VSUk9SKC4uLikgICAgICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihOZXR3b3JrLCBfX1ZBX0FSR1NfXykKKyNlbmRpZgorCisjZW5kaWYgLy8gRU5BQkxFKE5F
VFdPUktfQ0FQVFVSRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhcHR1cmUvTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
MWJhYTU2NDBhZjU3M2E1ZmY0MDA0MmI0MTk2NTNkOTVjZDY1MzFhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZU1h
bmFnZXIuY3BwCkBAIC0wLDAgKzEsNjI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlTWFuYWdlci5oIgorCisjaWYgRU5BQkxFKE5F
VFdPUktfQ0FQVFVSRSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlQ2FjaGVkUmVzb3VyY2Uu
aCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCIKKyNpbmNsdWRlICJXZWJDb3Jl
L1Jlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIldlYkNvcmUvVVJMLmgiCisjaW5jbHVkZSA8
d3RmL01ENS5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jh
c2U2NC5oPgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGl0ZXJhdG9yPgorI2lu
Y2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2RlZmluZSBERUJVR19DTEFT
UyBNYW5hZ2VyCisKK25hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJl
IHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGtEaXJOYW1lUmVjb3JkUmVwbGF5ID0gIldlYktpdFBl
cmYvcmVjb3JkX3JlcGxheSI7CitzdGF0aWMgY29uc3QgY2hhcioga0Rpck5hbWVSZXNvdXJjZXMg
PSAicmVzb3VyY2VzIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrRmlsZU5hbWVSZXBvcnRMb2FkID0g
InJlcG9ydF9sb2FkLnR4dCI7CitzdGF0aWMgY29uc3QgY2hhcioga0ZpbGVOYW1lUmVwb3J0UmVj
b3JkID0gInJlcG9ydF9yZWNvcmQudHh0IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrRmlsZU5hbWVS
ZXBvcnRSZXBsYXkgPSAicmVwb3J0X3JlcGxheS50eHQiOworCitzdGF0aWMgaW50IGtNYXhNYXRj
aCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7CitzdGF0aWMgaW50IGtNaW5NYXRj
aCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCk7CisKKy8vIFRPRE86IFdoYXQncyB0
aGUgdGhyZWFkaW5nIG1vZGVsIGluIHdoaWNoIHdlJ3JlIHJ1bm5pbmc/IFdlJ3JlIGFjdGluZyBh
cyBhCisvLyBzaW5nbGV0b24gdGhhdCBnZXRzIGNhbGxlZCBhbGwgb3ZlciB0aGUgcGxhY2UsIGJ1
dCB3ZSdyZSBub3QgZG9pbmcgYW55dGhpbmcKKy8vIHRvIHByb3RlY3Qgb3Vyc2VsZiBmcm9tIG11
bHRpLXRocmVhZGVkIGFjY2Vzcy4gT24gdGhlIG90aGVyIGhhbmQsIHBlcmhhcHMKKy8vIHdlJ3Jl
IE9LIHdpdGhvdXQgc3luY2hyb25pemF0aW9uLiBXaGVuIHJlY29yZGluZywgd2UncmUganVzdCB3
cml0aW5nIGRhdGEgdG8KKy8vIGZpbGVzLiBXaGVuIHBsYXlpbmcgdGhpbmdzIGJhY2ssIHdlIGlu
aXRpYWxpemUgb3VyIGRhdGEgdXAgZnJvbnQgYW5kIHRoZW4KKy8vIHVzZSBpdCBpbiBhIHJlYWQt
b25seSBtYW5uZXIgYWZ0ZXJ3YXJkcy4KKworTWFuYWdlciYgTWFuYWdlcjo6c2luZ2xldG9uKCkK
K3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWFuYWdlcj4gaW5zdGFuY2U7CisgICAgcmV0
dXJuIGluc3RhbmNlOworfQorCit2b2lkIE1hbmFnZXI6OmluaXRpYWxpemUoCisgICAgYm9vbCBz
aG91bGRSZWNvcmROZXR3b3JrUmVxdWVzdHMsCisgICAgYm9vbCBzaG91bGRSZXBsYXlOZXR3b3Jr
UmVxdWVzdHMsCisgICAgY29uc3QgU3RyaW5nJiByZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uKQor
eworICAgIERFQlVHX0xPRygiSW5pdGlhbGl6aW5nIik7CisKKyAgICBtX3Nob3VsZFJlY29yZE5l
dHdvcmtSZXF1ZXN0cyA9IHNob3VsZFJlY29yZE5ldHdvcmtSZXF1ZXN0czsKKyAgICBtX3Nob3Vs
ZFJlcGxheU5ldHdvcmtSZXF1ZXN0cyA9IHNob3VsZFJlcGxheU5ldHdvcmtSZXF1ZXN0czsKKyAg
ICBtX3JlY29yZFJlcGxheUNhY2hlTG9jYXRpb24gPSBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQocmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbiwga0Rpck5hbWVSZWNvcmRSZXBsYXkp
OworCisgICAgREVCVUdfTE9HKCJDYWNoZSBsb2NhdGlvbiA9ICV7cHVibGljfXMiLCBERUJVR19T
VFIobV9yZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uKSk7CisKKyAgICBpZiAobV9zaG91bGRSZXBs
YXlOZXR3b3JrUmVxdWVzdHMpCisgICAgICAgIGxvYWRDYWNoZWRSZXNvdXJjZXMoKTsKK30KKwor
dm9pZCBNYW5hZ2VyOjp0ZXJtaW5hdGUoKQoreworfQorCitDYWNoZWRSZXNvdXJjZSogTWFuYWdl
cjo6ZmluZE1hdGNoKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sK
KyAgICAvLyBERUJVR19MT0coIlVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIocmVxdWVzdC51
cmwoKS5zdHJpbmcoKSkpOworCisgICAgYXV0byBiZXN0TWF0Y2ggPSBmaW5kRXhhY3RNYXRjaChy
ZXF1ZXN0KTsKKyAgICBpZiAoIWJlc3RNYXRjaCkKKyAgICAgICAgYmVzdE1hdGNoID0gZmluZEJl
c3RGdXp6eU1hdGNoKHJlcXVlc3QpOworCisgICAgaWYgKCFiZXN0TWF0Y2gpCisgICAgICAgIERF
QlVHX0xPRygiQ291bGQgbm90IGZpbmQgbWF0Y2ggZm9yOiAle3B1YmxpY31zIiwgREVCVUdfU1RS
KHJlcXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKKyAgICBlbHNlIGlmIChyZXF1ZXN0LnVybCgpID09
IGJlc3RNYXRjaC0+dXJsKCkpCisgICAgICAgIERFQlVHX0xPRygiRm91bmQgZXhhY3QgbWF0Y2gg
Zm9yOiAle3B1YmxpY31zIiwgREVCVUdfU1RSKHJlcXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgREVCVUdfTE9HKCJGb3VuZCBmdXp6eSBtYXRjaCBmb3I6ICV7cHVi
bGljfXMiLCBERUJVR19TVFIocmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworICAgICAgICBERUJV
R19MT0coIiAgICAgICByZXBsYWNlZCB3aXRoIDogJXtwdWJsaWN9cyIsIERFQlVHX1NUUihiZXN0
TWF0Y2gtPnVybCgpLnN0cmluZygpKSk7CisgICAgfQorCisgICAgcmV0dXJuIGJlc3RNYXRjaDsK
K30KKworQ2FjaGVkUmVzb3VyY2UqIE1hbmFnZXI6OmZpbmRFeGFjdE1hdGNoKGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBjb25zdCBhdXRvJiB1cmwgPSBy
ZXF1ZXN0LnVybCgpOworICAgIGF1dG8gbG93ZXIgPSBzdGQ6Omxvd2VyX2JvdW5kKHN0ZDo6YmVn
aW4obV9jYWNoZWRSZXNvdXJjZXMpLCBzdGQ6OmVuZChtX2NhY2hlZFJlc291cmNlcyksIHVybCwg
W10oYXV0byYgcmVzb3VyY2UsIGNvbnN0IGF1dG8mIHVybCkgeworICAgICAgICByZXR1cm4gV1RG
Ojpjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4ocmVzb3VyY2UudXJsKCkuc3RyaW5nKCksIHVybC5z
dHJpbmcoKSk7CisgICAgfSk7CisKKyAgICBpZiAobG93ZXIgIT0gc3RkOjplbmQobV9jYWNoZWRS
ZXNvdXJjZXMpICYmIGxvd2VyLT51cmwoKSA9PSB1cmwpIHsKKyAgICAgICAgLy8gREVCVUdfTE9H
KCJGb3VuZCBleGFjdCBtYXRjaDogJXtwdWJsaWN9cyIsIERFQlVHX1NUUihsb3dlci0+dXJsKCku
c3RyaW5nKCkpKTsKKyAgICAgICAgcmV0dXJuICYqbG93ZXI7CisgICAgfQorCisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK0NhY2hlZFJlc291cmNlKiBNYW5hZ2VyOjpmaW5kQmVzdEZ1enp5TWF0
Y2goY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGNvbnN0
IGF1dG8mIHVybCA9IHJlcXVlc3QudXJsKCk7CisgICAgQ2FjaGVkUmVzb3VyY2UqIGJlc3RNYXRj
aCA9IG51bGxwdHI7CisgICAgaW50IGJlc3RTY29yZSA9IGtNaW5NYXRjaDsKKyAgICBjb25zdCBh
dXRvJiBiYXNlVVJMID0gYmFzZVVSTEFzU3RyaW5nKHVybCk7CisKKyAgICBjb25zdCBhdXRvJiBs
b3dlciA9IHN0ZDo6bG93ZXJfYm91bmQoc3RkOjpiZWdpbihtX2NhY2hlZFJlc291cmNlcyksIHN0
ZDo6ZW5kKG1fY2FjaGVkUmVzb3VyY2VzKSwgYmFzZVVSTCwgW10oYXV0byYgcmVzb3VyY2UsIGNv
bnN0IGF1dG8mIHVybCkgeworICAgICAgICByZXR1cm4gV1RGOjpjb2RlUG9pbnRDb21wYXJlTGVz
c1RoYW4ocmVzb3VyY2UuYmFzZVVSTCgpLnN0cmluZygpLCB1cmwpOworICAgIH0pOworICAgIGNv
bnN0IGF1dG8mIHVwcGVyID0gc3RkOjp1cHBlcl9ib3VuZChsb3dlciwgc3RkOjplbmQobV9jYWNo
ZWRSZXNvdXJjZXMpLCBiYXNlVVJMLCBbXShjb25zdCBhdXRvJiB1cmwsIGF1dG8mIHJlc291cmNl
KSB7CisgICAgICAgIHJldHVybiBXVEY6OmNvZGVQb2ludENvbXBhcmVMZXNzVGhhbihyZXNvdXJj
ZS5iYXNlVVJMKCkuc3RyaW5nKCksIHVybCk7CisgICAgfSk7CisKKyAgICBjb25zdCBhdXRvJiBy
ZXF1ZXN0UGFyYW1ldGVycyA9IFdlYkNvcmU6OlVSTFBhcnNlcjo6cGFyc2VVUkxFbmNvZGVkRm9y
bSh1cmwucXVlcnkoKSk7CisgICAgZm9yIChhdXRvIGlSZXNvdXJjZSA9IGxvd2VyOyBpUmVzb3Vy
Y2UgIT0gdXBwZXI7ICsraVJlc291cmNlKSB7CisgICAgICAgIGludCB0aGlzU2NvcmUgPSBmdXp6
eU1hdGNoVVJMcyh1cmwsIHJlcXVlc3RQYXJhbWV0ZXJzLCBpUmVzb3VyY2UtPnVybCgpLCBpUmVz
b3VyY2UtPnF1ZXJ5UGFyYW1ldGVycygpKTsKKyAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgaWdu
b3JpbmcgYW55IG1hdGNoZXMgPCAwIGFzIGJlaW5nIHRvbyBkaWZmZXJlbnQuCisgICAgICAgIGlm
IChiZXN0U2NvcmUgPCB0aGlzU2NvcmUpIHsKKyAgICAgICAgICAgIERFQlVHX0xPRygiTmV3IGJl
c3QgbWF0Y2ggKCVkKTogJXtwdWJsaWN9cyIsIHRoaXNTY29yZSwgREVCVUdfU1RSKGlSZXNvdXJj
ZS0+dXJsKCkuc3RyaW5nKCkpKTsKKyAgICAgICAgICAgIGJlc3RTY29yZSA9IHRoaXNTY29yZTsK
KyAgICAgICAgICAgIGJlc3RNYXRjaCA9ICYqaVJlc291cmNlOworICAgICAgICAgICAgaWYgKGJl
c3RTY29yZSA9PSBrTWF4TWF0Y2gpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gYmVzdE1hdGNoOworfQorCisvLyBUT0RPOiBDb252ZXJ0IHRv
IGFuIGludGVyZmFjZSBiYXNlZCBvbiBSZXNvdXJjZVJlcXVlc3Qgc28gdGhhdCB3ZSBjYW4gZG8K
Ky8vIGRlZXBlciBtYXRjaGluZy4KKworaW50IE1hbmFnZXI6OmZ1enp5TWF0Y2hVUkxzKAorICAg
IGNvbnN0IFdlYkNvcmU6OlVSTCYgcmVxdWVzdFVSTCwgY29uc3QgV2ViQ29yZTo6VVJMUGFyc2Vy
OjpVUkxFbmNvZGVkRm9ybSYgcmVxdWVzdFBhcmFtZXRlcnMsCisgICAgY29uc3QgV2ViQ29yZTo6
VVJMJiByZXNvdXJjZVVSTCwgY29uc3QgV2ViQ29yZTo6VVJMUGFyc2VyOjpVUkxFbmNvZGVkRm9y
bSYgcmVzb3VyY2VQYXJhbWV0ZXJzKQoreworICAgIC8vIFRPRE86IGNvbnNpZGVyIGFzc2VydGlu
ZyB0aGF0IGFueSB0cmFpbGluZyBzdWZmaXhlcyAoZS5nLiwgIi5qcyIsCisgICAgLy8gIi5wbmci
LCAiLmNzcyIsICIuaHRtbCIsIGV0Yy4pIHNob3VsZCBiZSBhbiBleGFjdCBtYXRjaC4KKworI2lm
IDAKKyAgICAvLyBTaG91bGQgbmV2ZXIgZ2V0IGhlcmUgYmVjYXVzZSBmaW5kRXhhY3RNYXRjaCBz
aG91bGQgYWxyZWFkeSBoYXZlIGZvdW5kCisgICAgLy8gY2FzZXMgd2hlcmUgZXZlcnl0aGluZyBt
YXRjaGVzLgorICAgIC8vIElmIGV2ZXJ5dGhpbmcgbWF0Y2hlcywgcmV0dXJuIHRoaXMgYXMgdGhl
ICJiZXN0IiBtYXRjaC4KKworICAgIGlmIChyZXF1ZXN0VVJMID09IHJlc291cmNlVVJMKSB7Cisg
ICAgICAgIERFQlVHX0xPRygiQ29tcGxldGUgbWF0Y2g6ICV7cHVibGljfXMgPT0gJXtwdWJsaWN9
cyIsCisgICAgICAgICAgICBERUJVR19TVFIocmVxdWVzdFVSTC5zdHJpbmcoKSksCisgICAgICAg
ICAgICBERUJVR19TVFIocmVzb3VyY2VVUkwuc3RyaW5nKCkpKTsKKyAgICAgICAgcmV0dXJuIGtN
YXhNYXRjaDsKKyAgICB9CisjZW5kaWYKKworICAgIC8vIFdlIGRvIGZ1enp5IG1hdGNoaW5nIG9u
IHRoZSBwYXRoIGFuZCBxdWVyeSBwYXJhbWV0ZXJzLiBTbyBsZXQncyBmaXJzdAorICAgIC8vIG1h
a2Ugc3VyZSB0aGF0IGFsbCB0aGUgb3RoZXIgcGFydHMgYXJlIGVxdWFsLgorCisgICAgLy8gSWYg
c2NoZW1lLCBob3N0LCBhbmQgcG9ydCBkb24ndCBhbGwgbWF0Y2gsIHJldHVybiB0aGlzIGFzIHRo
ZSAid29yc3QiCisgICAgLy8gbWF0Y2guCisKKyAgICBpZiAoIXByb3RvY29sSG9zdEFuZFBvcnRB
cmVFcXVhbChyZXF1ZXN0VVJMLCByZXNvdXJjZVVSTCkpIHsKKyAgICAgICAgREVCVUdfTE9HKCJT
Y2hlbWUvaG9zdC9wb3J0IG1pc21hdGNoOiAle3B1YmxpY31zICE9ICV7cHVibGljfXMiLCBERUJV
R19TVFIocmVxdWVzdFVSTC5zdHJpbmcoKSksIERFQlVHX1NUUihyZXNvdXJjZVVSTC5zdHJpbmco
KSkpOworICAgICAgICByZXR1cm4ga01pbk1hdGNoOworICAgIH0KKworICAgIC8vIElmIGZyYWdt
ZW50cyBkb24ndCBtYXRjaCwgcmV0dXJuIHRoaXMgYXMgdGhlICJ3b3JzdCIgbWF0Y2guCisKKyAg
ICBpZiAocmVxdWVzdFVSTC5mcmFnbWVudElkZW50aWZpZXIoKSAhPSByZXNvdXJjZVVSTC5mcmFn
bWVudElkZW50aWZpZXIoKSkgeworICAgICAgICBERUJVR19MT0coIkZyYWdtZW50cyBtaXNtYXRj
aDogJXtwdWJsaWN9cyAhPSAle3B1YmxpY31zIiwgREVCVUdfU1RSKHJlcXVlc3RVUkwuc3RyaW5n
KCkpLCBERUJVR19TVFIocmVzb3VyY2VVUkwuc3RyaW5nKCkpKTsKKyAgICAgICAgcmV0dXJuIGtN
aW5NYXRjaDsKKyAgICB9CisKKyAgICBERUJVR19MT0coIkZ1enp5IG1hdGNoaW5nOiIpOworICAg
IERFQlVHX0xPRygiICAgOiAle3B1YmxpY31zIiwgREVCVUdfU1RSKHJlcXVlc3RVUkwuc3RyaW5n
KCkpKTsKKyAgICBERUJVR19MT0coIiAgIDogJXtwdWJsaWN9cyIsIERFQlVHX1NUUihyZXNvdXJj
ZVVSTC5zdHJpbmcoKSkpOworCisgICAgLy8gQ29tcGFyZSB0aGUgcGF0aCBjb21wb25lbnRzIGFu
ZCB0aGUgcXVlcnkgcGFyYW1ldGVycy4gU2NvcmUgZWFjaCBwYXJ0aWFsCisgICAgLy8gbWF0Y2gg
YXMgKzQsIGVhY2ggbWlzbWF0Y2ggYXMgLTEsIGFuZCBlYWNoIG1pc3NpbmcgY29tcG9uZW50IGFz
IC0xLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGF0IHRoZSBjdXJyZW50IHRpbWUgdGhlc2Ug
dmFsdWVzIGFyZSByYXRoZXIgYXJiaXRyYXJ5IGFuZAorICAgIC8vIGNvdWxkIGZpbmUtdHVuZWQu
CisKKyAgICBjb25zdCBpbnQga1BhdGhNYXRjaFNjb3JlID0gNDsKKyAgICBjb25zdCBpbnQga1Bh
dGhNaXNtYXRjaFNjb3JlID0gLTE7CisgICAgY29uc3QgaW50IGtQYXRoTWlzc2luZ1Njb3JlID0g
LTE7CisgICAgY29uc3QgaW50IGtQYXJhbWV0ZXJNYXRjaFNjb3JlID0gNDsKKyAgICBjb25zdCBp
bnQga1BhcmFtZXRlck1pc21hdGNoU2NvcmUgPSAtMTsKKyAgICBjb25zdCBpbnQga1BhcmFtZXRl
ck1pc3NpbmdTY29yZSA9IC0xOworCisgICAgaW50IHNjb3JlID0gMDsKKworICAgIC8vIFF1YW50
aXplIHRoZSBkaWZmZXJlbmNlcyBpbiBVUkwgcGF0aHMuCisgICAgLy8KKyAgICAvLyBUaGUgYXBw
cm9hY2ggaGVyZSBpcyB0byBpbmNyZWFzZSBvdXIgc2NvcmUgZm9yIGVhY2ggbWF0Y2hpbmcgcGF0
aAorICAgIC8vIGNvbXBvbmVudCwgYW5kIHRvIHN1YnRyYWN0IGZvciBlYWNoIGRpZmZlcmluZyBj
b21wb25lbnQgYXMgd2VsbCBhcyBmb3IKKyAgICAvLyBjb21wb25lbnRzIHRoYXQgZXhpc3QgaW4g
b25lIHBhdGggYnV0IG5vdCB0aGUgb3RoZXIuCisKKyAgICBjb25zdCBhdXRvJiByZXF1ZXN0UGF0
aCA9IHJlcXVlc3RVUkwucGF0aCgpOworICAgIGNvbnN0IGF1dG8mIHJlc291cmNlUGF0aCA9IHJl
c291cmNlVVJMLnBhdGgoKTsKKworICAgIFZlY3RvcjxTdHJpbmc+IHJlcXVlc3RQYXRoQ29tcG9u
ZW50cywgcmVzb3VyY2VQYXRoQ29tcG9uZW50czsKKyAgICByZXF1ZXN0UGF0aC5zcGxpdCgnLycs
IHJlcXVlc3RQYXRoQ29tcG9uZW50cyk7CisgICAgcmVzb3VyY2VQYXRoLnNwbGl0KCcvJywgcmVz
b3VyY2VQYXRoQ29tcG9uZW50cyk7CisKKyAgICBhdXRvIHVwZGF0ZWRJdGVyYXRvcnMgPSBzdGQ6
Om1pc21hdGNoKAorICAgICAgICBzdGQ6OmJlZ2luKHJlcXVlc3RQYXRoQ29tcG9uZW50cyksIHN0
ZDo6ZW5kKHJlcXVlc3RQYXRoQ29tcG9uZW50cyksCisgICAgICAgIHN0ZDo6YmVnaW4ocmVzb3Vy
Y2VQYXRoQ29tcG9uZW50cyksIHN0ZDo6ZW5kKHJlc291cmNlUGF0aENvbXBvbmVudHMpKTsKKwor
ICAgIGF1dG8gbWF0Y2hpbmdEaXN0YW5jZSA9IHN0ZDo6ZGlzdGFuY2Uoc3RkOjpiZWdpbihyZXF1
ZXN0UGF0aENvbXBvbmVudHMpLCB1cGRhdGVkSXRlcmF0b3JzLmZpcnN0KTsKKyAgICBhdXRvIHJl
cXVlc3RQYXRoTWlzbWF0Y2hEaXN0YW5jZSA9IHN0ZDo6ZGlzdGFuY2UodXBkYXRlZEl0ZXJhdG9y
cy5maXJzdCwgc3RkOjplbmQocmVxdWVzdFBhdGhDb21wb25lbnRzKSk7CisgICAgYXV0byByZXNv
dXJjZVBhdGhNaXNtYXRjaERpc3RhbmNlID0gc3RkOjpkaXN0YW5jZSh1cGRhdGVkSXRlcmF0b3Jz
LnNlY29uZCwgc3RkOjplbmQocmVzb3VyY2VQYXRoQ29tcG9uZW50cykpOworICAgIGRlY2x0eXBl
KG1hdGNoaW5nRGlzdGFuY2UpIG1pc21hdGNoaW5nRGlzdGFuY2U7CisgICAgZGVjbHR5cGUobWF0
Y2hpbmdEaXN0YW5jZSkgbWlzc2luZ0Rpc3RhbmNlOworICAgIGlmIChyZXF1ZXN0UGF0aE1pc21h
dGNoRGlzdGFuY2UgPCByZXNvdXJjZVBhdGhNaXNtYXRjaERpc3RhbmNlKSB7CisgICAgICAgIG1p
c21hdGNoaW5nRGlzdGFuY2UgPSByZXF1ZXN0UGF0aE1pc21hdGNoRGlzdGFuY2U7CisgICAgICAg
IG1pc3NpbmdEaXN0YW5jZSA9IHJlc291cmNlUGF0aE1pc21hdGNoRGlzdGFuY2UgLSByZXF1ZXN0
UGF0aE1pc21hdGNoRGlzdGFuY2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbWlzbWF0Y2hpbmdE
aXN0YW5jZSA9IHJlc291cmNlUGF0aE1pc21hdGNoRGlzdGFuY2U7CisgICAgICAgIG1pc3NpbmdE
aXN0YW5jZSA9IHJlcXVlc3RQYXRoTWlzbWF0Y2hEaXN0YW5jZSAtIHJlc291cmNlUGF0aE1pc21h
dGNoRGlzdGFuY2U7CisgICAgfQorCisgICAgREVCVUdfTE9HKCJQYXRoIG1hdGNoaW5nIHJlc3Vs
dHM6IG1hdGNoaW5nID0gJWQsIG1pc21hdGNoaW5nID0gJWQsIG1pc3NpbmcgPSAlZCIsCisgICAg
ICAgIHN0YXRpY19jYXN0PGludD4obWF0Y2hpbmdEaXN0YW5jZSksCisgICAgICAgIHN0YXRpY19j
YXN0PGludD4obWlzbWF0Y2hpbmdEaXN0YW5jZSksCisgICAgICAgIHN0YXRpY19jYXN0PGludD4o
bWlzc2luZ0Rpc3RhbmNlKSk7CisKKyAgICBzY29yZSArPSBtYXRjaGluZ0Rpc3RhbmNlICoga1Bh
dGhNYXRjaFNjb3JlCisgICAgICAgICsgbWlzbWF0Y2hpbmdEaXN0YW5jZSAqIGtQYXRoTWlzbWF0
Y2hTY29yZQorICAgICAgICArIG1pc3NpbmdEaXN0YW5jZSAqIGtQYXRoTWlzc2luZ1Njb3JlOwor
ICAgIERFQlVHX0xPRygiU2NvcmUgPSAlZCIsIHNjb3JlKTsKKworICAgIC8vIFF1YW50aXplIHRo
ZSBkaWZmZXJlbmNlcyBpbiBxdWVyeSBwYXJhbWV0ZXJzLgorICAgIC8vCisgICAgLy8gVGhlIGFw
cHJvYWNoIGhlcmUgaXMgdG8gd2FsayBsb2NrLXN0ZXAgb3ZlciB0aGUgdHdvIHNldHMgb2YgcXVl
cnkKKyAgICAvLyBwYXJhbWV0ZXJzLiBGb3IgZWFjaCBwYWlyIG9mIHBhcmFtZXRlcnMgZm9yIGVh
Y2ggVVJMLCB3ZSBjb21wYXJlIHRoZWlyCisgICAgLy8gbmFtZXMgYW5kIHZhbHVlcy4gSWYgdGhl
IG5hbWVzIGFuZCB2YWx1ZXMgbWF0Y2gsIHdlIGFkZCBhIGhpZ2ggc2NvcmUuIElmCisgICAgLy8g
anVzdCB0aGUgbmFtZXMgbWF0Y2gsIHdlIGFkZCBhIGxvd2VyIHNjb3JlLgorICAgIC8vCisgICAg
Ly8gSWYgdGhlIG5hbWVzIGRvbid0IG1hdGNoLCB3ZSB0aGVuIGFzc3VtZSB0aGF0IHNvbWUgaW50
ZXJ2ZW5pbmcgcXVlcnkKKyAgICAvLyBwYXJhbWV0ZXJzIGhhdmUgYmVlbiBhZGRlZCB0byBvbmUg
b3IgdGhlIG90aGVyIFVSTC4gV2UgdGhlcmVmb3JlIHRyeSB0bworICAgIC8vIHN5bmMgdXAgdGhl
IGl0ZXJhdG9ycyB1c2VkIHRvIHRyYXZlcnNlIHRoZSBxdWVyeSBwYXJhbWV0ZXIgY29sbGVjdGlv
bnMKKyAgICAvLyBzbyB0aGF0IHRoZXkncmUgYWdhaW4gcG9pbnRpbmcgdG8gcGFyYW1ldGVycyB3
aXRoIHRoZSBzYW1lIG5hbWVzLiBXZQorICAgIC8vIGZpcnN0IHN0YXJ0IHNjYW5uaW5nIGZvcndh
cmQgZG93biB0aGUgcXVlcnkgcGFyYW1ldGVycyBmb3Igb25lIFVSTCwKKyAgICAvLyBsb29raW5n
IGZvciBvbmUgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBvbmUgd2UncmUgb24gaW4gdGhlIG90
aGVyIFVSTC4KKyAgICAvLyBJZiB0aGF0IGRvZXNuJ3QgdHVybiB1cCBhIG1hdGNoLCB3ZSByZXZl
cnNlIHRoZSByb2xlcyBvZiB0aGUgcXVlcnkKKyAgICAvLyBwYXJhbWV0ZXJzIHBlcmZvcm0gdGhl
IHNhbWUgcHJvY2VzcyBvZiBzY2FubmluZyBmb3J3YXJkLiBJZiBuZWl0aGVyIG9mCisgICAgLy8g
dGhlc2Ugc2NhbnMgcHJvZHVjZXMgYSBtYXRjaCwgd2UgZmlndXJlIHRoYXQgZWFjaCBxdWVyeSBw
YXJhbWV0ZXIgd2UncmUKKyAgICAvLyBsb29raW5nIGF0IGZyb20gZWFjaCBvZiB0aGUgcXVlcnkg
cGFyYW1ldGVyIGNvbGxlY3Rpb25zIGlzIHVuaXF1ZS4gV2UKKyAgICAvLyBkZWR1Y3QgcG9pbnRz
IGZyb20gdGhlIG92ZXJhbGwgc2NvcmUgYW5kIG1vdmUgb24gdG8gdGhlIG5leHQgcXVlcnkKKyAg
ICAvLyBwYXJhbWV0ZXJzIGluIGVhY2ggc2V0LgorICAgIC8vCisgICAgLy8gSWYsIG9uIHRoZSBv
dGhlciBoYW5kLCB0aGUgZm9yd2FyZC1zY2FubmluZyBkb2VzIHR1cm4gdXAgYSBtYXRjaCwgd2UK
KyAgICAvLyBhZGp1c3Qgb3V0IGl0ZXJhdG9ycyBzbyB0aGF0IHRoZXkncmUgbm93IGFnYWluIHBv
aW50aW5nIHRvIHF1ZXJ5CisgICAgLy8gcGFyYW1ldGVycyB3aXRoIHRoZSBzYW1lIG5hbWUuIFRo
aXMgc3luY2hyb25pemF0aW9uIGludm9sdmVzIHNraXBwaW5nCisgICAgLy8gb3ZlciBhbnkgaW50
ZXJ2ZW5pbmcgcXVlcnkgcGFyYW1ldGVycyBpbiBvbmUgY29sbGVjdGlvbiBvciB0aGUgb3RoZXIu
CisgICAgLy8gVGhlIGFzc3VtcHRpb24gaGVyZSBpcyB0aGF0IHRoZXNlIGludGVydmVuaW5nIHF1
ZXJ5IHBhcmFtZXRlcnMgYXJlCisgICAgLy8gaW5zZXJ0aW9ucyB0aGF0IGV4aXN0IGluIG9uZSBV
UkwgYnV0IG5vdCB0aGUgb3RoZXIuIFdlIHRyZWF0IHRoZW0gYXMKKyAgICAvLyBzdWNoLCBzdWJ0
cmFjdGluZyBmcm9tIHRoZSBvdmVyYWxsIHNjb3JlIGZvciBlYWNoIG9uZS4gSG93ZXZlciwgdGhp
cworICAgIC8vIGFzc3VtcHRpb24gbWlnaHQgZWFzaWx5IGJlIGluY29ycmVjdC4gSXQgbWlnaHQg
YmUgdGhhdCB0aGUgcXVlcnkKKyAgICAvLyBwYXJhbWV0ZXJzIHRoYXQgd2UncmUgc2tpcHBpbmcg
b3ZlciBpbiBvbmUgVVJMIG1pZ2h0IGV4aXN0IGluIHRoZSBvdGhlcgorICAgIC8vIFVSTC4gSWYg
c28sIHRoZW4gd2UgYXJlIGZvcmVnb2luZyB0aGUgcG9zc2liaWxpdHkgb2YgdXNpbmcgdGhvc2Ug
bWF0Y2hlcworICAgIC8vIHRvIGluY3JlYXNlIHRoZSBvdmVyYWxsIG1hdGNoIHNjb3JlIGJldHdl
ZW4gdGhlIHR3byBVUkxzLgorICAgIC8vCisgICAgLy8gVG8gYWRkcmVzcyB0aGlzIHByb2JsZW0s
IHdlIG1pZ2h0IHdhbnQgdG8gY29uc2lkZXIgc29ydGluZyB0aGUgcXVlcnkKKyAgICAvLyBwYXJh
bWV0ZXJzIGJ5IHRoZWlyIG5hbWVzLiBIb3dldmVyLCBkb2luZyB0aGlzIG1heSBjYXVzZSBwcm9i
bGVtcyBpZiB0aGUKKyAgICAvLyBvcmRlciBvZiB0aGUgcGFyYW1ldGVycyBpcyBzaWduaWZpY2Fu
dC4gU28gaWYgd2UgZGVjaWRlIHRvIHRha2UgdGhlCisgICAgLy8gYXBwcm9hY2ggb2Ygc29ydGlu
ZyB0aGUgcGFyYW1ldGVycywga2VlcCBpbiBtaW5kIHRoaXMgcG9zc2libGUgZHJhd2JhY2suCisK
KyAgICBhdXRvIHJlcXVlc3RQYXJhbWV0ZXIgPSBzdGQ6OmJlZ2luKHJlcXVlc3RQYXJhbWV0ZXJz
KTsKKyAgICBhdXRvIHJlc291cmNlUGFyYW1ldGVyID0gc3RkOjpiZWdpbihyZXNvdXJjZVBhcmFt
ZXRlcnMpOworCisgICAgZm9yICg7IHJlcXVlc3RQYXJhbWV0ZXIgIT0gc3RkOjplbmQocmVxdWVz
dFBhcmFtZXRlcnMpICYmIHJlc291cmNlUGFyYW1ldGVyICE9IHN0ZDo6ZW5kKHJlc291cmNlUGFy
YW1ldGVycyk7ICsrcmVxdWVzdFBhcmFtZXRlciwgKytyZXNvdXJjZVBhcmFtZXRlcikgeworICAg
ICAgICBpZiAocmVxdWVzdFBhcmFtZXRlci0+Zmlyc3QgPT0gcmVzb3VyY2VQYXJhbWV0ZXItPmZp
cnN0KSB7CisjaWYgRU5BQkxFKFdURl9JTlRFUk5BTF9ERUJVR0dJTkcpCisgICAgICAgICAgICBp
ZiAocmVxdWVzdFBhcmFtZXRlci0+c2Vjb25kID09IHJlc291cmNlUGFyYW1ldGVyLT5zZWNvbmQp
CisgICAgICAgICAgICAgICAgREVCVUdfTE9HKCJNYXRjaGluZyBwYXJhbWV0ZXIgbmFtZXMgYW5k
IHZhbHVlczogXCIle3B1YmxpY31zXCIgPSBcIiV7cHVibGljfXNcIiIsIERFQlVHX1NUUihyZXF1
ZXN0UGFyYW1ldGVyLT5maXJzdCksIERFQlVHX1NUUihyZXF1ZXN0UGFyYW1ldGVyLT5zZWNvbmQp
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBERUJVR19MT0coIk1pc21hdGNo
aW5nIHBhcmFtZXRlciB2YWx1ZXM6IFwiJXtwdWJsaWN9c1wiID0gXCIle3B1YmxpY31zXCIgdnMu
IFwiJXtwdWJsaWN9c1wiIiwgREVCVUdfU1RSKHJlcXVlc3RQYXJhbWV0ZXItPmZpcnN0KSwgREVC
VUdfU1RSKHJlcXVlc3RQYXJhbWV0ZXItPnNlY29uZCksIERFQlVHX1NUUihyZXNvdXJjZVBhcmFt
ZXRlci0+c2Vjb25kKSk7CisjZW5kaWYKKyAgICAgICAgICAgIHNjb3JlICs9IChyZXF1ZXN0UGFy
YW1ldGVyLT5zZWNvbmQgPT0gcmVzb3VyY2VQYXJhbWV0ZXItPnNlY29uZCkgPyBrUGFyYW1ldGVy
TWF0Y2hTY29yZSA6IGtQYXJhbWV0ZXJNaXNtYXRjaFNjb3JlOworICAgICAgICAgICAgREVCVUdf
TE9HKCJTY29yZSA9ICVkIiwgc2NvcmUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
REVCVUdfTE9HKCJNaXNtYXRjaGluZyBwYXJhbWV0ZXIgbmFtZXM6ICV7cHVibGljfXMsICV7cHVi
bGljfXMiLCBERUJVR19TVFIocmVxdWVzdFBhcmFtZXRlci0+Zmlyc3QpLCBERUJVR19TVFIocmVz
b3VyY2VQYXJhbWV0ZXItPmZpcnN0KSk7CisKKyAgICAgICAgICAgIGNvbnN0IGF1dG8gc2NhbkZv
cndhcmRGb3JNYXRjaCA9IFt0aGlzLCAmc2NvcmUsIGtQYXJhbWV0ZXJNYXRjaFNjb3JlLCBrUGFy
YW1ldGVyTWlzbWF0Y2hTY29yZSwga1BhcmFtZXRlck1pc3NpbmdTY29yZV0oY29uc3QgYXV0byYg
Zml4ZWRJdGVyLCBhdXRvJiBzY2FubmluZ0l0ZXIsIGNvbnN0IGF1dG8mIHNjYW5uZXJFbmQpIHsK
KyAgICAgICAgICAgICAgICBhdXRvIHNjYW5uZXIgPSBzY2FubmluZ0l0ZXI7CisgICAgICAgICAg
ICAgICAgd2hpbGUgKHNjYW5uZXIgIT0gc2Nhbm5lckVuZCAmJiBzY2FubmVyLT5maXJzdCAhPSBm
aXhlZEl0ZXItPmZpcnN0KQorICAgICAgICAgICAgICAgICAgICArK3NjYW5uZXI7CisgICAgICAg
ICAgICAgICAgaWYgKHNjYW5uZXIgPT0gc2Nhbm5lckVuZCkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIERFQlVHX0xPRygiU2tpcHBpbmcgcGFzdCAl
ZCBub24tbWF0Y2hpbmcgcGFyYW1ldGVyIG5hbWVzIiwgc3RhdGljX2Nhc3Q8aW50PihzdGQ6OmRp
c3RhbmNlKHNjYW5uaW5nSXRlciwgc2Nhbm5lcikpKTsKKyAgICAgICAgICAgICAgICBzY29yZSAr
PSBrUGFyYW1ldGVyTWlzc2luZ1Njb3JlICogc3RkOjpkaXN0YW5jZShzY2FubmluZ0l0ZXIsIHNj
YW5uZXIpOworICAgICAgICAgICAgICAgIERFQlVHX0xPRygiU2NvcmUgPSAlZCIsIHNjb3JlKTsK
KyNpZiBFTkFCTEUoV1RGX0lOVEVSTkFMX0RFQlVHR0lORykKKyAgICAgICAgICAgICAgICBpZiAo
Zml4ZWRJdGVyLT5zZWNvbmQgPT0gc2Nhbm5lci0+c2Vjb25kKQorICAgICAgICAgICAgICAgICAg
ICBERUJVR19MT0coIk1hdGNoaW5nIHBhcmFtZXRlciBuYW1lcyBhbmQgdmFsdWVzOiBcIiV7cHVi
bGljfXNcIiA9IFwiJXtwdWJsaWN9c1wiIiwgREVCVUdfU1RSKGZpeGVkSXRlci0+Zmlyc3QpLCBE
RUJVR19TVFIoZml4ZWRJdGVyLT5zZWNvbmQpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIERFQlVHX0xPRygiTWlzbWF0Y2hpbmcgcGFyYW1ldGVyIHZhbHVlczog
XCIle3B1YmxpY31zXCIgPSBcIiV7cHVibGljfXNcIiB2cy4gXCIle3B1YmxpY31zXCIiLCBERUJV
R19TVFIoZml4ZWRJdGVyLT5maXJzdCksIERFQlVHX1NUUihmaXhlZEl0ZXItPnNlY29uZCksIERF
QlVHX1NUUihzY2FubmVyLT5zZWNvbmQpKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIHNjb3Jl
ICs9IChmaXhlZEl0ZXItPnNlY29uZCA9PSBzY2FubmVyLT5zZWNvbmQpID8ga1BhcmFtZXRlck1h
dGNoU2NvcmUgOiBrUGFyYW1ldGVyTWlzbWF0Y2hTY29yZTsKKyAgICAgICAgICAgICAgICBERUJV
R19MT0coIlNjb3JlID0gJWQiLCBzY29yZSk7CisgICAgICAgICAgICAgICAgc2Nhbm5pbmdJdGVy
ID0gc2Nhbm5lcjsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07
CisKKyAgICAgICAgICAgIGlmICghc2NhbkZvcndhcmRGb3JNYXRjaChyZXF1ZXN0UGFyYW1ldGVy
LCByZXNvdXJjZVBhcmFtZXRlciwgc3RkOjplbmQocmVzb3VyY2VQYXJhbWV0ZXJzKSkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoIXNjYW5Gb3J3YXJkRm9yTWF0Y2gocmVzb3VyY2VQYXJhbWV0ZXIs
IHJlcXVlc3RQYXJhbWV0ZXIsIHN0ZDo6ZW5kKHJlcXVlc3RQYXJhbWV0ZXJzKSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgREVCVUdfTE9HKCJVbm1hdGNoZWQgcGFyYW1ldGVyOiAle3B1YmxpY31z
PSV7cHVibGljfXMiLCBERUJVR19TVFIocmVxdWVzdFBhcmFtZXRlci0+Zmlyc3QpLCBERUJVR19T
VFIocmVxdWVzdFBhcmFtZXRlci0+c2Vjb25kKSk7CisgICAgICAgICAgICAgICAgICAgIERFQlVH
X0xPRygiVW5tYXRjaGVkIHBhcmFtZXRlcjogJXtwdWJsaWN9cz0le3B1YmxpY31zIiwgREVCVUdf
U1RSKHJlc291cmNlUGFyYW1ldGVyLT5maXJzdCksIERFQlVHX1NUUihyZXNvdXJjZVBhcmFtZXRl
ci0+c2Vjb25kKSk7CisgICAgICAgICAgICAgICAgICAgIHNjb3JlICs9IGtQYXJhbWV0ZXJNaXNz
aW5nU2NvcmUgKyBrUGFyYW1ldGVyTWlzc2luZ1Njb3JlOworICAgICAgICAgICAgICAgICAgICBE
RUJVR19MT0coIlNjb3JlID0gJWQiLCBzY29yZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgREVCVUdfTE9HKCJBZGp1c3RpbmcgZm9y
IHRyYWlsaW5nIHBhcmFtZXRlcnMiKTsKKyAgICBzY29yZSArPSBrUGFyYW1ldGVyTWlzc2luZ1Nj
b3JlCisgICAgICAgICogKHN0ZDo6ZGlzdGFuY2UocmVxdWVzdFBhcmFtZXRlciwgc3RkOjplbmQo
cmVxdWVzdFBhcmFtZXRlcnMpKQorICAgICAgICAgICAgKyBzdGQ6OmRpc3RhbmNlKHJlc291cmNl
UGFyYW1ldGVyLCBzdGQ6OmVuZChyZXNvdXJjZVBhcmFtZXRlcnMpKSk7CisgICAgREVCVUdfTE9H
KCJTY29yZSA9ICVkIiwgc2NvcmUpOworCisgICAgcmV0dXJuIHNjb3JlOworfQorCit2b2lkIE1h
bmFnZXI6OmxvYWRDYWNoZWRSZXNvdXJjZXMoKQoreworICAgIFZlY3RvcjxWZWN0b3I8U3RyaW5n
Pj4gbGluZXM7CisgICAgaWYgKCFyZWFkRmlsZShyZXBvcnRSZWNvcmRQYXRoKCksIGxpbmVzKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChjb25zdCBhdXRvJiBsaW5lIDogbGluZXMpIHsK
KyAgICAgICAgaWYgKGxpbmUuc2l6ZSgpICE9IDIpIHsKKyAgICAgICAgICAgIERFQlVHX0xPR19F
UlJPUigibGluZS5zaXplID09ICVkIiwgKGludCkgbGluZS5zaXplKCkpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBDYWNoZWRSZXNvdXJjZSBuZXdSZXNvdXJj
ZShoYXNoVG9QYXRoKGxpbmVbMF0pKTsKKyAgICAgICAgbV9jYWNoZWRSZXNvdXJjZXMuYXBwZW5k
KFdURk1vdmUobmV3UmVzb3VyY2UpKTsKKyAgICB9CisKKyAgICBzdGQ6OnNvcnQoc3RkOjpiZWdp
bihtX2NhY2hlZFJlc291cmNlcyksIHN0ZDo6ZW5kKG1fY2FjaGVkUmVzb3VyY2VzKSwgW10oYXV0
byYgbGVmdCwgYXV0byYgcmlnaHQpIHsKKyAgICAgICAgcmV0dXJuIFdURjo6Y29kZVBvaW50Q29t
cGFyZUxlc3NUaGFuKGxlZnQudXJsKCkuc3RyaW5nKCksIHJpZ2h0LnVybCgpLnN0cmluZygpKTsK
KyAgICB9KTsKKworICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiBtX2NhY2hlZFJlc291cmNlcykK
KyAgICAgICAgbG9nTG9hZGVkUmVzb3VyY2UocmVzb3VyY2UpOworfQorCitTdHJpbmcgTWFuYWdl
cjo6cmVwb3J0TG9hZFBhdGgoKQoreworICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQobV9yZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uLCBrRmlsZU5hbWVSZXBvcnRM
b2FkKTsKK30KKworU3RyaW5nIE1hbmFnZXI6OnJlcG9ydFJlY29yZFBhdGgoKQoreworICAgIHJl
dHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9yZWNvcmRSZXBsYXlDYWNo
ZUxvY2F0aW9uLCBrRmlsZU5hbWVSZXBvcnRSZWNvcmQpOworfQorCitTdHJpbmcgTWFuYWdlcjo6
cmVwb3J0UmVwbGF5UGF0aCgpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChtX3JlY29yZFJlcGxheUNhY2hlTG9jYXRpb24sIGtGaWxlTmFtZVJlcG9ydFJl
cGxheSk7Cit9CisKK1N0cmluZyBNYW5hZ2VyOjpyZXF1ZXN0VG9QYXRoKGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICAvLyBUT0RPOiBjb21lIHVwIHdpdGgg
YSBtb3JlIGNvbXByZWhlbnNpdmUgaGFzaCB0aGF0IGluY2x1ZGVzIEhUVFAgbWV0aG9kCisgICAg
Ly8gYW5kIHBvc3NpYmx5IG90aGVyIHZhbHVlcyAoc3VjaCBhcyBoZWFkZXJzKS4KKworICAgIGNv
bnN0IGF1dG8mIGhhc2ggPSBzdHJpbmdUb0hhc2gocmVxdWVzdC51cmwoKS5zdHJpbmcoKSk7Cisg
ICAgY29uc3QgYXV0byYgcGF0aCA9IGhhc2hUb1BhdGgoaGFzaCk7CisgICAgcmV0dXJuIHBhdGg7
Cit9CisKK1N0cmluZyBNYW5hZ2VyOjpzdHJpbmdUb0hhc2goY29uc3QgU3RyaW5nJiBzKQorewor
ICAgIFdURjo6TUQ1IG1kNTsKKyAgICBpZiAocy5jaGFyYWN0ZXJzOCgpKQorICAgICAgICBtZDUu
YWRkQnl0ZXMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocy5jaGFyYWN0ZXJzOCgp
KSwgcy5sZW5ndGgoKSk7CisgICAgZWxzZQorICAgICAgICBtZDUuYWRkQnl0ZXMocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocy5jaGFyYWN0ZXJzMTYoKSksIDIgKiBzLmxlbmd0aCgp
KTsKKworICAgIFdURjo6TUQ1OjpEaWdlc3QgZGlnZXN0OworICAgIG1kNS5jaGVja3N1bShkaWdl
c3QpOworCisgICAgcmV0dXJuIFdURjo6YmFzZTY0VVJMRW5jb2RlKCZkaWdlc3RbMF0sIFdURjo6
TUQ1OjpoYXNoU2l6ZSk7Cit9CisKKworU3RyaW5nIE1hbmFnZXI6Omhhc2hUb1BhdGgoY29uc3Qg
U3RyaW5nJiBoYXNoKQoreworICAgIFN0cmluZyByZXN1bHQ7CisKKyAgICBjb25zdCBpbnQga051
bWJlck9mUGFyZW50RGlyZWN0b3JpZXMgPSAxOworICAgIGNvbnN0IGludCBrUGFyZW50RGlyZWN0
b3J5TmFtZUxlbmd0aCA9IDI7CisgICAgdW5zaWduZWQgaW5kZXggPSAwOworCisgICAgZm9yIChp
bnQgZGlyTnVtID0gMDsgZGlyTnVtIDwga051bWJlck9mUGFyZW50RGlyZWN0b3JpZXM7ICsrZGly
TnVtKSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoaGFzaC5zdWJzdHJpbmcoaW5kZXgsIGtQYXJl
bnREaXJlY3RvcnlOYW1lTGVuZ3RoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoJy8nKTsKKyAg
ICAgICAgaW5kZXggKz0ga1BhcmVudERpcmVjdG9yeU5hbWVMZW5ndGg7CisgICAgfQorCisgICAg
cmVzdWx0LmFwcGVuZChoYXNoLnN1YnN0cmluZyhpbmRleCkpOworICAgIGF1dG8gcGF0aDEgPSBX
ZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9yZWNvcmRSZXBsYXlDYWNoZUxvY2F0
aW9uLCBrRGlyTmFtZVJlc291cmNlcyk7CisgICAgYXV0byBwYXRoMiA9IFdlYkNvcmU6OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChwYXRoMSwgcmVzdWx0KTsKKyAgICByZXR1cm4gcGF0aDIgKyAi
LmRhdGEiOworfQorCit2b2lkIE1hbmFnZXI6OmxvZ1JlY29yZGVkUmVzb3VyY2UoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIC8vIExvZyBuZXR3b3JrIHJl
c291cmNlcyBhcyB0aGV5IGFyZSBjYWNoZWQgdG8gZGlzay4KKworICAgIGlmIChlbnN1cmVGaWxl
SGFuZGxlKHJlcG9ydFJlY29yZFBhdGgoKSwgJm1fcmVjb3JkRmlsZUhhbmRsZSkpIHsKKyAgICAg
ICAgY29uc3QgYXV0byYgdXJsID0gcmVxdWVzdC51cmwoKTsKKyAgICAgICAgcHJpbnRUb0ZpbGUo
bV9yZWNvcmRGaWxlSGFuZGxlLCAiJXMgJXNcbiIsIERFQlVHX1NUUihzdHJpbmdUb0hhc2godXJs
LnN0cmluZygpKSksIERFQlVHX1NUUih1cmwuc3RyaW5nKCkpKTsKKyAgICB9Cit9CisKK3ZvaWQg
TWFuYWdlcjo6bG9nTG9hZGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQorewor
ICAgIC8vIExvZyBjYWNoZWQgcmVzb3VyY2VzIGFzIHRoZXkgYXJlIGxvYWRlZCBmcm9tIGRpc2su
CisKKyAgICBpZiAoZW5zdXJlRmlsZUhhbmRsZShyZXBvcnRMb2FkUGF0aCgpLCAmbV9sb2FkRmls
ZUhhbmRsZSkpCisgICAgICAgIHByaW50VG9GaWxlKG1fbG9hZEZpbGVIYW5kbGUsICIlc1xuIiwg
REVCVUdfU1RSKHJlc291cmNlLnVybCgpLnN0cmluZygpKSk7Cit9CisKK3ZvaWQgTWFuYWdlcjo6
bG9nUGxheWVkQmFja1Jlc291cmNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgYm9vbCB3YXNDYWNoZU1pc3MpCit7CisgICAgLy8gTG9nIG5ldHdvcmsgcmVzb3VyY2Vz
IHRoYXQgYXJlIHJlcXVlc3RlZCBkdXJpbmcgcmVwbGF5LgorCisgICAgY29uc3QgYXV0byYgdXJs
ID0gcmVxdWVzdC51cmwoKTsKKworICAgIGlmICh3YXNDYWNoZU1pc3MpCisgICAgICAgIERFQlVH
X0xPRygiQ2FjaGUgbWlzczogVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUih1cmwuc3RyaW5n
KCkpKTsKKyAgICBlbHNlCisgICAgICAgIERFQlVHX0xPRygiQ2FjaGUgaGl0OiAgVVJMID0gJXtw
dWJsaWN9cyIsIERFQlVHX1NUUih1cmwuc3RyaW5nKCkpKTsKKworICAgIGlmIChlbnN1cmVGaWxl
SGFuZGxlKHJlcG9ydFJlcGxheVBhdGgoKSwgJm1fcmVwbGF5RmlsZUhhbmRsZSkpCisgICAgICAg
IHByaW50VG9GaWxlKG1fcmVwbGF5RmlsZUhhbmRsZSwgIiVzICVzXG4iLCB3YXNDYWNoZU1pc3Mg
PyAibWlzcyIgOiAiaGl0ICIsIERFQlVHX1NUUih1cmwuc3RyaW5nKCkpKTsKK30KKworYm9vbCBN
YW5hZ2VyOjplbnN1cmVGaWxlSGFuZGxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIEZpbGVIYW5k
bGUqIGZpbGVIYW5kbGUpCit7CisgICAgLy8gSWYgdGhlIGZpbGUgaXMgYWxyZWFkeSBvcGVuLCB0
aGVuIGRvIG5vdGhpbmcuCisKKyAgICBpZiAoZmlsZUhhbmRsZSAmJiAqZmlsZUhhbmRsZSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBUcnkgb3BlbmluZyB0aGUgZmlsZS4KKworICAg
ICpmaWxlSGFuZGxlID0gb3BlbkNhY2hlRmlsZShmaWxlUGF0aCwgV2ViQ29yZTo6T3BlbkZvcldy
aXRlKTsKKyAgICByZXR1cm4gKmZpbGVIYW5kbGU7Cit9CisKK0ZpbGVIYW5kbGUgTWFuYWdlcjo6
b3BlbkNhY2hlRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoLCBXZWJDb3JlOjpGaWxlT3Blbk1v
ZGUgbW9kZSkKK3sKKyAgICAvLyBJZiB3ZSBjYW4gdHJpdmlhbGx5IG9wZW4gdGhlIGZpbGUsIHRo
ZW4gZG8gdGhhdCBhbmQgcmV0dXJuIHRoZSBuZXcgZmlsZQorICAgIC8vIGhhbmRsZS4KKworICAg
IEZpbGVIYW5kbGUgZiA9IEZpbGVIYW5kbGU6Om9wZW5GaWxlKGZpbGVQYXRoLCBtb2RlKTsKKyAg
ICBpZiAoZikKKyAgICAgICAgcmV0dXJuIGY7CisKKyAgICAvLyBJZiB3ZSdyZSBvcGVuaW5nIHRo
ZSBmaWxlIGZvciB3cml0aW5nIChpbmNsdWRpbmcgYXBwZW5kaW5nKSwgdGhlbiB0cnkKKyAgICAv
LyBhZ2FpbiBhZnRlciBtYWtpbmcgc3VyZSBhbGwgaW50ZXJtZWRpYXRlIGRpcmVjdG9yaWVzIGhh
dmUgYmVlbiBjcmVhdGVkLgorCisgICAgaWYgKG1vZGUgIT0gV2ViQ29yZTo6T3BlbkZvclJlYWQp
IHsKKyAgICAgICAgY29uc3QgYXV0byYgcGFyZW50RGlyID0gV2ViQ29yZTo6ZGlyZWN0b3J5TmFt
ZShmaWxlUGF0aCk7CisgICAgICAgIGlmICghV2ViQ29yZTo6bWFrZUFsbERpcmVjdG9yaWVzKHBh
cmVudERpcikpIHsKKyAgICAgICAgICAgIERFQlVHX0xPR19FUlJPUigiRXJyb3IgJWQgdHJ5aW5n
IHRvIGNyZWF0ZSBpbnRlcm1lZGlhdGUgZGlyZWN0b3JpZXM6ICV7cHVibGljfXMiLCBlcnJubywg
REVCVUdfU1RSKHBhcmVudERpcikpOworICAgICAgICAgICAgcmV0dXJuIGY7CisgICAgICAgIH0K
KworICAgICAgICBmID0gRmlsZUhhbmRsZTo6b3BlbkZpbGUoZmlsZVBhdGgsIG1vZGUpOworICAg
ICAgICBpZiAoZikKKyAgICAgICAgICAgIHJldHVybiBmOworICAgIH0KKworICAgIC8vIENvdWxk
IG5vdCBvcGVuIHRoZSBmaWxlLiBMb2cgdGhlIGVycm9yIGFuZCBsZWF2ZSwgcmV0dXJuaW5nIHRo
ZSBpbnZhbGlkCisgICAgLy8gZmlsZSBoYW5kbGUuCisKKyAgICBpZiAobW9kZSA9PSBXZWJDb3Jl
OjpPcGVuRm9yUmVhZCkKKyAgICAgICAgREVCVUdfTE9HX0VSUk9SKCJFcnJvciAlZCB0cnlpbmcg
dG8gb3BlbiAle3B1YmxpY31zIGZvciByZWFkaW5nIiwgZXJybm8sIERFQlVHX1NUUihmaWxlUGF0
aCkpOworICAgIGVsc2UKKyAgICAgICAgREVCVUdfTE9HX0VSUk9SKCJFcnJvciAlZCB0cnlpbmcg
dG8gb3BlbiAle3B1YmxpY31zIGZvciB3cml0aW5nIiwgZXJybm8sIERFQlVHX1NUUihmaWxlUGF0
aCkpOworCisgICAgcmV0dXJuIGY7Cit9CisKK2Jvb2wgTWFuYWdlcjo6cmVhZEZpbGUoY29uc3Qg
U3RyaW5nJiBmaWxlUGF0aCwgVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYgbGluZXMpCit7CisgICAg
Ym9vbCBzdWNjZXNzID0gZmFsc2U7CisgICAgV2ViQ29yZTo6TWFwcGVkRmlsZURhdGEgZmlsZShm
aWxlUGF0aCwgc3VjY2Vzcyk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBhdXRvIGJlZ2luID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4o
ZmlsZS5kYXRhKCkpOworICAgIGF1dG8gZW5kID0gYmVnaW4gKyBmaWxlLnNpemUoKTsKKworICAg
IFZlY3RvcjxTdHJpbmc+IGxpbmU7CisgICAgd2hpbGUgKGdldExpbmUoYmVnaW4sIGVuZCwgbGlu
ZSkpCisgICAgICAgIGxpbmVzLmFwcGVuZChXVEZNb3ZlKGxpbmUpKTsKKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIE1hbmFnZXI6OmdldExpbmUodWludDhfdCBjb25zdCAqJiBwLCB1aW50
OF90IGNvbnN0ICogY29uc3QgZW5kLCBWZWN0b3I8U3RyaW5nPiYgbGluZSkKK3sKKyAgICAvLyBO
QjogUmV0dXJucyB0cnVlIGlmIHRoZXJlIG1heSBiZSBtb3JlIGRhdGEgdG8gZ2V0LCBmYWxzZSBp
ZiB3ZSd2ZSBoaXQKKyAgICAvLyB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisKKyAgICAvLyBERUJV
R19MT0coIkdldHRpbmcgYSBsaW5lIik7CisKKyAgICBsaW5lLmNsZWFyKCk7CisKKyAgICBpZiAo
cCA9PSBlbmQpIHsKKyAgICAgICAgLy8gREVCVUdfTE9HKCJJdGVyYXRvciBhdCBlbmQ7IHJldHVy
bmluZyBmYWxzZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgU3RyaW5n
IHdvcmQ7CisgICAgd2hpbGUgKGdldFdvcmQocCwgZW5kLCB3b3JkKSkgeworICAgICAgICBpZiAo
IXdvcmQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAvLyBERUJVR19MT0coIkFkZGluZyB3b3Jk
OiAle3B1YmxpY31zIiwgREVCVUdfU1RSKHdvcmQpKTsKKyAgICAgICAgICAgIGxpbmUuYXBwZW5k
KHdvcmQpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
TWFuYWdlcjo6Z2V0V29yZCh1aW50OF90IGNvbnN0IComIHAsIHVpbnQ4X3QgY29uc3QgKiBjb25z
dCBlbmQsIFN0cmluZyYgd29yZCkKK3sKKyAgICAvLyBOQjogUmV0dXJucyB0cnVlIGlmIGEgKHBv
c3NpYmx5IGVtcHR5KSB3b3JkIHdhcyBmb3VuZCBhbmQgdGhlcmUgbWF5IGJlCisgICAgLy8gbW9y
ZSwgZmFsc2UgaWYgd2UndmUgaGl0IHRoZSBlbmQgb2YgbGluZSBvciBidWZmZXIuCisKKyAgICAv
LyBERUJVR19MT0coIkdldHRpbmcgYSB3b3JkIik7CisKKyAgICBpZiAocCA9PSBlbmQpIHsKKyAg
ICAgICAgLy8gREVCVUdfTE9HKCJJdGVyYXRvciBhdCBlbmQ7IHJldHVybmluZyBmYWxzZSIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCpwID09ICdcbicpIHsKKyAg
ICAgICAgLy8gREVCVUdfTE9HKCJJdGVyYXRvciBoaXQgRU9MOyByZXR1cm5pbmcgZmFsc2UiKTsK
KyAgICAgICAgKytwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBl
c2NhcGluZyA9IGZhbHNlOworICAgIGJvb2wgaWdub3JpbmcgPSBmYWxzZTsKKworICAgIHdvcmQg
PSBTdHJpbmcoKTsKKworICAgIC8vIERFQlVHX0xPRygiSXRlcmF0aW5nIik7CisKKyAgICBmb3Ig
KCA7IHAgIT0gZW5kOyArK3ApIHsKKyAgICAgICAgaWYgKGlnbm9yaW5nKSB7CisgICAgICAgICAg
ICBpZiAoKnAgPT0gJ1xuJykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNl
IGlmIChlc2NhcGluZykgeworICAgICAgICAgICAgd29yZC5hcHBlbmQoKnApOworICAgICAgICAg
ICAgZXNjYXBpbmcgPSBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlmICgqcCA9PSAnIycpIHsKKyAg
ICAgICAgICAgIGlnbm9yaW5nID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmICgqcCA9PSAnXFwn
KSB7CisgICAgICAgICAgICBlc2NhcGluZyA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoKnAg
PT0gJyAnKSB7CisgICAgICAgICAgICBpZiAoIXdvcmQuaXNFbXB0eSgpKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgaWYgKCpwID09ICdcbicpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgd29yZC5hcHBlbmQoKnApOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE1hbmFnZXI6OnByaW50VG9GaWxlKGNvbnN0
IEZpbGVIYW5kbGUmIGYsIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQoreworICAgIHZhX2xpc3Qg
YXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworCisgICAgY2hhciogYnVmZmVyID0g
bnVsbHB0cjsKKyAgICB2YXNwcmludGYoJmJ1ZmZlciwgZm9ybWF0LCBhcmdzKTsKKyAgICBhdXRv
IHdyaXRlUmVzdWx0ID0gZi53cml0ZVRvRmlsZShidWZmZXIsIHN0cmxlbihidWZmZXIpKTsKKyAg
ICBmcmVlKGJ1ZmZlcik7CisKKyAgICB2YV9lbmQoYXJncyk7CisKKyAgICByZXR1cm4gd3JpdGVS
ZXN1bHQgPj0gMDsKK30KKworU3RyaW5nIE1hbmFnZXI6OmJhc2VVUkxBc1N0cmluZyhjb25zdCBX
ZWJDb3JlOjpVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gdXJsLnN0cmluZygpLmxlZnQodXJsLnBh
dGhTdGFydCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1
cmVNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdv
cmtDYXB0dXJlTWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5ZmU0Yzk3NWZjNjA2MGViZDQxYjJiYWYy
ZGQ1OGVhOGJmMzZjYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlTWFuYWdlci5oCkBAIC0wLDAgKzEsMTIzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJF
KQorCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVUeXBlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
RmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVVJMUGFyc2VyLmg+CisjaW5jbHVkZSA8
d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CitjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlIHsKKworY2xhc3MgQ2FjaGVkUmVzb3Vy
Y2U7CisKKy8qCisgKiBTZXJ2ZXMgdGhyZWUgcHVycG9zZXM6CisgKgorICogKiBLZWVwcyB0aGUg
c3RhdGUgb2Ygd2hldGhlciB3ZSBhcmUgcmVjb3JkaW5nLCByZXBsYXlpbmcsIG9yIG5laXRoZXIu
CisgKiAqIEtlZXBzIHRoZSBsaXN0IG9mIGNhY2hlZCByZXNvdXJjZXMgKGlmIHJlcGxheWluZyks
IHBlcmZvcm1zIGZ1enp5IG1hdGNoaW5nIG9uIHRoZW0uCisgKiAqIFV0aWxpdGllcyBmb3IgbG9n
Z2luZyBhbmQgZmlsZSBtYW5hZ2VtZW50LgorICoKKyAqIFRPRE86IFBlcmhhcHMgd2Ugc2hvdWxk
IGJyZWFrIHRoaXMgdXAgaW50byB0aHJlZSBjbGFzc2VzPworICovCitjbGFzcyBNYW5hZ2VyIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNYW5hZ2VyKTsKKyAgICBmcmllbmQgY2xhc3MgV1RG
OjpOZXZlckRlc3Ryb3llZDxNYW5hZ2VyPjsKKworcHVibGljOgorICAgIHN0YXRpYyBNYW5hZ2Vy
JiBzaW5nbGV0b24oKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZShib29sIHNob3VsZFJlY29yZE5l
dHdvcmtSZXF1ZXN0cywgYm9vbCBzaG91bGRSZXBsYXlOZXR3b3JrUmVxdWVzdHMsIGNvbnN0IFN0
cmluZyYgcmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbik7CisgICAgdm9pZCB0ZXJtaW5hdGUoKTsK
KworICAgIGJvb2wgaXNSZWNvcmRpbmcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFJlY29yZE5l
dHdvcmtSZXF1ZXN0czsgfQorICAgIGJvb2wgaXNSZXBsYXlpbmcoKSBjb25zdCB7IHJldHVybiBt
X3Nob3VsZFJlcGxheU5ldHdvcmtSZXF1ZXN0czsgfQorCisgICAgQ2FjaGVkUmVzb3VyY2UqIGZp
bmRNYXRjaChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKworICAgIHZvaWQgbG9n
UmVjb3JkZWRSZXNvdXJjZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2
b2lkIGxvZ0xvYWRlZFJlc291cmNlKENhY2hlZFJlc291cmNlJik7CisgICAgdm9pZCBsb2dQbGF5
ZWRCYWNrUmVzb3VyY2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCB3YXND
YWNoZU1pc3MpOworCisgICAgRmlsZUhhbmRsZSBvcGVuQ2FjaGVGaWxlKGNvbnN0IFN0cmluZyYs
IFdlYkNvcmU6OkZpbGVPcGVuTW9kZSk7CisKKyAgICBTdHJpbmcgcmVxdWVzdFRvUGF0aChjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKworcHJpdmF0ZToKKyAgICBNYW5hZ2VyKCkg
PSBkZWZhdWx0OworICAgIH5NYW5hZ2VyKCkgPSBkZWxldGU7CisKKyAgICBDYWNoZWRSZXNvdXJj
ZSogZmluZEV4YWN0TWF0Y2goY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAg
Q2FjaGVkUmVzb3VyY2UqIGZpbmRCZXN0RnV6enlNYXRjaChjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmKTsKKyAgICBpbnQgZnV6enlNYXRjaFVSTHMoCisgICAgICAgIGNvbnN0IFdlYkNv
cmU6OlVSTCYgcmVxdWVzdFVSTCwgY29uc3QgV2ViQ29yZTo6VVJMUGFyc2VyOjpVUkxFbmNvZGVk
Rm9ybSYgcmVxdWVzdFBhcmFtZXRlcnMsCisgICAgICAgIGNvbnN0IFdlYkNvcmU6OlVSTCYgcmVz
b3VyY2VVUkwsIGNvbnN0IFdlYkNvcmU6OlVSTFBhcnNlcjo6VVJMRW5jb2RlZEZvcm0mIHJlc291
cmNlUGFyYW1ldGVycyk7CisKKyAgICB2b2lkIGxvYWRDYWNoZWRSZXNvdXJjZXMoKTsKKworICAg
IFN0cmluZyByZXBvcnRMb2FkUGF0aCgpOworICAgIFN0cmluZyByZXBvcnRSZWNvcmRQYXRoKCk7
CisgICAgU3RyaW5nIHJlcG9ydFJlcGxheVBhdGgoKTsKKworICAgIFN0cmluZyBzdHJpbmdUb0hh
c2goY29uc3QgU3RyaW5nJik7CisgICAgU3RyaW5nIGhhc2hUb1BhdGgoY29uc3QgU3RyaW5nJiBo
YXNoKTsKKworICAgIGJvb2wgZW5zdXJlRmlsZUhhbmRsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRo
LCBGaWxlSGFuZGxlKik7CisKKyAgICBib29sIHJlYWRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBh
dGgsIFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mIGJ1ZmZlcik7CisgICAgYm9vbCBnZXRMaW5lKHVp
bnQ4X3QgY29uc3QgKiYgcCwgdWludDhfdCBjb25zdCAqIGNvbnN0IGVuZCwgVmVjdG9yPFN0cmlu
Zz4mIGxpbmUpOworICAgIGJvb2wgZ2V0V29yZCh1aW50OF90IGNvbnN0IComIHAsIHVpbnQ4X3Qg
Y29uc3QgKiBjb25zdCBlbmQsIFN0cmluZyYgd29yZCk7CisgICAgYm9vbCBwcmludFRvRmlsZShj
b25zdCBGaWxlSGFuZGxlJiwgY29uc3QgY2hhciogZm9ybWF0LCAuLi4pOworCisgICAgU3RyaW5n
IGJhc2VVUkxBc1N0cmluZyhjb25zdCBXZWJDb3JlOjpVUkwmKTsKKworcHJpdmF0ZToKKyAgICBi
b29sIG1fc2hvdWxkUmVjb3JkTmV0d29ya1JlcXVlc3RzIHsgZmFsc2UgfTsKKyAgICBib29sIG1f
c2hvdWxkUmVwbGF5TmV0d29ya1JlcXVlc3RzIHsgZmFsc2UgfTsKKworICAgIFN0cmluZyBtX3Jl
Y29yZFJlcGxheUNhY2hlTG9jYXRpb247CisKKyAgICBGaWxlSGFuZGxlIG1fbG9hZEZpbGVIYW5k
bGU7CisgICAgRmlsZUhhbmRsZSBtX3JlcGxheUZpbGVIYW5kbGU7CisgICAgRmlsZUhhbmRsZSBt
X3JlY29yZEZpbGVIYW5kbGU7CisKKyAgICBWZWN0b3I8Q2FjaGVkUmVzb3VyY2U+IG1fY2FjaGVk
UmVzb3VyY2VzOworfTsKKworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1
cmVSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05l
dHdvcmtDYXB0dXJlUmVjb3JkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzNTY5NWJiZmRiNjQ0Yjg0NTBl
ZTVkZDJjOTMzOTY4YzBkNjFmZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVjb3JkZXIuY3BwCkBAIC0wLDAg
KzEsMTgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5l
dHdvcmtDYXB0dXJlUmVjb3JkZXIuaCIKKworI2luY2x1ZGUgIkVuY29kZXIuaCIKKyNpbmNsdWRl
ICJOZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZU1hbmFn
ZXIuaCIKKyNpbmNsdWRlICJTdHJpbmdSZWZlcmVuY2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1No
YXJlZEJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgorCisjZGVmaW5lIERFQlVHX0NM
QVNTIE1hbmFnZXIKKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhcHR1
cmUgeworCitzdGF0aWMgY29uc3QgY2hhciBrTWVzc2FnZVJlY2VpdmVyTmFtZVtdID0gIngiOyAv
LyBNdXN0IGJlIG5vbi1lbXB0eS4KK3N0YXRpYyBjb25zdCBjaGFyIGtNZXNzYWdlTmFtZVtdID0g
IiI7CitzdGF0aWMgY29uc3QgdWludDY0X3Qga0Rlc3RpbmF0aW9uSUQgPSAwOworCit2b2lkIFJl
Y29yZGVyOjpyZWNvcmRSZXF1ZXN0U2VudChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QpCit7CisgICAgLy8gVGhpcyBjbGFzcyByZWNvcmRzIE5ldHdvcmtMb2FkJ3MgcHJv
Y2VzcyBvZiBsb2FkaW5nIGEgbmV0d29yayByZXNvdXJjZS4KKyAgICAvLyBOZXR3b3JrTG9hZCBk
b2VzIHRoaXMgYnkgY3JlYXRpbmcgYSBOZXR3b3JrRGF0YVRhc2sgYW5kIGNhbGxpbmcgcmVzdW1l
CisgICAgLy8gb24gaXQuIFRoaXMgY2FsbCB0byByZXN1bWUgY2FuIGJlIGNhbGxlZCBpbW1lZGlh
dGVseSBhZnRlciB0aGUgdGFzayBoYXMKKyAgICAvLyBiZWVuIGNyZWF0ZWQsIG9yIC0tIGlmIHRo
ZSBsb2FkaW5nIGlzIG1hcmtlZCBhcyBkZWZlcnJlZCAtLSBpdCBjYW4gYmUKKyAgICAvLyBjYWxs
ZWQgbGF0ZXIgaW4gTmV0d29ya0xvYWQ6OnNldERlZmVycmVkKHRydWUpLiBJbiBmYWN0LCB0aGUg
bGF0dGVyIGNhbgorICAgIC8vIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBpZiB0aGUgbG9hZGlu
ZyBpcyBzdXNwZW5kZWQgYW5kIHJlc3VtZWQKKyAgICAvLyBtdWx0aXBsZSB0aW1lcy4KKyAgICAv
LworICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbiBib3RoIHBsYWNlcyB3aGVyZSByZXN1
bWUgaXMgY2FsbGVkLiBPdXIgdGFzayBpcworICAgIC8vIHRvIGNhdGNoIHRoZSBjYWxsIHRvIE5l
dHdvcmtEYXRhVGFzazo6cmVzdW1lIHRoYXQgc3RhcnRzIHRoZSBuZXR3b3JrCisgICAgLy8gbG9h
ZGluZyBwcm9jZXNzLiBXZSB3YW50IHRvIGlnbm9yZSB0aGUgb3RoZXIgY2FsbHMgdG8gcmVzdW1l
LiBPdXIKKyAgICAvLyBhcHByb2FjaCB0byBrbm93aW5nIHdoaWNoIG9uZSBpcyB0aGUgZmlyc3Qg
aXMgdG8gY2hlY2sgb3V0IGNvbGxlY3Rpb24gb2YKKyAgICAvLyByZWNvcmRlZCBldmVudHMuIElm
IGl0IGlzIGVtcHR5LCB0aGVuIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgaW50byB0aGUKKyAgICAv
LyByZWNvcmRlciwgYW5kIHdlIHdhbnQgdG8gcmVjb3JkIHRoZSBldmVudC4gT3RoZXJ3aXNlLCBp
Z25vcmUgaXQuCisKKyAgICBpZiAobV9ldmVudHMuc2l6ZSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBERUJVR19MT0coIlNlbnQgcmVxdWVzdCBmb3IgVVJMID0gJXtwdWJsaWN9cyIsIERFQlVH
X1NUUihyZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisKKyAgICBtX2luaXRpYWxSZXF1ZXN0ID0g
cmVxdWVzdDsKKyAgICByZWNvcmRFdmVudChSZXF1ZXN0U2VudEV2ZW50KHJlcXVlc3QpKTsKK30K
Kwordm9pZCBSZWNvcmRlcjo6cmVjb3JkUmVzcG9uc2VSZWNlaXZlZChjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICAvLyBDYWxsZWQgd2hlbiByZWNlaXZp
bmcgYSByZXNwb25zZSBvdGhlciB0aGFuIGEgcmVkaXJlY3Qgb3IgZXJyb3IuCisKKyAgICBERUJV
R19MT0coIlJlY2VpdmVkIHJlc3BvbnNlIGZyb20gVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NU
UihyZXNwb25zZS51cmwoKS5zdHJpbmcoKSkpOworICAgIEFTU0VSVChtX2V2ZW50cy5zaXplKCkp
OworCisgICAgLy8gVE9ETzogSXMgdGhlcmUgYSBiZXR0ZXIgcmVzcG9uc2UgdG8gcmVjZWl2aW5n
IGEgbXVsdGktcGFydCByZXNvdXJjZT8KKyAgICAvLyBMZWFybiBtb3JlIGFib3V0IG11bHRpLXBh
cnQgcmVzb3VyY2VzLiBXaHkgZG9uJ3Qgd2UgcmVjb3JkIHRoZXNlPyAoTm90ZSwKKyAgICAvLyB0
aGlzIGRlY2lzaW9uIGlzIGJhc2VkIG9uIHNvbWUgTmV0d29ya0NhY2hlIGNvZGUuKQorCisgICAg
aWYgKCFyZXNwb25zZS5pc011bHRpcGFydCgpKQorICAgICAgICByZWNvcmRFdmVudChSZXNwb25z
ZVJlY2VpdmVkRXZlbnQocmVzcG9uc2UpKTsKKyAgICBlbHNlCisgICAgICAgIG1fZXZlbnRzLmNs
ZWFyKCk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnJlY29yZFJlZGlyZWN0UmVjZWl2ZWQoY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBERUJVR19MT0coIlJlY2VpdmVkIHJlZGlyZWN0
IHRvIFVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIocmVxdWVzdC51cmwoKS5zdHJpbmcoKSkp
OworICAgIEFTU0VSVChtX2V2ZW50cy5zaXplKCkpOworCisgICAgcmVjb3JkRXZlbnQoUmVkaXJl
Y3RSZWNlaXZlZEV2ZW50KHJlcXVlc3QsIHJlc3BvbnNlKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6
OnJlY29yZFJlZGlyZWN0U2VudChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QpCit7CisgICAgREVCVUdfTE9HKCJTZW50IHJlZGlyZWN0IGZvciBVUkwgPSAle3B1YmxpY31z
IiwgREVCVUdfU1RSKHJlcXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKKyAgICBBU1NFUlQobV9ldmVu
dHMuc2l6ZSgpKTsKKworICAgIHJlY29yZEV2ZW50KFJlZGlyZWN0U2VudEV2ZW50KHJlcXVlc3Qp
KTsKK30KKwordm9pZCBSZWNvcmRlcjo6cmVjb3JkRGF0YVJlY2VpdmVkKFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlciYgYnVmZmVyKQoreworICAgIERFQlVHX0xPRygiUmVjZWl2ZWQgJXUgYnl0ZXMgb2Yg
ZGF0YSIsIGJ1ZmZlci5zaXplKCkpOworCisgICAgaWYgKCFtX2V2ZW50cy5zaXplKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIFByZXZlbnQgbWVtb3J5IGdyb3d0aCBpbiBjYXNlIG9mIHN0
cmVhbWluZyBkYXRhLiBUT0RPOiBJcyB0aGVyZSBhIGJldHRlcgorICAgIC8vIHJlc3BvbnNlIHRv
IHRoaXM/IElmIHdlIGVuY291bnRlciB0aGlzIGNvbmRpdGlvbiwgYWxsIG9mIG91ciByZWNvcmRp
bmcKKyAgICAvLyBzaWxlbnRseSBnb2VzIG91dCB0aGUgd2luZG93LiBSZXBsYXkgd2lsbCBub3Qg
d29yaywgYW5kIHRoZSB1c2VyIGRvZXNuJ3QKKyAgICAvLyBrbm93IHRoYXQuCisKKyAgICBjb25z
dGV4cHIgc2l6ZV90IGtNYXhpbXVtQ2FjaGVCdWZmZXJTaXplID0gMTAgKiAxMDI0ICogMTAyNDsK
KyAgICBtX2RhdGFMZW5ndGggKz0gYnVmZmVyLnNpemUoKTsKKyAgICBpZiAobV9kYXRhTGVuZ3Ro
IDw9IGtNYXhpbXVtQ2FjaGVCdWZmZXJTaXplKQorICAgICAgICByZWNvcmRFdmVudChEYXRhUmVj
ZWl2ZWRFdmVudChidWZmZXIpKTsKKyAgICBlbHNlCisgICAgICAgIG1fZXZlbnRzLmNsZWFyKCk7
Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnJlY29yZEZpbmlzaChjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZUVycm9yJiBlcnJvcikKK3sKKyAgICBERUJVR19MT0coIkZpbmlzaGVkIik7CisKKyAgICBpZiAo
IW1fZXZlbnRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVjb3JkRXZlbnQoRmlu
aXNoZWRFdmVudChlcnJvcikpOworICAgIHdyaXRlRXZlbnRzKCk7Cit9CisKK3ZvaWQgUmVjb3Jk
ZXI6OndyaXRlRXZlbnRzKCkKK3sKKyAgICAvLyBUT0RPOiBEZXRlcm1pbmUgd2hhdCB0byBkbyBp
ZiB3ZSdyZSBhc2tlZCB0byBjYWNoZSBhIHJlc291cmNlIHRoYXQncworICAgIC8vIGFscmVhZHkg
aW4gdGhlIGNhY2hlLiBXaGF0IGRvZXMgc3VjaCBhbiBvY2N1cnJlbmNlIG1lYW4/IFNob3VsZG4n
dCBvdXIKKyAgICAvLyBub3JtYWwgY2FjaGVzIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZz8g
KFBhcnRpYWwgYW5zd2VyOiBpdCdzCisgICAgLy8gcG9zc2libGUgZm9yIHRoZSBzYW1lIHJlc291
cmNlIHRvIGJlIHJlcXVlc3RlZCBtdWx0aXBsZSB0aW1lcyBpbgorICAgIC8vIGRpZmZlcmVudCB3
YXlzLiBGb3IgaW5zdGFuY2UsIGl0IGNhbiBiZSBjYWxsZWQgd2l0aCBkaWZmZXJlbnQgSFRUUAor
ICAgIC8vIG1ldGhvZHMgb3Igd2l0aCBkaWZmZXJlbnQgaGVhZGVycy4gV2UgbmVlZCB0byBhY2Nv
dW50IGZvciB0aGF0LikKKworICAgIC8vIFRPRE86VXNpbmcgSVBDOjpFbmNvZGVyIGlzIGEgYml0
IGhlYXZ5LWhhbmRlZC4gSXQgd3JpdGVzIG91dCBhIGhlYWRlciB3ZQorICAgIC8vIGRvbid0IG5l
ZWQsIGFuZCBJJ20gbm90IHN1cmUgd2UgbmVlZCB0byBhYmlkZSBieSBpdHMgYWxpZ25tZW50IHJ1
bGVzLgorICAgIC8vIE5ldHdvcmtDYWNoZSBoYXMgaXRzIG93biBFbmNvZGVyL0RlY29kZXIgLS0g
cGVyaGFwcyB3ZSBzaG91bGQgdGFrZSB0aGUKKyAgICAvLyBzYW1lIGFwcHJvYWNoLiBIb3dldmVy
LCB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aG9zZSBjbGFzc2VzIGRpcmVjdGx5LgorICAgIC8vIEZp
cnN0LCB0aGV5IGRvIHNvbWUgY2hlY2tzdW1taW5nIHRoYXQgd2UgZG9uJ3QgbmVlZC4gU2Vjb25k
LCBJJ3ZlIGJlZW4KKyAgICAvLyB3YXJuZWQgbm90IHRvIHJlbHkgb24gdGhlIHN0b3JhZ2UgZm9y
bWF0IG9mIE5ldHdvcmtDYWNoZSwgd2hpY2ggbWVhbnMKKyAgICAvLyBub3QgdXNpbmcgdGhlaXIg
c3RvcmFnZSBjbGFzc2VzIGRpcmVjdGx5LiBUaGlyZCwgc2luY2Ugd2UgbGltaXQKKyAgICAvLyBy
ZXNvdXJjZXMgdG8gMTBNaUIsIHdlIGRvbid0IG5lZWQgdG8gc3RvcmUgYWxsIGxlbmd0aHMgYXMg
NjQtYml0IHZhbHVlczsKKyAgICAvLyAzMi1iaXQgd2lsbCB3b3JrIGZpbmUuCisKKyAgICBJUEM6
OkVuY29kZXIgZW5jb2RlcihrTWVzc2FnZVJlY2VpdmVyTmFtZSwga01lc3NhZ2VOYW1lLCBrRGVz
dGluYXRpb25JRCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBldmVudCA6IG1fZXZlbnRzKSB7Cisg
ICAgICAgIFdURjo6dmlzaXQoW3RoaXMsICZlbmNvZGVyXShjb25zdCBhdXRvJiBldmVudCkgewor
ICAgICAgICAgICAgYXV0byB0eXBlID0gZXZlbnQua1R5cGU7CisgICAgICAgICAgICBlbmNvZGVy
IDw8IHR5cGU7CisgICAgICAgICAgICBldmVudC5lbmNvZGUoZW5jb2Rlcik7CisgICAgICAgIH0s
IGV2ZW50KTsKKyAgICB9CisKKyAgICBGaWxlSGFuZGxlIGhhbmRsZSA9IG9wZW5GaWxlRm9yUmVx
dWVzdChtX2luaXRpYWxSZXF1ZXN0KTsKKyAgICBpZiAoIWhhbmRsZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGhhbmRsZS53cml0ZVRvRmlsZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVy
LmJ1ZmZlclNpemUoKSkgPT0gLTEpCisgICAgICAgIERFQlVHX0xPR19FUlJPUigiRXJyb3IgdHJ5
aW5nIHRvIHdyaXRlIHRvIGZpbGUgZm9yIFVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9p
bml0aWFsUmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworfQorCitGaWxlSGFuZGxlIFJlY29yZGVy
OjpvcGVuRmlsZUZvclJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0KQoreworICAgIFN0cmluZyBwYXRoID0gTWFuYWdlcjo6c2luZ2xldG9uKCkucmVxdWVzdFRv
UGF0aChyZXF1ZXN0KTsKKyAgICBhdXRvIGhhbmRsZSA9IE1hbmFnZXI6OnNpbmdsZXRvbigpLm9w
ZW5DYWNoZUZpbGUocGF0aCwgV2ViQ29yZTo6T3BlbkZvcldyaXRlKTsKKworICAgIGlmIChoYW5k
bGUpCisgICAgICAgIE1hbmFnZXI6OnNpbmdsZXRvbigpLmxvZ1JlY29yZGVkUmVzb3VyY2UocmVx
dWVzdCk7CisKKyAgICByZXR1cm4gaGFuZGxlOworfQorCit9IC8vIG5hbWVzcGFjZSBOZXR3b3Jr
Q2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVjb3JkZXIuaCBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZWNvcmRlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjA3YTNiNDMxMjY5ZjA0YmIyNzg0YTQ5OTRkZDk5MDI1MTEzZmUzYmQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05l
dHdvcmtDYXB0dXJlUmVjb3JkZXIuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorCisjaW5jbHVkZSAiTmV0
d29ya0NhcHR1cmVFdmVudC5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlVHlwZXMuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
KyNpbmNsdWRlIDxjaHJvbm8+CisjaW5jbHVkZSA8dXRpbGl0eT4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworY2xhc3MgUmVzb3VyY2VFcnJvcjsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKK2NsYXNz
IFJlc291cmNlUmVzcG9uc2U7CitjbGFzcyBTaGFyZWRCdWZmZXI7Cit9CisKK25hbWVzcGFjZSBJ
UEMgeworY2xhc3MgRW5jb2RlcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2Ug
TmV0d29ya0NhcHR1cmUgeworCitjbGFzcyBSZWNvcmRlciB7CitwdWJsaWM6CisgICAgdm9pZCBy
ZWNvcmRSZXF1ZXN0U2VudChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2
b2lkIHJlY29yZFJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYpOworICAgIHZvaWQgcmVjb3JkUmVkaXJlY3RSZWNlaXZlZChjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdm9p
ZCByZWNvcmRSZWRpcmVjdFNlbnQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Cisg
ICAgdm9pZCByZWNvcmREYXRhUmVjZWl2ZWQoV2ViQ29yZTo6U2hhcmVkQnVmZmVyJik7CisgICAg
dm9pZCByZWNvcmRGaW5pc2goY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOworCitwcml2
YXRlOgorICAgIHZvaWQgd3JpdGVFdmVudHMoKTsKKyAgICBGaWxlSGFuZGxlIG9wZW5GaWxlRm9y
UmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKworICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgorICAgIHZvaWQgcmVjb3JkRXZlbnQoVCYmIGV2ZW50KQorICAgIHsKKyAg
ICAgICAgbV9ldmVudHMuYXBwZW5kKENhcHR1cmVFdmVudChXVEZNb3ZlKGV2ZW50KSkpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICB1c2luZyBDYXB0dXJlRXZlbnRzID0gVmVjdG9yPENhcHR1cmVF
dmVudD47CisgICAgQ2FwdHVyZUV2ZW50cyBtX2V2ZW50czsKKyAgICBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QgbV9pbml0aWFsUmVxdWVzdDsKKyAgICBzaXplX3QgbV9kYXRhTGVuZ3RoIHsgMCB9
OworfTsKKworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXBsYXll
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0
dXJlUmVwbGF5ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyZDVlNTQ3M2RjMGE2NTI4MDU4MDBiM2U3M2Yy
MWQ0NzBlMTU0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuY3BwCkBAIC0wLDAgKzEsNTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1
cmVSZXBsYXllci5oIgorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKworI2luY2x1ZGUg
Ik5ldHdvcmtDYXB0dXJlTG9nZ2luZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlTWFuYWdl
ci5oIgorI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFza1JlcGxheS5oIgorI2luY2x1ZGUgIk5ldHdv
cmtMb2FkUGFyYW1ldGVycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+
CisKKyNkZWZpbmUgREVCVUdfQ0xBU1MgUmVwbGF5ZXIKKworbmFtZXNwYWNlIFdlYktpdCB7Citu
YW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgeworCitSZXBsYXllcjo6UmVwbGF5ZXIoKQoreworfQor
CitSZWY8TmV0d29ya0RhdGFUYXNrPiBSZXBsYXllcjo6cmVwbGF5UmVzb3VyY2UoTmV0d29ya1Nl
c3Npb24mIHNlc3Npb24sIE5ldHdvcmtEYXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBOZXR3
b3JrTG9hZFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCit7CisgICAgYXV0byBmb3VuZFJlc291cmNl
ID0gTWFuYWdlcjo6c2luZ2xldG9uKCkuZmluZE1hdGNoKHBhcmFtZXRlcnMucmVxdWVzdCk7Cisg
ICAgTWFuYWdlcjo6c2luZ2xldG9uKCkubG9nUGxheWVkQmFja1Jlc291cmNlKHBhcmFtZXRlcnMu
cmVxdWVzdCwgIWZvdW5kUmVzb3VyY2UpOworICAgIHJldHVybiBOZXR3b3JrRGF0YVRhc2tSZXBs
YXk6OmNyZWF0ZShzZXNzaW9uLCBjbGllbnQsIHBhcmFtZXRlcnMsIGZvdW5kUmVzb3VyY2UpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVw
bGF5ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40NTI4NDA3MTU4NDYzZmVkZTYwODRjOGY0NjA3NDc3N2U4Njlh
ZGE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fw
dHVyZS9OZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKworI2luY2x1
ZGUgPHd0Zi9SZWYuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBOZXR3b3JrRGF0YVRh
c2s7CitjbGFzcyBOZXR3b3JrRGF0YVRhc2tDbGllbnQ7CitjbGFzcyBOZXR3b3JrTG9hZFBhcmFt
ZXRlcnM7CitjbGFzcyBOZXR3b3JrU2Vzc2lvbjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7Citu
YW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgeworCitjbGFzcyBSZXBsYXllciB7CitwdWJsaWM6Cisg
ICAgUmVwbGF5ZXIoKTsKKyAgICBSZWY8TmV0d29ya0RhdGFUYXNrPiByZXBsYXlSZXNvdXJjZShO
ZXR3b3JrU2Vzc2lvbiYsIE5ldHdvcmtEYXRhVGFza0NsaWVudCYsIGNvbnN0IE5ldHdvcmtMb2Fk
UGFyYW1ldGVycyYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0Nh
cHR1cmVUeXBlcy5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3
b3JrQ2FwdHVyZVR5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTJmNjliZTMxNmM5OTc4OWI4ZTU4YzJlNjMw
MmZkOTJiZDViNTk4NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVUeXBlcy5oCkBAIC0wLDAgKzEsMTAzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQor
CisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CituYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgeworCitjbGFzcyBGaWxlSGFuZGxlIGZpbmFsIHsK
K3B1YmxpYzoKKyAgICBGaWxlSGFuZGxlKCkKKyAgICAgICAgOiBtX2ZpbGVIYW5kbGUoV2ViQ29y
ZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkgeyB9CisgICAgRmlsZUhhbmRsZShXZWJDb3Jl
OjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZUhhbmRsZSkKKyAgICAgICAgOiBtX2ZpbGVIYW5kbGUo
ZmlsZUhhbmRsZSkgeyB9CisgICAgRmlsZUhhbmRsZShGaWxlSGFuZGxlJiYgb3RoZXIpCisgICAg
ICAgIDogbV9maWxlSGFuZGxlKHN0ZDo6ZXhjaGFuZ2Uob3RoZXIubV9maWxlSGFuZGxlLCBXZWJD
b3JlOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKSkgeyB9CisgICAgfkZpbGVIYW5kbGUoKQor
ICAgIHsKKyAgICAgICAgY2xvc2VGaWxlKCk7CisgICAgfQorICAgIEZpbGVIYW5kbGUmIG9wZXJh
dG9yPShXZWJDb3JlOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZUhhbmRsZSkKKyAgICB7CisgICAg
ICAgIGNsb3NlRmlsZSgpOworICAgICAgICBtX2ZpbGVIYW5kbGUgPSBmaWxlSGFuZGxlOworICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIEZpbGVIYW5kbGUmIG9wZXJhdG9yPShGaWxl
SGFuZGxlJiYgb3RoZXIpCisgICAgeworICAgICAgICBjbG9zZUZpbGUoKTsKKyAgICAgICAgbV9m
aWxlSGFuZGxlID0gc3RkOjpleGNoYW5nZShvdGhlci5tX2ZpbGVIYW5kbGUsIFdlYkNvcmU6Omlu
dmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpOworICAgICAgICByZXR1cm4qdGhpczsKKyAgICB9CisK
KyAgICBGaWxlSGFuZGxlKGNvbnN0IEZpbGVIYW5kbGUmKSA9IGRlbGV0ZTsKKyAgICBGaWxlSGFu
ZGxlJiBvcGVyYXRvcj0oY29uc3QgRmlsZUhhbmRsZSYpID0gZGVsZXRlOworCisgICAgb3BlcmF0
b3IgV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlKCkgY29uc3QgeyByZXR1cm4gbV9maWxlSGFu
ZGxlOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIFdlYkNv
cmU6OmlzSGFuZGxlVmFsaWQobV9maWxlSGFuZGxlKTsgfQorCisgICAgc3RhdGljIEZpbGVIYW5k
bGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBXZWJDb3JlOjpGaWxlT3Blbk1vZGUgbW9k
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBGaWxlSGFuZGxlKFdlYkNvcmU6Om9wZW5GaWxlKHBh
dGgsIG1vZGUpKTsKKyAgICB9CisgICAgaW50IHJlYWRGcm9tRmlsZSh2b2lkKiBkYXRhLCBpbnQg
bGVuZ3RoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OnJlYWRGcm9tRmls
ZShtX2ZpbGVIYW5kbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRhdGEpLCBsZW5ndGgpOwor
ICAgIH0KKyAgICBpbnQgd3JpdGVUb0ZpbGUoY29uc3Qgdm9pZCogZGF0YSwgaW50IGxlbmd0aCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjp3cml0ZVRvRmlsZShtX2ZpbGVI
YW5kbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLCBsZW5ndGgpOworICAg
IH0KKyAgICB2b2lkIGNsb3NlRmlsZSgpCisgICAgeworICAgICAgICBXZWJDb3JlOjpjbG9zZUZp
bGUobV9maWxlSGFuZGxlKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgV2ViQ29yZTo6UGxhdGZv
cm1GaWxlSGFuZGxlIG1fZmlsZUhhbmRsZTsKK307CisKKwordGVtcGxhdGUgPHR5cGVuYW1lIC4u
LiBUeXBlcz4KK3N0cnVjdCBUeXBlSG9sZGVyIHsKKyAgICAvLyBBIFdURjo6VmFyaWFudCBvZiB0
aGUgZ2l2ZW4gVHlwZXMuCisgICAgdXNpbmcgVmFyaWFudFR5cGUgPSBXVEY6OlZhcmlhbnQ8VHlw
ZXMuLi4+OworCisgICAgLy8gVGhlIDAtYmFzZWQgaW5kZXggaW4gVHlwZXMgd2hlcmUgUmVxdWVz
dGVkVHlwZSBjYW4gYmUgZm91bmQuCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFJlcXVlc3RlZFR5
cGU+CisgICAgc3RhdGljIGNvbnN0IGF1dG8gVHlwZUluZGV4ID0gV1RGOjpfX3R5cGVfaW5kZXg8
UmVxdWVzdGVkVHlwZSwgVHlwZXMuLi4+OjpfX3ZhbHVlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
TmV0d29ya0NhcHR1cmUKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KE5FVFdPUktfQ0FQVFVSRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhcHR1cmUvTmV0d29ya0RhdGFUYXNrUmVwbGF5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0RhdGFUYXNrUmVwbGF5LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42MjY2NTJmZjA4M2RkMDdkZWIwMjhlMGZhYzcxOTU4OGFkYTc1NmM1Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRh
c2tSZXBsYXkuY3BwCkBAIC0wLDAgKzEsMzA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFza1JlcGxheS5oIgorCisjaWYgRU5BQkxF
KE5FVFdPUktfQ0FQVFVSRSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlQ2FjaGVkUmVzb3Vy
Y2UuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZUV2ZW50LmgiCisjaW5jbHVkZSAiTmV0d29y
a0NhcHR1cmVMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmgiCisj
aW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0hUVFBIZWFkZXJO
YW1lcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSFRUUFBhcnNlcnMuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1BhcnNlZENvbnRlbnRSYW5nZS5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKKyNk
ZWZpbmUgREVCVUdfQ0xBU1MgTmV0d29ya0RhdGFUYXNrUmVwbGF5CisKK25hbWVzcGFjZSBXZWJL
aXQgeworbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IHdlYktpdFJlbGF5RG9tYWluID0gIldlYktpdFJlcGxheSI7CisKK05ldHdvcmtEYXRhVGFz
a1JlcGxheTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5KE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBO
ZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNsaWVudCwgY29uc3QgTmV0d29ya0xvYWRQYXJhbWV0ZXJz
JiBwYXJhbWV0ZXJzLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCisgICAgOiBOZXR3b3JrRGF0
YVRhc2soc2Vzc2lvbiwgY2xpZW50LCBwYXJhbWV0ZXJzLnJlcXVlc3QsIHBhcmFtZXRlcnMuYWxs
b3dTdG9yZWRDcmVkZW50aWFscywgcGFyYW1ldGVycy5zaG91bGRDbGVhclJlZmVycmVyT25IVFRQ
U1RvSFRUUFJlZGlyZWN0KQorICAgICwgbV9jdXJyZW50UmVxdWVzdChtX2ZpcnN0UmVxdWVzdCkK
KyAgICAsIG1fcmVzb3VyY2UocmVzb3VyY2UpCit7CisgICAgREVCVUdfTE9HKCJyZXF1ZXN0IFVS
TCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9maXJzdFJlcXVlc3QudXJsKCkuc3RyaW5nKCkp
KTsKKyAgICBERUJVR19MT0coImNhY2hlZCBVUkwgPSAle3B1YmxpY31zIiwgcmVzb3VyY2UgPyBE
RUJVR19TVFIocmVzb3VyY2UtPnVybCgpLnN0cmluZygpKSA6ICI8bm90IGZvdW5kPiIpOworCisg
ICAgbV9zZXNzaW9uLT5yZWdpc3Rlck5ldHdvcmtEYXRhVGFzaygqdGhpcyk7CisKKyAgICBpZiAo
cmVzb3VyY2UpCisgICAgICAgIG1fZXZlbnRTdHJlYW0gPSByZXNvdXJjZS0+ZXZlbnRTdHJlYW0o
KTsKK30KKworTmV0d29ya0RhdGFUYXNrUmVwbGF5Ojp+TmV0d29ya0RhdGFUYXNrUmVwbGF5KCkK
K3sKKyAgICBERUJVR19MT0coIlVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9maXJzdFJl
cXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKKworICAgIG1fc2Vzc2lvbi0+dW5yZWdpc3Rlck5ldHdv
cmtEYXRhVGFzaygqdGhpcyk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjpyZXN1
bWUoKQoreworICAgIERFQlVHX0xPRygiVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2Zp
cnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworCisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6
OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fc3RhdGUgPSBTdGF0ZTo6UnVubmluZzsKKworICAgIGlmIChtX3NjaGVkdWxl
ZEZhaWx1cmVUeXBlICE9IE5vRmFpbHVyZSkgeworICAgICAgICBBU1NFUlQobV9mYWlsdXJlVGlt
ZXIuaXNBY3RpdmUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlbnF1ZXVlQ2Fj
aGVkRXZlbnRIYW5kbGVyKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjpzdXNw
ZW5kKCkKK3sKKyAgICBERUJVR19MT0coIlVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9m
aXJzdFJlcXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKKworICAgIGlmIChtX3N0YXRlID09IFN0YXRl
OjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3N0YXRlID0gU3RhdGU6OlN1c3BlbmRlZDsKK30KKwordm9pZCBOZXR3b3Jr
RGF0YVRhc2tSZXBsYXk6OmNhbmNlbCgpCit7CisgICAgREVCVUdfTE9HKCIiKTsKKworICAgIGlm
IChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxl
dGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXRlID0gU3RhdGU6OkNhbmNlbGluZzsK
K30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmNvbXBsZXRlKCkKK3sKKyAgICBERUJV
R19MT0coIlVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9maXJzdFJlcXVlc3QudXJsKCku
c3RyaW5nKCkpKTsKKworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q29tcGxldGVkOworICAgIG1fcmVz
b3VyY2UgPSBudWxscHRyOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza1JlcGxheTo6aW52YWxp
ZGF0ZUFuZENhbmNlbCgpCit7CisgICAgREVCVUdfTE9HKCJVUkwgPSAle3B1YmxpY31zIiwgREVC
VUdfU1RSKG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisKKyAgICBjYW5jZWwoKTsK
KyAgICBjb21wbGV0ZSgpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza1JlcGxheTo6ZW5xdWV1
ZUNhY2hlZEV2ZW50SGFuZGxlcigpCit7CisgICAgREVCVUdfTE9HKCJVUkwgPSAle3B1YmxpY31z
IiwgREVCVUdfU1RSKG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisKKyAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KV0geworICAgICAgICBERUJVR19MT0coImVucXVldWVDYWNoZWRFdmVudEhhbmRsZXIgY2FsbGJh
Y2siKTsKKworICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6U3VzcGVuZGVkKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcg
fHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICFtX2NsaWVudCkgeworICAgICAgICAg
ICAgY29tcGxldGUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICghbV9yZXNvdXJjZSkgeworICAgICAgICAgICAgREVCVUdfTE9HX0VSUk9SKCJFcnJvciBs
b2FkaW5nIHJlc291cmNlOiBjb3VsZCBub3QgZmluZCBjYWNoZWQgcmVzb3VyY2UsIFVSTCA9ICV7
cHVibGljfXMiLCBERUJVR19TVFIobV9jdXJyZW50UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOwor
ICAgICAgICAgICAgZGlkRmluaXNoKEVycm9yOjpOb3RGb3VuZEVycm9yKTsgLy8gVE9ETzogVHVy
biB0aGlzIGludG8gYSA0MDQ/CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1fY3VycmVudFJlcXVlc3Qu
aHR0cE1ldGhvZCgpLCAiZ2V0IikpIHsKKyAgICAgICAgICAgIERFQlVHX0xPR19FUlJPUigiRXJy
b3IgbG9hZGluZyByZXNvdXJjZTogdW5zdXBwb3J0ZWQgbWV0aG9kICgle3B1YmxpY31zKSwgVVJM
ID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2N1cnJlbnRSZXF1ZXN0Lmh0dHBNZXRob2QoKSks
IERFQlVHX1NUUihtX2N1cnJlbnRSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisgICAgICAgICAg
ICBkaWRGaW5pc2goRXJyb3I6Ok1ldGhvZE5vdEFsbG93ZWQpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgYXV0byBldmVudCA9IG1fZXZlbnRTdHJlYW0ubmV4dEV2
ZW50KCk7CisgICAgICAgIGlmICghZXZlbnQpIHsKKyAgICAgICAgICAgIERFQlVHX0xPR19FUlJP
UigiRXJyb3IgbG9hZGluZyByZXNvdXJjZTogbmV4dEV2ZW50IHJldHVybiBudWxsLCBVUkwgPSAl
e3B1YmxpY31zIiwgREVCVUdfU1RSKG1fY3VycmVudFJlcXVlc3QudXJsKCkuc3RyaW5nKCkpKTsK
KyAgICAgICAgICAgIGRpZEZpbmlzaChFcnJvcjo6Tm90Rm91bmRFcnJvcik7IC8vIFRPRE86IFR1
cm4gdGhpcyBpbnRvIGEgNDA0PworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgY29uc3QgYXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcigKKyAgICAgICAgICAg
IFt0aGlzXShjb25zdCBSZXF1ZXN0U2VudEV2ZW50JiBldmVudCkgeworICAgICAgICAgICAgICAg
IHJlcGxheVJlcXVlc3RTZW50KGV2ZW50KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBb
dGhpc10oY29uc3QgUmVzcG9uc2VSZWNlaXZlZEV2ZW50JiBldmVudCkgeworICAgICAgICAgICAg
ICAgIHJlcGxheVJlc3BvbnNlUmVjZWl2ZWQoZXZlbnQpOworICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgIFt0aGlzXShjb25zdCBSZWRpcmVjdFJlY2VpdmVkRXZlbnQmIGV2ZW50KSB7CisgICAg
ICAgICAgICAgICAgcmVwbGF5UmVkaXJlY3RSZWNlaXZlZChldmVudCk7CisgICAgICAgICAgICB9
LAorICAgICAgICAgICAgW3RoaXNdKGNvbnN0IFJlZGlyZWN0U2VudEV2ZW50JiBldmVudCkgewor
ICAgICAgICAgICAgICAgIHJlcGxheVJlZGlyZWN0U2VudChldmVudCk7CisgICAgICAgICAgICB9
LAorICAgICAgICAgICAgW3RoaXNdKGNvbnN0IERhdGFSZWNlaXZlZEV2ZW50JiBldmVudCkgewor
ICAgICAgICAgICAgICAgIHJlcGxheURhdGFSZWNlaXZlZChldmVudCk7CisgICAgICAgICAgICB9
LAorICAgICAgICAgICAgW3RoaXNdKGNvbnN0IEZpbmlzaGVkRXZlbnQmIGV2ZW50KSB7CisgICAg
ICAgICAgICAgICAgcmVwbGF5RmluaXNoZWQoZXZlbnQpOworICAgICAgICAgICAgfSk7CisKKyAg
ICAgICAgV1RGOjp2aXNpdCh2aXNpdG9yLCAqZXZlbnQpOworICAgIH0pOworfQorCit2b2lkIE5l
dHdvcmtEYXRhVGFza1JlcGxheTo6cmVwbGF5UmVxdWVzdFNlbnQoY29uc3QgUmVxdWVzdFNlbnRF
dmVudCYgZXZlbnQpCit7CisgICAgREVCVUdfTE9HKCJVUkwgPSAle3B1YmxpY31zIiwgREVCVUdf
U1RSKG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisKKyNpZiAwCisgICAgLy8gVE9E
TzogTm90IGFuIGVycm9yIGlmIGZ1enp5IG1hdGNoaW5nIHJldHVybmVkIGEgc2xpZ2h0bHkgZGlm
ZmVyZW50IFVSTC4KKyAgICAvLyBCdXQgd2UgbWlnaHQgd2FudCB0byBjaGVjayB0aGF0IHRoZSBt
YWpvciBwYXJ0cyBtYXRjaC4KKyAgICBpZiAoZXZlbnQucmVxdWVzdC51cmwoKSAhPSBtX2N1cnJl
bnRSZXF1ZXN0LnVybCgpKSB7CisgICAgICAgIERFQlVHX0xPR19FUlJPUigiTWlzbWF0Y2hpbmcg
cmVxdWVzdCBVUkxzOiIpOworICAgICAgICBERUJVR19MT0dfRVJST1IoIiAgICBtX2N1cnJlbnRS
ZXF1ZXN0LnVybDogJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2N1cnJlbnRSZXF1ZXN0LnVybCgp
LnN0cmluZygpKSk7CisgICAgICAgIERFQlVHX0xPR19FUlJPUigiICAgIGV2ZW50LnJlcXVlc3Qu
dXJsOiAle3B1YmxpY31zIiwgREVCVUdfU1RSKGV2ZW50LnJlcXVlc3QudXJsKCkuc3RyaW5nKCkp
KTsKKyAgICB9CisjZW5kaWYKKworICAgIGVucXVldWVDYWNoZWRFdmVudEhhbmRsZXIoKTsKK30K
Kwordm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnJlcGxheVJlc3BvbnNlUmVjZWl2ZWQoY29u
c3QgUmVzcG9uc2VSZWNlaXZlZEV2ZW50JiBldmVudCkKK3sKKyAgICBERUJVR19MT0coIlVSTCA9
ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9maXJzdFJlcXVlc3QudXJsKCkuc3RyaW5nKCkpKTsK
KworICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UoZXZlbnQucmVzcG9uc2Up
OworICAgIGRpZFJlY2VpdmVSZXNwb25zZShXVEZNb3ZlKHJlc3BvbnNlKSk7Cit9CisKK3ZvaWQg
TmV0d29ya0RhdGFUYXNrUmVwbGF5OjpyZXBsYXlSZWRpcmVjdFJlY2VpdmVkKGNvbnN0IFJlZGly
ZWN0UmVjZWl2ZWRFdmVudCYgZXZlbnQpCit7CisgICAgREVCVUdfTE9HKCJVUkwgPSAle3B1Ymxp
Y31zIiwgREVCVUdfU1RSKG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisKKyAgICBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlY2VpdmVkUmVzcG9uc2UgPSBldmVudC5yZXNwb25z
ZTsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVjZWl2ZWRSZXF1ZXN0ID0gZXZlbnQu
cmVxdWVzdDsKKworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQtPndpbGxQZXJm
b3JtSFRUUFJlZGlyZWN0aW9uKFdURk1vdmUocmVjZWl2ZWRSZXNwb25zZSksIFdURk1vdmUocmVj
ZWl2ZWRSZXF1ZXN0KSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgdXBkYXRlZFJlcXVlc3QpIHsKKyAgICAgICAg
REVCVUdfTE9HKCJyZXBsYXlSZWRpcmVjdFJlY2VpdmVkIGNhbGxiYWNrOiBVUkwgPSAle3B1Ymxp
Y31zIiwgREVCVUdfU1RSKG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisKKyAgICAg
ICAgbV9jdXJyZW50UmVxdWVzdCA9IHVwZGF0ZWRSZXF1ZXN0OworICAgICAgICBlbnF1ZXVlQ2Fj
aGVkRXZlbnRIYW5kbGVyKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrUmVw
bGF5OjpyZXBsYXlSZWRpcmVjdFNlbnQoY29uc3QgUmVkaXJlY3RTZW50RXZlbnQmIGV2ZW50KQor
eworICAgIERFQlVHX0xPRygiVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2ZpcnN0UmVx
dWVzdC51cmwoKS5zdHJpbmcoKSkpOworCisjaWYgMAorICAgIC8vIFRPRE86IE5vdCBhbiBlcnJv
ciBpZiBmdXp6eSBtYXRjaGluZyByZXR1cm5lZCBhIHNsaWdodGx5IGRpZmZlcmVudCBVUkwuCisg
ICAgLy8gQnV0IHdlIG1pZ2h0IHdhbnQgdG8gY2hlY2sgdGhhdCB0aGUgbWFqb3IgcGFydHMgbWF0
Y2guCisgICAgaWYgKGV2ZW50LnJlcXVlc3QudXJsKCkgIT0gbV9jdXJyZW50UmVxdWVzdC51cmwo
KSkgeworICAgICAgICBERUJVR19MT0dfRVJST1IoIk1pc21hdGNoaW5nIHJlcXVlc3QgVVJMczoi
KTsKKyAgICAgICAgREVCVUdfTE9HX0VSUk9SKCIgICAgbV9jdXJyZW50UmVxdWVzdC51cmw6ICV7
cHVibGljfXMiLCBERUJVR19TVFIobV9jdXJyZW50UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOwor
ICAgICAgICBERUJVR19MT0dfRVJST1IoIiAgICBldmVudC5yZXF1ZXN0LnVybDogJXtwdWJsaWN9
cyIsIERFQlVHX1NUUihldmVudC5yZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisgICAgfQorI2Vu
ZGlmCisKKyAgICBlbnF1ZXVlQ2FjaGVkRXZlbnRIYW5kbGVyKCk7Cit9CisKK3ZvaWQgTmV0d29y
a0RhdGFUYXNrUmVwbGF5OjpyZXBsYXlEYXRhUmVjZWl2ZWQoY29uc3QgRGF0YVJlY2VpdmVkRXZl
bnQmIGV2ZW50KQoreworICAgIERFQlVHX0xPRygiVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NU
UihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworCisgICAgQVNTRVJUKG1fY2xpZW50
KTsKKyAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEoZXZlbnQuZGF0YS5jb3B5UmVmKCkpOwor
CisgICAgZW5xdWV1ZUNhY2hlZEV2ZW50SGFuZGxlcigpOworfQorCit2b2lkIE5ldHdvcmtEYXRh
VGFza1JlcGxheTo6cmVwbGF5RmluaXNoZWQoY29uc3QgRmluaXNoZWRFdmVudCYgLypldmVudCov
KQoreworICAgIERFQlVHX0xPRygiVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2ZpcnN0
UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworCisgICAgZGlkRmluaXNoKC8qZXZlbnQqLyk7Cit9
CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjpkaWRSZWNlaXZlUmVzcG9uc2UoV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSYmIHJlc3BvbnNlLCBFcnJvciBlcnJvckNvZGUpCit7CisgICAg
REVCVUdfTE9HKCIoJXUpIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVycm9yQ29kZSkpOworCisg
ICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlTmV0
d29ya1Nlc3Npb24oV1RGTW92ZShyZXNwb25zZSksIFt0aGlzLCBlcnJvckNvZGUsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oV2ViQ29yZTo6UG9saWN5QWN0aW9uIHBvbGljeUFjdGlv
bikgeworICAgICAgICBERUJVR19MT0coImRpZFJlY2VpdmVSZXNwb25zZSBjYWxsYmFjayAoJXUp
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBvbGljeUFjdGlvbikpOworCisgICAgICAgIGlmICht
X3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVk
KSB7CisgICAgICAgICAgICBjb21wbGV0ZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGVycm9yQ29kZSAhPSBFcnJvcjo6Tm9FcnJvcikgeworICAgICAg
ICAgICAgZGlkRmluaXNoKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBzd2l0Y2ggKHBvbGljeUFjdGlvbikgeworICAgICAgICBjYXNlIFdlYkNvcmU6OlBvbGlj
eUFjdGlvbjo6UG9saWN5VXNlOgorICAgICAgICAgICAgZW5xdWV1ZUNhY2hlZEV2ZW50SGFuZGxl
cigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6UG9saWN5QWN0
aW9uOjpQb2xpY3lJZ25vcmU6CisgICAgICAgICAgICBjb21wbGV0ZSgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6UG9saWN5QWN0aW9uOjpQb2xpY3lEb3dubG9h
ZDoKKyAgICAgICAgICAgIERFQlVHX0xPR19FUlJPUigiV2ViQ29yZTo6UG9saWN5QWN0aW9uOjpQ
b2xpY3lEb3dubG9hZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9KTsK
K30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmRpZEZpbmlzaChFcnJvciBlcnJvckNv
ZGUpCit7CisgICAgREVCVUdfTE9HKCIoJXUpIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVycm9y
Q29kZSkpOworCisgICAgY29tcGxldGUoKTsKKworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAg
aWYgKGVycm9yQ29kZSAhPSBFcnJvcjo6Tm9FcnJvcikKKyAgICAgICAgbV9jbGllbnQtPmRpZENv
bXBsZXRlV2l0aEVycm9yKFdlYkNvcmU6OlJlc291cmNlRXJyb3Iod2ViS2l0UmVsYXlEb21haW4s
IHN0YXRpY19jYXN0PGludD4oZXJyb3JDb2RlKSwgbV9maXJzdFJlcXVlc3QudXJsKCksIFN0cmlu
ZygpKSk7CisgICAgZWxzZQorICAgICAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3Io
eyB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0RhdGFUYXNrUmVw
bGF5LmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtEYXRh
VGFza1JlcGxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyZTBmOGJmMzY4MzVkMzE1MDMwMzhkYjhlMjg3MWI4
ZjEyYWI1NTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYXB0dXJlL05ldHdvcmtEYXRhVGFza1JlcGxheS5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorCisj
aW5jbHVkZSAiTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5oIgorI2luY2x1ZGUgIk5ldHdv
cmtEYXRhVGFzay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBSZXNvdXJjZVJlcXVl
c3Q7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgTmV0d29ya0RhdGFUYXNrQ2xpZW50
OworY2xhc3MgTmV0d29ya0xvYWRQYXJhbWV0ZXJzOworY2xhc3MgTmV0d29ya1Nlc3Npb247Cit9
CisKK25hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlIHsKKworc3Ry
dWN0IFJlcXVlc3RTZW50RXZlbnQ7CitzdHJ1Y3QgUmVzcG9uc2VSZWNlaXZlZEV2ZW50Oworc3Ry
dWN0IFJlZGlyZWN0UmVjZWl2ZWRFdmVudDsKK3N0cnVjdCBSZWRpcmVjdFNlbnRFdmVudDsKK3N0
cnVjdCBEYXRhUmVjZWl2ZWRFdmVudDsKK3N0cnVjdCBGaW5pc2hlZEV2ZW50OworCitjbGFzcyBO
ZXR3b3JrRGF0YVRhc2tSZXBsYXkgOiBwdWJsaWMgTmV0d29ya0RhdGFUYXNrIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPE5ldHdvcmtEYXRhVGFza1JlcGxheT4gY3JlYXRlKE5ldHdvcmtTZXNz
aW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNsaWVudCwgY29uc3QgTmV0d29y
a0xvYWRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBOZXR3b3JrRGF0YVRhc2tSZXBsYXko
c2Vzc2lvbiwgY2xpZW50LCBwYXJhbWV0ZXJzLCByZXNvdXJjZSkpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBOZXR3b3JrRGF0YVRhc2tSZXBsYXkoTmV0d29ya1Nlc3Npb24mLCBOZXR3b3JrRGF0
YVRhc2tDbGllbnQmLCBjb25zdCBOZXR3b3JrTG9hZFBhcmFtZXRlcnMmLCBDYWNoZWRSZXNvdXJj
ZSopOworICAgIH5OZXR3b3JrRGF0YVRhc2tSZXBsYXkoKSBvdmVycmlkZTsKKworICAgIHZvaWQg
cmVzdW1lKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzdXNwZW5kKCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBjYW5jZWwoKSBvdmVycmlkZTsKKyAgICB2b2lkIGNvbXBsZXRlKCk7CisgICAgdm9pZCBpbnZh
bGlkYXRlQW5kQ2FuY2VsKCkgb3ZlcnJpZGU7CisKKyAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG1fc3RhdGU7IH0KKworICAgIHZvaWQgZW5xdWV1ZUNhY2hlZEV2ZW50
SGFuZGxlcigpOworcHVibGljOgorICAgIHZvaWQgcmVwbGF5UmVxdWVzdFNlbnQoY29uc3QgUmVx
dWVzdFNlbnRFdmVudCYpOworICAgIHZvaWQgcmVwbGF5UmVzcG9uc2VSZWNlaXZlZChjb25zdCBS
ZXNwb25zZVJlY2VpdmVkRXZlbnQmKTsKKyAgICB2b2lkIHJlcGxheVJlZGlyZWN0UmVjZWl2ZWQo
Y29uc3QgUmVkaXJlY3RSZWNlaXZlZEV2ZW50Jik7CisgICAgdm9pZCByZXBsYXlSZWRpcmVjdFNl
bnQoY29uc3QgUmVkaXJlY3RTZW50RXZlbnQmKTsKKyAgICB2b2lkIHJlcGxheURhdGFSZWNlaXZl
ZChjb25zdCBEYXRhUmVjZWl2ZWRFdmVudCYpOworICAgIHZvaWQgcmVwbGF5RmluaXNoZWQoY29u
c3QgRmluaXNoZWRFdmVudCYpOworCitwcml2YXRlOgorICAgIGVudW0gY2xhc3MgRXJyb3Igewor
ICAgICAgICBOb0Vycm9yID0gMCwKKyAgICAgICAgTm90Rm91bmRFcnJvciA9IDEsCisgICAgICAg
IE1ldGhvZE5vdEFsbG93ZWQgPSA1CisgICAgfTsKKworICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3Bv
bnNlKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJiwgRXJyb3IgPSBFcnJvcjo6Tm9FcnJvcik7
CisgICAgdm9pZCBkaWRGaW5pc2goRXJyb3IgPSBFcnJvcjo6Tm9FcnJvcik7CisKK3ByaXZhdGU6
CisgICAgZW51bSB7IGtQb3NpdGlvbk5vdFNwZWNpZmllZCA9IC0xIH07CisKKyAgICBTdGF0ZSBt
X3N0YXRlIHsgU3RhdGU6OlN1c3BlbmRlZCB9OworICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCBtX2N1cnJlbnRSZXF1ZXN0OworICAgIENhY2hlZFJlc291cmNlKiBtX3Jlc291cmNlOworICAg
IENhY2hlZFJlc291cmNlOjpFdmVudFN0cmVhbSBtX2V2ZW50U3RyZWFtOworfTsKKworfSAvLyBu
YW1lc3BhY2UgTmV0d29ya0NhcHR1cmUKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KaW5kZXggNDlkNGQ1YmQ1YTk5ZDRk
OTgxMTE2YTA4YTEzMjdkNTAxY2JhYjk1MS4uMWVmYjIwZTJkMzdmNTRhZWJmMTVlMmVhNGU4MjFm
M2ZhZTkwMGQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dl
YlByb2Nlc3NQb29sQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29h
L1dlYlByb2Nlc3NQb29sQ29jb2EubW0KQEAgLTg3LDYgKzg3LDEyIEBAIHN0YXRpYyBOU1N0cmlu
ZyAqIGNvbnN0IFdlYktpdE5ldHdvcmtMb2FkVGhyb3R0bGVMYXRlbmN5TWlsbGlzZWNvbmRzRGVm
YXVsdHNLZXkKIAogc3RhdGljIE5TU3RyaW5nICogY29uc3QgV2ViS2l0VmFyaWF0aW9uRm9udHNF
bmFibGVkRGVmYXVsdHNLZXkgPSBAIkV4cGVyaW1lbnRhbFZhcmlhdGlvbkZvbnRzRW5hYmxlZCI7
CiAKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorc3RhdGljIE5TU3RyaW5nICogY29uc3Qg
V2ViS2l0UmVjb3JkTmV0d29ya1JlcXVlc3RzRGVmYXVsdHNLZXkgPSBAIldlYktpdFJlY29yZE5l
dHdvcmtSZXF1ZXN0cyI7CitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBXZWJLaXRSZXBsYXlOZXR3
b3JrUmVxdWVzdHNEZWZhdWx0c0tleSA9IEAiV2ViS2l0UmVwbGF5TmV0d29ya1JlcXVlc3RzIjsK
K3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdlYktpdFJlY29yZFJlcGxheUNhY2hlTG9jYXRpb25E
ZWZhdWx0c0tleSA9IEAiV2ViS2l0UmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbiI7CisjZW5kaWYK
KwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIE5TU3RyaW5nICpTY2hlbWVGb3JDdXN0b21Qcm90b2Nv
bFJlZ2lzdGVyZWROb3RpZmljYXRpb25OYW1lID0gQCJXZWJLaXRTY2hlbWVGb3JDdXN0b21Qcm90
b2NvbFJlZ2lzdGVyZWROb3RpZmljYXRpb24iOwpAQCAtMjYyLDYgKzI2OCwxNCBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYQogI2VuZGlmCiAKICAgICBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQ
YXJ0aXRpb25pbmdFbmFibGVkID0gY29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoKTsK
KworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisgICAgcGFyYW1ldGVycy5zaG91bGRSZWNv
cmROZXR3b3JrUmVxdWVzdHMgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpXZWJLaXRSZWNvcmROZXR3
b3JrUmVxdWVzdHNEZWZhdWx0c0tleV07CisgICAgcGFyYW1ldGVycy5zaG91bGRSZXBsYXlOZXR3
b3JrUmVxdWVzdHMgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpXZWJLaXRSZXBsYXlOZXR3b3JrUmVx
dWVzdHNEZWZhdWx0c0tleV07CisgICAgcGFyYW1ldGVycy5yZWNvcmRSZXBsYXlDYWNoZUxvY2F0
aW9uID0gW2RlZmF1bHRzIHN0cmluZ0ZvcktleTpXZWJLaXRSZWNvcmRSZXBsYXlDYWNoZUxvY2F0
aW9uRGVmYXVsdHNLZXldOworICAgIGlmIChwYXJhbWV0ZXJzLnJlY29yZFJlcGxheUNhY2hlTG9j
YXRpb24uaXNFbXB0eSgpKQorICAgICAgICBwYXJhbWV0ZXJzLnJlY29yZFJlcGxheUNhY2hlTG9j
YXRpb24gPSBwYXJhbWV0ZXJzLmRpc2tDYWNoZURpcmVjdG9yeTsKKyNlbmRpZgogfQogCiB2b2lk
IFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUludmFsaWRhdGVDb250ZXh0KCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmNDkyMGE1
MjdhMzFmNjBjYTM3ZjdmNmQ4MGZjNGY4NTdhMjUwMDRmLi5mNDA5MDczOGZmNmE4YmQ5OWRhM2Q3
OWRkYWI3M2ZkYjMxNDAzODE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDM5LDYgKzEwMzksMjAgQEAKIAkJNTJENUExQjAx
QzU3NDk1QTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQUExQzU3NDk0
RTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oICovOyB9OwogCQk1
MkQ1QTFCMTFDNTc0OTYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUEx
QUMxQzU3NDk0RTAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSAq
LzsgfTsKIAkJNTJENUExQjcxQzU3NEEwMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1h
bmFnZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MkQ1QTFCNDFDNTc0OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSAq
LzsgfTsKKwkJNTMwMjU4M0IxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlQ2FjaGVk
UmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTMwMjU4MkUxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlQ2FjaGVkUmVzb3Vy
Y2UuY3BwICovOyB9OworCQk1MzAyNTgzQzFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1
cmVDYWNoZWRSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTMwMjU4MkYxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlQ2FjaGVk
UmVzb3VyY2UuaCAqLzsgfTsKKwkJNTMwMjU4M0QxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtD
YXB0dXJlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwMjU4MzAxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuY3Bw
ICovOyB9OworCQk1MzAyNTgzRTFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVFdmVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4
MzExRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuaCAqLzsgfTsKKwkJNTMw
MjU4M0YxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTG9nZ2luZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MzIxRENCQkQxRDAw
REE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTG9nZ2luZy5oICovOyB9OworCQk1MzAyNTg0MDFEQ0JC
RDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1ODMzMURDQkJEMUQwMERBODlDMiAv
KiBOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuY3BwICovOyB9OworCQk1MzAyNTg0MTFEQ0JCRDIyMDBE
QTg5QzIgLyogTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgzNDFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29y
a0NhcHR1cmVNYW5hZ2VyLmggKi87IH07CisJCTUzMDI1ODQyMURDQkJEMjIwMERBODlDMiAvKiBO
ZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzMDI1ODM1MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVy
ZVJlY29yZGVyLmNwcCAqLzsgfTsKKwkJNTMwMjU4NDMxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdv
cmtDYXB0dXJlUmVjb3JkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzMDI1ODM2MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlY29y
ZGVyLmggKi87IH07CisJCTUzMDI1ODQ0MURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVy
ZVJlcGxheWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzMDI1ODM3MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmNw
cCAqLzsgfTsKKwkJNTMwMjU4NDUxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVw
bGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
MDI1ODM4MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmggKi87IH07
CisJCTUzRTI2MDY1MUREQTk0OEUwMDU5MDgxOCAvKiBOZXR3b3JrQ2FwdHVyZVR5cGVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0UyNjA2NDFEREE5
NDgxMDA1OTA4MTggLyogTmV0d29ya0NhcHR1cmVUeXBlcy5oICovOyB9OworCQk1MzAyNTg0NjFE
Q0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0RhdGFUYXNrUmVwbGF5LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1ODM5MURDQkJEMUQwMERBODlD
MiAvKiBOZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwICovOyB9OworCQk1MzAyNTg0NzFEQ0JCRDIy
MDBEQTg5QzIgLyogTmV0d29ya0RhdGFUYXNrUmVwbGF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgzQTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0
d29ya0RhdGFUYXNrUmVwbGF5LmggKi87IH07CiAJCTUzMjE1OTUzMURCQUU3MTgwMDU0QUEzQyAv
KiBOZXR3b3JrU2Vzc2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MzIxNTk1MjFEQkFFNkZDMDA1NEFBM0MgLyogTmV0d29ya1Nlc3Npb24uY3Bw
ICovOyB9OwogCQk1MzIxNTk1NDFEQkFFNzFEMDA1NEFBM0MgLyogTmV0d29ya0RhdGFUYXNrLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMjE1OTUx
MURCQUU2RkMwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2suY3BwICovOyB9OwogCQk1MzIxNTk1
NTFEQkFFNzI5MDA1NEFBM0MgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMyMTU5NTAxREJBRTZENzAwNTRBQTND
IC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCAqLzsgfTsKQEAgLTMxMjksNiArMzE0MywyMCBAQAog
CQk1MkQ1QTFCMjFDNTc0OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDVBMUIzMUM1NzQ5RjIwMERF
MzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW47IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDVBMUI0MUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTMwMjU4MkUxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlQ2Fj
aGVkUmVzb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0
d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0
dXJlL05ldHdvcmtDYXB0dXJlQ2FjaGVkUmVzb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MzAyNTgyRjFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVDYWNo
ZWRSZXNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrQ2Fw
dHVyZUNhY2hlZFJlc291cmNlLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdv
cmtDYXB0dXJlQ2FjaGVkUmVzb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTMwMjU4MzAxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya0NhcHR1cmVFdmVudC5jcHA7
IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzAyNTgzMTFEQ0JCRDFEMDBEQTg5QzIgLyog
TmV0d29ya0NhcHR1cmVFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBO
ZXR3b3JrQ2FwdHVyZUV2ZW50Lmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdv
cmtDYXB0dXJlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMwMjU4MzIx
RENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTG9nZ2luZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaDsgcGF0aCA9IE5ldHdv
cmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVMb2dnaW5nLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUzMDI1ODMzMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVy
ZU1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29y
a0NhcHR1cmVNYW5hZ2VyLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29y
a0NhcHR1cmVNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMwMjU4
MzQxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTWFuYWdlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaDsgcGF0aCA9IE5l
dHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUzMDI1ODM1MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2Fw
dHVyZVJlY29yZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5l
dHdvcmtDYXB0dXJlUmVjb3JkZXIuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9O
ZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTMwMjU4MzYxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVjb3JkZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya0NhcHR1cmVSZWNvcmRlci5oOyBw
YXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMDI1ODM3MURDQkJEMUQwMERBODlDMiAvKiBO
ZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IE5ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3Mv
Y2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTMwMjU4MzgxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVwbGF5
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya0NhcHR1cmVSZXBs
YXllci5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlcGxh
eWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRTI2MDY0MUREQTk0ODEwMDU5
MDgxOCAvKiBOZXR3b3JrQ2FwdHVyZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IE5ldHdvcmtDYXB0dXJlVHlwZXMuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NhcHR1
cmUvTmV0d29ya0NhcHR1cmVUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MzAyNTgzOTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0RhdGFUYXNrUmVwbGF5LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFza1JlcGxheS5j
cHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtEYXRhVGFza1JlcGxheS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMDI1ODNBMURDQkJEMUQwMERBODlD
MiAvKiBOZXR3b3JrRGF0YVRhc2tSZXBsYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gTmV0d29ya0RhdGFUYXNrUmVwbGF5Lmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0
dXJlL05ldHdvcmtEYXRhVGFza1JlcGxheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MzIxNTk0RjFEQkFFNkQ3MDA1NEFBM0MgLyogTmV0d29ya0RhdGFUYXNrQ29jb2EuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya0RhdGFUYXNrQ29jb2EuaDsgcGF0
aCA9IE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMjE1OTUwMURCQUU2RDcwMDU0QUEzQyAvKiBOZXR3b3Jr
U2Vzc2lvbkNvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtT
ZXNzaW9uQ29jb2EuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9u
Q29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMyMTU5NTExREJBRTZGQzAw
NTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFzay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBOZXR3b3JrRGF0YVRhc2suY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0
d29ya0RhdGFUYXNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU0NTksNiAr
NTQ4Nyw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUU0ODlE
MjgyMUEwQTJCRTgwMDc4QzA2QSAvKiBjYWNoZSAqLywKKwkJCQk1MzlCRDVCMjFEQURCMEJBMDBG
MkU0RTEgLyogY2FwdHVyZSAqLywKIAkJCQk3RUM0RjBGODE4RTRBOTIyMDA4MDU2QUYgLyogY29j
b2EgKi8sCiAJCQkJNUMxNDI2RjIxQzIzRjgyRDAwRDQxMTgzIC8qIEN1c3RvbVByb3RvY29scyAq
LywKIAkJCQk1QzE0MjZGMTFDMjNGODE3MDBENDExODMgLyogRG93bmxvYWRzICovLApAQCAtNTc2
OSw2ICs1Nzk4LDI3IEBACiAJCQluYW1lID0gSWNvbkRhdGFiYXNlOwogCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNTM5QkQ1QjIxREFEQjBCQTAwRjJFNEUxIC8qIGNhcHR1cmUg
Ki8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTUzMDI1ODJF
MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUNhY2hlZFJlc291cmNlLmNwcCAqLywK
KwkJCQk1MzAyNTgyRjFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNv
dXJjZS5oICovLAorCQkJCTUzMDI1ODMwMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVy
ZUV2ZW50LmNwcCAqLywKKwkJCQk1MzAyNTgzMTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0Nh
cHR1cmVFdmVudC5oICovLAorCQkJCTUzMDI1ODMyMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3Jr
Q2FwdHVyZUxvZ2dpbmcuaCAqLywKKwkJCQk1MzAyNTgzMzFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0
d29ya0NhcHR1cmVNYW5hZ2VyLmNwcCAqLywKKwkJCQk1MzAyNTgzNDFEQ0JCRDFEMDBEQTg5QzIg
LyogTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmggKi8sCisJCQkJNTMwMjU4MzUxRENCQkQxRDAwREE4
OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVjb3JkZXIuY3BwICovLAorCQkJCTUzMDI1ODM2MURDQkJE
MUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmggKi8sCisJCQkJNTMwMjU4Mzcx
RENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuY3BwICovLAorCQkJCTUz
MDI1ODM4MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmggKi8sCisJ
CQkJNTNFMjYwNjQxRERBOTQ4MTAwNTkwODE4IC8qIE5ldHdvcmtDYXB0dXJlVHlwZXMuaCAqLywK
KwkJCQk1MzAyNTgzOTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0RhdGFUYXNrUmVwbGF5LmNw
cCAqLywKKwkJCQk1MzAyNTgzQTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0RhdGFUYXNrUmVw
bGF5LmggKi8sCisJCQkpOworCQkJbmFtZSA9IGNhcHR1cmU7CisJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOworCQl9OwogCQk1QzA1MkYyMzFDNkQzQUExMDA3NkU5MTkgLyogY29jb2EgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNzUyMCw2ICs3NTcwLDcg
QEAKIAkJCQkzN0E2NEU1NzE4RjM4RjQ2MDBFQjMwRjEgLyogX1dLRm9ybUlucHV0U2Vzc2lvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMzczRDEyMjMxOEE0NzMwMTAwNjZEOUNDIC8qIF9XS0ZyYW1l
SGFuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzNEMTIyNzE4QTQ3M0Y2MDA2NkQ5Q0MgLyog
X1dLRnJhbWVIYW5kbGVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0Q3OEUxMTkxREI3
RTVBRDAwMTRBMkRFIC8qIF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTNFNkE0RUUxQkM1REQzOTAwRjhBMEU3IC8qIF9XS0hpdFRlc3RSZXN1bHQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzQTg4QjNCMUJDNzEwRDkwMEFCQTVDMiAvKiBfV0tIaXRUZXN0UmVzdWx0
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3QTY0RTU1MThGMzhFM0MwMEVCMzBGMSAv
KiBfV0tJbnB1dERlbGVnYXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTc1NjAsNyArNzYxMSw2IEBA
CiAJCQkJMUFGQjRDNzIxQURGMTU1RDAwQjMzMzM5IC8qIF9XS1dlYnNpdGVEYXRhU3RvcmUuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBNEE5M0I3MUFFQjA4RUEwMDE1MEU5QyAvKiBfV0tXZWJzaXRl
RGF0YVN0b3JlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUExMTVEQzcyMTkxRDgyREEw
MERBODA3MiAvKiBfV0tXZWJWaWV3UHJpbnRGb3JtYXR0ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUNENzhFMTE5MURCN0U1QUQwMDE0QTJERSAvKiBfV0tGdWxsc2NyZWVuRGVsZWdhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUExOUREM0MwMUQwN0QxNjgwMEFDODIzQiAvKiBfV0tXZWJWaWV3UHJp
bnRGb3JtYXR0ZXJJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE4MkQ1QjUxQkU2QkQy
NTAwODdBN0NDIC8qIEFjY2Vzc2liaWxpdHlJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDc5
MkQ4MTc2N0NDQTMwMDg4MUNCRSAvKiBBY3Rpdml0eUFzc2VydGlvbi5oIGluIEhlYWRlcnMgKi8s
CkBAIC03NTgwLDYgKzc2MzAsNyBAQAogCQkJCTM3RTI1RDZFMThGREU1RDYwMDVEM0EwMCAvKiBB
UElGb3JtQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUMxMzM3MjE4NTY2QzdDMDBGM0VD
MDUgLyogQVBJRnJhbWVIYW5kbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERjlFRUU2MUE3ODFG
QjQwMEI2Q0ZCRSAvKiBBUElGcmFtZUluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCUNENzhFMTE3
MURCN0RDMEEwMDE0QTJERSAvKiBBUElGdWxsc2NyZWVuQ2xpZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjE3NEFBMzE0MkE0Q0I3MDAzOTI1MEYgLyogQVBJR2VvbWV0cnkuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTJEQUJBNzc2MUE4MkI0MjEwMEVGMEYxQSAvKiBBUElIaXN0b3J5Q2xpZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5M0E4OEI0NjFCQzg4MjkzMDBBQkE1QzIgLyogQVBJSGl0VGVz
dFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCkBAIC03NjkyLDYgKzc3NDMsNyBAQAogCQkJCUJDRTgx
RDhEMTMxOUY3RUYwMDI0MTkxMCAvKiBGb250SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEx
NEY4RTIxRDc0QzgzNDAwNkNCRUM2IC8qIEZyYW1lSW5mb0RhdGEuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBRTAwRDYxMTgzMTc5MjEwMDA4N0RENyAvKiBGcmFtZUxvYWRTdGF0ZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQ0Q3OEUxMTUxREI3RDdFRDAwMTRBMkRFIC8qIEZ1bGxzY3JlZW5DbGllbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxNUJFMUIzMUQ1OTAyREQwMEREN0M2OCAvKiBHYW1lcGFk
RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxNzc1M0YxMThCQUJGMDAwN0Q5RTlBIC8qIEdl
bmVyaWNDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwNkY0MkYxMkRCQjlCNjAwMkQ3
OERFIC8qIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmggaW4gSGVhZGVycyAq
LywKQEAgLTc3NzAsOSArNzgyMiwxOSBAQAogCQkJCTgzNEIyNTEyMUE4NDJDODcwMENGQjE1MCAv
KiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDQzNkVDRjFB
MEQwNDBCMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODMxMDQyOEIxQkQ2QjY2RjAwQTcxNUU0IC8qIE5ldHdvcmtDYWNoZVN1YnJlc291cmNlc0Vu
dHJ5LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzAyNTgzQzFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0
d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMwMjU4M0Ux
RENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTUzMDI1ODNGMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCBp
biBIZWFkZXJzICovLAorCQkJCTUzMDI1ODQxMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2Fw
dHVyZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzMDI1ODQzMURDQkJEMjIwMERBODlD
MiAvKiBOZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzAyNTg0
NTFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXBsYXllci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTNFMjYwNjUxRERBOTQ4RTAwNTkwODE4IC8qIE5ldHdvcmtDYXB0dXJlVHlwZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxM0ExNjREMTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFERDlGMjkxNjM2
N0RBMjAwMTU3OEU5IC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTVDQkM5QjhFMUM2NTJDQTAwMEE4RkRDRiAvKiBOZXR3b3JrRGF0
YVRhc2suaCBpbiBIZWFkZXJzICovLAorCQkJCTUzQkE0N0QxMURDMkVGNUUwMDRERjRBRCAvKiBO
ZXR3b3JrRGF0YVRhc2tCbG9iLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzIxNTk1NjFEQkFFNzJE
MDA1NEFBM0MgLyogTmV0d29ya0RhdGFUYXNrQ29jb2EuaCBpbiBIZWFkZXJzICovLAorCQkJCTUz
MDI1ODQ3MURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrRGF0YVRhc2tSZXBsYXkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTgzOTkwMjAzMUJFOUEwMkIwMDBGMzY1MyAvKiBOZXR3b3JrTG9hZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODNENDU0RDcxQkU5RDNDNDAwNkM5M0JEIC8qIE5ldHdvcmtMb2Fk
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzkxNDk2NTFCRUE4Mzg1MDBEMkQ5NTMgLyog
TmV0d29ya0xvYWRQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTc3ODgsNiArNzg1MCw3
IEBACiAJCQkJRTE1MjU1MUIxNzAxMTgxOTAwM0Q3QURCIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRl
ck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzE0MjZGMDFDMjNGODA5MDBENDExODMg
LyogTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVD
MjBDQkEwMUJCMUVDRDgwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNTMyMTU5NTUxREJBRTcyOTAwNTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCBp
biBIZWFkZXJzICovLAogCQkJCTMxQTJFQzU2MTQ4OTlDMDkwMDgxMEQ3MSAvKiBOb3RpZmljYXRp
b25QZXJtaXNzaW9uUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEzMTI2MUYxNDhGRjgy
QzAwQkEyQTM5IC8qIE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzFBMkVDNTIxNDg5OTgxOTAwODEwRDcxIC8qIE5vdGlmaWNhdGlvblBl
cm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAqLywKQEAgLTc4NDAsNyAr
NzkwMyw2IEBACiAJCQkJMUEwRUM2QzAxMjRCQkQ5QjAwN0VGNEE1IC8qIFBsdWdpblByb2Nlc3NN
ZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEwRUM3NUUxMjRCQzdCMjAwN0VGNEE1IC8q
IFBsdWdpblByb2Nlc3NQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEwNDNCNUUxMjRENUU5
RDAwRkZCRkI1IC8qIFBsdWdpblByb2Nlc3NQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywK
LQkJCQk1M0JBNDdEMTFEQzJFRjVFMDA0REY0QUQgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUEwNDNEQzExMjRGRjg3NTAwRkZCRkI1IC8qIFBsdWdpblByb3h5
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQThFRkE3MTEyNTJCODQxMDBGNzA2N0YgLyogUGx1Z2lu
UHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0QTlGMzMxMkI4NDRFMjAwOEZF
OTg0IC8qIFBsdWdpblF1aXJrcy5oIGluIEhlYWRlcnMgKi8sCkBAIC03OTYwLDYgKzgwMjIsNyBA
QAogCQkJCUJDMDMyRDc3MTBGNDM3OEQwMDU4QzE1QSAvKiBXZWJDb250ZXh0TWVudUNsaWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTEyOTM1RDgxMjg4RDE5NDAwQTRCNjk1IC8qIFdlYkNvbnRl
eHRNZW51SXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEwRkJCOUIxMjg4Qzk1RTAwQUZGREY0
IC8qIFdlYkNvbnRleHRNZW51SXRlbURhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJCUExRUEwMjQw
MURBQzMxREIwMDk2MDIxRiAvKiBXZWJDb250ZXh0TWVudUxpc3RlbmVyUHJveHkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxQUNCQjgyMTI3QThCQUQwMEQyMDNCOSAvKiBXZWJDb250ZXh0TWVudVBy
b3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUFDQkJBMDEyN0E4RjJDMDBEMjAzQjkgLyogV2Vi
Q29udGV4dE1lbnVQcm94eU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGNERFMjUxNjhGQTQ0
ODAwQzk0QUZDIC8qIFdlYkNvbnRleHRTdXBwbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTgw
NDYsNyArODEwOSw2IEBACiAJCQkJQkM3QjYyNTIxMkE0M0M5NjAwRDE3NEE0IC8qIFdlYlBhZ2VH
cm91cERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDN0I2MjE1MTJBNDIxOUEwMEQxNzRBNCAv
KiBXZWJQYWdlR3JvdXBQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5RUEzMEYxQTk2Q0JG
RjAwMkQyODA3IC8qIFdlYlBhZ2VJbmplY3RlZEJ1bmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQTFFQTAyMzgxREFCRkY3RTAwOTYwMjFGIC8qIFdLQ29udGV4dE1lbnVMaXN0ZW5lci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzBDRTcyQTExMjQ3RTcxRDAwQkMwRUM0IC8qIFdlYlBhZ2VN
ZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ1QzlEMDYxOUM4MUQ4RjAwQjNDNUMxIC8q
IFdlYlBhZ2VPdmVybGF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAzMkREMTEwRjQzODlGMDA1
OEMxNUEgLyogV2ViUGFnZVByb3h5LmggaW4gSGVhZGVycyAqLywKQEAgLTgxNzEsNyArODIzMyw2
IEBACiAJCQkJQkM3QjYzM0QxMkE0NUQxMjAwRDE3NEE0IC8qIFdLQnVuZGxlUGFnZUdyb3VwLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQUI0NzREODE4NEQ0M0ZEMDA1MUI2MjIgLyogV0tCdW5kbGVQ
YWdlTG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFRDgyQTdGMjEyOEM2RkFGMDA0
NDc3QjMgLyogV0tCdW5kbGVQYWdlT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTMyMTU5
NTYxREJBRTcyRDAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQUI0NzRFQTE4NEQ0NTEzMDA1MUI2MjIgLyogV0tCdW5kbGVQYWdlUG9saWN5Q2xp
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzFCNDE5ODExRDQxRDU3MDAxMUU4REQgLyogV0tC
dW5kbGVQYWdlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCNDc0REExODRENDQyNTAw
NTFCNjIyIC8qIFdLQnVuZGxlUGFnZVJlc291cmNlTG9hZENsaWVudC5oIGluIEhlYWRlcnMgKi8s
CkBAIC04MTk1LDYgKzgyNTYsNyBAQAogCQkJCTFBNDQ1QjlGMTg0RDVGQjUwMDRCMzQxNCAvKiBX
S0NvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBNTU1
RjYxMjhDNkM0NzAwOUFCQ0VDIC8qIFdLQ29udGV4dE1lbnVJdGVtLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MUE1NTYwMTEyOEM2RDkyMDA5QUJDRUMgLyogV0tDb250ZXh0TWVudUl0ZW1UeXBlcy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQTFFQTAyMzgxREFCRkY3RTAwOTYwMjFGIC8qIFdLQ29udGV4
dE1lbnVMaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDOTM4RTExMTgwREU0NDAwODVF
NUZFIC8qIFdLQ29udGV4dFByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTlGQjVGMzk1MTY5
RTZBODAwMDJDMjVCRiAvKiBXS0NvbnRleHRQcml2YXRlTWFjLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzMzA5MzQ1QjEzMTVCOTk4MDA5N0E3QkMgLyogV0tDb29raWVNYW5hZ2VyLmggaW4gSGVhZGVy
cyAqLywKQEAgLTgyNDEsNyArODMwMyw2IEBACiAJCQkJQkM1NENDMTIxMkQ2NzRFRTAwNUM2N0Iw
IC8qIFdLR2VvbG9jYXRpb25NYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzA2RjQ0RTEy
REJERjNGMDAyRDc4REUgLyogV0tHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzBFNjE5ODEyRDZDRDEyMDAxMkE3MkEgLyogV0tHZW9sb2NhdGlvblBv
c2l0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MzIxNTk1NTFEQkFFNzI5MDA1NEFBM0MgLyog
TmV0d29ya1Nlc3Npb25Db2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDQjRFNEYxOEJCRTA0
NDAwMEZDRkM5IC8qIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkNDOEIzNzQxMjVGQjY5MDAwREU0NkE0IC8qIFdLR2VvbWV0cnkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBNDIyRjhCMThCMjlCNTQwMEQ4Q0Q5NiAvKiBXS0hpc3RvcnlEZWxlZ2F0ZVByaXZh
dGUuaCBpbiBIZWFkZXJzICovLApAQCAtODMwMCw3ICs4MzYxLDYgQEAKIAkJCQk3Q0Q1RUJCOTE3
NDZBMTVCMDAwQzFDNDUgLyogV0tPYmpDVHlwZVdyYXBwZXJSZWYuaCBpbiBIZWFkZXJzICovLAog
CQkJCTM3OEUxQTQwMTgxRURBMDEwMDMxMDA3QSAvKiBXS09iamVjdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUFDQzUwRjIxQ0JDMzgxRDAwM0M3RDAzIC8qIFdLT3BlblBhbmVsUGFyYW1ldGVycy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJQTFFQTAyNDAxREFDMzFEQjAwOTYwMjFGIC8qIFdlYkNvbnRl
eHRNZW51TGlzdGVuZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2N0NEMkUxQ0JDNTEz
RjAwQkZFM0VBIC8qIFdLT3BlblBhbmVsUGFyYW1ldGVyc0ludGVybmFsLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzg1N0ZFNjEyQjg0M0Q4MDBFREVCMkUgLyogV0tPcGVuUGFuZWxQYXJhbWV0ZXJz
UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzFERkU4RjEyQjMxQ0E4MDA1REY3MzAgLyogV0tP
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8sCkBAIC04MzEwLDcgKzgzNzAs
NiBAQAogCQkJCTgzNzJEQjI1MUE2NzRDOEYwMEM2OTdDNSAvKiBXS1BhZ2VEaWFnbm9zdGljTG9n
Z2luZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCOEExRjQxODQwMEI4RjAwRTlBRTY5
IC8qIFdLUGFnZUZpbmRDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjhBMUY2MTg0MDBC
OUQwMEU5QUU2OSAvKiBXS1BhZ2VGaW5kTWF0Y2hlc0NsaWVudC5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQ0Q3OEUxMTUxREI3RDdFRDAwMTRBMkRFIC8qIEZ1bGxzY3JlZW5DbGllbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBQjhBMUYwMTg0MDBCMDAwMEU5QUU2OSAvKiBXS1BhZ2VGb3JtQ2xpZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdCNjMzNzEyQTQ1QUJBMDBEMTc0QTQgLyogV0tQYWdl
R3JvdXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEOUVBMzBEMUE5NkNCNTkwMDJEMjgwNyAvKiBX
S1BhZ2VJbmplY3RlZEJ1bmRsZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC04MzQyLDcgKzg0
MDEsNiBAQAogCQkJCTkzOTEwNzRGMUJGNkJDNjUwMDhDMTdBRCAvKiBXS1ByZXZpZXdFbGVtZW50
SW5mb0ludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNCNEU2NjE4QkJFM0Q5MDAwRkNG
QzkgLyogV0tQcmludGluZ1ZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQkFBQ0VCMTQ1MjI1
RTMwMDUzRjgyRiAvKiBXS1Byb2Nlc3NHcm91cC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0Q3OEUx
MTcxREI3REMwQTAwMTRBMkRFIC8qIEFQSUZ1bGxzY3JlZW5DbGllbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDQkFBQ0VEMTQ1MjI1RTMwMDUzRjgyRiAvKiBXS1Byb2Nlc3NHcm91cFByaXZhdGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBMTU4NDFBMTg5MDQ0RjUwMDE3NjE2QyAvKiBXS1Byb2Nl
c3NQb29sLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTNDQzE2OTE4OTA3RUIwMDAxRTZFRDggLyog
V0tQcm9jZXNzUG9vbEludGVybmFsLmggaW4gSGVhZGVycyAqLywKQEAgLTkxNzIsNiArOTIzMCw3
IEBACiAJCQkJQkNFODFEOEMxMzE5RjdFRjAwMjQxOTEwIC8qIEZvbnRJbmZvLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTFBMTRGOEUxMUQ3NEM4MzQwMDZDQkVDNiAvKiBGcmFtZUluZm9EYXRhLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFBRTAwRDYwMTgzMTc5MjEwMDA4N0RENyAvKiBGcmFtZUxv
YWRTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDRDc4RTExNDFEQjdEN0VEMDAxNEEyREUg
LyogRnVsbHNjcmVlbkNsaWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxNUJFMUIyMUQ1OTAy
REQwMEREN0M2OCAvKiBHYW1lcGFkRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzA2RjQz
MDEyREJCOUI2MDAyRDc4REUgLyogR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwNkY0NEIxMkRCRDFGNTAwMkQ3OERFIC8qIEdlb2xv
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC05MjUwLDEzICs5MzA5LDIwIEBACiAJCQkJRTQ0MzZFQ0QxQTBEMDQwQjAwRUFEMjA0IC8qIE5l
dHdvcmtDYWNoZUtleS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4MzFFRUJCRTFCRDg1QzQzMDBC
QjY0QzMgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTgzMkFFMjUzMUJFMkU4Q0QwMEZBQUUxMCAvKiBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxv
YWRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUNENzhFMTE0MURCN0Q3RUQwMDE0QTJE
RSAvKiBGdWxsc2NyZWVuQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODNCRENDQjkxQUM1
RkRCNjAwM0Y2NDQxIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTQ0MzZFRDAxQTBEMDQwQjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODMxMDQyOEMxQkQ2QjY2RjAwQTcxNUU0IC8qIE5ldHdvcmtD
YWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzMDI1ODNCMURD
QkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUNhY2hlZFJlc291cmNlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTUzMDI1ODNEMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUV2
ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzMDI1ODQwMURDQkJEMjIwMERBODlDMiAvKiBO
ZXR3b3JrQ2FwdHVyZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTMwMjU4NDIxRENC
QkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVjb3JkZXIuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNTMwMjU4NDQxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVwbGF5ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEzQTE2NEMxNjMwQTlCRjAwNUQ3RDIyIC8qIE5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxREQ5RjI4
MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VS
ZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzIxNTk1NDFEQkFFNzFEMDA1NEFBM0Mg
LyogTmV0d29ya0RhdGFUYXNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzQkE0N0QwMURDMkVG
NUUwMDRERjRBRCAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDQkM5QjhEMUM2NTI3OUMwMEE4RkRDRiAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5tbSBpbiBT
b3VyY2VzICovLAorCQkJCTUzMDI1ODQ2MURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrRGF0YVRh
c2tSZXBsYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODM5OTAyMDIxQkU5QTAyQjAwMEYzNjUz
IC8qIE5ldHdvcmtMb2FkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgzNkVFQjgwMUJFOUVDOUUw
MDZCNEI4MiAvKiBOZXR3b3JrTG9hZE1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxNzk1NTY4
MTYyODc2Q0YwMEZBNDNCNiAvKiBOZXR3b3JrUHJvY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTkyNzUsNiArOTM0MSw3IEBACiAJCQkJRTE1MjU1MUExNzAxMTgxOTAwM0Q3QURCIC8qIE5ldHdv
cmtSZXNvdXJjZUxvYWRlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
QzE0MjZFRjFDMjNGODA5MDBENDExODMgLyogTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM4MjgzQUMxNkI0QkYzRjAwQTI3OEZFIC8qIE5ldHdv
cmtTZXJ2aWNlRW50cnlQb2ludC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTUzMjE1OTUzMURCQUU3
MTgwMDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzIw
Q0I5RDFCQjBEQ0ZBMDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTMxQTJFQzU1MTQ4OTk4MkUwMDgxMEQ3MSAvKiBOb3RpZmljYXRpb25QZXJtaXNz
aW9uUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTMxMjYxRTE0OEZGODJDMDBCQTJB
MzkgLyogTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtOTMzNCw3ICs5NDAxLDYgQEAKIAkJCQkxQTJEOTIyMTEyODFEQzFCMDAxRUI5NjIg
LyogUGx1Z2luUHJveHlNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQThFRkE3MDEyNTJCODQx
MDBGNzA2N0YgLyogUGx1Z2luUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0NENjIyNzcxNzM5RDg2MzAwNUJEN0ZGIC8qIFBsdWdpblNhbmRib3hQcm9maWxlLm1t
IGluIFNvdXJjZXMgKi8sCi0JCQkJNTNCQTQ3RDAxREMyRUY1RTAwNERGNEFEIC8qIE5ldHdvcmtE
YXRhVGFza0Jsb2IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM4Mjg0NEQxNkI1MDgxQzAwQTI3
OEZFIC8qIFBsdWdpblNlcnZpY2VFbnRyeVBvaW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2
RkI3QUUxMUU2NEI2ODAwREIxMzcxIC8qIFBsdWdpblZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRTE4QzkyRjQxMkRCOUU3MTAwQ0YyQUVCIC8qIFByaW50SW5mby5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTkzOTAsNiArOTQ1Niw3IEBACiAJCQkJMUE2NDIwRTQxMkRDRTJGRjAwQ0FBRTJDIC8q
IFNoYXJlYWJsZUJpdG1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMDFBMjYwMTEyNjYyRjIx
MDBDOUVENTUgLyogU2hhcmVhYmxlQml0bWFwQ0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEy
MTc0NjAxNjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJlc291cmNlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTQ0NTBBRUMwMURDM0ZBRTUwMDk5NDNGMiAvKiBTaGFyZWRNZW1vcnlDb2NvYS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkyREFGMDZENzE4QkQxQTQ3MDA4MUNFQjEgLyogU21hcnRN
YWduaWZpY2F0aW9uQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJERTY5NDNEMThC
RDJBNjgwMDVDMTVFNSAvKiBTbWFydE1hZ25pZmljYXRpb25Db250cm9sbGVyTWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUyNzJCMjhBMTQwNjk4NUQwMDk2QTVEMCAvKiBT
dGF0aXN0aWNzRGF0YS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk0NjUsNiArOTUzMiw3IEBACiAJ
CQkJNTEwMjFFOUMxMkIxNjc4ODAwNUMwMzNDIC8qIFdlYkNvbnRleHRNZW51Q2xpZW50TWFjLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyOTM1RDcxMjg4RDE5NDAwQTRCNjk1IC8qIFdlYkNvbnRl
eHRNZW51SXRlbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTBGQkI5QTEyODhDOTVFMDBBRkZE
RjQgLyogV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMUVB
MDIzRjFEQUMzMURCMDA5NjAyMUYgLyogV2ViQ29udGV4dE1lbnVMaXN0ZW5lclByb3h5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTUxQTg0Q0UzMTI3RjM4NkIwMENBNkVBNCAvKiBXZWJDb250ZXh0
TWVudVByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxQUNCQkExMTI3QThGMkMwMEQyMDNC
OSAvKiBXZWJDb250ZXh0TWVudVByb3h5TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzMwOTM0
NEYxMzE1Qjk0RDAwOTdBN0JDIC8qIFdlYkNvb2tpZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC05NTI1LDcgKzk1OTMsNiBAQAogCQkJCTUxMDUyMzc5MUM3M0RBNzcwMDc5OTNDQiAvKiBX
ZWJJREJDb25uZWN0aW9uVG9DbGllbnRNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTE0MTI5OTUxQzY0MjhDMjAwNTlFNzE0IC8qIFdlYklEQkNvbm5lY3Rpb25Ub1NlcnZl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTA1MjM3NTFDNzNEMzhGMDA3OTkzQ0IgLyogV2Vi
SURCQ29ubmVjdGlvblRvU2VydmVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTQ0NTBBRUMwMURDM0ZBRTUwMDk5NDNGMiAvKiBTaGFyZWRNZW1vcnlDb2NvYS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MUE1ODc4MDFEMUM1MDgxMDA0QkE5QUYgLyogV2ViSURCUmVzdWx0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0Y2QUJDMTJDOTFFRjkwMDhGOUMzNSAvKiBXZWJJ
bWFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzhFMjgyMTEyNzVEMTU0MDBCQzdCRDAgLyog
V2ViSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTYzOSw3ICs5NzA2LDYgQEAKIAkJ
CQkxQTUzQzJBOTFBMzI1NzJCMDA0RThDNzAgLyogV2Vic2l0ZURhdGFTdG9yZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxQTQ4MzJDMzFBOTY1QTNDMDA4QjRERkUgLyogV2Vic2l0ZURhdGFTdG9y
ZUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM3NzA2NzQxRDExMzgzODAwMTI3MDBGIC8q
IFdlYlNvY2tldFByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUExRDQyMDQ3MURCNTU3
ODUwMEJCNkIwRCAvKiBXS0NvbnRleHRNZW51TGlzdGVuZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODM2MDM0OUYxQUNCMzRENjAwNjI2NTQ5IC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTUyQzBGNzFBMzhDREM3MDAxNjE2MEEgLyogV2ViU3Rv
cmFnZU5hbWVzcGFjZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQzU3MTVDMTE1
QURBRUYwMDFDQ0FGOSAvKiBXZWJTeXN0ZW1JbnRlcmZhY2UubW0gaW4gU291cmNlcyAqLywKQEAg
LTk2NTMsNiArOTcxOSw3IEBACiAJCQkJMUFBRjA4QTExOTI2ODFEMTAwQjYzOTBDIC8qIFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMzYxRDc4
MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VS
ZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNTczOUJCRTFCNDIwNDY2MDBEMjU4QzEg
LyogV2ViVXNlck1lZGlhQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTgzRUU1NzVCMURC
N0Q2MTEwMEM3NEM1MCAvKiBXZWJWYWxpZGF0aW9uTWVzc2FnZUNsaWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MkQ1QTFCNzFDNTc0QTAyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTNGNDE4RUY5MTg4N0JEOTcwMDI3OTVGRCAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUyRDVBMUIxMUM1NzQ5NjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyUHJveHkubW0gaW4gU291cmNlcyAqLywKQEAgLTk2NjAsNyArOTcyNyw2IEBACiAJCQkJ
MkRGQzdEQkMxQkNDQzE5NTAwQzE1NDhDIC8qIFdlYlZpZXdJbXBsLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQzAzMzdERDExMjdBMjk4MDAwOEZGNEY0IC8qIFdlYldoZWVsRXZlbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJODY4MTYwRDAxODc2NDU1NzAwMjFFNzlEIC8qIFdpbmRvd1NlcnZlckNv
bm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKLQkJCQk1MzIxNTk1MzFEQkFFNzE4MDA1NEFBM0Mg
LyogTmV0d29ya1Nlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjlDRDU1QUIxMjhFMjk0
RjAwMTMzQzg1IC8qIFdLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RCYXNlLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMjkyMzJERjgxOEIyQTlBRTAwRDA1OTZGIC8qIFdLQWNjZXNzaWJpbGl0eVdl
YlBhZ2VPYmplY3RJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQkyOTIzMkRGOTE4QjJBQjNBMDBE
MDU5NkYgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5tbSBpbiBTb3VyY2VzICov
LApAQCAtOTY3OSw3ICs5NzQ1LDYgQEAKIAkJCQlCQ0JBQUNGNTE0NTIzMjRGMDA1M0Y4MkYgLyog
V0tCcm93c2luZ0NvbnRleHRHcm91cC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBRTAwRDRDMTgy
RDZFQjAwMDA4N0RENyAvKiBXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZS5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUJDMjA0RUVFMTFDODNFQzgwMDhGMzM3NSAvKiBXS0J1bmRsZS5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk1MzIxNTk1NDFEQkFFNzFEMDA1NEFBM0MgLyogTmV0d29ya0RhdGFUYXNrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTkzNUVFQjlFMTI3NzYxQUMwMDMzMjJCOCAvKiBXS0J1bmRs
ZUJhY2tGb3J3YXJkTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzVFRUJBMDEyNzc2MUFD
MDAzMzIyQjggLyogV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVtLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUxRkEyRDc3MTUyMTJFMjYwMEMxQkEwQiAvKiBXS0J1bmRsZURPTVdpbmRvd0V4dGVu
c2lvbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk3MDYsNiArOTc3MSw3IEBACiAJCQkJQkNCOUUy
NEMxMTIwRTE1QzAwQTEzN0UwIC8qIFdLQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
QUU1MkY5NzE5MjAyNjMzMDBBMUZBMzcgLyogV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MUE1NTVGNTEyOEM2QzQ3MDA5QUJDRUMgLyogV0tDb250ZXh0
TWVudUl0ZW0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTFENDIwNDcxREI1NTc4NTAwQkI2QjBE
IC8qIFdLQ29udGV4dE1lbnVMaXN0ZW5lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5RkI1RjM5
NDE2OUU2QTgwMDAyQzI1QkYgLyogV0tDb250ZXh0UHJpdmF0ZU1hYy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTMzMDkzNDVBMTMxNUI5OTgwMDk3QTdCQyAvKiBXS0Nvb2tpZU1hbmFnZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTEyRjU4RjkxMkE4OEE1NDAwNjI5NTMwIC8qIFdLQ3JlZGVudGlh
bC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk3MzgsMTQgKzk4MDQsMTIgQEAKIAkJCQlFMUFFQTIz
MDE0Njg3QkRCMDA4MDQ1NjkgLyogV0tGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJQ0RDQTg1QzgxMzJBQkE0RTAwRTk2MURGIC8qIFdLRnVsbFNjcmVlbldp
bmRvd0NvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzU0Q0MxMzEyRDY3NEVFMDA1
QzY3QjAgLyogV0tHZW9sb2NhdGlvbk1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTFF
QTAyM0YxREFDMzFEQjAwOTYwMjFGIC8qIFdlYkNvbnRleHRNZW51TGlzdGVuZXJQcm94eS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzA2RjQ0RjEyREJERjNGMDAyRDc4REUgLyogV0tHZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMEU2MTk5MTJE
NkNEMTIwMDEyQTcyQSAvKiBXS0dlb2xvY2F0aW9uUG9zaXRpb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZDQjRFNTAxOEJCRTA0NDAwMEZDRkM5IC8qIFdLR2VvbG9jYXRpb25Qcm92aWRlcklP
Uy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0I0RTUxMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0dl
b2xvY2F0aW9uUHJvdmlkZXJJT1NPYmpDU2VjdXJpdHlPcmlnaW4ubW0gaW4gU291cmNlcyAqLywK
IAkJCQkwRjE3NEFBNzE0MkFBQzYxMDAzOTI1MEYgLyogV0tHZW9tZXRyeS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCNjJFNzMxMDE0MzA0N0E2MDA2OUVDMzUgLyogV0tIaXRUZXN0UmVzdWx0LmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTgzRUU1NzVCMURCN0Q2MTEwMEM3NEM1MCAvKiBXZWJWYWxp
ZGF0aW9uTWVzc2FnZUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTEwQUUwQzEzM0Mx
NkNCMDA3MjcxN0EgLyogV0tJY29uRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEy
M0NGMUIxMzNEMjYwQTAwNTZGODAwIC8qIFdLSWNvbkRhdGFiYXNlQ0cuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkNDRjZBQzIxMkM5MUYzNDAwOEY5QzM1IC8qIFdLSW1hZ2UuY3BwIGluIFNvdXJj
ZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9jb25maWcuaCBiL1NvdXJjZS9XZWJL
aXQyL2NvbmZpZy5oCmluZGV4IDcwY2Y1MGI2ZmE0YzQ3ZWRhZTFmODYwOGU2MjU3NjhiMjllNGJk
NjMuLmNhNTgwYzQ5ZWY3NTA3NTk3N2NkNTUzNDI2YzllYWJhMDUxZmFiMGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL2NvbmZpZy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL2NvbmZpZy5oCkBA
IC0xMTAsNiArMTEwLDEyIEBACiAjZW5kaWYKICNlbmRpZgogCisjaWZuZGVmIEVOQUJMRV9ORVRX
T1JLX0NBUFRVUkUKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKSAmJiBQTEFURk9STShDT0NPQSkK
KyNkZWZpbmUgRU5BQkxFX05FVFdPUktfQ0FQVFVSRSAxCisjZW5kaWYKKyNlbmRpZgorCiAjaWZu
ZGVmIEVOQUJMRV9ORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTgogI2lmIEVO
QUJMRShORVRXT1JLX0NBQ0hFKSAmJiAoUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykp
CiAjZGVmaW5lIEVOQUJMRV9ORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFMSURBVElPTiAx
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295208</attachid>
            <date>2016-11-18 16:01:15 -0800</date>
            <delta_ts>2016-11-18 16:19:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164527-20161118160108.patch</filename>
            <type>text/plain</type>
            <size>138087</size>
            <attacher name="Keith Rollin">krollin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4OTAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDg5YjNiNDFiNDczNzIx
OTVjNTBjZjk3MzRlN2FjNjYwODc5ZGNmYi4uZmY1NGYxYzBhYTI1MjUxNGZjM2Y4NjE2ZjJjOTgz
YmRmOWNhOGQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE2LTExLTE2ICBLZWl0
aCBSb2xsaW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KKworICAgICAgICBOZXR3b3JrIGV2ZW50IHJl
Y29yZC9yZXBsYXkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NDUyNworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjkxNjgxNTc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhwb3J0IHBhcnNlVVJMRW5j
b2RlZEZvcm0uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0tIG5vIGZ1bmN0aW9uYWxpdHkgYWRk
ZWQsIGNoYW5nZWQsIG9yIHJlbW92ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9VUkxQYXJzZXIu
aDoKKwogMjAxNi0xMS0xNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFN1cHBvcnQgSUROMjAwOCB3aXRoIFVUUyAjNDYgaW5zdGVhZCBvZiBJ
RE4yMDAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggM2FmMjE3OTJjNmE2ZjM5ZWQyNmFkOWI5OTJkMzhhZDUzMTFk
NmMyMy4uYjMwZGI0YzY1ZWZiYzQ2NmJmNGMzZGM3NzkxZGM0ODZjNjU1N2YyNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEzMSBAQAorMjAxNi0xMS0xNiAgS2VpdGggUm9sbGluICA8a3JvbGxpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgTmV0d29yayBldmVudCByZWNvcmQvcmVwbGF5CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ1MjcKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI5MTY4MTU3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCBXZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvKiBm
b3IgcmVjb3JkaW5nIHRoZSBuZXR3b3JrIGV2ZW50cworICAgICAgICB0aGF0IG9jY3VyIHdoZW4g
bG9hZGluZyBhIHBhZ2UgYW5kIGZvciByZXBsYXlpbmcgdGhlbSBsYXRlci4gVXBkYXRlCisgICAg
ICAgIE5ldHdvcmtMb2FkIHRvIGludm9rZSBjYXB0dXJlIGZhY2lsaXRpZXMuIEFkZCBwcmVmZXJl
bmNlcyBmb3IgZW5hYmxpbmcKKyAgICAgICAgcmVjb3JkIG9yIHJlcGxheS4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6Ok5ldHdvcmtMb2FkKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0xvYWQ6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrTG9hZDo6Y29udGludWVXaWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrTG9hZDo6c2hhcmVkV2lsbFNlbmRSZWRpcmVjdGVkUmVxdWVzdCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtMb2FkOjpub3RpZnlEaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrTG9hZDo6ZGlkQ29tcGxldGVXaXRoRXJyb3IpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL05ldHdvcmtMb2FkLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5l
dHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnRlcm1pbmF0
ZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVyczo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJl
L05ldHdvcmtDYXB0dXJlQ2FjaGVkUmVzb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhcHR1cmU6OkNhY2hlZFJlc291cmNlOjpDYWNoZWRSZXNvdXJjZSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpDYWNoZWRSZXNvdXJjZTo6fkNhY2hlZFJlc291
cmNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkNhY2hlZFJlc291cmNlOjp1
cmwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6Q2FjaGVkUmVzb3VyY2U6OmJh
c2VVUkwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6Q2FjaGVkUmVzb3VyY2U6
OnF1ZXJ5UGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpDYWNo
ZWRSZXNvdXJjZTo6ZXZlbnRTdHJlYW0pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVy
ZTo6Q2FjaGVkUmVzb3VyY2U6OkV2ZW50U3RyZWFtOjpFdmVudFN0cmVhbSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpDYWNoZWRSZXNvdXJjZTo6RXZlbnRTdHJlYW06Om5leHRF
dmVudCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpDYWNoZWRSZXNvdXJjZTo6
RXZlbnRTdHJlYW06Om1ha2VEZWNvZGVyKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0
dXJlL05ldHdvcmtDYXB0dXJlQ2FjaGVkUmVzb3VyY2UuaDogQWRkZWQuCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcDogQWRkZWQuCisgICAg
ICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8Q2FwdHVyZVRpbWVUeXBlPjo6ZW5jb2RlKToKKyAgICAg
ICAgKElQQzo6QXJndW1lbnRDb2RlcjxDYXB0dXJlVGltZVR5cGU+OjpkZWNvZGUpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6d3JhcCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYXB0dXJlOjpSZXF1ZXN0U2VudEV2ZW50OjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FwdHVyZTo6UmVxdWVzdFNlbnRFdmVudDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhcHR1cmU6OlJlc3BvbnNlUmVjZWl2ZWRFdmVudDo6ZW5jb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlc3BvbnNlUmVjZWl2ZWRFdmVudDo6ZGVjb2Rl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlZGlyZWN0UmVjZWl2ZWRFdmVu
dDo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlZGlyZWN0UmVj
ZWl2ZWRFdmVudDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJl
ZGlyZWN0U2VudEV2ZW50OjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVy
ZTo6UmVkaXJlY3RTZW50RXZlbnQ6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YXB0dXJlOjpEYXRhUmVjZWl2ZWRFdmVudDo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhcHR1cmU6OkRhdGFSZWNlaXZlZEV2ZW50OjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FwdHVyZTo6RmluaXNoZWRFdmVudDo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhcHR1cmU6OkZpbmlzaGVkRXZlbnQ6OmRlY29kZSk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50Lmg6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6VGltZWRFdmVudDo6VGltZWRFdmVudCk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaDogQWRk
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZU1hbmFn
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6
OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpp
bml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OnRl
cm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpmaW5k
TWF0Y2gpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6ZmluZEV4
YWN0TWF0Y2gpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6Zmlu
ZEJlc3RGdXp6eU1hdGNoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFn
ZXI6OmZ1enp5TWF0Y2hVUkxzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1h
bmFnZXI6OmxvYWRDYWNoZWRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fw
dHVyZTo6TWFuYWdlcjo6cmVwb3J0TG9hZFBhdGgpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FwdHVyZTo6TWFuYWdlcjo6cmVwb3J0UmVjb3JkUGF0aCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpyZXBvcnRSZXBsYXlQYXRoKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OnJlcXVlc3RUb1BhdGgpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6c3RyaW5nVG9IYXNoKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6Omhhc2hUb1BhdGgpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6bG9nUmVjb3JkZWRSZXNvdXJjZSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpsb2dMb2FkZWRSZXNvdXJjZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpsb2dQbGF5ZWRCYWNr
UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6ZW5z
dXJlRmlsZUhhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2Vy
OjpvcGVuQ2FjaGVGaWxlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFn
ZXI6OnJlYWRGaWxlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6
OmdldExpbmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6Z2V0
V29yZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpwcmludFRv
RmlsZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpiYXNlVVJM
QXNTdHJpbmcpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1
cmVNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFu
YWdlcjo6aXNSZWNvcmRpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFu
YWdlcjo6aXNSZXBsYXlpbmcpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0
d29ya0NhcHR1cmVSZWNvcmRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FwdHVyZTo6UmVjb3JkZXI6OnJlY29yZFJlcXVlc3RTZW50KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhcHR1cmU6OlJlY29yZGVyOjpyZWNvcmRSZXNwb25zZVJlY2VpdmVkKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlY29yZGVyOjpyZWNvcmRSZWRpcmVjdFJlY2Vp
dmVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlY29yZGVyOjpyZWNvcmRS
ZWRpcmVjdFNlbnQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVjb3JkZXI6
OnJlY29yZERhdGFSZWNlaXZlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpS
ZWNvcmRlcjo6cmVjb3JkRmluaXNoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6
OlJlY29yZGVyOjp3cml0ZUV2ZW50cyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJl
OjpSZWNvcmRlcjo6b3BlbkZpbGVGb3JSZXF1ZXN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVjb3JkZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZWNvcmRlcjo6cmVjb3JkRXZlbnQpOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXBsYXllci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVwbGF5ZXI6OlJlcGxheWVyKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlcGxheWVyOjpyZXBsYXlSZXNvdXJjZSk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlcGxheWVy
Lmg6IEFkZGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1
cmVUeXBlcy5oOiBBZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdv
cmtEYXRhVGFza1JlcGxheS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fw
dHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5OjpOZXR3b3JrRGF0YVRhc2tSZXBsYXkpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5Ojp+TmV0
d29ya0RhdGFUYXNrUmVwbGF5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5l
dHdvcmtEYXRhVGFza1JlcGxheTo6cmVzdW1lKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
cHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxheTo6c3VzcGVuZCk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYXB0dXJlOjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmNhbmNlbCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmNvbXBsZXRl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxh
eTo6aW52YWxpZGF0ZUFuZENhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJl
OjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmVucXVldWVDYWNoZWRFdmVudEhhbmRsZXIpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5OjpyZXBs
YXlSZXF1ZXN0U2VudCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpOZXR3b3Jr
RGF0YVRhc2tSZXBsYXk6OnJlcGxheVJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5OjpyZXBsYXlSZWRpcmVjdFJl
Y2VpdmVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFz
a1JlcGxheTo6cmVwbGF5UmVkaXJlY3RTZW50KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
cHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxheTo6cmVwbGF5RGF0YVJlY2VpdmVkKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxheTo6cmVwbGF5
RmluaXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFU
YXNrUmVwbGF5OjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5OjpkaWRGaW5pc2gpOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0RhdGFUYXNrUmVwbGF5Lmg6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5OjpjcmVh
dGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MpOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBjb25maWcuaDoKKwogMjAxNi0xMS0xNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3Mg
IDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgRG93bmxvYWRzIHN0YXJ0ZWQgYnkgY29u
dGV4dCBtZW51IGFjdGlvbnMgc2hvdWxkIGFsc28gaGF2ZSBhIHdlYiB2aWV3IGFzc29jaWF0ZWQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmgKaW5kZXggYmI1ZTkyYmRhNzZlZDc1M2QzZTAw
ZWY1NDBiMTZhYzM4ZGQ3NGRhMC4uYmIzNmQ2Y2UzZWQzMjIyYmFmN2M4Mjk1MGUyM2JiZjVmNjcx
NWE2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmgKQEAgLTQ3LDcgKzQ3LDcgQEAg
cHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldEVuYWJsZWQoYm9vbCk7
CiAgICAgCiAgICAgdHlwZWRlZiBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gVVJM
RW5jb2RlZEZvcm07Ci0gICAgc3RhdGljIFVSTEVuY29kZWRGb3JtIHBhcnNlVVJMRW5jb2RlZEZv
cm0oU3RyaW5nVmlldyk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFVSTEVuY29kZWRGb3Jt
IHBhcnNlVVJMRW5jb2RlZEZvcm0oU3RyaW5nVmlldyk7CiAgICAgc3RhdGljIFN0cmluZyBzZXJp
YWxpemUoY29uc3QgVVJMRW5jb2RlZEZvcm0mKTsKIAogICAgIHN0YXRpYyBjb25zdCBVSUROQSYg
aW50ZXJuYXRpb25hbERvbWFpbk5hbWVUcmFuc2NvZGVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IDg3MjY2OGUwYjFlYWQyNGZjMTIwZmEwOTcyY2NkYzZkMzJkYjEyNjkuLjUwMWQ3YjYyOTg2
YzMwNDdkNWFmNjNjN2VkMWRmOTUwYmRhY2Y0N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC0y
MDQsNiArMjA0LDEzIEBAIHNldChOZXR3b3JrUHJvY2Vzc19DT01NT05fU09VUkNFUwogICAgIE5l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAogICAg
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwCiAgICAgTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKKworICAgIE5ldHdvcmtQ
cm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5jcHAKKyAgICBOZXR3
b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuY3BwCisgICAgTmV0d29ya1By
b2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZU1hbmFnZXIuY3BwCisgICAgTmV0d29ya1Byb2Nl
c3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmNwcAorICAgIE5ldHdvcmtQcm9jZXNz
L2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXBsYXllci5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9j
YXB0dXJlL05ldHdvcmtEYXRhVGFza1JlcGxheS5jcHAKICkKIAogc2V0KFdlYktpdDJfU09VUkNF
UwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQu
Y3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCmluZGV4
IDUxN2Y4NDVhYWJlNTIzZjJlZmE5NjE4NGVlZjcyNTNhZTJjYTRkOWYuLjE0MzdmYjlhODczMjM3
ODU1ZTYzZWNiOWVjMmMxNjkzY2I5NDg1YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKQEAgLTQzLDYgKzQzLDEyIEBACiAjaW5jbHVkZSAiTmV0
d29ya0RhdGFUYXNrQ29jb2EuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVS
RSkKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJOZXR3b3Jr
Q2FwdHVyZVJlY29yZGVyLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVSZXBsYXllci5oIgor
I2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
QEAgLTY3LDkgKzczLDMzIEBAIE5ldHdvcmtMb2FkOjpOZXR3b3JrTG9hZChOZXR3b3JrTG9hZENs
aWVudCYgY2xpZW50LCBOZXR3b3JrTG9hZFBhcmFtZXRlcnMmJiBwYXJhCiAgICAgLCBtX3BhcmFt
ZXRlcnMoV1RGTW92ZShwYXJhbWV0ZXJzKSkKICAgICAsIG1fY3VycmVudFJlcXVlc3QobV9wYXJh
bWV0ZXJzLnJlcXVlc3QpCiB7CisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyAgICBpZiAo
bV9wYXJhbWV0ZXJzLnJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKSB7Cisg
ICAgICAgIGlmIChOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6c2luZ2xldG9uKCkuaXNSZWNvcmRp
bmcoKSkgeworICAgICAgICAgICAgbV9yZWNvcmRlciA9IHN0ZDo6bWFrZV91bmlxdWU8TmV0d29y
a0NhcHR1cmU6OlJlY29yZGVyPigpOworICAgICAgICB9IGVsc2UgaWYgKE5ldHdvcmtDYXB0dXJl
OjpNYW5hZ2VyOjpzaW5nbGV0b24oKS5pc1JlcGxheWluZygpKSB7CisgICAgICAgICAgICAvLyBU
T0RPOiBUaGUgcGFyYWxsZWwgb2YgY3JlYXRpbmcgYW4gbV9yZWNvcmRlciAoYXMgYWJvdmUpIGlz
IHRvCisgICAgICAgICAgICAvLyBjcmVhdGUgYW4gbV9yZXBsYXllciAoYXMgYmVsb3cpLiBIb3dl
dmVyLCB3ZSBkb24ndCByZWFsbHkgdXNlCisgICAgICAgICAgICAvLyB0aGUgcmVwbGF5ZXIgZXhj
ZXB0IHRvIGNyZWF0ZSB0aGUgTmV0d29ya0RhdGFUYXNrUmVwbGF5ZXIKKyAgICAgICAgICAgIC8v
IGluc3RhbmNlLiBJZiB0aGF0J3MgYWxsIHdlIG5lZWQsIG1heWJlIHdlIHNob3VsZCByZW1vdmUg
dGhlCisgICAgICAgICAgICAvLyByZXBsYXllciBhbmQgcHV0IHRoZSBjcmVhdGlvbiBvZiB0aGUg
dGFzayBpbgorICAgICAgICAgICAgLy8gTmV0d29ya0RhdGFUYXNrOjpjcmVhdGUuCisgICAgICAg
ICAgICBtX3JlcGxheWVyID0gc3RkOjptYWtlX3VuaXF1ZTxOZXR3b3JrQ2FwdHVyZTo6UmVwbGF5
ZXI+KCk7CisgICAgICAgICAgICBtX3Rhc2sgPSBtX3JlcGxheWVyLT5yZXBsYXlSZXNvdXJjZShu
ZXR3b3JrU2Vzc2lvbiwgKnRoaXMsIG1fcGFyYW1ldGVycyk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoIW1fdGFzaykKKyNlbmRpZgorCiAgICAgbV90YXNrID0gTmV0d29ya0RhdGFUYXNr
OjpjcmVhdGUobmV0d29ya1Nlc3Npb24sICp0aGlzLCBtX3BhcmFtZXRlcnMpOwotICAgIGlmICgh
bV9wYXJhbWV0ZXJzLmRlZmVyc0xvYWRpbmcpCisgICAgaWYgKCFtX3BhcmFtZXRlcnMuZGVmZXJz
TG9hZGluZykgewogICAgICAgICBtX3Rhc2stPnJlc3VtZSgpOworI2lmIEVOQUJMRShORVRXT1JL
X0NBUFRVUkUpCisgICAgICAgIGlmIChtX3JlY29yZGVyKQorICAgICAgICAgICAgbV9yZWNvcmRl
ci0+cmVjb3JkUmVxdWVzdFNlbnQobV9wYXJhbWV0ZXJzLnJlcXVlc3QpOworI2VuZGlmCisgICAg
fQogfQogCiAjZWxzZQpAQCAtMTEzLDggKzE0MywxMyBAQCB2b2lkIE5ldHdvcmtMb2FkOjpzZXRE
ZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQogICAgIGlmIChtX3Rhc2spIHsKICAgICAgICAgaWYg
KGRlZmVycykKICAgICAgICAgICAgIG1fdGFzay0+c3VzcGVuZCgpOwotICAgICAgICBlbHNlCisg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgbV90YXNrLT5yZXN1bWUoKTsKKyNpZiBFTkFCTEUo
TkVUV09SS19DQVBUVVJFKQorICAgICAgICAgICAgaWYgKG1fcmVjb3JkZXIpCisgICAgICAgICAg
ICAgICAgbV9yZWNvcmRlci0+cmVjb3JkUmVxdWVzdFNlbnQobV9wYXJhbWV0ZXJzLnJlcXVlc3Qp
OworI2VuZGlmCisgICAgICAgIH0KICAgICB9CiAjZWxzZQogICAgIGlmIChtX2hhbmRsZSkKQEAg
LTE0Miw2ICsxNzcsMTEgQEAgdm9pZCBOZXR3b3JrTG9hZDo6Y29udGludWVXaWxsU2VuZFJlcXVl
c3QoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgbmV3UmVxdWVzdCkKICAgICBtX2N1cnJlbnRS
ZXF1ZXN0LnVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRQcm9wZXJ0aWVzKG5ld1JlcXVl
c3QpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorICAgIGlmIChtX3Jl
Y29yZGVyKQorICAgICAgICBtX3JlY29yZGVyLT5yZWNvcmRSZWRpcmVjdFNlbnQobmV3UmVxdWVz
dCk7CisjZW5kaWYKKwogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgYXV0byByZWRpcmVj
dENvbXBsZXRpb25IYW5kbGVyID0gc3RkOjpleGNoYW5nZShtX3JlZGlyZWN0Q29tcGxldGlvbkhh
bmRsZXIsIG51bGxwdHIpOwogICAgIEFTU0VSVChyZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyKTsK
QEAgLTE5NCw2ICsyMzQsMTEgQEAgdm9pZCBOZXR3b3JrTG9hZDo6c2hhcmVkV2lsbFNlbmRSZWRp
cmVjdGVkUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBSZXMKICAgICBBU1NFUlQo
IXJlZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCkpOwogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CiAKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorICAgIGlmIChtX3JlY29yZGVyKQor
ICAgICAgICBtX3JlY29yZGVyLT5yZWNvcmRSZWRpcmVjdFJlY2VpdmVkKHJlcXVlc3QsIHJlZGly
ZWN0UmVzcG9uc2UpOworI2VuZGlmCisKICAgICBhdXRvIG9sZFJlcXVlc3QgPSBXVEZNb3ZlKG1f
Y3VycmVudFJlcXVlc3QpOwogICAgIG1fY3VycmVudFJlcXVlc3QgPSByZXF1ZXN0OwogICAgIG1f
Y2xpZW50LmdldCgpLndpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoV1RGTW92ZShvbGRSZXF1ZXN0
KSwgV1RGTW92ZShyZXF1ZXN0KSwgV1RGTW92ZShyZWRpcmVjdFJlc3BvbnNlKSk7CkBAIC0zMjQs
NiArMzY5LDExIEBAIHZvaWQgTmV0d29ya0xvYWQ6Om5vdGlmeURpZFJlY2VpdmVSZXNwb25zZShS
ZXNvdXJjZVJlc3BvbnNlJiYgcmVzcG9uc2UsIFJlc3BvbnNlCiB7CiAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKIAorI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisgICAgaWYgKG1fcmVj
b3JkZXIpCisgICAgICAgIG1fcmVjb3JkZXItPnJlY29yZFJlc3BvbnNlUmVjZWl2ZWQocmVzcG9u
c2UpOworI2VuZGlmCisKICAgICBpZiAoc2hhcmVkRGlkUmVjZWl2ZVJlc3BvbnNlKFdURk1vdmUo
cmVzcG9uc2UpKSA9PSBOZXR3b3JrTG9hZENsaWVudDo6U2hvdWxkQ29udGludWVEaWRSZWNlaXZl
UmVzcG9uc2U6Ok5vKSB7CiAgICAgICAgIG1fcmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpOwogICAgICAgICByZXR1cm47CkBAIC0zMzUsNiArMzg1
LDExIEBAIHZvaWQgTmV0d29ya0xvYWQ6OmRpZFJlY2VpdmVEYXRhKFJlZjxTaGFyZWRCdWZmZXI+
JiYgYnVmZmVyKQogewogICAgIEFTU0VSVCghbV90aHJvdHRsZSk7CiAKKyNpZiBFTkFCTEUoTkVU
V09SS19DQVBUVVJFKQorICAgIGlmIChtX3JlY29yZGVyKQorICAgICAgICBtX3JlY29yZGVyLT5y
ZWNvcmREYXRhUmVjZWl2ZWQoYnVmZmVyLmdldCgpKTsKKyNlbmRpZgorCiAgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGJlIHRoZSBlbmNvZGVkIGRhdGEgbGVuZ3RoLCBub3QgdGhlIGRlY29kZWQg
ZGF0YSBsZW5ndGguCiAgICAgYXV0byBzaXplID0gYnVmZmVyLT5zaXplKCk7CiAgICAgbV9jbGll
bnQuZ2V0KCkuZGlkUmVjZWl2ZUJ1ZmZlcihXVEZNb3ZlKGJ1ZmZlciksIHNpemUpOwpAQCAtMzQ0
LDYgKzM5OSwxMSBAQCB2b2lkIE5ldHdvcmtMb2FkOjpkaWRDb21wbGV0ZVdpdGhFcnJvcihjb25z
dCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKICAgICBBU1NFUlQoIW1fdGhyb3R0bGUpOwogCisj
aWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyAgICBpZiAobV9yZWNvcmRlcikKKyAgICAgICAg
bV9yZWNvcmRlci0+cmVjb3JkRmluaXNoKGVycm9yKTsKKyNlbmRpZgorCiAgICAgaWYgKGVycm9y
LmlzTnVsbCgpKQogICAgICAgICBtX2NsaWVudC5nZXQoKS5kaWRGaW5pc2hMb2FkaW5nKFdURjo6
bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmggYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5oCmluZGV4IDdkMTRjOGMyYWE2MzgzNmE3MDFk
ZDE0YjJjNzg3M2Q1OGYzMmRlMDMuLmJiNDcwOWJmMWQxMTMwYzMxODI1ZDMyN2JmYWQ2NzJiY2U3
MjI1ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtM
b2FkLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaApA
QCAtMzgsNiArMzgsMTEgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlLmg+CiAjZW5kaWYKIAorI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisjaW5jbHVkZSAi
TmV0d29ya0NhcHR1cmVSZWNvcmRlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlUmVwbGF5
ZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTmV0d29ya0xvYWQg
ZmluYWwgOgpAQCAtMTUxLDYgKzE1NiwxMSBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsgLy8gVXBkYXRlZCBvbiByZWRp
cmVjdHMuCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorICAgIHN0ZDo6dW5pcXVlX3B0
cjxOZXR3b3JrQ2FwdHVyZTo6UmVjb3JkZXI+IG1fcmVjb3JkZXI7CisgICAgc3RkOjp1bmlxdWVf
cHRyPE5ldHdvcmtDYXB0dXJlOjpSZXBsYXllcj4gbV9yZXBsYXllcjsKKyNlbmRpZgogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggNjFmOTg3NjYwOWI2ZDcwYThmNmUxYzA3OTU3ZmI4
NTk2MzgyMTg4Mi4uMGJlNTNiNzk0ZjE3MWFjMjFjNmE5NmMxNGQ3MWE3YzEzMGI2ZmU1NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApA
QCAtNzQsNiArNzQsMTAgQEAKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKICNlbmRp
ZgogCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVy
ZU1hbmFnZXIuaCIKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiTmV0
d29ya1Nlc3Npb25Db2NvYS5oIgogI2VuZGlmCkBAIC0yMjIsNiArMjI2LDEzIEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycyYmCiAgICAgICAgIG1lbW9yeVByZXNzdXJlSGFuZGxlci5pbnN0YWxsKCk7
CiAgICAgfQogCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyAgICBOZXR3b3JrQ2FwdHVy
ZTo6TWFuYWdlcjo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZSgKKyAgICAgICAgcGFyYW1ldGVycy5z
aG91bGRSZWNvcmROZXR3b3JrUmVxdWVzdHMsCisgICAgICAgIHBhcmFtZXRlcnMuc2hvdWxkUmVw
bGF5TmV0d29ya1JlcXVlc3RzLAorICAgICAgICBwYXJhbWV0ZXJzLnJlY29yZFJlcGxheUNhY2hl
TG9jYXRpb24pOworI2VuZGlmCisKICAgICBtX2Rpc2tDYWNoZUlzRGlzYWJsZWRGb3JUZXN0aW5n
ID0gcGFyYW1ldGVycy5zaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb247CiAKICAgICBtX2Rp
c2tDYWNoZVNpemVPdmVycmlkZSA9IHBhcmFtZXRlcnMuZGlza0NhY2hlU2l6ZU92ZXJyaWRlOwpA
QCAtNTk2LDYgKzYwNywxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpsb2dEaWFnbm9zdGljTWVz
c2FnZVdpdGhWYWx1ZSh1aW50NjRfdCB3ZWJQYWdlSUQsIGNvbnN0IFN0cgogCiB2b2lkIE5ldHdv
cmtQcm9jZXNzOjp0ZXJtaW5hdGUoKQogeworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisg
ICAgTmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OnNpbmdsZXRvbigpLnRlcm1pbmF0ZSgpOworI2Vu
ZGlmCisKICAgICBwbGF0Zm9ybVRlcm1pbmF0ZSgpOwogICAgIENoaWxkUHJvY2Vzczo6dGVybWlu
YXRlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKaW5kZXggYmQ3YWI1
NDhiOWM0NTc0ZDI0MWY0NzdkOWM4OTc3YzJhNGMyZDdjMS4uMmU0MGQxMmEwNTY4NDQ4OTk2NDVi
MDA0NjNiOTA0ODcwNTJhNzgxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNw
cApAQCAtOTMsNiArOTMsMTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
czo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICNpZiBPUyhMSU5VWCkKICAg
ICBlbmNvZGVyIDw8IG1lbW9yeVByZXNzdXJlTW9uaXRvckhhbmRsZTsKICNlbmRpZgorI2lmIEVO
QUJMRShORVRXT1JLX0NBUFRVUkUpCisgICAgZW5jb2RlciA8PCBzaG91bGRSZWNvcmROZXR3b3Jr
UmVxdWVzdHM7CisgICAgZW5jb2RlciA8PCBzaG91bGRSZXBsYXlOZXR3b3JrUmVxdWVzdHM7Cisg
ICAgZW5jb2RlciA8PCByZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uOworI2VuZGlmCiB9CiAKIGJv
b2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXIm
IGRlY29kZXIsIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiByZXN1bHQpCkBAIC0x
ODgsNiArMTkzLDE1IEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRl
Y29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIE5ldHdvcmtQcm9jCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICNlbmRpZgogCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5zaG91bGRSZWNvcmROZXR3b3JrUmVxdWVzdHMpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2hvdWxkUmVw
bGF5TmV0d29ya1JlcXVlc3RzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0LnJlY29yZFJlcGxheUNhY2hlTG9jYXRpb24pKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYKKwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuaAppbmRleCBmNDU2OWM5NDY5YTU3NzJlNjBiMWM5YmZmNTYwODVk
M2FjYjQzYzNkLi4xNDVlMGYzMWE1ZDI3NDQ3NjVmMmEzZWI3YzM5YTRjYTlhZWQ1MDdjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKQEAgLTEwNiw2ICsxMDYsMTIgQEAgc3RydWN0
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICNpZiBPUyhMSU5VWCkKICAgICBJ
UEM6OkF0dGFjaG1lbnQgbWVtb3J5UHJlc3N1cmVNb25pdG9ySGFuZGxlOwogI2VuZGlmCisKKyNp
ZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorICAgIGJvb2wgc2hvdWxkUmVjb3JkTmV0d29ya1Jl
cXVlc3RzIHsgZmFsc2UgfTsKKyAgICBib29sIHNob3VsZFJlcGxheU5ldHdvcmtSZXF1ZXN0cyB7
IGZhbHNlIH07CisgICAgU3RyaW5nIHJlY29yZFJlcGxheUNhY2hlTG9jYXRpb247CisjZW5kaWYK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUNhY2hlZFJlc291cmNlLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVDYWNo
ZWRSZXNvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDE2MWQzM2Q4ZDE2ZTRhZDg3MTQyZTQ1YWVkMDE5
NGRlZjgxNzg0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5jcHAKQEAgLTAsMCArMSwx
NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29y
a0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5oIgorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkK
KworI2luY2x1ZGUgIkF0dGFjaG1lbnQuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZUxvZ2dp
bmcuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCIKKworbmFtZXNwYWNlIFdl
YktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgeworCitDYWNoZWRSZXNvdXJjZTo6Q2Fj
aGVkUmVzb3VyY2UoY29uc3QgU3RyaW5nJiBldmVudEZpbGVQYXRoKQorICAgIDogbV9ldmVudEZp
bGVQYXRoKGV2ZW50RmlsZVBhdGgpCit7Cit9CisKK0NhY2hlZFJlc291cmNlOjp+Q2FjaGVkUmVz
b3VyY2UoKQoreworfQorCitjb25zdCBXZWJDb3JlOjpVUkwmIENhY2hlZFJlc291cmNlOjp1cmwo
KQoreworICAgIGlmICghbV9oYXZlVVJMKSB7CisgICAgICAgIGF1dG8gZXZlbnRzID0gZXZlbnRT
dHJlYW0oKTsKKyAgICAgICAgYXV0byBldmVudCA9IGV2ZW50cy5uZXh0RXZlbnQoKTsKKyAgICAg
ICAgaWYgKCFldmVudCkKKyAgICAgICAgICAgIERFQlVHX0xPR19FUlJPUigiRXZlbnQgc3RyZWFt
IGRvZXMgbm90IGNvbnRhaW4gZXZlbnRzOiBmaWxlID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUiht
X2V2ZW50RmlsZVBhdGgpKTsKKyAgICAgICAgZWxzZSBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8UmVxdWVzdFNlbnRFdmVudD4oKmV2ZW50KSkKKyAgICAgICAgICAgIERFQlVHX0xPR19FUlJP
UigiRXZlbnQgc3RyZWFtIGRvZXMgbm90IGhhdmUgYSByZXF1ZXN0U2VudCBldmVudDogZmlsZSA9
ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9ldmVudEZpbGVQYXRoKSk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgY29uc3QgYXV0byYgcmVxdWVzdFNlbnRFdmVudCA9IFdURjo6Z2V0PFJl
cXVlc3RTZW50RXZlbnQ+KCpldmVudCk7CisgICAgICAgICAgICBtX3VybCA9IHJlcXVlc3RTZW50
RXZlbnQucmVxdWVzdC51cmwoKTsKKyAgICAgICAgICAgIG1faGF2ZVVSTCA9IHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbV91cmw7Cit9CisKK2NvbnN0IFdlYkNvcmU6OlVS
TCYgQ2FjaGVkUmVzb3VyY2U6OmJhc2VVUkwoKQoreworICAgIGlmICghbV9oYXZlQmFzZVVSTCkg
eworICAgICAgICBtX2hhdmVCYXNlVVJMID0gdHJ1ZTsKKyAgICAgICAgYXV0byBwYXRoU3RhcnQg
PSB1cmwoKS5wYXRoU3RhcnQoKTsKKyAgICAgICAgYXV0byBiYXNlVVJMU3RyID0gdXJsKCkuc3Ry
aW5nKCkubGVmdChwYXRoU3RhcnQpOworCisgICAgICAgIFdlYkNvcmU6OlVSTFBhcnNlciBwYXJz
ZXIoYmFzZVVSTFN0cik7CisgICAgICAgIG1fYmFzZVVSTCA9IHBhcnNlci5yZXN1bHQoKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gbV9iYXNlVVJMOworfQorCitXZWJDb3JlOjpVUkxQYXJzZXI6OlVS
TEVuY29kZWRGb3JtIENhY2hlZFJlc291cmNlOjpxdWVyeVBhcmFtZXRlcnMoKQoreworICAgIGlm
ICghbV9oYXZlUXVlcnlQYXJhbWV0ZXJzKSB7CisgICAgICAgIG1faGF2ZVF1ZXJ5UGFyYW1ldGVy
cyA9IHRydWU7CisgICAgICAgIG1fcXVlcnlQYXJhbWV0ZXJzID0gV2ViQ29yZTo6VVJMUGFyc2Vy
OjpwYXJzZVVSTEVuY29kZWRGb3JtKHVybCgpLnF1ZXJ5KCkpOworICAgIH0KKworICAgIHJldHVy
biBtX3F1ZXJ5UGFyYW1ldGVyczsKK30KKworQ2FjaGVkUmVzb3VyY2U6OkV2ZW50U3RyZWFtIENh
Y2hlZFJlc291cmNlOjpldmVudFN0cmVhbSgpCit7CisgICAgcmV0dXJuIEV2ZW50U3RyZWFtKG1f
ZXZlbnRGaWxlUGF0aCk7Cit9CisKK0NhY2hlZFJlc291cmNlOjpFdmVudFN0cmVhbTo6RXZlbnRT
dHJlYW0oY29uc3QgU3RyaW5nJiBldmVudEZpbGVQYXRoKQorICAgIDogbV9ldmVudEZpbGVQYXRo
KGV2ZW50RmlsZVBhdGgpCisgICAgLCBtX21hcHBlZEV2ZW50RmlsZShXZWJDb3JlOjpNYXBwZWRG
aWxlRGF0YShtX2V2ZW50RmlsZVBhdGgsIG1faGF2ZU1hcHBlZEV2ZW50RmlsZSkpCisgICAgLCBt
X2RlY29kZXIobWFrZURlY29kZXIoKSkKK3sKK30KKworV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZl
bnQ+IENhY2hlZFJlc291cmNlOjpFdmVudFN0cmVhbTo6bmV4dEV2ZW50KCkKK3sKKyAgICBpZiAo
IW1fZGVjb2Rlci5nZXQoKSkgeworICAgICAgICBERUJVR19MT0dfRVJST1IoIkFza2VkIHRvIHJl
dHVybiBhbiBldmVudCBmcm9tIGEgZmlsZSB3ZSBjb3VsZG4ndCBvcGVuOiBmaWxlID0gJXtwdWJs
aWN9cyIsIERFQlVHX1NUUihtX2V2ZW50RmlsZVBhdGgpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6
T3B0aW9uYWw8Q2FwdHVyZUV2ZW50PigpOworICAgIH0KKworICAgIHVpbnQ4X3QgZXZlbnRUeXBl
OworICAgIGlmICghbV9kZWNvZGVyLT5kZWNvZGUoZXZlbnRUeXBlKSkgeworICAgICAgICBERUJV
R19MT0dfRVJST1IoIlVuYWJsZSB0byByZWFkIGV2ZW50IHR5cGU6IGZpbGUgPSAle3B1YmxpY31z
IiwgREVCVUdfU1RSKG1fZXZlbnRGaWxlUGF0aCkpOworICAgICAgICByZXR1cm4gV1RGOjpPcHRp
b25hbDxDYXB0dXJlRXZlbnQ+KCk7CisgICAgfQorCisgICAgc3dpdGNoIChldmVudFR5cGUpIHsK
KyAgICBjYXNlIFJlcXVlc3RTZW50RXZlbnQ6OmtUeXBlOgorICAgICAgICByZXR1cm4gUmVxdWVz
dFNlbnRFdmVudDo6ZGVjb2RlKCptX2RlY29kZXIpOworICAgIGNhc2UgUmVzcG9uc2VSZWNlaXZl
ZEV2ZW50OjprVHlwZToKKyAgICAgICAgcmV0dXJuIFJlc3BvbnNlUmVjZWl2ZWRFdmVudDo6ZGVj
b2RlKCptX2RlY29kZXIpOworICAgIGNhc2UgUmVkaXJlY3RSZWNlaXZlZEV2ZW50OjprVHlwZToK
KyAgICAgICAgcmV0dXJuIFJlZGlyZWN0UmVjZWl2ZWRFdmVudDo6ZGVjb2RlKCptX2RlY29kZXIp
OworICAgIGNhc2UgUmVkaXJlY3RTZW50RXZlbnQ6OmtUeXBlOgorICAgICAgICByZXR1cm4gUmVk
aXJlY3RTZW50RXZlbnQ6OmRlY29kZSgqbV9kZWNvZGVyKTsKKyAgICBjYXNlIERhdGFSZWNlaXZl
ZEV2ZW50OjprVHlwZToKKyAgICAgICAgcmV0dXJuIERhdGFSZWNlaXZlZEV2ZW50OjpkZWNvZGUo
Km1fZGVjb2Rlcik7CisgICAgY2FzZSBGaW5pc2hlZEV2ZW50OjprVHlwZToKKyAgICAgICAgcmV0
dXJuIEZpbmlzaGVkRXZlbnQ6OmRlY29kZSgqbV9kZWNvZGVyKTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBERUJVR19MT0dfRVJST1IoIkV2ZW50IHN0cmVhbSBjb250YWlucyB1bmtub3duIGV2ZW50
ICglZCk6IGZpbGUgPSAle3B1YmxpY31zIiwgc3RhdGljX2Nhc3Q8aW50PihldmVudFR5cGUpLCBE
RUJVR19TVFIobV9ldmVudEZpbGVQYXRoKSk7CisgICAgICAgIHJldHVybiBXVEY6Ok9wdGlvbmFs
PENhcHR1cmVFdmVudD4oKTsKKyAgICB9Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJUEM6OkRlY29k
ZXI+IENhY2hlZFJlc291cmNlOjpFdmVudFN0cmVhbTo6bWFrZURlY29kZXIoKQoreworICAgIGlm
ICghbV9oYXZlTWFwcGVkRXZlbnRGaWxlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPElQQzo6RGVjb2Rlcj4oCisgICAgICAgIElQQzo6RGF0
YVJlZmVyZW5jZSgKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KG1fbWFwcGVkRXZlbnRGaWxlLmRhdGEoKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXpl
X3Q+KG1fbWFwcGVkRXZlbnRGaWxlLnNpemUoKSkpLAorICAgICAgICBWZWN0b3I8SVBDOjpBdHRh
Y2htZW50PigpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1
cmVDYWNoZWRSZXNvdXJjZS5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVy
ZS9OZXR3b3JrQ2FwdHVyZUNhY2hlZFJlc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGZkMTBiNzlhNmM5
NjI2OTQzNDZiMTkwYjAyMWJkZDg5NTAxZDUyMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJj
ZS5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShORVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCisjaW5j
bHVkZSAiRGVjb2Rlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlRXZlbnQuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VSTC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvVVJMUGFyc2VyLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisK
KyNpbmNsdWRlIDxtZW1vcnk+CisKK25hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIE5ldHdv
cmtDYXB0dXJlIHsKKworY2xhc3MgQ2FjaGVkUmVzb3VyY2UgeworcHVibGljOgorICAgIGNsYXNz
IEV2ZW50U3RyZWFtIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEV2ZW50U3RyZWFtKCkgPSBkZWZh
dWx0OworICAgICAgICBFdmVudFN0cmVhbShjb25zdCBTdHJpbmcmIGV2ZW50RmlsZVBhdGgpOwor
ICAgICAgICBFdmVudFN0cmVhbShFdmVudFN0cmVhbSYmKSA9IGRlZmF1bHQ7CisgICAgICAgIEV2
ZW50U3RyZWFtJiBvcGVyYXRvcj0oRXZlbnRTdHJlYW0mJiBvdGhlcikgPSBkZWZhdWx0OworCisg
ICAgICAgIFdURjo6T3B0aW9uYWw8Q2FwdHVyZUV2ZW50PiBuZXh0RXZlbnQoKTsKKworICAgIHBy
aXZhdGU6CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkRlY29kZXI+IG1ha2VEZWNvZGVy
KCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBTdHJpbmcgbV9ldmVudEZpbGVQYXRoOworICAg
ICAgICBib29sIG1faGF2ZU1hcHBlZEV2ZW50RmlsZSB7IGZhbHNlIH07CisgICAgICAgIFdlYkNv
cmU6Ok1hcHBlZEZpbGVEYXRhIG1fbWFwcGVkRXZlbnRGaWxlOworICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8SVBDOjpEZWNvZGVyPiBtX2RlY29kZXI7CisgICAgfTsKKworcHVibGljOgorICAgIENh
Y2hlZFJlc291cmNlKGNvbnN0IFN0cmluZyYgZXZlbnRGaWxlUGF0aCk7CisgICAgQ2FjaGVkUmVz
b3VyY2UoQ2FjaGVkUmVzb3VyY2UmJikgPSBkZWZhdWx0OworICAgIH5DYWNoZWRSZXNvdXJjZSgp
OworCisgICAgQ2FjaGVkUmVzb3VyY2UmIG9wZXJhdG9yPShjb25zdCBDYWNoZWRSZXNvdXJjZSYg
b3RoZXIpID0gZGVmYXVsdDsKKyAgICBDYWNoZWRSZXNvdXJjZSYgb3BlcmF0b3I9KENhY2hlZFJl
c291cmNlJiYgb3RoZXIpID0gZGVmYXVsdDsKKworICAgIGNvbnN0IFdlYkNvcmU6OlVSTCYgdXJs
KCk7CisgICAgY29uc3QgV2ViQ29yZTo6VVJMJiBiYXNlVVJMKCk7CisgICAgV2ViQ29yZTo6VVJM
UGFyc2VyOjpVUkxFbmNvZGVkRm9ybSBxdWVyeVBhcmFtZXRlcnMoKTsKKyAgICBFdmVudFN0cmVh
bSBldmVudFN0cmVhbSgpOworCitwcml2YXRlOgorICAgIFN0cmluZyBtX2V2ZW50RmlsZVBhdGg7
CisKKyAgICAvLyBMYXppbHkgY2FsY3VsYXRlZC4KKyAgICBXZWJDb3JlOjpVUkwgbV91cmw7Cisg
ICAgV2ViQ29yZTo6VVJMIG1fYmFzZVVSTDsKKyAgICBXZWJDb3JlOjpVUkxQYXJzZXI6OlVSTEVu
Y29kZWRGb3JtIG1fcXVlcnlQYXJhbWV0ZXJzOworCisgICAgYm9vbCBtX2hhdmVVUkwgeyBmYWxz
ZSB9OworICAgIGJvb2wgbV9oYXZlQmFzZVVSTCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhdmVR
dWVyeVBhcmFtZXRlcnMgeyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0Nh
cHR1cmUKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktf
Q0FQVFVSRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1
cmUvTmV0d29ya0NhcHR1cmVFdmVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM5N2M4ODJiNjYw
NmYzMWZlODYwM2NjOWZlMGY4MGRmOGQyMzIyMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuY3BwCkBA
IC0wLDAgKzEsMjAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIk5ldHdvcmtDYXB0dXJlRXZlbnQuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUp
CisKKyNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiRGVjb2Rlci5oIgorI2lu
Y2x1ZGUgIkVuY29kZXIuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCIKKyNp
bmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKworbmFtZXNwYWNlIElQQyB7CisKK3Vz
aW5nIFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkNhcHR1cmVUaW1lVHlwZTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxDYXB0dXJlVGltZVR5cGU+IHsKKyAgICBzdGF0aWMgdm9p
ZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IENhcHR1cmVUaW1lVHlwZSYpOworICAgIHN0YXRpYyBi
b29sIGRlY29kZShEZWNvZGVyJiwgQ2FwdHVyZVRpbWVUeXBlJik7Cit9OworCit2b2lkIEFyZ3Vt
ZW50Q29kZXI8Q2FwdHVyZVRpbWVUeXBlPjo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgQ2FwdHVyZVRpbWVUeXBlJiB0aW1lKQoreworICAgIGVuY29kZXIgPDwgdGltZS5zZWNv
bmRzU2luY2VFcG9jaCgpLnZhbHVlKCk7Cit9CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxDYXB0dXJl
VGltZVR5cGU+OjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBDYXB0dXJlVGltZVR5cGUm
IHRpbWUpCit7CisgICAgZG91YmxlIHZhbHVlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFs
dWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB0aW1lID0gQ2FwdHVyZVRpbWVUeXBl
Ojpmcm9tUmF3U2Vjb25kcyh2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIElQQworCituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FwdHVy
ZSB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIFdURjo6T3B0aW9uYWw8Q2FwdHVy
ZUV2ZW50PiB3cmFwKFQmJiBldmVudCkKK3sKKyAgICByZXR1cm4gV1RGOjpPcHRpb25hbDxDYXB0
dXJlRXZlbnQ+KENhcHR1cmVFdmVudChXVEZNb3ZlKGV2ZW50KSkpOworfQorCitib29sIFJlcXVl
c3RTZW50RXZlbnQ6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAg
ZW5jb2RlciA8PCB0aW1lOworICAgIGVuY29kZXIgPDwgcmVxdWVzdDsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+IFJlcXVlc3RTZW50RXZlbnQ6OmRl
Y29kZShJUEM6OkRlY29kZXImIGRlY29kZXIpCit7CisgICAgQ2FwdHVyZVRpbWVUeXBlIHRpbWU7
CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Q7CisKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHRpbWUpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShyZXF1ZXN0KSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6T3B0aW9uYWw8Q2FwdHVyZUV2ZW50PigpOworCisgICAgcmV0dXJu
IHdyYXAoUmVxdWVzdFNlbnRFdmVudChXVEZNb3ZlKHRpbWUpLCBXVEZNb3ZlKHJlcXVlc3QpKSk7
Cit9CisKK2Jvb2wgUmVzcG9uc2VSZWNlaXZlZEV2ZW50OjplbmNvZGUoSVBDOjpFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgdGltZTsKKyAgICBlbmNvZGVyIDw8IHJl
c3BvbnNlOworICAgIHJldHVybiB0cnVlOworfQorCitXVEY6Ok9wdGlvbmFsPENhcHR1cmVFdmVu
dD4gUmVzcG9uc2VSZWNlaXZlZEV2ZW50OjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQor
eworICAgIENhcHR1cmVUaW1lVHlwZSB0aW1lOworICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UgcmVzcG9uc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRpbWUpCisgICAgICAgIHx8
ICFkZWNvZGVyLmRlY29kZShyZXNwb25zZSkpCisgICAgICAgIHJldHVybiBXVEY6Ok9wdGlvbmFs
PENhcHR1cmVFdmVudD4oKTsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIC8vIEZvcmNlIHRo
ZSBjcmVhdGlvbiBvZiBuZWVkZWQgcGxhdGZvcm0tc3BlY2lmaWMgZGF0YSB0aGF0IG90aGVyd2lz
ZSBpcyBub3QgY3JlYXRlZC4KKyAgICAodm9pZCkgcmVzcG9uc2UubnNVUkxSZXNwb25zZSgpOwor
I2VuZGlmCisKKyAgICByZXR1cm4gd3JhcChSZXNwb25zZVJlY2VpdmVkRXZlbnQoV1RGTW92ZSh0
aW1lKSwgV1RGTW92ZShyZXNwb25zZSkpKTsKK30KKworYm9vbCBSZWRpcmVjdFJlY2VpdmVkRXZl
bnQ6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8
PCB0aW1lOworICAgIGVuY29kZXIgPDwgcmVxdWVzdDsKKyAgICBlbmNvZGVyIDw8IHJlc3BvbnNl
OworICAgIHJldHVybiB0cnVlOworfQorCitXVEY6Ok9wdGlvbmFsPENhcHR1cmVFdmVudD4gUmVk
aXJlY3RSZWNlaXZlZEV2ZW50OjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQoreworICAg
IENhcHR1cmVUaW1lVHlwZSB0aW1lOworICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1
ZXN0OworICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHRpbWUpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShyZXF1ZXN0
KQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUocmVzcG9uc2UpKQorICAgICAgICByZXR1cm4g
V1RGOjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+KCk7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAg
ICAvLyBGb3JjZSB0aGUgY3JlYXRpb24gb2YgbmVlZGVkIHBsYXRmb3JtLXNwZWNpZmljIGRhdGEg
dGhhdCBvdGhlcndpc2UgaXMgbm90IGNyZWF0ZWQuCisgICAgKHZvaWQpIHJlc3BvbnNlLm5zVVJM
UmVzcG9uc2UoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHdyYXAoUmVkaXJlY3RSZWNlaXZlZEV2
ZW50KFdURk1vdmUodGltZSksIFdURk1vdmUocmVxdWVzdCksIFdURk1vdmUocmVzcG9uc2UpKSk7
Cit9CisKK2Jvb2wgUmVkaXJlY3RTZW50RXZlbnQ6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29k
ZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCB0aW1lOworICAgIGVuY29kZXIgPDwgcmVxdWVz
dDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+IFJl
ZGlyZWN0U2VudEV2ZW50OjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIENh
cHR1cmVUaW1lVHlwZSB0aW1lOworICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0
OworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0aW1lKQorICAgICAgICB8fCAhZGVjb2Rlci5k
ZWNvZGUocmVxdWVzdCkpCisgICAgICAgIHJldHVybiBXVEY6Ok9wdGlvbmFsPENhcHR1cmVFdmVu
dD4oKTsKKworICAgIHJldHVybiB3cmFwKFJlZGlyZWN0U2VudEV2ZW50KFdURk1vdmUodGltZSks
IFdURk1vdmUocmVxdWVzdCkpKTsKK30KKworYm9vbCBEYXRhUmVjZWl2ZWRFdmVudDo6ZW5jb2Rl
KElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IHRpbWU7Cisg
ICAgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFSZWYocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4oZGF0YS0+ZGF0YSgpKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5zaXplKCkpKTsK
KyAgICBlbmNvZGVyLmVuY29kZVZhcmlhYmxlTGVuZ3RoQnl0ZUFycmF5KGRhdGFSZWYpOworICAg
IHJldHVybiB0cnVlOworfQorCitXVEY6Ok9wdGlvbmFsPENhcHR1cmVFdmVudD4gRGF0YVJlY2Vp
dmVkRXZlbnQ6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIpCit7CisgICAgQ2FwdHVyZVRp
bWVUeXBlIHRpbWU7CisgICAgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFSZWY7CisKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHRpbWUpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZVZhcmlhYmxl
TGVuZ3RoQnl0ZUFycmF5KGRhdGFSZWYpKQorICAgICAgICByZXR1cm4gV1RGOjpPcHRpb25hbDxD
YXB0dXJlRXZlbnQ+KCk7CisKKyAgICByZXR1cm4gd3JhcChEYXRhUmVjZWl2ZWRFdmVudChXVEZN
b3ZlKHRpbWUpLCBXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShkYXRhUmVmLmRhdGEoKSwg
ZGF0YVJlZi5zaXplKCkpKSk7Cit9CisKK2Jvb2wgRmluaXNoZWRFdmVudDo6ZW5jb2RlKElQQzo6
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IHRpbWU7CisgICAgZW5j
b2RlciA8PCBlcnJvcjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworV1RGOjpPcHRpb25hbDxDYXB0
dXJlRXZlbnQ+IEZpbmlzaGVkRXZlbnQ6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIpCit7
CisgICAgQ2FwdHVyZVRpbWVUeXBlIHRpbWU7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBl
cnJvcjsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUodGltZSkKKyAgICAgICAgfHwgIWRlY29k
ZXIuZGVjb2RlKGVycm9yKSkKKyAgICAgICAgcmV0dXJuIFdURjo6T3B0aW9uYWw8Q2FwdHVyZUV2
ZW50PigpOworCisgICAgcmV0dXJuIFdURjo6T3B0aW9uYWw8Q2FwdHVyZUV2ZW50PihDYXB0dXJl
RXZlbnQoRmluaXNoZWRFdmVudChXVEZNb3ZlKHRpbWUpLCBXVEZNb3ZlKGVycm9yKSkpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5oIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTA2NTJjNjAyN2ZiNDk3MDgzYTY2NTBiNjFjZDEzYTI3YjA0NWJhMQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0
d29ya0NhcHR1cmVFdmVudC5oCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorCisjaW5jbHVkZSAiTmV0d29y
a0NhcHR1cmVUeXBlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZVJlc3BvbnNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KKyNpbmNs
dWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2lu
Y2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KKworbmFtZXNw
YWNlIElQQyB7CitjbGFzcyBEZWNvZGVyOworY2xhc3MgRW5jb2RlcjsKK30KKworbmFtZXNwYWNl
IFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgeworCitzdHJ1Y3QgUmVxdWVzdFNl
bnRFdmVudDsKK3N0cnVjdCBSZXNwb25zZVJlY2VpdmVkRXZlbnQ7CitzdHJ1Y3QgUmVkaXJlY3RS
ZWNlaXZlZEV2ZW50Oworc3RydWN0IFJlZGlyZWN0U2VudEV2ZW50Oworc3RydWN0IERhdGFSZWNl
aXZlZEV2ZW50Oworc3RydWN0IEZpbmlzaGVkRXZlbnQ7CisKK3VzaW5nIENhcHR1cmVFdmVudFR5
cGVzID0gVHlwZUhvbGRlcjwKKyAgICBSZXF1ZXN0U2VudEV2ZW50LAorICAgIFJlc3BvbnNlUmVj
ZWl2ZWRFdmVudCwKKyAgICBSZWRpcmVjdFJlY2VpdmVkRXZlbnQsCisgICAgUmVkaXJlY3RTZW50
RXZlbnQsCisgICAgRGF0YVJlY2VpdmVkRXZlbnQsCisgICAgRmluaXNoZWRFdmVudD47CisKK3Vz
aW5nIENhcHR1cmVFdmVudCA9IENhcHR1cmVFdmVudFR5cGVzOjpWYXJpYW50VHlwZTsKK3VzaW5n
IENhcHR1cmVDbG9ja1R5cGUgPSBXVEY6Ok1vbm90b25pY1RpbWU7Cit1c2luZyBDYXB0dXJlVGlt
ZVR5cGUgPSBXVEY6Ok1vbm90b25pY1RpbWU7CisKK3N0cnVjdCBUaW1lZEV2ZW50IHsKKyAgICBU
aW1lZEV2ZW50KCkKKyAgICAgICAgOiB0aW1lKENhcHR1cmVDbG9ja1R5cGU6Om5vdygpKSB7IH0K
KyAgICBUaW1lZEV2ZW50KENhcHR1cmVUaW1lVHlwZSYmIHRpbWUpCisgICAgICAgIDogdGltZShX
VEZNb3ZlKHRpbWUpKSB7IH0KKyAgICBDYXB0dXJlVGltZVR5cGUgdGltZTsKK307CisKK3N0cnVj
dCBSZXF1ZXN0U2VudEV2ZW50IGZpbmFsIDogcHVibGljIFRpbWVkRXZlbnQgeworICAgIFJlcXVl
c3RTZW50RXZlbnQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorICAg
ICAgICA6IFRpbWVkRXZlbnQoKSwgcmVxdWVzdChyZXF1ZXN0KSB7IH0KKyAgICBSZXF1ZXN0U2Vu
dEV2ZW50KENhcHR1cmVUaW1lVHlwZSYmIHRpbWUsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYm
IHJlcXVlc3QpCisgICAgICAgIDogVGltZWRFdmVudChXVEZNb3ZlKHRpbWUpKSwgcmVxdWVzdChX
VEZNb3ZlKHJlcXVlc3QpKSB7IH0KKyAgICBib29sIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25z
dDsKKyAgICBzdGF0aWMgV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+IGRlY29kZShJUEM6OkRl
Y29kZXImKTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3Qga1R5cGUgeyBDYXB0dXJlRXZl
bnRUeXBlczo6VHlwZUluZGV4PFJlcXVlc3RTZW50RXZlbnQ+IH07CisgICAgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0IHJlcXVlc3Q7Cit9OworCitzdHJ1Y3QgUmVzcG9uc2VSZWNlaXZlZEV2ZW50
IGZpbmFsIDogcHVibGljIFRpbWVkRXZlbnQgeworICAgIFJlc3BvbnNlUmVjZWl2ZWRFdmVudChj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKKyAgICAgICAgOiBUaW1l
ZEV2ZW50KCksIHJlc3BvbnNlKHJlc3BvbnNlKSB7IH0KKyAgICBSZXNwb25zZVJlY2VpdmVkRXZl
bnQoQ2FwdHVyZVRpbWVUeXBlJiYgdGltZSwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmIHJl
c3BvbnNlKQorICAgICAgICA6IFRpbWVkRXZlbnQoV1RGTW92ZSh0aW1lKSksIHJlc3BvbnNlKFdU
Rk1vdmUocmVzcG9uc2UpKSB7IH0KKyAgICBib29sIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25z
dDsKKyAgICBzdGF0aWMgV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+IGRlY29kZShJUEM6OkRl
Y29kZXImKTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3Qga1R5cGUgeyBDYXB0dXJlRXZl
bnRUeXBlczo6VHlwZUluZGV4PFJlc3BvbnNlUmVjZWl2ZWRFdmVudD4gfTsKKyAgICBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOworfTsKKworc3RydWN0IFJlZGlyZWN0UmVjZWl2
ZWRFdmVudCBmaW5hbCA6IHB1YmxpYyBUaW1lZEV2ZW50IHsKKyAgICBSZWRpcmVjdFJlY2VpdmVk
RXZlbnQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKKyAgICAgICAgOiBUaW1lZEV2ZW50KCks
IHJlcXVlc3QocmVxdWVzdCksIHJlc3BvbnNlKHJlc3BvbnNlKSB7IH0KKyAgICBSZWRpcmVjdFJl
Y2VpdmVkRXZlbnQoQ2FwdHVyZVRpbWVUeXBlJiYgdGltZSwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiYgcmVxdWVzdCwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmIHJlc3BvbnNlKQorICAg
ICAgICA6IFRpbWVkRXZlbnQoV1RGTW92ZSh0aW1lKSksIHJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0
KSksIHJlc3BvbnNlKFdURk1vdmUocmVzcG9uc2UpKSB7IH0KKyAgICBib29sIGVuY29kZShJUEM6
OkVuY29kZXImKSBjb25zdDsKKyAgICBzdGF0aWMgV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+
IGRlY29kZShJUEM6OkRlY29kZXImKTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3Qga1R5
cGUgeyBDYXB0dXJlRXZlbnRUeXBlczo6VHlwZUluZGV4PFJlZGlyZWN0UmVjZWl2ZWRFdmVudD4g
fTsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdDsKKyAgICBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOworfTsKKworc3RydWN0IFJlZGlyZWN0U2VudEV2ZW50
IGZpbmFsIDogcHVibGljIFRpbWVkRXZlbnQgeworICAgIFJlZGlyZWN0U2VudEV2ZW50KGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKKyAgICAgICAgOiBUaW1lZEV2ZW50
KCksIHJlcXVlc3QocmVxdWVzdCkgeyB9CisgICAgUmVkaXJlY3RTZW50RXZlbnQoQ2FwdHVyZVRp
bWVUeXBlJiYgdGltZSwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCkKKyAgICAg
ICAgOiBUaW1lZEV2ZW50KFdURk1vdmUodGltZSkpLCByZXF1ZXN0KFdURk1vdmUocmVxdWVzdCkp
IHsgfQorICAgIGJvb2wgZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBX
VEY6Ok9wdGlvbmFsPENhcHR1cmVFdmVudD4gZGVjb2RlKElQQzo6RGVjb2RlciYpOworICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludDhfdCBrVHlwZSB7IENhcHR1cmVFdmVudFR5cGVzOjpUeXBlSW5k
ZXg8UmVkaXJlY3RTZW50RXZlbnQ+IH07CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJl
cXVlc3Q7Cit9OworCitzdHJ1Y3QgRGF0YVJlY2VpdmVkRXZlbnQgZmluYWwgOiBwdWJsaWMgVGlt
ZWRFdmVudCB7CisgICAgRGF0YVJlY2VpdmVkRXZlbnQoV2ViQ29yZTo6U2hhcmVkQnVmZmVyJiBk
YXRhKQorICAgICAgICA6IFRpbWVkRXZlbnQoKSwgZGF0YShkYXRhKSB7IH0KKyAgICBEYXRhUmVj
ZWl2ZWRFdmVudChDYXB0dXJlVGltZVR5cGUmJiB0aW1lLCBSZWY8V2ViQ29yZTo6U2hhcmVkQnVm
ZmVyPiYmIGRhdGEpCisgICAgICAgIDogVGltZWRFdmVudChXVEZNb3ZlKHRpbWUpKSwgZGF0YShX
VEZNb3ZlKGRhdGEpKSB7IH0KKyAgICBib29sIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25zdDsK
KyAgICBzdGF0aWMgV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+IGRlY29kZShJUEM6OkRlY29k
ZXImKTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3Qga1R5cGUgeyBDYXB0dXJlRXZlbnRU
eXBlczo6VHlwZUluZGV4PERhdGFSZWNlaXZlZEV2ZW50PiB9OworICAgIFJlZjxXZWJDb3JlOjpT
aGFyZWRCdWZmZXI+IGRhdGE7Cit9OworCitzdHJ1Y3QgRmluaXNoZWRFdmVudCBmaW5hbCA6IHB1
YmxpYyBUaW1lZEV2ZW50IHsKKyAgICBGaW5pc2hlZEV2ZW50KGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlRXJyb3ImIGVycm9yKQorICAgICAgICA6IFRpbWVkRXZlbnQoKSwgZXJyb3IoZXJyb3IpIHsg
fQorICAgIEZpbmlzaGVkRXZlbnQoQ2FwdHVyZVRpbWVUeXBlJiYgdGltZSwgV2ViQ29yZTo6UmVz
b3VyY2VFcnJvciYmIGVycm9yKQorICAgICAgICA6IFRpbWVkRXZlbnQoV1RGTW92ZSh0aW1lKSks
IGVycm9yKFdURk1vdmUoZXJyb3IpKSB7IH0KKyAgICBib29sIGVuY29kZShJUEM6OkVuY29kZXIm
KSBjb25zdDsKKyAgICBzdGF0aWMgV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+IGRlY29kZShJ
UEM6OkRlY29kZXImKTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3Qga1R5cGUgeyBDYXB0
dXJlRXZlbnRUeXBlczo6VHlwZUluZGV4PEZpbmlzaGVkRXZlbnQ+IH07CisgICAgV2ViQ29yZTo6
UmVzb3VyY2VFcnJvciBlcnJvcjsKK307CisKK30gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJl
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBUFRV
UkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05l
dHdvcmtDYXB0dXJlTG9nZ2luZy5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fw
dHVyZS9OZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOWM3YzExY2Y4MzU3MTUw
NjllMWE3Y2YxMDYzNjJjN2Y0YzIzYzcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaApAQCAtMCww
ICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTkVUV09S
S19DQVBUVVJFKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorCisjZGVmaW5lIEVOQUJMRV9XVEZf
SU5URVJOQUxfREVCVUdHSU5HIDAKKworI2RlZmluZSBERUJVR19TVFIocykgICAgICAgICAgICAg
ICAgICAgIChzKS5hc2NpaSgpLmRhdGEoKQorCisjaWYgRU5BQkxFKFdURl9JTlRFUk5BTF9ERUJV
R0dJTkcpCisjZGVmaW5lIERFQlVHX0xPR19RVU9URShzdHIpICAgICAgICAgICAgI3N0cgorI2Rl
ZmluZSBERUJVR19MT0dfRVhQQU5EX0FORF9RVU9URShzdHIpIERFQlVHX0xPR19RVU9URShzdHIp
CisjZGVmaW5lIERFQlVHX0xPRyhmb3JtYXQsIC4uLikgICAgICAgICAgUkVMRUFTRV9MT0coTmV0
d29yaywgIiNQTFQ6ICVwIC0gJXtwdWJsaWN9czo6JXtwdWJsaWN9czogIiBmb3JtYXQsIHRoaXMs
IERFQlVHX0xPR19FWFBBTkRfQU5EX1FVT1RFKERFQlVHX0NMQVNTKSwgX19GVU5DVElPTl9fLCAj
I19fVkFfQVJHU19fKQorI2RlZmluZSBERUJVR19MT0dfRVJST1IoZm9ybWF0LCAuLi4pICAgIFJF
TEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIjUExUOiAlcCAtICV7cHVibGljfXM6OiV7cHVibGlj
fXM6ICIgZm9ybWF0LCB0aGlzLCBERUJVR19MT0dfRVhQQU5EX0FORF9RVU9URShERUJVR19DTEFT
UyksIF9fRlVOQ1RJT05fXywgIyNfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIERFQlVHX0xP
RyguLi4pICAgICAgICAgICAgICAgICAgKCh2b2lkKSAwKQorI2RlZmluZSBERUJVR19MT0dfRVJS
T1IoLi4uKSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssIF9fVkFfQVJHU19f
KQorI2VuZGlmCisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZU1h
bmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3Jr
Q2FwdHVyZU1hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIxYmFhNTY0MGFmNTczYTVmZjQwMDQyYjQx
OTY1M2Q5NWNkNjUzMWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlTWFuYWdlci5jcHAKQEAgLTAsMCArMSw2Mjkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya0Nh
cHR1cmVNYW5hZ2VyLmgiCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorCisjaW5jbHVk
ZSAiTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0
dXJlTG9nZ2luZy5oIgorI2luY2x1ZGUgIldlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5j
bHVkZSAiV2ViQ29yZS9VUkwuaCIKKyNpbmNsdWRlIDx3dGYvTUQ1Lmg+CisjaW5jbHVkZSA8d3Rm
L1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKKyNpbmNsdWRlIDxhbGdv
cml0aG0+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUg
PHN0ZGFyZy5oPgorCisjZGVmaW5lIERFQlVHX0NMQVNTIE1hbmFnZXIKKworbmFtZXNwYWNlIFdl
YktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgeworCitzdGF0aWMgY29uc3QgY2hhciog
a0Rpck5hbWVSZWNvcmRSZXBsYXkgPSAiV2ViS2l0UGVyZi9yZWNvcmRfcmVwbGF5IjsKK3N0YXRp
YyBjb25zdCBjaGFyKiBrRGlyTmFtZVJlc291cmNlcyA9ICJyZXNvdXJjZXMiOworc3RhdGljIGNv
bnN0IGNoYXIqIGtGaWxlTmFtZVJlcG9ydExvYWQgPSAicmVwb3J0X2xvYWQudHh0IjsKK3N0YXRp
YyBjb25zdCBjaGFyKiBrRmlsZU5hbWVSZXBvcnRSZWNvcmQgPSAicmVwb3J0X3JlY29yZC50eHQi
Oworc3RhdGljIGNvbnN0IGNoYXIqIGtGaWxlTmFtZVJlcG9ydFJlcGxheSA9ICJyZXBvcnRfcmVw
bGF5LnR4dCI7CisKK3N0YXRpYyBpbnQga01heE1hdGNoID0gc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKTsKK3N0YXRpYyBpbnQga01pbk1hdGNoID0gc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptaW4oKTsKKworLy8gVE9ETzogV2hhdCdzIHRoZSB0aHJlYWRpbmcgbW9kZWwgaW4gd2hp
Y2ggd2UncmUgcnVubmluZz8gV2UncmUgYWN0aW5nIGFzIGEKKy8vIHNpbmdsZXRvbiB0aGF0IGdl
dHMgY2FsbGVkIGFsbCBvdmVyIHRoZSBwbGFjZSwgYnV0IHdlJ3JlIG5vdCBkb2luZyBhbnl0aGlu
ZworLy8gdG8gcHJvdGVjdCBvdXJzZWxmIGZyb20gbXVsdGktdGhyZWFkZWQgYWNjZXNzLiBPbiB0
aGUgb3RoZXIgaGFuZCwgcGVyaGFwcworLy8gd2UncmUgT0sgd2l0aG91dCBzeW5jaHJvbml6YXRp
b24uIFdoZW4gcmVjb3JkaW5nLCB3ZSdyZSBqdXN0IHdyaXRpbmcgZGF0YSB0bworLy8gZmlsZXMu
IFdoZW4gcGxheWluZyB0aGluZ3MgYmFjaywgd2UgaW5pdGlhbGl6ZSBvdXIgZGF0YSB1cCBmcm9u
dCBhbmQgdGhlbgorLy8gdXNlIGl0IGluIGEgcmVhZC1vbmx5IG1hbm5lciBhZnRlcndhcmRzLgor
CitNYW5hZ2VyJiBNYW5hZ2VyOjpzaW5nbGV0b24oKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxNYW5hZ2VyPiBpbnN0YW5jZTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKK3ZvaWQg
TWFuYWdlcjo6aW5pdGlhbGl6ZSgKKyAgICBib29sIHNob3VsZFJlY29yZE5ldHdvcmtSZXF1ZXN0
cywKKyAgICBib29sIHNob3VsZFJlcGxheU5ldHdvcmtSZXF1ZXN0cywKKyAgICBjb25zdCBTdHJp
bmcmIHJlY29yZFJlcGxheUNhY2hlTG9jYXRpb24pCit7CisgICAgREVCVUdfTE9HKCJJbml0aWFs
aXppbmciKTsKKworICAgIG1fc2hvdWxkUmVjb3JkTmV0d29ya1JlcXVlc3RzID0gc2hvdWxkUmVj
b3JkTmV0d29ya1JlcXVlc3RzOworICAgIG1fc2hvdWxkUmVwbGF5TmV0d29ya1JlcXVlc3RzID0g
c2hvdWxkUmVwbGF5TmV0d29ya1JlcXVlc3RzOworICAgIG1fcmVjb3JkUmVwbGF5Q2FjaGVMb2Nh
dGlvbiA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChyZWNvcmRSZXBsYXlDYWNo
ZUxvY2F0aW9uLCBrRGlyTmFtZVJlY29yZFJlcGxheSk7CisKKyAgICBERUJVR19MT0coIkNhY2hl
IGxvY2F0aW9uID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX3JlY29yZFJlcGxheUNhY2hlTG9j
YXRpb24pKTsKKworICAgIGlmIChtX3Nob3VsZFJlcGxheU5ldHdvcmtSZXF1ZXN0cykKKyAgICAg
ICAgbG9hZENhY2hlZFJlc291cmNlcygpOworfQorCit2b2lkIE1hbmFnZXI6OnRlcm1pbmF0ZSgp
Cit7Cit9CisKK0NhY2hlZFJlc291cmNlKiBNYW5hZ2VyOjpmaW5kTWF0Y2goY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIC8vIERFQlVHX0xPRygiVVJMID0g
JXtwdWJsaWN9cyIsIERFQlVHX1NUUihyZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisKKyAgICBh
dXRvIGJlc3RNYXRjaCA9IGZpbmRFeGFjdE1hdGNoKHJlcXVlc3QpOworICAgIGlmICghYmVzdE1h
dGNoKQorICAgICAgICBiZXN0TWF0Y2ggPSBmaW5kQmVzdEZ1enp5TWF0Y2gocmVxdWVzdCk7CisK
KyAgICBpZiAoIWJlc3RNYXRjaCkKKyAgICAgICAgREVCVUdfTE9HKCJDb3VsZCBub3QgZmluZCBt
YXRjaCBmb3I6ICV7cHVibGljfXMiLCBERUJVR19TVFIocmVxdWVzdC51cmwoKS5zdHJpbmcoKSkp
OworICAgIGVsc2UgaWYgKHJlcXVlc3QudXJsKCkgPT0gYmVzdE1hdGNoLT51cmwoKSkKKyAgICAg
ICAgREVCVUdfTE9HKCJGb3VuZCBleGFjdCBtYXRjaCBmb3I6ICV7cHVibGljfXMiLCBERUJVR19T
VFIocmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworICAgIGVsc2UgeworICAgICAgICBERUJVR19M
T0coIkZvdW5kIGZ1enp5IG1hdGNoIGZvcjogJXtwdWJsaWN9cyIsIERFQlVHX1NUUihyZXF1ZXN0
LnVybCgpLnN0cmluZygpKSk7CisgICAgICAgIERFQlVHX0xPRygiICAgICAgIHJlcGxhY2VkIHdp
dGggOiAle3B1YmxpY31zIiwgREVCVUdfU1RSKGJlc3RNYXRjaC0+dXJsKCkuc3RyaW5nKCkpKTsK
KyAgICB9CisKKyAgICByZXR1cm4gYmVzdE1hdGNoOworfQorCitDYWNoZWRSZXNvdXJjZSogTWFu
YWdlcjo6ZmluZEV4YWN0TWF0Y2goY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0KQoreworICAgIGNvbnN0IGF1dG8mIHVybCA9IHJlcXVlc3QudXJsKCk7CisgICAgYXV0byBs
b3dlciA9IHN0ZDo6bG93ZXJfYm91bmQoc3RkOjpiZWdpbihtX2NhY2hlZFJlc291cmNlcyksIHN0
ZDo6ZW5kKG1fY2FjaGVkUmVzb3VyY2VzKSwgdXJsLCBbXShhdXRvJiByZXNvdXJjZSwgY29uc3Qg
YXV0byYgdXJsKSB7CisgICAgICAgIHJldHVybiBXVEY6OmNvZGVQb2ludENvbXBhcmVMZXNzVGhh
bihyZXNvdXJjZS51cmwoKS5zdHJpbmcoKSwgdXJsLnN0cmluZygpKTsKKyAgICB9KTsKKworICAg
IGlmIChsb3dlciAhPSBzdGQ6OmVuZChtX2NhY2hlZFJlc291cmNlcykgJiYgbG93ZXItPnVybCgp
ID09IHVybCkgeworICAgICAgICAvLyBERUJVR19MT0coIkZvdW5kIGV4YWN0IG1hdGNoOiAle3B1
YmxpY31zIiwgREVCVUdfU1RSKGxvd2VyLT51cmwoKS5zdHJpbmcoKSkpOworICAgICAgICByZXR1
cm4gJipsb3dlcjsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQ2FjaGVkUmVz
b3VyY2UqIE1hbmFnZXI6OmZpbmRCZXN0RnV6enlNYXRjaChjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgY29uc3QgYXV0byYgdXJsID0gcmVxdWVzdC51cmwo
KTsKKyAgICBDYWNoZWRSZXNvdXJjZSogYmVzdE1hdGNoID0gbnVsbHB0cjsKKyAgICBpbnQgYmVz
dFNjb3JlID0ga01pbk1hdGNoOworICAgIGNvbnN0IGF1dG8mIGJhc2VVUkwgPSBiYXNlVVJMQXNT
dHJpbmcodXJsKTsKKworICAgIGNvbnN0IGF1dG8mIGxvd2VyID0gc3RkOjpsb3dlcl9ib3VuZChz
dGQ6OmJlZ2luKG1fY2FjaGVkUmVzb3VyY2VzKSwgc3RkOjplbmQobV9jYWNoZWRSZXNvdXJjZXMp
LCBiYXNlVVJMLCBbXShhdXRvJiByZXNvdXJjZSwgY29uc3QgYXV0byYgdXJsKSB7CisgICAgICAg
IHJldHVybiBXVEY6OmNvZGVQb2ludENvbXBhcmVMZXNzVGhhbihyZXNvdXJjZS5iYXNlVVJMKCku
c3RyaW5nKCksIHVybCk7CisgICAgfSk7CisgICAgY29uc3QgYXV0byYgdXBwZXIgPSBzdGQ6OnVw
cGVyX2JvdW5kKGxvd2VyLCBzdGQ6OmVuZChtX2NhY2hlZFJlc291cmNlcyksIGJhc2VVUkwsIFtd
KGNvbnN0IGF1dG8mIHVybCwgYXV0byYgcmVzb3VyY2UpIHsKKyAgICAgICAgcmV0dXJuIFdURjo6
Y29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKHJlc291cmNlLmJhc2VVUkwoKS5zdHJpbmcoKSwgdXJs
KTsKKyAgICB9KTsKKworICAgIGNvbnN0IGF1dG8mIHJlcXVlc3RQYXJhbWV0ZXJzID0gV2ViQ29y
ZTo6VVJMUGFyc2VyOjpwYXJzZVVSTEVuY29kZWRGb3JtKHVybC5xdWVyeSgpKTsKKyAgICBmb3Ig
KGF1dG8gaVJlc291cmNlID0gbG93ZXI7IGlSZXNvdXJjZSAhPSB1cHBlcjsgKytpUmVzb3VyY2Up
IHsKKyAgICAgICAgaW50IHRoaXNTY29yZSA9IGZ1enp5TWF0Y2hVUkxzKHVybCwgcmVxdWVzdFBh
cmFtZXRlcnMsIGlSZXNvdXJjZS0+dXJsKCksIGlSZXNvdXJjZS0+cXVlcnlQYXJhbWV0ZXJzKCkp
OworICAgICAgICAvLyBUT0RPOiBDb25zaWRlciBpZ25vcmluZyBhbnkgbWF0Y2hlcyA8IDAgYXMg
YmVpbmcgdG9vIGRpZmZlcmVudC4KKyAgICAgICAgaWYgKGJlc3RTY29yZSA8IHRoaXNTY29yZSkg
eworICAgICAgICAgICAgREVCVUdfTE9HKCJOZXcgYmVzdCBtYXRjaCAoJWQpOiAle3B1YmxpY31z
IiwgdGhpc1Njb3JlLCBERUJVR19TVFIoaVJlc291cmNlLT51cmwoKS5zdHJpbmcoKSkpOworICAg
ICAgICAgICAgYmVzdFNjb3JlID0gdGhpc1Njb3JlOworICAgICAgICAgICAgYmVzdE1hdGNoID0g
JippUmVzb3VyY2U7CisgICAgICAgICAgICBpZiAoYmVzdFNjb3JlID09IGtNYXhNYXRjaCkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBiZXN0
TWF0Y2g7Cit9CisKKy8vIFRPRE86IENvbnZlcnQgdG8gYW4gaW50ZXJmYWNlIGJhc2VkIG9uIFJl
c291cmNlUmVxdWVzdCBzbyB0aGF0IHdlIGNhbiBkbworLy8gZGVlcGVyIG1hdGNoaW5nLgorCitp
bnQgTWFuYWdlcjo6ZnV6enlNYXRjaFVSTHMoCisgICAgY29uc3QgV2ViQ29yZTo6VVJMJiByZXF1
ZXN0VVJMLCBjb25zdCBXZWJDb3JlOjpVUkxQYXJzZXI6OlVSTEVuY29kZWRGb3JtJiByZXF1ZXN0
UGFyYW1ldGVycywKKyAgICBjb25zdCBXZWJDb3JlOjpVUkwmIHJlc291cmNlVVJMLCBjb25zdCBX
ZWJDb3JlOjpVUkxQYXJzZXI6OlVSTEVuY29kZWRGb3JtJiByZXNvdXJjZVBhcmFtZXRlcnMpCit7
CisgICAgLy8gVE9ETzogY29uc2lkZXIgYXNzZXJ0aW5nIHRoYXQgYW55IHRyYWlsaW5nIHN1ZmZp
eGVzIChlLmcuLCAiLmpzIiwKKyAgICAvLyAiLnBuZyIsICIuY3NzIiwgIi5odG1sIiwgZXRjLikg
c2hvdWxkIGJlIGFuIGV4YWN0IG1hdGNoLgorCisjaWYgMAorICAgIC8vIFNob3VsZCBuZXZlciBn
ZXQgaGVyZSBiZWNhdXNlIGZpbmRFeGFjdE1hdGNoIHNob3VsZCBhbHJlYWR5IGhhdmUgZm91bmQK
KyAgICAvLyBjYXNlcyB3aGVyZSBldmVyeXRoaW5nIG1hdGNoZXMuCisgICAgLy8gSWYgZXZlcnl0
aGluZyBtYXRjaGVzLCByZXR1cm4gdGhpcyBhcyB0aGUgImJlc3QiIG1hdGNoLgorCisgICAgaWYg
KHJlcXVlc3RVUkwgPT0gcmVzb3VyY2VVUkwpIHsKKyAgICAgICAgREVCVUdfTE9HKCJDb21wbGV0
ZSBtYXRjaDogJXtwdWJsaWN9cyA9PSAle3B1YmxpY31zIiwKKyAgICAgICAgICAgIERFQlVHX1NU
UihyZXF1ZXN0VVJMLnN0cmluZygpKSwKKyAgICAgICAgICAgIERFQlVHX1NUUihyZXNvdXJjZVVS
TC5zdHJpbmcoKSkpOworICAgICAgICByZXR1cm4ga01heE1hdGNoOworICAgIH0KKyNlbmRpZgor
CisgICAgLy8gV2UgZG8gZnV6enkgbWF0Y2hpbmcgb24gdGhlIHBhdGggYW5kIHF1ZXJ5IHBhcmFt
ZXRlcnMuIFNvIGxldCdzIGZpcnN0CisgICAgLy8gbWFrZSBzdXJlIHRoYXQgYWxsIHRoZSBvdGhl
ciBwYXJ0cyBhcmUgZXF1YWwuCisKKyAgICAvLyBJZiBzY2hlbWUsIGhvc3QsIGFuZCBwb3J0IGRv
bid0IGFsbCBtYXRjaCwgcmV0dXJuIHRoaXMgYXMgdGhlICJ3b3JzdCIKKyAgICAvLyBtYXRjaC4K
KworICAgIGlmICghcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKHJlcXVlc3RVUkwsIHJlc291
cmNlVVJMKSkgeworICAgICAgICBERUJVR19MT0coIlNjaGVtZS9ob3N0L3BvcnQgbWlzbWF0Y2g6
ICV7cHVibGljfXMgIT0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihyZXF1ZXN0VVJMLnN0cmluZygp
KSwgREVCVUdfU1RSKHJlc291cmNlVVJMLnN0cmluZygpKSk7CisgICAgICAgIHJldHVybiBrTWlu
TWF0Y2g7CisgICAgfQorCisgICAgLy8gSWYgZnJhZ21lbnRzIGRvbid0IG1hdGNoLCByZXR1cm4g
dGhpcyBhcyB0aGUgIndvcnN0IiBtYXRjaC4KKworICAgIGlmIChyZXF1ZXN0VVJMLmZyYWdtZW50
SWRlbnRpZmllcigpICE9IHJlc291cmNlVVJMLmZyYWdtZW50SWRlbnRpZmllcigpKSB7CisgICAg
ICAgIERFQlVHX0xPRygiRnJhZ21lbnRzIG1pc21hdGNoOiAle3B1YmxpY31zICE9ICV7cHVibGlj
fXMiLCBERUJVR19TVFIocmVxdWVzdFVSTC5zdHJpbmcoKSksIERFQlVHX1NUUihyZXNvdXJjZVVS
TC5zdHJpbmcoKSkpOworICAgICAgICByZXR1cm4ga01pbk1hdGNoOworICAgIH0KKworICAgIERF
QlVHX0xPRygiRnV6enkgbWF0Y2hpbmc6Iik7CisgICAgREVCVUdfTE9HKCIgICA6ICV7cHVibGlj
fXMiLCBERUJVR19TVFIocmVxdWVzdFVSTC5zdHJpbmcoKSkpOworICAgIERFQlVHX0xPRygiICAg
OiAle3B1YmxpY31zIiwgREVCVUdfU1RSKHJlc291cmNlVVJMLnN0cmluZygpKSk7CisKKyAgICAv
LyBDb21wYXJlIHRoZSBwYXRoIGNvbXBvbmVudHMgYW5kIHRoZSBxdWVyeSBwYXJhbWV0ZXJzLiBT
Y29yZSBlYWNoIHBhcnRpYWwKKyAgICAvLyBtYXRjaCBhcyArNCwgZWFjaCBtaXNtYXRjaCBhcyAt
MSwgYW5kIGVhY2ggbWlzc2luZyBjb21wb25lbnQgYXMgLTEuCisgICAgLy8KKyAgICAvLyBOb3Rl
IHRoYXQgYXQgdGhlIGN1cnJlbnQgdGltZSB0aGVzZSB2YWx1ZXMgYXJlIHJhdGhlciBhcmJpdHJh
cnkgYW5kCisgICAgLy8gY291bGQgZmluZS10dW5lZC4KKworICAgIGNvbnN0IGludCBrUGF0aE1h
dGNoU2NvcmUgPSA0OworICAgIGNvbnN0IGludCBrUGF0aE1pc21hdGNoU2NvcmUgPSAtMTsKKyAg
ICBjb25zdCBpbnQga1BhdGhNaXNzaW5nU2NvcmUgPSAtMTsKKyAgICBjb25zdCBpbnQga1BhcmFt
ZXRlck1hdGNoU2NvcmUgPSA0OworICAgIGNvbnN0IGludCBrUGFyYW1ldGVyTWlzbWF0Y2hTY29y
ZSA9IC0xOworICAgIGNvbnN0IGludCBrUGFyYW1ldGVyTWlzc2luZ1Njb3JlID0gLTE7CisKKyAg
ICBpbnQgc2NvcmUgPSAwOworCisgICAgLy8gUXVhbnRpemUgdGhlIGRpZmZlcmVuY2VzIGluIFVS
TCBwYXRocy4KKyAgICAvLworICAgIC8vIFRoZSBhcHByb2FjaCBoZXJlIGlzIHRvIGluY3JlYXNl
IG91ciBzY29yZSBmb3IgZWFjaCBtYXRjaGluZyBwYXRoCisgICAgLy8gY29tcG9uZW50LCBhbmQg
dG8gc3VidHJhY3QgZm9yIGVhY2ggZGlmZmVyaW5nIGNvbXBvbmVudCBhcyB3ZWxsIGFzIGZvcgor
ICAgIC8vIGNvbXBvbmVudHMgdGhhdCBleGlzdCBpbiBvbmUgcGF0aCBidXQgbm90IHRoZSBvdGhl
ci4KKworICAgIGNvbnN0IGF1dG8mIHJlcXVlc3RQYXRoID0gcmVxdWVzdFVSTC5wYXRoKCk7Cisg
ICAgY29uc3QgYXV0byYgcmVzb3VyY2VQYXRoID0gcmVzb3VyY2VVUkwucGF0aCgpOworCisgICAg
VmVjdG9yPFN0cmluZz4gcmVxdWVzdFBhdGhDb21wb25lbnRzLCByZXNvdXJjZVBhdGhDb21wb25l
bnRzOworICAgIHJlcXVlc3RQYXRoLnNwbGl0KCcvJywgcmVxdWVzdFBhdGhDb21wb25lbnRzKTsK
KyAgICByZXNvdXJjZVBhdGguc3BsaXQoJy8nLCByZXNvdXJjZVBhdGhDb21wb25lbnRzKTsKKwor
ICAgIGF1dG8gdXBkYXRlZEl0ZXJhdG9ycyA9IHN0ZDo6bWlzbWF0Y2goCisgICAgICAgIHN0ZDo6
YmVnaW4ocmVxdWVzdFBhdGhDb21wb25lbnRzKSwgc3RkOjplbmQocmVxdWVzdFBhdGhDb21wb25l
bnRzKSwKKyAgICAgICAgc3RkOjpiZWdpbihyZXNvdXJjZVBhdGhDb21wb25lbnRzKSwgc3RkOjpl
bmQocmVzb3VyY2VQYXRoQ29tcG9uZW50cykpOworCisgICAgYXV0byBtYXRjaGluZ0Rpc3RhbmNl
ID0gc3RkOjpkaXN0YW5jZShzdGQ6OmJlZ2luKHJlcXVlc3RQYXRoQ29tcG9uZW50cyksIHVwZGF0
ZWRJdGVyYXRvcnMuZmlyc3QpOworICAgIGF1dG8gcmVxdWVzdFBhdGhNaXNtYXRjaERpc3RhbmNl
ID0gc3RkOjpkaXN0YW5jZSh1cGRhdGVkSXRlcmF0b3JzLmZpcnN0LCBzdGQ6OmVuZChyZXF1ZXN0
UGF0aENvbXBvbmVudHMpKTsKKyAgICBhdXRvIHJlc291cmNlUGF0aE1pc21hdGNoRGlzdGFuY2Ug
PSBzdGQ6OmRpc3RhbmNlKHVwZGF0ZWRJdGVyYXRvcnMuc2Vjb25kLCBzdGQ6OmVuZChyZXNvdXJj
ZVBhdGhDb21wb25lbnRzKSk7CisgICAgZGVjbHR5cGUobWF0Y2hpbmdEaXN0YW5jZSkgbWlzbWF0
Y2hpbmdEaXN0YW5jZTsKKyAgICBkZWNsdHlwZShtYXRjaGluZ0Rpc3RhbmNlKSBtaXNzaW5nRGlz
dGFuY2U7CisgICAgaWYgKHJlcXVlc3RQYXRoTWlzbWF0Y2hEaXN0YW5jZSA8IHJlc291cmNlUGF0
aE1pc21hdGNoRGlzdGFuY2UpIHsKKyAgICAgICAgbWlzbWF0Y2hpbmdEaXN0YW5jZSA9IHJlcXVl
c3RQYXRoTWlzbWF0Y2hEaXN0YW5jZTsKKyAgICAgICAgbWlzc2luZ0Rpc3RhbmNlID0gcmVzb3Vy
Y2VQYXRoTWlzbWF0Y2hEaXN0YW5jZSAtIHJlcXVlc3RQYXRoTWlzbWF0Y2hEaXN0YW5jZTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBtaXNtYXRjaGluZ0Rpc3RhbmNlID0gcmVzb3VyY2VQYXRoTWlz
bWF0Y2hEaXN0YW5jZTsKKyAgICAgICAgbWlzc2luZ0Rpc3RhbmNlID0gcmVxdWVzdFBhdGhNaXNt
YXRjaERpc3RhbmNlIC0gcmVzb3VyY2VQYXRoTWlzbWF0Y2hEaXN0YW5jZTsKKyAgICB9CisKKyAg
ICBERUJVR19MT0coIlBhdGggbWF0Y2hpbmcgcmVzdWx0czogbWF0Y2hpbmcgPSAlZCwgbWlzbWF0
Y2hpbmcgPSAlZCwgbWlzc2luZyA9ICVkIiwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtYXRj
aGluZ0Rpc3RhbmNlKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtaXNtYXRjaGluZ0Rpc3Rh
bmNlKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtaXNzaW5nRGlzdGFuY2UpKTsKKworICAg
IHNjb3JlICs9IG1hdGNoaW5nRGlzdGFuY2UgKiBrUGF0aE1hdGNoU2NvcmUKKyAgICAgICAgKyBt
aXNtYXRjaGluZ0Rpc3RhbmNlICoga1BhdGhNaXNtYXRjaFNjb3JlCisgICAgICAgICsgbWlzc2lu
Z0Rpc3RhbmNlICoga1BhdGhNaXNzaW5nU2NvcmU7CisgICAgREVCVUdfTE9HKCJTY29yZSA9ICVk
Iiwgc2NvcmUpOworCisgICAgLy8gUXVhbnRpemUgdGhlIGRpZmZlcmVuY2VzIGluIHF1ZXJ5IHBh
cmFtZXRlcnMuCisgICAgLy8KKyAgICAvLyBUaGUgYXBwcm9hY2ggaGVyZSBpcyB0byB3YWxrIGxv
Y2stc3RlcCBvdmVyIHRoZSB0d28gc2V0cyBvZiBxdWVyeQorICAgIC8vIHBhcmFtZXRlcnMuIEZv
ciBlYWNoIHBhaXIgb2YgcGFyYW1ldGVycyBmb3IgZWFjaCBVUkwsIHdlIGNvbXBhcmUgdGhlaXIK
KyAgICAvLyBuYW1lcyBhbmQgdmFsdWVzLiBJZiB0aGUgbmFtZXMgYW5kIHZhbHVlcyBtYXRjaCwg
d2UgYWRkIGEgaGlnaCBzY29yZS4gSWYKKyAgICAvLyBqdXN0IHRoZSBuYW1lcyBtYXRjaCwgd2Ug
YWRkIGEgbG93ZXIgc2NvcmUuCisgICAgLy8KKyAgICAvLyBJZiB0aGUgbmFtZXMgZG9uJ3QgbWF0
Y2gsIHdlIHRoZW4gYXNzdW1lIHRoYXQgc29tZSBpbnRlcnZlbmluZyBxdWVyeQorICAgIC8vIHBh
cmFtZXRlcnMgaGF2ZSBiZWVuIGFkZGVkIHRvIG9uZSBvciB0aGUgb3RoZXIgVVJMLiBXZSB0aGVy
ZWZvcmUgdHJ5IHRvCisgICAgLy8gc3luYyB1cCB0aGUgaXRlcmF0b3JzIHVzZWQgdG8gdHJhdmVy
c2UgdGhlIHF1ZXJ5IHBhcmFtZXRlciBjb2xsZWN0aW9ucworICAgIC8vIHNvIHRoYXQgdGhleSdy
ZSBhZ2FpbiBwb2ludGluZyB0byBwYXJhbWV0ZXJzIHdpdGggdGhlIHNhbWUgbmFtZXMuIFdlCisg
ICAgLy8gZmlyc3Qgc3RhcnQgc2Nhbm5pbmcgZm9yd2FyZCBkb3duIHRoZSBxdWVyeSBwYXJhbWV0
ZXJzIGZvciBvbmUgVVJMLAorICAgIC8vIGxvb2tpbmcgZm9yIG9uZSB3aXRoIHRoZSBzYW1lIG5h
bWUgYXMgdGhlIG9uZSB3ZSdyZSBvbiBpbiB0aGUgb3RoZXIgVVJMLgorICAgIC8vIElmIHRoYXQg
ZG9lc24ndCB0dXJuIHVwIGEgbWF0Y2gsIHdlIHJldmVyc2UgdGhlIHJvbGVzIG9mIHRoZSBxdWVy
eQorICAgIC8vIHBhcmFtZXRlcnMgcGVyZm9ybSB0aGUgc2FtZSBwcm9jZXNzIG9mIHNjYW5uaW5n
IGZvcndhcmQuIElmIG5laXRoZXIgb2YKKyAgICAvLyB0aGVzZSBzY2FucyBwcm9kdWNlcyBhIG1h
dGNoLCB3ZSBmaWd1cmUgdGhhdCBlYWNoIHF1ZXJ5IHBhcmFtZXRlciB3ZSdyZQorICAgIC8vIGxv
b2tpbmcgYXQgZnJvbSBlYWNoIG9mIHRoZSBxdWVyeSBwYXJhbWV0ZXIgY29sbGVjdGlvbnMgaXMg
dW5pcXVlLiBXZQorICAgIC8vIGRlZHVjdCBwb2ludHMgZnJvbSB0aGUgb3ZlcmFsbCBzY29yZSBh
bmQgbW92ZSBvbiB0byB0aGUgbmV4dCBxdWVyeQorICAgIC8vIHBhcmFtZXRlcnMgaW4gZWFjaCBz
ZXQuCisgICAgLy8KKyAgICAvLyBJZiwgb24gdGhlIG90aGVyIGhhbmQsIHRoZSBmb3J3YXJkLXNj
YW5uaW5nIGRvZXMgdHVybiB1cCBhIG1hdGNoLCB3ZQorICAgIC8vIGFkanVzdCBvdXQgaXRlcmF0
b3JzIHNvIHRoYXQgdGhleSdyZSBub3cgYWdhaW4gcG9pbnRpbmcgdG8gcXVlcnkKKyAgICAvLyBw
YXJhbWV0ZXJzIHdpdGggdGhlIHNhbWUgbmFtZS4gVGhpcyBzeW5jaHJvbml6YXRpb24gaW52b2x2
ZXMgc2tpcHBpbmcKKyAgICAvLyBvdmVyIGFueSBpbnRlcnZlbmluZyBxdWVyeSBwYXJhbWV0ZXJz
IGluIG9uZSBjb2xsZWN0aW9uIG9yIHRoZSBvdGhlci4KKyAgICAvLyBUaGUgYXNzdW1wdGlvbiBo
ZXJlIGlzIHRoYXQgdGhlc2UgaW50ZXJ2ZW5pbmcgcXVlcnkgcGFyYW1ldGVycyBhcmUKKyAgICAv
LyBpbnNlcnRpb25zIHRoYXQgZXhpc3QgaW4gb25lIFVSTCBidXQgbm90IHRoZSBvdGhlci4gV2Ug
dHJlYXQgdGhlbSBhcworICAgIC8vIHN1Y2gsIHN1YnRyYWN0aW5nIGZyb20gdGhlIG92ZXJhbGwg
c2NvcmUgZm9yIGVhY2ggb25lLiBIb3dldmVyLCB0aGlzCisgICAgLy8gYXNzdW1wdGlvbiBtaWdo
dCBlYXNpbHkgYmUgaW5jb3JyZWN0LiBJdCBtaWdodCBiZSB0aGF0IHRoZSBxdWVyeQorICAgIC8v
IHBhcmFtZXRlcnMgdGhhdCB3ZSdyZSBza2lwcGluZyBvdmVyIGluIG9uZSBVUkwgbWlnaHQgZXhp
c3QgaW4gdGhlIG90aGVyCisgICAgLy8gVVJMLiBJZiBzbywgdGhlbiB3ZSBhcmUgZm9yZWdvaW5n
IHRoZSBwb3NzaWJpbGl0eSBvZiB1c2luZyB0aG9zZSBtYXRjaGVzCisgICAgLy8gdG8gaW5jcmVh
c2UgdGhlIG92ZXJhbGwgbWF0Y2ggc2NvcmUgYmV0d2VlbiB0aGUgdHdvIFVSTHMuCisgICAgLy8K
KyAgICAvLyBUbyBhZGRyZXNzIHRoaXMgcHJvYmxlbSwgd2UgbWlnaHQgd2FudCB0byBjb25zaWRl
ciBzb3J0aW5nIHRoZSBxdWVyeQorICAgIC8vIHBhcmFtZXRlcnMgYnkgdGhlaXIgbmFtZXMuIEhv
d2V2ZXIsIGRvaW5nIHRoaXMgbWF5IGNhdXNlIHByb2JsZW1zIGlmIHRoZQorICAgIC8vIG9yZGVy
IG9mIHRoZSBwYXJhbWV0ZXJzIGlzIHNpZ25pZmljYW50LiBTbyBpZiB3ZSBkZWNpZGUgdG8gdGFr
ZSB0aGUKKyAgICAvLyBhcHByb2FjaCBvZiBzb3J0aW5nIHRoZSBwYXJhbWV0ZXJzLCBrZWVwIGlu
IG1pbmQgdGhpcyBwb3NzaWJsZSBkcmF3YmFjay4KKworICAgIGF1dG8gcmVxdWVzdFBhcmFtZXRl
ciA9IHN0ZDo6YmVnaW4ocmVxdWVzdFBhcmFtZXRlcnMpOworICAgIGF1dG8gcmVzb3VyY2VQYXJh
bWV0ZXIgPSBzdGQ6OmJlZ2luKHJlc291cmNlUGFyYW1ldGVycyk7CisKKyAgICBmb3IgKDsgcmVx
dWVzdFBhcmFtZXRlciAhPSBzdGQ6OmVuZChyZXF1ZXN0UGFyYW1ldGVycykgJiYgcmVzb3VyY2VQ
YXJhbWV0ZXIgIT0gc3RkOjplbmQocmVzb3VyY2VQYXJhbWV0ZXJzKTsgKytyZXF1ZXN0UGFyYW1l
dGVyLCArK3Jlc291cmNlUGFyYW1ldGVyKSB7CisgICAgICAgIGlmIChyZXF1ZXN0UGFyYW1ldGVy
LT5maXJzdCA9PSByZXNvdXJjZVBhcmFtZXRlci0+Zmlyc3QpIHsKKyNpZiBFTkFCTEUoV1RGX0lO
VEVSTkFMX0RFQlVHR0lORykKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0UGFyYW1ldGVyLT5zZWNv
bmQgPT0gcmVzb3VyY2VQYXJhbWV0ZXItPnNlY29uZCkKKyAgICAgICAgICAgICAgICBERUJVR19M
T0coIk1hdGNoaW5nIHBhcmFtZXRlciBuYW1lcyBhbmQgdmFsdWVzOiBcIiV7cHVibGljfXNcIiA9
IFwiJXtwdWJsaWN9c1wiIiwgREVCVUdfU1RSKHJlcXVlc3RQYXJhbWV0ZXItPmZpcnN0KSwgREVC
VUdfU1RSKHJlcXVlc3RQYXJhbWV0ZXItPnNlY29uZCkpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIERFQlVHX0xPRygiTWlzbWF0Y2hpbmcgcGFyYW1ldGVyIHZhbHVlczogXCIl
e3B1YmxpY31zXCIgPSBcIiV7cHVibGljfXNcIiB2cy4gXCIle3B1YmxpY31zXCIiLCBERUJVR19T
VFIocmVxdWVzdFBhcmFtZXRlci0+Zmlyc3QpLCBERUJVR19TVFIocmVxdWVzdFBhcmFtZXRlci0+
c2Vjb25kKSwgREVCVUdfU1RSKHJlc291cmNlUGFyYW1ldGVyLT5zZWNvbmQpKTsKKyNlbmRpZgor
ICAgICAgICAgICAgc2NvcmUgKz0gKHJlcXVlc3RQYXJhbWV0ZXItPnNlY29uZCA9PSByZXNvdXJj
ZVBhcmFtZXRlci0+c2Vjb25kKSA/IGtQYXJhbWV0ZXJNYXRjaFNjb3JlIDoga1BhcmFtZXRlck1p
c21hdGNoU2NvcmU7CisgICAgICAgICAgICBERUJVR19MT0coIlNjb3JlID0gJWQiLCBzY29yZSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBERUJVR19MT0coIk1pc21hdGNoaW5nIHBh
cmFtZXRlciBuYW1lczogJXtwdWJsaWN9cywgJXtwdWJsaWN9cyIsIERFQlVHX1NUUihyZXF1ZXN0
UGFyYW1ldGVyLT5maXJzdCksIERFQlVHX1NUUihyZXNvdXJjZVBhcmFtZXRlci0+Zmlyc3QpKTsK
KworICAgICAgICAgICAgY29uc3QgYXV0byBzY2FuRm9yd2FyZEZvck1hdGNoID0gW3RoaXMsICZz
Y29yZSwga1BhcmFtZXRlck1hdGNoU2NvcmUsIGtQYXJhbWV0ZXJNaXNtYXRjaFNjb3JlLCBrUGFy
YW1ldGVyTWlzc2luZ1Njb3JlXShjb25zdCBhdXRvJiBmaXhlZEl0ZXIsIGF1dG8mIHNjYW5uaW5n
SXRlciwgY29uc3QgYXV0byYgc2Nhbm5lckVuZCkgeworICAgICAgICAgICAgICAgIGF1dG8gc2Nh
bm5lciA9IHNjYW5uaW5nSXRlcjsKKyAgICAgICAgICAgICAgICB3aGlsZSAoc2Nhbm5lciAhPSBz
Y2FubmVyRW5kICYmIHNjYW5uZXItPmZpcnN0ICE9IGZpeGVkSXRlci0+Zmlyc3QpCisgICAgICAg
ICAgICAgICAgICAgICsrc2Nhbm5lcjsKKyAgICAgICAgICAgICAgICBpZiAoc2Nhbm5lciA9PSBz
Y2FubmVyRW5kKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgREVCVUdfTE9HKCJTa2lwcGluZyBwYXN0ICVkIG5vbi1tYXRjaGluZyBwYXJhbWV0ZXIg
bmFtZXMiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0ZDo6ZGlzdGFuY2Uoc2Nhbm5pbmdJdGVyLCBzY2Fu
bmVyKSkpOworICAgICAgICAgICAgICAgIHNjb3JlICs9IGtQYXJhbWV0ZXJNaXNzaW5nU2NvcmUg
KiBzdGQ6OmRpc3RhbmNlKHNjYW5uaW5nSXRlciwgc2Nhbm5lcik7CisgICAgICAgICAgICAgICAg
REVCVUdfTE9HKCJTY29yZSA9ICVkIiwgc2NvcmUpOworI2lmIEVOQUJMRShXVEZfSU5URVJOQUxf
REVCVUdHSU5HKQorICAgICAgICAgICAgICAgIGlmIChmaXhlZEl0ZXItPnNlY29uZCA9PSBzY2Fu
bmVyLT5zZWNvbmQpCisgICAgICAgICAgICAgICAgICAgIERFQlVHX0xPRygiTWF0Y2hpbmcgcGFy
YW1ldGVyIG5hbWVzIGFuZCB2YWx1ZXM6IFwiJXtwdWJsaWN9c1wiID0gXCIle3B1YmxpY31zXCIi
LCBERUJVR19TVFIoZml4ZWRJdGVyLT5maXJzdCksIERFQlVHX1NUUihmaXhlZEl0ZXItPnNlY29u
ZCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgREVCVUdfTE9H
KCJNaXNtYXRjaGluZyBwYXJhbWV0ZXIgdmFsdWVzOiBcIiV7cHVibGljfXNcIiA9IFwiJXtwdWJs
aWN9c1wiIHZzLiBcIiV7cHVibGljfXNcIiIsIERFQlVHX1NUUihmaXhlZEl0ZXItPmZpcnN0KSwg
REVCVUdfU1RSKGZpeGVkSXRlci0+c2Vjb25kKSwgREVCVUdfU1RSKHNjYW5uZXItPnNlY29uZCkp
OworI2VuZGlmCisgICAgICAgICAgICAgICAgc2NvcmUgKz0gKGZpeGVkSXRlci0+c2Vjb25kID09
IHNjYW5uZXItPnNlY29uZCkgPyBrUGFyYW1ldGVyTWF0Y2hTY29yZSA6IGtQYXJhbWV0ZXJNaXNt
YXRjaFNjb3JlOworICAgICAgICAgICAgICAgIERFQlVHX0xPRygiU2NvcmUgPSAlZCIsIHNjb3Jl
KTsKKyAgICAgICAgICAgICAgICBzY2FubmluZ0l0ZXIgPSBzY2FubmVyOworICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKCFzY2Fu
Rm9yd2FyZEZvck1hdGNoKHJlcXVlc3RQYXJhbWV0ZXIsIHJlc291cmNlUGFyYW1ldGVyLCBzdGQ6
OmVuZChyZXNvdXJjZVBhcmFtZXRlcnMpKSkgeworICAgICAgICAgICAgICAgIGlmICghc2NhbkZv
cndhcmRGb3JNYXRjaChyZXNvdXJjZVBhcmFtZXRlciwgcmVxdWVzdFBhcmFtZXRlciwgc3RkOjpl
bmQocmVxdWVzdFBhcmFtZXRlcnMpKSkgeworICAgICAgICAgICAgICAgICAgICBERUJVR19MT0co
IlVubWF0Y2hlZCBwYXJhbWV0ZXI6ICV7cHVibGljfXM9JXtwdWJsaWN9cyIsIERFQlVHX1NUUihy
ZXF1ZXN0UGFyYW1ldGVyLT5maXJzdCksIERFQlVHX1NUUihyZXF1ZXN0UGFyYW1ldGVyLT5zZWNv
bmQpKTsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdfTE9HKCJVbm1hdGNoZWQgcGFyYW1ldGVy
OiAle3B1YmxpY31zPSV7cHVibGljfXMiLCBERUJVR19TVFIocmVzb3VyY2VQYXJhbWV0ZXItPmZp
cnN0KSwgREVCVUdfU1RSKHJlc291cmNlUGFyYW1ldGVyLT5zZWNvbmQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgc2NvcmUgKz0ga1BhcmFtZXRlck1pc3NpbmdTY29yZSArIGtQYXJhbWV0ZXJNaXNz
aW5nU2NvcmU7CisgICAgICAgICAgICAgICAgICAgIERFQlVHX0xPRygiU2NvcmUgPSAlZCIsIHNj
b3JlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBERUJVR19MT0coIkFkanVzdGluZyBmb3IgdHJhaWxpbmcgcGFyYW1ldGVycyIpOwor
ICAgIHNjb3JlICs9IGtQYXJhbWV0ZXJNaXNzaW5nU2NvcmUKKyAgICAgICAgKiAoc3RkOjpkaXN0
YW5jZShyZXF1ZXN0UGFyYW1ldGVyLCBzdGQ6OmVuZChyZXF1ZXN0UGFyYW1ldGVycykpCisgICAg
ICAgICAgICArIHN0ZDo6ZGlzdGFuY2UocmVzb3VyY2VQYXJhbWV0ZXIsIHN0ZDo6ZW5kKHJlc291
cmNlUGFyYW1ldGVycykpKTsKKyAgICBERUJVR19MT0coIlNjb3JlID0gJWQiLCBzY29yZSk7CisK
KyAgICByZXR1cm4gc2NvcmU7Cit9CisKK3ZvaWQgTWFuYWdlcjo6bG9hZENhY2hlZFJlc291cmNl
cygpCit7CisgICAgVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiBsaW5lczsKKyAgICBpZiAoIXJlYWRG
aWxlKHJlcG9ydFJlY29yZFBhdGgoKSwgbGluZXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBm
b3IgKGNvbnN0IGF1dG8mIGxpbmUgOiBsaW5lcykgeworICAgICAgICBpZiAobGluZS5zaXplKCkg
IT0gMikgeworICAgICAgICAgICAgREVCVUdfTE9HX0VSUk9SKCJsaW5lLnNpemUgPT0gJWQiLCAo
aW50KSBsaW5lLnNpemUoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIENhY2hlZFJlc291cmNlIG5ld1Jlc291cmNlKGhhc2hUb1BhdGgobGluZVswXSkpOwor
ICAgICAgICBtX2NhY2hlZFJlc291cmNlcy5hcHBlbmQoV1RGTW92ZShuZXdSZXNvdXJjZSkpOwor
ICAgIH0KKworICAgIHN0ZDo6c29ydChzdGQ6OmJlZ2luKG1fY2FjaGVkUmVzb3VyY2VzKSwgc3Rk
OjplbmQobV9jYWNoZWRSZXNvdXJjZXMpLCBbXShhdXRvJiBsZWZ0LCBhdXRvJiByaWdodCkgewor
ICAgICAgICByZXR1cm4gV1RGOjpjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4obGVmdC51cmwoKS5z
dHJpbmcoKSwgcmlnaHQudXJsKCkuc3RyaW5nKCkpOworICAgIH0pOworCisgICAgZm9yIChhdXRv
JiByZXNvdXJjZSA6IG1fY2FjaGVkUmVzb3VyY2VzKQorICAgICAgICBsb2dMb2FkZWRSZXNvdXJj
ZShyZXNvdXJjZSk7Cit9CisKK1N0cmluZyBNYW5hZ2VyOjpyZXBvcnRMb2FkUGF0aCgpCit7Cisg
ICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX3JlY29yZFJlcGxh
eUNhY2hlTG9jYXRpb24sIGtGaWxlTmFtZVJlcG9ydExvYWQpOworfQorCitTdHJpbmcgTWFuYWdl
cjo6cmVwb3J0UmVjb3JkUGF0aCgpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChtX3JlY29yZFJlcGxheUNhY2hlTG9jYXRpb24sIGtGaWxlTmFtZVJlcG9y
dFJlY29yZCk7Cit9CisKK1N0cmluZyBNYW5hZ2VyOjpyZXBvcnRSZXBsYXlQYXRoKCkKK3sKKyAg
ICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fcmVjb3JkUmVwbGF5
Q2FjaGVMb2NhdGlvbiwga0ZpbGVOYW1lUmVwb3J0UmVwbGF5KTsKK30KKworU3RyaW5nIE1hbmFn
ZXI6OnJlcXVlc3RUb1BhdGgoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
KQoreworICAgIC8vIFRPRE86IGNvbWUgdXAgd2l0aCBhIG1vcmUgY29tcHJlaGVuc2l2ZSBoYXNo
IHRoYXQgaW5jbHVkZXMgSFRUUCBtZXRob2QKKyAgICAvLyBhbmQgcG9zc2libHkgb3RoZXIgdmFs
dWVzIChzdWNoIGFzIGhlYWRlcnMpLgorCisgICAgY29uc3QgYXV0byYgaGFzaCA9IHN0cmluZ1Rv
SGFzaChyZXF1ZXN0LnVybCgpLnN0cmluZygpKTsKKyAgICBjb25zdCBhdXRvJiBwYXRoID0gaGFz
aFRvUGF0aChoYXNoKTsKKyAgICByZXR1cm4gcGF0aDsKK30KKworU3RyaW5nIE1hbmFnZXI6OnN0
cmluZ1RvSGFzaChjb25zdCBTdHJpbmcmIHMpCit7CisgICAgV1RGOjpNRDUgbWQ1OworICAgIGlm
IChzLmNoYXJhY3RlcnM4KCkpCisgICAgICAgIG1kNS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPihzLmNoYXJhY3RlcnM4KCkpLCBzLmxlbmd0aCgpKTsKKyAgICBlbHNl
CisgICAgICAgIG1kNS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihz
LmNoYXJhY3RlcnMxNigpKSwgMiAqIHMubGVuZ3RoKCkpOworCisgICAgV1RGOjpNRDU6OkRpZ2Vz
dCBkaWdlc3Q7CisgICAgbWQ1LmNoZWNrc3VtKGRpZ2VzdCk7CisKKyAgICByZXR1cm4gV1RGOjpi
YXNlNjRVUkxFbmNvZGUoJmRpZ2VzdFswXSwgV1RGOjpNRDU6Omhhc2hTaXplKTsKK30KKworCitT
dHJpbmcgTWFuYWdlcjo6aGFzaFRvUGF0aChjb25zdCBTdHJpbmcmIGhhc2gpCit7CisgICAgU3Ry
aW5nIHJlc3VsdDsKKworICAgIGNvbnN0IGludCBrTnVtYmVyT2ZQYXJlbnREaXJlY3RvcmllcyA9
IDE7CisgICAgY29uc3QgaW50IGtQYXJlbnREaXJlY3RvcnlOYW1lTGVuZ3RoID0gMjsKKyAgICB1
bnNpZ25lZCBpbmRleCA9IDA7CisKKyAgICBmb3IgKGludCBkaXJOdW0gPSAwOyBkaXJOdW0gPCBr
TnVtYmVyT2ZQYXJlbnREaXJlY3RvcmllczsgKytkaXJOdW0pIHsKKyAgICAgICAgcmVzdWx0LmFw
cGVuZChoYXNoLnN1YnN0cmluZyhpbmRleCwga1BhcmVudERpcmVjdG9yeU5hbWVMZW5ndGgpKTsK
KyAgICAgICAgcmVzdWx0LmFwcGVuZCgnLycpOworICAgICAgICBpbmRleCArPSBrUGFyZW50RGly
ZWN0b3J5TmFtZUxlbmd0aDsKKyAgICB9CisKKyAgICByZXN1bHQuYXBwZW5kKGhhc2guc3Vic3Ry
aW5nKGluZGV4KSk7CisgICAgYXV0byBwYXRoMSA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChtX3JlY29yZFJlcGxheUNhY2hlTG9jYXRpb24sIGtEaXJOYW1lUmVzb3VyY2VzKTsK
KyAgICBhdXRvIHBhdGgyID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhdGgx
LCByZXN1bHQpOworICAgIHJldHVybiBwYXRoMiArICIuZGF0YSI7Cit9CisKK3ZvaWQgTWFuYWdl
cjo6bG9nUmVjb3JkZWRSZXNvdXJjZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QpCit7CisgICAgLy8gTG9nIG5ldHdvcmsgcmVzb3VyY2VzIGFzIHRoZXkgYXJlIGNhY2hl
ZCB0byBkaXNrLgorCisgICAgaWYgKGVuc3VyZUZpbGVIYW5kbGUocmVwb3J0UmVjb3JkUGF0aCgp
LCAmbV9yZWNvcmRGaWxlSGFuZGxlKSkgeworICAgICAgICBjb25zdCBhdXRvJiB1cmwgPSByZXF1
ZXN0LnVybCgpOworICAgICAgICBwcmludFRvRmlsZShtX3JlY29yZEZpbGVIYW5kbGUsICIlcyAl
c1xuIiwgREVCVUdfU1RSKHN0cmluZ1RvSGFzaCh1cmwuc3RyaW5nKCkpKSwgREVCVUdfU1RSKHVy
bC5zdHJpbmcoKSkpOworICAgIH0KK30KKwordm9pZCBNYW5hZ2VyOjpsb2dMb2FkZWRSZXNvdXJj
ZShDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpCit7CisgICAgLy8gTG9nIGNhY2hlZCByZXNvdXJj
ZXMgYXMgdGhleSBhcmUgbG9hZGVkIGZyb20gZGlzay4KKworICAgIGlmIChlbnN1cmVGaWxlSGFu
ZGxlKHJlcG9ydExvYWRQYXRoKCksICZtX2xvYWRGaWxlSGFuZGxlKSkKKyAgICAgICAgcHJpbnRU
b0ZpbGUobV9sb2FkRmlsZUhhbmRsZSwgIiVzXG4iLCBERUJVR19TVFIocmVzb3VyY2UudXJsKCku
c3RyaW5nKCkpKTsKK30KKwordm9pZCBNYW5hZ2VyOjpsb2dQbGF5ZWRCYWNrUmVzb3VyY2UoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHdhc0NhY2hlTWlzcykK
K3sKKyAgICAvLyBMb2cgbmV0d29yayByZXNvdXJjZXMgdGhhdCBhcmUgcmVxdWVzdGVkIGR1cmlu
ZyByZXBsYXkuCisKKyAgICBjb25zdCBhdXRvJiB1cmwgPSByZXF1ZXN0LnVybCgpOworCisgICAg
aWYgKHdhc0NhY2hlTWlzcykKKyAgICAgICAgREVCVUdfTE9HKCJDYWNoZSBtaXNzOiBVUkwgPSAl
e3B1YmxpY31zIiwgREVCVUdfU1RSKHVybC5zdHJpbmcoKSkpOworICAgIGVsc2UKKyAgICAgICAg
REVCVUdfTE9HKCJDYWNoZSBoaXQ6ICBVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RSKHVybC5z
dHJpbmcoKSkpOworCisgICAgaWYgKGVuc3VyZUZpbGVIYW5kbGUocmVwb3J0UmVwbGF5UGF0aCgp
LCAmbV9yZXBsYXlGaWxlSGFuZGxlKSkKKyAgICAgICAgcHJpbnRUb0ZpbGUobV9yZXBsYXlGaWxl
SGFuZGxlLCAiJXMgJXNcbiIsIHdhc0NhY2hlTWlzcyA/ICJtaXNzIiA6ICJoaXQgIiwgREVCVUdf
U1RSKHVybC5zdHJpbmcoKSkpOworfQorCitib29sIE1hbmFnZXI6OmVuc3VyZUZpbGVIYW5kbGUo
Y29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgRmlsZUhhbmRsZSogZmlsZUhhbmRsZSkKK3sKKyAgICAv
LyBJZiB0aGUgZmlsZSBpcyBhbHJlYWR5IG9wZW4sIHRoZW4gZG8gbm90aGluZy4KKworICAgIGlm
IChmaWxlSGFuZGxlICYmICpmaWxlSGFuZGxlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IC8vIFRyeSBvcGVuaW5nIHRoZSBmaWxlLgorCisgICAgKmZpbGVIYW5kbGUgPSBvcGVuQ2FjaGVG
aWxlKGZpbGVQYXRoLCBXZWJDb3JlOjpPcGVuRm9yV3JpdGUpOworICAgIHJldHVybiAqZmlsZUhh
bmRsZTsKK30KKworRmlsZUhhbmRsZSBNYW5hZ2VyOjpvcGVuQ2FjaGVGaWxlKGNvbnN0IFN0cmlu
ZyYgZmlsZVBhdGgsIFdlYkNvcmU6OkZpbGVPcGVuTW9kZSBtb2RlKQoreworICAgIC8vIElmIHdl
IGNhbiB0cml2aWFsbHkgb3BlbiB0aGUgZmlsZSwgdGhlbiBkbyB0aGF0IGFuZCByZXR1cm4gdGhl
IG5ldyBmaWxlCisgICAgLy8gaGFuZGxlLgorCisgICAgRmlsZUhhbmRsZSBmID0gRmlsZUhhbmRs
ZTo6b3BlbkZpbGUoZmlsZVBhdGgsIG1vZGUpOworICAgIGlmIChmKQorICAgICAgICByZXR1cm4g
ZjsKKworICAgIC8vIElmIHdlJ3JlIG9wZW5pbmcgdGhlIGZpbGUgZm9yIHdyaXRpbmcgKGluY2x1
ZGluZyBhcHBlbmRpbmcpLCB0aGVuIHRyeQorICAgIC8vIGFnYWluIGFmdGVyIG1ha2luZyBzdXJl
IGFsbCBpbnRlcm1lZGlhdGUgZGlyZWN0b3JpZXMgaGF2ZSBiZWVuIGNyZWF0ZWQuCisKKyAgICBp
ZiAobW9kZSAhPSBXZWJDb3JlOjpPcGVuRm9yUmVhZCkgeworICAgICAgICBjb25zdCBhdXRvJiBw
YXJlbnREaXIgPSBXZWJDb3JlOjpkaXJlY3RvcnlOYW1lKGZpbGVQYXRoKTsKKyAgICAgICAgaWYg
KCFXZWJDb3JlOjptYWtlQWxsRGlyZWN0b3JpZXMocGFyZW50RGlyKSkgeworICAgICAgICAgICAg
REVCVUdfTE9HX0VSUk9SKCJFcnJvciAlZCB0cnlpbmcgdG8gY3JlYXRlIGludGVybWVkaWF0ZSBk
aXJlY3RvcmllczogJXtwdWJsaWN9cyIsIGVycm5vLCBERUJVR19TVFIocGFyZW50RGlyKSk7Cisg
ICAgICAgICAgICByZXR1cm4gZjsKKyAgICAgICAgfQorCisgICAgICAgIGYgPSBGaWxlSGFuZGxl
OjpvcGVuRmlsZShmaWxlUGF0aCwgbW9kZSk7CisgICAgICAgIGlmIChmKQorICAgICAgICAgICAg
cmV0dXJuIGY7CisgICAgfQorCisgICAgLy8gQ291bGQgbm90IG9wZW4gdGhlIGZpbGUuIExvZyB0
aGUgZXJyb3IgYW5kIGxlYXZlLCByZXR1cm5pbmcgdGhlIGludmFsaWQKKyAgICAvLyBmaWxlIGhh
bmRsZS4KKworICAgIGlmIChtb2RlID09IFdlYkNvcmU6Ok9wZW5Gb3JSZWFkKQorICAgICAgICBE
RUJVR19MT0dfRVJST1IoIkVycm9yICVkIHRyeWluZyB0byBvcGVuICV7cHVibGljfXMgZm9yIHJl
YWRpbmciLCBlcnJubywgREVCVUdfU1RSKGZpbGVQYXRoKSk7CisgICAgZWxzZQorICAgICAgICBE
RUJVR19MT0dfRVJST1IoIkVycm9yICVkIHRyeWluZyB0byBvcGVuICV7cHVibGljfXMgZm9yIHdy
aXRpbmciLCBlcnJubywgREVCVUdfU1RSKGZpbGVQYXRoKSk7CisKKyAgICByZXR1cm4gZjsKK30K
KworYm9vbCBNYW5hZ2VyOjpyZWFkRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoLCBWZWN0b3I8
VmVjdG9yPFN0cmluZz4+JiBsaW5lcykKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAg
ICBXZWJDb3JlOjpNYXBwZWRGaWxlRGF0YSBmaWxlKGZpbGVQYXRoLCBzdWNjZXNzKTsKKyAgICBp
ZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gYmVnaW4gPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihmaWxlLmRhdGEoKSk7CisgICAgYXV0byBl
bmQgPSBiZWdpbiArIGZpbGUuc2l6ZSgpOworCisgICAgVmVjdG9yPFN0cmluZz4gbGluZTsKKyAg
ICB3aGlsZSAoZ2V0TGluZShiZWdpbiwgZW5kLCBsaW5lKSkKKyAgICAgICAgbGluZXMuYXBwZW5k
KFdURk1vdmUobGluZSkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTWFuYWdlcjo6
Z2V0TGluZSh1aW50OF90IGNvbnN0IComIHAsIHVpbnQ4X3QgY29uc3QgKiBjb25zdCBlbmQsIFZl
Y3RvcjxTdHJpbmc+JiBsaW5lKQoreworICAgIC8vIE5COiBSZXR1cm5zIHRydWUgaWYgdGhlcmUg
bWF5IGJlIG1vcmUgZGF0YSB0byBnZXQsIGZhbHNlIGlmIHdlJ3ZlIGhpdAorICAgIC8vIHRoZSBl
bmQgb2YgdGhlIGJ1ZmZlci4KKworICAgIC8vIERFQlVHX0xPRygiR2V0dGluZyBhIGxpbmUiKTsK
KworICAgIGxpbmUuY2xlYXIoKTsKKworICAgIGlmIChwID09IGVuZCkgeworICAgICAgICAvLyBE
RUJVR19MT0coIkl0ZXJhdG9yIGF0IGVuZDsgcmV0dXJuaW5nIGZhbHNlIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBTdHJpbmcgd29yZDsKKyAgICB3aGlsZSAoZ2V0V29y
ZChwLCBlbmQsIHdvcmQpKSB7CisgICAgICAgIGlmICghd29yZC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIC8vIERFQlVHX0xPRygiQWRkaW5nIHdvcmQ6ICV7cHVibGljfXMiLCBERUJVR19TVFIo
d29yZCkpOworICAgICAgICAgICAgbGluZS5hcHBlbmQod29yZCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNYW5hZ2VyOjpnZXRXb3JkKHVpbnQ4X3Qg
Y29uc3QgKiYgcCwgdWludDhfdCBjb25zdCAqIGNvbnN0IGVuZCwgU3RyaW5nJiB3b3JkKQorewor
ICAgIC8vIE5COiBSZXR1cm5zIHRydWUgaWYgYSAocG9zc2libHkgZW1wdHkpIHdvcmQgd2FzIGZv
dW5kIGFuZCB0aGVyZSBtYXkgYmUKKyAgICAvLyBtb3JlLCBmYWxzZSBpZiB3ZSd2ZSBoaXQgdGhl
IGVuZCBvZiBsaW5lIG9yIGJ1ZmZlci4KKworICAgIC8vIERFQlVHX0xPRygiR2V0dGluZyBhIHdv
cmQiKTsKKworICAgIGlmIChwID09IGVuZCkgeworICAgICAgICAvLyBERUJVR19MT0coIkl0ZXJh
dG9yIGF0IGVuZDsgcmV0dXJuaW5nIGZhbHNlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBpZiAoKnAgPT0gJ1xuJykgeworICAgICAgICAvLyBERUJVR19MT0coIkl0ZXJh
dG9yIGhpdCBFT0w7IHJldHVybmluZyBmYWxzZSIpOworICAgICAgICArK3A7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIGVzY2FwaW5nID0gZmFsc2U7CisgICAgYm9v
bCBpZ25vcmluZyA9IGZhbHNlOworCisgICAgd29yZCA9IFN0cmluZygpOworCisgICAgLy8gREVC
VUdfTE9HKCJJdGVyYXRpbmciKTsKKworICAgIGZvciAoIDsgcCAhPSBlbmQ7ICsrcCkgeworICAg
ICAgICBpZiAoaWdub3JpbmcpIHsKKyAgICAgICAgICAgIGlmICgqcCA9PSAnXG4nKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgaWYgKGVzY2FwaW5nKSB7CisgICAgICAg
ICAgICB3b3JkLmFwcGVuZCgqcCk7CisgICAgICAgICAgICBlc2NhcGluZyA9IGZhbHNlOworICAg
ICAgICB9IGVsc2UgaWYgKCpwID09ICcjJykgeworICAgICAgICAgICAgaWdub3JpbmcgPSB0cnVl
OworICAgICAgICB9IGVsc2UgaWYgKCpwID09ICdcXCcpIHsKKyAgICAgICAgICAgIGVzY2FwaW5n
ID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmICgqcCA9PSAnICcpIHsKKyAgICAgICAgICAgIGlm
ICghd29yZC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxz
ZSBpZiAoKnAgPT0gJ1xuJykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB3b3JkLmFwcGVuZCgqcCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgTWFuYWdlcjo6cHJpbnRUb0ZpbGUoY29uc3QgRmlsZUhhbmRsZSYgZiwgY29uc3QgY2hh
ciogZm9ybWF0LCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3Ms
IGZvcm1hdCk7CisKKyAgICBjaGFyKiBidWZmZXIgPSBudWxscHRyOworICAgIHZhc3ByaW50Zigm
YnVmZmVyLCBmb3JtYXQsIGFyZ3MpOworICAgIGF1dG8gd3JpdGVSZXN1bHQgPSBmLndyaXRlVG9G
aWxlKGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikpOworICAgIGZyZWUoYnVmZmVyKTsKKworICAgIHZh
X2VuZChhcmdzKTsKKworICAgIHJldHVybiB3cml0ZVJlc3VsdCA+PSAwOworfQorCitTdHJpbmcg
TWFuYWdlcjo6YmFzZVVSTEFzU3RyaW5nKGNvbnN0IFdlYkNvcmU6OlVSTCYgdXJsKQoreworICAg
IHJldHVybiB1cmwuc3RyaW5nKCkubGVmdCh1cmwucGF0aFN0YXJ0KCkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzlmZTRjOTc1ZmM2MDYwZWJkNDFiMmJhZjJkZDU4ZWE4YmYzNmNhYgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0Nh
cHR1cmVNYW5hZ2VyLmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRlICJOZXR3b3JrQ2Fw
dHVyZVR5cGVzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9VUkxQYXJzZXIuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFJl
c291cmNlUmVxdWVzdDsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29y
a0NhcHR1cmUgeworCitjbGFzcyBDYWNoZWRSZXNvdXJjZTsKKworLyoKKyAqIFNlcnZlcyB0aHJl
ZSBwdXJwb3NlczoKKyAqCisgKiAqIEtlZXBzIHRoZSBzdGF0ZSBvZiB3aGV0aGVyIHdlIGFyZSBy
ZWNvcmRpbmcsIHJlcGxheWluZywgb3IgbmVpdGhlci4KKyAqICogS2VlcHMgdGhlIGxpc3Qgb2Yg
Y2FjaGVkIHJlc291cmNlcyAoaWYgcmVwbGF5aW5nKSwgcGVyZm9ybXMgZnV6enkgbWF0Y2hpbmcg
b24gdGhlbS4KKyAqICogVXRpbGl0aWVzIGZvciBsb2dnaW5nIGFuZCBmaWxlIG1hbmFnZW1lbnQu
CisgKgorICogVE9ETzogUGVyaGFwcyB3ZSBzaG91bGQgYnJlYWsgdGhpcyB1cCBpbnRvIHRocmVl
IGNsYXNzZXM/CisgKi8KK2NsYXNzIE1hbmFnZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KE1hbmFnZXIpOworICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5ldmVyRGVzdHJveWVkPE1hbmFnZXI+
OworCitwdWJsaWM6CisgICAgc3RhdGljIE1hbmFnZXImIHNpbmdsZXRvbigpOworCisgICAgdm9p
ZCBpbml0aWFsaXplKGJvb2wgc2hvdWxkUmVjb3JkTmV0d29ya1JlcXVlc3RzLCBib29sIHNob3Vs
ZFJlcGxheU5ldHdvcmtSZXF1ZXN0cywgY29uc3QgU3RyaW5nJiByZWNvcmRSZXBsYXlDYWNoZUxv
Y2F0aW9uKTsKKyAgICB2b2lkIHRlcm1pbmF0ZSgpOworCisgICAgYm9vbCBpc1JlY29yZGluZygp
IGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkUmVjb3JkTmV0d29ya1JlcXVlc3RzOyB9CisgICAgYm9v
bCBpc1JlcGxheWluZygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkUmVwbGF5TmV0d29ya1JlcXVl
c3RzOyB9CisKKyAgICBDYWNoZWRSZXNvdXJjZSogZmluZE1hdGNoKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYpOworCisgICAgdm9pZCBsb2dSZWNvcmRlZFJlc291cmNlKGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIHZvaWQgbG9nTG9hZGVkUmVzb3VyY2UoQ2Fj
aGVkUmVzb3VyY2UmKTsKKyAgICB2b2lkIGxvZ1BsYXllZEJhY2tSZXNvdXJjZShjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBib29sIHdhc0NhY2hlTWlzcyk7CisKKyAgICBGaWxlSGFu
ZGxlIG9wZW5DYWNoZUZpbGUoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6RmlsZU9wZW5Nb2RlKTsK
KworICAgIFN0cmluZyByZXF1ZXN0VG9QYXRoKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYpOworCitwcml2YXRlOgorICAgIE1hbmFnZXIoKSA9IGRlZmF1bHQ7CisgICAgfk1hbmFnZXIo
KSA9IGRlbGV0ZTsKKworICAgIENhY2hlZFJlc291cmNlKiBmaW5kRXhhY3RNYXRjaChjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICBDYWNoZWRSZXNvdXJjZSogZmluZEJlc3RG
dXp6eU1hdGNoKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIGludCBmdXp6
eU1hdGNoVVJMcygKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6VVJMJiByZXF1ZXN0VVJMLCBjb25z
dCBXZWJDb3JlOjpVUkxQYXJzZXI6OlVSTEVuY29kZWRGb3JtJiByZXF1ZXN0UGFyYW1ldGVycywK
KyAgICAgICAgY29uc3QgV2ViQ29yZTo6VVJMJiByZXNvdXJjZVVSTCwgY29uc3QgV2ViQ29yZTo6
VVJMUGFyc2VyOjpVUkxFbmNvZGVkRm9ybSYgcmVzb3VyY2VQYXJhbWV0ZXJzKTsKKworICAgIHZv
aWQgbG9hZENhY2hlZFJlc291cmNlcygpOworCisgICAgU3RyaW5nIHJlcG9ydExvYWRQYXRoKCk7
CisgICAgU3RyaW5nIHJlcG9ydFJlY29yZFBhdGgoKTsKKyAgICBTdHJpbmcgcmVwb3J0UmVwbGF5
UGF0aCgpOworCisgICAgU3RyaW5nIHN0cmluZ1RvSGFzaChjb25zdCBTdHJpbmcmKTsKKyAgICBT
dHJpbmcgaGFzaFRvUGF0aChjb25zdCBTdHJpbmcmIGhhc2gpOworCisgICAgYm9vbCBlbnN1cmVG
aWxlSGFuZGxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIEZpbGVIYW5kbGUqKTsKKworICAgIGJv
b2wgcmVhZEZpbGUoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgVmVjdG9yPFZlY3RvcjxTdHJpbmc+
PiYgYnVmZmVyKTsKKyAgICBib29sIGdldExpbmUodWludDhfdCBjb25zdCAqJiBwLCB1aW50OF90
IGNvbnN0ICogY29uc3QgZW5kLCBWZWN0b3I8U3RyaW5nPiYgbGluZSk7CisgICAgYm9vbCBnZXRX
b3JkKHVpbnQ4X3QgY29uc3QgKiYgcCwgdWludDhfdCBjb25zdCAqIGNvbnN0IGVuZCwgU3RyaW5n
JiB3b3JkKTsKKyAgICBib29sIHByaW50VG9GaWxlKGNvbnN0IEZpbGVIYW5kbGUmLCBjb25zdCBj
aGFyKiBmb3JtYXQsIC4uLik7CisKKyAgICBTdHJpbmcgYmFzZVVSTEFzU3RyaW5nKGNvbnN0IFdl
YkNvcmU6OlVSTCYpOworCitwcml2YXRlOgorICAgIGJvb2wgbV9zaG91bGRSZWNvcmROZXR3b3Jr
UmVxdWVzdHMgeyBmYWxzZSB9OworICAgIGJvb2wgbV9zaG91bGRSZXBsYXlOZXR3b3JrUmVxdWVz
dHMgeyBmYWxzZSB9OworCisgICAgU3RyaW5nIG1fcmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbjsK
KworICAgIEZpbGVIYW5kbGUgbV9sb2FkRmlsZUhhbmRsZTsKKyAgICBGaWxlSGFuZGxlIG1fcmVw
bGF5RmlsZUhhbmRsZTsKKyAgICBGaWxlSGFuZGxlIG1fcmVjb3JkRmlsZUhhbmRsZTsKKworICAg
IFZlY3RvcjxDYWNoZWRSZXNvdXJjZT4gbV9jYWNoZWRSZXNvdXJjZXM7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZWNvcmRlci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZjM1Njk1YmJmZGI2NDRiODQ1MGVlNWRkMmM5MzM5NjhjMGQ2MWZkOAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0
d29ya0NhcHR1cmVSZWNvcmRlci5jcHAKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVSZWNvcmRlci5oIgor
CisjaW5jbHVkZSAiRW5jb2Rlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlTG9nZ2luZy5o
IgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlTWFuYWdlci5oIgorI2luY2x1ZGUgIlN0cmluZ1Jl
ZmVyZW5jZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CisjaW5jbHVkZSA8
d3RmL1Njb3BlLmg+CisKKyNkZWZpbmUgREVCVUdfQ0xBU1MgTWFuYWdlcgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZSB7CisKK3N0YXRpYyBjb25zdCBjaGFy
IGtNZXNzYWdlUmVjZWl2ZXJOYW1lW10gPSAieCI7IC8vIE11c3QgYmUgbm9uLWVtcHR5Lgorc3Rh
dGljIGNvbnN0IGNoYXIga01lc3NhZ2VOYW1lW10gPSAiIjsKK3N0YXRpYyBjb25zdCB1aW50NjRf
dCBrRGVzdGluYXRpb25JRCA9IDA7CisKK3ZvaWQgUmVjb3JkZXI6OnJlY29yZFJlcXVlc3RTZW50
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICAvLyBUaGlz
IGNsYXNzIHJlY29yZHMgTmV0d29ya0xvYWQncyBwcm9jZXNzIG9mIGxvYWRpbmcgYSBuZXR3b3Jr
IHJlc291cmNlLgorICAgIC8vIE5ldHdvcmtMb2FkIGRvZXMgdGhpcyBieSBjcmVhdGluZyBhIE5l
dHdvcmtEYXRhVGFzayBhbmQgY2FsbGluZyByZXN1bWUKKyAgICAvLyBvbiBpdC4gVGhpcyBjYWxs
IHRvIHJlc3VtZSBjYW4gYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSB0YXNrIGhhcwor
ICAgIC8vIGJlZW4gY3JlYXRlZCwgb3IgLS0gaWYgdGhlIGxvYWRpbmcgaXMgbWFya2VkIGFzIGRl
ZmVycmVkIC0tIGl0IGNhbiBiZQorICAgIC8vIGNhbGxlZCBsYXRlciBpbiBOZXR3b3JrTG9hZDo6
c2V0RGVmZXJyZWQodHJ1ZSkuIEluIGZhY3QsIHRoZSBsYXR0ZXIgY2FuCisgICAgLy8gYmUgY2Fs
bGVkIG11bHRpcGxlIHRpbWVzIGlmIHRoZSBsb2FkaW5nIGlzIHN1c3BlbmRlZCBhbmQgcmVzdW1l
ZAorICAgIC8vIG11bHRpcGxlIHRpbWVzLgorICAgIC8vCisgICAgLy8gVGhpcyBtZXRob2QgaXMg
Y2FsbGVkIGluIGJvdGggcGxhY2VzIHdoZXJlIHJlc3VtZSBpcyBjYWxsZWQuIE91ciB0YXNrIGlz
CisgICAgLy8gdG8gY2F0Y2ggdGhlIGNhbGwgdG8gTmV0d29ya0RhdGFUYXNrOjpyZXN1bWUgdGhh
dCBzdGFydHMgdGhlIG5ldHdvcmsKKyAgICAvLyBsb2FkaW5nIHByb2Nlc3MuIFdlIHdhbnQgdG8g
aWdub3JlIHRoZSBvdGhlciBjYWxscyB0byByZXN1bWUuIE91cgorICAgIC8vIGFwcHJvYWNoIHRv
IGtub3dpbmcgd2hpY2ggb25lIGlzIHRoZSBmaXJzdCBpcyB0byBjaGVjayBvdXQgY29sbGVjdGlv
biBvZgorICAgIC8vIHJlY29yZGVkIGV2ZW50cy4gSWYgaXQgaXMgZW1wdHksIHRoZW4gdGhpcyBp
cyB0aGUgZmlyc3QgY2FsbCBpbnRvIHRoZQorICAgIC8vIHJlY29yZGVyLCBhbmQgd2Ugd2FudCB0
byByZWNvcmQgdGhlIGV2ZW50LiBPdGhlcndpc2UsIGlnbm9yZSBpdC4KKworICAgIGlmIChtX2V2
ZW50cy5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIERFQlVHX0xPRygiU2VudCByZXF1
ZXN0IGZvciBVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RSKHJlcXVlc3QudXJsKCkuc3RyaW5n
KCkpKTsKKworICAgIG1faW5pdGlhbFJlcXVlc3QgPSByZXF1ZXN0OworICAgIHJlY29yZEV2ZW50
KFJlcXVlc3RTZW50RXZlbnQocmVxdWVzdCkpOworfQorCit2b2lkIFJlY29yZGVyOjpyZWNvcmRS
ZXNwb25zZVJlY2VpdmVkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
KQoreworICAgIC8vIENhbGxlZCB3aGVuIHJlY2VpdmluZyBhIHJlc3BvbnNlIG90aGVyIHRoYW4g
YSByZWRpcmVjdCBvciBlcnJvci4KKworICAgIERFQlVHX0xPRygiUmVjZWl2ZWQgcmVzcG9uc2Ug
ZnJvbSBVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RSKHJlc3BvbnNlLnVybCgpLnN0cmluZygp
KSk7CisgICAgQVNTRVJUKG1fZXZlbnRzLnNpemUoKSk7CisKKyAgICAvLyBUT0RPOiBJcyB0aGVy
ZSBhIGJldHRlciByZXNwb25zZSB0byByZWNlaXZpbmcgYSBtdWx0aS1wYXJ0IHJlc291cmNlPwor
ICAgIC8vIExlYXJuIG1vcmUgYWJvdXQgbXVsdGktcGFydCByZXNvdXJjZXMuIFdoeSBkb24ndCB3
ZSByZWNvcmQgdGhlc2U/IChOb3RlLAorICAgIC8vIHRoaXMgZGVjaXNpb24gaXMgYmFzZWQgb24g
c29tZSBOZXR3b3JrQ2FjaGUgY29kZS4pCisKKyAgICBpZiAoIXJlc3BvbnNlLmlzTXVsdGlwYXJ0
KCkpCisgICAgICAgIHJlY29yZEV2ZW50KFJlc3BvbnNlUmVjZWl2ZWRFdmVudChyZXNwb25zZSkp
OworICAgIGVsc2UKKyAgICAgICAgbV9ldmVudHMuY2xlYXIoKTsKK30KKwordm9pZCBSZWNvcmRl
cjo6cmVjb3JkUmVkaXJlY3RSZWNlaXZlZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQorewor
ICAgIERFQlVHX0xPRygiUmVjZWl2ZWQgcmVkaXJlY3QgdG8gVVJMID0gJXtwdWJsaWN9cyIsIERF
QlVHX1NUUihyZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisgICAgQVNTRVJUKG1fZXZlbnRzLnNp
emUoKSk7CisKKyAgICByZWNvcmRFdmVudChSZWRpcmVjdFJlY2VpdmVkRXZlbnQocmVxdWVzdCwg
cmVzcG9uc2UpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6cmVjb3JkUmVkaXJlY3RTZW50KGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBERUJVR19MT0coIlNl
bnQgcmVkaXJlY3QgZm9yIFVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIocmVxdWVzdC51cmwo
KS5zdHJpbmcoKSkpOworICAgIEFTU0VSVChtX2V2ZW50cy5zaXplKCkpOworCisgICAgcmVjb3Jk
RXZlbnQoUmVkaXJlY3RTZW50RXZlbnQocmVxdWVzdCkpOworfQorCit2b2lkIFJlY29yZGVyOjpy
ZWNvcmREYXRhUmVjZWl2ZWQoV2ViQ29yZTo6U2hhcmVkQnVmZmVyJiBidWZmZXIpCit7CisgICAg
REVCVUdfTE9HKCJSZWNlaXZlZCAldSBieXRlcyBvZiBkYXRhIiwgYnVmZmVyLnNpemUoKSk7CisK
KyAgICBpZiAoIW1fZXZlbnRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gUHJl
dmVudCBtZW1vcnkgZ3Jvd3RoIGluIGNhc2Ugb2Ygc3RyZWFtaW5nIGRhdGEuIFRPRE86IElzIHRo
ZXJlIGEgYmV0dGVyCisgICAgLy8gcmVzcG9uc2UgdG8gdGhpcz8gSWYgd2UgZW5jb3VudGVyIHRo
aXMgY29uZGl0aW9uLCBhbGwgb2Ygb3VyIHJlY29yZGluZworICAgIC8vIHNpbGVudGx5IGdvZXMg
b3V0IHRoZSB3aW5kb3cuIFJlcGxheSB3aWxsIG5vdCB3b3JrLCBhbmQgdGhlIHVzZXIgZG9lc24n
dAorICAgIC8vIGtub3cgdGhhdC4KKworICAgIGNvbnN0ZXhwciBzaXplX3Qga01heGltdW1DYWNo
ZUJ1ZmZlclNpemUgPSAxMCAqIDEwMjQgKiAxMDI0OworICAgIG1fZGF0YUxlbmd0aCArPSBidWZm
ZXIuc2l6ZSgpOworICAgIGlmIChtX2RhdGFMZW5ndGggPD0ga01heGltdW1DYWNoZUJ1ZmZlclNp
emUpCisgICAgICAgIHJlY29yZEV2ZW50KERhdGFSZWNlaXZlZEV2ZW50KGJ1ZmZlcikpOworICAg
IGVsc2UKKyAgICAgICAgbV9ldmVudHMuY2xlYXIoKTsKK30KKwordm9pZCBSZWNvcmRlcjo6cmVj
b3JkRmluaXNoKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIERF
QlVHX0xPRygiRmluaXNoZWQiKTsKKworICAgIGlmICghbV9ldmVudHMuc2l6ZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICByZWNvcmRFdmVudChGaW5pc2hlZEV2ZW50KGVycm9yKSk7CisgICAg
d3JpdGVFdmVudHMoKTsKK30KKwordm9pZCBSZWNvcmRlcjo6d3JpdGVFdmVudHMoKQoreworICAg
IC8vIFRPRE86IERldGVybWluZSB3aGF0IHRvIGRvIGlmIHdlJ3JlIGFza2VkIHRvIGNhY2hlIGEg
cmVzb3VyY2UgdGhhdCdzCisgICAgLy8gYWxyZWFkeSBpbiB0aGUgY2FjaGUuIFdoYXQgZG9lcyBz
dWNoIGFuIG9jY3VycmVuY2UgbWVhbj8gU2hvdWxkbid0IG91cgorICAgIC8vIG5vcm1hbCBjYWNo
ZXMgcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nPyAoUGFydGlhbCBhbnN3ZXI6IGl0J3MKKyAg
ICAvLyBwb3NzaWJsZSBmb3IgdGhlIHNhbWUgcmVzb3VyY2UgdG8gYmUgcmVxdWVzdGVkIG11bHRp
cGxlIHRpbWVzIGluCisgICAgLy8gZGlmZmVyZW50IHdheXMuIEZvciBpbnN0YW5jZSwgaXQgY2Fu
IGJlIGNhbGxlZCB3aXRoIGRpZmZlcmVudCBIVFRQCisgICAgLy8gbWV0aG9kcyBvciB3aXRoIGRp
ZmZlcmVudCBoZWFkZXJzLiBXZSBuZWVkIHRvIGFjY291bnQgZm9yIHRoYXQuKQorCisgICAgLy8g
VE9ETzpVc2luZyBJUEM6OkVuY29kZXIgaXMgYSBiaXQgaGVhdnktaGFuZGVkLiBJdCB3cml0ZXMg
b3V0IGEgaGVhZGVyIHdlCisgICAgLy8gZG9uJ3QgbmVlZCwgYW5kIEknbSBub3Qgc3VyZSB3ZSBu
ZWVkIHRvIGFiaWRlIGJ5IGl0cyBhbGlnbm1lbnQgcnVsZXMuCisgICAgLy8gTmV0d29ya0NhY2hl
IGhhcyBpdHMgb3duIEVuY29kZXIvRGVjb2RlciAtLSBwZXJoYXBzIHdlIHNob3VsZCB0YWtlIHRo
ZQorICAgIC8vIHNhbWUgYXBwcm9hY2guIEhvd2V2ZXIsIHdlIGRvbid0IHdhbnQgdG8gdXNlIHRo
b3NlIGNsYXNzZXMgZGlyZWN0bHkuCisgICAgLy8gRmlyc3QsIHRoZXkgZG8gc29tZSBjaGVja3N1
bW1pbmcgdGhhdCB3ZSBkb24ndCBuZWVkLiBTZWNvbmQsIEkndmUgYmVlbgorICAgIC8vIHdhcm5l
ZCBub3QgdG8gcmVseSBvbiB0aGUgc3RvcmFnZSBmb3JtYXQgb2YgTmV0d29ya0NhY2hlLCB3aGlj
aCBtZWFucworICAgIC8vIG5vdCB1c2luZyB0aGVpciBzdG9yYWdlIGNsYXNzZXMgZGlyZWN0bHku
IFRoaXJkLCBzaW5jZSB3ZSBsaW1pdAorICAgIC8vIHJlc291cmNlcyB0byAxME1pQiwgd2UgZG9u
J3QgbmVlZCB0byBzdG9yZSBhbGwgbGVuZ3RocyBhcyA2NC1iaXQgdmFsdWVzOworICAgIC8vIDMy
LWJpdCB3aWxsIHdvcmsgZmluZS4KKworICAgIElQQzo6RW5jb2RlciBlbmNvZGVyKGtNZXNzYWdl
UmVjZWl2ZXJOYW1lLCBrTWVzc2FnZU5hbWUsIGtEZXN0aW5hdGlvbklEKTsKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIGV2ZW50IDogbV9ldmVudHMpIHsKKyAgICAgICAgV1RGOjp2aXNpdChbdGhpcywg
JmVuY29kZXJdKGNvbnN0IGF1dG8mIGV2ZW50KSB7CisgICAgICAgICAgICBhdXRvIHR5cGUgPSBl
dmVudC5rVHlwZTsKKyAgICAgICAgICAgIGVuY29kZXIgPDwgdHlwZTsKKyAgICAgICAgICAgIGV2
ZW50LmVuY29kZShlbmNvZGVyKTsKKyAgICAgICAgfSwgZXZlbnQpOworICAgIH0KKworICAgIEZp
bGVIYW5kbGUgaGFuZGxlID0gb3BlbkZpbGVGb3JSZXF1ZXN0KG1faW5pdGlhbFJlcXVlc3QpOwor
ICAgIGlmICghaGFuZGxlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaGFuZGxlLndyaXRl
VG9GaWxlKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpKSA9PSAtMSkKKyAg
ICAgICAgREVCVUdfTE9HX0VSUk9SKCJFcnJvciB0cnlpbmcgdG8gd3JpdGUgdG8gZmlsZSBmb3Ig
VVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2luaXRpYWxSZXF1ZXN0LnVybCgpLnN0cmlu
ZygpKSk7Cit9CisKK0ZpbGVIYW5kbGUgUmVjb3JkZXI6Om9wZW5GaWxlRm9yUmVxdWVzdChjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgU3RyaW5nIHBhdGgg
PSBNYW5hZ2VyOjpzaW5nbGV0b24oKS5yZXF1ZXN0VG9QYXRoKHJlcXVlc3QpOworICAgIGF1dG8g
aGFuZGxlID0gTWFuYWdlcjo6c2luZ2xldG9uKCkub3BlbkNhY2hlRmlsZShwYXRoLCBXZWJDb3Jl
OjpPcGVuRm9yV3JpdGUpOworCisgICAgaWYgKGhhbmRsZSkKKyAgICAgICAgTWFuYWdlcjo6c2lu
Z2xldG9uKCkubG9nUmVjb3JkZWRSZXNvdXJjZShyZXF1ZXN0KTsKKworICAgIHJldHVybiBoYW5k
bGU7Cit9CisKK30gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUv
TmV0d29ya0NhcHR1cmVSZWNvcmRlci5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDdhM2I0MzEyNjlm
MDRiYjI3ODRhNDk5NGRkOTkwMjUxMTNmZTNiZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZWNvcmRlci5oCkBA
IC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShO
RVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZUV2ZW50LmgiCisjaW5j
bHVkZSAiTmV0d29ya0NhcHR1cmVUeXBlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3Rl
bS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2luY2x1ZGUgPGNocm9ubz4KKyNpbmNs
dWRlIDx1dGlsaXR5PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBSZXNvdXJjZUVycm9y
OworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKK2NsYXNz
IFNoYXJlZEJ1ZmZlcjsKK30KKworbmFtZXNwYWNlIElQQyB7CitjbGFzcyBFbmNvZGVyOworfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZSB7CisKK2NsYXNz
IFJlY29yZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHJlY29yZFJlcXVlc3RTZW50KGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIHZvaWQgcmVjb3JkUmVzcG9uc2VSZWNlaXZl
ZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdm9pZCByZWNvcmRSZWRp
cmVjdFJlY2VpdmVkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2b2lkIHJlY29yZFJlZGlyZWN0U2VudChjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIHJlY29yZERhdGFSZWNlaXZl
ZChXZWJDb3JlOjpTaGFyZWRCdWZmZXImKTsKKyAgICB2b2lkIHJlY29yZEZpbmlzaChjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CisKK3ByaXZhdGU6CisgICAgdm9pZCB3cml0ZUV2ZW50
cygpOworICAgIEZpbGVIYW5kbGUgb3BlbkZpbGVGb3JSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBy
ZWNvcmRFdmVudChUJiYgZXZlbnQpCisgICAgeworICAgICAgICBtX2V2ZW50cy5hcHBlbmQoQ2Fw
dHVyZUV2ZW50KFdURk1vdmUoZXZlbnQpKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHVzaW5n
IENhcHR1cmVFdmVudHMgPSBWZWN0b3I8Q2FwdHVyZUV2ZW50PjsKKyAgICBDYXB0dXJlRXZlbnRz
IG1fZXZlbnRzOworICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBtX2luaXRpYWxSZXF1ZXN0
OworICAgIHNpemVfdCBtX2RhdGFMZW5ndGggeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBO
ZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUo
TkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXBsYXllci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNDJkNWU1NDczZGMwYTY1MjgwNTgwMGIzZTczZjIxZDQ3MGUxNTQzMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1
cmVSZXBsYXllci5jcHAKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmgiCisKKyNpZiBFTkFC
TEUoTkVUV09SS19DQVBUVVJFKQorCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVMb2dnaW5nLmgi
CisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmgiCisjaW5jbHVkZSAiTmV0d29ya0Rh
dGFUYXNrUmVwbGF5LmgiCisjaW5jbHVkZSAiTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKworI2RlZmluZSBERUJVR19DTEFTUyBS
ZXBsYXllcgorCituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZSB7
CisKK1JlcGxheWVyOjpSZXBsYXllcigpCit7Cit9CisKK1JlZjxOZXR3b3JrRGF0YVRhc2s+IFJl
cGxheWVyOjpyZXBsYXlSZXNvdXJjZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0Rh
dGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IE5ldHdvcmtMb2FkUGFyYW1ldGVycyYgcGFyYW1l
dGVycykKK3sKKyAgICBhdXRvIGZvdW5kUmVzb3VyY2UgPSBNYW5hZ2VyOjpzaW5nbGV0b24oKS5m
aW5kTWF0Y2gocGFyYW1ldGVycy5yZXF1ZXN0KTsKKyAgICBNYW5hZ2VyOjpzaW5nbGV0b24oKS5s
b2dQbGF5ZWRCYWNrUmVzb3VyY2UocGFyYW1ldGVycy5yZXF1ZXN0LCAhZm91bmRSZXNvdXJjZSk7
CisgICAgcmV0dXJuIE5ldHdvcmtEYXRhVGFza1JlcGxheTo6Y3JlYXRlKHNlc3Npb24sIGNsaWVu
dCwgcGFyYW1ldGVycywgZm91bmRSZXNvdXJjZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIE5ldHdv
cmtDYXB0dXJlCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRX
T1JLX0NBUFRVUkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YXB0dXJlL05ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXBsYXllci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ1Mjg0
MDcxNTg0NjNmZWRlNjA4NGM4ZjQ2MDc0Nzc3ZTg2OWFkYTcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVwbGF5
ZXIuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoTkVUV09SS19DQVBUVVJFKQorCisjaW5jbHVkZSA8d3RmL1JlZi5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKK2NsYXNzIE5ldHdvcmtEYXRhVGFzazsKK2NsYXNzIE5ldHdvcmtEYXRhVGFz
a0NsaWVudDsKK2NsYXNzIE5ldHdvcmtMb2FkUGFyYW1ldGVyczsKK2NsYXNzIE5ldHdvcmtTZXNz
aW9uOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZSB7
CisKK2NsYXNzIFJlcGxheWVyIHsKK3B1YmxpYzoKKyAgICBSZXBsYXllcigpOworICAgIFJlZjxO
ZXR3b3JrRGF0YVRhc2s+IHJlcGxheVJlc291cmNlKE5ldHdvcmtTZXNzaW9uJiwgTmV0d29ya0Rh
dGFUYXNrQ2xpZW50JiwgY29uc3QgTmV0d29ya0xvYWRQYXJhbWV0ZXJzJik7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVR5cGVzLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlVHlwZXMuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45MmY2OWJlMzE2Yzk5Nzg5YjhlNThjMmU2MzAyZmQ5MmJkNWI1OTg2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2Fw
dHVyZVR5cGVzLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVT
eXN0ZW0uaD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FwdHVy
ZSB7CisKK2NsYXNzIEZpbGVIYW5kbGUgZmluYWwgeworcHVibGljOgorICAgIEZpbGVIYW5kbGUo
KQorICAgICAgICA6IG1fZmlsZUhhbmRsZShXZWJDb3JlOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFu
ZGxlKSB7IH0KKyAgICBGaWxlSGFuZGxlKFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBmaWxl
SGFuZGxlKQorICAgICAgICA6IG1fZmlsZUhhbmRsZShmaWxlSGFuZGxlKSB7IH0KKyAgICBGaWxl
SGFuZGxlKEZpbGVIYW5kbGUmJiBvdGhlcikKKyAgICAgICAgOiBtX2ZpbGVIYW5kbGUoc3RkOjpl
eGNoYW5nZShvdGhlci5tX2ZpbGVIYW5kbGUsIFdlYkNvcmU6OmludmFsaWRQbGF0Zm9ybUZpbGVI
YW5kbGUpKSB7IH0KKyAgICB+RmlsZUhhbmRsZSgpCisgICAgeworICAgICAgICBjbG9zZUZpbGUo
KTsKKyAgICB9CisgICAgRmlsZUhhbmRsZSYgb3BlcmF0b3I9KFdlYkNvcmU6OlBsYXRmb3JtRmls
ZUhhbmRsZSBmaWxlSGFuZGxlKQorICAgIHsKKyAgICAgICAgY2xvc2VGaWxlKCk7CisgICAgICAg
IG1fZmlsZUhhbmRsZSA9IGZpbGVIYW5kbGU7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9
CisgICAgRmlsZUhhbmRsZSYgb3BlcmF0b3I9KEZpbGVIYW5kbGUmJiBvdGhlcikKKyAgICB7Cisg
ICAgICAgIGNsb3NlRmlsZSgpOworICAgICAgICBtX2ZpbGVIYW5kbGUgPSBzdGQ6OmV4Y2hhbmdl
KG90aGVyLm1fZmlsZUhhbmRsZSwgV2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSk7
CisgICAgICAgIHJldHVybip0aGlzOworICAgIH0KKworICAgIEZpbGVIYW5kbGUoY29uc3QgRmls
ZUhhbmRsZSYpID0gZGVsZXRlOworICAgIEZpbGVIYW5kbGUmIG9wZXJhdG9yPShjb25zdCBGaWxl
SGFuZGxlJikgPSBkZWxldGU7CisKKyAgICBvcGVyYXRvciBXZWJDb3JlOjpQbGF0Zm9ybUZpbGVI
YW5kbGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVIYW5kbGU7IH0KKyAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gV2ViQ29yZTo6aXNIYW5kbGVWYWxpZChtX2ZpbGVI
YW5kbGUpOyB9CisKKyAgICBzdGF0aWMgRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcm
IHBhdGgsIFdlYkNvcmU6OkZpbGVPcGVuTW9kZSBtb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEZpbGVIYW5kbGUoV2ViQ29yZTo6b3BlbkZpbGUocGF0aCwgbW9kZSkpOworICAgIH0KKyAgICBp
bnQgcmVhZEZyb21GaWxlKHZvaWQqIGRhdGEsIGludCBsZW5ndGgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6cmVhZEZyb21GaWxlKG1fZmlsZUhhbmRsZSwgcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oZGF0YSksIGxlbmd0aCk7CisgICAgfQorICAgIGludCB3cml0ZVRvRmls
ZShjb25zdCB2b2lkKiBkYXRhLCBpbnQgbGVuZ3RoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIFdlYkNvcmU6OndyaXRlVG9GaWxlKG1fZmlsZUhhbmRsZSwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oZGF0YSksIGxlbmd0aCk7CisgICAgfQorICAgIHZvaWQgY2xvc2VGaWxlKCkK
KyAgICB7CisgICAgICAgIFdlYkNvcmU6OmNsb3NlRmlsZShtX2ZpbGVIYW5kbGUpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBXZWJDb3JlOjpQbGF0Zm9ybUZpbGVIYW5kbGUgbV9maWxlSGFuZGxl
OworfTsKKworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgLi4uIFR5cGVzPgorc3RydWN0IFR5cGVIb2xk
ZXIgeworICAgIC8vIEEgV1RGOjpWYXJpYW50IG9mIHRoZSBnaXZlbiBUeXBlcy4KKyAgICB1c2lu
ZyBWYXJpYW50VHlwZSA9IFdURjo6VmFyaWFudDxUeXBlcy4uLj47CisKKyAgICAvLyBUaGUgMC1i
YXNlZCBpbmRleCBpbiBUeXBlcyB3aGVyZSBSZXF1ZXN0ZWRUeXBlIGNhbiBiZSBmb3VuZC4KKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVxdWVzdGVkVHlwZT4KKyAgICBzdGF0aWMgY29uc3QgYXV0
byBUeXBlSW5kZXggPSBXVEY6Ol9fdHlwZV9pbmRleDxSZXF1ZXN0ZWRUeXBlLCBUeXBlcy4uLj46
Ol9fdmFsdWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRh
c2tSZXBsYXkuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3
b3JrRGF0YVRhc2tSZXBsYXkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyNjY1MmZmMDgzZGQwN2RlYjAyOGUw
ZmFjNzE5NTg4YWRhNzU2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtEYXRhVGFza1JlcGxheS5jcHAKQEAgLTAsMCArMSwz
MDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29y
a0RhdGFUYXNrUmVwbGF5LmgiCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorCisjaW5j
bHVkZSAiTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5oIgorI2luY2x1ZGUgIk5ldHdvcmtD
YXB0dXJlRXZlbnQuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCIKKyNpbmNs
dWRlICJOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvSFRUUEhlYWRlck5hbWVzLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9IVFRQUGFyc2Vycy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFyc2VkQ29udGVudFJhbmdlLmg+
CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworI2RlZmluZSBERUJVR19DTEFTUyBOZXR3b3Jr
RGF0YVRhc2tSZXBsYXkKKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29ya0Nh
cHR1cmUgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgd2ViS2l0UmVsYXlEb21haW4gPSAi
V2ViS2l0UmVwbGF5IjsKKworTmV0d29ya0RhdGFUYXNrUmVwbGF5OjpOZXR3b3JrRGF0YVRhc2tS
ZXBsYXkoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtEYXRhVGFza0NsaWVudCYgY2xp
ZW50LCBjb25zdCBOZXR3b3JrTG9hZFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIENhY2hlZFJlc291
cmNlKiByZXNvdXJjZSkKKyAgICA6IE5ldHdvcmtEYXRhVGFzayhzZXNzaW9uLCBjbGllbnQsIHBh
cmFtZXRlcnMucmVxdWVzdCwgcGFyYW1ldGVycy5hbGxvd1N0b3JlZENyZWRlbnRpYWxzLCBwYXJh
bWV0ZXJzLnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3QpCisgICAgLCBt
X2N1cnJlbnRSZXF1ZXN0KG1fZmlyc3RSZXF1ZXN0KQorICAgICwgbV9yZXNvdXJjZShyZXNvdXJj
ZSkKK3sKKyAgICBERUJVR19MT0coInJlcXVlc3QgVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NU
UihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworICAgIERFQlVHX0xPRygiY2FjaGVk
IFVSTCA9ICV7cHVibGljfXMiLCByZXNvdXJjZSA/IERFQlVHX1NUUihyZXNvdXJjZS0+dXJsKCku
c3RyaW5nKCkpIDogIjxub3QgZm91bmQ+Iik7CisKKyAgICBtX3Nlc3Npb24tPnJlZ2lzdGVyTmV0
d29ya0RhdGFUYXNrKCp0aGlzKTsKKworICAgIGlmIChyZXNvdXJjZSkKKyAgICAgICAgbV9ldmVu
dFN0cmVhbSA9IHJlc291cmNlLT5ldmVudFN0cmVhbSgpOworfQorCitOZXR3b3JrRGF0YVRhc2tS
ZXBsYXk6On5OZXR3b3JrRGF0YVRhc2tSZXBsYXkoKQoreworICAgIERFQlVHX0xPRygiVVJMID0g
JXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOwor
CisgICAgbV9zZXNzaW9uLT51bnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKCp0aGlzKTsKK30KKwor
dm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnJlc3VtZSgpCit7CisgICAgREVCVUdfTE9HKCJV
UkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RSKG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygp
KSk7CisKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0g
U3RhdGU6OkNvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0ZSA9IFN0YXRl
OjpSdW5uaW5nOworCisgICAgaWYgKG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgIT0gTm9GYWlsdXJl
KSB7CisgICAgICAgIEFTU0VSVChtX2ZhaWx1cmVUaW1lci5pc0FjdGl2ZSgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGVucXVldWVDYWNoZWRFdmVudEhhbmRsZXIoKTsKK30KKwor
dm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnN1c3BlbmQoKQoreworICAgIERFQlVHX0xPRygi
VVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmco
KSkpOworCisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09
IFN0YXRlOjpDb21wbGV0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3RhdGUgPSBTdGF0
ZTo6U3VzcGVuZGVkOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza1JlcGxheTo6Y2FuY2VsKCkK
K3sKKyAgICBERUJVR19MT0coIiIpOworCisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNl
bGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q2FuY2VsaW5nOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFz
a1JlcGxheTo6Y29tcGxldGUoKQoreworICAgIERFQlVHX0xPRygiVVJMID0gJXtwdWJsaWN9cyIs
IERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworCisgICAgaWYgKG1f
c3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0
ZSA9IFN0YXRlOjpDb21wbGV0ZWQ7CisgICAgbV9yZXNvdXJjZSA9IG51bGxwdHI7Cit9CisKK3Zv
aWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjppbnZhbGlkYXRlQW5kQ2FuY2VsKCkKK3sKKyAgICBE
RUJVR19MT0coIlVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9maXJzdFJlcXVlc3QudXJs
KCkuc3RyaW5nKCkpKTsKKworICAgIGNhbmNlbCgpOworICAgIGNvbXBsZXRlKCk7Cit9CisKK3Zv
aWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjplbnF1ZXVlQ2FjaGVkRXZlbnRIYW5kbGVyKCkKK3sK
KyAgICBERUJVR19MT0coIlVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9maXJzdFJlcXVl
c3QudXJsKCkuc3RyaW5nKCkpKTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7CisgICAgICAgIERFQlVHX0xPRygi
ZW5xdWV1ZUNhY2hlZEV2ZW50SGFuZGxlciBjYWxsYmFjayIpOworCisgICAgICAgIGlmIChtX3N0
YXRlID09IFN0YXRlOjpTdXNwZW5kZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
aWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21w
bGV0ZWQgfHwgIW1fY2xpZW50KSB7CisgICAgICAgICAgICBjb21wbGV0ZSgpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX3Jlc291cmNlKSB7CisgICAg
ICAgICAgICBERUJVR19MT0dfRVJST1IoIkVycm9yIGxvYWRpbmcgcmVzb3VyY2U6IGNvdWxkIG5v
dCBmaW5kIGNhY2hlZCByZXNvdXJjZSwgVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2N1
cnJlbnRSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisgICAgICAgICAgICBkaWRGaW5pc2goRXJy
b3I6Ok5vdEZvdW5kRXJyb3IpOyAvLyBUT0RPOiBUdXJuIHRoaXMgaW50byBhIDQwND8KKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UobV9jdXJyZW50UmVxdWVzdC5odHRwTWV0aG9kKCksICJnZXQiKSkgewor
ICAgICAgICAgICAgREVCVUdfTE9HX0VSUk9SKCJFcnJvciBsb2FkaW5nIHJlc291cmNlOiB1bnN1
cHBvcnRlZCBtZXRob2QgKCV7cHVibGljfXMpLCBVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RS
KG1fY3VycmVudFJlcXVlc3QuaHR0cE1ldGhvZCgpKSwgREVCVUdfU1RSKG1fY3VycmVudFJlcXVl
c3QudXJsKCkuc3RyaW5nKCkpKTsKKyAgICAgICAgICAgIGRpZEZpbmlzaChFcnJvcjo6TWV0aG9k
Tm90QWxsb3dlZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBh
dXRvIGV2ZW50ID0gbV9ldmVudFN0cmVhbS5uZXh0RXZlbnQoKTsKKyAgICAgICAgaWYgKCFldmVu
dCkgeworICAgICAgICAgICAgREVCVUdfTE9HX0VSUk9SKCJFcnJvciBsb2FkaW5nIHJlc291cmNl
OiBuZXh0RXZlbnQgcmV0dXJuIG51bGwsIFVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9j
dXJyZW50UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworICAgICAgICAgICAgZGlkRmluaXNoKEVy
cm9yOjpOb3RGb3VuZEVycm9yKTsgLy8gVE9ETzogVHVybiB0aGlzIGludG8gYSA0MDQ/CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBhdXRvIHZpc2l0b3Ig
PSBXVEY6Om1ha2VWaXNpdG9yKAorICAgICAgICAgICAgW3RoaXNdKGNvbnN0IFJlcXVlc3RTZW50
RXZlbnQmIGV2ZW50KSB7CisgICAgICAgICAgICAgICAgcmVwbGF5UmVxdWVzdFNlbnQoZXZlbnQp
OworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFt0aGlzXShjb25zdCBSZXNwb25zZVJlY2Vp
dmVkRXZlbnQmIGV2ZW50KSB7CisgICAgICAgICAgICAgICAgcmVwbGF5UmVzcG9uc2VSZWNlaXZl
ZChldmVudCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgW3RoaXNdKGNvbnN0IFJlZGly
ZWN0UmVjZWl2ZWRFdmVudCYgZXZlbnQpIHsKKyAgICAgICAgICAgICAgICByZXBsYXlSZWRpcmVj
dFJlY2VpdmVkKGV2ZW50KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbdGhpc10oY29u
c3QgUmVkaXJlY3RTZW50RXZlbnQmIGV2ZW50KSB7CisgICAgICAgICAgICAgICAgcmVwbGF5UmVk
aXJlY3RTZW50KGV2ZW50KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbdGhpc10oY29u
c3QgRGF0YVJlY2VpdmVkRXZlbnQmIGV2ZW50KSB7CisgICAgICAgICAgICAgICAgcmVwbGF5RGF0
YVJlY2VpdmVkKGV2ZW50KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbdGhpc10oY29u
c3QgRmluaXNoZWRFdmVudCYgZXZlbnQpIHsKKyAgICAgICAgICAgICAgICByZXBsYXlGaW5pc2hl
ZChldmVudCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICBXVEY6OnZpc2l0KHZpc2l0b3Is
ICpldmVudCk7CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjpyZXBs
YXlSZXF1ZXN0U2VudChjb25zdCBSZXF1ZXN0U2VudEV2ZW50JiBldmVudCkKK3sKKyAgICBERUJV
R19MT0coIlVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9maXJzdFJlcXVlc3QudXJsKCku
c3RyaW5nKCkpKTsKKworI2lmIDAKKyAgICAvLyBUT0RPOiBOb3QgYW4gZXJyb3IgaWYgZnV6enkg
bWF0Y2hpbmcgcmV0dXJuZWQgYSBzbGlnaHRseSBkaWZmZXJlbnQgVVJMLgorICAgIC8vIEJ1dCB3
ZSBtaWdodCB3YW50IHRvIGNoZWNrIHRoYXQgdGhlIG1ham9yIHBhcnRzIG1hdGNoLgorICAgIGlm
IChldmVudC5yZXF1ZXN0LnVybCgpICE9IG1fY3VycmVudFJlcXVlc3QudXJsKCkpIHsKKyAgICAg
ICAgREVCVUdfTE9HX0VSUk9SKCJNaXNtYXRjaGluZyByZXF1ZXN0IFVSTHM6Iik7CisgICAgICAg
IERFQlVHX0xPR19FUlJPUigiICAgIG1fY3VycmVudFJlcXVlc3QudXJsOiAle3B1YmxpY31zIiwg
REVCVUdfU1RSKG1fY3VycmVudFJlcXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKKyAgICAgICAgREVC
VUdfTE9HX0VSUk9SKCIgICAgZXZlbnQucmVxdWVzdC51cmw6ICV7cHVibGljfXMiLCBERUJVR19T
VFIoZXZlbnQucmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworICAgIH0KKyNlbmRpZgorCisgICAg
ZW5xdWV1ZUNhY2hlZEV2ZW50SGFuZGxlcigpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza1Jl
cGxheTo6cmVwbGF5UmVzcG9uc2VSZWNlaXZlZChjb25zdCBSZXNwb25zZVJlY2VpdmVkRXZlbnQm
IGV2ZW50KQoreworICAgIERFQlVHX0xPRygiVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUiht
X2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworCisgICAgV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZSByZXNwb25zZShldmVudC5yZXNwb25zZSk7CisgICAgZGlkUmVjZWl2ZVJlc3BvbnNl
KFdURk1vdmUocmVzcG9uc2UpKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnJl
cGxheVJlZGlyZWN0UmVjZWl2ZWQoY29uc3QgUmVkaXJlY3RSZWNlaXZlZEV2ZW50JiBldmVudCkK
K3sKKyAgICBERUJVR19MT0coIlVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9maXJzdFJl
cXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKKworICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2Ug
cmVjZWl2ZWRSZXNwb25zZSA9IGV2ZW50LnJlc3BvbnNlOworICAgIFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCByZWNlaXZlZFJlcXVlc3QgPSBldmVudC5yZXF1ZXN0OworCisgICAgQVNTRVJUKG1f
Y2xpZW50KTsKKyAgICBtX2NsaWVudC0+d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24oV1RGTW92
ZShyZWNlaXZlZFJlc3BvbnNlKSwgV1RGTW92ZShyZWNlaXZlZFJlcXVlc3QpLCBbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSAoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiB1cGRhdGVkUmVxdWVzdCkgeworICAgICAgICBERUJVR19MT0coInJlcGxheVJlZGlyZWN0
UmVjZWl2ZWQgY2FsbGJhY2s6IFVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9maXJzdFJl
cXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKKworICAgICAgICBtX2N1cnJlbnRSZXF1ZXN0ID0gdXBk
YXRlZFJlcXVlc3Q7CisgICAgICAgIGVucXVldWVDYWNoZWRFdmVudEhhbmRsZXIoKTsKKyAgICB9
KTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnJlcGxheVJlZGlyZWN0U2VudChj
b25zdCBSZWRpcmVjdFNlbnRFdmVudCYgZXZlbnQpCit7CisgICAgREVCVUdfTE9HKCJVUkwgPSAl
e3B1YmxpY31zIiwgREVCVUdfU1RSKG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisK
KyNpZiAwCisgICAgLy8gVE9ETzogTm90IGFuIGVycm9yIGlmIGZ1enp5IG1hdGNoaW5nIHJldHVy
bmVkIGEgc2xpZ2h0bHkgZGlmZmVyZW50IFVSTC4KKyAgICAvLyBCdXQgd2UgbWlnaHQgd2FudCB0
byBjaGVjayB0aGF0IHRoZSBtYWpvciBwYXJ0cyBtYXRjaC4KKyAgICBpZiAoZXZlbnQucmVxdWVz
dC51cmwoKSAhPSBtX2N1cnJlbnRSZXF1ZXN0LnVybCgpKSB7CisgICAgICAgIERFQlVHX0xPR19F
UlJPUigiTWlzbWF0Y2hpbmcgcmVxdWVzdCBVUkxzOiIpOworICAgICAgICBERUJVR19MT0dfRVJS
T1IoIiAgICBtX2N1cnJlbnRSZXF1ZXN0LnVybDogJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2N1
cnJlbnRSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisgICAgICAgIERFQlVHX0xPR19FUlJPUigi
ICAgIGV2ZW50LnJlcXVlc3QudXJsOiAle3B1YmxpY31zIiwgREVCVUdfU1RSKGV2ZW50LnJlcXVl
c3QudXJsKCkuc3RyaW5nKCkpKTsKKyAgICB9CisjZW5kaWYKKworICAgIGVucXVldWVDYWNoZWRF
dmVudEhhbmRsZXIoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnJlcGxheURh
dGFSZWNlaXZlZChjb25zdCBEYXRhUmVjZWl2ZWRFdmVudCYgZXZlbnQpCit7CisgICAgREVCVUdf
TE9HKCJVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RSKG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0
cmluZygpKSk7CisKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIG1fY2xpZW50LT5kaWRSZWNl
aXZlRGF0YShldmVudC5kYXRhLmNvcHlSZWYoKSk7CisKKyAgICBlbnF1ZXVlQ2FjaGVkRXZlbnRI
YW5kbGVyKCk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjpyZXBsYXlGaW5pc2hl
ZChjb25zdCBGaW5pc2hlZEV2ZW50JiAvKmV2ZW50Ki8pCit7CisgICAgREVCVUdfTE9HKCJVUkwg
PSAle3B1YmxpY31zIiwgREVCVUdfU1RSKG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7
CisKKyAgICBkaWRGaW5pc2goLypldmVudCovKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tS
ZXBsYXk6OmRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYgcmVz
cG9uc2UsIEVycm9yIGVycm9yQ29kZSkKK3sKKyAgICBERUJVR19MT0coIigldSkiLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oZXJyb3JDb2RlKSk7CisKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAg
IG1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2VOZXR3b3JrU2Vzc2lvbihXVEZNb3ZlKHJlc3Bv
bnNlKSwgW3RoaXMsIGVycm9yQ29kZSwgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXShX
ZWJDb3JlOjpQb2xpY3lBY3Rpb24gcG9saWN5QWN0aW9uKSB7CisgICAgICAgIERFQlVHX0xPRygi
ZGlkUmVjZWl2ZVJlc3BvbnNlIGNhbGxiYWNrICgldSkiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
cG9saWN5QWN0aW9uKSk7CisKKyAgICAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGlu
ZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQpIHsKKyAgICAgICAgICAgIGNvbXBsZXRl
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoZXJyb3JD
b2RlICE9IEVycm9yOjpOb0Vycm9yKSB7CisgICAgICAgICAgICBkaWRGaW5pc2goKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAocG9saWN5QWN0aW9u
KSB7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6UG9saWN5QWN0aW9uOjpQb2xpY3lVc2U6CisgICAg
ICAgICAgICBlbnF1ZXVlQ2FjaGVkRXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBXZWJDb3JlOjpQb2xpY3lBY3Rpb246OlBvbGljeUlnbm9yZToKKyAgICAg
ICAgICAgIGNvbXBsZXRlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJD
b3JlOjpQb2xpY3lBY3Rpb246OlBvbGljeURvd25sb2FkOgorICAgICAgICAgICAgREVCVUdfTE9H
X0VSUk9SKCJXZWJDb3JlOjpQb2xpY3lBY3Rpb246OlBvbGljeURvd25sb2FkIik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFz
a1JlcGxheTo6ZGlkRmluaXNoKEVycm9yIGVycm9yQ29kZSkKK3sKKyAgICBERUJVR19MT0coIigl
dSkiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZXJyb3JDb2RlKSk7CisKKyAgICBjb21wbGV0ZSgp
OworCisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBpZiAoZXJyb3JDb2RlICE9IEVycm9yOjpO
b0Vycm9yKQorICAgICAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoV2ViQ29yZTo6
UmVzb3VyY2VFcnJvcih3ZWJLaXRSZWxheURvbWFpbiwgc3RhdGljX2Nhc3Q8aW50PihlcnJvckNv
ZGUpLCBtX2ZpcnN0UmVxdWVzdC51cmwoKSwgU3RyaW5nKCkpKTsKKyAgICBlbHNlCisgICAgICAg
IG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJvcih7IH0pOworfQorCit9IC8vIG5hbWVzcGFj
ZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuaCBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0RhdGFUYXNrUmVwbGF5LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTJlMGY4YmYzNjgzNWQzMTUwMzAzOGRiOGUyODcxYjhmMTJhYjU1NwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0RhdGFUYXNr
UmVwbGF5LmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZUNh
Y2hlZFJlc291cmNlLmgiCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKK30KKworbmFtZXNwYWNlIFdlYktp
dCB7CitjbGFzcyBOZXR3b3JrRGF0YVRhc2tDbGllbnQ7CitjbGFzcyBOZXR3b3JrTG9hZFBhcmFt
ZXRlcnM7CitjbGFzcyBOZXR3b3JrU2Vzc2lvbjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7Citu
YW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgeworCitzdHJ1Y3QgUmVxdWVzdFNlbnRFdmVudDsKK3N0
cnVjdCBSZXNwb25zZVJlY2VpdmVkRXZlbnQ7CitzdHJ1Y3QgUmVkaXJlY3RSZWNlaXZlZEV2ZW50
Oworc3RydWN0IFJlZGlyZWN0U2VudEV2ZW50Oworc3RydWN0IERhdGFSZWNlaXZlZEV2ZW50Owor
c3RydWN0IEZpbmlzaGVkRXZlbnQ7CisKK2NsYXNzIE5ldHdvcmtEYXRhVGFza1JlcGxheSA6IHB1
YmxpYyBOZXR3b3JrRGF0YVRhc2sgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TmV0d29ya0Rh
dGFUYXNrUmVwbGF5PiBjcmVhdGUoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtEYXRh
VGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBOZXR3b3JrTG9hZFBhcmFtZXRlcnMmIHBhcmFtZXRl
cnMsIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IE5ldHdvcmtEYXRhVGFza1JlcGxheShzZXNzaW9uLCBjbGllbnQsIHBhcmFtZXRl
cnMsIHJlc291cmNlKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIE5ldHdvcmtEYXRhVGFza1Jl
cGxheShOZXR3b3JrU2Vzc2lvbiYsIE5ldHdvcmtEYXRhVGFza0NsaWVudCYsIGNvbnN0IE5ldHdv
cmtMb2FkUGFyYW1ldGVycyYsIENhY2hlZFJlc291cmNlKik7CisgICAgfk5ldHdvcmtEYXRhVGFz
a1JlcGxheSgpIG92ZXJyaWRlOworCisgICAgdm9pZCByZXN1bWUoKSBvdmVycmlkZTsKKyAgICB2
b2lkIHN1c3BlbmQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGNhbmNlbCgpIG92ZXJyaWRlOworICAg
IHZvaWQgY29tcGxldGUoKTsKKyAgICB2b2lkIGludmFsaWRhdGVBbmRDYW5jZWwoKSBvdmVycmlk
ZTsKKworICAgIFN0YXRlIHN0YXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zdGF0ZTsg
fQorCisgICAgdm9pZCBlbnF1ZXVlQ2FjaGVkRXZlbnRIYW5kbGVyKCk7CitwdWJsaWM6CisgICAg
dm9pZCByZXBsYXlSZXF1ZXN0U2VudChjb25zdCBSZXF1ZXN0U2VudEV2ZW50Jik7CisgICAgdm9p
ZCByZXBsYXlSZXNwb25zZVJlY2VpdmVkKGNvbnN0IFJlc3BvbnNlUmVjZWl2ZWRFdmVudCYpOwor
ICAgIHZvaWQgcmVwbGF5UmVkaXJlY3RSZWNlaXZlZChjb25zdCBSZWRpcmVjdFJlY2VpdmVkRXZl
bnQmKTsKKyAgICB2b2lkIHJlcGxheVJlZGlyZWN0U2VudChjb25zdCBSZWRpcmVjdFNlbnRFdmVu
dCYpOworICAgIHZvaWQgcmVwbGF5RGF0YVJlY2VpdmVkKGNvbnN0IERhdGFSZWNlaXZlZEV2ZW50
Jik7CisgICAgdm9pZCByZXBsYXlGaW5pc2hlZChjb25zdCBGaW5pc2hlZEV2ZW50Jik7CisKK3By
aXZhdGU6CisgICAgZW51bSBjbGFzcyBFcnJvciB7CisgICAgICAgIE5vRXJyb3IgPSAwLAorICAg
ICAgICBOb3RGb3VuZEVycm9yID0gMSwKKyAgICAgICAgTWV0aG9kTm90QWxsb3dlZCA9IDUKKyAg
ICB9OworCisgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZSYmLCBFcnJvciA9IEVycm9yOjpOb0Vycm9yKTsKKyAgICB2b2lkIGRpZEZpbmlzaChFcnJv
ciA9IEVycm9yOjpOb0Vycm9yKTsKKworcHJpdmF0ZToKKyAgICBlbnVtIHsga1Bvc2l0aW9uTm90
U3BlY2lmaWVkID0gLTEgfTsKKworICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6U3VzcGVuZGVk
IH07CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1fY3VycmVudFJlcXVlc3Q7CisgICAg
Q2FjaGVkUmVzb3VyY2UqIG1fcmVzb3VyY2U7CisgICAgQ2FjaGVkUmVzb3VyY2U6OkV2ZW50U3Ry
ZWFtIG1fZXZlbnRTdHJlYW07Cit9OworCit9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZQor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQVBUVVJF
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQ
b29sQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bv
b2xDb2NvYS5tbQppbmRleCA0OWQ0ZDViZDVhOTlkNGQ5ODExMTZhMDhhMTMyN2Q1MDFjYmFiOTUx
Li4xZWZiMjBlMmQzN2Y1NGFlYmYxNWUyZWE0ZTgyMWYzZmFlOTAwZDcwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQpA
QCAtODcsNiArODcsMTIgQEAgc3RhdGljIE5TU3RyaW5nICogY29uc3QgV2ViS2l0TmV0d29ya0xv
YWRUaHJvdHRsZUxhdGVuY3lNaWxsaXNlY29uZHNEZWZhdWx0c0tleQogCiBzdGF0aWMgTlNTdHJp
bmcgKiBjb25zdCBXZWJLaXRWYXJpYXRpb25Gb250c0VuYWJsZWREZWZhdWx0c0tleSA9IEAiRXhw
ZXJpbWVudGFsVmFyaWF0aW9uRm9udHNFbmFibGVkIjsKIAorI2lmIEVOQUJMRShORVRXT1JLX0NB
UFRVUkUpCitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBXZWJLaXRSZWNvcmROZXR3b3JrUmVxdWVz
dHNEZWZhdWx0c0tleSA9IEAiV2ViS2l0UmVjb3JkTmV0d29ya1JlcXVlc3RzIjsKK3N0YXRpYyBO
U1N0cmluZyAqIGNvbnN0IFdlYktpdFJlcGxheU5ldHdvcmtSZXF1ZXN0c0RlZmF1bHRzS2V5ID0g
QCJXZWJLaXRSZXBsYXlOZXR3b3JrUmVxdWVzdHMiOworc3RhdGljIE5TU3RyaW5nICogY29uc3Qg
V2ViS2l0UmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbkRlZmF1bHRzS2V5ID0gQCJXZWJLaXRSZWNv
cmRSZXBsYXlDYWNoZUxvY2F0aW9uIjsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
TlNTdHJpbmcgKlNjaGVtZUZvckN1c3RvbVByb3RvY29sUmVnaXN0ZXJlZE5vdGlmaWNhdGlvbk5h
bWUgPSBAIldlYktpdFNjaGVtZUZvckN1c3RvbVByb3RvY29sUmVnaXN0ZXJlZE5vdGlmaWNhdGlv
biI7CkBAIC0yNjIsNiArMjY4LDE0IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5p
dGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhCiAjZW5kaWYK
IAogICAgIHBhcmFtZXRlcnMuY29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQgPSBjb29r
aWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxlZCgpOworCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQ
VFVSRSkKKyAgICBwYXJhbWV0ZXJzLnNob3VsZFJlY29yZE5ldHdvcmtSZXF1ZXN0cyA9IFtkZWZh
dWx0cyBib29sRm9yS2V5OldlYktpdFJlY29yZE5ldHdvcmtSZXF1ZXN0c0RlZmF1bHRzS2V5XTsK
KyAgICBwYXJhbWV0ZXJzLnNob3VsZFJlcGxheU5ldHdvcmtSZXF1ZXN0cyA9IFtkZWZhdWx0cyBi
b29sRm9yS2V5OldlYktpdFJlcGxheU5ldHdvcmtSZXF1ZXN0c0RlZmF1bHRzS2V5XTsKKyAgICBw
YXJhbWV0ZXJzLnJlY29yZFJlcGxheUNhY2hlTG9jYXRpb24gPSBbZGVmYXVsdHMgc3RyaW5nRm9y
S2V5OldlYktpdFJlY29yZFJlcGxheUNhY2hlTG9jYXRpb25EZWZhdWx0c0tleV07CisgICAgaWYg
KHBhcmFtZXRlcnMucmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbi5pc0VtcHR5KCkpCisgICAgICAg
IHBhcmFtZXRlcnMucmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbiA9IHBhcmFtZXRlcnMuZGlza0Nh
Y2hlRGlyZWN0b3J5OworI2VuZGlmCiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3Jt
SW52YWxpZGF0ZUNvbnRleHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGExN2ExMTRmYjA3YTYzMGFhMTU3NjU5M2Y4MGIyYjk4
MDJkNDQyNTIuLmEwOTc5ZWRmYjEwYTk0OTc0ZDU1NmM0OWUzOGQ3N2M3YjEwMmI2NmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTEwNDQsNiArMTA0NCwyMCBAQAogCQk1MkQ1QTFCMDFDNTc0OTVBMDBERTM0QTMgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBQTFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlclByb3h5LmggKi87IH07CiAJCTUyRDVBMUIxMUM1NzQ5NjIwMERFMzRBMyAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBQzFDNTc0OTRFMDBERTM0QTMgLyogV2Vi
VmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tICovOyB9OwogCQk1MkQ1QTFCNzFDNTc0QTAy
MDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUI0MUM1NzQ5RjIwMERFMzRBMyAv
KiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tICovOyB9OworCQk1MzAyNTgzQjFEQ0JCRDIy
MDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgyRTFEQ0JCRDFEMDBEQTg5
QzIgLyogTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5jcHAgKi87IH07CisJCTUzMDI1ODND
MURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUNhY2hlZFJlc291cmNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgyRjFEQ0JCRDFE
MDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5oICovOyB9OworCQk1MzAy
NTgzRDFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVFdmVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgzMDFEQ0JCRDFEMDBE
QTg5QzIgLyogTmV0d29ya0NhcHR1cmVFdmVudC5jcHAgKi87IH07CisJCTUzMDI1ODNFMURDQkJE
MjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgzMTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0
d29ya0NhcHR1cmVFdmVudC5oICovOyB9OworCQk1MzAyNTgzRjFEQ0JCRDIyMDBEQTg5QzIgLyog
TmV0d29ya0NhcHR1cmVMb2dnaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MzAyNTgzMjFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVM
b2dnaW5nLmggKi87IH07CisJCTUzMDI1ODQwMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2Fw
dHVyZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMwMjU4MzMxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTWFuYWdlci5j
cHAgKi87IH07CisJCTUzMDI1ODQxMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZU1h
bmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
MDI1ODM0MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCAqLzsgfTsK
KwkJNTMwMjU4NDIxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVjb3JkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MzUx
RENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVjb3JkZXIuY3BwICovOyB9OworCQk1
MzAyNTg0MzFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZWNvcmRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MzYxRENCQkQx
RDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVjb3JkZXIuaCAqLzsgfTsKKwkJNTMwMjU4NDQx
RENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MzcxRENCQkQxRDAwREE4
OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuY3BwICovOyB9OworCQk1MzAyNTg0NTFEQ0JC
RDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXBsYXllci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MzgxRENCQkQxRDAwREE4OUMyIC8q
IE5ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuaCAqLzsgfTsKKwkJNTNFMjYwNjUxRERBOTQ4RTAwNTkw
ODE4IC8qIE5ldHdvcmtDYXB0dXJlVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzRTI2MDY0MUREQTk0ODEwMDU5MDgxOCAvKiBOZXR3b3JrQ2Fw
dHVyZVR5cGVzLmggKi87IH07CisJCTUzMDI1ODQ2MURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3Jr
RGF0YVRhc2tSZXBsYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTMwMjU4MzkxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtEYXRhVGFza1JlcGxh
eS5jcHAgKi87IH07CisJCTUzMDI1ODQ3MURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrRGF0YVRh
c2tSZXBsYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzMDI1ODNBMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrRGF0YVRhc2tSZXBsYXkuaCAqLzsg
fTsKIAkJNTMyMTU5NTMxREJBRTcxODAwNTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMjE1OTUyMURCQUU2
RkMwMDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbi5jcHAgKi87IH07CiAJCTUzMjE1OTU0MURCQUU3
MUQwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMyMTU5NTExREJBRTZGQzAwNTRBQTNDIC8qIE5ldHdv
cmtEYXRhVGFzay5jcHAgKi87IH07CiAJCTUzMjE1OTU1MURCQUU3MjkwMDU0QUEzQyAvKiBOZXR3
b3JrU2Vzc2lvbkNvY29hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzIxNTk1MDFEQkFFNkQ3MDA1NEFBM0MgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5o
ICovOyB9OwpAQCAtMzE0Miw2ICszMTU2LDIwIEBACiAJCTUyRDVBMUIyMUM1NzQ5RjIwMERFMzRB
MyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTJENUExQjMxQzU3NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVl
bk1hbmFnZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTJENUExQjQxQzU3NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzAyNTgyRTFEQ0JC
RDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZUNhY2hlZFJlc291cmNl
LmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVDYWNoZWRS
ZXNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMDI1ODJGMURDQkJE
MUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUNhY2hlZFJlc291cmNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtDYXB0dXJlQ2FjaGVkUmVzb3VyY2UuaDsgcGF0
aCA9IE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzAyNTgzMDFEQ0JCRDFEMDBEQTg5QzIg
LyogTmV0d29ya0NhcHR1cmVFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2Nh
cHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUzMDI1ODMxMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtDYXB0dXJlRXZlbnQuaDsgcGF0
aCA9IE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1MzAyNTgzMjFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29y
a0NhcHR1cmVMb2dnaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdv
cmtDYXB0dXJlTG9nZ2luZy5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3Jr
Q2FwdHVyZUxvZ2dpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMwMjU4MzMx
RENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTWFuYWdlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuY3BwOyBwYXRo
ID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZU1hbmFnZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzAyNTgzNDFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0
d29ya0NhcHR1cmVNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5l
dHdvcmtDYXB0dXJlTWFuYWdlci5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3
b3JrQ2FwdHVyZU1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMwMjU4
MzUxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVjb3JkZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya0NhcHR1cmVSZWNvcmRlci5jcHA7
IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVjb3JkZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzAyNTgzNjFEQ0JCRDFEMDBEQTg5QzIg
LyogTmV0d29ya0NhcHR1cmVSZWNvcmRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBOZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0
dXJlL05ldHdvcmtDYXB0dXJlUmVjb3JkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTMwMjU4MzcxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya0NhcHR1cmVSZXBs
YXllci5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVw
bGF5ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzAyNTgzODFEQ0JCRDFE
MDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXBsYXllci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmg7IHBhdGggPSBOZXR3b3JrUHJv
Y2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTNFMjYwNjQxRERBOTQ4MTAwNTkwODE4IC8qIE5ldHdvcmtDYXB0dXJlVHlw
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya0NhcHR1cmVUeXBl
cy5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVR5cGVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMDI1ODM5MURDQkJEMUQwMERBODlDMiAv
KiBOZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gTmV0d29ya0RhdGFUYXNrUmVwbGF5LmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNz
L2NhcHR1cmUvTmV0d29ya0RhdGFUYXNrUmVwbGF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTMwMjU4M0ExRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtEYXRhVGFza1JlcGxh
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrRGF0YVRhc2tSZXBs
YXkuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0RhdGFUYXNrUmVwbGF5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMjE1OTRGMURCQUU2RDcwMDU0QUEz
QyAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY29jb2Ev
TmV0d29ya0RhdGFUYXNrQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMy
MTU5NTAxREJBRTZENzAwNTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya1Nlc3Npb25Db2NvYS5oOyBwYXRoID0gTmV0
d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MzIxNTk1MTFEQkFFNkZDMDA1NEFBM0MgLyogTmV0d29ya0RhdGFUYXNr
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFz
ay5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTQ3OCw2ICs1NTA2LDcgQEAKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJRTQ4OUQyODIxQTBBMkJFODAwNzhDMDZBIC8qIGNh
Y2hlICovLAorCQkJCTUzOUJENUIyMURBREIwQkEwMEYyRTRFMSAvKiBjYXB0dXJlICovLAogCQkJ
CTdFQzRGMEY4MThFNEE5MjIwMDgwNTZBRiAvKiBjb2NvYSAqLywKIAkJCQk1QzE0MjZGMjFDMjNG
ODJEMDBENDExODMgLyogQ3VzdG9tUHJvdG9jb2xzICovLAogCQkJCTVDMTQyNkYxMUMyM0Y4MTcw
MEQ0MTE4MyAvKiBEb3dubG9hZHMgKi8sCkBAIC01Nzg4LDYgKzU4MTcsMjcgQEAKIAkJCW5hbWUg
PSBJY29uRGF0YWJhc2U7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk1MzlC
RDVCMjFEQURCMEJBMDBGMkU0RTEgLyogY2FwdHVyZSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3Vw
OworCQkJY2hpbGRyZW4gPSAoCisJCQkJNTMwMjU4MkUxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdv
cmtDYXB0dXJlQ2FjaGVkUmVzb3VyY2UuY3BwICovLAorCQkJCTUzMDI1ODJGMURDQkJEMUQwMERB
ODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUNhY2hlZFJlc291cmNlLmggKi8sCisJCQkJNTMwMjU4MzAx
RENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwICovLAorCQkJCTUzMDI1
ODMxMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmggKi8sCisJCQkJNTMw
MjU4MzIxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTG9nZ2luZy5oICovLAorCQkJ
CTUzMDI1ODMzMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuY3BwICov
LAorCQkJCTUzMDI1ODM0MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZU1hbmFnZXIu
aCAqLywKKwkJCQk1MzAyNTgzNTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZWNv
cmRlci5jcHAgKi8sCisJCQkJNTMwMjU4MzYxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0
dXJlUmVjb3JkZXIuaCAqLywKKwkJCQk1MzAyNTgzNzFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29y
a0NhcHR1cmVSZXBsYXllci5jcHAgKi8sCisJCQkJNTMwMjU4MzgxRENCQkQxRDAwREE4OUMyIC8q
IE5ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuaCAqLywKKwkJCQk1M0UyNjA2NDFEREE5NDgxMDA1OTA4
MTggLyogTmV0d29ya0NhcHR1cmVUeXBlcy5oICovLAorCQkJCTUzMDI1ODM5MURDQkJEMUQwMERB
ODlDMiAvKiBOZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwICovLAorCQkJCTUzMDI1ODNBMURDQkJE
MUQwMERBODlDMiAvKiBOZXR3b3JrRGF0YVRhc2tSZXBsYXkuaCAqLywKKwkJCSk7CisJCQluYW1l
ID0gY2FwdHVyZTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTVDMDUyRjIz
MUM2RDNBQTEwMDc2RTkxOSAvKiBjb2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCkBAIC03NTQwLDYgKzc1OTAsNyBAQAogCQkJCTM3QTY0RTU3MThGMzhGNDYw
MEVCMzBGMSAvKiBfV0tGb3JtSW5wdXRTZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzNE
MTIyMzE4QTQ3MzAxMDA2NkQ5Q0MgLyogX1dLRnJhbWVIYW5kbGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTM3M0QxMjI3MThBNDczRjYwMDY2RDlDQyAvKiBfV0tGcmFtZUhhbmRsZUludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlDRDc4RTExOTFEQjdFNUFEMDAxNEEyREUgLyogX1dLRnVsbHNj
cmVlbkRlbGVnYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0U2QTRFRTFCQzVERDM5MDBGOEEw
RTcgLyogX1dLSGl0VGVzdFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNBODhCM0IxQkM3
MTBEOTAwQUJBNUMyIC8qIF9XS0hpdFRlc3RSZXN1bHRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzdBNjRFNTUxOEYzOEUzQzAwRUIzMEYxIC8qIF9XS0lucHV0RGVsZWdhdGUuaCBpbiBI
ZWFkZXJzICovLApAQCAtNzU4MCw3ICs3NjMxLDYgQEAKIAkJCQkxQUZCNEM3MjFBREYxNTVEMDBC
MzMzMzkgLyogX1dLV2Vic2l0ZURhdGFTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0QTkz
QjcxQUVCMDhFQTAwMTUwRTlDIC8qIF9XS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTExNURDNzIxOTFEODJEQTAwREE4MDcyIC8qIF9XS1dlYlZpZXdQcmlu
dEZvcm1hdHRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0Q3OEUxMTkxREI3RTVBRDAwMTRBMkRF
IC8qIF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE5REQzQzAx
RDA3RDE2ODAwQUM4MjNCIC8qIF9XS1dlYlZpZXdQcmludEZvcm1hdHRlckludGVybmFsLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMTgyRDVCNTFCRTZCRDI1MDA4N0E3Q0MgLyogQWNjZXNzaWJpbGl0
eUlPUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdENzkyRDgxNzY3Q0NBMzAwODgxQ0JFIC8qIEFj
dGl2aXR5QXNzZXJ0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTc2MDAsNiArNzY1MCw3IEBACiAJ
CQkJMzdFMjVENkUxOEZERTVENjAwNUQzQTAwIC8qIEFQSUZvcm1DbGllbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBQzEzMzcyMTg1NjZDN0MwMEYzRUMwNSAvKiBBUElGcmFtZUhhbmRsZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMkRGOUVFRTYxQTc4MUZCNDAwQjZDRkJFIC8qIEFQSUZyYW1lSW5m
by5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0Q3OEUxMTcxREI3REMwQTAwMTRBMkRFIC8qIEFQSUZ1
bGxzY3JlZW5DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTc0QUEzMTQyQTRDQjcwMDM5
MjUwRiAvKiBBUElHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRBQkE3NzYxQTgyQjQy
MTAwRUYwRjFBIC8qIEFQSUhpc3RvcnlDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQTg4
QjQ2MUJDODgyOTMwMEFCQTVDMiAvKiBBUElIaXRUZXN0UmVzdWx0LmggaW4gSGVhZGVycyAqLywK
QEAgLTc3MTIsNiArNzc2Myw3IEBACiAJCQkJQkNFODFEOEQxMzE5RjdFRjAwMjQxOTEwIC8qIEZv
bnRJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTE0RjhFMjFENzRDODM0MDA2Q0JFQzYgLyog
RnJhbWVJbmZvRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMDBENjExODMxNzkyMTAwMDg3
REQ3IC8qIEZyYW1lTG9hZFN0YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQlDRDc4RTExNTFEQjdE
N0VEMDAxNEEyREUgLyogRnVsbHNjcmVlbkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1
QkUxQjMxRDU5MDJERDAwREQ3QzY4IC8qIEdhbWVwYWREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE3NzUzRjExOEJBQkYwMDA3RDlFOUEgLyogR2VuZXJpY0NhbGxiYWNrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzA2RjQyRjEyREJCOUI2MDAyRDc4REUgLyogR2VvbG9jYXRpb25QZXJtaXNz
aW9uUmVxdWVzdE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzc5MCw5ICs3ODQyLDE5IEBA
CiAJCQkJODM0QjI1MTIxQTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCUU0NDM2RUNGMUEwRDA0MEIwMEVBRDIwNCAvKiBOZXR3b3Jr
Q2FjaGVTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzEwNDI4QjFCRDZCNjZGMDBBNzE1
RTQgLyogTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUzMDI1ODNDMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUNhY2hlZFJlc291cmNl
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzAyNTgzRTFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29y
a0NhcHR1cmVFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMwMjU4M0YxRENCQkQyMjAwREE4
OUMyIC8qIE5ldHdvcmtDYXB0dXJlTG9nZ2luZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMwMjU4
NDExRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTWFuYWdlci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTMwMjU4NDMxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVjb3Jk
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzMDI1ODQ1MURDQkJEMjIwMERBODlDMiAvKiBOZXR3
b3JrQ2FwdHVyZVJlcGxheWVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0UyNjA2NTFEREE5NDhF
MDA1OTA4MTggLyogTmV0d29ya0NhcHR1cmVUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEz
QTE2NEQxNjMwQTlCRjAwNUQ3RDIyIC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MUREOUYyOTE2MzY3REEyMDAxNTc4RTkgLyogTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCQzlC
OEUxQzY1MkNBMDAwQThGRENGIC8qIE5ldHdvcmtEYXRhVGFzay5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNTNCQTQ3RDExREMyRUY1RTAwNERGNEFEIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTUzMjE1OTU2MURCQUU3MkQwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRh
c2tDb2NvYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMwMjU4NDcxRENCQkQyMjAwREE4OUMyIC8q
IE5ldHdvcmtEYXRhVGFza1JlcGxheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM5OTAyMDMxQkU5
QTAyQjAwMEYzNjUzIC8qIE5ldHdvcmtMb2FkLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0Q0NTRE
NzFCRTlEM0M0MDA2QzkzQkQgLyogTmV0d29ya0xvYWRDbGllbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTgzOTE0OTY1MUJFQTgzODUwMEQyRDk1MyAvKiBOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCBp
biBIZWFkZXJzICovLApAQCAtNzgwOCw2ICs3ODcwLDcgQEAKIAkJCQlFMTUyNTUxQjE3MDExODE5
MDAzRDdBREIgLyogTmV0d29ya1Jlc291cmNlTG9hZGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTVDMTQyNkYwMUMyM0Y4MDkwMEQ0MTE4MyAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkUGFy
YW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMyMENCQTAxQkIxRUNEODAwODk1QkIxIC8q
IE5ldHdvcmtTZXNzaW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzIxNTk1NTFEQkFFNzI5MDA1
NEFBM0MgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFBMkVD
NTYxNDg5OUMwOTAwODEwRDcxIC8qIE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkzMTMxMjYxRjE0OEZGODJDMDBCQTJBMzkgLyogTm90aWZpY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUEyRUM1MjE0
ODk5ODE5MDA4MTBENzEgLyogTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJv
eHkuaCBpbiBIZWFkZXJzICovLApAQCAtNzg2MSw3ICs3OTI0LDYgQEAKIAkJCQkxQTBFQzZDMDEy
NEJCRDlCMDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQTBFQzc1RTEyNEJDN0IyMDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTA0M0I1RTEyNEQ1RTlEMDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vz
c1Byb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTUzQkE0N0QxMURDMkVGNUUwMDRE
RjRBRCAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTA0M0RD
MTEyNEZGODc1MDBGRkJGQjUgLyogUGx1Z2luUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
OEVGQTcxMTI1MkI4NDEwMEY3MDY3RiAvKiBQbHVnaW5Qcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQTRBOUYzMzEyQjg0NEUyMDA4RkU5ODQgLyogUGx1Z2luUXVpcmtzLmggaW4g
SGVhZGVycyAqLywKQEAgLTc5ODIsNiArODA0NCw3IEBACiAJCQkJQkMwMzJENzcxMEY0Mzc4RDAw
NThDMTVBIC8qIFdlYkNvbnRleHRNZW51Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTI5
MzVEODEyODhEMTk0MDBBNEI2OTUgLyogV2ViQ29udGV4dE1lbnVJdGVtLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTBGQkI5QjEyODhDOTVFMDBBRkZERjQgLyogV2ViQ29udGV4dE1lbnVJdGVtRGF0
YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTFFQTAyNDAxREFDMzFEQjAwOTYwMjFGIC8qIFdlYkNv
bnRleHRNZW51TGlzdGVuZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBQ0JCODIxMjdB
OEJBRDAwRDIwM0I5IC8qIFdlYkNvbnRleHRNZW51UHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxQUNCQkEwMTI3QThGMkMwMEQyMDNCOSAvKiBXZWJDb250ZXh0TWVudVByb3h5TWFjLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0Y0REUyNTE2OEZBNDQ4MDBDOTRBRkMgLyogV2ViQ29udGV4dFN1
cHBsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtODA2OCw3ICs4MTMxLDYgQEAKIAkJCQlCQzdC
NjI1MjEyQTQzQzk2MDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwRGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkM3QjYyMTUxMkE0MjE5QTAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cFByb3h5LmggaW4g
SGVhZGVycyAqLywKIAkJCQkyRDlFQTMwRjFBOTZDQkZGMDAyRDI4MDcgLyogV2ViUGFnZUluamVj
dGVkQnVuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQlBMUVBMDIzODFEQUJGRjdFMDA5
NjAyMUYgLyogV0tDb250ZXh0TWVudUxpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMENF
NzJBMTEyNDdFNzFEMDBCQzBFQzQgLyogV2ViUGFnZU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyRDVDOUQwNjE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMDMyREQxMTBGNDM4OUYwMDU4QzE1QSAvKiBXZWJQYWdlUHJveHkuaCBp
biBIZWFkZXJzICovLApAQCAtODE5Myw3ICs4MjU1LDYgQEAKIAkJCQlCQzdCNjMzRDEyQTQ1RDEy
MDBEMTc0QTQgLyogV0tCdW5kbGVQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjQ3
NEQ4MTg0RDQzRkQwMDUxQjYyMiAvKiBXS0J1bmRsZVBhZ2VMb2FkZXJDbGllbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUVEODJBN0YyMTI4QzZGQUYwMDQ0NzdCMyAvKiBXS0J1bmRsZVBhZ2VPdmVy
bGF5LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MzIxNTk1NjFEQkFFNzJEMDA1NEFBM0MgLyogTmV0
d29ya0RhdGFUYXNrQ29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjQ3NEVBMTg0RDQ1MTMw
MDUxQjYyMiAvKiBXS0J1bmRsZVBhZ2VQb2xpY3lDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMUI0MTk4MTFENDFENTcwMDExRThERCAvKiBXS0J1bmRsZVBhZ2VQcml2YXRlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQUI0NzREQTE4NEQ0NDI1MDA1MUI2MjIgLyogV0tCdW5kbGVQYWdlUmVz
b3VyY2VMb2FkQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTgyMTcsNiArODI3OCw3IEBACiAJ
CQkJMUE0NDVCOUYxODRENUZCNTAwNEIzNDE0IC8qIFdLQ29udGV4dEluamVjdGVkQnVuZGxlQ2xp
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUE1NTVGNjEyOEM2QzQ3MDA5QUJDRUMgLyogV0tD
b250ZXh0TWVudUl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQTU1NjAxMTI4QzZEOTIwMDlB
QkNFQyAvKiBXS0NvbnRleHRNZW51SXRlbVR5cGVzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMUVB
MDIzODFEQUJGRjdFMDA5NjAyMUYgLyogV0tDb250ZXh0TWVudUxpc3RlbmVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQ0M5MzhFMTExODBERTQ0MDA4NUU1RkUgLyogV0tDb250ZXh0UHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOUZCNUYzOTUxNjlFNkE4MDAwMkMyNUJGIC8qIFdLQ29udGV4
dFByaXZhdGVNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTMzMDkzNDVCMTMxNUI5OTgwMDk3QTdC
QyAvKiBXS0Nvb2tpZU1hbmFnZXIuaCBpbiBIZWFkZXJzICovLApAQCAtODI2Myw3ICs4MzI1LDYg
QEAKIAkJCQlCQzU0Q0MxMjEyRDY3NEVFMDA1QzY3QjAgLyogV0tHZW9sb2NhdGlvbk1hbmFnZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDZGNDRFMTJEQkRGM0YwMDJENzhERSAvKiBXS0dlb2xv
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMEU2MTk4MTJE
NkNEMTIwMDEyQTcyQSAvKiBXS0dlb2xvY2F0aW9uUG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAot
CQkJCTUzMjE1OTU1MURCQUU3MjkwMDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkNCNEU0RjE4QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9sb2NhdGlv
blByb3ZpZGVySU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0M4QjM3NDEyNUZCNjkwMDBERTQ2
QTQgLyogV0tHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0MjJGOEIxOEIyOUI1NDAw
RDhDRDk2IC8qIFdLSGlzdG9yeURlbGVnYXRlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04
MzIzLDcgKzgzODQsNiBAQAogCQkJCTdDRDVFQkI5MTc0NkExNUIwMDBDMUM0NSAvKiBXS09iakNU
eXBlV3JhcHBlclJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc4RTFBNDAxODFFREEwMTAwMzEw
MDdBIC8qIFdLT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUNDNTBGMjFDQkMzODFEMDAz
QzdEMDMgLyogV0tPcGVuUGFuZWxQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMUVB
MDI0MDFEQUMzMURCMDA5NjAyMUYgLyogV2ViQ29udGV4dE1lbnVMaXN0ZW5lclByb3h5LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTY3Q0QyRTFDQkM1MTNGMDBCRkUzRUEgLyogV0tPcGVuUGFuZWxQ
YXJhbWV0ZXJzSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDODU3RkU2MTJCODQzRDgw
MEVERUIyRSAvKiBXS09wZW5QYW5lbFBhcmFtZXRlcnNSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMURGRThGMTJCMzFDQTgwMDVERjczMCAvKiBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmgg
aW4gSGVhZGVycyAqLywKQEAgLTgzMzMsNyArODM5Myw2IEBACiAJCQkJODM3MkRCMjUxQTY3NEM4
RjAwQzY5N0M1IC8qIFdLUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQUI4QTFGNDE4NDAwQjhGMDBFOUFFNjkgLyogV0tQYWdlRmluZENsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUFCOEExRjYxODQwMEI5RDAwRTlBRTY5IC8qIFdLUGFnZUZpbmRN
YXRjaGVzQ2xpZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQlDRDc4RTExNTFEQjdEN0VEMDAxNEEy
REUgLyogRnVsbHNjcmVlbkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCOEExRjAxODQw
MEIwMDAwRTlBRTY5IC8qIFdLUGFnZUZvcm1DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
N0I2MzM3MTJBNDVBQkEwMEQxNzRBNCAvKiBXS1BhZ2VHcm91cC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMkQ5RUEzMEQxQTk2Q0I1OTAwMkQyODA3IC8qIFdLUGFnZUluamVjdGVkQnVuZGxlQ2xpZW50
LmggaW4gSGVhZGVycyAqLywKQEAgLTgzNjUsNyArODQyNCw2IEBACiAJCQkJOTM5MTA3NEYxQkY2
QkM2NTAwOEMxN0FEIC8qIFdLUHJldmlld0VsZW1lbnRJbmZvSW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQ0I0RTY2MThCQkUzRDkwMDBGQ0ZDOSAvKiBXS1ByaW50aW5nVmlldy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkNCQUFDRUIxNDUyMjVFMzAwNTNGODJGIC8qIFdLUHJvY2Vzc0dy
b3VwLmggaW4gSGVhZGVycyAqLywKLQkJCQlDRDc4RTExNzFEQjdEQzBBMDAxNEEyREUgLyogQVBJ
RnVsbHNjcmVlbkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCQUFDRUQxNDUyMjVFMzAw
NTNGODJGIC8qIFdLUHJvY2Vzc0dyb3VwUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEx
NTg0MUExODkwNDRGNTAwMTc2MTZDIC8qIFdLUHJvY2Vzc1Bvb2wuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBM0NDMTY5MTg5MDdFQjAwMDFFNkVEOCAvKiBXS1Byb2Nlc3NQb29sSW50ZXJuYWwuaCBp
biBIZWFkZXJzICovLApAQCAtOTE5Niw2ICs5MjU0LDcgQEAKIAkJCQlCQ0U4MUQ4QzEzMTlGN0VG
MDAyNDE5MTAgLyogRm9udEluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUExNEY4RTExRDc0
QzgzNDAwNkNCRUM2IC8qIEZyYW1lSW5mb0RhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFF
MDBENjAxODMxNzkyMTAwMDg3REQ3IC8qIEZyYW1lTG9hZFN0YXRlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUNENzhFMTE0MURCN0Q3RUQwMDE0QTJERSAvKiBGdWxsc2NyZWVuQ2xpZW50Lm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTE1QkUxQjIxRDU5MDJERDAwREQ3QzY4IC8qIEdhbWVwYWREYXRh
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMDZGNDMwMTJEQkI5QjYwMDJENzhERSAvKiBHZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzA2RjQ0QjEyREJEMUY1MDAyRDc4REUgLyogR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1h
bmFnZXJQcm94eS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkyNzQsMTMgKzkzMzMsMjAgQEAKIAkJ
CQlFNDQzNkVDRDFBMEQwNDBCMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlS2V5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTgzMUVFQkJFMUJEODVDNDMwMEJCNjRDMyAvKiBOZXR3b3JrQ2FjaGVTcGVj
dWxhdGl2ZUxvYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODMyQUUyNTMxQkUyRThDRDAwRkFB
RTEwIC8qIE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1hbmFnZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJQ0Q3OEUxMTQxREI3RDdFRDAwMTRBMkRFIC8qIEZ1bGxzY3JlZW5DbGllbnQubW0g
aW4gU291cmNlcyAqLywKIAkJCQk4M0JEQ0NCOTFBQzVGREI2MDAzRjY0NDEgLyogTmV0d29ya0Nh
Y2hlU3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDQzNkVEMDFBMEQwNDBCMDBF
QUQyMDQgLyogTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4MzEw
NDI4QzFCRDZCNjZGMDBBNzE1RTQgLyogTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNTMwMjU4M0IxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtD
YXB0dXJlQ2FjaGVkUmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTMwMjU4M0QxRENC
QkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTMwMjU4NDAxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTWFuYWdlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk1MzAyNTg0MjFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0Nh
cHR1cmVSZWNvcmRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzAyNTg0NDFEQ0JCRDIyMDBE
QTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXBsYXllci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
MTNBMTY0QzE2MzBBOUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFERDlGMjgxNjM2N0RBMjAwMTU3OEU5IC8qIE5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTUzMjE1OTU0MURCQUU3MUQwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2suY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNTNCQTQ3RDAxREMyRUY1RTAwNERGNEFEIC8qIE5ldHdvcmtEYXRh
VGFza0Jsb2IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUNCQzlCOEQxQzY1Mjc5QzAwQThGRENG
IC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTMwMjU4NDYx
RENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtEYXRhVGFza1JlcGxheS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk4Mzk5MDIwMjFCRTlBMDJCMDAwRjM2NTMgLyogTmV0d29ya0xvYWQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJODM2RUVCODAxQkU5RUM5RTAwNkI0QjgyIC8qIE5ldHdvcmtMb2FkTWFj
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3OTU1NjgxNjI4NzZDRjAwRkE0M0I2IC8qIE5ldHdv
cmtQcm9jZXNzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTI5OSw2ICs5MzY1LDcgQEAKIAkJCQlF
MTUyNTUxQTE3MDExODE5MDAzRDdBREIgLyogTmV0d29ya1Jlc291cmNlTG9hZGVyTWVzc2FnZVJl
Y2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMTQyNkVGMUMyM0Y4MDkwMEQ0MTE4MyAv
KiBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzgyODNBQzE2QjRCRjNGMDBBMjc4RkUgLyogTmV0d29ya1NlcnZpY2VFbnRyeVBvaW50Lm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJNTMyMTU5NTMxREJBRTcxODAwNTRBQTNDIC8qIE5ldHdvcmtTZXNz
aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMjBDQjlEMUJCMERDRkEwMDg5NUJCMSAvKiBO
ZXR3b3JrU2Vzc2lvbkNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFBMkVDNTUxNDg5OTgy
RTAwODEwRDcxIC8qIE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTMxMzEyNjFFMTQ4RkY4MkMwMEJBMkEzOSAvKiBOb3RpZmljYXRpb25QZXJtaXNz
aW9uUmVxdWVzdE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MzU4LDcgKzk0MjUsNiBA
QAogCQkJCTFBMkQ5MjIxMTI4MURDMUIwMDFFQjk2MiAvKiBQbHVnaW5Qcm94eU1hYy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTFBOEVGQTcwMTI1MkI4NDEwMEY3MDY3RiAvKiBQbHVnaW5Qcm94eU1l
c3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0Q2MjI3NzE3MzlEODYzMDA1
QkQ3RkYgLyogUGx1Z2luU2FuZGJveFByb2ZpbGUubW0gaW4gU291cmNlcyAqLywKLQkJCQk1M0JB
NDdEMDFEQzJFRjVFMDA0REY0QUQgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzgyODQ0RDE2QjUwODFDMDBBMjc4RkUgLyogUGx1Z2luU2VydmljZUVudHJ5
UG9pbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTZGQjdBRTExRTY0QjY4MDBEQjEzNzEgLyog
UGx1Z2luVmlldy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMThDOTJGNDEyREI5RTcxMDBDRjJB
RUIgLyogUHJpbnRJbmZvLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTQxNCw2ICs5NDgwLDcgQEAK
IAkJCQkxQTY0MjBFNDEyRENFMkZGMDBDQUFFMkMgLyogU2hhcmVhYmxlQml0bWFwLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUMwMUEyNjAxMTI2NjJGMjEwMEM5RUQ1NSAvKiBTaGFyZWFibGVCaXRt
YXBDRy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTIxNzQ2MDE2NEMyMEUzMDAzN0E1QzEgLyog
U2hhcmVhYmxlUmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDQ1MEFFQzAxREMzRkFF
NTAwOTk0M0YyIC8qIFNoYXJlZE1lbW9yeUNvY29hLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJE
QUYwNkQ3MThCRDFBNDcwMDgxQ0VCMSAvKiBTbWFydE1hZ25pZmljYXRpb25Db250cm9sbGVyLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJMkRFNjk0M0QxOEJEMkE2ODAwNUMxNUU1IC8qIFNtYXJ0TWFn
bmlmaWNhdGlvbkNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTI3MkIyOEExNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRhLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtOTQ4OSw2ICs5NTU2LDcgQEAKIAkJCQk1MTAyMUU5QzEyQjE2Nzg4MDA1QzAz
M0MgLyogV2ViQ29udGV4dE1lbnVDbGllbnRNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTI5
MzVENzEyODhEMTk0MDBBNEI2OTUgLyogV2ViQ29udGV4dE1lbnVJdGVtLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxMEZCQjlBMTI4OEM5NUUwMEFGRkRGNCAvKiBXZWJDb250ZXh0TWVudUl0ZW1E
YXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUExRUEwMjNGMURBQzMxREIwMDk2MDIxRiAvKiBX
ZWJDb250ZXh0TWVudUxpc3RlbmVyUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFBODRD
RTMxMjdGMzg2QjAwQ0E2RUE0IC8qIFdlYkNvbnRleHRNZW51UHJveHkuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTFBQ0JCQTExMjdBOEYyQzAwRDIwM0I5IC8qIFdlYkNvbnRleHRNZW51UHJveHlN
YWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMzA5MzQ0RjEzMTVCOTREMDA5N0E3QkMgLyogV2Vi
Q29va2llTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk1NTAsNyArOTYxOCw2IEBACiAJ
CQkJNTEwNTIzNzkxQzczREE3NzAwNzk5M0NCIC8qIFdlYklEQkNvbm5lY3Rpb25Ub0NsaWVudE1l
c3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTQxMjk5NTFDNjQyOEMyMDA1
OUU3MTQgLyogV2ViSURCQ29ubmVjdGlvblRvU2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTUxMDUyMzc1MUM3M0QzOEYwMDc5OTNDQiAvKiBXZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXJNZXNz
YWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDQ1MEFFQzAxREMzRkFFNTAwOTk0
M0YyIC8qIFNoYXJlZE1lbW9yeUNvY29hLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxQTU4Nzgw
MUQxQzUwODEwMDRCQTlBRiAvKiBXZWJJREJSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkNDRjZBQkMxMkM5MUVGOTAwOEY5QzM1IC8qIFdlYkltYWdlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTFDOEUyODIxMTI3NUQxNTQwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC05NjY1LDcgKzk3MzIsNiBAQAogCQkJCTFBNTNDMkE5MUEzMjU3MkIwMDRFOEM3
MCAvKiBXZWJzaXRlRGF0YVN0b3JlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNDgzMkMzMUE5
NjVBM0MwMDhCNERGRSAvKiBXZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0gaW4gU291cmNlcyAqLywK
IAkJCQk1Qzc3MDY3NDFEMTEzODM4MDAxMjcwMEYgLyogV2ViU29ja2V0UHJvdmlkZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQTFENDIwNDcxREI1NTc4NTAwQkI2QjBEIC8qIFdLQ29udGV4dE1l
bnVMaXN0ZW5lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4MzYwMzQ5RjFBQ0IzNEQ2MDA2MjY1
NDkgLyogV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFB
NTJDMEY3MUEzOENEQzcwMDE2MTYwQSAvKiBXZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDNTcxNUMxMTVBREFFRjAwMUNDQUY5IC8qIFdlYlN5c3Rl
bUludGVyZmFjZS5tbSBpbiBTb3VyY2VzICovLApAQCAtOTY3OSw2ICs5NzQ1LDcgQEAKIAkJCQkx
QUFGMDhBMTE5MjY4MUQxMDBCNjM5MEMgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHku
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MzNjFENzgxOTI4MDNCRDAwMzZBNTlEIC8qIFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE1NzM5QkJFMUI0MjA0NjYwMEQyNThDMSAvKiBXZWJVc2VyTWVkaWFDbGllbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJODNFRTU3NUIxREI3RDYxMTAwQzc0QzUwIC8qIFdlYlZhbGlk
YXRpb25NZXNzYWdlQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUyRDVBMUI3MUM1NzRB
MDIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJM0Y0MThFRjkxODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTJENUExQjExQzU3NDk2
MjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSBpbiBTb3VyY2Vz
ICovLApAQCAtOTY4Niw3ICs5NzUzLDYgQEAKIAkJCQkyREZDN0RCQzFCQ0NDMTk1MDBDMTU0OEMg
LyogV2ViVmlld0ltcGwubW0gaW4gU291cmNlcyAqLywKIAkJCQlDMDMzN0REMTEyN0EyOTgwMDA4
RkY0RjQgLyogV2ViV2hlZWxFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjgxNjBEMDE4
NzY0NTU3MDAyMUU3OUQgLyogV2luZG93U2VydmVyQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICov
LAotCQkJCTUzMjE1OTUzMURCQUU3MTgwMDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkyOUNENTVBQjEyOEUyOTRGMDAxMzNDODUgLyogV0tBY2Nlc3NpYmls
aXR5V2ViUGFnZU9iamVjdEJhc2UubW0gaW4gU291cmNlcyAqLywKIAkJCQkyOTIzMkRGODE4QjJB
OUFFMDBEMDU5NkYgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdElPUy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTI5MjMyREY5MThCMkFCM0EwMEQwNTk2RiAvKiBXS0FjY2Vzc2liaWxpdHlX
ZWJQYWdlT2JqZWN0TWFjLm1tIGluIFNvdXJjZXMgKi8sCkBAIC05NzA1LDcgKzk3NzEsNiBAQAog
CQkJCUJDQkFBQ0Y1MTQ1MjMyNEYwMDUzRjgyRiAvKiBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFMDBENEMxODJENkVCMDAwMDg3REQ3IC8qIFdLQnJvd3Np
bmdDb250ZXh0SGFuZGxlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyMDRFRUUxMUM4M0VDODAw
OEYzMzc1IC8qIFdLQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUzMjE1OTU0MURCQUU3
MUQwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM1
RUVCOUUxMjc3NjFBQzAwMzMyMkI4IC8qIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTkzNUVFQkEwMTI3NzYxQUMwMDMzMjJCOCAvKiBXS0J1bmRsZUJhY2tG
b3J3YXJkTGlzdEl0ZW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGQTJENzcxNTIxMkUyNjAw
QzFCQTBCIC8qIFdLQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtOTczMiw2ICs5Nzk3LDcgQEAKIAkJCQlCQ0I5RTI0QzExMjBFMTVDMDBBMTM3RTAgLyogV0tD
b250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRTUyRjk3MTkyMDI2MzMwMEExRkEzNyAv
KiBXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxQTU1
NUY1MTI4QzZDNDcwMDlBQkNFQyAvKiBXS0NvbnRleHRNZW51SXRlbS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlBMUQ0MjA0NzFEQjU1Nzg1MDBCQjZCMEQgLyogV0tDb250ZXh0TWVudUxpc3RlbmVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlGQjVGMzk0MTY5RTZBODAwMDJDMjVCRiAvKiBXS0Nv
bnRleHRQcml2YXRlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzMwOTM0NUExMzE1Qjk5ODAw
OTdBN0JDIC8qIFdLQ29va2llTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTJGNThG
OTEyQTg4QTU0MDA2Mjk1MzAgLyogV0tDcmVkZW50aWFsLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
OTc2NCwxNCArOTgzMCwxMiBAQAogCQkJCUUxQUVBMjMwMTQ2ODdCREIwMDgwNDU2OSAvKiBXS0Z1
bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQlDRENBODVDODEz
MkFCQTRFMDBFOTYxREYgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDNTRDQzEzMTJENjc0RUUwMDVDNjdCMCAvKiBXS0dlb2xvY2F0aW9uTWFu
YWdlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMUVBMDIzRjFEQUMzMURCMDA5NjAyMUYgLyog
V2ViQ29udGV4dE1lbnVMaXN0ZW5lclByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMDZG
NDRGMTJEQkRGM0YwMDJENzhERSAvKiBXS0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwRTYxOTkxMkQ2Q0QxMjAwMTJBNzJBIC8qIFdLR2VvbG9j
YXRpb25Qb3NpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkNCNEU1MDE4QkJFMDQ0MDAw
RkNGQzkgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZDQjRFNTExOEJCRTA0NDAwMEZDRkM5IC8qIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPU09iakNT
ZWN1cml0eU9yaWdpbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGMTc0QUE3MTQyQUFDNjEwMDM5
MjUwRiAvKiBXS0dlb21ldHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI2MkU3MzEwMTQzMDQ3
QTYwMDY5RUMzNSAvKiBXS0hpdFRlc3RSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJODNF
RTU3NUIxREI3RDYxMTAwQzc0QzUwIC8qIFdlYlZhbGlkYXRpb25NZXNzYWdlQ2xpZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTUxMTBBRTBDMTMzQzE2Q0IwMDcyNzE3QSAvKiBXS0ljb25EYXRh
YmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTIzQ0YxQjEzM0QyNjBBMDA1NkY4MDAgLyog
V0tJY29uRGF0YWJhc2VDRy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0NGNkFDMjEyQzkxRjM0
MDA4RjlDMzUgLyogV0tJbWFnZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL2NvbmZpZy5oIGIvU291cmNlL1dlYktpdDIvY29uZmlnLmgKaW5kZXggNzBjZjUw
YjZmYTRjNDdlZGFlMWY4NjA4ZTYyNTc2OGIyOWU0YmQ2My4uY2E1ODBjNDllZjc1MDc1OTc3Y2Q1
NTM0MjZjOWVhYmEwNTFmYWIwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvY29uZmlnLmgK
KysrIGIvU291cmNlL1dlYktpdDIvY29uZmlnLmgKQEAgLTExMCw2ICsxMTAsMTIgQEAKICNlbmRp
ZgogI2VuZGlmCiAKKyNpZm5kZWYgRU5BQkxFX05FVFdPUktfQ0FQVFVSRQorI2lmIFVTRShORVRX
T1JLX1NFU1NJT04pICYmIFBMQVRGT1JNKENPQ09BKQorI2RlZmluZSBFTkFCTEVfTkVUV09SS19D
QVBUVVJFIDEKKyNlbmRpZgorI2VuZGlmCisKICNpZm5kZWYgRU5BQkxFX05FVFdPUktfQ0FDSEVf
U1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpICYmIChQ
TEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKSkKICNkZWZpbmUgRU5BQkxFX05FVFdPUktf
Q0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OIDEK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295212</attachid>
            <date>2016-11-18 16:19:42 -0800</date>
            <delta_ts>2016-11-30 16:16:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164527-20161118161935.patch</filename>
            <type>text/plain</type>
            <size>138155</size>
            <attacher name="Keith Rollin">krollin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4OTAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDg5YjNiNDFiNDczNzIx
OTVjNTBjZjk3MzRlN2FjNjYwODc5ZGNmYi4uZmY1NGYxYzBhYTI1MjUxNGZjM2Y4NjE2ZjJjOTgz
YmRmOWNhOGQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE2LTExLTE2ICBLZWl0
aCBSb2xsaW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KKworICAgICAgICBOZXR3b3JrIGV2ZW50IHJl
Y29yZC9yZXBsYXkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NDUyNworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjkxNjgxNTc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhwb3J0IHBhcnNlVVJMRW5j
b2RlZEZvcm0uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0tIG5vIGZ1bmN0aW9uYWxpdHkgYWRk
ZWQsIGNoYW5nZWQsIG9yIHJlbW92ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9VUkxQYXJzZXIu
aDoKKwogMjAxNi0xMS0xNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFN1cHBvcnQgSUROMjAwOCB3aXRoIFVUUyAjNDYgaW5zdGVhZCBvZiBJ
RE4yMDAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggM2FmMjE3OTJjNmE2ZjM5ZWQyNmFkOWI5OTJkMzhhZDUzMTFk
NmMyMy4uYjMwZGI0YzY1ZWZiYzQ2NmJmNGMzZGM3NzkxZGM0ODZjNjU1N2YyNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEzMSBAQAorMjAxNi0xMS0xNiAgS2VpdGggUm9sbGluICA8a3JvbGxpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgTmV0d29yayBldmVudCByZWNvcmQvcmVwbGF5CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ1MjcKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI5MTY4MTU3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCBXZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvKiBm
b3IgcmVjb3JkaW5nIHRoZSBuZXR3b3JrIGV2ZW50cworICAgICAgICB0aGF0IG9jY3VyIHdoZW4g
bG9hZGluZyBhIHBhZ2UgYW5kIGZvciByZXBsYXlpbmcgdGhlbSBsYXRlci4gVXBkYXRlCisgICAg
ICAgIE5ldHdvcmtMb2FkIHRvIGludm9rZSBjYXB0dXJlIGZhY2lsaXRpZXMuIEFkZCBwcmVmZXJl
bmNlcyBmb3IgZW5hYmxpbmcKKyAgICAgICAgcmVjb3JkIG9yIHJlcGxheS4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6Ok5ldHdvcmtMb2FkKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0xvYWQ6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrTG9hZDo6Y29udGludWVXaWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrTG9hZDo6c2hhcmVkV2lsbFNlbmRSZWRpcmVjdGVkUmVxdWVzdCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtMb2FkOjpub3RpZnlEaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrTG9hZDo6ZGlkQ29tcGxldGVXaXRoRXJyb3IpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL05ldHdvcmtMb2FkLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5l
dHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnRlcm1pbmF0
ZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVyczo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJl
L05ldHdvcmtDYXB0dXJlQ2FjaGVkUmVzb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhcHR1cmU6OkNhY2hlZFJlc291cmNlOjpDYWNoZWRSZXNvdXJjZSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpDYWNoZWRSZXNvdXJjZTo6fkNhY2hlZFJlc291
cmNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkNhY2hlZFJlc291cmNlOjp1
cmwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6Q2FjaGVkUmVzb3VyY2U6OmJh
c2VVUkwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6Q2FjaGVkUmVzb3VyY2U6
OnF1ZXJ5UGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpDYWNo
ZWRSZXNvdXJjZTo6ZXZlbnRTdHJlYW0pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVy
ZTo6Q2FjaGVkUmVzb3VyY2U6OkV2ZW50U3RyZWFtOjpFdmVudFN0cmVhbSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpDYWNoZWRSZXNvdXJjZTo6RXZlbnRTdHJlYW06Om5leHRF
dmVudCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpDYWNoZWRSZXNvdXJjZTo6
RXZlbnRTdHJlYW06Om1ha2VEZWNvZGVyKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0
dXJlL05ldHdvcmtDYXB0dXJlQ2FjaGVkUmVzb3VyY2UuaDogQWRkZWQuCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcDogQWRkZWQuCisgICAg
ICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8Q2FwdHVyZVRpbWVUeXBlPjo6ZW5jb2RlKToKKyAgICAg
ICAgKElQQzo6QXJndW1lbnRDb2RlcjxDYXB0dXJlVGltZVR5cGU+OjpkZWNvZGUpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6d3JhcCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYXB0dXJlOjpSZXF1ZXN0U2VudEV2ZW50OjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FwdHVyZTo6UmVxdWVzdFNlbnRFdmVudDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhcHR1cmU6OlJlc3BvbnNlUmVjZWl2ZWRFdmVudDo6ZW5jb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlc3BvbnNlUmVjZWl2ZWRFdmVudDo6ZGVjb2Rl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlZGlyZWN0UmVjZWl2ZWRFdmVu
dDo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlZGlyZWN0UmVj
ZWl2ZWRFdmVudDo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJl
ZGlyZWN0U2VudEV2ZW50OjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVy
ZTo6UmVkaXJlY3RTZW50RXZlbnQ6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YXB0dXJlOjpEYXRhUmVjZWl2ZWRFdmVudDo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhcHR1cmU6OkRhdGFSZWNlaXZlZEV2ZW50OjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FwdHVyZTo6RmluaXNoZWRFdmVudDo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhcHR1cmU6OkZpbmlzaGVkRXZlbnQ6OmRlY29kZSk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50Lmg6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6VGltZWRFdmVudDo6VGltZWRFdmVudCk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaDogQWRk
ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZU1hbmFn
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6
OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpp
bml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OnRl
cm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpmaW5k
TWF0Y2gpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6ZmluZEV4
YWN0TWF0Y2gpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6Zmlu
ZEJlc3RGdXp6eU1hdGNoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFn
ZXI6OmZ1enp5TWF0Y2hVUkxzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1h
bmFnZXI6OmxvYWRDYWNoZWRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fw
dHVyZTo6TWFuYWdlcjo6cmVwb3J0TG9hZFBhdGgpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FwdHVyZTo6TWFuYWdlcjo6cmVwb3J0UmVjb3JkUGF0aCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpyZXBvcnRSZXBsYXlQYXRoKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OnJlcXVlc3RUb1BhdGgpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6c3RyaW5nVG9IYXNoKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6Omhhc2hUb1BhdGgpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6bG9nUmVjb3JkZWRSZXNvdXJjZSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpsb2dMb2FkZWRSZXNvdXJjZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpsb2dQbGF5ZWRCYWNr
UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6ZW5z
dXJlRmlsZUhhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2Vy
OjpvcGVuQ2FjaGVGaWxlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFn
ZXI6OnJlYWRGaWxlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6
OmdldExpbmUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6Z2V0
V29yZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpwcmludFRv
RmlsZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpiYXNlVVJM
QXNTdHJpbmcpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1
cmVNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFu
YWdlcjo6aXNSZWNvcmRpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFu
YWdlcjo6aXNSZXBsYXlpbmcpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0
d29ya0NhcHR1cmVSZWNvcmRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FwdHVyZTo6UmVjb3JkZXI6OnJlY29yZFJlcXVlc3RTZW50KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhcHR1cmU6OlJlY29yZGVyOjpyZWNvcmRSZXNwb25zZVJlY2VpdmVkKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlY29yZGVyOjpyZWNvcmRSZWRpcmVjdFJlY2Vp
dmVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlY29yZGVyOjpyZWNvcmRS
ZWRpcmVjdFNlbnQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVjb3JkZXI6
OnJlY29yZERhdGFSZWNlaXZlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpS
ZWNvcmRlcjo6cmVjb3JkRmluaXNoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6
OlJlY29yZGVyOjp3cml0ZUV2ZW50cyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJl
OjpSZWNvcmRlcjo6b3BlbkZpbGVGb3JSZXF1ZXN0KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVjb3JkZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZWNvcmRlcjo6cmVjb3JkRXZlbnQpOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXBsYXllci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVwbGF5ZXI6OlJlcGxheWVyKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlcGxheWVyOjpyZXBsYXlSZXNvdXJjZSk6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlcGxheWVy
Lmg6IEFkZGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1
cmVUeXBlcy5oOiBBZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdv
cmtEYXRhVGFza1JlcGxheS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fw
dHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5OjpOZXR3b3JrRGF0YVRhc2tSZXBsYXkpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5Ojp+TmV0
d29ya0RhdGFUYXNrUmVwbGF5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5l
dHdvcmtEYXRhVGFza1JlcGxheTo6cmVzdW1lKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
cHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxheTo6c3VzcGVuZCk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYXB0dXJlOjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmNhbmNlbCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmNvbXBsZXRl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxh
eTo6aW52YWxpZGF0ZUFuZENhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJl
OjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmVucXVldWVDYWNoZWRFdmVudEhhbmRsZXIpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5OjpyZXBs
YXlSZXF1ZXN0U2VudCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpOZXR3b3Jr
RGF0YVRhc2tSZXBsYXk6OnJlcGxheVJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5OjpyZXBsYXlSZWRpcmVjdFJl
Y2VpdmVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFz
a1JlcGxheTo6cmVwbGF5UmVkaXJlY3RTZW50KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
cHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxheTo6cmVwbGF5RGF0YVJlY2VpdmVkKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxheTo6cmVwbGF5
RmluaXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFU
YXNrUmVwbGF5OjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5OjpkaWRGaW5pc2gpOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0RhdGFUYXNrUmVwbGF5Lmg6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5OjpjcmVh
dGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29y
a1Byb2Nlc3MpOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBjb25maWcuaDoKKwogMjAxNi0xMS0xNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3Mg
IDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgRG93bmxvYWRzIHN0YXJ0ZWQgYnkgY29u
dGV4dCBtZW51IGFjdGlvbnMgc2hvdWxkIGFsc28gaGF2ZSBhIHdlYiB2aWV3IGFzc29jaWF0ZWQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmgKaW5kZXggYmI1ZTkyYmRhNzZlZDc1M2QzZTAw
ZWY1NDBiMTZhYzM4ZGQ3NGRhMC4uYmIzNmQ2Y2UzZWQzMjIyYmFmN2M4Mjk1MGUyM2JiZjVmNjcx
NWE2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmgKQEAgLTQ3LDcgKzQ3LDcgQEAg
cHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldEVuYWJsZWQoYm9vbCk7
CiAgICAgCiAgICAgdHlwZWRlZiBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gVVJM
RW5jb2RlZEZvcm07Ci0gICAgc3RhdGljIFVSTEVuY29kZWRGb3JtIHBhcnNlVVJMRW5jb2RlZEZv
cm0oU3RyaW5nVmlldyk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFVSTEVuY29kZWRGb3Jt
IHBhcnNlVVJMRW5jb2RlZEZvcm0oU3RyaW5nVmlldyk7CiAgICAgc3RhdGljIFN0cmluZyBzZXJp
YWxpemUoY29uc3QgVVJMRW5jb2RlZEZvcm0mKTsKIAogICAgIHN0YXRpYyBjb25zdCBVSUROQSYg
aW50ZXJuYXRpb25hbERvbWFpbk5hbWVUcmFuc2NvZGVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IDg3MjY2OGUwYjFlYWQyNGZjMTIwZmEwOTcyY2NkYzZkMzJkYjEyNjkuLjUwMWQ3YjYyOTg2
YzMwNDdkNWFmNjNjN2VkMWRmOTUwYmRhY2Y0N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC0y
MDQsNiArMjA0LDEzIEBAIHNldChOZXR3b3JrUHJvY2Vzc19DT01NT05fU09VUkNFUwogICAgIE5l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcAogICAg
IE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0YXRpc3RpY3MuY3BwCiAgICAgTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RvcmFnZS5jcHAKKworICAgIE5ldHdvcmtQ
cm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5jcHAKKyAgICBOZXR3
b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuY3BwCisgICAgTmV0d29ya1By
b2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZU1hbmFnZXIuY3BwCisgICAgTmV0d29ya1Byb2Nl
c3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmNwcAorICAgIE5ldHdvcmtQcm9jZXNz
L2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXBsYXllci5jcHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9j
YXB0dXJlL05ldHdvcmtEYXRhVGFza1JlcGxheS5jcHAKICkKIAogc2V0KFdlYktpdDJfU09VUkNF
UwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQu
Y3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCmluZGV4
IDUxN2Y4NDVhYWJlNTIzZjJlZmE5NjE4NGVlZjcyNTNhZTJjYTRkOWYuLjE0MzdmYjlhODczMjM3
ODU1ZTYzZWNiOWVjMmMxNjkzY2I5NDg1YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKQEAgLTQzLDYgKzQzLDEyIEBACiAjaW5jbHVkZSAiTmV0
d29ya0RhdGFUYXNrQ29jb2EuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVS
RSkKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJOZXR3b3Jr
Q2FwdHVyZVJlY29yZGVyLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVSZXBsYXllci5oIgor
I2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
QEAgLTY3LDkgKzczLDMzIEBAIE5ldHdvcmtMb2FkOjpOZXR3b3JrTG9hZChOZXR3b3JrTG9hZENs
aWVudCYgY2xpZW50LCBOZXR3b3JrTG9hZFBhcmFtZXRlcnMmJiBwYXJhCiAgICAgLCBtX3BhcmFt
ZXRlcnMoV1RGTW92ZShwYXJhbWV0ZXJzKSkKICAgICAsIG1fY3VycmVudFJlcXVlc3QobV9wYXJh
bWV0ZXJzLnJlcXVlc3QpCiB7CisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyAgICBpZiAo
bV9wYXJhbWV0ZXJzLnJlcXVlc3QudXJsKCkucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKSB7Cisg
ICAgICAgIGlmIChOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6c2luZ2xldG9uKCkuaXNSZWNvcmRp
bmcoKSkgeworICAgICAgICAgICAgbV9yZWNvcmRlciA9IHN0ZDo6bWFrZV91bmlxdWU8TmV0d29y
a0NhcHR1cmU6OlJlY29yZGVyPigpOworICAgICAgICB9IGVsc2UgaWYgKE5ldHdvcmtDYXB0dXJl
OjpNYW5hZ2VyOjpzaW5nbGV0b24oKS5pc1JlcGxheWluZygpKSB7CisgICAgICAgICAgICAvLyBU
T0RPOiBUaGUgcGFyYWxsZWwgb2YgY3JlYXRpbmcgYW4gbV9yZWNvcmRlciAoYXMgYWJvdmUpIGlz
IHRvCisgICAgICAgICAgICAvLyBjcmVhdGUgYW4gbV9yZXBsYXllciAoYXMgYmVsb3cpLiBIb3dl
dmVyLCB3ZSBkb24ndCByZWFsbHkgdXNlCisgICAgICAgICAgICAvLyB0aGUgcmVwbGF5ZXIgZXhj
ZXB0IHRvIGNyZWF0ZSB0aGUgTmV0d29ya0RhdGFUYXNrUmVwbGF5ZXIKKyAgICAgICAgICAgIC8v
IGluc3RhbmNlLiBJZiB0aGF0J3MgYWxsIHdlIG5lZWQsIG1heWJlIHdlIHNob3VsZCByZW1vdmUg
dGhlCisgICAgICAgICAgICAvLyByZXBsYXllciBhbmQgcHV0IHRoZSBjcmVhdGlvbiBvZiB0aGUg
dGFzayBpbgorICAgICAgICAgICAgLy8gTmV0d29ya0RhdGFUYXNrOjpjcmVhdGUuCisgICAgICAg
ICAgICBtX3JlcGxheWVyID0gc3RkOjptYWtlX3VuaXF1ZTxOZXR3b3JrQ2FwdHVyZTo6UmVwbGF5
ZXI+KCk7CisgICAgICAgICAgICBtX3Rhc2sgPSBtX3JlcGxheWVyLT5yZXBsYXlSZXNvdXJjZShu
ZXR3b3JrU2Vzc2lvbiwgKnRoaXMsIG1fcGFyYW1ldGVycyk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoIW1fdGFzaykKKyNlbmRpZgorCiAgICAgbV90YXNrID0gTmV0d29ya0RhdGFUYXNr
OjpjcmVhdGUobmV0d29ya1Nlc3Npb24sICp0aGlzLCBtX3BhcmFtZXRlcnMpOwotICAgIGlmICgh
bV9wYXJhbWV0ZXJzLmRlZmVyc0xvYWRpbmcpCisgICAgaWYgKCFtX3BhcmFtZXRlcnMuZGVmZXJz
TG9hZGluZykgewogICAgICAgICBtX3Rhc2stPnJlc3VtZSgpOworI2lmIEVOQUJMRShORVRXT1JL
X0NBUFRVUkUpCisgICAgICAgIGlmIChtX3JlY29yZGVyKQorICAgICAgICAgICAgbV9yZWNvcmRl
ci0+cmVjb3JkUmVxdWVzdFNlbnQobV9wYXJhbWV0ZXJzLnJlcXVlc3QpOworI2VuZGlmCisgICAg
fQogfQogCiAjZWxzZQpAQCAtMTEzLDggKzE0MywxMyBAQCB2b2lkIE5ldHdvcmtMb2FkOjpzZXRE
ZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQogICAgIGlmIChtX3Rhc2spIHsKICAgICAgICAgaWYg
KGRlZmVycykKICAgICAgICAgICAgIG1fdGFzay0+c3VzcGVuZCgpOwotICAgICAgICBlbHNlCisg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgbV90YXNrLT5yZXN1bWUoKTsKKyNpZiBFTkFCTEUo
TkVUV09SS19DQVBUVVJFKQorICAgICAgICAgICAgaWYgKG1fcmVjb3JkZXIpCisgICAgICAgICAg
ICAgICAgbV9yZWNvcmRlci0+cmVjb3JkUmVxdWVzdFNlbnQobV9wYXJhbWV0ZXJzLnJlcXVlc3Qp
OworI2VuZGlmCisgICAgICAgIH0KICAgICB9CiAjZWxzZQogICAgIGlmIChtX2hhbmRsZSkKQEAg
LTE0Miw2ICsxNzcsMTEgQEAgdm9pZCBOZXR3b3JrTG9hZDo6Y29udGludWVXaWxsU2VuZFJlcXVl
c3QoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgbmV3UmVxdWVzdCkKICAgICBtX2N1cnJlbnRS
ZXF1ZXN0LnVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRQcm9wZXJ0aWVzKG5ld1JlcXVl
c3QpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorICAgIGlmIChtX3Jl
Y29yZGVyKQorICAgICAgICBtX3JlY29yZGVyLT5yZWNvcmRSZWRpcmVjdFNlbnQobmV3UmVxdWVz
dCk7CisjZW5kaWYKKwogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAgICAgYXV0byByZWRpcmVj
dENvbXBsZXRpb25IYW5kbGVyID0gc3RkOjpleGNoYW5nZShtX3JlZGlyZWN0Q29tcGxldGlvbkhh
bmRsZXIsIG51bGxwdHIpOwogICAgIEFTU0VSVChyZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyKTsK
QEAgLTE5NCw2ICsyMzQsMTEgQEAgdm9pZCBOZXR3b3JrTG9hZDo6c2hhcmVkV2lsbFNlbmRSZWRp
cmVjdGVkUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBSZXMKICAgICBBU1NFUlQo
IXJlZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCkpOwogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CiAKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorICAgIGlmIChtX3JlY29yZGVyKQor
ICAgICAgICBtX3JlY29yZGVyLT5yZWNvcmRSZWRpcmVjdFJlY2VpdmVkKHJlcXVlc3QsIHJlZGly
ZWN0UmVzcG9uc2UpOworI2VuZGlmCisKICAgICBhdXRvIG9sZFJlcXVlc3QgPSBXVEZNb3ZlKG1f
Y3VycmVudFJlcXVlc3QpOwogICAgIG1fY3VycmVudFJlcXVlc3QgPSByZXF1ZXN0OwogICAgIG1f
Y2xpZW50LmdldCgpLndpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoV1RGTW92ZShvbGRSZXF1ZXN0
KSwgV1RGTW92ZShyZXF1ZXN0KSwgV1RGTW92ZShyZWRpcmVjdFJlc3BvbnNlKSk7CkBAIC0zMjQs
NiArMzY5LDExIEBAIHZvaWQgTmV0d29ya0xvYWQ6Om5vdGlmeURpZFJlY2VpdmVSZXNwb25zZShS
ZXNvdXJjZVJlc3BvbnNlJiYgcmVzcG9uc2UsIFJlc3BvbnNlCiB7CiAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKIAorI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisgICAgaWYgKG1fcmVj
b3JkZXIpCisgICAgICAgIG1fcmVjb3JkZXItPnJlY29yZFJlc3BvbnNlUmVjZWl2ZWQocmVzcG9u
c2UpOworI2VuZGlmCisKICAgICBpZiAoc2hhcmVkRGlkUmVjZWl2ZVJlc3BvbnNlKFdURk1vdmUo
cmVzcG9uc2UpKSA9PSBOZXR3b3JrTG9hZENsaWVudDo6U2hvdWxkQ29udGludWVEaWRSZWNlaXZl
UmVzcG9uc2U6Ok5vKSB7CiAgICAgICAgIG1fcmVzcG9uc2VDb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpOwogICAgICAgICByZXR1cm47CkBAIC0zMzUsNiArMzg1
LDExIEBAIHZvaWQgTmV0d29ya0xvYWQ6OmRpZFJlY2VpdmVEYXRhKFJlZjxTaGFyZWRCdWZmZXI+
JiYgYnVmZmVyKQogewogICAgIEFTU0VSVCghbV90aHJvdHRsZSk7CiAKKyNpZiBFTkFCTEUoTkVU
V09SS19DQVBUVVJFKQorICAgIGlmIChtX3JlY29yZGVyKQorICAgICAgICBtX3JlY29yZGVyLT5y
ZWNvcmREYXRhUmVjZWl2ZWQoYnVmZmVyLmdldCgpKTsKKyNlbmRpZgorCiAgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGJlIHRoZSBlbmNvZGVkIGRhdGEgbGVuZ3RoLCBub3QgdGhlIGRlY29kZWQg
ZGF0YSBsZW5ndGguCiAgICAgYXV0byBzaXplID0gYnVmZmVyLT5zaXplKCk7CiAgICAgbV9jbGll
bnQuZ2V0KCkuZGlkUmVjZWl2ZUJ1ZmZlcihXVEZNb3ZlKGJ1ZmZlciksIHNpemUpOwpAQCAtMzQ0
LDYgKzM5OSwxMSBAQCB2b2lkIE5ldHdvcmtMb2FkOjpkaWRDb21wbGV0ZVdpdGhFcnJvcihjb25z
dCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKICAgICBBU1NFUlQoIW1fdGhyb3R0bGUpOwogCisj
aWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyAgICBpZiAobV9yZWNvcmRlcikKKyAgICAgICAg
bV9yZWNvcmRlci0+cmVjb3JkRmluaXNoKGVycm9yKTsKKyNlbmRpZgorCiAgICAgaWYgKGVycm9y
LmlzTnVsbCgpKQogICAgICAgICBtX2NsaWVudC5nZXQoKS5kaWRGaW5pc2hMb2FkaW5nKFdURjo6
bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmggYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5oCmluZGV4IDdkMTRjOGMyYWE2MzgzNmE3MDFk
ZDE0YjJjNzg3M2Q1OGYzMmRlMDMuLmJiNDcwOWJmMWQxMTMwYzMxODI1ZDMyN2JmYWQ2NzJiY2U3
MjI1ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtM
b2FkLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaApA
QCAtMzgsNiArMzgsMTEgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlLmg+CiAjZW5kaWYKIAorI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisjaW5jbHVkZSAi
TmV0d29ya0NhcHR1cmVSZWNvcmRlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlUmVwbGF5
ZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTmV0d29ya0xvYWQg
ZmluYWwgOgpAQCAtMTUxLDYgKzE1NiwxMSBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsgLy8gVXBkYXRlZCBvbiByZWRp
cmVjdHMuCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorICAgIHN0ZDo6dW5pcXVlX3B0
cjxOZXR3b3JrQ2FwdHVyZTo6UmVjb3JkZXI+IG1fcmVjb3JkZXI7CisgICAgc3RkOjp1bmlxdWVf
cHRyPE5ldHdvcmtDYXB0dXJlOjpSZXBsYXllcj4gbV9yZXBsYXllcjsKKyNlbmRpZgogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggNjFmOTg3NjYwOWI2ZDcwYThmNmUxYzA3OTU3ZmI4
NTk2MzgyMTg4Mi4uMGJlNTNiNzk0ZjE3MWFjMjFjNmE5NmMxNGQ3MWE3YzEzMGI2ZmU1NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApA
QCAtNzQsNiArNzQsMTAgQEAKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKICNlbmRp
ZgogCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVy
ZU1hbmFnZXIuaCIKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiTmV0
d29ya1Nlc3Npb25Db2NvYS5oIgogI2VuZGlmCkBAIC0yMjIsNiArMjI2LDEzIEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycyYmCiAgICAgICAgIG1lbW9yeVByZXNzdXJlSGFuZGxlci5pbnN0YWxsKCk7
CiAgICAgfQogCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyAgICBOZXR3b3JrQ2FwdHVy
ZTo6TWFuYWdlcjo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZSgKKyAgICAgICAgcGFyYW1ldGVycy5z
aG91bGRSZWNvcmROZXR3b3JrUmVxdWVzdHMsCisgICAgICAgIHBhcmFtZXRlcnMuc2hvdWxkUmVw
bGF5TmV0d29ya1JlcXVlc3RzLAorICAgICAgICBwYXJhbWV0ZXJzLnJlY29yZFJlcGxheUNhY2hl
TG9jYXRpb24pOworI2VuZGlmCisKICAgICBtX2Rpc2tDYWNoZUlzRGlzYWJsZWRGb3JUZXN0aW5n
ID0gcGFyYW1ldGVycy5zaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb247CiAKICAgICBtX2Rp
c2tDYWNoZVNpemVPdmVycmlkZSA9IHBhcmFtZXRlcnMuZGlza0NhY2hlU2l6ZU92ZXJyaWRlOwpA
QCAtNTk2LDYgKzYwNywxMCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpsb2dEaWFnbm9zdGljTWVz
c2FnZVdpdGhWYWx1ZSh1aW50NjRfdCB3ZWJQYWdlSUQsIGNvbnN0IFN0cgogCiB2b2lkIE5ldHdv
cmtQcm9jZXNzOjp0ZXJtaW5hdGUoKQogeworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisg
ICAgTmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OnNpbmdsZXRvbigpLnRlcm1pbmF0ZSgpOworI2Vu
ZGlmCisKICAgICBwbGF0Zm9ybVRlcm1pbmF0ZSgpOwogICAgIENoaWxkUHJvY2Vzczo6dGVybWlu
YXRlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKaW5kZXggYmQ3YWI1
NDhiOWM0NTc0ZDI0MWY0NzdkOWM4OTc3YzJhNGMyZDdjMS4uMmU0MGQxMmEwNTY4NDQ4OTk2NDVi
MDA0NjNiOTA0ODcwNTJhNzgxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNw
cApAQCAtOTMsNiArOTMsMTEgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
czo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICNpZiBPUyhMSU5VWCkKICAg
ICBlbmNvZGVyIDw8IG1lbW9yeVByZXNzdXJlTW9uaXRvckhhbmRsZTsKICNlbmRpZgorI2lmIEVO
QUJMRShORVRXT1JLX0NBUFRVUkUpCisgICAgZW5jb2RlciA8PCBzaG91bGRSZWNvcmROZXR3b3Jr
UmVxdWVzdHM7CisgICAgZW5jb2RlciA8PCBzaG91bGRSZXBsYXlOZXR3b3JrUmVxdWVzdHM7Cisg
ICAgZW5jb2RlciA8PCByZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uOworI2VuZGlmCiB9CiAKIGJv
b2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXIm
IGRlY29kZXIsIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiByZXN1bHQpCkBAIC0x
ODgsNiArMTkzLDE1IEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRl
Y29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIE5ldHdvcmtQcm9jCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICNlbmRpZgogCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5zaG91bGRSZWNvcmROZXR3b3JrUmVxdWVzdHMpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2hvdWxkUmVw
bGF5TmV0d29ya1JlcXVlc3RzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUocmVzdWx0LnJlY29yZFJlcGxheUNhY2hlTG9jYXRpb24pKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYKKwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMuaAppbmRleCBmNDU2OWM5NDY5YTU3NzJlNjBiMWM5YmZmNTYwODVk
M2FjYjQzYzNkLi4xNDVlMGYzMWE1ZDI3NDQ3NjVmMmEzZWI3YzM5YTRjYTlhZWQ1MDdjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKQEAgLTEwNiw2ICsxMDYsMTIgQEAgc3RydWN0
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICNpZiBPUyhMSU5VWCkKICAgICBJ
UEM6OkF0dGFjaG1lbnQgbWVtb3J5UHJlc3N1cmVNb25pdG9ySGFuZGxlOwogI2VuZGlmCisKKyNp
ZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorICAgIGJvb2wgc2hvdWxkUmVjb3JkTmV0d29ya1Jl
cXVlc3RzIHsgZmFsc2UgfTsKKyAgICBib29sIHNob3VsZFJlcGxheU5ldHdvcmtSZXF1ZXN0cyB7
IGZhbHNlIH07CisgICAgU3RyaW5nIHJlY29yZFJlcGxheUNhY2hlTG9jYXRpb247CisjZW5kaWYK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUNhY2hlZFJlc291cmNlLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVDYWNo
ZWRSZXNvdXJjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDE2MWQzM2Q4ZDE2ZTRhZDg3MTQyZTQ1YWVkMDE5
NGRlZjgxNzg0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5jcHAKQEAgLTAsMCArMSwx
NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29y
a0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5oIgorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkK
KworI2luY2x1ZGUgIkF0dGFjaG1lbnQuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZUxvZ2dp
bmcuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCIKKworbmFtZXNwYWNlIFdl
YktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgeworCitDYWNoZWRSZXNvdXJjZTo6Q2Fj
aGVkUmVzb3VyY2UoY29uc3QgU3RyaW5nJiBldmVudEZpbGVQYXRoKQorICAgIDogbV9ldmVudEZp
bGVQYXRoKGV2ZW50RmlsZVBhdGgpCit7Cit9CisKK0NhY2hlZFJlc291cmNlOjp+Q2FjaGVkUmVz
b3VyY2UoKQoreworfQorCitjb25zdCBXZWJDb3JlOjpVUkwmIENhY2hlZFJlc291cmNlOjp1cmwo
KQoreworICAgIGlmICghbV9oYXZlVVJMKSB7CisgICAgICAgIGF1dG8gZXZlbnRzID0gZXZlbnRT
dHJlYW0oKTsKKyAgICAgICAgYXV0byBldmVudCA9IGV2ZW50cy5uZXh0RXZlbnQoKTsKKyAgICAg
ICAgaWYgKCFldmVudCkKKyAgICAgICAgICAgIERFQlVHX0xPR19FUlJPUigiRXZlbnQgc3RyZWFt
IGRvZXMgbm90IGNvbnRhaW4gZXZlbnRzOiBmaWxlID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUiht
X2V2ZW50RmlsZVBhdGgpKTsKKyAgICAgICAgZWxzZSBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8UmVxdWVzdFNlbnRFdmVudD4oKmV2ZW50KSkKKyAgICAgICAgICAgIERFQlVHX0xPR19FUlJP
UigiRXZlbnQgc3RyZWFtIGRvZXMgbm90IGhhdmUgYSByZXF1ZXN0U2VudCBldmVudDogZmlsZSA9
ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9ldmVudEZpbGVQYXRoKSk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgY29uc3QgYXV0byYgcmVxdWVzdFNlbnRFdmVudCA9IFdURjo6Z2V0PFJl
cXVlc3RTZW50RXZlbnQ+KCpldmVudCk7CisgICAgICAgICAgICBtX3VybCA9IHJlcXVlc3RTZW50
RXZlbnQucmVxdWVzdC51cmwoKTsKKyAgICAgICAgICAgIG1faGF2ZVVSTCA9IHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbV91cmw7Cit9CisKK2NvbnN0IFdlYkNvcmU6OlVS
TCYgQ2FjaGVkUmVzb3VyY2U6OmJhc2VVUkwoKQoreworICAgIGlmICghbV9oYXZlQmFzZVVSTCkg
eworICAgICAgICBtX2hhdmVCYXNlVVJMID0gdHJ1ZTsKKyAgICAgICAgYXV0byBwYXRoU3RhcnQg
PSB1cmwoKS5wYXRoU3RhcnQoKTsKKyAgICAgICAgYXV0byBiYXNlVVJMU3RyID0gdXJsKCkuc3Ry
aW5nKCkubGVmdChwYXRoU3RhcnQpOworCisgICAgICAgIFdlYkNvcmU6OlVSTFBhcnNlciBwYXJz
ZXIoYmFzZVVSTFN0cik7CisgICAgICAgIG1fYmFzZVVSTCA9IHBhcnNlci5yZXN1bHQoKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gbV9iYXNlVVJMOworfQorCitXZWJDb3JlOjpVUkxQYXJzZXI6OlVS
TEVuY29kZWRGb3JtIENhY2hlZFJlc291cmNlOjpxdWVyeVBhcmFtZXRlcnMoKQoreworICAgIGlm
ICghbV9oYXZlUXVlcnlQYXJhbWV0ZXJzKSB7CisgICAgICAgIG1faGF2ZVF1ZXJ5UGFyYW1ldGVy
cyA9IHRydWU7CisgICAgICAgIG1fcXVlcnlQYXJhbWV0ZXJzID0gV2ViQ29yZTo6VVJMUGFyc2Vy
OjpwYXJzZVVSTEVuY29kZWRGb3JtKHVybCgpLnF1ZXJ5KCkpOworICAgIH0KKworICAgIHJldHVy
biBtX3F1ZXJ5UGFyYW1ldGVyczsKK30KKworQ2FjaGVkUmVzb3VyY2U6OkV2ZW50U3RyZWFtIENh
Y2hlZFJlc291cmNlOjpldmVudFN0cmVhbSgpCit7CisgICAgcmV0dXJuIEV2ZW50U3RyZWFtKG1f
ZXZlbnRGaWxlUGF0aCk7Cit9CisKK0NhY2hlZFJlc291cmNlOjpFdmVudFN0cmVhbTo6RXZlbnRT
dHJlYW0oY29uc3QgU3RyaW5nJiBldmVudEZpbGVQYXRoKQorICAgIDogbV9ldmVudEZpbGVQYXRo
KGV2ZW50RmlsZVBhdGgpCisgICAgLCBtX21hcHBlZEV2ZW50RmlsZShXZWJDb3JlOjpNYXBwZWRG
aWxlRGF0YShtX2V2ZW50RmlsZVBhdGgsIG1faGF2ZU1hcHBlZEV2ZW50RmlsZSkpCisgICAgLCBt
X2RlY29kZXIobWFrZURlY29kZXIoKSkKK3sKK30KKworV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZl
bnQ+IENhY2hlZFJlc291cmNlOjpFdmVudFN0cmVhbTo6bmV4dEV2ZW50KCkKK3sKKyAgICBpZiAo
IW1fZGVjb2Rlci5nZXQoKSkgeworICAgICAgICBERUJVR19MT0dfRVJST1IoIkFza2VkIHRvIHJl
dHVybiBhbiBldmVudCBmcm9tIGEgZmlsZSB3ZSBjb3VsZG4ndCBvcGVuOiBmaWxlID0gJXtwdWJs
aWN9cyIsIERFQlVHX1NUUihtX2V2ZW50RmlsZVBhdGgpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6
T3B0aW9uYWw8Q2FwdHVyZUV2ZW50PigpOworICAgIH0KKworICAgIHVpbnQ4X3QgZXZlbnRUeXBl
OworICAgIGlmICghbV9kZWNvZGVyLT5kZWNvZGUoZXZlbnRUeXBlKSkgeworICAgICAgICBERUJV
R19MT0dfRVJST1IoIlVuYWJsZSB0byByZWFkIGV2ZW50IHR5cGU6IGZpbGUgPSAle3B1YmxpY31z
IiwgREVCVUdfU1RSKG1fZXZlbnRGaWxlUGF0aCkpOworICAgICAgICByZXR1cm4gV1RGOjpPcHRp
b25hbDxDYXB0dXJlRXZlbnQ+KCk7CisgICAgfQorCisgICAgc3dpdGNoIChldmVudFR5cGUpIHsK
KyAgICBjYXNlIFJlcXVlc3RTZW50RXZlbnQ6OmtUeXBlOgorICAgICAgICByZXR1cm4gUmVxdWVz
dFNlbnRFdmVudDo6ZGVjb2RlKCptX2RlY29kZXIpOworICAgIGNhc2UgUmVzcG9uc2VSZWNlaXZl
ZEV2ZW50OjprVHlwZToKKyAgICAgICAgcmV0dXJuIFJlc3BvbnNlUmVjZWl2ZWRFdmVudDo6ZGVj
b2RlKCptX2RlY29kZXIpOworICAgIGNhc2UgUmVkaXJlY3RSZWNlaXZlZEV2ZW50OjprVHlwZToK
KyAgICAgICAgcmV0dXJuIFJlZGlyZWN0UmVjZWl2ZWRFdmVudDo6ZGVjb2RlKCptX2RlY29kZXIp
OworICAgIGNhc2UgUmVkaXJlY3RTZW50RXZlbnQ6OmtUeXBlOgorICAgICAgICByZXR1cm4gUmVk
aXJlY3RTZW50RXZlbnQ6OmRlY29kZSgqbV9kZWNvZGVyKTsKKyAgICBjYXNlIERhdGFSZWNlaXZl
ZEV2ZW50OjprVHlwZToKKyAgICAgICAgcmV0dXJuIERhdGFSZWNlaXZlZEV2ZW50OjpkZWNvZGUo
Km1fZGVjb2Rlcik7CisgICAgY2FzZSBGaW5pc2hlZEV2ZW50OjprVHlwZToKKyAgICAgICAgcmV0
dXJuIEZpbmlzaGVkRXZlbnQ6OmRlY29kZSgqbV9kZWNvZGVyKTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBERUJVR19MT0dfRVJST1IoIkV2ZW50IHN0cmVhbSBjb250YWlucyB1bmtub3duIGV2ZW50
ICglZCk6IGZpbGUgPSAle3B1YmxpY31zIiwgc3RhdGljX2Nhc3Q8aW50PihldmVudFR5cGUpLCBE
RUJVR19TVFIobV9ldmVudEZpbGVQYXRoKSk7CisgICAgICAgIHJldHVybiBXVEY6Ok9wdGlvbmFs
PENhcHR1cmVFdmVudD4oKTsKKyAgICB9Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJUEM6OkRlY29k
ZXI+IENhY2hlZFJlc291cmNlOjpFdmVudFN0cmVhbTo6bWFrZURlY29kZXIoKQoreworICAgIGlm
ICghbV9oYXZlTWFwcGVkRXZlbnRGaWxlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPElQQzo6RGVjb2Rlcj4oCisgICAgICAgIElQQzo6RGF0
YVJlZmVyZW5jZSgKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KG1fbWFwcGVkRXZlbnRGaWxlLmRhdGEoKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXpl
X3Q+KG1fbWFwcGVkRXZlbnRGaWxlLnNpemUoKSkpLAorICAgICAgICBWZWN0b3I8SVBDOjpBdHRh
Y2htZW50PigpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1
cmVDYWNoZWRSZXNvdXJjZS5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVy
ZS9OZXR3b3JrQ2FwdHVyZUNhY2hlZFJlc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGZkMTBiNzlhNmM5
NjI2OTQzNDZiMTkwYjAyMWJkZDg5NTAxZDUyMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJj
ZS5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShORVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCisjaW5j
bHVkZSAiRGVjb2Rlci5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlRXZlbnQuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VSTC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvVVJMUGFyc2VyLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisK
KyNpbmNsdWRlIDxtZW1vcnk+CisKK25hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIE5ldHdv
cmtDYXB0dXJlIHsKKworY2xhc3MgQ2FjaGVkUmVzb3VyY2UgeworcHVibGljOgorICAgIGNsYXNz
IEV2ZW50U3RyZWFtIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEV2ZW50U3RyZWFtKCkgPSBkZWZh
dWx0OworICAgICAgICBFdmVudFN0cmVhbShjb25zdCBTdHJpbmcmIGV2ZW50RmlsZVBhdGgpOwor
ICAgICAgICBFdmVudFN0cmVhbShFdmVudFN0cmVhbSYmKSA9IGRlZmF1bHQ7CisgICAgICAgIEV2
ZW50U3RyZWFtJiBvcGVyYXRvcj0oRXZlbnRTdHJlYW0mJiBvdGhlcikgPSBkZWZhdWx0OworCisg
ICAgICAgIFdURjo6T3B0aW9uYWw8Q2FwdHVyZUV2ZW50PiBuZXh0RXZlbnQoKTsKKworICAgIHBy
aXZhdGU6CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkRlY29kZXI+IG1ha2VEZWNvZGVy
KCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBTdHJpbmcgbV9ldmVudEZpbGVQYXRoOworICAg
ICAgICBib29sIG1faGF2ZU1hcHBlZEV2ZW50RmlsZSB7IGZhbHNlIH07CisgICAgICAgIFdlYkNv
cmU6Ok1hcHBlZEZpbGVEYXRhIG1fbWFwcGVkRXZlbnRGaWxlOworICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8SVBDOjpEZWNvZGVyPiBtX2RlY29kZXI7CisgICAgfTsKKworcHVibGljOgorICAgIENh
Y2hlZFJlc291cmNlKGNvbnN0IFN0cmluZyYgZXZlbnRGaWxlUGF0aCk7CisgICAgQ2FjaGVkUmVz
b3VyY2UoQ2FjaGVkUmVzb3VyY2UmJikgPSBkZWZhdWx0OworICAgIH5DYWNoZWRSZXNvdXJjZSgp
OworCisgICAgQ2FjaGVkUmVzb3VyY2UmIG9wZXJhdG9yPShjb25zdCBDYWNoZWRSZXNvdXJjZSYg
b3RoZXIpID0gZGVmYXVsdDsKKyAgICBDYWNoZWRSZXNvdXJjZSYgb3BlcmF0b3I9KENhY2hlZFJl
c291cmNlJiYgb3RoZXIpID0gZGVmYXVsdDsKKworICAgIGNvbnN0IFdlYkNvcmU6OlVSTCYgdXJs
KCk7CisgICAgY29uc3QgV2ViQ29yZTo6VVJMJiBiYXNlVVJMKCk7CisgICAgV2ViQ29yZTo6VVJM
UGFyc2VyOjpVUkxFbmNvZGVkRm9ybSBxdWVyeVBhcmFtZXRlcnMoKTsKKyAgICBFdmVudFN0cmVh
bSBldmVudFN0cmVhbSgpOworCitwcml2YXRlOgorICAgIFN0cmluZyBtX2V2ZW50RmlsZVBhdGg7
CisKKyAgICAvLyBMYXppbHkgY2FsY3VsYXRlZC4KKyAgICBXZWJDb3JlOjpVUkwgbV91cmw7Cisg
ICAgV2ViQ29yZTo6VVJMIG1fYmFzZVVSTDsKKyAgICBXZWJDb3JlOjpVUkxQYXJzZXI6OlVSTEVu
Y29kZWRGb3JtIG1fcXVlcnlQYXJhbWV0ZXJzOworCisgICAgYm9vbCBtX2hhdmVVUkwgeyBmYWxz
ZSB9OworICAgIGJvb2wgbV9oYXZlQmFzZVVSTCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhdmVR
dWVyeVBhcmFtZXRlcnMgeyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0Nh
cHR1cmUKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktf
Q0FQVFVSRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1
cmUvTmV0d29ya0NhcHR1cmVFdmVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM5N2M4ODJiNjYw
NmYzMWZlODYwM2NjOWZlMGY4MGRmOGQyMzIyMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuY3BwCkBA
IC0wLDAgKzEsMjAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIk5ldHdvcmtDYXB0dXJlRXZlbnQuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUp
CisKKyNpbmNsdWRlICJEYXRhUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiRGVjb2Rlci5oIgorI2lu
Y2x1ZGUgIkVuY29kZXIuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCIKKyNp
bmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKworbmFtZXNwYWNlIElQQyB7CisKK3Vz
aW5nIFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkNhcHR1cmVUaW1lVHlwZTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxDYXB0dXJlVGltZVR5cGU+IHsKKyAgICBzdGF0aWMgdm9p
ZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IENhcHR1cmVUaW1lVHlwZSYpOworICAgIHN0YXRpYyBi
b29sIGRlY29kZShEZWNvZGVyJiwgQ2FwdHVyZVRpbWVUeXBlJik7Cit9OworCit2b2lkIEFyZ3Vt
ZW50Q29kZXI8Q2FwdHVyZVRpbWVUeXBlPjo6ZW5jb2RlKElQQzo6RW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgQ2FwdHVyZVRpbWVUeXBlJiB0aW1lKQoreworICAgIGVuY29kZXIgPDwgdGltZS5zZWNv
bmRzU2luY2VFcG9jaCgpLnZhbHVlKCk7Cit9CisKK2Jvb2wgQXJndW1lbnRDb2RlcjxDYXB0dXJl
VGltZVR5cGU+OjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBDYXB0dXJlVGltZVR5cGUm
IHRpbWUpCit7CisgICAgZG91YmxlIHZhbHVlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFs
dWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB0aW1lID0gQ2FwdHVyZVRpbWVUeXBl
Ojpmcm9tUmF3U2Vjb25kcyh2YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIElQQworCituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FwdHVy
ZSB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIFdURjo6T3B0aW9uYWw8Q2FwdHVy
ZUV2ZW50PiB3cmFwKFQmJiBldmVudCkKK3sKKyAgICByZXR1cm4gV1RGOjpPcHRpb25hbDxDYXB0
dXJlRXZlbnQ+KENhcHR1cmVFdmVudChXVEZNb3ZlKGV2ZW50KSkpOworfQorCitib29sIFJlcXVl
c3RTZW50RXZlbnQ6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAg
ZW5jb2RlciA8PCB0aW1lOworICAgIGVuY29kZXIgPDwgcmVxdWVzdDsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+IFJlcXVlc3RTZW50RXZlbnQ6OmRl
Y29kZShJUEM6OkRlY29kZXImIGRlY29kZXIpCit7CisgICAgQ2FwdHVyZVRpbWVUeXBlIHRpbWU7
CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Q7CisKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHRpbWUpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShyZXF1ZXN0KSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6T3B0aW9uYWw8Q2FwdHVyZUV2ZW50PigpOworCisgICAgcmV0dXJu
IHdyYXAoUmVxdWVzdFNlbnRFdmVudChXVEZNb3ZlKHRpbWUpLCBXVEZNb3ZlKHJlcXVlc3QpKSk7
Cit9CisKK2Jvb2wgUmVzcG9uc2VSZWNlaXZlZEV2ZW50OjplbmNvZGUoSVBDOjpFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAoreworICAgIGVuY29kZXIgPDwgdGltZTsKKyAgICBlbmNvZGVyIDw8IHJl
c3BvbnNlOworICAgIHJldHVybiB0cnVlOworfQorCitXVEY6Ok9wdGlvbmFsPENhcHR1cmVFdmVu
dD4gUmVzcG9uc2VSZWNlaXZlZEV2ZW50OjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQor
eworICAgIENhcHR1cmVUaW1lVHlwZSB0aW1lOworICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UgcmVzcG9uc2U7CisKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHRpbWUpCisgICAgICAgIHx8
ICFkZWNvZGVyLmRlY29kZShyZXNwb25zZSkpCisgICAgICAgIHJldHVybiBXVEY6Ok9wdGlvbmFs
PENhcHR1cmVFdmVudD4oKTsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIC8vIEZvcmNlIHRo
ZSBjcmVhdGlvbiBvZiBuZWVkZWQgcGxhdGZvcm0tc3BlY2lmaWMgZGF0YSB0aGF0IG90aGVyd2lz
ZSBpcyBub3QgY3JlYXRlZC4KKyAgICAodm9pZCkgcmVzcG9uc2UubnNVUkxSZXNwb25zZSgpOwor
I2VuZGlmCisKKyAgICByZXR1cm4gd3JhcChSZXNwb25zZVJlY2VpdmVkRXZlbnQoV1RGTW92ZSh0
aW1lKSwgV1RGTW92ZShyZXNwb25zZSkpKTsKK30KKworYm9vbCBSZWRpcmVjdFJlY2VpdmVkRXZl
bnQ6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8
PCB0aW1lOworICAgIGVuY29kZXIgPDwgcmVxdWVzdDsKKyAgICBlbmNvZGVyIDw8IHJlc3BvbnNl
OworICAgIHJldHVybiB0cnVlOworfQorCitXVEY6Ok9wdGlvbmFsPENhcHR1cmVFdmVudD4gUmVk
aXJlY3RSZWNlaXZlZEV2ZW50OjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQoreworICAg
IENhcHR1cmVUaW1lVHlwZSB0aW1lOworICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1
ZXN0OworICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHRpbWUpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZShyZXF1ZXN0
KQorICAgICAgICB8fCAhZGVjb2Rlci5kZWNvZGUocmVzcG9uc2UpKQorICAgICAgICByZXR1cm4g
V1RGOjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+KCk7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAg
ICAvLyBGb3JjZSB0aGUgY3JlYXRpb24gb2YgbmVlZGVkIHBsYXRmb3JtLXNwZWNpZmljIGRhdGEg
dGhhdCBvdGhlcndpc2UgaXMgbm90IGNyZWF0ZWQuCisgICAgKHZvaWQpIHJlc3BvbnNlLm5zVVJM
UmVzcG9uc2UoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHdyYXAoUmVkaXJlY3RSZWNlaXZlZEV2
ZW50KFdURk1vdmUodGltZSksIFdURk1vdmUocmVxdWVzdCksIFdURk1vdmUocmVzcG9uc2UpKSk7
Cit9CisKK2Jvb2wgUmVkaXJlY3RTZW50RXZlbnQ6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29k
ZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCB0aW1lOworICAgIGVuY29kZXIgPDwgcmVxdWVz
dDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+IFJl
ZGlyZWN0U2VudEV2ZW50OjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIENh
cHR1cmVUaW1lVHlwZSB0aW1lOworICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0
OworCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZSh0aW1lKQorICAgICAgICB8fCAhZGVjb2Rlci5k
ZWNvZGUocmVxdWVzdCkpCisgICAgICAgIHJldHVybiBXVEY6Ok9wdGlvbmFsPENhcHR1cmVFdmVu
dD4oKTsKKworICAgIHJldHVybiB3cmFwKFJlZGlyZWN0U2VudEV2ZW50KFdURk1vdmUodGltZSks
IFdURk1vdmUocmVxdWVzdCkpKTsKK30KKworYm9vbCBEYXRhUmVjZWl2ZWRFdmVudDo6ZW5jb2Rl
KElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IHRpbWU7Cisg
ICAgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFSZWYocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
OF90Kj4oZGF0YS0+ZGF0YSgpKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5zaXplKCkpKTsK
KyAgICBlbmNvZGVyLmVuY29kZVZhcmlhYmxlTGVuZ3RoQnl0ZUFycmF5KGRhdGFSZWYpOworICAg
IHJldHVybiB0cnVlOworfQorCitXVEY6Ok9wdGlvbmFsPENhcHR1cmVFdmVudD4gRGF0YVJlY2Vp
dmVkRXZlbnQ6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIpCit7CisgICAgQ2FwdHVyZVRp
bWVUeXBlIHRpbWU7CisgICAgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFSZWY7CisKKyAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHRpbWUpCisgICAgICAgIHx8ICFkZWNvZGVyLmRlY29kZVZhcmlhYmxl
TGVuZ3RoQnl0ZUFycmF5KGRhdGFSZWYpKQorICAgICAgICByZXR1cm4gV1RGOjpPcHRpb25hbDxD
YXB0dXJlRXZlbnQ+KCk7CisKKyAgICByZXR1cm4gd3JhcChEYXRhUmVjZWl2ZWRFdmVudChXVEZN
b3ZlKHRpbWUpLCBXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZShkYXRhUmVmLmRhdGEoKSwg
ZGF0YVJlZi5zaXplKCkpKSk7Cit9CisKK2Jvb2wgRmluaXNoZWRFdmVudDo6ZW5jb2RlKElQQzo6
RW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBlbmNvZGVyIDw8IHRpbWU7CisgICAgZW5j
b2RlciA8PCBlcnJvcjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworV1RGOjpPcHRpb25hbDxDYXB0
dXJlRXZlbnQ+IEZpbmlzaGVkRXZlbnQ6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIpCit7
CisgICAgQ2FwdHVyZVRpbWVUeXBlIHRpbWU7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBl
cnJvcjsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUodGltZSkKKyAgICAgICAgfHwgIWRlY29k
ZXIuZGVjb2RlKGVycm9yKSkKKyAgICAgICAgcmV0dXJuIFdURjo6T3B0aW9uYWw8Q2FwdHVyZUV2
ZW50PigpOworCisgICAgcmV0dXJuIFdURjo6T3B0aW9uYWw8Q2FwdHVyZUV2ZW50PihDYXB0dXJl
RXZlbnQoRmluaXNoZWRFdmVudChXVEZNb3ZlKHRpbWUpLCBXVEZNb3ZlKGVycm9yKSkpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5oIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTA2NTJjNjAyN2ZiNDk3MDgzYTY2NTBiNjFjZDEzYTI3YjA0NWJhMQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0
d29ya0NhcHR1cmVFdmVudC5oCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorCisjaW5jbHVkZSAiTmV0d29y
a0NhcHR1cmVUeXBlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZVJlc3BvbnNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KKyNpbmNs
dWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2lu
Y2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KKworbmFtZXNw
YWNlIElQQyB7CitjbGFzcyBEZWNvZGVyOworY2xhc3MgRW5jb2RlcjsKK30KKworbmFtZXNwYWNl
IFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgeworCitzdHJ1Y3QgUmVxdWVzdFNl
bnRFdmVudDsKK3N0cnVjdCBSZXNwb25zZVJlY2VpdmVkRXZlbnQ7CitzdHJ1Y3QgUmVkaXJlY3RS
ZWNlaXZlZEV2ZW50Oworc3RydWN0IFJlZGlyZWN0U2VudEV2ZW50Oworc3RydWN0IERhdGFSZWNl
aXZlZEV2ZW50Oworc3RydWN0IEZpbmlzaGVkRXZlbnQ7CisKK3VzaW5nIENhcHR1cmVFdmVudFR5
cGVzID0gVHlwZUhvbGRlcjwKKyAgICBSZXF1ZXN0U2VudEV2ZW50LAorICAgIFJlc3BvbnNlUmVj
ZWl2ZWRFdmVudCwKKyAgICBSZWRpcmVjdFJlY2VpdmVkRXZlbnQsCisgICAgUmVkaXJlY3RTZW50
RXZlbnQsCisgICAgRGF0YVJlY2VpdmVkRXZlbnQsCisgICAgRmluaXNoZWRFdmVudD47CisKK3Vz
aW5nIENhcHR1cmVFdmVudCA9IENhcHR1cmVFdmVudFR5cGVzOjpWYXJpYW50VHlwZTsKK3VzaW5n
IENhcHR1cmVDbG9ja1R5cGUgPSBXVEY6Ok1vbm90b25pY1RpbWU7Cit1c2luZyBDYXB0dXJlVGlt
ZVR5cGUgPSBXVEY6Ok1vbm90b25pY1RpbWU7CisKK3N0cnVjdCBUaW1lZEV2ZW50IHsKKyAgICBU
aW1lZEV2ZW50KCkKKyAgICAgICAgOiB0aW1lKENhcHR1cmVDbG9ja1R5cGU6Om5vdygpKSB7IH0K
KyAgICBUaW1lZEV2ZW50KENhcHR1cmVUaW1lVHlwZSYmIHRpbWUpCisgICAgICAgIDogdGltZShX
VEZNb3ZlKHRpbWUpKSB7IH0KKyAgICBDYXB0dXJlVGltZVR5cGUgdGltZTsKK307CisKK3N0cnVj
dCBSZXF1ZXN0U2VudEV2ZW50IGZpbmFsIDogcHVibGljIFRpbWVkRXZlbnQgeworICAgIFJlcXVl
c3RTZW50RXZlbnQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorICAg
ICAgICA6IFRpbWVkRXZlbnQoKSwgcmVxdWVzdChyZXF1ZXN0KSB7IH0KKyAgICBSZXF1ZXN0U2Vu
dEV2ZW50KENhcHR1cmVUaW1lVHlwZSYmIHRpbWUsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYm
IHJlcXVlc3QpCisgICAgICAgIDogVGltZWRFdmVudChXVEZNb3ZlKHRpbWUpKSwgcmVxdWVzdChX
VEZNb3ZlKHJlcXVlc3QpKSB7IH0KKyAgICBib29sIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25z
dDsKKyAgICBzdGF0aWMgV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+IGRlY29kZShJUEM6OkRl
Y29kZXImKTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3Qga1R5cGUgeyBDYXB0dXJlRXZl
bnRUeXBlczo6VHlwZUluZGV4PFJlcXVlc3RTZW50RXZlbnQ+IH07CisgICAgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0IHJlcXVlc3Q7Cit9OworCitzdHJ1Y3QgUmVzcG9uc2VSZWNlaXZlZEV2ZW50
IGZpbmFsIDogcHVibGljIFRpbWVkRXZlbnQgeworICAgIFJlc3BvbnNlUmVjZWl2ZWRFdmVudChj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKKyAgICAgICAgOiBUaW1l
ZEV2ZW50KCksIHJlc3BvbnNlKHJlc3BvbnNlKSB7IH0KKyAgICBSZXNwb25zZVJlY2VpdmVkRXZl
bnQoQ2FwdHVyZVRpbWVUeXBlJiYgdGltZSwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmIHJl
c3BvbnNlKQorICAgICAgICA6IFRpbWVkRXZlbnQoV1RGTW92ZSh0aW1lKSksIHJlc3BvbnNlKFdU
Rk1vdmUocmVzcG9uc2UpKSB7IH0KKyAgICBib29sIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25z
dDsKKyAgICBzdGF0aWMgV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+IGRlY29kZShJUEM6OkRl
Y29kZXImKTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3Qga1R5cGUgeyBDYXB0dXJlRXZl
bnRUeXBlczo6VHlwZUluZGV4PFJlc3BvbnNlUmVjZWl2ZWRFdmVudD4gfTsKKyAgICBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOworfTsKKworc3RydWN0IFJlZGlyZWN0UmVjZWl2
ZWRFdmVudCBmaW5hbCA6IHB1YmxpYyBUaW1lZEV2ZW50IHsKKyAgICBSZWRpcmVjdFJlY2VpdmVk
RXZlbnQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKKyAgICAgICAgOiBUaW1lZEV2ZW50KCks
IHJlcXVlc3QocmVxdWVzdCksIHJlc3BvbnNlKHJlc3BvbnNlKSB7IH0KKyAgICBSZWRpcmVjdFJl
Y2VpdmVkRXZlbnQoQ2FwdHVyZVRpbWVUeXBlJiYgdGltZSwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiYgcmVxdWVzdCwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmIHJlc3BvbnNlKQorICAg
ICAgICA6IFRpbWVkRXZlbnQoV1RGTW92ZSh0aW1lKSksIHJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0
KSksIHJlc3BvbnNlKFdURk1vdmUocmVzcG9uc2UpKSB7IH0KKyAgICBib29sIGVuY29kZShJUEM6
OkVuY29kZXImKSBjb25zdDsKKyAgICBzdGF0aWMgV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+
IGRlY29kZShJUEM6OkRlY29kZXImKTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3Qga1R5
cGUgeyBDYXB0dXJlRXZlbnRUeXBlczo6VHlwZUluZGV4PFJlZGlyZWN0UmVjZWl2ZWRFdmVudD4g
fTsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdDsKKyAgICBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOworfTsKKworc3RydWN0IFJlZGlyZWN0U2VudEV2ZW50
IGZpbmFsIDogcHVibGljIFRpbWVkRXZlbnQgeworICAgIFJlZGlyZWN0U2VudEV2ZW50KGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKKyAgICAgICAgOiBUaW1lZEV2ZW50
KCksIHJlcXVlc3QocmVxdWVzdCkgeyB9CisgICAgUmVkaXJlY3RTZW50RXZlbnQoQ2FwdHVyZVRp
bWVUeXBlJiYgdGltZSwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCkKKyAgICAg
ICAgOiBUaW1lZEV2ZW50KFdURk1vdmUodGltZSkpLCByZXF1ZXN0KFdURk1vdmUocmVxdWVzdCkp
IHsgfQorICAgIGJvb2wgZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBX
VEY6Ok9wdGlvbmFsPENhcHR1cmVFdmVudD4gZGVjb2RlKElQQzo6RGVjb2RlciYpOworICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludDhfdCBrVHlwZSB7IENhcHR1cmVFdmVudFR5cGVzOjpUeXBlSW5k
ZXg8UmVkaXJlY3RTZW50RXZlbnQ+IH07CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJl
cXVlc3Q7Cit9OworCitzdHJ1Y3QgRGF0YVJlY2VpdmVkRXZlbnQgZmluYWwgOiBwdWJsaWMgVGlt
ZWRFdmVudCB7CisgICAgRGF0YVJlY2VpdmVkRXZlbnQoV2ViQ29yZTo6U2hhcmVkQnVmZmVyJiBk
YXRhKQorICAgICAgICA6IFRpbWVkRXZlbnQoKSwgZGF0YShkYXRhKSB7IH0KKyAgICBEYXRhUmVj
ZWl2ZWRFdmVudChDYXB0dXJlVGltZVR5cGUmJiB0aW1lLCBSZWY8V2ViQ29yZTo6U2hhcmVkQnVm
ZmVyPiYmIGRhdGEpCisgICAgICAgIDogVGltZWRFdmVudChXVEZNb3ZlKHRpbWUpKSwgZGF0YShX
VEZNb3ZlKGRhdGEpKSB7IH0KKyAgICBib29sIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25zdDsK
KyAgICBzdGF0aWMgV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+IGRlY29kZShJUEM6OkRlY29k
ZXImKTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3Qga1R5cGUgeyBDYXB0dXJlRXZlbnRU
eXBlczo6VHlwZUluZGV4PERhdGFSZWNlaXZlZEV2ZW50PiB9OworICAgIFJlZjxXZWJDb3JlOjpT
aGFyZWRCdWZmZXI+IGRhdGE7Cit9OworCitzdHJ1Y3QgRmluaXNoZWRFdmVudCBmaW5hbCA6IHB1
YmxpYyBUaW1lZEV2ZW50IHsKKyAgICBGaW5pc2hlZEV2ZW50KGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlRXJyb3ImIGVycm9yKQorICAgICAgICA6IFRpbWVkRXZlbnQoKSwgZXJyb3IoZXJyb3IpIHsg
fQorICAgIEZpbmlzaGVkRXZlbnQoQ2FwdHVyZVRpbWVUeXBlJiYgdGltZSwgV2ViQ29yZTo6UmVz
b3VyY2VFcnJvciYmIGVycm9yKQorICAgICAgICA6IFRpbWVkRXZlbnQoV1RGTW92ZSh0aW1lKSks
IGVycm9yKFdURk1vdmUoZXJyb3IpKSB7IH0KKyAgICBib29sIGVuY29kZShJUEM6OkVuY29kZXIm
KSBjb25zdDsKKyAgICBzdGF0aWMgV1RGOjpPcHRpb25hbDxDYXB0dXJlRXZlbnQ+IGRlY29kZShJ
UEM6OkRlY29kZXImKTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3Qga1R5cGUgeyBDYXB0
dXJlRXZlbnRUeXBlczo6VHlwZUluZGV4PEZpbmlzaGVkRXZlbnQ+IH07CisgICAgV2ViQ29yZTo6
UmVzb3VyY2VFcnJvciBlcnJvcjsKK307CisKK30gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJl
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBUFRV
UkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05l
dHdvcmtDYXB0dXJlTG9nZ2luZy5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fw
dHVyZS9OZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOWM3YzExY2Y4MzU3MTUw
NjllMWE3Y2YxMDYzNjJjN2Y0YzIzYzcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaApAQCAtMCww
ICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTkVUV09S
S19DQVBUVVJFKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorCisjZGVmaW5lIEVOQUJMRV9XVEZf
SU5URVJOQUxfREVCVUdHSU5HIDAKKworI2RlZmluZSBERUJVR19TVFIocykgICAgICAgICAgICAg
ICAgICAgIChzKS5hc2NpaSgpLmRhdGEoKQorCisjaWYgRU5BQkxFKFdURl9JTlRFUk5BTF9ERUJV
R0dJTkcpCisjZGVmaW5lIERFQlVHX0xPR19RVU9URShzdHIpICAgICAgICAgICAgI3N0cgorI2Rl
ZmluZSBERUJVR19MT0dfRVhQQU5EX0FORF9RVU9URShzdHIpIERFQlVHX0xPR19RVU9URShzdHIp
CisjZGVmaW5lIERFQlVHX0xPRyhmb3JtYXQsIC4uLikgICAgICAgICAgUkVMRUFTRV9MT0coTmV0
d29yaywgIiNQTFQ6ICVwIC0gJXtwdWJsaWN9czo6JXtwdWJsaWN9czogIiBmb3JtYXQsIHRoaXMs
IERFQlVHX0xPR19FWFBBTkRfQU5EX1FVT1RFKERFQlVHX0NMQVNTKSwgX19GVU5DVElPTl9fLCAj
I19fVkFfQVJHU19fKQorI2RlZmluZSBERUJVR19MT0dfRVJST1IoZm9ybWF0LCAuLi4pICAgIFJF
TEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIjUExUOiAlcCAtICV7cHVibGljfXM6OiV7cHVibGlj
fXM6ICIgZm9ybWF0LCB0aGlzLCBERUJVR19MT0dfRVhQQU5EX0FORF9RVU9URShERUJVR19DTEFT
UyksIF9fRlVOQ1RJT05fXywgIyNfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIERFQlVHX0xP
RyguLi4pICAgICAgICAgICAgICAgICAgKCh2b2lkKSAwKQorI2RlZmluZSBERUJVR19MT0dfRVJS
T1IoLi4uKSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssIF9fVkFfQVJHU19f
KQorI2VuZGlmCisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZU1h
bmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3Jr
Q2FwdHVyZU1hbmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIxYmFhNTY0MGFmNTczYTVmZjQwMDQyYjQx
OTY1M2Q5NWNkNjUzMWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlTWFuYWdlci5jcHAKQEAgLTAsMCArMSw2Mjkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya0Nh
cHR1cmVNYW5hZ2VyLmgiCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorCisjaW5jbHVk
ZSAiTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0
dXJlTG9nZ2luZy5oIgorI2luY2x1ZGUgIldlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5j
bHVkZSAiV2ViQ29yZS9VUkwuaCIKKyNpbmNsdWRlIDx3dGYvTUQ1Lmg+CisjaW5jbHVkZSA8d3Rm
L1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKKyNpbmNsdWRlIDxhbGdv
cml0aG0+CisjaW5jbHVkZSA8aXRlcmF0b3I+CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUg
PHN0ZGFyZy5oPgorCisjZGVmaW5lIERFQlVHX0NMQVNTIE1hbmFnZXIKKworbmFtZXNwYWNlIFdl
YktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgeworCitzdGF0aWMgY29uc3QgY2hhciog
a0Rpck5hbWVSZWNvcmRSZXBsYXkgPSAiV2ViS2l0UGVyZi9yZWNvcmRfcmVwbGF5IjsKK3N0YXRp
YyBjb25zdCBjaGFyKiBrRGlyTmFtZVJlc291cmNlcyA9ICJyZXNvdXJjZXMiOworc3RhdGljIGNv
bnN0IGNoYXIqIGtGaWxlTmFtZVJlcG9ydExvYWQgPSAicmVwb3J0X2xvYWQudHh0IjsKK3N0YXRp
YyBjb25zdCBjaGFyKiBrRmlsZU5hbWVSZXBvcnRSZWNvcmQgPSAicmVwb3J0X3JlY29yZC50eHQi
Oworc3RhdGljIGNvbnN0IGNoYXIqIGtGaWxlTmFtZVJlcG9ydFJlcGxheSA9ICJyZXBvcnRfcmVw
bGF5LnR4dCI7CisKK3N0YXRpYyBpbnQga01heE1hdGNoID0gc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKTsKK3N0YXRpYyBpbnQga01pbk1hdGNoID0gc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptaW4oKTsKKworLy8gVE9ETzogV2hhdCdzIHRoZSB0aHJlYWRpbmcgbW9kZWwgaW4gd2hp
Y2ggd2UncmUgcnVubmluZz8gV2UncmUgYWN0aW5nIGFzIGEKKy8vIHNpbmdsZXRvbiB0aGF0IGdl
dHMgY2FsbGVkIGFsbCBvdmVyIHRoZSBwbGFjZSwgYnV0IHdlJ3JlIG5vdCBkb2luZyBhbnl0aGlu
ZworLy8gdG8gcHJvdGVjdCBvdXJzZWxmIGZyb20gbXVsdGktdGhyZWFkZWQgYWNjZXNzLiBPbiB0
aGUgb3RoZXIgaGFuZCwgcGVyaGFwcworLy8gd2UncmUgT0sgd2l0aG91dCBzeW5jaHJvbml6YXRp
b24uIFdoZW4gcmVjb3JkaW5nLCB3ZSdyZSBqdXN0IHdyaXRpbmcgZGF0YSB0bworLy8gZmlsZXMu
IFdoZW4gcGxheWluZyB0aGluZ3MgYmFjaywgd2UgaW5pdGlhbGl6ZSBvdXIgZGF0YSB1cCBmcm9u
dCBhbmQgdGhlbgorLy8gdXNlIGl0IGluIGEgcmVhZC1vbmx5IG1hbm5lciBhZnRlcndhcmRzLgor
CitNYW5hZ2VyJiBNYW5hZ2VyOjpzaW5nbGV0b24oKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxNYW5hZ2VyPiBpbnN0YW5jZTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKK3ZvaWQg
TWFuYWdlcjo6aW5pdGlhbGl6ZSgKKyAgICBib29sIHNob3VsZFJlY29yZE5ldHdvcmtSZXF1ZXN0
cywKKyAgICBib29sIHNob3VsZFJlcGxheU5ldHdvcmtSZXF1ZXN0cywKKyAgICBjb25zdCBTdHJp
bmcmIHJlY29yZFJlcGxheUNhY2hlTG9jYXRpb24pCit7CisgICAgREVCVUdfTE9HKCJJbml0aWFs
aXppbmciKTsKKworICAgIG1fc2hvdWxkUmVjb3JkTmV0d29ya1JlcXVlc3RzID0gc2hvdWxkUmVj
b3JkTmV0d29ya1JlcXVlc3RzOworICAgIG1fc2hvdWxkUmVwbGF5TmV0d29ya1JlcXVlc3RzID0g
c2hvdWxkUmVwbGF5TmV0d29ya1JlcXVlc3RzOworICAgIG1fcmVjb3JkUmVwbGF5Q2FjaGVMb2Nh
dGlvbiA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChyZWNvcmRSZXBsYXlDYWNo
ZUxvY2F0aW9uLCBrRGlyTmFtZVJlY29yZFJlcGxheSk7CisKKyAgICBERUJVR19MT0coIkNhY2hl
IGxvY2F0aW9uID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX3JlY29yZFJlcGxheUNhY2hlTG9j
YXRpb24pKTsKKworICAgIGlmIChtX3Nob3VsZFJlcGxheU5ldHdvcmtSZXF1ZXN0cykKKyAgICAg
ICAgbG9hZENhY2hlZFJlc291cmNlcygpOworfQorCit2b2lkIE1hbmFnZXI6OnRlcm1pbmF0ZSgp
Cit7Cit9CisKK0NhY2hlZFJlc291cmNlKiBNYW5hZ2VyOjpmaW5kTWF0Y2goY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIC8vIERFQlVHX0xPRygiVVJMID0g
JXtwdWJsaWN9cyIsIERFQlVHX1NUUihyZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisKKyAgICBh
dXRvIGJlc3RNYXRjaCA9IGZpbmRFeGFjdE1hdGNoKHJlcXVlc3QpOworICAgIGlmICghYmVzdE1h
dGNoKQorICAgICAgICBiZXN0TWF0Y2ggPSBmaW5kQmVzdEZ1enp5TWF0Y2gocmVxdWVzdCk7CisK
KyAgICBpZiAoIWJlc3RNYXRjaCkKKyAgICAgICAgREVCVUdfTE9HKCJDb3VsZCBub3QgZmluZCBt
YXRjaCBmb3I6ICV7cHVibGljfXMiLCBERUJVR19TVFIocmVxdWVzdC51cmwoKS5zdHJpbmcoKSkp
OworICAgIGVsc2UgaWYgKHJlcXVlc3QudXJsKCkgPT0gYmVzdE1hdGNoLT51cmwoKSkKKyAgICAg
ICAgREVCVUdfTE9HKCJGb3VuZCBleGFjdCBtYXRjaCBmb3I6ICV7cHVibGljfXMiLCBERUJVR19T
VFIocmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworICAgIGVsc2UgeworICAgICAgICBERUJVR19M
T0coIkZvdW5kIGZ1enp5IG1hdGNoIGZvcjogJXtwdWJsaWN9cyIsIERFQlVHX1NUUihyZXF1ZXN0
LnVybCgpLnN0cmluZygpKSk7CisgICAgICAgIERFQlVHX0xPRygiICAgICAgIHJlcGxhY2VkIHdp
dGggOiAle3B1YmxpY31zIiwgREVCVUdfU1RSKGJlc3RNYXRjaC0+dXJsKCkuc3RyaW5nKCkpKTsK
KyAgICB9CisKKyAgICByZXR1cm4gYmVzdE1hdGNoOworfQorCitDYWNoZWRSZXNvdXJjZSogTWFu
YWdlcjo6ZmluZEV4YWN0TWF0Y2goY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0KQoreworICAgIGNvbnN0IGF1dG8mIHVybCA9IHJlcXVlc3QudXJsKCk7CisgICAgYXV0byBs
b3dlciA9IHN0ZDo6bG93ZXJfYm91bmQoc3RkOjpiZWdpbihtX2NhY2hlZFJlc291cmNlcyksIHN0
ZDo6ZW5kKG1fY2FjaGVkUmVzb3VyY2VzKSwgdXJsLCBbXShhdXRvJiByZXNvdXJjZSwgY29uc3Qg
YXV0byYgdXJsKSB7CisgICAgICAgIHJldHVybiBXVEY6OmNvZGVQb2ludENvbXBhcmVMZXNzVGhh
bihyZXNvdXJjZS51cmwoKS5zdHJpbmcoKSwgdXJsLnN0cmluZygpKTsKKyAgICB9KTsKKworICAg
IGlmIChsb3dlciAhPSBzdGQ6OmVuZChtX2NhY2hlZFJlc291cmNlcykgJiYgbG93ZXItPnVybCgp
ID09IHVybCkgeworICAgICAgICAvLyBERUJVR19MT0coIkZvdW5kIGV4YWN0IG1hdGNoOiAle3B1
YmxpY31zIiwgREVCVUdfU1RSKGxvd2VyLT51cmwoKS5zdHJpbmcoKSkpOworICAgICAgICByZXR1
cm4gJipsb3dlcjsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQ2FjaGVkUmVz
b3VyY2UqIE1hbmFnZXI6OmZpbmRCZXN0RnV6enlNYXRjaChjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgY29uc3QgYXV0byYgdXJsID0gcmVxdWVzdC51cmwo
KTsKKyAgICBDYWNoZWRSZXNvdXJjZSogYmVzdE1hdGNoID0gbnVsbHB0cjsKKyAgICBpbnQgYmVz
dFNjb3JlID0ga01pbk1hdGNoOworICAgIGNvbnN0IGF1dG8mIGJhc2VVUkwgPSBiYXNlVVJMQXNT
dHJpbmcodXJsKTsKKworICAgIGNvbnN0IGF1dG8mIGxvd2VyID0gc3RkOjpsb3dlcl9ib3VuZChz
dGQ6OmJlZ2luKG1fY2FjaGVkUmVzb3VyY2VzKSwgc3RkOjplbmQobV9jYWNoZWRSZXNvdXJjZXMp
LCBiYXNlVVJMLCBbXShhdXRvJiByZXNvdXJjZSwgY29uc3QgYXV0byYgdXJsKSB7CisgICAgICAg
IHJldHVybiBXVEY6OmNvZGVQb2ludENvbXBhcmVMZXNzVGhhbihyZXNvdXJjZS5iYXNlVVJMKCku
c3RyaW5nKCksIHVybCk7CisgICAgfSk7CisgICAgY29uc3QgYXV0byYgdXBwZXIgPSBzdGQ6OnVw
cGVyX2JvdW5kKGxvd2VyLCBzdGQ6OmVuZChtX2NhY2hlZFJlc291cmNlcyksIGJhc2VVUkwsIFtd
KGNvbnN0IGF1dG8mIHVybCwgYXV0byYgcmVzb3VyY2UpIHsKKyAgICAgICAgcmV0dXJuIFdURjo6
Y29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKHJlc291cmNlLmJhc2VVUkwoKS5zdHJpbmcoKSwgdXJs
KTsKKyAgICB9KTsKKworICAgIGNvbnN0IGF1dG8mIHJlcXVlc3RQYXJhbWV0ZXJzID0gV2ViQ29y
ZTo6VVJMUGFyc2VyOjpwYXJzZVVSTEVuY29kZWRGb3JtKHVybC5xdWVyeSgpKTsKKyAgICBmb3Ig
KGF1dG8gaVJlc291cmNlID0gbG93ZXI7IGlSZXNvdXJjZSAhPSB1cHBlcjsgKytpUmVzb3VyY2Up
IHsKKyAgICAgICAgaW50IHRoaXNTY29yZSA9IGZ1enp5TWF0Y2hVUkxzKHVybCwgcmVxdWVzdFBh
cmFtZXRlcnMsIGlSZXNvdXJjZS0+dXJsKCksIGlSZXNvdXJjZS0+cXVlcnlQYXJhbWV0ZXJzKCkp
OworICAgICAgICAvLyBUT0RPOiBDb25zaWRlciBpZ25vcmluZyBhbnkgbWF0Y2hlcyA8IDAgYXMg
YmVpbmcgdG9vIGRpZmZlcmVudC4KKyAgICAgICAgaWYgKGJlc3RTY29yZSA8IHRoaXNTY29yZSkg
eworICAgICAgICAgICAgREVCVUdfTE9HKCJOZXcgYmVzdCBtYXRjaCAoJWQpOiAle3B1YmxpY31z
IiwgdGhpc1Njb3JlLCBERUJVR19TVFIoaVJlc291cmNlLT51cmwoKS5zdHJpbmcoKSkpOworICAg
ICAgICAgICAgYmVzdFNjb3JlID0gdGhpc1Njb3JlOworICAgICAgICAgICAgYmVzdE1hdGNoID0g
JippUmVzb3VyY2U7CisgICAgICAgICAgICBpZiAoYmVzdFNjb3JlID09IGtNYXhNYXRjaCkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBiZXN0
TWF0Y2g7Cit9CisKKy8vIFRPRE86IENvbnZlcnQgdG8gYW4gaW50ZXJmYWNlIGJhc2VkIG9uIFJl
c291cmNlUmVxdWVzdCBzbyB0aGF0IHdlIGNhbiBkbworLy8gZGVlcGVyIG1hdGNoaW5nLgorCitp
bnQgTWFuYWdlcjo6ZnV6enlNYXRjaFVSTHMoCisgICAgY29uc3QgV2ViQ29yZTo6VVJMJiByZXF1
ZXN0VVJMLCBjb25zdCBXZWJDb3JlOjpVUkxQYXJzZXI6OlVSTEVuY29kZWRGb3JtJiByZXF1ZXN0
UGFyYW1ldGVycywKKyAgICBjb25zdCBXZWJDb3JlOjpVUkwmIHJlc291cmNlVVJMLCBjb25zdCBX
ZWJDb3JlOjpVUkxQYXJzZXI6OlVSTEVuY29kZWRGb3JtJiByZXNvdXJjZVBhcmFtZXRlcnMpCit7
CisgICAgLy8gVE9ETzogY29uc2lkZXIgYXNzZXJ0aW5nIHRoYXQgYW55IHRyYWlsaW5nIHN1ZmZp
eGVzIChlLmcuLCAiLmpzIiwKKyAgICAvLyAiLnBuZyIsICIuY3NzIiwgIi5odG1sIiwgZXRjLikg
c2hvdWxkIGJlIGFuIGV4YWN0IG1hdGNoLgorCisjaWYgMAorICAgIC8vIFNob3VsZCBuZXZlciBn
ZXQgaGVyZSBiZWNhdXNlIGZpbmRFeGFjdE1hdGNoIHNob3VsZCBhbHJlYWR5IGhhdmUgZm91bmQK
KyAgICAvLyBjYXNlcyB3aGVyZSBldmVyeXRoaW5nIG1hdGNoZXMuCisgICAgLy8gSWYgZXZlcnl0
aGluZyBtYXRjaGVzLCByZXR1cm4gdGhpcyBhcyB0aGUgImJlc3QiIG1hdGNoLgorCisgICAgaWYg
KHJlcXVlc3RVUkwgPT0gcmVzb3VyY2VVUkwpIHsKKyAgICAgICAgREVCVUdfTE9HKCJDb21wbGV0
ZSBtYXRjaDogJXtwdWJsaWN9cyA9PSAle3B1YmxpY31zIiwKKyAgICAgICAgICAgIERFQlVHX1NU
UihyZXF1ZXN0VVJMLnN0cmluZygpKSwKKyAgICAgICAgICAgIERFQlVHX1NUUihyZXNvdXJjZVVS
TC5zdHJpbmcoKSkpOworICAgICAgICByZXR1cm4ga01heE1hdGNoOworICAgIH0KKyNlbmRpZgor
CisgICAgLy8gV2UgZG8gZnV6enkgbWF0Y2hpbmcgb24gdGhlIHBhdGggYW5kIHF1ZXJ5IHBhcmFt
ZXRlcnMuIFNvIGxldCdzIGZpcnN0CisgICAgLy8gbWFrZSBzdXJlIHRoYXQgYWxsIHRoZSBvdGhl
ciBwYXJ0cyBhcmUgZXF1YWwuCisKKyAgICAvLyBJZiBzY2hlbWUsIGhvc3QsIGFuZCBwb3J0IGRv
bid0IGFsbCBtYXRjaCwgcmV0dXJuIHRoaXMgYXMgdGhlICJ3b3JzdCIKKyAgICAvLyBtYXRjaC4K
KworICAgIGlmICghcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKHJlcXVlc3RVUkwsIHJlc291
cmNlVVJMKSkgeworICAgICAgICBERUJVR19MT0coIlNjaGVtZS9ob3N0L3BvcnQgbWlzbWF0Y2g6
ICV7cHVibGljfXMgIT0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihyZXF1ZXN0VVJMLnN0cmluZygp
KSwgREVCVUdfU1RSKHJlc291cmNlVVJMLnN0cmluZygpKSk7CisgICAgICAgIHJldHVybiBrTWlu
TWF0Y2g7CisgICAgfQorCisgICAgLy8gSWYgZnJhZ21lbnRzIGRvbid0IG1hdGNoLCByZXR1cm4g
dGhpcyBhcyB0aGUgIndvcnN0IiBtYXRjaC4KKworICAgIGlmIChyZXF1ZXN0VVJMLmZyYWdtZW50
SWRlbnRpZmllcigpICE9IHJlc291cmNlVVJMLmZyYWdtZW50SWRlbnRpZmllcigpKSB7CisgICAg
ICAgIERFQlVHX0xPRygiRnJhZ21lbnRzIG1pc21hdGNoOiAle3B1YmxpY31zICE9ICV7cHVibGlj
fXMiLCBERUJVR19TVFIocmVxdWVzdFVSTC5zdHJpbmcoKSksIERFQlVHX1NUUihyZXNvdXJjZVVS
TC5zdHJpbmcoKSkpOworICAgICAgICByZXR1cm4ga01pbk1hdGNoOworICAgIH0KKworICAgIERF
QlVHX0xPRygiRnV6enkgbWF0Y2hpbmc6Iik7CisgICAgREVCVUdfTE9HKCIgICA6ICV7cHVibGlj
fXMiLCBERUJVR19TVFIocmVxdWVzdFVSTC5zdHJpbmcoKSkpOworICAgIERFQlVHX0xPRygiICAg
OiAle3B1YmxpY31zIiwgREVCVUdfU1RSKHJlc291cmNlVVJMLnN0cmluZygpKSk7CisKKyAgICAv
LyBDb21wYXJlIHRoZSBwYXRoIGNvbXBvbmVudHMgYW5kIHRoZSBxdWVyeSBwYXJhbWV0ZXJzLiBT
Y29yZSBlYWNoIHBhcnRpYWwKKyAgICAvLyBtYXRjaCBhcyArNCwgZWFjaCBtaXNtYXRjaCBhcyAt
MSwgYW5kIGVhY2ggbWlzc2luZyBjb21wb25lbnQgYXMgLTEuCisgICAgLy8KKyAgICAvLyBOb3Rl
IHRoYXQgYXQgdGhlIGN1cnJlbnQgdGltZSB0aGVzZSB2YWx1ZXMgYXJlIHJhdGhlciBhcmJpdHJh
cnkgYW5kCisgICAgLy8gY291bGQgZmluZS10dW5lZC4KKworICAgIGNvbnN0IGludCBrUGF0aE1h
dGNoU2NvcmUgPSA0OworICAgIGNvbnN0IGludCBrUGF0aE1pc21hdGNoU2NvcmUgPSAtMTsKKyAg
ICBjb25zdCBpbnQga1BhdGhNaXNzaW5nU2NvcmUgPSAtMTsKKyAgICBjb25zdCBpbnQga1BhcmFt
ZXRlck1hdGNoU2NvcmUgPSA0OworICAgIGNvbnN0IGludCBrUGFyYW1ldGVyTWlzbWF0Y2hTY29y
ZSA9IC0xOworICAgIGNvbnN0IGludCBrUGFyYW1ldGVyTWlzc2luZ1Njb3JlID0gLTE7CisKKyAg
ICBpbnQgc2NvcmUgPSAwOworCisgICAgLy8gUXVhbnRpemUgdGhlIGRpZmZlcmVuY2VzIGluIFVS
TCBwYXRocy4KKyAgICAvLworICAgIC8vIFRoZSBhcHByb2FjaCBoZXJlIGlzIHRvIGluY3JlYXNl
IG91ciBzY29yZSBmb3IgZWFjaCBtYXRjaGluZyBwYXRoCisgICAgLy8gY29tcG9uZW50LCBhbmQg
dG8gc3VidHJhY3QgZm9yIGVhY2ggZGlmZmVyaW5nIGNvbXBvbmVudCBhcyB3ZWxsIGFzIGZvcgor
ICAgIC8vIGNvbXBvbmVudHMgdGhhdCBleGlzdCBpbiBvbmUgcGF0aCBidXQgbm90IHRoZSBvdGhl
ci4KKworICAgIGNvbnN0IGF1dG8mIHJlcXVlc3RQYXRoID0gcmVxdWVzdFVSTC5wYXRoKCk7Cisg
ICAgY29uc3QgYXV0byYgcmVzb3VyY2VQYXRoID0gcmVzb3VyY2VVUkwucGF0aCgpOworCisgICAg
VmVjdG9yPFN0cmluZz4gcmVxdWVzdFBhdGhDb21wb25lbnRzLCByZXNvdXJjZVBhdGhDb21wb25l
bnRzOworICAgIHJlcXVlc3RQYXRoLnNwbGl0KCcvJywgcmVxdWVzdFBhdGhDb21wb25lbnRzKTsK
KyAgICByZXNvdXJjZVBhdGguc3BsaXQoJy8nLCByZXNvdXJjZVBhdGhDb21wb25lbnRzKTsKKwor
ICAgIGF1dG8gdXBkYXRlZEl0ZXJhdG9ycyA9IHN0ZDo6bWlzbWF0Y2goCisgICAgICAgIHN0ZDo6
YmVnaW4ocmVxdWVzdFBhdGhDb21wb25lbnRzKSwgc3RkOjplbmQocmVxdWVzdFBhdGhDb21wb25l
bnRzKSwKKyAgICAgICAgc3RkOjpiZWdpbihyZXNvdXJjZVBhdGhDb21wb25lbnRzKSwgc3RkOjpl
bmQocmVzb3VyY2VQYXRoQ29tcG9uZW50cykpOworCisgICAgYXV0byBtYXRjaGluZ0Rpc3RhbmNl
ID0gc3RkOjpkaXN0YW5jZShzdGQ6OmJlZ2luKHJlcXVlc3RQYXRoQ29tcG9uZW50cyksIHVwZGF0
ZWRJdGVyYXRvcnMuZmlyc3QpOworICAgIGF1dG8gcmVxdWVzdFBhdGhNaXNtYXRjaERpc3RhbmNl
ID0gc3RkOjpkaXN0YW5jZSh1cGRhdGVkSXRlcmF0b3JzLmZpcnN0LCBzdGQ6OmVuZChyZXF1ZXN0
UGF0aENvbXBvbmVudHMpKTsKKyAgICBhdXRvIHJlc291cmNlUGF0aE1pc21hdGNoRGlzdGFuY2Ug
PSBzdGQ6OmRpc3RhbmNlKHVwZGF0ZWRJdGVyYXRvcnMuc2Vjb25kLCBzdGQ6OmVuZChyZXNvdXJj
ZVBhdGhDb21wb25lbnRzKSk7CisgICAgZGVjbHR5cGUobWF0Y2hpbmdEaXN0YW5jZSkgbWlzbWF0
Y2hpbmdEaXN0YW5jZTsKKyAgICBkZWNsdHlwZShtYXRjaGluZ0Rpc3RhbmNlKSBtaXNzaW5nRGlz
dGFuY2U7CisgICAgaWYgKHJlcXVlc3RQYXRoTWlzbWF0Y2hEaXN0YW5jZSA8IHJlc291cmNlUGF0
aE1pc21hdGNoRGlzdGFuY2UpIHsKKyAgICAgICAgbWlzbWF0Y2hpbmdEaXN0YW5jZSA9IHJlcXVl
c3RQYXRoTWlzbWF0Y2hEaXN0YW5jZTsKKyAgICAgICAgbWlzc2luZ0Rpc3RhbmNlID0gcmVzb3Vy
Y2VQYXRoTWlzbWF0Y2hEaXN0YW5jZSAtIHJlcXVlc3RQYXRoTWlzbWF0Y2hEaXN0YW5jZTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBtaXNtYXRjaGluZ0Rpc3RhbmNlID0gcmVzb3VyY2VQYXRoTWlz
bWF0Y2hEaXN0YW5jZTsKKyAgICAgICAgbWlzc2luZ0Rpc3RhbmNlID0gcmVxdWVzdFBhdGhNaXNt
YXRjaERpc3RhbmNlIC0gcmVzb3VyY2VQYXRoTWlzbWF0Y2hEaXN0YW5jZTsKKyAgICB9CisKKyAg
ICBERUJVR19MT0coIlBhdGggbWF0Y2hpbmcgcmVzdWx0czogbWF0Y2hpbmcgPSAlZCwgbWlzbWF0
Y2hpbmcgPSAlZCwgbWlzc2luZyA9ICVkIiwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtYXRj
aGluZ0Rpc3RhbmNlKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtaXNtYXRjaGluZ0Rpc3Rh
bmNlKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtaXNzaW5nRGlzdGFuY2UpKTsKKworICAg
IHNjb3JlICs9IG1hdGNoaW5nRGlzdGFuY2UgKiBrUGF0aE1hdGNoU2NvcmUKKyAgICAgICAgKyBt
aXNtYXRjaGluZ0Rpc3RhbmNlICoga1BhdGhNaXNtYXRjaFNjb3JlCisgICAgICAgICsgbWlzc2lu
Z0Rpc3RhbmNlICoga1BhdGhNaXNzaW5nU2NvcmU7CisgICAgREVCVUdfTE9HKCJTY29yZSA9ICVk
Iiwgc2NvcmUpOworCisgICAgLy8gUXVhbnRpemUgdGhlIGRpZmZlcmVuY2VzIGluIHF1ZXJ5IHBh
cmFtZXRlcnMuCisgICAgLy8KKyAgICAvLyBUaGUgYXBwcm9hY2ggaGVyZSBpcyB0byB3YWxrIGxv
Y2stc3RlcCBvdmVyIHRoZSB0d28gc2V0cyBvZiBxdWVyeQorICAgIC8vIHBhcmFtZXRlcnMuIEZv
ciBlYWNoIHBhaXIgb2YgcGFyYW1ldGVycyBmb3IgZWFjaCBVUkwsIHdlIGNvbXBhcmUgdGhlaXIK
KyAgICAvLyBuYW1lcyBhbmQgdmFsdWVzLiBJZiB0aGUgbmFtZXMgYW5kIHZhbHVlcyBtYXRjaCwg
d2UgYWRkIGEgaGlnaCBzY29yZS4gSWYKKyAgICAvLyBqdXN0IHRoZSBuYW1lcyBtYXRjaCwgd2Ug
YWRkIGEgbG93ZXIgc2NvcmUuCisgICAgLy8KKyAgICAvLyBJZiB0aGUgbmFtZXMgZG9uJ3QgbWF0
Y2gsIHdlIHRoZW4gYXNzdW1lIHRoYXQgc29tZSBpbnRlcnZlbmluZyBxdWVyeQorICAgIC8vIHBh
cmFtZXRlcnMgaGF2ZSBiZWVuIGFkZGVkIHRvIG9uZSBvciB0aGUgb3RoZXIgVVJMLiBXZSB0aGVy
ZWZvcmUgdHJ5IHRvCisgICAgLy8gc3luYyB1cCB0aGUgaXRlcmF0b3JzIHVzZWQgdG8gdHJhdmVy
c2UgdGhlIHF1ZXJ5IHBhcmFtZXRlciBjb2xsZWN0aW9ucworICAgIC8vIHNvIHRoYXQgdGhleSdy
ZSBhZ2FpbiBwb2ludGluZyB0byBwYXJhbWV0ZXJzIHdpdGggdGhlIHNhbWUgbmFtZXMuIFdlCisg
ICAgLy8gZmlyc3Qgc3RhcnQgc2Nhbm5pbmcgZm9yd2FyZCBkb3duIHRoZSBxdWVyeSBwYXJhbWV0
ZXJzIGZvciBvbmUgVVJMLAorICAgIC8vIGxvb2tpbmcgZm9yIG9uZSB3aXRoIHRoZSBzYW1lIG5h
bWUgYXMgdGhlIG9uZSB3ZSdyZSBvbiBpbiB0aGUgb3RoZXIgVVJMLgorICAgIC8vIElmIHRoYXQg
ZG9lc24ndCB0dXJuIHVwIGEgbWF0Y2gsIHdlIHJldmVyc2UgdGhlIHJvbGVzIG9mIHRoZSBxdWVy
eQorICAgIC8vIHBhcmFtZXRlcnMgcGVyZm9ybSB0aGUgc2FtZSBwcm9jZXNzIG9mIHNjYW5uaW5n
IGZvcndhcmQuIElmIG5laXRoZXIgb2YKKyAgICAvLyB0aGVzZSBzY2FucyBwcm9kdWNlcyBhIG1h
dGNoLCB3ZSBmaWd1cmUgdGhhdCBlYWNoIHF1ZXJ5IHBhcmFtZXRlciB3ZSdyZQorICAgIC8vIGxv
b2tpbmcgYXQgZnJvbSBlYWNoIG9mIHRoZSBxdWVyeSBwYXJhbWV0ZXIgY29sbGVjdGlvbnMgaXMg
dW5pcXVlLiBXZQorICAgIC8vIGRlZHVjdCBwb2ludHMgZnJvbSB0aGUgb3ZlcmFsbCBzY29yZSBh
bmQgbW92ZSBvbiB0byB0aGUgbmV4dCBxdWVyeQorICAgIC8vIHBhcmFtZXRlcnMgaW4gZWFjaCBz
ZXQuCisgICAgLy8KKyAgICAvLyBJZiwgb24gdGhlIG90aGVyIGhhbmQsIHRoZSBmb3J3YXJkLXNj
YW5uaW5nIGRvZXMgdHVybiB1cCBhIG1hdGNoLCB3ZQorICAgIC8vIGFkanVzdCBvdXQgaXRlcmF0
b3JzIHNvIHRoYXQgdGhleSdyZSBub3cgYWdhaW4gcG9pbnRpbmcgdG8gcXVlcnkKKyAgICAvLyBw
YXJhbWV0ZXJzIHdpdGggdGhlIHNhbWUgbmFtZS4gVGhpcyBzeW5jaHJvbml6YXRpb24gaW52b2x2
ZXMgc2tpcHBpbmcKKyAgICAvLyBvdmVyIGFueSBpbnRlcnZlbmluZyBxdWVyeSBwYXJhbWV0ZXJz
IGluIG9uZSBjb2xsZWN0aW9uIG9yIHRoZSBvdGhlci4KKyAgICAvLyBUaGUgYXNzdW1wdGlvbiBo
ZXJlIGlzIHRoYXQgdGhlc2UgaW50ZXJ2ZW5pbmcgcXVlcnkgcGFyYW1ldGVycyBhcmUKKyAgICAv
LyBpbnNlcnRpb25zIHRoYXQgZXhpc3QgaW4gb25lIFVSTCBidXQgbm90IHRoZSBvdGhlci4gV2Ug
dHJlYXQgdGhlbSBhcworICAgIC8vIHN1Y2gsIHN1YnRyYWN0aW5nIGZyb20gdGhlIG92ZXJhbGwg
c2NvcmUgZm9yIGVhY2ggb25lLiBIb3dldmVyLCB0aGlzCisgICAgLy8gYXNzdW1wdGlvbiBtaWdo
dCBlYXNpbHkgYmUgaW5jb3JyZWN0LiBJdCBtaWdodCBiZSB0aGF0IHRoZSBxdWVyeQorICAgIC8v
IHBhcmFtZXRlcnMgdGhhdCB3ZSdyZSBza2lwcGluZyBvdmVyIGluIG9uZSBVUkwgbWlnaHQgZXhp
c3QgaW4gdGhlIG90aGVyCisgICAgLy8gVVJMLiBJZiBzbywgdGhlbiB3ZSBhcmUgZm9yZWdvaW5n
IHRoZSBwb3NzaWJpbGl0eSBvZiB1c2luZyB0aG9zZSBtYXRjaGVzCisgICAgLy8gdG8gaW5jcmVh
c2UgdGhlIG92ZXJhbGwgbWF0Y2ggc2NvcmUgYmV0d2VlbiB0aGUgdHdvIFVSTHMuCisgICAgLy8K
KyAgICAvLyBUbyBhZGRyZXNzIHRoaXMgcHJvYmxlbSwgd2UgbWlnaHQgd2FudCB0byBjb25zaWRl
ciBzb3J0aW5nIHRoZSBxdWVyeQorICAgIC8vIHBhcmFtZXRlcnMgYnkgdGhlaXIgbmFtZXMuIEhv
d2V2ZXIsIGRvaW5nIHRoaXMgbWF5IGNhdXNlIHByb2JsZW1zIGlmIHRoZQorICAgIC8vIG9yZGVy
IG9mIHRoZSBwYXJhbWV0ZXJzIGlzIHNpZ25pZmljYW50LiBTbyBpZiB3ZSBkZWNpZGUgdG8gdGFr
ZSB0aGUKKyAgICAvLyBhcHByb2FjaCBvZiBzb3J0aW5nIHRoZSBwYXJhbWV0ZXJzLCBrZWVwIGlu
IG1pbmQgdGhpcyBwb3NzaWJsZSBkcmF3YmFjay4KKworICAgIGF1dG8gcmVxdWVzdFBhcmFtZXRl
ciA9IHN0ZDo6YmVnaW4ocmVxdWVzdFBhcmFtZXRlcnMpOworICAgIGF1dG8gcmVzb3VyY2VQYXJh
bWV0ZXIgPSBzdGQ6OmJlZ2luKHJlc291cmNlUGFyYW1ldGVycyk7CisKKyAgICBmb3IgKDsgcmVx
dWVzdFBhcmFtZXRlciAhPSBzdGQ6OmVuZChyZXF1ZXN0UGFyYW1ldGVycykgJiYgcmVzb3VyY2VQ
YXJhbWV0ZXIgIT0gc3RkOjplbmQocmVzb3VyY2VQYXJhbWV0ZXJzKTsgKytyZXF1ZXN0UGFyYW1l
dGVyLCArK3Jlc291cmNlUGFyYW1ldGVyKSB7CisgICAgICAgIGlmIChyZXF1ZXN0UGFyYW1ldGVy
LT5maXJzdCA9PSByZXNvdXJjZVBhcmFtZXRlci0+Zmlyc3QpIHsKKyNpZiBFTkFCTEUoV1RGX0lO
VEVSTkFMX0RFQlVHR0lORykKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0UGFyYW1ldGVyLT5zZWNv
bmQgPT0gcmVzb3VyY2VQYXJhbWV0ZXItPnNlY29uZCkKKyAgICAgICAgICAgICAgICBERUJVR19M
T0coIk1hdGNoaW5nIHBhcmFtZXRlciBuYW1lcyBhbmQgdmFsdWVzOiBcIiV7cHVibGljfXNcIiA9
IFwiJXtwdWJsaWN9c1wiIiwgREVCVUdfU1RSKHJlcXVlc3RQYXJhbWV0ZXItPmZpcnN0KSwgREVC
VUdfU1RSKHJlcXVlc3RQYXJhbWV0ZXItPnNlY29uZCkpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIERFQlVHX0xPRygiTWlzbWF0Y2hpbmcgcGFyYW1ldGVyIHZhbHVlczogXCIl
e3B1YmxpY31zXCIgPSBcIiV7cHVibGljfXNcIiB2cy4gXCIle3B1YmxpY31zXCIiLCBERUJVR19T
VFIocmVxdWVzdFBhcmFtZXRlci0+Zmlyc3QpLCBERUJVR19TVFIocmVxdWVzdFBhcmFtZXRlci0+
c2Vjb25kKSwgREVCVUdfU1RSKHJlc291cmNlUGFyYW1ldGVyLT5zZWNvbmQpKTsKKyNlbmRpZgor
ICAgICAgICAgICAgc2NvcmUgKz0gKHJlcXVlc3RQYXJhbWV0ZXItPnNlY29uZCA9PSByZXNvdXJj
ZVBhcmFtZXRlci0+c2Vjb25kKSA/IGtQYXJhbWV0ZXJNYXRjaFNjb3JlIDoga1BhcmFtZXRlck1p
c21hdGNoU2NvcmU7CisgICAgICAgICAgICBERUJVR19MT0coIlNjb3JlID0gJWQiLCBzY29yZSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBERUJVR19MT0coIk1pc21hdGNoaW5nIHBh
cmFtZXRlciBuYW1lczogJXtwdWJsaWN9cywgJXtwdWJsaWN9cyIsIERFQlVHX1NUUihyZXF1ZXN0
UGFyYW1ldGVyLT5maXJzdCksIERFQlVHX1NUUihyZXNvdXJjZVBhcmFtZXRlci0+Zmlyc3QpKTsK
KworICAgICAgICAgICAgY29uc3QgYXV0byBzY2FuRm9yd2FyZEZvck1hdGNoID0gW3RoaXMsICZz
Y29yZSwga1BhcmFtZXRlck1hdGNoU2NvcmUsIGtQYXJhbWV0ZXJNaXNtYXRjaFNjb3JlLCBrUGFy
YW1ldGVyTWlzc2luZ1Njb3JlXShjb25zdCBhdXRvJiBmaXhlZEl0ZXIsIGF1dG8mIHNjYW5uaW5n
SXRlciwgY29uc3QgYXV0byYgc2Nhbm5lckVuZCkgeworICAgICAgICAgICAgICAgIGF1dG8gc2Nh
bm5lciA9IHNjYW5uaW5nSXRlcjsKKyAgICAgICAgICAgICAgICB3aGlsZSAoc2Nhbm5lciAhPSBz
Y2FubmVyRW5kICYmIHNjYW5uZXItPmZpcnN0ICE9IGZpeGVkSXRlci0+Zmlyc3QpCisgICAgICAg
ICAgICAgICAgICAgICsrc2Nhbm5lcjsKKyAgICAgICAgICAgICAgICBpZiAoc2Nhbm5lciA9PSBz
Y2FubmVyRW5kKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgREVCVUdfTE9HKCJTa2lwcGluZyBwYXN0ICVkIG5vbi1tYXRjaGluZyBwYXJhbWV0ZXIg
bmFtZXMiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0ZDo6ZGlzdGFuY2Uoc2Nhbm5pbmdJdGVyLCBzY2Fu
bmVyKSkpOworICAgICAgICAgICAgICAgIHNjb3JlICs9IGtQYXJhbWV0ZXJNaXNzaW5nU2NvcmUg
KiBzdGQ6OmRpc3RhbmNlKHNjYW5uaW5nSXRlciwgc2Nhbm5lcik7CisgICAgICAgICAgICAgICAg
REVCVUdfTE9HKCJTY29yZSA9ICVkIiwgc2NvcmUpOworI2lmIEVOQUJMRShXVEZfSU5URVJOQUxf
REVCVUdHSU5HKQorICAgICAgICAgICAgICAgIGlmIChmaXhlZEl0ZXItPnNlY29uZCA9PSBzY2Fu
bmVyLT5zZWNvbmQpCisgICAgICAgICAgICAgICAgICAgIERFQlVHX0xPRygiTWF0Y2hpbmcgcGFy
YW1ldGVyIG5hbWVzIGFuZCB2YWx1ZXM6IFwiJXtwdWJsaWN9c1wiID0gXCIle3B1YmxpY31zXCIi
LCBERUJVR19TVFIoZml4ZWRJdGVyLT5maXJzdCksIERFQlVHX1NUUihmaXhlZEl0ZXItPnNlY29u
ZCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgREVCVUdfTE9H
KCJNaXNtYXRjaGluZyBwYXJhbWV0ZXIgdmFsdWVzOiBcIiV7cHVibGljfXNcIiA9IFwiJXtwdWJs
aWN9c1wiIHZzLiBcIiV7cHVibGljfXNcIiIsIERFQlVHX1NUUihmaXhlZEl0ZXItPmZpcnN0KSwg
REVCVUdfU1RSKGZpeGVkSXRlci0+c2Vjb25kKSwgREVCVUdfU1RSKHNjYW5uZXItPnNlY29uZCkp
OworI2VuZGlmCisgICAgICAgICAgICAgICAgc2NvcmUgKz0gKGZpeGVkSXRlci0+c2Vjb25kID09
IHNjYW5uZXItPnNlY29uZCkgPyBrUGFyYW1ldGVyTWF0Y2hTY29yZSA6IGtQYXJhbWV0ZXJNaXNt
YXRjaFNjb3JlOworICAgICAgICAgICAgICAgIERFQlVHX0xPRygiU2NvcmUgPSAlZCIsIHNjb3Jl
KTsKKyAgICAgICAgICAgICAgICBzY2FubmluZ0l0ZXIgPSBzY2FubmVyOworICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKCFzY2Fu
Rm9yd2FyZEZvck1hdGNoKHJlcXVlc3RQYXJhbWV0ZXIsIHJlc291cmNlUGFyYW1ldGVyLCBzdGQ6
OmVuZChyZXNvdXJjZVBhcmFtZXRlcnMpKSkgeworICAgICAgICAgICAgICAgIGlmICghc2NhbkZv
cndhcmRGb3JNYXRjaChyZXNvdXJjZVBhcmFtZXRlciwgcmVxdWVzdFBhcmFtZXRlciwgc3RkOjpl
bmQocmVxdWVzdFBhcmFtZXRlcnMpKSkgeworICAgICAgICAgICAgICAgICAgICBERUJVR19MT0co
IlVubWF0Y2hlZCBwYXJhbWV0ZXI6ICV7cHVibGljfXM9JXtwdWJsaWN9cyIsIERFQlVHX1NUUihy
ZXF1ZXN0UGFyYW1ldGVyLT5maXJzdCksIERFQlVHX1NUUihyZXF1ZXN0UGFyYW1ldGVyLT5zZWNv
bmQpKTsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdfTE9HKCJVbm1hdGNoZWQgcGFyYW1ldGVy
OiAle3B1YmxpY31zPSV7cHVibGljfXMiLCBERUJVR19TVFIocmVzb3VyY2VQYXJhbWV0ZXItPmZp
cnN0KSwgREVCVUdfU1RSKHJlc291cmNlUGFyYW1ldGVyLT5zZWNvbmQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgc2NvcmUgKz0ga1BhcmFtZXRlck1pc3NpbmdTY29yZSArIGtQYXJhbWV0ZXJNaXNz
aW5nU2NvcmU7CisgICAgICAgICAgICAgICAgICAgIERFQlVHX0xPRygiU2NvcmUgPSAlZCIsIHNj
b3JlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBERUJVR19MT0coIkFkanVzdGluZyBmb3IgdHJhaWxpbmcgcGFyYW1ldGVycyIpOwor
ICAgIHNjb3JlICs9IGtQYXJhbWV0ZXJNaXNzaW5nU2NvcmUKKyAgICAgICAgKiAoc3RkOjpkaXN0
YW5jZShyZXF1ZXN0UGFyYW1ldGVyLCBzdGQ6OmVuZChyZXF1ZXN0UGFyYW1ldGVycykpCisgICAg
ICAgICAgICArIHN0ZDo6ZGlzdGFuY2UocmVzb3VyY2VQYXJhbWV0ZXIsIHN0ZDo6ZW5kKHJlc291
cmNlUGFyYW1ldGVycykpKTsKKyAgICBERUJVR19MT0coIlNjb3JlID0gJWQiLCBzY29yZSk7CisK
KyAgICByZXR1cm4gc2NvcmU7Cit9CisKK3ZvaWQgTWFuYWdlcjo6bG9hZENhY2hlZFJlc291cmNl
cygpCit7CisgICAgVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiBsaW5lczsKKyAgICBpZiAoIXJlYWRG
aWxlKHJlcG9ydFJlY29yZFBhdGgoKSwgbGluZXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBm
b3IgKGNvbnN0IGF1dG8mIGxpbmUgOiBsaW5lcykgeworICAgICAgICBpZiAobGluZS5zaXplKCkg
IT0gMikgeworICAgICAgICAgICAgREVCVUdfTE9HX0VSUk9SKCJsaW5lLnNpemUgPT0gJWQiLCAo
aW50KSBsaW5lLnNpemUoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIENhY2hlZFJlc291cmNlIG5ld1Jlc291cmNlKGhhc2hUb1BhdGgobGluZVswXSkpOwor
ICAgICAgICBtX2NhY2hlZFJlc291cmNlcy5hcHBlbmQoV1RGTW92ZShuZXdSZXNvdXJjZSkpOwor
ICAgIH0KKworICAgIHN0ZDo6c29ydChzdGQ6OmJlZ2luKG1fY2FjaGVkUmVzb3VyY2VzKSwgc3Rk
OjplbmQobV9jYWNoZWRSZXNvdXJjZXMpLCBbXShhdXRvJiBsZWZ0LCBhdXRvJiByaWdodCkgewor
ICAgICAgICByZXR1cm4gV1RGOjpjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4obGVmdC51cmwoKS5z
dHJpbmcoKSwgcmlnaHQudXJsKCkuc3RyaW5nKCkpOworICAgIH0pOworCisgICAgZm9yIChhdXRv
JiByZXNvdXJjZSA6IG1fY2FjaGVkUmVzb3VyY2VzKQorICAgICAgICBsb2dMb2FkZWRSZXNvdXJj
ZShyZXNvdXJjZSk7Cit9CisKK1N0cmluZyBNYW5hZ2VyOjpyZXBvcnRMb2FkUGF0aCgpCit7Cisg
ICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX3JlY29yZFJlcGxh
eUNhY2hlTG9jYXRpb24sIGtGaWxlTmFtZVJlcG9ydExvYWQpOworfQorCitTdHJpbmcgTWFuYWdl
cjo6cmVwb3J0UmVjb3JkUGF0aCgpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChtX3JlY29yZFJlcGxheUNhY2hlTG9jYXRpb24sIGtGaWxlTmFtZVJlcG9y
dFJlY29yZCk7Cit9CisKK1N0cmluZyBNYW5hZ2VyOjpyZXBvcnRSZXBsYXlQYXRoKCkKK3sKKyAg
ICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fcmVjb3JkUmVwbGF5
Q2FjaGVMb2NhdGlvbiwga0ZpbGVOYW1lUmVwb3J0UmVwbGF5KTsKK30KKworU3RyaW5nIE1hbmFn
ZXI6OnJlcXVlc3RUb1BhdGgoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
KQoreworICAgIC8vIFRPRE86IGNvbWUgdXAgd2l0aCBhIG1vcmUgY29tcHJlaGVuc2l2ZSBoYXNo
IHRoYXQgaW5jbHVkZXMgSFRUUCBtZXRob2QKKyAgICAvLyBhbmQgcG9zc2libHkgb3RoZXIgdmFs
dWVzIChzdWNoIGFzIGhlYWRlcnMpLgorCisgICAgY29uc3QgYXV0byYgaGFzaCA9IHN0cmluZ1Rv
SGFzaChyZXF1ZXN0LnVybCgpLnN0cmluZygpKTsKKyAgICBjb25zdCBhdXRvJiBwYXRoID0gaGFz
aFRvUGF0aChoYXNoKTsKKyAgICByZXR1cm4gcGF0aDsKK30KKworU3RyaW5nIE1hbmFnZXI6OnN0
cmluZ1RvSGFzaChjb25zdCBTdHJpbmcmIHMpCit7CisgICAgV1RGOjpNRDUgbWQ1OworICAgIGlm
IChzLmNoYXJhY3RlcnM4KCkpCisgICAgICAgIG1kNS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPihzLmNoYXJhY3RlcnM4KCkpLCBzLmxlbmd0aCgpKTsKKyAgICBlbHNl
CisgICAgICAgIG1kNS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihz
LmNoYXJhY3RlcnMxNigpKSwgMiAqIHMubGVuZ3RoKCkpOworCisgICAgV1RGOjpNRDU6OkRpZ2Vz
dCBkaWdlc3Q7CisgICAgbWQ1LmNoZWNrc3VtKGRpZ2VzdCk7CisKKyAgICByZXR1cm4gV1RGOjpi
YXNlNjRVUkxFbmNvZGUoJmRpZ2VzdFswXSwgV1RGOjpNRDU6Omhhc2hTaXplKTsKK30KKworCitT
dHJpbmcgTWFuYWdlcjo6aGFzaFRvUGF0aChjb25zdCBTdHJpbmcmIGhhc2gpCit7CisgICAgU3Ry
aW5nIHJlc3VsdDsKKworICAgIGNvbnN0IGludCBrTnVtYmVyT2ZQYXJlbnREaXJlY3RvcmllcyA9
IDE7CisgICAgY29uc3QgaW50IGtQYXJlbnREaXJlY3RvcnlOYW1lTGVuZ3RoID0gMjsKKyAgICB1
bnNpZ25lZCBpbmRleCA9IDA7CisKKyAgICBmb3IgKGludCBkaXJOdW0gPSAwOyBkaXJOdW0gPCBr
TnVtYmVyT2ZQYXJlbnREaXJlY3RvcmllczsgKytkaXJOdW0pIHsKKyAgICAgICAgcmVzdWx0LmFw
cGVuZChoYXNoLnN1YnN0cmluZyhpbmRleCwga1BhcmVudERpcmVjdG9yeU5hbWVMZW5ndGgpKTsK
KyAgICAgICAgcmVzdWx0LmFwcGVuZCgnLycpOworICAgICAgICBpbmRleCArPSBrUGFyZW50RGly
ZWN0b3J5TmFtZUxlbmd0aDsKKyAgICB9CisKKyAgICByZXN1bHQuYXBwZW5kKGhhc2guc3Vic3Ry
aW5nKGluZGV4KSk7CisgICAgYXV0byBwYXRoMSA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChtX3JlY29yZFJlcGxheUNhY2hlTG9jYXRpb24sIGtEaXJOYW1lUmVzb3VyY2VzKTsK
KyAgICBhdXRvIHBhdGgyID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhdGgx
LCByZXN1bHQpOworICAgIHJldHVybiBwYXRoMiArICIuZGF0YSI7Cit9CisKK3ZvaWQgTWFuYWdl
cjo6bG9nUmVjb3JkZWRSZXNvdXJjZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QpCit7CisgICAgLy8gTG9nIG5ldHdvcmsgcmVzb3VyY2VzIGFzIHRoZXkgYXJlIGNhY2hl
ZCB0byBkaXNrLgorCisgICAgaWYgKGVuc3VyZUZpbGVIYW5kbGUocmVwb3J0UmVjb3JkUGF0aCgp
LCAmbV9yZWNvcmRGaWxlSGFuZGxlKSkgeworICAgICAgICBjb25zdCBhdXRvJiB1cmwgPSByZXF1
ZXN0LnVybCgpOworICAgICAgICBwcmludFRvRmlsZShtX3JlY29yZEZpbGVIYW5kbGUsICIlcyAl
c1xuIiwgREVCVUdfU1RSKHN0cmluZ1RvSGFzaCh1cmwuc3RyaW5nKCkpKSwgREVCVUdfU1RSKHVy
bC5zdHJpbmcoKSkpOworICAgIH0KK30KKwordm9pZCBNYW5hZ2VyOjpsb2dMb2FkZWRSZXNvdXJj
ZShDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpCit7CisgICAgLy8gTG9nIGNhY2hlZCByZXNvdXJj
ZXMgYXMgdGhleSBhcmUgbG9hZGVkIGZyb20gZGlzay4KKworICAgIGlmIChlbnN1cmVGaWxlSGFu
ZGxlKHJlcG9ydExvYWRQYXRoKCksICZtX2xvYWRGaWxlSGFuZGxlKSkKKyAgICAgICAgcHJpbnRU
b0ZpbGUobV9sb2FkRmlsZUhhbmRsZSwgIiVzXG4iLCBERUJVR19TVFIocmVzb3VyY2UudXJsKCku
c3RyaW5nKCkpKTsKK30KKwordm9pZCBNYW5hZ2VyOjpsb2dQbGF5ZWRCYWNrUmVzb3VyY2UoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBib29sIHdhc0NhY2hlTWlzcykK
K3sKKyAgICAvLyBMb2cgbmV0d29yayByZXNvdXJjZXMgdGhhdCBhcmUgcmVxdWVzdGVkIGR1cmlu
ZyByZXBsYXkuCisKKyAgICBjb25zdCBhdXRvJiB1cmwgPSByZXF1ZXN0LnVybCgpOworCisgICAg
aWYgKHdhc0NhY2hlTWlzcykKKyAgICAgICAgREVCVUdfTE9HKCJDYWNoZSBtaXNzOiBVUkwgPSAl
e3B1YmxpY31zIiwgREVCVUdfU1RSKHVybC5zdHJpbmcoKSkpOworICAgIGVsc2UKKyAgICAgICAg
REVCVUdfTE9HKCJDYWNoZSBoaXQ6ICBVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RSKHVybC5z
dHJpbmcoKSkpOworCisgICAgaWYgKGVuc3VyZUZpbGVIYW5kbGUocmVwb3J0UmVwbGF5UGF0aCgp
LCAmbV9yZXBsYXlGaWxlSGFuZGxlKSkKKyAgICAgICAgcHJpbnRUb0ZpbGUobV9yZXBsYXlGaWxl
SGFuZGxlLCAiJXMgJXNcbiIsIHdhc0NhY2hlTWlzcyA/ICJtaXNzIiA6ICJoaXQgIiwgREVCVUdf
U1RSKHVybC5zdHJpbmcoKSkpOworfQorCitib29sIE1hbmFnZXI6OmVuc3VyZUZpbGVIYW5kbGUo
Y29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgRmlsZUhhbmRsZSogZmlsZUhhbmRsZSkKK3sKKyAgICAv
LyBJZiB0aGUgZmlsZSBpcyBhbHJlYWR5IG9wZW4sIHRoZW4gZG8gbm90aGluZy4KKworICAgIGlm
IChmaWxlSGFuZGxlICYmICpmaWxlSGFuZGxlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IC8vIFRyeSBvcGVuaW5nIHRoZSBmaWxlLgorCisgICAgKmZpbGVIYW5kbGUgPSBvcGVuQ2FjaGVG
aWxlKGZpbGVQYXRoLCBXZWJDb3JlOjpPcGVuRm9yV3JpdGUpOworICAgIHJldHVybiAqZmlsZUhh
bmRsZTsKK30KKworRmlsZUhhbmRsZSBNYW5hZ2VyOjpvcGVuQ2FjaGVGaWxlKGNvbnN0IFN0cmlu
ZyYgZmlsZVBhdGgsIFdlYkNvcmU6OkZpbGVPcGVuTW9kZSBtb2RlKQoreworICAgIC8vIElmIHdl
IGNhbiB0cml2aWFsbHkgb3BlbiB0aGUgZmlsZSwgdGhlbiBkbyB0aGF0IGFuZCByZXR1cm4gdGhl
IG5ldyBmaWxlCisgICAgLy8gaGFuZGxlLgorCisgICAgRmlsZUhhbmRsZSBmID0gRmlsZUhhbmRs
ZTo6b3BlbkZpbGUoZmlsZVBhdGgsIG1vZGUpOworICAgIGlmIChmKQorICAgICAgICByZXR1cm4g
ZjsKKworICAgIC8vIElmIHdlJ3JlIG9wZW5pbmcgdGhlIGZpbGUgZm9yIHdyaXRpbmcgKGluY2x1
ZGluZyBhcHBlbmRpbmcpLCB0aGVuIHRyeQorICAgIC8vIGFnYWluIGFmdGVyIG1ha2luZyBzdXJl
IGFsbCBpbnRlcm1lZGlhdGUgZGlyZWN0b3JpZXMgaGF2ZSBiZWVuIGNyZWF0ZWQuCisKKyAgICBp
ZiAobW9kZSAhPSBXZWJDb3JlOjpPcGVuRm9yUmVhZCkgeworICAgICAgICBjb25zdCBhdXRvJiBw
YXJlbnREaXIgPSBXZWJDb3JlOjpkaXJlY3RvcnlOYW1lKGZpbGVQYXRoKTsKKyAgICAgICAgaWYg
KCFXZWJDb3JlOjptYWtlQWxsRGlyZWN0b3JpZXMocGFyZW50RGlyKSkgeworICAgICAgICAgICAg
REVCVUdfTE9HX0VSUk9SKCJFcnJvciAlZCB0cnlpbmcgdG8gY3JlYXRlIGludGVybWVkaWF0ZSBk
aXJlY3RvcmllczogJXtwdWJsaWN9cyIsIGVycm5vLCBERUJVR19TVFIocGFyZW50RGlyKSk7Cisg
ICAgICAgICAgICByZXR1cm4gZjsKKyAgICAgICAgfQorCisgICAgICAgIGYgPSBGaWxlSGFuZGxl
OjpvcGVuRmlsZShmaWxlUGF0aCwgbW9kZSk7CisgICAgICAgIGlmIChmKQorICAgICAgICAgICAg
cmV0dXJuIGY7CisgICAgfQorCisgICAgLy8gQ291bGQgbm90IG9wZW4gdGhlIGZpbGUuIExvZyB0
aGUgZXJyb3IgYW5kIGxlYXZlLCByZXR1cm5pbmcgdGhlIGludmFsaWQKKyAgICAvLyBmaWxlIGhh
bmRsZS4KKworICAgIGlmIChtb2RlID09IFdlYkNvcmU6Ok9wZW5Gb3JSZWFkKQorICAgICAgICBE
RUJVR19MT0dfRVJST1IoIkVycm9yICVkIHRyeWluZyB0byBvcGVuICV7cHVibGljfXMgZm9yIHJl
YWRpbmciLCBlcnJubywgREVCVUdfU1RSKGZpbGVQYXRoKSk7CisgICAgZWxzZQorICAgICAgICBE
RUJVR19MT0dfRVJST1IoIkVycm9yICVkIHRyeWluZyB0byBvcGVuICV7cHVibGljfXMgZm9yIHdy
aXRpbmciLCBlcnJubywgREVCVUdfU1RSKGZpbGVQYXRoKSk7CisKKyAgICByZXR1cm4gZjsKK30K
KworYm9vbCBNYW5hZ2VyOjpyZWFkRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoLCBWZWN0b3I8
VmVjdG9yPFN0cmluZz4+JiBsaW5lcykKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAg
ICBXZWJDb3JlOjpNYXBwZWRGaWxlRGF0YSBmaWxlKGZpbGVQYXRoLCBzdWNjZXNzKTsKKyAgICBp
ZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gYmVnaW4gPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihmaWxlLmRhdGEoKSk7CisgICAgYXV0byBl
bmQgPSBiZWdpbiArIGZpbGUuc2l6ZSgpOworCisgICAgVmVjdG9yPFN0cmluZz4gbGluZTsKKyAg
ICB3aGlsZSAoZ2V0TGluZShiZWdpbiwgZW5kLCBsaW5lKSkKKyAgICAgICAgbGluZXMuYXBwZW5k
KFdURk1vdmUobGluZSkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTWFuYWdlcjo6
Z2V0TGluZSh1aW50OF90IGNvbnN0IComIHAsIHVpbnQ4X3QgY29uc3QgKiBjb25zdCBlbmQsIFZl
Y3RvcjxTdHJpbmc+JiBsaW5lKQoreworICAgIC8vIE5COiBSZXR1cm5zIHRydWUgaWYgdGhlcmUg
bWF5IGJlIG1vcmUgZGF0YSB0byBnZXQsIGZhbHNlIGlmIHdlJ3ZlIGhpdAorICAgIC8vIHRoZSBl
bmQgb2YgdGhlIGJ1ZmZlci4KKworICAgIC8vIERFQlVHX0xPRygiR2V0dGluZyBhIGxpbmUiKTsK
KworICAgIGxpbmUuY2xlYXIoKTsKKworICAgIGlmIChwID09IGVuZCkgeworICAgICAgICAvLyBE
RUJVR19MT0coIkl0ZXJhdG9yIGF0IGVuZDsgcmV0dXJuaW5nIGZhbHNlIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBTdHJpbmcgd29yZDsKKyAgICB3aGlsZSAoZ2V0V29y
ZChwLCBlbmQsIHdvcmQpKSB7CisgICAgICAgIGlmICghd29yZC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIC8vIERFQlVHX0xPRygiQWRkaW5nIHdvcmQ6ICV7cHVibGljfXMiLCBERUJVR19TVFIo
d29yZCkpOworICAgICAgICAgICAgbGluZS5hcHBlbmQod29yZCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNYW5hZ2VyOjpnZXRXb3JkKHVpbnQ4X3Qg
Y29uc3QgKiYgcCwgdWludDhfdCBjb25zdCAqIGNvbnN0IGVuZCwgU3RyaW5nJiB3b3JkKQorewor
ICAgIC8vIE5COiBSZXR1cm5zIHRydWUgaWYgYSAocG9zc2libHkgZW1wdHkpIHdvcmQgd2FzIGZv
dW5kIGFuZCB0aGVyZSBtYXkgYmUKKyAgICAvLyBtb3JlLCBmYWxzZSBpZiB3ZSd2ZSBoaXQgdGhl
IGVuZCBvZiBsaW5lIG9yIGJ1ZmZlci4KKworICAgIC8vIERFQlVHX0xPRygiR2V0dGluZyBhIHdv
cmQiKTsKKworICAgIGlmIChwID09IGVuZCkgeworICAgICAgICAvLyBERUJVR19MT0coIkl0ZXJh
dG9yIGF0IGVuZDsgcmV0dXJuaW5nIGZhbHNlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBpZiAoKnAgPT0gJ1xuJykgeworICAgICAgICAvLyBERUJVR19MT0coIkl0ZXJh
dG9yIGhpdCBFT0w7IHJldHVybmluZyBmYWxzZSIpOworICAgICAgICArK3A7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIGVzY2FwaW5nID0gZmFsc2U7CisgICAgYm9v
bCBpZ25vcmluZyA9IGZhbHNlOworCisgICAgd29yZCA9IFN0cmluZygpOworCisgICAgLy8gREVC
VUdfTE9HKCJJdGVyYXRpbmciKTsKKworICAgIGZvciAoIDsgcCAhPSBlbmQ7ICsrcCkgeworICAg
ICAgICBpZiAoaWdub3JpbmcpIHsKKyAgICAgICAgICAgIGlmICgqcCA9PSAnXG4nKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgaWYgKGVzY2FwaW5nKSB7CisgICAgICAg
ICAgICB3b3JkLmFwcGVuZCgqcCk7CisgICAgICAgICAgICBlc2NhcGluZyA9IGZhbHNlOworICAg
ICAgICB9IGVsc2UgaWYgKCpwID09ICcjJykgeworICAgICAgICAgICAgaWdub3JpbmcgPSB0cnVl
OworICAgICAgICB9IGVsc2UgaWYgKCpwID09ICdcXCcpIHsKKyAgICAgICAgICAgIGVzY2FwaW5n
ID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmICgqcCA9PSAnICcpIHsKKyAgICAgICAgICAgIGlm
ICghd29yZC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxz
ZSBpZiAoKnAgPT0gJ1xuJykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB3b3JkLmFwcGVuZCgqcCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgTWFuYWdlcjo6cHJpbnRUb0ZpbGUoY29uc3QgRmlsZUhhbmRsZSYgZiwgY29uc3QgY2hh
ciogZm9ybWF0LCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3Ms
IGZvcm1hdCk7CisKKyAgICBjaGFyKiBidWZmZXIgPSBudWxscHRyOworICAgIHZhc3ByaW50Zigm
YnVmZmVyLCBmb3JtYXQsIGFyZ3MpOworICAgIGF1dG8gd3JpdGVSZXN1bHQgPSBmLndyaXRlVG9G
aWxlKGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikpOworICAgIGZyZWUoYnVmZmVyKTsKKworICAgIHZh
X2VuZChhcmdzKTsKKworICAgIHJldHVybiB3cml0ZVJlc3VsdCA+PSAwOworfQorCitTdHJpbmcg
TWFuYWdlcjo6YmFzZVVSTEFzU3RyaW5nKGNvbnN0IFdlYkNvcmU6OlVSTCYgdXJsKQoreworICAg
IHJldHVybiB1cmwuc3RyaW5nKCkubGVmdCh1cmwucGF0aFN0YXJ0KCkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzlmZTRjOTc1ZmM2MDYwZWJkNDFiMmJhZjJkZDU4ZWE4YmYzNmNhYgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0Nh
cHR1cmVNYW5hZ2VyLmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRlICJOZXR3b3JrQ2Fw
dHVyZVR5cGVzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9VUkxQYXJzZXIuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFJl
c291cmNlUmVxdWVzdDsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29y
a0NhcHR1cmUgeworCitjbGFzcyBDYWNoZWRSZXNvdXJjZTsKKworLyoKKyAqIFNlcnZlcyB0aHJl
ZSBwdXJwb3NlczoKKyAqCisgKiAqIEtlZXBzIHRoZSBzdGF0ZSBvZiB3aGV0aGVyIHdlIGFyZSBy
ZWNvcmRpbmcsIHJlcGxheWluZywgb3IgbmVpdGhlci4KKyAqICogS2VlcHMgdGhlIGxpc3Qgb2Yg
Y2FjaGVkIHJlc291cmNlcyAoaWYgcmVwbGF5aW5nKSwgcGVyZm9ybXMgZnV6enkgbWF0Y2hpbmcg
b24gdGhlbS4KKyAqICogVXRpbGl0aWVzIGZvciBsb2dnaW5nIGFuZCBmaWxlIG1hbmFnZW1lbnQu
CisgKgorICogVE9ETzogUGVyaGFwcyB3ZSBzaG91bGQgYnJlYWsgdGhpcyB1cCBpbnRvIHRocmVl
IGNsYXNzZXM/CisgKi8KK2NsYXNzIE1hbmFnZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KE1hbmFnZXIpOworICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5ldmVyRGVzdHJveWVkPE1hbmFnZXI+
OworCitwdWJsaWM6CisgICAgc3RhdGljIE1hbmFnZXImIHNpbmdsZXRvbigpOworCisgICAgdm9p
ZCBpbml0aWFsaXplKGJvb2wgc2hvdWxkUmVjb3JkTmV0d29ya1JlcXVlc3RzLCBib29sIHNob3Vs
ZFJlcGxheU5ldHdvcmtSZXF1ZXN0cywgY29uc3QgU3RyaW5nJiByZWNvcmRSZXBsYXlDYWNoZUxv
Y2F0aW9uKTsKKyAgICB2b2lkIHRlcm1pbmF0ZSgpOworCisgICAgYm9vbCBpc1JlY29yZGluZygp
IGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkUmVjb3JkTmV0d29ya1JlcXVlc3RzOyB9CisgICAgYm9v
bCBpc1JlcGxheWluZygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkUmVwbGF5TmV0d29ya1JlcXVl
c3RzOyB9CisKKyAgICBDYWNoZWRSZXNvdXJjZSogZmluZE1hdGNoKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYpOworCisgICAgdm9pZCBsb2dSZWNvcmRlZFJlc291cmNlKGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIHZvaWQgbG9nTG9hZGVkUmVzb3VyY2UoQ2Fj
aGVkUmVzb3VyY2UmKTsKKyAgICB2b2lkIGxvZ1BsYXllZEJhY2tSZXNvdXJjZShjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBib29sIHdhc0NhY2hlTWlzcyk7CisKKyAgICBGaWxlSGFu
ZGxlIG9wZW5DYWNoZUZpbGUoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6RmlsZU9wZW5Nb2RlKTsK
KworICAgIFN0cmluZyByZXF1ZXN0VG9QYXRoKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYpOworCitwcml2YXRlOgorICAgIE1hbmFnZXIoKSA9IGRlZmF1bHQ7CisgICAgfk1hbmFnZXIo
KSA9IGRlbGV0ZTsKKworICAgIENhY2hlZFJlc291cmNlKiBmaW5kRXhhY3RNYXRjaChjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICBDYWNoZWRSZXNvdXJjZSogZmluZEJlc3RG
dXp6eU1hdGNoKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIGludCBmdXp6
eU1hdGNoVVJMcygKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6VVJMJiByZXF1ZXN0VVJMLCBjb25z
dCBXZWJDb3JlOjpVUkxQYXJzZXI6OlVSTEVuY29kZWRGb3JtJiByZXF1ZXN0UGFyYW1ldGVycywK
KyAgICAgICAgY29uc3QgV2ViQ29yZTo6VVJMJiByZXNvdXJjZVVSTCwgY29uc3QgV2ViQ29yZTo6
VVJMUGFyc2VyOjpVUkxFbmNvZGVkRm9ybSYgcmVzb3VyY2VQYXJhbWV0ZXJzKTsKKworICAgIHZv
aWQgbG9hZENhY2hlZFJlc291cmNlcygpOworCisgICAgU3RyaW5nIHJlcG9ydExvYWRQYXRoKCk7
CisgICAgU3RyaW5nIHJlcG9ydFJlY29yZFBhdGgoKTsKKyAgICBTdHJpbmcgcmVwb3J0UmVwbGF5
UGF0aCgpOworCisgICAgU3RyaW5nIHN0cmluZ1RvSGFzaChjb25zdCBTdHJpbmcmKTsKKyAgICBT
dHJpbmcgaGFzaFRvUGF0aChjb25zdCBTdHJpbmcmIGhhc2gpOworCisgICAgYm9vbCBlbnN1cmVG
aWxlSGFuZGxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIEZpbGVIYW5kbGUqKTsKKworICAgIGJv
b2wgcmVhZEZpbGUoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgVmVjdG9yPFZlY3RvcjxTdHJpbmc+
PiYgYnVmZmVyKTsKKyAgICBib29sIGdldExpbmUodWludDhfdCBjb25zdCAqJiBwLCB1aW50OF90
IGNvbnN0ICogY29uc3QgZW5kLCBWZWN0b3I8U3RyaW5nPiYgbGluZSk7CisgICAgYm9vbCBnZXRX
b3JkKHVpbnQ4X3QgY29uc3QgKiYgcCwgdWludDhfdCBjb25zdCAqIGNvbnN0IGVuZCwgU3RyaW5n
JiB3b3JkKTsKKyAgICBib29sIHByaW50VG9GaWxlKGNvbnN0IEZpbGVIYW5kbGUmLCBjb25zdCBj
aGFyKiBmb3JtYXQsIC4uLik7CisKKyAgICBTdHJpbmcgYmFzZVVSTEFzU3RyaW5nKGNvbnN0IFdl
YkNvcmU6OlVSTCYpOworCitwcml2YXRlOgorICAgIGJvb2wgbV9zaG91bGRSZWNvcmROZXR3b3Jr
UmVxdWVzdHMgeyBmYWxzZSB9OworICAgIGJvb2wgbV9zaG91bGRSZXBsYXlOZXR3b3JrUmVxdWVz
dHMgeyBmYWxzZSB9OworCisgICAgU3RyaW5nIG1fcmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbjsK
KworICAgIEZpbGVIYW5kbGUgbV9sb2FkRmlsZUhhbmRsZTsKKyAgICBGaWxlSGFuZGxlIG1fcmVw
bGF5RmlsZUhhbmRsZTsKKyAgICBGaWxlSGFuZGxlIG1fcmVjb3JkRmlsZUhhbmRsZTsKKworICAg
IFZlY3RvcjxDYWNoZWRSZXNvdXJjZT4gbV9jYWNoZWRSZXNvdXJjZXM7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZWNvcmRlci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMGUwYmU3ZmE3ZjA2MmEzMjA2NTg2MzdmNjNhNGQ3MDlmOWUwYzVjMAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0
d29ya0NhcHR1cmVSZWNvcmRlci5jcHAKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVSZWNvcmRlci5oIgor
CisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKworI2luY2x1ZGUgIkVuY29kZXIuaCIKKyNp
bmNsdWRlICJOZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVy
ZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJTdHJpbmdSZWZlcmVuY2UuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL1NoYXJlZEJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgorCisjZGVmaW5lIERF
QlVHX0NMQVNTIE1hbmFnZXIKKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29y
a0NhcHR1cmUgeworCitzdGF0aWMgY29uc3QgY2hhciBrTWVzc2FnZVJlY2VpdmVyTmFtZVtdID0g
IngiOyAvLyBNdXN0IGJlIG5vbi1lbXB0eS4KK3N0YXRpYyBjb25zdCBjaGFyIGtNZXNzYWdlTmFt
ZVtdID0gIiI7CitzdGF0aWMgY29uc3QgdWludDY0X3Qga0Rlc3RpbmF0aW9uSUQgPSAwOworCit2
b2lkIFJlY29yZGVyOjpyZWNvcmRSZXF1ZXN0U2VudChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCit7CisgICAgLy8gVGhpcyBjbGFzcyByZWNvcmRzIE5ldHdvcmtMb2Fk
J3MgcHJvY2VzcyBvZiBsb2FkaW5nIGEgbmV0d29yayByZXNvdXJjZS4KKyAgICAvLyBOZXR3b3Jr
TG9hZCBkb2VzIHRoaXMgYnkgY3JlYXRpbmcgYSBOZXR3b3JrRGF0YVRhc2sgYW5kIGNhbGxpbmcg
cmVzdW1lCisgICAgLy8gb24gaXQuIFRoaXMgY2FsbCB0byByZXN1bWUgY2FuIGJlIGNhbGxlZCBp
bW1lZGlhdGVseSBhZnRlciB0aGUgdGFzayBoYXMKKyAgICAvLyBiZWVuIGNyZWF0ZWQsIG9yIC0t
IGlmIHRoZSBsb2FkaW5nIGlzIG1hcmtlZCBhcyBkZWZlcnJlZCAtLSBpdCBjYW4gYmUKKyAgICAv
LyBjYWxsZWQgbGF0ZXIgaW4gTmV0d29ya0xvYWQ6OnNldERlZmVycmVkKHRydWUpLiBJbiBmYWN0
LCB0aGUgbGF0dGVyIGNhbgorICAgIC8vIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBpZiB0aGUg
bG9hZGluZyBpcyBzdXNwZW5kZWQgYW5kIHJlc3VtZWQKKyAgICAvLyBtdWx0aXBsZSB0aW1lcy4K
KyAgICAvLworICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbiBib3RoIHBsYWNlcyB3aGVy
ZSByZXN1bWUgaXMgY2FsbGVkLiBPdXIgdGFzayBpcworICAgIC8vIHRvIGNhdGNoIHRoZSBjYWxs
IHRvIE5ldHdvcmtEYXRhVGFzazo6cmVzdW1lIHRoYXQgc3RhcnRzIHRoZSBuZXR3b3JrCisgICAg
Ly8gbG9hZGluZyBwcm9jZXNzLiBXZSB3YW50IHRvIGlnbm9yZSB0aGUgb3RoZXIgY2FsbHMgdG8g
cmVzdW1lLiBPdXIKKyAgICAvLyBhcHByb2FjaCB0byBrbm93aW5nIHdoaWNoIG9uZSBpcyB0aGUg
Zmlyc3QgaXMgdG8gY2hlY2sgb3V0IGNvbGxlY3Rpb24gb2YKKyAgICAvLyByZWNvcmRlZCBldmVu
dHMuIElmIGl0IGlzIGVtcHR5LCB0aGVuIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgaW50byB0aGUK
KyAgICAvLyByZWNvcmRlciwgYW5kIHdlIHdhbnQgdG8gcmVjb3JkIHRoZSBldmVudC4gT3RoZXJ3
aXNlLCBpZ25vcmUgaXQuCisKKyAgICBpZiAobV9ldmVudHMuc2l6ZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBERUJVR19MT0coIlNlbnQgcmVxdWVzdCBmb3IgVVJMID0gJXtwdWJsaWN9cyIs
IERFQlVHX1NUUihyZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisKKyAgICBtX2luaXRpYWxSZXF1
ZXN0ID0gcmVxdWVzdDsKKyAgICByZWNvcmRFdmVudChSZXF1ZXN0U2VudEV2ZW50KHJlcXVlc3Qp
KTsKK30KKwordm9pZCBSZWNvcmRlcjo6cmVjb3JkUmVzcG9uc2VSZWNlaXZlZChjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICAvLyBDYWxsZWQgd2hlbiBy
ZWNlaXZpbmcgYSByZXNwb25zZSBvdGhlciB0aGFuIGEgcmVkaXJlY3Qgb3IgZXJyb3IuCisKKyAg
ICBERUJVR19MT0coIlJlY2VpdmVkIHJlc3BvbnNlIGZyb20gVVJMID0gJXtwdWJsaWN9cyIsIERF
QlVHX1NUUihyZXNwb25zZS51cmwoKS5zdHJpbmcoKSkpOworICAgIEFTU0VSVChtX2V2ZW50cy5z
aXplKCkpOworCisgICAgLy8gVE9ETzogSXMgdGhlcmUgYSBiZXR0ZXIgcmVzcG9uc2UgdG8gcmVj
ZWl2aW5nIGEgbXVsdGktcGFydCByZXNvdXJjZT8KKyAgICAvLyBMZWFybiBtb3JlIGFib3V0IG11
bHRpLXBhcnQgcmVzb3VyY2VzLiBXaHkgZG9uJ3Qgd2UgcmVjb3JkIHRoZXNlPyAoTm90ZSwKKyAg
ICAvLyB0aGlzIGRlY2lzaW9uIGlzIGJhc2VkIG9uIHNvbWUgTmV0d29ya0NhY2hlIGNvZGUuKQor
CisgICAgaWYgKCFyZXNwb25zZS5pc011bHRpcGFydCgpKQorICAgICAgICByZWNvcmRFdmVudChS
ZXNwb25zZVJlY2VpdmVkRXZlbnQocmVzcG9uc2UpKTsKKyAgICBlbHNlCisgICAgICAgIG1fZXZl
bnRzLmNsZWFyKCk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnJlY29yZFJlZGlyZWN0UmVjZWl2ZWQo
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBERUJVR19MT0coIlJlY2VpdmVkIHJl
ZGlyZWN0IHRvIFVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIocmVxdWVzdC51cmwoKS5zdHJp
bmcoKSkpOworICAgIEFTU0VSVChtX2V2ZW50cy5zaXplKCkpOworCisgICAgcmVjb3JkRXZlbnQo
UmVkaXJlY3RSZWNlaXZlZEV2ZW50KHJlcXVlc3QsIHJlc3BvbnNlKSk7Cit9CisKK3ZvaWQgUmVj
b3JkZXI6OnJlY29yZFJlZGlyZWN0U2VudChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QpCit7CisgICAgREVCVUdfTE9HKCJTZW50IHJlZGlyZWN0IGZvciBVUkwgPSAle3B1
YmxpY31zIiwgREVCVUdfU1RSKHJlcXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKKyAgICBBU1NFUlQo
bV9ldmVudHMuc2l6ZSgpKTsKKworICAgIHJlY29yZEV2ZW50KFJlZGlyZWN0U2VudEV2ZW50KHJl
cXVlc3QpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6cmVjb3JkRGF0YVJlY2VpdmVkKFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlciYgYnVmZmVyKQoreworICAgIERFQlVHX0xPRygiUmVjZWl2ZWQgJXUgYnl0
ZXMgb2YgZGF0YSIsIGJ1ZmZlci5zaXplKCkpOworCisgICAgaWYgKCFtX2V2ZW50cy5zaXplKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIFByZXZlbnQgbWVtb3J5IGdyb3d0aCBpbiBjYXNl
IG9mIHN0cmVhbWluZyBkYXRhLiBUT0RPOiBJcyB0aGVyZSBhIGJldHRlcgorICAgIC8vIHJlc3Bv
bnNlIHRvIHRoaXM/IElmIHdlIGVuY291bnRlciB0aGlzIGNvbmRpdGlvbiwgYWxsIG9mIG91ciBy
ZWNvcmRpbmcKKyAgICAvLyBzaWxlbnRseSBnb2VzIG91dCB0aGUgd2luZG93LiBSZXBsYXkgd2ls
bCBub3Qgd29yaywgYW5kIHRoZSB1c2VyIGRvZXNuJ3QKKyAgICAvLyBrbm93IHRoYXQuCisKKyAg
ICBjb25zdGV4cHIgc2l6ZV90IGtNYXhpbXVtQ2FjaGVCdWZmZXJTaXplID0gMTAgKiAxMDI0ICog
MTAyNDsKKyAgICBtX2RhdGFMZW5ndGggKz0gYnVmZmVyLnNpemUoKTsKKyAgICBpZiAobV9kYXRh
TGVuZ3RoIDw9IGtNYXhpbXVtQ2FjaGVCdWZmZXJTaXplKQorICAgICAgICByZWNvcmRFdmVudChE
YXRhUmVjZWl2ZWRFdmVudChidWZmZXIpKTsKKyAgICBlbHNlCisgICAgICAgIG1fZXZlbnRzLmNs
ZWFyKCk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnJlY29yZEZpbmlzaChjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBERUJVR19MT0coIkZpbmlzaGVkIik7CisKKyAg
ICBpZiAoIW1fZXZlbnRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVjb3JkRXZl
bnQoRmluaXNoZWRFdmVudChlcnJvcikpOworICAgIHdyaXRlRXZlbnRzKCk7Cit9CisKK3ZvaWQg
UmVjb3JkZXI6OndyaXRlRXZlbnRzKCkKK3sKKyAgICAvLyBUT0RPOiBEZXRlcm1pbmUgd2hhdCB0
byBkbyBpZiB3ZSdyZSBhc2tlZCB0byBjYWNoZSBhIHJlc291cmNlIHRoYXQncworICAgIC8vIGFs
cmVhZHkgaW4gdGhlIGNhY2hlLiBXaGF0IGRvZXMgc3VjaCBhbiBvY2N1cnJlbmNlIG1lYW4/IFNo
b3VsZG4ndCBvdXIKKyAgICAvLyBub3JtYWwgY2FjaGVzIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBl
bmluZz8gKFBhcnRpYWwgYW5zd2VyOiBpdCdzCisgICAgLy8gcG9zc2libGUgZm9yIHRoZSBzYW1l
IHJlc291cmNlIHRvIGJlIHJlcXVlc3RlZCBtdWx0aXBsZSB0aW1lcyBpbgorICAgIC8vIGRpZmZl
cmVudCB3YXlzLiBGb3IgaW5zdGFuY2UsIGl0IGNhbiBiZSBjYWxsZWQgd2l0aCBkaWZmZXJlbnQg
SFRUUAorICAgIC8vIG1ldGhvZHMgb3Igd2l0aCBkaWZmZXJlbnQgaGVhZGVycy4gV2UgbmVlZCB0
byBhY2NvdW50IGZvciB0aGF0LikKKworICAgIC8vIFRPRE86VXNpbmcgSVBDOjpFbmNvZGVyIGlz
IGEgYml0IGhlYXZ5LWhhbmRlZC4gSXQgd3JpdGVzIG91dCBhIGhlYWRlciB3ZQorICAgIC8vIGRv
bid0IG5lZWQsIGFuZCBJJ20gbm90IHN1cmUgd2UgbmVlZCB0byBhYmlkZSBieSBpdHMgYWxpZ25t
ZW50IHJ1bGVzLgorICAgIC8vIE5ldHdvcmtDYWNoZSBoYXMgaXRzIG93biBFbmNvZGVyL0RlY29k
ZXIgLS0gcGVyaGFwcyB3ZSBzaG91bGQgdGFrZSB0aGUKKyAgICAvLyBzYW1lIGFwcHJvYWNoLiBI
b3dldmVyLCB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aG9zZSBjbGFzc2VzIGRpcmVjdGx5LgorICAg
IC8vIEZpcnN0LCB0aGV5IGRvIHNvbWUgY2hlY2tzdW1taW5nIHRoYXQgd2UgZG9uJ3QgbmVlZC4g
U2Vjb25kLCBJJ3ZlIGJlZW4KKyAgICAvLyB3YXJuZWQgbm90IHRvIHJlbHkgb24gdGhlIHN0b3Jh
Z2UgZm9ybWF0IG9mIE5ldHdvcmtDYWNoZSwgd2hpY2ggbWVhbnMKKyAgICAvLyBub3QgdXNpbmcg
dGhlaXIgc3RvcmFnZSBjbGFzc2VzIGRpcmVjdGx5LiBUaGlyZCwgc2luY2Ugd2UgbGltaXQKKyAg
ICAvLyByZXNvdXJjZXMgdG8gMTBNaUIsIHdlIGRvbid0IG5lZWQgdG8gc3RvcmUgYWxsIGxlbmd0
aHMgYXMgNjQtYml0IHZhbHVlczsKKyAgICAvLyAzMi1iaXQgd2lsbCB3b3JrIGZpbmUuCisKKyAg
ICBJUEM6OkVuY29kZXIgZW5jb2RlcihrTWVzc2FnZVJlY2VpdmVyTmFtZSwga01lc3NhZ2VOYW1l
LCBrRGVzdGluYXRpb25JRCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBldmVudCA6IG1fZXZlbnRz
KSB7CisgICAgICAgIFdURjo6dmlzaXQoW3RoaXMsICZlbmNvZGVyXShjb25zdCBhdXRvJiBldmVu
dCkgeworICAgICAgICAgICAgYXV0byB0eXBlID0gZXZlbnQua1R5cGU7CisgICAgICAgICAgICBl
bmNvZGVyIDw8IHR5cGU7CisgICAgICAgICAgICBldmVudC5lbmNvZGUoZW5jb2Rlcik7CisgICAg
ICAgIH0sIGV2ZW50KTsKKyAgICB9CisKKyAgICBGaWxlSGFuZGxlIGhhbmRsZSA9IG9wZW5GaWxl
Rm9yUmVxdWVzdChtX2luaXRpYWxSZXF1ZXN0KTsKKyAgICBpZiAoIWhhbmRsZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKGhhbmRsZS53cml0ZVRvRmlsZShlbmNvZGVyLmJ1ZmZlcigpLCBl
bmNvZGVyLmJ1ZmZlclNpemUoKSkgPT0gLTEpCisgICAgICAgIERFQlVHX0xPR19FUlJPUigiRXJy
b3IgdHJ5aW5nIHRvIHdyaXRlIHRvIGZpbGUgZm9yIFVSTCA9ICV7cHVibGljfXMiLCBERUJVR19T
VFIobV9pbml0aWFsUmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworfQorCitGaWxlSGFuZGxlIFJl
Y29yZGVyOjpvcGVuRmlsZUZvclJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0KQoreworICAgIFN0cmluZyBwYXRoID0gTWFuYWdlcjo6c2luZ2xldG9uKCkucmVx
dWVzdFRvUGF0aChyZXF1ZXN0KTsKKyAgICBhdXRvIGhhbmRsZSA9IE1hbmFnZXI6OnNpbmdsZXRv
bigpLm9wZW5DYWNoZUZpbGUocGF0aCwgV2ViQ29yZTo6T3BlbkZvcldyaXRlKTsKKworICAgIGlm
IChoYW5kbGUpCisgICAgICAgIE1hbmFnZXI6OnNpbmdsZXRvbigpLmxvZ1JlY29yZGVkUmVzb3Vy
Y2UocmVxdWVzdCk7CisKKyAgICByZXR1cm4gaGFuZGxlOworfQorCit9IC8vIG5hbWVzcGFjZSBO
ZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUo
TkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVjb3JkZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
N2EzYjQzMTI2OWYwNGJiMjc4NGE0OTk0ZGQ5OTAyNTExM2ZlM2JkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJl
Y29yZGVyLmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlRXZl
bnQuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZVR5cGVzLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaW5jbHVkZSA8Y2hy
b25vPgorI2luY2x1ZGUgPHV0aWxpdHk+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFJl
c291cmNlRXJyb3I7CitjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CitjbGFzcyBSZXNvdXJjZVJlc3Bv
bnNlOworY2xhc3MgU2hhcmVkQnVmZmVyOworfQorCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIEVu
Y29kZXI7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJl
IHsKKworY2xhc3MgUmVjb3JkZXIgeworcHVibGljOgorICAgIHZvaWQgcmVjb3JkUmVxdWVzdFNl
bnQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgdm9pZCByZWNvcmRSZXNw
b25zZVJlY2VpdmVkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2b2lk
IHJlY29yZFJlZGlyZWN0UmVjZWl2ZWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOworICAgIHZvaWQgcmVjb3JkUmVkaXJl
Y3RTZW50KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIHZvaWQgcmVjb3Jk
RGF0YVJlY2VpdmVkKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciYpOworICAgIHZvaWQgcmVjb3JkRmlu
aXNoKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IHdyaXRlRXZlbnRzKCk7CisgICAgRmlsZUhhbmRsZSBvcGVuRmlsZUZvclJlcXVlc3QoY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
KyAgICB2b2lkIHJlY29yZEV2ZW50KFQmJiBldmVudCkKKyAgICB7CisgICAgICAgIG1fZXZlbnRz
LmFwcGVuZChDYXB0dXJlRXZlbnQoV1RGTW92ZShldmVudCkpKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgdXNpbmcgQ2FwdHVyZUV2ZW50cyA9IFZlY3RvcjxDYXB0dXJlRXZlbnQ+OworICAgIENh
cHR1cmVFdmVudHMgbV9ldmVudHM7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1faW5p
dGlhbFJlcXVlc3Q7CisgICAgc2l6ZV90IG1fZGF0YUxlbmd0aCB7IDAgfTsKK307CisKK30gLy8g
bmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuY3BwIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40MmQ1ZTU0NzNkYzBhNjUyODA1ODAwYjNlNzNmMjFkNDcwZTE1NDMxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9O
ZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmNwcApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuaCIK
KworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVy
ZUxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCIKKyNpbmNsdWRl
ICJOZXR3b3JrRGF0YVRhc2tSZXBsYXkuaCIKKyNpbmNsdWRlICJOZXR3b3JrTG9hZFBhcmFtZXRl
cnMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgorCisjZGVmaW5lIERF
QlVHX0NMQVNTIFJlcGxheWVyCisKK25hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIE5ldHdv
cmtDYXB0dXJlIHsKKworUmVwbGF5ZXI6OlJlcGxheWVyKCkKK3sKK30KKworUmVmPE5ldHdvcmtE
YXRhVGFzaz4gUmVwbGF5ZXI6OnJlcGxheVJlc291cmNlKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9u
LCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNsaWVudCwgY29uc3QgTmV0d29ya0xvYWRQYXJhbWV0
ZXJzJiBwYXJhbWV0ZXJzKQoreworICAgIGF1dG8gZm91bmRSZXNvdXJjZSA9IE1hbmFnZXI6OnNp
bmdsZXRvbigpLmZpbmRNYXRjaChwYXJhbWV0ZXJzLnJlcXVlc3QpOworICAgIE1hbmFnZXI6OnNp
bmdsZXRvbigpLmxvZ1BsYXllZEJhY2tSZXNvdXJjZShwYXJhbWV0ZXJzLnJlcXVlc3QsICFmb3Vu
ZFJlc291cmNlKTsKKyAgICByZXR1cm4gTmV0d29ya0RhdGFUYXNrUmVwbGF5OjpjcmVhdGUoc2Vz
c2lvbiwgY2xpZW50LCBwYXJhbWV0ZXJzLCBmb3VuZFJlc291cmNlKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgTmV0d29ya0NhcHR1cmUKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXBsYXllci5oIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNDUyODQwNzE1ODQ2M2ZlZGU2MDg0YzhmNDYwNzQ3NzdlODY5YWRhNwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0Nh
cHR1cmVSZXBsYXllci5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRlIDx3dGYvUmVmLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgTmV0d29ya0RhdGFUYXNrOworY2xhc3MgTmV0
d29ya0RhdGFUYXNrQ2xpZW50OworY2xhc3MgTmV0d29ya0xvYWRQYXJhbWV0ZXJzOworY2xhc3Mg
TmV0d29ya1Nlc3Npb247Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIE5ldHdv
cmtDYXB0dXJlIHsKKworY2xhc3MgUmVwbGF5ZXIgeworcHVibGljOgorICAgIFJlcGxheWVyKCk7
CisgICAgUmVmPE5ldHdvcmtEYXRhVGFzaz4gcmVwbGF5UmVzb3VyY2UoTmV0d29ya1Nlc3Npb24m
LCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmLCBjb25zdCBOZXR3b3JrTG9hZFBhcmFtZXRlcnMmKTsK
K307CisKK30gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlVHlwZXMuaCBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVUeXBl
cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjkyZjY5YmUzMTZjOTk3ODliOGU1OGMyZTYzMDJmZDkyYmQ1YjU5ODYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJl
L05ldHdvcmtDYXB0dXJlVHlwZXMuaApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKworI2luY2x1ZGUgPFdl
YkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworbmFtZXNwYWNlIE5l
dHdvcmtDYXB0dXJlIHsKKworY2xhc3MgRmlsZUhhbmRsZSBmaW5hbCB7CitwdWJsaWM6CisgICAg
RmlsZUhhbmRsZSgpCisgICAgICAgIDogbV9maWxlSGFuZGxlKFdlYkNvcmU6OmludmFsaWRQbGF0
Zm9ybUZpbGVIYW5kbGUpIHsgfQorICAgIEZpbGVIYW5kbGUoV2ViQ29yZTo6UGxhdGZvcm1GaWxl
SGFuZGxlIGZpbGVIYW5kbGUpCisgICAgICAgIDogbV9maWxlSGFuZGxlKGZpbGVIYW5kbGUpIHsg
fQorICAgIEZpbGVIYW5kbGUoRmlsZUhhbmRsZSYmIG90aGVyKQorICAgICAgICA6IG1fZmlsZUhh
bmRsZShzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmlsZUhhbmRsZSwgV2ViQ29yZTo6aW52YWxpZFBs
YXRmb3JtRmlsZUhhbmRsZSkpIHsgfQorICAgIH5GaWxlSGFuZGxlKCkKKyAgICB7CisgICAgICAg
IGNsb3NlRmlsZSgpOworICAgIH0KKyAgICBGaWxlSGFuZGxlJiBvcGVyYXRvcj0oV2ViQ29yZTo6
UGxhdGZvcm1GaWxlSGFuZGxlIGZpbGVIYW5kbGUpCisgICAgeworICAgICAgICBjbG9zZUZpbGUo
KTsKKyAgICAgICAgbV9maWxlSGFuZGxlID0gZmlsZUhhbmRsZTsKKyAgICAgICAgcmV0dXJuICp0
aGlzOworICAgIH0KKyAgICBGaWxlSGFuZGxlJiBvcGVyYXRvcj0oRmlsZUhhbmRsZSYmIG90aGVy
KQorICAgIHsKKyAgICAgICAgY2xvc2VGaWxlKCk7CisgICAgICAgIG1fZmlsZUhhbmRsZSA9IHN0
ZDo6ZXhjaGFuZ2Uob3RoZXIubV9maWxlSGFuZGxlLCBXZWJDb3JlOjppbnZhbGlkUGxhdGZvcm1G
aWxlSGFuZGxlKTsKKyAgICAgICAgcmV0dXJuKnRoaXM7CisgICAgfQorCisgICAgRmlsZUhhbmRs
ZShjb25zdCBGaWxlSGFuZGxlJikgPSBkZWxldGU7CisgICAgRmlsZUhhbmRsZSYgb3BlcmF0b3I9
KGNvbnN0IEZpbGVIYW5kbGUmKSA9IGRlbGV0ZTsKKworICAgIG9wZXJhdG9yIFdlYkNvcmU6OlBs
YXRmb3JtRmlsZUhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZUhhbmRsZTsgfQorICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBXZWJDb3JlOjppc0hhbmRsZVZh
bGlkKG1fZmlsZUhhbmRsZSk7IH0KKworICAgIHN0YXRpYyBGaWxlSGFuZGxlIG9wZW5GaWxlKGNv
bnN0IFN0cmluZyYgcGF0aCwgV2ViQ29yZTo6RmlsZU9wZW5Nb2RlIG1vZGUpCisgICAgeworICAg
ICAgICByZXR1cm4gRmlsZUhhbmRsZShXZWJDb3JlOjpvcGVuRmlsZShwYXRoLCBtb2RlKSk7Cisg
ICAgfQorICAgIGludCByZWFkRnJvbUZpbGUodm9pZCogZGF0YSwgaW50IGxlbmd0aCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpyZWFkRnJvbUZpbGUobV9maWxlSGFuZGxl
LCByZWludGVycHJldF9jYXN0PGNoYXIqPihkYXRhKSwgbGVuZ3RoKTsKKyAgICB9CisgICAgaW50
IHdyaXRlVG9GaWxlKGNvbnN0IHZvaWQqIGRhdGEsIGludCBsZW5ndGgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gV2ViQ29yZTo6d3JpdGVUb0ZpbGUobV9maWxlSGFuZGxlLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSwgbGVuZ3RoKTsKKyAgICB9CisgICAgdm9pZCBj
bG9zZUZpbGUoKQorICAgIHsKKyAgICAgICAgV2ViQ29yZTo6Y2xvc2VGaWxlKG1fZmlsZUhhbmRs
ZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBt
X2ZpbGVIYW5kbGU7Cit9OworCisKK3RlbXBsYXRlIDx0eXBlbmFtZSAuLi4gVHlwZXM+CitzdHJ1
Y3QgVHlwZUhvbGRlciB7CisgICAgLy8gQSBXVEY6OlZhcmlhbnQgb2YgdGhlIGdpdmVuIFR5cGVz
LgorICAgIHVzaW5nIFZhcmlhbnRUeXBlID0gV1RGOjpWYXJpYW50PFR5cGVzLi4uPjsKKworICAg
IC8vIFRoZSAwLWJhc2VkIGluZGV4IGluIFR5cGVzIHdoZXJlIFJlcXVlc3RlZFR5cGUgY2FuIGJl
IGZvdW5kLgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBSZXF1ZXN0ZWRUeXBlPgorICAgIHN0YXRp
YyBjb25zdCBhdXRvIFR5cGVJbmRleCA9IFdURjo6X190eXBlX2luZGV4PFJlcXVlc3RlZFR5cGUs
IFR5cGVzLi4uPjo6X192YWx1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJl
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBUFRV
UkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05l
dHdvcmtEYXRhVGFza1JlcGxheS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YXB0dXJlL05ldHdvcmtEYXRhVGFza1JlcGxheS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjI2NjUyZmYwODNk
ZDA3ZGViMDI4ZTBmYWM3MTk1ODhhZGE3NTZjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0RhdGFUYXNrUmVwbGF5LmNwcApA
QCAtMCwwICsxLDMwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJOZXR3b3JrRGF0YVRhc2tSZXBsYXkuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRV
UkUpCisKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZUNhY2hlZFJlc291cmNlLmgiCisjaW5jbHVk
ZSAiTmV0d29ya0NhcHR1cmVFdmVudC5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlTG9nZ2lu
Zy5oIgorI2luY2x1ZGUgIk5ldHdvcmtMb2FkUGFyYW1ldGVycy5oIgorI2luY2x1ZGUgIk5ldHdv
cmtTZXNzaW9uLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9IVFRQSGVhZGVyTmFtZXMuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0hUVFBQYXJzZXJzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYXJzZWRDb250
ZW50UmFuZ2UuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorCisjZGVmaW5lIERFQlVHX0NM
QVNTIE5ldHdvcmtEYXRhVGFza1JlcGxheQorCituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFj
ZSBOZXR3b3JrQ2FwdHVyZSB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCB3ZWJLaXRSZWxh
eURvbWFpbiA9ICJXZWJLaXRSZXBsYXkiOworCitOZXR3b3JrRGF0YVRhc2tSZXBsYXk6Ok5ldHdv
cmtEYXRhVGFza1JlcGxheShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNr
Q2xpZW50JiBjbGllbnQsIGNvbnN0IE5ldHdvcmtMb2FkUGFyYW1ldGVycyYgcGFyYW1ldGVycywg
Q2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQorICAgIDogTmV0d29ya0RhdGFUYXNrKHNlc3Npb24s
IGNsaWVudCwgcGFyYW1ldGVycy5yZXF1ZXN0LCBwYXJhbWV0ZXJzLmFsbG93U3RvcmVkQ3JlZGVu
dGlhbHMsIHBhcmFtZXRlcnMuc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVj
dCkKKyAgICAsIG1fY3VycmVudFJlcXVlc3QobV9maXJzdFJlcXVlc3QpCisgICAgLCBtX3Jlc291
cmNlKHJlc291cmNlKQoreworICAgIERFQlVHX0xPRygicmVxdWVzdCBVUkwgPSAle3B1YmxpY31z
IiwgREVCVUdfU1RSKG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisgICAgREVCVUdf
TE9HKCJjYWNoZWQgVVJMID0gJXtwdWJsaWN9cyIsIHJlc291cmNlID8gREVCVUdfU1RSKHJlc291
cmNlLT51cmwoKS5zdHJpbmcoKSkgOiAiPG5vdCBmb3VuZD4iKTsKKworICAgIG1fc2Vzc2lvbi0+
cmVnaXN0ZXJOZXR3b3JrRGF0YVRhc2soKnRoaXMpOworCisgICAgaWYgKHJlc291cmNlKQorICAg
ICAgICBtX2V2ZW50U3RyZWFtID0gcmVzb3VyY2UtPmV2ZW50U3RyZWFtKCk7Cit9CisKK05ldHdv
cmtEYXRhVGFza1JlcGxheTo6fk5ldHdvcmtEYXRhVGFza1JlcGxheSgpCit7CisgICAgREVCVUdf
TE9HKCJVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RSKG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0
cmluZygpKSk7CisKKyAgICBtX3Nlc3Npb24tPnVucmVnaXN0ZXJOZXR3b3JrRGF0YVRhc2soKnRo
aXMpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza1JlcGxheTo6cmVzdW1lKCkKK3sKKyAgICBE
RUJVR19MT0coIlVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9maXJzdFJlcXVlc3QudXJs
KCkuc3RyaW5nKCkpKTsKKworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwg
bV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0
YXRlID0gU3RhdGU6OlJ1bm5pbmc7CisKKyAgICBpZiAobV9zY2hlZHVsZWRGYWlsdXJlVHlwZSAh
PSBOb0ZhaWx1cmUpIHsKKyAgICAgICAgQVNTRVJUKG1fZmFpbHVyZVRpbWVyLmlzQWN0aXZlKCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW5xdWV1ZUNhY2hlZEV2ZW50SGFuZGxl
cigpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza1JlcGxheTo6c3VzcGVuZCgpCit7CisgICAg
REVCVUdfTE9HKCJVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RSKG1fZmlyc3RSZXF1ZXN0LnVy
bCgpLnN0cmluZygpKSk7CisKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8
IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9z
dGF0ZSA9IFN0YXRlOjpTdXNwZW5kZWQ7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5
OjpjYW5jZWwoKQoreworICAgIERFQlVHX0xPRygiIik7CisKKyAgICBpZiAobV9zdGF0ZSA9PSBT
dGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9zdGF0ZSA9IFN0YXRlOjpDYW5jZWxpbmc7Cit9CisKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrUmVwbGF5Ojpjb21wbGV0ZSgpCit7CisgICAgREVCVUdfTE9HKCJVUkwgPSAl
e3B1YmxpY31zIiwgREVCVUdfU1RSKG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisK
KyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3N0YXRlID0gU3RhdGU6OkNvbXBsZXRlZDsKKyAgICBtX3Jlc291cmNlID0gbnVsbHB0
cjsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmludmFsaWRhdGVBbmRDYW5jZWwo
KQoreworICAgIERFQlVHX0xPRygiVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2ZpcnN0
UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworCisgICAgY2FuY2VsKCk7CisgICAgY29tcGxldGUo
KTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmVucXVldWVDYWNoZWRFdmVudEhh
bmRsZXIoKQoreworICAgIERFQlVHX0xPRygiVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUiht
X2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworCisgICAgUnVuTG9vcDo6bWFpbigpLmRp
c3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKKyAgICAgICAg
REVCVUdfTE9HKCJlbnF1ZXVlQ2FjaGVkRXZlbnRIYW5kbGVyIGNhbGxiYWNrIik7CisKKyAgICAg
ICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OlN1c3BlbmRlZCkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0g
U3RhdGU6OkNvbXBsZXRlZCB8fCAhbV9jbGllbnQpIHsKKyAgICAgICAgICAgIGNvbXBsZXRlKCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1fcmVzb3Vy
Y2UpIHsKKyAgICAgICAgICAgIERFQlVHX0xPR19FUlJPUigiRXJyb3IgbG9hZGluZyByZXNvdXJj
ZTogY291bGQgbm90IGZpbmQgY2FjaGVkIHJlc291cmNlLCBVUkwgPSAle3B1YmxpY31zIiwgREVC
VUdfU1RSKG1fY3VycmVudFJlcXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKKyAgICAgICAgICAgIGRp
ZEZpbmlzaChFcnJvcjo6Tm90Rm91bmRFcnJvcik7IC8vIFRPRE86IFR1cm4gdGhpcyBpbnRvIGEg
NDA0PworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtX2N1cnJlbnRSZXF1ZXN0Lmh0dHBNZXRob2QoKSwg
ImdldCIpKSB7CisgICAgICAgICAgICBERUJVR19MT0dfRVJST1IoIkVycm9yIGxvYWRpbmcgcmVz
b3VyY2U6IHVuc3VwcG9ydGVkIG1ldGhvZCAoJXtwdWJsaWN9cyksIFVSTCA9ICV7cHVibGljfXMi
LCBERUJVR19TVFIobV9jdXJyZW50UmVxdWVzdC5odHRwTWV0aG9kKCkpLCBERUJVR19TVFIobV9j
dXJyZW50UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworICAgICAgICAgICAgZGlkRmluaXNoKEVy
cm9yOjpNZXRob2ROb3RBbGxvd2VkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGF1dG8gZXZlbnQgPSBtX2V2ZW50U3RyZWFtLm5leHRFdmVudCgpOworICAgICAg
ICBpZiAoIWV2ZW50KSB7CisgICAgICAgICAgICBERUJVR19MT0dfRVJST1IoIkVycm9yIGxvYWRp
bmcgcmVzb3VyY2U6IG5leHRFdmVudCByZXR1cm4gbnVsbCwgVVJMID0gJXtwdWJsaWN9cyIsIERF
QlVHX1NUUihtX2N1cnJlbnRSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisgICAgICAgICAgICBk
aWRGaW5pc2goRXJyb3I6Ok5vdEZvdW5kRXJyb3IpOyAvLyBUT0RPOiBUdXJuIHRoaXMgaW50byBh
IDQwND8KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGF1
dG8gdmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoCisgICAgICAgICAgICBbdGhpc10oY29uc3Qg
UmVxdWVzdFNlbnRFdmVudCYgZXZlbnQpIHsKKyAgICAgICAgICAgICAgICByZXBsYXlSZXF1ZXN0
U2VudChldmVudCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgW3RoaXNdKGNvbnN0IFJl
c3BvbnNlUmVjZWl2ZWRFdmVudCYgZXZlbnQpIHsKKyAgICAgICAgICAgICAgICByZXBsYXlSZXNw
b25zZVJlY2VpdmVkKGV2ZW50KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbdGhpc10o
Y29uc3QgUmVkaXJlY3RSZWNlaXZlZEV2ZW50JiBldmVudCkgeworICAgICAgICAgICAgICAgIHJl
cGxheVJlZGlyZWN0UmVjZWl2ZWQoZXZlbnQpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
IFt0aGlzXShjb25zdCBSZWRpcmVjdFNlbnRFdmVudCYgZXZlbnQpIHsKKyAgICAgICAgICAgICAg
ICByZXBsYXlSZWRpcmVjdFNlbnQoZXZlbnQpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
IFt0aGlzXShjb25zdCBEYXRhUmVjZWl2ZWRFdmVudCYgZXZlbnQpIHsKKyAgICAgICAgICAgICAg
ICByZXBsYXlEYXRhUmVjZWl2ZWQoZXZlbnQpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
IFt0aGlzXShjb25zdCBGaW5pc2hlZEV2ZW50JiBldmVudCkgeworICAgICAgICAgICAgICAgIHJl
cGxheUZpbmlzaGVkKGV2ZW50KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIFdURjo6dmlz
aXQodmlzaXRvciwgKmV2ZW50KTsKKyAgICB9KTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tS
ZXBsYXk6OnJlcGxheVJlcXVlc3RTZW50KGNvbnN0IFJlcXVlc3RTZW50RXZlbnQmIGV2ZW50KQor
eworICAgIERFQlVHX0xPRygiVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2ZpcnN0UmVx
dWVzdC51cmwoKS5zdHJpbmcoKSkpOworCisjaWYgMAorICAgIC8vIFRPRE86IE5vdCBhbiBlcnJv
ciBpZiBmdXp6eSBtYXRjaGluZyByZXR1cm5lZCBhIHNsaWdodGx5IGRpZmZlcmVudCBVUkwuCisg
ICAgLy8gQnV0IHdlIG1pZ2h0IHdhbnQgdG8gY2hlY2sgdGhhdCB0aGUgbWFqb3IgcGFydHMgbWF0
Y2guCisgICAgaWYgKGV2ZW50LnJlcXVlc3QudXJsKCkgIT0gbV9jdXJyZW50UmVxdWVzdC51cmwo
KSkgeworICAgICAgICBERUJVR19MT0dfRVJST1IoIk1pc21hdGNoaW5nIHJlcXVlc3QgVVJMczoi
KTsKKyAgICAgICAgREVCVUdfTE9HX0VSUk9SKCIgICAgbV9jdXJyZW50UmVxdWVzdC51cmw6ICV7
cHVibGljfXMiLCBERUJVR19TVFIobV9jdXJyZW50UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOwor
ICAgICAgICBERUJVR19MT0dfRVJST1IoIiAgICBldmVudC5yZXF1ZXN0LnVybDogJXtwdWJsaWN9
cyIsIERFQlVHX1NUUihldmVudC5yZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisgICAgfQorI2Vu
ZGlmCisKKyAgICBlbnF1ZXVlQ2FjaGVkRXZlbnRIYW5kbGVyKCk7Cit9CisKK3ZvaWQgTmV0d29y
a0RhdGFUYXNrUmVwbGF5OjpyZXBsYXlSZXNwb25zZVJlY2VpdmVkKGNvbnN0IFJlc3BvbnNlUmVj
ZWl2ZWRFdmVudCYgZXZlbnQpCit7CisgICAgREVCVUdfTE9HKCJVUkwgPSAle3B1YmxpY31zIiwg
REVCVUdfU1RSKG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisKKyAgICBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlKGV2ZW50LnJlc3BvbnNlKTsKKyAgICBkaWRSZWNl
aXZlUmVzcG9uc2UoV1RGTW92ZShyZXNwb25zZSkpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFz
a1JlcGxheTo6cmVwbGF5UmVkaXJlY3RSZWNlaXZlZChjb25zdCBSZWRpcmVjdFJlY2VpdmVkRXZl
bnQmIGV2ZW50KQoreworICAgIERFQlVHX0xPRygiVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NU
UihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworCisgICAgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSByZWNlaXZlZFJlc3BvbnNlID0gZXZlbnQucmVzcG9uc2U7CisgICAgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0IHJlY2VpdmVkUmVxdWVzdCA9IGV2ZW50LnJlcXVlc3Q7CisKKyAg
ICBBU1NFUlQobV9jbGllbnQpOworICAgIG1fY2xpZW50LT53aWxsUGVyZm9ybUhUVFBSZWRpcmVj
dGlvbihXVEZNb3ZlKHJlY2VpdmVkUmVzcG9uc2UpLCBXVEZNb3ZlKHJlY2VpdmVkUmVxdWVzdCks
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIChjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmIHVwZGF0ZWRSZXF1ZXN0KSB7CisgICAgICAgIERFQlVHX0xPRygicmVw
bGF5UmVkaXJlY3RSZWNlaXZlZCBjYWxsYmFjazogVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NU
UihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworCisgICAgICAgIG1fY3VycmVudFJl
cXVlc3QgPSB1cGRhdGVkUmVxdWVzdDsKKyAgICAgICAgZW5xdWV1ZUNhY2hlZEV2ZW50SGFuZGxl
cigpOworICAgIH0pOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza1JlcGxheTo6cmVwbGF5UmVk
aXJlY3RTZW50KGNvbnN0IFJlZGlyZWN0U2VudEV2ZW50JiBldmVudCkKK3sKKyAgICBERUJVR19M
T0coIlVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9maXJzdFJlcXVlc3QudXJsKCkuc3Ry
aW5nKCkpKTsKKworI2lmIDAKKyAgICAvLyBUT0RPOiBOb3QgYW4gZXJyb3IgaWYgZnV6enkgbWF0
Y2hpbmcgcmV0dXJuZWQgYSBzbGlnaHRseSBkaWZmZXJlbnQgVVJMLgorICAgIC8vIEJ1dCB3ZSBt
aWdodCB3YW50IHRvIGNoZWNrIHRoYXQgdGhlIG1ham9yIHBhcnRzIG1hdGNoLgorICAgIGlmIChl
dmVudC5yZXF1ZXN0LnVybCgpICE9IG1fY3VycmVudFJlcXVlc3QudXJsKCkpIHsKKyAgICAgICAg
REVCVUdfTE9HX0VSUk9SKCJNaXNtYXRjaGluZyByZXF1ZXN0IFVSTHM6Iik7CisgICAgICAgIERF
QlVHX0xPR19FUlJPUigiICAgIG1fY3VycmVudFJlcXVlc3QudXJsOiAle3B1YmxpY31zIiwgREVC
VUdfU1RSKG1fY3VycmVudFJlcXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKKyAgICAgICAgREVCVUdf
TE9HX0VSUk9SKCIgICAgZXZlbnQucmVxdWVzdC51cmw6ICV7cHVibGljfXMiLCBERUJVR19TVFIo
ZXZlbnQucmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworICAgIH0KKyNlbmRpZgorCisgICAgZW5x
dWV1ZUNhY2hlZEV2ZW50SGFuZGxlcigpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza1JlcGxh
eTo6cmVwbGF5RGF0YVJlY2VpdmVkKGNvbnN0IERhdGFSZWNlaXZlZEV2ZW50JiBldmVudCkKK3sK
KyAgICBERUJVR19MT0coIlVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9maXJzdFJlcXVl
c3QudXJsKCkuc3RyaW5nKCkpKTsKKworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGll
bnQtPmRpZFJlY2VpdmVEYXRhKGV2ZW50LmRhdGEuY29weVJlZigpKTsKKworICAgIGVucXVldWVD
YWNoZWRFdmVudEhhbmRsZXIoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnJl
cGxheUZpbmlzaGVkKGNvbnN0IEZpbmlzaGVkRXZlbnQmIC8qZXZlbnQqLykKK3sKKyAgICBERUJV
R19MT0coIlVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9maXJzdFJlcXVlc3QudXJsKCku
c3RyaW5nKCkpKTsKKworICAgIGRpZEZpbmlzaCgvKmV2ZW50Ki8pOworfQorCit2b2lkIE5ldHdv
cmtEYXRhVGFza1JlcGxheTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UmJiByZXNwb25zZSwgRXJyb3IgZXJyb3JDb2RlKQoreworICAgIERFQlVHX0xPRygiKCV1
KSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlcnJvckNvZGUpKTsKKworICAgIEFTU0VSVChtX2Ns
aWVudCk7CisgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZU5ldHdvcmtTZXNzaW9uKFdU
Rk1vdmUocmVzcG9uc2UpLCBbdGhpcywgZXJyb3JDb2RlLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyldKFdlYkNvcmU6OlBvbGljeUFjdGlvbiBwb2xpY3lBY3Rpb24pIHsKKyAgICAgICAg
REVCVUdfTE9HKCJkaWRSZWNlaXZlUmVzcG9uc2UgY2FsbGJhY2sgKCV1KSIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihwb2xpY3lBY3Rpb24pKTsKKworICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0
ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkgeworICAgICAgICAg
ICAgY29tcGxldGUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChlcnJvckNvZGUgIT0gRXJyb3I6Ok5vRXJyb3IpIHsKKyAgICAgICAgICAgIGRpZEZpbmlz
aCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChw
b2xpY3lBY3Rpb24pIHsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpQb2xpY3lBY3Rpb246OlBvbGlj
eVVzZToKKyAgICAgICAgICAgIGVucXVldWVDYWNoZWRFdmVudEhhbmRsZXIoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkNvcmU6OlBvbGljeUFjdGlvbjo6UG9saWN5SWdu
b3JlOgorICAgICAgICAgICAgY29tcGxldGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFdlYkNvcmU6OlBvbGljeUFjdGlvbjo6UG9saWN5RG93bmxvYWQ6CisgICAgICAgICAg
ICBERUJVR19MT0dfRVJST1IoIldlYkNvcmU6OlBvbGljeUFjdGlvbjo6UG9saWN5RG93bmxvYWQi
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0
d29ya0RhdGFUYXNrUmVwbGF5OjpkaWRGaW5pc2goRXJyb3IgZXJyb3JDb2RlKQoreworICAgIERF
QlVHX0xPRygiKCV1KSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlcnJvckNvZGUpKTsKKworICAg
IGNvbXBsZXRlKCk7CisKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIGlmIChlcnJvckNvZGUg
IT0gRXJyb3I6Ok5vRXJyb3IpCisgICAgICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhFcnJv
cihXZWJDb3JlOjpSZXNvdXJjZUVycm9yKHdlYktpdFJlbGF5RG9tYWluLCBzdGF0aWNfY2FzdDxp
bnQ+KGVycm9yQ29kZSksIG1fZmlyc3RSZXF1ZXN0LnVybCgpLCBTdHJpbmcoKSkpOworICAgIGVs
c2UKKyAgICAgICAgbV9jbGllbnQtPmRpZENvbXBsZXRlV2l0aEVycm9yKHsgfSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtEYXRhVGFza1JlcGxheS5oIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41MmUwZjhiZjM2ODM1ZDMxNTAzMDM4ZGI4ZTI4NzFiOGYxMmFiNTU3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3
b3JrRGF0YVRhc2tSZXBsYXkuaApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKworI2luY2x1ZGUgIk5ldHdv
cmtDYXB0dXJlQ2FjaGVkUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJOZXR3b3JrRGF0YVRhc2suaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworfQorCituYW1l
c3BhY2UgV2ViS2l0IHsKK2NsYXNzIE5ldHdvcmtEYXRhVGFza0NsaWVudDsKK2NsYXNzIE5ldHdv
cmtMb2FkUGFyYW1ldGVyczsKK2NsYXNzIE5ldHdvcmtTZXNzaW9uOworfQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZSB7CisKK3N0cnVjdCBSZXF1ZXN0U2Vu
dEV2ZW50Oworc3RydWN0IFJlc3BvbnNlUmVjZWl2ZWRFdmVudDsKK3N0cnVjdCBSZWRpcmVjdFJl
Y2VpdmVkRXZlbnQ7CitzdHJ1Y3QgUmVkaXJlY3RTZW50RXZlbnQ7CitzdHJ1Y3QgRGF0YVJlY2Vp
dmVkRXZlbnQ7CitzdHJ1Y3QgRmluaXNoZWRFdmVudDsKKworY2xhc3MgTmV0d29ya0RhdGFUYXNr
UmVwbGF5IDogcHVibGljIE5ldHdvcmtEYXRhVGFzayB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxOZXR3b3JrRGF0YVRhc2tSZXBsYXk+IGNyZWF0ZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwg
TmV0d29ya0RhdGFUYXNrQ2xpZW50JiBjbGllbnQsIGNvbnN0IE5ldHdvcmtMb2FkUGFyYW1ldGVy
cyYgcGFyYW1ldGVycywgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgTmV0d29ya0RhdGFUYXNrUmVwbGF5KHNlc3Npb24sIGNsaWVu
dCwgcGFyYW1ldGVycywgcmVzb3VyY2UpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTmV0d29y
a0RhdGFUYXNrUmVwbGF5KE5ldHdvcmtTZXNzaW9uJiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50Jiwg
Y29uc3QgTmV0d29ya0xvYWRQYXJhbWV0ZXJzJiwgQ2FjaGVkUmVzb3VyY2UqKTsKKyAgICB+TmV0
d29ya0RhdGFUYXNrUmVwbGF5KCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHJlc3VtZSgpIG92ZXJy
aWRlOworICAgIHZvaWQgc3VzcGVuZCgpIG92ZXJyaWRlOworICAgIHZvaWQgY2FuY2VsKCkgb3Zl
cnJpZGU7CisgICAgdm9pZCBjb21wbGV0ZSgpOworICAgIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNl
bCgpIG92ZXJyaWRlOworCisgICAgU3RhdGUgc3RhdGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBtX3N0YXRlOyB9CisKKyAgICB2b2lkIGVucXVldWVDYWNoZWRFdmVudEhhbmRsZXIoKTsKK3B1
YmxpYzoKKyAgICB2b2lkIHJlcGxheVJlcXVlc3RTZW50KGNvbnN0IFJlcXVlc3RTZW50RXZlbnQm
KTsKKyAgICB2b2lkIHJlcGxheVJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgUmVzcG9uc2VSZWNlaXZl
ZEV2ZW50Jik7CisgICAgdm9pZCByZXBsYXlSZWRpcmVjdFJlY2VpdmVkKGNvbnN0IFJlZGlyZWN0
UmVjZWl2ZWRFdmVudCYpOworICAgIHZvaWQgcmVwbGF5UmVkaXJlY3RTZW50KGNvbnN0IFJlZGly
ZWN0U2VudEV2ZW50Jik7CisgICAgdm9pZCByZXBsYXlEYXRhUmVjZWl2ZWQoY29uc3QgRGF0YVJl
Y2VpdmVkRXZlbnQmKTsKKyAgICB2b2lkIHJlcGxheUZpbmlzaGVkKGNvbnN0IEZpbmlzaGVkRXZl
bnQmKTsKKworcHJpdmF0ZToKKyAgICBlbnVtIGNsYXNzIEVycm9yIHsKKyAgICAgICAgTm9FcnJv
ciA9IDAsCisgICAgICAgIE5vdEZvdW5kRXJyb3IgPSAxLAorICAgICAgICBNZXRob2ROb3RBbGxv
d2VkID0gNQorICAgIH07CisKKyAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJiYsIEVycm9yID0gRXJyb3I6Ok5vRXJyb3IpOworICAgIHZvaWQgZGlk
RmluaXNoKEVycm9yID0gRXJyb3I6Ok5vRXJyb3IpOworCitwcml2YXRlOgorICAgIGVudW0geyBr
UG9zaXRpb25Ob3RTcGVjaWZpZWQgPSAtMSB9OworCisgICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRl
OjpTdXNwZW5kZWQgfTsKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVx
dWVzdDsKKyAgICBDYWNoZWRSZXNvdXJjZSogbV9yZXNvdXJjZTsKKyAgICBDYWNoZWRSZXNvdXJj
ZTo6RXZlbnRTdHJlYW0gbV9ldmVudFN0cmVhbTsKK307CisKK30gLy8gbmFtZXNwYWNlIE5ldHdv
cmtDYXB0dXJlCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRX
T1JLX0NBUFRVUkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2Ev
V2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9X
ZWJQcm9jZXNzUG9vbENvY29hLm1tCmluZGV4IDQ5ZDRkNWJkNWE5OWQ0ZDk4MTExNmEwOGExMzI3
ZDUwMWNiYWI5NTEuLjFlZmIyMGUyZDM3ZjU0YWViZjE1ZTJlYTRlODIxZjNmYWU5MDBkNzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENv
Y29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9v
bENvY29hLm1tCkBAIC04Nyw2ICs4NywxMiBAQCBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBXZWJL
aXROZXR3b3JrTG9hZFRocm90dGxlTGF0ZW5jeU1pbGxpc2Vjb25kc0RlZmF1bHRzS2V5CiAKIHN0
YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdlYktpdFZhcmlhdGlvbkZvbnRzRW5hYmxlZERlZmF1bHRz
S2V5ID0gQCJFeHBlcmltZW50YWxWYXJpYXRpb25Gb250c0VuYWJsZWQiOwogCisjaWYgRU5BQkxF
KE5FVFdPUktfQ0FQVFVSRSkKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdlYktpdFJlY29yZE5l
dHdvcmtSZXF1ZXN0c0RlZmF1bHRzS2V5ID0gQCJXZWJLaXRSZWNvcmROZXR3b3JrUmVxdWVzdHMi
Oworc3RhdGljIE5TU3RyaW5nICogY29uc3QgV2ViS2l0UmVwbGF5TmV0d29ya1JlcXVlc3RzRGVm
YXVsdHNLZXkgPSBAIldlYktpdFJlcGxheU5ldHdvcmtSZXF1ZXN0cyI7CitzdGF0aWMgTlNTdHJp
bmcgKiBjb25zdCBXZWJLaXRSZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uRGVmYXVsdHNLZXkgPSBA
IldlYktpdFJlY29yZFJlcGxheUNhY2hlTG9jYXRpb24iOworI2VuZGlmCisKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiBOU1N0cmluZyAqU2NoZW1lRm9yQ3VzdG9tUHJvdG9jb2xSZWdpc3RlcmVkTm90
aWZpY2F0aW9uTmFtZSA9IEAiV2ViS2l0U2NoZW1lRm9yQ3VzdG9tUHJvdG9jb2xSZWdpc3RlcmVk
Tm90aWZpY2F0aW9uIjsKQEAgLTI2Miw2ICsyNjgsMTQgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmEKICNlbmRpZgogCiAgICAgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5h
YmxlZCA9IGNvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkKCk7CisKKyNpZiBFTkFCTEUo
TkVUV09SS19DQVBUVVJFKQorICAgIHBhcmFtZXRlcnMuc2hvdWxkUmVjb3JkTmV0d29ya1JlcXVl
c3RzID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6V2ViS2l0UmVjb3JkTmV0d29ya1JlcXVlc3RzRGVm
YXVsdHNLZXldOworICAgIHBhcmFtZXRlcnMuc2hvdWxkUmVwbGF5TmV0d29ya1JlcXVlc3RzID0g
W2RlZmF1bHRzIGJvb2xGb3JLZXk6V2ViS2l0UmVwbGF5TmV0d29ya1JlcXVlc3RzRGVmYXVsdHNL
ZXldOworICAgIHBhcmFtZXRlcnMucmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbiA9IFtkZWZhdWx0
cyBzdHJpbmdGb3JLZXk6V2ViS2l0UmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbkRlZmF1bHRzS2V5
XTsKKyAgICBpZiAocGFyYW1ldGVycy5yZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uLmlzRW1wdHko
KSkKKyAgICAgICAgcGFyYW1ldGVycy5yZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uID0gcGFyYW1l
dGVycy5kaXNrQ2FjaGVEaXJlY3Rvcnk7CisjZW5kaWYKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6cGxhdGZvcm1JbnZhbGlkYXRlQ29udGV4dCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYTE3YTExNGZiMDdhNjMwYWExNTc2
NTkzZjgwYjJiOTgwMmQ0NDI1Mi4uYTA5NzllZGZiMTBhOTQ5NzRkNTU2YzQ5ZTM4ZDc3YzdiMTAy
YjY2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMTA0NCw2ICsxMDQ0LDIwIEBACiAJCTUyRDVBMUIwMUM1NzQ5NUEwMERFMzRB
MyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUFBMUM1NzQ5NEUwMERFMzRBMyAvKiBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCAqLzsgfTsKIAkJNTJENUExQjExQzU3NDk2
MjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUFDMUM1NzQ5NEUwMERF
MzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gKi87IH07CiAJCTUyRDVB
MUI3MUM1NzRBMDIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQjQxQzU3NDlG
MjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gKi87IH07CisJCTUzMDI1
ODNCMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUNhY2hlZFJlc291cmNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1ODJFMURD
QkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUNhY2hlZFJlc291cmNlLmNwcCAqLzsgfTsK
KwkJNTMwMjU4M0MxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlQ2FjaGVkUmVzb3Vy
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1
ODJGMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUNhY2hlZFJlc291cmNlLmggKi87
IH07CisJCTUzMDI1ODNEMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1ODMw
MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcCAqLzsgfTsKKwkJNTMw
MjU4M0UxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1ODMxMURDQkJEMUQwMERB
ODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmggKi87IH07CisJCTUzMDI1ODNGMURDQkJEMjIw
MERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1ODMyMURDQkJEMUQwMERBODlDMiAvKiBOZXR3
b3JrQ2FwdHVyZUxvZ2dpbmcuaCAqLzsgfTsKKwkJNTMwMjU4NDAxRENCQkQyMjAwREE4OUMyIC8q
IE5ldHdvcmtDYXB0dXJlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgzMzFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1
cmVNYW5hZ2VyLmNwcCAqLzsgfTsKKwkJNTMwMjU4NDExRENCQkQyMjAwREE4OUMyIC8qIE5ldHdv
cmtDYXB0dXJlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTMwMjU4MzQxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTWFuYWdl
ci5oICovOyB9OworCQk1MzAyNTg0MjFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVS
ZWNvcmRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MzAyNTgzNTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZWNvcmRlci5jcHAg
Ki87IH07CisJCTUzMDI1ODQzMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlY29y
ZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAy
NTgzNjFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZWNvcmRlci5oICovOyB9Owor
CQk1MzAyNTg0NDFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXBsYXllci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgzNzFE
Q0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXBsYXllci5jcHAgKi87IH07CisJCTUz
MDI1ODQ1MURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgzODFEQ0JCRDFE
MDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXBsYXllci5oICovOyB9OworCQk1M0UyNjA2NTFE
REE5NDhFMDA1OTA4MTggLyogTmV0d29ya0NhcHR1cmVUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFMjYwNjQxRERBOTQ4MTAwNTkwODE4IC8q
IE5ldHdvcmtDYXB0dXJlVHlwZXMuaCAqLzsgfTsKKwkJNTMwMjU4NDYxRENCQkQyMjAwREE4OUMy
IC8qIE5ldHdvcmtEYXRhVGFza1JlcGxheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgzOTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0Rh
dGFUYXNrUmVwbGF5LmNwcCAqLzsgfTsKKwkJNTMwMjU4NDcxRENCQkQyMjAwREE4OUMyIC8qIE5l
dHdvcmtEYXRhVGFza1JlcGxheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTMwMjU4M0ExRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtEYXRhVGFza1Jl
cGxheS5oICovOyB9OwogCQk1MzIxNTk1MzFEQkFFNzE4MDA1NEFBM0MgLyogTmV0d29ya1Nlc3Np
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMy
MTU5NTIxREJBRTZGQzAwNTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uLmNwcCAqLzsgfTsKIAkJNTMy
MTU5NTQxREJBRTcxRDAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFzay5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzIxNTk1MTFEQkFFNkZDMDA1NEFB
M0MgLyogTmV0d29ya0RhdGFUYXNrLmNwcCAqLzsgfTsKIAkJNTMyMTU5NTUxREJBRTcyOTAwNTRB
QTNDIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzMjE1OTUwMURCQUU2RDcwMDU0QUEzQyAvKiBOZXR3b3JrU2Vz
c2lvbkNvY29hLmggKi87IH07CkBAIC0zMTQyLDYgKzMxNTYsMjAgQEAKIAkJNTJENUExQjIxQzU3
NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MkQ1QTFCMzFDNTc0OUYyMDBERTM0QTMgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MkQ1QTFCNDFDNTc0OUYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUz
MDI1ODJFMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUNhY2hlZFJlc291cmNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtDYXB0dXJlQ2Fj
aGVkUmVzb3VyY2UuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2Fw
dHVyZUNhY2hlZFJlc291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMw
MjU4MkYxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlQ2FjaGVkUmVzb3VyY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNv
dXJjZS5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUNhY2hl
ZFJlc291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMDI1ODMwMURDQkJE
MUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwOyBwYXRoID0gTmV0d29y
a1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTMwMjU4MzExRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJl
RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya0NhcHR1cmVF
dmVudC5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMDI1ODMyMURDQkJEMUQwMERBODlD
MiAvKiBOZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gTmV0d29ya0NhcHR1cmVMb2dnaW5nLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0
dXJlL05ldHdvcmtDYXB0dXJlTG9nZ2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1MzAyNTgzMzFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtDYXB0dXJlTWFuYWdl
ci5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlTWFuYWdl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMDI1ODM0MURDQkJEMUQwMERB
ODlDMiAvKiBOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9j
YXB0dXJlL05ldHdvcmtDYXB0dXJlTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MzAyNTgzNTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZWNvcmRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZVJl
Y29yZGVyLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVS
ZWNvcmRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMDI1ODM2MURDQkJE
MUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtDYXB0dXJlUmVjb3JkZXIuaDsgcGF0aCA9IE5ldHdvcmtQ
cm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZWNvcmRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MzAyNTgzNzFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVS
ZXBsYXllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3Jr
Q2FwdHVyZVJlcGxheWVyLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29y
a0NhcHR1cmVSZXBsYXllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMDI1
ODM4MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuaDsgcGF0aCA9
IE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXBsYXllci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1M0UyNjA2NDFEREE5NDgxMDA1OTA4MTggLyogTmV0d29y
a0NhcHR1cmVUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3Jr
Q2FwdHVyZVR5cGVzLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0
dXJlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMwMjU4MzkxRENCQkQx
RDAwREE4OUMyIC8qIE5ldHdvcmtEYXRhVGFza1JlcGxheS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwOyBwYXRoID0gTmV0
d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MzAyNTgzQTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0Rh
dGFUYXNrUmVwbGF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtE
YXRhVGFza1JlcGxheS5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0
YVRhc2tSZXBsYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMyMTU5NEYxREJB
RTZENzAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFza0NvY29hLmg7IHBhdGggPSBOZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MzIxNTk1MDFEQkFFNkQ3MDA1NEFBM0MgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrU2Vzc2lvbkNvY29hLmg7
IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMjE1OTUxMURCQUU2RkMwMDU0QUEzQyAvKiBOZXR3
b3JrRGF0YVRhc2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0
d29ya0RhdGFUYXNrLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDc4LDYgKzU1MDYsNyBAQAogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQlFNDg5RDI4MjFBMEEyQkU4MDA3
OEMwNkEgLyogY2FjaGUgKi8sCisJCQkJNTM5QkQ1QjIxREFEQjBCQTAwRjJFNEUxIC8qIGNhcHR1
cmUgKi8sCiAJCQkJN0VDNEYwRjgxOEU0QTkyMjAwODA1NkFGIC8qIGNvY29hICovLAogCQkJCTVD
MTQyNkYyMUMyM0Y4MkQwMEQ0MTE4MyAvKiBDdXN0b21Qcm90b2NvbHMgKi8sCiAJCQkJNUMxNDI2
RjExQzIzRjgxNzAwRDQxMTgzIC8qIERvd25sb2FkcyAqLywKQEAgLTU3ODgsNiArNTgxNywyNyBA
QAogCQkJbmFtZSA9IEljb25EYXRhYmFzZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJ
CX07CisJCTUzOUJENUIyMURBREIwQkEwMEYyRTRFMSAvKiBjYXB0dXJlICovID0geworCQkJaXNh
ID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk1MzAyNTgyRTFEQ0JCRDFEMDBEQTg5
QzIgLyogTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5jcHAgKi8sCisJCQkJNTMwMjU4MkYx
RENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlQ2FjaGVkUmVzb3VyY2UuaCAqLywKKwkJ
CQk1MzAyNTgzMDFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVFdmVudC5jcHAgKi8s
CisJCQkJNTMwMjU4MzExRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuaCAq
LywKKwkJCQk1MzAyNTgzMjFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVMb2dnaW5n
LmggKi8sCisJCQkJNTMwMjU4MzMxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTWFu
YWdlci5jcHAgKi8sCisJCQkJNTMwMjU4MzQxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0
dXJlTWFuYWdlci5oICovLAorCQkJCTUzMDI1ODM1MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3Jr
Q2FwdHVyZVJlY29yZGVyLmNwcCAqLywKKwkJCQk1MzAyNTgzNjFEQ0JCRDFEMDBEQTg5QzIgLyog
TmV0d29ya0NhcHR1cmVSZWNvcmRlci5oICovLAorCQkJCTUzMDI1ODM3MURDQkJEMUQwMERBODlD
MiAvKiBOZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmNwcCAqLywKKwkJCQk1MzAyNTgzODFEQ0JCRDFE
MDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXBsYXllci5oICovLAorCQkJCTUzRTI2MDY0MURE
QTk0ODEwMDU5MDgxOCAvKiBOZXR3b3JrQ2FwdHVyZVR5cGVzLmggKi8sCisJCQkJNTMwMjU4Mzkx
RENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtEYXRhVGFza1JlcGxheS5jcHAgKi8sCisJCQkJNTMw
MjU4M0ExRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtEYXRhVGFza1JlcGxheS5oICovLAorCQkJ
KTsKKwkJCW5hbWUgPSBjYXB0dXJlOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsK
IAkJNUMwNTJGMjMxQzZEM0FBMTAwNzZFOTE5IC8qIGNvY29hICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTc1NDAsNiArNzU5MCw3IEBACiAJCQkJMzdBNjRF
NTcxOEYzOEY0NjAwRUIzMEYxIC8qIF9XS0Zvcm1JbnB1dFNlc3Npb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCTM3M0QxMjIzMThBNDczMDEwMDY2RDlDQyAvKiBfV0tGcmFtZUhhbmRsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzczRDEyMjcxOEE0NzNGNjAwNjZEOUNDIC8qIF9XS0ZyYW1lSGFuZGxl
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCUNENzhFMTE5MURCN0U1QUQwMDE0QTJERSAv
KiBfV0tGdWxsc2NyZWVuRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRTZBNEVFMUJD
NUREMzkwMEY4QTBFNyAvKiBfV0tIaXRUZXN0UmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5
M0E4OEIzQjFCQzcxMEQ5MDBBQkE1QzIgLyogX1dLSGl0VGVzdFJlc3VsdEludGVybmFsLmggaW4g
SGVhZGVycyAqLywKIAkJCQkzN0E2NEU1NTE4RjM4RTNDMDBFQjMwRjEgLyogX1dLSW5wdXREZWxl
Z2F0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03NTgwLDcgKzc2MzEsNiBAQAogCQkJCTFBRkI0Qzcy
MUFERjE1NUQwMEIzMzMzOSAvKiBfV0tXZWJzaXRlRGF0YVN0b3JlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQTRBOTNCNzFBRUIwOEVBMDAxNTBFOUMgLyogX1dLV2Vic2l0ZURhdGFTdG9yZUludGVy
bmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTE1REM3MjE5MUQ4MkRBMDBEQTgwNzIgLyogX1dL
V2ViVmlld1ByaW50Rm9ybWF0dGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlDRDc4RTExOTFEQjdF
NUFEMDAxNEEyREUgLyogX1dLRnVsbHNjcmVlbkRlbGVnYXRlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBMTlERDNDMDFEMDdEMTY4MDBBQzgyM0IgLyogX1dLV2ViVmlld1ByaW50Rm9ybWF0dGVySW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUExODJENUI1MUJFNkJEMjUwMDg3QTdDQyAvKiBB
Y2Nlc3NpYmlsaXR5SU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q3OTJEODE3NjdDQ0EzMDA4
ODFDQkUgLyogQWN0aXZpdHlBc3NlcnRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtNzYwMCw2ICs3
NjUwLDcgQEAKIAkJCQkzN0UyNUQ2RTE4RkRFNUQ2MDA1RDNBMDAgLyogQVBJRm9ybUNsaWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDMTMzNzIxODU2NkM3QzAwRjNFQzA1IC8qIEFQSUZyYW1l
SGFuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyREY5RUVFNjFBNzgxRkI0MDBCNkNGQkUgLyog
QVBJRnJhbWVJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQlDRDc4RTExNzFEQjdEQzBBMDAxNEEy
REUgLyogQVBJRnVsbHNjcmVlbkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNzRBQTMx
NDJBNENCNzAwMzkyNTBGIC8qIEFQSUdlb21ldHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkyREFC
QTc3NjFBODJCNDIxMDBFRjBGMUEgLyogQVBJSGlzdG9yeUNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTNBODhCNDYxQkM4ODI5MzAwQUJBNUMyIC8qIEFQSUhpdFRlc3RSZXN1bHQuaCBpbiBI
ZWFkZXJzICovLApAQCAtNzcxMiw2ICs3NzYzLDcgQEAKIAkJCQlCQ0U4MUQ4RDEzMTlGN0VGMDAy
NDE5MTAgLyogRm9udEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMTRGOEUyMUQ3NEM4MzQw
MDZDQkVDNiAvKiBGcmFtZUluZm9EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUUwMEQ2MTE4
MzE3OTIxMDAwODdERDcgLyogRnJhbWVMb2FkU3RhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUNE
NzhFMTE1MURCN0Q3RUQwMDE0QTJERSAvKiBGdWxsc2NyZWVuQ2xpZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTVCRTFCMzFENTkwMkREMDBERDdDNjggLyogR2FtZXBhZERhdGEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMTc3NTNGMTE4QkFCRjAwMDdEOUU5QSAvKiBHZW5lcmljQ2FsbGJhY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDZGNDJGMTJEQkI5QjYwMDJENzhERSAvKiBHZW9sb2Nh
dGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03NzkwLDkg
Kzc4NDIsMTkgQEAKIAkJCQk4MzRCMjUxMjFBODQyQzg3MDBDRkIxNTAgLyogTmV0d29ya0NhY2hl
U3RhdGlzdGljcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0MzZFQ0YxQTBEMDQwQjAwRUFEMjA0
IC8qIE5ldHdvcmtDYWNoZVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzMTA0MjhCMUJE
NkI2NkYwMEE3MTVFNCAvKiBOZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTMwMjU4M0MxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlQ2Fj
aGVkUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzMDI1ODNFMURDQkJEMjIwMERBODlD
MiAvKiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzAyNTgzRjFE
Q0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVMb2dnaW5nLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1MzAyNTg0MTFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk1MzAyNTg0MzFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0Nh
cHR1cmVSZWNvcmRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMwMjU4NDUxRENCQkQyMjAwREE4
OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzRTI2
MDY1MUREQTk0OEUwMDU5MDgxOCAvKiBOZXR3b3JrQ2FwdHVyZVR5cGVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTNBMTY0RDE2MzBBOUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxREQ5RjI5MTYzNjdEQTIwMDE1NzhFOSAv
KiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1Q0JDOUI4RTFDNjUyQ0EwMDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1M0JBNDdEMTFEQzJFRjVFMDA0REY0QUQgLyogTmV0d29ya0RhdGFUYXNr
QmxvYi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMyMTU5NTYxREJBRTcyRDAwNTRBQTNDIC8qIE5l
dHdvcmtEYXRhVGFza0NvY29hLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzAyNTg0NzFEQ0JCRDIy
MDBEQTg5QzIgLyogTmV0d29ya0RhdGFUYXNrUmVwbGF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk4
Mzk5MDIwMzFCRTlBMDJCMDAwRjM2NTMgLyogTmV0d29ya0xvYWQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTgzRDQ1NEQ3MUJFOUQzQzQwMDZDOTNCRCAvKiBOZXR3b3JrTG9hZENsaWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODM5MTQ5NjUxQkVBODM4NTAwRDJEOTUzIC8qIE5ldHdvcmtMb2FkUGFy
YW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCkBAIC03ODA4LDYgKzc4NzAsNyBAQAogCQkJCUUxNTI1
NTFCMTcwMTE4MTkwMDNEN0FEQiAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkZXJNZXNzYWdlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNUMxNDI2RjAxQzIzRjgwOTAwRDQxMTgzIC8qIE5ldHdvcmtSZXNv
dXJjZUxvYWRQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzIwQ0JBMDFCQjFFQ0Q4
MDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTUzMjE1OTU1
MURCQUU3MjkwMDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzMUEyRUM1NjE0ODk5QzA5MDA4MTBENzEgLyogTm90aWZpY2F0aW9uUGVybWlzc2lvblJl
cXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMzEyNjFGMTQ4RkY4MkMwMEJBMkEzOSAvKiBO
b3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTMxQTJFQzUyMTQ4OTk4MTkwMDgxMEQ3MSAvKiBOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCkBAIC03ODYxLDcgKzc5MjQsNiBAQAogCQkJ
CTFBMEVDNkMwMTI0QkJEOUIwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzTWVzc2FnZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBMEVDNzVFMTI0QkM3QjIwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNz
UHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMDQzQjVFMTI0RDVFOUQwMEZGQkZCNSAvKiBQ
bHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTNCQTQ3RDEx
REMyRUY1RTAwNERGNEFEIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBMDQzREMxMTI0RkY4NzUwMEZGQkZCNSAvKiBQbHVnaW5Qcm94eS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUE4RUZBNzExMjUyQjg0MTAwRjcwNjdGIC8qIFBsdWdpblByb3h5TWVzc2FnZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBNEE5RjMzMTJCODQ0RTIwMDhGRTk4NCAvKiBQbHVnaW5R
dWlya3MuaCBpbiBIZWFkZXJzICovLApAQCAtNzk4Miw2ICs4MDQ0LDcgQEAKIAkJCQlCQzAzMkQ3
NzEwRjQzNzhEMDA1OEMxNUEgLyogV2ViQ29udGV4dE1lbnVDbGllbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxMjkzNUQ4MTI4OEQxOTQwMEE0QjY5NSAvKiBXZWJDb250ZXh0TWVudUl0ZW0uaCBp
biBIZWFkZXJzICovLAogCQkJCTUxMEZCQjlCMTI4OEM5NUUwMEFGRkRGNCAvKiBXZWJDb250ZXh0
TWVudUl0ZW1EYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMUVBMDI0MDFEQUMzMURCMDA5NjAy
MUYgLyogV2ViQ29udGV4dE1lbnVMaXN0ZW5lclByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MUFDQkI4MjEyN0E4QkFEMDBEMjAzQjkgLyogV2ViQ29udGV4dE1lbnVQcm94eS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTFBQ0JCQTAxMjdBOEYyQzAwRDIwM0I5IC8qIFdlYkNvbnRleHRNZW51UHJv
eHlNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRjRERTI1MTY4RkE0NDgwMEM5NEFGQyAvKiBX
ZWJDb250ZXh0U3VwcGxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDY4LDcgKzgxMzEsNiBA
QAogCQkJCUJDN0I2MjUyMTJBNDNDOTYwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXBEYXRhLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzdCNjIxNTEyQTQyMTlBMDBEMTc0QTQgLyogV2ViUGFnZUdyb3Vw
UHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEOUVBMzBGMUE5NkNCRkYwMDJEMjgwNyAvKiBX
ZWJQYWdlSW5qZWN0ZWRCdW5kbGVDbGllbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUExRUEwMjM4
MURBQkZGN0UwMDk2MDIxRiAvKiBXS0NvbnRleHRNZW51TGlzdGVuZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUMwQ0U3MkExMTI0N0U3MUQwMEJDMEVDNCAvKiBXZWJQYWdlTWVzc2FnZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTJENUM5RDA2MTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3Zlcmxh
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMzJERDExMEY0Mzg5RjAwNThDMTVBIC8qIFdlYlBh
Z2VQcm94eS5oIGluIEhlYWRlcnMgKi8sCkBAIC04MTkzLDcgKzgyNTUsNiBAQAogCQkJCUJDN0I2
MzNEMTJBNDVEMTIwMEQxNzRBNCAvKiBXS0J1bmRsZVBhZ2VHcm91cC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUFCNDc0RDgxODRENDNGRDAwNTFCNjIyIC8qIFdLQnVuZGxlUGFnZUxvYWRlckNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRUQ4MkE3RjIxMjhDNkZBRjAwNDQ3N0IzIC8qIFdLQnVu
ZGxlUGFnZU92ZXJsYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTUzMjE1OTU2MURCQUU3MkQwMDU0
QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCNDc0
RUExODRENDUxMzAwNTFCNjIyIC8qIFdLQnVuZGxlUGFnZVBvbGljeUNsaWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxQjQxOTgxMUQ0MUQ1NzAwMTFFOEREIC8qIFdLQnVuZGxlUGFnZVByaXZh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjQ3NERBMTg0RDQ0MjUwMDUxQjYyMiAvKiBXS0J1
bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtODIxNyw2ICs4
Mjc4LDcgQEAKIAkJCQkxQTQ0NUI5RjE4NEQ1RkI1MDA0QjM0MTQgLyogV0tDb250ZXh0SW5qZWN0
ZWRCdW5kbGVDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQTU1NUY2MTI4QzZDNDcwMDlB
QkNFQyAvKiBXS0NvbnRleHRNZW51SXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBNTU2MDEx
MjhDNkQ5MjAwOUFCQ0VDIC8qIFdLQ29udGV4dE1lbnVJdGVtVHlwZXMuaCBpbiBIZWFkZXJzICov
LAorCQkJCUExRUEwMjM4MURBQkZGN0UwMDk2MDIxRiAvKiBXS0NvbnRleHRNZW51TGlzdGVuZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDQzkzOEUxMTE4MERFNDQwMDg1RTVGRSAvKiBXS0NvbnRl
eHRQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5RkI1RjM5NTE2OUU2QTgwMDAyQzI1QkYg
LyogV0tDb250ZXh0UHJpdmF0ZU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzMwOTM0NUIxMzE1
Qjk5ODAwOTdBN0JDIC8qIFdLQ29va2llTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCkBAIC04MjYz
LDcgKzgzMjUsNiBAQAogCQkJCUJDNTRDQzEyMTJENjc0RUUwMDVDNjdCMCAvKiBXS0dlb2xvY2F0
aW9uTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwNkY0NEUxMkRCREYzRjAwMkQ3OERF
IC8qIFdLR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMwRTYxOTgxMkQ2Q0QxMjAwMTJBNzJBIC8qIFdLR2VvbG9jYXRpb25Qb3NpdGlvbi5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJNTMyMTU5NTUxREJBRTcyOTAwNTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9u
Q29jb2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0I0RTRGMThCQkUwNDQwMDBGQ0ZDOSAvKiBX
S0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQzhCMzc0MTI1
RkI2OTAwMERFNDZBNCAvKiBXS0dlb21ldHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTQyMkY4
QjE4QjI5QjU0MDBEOENEOTYgLyogV0tIaXN0b3J5RGVsZWdhdGVQcml2YXRlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTgzMjMsNyArODM4NCw2IEBACiAJCQkJN0NENUVCQjkxNzQ2QTE1QjAwMEMxQzQ1
IC8qIFdLT2JqQ1R5cGVXcmFwcGVyUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzhFMUE0MDE4
MUVEQTAxMDAzMTAwN0EgLyogV0tPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQ0M1MEYy
MUNCQzM4MUQwMDNDN0QwMyAvKiBXS09wZW5QYW5lbFBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICov
LAotCQkJCUExRUEwMjQwMURBQzMxREIwMDk2MDIxRiAvKiBXZWJDb250ZXh0TWVudUxpc3RlbmVy
UHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNjdDRDJFMUNCQzUxM0YwMEJGRTNFQSAvKiBX
S09wZW5QYW5lbFBhcmFtZXRlcnNJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4NTdG
RTYxMkI4NDNEODAwRURFQjJFIC8qIFdLT3BlblBhbmVsUGFyYW1ldGVyc1JlZi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxREZFOEYxMkIzMUNBODAwNURGNzMwIC8qIFdLT3BlblBhbmVsUmVzdWx0
TGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLApAQCAtODMzMyw3ICs4MzkzLDYgQEAKIAkJCQk4Mzcy
REIyNTFBNjc0QzhGMDBDNjk3QzUgLyogV0tQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTFBQjhBMUY0MTg0MDBCOEYwMEU5QUU2OSAvKiBXS1BhZ2VGaW5k
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUI4QTFGNjE4NDAwQjlEMDBFOUFFNjkgLyog
V0tQYWdlRmluZE1hdGNoZXNDbGllbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUNENzhFMTE1MURC
N0Q3RUQwMDE0QTJERSAvKiBGdWxsc2NyZWVuQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QUI4QTFGMDE4NDAwQjAwMDBFOUFFNjkgLyogV0tQYWdlRm9ybUNsaWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkM3QjYzMzcxMkE0NUFCQTAwRDE3NEE0IC8qIFdLUGFnZUdyb3VwLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkyRDlFQTMwRDFBOTZDQjU5MDAyRDI4MDcgLyogV0tQYWdlSW5qZWN0ZWRC
dW5kbGVDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtODM2NSw3ICs4NDI0LDYgQEAKIAkJCQk5
MzkxMDc0RjFCRjZCQzY1MDA4QzE3QUQgLyogV0tQcmV2aWV3RWxlbWVudEluZm9JbnRlcm5hbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDQjRFNjYxOEJCRTNEOTAwMEZDRkM5IC8qIFdLUHJpbnRp
bmdWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0JBQUNFQjE0NTIyNUUzMDA1M0Y4MkYgLyog
V0tQcm9jZXNzR3JvdXAuaCBpbiBIZWFkZXJzICovLAotCQkJCUNENzhFMTE3MURCN0RDMEEwMDE0
QTJERSAvKiBBUElGdWxsc2NyZWVuQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0JBQUNF
RDE0NTIyNUUzMDA1M0Y4MkYgLyogV0tQcm9jZXNzR3JvdXBQcml2YXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQTE1ODQxQTE4OTA0NEY1MDAxNzYxNkMgLyogV0tQcm9jZXNzUG9vbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUEzQ0MxNjkxODkwN0VCMDAwMUU2RUQ4IC8qIFdLUHJvY2Vzc1Bvb2xJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCkBAIC05MTk2LDYgKzkyNTQsNyBAQAogCQkJCUJDRTgx
RDhDMTMxOUY3RUYwMDI0MTkxMCAvKiBGb250SW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
QTE0RjhFMTFENzRDODM0MDA2Q0JFQzYgLyogRnJhbWVJbmZvRGF0YS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQUUwMEQ2MDE4MzE3OTIxMDAwODdERDcgLyogRnJhbWVMb2FkU3RhdGUuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQ0Q3OEUxMTQxREI3RDdFRDAwMTRBMkRFIC8qIEZ1bGxzY3JlZW5D
bGllbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTVCRTFCMjFENTkwMkREMDBERDdDNjggLyog
R2FtZXBhZERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwNkY0MzAxMkRCQjlCNjAwMkQ3
OERFIC8qIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDMDZGNDRCMTJEQkQxRjUwMDJENzhERSAvKiBHZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0TWFuYWdlclByb3h5LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTI3NCwxMyArOTMz
MywyMCBAQAogCQkJCUU0NDM2RUNEMUEwRDA0MEIwMEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGVLZXku
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODMxRUVCQkUxQkQ4NUM0MzAwQkI2NEMzIC8qIE5ldHdv
cmtDYWNoZVNwZWN1bGF0aXZlTG9hZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4MzJBRTI1MzFC
RTJFOENEMDBGQUFFMTAgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVMb2FkTWFuYWdlci5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQlDRDc4RTExNDFEQjdEN0VEMDAxNEEyREUgLyogRnVsbHNjcmVl
bkNsaWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTgzQkRDQ0I5MUFDNUZEQjYwMDNGNjQ0MSAv
KiBOZXR3b3JrQ2FjaGVTdGF0aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0NDM2RUQw
MUEwRDA0MEIwMEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTgzMTA0MjhDMUJENkI2NkYwMEE3MTVFNCAvKiBOZXR3b3JrQ2FjaGVTdWJyZXNvdXJj
ZXNFbnRyeS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzAyNTgzQjFEQ0JCRDIyMDBEQTg5QzIg
LyogTmV0d29ya0NhcHR1cmVDYWNoZWRSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1
MzAyNTgzRDFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVFdmVudC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk1MzAyNTg0MDFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVN
YW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzMDI1ODQyMURDQkJEMjIwMERBODlDMiAv
KiBOZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzMDI1ODQ0
MURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxM0ExNjRDMTYzMEE5QkYwMDVEN0QyMiAvKiBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUREOUYyODE2MzY3REEyMDAxNTc4
RTkgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNTMyMTU5NTQxREJBRTcxRDAwNTRBQTNDIC8qIE5ldHdvcmtEYXRh
VGFzay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1M0JBNDdEMDFEQzJFRjVFMDA0REY0QUQgLyog
TmV0d29ya0RhdGFUYXNrQmxvYi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Q0JDOUI4RDFDNjUy
NzlDMDBBOEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrQ29jb2EubW0gaW4gU291cmNlcyAqLywKKwkJ
CQk1MzAyNTg0NjFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0RhdGFUYXNrUmVwbGF5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTgzOTkwMjAyMUJFOUEwMkIwMDBGMzY1MyAvKiBOZXR3b3JrTG9h
ZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4MzZFRUI4MDFCRTlFQzlFMDA2QjRCODIgLyogTmV0
d29ya0xvYWRNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTc5NTU2ODE2Mjg3NkNGMDBGQTQz
QjYgLyogTmV0d29ya1Byb2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05Mjk5LDYgKzkzNjUs
NyBAQAogCQkJCUUxNTI1NTFBMTcwMTE4MTkwMDNEN0FEQiAvKiBOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxNDI2RUYxQzIzRjgw
OTAwRDQxMTgzIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDODI4M0FDMTZCNEJGM0YwMEEyNzhGRSAvKiBOZXR3b3JrU2VydmljZUVudHJ5
UG9pbnQubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MzIxNTk1MzFEQkFFNzE4MDA1NEFBM0MgLyog
TmV0d29ya1Nlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMyMENCOUQxQkIwRENGQTAw
ODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMUEy
RUM1NTE0ODk5ODJFMDA4MTBENzEgLyogTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMzEzMTI2MUUxNDhGRjgyQzAwQkEyQTM5IC8qIE5vdGlmaWNh
dGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkzNTgs
NyArOTQyNSw2IEBACiAJCQkJMUEyRDkyMjExMjgxREMxQjAwMUVCOTYyIC8qIFBsdWdpblByb3h5
TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE4RUZBNzAxMjUyQjg0MTAwRjcwNjdGIC8qIFBs
dWdpblByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDRDYyMjc3
MTczOUQ4NjMwMDVCRDdGRiAvKiBQbHVnaW5TYW5kYm94UHJvZmlsZS5tbSBpbiBTb3VyY2VzICov
LAotCQkJCTUzQkE0N0QwMURDMkVGNUUwMDRERjRBRCAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDODI4NDREMTZCNTA4MUMwMEEyNzhGRSAvKiBQbHVnaW5T
ZXJ2aWNlRW50cnlQb2ludC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBNkZCN0FFMTFFNjRCNjgw
MERCMTM3MSAvKiBQbHVnaW5WaWV3LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxOEM5MkY0MTJE
QjlFNzEwMENGMkFFQiAvKiBQcmludEluZm8uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05NDE0LDYg
Kzk0ODAsNyBAQAogCQkJCTFBNjQyMEU0MTJEQ0UyRkYwMENBQUUyQyAvKiBTaGFyZWFibGVCaXRt
YXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzAxQTI2MDExMjY2MkYyMTAwQzlFRDU1IC8qIFNo
YXJlYWJsZUJpdG1hcENHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMjE3NDYwMTY0QzIwRTMw
MDM3QTVDMSAvKiBTaGFyZWFibGVSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0NDUw
QUVDMDFEQzNGQUU1MDA5OTQzRjIgLyogU2hhcmVkTWVtb3J5Q29jb2EuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMkRBRjA2RDcxOEJEMUE0NzAwODFDRUIxIC8qIFNtYXJ0TWFnbmlmaWNhdGlvbkNv
bnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkyREU2OTQzRDE4QkQyQTY4MDA1QzE1RTUg
LyogU21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1MjcyQjI4QTE0MDY5ODVEMDA5NkE1RDAgLyogU3RhdGlzdGljc0RhdGEu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC05NDg5LDYgKzk1NTYsNyBAQAogCQkJCTUxMDIxRTlDMTJC
MTY3ODgwMDVDMDMzQyAvKiBXZWJDb250ZXh0TWVudUNsaWVudE1hYy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTUxMjkzNUQ3MTI4OEQxOTQwMEE0QjY5NSAvKiBXZWJDb250ZXh0TWVudUl0ZW0uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNTEwRkJCOUExMjg4Qzk1RTAwQUZGREY0IC8qIFdlYkNvbnRl
eHRNZW51SXRlbURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTFFQTAyM0YxREFDMzFEQjAw
OTYwMjFGIC8qIFdlYkNvbnRleHRNZW51TGlzdGVuZXJQcm94eS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1MUE4NENFMzEyN0YzODZCMDBDQTZFQTQgLyogV2ViQ29udGV4dE1lbnVQcm94eS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MUFDQkJBMTEyN0E4RjJDMDBEMjAzQjkgLyogV2ViQ29udGV4
dE1lbnVQcm94eU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTMzMDkzNDRGMTMxNUI5NEQwMDk3
QTdCQyAvKiBXZWJDb29raWVNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTU1MCw3ICs5
NjE4LDYgQEAKIAkJCQk1MTA1MjM3OTFDNzNEQTc3MDA3OTkzQ0IgLyogV2ViSURCQ29ubmVjdGlv
blRvQ2xpZW50TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNDEyOTk1
MUM2NDI4QzIwMDU5RTcxNCAvKiBXZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTEwNTIzNzUxQzczRDM4RjAwNzk5M0NCIC8qIFdlYklEQkNvbm5lY3Rpb25U
b1NlcnZlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0NDUwQUVDMDFE
QzNGQUU1MDA5OTQzRjIgLyogU2hhcmVkTWVtb3J5Q29jb2EuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTFBNTg3ODAxRDFDNTA4MTAwNEJBOUFGIC8qIFdlYklEQlJlc3VsdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQ0NGNkFCQzEyQzkxRUY5MDA4RjlDMzUgLyogV2ViSW1hZ2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUM4RTI4MjExMjc1RDE1NDAwQkM3QkQwIC8qIFdlYkluc3BlY3Rvci5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTk2NjUsNyArOTczMiw2IEBACiAJCQkJMUE1M0MyQTkxQTMy
NTcyQjAwNEU4QzcwIC8qIFdlYnNpdGVEYXRhU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUE0ODMyQzMxQTk2NUEzQzAwOEI0REZFIC8qIFdlYnNpdGVEYXRhU3RvcmVDb2NvYS5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTVDNzcwNjc0MUQxMTM4MzgwMDEyNzAwRiAvKiBXZWJTb2NrZXRQcm92
aWRlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBMUQ0MjA0NzFEQjU1Nzg1MDBCQjZCMEQgLyog
V0tDb250ZXh0TWVudUxpc3RlbmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgzNjAzNDlGMUFD
QjM0RDYwMDYyNjU0OSAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMUE1MkMwRjcxQTM4Q0RDNzAwMTYxNjBBIC8qIFdlYlN0b3JhZ2VOYW1lc3BhY2VQ
cm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0M1NzE1QzExNUFEQUVGMDAxQ0NBRjkg
LyogV2ViU3lzdGVtSW50ZXJmYWNlLm1tIGluIFNvdXJjZXMgKi8sCkBAIC05Njc5LDYgKzk3NDUs
NyBAQAogCQkJCTFBQUYwOEExMTkyNjgxRDEwMEI2MzkwQyAvKiBXZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzM2MUQ3ODE5MjgwM0JEMDAzNkE1
OUQgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTU3MzlCQkUxQjQyMDQ2NjAwRDI1OEMxIC8qIFdlYlVzZXJNZWRp
YUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4M0VFNTc1QjFEQjdENjExMDBDNzRDNTAg
LyogV2ViVmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTJE
NUExQjcxQzU3NEEwMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gaW4g
U291cmNlcyAqLywKIAkJCQkzRjQxOEVGOTE4ODdCRDk3MDAyNzk1RkQgLyogV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MkQ1
QTFCMTFDNTc0OTYyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1t
IGluIFNvdXJjZXMgKi8sCkBAIC05Njg2LDcgKzk3NTMsNiBAQAogCQkJCTJERkM3REJDMUJDQ0Mx
OTUwMEMxNTQ4QyAvKiBXZWJWaWV3SW1wbC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUMwMzM3REQx
MTI3QTI5ODAwMDhGRjRGNCAvKiBXZWJXaGVlbEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTg2ODE2MEQwMTg3NjQ1NTcwMDIxRTc5RCAvKiBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uLm1tIGlu
IFNvdXJjZXMgKi8sCi0JCQkJNTMyMTU5NTMxREJBRTcxODAwNTRBQTNDIC8qIE5ldHdvcmtTZXNz
aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI5Q0Q1NUFCMTI4RTI5NEYwMDEzM0M4NSAvKiBX
S0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0QmFzZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTI5
MjMyREY4MThCMkE5QUUwMEQwNTk2RiAvKiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0SU9T
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjkyMzJERjkxOEIyQUIzQTAwRDA1OTZGIC8qIFdLQWNj
ZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMubW0gaW4gU291cmNlcyAqLywKQEAgLTk3MDUsNyAr
OTc3MSw2IEBACiAJCQkJQkNCQUFDRjUxNDUyMzI0RjAwNTNGODJGIC8qIFdLQnJvd3NpbmdDb250
ZXh0R3JvdXAubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUUwMEQ0QzE4MkQ2RUIwMDAwODdERDcg
LyogV0tCcm93c2luZ0NvbnRleHRIYW5kbGUubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzIwNEVF
RTExQzgzRUM4MDA4RjMzNzUgLyogV0tCdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTMy
MTU5NTQxREJBRTcxRDAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFzay5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5MzVFRUI5RTEyNzc2MUFDMDAzMzIyQjggLyogV0tCdW5kbGVCYWNrRm9yd2FyZExp
c3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM1RUVCQTAxMjc3NjFBQzAwMzMyMkI4IC8qIFdL
QnVuZGxlQmFja0ZvcndhcmRMaXN0SXRlbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUZBMkQ3
NzE1MjEyRTI2MDBDMUJBMEIgLyogV0tCdW5kbGVET01XaW5kb3dFeHRlbnNpb24uY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC05NzMyLDYgKzk3OTcsNyBAQAogCQkJCUJDQjlFMjRDMTEyMEUxNUMwMEEx
MzdFMCAvKiBXS0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFNTJGOTcxOTIwMjYz
MzAwQTFGQTM3IC8qIFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTFBNTU1RjUxMjhDNkM0NzAwOUFCQ0VDIC8qIFdLQ29udGV4dE1lbnVJdGVtLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCUExRDQyMDQ3MURCNTU3ODUwMEJCNkIwRCAvKiBXS0NvbnRleHRN
ZW51TGlzdGVuZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUZCNUYzOTQxNjlFNkE4MDAwMkMy
NUJGIC8qIFdLQ29udGV4dFByaXZhdGVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMzA5MzQ1
QTEzMTVCOTk4MDA5N0E3QkMgLyogV0tDb29raWVNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxMkY1OEY5MTJBODhBNTQwMDYyOTUzMCAvKiBXS0NyZWRlbnRpYWwuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC05NzY0LDE0ICs5ODMwLDEyIEBACiAJCQkJRTFBRUEyMzAxNDY4N0JEQjAwODA0
NTY5IC8qIFdLRnVsbEtleWJvYXJkQWNjZXNzV2F0Y2hlci5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CUNEQ0E4NUM4MTMyQUJBNEUwMEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1NENDMTMxMkQ2NzRFRTAwNUM2N0IwIC8qIFdLR2Vv
bG9jYXRpb25NYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUExRUEwMjNGMURBQzMxREIw
MDk2MDIxRiAvKiBXZWJDb250ZXh0TWVudUxpc3RlbmVyUHJveHkuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkMwNkY0NEYxMkRCREYzRjAwMkQ3OERFIC8qIFdLR2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzBFNjE5OTEyRDZDRDEyMDAxMkE3MkEg
LyogV0tHZW9sb2NhdGlvblBvc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0I0RTUw
MThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MubW0gaW4gU291cmNl
cyAqLywKIAkJCQkwRkNCNEU1MTE4QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9sb2NhdGlvblByb3Zp
ZGVySU9TT2JqQ1NlY3VyaXR5T3JpZ2luLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxNzRBQTcx
NDJBQUM2MTAwMzkyNTBGIC8qIFdLR2VvbWV0cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjYy
RTczMTAxNDMwNDdBNjAwNjlFQzM1IC8qIFdLSGl0VGVzdFJlc3VsdC5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQk4M0VFNTc1QjFEQjdENjExMDBDNzRDNTAgLyogV2ViVmFsaWRhdGlvbk1lc3NhZ2VD
bGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTExMEFFMEMxMzNDMTZDQjAwNzI3MTdBIC8q
IFdLSWNvbkRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMjNDRjFCMTMzRDI2MEEw
MDU2RjgwMCAvKiBXS0ljb25EYXRhYmFzZUNHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0Y2
QUMyMTJDOTFGMzQwMDhGOUMzNSAvKiBXS0ltYWdlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvY29uZmlnLmggYi9Tb3VyY2UvV2ViS2l0Mi9jb25maWcuaApp
bmRleCA3MGNmNTBiNmZhNGM0N2VkYWUxZjg2MDhlNjI1NzY4YjI5ZTRiZDYzLi5jYTU4MGM0OWVm
NzUwNzU5NzdjZDU1MzQyNmM5ZWFiYTA1MWZhYjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9jb25maWcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9jb25maWcuaApAQCAtMTEwLDYgKzExMCwx
MiBAQAogI2VuZGlmCiAjZW5kaWYKIAorI2lmbmRlZiBFTkFCTEVfTkVUV09SS19DQVBUVVJFCisj
aWYgVVNFKE5FVFdPUktfU0VTU0lPTikgJiYgUExBVEZPUk0oQ09DT0EpCisjZGVmaW5lIEVOQUJM
RV9ORVRXT1JLX0NBUFRVUkUgMQorI2VuZGlmCisjZW5kaWYKKwogI2lmbmRlZiBFTkFCTEVfTkVU
V09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04KICNpZiBFTkFCTEUoTkVUV09SS19D
QUNIRSkgJiYgKFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspKQogI2RlZmluZSBFTkFC
TEVfTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04gMQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295782</attachid>
            <date>2016-11-30 16:16:58 -0800</date>
            <delta_ts>2016-11-30 17:40:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164527-20161130161631.patch</filename>
            <type>text/plain</type>
            <size>527724</size>
            <attacher name="Keith Rollin">krollin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA5MDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGMxYTU2Y2NhMWMyYTYx
ZTMwMWQyNmExZjUwOTQzYjgwMmYxNTUyNy4uZjY1ZjQ3MGZmOWNkMTIxMjNlMzgzNWUyZmIyMTkw
ZTkwZmNhNzlhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE2LTExLTI5ICBLZWl0
aCBSb2xsaW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KKworICAgICAgICBOZXR3b3JrIGV2ZW50IHJl
Y29yZC9yZXBsYXkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NDUyNworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjkxNjgxNTc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhwb3J0IHBhcnNlVVJMRW5j
b2RlZEZvcm0uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0tIG5vIGZ1bmN0aW9uYWxpdHkgYWRk
ZWQsIGNoYW5nZWQsIG9yIHJlbW92ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9VUkxQYXJzZXIu
aDoKKwogMjAxNi0xMS0yOCAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgQmxhY2tsaXN0IE5ldGZsaXggZm9yIFRvdWNoQmFyIHN1cHBvcnQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBk
YjljMDUxMjgwYjE3NDQxMjVjZGRkZDY3MjdhYzdiMzgzMmJhMDNiLi5kNjA3MTFhNzQ0YjZiYTIz
YTY5NDk0OTBmNDIxZjNhMjhiNWQ0OGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTU4IEBACisy
MDE2LTExLTI5ICBLZWl0aCBSb2xsaW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KKworICAgICAgICBO
ZXR3b3JrIGV2ZW50IHJlY29yZC9yZXBsYXkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NDUyNworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjkxNjgx
NTc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IFdlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS8qIGZvciByZWNvcmRpbmcgdGhlIG5ldHdv
cmsgZXZlbnRzCisgICAgICAgIHRoYXQgb2NjdXIgd2hlbiBsb2FkaW5nIGEgcGFnZSBhbmQgZm9y
IHJlcGxheWluZyB0aGVtIGxhdGVyLiBVcGRhdGUKKyAgICAgICAgTmV0d29ya0xvYWQgdG8gaW52
b2tlIGNhcHR1cmUgZmFjaWxpdGllcy4gQWRkIHByZWZlcmVuY2VzIGZvciBlbmFibGluZworICAg
ICAgICByZWNvcmQgb3IgcmVwbGF5LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrTG9hZDo6TmV0d29ya0xvYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6
aW5pdGlhbGl6ZUZvclJlY29yZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkOjppbml0
aWFsaXplRm9yUmVwbGF5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6OmluaXRpYWxp
emUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6c2V0RGVmZXJzTG9hZGluZyk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkOjpjb250aW51ZVdpbGxTZW5kUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkOjpzaGFyZWRXaWxsU2VuZFJlZGlyZWN0ZWRSZXF1
ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6Om5vdGlmeURpZFJlY2VpdmVSZXNw
b25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkOjpkaWRSZWNlaXZlRGF0YSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkOjpkaWRDb21wbGV0ZVdpdGhFcnJvcik6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
Ojppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6dGVybWluYXRlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6Y29weUhlYWRlcnMpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FwdHVyZTo6S2V5VmFsdWVQYWlyOjpLZXlWYWx1ZVBhaXIpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVzb3VyY2VSZXF1ZXN0OjpSZXNvdXJjZVJlcXVlc3QpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVzb3VyY2VSZXF1ZXN0OjpvcGVyYXRv
ciBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fw
dHVyZTo6UmVzb3VyY2VSZXNwb25zZTo6UmVzb3VyY2VSZXNwb25zZSk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZXNvdXJjZVJlc3BvbnNlOjpvcGVyYXRvciBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlc291
cmNlRXJyb3I6OlJlc291cmNlRXJyb3IpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVy
ZTo6UmVzb3VyY2VFcnJvcjo6b3BlcmF0b3IgV2ViQ29yZTo6UmVzb3VyY2VFcnJvcik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpKU09OQ29kZXI6OmVuY29kZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpKU09OQ29kZXI6OmRlY29kZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpKU09OQ29kZXI8U3RyaW5nPjo6ZW5jb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkpTT05Db2RlcjxTdHJpbmc+OjpkZWNvZGUpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6SlNPTkNvZGVyPENhcHR1cmVUaW1lVHlw
ZT46OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpKU09OQ29kZXI8
Q2FwdHVyZVRpbWVUeXBlPjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1
cmU6OkpTT05Db2RlcjxLZXlWYWx1ZVBhaXI+OjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FwdHVyZTo6SlNPTkNvZGVyPEtleVZhbHVlUGFpcj46OmRlY29kZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpKU09OQ29kZXI8VmVjdG9yPFQ+Pjo6ZW5jb2RlKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkpTT05Db2RlcjxWZWN0b3I8VD4+Ojpk
ZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6SlNPTkNvZGVyPFJlc291
cmNlUmVxdWVzdD46OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpK
U09OQ29kZXI8UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhcHR1cmU6OkpTT05Db2RlcjxSZXNvdXJjZVJlc3BvbnNlPjo6ZW5jb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkpTT05Db2RlcjxSZXNvdXJjZVJlc3BvbnNlPjo6
ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkpTT05Db2RlcjxSZXNv
dXJjZUVycm9yPjo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkpT
T05Db2RlcjxSZXNvdXJjZUVycm9yPjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhcHR1cmU6OkpTT05Db2RlcjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+OjplbmNvZGUpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6SlNPTkNvZGVyPFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcj46OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpKU09OQ29k
ZXI8UmVxdWVzdFNlbnRFdmVudD46OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YXB0dXJlOjpKU09OQ29kZXI8UmVxdWVzdFNlbnRFdmVudD46OmRlY29kZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpKU09OQ29kZXI8UmVzcG9uc2VSZWNlaXZlZEV2ZW50Pjo6
ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkpTT05Db2RlcjxSZXNw
b25zZVJlY2VpdmVkRXZlbnQ+OjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fw
dHVyZTo6SlNPTkNvZGVyPFJlZGlyZWN0UmVjZWl2ZWRFdmVudD46OmVuY29kZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpKU09OQ29kZXI8UmVkaXJlY3RSZWNlaXZlZEV2ZW50
Pjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkpTT05Db2RlcjxS
ZWRpcmVjdFNlbnRFdmVudD46OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0
dXJlOjpKU09OQ29kZXI8UmVkaXJlY3RTZW50RXZlbnQ+OjpkZWNvZGUpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FwdHVyZTo6SlNPTkNvZGVyPERhdGFSZWNlaXZlZEV2ZW50Pjo6ZW5jb2Rl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkpTT05Db2RlcjxEYXRhUmVjZWl2
ZWRFdmVudD46OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpKU09O
Q29kZXI8RmluaXNoZWRFdmVudD46OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YXB0dXJlOjpKU09OQ29kZXI8RmluaXNoZWRFdmVudD46OmRlY29kZSk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYXB0dXJlOjpldmVudFRvU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhcHR1cmU6OnN0cmluZ1RvRXZlbnQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nh
cHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhcHR1cmU6OlRpbWVkRXZlbnQ6OlRpbWVkRXZlbnQpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVMb2dnaW5nLmg6IEFkZGVkLgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpzaW5nbGV0b24pOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6aW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjp0ZXJtaW5hdGUpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6ZmluZE1hdGNoKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OmZpbmRFeGFjdE1hdGNoKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OmZpbmRCZXN0RnV6enlNYXRj
aCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpmdXp6eU1hdGNo
VVJMcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpsb2FkUmVz
b3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OnJlcG9y
dExvYWRQYXRoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OnJl
cG9ydFJlY29yZFBhdGgpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdl
cjo6cmVwb3J0UmVwbGF5UGF0aCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpN
YW5hZ2VyOjpyZXF1ZXN0VG9QYXRoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6
Ok1hbmFnZXI6OnN0cmluZ1RvSGFzaCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJl
OjpNYW5hZ2VyOjpoYXNoVG9QYXRoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6
Ok1hbmFnZXI6OmxvZ1JlY29yZGVkUmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FwdHVyZTo6TWFuYWdlcjo6bG9nTG9hZGVkUmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6bG9nUGxheWVkQmFja1Jlc291cmNlKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OmVuc3VyZUZpbGVIYW5kbGUpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6b3BlbkNhY2hlRmlsZSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpyZWFkRmlsZSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpnZXRMaW5lKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OmdldFdvcmQpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6cHJpbnRUb0ZpbGUpOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6aXNSZWNvcmRpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6aXNSZXBsYXlpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6bW9kZSk6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZWNvcmRlcjo6cmVjb3JkUmVxdWVz
dFNlbnQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVjb3JkZXI6OnJlY29y
ZFJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVj
b3JkZXI6OnJlY29yZFJlZGlyZWN0UmVjZWl2ZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FwdHVyZTo6UmVjb3JkZXI6OnJlY29yZFJlZGlyZWN0U2VudCk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYXB0dXJlOjpSZWNvcmRlcjo6cmVjb3JkRGF0YVJlY2VpdmVkKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlY29yZGVyOjpyZWNvcmRGaW5pc2gpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVjb3JkZXI6OndyaXRlRXZlbnRzKToKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVjb3JkZXIuaDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZWNvcmRlcjo6cmVjb3JkRXZl
bnQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXBs
YXllci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVwbGF5
ZXI6OnJlcGxheVJlc291cmNlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05l
dHdvcmtDYXB0dXJlUmVwbGF5ZXIuaDogQWRkZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Y2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZXNvdXJjZTo6UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FwdHVyZTo6UmVzb3VyY2U6OnVybCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYXB0dXJlOjpSZXNvdXJjZTo6YmFzZVVSTCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YXB0dXJlOjpSZXNvdXJjZTo6cXVlcnlQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhcHR1cmU6OlJlc291cmNlOjpldmVudFN0cmVhbSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYXB0dXJlOjpSZXNvdXJjZTo6RXZlbnRTdHJlYW06OkV2ZW50U3RyZWFtKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlc291cmNlOjpFdmVudFN0cmVhbTo6bmV4dEV2
ZW50KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVz
b3VyY2UuaDogQWRkZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3Jr
Q2FwdHVyZVR5cGVzLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6
VHlwZUhvbGRlcjo6Zm9yRWFjaFR5cGVJbXBsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
cHR1cmU6OlR5cGVIb2xkZXI6OmZvckVhY2hUeXBlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYXB0dXJlL05ldHdvcmtEYXRhVGFza1JlcGxheS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5OjpOZXR3b3JrRGF0YVRh
c2tSZXBsYXkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFU
YXNrUmVwbGF5Ojp+TmV0d29ya0RhdGFUYXNrUmVwbGF5KToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxheTo6cmVzdW1lKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxheTo6c3VzcGVuZCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmNh
bmNlbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpOZXR3b3JrRGF0YVRhc2tS
ZXBsYXk6OmNvbXBsZXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5ldHdv
cmtEYXRhVGFza1JlcGxheTo6aW52YWxpZGF0ZUFuZENhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYXB0dXJlOjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmVucXVldWVFdmVudEhhbmRs
ZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVw
bGF5OjpyZXBsYXlSZXF1ZXN0U2VudCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJl
OjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnJlcGxheVJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5OjpyZXBsYXlS
ZWRpcmVjdFJlY2VpdmVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5ldHdv
cmtEYXRhVGFza1JlcGxheTo6cmVwbGF5UmVkaXJlY3RTZW50KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxheTo6cmVwbGF5RGF0YVJlY2VpdmVk
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxh
eTo6cmVwbGF5RmluaXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0
d29ya0RhdGFUYXNrUmVwbGF5OjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5OjpkaWRGaW5pc2gpOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0RhdGFUYXNrUmVwbGF5Lmg6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVw
bGF5OjpjcmVhdGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvanNvbi5ocHA6
IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0
d29ya1Byb2Nlc3MpOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBjb25maWcuaDoKKwogMjAxNi0xMS0yOCAgUnlhbiBIYWRkYWQgIDxyeWFu
aGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjA5
MDA4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAppbmRleCA4NjRlYWNkZjc1MWYxM2M0
MDE2NTk4MmZiYWViZjcwM2FiMzk4YWQ1Li43OGUwZTE5YzJiM2JjMmZhNmZlMmVjMzIxYTQ1MmM3
NzEyMjljMTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaApAQCAtNDcsNyArNDcs
NyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0RW5hYmxlZChi
b29sKTsKICAgICAKICAgICB0eXBlZGVmIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+
PiBVUkxFbmNvZGVkRm9ybTsKLSAgICBzdGF0aWMgVVJMRW5jb2RlZEZvcm0gcGFyc2VVUkxFbmNv
ZGVkRm9ybShTdHJpbmdWaWV3KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgVVJMRW5jb2Rl
ZEZvcm0gcGFyc2VVUkxFbmNvZGVkRm9ybShTdHJpbmdWaWV3KTsKICAgICBzdGF0aWMgU3RyaW5n
IHNlcmlhbGl6ZShjb25zdCBVUkxFbmNvZGVkRm9ybSYpOwogCiAgICAgc3RhdGljIGNvbnN0IFVJ
RE5BJiBpbnRlcm5hdGlvbmFsRG9tYWluTmFtZVRyYW5zY29kZXIoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50
eHQKaW5kZXggODcyNjY4ZTBiMWVhZDI0ZmMxMjBmYTA5NzJjY2RjNmQzMmRiMTI2OS4uNzI2NDA5
MmQ1OGM4YzUxNzkxYjUyYTU3NTBjMWM3OGY0OGUwZGRjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQK
QEAgLTIwNCw2ICsyMDQsMTMgQEAgc2V0KE5ldHdvcmtQcm9jZXNzX0NPTU1PTl9TT1VSQ0VTCiAg
ICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3Bw
CiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHAKICAg
ICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAorCisgICAgTmV0
d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcAorICAgIE5ldHdvcmtQ
cm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmNwcAorICAgIE5ldHdvcmtQcm9j
ZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZWNvcmRlci5jcHAKKyAgICBOZXR3b3JrUHJvY2Vz
cy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuY3BwCisgICAgTmV0d29ya1Byb2Nlc3Mv
Y2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNwcAorICAgIE5ldHdvcmtQcm9jZXNzL2Nh
cHR1cmUvTmV0d29ya0RhdGFUYXNrUmVwbGF5LmNwcAogKQogCiBzZXQoV2ViS2l0Ml9TT1VSQ0VT
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKaW5kZXgg
NTE3Zjg0NWFhYmU1MjNmMmVmYTk2MTg0ZWVmNzI1M2FlMmNhNGQ5Zi4uMWMzZTI4MTNkYzY4MDNh
NjNjMzg4Yzk3MzFiNDBmNDcwYTk0N2JlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtMb2FkLmNwcApAQCAtNDMsNiArNDMsMTAgQEAKICNpbmNsdWRlICJOZXR3
b3JrRGF0YVRhc2tDb2NvYS5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJF
KQorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlTWFuYWdlci5oIgorI2VuZGlmCisKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTY3LDYgKzcxLDQ1IEBA
IE5ldHdvcmtMb2FkOjpOZXR3b3JrTG9hZChOZXR3b3JrTG9hZENsaWVudCYgY2xpZW50LCBOZXR3
b3JrTG9hZFBhcmFtZXRlcnMmJiBwYXJhCiAgICAgLCBtX3BhcmFtZXRlcnMoV1RGTW92ZShwYXJh
bWV0ZXJzKSkKICAgICAsIG1fY3VycmVudFJlcXVlc3QobV9wYXJhbWV0ZXJzLnJlcXVlc3QpCiB7
CisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyAgICBzd2l0Y2ggKE5ldHdvcmtDYXB0dXJl
OjpNYW5hZ2VyOjpzaW5nbGV0b24oKS5tb2RlKCkpIHsKKyAgICBjYXNlIE5ldHdvcmtDYXB0dXJl
OjpNYW5hZ2VyOjpSZWNvcmRSZXBsYXlNb2RlOjpSZWNvcmQ6CisgICAgICAgIGluaXRpYWxpemVG
b3JSZWNvcmQobmV0d29ya1Nlc3Npb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5ldHdv
cmtDYXB0dXJlOjpNYW5hZ2VyOjpSZWNvcmRSZXBsYXlNb2RlOjpSZXBsYXk6CisgICAgICAgIGlu
aXRpYWxpemVGb3JSZXBsYXkobmV0d29ya1Nlc3Npb24pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIE5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpSZWNvcmRSZXBsYXlNb2RlOjpEaXNhYmxlZDoK
KyAgICAgICAgaW5pdGlhbGl6ZShuZXR3b3JrU2Vzc2lvbik7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyNlbHNlCisgICAgaW5pdGlhbGl6ZShuZXR3b3JrU2Vzc2lvbik7CisjZW5kaWYKK30KKwor
I2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCit2b2lkIE5ldHdvcmtMb2FkOjppbml0aWFsaXpl
Rm9yUmVjb3JkKE5ldHdvcmtTZXNzaW9uJiBuZXR3b3JrU2Vzc2lvbikKK3sKKyAgICBtX3JlY29y
ZGVyID0gc3RkOjptYWtlX3VuaXF1ZTxOZXR3b3JrQ2FwdHVyZTo6UmVjb3JkZXI+KCk7CisgICAg
bV90YXNrID0gTmV0d29ya0RhdGFUYXNrOjpjcmVhdGUobmV0d29ya1Nlc3Npb24sICp0aGlzLCBt
X3BhcmFtZXRlcnMpOworICAgIGlmICghbV9wYXJhbWV0ZXJzLmRlZmVyc0xvYWRpbmcpIHsKKyAg
ICAgICAgbV90YXNrLT5yZXN1bWUoKTsKKyAgICAgICAgbV9yZWNvcmRlci0+cmVjb3JkUmVxdWVz
dFNlbnQobV9wYXJhbWV0ZXJzLnJlcXVlc3QpOworICAgIH0KK30KKwordm9pZCBOZXR3b3JrTG9h
ZDo6aW5pdGlhbGl6ZUZvclJlcGxheShOZXR3b3JrU2Vzc2lvbiYgbmV0d29ya1Nlc3Npb24pCit7
CisgICAgbV9yZXBsYXllciA9IHN0ZDo6bWFrZV91bmlxdWU8TmV0d29ya0NhcHR1cmU6OlJlcGxh
eWVyPigpOworICAgIG1fdGFzayA9IG1fcmVwbGF5ZXItPnJlcGxheVJlc291cmNlKG5ldHdvcmtT
ZXNzaW9uLCAqdGhpcywgbV9wYXJhbWV0ZXJzKTsKKyAgICBpZiAoIW1fcGFyYW1ldGVycy5kZWZl
cnNMb2FkaW5nKQorICAgICAgICBtX3Rhc2stPnJlc3VtZSgpOworfQorI2VuZGlmCisKK3ZvaWQg
TmV0d29ya0xvYWQ6OmluaXRpYWxpemUoTmV0d29ya1Nlc3Npb24mIG5ldHdvcmtTZXNzaW9uKQor
ewogICAgIG1fdGFzayA9IE5ldHdvcmtEYXRhVGFzazo6Y3JlYXRlKG5ldHdvcmtTZXNzaW9uLCAq
dGhpcywgbV9wYXJhbWV0ZXJzKTsKICAgICBpZiAoIW1fcGFyYW1ldGVycy5kZWZlcnNMb2FkaW5n
KQogICAgICAgICBtX3Rhc2stPnJlc3VtZSgpOwpAQCAtMTEzLDggKzE1NiwxMyBAQCB2b2lkIE5l
dHdvcmtMb2FkOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQogICAgIGlmIChtX3Rhc2sp
IHsKICAgICAgICAgaWYgKGRlZmVycykKICAgICAgICAgICAgIG1fdGFzay0+c3VzcGVuZCgpOwot
ICAgICAgICBlbHNlCisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbV90YXNrLT5yZXN1bWUo
KTsKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorICAgICAgICAgICAgaWYgKG1fcmVjb3Jk
ZXIpCisgICAgICAgICAgICAgICAgbV9yZWNvcmRlci0+cmVjb3JkUmVxdWVzdFNlbnQobV9wYXJh
bWV0ZXJzLnJlcXVlc3QpOworI2VuZGlmCisgICAgICAgIH0KICAgICB9CiAjZWxzZQogICAgIGlm
IChtX2hhbmRsZSkKQEAgLTE0Miw2ICsxOTAsMTEgQEAgdm9pZCBOZXR3b3JrTG9hZDo6Y29udGlu
dWVXaWxsU2VuZFJlcXVlc3QoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgbmV3UmVxdWVzdCkK
ICAgICBtX2N1cnJlbnRSZXF1ZXN0LnVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRQcm9w
ZXJ0aWVzKG5ld1JlcXVlc3QpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJF
KQorICAgIGlmIChtX3JlY29yZGVyKQorICAgICAgICBtX3JlY29yZGVyLT5yZWNvcmRSZWRpcmVj
dFNlbnQobmV3UmVxdWVzdCk7CisjZW5kaWYKKwogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAg
ICAgYXV0byByZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyID0gc3RkOjpleGNoYW5nZShtX3JlZGly
ZWN0Q29tcGxldGlvbkhhbmRsZXIsIG51bGxwdHIpOwogICAgIEFTU0VSVChyZWRpcmVjdENvbXBs
ZXRpb25IYW5kbGVyKTsKQEAgLTE5NCw2ICsyNDcsMTEgQEAgdm9pZCBOZXR3b3JrTG9hZDo6c2hh
cmVkV2lsbFNlbmRSZWRpcmVjdGVkUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBS
ZXMKICAgICBBU1NFUlQoIXJlZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCkpOwogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CiAKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorICAgIGlm
IChtX3JlY29yZGVyKQorICAgICAgICBtX3JlY29yZGVyLT5yZWNvcmRSZWRpcmVjdFJlY2VpdmVk
KHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOworI2VuZGlmCisKICAgICBhdXRvIG9sZFJlcXVl
c3QgPSBXVEZNb3ZlKG1fY3VycmVudFJlcXVlc3QpOwogICAgIG1fY3VycmVudFJlcXVlc3QgPSBy
ZXF1ZXN0OwogICAgIG1fY2xpZW50LmdldCgpLndpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoV1RG
TW92ZShvbGRSZXF1ZXN0KSwgV1RGTW92ZShyZXF1ZXN0KSwgV1RGTW92ZShyZWRpcmVjdFJlc3Bv
bnNlKSk7CkBAIC0zMjQsNiArMzgyLDExIEBAIHZvaWQgTmV0d29ya0xvYWQ6Om5vdGlmeURpZFJl
Y2VpdmVSZXNwb25zZShSZXNvdXJjZVJlc3BvbnNlJiYgcmVzcG9uc2UsIFJlc3BvbnNlCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAorI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUp
CisgICAgaWYgKG1fcmVjb3JkZXIpCisgICAgICAgIG1fcmVjb3JkZXItPnJlY29yZFJlc3BvbnNl
UmVjZWl2ZWQocmVzcG9uc2UpOworI2VuZGlmCisKICAgICBpZiAoc2hhcmVkRGlkUmVjZWl2ZVJl
c3BvbnNlKFdURk1vdmUocmVzcG9uc2UpKSA9PSBOZXR3b3JrTG9hZENsaWVudDo6U2hvdWxkQ29u
dGludWVEaWRSZWNlaXZlUmVzcG9uc2U6Ok5vKSB7CiAgICAgICAgIG1fcmVzcG9uc2VDb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpOwogICAgICAgICByZXR1cm47
CkBAIC0zMzUsNiArMzk4LDExIEBAIHZvaWQgTmV0d29ya0xvYWQ6OmRpZFJlY2VpdmVEYXRhKFJl
ZjxTaGFyZWRCdWZmZXI+JiYgYnVmZmVyKQogewogICAgIEFTU0VSVCghbV90aHJvdHRsZSk7CiAK
KyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorICAgIGlmIChtX3JlY29yZGVyKQorICAgICAg
ICBtX3JlY29yZGVyLT5yZWNvcmREYXRhUmVjZWl2ZWQoYnVmZmVyLmdldCgpKTsKKyNlbmRpZgor
CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHRoZSBlbmNvZGVkIGRhdGEgbGVuZ3RoLCBu
b3QgdGhlIGRlY29kZWQgZGF0YSBsZW5ndGguCiAgICAgYXV0byBzaXplID0gYnVmZmVyLT5zaXpl
KCk7CiAgICAgbV9jbGllbnQuZ2V0KCkuZGlkUmVjZWl2ZUJ1ZmZlcihXVEZNb3ZlKGJ1ZmZlciks
IHNpemUpOwpAQCAtMzQ0LDYgKzQxMiwxMSBAQCB2b2lkIE5ldHdvcmtMb2FkOjpkaWRDb21wbGV0
ZVdpdGhFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKICAgICBBU1NFUlQoIW1f
dGhyb3R0bGUpOwogCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyAgICBpZiAobV9yZWNv
cmRlcikKKyAgICAgICAgbV9yZWNvcmRlci0+cmVjb3JkRmluaXNoKGVycm9yKTsKKyNlbmRpZgor
CiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAgICAgICBtX2NsaWVudC5nZXQoKS5kaWRGaW5p
c2hMb2FkaW5nKFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOwogICAgIGVsc2UK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5oCmluZGV4IDc2NmJk
NTBkY2M4OTkzNDEzNTYyMGZiYmZkNWUxZTlhZWQwNmYzMGEuLmIyNTJhMGMwMWQxNmI3YzU2YWU4
NTFmYTU0ODAxNDY4NDAyNWE5YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtMb2FkLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0xvYWQuaApAQCAtMzgsNiArMzgsMTEgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0F1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlLmg+CiAjZW5kaWYKIAorI2lmIEVOQUJMRShORVRXT1JLX0NBUFRV
UkUpCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVSZWNvcmRlci5oIgorI2luY2x1ZGUgIk5ldHdv
cmtDYXB0dXJlUmVwbGF5ZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xh
c3MgTmV0d29ya0xvYWQgZmluYWwgOgpAQCAtOTUsNiArMTAwLDE0IEBAIHB1YmxpYzoKICNlbmRp
ZgogCiBwcml2YXRlOgorI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisjaWYgRU5BQkxFKE5FVFdP
UktfQ0FQVFVSRSkKKyAgICB2b2lkIGluaXRpYWxpemVGb3JSZWNvcmQoTmV0d29ya1Nlc3Npb24m
KTsKKyAgICB2b2lkIGluaXRpYWxpemVGb3JSZXBsYXkoTmV0d29ya1Nlc3Npb24mKTsKKyNlbmRp
ZgorICAgIHZvaWQgaW5pdGlhbGl6ZShOZXR3b3JrU2Vzc2lvbiYpOworI2VuZGlmCisKICAgICBO
ZXR3b3JrTG9hZENsaWVudDo6U2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2Ugc2hhcmVk
RGlkUmVjZWl2ZVJlc3BvbnNlKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJik7CiAgICAgdm9p
ZCBzaGFyZWRXaWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYpOwogCkBAIC0xNTEsNiArMTY0LDExIEBA
IHByaXZhdGU6CiAjZW5kaWYKIAogICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBtX2N1cnJl
bnRSZXF1ZXN0OyAvLyBVcGRhdGVkIG9uIHJlZGlyZWN0cy4KKworI2lmIEVOQUJMRShORVRXT1JL
X0NBUFRVUkUpCisgICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYXB0dXJlOjpSZWNvcmRlcj4g
bV9yZWNvcmRlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhcHR1cmU6OlJlcGxheWVy
PiBtX3JlcGxheWVyOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCA2
MWY5ODc2NjA5YjZkNzBhOGY2ZTFjMDc5NTdmYjg1OTYzODIxODgyLi5mZmFmN2RiODU4NzViY2U2
NjBkODY2MzU0MmE5M2RkNWFjYzU3NDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC03NCw2ICs3NCwxMCBAQAogI2luY2x1ZGUg
Ik5ldHdvcmtDYWNoZUNvZGVycy5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBU
VVJFKQorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlTWFuYWdlci5oIgorI2VuZGlmCisKICNpZiBQ
TEFURk9STShDT0NPQSkKICNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbkNvY29hLmgiCiAjZW5kaWYK
QEAgLTIyMiw2ICsyMjYsMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdv
cmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKICAgICAgICAgbWVt
b3J5UHJlc3N1cmVIYW5kbGVyLmluc3RhbGwoKTsKICAgICB9CiAKKyNpZiBFTkFCTEUoTkVUV09S
S19DQVBUVVJFKQorICAgIE5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpzaW5nbGV0b24oKS5pbml0
aWFsaXplKAorICAgICAgICBwYXJhbWV0ZXJzLnJlY29yZFJlcGxheU1vZGUsCisgICAgICAgIHBh
cmFtZXRlcnMucmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbik7CisjZW5kaWYKKwogICAgIG1fZGlz
a0NhY2hlSXNEaXNhYmxlZEZvclRlc3RpbmcgPSBwYXJhbWV0ZXJzLnNob3VsZFVzZVRlc3RpbmdO
ZXR3b3JrU2Vzc2lvbjsKIAogICAgIG1fZGlza0NhY2hlU2l6ZU92ZXJyaWRlID0gcGFyYW1ldGVy
cy5kaXNrQ2FjaGVTaXplT3ZlcnJpZGU7CkBAIC01OTYsNiArNjA2LDEwIEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKHVpbnQ2NF90IHdlYlBhZ2VJ
RCwgY29uc3QgU3RyCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnRlcm1pbmF0ZSgpCiB7CisjaWYg
RU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyAgICBOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6c2lu
Z2xldG9uKCkudGVybWluYXRlKCk7CisjZW5kaWYKKwogICAgIHBsYXRmb3JtVGVybWluYXRlKCk7
CiAgICAgQ2hpbGRQcm9jZXNzOjp0ZXJtaW5hdGUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmNwcAppbmRleCBiZDdhYjU0OGI5YzQ1NzRkMjQxZjQ3N2Q5Yzg5NzdjMmE0YzJk
N2MxLi4wOTlhM2E0MzQ3YmEyMzg1MGIxYzhmOTY5NmJiMzgxMjY4MDdiMDJhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBAIC05Myw2ICs5MywxMCBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogI2lmIE9TKExJTlVYKQogICAgIGVuY29kZXIgPDwgbWVtb3J5UHJlc3N1cmVNb25p
dG9ySGFuZGxlOwogI2VuZGlmCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyAgICBlbmNv
ZGVyIDw8IHJlY29yZFJlcGxheU1vZGU7CisgICAgZW5jb2RlciA8PCByZWNvcmRSZXBsYXlDYWNo
ZUxvY2F0aW9uOworI2VuZGlmCiB9CiAKIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzJiByZXN1bHQpCkBAIC0xODgsNiArMTkyLDEzIEBAIGJvb2wgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIE5l
dHdvcmtQcm9jCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCisjaWYgRU5BQkxFKE5F
VFdPUktfQ0FQVFVSRSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5yZWNvcmRSZXBs
YXlNb2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzdWx0LnJlY29yZFJlcGxheUNhY2hlTG9jYXRpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisjZW5kaWYKKwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuaAppbmRleCBmNDU2OWM5NDY5YTU3NzJlNjBiMWM5YmZmNTYwODVkM2FjYjQzYzNkLi4z
MzBlM2JhNDA5ZDhkMTlmYjI1MWEyZjJjNDY5N2Y0YmIzN2MyYzk3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgKQEAgLTEwNiw2ICsxMDYsMTEgQEAgc3RydWN0IE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICNpZiBPUyhMSU5VWCkKICAgICBJUEM6OkF0dGFjaG1l
bnQgbWVtb3J5UHJlc3N1cmVNb25pdG9ySGFuZGxlOwogI2VuZGlmCisKKyNpZiBFTkFCTEUoTkVU
V09SS19DQVBUVVJFKQorICAgIFN0cmluZyByZWNvcmRSZXBsYXlNb2RlOworICAgIFN0cmluZyBy
ZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUv
TmV0d29ya0NhcHR1cmVFdmVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhYjdjMjBhZmNhYmJj
NjE3NjM3MmI3NDQ0MDdkN2Q0ZDlmZDE2YmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuY3BwCkBAIC0w
LDAgKzEsNTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ik5ldHdvcmtDYXB0dXJlRXZlbnQuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisK
KworI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlTG9nZ2luZy5oIgorI2luY2x1ZGUgImpzb24uaHBw
IgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
UmVzb3VyY2VSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9VUkxQYXJzZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNl
NjQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgewor
Citjb25zdCBjaGFyIFJlcXVlc3RTZW50RXZlbnQ6OnR5cGVOYW1lW10gPSAiUmVxdWVzdFNlbnRF
dmVudCI7Citjb25zdCBjaGFyIFJlc3BvbnNlUmVjZWl2ZWRFdmVudDo6dHlwZU5hbWVbXSA9ICJS
ZXNwb25zZVJlY2VpdmVkRXZlbnQiOworY29uc3QgY2hhciBSZWRpcmVjdFJlY2VpdmVkRXZlbnQ6
OnR5cGVOYW1lW10gPSAiUmVkaXJlY3RSZWNlaXZlZEV2ZW50IjsKK2NvbnN0IGNoYXIgUmVkaXJl
Y3RTZW50RXZlbnQ6OnR5cGVOYW1lW10gPSAiUmVkaXJlY3RTZW50RXZlbnQiOworY29uc3QgY2hh
ciBEYXRhUmVjZWl2ZWRFdmVudDo6dHlwZU5hbWVbXSA9ICJEYXRhUmVjZWl2ZWRFdmVudCI7Citj
b25zdCBjaGFyIEZpbmlzaGVkRXZlbnQ6OnR5cGVOYW1lW10gPSAiRmluaXNoZWRFdmVudCI7CisK
K3N0YXRpYyBIZWFkZXJzIGNvcHlIZWFkZXJzKGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAm
IGh0dHBIZWFkZXJzKQoreworICAgIEhlYWRlcnMgaGVhZGVyczsKKyAgICBmb3IgKGNvbnN0IGF1
dG8mIGhlYWRlciA6IGh0dHBIZWFkZXJzKQorICAgICAgICBoZWFkZXJzLmFwcGVuZChLZXlWYWx1
ZVBhaXIoaGVhZGVyLmtleSwgaGVhZGVyLnZhbHVlKSk7CisgICAgcmV0dXJuIGhlYWRlcnM7Cit9
CisKKy8vIC0tLS0tLS0tLS0KKworS2V5VmFsdWVQYWlyOjpLZXlWYWx1ZVBhaXIoU3RyaW5nJiYg
a2V5LCBTdHJpbmcmJiB2YWx1ZSkKKyAgICA6IGtleShXVEZNb3ZlKGtleSkpCisgICAgLCB2YWx1
ZShXVEZNb3ZlKHZhbHVlKSkKK3sKK30KKworS2V5VmFsdWVQYWlyOjpLZXlWYWx1ZVBhaXIoY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgOiBrZXkoa2V5KQorICAg
ICwgdmFsdWUodmFsdWUpCit7Cit9CisKKy8vIC0tLS0tLS0tLS0KKworUmVzb3VyY2VSZXF1ZXN0
OjpSZXNvdXJjZVJlcXVlc3QoU3RyaW5nJiYgdXJsLCBTdHJpbmcmJiByZWZlcnJlciwgaW50IHBv
bGljeSwgU3RyaW5nJiYgbWV0aG9kLCBIZWFkZXJzJiYgaGVhZGVycykKKyAgICA6IHVybChXVEZN
b3ZlKHVybCkpCisgICAgLCByZWZlcnJlcihXVEZNb3ZlKHJlZmVycmVyKSkKKyAgICAsIHBvbGlj
eShXVEZNb3ZlKHBvbGljeSkpCisgICAgLCBtZXRob2QoV1RGTW92ZShtZXRob2QpKQorICAgICwg
aGVhZGVycyhXVEZNb3ZlKGhlYWRlcnMpKQoreworfQorCitSZXNvdXJjZVJlcXVlc3Q6OlJlc291
cmNlUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCisgICAg
OiB1cmwocmVxdWVzdC51cmwoKS5zdHJpbmcoKSkKKyAgICAsIHJlZmVycmVyKHJlcXVlc3QuaHR0
cFJlZmVycmVyKCkpCisgICAgLCBwb2xpY3koc3RhdGljX2Nhc3Q8aW50PihyZXF1ZXN0LmNhY2hl
UG9saWN5KCkpKQorICAgICwgbWV0aG9kKHJlcXVlc3QuaHR0cE1ldGhvZCgpKQorICAgICwgaGVh
ZGVycyhjb3B5SGVhZGVycyhyZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkpCit7Cit9CisKK1Jl
c291cmNlUmVxdWVzdDo6b3BlcmF0b3IgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0KCkgY29uc3QK
K3sKKyAgICBXZWJDb3JlOjpVUkxQYXJzZXIgcGFyc2VyKHVybCk7CisgICAgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0IHJlcXVlc3QocGFyc2VyLnJlc3VsdCgpLCByZWZlcnJlciwgc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3k+KHBvbGljeSkpOworICAgIHJl
cXVlc3Quc2V0SFRUUE1ldGhvZChtZXRob2QpOworCisgICAgZm9yIChjb25zdCBhdXRvJiBoZWFk
ZXIgOiBoZWFkZXJzKQorICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChoZWFkZXIu
a2V5LCBoZWFkZXIudmFsdWUpOworCisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKKy8vIC0tLS0t
LS0tLS0KKworUmVzb3VyY2VSZXNwb25zZTo6UmVzb3VyY2VSZXNwb25zZShTdHJpbmcmJiB1cmws
IFN0cmluZyYmIG1pbWVUeXBlLCBsb25nIGxvbmcgZXhwZWN0ZWRMZW5ndGgsIFN0cmluZyYmIHRl
eHRFbmNvZGluZ05hbWUsIFN0cmluZyYmIHZlcnNpb24sIGludCBzdGF0dXMsIFN0cmluZyYmIHJl
YXNvbiwgSGVhZGVycyYmIGhlYWRlcnMpCisgICAgOiB1cmwoV1RGTW92ZSh1cmwpKQorICAgICwg
bWltZVR5cGUoV1RGTW92ZShtaW1lVHlwZSkpCisgICAgLCBleHBlY3RlZExlbmd0aChXVEZNb3Zl
KGV4cGVjdGVkTGVuZ3RoKSkKKyAgICAsIHRleHRFbmNvZGluZ05hbWUoV1RGTW92ZSh0ZXh0RW5j
b2RpbmdOYW1lKSkKKyAgICAsIHN0YXR1cyhXVEZNb3ZlKHN0YXR1cykpCisgICAgLCByZWFzb24o
V1RGTW92ZShyZWFzb24pKQorICAgICwgaGVhZGVycyhXVEZNb3ZlKGhlYWRlcnMpKQoreworfQor
CitSZXNvdXJjZVJlc3BvbnNlOjpSZXNvdXJjZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQorICAgIDogdXJsKHJlc3BvbnNlLnVybCgpKQorICAgICwg
bWltZVR5cGUocmVzcG9uc2UubWltZVR5cGUoKSkKKyAgICAsIGV4cGVjdGVkTGVuZ3RoKHJlc3Bv
bnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpKQorICAgICwgdGV4dEVuY29kaW5nTmFtZShyZXNw
b25zZS50ZXh0RW5jb2RpbmdOYW1lKCkpCisgICAgLCB2ZXJzaW9uKHJlc3BvbnNlLmh0dHBWZXJz
aW9uKCkpCisgICAgLCBzdGF0dXMocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSkKKyAgICAsIHJl
YXNvbihyZXNwb25zZS5odHRwU3RhdHVzVGV4dCgpKQorICAgICwgaGVhZGVycyhjb3B5SGVhZGVy
cyhyZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkpKQoreworfQorCitSZXNvdXJjZVJlc3BvbnNl
OjpvcGVyYXRvciBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlKCkgY29uc3QKK3sKKyAgICBXZWJD
b3JlOjpVUkxQYXJzZXIgcGFyc2VyKHVybCk7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSByZXNwb25zZShwYXJzZXIucmVzdWx0KCksIG1pbWVUeXBlLCBleHBlY3RlZExlbmd0aCwgdGV4
dEVuY29kaW5nTmFtZSk7CisgICAgcmVzcG9uc2Uuc2V0SFRUUFZlcnNpb24odmVyc2lvbik7Cisg
ICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoc3RhdHVzKTsKKyAgICByZXNwb25zZS5zZXRI
VFRQU3RhdHVzVGV4dChyZWFzb24pOworCisgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBo
ZWFkZXJzKQorICAgICAgICByZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoaGVhZGVyLmtleSwg
aGVhZGVyLnZhbHVlKTsKKworICAgIHJldHVybiByZXNwb25zZTsKK30KKworLy8gLS0tLS0tLS0t
LQorCitSZXNvdXJjZUVycm9yOjpSZXNvdXJjZUVycm9yKFN0cmluZyYmIGRvbWFpbiwgU3RyaW5n
JiYgZmFpbGluZ1VSTCwgU3RyaW5nJiYgbG9jYWxpemVkRGVzY3JpcHRpb24sIGludCBlcnJvckNv
ZGUsIGludCB0eXBlKQorICAgIDogZG9tYWluKFdURk1vdmUoZG9tYWluKSkKKyAgICAsIGZhaWxp
bmdVUkwoV1RGTW92ZShmYWlsaW5nVVJMKSkKKyAgICAsIGxvY2FsaXplZERlc2NyaXB0aW9uKFdU
Rk1vdmUobG9jYWxpemVkRGVzY3JpcHRpb24pKQorICAgICwgZXJyb3JDb2RlKFdURk1vdmUoZXJy
b3JDb2RlKSkKKyAgICAsIHR5cGUoV1RGTW92ZSh0eXBlKSkKK3sKK30KKworUmVzb3VyY2VFcnJv
cjo6UmVzb3VyY2VFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvcikKKyAg
ICA6IGRvbWFpbihlcnJvci5kb21haW4oKSkKKyAgICAsIGZhaWxpbmdVUkwoZXJyb3IuZmFpbGlu
Z1VSTCgpKQorICAgICwgbG9jYWxpemVkRGVzY3JpcHRpb24oZXJyb3IubG9jYWxpemVkRGVzY3Jp
cHRpb24oKSkKKyAgICAsIGVycm9yQ29kZShlcnJvci5lcnJvckNvZGUoKSkKKyAgICAsIHR5cGUo
c3RhdGljX2Nhc3Q8aW50PihlcnJvci50eXBlKCkpKQoreworfQorCitSZXNvdXJjZUVycm9yOjpv
cGVyYXRvciBXZWJDb3JlOjpSZXNvdXJjZUVycm9yKCkgY29uc3QKK3sKKyAgICBXZWJDb3JlOjpV
UkxQYXJzZXIgcGFyc2VyKGZhaWxpbmdVUkwpOworICAgIFdlYkNvcmU6OlJlc291cmNlRXJyb3Ig
ZXJyb3IoZG9tYWluLCBlcnJvckNvZGUsIHBhcnNlci5yZXN1bHQoKSwgbG9jYWxpemVkRGVzY3Jp
cHRpb24sIHN0YXRpY19jYXN0PFdlYkNvcmU6OlJlc291cmNlRXJyb3I6OlR5cGU+KHR5cGUpKTsK
KworICAgIHJldHVybiBlcnJvcjsKK30KKworLy8gLS0tLS0tLS0tLQorCit1c2luZyBqc29uID0g
bmxvaG1hbm46OmJhc2ljX2pzb248PjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK3N0cnVj
dCBKU09OQ29kZXIgeworICAgIHN0YXRpYyBqc29uIGVuY29kZShUeXBlIHZhbCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBqc29uKHZhbCk7CisgICAgfQorCisgICAgc3RhdGljIFR5cGUgZGVjb2Rl
KGNvbnN0IGpzb24mIGpWYWwpCisgICAgeworICAgICAgICByZXR1cm4galZhbC5nZXQ8VHlwZT4o
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgSlNPTkNvZGVyPGNvbnN0IGNoYXIq
PiB7CisgICAgc3RhdGljIGpzb24gZW5jb2RlKGNvbnN0IGNoYXIqIHZhbCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBqc29uKHZhbCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEpT
T05Db2RlcjxTdHJpbmc+IHsKKyAgICBzdGF0aWMganNvbiBlbmNvZGUoY29uc3QgU3RyaW5nJiB2
YWwpCisgICAgeworICAgICAgICByZXR1cm4ganNvbihzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4o
dmFsLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RyaW5nIGRlY29kZShj
b25zdCBqc29uJiBqVmFsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZyhqVmFsLmdldF9y
ZWY8Y29uc3Qgc3RkOjpzdHJpbmcmPigpLmNfc3RyKCkpOworICAgIH0KK307CisKK3RlbXBsYXRl
PD4KK3N0cnVjdCBKU09OQ29kZXI8Q2FwdHVyZVRpbWVUeXBlPiB7CisgICAgc3RhdGljIGpzb24g
ZW5jb2RlKGNvbnN0IENhcHR1cmVUaW1lVHlwZSYgdGltZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU09OQ29kZXI8ZG91YmxlPjo6ZW5jb2RlKHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNv
bmRzKCkpOworICAgIH0KKworICAgIHN0YXRpYyBDYXB0dXJlVGltZVR5cGUgZGVjb2RlKGNvbnN0
IGpzb24mIGpUaW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENhcHR1cmVUaW1lVHlwZTo6ZnJv
bVJhd1NlY29uZHMoSlNPTkNvZGVyPGRvdWJsZT46OmRlY29kZShqVGltZSkpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBKU09OQ29kZXI8S2V5VmFsdWVQYWlyPiB7CisgICAgc3Rh
dGljIGpzb24gZW5jb2RlKGNvbnN0IEtleVZhbHVlUGFpciYgcGFpcikKKyAgICB7CisgICAgICAg
IHJldHVybiBqc29uIHsKKyAgICAgICAgICAgIEpTT05Db2RlcjxTdHJpbmc+OjplbmNvZGUocGFp
ci5rZXkpLAorICAgICAgICAgICAgSlNPTkNvZGVyPFN0cmluZz46OmVuY29kZShwYWlyLnZhbHVl
KQorICAgICAgICB9OworICAgIH0KKworICAgIHN0YXRpYyBLZXlWYWx1ZVBhaXIgZGVjb2RlKGNv
bnN0IGpzb24mIGpQYWlyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEtleVZhbHVlUGFpciB7Cisg
ICAgICAgICAgICBKU09OQ29kZXI8U3RyaW5nPjo6ZGVjb2RlKGpQYWlyWzBdKSwKKyAgICAgICAg
ICAgIEpTT05Db2RlcjxTdHJpbmc+OjpkZWNvZGUoalBhaXJbMV0pCisgICAgICAgIH07CisgICAg
fQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU09OQ29kZXI8VmVjdG9yPFQ+
PiB7CisgICAgc3RhdGljIGpzb24gZW5jb2RlKGNvbnN0IFZlY3RvcjxUPiYgdmVjdG9yKQorICAg
IHsKKyAgICAgICAganNvbiBqVmVjdG9yOworCisgICAgICAgIGZvciAoY29uc3QgYXV0byYgZWxl
bWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGpWZWN0b3IucHVzaF9iYWNrKEpTT05Db2RlcjxU
Pjo6ZW5jb2RlKGVsZW1lbnQpKTsKKworICAgICAgICByZXR1cm4galZlY3RvcjsKKyAgICB9CisK
KyAgICBzdGF0aWMgVmVjdG9yPFQ+IGRlY29kZShjb25zdCBqc29uJiBqVmVjdG9yKQorICAgIHsK
KyAgICAgICAgVmVjdG9yPFQ+IHZlY3RvcjsKKworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVs
ZW1lbnQgOiBqVmVjdG9yKQorICAgICAgICAgICAgdmVjdG9yLmFwcGVuZChKU09OQ29kZXI8VD46
OmRlY29kZShlbGVtZW50KSk7CisKKyAgICAgICAgcmV0dXJuIHZlY3RvcjsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+CitzdHJ1Y3QgSlNPTkNvZGVyPFJlc291cmNlUmVxdWVzdD4geworICAgIHN0
YXRpYyBqc29uIGVuY29kZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCisgICAgewor
ICAgICAgICByZXR1cm4ganNvbiB7CisgICAgICAgICAgICB7ICJ1cmwiLCBKU09OQ29kZXI8U3Ry
aW5nPjo6ZW5jb2RlKHJlcXVlc3QudXJsKSB9LAorICAgICAgICAgICAgeyAicmVmZXJyZXIiLCBK
U09OQ29kZXI8U3RyaW5nPjo6ZW5jb2RlKHJlcXVlc3QucmVmZXJyZXIpIH0sCisgICAgICAgICAg
ICB7ICJwb2xpY3kiLCBKU09OQ29kZXI8aW50Pjo6ZW5jb2RlKHJlcXVlc3QucG9saWN5KSB9LAor
ICAgICAgICAgICAgeyAibWV0aG9kIiwgSlNPTkNvZGVyPFN0cmluZz46OmVuY29kZShyZXF1ZXN0
Lm1ldGhvZCkgfSwKKyAgICAgICAgICAgIHsgImhlYWRlcnMiLCBKU09OQ29kZXI8SGVhZGVycz46
OmVuY29kZShyZXF1ZXN0LmhlYWRlcnMpIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBzdGF0
aWMgUmVzb3VyY2VSZXF1ZXN0IGRlY29kZShjb25zdCBqc29uJiBqUmVxdWVzdCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBSZXNvdXJjZVJlcXVlc3QgeworICAgICAgICAgICAgSlNPTkNvZGVyPFN0
cmluZz46OmRlY29kZShqUmVxdWVzdFsidXJsIl0pLAorICAgICAgICAgICAgSlNPTkNvZGVyPFN0
cmluZz46OmRlY29kZShqUmVxdWVzdFsicmVmZXJyZXIiXSksCisgICAgICAgICAgICBKU09OQ29k
ZXI8aW50Pjo6ZGVjb2RlKGpSZXF1ZXN0WyJwb2xpY3kiXSksCisgICAgICAgICAgICBKU09OQ29k
ZXI8U3RyaW5nPjo6ZGVjb2RlKGpSZXF1ZXN0WyJtZXRob2QiXSksCisgICAgICAgICAgICBKU09O
Q29kZXI8SGVhZGVycz46OmRlY29kZShqUmVxdWVzdFsiaGVhZGVycyJdKQorICAgICAgICB9Owor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBKU09OQ29kZXI8UmVzb3VyY2VSZXNwb25z
ZT4geworICAgIHN0YXRpYyBqc29uIGVuY29kZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqc29uIHsKKyAgICAgICAgICAgIHsgInVybCIs
IEpTT05Db2RlcjxTdHJpbmc+OjplbmNvZGUocmVzcG9uc2UudXJsKSB9LAorICAgICAgICAgICAg
eyAibWltZVR5cGUiLCBKU09OQ29kZXI8U3RyaW5nPjo6ZW5jb2RlKHJlc3BvbnNlLm1pbWVUeXBl
KSB9LAorICAgICAgICAgICAgeyAiZXhwZWN0ZWRMZW5ndGgiLCBKU09OQ29kZXI8bG9uZyBsb25n
Pjo6ZW5jb2RlKHJlc3BvbnNlLmV4cGVjdGVkTGVuZ3RoKSB9LAorICAgICAgICAgICAgeyAidGV4
dEVuY29kaW5nTmFtZSIsIEpTT05Db2RlcjxTdHJpbmc+OjplbmNvZGUocmVzcG9uc2UudGV4dEVu
Y29kaW5nTmFtZSkgfSwKKyAgICAgICAgICAgIHsgInZlcnNpb24iLCBKU09OQ29kZXI8U3RyaW5n
Pjo6ZW5jb2RlKHJlc3BvbnNlLnZlcnNpb24pIH0sCisgICAgICAgICAgICB7ICJzdGF0dXMiLCBK
U09OQ29kZXI8aW50Pjo6ZW5jb2RlKHJlc3BvbnNlLnN0YXR1cykgfSwKKyAgICAgICAgICAgIHsg
InJlYXNvbiIsIEpTT05Db2RlcjxTdHJpbmc+OjplbmNvZGUocmVzcG9uc2UucmVhc29uKSB9LAor
ICAgICAgICAgICAgeyAiaGVhZGVycyIsIEpTT05Db2RlcjxIZWFkZXJzPjo6ZW5jb2RlKHJlc3Bv
bnNlLmhlYWRlcnMpIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzb3VyY2VS
ZXNwb25zZSBkZWNvZGUoY29uc3QganNvbiYgalJlc3BvbnNlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFJlc291cmNlUmVzcG9uc2UgeworICAgICAgICAgICAgSlNPTkNvZGVyPFN0cmluZz46OmRl
Y29kZShqUmVzcG9uc2VbInVybCJdKSwKKyAgICAgICAgICAgIEpTT05Db2RlcjxTdHJpbmc+Ojpk
ZWNvZGUoalJlc3BvbnNlWyJtaW1lVHlwZSJdKSwKKyAgICAgICAgICAgIEpTT05Db2Rlcjxsb25n
IGxvbmc+OjpkZWNvZGUoalJlc3BvbnNlWyJleHBlY3RlZExlbmd0aCJdKSwKKyAgICAgICAgICAg
IEpTT05Db2RlcjxTdHJpbmc+OjpkZWNvZGUoalJlc3BvbnNlWyJ0ZXh0RW5jb2RpbmdOYW1lIl0p
LAorICAgICAgICAgICAgSlNPTkNvZGVyPFN0cmluZz46OmRlY29kZShqUmVzcG9uc2VbInZlcnNp
b24iXSksCisgICAgICAgICAgICBKU09OQ29kZXI8aW50Pjo6ZGVjb2RlKGpSZXNwb25zZVsic3Rh
dHVzIl0pLAorICAgICAgICAgICAgSlNPTkNvZGVyPFN0cmluZz46OmRlY29kZShqUmVzcG9uc2Vb
InJlYXNvbiJdKSwKKyAgICAgICAgICAgIEpTT05Db2RlcjxIZWFkZXJzPjo6ZGVjb2RlKGpSZXNw
b25zZVsiaGVhZGVycyJdKQorICAgICAgICB9OworICAgIH0KK307CisKK3RlbXBsYXRlPD4KK3N0
cnVjdCBKU09OQ29kZXI8UmVzb3VyY2VFcnJvcj4geworICAgIHN0YXRpYyBqc29uIGVuY29kZShj
b25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKKyAgICB7CisgICAgICAgIHJldHVybiBqc29uIHsK
KyAgICAgICAgICAgIHsgImRvbWFpbiIsIEpTT05Db2RlcjxTdHJpbmc+OjplbmNvZGUoZXJyb3Iu
ZG9tYWluKSB9LAorICAgICAgICAgICAgeyAiZmFpbGluZ1VSTCIsIEpTT05Db2RlcjxTdHJpbmc+
OjplbmNvZGUoZXJyb3IuZmFpbGluZ1VSTCkgfSwKKyAgICAgICAgICAgIHsgImxvY2FsaXplZERl
c2NyaXB0aW9uIiwgSlNPTkNvZGVyPFN0cmluZz46OmVuY29kZShlcnJvci5sb2NhbGl6ZWREZXNj
cmlwdGlvbikgfSwKKyAgICAgICAgICAgIHsgImVycm9yQ29kZSIsIEpTT05Db2RlcjxpbnQ+Ojpl
bmNvZGUoZXJyb3IuZXJyb3JDb2RlKSB9LAorICAgICAgICAgICAgeyAidHlwZSIsIEpTT05Db2Rl
cjxpbnQ+OjplbmNvZGUoZXJyb3IudHlwZSkgfQorICAgICAgICB9OworICAgIH0KKworICAgIHN0
YXRpYyBSZXNvdXJjZUVycm9yIGRlY29kZShjb25zdCBqc29uJiBqRXJyb3IpCisgICAgeworICAg
ICAgICByZXR1cm4gUmVzb3VyY2VFcnJvciB7CisgICAgICAgICAgICBKU09OQ29kZXI8U3RyaW5n
Pjo6ZGVjb2RlKGpFcnJvclsiZG9tYWluIl0pLAorICAgICAgICAgICAgSlNPTkNvZGVyPFN0cmlu
Zz46OmRlY29kZShqRXJyb3JbImZhaWxpbmdVUkwiXSksCisgICAgICAgICAgICBKU09OQ29kZXI8
U3RyaW5nPjo6ZGVjb2RlKGpFcnJvclsibG9jYWxpemVkRGVzY3JpcHRpb24iXSksCisgICAgICAg
ICAgICBKU09OQ29kZXI8aW50Pjo6ZGVjb2RlKGpFcnJvclsiZXJyb3JDb2RlIl0pLAorICAgICAg
ICAgICAgSlNPTkNvZGVyPGludD46OmRlY29kZShqRXJyb3JbInR5cGUiXSkKKyAgICAgICAgfTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgSlNPTkNvZGVyPFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcj4geworICAgIHN0YXRpYyBqc29uIGVuY29kZShjb25zdCBXZWJDb3JlOjpTaGFyZWRC
dWZmZXImIGRhdGEpCisgICAgeworICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOworICAgICAg
ICBiYXNlNjRFbmNvZGUoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCBidWZmZXIpOworICAgICAg
ICByZXR1cm4ganNvbigmYnVmZmVyWzBdLCBidWZmZXIuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgUmVmPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZGVjb2RlKGNvbnN0IGpzb24mIGpEYXRh
KQorICAgIHsKKyAgICAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAgICAgIGNvbnN0IGF1dG8m
IHN0ciA9IGpEYXRhLmdldF9yZWY8Y29uc3Qgc3RkOjpzdHJpbmcmPigpOworICAgICAgICAodm9p
ZCkgYmFzZTY0RGVjb2RlKHN0ci5jX3N0cigpLCBzdHIuc2l6ZSgpLCBkYXRhKTsKKyAgICAgICAg
cmV0dXJuIFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IoZGF0YSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEpTT05Db2RlcjxSZXF1ZXN0U2VudEV2ZW50PiB7Cisg
ICAgc3RhdGljIGpzb24gZW5jb2RlKGNvbnN0IFJlcXVlc3RTZW50RXZlbnQmIGV2ZW50KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGpzb24geworICAgICAgICAgICAgeyAidHlwZSIsIEpTT05Db2Rl
cjxjb25zdCBjaGFyKj46OmVuY29kZShldmVudC50eXBlTmFtZSkgfSwKKyAgICAgICAgICAgIHsg
InRpbWUiLCBKU09OQ29kZXI8Q2FwdHVyZVRpbWVUeXBlPjo6ZW5jb2RlKGV2ZW50LnRpbWUpIH0s
CisgICAgICAgICAgICB7ICJyZXF1ZXN0IiwgSlNPTkNvZGVyPFJlc291cmNlUmVxdWVzdD46OmVu
Y29kZShldmVudC5yZXF1ZXN0KSB9CisgICAgICAgIH07CisgICAgfQorCisgICAgc3RhdGljIFJl
cXVlc3RTZW50RXZlbnQgZGVjb2RlKGNvbnN0IGpzb24mIGpFdmVudCkKKyAgICB7CisgICAgICAg
IHJldHVybiBSZXF1ZXN0U2VudEV2ZW50IHsKKyAgICAgICAgICAgIEpTT05Db2RlcjxDYXB0dXJl
VGltZVR5cGU+OjpkZWNvZGUoakV2ZW50WyJ0aW1lIl0pLAorICAgICAgICAgICAgSlNPTkNvZGVy
PFJlc291cmNlUmVxdWVzdD46OmRlY29kZShqRXZlbnRbInJlcXVlc3QiXSkKKyAgICAgICAgfTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgSlNPTkNvZGVyPFJlc3BvbnNlUmVjZWl2
ZWRFdmVudD4geworICAgIHN0YXRpYyBqc29uIGVuY29kZShjb25zdCBSZXNwb25zZVJlY2VpdmVk
RXZlbnQmIGV2ZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzb24geworICAgICAgICAgICAg
eyAidHlwZSIsIEpTT05Db2Rlcjxjb25zdCBjaGFyKj46OmVuY29kZShldmVudC50eXBlTmFtZSkg
fSwKKyAgICAgICAgICAgIHsgInRpbWUiLCBKU09OQ29kZXI8Q2FwdHVyZVRpbWVUeXBlPjo6ZW5j
b2RlKGV2ZW50LnRpbWUpIH0sCisgICAgICAgICAgICB7ICJyZXNwb25zZSIsIEpTT05Db2RlcjxS
ZXNvdXJjZVJlc3BvbnNlPjo6ZW5jb2RlKGV2ZW50LnJlc3BvbnNlKSB9CisgICAgICAgIH07Cisg
ICAgfQorCisgICAgc3RhdGljIFJlc3BvbnNlUmVjZWl2ZWRFdmVudCBkZWNvZGUoY29uc3QganNv
biYgakV2ZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJlc3BvbnNlUmVjZWl2ZWRFdmVudCB7
CisgICAgICAgICAgICBKU09OQ29kZXI8Q2FwdHVyZVRpbWVUeXBlPjo6ZGVjb2RlKGpFdmVudFsi
dGltZSJdKSwKKyAgICAgICAgICAgIEpTT05Db2RlcjxSZXNvdXJjZVJlc3BvbnNlPjo6ZGVjb2Rl
KGpFdmVudFsicmVzcG9uc2UiXSkKKyAgICAgICAgfTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
CitzdHJ1Y3QgSlNPTkNvZGVyPFJlZGlyZWN0UmVjZWl2ZWRFdmVudD4geworICAgIHN0YXRpYyBq
c29uIGVuY29kZShjb25zdCBSZWRpcmVjdFJlY2VpdmVkRXZlbnQmIGV2ZW50KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGpzb24geworICAgICAgICAgICAgeyAidHlwZSIsIEpTT05Db2Rlcjxjb25z
dCBjaGFyKj46OmVuY29kZShldmVudC50eXBlTmFtZSkgfSwKKyAgICAgICAgICAgIHsgInRpbWUi
LCBKU09OQ29kZXI8Q2FwdHVyZVRpbWVUeXBlPjo6ZW5jb2RlKGV2ZW50LnRpbWUpIH0sCisgICAg
ICAgICAgICB7ICJyZXF1ZXN0IiwgSlNPTkNvZGVyPFJlc291cmNlUmVxdWVzdD46OmVuY29kZShl
dmVudC5yZXF1ZXN0KSB9LAorICAgICAgICAgICAgeyAicmVzcG9uc2UiLCBKU09OQ29kZXI8UmVz
b3VyY2VSZXNwb25zZT46OmVuY29kZShldmVudC5yZXNwb25zZSkgfQorICAgICAgICB9OworICAg
IH0KKworICAgIHN0YXRpYyBSZWRpcmVjdFJlY2VpdmVkRXZlbnQgZGVjb2RlKGNvbnN0IGpzb24m
IGpFdmVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBSZWRpcmVjdFJlY2VpdmVkRXZlbnQgewor
ICAgICAgICAgICAgSlNPTkNvZGVyPENhcHR1cmVUaW1lVHlwZT46OmRlY29kZShqRXZlbnRbInRp
bWUiXSksCisgICAgICAgICAgICBKU09OQ29kZXI8UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlKGpF
dmVudFsicmVxdWVzdCJdKSwKKyAgICAgICAgICAgIEpTT05Db2RlcjxSZXNvdXJjZVJlc3BvbnNl
Pjo6ZGVjb2RlKGpFdmVudFsicmVzcG9uc2UiXSkKKyAgICAgICAgfTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+CitzdHJ1Y3QgSlNPTkNvZGVyPFJlZGlyZWN0U2VudEV2ZW50PiB7CisgICAgc3Rh
dGljIGpzb24gZW5jb2RlKGNvbnN0IFJlZGlyZWN0U2VudEV2ZW50JiBldmVudCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBqc29uIHsKKyAgICAgICAgICAgIHsgInR5cGUiLCBKU09OQ29kZXI8Y29u
c3QgY2hhcio+OjplbmNvZGUoZXZlbnQudHlwZU5hbWUpIH0sCisgICAgICAgICAgICB7ICJ0aW1l
IiwgSlNPTkNvZGVyPENhcHR1cmVUaW1lVHlwZT46OmVuY29kZShldmVudC50aW1lKSB9LAorICAg
ICAgICAgICAgeyAicmVxdWVzdCIsIEpTT05Db2RlcjxSZXNvdXJjZVJlcXVlc3Q+OjplbmNvZGUo
ZXZlbnQucmVxdWVzdCkgfSwKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVkaXJl
Y3RTZW50RXZlbnQgZGVjb2RlKGNvbnN0IGpzb24mIGpFdmVudCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBSZWRpcmVjdFNlbnRFdmVudCB7CisgICAgICAgICAgICBKU09OQ29kZXI8Q2FwdHVyZVRp
bWVUeXBlPjo6ZGVjb2RlKGpFdmVudFsidGltZSJdKSwKKyAgICAgICAgICAgIEpTT05Db2RlcjxS
ZXNvdXJjZVJlcXVlc3Q+OjpkZWNvZGUoakV2ZW50WyJyZXF1ZXN0Il0pCisgICAgICAgIH07Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEpTT05Db2RlcjxEYXRhUmVjZWl2ZWRFdmVu
dD4geworICAgIHN0YXRpYyBqc29uIGVuY29kZShjb25zdCBEYXRhUmVjZWl2ZWRFdmVudCYgZXZl
bnQpCisgICAgeworICAgICAgICByZXR1cm4ganNvbiB7CisgICAgICAgICAgICB7ICJ0eXBlIiwg
SlNPTkNvZGVyPGNvbnN0IGNoYXIqPjo6ZW5jb2RlKGV2ZW50LnR5cGVOYW1lKSB9LAorICAgICAg
ICAgICAgeyAidGltZSIsIEpTT05Db2RlcjxDYXB0dXJlVGltZVR5cGU+OjplbmNvZGUoZXZlbnQu
dGltZSkgfSwKKyAgICAgICAgICAgIHsgImRhdGEiLCBKU09OQ29kZXI8V2ViQ29yZTo6U2hhcmVk
QnVmZmVyPjo6ZW5jb2RlKGV2ZW50LmRhdGEuZ2V0KCkpIH0KKyAgICAgICAgfTsKKyAgICB9CisK
KyAgICBzdGF0aWMgRGF0YVJlY2VpdmVkRXZlbnQgZGVjb2RlKGNvbnN0IGpzb24mIGpFdmVudCkK
KyAgICB7CisgICAgICAgIHJldHVybiBEYXRhUmVjZWl2ZWRFdmVudCB7CisgICAgICAgICAgICBK
U09OQ29kZXI8Q2FwdHVyZVRpbWVUeXBlPjo6ZGVjb2RlKGpFdmVudFsidGltZSJdKSwKKyAgICAg
ICAgICAgIEpTT05Db2RlcjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+OjpkZWNvZGUoakV2ZW50WyJk
YXRhIl0pCisgICAgICAgIH07CisgICAgfQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEpTT05D
b2RlcjxGaW5pc2hlZEV2ZW50PiB7CisgICAgc3RhdGljIGpzb24gZW5jb2RlKGNvbnN0IEZpbmlz
aGVkRXZlbnQmIGV2ZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzb24geworICAgICAgICAg
ICAgeyAidHlwZSIsIEpTT05Db2Rlcjxjb25zdCBjaGFyKj46OmVuY29kZShldmVudC50eXBlTmFt
ZSkgfSwKKyAgICAgICAgICAgIHsgInRpbWUiLCBKU09OQ29kZXI8Q2FwdHVyZVRpbWVUeXBlPjo6
ZW5jb2RlKGV2ZW50LnRpbWUpIH0sCisgICAgICAgICAgICB7ICJlcnJvciIsIEpTT05Db2RlcjxS
ZXNvdXJjZUVycm9yPjo6ZW5jb2RlKGV2ZW50LmVycm9yKSB9CisgICAgICAgIH07CisgICAgfQor
CisgICAgc3RhdGljIEZpbmlzaGVkRXZlbnQgZGVjb2RlKGNvbnN0IGpzb24mIGpFdmVudCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBGaW5pc2hlZEV2ZW50IHsKKyAgICAgICAgICAgIEpTT05Db2Rl
cjxDYXB0dXJlVGltZVR5cGU+OjpkZWNvZGUoakV2ZW50WyJ0aW1lIl0pLAorICAgICAgICAgICAg
SlNPTkNvZGVyPFJlc291cmNlRXJyb3I+OjpkZWNvZGUoakV2ZW50WyJlcnJvciJdKQorICAgICAg
ICB9OworICAgIH0KK307CisKK3N0ZDo6c3RyaW5nIGV2ZW50VG9TdHJpbmcoY29uc3QgQ2FwdHVy
ZUV2ZW50JiBldmVudCkKK3sKKyAgICBqc29uIHJlc3VsdDsKKworICAgIFdURjo6dmlzaXQoWyZy
ZXN1bHRdKGNvbnN0IGF1dG8mIGV2ZW50KSB7CisgICAgICAgIHVzaW5nIEV2ZW50VHlwZSA9IHN0
ZDo6ZGVjYXlfdDxkZWNsdHlwZShldmVudCk+OworICAgICAgICByZXN1bHQgPSBKU09OQ29kZXI8
RXZlbnRUeXBlPjo6ZW5jb2RlKGV2ZW50KTsKKyAgICB9LCBldmVudCk7CisKKyAgICByZXR1cm4g
cmVzdWx0LmR1bXAoNCk7Cit9CisKK09wdGlvbmFsQ2FwdHVyZUV2ZW50IHN0cmluZ1RvRXZlbnQo
Y29uc3QgY2hhcioganNvblN0cikKK3sKKyAgICBhdXRvIGpWYWx1ZSA9IGpzb246OnBhcnNlKGpz
b25TdHIpOworICAgIGNvbnN0IGF1dG8mIHR5cGUgPSBqVmFsdWVbInR5cGUiXS5nZXRfcmVmPGNv
bnN0IHN0ZDo6c3RyaW5nJj4oKTsKKworICAgIE9wdGlvbmFsQ2FwdHVyZUV2ZW50IHJlc3VsdCB7
IHN0ZDo6bnVsbG9wdCB9OworICAgIENhcHR1cmVFdmVudFR5cGVIb2xkZXI6OmZvckVhY2hUeXBl
KFsmXShhdXRvKiBUKSAtPiBib29sIHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHN0ZDo6cmVtb3Zl
X3BvaW50ZXJfdDxkZWNsdHlwZShUKT47CisgICAgICAgIGlmICh0eXBlID09IFR5cGU6OnR5cGVO
YW1lKSB7CisgICAgICAgICAgICByZXN1bHQgPSBPcHRpb25hbENhcHR1cmVFdmVudChKU09OQ29k
ZXI8VHlwZT46OmRlY29kZShqVmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZl
bnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44OGZiNjUwNDNlYmJlNmExMDUxYWU3YzVhMGY1NGZkMzQyNWI1ZTgy
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVy
ZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmgKQEAgLTAsMCArMSwyMjQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRlICJO
ZXR3b3JrQ2FwdHVyZVR5cGVzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4K
KyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBSZXNvdXJjZUVycm9yOworY2xhc3MgUmVzb3VyY2VS
ZXF1ZXN0OworY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7
CituYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgeworCitzdHJ1Y3QgUmVxdWVzdFNlbnRFdmVudDsK
K3N0cnVjdCBSZXNwb25zZVJlY2VpdmVkRXZlbnQ7CitzdHJ1Y3QgUmVkaXJlY3RSZWNlaXZlZEV2
ZW50Oworc3RydWN0IFJlZGlyZWN0U2VudEV2ZW50Oworc3RydWN0IERhdGFSZWNlaXZlZEV2ZW50
Oworc3RydWN0IEZpbmlzaGVkRXZlbnQ7CitzdHJ1Y3QgS2V5VmFsdWVQYWlyOworCit1c2luZyBD
YXB0dXJlRXZlbnRUeXBlSG9sZGVyID0gVHlwZUhvbGRlcjxSZXF1ZXN0U2VudEV2ZW50LCBSZXNw
b25zZVJlY2VpdmVkRXZlbnQsIFJlZGlyZWN0UmVjZWl2ZWRFdmVudCwgUmVkaXJlY3RTZW50RXZl
bnQsIERhdGFSZWNlaXZlZEV2ZW50LCBGaW5pc2hlZEV2ZW50PjsKK3VzaW5nIENhcHR1cmVFdmVu
dCA9IENhcHR1cmVFdmVudFR5cGVIb2xkZXI6OlZhcmlhbnRUeXBlOwordXNpbmcgT3B0aW9uYWxD
YXB0dXJlRXZlbnQgPSBzdGQ6Om9wdGlvbmFsPENhcHR1cmVFdmVudD47Cit1c2luZyBDYXB0dXJl
RXZlbnRzID0gVmVjdG9yPENhcHR1cmVFdmVudD47Cit1c2luZyBDYXB0dXJlQ2xvY2tUeXBlID0g
V1RGOjpNb25vdG9uaWNUaW1lOwordXNpbmcgQ2FwdHVyZVRpbWVUeXBlID0gV1RGOjpNb25vdG9u
aWNUaW1lOwordXNpbmcgSGVhZGVycyA9IFZlY3RvcjxLZXlWYWx1ZVBhaXI+OworCitzdGQ6OnN0
cmluZyBldmVudFRvU3RyaW5nKGNvbnN0IENhcHR1cmVFdmVudCYpOworT3B0aW9uYWxDYXB0dXJl
RXZlbnQgc3RyaW5nVG9FdmVudChjb25zdCBjaGFyKik7CisKK3N0cnVjdCBLZXlWYWx1ZVBhaXIg
eworICAgIEtleVZhbHVlUGFpcihTdHJpbmcmJiBrZXksIFN0cmluZyYmIHZhbHVlKTsKKyAgICBL
ZXlWYWx1ZVBhaXIoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisg
ICAgU3RyaW5nIGtleTsKKyAgICBTdHJpbmcgdmFsdWU7Cit9Oworc3RhdGljX2Fzc2VydChzdGQ6
OmlzX21vdmVfY29uc3RydWN0aWJsZTxLZXlWYWx1ZVBhaXI+Ojp2YWx1ZSwgIktleVZhbHVlUGFp
ciBpcyBub3QgbW92ZSBjb25zdHJ1Y3RpYmxlIik7CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfbW92
ZV9hc3NpZ25hYmxlPEtleVZhbHVlUGFpcj46OnZhbHVlLCAiS2V5VmFsdWVQYWlyIGlzIG5vdCBt
b3ZlIGFzc2lnbmFibGUiKTsKKworc3RydWN0IFJlc291cmNlUmVxdWVzdCB7CisgICAgUmVzb3Vy
Y2VSZXF1ZXN0KFN0cmluZyYmIHVybCwgU3RyaW5nJiYgcmVmZXJyZXIsIGludCBwb2xpY3ksIFN0
cmluZyYmIG1ldGhvZCwgSGVhZGVycyYmKTsKKyAgICBSZXNvdXJjZVJlcXVlc3QoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgb3BlcmF0b3IgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0KCkgY29uc3Q7CisKKyAgICBTdHJpbmcgdXJsOworICAgIFN0cmluZyByZWZlcnJlcjsK
KyAgICBpbnQgcG9saWN5OworICAgIFN0cmluZyBtZXRob2Q7CisgICAgSGVhZGVycyBoZWFkZXJz
OworfTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc19tb3ZlX2NvbnN0cnVjdGlibGU8UmVzb3VyY2VS
ZXF1ZXN0Pjo6dmFsdWUsICJSZXNvdXJjZVJlcXVlc3QgaXMgbm90IG1vdmUgY29uc3RydWN0aWJs
ZSIpOworc3RhdGljX2Fzc2VydChzdGQ6OmlzX21vdmVfYXNzaWduYWJsZTxSZXNvdXJjZVJlcXVl
c3Q+Ojp2YWx1ZSwgIlJlc291cmNlUmVxdWVzdCBpcyBub3QgbW92ZSBhc3NpZ25hYmxlIik7CisK
K3N0cnVjdCBSZXNvdXJjZVJlc3BvbnNlIHsKKyAgICBSZXNvdXJjZVJlc3BvbnNlKFN0cmluZyYm
IHVybCwgU3RyaW5nJiYgbWltZVR5cGUsIGxvbmcgbG9uZyBleHBlY3RlZExlbmd0aCwgU3RyaW5n
JiYgdGV4dEVuY29kaW5nTmFtZSwgU3RyaW5nJiYgdmVyc2lvbiwgaW50IHN0YXR1cywgU3RyaW5n
JiYgcmVhc29uLCBIZWFkZXJzJiYpOworICAgIFJlc291cmNlUmVzcG9uc2UoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSYpOworICAgIG9wZXJhdG9yIFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UoKSBjb25zdDsKKworICAgIFN0cmluZyB1cmw7CisgICAgU3RyaW5nIG1pbWVUeXBlOwor
ICAgIGxvbmcgbG9uZyBleHBlY3RlZExlbmd0aDsKKyAgICBTdHJpbmcgdGV4dEVuY29kaW5nTmFt
ZTsKKyAgICBTdHJpbmcgdmVyc2lvbjsKKyAgICBpbnQgc3RhdHVzOworICAgIFN0cmluZyByZWFz
b247CisgICAgSGVhZGVycyBoZWFkZXJzOworfTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc19tb3Zl
X2NvbnN0cnVjdGlibGU8UmVzb3VyY2VSZXNwb25zZT46OnZhbHVlLCAiUmVzb3VyY2VSZXNwb25z
ZSBpcyBub3QgbW92ZSBjb25zdHJ1Y3RpYmxlIik7CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfbW92
ZV9hc3NpZ25hYmxlPFJlc291cmNlUmVzcG9uc2U+Ojp2YWx1ZSwgIlJlc291cmNlUmVzcG9uc2Ug
aXMgbm90IG1vdmUgYXNzaWduYWJsZSIpOworCitzdHJ1Y3QgUmVzb3VyY2VFcnJvciB7CisgICAg
UmVzb3VyY2VFcnJvcihTdHJpbmcmJiBkb21haW4sIFN0cmluZyYmIGZhaWxpbmdVUkwsIFN0cmlu
ZyYmIGxvY2FsaXplZERlc2NyaXB0aW9uLCBpbnQgZXJyb3JDb2RlLCBpbnQgdHlwZSk7CisgICAg
UmVzb3VyY2VFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CisgICAgb3BlcmF0
b3IgV2ViQ29yZTo6UmVzb3VyY2VFcnJvcigpIGNvbnN0OworCisgICAgU3RyaW5nIGRvbWFpbjsK
KyAgICBTdHJpbmcgZmFpbGluZ1VSTDsKKyAgICBTdHJpbmcgbG9jYWxpemVkRGVzY3JpcHRpb247
CisgICAgaW50IGVycm9yQ29kZTsKKyAgICBpbnQgdHlwZTsKK307CitzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfbW92ZV9jb25zdHJ1Y3RpYmxlPFJlc291cmNlRXJyb3I+Ojp2YWx1ZSwgIlJlc291cmNl
RXJyb3IgaXMgbm90IG1vdmUgY29uc3RydWN0aWJsZSIpOworc3RhdGljX2Fzc2VydChzdGQ6Omlz
X21vdmVfYXNzaWduYWJsZTxSZXNvdXJjZUVycm9yPjo6dmFsdWUsICJSZXNvdXJjZUVycm9yIGlz
IG5vdCBtb3ZlIGFzc2lnbmFibGUiKTsKKworc3RydWN0IFRpbWVkRXZlbnQgeworICAgIFRpbWVk
RXZlbnQoKQorICAgICAgICA6IHRpbWUoQ2FwdHVyZUNsb2NrVHlwZTo6bm93KCkpIHsgfQorICAg
IFRpbWVkRXZlbnQoQ2FwdHVyZVRpbWVUeXBlJiYgdGltZSkKKyAgICAgICAgOiB0aW1lKFdURk1v
dmUodGltZSkpIHsgfQorCisgICAgQ2FwdHVyZVRpbWVUeXBlIHRpbWU7Cit9Oworc3RhdGljX2Fz
c2VydChzdGQ6OmlzX21vdmVfY29uc3RydWN0aWJsZTxUaW1lZEV2ZW50Pjo6dmFsdWUsICJUaW1l
ZEV2ZW50IGlzIG5vdCBtb3ZlIGNvbnN0cnVjdGlibGUiKTsKK3N0YXRpY19hc3NlcnQoc3RkOjpp
c19tb3ZlX2Fzc2lnbmFibGU8VGltZWRFdmVudD46OnZhbHVlLCAiVGltZWRFdmVudCBpcyBub3Qg
bW92ZSBhc3NpZ25hYmxlIik7CisKK3N0cnVjdCBSZXF1ZXN0U2VudEV2ZW50IGZpbmFsIDogcHVi
bGljIFRpbWVkRXZlbnQgeworICAgIFJlcXVlc3RTZW50RXZlbnQoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorICAgICAgICA6IFRpbWVkRXZlbnQoKQorICAgICAgICAs
IHJlcXVlc3QocmVxdWVzdCkgeyB9CisgICAgUmVxdWVzdFNlbnRFdmVudChDYXB0dXJlVGltZVR5
cGUmJiB0aW1lLCBSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0KQorICAgICAgICA6IFRpbWVkRXZl
bnQoV1RGTW92ZSh0aW1lKSkKKyAgICAgICAgLCByZXF1ZXN0KFdURk1vdmUocmVxdWVzdCkpIHsg
fQorCisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Q7CisgICAgc3RhdGljIGNvbnN0IGNoYXIg
dHlwZU5hbWVbXTsKK307CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfbW92ZV9jb25zdHJ1Y3RpYmxl
PFJlcXVlc3RTZW50RXZlbnQ+Ojp2YWx1ZSwgIlJlcXVlc3RTZW50RXZlbnQgaXMgbm90IG1vdmUg
Y29uc3RydWN0aWJsZSIpOworc3RhdGljX2Fzc2VydChzdGQ6OmlzX21vdmVfYXNzaWduYWJsZTxS
ZXF1ZXN0U2VudEV2ZW50Pjo6dmFsdWUsICJSZXF1ZXN0U2VudEV2ZW50IGlzIG5vdCBtb3ZlIGFz
c2lnbmFibGUiKTsKKworc3RydWN0IFJlc3BvbnNlUmVjZWl2ZWRFdmVudCBmaW5hbCA6IHB1Ymxp
YyBUaW1lZEV2ZW50IHsKKyAgICBSZXNwb25zZVJlY2VpdmVkRXZlbnQoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCisgICAgICAgIDogVGltZWRFdmVudCgpCisgICAg
ICAgICwgcmVzcG9uc2UocmVzcG9uc2UpIHsgfQorICAgIFJlc3BvbnNlUmVjZWl2ZWRFdmVudChD
YXB0dXJlVGltZVR5cGUmJiB0aW1lLCBSZXNvdXJjZVJlc3BvbnNlJiYgcmVzcG9uc2UpCisgICAg
ICAgIDogVGltZWRFdmVudChXVEZNb3ZlKHRpbWUpKQorICAgICAgICAsIHJlc3BvbnNlKFdURk1v
dmUocmVzcG9uc2UpKSB7IH0KKworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisgICAg
c3RhdGljIGNvbnN0IGNoYXIgdHlwZU5hbWVbXTsKK307CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
bW92ZV9jb25zdHJ1Y3RpYmxlPFJlc3BvbnNlUmVjZWl2ZWRFdmVudD46OnZhbHVlLCAiUmVzcG9u
c2VSZWNlaXZlZEV2ZW50IGlzIG5vdCBtb3ZlIGNvbnN0cnVjdGlibGUiKTsKK3N0YXRpY19hc3Nl
cnQoc3RkOjppc19tb3ZlX2Fzc2lnbmFibGU8UmVzcG9uc2VSZWNlaXZlZEV2ZW50Pjo6dmFsdWUs
ICJSZXNwb25zZVJlY2VpdmVkRXZlbnQgaXMgbm90IG1vdmUgYXNzaWduYWJsZSIpOworCitzdHJ1
Y3QgUmVkaXJlY3RSZWNlaXZlZEV2ZW50IGZpbmFsIDogcHVibGljIFRpbWVkRXZlbnQgeworICAg
IFJlZGlyZWN0UmVjZWl2ZWRFdmVudChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQorICAgICAg
ICA6IFRpbWVkRXZlbnQoKQorICAgICAgICAsIHJlcXVlc3QocmVxdWVzdCkKKyAgICAgICAgLCBy
ZXNwb25zZShyZXNwb25zZSkgeyB9CisgICAgUmVkaXJlY3RSZWNlaXZlZEV2ZW50KENhcHR1cmVU
aW1lVHlwZSYmIHRpbWUsIFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIFJlc291cmNlUmVzcG9u
c2UmJiByZXNwb25zZSkKKyAgICAgICAgOiBUaW1lZEV2ZW50KFdURk1vdmUodGltZSkpCisgICAg
ICAgICwgcmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKQorICAgICAgICAsIHJlc3BvbnNlKFdURk1v
dmUocmVzcG9uc2UpKSB7IH0KKworICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0OworICAgIFJl
c291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgdHlwZU5hbWVb
XTsKK307CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfbW92ZV9jb25zdHJ1Y3RpYmxlPFJlZGlyZWN0
UmVjZWl2ZWRFdmVudD46OnZhbHVlLCAiUmVkaXJlY3RSZWNlaXZlZEV2ZW50IGlzIG5vdCBtb3Zl
IGNvbnN0cnVjdGlibGUiKTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc19tb3ZlX2Fzc2lnbmFibGU8
UmVkaXJlY3RSZWNlaXZlZEV2ZW50Pjo6dmFsdWUsICJSZWRpcmVjdFJlY2VpdmVkRXZlbnQgaXMg
bm90IG1vdmUgYXNzaWduYWJsZSIpOworCitzdHJ1Y3QgUmVkaXJlY3RTZW50RXZlbnQgZmluYWwg
OiBwdWJsaWMgVGltZWRFdmVudCB7CisgICAgUmVkaXJlY3RTZW50RXZlbnQoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorICAgICAgICA6IFRpbWVkRXZlbnQoKQorICAg
ICAgICAsIHJlcXVlc3QocmVxdWVzdCkgeyB9CisgICAgUmVkaXJlY3RTZW50RXZlbnQoQ2FwdHVy
ZVRpbWVUeXBlJiYgdGltZSwgUmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCkKKyAgICAgICAgOiBU
aW1lZEV2ZW50KFdURk1vdmUodGltZSkpCisgICAgICAgICwgcmVxdWVzdChXVEZNb3ZlKHJlcXVl
c3QpKSB7IH0KKworICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0OworICAgIHN0YXRpYyBjb25z
dCBjaGFyIHR5cGVOYW1lW107Cit9Oworc3RhdGljX2Fzc2VydChzdGQ6OmlzX21vdmVfY29uc3Ry
dWN0aWJsZTxSZWRpcmVjdFNlbnRFdmVudD46OnZhbHVlLCAiUmVkaXJlY3RTZW50RXZlbnQgaXMg
bm90IG1vdmUgY29uc3RydWN0aWJsZSIpOworc3RhdGljX2Fzc2VydChzdGQ6OmlzX21vdmVfYXNz
aWduYWJsZTxSZWRpcmVjdFNlbnRFdmVudD46OnZhbHVlLCAiUmVkaXJlY3RTZW50RXZlbnQgaXMg
bm90IG1vdmUgYXNzaWduYWJsZSIpOworCitzdHJ1Y3QgRGF0YVJlY2VpdmVkRXZlbnQgZmluYWwg
OiBwdWJsaWMgVGltZWRFdmVudCB7CisgICAgRGF0YVJlY2VpdmVkRXZlbnQoKQorICAgICAgICA6
IFRpbWVkRXZlbnQoKQorICAgICAgICAsIGRhdGEoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVh
dGUoKSkgeyB9CisgICAgRGF0YVJlY2VpdmVkRXZlbnQoV2ViQ29yZTo6U2hhcmVkQnVmZmVyJiBk
YXRhKQorICAgICAgICA6IFRpbWVkRXZlbnQoKQorICAgICAgICAsIGRhdGEoUmVmPFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcj4oZGF0YSkpIHsgfQorICAgIERhdGFSZWNlaXZlZEV2ZW50KENhcHR1cmVU
aW1lVHlwZSYmIHRpbWUsIFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciYgZGF0YSkKKyAgICAgICAgOiBU
aW1lZEV2ZW50KFdURk1vdmUodGltZSkpCisgICAgICAgICwgZGF0YShSZWY8V2ViQ29yZTo6U2hh
cmVkQnVmZmVyPihkYXRhKSkgeyB9CisKKyAgICBSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBk
YXRhOworICAgIHN0YXRpYyBjb25zdCBjaGFyIHR5cGVOYW1lW107Cit9Oworc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX21vdmVfY29uc3RydWN0aWJsZTxEYXRhUmVjZWl2ZWRFdmVudD46OnZhbHVlLCAi
RGF0YVJlY2VpdmVkRXZlbnQgaXMgbm90IG1vdmUgY29uc3RydWN0aWJsZSIpOworc3RhdGljX2Fz
c2VydChzdGQ6OmlzX21vdmVfYXNzaWduYWJsZTxEYXRhUmVjZWl2ZWRFdmVudD46OnZhbHVlLCAi
RGF0YVJlY2VpdmVkRXZlbnQgaXMgbm90IG1vdmUgYXNzaWduYWJsZSIpOworCitzdHJ1Y3QgRmlu
aXNoZWRFdmVudCBmaW5hbCA6IHB1YmxpYyBUaW1lZEV2ZW50IHsKKyAgICBGaW5pc2hlZEV2ZW50
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yKQorICAgICAgICA6IFRpbWVkRXZl
bnQoKQorICAgICAgICAsIGVycm9yKGVycm9yKSB7IH0KKyAgICBGaW5pc2hlZEV2ZW50KENhcHR1
cmVUaW1lVHlwZSYmIHRpbWUsIFJlc291cmNlRXJyb3ImJiBlcnJvcikKKyAgICAgICAgOiBUaW1l
ZEV2ZW50KFdURk1vdmUodGltZSkpCisgICAgICAgICwgZXJyb3IoV1RGTW92ZShlcnJvcikpIHsg
fQorCisgICAgUmVzb3VyY2VFcnJvciBlcnJvcjsKKyAgICBzdGF0aWMgY29uc3QgY2hhciB0eXBl
TmFtZVtdOworfTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc19tb3ZlX2NvbnN0cnVjdGlibGU8Rmlu
aXNoZWRFdmVudD46OnZhbHVlLCAiRmluaXNoZWRFdmVudCBpcyBub3QgbW92ZSBjb25zdHJ1Y3Rp
YmxlIik7CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfbW92ZV9hc3NpZ25hYmxlPEZpbmlzaGVkRXZl
bnQ+Ojp2YWx1ZSwgIkZpbmlzaGVkRXZlbnQgaXMgbm90IG1vdmUgYXNzaWduYWJsZSIpOworCit9
IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVMb2dnaW5nLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDg2ODEyZWIwYzg4YzQyNTcxOGI4MmFmODQwZDg5ZTk1NDBmZTNmNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0
d29ya0NhcHR1cmVMb2dnaW5nLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKworI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKKworI2RlZmluZSBFTkFCTEVfV1RGX0lOVEVSTkFMX0RFQlVHR0lORyAgIDAKKworI2Rl
ZmluZSBERUJVR19TVFIocykgICAgICAgICAgICAgICAgICAgIChzKS5hc2NpaSgpLmRhdGEoKQor
CisjaWYgRU5BQkxFKFdURl9JTlRFUk5BTF9ERUJVR0dJTkcpCisjZGVmaW5lIERFQlVHX0xPR19R
VU9URShzdHIpICAgICAgICAgICAgI3N0cgorI2RlZmluZSBERUJVR19MT0dfRVhQQU5EX0FORF9R
VU9URShzdHIpIERFQlVHX0xPR19RVU9URShzdHIpCisjZGVmaW5lIERFQlVHX0xPRyhmb3JtYXQs
IC4uLikgICAgICAgICAgUkVMRUFTRV9MT0coTmV0d29yaywgIiNQTFQ6ICVwIC0gJXtwdWJsaWN9
czo6JXtwdWJsaWN9czogIiBmb3JtYXQsIHRoaXMsIERFQlVHX0xPR19FWFBBTkRfQU5EX1FVT1RF
KERFQlVHX0NMQVNTKSwgX19GVU5DVElPTl9fLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBERUJV
R19MT0dfRVJST1IoZm9ybWF0LCAuLi4pICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIj
UExUOiAlcCAtICV7cHVibGljfXM6OiV7cHVibGljfXM6ICIgZm9ybWF0LCB0aGlzLCBERUJVR19M
T0dfRVhQQU5EX0FORF9RVU9URShERUJVR19DTEFTUyksIF9fRlVOQ1RJT05fXywgIyNfX1ZBX0FS
R1NfXykKKyNlbHNlCisjZGVmaW5lIERFQlVHX0xPRyguLi4pICAgICAgICAgICAgICAgICAgKCh2
b2lkKTApCisjZGVmaW5lIERFQlVHX0xPR19FUlJPUiguLi4pICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoTmV0d29yaywgX19WQV9BUkdTX18pCisjZW5kaWYKKworI2VuZGlmIC8vIEVOQUJM
RShORVRXT1JLX0NBUFRVUkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlTWFuYWdlci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZDg1NWQ1ZTRmNjkzNzllYjAwODBlN2FiZDhhZTMzNzRkZDM2ZjU1ZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1
cmVNYW5hZ2VyLmNwcApAQCAtMCwwICsxLDYwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCIKKworI2lmIEVOQUJM
RShORVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCIK
KyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmgiCisjaW5jbHVkZSAiV2ViQ29yZS9S
ZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJXZWJDb3JlL1VSTC5oIgorI2luY2x1ZGUgPHd0
Zi9NRDUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8aXRl
cmF0b3I+CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjZGVmaW5l
IERFQlVHX0NMQVNTIE1hbmFnZXIKKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0
d29ya0NhcHR1cmUgeworCitzdGF0aWMgY29uc3QgY2hhcioga0Rpck5hbWVSZWNvcmRSZXBsYXkg
PSAiV2ViS2l0UGVyZi9yZWNvcmRfcmVwbGF5IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrRGlyTmFt
ZVJlc291cmNlcyA9ICJyZXNvdXJjZXMiOworc3RhdGljIGNvbnN0IGNoYXIqIGtGaWxlTmFtZVJl
cG9ydExvYWQgPSAicmVwb3J0X2xvYWQudHh0IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrRmlsZU5h
bWVSZXBvcnRSZWNvcmQgPSAicmVwb3J0X3JlY29yZC50eHQiOworc3RhdGljIGNvbnN0IGNoYXIq
IGtGaWxlTmFtZVJlcG9ydFJlcGxheSA9ICJyZXBvcnRfcmVwbGF5LnR4dCI7CisKK3N0YXRpYyBp
bnQga01heE1hdGNoID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKK3N0YXRpYyBp
bnQga01pbk1hdGNoID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKTsKKworTWFuYWdl
ciYgTWFuYWdlcjo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWFu
YWdlcj4gaW5zdGFuY2U7CisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCit2b2lkIE1hbmFnZXI6
OmluaXRpYWxpemUoY29uc3QgU3RyaW5nJiByZWNvcmRSZXBsYXlNb2RlLCBjb25zdCBTdHJpbmcm
IHJlY29yZFJlcGxheUNhY2hlTG9jYXRpb24pCit7CisgICAgREVCVUdfTE9HKCJJbml0aWFsaXpp
bmciKTsKKworICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHJlY29yZFJlcGxheU1vZGUs
ICJyZWNvcmQiKSkKKyAgICAgICAgbV9yZWNvcmRSZXBsYXlNb2RlID0gUmVjb3JkOworICAgIGVs
c2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UocmVjb3JkUmVwbGF5TW9kZSwgInJlcGxheSIp
KQorICAgICAgICBtX3JlY29yZFJlcGxheU1vZGUgPSBSZXBsYXk7CisgICAgZWxzZQorICAgICAg
ICBtX3JlY29yZFJlcGxheU1vZGUgPSBEaXNhYmxlZDsKKworICAgIG1fcmVjb3JkUmVwbGF5Q2Fj
aGVMb2NhdGlvbiA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChyZWNvcmRSZXBs
YXlDYWNoZUxvY2F0aW9uLCBrRGlyTmFtZVJlY29yZFJlcGxheSk7CisKKyAgICBERUJVR19MT0co
IkNhY2hlIGxvY2F0aW9uID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX3JlY29yZFJlcGxheUNh
Y2hlTG9jYXRpb24pKTsKKworICAgIGlmIChpc1JlcGxheWluZygpKQorICAgICAgICBsb2FkUmVz
b3VyY2VzKCk7Cit9CisKK3ZvaWQgTWFuYWdlcjo6dGVybWluYXRlKCkKK3sKKyAgICBtX2xvYWRG
aWxlSGFuZGxlLmNsb3NlRmlsZSgpOworICAgIG1fcmVwbGF5RmlsZUhhbmRsZS5jbG9zZUZpbGUo
KTsKKyAgICBtX3JlY29yZEZpbGVIYW5kbGUuY2xvc2VGaWxlKCk7Cit9CisKK1Jlc291cmNlKiBN
YW5hZ2VyOjpmaW5kTWF0Y2goY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
KQoreworICAgIC8vIERFQlVHX0xPRygiVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihyZXF1
ZXN0LnVybCgpLnN0cmluZygpKSk7CisKKyAgICBhdXRvIGJlc3RNYXRjaCA9IGZpbmRFeGFjdE1h
dGNoKHJlcXVlc3QpOworICAgIGlmICghYmVzdE1hdGNoKQorICAgICAgICBiZXN0TWF0Y2ggPSBm
aW5kQmVzdEZ1enp5TWF0Y2gocmVxdWVzdCk7CisKKyNpZiBFTkFCTEUoV1RGX0lOVEVSTkFMX0RF
QlVHR0lORykKKyAgICBpZiAoIWJlc3RNYXRjaCkKKyAgICAgICAgREVCVUdfTE9HKCJDb3VsZCBu
b3QgZmluZCBtYXRjaCBmb3I6ICV7cHVibGljfXMiLCBERUJVR19TVFIocmVxdWVzdC51cmwoKS5z
dHJpbmcoKSkpOworICAgIGVsc2UgaWYgKHJlcXVlc3QudXJsKCkgPT0gYmVzdE1hdGNoLT51cmwo
KSkKKyAgICAgICAgREVCVUdfTE9HKCJGb3VuZCBleGFjdCBtYXRjaCBmb3I6ICV7cHVibGljfXMi
LCBERUJVR19TVFIocmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworICAgIGVsc2UgeworICAgICAg
ICBERUJVR19MT0coIkZvdW5kIGZ1enp5IG1hdGNoIGZvcjogJXtwdWJsaWN9cyIsIERFQlVHX1NU
UihyZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisgICAgICAgIERFQlVHX0xPRygiICAgICAgIHJl
cGxhY2VkIHdpdGggOiAle3B1YmxpY31zIiwgREVCVUdfU1RSKGJlc3RNYXRjaC0+dXJsKCkuc3Ry
aW5nKCkpKTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBiZXN0TWF0Y2g7Cit9CisKK1Jl
c291cmNlKiBNYW5hZ2VyOjpmaW5kRXhhY3RNYXRjaChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCit7CisgICAgY29uc3QgYXV0byYgdXJsID0gcmVxdWVzdC51cmwoKTsK
KyAgICBhdXRvIGxvd2VyID0gc3RkOjpsb3dlcl9ib3VuZChzdGQ6OmJlZ2luKG1fY2FjaGVkUmVz
b3VyY2VzKSwgc3RkOjplbmQobV9jYWNoZWRSZXNvdXJjZXMpLCB1cmwsIFtdKGF1dG8mIHJlc291
cmNlLCBjb25zdCBhdXRvJiB1cmwpIHsKKyAgICAgICAgcmV0dXJuIFdURjo6Y29kZVBvaW50Q29t
cGFyZUxlc3NUaGFuKHJlc291cmNlLnVybCgpLnN0cmluZygpLCB1cmwuc3RyaW5nKCkpOworICAg
IH0pOworCisgICAgaWYgKGxvd2VyICE9IHN0ZDo6ZW5kKG1fY2FjaGVkUmVzb3VyY2VzKSAmJiBs
b3dlci0+dXJsKCkgPT0gdXJsKSB7CisgICAgICAgIC8vIERFQlVHX0xPRygiRm91bmQgZXhhY3Qg
bWF0Y2g6ICV7cHVibGljfXMiLCBERUJVR19TVFIobG93ZXItPnVybCgpLnN0cmluZygpKSk7Cisg
ICAgICAgIHJldHVybiAmKmxvd2VyOworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQor
CitSZXNvdXJjZSogTWFuYWdlcjo6ZmluZEJlc3RGdXp6eU1hdGNoKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBjb25zdCBhdXRvJiB1cmwgPSByZXF1ZXN0
LnVybCgpOworICAgIFJlc291cmNlKiBiZXN0TWF0Y2ggPSBudWxscHRyOworICAgIGludCBiZXN0
U2NvcmUgPSBrTWluTWF0Y2g7CisgICAgY29uc3QgYXV0byYgYmFzZVVSTCA9IHVybC5zdHJpbmco
KS5sZWZ0KHVybC5wYXRoU3RhcnQoKSk7CisKKyAgICBjb25zdCBhdXRvJiBsb3dlciA9IHN0ZDo6
bG93ZXJfYm91bmQoc3RkOjpiZWdpbihtX2NhY2hlZFJlc291cmNlcyksIHN0ZDo6ZW5kKG1fY2Fj
aGVkUmVzb3VyY2VzKSwgYmFzZVVSTCwgW10oYXV0byYgcmVzb3VyY2UsIGNvbnN0IGF1dG8mIHVy
bCkgeworICAgICAgICByZXR1cm4gV1RGOjpjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4ocmVzb3Vy
Y2UuYmFzZVVSTCgpLnN0cmluZygpLCB1cmwpOworICAgIH0pOworICAgIGNvbnN0IGF1dG8mIHVw
cGVyID0gc3RkOjp1cHBlcl9ib3VuZChsb3dlciwgc3RkOjplbmQobV9jYWNoZWRSZXNvdXJjZXMp
LCBiYXNlVVJMLCBbXShjb25zdCBhdXRvJiB1cmwsIGF1dG8mIHJlc291cmNlKSB7CisgICAgICAg
IHJldHVybiBXVEY6OmNvZGVQb2ludENvbXBhcmVMZXNzVGhhbihyZXNvdXJjZS5iYXNlVVJMKCku
c3RyaW5nKCksIHVybCk7CisgICAgfSk7CisKKyAgICBjb25zdCBhdXRvJiByZXF1ZXN0UGFyYW1l
dGVycyA9IFdlYkNvcmU6OlVSTFBhcnNlcjo6cGFyc2VVUkxFbmNvZGVkRm9ybSh1cmwucXVlcnko
KSk7CisgICAgZm9yIChhdXRvIGlSZXNvdXJjZSA9IGxvd2VyOyBpUmVzb3VyY2UgIT0gdXBwZXI7
ICsraVJlc291cmNlKSB7CisgICAgICAgIGludCB0aGlzU2NvcmUgPSBmdXp6eU1hdGNoVVJMcyh1
cmwsIHJlcXVlc3RQYXJhbWV0ZXJzLCBpUmVzb3VyY2UtPnVybCgpLCBpUmVzb3VyY2UtPnF1ZXJ5
UGFyYW1ldGVycygpKTsKKyAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgaWdub3JpbmcgYW55IG1h
dGNoZXMgPCAwIGFzIGJlaW5nIHRvbyBkaWZmZXJlbnQuCisgICAgICAgIGlmIChiZXN0U2NvcmUg
PCB0aGlzU2NvcmUpIHsKKyAgICAgICAgICAgIERFQlVHX0xPRygiTmV3IGJlc3QgbWF0Y2ggKCVk
KTogJXtwdWJsaWN9cyIsIHRoaXNTY29yZSwgREVCVUdfU1RSKGlSZXNvdXJjZS0+dXJsKCkuc3Ry
aW5nKCkpKTsKKyAgICAgICAgICAgIGJlc3RTY29yZSA9IHRoaXNTY29yZTsKKyAgICAgICAgICAg
IGJlc3RNYXRjaCA9ICYqaVJlc291cmNlOworICAgICAgICAgICAgaWYgKGJlc3RTY29yZSA9PSBr
TWF4TWF0Y2gpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gYmVzdE1hdGNoOworfQorCisvLyBUT0RPOiBDb252ZXJ0IHRvIGFuIGludGVyZmFj
ZSBiYXNlZCBvbiBSZXNvdXJjZVJlcXVlc3Qgc28gdGhhdCB3ZSBjYW4gZG8KKy8vIGRlZXBlciBt
YXRjaGluZy4KKworaW50IE1hbmFnZXI6OmZ1enp5TWF0Y2hVUkxzKGNvbnN0IFdlYkNvcmU6OlVS
TCYgcmVxdWVzdFVSTCwgY29uc3QgV2ViQ29yZTo6VVJMUGFyc2VyOjpVUkxFbmNvZGVkRm9ybSYg
cmVxdWVzdFBhcmFtZXRlcnMsIGNvbnN0IFdlYkNvcmU6OlVSTCYgcmVzb3VyY2VVUkwsIGNvbnN0
IFdlYkNvcmU6OlVSTFBhcnNlcjo6VVJMRW5jb2RlZEZvcm0mIHJlc291cmNlUGFyYW1ldGVycykK
K3sKKyAgICAvLyBUT0RPOiBjb25zaWRlciByZXF1aXJpbmcgdGhhdCBhbnkgdHJhaWxpbmcgc3Vm
Zml4ZXMgKGUuZy4sICIuanMiLAorICAgIC8vICIucG5nIiwgIi5jc3MiLCAiLmh0bWwiLCBldGMu
KSBzaG91bGQgYmUgYW4gZXhhY3QgbWF0Y2guCisKKyAgICAvLyBXZSBkbyBmdXp6eSBtYXRjaGlu
ZyBvbiB0aGUgcGF0aCBhbmQgcXVlcnkgcGFyYW1ldGVycy4gU28gbGV0J3MgZmlyc3QKKyAgICAv
LyBtYWtlIHN1cmUgdGhhdCBhbGwgdGhlIG90aGVyIHBhcnRzIGFyZSBlcXVhbC4KKworICAgIC8v
IElmIHNjaGVtZSwgaG9zdCwgYW5kIHBvcnQgZG9uJ3QgYWxsIG1hdGNoLCByZXR1cm4gdGhpcyBh
cyB0aGUgIndvcnN0IgorICAgIC8vIG1hdGNoLgorCisgICAgaWYgKCFwcm90b2NvbEhvc3RBbmRQ
b3J0QXJlRXF1YWwocmVxdWVzdFVSTCwgcmVzb3VyY2VVUkwpKSB7CisgICAgICAgIERFQlVHX0xP
RygiU2NoZW1lL2hvc3QvcG9ydCBtaXNtYXRjaDogJXtwdWJsaWN9cyAhPSAle3B1YmxpY31zIiwg
REVCVUdfU1RSKHJlcXVlc3RVUkwuc3RyaW5nKCkpLCBERUJVR19TVFIocmVzb3VyY2VVUkwuc3Ry
aW5nKCkpKTsKKyAgICAgICAgcmV0dXJuIGtNaW5NYXRjaDsKKyAgICB9CisKKyAgICAvLyBJZiBm
cmFnbWVudHMgZG9uJ3QgbWF0Y2gsIHJldHVybiB0aGlzIGFzIHRoZSAid29yc3QiIG1hdGNoLgor
CisgICAgaWYgKHJlcXVlc3RVUkwuZnJhZ21lbnRJZGVudGlmaWVyKCkgIT0gcmVzb3VyY2VVUkwu
ZnJhZ21lbnRJZGVudGlmaWVyKCkpIHsKKyAgICAgICAgREVCVUdfTE9HKCJGcmFnbWVudHMgbWlz
bWF0Y2g6ICV7cHVibGljfXMgIT0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihyZXF1ZXN0VVJMLnN0
cmluZygpKSwgREVCVUdfU1RSKHJlc291cmNlVVJMLnN0cmluZygpKSk7CisgICAgICAgIHJldHVy
biBrTWluTWF0Y2g7CisgICAgfQorCisgICAgREVCVUdfTE9HKCJGdXp6eSBtYXRjaGluZzoiKTsK
KyAgICBERUJVR19MT0coIiAgIDogJXtwdWJsaWN9cyIsIERFQlVHX1NUUihyZXF1ZXN0VVJMLnN0
cmluZygpKSk7CisgICAgREVCVUdfTE9HKCIgICA6ICV7cHVibGljfXMiLCBERUJVR19TVFIocmVz
b3VyY2VVUkwuc3RyaW5nKCkpKTsKKworICAgIC8vIENvbXBhcmUgdGhlIHBhdGggY29tcG9uZW50
cyBhbmQgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMuIFNjb3JlIGVhY2ggcGFydGlhbAorICAgIC8vIG1h
dGNoIGFzICs0LCBlYWNoIG1pc21hdGNoIGFzIC0xLCBhbmQgZWFjaCBtaXNzaW5nIGNvbXBvbmVu
dCBhcyAtMS4KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCBhdCB0aGUgY3VycmVudCB0aW1lIHRo
ZXNlIHZhbHVlcyBhcmUgcmF0aGVyIGFyYml0cmFyeSBhbmQKKyAgICAvLyBjb3VsZCBmaW5lLXR1
bmVkLgorCisgICAgY29uc3QgaW50IGtQYXRoTWF0Y2hTY29yZSA9IDQ7CisgICAgY29uc3QgaW50
IGtQYXRoTWlzbWF0Y2hTY29yZSA9IC0xOworICAgIGNvbnN0IGludCBrUGF0aE1pc3NpbmdTY29y
ZSA9IC0xOworICAgIGNvbnN0IGludCBrUGFyYW1ldGVyTWF0Y2hTY29yZSA9IDQ7CisgICAgY29u
c3QgaW50IGtQYXJhbWV0ZXJNaXNtYXRjaFNjb3JlID0gLTE7CisgICAgY29uc3QgaW50IGtQYXJh
bWV0ZXJNaXNzaW5nU2NvcmUgPSAtMTsKKworICAgIGludCBzY29yZSA9IDA7CisKKyAgICAvLyBR
dWFudGl6ZSB0aGUgZGlmZmVyZW5jZXMgaW4gVVJMIHBhdGhzLgorICAgIC8vCisgICAgLy8gVGhl
IGFwcHJvYWNoIGhlcmUgaXMgdG8gaW5jcmVhc2Ugb3VyIHNjb3JlIGZvciBlYWNoIG1hdGNoaW5n
IHBhdGgKKyAgICAvLyBjb21wb25lbnQsIGFuZCB0byBzdWJ0cmFjdCBmb3IgZWFjaCBkaWZmZXJp
bmcgY29tcG9uZW50IGFzIHdlbGwgYXMgZm9yCisgICAgLy8gY29tcG9uZW50cyB0aGF0IGV4aXN0
IGluIG9uZSBwYXRoIGJ1dCBub3QgdGhlIG90aGVyLgorCisgICAgY29uc3QgYXV0byYgcmVxdWVz
dFBhdGggPSByZXF1ZXN0VVJMLnBhdGgoKTsKKyAgICBjb25zdCBhdXRvJiByZXNvdXJjZVBhdGgg
PSByZXNvdXJjZVVSTC5wYXRoKCk7CisKKyAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0UGF0aENv
bXBvbmVudHMsIHJlc291cmNlUGF0aENvbXBvbmVudHM7CisgICAgcmVxdWVzdFBhdGguc3BsaXQo
Jy8nLCByZXF1ZXN0UGF0aENvbXBvbmVudHMpOworICAgIHJlc291cmNlUGF0aC5zcGxpdCgnLycs
IHJlc291cmNlUGF0aENvbXBvbmVudHMpOworCisgICAgYXV0byB1cGRhdGVkSXRlcmF0b3JzID0g
c3RkOjptaXNtYXRjaCgKKyAgICAgICAgc3RkOjpiZWdpbihyZXF1ZXN0UGF0aENvbXBvbmVudHMp
LCBzdGQ6OmVuZChyZXF1ZXN0UGF0aENvbXBvbmVudHMpLAorICAgICAgICBzdGQ6OmJlZ2luKHJl
c291cmNlUGF0aENvbXBvbmVudHMpLCBzdGQ6OmVuZChyZXNvdXJjZVBhdGhDb21wb25lbnRzKSk7
CisKKyAgICBhdXRvIG1hdGNoaW5nRGlzdGFuY2UgPSBzdGQ6OmRpc3RhbmNlKHN0ZDo6YmVnaW4o
cmVxdWVzdFBhdGhDb21wb25lbnRzKSwgdXBkYXRlZEl0ZXJhdG9ycy5maXJzdCk7CisgICAgYXV0
byByZXF1ZXN0UGF0aE1pc21hdGNoRGlzdGFuY2UgPSBzdGQ6OmRpc3RhbmNlKHVwZGF0ZWRJdGVy
YXRvcnMuZmlyc3QsIHN0ZDo6ZW5kKHJlcXVlc3RQYXRoQ29tcG9uZW50cykpOworICAgIGF1dG8g
cmVzb3VyY2VQYXRoTWlzbWF0Y2hEaXN0YW5jZSA9IHN0ZDo6ZGlzdGFuY2UodXBkYXRlZEl0ZXJh
dG9ycy5zZWNvbmQsIHN0ZDo6ZW5kKHJlc291cmNlUGF0aENvbXBvbmVudHMpKTsKKyAgICBkZWNs
dHlwZShtYXRjaGluZ0Rpc3RhbmNlKSBtaXNtYXRjaGluZ0Rpc3RhbmNlOworICAgIGRlY2x0eXBl
KG1hdGNoaW5nRGlzdGFuY2UpIG1pc3NpbmdEaXN0YW5jZTsKKyAgICBpZiAocmVxdWVzdFBhdGhN
aXNtYXRjaERpc3RhbmNlIDwgcmVzb3VyY2VQYXRoTWlzbWF0Y2hEaXN0YW5jZSkgeworICAgICAg
ICBtaXNtYXRjaGluZ0Rpc3RhbmNlID0gcmVxdWVzdFBhdGhNaXNtYXRjaERpc3RhbmNlOworICAg
ICAgICBtaXNzaW5nRGlzdGFuY2UgPSByZXNvdXJjZVBhdGhNaXNtYXRjaERpc3RhbmNlIC0gcmVx
dWVzdFBhdGhNaXNtYXRjaERpc3RhbmNlOworICAgIH0gZWxzZSB7CisgICAgICAgIG1pc21hdGNo
aW5nRGlzdGFuY2UgPSByZXNvdXJjZVBhdGhNaXNtYXRjaERpc3RhbmNlOworICAgICAgICBtaXNz
aW5nRGlzdGFuY2UgPSByZXF1ZXN0UGF0aE1pc21hdGNoRGlzdGFuY2UgLSByZXNvdXJjZVBhdGhN
aXNtYXRjaERpc3RhbmNlOworICAgIH0KKworICAgIERFQlVHX0xPRygiUGF0aCBtYXRjaGluZyBy
ZXN1bHRzOiBtYXRjaGluZyA9ICVkLCBtaXNtYXRjaGluZyA9ICVkLCBtaXNzaW5nID0gJWQiLAor
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG1hdGNoaW5nRGlzdGFuY2UpLAorICAgICAgICBzdGF0
aWNfY2FzdDxpbnQ+KG1pc21hdGNoaW5nRGlzdGFuY2UpLAorICAgICAgICBzdGF0aWNfY2FzdDxp
bnQ+KG1pc3NpbmdEaXN0YW5jZSkpOworCisgICAgc2NvcmUgKz0gbWF0Y2hpbmdEaXN0YW5jZSAq
IGtQYXRoTWF0Y2hTY29yZQorICAgICAgICArIG1pc21hdGNoaW5nRGlzdGFuY2UgKiBrUGF0aE1p
c21hdGNoU2NvcmUKKyAgICAgICAgKyBtaXNzaW5nRGlzdGFuY2UgKiBrUGF0aE1pc3NpbmdTY29y
ZTsKKyAgICBERUJVR19MT0coIlNjb3JlID0gJWQiLCBzY29yZSk7CisKKyAgICAvLyBRdWFudGl6
ZSB0aGUgZGlmZmVyZW5jZXMgaW4gcXVlcnkgcGFyYW1ldGVycy4KKyAgICAvLworICAgIC8vIFRo
ZSBhcHByb2FjaCBoZXJlIGlzIHRvIHdhbGsgbG9jay1zdGVwIG92ZXIgdGhlIHR3byBzZXRzIG9m
IHF1ZXJ5CisgICAgLy8gcGFyYW1ldGVycy4gRm9yIGVhY2ggcGFpciBvZiBwYXJhbWV0ZXJzIGZv
ciBlYWNoIFVSTCwgd2UgY29tcGFyZSB0aGVpcgorICAgIC8vIG5hbWVzIGFuZCB2YWx1ZXMuIElm
IHRoZSBuYW1lcyBhbmQgdmFsdWVzIG1hdGNoLCB3ZSBhZGQgYSBoaWdoIHNjb3JlLiBJZgorICAg
IC8vIGp1c3QgdGhlIG5hbWVzIG1hdGNoLCB3ZSBhZGQgYSBsb3dlciBzY29yZS4KKyAgICAvLwor
ICAgIC8vIElmIHRoZSBuYW1lcyBkb24ndCBtYXRjaCwgd2UgdGhlbiBhc3N1bWUgdGhhdCBzb21l
IGludGVydmVuaW5nIHF1ZXJ5CisgICAgLy8gcGFyYW1ldGVycyBoYXZlIGJlZW4gYWRkZWQgdG8g
b25lIG9yIHRoZSBvdGhlciBVUkwuIFdlIHRoZXJlZm9yZSB0cnkgdG8KKyAgICAvLyBzeW5jIHVw
IHRoZSBpdGVyYXRvcnMgdXNlZCB0byB0cmF2ZXJzZSB0aGUgcXVlcnkgcGFyYW1ldGVyIGNvbGxl
Y3Rpb25zCisgICAgLy8gc28gdGhhdCB0aGV5J3JlIGFnYWluIHBvaW50aW5nIHRvIHBhcmFtZXRl
cnMgd2l0aCB0aGUgc2FtZSBuYW1lcy4gV2UKKyAgICAvLyBmaXJzdCBzdGFydCBzY2FubmluZyBm
b3J3YXJkIGRvd24gdGhlIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIG9uZSBVUkwsCisgICAgLy8gbG9v
a2luZyBmb3Igb25lIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgb25lIHdlJ3JlIG9uIGluIHRo
ZSBvdGhlciBVUkwuCisgICAgLy8gSWYgdGhhdCBkb2Vzbid0IHR1cm4gdXAgYSBtYXRjaCwgd2Ug
cmV2ZXJzZSB0aGUgcm9sZXMgb2YgdGhlIHF1ZXJ5CisgICAgLy8gcGFyYW1ldGVycyBwZXJmb3Jt
IHRoZSBzYW1lIHByb2Nlc3Mgb2Ygc2Nhbm5pbmcgZm9yd2FyZC4gSWYgbmVpdGhlciBvZgorICAg
IC8vIHRoZXNlIHNjYW5zIHByb2R1Y2VzIGEgbWF0Y2gsIHdlIGZpZ3VyZSB0aGF0IGVhY2ggcXVl
cnkgcGFyYW1ldGVyIHdlJ3JlCisgICAgLy8gbG9va2luZyBhdCBmcm9tIGVhY2ggb2YgdGhlIHF1
ZXJ5IHBhcmFtZXRlciBjb2xsZWN0aW9ucyBpcyB1bmlxdWUuIFdlCisgICAgLy8gZGVkdWN0IHBv
aW50cyBmcm9tIHRoZSBvdmVyYWxsIHNjb3JlIGFuZCBtb3ZlIG9uIHRvIHRoZSBuZXh0IHF1ZXJ5
CisgICAgLy8gcGFyYW1ldGVycyBpbiBlYWNoIHNldC4KKyAgICAvLworICAgIC8vIElmLCBvbiB0
aGUgb3RoZXIgaGFuZCwgdGhlIGZvcndhcmQtc2Nhbm5pbmcgZG9lcyB0dXJuIHVwIGEgbWF0Y2gs
IHdlCisgICAgLy8gYWRqdXN0IG91dCBpdGVyYXRvcnMgc28gdGhhdCB0aGV5J3JlIG5vdyBhZ2Fp
biBwb2ludGluZyB0byBxdWVyeQorICAgIC8vIHBhcmFtZXRlcnMgd2l0aCB0aGUgc2FtZSBuYW1l
LiBUaGlzIHN5bmNocm9uaXphdGlvbiBpbnZvbHZlcyBza2lwcGluZworICAgIC8vIG92ZXIgYW55
IGludGVydmVuaW5nIHF1ZXJ5IHBhcmFtZXRlcnMgaW4gb25lIGNvbGxlY3Rpb24gb3IgdGhlIG90
aGVyLgorICAgIC8vIFRoZSBhc3N1bXB0aW9uIGhlcmUgaXMgdGhhdCB0aGVzZSBpbnRlcnZlbmlu
ZyBxdWVyeSBwYXJhbWV0ZXJzIGFyZQorICAgIC8vIGluc2VydGlvbnMgdGhhdCBleGlzdCBpbiBv
bmUgVVJMIGJ1dCBub3QgdGhlIG90aGVyLiBXZSB0cmVhdCB0aGVtIGFzCisgICAgLy8gc3VjaCwg
c3VidHJhY3RpbmcgZnJvbSB0aGUgb3ZlcmFsbCBzY29yZSBmb3IgZWFjaCBvbmUuIEhvd2V2ZXIs
IHRoaXMKKyAgICAvLyBhc3N1bXB0aW9uIG1pZ2h0IGVhc2lseSBiZSBpbmNvcnJlY3QuIEl0IG1p
Z2h0IGJlIHRoYXQgdGhlIHF1ZXJ5CisgICAgLy8gcGFyYW1ldGVycyB0aGF0IHdlJ3JlIHNraXBw
aW5nIG92ZXIgaW4gb25lIFVSTCBtaWdodCBleGlzdCBpbiB0aGUgb3RoZXIKKyAgICAvLyBVUkwu
IElmIHNvLCB0aGVuIHdlIGFyZSBmb3JlZ29pbmcgdGhlIHBvc3NpYmlsaXR5IG9mIHVzaW5nIHRo
b3NlIG1hdGNoZXMKKyAgICAvLyB0byBpbmNyZWFzZSB0aGUgb3ZlcmFsbCBtYXRjaCBzY29yZSBi
ZXR3ZWVuIHRoZSB0d28gVVJMcy4KKyAgICAvLworICAgIC8vIFRvIGFkZHJlc3MgdGhpcyBwcm9i
bGVtLCB3ZSBtaWdodCB3YW50IHRvIGNvbnNpZGVyIHNvcnRpbmcgdGhlIHF1ZXJ5CisgICAgLy8g
cGFyYW1ldGVycyBieSB0aGVpciBuYW1lcy4gSG93ZXZlciwgZG9pbmcgdGhpcyBtYXkgY2F1c2Ug
cHJvYmxlbXMgaWYgdGhlCisgICAgLy8gb3JkZXIgb2YgdGhlIHBhcmFtZXRlcnMgaXMgc2lnbmlm
aWNhbnQuIFNvIGlmIHdlIGRlY2lkZSB0byB0YWtlIHRoZQorICAgIC8vIGFwcHJvYWNoIG9mIHNv
cnRpbmcgdGhlIHBhcmFtZXRlcnMsIGtlZXAgaW4gbWluZCB0aGlzIHBvc3NpYmxlIGRyYXdiYWNr
LgorCisgICAgYXV0byByZXF1ZXN0UGFyYW1ldGVyID0gc3RkOjpiZWdpbihyZXF1ZXN0UGFyYW1l
dGVycyk7CisgICAgYXV0byByZXNvdXJjZVBhcmFtZXRlciA9IHN0ZDo6YmVnaW4ocmVzb3VyY2VQ
YXJhbWV0ZXJzKTsKKworICAgIGZvciAoOyByZXF1ZXN0UGFyYW1ldGVyICE9IHN0ZDo6ZW5kKHJl
cXVlc3RQYXJhbWV0ZXJzKSAmJiByZXNvdXJjZVBhcmFtZXRlciAhPSBzdGQ6OmVuZChyZXNvdXJj
ZVBhcmFtZXRlcnMpOyArK3JlcXVlc3RQYXJhbWV0ZXIsICsrcmVzb3VyY2VQYXJhbWV0ZXIpIHsK
KyAgICAgICAgaWYgKHJlcXVlc3RQYXJhbWV0ZXItPmZpcnN0ID09IHJlc291cmNlUGFyYW1ldGVy
LT5maXJzdCkgeworI2lmIEVOQUJMRShXVEZfSU5URVJOQUxfREVCVUdHSU5HKQorICAgICAgICAg
ICAgaWYgKHJlcXVlc3RQYXJhbWV0ZXItPnNlY29uZCA9PSByZXNvdXJjZVBhcmFtZXRlci0+c2Vj
b25kKQorICAgICAgICAgICAgICAgIERFQlVHX0xPRygiTWF0Y2hpbmcgcGFyYW1ldGVyIG5hbWVz
IGFuZCB2YWx1ZXM6IFwiJXtwdWJsaWN9c1wiID0gXCIle3B1YmxpY31zXCIiLCBERUJVR19TVFIo
cmVxdWVzdFBhcmFtZXRlci0+Zmlyc3QpLCBERUJVR19TVFIocmVxdWVzdFBhcmFtZXRlci0+c2Vj
b25kKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgREVCVUdfTE9HKCJNaXNt
YXRjaGluZyBwYXJhbWV0ZXIgdmFsdWVzOiBcIiV7cHVibGljfXNcIiA9IFwiJXtwdWJsaWN9c1wi
IHZzLiBcIiV7cHVibGljfXNcIiIsIERFQlVHX1NUUihyZXF1ZXN0UGFyYW1ldGVyLT5maXJzdCks
IERFQlVHX1NUUihyZXF1ZXN0UGFyYW1ldGVyLT5zZWNvbmQpLCBERUJVR19TVFIocmVzb3VyY2VQ
YXJhbWV0ZXItPnNlY29uZCkpOworI2VuZGlmCisgICAgICAgICAgICBzY29yZSArPSAocmVxdWVz
dFBhcmFtZXRlci0+c2Vjb25kID09IHJlc291cmNlUGFyYW1ldGVyLT5zZWNvbmQpID8ga1BhcmFt
ZXRlck1hdGNoU2NvcmUgOiBrUGFyYW1ldGVyTWlzbWF0Y2hTY29yZTsKKyAgICAgICAgICAgIERF
QlVHX0xPRygiU2NvcmUgPSAlZCIsIHNjb3JlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIERFQlVHX0xPRygiTWlzbWF0Y2hpbmcgcGFyYW1ldGVyIG5hbWVzOiAle3B1YmxpY31zLCAl
e3B1YmxpY31zIiwgREVCVUdfU1RSKHJlcXVlc3RQYXJhbWV0ZXItPmZpcnN0KSwgREVCVUdfU1RS
KHJlc291cmNlUGFyYW1ldGVyLT5maXJzdCkpOworCisgICAgICAgICAgICBjb25zdCBhdXRvIHNj
YW5Gb3J3YXJkRm9yTWF0Y2ggPSBbdGhpcywgJnNjb3JlLCBrUGFyYW1ldGVyTWF0Y2hTY29yZSwg
a1BhcmFtZXRlck1pc21hdGNoU2NvcmUsIGtQYXJhbWV0ZXJNaXNzaW5nU2NvcmVdKGNvbnN0IGF1
dG8mIGZpeGVkSXRlciwgYXV0byYgc2Nhbm5pbmdJdGVyLCBjb25zdCBhdXRvJiBzY2FubmVyRW5k
KSB7CisgICAgICAgICAgICAgICAgYXV0byBzY2FubmVyID0gc2Nhbm5pbmdJdGVyOworICAgICAg
ICAgICAgICAgIHdoaWxlIChzY2FubmVyICE9IHNjYW5uZXJFbmQgJiYgc2Nhbm5lci0+Zmlyc3Qg
IT0gZml4ZWRJdGVyLT5maXJzdCkKKyAgICAgICAgICAgICAgICAgICAgKytzY2FubmVyOworICAg
ICAgICAgICAgICAgIGlmIChzY2FubmVyID09IHNjYW5uZXJFbmQpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBERUJVR19MT0coIlNraXBwaW5nIHBh
c3QgJWQgbm9uLW1hdGNoaW5nIHBhcmFtZXRlciBuYW1lcyIsIHN0YXRpY19jYXN0PGludD4oc3Rk
OjpkaXN0YW5jZShzY2FubmluZ0l0ZXIsIHNjYW5uZXIpKSk7CisgICAgICAgICAgICAgICAgc2Nv
cmUgKz0ga1BhcmFtZXRlck1pc3NpbmdTY29yZSAqIHN0ZDo6ZGlzdGFuY2Uoc2Nhbm5pbmdJdGVy
LCBzY2FubmVyKTsKKyAgICAgICAgICAgICAgICBERUJVR19MT0coIlNjb3JlID0gJWQiLCBzY29y
ZSk7CisjaWYgRU5BQkxFKFdURl9JTlRFUk5BTF9ERUJVR0dJTkcpCisgICAgICAgICAgICAgICAg
aWYgKGZpeGVkSXRlci0+c2Vjb25kID09IHNjYW5uZXItPnNlY29uZCkKKyAgICAgICAgICAgICAg
ICAgICAgREVCVUdfTE9HKCJNYXRjaGluZyBwYXJhbWV0ZXIgbmFtZXMgYW5kIHZhbHVlczogXCIl
e3B1YmxpY31zXCIgPSBcIiV7cHVibGljfXNcIiIsIERFQlVHX1NUUihmaXhlZEl0ZXItPmZpcnN0
KSwgREVCVUdfU1RSKGZpeGVkSXRlci0+c2Vjb25kKSk7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICBERUJVR19MT0coIk1pc21hdGNoaW5nIHBhcmFtZXRlciB2YWx1
ZXM6IFwiJXtwdWJsaWN9c1wiID0gXCIle3B1YmxpY31zXCIgdnMuIFwiJXtwdWJsaWN9c1wiIiwg
REVCVUdfU1RSKGZpeGVkSXRlci0+Zmlyc3QpLCBERUJVR19TVFIoZml4ZWRJdGVyLT5zZWNvbmQp
LCBERUJVR19TVFIoc2Nhbm5lci0+c2Vjb25kKSk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBz
Y29yZSArPSAoZml4ZWRJdGVyLT5zZWNvbmQgPT0gc2Nhbm5lci0+c2Vjb25kKSA/IGtQYXJhbWV0
ZXJNYXRjaFNjb3JlIDoga1BhcmFtZXRlck1pc21hdGNoU2NvcmU7CisgICAgICAgICAgICAgICAg
REVCVUdfTE9HKCJTY29yZSA9ICVkIiwgc2NvcmUpOworICAgICAgICAgICAgICAgIHNjYW5uaW5n
SXRlciA9IHNjYW5uZXI7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9OworCisgICAgICAgICAgICBpZiAoIXNjYW5Gb3J3YXJkRm9yTWF0Y2gocmVxdWVzdFBhcmFt
ZXRlciwgcmVzb3VyY2VQYXJhbWV0ZXIsIHN0ZDo6ZW5kKHJlc291cmNlUGFyYW1ldGVycykpKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFzY2FuRm9yd2FyZEZvck1hdGNoKHJlc291cmNlUGFyYW1l
dGVyLCByZXF1ZXN0UGFyYW1ldGVyLCBzdGQ6OmVuZChyZXF1ZXN0UGFyYW1ldGVycykpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIERFQlVHX0xPRygiVW5tYXRjaGVkIHBhcmFtZXRlcjogJXtwdWJs
aWN9cz0le3B1YmxpY31zIiwgREVCVUdfU1RSKHJlcXVlc3RQYXJhbWV0ZXItPmZpcnN0KSwgREVC
VUdfU1RSKHJlcXVlc3RQYXJhbWV0ZXItPnNlY29uZCkpOworICAgICAgICAgICAgICAgICAgICBE
RUJVR19MT0coIlVubWF0Y2hlZCBwYXJhbWV0ZXI6ICV7cHVibGljfXM9JXtwdWJsaWN9cyIsIERF
QlVHX1NUUihyZXNvdXJjZVBhcmFtZXRlci0+Zmlyc3QpLCBERUJVR19TVFIocmVzb3VyY2VQYXJh
bWV0ZXItPnNlY29uZCkpOworICAgICAgICAgICAgICAgICAgICBzY29yZSArPSBrUGFyYW1ldGVy
TWlzc2luZ1Njb3JlICsga1BhcmFtZXRlck1pc3NpbmdTY29yZTsKKyAgICAgICAgICAgICAgICAg
ICAgREVCVUdfTE9HKCJTY29yZSA9ICVkIiwgc2NvcmUpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIERFQlVHX0xPRygiQWRqdXN0aW5n
IGZvciB0cmFpbGluZyBwYXJhbWV0ZXJzIik7CisgICAgc2NvcmUgKz0ga1BhcmFtZXRlck1pc3Np
bmdTY29yZQorICAgICAgICAqIChzdGQ6OmRpc3RhbmNlKHJlcXVlc3RQYXJhbWV0ZXIsIHN0ZDo6
ZW5kKHJlcXVlc3RQYXJhbWV0ZXJzKSkKKyAgICAgICAgICAgICsgc3RkOjpkaXN0YW5jZShyZXNv
dXJjZVBhcmFtZXRlciwgc3RkOjplbmQocmVzb3VyY2VQYXJhbWV0ZXJzKSkpOworICAgIERFQlVH
X0xPRygiU2NvcmUgPSAlZCIsIHNjb3JlKTsKKworICAgIHJldHVybiBzY29yZTsKK30KKwordm9p
ZCBNYW5hZ2VyOjpsb2FkUmVzb3VyY2VzKCkKK3sKKyAgICBWZWN0b3I8VmVjdG9yPFN0cmluZz4+
IGxpbmVzOworICAgIGlmICghcmVhZEZpbGUocmVwb3J0UmVjb3JkUGF0aCgpLCBsaW5lcykpCisg
ICAgICAgIHJldHVybjsKKworICAgIGZvciAoY29uc3QgYXV0byYgbGluZSA6IGxpbmVzKSB7Cisg
ICAgICAgIGlmIChsaW5lLnNpemUoKSAhPSAyKSB7CisgICAgICAgICAgICBERUJVR19MT0dfRVJS
T1IoImxpbmUuc2l6ZSA9PSAlZCIsIChpbnQpIGxpbmUuc2l6ZSgpKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgUmVzb3VyY2UgbmV3UmVzb3VyY2UoaGFzaFRv
UGF0aChsaW5lWzBdKSk7CisgICAgICAgIG1fY2FjaGVkUmVzb3VyY2VzLmFwcGVuZChXVEZNb3Zl
KG5ld1Jlc291cmNlKSk7CisgICAgfQorCisgICAgc3RkOjpzb3J0KHN0ZDo6YmVnaW4obV9jYWNo
ZWRSZXNvdXJjZXMpLCBzdGQ6OmVuZChtX2NhY2hlZFJlc291cmNlcyksIFtdKGF1dG8mIGxlZnQs
IGF1dG8mIHJpZ2h0KSB7CisgICAgICAgIHJldHVybiBXVEY6OmNvZGVQb2ludENvbXBhcmVMZXNz
VGhhbihsZWZ0LnVybCgpLnN0cmluZygpLCByaWdodC51cmwoKS5zdHJpbmcoKSk7CisgICAgfSk7
CisKKyAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogbV9jYWNoZWRSZXNvdXJjZXMpCisgICAgICAg
IGxvZ0xvYWRlZFJlc291cmNlKHJlc291cmNlKTsKK30KKworU3RyaW5nIE1hbmFnZXI6OnJlcG9y
dExvYWRQYXRoKCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KG1fcmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbiwga0ZpbGVOYW1lUmVwb3J0TG9hZCk7Cit9
CisKK1N0cmluZyBNYW5hZ2VyOjpyZXBvcnRSZWNvcmRQYXRoKCkKK3sKKyAgICByZXR1cm4gV2Vi
Q29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fcmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlv
biwga0ZpbGVOYW1lUmVwb3J0UmVjb3JkKTsKK30KKworU3RyaW5nIE1hbmFnZXI6OnJlcG9ydFJl
cGxheVBhdGgoKQoreworICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQobV9yZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uLCBrRmlsZU5hbWVSZXBvcnRSZXBsYXkpOwor
fQorCitTdHJpbmcgTWFuYWdlcjo6cmVxdWVzdFRvUGF0aChjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgLy8gVE9ETzogY29tZSB1cCB3aXRoIGEgbW9yZSBj
b21wcmVoZW5zaXZlIGhhc2ggdGhhdCBpbmNsdWRlcyBIVFRQIG1ldGhvZAorICAgIC8vIGFuZCBw
b3NzaWJseSBvdGhlciB2YWx1ZXMgKHN1Y2ggYXMgaGVhZGVycykuCisKKyAgICBjb25zdCBhdXRv
JiBoYXNoID0gc3RyaW5nVG9IYXNoKHJlcXVlc3QudXJsKCkuc3RyaW5nKCkpOworICAgIGNvbnN0
IGF1dG8mIHBhdGggPSBoYXNoVG9QYXRoKGhhc2gpOworICAgIHJldHVybiBwYXRoOworfQorCitT
dHJpbmcgTWFuYWdlcjo6c3RyaW5nVG9IYXNoKGNvbnN0IFN0cmluZyYgcykKK3sKKyAgICBXVEY6
Ok1ENSBtZDU7CisgICAgaWYgKHMuY2hhcmFjdGVyczgoKSkKKyAgICAgICAgbWQ1LmFkZEJ5dGVz
KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihzLmNoYXJhY3RlcnM4KCkpLCBzLmxlbmd0aCgp
KTsKKyAgICBlbHNlCisgICAgICAgIG1kNS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihzLmNoYXJhY3RlcnMxNigpKSwgMiAqIHMubGVuZ3RoKCkpOworCisgICAgV1RG
OjpNRDU6OkRpZ2VzdCBkaWdlc3Q7CisgICAgbWQ1LmNoZWNrc3VtKGRpZ2VzdCk7CisKKyAgICBy
ZXR1cm4gV1RGOjpiYXNlNjRVUkxFbmNvZGUoJmRpZ2VzdFswXSwgV1RGOjpNRDU6Omhhc2hTaXpl
KTsKK30KKworU3RyaW5nIE1hbmFnZXI6Omhhc2hUb1BhdGgoY29uc3QgU3RyaW5nJiBoYXNoKQor
eworICAgIFN0cmluZ0J1aWxkZXIgaGFzaGVkRmlsZU5hbWU7CisKKyAgICBjb25zdCBpbnQga051
bWJlck9mUGFyZW50RGlyZWN0b3JpZXMgPSAxOworICAgIGNvbnN0IGludCBrUGFyZW50RGlyZWN0
b3J5TmFtZUxlbmd0aCA9IDI7CisgICAgdW5zaWduZWQgaW5kZXggPSAwOworCisgICAgZm9yIChp
bnQgZGlyTnVtID0gMDsgZGlyTnVtIDwga051bWJlck9mUGFyZW50RGlyZWN0b3JpZXM7ICsrZGly
TnVtKSB7CisgICAgICAgIGhhc2hlZEZpbGVOYW1lLmFwcGVuZChoYXNoLnN1YnN0cmluZyhpbmRl
eCwga1BhcmVudERpcmVjdG9yeU5hbWVMZW5ndGgpKTsKKyAgICAgICAgaGFzaGVkRmlsZU5hbWUu
YXBwZW5kKCcvJyk7CisgICAgICAgIGluZGV4ICs9IGtQYXJlbnREaXJlY3RvcnlOYW1lTGVuZ3Ro
OworICAgIH0KKworICAgIGhhc2hlZEZpbGVOYW1lLmFwcGVuZChoYXNoLnN1YnN0cmluZyhpbmRl
eCkpOworICAgIGhhc2hlZEZpbGVOYW1lLmFwcGVuZCgiLmRhdGEiKTsKKworICAgIHJldHVybiBX
ZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoCisgICAgICAgIFdlYkNvcmU6OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChtX3JlY29yZFJlcGxheUNhY2hlTG9jYXRpb24sIGtEaXJOYW1l
UmVzb3VyY2VzKSwKKyAgICAgICAgaGFzaGVkRmlsZU5hbWUudG9TdHJpbmcoKSk7Cit9CisKK3Zv
aWQgTWFuYWdlcjo6bG9nUmVjb3JkZWRSZXNvdXJjZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCit7CisgICAgLy8gTG9nIG5ldHdvcmsgcmVzb3VyY2VzIGFzIHRoZXkg
YXJlIGNhY2hlZCB0byBkaXNrLgorCisgICAgaWYgKGVuc3VyZUZpbGVIYW5kbGUocmVwb3J0UmVj
b3JkUGF0aCgpLCBtX3JlY29yZEZpbGVIYW5kbGUpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIHVy
bCA9IHJlcXVlc3QudXJsKCk7CisgICAgICAgIHByaW50VG9GaWxlKG1fcmVjb3JkRmlsZUhhbmRs
ZSwgIiVzICVzXG4iLCBERUJVR19TVFIoc3RyaW5nVG9IYXNoKHVybC5zdHJpbmcoKSkpLCBERUJV
R19TVFIodXJsLnN0cmluZygpKSk7CisgICAgfQorfQorCit2b2lkIE1hbmFnZXI6OmxvZ0xvYWRl
ZFJlc291cmNlKFJlc291cmNlJiByZXNvdXJjZSkKK3sKKyAgICAvLyBMb2cgY2FjaGVkIHJlc291
cmNlcyBhcyB0aGV5IGFyZSBsb2FkZWQgZnJvbSBkaXNrLgorCisgICAgaWYgKGVuc3VyZUZpbGVI
YW5kbGUocmVwb3J0TG9hZFBhdGgoKSwgbV9sb2FkRmlsZUhhbmRsZSkpCisgICAgICAgIHByaW50
VG9GaWxlKG1fbG9hZEZpbGVIYW5kbGUsICIlc1xuIiwgREVCVUdfU1RSKHJlc291cmNlLnVybCgp
LnN0cmluZygpKSk7Cit9CisKK3ZvaWQgTWFuYWdlcjo6bG9nUGxheWVkQmFja1Jlc291cmNlKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCB3YXNDYWNoZU1pc3Mp
Cit7CisgICAgLy8gTG9nIG5ldHdvcmsgcmVzb3VyY2VzIHRoYXQgYXJlIHJlcXVlc3RlZCBkdXJp
bmcgcmVwbGF5LgorCisgICAgY29uc3QgYXV0byYgdXJsID0gcmVxdWVzdC51cmwoKTsKKworICAg
IGlmICh3YXNDYWNoZU1pc3MpCisgICAgICAgIERFQlVHX0xPRygiQ2FjaGUgbWlzczogVVJMID0g
JXtwdWJsaWN9cyIsIERFQlVHX1NUUih1cmwuc3RyaW5nKCkpKTsKKyAgICBlbHNlCisgICAgICAg
IERFQlVHX0xPRygiQ2FjaGUgaGl0OiAgVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUih1cmwu
c3RyaW5nKCkpKTsKKworICAgIGlmIChlbnN1cmVGaWxlSGFuZGxlKHJlcG9ydFJlcGxheVBhdGgo
KSwgbV9yZXBsYXlGaWxlSGFuZGxlKSkKKyAgICAgICAgcHJpbnRUb0ZpbGUobV9yZXBsYXlGaWxl
SGFuZGxlLCAiJXMgJXNcbiIsIHdhc0NhY2hlTWlzcyA/ICJtaXNzIiA6ICJoaXQgIiwgREVCVUdf
U1RSKHVybC5zdHJpbmcoKSkpOworfQorCitib29sIE1hbmFnZXI6OmVuc3VyZUZpbGVIYW5kbGUo
Y29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgRmlsZUhhbmRsZSYgZmlsZUhhbmRsZSkKK3sKKyAgICBp
ZiAoIWZpbGVIYW5kbGUpCisgICAgICAgIGZpbGVIYW5kbGUgPSBvcGVuQ2FjaGVGaWxlKGZpbGVQ
YXRoLCBXZWJDb3JlOjpPcGVuRm9yV3JpdGUpOworICAgIHJldHVybiBmaWxlSGFuZGxlOworfQor
CitGaWxlSGFuZGxlIE1hbmFnZXI6Om9wZW5DYWNoZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlUGF0
aCwgV2ViQ29yZTo6RmlsZU9wZW5Nb2RlIG1vZGUpCit7CisgICAgLy8gSWYgd2UgY2FuIHRyaXZp
YWxseSBvcGVuIHRoZSBmaWxlLCB0aGVuIGRvIHRoYXQgYW5kIHJldHVybiB0aGUgbmV3IGZpbGUK
KyAgICAvLyBoYW5kbGUuCisKKyAgICBhdXRvIGZpbGVIYW5kbGUgPSBGaWxlSGFuZGxlOjpvcGVu
RmlsZShmaWxlUGF0aCwgbW9kZSk7CisgICAgaWYgKGZpbGVIYW5kbGUpCisgICAgICAgIHJldHVy
biBmaWxlSGFuZGxlOworCisgICAgLy8gSWYgd2UncmUgb3BlbmluZyB0aGUgZmlsZSBmb3Igd3Jp
dGluZyAoaW5jbHVkaW5nIGFwcGVuZGluZyksIHRoZW4gdHJ5CisgICAgLy8gYWdhaW4gYWZ0ZXIg
bWFraW5nIHN1cmUgYWxsIGludGVybWVkaWF0ZSBkaXJlY3RvcmllcyBoYXZlIGJlZW4gY3JlYXRl
ZC4KKworICAgIGlmIChtb2RlICE9IFdlYkNvcmU6Ok9wZW5Gb3JSZWFkKSB7CisgICAgICAgIGNv
bnN0IGF1dG8mIHBhcmVudERpciA9IFdlYkNvcmU6OmRpcmVjdG9yeU5hbWUoZmlsZVBhdGgpOwor
ICAgICAgICBpZiAoIVdlYkNvcmU6Om1ha2VBbGxEaXJlY3RvcmllcyhwYXJlbnREaXIpKSB7Cisg
ICAgICAgICAgICBERUJVR19MT0dfRVJST1IoIkVycm9yICVkIHRyeWluZyB0byBjcmVhdGUgaW50
ZXJtZWRpYXRlIGRpcmVjdG9yaWVzOiAle3B1YmxpY31zIiwgZXJybm8sIERFQlVHX1NUUihwYXJl
bnREaXIpKTsKKyAgICAgICAgICAgIHJldHVybiBmaWxlSGFuZGxlOworICAgICAgICB9CisKKyAg
ICAgICAgZmlsZUhhbmRsZSA9IEZpbGVIYW5kbGU6Om9wZW5GaWxlKGZpbGVQYXRoLCBtb2RlKTsK
KyAgICAgICAgaWYgKGZpbGVIYW5kbGUpCisgICAgICAgICAgICByZXR1cm4gZmlsZUhhbmRsZTsK
KyAgICB9CisKKyAgICAvLyBDb3VsZCBub3Qgb3BlbiB0aGUgZmlsZS4gTG9nIHRoZSBlcnJvciBh
bmQgbGVhdmUsIHJldHVybmluZyB0aGUgaW52YWxpZAorICAgIC8vIGZpbGUgaGFuZGxlLgorCisg
ICAgaWYgKG1vZGUgPT0gV2ViQ29yZTo6T3BlbkZvclJlYWQpCisgICAgICAgIERFQlVHX0xPR19F
UlJPUigiRXJyb3IgJWQgdHJ5aW5nIHRvIG9wZW4gJXtwdWJsaWN9cyBmb3IgcmVhZGluZyIsIGVy
cm5vLCBERUJVR19TVFIoZmlsZVBhdGgpKTsKKyAgICBlbHNlCisgICAgICAgIERFQlVHX0xPR19F
UlJPUigiRXJyb3IgJWQgdHJ5aW5nIHRvIG9wZW4gJXtwdWJsaWN9cyBmb3Igd3JpdGluZyIsIGVy
cm5vLCBERUJVR19TVFIoZmlsZVBhdGgpKTsKKworICAgIHJldHVybiBmaWxlSGFuZGxlOworfQor
Citib29sIE1hbmFnZXI6OnJlYWRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIFZlY3RvcjxW
ZWN0b3I8U3RyaW5nPj4mIGxpbmVzKQoreworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAg
IFdlYkNvcmU6Ok1hcHBlZEZpbGVEYXRhIGZpbGUoZmlsZVBhdGgsIHN1Y2Nlc3MpOworICAgIGlm
ICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBiZWdpbiA9IHN0
YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihmaWxlLmRhdGEoKSk7CisgICAgYXV0byBlbmQgPSBi
ZWdpbiArIGZpbGUuc2l6ZSgpOworCisgICAgVmVjdG9yPFN0cmluZz4gbGluZTsKKyAgICB3aGls
ZSAoZ2V0TGluZShiZWdpbiwgZW5kLCBsaW5lKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKFdURk1v
dmUobGluZSkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTWFuYWdlcjo6Z2V0TGlu
ZSh1aW50OF90IGNvbnN0IComIHAsIHVpbnQ4X3QgY29uc3QgKiBjb25zdCBlbmQsIFZlY3RvcjxT
dHJpbmc+JiBsaW5lKQoreworICAgIC8vIE5COiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgbWF5IGJl
IG1vcmUgZGF0YSB0byBnZXQsIGZhbHNlIGlmIHdlJ3ZlIGhpdAorICAgIC8vIHRoZSBlbmQgb2Yg
dGhlIGJ1ZmZlci4KKworICAgIC8vIERFQlVHX0xPRygiR2V0dGluZyBhIGxpbmUiKTsKKworICAg
IGxpbmUuY2xlYXIoKTsKKworICAgIGlmIChwID09IGVuZCkgeworICAgICAgICAvLyBERUJVR19M
T0coIkl0ZXJhdG9yIGF0IGVuZDsgcmV0dXJuaW5nIGZhbHNlIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBTdHJpbmcgd29yZDsKKyAgICB3aGlsZSAoZ2V0V29yZChwLCBl
bmQsIHdvcmQpKSB7CisgICAgICAgIGlmICghd29yZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IC8vIERFQlVHX0xPRygiQWRkaW5nIHdvcmQ6ICV7cHVibGljfXMiLCBERUJVR19TVFIod29yZCkp
OworICAgICAgICAgICAgbGluZS5hcHBlbmQod29yZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNYW5hZ2VyOjpnZXRXb3JkKHVpbnQ4X3QgY29uc3Qg
KiYgcCwgdWludDhfdCBjb25zdCAqIGNvbnN0IGVuZCwgU3RyaW5nJiB3b3JkKQoreworICAgIC8v
IE5COiBSZXR1cm5zIHRydWUgaWYgYSAocG9zc2libHkgZW1wdHkpIHdvcmQgd2FzIGZvdW5kIGFu
ZCB0aGVyZSBtYXkgYmUKKyAgICAvLyBtb3JlLCBmYWxzZSBpZiB3ZSd2ZSBoaXQgdGhlIGVuZCBv
ZiBsaW5lIG9yIGJ1ZmZlci4KKworICAgIC8vIERFQlVHX0xPRygiR2V0dGluZyBhIHdvcmQiKTsK
KworICAgIGlmIChwID09IGVuZCkgeworICAgICAgICAvLyBERUJVR19MT0coIkl0ZXJhdG9yIGF0
IGVuZDsgcmV0dXJuaW5nIGZhbHNlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBpZiAoKnAgPT0gJ1xuJykgeworICAgICAgICAvLyBERUJVR19MT0coIkl0ZXJhdG9yIGhp
dCBFT0w7IHJldHVybmluZyBmYWxzZSIpOworICAgICAgICArK3A7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBib29sIGVzY2FwaW5nID0gZmFsc2U7CisgICAgYm9vbCBpZ25v
cmluZyA9IGZhbHNlOworCisgICAgd29yZCA9IFN0cmluZygpOworCisgICAgLy8gREVCVUdfTE9H
KCJJdGVyYXRpbmciKTsKKworICAgIGZvciAoIDsgcCAhPSBlbmQ7ICsrcCkgeworICAgICAgICBp
ZiAoaWdub3JpbmcpIHsKKyAgICAgICAgICAgIGlmICgqcCA9PSAnXG4nKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgaWYgKGVzY2FwaW5nKSB7CisgICAgICAgICAgICB3
b3JkLmFwcGVuZCgqcCk7CisgICAgICAgICAgICBlc2NhcGluZyA9IGZhbHNlOworICAgICAgICB9
IGVsc2UgaWYgKCpwID09ICcjJykgeworICAgICAgICAgICAgaWdub3JpbmcgPSB0cnVlOworICAg
ICAgICB9IGVsc2UgaWYgKCpwID09ICdcXCcpIHsKKyAgICAgICAgICAgIGVzY2FwaW5nID0gdHJ1
ZTsKKyAgICAgICAgfSBlbHNlIGlmICgqcCA9PSAnICcpIHsKKyAgICAgICAgICAgIGlmICghd29y
ZC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSBpZiAo
KnAgPT0gJ1xuJykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICB3b3JkLmFwcGVuZCgqcCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
TWFuYWdlcjo6cHJpbnRUb0ZpbGUoY29uc3QgRmlsZUhhbmRsZSYgZmlsZUhhbmRsZSwgY29uc3Qg
Y2hhciogZm9ybWF0LCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFy
Z3MsIGZvcm1hdCk7CisKKyAgICBjaGFyKiBidWZmZXIgPSBudWxscHRyOworICAgIHZhc3ByaW50
ZigmYnVmZmVyLCBmb3JtYXQsIGFyZ3MpOworICAgIGF1dG8gd3JpdGVSZXN1bHQgPSBmaWxlSGFu
ZGxlLndyaXRlVG9GaWxlKGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikpOworICAgIGZyZWUoYnVmZmVy
KTsKKworICAgIHZhX2VuZChhcmdzKTsKKworICAgIHJldHVybiB3cml0ZVJlc3VsdCA+PSAwOwor
fQorCit9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVNYW5h
Z2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNmZjNWU5ZmYzZDU3MjI5MzBmOTY2YTNhNjk5YjUwY2U2ZWU0YjZk
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1
cmUvTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmgKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRl
ICJOZXR3b3JrQ2FwdHVyZVR5cGVzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9VUkxQYXJzZXIuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24u
aD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1l
c3BhY2UgTmV0d29ya0NhcHR1cmUgeworCitjbGFzcyBSZXNvdXJjZTsKKworLyoKKyAqIE5ldHdv
cmtDYXB0dXJlOjpNYW5hZ2VyIHNlcnZlcyB0aHJlZSBwdXJwb3NlczoKKyAqCisgKiAgKiBJdCBr
ZWVwcyB0aGUgc3RhdGUgb2Ygd2hldGhlciB3ZSBhcmUgcmVjb3JkaW5nLCByZXBsYXlpbmcsIG9y
IG5laXRoZXIuCisgKiAgKiBJdCBrZWVwcyB0aGUgbGlzdCBvZiBjYWNoZWQgcmVzb3VyY2VzIChp
ZiByZXBsYXlpbmcpLCBwZXJmb3JtcyBmdXp6eQorICogICAgbWF0Y2hpbmcgb24gdGhlbS4KKyAq
ICAqIEl0IGhhcyB1dGlsaXRpZXMgZm9yIGxvZ2dpbmcgYW5kIGZpbGUgbWFuYWdlbWVudC4KKyAq
CisgKiBUT0RPOiBQZXJoYXBzIHdlIHNob3VsZCBicmVhayB0aGlzIHVwIGludG8gdGhyZWUgY2xh
c3Nlcz8KKyAqLworY2xhc3MgTWFuYWdlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWFu
YWdlcik7CisgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8TWFuYWdlcj47CisK
K3B1YmxpYzoKKyAgICBlbnVtIFJlY29yZFJlcGxheU1vZGUgeworICAgICAgICBEaXNhYmxlZCwK
KyAgICAgICAgUmVjb3JkLAorICAgICAgICBSZXBsYXkKKyAgICB9OworCitwdWJsaWM6CisgICAg
c3RhdGljIE1hbmFnZXImIHNpbmdsZXRvbigpOworCisgICAgdm9pZCBpbml0aWFsaXplKGNvbnN0
IFN0cmluZyYgcmVjb3JkUmVwbGF5TW9kZSwgY29uc3QgU3RyaW5nJiByZWNvcmRSZXBsYXlDYWNo
ZUxvY2F0aW9uKTsKKyAgICB2b2lkIHRlcm1pbmF0ZSgpOworCisgICAgYm9vbCBpc1JlY29yZGlu
ZygpIGNvbnN0IHsgcmV0dXJuIG1vZGUoKSA9PSBSZWNvcmRSZXBsYXlNb2RlOjpSZWNvcmQ7IH0K
KyAgICBib29sIGlzUmVwbGF5aW5nKCkgY29uc3QgeyByZXR1cm4gbW9kZSgpID09IFJlY29yZFJl
cGxheU1vZGU6OlJlcGxheTsgfQorICAgIFJlY29yZFJlcGxheU1vZGUgbW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjb3JkUmVwbGF5TW9kZTsgfQorCisgICAgUmVzb3VyY2UqIGZpbmRNYXRjaChj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKworICAgIHZvaWQgbG9nUmVjb3JkZWRS
ZXNvdXJjZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIGxvZ0xv
YWRlZFJlc291cmNlKFJlc291cmNlJik7CisgICAgdm9pZCBsb2dQbGF5ZWRCYWNrUmVzb3VyY2Uo
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCB3YXNDYWNoZU1pc3MpOworCisg
ICAgRmlsZUhhbmRsZSBvcGVuQ2FjaGVGaWxlKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkZpbGVP
cGVuTW9kZSk7CisKKyAgICBTdHJpbmcgcmVxdWVzdFRvUGF0aChjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmKTsKKworcHJpdmF0ZToKKyAgICBNYW5hZ2VyKCkgPSBkZWZhdWx0OworICAg
IH5NYW5hZ2VyKCkgPSBkZWxldGU7CisKKyAgICBSZXNvdXJjZSogZmluZEV4YWN0TWF0Y2goY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgUmVzb3VyY2UqIGZpbmRCZXN0RnV6
enlNYXRjaChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICBpbnQgZnV6enlN
YXRjaFVSTHMoY29uc3QgV2ViQ29yZTo6VVJMJiByZXF1ZXN0VVJMLCBjb25zdCBXZWJDb3JlOjpV
UkxQYXJzZXI6OlVSTEVuY29kZWRGb3JtJiByZXF1ZXN0UGFyYW1ldGVycywgY29uc3QgV2ViQ29y
ZTo6VVJMJiByZXNvdXJjZVVSTCwgY29uc3QgV2ViQ29yZTo6VVJMUGFyc2VyOjpVUkxFbmNvZGVk
Rm9ybSYgcmVzb3VyY2VQYXJhbWV0ZXJzKTsKKworICAgIHZvaWQgbG9hZFJlc291cmNlcygpOwor
CisgICAgU3RyaW5nIHJlcG9ydExvYWRQYXRoKCk7CisgICAgU3RyaW5nIHJlcG9ydFJlY29yZFBh
dGgoKTsKKyAgICBTdHJpbmcgcmVwb3J0UmVwbGF5UGF0aCgpOworCisgICAgU3RyaW5nIHN0cmlu
Z1RvSGFzaChjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgaGFzaFRvUGF0aChjb25zdCBTdHJp
bmcmIGhhc2gpOworCisgICAgYm9vbCBlbnN1cmVGaWxlSGFuZGxlKGNvbnN0IFN0cmluZyYgZmls
ZVBhdGgsIEZpbGVIYW5kbGUmKTsKKworICAgIGJvb2wgcmVhZEZpbGUoY29uc3QgU3RyaW5nJiBm
aWxlUGF0aCwgVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYgYnVmZmVyKTsKKyAgICBib29sIGdldExp
bmUodWludDhfdCBjb25zdCAqJiBwLCB1aW50OF90IGNvbnN0ICogY29uc3QgZW5kLCBWZWN0b3I8
U3RyaW5nPiYgbGluZSk7CisgICAgYm9vbCBnZXRXb3JkKHVpbnQ4X3QgY29uc3QgKiYgcCwgdWlu
dDhfdCBjb25zdCAqIGNvbnN0IGVuZCwgU3RyaW5nJiB3b3JkKTsKKyAgICBib29sIHByaW50VG9G
aWxlKGNvbnN0IEZpbGVIYW5kbGUmLCBjb25zdCBjaGFyKiBmb3JtYXQsIC4uLik7CisKK3ByaXZh
dGU6CisgICAgUmVjb3JkUmVwbGF5TW9kZSBtX3JlY29yZFJlcGxheU1vZGUgeyBEaXNhYmxlZCB9
OworICAgIFN0cmluZyBtX3JlY29yZFJlcGxheUNhY2hlTG9jYXRpb247CisKKyAgICBGaWxlSGFu
ZGxlIG1fbG9hZEZpbGVIYW5kbGU7CisgICAgRmlsZUhhbmRsZSBtX3JlcGxheUZpbGVIYW5kbGU7
CisgICAgRmlsZUhhbmRsZSBtX3JlY29yZEZpbGVIYW5kbGU7CisKKyAgICBWZWN0b3I8UmVzb3Vy
Y2U+IG1fY2FjaGVkUmVzb3VyY2VzOworfTsKKworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhcHR1
cmUKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FQ
VFVSRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUv
TmV0d29ya0NhcHR1cmVSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVjb3JkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5YmZlNmQz
NzU3MTUxNTc4MTcxMzQ5NzQyYTE4ODhmOGE4YjAxOTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVjb3JkZXIu
Y3BwCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlUmVjb3JkZXIuaCIKKworI2lmIEVOQUJMRShORVRXT1JL
X0NBUFRVUkUpCisKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCIKKyNpbmNsdWRl
ICJOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVz
cG9uc2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorCisjZGVmaW5lIERF
QlVHX0NMQVNTIE1hbmFnZXIKKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29y
a0NhcHR1cmUgeworCit2b2lkIFJlY29yZGVyOjpyZWNvcmRSZXF1ZXN0U2VudChjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgLy8gVGhpcyBjbGFzcyByZWNv
cmRzIE5ldHdvcmtMb2FkJ3MgcHJvY2VzcyBvZiBsb2FkaW5nIGEgbmV0d29yayByZXNvdXJjZS4K
KyAgICAvLyBOZXR3b3JrTG9hZCBkb2VzIHRoaXMgYnkgY3JlYXRpbmcgYSBOZXR3b3JrRGF0YVRh
c2sgYW5kIGNhbGxpbmcgcmVzdW1lCisgICAgLy8gb24gaXQuIFRoaXMgY2FsbCB0byByZXN1bWUg
Y2FuIGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgdGFzayBoYXMKKyAgICAvLyBiZWVu
IGNyZWF0ZWQsIG9yIC0tIGlmIHRoZSBsb2FkaW5nIGlzIG1hcmtlZCBhcyBkZWZlcnJlZCAtLSBp
dCBjYW4gYmUKKyAgICAvLyBjYWxsZWQgbGF0ZXIgaW4gTmV0d29ya0xvYWQ6OnNldERlZmVycmVk
KHRydWUpLiBJbiBmYWN0LCB0aGUgbGF0dGVyIGNhbgorICAgIC8vIGJlIGNhbGxlZCBtdWx0aXBs
ZSB0aW1lcyBpZiB0aGUgbG9hZGluZyBpcyBzdXNwZW5kZWQgYW5kIHJlc3VtZWQKKyAgICAvLyBt
dWx0aXBsZSB0aW1lcy4KKyAgICAvLworICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbiBi
b3RoIHBsYWNlcyB3aGVyZSByZXN1bWUgaXMgY2FsbGVkLiBPdXIgdGFzayBpcworICAgIC8vIHRv
IGNhdGNoIHRoZSBjYWxsIHRvIE5ldHdvcmtEYXRhVGFzazo6cmVzdW1lIHRoYXQgc3RhcnRzIHRo
ZSBuZXR3b3JrCisgICAgLy8gbG9hZGluZyBwcm9jZXNzLiBXZSB3YW50IHRvIGlnbm9yZSB0aGUg
b3RoZXIgY2FsbHMgdG8gcmVzdW1lLiBPdXIKKyAgICAvLyBhcHByb2FjaCB0byBrbm93aW5nIHdo
aWNoIG9uZSBpcyB0aGUgZmlyc3QgaXMgdG8gY2hlY2sgb3VyIGNvbGxlY3Rpb24gb2YKKyAgICAv
LyByZWNvcmRlZCBldmVudHMuIElmIGl0IGlzIGVtcHR5LCB0aGVuIHRoaXMgaXMgdGhlIGZpcnN0
IGNhbGwgaW50byB0aGUKKyAgICAvLyByZWNvcmRlciwgYW5kIHdlIHdhbnQgdG8gcmVjb3JkIHRo
ZSBldmVudC4gT3RoZXJ3aXNlLCBpZ25vcmUgaXQuCisKKyAgICBpZiAobV9ldmVudHMuc2l6ZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBERUJVR19MT0coIlNlbnQgcmVxdWVzdCBmb3IgVVJM
ID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihyZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisKKyAg
ICBtX2luaXRpYWxSZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICByZWNvcmRFdmVudChSZXF1ZXN0U2Vu
dEV2ZW50KHJlcXVlc3QpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6cmVjb3JkUmVzcG9uc2VSZWNl
aXZlZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICAv
LyBDYWxsZWQgd2hlbiByZWNlaXZpbmcgYSByZXNwb25zZSBvdGhlciB0aGFuIGEgcmVkaXJlY3Qg
b3IgZXJyb3IuCisKKyAgICBERUJVR19MT0coIlJlY2VpdmVkIHJlc3BvbnNlIGZyb20gVVJMID0g
JXtwdWJsaWN9cyIsIERFQlVHX1NUUihyZXNwb25zZS51cmwoKS5zdHJpbmcoKSkpOworICAgIEFT
U0VSVChtX2V2ZW50cy5zaXplKCkpOworCisgICAgLy8gVE9ETzogSXMgdGhlcmUgYSBiZXR0ZXIg
cmVzcG9uc2UgdG8gcmVjZWl2aW5nIGEgbXVsdGktcGFydCByZXNvdXJjZT8KKyAgICAvLyBMZWFy
biBtb3JlIGFib3V0IG11bHRpLXBhcnQgcmVzb3VyY2VzLiBXaHkgZG9uJ3Qgd2UgcmVjb3JkIHRo
ZXNlPyAoTm90ZSwKKyAgICAvLyB0aGlzIGRlY2lzaW9uIGlzIGJhc2VkIG9uIHNvbWUgTmV0d29y
a0NhY2hlIGNvZGUuKQorCisgICAgaWYgKCFyZXNwb25zZS5pc011bHRpcGFydCgpKQorICAgICAg
ICByZWNvcmRFdmVudChSZXNwb25zZVJlY2VpdmVkRXZlbnQocmVzcG9uc2UpKTsKKyAgICBlbHNl
CisgICAgICAgIG1fZXZlbnRzLmNsZWFyKCk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnJlY29yZFJl
ZGlyZWN0UmVjZWl2ZWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBERUJVR19M
T0coIlJlY2VpdmVkIHJlZGlyZWN0IHRvIFVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIocmVx
dWVzdC51cmwoKS5zdHJpbmcoKSkpOworICAgIEFTU0VSVChtX2V2ZW50cy5zaXplKCkpOworCisg
ICAgcmVjb3JkRXZlbnQoUmVkaXJlY3RSZWNlaXZlZEV2ZW50KHJlcXVlc3QsIHJlc3BvbnNlKSk7
Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnJlY29yZFJlZGlyZWN0U2VudChjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgREVCVUdfTE9HKCJTZW50IHJlZGlyZWN0
IGZvciBVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RSKHJlcXVlc3QudXJsKCkuc3RyaW5nKCkp
KTsKKyAgICBBU1NFUlQobV9ldmVudHMuc2l6ZSgpKTsKKworICAgIHJlY29yZEV2ZW50KFJlZGly
ZWN0U2VudEV2ZW50KHJlcXVlc3QpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6cmVjb3JkRGF0YVJl
Y2VpdmVkKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciYgYnVmZmVyKQoreworICAgIERFQlVHX0xPRygi
UmVjZWl2ZWQgJXUgYnl0ZXMgb2YgZGF0YSIsIGJ1ZmZlci5zaXplKCkpOworCisgICAgaWYgKCFt
X2V2ZW50cy5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFByZXZlbnQgbWVtb3J5
IGdyb3d0aCBpbiBjYXNlIG9mIHN0cmVhbWluZyBkYXRhLiBUT0RPOiBJcyB0aGVyZSBhIGJldHRl
cgorICAgIC8vIHJlc3BvbnNlIHRvIHRoaXM/IElmIHdlIGVuY291bnRlciB0aGlzIGNvbmRpdGlv
biwgYWxsIG9mIG91ciByZWNvcmRpbmcKKyAgICAvLyBzaWxlbnRseSBnb2VzIG91dCB0aGUgd2lu
ZG93LiBSZXBsYXkgd2lsbCBub3Qgd29yaywgYW5kIHRoZSB1c2VyIGRvZXNuJ3QKKyAgICAvLyBr
bm93IHRoYXQuCisKKyAgICBjb25zdGV4cHIgc2l6ZV90IGtNYXhpbXVtQ2FjaGVCdWZmZXJTaXpl
ID0gMTAgKiAxMDI0ICogMTAyNDsKKyAgICBtX2RhdGFMZW5ndGggKz0gYnVmZmVyLnNpemUoKTsK
KyAgICBpZiAobV9kYXRhTGVuZ3RoIDw9IGtNYXhpbXVtQ2FjaGVCdWZmZXJTaXplKQorICAgICAg
ICByZWNvcmRFdmVudChEYXRhUmVjZWl2ZWRFdmVudChidWZmZXIpKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fZXZlbnRzLmNsZWFyKCk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnJlY29yZEZpbmlzaChj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBERUJVR19MT0coIkZp
bmlzaGVkIik7CisKKyAgICBpZiAoIW1fZXZlbnRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgcmVjb3JkRXZlbnQoRmluaXNoZWRFdmVudChlcnJvcikpOworICAgIHdyaXRlRXZlbnRz
KCk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OndyaXRlRXZlbnRzKCkKK3sKKyAgICBhdXRvIHBhdGgg
PSBNYW5hZ2VyOjpzaW5nbGV0b24oKS5yZXF1ZXN0VG9QYXRoKG1faW5pdGlhbFJlcXVlc3QpOwor
ICAgIGF1dG8gaGFuZGxlID0gTWFuYWdlcjo6c2luZ2xldG9uKCkub3BlbkNhY2hlRmlsZShwYXRo
LCBXZWJDb3JlOjpPcGVuRm9yV3JpdGUpOworICAgIGlmICghaGFuZGxlKQorICAgICAgICByZXR1
cm47CisKKyAgICBmb3IgKGF1dG8gY29uc3QmIGV2ZW50IDogbV9ldmVudHMpIHsKKyAgICAgICAg
YXV0byBhc1N0cmluZyA9IGV2ZW50VG9TdHJpbmcoZXZlbnQpOworICAgICAgICBpZiAoaGFuZGxl
LndyaXRlVG9GaWxlKGFzU3RyaW5nLmNfc3RyKCksIGFzU3RyaW5nLnNpemUoKSArIDEpID09IC0x
KSB7CisgICAgICAgICAgICBERUJVR19MT0dfRVJST1IoIkVycm9yIHRyeWluZyB0byB3cml0ZSB0
byBmaWxlIGZvciBVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RSKG1faW5pdGlhbFJlcXVlc3Qu
dXJsKCkuc3RyaW5nKCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0K
KworICAgIE1hbmFnZXI6OnNpbmdsZXRvbigpLmxvZ1JlY29yZGVkUmVzb3VyY2UobV9pbml0aWFs
UmVxdWVzdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJl
UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29y
a0NhcHR1cmVSZWNvcmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEzNDU2MjEyMWIzNTA5YmQ4NzM3OWRhMzQ3
ZjU4ZTZjMGEzMTBjMzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVjb3JkZXIuaApAQCAtMCwwICsxLDY5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJF
KQorCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVFdmVudC5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
UmVzb3VyY2VSZXF1ZXN0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFJlc291cmNl
RXJyb3I7CitjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworY2xhc3MgU2hhcmVkQnVmZmVyOworfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZSB7CisKK2NsYXNz
IFJlY29yZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHJlY29yZFJlcXVlc3RTZW50KGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIHZvaWQgcmVjb3JkUmVzcG9uc2VSZWNlaXZl
ZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdm9pZCByZWNvcmRSZWRp
cmVjdFJlY2VpdmVkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2b2lkIHJlY29yZFJlZGlyZWN0U2VudChjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIHJlY29yZERhdGFSZWNlaXZl
ZChXZWJDb3JlOjpTaGFyZWRCdWZmZXImKTsKKyAgICB2b2lkIHJlY29yZEZpbmlzaChjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CisKK3ByaXZhdGU6CisgICAgdm9pZCB3cml0ZUV2ZW50
cygpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgdm9pZCByZWNvcmRFdmVudChU
JiYgZXZlbnQpCisgICAgeworICAgICAgICBtX2V2ZW50cy5hcHBlbmQoQ2FwdHVyZUV2ZW50KFdU
Rk1vdmUoZXZlbnQpKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIENhcHR1cmVFdmVudHMgbV9l
dmVudHM7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1faW5pdGlhbFJlcXVlc3Q7Cisg
ICAgc2l6ZV90IG1fZGF0YUxlbmd0aCB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIE5ldHdv
cmtDYXB0dXJlCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRX
T1JLX0NBUFRVUkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YXB0dXJlL05ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
MDRhZjY5YzdkM2EzODhkNGYzY2E2ODBmODE1ZWQ4ZGVlYzZkNDc4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJl
cGxheWVyLmNwcApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuaCIKKworI2lmIEVOQUJMRShO
RVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCIKKyNp
bmNsdWRlICJOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJOZXR3b3JrRGF0YVRh
c2tSZXBsYXkuaCIKKyNpbmNsdWRlICJOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCIKKworI2RlZmlu
ZSBERUJVR19DTEFTUyBSZXBsYXllcgorCituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBO
ZXR3b3JrQ2FwdHVyZSB7CisKK1JlZjxOZXR3b3JrRGF0YVRhc2s+IFJlcGxheWVyOjpyZXBsYXlS
ZXNvdXJjZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBj
bGllbnQsIGNvbnN0IE5ldHdvcmtMb2FkUGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3sKKyAgICBh
dXRvIGZvdW5kUmVzb3VyY2UgPSBNYW5hZ2VyOjpzaW5nbGV0b24oKS5maW5kTWF0Y2gocGFyYW1l
dGVycy5yZXF1ZXN0KTsKKyAgICBNYW5hZ2VyOjpzaW5nbGV0b24oKS5sb2dQbGF5ZWRCYWNrUmVz
b3VyY2UocGFyYW1ldGVycy5yZXF1ZXN0LCAhZm91bmRSZXNvdXJjZSk7CisgICAgcmV0dXJuIE5l
dHdvcmtEYXRhVGFza1JlcGxheTo6Y3JlYXRlKHNlc3Npb24sIGNsaWVudCwgcGFyYW1ldGVycywg
Zm91bmRSZXNvdXJjZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtD
YXB0dXJlUmVwbGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUv
TmV0d29ya0NhcHR1cmVSZXBsYXllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4N2VjNTA2MGFkNjRkMGZjNzE3
Yjg3MjYzNzI1MTJjOWQ5ODkwYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuaApAQCAtMCwwICsx
LDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTkVUV09SS19D
QVBUVVJFKQorCisjaW5jbHVkZSA8d3RmL1JlZi5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2Ns
YXNzIE5ldHdvcmtEYXRhVGFzazsKK2NsYXNzIE5ldHdvcmtEYXRhVGFza0NsaWVudDsKK2NsYXNz
IE5ldHdvcmtMb2FkUGFyYW1ldGVyczsKK2NsYXNzIE5ldHdvcmtTZXNzaW9uOworfQorCituYW1l
c3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZSB7CisKK2NsYXNzIFJlcGxh
eWVyIHsKK3B1YmxpYzoKKyAgICBSZWY8TmV0d29ya0RhdGFUYXNrPiByZXBsYXlSZXNvdXJjZShO
ZXR3b3JrU2Vzc2lvbiYsIE5ldHdvcmtEYXRhVGFza0NsaWVudCYsIGNvbnN0IE5ldHdvcmtMb2Fk
UGFyYW1ldGVycyYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0Nh
cHR1cmVSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJl
L05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU2MjA3ZDk0ZTY2NzEzZGEy
N2ViYjBkYTQ2ZWFhMDhkYWI2ZWVmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwCkBAIC0w
LDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ik5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUp
CisKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZUV2ZW50LmgiCisjaW5jbHVkZSAiTmV0d29ya0Nh
cHR1cmVMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVSZWNvcmRlci5oIgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZSB7CisKK1Jlc291cmNl
OjpSZXNvdXJjZShjb25zdCBTdHJpbmcmIGV2ZW50RmlsZVBhdGgpCisgICAgOiBtX2V2ZW50Rmls
ZVBhdGgoZXZlbnRGaWxlUGF0aCkKK3sKK30KKworY29uc3QgV2ViQ29yZTo6VVJMJiBSZXNvdXJj
ZTo6dXJsKCkKK3sKKyAgICBpZiAoIW1fdXJsKSB7CisgICAgICAgIGF1dG8gZXZlbnRzID0gZXZl
bnRTdHJlYW0oKTsKKyAgICAgICAgYXV0byBldmVudCA9IGV2ZW50cy5uZXh0RXZlbnQoKTsKKyAg
ICAgICAgaWYgKCFldmVudCkKKyAgICAgICAgICAgIERFQlVHX0xPR19FUlJPUigiRXZlbnQgc3Ry
ZWFtIGRvZXMgbm90IGNvbnRhaW4gZXZlbnRzOiBmaWxlID0gJXtwdWJsaWN9cyIsIERFQlVHX1NU
UihtX2V2ZW50RmlsZVBhdGgpKTsKKyAgICAgICAgZWxzZSBpZiAoIVdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8UmVxdWVzdFNlbnRFdmVudD4oKmV2ZW50KSkKKyAgICAgICAgICAgIERFQlVHX0xPR19F
UlJPUigiRXZlbnQgc3RyZWFtIGRvZXMgbm90IGhhdmUgYSByZXF1ZXN0U2VudCBldmVudDogZmls
ZSA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9ldmVudEZpbGVQYXRoKSk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgYXV0byByZXF1ZXN0U2VudEV2ZW50ID0gV1RGOjpnZXQ8UmVxdWVz
dFNlbnRFdmVudD4oKmV2ZW50KTsKKyAgICAgICAgICAgIFdlYkNvcmU6OlVSTFBhcnNlciBwYXJz
ZXIocmVxdWVzdFNlbnRFdmVudC5yZXF1ZXN0LnVybCk7CisgICAgICAgICAgICBtX3VybCA9IHBh
cnNlci5yZXN1bHQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAqbV91cmw7Cit9
CisKK2NvbnN0IFdlYkNvcmU6OlVSTCYgUmVzb3VyY2U6OmJhc2VVUkwoKQoreworICAgIGlmICgh
bV9iYXNlVVJMKSB7CisgICAgICAgIGF1dG8gcGF0aFN0YXJ0ID0gdXJsKCkucGF0aFN0YXJ0KCk7
CisgICAgICAgIGF1dG8gYmFzZVVSTFN0ciA9IHVybCgpLnN0cmluZygpLmxlZnQocGF0aFN0YXJ0
KTsKKyAgICAgICAgV2ViQ29yZTo6VVJMUGFyc2VyIHBhcnNlcihiYXNlVVJMU3RyKTsKKyAgICAg
ICAgbV9iYXNlVVJMID0gcGFyc2VyLnJlc3VsdCgpOworICAgIH0KKworICAgIHJldHVybiAqbV9i
YXNlVVJMOworfQorCitXZWJDb3JlOjpVUkxQYXJzZXI6OlVSTEVuY29kZWRGb3JtIFJlc291cmNl
OjpxdWVyeVBhcmFtZXRlcnMoKQoreworICAgIGlmICghbV9xdWVyeVBhcmFtZXRlcnMpCisgICAg
ICAgIG1fcXVlcnlQYXJhbWV0ZXJzID0gV2ViQ29yZTo6VVJMUGFyc2VyOjpwYXJzZVVSTEVuY29k
ZWRGb3JtKHVybCgpLnF1ZXJ5KCkpOworCisgICAgcmV0dXJuICptX3F1ZXJ5UGFyYW1ldGVyczsK
K30KKworUmVzb3VyY2U6OkV2ZW50U3RyZWFtIFJlc291cmNlOjpldmVudFN0cmVhbSgpCit7Cisg
ICAgcmV0dXJuIEV2ZW50U3RyZWFtKG1fZXZlbnRGaWxlUGF0aCk7Cit9CisKK1Jlc291cmNlOjpF
dmVudFN0cmVhbTo6RXZlbnRTdHJlYW0oY29uc3QgU3RyaW5nJiBldmVudEZpbGVQYXRoKQorICAg
IDogbV9ldmVudEZpbGVQYXRoKGV2ZW50RmlsZVBhdGgpCisgICAgLCBtX21hcHBlZEV2ZW50Rmls
ZShtX2V2ZW50RmlsZVBhdGgsIG1faGF2ZU1hcHBlZEV2ZW50RmlsZSkKK3sKK30KKworT3B0aW9u
YWxDYXB0dXJlRXZlbnQgUmVzb3VyY2U6OkV2ZW50U3RyZWFtOjpuZXh0RXZlbnQoKQoreworICAg
IGlmIChtX29mZnNldCA9PSBtX21hcHBlZEV2ZW50RmlsZS5zaXplKCkpIHsKKyAgICAgICAgREVC
VUdfTE9HX0VSUk9SKCJVbmFibGUgdG8gcmV0dXJuIGV2ZW50IC0gYXQgZW5kIG9mIGZpbGU6ICV7
cHVibGljfXMiLCBERUJVR19TVFIobV9ldmVudEZpbGVQYXRoKSk7CisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgY29uc3QgY2hhciogY2hhckJ1ZmZlciA9IHN0YXRp
Y19jYXN0PGNvbnN0IGNoYXIqPihtX21hcHBlZEV2ZW50RmlsZS5kYXRhKCkpOworICAgIGNvbnN0
IGNoYXIqIGN1cnJlbnQgPSBjaGFyQnVmZmVyICsgbV9vZmZzZXQ7CisKKyAgICB3aGlsZSAobV9v
ZmZzZXQgPCBtX21hcHBlZEV2ZW50RmlsZS5zaXplKCkgJiYgY2hhckJ1ZmZlclttX29mZnNldF0p
CisgICAgICAgICsrbV9vZmZzZXQ7CisKKyAgICBpZiAobV9vZmZzZXQgPT0gbV9tYXBwZWRFdmVu
dEZpbGUuc2l6ZSgpKSB7CisgICAgICAgIERFQlVHX0xPR19FUlJPUigiVW5hYmxlIHRvIHJldHVy
biBldmVudCAtIG5vIHRlcm1pbmF0aW5nIE5VTDogJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2V2
ZW50RmlsZVBhdGgpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAg
ICArK21fb2Zmc2V0OworCisgICAgcmV0dXJuIHN0cmluZ1RvRXZlbnQoY3VycmVudCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaCBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXNvdXJj
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjk5Y2Q2MjBlNWI1ZmVkZmFjZDE4YTUzYjZmOGMzNmNiNDlkNmUxOWQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJl
L05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorCisjaW5jbHVkZSAi
TmV0d29ya0NhcHR1cmVFdmVudC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9VUkxQYXJzZXIuaD4K
KyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3Bh
Y2UgTmV0d29ya0NhcHR1cmUgeworCitjbGFzcyBSZXNvdXJjZSB7CitwdWJsaWM6CisgICAgY2xh
c3MgRXZlbnRTdHJlYW0geworICAgIHB1YmxpYzoKKyAgICAgICAgRXZlbnRTdHJlYW0oKSA9IGRl
ZmF1bHQ7CisgICAgICAgIEV2ZW50U3RyZWFtKGNvbnN0IFN0cmluZyYgZXZlbnRGaWxlUGF0aCk7
CisKKyAgICAgICAgT3B0aW9uYWxDYXB0dXJlRXZlbnQgbmV4dEV2ZW50KCk7CisKKyAgICBwcml2
YXRlOgorICAgICAgICBTdHJpbmcgbV9ldmVudEZpbGVQYXRoOworICAgICAgICBib29sIG1faGF2
ZU1hcHBlZEV2ZW50RmlsZSB7IGZhbHNlIH07CisgICAgICAgIFdlYkNvcmU6Ok1hcHBlZEZpbGVE
YXRhIG1fbWFwcGVkRXZlbnRGaWxlOworICAgICAgICBzaXplX3QgbV9vZmZzZXQgeyAwIH07Cisg
ICAgfTsKKworcHVibGljOgorICAgIFJlc291cmNlKGNvbnN0IFN0cmluZyYgZXZlbnRGaWxlUGF0
aCk7CisKKyAgICBjb25zdCBXZWJDb3JlOjpVUkwmIHVybCgpOworICAgIGNvbnN0IFdlYkNvcmU6
OlVSTCYgYmFzZVVSTCgpOworICAgIFdlYkNvcmU6OlVSTFBhcnNlcjo6VVJMRW5jb2RlZEZvcm0g
cXVlcnlQYXJhbWV0ZXJzKCk7CisgICAgRXZlbnRTdHJlYW0gZXZlbnRTdHJlYW0oKTsKKworcHJp
dmF0ZToKKyAgICBTdHJpbmcgbV9ldmVudEZpbGVQYXRoOworICAgIHN0ZDo6b3B0aW9uYWw8V2Vi
Q29yZTo6VVJMPiBtX3VybDsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlVSTD4gbV9iYXNl
VVJMOworICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6VVJMUGFyc2VyOjpVUkxFbmNvZGVkRm9y
bT4gbV9xdWVyeVBhcmFtZXRlcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FwdHVy
ZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQVBU
VVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9O
ZXR3b3JrQ2FwdHVyZVR5cGVzLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0
dXJlL05ldHdvcmtDYXB0dXJlVHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMjRlZDlhYWNkN2FmYjZhZTlm
MmNkZmE3ZmVjMjgzYzJlNmI1MTFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVR5cGVzLmgKQEAgLTAsMCArMSwx
MjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShORVRXT1JLX0NB
UFRVUkUpCisKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgeworCitjbGFzcyBGaWxlSGFuZGxlIGZp
bmFsIHsKK3B1YmxpYzoKKyAgICBGaWxlSGFuZGxlKCkgPSBkZWZhdWx0OworCisgICAgRmlsZUhh
bmRsZShXZWJDb3JlOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZUhhbmRsZSkKKyAgICAgICAgOiBt
X2ZpbGVIYW5kbGUoZmlsZUhhbmRsZSkgeyB9CisKKyAgICBGaWxlSGFuZGxlKEZpbGVIYW5kbGUm
JiBvdGhlcikKKyAgICAgICAgOiBtX2ZpbGVIYW5kbGUoc3RkOjpleGNoYW5nZShvdGhlci5tX2Zp
bGVIYW5kbGUsIFdlYkNvcmU6OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpKSB7IH0KKworICAg
IH5GaWxlSGFuZGxlKCkKKyAgICB7CisgICAgICAgIGNsb3NlRmlsZSgpOworICAgIH0KKworICAg
IEZpbGVIYW5kbGUmIG9wZXJhdG9yPShXZWJDb3JlOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZUhh
bmRsZSkKKyAgICB7CisgICAgICAgIGNsb3NlRmlsZSgpOworICAgICAgICBtX2ZpbGVIYW5kbGUg
PSBmaWxlSGFuZGxlOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgRmlsZUhh
bmRsZSYgb3BlcmF0b3I9KEZpbGVIYW5kbGUmJiBvdGhlcikKKyAgICB7CisgICAgICAgIGNsb3Nl
RmlsZSgpOworICAgICAgICBtX2ZpbGVIYW5kbGUgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmls
ZUhhbmRsZSwgV2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSk7CisgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICB9CisKKyAgICBGaWxlSGFuZGxlKGNvbnN0IEZpbGVIYW5kbGUmKSA9
IGRlbGV0ZTsKKyAgICBGaWxlSGFuZGxlJiBvcGVyYXRvcj0oY29uc3QgRmlsZUhhbmRsZSYpID0g
ZGVsZXRlOworCisgICAgb3BlcmF0b3IgV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlKCkgY29u
c3QgeyByZXR1cm4gbV9maWxlSGFuZGxlOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgp
IGNvbnN0IHsgcmV0dXJuIFdlYkNvcmU6OmlzSGFuZGxlVmFsaWQobV9maWxlSGFuZGxlKTsgfQor
CisgICAgc3RhdGljIEZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBXZWJD
b3JlOjpGaWxlT3Blbk1vZGUgbW9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBGaWxlSGFuZGxl
KFdlYkNvcmU6Om9wZW5GaWxlKHBhdGgsIG1vZGUpKTsKKyAgICB9CisKKyAgICBpbnQgcmVhZEZy
b21GaWxlKHZvaWQqIGRhdGEsIGludCBsZW5ndGgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gV2ViQ29yZTo6cmVhZEZyb21GaWxlKG1fZmlsZUhhbmRsZSwgc3RhdGljX2Nhc3Q8Y2hhcio+
KGRhdGEpLCBsZW5ndGgpOworICAgIH0KKworICAgIGludCB3cml0ZVRvRmlsZShjb25zdCB2b2lk
KiBkYXRhLCBpbnQgbGVuZ3RoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6
OndyaXRlVG9GaWxlKG1fZmlsZUhhbmRsZSwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEp
LCBsZW5ndGgpOworICAgIH0KKworICAgIHZvaWQgY2xvc2VGaWxlKCkKKyAgICB7CisgICAgICAg
IFdlYkNvcmU6OmNsb3NlRmlsZShtX2ZpbGVIYW5kbGUpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBXZWJDb3JlOjpQbGF0Zm9ybUZpbGVIYW5kbGUgbV9maWxlSGFuZGxlIHsgV2ViQ29yZTo6aW52
YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSB9OworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIC4uLiBU
eXBlcz4KK3N0cnVjdCBUeXBlSG9sZGVyIHsKKyAgICB1c2luZyBWYXJpYW50VHlwZSA9IFdURjo6
VmFyaWFudDxUeXBlcy4uLj47CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGbj4KKyAgICBzdGF0
aWMgdm9pZCBmb3JFYWNoVHlwZUltcGwoRm4gZm4pCisgICAgeworICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZuLCB0eXBlbmFtZSBUeXBlLCB0eXBlbmFtZSAuLi4gUmVzdD4KKyAgICBz
dGF0aWMgdm9pZCBmb3JFYWNoVHlwZUltcGwoRm4gZm4pCisgICAgeworICAgICAgICBpZiAoIWZu
KHN0YXRpY19jYXN0PFR5cGUqPihudWxscHRyKSkpCisgICAgICAgICAgICBmb3JFYWNoVHlwZUlt
cGw8Rm4sIFJlc3QuLi4+KGZuKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGbj4K
KyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoVHlwZShGbiBmbikKKyAgICB7CisgICAgICAgIGZvckVh
Y2hUeXBlSW1wbDxGbiwgVHlwZXMuLi4+KGZuKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjhiMzVjODE2ZGUxOWQ2OTcxMjc3N2U2YzdmN2M3M2E5ZjdlZmIwZWUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtEYXRh
VGFza1JlcGxheS5jcHAKQEAgLTAsMCArMSwyODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrUmVwbGF5LmgiCisKKyNpZiBFTkFC
TEUoTkVUV09SS19DQVBUVVJFKQorCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVFdmVudC5oIgor
I2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlTG9nZ2luZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0
dXJlUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCIKKyNpbmNs
dWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9SZXNvdXJjZVJlc3BvbnNlLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworI2RlZmlu
ZSBERUJVR19DTEFTUyBOZXR3b3JrRGF0YVRhc2tSZXBsYXkKKworbmFtZXNwYWNlIFdlYktpdCB7
CituYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
d2ViS2l0UmVsYXlEb21haW4gPSAiV2ViS2l0UmVwbGF5IjsKKworTmV0d29ya0RhdGFUYXNrUmVw
bGF5OjpOZXR3b3JrRGF0YVRhc2tSZXBsYXkoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdv
cmtEYXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBOZXR3b3JrTG9hZFBhcmFtZXRlcnMmIHBh
cmFtZXRlcnMsIFJlc291cmNlKiByZXNvdXJjZSkKKyAgICA6IE5ldHdvcmtEYXRhVGFzayhzZXNz
aW9uLCBjbGllbnQsIHBhcmFtZXRlcnMucmVxdWVzdCwgcGFyYW1ldGVycy5hbGxvd1N0b3JlZENy
ZWRlbnRpYWxzLCBwYXJhbWV0ZXJzLnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVk
aXJlY3QpCisgICAgLCBtX2N1cnJlbnRSZXF1ZXN0KG1fZmlyc3RSZXF1ZXN0KQorICAgICwgbV9y
ZXNvdXJjZShyZXNvdXJjZSkKK3sKKyAgICBERUJVR19MT0coInJlcXVlc3QgVVJMID0gJXtwdWJs
aWN9cyIsIERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworICAgIERF
QlVHX0xPRygiY2FjaGVkIFVSTCA9ICV7cHVibGljfXMiLCByZXNvdXJjZSA/IERFQlVHX1NUUihy
ZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCkpIDogIjxub3QgZm91bmQ+Iik7CisKKyAgICBtX3Nlc3Np
b24tPnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKCp0aGlzKTsKKworICAgIGlmIChyZXNvdXJjZSkK
KyAgICAgICAgbV9ldmVudFN0cmVhbSA9IHJlc291cmNlLT5ldmVudFN0cmVhbSgpOworfQorCitO
ZXR3b3JrRGF0YVRhc2tSZXBsYXk6On5OZXR3b3JrRGF0YVRhc2tSZXBsYXkoKQoreworICAgIERF
QlVHX0xPRygiVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwo
KS5zdHJpbmcoKSkpOworCisgICAgbV9zZXNzaW9uLT51bnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNr
KCp0aGlzKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnJlc3VtZSgpCit7Cisg
ICAgREVCVUdfTE9HKCJVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RSKG1fZmlyc3RSZXF1ZXN0
LnVybCgpLnN0cmluZygpKSk7CisKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5n
IHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9zdGF0ZSA9IFN0YXRlOjpSdW5uaW5nOworCisgICAgaWYgKG1fc2NoZWR1bGVkRmFpbHVyZVR5
cGUgIT0gTm9GYWlsdXJlKSB7CisgICAgICAgIEFTU0VSVChtX2ZhaWx1cmVUaW1lci5pc0FjdGl2
ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVucXVldWVFdmVudEhhbmRsZXIo
KTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnN1c3BlbmQoKQoreworICAgIERF
QlVHX0xPRygiVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwo
KS5zdHJpbmcoKSkpOworCisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBt
X3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3Rh
dGUgPSBTdGF0ZTo6U3VzcGVuZGVkOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza1JlcGxheTo6
Y2FuY2VsKCkKK3sKKyAgICBERUJVR19MT0coIiIpOworCisgICAgaWYgKG1fc3RhdGUgPT0gU3Rh
dGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q2FuY2VsaW5nOworfQorCit2b2lkIE5ldHdv
cmtEYXRhVGFza1JlcGxheTo6Y29tcGxldGUoKQoreworICAgIERFQlVHX0xPRygiVVJMID0gJXtw
dWJsaWN9cyIsIERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworCisg
ICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9zdGF0ZSA9IFN0YXRlOjpDb21wbGV0ZWQ7CisgICAgbV9yZXNvdXJjZSA9IG51bGxwdHI7
Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjppbnZhbGlkYXRlQW5kQ2FuY2VsKCkK
K3sKKyAgICBERUJVR19MT0coIlVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9maXJzdFJl
cXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKKworICAgIGNhbmNlbCgpOworICAgIGNvbXBsZXRlKCk7
Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjplbnF1ZXVlRXZlbnRIYW5kbGVyKCkK
K3sKKyAgICBERUJVR19MT0coIlVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9maXJzdFJl
cXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7CisgICAgICAgIERFQlVHX0xP
RygiZW5xdWV1ZUV2ZW50SGFuZGxlciBjYWxsYmFjayIpOworCisgICAgICAgIGlmIChtX3N0YXRl
ID09IFN0YXRlOjpTdXNwZW5kZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYg
KG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0
ZWQgfHwgIW1fY2xpZW50KSB7CisgICAgICAgICAgICBjb21wbGV0ZSgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX3Jlc291cmNlKSB7CisgICAgICAg
ICAgICBERUJVR19MT0dfRVJST1IoIkVycm9yIGxvYWRpbmcgcmVzb3VyY2U6IGNvdWxkIG5vdCBm
aW5kIGNhY2hlZCByZXNvdXJjZSwgVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2N1cnJl
bnRSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisgICAgICAgICAgICBkaWRGaW5pc2goRXJyb3I6
Ok5vdEZvdW5kRXJyb3IpOyAvLyBUT0RPOiBUdXJuIHRoaXMgaW50byBhIDQwND8KKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UobV9jdXJyZW50UmVxdWVzdC5odHRwTWV0aG9kKCksICJnZXQiKSkgeworICAg
ICAgICAgICAgREVCVUdfTE9HX0VSUk9SKCJFcnJvciBsb2FkaW5nIHJlc291cmNlOiB1bnN1cHBv
cnRlZCBtZXRob2QgKCV7cHVibGljfXMpLCBVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RSKG1f
Y3VycmVudFJlcXVlc3QuaHR0cE1ldGhvZCgpKSwgREVCVUdfU1RSKG1fY3VycmVudFJlcXVlc3Qu
dXJsKCkuc3RyaW5nKCkpKTsKKyAgICAgICAgICAgIGRpZEZpbmlzaChFcnJvcjo6TWV0aG9kTm90
QWxsb3dlZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRv
IGV2ZW50ID0gbV9ldmVudFN0cmVhbS5uZXh0RXZlbnQoKTsKKyAgICAgICAgaWYgKCFldmVudCkg
eworICAgICAgICAgICAgREVCVUdfTE9HX0VSUk9SKCJFcnJvciBsb2FkaW5nIHJlc291cmNlOiBu
ZXh0RXZlbnQgcmV0dXJuIG51bGwsIFVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9jdXJy
ZW50UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworICAgICAgICAgICAgZGlkRmluaXNoKEVycm9y
OjpOb3RGb3VuZEVycm9yKTsgLy8gVE9ETzogVHVybiB0aGlzIGludG8gYSA0MDQ/CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBhdXRvIHZpc2l0b3IgPSBX
VEY6Om1ha2VWaXNpdG9yKAorICAgICAgICAgICAgW3RoaXNdKGNvbnN0IFJlcXVlc3RTZW50RXZl
bnQmIGV2ZW50KSB7CisgICAgICAgICAgICAgICAgcmVwbGF5UmVxdWVzdFNlbnQoZXZlbnQpOwor
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFt0aGlzXShjb25zdCBSZXNwb25zZVJlY2VpdmVk
RXZlbnQmIGV2ZW50KSB7CisgICAgICAgICAgICAgICAgcmVwbGF5UmVzcG9uc2VSZWNlaXZlZChl
dmVudCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgW3RoaXNdKGNvbnN0IFJlZGlyZWN0
UmVjZWl2ZWRFdmVudCYgZXZlbnQpIHsKKyAgICAgICAgICAgICAgICByZXBsYXlSZWRpcmVjdFJl
Y2VpdmVkKGV2ZW50KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbdGhpc10oY29uc3Qg
UmVkaXJlY3RTZW50RXZlbnQmIGV2ZW50KSB7CisgICAgICAgICAgICAgICAgcmVwbGF5UmVkaXJl
Y3RTZW50KGV2ZW50KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbdGhpc10oY29uc3Qg
RGF0YVJlY2VpdmVkRXZlbnQmIGV2ZW50KSB7CisgICAgICAgICAgICAgICAgcmVwbGF5RGF0YVJl
Y2VpdmVkKGV2ZW50KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbdGhpc10oY29uc3Qg
RmluaXNoZWRFdmVudCYgZXZlbnQpIHsKKyAgICAgICAgICAgICAgICByZXBsYXlGaW5pc2hlZChl
dmVudCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICBXVEY6OnZpc2l0KHZpc2l0b3IsICpl
dmVudCk7CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjpyZXBsYXlS
ZXF1ZXN0U2VudChjb25zdCBSZXF1ZXN0U2VudEV2ZW50JiBldmVudCkKK3sKKyAgICBERUJVR19M
T0coIlVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9maXJzdFJlcXVlc3QudXJsKCkuc3Ry
aW5nKCkpKTsKKworICAgIGVucXVldWVFdmVudEhhbmRsZXIoKTsKK30KKwordm9pZCBOZXR3b3Jr
RGF0YVRhc2tSZXBsYXk6OnJlcGxheVJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgUmVzcG9uc2VSZWNl
aXZlZEV2ZW50JiBldmVudCkKK3sKKyAgICBERUJVR19MT0coIlVSTCA9ICV7cHVibGljfXMiLCBE
RUJVR19TVFIobV9maXJzdFJlcXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKKworICAgIFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UoZXZlbnQucmVzcG9uc2UpOworICAgIGRpZFJlY2Vp
dmVSZXNwb25zZShXVEZNb3ZlKHJlc3BvbnNlKSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNr
UmVwbGF5OjpyZXBsYXlSZWRpcmVjdFJlY2VpdmVkKGNvbnN0IFJlZGlyZWN0UmVjZWl2ZWRFdmVu
dCYgZXZlbnQpCit7CisgICAgREVCVUdfTE9HKCJVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RS
KG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisKKyAgICBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlIHJlY2VpdmVkUmVzcG9uc2UgPSBldmVudC5yZXNwb25zZTsKKyAgICBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QgcmVjZWl2ZWRSZXF1ZXN0ID0gZXZlbnQucmVxdWVzdDsKKworICAg
IEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQtPndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0
aW9uKFdURk1vdmUocmVjZWl2ZWRSZXNwb25zZSksIFdURk1vdmUocmVjZWl2ZWRSZXF1ZXN0KSwg
W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYgdXBkYXRlZFJlcXVlc3QpIHsKKyAgICAgICAgREVCVUdfTE9HKCJyZXBs
YXlSZWRpcmVjdFJlY2VpdmVkIGNhbGxiYWNrOiBVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RS
KG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisKKyAgICAgICAgbV9jdXJyZW50UmVx
dWVzdCA9IHVwZGF0ZWRSZXF1ZXN0OworICAgICAgICBlbnF1ZXVlRXZlbnRIYW5kbGVyKCk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjpyZXBsYXlSZWRpcmVjdFNl
bnQoY29uc3QgUmVkaXJlY3RTZW50RXZlbnQmIGV2ZW50KQoreworICAgIERFQlVHX0xPRygiVVJM
ID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkp
OworCisgICAgZW5xdWV1ZUV2ZW50SGFuZGxlcigpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFz
a1JlcGxheTo6cmVwbGF5RGF0YVJlY2VpdmVkKGNvbnN0IERhdGFSZWNlaXZlZEV2ZW50JiBldmVu
dCkKK3sKKyAgICBERUJVR19MT0coIlVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9maXJz
dFJlcXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKKworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAg
bV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKGV2ZW50LmRhdGEuY29weVJlZigpKTsKKworICAgIGVu
cXVldWVFdmVudEhhbmRsZXIoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnJl
cGxheUZpbmlzaGVkKGNvbnN0IEZpbmlzaGVkRXZlbnQmIGV2ZW50KQoreworICAgIERFQlVHX0xP
RygiVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJp
bmcoKSkpOworCisgICAgZGlkRmluaXNoKGV2ZW50LmVycm9yKTsKK30KKwordm9pZCBOZXR3b3Jr
RGF0YVRhc2tSZXBsYXk6OmRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJiYgcmVzcG9uc2UpCit7CisgICAgREVCVUdfTE9HKCJVUkwgPSAle3B1YmxpY31zIiwgREVC
VUdfU1RSKG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisKKyAgICBBU1NFUlQobV9j
bGllbnQpOworICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2VOZXR3b3JrU2Vzc2lvbihX
VEZNb3ZlKHJlc3BvbnNlKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0o
V2ViQ29yZTo6UG9saWN5QWN0aW9uIHBvbGljeUFjdGlvbikgeworICAgICAgICBERUJVR19MT0co
ImRpZFJlY2VpdmVSZXNwb25zZSBjYWxsYmFjayAoJXUpIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHBvbGljeUFjdGlvbikpOworCisgICAgICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxp
bmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKSB7CisgICAgICAgICAgICBjb21wbGV0
ZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChw
b2xpY3lBY3Rpb24pIHsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpQb2xpY3lBY3Rpb246OlBvbGlj
eVVzZToKKyAgICAgICAgICAgIGVucXVldWVFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFdlYkNvcmU6OlBvbGljeUFjdGlvbjo6UG9saWN5SWdub3JlOgor
ICAgICAgICAgICAgY29tcGxldGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFdlYkNvcmU6OlBvbGljeUFjdGlvbjo6UG9saWN5RG93bmxvYWQ6CisgICAgICAgICAgICBERUJV
R19MT0dfRVJST1IoIldlYkNvcmU6OlBvbGljeUFjdGlvbjo6UG9saWN5RG93bmxvYWQiKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrUmVwbGF5OjpkaWRGaW5pc2goKQoreworICAgIGRpZEZpbmlzaCh7IH0pOworfQorCit2
b2lkIE5ldHdvcmtEYXRhVGFza1JlcGxheTo6ZGlkRmluaXNoKEVycm9yIGVycm9yQ29kZSkKK3sK
KyAgICBkaWRGaW5pc2goV2ViQ29yZTo6UmVzb3VyY2VFcnJvcih3ZWJLaXRSZWxheURvbWFpbiwg
c3RhdGljX2Nhc3Q8aW50PihlcnJvckNvZGUpLCBtX2ZpcnN0UmVxdWVzdC51cmwoKSwgU3RyaW5n
KCkpKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmRpZEZpbmlzaChjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBERUJVR19MT0coIiglZCkiLCBl
cnJvci5lcnJvckNvZGUoKSk7CisKKyAgICBjb21wbGV0ZSgpOworCisgICAgQVNTRVJUKG1fY2xp
ZW50KTsKKyAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoZXJyb3IpOworfQorCit9
IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuaCBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0RhdGFUYXNrUmVwbGF5LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjNmMTc3MTljY2QwZTk5NWQwYjIxM2I3NDUyOTQ2NjkzMzhlYzA1ZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0
d29ya0RhdGFUYXNrUmVwbGF5LmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRlICJOZXR3
b3JrQ2FwdHVyZVJlc291cmNlLmgiCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Y2xhc3MgUmVzb3VyY2VFcnJvcjsKK2NsYXNzIFJlc291cmNlUmVzcG9uc2U7Cit9CisKK25hbWVz
cGFjZSBXZWJLaXQgeworY2xhc3MgTmV0d29ya0RhdGFUYXNrQ2xpZW50OworY2xhc3MgTmV0d29y
a0xvYWRQYXJhbWV0ZXJzOworY2xhc3MgTmV0d29ya1Nlc3Npb247Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlIHsKKworc3RydWN0IFJlcXVlc3RTZW50
RXZlbnQ7CitzdHJ1Y3QgUmVzcG9uc2VSZWNlaXZlZEV2ZW50Oworc3RydWN0IFJlZGlyZWN0UmVj
ZWl2ZWRFdmVudDsKK3N0cnVjdCBSZWRpcmVjdFNlbnRFdmVudDsKK3N0cnVjdCBEYXRhUmVjZWl2
ZWRFdmVudDsKK3N0cnVjdCBGaW5pc2hlZEV2ZW50OworCitjbGFzcyBOZXR3b3JrRGF0YVRhc2tS
ZXBsYXkgOiBwdWJsaWMgTmV0d29ya0RhdGFUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PE5ldHdvcmtEYXRhVGFza1JlcGxheT4gY3JlYXRlKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBO
ZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNsaWVudCwgY29uc3QgTmV0d29ya0xvYWRQYXJhbWV0ZXJz
JiBwYXJhbWV0ZXJzLCBSZXNvdXJjZSogcmVzb3VyY2UpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBOZXR3b3JrRGF0YVRhc2tSZXBsYXkoc2Vzc2lvbiwgY2xpZW50LCBwYXJh
bWV0ZXJzLCByZXNvdXJjZSkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBOZXR3b3JrRGF0YVRh
c2tSZXBsYXkoTmV0d29ya1Nlc3Npb24mLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmLCBjb25zdCBO
ZXR3b3JrTG9hZFBhcmFtZXRlcnMmLCBSZXNvdXJjZSopOworICAgIH5OZXR3b3JrRGF0YVRhc2tS
ZXBsYXkoKSBvdmVycmlkZTsKKworICAgIHZvaWQgcmVzdW1lKCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBzdXNwZW5kKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjYW5jZWwoKSBvdmVycmlkZTsKKyAgICB2
b2lkIGNvbXBsZXRlKCk7CisgICAgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCkgb3ZlcnJpZGU7
CisKKyAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc3RhdGU7IH0K
KworICAgIHZvaWQgZW5xdWV1ZUV2ZW50SGFuZGxlcigpOworCitwdWJsaWM6CisgICAgdm9pZCBy
ZXBsYXlSZXF1ZXN0U2VudChjb25zdCBSZXF1ZXN0U2VudEV2ZW50Jik7CisgICAgdm9pZCByZXBs
YXlSZXNwb25zZVJlY2VpdmVkKGNvbnN0IFJlc3BvbnNlUmVjZWl2ZWRFdmVudCYpOworICAgIHZv
aWQgcmVwbGF5UmVkaXJlY3RSZWNlaXZlZChjb25zdCBSZWRpcmVjdFJlY2VpdmVkRXZlbnQmKTsK
KyAgICB2b2lkIHJlcGxheVJlZGlyZWN0U2VudChjb25zdCBSZWRpcmVjdFNlbnRFdmVudCYpOwor
ICAgIHZvaWQgcmVwbGF5RGF0YVJlY2VpdmVkKGNvbnN0IERhdGFSZWNlaXZlZEV2ZW50Jik7Cisg
ICAgdm9pZCByZXBsYXlGaW5pc2hlZChjb25zdCBGaW5pc2hlZEV2ZW50Jik7CisKK3ByaXZhdGU6
CisgICAgZW51bSBjbGFzcyBFcnJvciB7CisgICAgICAgIE5vRXJyb3IgPSAwLAorICAgICAgICBO
b3RGb3VuZEVycm9yID0gMSwKKyAgICAgICAgTWV0aG9kTm90QWxsb3dlZCA9IDUKKyAgICB9Owor
CisgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYm
KTsKKyAgICB2b2lkIGRpZEZpbmlzaCgpOworICAgIHZvaWQgZGlkRmluaXNoKEVycm9yKTsKKyAg
ICB2b2lkIGRpZEZpbmlzaChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CisKK3ByaXZh
dGU6CisgICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpTdXNwZW5kZWQgfTsKKyAgICBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsKKyAgICBSZXNvdXJjZSogbV9yZXNv
dXJjZTsKKyAgICBSZXNvdXJjZTo6RXZlbnRTdHJlYW0gbV9ldmVudFN0cmVhbTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL2pzb24uaHBwIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FwdHVyZS9qc29uLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZjI4YzZlZjQxMTZiMzdmZWQy
NjhhZWRhZTlmYzEzYjRlNTg3Y2M1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9qc29uLmhwcApAQCAtMCwwICsxLDEwNzk0IEBACisvKgor
ICAgIF9fIF9fX19fIF9fX19fIF9fX19fCisgX198ICB8ICAgX198ICAgICB8ICAgfCB8ICBKU09O
IGZvciBNb2Rlcm4gQysrCit8ICB8ICB8X18gICB8ICB8ICB8IHwgfCB8ICB2ZXJzaW9uIDIuMC43
Cit8X19fX198X19fX198X19fX198X3xfX198ICBodHRwczovL2dpdGh1Yi5jb20vbmxvaG1hbm4v
anNvbgorCitMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgPGh0dHA6Ly9vcGVuc291cmNl
Lm9yZy9saWNlbnNlcy9NSVQ+LgorQ29weXJpZ2h0IChjKSAyMDEzLTIwMTYgTmllbHMgTG9obWFu
biA8aHR0cDovL25sb2htYW5uLm1lPi4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgIGdyYW50ZWQs
IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlz
IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkICBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3
YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSAgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j
bHVkaW5nIHdpdGhvdXQgIGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gIHVzZSwgY29weSwgIG1v
ZGlmeSwgbWVyZ2UsICBwdWJsaXNoLCBkaXN0cmlidXRlLCAgc3VibGljZW5zZSwgYW5kL29yICBz
ZWxsCitjb3BpZXMgIG9mICB0aGUgU29mdHdhcmUsICBhbmQgIHRvICBwZXJtaXQgcGVyc29ucyAg
dG8gIHdob20gIHRoZSBTb2Z0d2FyZSAgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0
byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl
IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAorY29w
aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRX
QVJFICBJUyBQUk9WSURFRCAiQVMgIElTIiwgV0lUSE9VVCBXQVJSQU5UWSAgT0YgQU5ZIEtJTkQs
ICBFWFBSRVNTIE9SCitJTVBMSUVELCAgSU5DTFVESU5HIEJVVCAgTk9UICBMSU1JVEVEIFRPICBU
SEUgIFdBUlJBTlRJRVMgT0YgIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SICBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBTkQgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgIFNIQUxMIFRI
RQorQVVUSE9SUyAgT1IgQ09QWVJJR0hUICBIT0xERVJTICBCRSAgTElBQkxFIEZPUiAgQU5ZICBD
TEFJTSwgIERBTUFHRVMgT1IgIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O
IE9GICBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBP
UiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFICBPUiBUSEUgVVNFIE9SIE9USEVSIERF
QUxJTkdTIElOIFRIRQorU09GVFdBUkUuCisqLworCisvKgorICogVGhpcyBmaWxlIHdhcyB0YWtl
biBmcm9tIDxodHRwczovL2dpdGh1Yi5jb20vbmxvaG1hbm4vanNvbj4gYXQgcmV2aXNpb24KKyAq
IGU3MTc0OTIwMTk2ODdiZjBlZGYyYjg4NGI1MWJmMzdkYjQ4MzFhNmYgYW5kIG1vZGlmaWVkIGFz
IGZvbGxvd3MgZm9yCisgKiBpbmNsdXNpb24gaW4gV2ViS2l0OgorICoKKyAqICAqIEV4Y2VwdGlv
bnMgYXJlIGRpc2FibGVkIGluIFdlYktpdCwgc28gYWxsICd0aHJvdycgc3RhdGVtZW50cyB3ZXJl
CisgKiAgICBjb252ZXJ0ZWQgaW50byBhIGNhbGwgdG8gYSBUaHJvdyBmdW5jdGlvbi4gVGhpcyBm
dW5jdGlvbiBjYW4gYmUgZW5hYmxlZAorICogICAgdG8gaW52b2tlICd0aHJvdycgYXMgYmVmb3Jl
LCBidXQgYnkgZGVmYXVsdCBhc3NlcnRzIGFuZCBjcmFzaGVzLgorICogICogdHJ5L2NhdGNoIHN0
YXRlbWVudHMgYXJlIGFsc28gZGlzYWxsb3dlZCwgc28gdGhlc2Ugd2VyZSBjb252ZXJ0ZWQgaW50
bworICogICAgc2ltcGxlIGlmL3RoZW4gY2hlY2tzIHdoZXJlIHBvc3NpYmxlLiBXaGVyZSBub3Qg
cG9zc2libGUsIHRoZSB0cnkvY2F0Y2gKKyAqICAgIHN0YXRlbWVudHMgd2VyZSBzaW1wbHkgcmVt
b3ZlZCB3aXRoIHRoZSBleHBlY3RhdGlvbiB0aGF0IG5vIGNvZGUgcGF0aHMKKyAqICAgIHdvdWxk
IHRyaWdnZXIgdGhlIGFudGljaXBhdGVkIGV4Y2VwdGlvbnMuCisgKiAgKiBGb3IgZWZmaWNpZW5j
eSwgYSBiYXNpY19qc29uIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgYQorICogICAgc3RyaW5nX3Q6
OnZhbHVlX3R5cGUqIGFuZCBhIGNvdW50IHdhcyBhZGRlZC4KKyAqLworCisjaWZuZGVmIE5MT0hN
QU5OX0pTT05fSFBQCisjZGVmaW5lIE5MT0hNQU5OX0pTT05fSFBQCisKKyNpbmNsdWRlIDxhbGdv
cml0aG0+IC8vIGFsbF9vZiwgZm9yX2VhY2gsIHRyYW5zZm9ybQorI2luY2x1ZGUgPGFycmF5PiAv
LyBhcnJheQorI2luY2x1ZGUgPGNhc3NlcnQ+IC8vIGFzc2VydAorI2luY2x1ZGUgPGNjdHlwZT4g
Ly8gaXNkaWdpdAorI2luY2x1ZGUgPGNpc282NDY+IC8vIGFuZCwgbm90LCBvcgorI2luY2x1ZGUg
PGNtYXRoPiAvLyBpc2Zpbml0ZSwgc2lnbmJpdAorI2luY2x1ZGUgPGNzdGRkZWY+IC8vIG51bGxw
dHJfdCwgcHRyZGlmZl90LCBzaXplX3QKKyNpbmNsdWRlIDxjc3RkaW50PiAvLyBpbnQ2NF90LCB1
aW50NjRfdAorI2luY2x1ZGUgPGNzdGRsaWI+IC8vIHN0cnRvZCwgc3RydG9mLCBzdHJ0b2xkLCBz
dHJ0b3VsCisjaW5jbHVkZSA8Y3N0cmluZz4gLy8gc3RybGVuCisjaW5jbHVkZSA8ZnVuY3Rpb25h
bD4gLy8gZnVuY3Rpb24sIGhhc2gsIGxlc3MKKyNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PiAv
LyBpbml0aWFsaXplcl9saXN0CisjaW5jbHVkZSA8aW9tYW5pcD4gLy8gc2V0dworI2luY2x1ZGUg
PGlvc3RyZWFtPiAvLyBpc3RyZWFtLCBvc3RyZWFtCisjaW5jbHVkZSA8aXRlcmF0b3I+IC8vIGFk
dmFuY2UsIGJlZ2luLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgZGlzdGFuY2UsIGVuZCwg
aW5zZXJ0ZXIsIGl0ZXJhdG9yLCBpdGVyYXRvcl90cmFpdHMsIG5leHQsIHJhbmRvbV9hY2Nlc3Nf
aXRlcmF0b3JfdGFnLCByZXZlcnNlX2l0ZXJhdG9yCisjaW5jbHVkZSA8bGltaXRzPiAvLyBudW1l
cmljX2xpbWl0cworI2luY2x1ZGUgPGxvY2FsZT4gLy8gbG9jYWxlCisjaW5jbHVkZSA8bWFwPiAv
LyBtYXAKKyNpbmNsdWRlIDxtZW1vcnk+IC8vIGFkZHJlc3NvZiwgYWxsb2NhdG9yLCBhbGxvY2F0
b3JfdHJhaXRzLCB1bmlxdWVfcHRyCisjaW5jbHVkZSA8bnVtZXJpYz4gLy8gYWNjdW11bGF0ZQor
I2luY2x1ZGUgPHNzdHJlYW0+IC8vIHN0cmluZ3N0cmVhbQorI2luY2x1ZGUgPHN0ZGV4Y2VwdD4g
Ly8gZG9tYWluX2Vycm9yLCBpbnZhbGlkX2FyZ3VtZW50LCBvdXRfb2ZfcmFuZ2UKKyNpbmNsdWRl
IDxzdHJpbmc+IC8vIGdldGxpbmUsIHN0b2ksIHN0cmluZywgdG9fc3RyaW5nCisjaW5jbHVkZSA8
dHlwZV90cmFpdHM+IC8vIGFkZF9wb2ludGVyLCBlbmFibGVfaWYsIGlzX2FyaXRobWV0aWMsIGlz
X2Jhc2Vfb2YsIGlzX2NvbnN0LCBpc19jb25zdHJ1Y3RpYmxlLCBpc19jb252ZXJ0aWJsZSwgaXNf
ZmxvYXRpbmdfcG9pbnQsIGlzX2ludGVncmFsLCBpc19ub3Rocm93X21vdmVfYXNzaWduYWJsZSwg
c3RkOjppc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZSwgc3RkOjppc19wb2ludGVyLCBzdGQ6
OmlzX3JlZmVyZW5jZSwgc3RkOjppc19zYW1lLCByZW1vdmVfY29uc3QsIHJlbW92ZV9wb2ludGVy
LCByZW1vdmVfcmVmZXJlbmNlCisjaW5jbHVkZSA8dXRpbGl0eT4gLy8gZGVjbHZhbCwgZm9yd2Fy
ZCwgbWFrZV9wYWlyLCBtb3ZlLCBwYWlyLCBzd2FwCisjaW5jbHVkZSA8dmVjdG9yPiAvLyB2ZWN0
b3IKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+IC8vIEFTU0VSVAorI2luY2x1ZGUgPHd0
Zi9Db21waWxlci5oPiAvLyBOT19SRVRVUk4KKworLy8gZXhjbHVkZSB1bnN1cHBvcnRlZCBjb21w
aWxlcnMKKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKyAgICAjZGVmaW5lIENMQU5HX1ZFUlNJT04g
KF9fY2xhbmdfbWFqb3JfXyAqIDEwMDAwICsgX19jbGFuZ19taW5vcl9fICogMTAwICsgX19jbGFu
Z19wYXRjaGxldmVsX18pCisgICAgI2lmIENMQU5HX1ZFUlNJT04gPCAzMDQwMAorICAgICAgICAj
ZXJyb3IgInVuc3VwcG9ydGVkIENsYW5nIHZlcnNpb24gLSBzZWUgaHR0cHM6Ly9naXRodWIuY29t
L25sb2htYW5uL2pzb24jc3VwcG9ydGVkLWNvbXBpbGVycyIKKyAgICAjZW5kaWYKKyNlbGlmIGRl
ZmluZWQoX19HTlVDX18pCisgICAgI2RlZmluZSBHQ0NfVkVSU0lPTiAoX19HTlVDX18gKiAxMDAw
MCArIF9fR05VQ19NSU5PUl9fICogMTAwICsgX19HTlVDX1BBVENITEVWRUxfXykKKyAgICAjaWYg
R0NDX1ZFUlNJT04gPCA0MDkwMAorICAgICAgICAjZXJyb3IgInVuc3VwcG9ydGVkIEdDQyB2ZXJz
aW9uIC0gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ubG9obWFubi9qc29uI3N1cHBvcnRlZC1jb21w
aWxlcnMiCisgICAgI2VuZGlmCisjZW5kaWYKKworLy8gZGlzYWJsZSBmbG9hdC1lcXVhbCB3YXJu
aW5ncyBvbiBHQ0MvY2xhbmcKKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykgfHwgZGVmaW5lZChfX0dO
VUNfXykgfHwgZGVmaW5lZChfX0dOVUdfXykKKyAgICAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1
c2gKKyAgICAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZmxvYXQtZXF1YWwiCisj
ZW5kaWYKKworLy8gYWxsb3cgZm9yIHBvcnRhYmxlIGRlcHJlY2F0aW9uIHdhcm5pbmdzCisjaWYg
ZGVmaW5lZChfX2NsYW5nX18pIHx8IGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19HTlVH
X18pCisgICAgI2RlZmluZSBKU09OX0RFUFJFQ0FURUQgX19hdHRyaWJ1dGVfXygoZGVwcmVjYXRl
ZCkpCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorICAgICNkZWZpbmUgSlNPTl9ERVBSRUNBVEVE
IF9fZGVjbHNwZWMoZGVwcmVjYXRlZCkKKyNlbHNlCisgICAgI2RlZmluZSBKU09OX0RFUFJFQ0FU
RUQKKyNlbmRpZgorCisvKiEKK0BicmllZiBuYW1lc3BhY2UgZm9yIE5pZWxzIExvaG1hbm4KK0Bz
ZWUgaHR0cHM6Ly9naXRodWIuY29tL25sb2htYW5uCitAc2luY2UgdmVyc2lvbiAxLjAuMAorKi8K
K25hbWVzcGFjZSBubG9obWFubgoreworCisKKy8qIQorQGJyaWVmIHVubmFtZWQgbmFtZXNwYWNl
IHdpdGggaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucworQHNpbmNlIHZlcnNpb24gMS4wLjAKKyov
CituYW1lc3BhY2UKK3sKKy8qIQorQGJyaWVmIEhlbHBlciB0byBkZXRlcm1pbmUgd2hldGhlciB0
aGVyZSdzIGEga2V5X3R5cGUgZm9yIFQuCisKK1RodXMgaGVscGVyIGlzIHVzZWQgdG8gdGVsbCBh
c3NvY2lhdGl2ZSBjb250YWluZXJzIGFwYXJ0IGZyb20gb3RoZXIgY29udGFpbmVycworc3VjaCBh
cyBzZXF1ZW5jZSBjb250YWluZXJzLiBGb3IgaW5zdGFuY2UsIGBzdGQ6Om1hcGAgcGFzc2VzIHRo
ZSB0ZXN0IGFzIGl0Citjb250YWlucyBhIGBtYXBwZWRfdHlwZWAsIHdoZXJlYXMgYHN0ZDo6dmVj
dG9yYCBmYWlscyB0aGUgdGVzdC4KKworQHNhIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzc3
Mjg3MjgvMjY2Mzc4CitAc2luY2UgdmVyc2lvbiAxLjAuMCwgb3ZlcndvcmtlZCBpbiB2ZXJzaW9u
IDIuMC42CisqLwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBoYXNfbWFwcGVkX3R5cGUK
K3sKKyAgcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgPSB0eXBl
bmFtZSBVOjptYXBwZWRfdHlwZT4KKyAgICBzdGF0aWMgaW50IGRldGVjdChVJiYpOworCisgICAg
c3RhdGljIHZvaWQgZGV0ZWN0KC4uLik7CisgIHB1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgdmFsdWUgPQorICAgICAgICBzdGQ6OmlzX2ludGVncmFsPGRlY2x0eXBlKGRldGVjdChz
dGQ6OmRlY2x2YWw8VD4oKSkpPjo6dmFsdWU7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgLi4uIFR5cGVzPgorTk9fUkVUVVJOIHZvaWQgVGhyb3coVHlwZXMgLi4uIGFyZ3Mp
Cit7CisjaWYgMAorICAgIHRocm93IFQoc3RkOjpmb3J3YXJkPFR5cGVzPihhcmdzKS4uLik7Cisj
ZWxzZQorICAgIEFTU0VSVChmYWxzZSk7CisgICAgV1RGQ3Jhc2goKTsKKyNlbmRpZgorfQorfQor
CisvKiEKK0BicmllZiBhIGNsYXNzIHRvIHN0b3JlIEpTT04gdmFsdWVzCisKK0B0cGFyYW0gT2Jq
ZWN0VHlwZSB0eXBlIGZvciBKU09OIG9iamVjdHMgKGBzdGQ6Om1hcGAgYnkgZGVmYXVsdDsgd2ls
bCBiZSB1c2VkCitpbiBAcmVmIG9iamVjdF90KQorQHRwYXJhbSBBcnJheVR5cGUgdHlwZSBmb3Ig
SlNPTiBhcnJheXMgKGBzdGQ6OnZlY3RvcmAgYnkgZGVmYXVsdDsgd2lsbCBiZSB1c2VkCitpbiBA
cmVmIGFycmF5X3QpCitAdHBhcmFtIFN0cmluZ1R5cGUgdHlwZSBmb3IgSlNPTiBzdHJpbmdzIGFu
ZCBvYmplY3Qga2V5cyAoYHN0ZDo6c3RyaW5nYCBieQorZGVmYXVsdDsgd2lsbCBiZSB1c2VkIGlu
IEByZWYgc3RyaW5nX3QpCitAdHBhcmFtIEJvb2xlYW5UeXBlIHR5cGUgZm9yIEpTT04gYm9vbGVh
bnMgKGBib29sYCBieSBkZWZhdWx0OyB3aWxsIGJlIHVzZWQKK2luIEByZWYgYm9vbGVhbl90KQor
QHRwYXJhbSBOdW1iZXJJbnRlZ2VyVHlwZSB0eXBlIGZvciBKU09OIGludGVnZXIgbnVtYmVycyAo
YGludDY0X3RgIGJ5CitkZWZhdWx0OyB3aWxsIGJlIHVzZWQgaW4gQHJlZiBudW1iZXJfaW50ZWdl
cl90KQorQHRwYXJhbSBOdW1iZXJVbnNpZ25lZFR5cGUgdHlwZSBmb3IgSlNPTiB1bnNpZ25lZCBp
bnRlZ2VyIG51bWJlcnMgKEBjCitgdWludDY0X3RgIGJ5IGRlZmF1bHQ7IHdpbGwgYmUgdXNlZCBp
biBAcmVmIG51bWJlcl91bnNpZ25lZF90KQorQHRwYXJhbSBOdW1iZXJGbG9hdFR5cGUgdHlwZSBm
b3IgSlNPTiBmbG9hdGluZy1wb2ludCBudW1iZXJzIChgZG91YmxlYCBieQorZGVmYXVsdDsgd2ls
bCBiZSB1c2VkIGluIEByZWYgbnVtYmVyX2Zsb2F0X3QpCitAdHBhcmFtIEFsbG9jYXRvclR5cGUg
dHlwZSBvZiB0aGUgYWxsb2NhdG9yIHRvIHVzZSAoYHN0ZDo6YWxsb2NhdG9yYCBieQorZGVmYXVs
dCkKKworQHJlcXVpcmVtZW50IFRoZSBjbGFzcyBzYXRpc2ZpZXMgdGhlIGZvbGxvd2luZyBjb25j
ZXB0IHJlcXVpcmVtZW50czoKKy0gQmFzaWMKKyAtIFtEZWZhdWx0Q29uc3RydWN0aWJsZV0oaHR0
cDovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29uY2VwdC9EZWZhdWx0Q29uc3RydWN0aWJs
ZSk6CisgICBKU09OIHZhbHVlcyBjYW4gYmUgZGVmYXVsdCBjb25zdHJ1Y3RlZC4gVGhlIHJlc3Vs
dCB3aWxsIGJlIGEgSlNPTiBudWxsIHZhbHVlLgorIC0gW01vdmVDb25zdHJ1Y3RpYmxlXShodHRw
Oi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L01vdmVDb25zdHJ1Y3RpYmxlKToK
KyAgIEEgSlNPTiB2YWx1ZSBjYW4gYmUgY29uc3RydWN0ZWQgZnJvbSBhbiBydmFsdWUgYXJndW1l
bnQuCisgLSBbQ29weUNvbnN0cnVjdGlibGVdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cv
Y3BwL2NvbmNlcHQvQ29weUNvbnN0cnVjdGlibGUpOgorICAgQSBKU09OIHZhbHVlIGNhbiBiZSBj
b3B5LWNvbnN0cnVjdGVkIGZyb20gYW4gbHZhbHVlIGV4cHJlc3Npb24uCisgLSBbTW92ZUFzc2ln
bmFibGVdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNlcHQvTW92ZUFzc2ln
bmFibGUpOgorICAgQSBKU09OIHZhbHVlIHZhbiBiZSBhc3NpZ25lZCBmcm9tIGFuIHJ2YWx1ZSBh
cmd1bWVudC4KKyAtIFtDb3B5QXNzaWduYWJsZV0oaHR0cDovL2VuLmNwcHJlZmVyZW5jZS5jb20v
dy9jcHAvY29uY2VwdC9Db3B5QXNzaWduYWJsZSk6CisgICBBIEpTT04gdmFsdWUgY2FuIGJlIGNv
cHktYXNzaWduZWQgZnJvbSBhbiBsdmFsdWUgZXhwcmVzc2lvbi4KKyAtIFtEZXN0cnVjdGlibGVd
KGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNlcHQvRGVzdHJ1Y3RpYmxlKToK
KyAgIEpTT04gdmFsdWVzIGNhbiBiZSBkZXN0cnVjdGVkLgorLSBMYXlvdXQKKyAtIFtTdGFuZGFy
ZExheW91dFR5cGVdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNlcHQvU3Rh
bmRhcmRMYXlvdXRUeXBlKToKKyAgIEpTT04gdmFsdWVzIGhhdmUKKyAgIFtzdGFuZGFyZCBsYXlv
dXRdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2xhbmd1YWdlL2RhdGFfbWVtYmVy
cyNTdGFuZGFyZF9sYXlvdXQpOgorICAgQWxsIG5vbi1zdGF0aWMgZGF0YSBtZW1iZXJzIGFyZSBw
cml2YXRlIGFuZCBzdGFuZGFyZCBsYXlvdXQgdHlwZXMsIHRoZSBjbGFzcworICAgaGFzIG5vIHZp
cnR1YWwgZnVuY3Rpb25zIG9yICh2aXJ0dWFsKSBiYXNlIGNsYXNzZXMuCistIExpYnJhcnktd2lk
ZQorIC0gW0VxdWFsaXR5Q29tcGFyYWJsZV0oaHR0cDovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9j
cHAvY29uY2VwdC9FcXVhbGl0eUNvbXBhcmFibGUpOgorICAgSlNPTiB2YWx1ZXMgY2FuIGJlIGNv
bXBhcmVkIHdpdGggYD09YCwgc2VlIEByZWYKKyAgIG9wZXJhdG9yPT0oY29uc3RfcmVmZXJlbmNl
LGNvbnN0X3JlZmVyZW5jZSkuCisgLSBbTGVzc1RoYW5Db21wYXJhYmxlXShodHRwOi8vZW4uY3Bw
cmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L0xlc3NUaGFuQ29tcGFyYWJsZSk6CisgICBKU09O
IHZhbHVlcyBjYW4gYmUgY29tcGFyZWQgd2l0aCBgPGAsIHNlZSBAcmVmCisgICBvcGVyYXRvcjwo
Y29uc3RfcmVmZXJlbmNlLGNvbnN0X3JlZmVyZW5jZSkuCisgLSBbU3dhcHBhYmxlXShodHRwOi8v
ZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L1N3YXBwYWJsZSk6CisgICBBbnkgSlNP
TiBsdmFsdWUgb3IgcnZhbHVlIG9mIGNhbiBiZSBzd2FwcGVkIHdpdGggYW55IGx2YWx1ZSBvciBy
dmFsdWUgb2YKKyAgIG90aGVyIGNvbXBhdGlibGUgdHlwZXMsIHVzaW5nIHVucXVhbGlmaWVkIGZ1
bmN0aW9uIGNhbGwgQHJlZiBzd2FwKCkuCisgLSBbTnVsbGFibGVQb2ludGVyXShodHRwOi8vZW4u
Y3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L051bGxhYmxlUG9pbnRlcik6CisgICBKU09O
IHZhbHVlcyBjYW4gYmUgY29tcGFyZWQgYWdhaW5zdCBgc3RkOjpudWxscHRyX3RgIG9iamVjdHMg
d2hpY2ggYXJlIHVzZWQKKyAgIHRvIG1vZGVsIHRoZSBgbnVsbGAgdmFsdWUuCistIENvbnRhaW5l
cgorIC0gW0NvbnRhaW5lcl0oaHR0cDovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29uY2Vw
dC9Db250YWluZXIpOgorICAgSlNPTiB2YWx1ZXMgY2FuIGJlIHVzZWQgbGlrZSBTVEwgY29udGFp
bmVycyBhbmQgcHJvdmlkZSBpdGVyYXRvciBhY2Nlc3MuCisgLSBbUmV2ZXJzaWJsZUNvbnRhaW5l
cl0oaHR0cDovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29uY2VwdC9SZXZlcnNpYmxlQ29u
dGFpbmVyKTsKKyAgIEpTT04gdmFsdWVzIGNhbiBiZSB1c2VkIGxpa2UgU1RMIGNvbnRhaW5lcnMg
YW5kIHByb3ZpZGUgcmV2ZXJzZSBpdGVyYXRvcgorICAgYWNjZXNzLgorCitAaW52YXJpYW50IFRo
ZSBtZW1iZXIgdmFyaWFibGVzIEBhIG1fdmFsdWUgYW5kIEBhIG1fdHlwZSBoYXZlIHRoZSBmb2xs
b3dpbmcKK3JlbGF0aW9uc2hpcDoKKy0gSWYgYG1fdHlwZSA9PSB2YWx1ZV90OjpvYmplY3RgLCB0
aGVuIGBtX3ZhbHVlLm9iamVjdCAhPSBudWxscHRyYC4KKy0gSWYgYG1fdHlwZSA9PSB2YWx1ZV90
OjphcnJheWAsIHRoZW4gYG1fdmFsdWUuYXJyYXkgIT0gbnVsbHB0cmAuCistIElmIGBtX3R5cGUg
PT0gdmFsdWVfdDo6c3RyaW5nYCwgdGhlbiBgbV92YWx1ZS5zdHJpbmcgIT0gbnVsbHB0cmAuCitU
aGUgaW52YXJpYW50cyBhcmUgY2hlY2tlZCBieSBtZW1iZXIgZnVuY3Rpb24gYXNzZXJ0X2ludmFy
aWFudCgpLgorCitAaW50ZXJuYWwKK0Bub3RlIE9iamVjdFR5cGUgdHJpY2sgZnJvbSBodHRwOi8v
c3RhY2tvdmVyZmxvdy5jb20vYS85ODYwOTExCitAZW5kaW50ZXJuYWwKKworQHNlZSBbUkZDIDcx
NTk6IFRoZSBKYXZhU2NyaXB0IE9iamVjdCBOb3RhdGlvbiAoSlNPTikgRGF0YSBJbnRlcmNoYW5n
ZQorRm9ybWF0XShodHRwOi8vcmZjNzE1OS5uZXQvcmZjNzE1OSkKKworQHNpbmNlIHZlcnNpb24g
MS4wLjAKKworQG5vc3ViZ3JvdXBpbmcKKyovCit0ZW1wbGF0ZSA8CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUuLi4gQXJncz4gY2xhc3MgT2JqZWN0VHlwZSA9
IHN0ZDo6bWFwLAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lLi4uIEFyZ3M+IGNs
YXNzIEFycmF5VHlwZSA9IHN0ZDo6dmVjdG9yLAorICAgIGNsYXNzIFN0cmluZ1R5cGUgPSBzdGQ6
OnN0cmluZywKKyAgICBjbGFzcyBCb29sZWFuVHlwZSA9IGJvb2wsCisgICAgY2xhc3MgTnVtYmVy
SW50ZWdlclR5cGUgPSBzdGQ6OmludDY0X3QsCisgICAgY2xhc3MgTnVtYmVyVW5zaWduZWRUeXBl
ID0gc3RkOjp1aW50NjRfdCwKKyAgICBjbGFzcyBOdW1iZXJGbG9hdFR5cGUgPSBkb3VibGUsCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gY2xhc3MgQWxsb2NhdG9yVHlwZSA9IHN0ZDo6YWxsb2Nh
dG9yCisgICAgPgorY2xhc3MgYmFzaWNfanNvbgoreworICBwcml2YXRlOgorICAgIC8vLyB3b3Jr
YXJvdW5kIHR5cGUgZm9yIE1TVkMKKyAgICB1c2luZyBiYXNpY19qc29uX3QgPSBiYXNpY19qc29u
PE9iamVjdFR5cGUsIEFycmF5VHlwZSwgU3RyaW5nVHlwZSwKKyAgICAgICAgICBCb29sZWFuVHlw
ZSwgTnVtYmVySW50ZWdlclR5cGUsIE51bWJlclVuc2lnbmVkVHlwZSwgTnVtYmVyRmxvYXRUeXBl
LAorICAgICAgICAgIEFsbG9jYXRvclR5cGU+OworCisgIHB1YmxpYzoKKyAgICAvLyBmb3J3YXJk
IGRlY2xhcmF0aW9ucworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2U+IGNsYXNzIGpzb25fcmV2
ZXJzZV9pdGVyYXRvcjsKKyAgICBjbGFzcyBqc29uX3BvaW50ZXI7CisKKyAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KKyAgICAvLyBjb250YWluZXIgdHlwZXMgLy8KKyAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKworICAgIC8vLyBAbmFtZSBjb250YWluZXIgdHlwZXMKKyAgICAvLy8gVGhlIGNh
bm9uaWMgY29udGFpbmVyIHR5cGVzIHRvIHVzZSBAcmVmIGJhc2ljX2pzb24gbGlrZSBhbnkgb3Ro
ZXIgU1RMCisgICAgLy8vIGNvbnRhaW5lci4KKyAgICAvLy8gQHsKKworICAgIC8vLyB0aGUgdHlw
ZSBvZiBlbGVtZW50cyBpbiBhIGJhc2ljX2pzb24gY29udGFpbmVyCisgICAgdXNpbmcgdmFsdWVf
dHlwZSA9IGJhc2ljX2pzb247CisKKyAgICAvLy8gdGhlIHR5cGUgb2YgYW4gZWxlbWVudCByZWZl
cmVuY2UKKyAgICB1c2luZyByZWZlcmVuY2UgPSB2YWx1ZV90eXBlJjsKKyAgICAvLy8gdGhlIHR5
cGUgb2YgYW4gZWxlbWVudCBjb25zdCByZWZlcmVuY2UKKyAgICB1c2luZyBjb25zdF9yZWZlcmVu
Y2UgPSBjb25zdCB2YWx1ZV90eXBlJjsKKworICAgIC8vLyBhIHR5cGUgdG8gcmVwcmVzZW50IGRp
ZmZlcmVuY2VzIGJldHdlZW4gaXRlcmF0b3JzCisgICAgdXNpbmcgZGlmZmVyZW5jZV90eXBlID0g
c3RkOjpwdHJkaWZmX3Q7CisgICAgLy8vIGEgdHlwZSB0byByZXByZXNlbnQgY29udGFpbmVyIHNp
emVzCisgICAgdXNpbmcgc2l6ZV90eXBlID0gc3RkOjpzaXplX3Q7CisKKyAgICAvLy8gdGhlIGFs
bG9jYXRvciB0eXBlCisgICAgdXNpbmcgYWxsb2NhdG9yX3R5cGUgPSBBbGxvY2F0b3JUeXBlPGJh
c2ljX2pzb24+OworCisgICAgLy8vIHRoZSB0eXBlIG9mIGFuIGVsZW1lbnQgcG9pbnRlcgorICAg
IHVzaW5nIHBvaW50ZXIgPSB0eXBlbmFtZSBzdGQ6OmFsbG9jYXRvcl90cmFpdHM8YWxsb2NhdG9y
X3R5cGU+Ojpwb2ludGVyOworICAgIC8vLyB0aGUgdHlwZSBvZiBhbiBlbGVtZW50IGNvbnN0IHBv
aW50ZXIKKyAgICB1c2luZyBjb25zdF9wb2ludGVyID0gdHlwZW5hbWUgc3RkOjphbGxvY2F0b3Jf
dHJhaXRzPGFsbG9jYXRvcl90eXBlPjo6Y29uc3RfcG9pbnRlcjsKKworICAgIC8vLyBhbiBpdGVy
YXRvciBmb3IgYSBiYXNpY19qc29uIGNvbnRhaW5lcgorICAgIGNsYXNzIGl0ZXJhdG9yOworICAg
IC8vLyBhIGNvbnN0IGl0ZXJhdG9yIGZvciBhIGJhc2ljX2pzb24gY29udGFpbmVyCisgICAgY2xh
c3MgY29uc3RfaXRlcmF0b3I7CisgICAgLy8vIGEgcmV2ZXJzZSBpdGVyYXRvciBmb3IgYSBiYXNp
Y19qc29uIGNvbnRhaW5lcgorICAgIHVzaW5nIHJldmVyc2VfaXRlcmF0b3IgPSBqc29uX3JldmVy
c2VfaXRlcmF0b3I8dHlwZW5hbWUgYmFzaWNfanNvbjo6aXRlcmF0b3I+OworICAgIC8vLyBhIGNv
bnN0IHJldmVyc2UgaXRlcmF0b3IgZm9yIGEgYmFzaWNfanNvbiBjb250YWluZXIKKyAgICB1c2lu
ZyBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yID0ganNvbl9yZXZlcnNlX2l0ZXJhdG9yPHR5cGVuYW1l
IGJhc2ljX2pzb246OmNvbnN0X2l0ZXJhdG9yPjsKKworICAgIC8vLyBAfQorCisKKyAgICAvKiEK
KyAgICBAYnJpZWYgcmV0dXJucyB0aGUgYWxsb2NhdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29u
dGFpbmVyCisgICAgKi8KKyAgICBzdGF0aWMgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigp
CisgICAgeworICAgICAgICByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsKKyAgICB9CisKKworICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIEpTT04gdmFsdWUgZGF0YSB0eXBl
cyAvLworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgLy8vIEBuYW1lIEpT
T04gdmFsdWUgZGF0YSB0eXBlcworICAgIC8vLyBUaGUgZGF0YSB0eXBlcyB0byBzdG9yZSBhIEpT
T04gdmFsdWUuIFRoZXNlIHR5cGVzIGFyZSBkZXJpdmVkIGZyb20KKyAgICAvLy8gdGhlIHRlbXBs
YXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gY2xhc3MgQHJlZiBiYXNpY19qc29uLgorICAgIC8vLyBA
eworCisgICAgLyohCisgICAgQGJyaWVmIGEgdHlwZSBmb3IgYW4gb2JqZWN0CisKKyAgICBbUkZD
IDcxNTldKGh0dHA6Ly9yZmM3MTU5Lm5ldC9yZmM3MTU5KSBkZXNjcmliZXMgSlNPTiBvYmplY3Rz
IGFzIGZvbGxvd3M6CisgICAgPiBBbiBvYmplY3QgaXMgYW4gdW5vcmRlcmVkIGNvbGxlY3Rpb24g
b2YgemVybyBvciBtb3JlIG5hbWUvdmFsdWUgcGFpcnMsCisgICAgPiB3aGVyZSBhIG5hbWUgaXMg
YSBzdHJpbmcgYW5kIGEgdmFsdWUgaXMgYSBzdHJpbmcsIG51bWJlciwgYm9vbGVhbiwgbnVsbCwK
KyAgICA+IG9iamVjdCwgb3IgYXJyYXkuCisKKyAgICBUbyBzdG9yZSBvYmplY3RzIGluIEMrKywg
YSB0eXBlIGlzIGRlZmluZWQgYnkgdGhlIHRlbXBsYXRlIHBhcmFtZXRlcnMKKyAgICBkZXNjcmli
ZWQgYmVsb3cuCisKKyAgICBAdHBhcmFtIE9iamVjdFR5cGUgIHRoZSBjb250YWluZXIgdG8gc3Rv
cmUgb2JqZWN0cyAoZS5nLiwgYHN0ZDo6bWFwYCBvcgorICAgIGBzdGQ6OnVub3JkZXJlZF9tYXBg
KQorICAgIEB0cGFyYW0gU3RyaW5nVHlwZSB0aGUgdHlwZSBvZiB0aGUga2V5cyBvciBuYW1lcyAo
ZS5nLiwgYHN0ZDo6c3RyaW5nYCkuCisgICAgVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gYHN0ZDo6
bGVzczxTdHJpbmdUeXBlPmAgaXMgdXNlZCB0byBvcmRlciBlbGVtZW50cworICAgIGluc2lkZSB0
aGUgY29udGFpbmVyLgorICAgIEB0cGFyYW0gQWxsb2NhdG9yVHlwZSB0aGUgYWxsb2NhdG9yIHRv
IHVzZSBmb3Igb2JqZWN0cyAoZS5nLiwKKyAgICBgc3RkOjphbGxvY2F0b3JgKQorCisgICAgIyMj
IyBEZWZhdWx0IHR5cGUKKworICAgIFdpdGggdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBAYSBPYmpl
Y3RUeXBlIChgc3RkOjptYXBgKSwgQGEgU3RyaW5nVHlwZQorICAgIChgc3RkOjpzdHJpbmdgKSwg
YW5kIEBhIEFsbG9jYXRvclR5cGUgKGBzdGQ6OmFsbG9jYXRvcmApLCB0aGUgZGVmYXVsdAorICAg
IHZhbHVlIGZvciBAYSBvYmplY3RfdCBpczoKKworICAgIEBjb2RlIHsuY3BwfQorICAgIHN0ZDo6
bWFwPAorICAgICAgc3RkOjpzdHJpbmcsIC8vIGtleV90eXBlCisgICAgICBiYXNpY19qc29uLCAv
LyB2YWx1ZV90eXBlCisgICAgICBzdGQ6Omxlc3M8c3RkOjpzdHJpbmc+LCAvLyBrZXlfY29tcGFy
ZQorICAgICAgc3RkOjphbGxvY2F0b3I8c3RkOjpwYWlyPGNvbnN0IHN0ZDo6c3RyaW5nLCBiYXNp
Y19qc29uPj4gLy8gYWxsb2NhdG9yX3R5cGUKKyAgICA+CisgICAgQGVuZGNvZGUKKworICAgICMj
IyMgQmVoYXZpb3IKKworICAgIFRoZSBjaG9pY2Ugb2YgQGEgb2JqZWN0X3QgaW5mbHVlbmNlcyB0
aGUgYmVoYXZpb3Igb2YgdGhlIEpTT04gY2xhc3MuIFdpdGgKKyAgICB0aGUgZGVmYXVsdCB0eXBl
LCBvYmplY3RzIGhhdmUgdGhlIGZvbGxvd2luZyBiZWhhdmlvcjoKKworICAgIC0gV2hlbiBhbGwg
bmFtZXMgYXJlIHVuaXF1ZSwgb2JqZWN0cyB3aWxsIGJlIGludGVyb3BlcmFibGUgaW4gdGhlIHNl
bnNlCisgICAgICB0aGF0IGFsbCBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbnMgcmVjZWl2aW5nIHRo
YXQgb2JqZWN0IHdpbGwgYWdyZWUgb24KKyAgICAgIHRoZSBuYW1lLXZhbHVlIG1hcHBpbmdzLgor
ICAgIC0gV2hlbiB0aGUgbmFtZXMgd2l0aGluIGFuIG9iamVjdCBhcmUgbm90IHVuaXF1ZSwgbGF0
ZXIgc3RvcmVkIG5hbWUvdmFsdWUKKyAgICAgIHBhaXJzIG92ZXJ3cml0ZSBwcmV2aW91c2x5IHN0
b3JlZCBuYW1lL3ZhbHVlIHBhaXJzLCBsZWF2aW5nIHRoZSB1c2VkCisgICAgICBuYW1lcyB1bmlx
dWUuIEZvciBpbnN0YW5jZSwgYHsia2V5IjogMX1gIGFuZCBgeyJrZXkiOiAyLCAia2V5IjogMX1g
IHdpbGwKKyAgICAgIGJlIHRyZWF0ZWQgYXMgZXF1YWwgYW5kIGJvdGggc3RvcmVkIGFzIGB7Imtl
eSI6IDF9YC4KKyAgICAtIEludGVybmFsbHksIG5hbWUvdmFsdWUgcGFpcnMgYXJlIHN0b3JlZCBp
biBsZXhpY29ncmFwaGljYWwgb3JkZXIgb2YgdGhlCisgICAgICBuYW1lcy4gT2JqZWN0cyB3aWxs
IGFsc28gYmUgc2VyaWFsaXplZCAoc2VlIEByZWYgZHVtcCkgaW4gdGhpcyBvcmRlci4KKyAgICAg
IEZvciBpbnN0YW5jZSwgYHsiYiI6IDEsICJhIjogMn1gIGFuZCBgeyJhIjogMiwgImIiOiAxfWAg
d2lsbCBiZSBzdG9yZWQKKyAgICAgIGFuZCBzZXJpYWxpemVkIGFzIGB7ImEiOiAyLCAiYiI6IDF9
YC4KKyAgICAtIFdoZW4gY29tcGFyaW5nIG9iamVjdHMsIHRoZSBvcmRlciBvZiB0aGUgbmFtZS92
YWx1ZSBwYWlycyBpcyBpcnJlbGV2YW50LgorICAgICAgVGhpcyBtYWtlcyBvYmplY3RzIGludGVy
b3BlcmFibGUgaW4gdGhlIHNlbnNlIHRoYXQgdGhleSB3aWxsIG5vdCBiZQorICAgICAgYWZmZWN0
ZWQgYnkgdGhlc2UgZGlmZmVyZW5jZXMuIEZvciBpbnN0YW5jZSwgYHsiYiI6IDEsICJhIjogMn1g
IGFuZAorICAgICAgYHsiYSI6IDIsICJiIjogMX1gIHdpbGwgYmUgdHJlYXRlZCBhcyBlcXVhbC4K
KworICAgICMjIyMgTGltaXRzCisKKyAgICBbUkZDIDcxNTldKGh0dHA6Ly9yZmM3MTU5Lm5ldC9y
ZmM3MTU5KSBzcGVjaWZpZXM6CisgICAgPiBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgc2V0IGxpbWl0
cyBvbiB0aGUgbWF4aW11bSBkZXB0aCBvZiBuZXN0aW5nLgorCisgICAgSW4gdGhpcyBjbGFzcywg
dGhlIG9iamVjdCdzIGxpbWl0IG9mIG5lc3RpbmcgaXMgbm90IGNvbnN0cmFpbnQgZXhwbGljaXRs
eS4KKyAgICBIb3dldmVyLCBhIG1heGltdW0gZGVwdGggb2YgbmVzdGluZyBtYXkgYmUgaW50cm9k
dWNlZCBieSB0aGUgY29tcGlsZXIgb3IKKyAgICBydW50aW1lIGVudmlyb25tZW50LiBBIHRoZW9y
ZXRpY2FsIGxpbWl0IGNhbiBiZSBxdWVyaWVkIGJ5IGNhbGxpbmcgdGhlCisgICAgQHJlZiBtYXhf
c2l6ZSBmdW5jdGlvbiBvZiBhIEpTT04gb2JqZWN0LgorCisgICAgIyMjIyBTdG9yYWdlCisKKyAg
ICBPYmplY3RzIGFyZSBzdG9yZWQgYXMgcG9pbnRlcnMgaW4gYSBAcmVmIGJhc2ljX2pzb24gdHlw
ZS4gVGhhdCBpcywgZm9yIGFueQorICAgIGFjY2VzcyB0byBvYmplY3QgdmFsdWVzLCBhIHBvaW50
ZXIgb2YgdHlwZSBgb2JqZWN0X3QqYCBtdXN0IGJlCisgICAgZGVyZWZlcmVuY2VkLgorCisgICAg
QHNhIEByZWYgYXJyYXlfdCAtLSB0eXBlIGZvciBhbiBhcnJheSB2YWx1ZQorCisgICAgQHNpbmNl
IHZlcnNpb24gMS4wLjAKKworICAgIEBub3RlIFRoZSBvcmRlciBuYW1lL3ZhbHVlIHBhaXJzIGFy
ZSBhZGRlZCB0byB0aGUgb2JqZWN0IGlzICpub3QqCisgICAgcHJlc2VydmVkIGJ5IHRoZSBsaWJy
YXJ5LiBUaGVyZWZvcmUsIGl0ZXJhdGluZyBhbiBvYmplY3QgbWF5IHJldHVybgorICAgIG5hbWUv
dmFsdWUgcGFpcnMgaW4gYSBkaWZmZXJlbnQgb3JkZXIgdGhhbiB0aGV5IHdlcmUgb3JpZ2luYWxs
eSBzdG9yZWQuIEluCisgICAgZmFjdCwga2V5cyB3aWxsIGJlIHRyYXZlcnNlZCBpbiBhbHBoYWJl
dGljYWwgb3JkZXIgYXMgYHN0ZDo6bWFwYCB3aXRoCisgICAgYHN0ZDo6bGVzc2AgaXMgdXNlZCBi
eSBkZWZhdWx0LiBQbGVhc2Ugbm90ZSB0aGlzIGJlaGF2aW9yIGNvbmZvcm1zIHRvIFtSRkMKKyAg
ICA3MTU5XShodHRwOi8vcmZjNzE1OS5uZXQvcmZjNzE1OSksIGJlY2F1c2UgYW55IG9yZGVyIGlt
cGxlbWVudHMgdGhlCisgICAgc3BlY2lmaWVkICJ1bm9yZGVyZWQiIG5hdHVyZSBvZiBKU09OIG9i
amVjdHMuCisgICAgKi8KKyAgICB1c2luZyBvYmplY3RfdCA9IE9iamVjdFR5cGU8U3RyaW5nVHlw
ZSwKKyAgICAgICAgICBiYXNpY19qc29uLAorICAgICAgICAgIHN0ZDo6bGVzczxTdHJpbmdUeXBl
PiwKKyAgICAgICAgICBBbGxvY2F0b3JUeXBlPHN0ZDo6cGFpcjxjb25zdCBTdHJpbmdUeXBlLAor
ICAgICAgICAgIGJhc2ljX2pzb24+Pj47CisKKyAgICAvKiEKKyAgICBAYnJpZWYgYSB0eXBlIGZv
ciBhbiBhcnJheQorCisgICAgW1JGQyA3MTU5XShodHRwOi8vcmZjNzE1OS5uZXQvcmZjNzE1OSkg
ZGVzY3JpYmVzIEpTT04gYXJyYXlzIGFzIGZvbGxvd3M6CisgICAgPiBBbiBhcnJheSBpcyBhbiBv
cmRlcmVkIHNlcXVlbmNlIG9mIHplcm8gb3IgbW9yZSB2YWx1ZXMuCisKKyAgICBUbyBzdG9yZSBv
YmplY3RzIGluIEMrKywgYSB0eXBlIGlzIGRlZmluZWQgYnkgdGhlIHRlbXBsYXRlIHBhcmFtZXRl
cnMKKyAgICBleHBsYWluZWQgYmVsb3cuCisKKyAgICBAdHBhcmFtIEFycmF5VHlwZSAgY29udGFp
bmVyIHR5cGUgdG8gc3RvcmUgYXJyYXlzIChlLmcuLCBgc3RkOjp2ZWN0b3JgIG9yCisgICAgYHN0
ZDo6bGlzdGApCisgICAgQHRwYXJhbSBBbGxvY2F0b3JUeXBlIGFsbG9jYXRvciB0byB1c2UgZm9y
IGFycmF5cyAoZS5nLiwgYHN0ZDo6YWxsb2NhdG9yYCkKKworICAgICMjIyMgRGVmYXVsdCB0eXBl
CisKKyAgICBXaXRoIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgQGEgQXJyYXlUeXBlIChgc3RkOjp2
ZWN0b3JgKSBhbmQgQGEKKyAgICBBbGxvY2F0b3JUeXBlIChgc3RkOjphbGxvY2F0b3JgKSwgdGhl
IGRlZmF1bHQgdmFsdWUgZm9yIEBhIGFycmF5X3QgaXM6CisKKyAgICBAY29kZSB7LmNwcH0KKyAg
ICBzdGQ6OnZlY3RvcjwKKyAgICAgIGJhc2ljX2pzb24sIC8vIHZhbHVlX3R5cGUKKyAgICAgIHN0
ZDo6YWxsb2NhdG9yPGJhc2ljX2pzb24+IC8vIGFsbG9jYXRvcl90eXBlCisgICAgPgorICAgIEBl
bmRjb2RlCisKKyAgICAjIyMjIExpbWl0cworCisgICAgW1JGQyA3MTU5XShodHRwOi8vcmZjNzE1
OS5uZXQvcmZjNzE1OSkgc3BlY2lmaWVzOgorICAgID4gQW4gaW1wbGVtZW50YXRpb24gbWF5IHNl
dCBsaW1pdHMgb24gdGhlIG1heGltdW0gZGVwdGggb2YgbmVzdGluZy4KKworICAgIEluIHRoaXMg
Y2xhc3MsIHRoZSBhcnJheSdzIGxpbWl0IG9mIG5lc3RpbmcgaXMgbm90IGNvbnN0cmFpbnQgZXhw
bGljaXRseS4KKyAgICBIb3dldmVyLCBhIG1heGltdW0gZGVwdGggb2YgbmVzdGluZyBtYXkgYmUg
aW50cm9kdWNlZCBieSB0aGUgY29tcGlsZXIgb3IKKyAgICBydW50aW1lIGVudmlyb25tZW50LiBB
IHRoZW9yZXRpY2FsIGxpbWl0IGNhbiBiZSBxdWVyaWVkIGJ5IGNhbGxpbmcgdGhlCisgICAgQHJl
ZiBtYXhfc2l6ZSBmdW5jdGlvbiBvZiBhIEpTT04gYXJyYXkuCisKKyAgICAjIyMjIFN0b3JhZ2UK
KworICAgIEFycmF5cyBhcmUgc3RvcmVkIGFzIHBvaW50ZXJzIGluIGEgQHJlZiBiYXNpY19qc29u
IHR5cGUuIFRoYXQgaXMsIGZvciBhbnkKKyAgICBhY2Nlc3MgdG8gYXJyYXkgdmFsdWVzLCBhIHBv
aW50ZXIgb2YgdHlwZSBgYXJyYXlfdCpgIG11c3QgYmUgZGVyZWZlcmVuY2VkLgorCisgICAgQHNh
IEByZWYgb2JqZWN0X3QgLS0gdHlwZSBmb3IgYW4gb2JqZWN0IHZhbHVlCisKKyAgICBAc2luY2Ug
dmVyc2lvbiAxLjAuMAorICAgICovCisgICAgdXNpbmcgYXJyYXlfdCA9IEFycmF5VHlwZTxiYXNp
Y19qc29uLCBBbGxvY2F0b3JUeXBlPGJhc2ljX2pzb24+PjsKKworICAgIC8qIQorICAgIEBicmll
ZiBhIHR5cGUgZm9yIGEgc3RyaW5nCisKKyAgICBbUkZDIDcxNTldKGh0dHA6Ly9yZmM3MTU5Lm5l
dC9yZmM3MTU5KSBkZXNjcmliZXMgSlNPTiBzdHJpbmdzIGFzIGZvbGxvd3M6CisgICAgPiBBIHN0
cmluZyBpcyBhIHNlcXVlbmNlIG9mIHplcm8gb3IgbW9yZSBVbmljb2RlIGNoYXJhY3RlcnMuCisK
KyAgICBUbyBzdG9yZSBvYmplY3RzIGluIEMrKywgYSB0eXBlIGlzIGRlZmluZWQgYnkgdGhlIHRl
bXBsYXRlIHBhcmFtZXRlcgorICAgIGRlc2NyaWJlZCBiZWxvdy4gVW5pY29kZSB2YWx1ZXMgYXJl
IHNwbGl0IGJ5IHRoZSBKU09OIGNsYXNzIGludG8KKyAgICBieXRlLXNpemVkIGNoYXJhY3RlcnMg
ZHVyaW5nIGRlc2VyaWFsaXphdGlvbi4KKworICAgIEB0cGFyYW0gU3RyaW5nVHlwZSAgdGhlIGNv
bnRhaW5lciB0byBzdG9yZSBzdHJpbmdzIChlLmcuLCBgc3RkOjpzdHJpbmdgKS4KKyAgICBOb3Rl
IHRoaXMgY29udGFpbmVyIGlzIHVzZWQgZm9yIGtleXMvbmFtZXMgaW4gb2JqZWN0cywgc2VlIEBy
ZWYgb2JqZWN0X3QuCisKKyAgICAjIyMjIERlZmF1bHQgdHlwZQorCisgICAgV2l0aCB0aGUgZGVm
YXVsdCB2YWx1ZXMgZm9yIEBhIFN0cmluZ1R5cGUgKGBzdGQ6OnN0cmluZ2ApLCB0aGUgZGVmYXVs
dAorICAgIHZhbHVlIGZvciBAYSBzdHJpbmdfdCBpczoKKworICAgIEBjb2RlIHsuY3BwfQorICAg
IHN0ZDo6c3RyaW5nCisgICAgQGVuZGNvZGUKKworICAgICMjIyMgU3RyaW5nIGNvbXBhcmlzb24K
KworICAgIFtSRkMgNzE1OV0oaHR0cDovL3JmYzcxNTkubmV0L3JmYzcxNTkpIHN0YXRlczoKKyAg
ICA+IFNvZnR3YXJlIGltcGxlbWVudGF0aW9ucyBhcmUgdHlwaWNhbGx5IHJlcXVpcmVkIHRvIHRl
c3QgbmFtZXMgb2Ygb2JqZWN0CisgICAgPiBtZW1iZXJzIGZvciBlcXVhbGl0eS4gSW1wbGVtZW50
YXRpb25zIHRoYXQgdHJhbnNmb3JtIHRoZSB0ZXh0dWFsCisgICAgPiByZXByZXNlbnRhdGlvbiBp
bnRvIHNlcXVlbmNlcyBvZiBVbmljb2RlIGNvZGUgdW5pdHMgYW5kIHRoZW4gcGVyZm9ybSB0aGUK
KyAgICA+IGNvbXBhcmlzb24gbnVtZXJpY2FsbHksIGNvZGUgdW5pdCBieSBjb2RlIHVuaXQsIGFy
ZSBpbnRlcm9wZXJhYmxlIGluIHRoZQorICAgID4gc2Vuc2UgdGhhdCBpbXBsZW1lbnRhdGlvbnMg
d2lsbCBhZ3JlZSBpbiBhbGwgY2FzZXMgb24gZXF1YWxpdHkgb3IKKyAgICA+IGluZXF1YWxpdHkg
b2YgdHdvIHN0cmluZ3MuIEZvciBleGFtcGxlLCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBjb21wYXJl
CisgICAgPiBzdHJpbmdzIHdpdGggZXNjYXBlZCBjaGFyYWN0ZXJzIHVuY29udmVydGVkIG1heSBp
bmNvcnJlY3RseSBmaW5kIHRoYXQKKyAgICA+IGAiYVxcYiJgIGFuZCBgImFcdTAwNUNiImAgYXJl
IG5vdCBlcXVhbC4KKworICAgIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgaW50ZXJvcGVyYWJsZSBh
cyBpdCBkb2VzIGNvbXBhcmUgc3RyaW5ncyBjb2RlIHVuaXQKKyAgICBieSBjb2RlIHVuaXQuCisK
KyAgICAjIyMjIFN0b3JhZ2UKKworICAgIFN0cmluZyB2YWx1ZXMgYXJlIHN0b3JlZCBhcyBwb2lu
dGVycyBpbiBhIEByZWYgYmFzaWNfanNvbiB0eXBlLiBUaGF0IGlzLAorICAgIGZvciBhbnkgYWNj
ZXNzIHRvIHN0cmluZyB2YWx1ZXMsIGEgcG9pbnRlciBvZiB0eXBlIGBzdHJpbmdfdCpgIG11c3Qg
YmUKKyAgICBkZXJlZmVyZW5jZWQuCisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICov
CisgICAgdXNpbmcgc3RyaW5nX3QgPSBTdHJpbmdUeXBlOworCisgICAgLyohCisgICAgQGJyaWVm
IGEgdHlwZSBmb3IgYSBib29sZWFuCisKKyAgICBbUkZDIDcxNTldKGh0dHA6Ly9yZmM3MTU5Lm5l
dC9yZmM3MTU5KSBpbXBsaWNpdGx5IGRlc2NyaWJlcyBhIGJvb2xlYW4gYXMgYQorICAgIHR5cGUg
d2hpY2ggZGlmZmVyZW50aWF0ZXMgdGhlIHR3byBsaXRlcmFscyBgdHJ1ZWAgYW5kIGBmYWxzZWAu
CisKKyAgICBUbyBzdG9yZSBvYmplY3RzIGluIEMrKywgYSB0eXBlIGlzIGRlZmluZWQgYnkgdGhl
IHRlbXBsYXRlIHBhcmFtZXRlciBAYQorICAgIEJvb2xlYW5UeXBlIHdoaWNoIGNob29zZXMgdGhl
IHR5cGUgdG8gdXNlLgorCisgICAgIyMjIyBEZWZhdWx0IHR5cGUKKworICAgIFdpdGggdGhlIGRl
ZmF1bHQgdmFsdWVzIGZvciBAYSBCb29sZWFuVHlwZSAoYGJvb2xgKSwgdGhlIGRlZmF1bHQgdmFs
dWUgZm9yCisgICAgQGEgYm9vbGVhbl90IGlzOgorCisgICAgQGNvZGUgey5jcHB9CisgICAgYm9v
bAorICAgIEBlbmRjb2RlCisKKyAgICAjIyMjIFN0b3JhZ2UKKworICAgIEJvb2xlYW4gdmFsdWVz
IGFyZSBzdG9yZWQgZGlyZWN0bHkgaW5zaWRlIGEgQHJlZiBiYXNpY19qc29uIHR5cGUuCisKKyAg
ICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgdXNpbmcgYm9vbGVhbl90ID0gQm9v
bGVhblR5cGU7CisKKyAgICAvKiEKKyAgICBAYnJpZWYgYSB0eXBlIGZvciBhIG51bWJlciAoaW50
ZWdlcikKKworICAgIFtSRkMgNzE1OV0oaHR0cDovL3JmYzcxNTkubmV0L3JmYzcxNTkpIGRlc2Ny
aWJlcyBudW1iZXJzIGFzIGZvbGxvd3M6CisgICAgPiBUaGUgcmVwcmVzZW50YXRpb24gb2YgbnVt
YmVycyBpcyBzaW1pbGFyIHRvIHRoYXQgdXNlZCBpbiBtb3N0CisgICAgPiBwcm9ncmFtbWluZyBs
YW5ndWFnZXMuIEEgbnVtYmVyIGlzIHJlcHJlc2VudGVkIGluIGJhc2UgMTAgdXNpbmcgZGVjaW1h
bAorICAgID4gZGlnaXRzLiBJdCBjb250YWlucyBhbiBpbnRlZ2VyIGNvbXBvbmVudCB0aGF0IG1h
eSBiZSBwcmVmaXhlZCB3aXRoIGFuCisgICAgPiBvcHRpb25hbCBtaW51cyBzaWduLCB3aGljaCBt
YXkgYmUgZm9sbG93ZWQgYnkgYSBmcmFjdGlvbiBwYXJ0IGFuZC9vciBhbgorICAgID4gZXhwb25l
bnQgcGFydC4gTGVhZGluZyB6ZXJvcyBhcmUgbm90IGFsbG93ZWQuICguLi4pIE51bWVyaWMgdmFs
dWVzIHRoYXQKKyAgICA+IGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiB0aGUgZ3JhbW1hciBiZWxv
dyAoc3VjaCBhcyBJbmZpbml0eSBhbmQgTmFOKQorICAgID4gYXJlIG5vdCBwZXJtaXR0ZWQuCisK
KyAgICBUaGlzIGRlc2NyaXB0aW9uIGluY2x1ZGVzIGJvdGggaW50ZWdlciBhbmQgZmxvYXRpbmct
cG9pbnQgbnVtYmVycy4KKyAgICBIb3dldmVyLCBDKysgYWxsb3dzIG1vcmUgcHJlY2lzZSBzdG9y
YWdlIGlmIGl0IGlzIGtub3duIHdoZXRoZXIgdGhlIG51bWJlcgorICAgIGlzIGEgc2lnbmVkIGlu
dGVnZXIsIGFuIHVuc2lnbmVkIGludGVnZXIgb3IgYSBmbG9hdGluZy1wb2ludCBudW1iZXIuCisg
ICAgVGhlcmVmb3JlLCB0aHJlZSBkaWZmZXJlbnQgdHlwZXMsIEByZWYgbnVtYmVyX2ludGVnZXJf
dCwgQHJlZgorICAgIG51bWJlcl91bnNpZ25lZF90IGFuZCBAcmVmIG51bWJlcl9mbG9hdF90IGFy
ZSB1c2VkLgorCisgICAgVG8gc3RvcmUgaW50ZWdlciBudW1iZXJzIGluIEMrKywgYSB0eXBlIGlz
IGRlZmluZWQgYnkgdGhlIHRlbXBsYXRlCisgICAgcGFyYW1ldGVyIEBhIE51bWJlckludGVnZXJU
eXBlIHdoaWNoIGNob29zZXMgdGhlIHR5cGUgdG8gdXNlLgorCisgICAgIyMjIyBEZWZhdWx0IHR5
cGUKKworICAgIFdpdGggdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBAYSBOdW1iZXJJbnRlZ2VyVHlw
ZSAoYGludDY0X3RgKSwgdGhlIGRlZmF1bHQKKyAgICB2YWx1ZSBmb3IgQGEgbnVtYmVyX2ludGVn
ZXJfdCBpczoKKworICAgIEBjb2RlIHsuY3BwfQorICAgIGludDY0X3QKKyAgICBAZW5kY29kZQor
CisgICAgIyMjIyBEZWZhdWx0IGJlaGF2aW9yCisKKyAgICAtIFRoZSByZXN0cmljdGlvbnMgYWJv
dXQgbGVhZGluZyB6ZXJvcyBpcyBub3QgZW5mb3JjZWQgaW4gQysrLiBJbnN0ZWFkLAorICAgICAg
bGVhZGluZyB6ZXJvcyBpbiBpbnRlZ2VyIGxpdGVyYWxzIGxlYWQgdG8gYW4gaW50ZXJwcmV0YXRp
b24gYXMgb2N0YWwKKyAgICAgIG51bWJlci4gSW50ZXJuYWxseSwgdGhlIHZhbHVlIHdpbGwgYmUg
c3RvcmVkIGFzIGRlY2ltYWwgbnVtYmVyLiBGb3IKKyAgICAgIGluc3RhbmNlLCB0aGUgQysrIGlu
dGVnZXIgbGl0ZXJhbCBgMDEwYCB3aWxsIGJlIHNlcmlhbGl6ZWQgdG8gYDhgLgorICAgICAgRHVy
aW5nIGRlc2VyaWFsaXphdGlvbiwgbGVhZGluZyB6ZXJvcyB5aWVsZCBhbiBlcnJvci4KKyAgICAt
IE5vdC1hLW51bWJlciAoTmFOKSB2YWx1ZXMgd2lsbCBiZSBzZXJpYWxpemVkIHRvIGBudWxsYC4K
KworICAgICMjIyMgTGltaXRzCisKKyAgICBbUkZDIDcxNTldKGh0dHA6Ly9yZmM3MTU5Lm5ldC9y
ZmM3MTU5KSBzcGVjaWZpZXM6CisgICAgPiBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgc2V0IGxpbWl0
cyBvbiB0aGUgcmFuZ2UgYW5kIHByZWNpc2lvbiBvZiBudW1iZXJzLgorCisgICAgV2hlbiB0aGUg
ZGVmYXVsdCB0eXBlIGlzIHVzZWQsIHRoZSBtYXhpbWFsIGludGVnZXIgbnVtYmVyIHRoYXQgY2Fu
IGJlCisgICAgc3RvcmVkIGlzIGA5MjIzMzcyMDM2ODU0Nzc1ODA3YCAoSU5UNjRfTUFYKSBhbmQg
dGhlIG1pbmltYWwgaW50ZWdlciBudW1iZXIKKyAgICB0aGF0IGNhbiBiZSBzdG9yZWQgaXMgYC05
MjIzMzcyMDM2ODU0Nzc1ODA4YCAoSU5UNjRfTUlOKS4gSW50ZWdlciBudW1iZXJzCisgICAgdGhh
dCBhcmUgb3V0IG9mIHJhbmdlIHdpbGwgeWllbGQgb3Zlci91bmRlcmZsb3cgd2hlbiB1c2VkIGlu
IGEKKyAgICBjb25zdHJ1Y3Rvci4gRHVyaW5nIGRlc2VyaWFsaXphdGlvbiwgdG9vIGxhcmdlIG9y
IHNtYWxsIGludGVnZXIgbnVtYmVycworICAgIHdpbGwgYmUgYXV0b21hdGljYWxseSBiZSBzdG9y
ZWQgYXMgQHJlZiBudW1iZXJfdW5zaWduZWRfdCBvciBAcmVmCisgICAgbnVtYmVyX2Zsb2F0X3Qu
CisKKyAgICBbUkZDIDcxNTldKGh0dHA6Ly9yZmM3MTU5Lm5ldC9yZmM3MTU5KSBmdXJ0aGVyIHN0
YXRlczoKKyAgICA+IE5vdGUgdGhhdCB3aGVuIHN1Y2ggc29mdHdhcmUgaXMgdXNlZCwgbnVtYmVy
cyB0aGF0IGFyZSBpbnRlZ2VycyBhbmQgYXJlCisgICAgPiBpbiB0aGUgcmFuZ2UgXGYkWy0yXns1
M30rMSwgMl57NTN9LTFdXGYkIGFyZSBpbnRlcm9wZXJhYmxlIGluIHRoZSBzZW5zZQorICAgID4g
dGhhdCBpbXBsZW1lbnRhdGlvbnMgd2lsbCBhZ3JlZSBleGFjdGx5IG9uIHRoZWlyIG51bWVyaWMg
dmFsdWVzLgorCisgICAgQXMgdGhpcyByYW5nZSBpcyBhIHN1YnJhbmdlIG9mIHRoZSBleGFjdGx5
IHN1cHBvcnRlZCByYW5nZSBbSU5UNjRfTUlOLAorICAgIElOVDY0X01BWF0sIHRoaXMgY2xhc3Mn
cyBpbnRlZ2VyIHR5cGUgaXMgaW50ZXJvcGVyYWJsZS4KKworICAgICMjIyMgU3RvcmFnZQorCisg
ICAgSW50ZWdlciBudW1iZXIgdmFsdWVzIGFyZSBzdG9yZWQgZGlyZWN0bHkgaW5zaWRlIGEgQHJl
ZiBiYXNpY19qc29uIHR5cGUuCisKKyAgICBAc2EgQHJlZiBudW1iZXJfZmxvYXRfdCAtLSB0eXBl
IGZvciBudW1iZXIgdmFsdWVzIChmbG9hdGluZy1wb2ludCkKKworICAgIEBzYSBAcmVmIG51bWJl
cl91bnNpZ25lZF90IC0tIHR5cGUgZm9yIG51bWJlciB2YWx1ZXMgKHVuc2lnbmVkIGludGVnZXIp
CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgdXNpbmcgbnVtYmVyX2lu
dGVnZXJfdCA9IE51bWJlckludGVnZXJUeXBlOworCisgICAgLyohCisgICAgQGJyaWVmIGEgdHlw
ZSBmb3IgYSBudW1iZXIgKHVuc2lnbmVkKQorCisgICAgW1JGQyA3MTU5XShodHRwOi8vcmZjNzE1
OS5uZXQvcmZjNzE1OSkgZGVzY3JpYmVzIG51bWJlcnMgYXMgZm9sbG93czoKKyAgICA+IFRoZSBy
ZXByZXNlbnRhdGlvbiBvZiBudW1iZXJzIGlzIHNpbWlsYXIgdG8gdGhhdCB1c2VkIGluIG1vc3QK
KyAgICA+IHByb2dyYW1taW5nIGxhbmd1YWdlcy4gQSBudW1iZXIgaXMgcmVwcmVzZW50ZWQgaW4g
YmFzZSAxMCB1c2luZyBkZWNpbWFsCisgICAgPiBkaWdpdHMuIEl0IGNvbnRhaW5zIGFuIGludGVn
ZXIgY29tcG9uZW50IHRoYXQgbWF5IGJlIHByZWZpeGVkIHdpdGggYW4KKyAgICA+IG9wdGlvbmFs
IG1pbnVzIHNpZ24sIHdoaWNoIG1heSBiZSBmb2xsb3dlZCBieSBhIGZyYWN0aW9uIHBhcnQgYW5k
L29yIGFuCisgICAgPiBleHBvbmVudCBwYXJ0LiBMZWFkaW5nIHplcm9zIGFyZSBub3QgYWxsb3dl
ZC4gKC4uLikgTnVtZXJpYyB2YWx1ZXMgdGhhdAorICAgID4gY2Fubm90IGJlIHJlcHJlc2VudGVk
IGluIHRoZSBncmFtbWFyIGJlbG93IChzdWNoIGFzIEluZmluaXR5IGFuZCBOYU4pCisgICAgPiBh
cmUgbm90IHBlcm1pdHRlZC4KKworICAgIFRoaXMgZGVzY3JpcHRpb24gaW5jbHVkZXMgYm90aCBp
bnRlZ2VyIGFuZCBmbG9hdGluZy1wb2ludCBudW1iZXJzLgorICAgIEhvd2V2ZXIsIEMrKyBhbGxv
d3MgbW9yZSBwcmVjaXNlIHN0b3JhZ2UgaWYgaXQgaXMga25vd24gd2hldGhlciB0aGUgbnVtYmVy
CisgICAgaXMgYSBzaWduZWQgaW50ZWdlciwgYW4gdW5zaWduZWQgaW50ZWdlciBvciBhIGZsb2F0
aW5nLXBvaW50IG51bWJlci4KKyAgICBUaGVyZWZvcmUsIHRocmVlIGRpZmZlcmVudCB0eXBlcywg
QHJlZiBudW1iZXJfaW50ZWdlcl90LCBAcmVmCisgICAgbnVtYmVyX3Vuc2lnbmVkX3QgYW5kIEBy
ZWYgbnVtYmVyX2Zsb2F0X3QgYXJlIHVzZWQuCisKKyAgICBUbyBzdG9yZSB1bnNpZ25lZCBpbnRl
Z2VyIG51bWJlcnMgaW4gQysrLCBhIHR5cGUgaXMgZGVmaW5lZCBieSB0aGUKKyAgICB0ZW1wbGF0
ZSBwYXJhbWV0ZXIgQGEgTnVtYmVyVW5zaWduZWRUeXBlIHdoaWNoIGNob29zZXMgdGhlIHR5cGUg
dG8gdXNlLgorCisgICAgIyMjIyBEZWZhdWx0IHR5cGUKKworICAgIFdpdGggdGhlIGRlZmF1bHQg
dmFsdWVzIGZvciBAYSBOdW1iZXJVbnNpZ25lZFR5cGUgKGB1aW50NjRfdGApLCB0aGUKKyAgICBk
ZWZhdWx0IHZhbHVlIGZvciBAYSBudW1iZXJfdW5zaWduZWRfdCBpczoKKworICAgIEBjb2RlIHsu
Y3BwfQorICAgIHVpbnQ2NF90CisgICAgQGVuZGNvZGUKKworICAgICMjIyMgRGVmYXVsdCBiZWhh
dmlvcgorCisgICAgLSBUaGUgcmVzdHJpY3Rpb25zIGFib3V0IGxlYWRpbmcgemVyb3MgaXMgbm90
IGVuZm9yY2VkIGluIEMrKy4gSW5zdGVhZCwKKyAgICAgIGxlYWRpbmcgemVyb3MgaW4gaW50ZWdl
ciBsaXRlcmFscyBsZWFkIHRvIGFuIGludGVycHJldGF0aW9uIGFzIG9jdGFsCisgICAgICBudW1i
ZXIuIEludGVybmFsbHksIHRoZSB2YWx1ZSB3aWxsIGJlIHN0b3JlZCBhcyBkZWNpbWFsIG51bWJl
ci4gRm9yCisgICAgICBpbnN0YW5jZSwgdGhlIEMrKyBpbnRlZ2VyIGxpdGVyYWwgYDAxMGAgd2ls
bCBiZSBzZXJpYWxpemVkIHRvIGA4YC4KKyAgICAgIER1cmluZyBkZXNlcmlhbGl6YXRpb24sIGxl
YWRpbmcgemVyb3MgeWllbGQgYW4gZXJyb3IuCisgICAgLSBOb3QtYS1udW1iZXIgKE5hTikgdmFs
dWVzIHdpbGwgYmUgc2VyaWFsaXplZCB0byBgbnVsbGAuCisKKyAgICAjIyMjIExpbWl0cworCisg
ICAgW1JGQyA3MTU5XShodHRwOi8vcmZjNzE1OS5uZXQvcmZjNzE1OSkgc3BlY2lmaWVzOgorICAg
ID4gQW4gaW1wbGVtZW50YXRpb24gbWF5IHNldCBsaW1pdHMgb24gdGhlIHJhbmdlIGFuZCBwcmVj
aXNpb24gb2YgbnVtYmVycy4KKworICAgIFdoZW4gdGhlIGRlZmF1bHQgdHlwZSBpcyB1c2VkLCB0
aGUgbWF4aW1hbCBpbnRlZ2VyIG51bWJlciB0aGF0IGNhbiBiZQorICAgIHN0b3JlZCBpcyBgMTg0
NDY3NDQwNzM3MDk1NTE2MTVgIChVSU5UNjRfTUFYKSBhbmQgdGhlIG1pbmltYWwgaW50ZWdlcgor
ICAgIG51bWJlciB0aGF0IGNhbiBiZSBzdG9yZWQgaXMgYDBgLiBJbnRlZ2VyIG51bWJlcnMgdGhh
dCBhcmUgb3V0IG9mIHJhbmdlCisgICAgd2lsbCB5aWVsZCBvdmVyL3VuZGVyZmxvdyB3aGVuIHVz
ZWQgaW4gYSBjb25zdHJ1Y3Rvci4gRHVyaW5nCisgICAgZGVzZXJpYWxpemF0aW9uLCB0b28gbGFy
Z2Ugb3Igc21hbGwgaW50ZWdlciBudW1iZXJzIHdpbGwgYmUgYXV0b21hdGljYWxseQorICAgIGJl
IHN0b3JlZCBhcyBAcmVmIG51bWJlcl9pbnRlZ2VyX3Qgb3IgQHJlZiBudW1iZXJfZmxvYXRfdC4K
KworICAgIFtSRkMgNzE1OV0oaHR0cDovL3JmYzcxNTkubmV0L3JmYzcxNTkpIGZ1cnRoZXIgc3Rh
dGVzOgorICAgID4gTm90ZSB0aGF0IHdoZW4gc3VjaCBzb2Z0d2FyZSBpcyB1c2VkLCBudW1iZXJz
IHRoYXQgYXJlIGludGVnZXJzIGFuZCBhcmUKKyAgICA+IGluIHRoZSByYW5nZSBcZiRbLTJeezUz
fSsxLCAyXns1M30tMV1cZiQgYXJlIGludGVyb3BlcmFibGUgaW4gdGhlIHNlbnNlCisgICAgPiB0
aGF0IGltcGxlbWVudGF0aW9ucyB3aWxsIGFncmVlIGV4YWN0bHkgb24gdGhlaXIgbnVtZXJpYyB2
YWx1ZXMuCisKKyAgICBBcyB0aGlzIHJhbmdlIGlzIGEgc3VicmFuZ2UgKHdoZW4gY29uc2lkZXJl
ZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQorICAgIG51bWJlcl9pbnRlZ2VyX3QgdHlwZSkgb2Yg
dGhlIGV4YWN0bHkgc3VwcG9ydGVkIHJhbmdlIFswLCBVSU5UNjRfTUFYXSwKKyAgICB0aGlzIGNs
YXNzJ3MgaW50ZWdlciB0eXBlIGlzIGludGVyb3BlcmFibGUuCisKKyAgICAjIyMjIFN0b3JhZ2UK
KworICAgIEludGVnZXIgbnVtYmVyIHZhbHVlcyBhcmUgc3RvcmVkIGRpcmVjdGx5IGluc2lkZSBh
IEByZWYgYmFzaWNfanNvbiB0eXBlLgorCisgICAgQHNhIEByZWYgbnVtYmVyX2Zsb2F0X3QgLS0g
dHlwZSBmb3IgbnVtYmVyIHZhbHVlcyAoZmxvYXRpbmctcG9pbnQpCisgICAgQHNhIEByZWYgbnVt
YmVyX2ludGVnZXJfdCAtLSB0eXBlIGZvciBudW1iZXIgdmFsdWVzIChpbnRlZ2VyKQorCisgICAg
QHNpbmNlIHZlcnNpb24gMi4wLjAKKyAgICAqLworICAgIHVzaW5nIG51bWJlcl91bnNpZ25lZF90
ID0gTnVtYmVyVW5zaWduZWRUeXBlOworCisgICAgLyohCisgICAgQGJyaWVmIGEgdHlwZSBmb3Ig
YSBudW1iZXIgKGZsb2F0aW5nLXBvaW50KQorCisgICAgW1JGQyA3MTU5XShodHRwOi8vcmZjNzE1
OS5uZXQvcmZjNzE1OSkgZGVzY3JpYmVzIG51bWJlcnMgYXMgZm9sbG93czoKKyAgICA+IFRoZSBy
ZXByZXNlbnRhdGlvbiBvZiBudW1iZXJzIGlzIHNpbWlsYXIgdG8gdGhhdCB1c2VkIGluIG1vc3QK
KyAgICA+IHByb2dyYW1taW5nIGxhbmd1YWdlcy4gQSBudW1iZXIgaXMgcmVwcmVzZW50ZWQgaW4g
YmFzZSAxMCB1c2luZyBkZWNpbWFsCisgICAgPiBkaWdpdHMuIEl0IGNvbnRhaW5zIGFuIGludGVn
ZXIgY29tcG9uZW50IHRoYXQgbWF5IGJlIHByZWZpeGVkIHdpdGggYW4KKyAgICA+IG9wdGlvbmFs
IG1pbnVzIHNpZ24sIHdoaWNoIG1heSBiZSBmb2xsb3dlZCBieSBhIGZyYWN0aW9uIHBhcnQgYW5k
L29yIGFuCisgICAgPiBleHBvbmVudCBwYXJ0LiBMZWFkaW5nIHplcm9zIGFyZSBub3QgYWxsb3dl
ZC4gKC4uLikgTnVtZXJpYyB2YWx1ZXMgdGhhdAorICAgID4gY2Fubm90IGJlIHJlcHJlc2VudGVk
IGluIHRoZSBncmFtbWFyIGJlbG93IChzdWNoIGFzIEluZmluaXR5IGFuZCBOYU4pCisgICAgPiBh
cmUgbm90IHBlcm1pdHRlZC4KKworICAgIFRoaXMgZGVzY3JpcHRpb24gaW5jbHVkZXMgYm90aCBp
bnRlZ2VyIGFuZCBmbG9hdGluZy1wb2ludCBudW1iZXJzLgorICAgIEhvd2V2ZXIsIEMrKyBhbGxv
d3MgbW9yZSBwcmVjaXNlIHN0b3JhZ2UgaWYgaXQgaXMga25vd24gd2hldGhlciB0aGUgbnVtYmVy
CisgICAgaXMgYSBzaWduZWQgaW50ZWdlciwgYW4gdW5zaWduZWQgaW50ZWdlciBvciBhIGZsb2F0
aW5nLXBvaW50IG51bWJlci4KKyAgICBUaGVyZWZvcmUsIHRocmVlIGRpZmZlcmVudCB0eXBlcywg
QHJlZiBudW1iZXJfaW50ZWdlcl90LCBAcmVmCisgICAgbnVtYmVyX3Vuc2lnbmVkX3QgYW5kIEBy
ZWYgbnVtYmVyX2Zsb2F0X3QgYXJlIHVzZWQuCisKKyAgICBUbyBzdG9yZSBmbG9hdGluZy1wb2lu
dCBudW1iZXJzIGluIEMrKywgYSB0eXBlIGlzIGRlZmluZWQgYnkgdGhlIHRlbXBsYXRlCisgICAg
cGFyYW1ldGVyIEBhIE51bWJlckZsb2F0VHlwZSB3aGljaCBjaG9vc2VzIHRoZSB0eXBlIHRvIHVz
ZS4KKworICAgICMjIyMgRGVmYXVsdCB0eXBlCisKKyAgICBXaXRoIHRoZSBkZWZhdWx0IHZhbHVl
cyBmb3IgQGEgTnVtYmVyRmxvYXRUeXBlIChgZG91YmxlYCksIHRoZSBkZWZhdWx0CisgICAgdmFs
dWUgZm9yIEBhIG51bWJlcl9mbG9hdF90IGlzOgorCisgICAgQGNvZGUgey5jcHB9CisgICAgZG91
YmxlCisgICAgQGVuZGNvZGUKKworICAgICMjIyMgRGVmYXVsdCBiZWhhdmlvcgorCisgICAgLSBU
aGUgcmVzdHJpY3Rpb25zIGFib3V0IGxlYWRpbmcgemVyb3MgaXMgbm90IGVuZm9yY2VkIGluIEMr
Ky4gSW5zdGVhZCwKKyAgICAgIGxlYWRpbmcgemVyb3MgaW4gZmxvYXRpbmctcG9pbnQgbGl0ZXJh
bHMgd2lsbCBiZSBpZ25vcmVkLiBJbnRlcm5hbGx5LAorICAgICAgdGhlIHZhbHVlIHdpbGwgYmUg
c3RvcmVkIGFzIGRlY2ltYWwgbnVtYmVyLiBGb3IgaW5zdGFuY2UsIHRoZSBDKysKKyAgICAgIGZs
b2F0aW5nLXBvaW50IGxpdGVyYWwgYDAxLjJgIHdpbGwgYmUgc2VyaWFsaXplZCB0byBgMS4yYC4g
RHVyaW5nCisgICAgICBkZXNlcmlhbGl6YXRpb24sIGxlYWRpbmcgemVyb3MgeWllbGQgYW4gZXJy
b3IuCisgICAgLSBOb3QtYS1udW1iZXIgKE5hTikgdmFsdWVzIHdpbGwgYmUgc2VyaWFsaXplZCB0
byBgbnVsbGAuCisKKyAgICAjIyMjIExpbWl0cworCisgICAgW1JGQyA3MTU5XShodHRwOi8vcmZj
NzE1OS5uZXQvcmZjNzE1OSkgc3RhdGVzOgorICAgID4gVGhpcyBzcGVjaWZpY2F0aW9uIGFsbG93
cyBpbXBsZW1lbnRhdGlvbnMgdG8gc2V0IGxpbWl0cyBvbiB0aGUgcmFuZ2UgYW5kCisgICAgPiBw
cmVjaXNpb24gb2YgbnVtYmVycyBhY2NlcHRlZC4gU2luY2Ugc29mdHdhcmUgdGhhdCBpbXBsZW1l
bnRzIElFRUUKKyAgICA+IDc1NC0yMDA4IGJpbmFyeTY0IChkb3VibGUgcHJlY2lzaW9uKSBudW1i
ZXJzIGlzIGdlbmVyYWxseSBhdmFpbGFibGUgYW5kCisgICAgPiB3aWRlbHkgdXNlZCwgZ29vZCBp
bnRlcm9wZXJhYmlsaXR5IGNhbiBiZSBhY2hpZXZlZCBieSBpbXBsZW1lbnRhdGlvbnMKKyAgICA+
IHRoYXQgZXhwZWN0IG5vIG1vcmUgcHJlY2lzaW9uIG9yIHJhbmdlIHRoYW4gdGhlc2UgcHJvdmlk
ZSwgaW4gdGhlIHNlbnNlCisgICAgPiB0aGF0IGltcGxlbWVudGF0aW9ucyB3aWxsIGFwcHJveGlt
YXRlIEpTT04gbnVtYmVycyB3aXRoaW4gdGhlIGV4cGVjdGVkCisgICAgPiBwcmVjaXNpb24uCisK
KyAgICBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXMgZXhhY3RseSBmb2xsb3cgdGhpcyBhcHByb2Fj
aCwgYXMgaXQgdXNlcyBkb3VibGUKKyAgICBwcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgbnVtYmVy
cy4gTm90ZSB2YWx1ZXMgc21hbGxlciB0aGFuCisgICAgYC0xLjc5NzY5MzEzNDg2MjMyZSszMDhg
IGFuZCB2YWx1ZXMgZ3JlYXRlciB0aGFuIGAxLjc5NzY5MzEzNDg2MjMyZSszMDhgCisgICAgd2ls
bCBiZSBzdG9yZWQgYXMgTmFOIGludGVybmFsbHkgYW5kIGJlIHNlcmlhbGl6ZWQgdG8gYG51bGxg
LgorCisgICAgIyMjIyBTdG9yYWdlCisKKyAgICBGbG9hdGluZy1wb2ludCBudW1iZXIgdmFsdWVz
IGFyZSBzdG9yZWQgZGlyZWN0bHkgaW5zaWRlIGEgQHJlZiBiYXNpY19qc29uCisgICAgdHlwZS4K
KworICAgIEBzYSBAcmVmIG51bWJlcl9pbnRlZ2VyX3QgLS0gdHlwZSBmb3IgbnVtYmVyIHZhbHVl
cyAoaW50ZWdlcikKKworICAgIEBzYSBAcmVmIG51bWJlcl91bnNpZ25lZF90IC0tIHR5cGUgZm9y
IG51bWJlciB2YWx1ZXMgKHVuc2lnbmVkIGludGVnZXIpCisKKyAgICBAc2luY2UgdmVyc2lvbiAx
LjAuMAorICAgICovCisgICAgdXNpbmcgbnVtYmVyX2Zsb2F0X3QgPSBOdW1iZXJGbG9hdFR5cGU7
CisKKyAgICAvLy8gQH0KKworCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAg
Ly8gSlNPTiB0eXBlIGVudW1lcmF0aW9uIC8vCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisKKyAgICAvKiEKKyAgICBAYnJpZWYgdGhlIEpTT04gdHlwZSBlbnVtZXJhdGlvbgorCisg
ICAgVGhpcyBlbnVtZXJhdGlvbiBjb2xsZWN0cyB0aGUgZGlmZmVyZW50IEpTT04gdHlwZXMuIEl0
IGlzIGludGVybmFsbHkgdXNlZAorICAgIHRvIGRpc3Rpbmd1aXNoIHRoZSBzdG9yZWQgdmFsdWVz
LCBhbmQgdGhlIGZ1bmN0aW9ucyBAcmVmIGlzX251bGwoKSwgQHJlZgorICAgIGlzX29iamVjdCgp
LCBAcmVmIGlzX2FycmF5KCksIEByZWYgaXNfc3RyaW5nKCksIEByZWYgaXNfYm9vbGVhbigpLCBA
cmVmCisgICAgaXNfbnVtYmVyKCkgKHdpdGggQHJlZiBpc19udW1iZXJfaW50ZWdlcigpLCBAcmVm
IGlzX251bWJlcl91bnNpZ25lZCgpLCBhbmQKKyAgICBAcmVmIGlzX251bWJlcl9mbG9hdCgpKSwg
QHJlZiBpc19kaXNjYXJkZWQoKSwgQHJlZiBpc19wcmltaXRpdmUoKSwgYW5kCisgICAgQHJlZiBp
c19zdHJ1Y3R1cmVkKCkgcmVseSBvbiBpdC4KKworICAgIEBub3RlIFRoZXJlIGFyZSB0aHJlZSBl
bnVtZXJhdGlvbiBlbnRyaWVzIChudW1iZXJfaW50ZWdlciwKKyAgICBudW1iZXJfdW5zaWduZWQs
IGFuZCBudW1iZXJfZmxvYXQpLCBiZWNhdXNlIHRoZSBsaWJyYXJ5IGRpc3Rpbmd1aXNoZXMKKyAg
ICB0aGVzZSB0aHJlZSB0eXBlcyBmb3IgbnVtYmVyczogQHJlZiBudW1iZXJfdW5zaWduZWRfdCBp
cyB1c2VkIGZvciB1bnNpZ25lZAorICAgIGludGVnZXJzLCBAcmVmIG51bWJlcl9pbnRlZ2VyX3Qg
aXMgdXNlZCBmb3Igc2lnbmVkIGludGVnZXJzLCBhbmQgQHJlZgorICAgIG51bWJlcl9mbG9hdF90
IGlzIHVzZWQgZm9yIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgb3IgdG8gYXBwcm94aW1hdGUKKyAg
ICBpbnRlZ2VycyB3aGljaCBkbyBub3QgZml0IGluIHRoZSBsaW1pdHMgb2YgdGhlaXIgcmVzcGVj
dGl2ZSB0eXBlLgorCisgICAgQHNhIEByZWYgYmFzaWNfanNvbihjb25zdCB2YWx1ZV90IHZhbHVl
X3R5cGUpIC0tIGNyZWF0ZSBhIEpTT04gdmFsdWUgd2l0aAorICAgIHRoZSBkZWZhdWx0IHZhbHVl
IGZvciBhIGdpdmVuIHR5cGUKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAg
ICBlbnVtIGNsYXNzIHZhbHVlX3QgOiB1aW50OF90CisgICAgeworICAgICAgICBudWxsLCAgICAg
ICAgICAgIC8vLzwgbnVsbCB2YWx1ZQorICAgICAgICBvYmplY3QsICAgICAgICAgIC8vLzwgb2Jq
ZWN0ICh1bm9yZGVyZWQgc2V0IG9mIG5hbWUvdmFsdWUgcGFpcnMpCisgICAgICAgIGFycmF5LCAg
ICAgICAgICAgLy8vPCBhcnJheSAob3JkZXJlZCBjb2xsZWN0aW9uIG9mIHZhbHVlcykKKyAgICAg
ICAgc3RyaW5nLCAgICAgICAgICAvLy88IHN0cmluZyB2YWx1ZQorICAgICAgICBib29sZWFuLCAg
ICAgICAgIC8vLzwgYm9vbGVhbiB2YWx1ZQorICAgICAgICBudW1iZXJfaW50ZWdlciwgIC8vLzwg
bnVtYmVyIHZhbHVlIChzaWduZWQgaW50ZWdlcikKKyAgICAgICAgbnVtYmVyX3Vuc2lnbmVkLCAv
Ly88IG51bWJlciB2YWx1ZSAodW5zaWduZWQgaW50ZWdlcikKKyAgICAgICAgbnVtYmVyX2Zsb2F0
LCAgICAvLy88IG51bWJlciB2YWx1ZSAoZmxvYXRpbmctcG9pbnQpCisgICAgICAgIGRpc2NhcmRl
ZCAgICAgICAgLy8vPCBkaXNjYXJkZWQgYnkgdGhlIHRoZSBwYXJzZXIgY2FsbGJhY2sgZnVuY3Rp
b24KKyAgICB9OworCisKKyAgcHJpdmF0ZToKKworICAgIC8vLyBoZWxwZXIgZm9yIGV4Y2VwdGlv
bi1zYWZlIG9iamVjdCBjcmVhdGlvbgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
Li4uIEFyZ3M+CisgICAgc3RhdGljIFQqIGNyZWF0ZShBcmdzJiYgLi4uIGFyZ3MpCisgICAgewor
ICAgICAgICBBbGxvY2F0b3JUeXBlPFQ+IGFsbG9jOworICAgICAgICBhdXRvIGRlbGV0ZXIgPSBb
Jl0oVCAqIG9iamVjdCkKKyAgICAgICAgeworICAgICAgICAgICAgYWxsb2MuZGVhbGxvY2F0ZShv
YmplY3QsIDEpOworICAgICAgICB9OworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VCwgZGVjbHR5
cGUoZGVsZXRlcik+IG9iamVjdChhbGxvYy5hbGxvY2F0ZSgxKSwgZGVsZXRlcik7CisgICAgICAg
IGFsbG9jLmNvbnN0cnVjdChvYmplY3QuZ2V0KCksIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4u
Lik7CisgICAgICAgIGFzc2VydChvYmplY3QuZ2V0KCkgIT0gbnVsbHB0cik7CisgICAgICAgIHJl
dHVybiBvYmplY3QucmVsZWFzZSgpOworICAgIH0KKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLworICAgIC8vIEpTT04gdmFsdWUgc3RvcmFnZSAvLworICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLworCisgICAgLyohCisgICAgQGJyaWVmIGEgSlNPTiB2YWx1ZQorCisgICAgVGhlIGFj
dHVhbCBzdG9yYWdlIGZvciBhIEpTT04gdmFsdWUgb2YgdGhlIEByZWYgYmFzaWNfanNvbiBjbGFz
cy4gVGhpcworICAgIHVuaW9uIGNvbWJpbmVzIHRoZSBkaWZmZXJlbnQgc3RvcmFnZSB0eXBlcyBm
b3IgdGhlIEpTT04gdmFsdWUgdHlwZXMKKyAgICBkZWZpbmVkIGluIEByZWYgdmFsdWVfdC4KKwor
ICAgIEpTT04gdHlwZSB8IHZhbHVlX3QgdHlwZSAgICB8IHVzZWQgdHlwZQorICAgIC0tLS0tLS0t
LSB8IC0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIG9iamVj
dCAgICB8IG9iamVjdCAgICAgICAgICB8IHBvaW50ZXIgdG8gQHJlZiBvYmplY3RfdAorICAgIGFy
cmF5ICAgICB8IGFycmF5ICAgICAgICAgICB8IHBvaW50ZXIgdG8gQHJlZiBhcnJheV90CisgICAg
c3RyaW5nICAgIHwgc3RyaW5nICAgICAgICAgIHwgcG9pbnRlciB0byBAcmVmIHN0cmluZ190Cisg
ICAgYm9vbGVhbiAgIHwgYm9vbGVhbiAgICAgICAgIHwgQHJlZiBib29sZWFuX3QKKyAgICBudW1i
ZXIgICAgfCBudW1iZXJfaW50ZWdlciAgfCBAcmVmIG51bWJlcl9pbnRlZ2VyX3QKKyAgICBudW1i
ZXIgICAgfCBudW1iZXJfdW5zaWduZWQgfCBAcmVmIG51bWJlcl91bnNpZ25lZF90CisgICAgbnVt
YmVyICAgIHwgbnVtYmVyX2Zsb2F0ICAgIHwgQHJlZiBudW1iZXJfZmxvYXRfdAorICAgIG51bGwg
ICAgICB8IG51bGwgICAgICAgICAgICB8ICpubyB2YWx1ZSBpcyBzdG9yZWQqCisKKyAgICBAbm90
ZSBWYXJpYWJsZS1sZW5ndGggdHlwZXMgKG9iamVjdHMsIGFycmF5cywgYW5kIHN0cmluZ3MpIGFy
ZSBzdG9yZWQgYXMKKyAgICBwb2ludGVycy4gVGhlIHNpemUgb2YgdGhlIHVuaW9uIHNob3VsZCBu
b3QgZXhjZWVkIDY0IGJpdHMgaWYgdGhlIGRlZmF1bHQKKyAgICB2YWx1ZSB0eXBlcyBhcmUgdXNl
ZC4KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICB1bmlvbiBqc29uX3Zh
bHVlCisgICAgeworICAgICAgICAvLy8gb2JqZWN0IChzdG9yZWQgd2l0aCBwb2ludGVyIHRvIHNh
dmUgc3RvcmFnZSkKKyAgICAgICAgb2JqZWN0X3QqIG9iamVjdDsKKyAgICAgICAgLy8vIGFycmF5
IChzdG9yZWQgd2l0aCBwb2ludGVyIHRvIHNhdmUgc3RvcmFnZSkKKyAgICAgICAgYXJyYXlfdCog
YXJyYXk7CisgICAgICAgIC8vLyBzdHJpbmcgKHN0b3JlZCB3aXRoIHBvaW50ZXIgdG8gc2F2ZSBz
dG9yYWdlKQorICAgICAgICBzdHJpbmdfdCogc3RyaW5nOworICAgICAgICAvLy8gYm9vbGVhbgor
ICAgICAgICBib29sZWFuX3QgYm9vbGVhbjsKKyAgICAgICAgLy8vIG51bWJlciAoaW50ZWdlcikK
KyAgICAgICAgbnVtYmVyX2ludGVnZXJfdCBudW1iZXJfaW50ZWdlcjsKKyAgICAgICAgLy8vIG51
bWJlciAodW5zaWduZWQgaW50ZWdlcikKKyAgICAgICAgbnVtYmVyX3Vuc2lnbmVkX3QgbnVtYmVy
X3Vuc2lnbmVkOworICAgICAgICAvLy8gbnVtYmVyIChmbG9hdGluZy1wb2ludCkKKyAgICAgICAg
bnVtYmVyX2Zsb2F0X3QgbnVtYmVyX2Zsb2F0OworCisgICAgICAgIC8vLyBkZWZhdWx0IGNvbnN0
cnVjdG9yIChmb3IgbnVsbCB2YWx1ZXMpCisgICAgICAgIGpzb25fdmFsdWUoKSA9IGRlZmF1bHQ7
CisgICAgICAgIC8vLyBjb25zdHJ1Y3RvciBmb3IgYm9vbGVhbnMKKyAgICAgICAganNvbl92YWx1
ZShib29sZWFuX3Qgdikgbm9leGNlcHQgOiBib29sZWFuKHYpIHt9CisgICAgICAgIC8vLyBjb25z
dHJ1Y3RvciBmb3IgbnVtYmVycyAoaW50ZWdlcikKKyAgICAgICAganNvbl92YWx1ZShudW1iZXJf
aW50ZWdlcl90IHYpIG5vZXhjZXB0IDogbnVtYmVyX2ludGVnZXIodikge30KKyAgICAgICAgLy8v
IGNvbnN0cnVjdG9yIGZvciBudW1iZXJzICh1bnNpZ25lZCkKKyAgICAgICAganNvbl92YWx1ZShu
dW1iZXJfdW5zaWduZWRfdCB2KSBub2V4Y2VwdCA6IG51bWJlcl91bnNpZ25lZCh2KSB7fQorICAg
ICAgICAvLy8gY29uc3RydWN0b3IgZm9yIG51bWJlcnMgKGZsb2F0aW5nLXBvaW50KQorICAgICAg
ICBqc29uX3ZhbHVlKG51bWJlcl9mbG9hdF90IHYpIG5vZXhjZXB0IDogbnVtYmVyX2Zsb2F0KHYp
IHt9CisgICAgICAgIC8vLyBjb25zdHJ1Y3RvciBmb3IgZW1wdHkgdmFsdWVzIG9mIGEgZ2l2ZW4g
dHlwZQorICAgICAgICBqc29uX3ZhbHVlKHZhbHVlX3QgdCkKKyAgICAgICAgeworICAgICAgICAg
ICAgc3dpdGNoICh0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVf
dDo6b2JqZWN0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0
ID0gY3JlYXRlPG9iamVjdF90PigpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5OgorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXJyYXkgPSBjcmVhdGU8YXJyYXlf
dD4oKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpzdHJpbmc6CisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBzdHJpbmcgPSBjcmVhdGU8c3RyaW5nX3Q+KCIiKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgYm9vbGVhbiA9IGJvb2xlYW5fdChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVf
dDo6bnVtYmVyX2ludGVnZXI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBudW1iZXJfaW50ZWdlciA9IG51bWJlcl9pbnRlZ2VyX3QoMCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhc2UgdmFs
dWVfdDo6bnVtYmVyX3Vuc2lnbmVkOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgbnVtYmVyX3Vuc2lnbmVkID0gbnVtYmVyX3Vuc2lnbmVkX3QoMCk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNh
c2UgdmFsdWVfdDo6bnVtYmVyX2Zsb2F0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgbnVtYmVyX2Zsb2F0ID0gbnVtYmVyX2Zsb2F0X3QoMC4wKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vLyBj
b25zdHJ1Y3RvciBmb3Igc3RyaW5ncworICAgICAgICBqc29uX3ZhbHVlKGNvbnN0IHN0cmluZ190
JiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgc3RyaW5nID0gY3JlYXRlPHN0cmluZ190
Pih2YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICAvLy8gY29uc3RydWN0b3IgZm9yIG9iamVj
dHMKKyAgICAgICAganNvbl92YWx1ZShjb25zdCBvYmplY3RfdCYgdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG9iamVjdCA9IGNyZWF0ZTxvYmplY3RfdD4odmFsdWUpOworICAgICAgICB9
CisKKyAgICAgICAgLy8vIGNvbnN0cnVjdG9yIGZvciBhcnJheXMKKyAgICAgICAganNvbl92YWx1
ZShjb25zdCBhcnJheV90JiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXJyYXkgPSBj
cmVhdGU8YXJyYXlfdD4odmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qIQorICAg
IEBicmllZiBjaGVja3MgdGhlIGNsYXNzIGludmFyaWFudHMKKworICAgIFRoaXMgZnVuY3Rpb24g
YXNzZXJ0cyB0aGUgY2xhc3MgaW52YXJpYW50cy4gSXQgbmVlZHMgdG8gYmUgY2FsbGVkIGF0IHRo
ZQorICAgIGVuZCBvZiBldmVyeSBjb25zdHJ1Y3RvciB0byBtYWtlIHN1cmUgdGhhdCBjcmVhdGVk
IG9iamVjdHMgcmVzcGVjdCB0aGUKKyAgICBpbnZhcmlhbnQuIEZ1cnRoZXJtb3JlLCBpdCBoYXMg
dG8gYmUgY2FsbGVkIGVhY2ggdGltZSB0aGUgdHlwZSBvZiBhIEpTT04KKyAgICB2YWx1ZSBpcyBj
aGFuZ2VkLCBiZWNhdXNlIHRoZSBpbnZhcmlhbnQgZXhwcmVzc2VzIGEgcmVsYXRpb25zaGlwIGJl
dHdlZW4KKyAgICBAYSBtX3R5cGUgYW5kIEBhIG1fdmFsdWUuCisgICAgKi8KKyAgICB2b2lkIGFz
c2VydF9pbnZhcmlhbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgYXNzZXJ0KG1fdHlwZSAhPSB2
YWx1ZV90OjpvYmplY3Qgb3IgbV92YWx1ZS5vYmplY3QgIT0gbnVsbHB0cik7CisgICAgICAgIGFz
c2VydChtX3R5cGUgIT0gdmFsdWVfdDo6YXJyYXkgb3IgbV92YWx1ZS5hcnJheSAhPSBudWxscHRy
KTsKKyAgICAgICAgYXNzZXJ0KG1fdHlwZSAhPSB2YWx1ZV90OjpzdHJpbmcgb3IgbV92YWx1ZS5z
dHJpbmcgIT0gbnVsbHB0cik7CisgICAgfQorCisgIHB1YmxpYzoKKyAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworICAgIC8vIEpTT04gcGFyc2VyIGNhbGxiYWNrIC8vCisgICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIC8qIQorICAgIEBicmllZiBKU09OIGNhbGxiYWNr
IGV2ZW50cworCisgICAgVGhpcyBlbnVtZXJhdGlvbiBsaXN0cyB0aGUgcGFyc2VyIGV2ZW50cyB0
aGF0IGNhbiB0cmlnZ2VyIGNhbGxpbmcgYQorICAgIGNhbGxiYWNrIGZ1bmN0aW9uIG9mIHR5cGUg
QHJlZiBwYXJzZXJfY2FsbGJhY2tfdCBkdXJpbmcgcGFyc2luZy4KKworICAgIEBpbWFnZSBodG1s
IGNhbGxiYWNrX2V2ZW50cy5wbmcgIkV4YW1wbGUgd2hlbiBjZXJ0YWluIHBhcnNlIGV2ZW50cyBh
cmUgdHJpZ2dlcmVkIgorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGVu
dW0gY2xhc3MgcGFyc2VfZXZlbnRfdCA6IHVpbnQ4X3QKKyAgICB7CisgICAgICAgIC8vLyB0aGUg
cGFyc2VyIHJlYWQgYHtgIGFuZCBzdGFydGVkIHRvIHByb2Nlc3MgYSBKU09OIG9iamVjdAorICAg
ICAgICBvYmplY3Rfc3RhcnQsCisgICAgICAgIC8vLyB0aGUgcGFyc2VyIHJlYWQgYH1gIGFuZCBm
aW5pc2hlZCBwcm9jZXNzaW5nIGEgSlNPTiBvYmplY3QKKyAgICAgICAgb2JqZWN0X2VuZCwKKyAg
ICAgICAgLy8vIHRoZSBwYXJzZXIgcmVhZCBgW2AgYW5kIHN0YXJ0ZWQgdG8gcHJvY2VzcyBhIEpT
T04gYXJyYXkKKyAgICAgICAgYXJyYXlfc3RhcnQsCisgICAgICAgIC8vLyB0aGUgcGFyc2VyIHJl
YWQgYF1gIGFuZCBmaW5pc2hlZCBwcm9jZXNzaW5nIGEgSlNPTiBhcnJheQorICAgICAgICBhcnJh
eV9lbmQsCisgICAgICAgIC8vLyB0aGUgcGFyc2VyIHJlYWQgYSBrZXkgb2YgYSB2YWx1ZSBpbiBh
biBvYmplY3QKKyAgICAgICAga2V5LAorICAgICAgICAvLy8gdGhlIHBhcnNlciBmaW5pc2hlZCBy
ZWFkaW5nIGEgSlNPTiB2YWx1ZQorICAgICAgICB2YWx1ZQorICAgIH07CisKKyAgICAvKiEKKyAg
ICBAYnJpZWYgcGVyLWVsZW1lbnQgcGFyc2VyIGNhbGxiYWNrIHR5cGUKKworICAgIFdpdGggYSBw
YXJzZXIgY2FsbGJhY2sgZnVuY3Rpb24sIHRoZSByZXN1bHQgb2YgcGFyc2luZyBhIEpTT04gdGV4
dCBjYW4gYmUKKyAgICBpbmZsdWVuY2VkLiBXaGVuIHBhc3NlZCB0byBAcmVmIHBhcnNlKHN0ZDo6
aXN0cmVhbSYsIGNvbnN0CisgICAgcGFyc2VyX2NhbGxiYWNrX3QpIG9yIEByZWYgcGFyc2UoY29u
c3QgY2hhciosIGNvbnN0IHBhcnNlcl9jYWxsYmFja190KSwKKyAgICBpdCBpcyBjYWxsZWQgb24g
Y2VydGFpbiBldmVudHMgKHBhc3NlZCBhcyBAcmVmIHBhcnNlX2V2ZW50X3QgdmlhIHBhcmFtZXRl
cgorICAgIEBhIGV2ZW50KSB3aXRoIGEgc2V0IHJlY3Vyc2lvbiBkZXB0aCBAYSBkZXB0aCBhbmQg
Y29udGV4dCBKU09OIHZhbHVlCisgICAgQGEgcGFyc2VkLiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRo
ZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBhIGJvb2xlYW4KKyAgICBpbmRpY2F0aW5nIHdoZXRoZXIg
dGhlIGVsZW1lbnQgdGhhdCBlbWl0dGVkIHRoZSBjYWxsYmFjayBzaGFsbCBiZSBrZXB0IG9yCisg
ICAgbm90LgorCisgICAgV2UgZGlzdGluZ3Vpc2ggc2l4IHNjZW5hcmlvcyAoZGV0ZXJtaW5lZCBi
eSB0aGUgZXZlbnQgdHlwZSkgaW4gd2hpY2ggdGhlCisgICAgY2FsbGJhY2sgZnVuY3Rpb24gY2Fu
IGJlIGNhbGxlZC4gVGhlIGZvbGxvd2luZyB0YWJsZSBkZXNjcmliZXMgdGhlIHZhbHVlcworICAg
IG9mIHRoZSBwYXJhbWV0ZXJzIEBhIGRlcHRoLCBAYSBldmVudCwgYW5kIEBhIHBhcnNlZC4KKwor
ICAgIHBhcmFtZXRlciBAYSBldmVudCB8IGRlc2NyaXB0aW9uIHwgcGFyYW1ldGVyIEBhIGRlcHRo
IHwgcGFyYW1ldGVyIEBhIHBhcnNlZAorICAgIC0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0t
LS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHBhcnNl
X2V2ZW50X3Q6Om9iamVjdF9zdGFydCB8IHRoZSBwYXJzZXIgcmVhZCBge2AgYW5kIHN0YXJ0ZWQg
dG8gcHJvY2VzcyBhIEpTT04gb2JqZWN0IHwgZGVwdGggb2YgdGhlIHBhcmVudCBvZiB0aGUgSlNP
TiBvYmplY3QgfCBhIEpTT04gdmFsdWUgd2l0aCB0eXBlIGRpc2NhcmRlZAorICAgIHBhcnNlX2V2
ZW50X3Q6OmtleSB8IHRoZSBwYXJzZXIgcmVhZCBhIGtleSBvZiBhIHZhbHVlIGluIGFuIG9iamVj
dCB8IGRlcHRoIG9mIHRoZSBjdXJyZW50bHkgcGFyc2VkIEpTT04gb2JqZWN0IHwgYSBKU09OIHN0
cmluZyBjb250YWluaW5nIHRoZSBrZXkKKyAgICBwYXJzZV9ldmVudF90OjpvYmplY3RfZW5kIHwg
dGhlIHBhcnNlciByZWFkIGB9YCBhbmQgZmluaXNoZWQgcHJvY2Vzc2luZyBhIEpTT04gb2JqZWN0
IHwgZGVwdGggb2YgdGhlIHBhcmVudCBvZiB0aGUgSlNPTiBvYmplY3QgfCB0aGUgcGFyc2VkIEpT
T04gb2JqZWN0CisgICAgcGFyc2VfZXZlbnRfdDo6YXJyYXlfc3RhcnQgfCB0aGUgcGFyc2VyIHJl
YWQgYFtgIGFuZCBzdGFydGVkIHRvIHByb2Nlc3MgYSBKU09OIGFycmF5IHwgZGVwdGggb2YgdGhl
IHBhcmVudCBvZiB0aGUgSlNPTiBhcnJheSB8IGEgSlNPTiB2YWx1ZSB3aXRoIHR5cGUgZGlzY2Fy
ZGVkCisgICAgcGFyc2VfZXZlbnRfdDo6YXJyYXlfZW5kIHwgdGhlIHBhcnNlciByZWFkIGBdYCBh
bmQgZmluaXNoZWQgcHJvY2Vzc2luZyBhIEpTT04gYXJyYXkgfCBkZXB0aCBvZiB0aGUgcGFyZW50
IG9mIHRoZSBKU09OIGFycmF5IHwgdGhlIHBhcnNlZCBKU09OIGFycmF5CisgICAgcGFyc2VfZXZl
bnRfdDo6dmFsdWUgfCB0aGUgcGFyc2VyIGZpbmlzaGVkIHJlYWRpbmcgYSBKU09OIHZhbHVlIHwg
ZGVwdGggb2YgdGhlIHZhbHVlIHwgdGhlIHBhcnNlZCBKU09OIHZhbHVlCisKKyAgICBAaW1hZ2Ug
aHRtbCBjYWxsYmFja19ldmVudHMucG5nICJFeGFtcGxlIHdoZW4gY2VydGFpbiBwYXJzZSBldmVu
dHMgYXJlIHRyaWdnZXJlZCIKKworICAgIERpc2NhcmRpbmcgYSB2YWx1ZSAoaS5lLiwgcmV0dXJu
aW5nIGBmYWxzZWApIGhhcyBkaWZmZXJlbnQgZWZmZWN0cworICAgIGRlcGVuZGluZyBvbiB0aGUg
Y29udGV4dCBpbiB3aGljaCBmdW5jdGlvbiB3YXMgY2FsbGVkOgorCisgICAgLSBEaXNjYXJkZWQg
dmFsdWVzIGluIHN0cnVjdHVyZWQgdHlwZXMgYXJlIHNraXBwZWQuIFRoYXQgaXMsIHRoZSBwYXJz
ZXIKKyAgICAgIHdpbGwgYmVoYXZlIGFzIGlmIHRoZSBkaXNjYXJkZWQgdmFsdWUgd2FzIG5ldmVy
IHJlYWQuCisgICAgLSBJbiBjYXNlIGEgdmFsdWUgb3V0c2lkZSBhIHN0cnVjdHVyZWQgdHlwZSBp
cyBza2lwcGVkLCBpdCBpcyByZXBsYWNlZAorICAgICAgd2l0aCBgbnVsbGAuIFRoaXMgY2FzZSBo
YXBwZW5zIGlmIHRoZSB0b3AtbGV2ZWwgZWxlbWVudCBpcyBza2lwcGVkLgorCisgICAgQHBhcmFt
W2luXSBkZXB0aCAgdGhlIGRlcHRoIG9mIHRoZSByZWN1cnNpb24gZHVyaW5nIHBhcnNpbmcKKwor
ICAgIEBwYXJhbVtpbl0gZXZlbnQgIGFuIGV2ZW50IG9mIHR5cGUgcGFyc2VfZXZlbnRfdCBpbmRp
Y2F0aW5nIHRoZSBjb250ZXh0IGluCisgICAgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGhhcyBiZWVu
IGNhbGxlZAorCisgICAgQHBhcmFtW2luLG91dF0gcGFyc2VkICB0aGUgY3VycmVudCBpbnRlcm1l
ZGlhdGUgcGFyc2UgcmVzdWx0OyBub3RlIHRoYXQKKyAgICB3cml0aW5nIHRvIHRoaXMgdmFsdWUg
aGFzIG5vIGVmZmVjdCBmb3IgcGFyc2VfZXZlbnRfdDo6a2V5IGV2ZW50cworCisgICAgQHJldHVy
biBXaGV0aGVyIHRoZSBKU09OIHZhbHVlIHdoaWNoIGNhbGxlZCB0aGUgZnVuY3Rpb24gZHVyaW5n
IHBhcnNpbmcKKyAgICBzaG91bGQgYmUga2VwdCAoYHRydWVgKSBvciBub3QgKGBmYWxzZWApLiBJ
biB0aGUgbGF0dGVyIGNhc2UsIGl0IGlzIGVpdGhlcgorICAgIHNraXBwZWQgY29tcGxldGVseSBv
ciByZXBsYWNlZCBieSBhbiBlbXB0eSBkaXNjYXJkZWQgb2JqZWN0LgorCisgICAgQHNhIEByZWYg
cGFyc2Uoc3RkOjppc3RyZWFtJiwgcGFyc2VyX2NhbGxiYWNrX3QpIG9yCisgICAgQHJlZiBwYXJz
ZShjb25zdCBjaGFyKiwgcGFyc2VyX2NhbGxiYWNrX3QpIGZvciBleGFtcGxlcworCisgICAgQHNp
bmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIHVzaW5nIHBhcnNlcl9jYWxsYmFja190ID0g
c3RkOjpmdW5jdGlvbjxib29sKGludCBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcnNlX2V2ZW50X3QgZXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
YXNpY19qc29uJiBwYXJzZWQpPjsKKworCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy8g
Y29uc3RydWN0b3JzIC8vCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICAvLy8gQG5hbWUg
Y29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycworICAgIC8vLyBDb25zdHJ1Y3RvcnMgb2YgY2xh
c3MgQHJlZiBiYXNpY19qc29uLCBjb3B5L21vdmUgY29uc3RydWN0b3IsIGNvcHkKKyAgICAvLy8g
YXNzaWdubWVudCwgc3RhdGljIGZ1bmN0aW9ucyBjcmVhdGluZyBvYmplY3RzLCBhbmQgdGhlIGRl
c3RydWN0b3IuCisgICAgLy8vIEB7CisKKyAgICAvKiEKKyAgICBAYnJpZWYgY3JlYXRlIGFuIGVt
cHR5IHZhbHVlIHdpdGggYSBnaXZlbiB0eXBlCisKKyAgICBDcmVhdGUgYW4gZW1wdHkgSlNPTiB2
YWx1ZSB3aXRoIGEgZ2l2ZW4gdHlwZS4gVGhlIHZhbHVlIHdpbGwgYmUgZGVmYXVsdAorICAgIGlu
aXRpYWxpemVkIHdpdGggYW4gZW1wdHkgdmFsdWUgd2hpY2ggZGVwZW5kcyBvbiB0aGUgdHlwZToK
KworICAgIFZhbHVlIHR5cGUgIHwgaW5pdGlhbCB2YWx1ZQorICAgIC0tLS0tLS0tLS0tIHwgLS0t
LS0tLS0tLS0tLQorICAgIG51bGwgICAgICAgIHwgYG51bGxgCisgICAgYm9vbGVhbiAgICAgfCBg
ZmFsc2VgCisgICAgc3RyaW5nICAgICAgfCBgIiJgCisgICAgbnVtYmVyICAgICAgfCBgMGAKKyAg
ICBvYmplY3QgICAgICB8IGB7fWAKKyAgICBhcnJheSAgICAgICB8IGBbXWAKKworICAgIEBwYXJh
bVtpbl0gdmFsdWVfdHlwZSAgdGhlIHR5cGUgb2YgdGhlIHZhbHVlIHRvIGNyZWF0ZQorCisgICAg
QGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAdGhyb3cgc3RkOjpiYWRfYWxsb2MgaWYgYWxs
b2NhdGlvbiBmb3Igb2JqZWN0LCBhcnJheSwgb3Igc3RyaW5nIHZhbHVlCisgICAgZmFpbHMKKwor
ICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgdGhlIGNvbnN0cnVjdG9y
IGZvciBkaWZmZXJlbnQgQHJlZgorICAgIHZhbHVlX3QgdmFsdWVzLGJhc2ljX2pzb25fX3ZhbHVl
X3R9CisKKyAgICBAc2EgQHJlZiBiYXNpY19qc29uKHN0ZDo6bnVsbHB0cl90KSAtLSBjcmVhdGUg
YSBgbnVsbGAgdmFsdWUKKyAgICBAc2EgQHJlZiBiYXNpY19qc29uKGJvb2xlYW5fdCB2YWx1ZSkg
LS0gY3JlYXRlIGEgYm9vbGVhbiB2YWx1ZQorICAgIEBzYSBAcmVmIGJhc2ljX2pzb24oY29uc3Qg
c3RyaW5nX3QmKSAtLSBjcmVhdGUgYSBzdHJpbmcgdmFsdWUKKyAgICBAc2EgQHJlZiBiYXNpY19q
c29uKGNvbnN0IG9iamVjdF90JikgLS0gY3JlYXRlIGEgb2JqZWN0IHZhbHVlCisgICAgQHNhIEBy
ZWYgYmFzaWNfanNvbihjb25zdCBhcnJheV90JikgLS0gY3JlYXRlIGEgYXJyYXkgdmFsdWUKKyAg
ICBAc2EgQHJlZiBiYXNpY19qc29uKGNvbnN0IG51bWJlcl9mbG9hdF90KSAtLSBjcmVhdGUgYSBu
dW1iZXIKKyAgICAoZmxvYXRpbmctcG9pbnQpIHZhbHVlCisgICAgQHNhIEByZWYgYmFzaWNfanNv
bihjb25zdCBudW1iZXJfaW50ZWdlcl90KSAtLSBjcmVhdGUgYSBudW1iZXIgKGludGVnZXIpCisg
ICAgdmFsdWUKKyAgICBAc2EgQHJlZiBiYXNpY19qc29uKGNvbnN0IG51bWJlcl91bnNpZ25lZF90
KSAtLSBjcmVhdGUgYSBudW1iZXIgKHVuc2lnbmVkKQorICAgIHZhbHVlCisKKyAgICBAc2luY2Ug
dmVyc2lvbiAxLjAuMAorICAgICovCisgICAgYmFzaWNfanNvbihjb25zdCB2YWx1ZV90IHZhbHVl
X3R5cGUpCisgICAgICAgIDogbV90eXBlKHZhbHVlX3R5cGUpLCBtX3ZhbHVlKHZhbHVlX3R5cGUp
CisgICAgeworICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7CisgICAgfQorCisgICAgLyohCisg
ICAgQGJyaWVmIGNyZWF0ZSBhIG51bGwgb2JqZWN0CisKKyAgICBDcmVhdGUgYSBgbnVsbGAgSlNP
TiB2YWx1ZS4gSXQgZWl0aGVyIHRha2VzIGEgbnVsbCBwb2ludGVyIGFzIHBhcmFtZXRlcgorICAg
IChleHBsaWNpdGx5IGNyZWF0aW5nIGBudWxsYCkgb3Igbm8gcGFyYW1ldGVyIChpbXBsaWNpdGx5
IGNyZWF0aW5nIGBudWxsYCkuCisgICAgVGhlIHBhc3NlZCBudWxsIHBvaW50ZXIgaXRzZWxmIGlz
IG5vdCByZWFkIC0tIGl0IGlzIG9ubHkgdXNlZCB0byBjaG9vc2UKKyAgICB0aGUgcmlnaHQgY29u
c3RydWN0b3IuCisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEBleGNlcHRpb25z
YWZldHkgTm8tdGhyb3cgZ3VhcmFudGVlOiB0aGlzIGNvbnN0cnVjdG9yIG5ldmVyIHRocm93cwor
ICAgIGV4Y2VwdGlvbnMuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIHNo
b3dzIHRoZSBjb25zdHJ1Y3RvciB3aXRoIGFuZCB3aXRob3V0IGEKKyAgICBudWxsIHBvaW50ZXIg
cGFyYW1ldGVyLixiYXNpY19qc29uX19udWxscHRyX3R9CisKKyAgICBAc2luY2UgdmVyc2lvbiAx
LjAuMAorICAgICovCisgICAgYmFzaWNfanNvbihzdGQ6Om51bGxwdHJfdCA9IG51bGxwdHIpIG5v
ZXhjZXB0CisgICAgICAgIDogYmFzaWNfanNvbih2YWx1ZV90OjpudWxsKQorICAgIHsKKyAgICAg
ICAgYXNzZXJ0X2ludmFyaWFudCgpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBjcmVh
dGUgYW4gb2JqZWN0IChleHBsaWNpdCkKKworICAgIENyZWF0ZSBhbiBvYmplY3QgSlNPTiB2YWx1
ZSB3aXRoIGEgZ2l2ZW4gY29udGVudC4KKworICAgIEBwYXJhbVtpbl0gdmFsICBhIHZhbHVlIGZv
ciB0aGUgb2JqZWN0CisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhl
IHBhc3NlZCBAYSB2YWwuCisKKyAgICBAdGhyb3cgc3RkOjpiYWRfYWxsb2MgaWYgYWxsb2NhdGlv
biBmb3Igb2JqZWN0IHZhbHVlIGZhaWxzCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2lu
ZyBjb2RlIHNob3dzIHRoZSBjb25zdHJ1Y3RvciB3aXRoIGFuIEByZWYKKyAgICBvYmplY3RfdCBw
YXJhbWV0ZXIuLGJhc2ljX2pzb25fX29iamVjdF90fQorCisgICAgQHNhIEByZWYgYmFzaWNfanNv
bihjb25zdCBDb21wYXRpYmxlT2JqZWN0VHlwZSYpIC0tIGNyZWF0ZSBhbiBvYmplY3QgdmFsdWUK
KyAgICBmcm9tIGEgY29tcGF0aWJsZSBTVEwgY29udGFpbmVyCisKKyAgICBAc2luY2UgdmVyc2lv
biAxLjAuMAorICAgICovCisgICAgYmFzaWNfanNvbihjb25zdCBvYmplY3RfdCYgdmFsKQorICAg
ICAgICA6IG1fdHlwZSh2YWx1ZV90OjpvYmplY3QpLCBtX3ZhbHVlKHZhbCkKKyAgICB7CisgICAg
ICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgY3Jl
YXRlIGFuIG9iamVjdCAoaW1wbGljaXQpCisKKyAgICBDcmVhdGUgYW4gb2JqZWN0IEpTT04gdmFs
dWUgd2l0aCBhIGdpdmVuIGNvbnRlbnQuIFRoaXMgY29uc3RydWN0b3IgYWxsb3dzCisgICAgYW55
IHR5cGUgQGEgQ29tcGF0aWJsZU9iamVjdFR5cGUgdGhhdCBjYW4gYmUgdXNlZCB0byBjb25zdHJ1
Y3QgdmFsdWVzIG9mCisgICAgdHlwZSBAcmVmIG9iamVjdF90LgorCisgICAgQHRwYXJhbSBDb21w
YXRpYmxlT2JqZWN0VHlwZSBBbiBvYmplY3QgdHlwZSB3aG9zZSBga2V5X3R5cGVgIGFuZAorICAg
IGB2YWx1ZV90eXBlYCBpcyBjb21wYXRpYmxlIHRvIEByZWYgb2JqZWN0X3QuIEV4YW1wbGVzIGlu
Y2x1ZGUgYHN0ZDo6bWFwYCwKKyAgICBgc3RkOjp1bm9yZGVyZWRfbWFwYCwgYHN0ZDo6bXVsdGlt
YXBgLCBhbmQgYHN0ZDo6dW5vcmRlcmVkX211bHRpbWFwYCB3aXRoCisgICAgYSBga2V5X3R5cGVg
IG9mIGBzdGQ6OnN0cmluZ2AsIGFuZCBhIGB2YWx1ZV90eXBlYCBmcm9tIHdoaWNoIGEgQHJlZgor
ICAgIGJhc2ljX2pzb24gdmFsdWUgY2FuIGJlIGNvbnN0cnVjdGVkLgorCisgICAgQHBhcmFtW2lu
XSB2YWwgIGEgdmFsdWUgZm9yIHRoZSBvYmplY3QKKworICAgIEBjb21wbGV4aXR5IExpbmVhciBp
biB0aGUgc2l6ZSBvZiB0aGUgcGFzc2VkIEBhIHZhbC4KKworICAgIEB0aHJvdyBzdGQ6OmJhZF9h
bGxvYyBpZiBhbGxvY2F0aW9uIGZvciBvYmplY3QgdmFsdWUgZmFpbHMKKworICAgIEBsaXZlZXhh
bXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgdGhlIGNvbnN0cnVjdG9yIHdpdGggc2V2ZXJh
bAorICAgIGNvbXBhdGlibGUgb2JqZWN0IHR5cGUgcGFyYW1ldGVycy4sYmFzaWNfanNvbl9fQ29t
cGF0aWJsZU9iamVjdFR5cGV9CisKKyAgICBAc2EgQHJlZiBiYXNpY19qc29uKGNvbnN0IG9iamVj
dF90JikgLS0gY3JlYXRlIGFuIG9iamVjdCB2YWx1ZQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4w
LjAKKyAgICAqLworICAgIHRlbXBsYXRlPGNsYXNzIENvbXBhdGlibGVPYmplY3RUeXBlLCB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjwKKyAgICAgICAgICAgICAgICAgc3RkOjppc19jb25zdHJ1Y3Rp
YmxlPHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlwZSwgdHlwZW5hbWUgQ29tcGF0aWJsZU9iamVj
dFR5cGU6OmtleV90eXBlPjo6dmFsdWUgYW5kCisgICAgICAgICAgICAgICAgIHN0ZDo6aXNfY29u
c3RydWN0aWJsZTxiYXNpY19qc29uLCB0eXBlbmFtZSBDb21wYXRpYmxlT2JqZWN0VHlwZTo6bWFw
cGVkX3R5cGU+Ojp2YWx1ZSwgaW50Pjo6dHlwZSA9IDA+CisgICAgYmFzaWNfanNvbihjb25zdCBD
b21wYXRpYmxlT2JqZWN0VHlwZSYgdmFsKQorICAgICAgICA6IG1fdHlwZSh2YWx1ZV90OjpvYmpl
Y3QpCisgICAgeworICAgICAgICB1c2luZyBzdGQ6OmJlZ2luOworICAgICAgICB1c2luZyBzdGQ6
OmVuZDsKKyAgICAgICAgbV92YWx1ZS5vYmplY3QgPSBjcmVhdGU8b2JqZWN0X3Q+KGJlZ2luKHZh
bCksIGVuZCh2YWwpKTsKKyAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOworICAgIH0KKworICAg
IC8qIQorICAgIEBicmllZiBjcmVhdGUgYW4gYXJyYXkgKGV4cGxpY2l0KQorCisgICAgQ3JlYXRl
IGFuIGFycmF5IEpTT04gdmFsdWUgd2l0aCBhIGdpdmVuIGNvbnRlbnQuCisKKyAgICBAcGFyYW1b
aW5dIHZhbCAgYSB2YWx1ZSBmb3IgdGhlIGFycmF5CisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIg
aW4gdGhlIHNpemUgb2YgdGhlIHBhc3NlZCBAYSB2YWwuCisKKyAgICBAdGhyb3cgc3RkOjpiYWRf
YWxsb2MgaWYgYWxsb2NhdGlvbiBmb3IgYXJyYXkgdmFsdWUgZmFpbHMKKworICAgIEBsaXZlZXhh
bXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgdGhlIGNvbnN0cnVjdG9yIHdpdGggYW4gQHJl
ZiBhcnJheV90CisgICAgcGFyYW1ldGVyLixiYXNpY19qc29uX19hcnJheV90fQorCisgICAgQHNh
IEByZWYgYmFzaWNfanNvbihjb25zdCBDb21wYXRpYmxlQXJyYXlUeXBlJikgLS0gY3JlYXRlIGFu
IGFycmF5IHZhbHVlCisgICAgZnJvbSBhIGNvbXBhdGlibGUgU1RMIGNvbnRhaW5lcnMKKworICAg
IEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBiYXNpY19qc29uKGNvbnN0IGFycmF5
X3QmIHZhbCkKKyAgICAgICAgOiBtX3R5cGUodmFsdWVfdDo6YXJyYXkpLCBtX3ZhbHVlKHZhbCkK
KyAgICB7CisgICAgICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKKyAgICB9CisKKyAgICAvKiEKKyAg
ICBAYnJpZWYgY3JlYXRlIGFuIGFycmF5IChpbXBsaWNpdCkKKworICAgIENyZWF0ZSBhbiBhcnJh
eSBKU09OIHZhbHVlIHdpdGggYSBnaXZlbiBjb250ZW50LiBUaGlzIGNvbnN0cnVjdG9yIGFsbG93
cworICAgIGFueSB0eXBlIEBhIENvbXBhdGlibGVBcnJheVR5cGUgdGhhdCBjYW4gYmUgdXNlZCB0
byBjb25zdHJ1Y3QgdmFsdWVzIG9mCisgICAgdHlwZSBAcmVmIGFycmF5X3QuCisKKyAgICBAdHBh
cmFtIENvbXBhdGlibGVBcnJheVR5cGUgQW4gb2JqZWN0IHR5cGUgd2hvc2UgYHZhbHVlX3R5cGVg
IGlzCisgICAgY29tcGF0aWJsZSB0byBAcmVmIGFycmF5X3QuIEV4YW1wbGVzIGluY2x1ZGUgYHN0
ZDo6dmVjdG9yYCwgYHN0ZDo6ZGVxdWVgLAorICAgIGBzdGQ6Omxpc3RgLCBgc3RkOjpmb3J3YXJk
X2xpc3RgLCBgc3RkOjphcnJheWAsIGBzdGQ6OnNldGAsCisgICAgYHN0ZDo6dW5vcmRlcmVkX3Nl
dGAsIGBzdGQ6Om11bHRpc2V0YCwgYW5kIGB1bm9yZGVyZWRfbXVsdGlzZXRgIHdpdGggYQorICAg
IGB2YWx1ZV90eXBlYCBmcm9tIHdoaWNoIGEgQHJlZiBiYXNpY19qc29uIHZhbHVlIGNhbiBiZSBj
b25zdHJ1Y3RlZC4KKworICAgIEBwYXJhbVtpbl0gdmFsICBhIHZhbHVlIGZvciB0aGUgYXJyYXkK
KworICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgc2l6ZSBvZiB0aGUgcGFzc2VkIEBhIHZh
bC4KKworICAgIEB0aHJvdyBzdGQ6OmJhZF9hbGxvYyBpZiBhbGxvY2F0aW9uIGZvciBhcnJheSB2
YWx1ZSBmYWlscworCisgICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29kZSBzaG93cyB0
aGUgY29uc3RydWN0b3Igd2l0aCBzZXZlcmFsCisgICAgY29tcGF0aWJsZSBhcnJheSB0eXBlIHBh
cmFtZXRlcnMuLGJhc2ljX2pzb25fX0NvbXBhdGlibGVBcnJheVR5cGV9CisKKyAgICBAc2EgQHJl
ZiBiYXNpY19qc29uKGNvbnN0IGFycmF5X3QmKSAtLSBjcmVhdGUgYW4gYXJyYXkgdmFsdWUKKwor
ICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICB0ZW1wbGF0ZTxjbGFzcyBDb21w
YXRpYmxlQXJyYXlUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKKyAgICAgICAgICAgICAg
ICAgbm90IHN0ZDo6aXNfc2FtZTxDb21wYXRpYmxlQXJyYXlUeXBlLCB0eXBlbmFtZSBiYXNpY19q
c29uX3Q6Oml0ZXJhdG9yPjo6dmFsdWUgYW5kCisgICAgICAgICAgICAgICAgIG5vdCBzdGQ6Omlz
X3NhbWU8Q29tcGF0aWJsZUFycmF5VHlwZSwgdHlwZW5hbWUgYmFzaWNfanNvbl90Ojpjb25zdF9p
dGVyYXRvcj46OnZhbHVlIGFuZAorICAgICAgICAgICAgICAgICBub3Qgc3RkOjppc19zYW1lPENv
bXBhdGlibGVBcnJheVR5cGUsIHR5cGVuYW1lIGJhc2ljX2pzb25fdDo6cmV2ZXJzZV9pdGVyYXRv
cj46OnZhbHVlIGFuZAorICAgICAgICAgICAgICAgICBub3Qgc3RkOjppc19zYW1lPENvbXBhdGli
bGVBcnJheVR5cGUsIHR5cGVuYW1lIGJhc2ljX2pzb25fdDo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRv
cj46OnZhbHVlIGFuZAorICAgICAgICAgICAgICAgICBub3Qgc3RkOjppc19zYW1lPENvbXBhdGli
bGVBcnJheVR5cGUsIHR5cGVuYW1lIGFycmF5X3Q6Oml0ZXJhdG9yPjo6dmFsdWUgYW5kCisgICAg
ICAgICAgICAgICAgIG5vdCBzdGQ6OmlzX3NhbWU8Q29tcGF0aWJsZUFycmF5VHlwZSwgdHlwZW5h
bWUgYXJyYXlfdDo6Y29uc3RfaXRlcmF0b3I+Ojp2YWx1ZSBhbmQKKyAgICAgICAgICAgICAgICAg
c3RkOjppc19jb25zdHJ1Y3RpYmxlPGJhc2ljX2pzb24sIHR5cGVuYW1lIENvbXBhdGlibGVBcnJh
eVR5cGU6OnZhbHVlX3R5cGU+Ojp2YWx1ZSwgaW50Pjo6dHlwZSA9IDA+CisgICAgYmFzaWNfanNv
bihjb25zdCBDb21wYXRpYmxlQXJyYXlUeXBlJiB2YWwpCisgICAgICAgIDogbV90eXBlKHZhbHVl
X3Q6OmFycmF5KQorICAgIHsKKyAgICAgICAgdXNpbmcgc3RkOjpiZWdpbjsKKyAgICAgICAgdXNp
bmcgc3RkOjplbmQ7CisgICAgICAgIG1fdmFsdWUuYXJyYXkgPSBjcmVhdGU8YXJyYXlfdD4oYmVn
aW4odmFsKSwgZW5kKHZhbCkpOworICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7CisgICAgfQor
CisgICAgLyohCisgICAgQGJyaWVmIGNyZWF0ZSBhIHN0cmluZyAoZXhwbGljaXQpCisKKyAgICBD
cmVhdGUgYW4gc3RyaW5nIEpTT04gdmFsdWUgd2l0aCBhIGdpdmVuIGNvbnRlbnQuCisKKyAgICBA
cGFyYW1baW5dIHZhbCAgYSB2YWx1ZSBmb3IgdGhlIHN0cmluZworCisgICAgQGNvbXBsZXhpdHkg
TGluZWFyIGluIHRoZSBzaXplIG9mIHRoZSBwYXNzZWQgQGEgdmFsLgorCisgICAgQHRocm93IHN0
ZDo6YmFkX2FsbG9jIGlmIGFsbG9jYXRpb24gZm9yIHN0cmluZyB2YWx1ZSBmYWlscworCisgICAg
QGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29kZSBzaG93cyB0aGUgY29uc3RydWN0b3Igd2l0
aCBhbiBAcmVmCisgICAgc3RyaW5nX3QgcGFyYW1ldGVyLixiYXNpY19qc29uX19zdHJpbmdfdH0K
KworICAgIEBzYSBAcmVmIGJhc2ljX2pzb24oY29uc3QgdHlwZW5hbWUgc3RyaW5nX3Q6OnZhbHVl
X3R5cGUqKSAtLSBjcmVhdGUgYQorICAgIHN0cmluZyB2YWx1ZSBmcm9tIGEgY2hhcmFjdGVyIHBv
aW50ZXIKKyAgICBAc2EgQHJlZiBiYXNpY19qc29uKGNvbnN0IENvbXBhdGlibGVTdHJpbmdUeXBl
JikgLS0gY3JlYXRlIGEgc3RyaW5nIHZhbHVlCisgICAgZnJvbSBhIGNvbXBhdGlibGUgc3RyaW5n
IGNvbnRhaW5lcgorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGJhc2lj
X2pzb24oY29uc3Qgc3RyaW5nX3QmIHZhbCkKKyAgICAgICAgOiBtX3R5cGUodmFsdWVfdDo6c3Ry
aW5nKSwgbV92YWx1ZSh2YWwpCisgICAgeworICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7Cisg
ICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGNyZWF0ZSBhIHN0cmluZyAoZXhwbGljaXQpCisK
KyAgICBDcmVhdGUgYSBzdHJpbmcgSlNPTiB2YWx1ZSB3aXRoIGEgZ2l2ZW4gY29udGVudC4KKwor
ICAgIEBwYXJhbVtpbl0gdmFsICBhIGxpdGVyYWwgdmFsdWUgZm9yIHRoZSBzdHJpbmcKKworICAg
IEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgc2l6ZSBvZiB0aGUgcGFzc2VkIEBhIHZhbC4KKwor
ICAgIEB0aHJvdyBzdGQ6OmJhZF9hbGxvYyBpZiBhbGxvY2F0aW9uIGZvciBzdHJpbmcgdmFsdWUg
ZmFpbHMKKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgdGhlIGNv
bnN0cnVjdG9yIHdpdGggc3RyaW5nIGxpdGVyYWwKKyAgICBwYXJhbWV0ZXIuLGJhc2ljX2pzb25f
X3N0cmluZ190X3ZhbHVlX3R5cGV9CisKKyAgICBAc2EgQHJlZiBiYXNpY19qc29uKGNvbnN0IHN0
cmluZ190JikgLS0gY3JlYXRlIGEgc3RyaW5nIHZhbHVlCisgICAgQHNhIEByZWYgYmFzaWNfanNv
bihjb25zdCBDb21wYXRpYmxlU3RyaW5nVHlwZSYpIC0tIGNyZWF0ZSBhIHN0cmluZyB2YWx1ZQor
ICAgIGZyb20gYSBjb21wYXRpYmxlIHN0cmluZyBjb250YWluZXIKKworICAgIEBzaW5jZSB2ZXJz
aW9uIDEuMC4wCisgICAgKi8KKyAgICBiYXNpY19qc29uKGNvbnN0IHR5cGVuYW1lIHN0cmluZ190
Ojp2YWx1ZV90eXBlKiB2YWwpCisgICAgICAgIDogYmFzaWNfanNvbihzdHJpbmdfdCh2YWwpKQor
ICAgIHsKKyAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOworICAgIH0KKworICAgIGJhc2ljX2pz
b24oY29uc3QgdHlwZW5hbWUgc3RyaW5nX3Q6OnZhbHVlX3R5cGUqIHZhbCwgdHlwZW5hbWUgc3Ry
aW5nX3Q6OnNpemVfdHlwZSBjb3VudCkKKyAgICAgICAgOiBiYXNpY19qc29uKHN0cmluZ190KHZh
bCwgY291bnQpKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOworICAgIH0KKwor
ICAgIC8qIQorICAgIEBicmllZiBjcmVhdGUgYSBzdHJpbmcgKGltcGxpY2l0KQorCisgICAgQ3Jl
YXRlIGEgc3RyaW5nIEpTT04gdmFsdWUgd2l0aCBhIGdpdmVuIGNvbnRlbnQuCisKKyAgICBAcGFy
YW1baW5dIHZhbCAgYSB2YWx1ZSBmb3IgdGhlIHN0cmluZworCisgICAgQHRwYXJhbSBDb21wYXRp
YmxlU3RyaW5nVHlwZSBhbiBzdHJpbmcgdHlwZSB3aGljaCBpcyBjb21wYXRpYmxlIHRvIEByZWYK
KyAgICBzdHJpbmdfdCwgZm9yIGluc3RhbmNlIGBzdGQ6OnN0cmluZ2AuCisKKyAgICBAY29tcGxl
eGl0eSBMaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlIHBhc3NlZCBAYSB2YWwuCisKKyAgICBAdGhy
b3cgc3RkOjpiYWRfYWxsb2MgaWYgYWxsb2NhdGlvbiBmb3Igc3RyaW5nIHZhbHVlIGZhaWxzCisK
KyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIHNob3dzIHRoZSBjb25zdHJ1Y3Rp
b24gb2YgYSBzdHJpbmcgdmFsdWUKKyAgICBmcm9tIGEgY29tcGF0aWJsZSB0eXBlLixiYXNpY19q
c29uX19Db21wYXRpYmxlU3RyaW5nVHlwZX0KKworICAgIEBzYSBAcmVmIGJhc2ljX2pzb24oY29u
c3Qgc3RyaW5nX3QmKSAtLSBjcmVhdGUgYSBzdHJpbmcgdmFsdWUKKyAgICBAc2EgQHJlZiBiYXNp
Y19qc29uKGNvbnN0IHR5cGVuYW1lIHN0cmluZ190Ojp2YWx1ZV90eXBlKikgLS0gY3JlYXRlIGEK
KyAgICBzdHJpbmcgdmFsdWUgZnJvbSBhIGNoYXJhY3RlciBwb2ludGVyCisKKyAgICBAc2luY2Ug
dmVyc2lvbiAxLjAuMAorICAgICovCisgICAgdGVtcGxhdGU8Y2xhc3MgQ29tcGF0aWJsZVN0cmlu
Z1R5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAorICAgICAgICAgICAgICAgICBzdGQ6Omlz
X2NvbnN0cnVjdGlibGU8c3RyaW5nX3QsIENvbXBhdGlibGVTdHJpbmdUeXBlPjo6dmFsdWUsIGlu
dD46OnR5cGUgPSAwPgorICAgIGJhc2ljX2pzb24oY29uc3QgQ29tcGF0aWJsZVN0cmluZ1R5cGUm
IHZhbCkKKyAgICAgICAgOiBiYXNpY19qc29uKHN0cmluZ190KHZhbCkpCisgICAgeworICAgICAg
ICBhc3NlcnRfaW52YXJpYW50KCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGNyZWF0
ZSBhIGJvb2xlYW4gKGV4cGxpY2l0KQorCisgICAgQ3JlYXRlcyBhIEpTT04gYm9vbGVhbiB0eXBl
IGZyb20gYSBnaXZlbiB2YWx1ZS4KKworICAgIEBwYXJhbVtpbl0gdmFsICBhIGJvb2xlYW4gdmFs
dWUgdG8gc3RvcmUKKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQGxpdmVleGFt
cGxle1RoZSBleGFtcGxlIGJlbG93IGRlbW9uc3RyYXRlcyBib29sZWFuCisgICAgdmFsdWVzLixi
YXNpY19qc29uX19ib29sZWFuX3R9CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICov
CisgICAgYmFzaWNfanNvbihib29sZWFuX3QgdmFsKSBub2V4Y2VwdAorICAgICAgICA6IG1fdHlw
ZSh2YWx1ZV90Ojpib29sZWFuKSwgbV92YWx1ZSh2YWwpCisgICAgeworICAgICAgICBhc3NlcnRf
aW52YXJpYW50KCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGNyZWF0ZSBhbiBpbnRl
Z2VyIG51bWJlciAoZXhwbGljaXQpCisKKyAgICBDcmVhdGUgYW4gaW50ZWdlciBudW1iZXIgSlNP
TiB2YWx1ZSB3aXRoIGEgZ2l2ZW4gY29udGVudC4KKworICAgIEB0cGFyYW0gVCBBIGhlbHBlciB0
eXBlIHRvIHJlbW92ZSB0aGlzIGZ1bmN0aW9uIHZpYSBTRklOQUUgaW4gY2FzZSBAcmVmCisgICAg
bnVtYmVyX2ludGVnZXJfdCBpcyB0aGUgc2FtZSBhcyBgaW50YC4gSW4gdGhpcyBjYXNlLCB0aGlz
IGNvbnN0cnVjdG9yCisgICAgd291bGQgaGF2ZSB0aGUgc2FtZSBzaWduYXR1cmUgYXMgQHJlZiBi
YXNpY19qc29uKGNvbnN0IGludCB2YWx1ZSkuIE5vdGUKKyAgICB0aGUgaGVscGVyIHR5cGUgQGEg
VCBpcyBub3QgdmlzaWJsZSBpbiB0aGlzIGNvbnN0cnVjdG9yJ3MgaW50ZXJmYWNlLgorCisgICAg
QHBhcmFtW2luXSB2YWwgIGFuIGludGVnZXIgdG8gY3JlYXRlIGEgSlNPTiBudW1iZXIgZnJvbQor
CisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1w
bGUgYmVsb3cgc2hvd3MgdGhlIGNvbnN0cnVjdGlvbiBvZiBhbiBpbnRlZ2VyCisgICAgbnVtYmVy
IHZhbHVlLixiYXNpY19qc29uX19udW1iZXJfaW50ZWdlcl90fQorCisgICAgQHNhIEByZWYgYmFz
aWNfanNvbihjb25zdCBpbnQpIC0tIGNyZWF0ZSBhIG51bWJlciB2YWx1ZSAoaW50ZWdlcikKKyAg
ICBAc2EgQHJlZiBiYXNpY19qc29uKGNvbnN0IENvbXBhdGlibGVOdW1iZXJJbnRlZ2VyVHlwZSkg
LS0gY3JlYXRlIGEgbnVtYmVyCisgICAgdmFsdWUgKGludGVnZXIpIGZyb20gYSBjb21wYXRpYmxl
IG51bWJlciB0eXBlCisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8CisgICAgICAgICAgICAg
ICAgIG5vdCAoc3RkOjppc19zYW1lPFQsIGludD46OnZhbHVlKSBhbmQKKyAgICAgICAgICAgICAg
ICAgc3RkOjppc19zYW1lPFQsIG51bWJlcl9pbnRlZ2VyX3Q+Ojp2YWx1ZSwgaW50Pjo6dHlwZSA9
IDA+CisgICAgYmFzaWNfanNvbihjb25zdCBudW1iZXJfaW50ZWdlcl90IHZhbCkgbm9leGNlcHQK
KyAgICAgICAgOiBtX3R5cGUodmFsdWVfdDo6bnVtYmVyX2ludGVnZXIpLCBtX3ZhbHVlKHZhbCkK
KyAgICB7CisgICAgICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKKyAgICB9CisKKyAgICAvKiEKKyAg
ICBAYnJpZWYgY3JlYXRlIGFuIGludGVnZXIgbnVtYmVyIGZyb20gYW4gZW51bSB0eXBlIChleHBs
aWNpdCkKKworICAgIENyZWF0ZSBhbiBpbnRlZ2VyIG51bWJlciBKU09OIHZhbHVlIHdpdGggYSBn
aXZlbiBjb250ZW50LgorCisgICAgQHBhcmFtW2luXSB2YWwgIGFuIGludGVnZXIgdG8gY3JlYXRl
IGEgSlNPTiBudW1iZXIgZnJvbQorCisgICAgQG5vdGUgVGhpcyBjb25zdHJ1Y3RvciBhbGxvd3Mg
dG8gcGFzcyBlbnVtcyBkaXJlY3RseSB0byBhIGNvbnN0cnVjdG9yLiBBcworICAgIEMrKyBoYXMg
bm8gd2F5IG9mIHNwZWNpZnlpbmcgdGhlIHR5cGUgb2YgYW4gYW5vbnltb3VzIGVudW0gZXhwbGlj
aXRseSwgd2UKKyAgICBjYW4gb25seSByZWx5IG9uIHRoZSBmYWN0IHRoYXQgc3VjaCB2YWx1ZXMg
aW1wbGljaXRseSBjb252ZXJ0IHRvIGludC4gQXMKKyAgICBpbnQgbWF5IGFscmVhZHkgYmUgdGhl
IHNhbWUgdHlwZSBvZiBudW1iZXJfaW50ZWdlcl90LCB3ZSBtYXkgbmVlZCB0bworICAgIHN3aXRj
aCBvZmYgdGhlIGNvbnN0cnVjdG9yIEByZWYgYmFzaWNfanNvbihjb25zdCBudW1iZXJfaW50ZWdl
cl90KS4KKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQGxpdmVleGFtcGxle1Ro
ZSBleGFtcGxlIGJlbG93IHNob3dzIHRoZSBjb25zdHJ1Y3Rpb24gb2YgYW4gaW50ZWdlcgorICAg
IG51bWJlciB2YWx1ZSBmcm9tIGFuIGFub255bW91cyBlbnVtLixiYXNpY19qc29uX19jb25zdF9p
bnR9CisKKyAgICBAc2EgQHJlZiBiYXNpY19qc29uKGNvbnN0IG51bWJlcl9pbnRlZ2VyX3QpIC0t
IGNyZWF0ZSBhIG51bWJlciB2YWx1ZQorICAgIChpbnRlZ2VyKQorICAgIEBzYSBAcmVmIGJhc2lj
X2pzb24oY29uc3QgQ29tcGF0aWJsZU51bWJlckludGVnZXJUeXBlKSAtLSBjcmVhdGUgYSBudW1i
ZXIKKyAgICB2YWx1ZSAoaW50ZWdlcikgZnJvbSBhIGNvbXBhdGlibGUgbnVtYmVyIHR5cGUKKwor
ICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBiYXNpY19qc29uKGNvbnN0IGlu
dCB2YWwpIG5vZXhjZXB0CisgICAgICAgIDogbV90eXBlKHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2Vy
KSwKKyAgICAgICAgICBtX3ZhbHVlKHN0YXRpY19jYXN0PG51bWJlcl9pbnRlZ2VyX3Q+KHZhbCkp
CisgICAgeworICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7CisgICAgfQorCisgICAgLyohCisg
ICAgQGJyaWVmIGNyZWF0ZSBhbiBpbnRlZ2VyIG51bWJlciAoaW1wbGljaXQpCisKKyAgICBDcmVh
dGUgYW4gaW50ZWdlciBudW1iZXIgSlNPTiB2YWx1ZSB3aXRoIGEgZ2l2ZW4gY29udGVudC4gVGhp
cyBjb25zdHJ1Y3RvcgorICAgIGFsbG93cyBhbnkgdHlwZSBAYSBDb21wYXRpYmxlTnVtYmVySW50
ZWdlclR5cGUgdGhhdCBjYW4gYmUgdXNlZCB0bworICAgIGNvbnN0cnVjdCB2YWx1ZXMgb2YgdHlw
ZSBAcmVmIG51bWJlcl9pbnRlZ2VyX3QuCisKKyAgICBAdHBhcmFtIENvbXBhdGlibGVOdW1iZXJJ
bnRlZ2VyVHlwZSBBbiBpbnRlZ2VyIHR5cGUgd2hpY2ggaXMgY29tcGF0aWJsZSB0bworICAgIEBy
ZWYgbnVtYmVyX2ludGVnZXJfdC4gRXhhbXBsZXMgaW5jbHVkZSB0aGUgdHlwZXMgYGludGAsIGBp
bnQzMl90YCwKKyAgICBgbG9uZ2AsIGFuZCBgc2hvcnRgLgorCisgICAgQHBhcmFtW2luXSB2YWwg
IGFuIGludGVnZXIgdG8gY3JlYXRlIGEgSlNPTiBudW1iZXIgZnJvbQorCisgICAgQGNvbXBsZXhp
dHkgQ29uc3RhbnQuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3Mg
dGhlIGNvbnN0cnVjdGlvbiBvZiBzZXZlcmFsIGludGVnZXIKKyAgICBudW1iZXIgdmFsdWVzIGZy
b20gY29tcGF0aWJsZQorICAgIHR5cGVzLixiYXNpY19qc29uX19Db21wYXRpYmxlSW50ZWdlck51
bWJlclR5cGV9CisKKyAgICBAc2EgQHJlZiBiYXNpY19qc29uKGNvbnN0IG51bWJlcl9pbnRlZ2Vy
X3QpIC0tIGNyZWF0ZSBhIG51bWJlciB2YWx1ZQorICAgIChpbnRlZ2VyKQorICAgIEBzYSBAcmVm
IGJhc2ljX2pzb24oY29uc3QgaW50KSAtLSBjcmVhdGUgYSBudW1iZXIgdmFsdWUgKGludGVnZXIp
CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29tcGF0aWJsZU51bWJlckludGVnZXJUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwK
KyAgICAgICAgICAgICAgICAgc3RkOjppc19jb25zdHJ1Y3RpYmxlPG51bWJlcl9pbnRlZ2VyX3Qs
IENvbXBhdGlibGVOdW1iZXJJbnRlZ2VyVHlwZT46OnZhbHVlIGFuZAorICAgICAgICAgICAgICAg
ICBzdGQ6Om51bWVyaWNfbGltaXRzPENvbXBhdGlibGVOdW1iZXJJbnRlZ2VyVHlwZT46OmlzX2lu
dGVnZXIgYW5kCisgICAgICAgICAgICAgICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8Q29tcGF0aWJs
ZU51bWJlckludGVnZXJUeXBlPjo6aXNfc2lnbmVkLAorICAgICAgICAgICAgICAgICBDb21wYXRp
YmxlTnVtYmVySW50ZWdlclR5cGU+Ojp0eXBlID0gMD4KKyAgICBiYXNpY19qc29uKGNvbnN0IENv
bXBhdGlibGVOdW1iZXJJbnRlZ2VyVHlwZSB2YWwpIG5vZXhjZXB0CisgICAgICAgIDogbV90eXBl
KHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyKSwKKyAgICAgICAgICBtX3ZhbHVlKHN0YXRpY19jYXN0
PG51bWJlcl9pbnRlZ2VyX3Q+KHZhbCkpCisgICAgeworICAgICAgICBhc3NlcnRfaW52YXJpYW50
KCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGNyZWF0ZSBhbiB1bnNpZ25lZCBpbnRl
Z2VyIG51bWJlciAoZXhwbGljaXQpCisKKyAgICBDcmVhdGUgYW4gdW5zaWduZWQgaW50ZWdlciBu
dW1iZXIgSlNPTiB2YWx1ZSB3aXRoIGEgZ2l2ZW4gY29udGVudC4KKworICAgIEB0cGFyYW0gVCAg
aGVscGVyIHR5cGUgdG8gY29tcGFyZSBudW1iZXJfdW5zaWduZWRfdCBhbmQgdW5zaWduZWQgaW50
IChub3QKKyAgICB2aXNpYmxlIGluKSB0aGUgaW50ZXJmYWNlLgorCisgICAgQHBhcmFtW2luXSB2
YWwgIGFuIGludGVnZXIgdG8gY3JlYXRlIGEgSlNPTiBudW1iZXIgZnJvbQorCisgICAgQGNvbXBs
ZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAc2EgQHJlZiBiYXNpY19qc29uKGNvbnN0IENvbXBhdGli
bGVOdW1iZXJVbnNpZ25lZFR5cGUpIC0tIGNyZWF0ZSBhIG51bWJlcgorICAgIHZhbHVlICh1bnNp
Z25lZCBpbnRlZ2VyKSBmcm9tIGEgY29tcGF0aWJsZSBudW1iZXIgdHlwZQorCisgICAgQHNpbmNl
IHZlcnNpb24gMi4wLjAKKyAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPAorICAgICAgICAgICAgICAgICBub3QgKHN0ZDo6aXNfc2FtZTxULCBp
bnQ+Ojp2YWx1ZSkgYW5kCisgICAgICAgICAgICAgICAgIHN0ZDo6aXNfc2FtZTxULCBudW1iZXJf
dW5zaWduZWRfdD46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4KKyAgICBiYXNpY19qc29uKGNvbnN0
IG51bWJlcl91bnNpZ25lZF90IHZhbCkgbm9leGNlcHQKKyAgICAgICAgOiBtX3R5cGUodmFsdWVf
dDo6bnVtYmVyX3Vuc2lnbmVkKSwgbV92YWx1ZSh2YWwpCisgICAgeworICAgICAgICBhc3NlcnRf
aW52YXJpYW50KCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGNyZWF0ZSBhbiB1bnNp
Z25lZCBudW1iZXIgKGltcGxpY2l0KQorCisgICAgQ3JlYXRlIGFuIHVuc2lnbmVkIG51bWJlciBK
U09OIHZhbHVlIHdpdGggYSBnaXZlbiBjb250ZW50LiBUaGlzCisgICAgY29uc3RydWN0b3IgYWxs
b3dzIGFueSB0eXBlIEBhIENvbXBhdGlibGVOdW1iZXJVbnNpZ25lZFR5cGUgdGhhdCBjYW4gYmUK
KyAgICB1c2VkIHRvIGNvbnN0cnVjdCB2YWx1ZXMgb2YgdHlwZSBAcmVmIG51bWJlcl91bnNpZ25l
ZF90LgorCisgICAgQHRwYXJhbSBDb21wYXRpYmxlTnVtYmVyVW5zaWduZWRUeXBlIEFuIGludGVn
ZXIgdHlwZSB3aGljaCBpcyBjb21wYXRpYmxlCisgICAgdG8gQHJlZiBudW1iZXJfdW5zaWduZWRf
dC4gRXhhbXBsZXMgbWF5IGluY2x1ZGUgdGhlIHR5cGVzIGB1bnNpZ25lZCBpbnRgLAorICAgIGB1
aW50MzJfdGAsIG9yIGB1bnNpZ25lZCBzaG9ydGAuCisKKyAgICBAcGFyYW1baW5dIHZhbCAgYW4g
dW5zaWduZWQgaW50ZWdlciB0byBjcmVhdGUgYSBKU09OIG51bWJlciBmcm9tCisKKyAgICBAY29t
cGxleGl0eSBDb25zdGFudC4KKworICAgIEBzYSBAcmVmIGJhc2ljX2pzb24oY29uc3QgbnVtYmVy
X3Vuc2lnbmVkX3QpIC0tIGNyZWF0ZSBhIG51bWJlciB2YWx1ZQorICAgICh1bnNpZ25lZCkKKwor
ICAgIEBzaW5jZSB2ZXJzaW9uIDIuMC4wCisgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
b21wYXRpYmxlTnVtYmVyVW5zaWduZWRUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZiA8Cisg
ICAgICAgICAgICAgICAgIHN0ZDo6aXNfY29uc3RydWN0aWJsZTxudW1iZXJfdW5zaWduZWRfdCwg
Q29tcGF0aWJsZU51bWJlclVuc2lnbmVkVHlwZT46OnZhbHVlIGFuZAorICAgICAgICAgICAgICAg
ICBzdGQ6Om51bWVyaWNfbGltaXRzPENvbXBhdGlibGVOdW1iZXJVbnNpZ25lZFR5cGU+Ojppc19p
bnRlZ2VyIGFuZAorICAgICAgICAgICAgICAgICBub3Qgc3RkOjpudW1lcmljX2xpbWl0czxDb21w
YXRpYmxlTnVtYmVyVW5zaWduZWRUeXBlPjo6aXNfc2lnbmVkLAorICAgICAgICAgICAgICAgICBD
b21wYXRpYmxlTnVtYmVyVW5zaWduZWRUeXBlPjo6dHlwZSA9IDA+CisgICAgYmFzaWNfanNvbihj
b25zdCBDb21wYXRpYmxlTnVtYmVyVW5zaWduZWRUeXBlIHZhbCkgbm9leGNlcHQKKyAgICAgICAg
OiBtX3R5cGUodmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkKSwKKyAgICAgICAgICBtX3ZhbHVlKHN0
YXRpY19jYXN0PG51bWJlcl91bnNpZ25lZF90Pih2YWwpKQorICAgIHsKKyAgICAgICAgYXNzZXJ0
X2ludmFyaWFudCgpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBjcmVhdGUgYSBmbG9h
dGluZy1wb2ludCBudW1iZXIgKGV4cGxpY2l0KQorCisgICAgQ3JlYXRlIGEgZmxvYXRpbmctcG9p
bnQgbnVtYmVyIEpTT04gdmFsdWUgd2l0aCBhIGdpdmVuIGNvbnRlbnQuCisKKyAgICBAcGFyYW1b
aW5dIHZhbCAgYSBmbG9hdGluZy1wb2ludCB2YWx1ZSB0byBjcmVhdGUgYSBKU09OIG51bWJlciBm
cm9tCisKKyAgICBAbm90ZSBbUkZDIDcxNTldKGh0dHA6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZj
L3JmYzcxNTkudHh0KSwgc2VjdGlvbiA2CisgICAgZGlzYWxsb3dzIE5hTiB2YWx1ZXM6CisgICAg
PiBOdW1lcmljIHZhbHVlcyB0aGF0IGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiB0aGUgZ3JhbW1h
ciBiZWxvdyAoc3VjaCBhcworICAgID4gSW5maW5pdHkgYW5kIE5hTikgYXJlIG5vdCBwZXJtaXR0
ZWQuCisgICAgSW4gY2FzZSB0aGUgcGFyYW1ldGVyIEBhIHZhbCBpcyBub3QgYSBudW1iZXIsIGEg
SlNPTiBudWxsIHZhbHVlIGlzIGNyZWF0ZWQKKyAgICBpbnN0ZWFkLgorCisgICAgQGNvbXBsZXhp
dHkgQ29uc3RhbnQuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBleGFtcGxlIGNy
ZWF0ZXMgc2V2ZXJhbCBmbG9hdGluZy1wb2ludAorICAgIHZhbHVlcy4sYmFzaWNfanNvbl9fbnVt
YmVyX2Zsb2F0X3R9CisKKyAgICBAc2EgQHJlZiBiYXNpY19qc29uKGNvbnN0IENvbXBhdGlibGVO
dW1iZXJGbG9hdFR5cGUpIC0tIGNyZWF0ZSBhIG51bWJlcgorICAgIHZhbHVlIChmbG9hdGluZy1w
b2ludCkgZnJvbSBhIGNvbXBhdGlibGUgbnVtYmVyIHR5cGUKKworICAgIEBzaW5jZSB2ZXJzaW9u
IDEuMC4wCisgICAgKi8KKyAgICBiYXNpY19qc29uKGNvbnN0IG51bWJlcl9mbG9hdF90IHZhbCkg
bm9leGNlcHQKKyAgICAgICAgOiBtX3R5cGUodmFsdWVfdDo6bnVtYmVyX2Zsb2F0KSwgbV92YWx1
ZSh2YWwpCisgICAgeworICAgICAgICAvLyByZXBsYWNlIGluZmluaXR5IGFuZCBOQU4gYnkgbnVs
bAorICAgICAgICBpZiAobm90IHN0ZDo6aXNmaW5pdGUodmFsKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbV90eXBlID0gdmFsdWVfdDo6bnVsbDsKKyAgICAgICAgICAgIG1fdmFsdWUgPSBqc29u
X3ZhbHVlKCk7CisgICAgICAgIH0KKworICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7CisgICAg
fQorCisgICAgLyohCisgICAgQGJyaWVmIGNyZWF0ZSBhbiBmbG9hdGluZy1wb2ludCBudW1iZXIg
KGltcGxpY2l0KQorCisgICAgQ3JlYXRlIGFuIGZsb2F0aW5nLXBvaW50IG51bWJlciBKU09OIHZh
bHVlIHdpdGggYSBnaXZlbiBjb250ZW50LiBUaGlzCisgICAgY29uc3RydWN0b3IgYWxsb3dzIGFu
eSB0eXBlIEBhIENvbXBhdGlibGVOdW1iZXJGbG9hdFR5cGUgdGhhdCBjYW4gYmUgdXNlZAorICAg
IHRvIGNvbnN0cnVjdCB2YWx1ZXMgb2YgdHlwZSBAcmVmIG51bWJlcl9mbG9hdF90LgorCisgICAg
QHRwYXJhbSBDb21wYXRpYmxlTnVtYmVyRmxvYXRUeXBlIEEgZmxvYXRpbmctcG9pbnQgdHlwZSB3
aGljaCBpcworICAgIGNvbXBhdGlibGUgdG8gQHJlZiBudW1iZXJfZmxvYXRfdC4gRXhhbXBsZXMg
bWF5IGluY2x1ZGUgdGhlIHR5cGVzIGBmbG9hdGAKKyAgICBvciBgZG91YmxlYC4KKworICAgIEBw
YXJhbVtpbl0gdmFsICBhIGZsb2F0aW5nLXBvaW50IHRvIGNyZWF0ZSBhIEpTT04gbnVtYmVyIGZy
b20KKworICAgIEBub3RlIFtSRkMgNzE1OV0oaHR0cDovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMv
cmZjNzE1OS50eHQpLCBzZWN0aW9uIDYKKyAgICBkaXNhbGxvd3MgTmFOIHZhbHVlczoKKyAgICA+
IE51bWVyaWMgdmFsdWVzIHRoYXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIHRoZSBncmFtbWFy
IGJlbG93IChzdWNoIGFzCisgICAgPiBJbmZpbml0eSBhbmQgTmFOKSBhcmUgbm90IHBlcm1pdHRl
ZC4KKyAgICBJbiBjYXNlIHRoZSBwYXJhbWV0ZXIgQGEgdmFsIGlzIG5vdCBhIG51bWJlciwgYSBK
U09OIG51bGwgdmFsdWUgaXMKKyAgICBjcmVhdGVkIGluc3RlYWQuCisKKyAgICBAY29tcGxleGl0
eSBDb25zdGFudC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyB0
aGUgY29uc3RydWN0aW9uIG9mIHNldmVyYWwKKyAgICBmbG9hdGluZy1wb2ludCBudW1iZXIgdmFs
dWVzIGZyb20gY29tcGF0aWJsZQorICAgIHR5cGVzLixiYXNpY19qc29uX19Db21wYXRpYmxlTnVt
YmVyRmxvYXRUeXBlfQorCisgICAgQHNhIEByZWYgYmFzaWNfanNvbihjb25zdCBudW1iZXJfZmxv
YXRfdCkgLS0gY3JlYXRlIGEgbnVtYmVyIHZhbHVlCisgICAgKGZsb2F0aW5nLXBvaW50KQorCisg
ICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENv
bXBhdGlibGVOdW1iZXJGbG9hdFR5cGUsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8CisgICAgICAgICAgICAgICAgIHN0ZDo6aXNfY29uc3RydWN0aWJsZTxudW1iZXJfZmxvYXRf
dCwgQ29tcGF0aWJsZU51bWJlckZsb2F0VHlwZT46OnZhbHVlIGFuZAorICAgICAgICAgICAgICAg
ICBzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PENvbXBhdGlibGVOdW1iZXJGbG9hdFR5cGU+Ojp2YWx1
ZT46OnR5cGU+CisgICAgYmFzaWNfanNvbihjb25zdCBDb21wYXRpYmxlTnVtYmVyRmxvYXRUeXBl
IHZhbCkgbm9leGNlcHQKKyAgICAgICAgOiBiYXNpY19qc29uKG51bWJlcl9mbG9hdF90KHZhbCkp
CisgICAgeworICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7CisgICAgfQorCisgICAgLyohCisg
ICAgQGJyaWVmIGNyZWF0ZSBhIGNvbnRhaW5lciAoYXJyYXkgb3Igb2JqZWN0KSBmcm9tIGFuIGlu
aXRpYWxpemVyIGxpc3QKKworICAgIENyZWF0ZXMgYSBKU09OIHZhbHVlIG9mIHR5cGUgYXJyYXkg
b3Igb2JqZWN0IGZyb20gdGhlIHBhc3NlZCBpbml0aWFsaXplcgorICAgIGxpc3QgQGEgaW5pdC4g
SW4gY2FzZSBAYSB0eXBlX2RlZHVjdGlvbiBpcyBgdHJ1ZWAgKGRlZmF1bHQpLCB0aGUgdHlwZSBv
ZgorICAgIHRoZSBKU09OIHZhbHVlIHRvIGJlIGNyZWF0ZWQgaXMgZGVkdWN0ZWQgZnJvbSB0aGUg
aW5pdGlhbGl6ZXIgbGlzdCBAYSBpbml0CisgICAgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcg
cnVsZXM6CisKKyAgICAxLiBJZiB0aGUgbGlzdCBpcyBlbXB0eSwgYW4gZW1wdHkgSlNPTiBvYmpl
Y3QgdmFsdWUgYHt9YCBpcyBjcmVhdGVkLgorICAgIDIuIElmIHRoZSBsaXN0IGNvbnNpc3RzIG9m
IHBhaXJzIHdob3NlIGZpcnN0IGVsZW1lbnQgaXMgYSBzdHJpbmcsIGEgSlNPTgorICAgICAgIG9i
amVjdCB2YWx1ZSBpcyBjcmVhdGVkIHdoZXJlIHRoZSBmaXJzdCBlbGVtZW50cyBvZiB0aGUgcGFp
cnMgYXJlCisgICAgICAgdHJlYXRlZCBhcyBrZXlzIGFuZCB0aGUgc2Vjb25kIGVsZW1lbnRzIGFy
ZSBhcyB2YWx1ZXMuCisgICAgMy4gSW4gYWxsIG90aGVyIGNhc2VzLCBhbiBhcnJheSBpcyBjcmVh
dGVkLgorCisgICAgVGhlIHJ1bGVzIGFpbSB0byBjcmVhdGUgdGhlIGJlc3QgZml0IGJldHdlZW4g
YSBDKysgaW5pdGlhbGl6ZXIgbGlzdCBhbmQKKyAgICBKU09OIHZhbHVlcy4gVGhlIHJhdGlvbmFs
ZSBpcyBhcyBmb2xsb3dzOgorCisgICAgMS4gVGhlIGVtcHR5IGluaXRpYWxpemVyIGxpc3QgaXMg
d3JpdHRlbiBhcyBge31gIHdoaWNoIGlzIGV4YWN0bHkgYW4gZW1wdHkKKyAgICAgICBKU09OIG9i
amVjdC4KKyAgICAyLiBDKysgaGFzIG5vdyB3YXkgb2YgZGVzY3JpYmluZyBtYXBwZWQgdHlwZXMg
b3RoZXIgdGhhbiB0byBsaXN0IGEgbGlzdCBvZgorICAgICAgIHBhaXJzLiBBcyBKU09OIHJlcXVp
cmVzIHRoYXQga2V5cyBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLCBydWxlIDIgaXMgdGhlCisgICAg
ICAgd2Vha2VzdCBjb25zdHJhaW50IG9uZSBjYW4gcG9zZSBvbiBpbml0aWFsaXplciBsaXN0cyB0
byBpbnRlcnByZXQgdGhlbQorICAgICAgIGFzIGFuIG9iamVjdC4KKyAgICAzLiBJbiBhbGwgb3Ro
ZXIgY2FzZXMsIHRoZSBpbml0aWFsaXplciBsaXN0IGNvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBh
cworICAgICAgIEpTT04gb2JqZWN0IHR5cGUsIHNvIGludGVycHJldGluZyBpdCBhcyBKU09OIGFy
cmF5IHR5cGUgaXMgc2FmZS4KKworICAgIFdpdGggdGhlIHJ1bGVzIGRlc2NyaWJlZCBhYm92ZSwg
dGhlIGZvbGxvd2luZyBKU09OIHZhbHVlcyBjYW5ub3QgYmUKKyAgICBleHByZXNzZWQgYnkgYW4g
aW5pdGlhbGl6ZXIgbGlzdDoKKworICAgIC0gdGhlIGVtcHR5IGFycmF5IChgW11gKTogdXNlIEBy
ZWYgYXJyYXkoc3RkOjppbml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+KQorICAgICAgd2l0aCBh
biBlbXB0eSBpbml0aWFsaXplciBsaXN0IGluIHRoaXMgY2FzZQorICAgIC0gYXJyYXlzIHdob3Nl
IGVsZW1lbnRzIHNhdGlzZnkgcnVsZSAyOiB1c2UgQHJlZgorICAgICAgYXJyYXkoc3RkOjppbml0
aWFsaXplcl9saXN0PGJhc2ljX2pzb24+KSB3aXRoIHRoZSBzYW1lIGluaXRpYWxpemVyIGxpc3QK
KyAgICAgIGluIHRoaXMgY2FzZQorCisgICAgQG5vdGUgV2hlbiB1c2VkIHdpdGhvdXQgcGFyZW50
aGVzZXMgYXJvdW5kIGFuIGVtcHR5IGluaXRpYWxpemVyIGxpc3QsIEByZWYKKyAgICBiYXNpY19q
c29uKCkgaXMgY2FsbGVkIGluc3RlYWQgb2YgdGhpcyBmdW5jdGlvbiwgeWllbGRpbmcgdGhlIEpT
T04gbnVsbAorICAgIHZhbHVlLgorCisgICAgQHBhcmFtW2luXSBpbml0ICBpbml0aWFsaXplciBs
aXN0IHdpdGggSlNPTiB2YWx1ZXMKKworICAgIEBwYXJhbVtpbl0gdHlwZV9kZWR1Y3Rpb24gaW50
ZXJuYWwgcGFyYW1ldGVyOyB3aGVuIHNldCB0byBgdHJ1ZWAsIHRoZSB0eXBlCisgICAgb2YgdGhl
IEpTT04gdmFsdWUgaXMgZGVkdWN0ZWQgZnJvbSB0aGUgaW5pdGlhbGl6ZXIgbGlzdCBAYSBpbml0
OyB3aGVuIHNldAorICAgIHRvIGBmYWxzZWAsIHRoZSB0eXBlIHByb3ZpZGVkIHZpYSBAYSBtYW51
YWxfdHlwZSBpcyBmb3JjZWQuIFRoaXMgbW9kZSBpcworICAgIHVzZWQgYnkgdGhlIGZ1bmN0aW9u
cyBAcmVmIGFycmF5KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxiYXNpY19qc29uPikgYW5kCisgICAg
QHJlZiBvYmplY3Qoc3RkOjppbml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+KS4KKworICAgIEBw
YXJhbVtpbl0gbWFudWFsX3R5cGUgaW50ZXJuYWwgcGFyYW1ldGVyOyB3aGVuIEBhIHR5cGVfZGVk
dWN0aW9uIGlzIHNldAorICAgIHRvIGBmYWxzZWAsIHRoZSBjcmVhdGVkIEpTT04gdmFsdWUgd2ls
bCB1c2UgdGhlIHByb3ZpZGVkIHR5cGUgKG9ubHkgQHJlZgorICAgIHZhbHVlX3Q6OmFycmF5IGFu
ZCBAcmVmIHZhbHVlX3Q6Om9iamVjdCBhcmUgdmFsaWQpOyB3aGVuIEBhIHR5cGVfZGVkdWN0aW9u
CisgICAgaXMgc2V0IHRvIGB0cnVlYCwgdGhpcyBwYXJhbWV0ZXIgaGFzIG5vIGVmZmVjdAorCisg
ICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIEBhIHR5cGVfZGVkdWN0aW9uIGlzIGBmYWxz
ZWAsIEBhIG1hbnVhbF90eXBlCisgICAgaXMgYHZhbHVlX3Q6Om9iamVjdGAsIGJ1dCBAYSBpbml0
IGNvbnRhaW5zIGFuIGVsZW1lbnQgd2hpY2ggaXMgbm90IGEgcGFpcgorICAgIHdob3NlIGZpcnN0
IGVsZW1lbnQgaXMgYSBzdHJpbmc7IGV4YW1wbGU6IGAiY2Fubm90IGNyZWF0ZSBvYmplY3QgZnJv
bQorICAgIGluaXRpYWxpemVyIGxpc3QiYAorCisgICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIHRo
ZSBzaXplIG9mIHRoZSBpbml0aWFsaXplciBsaXN0IEBhIGluaXQuCisKKyAgICBAbGl2ZWV4YW1w
bGV7VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93IEpTT04gdmFsdWVzIGFyZSBjcmVhdGVkIGZy
b20KKyAgICBpbml0aWFsaXplciBsaXN0cy4sYmFzaWNfanNvbl9fbGlzdF9pbml0X3R9CisKKyAg
ICBAc2EgQHJlZiBhcnJheShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8YmFzaWNfanNvbj4pIC0tIGNy
ZWF0ZSBhIEpTT04gYXJyYXkKKyAgICB2YWx1ZSBmcm9tIGFuIGluaXRpYWxpemVyIGxpc3QKKyAg
ICBAc2EgQHJlZiBvYmplY3Qoc3RkOjppbml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+KSAtLSBj
cmVhdGUgYSBKU09OIG9iamVjdAorICAgIHZhbHVlIGZyb20gYW4gaW5pdGlhbGl6ZXIgbGlzdAor
CisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGJhc2ljX2pzb24oc3RkOjpp
bml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+IGluaXQsCisgICAgICAgICAgICAgICBib29sIHR5
cGVfZGVkdWN0aW9uID0gdHJ1ZSwKKyAgICAgICAgICAgICAgIHZhbHVlX3QgbWFudWFsX3R5cGUg
PSB2YWx1ZV90OjphcnJheSkKKyAgICB7CisgICAgICAgIC8vIGNoZWNrIGlmIGVhY2ggZWxlbWVu
dCBpcyBhbiBhcnJheSB3aXRoIHR3byBlbGVtZW50cyB3aG9zZSBmaXJzdAorICAgICAgICAvLyBl
bGVtZW50IGlzIGEgc3RyaW5nCisgICAgICAgIGJvb2wgaXNfYW5fb2JqZWN0ID0gc3RkOjphbGxf
b2YoaW5pdC5iZWdpbigpLCBpbml0LmVuZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFtdKGNvbnN0IGJhc2ljX2pzb24gJiBlbGVtZW50KQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZWxlbWVudC5pc19hcnJheSgpIGFuZCBlbGVtZW50LnNpemUoKSA9
PSAyIGFuZCBlbGVtZW50WzBdLmlzX3N0cmluZygpOworICAgICAgICB9KTsKKworICAgICAgICAv
LyBhZGp1c3QgdHlwZSBpZiB0eXBlIGRlZHVjdGlvbiBpcyBub3Qgd2FudGVkCisgICAgICAgIGlm
IChub3QgdHlwZV9kZWR1Y3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGlmIGFycmF5
IGlzIHdhbnRlZCwgZG8gbm90IGNyZWF0ZSBhbiBvYmplY3QgdGhvdWdoIHBvc3NpYmxlCisgICAg
ICAgICAgICBpZiAobWFudWFsX3R5cGUgPT0gdmFsdWVfdDo6YXJyYXkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaXNfYW5fb2JqZWN0ID0gZmFsc2U7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIGlmIG9iamVjdCBpcyB3YW50ZWQgYnV0IGltcG9zc2libGUsIHRocm93
IGFuIGV4Y2VwdGlvbgorICAgICAgICAgICAgaWYgKG1hbnVhbF90eXBlID09IHZhbHVlX3Q6Om9i
amVjdCBhbmQgbm90IGlzX2FuX29iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oImNhbm5vdCBjcmVhdGUgb2JqZWN0IGZyb20gaW5p
dGlhbGl6ZXIgbGlzdCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYg
KGlzX2FuX29iamVjdCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gdGhlIGluaXRpYWxpemVy
IGxpc3QgaXMgYSBsaXN0IG9mIHBhaXJzIC0+IGNyZWF0ZSBvYmplY3QKKyAgICAgICAgICAgIG1f
dHlwZSA9IHZhbHVlX3Q6Om9iamVjdDsKKyAgICAgICAgICAgIG1fdmFsdWUgPSB2YWx1ZV90Ojpv
YmplY3Q7CisKKyAgICAgICAgICAgIHN0ZDo6Zm9yX2VhY2goaW5pdC5iZWdpbigpLCBpbml0LmVu
ZCgpLCBbdGhpc10oY29uc3QgYmFzaWNfanNvbiAmIGVsZW1lbnQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgbV92YWx1ZS5vYmplY3QtPmVtcGxhY2UoKihlbGVtZW50WzBdLm1fdmFs
dWUuc3RyaW5nKSwgZWxlbWVudFsxXSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHRoZSBpbml0aWFsaXplciBsaXN0
IGRlc2NyaWJlcyBhbiBhcnJheSAtPiBjcmVhdGUgYXJyYXkKKyAgICAgICAgICAgIG1fdHlwZSA9
IHZhbHVlX3Q6OmFycmF5OworICAgICAgICAgICAgbV92YWx1ZS5hcnJheSA9IGNyZWF0ZTxhcnJh
eV90Pihpbml0KTsKKyAgICAgICAgfQorCisgICAgICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKKyAg
ICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgZXhwbGljaXRseSBjcmVhdGUgYW4gYXJyYXkgZnJv
bSBhbiBpbml0aWFsaXplciBsaXN0CisKKyAgICBDcmVhdGVzIGEgSlNPTiBhcnJheSB2YWx1ZSBm
cm9tIGEgZ2l2ZW4gaW5pdGlhbGl6ZXIgbGlzdC4gVGhhdCBpcywgZ2l2ZW4gYQorICAgIGxpc3Qg
b2YgdmFsdWVzIGBhLCBiLCBjYCwgY3JlYXRlcyB0aGUgSlNPTiB2YWx1ZSBgW2EsIGIsIGNdYC4g
SWYgdGhlCisgICAgaW5pdGlhbGl6ZXIgbGlzdCBpcyBlbXB0eSwgdGhlIGVtcHR5IGFycmF5IGBb
XWAgaXMgY3JlYXRlZC4KKworICAgIEBub3RlIFRoaXMgZnVuY3Rpb24gaXMgb25seSBuZWVkZWQg
dG8gZXhwcmVzcyB0d28gZWRnZSBjYXNlcyB0aGF0IGNhbm5vdAorICAgIGJlIHJlYWxpemVkIHdp
dGggdGhlIGluaXRpYWxpemVyIGxpc3QgY29uc3RydWN0b3IgKEByZWYKKyAgICBiYXNpY19qc29u
KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxiYXNpY19qc29uPiwgYm9vbCwgdmFsdWVfdCkpLiBUaGVz
ZSBjYXNlcworICAgIGFyZToKKyAgICAxLiBjcmVhdGluZyBhbiBhcnJheSB3aG9zZSBlbGVtZW50
cyBhcmUgYWxsIHBhaXJzIHdob3NlIGZpcnN0IGVsZW1lbnQgaXMgYQorICAgIHN0cmluZyAtLSBp
biB0aGlzIGNhc2UsIHRoZSBpbml0aWFsaXplciBsaXN0IGNvbnN0cnVjdG9yIHdvdWxkIGNyZWF0
ZSBhbgorICAgIG9iamVjdCwgdGFraW5nIHRoZSBmaXJzdCBlbGVtZW50cyBhcyBrZXlzCisgICAg
Mi4gY3JlYXRpbmcgYW4gZW1wdHkgYXJyYXkgLS0gcGFzc2luZyB0aGUgZW1wdHkgaW5pdGlhbGl6
ZXIgbGlzdCB0byB0aGUKKyAgICBpbml0aWFsaXplciBsaXN0IGNvbnN0cnVjdG9yIHlpZWxkcyBh
biBlbXB0eSBvYmplY3QKKworICAgIEBwYXJhbVtpbl0gaW5pdCAgaW5pdGlhbGl6ZXIgbGlzdCB3
aXRoIEpTT04gdmFsdWVzIHRvIGNyZWF0ZSBhbiBhcnJheSBmcm9tCisgICAgKG9wdGlvbmFsKQor
CisgICAgQHJldHVybiBKU09OIGFycmF5IHZhbHVlCisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIg
aW4gdGhlIHNpemUgb2YgQGEgaW5pdC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5n
IGNvZGUgc2hvd3MgYW4gZXhhbXBsZSBmb3IgdGhlIGBhcnJheWAKKyAgICBmdW5jdGlvbi4sYXJy
YXl9CisKKyAgICBAc2EgQHJlZiBiYXNpY19qc29uKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxiYXNp
Y19qc29uPiwgYm9vbCwgdmFsdWVfdCkgLS0KKyAgICBjcmVhdGUgYSBKU09OIHZhbHVlIGZyb20g
YW4gaW5pdGlhbGl6ZXIgbGlzdAorICAgIEBzYSBAcmVmIG9iamVjdChzdGQ6OmluaXRpYWxpemVy
X2xpc3Q8YmFzaWNfanNvbj4pIC0tIGNyZWF0ZSBhIEpTT04gb2JqZWN0CisgICAgdmFsdWUgZnJv
bSBhbiBpbml0aWFsaXplciBsaXN0CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICov
CisgICAgc3RhdGljIGJhc2ljX2pzb24gYXJyYXkoc3RkOjppbml0aWFsaXplcl9saXN0PGJhc2lj
X2pzb24+IGluaXQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmluaXRp
YWxpemVyX2xpc3Q8YmFzaWNfanNvbj4oKSkKKyAgICB7CisgICAgICAgIHJldHVybiBiYXNpY19q
c29uKGluaXQsIGZhbHNlLCB2YWx1ZV90OjphcnJheSk7CisgICAgfQorCisgICAgLyohCisgICAg
QGJyaWVmIGV4cGxpY2l0bHkgY3JlYXRlIGFuIG9iamVjdCBmcm9tIGFuIGluaXRpYWxpemVyIGxp
c3QKKworICAgIENyZWF0ZXMgYSBKU09OIG9iamVjdCB2YWx1ZSBmcm9tIGEgZ2l2ZW4gaW5pdGlh
bGl6ZXIgbGlzdC4gVGhlIGluaXRpYWxpemVyCisgICAgbGlzdHMgZWxlbWVudHMgbXVzdCBiZSBw
YWlycywgYW5kIHRoZWlyIGZpcnN0IGVsZW1lbnRzIG11c3QgYmUgc3RyaW5ncy4gSWYKKyAgICB0
aGUgaW5pdGlhbGl6ZXIgbGlzdCBpcyBlbXB0eSwgdGhlIGVtcHR5IG9iamVjdCBge31gIGlzIGNy
ZWF0ZWQuCisKKyAgICBAbm90ZSBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYWRkZWQgZm9yIHN5bW1l
dHJ5IHJlYXNvbnMuIEluIGNvbnRyYXN0IHRvIHRoZQorICAgIHJlbGF0ZWQgZnVuY3Rpb24gQHJl
ZiBhcnJheShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8YmFzaWNfanNvbj4pLCB0aGVyZSBhcmUKKyAg
ICBubyBjYXNlcyB3aGljaCBjYW4gb25seSBiZSBleHByZXNzZWQgYnkgdGhpcyBmdW5jdGlvbi4g
VGhhdCBpcywgYW55CisgICAgaW5pdGlhbGl6ZXIgbGlzdCBAYSBpbml0IGNhbiBhbHNvIGJlIHBh
c3NlZCB0byB0aGUgaW5pdGlhbGl6ZXIgbGlzdAorICAgIGNvbnN0cnVjdG9yIEByZWYgYmFzaWNf
anNvbihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8YmFzaWNfanNvbj4sIGJvb2wsCisgICAgdmFsdWVf
dCkuCisKKyAgICBAcGFyYW1baW5dIGluaXQgIGluaXRpYWxpemVyIGxpc3QgdG8gY3JlYXRlIGFu
IG9iamVjdCBmcm9tIChvcHRpb25hbCkKKworICAgIEByZXR1cm4gSlNPTiBvYmplY3QgdmFsdWUK
KworICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBAYSBpbml0IGlzIG5vdCBhIHBhaXIg
d2hvc2UgZmlyc3QgZWxlbWVudHMgYXJlCisgICAgc3RyaW5nczsgdGhyb3duIGJ5CisgICAgQHJl
ZiBiYXNpY19qc29uKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxiYXNpY19qc29uPiwgYm9vbCwgdmFs
dWVfdCkKKworICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgc2l6ZSBvZiBAYSBpbml0Lgor
CisgICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29kZSBzaG93cyBhbiBleGFtcGxlIGZv
ciB0aGUgYG9iamVjdGAKKyAgICBmdW5jdGlvbi4sb2JqZWN0fQorCisgICAgQHNhIEByZWYgYmFz
aWNfanNvbihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8YmFzaWNfanNvbj4sIGJvb2wsIHZhbHVlX3Qp
IC0tCisgICAgY3JlYXRlIGEgSlNPTiB2YWx1ZSBmcm9tIGFuIGluaXRpYWxpemVyIGxpc3QKKyAg
ICBAc2EgQHJlZiBhcnJheShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8YmFzaWNfanNvbj4pIC0tIGNy
ZWF0ZSBhIEpTT04gYXJyYXkKKyAgICB2YWx1ZSBmcm9tIGFuIGluaXRpYWxpemVyIGxpc3QKKwor
ICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBzdGF0aWMgYmFzaWNfanNvbiBv
YmplY3Qoc3RkOjppbml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+IGluaXQgPQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+
KCkpCisgICAgeworICAgICAgICByZXR1cm4gYmFzaWNfanNvbihpbml0LCBmYWxzZSwgdmFsdWVf
dDo6b2JqZWN0KTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgY29uc3RydWN0IGFuIGFy
cmF5IHdpdGggY291bnQgY29waWVzIG9mIGdpdmVuIHZhbHVlCisKKyAgICBDb25zdHJ1Y3RzIGEg
SlNPTiBhcnJheSB2YWx1ZSBieSBjcmVhdGluZyBAYSBjbnQgY29waWVzIG9mIGEgcGFzc2VkIHZh
bHVlLgorICAgIEluIGNhc2UgQGEgY250IGlzIGAwYCwgYW4gZW1wdHkgYXJyYXkgaXMgY3JlYXRl
ZC4gQXMgcG9zdGNvbmRpdGlvbiwKKyAgICBgc3RkOjpkaXN0YW5jZShiZWdpbigpLGVuZCgpKSA9
PSBjbnRgIGhvbGRzLgorCisgICAgQHBhcmFtW2luXSBjbnQgIHRoZSBudW1iZXIgb2YgSlNPTiBj
b3BpZXMgb2YgQGEgdmFsIHRvIGNyZWF0ZQorICAgIEBwYXJhbVtpbl0gdmFsICB0aGUgSlNPTiB2
YWx1ZSB0byBjb3B5CisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gQGEgY250LgorCisgICAg
QGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29kZSBzaG93cyBleGFtcGxlcyBmb3IgdGhlIEBy
ZWYKKyAgICBiYXNpY19qc29uKHNpemVfdHlwZVwsIGNvbnN0IGJhc2ljX2pzb24mKQorICAgIGNv
bnN0cnVjdG9yLixiYXNpY19qc29uX19zaXplX3R5cGVfYmFzaWNfanNvbn0KKworICAgIEBzaW5j
ZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBiYXNpY19qc29uKHNpemVfdHlwZSBjbnQsIGNv
bnN0IGJhc2ljX2pzb24mIHZhbCkKKyAgICAgICAgOiBtX3R5cGUodmFsdWVfdDo6YXJyYXkpCisg
ICAgeworICAgICAgICBtX3ZhbHVlLmFycmF5ID0gY3JlYXRlPGFycmF5X3Q+KGNudCwgdmFsKTsK
KyAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmll
ZiBjb25zdHJ1Y3QgYSBKU09OIGNvbnRhaW5lciBnaXZlbiBhbiBpdGVyYXRvciByYW5nZQorCisg
ICAgQ29uc3RydWN0cyB0aGUgSlNPTiB2YWx1ZSB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGUgcmFu
Z2UgYFtmaXJzdCwgbGFzdClgLgorICAgIFRoZSBzZW1hbnRpY3MgZGVwZW5kcyBvbiB0aGUgZGlm
ZmVyZW50IHR5cGVzIGEgSlNPTiB2YWx1ZSBjYW4gaGF2ZToKKyAgICAtIEluIGNhc2Ugb2YgcHJp
bWl0aXZlIHR5cGVzIChudW1iZXIsIGJvb2xlYW4sIG9yIHN0cmluZyksIEBhIGZpcnN0IG11c3QK
KyAgICAgIGJlIGBiZWdpbigpYCBhbmQgQGEgbGFzdCBtdXN0IGJlIGBlbmQoKWAuIEluIHRoaXMg
Y2FzZSwgdGhlIHZhbHVlIGlzCisgICAgICBjb3BpZWQuIE90aGVyd2lzZSwgc3RkOjpvdXRfb2Zf
cmFuZ2UgaXMgdGhyb3duLgorICAgIC0gSW4gY2FzZSBvZiBzdHJ1Y3R1cmVkIHR5cGVzIChhcnJh
eSwgb2JqZWN0KSwgdGhlIGNvbnN0cnVjdG9yIGJlaGF2ZXMgYXMKKyAgICAgIHNpbWlsYXIgdmVy
c2lvbnMgZm9yIGBzdGQ6OnZlY3RvcmAuCisgICAgLSBJbiBjYXNlIG9mIGEgbnVsbCB0eXBlLCBz
dGQ6OmRvbWFpbl9lcnJvciBpcyB0aHJvd24uCisKKyAgICBAdHBhcmFtIElucHV0SVQgYW4gaW5w
dXQgaXRlcmF0b3IgdHlwZSAoQHJlZiBpdGVyYXRvciBvciBAcmVmCisgICAgY29uc3RfaXRlcmF0
b3IpCisKKyAgICBAcGFyYW1baW5dIGZpcnN0IGJlZ2luIG9mIHRoZSByYW5nZSB0byBjb3B5IGZy
b20gKGluY2x1ZGVkKQorICAgIEBwYXJhbVtpbl0gbGFzdCBlbmQgb2YgdGhlIHJhbmdlIHRvIGNv
cHkgZnJvbSAoZXhjbHVkZWQpCisKKyAgICBAcHJlIEl0ZXJhdG9ycyBAYSBmaXJzdCBhbmQgQGEg
bGFzdCBtdXN0IGJlIGluaXRpYWxpemVkLiAqKlRoaXMKKyAgICAgICAgIHByZWNvbmRpdGlvbiBp
cyBlbmZvcmNlZCB3aXRoIGFuIGFzc2VydGlvbi4qKgorCisgICAgQHRocm93IHN0ZDo6ZG9tYWlu
X2Vycm9yIGlmIGl0ZXJhdG9ycyBhcmUgbm90IGNvbXBhdGlibGU7IHRoYXQgaXMsIGRvIG5vdAor
ICAgIGJlbG9uZyB0byB0aGUgc2FtZSBKU09OIHZhbHVlOyBleGFtcGxlOiBgIml0ZXJhdG9ycyBh
cmUgbm90IGNvbXBhdGlibGUiYAorICAgIEB0aHJvdyBzdGQ6Om91dF9vZl9yYW5nZSBpZiBpdGVy
YXRvcnMgYXJlIGZvciBhIHByaW1pdGl2ZSB0eXBlIChudW1iZXIsCisgICAgYm9vbGVhbiwgb3Ig
c3RyaW5nKSB3aGVyZSBhbiBvdXQgb2YgcmFuZ2UgZXJyb3IgY2FuIGJlIGRldGVjdGVkIGVhc2ls
eTsKKyAgICBleGFtcGxlOiBgIml0ZXJhdG9ycyBvdXQgb2YgcmFuZ2UiYAorICAgIEB0aHJvdyBz
dGQ6OmJhZF9hbGxvYyBpZiBhbGxvY2F0aW9uIGZvciBvYmplY3QsIGFycmF5LCBvciBzdHJpbmcg
ZmFpbHMKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgY2FsbGVkIHdpdGggYSBudWxs
IHZhbHVlOyBleGFtcGxlOiBgImNhbm5vdAorICAgIHVzZSBjb25zdHJ1Y3Qgd2l0aCBpdGVyYXRv
cnMgZnJvbSBudWxsImAKKworICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiBkaXN0YW5jZSBiZXR3
ZWVuIEBhIGZpcnN0IGFuZCBAYSBsYXN0LgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxl
IGJlbG93IHNob3dzIHNldmVyYWwgd2F5cyB0byBjcmVhdGUgSlNPTiB2YWx1ZXMgYnkKKyAgICBz
cGVjaWZ5aW5nIGEgc3VicmFuZ2Ugd2l0aCBpdGVyYXRvcnMuLGJhc2ljX2pzb25fX0lucHV0SXRf
SW5wdXRJdH0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICB0ZW1wbGF0
ZTxjbGFzcyBJbnB1dElULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKKyAgICAgICAgICAgICAg
ICAgc3RkOjppc19zYW1lPElucHV0SVQsIHR5cGVuYW1lIGJhc2ljX2pzb25fdDo6aXRlcmF0b3I+
Ojp2YWx1ZSBvcgorICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8SW5wdXRJVCwgdHlwZW5h
bWUgYmFzaWNfanNvbl90Ojpjb25zdF9pdGVyYXRvcj46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4K
KyAgICBiYXNpY19qc29uKElucHV0SVQgZmlyc3QsIElucHV0SVQgbGFzdCkKKyAgICB7CisgICAg
ICAgIGFzc2VydChmaXJzdC5tX29iamVjdCAhPSBudWxscHRyKTsKKyAgICAgICAgYXNzZXJ0KGxh
c3QubV9vYmplY3QgIT0gbnVsbHB0cik7CisKKyAgICAgICAgLy8gbWFrZSBzdXJlIGl0ZXJhdG9y
IGZpdHMgdGhlIGN1cnJlbnQgdmFsdWUKKyAgICAgICAgaWYgKGZpcnN0Lm1fb2JqZWN0ICE9IGxh
c3QubV9vYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vy
cm9yPigiaXRlcmF0b3JzIGFyZSBub3QgY29tcGF0aWJsZSIpOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gY29weSB0eXBlIGZyb20gZmlyc3QgaXRlcmF0b3IKKyAgICAgICAgbV90eXBlID0gZmly
c3QubV9vYmplY3QtPm1fdHlwZTsKKworICAgICAgICAvLyBjaGVjayBpZiBpdGVyYXRvciByYW5n
ZSBpcyBjb21wbGV0ZSBmb3IgcHJpbWl0aXZlIHZhbHVlcworICAgICAgICBzd2l0Y2ggKG1fdHlw
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgorICAgICAg
ICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfZmxvYXQ6CisgICAgICAgICAgICBjYXNlIHZhbHVl
X3Q6Om51bWJlcl9pbnRlZ2VyOgorICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfdW5z
aWduZWQ6CisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OnN0cmluZzoKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAobm90IGZpcnN0Lm1faXQucHJpbWl0aXZlX2l0ZXJhdG9yLmlz
X2JlZ2luKCkgb3Igbm90IGxhc3QubV9pdC5wcmltaXRpdmVfaXRlcmF0b3IuaXNfZW5kKCkpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6Om91dF9vZl9y
YW5nZT4oIml0ZXJhdG9ycyBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKG1fdHlwZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcjoKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBtX3ZhbHVlLm51bWJlcl9pbnRlZ2VyID0gZmlyc3QubV9vYmplY3QtPm1fdmFsdWUu
bnVtYmVyX2ludGVnZXI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkOgorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkID0gZmlyc3QubV9vYmpl
Y3QtPm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLm51bWJlcl9mbG9hdCA9IGZpcnN0
Lm1fb2JqZWN0LT5tX3ZhbHVlLm51bWJlcl9mbG9hdDsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fdmFsdWUuYm9vbGVhbiA9IGZpcnN0Lm1fb2Jq
ZWN0LT5tX3ZhbHVlLmJvb2xlYW47CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6c3RyaW5nOgorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1fdmFsdWUgPSAqZmlyc3QubV9vYmplY3QtPm1fdmFsdWUuc3RyaW5n
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBj
YXNlIHZhbHVlX3Q6Om9iamVjdDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3Zh
bHVlLm9iamVjdCA9IGNyZWF0ZTxvYmplY3RfdD4oZmlyc3QubV9pdC5vYmplY3RfaXRlcmF0b3Is
IGxhc3QubV9pdC5vYmplY3RfaXRlcmF0b3IpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5OgorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG1fdmFsdWUuYXJyYXkgPSBjcmVhdGU8YXJyYXlfdD4oZmly
c3QubV9pdC5hcnJheV9pdGVyYXRvciwgbGFzdC5tX2l0LmFycmF5X2l0ZXJhdG9yKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4o
ImNhbm5vdCB1c2UgY29uc3RydWN0IHdpdGggaXRlcmF0b3JzIGZyb20gIiArIGZpcnN0Lm1fb2Jq
ZWN0LT50eXBlX25hbWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBh
c3NlcnRfaW52YXJpYW50KCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGNvbnN0cnVj
dCBhIEpTT04gdmFsdWUgZ2l2ZW4gYW4gaW5wdXQgc3RyZWFtCisKKyAgICBAcGFyYW1baW4sb3V0
XSBpICBzdHJlYW0gdG8gcmVhZCBhIHNlcmlhbGl6ZWQgSlNPTiB2YWx1ZSBmcm9tCisgICAgQHBh
cmFtW2luXSBjYiBhIHBhcnNlciBjYWxsYmFjayBmdW5jdGlvbiBvZiB0eXBlIEByZWYgcGFyc2Vy
X2NhbGxiYWNrX3QKKyAgICB3aGljaCBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIGRlc2VyaWFsaXph
dGlvbiBieSBmaWx0ZXJpbmcgdW53YW50ZWQgdmFsdWVzCisgICAgKG9wdGlvbmFsKQorCisgICAg
QGNvbXBsZXhpdHkgTGluZWFyIGluIHRoZSBsZW5ndGggb2YgdGhlIGlucHV0LiBUaGUgcGFyc2Vy
IGlzIGEgcHJlZGljdGl2ZQorICAgIExMKDEpIHBhcnNlci4gVGhlIGNvbXBsZXhpdHkgY2FuIGJl
IGhpZ2hlciBpZiB0aGUgcGFyc2VyIGNhbGxiYWNrIGZ1bmN0aW9uCisgICAgQGEgY2IgaGFzIGEg
c3VwZXItbGluZWFyIGNvbXBsZXhpdHkuCisKKyAgICBAbm90ZSBBIFVURi04IGJ5dGUgb3JkZXIg
bWFyayBpcyBzaWxlbnRseSBpZ25vcmVkLgorCisgICAgQGRlcHJlY2F0ZWQgVGhpcyBjb25zdHJ1
Y3RvciBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdmVyc2lvbgorICAgICAg
My4wLjAgdG8gdW5pZnkgdGhlIGludGVyZmFjZSBvZiB0aGUgbGlicmFyeS4gRGVzZXJpYWxpemF0
aW9uIHdpbGwgYmUKKyAgICAgIGRvbmUgYnkgc3RyZWFtIG9wZXJhdG9ycyBvciBieSBjYWxsaW5n
IG9uZSBvZiB0aGUgYHBhcnNlYCBmdW5jdGlvbnMsCisgICAgICBlLmcuIEByZWYgcGFyc2Uoc3Rk
Ojppc3RyZWFtJiwgY29uc3QgcGFyc2VyX2NhbGxiYWNrX3QpLiBUaGF0IGlzLCBjYWxscworICAg
ICAgbGlrZSBganNvbiBqKGkpO2AgZm9yIGFuIGlucHV0IHN0cmVhbSBAYSBpIG5lZWQgdG8gYmUg
cmVwbGFjZWQgYnkKKyAgICAgIGBqc29uIGogPSBqc29uOjpwYXJzZShpKTtgLiBTZWUgdGhlIGV4
YW1wbGUgYmVsb3cuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgZGVtb25z
dHJhdGVzIGNvbnN0cnVjdGluZyBhIEpTT04gdmFsdWUgZnJvbQorICAgIGEgYHN0ZDo6c3RyaW5n
c3RyZWFtYCB3aXRoIGFuZCB3aXRob3V0IGNhbGxiYWNrCisgICAgZnVuY3Rpb24uLGJhc2ljX2pz
b25fX2lzdHJlYW19CisKKyAgICBAc2luY2UgdmVyc2lvbiAyLjAuMCwgZGVwcmVjYXRlZCBpbiB2
ZXJzaW9uIDIuMC4zLCB0byBiZSByZW1vdmVkIGluCisgICAgICAgICAgIHZlcnNpb24gMy4wLjAK
KyAgICAqLworICAgIEpTT05fREVQUkVDQVRFRAorICAgIGV4cGxpY2l0IGJhc2ljX2pzb24oc3Rk
Ojppc3RyZWFtJiBpLCBjb25zdCBwYXJzZXJfY2FsbGJhY2tfdCBjYiA9IG51bGxwdHIpCisgICAg
eworICAgICAgICAqdGhpcyA9IHBhcnNlcihpLCBjYikucGFyc2UoKTsKKyAgICAgICAgYXNzZXJ0
X2ludmFyaWFudCgpOworICAgIH0KKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLworICAgIC8vIG90aGVyIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvciAvLwor
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgLyohCisg
ICAgQGJyaWVmIGNvcHkgY29uc3RydWN0b3IKKworICAgIENyZWF0ZXMgYSBjb3B5IG9mIGEgZ2l2
ZW4gSlNPTiB2YWx1ZS4KKworICAgIEBwYXJhbVtpbl0gb3RoZXIgIHRoZSBKU09OIHZhbHVlIHRv
IGNvcHkKKworICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgc2l6ZSBvZiBAYSBvdGhlci4K
KworICAgIEByZXF1aXJlbWVudCBUaGlzIGZ1bmN0aW9uIGhlbHBzIGBiYXNpY19qc29uYCBzYXRp
c2Z5aW5nIHRoZQorICAgIFtDb250YWluZXJdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cv
Y3BwL2NvbmNlcHQvQ29udGFpbmVyKQorICAgIHJlcXVpcmVtZW50czoKKyAgICAtIFRoZSBjb21w
bGV4aXR5IGlzIGxpbmVhci4KKyAgICAtIEFzIHBvc3Rjb25kaXRpb24sIGl0IGhvbGRzOiBgb3Ro
ZXIgPT0gYmFzaWNfanNvbihvdGhlcilgLgorCisgICAgQHRocm93IHN0ZDo6YmFkX2FsbG9jIGlm
IGFsbG9jYXRpb24gZm9yIG9iamVjdCwgYXJyYXksIG9yIHN0cmluZyBmYWlscy4KKworICAgIEBs
aXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgYW4gZXhhbXBsZSBmb3IgdGhlIGNv
cHkKKyAgICBjb25zdHJ1Y3Rvci4sYmFzaWNfanNvbl9fYmFzaWNfanNvbn0KKworICAgIEBzaW5j
ZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBiYXNpY19qc29uKGNvbnN0IGJhc2ljX2pzb24m
IG90aGVyKQorICAgICAgICA6IG1fdHlwZShvdGhlci5tX3R5cGUpCisgICAgeworICAgICAgICAv
LyBjaGVjayBvZiBwYXNzZWQgdmFsdWUgaXMgdmFsaWQKKyAgICAgICAgb3RoZXIuYXNzZXJ0X2lu
dmFyaWFudCgpOworCisgICAgICAgIHN3aXRjaCAobV90eXBlKQorICAgICAgICB7CisgICAgICAg
ICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBtX3ZhbHVlID0gKm90aGVyLm1fdmFsdWUub2JqZWN0OworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5OgorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fdmFsdWUgPSAqb3RoZXIubV92YWx1ZS5hcnJh
eTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Y2FzZSB2YWx1ZV90OjpzdHJpbmc6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV92
YWx1ZSA9ICpvdGhlci5tX3ZhbHVlLnN0cmluZzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBvdGhlci5tX3ZhbHVlLmJvb2xlYW47
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNh
c2UgdmFsdWVfdDo6bnVtYmVyX2ludGVnZXI6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgbV92YWx1ZSA9IG90aGVyLm1fdmFsdWUubnVtYmVyX2ludGVnZXI7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVt
YmVyX3Vuc2lnbmVkOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBv
dGhlci5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfZmxvYXQ6Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV92YWx1ZSA9IG90aGVyLm1fdmFsdWUubnVt
YmVyX2Zsb2F0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOwor
ICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBtb3ZlIGNvbnN0cnVjdG9yCisKKyAgICBNb3Zl
IGNvbnN0cnVjdG9yLiBDb25zdHJ1Y3RzIGEgSlNPTiB2YWx1ZSB3aXRoIHRoZSBjb250ZW50cyBv
ZiB0aGUgZ2l2ZW4KKyAgICB2YWx1ZSBAYSBvdGhlciB1c2luZyBtb3ZlIHNlbWFudGljcy4gSXQg
InN0ZWFscyIgdGhlIHJlc291cmNlcyBmcm9tIEBhCisgICAgb3RoZXIgYW5kIGxlYXZlcyBpdCBh
cyBKU09OIG51bGwgdmFsdWUuCisKKyAgICBAcGFyYW1baW4sb3V0XSBvdGhlciAgdmFsdWUgdG8g
bW92ZSB0byB0aGlzIG9iamVjdAorCisgICAgQHBvc3QgQGEgb3RoZXIgaXMgYSBKU09OIG51bGwg
dmFsdWUKKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQGxpdmVleGFtcGxle1Ro
ZSBjb2RlIGJlbG93IHNob3dzIHRoZSBtb3ZlIGNvbnN0cnVjdG9yIGV4cGxpY2l0bHkgY2FsbGVk
CisgICAgdmlhIHN0ZDo6bW92ZS4sYmFzaWNfanNvbl9fbW92ZWNvbnN0cnVjdG9yfQorCisgICAg
QHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGJhc2ljX2pzb24oYmFzaWNfanNvbiYm
IG90aGVyKSBub2V4Y2VwdAorICAgICAgICA6IG1fdHlwZShzdGQ6Om1vdmUob3RoZXIubV90eXBl
KSksCisgICAgICAgICAgbV92YWx1ZShzdGQ6Om1vdmUob3RoZXIubV92YWx1ZSkpCisgICAgewor
ICAgICAgICAvLyBjaGVjayB0aGF0IHBhc3NlZCB2YWx1ZSBpcyB2YWxpZAorICAgICAgICBvdGhl
ci5hc3NlcnRfaW52YXJpYW50KCk7CisKKyAgICAgICAgLy8gaW52YWxpZGF0ZSBwYXlsb2FkCisg
ICAgICAgIG90aGVyLm1fdHlwZSA9IHZhbHVlX3Q6Om51bGw7CisgICAgICAgIG90aGVyLm1fdmFs
dWUgPSB7fTsKKworICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7CisgICAgfQorCisgICAgLyoh
CisgICAgQGJyaWVmIGNvcHkgYXNzaWdubWVudAorCisgICAgQ29weSBhc3NpZ25tZW50IG9wZXJh
dG9yLiBDb3BpZXMgYSBKU09OIHZhbHVlIHZpYSB0aGUgImNvcHkgYW5kIHN3YXAiCisgICAgc3Ry
YXRlZ3k6IEl0IGlzIGV4cHJlc3NlZCBpbiB0ZXJtcyBvZiB0aGUgY29weSBjb25zdHJ1Y3Rvciwg
ZGVzdHJ1Y3RvciwKKyAgICBhbmQgdGhlIHN3YXAoKSBtZW1iZXIgZnVuY3Rpb24uCisKKyAgICBA
cGFyYW1baW5dIG90aGVyICB2YWx1ZSB0byBjb3B5IGZyb20KKworICAgIEBjb21wbGV4aXR5IExp
bmVhci4KKworICAgIEByZXF1aXJlbWVudCBUaGlzIGZ1bmN0aW9uIGhlbHBzIGBiYXNpY19qc29u
YCBzYXRpc2Z5aW5nIHRoZQorICAgIFtDb250YWluZXJdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2Uu
Y29tL3cvY3BwL2NvbmNlcHQvQ29udGFpbmVyKQorICAgIHJlcXVpcmVtZW50czoKKyAgICAtIFRo
ZSBjb21wbGV4aXR5IGlzIGxpbmVhci4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgY29kZSBiZWxv
dyBzaG93cyBhbmQgZXhhbXBsZSBmb3IgdGhlIGNvcHkgYXNzaWdubWVudC4gSXQKKyAgICBjcmVh
dGVzIGEgY29weSBvZiB2YWx1ZSBgYWAgd2hpY2ggaXMgdGhlbiBzd2FwcGVkIHdpdGggYGJgLiBG
aW5hbGx5XCwgdGhlCisgICAgY29weSBvZiBgYWAgKHdoaWNoIGlzIHRoZSBudWxsIHZhbHVlIGFm
dGVyIHRoZSBzd2FwKSBpcworICAgIGRlc3Ryb3llZC4sYmFzaWNfanNvbl9fY29weWFzc2lnbm1l
bnR9CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgcmVmZXJlbmNlJiBv
cGVyYXRvcj0oYmFzaWNfanNvbiBvdGhlcikgbm9leGNlcHQgKAorICAgICAgICBzdGQ6OmlzX25v
dGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPHZhbHVlX3Q+Ojp2YWx1ZSBhbmQKKyAgICAgICAgc3Rk
Ojppc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTx2YWx1ZV90Pjo6dmFsdWUgYW5kCisgICAgICAg
IHN0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8anNvbl92YWx1ZT46OnZhbHVlIGFu
ZAorICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9hc3NpZ25hYmxlPGpzb25fdmFsdWU+Ojp2
YWx1ZQorICAgICkKKyAgICB7CisgICAgICAgIC8vIGNoZWNrIHRoYXQgcGFzc2VkIHZhbHVlIGlz
IHZhbGlkCisgICAgICAgIG90aGVyLmFzc2VydF9pbnZhcmlhbnQoKTsKKworICAgICAgICB1c2lu
ZyBzdGQ6OnN3YXA7CisgICAgICAgIHN3YXAobV90eXBlLCBvdGhlci5tX3R5cGUpOworICAgICAg
ICBzd2FwKG1fdmFsdWUsIG90aGVyLm1fdmFsdWUpOworCisgICAgICAgIGFzc2VydF9pbnZhcmlh
bnQoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIC8qIQorICAgIEBicmll
ZiBkZXN0cnVjdG9yCisKKyAgICBEZXN0cm95cyB0aGUgSlNPTiB2YWx1ZSBhbmQgZnJlZXMgYWxs
IGFsbG9jYXRlZCBtZW1vcnkuCisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIuCisKKyAgICBAcmVx
dWlyZW1lbnQgVGhpcyBmdW5jdGlvbiBoZWxwcyBgYmFzaWNfanNvbmAgc2F0aXNmeWluZyB0aGUK
KyAgICBbQ29udGFpbmVyXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0
L0NvbnRhaW5lcikKKyAgICByZXF1aXJlbWVudHM6CisgICAgLSBUaGUgY29tcGxleGl0eSBpcyBs
aW5lYXIuCisgICAgLSBBbGwgc3RvcmVkIGVsZW1lbnRzIGFyZSBkZXN0cm95ZWQgYW5kIGFsbCBt
ZW1vcnkgaXMgZnJlZWQuCisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAg
fmJhc2ljX2pzb24oKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOworCisgICAg
ICAgIHN3aXRjaCAobV90eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6
Om9iamVjdDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBbGxvY2F0b3JUeXBlPG9i
amVjdF90PiBhbGxvYzsKKyAgICAgICAgICAgICAgICBhbGxvYy5kZXN0cm95KG1fdmFsdWUub2Jq
ZWN0KTsKKyAgICAgICAgICAgICAgICBhbGxvYy5kZWFsbG9jYXRlKG1fdmFsdWUub2JqZWN0LCAx
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Y2FzZSB2YWx1ZV90OjphcnJheToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBbGxv
Y2F0b3JUeXBlPGFycmF5X3Q+IGFsbG9jOworICAgICAgICAgICAgICAgIGFsbG9jLmRlc3Ryb3ko
bV92YWx1ZS5hcnJheSk7CisgICAgICAgICAgICAgICAgYWxsb2MuZGVhbGxvY2F0ZShtX3ZhbHVl
LmFycmF5LCAxKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgY2FzZSB2YWx1ZV90OjpzdHJpbmc6CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgQWxsb2NhdG9yVHlwZTxzdHJpbmdfdD4gYWxsb2M7CisgICAgICAgICAgICAgICAgYWxs
b2MuZGVzdHJveShtX3ZhbHVlLnN0cmluZyk7CisgICAgICAgICAgICAgICAgYWxsb2MuZGVhbGxv
Y2F0ZShtX3ZhbHVlLnN0cmluZywgMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgLy8gYWxsIG90aGVyIHR5cGVzIG5lZWQgbm8gc3BlY2lmaWMgZGVzdHJ1Y3RvcgorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgLy8vIEB9CisKKyAgcHVibGljOgorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAg
Ly8gb2JqZWN0IGluc3BlY3Rpb24gLy8KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisg
ICAgLy8vIEBuYW1lIG9iamVjdCBpbnNwZWN0aW9uCisgICAgLy8vIEZ1bmN0aW9ucyB0byBpbnNw
ZWN0IHRoZSB0eXBlIG9mIGEgSlNPTiB2YWx1ZS4KKyAgICAvLy8gQHsKKworICAgIC8qIQorICAg
IEBicmllZiBzZXJpYWxpemF0aW9uCisKKyAgICBTZXJpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciBK
U09OIHZhbHVlcy4gVGhlIGZ1bmN0aW9uIHRyaWVzIHRvIG1pbWljCisgICAgUHl0aG9uJ3MgYGpz
b24uZHVtcHMoKWAgZnVuY3Rpb24sIGFuZCBjdXJyZW50bHkgc3VwcG9ydHMgaXRzIEBhIGluZGVu
dAorICAgIHBhcmFtZXRlci4KKworICAgIEBwYXJhbVtpbl0gaW5kZW50IElmIGluZGVudCBpcyBu
b25uZWdhdGl2ZSwgdGhlbiBhcnJheSBlbGVtZW50cyBhbmQgb2JqZWN0CisgICAgbWVtYmVycyB3
aWxsIGJlIHByZXR0eS1wcmludGVkIHdpdGggdGhhdCBpbmRlbnQgbGV2ZWwuIEFuIGluZGVudCBs
ZXZlbCBvZgorICAgIGAwYCB3aWxsIG9ubHkgaW5zZXJ0IG5ld2xpbmVzLiBgLTFgICh0aGUgZGVm
YXVsdCkgc2VsZWN0cyB0aGUgbW9zdCBjb21wYWN0CisgICAgcmVwcmVzZW50YXRpb24uCisKKyAg
ICBAcmV0dXJuIHN0cmluZyBjb250YWluaW5nIHRoZSBzZXJpYWxpemF0aW9uIG9mIHRoZSBKU09O
IHZhbHVlCisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhl
IGZvbGxvd2luZyBleGFtcGxlIHNob3dzIHRoZSBlZmZlY3Qgb2YgZGlmZmVyZW50IEBhIGluZGVu
dAorICAgIHBhcmFtZXRlcnMgdG8gdGhlIHJlc3VsdCBvZiB0aGUgc2VyaWFsaXphdGlvbi4sZHVt
cH0KKworICAgIEBzZWUgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2pzb24uaHRt
bCNqc29uLmR1bXAKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBzdHJp
bmdfdCBkdW1wKGNvbnN0IGludCBpbmRlbnQgPSAtMSkgY29uc3QKKyAgICB7CisgICAgICAgIHN0
ZDo6c3RyaW5nc3RyZWFtIHNzOworICAgICAgICAvLyBmaXggbG9jYWxlIHByb2JsZW1zCisgICAg
ICAgIHNzLmltYnVlKHN0ZDo6bG9jYWxlOjpjbGFzc2ljKCkpOworCisgICAgICAgIC8vIDYsIDE1
IG9yIDE2IGRpZ2l0cyBvZiBwcmVjaXNpb24gYWxsb3dzIHJvdW5kLXRyaXAgSUVFRSA3NTQKKyAg
ICAgICAgLy8gc3RyaW5nLT5mbG9hdC0+c3RyaW5nLCBzdHJpbmctPmRvdWJsZS0+c3RyaW5nIG9y
IHN0cmluZy0+bG9uZworICAgICAgICAvLyBkb3VibGUtPnN0cmluZzsgdG8gYmUgc2FmZSwgd2Ug
cmVhZCB0aGlzIHZhbHVlIGZyb20KKyAgICAgICAgLy8gc3RkOjpudW1lcmljX2xpbWl0czxudW1i
ZXJfZmxvYXRfdD46OmRpZ2l0czEwCisgICAgICAgIHNzLnByZWNpc2lvbihzdGQ6Om51bWVyaWNf
bGltaXRzPGRvdWJsZT46OmRpZ2l0czEwKTsKKworICAgICAgICBpZiAoaW5kZW50ID49IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGR1bXAoc3MsIHRydWUsIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGludD4oaW5kZW50KSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgICBkdW1wKHNzLCBmYWxzZSwgMCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
c3Muc3RyKCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIHJldHVybiB0aGUgdHlwZSBv
ZiB0aGUgSlNPTiB2YWx1ZSAoZXhwbGljaXQpCisKKyAgICBSZXR1cm4gdGhlIHR5cGUgb2YgdGhl
IEpTT04gdmFsdWUgYXMgYSB2YWx1ZSBmcm9tIHRoZSBAcmVmIHZhbHVlX3QKKyAgICBlbnVtZXJh
dGlvbi4KKworICAgIEByZXR1cm4gdGhlIHR5cGUgb2YgdGhlIEpTT04gdmFsdWUKKworICAgIEBj
b21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQGV4Y2VwdGlvbnNhZmV0eSBOby10aHJvdyBndWFy
YW50ZWU6IHRoaXMgbWVtYmVyIGZ1bmN0aW9uIG5ldmVyIHRocm93cworICAgIGV4Y2VwdGlvbnMu
CisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIGV4ZW1wbGlmaWVzIGB0eXBl
KClgIGZvciBhbGwgSlNPTgorICAgIHR5cGVzLix0eXBlfQorCisgICAgQHNpbmNlIHZlcnNpb24g
MS4wLjAKKyAgICAqLworICAgIGNvbnN0ZXhwciB2YWx1ZV90IHR5cGUoKSBjb25zdCBub2V4Y2Vw
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHlwZTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBA
YnJpZWYgcmV0dXJuIHdoZXRoZXIgdHlwZSBpcyBwcmltaXRpdmUKKworICAgIFRoaXMgZnVuY3Rp
b24gcmV0dXJucyB0cnVlIGlmZiB0aGUgSlNPTiB0eXBlIGlzIHByaW1pdGl2ZSAoc3RyaW5nLCBu
dW1iZXIsCisgICAgYm9vbGVhbiwgb3IgbnVsbCkuCisKKyAgICBAcmV0dXJuIGB0cnVlYCBpZiB0
eXBlIGlzIHByaW1pdGl2ZSAoc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4sIG9yIG51bGwpLAorICAg
IGBmYWxzZWAgb3RoZXJ3aXNlLgorCisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBA
ZXhjZXB0aW9uc2FmZXR5IE5vLXRocm93IGd1YXJhbnRlZTogdGhpcyBtZW1iZXIgZnVuY3Rpb24g
bmV2ZXIgdGhyb3dzCisgICAgZXhjZXB0aW9ucy4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9s
bG93aW5nIGNvZGUgZXhlbXBsaWZpZXMgYGlzX3ByaW1pdGl2ZSgpYCBmb3IgYWxsIEpTT04KKyAg
ICB0eXBlcy4saXNfcHJpbWl0aXZlfQorCisgICAgQHNhIEByZWYgaXNfc3RydWN0dXJlZCgpIC0t
IHJldHVybnMgd2hldGhlciBKU09OIHZhbHVlIGlzIHN0cnVjdHVyZWQKKyAgICBAc2EgQHJlZiBp
c19udWxsKCkgLS0gcmV0dXJucyB3aGV0aGVyIEpTT04gdmFsdWUgaXMgYG51bGxgCisgICAgQHNh
IEByZWYgaXNfc3RyaW5nKCkgLS0gcmV0dXJucyB3aGV0aGVyIEpTT04gdmFsdWUgaXMgYSBzdHJp
bmcKKyAgICBAc2EgQHJlZiBpc19ib29sZWFuKCkgLS0gcmV0dXJucyB3aGV0aGVyIEpTT04gdmFs
dWUgaXMgYSBib29sZWFuCisgICAgQHNhIEByZWYgaXNfbnVtYmVyKCkgLS0gcmV0dXJucyB3aGV0
aGVyIEpTT04gdmFsdWUgaXMgYSBudW1iZXIKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisg
ICAgKi8KKyAgICBjb25zdGV4cHIgYm9vbCBpc19wcmltaXRpdmUoKSBjb25zdCBub2V4Y2VwdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGlzX251bGwoKSBvciBpc19zdHJpbmcoKSBvciBpc19ib29s
ZWFuKCkgb3IgaXNfbnVtYmVyKCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIHJldHVy
biB3aGV0aGVyIHR5cGUgaXMgc3RydWN0dXJlZAorCisgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5z
IHRydWUgaWZmIHRoZSBKU09OIHR5cGUgaXMgc3RydWN0dXJlZCAoYXJyYXkgb3IKKyAgICBvYmpl
Y3QpLgorCisgICAgQHJldHVybiBgdHJ1ZWAgaWYgdHlwZSBpcyBzdHJ1Y3R1cmVkIChhcnJheSBv
ciBvYmplY3QpLCBgZmFsc2VgIG90aGVyd2lzZS4KKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50
LgorCisgICAgQGV4Y2VwdGlvbnNhZmV0eSBOby10aHJvdyBndWFyYW50ZWU6IHRoaXMgbWVtYmVy
IGZ1bmN0aW9uIG5ldmVyIHRocm93cworICAgIGV4Y2VwdGlvbnMuCisKKyAgICBAbGl2ZWV4YW1w
bGV7VGhlIGZvbGxvd2luZyBjb2RlIGV4ZW1wbGlmaWVzIGBpc19zdHJ1Y3R1cmVkKClgIGZvciBh
bGwgSlNPTgorICAgIHR5cGVzLixpc19zdHJ1Y3R1cmVkfQorCisgICAgQHNhIEByZWYgaXNfcHJp
bWl0aXZlKCkgLS0gcmV0dXJucyB3aGV0aGVyIHZhbHVlIGlzIHByaW1pdGl2ZQorICAgIEBzYSBA
cmVmIGlzX2FycmF5KCkgLS0gcmV0dXJucyB3aGV0aGVyIHZhbHVlIGlzIGFuIGFycmF5CisgICAg
QHNhIEByZWYgaXNfb2JqZWN0KCkgLS0gcmV0dXJucyB3aGV0aGVyIHZhbHVlIGlzIGFuIG9iamVj
dAorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGNvbnN0ZXhwciBib29s
IGlzX3N0cnVjdHVyZWQoKSBjb25zdCBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlz
X2FycmF5KCkgb3IgaXNfb2JqZWN0KCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIHJl
dHVybiB3aGV0aGVyIHZhbHVlIGlzIG51bGwKKworICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0
cnVlIGlmZiB0aGUgSlNPTiB2YWx1ZSBpcyBudWxsLgorCisgICAgQHJldHVybiBgdHJ1ZWAgaWYg
dHlwZSBpcyBudWxsLCBgZmFsc2VgIG90aGVyd2lzZS4KKworICAgIEBjb21wbGV4aXR5IENvbnN0
YW50LgorCisgICAgQGV4Y2VwdGlvbnNhZmV0eSBOby10aHJvdyBndWFyYW50ZWU6IHRoaXMgbWVt
YmVyIGZ1bmN0aW9uIG5ldmVyIHRocm93cworICAgIGV4Y2VwdGlvbnMuCisKKyAgICBAbGl2ZWV4
YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIGV4ZW1wbGlmaWVzIGBpc19udWxsKClgIGZvciBhbGwg
SlNPTgorICAgIHR5cGVzLixpc19udWxsfQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAg
ICAqLworICAgIGNvbnN0ZXhwciBib29sIGlzX251bGwoKSBjb25zdCBub2V4Y2VwdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fdHlwZSA9PSB2YWx1ZV90OjpudWxsOworICAgIH0KKworICAgIC8q
IQorICAgIEBicmllZiByZXR1cm4gd2hldGhlciB2YWx1ZSBpcyBhIGJvb2xlYW4KKworICAgIFRo
aXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmZiB0aGUgSlNPTiB2YWx1ZSBpcyBhIGJvb2xlYW4u
CisKKyAgICBAcmV0dXJuIGB0cnVlYCBpZiB0eXBlIGlzIGJvb2xlYW4sIGBmYWxzZWAgb3RoZXJ3
aXNlLgorCisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAZXhjZXB0aW9uc2FmZXR5
IE5vLXRocm93IGd1YXJhbnRlZTogdGhpcyBtZW1iZXIgZnVuY3Rpb24gbmV2ZXIgdGhyb3dzCisg
ICAgZXhjZXB0aW9ucy4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgZXhl
bXBsaWZpZXMgYGlzX2Jvb2xlYW4oKWAgZm9yIGFsbCBKU09OCisgICAgdHlwZXMuLGlzX2Jvb2xl
YW59CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgY29uc3RleHByIGJv
b2wgaXNfYm9vbGVhbigpIGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAgICByZXR1cm4gbV90
eXBlID09IHZhbHVlX3Q6OmJvb2xlYW47CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIHJl
dHVybiB3aGV0aGVyIHZhbHVlIGlzIGEgbnVtYmVyCisKKyAgICBUaGlzIGZ1bmN0aW9uIHJldHVy
bnMgdHJ1ZSBpZmYgdGhlIEpTT04gdmFsdWUgaXMgYSBudW1iZXIuIFRoaXMgaW5jbHVkZXMKKyAg
ICBib3RoIGludGVnZXIgYW5kIGZsb2F0aW5nLXBvaW50IHZhbHVlcy4KKworICAgIEByZXR1cm4g
YHRydWVgIGlmIHR5cGUgaXMgbnVtYmVyIChyZWdhcmRsZXNzIHdoZXRoZXIgaW50ZWdlciwgdW5z
aWduZWQKKyAgICBpbnRlZ2VyIG9yIGZsb2F0aW5nLXR5cGUpLCBgZmFsc2VgIG90aGVyd2lzZS4K
KworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQGV4Y2VwdGlvbnNhZmV0eSBOby10
aHJvdyBndWFyYW50ZWU6IHRoaXMgbWVtYmVyIGZ1bmN0aW9uIG5ldmVyIHRocm93cworICAgIGV4
Y2VwdGlvbnMuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIGV4ZW1wbGlm
aWVzIGBpc19udW1iZXIoKWAgZm9yIGFsbCBKU09OCisgICAgdHlwZXMuLGlzX251bWJlcn0KKwor
ICAgIEBzYSBAcmVmIGlzX251bWJlcl9pbnRlZ2VyKCkgLS0gY2hlY2sgaWYgdmFsdWUgaXMgYW4g
aW50ZWdlciBvciB1bnNpZ25lZAorICAgIGludGVnZXIgbnVtYmVyCisgICAgQHNhIEByZWYgaXNf
bnVtYmVyX3Vuc2lnbmVkKCkgLS0gY2hlY2sgaWYgdmFsdWUgaXMgYW4gdW5zaWduZWQgaW50ZWdl
cgorICAgIG51bWJlcgorICAgIEBzYSBAcmVmIGlzX251bWJlcl9mbG9hdCgpIC0tIGNoZWNrIGlm
IHZhbHVlIGlzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyCisKKyAgICBAc2luY2UgdmVyc2lvbiAx
LjAuMAorICAgICovCisgICAgY29uc3RleHByIGJvb2wgaXNfbnVtYmVyKCkgY29uc3Qgbm9leGNl
cHQKKyAgICB7CisgICAgICAgIHJldHVybiBpc19udW1iZXJfaW50ZWdlcigpIG9yIGlzX251bWJl
cl9mbG9hdCgpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiByZXR1cm4gd2hldGhlciB2
YWx1ZSBpcyBhbiBpbnRlZ2VyIG51bWJlcgorCisgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRy
dWUgaWZmIHRoZSBKU09OIHZhbHVlIGlzIGFuIGludGVnZXIgb3IgdW5zaWduZWQKKyAgICBpbnRl
Z2VyIG51bWJlci4gVGhpcyBleGNsdWRlcyBmbG9hdGluZy1wb2ludCB2YWx1ZXMuCisKKyAgICBA
cmV0dXJuIGB0cnVlYCBpZiB0eXBlIGlzIGFuIGludGVnZXIgb3IgdW5zaWduZWQgaW50ZWdlciBu
dW1iZXIsIGBmYWxzZWAKKyAgICBvdGhlcndpc2UuCisKKyAgICBAY29tcGxleGl0eSBDb25zdGFu
dC4KKworICAgIEBleGNlcHRpb25zYWZldHkgTm8tdGhyb3cgZ3VhcmFudGVlOiB0aGlzIG1lbWJl
ciBmdW5jdGlvbiBuZXZlciB0aHJvd3MKKyAgICBleGNlcHRpb25zLgorCisgICAgQGxpdmVleGFt
cGxle1RoZSBmb2xsb3dpbmcgY29kZSBleGVtcGxpZmllcyBgaXNfbnVtYmVyX2ludGVnZXIoKWAg
Zm9yIGFsbAorICAgIEpTT04gdHlwZXMuLGlzX251bWJlcl9pbnRlZ2VyfQorCisgICAgQHNhIEBy
ZWYgaXNfbnVtYmVyKCkgLS0gY2hlY2sgaWYgdmFsdWUgaXMgYSBudW1iZXIKKyAgICBAc2EgQHJl
ZiBpc19udW1iZXJfdW5zaWduZWQoKSAtLSBjaGVjayBpZiB2YWx1ZSBpcyBhbiB1bnNpZ25lZCBp
bnRlZ2VyCisgICAgbnVtYmVyCisgICAgQHNhIEByZWYgaXNfbnVtYmVyX2Zsb2F0KCkgLS0gY2hl
Y2sgaWYgdmFsdWUgaXMgYSBmbG9hdGluZy1wb2ludCBudW1iZXIKKworICAgIEBzaW5jZSB2ZXJz
aW9uIDEuMC4wCisgICAgKi8KKyAgICBjb25zdGV4cHIgYm9vbCBpc19udW1iZXJfaW50ZWdlcigp
IGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAgICByZXR1cm4gbV90eXBlID09IHZhbHVlX3Q6
Om51bWJlcl9pbnRlZ2VyIG9yIG1fdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQ7Cisg
ICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIHJldHVybiB3aGV0aGVyIHZhbHVlIGlzIGFuIHVu
c2lnbmVkIGludGVnZXIgbnVtYmVyCisKKyAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBp
ZmYgdGhlIEpTT04gdmFsdWUgaXMgYW4gdW5zaWduZWQgaW50ZWdlcgorICAgIG51bWJlci4gVGhp
cyBleGNsdWRlcyBmbG9hdGluZy1wb2ludCBhbmQgKHNpZ25lZCkgaW50ZWdlciB2YWx1ZXMuCisK
KyAgICBAcmV0dXJuIGB0cnVlYCBpZiB0eXBlIGlzIGFuIHVuc2lnbmVkIGludGVnZXIgbnVtYmVy
LCBgZmFsc2VgIG90aGVyd2lzZS4KKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAg
QGV4Y2VwdGlvbnNhZmV0eSBOby10aHJvdyBndWFyYW50ZWU6IHRoaXMgbWVtYmVyIGZ1bmN0aW9u
IG5ldmVyIHRocm93cworICAgIGV4Y2VwdGlvbnMuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZv
bGxvd2luZyBjb2RlIGV4ZW1wbGlmaWVzIGBpc19udW1iZXJfdW5zaWduZWQoKWAgZm9yIGFsbAor
ICAgIEpTT04gdHlwZXMuLGlzX251bWJlcl91bnNpZ25lZH0KKworICAgIEBzYSBAcmVmIGlzX251
bWJlcigpIC0tIGNoZWNrIGlmIHZhbHVlIGlzIGEgbnVtYmVyCisgICAgQHNhIEByZWYgaXNfbnVt
YmVyX2ludGVnZXIoKSAtLSBjaGVjayBpZiB2YWx1ZSBpcyBhbiBpbnRlZ2VyIG9yIHVuc2lnbmVk
CisgICAgaW50ZWdlciBudW1iZXIKKyAgICBAc2EgQHJlZiBpc19udW1iZXJfZmxvYXQoKSAtLSBj
aGVjayBpZiB2YWx1ZSBpcyBhIGZsb2F0aW5nLXBvaW50IG51bWJlcgorCisgICAgQHNpbmNlIHZl
cnNpb24gMi4wLjAKKyAgICAqLworICAgIGNvbnN0ZXhwciBib29sIGlzX251bWJlcl91bnNpZ25l
ZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAgICByZXR1cm4gbV90eXBlID09IHZhbHVl
X3Q6Om51bWJlcl91bnNpZ25lZDsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgcmV0dXJu
IHdoZXRoZXIgdmFsdWUgaXMgYSBmbG9hdGluZy1wb2ludCBudW1iZXIKKworICAgIFRoaXMgZnVu
Y3Rpb24gcmV0dXJucyB0cnVlIGlmZiB0aGUgSlNPTiB2YWx1ZSBpcyBhIGZsb2F0aW5nLXBvaW50
IG51bWJlci4KKyAgICBUaGlzIGV4Y2x1ZGVzIGludGVnZXIgYW5kIHVuc2lnbmVkIGludGVnZXIg
dmFsdWVzLgorCisgICAgQHJldHVybiBgdHJ1ZWAgaWYgdHlwZSBpcyBhIGZsb2F0aW5nLXBvaW50
IG51bWJlciwgYGZhbHNlYCBvdGhlcndpc2UuCisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudC4K
KworICAgIEBleGNlcHRpb25zYWZldHkgTm8tdGhyb3cgZ3VhcmFudGVlOiB0aGlzIG1lbWJlciBm
dW5jdGlvbiBuZXZlciB0aHJvd3MKKyAgICBleGNlcHRpb25zLgorCisgICAgQGxpdmVleGFtcGxl
e1RoZSBmb2xsb3dpbmcgY29kZSBleGVtcGxpZmllcyBgaXNfbnVtYmVyX2Zsb2F0KClgIGZvciBh
bGwKKyAgICBKU09OIHR5cGVzLixpc19udW1iZXJfZmxvYXR9CisKKyAgICBAc2EgQHJlZiBpc19u
dW1iZXIoKSAtLSBjaGVjayBpZiB2YWx1ZSBpcyBudW1iZXIKKyAgICBAc2EgQHJlZiBpc19udW1i
ZXJfaW50ZWdlcigpIC0tIGNoZWNrIGlmIHZhbHVlIGlzIGFuIGludGVnZXIgbnVtYmVyCisgICAg
QHNhIEByZWYgaXNfbnVtYmVyX3Vuc2lnbmVkKCkgLS0gY2hlY2sgaWYgdmFsdWUgaXMgYW4gdW5z
aWduZWQgaW50ZWdlcgorICAgIG51bWJlcgorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAg
ICAqLworICAgIGNvbnN0ZXhwciBib29sIGlzX251bWJlcl9mbG9hdCgpIGNvbnN0IG5vZXhjZXB0
CisgICAgeworICAgICAgICByZXR1cm4gbV90eXBlID09IHZhbHVlX3Q6Om51bWJlcl9mbG9hdDsK
KyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgcmV0dXJuIHdoZXRoZXIgdmFsdWUgaXMgYW4g
b2JqZWN0CisKKyAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZmYgdGhlIEpTT04gdmFs
dWUgaXMgYW4gb2JqZWN0LgorCisgICAgQHJldHVybiBgdHJ1ZWAgaWYgdHlwZSBpcyBvYmplY3Qs
IGBmYWxzZWAgb3RoZXJ3aXNlLgorCisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBA
ZXhjZXB0aW9uc2FmZXR5IE5vLXRocm93IGd1YXJhbnRlZTogdGhpcyBtZW1iZXIgZnVuY3Rpb24g
bmV2ZXIgdGhyb3dzCisgICAgZXhjZXB0aW9ucy4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9s
bG93aW5nIGNvZGUgZXhlbXBsaWZpZXMgYGlzX29iamVjdCgpYCBmb3IgYWxsIEpTT04KKyAgICB0
eXBlcy4saXNfb2JqZWN0fQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAg
IGNvbnN0ZXhwciBib29sIGlzX29iamVjdCgpIGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAg
ICByZXR1cm4gbV90eXBlID09IHZhbHVlX3Q6Om9iamVjdDsKKyAgICB9CisKKyAgICAvKiEKKyAg
ICBAYnJpZWYgcmV0dXJuIHdoZXRoZXIgdmFsdWUgaXMgYW4gYXJyYXkKKworICAgIFRoaXMgZnVu
Y3Rpb24gcmV0dXJucyB0cnVlIGlmZiB0aGUgSlNPTiB2YWx1ZSBpcyBhbiBhcnJheS4KKworICAg
IEByZXR1cm4gYHRydWVgIGlmIHR5cGUgaXMgYXJyYXksIGBmYWxzZWAgb3RoZXJ3aXNlLgorCisg
ICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAZXhjZXB0aW9uc2FmZXR5IE5vLXRocm93
IGd1YXJhbnRlZTogdGhpcyBtZW1iZXIgZnVuY3Rpb24gbmV2ZXIgdGhyb3dzCisgICAgZXhjZXB0
aW9ucy4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgZXhlbXBsaWZpZXMg
YGlzX2FycmF5KClgIGZvciBhbGwgSlNPTgorICAgIHR5cGVzLixpc19hcnJheX0KKworICAgIEBz
aW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBjb25zdGV4cHIgYm9vbCBpc19hcnJheSgp
IGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAgICByZXR1cm4gbV90eXBlID09IHZhbHVlX3Q6
OmFycmF5OworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiByZXR1cm4gd2hldGhlciB2YWx1
ZSBpcyBhIHN0cmluZworCisgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWZmIHRoZSBK
U09OIHZhbHVlIGlzIGEgc3RyaW5nLgorCisgICAgQHJldHVybiBgdHJ1ZWAgaWYgdHlwZSBpcyBz
dHJpbmcsIGBmYWxzZWAgb3RoZXJ3aXNlLgorCisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisK
KyAgICBAZXhjZXB0aW9uc2FmZXR5IE5vLXRocm93IGd1YXJhbnRlZTogdGhpcyBtZW1iZXIgZnVu
Y3Rpb24gbmV2ZXIgdGhyb3dzCisgICAgZXhjZXB0aW9ucy4KKworICAgIEBsaXZlZXhhbXBsZXtU
aGUgZm9sbG93aW5nIGNvZGUgZXhlbXBsaWZpZXMgYGlzX3N0cmluZygpYCBmb3IgYWxsIEpTT04K
KyAgICB0eXBlcy4saXNfc3RyaW5nfQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAq
LworICAgIGNvbnN0ZXhwciBib29sIGlzX3N0cmluZygpIGNvbnN0IG5vZXhjZXB0CisgICAgewor
ICAgICAgICByZXR1cm4gbV90eXBlID09IHZhbHVlX3Q6OnN0cmluZzsKKyAgICB9CisKKyAgICAv
KiEKKyAgICBAYnJpZWYgcmV0dXJuIHdoZXRoZXIgdmFsdWUgaXMgZGlzY2FyZGVkCisKKyAgICBU
aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZmYgdGhlIEpTT04gdmFsdWUgd2FzIGRpc2NhcmRl
ZCBkdXJpbmcgcGFyc2luZworICAgIHdpdGggYSBjYWxsYmFjayBmdW5jdGlvbiAoc2VlIEByZWYg
cGFyc2VyX2NhbGxiYWNrX3QpLgorCisgICAgQG5vdGUgVGhpcyBmdW5jdGlvbiB3aWxsIGFsd2F5
cyBiZSBgZmFsc2VgIGZvciBKU09OIHZhbHVlcyBhZnRlciBwYXJzaW5nLgorICAgIFRoYXQgaXMs
IGRpc2NhcmRlZCB2YWx1ZXMgY2FuIG9ubHkgb2NjdXIgZHVyaW5nIHBhcnNpbmcsIGJ1dCB3aWxs
IGJlCisgICAgcmVtb3ZlZCB3aGVuIGluc2lkZSBhIHN0cnVjdHVyZWQgdmFsdWUgb3IgcmVwbGFj
ZWQgYnkgbnVsbCBpbiBvdGhlciBjYXNlcy4KKworICAgIEByZXR1cm4gYHRydWVgIGlmIHR5cGUg
aXMgZGlzY2FyZGVkLCBgZmFsc2VgIG90aGVyd2lzZS4KKworICAgIEBjb21wbGV4aXR5IENvbnN0
YW50LgorCisgICAgQGV4Y2VwdGlvbnNhZmV0eSBOby10aHJvdyBndWFyYW50ZWU6IHRoaXMgbWVt
YmVyIGZ1bmN0aW9uIG5ldmVyIHRocm93cworICAgIGV4Y2VwdGlvbnMuCisKKyAgICBAbGl2ZWV4
YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIGV4ZW1wbGlmaWVzIGBpc19kaXNjYXJkZWQoKWAgZm9y
IGFsbCBKU09OCisgICAgdHlwZXMuLGlzX2Rpc2NhcmRlZH0KKworICAgIEBzaW5jZSB2ZXJzaW9u
IDEuMC4wCisgICAgKi8KKyAgICBjb25zdGV4cHIgYm9vbCBpc19kaXNjYXJkZWQoKSBjb25zdCBu
b2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHlwZSA9PSB2YWx1ZV90OjpkaXNjYXJk
ZWQ7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIHJldHVybiB0aGUgdHlwZSBvZiB0aGUg
SlNPTiB2YWx1ZSAoaW1wbGljaXQpCisKKyAgICBJbXBsaWNpdGx5IHJldHVybiB0aGUgdHlwZSBv
ZiB0aGUgSlNPTiB2YWx1ZSBhcyBhIHZhbHVlIGZyb20gdGhlIEByZWYKKyAgICB2YWx1ZV90IGVu
dW1lcmF0aW9uLgorCisgICAgQHJldHVybiB0aGUgdHlwZSBvZiB0aGUgSlNPTiB2YWx1ZQorCisg
ICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAZXhjZXB0aW9uc2FmZXR5IE5vLXRocm93
IGd1YXJhbnRlZTogdGhpcyBtZW1iZXIgZnVuY3Rpb24gbmV2ZXIgdGhyb3dzCisgICAgZXhjZXB0
aW9ucy4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgZXhlbXBsaWZpZXMg
dGhlIEByZWYgdmFsdWVfdCBvcGVyYXRvciBmb3IKKyAgICBhbGwgSlNPTiB0eXBlcy4sb3BlcmF0
b3JfX3ZhbHVlX3R9CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgY29u
c3RleHByIG9wZXJhdG9yIHZhbHVlX3QoKSBjb25zdCBub2V4Y2VwdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fdHlwZTsKKyAgICB9CisKKyAgICAvLy8gQH0KKworICBwcml2YXRlOgorICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLworICAgIC8vIHZhbHVlIGFjY2VzcyAvLworICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLworCisgICAgLy8vIGdldCBhbiBvYmplY3QgKGV4cGxpY2l0KQorICAgIHRlbXBsYXRl
PGNsYXNzIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAorICAgICAgICAgICAgICAgICBzdGQ6
OmlzX2NvbnZlcnRpYmxlPHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlwZSwgdHlwZW5hbWUgVDo6
a2V5X3R5cGU+Ojp2YWx1ZSBhbmQKKyAgICAgICAgICAgICAgICAgc3RkOjppc19jb252ZXJ0aWJs
ZTxiYXNpY19qc29uX3QsIHR5cGVuYW1lIFQ6Om1hcHBlZF90eXBlPjo6dmFsdWUsIGludD46OnR5
cGUgPSAwPgorICAgIFQgZ2V0X2ltcGwoVCopIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNf
b2JqZWN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBUKG1fdmFsdWUub2JqZWN0
LT5iZWdpbigpLCBtX3ZhbHVlLm9iamVjdC0+ZW5kKCkpOworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJ0eXBl
IG11c3QgYmUgb2JqZWN0LCBidXQgaXMgIiArIHR5cGVfbmFtZSgpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vLyBnZXQgYW4gb2JqZWN0IChleHBsaWNpdCkKKyAgICBvYmplY3RfdCBnZXRf
aW1wbChvYmplY3RfdCopIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNfb2JqZWN0KCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqKG1fdmFsdWUub2JqZWN0KTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWlu
X2Vycm9yPigidHlwZSBtdXN0IGJlIG9iamVjdCwgYnV0IGlzICIgKyB0eXBlX25hbWUoKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8gZ2V0IGFuIGFycmF5IChleHBsaWNpdCkKKyAgICB0
ZW1wbGF0ZTxjbGFzcyBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKKyAgICAgICAgICAgICAg
ICAgc3RkOjppc19jb252ZXJ0aWJsZTxiYXNpY19qc29uX3QsIHR5cGVuYW1lIFQ6OnZhbHVlX3R5
cGU+Ojp2YWx1ZSBhbmQKKyAgICAgICAgICAgICAgICAgbm90IHN0ZDo6aXNfc2FtZTxiYXNpY19q
c29uX3QsIHR5cGVuYW1lIFQ6OnZhbHVlX3R5cGU+Ojp2YWx1ZSBhbmQKKyAgICAgICAgICAgICAg
ICAgbm90IHN0ZDo6aXNfYXJpdGhtZXRpYzxUPjo6dmFsdWUgYW5kCisgICAgICAgICAgICAgICAg
IG5vdCBzdGQ6OmlzX2NvbnZlcnRpYmxlPHN0ZDo6c3RyaW5nLCBUPjo6dmFsdWUgYW5kCisgICAg
ICAgICAgICAgICAgIG5vdCBoYXNfbWFwcGVkX3R5cGU8VD46OnZhbHVlLCBpbnQ+Ojp0eXBlID0g
MD4KKyAgICBUIGdldF9pbXBsKFQqKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzX2FycmF5
KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFQgdG9fdmVjdG9yOworICAgICAgICAgICAgc3Rk
Ojp0cmFuc2Zvcm0obV92YWx1ZS5hcnJheS0+YmVnaW4oKSwgbV92YWx1ZS5hcnJheS0+ZW5kKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Omluc2VydGVyKHRvX3ZlY3RvciwgdG9f
dmVjdG9yLmVuZCgpKSwgW10oYmFzaWNfanNvbiBpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBpLmdldDx0eXBlbmFtZSBUOjp2YWx1ZV90eXBlPigpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICByZXR1cm4gdG9fdmVjdG9yOworICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJ0
eXBlIG11c3QgYmUgYXJyYXksIGJ1dCBpcyAiICsgdHlwZV9uYW1lKCkpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8vIGdldCBhbiBhcnJheSAoZXhwbGljaXQpCisgICAgdGVtcGxhdGU8Y2xh
c3MgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8CisgICAgICAgICAgICAgICAgIHN0ZDo6aXNf
Y29udmVydGlibGU8YmFzaWNfanNvbl90LCBUPjo6dmFsdWUgYW5kCisgICAgICAgICAgICAgICAg
IG5vdCBzdGQ6OmlzX3NhbWU8YmFzaWNfanNvbl90LCBUPjo6dmFsdWUsIGludD46OnR5cGUgPSAw
PgorICAgIHN0ZDo6dmVjdG9yPFQ+IGdldF9pbXBsKHN0ZDo6dmVjdG9yPFQ+KikgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmIChpc19hcnJheSgpKQorICAgICAgICB7CisgICAgICAgICAgICBzdGQ6
OnZlY3RvcjxUPiB0b192ZWN0b3I7CisgICAgICAgICAgICB0b192ZWN0b3IucmVzZXJ2ZShtX3Zh
bHVlLmFycmF5LT5zaXplKCkpOworICAgICAgICAgICAgc3RkOjp0cmFuc2Zvcm0obV92YWx1ZS5h
cnJheS0+YmVnaW4oKSwgbV92YWx1ZS5hcnJheS0+ZW5kKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6Omluc2VydGVyKHRvX3ZlY3RvciwgdG9fdmVjdG9yLmVuZCgpKSwgW10oYmFz
aWNfanNvbiBpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBpLmdldDxU
PigpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gdG9fdmVjdG9yOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3c8c3RkOjpk
b21haW5fZXJyb3I+KCJ0eXBlIG11c3QgYmUgYXJyYXksIGJ1dCBpcyAiICsgdHlwZV9uYW1lKCkp
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8vIGdldCBhbiBhcnJheSAoZXhwbGljaXQpCisg
ICAgdGVtcGxhdGU8Y2xhc3MgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8CisgICAgICAgICAg
ICAgICAgIHN0ZDo6aXNfc2FtZTxiYXNpY19qc29uLCB0eXBlbmFtZSBUOjp2YWx1ZV90eXBlPjo6
dmFsdWUgYW5kCisgICAgICAgICAgICAgICAgIG5vdCBoYXNfbWFwcGVkX3R5cGU8VD46OnZhbHVl
LCBpbnQ+Ojp0eXBlID0gMD4KKyAgICBUIGdldF9pbXBsKFQqKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKGlzX2FycmF5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBUKG1fdmFs
dWUuYXJyYXktPmJlZ2luKCksIG1fdmFsdWUuYXJyYXktPmVuZCgpKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9y
PigidHlwZSBtdXN0IGJlIGFycmF5LCBidXQgaXMgIiArIHR5cGVfbmFtZSgpKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vLyBnZXQgYW4gYXJyYXkgKGV4cGxpY2l0KQorICAgIGFycmF5X3Qg
Z2V0X2ltcGwoYXJyYXlfdCopIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNfYXJyYXkoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICoobV92YWx1ZS5hcnJheSk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFp
bl9lcnJvcj4oInR5cGUgbXVzdCBiZSBhcnJheSwgYnV0IGlzICIgKyB0eXBlX25hbWUoKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8gZ2V0IGEgc3RyaW5nIChleHBsaWNpdCkKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKKyAgICAgICAgICAg
ICAgICAgc3RkOjppc19jb252ZXJ0aWJsZTxzdHJpbmdfdCwgVD46OnZhbHVlLCBpbnQ+Ojp0eXBl
ID0gMD4KKyAgICBUIGdldF9pbXBsKFQqKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzX3N0
cmluZygpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKm1fdmFsdWUuc3RyaW5nOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3c8c3Rk
Ojpkb21haW5fZXJyb3I+KCJ0eXBlIG11c3QgYmUgc3RyaW5nLCBidXQgaXMgIiArIHR5cGVfbmFt
ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLyBnZXQgYSBudW1iZXIgKGV4cGxpY2l0
KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAorICAg
ICAgICAgICAgICAgICBzdGQ6OmlzX2FyaXRobWV0aWM8VD46OnZhbHVlLCBpbnQ+Ojp0eXBlID0g
MD4KKyAgICBUIGdldF9pbXBsKFQqKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX3R5
cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2ludGVnZXI6
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KG1f
dmFsdWUubnVtYmVyX2ludGVnZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNl
IHZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4obV92YWx1ZS5udW1iZXJfdW5zaWduZWQpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4obV92YWx1ZS5u
dW1iZXJfZmxvYXQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigidHlw
ZSBtdXN0IGJlIG51bWJlciwgYnV0IGlzICIgKyB0eXBlX25hbWUoKSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8gZ2V0IGEgYm9vbGVhbiAoZXhwbGljaXQpCisg
ICAgY29uc3RleHByIGJvb2xlYW5fdCBnZXRfaW1wbChib29sZWFuX3QqKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGlzX2Jvb2xlYW4oKQorICAgICAgICAgICAgICAgPyBtX3ZhbHVlLmJv
b2xlYW4KKyAgICAgICAgICAgICAgIDogVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJ0eXBlIG11
c3QgYmUgYm9vbGVhbiwgYnV0IGlzICIgKyB0eXBlX25hbWUoKSksIGZhbHNlOworICAgIH0KKwor
ICAgIC8vLyBnZXQgYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSAob2JqZWN0KQorICAgIG9iamVjdF90
KiBnZXRfaW1wbF9wdHIob2JqZWN0X3QqKSBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGlzX29iamVjdCgpID8gbV92YWx1ZS5vYmplY3QgOiBudWxscHRyOworICAgIH0KKworICAgIC8v
LyBnZXQgYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSAob2JqZWN0KQorICAgIGNvbnN0ZXhwciBjb25z
dCBvYmplY3RfdCogZ2V0X2ltcGxfcHRyKGNvbnN0IG9iamVjdF90KikgY29uc3Qgbm9leGNlcHQK
KyAgICB7CisgICAgICAgIHJldHVybiBpc19vYmplY3QoKSA/IG1fdmFsdWUub2JqZWN0IDogbnVs
bHB0cjsKKyAgICB9CisKKyAgICAvLy8gZ2V0IGEgcG9pbnRlciB0byB0aGUgdmFsdWUgKGFycmF5
KQorICAgIGFycmF5X3QqIGdldF9pbXBsX3B0cihhcnJheV90Kikgbm9leGNlcHQKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpc19hcnJheSgpID8gbV92YWx1ZS5hcnJheSA6IG51bGxwdHI7CisgICAg
fQorCisgICAgLy8vIGdldCBhIHBvaW50ZXIgdG8gdGhlIHZhbHVlIChhcnJheSkKKyAgICBjb25z
dGV4cHIgY29uc3QgYXJyYXlfdCogZ2V0X2ltcGxfcHRyKGNvbnN0IGFycmF5X3QqKSBjb25zdCBu
b2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzX2FycmF5KCkgPyBtX3ZhbHVlLmFycmF5
IDogbnVsbHB0cjsKKyAgICB9CisKKyAgICAvLy8gZ2V0IGEgcG9pbnRlciB0byB0aGUgdmFsdWUg
KHN0cmluZykKKyAgICBzdHJpbmdfdCogZ2V0X2ltcGxfcHRyKHN0cmluZ190Kikgbm9leGNlcHQK
KyAgICB7CisgICAgICAgIHJldHVybiBpc19zdHJpbmcoKSA/IG1fdmFsdWUuc3RyaW5nIDogbnVs
bHB0cjsKKyAgICB9CisKKyAgICAvLy8gZ2V0IGEgcG9pbnRlciB0byB0aGUgdmFsdWUgKHN0cmlu
ZykKKyAgICBjb25zdGV4cHIgY29uc3Qgc3RyaW5nX3QqIGdldF9pbXBsX3B0cihjb25zdCBzdHJp
bmdfdCopIGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAgICByZXR1cm4gaXNfc3RyaW5nKCkg
PyBtX3ZhbHVlLnN0cmluZyA6IG51bGxwdHI7CisgICAgfQorCisgICAgLy8vIGdldCBhIHBvaW50
ZXIgdG8gdGhlIHZhbHVlIChib29sZWFuKQorICAgIGJvb2xlYW5fdCogZ2V0X2ltcGxfcHRyKGJv
b2xlYW5fdCopIG5vZXhjZXB0CisgICAgeworICAgICAgICByZXR1cm4gaXNfYm9vbGVhbigpID8g
Jm1fdmFsdWUuYm9vbGVhbiA6IG51bGxwdHI7CisgICAgfQorCisgICAgLy8vIGdldCBhIHBvaW50
ZXIgdG8gdGhlIHZhbHVlIChib29sZWFuKQorICAgIGNvbnN0ZXhwciBjb25zdCBib29sZWFuX3Qq
IGdldF9pbXBsX3B0cihjb25zdCBib29sZWFuX3QqKSBjb25zdCBub2V4Y2VwdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzX2Jvb2xlYW4oKSA/ICZtX3ZhbHVlLmJvb2xlYW4gOiBudWxscHRyOwor
ICAgIH0KKworICAgIC8vLyBnZXQgYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSAoaW50ZWdlciBudW1i
ZXIpCisgICAgbnVtYmVyX2ludGVnZXJfdCogZ2V0X2ltcGxfcHRyKG51bWJlcl9pbnRlZ2VyX3Qq
KSBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzX251bWJlcl9pbnRlZ2VyKCkgPyAm
bV92YWx1ZS5udW1iZXJfaW50ZWdlciA6IG51bGxwdHI7CisgICAgfQorCisgICAgLy8vIGdldCBh
IHBvaW50ZXIgdG8gdGhlIHZhbHVlIChpbnRlZ2VyIG51bWJlcikKKyAgICBjb25zdGV4cHIgY29u
c3QgbnVtYmVyX2ludGVnZXJfdCogZ2V0X2ltcGxfcHRyKGNvbnN0IG51bWJlcl9pbnRlZ2VyX3Qq
KSBjb25zdCBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzX251bWJlcl9pbnRlZ2Vy
KCkgPyAmbV92YWx1ZS5udW1iZXJfaW50ZWdlciA6IG51bGxwdHI7CisgICAgfQorCisgICAgLy8v
IGdldCBhIHBvaW50ZXIgdG8gdGhlIHZhbHVlICh1bnNpZ25lZCBudW1iZXIpCisgICAgbnVtYmVy
X3Vuc2lnbmVkX3QqIGdldF9pbXBsX3B0cihudW1iZXJfdW5zaWduZWRfdCopIG5vZXhjZXB0Cisg
ICAgeworICAgICAgICByZXR1cm4gaXNfbnVtYmVyX3Vuc2lnbmVkKCkgPyAmbV92YWx1ZS5udW1i
ZXJfdW5zaWduZWQgOiBudWxscHRyOworICAgIH0KKworICAgIC8vLyBnZXQgYSBwb2ludGVyIHRv
IHRoZSB2YWx1ZSAodW5zaWduZWQgbnVtYmVyKQorICAgIGNvbnN0ZXhwciBjb25zdCBudW1iZXJf
dW5zaWduZWRfdCogZ2V0X2ltcGxfcHRyKGNvbnN0IG51bWJlcl91bnNpZ25lZF90KikgY29uc3Qg
bm9leGNlcHQKKyAgICB7CisgICAgICAgIHJldHVybiBpc19udW1iZXJfdW5zaWduZWQoKSA/ICZt
X3ZhbHVlLm51bWJlcl91bnNpZ25lZCA6IG51bGxwdHI7CisgICAgfQorCisgICAgLy8vIGdldCBh
IHBvaW50ZXIgdG8gdGhlIHZhbHVlIChmbG9hdGluZy1wb2ludCBudW1iZXIpCisgICAgbnVtYmVy
X2Zsb2F0X3QqIGdldF9pbXBsX3B0cihudW1iZXJfZmxvYXRfdCopIG5vZXhjZXB0CisgICAgewor
ICAgICAgICByZXR1cm4gaXNfbnVtYmVyX2Zsb2F0KCkgPyAmbV92YWx1ZS5udW1iZXJfZmxvYXQg
OiBudWxscHRyOworICAgIH0KKworICAgIC8vLyBnZXQgYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSAo
ZmxvYXRpbmctcG9pbnQgbnVtYmVyKQorICAgIGNvbnN0ZXhwciBjb25zdCBudW1iZXJfZmxvYXRf
dCogZ2V0X2ltcGxfcHRyKGNvbnN0IG51bWJlcl9mbG9hdF90KikgY29uc3Qgbm9leGNlcHQKKyAg
ICB7CisgICAgICAgIHJldHVybiBpc19udW1iZXJfZmxvYXQoKSA/ICZtX3ZhbHVlLm51bWJlcl9m
bG9hdCA6IG51bGxwdHI7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGhlbHBlciBmdW5j
dGlvbiB0byBpbXBsZW1lbnQgZ2V0X3JlZigpCisKKyAgICBUaGlzIGZ1bmNpb24gaGVscHMgdG8g
aW1wbGVtZW50IGdldF9yZWYoKSB3aXRob3V0IGNvZGUgZHVwbGljYXRpb24gZm9yCisgICAgY29u
c3QgYW5kIG5vbi1jb25zdCBvdmVybG9hZHMKKworICAgIEB0cGFyYW0gVGhpc1R5cGUgd2lsbCBi
ZSBkZWR1Y2VkIGFzIGBiYXNpY19qc29uYCBvciBgY29uc3QgYmFzaWNfanNvbmAKKworICAgIEB0
aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBSZWZlcmVuY2VUeXBlIGRvZXMgbm90IG1hdGNoIHVu
ZGVybHlpbmcgdmFsdWUKKyAgICB0eXBlIG9mIHRoZSBjdXJyZW50IEpTT04KKyAgICAqLworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFJlZmVyZW5jZVR5cGUsIHR5cGVuYW1lIFRoaXNUeXBlPgorICAg
IHN0YXRpYyBSZWZlcmVuY2VUeXBlIGdldF9yZWZfaW1wbChUaGlzVHlwZSYgb2JqKQorICAgIHsK
KyAgICAgICAgLy8gaGVscGVyIHR5cGUKKyAgICAgICAgdXNpbmcgUG9pbnRlclR5cGUgPSB0eXBl
bmFtZSBzdGQ6OmFkZF9wb2ludGVyPFJlZmVyZW5jZVR5cGU+Ojp0eXBlOworCisgICAgICAgIC8v
IGRlbGVnYXRlIHRoZSBjYWxsIHRvIGdldF9wdHI8PigpCisgICAgICAgIGF1dG8gcHRyID0gb2Jq
LnRlbXBsYXRlIGdldF9wdHI8UG9pbnRlclR5cGU+KCk7CisKKyAgICAgICAgaWYgKHB0ciAhPSBu
dWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnB0cjsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vy
cm9yPigiaW5jb21wYXRpYmxlIFJlZmVyZW5jZVR5cGUgZm9yIGdldF9yZWYsIGFjdHVhbCB0eXBl
IGlzICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLnR5cGVfbmFt
ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICBwdWJsaWM6CisKKyAgICAvLy8gQG5hbWUgdmFs
dWUgYWNjZXNzCisgICAgLy8vIERpcmVjdCBhY2Nlc3MgdG8gdGhlIHN0b3JlZCB2YWx1ZSBvZiBh
IEpTT04gdmFsdWUuCisgICAgLy8vIEB7CisKKyAgICAvKiEKKyAgICBAYnJpZWYgZ2V0IGEgdmFs
dWUgKGV4cGxpY2l0KQorCisgICAgRXhwbGljaXQgdHlwZSBjb252ZXJzaW9uIGJldHdlZW4gdGhl
IEpTT04gdmFsdWUgYW5kIGEgY29tcGF0aWJsZSB2YWx1ZS4KKworICAgIEB0cGFyYW0gVmFsdWVU
eXBlIG5vbi1wb2ludGVyIHR5cGUgY29tcGF0aWJsZSB0byB0aGUgSlNPTiB2YWx1ZSwgZm9yCisg
ICAgaW5zdGFuY2UgYGludGAgZm9yIEpTT04gaW50ZWdlciBudW1iZXJzLCBgYm9vbGAgZm9yIEpT
T04gYm9vbGVhbnMsIG9yCisgICAgYHN0ZDo6dmVjdG9yYCB0eXBlcyBmb3IgSlNPTiBhcnJheXMK
KworICAgIEByZXR1cm4gY29weSBvZiB0aGUgSlNPTiB2YWx1ZSwgY29udmVydGVkIHRvIHR5cGUg
QGEgVmFsdWVUeXBlCisKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaW4gY2FzZSBwYXNz
ZWQgdHlwZSBAYSBWYWx1ZVR5cGUgaXMgaW5jb21wYXRpYmxlCisgICAgdG8gSlNPTjsgZXhhbXBs
ZTogYCJ0eXBlIG11c3QgYmUgb2JqZWN0LCBidXQgaXMgbnVsbCJgCisKKyAgICBAY29tcGxleGl0
eSBMaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlIEpTT04gdmFsdWUuCisKKyAgICBAbGl2ZWV4YW1w
bGV7VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3Mgc2V2ZXJhbCBjb252ZXJzaW9ucyBmcm9tIEpTT04g
dmFsdWVzCisgICAgdG8gb3RoZXIgdHlwZXMuIFRoZXJlIGEgZmV3IHRoaW5ncyB0byBub3RlOiAo
MSkgRmxvYXRpbmctcG9pbnQgbnVtYmVycyBjYW4KKyAgICBiZSBjb252ZXJ0ZWQgdG8gaW50ZWdl
cnNcLCAoMikgQSBKU09OIGFycmF5IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYSBzdGFuZGFyZAorICAg
IGBzdGQ6OnZlY3RvcjxzaG9ydD5gXCwgKDMpIEEgSlNPTiBvYmplY3QgY2FuIGJlIGNvbnZlcnRl
ZCB0byBDKysKKyAgICBhc3NvY2lhdGl2ZSBjb250YWluZXJzIHN1Y2ggYXMgYHN0ZDo6dW5vcmRl
cmVkX21hcDxzdGQ6OnN0cmluZ1wsCisgICAganNvbj5gLixnZXRfX1ZhbHVlVHlwZV9jb25zdH0K
KworICAgIEBpbnRlcm5hbAorICAgIFRoZSBpZGVhIG9mIHVzaW5nIGEgY2FzdGVkIG51bGwgcG9p
bnRlciB0byBjaG9vc2UgdGhlIGNvcnJlY3QKKyAgICBpbXBsZW1lbnRhdGlvbiBpcyBmcm9tIDxo
dHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS84MzE1MTk3LzI2NjM3OD4uCisgICAgQGVuZGludGVy
bmFsCisKKyAgICBAc2EgQHJlZiBvcGVyYXRvciBWYWx1ZVR5cGUoKSBjb25zdCBmb3IgaW1wbGlj
aXQgY29udmVyc2lvbgorICAgIEBzYSBAcmVmIGdldCgpIGZvciBwb2ludGVyLW1lbWJlciBhY2Nl
c3MKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAorICAgICAgICAgICAgICAg
ICBub3Qgc3RkOjppc19wb2ludGVyPFZhbHVlVHlwZT46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4K
KyAgICBWYWx1ZVR5cGUgZ2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRfaW1w
bChzdGF0aWNfY2FzdDxWYWx1ZVR5cGUqPihudWxscHRyKSk7CisgICAgfQorCisgICAgLyohCisg
ICAgQGJyaWVmIGdldCBhIHBvaW50ZXIgdmFsdWUgKGV4cGxpY2l0KQorCisgICAgRXhwbGljaXQg
cG9pbnRlciBhY2Nlc3MgdG8gdGhlIGludGVybmFsbHkgc3RvcmVkIEpTT04gdmFsdWUuIE5vIGNv
cGllcyBhcmUKKyAgICBtYWRlLgorCisgICAgQHdhcm5pbmcgVGhlIHBvaW50ZXIgYmVjb21lcyBp
bnZhbGlkIGlmIHRoZSB1bmRlcmx5aW5nIEpTT04gb2JqZWN0CisgICAgY2hhbmdlcy4KKworICAg
IEB0cGFyYW0gUG9pbnRlclR5cGUgcG9pbnRlciB0eXBlOyBtdXN0IGJlIGEgcG9pbnRlciB0byBA
cmVmIGFycmF5X3QsIEByZWYKKyAgICBvYmplY3RfdCwgQHJlZiBzdHJpbmdfdCwgQHJlZiBib29s
ZWFuX3QsIEByZWYgbnVtYmVyX2ludGVnZXJfdCwKKyAgICBAcmVmIG51bWJlcl91bnNpZ25lZF90
LCBvciBAcmVmIG51bWJlcl9mbG9hdF90LgorCisgICAgQHJldHVybiBwb2ludGVyIHRvIHRoZSBp
bnRlcm5hbGx5IHN0b3JlZCBKU09OIHZhbHVlIGlmIHRoZSByZXF1ZXN0ZWQKKyAgICBwb2ludGVy
IHR5cGUgQGEgUG9pbnRlclR5cGUgZml0cyB0byB0aGUgSlNPTiB2YWx1ZTsgYG51bGxwdHJgIG90
aGVyd2lzZQorCisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAbGl2ZWV4YW1wbGV7
VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93IHBvaW50ZXJzIHRvIGludGVybmFsIHZhbHVlcyBv
ZiBhCisgICAgSlNPTiB2YWx1ZSBjYW4gYmUgcmVxdWVzdGVkLiBOb3RlIHRoYXQgbm8gdHlwZSBj
b252ZXJzaW9ucyBhcmUgbWFkZSBhbmQgYQorICAgIGBudWxscHRyYCBpcyByZXR1cm5lZCBpZiB0
aGUgdmFsdWUgYW5kIHRoZSByZXF1ZXN0ZWQgcG9pbnRlciB0eXBlIGRvZXMgbm90CisgICAgbWF0
Y2guLGdldF9fUG9pbnRlclR5cGV9CisKKyAgICBAc2EgQHJlZiBnZXRfcHRyKCkgZm9yIGV4cGxp
Y2l0IHBvaW50ZXItbWVtYmVyIGFjY2VzcworCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAg
ICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBvaW50ZXJUeXBlLCB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjwKKyAgICAgICAgICAgICAgICAgc3RkOjppc19wb2ludGVyPFBvaW50ZXJUeXBlPjo6
dmFsdWUsIGludD46OnR5cGUgPSAwPgorICAgIFBvaW50ZXJUeXBlIGdldCgpIG5vZXhjZXB0Cisg
ICAgeworICAgICAgICAvLyBkZWxlZ2F0ZSB0aGUgY2FsbCB0byBnZXRfcHRyCisgICAgICAgIHJl
dHVybiBnZXRfcHRyPFBvaW50ZXJUeXBlPigpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmll
ZiBnZXQgYSBwb2ludGVyIHZhbHVlIChleHBsaWNpdCkKKyAgICBAY29weWRvYyBnZXQoKQorICAg
ICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUG9pbnRlclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPAorICAgICAgICAgICAgICAgICBzdGQ6OmlzX3BvaW50ZXI8UG9pbnRlclR5cGU+Ojp2
YWx1ZSwgaW50Pjo6dHlwZSA9IDA+CisgICAgY29uc3RleHByIGNvbnN0IFBvaW50ZXJUeXBlIGdl
dCgpIGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAgICAvLyBkZWxlZ2F0ZSB0aGUgY2FsbCB0
byBnZXRfcHRyCisgICAgICAgIHJldHVybiBnZXRfcHRyPFBvaW50ZXJUeXBlPigpOworICAgIH0K
KworICAgIC8qIQorICAgIEBicmllZiBnZXQgYSBwb2ludGVyIHZhbHVlIChpbXBsaWNpdCkKKwor
ICAgIEltcGxpY2l0IHBvaW50ZXIgYWNjZXNzIHRvIHRoZSBpbnRlcm5hbGx5IHN0b3JlZCBKU09O
IHZhbHVlLiBObyBjb3BpZXMgYXJlCisgICAgbWFkZS4KKworICAgIEB3YXJuaW5nIFdyaXRpbmcg
ZGF0YSB0byB0aGUgcG9pbnRlZSBvZiB0aGUgcmVzdWx0IHlpZWxkcyBhbiB1bmRlZmluZWQKKyAg
ICBzdGF0ZS4KKworICAgIEB0cGFyYW0gUG9pbnRlclR5cGUgcG9pbnRlciB0eXBlOyBtdXN0IGJl
IGEgcG9pbnRlciB0byBAcmVmIGFycmF5X3QsIEByZWYKKyAgICBvYmplY3RfdCwgQHJlZiBzdHJp
bmdfdCwgQHJlZiBib29sZWFuX3QsIEByZWYgbnVtYmVyX2ludGVnZXJfdCwKKyAgICBAcmVmIG51
bWJlcl91bnNpZ25lZF90LCBvciBAcmVmIG51bWJlcl9mbG9hdF90LiBFbmZvcmNlZCBieSBhIHN0
YXRpYworICAgIGFzc2VydGlvbi4KKworICAgIEByZXR1cm4gcG9pbnRlciB0byB0aGUgaW50ZXJu
YWxseSBzdG9yZWQgSlNPTiB2YWx1ZSBpZiB0aGUgcmVxdWVzdGVkCisgICAgcG9pbnRlciB0eXBl
IEBhIFBvaW50ZXJUeXBlIGZpdHMgdG8gdGhlIEpTT04gdmFsdWU7IGBudWxscHRyYCBvdGhlcndp
c2UKKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQGxpdmVleGFtcGxle1RoZSBl
eGFtcGxlIGJlbG93IHNob3dzIGhvdyBwb2ludGVycyB0byBpbnRlcm5hbCB2YWx1ZXMgb2YgYQor
ICAgIEpTT04gdmFsdWUgY2FuIGJlIHJlcXVlc3RlZC4gTm90ZSB0aGF0IG5vIHR5cGUgY29udmVy
c2lvbnMgYXJlIG1hZGUgYW5kIGEKKyAgICBgbnVsbHB0cmAgaXMgcmV0dXJuZWQgaWYgdGhlIHZh
bHVlIGFuZCB0aGUgcmVxdWVzdGVkIHBvaW50ZXIgdHlwZSBkb2VzIG5vdAorICAgIG1hdGNoLixn
ZXRfcHRyfQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFBvaW50ZXJUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKKyAgICAgICAg
ICAgICAgICAgc3RkOjppc19wb2ludGVyPFBvaW50ZXJUeXBlPjo6dmFsdWUsIGludD46OnR5cGUg
PSAwPgorICAgIFBvaW50ZXJUeXBlIGdldF9wdHIoKSBub2V4Y2VwdAorICAgIHsKKyAgICAgICAg
Ly8gZ2V0IHRoZSB0eXBlIG9mIHRoZSBQb2ludGVyVHlwZSAocmVtb3ZlIHBvaW50ZXIgYW5kIGNv
bnN0KQorICAgICAgICB1c2luZyBwb2ludGVlX3QgPSB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25z
dDx0eXBlbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnJlbW92ZV9wb2ludGVy
PHR5cGVuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6cmVtb3ZlX2NvbnN0PFBv
aW50ZXJUeXBlPjo6dHlwZT46OnR5cGU+Ojp0eXBlOworICAgICAgICAvLyBtYWtlIHN1cmUgdGhl
IHR5cGUgbWF0Y2hlcyB0aGUgYWxsb3dlZCB0eXBlcworICAgICAgICBzdGF0aWNfYXNzZXJ0KAor
ICAgICAgICAgICAgc3RkOjppc19zYW1lPG9iamVjdF90LCBwb2ludGVlX3Q+Ojp2YWx1ZQorICAg
ICAgICAgICAgb3Igc3RkOjppc19zYW1lPGFycmF5X3QsIHBvaW50ZWVfdD46OnZhbHVlCisgICAg
ICAgICAgICBvciBzdGQ6OmlzX3NhbWU8c3RyaW5nX3QsIHBvaW50ZWVfdD46OnZhbHVlCisgICAg
ICAgICAgICBvciBzdGQ6OmlzX3NhbWU8Ym9vbGVhbl90LCBwb2ludGVlX3Q+Ojp2YWx1ZQorICAg
ICAgICAgICAgb3Igc3RkOjppc19zYW1lPG51bWJlcl9pbnRlZ2VyX3QsIHBvaW50ZWVfdD46OnZh
bHVlCisgICAgICAgICAgICBvciBzdGQ6OmlzX3NhbWU8bnVtYmVyX3Vuc2lnbmVkX3QsIHBvaW50
ZWVfdD46OnZhbHVlCisgICAgICAgICAgICBvciBzdGQ6OmlzX3NhbWU8bnVtYmVyX2Zsb2F0X3Qs
IHBvaW50ZWVfdD46OnZhbHVlCisgICAgICAgICAgICAsICJpbmNvbXBhdGlibGUgcG9pbnRlciB0
eXBlIik7CisKKyAgICAgICAgLy8gZGVsZWdhdGUgdGhlIGNhbGwgdG8gZ2V0X2ltcGxfcHRyPD4o
KQorICAgICAgICByZXR1cm4gZ2V0X2ltcGxfcHRyKHN0YXRpY19jYXN0PFBvaW50ZXJUeXBlPihu
dWxscHRyKSk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGdldCBhIHBvaW50ZXIgdmFs
dWUgKGltcGxpY2l0KQorICAgIEBjb3B5ZG9jIGdldF9wdHIoKQorICAgICovCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgUG9pbnRlclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAorICAgICAg
ICAgICAgICAgICBzdGQ6OmlzX3BvaW50ZXI8UG9pbnRlclR5cGU+Ojp2YWx1ZSBhbmQKKyAgICAg
ICAgICAgICAgICAgc3RkOjppc19jb25zdDx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVyPFBv
aW50ZXJUeXBlPjo6dHlwZT46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4KKyAgICBjb25zdGV4cHIg
Y29uc3QgUG9pbnRlclR5cGUgZ2V0X3B0cigpIGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAg
ICAvLyBnZXQgdGhlIHR5cGUgb2YgdGhlIFBvaW50ZXJUeXBlIChyZW1vdmUgcG9pbnRlciBhbmQg
Y29uc3QpCisgICAgICAgIHVzaW5nIHBvaW50ZWVfdCA9IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2Nv
bnN0PHR5cGVuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6cmVtb3ZlX3BvaW50
ZXI8dHlwZW5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpyZW1vdmVfY29uc3Q8
UG9pbnRlclR5cGU+Ojp0eXBlPjo6dHlwZT46OnR5cGU7CisgICAgICAgIC8vIG1ha2Ugc3VyZSB0
aGUgdHlwZSBtYXRjaGVzIHRoZSBhbGxvd2VkIHR5cGVzCisgICAgICAgIHN0YXRpY19hc3NlcnQo
CisgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8b2JqZWN0X3QsIHBvaW50ZWVfdD46OnZhbHVlCisg
ICAgICAgICAgICBvciBzdGQ6OmlzX3NhbWU8YXJyYXlfdCwgcG9pbnRlZV90Pjo6dmFsdWUKKyAg
ICAgICAgICAgIG9yIHN0ZDo6aXNfc2FtZTxzdHJpbmdfdCwgcG9pbnRlZV90Pjo6dmFsdWUKKyAg
ICAgICAgICAgIG9yIHN0ZDo6aXNfc2FtZTxib29sZWFuX3QsIHBvaW50ZWVfdD46OnZhbHVlCisg
ICAgICAgICAgICBvciBzdGQ6OmlzX3NhbWU8bnVtYmVyX2ludGVnZXJfdCwgcG9pbnRlZV90Pjo6
dmFsdWUKKyAgICAgICAgICAgIG9yIHN0ZDo6aXNfc2FtZTxudW1iZXJfdW5zaWduZWRfdCwgcG9p
bnRlZV90Pjo6dmFsdWUKKyAgICAgICAgICAgIG9yIHN0ZDo6aXNfc2FtZTxudW1iZXJfZmxvYXRf
dCwgcG9pbnRlZV90Pjo6dmFsdWUKKyAgICAgICAgICAgICwgImluY29tcGF0aWJsZSBwb2ludGVy
IHR5cGUiKTsKKworICAgICAgICAvLyBkZWxlZ2F0ZSB0aGUgY2FsbCB0byBnZXRfaW1wbF9wdHI8
PigpIGNvbnN0CisgICAgICAgIHJldHVybiBnZXRfaW1wbF9wdHIoc3RhdGljX2Nhc3Q8Y29uc3Qg
UG9pbnRlclR5cGU+KG51bGxwdHIpKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgZ2V0
IGEgcmVmZXJlbmNlIHZhbHVlIChpbXBsaWNpdCkKKworICAgIEltcGxpY3QgcmVmZXJlbmNlIGFj
Y2VzcyB0byB0aGUgaW50ZXJuYWxseSBzdG9yZWQgSlNPTiB2YWx1ZS4gTm8gY29waWVzCisgICAg
YXJlIG1hZGUuCisKKyAgICBAd2FybmluZyBXcml0aW5nIGRhdGEgdG8gdGhlIHJlZmVyZWUgb2Yg
dGhlIHJlc3VsdCB5aWVsZHMgYW4gdW5kZWZpbmVkCisgICAgc3RhdGUuCisKKyAgICBAdHBhcmFt
IFJlZmVyZW5jZVR5cGUgcmVmZXJlbmNlIHR5cGU7IG11c3QgYmUgYSByZWZlcmVuY2UgdG8gQHJl
ZiBhcnJheV90LAorICAgIEByZWYgb2JqZWN0X3QsIEByZWYgc3RyaW5nX3QsIEByZWYgYm9vbGVh
bl90LCBAcmVmIG51bWJlcl9pbnRlZ2VyX3QsIG9yCisgICAgQHJlZiBudW1iZXJfZmxvYXRfdC4g
RW5mb3JjZWQgYnkgc3RhdGljIGFzc2VydGlvbi4KKworICAgIEByZXR1cm4gcmVmZXJlbmNlIHRv
IHRoZSBpbnRlcm5hbGx5IHN0b3JlZCBKU09OIHZhbHVlIGlmIHRoZSByZXF1ZXN0ZWQKKyAgICBy
ZWZlcmVuY2UgdHlwZSBAYSBSZWZlcmVuY2VUeXBlIGZpdHMgdG8gdGhlIEpTT04gdmFsdWU7IHRo
cm93cworICAgIHN0ZDo6ZG9tYWluX2Vycm9yIG90aGVyd2lzZQorCisgICAgQHRocm93IHN0ZDo6
ZG9tYWluX2Vycm9yIGluIGNhc2UgcGFzc2VkIHR5cGUgQGEgUmVmZXJlbmNlVHlwZSBpcworICAg
IGluY29tcGF0aWJsZSB3aXRoIHRoZSBzdG9yZWQgSlNPTiB2YWx1ZQorCisgICAgQGNvbXBsZXhp
dHkgQ29uc3RhbnQuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgc2hvd3Mgc2V2ZXJh
bCBjYWxscyB0byBgZ2V0X3JlZigpYC4sZ2V0X3JlZn0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEu
MS4wCisgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSZWZlcmVuY2VUeXBlLCB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjwKKyAgICAgICAgICAgICAgICAgc3RkOjppc19yZWZlcmVuY2U8UmVm
ZXJlbmNlVHlwZT46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4KKyAgICBSZWZlcmVuY2VUeXBlIGdl
dF9yZWYoKQorICAgIHsKKyAgICAgICAgLy8gZGVsZWdhdGUgY2FsbCB0byBnZXRfcmVmX2ltcGwK
KyAgICAgICAgcmV0dXJuIGdldF9yZWZfaW1wbDxSZWZlcmVuY2VUeXBlPigqdGhpcyk7CisgICAg
fQorCisgICAgLyohCisgICAgQGJyaWVmIGdldCBhIHJlZmVyZW5jZSB2YWx1ZSAoaW1wbGljaXQp
CisgICAgQGNvcHlkb2MgZ2V0X3JlZigpCisgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBS
ZWZlcmVuY2VUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKKyAgICAgICAgICAgICAgICAg
c3RkOjppc19yZWZlcmVuY2U8UmVmZXJlbmNlVHlwZT46OnZhbHVlIGFuZAorICAgICAgICAgICAg
ICAgICBzdGQ6OmlzX2NvbnN0PHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxSZWZlcmVu
Y2VUeXBlPjo6dHlwZT46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4KKyAgICBSZWZlcmVuY2VUeXBl
IGdldF9yZWYoKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gZGVsZWdhdGUgY2FsbCB0byBnZXRf
cmVmX2ltcGwKKyAgICAgICAgcmV0dXJuIGdldF9yZWZfaW1wbDxSZWZlcmVuY2VUeXBlPigqdGhp
cyk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGdldCBhIHZhbHVlIChpbXBsaWNpdCkK
KworICAgIEltcGxpY2l0IHR5cGUgY29udmVyc2lvbiBiZXR3ZWVuIHRoZSBKU09OIHZhbHVlIGFu
ZCBhIGNvbXBhdGlibGUgdmFsdWUuCisgICAgVGhlIGNhbGwgaXMgcmVhbGl6ZWQgYnkgY2FsbGlu
ZyBAcmVmIGdldCgpIGNvbnN0LgorCisgICAgQHRwYXJhbSBWYWx1ZVR5cGUgbm9uLXBvaW50ZXIg
dHlwZSBjb21wYXRpYmxlIHRvIHRoZSBKU09OIHZhbHVlLCBmb3IKKyAgICBpbnN0YW5jZSBgaW50
YCBmb3IgSlNPTiBpbnRlZ2VyIG51bWJlcnMsIGBib29sYCBmb3IgSlNPTiBib29sZWFucywgb3IK
KyAgICBgc3RkOjp2ZWN0b3JgIHR5cGVzIGZvciBKU09OIGFycmF5cy4gVGhlIGNoYXJhY3RlciB0
eXBlIG9mIEByZWYgc3RyaW5nX3QKKyAgICBhcyB3ZWxsIGFzIGFuIGluaXRpYWxpemVyIGxpc3Qg
b2YgdGhpcyB0eXBlIGlzIGV4Y2x1ZGVkIHRvIGF2b2lkCisgICAgYW1iaWd1aXRpZXMgYXMgdGhl
c2UgdHlwZXMgaW1wbGljaXRseSBjb252ZXJ0IHRvIGBzdGQ6OnN0cmluZ2AuCisKKyAgICBAcmV0
dXJuIGNvcHkgb2YgdGhlIEpTT04gdmFsdWUsIGNvbnZlcnRlZCB0byB0eXBlIEBhIFZhbHVlVHlw
ZQorCisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGluIGNhc2UgcGFzc2VkIHR5cGUgQGEg
VmFsdWVUeXBlIGlzIGluY29tcGF0aWJsZQorICAgIHRvIEpTT04sIHRocm93biBieSBAcmVmIGdl
dCgpIGNvbnN0CisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlIEpT
T04gdmFsdWUuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3Mgc2V2
ZXJhbCBjb252ZXJzaW9ucyBmcm9tIEpTT04gdmFsdWVzCisgICAgdG8gb3RoZXIgdHlwZXMuIFRo
ZXJlIGEgZmV3IHRoaW5ncyB0byBub3RlOiAoMSkgRmxvYXRpbmctcG9pbnQgbnVtYmVycyBjYW4K
KyAgICBiZSBjb252ZXJ0ZWQgdG8gaW50ZWdlcnNcLCAoMikgQSBKU09OIGFycmF5IGNhbiBiZSBj
b252ZXJ0ZWQgdG8gYSBzdGFuZGFyZAorICAgIGBzdGQ6OnZlY3RvcjxzaG9ydD5gXCwgKDMpIEEg
SlNPTiBvYmplY3QgY2FuIGJlIGNvbnZlcnRlZCB0byBDKysKKyAgICBhc3NvY2lhdGl2ZSBjb250
YWluZXJzIHN1Y2ggYXMgYHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZ1wsCisgICAganNv
bj5gLixvcGVyYXRvcl9fVmFsdWVUeXBlfQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAg
ICAqLworICAgIHRlbXBsYXRlIDwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZiA8CisgICAgICAgICAgICAgICAgICAgbm90IHN0ZDo6aXNfcG9pbnRlcjxWYWx1ZVR5
cGU+Ojp2YWx1ZSBhbmQKKyAgICAgICAgICAgICAgICAgICBub3Qgc3RkOjppc19zYW1lPFZhbHVl
VHlwZSwgdHlwZW5hbWUgc3RyaW5nX3Q6OnZhbHVlX3R5cGU+Ojp2YWx1ZQorI2lmbmRlZiBfTVND
X1ZFUiAgLy8gRml4IGZvciBpc3N1ZSAjMTY3IG9wZXJhdG9yPDwgYWJpZ3VpdHkgdW5kZXIgVlMy
MDE1CisgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBzdGQ6OmlzX3NhbWU8VmFsdWVUeXBlLCBz
dGQ6OmluaXRpYWxpemVyX2xpc3Q8dHlwZW5hbWUgc3RyaW5nX3Q6OnZhbHVlX3R5cGU+Pjo6dmFs
dWUKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICwgaW50ID46OnR5cGUgPSAwID4KKyAgICBv
cGVyYXRvciBWYWx1ZVR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gZGVsZWdhdGUgdGhl
IGNhbGwgdG8gZ2V0PD4oKSBjb25zdAorICAgICAgICByZXR1cm4gZ2V0PFZhbHVlVHlwZT4oKTsK
KyAgICB9CisKKyAgICAvLy8gQH0KKworCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAv
LyBlbGVtZW50IGFjY2VzcyAvLworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICAvLy8g
QG5hbWUgZWxlbWVudCBhY2Nlc3MKKyAgICAvLy8gQWNjZXNzIHRvIHRoZSBKU09OIHZhbHVlLgor
ICAgIC8vLyBAeworCisgICAgLyohCisgICAgQGJyaWVmIGFjY2VzcyBzcGVjaWZpZWQgYXJyYXkg
ZWxlbWVudCB3aXRoIGJvdW5kcyBjaGVja2luZworCisgICAgUmV0dXJucyBhIHJlZmVyZW5jZSB0
byB0aGUgZWxlbWVudCBhdCBzcGVjaWZpZWQgbG9jYXRpb24gQGEgaWR4LCB3aXRoCisgICAgYm91
bmRzIGNoZWNraW5nLgorCisgICAgQHBhcmFtW2luXSBpZHggIGluZGV4IG9mIHRoZSBlbGVtZW50
IHRvIGFjY2VzcworCisgICAgQHJldHVybiByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgYXQgaW5k
ZXggQGEgaWR4CisKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgdGhlIEpTT04gdmFs
dWUgaXMgbm90IGFuIGFycmF5OyBleGFtcGxlOgorICAgIGAiY2Fubm90IHVzZSBhdCgpIHdpdGgg
c3RyaW5nImAKKyAgICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2UgaWYgdGhlIGluZGV4IEBhIGlk
eCBpcyBvdXQgb2YgcmFuZ2Ugb2YgdGhlIGFycmF5OworICAgIHRoYXQgaXMsIGBpZHggPj0gc2l6
ZSgpYDsgZXhhbXBsZTogYCJhcnJheSBpbmRleCA3IGlzIG91dCBvZiByYW5nZSJgCisKKyAgICBA
Y29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBiZWxv
dyBzaG93cyBob3cgYXJyYXkgZWxlbWVudHMgY2FuIGJlIHJlYWQgYW5kCisgICAgd3JpdHRlbiB1
c2luZyBgYXQoKWAuLGF0X19zaXplX3R5cGV9CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAor
ICAgICovCisgICAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBpZHgpCisgICAgeworICAgICAgICAv
LyBhdCBvbmx5IHdvcmtzIGZvciBhcnJheXMKKyAgICAgICAgaWYgKGlzX2FycmF5KCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChpZHggPCBtX3ZhbHVlLmFycmF5LT5zaXplKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUuYXJyYXktPmF0KGlkeCk7CisgICAgICAgICAgICBU
aHJvdzxzdGQ6Om91dF9vZl9yYW5nZT4oImFycmF5IGluZGV4ICIgKyBzdGQ6OnRvX3N0cmluZyhp
ZHgpICsgIiBpcyBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fubm90IHVzZSBh
dCgpIHdpdGggIiArIHR5cGVfbmFtZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIQor
ICAgIEBicmllZiBhY2Nlc3Mgc3BlY2lmaWVkIGFycmF5IGVsZW1lbnQgd2l0aCBib3VuZHMgY2hl
Y2tpbmcKKworICAgIFJldHVybnMgYSBjb25zdCByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgYXQg
c3BlY2lmaWVkIGxvY2F0aW9uIEBhIGlkeCwKKyAgICB3aXRoIGJvdW5kcyBjaGVja2luZy4KKwor
ICAgIEBwYXJhbVtpbl0gaWR4ICBpbmRleCBvZiB0aGUgZWxlbWVudCB0byBhY2Nlc3MKKworICAg
IEByZXR1cm4gY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IGluZGV4IEBhIGlkeAor
CisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIHRoZSBKU09OIHZhbHVlIGlzIG5vdCBh
biBhcnJheTsgZXhhbXBsZToKKyAgICBgImNhbm5vdCB1c2UgYXQoKSB3aXRoIHN0cmluZyJgCisg
ICAgQHRocm93IHN0ZDo6b3V0X29mX3JhbmdlIGlmIHRoZSBpbmRleCBAYSBpZHggaXMgb3V0IG9m
IHJhbmdlIG9mIHRoZSBhcnJheTsKKyAgICB0aGF0IGlzLCBgaWR4ID49IHNpemUoKWA7IGV4YW1w
bGU6IGAiYXJyYXkgaW5kZXggNyBpcyBvdXQgb2YgcmFuZ2UiYAorCisgICAgQGNvbXBsZXhpdHkg
Q29uc3RhbnQuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93
IGFycmF5IGVsZW1lbnRzIGNhbiBiZSByZWFkIHVzaW5nCisgICAgYGF0KClgLixhdF9fc2l6ZV90
eXBlX2NvbnN0fQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGNvbnN0
X3JlZmVyZW5jZSBhdChzaXplX3R5cGUgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gYXQg
b25seSB3b3JrcyBmb3IgYXJyYXlzCisgICAgICAgIGlmIChpc19hcnJheSgpKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoaWR4IDwgbV92YWx1ZS5hcnJheS0+c2l6ZSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBtX3ZhbHVlLmFycmF5LT5hdChpZHgpOworICAgICAgICAgICAgVGhyb3c8
c3RkOjpvdXRfb2ZfcmFuZ2U+KCJhcnJheSBpbmRleCAiICsgc3RkOjp0b19zdHJpbmcoaWR4KSAr
ICIgaXMgb3V0IG9mIHJhbmdlIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oImNhbm5vdCB1c2UgYXQoKSB3
aXRoICIgKyB0eXBlX25hbWUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiEKKyAgICBA
YnJpZWYgYWNjZXNzIHNwZWNpZmllZCBvYmplY3QgZWxlbWVudCB3aXRoIGJvdW5kcyBjaGVja2lu
ZworCisgICAgUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCBhdCB3aXRoIHNwZWNp
ZmllZCBrZXkgQGEga2V5LCB3aXRoCisgICAgYm91bmRzIGNoZWNraW5nLgorCisgICAgQHBhcmFt
W2luXSBrZXkgIGtleSBvZiB0aGUgZWxlbWVudCB0byBhY2Nlc3MKKworICAgIEByZXR1cm4gcmVm
ZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IGtleSBAYSBrZXkKKworICAgIEB0aHJvdyBzdGQ6OmRv
bWFpbl9lcnJvciBpZiB0aGUgSlNPTiB2YWx1ZSBpcyBub3QgYW4gb2JqZWN0OyBleGFtcGxlOgor
ICAgIGAiY2Fubm90IHVzZSBhdCgpIHdpdGggYm9vbGVhbiJgCisgICAgQHRocm93IHN0ZDo6b3V0
X29mX3JhbmdlIGlmIHRoZSBrZXkgQGEga2V5IGlzIGlzIG5vdCBzdG9yZWQgaW4gdGhlIG9iamVj
dDsKKyAgICB0aGF0IGlzLCBgZmluZChrZXkpID09IGVuZCgpYDsgZXhhbXBsZTogYCJrZXkgInRo
ZSBmYXN0IiBub3QgZm91bmQiYAorCisgICAgQGNvbXBsZXhpdHkgTG9nYXJpdGhtaWMgaW4gdGhl
IHNpemUgb2YgdGhlIGNvbnRhaW5lci4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBi
ZWxvdyBzaG93cyBob3cgb2JqZWN0IGVsZW1lbnRzIGNhbiBiZSByZWFkIGFuZAorICAgIHdyaXR0
ZW4gdXNpbmcgYGF0KClgLixhdF9fb2JqZWN0X3Rfa2V5X3R5cGV9CisKKyAgICBAc2EgQHJlZiBv
cGVyYXRvcltdKGNvbnN0IHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlwZSYpIGZvciB1bmNoZWNr
ZWQKKyAgICBhY2Nlc3MgYnkgcmVmZXJlbmNlCisgICAgQHNhIEByZWYgdmFsdWUoKSBmb3IgYWNj
ZXNzIGJ5IHZhbHVlIHdpdGggYSBkZWZhdWx0IHZhbHVlCisKKyAgICBAc2luY2UgdmVyc2lvbiAx
LjAuMAorICAgICovCisgICAgcmVmZXJlbmNlIGF0KGNvbnN0IHR5cGVuYW1lIG9iamVjdF90Ojpr
ZXlfdHlwZSYga2V5KQorICAgIHsKKyAgICAgICAgLy8gYXQgb25seSB3b3JrcyBmb3Igb2JqZWN0
cworICAgICAgICBpZiAoaXNfb2JqZWN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICht
X3ZhbHVlLm9iamVjdC0+Y291bnQoa2V5KSA+IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
dmFsdWUub2JqZWN0LT5hdChrZXkpOworICAgICAgICAgICAgVGhyb3c8c3RkOjpvdXRfb2ZfcmFu
Z2U+KCJrZXkgJyIgKyBrZXkgKyAiJyBub3QgZm91bmQiKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fu
bm90IHVzZSBhdCgpIHdpdGggIiArIHR5cGVfbmFtZSgpKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8qIQorICAgIEBicmllZiBhY2Nlc3Mgc3BlY2lmaWVkIG9iamVjdCBlbGVtZW50IHdpdGgg
Ym91bmRzIGNoZWNraW5nCisKKyAgICBSZXR1cm5zIGEgY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBl
bGVtZW50IGF0IHdpdGggc3BlY2lmaWVkIGtleSBAYSBrZXksCisgICAgd2l0aCBib3VuZHMgY2hl
Y2tpbmcuCisKKyAgICBAcGFyYW1baW5dIGtleSAga2V5IG9mIHRoZSBlbGVtZW50IHRvIGFjY2Vz
cworCisgICAgQHJldHVybiBjb25zdCByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgYXQga2V5IEBh
IGtleQorCisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIHRoZSBKU09OIHZhbHVlIGlz
IG5vdCBhbiBvYmplY3Q7IGV4YW1wbGU6CisgICAgYCJjYW5ub3QgdXNlIGF0KCkgd2l0aCBib29s
ZWFuImAKKyAgICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2UgaWYgdGhlIGtleSBAYSBrZXkgaXMg
aXMgbm90IHN0b3JlZCBpbiB0aGUgb2JqZWN0OworICAgIHRoYXQgaXMsIGBmaW5kKGtleSkgPT0g
ZW5kKClgOyBleGFtcGxlOiBgImtleSAidGhlIGZhc3QiIG5vdCBmb3VuZCJgCisKKyAgICBAY29t
cGxleGl0eSBMb2dhcml0aG1pYyBpbiB0aGUgc2l6ZSBvZiB0aGUgY29udGFpbmVyLgorCisgICAg
QGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyBvYmplY3QgZWxlbWVudHMg
Y2FuIGJlIHJlYWQgdXNpbmcKKyAgICBgYXQoKWAuLGF0X19vYmplY3RfdF9rZXlfdHlwZV9jb25z
dH0KKworICAgIEBzYSBAcmVmIG9wZXJhdG9yW10oY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6Omtl
eV90eXBlJikgZm9yIHVuY2hlY2tlZAorICAgIGFjY2VzcyBieSByZWZlcmVuY2UKKyAgICBAc2Eg
QHJlZiB2YWx1ZSgpIGZvciBhY2Nlc3MgYnkgdmFsdWUgd2l0aCBhIGRlZmF1bHQgdmFsdWUKKwor
ICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBjb25zdF9yZWZlcmVuY2UgYXQo
Y29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlJiBrZXkpIGNvbnN0CisgICAgeworICAg
ICAgICAvLyBhdCBvbmx5IHdvcmtzIGZvciBvYmplY3RzCisgICAgICAgIGlmIChpc19vYmplY3Qo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdmFsdWUub2JqZWN0LT5jb3VudChrZXkp
ID4gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV92YWx1ZS5vYmplY3QtPmF0KGtleSk7Cisg
ICAgICAgICAgICBUaHJvdzxzdGQ6Om91dF9vZl9yYW5nZT4oImtleSAnIiArIGtleSArICInIG5v
dCBmb3VuZCIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJjYW5ub3QgdXNlIGF0KCkgd2l0aCAiICsgdHlw
ZV9uYW1lKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGFjY2Vz
cyBzcGVjaWZpZWQgYXJyYXkgZWxlbWVudAorCisgICAgUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0
aGUgZWxlbWVudCBhdCBzcGVjaWZpZWQgbG9jYXRpb24gQGEgaWR4LgorCisgICAgQG5vdGUgSWYg
QGEgaWR4IGlzIGJleW9uZCB0aGUgcmFuZ2Ugb2YgdGhlIGFycmF5IChpLmUuLCBgaWR4ID49IHNp
emUoKWApLAorICAgIHRoZW4gdGhlIGFycmF5IGlzIHNpbGVudGx5IGZpbGxlZCB1cCB3aXRoIGBu
dWxsYCB2YWx1ZXMgdG8gbWFrZSBgaWR4YCBhCisgICAgdmFsaWQgcmVmZXJlbmNlIHRvIHRoZSBs
YXN0IHN0b3JlZCBlbGVtZW50LgorCisgICAgQHBhcmFtW2luXSBpZHggIGluZGV4IG9mIHRoZSBl
bGVtZW50IHRvIGFjY2VzcworCisgICAgQHJldHVybiByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQg
YXQgaW5kZXggQGEgaWR4CisKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgSlNPTiBp
cyBub3QgYW4gYXJyYXkgb3IgbnVsbDsgZXhhbXBsZToKKyAgICBgImNhbm5vdCB1c2Ugb3BlcmF0
b3JbXSB3aXRoIHN0cmluZyJgCisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudCBpZiBAYSBpZHgg
aXMgaW4gdGhlIHJhbmdlIG9mIHRoZSBhcnJheS4gT3RoZXJ3aXNlCisgICAgbGluZWFyIGluIGBp
ZHggLSBzaXplKClgLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJlbG93IHNob3dz
IGhvdyBhcnJheSBlbGVtZW50cyBjYW4gYmUgcmVhZCBhbmQKKyAgICB3cml0dGVuIHVzaW5nIGBb
XWAgb3BlcmF0b3IuIE5vdGUgdGhlIGFkZGl0aW9uIG9mIGBudWxsYAorICAgIHZhbHVlcy4sb3Bl
cmF0b3JhcnJheV9fc2l6ZV90eXBlfQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAq
LworICAgIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBpZHgpCisgICAgeworICAgICAg
ICAvLyBpbXBsaWNpdGx5IGNvbnZlcnQgbnVsbCB2YWx1ZSB0byBhbiBlbXB0eSBhcnJheQorICAg
ICAgICBpZiAoaXNfbnVsbCgpKQorICAgICAgICB7CisgICAgICAgICAgICBtX3R5cGUgPSB2YWx1
ZV90OjphcnJheTsKKyAgICAgICAgICAgIG1fdmFsdWUuYXJyYXkgPSBjcmVhdGU8YXJyYXlfdD4o
KTsKKyAgICAgICAgICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIG9wZXJhdG9yW10gb25seSB3b3JrcyBmb3IgYXJyYXlzCisgICAgICAgIGlmIChpc19hcnJh
eSgpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBmaWxsIHVwIGFycmF5IHdpdGggbnVsbCB2
YWx1ZXMgaWYgZ2l2ZW4gaWR4IGlzIG91dHNpZGUgcmFuZ2UKKyAgICAgICAgICAgIGlmIChpZHgg
Pj0gbV92YWx1ZS5hcnJheS0+c2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1fdmFsdWUuYXJyYXktPmluc2VydChtX3ZhbHVlLmFycmF5LT5lbmQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4IC0gbV92YWx1ZS5hcnJheS0+c2l6ZSgpICsg
MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzaWNfanNvbigpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUuYXJyYXktPm9wZXJh
dG9yW10oaWR4KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fubm90IHVzZSBvcGVyYXRvcltdIHdpdGgg
IiArIHR5cGVfbmFtZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIQorICAgIEBicmll
ZiBhY2Nlc3Mgc3BlY2lmaWVkIGFycmF5IGVsZW1lbnQKKworICAgIFJldHVybnMgYSBjb25zdCBy
ZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgYXQgc3BlY2lmaWVkIGxvY2F0aW9uIEBhIGlkeC4KKwor
ICAgIEBwYXJhbVtpbl0gaWR4ICBpbmRleCBvZiB0aGUgZWxlbWVudCB0byBhY2Nlc3MKKworICAg
IEByZXR1cm4gY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IGluZGV4IEBhIGlkeAor
CisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIEpTT04gaXMgbm90IGFuIGFycmF5OyBl
eGFtcGxlOiBgImNhbm5vdCB1c2UKKyAgICBvcGVyYXRvcltdIHdpdGggbnVsbCJgCisKKyAgICBA
Y29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBiZWxv
dyBzaG93cyBob3cgYXJyYXkgZWxlbWVudHMgY2FuIGJlIHJlYWQgdXNpbmcKKyAgICB0aGUgYFtd
YCBvcGVyYXRvci4sb3BlcmF0b3JhcnJheV9fc2l6ZV90eXBlX2NvbnN0fQorCisgICAgQHNpbmNl
IHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNp
emVfdHlwZSBpZHgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBjb25zdCBvcGVyYXRvcltdIG9u
bHkgd29ya3MgZm9yIGFycmF5cworICAgICAgICBpZiAoaXNfYXJyYXkoKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUuYXJyYXktPm9wZXJhdG9yW10oaWR4KTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9t
YWluX2Vycm9yPigiY2Fubm90IHVzZSBvcGVyYXRvcltdIHdpdGggIiArIHR5cGVfbmFtZSgpKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBhY2Nlc3Mgc3BlY2lmaWVk
IG9iamVjdCBlbGVtZW50CisKKyAgICBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50
IGF0IHdpdGggc3BlY2lmaWVkIGtleSBAYSBrZXkuCisKKyAgICBAbm90ZSBJZiBAYSBrZXkgaXMg
bm90IGZvdW5kIGluIHRoZSBvYmplY3QsIHRoZW4gaXQgaXMgc2lsZW50bHkgYWRkZWQgdG8KKyAg
ICB0aGUgb2JqZWN0IGFuZCBmaWxsZWQgd2l0aCBhIGBudWxsYCB2YWx1ZSB0byBtYWtlIGBrZXlg
IGEgdmFsaWQgcmVmZXJlbmNlLgorICAgIEluIGNhc2UgdGhlIHZhbHVlIHdhcyBgbnVsbGAgYmVm
b3JlLCBpdCBpcyBjb252ZXJ0ZWQgdG8gYW4gb2JqZWN0LgorCisgICAgQHBhcmFtW2luXSBrZXkg
IGtleSBvZiB0aGUgZWxlbWVudCB0byBhY2Nlc3MKKworICAgIEByZXR1cm4gcmVmZXJlbmNlIHRv
IHRoZSBlbGVtZW50IGF0IGtleSBAYSBrZXkKKworICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJv
ciBpZiBKU09OIGlzIG5vdCBhbiBvYmplY3Qgb3IgbnVsbDsgZXhhbXBsZToKKyAgICBgImNhbm5v
dCB1c2Ugb3BlcmF0b3JbXSB3aXRoIHN0cmluZyJgCisKKyAgICBAY29tcGxleGl0eSBMb2dhcml0
aG1pYyBpbiB0aGUgc2l6ZSBvZiB0aGUgY29udGFpbmVyLgorCisgICAgQGxpdmVleGFtcGxle1Ro
ZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyBvYmplY3QgZWxlbWVudHMgY2FuIGJlIHJlYWQgYW5k
CisgICAgd3JpdHRlbiB1c2luZyB0aGUgYFtdYCBvcGVyYXRvci4sb3BlcmF0b3JhcnJheV9fa2V5
X3R5cGV9CisKKyAgICBAc2EgQHJlZiBhdChjb25zdCB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5
cGUmKSBmb3IgYWNjZXNzIGJ5IHJlZmVyZW5jZQorICAgIHdpdGggcmFuZ2UgY2hlY2tpbmcKKyAg
ICBAc2EgQHJlZiB2YWx1ZSgpIGZvciBhY2Nlc3MgYnkgdmFsdWUgd2l0aCBhIGRlZmF1bHQgdmFs
dWUKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICByZWZlcmVuY2Ugb3Bl
cmF0b3JbXShjb25zdCB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUmIGtleSkKKyAgICB7Cisg
ICAgICAgIC8vIGltcGxpY2l0bHkgY29udmVydCBudWxsIHZhbHVlIHRvIGFuIGVtcHR5IG9iamVj
dAorICAgICAgICBpZiAoaXNfbnVsbCgpKQorICAgICAgICB7CisgICAgICAgICAgICBtX3R5cGUg
PSB2YWx1ZV90OjpvYmplY3Q7CisgICAgICAgICAgICBtX3ZhbHVlLm9iamVjdCA9IGNyZWF0ZTxv
YmplY3RfdD4oKTsKKyAgICAgICAgICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIG9wZXJhdG9yW10gb25seSB3b3JrcyBmb3Igb2JqZWN0cworICAgICAgICBp
ZiAoaXNfb2JqZWN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLm9i
amVjdC0+b3BlcmF0b3JbXShrZXkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJjYW5ub3QgdXNlIG9wZXJh
dG9yW10gd2l0aCAiICsgdHlwZV9uYW1lKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoh
CisgICAgQGJyaWVmIHJlYWQtb25seSBhY2Nlc3Mgc3BlY2lmaWVkIG9iamVjdCBlbGVtZW50CisK
KyAgICBSZXR1cm5zIGEgY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IHdpdGggc3Bl
Y2lmaWVkIGtleSBAYSBrZXkuIE5vCisgICAgYm91bmRzIGNoZWNraW5nIGlzIHBlcmZvcm1lZC4K
KworICAgIEB3YXJuaW5nIElmIHRoZSBlbGVtZW50IHdpdGgga2V5IEBhIGtleSBkb2VzIG5vdCBl
eGlzdCwgdGhlIGJlaGF2aW9yIGlzCisgICAgdW5kZWZpbmVkLgorCisgICAgQHBhcmFtW2luXSBr
ZXkgIGtleSBvZiB0aGUgZWxlbWVudCB0byBhY2Nlc3MKKworICAgIEByZXR1cm4gY29uc3QgcmVm
ZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IGtleSBAYSBrZXkKKworICAgIEBwcmUgVGhlIGVsZW1l
bnQgd2l0aCBrZXkgQGEga2V5IG11c3QgZXhpc3QuICoqVGhpcyBwcmVjb25kaXRpb24gaXMKKyAg
ICAgICAgIGVuZm9yY2VkIHdpdGggYW4gYXNzZXJ0aW9uLioqCisKKyAgICBAdGhyb3cgc3RkOjpk
b21haW5fZXJyb3IgaWYgSlNPTiBpcyBub3QgYW4gb2JqZWN0OyBleGFtcGxlOiBgImNhbm5vdCB1
c2UKKyAgICBvcGVyYXRvcltdIHdpdGggbnVsbCJgCisKKyAgICBAY29tcGxleGl0eSBMb2dhcml0
aG1pYyBpbiB0aGUgc2l6ZSBvZiB0aGUgY29udGFpbmVyLgorCisgICAgQGxpdmVleGFtcGxle1Ro
ZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyBvYmplY3QgZWxlbWVudHMgY2FuIGJlIHJlYWQgdXNp
bmcKKyAgICB0aGUgYFtdYCBvcGVyYXRvci4sb3BlcmF0b3JhcnJheV9fa2V5X3R5cGVfY29uc3R9
CisKKyAgICBAc2EgQHJlZiBhdChjb25zdCB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUmKSBm
b3IgYWNjZXNzIGJ5IHJlZmVyZW5jZQorICAgIHdpdGggcmFuZ2UgY2hlY2tpbmcKKyAgICBAc2Eg
QHJlZiB2YWx1ZSgpIGZvciBhY2Nlc3MgYnkgdmFsdWUgd2l0aCBhIGRlZmF1bHQgdmFsdWUKKwor
ICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBjb25zdF9yZWZlcmVuY2Ugb3Bl
cmF0b3JbXShjb25zdCB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUmIGtleSkgY29uc3QKKyAg
ICB7CisgICAgICAgIC8vIGNvbnN0IG9wZXJhdG9yW10gb25seSB3b3JrcyBmb3Igb2JqZWN0cwor
ICAgICAgICBpZiAoaXNfb2JqZWN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydCht
X3ZhbHVlLm9iamVjdC0+ZmluZChrZXkpICE9IG1fdmFsdWUub2JqZWN0LT5lbmQoKSk7CisgICAg
ICAgICAgICByZXR1cm4gbV92YWx1ZS5vYmplY3QtPmZpbmQoa2V5KS0+c2Vjb25kOworICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21h
aW5fZXJyb3I+KCJjYW5ub3QgdXNlIG9wZXJhdG9yW10gd2l0aCAiICsgdHlwZV9uYW1lKCkpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGFjY2VzcyBzcGVjaWZpZWQg
b2JqZWN0IGVsZW1lbnQKKworICAgIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQg
YXQgd2l0aCBzcGVjaWZpZWQga2V5IEBhIGtleS4KKworICAgIEBub3RlIElmIEBhIGtleSBpcyBu
b3QgZm91bmQgaW4gdGhlIG9iamVjdCwgdGhlbiBpdCBpcyBzaWxlbnRseSBhZGRlZCB0bworICAg
IHRoZSBvYmplY3QgYW5kIGZpbGxlZCB3aXRoIGEgYG51bGxgIHZhbHVlIHRvIG1ha2UgYGtleWAg
YSB2YWxpZCByZWZlcmVuY2UuCisgICAgSW4gY2FzZSB0aGUgdmFsdWUgd2FzIGBudWxsYCBiZWZv
cmUsIGl0IGlzIGNvbnZlcnRlZCB0byBhbiBvYmplY3QuCisKKyAgICBAcGFyYW1baW5dIGtleSAg
a2V5IG9mIHRoZSBlbGVtZW50IHRvIGFjY2VzcworCisgICAgQHJldHVybiByZWZlcmVuY2UgdG8g
dGhlIGVsZW1lbnQgYXQga2V5IEBhIGtleQorCisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9y
IGlmIEpTT04gaXMgbm90IGFuIG9iamVjdCBvciBudWxsOyBleGFtcGxlOgorICAgIGAiY2Fubm90
IHVzZSBvcGVyYXRvcltdIHdpdGggc3RyaW5nImAKKworICAgIEBjb21wbGV4aXR5IExvZ2FyaXRo
bWljIGluIHRoZSBzaXplIG9mIHRoZSBjb250YWluZXIuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhl
IGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93IG9iamVjdCBlbGVtZW50cyBjYW4gYmUgcmVhZCBhbmQK
KyAgICB3cml0dGVuIHVzaW5nIHRoZSBgW11gIG9wZXJhdG9yLixvcGVyYXRvcmFycmF5X19rZXlf
dHlwZX0KKworICAgIEBzYSBAcmVmIGF0KGNvbnN0IHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlw
ZSYpIGZvciBhY2Nlc3MgYnkgcmVmZXJlbmNlCisgICAgd2l0aCByYW5nZSBjaGVja2luZworICAg
IEBzYSBAcmVmIHZhbHVlKCkgZm9yIGFjY2VzcyBieSB2YWx1ZSB3aXRoIGEgZGVmYXVsdCB2YWx1
ZQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHN0ZDo6c2l6ZV90IG4+CisgICAgcmVmZXJlbmNlIG9wZXJhdG9yW10oVCAqICgma2V5
KVtuXSkKKyAgICB7CisgICAgICAgIHJldHVybiBvcGVyYXRvcltdKHN0YXRpY19jYXN0PGNvbnN0
IFQ+KGtleSkpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiByZWFkLW9ubHkgYWNjZXNz
IHNwZWNpZmllZCBvYmplY3QgZWxlbWVudAorCisgICAgUmV0dXJucyBhIGNvbnN0IHJlZmVyZW5j
ZSB0byB0aGUgZWxlbWVudCBhdCB3aXRoIHNwZWNpZmllZCBrZXkgQGEga2V5LiBObworICAgIGJv
dW5kcyBjaGVja2luZyBpcyBwZXJmb3JtZWQuCisKKyAgICBAd2FybmluZyBJZiB0aGUgZWxlbWVu
dCB3aXRoIGtleSBAYSBrZXkgZG9lcyBub3QgZXhpc3QsIHRoZSBiZWhhdmlvciBpcworICAgIHVu
ZGVmaW5lZC4KKworICAgIEBub3RlIFRoaXMgZnVuY3Rpb24gaXMgcmVxdWlyZWQgZm9yIGNvbXBh
dGliaWxpdHkgcmVhc29ucyB3aXRoIENsYW5nLgorCisgICAgQHBhcmFtW2luXSBrZXkgIGtleSBv
ZiB0aGUgZWxlbWVudCB0byBhY2Nlc3MKKworICAgIEByZXR1cm4gY29uc3QgcmVmZXJlbmNlIHRv
IHRoZSBlbGVtZW50IGF0IGtleSBAYSBrZXkKKworICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJv
ciBpZiBKU09OIGlzIG5vdCBhbiBvYmplY3Q7IGV4YW1wbGU6IGAiY2Fubm90IHVzZQorICAgIG9w
ZXJhdG9yW10gd2l0aCBudWxsImAKKworICAgIEBjb21wbGV4aXR5IExvZ2FyaXRobWljIGluIHRo
ZSBzaXplIG9mIHRoZSBjb250YWluZXIuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUg
YmVsb3cgc2hvd3MgaG93IG9iamVjdCBlbGVtZW50cyBjYW4gYmUgcmVhZCB1c2luZworICAgIHRo
ZSBgW11gIG9wZXJhdG9yLixvcGVyYXRvcmFycmF5X19rZXlfdHlwZV9jb25zdH0KKworICAgIEBz
YSBAcmVmIGF0KGNvbnN0IHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlwZSYpIGZvciBhY2Nlc3Mg
YnkgcmVmZXJlbmNlCisgICAgd2l0aCByYW5nZSBjaGVja2luZworICAgIEBzYSBAcmVmIHZhbHVl
KCkgZm9yIGFjY2VzcyBieSB2YWx1ZSB3aXRoIGEgZGVmYXVsdCB2YWx1ZQorCisgICAgQHNpbmNl
IHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6c2l6
ZV90IG4+CisgICAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oVCAqICgma2V5KVtuXSkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBvcGVyYXRvcltdKHN0YXRpY19jYXN0PGNvbnN0IFQ+
KGtleSkpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBhY2Nlc3Mgc3BlY2lmaWVkIG9i
amVjdCBlbGVtZW50CisKKyAgICBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0
IHdpdGggc3BlY2lmaWVkIGtleSBAYSBrZXkuCisKKyAgICBAbm90ZSBJZiBAYSBrZXkgaXMgbm90
IGZvdW5kIGluIHRoZSBvYmplY3QsIHRoZW4gaXQgaXMgc2lsZW50bHkgYWRkZWQgdG8KKyAgICB0
aGUgb2JqZWN0IGFuZCBmaWxsZWQgd2l0aCBhIGBudWxsYCB2YWx1ZSB0byBtYWtlIGBrZXlgIGEg
dmFsaWQgcmVmZXJlbmNlLgorICAgIEluIGNhc2UgdGhlIHZhbHVlIHdhcyBgbnVsbGAgYmVmb3Jl
LCBpdCBpcyBjb252ZXJ0ZWQgdG8gYW4gb2JqZWN0LgorCisgICAgQHBhcmFtW2luXSBrZXkgIGtl
eSBvZiB0aGUgZWxlbWVudCB0byBhY2Nlc3MKKworICAgIEByZXR1cm4gcmVmZXJlbmNlIHRvIHRo
ZSBlbGVtZW50IGF0IGtleSBAYSBrZXkKKworICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBp
ZiBKU09OIGlzIG5vdCBhbiBvYmplY3Qgb3IgbnVsbDsgZXhhbXBsZToKKyAgICBgImNhbm5vdCB1
c2Ugb3BlcmF0b3JbXSB3aXRoIHN0cmluZyJgCisKKyAgICBAY29tcGxleGl0eSBMb2dhcml0aG1p
YyBpbiB0aGUgc2l6ZSBvZiB0aGUgY29udGFpbmVyLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBl
eGFtcGxlIGJlbG93IHNob3dzIGhvdyBvYmplY3QgZWxlbWVudHMgY2FuIGJlIHJlYWQgYW5kCisg
ICAgd3JpdHRlbiB1c2luZyB0aGUgYFtdYCBvcGVyYXRvci4sb3BlcmF0b3JhcnJheV9fa2V5X3R5
cGV9CisKKyAgICBAc2EgQHJlZiBhdChjb25zdCB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUm
KSBmb3IgYWNjZXNzIGJ5IHJlZmVyZW5jZQorICAgIHdpdGggcmFuZ2UgY2hlY2tpbmcKKyAgICBA
c2EgQHJlZiB2YWx1ZSgpIGZvciBhY2Nlc3MgYnkgdmFsdWUgd2l0aCBhIGRlZmF1bHQgdmFsdWUK
KworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMS4wCisgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIHJlZmVyZW5jZSBvcGVyYXRvcltdKFQqIGtleSkKKyAgICB7CisgICAgICAgIC8v
IGltcGxpY2l0bHkgY29udmVydCBudWxsIHRvIG9iamVjdAorICAgICAgICBpZiAoaXNfbnVsbCgp
KQorICAgICAgICB7CisgICAgICAgICAgICBtX3R5cGUgPSB2YWx1ZV90OjpvYmplY3Q7CisgICAg
ICAgICAgICBtX3ZhbHVlID0gdmFsdWVfdDo6b2JqZWN0OworICAgICAgICAgICAgYXNzZXJ0X2lu
dmFyaWFudCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gYXQgb25seSB3b3JrcyBmb3Igb2Jq
ZWN0cworICAgICAgICBpZiAoaXNfb2JqZWN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtX3ZhbHVlLm9iamVjdC0+b3BlcmF0b3JbXShrZXkpOworICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJj
YW5ub3QgdXNlIG9wZXJhdG9yW10gd2l0aCAiICsgdHlwZV9uYW1lKCkpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIHJlYWQtb25seSBhY2Nlc3Mgc3BlY2lmaWVkIG9i
amVjdCBlbGVtZW50CisKKyAgICBSZXR1cm5zIGEgY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBlbGVt
ZW50IGF0IHdpdGggc3BlY2lmaWVkIGtleSBAYSBrZXkuIE5vCisgICAgYm91bmRzIGNoZWNraW5n
IGlzIHBlcmZvcm1lZC4KKworICAgIEB3YXJuaW5nIElmIHRoZSBlbGVtZW50IHdpdGgga2V5IEBh
IGtleSBkb2VzIG5vdCBleGlzdCwgdGhlIGJlaGF2aW9yIGlzCisgICAgdW5kZWZpbmVkLgorCisg
ICAgQHBhcmFtW2luXSBrZXkgIGtleSBvZiB0aGUgZWxlbWVudCB0byBhY2Nlc3MKKworICAgIEBy
ZXR1cm4gY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IGtleSBAYSBrZXkKKworICAg
IEBwcmUgVGhlIGVsZW1lbnQgd2l0aCBrZXkgQGEga2V5IG11c3QgZXhpc3QuICoqVGhpcyBwcmVj
b25kaXRpb24gaXMKKyAgICAgICAgIGVuZm9yY2VkIHdpdGggYW4gYXNzZXJ0aW9uLioqCisKKyAg
ICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgSlNPTiBpcyBub3QgYW4gb2JqZWN0OyBleGFt
cGxlOiBgImNhbm5vdCB1c2UKKyAgICBvcGVyYXRvcltdIHdpdGggbnVsbCJgCisKKyAgICBAY29t
cGxleGl0eSBMb2dhcml0aG1pYyBpbiB0aGUgc2l6ZSBvZiB0aGUgY29udGFpbmVyLgorCisgICAg
QGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyBvYmplY3QgZWxlbWVudHMg
Y2FuIGJlIHJlYWQgdXNpbmcKKyAgICB0aGUgYFtdYCBvcGVyYXRvci4sb3BlcmF0b3JhcnJheV9f
a2V5X3R5cGVfY29uc3R9CisKKyAgICBAc2EgQHJlZiBhdChjb25zdCB0eXBlbmFtZSBvYmplY3Rf
dDo6a2V5X3R5cGUmKSBmb3IgYWNjZXNzIGJ5IHJlZmVyZW5jZQorICAgIHdpdGggcmFuZ2UgY2hl
Y2tpbmcKKyAgICBAc2EgQHJlZiB2YWx1ZSgpIGZvciBhY2Nlc3MgYnkgdmFsdWUgd2l0aCBhIGRl
ZmF1bHQgdmFsdWUKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMS4wCisgICAgKi8KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorICAgIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKFQqIGtleSkg
Y29uc3QKKyAgICB7CisgICAgICAgIC8vIGF0IG9ubHkgd29ya3MgZm9yIG9iamVjdHMKKyAgICAg
ICAgaWYgKGlzX29iamVjdCgpKQorICAgICAgICB7CisgICAgICAgICAgICBhc3NlcnQobV92YWx1
ZS5vYmplY3QtPmZpbmQoa2V5KSAhPSBtX3ZhbHVlLm9iamVjdC0+ZW5kKCkpOworICAgICAgICAg
ICAgcmV0dXJuIG1fdmFsdWUub2JqZWN0LT5maW5kKGtleSktPnNlY29uZDsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vy
cm9yPigiY2Fubm90IHVzZSBvcGVyYXRvcltdIHdpdGggIiArIHR5cGVfbmFtZSgpKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBhY2Nlc3Mgc3BlY2lmaWVkIG9iamVj
dCBlbGVtZW50IHdpdGggZGVmYXVsdCB2YWx1ZQorCisgICAgUmV0dXJucyBlaXRoZXIgYSBjb3B5
IG9mIGFuIG9iamVjdCdzIGVsZW1lbnQgYXQgdGhlIHNwZWNpZmllZCBrZXkgQGEga2V5CisgICAg
b3IgYSBnaXZlbiBkZWZhdWx0IHZhbHVlIGlmIG5vIGVsZW1lbnQgd2l0aCBrZXkgQGEga2V5IGV4
aXN0cy4KKworICAgIFRoZSBmdW5jdGlvbiBpcyBiYXNpY2FsbHkgZXF1aXZhbGVudCB0byBleGVj
dXRpbmcKKyAgICBAY29kZSB7LmNwcH0KKyAgICB0cnkgeworICAgICAgICByZXR1cm4gYXQoa2V5
KTsKKyAgICB9IGNhdGNoKHN0ZDo6b3V0X29mX3JhbmdlKSB7CisgICAgICAgIHJldHVybiBkZWZh
dWx0X3ZhbHVlOworICAgIH0KKyAgICBAZW5kY29kZQorCisgICAgQG5vdGUgVW5saWtlIEByZWYg
YXQoY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlJiksIHRoaXMgZnVuY3Rpb24KKyAg
ICBkb2VzIG5vdCB0aHJvdyBpZiB0aGUgZ2l2ZW4ga2V5IEBhIGtleSB3YXMgbm90IGZvdW5kLgor
CisgICAgQG5vdGUgVW5saWtlIEByZWYgb3BlcmF0b3JbXShjb25zdCB0eXBlbmFtZSBvYmplY3Rf
dDo6a2V5X3R5cGUmIGtleSksIHRoaXMKKyAgICBmdW5jdGlvbiBkb2VzIG5vdCBpbXBsaWNpdGx5
IGFkZCBhbiBlbGVtZW50IHRvIHRoZSBwb3NpdGlvbiBkZWZpbmVkIGJ5IEBhCisgICAga2V5LiBU
aGlzIGZ1bmN0aW9uIGlzIGZ1cnRoZXJtb3JlIGFsc28gYXBwbGljYWJsZSB0byBjb25zdCBvYmpl
Y3RzLgorCisgICAgQHBhcmFtW2luXSBrZXkgIGtleSBvZiB0aGUgZWxlbWVudCB0byBhY2Nlc3MK
KyAgICBAcGFyYW1baW5dIGRlZmF1bHRfdmFsdWUgIHRoZSB2YWx1ZSB0byByZXR1cm4gaWYgQGEg
a2V5IGlzIG5vdCBmb3VuZAorCisgICAgQHRwYXJhbSBWYWx1ZVR5cGUgdHlwZSBjb21wYXRpYmxl
IHRvIEpTT04gdmFsdWVzLCBmb3IgaW5zdGFuY2UgYGludGAgZm9yCisgICAgSlNPTiBpbnRlZ2Vy
IG51bWJlcnMsIGBib29sYCBmb3IgSlNPTiBib29sZWFucywgb3IgYHN0ZDo6dmVjdG9yYCB0eXBl
cyBmb3IKKyAgICBKU09OIGFycmF5cy4gTm90ZSB0aGUgdHlwZSBvZiB0aGUgZXhwZWN0ZWQgdmFs
dWUgYXQgQGEga2V5IGFuZCB0aGUgZGVmYXVsdAorICAgIHZhbHVlIEBhIGRlZmF1bHRfdmFsdWUg
bXVzdCBiZSBjb21wYXRpYmxlLgorCisgICAgQHJldHVybiBjb3B5IG9mIHRoZSBlbGVtZW50IGF0
IGtleSBAYSBrZXkgb3IgQGEgZGVmYXVsdF92YWx1ZSBpZiBAYSBrZXkKKyAgICBpcyBub3QgZm91
bmQKKworICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBKU09OIGlzIG5vdCBhbiBvYmpl
Y3Q7IGV4YW1wbGU6IGAiY2Fubm90IHVzZQorICAgIHZhbHVlKCkgd2l0aCBudWxsImAKKworICAg
IEBjb21wbGV4aXR5IExvZ2FyaXRobWljIGluIHRoZSBzaXplIG9mIHRoZSBjb250YWluZXIuCisK
KyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93IG9iamVjdCBlbGVt
ZW50cyBjYW4gYmUgcXVlcmllZAorICAgIHdpdGggYSBkZWZhdWx0IHZhbHVlLixiYXNpY19qc29u
X192YWx1ZX0KKworICAgIEBzYSBAcmVmIGF0KGNvbnN0IHR5cGVuYW1lIG9iamVjdF90OjprZXlf
dHlwZSYpIGZvciBhY2Nlc3MgYnkgcmVmZXJlbmNlCisgICAgd2l0aCByYW5nZSBjaGVja2luZwor
ICAgIEBzYSBAcmVmIG9wZXJhdG9yW10oY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBl
JikgZm9yIHVuY2hlY2tlZAorICAgIGFjY2VzcyBieSByZWZlcmVuY2UKKworICAgIEBzaW5jZSB2
ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICB0ZW1wbGF0ZTxjbGFzcyBWYWx1ZVR5cGUsIHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPAorICAgICAgICAgICAgICAgICBzdGQ6OmlzX2NvbnZlcnRpYmxl
PGJhc2ljX2pzb25fdCwgVmFsdWVUeXBlPjo6dmFsdWUsIGludD46OnR5cGUgPSAwPgorICAgIFZh
bHVlVHlwZSB2YWx1ZShjb25zdCB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUmIGtleSwgVmFs
dWVUeXBlIGRlZmF1bHRfdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICAvLyBhdCBvbmx5IHdv
cmtzIGZvciBvYmplY3RzCisgICAgICAgIGlmIChpc19vYmplY3QoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gaWYga2V5IGlzIGZvdW5kLCByZXR1cm4gdmFsdWUgYW5kIGdpdmVuIGRlZmF1
bHQgdmFsdWUgb3RoZXJ3aXNlCisgICAgICAgICAgICBjb25zdCBhdXRvIGl0ID0gZmluZChrZXkp
OworICAgICAgICAgICAgaWYgKGl0ICE9IGVuZCgpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiAqaXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRfdmFsdWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBU
aHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oImNhbm5vdCB1c2UgdmFsdWUoKSB3aXRoICIgKyB0eXBl
X25hbWUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgb3Zlcmxv
YWQgZm9yIGEgZGVmYXVsdCB2YWx1ZSBvZiB0eXBlIGNvbnN0IGNoYXIqCisgICAgQGNvcHlkb2Mg
YmFzaWNfanNvbjo6dmFsdWUoY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlJiwgVmFs
dWVUeXBlKSBjb25zdAorICAgICovCisgICAgc3RyaW5nX3QgdmFsdWUoY29uc3QgdHlwZW5hbWUg
b2JqZWN0X3Q6OmtleV90eXBlJiBrZXksIGNvbnN0IGNoYXIqIGRlZmF1bHRfdmFsdWUpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUoa2V5LCBzdHJpbmdfdChkZWZhdWx0X3ZhbHVl
KSk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGFjY2VzcyBzcGVjaWZpZWQgb2JqZWN0
IGVsZW1lbnQgdmlhIEpTT04gUG9pbnRlciB3aXRoIGRlZmF1bHQgdmFsdWUKKworICAgIFJldHVy
bnMgZWl0aGVyIGEgY29weSBvZiBhbiBvYmplY3QncyBlbGVtZW50IGF0IHRoZSBzcGVjaWZpZWQg
a2V5IEBhIGtleQorICAgIG9yIGEgZ2l2ZW4gZGVmYXVsdCB2YWx1ZSBpZiBubyBlbGVtZW50IHdp
dGgga2V5IEBhIGtleSBleGlzdHMuCisKKyAgICBUaGUgZnVuY3Rpb24gaXMgYmFzaWNhbGx5IGVx
dWl2YWxlbnQgdG8gZXhlY3V0aW5nCisgICAgQGNvZGUgey5jcHB9CisgICAgdHJ5IHsKKyAgICAg
ICAgcmV0dXJuIGF0KHB0cik7CisgICAgfSBjYXRjaChzdGQ6Om91dF9vZl9yYW5nZSkgeworICAg
ICAgICByZXR1cm4gZGVmYXVsdF92YWx1ZTsKKyAgICB9CisgICAgQGVuZGNvZGUKKworICAgIEBu
b3RlIFVubGlrZSBAcmVmIGF0KGNvbnN0IGpzb25fcG9pbnRlciYpLCB0aGlzIGZ1bmN0aW9uIGRv
ZXMgbm90IHRocm93CisgICAgaWYgdGhlIGdpdmVuIGtleSBAYSBrZXkgd2FzIG5vdCBmb3VuZC4K
KworICAgIEBwYXJhbVtpbl0gcHRyICBhIEpTT04gcG9pbnRlciB0byB0aGUgZWxlbWVudCB0byBh
Y2Nlc3MKKyAgICBAcGFyYW1baW5dIGRlZmF1bHRfdmFsdWUgIHRoZSB2YWx1ZSB0byByZXR1cm4g
aWYgQGEgcHRyIGZvdW5kIG5vIHZhbHVlCisKKyAgICBAdHBhcmFtIFZhbHVlVHlwZSB0eXBlIGNv
bXBhdGlibGUgdG8gSlNPTiB2YWx1ZXMsIGZvciBpbnN0YW5jZSBgaW50YCBmb3IKKyAgICBKU09O
IGludGVnZXIgbnVtYmVycywgYGJvb2xgIGZvciBKU09OIGJvb2xlYW5zLCBvciBgc3RkOjp2ZWN0
b3JgIHR5cGVzIGZvcgorICAgIEpTT04gYXJyYXlzLiBOb3RlIHRoZSB0eXBlIG9mIHRoZSBleHBl
Y3RlZCB2YWx1ZSBhdCBAYSBrZXkgYW5kIHRoZSBkZWZhdWx0CisgICAgdmFsdWUgQGEgZGVmYXVs
dF92YWx1ZSBtdXN0IGJlIGNvbXBhdGlibGUuCisKKyAgICBAcmV0dXJuIGNvcHkgb2YgdGhlIGVs
ZW1lbnQgYXQga2V5IEBhIGtleSBvciBAYSBkZWZhdWx0X3ZhbHVlIGlmIEBhIGtleQorICAgIGlz
IG5vdCBmb3VuZAorCisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIEpTT04gaXMgbm90
IGFuIG9iamVjdDsgZXhhbXBsZTogYCJjYW5ub3QgdXNlCisgICAgdmFsdWUoKSB3aXRoIG51bGwi
YAorCisgICAgQGNvbXBsZXhpdHkgTG9nYXJpdGhtaWMgaW4gdGhlIHNpemUgb2YgdGhlIGNvbnRh
aW5lci4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyBob3cgb2Jq
ZWN0IGVsZW1lbnRzIGNhbiBiZSBxdWVyaWVkCisgICAgd2l0aCBhIGRlZmF1bHQgdmFsdWUuLGJh
c2ljX2pzb25fX3ZhbHVlX3B0cn0KKworICAgIEBzYSBAcmVmIG9wZXJhdG9yW10oY29uc3QganNv
bl9wb2ludGVyJikgZm9yIHVuY2hlY2tlZCBhY2Nlc3MgYnkgcmVmZXJlbmNlCisKKyAgICBAc2lu
Y2UgdmVyc2lvbiAyLjAuMgorICAgICovCisgICAgdGVtcGxhdGU8Y2xhc3MgVmFsdWVUeXBlLCB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKKyAgICAgICAgICAgICAgICAgc3RkOjppc19jb252ZXJ0
aWJsZTxiYXNpY19qc29uX3QsIFZhbHVlVHlwZT46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4KKyAg
ICBWYWx1ZVR5cGUgdmFsdWUoY29uc3QganNvbl9wb2ludGVyJiBwdHIsIFZhbHVlVHlwZSBkZWZh
dWx0X3ZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gYXQgb25seSB3b3JrcyBmb3Igb2Jq
ZWN0cworICAgICAgICBpZiAoaXNfb2JqZWN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBwdHIuZ2V0X2NoZWNrZWQodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oImNhbm5vdCB1c2Ug
dmFsdWUoKSB3aXRoICIgKyB0eXBlX25hbWUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
KiEKKyAgICBAYnJpZWYgb3ZlcmxvYWQgZm9yIGEgZGVmYXVsdCB2YWx1ZSBvZiB0eXBlIGNvbnN0
IGNoYXIqCisgICAgQGNvcHlkb2MgYmFzaWNfanNvbjo6dmFsdWUoY29uc3QganNvbl9wb2ludGVy
JiwgVmFsdWVUeXBlKSBjb25zdAorICAgICovCisgICAgc3RyaW5nX3QgdmFsdWUoY29uc3QganNv
bl9wb2ludGVyJiBwdHIsIGNvbnN0IGNoYXIqIGRlZmF1bHRfdmFsdWUpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gdmFsdWUocHRyLCBzdHJpbmdfdChkZWZhdWx0X3ZhbHVlKSk7CisgICAg
fQorCisgICAgLyohCisgICAgQGJyaWVmIGFjY2VzcyB0aGUgZmlyc3QgZWxlbWVudAorCisgICAg
UmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgY29udGFpbmVy
LiBGb3IgYSBKU09OCisgICAgY29udGFpbmVyIGBjYCwgdGhlIGV4cHJlc3Npb24gYGMuZnJvbnQo
KWAgaXMgZXF1aXZhbGVudCB0byBgKmMuYmVnaW4oKWAuCisKKyAgICBAcmV0dXJuIEluIGNhc2Ug
b2YgYSBzdHJ1Y3R1cmVkIHR5cGUgKGFycmF5IG9yIG9iamVjdCksIGEgcmVmZXJlbmNlIHRvIHRo
ZQorICAgIGZpcnN0IGVsZW1lbnQgaXMgcmV0dXJuZWQuIEluIGNhc3Qgb2YgbnVtYmVyLCBzdHJp
bmcsIG9yIGJvb2xlYW4gdmFsdWVzLCBhCisgICAgcmVmZXJlbmNlIHRvIHRoZSB2YWx1ZSBpcyBy
ZXR1cm5lZC4KKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQHByZSBUaGUgSlNP
TiB2YWx1ZSBtdXN0IG5vdCBiZSBgbnVsbGAgKHdvdWxkIHRocm93IGBzdGQ6Om91dF9vZl9yYW5n
ZWApCisgICAgb3IgYW4gZW1wdHkgYXJyYXkgb3Igb2JqZWN0ICh1bmRlZmluZWQgYmVoYXZpb3Is
ICoqZ3VhcmRlZCBieQorICAgIGFzc2VydGlvbnMqKikuCisgICAgQHBvc3QgVGhlIEpTT04gdmFs
dWUgcmVtYWlucyB1bmNoYW5nZWQuCisKKyAgICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2Ugd2hl
biBjYWxsZWQgb24gYG51bGxgIHZhbHVlCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2lu
ZyBjb2RlIHNob3dzIGFuIGV4YW1wbGUgZm9yIGBmcm9udCgpYC4sZnJvbnR9CisKKyAgICBAc2Eg
QHJlZiBiYWNrKCkgLS0gYWNjZXNzIHRoZSBsYXN0IGVsZW1lbnQKKworICAgIEBzaW5jZSB2ZXJz
aW9uIDEuMC4wCisgICAgKi8KKyAgICByZWZlcmVuY2UgZnJvbnQoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuICpiZWdpbigpOworICAgIH0KKworICAgIC8qIQorICAgIEBjb3B5ZG9jIGJhc2ljX2pz
b246OmZyb250KCkKKyAgICAqLworICAgIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gKmNiZWdpbigpOworICAgIH0KKworICAgIC8qIQorICAgIEBi
cmllZiBhY2Nlc3MgdGhlIGxhc3QgZWxlbWVudAorCisgICAgUmV0dXJucyBhIHJlZmVyZW5jZSB0
byB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSBjb250YWluZXIuIEZvciBhIEpTT04KKyAgICBjb250
YWluZXIgYGNgLCB0aGUgZXhwcmVzc2lvbiBgYy5iYWNrKClgIGlzIGVxdWl2YWxlbnQgdG8KKyAg
ICBAY29kZSB7LmNwcH0KKyAgICBhdXRvIHRtcCA9IGMuZW5kKCk7CisgICAgLS10bXA7CisgICAg
cmV0dXJuICp0bXA7CisgICAgQGVuZGNvZGUKKworICAgIEByZXR1cm4gSW4gY2FzZSBvZiBhIHN0
cnVjdHVyZWQgdHlwZSAoYXJyYXkgb3Igb2JqZWN0KSwgYSByZWZlcmVuY2UgdG8gdGhlCisgICAg
bGFzdCBlbGVtZW50IGlzIHJldHVybmVkLiBJbiBjYXN0IG9mIG51bWJlciwgc3RyaW5nLCBvciBi
b29sZWFuIHZhbHVlcywgYQorICAgIHJlZmVyZW5jZSB0byB0aGUgdmFsdWUgaXMgcmV0dXJuZWQu
CisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEBwcmUgVGhlIEpTT04gdmFsdWUg
bXVzdCBub3QgYmUgYG51bGxgICh3b3VsZCB0aHJvdyBgc3RkOjpvdXRfb2ZfcmFuZ2VgKQorICAg
IG9yIGFuIGVtcHR5IGFycmF5IG9yIG9iamVjdCAodW5kZWZpbmVkIGJlaGF2aW9yLCAqKmd1YXJk
ZWQgYnkKKyAgICBhc3NlcnRpb25zKiopLgorICAgIEBwb3N0IFRoZSBKU09OIHZhbHVlIHJlbWFp
bnMgdW5jaGFuZ2VkLgorCisgICAgQHRocm93IHN0ZDo6b3V0X29mX3JhbmdlIHdoZW4gY2FsbGVk
IG9uIGBudWxsYCB2YWx1ZS4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUg
c2hvd3MgYW4gZXhhbXBsZSBmb3IgYGJhY2soKWAuLGJhY2t9CisKKyAgICBAc2EgQHJlZiBmcm9u
dCgpIC0tIGFjY2VzcyB0aGUgZmlyc3QgZWxlbWVudAorCisgICAgQHNpbmNlIHZlcnNpb24gMS4w
LjAKKyAgICAqLworICAgIHJlZmVyZW5jZSBiYWNrKCkKKyAgICB7CisgICAgICAgIGF1dG8gdG1w
ID0gZW5kKCk7CisgICAgICAgIC0tdG1wOworICAgICAgICByZXR1cm4gKnRtcDsKKyAgICB9CisK
KyAgICAvKiEKKyAgICBAY29weWRvYyBiYXNpY19qc29uOjpiYWNrKCkKKyAgICAqLworICAgIGNv
bnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gdG1wID0gY2Vu
ZCgpOworICAgICAgICAtLXRtcDsKKyAgICAgICAgcmV0dXJuICp0bXA7CisgICAgfQorCisgICAg
LyohCisgICAgQGJyaWVmIHJlbW92ZSBlbGVtZW50IGdpdmVuIGFuIGl0ZXJhdG9yCisKKyAgICBS
ZW1vdmVzIHRoZSBlbGVtZW50IHNwZWNpZmllZCBieSBpdGVyYXRvciBAYSBwb3MuIFRoZSBpdGVy
YXRvciBAYSBwb3MgbXVzdAorICAgIGJlIHZhbGlkIGFuZCBkZXJlZmVyZW5jZWFibGUuIFRodXMg
dGhlIGBlbmQoKWAgaXRlcmF0b3IgKHdoaWNoIGlzIHZhbGlkLAorICAgIGJ1dCBpcyBub3QgZGVy
ZWZlcmVuY2VhYmxlKSBjYW5ub3QgYmUgdXNlZCBhcyBhIHZhbHVlIGZvciBAYSBwb3MuCisKKyAg
ICBJZiBjYWxsZWQgb24gYSBwcmltaXRpdmUgdHlwZSBvdGhlciB0aGFuIGBudWxsYCwgdGhlIHJl
c3VsdGluZyBKU09OIHZhbHVlCisgICAgd2lsbCBiZSBgbnVsbGAuCisKKyAgICBAcGFyYW1baW5d
IHBvcyBpdGVyYXRvciB0byB0aGUgZWxlbWVudCB0byByZW1vdmUKKyAgICBAcmV0dXJuIEl0ZXJh
dG9yIGZvbGxvd2luZyB0aGUgbGFzdCByZW1vdmVkIGVsZW1lbnQuIElmIHRoZSBpdGVyYXRvciBA
YQorICAgIHBvcyByZWZlcnMgdG8gdGhlIGxhc3QgZWxlbWVudCwgdGhlIGBlbmQoKWAgaXRlcmF0
b3IgaXMgcmV0dXJuZWQuCisKKyAgICBAdHBhcmFtIEl0ZXJhdG9yVHlwZSBhbiBAcmVmIGl0ZXJh
dG9yIG9yIEByZWYgY29uc3RfaXRlcmF0b3IKKworICAgIEBwb3N0IEludmFsaWRhdGVzIGl0ZXJh
dG9ycyBhbmQgcmVmZXJlbmNlcyBhdCBvciBhZnRlciB0aGUgcG9pbnQgb2YgdGhlCisgICAgZXJh
c2UsIGluY2x1ZGluZyB0aGUgYGVuZCgpYCBpdGVyYXRvci4KKworICAgIEB0aHJvdyBzdGQ6OmRv
bWFpbl9lcnJvciBpZiBjYWxsZWQgb24gYSBgbnVsbGAgdmFsdWU7IGV4YW1wbGU6IGAiY2Fubm90
CisgICAgdXNlIGVyYXNlKCkgd2l0aCBudWxsImAKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJy
b3IgaWYgY2FsbGVkIG9uIGFuIGl0ZXJhdG9yIHdoaWNoIGRvZXMgbm90IGJlbG9uZyB0bworICAg
IHRoZSBjdXJyZW50IEpTT04gdmFsdWU7IGV4YW1wbGU6IGAiaXRlcmF0b3IgZG9lcyBub3QgZml0
IGN1cnJlbnQgdmFsdWUiYAorICAgIEB0aHJvdyBzdGQ6Om91dF9vZl9yYW5nZSBpZiBjYWxsZWQg
b24gYSBwcmltaXRpdmUgdHlwZSB3aXRoIGludmFsaWQKKyAgICBpdGVyYXRvciAoaS5lLiwgYW55
IGl0ZXJhdG9yIHdoaWNoIGlzIG5vdCBgYmVnaW4oKWApOyBleGFtcGxlOiBgIml0ZXJhdG9yCisg
ICAgb3V0IG9mIHJhbmdlImAKKworICAgIEBjb21wbGV4aXR5IFRoZSBjb21wbGV4aXR5IGRlcGVu
ZHMgb24gdGhlIHR5cGU6CisgICAgLSBvYmplY3RzOiBhbW9ydGl6ZWQgY29uc3RhbnQKKyAgICAt
IGFycmF5czogbGluZWFyIGluIGRpc3RhbmNlIGJldHdlZW4gcG9zIGFuZCB0aGUgZW5kIG9mIHRo
ZSBjb250YWluZXIKKyAgICAtIHN0cmluZ3M6IGxpbmVhciBpbiB0aGUgbGVuZ3RoIG9mIHRoZSBz
dHJpbmcKKyAgICAtIG90aGVyIHR5cGVzOiBjb25zdGFudAorCisgICAgQGxpdmVleGFtcGxle1Ro
ZSBleGFtcGxlIHNob3dzIHRoZSByZXN1bHQgb2YgYGVyYXNlKClgIGZvciBkaWZmZXJlbnQgSlNP
TgorICAgIHR5cGVzLixlcmFzZV9fSXRlcmF0b3JUeXBlfQorCisgICAgQHNhIEByZWYgZXJhc2Uo
SXRlcmF0b3JUeXBlLCBJdGVyYXRvclR5cGUpIC0tIHJlbW92ZXMgdGhlIGVsZW1lbnRzIGluCisg
ICAgdGhlIGdpdmVuIHJhbmdlCisgICAgQHNhIEByZWYgZXJhc2UoY29uc3QgdHlwZW5hbWUgb2Jq
ZWN0X3Q6OmtleV90eXBlJikgLS0gcmVtb3ZlcyB0aGUgZWxlbWVudAorICAgIGZyb20gYW4gb2Jq
ZWN0IGF0IHRoZSBnaXZlbiBrZXkKKyAgICBAc2EgQHJlZiBlcmFzZShjb25zdCBzaXplX3R5cGUp
IC0tIHJlbW92ZXMgdGhlIGVsZW1lbnQgZnJvbSBhbiBhcnJheSBhdAorICAgIHRoZSBnaXZlbiBp
bmRleAorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIHRlbXBsYXRlPGNs
YXNzIEl0ZXJhdG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8CisgICAgICAgICAgICAg
ICAgIHN0ZDo6aXNfc2FtZTxJdGVyYXRvclR5cGUsIHR5cGVuYW1lIGJhc2ljX2pzb25fdDo6aXRl
cmF0b3I+Ojp2YWx1ZSBvcgorICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8SXRlcmF0b3JU
eXBlLCB0eXBlbmFtZSBiYXNpY19qc29uX3Q6OmNvbnN0X2l0ZXJhdG9yPjo6dmFsdWUsIGludD46
OnR5cGUKKyAgICAgICAgICAgICA9IDA+CisgICAgSXRlcmF0b3JUeXBlIGVyYXNlKEl0ZXJhdG9y
VHlwZSBwb3MpCisgICAgeworICAgICAgICAvLyBtYWtlIHN1cmUgaXRlcmF0b3IgZml0cyB0aGUg
Y3VycmVudCB2YWx1ZQorICAgICAgICBpZiAodGhpcyAhPSBwb3MubV9vYmplY3QpCisgICAgICAg
IHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiaXRlcmF0b3IgZG9lcyBu
b3QgZml0IGN1cnJlbnQgdmFsdWUiKTsKKyAgICAgICAgfQorCisgICAgICAgIEl0ZXJhdG9yVHlw
ZSByZXN1bHQgPSBlbmQoKTsKKworICAgICAgICBzd2l0Y2ggKG1fdHlwZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgorICAgICAgICAgICAgY2FzZSB2YWx1
ZV90OjpudW1iZXJfZmxvYXQ6CisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9pbnRl
Z2VyOgorICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQ6CisgICAgICAg
ICAgICBjYXNlIHZhbHVlX3Q6OnN0cmluZzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAobm90IHBvcy5tX2l0LnByaW1pdGl2ZV9pdGVyYXRvci5pc19iZWdpbigpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjpvdXRfb2ZfcmFuZ2U+
KCJpdGVyYXRvciBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBpZiAoaXNfc3RyaW5nKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBBbGxvY2F0b3JUeXBlPHN0cmluZ190PiBhbGxvYzsKKyAgICAgICAgICAgICAgICAg
ICAgYWxsb2MuZGVzdHJveShtX3ZhbHVlLnN0cmluZyk7CisgICAgICAgICAgICAgICAgICAgIGFs
bG9jLmRlYWxsb2NhdGUobV92YWx1ZS5zdHJpbmcsIDEpOworICAgICAgICAgICAgICAgICAgICBt
X3ZhbHVlLnN0cmluZyA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgbV90eXBlID0gdmFsdWVfdDo6bnVsbDsKKyAgICAgICAgICAgICAgICBhc3NlcnRfaW52
YXJpYW50KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGNhc2UgdmFsdWVfdDo6b2JqZWN0OgorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJlc3VsdC5tX2l0Lm9iamVjdF9pdGVyYXRvciA9IG1fdmFsdWUub2JqZWN0LT5lcmFzZShw
b3MubV9pdC5vYmplY3RfaXRlcmF0b3IpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5OgorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJlc3VsdC5tX2l0LmFycmF5X2l0ZXJhdG9yID0gbV92YWx1ZS5h
cnJheS0+ZXJhc2UocG9zLm1faXQuYXJyYXlfaXRlcmF0b3IpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fubm90IHVzZSBl
cmFzZSgpIHdpdGggIiArIHR5cGVfbmFtZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIHJl
bW92ZSBlbGVtZW50cyBnaXZlbiBhbiBpdGVyYXRvciByYW5nZQorCisgICAgUmVtb3ZlcyB0aGUg
ZWxlbWVudCBzcGVjaWZpZWQgYnkgdGhlIHJhbmdlIGBbZmlyc3Q7IGxhc3QpYC4gVGhlIGl0ZXJh
dG9yCisgICAgQGEgZmlyc3QgZG9lcyBub3QgbmVlZCB0byBiZSBkZXJlZmVyZW5jZWFibGUgaWYg
YGZpcnN0ID09IGxhc3RgOiBlcmFzaW5nCisgICAgYW4gZW1wdHkgcmFuZ2UgaXMgYSBuby1vcC4K
KworICAgIElmIGNhbGxlZCBvbiBhIHByaW1pdGl2ZSB0eXBlIG90aGVyIHRoYW4gYG51bGxgLCB0
aGUgcmVzdWx0aW5nIEpTT04gdmFsdWUKKyAgICB3aWxsIGJlIGBudWxsYC4KKworICAgIEBwYXJh
bVtpbl0gZmlyc3QgaXRlcmF0b3IgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcmFuZ2UgdG8gcmVt
b3ZlCisgICAgQHBhcmFtW2luXSBsYXN0IGl0ZXJhdG9yIHBhc3QgdGhlIGVuZCBvZiB0aGUgcmFu
Z2UgdG8gcmVtb3ZlCisgICAgQHJldHVybiBJdGVyYXRvciBmb2xsb3dpbmcgdGhlIGxhc3QgcmVt
b3ZlZCBlbGVtZW50LiBJZiB0aGUgaXRlcmF0b3IgQGEKKyAgICBzZWNvbmQgcmVmZXJzIHRvIHRo
ZSBsYXN0IGVsZW1lbnQsIHRoZSBgZW5kKClgIGl0ZXJhdG9yIGlzIHJldHVybmVkLgorCisgICAg
QHRwYXJhbSBJdGVyYXRvclR5cGUgYW4gQHJlZiBpdGVyYXRvciBvciBAcmVmIGNvbnN0X2l0ZXJh
dG9yCisKKyAgICBAcG9zdCBJbnZhbGlkYXRlcyBpdGVyYXRvcnMgYW5kIHJlZmVyZW5jZXMgYXQg
b3IgYWZ0ZXIgdGhlIHBvaW50IG9mIHRoZQorICAgIGVyYXNlLCBpbmNsdWRpbmcgdGhlIGBlbmQo
KWAgaXRlcmF0b3IuCisKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgY2FsbGVkIG9u
IGEgYG51bGxgIHZhbHVlOyBleGFtcGxlOiBgImNhbm5vdAorICAgIHVzZSBlcmFzZSgpIHdpdGgg
bnVsbCJgCisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIGNhbGxlZCBvbiBpdGVyYXRv
cnMgd2hpY2ggZG9lcyBub3QgYmVsb25nIHRvCisgICAgdGhlIGN1cnJlbnQgSlNPTiB2YWx1ZTsg
ZXhhbXBsZTogYCJpdGVyYXRvcnMgZG8gbm90IGZpdCBjdXJyZW50IHZhbHVlImAKKyAgICBAdGhy
b3cgc3RkOjpvdXRfb2ZfcmFuZ2UgaWYgY2FsbGVkIG9uIGEgcHJpbWl0aXZlIHR5cGUgd2l0aCBp
bnZhbGlkCisgICAgaXRlcmF0b3JzIChpLmUuLCBpZiBgZmlyc3QgIT0gYmVnaW4oKWAgYW5kIGBs
YXN0ICE9IGVuZCgpYCk7IGV4YW1wbGU6CisgICAgYCJpdGVyYXRvcnMgb3V0IG9mIHJhbmdlImAK
KworICAgIEBjb21wbGV4aXR5IFRoZSBjb21wbGV4aXR5IGRlcGVuZHMgb24gdGhlIHR5cGU6Cisg
ICAgLSBvYmplY3RzOiBgbG9nKHNpemUoKSkgKyBzdGQ6OmRpc3RhbmNlKGZpcnN0LCBsYXN0KWAK
KyAgICAtIGFycmF5czogbGluZWFyIGluIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIEBhIGZpcnN0IGFu
ZCBAYSBsYXN0LCBwbHVzIGxpbmVhcgorICAgICAgaW4gdGhlIGRpc3RhbmNlIGJldHdlZW4gQGEg
bGFzdCBhbmQgZW5kIG9mIHRoZSBjb250YWluZXIKKyAgICAtIHN0cmluZ3M6IGxpbmVhciBpbiB0
aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcKKyAgICAtIG90aGVyIHR5cGVzOiBjb25zdGFudAorCisg
ICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIHNob3dzIHRoZSByZXN1bHQgb2YgYGVyYXNlKClg
IGZvciBkaWZmZXJlbnQgSlNPTgorICAgIHR5cGVzLixlcmFzZV9fSXRlcmF0b3JUeXBlX0l0ZXJh
dG9yVHlwZX0KKworICAgIEBzYSBAcmVmIGVyYXNlKEl0ZXJhdG9yVHlwZSkgLS0gcmVtb3ZlcyB0
aGUgZWxlbWVudCBhdCBhIGdpdmVuIHBvc2l0aW9uCisgICAgQHNhIEByZWYgZXJhc2UoY29uc3Qg
dHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlJikgLS0gcmVtb3ZlcyB0aGUgZWxlbWVudAorICAg
IGZyb20gYW4gb2JqZWN0IGF0IHRoZSBnaXZlbiBrZXkKKyAgICBAc2EgQHJlZiBlcmFzZShjb25z
dCBzaXplX3R5cGUpIC0tIHJlbW92ZXMgdGhlIGVsZW1lbnQgZnJvbSBhbiBhcnJheSBhdAorICAg
IHRoZSBnaXZlbiBpbmRleAorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAg
IHRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8Cisg
ICAgICAgICAgICAgICAgIHN0ZDo6aXNfc2FtZTxJdGVyYXRvclR5cGUsIHR5cGVuYW1lIGJhc2lj
X2pzb25fdDo6aXRlcmF0b3I+Ojp2YWx1ZSBvcgorICAgICAgICAgICAgICAgICBzdGQ6OmlzX3Nh
bWU8SXRlcmF0b3JUeXBlLCB0eXBlbmFtZSBiYXNpY19qc29uX3Q6OmNvbnN0X2l0ZXJhdG9yPjo6
dmFsdWUsIGludD46OnR5cGUKKyAgICAgICAgICAgICA9IDA+CisgICAgSXRlcmF0b3JUeXBlIGVy
YXNlKEl0ZXJhdG9yVHlwZSBmaXJzdCwgSXRlcmF0b3JUeXBlIGxhc3QpCisgICAgeworICAgICAg
ICAvLyBtYWtlIHN1cmUgaXRlcmF0b3IgZml0cyB0aGUgY3VycmVudCB2YWx1ZQorICAgICAgICBp
ZiAodGhpcyAhPSBmaXJzdC5tX29iamVjdCBvciB0aGlzICE9IGxhc3QubV9vYmplY3QpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiaXRlcmF0b3JzIGRv
IG5vdCBmaXQgY3VycmVudCB2YWx1ZSIpOworICAgICAgICB9CisKKyAgICAgICAgSXRlcmF0b3JU
eXBlIHJlc3VsdCA9IGVuZCgpOworCisgICAgICAgIHN3aXRjaCAobV90eXBlKQorICAgICAgICB7
CisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmJvb2xlYW46CisgICAgICAgICAgICBjYXNlIHZh
bHVlX3Q6Om51bWJlcl9mbG9hdDoKKyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2lu
dGVnZXI6CisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZDoKKyAgICAg
ICAgICAgIGNhc2UgdmFsdWVfdDo6c3RyaW5nOgorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChub3QgZmlyc3QubV9pdC5wcmltaXRpdmVfaXRlcmF0b3IuaXNfYmVnaW4oKSBvciBu
b3QgbGFzdC5tX2l0LnByaW1pdGl2ZV9pdGVyYXRvci5pc19lbmQoKSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6b3V0X29mX3JhbmdlPigiaXRlcmF0
b3JzIG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGlmIChpc19zdHJpbmcoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IEFsbG9jYXRvclR5cGU8c3RyaW5nX3Q+IGFsbG9jOworICAgICAgICAgICAgICAgICAgICBhbGxv
Yy5kZXN0cm95KG1fdmFsdWUuc3RyaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgYWxsb2MuZGVh
bGxvY2F0ZShtX3ZhbHVlLnN0cmluZywgMSk7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUu
c3RyaW5nID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBt
X3R5cGUgPSB2YWx1ZV90OjpudWxsOworICAgICAgICAgICAgICAgIGFzc2VydF9pbnZhcmlhbnQo
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Y2FzZSB2YWx1ZV90OjpvYmplY3Q6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVz
dWx0Lm1faXQub2JqZWN0X2l0ZXJhdG9yID0gbV92YWx1ZS5vYmplY3QtPmVyYXNlKGZpcnN0Lm1f
aXQub2JqZWN0X2l0ZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxhc3QubV9pdC5vYmplY3RfaXRlcmF0b3IpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5Ogor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlc3VsdC5tX2l0LmFycmF5X2l0ZXJhdG9y
ID0gbV92YWx1ZS5hcnJheS0+ZXJhc2UoZmlyc3QubV9pdC5hcnJheV9pdGVyYXRvciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QubV9pdC5hcnJheV9p
dGVyYXRvcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVGhyb3c8c3Rk
Ojpkb21haW5fZXJyb3I+KCJjYW5ub3QgdXNlIGVyYXNlKCkgd2l0aCAiICsgdHlwZV9uYW1lKCkp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgcmVtb3ZlIGVsZW1lbnQgZnJvbSBhIEpTT04gb2Jq
ZWN0IGdpdmVuIGEga2V5CisKKyAgICBSZW1vdmVzIGVsZW1lbnRzIGZyb20gYSBKU09OIG9iamVj
dCB3aXRoIHRoZSBrZXkgdmFsdWUgQGEga2V5LgorCisgICAgQHBhcmFtW2luXSBrZXkgdmFsdWUg
b2YgdGhlIGVsZW1lbnRzIHRvIHJlbW92ZQorCisgICAgQHJldHVybiBOdW1iZXIgb2YgZWxlbWVu
dHMgcmVtb3ZlZC4gSWYgQGEgT2JqZWN0VHlwZSBpcyB0aGUgZGVmYXVsdAorICAgIGBzdGQ6Om1h
cGAgdHlwZSwgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBgMGAgKEBhIGtleSB3YXMg
bm90CisgICAgZm91bmQpIG9yIGAxYCAoQGEga2V5IHdhcyBmb3VuZCkuCisKKyAgICBAcG9zdCBS
ZWZlcmVuY2VzIGFuZCBpdGVyYXRvcnMgdG8gdGhlIGVyYXNlZCBlbGVtZW50cyBhcmUgaW52YWxp
ZGF0ZWQuCisgICAgT3RoZXIgcmVmZXJlbmNlcyBhbmQgaXRlcmF0b3JzIGFyZSBub3QgYWZmZWN0
ZWQuCisKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3Igd2hlbiBjYWxsZWQgb24gYSB0eXBl
IG90aGVyIHRoYW4gSlNPTiBvYmplY3Q7CisgICAgZXhhbXBsZTogYCJjYW5ub3QgdXNlIGVyYXNl
KCkgd2l0aCBudWxsImAKKworICAgIEBjb21wbGV4aXR5IGBsb2coc2l6ZSgpKSArIGNvdW50KGtl
eSlgCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgc2hvd3MgdGhlIGVmZmVjdCBvZiBg
ZXJhc2UoKWAuLGVyYXNlX19rZXlfdHlwZX0KKworICAgIEBzYSBAcmVmIGVyYXNlKEl0ZXJhdG9y
VHlwZSkgLS0gcmVtb3ZlcyB0aGUgZWxlbWVudCBhdCBhIGdpdmVuIHBvc2l0aW9uCisgICAgQHNh
IEByZWYgZXJhc2UoSXRlcmF0b3JUeXBlLCBJdGVyYXRvclR5cGUpIC0tIHJlbW92ZXMgdGhlIGVs
ZW1lbnRzIGluCisgICAgdGhlIGdpdmVuIHJhbmdlCisgICAgQHNhIEByZWYgZXJhc2UoY29uc3Qg
c2l6ZV90eXBlKSAtLSByZW1vdmVzIHRoZSBlbGVtZW50IGZyb20gYW4gYXJyYXkgYXQKKyAgICB0
aGUgZ2l2ZW4gaW5kZXgKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBz
aXplX3R5cGUgZXJhc2UoY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlJiBrZXkpCisg
ICAgeworICAgICAgICAvLyB0aGlzIGVyYXNlIG9ubHkgd29ya3MgZm9yIG9iamVjdHMKKyAgICAg
ICAgaWYgKGlzX29iamVjdCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV92YWx1
ZS5vYmplY3QtPmVyYXNlKGtleSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oImNhbm5vdCB1c2UgZXJhc2Uo
KSB3aXRoICIgKyB0eXBlX25hbWUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiEKKyAg
ICBAYnJpZWYgcmVtb3ZlIGVsZW1lbnQgZnJvbSBhIEpTT04gYXJyYXkgZ2l2ZW4gYW4gaW5kZXgK
KworICAgIFJlbW92ZXMgZWxlbWVudCBmcm9tIGEgSlNPTiBhcnJheSBhdCB0aGUgaW5kZXggQGEg
aWR4LgorCisgICAgQHBhcmFtW2luXSBpZHggaW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gcmVtb3Zl
CisKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3Igd2hlbiBjYWxsZWQgb24gYSB0eXBlIG90
aGVyIHRoYW4gSlNPTiBhcnJheTsKKyAgICBleGFtcGxlOiBgImNhbm5vdCB1c2UgZXJhc2UoKSB3
aXRoIG51bGwiYAorICAgIEB0aHJvdyBzdGQ6Om91dF9vZl9yYW5nZSB3aGVuIGBpZHggPj0gc2l6
ZSgpYDsgZXhhbXBsZTogYCJhcnJheSBpbmRleCAxNworICAgIGlzIG91dCBvZiByYW5nZSJgCisK
KyAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gZGlzdGFuY2UgYmV0d2VlbiBAYSBpZHggYW5kIHRo
ZSBlbmQgb2YgdGhlIGNvbnRhaW5lci4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBz
aG93cyB0aGUgZWZmZWN0IG9mIGBlcmFzZSgpYC4sZXJhc2VfX3NpemVfdHlwZX0KKworICAgIEBz
YSBAcmVmIGVyYXNlKEl0ZXJhdG9yVHlwZSkgLS0gcmVtb3ZlcyB0aGUgZWxlbWVudCBhdCBhIGdp
dmVuIHBvc2l0aW9uCisgICAgQHNhIEByZWYgZXJhc2UoSXRlcmF0b3JUeXBlLCBJdGVyYXRvclR5
cGUpIC0tIHJlbW92ZXMgdGhlIGVsZW1lbnRzIGluCisgICAgdGhlIGdpdmVuIHJhbmdlCisgICAg
QHNhIEByZWYgZXJhc2UoY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlJikgLS0gcmVt
b3ZlcyB0aGUgZWxlbWVudAorICAgIGZyb20gYW4gb2JqZWN0IGF0IHRoZSBnaXZlbiBrZXkKKwor
ICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICB2b2lkIGVyYXNlKGNvbnN0IHNp
emVfdHlwZSBpZHgpCisgICAgeworICAgICAgICAvLyB0aGlzIGVyYXNlIG9ubHkgd29ya3MgZm9y
IGFycmF5cworICAgICAgICBpZiAoaXNfYXJyYXkoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGlkeCA+PSBzaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVGhyb3c8
c3RkOjpvdXRfb2ZfcmFuZ2U+KCJhcnJheSBpbmRleCAiICsgc3RkOjp0b19zdHJpbmcoaWR4KSAr
ICIgaXMgb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1fdmFs
dWUuYXJyYXktPmVyYXNlKG1fdmFsdWUuYXJyYXktPmJlZ2luKCkgKyBzdGF0aWNfY2FzdDxkaWZm
ZXJlbmNlX3R5cGU+KGlkeCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJjYW5ub3QgdXNlIGVyYXNlKCkg
d2l0aCAiICsgdHlwZV9uYW1lKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8vIEB9CisK
KworICAgIC8vLy8vLy8vLy8vLworICAgIC8vIGxvb2t1cCAvLworICAgIC8vLy8vLy8vLy8vLwor
CisgICAgLy8vIEBuYW1lIGxvb2t1cAorICAgIC8vLyBAeworCisgICAgLyohCisgICAgQGJyaWVm
IGZpbmQgYW4gZWxlbWVudCBpbiBhIEpTT04gb2JqZWN0CisKKyAgICBGaW5kcyBhbiBlbGVtZW50
IGluIGEgSlNPTiBvYmplY3Qgd2l0aCBrZXkgZXF1aXZhbGVudCB0byBAYSBrZXkuIElmIHRoZQor
ICAgIGVsZW1lbnQgaXMgbm90IGZvdW5kIG9yIHRoZSBKU09OIHZhbHVlIGlzIG5vdCBhbiBvYmpl
Y3QsIGVuZCgpIGlzCisgICAgcmV0dXJuZWQuCisKKyAgICBAcGFyYW1baW5dIGtleSBrZXkgdmFs
dWUgb2YgdGhlIGVsZW1lbnQgdG8gc2VhcmNoIGZvcgorCisgICAgQHJldHVybiBJdGVyYXRvciB0
byBhbiBlbGVtZW50IHdpdGgga2V5IGVxdWl2YWxlbnQgdG8gQGEga2V5LiBJZiBubyBzdWNoCisg
ICAgZWxlbWVudCBpcyBmb3VuZCwgcGFzdC10aGUtZW5kIChzZWUgZW5kKCkpIGl0ZXJhdG9yIGlz
IHJldHVybmVkLgorCisgICAgQGNvbXBsZXhpdHkgTG9nYXJpdGhtaWMgaW4gdGhlIHNpemUgb2Yg
dGhlIEpTT04gb2JqZWN0LgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIHNob3dzIGhv
dyBgZmluZCgpYCBpcyB1c2VkLixmaW5kX19rZXlfdHlwZX0KKworICAgIEBzaW5jZSB2ZXJzaW9u
IDEuMC4wCisgICAgKi8KKyAgICBpdGVyYXRvciBmaW5kKHR5cGVuYW1lIG9iamVjdF90OjprZXlf
dHlwZSBrZXkpCisgICAgeworICAgICAgICBhdXRvIHJlc3VsdCA9IGVuZCgpOworCisgICAgICAg
IGlmIChpc19vYmplY3QoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0Lm1faXQub2Jq
ZWN0X2l0ZXJhdG9yID0gbV92YWx1ZS5vYmplY3QtPmZpbmQoa2V5KTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGZpbmQg
YW4gZWxlbWVudCBpbiBhIEpTT04gb2JqZWN0CisgICAgQGNvcHlkb2MgZmluZCh0eXBlbmFtZSBv
YmplY3RfdDo6a2V5X3R5cGUpCisgICAgKi8KKyAgICBjb25zdF9pdGVyYXRvciBmaW5kKHR5cGVu
YW1lIG9iamVjdF90OjprZXlfdHlwZSBrZXkpIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIHJl
c3VsdCA9IGNlbmQoKTsKKworICAgICAgICBpZiAoaXNfb2JqZWN0KCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJlc3VsdC5tX2l0Lm9iamVjdF9pdGVyYXRvciA9IG1fdmFsdWUub2JqZWN0LT5m
aW5kKGtleSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIC8qIQorICAgIEBicmllZiByZXR1cm5zIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2Yg
YSBrZXkgaW4gYSBKU09OIG9iamVjdAorCisgICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1l
bnRzIHdpdGgga2V5IEBhIGtleS4gSWYgT2JqZWN0VHlwZSBpcyB0aGUKKyAgICBkZWZhdWx0IGBz
dGQ6Om1hcGAgdHlwZSwgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBgMGAgKEBhIGtl
eSB3YXMKKyAgICBub3QgZm91bmQpIG9yIGAxYCAoQGEga2V5IHdhcyBmb3VuZCkuCisKKyAgICBA
cGFyYW1baW5dIGtleSBrZXkgdmFsdWUgb2YgdGhlIGVsZW1lbnQgdG8gY291bnQKKworICAgIEBy
ZXR1cm4gTnVtYmVyIG9mIGVsZW1lbnRzIHdpdGgga2V5IEBhIGtleS4gSWYgdGhlIEpTT04gdmFs
dWUgaXMgbm90IGFuCisgICAgb2JqZWN0LCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYDBgLgor
CisgICAgQGNvbXBsZXhpdHkgTG9nYXJpdGhtaWMgaW4gdGhlIHNpemUgb2YgdGhlIEpTT04gb2Jq
ZWN0LgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIHNob3dzIGhvdyBgY291bnQoKWAg
aXMgdXNlZC4sY291bnR9CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAg
c2l6ZV90eXBlIGNvdW50KHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlwZSBrZXkpIGNvbnN0Cisg
ICAgeworICAgICAgICAvLyByZXR1cm4gMCBmb3IgYWxsIG5vbm9iamVjdCB0eXBlcworICAgICAg
ICByZXR1cm4gaXNfb2JqZWN0KCkgPyBtX3ZhbHVlLm9iamVjdC0+Y291bnQoa2V5KSA6IDA7Cisg
ICAgfQorCisgICAgLy8vIEB9CisKKworICAgIC8vLy8vLy8vLy8vLy8vLworICAgIC8vIGl0ZXJh
dG9ycyAvLworICAgIC8vLy8vLy8vLy8vLy8vLworCisgICAgLy8vIEBuYW1lIGl0ZXJhdG9ycwor
ICAgIC8vLyBAeworCisgICAgLyohCisgICAgQGJyaWVmIHJldHVybnMgYW4gaXRlcmF0b3IgdG8g
dGhlIGZpcnN0IGVsZW1lbnQKKworICAgIFJldHVybnMgYW4gaXRlcmF0b3IgdG8gdGhlIGZpcnN0
IGVsZW1lbnQuCisKKyAgICBAaW1hZ2UgaHRtbCByYW5nZS1iZWdpbi1lbmQuc3ZnICJJbGx1c3Ry
YXRpb24gZnJvbSBjcHByZWZlcmVuY2UuY29tIgorCisgICAgQHJldHVybiBpdGVyYXRvciB0byB0
aGUgZmlyc3QgZWxlbWVudAorCisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAcmVx
dWlyZW1lbnQgVGhpcyBmdW5jdGlvbiBoZWxwcyBgYmFzaWNfanNvbmAgc2F0aXNmeWluZyB0aGUK
KyAgICBbQ29udGFpbmVyXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0
L0NvbnRhaW5lcikKKyAgICByZXF1aXJlbWVudHM6CisgICAgLSBUaGUgY29tcGxleGl0eSBpcyBj
b25zdGFudC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgYW4g
ZXhhbXBsZSBmb3IgYGJlZ2luKClgLixiZWdpbn0KKworICAgIEBzYSBAcmVmIGNiZWdpbigpIC0t
IHJldHVybnMgYSBjb25zdCBpdGVyYXRvciB0byB0aGUgYmVnaW5uaW5nCisgICAgQHNhIEByZWYg
ZW5kKCkgLS0gcmV0dXJucyBhbiBpdGVyYXRvciB0byB0aGUgZW5kCisgICAgQHNhIEByZWYgY2Vu
ZCgpIC0tIHJldHVybnMgYSBjb25zdCBpdGVyYXRvciB0byB0aGUgZW5kCisKKyAgICBAc2luY2Ug
dmVyc2lvbiAxLjAuMAorICAgICovCisgICAgaXRlcmF0b3IgYmVnaW4oKSBub2V4Y2VwdAorICAg
IHsKKyAgICAgICAgaXRlcmF0b3IgcmVzdWx0KHRoaXMpOworICAgICAgICByZXN1bHQuc2V0X2Jl
Z2luKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyohCisgICAgQGNv
cHlkb2MgYmFzaWNfanNvbjo6Y2JlZ2luKCkKKyAgICAqLworICAgIGNvbnN0X2l0ZXJhdG9yIGJl
Z2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICB7CisgICAgICAgIHJldHVybiBjYmVnaW4oKTsKKyAg
ICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgcmV0dXJucyBhIGNvbnN0IGl0ZXJhdG9yIHRvIHRo
ZSBmaXJzdCBlbGVtZW50CisKKyAgICBSZXR1cm5zIGEgY29uc3QgaXRlcmF0b3IgdG8gdGhlIGZp
cnN0IGVsZW1lbnQuCisKKyAgICBAaW1hZ2UgaHRtbCByYW5nZS1iZWdpbi1lbmQuc3ZnICJJbGx1
c3RyYXRpb24gZnJvbSBjcHByZWZlcmVuY2UuY29tIgorCisgICAgQHJldHVybiBjb25zdCBpdGVy
YXRvciB0byB0aGUgZmlyc3QgZWxlbWVudAorCisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisK
KyAgICBAcmVxdWlyZW1lbnQgVGhpcyBmdW5jdGlvbiBoZWxwcyBgYmFzaWNfanNvbmAgc2F0aXNm
eWluZyB0aGUKKyAgICBbQ29udGFpbmVyXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2Nw
cC9jb25jZXB0L0NvbnRhaW5lcikKKyAgICByZXF1aXJlbWVudHM6CisgICAgLSBUaGUgY29tcGxl
eGl0eSBpcyBjb25zdGFudC4KKyAgICAtIEhhcyB0aGUgc2VtYW50aWNzIG9mIGBjb25zdF9jYXN0
PGNvbnN0IGJhc2ljX2pzb24mPigqdGhpcykuYmVnaW4oKWAuCisKKyAgICBAbGl2ZWV4YW1wbGV7
VGhlIGZvbGxvd2luZyBjb2RlIHNob3dzIGFuIGV4YW1wbGUgZm9yIGBjYmVnaW4oKWAuLGNiZWdp
bn0KKworICAgIEBzYSBAcmVmIGJlZ2luKCkgLS0gcmV0dXJucyBhbiBpdGVyYXRvciB0byB0aGUg
YmVnaW5uaW5nCisgICAgQHNhIEByZWYgZW5kKCkgLS0gcmV0dXJucyBhbiBpdGVyYXRvciB0byB0
aGUgZW5kCisgICAgQHNhIEByZWYgY2VuZCgpIC0tIHJldHVybnMgYSBjb25zdCBpdGVyYXRvciB0
byB0aGUgZW5kCisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgY29uc3Rf
aXRlcmF0b3IgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICB7CisgICAgICAgIGNvbnN0X2l0
ZXJhdG9yIHJlc3VsdCh0aGlzKTsKKyAgICAgICAgcmVzdWx0LnNldF9iZWdpbigpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiByZXR1cm5zIGFu
IGl0ZXJhdG9yIHRvIG9uZSBwYXN0IHRoZSBsYXN0IGVsZW1lbnQKKworICAgIFJldHVybnMgYW4g
aXRlcmF0b3IgdG8gb25lIHBhc3QgdGhlIGxhc3QgZWxlbWVudC4KKworICAgIEBpbWFnZSBodG1s
IHJhbmdlLWJlZ2luLWVuZC5zdmcgIklsbHVzdHJhdGlvbiBmcm9tIGNwcHJlZmVyZW5jZS5jb20i
CisKKyAgICBAcmV0dXJuIGl0ZXJhdG9yIG9uZSBwYXN0IHRoZSBsYXN0IGVsZW1lbnQKKworICAg
IEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQHJlcXVpcmVtZW50IFRoaXMgZnVuY3Rpb24g
aGVscHMgYGJhc2ljX2pzb25gIHNhdGlzZnlpbmcgdGhlCisgICAgW0NvbnRhaW5lcl0oaHR0cDov
L2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29uY2VwdC9Db250YWluZXIpCisgICAgcmVxdWly
ZW1lbnRzOgorICAgIC0gVGhlIGNvbXBsZXhpdHkgaXMgY29uc3RhbnQuCisKKyAgICBAbGl2ZWV4
YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIHNob3dzIGFuIGV4YW1wbGUgZm9yIGBlbmQoKWAuLGVu
ZH0KKworICAgIEBzYSBAcmVmIGNlbmQoKSAtLSByZXR1cm5zIGEgY29uc3QgaXRlcmF0b3IgdG8g
dGhlIGVuZAorICAgIEBzYSBAcmVmIGJlZ2luKCkgLS0gcmV0dXJucyBhbiBpdGVyYXRvciB0byB0
aGUgYmVnaW5uaW5nCisgICAgQHNhIEByZWYgY2JlZ2luKCkgLS0gcmV0dXJucyBhIGNvbnN0IGl0
ZXJhdG9yIHRvIHRoZSBiZWdpbm5pbmcKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAg
Ki8KKyAgICBpdGVyYXRvciBlbmQoKSBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgaXRlcmF0b3Ig
cmVzdWx0KHRoaXMpOworICAgICAgICByZXN1bHQuc2V0X2VuZCgpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIC8qIQorICAgIEBjb3B5ZG9jIGJhc2ljX2pzb246OmNlbmQo
KQorICAgICovCisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgICB7
CisgICAgICAgIHJldHVybiBjZW5kKCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIHJl
dHVybnMgYSBjb25zdCBpdGVyYXRvciB0byBvbmUgcGFzdCB0aGUgbGFzdCBlbGVtZW50CisKKyAg
ICBSZXR1cm5zIGEgY29uc3QgaXRlcmF0b3IgdG8gb25lIHBhc3QgdGhlIGxhc3QgZWxlbWVudC4K
KworICAgIEBpbWFnZSBodG1sIHJhbmdlLWJlZ2luLWVuZC5zdmcgIklsbHVzdHJhdGlvbiBmcm9t
IGNwcHJlZmVyZW5jZS5jb20iCisKKyAgICBAcmV0dXJuIGNvbnN0IGl0ZXJhdG9yIG9uZSBwYXN0
IHRoZSBsYXN0IGVsZW1lbnQKKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQHJl
cXVpcmVtZW50IFRoaXMgZnVuY3Rpb24gaGVscHMgYGJhc2ljX2pzb25gIHNhdGlzZnlpbmcgdGhl
CisgICAgW0NvbnRhaW5lcl0oaHR0cDovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29uY2Vw
dC9Db250YWluZXIpCisgICAgcmVxdWlyZW1lbnRzOgorICAgIC0gVGhlIGNvbXBsZXhpdHkgaXMg
Y29uc3RhbnQuCisgICAgLSBIYXMgdGhlIHNlbWFudGljcyBvZiBgY29uc3RfY2FzdDxjb25zdCBi
YXNpY19qc29uJj4oKnRoaXMpLmVuZCgpYC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93
aW5nIGNvZGUgc2hvd3MgYW4gZXhhbXBsZSBmb3IgYGNlbmQoKWAuLGNlbmR9CisKKyAgICBAc2Eg
QHJlZiBlbmQoKSAtLSByZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIHRoZSBlbmQKKyAgICBAc2EgQHJl
ZiBiZWdpbigpIC0tIHJldHVybnMgYW4gaXRlcmF0b3IgdG8gdGhlIGJlZ2lubmluZworICAgIEBz
YSBAcmVmIGNiZWdpbigpIC0tIHJldHVybnMgYSBjb25zdCBpdGVyYXRvciB0byB0aGUgYmVnaW5u
aW5nCisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgY29uc3RfaXRlcmF0
b3IgY2VuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAgICBjb25zdF9pdGVyYXRvciBy
ZXN1bHQodGhpcyk7CisgICAgICAgIHJlc3VsdC5zZXRfZW5kKCk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIHJldHVybnMgYW4gaXRlcmF0b3Ig
dG8gdGhlIHJldmVyc2UtYmVnaW5uaW5nCisKKyAgICBSZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIHRo
ZSByZXZlcnNlLWJlZ2lubmluZzsgdGhhdCBpcywgdGhlIGxhc3QgZWxlbWVudC4KKworICAgIEBp
bWFnZSBodG1sIHJhbmdlLXJiZWdpbi1yZW5kLnN2ZyAiSWxsdXN0cmF0aW9uIGZyb20gY3BwcmVm
ZXJlbmNlLmNvbSIKKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQHJlcXVpcmVt
ZW50IFRoaXMgZnVuY3Rpb24gaGVscHMgYGJhc2ljX2pzb25gIHNhdGlzZnlpbmcgdGhlCisgICAg
W1JldmVyc2libGVDb250YWluZXJdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2Nv
bmNlcHQvUmV2ZXJzaWJsZUNvbnRhaW5lcikKKyAgICByZXF1aXJlbWVudHM6CisgICAgLSBUaGUg
Y29tcGxleGl0eSBpcyBjb25zdGFudC4KKyAgICAtIEhhcyB0aGUgc2VtYW50aWNzIG9mIGByZXZl
cnNlX2l0ZXJhdG9yKGVuZCgpKWAuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBj
b2RlIHNob3dzIGFuIGV4YW1wbGUgZm9yIGByYmVnaW4oKWAuLHJiZWdpbn0KKworICAgIEBzYSBA
cmVmIGNyYmVnaW4oKSAtLSByZXR1cm5zIGEgY29uc3QgcmV2ZXJzZSBpdGVyYXRvciB0byB0aGUg
YmVnaW5uaW5nCisgICAgQHNhIEByZWYgcmVuZCgpIC0tIHJldHVybnMgYSByZXZlcnNlIGl0ZXJh
dG9yIHRvIHRoZSBlbmQKKyAgICBAc2EgQHJlZiBjcmVuZCgpIC0tIHJldHVybnMgYSBjb25zdCBy
ZXZlcnNlIGl0ZXJhdG9yIHRvIHRoZSBlbmQKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisg
ICAgKi8KKyAgICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIG5vZXhjZXB0CisgICAgeworICAg
ICAgICByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7CisgICAgfQorCisgICAgLyohCisg
ICAgQGNvcHlkb2MgYmFzaWNfanNvbjo6Y3JiZWdpbigpCisgICAgKi8KKyAgICBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAgICByZXR1
cm4gY3JiZWdpbigpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiByZXR1cm5zIGFuIGl0
ZXJhdG9yIHRvIHRoZSByZXZlcnNlLWVuZAorCisgICAgUmV0dXJucyBhbiBpdGVyYXRvciB0byB0
aGUgcmV2ZXJzZS1lbmQ7IHRoYXQgaXMsIG9uZSBiZWZvcmUgdGhlIGZpcnN0CisgICAgZWxlbWVu
dC4KKworICAgIEBpbWFnZSBodG1sIHJhbmdlLXJiZWdpbi1yZW5kLnN2ZyAiSWxsdXN0cmF0aW9u
IGZyb20gY3BwcmVmZXJlbmNlLmNvbSIKKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisg
ICAgQHJlcXVpcmVtZW50IFRoaXMgZnVuY3Rpb24gaGVscHMgYGJhc2ljX2pzb25gIHNhdGlzZnlp
bmcgdGhlCisgICAgW1JldmVyc2libGVDb250YWluZXJdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2Uu
Y29tL3cvY3BwL2NvbmNlcHQvUmV2ZXJzaWJsZUNvbnRhaW5lcikKKyAgICByZXF1aXJlbWVudHM6
CisgICAgLSBUaGUgY29tcGxleGl0eSBpcyBjb25zdGFudC4KKyAgICAtIEhhcyB0aGUgc2VtYW50
aWNzIG9mIGByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpYC4KKworICAgIEBsaXZlZXhhbXBsZXtU
aGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgYW4gZXhhbXBsZSBmb3IgYHJlbmQoKWAuLHJlbmR9CisK
KyAgICBAc2EgQHJlZiBjcmVuZCgpIC0tIHJldHVybnMgYSBjb25zdCByZXZlcnNlIGl0ZXJhdG9y
IHRvIHRoZSBlbmQKKyAgICBAc2EgQHJlZiByYmVnaW4oKSAtLSByZXR1cm5zIGEgcmV2ZXJzZSBp
dGVyYXRvciB0byB0aGUgYmVnaW5uaW5nCisgICAgQHNhIEByZWYgY3JiZWdpbigpIC0tIHJldHVy
bnMgYSBjb25zdCByZXZlcnNlIGl0ZXJhdG9yIHRvIHRoZSBiZWdpbm5pbmcKKworICAgIEBzaW5j
ZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBub2V4
Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7Cisg
ICAgfQorCisgICAgLyohCisgICAgQGNvcHlkb2MgYmFzaWNfanNvbjo6Y3JlbmQoKQorICAgICov
CisgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgICB7
CisgICAgICAgIHJldHVybiBjcmVuZCgpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBy
ZXR1cm5zIGEgY29uc3QgcmV2ZXJzZSBpdGVyYXRvciB0byB0aGUgbGFzdCBlbGVtZW50CisKKyAg
ICBSZXR1cm5zIGEgY29uc3QgaXRlcmF0b3IgdG8gdGhlIHJldmVyc2UtYmVnaW5uaW5nOyB0aGF0
IGlzLCB0aGUgbGFzdAorICAgIGVsZW1lbnQuCisKKyAgICBAaW1hZ2UgaHRtbCByYW5nZS1yYmVn
aW4tcmVuZC5zdmcgIklsbHVzdHJhdGlvbiBmcm9tIGNwcHJlZmVyZW5jZS5jb20iCisKKyAgICBA
Y29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEByZXF1aXJlbWVudCBUaGlzIGZ1bmN0aW9uIGhl
bHBzIGBiYXNpY19qc29uYCBzYXRpc2Z5aW5nIHRoZQorICAgIFtSZXZlcnNpYmxlQ29udGFpbmVy
XShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L1JldmVyc2libGVDb250
YWluZXIpCisgICAgcmVxdWlyZW1lbnRzOgorICAgIC0gVGhlIGNvbXBsZXhpdHkgaXMgY29uc3Rh
bnQuCisgICAgLSBIYXMgdGhlIHNlbWFudGljcyBvZiBgY29uc3RfY2FzdDxjb25zdCBiYXNpY19q
c29uJj4oKnRoaXMpLnJiZWdpbigpYC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5n
IGNvZGUgc2hvd3MgYW4gZXhhbXBsZSBmb3IgYGNyYmVnaW4oKWAuLGNyYmVnaW59CisKKyAgICBA
c2EgQHJlZiByYmVnaW4oKSAtLSByZXR1cm5zIGEgcmV2ZXJzZSBpdGVyYXRvciB0byB0aGUgYmVn
aW5uaW5nCisgICAgQHNhIEByZWYgcmVuZCgpIC0tIHJldHVybnMgYSByZXZlcnNlIGl0ZXJhdG9y
IHRvIHRoZSBlbmQKKyAgICBAc2EgQHJlZiBjcmVuZCgpIC0tIHJldHVybnMgYSBjb25zdCByZXZl
cnNlIGl0ZXJhdG9yIHRvIHRoZSBlbmQKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAg
Ki8KKyAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNyYmVnaW4oKSBjb25zdCBub2V4Y2VwdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoY2VuZCgpKTsKKyAg
ICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgcmV0dXJucyBhIGNvbnN0IHJldmVyc2UgaXRlcmF0
b3IgdG8gb25lIGJlZm9yZSB0aGUgZmlyc3QKKworICAgIFJldHVybnMgYSBjb25zdCByZXZlcnNl
IGl0ZXJhdG9yIHRvIHRoZSByZXZlcnNlLWVuZDsgdGhhdCBpcywgb25lIGJlZm9yZQorICAgIHRo
ZSBmaXJzdCBlbGVtZW50LgorCisgICAgQGltYWdlIGh0bWwgcmFuZ2UtcmJlZ2luLXJlbmQuc3Zn
ICJJbGx1c3RyYXRpb24gZnJvbSBjcHByZWZlcmVuY2UuY29tIgorCisgICAgQGNvbXBsZXhpdHkg
Q29uc3RhbnQuCisKKyAgICBAcmVxdWlyZW1lbnQgVGhpcyBmdW5jdGlvbiBoZWxwcyBgYmFzaWNf
anNvbmAgc2F0aXNmeWluZyB0aGUKKyAgICBbUmV2ZXJzaWJsZUNvbnRhaW5lcl0oaHR0cDovL2Vu
LmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29uY2VwdC9SZXZlcnNpYmxlQ29udGFpbmVyKQorICAg
IHJlcXVpcmVtZW50czoKKyAgICAtIFRoZSBjb21wbGV4aXR5IGlzIGNvbnN0YW50LgorICAgIC0g
SGFzIHRoZSBzZW1hbnRpY3Mgb2YgYGNvbnN0X2Nhc3Q8Y29uc3QgYmFzaWNfanNvbiY+KCp0aGlz
KS5yZW5kKClgLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29kZSBzaG93cyBh
biBleGFtcGxlIGZvciBgY3JlbmQoKWAuLGNyZW5kfQorCisgICAgQHNhIEByZWYgcmVuZCgpIC0t
IHJldHVybnMgYSByZXZlcnNlIGl0ZXJhdG9yIHRvIHRoZSBlbmQKKyAgICBAc2EgQHJlZiByYmVn
aW4oKSAtLSByZXR1cm5zIGEgcmV2ZXJzZSBpdGVyYXRvciB0byB0aGUgYmVnaW5uaW5nCisgICAg
QHNhIEByZWYgY3JiZWdpbigpIC0tIHJldHVybnMgYSBjb25zdCByZXZlcnNlIGl0ZXJhdG9yIHRv
IHRoZSBiZWdpbm5pbmcKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBj
b25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNyZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgICB7CisgICAg
ICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGNiZWdpbigpKTsKKyAgICB9CisKKyAg
cHJpdmF0ZToKKyAgICAvLyBmb3J3YXJkIGRlY2xhcmF0aW9uCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSXRlcmF0b3JUeXBlPiBjbGFzcyBpdGVyYXRpb25fcHJveHk7CisKKyAgcHVibGljOgorICAg
IC8qIQorICAgIEBicmllZiB3cmFwcGVyIHRvIGFjY2VzcyBpdGVyYXRvciBtZW1iZXIgZnVuY3Rp
b25zIGluIHJhbmdlLWJhc2VkIGZvcgorCisgICAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdG8gYWNj
ZXNzIEByZWYgaXRlcmF0b3I6OmtleSgpIGFuZCBAcmVmCisgICAgaXRlcmF0b3I6OnZhbHVlKCkg
ZHVyaW5nIHJhbmdlLWJhc2VkIGZvciBsb29wcy4gSW4gdGhlc2UgbG9vcHMsIGEKKyAgICByZWZl
cmVuY2UgdG8gdGhlIEpTT04gdmFsdWVzIGlzIHJldHVybmVkLCBzbyB0aGVyZSBpcyBubyBhY2Nl
c3MgdG8gdGhlCisgICAgdW5kZXJseWluZyBpdGVyYXRvci4KKworICAgIEBub3RlIFRoZSBuYW1l
IG9mIHRoaXMgZnVuY3Rpb24gaXMgbm90IHlldCBmaW5hbCBhbmQgbWF5IGNoYW5nZSBpbiB0aGUK
KyAgICBmdXR1cmUuCisgICAgKi8KKyAgICBzdGF0aWMgaXRlcmF0aW9uX3Byb3h5PGl0ZXJhdG9y
PiBpdGVyYXRvcl93cmFwcGVyKHJlZmVyZW5jZSBjb250KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGl0ZXJhdGlvbl9wcm94eTxpdGVyYXRvcj4oY29udCk7CisgICAgfQorCisgICAgLyohCisgICAg
QGNvcHlkb2MgaXRlcmF0b3Jfd3JhcHBlcihyZWZlcmVuY2UpCisgICAgKi8KKyAgICBzdGF0aWMg
aXRlcmF0aW9uX3Byb3h5PGNvbnN0X2l0ZXJhdG9yPiBpdGVyYXRvcl93cmFwcGVyKGNvbnN0X3Jl
ZmVyZW5jZSBjb250KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGl0ZXJhdGlvbl9wcm94eTxjb25z
dF9pdGVyYXRvcj4oY29udCk7CisgICAgfQorCisgICAgLy8vIEB9CisKKworICAgIC8vLy8vLy8v
Ly8vLy8vCisgICAgLy8gY2FwYWNpdHkgLy8KKyAgICAvLy8vLy8vLy8vLy8vLworCisgICAgLy8v
IEBuYW1lIGNhcGFjaXR5CisgICAgLy8vIEB7CisKKyAgICAvKiEKKyAgICBAYnJpZWYgY2hlY2tz
IHdoZXRoZXIgdGhlIGNvbnRhaW5lciBpcyBlbXB0eQorCisgICAgQ2hlY2tzIGlmIGEgSlNPTiB2
YWx1ZSBoYXMgbm8gZWxlbWVudHMuCisKKyAgICBAcmV0dXJuIFRoZSByZXR1cm4gdmFsdWUgZGVw
ZW5kcyBvbiB0aGUgZGlmZmVyZW50IHR5cGVzIGFuZCBpcworICAgICAgICAgICAgZGVmaW5lZCBh
cyBmb2xsb3dzOgorICAgICAgICAgICAgVmFsdWUgdHlwZSAgfCByZXR1cm4gdmFsdWUKKyAgICAg
ICAgICAgIC0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgbnVsbCAgICAg
ICAgfCBgdHJ1ZWAKKyAgICAgICAgICAgIGJvb2xlYW4gICAgIHwgYGZhbHNlYAorICAgICAgICAg
ICAgc3RyaW5nICAgICAgfCBgZmFsc2VgCisgICAgICAgICAgICBudW1iZXIgICAgICB8IGBmYWxz
ZWAKKyAgICAgICAgICAgIG9iamVjdCAgICAgIHwgcmVzdWx0IG9mIGZ1bmN0aW9uIGBvYmplY3Rf
dDo6ZW1wdHkoKWAKKyAgICAgICAgICAgIGFycmF5ICAgICAgIHwgcmVzdWx0IG9mIGZ1bmN0aW9u
IGBhcnJheV90OjplbXB0eSgpYAorCisgICAgQG5vdGUgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBy
ZXR1cm4gd2hldGhlciBhIHN0cmluZyBzdG9yZWQgYXMgSlNPTiB2YWx1ZQorICAgIGlzIGVtcHR5
IC0gaXQgcmV0dXJucyB3aGV0aGVyIHRoZSBKU09OIGNvbnRhaW5lciBpdHNlbGYgaXMgZW1wdHkg
d2hpY2ggaXMKKyAgICBmYWxzZSBpbiB0aGUgY2FzZSBvZiBhIHN0cmluZy4KKworICAgIEBjb21w
bGV4aXR5IENvbnN0YW50LCBhcyBsb25nIGFzIEByZWYgYXJyYXlfdCBhbmQgQHJlZiBvYmplY3Rf
dCBzYXRpc2Z5CisgICAgdGhlIENvbnRhaW5lciBjb25jZXB0OyB0aGF0IGlzLCB0aGVpciBgZW1w
dHkoKWAgZnVuY3Rpb25zIGhhdmUgY29uc3RhbnQKKyAgICBjb21wbGV4aXR5LgorCisgICAgQHJl
cXVpcmVtZW50IFRoaXMgZnVuY3Rpb24gaGVscHMgYGJhc2ljX2pzb25gIHNhdGlzZnlpbmcgdGhl
CisgICAgW0NvbnRhaW5lcl0oaHR0cDovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29uY2Vw
dC9Db250YWluZXIpCisgICAgcmVxdWlyZW1lbnRzOgorICAgIC0gVGhlIGNvbXBsZXhpdHkgaXMg
Y29uc3RhbnQuCisgICAgLSBIYXMgdGhlIHNlbWFudGljcyBvZiBgYmVnaW4oKSA9PSBlbmQoKWAu
CisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIHVzZXMgYGVtcHR5KClgIHRv
IGNoZWNrIGlmIGEgSlNPTgorICAgIG9iamVjdCBjb250YWlucyBhbnkgZWxlbWVudHMuLGVtcHR5
fQorCisgICAgQHNhIEByZWYgc2l6ZSgpIC0tIHJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50
cworCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGJvb2wgZW1wdHkoKSBj
b25zdCBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX3R5cGUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVsbDoKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAvLyBudWxsIHZhbHVlcyBhcmUgZW1wdHkKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBkZWxlZ2F0ZSBjYWxsIHRvIGFycmF5
X3Q6OmVtcHR5KCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV92YWx1ZS5hcnJheS0+ZW1wdHko
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gZGVsZWdhdGUgY2FsbCB0byBvYmplY3Rf
dDo6ZW1wdHkoKQorICAgICAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLm9iamVjdC0+ZW1wdHko
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAvLyBhbGwgb3RoZXIgdHlwZXMgYXJlIG5vbmVtcHR5CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgLyohCisgICAgQGJyaWVmIHJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cworCisg
ICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgSlNPTiB2YWx1ZS4KKworICAg
IEByZXR1cm4gVGhlIHJldHVybiB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBkaWZmZXJlbnQgdHlwZXMg
YW5kIGlzCisgICAgICAgICAgICBkZWZpbmVkIGFzIGZvbGxvd3M6CisgICAgICAgICAgICBWYWx1
ZSB0eXBlICB8IHJldHVybiB2YWx1ZQorICAgICAgICAgICAgLS0tLS0tLS0tLS0gfCAtLS0tLS0t
LS0tLS0tCisgICAgICAgICAgICBudWxsICAgICAgICB8IGAwYAorICAgICAgICAgICAgYm9vbGVh
biAgICAgfCBgMWAKKyAgICAgICAgICAgIHN0cmluZyAgICAgIHwgYDFgCisgICAgICAgICAgICBu
dW1iZXIgICAgICB8IGAxYAorICAgICAgICAgICAgb2JqZWN0ICAgICAgfCByZXN1bHQgb2YgZnVu
Y3Rpb24gb2JqZWN0X3Q6OnNpemUoKQorICAgICAgICAgICAgYXJyYXkgICAgICAgfCByZXN1bHQg
b2YgZnVuY3Rpb24gYXJyYXlfdDo6c2l6ZSgpCisKKyAgICBAbm90ZSBUaGlzIGZ1bmN0aW9uIGRv
ZXMgbm90IHJldHVybiB0aGUgbGVuZ3RoIG9mIGEgc3RyaW5nIHN0b3JlZCBhcyBKU09OCisgICAg
dmFsdWUgLSBpdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIEpTT04gdmFs
dWUgd2hpY2ggaXMgMSBpbgorICAgIHRoZSBjYXNlIG9mIGEgc3RyaW5nLgorCisgICAgQGNvbXBs
ZXhpdHkgQ29uc3RhbnQsIGFzIGxvbmcgYXMgQHJlZiBhcnJheV90IGFuZCBAcmVmIG9iamVjdF90
IHNhdGlzZnkKKyAgICB0aGUgQ29udGFpbmVyIGNvbmNlcHQ7IHRoYXQgaXMsIHRoZWlyIHNpemUo
KSBmdW5jdGlvbnMgaGF2ZSBjb25zdGFudAorICAgIGNvbXBsZXhpdHkuCisKKyAgICBAcmVxdWly
ZW1lbnQgVGhpcyBmdW5jdGlvbiBoZWxwcyBgYmFzaWNfanNvbmAgc2F0aXNmeWluZyB0aGUKKyAg
ICBbQ29udGFpbmVyXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L0Nv
bnRhaW5lcikKKyAgICByZXF1aXJlbWVudHM6CisgICAgLSBUaGUgY29tcGxleGl0eSBpcyBjb25z
dGFudC4KKyAgICAtIEhhcyB0aGUgc2VtYW50aWNzIG9mIGBzdGQ6OmRpc3RhbmNlKGJlZ2luKCks
IGVuZCgpKWAuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIGNhbGxzIGBz
aXplKClgIG9uIHRoZSBkaWZmZXJlbnQgdmFsdWUKKyAgICB0eXBlcy4sc2l6ZX0KKworICAgIEBz
YSBAcmVmIGVtcHR5KCkgLS0gY2hlY2tzIHdoZXRoZXIgdGhlIGNvbnRhaW5lciBpcyBlbXB0eQor
ICAgIEBzYSBAcmVmIG1heF9zaXplKCkgLS0gcmV0dXJucyB0aGUgbWF4aW1hbCBudW1iZXIgb2Yg
ZWxlbWVudHMKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBzaXplX3R5
cGUgc2l6ZSgpIGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAgICBzd2l0Y2ggKG1fdHlwZSkK
KyAgICAgICAgeworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudWxsOgorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIC8vIG51bGwgdmFsdWVzIGFyZSBlbXB0eQorICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6
OmFycmF5OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIGRlbGVnYXRlIGNhbGwg
dG8gYXJyYXlfdDo6c2l6ZSgpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUuYXJyYXkt
PnNpemUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmpl
Y3Q6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gZGVsZWdhdGUgY2FsbCB0byBv
YmplY3RfdDo6c2l6ZSgpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUub2JqZWN0LT5z
aXplKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgLy8gYWxsIG90aGVyIHR5cGVzIGhhdmUgc2l6ZSAxCisgICAg
ICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvKiEKKyAgICBAYnJpZWYgcmV0dXJucyB0aGUgbWF4aW11bSBwb3NzaWJsZSBudW1iZXIg
b2YgZWxlbWVudHMKKworICAgIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRz
IGEgSlNPTiB2YWx1ZSBpcyBhYmxlIHRvIGhvbGQgZHVlIHRvCisgICAgc3lzdGVtIG9yIGxpYnJh
cnkgaW1wbGVtZW50YXRpb24gbGltaXRhdGlvbnMsIGkuZS4gYHN0ZDo6ZGlzdGFuY2UoYmVnaW4o
KSwKKyAgICBlbmQoKSlgIGZvciB0aGUgSlNPTiB2YWx1ZS4KKworICAgIEByZXR1cm4gVGhlIHJl
dHVybiB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBkaWZmZXJlbnQgdHlwZXMgYW5kIGlzCisgICAgICAg
ICAgICBkZWZpbmVkIGFzIGZvbGxvd3M6CisgICAgICAgICAgICBWYWx1ZSB0eXBlICB8IHJldHVy
biB2YWx1ZQorICAgICAgICAgICAgLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tCisgICAgICAg
ICAgICBudWxsICAgICAgICB8IGAwYCAoc2FtZSBhcyBgc2l6ZSgpYCkKKyAgICAgICAgICAgIGJv
b2xlYW4gICAgIHwgYDFgIChzYW1lIGFzIGBzaXplKClgKQorICAgICAgICAgICAgc3RyaW5nICAg
ICAgfCBgMWAgKHNhbWUgYXMgYHNpemUoKWApCisgICAgICAgICAgICBudW1iZXIgICAgICB8IGAx
YCAoc2FtZSBhcyBgc2l6ZSgpYCkKKyAgICAgICAgICAgIG9iamVjdCAgICAgIHwgcmVzdWx0IG9m
IGZ1bmN0aW9uIGBvYmplY3RfdDo6bWF4X3NpemUoKWAKKyAgICAgICAgICAgIGFycmF5ICAgICAg
IHwgcmVzdWx0IG9mIGZ1bmN0aW9uIGBhcnJheV90OjptYXhfc2l6ZSgpYAorCisgICAgQGNvbXBs
ZXhpdHkgQ29uc3RhbnQsIGFzIGxvbmcgYXMgQHJlZiBhcnJheV90IGFuZCBAcmVmIG9iamVjdF90
IHNhdGlzZnkKKyAgICB0aGUgQ29udGFpbmVyIGNvbmNlcHQ7IHRoYXQgaXMsIHRoZWlyIGBtYXhf
c2l6ZSgpYCBmdW5jdGlvbnMgaGF2ZSBjb25zdGFudAorICAgIGNvbXBsZXhpdHkuCisKKyAgICBA
cmVxdWlyZW1lbnQgVGhpcyBmdW5jdGlvbiBoZWxwcyBgYmFzaWNfanNvbmAgc2F0aXNmeWluZyB0
aGUKKyAgICBbQ29udGFpbmVyXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25j
ZXB0L0NvbnRhaW5lcikKKyAgICByZXF1aXJlbWVudHM6CisgICAgLSBUaGUgY29tcGxleGl0eSBp
cyBjb25zdGFudC4KKyAgICAtIEhhcyB0aGUgc2VtYW50aWNzIG9mIHJldHVybmluZyBgYi5zaXpl
KClgIHdoZXJlIGBiYCBpcyB0aGUgbGFyZ2VzdAorICAgICAgcG9zc2libGUgSlNPTiB2YWx1ZS4K
KworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgY2FsbHMgYG1heF9zaXplKClg
IG9uIHRoZSBkaWZmZXJlbnQgdmFsdWUKKyAgICB0eXBlcy4gTm90ZSB0aGUgb3V0cHV0IGlzIGlt
cGxlbWVudGF0aW9uIHNwZWNpZmljLixtYXhfc2l6ZX0KKworICAgIEBzYSBAcmVmIHNpemUoKSAt
LSByZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEu
MC4wCisgICAgKi8KKyAgICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCBub2V4Y2VwdAorICAg
IHsKKyAgICAgICAgc3dpdGNoIChtX3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2Ug
dmFsdWVfdDo6YXJyYXk6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gZGVsZWdh
dGUgY2FsbCB0byBhcnJheV90OjptYXhfc2l6ZSgpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
dmFsdWUuYXJyYXktPm1heF9zaXplKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNh
c2UgdmFsdWVfdDo6b2JqZWN0OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIGRl
bGVnYXRlIGNhbGwgdG8gb2JqZWN0X3Q6Om1heF9zaXplKCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV92YWx1ZS5vYmplY3QtPm1heF9zaXplKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gYWxsIG90aGVy
IHR5cGVzIGhhdmUgbWF4X3NpemUoKSA9PSBzaXplKCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
c2l6ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8vIEB9CisK
KworICAgIC8vLy8vLy8vLy8vLy8vLworICAgIC8vIG1vZGlmaWVycyAvLworICAgIC8vLy8vLy8v
Ly8vLy8vLworCisgICAgLy8vIEBuYW1lIG1vZGlmaWVycworICAgIC8vLyBAeworCisgICAgLyoh
CisgICAgQGJyaWVmIGNsZWFycyB0aGUgY29udGVudHMKKworICAgIENsZWFycyB0aGUgY29udGVu
dCBvZiBhIEpTT04gdmFsdWUgYW5kIHJlc2V0cyBpdCB0byB0aGUgZGVmYXVsdCB2YWx1ZSBhcwor
ICAgIGlmIEByZWYgYmFzaWNfanNvbih2YWx1ZV90KSB3b3VsZCBoYXZlIGJlZW4gY2FsbGVkOgor
CisgICAgVmFsdWUgdHlwZSAgfCBpbml0aWFsIHZhbHVlCisgICAgLS0tLS0tLS0tLS0gfCAtLS0t
LS0tLS0tLS0tCisgICAgbnVsbCAgICAgICAgfCBgbnVsbGAKKyAgICBib29sZWFuICAgICB8IGBm
YWxzZWAKKyAgICBzdHJpbmcgICAgICB8IGAiImAKKyAgICBudW1iZXIgICAgICB8IGAwYAorICAg
IG9iamVjdCAgICAgIHwgYHt9YAorICAgIGFycmF5ICAgICAgIHwgYFtdYAorCisgICAgQG5vdGUg
RmxvYXRpbmctcG9pbnQgbnVtYmVycyBhcmUgc2V0IHRvIGAwLjBgIHdoaWNoIHdpbGwgYmUgc2Vy
aWFsaXplZCB0bworICAgIGAwYC4gVGhlIHZhbGUgdHlwZSByZW1haW5zIEByZWYgbnVtYmVyX2Zs
b2F0X3QuCisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlIEpTT04g
dmFsdWUuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgdGhlIGVm
ZmVjdCBvZiBgY2xlYXIoKWAgdG8gZGlmZmVyZW50CisgICAgSlNPTiB0eXBlcy4sY2xlYXJ9CisK
KyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgdm9pZCBjbGVhcigpIG5vZXhj
ZXB0CisgICAgeworICAgICAgICBzd2l0Y2ggKG1fdHlwZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcjoKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBtX3ZhbHVlLm51bWJlcl9pbnRlZ2VyID0gMDsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfdW5z
aWduZWQ6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV92YWx1ZS5udW1iZXJfdW5z
aWduZWQgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtX3ZhbHVlLm51bWJlcl9mbG9hdCA9IDAuMDsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFu
OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fdmFsdWUuYm9vbGVhbiA9IGZhbHNl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBj
YXNlIHZhbHVlX3Q6OnN0cmluZzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3Zh
bHVlLnN0cmluZy0+Y2xlYXIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBtX3ZhbHVlLmFycmF5LT5jbGVhcigpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLm9iamVjdC0+Y2xlYXIoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBhZGQgYW4gb2JqZWN0
IHRvIGFuIGFycmF5CisKKyAgICBBcHBlbmRzIHRoZSBnaXZlbiBlbGVtZW50IEBhIHZhbCB0byB0
aGUgZW5kIG9mIHRoZSBKU09OIHZhbHVlLiBJZiB0aGUKKyAgICBmdW5jdGlvbiBpcyBjYWxsZWQg
b24gYSBKU09OIG51bGwgdmFsdWUsIGFuIGVtcHR5IGFycmF5IGlzIGNyZWF0ZWQgYmVmb3JlCisg
ICAgYXBwZW5kaW5nIEBhIHZhbC4KKworICAgIEBwYXJhbVtpbl0gdmFsIHRoZSB2YWx1ZSB0byBh
ZGQgdG8gdGhlIEpTT04gYXJyYXkKKworICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciB3aGVu
IGNhbGxlZCBvbiBhIHR5cGUgb3RoZXIgdGhhbiBKU09OIGFycmF5IG9yCisgICAgbnVsbDsgZXhh
bXBsZTogYCJjYW5ub3QgdXNlIHB1c2hfYmFjaygpIHdpdGggbnVtYmVyImAKKworICAgIEBjb21w
bGV4aXR5IEFtb3J0aXplZCBjb25zdGFudC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBs
ZSBzaG93cyBob3cgYHB1c2hfYmFjaygpYCBhbmQgYCs9YCBjYW4gYmUgdXNlZCB0bworICAgIGFk
ZCBlbGVtZW50cyB0byBhIEpTT04gYXJyYXkuIE5vdGUgaG93IHRoZSBgbnVsbGAgdmFsdWUgd2Fz
IHNpbGVudGx5CisgICAgY29udmVydGVkIHRvIGEgSlNPTiBhcnJheS4scHVzaF9iYWNrfQorCisg
ICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIHZvaWQgcHVzaF9iYWNrKGJhc2lj
X2pzb24mJiB2YWwpCisgICAgeworICAgICAgICAvLyBwdXNoX2JhY2sgb25seSB3b3JrcyBmb3Ig
bnVsbCBvYmplY3RzIG9yIGFycmF5cworICAgICAgICBpZiAobm90KGlzX251bGwoKSBvciBpc19h
cnJheSgpKSkKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+
KCJjYW5ub3QgdXNlIHB1c2hfYmFjaygpIHdpdGggIiArIHR5cGVfbmFtZSgpKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIHRyYW5zZm9ybSBudWxsIG9iamVjdCBpbnRvIGFuIGFycmF5CisgICAg
ICAgIGlmIChpc19udWxsKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fdHlwZSA9IHZhbHVl
X3Q6OmFycmF5OworICAgICAgICAgICAgbV92YWx1ZSA9IHZhbHVlX3Q6OmFycmF5OworICAgICAg
ICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gYWRkIGVs
ZW1lbnQgdG8gYXJyYXkgKG1vdmUgc2VtYW50aWNzKQorICAgICAgICBtX3ZhbHVlLmFycmF5LT5w
dXNoX2JhY2soc3RkOjptb3ZlKHZhbCkpOworICAgICAgICAvLyBpbnZhbGlkYXRlIG9iamVjdAor
ICAgICAgICB2YWwubV90eXBlID0gdmFsdWVfdDo6bnVsbDsKKyAgICB9CisKKyAgICAvKiEKKyAg
ICBAYnJpZWYgYWRkIGFuIG9iamVjdCB0byBhbiBhcnJheQorICAgIEBjb3B5ZG9jIHB1c2hfYmFj
ayhiYXNpY19qc29uJiYpCisgICAgKi8KKyAgICByZWZlcmVuY2Ugb3BlcmF0b3IrPShiYXNpY19q
c29uJiYgdmFsKQorICAgIHsKKyAgICAgICAgcHVzaF9iYWNrKHN0ZDo6bW92ZSh2YWwpKTsKKyAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBhZGQgYW4g
b2JqZWN0IHRvIGFuIGFycmF5CisgICAgQGNvcHlkb2MgcHVzaF9iYWNrKGJhc2ljX2pzb24mJikK
KyAgICAqLworICAgIHZvaWQgcHVzaF9iYWNrKGNvbnN0IGJhc2ljX2pzb24mIHZhbCkKKyAgICB7
CisgICAgICAgIC8vIHB1c2hfYmFjayBvbmx5IHdvcmtzIGZvciBudWxsIG9iamVjdHMgb3IgYXJy
YXlzCisgICAgICAgIGlmIChub3QoaXNfbnVsbCgpIG9yIGlzX2FycmF5KCkpKQorICAgICAgICB7
CisgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oImNhbm5vdCB1c2UgcHVzaF9i
YWNrKCkgd2l0aCAiICsgdHlwZV9uYW1lKCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gdHJh
bnNmb3JtIG51bGwgb2JqZWN0IGludG8gYW4gYXJyYXkKKyAgICAgICAgaWYgKGlzX251bGwoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgbV90eXBlID0gdmFsdWVfdDo6YXJyYXk7CisgICAgICAg
ICAgICBtX3ZhbHVlID0gdmFsdWVfdDo6YXJyYXk7CisgICAgICAgICAgICBhc3NlcnRfaW52YXJp
YW50KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBhZGQgZWxlbWVudCB0byBhcnJheQorICAg
ICAgICBtX3ZhbHVlLmFycmF5LT5wdXNoX2JhY2sodmFsKTsKKyAgICB9CisKKyAgICAvKiEKKyAg
ICBAYnJpZWYgYWRkIGFuIG9iamVjdCB0byBhbiBhcnJheQorICAgIEBjb3B5ZG9jIHB1c2hfYmFj
ayhiYXNpY19qc29uJiYpCisgICAgKi8KKyAgICByZWZlcmVuY2Ugb3BlcmF0b3IrPShjb25zdCBi
YXNpY19qc29uJiB2YWwpCisgICAgeworICAgICAgICBwdXNoX2JhY2sodmFsKTsKKyAgICAgICAg
cmV0dXJuICp0aGlzOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBhZGQgYW4gb2JqZWN0
IHRvIGFuIG9iamVjdAorCisgICAgSW5zZXJ0cyB0aGUgZ2l2ZW4gZWxlbWVudCBAYSB2YWwgdG8g
dGhlIEpTT04gb2JqZWN0LiBJZiB0aGUgZnVuY3Rpb24gaXMKKyAgICBjYWxsZWQgb24gYSBKU09O
IG51bGwgdmFsdWUsIGFuIGVtcHR5IG9iamVjdCBpcyBjcmVhdGVkIGJlZm9yZSBpbnNlcnRpbmcK
KyAgICBAYSB2YWwuCisKKyAgICBAcGFyYW1baW5dIHZhbCB0aGUgdmFsdWUgdG8gYWRkIHRvIHRo
ZSBKU09OIG9iamVjdAorCisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIHdoZW4gY2FsbGVk
IG9uIGEgdHlwZSBvdGhlciB0aGFuIEpTT04gb2JqZWN0IG9yCisgICAgbnVsbDsgZXhhbXBsZTog
YCJjYW5ub3QgdXNlIHB1c2hfYmFjaygpIHdpdGggbnVtYmVyImAKKworICAgIEBjb21wbGV4aXR5
IExvZ2FyaXRobWljIGluIHRoZSBzaXplIG9mIHRoZSBjb250YWluZXIsIE8obG9nKGBzaXplKClg
KSkuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgc2hvd3MgaG93IGBwdXNoX2JhY2so
KWAgYW5kIGArPWAgY2FuIGJlIHVzZWQgdG8KKyAgICBhZGQgZWxlbWVudHMgdG8gYSBKU09OIG9i
amVjdC4gTm90ZSBob3cgdGhlIGBudWxsYCB2YWx1ZSB3YXMgc2lsZW50bHkKKyAgICBjb252ZXJ0
ZWQgdG8gYSBKU09OIG9iamVjdC4scHVzaF9iYWNrX19vYmplY3RfdF9fdmFsdWV9CisKKyAgICBA
c2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgdm9pZCBwdXNoX2JhY2soY29uc3QgdHlw
ZW5hbWUgb2JqZWN0X3Q6OnZhbHVlX3R5cGUmIHZhbCkKKyAgICB7CisgICAgICAgIC8vIHB1c2hf
YmFjayBvbmx5IHdvcmtzIGZvciBudWxsIG9iamVjdHMgb3Igb2JqZWN0cworICAgICAgICBpZiAo
bm90KGlzX251bGwoKSBvciBpc19vYmplY3QoKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRo
cm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fubm90IHVzZSBwdXNoX2JhY2soKSB3aXRoICIgKyB0
eXBlX25hbWUoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyB0cmFuc2Zvcm0gbnVsbCBvYmpl
Y3QgaW50byBhbiBvYmplY3QKKyAgICAgICAgaWYgKGlzX251bGwoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbV90eXBlID0gdmFsdWVfdDo6b2JqZWN0OworICAgICAgICAgICAgbV92YWx1ZSA9
IHZhbHVlX3Q6Om9iamVjdDsKKyAgICAgICAgICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIGFkZCBlbGVtZW50IHRvIGFycmF5CisgICAgICAgIG1fdmFsdWUu
b2JqZWN0LT5pbnNlcnQodmFsKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgYWRkIGFu
IG9iamVjdCB0byBhbiBvYmplY3QKKyAgICBAY29weWRvYyBwdXNoX2JhY2soY29uc3QgdHlwZW5h
bWUgb2JqZWN0X3Q6OnZhbHVlX3R5cGUmKQorICAgICovCisgICAgcmVmZXJlbmNlIG9wZXJhdG9y
Kz0oY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OnZhbHVlX3R5cGUmIHZhbCkKKyAgICB7CisgICAg
ICAgIHB1c2hfYmFjayh2YWwpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAg
LyohCisgICAgQGJyaWVmIGFkZCBhbiBvYmplY3QgdG8gYW4gb2JqZWN0CisKKyAgICBUaGlzIGZ1
bmN0aW9uIGFsbG93cyB0byB1c2UgYHB1c2hfYmFja2Agd2l0aCBhbiBpbml0aWFsaXplciBsaXN0
LiBJbiBjYXNlCisKKyAgICAxLiB0aGUgY3VycmVudCB2YWx1ZSBpcyBhbiBvYmplY3QsCisgICAg
Mi4gdGhlIGluaXRpYWxpemVyIGxpc3QgQGEgaW5pdCBjb250YWlucyBvbmx5IHR3byBlbGVtZW50
cywgYW5kCisgICAgMy4gdGhlIGZpcnN0IGVsZW1lbnQgb2YgQGEgaW5pdCBpcyBhIHN0cmluZywK
KworICAgIEBhIGluaXQgaXMgY29udmVydGVkIGludG8gYW4gb2JqZWN0IGVsZW1lbnQgYW5kIGFk
ZGVkIHVzaW5nCisgICAgQHJlZiBwdXNoX2JhY2soY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OnZh
bHVlX3R5cGUmKS4gT3RoZXJ3aXNlLCBAYSBpbml0CisgICAgaXMgY29udmVydGVkIHRvIGEgSlNP
TiB2YWx1ZSBhbmQgYWRkZWQgdXNpbmcgQHJlZiBwdXNoX2JhY2soYmFzaWNfanNvbiYmKS4KKwor
ICAgIEBwYXJhbSBpbml0ICBhbiBpbml0aWFsaXplciBsaXN0CisKKyAgICBAY29tcGxleGl0eSBM
aW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlIGluaXRpYWxpemVyIGxpc3QgQGEgaW5pdC4KKworICAg
IEBub3RlIFRoaXMgZnVuY3Rpb24gaXMgcmVxdWlyZWQgdG8gcmVzb2x2ZSBhbiBhbWJpZ3VvdXMg
b3ZlcmxvYWQgZXJyb3IsCisgICAgICAgICAgYmVjYXVzZSBwYWlycyBsaWtlIGB7ImtleSIsICJ2
YWx1ZSJ9YCBjYW4gYmUgYm90aCBpbnRlcnByZXRlZCBhcworICAgICAgICAgIGBvYmplY3RfdDo6
dmFsdWVfdHlwZWAgb3IgYHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxiYXNpY19qc29uPmAsIHNlZQor
ICAgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9ubG9obWFubi9qc29uL2lzc3Vlcy8yMzUgZm9y
IG1vcmUgaW5mb3JtYXRpb24uCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgc2hvd3Mg
aG93IGluaXRpYWxpemVyIGxpc3RzIGFyZSB0cmVhdGVkIGFzCisgICAgb2JqZWN0cyB3aGVuIHBv
c3NpYmxlLixwdXNoX2JhY2tfX2luaXRpYWxpemVyX2xpc3R9CisgICAgKi8KKyAgICB2b2lkIHB1
c2hfYmFjayhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8YmFzaWNfanNvbj4gaW5pdCkKKyAgICB7Cisg
ICAgICAgIGlmIChpc19vYmplY3QoKSBhbmQgaW5pdC5zaXplKCkgPT0gMiBhbmQgaW5pdC5iZWdp
bigpLT5pc19zdHJpbmcoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3Qgc3RyaW5nX3Qg
a2V5ID0gKmluaXQuYmVnaW4oKTsKKyAgICAgICAgICAgIHB1c2hfYmFjayh0eXBlbmFtZSBvYmpl
Y3RfdDo6dmFsdWVfdHlwZShrZXksICooaW5pdC5iZWdpbigpICsgMSkpKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHB1c2hfYmFjayhiYXNpY19qc29u
KGluaXQpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBhZGQgYW4g
b2JqZWN0IHRvIGFuIG9iamVjdAorICAgIEBjb3B5ZG9jIHB1c2hfYmFjayhzdGQ6OmluaXRpYWxp
emVyX2xpc3Q8YmFzaWNfanNvbj4pCisgICAgKi8KKyAgICByZWZlcmVuY2Ugb3BlcmF0b3IrPShz
dGQ6OmluaXRpYWxpemVyX2xpc3Q8YmFzaWNfanNvbj4gaW5pdCkKKyAgICB7CisgICAgICAgIHB1
c2hfYmFjayhpbml0KTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIC8qIQor
ICAgIEBicmllZiBpbnNlcnRzIGVsZW1lbnQKKworICAgIEluc2VydHMgZWxlbWVudCBAYSB2YWwg
YmVmb3JlIGl0ZXJhdG9yIEBhIHBvcy4KKworICAgIEBwYXJhbVtpbl0gcG9zIGl0ZXJhdG9yIGJl
Zm9yZSB3aGljaCB0aGUgY29udGVudCB3aWxsIGJlIGluc2VydGVkOyBtYXkgYmUKKyAgICB0aGUg
ZW5kKCkgaXRlcmF0b3IKKyAgICBAcGFyYW1baW5dIHZhbCBlbGVtZW50IHRvIGluc2VydAorICAg
IEByZXR1cm4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGluc2VydGVkIEBhIHZhbC4KKworICAg
IEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBjYWxsZWQgb24gSlNPTiB2YWx1ZXMgb3RoZXIg
dGhhbiBhcnJheXM7CisgICAgZXhhbXBsZTogYCJjYW5ub3QgdXNlIGluc2VydCgpIHdpdGggc3Ry
aW5nImAKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgQGEgcG9zIGlzIG5vdCBhbiBp
dGVyYXRvciBvZiAqdGhpczsgZXhhbXBsZToKKyAgICBgIml0ZXJhdG9yIGRvZXMgbm90IGZpdCBj
dXJyZW50IHZhbHVlImAKKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50IHBsdXMgbGluZWFyIGlu
IHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHBvcyBhbmQgZW5kIG9mIHRoZQorICAgIGNvbnRhaW5lci4K
KworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBzaG93cyBob3cgYGluc2VydCgpYCBpcyB1
c2VkLixpbnNlcnR9CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgaXRl
cmF0b3IgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIHBvcywgY29uc3QgYmFzaWNfanNvbiYgdmFsKQor
ICAgIHsKKyAgICAgICAgLy8gaW5zZXJ0IG9ubHkgd29ya3MgZm9yIGFycmF5cworICAgICAgICBp
ZiAoaXNfYXJyYXkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gY2hlY2sgaWYgaXRlcmF0
b3IgcG9zIGZpdHMgdG8gdGhpcyBKU09OIHZhbHVlCisgICAgICAgICAgICBpZiAocG9zLm1fb2Jq
ZWN0ICE9IHRoaXMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjpk
b21haW5fZXJyb3I+KCJpdGVyYXRvciBkb2VzIG5vdCBmaXQgY3VycmVudCB2YWx1ZSIpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBpbnNlcnQgdG8gYXJyYXkgYW5kIHJldHVybiBp
dGVyYXRvcgorICAgICAgICAgICAgaXRlcmF0b3IgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAg
cmVzdWx0Lm1faXQuYXJyYXlfaXRlcmF0b3IgPSBtX3ZhbHVlLmFycmF5LT5pbnNlcnQocG9zLm1f
aXQuYXJyYXlfaXRlcmF0b3IsIHZhbCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3c8c3RkOjpk
b21haW5fZXJyb3I+KCJjYW5ub3QgdXNlIGluc2VydCgpIHdpdGggIiArIHR5cGVfbmFtZSgpKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBpbnNlcnRzIGVsZW1lbnQK
KyAgICBAY29weWRvYyBpbnNlcnQoY29uc3RfaXRlcmF0b3IsIGNvbnN0IGJhc2ljX2pzb24mKQor
ICAgICovCisgICAgaXRlcmF0b3IgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIHBvcywgYmFzaWNfanNv
biYmIHZhbCkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnNlcnQocG9zLCB2YWwpOworICAgIH0K
KworICAgIC8qIQorICAgIEBicmllZiBpbnNlcnRzIGVsZW1lbnRzCisKKyAgICBJbnNlcnRzIEBh
IGNudCBjb3BpZXMgb2YgQGEgdmFsIGJlZm9yZSBpdGVyYXRvciBAYSBwb3MuCisKKyAgICBAcGFy
YW1baW5dIHBvcyBpdGVyYXRvciBiZWZvcmUgd2hpY2ggdGhlIGNvbnRlbnQgd2lsbCBiZSBpbnNl
cnRlZDsgbWF5IGJlCisgICAgdGhlIGVuZCgpIGl0ZXJhdG9yCisgICAgQHBhcmFtW2luXSBjbnQg
bnVtYmVyIG9mIGNvcGllcyBvZiBAYSB2YWwgdG8gaW5zZXJ0CisgICAgQHBhcmFtW2luXSB2YWwg
ZWxlbWVudCB0byBpbnNlcnQKKyAgICBAcmV0dXJuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBm
aXJzdCBlbGVtZW50IGluc2VydGVkLCBvciBAYSBwb3MgaWYKKyAgICBgY250PT0wYAorCisgICAg
QHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIGNhbGxlZCBvbiBKU09OIHZhbHVlcyBvdGhlciB0
aGFuIGFycmF5czsKKyAgICBleGFtcGxlOiBgImNhbm5vdCB1c2UgaW5zZXJ0KCkgd2l0aCBzdHJp
bmciYAorICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBAYSBwb3MgaXMgbm90IGFuIGl0
ZXJhdG9yIG9mICp0aGlzOyBleGFtcGxlOgorICAgIGAiaXRlcmF0b3IgZG9lcyBub3QgZml0IGN1
cnJlbnQgdmFsdWUiYAorCisgICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIEBhIGNudCBwbHVzIGxp
bmVhciBpbiB0aGUgZGlzdGFuY2UgYmV0d2VlbiBAYSBwb3MKKyAgICBhbmQgZW5kIG9mIHRoZSBj
b250YWluZXIuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgc2hvd3MgaG93IGBpbnNl
cnQoKWAgaXMgdXNlZC4saW5zZXJ0X19jb3VudH0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4w
CisgICAgKi8KKyAgICBpdGVyYXRvciBpbnNlcnQoY29uc3RfaXRlcmF0b3IgcG9zLCBzaXplX3R5
cGUgY250LCBjb25zdCBiYXNpY19qc29uJiB2YWwpCisgICAgeworICAgICAgICAvLyBpbnNlcnQg
b25seSB3b3JrcyBmb3IgYXJyYXlzCisgICAgICAgIGlmIChpc19hcnJheSgpKQorICAgICAgICB7
CisgICAgICAgICAgICAvLyBjaGVjayBpZiBpdGVyYXRvciBwb3MgZml0cyB0byB0aGlzIEpTT04g
dmFsdWUKKyAgICAgICAgICAgIGlmIChwb3MubV9vYmplY3QgIT0gdGhpcykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oIml0ZXJhdG9yIGRv
ZXMgbm90IGZpdCBjdXJyZW50IHZhbHVlIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIGluc2VydCB0byBhcnJheSBhbmQgcmV0dXJuIGl0ZXJhdG9yCisgICAgICAgICAgICBpdGVy
YXRvciByZXN1bHQodGhpcyk7CisgICAgICAgICAgICByZXN1bHQubV9pdC5hcnJheV9pdGVyYXRv
ciA9IG1fdmFsdWUuYXJyYXktPmluc2VydChwb3MubV9pdC5hcnJheV9pdGVyYXRvciwgY250LCB2
YWwpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fubm90
IHVzZSBpbnNlcnQoKSB3aXRoICIgKyB0eXBlX25hbWUoKSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvKiEKKyAgICBAYnJpZWYgaW5zZXJ0cyBlbGVtZW50cworCisgICAgSW5zZXJ0cyBlbGVt
ZW50cyBmcm9tIHJhbmdlIGBbZmlyc3QsIGxhc3QpYCBiZWZvcmUgaXRlcmF0b3IgQGEgcG9zLgor
CisgICAgQHBhcmFtW2luXSBwb3MgaXRlcmF0b3IgYmVmb3JlIHdoaWNoIHRoZSBjb250ZW50IHdp
bGwgYmUgaW5zZXJ0ZWQ7IG1heSBiZQorICAgIHRoZSBlbmQoKSBpdGVyYXRvcgorICAgIEBwYXJh
bVtpbl0gZmlyc3QgYmVnaW4gb2YgdGhlIHJhbmdlIG9mIGVsZW1lbnRzIHRvIGluc2VydAorICAg
IEBwYXJhbVtpbl0gbGFzdCBlbmQgb2YgdGhlIHJhbmdlIG9mIGVsZW1lbnRzIHRvIGluc2VydAor
CisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIGNhbGxlZCBvbiBKU09OIHZhbHVlcyBv
dGhlciB0aGFuIGFycmF5czsKKyAgICBleGFtcGxlOiBgImNhbm5vdCB1c2UgaW5zZXJ0KCkgd2l0
aCBzdHJpbmciYAorICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBAYSBwb3MgaXMgbm90
IGFuIGl0ZXJhdG9yIG9mICp0aGlzOyBleGFtcGxlOgorICAgIGAiaXRlcmF0b3IgZG9lcyBub3Qg
Zml0IGN1cnJlbnQgdmFsdWUiYAorICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBAYSBm
aXJzdCBhbmQgQGEgbGFzdCBkbyBub3QgYmVsb25nIHRvIHRoZSBzYW1lCisgICAgSlNPTiB2YWx1
ZTsgZXhhbXBsZTogYCJpdGVyYXRvcnMgZG8gbm90IGZpdCJgCisgICAgQHRocm93IHN0ZDo6ZG9t
YWluX2Vycm9yIGlmIEBhIGZpcnN0IG9yIEBhIGxhc3QgYXJlIGl0ZXJhdG9ycyBpbnRvCisgICAg
Y29udGFpbmVyIGZvciB3aGljaCBpbnNlcnQgaXMgY2FsbGVkOyBleGFtcGxlOiBgInBhc3NlZCBp
dGVyYXRvcnMgbWF5IG5vdAorICAgIGJlbG9uZyB0byBjb250YWluZXIiYAorCisgICAgQHJldHVy
biBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZmlyc3QgZWxlbWVudCBpbnNlcnRlZCwgb3IgQGEg
cG9zIGlmCisgICAgYGZpcnN0PT1sYXN0YAorCisgICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIGBz
dGQ6OmRpc3RhbmNlKGZpcnN0LCBsYXN0KWAgcGx1cyBsaW5lYXIgaW4gdGhlCisgICAgZGlzdGFu
Y2UgYmV0d2VlbiBAYSBwb3MgYW5kIGVuZCBvZiB0aGUgY29udGFpbmVyLgorCisgICAgQGxpdmVl
eGFtcGxle1RoZSBleGFtcGxlIHNob3dzIGhvdyBgaW5zZXJ0KClgIGlzIHVzZWQuLGluc2VydF9f
cmFuZ2V9CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgaXRlcmF0b3Ig
aW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIHBvcywgY29uc3RfaXRlcmF0b3IgZmlyc3QsIGNvbnN0X2l0
ZXJhdG9yIGxhc3QpCisgICAgeworICAgICAgICAvLyBpbnNlcnQgb25seSB3b3JrcyBmb3IgYXJy
YXlzCisgICAgICAgIGlmIChub3QgaXNfYXJyYXkoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
VGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJjYW5ub3QgdXNlIGluc2VydCgpIHdpdGggIiArIHR5
cGVfbmFtZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGNoZWNrIGlmIGl0ZXJhdG9yIHBv
cyBmaXRzIHRvIHRoaXMgSlNPTiB2YWx1ZQorICAgICAgICBpZiAocG9zLm1fb2JqZWN0ICE9IHRo
aXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiaXRl
cmF0b3IgZG9lcyBub3QgZml0IGN1cnJlbnQgdmFsdWUiKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIGNoZWNrIGlmIHJhbmdlIGl0ZXJhdG9ycyBiZWxvbmcgdG8gdGhlIHNhbWUgSlNPTiBvYmpl
Y3QKKyAgICAgICAgaWYgKGZpcnN0Lm1fb2JqZWN0ICE9IGxhc3QubV9vYmplY3QpCisgICAgICAg
IHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiaXRlcmF0b3JzIGRvIG5v
dCBmaXQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmaXJzdC5tX29iamVjdCA9PSB0aGlz
IG9yIGxhc3QubV9vYmplY3QgPT0gdGhpcykKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3c8
c3RkOjpkb21haW5fZXJyb3I+KCJwYXNzZWQgaXRlcmF0b3JzIG1heSBub3QgYmVsb25nIHRvIGNv
bnRhaW5lciIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gaW5zZXJ0IHRvIGFycmF5IGFuZCBy
ZXR1cm4gaXRlcmF0b3IKKyAgICAgICAgaXRlcmF0b3IgcmVzdWx0KHRoaXMpOworICAgICAgICBy
ZXN1bHQubV9pdC5hcnJheV9pdGVyYXRvciA9IG1fdmFsdWUuYXJyYXktPmluc2VydCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zLm1faXQuYXJyYXlfaXRlcmF0
b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Lm1faXQu
YXJyYXlfaXRlcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxhc3QubV9pdC5hcnJheV9pdGVyYXRvcik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgLyohCisgICAgQGJyaWVmIGluc2VydHMgZWxlbWVudHMKKworICAgIEluc2VydHMg
ZWxlbWVudHMgZnJvbSBpbml0aWFsaXplciBsaXN0IEBhIGlsaXN0IGJlZm9yZSBpdGVyYXRvciBA
YSBwb3MuCisKKyAgICBAcGFyYW1baW5dIHBvcyBpdGVyYXRvciBiZWZvcmUgd2hpY2ggdGhlIGNv
bnRlbnQgd2lsbCBiZSBpbnNlcnRlZDsgbWF5IGJlCisgICAgdGhlIGVuZCgpIGl0ZXJhdG9yCisg
ICAgQHBhcmFtW2luXSBpbGlzdCBpbml0aWFsaXplciBsaXN0IHRvIGluc2VydCB0aGUgdmFsdWVz
IGZyb20KKworICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBjYWxsZWQgb24gSlNPTiB2
YWx1ZXMgb3RoZXIgdGhhbiBhcnJheXM7CisgICAgZXhhbXBsZTogYCJjYW5ub3QgdXNlIGluc2Vy
dCgpIHdpdGggc3RyaW5nImAKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgQGEgcG9z
IGlzIG5vdCBhbiBpdGVyYXRvciBvZiAqdGhpczsgZXhhbXBsZToKKyAgICBgIml0ZXJhdG9yIGRv
ZXMgbm90IGZpdCBjdXJyZW50IHZhbHVlImAKKworICAgIEByZXR1cm4gaXRlcmF0b3IgcG9pbnRp
bmcgdG8gdGhlIGZpcnN0IGVsZW1lbnQgaW5zZXJ0ZWQsIG9yIEBhIHBvcyBpZgorICAgIGBpbGlz
dGAgaXMgZW1wdHkKKworICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiBgaWxpc3Quc2l6ZSgpYCBw
bHVzIGxpbmVhciBpbiB0aGUgZGlzdGFuY2UgYmV0d2VlbgorICAgIEBhIHBvcyBhbmQgZW5kIG9m
IHRoZSBjb250YWluZXIuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgc2hvd3MgaG93
IGBpbnNlcnQoKWAgaXMgdXNlZC4saW5zZXJ0X19pbGlzdH0KKworICAgIEBzaW5jZSB2ZXJzaW9u
IDEuMC4wCisgICAgKi8KKyAgICBpdGVyYXRvciBpbnNlcnQoY29uc3RfaXRlcmF0b3IgcG9zLCBz
dGQ6OmluaXRpYWxpemVyX2xpc3Q8YmFzaWNfanNvbj4gaWxpc3QpCisgICAgeworICAgICAgICAv
LyBpbnNlcnQgb25seSB3b3JrcyBmb3IgYXJyYXlzCisgICAgICAgIGlmIChub3QgaXNfYXJyYXko
KSkKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJjYW5u
b3QgdXNlIGluc2VydCgpIHdpdGggIiArIHR5cGVfbmFtZSgpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIGNoZWNrIGlmIGl0ZXJhdG9yIHBvcyBmaXRzIHRvIHRoaXMgSlNPTiB2YWx1ZQorICAg
ICAgICBpZiAocG9zLm1fb2JqZWN0ICE9IHRoaXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRo
cm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiaXRlcmF0b3IgZG9lcyBub3QgZml0IGN1cnJlbnQgdmFs
dWUiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGluc2VydCB0byBhcnJheSBhbmQgcmV0dXJu
IGl0ZXJhdG9yCisgICAgICAgIGl0ZXJhdG9yIHJlc3VsdCh0aGlzKTsKKyAgICAgICAgcmVzdWx0
Lm1faXQuYXJyYXlfaXRlcmF0b3IgPSBtX3ZhbHVlLmFycmF5LT5pbnNlcnQocG9zLm1faXQuYXJy
YXlfaXRlcmF0b3IsIGlsaXN0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICAvKiEKKyAgICBAYnJpZWYgZXhjaGFuZ2VzIHRoZSB2YWx1ZXMKKworICAgIEV4Y2hhbmdlcyB0
aGUgY29udGVudHMgb2YgdGhlIEpTT04gdmFsdWUgd2l0aCB0aG9zZSBvZiBAYSBvdGhlci4gRG9l
cyBub3QKKyAgICBpbnZva2UgYW55IG1vdmUsIGNvcHksIG9yIHN3YXAgb3BlcmF0aW9ucyBvbiBp
bmRpdmlkdWFsIGVsZW1lbnRzLiBBbGwKKyAgICBpdGVyYXRvcnMgYW5kIHJlZmVyZW5jZXMgcmVt
YWluIHZhbGlkLiBUaGUgcGFzdC10aGUtZW5kIGl0ZXJhdG9yIGlzCisgICAgaW52YWxpZGF0ZWQu
CisKKyAgICBAcGFyYW1baW4sb3V0XSBvdGhlciBKU09OIHZhbHVlIHRvIGV4Y2hhbmdlIHRoZSBj
b250ZW50cyB3aXRoCisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEBsaXZlZXhh
bXBsZXtUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyBob3cgSlNPTiB2YWx1ZXMgY2FuIGJlIHN3YXBw
ZWQgd2l0aAorICAgIGBzd2FwKClgLixzd2FwX19yZWZlcmVuY2V9CisKKyAgICBAc2luY2UgdmVy
c2lvbiAxLjAuMAorICAgICovCisgICAgdm9pZCBzd2FwKHJlZmVyZW5jZSBvdGhlcikgbm9leGNl
cHQgKAorICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPHZhbHVlX3Q+
Ojp2YWx1ZSBhbmQKKyAgICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTx2YWx1
ZV90Pjo6dmFsdWUgYW5kCisgICAgICAgIHN0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGli
bGU8anNvbl92YWx1ZT46OnZhbHVlIGFuZAorICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9h
c3NpZ25hYmxlPGpzb25fdmFsdWU+Ojp2YWx1ZQorICAgICkKKyAgICB7CisgICAgICAgIHN0ZDo6
c3dhcChtX3R5cGUsIG90aGVyLm1fdHlwZSk7CisgICAgICAgIHN0ZDo6c3dhcChtX3ZhbHVlLCBv
dGhlci5tX3ZhbHVlKTsKKyAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOworICAgIH0KKworICAg
IC8qIQorICAgIEBicmllZiBleGNoYW5nZXMgdGhlIHZhbHVlcworCisgICAgRXhjaGFuZ2VzIHRo
ZSBjb250ZW50cyBvZiBhIEpTT04gYXJyYXkgd2l0aCB0aG9zZSBvZiBAYSBvdGhlci4gRG9lcyBu
b3QKKyAgICBpbnZva2UgYW55IG1vdmUsIGNvcHksIG9yIHN3YXAgb3BlcmF0aW9ucyBvbiBpbmRp
dmlkdWFsIGVsZW1lbnRzLiBBbGwKKyAgICBpdGVyYXRvcnMgYW5kIHJlZmVyZW5jZXMgcmVtYWlu
IHZhbGlkLiBUaGUgcGFzdC10aGUtZW5kIGl0ZXJhdG9yIGlzCisgICAgaW52YWxpZGF0ZWQuCisK
KyAgICBAcGFyYW1baW4sb3V0XSBvdGhlciBhcnJheSB0byBleGNoYW5nZSB0aGUgY29udGVudHMg
d2l0aAorCisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIHdoZW4gSlNPTiB2YWx1ZSBpcyBu
b3QgYW4gYXJyYXk7IGV4YW1wbGU6IGAiY2Fubm90CisgICAgdXNlIHN3YXAoKSB3aXRoIHN0cmlu
ZyJgCisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUg
ZXhhbXBsZSBiZWxvdyBzaG93cyBob3cgYXJyYXlzIGNhbiBiZSBzd2FwcGVkIHdpdGgKKyAgICBg
c3dhcCgpYC4sc3dhcF9fYXJyYXlfdH0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAg
Ki8KKyAgICB2b2lkIHN3YXAoYXJyYXlfdCYgb3RoZXIpCisgICAgeworICAgICAgICAvLyBzd2Fw
IG9ubHkgd29ya3MgZm9yIGFycmF5cworICAgICAgICBpZiAoaXNfYXJyYXkoKSkKKyAgICAgICAg
eworICAgICAgICAgICAgc3RkOjpzd2FwKCoobV92YWx1ZS5hcnJheSksIG90aGVyKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9t
YWluX2Vycm9yPigiY2Fubm90IHVzZSBzd2FwKCkgd2l0aCAiICsgdHlwZV9uYW1lKCkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGV4Y2hhbmdlcyB0aGUgdmFsdWVz
CisKKyAgICBFeGNoYW5nZXMgdGhlIGNvbnRlbnRzIG9mIGEgSlNPTiBvYmplY3Qgd2l0aCB0aG9z
ZSBvZiBAYSBvdGhlci4gRG9lcyBub3QKKyAgICBpbnZva2UgYW55IG1vdmUsIGNvcHksIG9yIHN3
YXAgb3BlcmF0aW9ucyBvbiBpbmRpdmlkdWFsIGVsZW1lbnRzLiBBbGwKKyAgICBpdGVyYXRvcnMg
YW5kIHJlZmVyZW5jZXMgcmVtYWluIHZhbGlkLiBUaGUgcGFzdC10aGUtZW5kIGl0ZXJhdG9yIGlz
CisgICAgaW52YWxpZGF0ZWQuCisKKyAgICBAcGFyYW1baW4sb3V0XSBvdGhlciBvYmplY3QgdG8g
ZXhjaGFuZ2UgdGhlIGNvbnRlbnRzIHdpdGgKKworICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJv
ciB3aGVuIEpTT04gdmFsdWUgaXMgbm90IGFuIG9iamVjdDsgZXhhbXBsZToKKyAgICBgImNhbm5v
dCB1c2Ugc3dhcCgpIHdpdGggc3RyaW5nImAKKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50Lgor
CisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyBvYmplY3RzIGNh
biBiZSBzd2FwcGVkIHdpdGgKKyAgICBgc3dhcCgpYC4sc3dhcF9fb2JqZWN0X3R9CisKKyAgICBA
c2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgdm9pZCBzd2FwKG9iamVjdF90JiBvdGhl
cikKKyAgICB7CisgICAgICAgIC8vIHN3YXAgb25seSB3b3JrcyBmb3Igb2JqZWN0cworICAgICAg
ICBpZiAoaXNfb2JqZWN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0ZDo6c3dhcCgqKG1f
dmFsdWUub2JqZWN0KSwgb3RoZXIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJjYW5ub3QgdXNlIHN3YXAo
KSB3aXRoICIgKyB0eXBlX25hbWUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiEKKyAg
ICBAYnJpZWYgZXhjaGFuZ2VzIHRoZSB2YWx1ZXMKKworICAgIEV4Y2hhbmdlcyB0aGUgY29udGVu
dHMgb2YgYSBKU09OIHN0cmluZyB3aXRoIHRob3NlIG9mIEBhIG90aGVyLiBEb2VzIG5vdAorICAg
IGludm9rZSBhbnkgbW92ZSwgY29weSwgb3Igc3dhcCBvcGVyYXRpb25zIG9uIGluZGl2aWR1YWwg
ZWxlbWVudHMuIEFsbAorICAgIGl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcyByZW1haW4gdmFsaWQu
IFRoZSBwYXN0LXRoZS1lbmQgaXRlcmF0b3IgaXMKKyAgICBpbnZhbGlkYXRlZC4KKworICAgIEBw
YXJhbVtpbixvdXRdIG90aGVyIHN0cmluZyB0byBleGNoYW5nZSB0aGUgY29udGVudHMgd2l0aAor
CisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIHdoZW4gSlNPTiB2YWx1ZSBpcyBub3QgYSBz
dHJpbmc7IGV4YW1wbGU6IGAiY2Fubm90CisgICAgdXNlIHN3YXAoKSB3aXRoIGJvb2xlYW4iYAor
CisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1w
bGUgYmVsb3cgc2hvd3MgaG93IHN0cmluZ3MgY2FuIGJlIHN3YXBwZWQgd2l0aAorICAgIGBzd2Fw
KClgLixzd2FwX19zdHJpbmdfdH0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8K
KyAgICB2b2lkIHN3YXAoc3RyaW5nX3QmIG90aGVyKQorICAgIHsKKyAgICAgICAgLy8gc3dhcCBv
bmx5IHdvcmtzIGZvciBzdHJpbmdzCisgICAgICAgIGlmIChpc19zdHJpbmcoKSkKKyAgICAgICAg
eworICAgICAgICAgICAgc3RkOjpzd2FwKCoobV92YWx1ZS5zdHJpbmcpLCBvdGhlcik7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBUaHJvdzxzdGQ6OmRv
bWFpbl9lcnJvcj4oImNhbm5vdCB1c2Ugc3dhcCgpIHdpdGggIiArIHR5cGVfbmFtZSgpKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vLyBAfQorCisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLyBsZXhpY29ncmFwaGljYWwgY29tcGFyaXNv
biBvcGVyYXRvcnMgLy8KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKworICAgIC8vLyBAbmFtZSBsZXhpY29ncmFwaGljYWwgY29tcGFyaXNvbiBvcGVyYXRv
cnMKKyAgICAvLy8gQHsKKworICBwcml2YXRlOgorICAgIC8qIQorICAgIEBicmllZiBjb21wYXJp
c29uIG9wZXJhdG9yIGZvciBKU09OIHR5cGVzCisKKyAgICBSZXR1cm5zIGFuIG9yZGVyaW5nIHRo
YXQgaXMgc2ltaWxhciB0byBQeXRob246CisgICAgLSBvcmRlcjogbnVsbCA8IGJvb2xlYW4gPCBu
dW1iZXIgPCBvYmplY3QgPCBhcnJheSA8IHN0cmluZworICAgIC0gZnVydGhlcm1vcmUsIGVhY2gg
dHlwZSBpcyBub3Qgc21hbGxlciB0aGFuIGl0c2VsZgorCisgICAgQHNpbmNlIHZlcnNpb24gMS4w
LjAKKyAgICAqLworICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPChjb25zdCB2YWx1ZV90IGxocywg
Y29uc3QgdmFsdWVfdCByaHMpIG5vZXhjZXB0CisgICAgeworICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIHN0ZDo6YXJyYXk8dWludDhfdCwgOD4gb3JkZXIgPSB7eworICAgICAgICAgICAgICAgIDAs
IC8vIG51bGwKKyAgICAgICAgICAgICAgICAzLCAvLyBvYmplY3QKKyAgICAgICAgICAgICAgICA0
LCAvLyBhcnJheQorICAgICAgICAgICAgICAgIDUsIC8vIHN0cmluZworICAgICAgICAgICAgICAg
IDEsIC8vIGJvb2xlYW4KKyAgICAgICAgICAgICAgICAyLCAvLyBpbnRlZ2VyCisgICAgICAgICAg
ICAgICAgMiwgLy8gdW5zaWduZWQKKyAgICAgICAgICAgICAgICAyLCAvLyBmbG9hdAorICAgICAg
ICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIC8vIGRpc2NhcmRlZCB2YWx1ZXMgYXJlIG5v
dCBjb21wYXJhYmxlCisgICAgICAgIGlmIChsaHMgPT0gdmFsdWVfdDo6ZGlzY2FyZGVkIG9yIHJo
cyA9PSB2YWx1ZV90OjpkaXNjYXJkZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBvcmRlcltzdGF0aWNfY2FzdDxzdGQ6
OnNpemVfdD4obGhzKV0gPCBvcmRlcltzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4ocmhzKV07Cisg
ICAgfQorCisgIHB1YmxpYzoKKyAgICAvKiEKKyAgICBAYnJpZWYgY29tcGFyaXNvbjogZXF1YWwK
KworICAgIENvbXBhcmVzIHR3byBKU09OIHZhbHVlcyBmb3IgZXF1YWxpdHkgYWNjb3JkaW5nIHRv
IHRoZSBmb2xsb3dpbmcgcnVsZXM6CisgICAgLSBUd28gSlNPTiB2YWx1ZXMgYXJlIGVxdWFsIGlm
ICgxKSB0aGV5IGFyZSBmcm9tIHRoZSBzYW1lIHR5cGUgYW5kICgyKQorICAgICAgdGhlaXIgc3Rv
cmVkIHZhbHVlcyBhcmUgdGhlIHNhbWUuCisgICAgLSBJbnRlZ2VyIGFuZCBmbG9hdGluZy1wb2lu
dCBudW1iZXJzIGFyZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCBiZWZvcmUKKyAgICAgIGNvbXBh
cmlzb24uIEZsb2F0aW5nLXBvaW50IG51bWJlcnMgYXJlIGNvbXBhcmVkIGluZGlyZWN0bHk6IHR3
bworICAgICAgZmxvYXRpbmctcG9pbnQgbnVtYmVycyBgZjFgIGFuZCBgZjJgIGFyZSBjb25zaWRl
cmVkIGVxdWFsIGlmIG5laXRoZXIKKyAgICAgIGBmMSA+IGYyYCBub3IgYGYyID4gZjFgIGhvbGRz
LgorICAgIC0gVHdvIEpTT04gbnVsbCB2YWx1ZXMgYXJlIGVxdWFsLgorCisgICAgQHBhcmFtW2lu
XSBsaHMgIGZpcnN0IEpTT04gdmFsdWUgdG8gY29uc2lkZXIKKyAgICBAcGFyYW1baW5dIHJocyAg
c2Vjb25kIEpTT04gdmFsdWUgdG8gY29uc2lkZXIKKyAgICBAcmV0dXJuIHdoZXRoZXIgdGhlIHZh
bHVlcyBAYSBsaHMgYW5kIEBhIHJocyBhcmUgZXF1YWwKKworICAgIEBjb21wbGV4aXR5IExpbmVh
ci4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgY29tcGFyaW5n
IHNldmVyYWwgSlNPTgorICAgIHR5cGVzLixvcGVyYXRvcl9fZXF1YWx9CisKKyAgICBAc2luY2Ug
dmVyc2lvbiAxLjAuMAorICAgICovCisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdF9y
ZWZlcmVuY2UgbGhzLCBjb25zdF9yZWZlcmVuY2UgcmhzKSBub2V4Y2VwdAorICAgIHsKKyAgICAg
ICAgY29uc3QgYXV0byBsaHNfdHlwZSA9IGxocy50eXBlKCk7CisgICAgICAgIGNvbnN0IGF1dG8g
cmhzX3R5cGUgPSByaHMudHlwZSgpOworCisgICAgICAgIGlmIChsaHNfdHlwZSA9PSByaHNfdHlw
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChsaHNfdHlwZSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5OgorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICpsaHMubV92YWx1ZS5hcnJheSA9PSAqcmhz
Lm1fdmFsdWUuYXJyYXk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2Ug
dmFsdWVfdDo6b2JqZWN0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICpsaHMubV92YWx1ZS5vYmplY3QgPT0gKnJocy5tX3ZhbHVlLm9iamVjdDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudWxsOgorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6c3RyaW5nOgorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICpsaHMubV92YWx1ZS5zdHJpbmcg
PT0gKnJocy5tX3ZhbHVlLnN0cmluZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGxocy5tX3ZhbHVlLmJvb2xlYW4gPT0gcmhzLm1fdmFsdWUuYm9vbGVh
bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1i
ZXJfaW50ZWdlcjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBsaHMubV92YWx1ZS5udW1iZXJfaW50ZWdlciA9PSByaHMubV92YWx1ZS5udW1iZXJfaW50ZWdl
cjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1i
ZXJfdW5zaWduZWQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbGhzLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkID09IHJocy5tX3ZhbHVlLm51bWJlcl91bnNp
Z25lZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpu
dW1iZXJfZmxvYXQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbGhzLm1fdmFsdWUubnVtYmVyX2Zsb2F0ID09IHJocy5tX3ZhbHVlLm51bWJlcl9mbG9hdDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobGhzX3R5cGUg
PT0gdmFsdWVfdDo6bnVtYmVyX2ludGVnZXIgYW5kIHJoc190eXBlID09IHZhbHVlX3Q6Om51bWJl
cl9mbG9hdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PG51bWJl
cl9mbG9hdF90PihsaHMubV92YWx1ZS5udW1iZXJfaW50ZWdlcikgPT0gcmhzLm1fdmFsdWUubnVt
YmVyX2Zsb2F0OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGxoc190eXBlID09IHZhbHVl
X3Q6Om51bWJlcl9mbG9hdCBhbmQgcmhzX3R5cGUgPT0gdmFsdWVfdDo6bnVtYmVyX2ludGVnZXIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBsaHMubV92YWx1ZS5udW1iZXJfZmxvYXQg
PT0gc3RhdGljX2Nhc3Q8bnVtYmVyX2Zsb2F0X3Q+KHJocy5tX3ZhbHVlLm51bWJlcl9pbnRlZ2Vy
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChsaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1i
ZXJfdW5zaWduZWQgYW5kIHJoc190eXBlID09IHZhbHVlX3Q6Om51bWJlcl9mbG9hdCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PG51bWJlcl9mbG9hdF90PihsaHMu
bV92YWx1ZS5udW1iZXJfdW5zaWduZWQpID09IHJocy5tX3ZhbHVlLm51bWJlcl9mbG9hdDsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmIChsaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfZmxv
YXQgYW5kIHJoc190eXBlID09IHZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGxocy5tX3ZhbHVlLm51bWJlcl9mbG9hdCA9PSBzdGF0aWNfY2Fz
dDxudW1iZXJfZmxvYXRfdD4ocmhzLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChsaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQg
YW5kIHJoc190eXBlID09IHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bnVtYmVyX2ludGVnZXJfdD4obGhzLm1fdmFsdWUu
bnVtYmVyX3Vuc2lnbmVkKSA9PSByaHMubV92YWx1ZS5udW1iZXJfaW50ZWdlcjsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChsaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlciBh
bmQgcmhzX3R5cGUgPT0gdmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbGhzLm1fdmFsdWUubnVtYmVyX2ludGVnZXIgPT0gc3RhdGljX2Nhc3Q8
bnVtYmVyX2ludGVnZXJfdD4ocmhzLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYg
Y29tcGFyaXNvbjogZXF1YWwKKworICAgIFRoZSBmdW5jdGlvbnMgY29tcGFyZXMgdGhlIGdpdmVu
IEpTT04gdmFsdWUgYWdhaW5zdCBhIG51bGwgcG9pbnRlci4gQXMgdGhlCisgICAgbnVsbCBwb2lu
dGVyIGNhbiBiZSB1c2VkIHRvIGluaXRpYWxpemUgYSBKU09OIHZhbHVlIHRvIG51bGwsIGEgY29t
cGFyaXNvbgorICAgIG9mIEpTT04gdmFsdWUgQGEgdiB3aXRoIGEgbnVsbCBwb2ludGVyIHNob3Vs
ZCBiZSBlcXVpdmFsZW50IHRvIGNhbGwKKyAgICBgdi5pc19udWxsKClgLgorCisgICAgQHBhcmFt
W2luXSB2ICBKU09OIHZhbHVlIHRvIGNvbnNpZGVyCisgICAgQHJldHVybiB3aGV0aGVyIEBhIHYg
aXMgbnVsbAorCisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAbGl2ZWV4YW1wbGV7
VGhlIGV4YW1wbGUgY29tcGFyZXMgc2V2ZXJhbCBKU09OIHR5cGVzIHRvIHRoZSBudWxsIHBvaW50
ZXIuCisgICAgLG9wZXJhdG9yX19lcXVhbF9fbnVsbHB0cl90fQorCisgICAgQHNpbmNlIHZlcnNp
b24gMS4wLjAKKyAgICAqLworICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3RfcmVmZXJl
bmNlIHYsIHN0ZDo6bnVsbHB0cl90KSBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHYu
aXNfbnVsbCgpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBjb21wYXJpc29uOiBlcXVh
bAorICAgIEBjb3B5ZG9jIG9wZXJhdG9yPT0oY29uc3RfcmVmZXJlbmNlLCBzdGQ6Om51bGxwdHJf
dCkKKyAgICAqLworICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oc3RkOjpudWxscHRyX3QsIGNv
bnN0X3JlZmVyZW5jZSB2KSBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHYuaXNfbnVs
bCgpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBjb21wYXJpc29uOiBub3QgZXF1YWwK
KworICAgIENvbXBhcmVzIHR3byBKU09OIHZhbHVlcyBmb3IgaW5lcXVhbGl0eSBieSBjYWxjdWxh
dGluZyBgbm90IChsaHMgPT0gcmhzKWAuCisKKyAgICBAcGFyYW1baW5dIGxocyAgZmlyc3QgSlNP
TiB2YWx1ZSB0byBjb25zaWRlcgorICAgIEBwYXJhbVtpbl0gcmhzICBzZWNvbmQgSlNPTiB2YWx1
ZSB0byBjb25zaWRlcgorICAgIEByZXR1cm4gd2hldGhlciB0aGUgdmFsdWVzIEBhIGxocyBhbmQg
QGEgcmhzIGFyZSBub3QgZXF1YWwKKworICAgIEBjb21wbGV4aXR5IExpbmVhci4KKworICAgIEBs
aXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgY29tcGFyaW5nIHNldmVyYWwgSlNP
TgorICAgIHR5cGVzLixvcGVyYXRvcl9fbm90ZXF1YWx9CisKKyAgICBAc2luY2UgdmVyc2lvbiAx
LjAuMAorICAgICovCisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdF9yZWZlcmVuY2Ug
bGhzLCBjb25zdF9yZWZlcmVuY2UgcmhzKSBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5vdCAobGhzID09IHJocyk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGNvbXBhcmlz
b246IG5vdCBlcXVhbAorCisgICAgVGhlIGZ1bmN0aW9ucyBjb21wYXJlcyB0aGUgZ2l2ZW4gSlNP
TiB2YWx1ZSBhZ2FpbnN0IGEgbnVsbCBwb2ludGVyLiBBcyB0aGUKKyAgICBudWxsIHBvaW50ZXIg
Y2FuIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSBhIEpTT04gdmFsdWUgdG8gbnVsbCwgYSBjb21wYXJp
c29uCisgICAgb2YgSlNPTiB2YWx1ZSBAYSB2IHdpdGggYSBudWxsIHBvaW50ZXIgc2hvdWxkIGJl
IGVxdWl2YWxlbnQgdG8gY2FsbAorICAgIGBub3Qgdi5pc19udWxsKClgLgorCisgICAgQHBhcmFt
W2luXSB2ICBKU09OIHZhbHVlIHRvIGNvbnNpZGVyCisgICAgQHJldHVybiB3aGV0aGVyIEBhIHYg
aXMgbm90IG51bGwKKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQGxpdmVleGFt
cGxle1RoZSBleGFtcGxlIGNvbXBhcmVzIHNldmVyYWwgSlNPTiB0eXBlcyB0byB0aGUgbnVsbCBw
b2ludGVyLgorICAgICxvcGVyYXRvcl9fbm90ZXF1YWxfX251bGxwdHJfdH0KKworICAgIEBzaW5j
ZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0
X3JlZmVyZW5jZSB2LCBzdGQ6Om51bGxwdHJfdCkgbm9leGNlcHQKKyAgICB7CisgICAgICAgIHJl
dHVybiBub3Qgdi5pc19udWxsKCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGNvbXBh
cmlzb246IG5vdCBlcXVhbAorICAgIEBjb3B5ZG9jIG9wZXJhdG9yIT0oY29uc3RfcmVmZXJlbmNl
LCBzdGQ6Om51bGxwdHJfdCkKKyAgICAqLworICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oc3Rk
OjpudWxscHRyX3QsIGNvbnN0X3JlZmVyZW5jZSB2KSBub2V4Y2VwdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5vdCB2LmlzX251bGwoKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgY29t
cGFyaXNvbjogbGVzcyB0aGFuCisKKyAgICBDb21wYXJlcyB3aGV0aGVyIG9uZSBKU09OIHZhbHVl
IEBhIGxocyBpcyBsZXNzIHRoYW4gYW5vdGhlciBKU09OIHZhbHVlIEBhCisgICAgcmhzIGFjY29y
ZGluZyB0byB0aGUgZm9sbG93aW5nIHJ1bGVzOgorICAgIC0gSWYgQGEgbGhzIGFuZCBAYSByaHMg
aGF2ZSB0aGUgc2FtZSB0eXBlLCB0aGUgdmFsdWVzIGFyZSBjb21wYXJlZCB1c2luZworICAgICAg
dGhlIGRlZmF1bHQgYDxgIG9wZXJhdG9yLgorICAgIC0gSW50ZWdlciBhbmQgZmxvYXRpbmctcG9p
bnQgbnVtYmVycyBhcmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgYmVmb3JlCisgICAgICBjb21w
YXJpc29uCisgICAgLSBJbiBjYXNlIEBhIGxocyBhbmQgQGEgcmhzIGhhdmUgZGlmZmVyZW50IHR5
cGVzLCB0aGUgdmFsdWVzIGFyZSBpZ25vcmVkCisgICAgICBhbmQgdGhlIG9yZGVyIG9mIHRoZSB0
eXBlcyBpcyBjb25zaWRlcmVkLCBzZWUKKyAgICAgIEByZWYgb3BlcmF0b3I8KGNvbnN0IHZhbHVl
X3QsIGNvbnN0IHZhbHVlX3QpLgorCisgICAgQHBhcmFtW2luXSBsaHMgIGZpcnN0IEpTT04gdmFs
dWUgdG8gY29uc2lkZXIKKyAgICBAcGFyYW1baW5dIHJocyAgc2Vjb25kIEpTT04gdmFsdWUgdG8g
Y29uc2lkZXIKKyAgICBAcmV0dXJuIHdoZXRoZXIgQGEgbGhzIGlzIGxlc3MgdGhhbiBAYSByaHMK
KworICAgIEBjb21wbGV4aXR5IExpbmVhci4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBs
ZSBkZW1vbnN0cmF0ZXMgY29tcGFyaW5nIHNldmVyYWwgSlNPTgorICAgIHR5cGVzLixvcGVyYXRv
cl9fbGVzc30KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBmcmllbmQg
Ym9vbCBvcGVyYXRvcjwoY29uc3RfcmVmZXJlbmNlIGxocywgY29uc3RfcmVmZXJlbmNlIHJocykg
bm9leGNlcHQKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8gbGhzX3R5cGUgPSBsaHMudHlwZSgp
OworICAgICAgICBjb25zdCBhdXRvIHJoc190eXBlID0gcmhzLnR5cGUoKTsKKworICAgICAgICBp
ZiAobGhzX3R5cGUgPT0gcmhzX3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
bGhzX3R5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojph
cnJheToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAqbGhz
Lm1fdmFsdWUuYXJyYXkgPCAqcmhzLm1fdmFsdWUuYXJyYXk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6b2JqZWN0OgorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICpsaHMubV92YWx1ZS5vYmplY3QgPCAqcmhzLm1f
dmFsdWUub2JqZWN0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIHZh
bHVlX3Q6Om51bGw6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVf
dDo6c3RyaW5nOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICpsaHMubV92YWx1ZS5zdHJpbmcgPCAqcmhzLm1fdmFsdWUuc3RyaW5nOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmJvb2xlYW46CisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGhzLm1fdmFsdWUuYm9vbGVhbiA8
IHJocy5tX3ZhbHVlLmJvb2xlYW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGNhc2UgdmFsdWVfdDo6bnVtYmVyX2ludGVnZXI6CisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbGhzLm1fdmFsdWUubnVtYmVyX2ludGVnZXIgPCByaHMubV92
YWx1ZS5udW1iZXJfaW50ZWdlcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
Y2FzZSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQ6CisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbGhzLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkIDwgcmhzLm1f
dmFsdWUubnVtYmVyX3Vuc2lnbmVkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBsaHMubV92YWx1ZS5udW1iZXJfZmxvYXQgPCByaHMubV92YWx1
ZS5udW1iZXJfZmxvYXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKGxoc190eXBlID09IHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyIGFuZCByaHNfdHlwZSA9
PSB2YWx1ZV90OjpudW1iZXJfZmxvYXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxudW1iZXJfZmxvYXRfdD4obGhzLm1fdmFsdWUubnVtYmVyX2ludGVnZXIpIDwg
cmhzLm1fdmFsdWUubnVtYmVyX2Zsb2F0OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGxo
c190eXBlID09IHZhbHVlX3Q6Om51bWJlcl9mbG9hdCBhbmQgcmhzX3R5cGUgPT0gdmFsdWVfdDo6
bnVtYmVyX2ludGVnZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBsaHMubV92YWx1
ZS5udW1iZXJfZmxvYXQgPCBzdGF0aWNfY2FzdDxudW1iZXJfZmxvYXRfdD4ocmhzLm1fdmFsdWUu
bnVtYmVyX2ludGVnZXIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGxoc190eXBlID09
IHZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZCBhbmQgcmhzX3R5cGUgPT0gdmFsdWVfdDo6bnVtYmVy
X2Zsb2F0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bnVtYmVy
X2Zsb2F0X3Q+KGxocy5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZCkgPCByaHMubV92YWx1ZS5udW1i
ZXJfZmxvYXQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobGhzX3R5cGUgPT0gdmFsdWVf
dDo6bnVtYmVyX2Zsb2F0IGFuZCByaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBsaHMubV92YWx1ZS5udW1iZXJfZmxvYXQg
PCBzdGF0aWNfY2FzdDxudW1iZXJfZmxvYXRfdD4ocmhzLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVk
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChsaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1i
ZXJfaW50ZWdlciBhbmQgcmhzX3R5cGUgPT0gdmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbGhzLm1fdmFsdWUubnVtYmVyX2ludGVnZXIgPCBz
dGF0aWNfY2FzdDxudW1iZXJfaW50ZWdlcl90PihyaHMubV92YWx1ZS5udW1iZXJfdW5zaWduZWQp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGxoc190eXBlID09IHZhbHVlX3Q6Om51bWJl
cl91bnNpZ25lZCBhbmQgcmhzX3R5cGUgPT0gdmFsdWVfdDo6bnVtYmVyX2ludGVnZXIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxudW1iZXJfaW50ZWdlcl90Pihs
aHMubV92YWx1ZS5udW1iZXJfdW5zaWduZWQpIDwgcmhzLm1fdmFsdWUubnVtYmVyX2ludGVnZXI7
CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBvbmx5IHJlYWNoIHRoaXMgbGluZSBpZiB3ZSBj
YW5ub3QgY29tcGFyZSB2YWx1ZXMuIEluIHRoYXQgY2FzZSwKKyAgICAgICAgLy8gd2UgY29tcGFy
ZSB0eXBlcy4gTm90ZSB3ZSBoYXZlIHRvIGNhbGwgdGhlIG9wZXJhdG9yIGV4cGxpY2l0bHksCisg
ICAgICAgIC8vIGJlY2F1c2UgTVNWQyBoYXMgcHJvYmxlbXMgb3RoZXJ3aXNlLgorICAgICAgICBy
ZXR1cm4gb3BlcmF0b3I8KGxoc190eXBlLCByaHNfdHlwZSk7CisgICAgfQorCisgICAgLyohCisg
ICAgQGJyaWVmIGNvbXBhcmlzb246IGxlc3MgdGhhbiBvciBlcXVhbAorCisgICAgQ29tcGFyZXMg
d2hldGhlciBvbmUgSlNPTiB2YWx1ZSBAYSBsaHMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGFu
b3RoZXIKKyAgICBKU09OIHZhbHVlIGJ5IGNhbGN1bGF0aW5nIGBub3QgKHJocyA8IGxocylgLgor
CisgICAgQHBhcmFtW2luXSBsaHMgIGZpcnN0IEpTT04gdmFsdWUgdG8gY29uc2lkZXIKKyAgICBA
cGFyYW1baW5dIHJocyAgc2Vjb25kIEpTT04gdmFsdWUgdG8gY29uc2lkZXIKKyAgICBAcmV0dXJu
IHdoZXRoZXIgQGEgbGhzIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBAYSByaHMKKworICAgIEBj
b21wbGV4aXR5IExpbmVhci4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBkZW1vbnN0
cmF0ZXMgY29tcGFyaW5nIHNldmVyYWwgSlNPTgorICAgIHR5cGVzLixvcGVyYXRvcl9fZ3JlYXRl
cn0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBmcmllbmQgYm9vbCBv
cGVyYXRvcjw9KGNvbnN0X3JlZmVyZW5jZSBsaHMsIGNvbnN0X3JlZmVyZW5jZSByaHMpIG5vZXhj
ZXB0CisgICAgeworICAgICAgICByZXR1cm4gbm90IChyaHMgPCBsaHMpOworICAgIH0KKworICAg
IC8qIQorICAgIEBicmllZiBjb21wYXJpc29uOiBncmVhdGVyIHRoYW4KKworICAgIENvbXBhcmVz
IHdoZXRoZXIgb25lIEpTT04gdmFsdWUgQGEgbGhzIGlzIGdyZWF0ZXIgdGhhbiBhbm90aGVyCisg
ICAgSlNPTiB2YWx1ZSBieSBjYWxjdWxhdGluZyBgbm90IChsaHMgPD0gcmhzKWAuCisKKyAgICBA
cGFyYW1baW5dIGxocyAgZmlyc3QgSlNPTiB2YWx1ZSB0byBjb25zaWRlcgorICAgIEBwYXJhbVtp
bl0gcmhzICBzZWNvbmQgSlNPTiB2YWx1ZSB0byBjb25zaWRlcgorICAgIEByZXR1cm4gd2hldGhl
ciBAYSBsaHMgaXMgZ3JlYXRlciB0aGFuIHRvIEBhIHJocworCisgICAgQGNvbXBsZXhpdHkgTGlu
ZWFyLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGRlbW9uc3RyYXRlcyBjb21wYXJp
bmcgc2V2ZXJhbCBKU09OCisgICAgdHlwZXMuLG9wZXJhdG9yX19sZXNzZXF1YWx9CisKKyAgICBA
c2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+KGNv
bnN0X3JlZmVyZW5jZSBsaHMsIGNvbnN0X3JlZmVyZW5jZSByaHMpIG5vZXhjZXB0CisgICAgewor
ICAgICAgICByZXR1cm4gbm90IChsaHMgPD0gcmhzKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBA
YnJpZWYgY29tcGFyaXNvbjogZ3JlYXRlciB0aGFuIG9yIGVxdWFsCisKKyAgICBDb21wYXJlcyB3
aGV0aGVyIG9uZSBKU09OIHZhbHVlIEBhIGxocyBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8g
YW5vdGhlcgorICAgIEpTT04gdmFsdWUgYnkgY2FsY3VsYXRpbmcgYG5vdCAobGhzIDwgcmhzKWAu
CisKKyAgICBAcGFyYW1baW5dIGxocyAgZmlyc3QgSlNPTiB2YWx1ZSB0byBjb25zaWRlcgorICAg
IEBwYXJhbVtpbl0gcmhzICBzZWNvbmQgSlNPTiB2YWx1ZSB0byBjb25zaWRlcgorICAgIEByZXR1
cm4gd2hldGhlciBAYSBsaHMgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIEBhIHJocworCisg
ICAgQGNvbXBsZXhpdHkgTGluZWFyLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGRl
bW9uc3RyYXRlcyBjb21wYXJpbmcgc2V2ZXJhbCBKU09OCisgICAgdHlwZXMuLG9wZXJhdG9yX19n
cmVhdGVyZXF1YWx9CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgZnJp
ZW5kIGJvb2wgb3BlcmF0b3I+PShjb25zdF9yZWZlcmVuY2UgbGhzLCBjb25zdF9yZWZlcmVuY2Ug
cmhzKSBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vdCAobGhzIDwgcmhzKTsKKyAg
ICB9CisKKyAgICAvLy8gQH0KKworCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIHNl
cmlhbGl6YXRpb24gLy8KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICAvLy8gQG5hbWUg
c2VyaWFsaXphdGlvbgorICAgIC8vLyBAeworCisgICAgLyohCisgICAgQGJyaWVmIHNlcmlhbGl6
ZSB0byBzdHJlYW0KKworICAgIFNlcmlhbGl6ZSB0aGUgZ2l2ZW4gSlNPTiB2YWx1ZSBAYSBqIHRv
IHRoZSBvdXRwdXQgc3RyZWFtIEBhIG8uIFRoZSBKU09OCisgICAgdmFsdWUgd2lsbCBiZSBzZXJp
YWxpemVkIHVzaW5nIHRoZSBAcmVmIGR1bXAgbWVtYmVyIGZ1bmN0aW9uLiBUaGUKKyAgICBpbmRl
bnRhdGlvbiBvZiB0aGUgb3V0cHV0IGNhbiBiZSBjb250cm9sbGVkIHdpdGggdGhlIG1lbWJlciB2
YXJpYWJsZQorICAgIGB3aWR0aGAgb2YgdGhlIG91dHB1dCBzdHJlYW0gQGEgby4gRm9yIGluc3Rh
bmNlLCB1c2luZyB0aGUgbWFuaXB1bGF0b3IKKyAgICBgc3RkOjpzZXR3KDQpYCBvbiBAYSBvIHNl
dHMgdGhlIGluZGVudGF0aW9uIGxldmVsIHRvIGA0YCBhbmQgdGhlCisgICAgc2VyaWFsaXphdGlv
biByZXN1bHQgaXMgdGhlIHNhbWUgYXMgY2FsbGluZyBgZHVtcCg0KWAuCisKKyAgICBAbm90ZSBE
dXJpbmcgc2VyaWFsaXphaW9uLCB0aGUgbG9jYWxlIGFuZCB0aGUgcHJlY2lzaW9uIG9mIHRoZSBv
dXRwdXQKKyAgICBzdHJlYW0gQGEgbyBhcmUgY2hhbmdlZC4gVGhlIG9yaWdpbmFsIHZhbHVlcyBh
cmUgcmVzdG9yZWQgd2hlbiB0aGUKKyAgICBmdW5jdGlvbiByZXR1cm5zLgorCisgICAgQHBhcmFt
W2luLG91dF0gbyAgc3RyZWFtIHRvIHNlcmlhbGl6ZSB0bworICAgIEBwYXJhbVtpbl0gaiAgSlNP
TiB2YWx1ZSB0byBzZXJpYWxpemUKKworICAgIEByZXR1cm4gdGhlIHN0cmVhbSBAYSBvCisKKyAg
ICBAY29tcGxleGl0eSBMaW5lYXIuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVs
b3cgc2hvd3MgdGhlIHNlcmlhbGl6YXRpb24gd2l0aCBkaWZmZXJlbnQKKyAgICBwYXJhbWV0ZXJz
IHRvIGB3aWR0aGAgdG8gYWRqdXN0IHRoZSBpbmRlbnRhdGlvbiBsZXZlbC4sb3BlcmF0b3Jfc2Vy
aWFsaXplfQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGZyaWVuZCBz
dGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvLCBjb25zdCBiYXNpY19qc29u
JiBqKQorICAgIHsKKyAgICAgICAgLy8gcmVhZCB3aWR0aCBtZW1iZXIgYW5kIHVzZSBpdCBhcyBp
bmRlbnRhdGlvbiBwYXJhbWV0ZXIgaWYgbm9uemVybworICAgICAgICBjb25zdCBib29sIHByZXR0
eV9wcmludCA9IChvLndpZHRoKCkgPiAwKTsKKyAgICAgICAgY29uc3QgYXV0byBpbmRlbnRhdGlv
biA9IChwcmV0dHlfcHJpbnQgPyBvLndpZHRoKCkgOiAwKTsKKworICAgICAgICAvLyByZXNldCB3
aWR0aCB0byAwIGZvciBzdWJzZXF1ZW50IGNhbGxzIHRvIHRoaXMgc3RyZWFtCisgICAgICAgIG8u
d2lkdGgoMCk7CisKKyAgICAgICAgLy8gZml4IGxvY2FsZSBwcm9ibGVtcworICAgICAgICBjb25z
dCBhdXRvIG9sZF9sb2NhbGUgPSBvLmltYnVlKHN0ZDo6bG9jYWxlOjpjbGFzc2ljKCkpOworICAg
ICAgICAvLyBzZXQgcHJlY2lzaW9uCisKKyAgICAgICAgLy8gNiwgMTUgb3IgMTYgZGlnaXRzIG9m
IHByZWNpc2lvbiBhbGxvd3Mgcm91bmQtdHJpcCBJRUVFIDc1NAorICAgICAgICAvLyBzdHJpbmct
PmZsb2F0LT5zdHJpbmcsIHN0cmluZy0+ZG91YmxlLT5zdHJpbmcgb3Igc3RyaW5nLT5sb25nCisg
ICAgICAgIC8vIGRvdWJsZS0+c3RyaW5nOyB0byBiZSBzYWZlLCB3ZSByZWFkIHRoaXMgdmFsdWUg
ZnJvbQorICAgICAgICAvLyBzdGQ6Om51bWVyaWNfbGltaXRzPG51bWJlcl9mbG9hdF90Pjo6ZGln
aXRzMTAKKyAgICAgICAgY29uc3QgYXV0byBvbGRfcHJlY2lzaW9uID0gby5wcmVjaXNpb24oc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpkaWdpdHMxMCk7CisKKyAgICAgICAgLy8gZG8gdGhl
IGFjdHVhbCBzZXJpYWxpemF0aW9uCisgICAgICAgIGouZHVtcChvLCBwcmV0dHlfcHJpbnQsIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGludD4oaW5kZW50YXRpb24pKTsKKworICAgICAgICAvLyByZXNl
dCBsb2NhbGUgYW5kIHByZWNpc2lvbgorICAgICAgICBvLmltYnVlKG9sZF9sb2NhbGUpOworICAg
ICAgICBvLnByZWNpc2lvbihvbGRfcHJlY2lzaW9uKTsKKyAgICAgICAgcmV0dXJuIG87CisgICAg
fQorCisgICAgLyohCisgICAgQGJyaWVmIHNlcmlhbGl6ZSB0byBzdHJlYW0KKyAgICBAY29weWRv
YyBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYsIGNvbnN0IGJhc2ljX2pzb24mKQorICAgICovCisg
ICAgZnJpZW5kIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I+Pihjb25zdCBiYXNpY19qc29uJiBqLCBz
dGQ6Om9zdHJlYW0mIG8pCisgICAgeworICAgICAgICByZXR1cm4gbyA8PCBqOworICAgIH0KKwor
ICAgIC8vLyBAfQorCisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLyBkZXNlcmlh
bGl6YXRpb24gLy8KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIC8vLyBAbmFtZSBk
ZXNlcmlhbGl6YXRpb24KKyAgICAvLy8gQHsKKworICAgIC8qIQorICAgIEBicmllZiBkZXNlcmlh
bGl6ZSBmcm9tIGFuIGFycmF5CisKKyAgICBUaGlzIGZ1bmN0aW9uIHJlYWRzIGZyb20gYW4gYXJy
YXkgb2YgMS1ieXRlIHZhbHVlcy4KKworICAgIEBwcmUgRWFjaCBlbGVtZW50IG9mIHRoZSBjb250
YWluZXIgaGFzIGEgc2l6ZSBvZiAxIGJ5dGUuIFZpb2xhdGluZyB0aGlzCisgICAgcHJlY29uZGl0
aW9uIHlpZWxkcyB1bmRlZmluZWQgYmVoYXZpb3IuICoqVGhpcyBwcmVjb25kaXRpb24gaXMgZW5m
b3JjZWQKKyAgICB3aXRoIGEgc3RhdGljIGFzc2VydGlvbi4qKgorCisgICAgQHBhcmFtW2luXSBh
cnJheSAgYXJyYXkgdG8gcmVhZCBmcm9tCisgICAgQHBhcmFtW2luXSBjYiAgYSBwYXJzZXIgY2Fs
bGJhY2sgZnVuY3Rpb24gb2YgdHlwZSBAcmVmIHBhcnNlcl9jYWxsYmFja190CisgICAgd2hpY2gg
aXMgdXNlZCB0byBjb250cm9sIHRoZSBkZXNlcmlhbGl6YXRpb24gYnkgZmlsdGVyaW5nIHVud2Fu
dGVkIHZhbHVlcworICAgIChvcHRpb25hbCkKKworICAgIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBk
ZXNlcmlhbGl6YXRpb24KKworICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgbGVuZ3RoIG9m
IHRoZSBpbnB1dC4gVGhlIHBhcnNlciBpcyBhIHByZWRpY3RpdmUKKyAgICBMTCgxKSBwYXJzZXIu
IFRoZSBjb21wbGV4aXR5IGNhbiBiZSBoaWdoZXIgaWYgdGhlIHBhcnNlciBjYWxsYmFjayBmdW5j
dGlvbgorICAgIEBhIGNiIGhhcyBhIHN1cGVyLWxpbmVhciBjb21wbGV4aXR5LgorCisgICAgQG5v
dGUgQSBVVEYtOCBieXRlIG9yZGVyIG1hcmsgaXMgc2lsZW50bHkgaWdub3JlZC4KKworICAgIEBs
aXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBiZWxvdyBkZW1vbnN0cmF0ZXMgdGhlIGBwYXJzZSgpYCBm
dW5jdGlvbiByZWFkaW5nCisgICAgZnJvbSBhbiBhcnJheS4scGFyc2VfX2FycmF5X19wYXJzZXJf
Y2FsbGJhY2tfdH0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDIuMC4zCisgICAgKi8KKyAgICB0ZW1w
bGF0ZTxjbGFzcyBULCBzdGQ6OnNpemVfdCBOPgorICAgIHN0YXRpYyBiYXNpY19qc29uIHBhcnNl
KFQgKCZhcnJheSlbTl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2Vy
X2NhbGxiYWNrX3QgY2IgPSBudWxscHRyKQorICAgIHsKKyAgICAgICAgLy8gZGVsZWdhdGUgdGhl
IGNhbGwgdG8gdGhlIGl0ZXJhdG9yLXJhbmdlIHBhcnNlIG92ZXJsb2FkCisgICAgICAgIHJldHVy
biBwYXJzZShzdGQ6OmJlZ2luKGFycmF5KSwgc3RkOjplbmQoYXJyYXkpLCBjYik7CisgICAgfQor
CisgICAgLyohCisgICAgQGJyaWVmIGRlc2VyaWFsaXplIGZyb20gc3RyaW5nIGxpdGVyYWwKKwor
ICAgIEB0cGFyYW0gQ2hhclQgY2hhcmFjdGVyL2xpdGVyYWwgdHlwZSB3aXRoIHNpemUgb2YgMSBi
eXRlCisgICAgQHBhcmFtW2luXSBzICBzdHJpbmcgbGl0ZXJhbCB0byByZWFkIGEgc2VyaWFsaXpl
ZCBKU09OIHZhbHVlIGZyb20KKyAgICBAcGFyYW1baW5dIGNiIGEgcGFyc2VyIGNhbGxiYWNrIGZ1
bmN0aW9uIG9mIHR5cGUgQHJlZiBwYXJzZXJfY2FsbGJhY2tfdAorICAgIHdoaWNoIGlzIHVzZWQg
dG8gY29udHJvbCB0aGUgZGVzZXJpYWxpemF0aW9uIGJ5IGZpbHRlcmluZyB1bndhbnRlZCB2YWx1
ZXMKKyAgICAob3B0aW9uYWwpCisKKyAgICBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgZGVzZXJpYWxp
emF0aW9uCisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gdGhlIGxlbmd0aCBvZiB0aGUgaW5w
dXQuIFRoZSBwYXJzZXIgaXMgYSBwcmVkaWN0aXZlCisgICAgTEwoMSkgcGFyc2VyLiBUaGUgY29t
cGxleGl0eSBjYW4gYmUgaGlnaGVyIGlmIHRoZSBwYXJzZXIgY2FsbGJhY2sgZnVuY3Rpb24KKyAg
ICBAYSBjYiBoYXMgYSBzdXBlci1saW5lYXIgY29tcGxleGl0eS4KKworICAgIEBub3RlIEEgVVRG
LTggYnl0ZSBvcmRlciBtYXJrIGlzIHNpbGVudGx5IGlnbm9yZWQuCisgICAgQG5vdGUgU3RyaW5n
IGNvbnRhaW5lcnMgbGlrZSBgc3RkOjpzdHJpbmdgIG9yIEByZWYgc3RyaW5nX3QgY2FuIGJlIHBh
cnNlZAorICAgICAgICAgIHdpdGggQHJlZiBwYXJzZShjb25zdCBDb250aWd1b3VzQ29udGFpbmVy
JiwgY29uc3QgcGFyc2VyX2NhbGxiYWNrX3QpCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1w
bGUgYmVsb3cgZGVtb25zdHJhdGVzIHRoZSBgcGFyc2UoKWAgZnVuY3Rpb24gd2l0aAorICAgIGFu
ZCB3aXRob3V0IGNhbGxiYWNrIGZ1bmN0aW9uLixwYXJzZV9fc3RyaW5nX19wYXJzZXJfY2FsbGJh
Y2tfdH0KKworICAgIEBzYSBAcmVmIHBhcnNlKHN0ZDo6aXN0cmVhbSYsIGNvbnN0IHBhcnNlcl9j
YWxsYmFja190KSBmb3IgYSB2ZXJzaW9uIHRoYXQKKyAgICByZWFkcyBmcm9tIGFuIGlucHV0IHN0
cmVhbQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAgKG9yaWdpbmFsbHkgZm9yIEByZWYgc3Ry
aW5nX3QpCisgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyUFQsIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPAorICAgICAgICAgICAgICAgICBzdGQ6OmlzX3BvaW50ZXI8Q2hhclBUPjo6
dmFsdWUgYW5kCisgICAgICAgICAgICAgICAgIHN0ZDo6aXNfaW50ZWdyYWw8dHlwZW5hbWUgc3Rk
OjpyZW1vdmVfcG9pbnRlcjxDaGFyUFQ+Ojp0eXBlPjo6dmFsdWUgYW5kCisgICAgICAgICAgICAg
ICAgIHNpemVvZih0eXBlbmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVyPENoYXJQVD46OnR5cGUpID09
IDEsIGludD46OnR5cGUgPSAwPgorICAgIHN0YXRpYyBiYXNpY19qc29uIHBhcnNlKGNvbnN0IENo
YXJQVCBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlcl9jYWxsYmFj
a190IGNiID0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIHJldHVybiBwYXJzZXIocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4ocyksIGNiKS5wYXJzZSgpOworICAgIH0KKworICAgIC8qIQor
ICAgIEBicmllZiBkZXNlcmlhbGl6ZSBmcm9tIHN0cmVhbQorCisgICAgQHBhcmFtW2luLG91dF0g
aSAgc3RyZWFtIHRvIHJlYWQgYSBzZXJpYWxpemVkIEpTT04gdmFsdWUgZnJvbQorICAgIEBwYXJh
bVtpbl0gY2IgYSBwYXJzZXIgY2FsbGJhY2sgZnVuY3Rpb24gb2YgdHlwZSBAcmVmIHBhcnNlcl9j
YWxsYmFja190CisgICAgd2hpY2ggaXMgdXNlZCB0byBjb250cm9sIHRoZSBkZXNlcmlhbGl6YXRp
b24gYnkgZmlsdGVyaW5nIHVud2FudGVkIHZhbHVlcworICAgIChvcHRpb25hbCkKKworICAgIEBy
ZXR1cm4gcmVzdWx0IG9mIHRoZSBkZXNlcmlhbGl6YXRpb24KKworICAgIEBjb21wbGV4aXR5IExp
bmVhciBpbiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dC4gVGhlIHBhcnNlciBpcyBhIHByZWRpY3Rp
dmUKKyAgICBMTCgxKSBwYXJzZXIuIFRoZSBjb21wbGV4aXR5IGNhbiBiZSBoaWdoZXIgaWYgdGhl
IHBhcnNlciBjYWxsYmFjayBmdW5jdGlvbgorICAgIEBhIGNiIGhhcyBhIHN1cGVyLWxpbmVhciBj
b21wbGV4aXR5LgorCisgICAgQG5vdGUgQSBVVEYtOCBieXRlIG9yZGVyIG1hcmsgaXMgc2lsZW50
bHkgaWdub3JlZC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBiZWxvdyBkZW1vbnN0
cmF0ZXMgdGhlIGBwYXJzZSgpYCBmdW5jdGlvbiB3aXRoCisgICAgYW5kIHdpdGhvdXQgY2FsbGJh
Y2sgZnVuY3Rpb24uLHBhcnNlX19pc3RyZWFtX19wYXJzZXJfY2FsbGJhY2tfdH0KKworICAgIEBz
YSBAcmVmIHBhcnNlKGNvbnN0IGNoYXIqLCBjb25zdCBwYXJzZXJfY2FsbGJhY2tfdCkgZm9yIGEg
dmVyc2lvbgorICAgIHRoYXQgcmVhZHMgZnJvbSBhIHN0cmluZworCisgICAgQHNpbmNlIHZlcnNp
b24gMS4wLjAKKyAgICAqLworICAgIHN0YXRpYyBiYXNpY19qc29uIHBhcnNlKHN0ZDo6aXN0cmVh
bSYgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZXJfY2FsbGJhY2tf
dCBjYiA9IG51bGxwdHIpCisgICAgeworICAgICAgICByZXR1cm4gcGFyc2VyKGksIGNiKS5wYXJz
ZSgpOworICAgIH0KKworICAgIC8qIQorICAgIEBjb3B5ZG9jIHBhcnNlKHN0ZDo6aXN0cmVhbSYs
IGNvbnN0IHBhcnNlcl9jYWxsYmFja190KQorICAgICovCisgICAgc3RhdGljIGJhc2ljX2pzb24g
cGFyc2Uoc3RkOjppc3RyZWFtJiYgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBwYXJzZXJfY2FsbGJhY2tfdCBjYiA9IG51bGxwdHIpCisgICAgeworICAgICAgICByZXR1cm4g
cGFyc2VyKGksIGNiKS5wYXJzZSgpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBkZXNl
cmlhbGl6ZSBmcm9tIGFuIGl0ZXJhdG9yIHJhbmdlIHdpdGggY29udGlndW91cyBzdG9yYWdlCisK
KyAgICBUaGlzIGZ1bmN0aW9uIHJlYWRzIGZyb20gYW4gaXRlcmF0b3IgcmFuZ2Ugb2YgYSBjb250
YWluZXIgd2l0aCBjb250aWd1b3VzCisgICAgc3RvcmFnZSBvZiAxLWJ5dGUgdmFsdWVzLiBDb21w
YXRpYmxlIGNvbnRhaW5lciB0eXBlcyBpbmNsdWRlCisgICAgYHN0ZDo6dmVjdG9yYCwgYHN0ZDo6
c3RyaW5nYCwgYHN0ZDo6YXJyYXlgLCBgc3RkOjp2YWxhcnJheWAsIGFuZAorICAgIGBzdGQ6Omlu
aXRpYWxpemVyX2xpc3RgLiBGdXJ0aGVybW9yZSwgQy1zdHlsZSBhcnJheXMgY2FuIGJlIHVzZWQg
d2l0aAorICAgIGBzdGQ6OmJlZ2luKClgL2BzdGQ6OmVuZCgpYC4gVXNlci1kZWZpbmVkIGNvbnRh
aW5lcnMgY2FuIGJlIHVzZWQgYXMgbG9uZworICAgIGFzIHRoZXkgaW1wbGVtZW50IHJhbmRvbS1h
Y2Nlc3MgaXRlcmF0b3JzIGFuZCBhIGNvbnRpZ3VvdXMgc3RvcmFnZS4KKworICAgIEBwcmUgVGhl
IGl0ZXJhdG9yIHJhbmdlIGlzIGNvbnRpZ3VvdXMuIFZpb2xhdGluZyB0aGlzIHByZWNvbmRpdGlv
biB5aWVsZHMKKyAgICB1bmRlZmluZWQgYmVoYXZpb3IuICoqVGhpcyBwcmVjb25kaXRpb24gaXMg
ZW5mb3JjZWQgd2l0aCBhbiBhc3NlcnRpb24uKioKKyAgICBAcHJlIEVhY2ggZWxlbWVudCBpbiB0
aGUgcmFuZ2UgaGFzIGEgc2l6ZSBvZiAxIGJ5dGUuIFZpb2xhdGluZyB0aGlzCisgICAgcHJlY29u
ZGl0aW9uIHlpZWxkcyB1bmRlZmluZWQgYmVoYXZpb3IuICoqVGhpcyBwcmVjb25kaXRpb24gaXMg
ZW5mb3JjZWQKKyAgICB3aXRoIGEgc3RhdGljIGFzc2VydGlvbi4qKgorCisgICAgQHdhcm5pbmcg
VGhlcmUgaXMgbm8gd2F5IHRvIGVuZm9yY2UgYWxsIHByZWNvbmRpdGlvbnMgYXQgY29tcGlsZS10
aW1lLiBJZgorICAgICAgICAgICAgIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBub25jb21w
bGlhbnQgaXRlcmF0b3JzIGFuZCB3aXRoCisgICAgICAgICAgICAgYXNzZXJ0aW9ucyBzd2l0Y2hl
ZCBvZmYsIHRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQgYW5kIHdpbGwgbW9zdAorICAgICAgICAg
ICAgIGxpa2VseSB5aWVsZCBzZWdtZW50YXRpb24gdmlvbGF0aW9uLgorCisgICAgQHRwYXJhbSBJ
dGVyYXRvclR5cGUgaXRlcmF0b3Igb2YgY29udGFpbmVyIHdpdGggY29udGlndW91cyBzdG9yYWdl
CisgICAgQHBhcmFtW2luXSBmaXJzdCAgYmVnaW4gb2YgdGhlIHJhbmdlIHRvIHBhcnNlIChpbmNs
dWRlZCkKKyAgICBAcGFyYW1baW5dIGxhc3QgIGVuZCBvZiB0aGUgcmFuZ2UgdG8gcGFyc2UgKGV4
Y2x1ZGVkKQorICAgIEBwYXJhbVtpbl0gY2IgIGEgcGFyc2VyIGNhbGxiYWNrIGZ1bmN0aW9uIG9m
IHR5cGUgQHJlZiBwYXJzZXJfY2FsbGJhY2tfdAorICAgIHdoaWNoIGlzIHVzZWQgdG8gY29udHJv
bCB0aGUgZGVzZXJpYWxpemF0aW9uIGJ5IGZpbHRlcmluZyB1bndhbnRlZCB2YWx1ZXMKKyAgICAo
b3B0aW9uYWwpCisKKyAgICBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgZGVzZXJpYWxpemF0aW9uCisK
KyAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gdGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQuIFRoZSBw
YXJzZXIgaXMgYSBwcmVkaWN0aXZlCisgICAgTEwoMSkgcGFyc2VyLiBUaGUgY29tcGxleGl0eSBj
YW4gYmUgaGlnaGVyIGlmIHRoZSBwYXJzZXIgY2FsbGJhY2sgZnVuY3Rpb24KKyAgICBAYSBjYiBo
YXMgYSBzdXBlci1saW5lYXIgY29tcGxleGl0eS4KKworICAgIEBub3RlIEEgVVRGLTggYnl0ZSBv
cmRlciBtYXJrIGlzIHNpbGVudGx5IGlnbm9yZWQuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4
YW1wbGUgYmVsb3cgZGVtb25zdHJhdGVzIHRoZSBgcGFyc2UoKWAgZnVuY3Rpb24gcmVhZGluZwor
ICAgIGZyb20gYW4gaXRlcmF0b3IgcmFuZ2UuLHBhcnNlX19pdGVyYXRvcnR5cGVfX3BhcnNlcl9j
YWxsYmFja190fQorCisgICAgQHNpbmNlIHZlcnNpb24gMi4wLjMKKyAgICAqLworICAgIHRlbXBs
YXRlPGNsYXNzIEl0ZXJhdG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8CisgICAgICAg
ICAgICAgICAgIHN0ZDo6aXNfYmFzZV9vZjwKKyAgICAgICAgICAgICAgICAgICAgIHN0ZDo6cmFu
ZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsCisgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBz
dGQ6Oml0ZXJhdG9yX3RyYWl0czxJdGVyYXRvclR5cGU+OjppdGVyYXRvcl9jYXRlZ29yeT46OnZh
bHVlLCBpbnQ+Ojp0eXBlID0gMD4KKyAgICBzdGF0aWMgYmFzaWNfanNvbiBwYXJzZShJdGVyYXRv
clR5cGUgZmlyc3QsIEl0ZXJhdG9yVHlwZSBsYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHBhcnNlcl9jYWxsYmFja190IGNiID0gbnVsbHB0cikKKyAgICB7CisgICAgICAg
IC8vIGFzc2VydGlvbiB0byBjaGVjayB0aGF0IHRoZSBpdGVyYXRvciByYW5nZSBpcyBpbmRlZWQg
Y29udGlndW91cywKKyAgICAgICAgLy8gc2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM1
MDA4ODQyLzI2NjM3OCBmb3IgbW9yZSBkaXNjdXNzaW9uCisgICAgICAgIGFzc2VydChzdGQ6OmFj
Y3VtdWxhdGUoZmlyc3QsIGxhc3QsIHN0ZDo6bWFrZV9wYWlyPGJvb2wsIGludD4odHJ1ZSwgMCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZmaXJzdF0oc3RkOjpwYWlyPGJvb2ws
IGludD4gcmVzLCBkZWNsdHlwZSgqZmlyc3QpIHZhbCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmVzLmZpcnN0ICY9ICh2YWwgPT0gKihzdGQ6Om5leHQoc3RkOjphZGRyZXNzb2YoKmZpcnN0KSwg
cmVzLnNlY29uZCsrKSkpOworICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgfSkuZmly
c3QpOworCisgICAgICAgIC8vIGFzc2VydGlvbiB0byBjaGVjayB0aGF0IGVhY2ggZWxlbWVudCBp
cyAxIGJ5dGUgbG9uZworICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZih0eXBlbmFtZSBzdGQ6
Oml0ZXJhdG9yX3RyYWl0czxJdGVyYXRvclR5cGU+Ojp2YWx1ZV90eXBlKSA9PSAxLAorICAgICAg
ICAgICAgICAgICAgICAgICJlYWNoIGVsZW1lbnQgaW4gdGhlIGl0ZXJhdG9yIHJhbmdlIG11c3Qg
aGF2ZSB0aGUgc2l6ZSBvZiAxIGJ5dGUiKTsKKworICAgICAgICAvLyBpZiBpdGVyYXRvciByYW5n
ZSBpcyBlbXB0eSwgY3JlYXRlIGEgcGFyc2VyIHdpdGggYW4gZW1wdHkgc3RyaW5nCisgICAgICAg
IC8vIHRvIGdlbmVyYXRlICJ1bmV4cGVjdGVkIEVPRiIgZXJyb3IgbWVzc2FnZQorICAgICAgICBp
ZiAoc3RkOjpkaXN0YW5jZShmaXJzdCwgbGFzdCkgPD0gMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIHBhcnNlcigiIikucGFyc2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biBwYXJzZXIoZmlyc3QsIGxhc3QsIGNiKS5wYXJzZSgpOworICAgIH0KKworICAgIC8qIQorICAg
IEBicmllZiBkZXNlcmlhbGl6ZSBmcm9tIGEgY29udGFpbmVyIHdpdGggY29udGlndW91cyBzdG9y
YWdlCisKKyAgICBUaGlzIGZ1bmN0aW9uIHJlYWRzIGZyb20gYSBjb250YWluZXIgd2l0aCBjb250
aWd1b3VzIHN0b3JhZ2Ugb2YgMS1ieXRlCisgICAgdmFsdWVzLiBDb21wYXRpYmxlIGNvbnRhaW5l
ciB0eXBlcyBpbmNsdWRlIGBzdGQ6OnZlY3RvcmAsIGBzdGQ6OnN0cmluZ2AsCisgICAgYHN0ZDo6
YXJyYXlgLCBhbmQgYHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdGAuIFVzZXItZGVmaW5lZCBjb250YWlu
ZXJzIGNhbiBiZQorICAgIHVzZWQgYXMgbG9uZyBhcyB0aGV5IGltcGxlbWVudCByYW5kb20tYWNj
ZXNzIGl0ZXJhdG9ycyBhbmQgYSBjb250aWd1b3VzCisgICAgc3RvcmFnZS4KKworICAgIEBwcmUg
VGhlIGNvbnRhaW5lciBzdG9yYWdlIGlzIGNvbnRpZ3VvdXMuIFZpb2xhdGluZyB0aGlzIHByZWNv
bmRpdGlvbgorICAgIHlpZWxkcyB1bmRlZmluZWQgYmVoYXZpb3IuICoqVGhpcyBwcmVjb25kaXRp
b24gaXMgZW5mb3JjZWQgd2l0aCBhbgorICAgIGFzc2VydGlvbi4qKgorICAgIEBwcmUgRWFjaCBl
bGVtZW50IG9mIHRoZSBjb250YWluZXIgaGFzIGEgc2l6ZSBvZiAxIGJ5dGUuIFZpb2xhdGluZyB0
aGlzCisgICAgcHJlY29uZGl0aW9uIHlpZWxkcyB1bmRlZmluZWQgYmVoYXZpb3IuICoqVGhpcyBw
cmVjb25kaXRpb24gaXMgZW5mb3JjZWQKKyAgICB3aXRoIGEgc3RhdGljIGFzc2VydGlvbi4qKgor
CisgICAgQHdhcm5pbmcgVGhlcmUgaXMgbm8gd2F5IHRvIGVuZm9yY2UgYWxsIHByZWNvbmRpdGlv
bnMgYXQgY29tcGlsZS10aW1lLiBJZgorICAgICAgICAgICAgIHRoZSBmdW5jdGlvbiBpcyBjYWxs
ZWQgd2l0aCBhIG5vbmNvbXBsaWFudCBjb250YWluZXIgYW5kIHdpdGgKKyAgICAgICAgICAgICBh
c3NlcnRpb25zIHN3aXRjaGVkIG9mZiwgdGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZCBhbmQgd2ls
bCBtb3N0CisgICAgICAgICAgICAgbGlrZWx5IHlpZWxkIHNlZ21lbnRhdGlvbiB2aW9sYXRpb24u
CisKKyAgICBAdHBhcmFtIENvbnRpZ3VvdXNDb250YWluZXIgY29udGFpbmVyIHR5cGUgd2l0aCBj
b250aWd1b3VzIHN0b3JhZ2UKKyAgICBAcGFyYW1baW5dIGMgIGNvbnRhaW5lciB0byByZWFkIGZy
b20KKyAgICBAcGFyYW1baW5dIGNiICBhIHBhcnNlciBjYWxsYmFjayBmdW5jdGlvbiBvZiB0eXBl
IEByZWYgcGFyc2VyX2NhbGxiYWNrX3QKKyAgICB3aGljaCBpcyB1c2VkIHRvIGNvbnRyb2wgdGhl
IGRlc2VyaWFsaXphdGlvbiBieSBmaWx0ZXJpbmcgdW53YW50ZWQgdmFsdWVzCisgICAgKG9wdGlv
bmFsKQorCisgICAgQHJldHVybiByZXN1bHQgb2YgdGhlIGRlc2VyaWFsaXphdGlvbgorCisgICAg
QGNvbXBsZXhpdHkgTGluZWFyIGluIHRoZSBsZW5ndGggb2YgdGhlIGlucHV0LiBUaGUgcGFyc2Vy
IGlzIGEgcHJlZGljdGl2ZQorICAgIExMKDEpIHBhcnNlci4gVGhlIGNvbXBsZXhpdHkgY2FuIGJl
IGhpZ2hlciBpZiB0aGUgcGFyc2VyIGNhbGxiYWNrIGZ1bmN0aW9uCisgICAgQGEgY2IgaGFzIGEg
c3VwZXItbGluZWFyIGNvbXBsZXhpdHkuCisKKyAgICBAbm90ZSBBIFVURi04IGJ5dGUgb3JkZXIg
bWFyayBpcyBzaWxlbnRseSBpZ25vcmVkLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxl
IGJlbG93IGRlbW9uc3RyYXRlcyB0aGUgYHBhcnNlKClgIGZ1bmN0aW9uIHJlYWRpbmcKKyAgICBm
cm9tIGEgY29udGlndW91cyBjb250YWluZXIuLHBhcnNlX19jb250aWd1b3VzY29udGFpbmVyX19w
YXJzZXJfY2FsbGJhY2tfdH0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDIuMC4zCisgICAgKi8KKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBDb250aWd1b3VzQ29udGFpbmVyLCB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjwKKyAgICAgICAgICAgICAgICAgbm90IHN0ZDo6aXNfcG9pbnRlcjxDb250aWd1b3VzQ29u
dGFpbmVyPjo6dmFsdWUgYW5kCisgICAgICAgICAgICAgICAgIHN0ZDo6aXNfYmFzZV9vZjwKKyAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsCisgICAg
ICAgICAgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxkZWNsdHlwZShz
dGQ6OmJlZ2luKHN0ZDo6ZGVjbHZhbDxDb250aWd1b3VzQ29udGFpbmVyIGNvbnN0PigpKSk+Ojpp
dGVyYXRvcl9jYXRlZ29yeT46OnZhbHVlCisgICAgICAgICAgICAgICAgICwgaW50Pjo6dHlwZSA9
IDA+CisgICAgc3RhdGljIGJhc2ljX2pzb24gcGFyc2UoY29uc3QgQ29udGlndW91c0NvbnRhaW5l
ciYgYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZXJfY2FsbGJhY2tf
dCBjYiA9IG51bGxwdHIpCisgICAgeworICAgICAgICAvLyBkZWxlZ2F0ZSB0aGUgY2FsbCB0byB0
aGUgaXRlcmF0b3ItcmFuZ2UgcGFyc2Ugb3ZlcmxvYWQKKyAgICAgICAgcmV0dXJuIHBhcnNlKHN0
ZDo6YmVnaW4oYyksIHN0ZDo6ZW5kKGMpLCBjYik7CisgICAgfQorCisgICAgLyohCisgICAgQGJy
aWVmIGRlc2VyaWFsaXplIGZyb20gc3RyZWFtCisKKyAgICBEZXNlcmlhbGl6ZXMgYW4gaW5wdXQg
c3RyZWFtIHRvIGEgSlNPTiB2YWx1ZS4KKworICAgIEBwYXJhbVtpbixvdXRdIGkgIGlucHV0IHN0
cmVhbSB0byByZWFkIGEgc2VyaWFsaXplZCBKU09OIHZhbHVlIGZyb20KKyAgICBAcGFyYW1baW4s
b3V0XSBqICBKU09OIHZhbHVlIHRvIHdyaXRlIHRoZSBkZXNlcmlhbGl6ZWQgaW5wdXQgdG8KKwor
ICAgIEB0aHJvdyBzdGQ6OmludmFsaWRfYXJndW1lbnQgaW4gY2FzZSBvZiBwYXJzZSBlcnJvcnMK
KworICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dC4gVGhl
IHBhcnNlciBpcyBhIHByZWRpY3RpdmUKKyAgICBMTCgxKSBwYXJzZXIuCisKKyAgICBAbm90ZSBB
IFVURi04IGJ5dGUgb3JkZXIgbWFyayBpcyBzaWxlbnRseSBpZ25vcmVkLgorCisgICAgQGxpdmVl
eGFtcGxle1RoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyBhIEpTT04gdmFsdWUgaXMgY29uc3Ry
dWN0ZWQgYnkKKyAgICByZWFkaW5nIGEgc2VyaWFsaXphdGlvbiBmcm9tIGEgc3RyZWFtLixvcGVy
YXRvcl9kZXNlcmlhbGl6ZX0KKworICAgIEBzYSBwYXJzZShzdGQ6OmlzdHJlYW0mLCBjb25zdCBw
YXJzZXJfY2FsbGJhY2tfdCkgZm9yIGEgdmFyaWFudCB3aXRoIGEKKyAgICBwYXJzZXIgY2FsbGJh
Y2sgZnVuY3Rpb24gdG8gZmlsdGVyIHZhbHVlcyB3aGlsZSBwYXJzaW5nCisKKyAgICBAc2luY2Ug
dmVyc2lvbiAxLjAuMAorICAgICovCisgICAgZnJpZW5kIHN0ZDo6aXN0cmVhbSYgb3BlcmF0b3I8
PChiYXNpY19qc29uJiBqLCBzdGQ6OmlzdHJlYW0mIGkpCisgICAgeworICAgICAgICBqID0gcGFy
c2VyKGkpLnBhcnNlKCk7CisgICAgICAgIHJldHVybiBpOworICAgIH0KKworICAgIC8qIQorICAg
IEBicmllZiBkZXNlcmlhbGl6ZSBmcm9tIHN0cmVhbQorICAgIEBjb3B5ZG9jIG9wZXJhdG9yPDwo
YmFzaWNfanNvbiYsIHN0ZDo6aXN0cmVhbSYpCisgICAgKi8KKyAgICBmcmllbmQgc3RkOjppc3Ry
ZWFtJiBvcGVyYXRvcj4+KHN0ZDo6aXN0cmVhbSYgaSwgYmFzaWNfanNvbiYgaikKKyAgICB7Cisg
ICAgICAgIGogPSBwYXJzZXIoaSkucGFyc2UoKTsKKyAgICAgICAgcmV0dXJuIGk7CisgICAgfQor
CisgICAgLy8vIEB9CisKKworICBwcml2YXRlOgorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLworICAgIC8vIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyAvLworICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworCisgICAgLyohCisgICAgQGJyaWVmIHJldHVybiB0aGUgdHlwZSBhcyBz
dHJpbmcKKworICAgIFJldHVybnMgdGhlIHR5cGUgbmFtZSBhcyBzdHJpbmcgdG8gYmUgdXNlZCBp
biBlcnJvciBtZXNzYWdlcyAtIHVzdWFsbHkgdG8KKyAgICBpbmRpY2F0ZSB0aGF0IGEgZnVuY3Rp
b24gd2FzIGNhbGxlZCBvbiBhIHdyb25nIEpTT04gdHlwZS4KKworICAgIEByZXR1cm4gYmFzaWNh
bGx5IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgdGhlIEBhIG1fdHlwZSBtZW1iZXIKKwor
ICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAg
ICAqLworICAgIHN0ZDo6c3RyaW5nIHR5cGVfbmFtZSgpIGNvbnN0CisgICAgeworICAgICAgICBz
d2l0Y2ggKG1fdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudWxs
OgorICAgICAgICAgICAgICAgIHJldHVybiAibnVsbCI7CisgICAgICAgICAgICBjYXNlIHZhbHVl
X3Q6Om9iamVjdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIm9iamVjdCI7CisgICAgICAgICAg
ICBjYXNlIHZhbHVlX3Q6OmFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiAiYXJyYXkiOwor
ICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpzdHJpbmc6CisgICAgICAgICAgICAgICAgcmV0dXJu
ICJzdHJpbmciOworICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgorICAgICAgICAg
ICAgICAgIHJldHVybiAiYm9vbGVhbiI7CisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmRpc2Nh
cmRlZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gImRpc2NhcmRlZCI7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAibnVtYmVyIjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8qIQorICAgIEBicmllZiBjYWxjdWxhdGVzIHRoZSBleHRyYSBzcGFjZSB0byBl
c2NhcGUgYSBKU09OIHN0cmluZworCisgICAgQHBhcmFtW2luXSBzICB0aGUgc3RyaW5nIHRvIGVz
Y2FwZQorICAgIEByZXR1cm4gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlcXVpcmVkIHRvIGVz
Y2FwZSBzdHJpbmcgQGEgcworCisgICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIHRoZSBsZW5ndGgg
b2Ygc3RyaW5nIEBhIHMuCisgICAgKi8KKyAgICBzdGF0aWMgc3RkOjpzaXplX3QgZXh0cmFfc3Bh
Y2UoY29uc3Qgc3RyaW5nX3QmIHMpIG5vZXhjZXB0CisgICAgeworICAgICAgICByZXR1cm4gc3Rk
OjphY2N1bXVsYXRlKHMuYmVnaW4oKSwgcy5lbmQoKSwgc2l6ZV90e30sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgW10oc2l6ZV90IHJlcywgdHlwZW5hbWUgc3RyaW5nX3Q6OnZhbHVl
X3R5cGUgYykKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChjKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGNhc2UgJyInOgorICAgICAgICAgICAgICAgIGNhc2UgJ1xcJzoK
KyAgICAgICAgICAgICAgICBjYXNlICdcYic6CisgICAgICAgICAgICAgICAgY2FzZSAnXGYnOgor
ICAgICAgICAgICAgICAgIGNhc2UgJ1xuJzoKKyAgICAgICAgICAgICAgICBjYXNlICdccic6Cisg
ICAgICAgICAgICAgICAgY2FzZSAnXHQnOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gZnJvbSBjICgxIGJ5dGUpIHRvIFx4ICgyIGJ5dGVzKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzICsgMTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGMgPj0gMHgwMCBhbmQgYyA8PSAweDFmKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBmcm9tIGMgKDEgYnl0ZSkgdG8gXHV4eHh4ICg2IGJ5dGVzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcyArIDU7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisK
KyAgICAvKiEKKyAgICBAYnJpZWYgZXNjYXBlIGEgc3RyaW5nCisKKyAgICBFc2NhcGUgYSBzdHJp
bmcgYnkgcmVwbGFjaW5nIGNlcnRhaW4gc3BlY2lhbCBjaGFyYWN0ZXJzIGJ5IGEgc2VxdWVuY2Ug
b2YKKyAgICBhbiBlc2NhcGUgY2hhcmFjdGVyIChiYWNrc2xhc2gpIGFuZCBhbm90aGVyIGNoYXJh
Y3RlciBhbmQgb3RoZXIgY29udHJvbAorICAgIGNoYXJhY3RlcnMgYnkgYSBzZXF1ZW5jZSBvZiAi
XHUiIGZvbGxvd2VkIGJ5IGEgZm91ci1kaWdpdCBoZXgKKyAgICByZXByZXNlbnRhdGlvbi4KKwor
ICAgIEBwYXJhbVtpbl0gcyAgdGhlIHN0cmluZyB0byBlc2NhcGUKKyAgICBAcmV0dXJuICB0aGUg
ZXNjYXBlZCBzdHJpbmcKKworICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgbGVuZ3RoIG9m
IHN0cmluZyBAYSBzLgorICAgICovCisgICAgc3RhdGljIHN0cmluZ190IGVzY2FwZV9zdHJpbmco
Y29uc3Qgc3RyaW5nX3QmIHMpCisgICAgeworICAgICAgICBjb25zdCBhdXRvIHNwYWNlID0gZXh0
cmFfc3BhY2Uocyk7CisgICAgICAgIGlmIChzcGFjZSA9PSAwKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gczsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGNyZWF0ZSBhIHJlc3VsdCBz
dHJpbmcgb2YgbmVjZXNzYXJ5IHNpemUKKyAgICAgICAgc3RyaW5nX3QgcmVzdWx0KHMuc2l6ZSgp
ICsgc3BhY2UsICdcXCcpOworICAgICAgICBzdGQ6OnNpemVfdCBwb3MgPSAwOworCisgICAgICAg
IGZvciAoY29uc3QgYXV0byYgYyA6IHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
YykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBxdW90YXRpb24gbWFyayAoMHgy
MikKKyAgICAgICAgICAgICAgICBjYXNlICciJzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdFtwb3MgKyAxXSA9ICciJzsKKyAgICAgICAgICAgICAgICAgICAg
cG9zICs9IDI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIHJldmVyc2Ugc29saWR1cyAoMHg1YykKKyAgICAgICAgICAg
ICAgICBjYXNlICdcXCc6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAv
LyBub3RoaW5nIHRvIGNoYW5nZQorICAgICAgICAgICAgICAgICAgICBwb3MgKz0gMjsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgLy8gYmFja3NwYWNlICgweDA4KQorICAgICAgICAgICAgICAgIGNhc2UgJ1xiJzoKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtwb3MgKyAxXSA9ICdiJzsK
KyAgICAgICAgICAgICAgICAgICAgcG9zICs9IDI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGZvcm1mZWVkICgweDBj
KQorICAgICAgICAgICAgICAgIGNhc2UgJ1xmJzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdFtwb3MgKyAxXSA9ICdmJzsKKyAgICAgICAgICAgICAgICAgICAg
cG9zICs9IDI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIG5ld2xpbmUgKDB4MGEpCisgICAgICAgICAgICAgICAgY2Fz
ZSAnXG4nOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0W3Bv
cyArIDFdID0gJ24nOworICAgICAgICAgICAgICAgICAgICBwb3MgKz0gMjsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8g
Y2FycmlhZ2UgcmV0dXJuICgweDBkKQorICAgICAgICAgICAgICAgIGNhc2UgJ1xyJzoKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtwb3MgKyAxXSA9ICdyJzsK
KyAgICAgICAgICAgICAgICAgICAgcG9zICs9IDI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGhvcml6b250YWwgdGFi
ICgweDA5KQorICAgICAgICAgICAgICAgIGNhc2UgJ1x0JzoKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdFtwb3MgKyAxXSA9ICd0JzsKKyAgICAgICAgICAgICAg
ICAgICAgcG9zICs9IDI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoYyA+PSAweDAwIGFuZCBjIDw9IDB4MWYpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgYSBudW1iZXIg
MC4uMTUgdG8gaXRzIGhleCByZXByZXNlbnRhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gKDAuLmYpCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBoZXhp
ZnlbMTZdID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnOCcsICc5JywgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdm
JworICAgICAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gcHJpbnQgY2hhcmFjdGVyIGMgYXMgXHV4eHh4CisgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKGNvbnN0IGNoYXIgbSA6CisgICAgICAgICAgICAgICAgICAgIHsgJ3UnLCAnMCcsICcwJywg
aGV4aWZ5W2MgPj4gNF0sIGhleGlmeVtjICYgMHgwZl0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0pCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0WysrcG9zXSA9IG07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICsrcG9zOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gYWxsIG90aGVyIGNoYXJhY3RlcnMgYXJlIGFkZGVkIGFzLWlzCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHRbcG9zKytdID0gYzsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IC8qIQorICAgIEBicmllZiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2VyaWFsaXph
dGlvbiBmdW5jdGlvbgorCisgICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHB1Ymxp
YyBtZW1iZXIgZnVuY3Rpb24gZHVtcCBhbmQgb3JnYW5pemVzCisgICAgdGhlIHNlcmlhbGl6YXRp
b24gaW50ZXJuYWxseS4gVGhlIGluZGVudGF0aW9uIGxldmVsIGlzIHByb3BhZ2F0ZWQgYXMKKyAg
ICBhZGRpdGlvbmFsIHBhcmFtZXRlci4gSW4gY2FzZSBvZiBhcnJheXMgYW5kIG9iamVjdHMsIHRo
ZSBmdW5jdGlvbiBpcworICAgIGNhbGxlZCByZWN1cnNpdmVseS4gTm90ZSB0aGF0CisKKyAgICAt
IHN0cmluZ3MgYW5kIG9iamVjdCBrZXlzIGFyZSBlc2NhcGVkIHVzaW5nIGBlc2NhcGVfc3RyaW5n
KClgCisgICAgLSBpbnRlZ2VyIG51bWJlcnMgYXJlIGNvbnZlcnRlZCBpbXBsaWNpdGx5IHZpYSBg
b3BlcmF0b3I8PGAKKyAgICAtIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgYXJlIGNvbnZlcnRlZCB0
byBhIHN0cmluZyB1c2luZyBgIiVnImAgZm9ybWF0CisKKyAgICBAcGFyYW1bb3V0XSBvICAgICAg
ICAgICAgICBzdHJlYW0gdG8gd3JpdGUgdG8KKyAgICBAcGFyYW1baW5dIHByZXR0eV9wcmludCAg
ICB3aGV0aGVyIHRoZSBvdXRwdXQgc2hhbGwgYmUgcHJldHR5LXByaW50ZWQKKyAgICBAcGFyYW1b
aW5dIGluZGVudF9zdGVwICAgICB0aGUgaW5kZW50IGxldmVsCisgICAgQHBhcmFtW2luXSBjdXJy
ZW50X2luZGVudCAgdGhlIGN1cnJlbnQgaW5kZW50IGxldmVsIChvbmx5IHVzZWQgaW50ZXJuYWxs
eSkKKyAgICAqLworICAgIHZvaWQgZHVtcChzdGQ6Om9zdHJlYW0mIG8sCisgICAgICAgICAgICAg
IGNvbnN0IGJvb2wgcHJldHR5X3ByaW50LAorICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgaW5kZW50X3N0ZXAsCisgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBjdXJyZW50
X2luZGVudCA9IDApIGNvbnN0CisgICAgeworICAgICAgICAvLyB2YXJpYWJsZSB0byBob2xkIGlu
ZGVudGF0aW9uIGZvciByZWN1cnNpdmUgY2FsbHMKKyAgICAgICAgdW5zaWduZWQgaW50IG5ld19p
bmRlbnQgPSBjdXJyZW50X2luZGVudDsKKworICAgICAgICBzd2l0Y2ggKG1fdHlwZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUub2JqZWN0LT5lbXB0eSgpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbyA8PCAie30iOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbyA8PCAieyI7
CisKKyAgICAgICAgICAgICAgICAvLyBpbmNyZWFzZSBpbmRlbnRhdGlvbgorICAgICAgICAgICAg
ICAgIGlmIChwcmV0dHlfcHJpbnQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBuZXdfaW5kZW50ICs9IGluZGVudF9zdGVwOworICAgICAgICAgICAgICAgICAgICBvIDw8
ICJcbiI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZm9yIChhdXRvIGkg
PSBtX3ZhbHVlLm9iamVjdC0+Y2JlZ2luKCk7IGkgIT0gbV92YWx1ZS5vYmplY3QtPmNlbmQoKTsg
KytpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gbV92
YWx1ZS5vYmplY3QtPmNiZWdpbigpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBvIDw8IChwcmV0dHlfcHJpbnQgPyAiLFxuIiA6ICIsIik7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbyA8PCBzdHJpbmdfdChuZXdfaW5k
ZW50LCAnICcpIDw8ICJcIiIKKyAgICAgICAgICAgICAgICAgICAgICA8PCBlc2NhcGVfc3RyaW5n
KGktPmZpcnN0KSA8PCAiXCI6IgorICAgICAgICAgICAgICAgICAgICAgIDw8IChwcmV0dHlfcHJp
bnQgPyAiICIgOiAiIik7CisgICAgICAgICAgICAgICAgICAgIGktPnNlY29uZC5kdW1wKG8sIHBy
ZXR0eV9wcmludCwgaW5kZW50X3N0ZXAsIG5ld19pbmRlbnQpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIGRlY3JlYXNlIGluZGVudGF0aW9uCisgICAgICAgICAgICAg
ICAgaWYgKHByZXR0eV9wcmludCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIG5ld19pbmRlbnQgLT0gaW5kZW50X3N0ZXA7CisgICAgICAgICAgICAgICAgICAgIG8gPDwg
IlxuIjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvIDw8IHN0cmluZ190
KG5ld19pbmRlbnQsICcgJykgKyAifSI7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5OgorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLmFycmF5LT5lbXB0eSgpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbyA8PCAiW10iOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbyA8PCAi
WyI7CisKKyAgICAgICAgICAgICAgICAvLyBpbmNyZWFzZSBpbmRlbnRhdGlvbgorICAgICAgICAg
ICAgICAgIGlmIChwcmV0dHlfcHJpbnQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBuZXdfaW5kZW50ICs9IGluZGVudF9zdGVwOworICAgICAgICAgICAgICAgICAgICBv
IDw8ICJcbiI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZm9yIChhdXRv
IGkgPSBtX3ZhbHVlLmFycmF5LT5jYmVnaW4oKTsgaSAhPSBtX3ZhbHVlLmFycmF5LT5jZW5kKCk7
ICsraSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpICE9IG1f
dmFsdWUuYXJyYXktPmNiZWdpbigpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBvIDw8IChwcmV0dHlfcHJpbnQgPyAiLFxuIiA6ICIsIik7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbyA8PCBzdHJpbmdfdChuZXdfaW5k
ZW50LCAnICcpOworICAgICAgICAgICAgICAgICAgICBpLT5kdW1wKG8sIHByZXR0eV9wcmludCwg
aW5kZW50X3N0ZXAsIG5ld19pbmRlbnQpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIC8vIGRlY3JlYXNlIGluZGVudGF0aW9uCisgICAgICAgICAgICAgICAgaWYgKHByZXR0
eV9wcmludCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG5ld19pbmRl
bnQgLT0gaW5kZW50X3N0ZXA7CisgICAgICAgICAgICAgICAgICAgIG8gPDwgIlxuIjsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvIDw8IHN0cmluZ190KG5ld19pbmRlbnQs
ICcgJykgPDwgIl0iOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpzdHJpbmc6CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbyA8PCBzdHJpbmdfdCgiXCIiKSA8PCBlc2NhcGVfc3RyaW5nKCptX3ZhbHVlLnN0
cmluZykgPDwgIlwiIjsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6Ym9vbGVhbjoKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBvIDw8IChtX3ZhbHVlLmJvb2xlYW4gPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2Ug
dmFsdWVfdDo6bnVtYmVyX2ludGVnZXI6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
byA8PCBtX3ZhbHVlLm51bWJlcl9pbnRlZ2VyOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQ6
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbyA8PCBtX3ZhbHVlLm51bWJlcl91bnNp
Z25lZDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2Zsb2F0OgorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmIChtX3ZhbHVlLm51bWJlcl9mbG9hdCA9PSAwKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlIGZvciB6ZXJvIHRvIGdldCAiMC4w
Ii8iLTAuMCIKKyAgICAgICAgICAgICAgICAgICAgbyA8PCAoc3RkOjpzaWduYml0KG1fdmFsdWUu
bnVtYmVyX2Zsb2F0KSA/ICItMC4wIiA6ICIwLjAiKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
byA8PCBtX3ZhbHVlLm51bWJlcl9mbG9hdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6
OmRpc2NhcmRlZDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvIDw8ICI8ZGlzY2Fy
ZGVkPiI7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBjYXNlIHZhbHVlX3Q6Om51bGw6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
byA8PCAibnVsbCI7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgIHByaXZhdGU6CisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
ICAgIC8vIG1lbWJlciB2YXJpYWJsZXMgLy8KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisK
KyAgICAvLy8gdGhlIHR5cGUgb2YgdGhlIGN1cnJlbnQgZWxlbWVudAorICAgIHZhbHVlX3QgbV90
eXBlID0gdmFsdWVfdDo6bnVsbDsKKworICAgIC8vLyB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQg
ZWxlbWVudAorICAgIGpzb25fdmFsdWUgbV92YWx1ZSA9IHt9OworCisKKyAgcHJpdmF0ZToKKyAg
ICAvLy8vLy8vLy8vLy8vLy8KKyAgICAvLyBpdGVyYXRvcnMgLy8KKyAgICAvLy8vLy8vLy8vLy8v
Ly8KKworICAgIC8qIQorICAgIEBicmllZiBhbiBpdGVyYXRvciBmb3IgcHJpbWl0aXZlIEpTT04g
dHlwZXMKKworICAgIFRoaXMgY2xhc3MgbW9kZWxzIGFuIGl0ZXJhdG9yIGZvciBwcmltaXRpdmUg
SlNPTiB0eXBlcyAoYm9vbGVhbiwgbnVtYmVyLAorICAgIHN0cmluZykuIEl0J3Mgb25seSBwdXJw
b3NlIGlzIHRvIGFsbG93IHRoZSBpdGVyYXRvci9jb25zdF9pdGVyYXRvciBjbGFzc2VzCisgICAg
dG8gIml0ZXJhdGUiIG92ZXIgcHJpbWl0aXZlIHZhbHVlcy4gSW50ZXJuYWxseSwgdGhlIGl0ZXJh
dG9yIGlzIG1vZGVsZWQgYnkKKyAgICBhIGBkaWZmZXJlbmNlX3R5cGVgIHZhcmlhYmxlLiBWYWx1
ZSBiZWdpbl92YWx1ZSAoYDBgKSBtb2RlbHMgdGhlIGJlZ2luLAorICAgIGVuZF92YWx1ZSAoYDFg
KSBtb2RlbHMgcGFzdCB0aGUgZW5kLgorICAgICovCisgICAgY2xhc3MgcHJpbWl0aXZlX2l0ZXJh
dG9yX3QKKyAgICB7CisgICAgICBwdWJsaWM6CisgICAgICAgIC8vLyBzZXQgaXRlcmF0b3IgdG8g
YSBkZWZpbmVkIGJlZ2lubmluZworICAgICAgICB2b2lkIHNldF9iZWdpbigpIG5vZXhjZXB0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1faXQgPSBiZWdpbl92YWx1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vLyBzZXQgaXRlcmF0b3IgdG8gYSBkZWZpbmVkIHBhc3QgdGhlIGVuZAorICAgICAg
ICB2b2lkIHNldF9lbmQoKSBub2V4Y2VwdAorICAgICAgICB7CisgICAgICAgICAgICBtX2l0ID0g
ZW5kX3ZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgLy8vIHJldHVybiB3aGV0aGVyIHRoZSBp
dGVyYXRvciBjYW4gYmUgZGVyZWZlcmVuY2VkCisgICAgICAgIGNvbnN0ZXhwciBib29sIGlzX2Jl
Z2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChtX2l0
ID09IGJlZ2luX3ZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyByZXR1cm4gd2hldGhl
ciB0aGUgaXRlcmF0b3IgaXMgYXQgZW5kCisgICAgICAgIGNvbnN0ZXhwciBib29sIGlzX2VuZCgp
IGNvbnN0IG5vZXhjZXB0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAobV9pdCA9PSBl
bmRfdmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIHJldHVybiByZWZlcmVuY2UgdG8g
dGhlIHZhbHVlIHRvIGNoYW5nZSBhbmQgY29tcGFyZQorICAgICAgICBvcGVyYXRvciBkaWZmZXJl
bmNlX3R5cGUmICgpIG5vZXhjZXB0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2l0
OworICAgICAgICB9CisKKyAgICAgICAgLy8vIHJldHVybiB2YWx1ZSB0byBjb21wYXJlCisgICAg
ICAgIGNvbnN0ZXhwciBvcGVyYXRvciBkaWZmZXJlbmNlX3R5cGUgKCkgY29uc3Qgbm9leGNlcHQK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faXQ7CisgICAgICAgIH0KKworICAgICAg
cHJpdmF0ZToKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBkaWZmZXJlbmNlX3R5cGUgYmVnaW5f
dmFsdWUgPSAwOworICAgICAgICBzdGF0aWMgY29uc3RleHByIGRpZmZlcmVuY2VfdHlwZSBlbmRf
dmFsdWUgPSBiZWdpbl92YWx1ZSArIDE7CisKKyAgICAgICAgLy8vIGl0ZXJhdG9yIGFzIHNpZ25l
ZCBpbnRlZ2VyIHR5cGUKKyAgICAgICAgZGlmZmVyZW5jZV90eXBlIG1faXQgPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHN0ZDo6cHRyZGlmZl90Pjo6ZGVub3JtX21pbigpOworICAgIH07CisKKyAgICAv
KiEKKyAgICBAYnJpZWYgYW4gaXRlcmF0b3IgdmFsdWUKKworICAgIEBub3RlIFRoaXMgc3RydWN0
dXJlIGNvdWxkIGVhc2lseSBiZSBhIHVuaW9uLCBidXQgTVNWQyBjdXJyZW50bHkgZG9lcyBub3QK
KyAgICBhbGxvdyB1bmlvbnMgbWVtYmVycyB3aXRoIGNvbXBsZXggY29uc3RydWN0b3JzLCBzZWUK
KyAgICBodHRwczovL2dpdGh1Yi5jb20vbmxvaG1hbm4vanNvbi9wdWxsLzEwNS4KKyAgICAqLwor
ICAgIHN0cnVjdCBpbnRlcm5hbF9pdGVyYXRvcgorICAgIHsKKyAgICAgICAgLy8vIGl0ZXJhdG9y
IGZvciBKU09OIG9iamVjdHMKKyAgICAgICAgdHlwZW5hbWUgb2JqZWN0X3Q6Oml0ZXJhdG9yIG9i
amVjdF9pdGVyYXRvcjsKKyAgICAgICAgLy8vIGl0ZXJhdG9yIGZvciBKU09OIGFycmF5cworICAg
ICAgICB0eXBlbmFtZSBhcnJheV90OjppdGVyYXRvciBhcnJheV9pdGVyYXRvcjsKKyAgICAgICAg
Ly8vIGdlbmVyaWMgaXRlcmF0b3IgZm9yIGFsbCBvdGhlciB0eXBlcworICAgICAgICBwcmltaXRp
dmVfaXRlcmF0b3JfdCBwcmltaXRpdmVfaXRlcmF0b3I7CisKKyAgICAgICAgLy8vIGNyZWF0ZSBh
biB1bmluaXRpYWxpemVkIGludGVybmFsX2l0ZXJhdG9yCisgICAgICAgIGludGVybmFsX2l0ZXJh
dG9yKCkgbm9leGNlcHQKKyAgICAgICAgICAgIDogb2JqZWN0X2l0ZXJhdG9yKCksIGFycmF5X2l0
ZXJhdG9yKCksIHByaW1pdGl2ZV9pdGVyYXRvcigpCisgICAgICAgIHt9CisgICAgfTsKKworICAg
IC8vLyBwcm94eSBjbGFzcyBmb3IgdGhlIGl0ZXJhdG9yX3dyYXBwZXIgZnVuY3Rpb25zCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPgorICAgIGNsYXNzIGl0ZXJhdGlvbl9wcm94
eQorICAgIHsKKyAgICAgIHByaXZhdGU6CisgICAgICAgIC8vLyBoZWxwZXIgY2xhc3MgZm9yIGl0
ZXJhdGlvbgorICAgICAgICBjbGFzcyBpdGVyYXRpb25fcHJveHlfaW50ZXJuYWwKKyAgICAgICAg
eworICAgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICAvLy8gdGhlIGl0ZXJhdG9yCisgICAg
ICAgICAgICBJdGVyYXRvclR5cGUgYW5jaG9yOworICAgICAgICAgICAgLy8vIGFuIGluZGV4IGZv
ciBhcnJheXMgKHVzZWQgdG8gY3JlYXRlIGtleSBuYW1lcykKKyAgICAgICAgICAgIHNpemVfdCBh
cnJheV9pbmRleCA9IDA7CisKKyAgICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBleHBsaWNp
dCBpdGVyYXRpb25fcHJveHlfaW50ZXJuYWwoSXRlcmF0b3JUeXBlIGl0KSBub2V4Y2VwdAorICAg
ICAgICAgICAgICAgIDogYW5jaG9yKGl0KQorICAgICAgICAgICAge30KKworICAgICAgICAgICAg
Ly8vIGRlcmVmZXJlbmNlIG9wZXJhdG9yIChuZWVkZWQgZm9yIHJhbmdlLWJhc2VkIGZvcikKKyAg
ICAgICAgICAgIGl0ZXJhdGlvbl9wcm94eV9pbnRlcm5hbCYgb3BlcmF0b3IqKCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vLyBpbmNyZW1lbnQgb3BlcmF0b3IgKG5lZWRlZCBmb3IgcmFuZ2UtYmFzZWQg
Zm9yKQorICAgICAgICAgICAgaXRlcmF0aW9uX3Byb3h5X2ludGVybmFsJiBvcGVyYXRvcisrKCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICArK2FuY2hvcjsKKyAgICAgICAgICAgICAg
ICArK2FycmF5X2luZGV4OworCisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAvLy8gaW5lcXVhbGl0eSBvcGVyYXRvciAobmVlZGVkIGZv
ciByYW5nZS1iYXNlZCBmb3IpCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0gKGNvbnN0IGl0
ZXJhdGlvbl9wcm94eV9pbnRlcm5hbCYgbykgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gYW5jaG9yICE9IG8uYW5jaG9yOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLy8gcmV0dXJuIGtleSBvZiB0aGUgaXRlcmF0b3IKKyAgICAgICAgICAgIHR5cGVu
YW1lIGJhc2ljX2pzb246OnN0cmluZ190IGtleSgpIGNvbnN0CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgYXNzZXJ0KGFuY2hvci5tX29iamVjdCAhPSBudWxscHRyKTsKKworICAgICAg
ICAgICAgICAgIHN3aXRjaCAoYW5jaG9yLm1fb2JqZWN0LT50eXBlKCkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAvLyB1c2UgaW50ZWdlciBhcnJheSBpbmRleCBhcyBr
ZXkKKyAgICAgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6dG9fc3RyaW5n
KGFycmF5X2luZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIC8vIHVzZSBrZXkgZnJvbSB0aGUgb2JqZWN0CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
dmFsdWVfdDo6b2JqZWN0OgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gYW5jaG9yLmtleSgpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgLy8gdXNlIGFuIGVtcHR5IGtleSBmb3IgYWxsIHByaW1pdGl2ZSB0
eXBlcworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vLyBy
ZXR1cm4gdmFsdWUgb2YgdGhlIGl0ZXJhdG9yCisgICAgICAgICAgICB0eXBlbmFtZSBJdGVyYXRv
clR5cGU6OnJlZmVyZW5jZSB2YWx1ZSgpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGFuY2hvci52YWx1ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9Owor
CisgICAgICAgIC8vLyB0aGUgY29udGFpbmVyIHRvIGl0ZXJhdGUKKyAgICAgICAgdHlwZW5hbWUg
SXRlcmF0b3JUeXBlOjpyZWZlcmVuY2UgY29udGFpbmVyOworCisgICAgICBwdWJsaWM6CisgICAg
ICAgIC8vLyBjb25zdHJ1Y3QgaXRlcmF0aW9uIHByb3h5IGZyb20gYSBjb250YWluZXIKKyAgICAg
ICAgZXhwbGljaXQgaXRlcmF0aW9uX3Byb3h5KHR5cGVuYW1lIEl0ZXJhdG9yVHlwZTo6cmVmZXJl
bmNlIGNvbnQpCisgICAgICAgICAgICA6IGNvbnRhaW5lcihjb250KQorICAgICAgICB7fQorCisg
ICAgICAgIC8vLyByZXR1cm4gaXRlcmF0b3IgYmVnaW4gKG5lZWRlZCBmb3IgcmFuZ2UtYmFzZWQg
Zm9yKQorICAgICAgICBpdGVyYXRpb25fcHJveHlfaW50ZXJuYWwgYmVnaW4oKSBub2V4Y2VwdAor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXRlcmF0aW9uX3Byb3h5X2ludGVybmFsKGNv
bnRhaW5lci5iZWdpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyByZXR1cm4gaXRlcmF0
b3IgZW5kIChuZWVkZWQgZm9yIHJhbmdlLWJhc2VkIGZvcikKKyAgICAgICAgaXRlcmF0aW9uX3By
b3h5X2ludGVybmFsIGVuZCgpIG5vZXhjZXB0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBpdGVyYXRpb25fcHJveHlfaW50ZXJuYWwoY29udGFpbmVyLmVuZCgpKTsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgcHVibGljOgorICAgIC8qIQorICAgIEBicmllZiBhIGNvbnN0IHJhbmRvbSBh
Y2Nlc3MgaXRlcmF0b3IgZm9yIHRoZSBAcmVmIGJhc2ljX2pzb24gY2xhc3MKKworICAgIFRoaXMg
Y2xhc3MgaW1wbGVtZW50cyBhIGNvbnN0IGl0ZXJhdG9yIGZvciB0aGUgQHJlZiBiYXNpY19qc29u
IGNsYXNzLiBGcm9tCisgICAgdGhpcyBjbGFzcywgdGhlIEByZWYgaXRlcmF0b3IgY2xhc3MgaXMg
ZGVyaXZlZC4KKworICAgIEBub3RlIEFuIGl0ZXJhdG9yIGlzIGNhbGxlZCAqaW5pdGlhbGl6ZWQq
IHdoZW4gYSBwb2ludGVyIHRvIGEgSlNPTiB2YWx1ZQorICAgICAgICAgIGhhcyBiZWVuIHNldCAo
ZS5nLiwgYnkgYSBjb25zdHJ1Y3RvciBvciBhIGNvcHkgYXNzaWdubWVudCkuIElmIHRoZQorICAg
ICAgICAgIGl0ZXJhdG9yIGlzIGRlZmF1bHQtY29uc3RydWN0ZWQsIGl0IGlzICp1bmluaXRpYWxp
emVkKiBhbmQgbW9zdAorICAgICAgICAgIG1ldGhvZHMgYXJlIHVuZGVmaW5lZC4gKipUaGUgbGli
cmFyeSB1c2VzIGFzc2VydGlvbnMgdG8gZGV0ZWN0IGNhbGxzCisgICAgICAgICAgb24gdW5pbml0
aWFsaXplZCBpdGVyYXRvcnMuKioKKworICAgIEByZXF1aXJlbWVudCBUaGUgY2xhc3Mgc2F0aXNm
aWVzIHRoZSBmb2xsb3dpbmcgY29uY2VwdCByZXF1aXJlbWVudHM6CisgICAgLSBbUmFuZG9tQWNj
ZXNzSXRlcmF0b3JdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNlcHQvUmFu
ZG9tQWNjZXNzSXRlcmF0b3IpOgorICAgICAgVGhlIGl0ZXJhdG9yIHRoYXQgY2FuIGJlIG1vdmVk
IHRvIHBvaW50IChmb3J3YXJkIGFuZCBiYWNrd2FyZCkgdG8gYW55CisgICAgICBlbGVtZW50IGlu
IGNvbnN0YW50IHRpbWUuCisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAg
Y2xhc3MgY29uc3RfaXRlcmF0b3IgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6OnJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnLCBjb25zdCBiYXNpY19qc29uPgorICAgIHsKKyAgICAgICAgLy8v
IGFsbG93IGJhc2ljX2pzb24gdG8gYWNjZXNzIHByaXZhdGUgbWVtYmVycworICAgICAgICBmcmll
bmQgY2xhc3MgYmFzaWNfanNvbjsKKworICAgICAgcHVibGljOgorICAgICAgICAvLy8gdGhlIHR5
cGUgb2YgdGhlIHZhbHVlcyB3aGVuIHRoZSBpdGVyYXRvciBpcyBkZXJlZmVyZW5jZWQKKyAgICAg
ICAgdXNpbmcgdmFsdWVfdHlwZSA9IHR5cGVuYW1lIGJhc2ljX2pzb246OnZhbHVlX3R5cGU7Cisg
ICAgICAgIC8vLyBhIHR5cGUgdG8gcmVwcmVzZW50IGRpZmZlcmVuY2VzIGJldHdlZW4gaXRlcmF0
b3JzCisgICAgICAgIHVzaW5nIGRpZmZlcmVuY2VfdHlwZSA9IHR5cGVuYW1lIGJhc2ljX2pzb246
OmRpZmZlcmVuY2VfdHlwZTsKKyAgICAgICAgLy8vIGRlZmluZXMgYSBwb2ludGVyIHRvIHRoZSB0
eXBlIGl0ZXJhdGVkIG92ZXIgKHZhbHVlX3R5cGUpCisgICAgICAgIHVzaW5nIHBvaW50ZXIgPSB0
eXBlbmFtZSBiYXNpY19qc29uOjpjb25zdF9wb2ludGVyOworICAgICAgICAvLy8gZGVmaW5lcyBh
IHJlZmVyZW5jZSB0byB0aGUgdHlwZSBpdGVyYXRlZCBvdmVyICh2YWx1ZV90eXBlKQorICAgICAg
ICB1c2luZyByZWZlcmVuY2UgPSB0eXBlbmFtZSBiYXNpY19qc29uOjpjb25zdF9yZWZlcmVuY2U7
CisgICAgICAgIC8vLyB0aGUgY2F0ZWdvcnkgb2YgdGhlIGl0ZXJhdG9yCisgICAgICAgIHVzaW5n
IGl0ZXJhdG9yX2NhdGVnb3J5ID0gc3RkOjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZzsKKwor
ICAgICAgICAvLy8gZGVmYXVsdCBjb25zdHJ1Y3RvcgorICAgICAgICBjb25zdF9pdGVyYXRvcigp
ID0gZGVmYXVsdDsKKworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmIGNvbnN0cnVjdG9yIGZv
ciBhIGdpdmVuIEpTT04gaW5zdGFuY2UKKyAgICAgICAgQHBhcmFtW2luXSBvYmplY3QgIHBvaW50
ZXIgdG8gYSBKU09OIG9iamVjdCBmb3IgdGhpcyBpdGVyYXRvcgorICAgICAgICBAcHJlIG9iamVj
dCAhPSBudWxscHRyCisgICAgICAgIEBwb3N0IFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsg
aS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCisgICAgICAgICovCisgICAgICAgIGV4cGxpY2l0
IGNvbnN0X2l0ZXJhdG9yKHBvaW50ZXIgb2JqZWN0KSBub2V4Y2VwdAorICAgICAgICAgICAgOiBt
X29iamVjdChvYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydChtX29iamVjdCAh
PSBudWxscHRyKTsKKworICAgICAgICAgICAgc3dpdGNoIChtX29iamVjdC0+bV90eXBlKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFsdWVfdDo6b2Jq
ZWN0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pdC5vYmplY3Rf
aXRlcmF0b3IgPSB0eXBlbmFtZSBvYmplY3RfdDo6aXRlcmF0b3IoKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY2FzZSBi
YXNpY19qc29uOjp2YWx1ZV90OjphcnJheToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIG1faXQuYXJyYXlfaXRlcmF0b3IgPSB0eXBlbmFtZSBhcnJheV90OjppdGVyYXRv
cigpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgbV9pdC5wcmltaXRpdmVfaXRlcmF0b3IgPSBwcmltaXRpdmVfaXRlcmF0b3JfdCgpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmIGNvcHkgY29uc3Ry
dWN0b3IgZ2l2ZW4gYSBub24tY29uc3QgaXRlcmF0b3IKKyAgICAgICAgQHBhcmFtW2luXSBvdGhl
ciAgaXRlcmF0b3IgdG8gY29weSBmcm9tCisgICAgICAgIEBub3RlIEl0IGlzIG5vdCBjaGVja2Vk
IHdoZXRoZXIgQGEgb3RoZXIgaXMgaW5pdGlhbGl6ZWQuCisgICAgICAgICovCisgICAgICAgIGV4
cGxpY2l0IGNvbnN0X2l0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgbm9leGNlcHQKKyAg
ICAgICAgICAgIDogbV9vYmplY3Qob3RoZXIubV9vYmplY3QpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChtX29iamVjdCAhPSBudWxscHRyKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHN3aXRjaCAobV9vYmplY3QtPm1fdHlwZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFsdWVfdDo6b2JqZWN0OgorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2l0Lm9iamVjdF9pdGVyYXRv
ciA9IG90aGVyLm1faXQub2JqZWN0X2l0ZXJhdG9yOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjYXNl
IGJhc2ljX2pzb246OnZhbHVlX3Q6OmFycmF5OgorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2l0LmFycmF5X2l0ZXJhdG9yID0gb3RoZXIubV9pdC5hcnJh
eV9pdGVyYXRvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9pdC5wcmltaXRpdmVfaXRlcmF0b3Ig
PSBvdGhlci5tX2l0LnByaW1pdGl2ZV9pdGVyYXRvcjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyohCisgICAgICAgIEBicmllZiBjb3B5IGNv
bnN0cnVjdG9yCisgICAgICAgIEBwYXJhbVtpbl0gb3RoZXIgIGl0ZXJhdG9yIHRvIGNvcHkgZnJv
bQorICAgICAgICBAbm90ZSBJdCBpcyBub3QgY2hlY2tlZCB3aGV0aGVyIEBhIG90aGVyIGlzIGlu
aXRpYWxpemVkLgorICAgICAgICAqLworICAgICAgICBjb25zdF9pdGVyYXRvcihjb25zdCBjb25z
dF9pdGVyYXRvciYgb3RoZXIpIG5vZXhjZXB0CisgICAgICAgICAgICA6IG1fb2JqZWN0KG90aGVy
Lm1fb2JqZWN0KSwgbV9pdChvdGhlci5tX2l0KQorICAgICAgICB7fQorCisgICAgICAgIC8qIQor
ICAgICAgICBAYnJpZWYgY29weSBhc3NpZ25tZW50CisgICAgICAgIEBwYXJhbVtpbixvdXRdIG90
aGVyICBpdGVyYXRvciB0byBjb3B5IGZyb20KKyAgICAgICAgQG5vdGUgSXQgaXMgbm90IGNoZWNr
ZWQgd2hldGhlciBAYSBvdGhlciBpcyBpbml0aWFsaXplZC4KKyAgICAgICAgKi8KKyAgICAgICAg
Y29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdF9pdGVyYXRvciBvdGhlcikgbm9leGNlcHQo
CisgICAgICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPHBvaW50ZXI+
Ojp2YWx1ZSBhbmQKKyAgICAgICAgICAgIHN0ZDo6aXNfbm90aHJvd19tb3ZlX2Fzc2lnbmFibGU8
cG9pbnRlcj46OnZhbHVlIGFuZAorICAgICAgICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfY29u
c3RydWN0aWJsZTxpbnRlcm5hbF9pdGVyYXRvcj46OnZhbHVlIGFuZAorICAgICAgICAgICAgc3Rk
Ojppc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxpbnRlcm5hbF9pdGVyYXRvcj46OnZhbHVlCisg
ICAgICAgICkKKyAgICAgICAgeworICAgICAgICAgICAgc3RkOjpzd2FwKG1fb2JqZWN0LCBvdGhl
ci5tX29iamVjdCk7CisgICAgICAgICAgICBzdGQ6OnN3YXAobV9pdCwgb3RoZXIubV9pdCk7Cisg
ICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgLyohCisgICAgICAgIEBicmllZiBzZXQgdGhlIGl0ZXJhdG9yIHRvIHRoZSBmaXJzdCB2
YWx1ZQorICAgICAgICBAcHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9v
YmplY3QgIT0gbnVsbHB0cmAuCisgICAgICAgICovCisgICAgICAgIHZvaWQgc2V0X2JlZ2luKCkg
bm9leGNlcHQKKyAgICAgICAgeworICAgICAgICAgICAgYXNzZXJ0KG1fb2JqZWN0ICE9IG51bGxw
dHIpOworCisgICAgICAgICAgICBzd2l0Y2ggKG1fb2JqZWN0LT5tX3R5cGUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY2FzZSBiYXNpY19qc29uOjp2YWx1ZV90OjpvYmplY3Q6Cisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtX2l0Lm9iamVjdF9pdGVyYXRv
ciA9IG1fb2JqZWN0LT5tX3ZhbHVlLm9iamVjdC0+YmVnaW4oKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY2FzZSBiYXNp
Y19qc29uOjp2YWx1ZV90OjphcnJheToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIG1faXQuYXJyYXlfaXRlcmF0b3IgPSBtX29iamVjdC0+bV92YWx1ZS5hcnJheS0+YmVn
aW4oKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgY2FzZSBiYXNpY19qc29uOjp2YWx1ZV90OjpudWxsOgorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gc2V0IHRvIGVuZCBzbyBiZWdpbigpPT1l
bmQoKSBpcyB0cnVlOiBudWxsIGlzIGVtcHR5CisgICAgICAgICAgICAgICAgICAgIG1faXQucHJp
bWl0aXZlX2l0ZXJhdG9yLnNldF9lbmQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1faXQucHJpbWl0aXZlX2l0ZXJhdG9yLnNldF9i
ZWdpbigpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmIHNl
dCB0aGUgaXRlcmF0b3IgcGFzdCB0aGUgbGFzdCB2YWx1ZQorICAgICAgICBAcHJlIFRoZSBpdGVy
YXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCisgICAgICAg
ICovCisgICAgICAgIHZvaWQgc2V0X2VuZCgpIG5vZXhjZXB0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIGFzc2VydChtX29iamVjdCAhPSBudWxscHRyKTsKKworICAgICAgICAgICAgc3dpdGNoICht
X29iamVjdC0+bV90eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgYmFz
aWNfanNvbjo6dmFsdWVfdDo6b2JqZWN0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgbV9pdC5vYmplY3RfaXRlcmF0b3IgPSBtX29iamVjdC0+bV92YWx1ZS5vYmplY3Qt
PmVuZCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBjYXNlIGJhc2ljX2pzb246OnZhbHVlX3Q6OmFycmF5OgorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pdC5hcnJheV9pdGVyYXRvciA9IG1f
b2JqZWN0LT5tX3ZhbHVlLmFycmF5LT5lbmQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1faXQucHJpbWl0aXZlX2l0ZXJhdG9yLnNl
dF9lbmQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgLyohCisg
ICAgICAgIEBicmllZiByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIHZhbHVlIHBvaW50ZWQgdG8g
YnkgdGhlIGl0ZXJhdG9yCisgICAgICAgIEBwcmUgVGhlIGl0ZXJhdG9yIGlzIGluaXRpYWxpemVk
OyBpLmUuIGBtX29iamVjdCAhPSBudWxscHRyYC4KKyAgICAgICAgKi8KKyAgICAgICAgcmVmZXJl
bmNlIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydChtX29i
amVjdCAhPSBudWxscHRyKTsKKworICAgICAgICAgICAgc3dpdGNoIChtX29iamVjdC0+bV90eXBl
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFsdWVf
dDo6b2JqZWN0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0
KG1faXQub2JqZWN0X2l0ZXJhdG9yICE9IG1fb2JqZWN0LT5tX3ZhbHVlLm9iamVjdC0+ZW5kKCkp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9pdC5vYmplY3RfaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYXNlIGJhc2ljX2pzb246
OnZhbHVlX3Q6OmFycmF5OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
YXNzZXJ0KG1faXQuYXJyYXlfaXRlcmF0b3IgIT0gbV9vYmplY3QtPm1fdmFsdWUuYXJyYXktPmVu
ZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICptX2l0LmFycmF5X2l0ZXJhdG9yOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFs
dWVfdDo6bnVsbDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRocm93
PHN0ZDo6b3V0X29mX3JhbmdlPigiY2Fubm90IGdldCB2YWx1ZSIpOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpZiAobV9pdC5wcmltaXRpdmVfaXRlcmF0b3IuaXNfYmVnaW4oKSkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICptX29i
amVjdDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6
b3V0X29mX3JhbmdlPigiY2Fubm90IGdldCB2YWx1ZSIpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
LyohCisgICAgICAgIEBicmllZiBkZXJlZmVyZW5jZSB0aGUgaXRlcmF0b3IKKyAgICAgICAgQHBy
ZSBUaGUgaXRlcmF0b3IgaXMgaW5pdGlhbGl6ZWQ7IGkuZS4gYG1fb2JqZWN0ICE9IG51bGxwdHJg
LgorICAgICAgICAqLworICAgICAgICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICBhc3NlcnQobV9vYmplY3QgIT0gbnVsbHB0cik7CisKKyAgICAgICAg
ICAgIHN3aXRjaCAobV9vYmplY3QtPm1fdHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIGJhc2ljX2pzb246OnZhbHVlX3Q6Om9iamVjdDoKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChtX2l0Lm9iamVjdF9pdGVyYXRvciAhPSBtX29i
amVjdC0+bV92YWx1ZS5vYmplY3QtPmVuZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICYobV9pdC5vYmplY3RfaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgY2FzZSBiYXNpY19qc29uOjp2YWx1ZV90OjphcnJheToKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChtX2l0LmFycmF5X2l0ZXJhdG9y
ICE9IG1fb2JqZWN0LT5tX3ZhbHVlLmFycmF5LT5lbmQoKSk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiAmKm1faXQuYXJyYXlfaXRlcmF0b3I7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2l0LnByaW1pdGl2ZV9pdGVyYXRvci5pc19iZWdpbigpKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9vYmplY3Q7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6Om91dF9vZl9yYW5n
ZT4oImNhbm5vdCBnZXQgdmFsdWUiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAg
ICBAYnJpZWYgcG9zdC1pbmNyZW1lbnQgKGl0KyspCisgICAgICAgIEBwcmUgVGhlIGl0ZXJhdG9y
IGlzIGluaXRpYWxpemVkOyBpLmUuIGBtX29iamVjdCAhPSBudWxscHRyYC4KKyAgICAgICAgKi8K
KyAgICAgICAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gKnRoaXM7CisgICAgICAgICAgICArKygqdGhpcyk7CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgLyohCisgICAgICAg
IEBicmllZiBwcmUtaW5jcmVtZW50ICgrK2l0KQorICAgICAgICBAcHJlIFRoZSBpdGVyYXRvciBp
cyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCisgICAgICAgICovCisg
ICAgICAgIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgYXNzZXJ0KG1fb2JqZWN0ICE9IG51bGxwdHIpOworCisgICAgICAgICAgICBzd2l0Y2ggKG1f
b2JqZWN0LT5tX3R5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBiYXNp
Y19qc29uOjp2YWx1ZV90OjpvYmplY3Q6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBzdGQ6OmFkdmFuY2UobV9pdC5vYmplY3RfaXRlcmF0b3IsIDEpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBj
YXNlIGJhc2ljX2pzb246OnZhbHVlX3Q6OmFycmF5OgorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgc3RkOjphZHZhbmNlKG1faXQuYXJyYXlfaXRlcmF0b3IsIDEpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKytt
X2l0LnByaW1pdGl2ZV9pdGVyYXRvcjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmIHBvc3QtZGVjcmVtZW50
IChpdC0tKQorICAgICAgICBAcHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBg
bV9vYmplY3QgIT0gbnVsbHB0cmAuCisgICAgICAgICovCisgICAgICAgIGNvbnN0X2l0ZXJhdG9y
IG9wZXJhdG9yLS0oaW50KQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9ICp0
aGlzOworICAgICAgICAgICAgLS0oKnRoaXMpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAgICBAYnJpZWYgcHJlLWRlY3JlbWVudCAo
LS1pdCkKKyAgICAgICAgQHByZSBUaGUgaXRlcmF0b3IgaXMgaW5pdGlhbGl6ZWQ7IGkuZS4gYG1f
b2JqZWN0ICE9IG51bGxwdHJgLgorICAgICAgICAqLworICAgICAgICBjb25zdF9pdGVyYXRvciYg
b3BlcmF0b3ItLSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydChtX29iamVjdCAhPSBu
dWxscHRyKTsKKworICAgICAgICAgICAgc3dpdGNoIChtX29iamVjdC0+bV90eXBlKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFsdWVfdDo6b2JqZWN0
OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjphZHZhbmNlKG1f
aXQub2JqZWN0X2l0ZXJhdG9yLCAtMSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFsdWVf
dDo6YXJyYXk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OmFk
dmFuY2UobV9pdC5hcnJheV9pdGVyYXRvciwgLTEpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLS1tX2l0LnByaW1pdGl2ZV9pdGVyYXRv
cjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAg
ICAvKiEKKyAgICAgICAgQGJyaWVmICBjb21wYXJpc29uOiBlcXVhbAorICAgICAgICBAcHJlIFRo
ZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCisg
ICAgICAgICovCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBjb25zdF9pdGVyYXRvciYg
b3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGlmIG9iamVjdHMgYXJlIG5v
dCB0aGUgc2FtZSwgdGhlIGNvbXBhcmlzb24gaXMgdW5kZWZpbmVkCisgICAgICAgICAgICBpZiAo
bV9vYmplY3QgIT0gb3RoZXIubV9vYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJjYW5ub3QgY29tcGFyZSBpdGVyYXRvcnMgb2Yg
ZGlmZmVyZW50IGNvbnRhaW5lcnMiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXNz
ZXJ0KG1fb2JqZWN0ICE9IG51bGxwdHIpOworCisgICAgICAgICAgICBzd2l0Y2ggKG1fb2JqZWN0
LT5tX3R5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBiYXNpY19qc29u
Ojp2YWx1ZV90OjpvYmplY3Q6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gKG1faXQub2JqZWN0X2l0ZXJhdG9yID09IG90aGVyLm1faXQub2JqZWN0X2l0ZXJh
dG9yKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYXNlIGJhc2ljX2pz
b246OnZhbHVlX3Q6OmFycmF5OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIChtX2l0LmFycmF5X2l0ZXJhdG9yID09IG90aGVyLm1faXQuYXJyYXlfaXRlcmF0
b3IpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1faXQucHJpbWl0aXZl
X2l0ZXJhdG9yID09IG90aGVyLm1faXQucHJpbWl0aXZlX2l0ZXJhdG9yKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAg
QGJyaWVmICBjb21wYXJpc29uOiBub3QgZXF1YWwKKyAgICAgICAgQHByZSBUaGUgaXRlcmF0b3Ig
aXMgaW5pdGlhbGl6ZWQ7IGkuZS4gYG1fb2JqZWN0ICE9IG51bGxwdHJgLgorICAgICAgICAqLwor
ICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbm90IG9wZXJhdG9yPT0ob3RoZXIpOwor
ICAgICAgICB9CisKKyAgICAgICAgLyohCisgICAgICAgIEBicmllZiAgY29tcGFyaXNvbjogc21h
bGxlcgorICAgICAgICBAcHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9v
YmplY3QgIT0gbnVsbHB0cmAuCisgICAgICAgICovCisgICAgICAgIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
Ly8gaWYgb2JqZWN0cyBhcmUgbm90IHRoZSBzYW1lLCB0aGUgY29tcGFyaXNvbiBpcyB1bmRlZmlu
ZWQKKyAgICAgICAgICAgIGlmIChtX29iamVjdCAhPSBvdGhlci5tX29iamVjdCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oImNhbm5vdCBj
b21wYXJlIGl0ZXJhdG9ycyBvZiBkaWZmZXJlbnQgY29udGFpbmVycyIpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBhc3NlcnQobV9vYmplY3QgIT0gbnVsbHB0cik7CisKKyAgICAgICAg
ICAgIHN3aXRjaCAobV9vYmplY3QtPm1fdHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIGJhc2ljX2pzb246OnZhbHVlX3Q6Om9iamVjdDoKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fubm90IGNv
bXBhcmUgb3JkZXIgb2Ygb2JqZWN0IGl0ZXJhdG9ycyIpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFsdWVfdDo6YXJyYXk6CisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1faXQuYXJyYXlfaXRlcmF0
b3IgPCBvdGhlci5tX2l0LmFycmF5X2l0ZXJhdG9yKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIChtX2l0LnByaW1pdGl2ZV9pdGVyYXRvciA8IG90aGVyLm1faXQucHJpbWl0
aXZlX2l0ZXJhdG9yKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmICBjb21wYXJpc29uOiBsZXNzIHRoYW4g
b3IgZXF1YWwKKyAgICAgICAgQHByZSBUaGUgaXRlcmF0b3IgaXMgaW5pdGlhbGl6ZWQ7IGkuZS4g
YG1fb2JqZWN0ICE9IG51bGxwdHJgLgorICAgICAgICAqLworICAgICAgICBib29sIG9wZXJhdG9y
PD0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbm90IG90aGVyLm9wZXJhdG9yIDwgKCp0aGlzKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8qIQorICAgICAgICBAYnJpZWYgIGNvbXBhcmlzb246IGdyZWF0ZXIgdGhhbgorICAg
ICAgICBAcHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0g
bnVsbHB0cmAuCisgICAgICAgICovCisgICAgICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0IGNvbnN0
X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5v
dCBvcGVyYXRvcjw9KG90aGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAgICBA
YnJpZWYgIGNvbXBhcmlzb246IGdyZWF0ZXIgdGhhbiBvciBlcXVhbAorICAgICAgICBAcHJlIFRo
ZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCisg
ICAgICAgICovCisgICAgICAgIGJvb2wgb3BlcmF0b3I+PShjb25zdCBjb25zdF9pdGVyYXRvciYg
b3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBub3Qgb3BlcmF0b3I8
KG90aGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAgICBAYnJpZWYgIGFkZCB0
byBpdGVyYXRvcgorICAgICAgICBAcHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5l
LiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCisgICAgICAgICovCisgICAgICAgIGNvbnN0X2l0ZXJh
dG9yJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBpKQorICAgICAgICB7CisgICAgICAgICAg
ICBhc3NlcnQobV9vYmplY3QgIT0gbnVsbHB0cik7CisKKyAgICAgICAgICAgIHN3aXRjaCAobV9v
YmplY3QtPm1fdHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIGJhc2lj
X2pzb246OnZhbHVlX3Q6Om9iamVjdDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fubm90IHVzZSBvZmZzZXRzIHdpdGgg
b2JqZWN0IGl0ZXJhdG9ycyIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGNhc2UgYmFzaWNfanNvbjo6dmFsdWVfdDo6YXJyYXk6CisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBzdGQ6OmFkdmFuY2UobV9pdC5hcnJheV9pdGVyYXRvciwgaSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBt
X2l0LnByaW1pdGl2ZV9pdGVyYXRvciArPSBpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAgICBAYnJpZWYgIHN1YnRyYWN0
IGZyb20gaXRlcmF0b3IKKyAgICAgICAgQHByZSBUaGUgaXRlcmF0b3IgaXMgaW5pdGlhbGl6ZWQ7
IGkuZS4gYG1fb2JqZWN0ICE9IG51bGxwdHJgLgorICAgICAgICAqLworICAgICAgICBjb25zdF9p
dGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgaSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhdG9yKz0oLWkpOworICAgICAgICB9CisKKyAgICAgICAgLyohCisg
ICAgICAgIEBicmllZiAgYWRkIHRvIGl0ZXJhdG9yCisgICAgICAgIEBwcmUgVGhlIGl0ZXJhdG9y
IGlzIGluaXRpYWxpemVkOyBpLmUuIGBtX29iamVjdCAhPSBudWxscHRyYC4KKyAgICAgICAgKi8K
KyAgICAgICAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBpKQorICAg
ICAgICB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9ICp0aGlzOworICAgICAgICAgICAgcmVz
dWx0ICs9IGk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAg
ICAgLyohCisgICAgICAgIEBicmllZiAgc3VidHJhY3QgZnJvbSBpdGVyYXRvcgorICAgICAgICBA
cHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0
cmAuCisgICAgICAgICovCisgICAgICAgIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJl
bmNlX3R5cGUgaSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSAqdGhpczsK
KyAgICAgICAgICAgIHJlc3VsdCAtPSBpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAgICBAYnJpZWYgIHJldHVybiBkaWZmZXJlbmNl
CisgICAgICAgIEBwcmUgVGhlIGl0ZXJhdG9yIGlzIGluaXRpYWxpemVkOyBpLmUuIGBtX29iamVj
dCAhPSBudWxscHRyYC4KKyAgICAgICAgKi8KKyAgICAgICAgZGlmZmVyZW5jZV90eXBlIG9wZXJh
dG9yLShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGFzc2VydChtX29iamVjdCAhPSBudWxscHRyKTsKKworICAgICAgICAgICAgc3dpdGNo
IChtX29iamVjdC0+bV90eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2Ug
YmFzaWNfanNvbjo6dmFsdWVfdDo6b2JqZWN0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJjYW5ub3QgdXNlIG9mZnNldHMg
d2l0aCBvYmplY3QgaXRlcmF0b3JzIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgY2FzZSBiYXNpY19qc29uOjp2YWx1ZV90OjphcnJheToKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2l0LmFycmF5X2l0ZXJhdG9yIC0gb3RoZXIu
bV9pdC5hcnJheV9pdGVyYXRvcjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1faXQucHJpbWl0aXZlX2l0ZXJhdG9yIC0gb3RoZXIubV9pdC5wcmltaXRpdmVfaXRlcmF0b3I7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
LyohCisgICAgICAgIEBicmllZiAgYWNjZXNzIHRvIHN1Y2Nlc3NvcgorICAgICAgICBAcHJlIFRo
ZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCisg
ICAgICAgICovCisgICAgICAgIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBu
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBhc3NlcnQobV9vYmplY3QgIT0gbnVsbHB0
cik7CisKKyAgICAgICAgICAgIHN3aXRjaCAobV9vYmplY3QtPm1fdHlwZSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBjYXNlIGJhc2ljX2pzb246OnZhbHVlX3Q6Om9iamVjdDoKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vy
cm9yPigiY2Fubm90IHVzZSBvcGVyYXRvcltdIGZvciBvYmplY3QgaXRlcmF0b3JzIik7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY2FzZSBiYXNpY19qc29uOjp2YWx1ZV90
OjphcnJheToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAq
c3RkOjpuZXh0KG1faXQuYXJyYXlfaXRlcmF0b3IsIG4pOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFsdWVfdDo6bnVsbDoKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6b3V0X29mX3JhbmdlPigi
Y2Fubm90IGdldCB2YWx1ZSIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9p
dC5wcmltaXRpdmVfaXRlcmF0b3IgPT0gLW4pCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAqbV9vYmplY3Q7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6Om91dF9vZl9yYW5nZT4oImNhbm5vdCBnZXQg
dmFsdWUiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAgICBAYnJpZWYgIHJldHVy
biB0aGUga2V5IG9mIGFuIG9iamVjdCBpdGVyYXRvcgorICAgICAgICBAcHJlIFRoZSBpdGVyYXRv
ciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCisgICAgICAgICov
CisgICAgICAgIHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlwZSBrZXkoKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICBhc3NlcnQobV9vYmplY3QgIT0gbnVsbHB0cik7CisKKyAgICAgICAg
ICAgIGlmIChtX29iamVjdC0+aXNfb2JqZWN0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1faXQub2JqZWN0X2l0ZXJhdG9yLT5maXJzdDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUaHJvdzxz
dGQ6OmRvbWFpbl9lcnJvcj4oImNhbm5vdCB1c2Uga2V5KCkgZm9yIG5vbi1vYmplY3QgaXRlcmF0
b3JzIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAg
QGJyaWVmICByZXR1cm4gdGhlIHZhbHVlIG9mIGFuIGl0ZXJhdG9yCisgICAgICAgIEBwcmUgVGhl
IGl0ZXJhdG9yIGlzIGluaXRpYWxpemVkOyBpLmUuIGBtX29iamVjdCAhPSBudWxscHRyYC4KKyAg
ICAgICAgKi8KKyAgICAgICAgcmVmZXJlbmNlIHZhbHVlKCkgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdG9yKigpOworICAgICAgICB9CisKKyAgICAgIHByaXZhdGU6
CisgICAgICAgIC8vLyBhc3NvY2lhdGVkIEpTT04gaW5zdGFuY2UKKyAgICAgICAgcG9pbnRlciBt
X29iamVjdCA9IG51bGxwdHI7CisgICAgICAgIC8vLyB0aGUgYWN0dWFsIGl0ZXJhdG9yIG9mIHRo
ZSBhc3NvY2lhdGVkIGluc3RhbmNlCisgICAgICAgIGludGVybmFsX2l0ZXJhdG9yIG1faXQgPSBp
bnRlcm5hbF9pdGVyYXRvcigpOworICAgIH07CisKKyAgICAvKiEKKyAgICBAYnJpZWYgYSBtdXRh
YmxlIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3IgZm9yIHRoZSBAcmVmIGJhc2ljX2pzb24gY2xhc3MK
KworICAgIEByZXF1aXJlbWVudCBUaGUgY2xhc3Mgc2F0aXNmaWVzIHRoZSBmb2xsb3dpbmcgY29u
Y2VwdCByZXF1aXJlbWVudHM6CisgICAgLSBbUmFuZG9tQWNjZXNzSXRlcmF0b3JdKGh0dHA6Ly9l
bi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNlcHQvUmFuZG9tQWNjZXNzSXRlcmF0b3IpOgor
ICAgICAgVGhlIGl0ZXJhdG9yIHRoYXQgY2FuIGJlIG1vdmVkIHRvIHBvaW50IChmb3J3YXJkIGFu
ZCBiYWNrd2FyZCkgdG8gYW55CisgICAgICBlbGVtZW50IGluIGNvbnN0YW50IHRpbWUuCisgICAg
LSBbT3V0cHV0SXRlcmF0b3JdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNl
cHQvT3V0cHV0SXRlcmF0b3IpOgorICAgICAgSXQgaXMgcG9zc2libGUgdG8gd3JpdGUgdG8gdGhl
IHBvaW50ZWQtdG8gZWxlbWVudC4KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8K
KyAgICBjbGFzcyBpdGVyYXRvciA6IHB1YmxpYyBjb25zdF9pdGVyYXRvcgorICAgIHsKKyAgICAg
IHB1YmxpYzoKKyAgICAgICAgdXNpbmcgYmFzZV9pdGVyYXRvciA9IGNvbnN0X2l0ZXJhdG9yOwor
ICAgICAgICB1c2luZyBwb2ludGVyID0gdHlwZW5hbWUgYmFzaWNfanNvbjo6cG9pbnRlcjsKKyAg
ICAgICAgdXNpbmcgcmVmZXJlbmNlID0gdHlwZW5hbWUgYmFzaWNfanNvbjo6cmVmZXJlbmNlOwor
CisgICAgICAgIC8vLyBkZWZhdWx0IGNvbnN0cnVjdG9yCisgICAgICAgIGl0ZXJhdG9yKCkgPSBk
ZWZhdWx0OworCisgICAgICAgIC8vLyBjb25zdHJ1Y3RvciBmb3IgYSBnaXZlbiBKU09OIGluc3Rh
bmNlCisgICAgICAgIGV4cGxpY2l0IGl0ZXJhdG9yKHBvaW50ZXIgb2JqZWN0KSBub2V4Y2VwdAor
ICAgICAgICAgICAgOiBiYXNlX2l0ZXJhdG9yKG9iamVjdCkKKyAgICAgICAge30KKworICAgICAg
ICAvLy8gY29weSBjb25zdHJ1Y3RvcgorICAgICAgICBpdGVyYXRvcihjb25zdCBpdGVyYXRvciYg
b3RoZXIpIG5vZXhjZXB0CisgICAgICAgICAgICA6IGJhc2VfaXRlcmF0b3Iob3RoZXIpCisgICAg
ICAgIHt9CisKKyAgICAgICAgLy8vIGNvcHkgYXNzaWdubWVudAorICAgICAgICBpdGVyYXRvciYg
b3BlcmF0b3I9KGl0ZXJhdG9yIG90aGVyKSBub2V4Y2VwdCgKKyAgICAgICAgICAgIHN0ZDo6aXNf
bm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8cG9pbnRlcj46OnZhbHVlIGFuZAorICAgICAgICAg
ICAgc3RkOjppc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxwb2ludGVyPjo6dmFsdWUgYW5kCisg
ICAgICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPGludGVybmFsX2l0
ZXJhdG9yPjo6dmFsdWUgYW5kCisgICAgICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9hc3Np
Z25hYmxlPGludGVybmFsX2l0ZXJhdG9yPjo6dmFsdWUKKyAgICAgICAgKQorICAgICAgICB7Cisg
ICAgICAgICAgICBiYXNlX2l0ZXJhdG9yOjpvcGVyYXRvcj0ob3RoZXIpOworICAgICAgICAgICAg
cmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLy8vIHJldHVybiBhIHJlZmVyZW5j
ZSB0byB0aGUgdmFsdWUgcG9pbnRlZCB0byBieSB0aGUgaXRlcmF0b3IKKyAgICAgICAgcmVmZXJl
bmNlIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjb25z
dF9jYXN0PHJlZmVyZW5jZT4oYmFzZV9pdGVyYXRvcjo6b3BlcmF0b3IqKCkpOworICAgICAgICB9
CisKKyAgICAgICAgLy8vIGRlcmVmZXJlbmNlIHRoZSBpdGVyYXRvcgorICAgICAgICBwb2ludGVy
IG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gY29uc3Rf
Y2FzdDxwb2ludGVyPihiYXNlX2l0ZXJhdG9yOjpvcGVyYXRvci0+KCkpOworICAgICAgICB9CisK
KyAgICAgICAgLy8vIHBvc3QtaW5jcmVtZW50IChpdCsrKQorICAgICAgICBpdGVyYXRvciBvcGVy
YXRvcisrKGludCkKKyAgICAgICAgeworICAgICAgICAgICAgaXRlcmF0b3IgcmVzdWx0ID0gKnRo
aXM7CisgICAgICAgICAgICBiYXNlX2l0ZXJhdG9yOjpvcGVyYXRvcisrKCk7CisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgLy8vIHByZS1pbmNyZW1lbnQg
KCsraXQpCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgYmFzZV9pdGVyYXRvcjo6b3BlcmF0b3IrKygpOworICAgICAgICAgICAgcmV0dXJuICp0
aGlzOworICAgICAgICB9CisKKyAgICAgICAgLy8vIHBvc3QtZGVjcmVtZW50IChpdC0tKQorICAg
ICAgICBpdGVyYXRvciBvcGVyYXRvci0tKGludCkKKyAgICAgICAgeworICAgICAgICAgICAgaXRl
cmF0b3IgcmVzdWx0ID0gKnRoaXM7CisgICAgICAgICAgICBiYXNlX2l0ZXJhdG9yOjpvcGVyYXRv
ci0tKCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAg
Ly8vIHByZS1kZWNyZW1lbnQgKC0taXQpCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvci0tKCkK
KyAgICAgICAgeworICAgICAgICAgICAgYmFzZV9pdGVyYXRvcjo6b3BlcmF0b3ItLSgpOworICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLy8vIGFkZCB0byBp
dGVyYXRvcgorICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgaSkK
KyAgICAgICAgeworICAgICAgICAgICAgYmFzZV9pdGVyYXRvcjo6b3BlcmF0b3IrPShpKTsKKyAg
ICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyBzdWJ0cmFj
dCBmcm9tIGl0ZXJhdG9yCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2Vf
dHlwZSBpKQorICAgICAgICB7CisgICAgICAgICAgICBiYXNlX2l0ZXJhdG9yOjpvcGVyYXRvci09
KGkpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLy8v
IGFkZCB0byBpdGVyYXRvcgorICAgICAgICBpdGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90
eXBlIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gKnRoaXM7CisgICAg
ICAgICAgICByZXN1bHQgKz0gaTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IH0KKworICAgICAgICAvLy8gc3VidHJhY3QgZnJvbSBpdGVyYXRvcgorICAgICAgICBpdGVyYXRv
ciBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gKnRoaXM7CisgICAgICAgICAgICByZXN1bHQgLT0gaTsKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICAvLy8gcmV0dXJuIGRpZmZlcmVu
Y2UKKyAgICAgICAgZGlmZmVyZW5jZV90eXBlIG9wZXJhdG9yLShjb25zdCBpdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBiYXNlX2l0ZXJhdG9yOjpv
cGVyYXRvci0ob3RoZXIpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIGFjY2VzcyB0byBzdWNj
ZXNzb3IKKyAgICAgICAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIG4pIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjb25zdF9jYXN0PHJlZmVyZW5jZT4o
YmFzZV9pdGVyYXRvcjo6b3BlcmF0b3JbXShuKSk7CisgICAgICAgIH0KKworICAgICAgICAvLy8g
cmV0dXJuIHRoZSB2YWx1ZSBvZiBhbiBpdGVyYXRvcgorICAgICAgICByZWZlcmVuY2UgdmFsdWUo
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxyZWZlcmVu
Y2U+KGJhc2VfaXRlcmF0b3I6OnZhbHVlKCkpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8q
IQorICAgIEBicmllZiBhIHRlbXBsYXRlIGZvciBhIHJldmVyc2UgaXRlcmF0b3IgY2xhc3MKKwor
ICAgIEB0cGFyYW0gQmFzZSB0aGUgYmFzZSBpdGVyYXRvciB0eXBlIHRvIHJldmVyc2UuIFZhbGlk
IHR5cGVzIGFyZSBAcmVmCisgICAgaXRlcmF0b3IgKHRvIGNyZWF0ZSBAcmVmIHJldmVyc2VfaXRl
cmF0b3IpIGFuZCBAcmVmIGNvbnN0X2l0ZXJhdG9yICh0bworICAgIGNyZWF0ZSBAcmVmIGNvbnN0
X3JldmVyc2VfaXRlcmF0b3IpLgorCisgICAgQHJlcXVpcmVtZW50IFRoZSBjbGFzcyBzYXRpc2Zp
ZXMgdGhlIGZvbGxvd2luZyBjb25jZXB0IHJlcXVpcmVtZW50czoKKyAgICAtIFtSYW5kb21BY2Nl
c3NJdGVyYXRvcl0oaHR0cDovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29uY2VwdC9SYW5k
b21BY2Nlc3NJdGVyYXRvcik6CisgICAgICBUaGUgaXRlcmF0b3IgdGhhdCBjYW4gYmUgbW92ZWQg
dG8gcG9pbnQgKGZvcndhcmQgYW5kIGJhY2t3YXJkKSB0byBhbnkKKyAgICAgIGVsZW1lbnQgaW4g
Y29uc3RhbnQgdGltZS4KKyAgICAtIFtPdXRwdXRJdGVyYXRvcl0oaHR0cDovL2VuLmNwcHJlZmVy
ZW5jZS5jb20vdy9jcHAvY29uY2VwdC9PdXRwdXRJdGVyYXRvcik6CisgICAgICBJdCBpcyBwb3Nz
aWJsZSB0byB3cml0ZSB0byB0aGUgcG9pbnRlZC10byBlbGVtZW50IChvbmx5IGlmIEBhIEJhc2Ug
aXMKKyAgICAgIEByZWYgaXRlcmF0b3IpLgorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAg
ICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2U+CisgICAgY2xhc3MganNvbl9yZXZlcnNl
X2l0ZXJhdG9yIDogcHVibGljIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxCYXNlPgorICAgIHsKKyAg
ICAgIHB1YmxpYzoKKyAgICAgICAgLy8vIHNob3J0Y3V0IHRvIHRoZSByZXZlcnNlIGl0ZXJhdG9y
IGFkYXB0b3IKKyAgICAgICAgdXNpbmcgYmFzZV9pdGVyYXRvciA9IHN0ZDo6cmV2ZXJzZV9pdGVy
YXRvcjxCYXNlPjsKKyAgICAgICAgLy8vIHRoZSByZWZlcmVuY2UgdHlwZSBmb3IgdGhlIHBvaW50
ZWQtdG8gZWxlbWVudAorICAgICAgICB1c2luZyByZWZlcmVuY2UgPSB0eXBlbmFtZSBCYXNlOjpy
ZWZlcmVuY2U7CisKKyAgICAgICAgLy8vIGNyZWF0ZSByZXZlcnNlIGl0ZXJhdG9yIGZyb20gaXRl
cmF0b3IKKyAgICAgICAganNvbl9yZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHR5cGVuYW1lIGJhc2Vf
aXRlcmF0b3I6Oml0ZXJhdG9yX3R5cGUmIGl0KSBub2V4Y2VwdAorICAgICAgICAgICAgOiBiYXNl
X2l0ZXJhdG9yKGl0KQorICAgICAgICB7fQorCisgICAgICAgIC8vLyBjcmVhdGUgcmV2ZXJzZSBp
dGVyYXRvciBmcm9tIGJhc2UgY2xhc3MKKyAgICAgICAganNvbl9yZXZlcnNlX2l0ZXJhdG9yKGNv
bnN0IGJhc2VfaXRlcmF0b3ImIGl0KSBub2V4Y2VwdAorICAgICAgICAgICAgOiBiYXNlX2l0ZXJh
dG9yKGl0KQorICAgICAgICB7fQorCisgICAgICAgIC8vLyBwb3N0LWluY3JlbWVudCAoaXQrKykK
KyAgICAgICAganNvbl9yZXZlcnNlX2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYmFzZV9pdGVyYXRvcjo6b3BlcmF0b3IrKygxKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vLyBwcmUtaW5jcmVtZW50ICgrK2l0KQorICAgICAgICBqc29uX3Jl
dmVyc2VfaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBiYXNl
X2l0ZXJhdG9yOjpvcGVyYXRvcisrKCk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
ICAgIH0KKworICAgICAgICAvLy8gcG9zdC1kZWNyZW1lbnQgKGl0LS0pCisgICAgICAgIGpzb25f
cmV2ZXJzZV9pdGVyYXRvciBvcGVyYXRvci0tKGludCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGJhc2VfaXRlcmF0b3I6Om9wZXJhdG9yLS0oMSk7CisgICAgICAgIH0KKworICAgICAg
ICAvLy8gcHJlLWRlY3JlbWVudCAoLS1pdCkKKyAgICAgICAganNvbl9yZXZlcnNlX2l0ZXJhdG9y
JiBvcGVyYXRvci0tKCkKKyAgICAgICAgeworICAgICAgICAgICAgYmFzZV9pdGVyYXRvcjo6b3Bl
cmF0b3ItLSgpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAg
ICAgLy8vIGFkZCB0byBpdGVyYXRvcgorICAgICAgICBqc29uX3JldmVyc2VfaXRlcmF0b3ImIG9w
ZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJhc2Vf
aXRlcmF0b3I6Om9wZXJhdG9yKz0oaSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
ICAgIH0KKworICAgICAgICAvLy8gYWRkIHRvIGl0ZXJhdG9yCisgICAgICAgIGpzb25fcmV2ZXJz
ZV9pdGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIGkpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gKnRoaXM7CisgICAgICAgICAgICByZXN1bHQgKz0g
aTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICAvLy8g
c3VidHJhY3QgZnJvbSBpdGVyYXRvcgorICAgICAgICBqc29uX3JldmVyc2VfaXRlcmF0b3Igb3Bl
cmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBpKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBh
dXRvIHJlc3VsdCA9ICp0aGlzOworICAgICAgICAgICAgcmVzdWx0IC09IGk7CisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgLy8vIHJldHVybiBkaWZmZXJl
bmNlCisgICAgICAgIGRpZmZlcmVuY2VfdHlwZSBvcGVyYXRvci0oY29uc3QganNvbl9yZXZlcnNl
X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMtPmJhc2UoKSAtIG90aGVyLmJhc2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyBhY2Nl
c3MgdG8gc3VjY2Vzc29yCisgICAgICAgIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2Vf
dHlwZSBuKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKih0aGlzLT5vcGVy
YXRvcisobikpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIHJldHVybiB0aGUga2V5IG9mIGFu
IG9iamVjdCBpdGVyYXRvcgorICAgICAgICB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUga2V5
KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBpdCA9IC0tdGhpcy0+YmFzZSgp
OworICAgICAgICAgICAgcmV0dXJuIGl0LmtleSgpOworICAgICAgICB9CisKKyAgICAgICAgLy8v
IHJldHVybiB0aGUgdmFsdWUgb2YgYW4gaXRlcmF0b3IKKyAgICAgICAgcmVmZXJlbmNlIHZhbHVl
KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBpdCA9IC0tdGhpcy0+YmFzZSgp
OworICAgICAgICAgICAgcmV0dXJuIGl0Lm9wZXJhdG9yICogKCk7CisgICAgICAgIH0KKyAgICB9
OworCisKKyAgcHJpdmF0ZToKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy8gbGV4
ZXIgYW5kIHBhcnNlciAvLworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIC8qIQor
ICAgIEBicmllZiBsZXhpY2FsIGFuYWx5c2lzCisKKyAgICBUaGlzIGNsYXNzIG9yZ2FuaXplcyB0
aGUgbGV4aWNhbCBhbmFseXNpcyBkdXJpbmcgSlNPTiBkZXNlcmlhbGl6YXRpb24uIFRoZQorICAg
IGNvcmUgb2YgaXQgaXMgYSBzY2FubmVyIGdlbmVyYXRlZCBieSBbcmUyY10oaHR0cDovL3JlMmMu
b3JnKSB0aGF0CisgICAgcHJvY2Vzc2VzIGEgYnVmZmVyIGFuZCByZWNvZ25pemVzIHRva2VucyBh
Y2NvcmRpbmcgdG8gUkZDIDcxNTkuCisgICAgKi8KKyAgICBjbGFzcyBsZXhlcgorICAgIHsKKyAg
ICAgIHB1YmxpYzoKKyAgICAgICAgLy8vIHRva2VuIHR5cGVzIGZvciB0aGUgcGFyc2VyCisgICAg
ICAgIGVudW0gY2xhc3MgdG9rZW5fdHlwZQorICAgICAgICB7CisgICAgICAgICAgICB1bmluaXRp
YWxpemVkLCAgIC8vLzwgaW5kaWNhdGluZyB0aGUgc2Nhbm5lciBpcyB1bmluaXRpYWxpemVkCisg
ICAgICAgICAgICBsaXRlcmFsX3RydWUsICAgIC8vLzwgdGhlIGB0cnVlYCBsaXRlcmFsCisgICAg
ICAgICAgICBsaXRlcmFsX2ZhbHNlLCAgIC8vLzwgdGhlIGBmYWxzZWAgbGl0ZXJhbAorICAgICAg
ICAgICAgbGl0ZXJhbF9udWxsLCAgICAvLy88IHRoZSBgbnVsbGAgbGl0ZXJhbAorICAgICAgICAg
ICAgdmFsdWVfc3RyaW5nLCAgICAvLy88IGEgc3RyaW5nIC0tIHVzZSBnZXRfc3RyaW5nKCkgZm9y
IGFjdHVhbCB2YWx1ZQorICAgICAgICAgICAgdmFsdWVfbnVtYmVyLCAgICAvLy88IGEgbnVtYmVy
IC0tIHVzZSBnZXRfbnVtYmVyKCkgZm9yIGFjdHVhbCB2YWx1ZQorICAgICAgICAgICAgYmVnaW5f
YXJyYXksICAgICAvLy88IHRoZSBjaGFyYWN0ZXIgZm9yIGFycmF5IGJlZ2luIGBbYAorICAgICAg
ICAgICAgYmVnaW5fb2JqZWN0LCAgICAvLy88IHRoZSBjaGFyYWN0ZXIgZm9yIG9iamVjdCBiZWdp
biBge2AKKyAgICAgICAgICAgIGVuZF9hcnJheSwgICAgICAgLy8vPCB0aGUgY2hhcmFjdGVyIGZv
ciBhcnJheSBlbmQgYF1gCisgICAgICAgICAgICBlbmRfb2JqZWN0LCAgICAgIC8vLzwgdGhlIGNo
YXJhY3RlciBmb3Igb2JqZWN0IGVuZCBgfWAKKyAgICAgICAgICAgIG5hbWVfc2VwYXJhdG9yLCAg
Ly8vPCB0aGUgbmFtZSBzZXBhcmF0b3IgYDpgCisgICAgICAgICAgICB2YWx1ZV9zZXBhcmF0b3Is
IC8vLzwgdGhlIHZhbHVlIHNlcGFyYXRvciBgLGAKKyAgICAgICAgICAgIHBhcnNlX2Vycm9yLCAg
ICAgLy8vPCBpbmRpY2F0aW5nIGEgcGFyc2UgZXJyb3IKKyAgICAgICAgICAgIGVuZF9vZl9pbnB1
dCAgICAgLy8vPCBpbmRpY2F0aW5nIHRoZSBlbmQgb2YgdGhlIGlucHV0IGJ1ZmZlcgorICAgICAg
ICB9OworCisgICAgICAgIC8vLyB0aGUgY2hhciB0eXBlIHRvIHVzZSBpbiB0aGUgbGV4ZXIKKyAg
ICAgICAgdXNpbmcgbGV4ZXJfY2hhcl90ID0gdW5zaWduZWQgY2hhcjsKKworICAgICAgICAvLy8g
YSBsZXhlciBmcm9tIGEgYnVmZmVyIHdpdGggZ2l2ZW4gbGVuZ3RoCisgICAgICAgIGxleGVyKGNv
bnN0IGxleGVyX2NoYXJfdCogYnVmZiwgY29uc3Qgc2l6ZV90IGxlbikgbm9leGNlcHQKKyAgICAg
ICAgICAgIDogbV9jb250ZW50KGJ1ZmYpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydCht
X2NvbnRlbnQgIT0gbnVsbHB0cik7CisgICAgICAgICAgICBtX3N0YXJ0ID0gbV9jdXJzb3IgPSBt
X2NvbnRlbnQ7CisgICAgICAgICAgICBtX2xpbWl0ID0gbV9jb250ZW50ICsgbGVuOworICAgICAg
ICB9CisKKyAgICAgICAgLy8vIGEgbGV4ZXIgZnJvbSBhbiBpbnB1dCBzdHJlYW0KKyAgICAgICAg
ZXhwbGljaXQgbGV4ZXIoc3RkOjppc3RyZWFtJiBzKQorICAgICAgICAgICAgOiBtX3N0cmVhbSgm
cyksIG1fbGluZV9idWZmZXIoKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBpbW1lZGlhdGVs
eSBhYm9ydCBpZiBzdHJlYW0gaXMgZXJyb25lb3VzCisgICAgICAgICAgICBpZiAocy5mYWlsKCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjppbnZhbGlkX2FyZ3Vt
ZW50Pigic3RyZWFtIGVycm9yOiAiICsgIHN0ZDo6c3RyaW5nKHN0cmVycm9yKGVycm5vKSkpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBmaWxsIGJ1ZmZlcgorICAgICAgICAgICAg
ZmlsbF9saW5lX2J1ZmZlcigpOworCisgICAgICAgICAgICAvLyBza2lwIFVURi04IGJ5dGUtb3Jk
ZXIgbWFyaworICAgICAgICAgICAgaWYgKG1fbGluZV9idWZmZXIuc2l6ZSgpID49IDMgYW5kIG1f
bGluZV9idWZmZXIuc3Vic3RyKDAsIDMpID09ICJceEVGXHhCQlx4QkYiKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG1fbGluZV9idWZmZXJbMF0gPSAnICc7CisgICAgICAgICAgICAg
ICAgbV9saW5lX2J1ZmZlclsxXSA9ICcgJzsKKyAgICAgICAgICAgICAgICBtX2xpbmVfYnVmZmVy
WzJdID0gJyAnOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gc3dpdGNo
IG9mZiB1bndhbnRlZCBmdW5jdGlvbnMgKGR1ZSB0byBwb2ludGVyIG1lbWJlcnMpCisgICAgICAg
IGxleGVyKCkgPSBkZWxldGU7CisgICAgICAgIGxleGVyKGNvbnN0IGxleGVyJikgPSBkZWxldGU7
CisgICAgICAgIGxleGVyIG9wZXJhdG9yPShjb25zdCBsZXhlciYpID0gZGVsZXRlOworCisgICAg
ICAgIC8qIQorICAgICAgICBAYnJpZWYgY3JlYXRlIGEgc3RyaW5nIGZyb20gb25lIG9yIHR3byBV
bmljb2RlIGNvZGUgcG9pbnRzCisKKyAgICAgICAgVGhlcmUgYXJlIHR3byBjYXNlczogKDEpIEBh
IGNvZGVwb2ludDEgaXMgaW4gdGhlIEJhc2ljIE11bHRpbGluZ3VhbAorICAgICAgICBQbGFuZSAo
VSswMDAwIHRocm91Z2ggVStGRkZGKSBhbmQgQGEgY29kZXBvaW50MiBpcyAwLCBvciAoMikKKyAg
ICAgICAgQGEgY29kZXBvaW50MSBhbmQgQGEgY29kZXBvaW50MiBhcmUgYSBVVEYtMTYgc3Vycm9n
YXRlIHBhaXIgdG8KKyAgICAgICAgcmVwcmVzZW50IGEgY29kZSBwb2ludCBhYm92ZSBVK0ZGRkYu
CisKKyAgICAgICAgQHBhcmFtW2luXSBjb2RlcG9pbnQxICB0aGUgY29kZSBwb2ludCAoY2FuIGJl
IGhpZ2ggc3Vycm9nYXRlKQorICAgICAgICBAcGFyYW1baW5dIGNvZGVwb2ludDIgIHRoZSBjb2Rl
IHBvaW50IChjYW4gYmUgbG93IHN1cnJvZ2F0ZSBvciAwKQorCisgICAgICAgIEByZXR1cm4gc3Ry
aW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb2RlIHBvaW50OyB0aGUgbGVuZ3RoIG9mIHRoZQor
ICAgICAgICByZXN1bHQgc3RyaW5nIGlzIGJldHdlZW4gMSBhbmQgNCBjaGFyYWN0ZXJzLgorCisg
ICAgICAgIEB0aHJvdyBzdGQ6Om91dF9vZl9yYW5nZSBpZiBjb2RlIHBvaW50IGlzID4gMHgxMGZm
ZmY7IGV4YW1wbGU6IGAiY29kZQorICAgICAgICBwb2ludHMgYWJvdmUgMHgxMEZGRkYgYXJlIGlu
dmFsaWQiYAorICAgICAgICBAdGhyb3cgc3RkOjppbnZhbGlkX2FyZ3VtZW50IGlmIHRoZSBsb3cg
c3Vycm9nYXRlIGlzIGludmFsaWQ7IGV4YW1wbGU6CisgICAgICAgIGAiIm1pc3Npbmcgb3Igd3Jv
bmcgbG93IHN1cnJvZ2F0ZSIiYAorCisgICAgICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisg
ICAgICAgIEBzZWUgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVVRGLTgjU2FtcGxlX2Nv
ZGU+CisgICAgICAgICovCisgICAgICAgIHN0YXRpYyBzdHJpbmdfdCB0b191bmljb2RlKGNvbnN0
IHN0ZDo6c2l6ZV90IGNvZGVwb2ludDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6c2l6ZV90IGNvZGVwb2ludDIgPSAwKQorICAgICAgICB7CisgICAgICAg
ICAgICAvLyBjYWxjdWxhdGUgdGhlIGNvZGUgcG9pbnQgZnJvbSB0aGUgZ2l2ZW4gY29kZSBwb2lu
dHMKKyAgICAgICAgICAgIHN0ZDo6c2l6ZV90IGNvZGVwb2ludCA9IGNvZGVwb2ludDE7CisKKyAg
ICAgICAgICAgIC8vIGNoZWNrIGlmIGNvZGVwb2ludDEgaXMgYSBoaWdoIHN1cnJvZ2F0ZQorICAg
ICAgICAgICAgaWYgKGNvZGVwb2ludDEgPj0gMHhEODAwIGFuZCBjb2RlcG9pbnQxIDw9IDB4REJG
RikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiBjb2RlcG9pbnQy
IGlzIGEgbG93IHN1cnJvZ2F0ZQorICAgICAgICAgICAgICAgIGlmIChjb2RlcG9pbnQyID49IDB4
REMwMCBhbmQgY29kZXBvaW50MiA8PSAweERGRkYpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBjb2RlcG9pbnQgPQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGln
aCBzdXJyb2dhdGUgb2NjdXBpZXMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgMjIgYml0cworICAgICAg
ICAgICAgICAgICAgICAgICAgKGNvZGVwb2ludDEgPDwgMTApCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBsb3cgc3Vycm9nYXRlIG9jY3VwaWVzIHRoZSBsZWFzdCBzaWduaWZpY2FudCAxNSBi
aXRzCisgICAgICAgICAgICAgICAgICAgICAgICArIGNvZGVwb2ludDIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHRoZXJlIGlzIHN0aWxsIHRoZSAweEQ4MDAsIDB4REMwMCBhbmQgMHgxMDAw
MCBub2lzZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIHJlc3VsdCBzbyB3ZSBo
YXZlIHRvIHN1YnRyYWN0IHdpdGg6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAoMHhEODAw
IDw8IDEwKSArIERDMDAgLSAweDEwMDAwID0gMHgzNUZEQzAwCisgICAgICAgICAgICAgICAgICAg
ICAgICAtIDB4MzVGREMwMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjppbnZh
bGlkX2FyZ3VtZW50PigibWlzc2luZyBvciB3cm9uZyBsb3cgc3Vycm9nYXRlIik7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdHJpbmdfdCByZXN1bHQ7
CisKKyAgICAgICAgICAgIGlmIChjb2RlcG9pbnQgPCAweDgwKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIC8vIDEtYnl0ZSBjaGFyYWN0ZXJzOiAweHh4eHh4eCAoQVNDSUkpCisgICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxLCBzdGF0aWNfY2FzdDx0eXBlbmFtZSBzdHJpbmdf
dDo6dmFsdWVfdHlwZT4oY29kZXBvaW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIGlmIChjb2RlcG9pbnQgPD0gMHg3ZmYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgLy8gMi1ieXRlIGNoYXJhY3RlcnM6IDExMHh4eHh4IDEweHh4eHh4CisgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgxLCBzdGF0aWNfY2FzdDx0eXBlbmFtZSBzdHJpbmdfdDo6dmFsdWVf
dHlwZT4oMHhDMCB8ICgoY29kZXBvaW50ID4+IDYpICYgMHgxRikpKTsKKyAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKDEsIHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0cmluZ190Ojp2YWx1ZV90
eXBlPigweDgwIHwgKGNvZGVwb2ludCAmIDB4M0YpKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIGlmIChjb2RlcG9pbnQgPD0gMHhmZmZmKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIC8vIDMtYnl0ZSBjaGFyYWN0ZXJzOiAxMTEweHh4eCAxMHh4eHh4eCAxMHh4eHh4
eAorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSwgc3RhdGljX2Nhc3Q8dHlwZW5hbWUg
c3RyaW5nX3Q6OnZhbHVlX3R5cGU+KDB4RTAgfCAoKGNvZGVwb2ludCA+PiAxMikgJiAweDBGKSkp
OworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSwgc3RhdGljX2Nhc3Q8dHlwZW5hbWUg
c3RyaW5nX3Q6OnZhbHVlX3R5cGU+KDB4ODAgfCAoKGNvZGVwb2ludCA+PiA2KSAmIDB4M0YpKSk7
CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxLCBzdGF0aWNfY2FzdDx0eXBlbmFtZSBz
dHJpbmdfdDo6dmFsdWVfdHlwZT4oMHg4MCB8IChjb2RlcG9pbnQgJiAweDNGKSkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoY29kZXBvaW50IDw9IDB4MTBmZmZmKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIDQtYnl0ZSBjaGFyYWN0ZXJzOiAxMTExMHh4
eCAxMHh4eHh4eCAxMHh4eHh4eCAxMHh4eHh4eAorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoMSwgc3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3RyaW5nX3Q6OnZhbHVlX3R5cGU+KDB4RjAgfCAo
KGNvZGVwb2ludCA+PiAxOCkgJiAweDA3KSkpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoMSwgc3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3RyaW5nX3Q6OnZhbHVlX3R5cGU+KDB4ODAgfCAo
KGNvZGVwb2ludCA+PiAxMikgJiAweDNGKSkpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoMSwgc3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3RyaW5nX3Q6OnZhbHVlX3R5cGU+KDB4ODAgfCAo
KGNvZGVwb2ludCA+PiA2KSAmIDB4M0YpKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgxLCBzdGF0aWNfY2FzdDx0eXBlbmFtZSBzdHJpbmdfdDo6dmFsdWVfdHlwZT4oMHg4MCB8IChj
b2RlcG9pbnQgJiAweDNGKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6b3V0X29mX3JhbmdlPigiY29k
ZSBwb2ludHMgYWJvdmUgMHgxMEZGRkYgYXJlIGludmFsaWQiKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyByZXR1
cm4gbmFtZSBvZiB2YWx1ZXMgb2YgdHlwZSB0b2tlbl90eXBlIChvbmx5IHVzZWQgZm9yIGVycm9y
cykKKyAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIHRva2VuX3R5cGVfbmFtZShjb25zdCB0b2tl
bl90eXBlIHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAodCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBjYXNlIHRva2VuX3R5cGU6OnVuaW5pdGlhbGl6ZWQ6CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAiPHVuaW5pdGlhbGl6ZWQ+IjsKKyAgICAgICAgICAgICAg
ICBjYXNlIHRva2VuX3R5cGU6OmxpdGVyYWxfdHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICJ0cnVlIGxpdGVyYWwiOworICAgICAgICAgICAgICAgIGNhc2UgdG9rZW5fdHlwZTo6bGl0
ZXJhbF9mYWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmYWxzZSBsaXRlcmFsIjsK
KyAgICAgICAgICAgICAgICBjYXNlIHRva2VuX3R5cGU6OmxpdGVyYWxfbnVsbDoKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICJudWxsIGxpdGVyYWwiOworICAgICAgICAgICAgICAgIGNhc2Ug
dG9rZW5fdHlwZTo6dmFsdWVfc3RyaW5nOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN0
cmluZyBsaXRlcmFsIjsKKyAgICAgICAgICAgICAgICBjYXNlIHRva2VuX3R5cGU6OnZhbHVlX251
bWJlcjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJudW1iZXIgbGl0ZXJhbCI7CisgICAg
ICAgICAgICAgICAgY2FzZSB0b2tlbl90eXBlOjpiZWdpbl9hcnJheToKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICInWyciOworICAgICAgICAgICAgICAgIGNhc2UgdG9rZW5fdHlwZTo6YmVn
aW5fb2JqZWN0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIid7JyI7CisgICAgICAgICAg
ICAgICAgY2FzZSB0b2tlbl90eXBlOjplbmRfYXJyYXk6CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAiJ10nIjsKKyAgICAgICAgICAgICAgICBjYXNlIHRva2VuX3R5cGU6OmVuZF9vYmplY3Q6
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiJ30nIjsKKyAgICAgICAgICAgICAgICBjYXNl
IHRva2VuX3R5cGU6Om5hbWVfc2VwYXJhdG9yOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Iic6JyI7CisgICAgICAgICAgICAgICAgY2FzZSB0b2tlbl90eXBlOjp2YWx1ZV9zZXBhcmF0b3I6
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiJywnIjsKKyAgICAgICAgICAgICAgICBjYXNl
IHRva2VuX3R5cGU6OnBhcnNlX2Vycm9yOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIjxw
YXJzZSBlcnJvcj4iOworICAgICAgICAgICAgICAgIGNhc2UgdG9rZW5fdHlwZTo6ZW5kX29mX2lu
cHV0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gImVuZCBvZiBpbnB1dCI7CisgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IC8vIGNhdGNoIG5vbi1lbnVtIHZhbHVlcworICAgICAgICAgICAgICAgICAgICByZXR1cm4gInVu
a25vd24gdG9rZW4iOyAvLyBMQ09WX0VYQ0xfTElORQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAgICBUaGlzIGZ1bmN0aW9u
IGltcGxlbWVudHMgYSBzY2FubmVyIGZvciBKU09OLiBJdCBpcyBzcGVjaWZpZWQgdXNpbmcKKyAg
ICAgICAgcmVndWxhciBleHByZXNzaW9ucyB0aGF0IHRyeSB0byBmb2xsb3cgUkZDIDcxNTkgYXMg
Y2xvc2UgYXMgcG9zc2libGUuCisgICAgICAgIFRoZXNlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYXJl
IHRoZW4gdHJhbnNsYXRlZCBpbnRvIGEgbWluaW1pemVkCisgICAgICAgIGRldGVybWluaXN0aWMg
ZmluaXRlIGF1dG9tYXRvbiAoREZBKSBieSB0aGUgdG9vbAorICAgICAgICBbcmUyY10oaHR0cDov
L3JlMmMub3JnKS4gQXMgYSByZXN1bHQsIHRoZSB0cmFuc2xhdGVkIGNvZGUgZm9yIHRoaXMKKyAg
ICAgICAgZnVuY3Rpb24gY29uc2lzdHMgb2YgYSBsYXJnZSBibG9jayBvZiBjb2RlIHdpdGggYGdv
dG9gIGp1bXBzLgorCisgICAgICAgIEByZXR1cm4gdGhlIGNsYXNzIG9mIHRoZSBuZXh0IHRva2Vu
IHJlYWQgZnJvbSB0aGUgYnVmZmVyCisKKyAgICAgICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIHRo
ZSBsZW5ndGggb2YgdGhlIGlucHV0LlxuCisKKyAgICAgICAgUHJvcG9zaXRpb246IFRoZSBsb29w
IGJlbG93IHdpbGwgYWx3YXlzIHRlcm1pbmF0ZSBmb3IgZmluaXRlIGlucHV0LlxuCisKKyAgICAg
ICAgUHJvb2YgKGJ5IGNvbnRyYWRpY3Rpb24pOiBBc3N1bWUgYSBmaW5pdGUgaW5wdXQuIFRvIGxv
b3AgZm9yZXZlciwgdGhlCisgICAgICAgIGxvb3AgbXVzdCBuZXZlciBoaXQgY29kZSB3aXRoIGEg
YGJyZWFrYCBzdGF0ZW1lbnQuIFRoZSBvbmx5IGNvZGUKKyAgICAgICAgc25pcHBldHMgd2l0aG91
dCBhIGBicmVha2Agc3RhdGVtZW50IGFyZSB0aGUgY29udGludWUgc3RhdGVtZW50cyBmb3IKKyAg
ICAgICAgd2hpdGVzcGFjZSBhbmQgYnl0ZS1vcmRlci1tYXJrcy4gVG8gbG9vcCBmb3JldmVyLCB0
aGUgaW5wdXQgbXVzdCBiZSBhbgorICAgICAgICBpbmZpbml0ZSBzZXF1ZW5jZSBvZiB3aGl0ZXNw
YWNlIG9yIGJ5dGUtb3JkZXItbWFya3MuIFRoaXMgY29udHJhZGljdHMKKyAgICAgICAgdGhlIGFz
c3VtcHRpb24gb2YgZmluaXRlIGlucHV0LCBxLmUuZC4KKyAgICAgICAgKi8KKyAgICAgICAgdG9r
ZW5fdHlwZSBzY2FuKCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKHRydWUpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gcG9pbnRlciBmb3IgYmFja3RyYWNraW5nIGlu
Zm9ybWF0aW9uCisgICAgICAgICAgICAgICAgbV9tYXJrZXIgPSBudWxscHRyOworCisgICAgICAg
ICAgICAgICAgLy8gcmVtZW1iZXIgdGhlIGJlZ2luIG9mIHRoZSB0b2tlbgorICAgICAgICAgICAg
ICAgIG1fc3RhcnQgPSBtX2N1cnNvcjsKKyAgICAgICAgICAgICAgICBhc3NlcnQobV9zdGFydCAh
PSBudWxscHRyKTsKKworCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBs
ZXhlcl9jaGFyX3QgeXljaDsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHl5YWNj
ZXB0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg
eXlibVtdID0KKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgIDMyLCAgMzIsICAgMCwgICAwLCAgMzIsICAgMCwgICAwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgMTYwLCAxMjgsICAgMCwgMTI4LCAxMjgsIDEyOCwgMTI4
LCAxMjgsCisgICAgICAgICAgICAgICAgICAgICAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwg
MTI4LCAxMjgsIDEyOCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDE5MiwgMTkyLCAxOTIsIDE5
MiwgMTkyLCAxOTIsIDE5MiwgMTkyLAorICAgICAgICAgICAgICAgICAgICAgICAgMTkyLCAxOTIs
IDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsCisgICAgICAgICAgICAgICAgICAgICAgICAx
MjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LAorICAgICAgICAg
ICAgICAgICAgICAgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAxMjgsIDEyOCwgMTI4LCAxMjgsICAgMCwgMTI4LCAxMjgs
IDEyOCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAx
MjgsIDEyOCwgMTI4LAorICAgICAgICAgICAgICAgICAgICAgICAgMTI4LCAxMjgsIDEyOCwgMTI4
LCAxMjgsIDEyOCwgMTI4LCAxMjgsCisgICAgICAgICAgICAgICAgICAgICAgICAxMjgsIDEyOCwg
MTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDEy
OCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LAorICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
ICAgICAgICBpZiAoKG1fbGltaXQgLSBtX2N1cnNvcikgPCA1KQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxsX2xpbmVfYnVmZmVyKDUpOyAgICAvLyBM
Q09WX0VYQ0xfTElORQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IHl5Y2ggPSAqbV9jdXJzb3I7CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWJtWzAgKyB5eWNo
XSAmIDMyKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBn
b3RvIGJhc2ljX2pzb25fcGFyc2VyXzY7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1snKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLScpCisgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyInKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHl5Y2ggPD0gMHgwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNl
cl8yOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICchJykKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNp
Y19qc29uX3BhcnNlcl80OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfOTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJysnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pz
b25fcGFyc2VyXzQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJywnKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
b3RvIGJhc2ljX2pzb25fcGFyc2VyXzEwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJz
ZXJfMTI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc5JykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICcvJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNl
cl80OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcwJykKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNp
Y19qc29uX3BhcnNlcl8xMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzE1Owor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnOicpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNf
anNvbl9wYXJzZXJfMTc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1onKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3Bh
cnNlcl8xOTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAnbicpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gJ2UnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ10nKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzIxOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNf
anNvbl9wYXJzZXJfNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2YnKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzIzOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdt
JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl80OworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFzaWNfanNvbl9wYXJzZXJfMjQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh5eWNoIDw9ICd6JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICd0JykKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290
byBiYXNpY19qc29uX3BhcnNlcl8yNTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2Vy
XzQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICd7JykKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBi
YXNpY19qc29uX3BhcnNlcl8yNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnfScpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMjg7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19q
c29uX3BhcnNlcl80OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorYmFzaWNfanNvbl9wYXJzZXJf
MjoKKyAgICAgICAgICAgICAgICAgICAgKyttX2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF90b2tlbl90eXBlID0gdG9rZW5fdHlwZTo6
ZW5kX29mX2lucHV0OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KK2Jhc2ljX2pzb25fcGFyc2VyXzQ6CisgICAgICAgICAgICAgICAgICAgICsr
bV9jdXJzb3I7CitiYXNpY19qc29uX3BhcnNlcl81OgorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3Rva2VuX3R5cGUgPSB0b2tlbl90eXBlOjpwYXJz
ZV9lcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9CitiYXNpY19qc29uX3BhcnNlcl82OgorICAgICAgICAgICAgICAgICAgICArK21fY3Vy
c29yOworICAgICAgICAgICAgICAgICAgICBpZiAobV9saW1pdCA8PSBtX2N1cnNvcikKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlsbF9saW5lX2J1ZmZl
cigxKTsgICAgLy8gTENPVl9FWENMX0xJTkUKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB5eWNoID0gKm1fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAo
eXlibVswICsgeXljaF0gJiAzMikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl82OworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgICAgICB9CitiYXNpY19qc29uX3BhcnNlcl85OgorICAgICAg
ICAgICAgICAgICAgICB5eWFjY2VwdCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHl5Y2ggPSAq
KG1fbWFya2VyID0gKyttX2N1cnNvcik7CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9
IDB4MUYpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFzaWNfanNvbl9wYXJzZXJfNTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBpZiAoeXljaCA8PSAweDdGKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMxOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9IDB4QzEpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNv
bl9wYXJzZXJfNTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBp
ZiAoeXljaCA8PSAweEY0KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMxOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNTsKK2Jhc2ljX2pz
b25fcGFyc2VyXzEwOgorICAgICAgICAgICAgICAgICAgICArK21fY3Vyc29yOworICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3Rva2VuX3R5cGUgPSB0
b2tlbl90eXBlOjp2YWx1ZV9zZXBhcmF0b3I7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorYmFzaWNfanNvbl9wYXJzZXJfMTI6CisgICAgICAg
ICAgICAgICAgICAgIHl5Y2ggPSAqKyttX2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPD0gJy8nKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzAnKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzEzOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc5JykK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNp
Y19qc29uX3BhcnNlcl8xNTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzU7CitiYXNpY19qc29uX3BhcnNlcl8xMzoKKyAg
ICAgICAgICAgICAgICAgICAgeXlhY2NlcHQgPSAxOworICAgICAgICAgICAgICAgICAgICB5eWNo
ID0gKihtX21hcmtlciA9ICsrbV9jdXJzb3IpOworICAgICAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAnRCcpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh5eWNoID09ICcuJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzQzOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPD0gJ0UnKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNDQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnZScpCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBi
YXNpY19qc29uX3BhcnNlcl80NDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorYmFzaWNfanNvbl9wYXJzZXJfMTQ6CisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfdG9rZW5fdHlwZSA9IHRva2VuX3R5cGU6
OnZhbHVlX251bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CitiYXNpY19qc29uX3BhcnNlcl8xNToKKyAgICAgICAgICAgICAgICAgICAg
eXlhY2NlcHQgPSAxOworICAgICAgICAgICAgICAgICAgICBtX21hcmtlciA9ICsrbV9jdXJzb3I7
CisgICAgICAgICAgICAgICAgICAgIGlmICgobV9saW1pdCAtIG1fY3Vyc29yKSA8IDMpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxfbGluZV9idWZm
ZXIoMyk7ICAgIC8vIExDT1ZfRVhDTF9MSU5FCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgeXljaCA9ICptX2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Ym1bMCArIHl5Y2hdICYgNjQpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMTU7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0QnKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnLicpCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBi
YXNpY19qc29uX3BhcnNlcl80MzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMTQ7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnRScpCisgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29u
X3BhcnNlcl80NDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoID09ICdlJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzQ0OworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19q
c29uX3BhcnNlcl8xNDsKKyAgICAgICAgICAgICAgICAgICAgfQorYmFzaWNfanNvbl9wYXJzZXJf
MTc6CisgICAgICAgICAgICAgICAgICAgICsrbV9jdXJzb3I7CisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfdG9rZW5fdHlwZSA9IHRva2VuX3R5cGU6
Om5hbWVfc2VwYXJhdG9yOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KK2Jhc2ljX2pzb25fcGFyc2VyXzE5OgorICAgICAgICAgICAgICAgICAg
ICArK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBsYXN0X3Rva2VuX3R5cGUgPSB0b2tlbl90eXBlOjpiZWdpbl9hcnJheTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CitiYXNpY19qc29u
X3BhcnNlcl8yMToKKyAgICAgICAgICAgICAgICAgICAgKyttX2N1cnNvcjsKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF90b2tlbl90eXBlID0gdG9r
ZW5fdHlwZTo6ZW5kX2FycmF5OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIH0KK2Jhc2ljX2pzb25fcGFyc2VyXzIzOgorICAgICAgICAgICAgICAg
ICAgICB5eWFjY2VwdCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHl5Y2ggPSAqKG1fbWFya2Vy
ID0gKyttX2N1cnNvcik7CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdhJykKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19q
c29uX3BhcnNlcl80NTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzU7CitiYXNpY19qc29uX3BhcnNlcl8yNDoKKyAgICAg
ICAgICAgICAgICAgICAgeXlhY2NlcHQgPSAwOworICAgICAgICAgICAgICAgICAgICB5eWNoID0g
KihtX21hcmtlciA9ICsrbV9jdXJzb3IpOworICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9
PSAndScpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFzaWNfanNvbl9wYXJzZXJfNDY7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl81OworYmFzaWNfanNvbl9wYXJzZXJf
MjU6CisgICAgICAgICAgICAgICAgICAgIHl5YWNjZXB0ID0gMDsKKyAgICAgICAgICAgICAgICAg
ICAgeXljaCA9ICoobV9tYXJrZXIgPSArK21fY3Vyc29yKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPT0gJ3InKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzQ3OworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNTsKK2Jhc2ljX2pz
b25fcGFyc2VyXzI2OgorICAgICAgICAgICAgICAgICAgICArK21fY3Vyc29yOworICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3Rva2VuX3R5cGUgPSB0
b2tlbl90eXBlOjpiZWdpbl9vYmplY3Q7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgfQorYmFzaWNfanNvbl9wYXJzZXJfMjg6CisgICAgICAgICAg
ICAgICAgICAgICsrbV9jdXJzb3I7CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxhc3RfdG9rZW5fdHlwZSA9IHRva2VuX3R5cGU6OmVuZF9vYmplY3Q7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorYmFz
aWNfanNvbl9wYXJzZXJfMzA6CisgICAgICAgICAgICAgICAgICAgICsrbV9jdXJzb3I7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChtX2xpbWl0IDw9IG1fY3Vyc29yKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxsX2xpbmVfYnVmZmVyKDEpOyAgICAv
LyBMQ09WX0VYQ0xfTElORQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIHl5Y2ggPSAqbV9jdXJzb3I7CitiYXNpY19qc29uX3BhcnNlcl8zMToKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHl5Ym1bMCArIHl5Y2hdICYgMTI4KQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMwOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9IDB4RTAp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNo
IDw9ICdcXCcpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gMHgxRikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJf
MzI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoIDw9ICciJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzM7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzU7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gMHhDMSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9IDB4REYpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv
IGJhc2ljX2pzb25fcGFyc2VyXzM2OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzM3OworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gMHhFRikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAweEVEKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNp
Y19qc29uX3BhcnNlcl8zOTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zODsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8
PSAweEYwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl80MDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0g
MHhGMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNDE7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9IDB4
RjQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzQyOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorYmFzaWNfanNvbl9wYXJzZXJfMzI6CisgICAgICAgICAgICAgICAgICAgIG1fY3Vyc29y
ID0gbV9tYXJrZXI7CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWFjY2VwdCA9PSAwKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pz
b25fcGFyc2VyXzU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv
IGJhc2ljX2pzb25fcGFyc2VyXzE0OworICAgICAgICAgICAgICAgICAgICB9CitiYXNpY19qc29u
X3BhcnNlcl8zMzoKKyAgICAgICAgICAgICAgICAgICAgKyttX2N1cnNvcjsKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF90b2tlbl90eXBlID0gdG9r
ZW5fdHlwZTo6dmFsdWVfc3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KK2Jhc2ljX2pzb25fcGFyc2VyXzM1OgorICAgICAgICAgICAg
ICAgICAgICArK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAobV9saW1pdCA8PSBt
X2N1cnNvcikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ZmlsbF9saW5lX2J1ZmZlcigxKTsgICAgLy8gTENPVl9FWENMX0xJTkUKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB5eWNoID0gKm1fY3Vyc29yOworICAgICAgICAg
ICAgICAgICAgICBpZiAoeXljaCA8PSAnZScpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnIicpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMwOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLicpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
b3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMwOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh5eWNoIDw9ICdcXCcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnWycpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNl
cl8zMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ2InKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv
IGJhc2ljX2pzb25fcGFyc2VyXzMwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJf
MzI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0g
J3EnKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICdmJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzA7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh5eWNoID09ICduJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzA7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ3MnKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2gg
PD0gJ3InKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMwOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9
ICd0JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoeXljaCA8PSAndScpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJf
NDg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KK2Jhc2ljX2pzb25fcGFyc2VyXzM2OgorICAgICAgICAgICAgICAgICAgICArK21f
Y3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAobV9saW1pdCA8PSBtX2N1cnNvcikKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlsbF9saW5lX2J1
ZmZlcigxKTsgICAgLy8gTENPVl9FWENMX0xJTkUKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB5eWNoID0gKm1fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBp
ZiAoeXljaCA8PSAweDdGKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9IDB4QkYpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzA7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19q
c29uX3BhcnNlcl8zMjsKK2Jhc2ljX2pzb25fcGFyc2VyXzM3OgorICAgICAgICAgICAgICAgICAg
ICArK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAobV9saW1pdCA8PSBtX2N1cnNv
cikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlsbF9s
aW5lX2J1ZmZlcigxKTsgICAgLy8gTENPVl9FWENMX0xJTkUKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB5eWNoID0gKm1fY3Vyc29yOworICAgICAgICAgICAgICAg
ICAgICBpZiAoeXljaCA8PSAweDlGKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9IDB4QkYpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJz
ZXJfMzY7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZ290byBi
YXNpY19qc29uX3BhcnNlcl8zMjsKK2Jhc2ljX2pzb25fcGFyc2VyXzM4OgorICAgICAgICAgICAg
ICAgICAgICArK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAobV9saW1pdCA8PSBt
X2N1cnNvcikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ZmlsbF9saW5lX2J1ZmZlcigxKTsgICAgLy8gTENPVl9FWENMX0xJTkUKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB5eWNoID0gKm1fY3Vyc29yOworICAgICAgICAg
ICAgICAgICAgICBpZiAoeXljaCA8PSAweDdGKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9IDB4QkYpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNv
bl9wYXJzZXJfMzY7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
Z290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKK2Jhc2ljX2pzb25fcGFyc2VyXzM5OgorICAgICAg
ICAgICAgICAgICAgICArK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAobV9saW1p
dCA8PSBtX2N1cnNvcikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZmlsbF9saW5lX2J1ZmZlcigxKTsgICAgLy8gTENPVl9FWENMX0xJTkUKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB5eWNoID0gKm1fY3Vyc29yOworICAg
ICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAweDdGKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9IDB4OUYp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFz
aWNfanNvbl9wYXJzZXJfMzY7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKK2Jhc2ljX2pzb25fcGFyc2VyXzQwOgor
ICAgICAgICAgICAgICAgICAgICArK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAo
bV9saW1pdCA8PSBtX2N1cnNvcikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZmlsbF9saW5lX2J1ZmZlcigxKTsgICAgLy8gTENPVl9FWENMX0xJTkUKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB5eWNoID0gKm1fY3Vyc29y
OworICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAweDhGKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMy
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9
IDB4QkYpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFzaWNfanNvbl9wYXJzZXJfMzg7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKK2Jhc2ljX2pzb25fcGFyc2Vy
XzQxOgorICAgICAgICAgICAgICAgICAgICArK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAg
ICBpZiAobV9saW1pdCA8PSBtX2N1cnNvcikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZmlsbF9saW5lX2J1ZmZlcigxKTsgICAgLy8gTENPVl9FWENMX0xJ
TkUKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB5eWNoID0gKm1f
Y3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAweDdGKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFy
c2VyXzMyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9IDB4QkYpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzg7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKK2Jhc2ljX2pzb25f
cGFyc2VyXzQyOgorICAgICAgICAgICAgICAgICAgICArK21fY3Vyc29yOworICAgICAgICAgICAg
ICAgICAgICBpZiAobV9saW1pdCA8PSBtX2N1cnNvcikKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZmlsbF9saW5lX2J1ZmZlcigxKTsgICAgLy8gTENPVl9F
WENMX0xJTkUKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB5eWNo
ID0gKm1fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAweDdGKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pz
b25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGlmICh5eWNoIDw9IDB4OEYpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzg7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKK2Jhc2lj
X2pzb25fcGFyc2VyXzQzOgorICAgICAgICAgICAgICAgICAgICB5eWNoID0gKisrbV9jdXJzb3I7
CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAn
OScpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g
YmFzaWNfanNvbl9wYXJzZXJfNDk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKK2Jhc2ljX2pzb25fcGFyc2VyXzQ0
OgorICAgICAgICAgICAgICAgICAgICB5eWNoID0gKisrbV9jdXJzb3I7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoIDw9ICcsJykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJysnKQorICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNTE7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv
IGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gJy0nKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNTE7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAn
LycpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc5JykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25f
cGFyc2VyXzUyOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAgICAgICAgICAgICAgfQor
YmFzaWNfanNvbl9wYXJzZXJfNDU6CisgICAgICAgICAgICAgICAgICAgIHl5Y2ggPSAqKyttX2N1
cnNvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ2wnKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2Vy
XzU0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFz
aWNfanNvbl9wYXJzZXJfMzI7CitiYXNpY19qc29uX3BhcnNlcl80NjoKKyAgICAgICAgICAgICAg
ICAgICAgeXljaCA9ICorK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9
PSAnbCcpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFzaWNfanNvbl9wYXJzZXJfNTU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKK2Jhc2ljX2pzb25fcGFyc2Vy
XzQ3OgorICAgICAgICAgICAgICAgICAgICB5eWNoID0gKisrbV9jdXJzb3I7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh5eWNoID09ICd1JykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl81NjsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMy
OworYmFzaWNfanNvbl9wYXJzZXJfNDg6CisgICAgICAgICAgICAgICAgICAgICsrbV9jdXJzb3I7
CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2xpbWl0IDw9IG1fY3Vyc29yKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxsX2xpbmVfYnVmZmVyKDEp
OyAgICAvLyBMQ09WX0VYQ0xfTElORQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHl5Y2ggPSAqbV9jdXJzb3I7CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNo
IDw9ICdAJykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPD0gJy8nKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnOScpCisg
ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290
byBiYXNpY19qc29uX3BhcnNlcl81NzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnRicpCisgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19q
c29uX3BhcnNlcl81NzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh5eWNoIDw9ICdgJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2gg
PD0gJ2YnKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNTc7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOwor
ICAgICAgICAgICAgICAgICAgICB9CitiYXNpY19qc29uX3BhcnNlcl80OToKKyAgICAgICAgICAg
ICAgICAgICAgeXlhY2NlcHQgPSAxOworICAgICAgICAgICAgICAgICAgICBtX21hcmtlciA9ICsr
bV9jdXJzb3I7CisgICAgICAgICAgICAgICAgICAgIGlmICgobV9saW1pdCAtIG1fY3Vyc29yKSA8
IDMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxf
bGluZV9idWZmZXIoMyk7ICAgIC8vIExDT1ZfRVhDTF9MSU5FCisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgeXljaCA9ICptX2N1cnNvcjsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gJ0QnKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8xNDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICc5JykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzQ5OworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8x
NDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdF
JykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzQ0OworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ2UnKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9w
YXJzZXJfNDQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzE0OworICAgICAgICAgICAgICAgICAgICB9Citi
YXNpY19qc29uX3BhcnNlcl81MToKKyAgICAgICAgICAgICAgICAgICAgeXljaCA9ICorK21fY3Vy
c29yOworICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJf
MzI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2gg
Pj0gJzonKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBn
b3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAgICAgICB9CitiYXNpY19q
c29uX3BhcnNlcl81MjoKKyAgICAgICAgICAgICAgICAgICAgKyttX2N1cnNvcjsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fbGltaXQgPD0gbV9jdXJzb3IpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxfbGluZV9idWZmZXIoMSk7ICAgIC8vIExD
T1ZfRVhDTF9MSU5FCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
eXljaCA9ICptX2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy8nKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2lj
X2pzb25fcGFyc2VyXzE0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICc5JykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl81MjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzE0OworYmFz
aWNfanNvbl9wYXJzZXJfNTQ6CisgICAgICAgICAgICAgICAgICAgIHl5Y2ggPSAqKyttX2N1cnNv
cjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ3MnKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzU4
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNf
anNvbl9wYXJzZXJfMzI7CitiYXNpY19qc29uX3BhcnNlcl81NToKKyAgICAgICAgICAgICAgICAg
ICAgeXljaCA9ICorK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAn
bCcpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g
YmFzaWNfanNvbl9wYXJzZXJfNTk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKK2Jhc2ljX2pzb25fcGFyc2VyXzU2
OgorICAgICAgICAgICAgICAgICAgICB5eWNoID0gKisrbV9jdXJzb3I7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoID09ICdlJykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl82MTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOwor
YmFzaWNfanNvbl9wYXJzZXJfNTc6CisgICAgICAgICAgICAgICAgICAgICsrbV9jdXJzb3I7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2xpbWl0IDw9IG1fY3Vyc29yKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxsX2xpbmVfYnVmZmVyKDEpOyAg
ICAvLyBMQ09WX0VYQ0xfTElORQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIHl5Y2ggPSAqbV9jdXJzb3I7CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9
ICdAJykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPD0gJy8nKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnOScpCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBi
YXNpY19qc29uX3BhcnNlcl82MzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnRicpCisgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29u
X3BhcnNlcl82MzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoIDw9ICdgJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0g
J2YnKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNjM7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAg
ICAgICAgICAgICAgICAgICB9CitiYXNpY19qc29uX3BhcnNlcl81ODoKKyAgICAgICAgICAgICAg
ICAgICAgeXljaCA9ICorK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9
PSAnZScpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFzaWNfanNvbl9wYXJzZXJfNjQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKK2Jhc2ljX2pzb25fcGFyc2Vy
XzU5OgorICAgICAgICAgICAgICAgICAgICArK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3Rva2VuX3R5cGUgPSB0b2tlbl90eXBl
OjpsaXRlcmFsX251bGw7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorYmFzaWNfanNvbl9wYXJzZXJfNjE6CisgICAgICAgICAgICAgICAgICAg
ICsrbV9jdXJzb3I7CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxhc3RfdG9rZW5fdHlwZSA9IHRva2VuX3R5cGU6OmxpdGVyYWxfdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CitiYXNpY19qc29u
X3BhcnNlcl82MzoKKyAgICAgICAgICAgICAgICAgICAgKyttX2N1cnNvcjsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fbGltaXQgPD0gbV9jdXJzb3IpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxfbGluZV9idWZmZXIoMSk7ICAgIC8vIExDT1Zf
RVhDTF9MSU5FCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeXlj
aCA9ICptX2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0AnKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAn
LycpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc5JykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25f
cGFyc2VyXzY2OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdGJykKKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzY2
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPD0gJ2AnKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnZicpCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBi
YXNpY19qc29uX3BhcnNlcl82NjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAgICAg
ICAgICAgIH0KK2Jhc2ljX2pzb25fcGFyc2VyXzY0OgorICAgICAgICAgICAgICAgICAgICArK21f
Y3Vyc29yOworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBs
YXN0X3Rva2VuX3R5cGUgPSB0b2tlbl90eXBlOjpsaXRlcmFsX2ZhbHNlOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KK2Jhc2ljX2pzb25fcGFy
c2VyXzY2OgorICAgICAgICAgICAgICAgICAgICArK21fY3Vyc29yOworICAgICAgICAgICAgICAg
ICAgICBpZiAobV9saW1pdCA8PSBtX2N1cnNvcikKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZmlsbF9saW5lX2J1ZmZlcigxKTsgICAgLy8gTENPVl9FWENM
X0xJTkUKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB5eWNoID0g
Km1fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnQCcpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykK
KyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
b3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzknKQorICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJz
ZXJfMzA7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0YnKQorICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzA7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAnYCcpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdmJykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2lj
X2pzb25fcGFyc2VyXzMwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBy
ZXR1cm4gbGFzdF90b2tlbl90eXBlOworICAgICAgICB9CisKKyAgICAgICAgLyohCisgICAgICAg
IEBicmllZiBhcHBlbmQgZGF0YSBmcm9tIHRoZSBzdHJlYW0gdG8gdGhlIGxpbmUgYnVmZmVyCisK
KyAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHNjYW4oKSBmdW5jdGlvbiB3
aGVuIHRoZSBlbmQgb2YgdGhlCisgICAgICAgIGJ1ZmZlciAoYG1fbGltaXRgKSBpcyByZWFjaGVk
IGFuZCB0aGUgYG1fY3Vyc29yYCBwb2ludGVyIGNhbm5vdCBiZQorICAgICAgICBpbmNyZW1lbnRl
ZCB3aXRob3V0IGxlYXZpbmcgdGhlIGxpbWl0cyBvZiB0aGUgbGluZSBidWZmZXIuIE5vdGUgcmUy
YworICAgICAgICBkZWNpZGVzIHdoZW4gdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLgorCisgICAgICAg
IElmIHRoZSBsZXhlciByZWFkcyBmcm9tIGNvbnRpZ3VvdXMgc3RvcmFnZSwgdGhlcmUgaXMgbm8g
dHJhaWxpbmcgbnVsbAorICAgICAgICBieXRlLiBUaGVyZWZvcmUsIHRoaXMgZnVuY3Rpb24gbXVz
dCBtYWtlIHN1cmUgdG8gYWRkIHRoZXNlIHBhZGRpbmcKKyAgICAgICAgbnVsbCBieXRlcy4KKwor
ICAgICAgICBJZiB0aGUgbGV4ZXIgcmVhZHMgZnJvbSBhbiBpbnB1dCBzdHJlYW0sIHRoaXMgZnVu
Y3Rpb24gcmVhZHMgdGhlIG5leHQKKyAgICAgICAgbGluZSBvZiB0aGUgaW5wdXQuCisKKyAgICAg
ICAgQHByZQorICAgICAgICAgICAgcCBwIHAgcCBwIHAgdSB1IHUgdSB1IHggLiAuIC4gLiAuIC4K
KyAgICAgICAgICAgIF4gICAgICAgICAgIF4gICAgICAgXiAgIF4KKyAgICAgICAgICAgIG1fY29u
dGVudCAgIG1fc3RhcnQgfCAgIG1fbGltaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9jdXJzb3IKKworICAgICAgICBAcG9zdAorICAgICAgICAgICAgdSB1IHUgdSB1IHggeCB4
IHggeCB4IHggLiAuIC4gLiAuIC4KKyAgICAgICAgICAgIF4gICAgICAgXiAgICAgICAgICAgICAg
IF4KKyAgICAgICAgICAgIHwgICAgICAgbV9jdXJzb3IgICAgICAgIG1fbGltaXQKKyAgICAgICAg
ICAgIG1fc3RhcnQKKyAgICAgICAgICAgIG1fY29udGVudAorICAgICAgICAqLworICAgICAgICB2
b2lkIGZpbGxfbGluZV9idWZmZXIoc2l6ZV90IG4gPSAwKQorICAgICAgICB7CisgICAgICAgICAg
ICAvLyBpZiBsaW5lIGJ1ZmZlciBpcyB1c2VkLCBtX2NvbnRlbnQgcG9pbnRzIHRvIGl0cyBkYXRh
CisgICAgICAgICAgICBhc3NlcnQobV9saW5lX2J1ZmZlci5lbXB0eSgpCisgICAgICAgICAgICAg
ICAgICAgb3IgbV9jb250ZW50ID09IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgbGV4ZXJfY2hhcl90
Kj4obV9saW5lX2J1ZmZlci5kYXRhKCkpKTsKKworICAgICAgICAgICAgLy8gaWYgbGluZSBidWZm
ZXIgaXMgdXNlZCwgbV9saW1pdCBpcyBzZXQgcGFzdCB0aGUgZW5kIG9mIGl0cyBkYXRhCisgICAg
ICAgICAgICBhc3NlcnQobV9saW5lX2J1ZmZlci5lbXB0eSgpCisgICAgICAgICAgICAgICAgICAg
b3IgbV9saW1pdCA9PSBtX2NvbnRlbnQgKyBtX2xpbmVfYnVmZmVyLnNpemUoKSk7CisKKyAgICAg
ICAgICAgIC8vIHBvaW50ZXIgcmVsYXRpb25zaGlwcworICAgICAgICAgICAgYXNzZXJ0KG1fY29u
dGVudCA8PSBtX3N0YXJ0KTsKKyAgICAgICAgICAgIGFzc2VydChtX3N0YXJ0IDw9IG1fY3Vyc29y
KTsKKyAgICAgICAgICAgIGFzc2VydChtX2N1cnNvciA8PSBtX2xpbWl0KTsKKyAgICAgICAgICAg
IGFzc2VydChtX21hcmtlciA9PSBudWxscHRyIG9yIG1fbWFya2VyICA8PSBtX2xpbWl0KTsKKwor
ICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHByb2Nlc3NlZCBjaGFyYWN0ZXJzIChwKQorICAgICAg
ICAgICAgY29uc3Qgc2l6ZV90IG51bV9wcm9jZXNzZWRfY2hhcnMgPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KG1fc3RhcnQgLSBtX2NvbnRlbnQpOworICAgICAgICAgICAgLy8gb2Zmc2V0IGZvciBtX21h
cmtlciB3cnQuIHRvIG1fc3RhcnQKKyAgICAgICAgICAgIGNvbnN0IGF1dG8gb2Zmc2V0X21hcmtl
ciA9IChtX21hcmtlciA9PSBudWxscHRyKSA/IDAgOiBtX21hcmtlciAtIG1fc3RhcnQ7CisgICAg
ICAgICAgICAvLyBudW1iZXIgb2YgdW5wcm9jZXNzZWQgY2hhcmFjdGVycyAodSkKKyAgICAgICAg
ICAgIGNvbnN0IGF1dG8gb2Zmc2V0X2N1cnNvciA9IG1fY3Vyc29yIC0gbV9zdGFydDsKKworICAg
ICAgICAgICAgLy8gbm8gc3RyZWFtIGlzIHVzZWQgb3IgZW5kIG9mIGZpbGUgaXMgcmVhY2hlZAor
ICAgICAgICAgICAgaWYgKG1fc3RyZWFtID09IG51bGxwdHIgb3IgbV9zdHJlYW0tPmVvZigpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIG1fc3RhcnQgbWF5IG9yIG1heSBub3Qg
YmUgcG9pbnRpbmcgaW50byBtX2xpbmVfYnVmZmVyIGF0CisgICAgICAgICAgICAgICAgLy8gdGhp
cyBwb2ludC4gV2UgdHJ1c3QgdGhlIHN0YW5kYW5kIGxpYnJhcnkgdG8gZG8gdGhlIHJpZ2h0Cisg
ICAgICAgICAgICAgICAgLy8gdGhpbmcuIFNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcS8y
ODE0MjAxMS8yNjYzNzgKKyAgICAgICAgICAgICAgICBtX2xpbmVfYnVmZmVyLmFzc2lnbihtX3N0
YXJ0LCBtX2xpbWl0KTsKKworICAgICAgICAgICAgICAgIC8vIGFwcGVuZCBuIGNoYXJhY3RlcnMg
dG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUgaXMgc3VmZmljaWVudAorICAgICAgICAgICAgICAgIC8v
IHNwYWNlIGJldHdlZW4gbV9jdXJzb3IgYW5kIG1fbGltaXQKKyAgICAgICAgICAgICAgICBtX2xp
bmVfYnVmZmVyLmFwcGVuZCgxLCAnXHgwMCcpOworICAgICAgICAgICAgICAgIGlmIChuID4gMCkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1fbGluZV9idWZmZXIuYXBw
ZW5kKG4gLSAxLCAnXHgwMScpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBkZWxldGUg
cHJvY2Vzc2VkIGNoYXJhY3RlcnMgZnJvbSBsaW5lIGJ1ZmZlcgorICAgICAgICAgICAgICAgIG1f
bGluZV9idWZmZXIuZXJhc2UoMCwgbnVtX3Byb2Nlc3NlZF9jaGFycyk7CisgICAgICAgICAgICAg
ICAgLy8gcmVhZCBuZXh0IGxpbmUgZnJvbSBpbnB1dCBzdHJlYW0KKyAgICAgICAgICAgICAgICBt
X2xpbmVfYnVmZmVyX3RtcC5jbGVhcigpOworICAgICAgICAgICAgICAgIHN0ZDo6Z2V0bGluZSgq
bV9zdHJlYW0sIG1fbGluZV9idWZmZXJfdG1wLCAnXG4nKTsKKworICAgICAgICAgICAgICAgIC8v
IGFkZCBsaW5lIHdpdGggbmV3bGluZSBzeW1ib2wgdG8gdGhlIGxpbmUgYnVmZmVyCisgICAgICAg
ICAgICAgICAgbV9saW5lX2J1ZmZlciArPSBtX2xpbmVfYnVmZmVyX3RtcDsKKyAgICAgICAgICAg
ICAgICBtX2xpbmVfYnVmZmVyLnB1c2hfYmFjaygnXG4nKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gc2V0IHBvaW50ZXJzCisgICAgICAgICAgICBtX2NvbnRlbnQgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IGxleGVyX2NoYXJfdCo+KG1fbGluZV9idWZmZXIuZGF0YSgpKTsKKyAg
ICAgICAgICAgIGFzc2VydChtX2NvbnRlbnQgIT0gbnVsbHB0cik7CisgICAgICAgICAgICBtX3N0
YXJ0ICA9IG1fY29udGVudDsKKyAgICAgICAgICAgIG1fbWFya2VyID0gbV9zdGFydCArIG9mZnNl
dF9tYXJrZXI7CisgICAgICAgICAgICBtX2N1cnNvciA9IG1fc3RhcnQgKyBvZmZzZXRfY3Vyc29y
OworICAgICAgICAgICAgbV9saW1pdCAgPSBtX3N0YXJ0ICsgbV9saW5lX2J1ZmZlci5zaXplKCk7
CisgICAgICAgIH0KKworICAgICAgICAvLy8gcmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBv
ZiBsYXN0IHJlYWQgdG9rZW4KKyAgICAgICAgc3RyaW5nX3QgZ2V0X3Rva2VuX3N0cmluZygpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydChtX3N0YXJ0ICE9IG51bGxwdHIpOwor
ICAgICAgICAgICAgcmV0dXJuIHN0cmluZ190KHJlaW50ZXJwcmV0X2Nhc3Q8dHlwZW5hbWUgc3Ry
aW5nX3Q6OmNvbnN0X3BvaW50ZXI+KG1fc3RhcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PHNpemVfdD4obV9jdXJzb3IgLSBtX3N0YXJ0KSk7CisgICAgICAgIH0K
KworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmIHJldHVybiBzdHJpbmcgdmFsdWUgZm9yIHN0
cmluZyB0b2tlbnMKKworICAgICAgICBUaGUgZnVuY3Rpb24gaXRlcmF0ZXMgdGhlIGNoYXJhY3Rl
cnMgYmV0d2VlbiB0aGUgb3BlbmluZyBhbmQgY2xvc2luZworICAgICAgICBxdW90ZXMgb2YgdGhl
IHN0cmluZyB2YWx1ZS4gVGhlIGNvbXBsZXRlIHN0cmluZyBpcyB0aGUgcmFuZ2UKKyAgICAgICAg
W21fc3RhcnQsbV9jdXJzb3IpLiBDb25zZXF1ZW50bHksIHdlIGl0ZXJhdGUgZnJvbSBtX3N0YXJ0
KzEgdG8KKyAgICAgICAgbV9jdXJzb3ItMS4KKworICAgICAgICBXZSBkaWZmZXJlbnRpYXRlIHR3
byBjYXNlczoKKworICAgICAgICAxLiBFc2NhcGVkIGNoYXJhY3RlcnMuIEluIHRoaXMgY2FzZSwg
YSBuZXcgY2hhcmFjdGVyIGlzIGNvbnN0cnVjdGVkCisgICAgICAgICAgIGFjY29yZGluZyB0byB0
aGUgbmF0dXJlIG9mIHRoZSBlc2NhcGUuIFNvbWUgZXNjYXBlcyBjcmVhdGUgbmV3CisgICAgICAg
ICAgIGNoYXJhY3RlcnMgKGUuZy4sIGAiXFxuImAgaXMgcmVwbGFjZWQgYnkgYCJcbiJgKSwgc29t
ZSBhcmUgY29waWVkCisgICAgICAgICAgIGFzIGlzIChlLmcuLCBgIlxcXFwiYCkuIEZ1cnRoZXJt
b3JlLCBVbmljb2RlIGVzY2FwZXMgb2YgdGhlIHNoYXBlCisgICAgICAgICAgIGAiXFx1eHh4eCJg
IG5lZWQgc3BlY2lhbCBjYXJlLiBJbiB0aGlzIGNhc2UsIHRvX3VuaWNvZGUgdGFrZXMgY2FyZQor
ICAgICAgICAgICBvZiB0aGUgY29uc3RydWN0aW9uIG9mIHRoZSB2YWx1ZXMuCisgICAgICAgIDIu
IFVuZXNjYXBlZCBjaGFyYWN0ZXJzIGFyZSBjb3BpZWQgYXMgaXMuCisKKyAgICAgICAgQHByZSBg
bV9jdXJzb3IgLSBtX3N0YXJ0ID49IDJgLCBtZWFuaW5nIHRoZSBsZW5ndGggb2YgdGhlIGxhc3Qg
dG9rZW4KKyAgICAgICAgaXMgYXQgbGVhc3QgMiBieXRlcyB3aGljaCBpcyB0cml2aWFsbHkgdHJ1
ZSBmb3IgYW55IHN0cmluZyAod2hpY2gKKyAgICAgICAgY29uc2lzdHMgb2YgYXQgbGVhc3QgdHdv
IHF1b3RlcykuCisKKyAgICAgICAgICAgICIgYzEgYzIgYzMgLi4uICIKKyAgICAgICAgICAgIF4g
ICAgICAgICAgICAgICAgXgorICAgICAgICAgICAgbV9zdGFydCAgICAgICAgICBtX2N1cnNvcgor
CisgICAgICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcu
XG4KKworICAgICAgICBMZW1tYTogVGhlIGxvb3AgYm9keSB3aWxsIGFsd2F5cyB0ZXJtaW5hdGUu
XG4KKworICAgICAgICBQcm9vZiAoYnkgY29udHJhZGljdGlvbik6IEFzc3VtZSB0aGUgbG9vcCBi
b2R5IGRvZXMgbm90IHRlcm1pbmF0ZS4gQXMKKyAgICAgICAgdGhlIGxvb3AgYm9keSBkb2VzIG5v
dCBjb250YWluIGFub3RoZXIgbG9vcCwgb25lIG9mIHRoZSBjYWxsZWQKKyAgICAgICAgZnVuY3Rp
b25zIG11c3QgbmV2ZXIgcmV0dXJuLiBUaGUgY2FsbGVkIGZ1bmN0aW9ucyBhcmUgYHN0ZDo6c3Ry
dG91bGAKKyAgICAgICAgYW5kIHRvX3VuaWNvZGUuIE5laXRoZXIgZnVuY3Rpb24gY2FuIGxvb3Ag
Zm9yZXZlciwgc28gdGhlIGxvb3AgYm9keQorICAgICAgICB3aWxsIG5ldmVyIGxvb3AgZm9yZXZl
ciB3aGljaCBjb250cmFkaWN0cyB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBsb29wCisgICAgICAg
IGJvZHkgZG9lcyBub3QgdGVybWluYXRlLCBxLmUuZC5cbgorCisgICAgICAgIExlbW1hOiBUaGUg
bG9vcCBjb25kaXRpb24gZm9yIHRoZSBmb3IgbG9vcCBpcyBldmVudHVhbGx5IGZhbHNlLlxuCisK
KyAgICAgICAgUHJvb2YgKGJ5IGNvbnRyYWRpY3Rpb24pOiBBc3N1bWUgdGhlIGxvb3AgZG9lcyBu
b3QgdGVybWluYXRlLiBEdWUgdG8KKyAgICAgICAgdGhlIGFib3ZlIGxlbW1hLCB0aGlzIGNhbiBv
bmx5IGJlIGR1ZSB0byBhIHRhdXRvbG9naWNhbCBsb29wCisgICAgICAgIGNvbmRpdGlvbjsgdGhh
dCBpcywgdGhlIGxvb3AgY29uZGl0aW9uIGkgPCBtX2N1cnNvciAtIDEgbXVzdCBhbHdheXMgYmUK
KyAgICAgICAgdHJ1ZS4gTGV0IHggYmUgdGhlIGNoYW5nZSBvZiBpIGZvciBhbnkgbG9vcCBpdGVy
YXRpb24uIFRoZW4KKyAgICAgICAgbV9zdGFydCArIDEgKyB4IDwgbV9jdXJzb3IgLSAxIG11c3Qg
aG9sZCB0byBsb29wIGluZGVmaW5pdGVseS4gVGhpcworICAgICAgICBjYW4gYmUgcmVwaHJhc2Vk
IHRvIG1fY3Vyc29yIC0gbV9zdGFydCAtIDIgPiB4LiBXaXRoIHRoZQorICAgICAgICBwcmVjb25k
aXRpb24sIHdlIHggPD0gMCwgbWVhbmluZyB0aGF0IHRoZSBsb29wIGNvbmRpdGlvbiBob2xkcwor
ICAgICAgICBpbmRlZmluaXRseSBpZiBpIGlzIGFsd2F5cyBkZWNyZWFzZWQuIEhvd2V2ZXIsIG9i
c2VydmUgdGhhdCB0aGUgdmFsdWUKKyAgICAgICAgb2YgaSBpcyBzdHJpY3RseSBpbmNyZWFzaW5n
IHdpdGggZWFjaCBpdGVyYXRpb24sIGFzIGl0IGlzIGluY3JlbWVudGVkCisgICAgICAgIGJ5IDEg
aW4gdGhlIGl0ZXJhdGlvbiBleHByZXNzaW9uIGFuZCBuZXZlciBkZWNyZW1lbnRlZCBpbnNpZGUg
dGhlIGxvb3AKKyAgICAgICAgYm9keS4gSGVuY2UsIHRoZSBsb29wIGNvbmRpdGlvbiB3aWxsIGV2
ZW50dWFsbHkgYmUgZmFsc2Ugd2hpY2gKKyAgICAgICAgY29udHJhZGljdHMgdGhlIGFzc3VtcHRp
b24gdGhhdCB0aGUgbG9vcCBjb25kaXRpb24gaXMgYSB0YXV0b2xvZ3ksCisgICAgICAgIHEuZS5k
LgorCisgICAgICAgIEByZXR1cm4gc3RyaW5nIHZhbHVlIG9mIGN1cnJlbnQgdG9rZW4gd2l0aG91
dCBvcGVuaW5nIGFuZCBjbG9zaW5nCisgICAgICAgIHF1b3RlcworICAgICAgICBAdGhyb3cgc3Rk
OjpvdXRfb2ZfcmFuZ2UgaWYgdG9fdW5pY29kZSBmYWlscworICAgICAgICAqLworICAgICAgICBz
dHJpbmdfdCBnZXRfc3RyaW5nKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgYXNzZXJ0
KG1fY3Vyc29yIC0gbV9zdGFydCA+PSAyKTsKKworICAgICAgICAgICAgc3RyaW5nX3QgcmVzdWx0
OworICAgICAgICAgICAgcmVzdWx0LnJlc2VydmUoc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2N1cnNv
ciAtIG1fc3RhcnQgLSAyKSk7CisKKyAgICAgICAgICAgIC8vIGl0ZXJhdGUgdGhlIHJlc3VsdCBi
ZXR3ZWVuIHRoZSBxdW90ZXMKKyAgICAgICAgICAgIGZvciAoY29uc3QgbGV4ZXJfY2hhcl90KiBp
ID0gbV9zdGFydCArIDE7IGkgPCBtX2N1cnNvciAtIDE7ICsraSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAvLyBmaW5kIG5leHQgZXNjYXBlIGNoYXJhY3RlcgorICAgICAgICAgICAg
ICAgIGF1dG8gZSA9IHN0ZDo6ZmluZChpLCBtX2N1cnNvciAtIDEsICdcXCcpOworICAgICAgICAg
ICAgICAgIGlmIChlICE9IGkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25sb2htYW5uL2pzb24vaXNzdWVzLzM2NSNpc3N1
ZWNvbW1lbnQtMjYyODc0NzA1CisgICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byBrID0gaTsg
ayA8IGU7IGsrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LnB1c2hfYmFjayhzdGF0aWNfY2FzdDx0eXBlbmFtZSBzdHJpbmdfdDo6dmFsdWVf
dHlwZT4oKmspKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBp
ID0gZSAtIDE7IC8vIC0xIGJlY2F1c2Ugb2YgKytpCisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8v
IHByb2Nlc3NpbmcgZXNjYXBlZCBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVh
ZCBuZXh0IGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICArK2k7CisKKyAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoICgqaSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdGhlIGRlZmF1bHQgZXNjYXBlcworICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAndCc6CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ICs9ICJcdCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICdiJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgKz0gIlxiIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgJ2YnOgorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCArPSAiXGYiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnbic6CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ICs9ICJcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlICdyJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgKz0gIlxyIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgJ1xcJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgKz0gIlxcIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgJy8nOgorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCArPSAiLyI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
ICciJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgKz0gIlwiIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dW5pY29kZQorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndSc6CisgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IGNvZGUgeHh4
eCBmcm9tIHV4eHh4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb2RlcG9pbnQg
PSBzdGQ6OnN0cnRvdWwoc3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDx0eXBlbmFtZSBzdHJp
bmdfdDo6Y29uc3RfcG9pbnRlcj4oaSArIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQpLmNfc3RyKCksIG51bGxwdHIsIDE2KTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIGNvZGVwb2ludCBpcyBh
IGhpZ2ggc3Vycm9nYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGVwb2lu
dCA+PSAweEQ4MDAgYW5kIGNvZGVwb2ludCA8PSAweERCRkYpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUg
dGhlcmUgaXMgYSBzdWJzZXF1ZW50IHVuaWNvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKChpICsgNiA+PSBtX2xpbWl0KSBvciAqIChpICsgNSkgIT0gJ1xcJyBvciAqIChp
ICsgNikgIT0gJ3UnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6OmludmFsaWRfYXJndW1lbnQ+
KCJtaXNzaW5nIGxvdyBzdXJyb2dhdGUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCBjb2RlIHl5eXkg
ZnJvbSB1eHh4eFx1eXl5eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNv
ZGVwb2ludDIgPSBzdGQ6OnN0cnRvdWwoc3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDx0eXBl
bmFtZSBzdHJpbmdfdDo6Y29uc3RfcG9pbnRlcj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpICsgNyksIDQpLmNfc3RyKCks
IG51bGxwdHIsIDE2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9
IHRvX3VuaWNvZGUoY29kZXBvaW50LCBjb2RlcG9pbnQyKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gc2tpcCB0aGUgbmV4dCAxMCBjaGFyYWN0ZXJzICh4eHh4XHV5eXl5KQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IDEwOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb2Rl
cG9pbnQgPj0gMHhEQzAwIGFuZCBjb2RlcG9pbnQgPD0gMHhERkZGKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZm91
bmQgYSBsb25lIGxvdyBzdXJyb2dhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VGhyb3c8c3RkOjppbnZhbGlkX2FyZ3VtZW50PigibWlzc2luZyBoaWdoIHN1cnJvZ2F0ZSIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBhZGQgdW5pY29kZSBjaGFyYWN0ZXIocykKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHRvX3VuaWNvZGUoY29kZXBvaW50KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2tpcCB0aGUgbmV4dCBmb3VyIGNoYXJhY3Rl
cnMgKHh4eHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gNDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmIHBhcnNlIGZsb2F0
aW5nIHBvaW50IG51bWJlcgorCisgICAgICAgIFRoaXMgZnVuY3Rpb24gKGFuZCBpdHMgb3Zlcmxv
YWRzKSBzZXJ2ZXMgdG8gc2VsZWN0IHRoZSBtb3N0IGFwcHJvcHJhdGUKKyAgICAgICAgc3RhbmRh
cmQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHBhcnNpbmcgZnVuY3Rpb24gYmFzZWQgb24gdGhlIHR5
cGUKKyAgICAgICAgc3VwcGxpZWQgdmlhIHRoZSBmaXJzdCBwYXJhbWV0ZXIuICBTZXQgdGhpcyB0
byBAYQorICAgICAgICBzdGF0aWNfY2FzdDxudW1iZXJfZmxvYXRfdCo+KG51bGxwdHIpLgorCisg
ICAgICAgIEBwYXJhbVtpbl0gdHlwZSAgdGhlIEByZWYgbnVtYmVyX2Zsb2F0X3QgaW4gdXNlCisK
KyAgICAgICAgQHBhcmFtW2luLG91dF0gZW5kcHRyIHJlY2lldmVzIGEgcG9pbnRlciB0byB0aGUg
Zmlyc3QgY2hhcmFjdGVyIGFmdGVyCisgICAgICAgIHRoZSBudW1iZXIKKworICAgICAgICBAcmV0
dXJuIHRoZSBmbG9hdGluZyBwb2ludCBudW1iZXIKKyAgICAgICAgKi8KKyAgICAgICAgbG9uZyBk
b3VibGUgc3RyX3RvX2Zsb2F0X3QobG9uZyBkb3VibGUqIC8qIHR5cGUgKi8sIGNoYXIqKiBlbmRw
dHIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OnN0cnRvbGQocmVp
bnRlcnByZXRfY2FzdDx0eXBlbmFtZSBzdHJpbmdfdDo6Y29uc3RfcG9pbnRlcj4obV9zdGFydCks
IGVuZHB0cik7CisgICAgICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmIHBhcnNl
IGZsb2F0aW5nIHBvaW50IG51bWJlcgorCisgICAgICAgIFRoaXMgZnVuY3Rpb24gKGFuZCBpdHMg
b3ZlcmxvYWRzKSBzZXJ2ZXMgdG8gc2VsZWN0IHRoZSBtb3N0IGFwcHJvcHJhdGUKKyAgICAgICAg
c3RhbmRhcmQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHBhcnNpbmcgZnVuY3Rpb24gYmFzZWQgb24g
dGhlIHR5cGUKKyAgICAgICAgc3VwcGxpZWQgdmlhIHRoZSBmaXJzdCBwYXJhbWV0ZXIuICBTZXQg
dGhpcyB0byBAYQorICAgICAgICBzdGF0aWNfY2FzdDxudW1iZXJfZmxvYXRfdCo+KG51bGxwdHIp
LgorCisgICAgICAgIEBwYXJhbVtpbl0gdHlwZSAgdGhlIEByZWYgbnVtYmVyX2Zsb2F0X3QgaW4g
dXNlCisKKyAgICAgICAgQHBhcmFtW2luLG91dF0gZW5kcHRyICByZWNpZXZlcyBhIHBvaW50ZXIg
dG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlcgorICAgICAgICB0aGUgbnVtYmVyCisKKyAgICAg
ICAgQHJldHVybiB0aGUgZmxvYXRpbmcgcG9pbnQgbnVtYmVyCisgICAgICAgICovCisgICAgICAg
IGRvdWJsZSBzdHJfdG9fZmxvYXRfdChkb3VibGUqIC8qIHR5cGUgKi8sIGNoYXIqKiBlbmRwdHIp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OnN0cnRvZChyZWludGVy
cHJldF9jYXN0PHR5cGVuYW1lIHN0cmluZ190Ojpjb25zdF9wb2ludGVyPihtX3N0YXJ0KSwgZW5k
cHRyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAgICBAYnJpZWYgcGFyc2UgZmxv
YXRpbmcgcG9pbnQgbnVtYmVyCisKKyAgICAgICAgVGhpcyBmdW5jdGlvbiAoYW5kIGl0cyBvdmVy
bG9hZHMpIHNlcnZlcyB0byBzZWxlY3QgdGhlIG1vc3QgYXBwcm9wcmF0ZQorICAgICAgICBzdGFu
ZGFyZCBmbG9hdGluZyBwb2ludCBudW1iZXIgcGFyc2luZyBmdW5jdGlvbiBiYXNlZCBvbiB0aGUg
dHlwZQorICAgICAgICBzdXBwbGllZCB2aWEgdGhlIGZpcnN0IHBhcmFtZXRlci4gIFNldCB0aGlz
IHRvIEBhCisgICAgICAgIHN0YXRpY19jYXN0PG51bWJlcl9mbG9hdF90Kj4obnVsbHB0cikuCisK
KyAgICAgICAgQHBhcmFtW2luXSB0eXBlICB0aGUgQHJlZiBudW1iZXJfZmxvYXRfdCBpbiB1c2UK
KworICAgICAgICBAcGFyYW1baW4sb3V0XSBlbmRwdHIgIHJlY2lldmVzIGEgcG9pbnRlciB0byB0
aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyCisgICAgICAgIHRoZSBudW1iZXIKKworICAgICAgICBA
cmV0dXJuIHRoZSBmbG9hdGluZyBwb2ludCBudW1iZXIKKyAgICAgICAgKi8KKyAgICAgICAgZmxv
YXQgc3RyX3RvX2Zsb2F0X3QoZmxvYXQqIC8qIHR5cGUgKi8sIGNoYXIqKiBlbmRwdHIpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OnN0cnRvZihyZWludGVycHJldF9j
YXN0PHR5cGVuYW1lIHN0cmluZ190Ojpjb25zdF9wb2ludGVyPihtX3N0YXJ0KSwgZW5kcHRyKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAgICBAYnJpZWYgcmV0dXJuIG51bWJlciB2
YWx1ZSBmb3IgbnVtYmVyIHRva2VucworCisgICAgICAgIFRoaXMgZnVuY3Rpb24gdHJhbnNsYXRl
cyB0aGUgbGFzdCB0b2tlbiBpbnRvIHRoZSBtb3N0IGFwcHJvcHJpYXRlCisgICAgICAgIG51bWJl
ciB0eXBlIChlaXRoZXIgaW50ZWdlciwgdW5zaWduZWQgaW50ZWdlciBvciBmbG9hdGluZyBwb2lu
dCksCisgICAgICAgIHdoaWNoIGlzIHBhc3NlZCBiYWNrIHRvIHRoZSBjYWxsZXIgdmlhIHRoZSBy
ZXN1bHQgcGFyYW1ldGVyLgorCisgICAgICAgIFRoaXMgZnVuY3Rpb24gcGFyc2VzIHRoZSBpbnRl
Z2VyIGNvbXBvbmVudCB1cCB0byB0aGUgcmFkaXggcG9pbnQgb3IKKyAgICAgICAgZXhwb25lbnQg
d2hpbGUgY29sbGVjdGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgJ2Zsb2F0aW5nIHBvaW50Cisg
ICAgICAgIHJlcHJlc2VudGF0aW9uJywgd2hpY2ggaXQgc3RvcmVzIGluIHRoZSByZXN1bHQgcGFy
YW1ldGVyLiBJZiB0aGVyZSBpcworICAgICAgICBubyByYWRpeCBwb2ludCBvciBleHBvbmVudCwg
YW5kIHRoZSBudW1iZXIgY2FuIGZpdCBpbnRvIGEgQHJlZgorICAgICAgICBudW1iZXJfaW50ZWdl
cl90IG9yIEByZWYgbnVtYmVyX3Vuc2lnbmVkX3QgdGhlbiBpdCBzZXRzIHRoZSByZXN1bHQKKyAg
ICAgICAgcGFyYW1ldGVyIGFjY29yZGluZ2x5LgorCisgICAgICAgIElmIHRoZSBudW1iZXIgaXMg
YSBmbG9hdGluZyBwb2ludCBudW1iZXIgdGhlIG51bWJlciBpcyB0aGVuIHBhcnNlZAorICAgICAg
ICB1c2luZyBAYSBzdGQ6c3RydG9kIChvciBAYSBzdGQ6c3RydG9mIG9yIEBhIHN0ZDo6c3RydG9s
ZCkuCisKKyAgICAgICAgQHBhcmFtW291dF0gcmVzdWx0ICBAcmVmIGJhc2ljX2pzb24gb2JqZWN0
IHRvIHJlY2VpdmUgdGhlIG51bWJlciwgb3IKKyAgICAgICAgTkFOIGlmIHRoZSBjb252ZXJzaW9u
IHJlYWQgcGFzdCB0aGUgY3VycmVudCB0b2tlbi4gVGhlIGxhdHRlciBjYXNlCisgICAgICAgIG5l
ZWRzIHRvIGJlIHRyZWF0ZWQgYnkgdGhlIGNhbGxlciBmdW5jdGlvbi4KKyAgICAgICAgKi8KKyAg
ICAgICAgdm9pZCBnZXRfbnVtYmVyKGJhc2ljX2pzb24mIHJlc3VsdCkgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgYXNzZXJ0KG1fc3RhcnQgIT0gbnVsbHB0cik7CisKKyAgICAgICAgICAg
IGNvbnN0IGxleGVyOjpsZXhlcl9jaGFyX3QqIGN1cnB0ciA9IG1fc3RhcnQ7CisKKyAgICAgICAg
ICAgIC8vIGFjY3VtdWxhdGUgdGhlIGludGVnZXIgY29udmVyc2lvbiByZXN1bHQgKHVuc2lnbmVk
IGZvciBub3cpCisgICAgICAgICAgICBudW1iZXJfdW5zaWduZWRfdCB2YWx1ZSA9IDA7CisKKyAg
ICAgICAgICAgIC8vIG1heGltdW0gYWJzb2x1dGUgdmFsdWUgb2YgdGhlIHJlbGV2YW50IGludGVn
ZXIgdHlwZQorICAgICAgICAgICAgbnVtYmVyX3Vuc2lnbmVkX3QgbWF4OworCisgICAgICAgICAg
ICAvLyB0ZW1wb3JhcmlseSBzdG9yZSB0aGUgdHlwZSB0byBhdm9pZCB1bmVjZXNzYXJ5IGJpdGZp
ZWxkIGFjY2VzcworICAgICAgICAgICAgdmFsdWVfdCB0eXBlOworCisgICAgICAgICAgICAvLyBs
b29rIGZvciBzaWduCisgICAgICAgICAgICBpZiAoKmN1cnB0ciA9PSAnLScpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgdHlwZSA9IHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyOworICAg
ICAgICAgICAgICAgIG1heCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pigoc3RkOjpudW1lcmljX2xp
bWl0czxudW1iZXJfaW50ZWdlcl90Pjo6bWF4KSgpKSArIDE7CisgICAgICAgICAgICAgICAgY3Vy
cHRyKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgdHlwZSA9IHZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZDsKKyAgICAgICAg
ICAgICAgICBtYXggPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oKHN0ZDo6bnVtZXJpY19saW1pdHM8
bnVtYmVyX3Vuc2lnbmVkX3Q+OjptYXgpKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBjb3VudCB0aGUgc2lnbmlmaWNhbnQgZmlndXJlcworICAgICAgICAgICAgZm9yICg7IGN1
cnB0ciA8IG1fY3Vyc29yOyBjdXJwdHIrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAvLyBxdWlja2x5IHNraXAgdGVzdHMgaWYgYSBkaWdpdAorICAgICAgICAgICAgICAgIGlmICgq
Y3VycHRyIDwgJzAnIHx8ICpjdXJwdHIgPiAnOScpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoKmN1cnB0ciA9PSAnLicpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IGNvdW50ICcuJyBidXQgY2hhbmdlIHRv
IGZsb2F0CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gdmFsdWVfdDo6bnVtYmVyX2Zs
b2F0OworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gYXNzdW1lIGV4cG9uZW50IChpZiBub3QgdGhl
biB3aWxsIGZhaWwgcGFyc2UpOiBjaGFuZ2UgdG8KKyAgICAgICAgICAgICAgICAgICAgLy8gZmxv
YXQsIHN0b3AgY291bnRpbmcgYW5kIHJlY29yZCBleHBvbmVudCBkZXRhaWxzCisgICAgICAgICAg
ICAgICAgICAgIHR5cGUgPSB2YWx1ZV90OjpudW1iZXJfZmxvYXQ7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIHNraXAg
aWYgZGVmaW5pdGVseSBub3QgYW4gaW50ZWdlcgorICAgICAgICAgICAgICAgIGlmICh0eXBlICE9
IHZhbHVlX3Q6Om51bWJlcl9mbG9hdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIG11bHRpcGx5IGxhc3QgdmFsdWUgYnkgdGVuIGFuZCBhZGQgdGhlIG5ldyBkaWdp
dAorICAgICAgICAgICAgICAgICAgICBhdXRvIHRlbXAgPSB2YWx1ZSAqIDEwICsgKmN1cnB0ciAt
ICcwJzsKKworICAgICAgICAgICAgICAgICAgICAvLyB0ZXN0IGZvciBvdmVyZmxvdworICAgICAg
ICAgICAgICAgICAgICBpZiAodGVtcCA8IHZhbHVlIHx8IHRlbXAgPiBtYXgpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG92ZXJmbG93CisgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlID0gdmFsdWVfdDo6bnVtYmVyX2Zsb2F0OworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gb3ZlcmZsb3cgLSBzYXZlIGl0Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRlbXA7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHNh
dmUgdGhlIHZhbHVlIChpZiBub3QgYSBmbG9hdCkKKyAgICAgICAgICAgIGlmICh0eXBlID09IHZh
bHVlX3Q6Om51bWJlcl91bnNpZ25lZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQubV92YWx1ZS5udW1iZXJfdW5zaWduZWQgPSB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gdmFsdWVfdDo6bnVtYmVyX2ludGVnZXIpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVzdWx0Lm1fdmFsdWUubnVtYmVyX2ludGVnZXIg
PSAtc3RhdGljX2Nhc3Q8bnVtYmVyX2ludGVnZXJfdD4odmFsdWUpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIHBhcnNl
IHdpdGggc3RydG9kCisgICAgICAgICAgICAgICAgcmVzdWx0Lm1fdmFsdWUubnVtYmVyX2Zsb2F0
ID0gc3RyX3RvX2Zsb2F0X3Qoc3RhdGljX2Nhc3Q8bnVtYmVyX2Zsb2F0X3QqPihudWxscHRyKSwg
TlVMTCk7CisKKyAgICAgICAgICAgICAgICAvLyByZXBsYWNlIGluZmluaXR5IGFuZCBOQU4gYnkg
bnVsbAorICAgICAgICAgICAgICAgIGlmIChub3Qgc3RkOjppc2Zpbml0ZShyZXN1bHQubV92YWx1
ZS5udW1iZXJfZmxvYXQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
dHlwZSA9IHZhbHVlX3Q6Om51bGw7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tX3ZhbHVl
ID0gYmFzaWNfanNvbjo6anNvbl92YWx1ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gc2F2ZSB0aGUgdHlwZQorICAgICAgICAgICAgcmVzdWx0
Lm1fdHlwZSA9IHR5cGU7CisgICAgICAgIH0KKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgLy8v
IG9wdGlvbmFsIGlucHV0IHN0cmVhbQorICAgICAgICBzdGQ6OmlzdHJlYW0qIG1fc3RyZWFtID0g
bnVsbHB0cjsKKyAgICAgICAgLy8vIGxpbmUgYnVmZmVyIGJ1ZmZlciBmb3IgbV9zdHJlYW0KKyAg
ICAgICAgc3RyaW5nX3QgbV9saW5lX2J1ZmZlciB7fTsKKyAgICAgICAgLy8vIHVzZWQgZm9yIGZp
bGxpbmcgbV9saW5lX2J1ZmZlcgorICAgICAgICBzdHJpbmdfdCBtX2xpbmVfYnVmZmVyX3RtcCB7
fTsKKyAgICAgICAgLy8vIHRoZSBidWZmZXIgcG9pbnRlcgorICAgICAgICBjb25zdCBsZXhlcl9j
aGFyX3QqIG1fY29udGVudCA9IG51bGxwdHI7CisgICAgICAgIC8vLyBwb2ludGVyIHRvIHRoZSBi
ZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgc3ltYm9sCisgICAgICAgIGNvbnN0IGxleGVyX2NoYXJf
dCogbV9zdGFydCA9IG51bGxwdHI7CisgICAgICAgIC8vLyBwb2ludGVyIGZvciBiYWNrdHJhY2tp
bmcgaW5mb3JtYXRpb24KKyAgICAgICAgY29uc3QgbGV4ZXJfY2hhcl90KiBtX21hcmtlciA9IG51
bGxwdHI7CisgICAgICAgIC8vLyBwb2ludGVyIHRvIHRoZSBjdXJyZW50IHN5bWJvbAorICAgICAg
ICBjb25zdCBsZXhlcl9jaGFyX3QqIG1fY3Vyc29yID0gbnVsbHB0cjsKKyAgICAgICAgLy8vIHBv
aW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyCisgICAgICAgIGNvbnN0IGxleGVyX2NoYXJf
dCogbV9saW1pdCA9IG51bGxwdHI7CisgICAgICAgIC8vLyB0aGUgbGFzdCB0b2tlbiB0eXBlCisg
ICAgICAgIHRva2VuX3R5cGUgbGFzdF90b2tlbl90eXBlID0gdG9rZW5fdHlwZTo6ZW5kX29mX2lu
cHV0OworICAgIH07CisKKyAgICAvKiEKKyAgICBAYnJpZWYgc3ludGF4IGFuYWx5c2lzCisKKyAg
ICBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSByZWN1cnNpdmUgZGVjZW50IHBhcnNlci4KKyAgICAq
LworICAgIGNsYXNzIHBhcnNlcgorICAgIHsKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgLy8vIGEg
cGFyc2VyIHJlYWRpbmcgZnJvbSBhIHN0cmluZyBsaXRlcmFsCisgICAgICAgIHBhcnNlcihjb25z
dCBjaGFyKiBidWZmLCBjb25zdCBwYXJzZXJfY2FsbGJhY2tfdCBjYiA9IG51bGxwdHIpCisgICAg
ICAgICAgICA6IGNhbGxiYWNrKGNiKSwKKyAgICAgICAgICAgICAgbV9sZXhlcihyZWludGVycHJl
dF9jYXN0PGNvbnN0IHR5cGVuYW1lIGxleGVyOjpsZXhlcl9jaGFyX3QqPihidWZmKSwgc3RkOjpz
dHJsZW4oYnVmZikpCisgICAgICAgIHt9CisKKyAgICAgICAgLy8vIGEgcGFyc2VyIHJlYWRpbmcg
ZnJvbSBhbiBpbnB1dCBzdHJlYW0KKyAgICAgICAgcGFyc2VyKHN0ZDo6aXN0cmVhbSYgaXMsIGNv
bnN0IHBhcnNlcl9jYWxsYmFja190IGNiID0gbnVsbHB0cikKKyAgICAgICAgICAgIDogY2FsbGJh
Y2soY2IpLCBtX2xleGVyKGlzKQorICAgICAgICB7fQorCisgICAgICAgIC8vLyBhIHBhcnNlciBy
ZWFkaW5nIGZyb20gYW4gaXRlcmF0b3IgcmFuZ2Ugd2l0aCBjb250aWd1b3VzIHN0b3JhZ2UKKyAg
ICAgICAgdGVtcGxhdGU8Y2xhc3MgSXRlcmF0b3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjwKKyAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6Oml0ZXJh
dG9yX3RyYWl0czxJdGVyYXRvclR5cGU+OjppdGVyYXRvcl9jYXRlZ29yeSwgc3RkOjpyYW5kb21f
YWNjZXNzX2l0ZXJhdG9yX3RhZz46OnZhbHVlCisgICAgICAgICAgICAgICAgICAgICAsIGludD46
OnR5cGUKKyAgICAgICAgICAgICAgICAgPSAwPgorICAgICAgICBwYXJzZXIoSXRlcmF0b3JUeXBl
IGZpcnN0LCBJdGVyYXRvclR5cGUgbGFzdCwgY29uc3QgcGFyc2VyX2NhbGxiYWNrX3QgY2IgPSBu
dWxscHRyKQorICAgICAgICAgICAgOiBjYWxsYmFjayhjYiksCisgICAgICAgICAgICAgIG1fbGV4
ZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB0eXBlbmFtZSBsZXhlcjo6bGV4ZXJfY2hhcl90Kj4o
JigqZmlyc3QpKSwKKyAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0
ZDo6ZGlzdGFuY2UoZmlyc3QsIGxhc3QpKSkKKyAgICAgICAge30KKworICAgICAgICAvLy8gcHVi
bGljIHBhcnNlciBpbnRlcmZhY2UKKyAgICAgICAgYmFzaWNfanNvbiBwYXJzZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIC8vIHJlYWQgZmlyc3QgdG9rZW4KKyAgICAgICAgICAgIGdldF90b2tl
bigpOworCisgICAgICAgICAgICBiYXNpY19qc29uIHJlc3VsdCA9IHBhcnNlX2ludGVybmFsKHRy
dWUpOworICAgICAgICAgICAgcmVzdWx0LmFzc2VydF9pbnZhcmlhbnQoKTsKKworICAgICAgICAg
ICAgZXhwZWN0KGxleGVyOjp0b2tlbl90eXBlOjplbmRfb2ZfaW5wdXQpOworCisgICAgICAgICAg
ICAvLyByZXR1cm4gcGFyc2VyIHJlc3VsdCBhbmQgcmVwbGFjZSBpdCB3aXRoIG51bGwgaW4gY2Fz
ZSB0aGUKKyAgICAgICAgICAgIC8vIHRvcC1sZXZlbCB2YWx1ZSB3YXMgZGlzY2FyZGVkIGJ5IHRo
ZSBjYWxsYmFjayBmdW5jdGlvbgorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5pc19kaXNjYXJk
ZWQoKSA/IGJhc2ljX2pzb24oKSA6IHN0ZDo6bW92ZShyZXN1bHQpOworICAgICAgICB9CisKKyAg
ICAgIHByaXZhdGU6CisgICAgICAgIC8vLyB0aGUgYWN0dWFsIHBhcnNlcgorICAgICAgICBiYXNp
Y19qc29uIHBhcnNlX2ludGVybmFsKGJvb2wga2VlcCkKKyAgICAgICAgeworICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBiYXNpY19qc29uKHZhbHVlX3Q6OmRpc2NhcmRlZCk7CisKKyAgICAgICAg
ICAgIHN3aXRjaCAobGFzdF90b2tlbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBj
YXNlIGxleGVyOjp0b2tlbl90eXBlOjpiZWdpbl9vYmplY3Q6CisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoa2VlcCBhbmQgKG5vdCBjYWxsYmFjaworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9yICgoa2VlcCA9IGNhbGxiYWNrKGRlcHRoKyssIHBh
cnNlX2V2ZW50X3Q6Om9iamVjdF9zdGFydCwgcmVzdWx0KSkgIT0gMCkpKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBleHBsaWNpdGx5IHNldCByZXN1
bHQgdG8gb2JqZWN0IHRvIGNvcGUgd2l0aCB7fQorICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0Lm1fdHlwZSA9IHZhbHVlX3Q6Om9iamVjdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5tX3ZhbHVlID0gdmFsdWVfdDo6b2JqZWN0OworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gcmVhZCBuZXh0IHRva2VuCisgICAgICAgICAgICAgICAg
ICAgIGdldF90b2tlbigpOworCisgICAgICAgICAgICAgICAgICAgIC8vIGNsb3NpbmcgfSAtPiB3
ZSBhcmUgZG9uZQorICAgICAgICAgICAgICAgICAgICBpZiAobGFzdF90b2tlbiA9PSBsZXhlcjo6
dG9rZW5fdHlwZTo6ZW5kX29iamVjdCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZ2V0X3Rva2VuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
a2VlcCBhbmQgY2FsbGJhY2sgYW5kIG5vdCBjYWxsYmFjaygtLWRlcHRoLCBwYXJzZV9ldmVudF90
OjpvYmplY3RfZW5kLCByZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGJhc2ljX2pzb24odmFsdWVfdDo6ZGlzY2Fy
ZGVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAvLyBubyBjb21tYSBpcyBleHBlY3RlZCBoZXJlCisgICAgICAgICAgICAgICAgICAgIHVu
ZXhwZWN0KGxleGVyOjp0b2tlbl90eXBlOjp2YWx1ZV9zZXBhcmF0b3IpOworCisgICAgICAgICAg
ICAgICAgICAgIC8vIG90aGVyd2lzZTogcGFyc2Uga2V5LXZhbHVlIHBhaXJzCisgICAgICAgICAg
ICAgICAgICAgIGRvCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHVnbHksIGJ1dCBjb3VsZCBiZSBmaXhlZCB3aXRoIGxvb3AgcmVvcmdhbml6YXRpb24K
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0X3Rva2VuID09IGxleGVyOjp0b2tlbl90
eXBlOjp2YWx1ZV9zZXBhcmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2V0X3Rva2VuKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0b3JlIGtleQorICAgICAgICAgICAg
ICAgICAgICAgICAgZXhwZWN0KGxleGVyOjp0b2tlbl90eXBlOjp2YWx1ZV9zdHJpbmcpOworICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0byBrZXkgPSBtX2xleGVyLmdldF9zdHJpbmco
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBrZWVwX3RhZyA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGtlZXApCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzaWNf
anNvbiBrKGtleSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlZXBfdGFnID0g
Y2FsbGJhY2soZGVwdGgsIHBhcnNlX2V2ZW50X3Q6OmtleSwgayk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtl
ZXBfdGFnID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlIHNlcGFy
YXRvciAoOikKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldF90b2tlbigpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZXhwZWN0KGxleGVyOjp0b2tlbl90eXBlOjpuYW1lX3NlcGFyYXRvcik7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlIGFuZCBhZGQgdmFsdWUKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGdldF90b2tlbigpOworICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byB2YWx1ZSA9IHBhcnNlX2ludGVybmFsKGtlZXApOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGtlZXAgYW5kIGtlZXBfdGFnIGFuZCBub3QgdmFsdWUuaXNfZGlzY2FyZGVkKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0W2tleV0gPSBzdGQ6Om1vdmUodmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChsYXN0X3Rv
a2VuID09IGxleGVyOjp0b2tlbl90eXBlOjp2YWx1ZV9zZXBhcmF0b3IpOworCisgICAgICAgICAg
ICAgICAgICAgIC8vIGNsb3NpbmcgfQorICAgICAgICAgICAgICAgICAgICBleHBlY3QobGV4ZXI6
OnRva2VuX3R5cGU6OmVuZF9vYmplY3QpOworICAgICAgICAgICAgICAgICAgICBnZXRfdG9rZW4o
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGtlZXAgYW5kIGNhbGxiYWNrIGFuZCBub3QgY2Fs
bGJhY2soLS1kZXB0aCwgcGFyc2VfZXZlbnRfdDo6b2JqZWN0X2VuZCwgcmVzdWx0KSkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYmFzaWNf
anNvbih2YWx1ZV90OjpkaXNjYXJkZWQpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBjYXNlIGxleGVyOjp0b2tlbl90eXBlOjpiZWdpbl9hcnJheToKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChrZWVwIGFuZCAobm90IGNhbGxiYWNr
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgKChrZWVwID0gY2FsbGJhY2so
ZGVwdGgrKywgcGFyc2VfZXZlbnRfdDo6YXJyYXlfc3RhcnQsIHJlc3VsdCkpICE9IDApKSkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhwbGljaXRs
eSBzZXQgcmVzdWx0IHRvIG9iamVjdCB0byBjb3BlIHdpdGggW10KKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5tX3R5cGUgPSB2YWx1ZV90OjphcnJheTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gdmFsdWVfdDo6YXJyYXk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyByZWFkIG5leHQgdG9rZW4KKyAgICAgICAg
ICAgICAgICAgICAgZ2V0X3Rva2VuKCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gY2xvc2lu
ZyBdIC0+IHdlIGFyZSBkb25lCisgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0X3Rva2VuID09
IGxleGVyOjp0b2tlbl90eXBlOjplbmRfYXJyYXkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGdldF90b2tlbigpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGNhbGxiYWNrIGFuZCBub3QgY2FsbGJhY2soLS1kZXB0aCwgcGFyc2VfZXZlbnRfdDo6
YXJyYXlfZW5kLCByZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGJhc2ljX2pzb24odmFsdWVfdDo6ZGlzY2FyZGVk
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAvLyBubyBjb21tYSBpcyBleHBlY3RlZCBoZXJlCisgICAgICAgICAgICAgICAgICAgIHVuZXhw
ZWN0KGxleGVyOjp0b2tlbl90eXBlOjp2YWx1ZV9zZXBhcmF0b3IpOworCisgICAgICAgICAgICAg
ICAgICAgIC8vIG90aGVyd2lzZTogcGFyc2UgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIGRv
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVnbHks
IGJ1dCBjb3VsZCBiZSBmaXhlZCB3aXRoIGxvb3AgcmVvcmdhbml6YXRpb24KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChsYXN0X3Rva2VuID09IGxleGVyOjp0b2tlbl90eXBlOjp2YWx1ZV9z
ZXBhcmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2V0X3Rva2VuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvIHZhbHVlID0gcGFyc2VfaW50ZXJuYWwoa2VlcCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoa2VlcCBhbmQgbm90IHZhbHVlLmlzX2Rpc2NhcmRlZCgpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoX2Jh
Y2soc3RkOjptb3ZlKHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxhc3RfdG9rZW4gPT0g
bGV4ZXI6OnRva2VuX3R5cGU6OnZhbHVlX3NlcGFyYXRvcik7CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gY2xvc2luZyBdCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdChsZXhlcjo6dG9rZW5f
dHlwZTo6ZW5kX2FycmF5KTsKKyAgICAgICAgICAgICAgICAgICAgZ2V0X3Rva2VuKCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChrZWVwIGFuZCBjYWxsYmFjayBhbmQgbm90IGNhbGxiYWNrKC0t
ZGVwdGgsIHBhcnNlX2V2ZW50X3Q6OmFycmF5X2VuZCwgcmVzdWx0KSkKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYmFzaWNfanNvbih2YWx1
ZV90OjpkaXNjYXJkZWQpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBjYXNlIGxleGVyOjp0b2tlbl90eXBlOjpsaXRlcmFsX251bGw6CisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBnZXRfdG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0Lm1fdHlwZSA9IHZhbHVlX3Q6Om51bGw7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhc2UgbGV4ZXI6OnRva2Vu
X3R5cGU6OnZhbHVlX3N0cmluZzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGF1dG8gcyA9IG1fbGV4ZXIuZ2V0X3N0cmluZygpOworICAgICAgICAgICAgICAg
ICAgICBnZXRfdG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYmFzaWNfanNv
bihzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgY2FzZSBsZXhlcjo6dG9rZW5fdHlwZTo6bGl0ZXJhbF90cnVlOgorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2V0X3Rva2VuKCk7CisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSB2YWx1ZV90Ojpib29sZWFuOworICAgICAgICAg
ICAgICAgICAgICByZXN1bHQubV92YWx1ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhc2UgbGV4ZXI6OnRv
a2VuX3R5cGU6OmxpdGVyYWxfZmFsc2U6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBnZXRfdG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9
IHZhbHVlX3Q6OmJvb2xlYW47CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGNhc2UgbGV4ZXI6OnRva2VuX3R5cGU6OnZhbHVlX251bWJlcjoKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1fbGV4ZXIuZ2V0X251bWJlcihy
ZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBnZXRfdG9rZW4oKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBsYXN0IHRv
a2VuIHdhcyB1bmV4cGVjdGVkCisgICAgICAgICAgICAgICAgICAgIHVuZXhwZWN0KGxhc3RfdG9r
ZW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGtlZXAgYW5kIGNhbGxiYWNrIGFuZCBub3QgY2FsbGJhY2soZGVwdGgsIHBhcnNlX2V2ZW50X3Q6
OnZhbHVlLCByZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9
IGJhc2ljX2pzb24odmFsdWVfdDo6ZGlzY2FyZGVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICAvLy8gZ2V0IG5leHQgdG9r
ZW4gZnJvbSBsZXhlcgorICAgICAgICB0eXBlbmFtZSBsZXhlcjo6dG9rZW5fdHlwZSBnZXRfdG9r
ZW4oKQorICAgICAgICB7CisgICAgICAgICAgICBsYXN0X3Rva2VuID0gbV9sZXhlci5zY2FuKCk7
CisgICAgICAgICAgICByZXR1cm4gbGFzdF90b2tlbjsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgZXhwZWN0KHR5cGVuYW1lIGxleGVyOjp0b2tlbl90eXBlIHQpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmICh0ICE9IGxhc3RfdG9rZW4pCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgc3RkOjpzdHJpbmcgZXJyb3JfbXNnID0gInBhcnNlIGVycm9yIC0gdW5leHBlY3Rl
ZCAiOworICAgICAgICAgICAgICAgIGVycm9yX21zZyArPSAobGFzdF90b2tlbiA9PSBsZXhlcjo6
dG9rZW5fdHlwZTo6cGFyc2VfZXJyb3IgPyAoIiciICsgIG1fbGV4ZXIuZ2V0X3Rva2VuX3N0cmlu
ZygpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInIikgOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGV4ZXI6OnRva2VuX3R5cGVfbmFtZShsYXN0X3Rva2VuKSk7Cisg
ICAgICAgICAgICAgICAgZXJyb3JfbXNnICs9ICI7IGV4cGVjdGVkICIgKyBsZXhlcjo6dG9rZW5f
dHlwZV9uYW1lKHQpOworICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6aW52YWxpZF9hcmd1bWVu
dD4oZXJyb3JfbXNnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
dW5leHBlY3QodHlwZW5hbWUgbGV4ZXI6OnRva2VuX3R5cGUgdCkgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKHQgPT0gbGFzdF90b2tlbikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBzdGQ6OnN0cmluZyBlcnJvcl9tc2cgPSAicGFyc2UgZXJyb3IgLSB1bmV4cGVjdGVk
ICI7CisgICAgICAgICAgICAgICAgZXJyb3JfbXNnICs9IChsYXN0X3Rva2VuID09IGxleGVyOjp0
b2tlbl90eXBlOjpwYXJzZV9lcnJvciA/ICgiJyIgKyAgbV9sZXhlci5nZXRfdG9rZW5fc3RyaW5n
KCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiciKSA6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsZXhlcjo6dG9rZW5fdHlwZV9uYW1lKGxhc3RfdG9rZW4pKTsKKyAg
ICAgICAgICAgICAgICBUaHJvdzxzdGQ6OmludmFsaWRfYXJndW1lbnQ+KGVycm9yX21zZyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgLy8vIGN1
cnJlbnQgbGV2ZWwgb2YgcmVjdXJzaW9uCisgICAgICAgIGludCBkZXB0aCA9IDA7CisgICAgICAg
IC8vLyBjYWxsYmFjayBmdW5jdGlvbgorICAgICAgICBjb25zdCBwYXJzZXJfY2FsbGJhY2tfdCBj
YWxsYmFjayA9IG51bGxwdHI7CisgICAgICAgIC8vLyB0aGUgdHlwZSBvZiB0aGUgbGFzdCByZWFk
IHRva2VuCisgICAgICAgIHR5cGVuYW1lIGxleGVyOjp0b2tlbl90eXBlIGxhc3RfdG9rZW4gPSBs
ZXhlcjo6dG9rZW5fdHlwZTo6dW5pbml0aWFsaXplZDsKKyAgICAgICAgLy8vIHRoZSBsZXhlcgor
ICAgICAgICBsZXhlciBtX2xleGVyOworICAgIH07CisKKyAgcHVibGljOgorICAgIC8qIQorICAg
IEBicmllZiBKU09OIFBvaW50ZXIKKworICAgIEEgSlNPTiBwb2ludGVyIGRlZmluZXMgYSBzdHJp
bmcgc3ludGF4IGZvciBpZGVudGlmeWluZyBhIHNwZWNpZmljIHZhbHVlCisgICAgd2l0aGluIGEg
SlNPTiBkb2N1bWVudC4gSXQgY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgYGF0YCBhbmQKKyAg
ICBgb3BlcmF0b3JbXWAuIEZ1cnRoZXJtb3JlLCBKU09OIHBvaW50ZXJzIGFyZSB0aGUgYmFzZSBm
b3IgSlNPTiBwYXRjaGVzLgorCisgICAgQHNhIFtSRkMgNjkwMV0oaHR0cHM6Ly90b29scy5pZXRm
Lm9yZy9odG1sL3JmYzY5MDEpCisKKyAgICBAc2luY2UgdmVyc2lvbiAyLjAuMAorICAgICovCisg
ICAgY2xhc3MganNvbl9wb2ludGVyCisgICAgeworICAgICAgICAvLy8gYWxsb3cgYmFzaWNfanNv
biB0byBhY2Nlc3MgcHJpdmF0ZSBtZW1iZXJzCisgICAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19q
c29uOworCisgICAgICBwdWJsaWM6CisgICAgICAgIC8qIQorICAgICAgICBAYnJpZWYgY3JlYXRl
IEpTT04gcG9pbnRlcgorCisgICAgICAgIENyZWF0ZSBhIEpTT04gcG9pbnRlciBhY2NvcmRpbmcg
dG8gdGhlIHN5bnRheCBkZXNjcmliZWQgaW4KKyAgICAgICAgW1NlY3Rpb24gMyBvZiBSRkM2OTAx
XShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjkwMSNzZWN0aW9uLTMpLgorCisgICAg
ICAgIEBwYXJhbVtpbl0gcyAgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgSlNPTiBwb2ludGVyOyBp
ZiBvbWl0dGVkLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICBlbXB0eSBzdHJpbmcgaXMgYXNz
dW1lZCB3aGljaCByZWZlcmVuY2VzIHRoZSB3aG9sZSBKU09OCisgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWUKKworICAgICAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgcmVmZXJlbmNl
IHRva2VuIGlzIG5vbmVtcHR5IGFuZCBkb2VzIG5vdAorICAgICAgICBiZWdpbiB3aXRoIGEgc2xh
c2ggKGAvYCk7IGV4YW1wbGU6IGAiSlNPTiBwb2ludGVyIG11c3QgYmUgZW1wdHkgb3IKKyAgICAg
ICAgYmVnaW4gd2l0aCAvImAKKyAgICAgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIGEg
dGlsZGUgKGB+YCkgaXMgbm90IGZvbGxvd2VkIGJ5IGAwYAorICAgICAgICAocmVwcmVzZW50aW5n
IGB+YCkgb3IgYDFgIChyZXByZXNlbnRpbmcgYC9gKTsgZXhhbXBsZTogYCJlc2NhcGUgZXJyb3I6
CisgICAgICAgIH4gbXVzdCBiZSBmb2xsb3dlZCB3aXRoIDAgb3IgMSJgCisKKyAgICAgICAgQGxp
dmVleGFtcGxle1RoZSBleGFtcGxlIHNob3dzIHRoZSBjb25zdHJ1Y3Rpb24gc2V2ZXJhbCB2YWxp
ZCBKU09OCisgICAgICAgIHBvaW50ZXJzIGFzIHdlbGwgYXMgdGhlIGV4Y2VwdGlvbmFsIGJlaGF2
aW9yLixqc29uX3BvaW50ZXJ9CisKKyAgICAgICAgQHNpbmNlIHZlcnNpb24gMi4wLjAKKyAgICAg
ICAgKi8KKyAgICAgICAgZXhwbGljaXQganNvbl9wb2ludGVyKGNvbnN0IHN0ZDo6c3RyaW5nJiBz
ID0gIiIpCisgICAgICAgICAgICA6IHJlZmVyZW5jZV90b2tlbnMoc3BsaXQocykpCisgICAgICAg
IHt9CisKKyAgICAgICAgLyohCisgICAgICAgIEBicmllZiByZXR1cm4gYSBzdHJpbmcgcmVwcmVz
ZW50YXRpb24gb2YgdGhlIEpTT04gcG9pbnRlcgorCisgICAgICAgIEBpbnZhcmlhbnQgRm9yIGVh
Y2ggSlNPTiBwb2ludGVyIGBwdHJgLCBpdCBob2xkczoKKyAgICAgICAgQGNvZGUgey5jcHB9Cisg
ICAgICAgIHB0ciA9PSBqc29uX3BvaW50ZXIocHRyLnRvX3N0cmluZygpKTsKKyAgICAgICAgQGVu
ZGNvZGUKKworICAgICAgICBAcmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBK
U09OIHBvaW50ZXIKKworICAgICAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgc2hvd3MgdGhl
IHJlc3VsdCBvZiBgdG9fc3RyaW5nYC4sCisgICAgICAgIGpzb25fcG9pbnRlcl9fdG9fc3RyaW5n
fQorCisgICAgICAgIEBzaW5jZSB2ZXJzaW9uIDIuMC4wCisgICAgICAgICovCisgICAgICAgIHN0
ZDo6c3RyaW5nIHRvX3N0cmluZygpIGNvbnN0IG5vZXhjZXB0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBzdGQ6OmFjY3VtdWxhdGUocmVmZXJlbmNlX3Rva2Vucy5iZWdpbigpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VfdG9rZW5zLmVuZCgpLCBz
dGQ6OnN0cmluZ3t9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXShjb25z
dCBzdGQ6OnN0cmluZyAmIGEsIGNvbnN0IHN0ZDo6c3RyaW5nICYgYikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gYSArICIvIiArIGVzY2FwZShiKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9CisKKyAgICAgICAgLy8vIEBjb3B5ZG9jIHRvX3N0cmluZygpCisgICAg
ICAgIG9wZXJhdG9yIHN0ZDo6c3RyaW5nKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIHRvX3N0cmluZygpOworICAgICAgICB9CisKKyAgICAgIHByaXZhdGU6CisgICAgICAg
IC8vLyByZW1vdmUgYW5kIHJldHVybiBsYXN0IHJlZmVyZW5jZSBwb2ludGVyCisgICAgICAgIHN0
ZDo6c3RyaW5nIHBvcF9iYWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGlzX3Jvb3Qo
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJv
cj4oIkpTT04gcG9pbnRlciBoYXMgbm8gcGFyZW50Iik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGF1dG8gbGFzdCA9IHJlZmVyZW5jZV90b2tlbnMuYmFjaygpOworICAgICAgICAgICAg
cmVmZXJlbmNlX3Rva2Vucy5wb3BfYmFjaygpOworICAgICAgICAgICAgcmV0dXJuIGxhc3Q7Cisg
ICAgICAgIH0KKworICAgICAgICAvLy8gcmV0dXJuIHdoZXRoZXIgcG9pbnRlciBwb2ludHMgdG8g
dGhlIHJvb3QgZG9jdW1lbnQKKyAgICAgICAgYm9vbCBpc19yb290KCkgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZV90b2tlbnMuZW1wdHkoKTsKKyAgICAgICAg
fQorCisgICAgICAgIGpzb25fcG9pbnRlciB0b3AoKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoaXNfcm9vdCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRocm93
PHN0ZDo6ZG9tYWluX2Vycm9yPigiSlNPTiBwb2ludGVyIGhhcyBubyBwYXJlbnQiKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAganNvbl9wb2ludGVyIHJlc3VsdCA9ICp0aGlzOworICAg
ICAgICAgICAgcmVzdWx0LnJlZmVyZW5jZV90b2tlbnMgPSB7cmVmZXJlbmNlX3Rva2Vuc1swXX07
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgLyohCisg
ICAgICAgIEBicmllZiBjcmVhdGUgYW5kIHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgcG9pbnRl
ZCB0byB2YWx1ZQorCisgICAgICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgbnVtYmVyIG9m
IHJlZmVyZW5jZSB0b2tlbnMuCisgICAgICAgICovCisgICAgICAgIHJlZmVyZW5jZSBnZXRfYW5k
X2NyZWF0ZShyZWZlcmVuY2UgaikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcG9pbnRl
ciByZXN1bHQgPSAmajsKKworICAgICAgICAgICAgLy8gaW4gY2FzZSBubyByZWZlcmVuY2UgdG9r
ZW5zIGV4aXN0LCByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlCisgICAgICAgICAgICAvLyBKU09O
IHZhbHVlIGogd2hpY2ggd2lsbCBiZSBvdmVyd3JpdHRlbiBieSBhIHByaW1pdGl2ZSB2YWx1ZQor
ICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiByZWZlcmVuY2VfdG9rZW4gOiByZWZlcmVuY2Vf
dG9rZW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAocmVzdWx0LT5t
X3R5cGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNlIHZhbHVl
X3Q6Om51bGw6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChyZWZlcmVuY2VfdG9rZW4gPT0gIjAiKQorICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0IGEgbmV3IGFycmF5IGlmIHJlZmVy
ZW5jZSB0b2tlbiBpcyAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gJnJl
c3VsdC0+b3BlcmF0b3JbXSgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBzdGFydCBhIG5ldyBvYmplY3Qgb3RoZXJ3aXNlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gJnJlc3VsdC0+b3BlcmF0b3JbXShyZWZl
cmVuY2VfdG9rZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGFuIGVudHJ5IGluIHRoZSBvYmplY3QKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICZyZXN1bHQtPm9wZXJhdG9yW10ocmVmZXJlbmNl
X3Rva2VuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGFuIGVu
dHJ5IGluIHRoZSBhcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gJnJlc3Vs
dC0+b3BlcmF0b3JbXShzdGF0aWNfY2FzdDxzaXplX3R5cGU+KHN0ZDo6c3RvaShyZWZlcmVuY2Vf
dG9rZW4pKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgIFRo
ZSBmb2xsb3dpbmcgY29kZSBpcyBvbmx5IHJlYWNoZWQgaWYgdGhlcmUgZXhpc3RzIGEKKyAgICAg
ICAgICAgICAgICAgICAgcmVmZXJlbmNlIHRva2VuIF9hbmRfIHRoZSBjdXJyZW50IHZhbHVlIGlz
IHByaW1pdGl2ZS4gSW4KKyAgICAgICAgICAgICAgICAgICAgdGhpcyBjYXNlLCB3ZSBoYXZlIGFu
IGVycm9yIHNpdHVhdGlvbiwgYmVjYXVzZSBwcmltaXRpdmUKKyAgICAgICAgICAgICAgICAgICAg
dmFsdWVzIG1heSBvbmx5IG9jY3VyIGFzIHNpbmdsZSB2YWx1ZTsgdGhhdCBpcywgd2l0aCBhbgor
ICAgICAgICAgICAgICAgICAgICBlbXB0eSBsaXN0IG9mIHJlZmVyZW5jZSB0b2tlbnMuCisgICAg
ICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWlu
X2Vycm9yPigiaW52YWxpZCB2YWx1ZSB0byB1bmZsYXR0ZW4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0
dXJuICpyZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmIHJl
dHVybiBhIHJlZmVyZW5jZSB0byB0aGUgcG9pbnRlZCB0byB2YWx1ZQorCisgICAgICAgIEBub3Rl
IFRoaXMgdmVyc2lvbiBkb2VzIG5vdCB0aHJvdyBpZiBhIHZhbHVlIGlzIG5vdCBwcmVzZW50LCBi
dXQgdHJpZXMKKyAgICAgICAgdG8gY3JlYXRlIG5lc3RlZCB2YWx1ZXMgaW5zdGVhZC4gRm9yIGlu
c3RhbmNlLCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyAgICAgICAgd2l0aCBwb2ludGVyIGAiL3Ro
aXMvdGhhdCJgIG9uIGEgbnVsbCB2YWx1ZSBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcKKyAgICAg
ICAgYG9wZXJhdG9yW10oInRoaXMiKS5vcGVyYXRvcltdKCJ0aGF0IilgIG9uIHRoYXQgdmFsdWUs
IGVmZmVjdGl2ZWx5CisgICAgICAgIGNoYW5naW5nIHRoZSBudWxsIHZhbHVlIHRvIGFuIG9iamVj
dC4KKworICAgICAgICBAcGFyYW1baW5dIHB0ciAgYSBKU09OIHZhbHVlCisKKyAgICAgICAgQHJl
dHVybiByZWZlcmVuY2UgdG8gdGhlIEpTT04gdmFsdWUgcG9pbnRlZCB0byBieSB0aGUgSlNPTiBw
b2ludGVyCisKKyAgICAgICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIHRoZSBsZW5ndGggb2YgdGhl
IEpTT04gcG9pbnRlci4KKworICAgICAgICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2UgICAgICBp
ZiB0aGUgSlNPTiBwb2ludGVyIGNhbiBub3QgYmUgcmVzb2x2ZWQKKyAgICAgICAgQHRocm93IHN0
ZDo6ZG9tYWluX2Vycm9yICAgICAgaWYgYW4gYXJyYXkgaW5kZXggYmVnaW5zIHdpdGggJzAnCisg
ICAgICAgIEB0aHJvdyBzdGQ6OmludmFsaWRfYXJndW1lbnQgIGlmIGFuIGFycmF5IGluZGV4IHdh
cyBub3QgYSBudW1iZXIKKyAgICAgICAgKi8KKyAgICAgICAgcmVmZXJlbmNlIGdldF91bmNoZWNr
ZWQocG9pbnRlciBwdHIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoY29uc3Qg
YXV0byYgcmVmZXJlbmNlX3Rva2VuIDogcmVmZXJlbmNlX3Rva2VucykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IG51bGwgdmFsdWVzIHRvIGFycmF5cyBvciBvYmpl
Y3RzIGJlZm9yZSBjb250aW51aW5nCisgICAgICAgICAgICAgICAgaWYgKHB0ci0+bV90eXBlID09
IHZhbHVlX3Q6Om51bGwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAv
LyBjaGVjayBpZiByZWZlcmVuY2UgdG9rZW4gaXMgYSBudW1iZXIKKyAgICAgICAgICAgICAgICAg
ICAgY29uc3QgYm9vbCBudW1zID0gc3RkOjphbGxfb2YocmVmZXJlbmNlX3Rva2VuLmJlZ2luKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVy
ZW5jZV90b2tlbi5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgW10oY29uc3QgY2hhciB4KQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjppc2RpZ2l0KHgpOworICAgICAgICAgICAg
ICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgdmFsdWUgdG8gYXJy
YXkgZm9yIG51bWJlcnMgb3IgIi0iIG9yIHRvIG9iamVjdAorICAgICAgICAgICAgICAgICAgICAv
LyBvdGhlcndpc2UKKyAgICAgICAgICAgICAgICAgICAgaWYgKG51bXMgb3IgcmVmZXJlbmNlX3Rv
a2VuID09ICItIikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgKnB0ciA9IHZhbHVlX3Q6OmFycmF5OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgKnB0ciA9IHZhbHVlX3Q6Om9iamVjdDsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHN3aXRjaCAocHRyLT5tX3R5cGUp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om9i
amVjdDoKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dXNlIHVuY2hlY2tlZCBvYmplY3QgYWNjZXNzCisgICAgICAgICAgICAgICAgICAgICAgICBwdHIg
PSAmcHRyLT5vcGVyYXRvcltdKHJlZmVyZW5jZV90b2tlbik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
IGNhc2UgdmFsdWVfdDo6YXJyYXk6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGVycm9yIGNvbmRpdGlvbiAoY2YuIFJGQyA2OTAxLCBTZWN0LiA0KQor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZV90b2tlbi5zaXplKCkgPiAxIGFu
ZCByZWZlcmVuY2VfdG9rZW5bMF0gPT0gJzAnKQorICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiYXJy
YXkgaW5kZXggbXVzdCBub3QgYmVnaW4gd2l0aCAnMCciKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZV90b2tlbiA9PSAi
LSIpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gZXhwbGljaXR5bHkgdHJlYXQgIi0iIGFzIGluZGV4IGJleW9uZCB0aGUgZW5kCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHRyID0gJnB0ci0+b3BlcmF0b3JbXShwdHItPm1fdmFs
dWUuYXJyYXktPnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gY29udmVydCBhcnJheSBpbmRleCB0byBudW1iZXI7IHVuY2hl
Y2tlZCBhY2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHIgPSAmcHRyLT5vcGVy
YXRvcltdKHN0YXRpY19jYXN0PHNpemVfdHlwZT4oc3RkOjpzdG9pKHJlZmVyZW5jZV90b2tlbikp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgVGhyb3c8
c3RkOjpvdXRfb2ZfcmFuZ2U+KCJ1bnJlc29sdmVkIHJlZmVyZW5jZSB0b2tlbiAnIiArIHJlZmVy
ZW5jZV90b2tlbiArICInIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiAqcHRyOworICAgICAgICB9
CisKKyAgICAgICAgcmVmZXJlbmNlIGdldF9jaGVja2VkKHBvaW50ZXIgcHRyKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlZmVyZW5jZV90b2tlbiA6IHJl
ZmVyZW5jZV90b2tlbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChw
dHItPm1fdHlwZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
dmFsdWVfdDo6b2JqZWN0OgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBub3RlOiBhdCBwZXJmb3JtcyByYW5nZSBjaGVjaworICAgICAgICAgICAgICAg
ICAgICAgICAgcHRyID0gJnB0ci0+YXQocmVmZXJlbmNlX3Rva2VuKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZV90b2tlbiA9PSAiLSIpCisgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIi0iIGFsd2F5
cyBmYWlscyB0aGUgcmFuZ2UgY2hlY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJv
dzxzdGQ6Om91dF9vZl9yYW5nZT4oImFycmF5IGluZGV4ICctJyAoIiArCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp0b19zdHJpbmcocHRy
LT5tX3ZhbHVlLmFycmF5LT5zaXplKCkpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiKSBpcyBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXJyb3IgY29uZGl0
aW9uIChjZi4gUkZDIDY5MDEsIFNlY3QuIDQpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cmVmZXJlbmNlX3Rva2VuLnNpemUoKSA+IDEgYW5kIHJlZmVyZW5jZV90b2tlblswXSA9PSAnMCcp
CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJhcnJheSBpbmRleCBtdXN0IG5vdCBiZWdpbiB3aXRo
ICcwJyIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBub3RlOiBhdCBwZXJmb3JtcyByYW5nZSBjaGVjaworICAgICAgICAgICAgICAgICAg
ICAgICAgcHRyID0gJnB0ci0+YXQoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihzdGQ6OnN0b2kocmVm
ZXJlbmNlX3Rva2VuKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6Om91dF9vZl9y
YW5nZT4oInVucmVzb2x2ZWQgcmVmZXJlbmNlIHRva2VuICciICsgcmVmZXJlbmNlX3Rva2VuICsg
IiciKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcmV0dXJuICpwdHI7CisgICAgICAgIH0KKworICAgICAgICAv
KiEKKyAgICAgICAgQGJyaWVmIHJldHVybiBhIGNvbnN0IHJlZmVyZW5jZSB0byB0aGUgcG9pbnRl
ZCB0byB2YWx1ZQorCisgICAgICAgIEBwYXJhbVtpbl0gcHRyICBhIEpTT04gdmFsdWUKKworICAg
ICAgICBAcmV0dXJuIGNvbnN0IHJlZmVyZW5jZSB0byB0aGUgSlNPTiB2YWx1ZSBwb2ludGVkIHRv
IGJ5IHRoZSBKU09OCisgICAgICAgICAgICAgICAgcG9pbnRlcgorICAgICAgICAqLworICAgICAg
ICBjb25zdF9yZWZlcmVuY2UgZ2V0X3VuY2hlY2tlZChjb25zdF9wb2ludGVyIHB0cikgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiByZWZlcmVuY2VfdG9rZW4g
OiByZWZlcmVuY2VfdG9rZW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRj
aCAocHRyLT5tX3R5cGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBj
YXNlIHZhbHVlX3Q6Om9iamVjdDoKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdXNlIHVuY2hlY2tlZCBvYmplY3QgYWNjZXNzCisgICAgICAgICAgICAg
ICAgICAgICAgICBwdHIgPSAmcHRyLT5vcGVyYXRvcltdKHJlZmVyZW5jZV90b2tlbik7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YXJyYXk6CisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZlcmVuY2VfdG9rZW4gPT0gIi0iKQor
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
ICItIiBjYW5ub3QgYmUgdXNlZCBmb3IgY29uc3QgYWNjZXNzCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVGhyb3c8c3RkOjpvdXRfb2ZfcmFuZ2U+KCJhcnJheSBpbmRleCAnLScgKCIgKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
dG9fc3RyaW5nKHB0ci0+bV92YWx1ZS5hcnJheS0+c2l6ZSgpKSArCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIikgaXMgb3V0IG9mIHJhbmdlIik7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGVycm9yIGNvbmRpdGlvbiAoY2YuIFJGQyA2OTAxLCBTZWN0LiA0KQorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHJlZmVyZW5jZV90b2tlbi5zaXplKCkgPiAxIGFuZCByZWZlcmVuY2VfdG9r
ZW5bMF0gPT0gJzAnKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiYXJyYXkgaW5kZXggbXVzdCBu
b3QgYmVnaW4gd2l0aCAnMCciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdXNlIHVuY2hlY2tlZCBhcnJheSBhY2Nlc3MKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHB0ciA9ICZwdHItPm9wZXJhdG9yW10oc3RhdGljX2Nhc3Q8c2l6ZV90
eXBlPihzdGQ6OnN0b2kocmVmZXJlbmNlX3Rva2VuKSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBU
aHJvdzxzdGQ6Om91dF9vZl9yYW5nZT4oInVucmVzb2x2ZWQgcmVmZXJlbmNlIHRva2VuICciICsg
cmVmZXJlbmNlX3Rva2VuICsgIiciKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuICpwdHI7CisgICAg
ICAgIH0KKworICAgICAgICBjb25zdF9yZWZlcmVuY2UgZ2V0X2NoZWNrZWQoY29uc3RfcG9pbnRl
ciBwdHIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgcmVm
ZXJlbmNlX3Rva2VuIDogcmVmZXJlbmNlX3Rva2VucykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHB0ci0+bV90eXBlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6CisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdGU6IGF0IHBlcmZvcm1zIHJhbmdlIGNoZWNr
CisgICAgICAgICAgICAgICAgICAgICAgICBwdHIgPSAmcHRyLT5hdChyZWZlcmVuY2VfdG9rZW4p
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5OgorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVmZXJlbmNlX3Rva2VuID09
ICItIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyAiLSIgYWx3YXlzIGZhaWxzIHRoZSByYW5nZSBjaGVjaworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRocm93PHN0ZDo6b3V0X29mX3JhbmdlPigiYXJyYXkgaW5kZXggJy0nICgi
ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6OnRvX3N0cmluZyhwdHItPm1fdmFsdWUuYXJyYXktPnNpemUoKSkgKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpIGlzIG91dCBvZiByYW5n
ZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBlcnJvciBjb25kaXRpb24gKGNmLiBSRkMgNjkwMSwgU2VjdC4gNCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChyZWZlcmVuY2VfdG9rZW4uc2l6ZSgpID4gMSBhbmQgcmVmZXJlbmNl
X3Rva2VuWzBdID09ICcwJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oImFycmF5IGluZGV4IG11
c3Qgbm90IGJlZ2luIHdpdGggJzAnIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdGU6IGF0IHBlcmZvcm1zIHJhbmdlIGNoZWNrCisg
ICAgICAgICAgICAgICAgICAgICAgICBwdHIgPSAmcHRyLT5hdChzdGF0aWNfY2FzdDxzaXplX3R5
cGU+KHN0ZDo6c3RvaShyZWZlcmVuY2VfdG9rZW4pKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRo
cm93PHN0ZDo6b3V0X29mX3JhbmdlPigidW5yZXNvbHZlZCByZWZlcmVuY2UgdG9rZW4gJyIgKyBy
ZWZlcmVuY2VfdG9rZW4gKyAiJyIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gKnB0cjsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vLyBzcGxpdCB0aGUgc3RyaW5nIGlucHV0IHRvIHJlZmVyZW5jZSB0
b2tlbnMKKyAgICAgICAgc3RhdGljIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzcGxpdChjb25z
dCBzdGQ6OnN0cmluZyYgcmVmZXJlbmNlX3N0cmluZykKKyAgICAgICAgeworICAgICAgICAgICAg
c3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHJlc3VsdDsKKworICAgICAgICAgICAgLy8gc3BlY2lh
bCBjYXNlOiBlbXB0eSByZWZlcmVuY2Ugc3RyaW5nIC0+IG5vIHJlZmVyZW5jZSB0b2tlbnMKKyAg
ICAgICAgICAgIGlmIChyZWZlcmVuY2Vfc3RyaW5nLmVtcHR5KCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gY2hlY2sgaWYgbm9uZW1wdHkgcmVmZXJlbmNlIHN0cmluZyBiZWdpbnMgd2l0aCBzbGFz
aAorICAgICAgICAgICAgaWYgKHJlZmVyZW5jZV9zdHJpbmdbMF0gIT0gJy8nKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiSlNPTiBwb2lu
dGVyIG11c3QgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCAnLyciKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gZXh0cmFjdCB0aGUgcmVmZXJlbmNlIHRva2VuczoKKyAgICAgICAgICAg
IC8vIC0gc2xhc2g6IHBvc2l0aW9uIG9mIHRoZSBsYXN0IHJlYWQgc2xhc2ggKG9yIGVuZCBvZiBz
dHJpbmcpCisgICAgICAgICAgICAvLyAtIHN0YXJ0OiBwb3NpdGlvbiBhZnRlciB0aGUgcHJldmlv
dXMgc2xhc2gKKyAgICAgICAgICAgIGZvciAoCisgICAgICAgICAgICAgICAgLy8gc2VhcmNoIGZv
ciB0aGUgZmlyc3Qgc2xhc2ggYWZ0ZXIgdGhlIGZpcnN0IGNoYXJhY3RlcgorICAgICAgICAgICAg
ICAgIHNpemVfdCBzbGFzaCA9IHJlZmVyZW5jZV9zdHJpbmcuZmluZF9maXJzdF9vZigiLyIsIDEp
LAorICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaXJzdCByZWZl
cmVuY2UgdG9rZW4KKyAgICAgICAgICAgICAgICBzdGFydCA9IDE7CisgICAgICAgICAgICAgICAg
Ly8gd2UgY2FuIHN0b3AgaWYgc3RhcnQgPT0gc3RyaW5nOjpucG9zKzEgPSAwCisgICAgICAgICAg
ICAgICAgc3RhcnQgIT0gMDsKKyAgICAgICAgICAgICAgICAvLyBzZXQgdGhlIGJlZ2lubmluZyBv
ZiB0aGUgbmV4dCByZWZlcmVuY2UgdG9rZW4KKyAgICAgICAgICAgICAgICAvLyAod2lsbCBldmVu
dHVhbGx5IGJlIDAgaWYgc2xhc2ggPT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgICAgICAgICAg
ICAgc3RhcnQgPSBzbGFzaCArIDEsCisgICAgICAgICAgICAgICAgLy8gZmluZCBuZXh0IHNsYXNo
CisgICAgICAgICAgICAgICAgc2xhc2ggPSByZWZlcmVuY2Vfc3RyaW5nLmZpbmRfZmlyc3Rfb2Yo
Ii8iLCBzdGFydCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gdXNlIHRoZSB0
ZXh0IGJldHdlZW4gdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVmZXJlbmNlIHRva2VuCisgICAgICAg
ICAgICAgICAgLy8gKHN0YXJ0KSBhbmQgdGhlIGxhc3Qgc2xhc2ggKHNsYXNoKS4KKyAgICAgICAg
ICAgICAgICBhdXRvIHJlZmVyZW5jZV90b2tlbiA9IHJlZmVyZW5jZV9zdHJpbmcuc3Vic3RyKHN0
YXJ0LCBzbGFzaCAtIHN0YXJ0KTsKKworICAgICAgICAgICAgICAgIC8vIGNoZWNrIHJlZmVyZW5j
ZSB0b2tlbnMgYXJlIHByb3Blcmx5IGVzY2FwZWQKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBwb3MgPSByZWZlcmVuY2VfdG9rZW4uZmluZF9maXJzdF9vZigifiIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgcG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAgICAgICAgICAgICAg
ICAgICAgcG9zID0gcmVmZXJlbmNlX3Rva2VuLmZpbmRfZmlyc3Rfb2YoIn4iLCBwb3MgKyAxKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZWZlcmVuY2Vf
dG9rZW5bcG9zXSA9PSAnficpOworCisgICAgICAgICAgICAgICAgICAgIC8vIH4gbXVzdCBiZSBm
b2xsb3dlZCBieSAwIG9yIDEKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBvcyA9PSByZWZlcmVu
Y2VfdG9rZW4uc2l6ZSgpIC0gMSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWZl
cmVuY2VfdG9rZW5bcG9zICsgMV0gIT0gJzAnIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZWZlcmVuY2VfdG9rZW5bcG9zICsgMV0gIT0gJzEnKSkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJl
c2NhcGUgZXJyb3I6ICd+JyBtdXN0IGJlIGZvbGxvd2VkIHdpdGggJzAnIG9yICcxJyIpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
Ly8gZmluYWxseSwgc3RvcmUgdGhlIHJlZmVyZW5jZSB0b2tlbgorICAgICAgICAgICAgICAgIHVu
ZXNjYXBlKHJlZmVyZW5jZV90b2tlbik7CisgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2hfYmFj
ayhyZWZlcmVuY2VfdG9rZW4pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICB9CisKKyAgICAgIHByaXZhdGU6CisgICAgICAgIC8qIQorICAgICAg
ICBAYnJpZWYgcmVwbGFjZSBhbGwgb2NjdXJyZW5jZXMgb2YgYSBzdWJzdHJpbmcgYnkgYW5vdGhl
ciBzdHJpbmcKKworICAgICAgICBAcGFyYW1baW4sb3V0XSBzICB0aGUgc3RyaW5nIHRvIG1hbmlw
dWxhdGUKKyAgICAgICAgQHBhcmFtW2luXSAgICAgZiAgdGhlIHN1YnN0cmluZyB0byByZXBsYWNl
IHdpdGggQGEgdAorICAgICAgICBAcGFyYW1baW5dICAgICB0ICB0aGUgc3RyaW5nIHRvIHJlcGxh
Y2UgQGEgZgorCisgICAgICAgIEByZXR1cm4gVGhlIHN0cmluZyBAYSBzIHdoZXJlIGFsbCBvY2N1
cnJlbmNlcyBvZiBAYSBmIGFyZSByZXBsYWNlZAorICAgICAgICAgICAgICAgIHdpdGggQGEgdC4K
KworICAgICAgICBAcHJlIFRoZSBzZWFyY2ggc3RyaW5nIEBhIGYgbXVzdCBub3QgYmUgZW1wdHku
CisKKyAgICAgICAgQHNpbmNlIHZlcnNpb24gMi4wLjAKKyAgICAgICAgKi8KKyAgICAgICAgc3Rh
dGljIHZvaWQgcmVwbGFjZV9zdWJzdHJpbmcoc3RkOjpzdHJpbmcmIHMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdCkKKyAgICAg
ICAgeworICAgICAgICAgICAgYXNzZXJ0KG5vdCBmLmVtcHR5KCkpOworCisgICAgICAgICAgICBm
b3IgKAorICAgICAgICAgICAgICAgIHNpemVfdCBwb3MgPSBzLmZpbmQoZik7ICAgICAgICAgLy8g
ZmluZCBmaXJzdCBvY2N1cnJlbmNlIG9mIGYKKyAgICAgICAgICAgICAgICBwb3MgIT0gc3RkOjpz
dHJpbmc6Om5wb3M7ICAgICAgIC8vIG1ha2Ugc3VyZSBmIHdhcyBmb3VuZAorICAgICAgICAgICAg
ICAgIHMucmVwbGFjZShwb3MsIGYuc2l6ZSgpLCB0KSwgICAgLy8gcmVwbGFjZSB3aXRoIHQKKyAg
ICAgICAgICAgICAgICBwb3MgPSBzLmZpbmQoZiwgcG9zICsgdC5zaXplKCkpIC8vIGZpbmQgbmV4
dCBvY2N1cnJlbmNlIG9mIGYKKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKworICAgICAgICAv
Ly8gZXNjYXBlIHRpbGRlIGFuZCBzbGFzaAorICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgZXNj
YXBlKHN0ZDo6c3RyaW5nIHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGVzY2FwZSAifiIi
IHRvICJ+MCIgYW5kICIvIiB0byAifjEiCisgICAgICAgICAgICByZXBsYWNlX3N1YnN0cmluZyhz
LCAifiIsICJ+MCIpOworICAgICAgICAgICAgcmVwbGFjZV9zdWJzdHJpbmcocywgIi8iLCAifjEi
KTsKKyAgICAgICAgICAgIHJldHVybiBzOworICAgICAgICB9CisKKyAgICAgICAgLy8vIHVuZXNj
YXBlIHRpbGRlIGFuZCBzbGFzaAorICAgICAgICBzdGF0aWMgdm9pZCB1bmVzY2FwZShzdGQ6OnN0
cmluZyYgcykKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZmlyc3QgdHJhbnNmb3JtIGFueSBv
Y2N1cnJlbmNlIG9mIHRoZSBzZXF1ZW5jZSAnfjEnIHRvICcvJworICAgICAgICAgICAgcmVwbGFj
ZV9zdWJzdHJpbmcocywgIn4xIiwgIi8iKTsKKyAgICAgICAgICAgIC8vIHRoZW4gdHJhbnNmb3Jt
IGFueSBvY2N1cnJlbmNlIG9mIHRoZSBzZXF1ZW5jZSAnfjAnIHRvICd+JworICAgICAgICAgICAg
cmVwbGFjZV9zdWJzdHJpbmcocywgIn4wIiwgIn4iKTsKKyAgICAgICAgfQorCisgICAgICAgIC8q
IQorICAgICAgICBAcGFyYW1baW5dIHJlZmVyZW5jZV9zdHJpbmcgIHRoZSByZWZlcmVuY2Ugc3Ry
aW5nIHRvIHRoZSBjdXJyZW50IHZhbHVlCisgICAgICAgIEBwYXJhbVtpbl0gdmFsdWUgICAgICAg
ICAgICAgdGhlIHZhbHVlIHRvIGNvbnNpZGVyCisgICAgICAgIEBwYXJhbVtpbixvdXRdIHJlc3Vs
dCAgICAgICAgdGhlIHJlc3VsdCBvYmplY3QgdG8gaW5zZXJ0IHZhbHVlcyB0bworCisgICAgICAg
IEBub3RlIEVtcHR5IG9iamVjdHMgb3IgYXJyYXlzIGFyZSBmbGF0dGVuZWQgdG8gYG51bGxgLgor
ICAgICAgICAqLworICAgICAgICBzdGF0aWMgdm9pZCBmbGF0dGVuKGNvbnN0IHN0ZDo6c3RyaW5n
JiByZWZlcmVuY2Vfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJh
c2ljX2pzb24mIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX2pzb24m
IHJlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5tX3R5cGUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tX3ZhbHVlLmFycmF5
LT5lbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBmbGF0dGVuIGVtcHR5IGFycmF5IGFzIG51bGwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdFtyZWZlcmVuY2Vfc3RyaW5nXSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBpdGVyYXRlIGFycmF5IGFuZCB1c2UgaW5kZXggYXMgcmVm
ZXJlbmNlIHN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB2YWx1ZS5tX3ZhbHVlLmFycmF5LT5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGF0dGVuKHJlZmVyZW5jZV9z
dHJpbmcgKyAiLyIgKyBzdGQ6OnRvX3N0cmluZyhpKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlLm1fdmFsdWUuYXJyYXktPm9wZXJhdG9yW10oaSksIHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBpZiAodmFsdWUubV92YWx1ZS5vYmplY3QtPmVtcHR5KCkpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZsYXR0ZW4gZW1wdHkgb2JqZWN0
IGFzIG51bGwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtyZWZlcmVuY2Vfc3RyaW5n
XSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBp
dGVyYXRlIG9iamVjdCBhbmQgdXNlIGtleXMgYXMgcmVmZXJlbmNlIHN0cmluZworICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBlbGVtZW50IDogKnZhbHVlLm1fdmFsdWUu
b2JqZWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZsYXR0ZW4ocmVmZXJlbmNlX3N0cmluZyArICIvIiArIGVzY2FwZShlbGVtZW50LmZp
cnN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2Vjb25k
LCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAvLyBhZGQgcHJpbWl0aXZlIHZhbHVlIHdpdGggaXRzIHJlZmVyZW5jZSBzdHJpbmcKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0W3JlZmVyZW5jZV9zdHJpbmddID0gdmFsdWU7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAgICBAcGFyYW1baW5dIHZhbHVlICBmbGF0
dGVuZWQgSlNPTgorCisgICAgICAgIEByZXR1cm4gdW5mbGF0dGVuZWQgSlNPTgorICAgICAgICAq
LworICAgICAgICBzdGF0aWMgYmFzaWNfanNvbiB1bmZsYXR0ZW4oY29uc3QgYmFzaWNfanNvbiYg
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChub3QgdmFsdWUuaXNfb2JqZWN0KCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+
KCJvbmx5IG9iamVjdHMgY2FuIGJlIHVuZmxhdHRlbmVkIik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGJhc2ljX2pzb24gcmVzdWx0OworCisgICAgICAgICAgICAvLyBpdGVyYXRlIHRo
ZSBKU09OIG9iamVjdCB2YWx1ZXMKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgZWxlbWVu
dCA6ICp2YWx1ZS5tX3ZhbHVlLm9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAobm90IGVsZW1lbnQuc2Vjb25kLmlzX3ByaW1pdGl2ZSgpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJ2YWx1ZXMg
aW4gb2JqZWN0IG11c3QgYmUgcHJpbWl0aXZlIik7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgLy8gYXNzaWduIHZhbHVlIHRvIHJlZmVyZW5jZSBwb2ludGVkIHRvIGJ5IEpT
T04gcG9pbnRlcjsgTm90ZQorICAgICAgICAgICAgICAgIC8vIHRoYXQgaWYgdGhlIEpTT04gcG9p
bnRlciBpcyAiIiAoaS5lLiwgcG9pbnRzIHRvIHRoZSB3aG9sZQorICAgICAgICAgICAgICAgIC8v
IHZhbHVlKSwgZnVuY3Rpb24gZ2V0X2FuZF9jcmVhdGUgcmV0dXJucyBhIHJlZmVyZW5jZSB0bwor
ICAgICAgICAgICAgICAgIC8vIHJlc3VsdCBpdHNlbGYuIEFuIGFzc2lnbm1lbnQgd2lsbCB0aGVu
IGNyZWF0ZSBhIHByaW1pdGl2ZQorICAgICAgICAgICAgICAgIC8vIHZhbHVlLgorICAgICAgICAg
ICAgICAgIGpzb25fcG9pbnRlcihlbGVtZW50LmZpcnN0KS5nZXRfYW5kX2NyZWF0ZShyZXN1bHQp
ID0gZWxlbWVudC5zZWNvbmQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgLy8vIHRoZSByZWZl
cmVuY2UgdG9rZW5zCisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByZWZlcmVuY2Vf
dG9rZW5zIHt9OworICAgIH07CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAg
IC8vIEpTT04gUG9pbnRlciBzdXBwb3J0IC8vCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KKworICAgIC8vLyBAbmFtZSBKU09OIFBvaW50ZXIgZnVuY3Rpb25zCisgICAgLy8vIEB7CisK
KyAgICAvKiEKKyAgICBAYnJpZWYgYWNjZXNzIHNwZWNpZmllZCBlbGVtZW50IHZpYSBKU09OIFBv
aW50ZXIKKworICAgIFVzZXMgYSBKU09OIHBvaW50ZXIgdG8gcmV0cmlldmUgYSByZWZlcmVuY2Ug
dG8gdGhlIHJlc3BlY3RpdmUgSlNPTiB2YWx1ZS4KKyAgICBObyBib3VuZCBjaGVja2luZyBpcyBw
ZXJmb3JtZWQuIFNpbWlsYXIgdG8gQHJlZiBvcGVyYXRvcltdKGNvbnN0IHR5cGVuYW1lCisgICAg
b2JqZWN0X3Q6OmtleV90eXBlJiksIGBudWxsYCB2YWx1ZXMgYXJlIGNyZWF0ZWQgaW4gYXJyYXlz
IGFuZCBvYmplY3RzIGlmCisgICAgbmVjZXNzYXJ5LgorCisgICAgSW4gcGFydGljdWxhcjoKKyAg
ICAtIElmIHRoZSBKU09OIHBvaW50ZXIgcG9pbnRzIHRvIGFuIG9iamVjdCBrZXkgdGhhdCBkb2Vz
IG5vdCBleGlzdCwgaXQKKyAgICAgIGlzIGNyZWF0ZWQgYW4gZmlsbGVkIHdpdGggYSBgbnVsbGAg
dmFsdWUgYmVmb3JlIGEgcmVmZXJlbmNlIHRvIGl0CisgICAgICBpcyByZXR1cm5lZC4KKyAgICAt
IElmIHRoZSBKU09OIHBvaW50ZXIgcG9pbnRzIHRvIGFuIGFycmF5IGluZGV4IHRoYXQgZG9lcyBu
b3QgZXhpc3QsIGl0CisgICAgICBpcyBjcmVhdGVkIGFuIGZpbGxlZCB3aXRoIGEgYG51bGxgIHZh
bHVlIGJlZm9yZSBhIHJlZmVyZW5jZSB0byBpdAorICAgICAgaXMgcmV0dXJuZWQuIEFsbCBpbmRp
Y2VzIGJldHdlZW4gdGhlIGN1cnJlbnQgbWF4aW11bSBhbmQgdGhlIGdpdmVuCisgICAgICBpbmRl
eCBhcmUgYWxzbyBmaWxsZWQgd2l0aCBgbnVsbGAuCisgICAgLSBUaGUgc3BlY2lhbCB2YWx1ZSBg
LWAgaXMgdHJlYXRlZCBhcyBhIHN5bm9ueW0gZm9yIHRoZSBpbmRleCBwYXN0IHRoZQorICAgICAg
ZW5kLgorCisgICAgQHBhcmFtW2luXSBwdHIgIGEgSlNPTiBwb2ludGVyCisKKyAgICBAcmV0dXJu
IHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCBwb2ludGVkIHRvIGJ5IEBhIHB0cgorCisgICAgQGNv
bXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2UgICAgICBp
ZiB0aGUgSlNPTiBwb2ludGVyIGNhbiBub3QgYmUgcmVzb2x2ZWQKKyAgICBAdGhyb3cgc3RkOjpk
b21haW5fZXJyb3IgICAgICBpZiBhbiBhcnJheSBpbmRleCBiZWdpbnMgd2l0aCAnMCcKKyAgICBA
dGhyb3cgc3RkOjppbnZhbGlkX2FyZ3VtZW50ICBpZiBhbiBhcnJheSBpbmRleCB3YXMgbm90IGEg
bnVtYmVyCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGJlaGF2aW9yIGlzIHNob3duIGluIHRoZSBl
eGFtcGxlLixvcGVyYXRvcmpzb25fcG9pbnRlcn0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDIuMC4w
CisgICAgKi8KKyAgICByZWZlcmVuY2Ugb3BlcmF0b3JbXShjb25zdCBqc29uX3BvaW50ZXImIHB0
cikKKyAgICB7CisgICAgICAgIHJldHVybiBwdHIuZ2V0X3VuY2hlY2tlZCh0aGlzKTsKKyAgICB9
CisKKyAgICAvKiEKKyAgICBAYnJpZWYgYWNjZXNzIHNwZWNpZmllZCBlbGVtZW50IHZpYSBKU09O
IFBvaW50ZXIKKworICAgIFVzZXMgYSBKU09OIHBvaW50ZXIgdG8gcmV0cmlldmUgYSByZWZlcmVu
Y2UgdG8gdGhlIHJlc3BlY3RpdmUgSlNPTiB2YWx1ZS4KKyAgICBObyBib3VuZCBjaGVja2luZyBp
cyBwZXJmb3JtZWQuIFRoZSBmdW5jdGlvbiBkb2VzIG5vdCBjaGFuZ2UgdGhlIEpTT04KKyAgICB2
YWx1ZTsgbm8gYG51bGxgIHZhbHVlcyBhcmUgY3JlYXRlZC4gSW4gcGFydGljdWxhciwgdGhlIHRo
ZSBzcGVjaWFsIHZhbHVlCisgICAgYC1gIHlpZWxkcyBhbiBleGNlcHRpb24uCisKKyAgICBAcGFy
YW1baW5dIHB0ciAgSlNPTiBwb2ludGVyIHRvIHRoZSBkZXNpcmVkIGVsZW1lbnQKKworICAgIEBy
ZXR1cm4gY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IHBvaW50ZWQgdG8gYnkgQGEgcHRy
CisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEB0aHJvdyBzdGQ6Om91dF9vZl9y
YW5nZSAgICAgIGlmIHRoZSBKU09OIHBvaW50ZXIgY2FuIG5vdCBiZSByZXNvbHZlZAorICAgIEB0
aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciAgICAgIGlmIGFuIGFycmF5IGluZGV4IGJlZ2lucyB3aXRo
ICcwJworICAgIEB0aHJvdyBzdGQ6OmludmFsaWRfYXJndW1lbnQgIGlmIGFuIGFycmF5IGluZGV4
IHdhcyBub3QgYSBudW1iZXIKKworICAgIEBsaXZlZXhhbXBsZXtUaGUgYmVoYXZpb3IgaXMgc2hv
d24gaW4gdGhlIGV4YW1wbGUuLG9wZXJhdG9yanNvbl9wb2ludGVyX2NvbnN0fQorCisgICAgQHNp
bmNlIHZlcnNpb24gMi4wLjAKKyAgICAqLworICAgIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltd
KGNvbnN0IGpzb25fcG9pbnRlciYgcHRyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHB0
ci5nZXRfdW5jaGVja2VkKHRoaXMpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBhY2Nl
c3Mgc3BlY2lmaWVkIGVsZW1lbnQgdmlhIEpTT04gUG9pbnRlcgorCisgICAgUmV0dXJucyBhIHJl
ZmVyZW5jZSB0byB0aGUgZWxlbWVudCBhdCB3aXRoIHNwZWNpZmllZCBKU09OIHBvaW50ZXIgQGEg
cHRyLAorICAgIHdpdGggYm91bmRzIGNoZWNraW5nLgorCisgICAgQHBhcmFtW2luXSBwdHIgIEpT
T04gcG9pbnRlciB0byB0aGUgZGVzaXJlZCBlbGVtZW50CisKKyAgICBAcmV0dXJuIHJlZmVyZW5j
ZSB0byB0aGUgZWxlbWVudCBwb2ludGVkIHRvIGJ5IEBhIHB0cgorCisgICAgQGNvbXBsZXhpdHkg
Q29uc3RhbnQuCisKKyAgICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2UgICAgICBpZiB0aGUgSlNP
TiBwb2ludGVyIGNhbiBub3QgYmUgcmVzb2x2ZWQKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJy
b3IgICAgICBpZiBhbiBhcnJheSBpbmRleCBiZWdpbnMgd2l0aCAnMCcKKyAgICBAdGhyb3cgc3Rk
OjppbnZhbGlkX2FyZ3VtZW50ICBpZiBhbiBhcnJheSBpbmRleCB3YXMgbm90IGEgbnVtYmVyCisK
KyAgICBAbGl2ZWV4YW1wbGV7VGhlIGJlaGF2aW9yIGlzIHNob3duIGluIHRoZSBleGFtcGxlLixh
dF9qc29uX3BvaW50ZXJ9CisKKyAgICBAc2luY2UgdmVyc2lvbiAyLjAuMAorICAgICovCisgICAg
cmVmZXJlbmNlIGF0KGNvbnN0IGpzb25fcG9pbnRlciYgcHRyKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHB0ci5nZXRfY2hlY2tlZCh0aGlzKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYg
YWNjZXNzIHNwZWNpZmllZCBlbGVtZW50IHZpYSBKU09OIFBvaW50ZXIKKworICAgIFJldHVybnMg
YSBjb25zdCByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgYXQgd2l0aCBzcGVjaWZpZWQgSlNPTiBw
b2ludGVyIEBhCisgICAgcHRyLCB3aXRoIGJvdW5kcyBjaGVja2luZy4KKworICAgIEBwYXJhbVtp
bl0gcHRyICBKU09OIHBvaW50ZXIgdG8gdGhlIGRlc2lyZWQgZWxlbWVudAorCisgICAgQHJldHVy
biByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgcG9pbnRlZCB0byBieSBAYSBwdHIKKworICAgIEBj
b21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQHRocm93IHN0ZDo6b3V0X29mX3JhbmdlICAgICAg
aWYgdGhlIEpTT04gcG9pbnRlciBjYW4gbm90IGJlIHJlc29sdmVkCisgICAgQHRocm93IHN0ZDo6
ZG9tYWluX2Vycm9yICAgICAgaWYgYW4gYXJyYXkgaW5kZXggYmVnaW5zIHdpdGggJzAnCisgICAg
QHRocm93IHN0ZDo6aW52YWxpZF9hcmd1bWVudCAgaWYgYW4gYXJyYXkgaW5kZXggd2FzIG5vdCBh
IG51bWJlcgorCisgICAgQGxpdmVleGFtcGxle1RoZSBiZWhhdmlvciBpcyBzaG93biBpbiB0aGUg
ZXhhbXBsZS4sYXRfanNvbl9wb2ludGVyX2NvbnN0fQorCisgICAgQHNpbmNlIHZlcnNpb24gMi4w
LjAKKyAgICAqLworICAgIGNvbnN0X3JlZmVyZW5jZSBhdChjb25zdCBqc29uX3BvaW50ZXImIHB0
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBwdHIuZ2V0X2NoZWNrZWQodGhpcyk7Cisg
ICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIHJldHVybiBmbGF0dGVuZWQgSlNPTiB2YWx1ZQor
CisgICAgVGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYSBKU09OIG9iamVjdCB3aG9zZSBrZXlzIGFyZSBK
U09OIHBvaW50ZXJzIChzZWUgW1JGQworICAgIDY5MDFdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcv
aHRtbC9yZmM2OTAxKSkgYW5kIHdob3NlIHZhbHVlcyBhcmUgYWxsCisgICAgcHJpbWl0aXZlLiBU
aGUgb3JpZ2luYWwgSlNPTiB2YWx1ZSBjYW4gYmUgcmVzdG9yZWQgdXNpbmcgdGhlIEByZWYKKyAg
ICB1bmZsYXR0ZW4oKSBmdW5jdGlvbi4KKworICAgIEByZXR1cm4gYW4gb2JqZWN0IHRoYXQgbWFw
cyBKU09OIHBvaW50ZXJzIHRvIHByaW1pdHZlIHZhbHVlcworCisgICAgQG5vdGUgRW1wdHkgb2Jq
ZWN0cyBhbmQgYXJyYXlzIGFyZSBmbGF0dGVuZWQgdG8gYG51bGxgIGFuZCB3aWxsIG5vdCBiZQor
ICAgICAgICAgIHJlY29uc3RydWN0ZWQgY29ycmVjdGx5IGJ5IHRoZSBAcmVmIHVuZmxhdHRlbigp
IGZ1bmN0aW9uLgorCisgICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIHRoZSBzaXplIHRoZSBKU09O
IHZhbHVlLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29kZSBzaG93cyBob3cg
YSBKU09OIG9iamVjdCBpcyBmbGF0dGVuZWQgdG8gYW4KKyAgICBvYmplY3Qgd2hvc2Uga2V5cyBj
b25zaXN0IG9mIEpTT04gcG9pbnRlcnMuLGZsYXR0ZW59CisKKyAgICBAc2EgQHJlZiB1bmZsYXR0
ZW4oKSBmb3IgdGhlIHJldmVyc2UgZnVuY3Rpb24KKworICAgIEBzaW5jZSB2ZXJzaW9uIDIuMC4w
CisgICAgKi8KKyAgICBiYXNpY19qc29uIGZsYXR0ZW4oKSBjb25zdAorICAgIHsKKyAgICAgICAg
YmFzaWNfanNvbiByZXN1bHQodmFsdWVfdDo6b2JqZWN0KTsKKyAgICAgICAganNvbl9wb2ludGVy
OjpmbGF0dGVuKCIiLCAqdGhpcywgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgdW5mbGF0dGVuIGEgcHJldmlvdXNseSBmbGF0dGVu
ZWQgSlNPTiB2YWx1ZQorCisgICAgVGhlIGZ1bmN0aW9uIHJlc3RvcmVzIHRoZSBhcmJpdHJhcnkg
bmVzdGluZyBvZiBhIEpTT04gdmFsdWUgdGhhdCBoYXMgYmVlbgorICAgIGZsYXR0ZW5lZCBiZWZv
cmUgdXNpbmcgdGhlIEByZWYgZmxhdHRlbigpIGZ1bmN0aW9uLiBUaGUgSlNPTiB2YWx1ZSBtdXN0
CisgICAgbWVldCBjZXJ0YWluIGNvbnN0cmFpbnRzOgorICAgIDEuIFRoZSB2YWx1ZSBtdXN0IGJl
IGFuIG9iamVjdC4KKyAgICAyLiBUaGUga2V5cyBtdXN0IGJlIEpTT04gcG9pbnRlcnMgKHNlZQor
ICAgICAgIFtSRkMgNjkwMV0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY5MDEpKQor
ICAgIDMuIFRoZSBtYXBwZWQgdmFsdWVzIG11c3QgYmUgcHJpbWl0aXZlIEpTT04gdHlwZXMuCisK
KyAgICBAcmV0dXJuIHRoZSBvcmlnaW5hbCBKU09OIGZyb20gYSBmbGF0dGVuZWQgdmVyc2lvbgor
CisgICAgQG5vdGUgRW1wdHkgb2JqZWN0cyBhbmQgYXJyYXlzIGFyZSBmbGF0dGVuZWQgYnkgQHJl
ZiBmbGF0dGVuKCkgdG8gYG51bGxgCisgICAgICAgICAgdmFsdWVzIGFuZCBjYW4gbm90IHVuZmxh
dHRlbmVkIHRvIHRoZWlyIG9yaWdpbmFsIHR5cGUuIEFwYXJ0IGZyb20KKyAgICAgICAgICB0aGlz
IGV4YW1wbGUsIGZvciBhIEpTT04gdmFsdWUgYGpgLCB0aGUgZm9sbG93aW5nIGlzIGFsd2F5cyB0
cnVlOgorICAgICAgICAgIGBqID09IGouZmxhdHRlbigpLnVuZmxhdHRlbigpYC4KKworICAgIEBj
b21wbGV4aXR5IExpbmVhciBpbiB0aGUgc2l6ZSB0aGUgSlNPTiB2YWx1ZS4KKworICAgIEBsaXZl
ZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgaG93IGEgZmxhdHRlbmVkIEpTT04gb2Jq
ZWN0IGlzCisgICAgdW5mbGF0dGVuZWQgaW50byB0aGUgb3JpZ2luYWwgbmVzdGVkIEpTT04gb2Jq
ZWN0Lix1bmZsYXR0ZW59CisKKyAgICBAc2EgQHJlZiBmbGF0dGVuKCkgZm9yIHRoZSByZXZlcnNl
IGZ1bmN0aW9uCisKKyAgICBAc2luY2UgdmVyc2lvbiAyLjAuMAorICAgICovCisgICAgYmFzaWNf
anNvbiB1bmZsYXR0ZW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzb25fcG9pbnRl
cjo6dW5mbGF0dGVuKCp0aGlzKTsKKyAgICB9CisKKyAgICAvLy8gQH0KKworICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy8gSlNPTiBQYXRjaCBmdW5jdGlvbnMgLy8KKyAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgLy8vIEBuYW1lIEpTT04gUGF0Y2ggZnVu
Y3Rpb25zCisgICAgLy8vIEB7CisKKyAgICAvKiEKKyAgICBAYnJpZWYgYXBwbGllcyBhIEpTT04g
cGF0Y2gKKworICAgIFtKU09OIFBhdGNoXShodHRwOi8vanNvbnBhdGNoLmNvbSkgZGVmaW5lcyBh
IEpTT04gZG9jdW1lbnQgc3RydWN0dXJlIGZvcgorICAgIGV4cHJlc3NpbmcgYSBzZXF1ZW5jZSBv
ZiBvcGVyYXRpb25zIHRvIGFwcGx5IHRvIGEgSlNPTikgZG9jdW1lbnQuIFdpdGgKKyAgICB0aGlz
IGZ1bmNpb24sIGEgSlNPTiBQYXRjaCBpcyBhcHBsaWVkIHRvIHRoZSBjdXJyZW50IEpTT04gdmFs
dWUgYnkKKyAgICBleGVjdXRpbmcgYWxsIG9wZXJhdGlvbnMgZnJvbSB0aGUgcGF0Y2guCisKKyAg
ICBAcGFyYW1baW5dIGpzb25fcGF0Y2ggIEpTT04gcGF0Y2ggZG9jdW1lbnQKKyAgICBAcmV0dXJu
IHBhdGNoZWQgZG9jdW1lbnQKKworICAgIEBub3RlIFRoZSBhcHBsaWNhdGlvbiBvZiBhIHBhdGNo
IGlzIGF0b21pYzogRWl0aGVyIGFsbCBvcGVyYXRpb25zIHN1Y2NlZWQKKyAgICAgICAgICBhbmQg
dGhlIHBhdGNoZWQgZG9jdW1lbnQgaXMgcmV0dXJuZWQgb3IgYW4gZXhjZXB0aW9uIGlzIHRocm93
bi4gSW4KKyAgICAgICAgICBhbnkgY2FzZSwgdGhlIG9yaWdpbmFsIHZhbHVlIGlzIG5vdCBjaGFu
Z2VkOiB0aGUgcGF0Y2ggaXMgYXBwbGllZAorICAgICAgICAgIHRvIGEgY29weSBvZiB0aGUgdmFs
dWUuCisKKyAgICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2UgaWYgYSBKU09OIHBvaW50ZXIgaW5z
aWRlIHRoZSBwYXRjaCBjb3VsZCBub3QKKyAgICBiZSByZXNvbHZlZCBzdWNjZXNzZnVsbHkgaW4g
dGhlIGN1cnJlbnQgSlNPTiB2YWx1ZTsgZXhhbXBsZTogYCJrZXkgYmF6CisgICAgbm90IGZvdW5k
ImAKKyAgICBAdGhyb3cgaW52YWxpZF9hcmd1bWVudCBpZiB0aGUgSlNPTiBwYXRjaCBpcyBtYWxm
b3JtZWQgKGUuZy4sIG1hbmRhdG9yeQorICAgIGF0dHJpYnV0ZXMgYXJlIG1pc3NpbmcpOyBleGFt
cGxlOiBgIm9wZXJhdGlvbiBhZGQgbXVzdCBoYXZlIG1lbWJlciBwYXRoImAKKworICAgIEBjb21w
bGV4aXR5IExpbmVhciBpbiB0aGUgc2l6ZSBvZiB0aGUgSlNPTiB2YWx1ZSBhbmQgdGhlIGxlbmd0
aCBvZiB0aGUKKyAgICBKU09OIHBhdGNoLiBBcyB1c3VhbGx5IG9ubHkgYSBmcmFjdGlvbiBvZiB0
aGUgSlNPTiB2YWx1ZSBpcyBhZmZlY3RlZCBieQorICAgIHRoZSBwYXRjaCwgdGhlIGNvbXBsZXhp
dHkgY2FuIHVzdWFsbHkgYmUgbmVnbGVjdGVkLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBmb2xs
b3dpbmcgY29kZSBzaG93cyBob3cgYSBKU09OIHBhdGNoIGlzIGFwcGxpZWQgdG8gYQorICAgIHZh
bHVlLixwYXRjaH0KKworICAgIEBzYSBAcmVmIGRpZmYgLS0gY3JlYXRlIGEgSlNPTiBwYXRjaCBi
eSBjb21wYXJpbmcgdHdvIEpTT04gdmFsdWVzCisKKyAgICBAc2EgW1JGQyA2OTAyIChKU09OIFBh
dGNoKV0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY5MDIpCisgICAgQHNhIFtSRkMg
NjkwMSAoSlNPTiBQb2ludGVyKV0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY5MDEp
CisKKyAgICBAc2luY2UgdmVyc2lvbiAyLjAuMAorICAgICovCisgICAgYmFzaWNfanNvbiBwYXRj
aChjb25zdCBiYXNpY19qc29uJiBqc29uX3BhdGNoKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8g
bWFrZSBhIHdvcmtpbmcgY29weSB0byBhcHBseSB0aGUgcGF0Y2ggdG8KKyAgICAgICAgYmFzaWNf
anNvbiByZXN1bHQgPSAqdGhpczsKKworICAgICAgICAvLyB0aGUgdmFsaWQgSlNPTiBQYXRjaCBv
cGVyYXRpb25zCisgICAgICAgIGVudW0gY2xhc3MgcGF0Y2hfb3BlcmF0aW9ucyB7YWRkLCByZW1v
dmUsIHJlcGxhY2UsIG1vdmUsIGNvcHksIHRlc3QsIGludmFsaWR9OworCisgICAgICAgIGNvbnN0
IGF1dG8gZ2V0X29wID0gW10oY29uc3Qgc3RkOjpzdHJpbmcgb3ApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChvcCA9PSAiYWRkIikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcGF0Y2hfb3BlcmF0aW9uczo6YWRkOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKG9wID09ICJyZW1vdmUiKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBwYXRjaF9vcGVyYXRpb25zOjpyZW1vdmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAob3AgPT0gInJlcGxhY2UiKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBwYXRjaF9vcGVyYXRpb25zOjpyZXBsYWNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKG9wID09ICJtb3ZlIikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cGF0Y2hfb3BlcmF0aW9uczo6bW92ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChv
cCA9PSAiY29weSIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhdGNo
X29wZXJhdGlvbnM6OmNvcHk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob3AgPT0g
InRlc3QiKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwYXRjaF9vcGVy
YXRpb25zOjp0ZXN0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gcGF0Y2hf
b3BlcmF0aW9uczo6aW52YWxpZDsKKyAgICAgICAgfTsKKworICAgICAgICAvLyB3cmFwcGVyIGZv
ciAiYWRkIiBvcGVyYXRpb247IGFkZCB2YWx1ZSBhdCBwdHIKKyAgICAgICAgY29uc3QgYXV0byBv
cGVyYXRpb25fYWRkID0gWyZyZXN1bHRdKGpzb25fcG9pbnRlciAmIHB0ciwgYmFzaWNfanNvbiB2
YWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGFkZGluZyB0byB0aGUgcm9vdCBvZiB0aGUg
dGFyZ2V0IGRvY3VtZW50IG1lYW5zIHJlcGxhY2luZyBpdAorICAgICAgICAgICAgaWYgKHB0ci5p
c19yb290KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdmFsOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgdG9wIGVsZW1lbnQgb2YgdGhlIHBvaW50ZXIgZXhpc3Rz
CisgICAgICAgICAgICAgICAganNvbl9wb2ludGVyIHRvcF9wb2ludGVyID0gcHRyLnRvcCgpOwor
ICAgICAgICAgICAgICAgIGlmICh0b3BfcG9pbnRlciAhPSBwdHIpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXQodG9wX3BvaW50ZXIpOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGdldCByZWZlcmVuY2UgdG8gcGFyZW50IG9m
IEpTT04gcG9pbnRlciBwdHIKKyAgICAgICAgICAgICAgICBjb25zdCBhdXRvIGxhc3RfcGF0aCA9
IHB0ci5wb3BfYmFjaygpOworICAgICAgICAgICAgICAgIGJhc2ljX2pzb24mIHBhcmVudCA9IHJl
c3VsdFtwdHJdOworCisgICAgICAgICAgICAgICAgc3dpdGNoIChwYXJlbnQubV90eXBlKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudWxsOgor
ICAgICAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlIG9wZXJhdG9yW10gdG8gYWRk
IHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRbbGFzdF9wYXRoXSA9IHZhbDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RfcGF0aCA9PSAiLSIpCisg
ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
c3BlY2lhbCBjYXNlOiBhcHBlbmQgdG8gYmFjaworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmVudC5wdXNoX2JhY2sodmFsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdXRvIGlkeCA9IHN0ZDo6c3RvaShsYXN0X3Bh
dGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3R5
cGU+KGlkeCkgPiBwYXJlbnQuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXZvaWQgdW5kZWZpbmVkIGJlaGF2
aW9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6b3V0X29mX3Jh
bmdlPigiYXJyYXkgaW5kZXggIiArIHN0ZDo6dG9fc3RyaW5nKGlkeCkgKyAiIGlzIG91dCBvZiBy
YW5nZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IGNhc2U6IGluc2VydCBhZGQgb2Zmc2V0
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5pbnNlcnQocGFyZW50LmJl
Z2luKCkgKyBzdGF0aWNfY2FzdDxkaWZmZXJlbmNlX3R5cGU+KGlkeCksIHZhbCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBleGlzdHMgYSBwYXJlbnQgaXQgY2Fubm90IGJlIHBy
aW1pdGl2ZQorICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsgIC8vIExDT1Zf
RVhDTF9MSU5FCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgLy8gd3JhcHBlciBmb3IgInJlbW92ZSIg
b3BlcmF0aW9uOyByZW1vdmUgdmFsdWUgYXQgcHRyCisgICAgICAgIGNvbnN0IGF1dG8gb3BlcmF0
aW9uX3JlbW92ZSA9IFsmcmVzdWx0XShqc29uX3BvaW50ZXIgJiBwdHIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIC8vIGdldCByZWZlcmVuY2UgdG8gcGFyZW50IG9mIEpTT04gcG9pbnRlciBwdHIK
KyAgICAgICAgICAgIGNvbnN0IGF1dG8gbGFzdF9wYXRoID0gcHRyLnBvcF9iYWNrKCk7CisgICAg
ICAgICAgICBiYXNpY19qc29uJiBwYXJlbnQgPSByZXN1bHQuYXQocHRyKTsKKworICAgICAgICAg
ICAgLy8gcmVtb3ZlIGNoaWxkCisgICAgICAgICAgICBpZiAocGFyZW50LmlzX29iamVjdCgpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIHBlcmZvcm0gcmFuZ2UgY2hlY2sKKyAg
ICAgICAgICAgICAgICBhdXRvIGl0ID0gcGFyZW50LmZpbmQobGFzdF9wYXRoKTsKKyAgICAgICAg
ICAgICAgICBpZiAoaXQgIT0gcGFyZW50LmVuZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcGFyZW50LmVyYXNlKGl0KTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
VGhyb3c8c3RkOjpvdXRfb2ZfcmFuZ2U+KCJrZXkgJyIgKyBsYXN0X3BhdGggKyAiJyBub3QgZm91
bmQiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IGlmIChwYXJlbnQuaXNfYXJyYXkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAv
LyBub3RlIGVyYXNlIHBlcmZvcm1zIHJhbmdlIGNoZWNrCisgICAgICAgICAgICAgICAgcGFyZW50
LmVyYXNlKHN0YXRpY19jYXN0PHNpemVfdHlwZT4oc3RkOjpzdG9pKGxhc3RfcGF0aCkpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICAvLyB0eXBlIGNoZWNrCisgICAgICAg
IGlmIChub3QganNvbl9wYXRjaC5pc19hcnJheSgpKQorICAgICAgICB7CisgICAgICAgICAgICAv
LyBhIEpTT04gcGF0Y2ggbXVzdCBiZSBhbiBhcnJheSBvZiBvYmplY3RzCisgICAgICAgICAgICBU
aHJvdzxzdGQ6OmludmFsaWRfYXJndW1lbnQ+KCJKU09OIHBhdGNoIG11c3QgYmUgYW4gYXJyYXkg
b2Ygb2JqZWN0cyIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gaXRlcmF0ZSBhbmQgYXBwbHkg
dGggZW9wZXJhdGlvbnMKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiB2YWwgOiBqc29uX3BhdGNo
KQorICAgICAgICB7CisgICAgICAgICAgICAvLyB3cmFwcGVyIHRvIGdldCBhIHZhbHVlIGZvciBh
biBvcGVyYXRpb24KKyAgICAgICAgICAgIGNvbnN0IGF1dG8gZ2V0X3ZhbHVlID0gWyZ2YWxdKGNv
bnN0IHN0ZDo6c3RyaW5nICYgb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmIG1lbWJlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3RyaW5nX3R5cGUpIC0+IGJhc2ljX2pzb24mCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gZmluZCB2YWx1ZQorICAgICAgICAgICAg
ICAgIGF1dG8gaXQgPSB2YWwubV92YWx1ZS5vYmplY3QtPmZpbmQobWVtYmVyKTsKKworICAgICAg
ICAgICAgICAgIC8vIGNvbnRleHQtc2Vuc2l0aXZlIGVycm9yIG1lc3NhZ2UKKyAgICAgICAgICAg
ICAgICBjb25zdCBhdXRvIGVycm9yX21zZyA9IChvcCA9PSAib3AiKSA/ICJvcGVyYXRpb24iIDog
Im9wZXJhdGlvbiAnIiArIG9wICsgIiciOworCisgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYg
ZGVzaXJlZCB2YWx1ZSBpcyBwcmVzZW50CisgICAgICAgICAgICAgICAgaWYgKGl0ID09IHZhbC5t
X3ZhbHVlLm9iamVjdC0+ZW5kKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBUaHJvdzxzdGQ6OmludmFsaWRfYXJndW1lbnQ+KGVycm9yX21zZyArICIgbXVzdCBoYXZl
IG1lbWJlciAnIiArIG1lbWJlciArICInIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLy8gY2hlY2sgaWYgcmVzdWx0IGlzIG9mIHR5cGUgc3RyaW5nCisgICAgICAgICAg
ICAgICAgaWYgKHN0cmluZ190eXBlIGFuZCBub3QgaXQtPnNlY29uZC5pc19zdHJpbmcoKSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6aW52YWxpZF9h
cmd1bWVudD4oZXJyb3JfbXNnICsgIiBtdXN0IGhhdmUgc3RyaW5nIG1lbWJlciAnIiArIG1lbWJl
ciArICInIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gbm8gZXJy
b3I6IHJldHVybiB2YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAg
ICAgICAgICAgfTsKKworICAgICAgICAgICAgLy8gdHlwZSBjaGVjaworICAgICAgICAgICAgaWYg
KG5vdCB2YWwuaXNfb2JqZWN0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVGhy
b3c8c3RkOjppbnZhbGlkX2FyZ3VtZW50PigiSlNPTiBwYXRjaCBtdXN0IGJlIGFuIGFycmF5IG9m
IG9iamVjdHMiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gY29sbGVjdCBtYW5k
YXRvcnkgbWVtYmVycworICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgb3AgPSBnZXRfdmFs
dWUoIm9wIiwgIm9wIiwgdHJ1ZSk7CisgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBwYXRo
ID0gZ2V0X3ZhbHVlKG9wLCAicGF0aCIsIHRydWUpOworICAgICAgICAgICAganNvbl9wb2ludGVy
IHB0cihwYXRoKTsKKworICAgICAgICAgICAgc3dpdGNoIChnZXRfb3Aob3ApKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGNhc2UgcGF0Y2hfb3BlcmF0aW9uczo6YWRkOgorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uX2FkZChwdHIsIGdldF92
YWx1ZSgiYWRkIiwgInZhbHVlIiwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY2FzZSBwYXRjaF9vcGVyYXRp
b25zOjpyZW1vdmU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvcGVy
YXRpb25fcmVtb3ZlKHB0cik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhc2UgcGF0Y2hfb3BlcmF0aW9uczo6cmVwbGFj
ZToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSAicGF0aCIg
bG9jYXRpb24gbXVzdCBleGlzdCAtIHVzZSBhdCgpCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5hdChwdHIpID0gZ2V0X3ZhbHVlKCJyZXBsYWNlIiwgInZhbHVlIiwgZmFsc2UpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBjYXNlIHBhdGNoX29wZXJhdGlvbnM6Om1vdmU6CisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBmcm9tX3BhdGggPSBnZXRfdmFsdWUoIm1v
dmUiLCAiZnJvbSIsIHRydWUpOworICAgICAgICAgICAgICAgICAgICBqc29uX3BvaW50ZXIgZnJv
bV9wdHIoZnJvbV9wYXRoKTsKKworICAgICAgICAgICAgICAgICAgICAvLyB0aGUgImZyb20iIGxv
Y2F0aW9uIG11c3QgZXhpc3QgLSB1c2UgYXQoKQorICAgICAgICAgICAgICAgICAgICBiYXNpY19q
c29uIHYgPSByZXN1bHQuYXQoZnJvbV9wdHIpOworCisgICAgICAgICAgICAgICAgICAgIC8vIFRo
ZSBtb3ZlIG9wZXJhdGlvbiBpcyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIGEKKyAgICAgICAg
ICAgICAgICAgICAgLy8gInJlbW92ZSIgb3BlcmF0aW9uIG9uIHRoZSAiZnJvbSIgbG9jYXRpb24s
IGZvbGxvd2VkCisgICAgICAgICAgICAgICAgICAgIC8vIGltbWVkaWF0ZWx5IGJ5IGFuICJhZGQi
IG9wZXJhdGlvbiBhdCB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIC8vIGxvY2F0aW9u
IHdpdGggdGhlIHZhbHVlIHRoYXQgd2FzIGp1c3QgcmVtb3ZlZC4KKyAgICAgICAgICAgICAgICAg
ICAgb3BlcmF0aW9uX3JlbW92ZShmcm9tX3B0cik7CisgICAgICAgICAgICAgICAgICAgIG9wZXJh
dGlvbl9hZGQocHRyLCB2KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgY2FzZSBwYXRjaF9vcGVyYXRpb25zOjpjb3B5Ogor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcg
ZnJvbV9wYXRoID0gZ2V0X3ZhbHVlKCJjb3B5IiwgImZyb20iLCB0cnVlKTs7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGpzb25fcG9pbnRlciBmcm9tX3B0cihmcm9tX3BhdGgpOworCisgICAg
ICAgICAgICAgICAgICAgIC8vIHRoZSAiZnJvbSIgbG9jYXRpb24gbXVzdCBleGlzdCAtIHVzZSBh
dCgpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtwdHJdID0gcmVzdWx0LmF0KGZyb21fcHRy
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgY2FzZSBwYXRjaF9vcGVyYXRpb25zOjp0ZXN0OgorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgInZhbHVlIiBtYXRjaGVzIHRoZSBv
bmUgYXQgInBhdGgiCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSAicGF0aCIgbG9jYXRpb24g
bXVzdCBleGlzdCAtIHVzZSBhdCgpCisgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9
IChyZXN1bHQuYXQocHRyKSA9PSBnZXRfdmFsdWUoInRlc3QiLCAidmFsdWUiLCBmYWxzZSkpOwor
CisgICAgICAgICAgICAgICAgICAgIC8vIHRocm93IGFuIGV4Y2VwdGlvbiBpZiB0ZXN0IGZhaWxz
CisgICAgICAgICAgICAgICAgICAgIGlmIChub3Qgc3VjY2VzcykKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJ1
bnN1Y2Nlc3NmdWw6ICIgKyB2YWwuZHVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIGNhc2UgcGF0Y2hfb3BlcmF0aW9uczo6aW52YWxpZDoKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIC8vIG9wIG11c3QgYmUgImFkZCIsICJyZW1vdmUiLCAicmVw
bGFjZSIsICJtb3ZlIiwgImNvcHkiLCBvcgorICAgICAgICAgICAgICAgICAgICAvLyAidGVzdCIK
KyAgICAgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjppbnZhbGlkX2FyZ3VtZW50Pigib3BlcmF0
aW9uIHZhbHVlICciICsgb3AgKyAiJyBpcyBpbnZhbGlkIik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisKKyAgICAvKiEKKyAgICBAYnJpZWYgY3JlYXRlcyBhIGRpZmYgYXMgYSBKU09OIHBhdGNoCisK
KyAgICBDcmVhdGVzIGEgW0pTT04gUGF0Y2hdKGh0dHA6Ly9qc29ucGF0Y2guY29tKSBzbyB0aGF0
IHZhbHVlIEBhIHNvdXJjZSBjYW4KKyAgICBiZSBjaGFuZ2VkIGludG8gdGhlIHZhbHVlIEBhIHRh
cmdldCBieSBjYWxsaW5nIEByZWYgcGF0Y2ggZnVuY3Rpb24uCisKKyAgICBAaW52YXJpYW50IEZv
ciB0d28gSlNPTiB2YWx1ZXMgQGEgc291cmNlIGFuZCBAYSB0YXJnZXQsIHRoZSBmb2xsb3dpbmcg
Y29kZQorICAgIHlpZWxkcyBhbHdheXMgYHRydWVgOgorICAgIEBjb2RlIHsuY3BwfQorICAgIHNv
dXJjZS5wYXRjaChkaWZmKHNvdXJjZSwgdGFyZ2V0KSkgPT0gdGFyZ2V0OworICAgIEBlbmRjb2Rl
CisKKyAgICBAbm90ZSBDdXJyZW50bHksIG9ubHkgYHJlbW92ZWAsIGBhZGRgLCBhbmQgYHJlcGxh
Y2VgIG9wZXJhdGlvbnMgYXJlCisgICAgICAgICAgZ2VuZXJhdGVkLgorCisgICAgQHBhcmFtW2lu
XSBzb3VyY2UgIEpTT04gdmFsdWUgdG8gY29wYXJlIGZyb20KKyAgICBAcGFyYW1baW5dIHRhcmdl
dCAgSlNPTiB2YWx1ZSB0byBjb3BhcmUgYWdhaW5zdAorICAgIEBwYXJhbVtpbl0gcGF0aCAgICBo
ZWxwZXIgdmFsdWUgdG8gY3JlYXRlIEpTT04gcG9pbnRlcnMKKworICAgIEByZXR1cm4gYSBKU09O
IHBhdGNoIHRvIGNvbnZlcnQgdGhlIEBhIHNvdXJjZSB0byBAYSB0YXJnZXQKKworICAgIEBjb21w
bGV4aXR5IExpbmVhciBpbiB0aGUgbGVuZ3RocyBvZiBAYSBzb3VyY2UgYW5kIEBhIHRhcmdldC4K
KworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgaG93IGEgSlNPTiBw
YXRjaCBpcyBjcmVhdGVkIGFzIGEKKyAgICBkaWZmIGZvciB0d28gSlNPTiB2YWx1ZXMuLGRpZmZ9
CisKKyAgICBAc2EgQHJlZiBwYXRjaCAtLSBhcHBseSBhIEpTT04gcGF0Y2gKKworICAgIEBzYSBb
UkZDIDY5MDIgKEpTT04gUGF0Y2gpXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjkw
MikKKworICAgIEBzaW5jZSB2ZXJzaW9uIDIuMC4wCisgICAgKi8KKyAgICBzdGF0aWMgYmFzaWNf
anNvbiBkaWZmKGNvbnN0IGJhc2ljX2pzb24mIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGJhc2ljX2pzb24mIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoID0gIiIpCisgICAgeworICAgICAgICAvLyB0aGUg
cGF0Y2gKKyAgICAgICAgYmFzaWNfanNvbiByZXN1bHQodmFsdWVfdDo6YXJyYXkpOworCisgICAg
ICAgIC8vIGlmIHRoZSB2YWx1ZXMgYXJlIHRoZSBzYW1lLCByZXR1cm4gZW1wdHkgcGF0Y2gKKyAg
ICAgICAgaWYgKHNvdXJjZSA9PSB0YXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc291cmNlLnR5cGUoKSAhPSB0YXJn
ZXQudHlwZSgpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBkaWZmZXJlbnQgdHlwZXM6IHJl
cGxhY2UgdmFsdWUKKyAgICAgICAgICAgIHJlc3VsdC5wdXNoX2JhY2soCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgeyJvcCIsICJyZXBsYWNlIn0sCisgICAgICAgICAgICAgICAgeyJw
YXRoIiwgcGF0aH0sCisgICAgICAgICAgICAgICAgeyJ2YWx1ZSIsIHRhcmdldH0KKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg
c3dpdGNoIChzb3VyY2UudHlwZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNh
c2UgdmFsdWVfdDo6YXJyYXk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAvLyBmaXJzdCBwYXNzOiB0cmF2ZXJzZSBjb21tb24gZWxlbWVudHMKKyAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IGkgPSAwOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IHNvdXJj
ZS5zaXplKCkgYW5kIGkgPCB0YXJnZXQuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyByZWN1cnNpdmUgY2FsbCB0byBjb21wYXJlIGFycmF5
IHZhbHVlcyBhdCBpbmRleCBpCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHRlbXBfZGlm
ZiA9IGRpZmYoc291cmNlW2ldLCB0YXJnZXRbaV0sIHBhdGggKyAiLyIgKyBzdGQ6OnRvX3N0cmlu
ZyhpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaW5zZXJ0KHJlc3VsdC5lbmQo
KSwgdGVtcF9kaWZmLmJlZ2luKCksIHRlbXBfZGlmZi5lbmQoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICArK2k7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAvLyBpIG5vdyByZWFjaGVkIHRoZSBlbmQgb2YgYXQgbGVhc3Qgb25lIGFycmF5CisgICAgICAg
ICAgICAgICAgICAgIC8vIGluIGEgc2Vjb25kIHBhc3MsIHRyYXZlcnNlIHRoZSByZW1haW5pbmcg
ZWxlbWVudHMKKworICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgbXkgcmVtYWluaW5nIGVs
ZW1lbnRzCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8gZW5kX2luZGV4ID0gc3RhdGlj
X2Nhc3Q8ZGlmZmVyZW5jZV90eXBlPihyZXN1bHQuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKGkgPCBzb3VyY2Uuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBhZGQgb3BlcmF0aW9ucyBpbiByZXZlcnNlIG9yZGVyIHRv
IGF2b2lkIGludmFsaWQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluZGljZXMKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pbnNlcnQocmVzdWx0LmJlZ2luKCkgKyBlbmRfaW5k
ZXgsIG9iamVjdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7Im9wIiwgInJlbW92ZSJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsicGF0aCIsIHBhdGggKyAiLyIgKyBzdGQ6OnRvX3N0cmluZyhpKX0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICsraTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBvdGhlciByZW1haW5pbmcg
ZWxlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCB0YXJnZXQuc2l6ZSgpKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVz
aF9iYWNrKAorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsib3AiLCAiYWRkIn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJwYXRo
IiwgcGF0aCArICIvIiArIHN0ZDo6dG9fc3RyaW5nKGkpfSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7InZhbHVlIiwgdGFyZ2V0W2ldfQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgICAgICAgICArK2k7CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIGZpcnN0IHBhc3M6IHRyYXZlcnNlIHRoaXMgb2JqZWN0J3MgZWxlbWVu
dHMKKyAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvIGl0ID0gc291cmNlLmJlZ2luKCk7IGl0
ICE9IHNvdXJjZS5lbmQoKTsgKytpdCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gZXNjYXBlIHRoZSBrZXkgbmFtZSB0byBiZSB1c2VkIGluIGEgSlNP
TiBwYXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0byBrZXkgPSBqc29uX3Bv
aW50ZXI6OmVzY2FwZShpdC5rZXkoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0
YXJnZXQuZmluZChpdC5rZXkoKSkgIT0gdGFyZ2V0LmVuZCgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlY3Vyc2l2ZSBjYWxsIHRv
IGNvbXBhcmUgb2JqZWN0IHZhbHVlcyBhdCBrZXkgaXQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIHRlbXBfZGlmZiA9IGRpZmYoaXQudmFsdWUoKSwgdGFyZ2V0W2l0LmtleSgpXSwg
cGF0aCArICIvIiArIGtleSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmlu
c2VydChyZXN1bHQuZW5kKCksIHRlbXBfZGlmZi5iZWdpbigpLCB0ZW1wX2RpZmYuZW5kKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGZvdW5kIGEga2V5IHRoYXQgaXMgbm90IGluIG8gLT4gcmVtb3ZlIGl0CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnB1c2hfYmFjayhvYmplY3QoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Im9wIiwgInJl
bW92ZSJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7InBhdGgiLCBwYXRoICsg
Ii8iICsga2V5fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIC8vIHNlY29uZCBwYXNzOiB0cmF2ZXJzZSBvdGhlciBvYmplY3QncyBlbGVtZW50cworICAg
ICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gaXQgPSB0YXJnZXQuYmVnaW4oKTsgaXQgIT0gdGFy
Z2V0LmVuZCgpOyArK2l0KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc291cmNlLmZpbmQoaXQua2V5KCkpID09IHNvdXJjZS5lbmQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3Vu
ZCBhIGtleSB0aGF0IGlzIG5vdCBpbiB0aGlzIC0+IGFkZCBpdAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGF1dG8ga2V5ID0ganNvbl9wb2ludGVyOjplc2NhcGUoaXQua2V5KCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoX2JhY2soCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
Im9wIiwgImFkZCJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7InBhdGgiLCBw
YXRoICsgIi8iICsga2V5fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJ2YWx1
ZSIsIGl0LnZhbHVlKCl9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gYm90aCBwcmlt
aXRpdmUgdHlwZTogcmVwbGFjZSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVz
aF9iYWNrKAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB7
Im9wIiwgInJlcGxhY2UifSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsicGF0aCIsIHBhdGh9
LAorICAgICAgICAgICAgICAgICAgICAgICAgeyJ2YWx1ZSIsIHRhcmdldH0KKyAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgLy8vIEB9Cit9OworCisKKy8vLy8vLy8vLy8vLy8KKy8vIHByZXNldHMgLy8K
Ky8vLy8vLy8vLy8vLy8KKworLyohCitAYnJpZWYgZGVmYXVsdCBKU09OIGNsYXNzCisKK1RoaXMg
dHlwZSBpcyB0aGUgZGVmYXVsdCBzcGVjaWFsaXphdGlvbiBvZiB0aGUgQHJlZiBiYXNpY19qc29u
IGNsYXNzIHdoaWNoCit1c2VzIHRoZSBzdGFuZGFyZCB0ZW1wbGF0ZSB0eXBlcy4KKworQHNpbmNl
IHZlcnNpb24gMS4wLjAKKyovCit1c2luZyBqc29uID0gYmFzaWNfanNvbjw+OworfQorCisKKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBub25tZW1iZXIgc3VwcG9ydCAvLworLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KKworLy8gc3BlY2lhbGl6YXRpb24gb2Ygc3RkOjpzd2FwLCBhbmQgc3Rk
OjpoYXNoCituYW1lc3BhY2Ugc3RkCit7CisvKiEKK0BicmllZiBleGNoYW5nZXMgdGhlIHZhbHVl
cyBvZiB0d28gSlNPTiBvYmplY3RzCisKK0BzaW5jZSB2ZXJzaW9uIDEuMC4wCisqLwordGVtcGxh
dGU8PgoraW5saW5lIHZvaWQgc3dhcChubG9obWFubjo6anNvbiYgajEsCisgICAgICAgICAgICAg
ICAgIG5sb2htYW5uOjpqc29uJiBqMikgbm9leGNlcHQoCisgICAgICAgICAgICAgICAgICAgICBp
c19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxubG9obWFubjo6anNvbj46OnZhbHVlIGFuZAor
ICAgICAgICAgICAgICAgICAgICAgaXNfbm90aHJvd19tb3ZlX2Fzc2lnbmFibGU8bmxvaG1hbm46
Ompzb24+Ojp2YWx1ZQorICAgICAgICAgICAgICAgICApCit7CisgICAgajEuc3dhcChqMik7Cit9
CisKKy8vLyBoYXNoIHZhbHVlIGZvciBKU09OIG9iamVjdHMKK3RlbXBsYXRlPD4KK3N0cnVjdCBo
YXNoPG5sb2htYW5uOjpqc29uPgoreworICAgIC8qIQorICAgIEBicmllZiByZXR1cm4gYSBoYXNo
IHZhbHVlIGZvciBhIEpTT04gb2JqZWN0CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAg
ICovCisgICAgc3RkOjpzaXplX3Qgb3BlcmF0b3IoKShjb25zdCBubG9obWFubjo6anNvbiYgaikg
Y29uc3QKKyAgICB7CisgICAgICAgIC8vIGEgbmFpdmUgaGFzaGluZyB2aWEgdGhlIHN0cmluZyBy
ZXByZXNlbnRhdGlvbgorICAgICAgICBjb25zdCBhdXRvJiBoID0gaGFzaDxubG9obWFubjo6anNv
bjo6c3RyaW5nX3Q+KCk7CisgICAgICAgIHJldHVybiBoKGouZHVtcCgpKTsKKyAgICB9Cit9Owor
fQorCisvKiEKK0BicmllZiB1c2VyLWRlZmluZWQgc3RyaW5nIGxpdGVyYWwgZm9yIEpTT04gdmFs
dWVzCisKK1RoaXMgb3BlcmF0b3IgaW1wbGVtZW50cyBhIHVzZXItZGVmaW5lZCBzdHJpbmcgbGl0
ZXJhbCBmb3IgSlNPTiBvYmplY3RzLiBJdAorY2FuIGJlIHVzZWQgYnkgYWRkaW5nIGAiX2pzb24i
YCB0byBhIHN0cmluZyBsaXRlcmFsIGFuZCByZXR1cm5zIGEgSlNPTiBvYmplY3QKK2lmIG5vIHBh
cnNlIGVycm9yIG9jY3VycmVkLgorCitAcGFyYW1baW5dIHMgIGEgc3RyaW5nIHJlcHJlc2VudGF0
aW9uIG9mIGEgSlNPTiBvYmplY3QKK0BwYXJhbVtpbl0gbiAgdGhlIGxlbmd0aCBvZiBzdHJpbmcg
QGEgcworQHJldHVybiBhIEpTT04gb2JqZWN0CisKK0BzaW5jZSB2ZXJzaW9uIDEuMC4wCisqLwor
aW5saW5lIG5sb2htYW5uOjpqc29uIG9wZXJhdG9yICIiIF9qc29uKGNvbnN0IGNoYXIqIHMsIHN0
ZDo6c2l6ZV90IG4pCit7CisgICAgcmV0dXJuIG5sb2htYW5uOjpqc29uOjpwYXJzZShzLCBzICsg
bik7Cit9CisKKy8qIQorQGJyaWVmIHVzZXItZGVmaW5lZCBzdHJpbmcgbGl0ZXJhbCBmb3IgSlNP
TiBwb2ludGVyCisKK1RoaXMgb3BlcmF0b3IgaW1wbGVtZW50cyBhIHVzZXItZGVmaW5lZCBzdHJp
bmcgbGl0ZXJhbCBmb3IgSlNPTiBQb2ludGVycy4gSXQKK2NhbiBiZSB1c2VkIGJ5IGFkZGluZyBg
Il9qc29uX3BvaW50ZXIiYCB0byBhIHN0cmluZyBsaXRlcmFsIGFuZCByZXR1cm5zIGEgSlNPTiBw
b2ludGVyCitvYmplY3QgaWYgbm8gcGFyc2UgZXJyb3Igb2NjdXJyZWQuCisKK0BwYXJhbVtpbl0g
cyAgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBKU09OIFBvaW50ZXIKK0BwYXJhbVtpbl0g
biAgdGhlIGxlbmd0aCBvZiBzdHJpbmcgQGEgcworQHJldHVybiBhIEpTT04gcG9pbnRlciBvYmpl
Y3QKKworQHNpbmNlIHZlcnNpb24gMi4wLjAKKyovCitpbmxpbmUgbmxvaG1hbm46Ompzb246Ompz
b25fcG9pbnRlciBvcGVyYXRvciAiIiBfanNvbl9wb2ludGVyKGNvbnN0IGNoYXIqIHMsIHN0ZDo6
c2l6ZV90IG4pCit7CisgICAgcmV0dXJuIG5sb2htYW5uOjpqc29uOjpqc29uX3BvaW50ZXIoc3Rk
OjpzdHJpbmcocywgbikpOworfQorCisvLyByZXN0b3JlIEdDQy9jbGFuZyBkaWFnbm9zdGljIHNl
dHRpbmdzCisjaWYgZGVmaW5lZChfX2NsYW5nX18pIHx8IGRlZmluZWQoX19HTlVDX18pIHx8IGRl
ZmluZWQoX19HTlVHX18pCisgICAgI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyNlbmRpZgor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQ
cm9jZXNzUG9vbENvY29hLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBy
b2Nlc3NQb29sQ29jb2EubW0KaW5kZXggNDlkNGQ1YmQ1YTk5ZDRkOTgxMTE2YTA4YTEzMjdkNTAx
Y2JhYjk1MS4uOGQ5YjYzODk3NTY2YzU0MjkzNzkyZDBkNjlhNWE3MDA2NTRmYjFkMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2Eu
bW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29j
b2EubW0KQEAgLTg3LDYgKzg3LDExIEBAIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdlYktpdE5l
dHdvcmtMb2FkVGhyb3R0bGVMYXRlbmN5TWlsbGlzZWNvbmRzRGVmYXVsdHNLZXkKIAogc3RhdGlj
IE5TU3RyaW5nICogY29uc3QgV2ViS2l0VmFyaWF0aW9uRm9udHNFbmFibGVkRGVmYXVsdHNLZXkg
PSBAIkV4cGVyaW1lbnRhbFZhcmlhdGlvbkZvbnRzRW5hYmxlZCI7CiAKKyNpZiBFTkFCTEUoTkVU
V09SS19DQVBUVVJFKQorc3RhdGljIE5TU3RyaW5nICogY29uc3QgV2ViS2l0UmVjb3JkUmVwbGF5
TW9kZURlZmF1bHRzS2V5ID0gQCJXZWJLaXRSZWNvcmRSZXBsYXlNb2RlIjsKK3N0YXRpYyBOU1N0
cmluZyAqIGNvbnN0IFdlYktpdFJlY29yZFJlcGxheUNhY2hlTG9jYXRpb25EZWZhdWx0c0tleSA9
IEAiV2ViS2l0UmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbiI7CisjZW5kaWYKKwogbmFtZXNwYWNl
IFdlYktpdCB7CiAKIE5TU3RyaW5nICpTY2hlbWVGb3JDdXN0b21Qcm90b2NvbFJlZ2lzdGVyZWRO
b3RpZmljYXRpb25OYW1lID0gQCJXZWJLaXRTY2hlbWVGb3JDdXN0b21Qcm90b2NvbFJlZ2lzdGVy
ZWROb3RpZmljYXRpb24iOwpAQCAtMjYyLDYgKzI2NywxMyBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
OjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYQogI2VuZGlmCiAKICAgICBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdF
bmFibGVkID0gY29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoKTsKKworI2lmIEVOQUJM
RShORVRXT1JLX0NBUFRVUkUpCisgICAgcGFyYW1ldGVycy5yZWNvcmRSZXBsYXlNb2RlID0gW2Rl
ZmF1bHRzIHN0cmluZ0ZvcktleTpXZWJLaXRSZWNvcmRSZXBsYXlNb2RlRGVmYXVsdHNLZXldOwor
ICAgIHBhcmFtZXRlcnMucmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbiA9IFtkZWZhdWx0cyBzdHJp
bmdGb3JLZXk6V2ViS2l0UmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbkRlZmF1bHRzS2V5XTsKKyAg
ICBpZiAocGFyYW1ldGVycy5yZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uLmlzRW1wdHkoKSkKKyAg
ICAgICAgcGFyYW1ldGVycy5yZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uID0gcGFyYW1ldGVycy5k
aXNrQ2FjaGVEaXJlY3Rvcnk7CisjZW5kaWYKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxh
dGZvcm1JbnZhbGlkYXRlQ29udGV4dCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYTE3YTExNGZiMDdhNjMwYWExNTc2NTkzZjgw
YjJiOTgwMmQ0NDI1Mi4uYzIxY2IyOWVjNDRmM2ViY2QwNTI2NjM0ZDc4NmRjZGIxMDdmYjFhZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTA0NCwxMiArMTA0NCwyNyBAQAogCQk1MkQ1QTFCMDFDNTc0OTVBMDBERTM0QTMgLyog
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBQTFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggKi87IH07CiAJCTUyRDVBMUIxMUM1NzQ5NjIwMERF
MzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBQzFDNTc0OTRFMDBERTM0QTMg
LyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tICovOyB9OwogCQk1MkQ1QTFCNzFD
NTc0QTAyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUI0MUM1NzQ5RjIwMERF
MzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tICovOyB9OworCQk1MzAyNTgzQjFE
Q0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgyRTFEQ0JCRDFEMDBEQTg5
QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHAgKi87IH07CisJCTUzMDI1ODNDMURDQkJE
MjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgyRjFEQ0JCRDFEMDBEQTg5QzIgLyog
TmV0d29ya0NhcHR1cmVSZXNvdXJjZS5oICovOyB9OworCQk1MzAyNTgzRDFEQ0JCRDIyMDBEQTg5
QzIgLyogTmV0d29ya0NhcHR1cmVFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgzMDFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0Nh
cHR1cmVFdmVudC5jcHAgKi87IH07CisJCTUzMDI1ODNFMURDQkJEMjIwMERBODlDMiAvKiBOZXR3
b3JrQ2FwdHVyZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzAyNTgzMTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVFdmVudC5o
ICovOyB9OworCQk1MzAyNTgzRjFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVMb2dn
aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAy
NTgzMjFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVMb2dnaW5nLmggKi87IH07CisJ
CTUzMDI1ODQwMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MzMxRENC
QkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTWFuYWdlci5jcHAgKi87IH07CisJCTUzMDI1
ODQxMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1ODM0MURDQkJEMUQwMERB
ODlDMiAvKiBOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCAqLzsgfTsKKwkJNTMwMjU4NDIxRENCQkQy
MjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVjb3JkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MzUxRENCQkQxRDAwREE4OUMyIC8q
IE5ldHdvcmtDYXB0dXJlUmVjb3JkZXIuY3BwICovOyB9OworCQk1MzAyNTg0MzFEQ0JCRDIyMDBE
QTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZWNvcmRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MzYxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdv
cmtDYXB0dXJlUmVjb3JkZXIuaCAqLzsgfTsKKwkJNTMwMjU4NDQxRENCQkQyMjAwREE4OUMyIC8q
IE5ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MzcxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0
dXJlUmVwbGF5ZXIuY3BwICovOyB9OworCQk1MzAyNTg0NTFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0
d29ya0NhcHR1cmVSZXBsYXllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTMwMjU4MzgxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVw
bGF5ZXIuaCAqLzsgfTsKKwkJNTMwMjU4NDYxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtEYXRh
VGFza1JlcGxheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzAyNTgzOTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0RhdGFUYXNrUmVwbGF5LmNw
cCAqLzsgfTsKKwkJNTMwMjU4NDcxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtEYXRhVGFza1Jl
cGxheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMw
MjU4M0ExRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtEYXRhVGFza1JlcGxheS5oICovOyB9Owog
CQk1MzIxNTk1MzFEQkFFNzE4MDA1NEFBM0MgLyogTmV0d29ya1Nlc3Npb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMyMTU5NTIxREJBRTZGQzAw
NTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uLmNwcCAqLzsgfTsKIAkJNTMyMTU5NTQxREJBRTcxRDAw
NTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFzay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzIxNTk1MTFEQkFFNkZDMDA1NEFBM0MgLyogTmV0d29ya0Rh
dGFUYXNrLmNwcCAqLzsgfTsKIAkJNTMyMTU5NTUxREJBRTcyOTAwNTRBQTNDIC8qIE5ldHdvcmtT
ZXNzaW9uQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzMjE1OTUwMURCQUU2RDcwMDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLmggKi87
IH07CiAJCTUzMjE1OTU2MURCQUU3MkQwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMyMTU5NEYx
REJBRTZENzAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLmggKi87IH07CiAJCTUzQkE0
N0QwMURDMkVGNUUwMDRERjRBRCAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOUVCNTQ2MURDMkVFNDAwMDlE
NDhDRiAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmNwcCAqLzsgfTsKIAkJNTNCQTQ3RDExREMyRUY1
RTAwNERGNEFEIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOUVCNTQ3MURDMkVFNDAwMDlENDhDRiAvKiBOZXR3
b3JrRGF0YVRhc2tCbG9iLmggKi87IH07CisJCTUzREVBMzY2MURERTQyMzEwMEU4MjY0OCAvKiBq
c29uLmhwcCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
REVBMzY1MURERTQyMkUwMEU4MjY0OCAvKiBqc29uLmhwcCAqLzsgfTsKKwkJNTNFMjYwNjUxRERB
OTQ4RTAwNTkwODE4IC8qIE5ldHdvcmtDYXB0dXJlVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRTI2MDY0MUREQTk0ODEwMDU5MDgxOCAvKiBO
ZXR3b3JrQ2FwdHVyZVR5cGVzLmggKi87IH07CiAJCTVDMDUyRjI2MUM2RDNCRDMwMDc2RTkxOSAv
KiBBdXRoZW50aWNhdGlvbk1hbmFnZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMDUyRjI0MUM2RDNBQjYwMDc2RTkxOSAvKiBBdXRoZW50
aWNhdGlvbk1hbmFnZXJDb2NvYS5tbSAqLzsgfTsKIAkJNUMxNDI2RUMxQzIzRjgwOTAwRDQxMTgz
IC8qIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMTQyNkUyMUMyM0Y4MDUwMEQ0MTE4MyAv
KiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgKi87IH07CiAJCTVDMTQyNkVE
MUMyM0Y4MDkwMEQ0MTE4MyAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMxNDI2RTMxQzIz
RjgwNTAwRDQxMTgzIC8qIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggKi87IH07
CkBAIC0zMTQyLDEyICszMTU3LDI3IEBACiAJCTUyRDVBMUIyMUM1NzQ5RjIwMERFMzRBMyAvKiBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTJENUExQjMxQzU3NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJENUEx
QjQxQzU3NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzAyNTgyRTFEQ0JCRDFEMDBE
QTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNwcDsgcGF0aCA9IE5ldHdv
cmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUzMDI1ODJGMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2Fw
dHVyZVJlc291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtD
YXB0dXJlUmVzb3VyY2UuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya2VD
YWNoZWRSZXNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzAyNTgzMDFE
Q0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcDsgcGF0aCA9IE5l
dHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUzMDI1ODMxMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2Fw
dHVyZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtDYXB0
dXJlRXZlbnQuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVF
dmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzAyNTgzMjFEQ0JCRDFEMDBE
QTg5QzIgLyogTmV0d29ya0NhcHR1cmVMb2dnaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IE5ldHdvcmtDYXB0dXJlTG9nZ2luZy5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3Mv
Y2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTMwMjU4MzMxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTWFuYWdlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZU1h
bmFnZXIuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZU1h
bmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzAyNTgzNDFEQ0JCRDFE
MDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IE5ldHdvcmtDYXB0dXJlTWFuYWdlci5oOyBwYXRoID0gTmV0d29ya1Byb2Nl
c3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTMwMjU4MzUxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVjb3Jk
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya0NhcHR1
cmVSZWNvcmRlci5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0
dXJlUmVjb3JkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzAyNTgzNjFE
Q0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZWNvcmRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmg7IHBhdGggPSBOZXR3
b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVjb3JkZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTMwMjU4MzcxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0
dXJlUmVwbGF5ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0
d29ya0NhcHR1cmVSZXBsYXllci5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05l
dHdvcmtDYXB0dXJlUmVwbGF5ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MzAyNTgzODFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXBsYXllci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmg7IHBh
dGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMwMjU4MzkxRENCQkQxRDAwREE4OUMyIC8qIE5l
dHdvcmtEYXRhVGFza1JlcGxheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBOZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2Fw
dHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MzAyNTgzQTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0RhdGFUYXNrUmVwbGF5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFza1JlcGxheS5o
OyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMyMTU5NEYxREJBRTZENzAwNTRBQTNDIC8q
IE5ldHdvcmtEYXRhVGFza0NvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IE5ldHdvcmtEYXRhVGFza0NvY29hLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3
b3JrRGF0YVRhc2tDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzIxNTk1
MDFEQkFFNkQ3MDA1NEFBM0MgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrU2Vzc2lvbkNvY29hLmg7IHBhdGggPSBOZXR3b3Jr
UHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzMjE1OTUxMURCQUU2RkMwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2suY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya0RhdGFUYXNrLmNw
cDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUzMjE1OTUyMURCQUU2RkMwMDU0QUEzQyAvKiBOZXR3b3JrU2Vz
c2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrU2Vz
c2lvbi5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOUVCNTQ2MURDMkVFNDAwMDlENDhDRiAvKiBOZXR3
b3JrRGF0YVRhc2tCbG9iLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IE5ldHdvcmtEYXRhVGFza0Jsb2IuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Rh
dGFUYXNrQmxvYi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOUVCNTQ3MURD
MkVFNDAwMDlENDhDRiAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFza0Jsb2IuaDsgcGF0aCA9IE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtEYXRhVGFza0Jsb2IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTNERUEzNjUxRERFNDIyRTAwRTgyNjQ4IC8qIGpzb24uaHBwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuaDsgbmFtZSA9IGpzb24uaHBwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9q
c29uLmhwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNFMjYwNjQxRERBOTQ4MTAw
NTkwODE4IC8qIE5ldHdvcmtDYXB0dXJlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gTmV0d29ya0NhcHR1cmVUeXBlcy5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2Fw
dHVyZS9OZXR3b3JrQ2FwdHVyZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTU3OUQxOEI3MUNDRkUzNEIwMEIxOTc0QyAvKiBQaG90b3NTUEkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGhvdG9zU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMDUyRjI0MUM2RDNB
QjYwMDc2RTkxOSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEF1dGhlbnRpY2F0aW9uTWFuYWdlckNvY29hLm1t
OyBwYXRoID0gQXV0aGVudGljYXRpb24vY29jb2EvQXV0aGVudGljYXRpb25NYW5hZ2VyQ29jb2Eu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMTQyNkUyMUMyM0Y4MDUwMEQ0MTE4
MyAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5j
cHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDc4LDYgKzU1MDgsNyBAQAog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQlFNDg5RDI4MjFBMEEyQkU4
MDA3OEMwNkEgLyogY2FjaGUgKi8sCisJCQkJNTM5QkQ1QjIxREFEQjBCQTAwRjJFNEUxIC8qIGNh
cHR1cmUgKi8sCiAJCQkJN0VDNEYwRjgxOEU0QTkyMjAwODA1NkFGIC8qIGNvY29hICovLAogCQkJ
CTVDMTQyNkYyMUMyM0Y4MkQwMEQ0MTE4MyAvKiBDdXN0b21Qcm90b2NvbHMgKi8sCiAJCQkJNUMx
NDI2RjExQzIzRjgxNzAwRDQxMTgzIC8qIERvd25sb2FkcyAqLywKQEAgLTU3ODgsNiArNTgxOSwy
OCBAQAogCQkJbmFtZSA9IEljb25EYXRhYmFzZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CiAJCX07CisJCTUzOUJENUIyMURBREIwQkEwMEYyRTRFMSAvKiBjYXB0dXJlICovID0geworCQkJ
aXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk1M0RFQTM2NTFEREU0MjJFMDBF
ODI2NDggLyoganNvbi5ocHAgKi8sCisJCQkJNTMwMjU4MkUxRENCQkQxRDAwREE4OUMyIC8qIE5l
dHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwICovLAorCQkJCTUzMDI1ODJGMURDQkJEMUQwMERBODlD
MiAvKiBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmggKi8sCisJCQkJNTMwMjU4MzAxRENCQkQxRDAw
REE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwICovLAorCQkJCTUzMDI1ODMxMURDQkJE
MUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmggKi8sCisJCQkJNTMwMjU4MzIxRENC
QkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTG9nZ2luZy5oICovLAorCQkJCTUzMDI1ODMz
MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuY3BwICovLAorCQkJCTUz
MDI1ODM0MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCAqLywKKwkJ
CQk1MzAyNTgzNTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZWNvcmRlci5jcHAg
Ki8sCisJCQkJNTMwMjU4MzYxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVjb3Jk
ZXIuaCAqLywKKwkJCQk1MzAyNTgzNzFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVS
ZXBsYXllci5jcHAgKi8sCisJCQkJNTMwMjU4MzgxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtD
YXB0dXJlUmVwbGF5ZXIuaCAqLywKKwkJCQk1M0UyNjA2NDFEREE5NDgxMDA1OTA4MTggLyogTmV0
d29ya0NhcHR1cmVUeXBlcy5oICovLAorCQkJCTUzMDI1ODM5MURDQkJEMUQwMERBODlDMiAvKiBO
ZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwICovLAorCQkJCTUzMDI1ODNBMURDQkJEMUQwMERBODlD
MiAvKiBOZXR3b3JrRGF0YVRhc2tSZXBsYXkuaCAqLywKKwkJCSk7CisJCQluYW1lID0gY2FwdHVy
ZTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTVDMDUyRjIzMUM2RDNBQTEw
MDc2RTkxOSAvKiBjb2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCkBAIC03NTQwLDYgKzc1OTMsNyBAQAogCQkJCTM3QTY0RTU3MThGMzhGNDYwMEVCMzBGMSAv
KiBfV0tGb3JtSW5wdXRTZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzNEMTIyMzE4QTQ3
MzAxMDA2NkQ5Q0MgLyogX1dLRnJhbWVIYW5kbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3M0Qx
MjI3MThBNDczRjYwMDY2RDlDQyAvKiBfV0tGcmFtZUhhbmRsZUludGVybmFsLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlDRDc4RTExOTFEQjdFNUFEMDAxNEEyREUgLyogX1dLRnVsbHNjcmVlbkRlbGVn
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0U2QTRFRTFCQzVERDM5MDBGOEEwRTcgLyogX1dL
SGl0VGVzdFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNBODhCM0IxQkM3MTBEOTAwQUJB
NUMyIC8qIF9XS0hpdFRlc3RSZXN1bHRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzdB
NjRFNTUxOEYzOEUzQzAwRUIzMEYxIC8qIF9XS0lucHV0RGVsZWdhdGUuaCBpbiBIZWFkZXJzICov
LApAQCAtNzU4MCw3ICs3NjM0LDYgQEAKIAkJCQkxQUZCNEM3MjFBREYxNTVEMDBCMzMzMzkgLyog
X1dLV2Vic2l0ZURhdGFTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0QTkzQjcxQUVCMDhF
QTAwMTUwRTlDIC8qIF9XS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTExNURDNzIxOTFEODJEQTAwREE4MDcyIC8qIF9XS1dlYlZpZXdQcmludEZvcm1hdHRl
ci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0Q3OEUxMTkxREI3RTVBRDAwMTRBMkRFIC8qIF9XS0Z1
bGxzY3JlZW5EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE5REQzQzAxRDA3RDE2ODAw
QUM4MjNCIC8qIF9XS1dlYlZpZXdQcmludEZvcm1hdHRlckludGVybmFsLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBMTgyRDVCNTFCRTZCRDI1MDA4N0E3Q0MgLyogQWNjZXNzaWJpbGl0eUlPUy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTdENzkyRDgxNzY3Q0NBMzAwODgxQ0JFIC8qIEFjdGl2aXR5QXNz
ZXJ0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTc2MDAsNiArNzY1Myw3IEBACiAJCQkJMzdFMjVE
NkUxOEZERTVENjAwNUQzQTAwIC8qIEFQSUZvcm1DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBQzEzMzcyMTg1NjZDN0MwMEYzRUMwNSAvKiBBUElGcmFtZUhhbmRsZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkRGOUVFRTYxQTc4MUZCNDAwQjZDRkJFIC8qIEFQSUZyYW1lSW5mby5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQ0Q3OEUxMTcxREI3REMwQTAwMTRBMkRFIC8qIEFQSUZ1bGxzY3JlZW5D
bGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTc0QUEzMTQyQTRDQjcwMDM5MjUwRiAvKiBB
UElHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRBQkE3NzYxQTgyQjQyMTAwRUYwRjFB
IC8qIEFQSUhpc3RvcnlDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQTg4QjQ2MUJDODgy
OTMwMEFCQTVDMiAvKiBBUElIaXRUZXN0UmVzdWx0LmggaW4gSGVhZGVycyAqLywKQEAgLTc3MTIs
NiArNzc2Niw3IEBACiAJCQkJQkNFODFEOEQxMzE5RjdFRjAwMjQxOTEwIC8qIEZvbnRJbmZvLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQTE0RjhFMjFENzRDODM0MDA2Q0JFQzYgLyogRnJhbWVJbmZv
RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMDBENjExODMxNzkyMTAwMDg3REQ3IC8qIEZy
YW1lTG9hZFN0YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQlDRDc4RTExNTFEQjdEN0VEMDAxNEEy
REUgLyogRnVsbHNjcmVlbkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1QkUxQjMxRDU5
MDJERDAwREQ3QzY4IC8qIEdhbWVwYWREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE3NzUz
RjExOEJBQkYwMDA3RDlFOUEgLyogR2VuZXJpY0NhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzA2RjQyRjEyREJCOUI2MDAyRDc4REUgLyogR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzc5MCw5ICs3ODQ1LDE5IEBACiAJCQkJODM0
QjI1MTIxQTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUU0NDM2RUNGMUEwRDA0MEIwMEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGVTdG9y
YWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzEwNDI4QjFCRDZCNjZGMDBBNzE1RTQgLyogTmV0
d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzMDI1ODND
MURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1MzAyNTgzRTFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVFdmVudC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNTMwMjU4M0YxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtD
YXB0dXJlTG9nZ2luZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMwMjU4NDExRENCQkQyMjAwREE4
OUMyIC8qIE5ldHdvcmtDYXB0dXJlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMwMjU4
NDMxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVjb3JkZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUzMDI1ODQ1MURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlcGxh
eWVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0UyNjA2NTFEREE5NDhFMDA1OTA4MTggLyogTmV0
d29ya0NhcHR1cmVUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEzQTE2NEQxNjMwQTlCRjAw
NUQ3RDIyIC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MUREOUYyOTE2MzY3REEyMDAxNTc4RTkgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3NNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCQzlCOEUxQzY1MkNBMDAwQThG
RENGIC8qIE5ldHdvcmtEYXRhVGFzay5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNCQTQ3RDExREMy
RUY1RTAwNERGNEFEIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUzMjE1OTU2MURCQUU3MkQwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTMwMjU4NDcxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtEYXRhVGFz
a1JlcGxheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM5OTAyMDMxQkU5QTAyQjAwMEYzNjUzIC8q
IE5ldHdvcmtMb2FkLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0Q0NTRENzFCRTlEM0M0MDA2Qzkz
QkQgLyogTmV0d29ya0xvYWRDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzOTE0OTY1MUJF
QTgzODUwMEQyRDk1MyAvKiBOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLApA
QCAtNzgwOCw2ICs3ODczLDcgQEAKIAkJCQlFMTUyNTUxQjE3MDExODE5MDAzRDdBREIgLyogTmV0
d29ya1Jlc291cmNlTG9hZGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMTQyNkYw
MUMyM0Y4MDkwMEQ0MTE4MyAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUMyMENCQTAxQkIxRUNEODAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9u
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzIxNTk1NTFEQkFFNzI5MDA1NEFBM0MgLyogTmV0d29y
a1Nlc3Npb25Db2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFBMkVDNTYxNDg5OUMwOTAwODEw
RDcxIC8qIE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzMTMxMjYxRjE0OEZGODJDMDBCQTJBMzkgLyogTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVl
c3RNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUEyRUM1MjE0ODk5ODE5MDA4MTBENzEg
LyogTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJz
ICovLApAQCAtNzg2MSw3ICs3OTI3LDYgQEAKIAkJCQkxQTBFQzZDMDEyNEJCRDlCMDA3RUY0QTUg
LyogUGx1Z2luUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTBFQzc1RTEy
NEJDN0IyMDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTA0M0I1RTEyNEQ1RTlEMDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5TWVzc2FnZXMu
aCBpbiBIZWFkZXJzICovLAotCQkJCTUzQkE0N0QxMURDMkVGNUUwMDRERjRBRCAvKiBOZXR3b3Jr
RGF0YVRhc2tCbG9iLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTA0M0RDMTEyNEZGODc1MDBGRkJG
QjUgLyogUGx1Z2luUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOEVGQTcxMTI1MkI4NDEw
MEY3MDY3RiAvKiBQbHVnaW5Qcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTRB
OUYzMzEyQjg0NEUyMDA4RkU5ODQgLyogUGx1Z2luUXVpcmtzLmggaW4gSGVhZGVycyAqLywKQEAg
LTc5ODIsNiArODA0Nyw3IEBACiAJCQkJQkMwMzJENzcxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkNv
bnRleHRNZW51Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTI5MzVEODEyODhEMTk0MDBB
NEI2OTUgLyogV2ViQ29udGV4dE1lbnVJdGVtLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTBGQkI5
QjEyODhDOTVFMDBBRkZERjQgLyogV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTFFQTAyNDAxREFDMzFEQjAwOTYwMjFGIC8qIFdlYkNvbnRleHRNZW51TGlzdGVu
ZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBQ0JCODIxMjdBOEJBRDAwRDIwM0I5IC8q
IFdlYkNvbnRleHRNZW51UHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQUNCQkEwMTI3QThG
MkMwMEQyMDNCOSAvKiBXZWJDb250ZXh0TWVudVByb3h5TWFjLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0Y0REUyNTE2OEZBNDQ4MDBDOTRBRkMgLyogV2ViQ29udGV4dFN1cHBsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLApAQCAtODA2OCw3ICs4MTM0LDYgQEAKIAkJCQlCQzdCNjI1MjEyQTQzQzk2MDBE
MTc0QTQgLyogV2ViUGFnZUdyb3VwRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3QjYyMTUx
MkE0MjE5QTAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cFByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyRDlFQTMwRjFBOTZDQkZGMDAyRDI4MDcgLyogV2ViUGFnZUluamVjdGVkQnVuZGxlQ2xpZW50
LmggaW4gSGVhZGVycyAqLywKLQkJCQlBMUVBMDIzODFEQUJGRjdFMDA5NjAyMUYgLyogV0tDb250
ZXh0TWVudUxpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMENFNzJBMTEyNDdFNzFEMDBC
QzBFQzQgLyogV2ViUGFnZU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDVDOUQwNjE5
QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MDMyREQxMTBGNDM4OUYwMDU4QzE1QSAvKiBXZWJQYWdlUHJveHkuaCBpbiBIZWFkZXJzICovLApA
QCAtODE5Myw3ICs4MjU4LDYgQEAKIAkJCQlCQzdCNjMzRDEyQTQ1RDEyMDBEMTc0QTQgLyogV0tC
dW5kbGVQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjQ3NEQ4MTg0RDQzRkQwMDUx
QjYyMiAvKiBXS0J1bmRsZVBhZ2VMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUVE
ODJBN0YyMTI4QzZGQUYwMDQ0NzdCMyAvKiBXS0J1bmRsZVBhZ2VPdmVybGF5LmggaW4gSGVhZGVy
cyAqLywKLQkJCQk1MzIxNTk1NjFEQkFFNzJEMDA1NEFBM0MgLyogTmV0d29ya0RhdGFUYXNrQ29j
b2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjQ3NEVBMTg0RDQ1MTMwMDUxQjYyMiAvKiBXS0J1
bmRsZVBhZ2VQb2xpY3lDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMUI0MTk4MTFENDFE
NTcwMDExRThERCAvKiBXS0J1bmRsZVBhZ2VQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QUI0NzREQTE4NEQ0NDI1MDA1MUI2MjIgLyogV0tCdW5kbGVQYWdlUmVzb3VyY2VMb2FkQ2xpZW50
LmggaW4gSGVhZGVycyAqLywKQEAgLTgyMTcsNiArODI4MSw3IEBACiAJCQkJMUE0NDVCOUYxODRE
NUZCNTAwNEIzNDE0IC8qIFdLQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MUE1NTVGNjEyOEM2QzQ3MDA5QUJDRUMgLyogV0tDb250ZXh0TWVudUl0ZW0u
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxQTU1NjAxMTI4QzZEOTIwMDlBQkNFQyAvKiBXS0NvbnRl
eHRNZW51SXRlbVR5cGVzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMUVBMDIzODFEQUJGRjdFMDA5
NjAyMUYgLyogV0tDb250ZXh0TWVudUxpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0M5
MzhFMTExODBERTQ0MDA4NUU1RkUgLyogV0tDb250ZXh0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOUZCNUYzOTUxNjlFNkE4MDAwMkMyNUJGIC8qIFdLQ29udGV4dFByaXZhdGVNYWMuaCBp
biBIZWFkZXJzICovLAogCQkJCTMzMDkzNDVCMTMxNUI5OTgwMDk3QTdCQyAvKiBXS0Nvb2tpZU1h
bmFnZXIuaCBpbiBIZWFkZXJzICovLApAQCAtODI2Myw3ICs4MzI4LDYgQEAKIAkJCQlCQzU0Q0Mx
MjEyRDY3NEVFMDA1QzY3QjAgLyogV0tHZW9sb2NhdGlvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMDZGNDRFMTJEQkRGM0YwMDJENzhERSAvKiBXS0dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMEU2MTk4MTJENkNEMTIwMDEyQTcyQSAv
KiBXS0dlb2xvY2F0aW9uUG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTUzMjE1OTU1MURC
QUU3MjkwMDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkNCNEU0RjE4QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQ0M4QjM3NDEyNUZCNjkwMDBERTQ2QTQgLyogV0tHZW9tZXRy
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0MjJGOEIxOEIyOUI1NDAwRDhDRDk2IC8qIFdLSGlz
dG9yeURlbGVnYXRlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04MzIzLDcgKzgzODcsNiBA
QAogCQkJCTdDRDVFQkI5MTc0NkExNUIwMDBDMUM0NSAvKiBXS09iakNUeXBlV3JhcHBlclJlZi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMzc4RTFBNDAxODFFREEwMTAwMzEwMDdBIC8qIFdLT2JqZWN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUNDNTBGMjFDQkMzODFEMDAzQzdEMDMgLyogV0tPcGVu
UGFuZWxQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMUVBMDI0MDFEQUMzMURCMDA5
NjAyMUYgLyogV2ViQ29udGV4dE1lbnVMaXN0ZW5lclByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTY3Q0QyRTFDQkM1MTNGMDBCRkUzRUEgLyogV0tPcGVuUGFuZWxQYXJhbWV0ZXJzSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDODU3RkU2MTJCODQzRDgwMEVERUIyRSAvKiBXS09w
ZW5QYW5lbFBhcmFtZXRlcnNSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMURGRThGMTJCMzFD
QTgwMDVERjczMCAvKiBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywK
QEAgLTgzMzMsNyArODM5Niw2IEBACiAJCQkJODM3MkRCMjUxQTY3NEM4RjAwQzY5N0M1IC8qIFdL
UGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUI4QTFG
NDE4NDAwQjhGMDBFOUFFNjkgLyogV0tQYWdlRmluZENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUFCOEExRjYxODQwMEI5RDAwRTlBRTY5IC8qIFdLUGFnZUZpbmRNYXRjaGVzQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQlDRDc4RTExNTFEQjdEN0VEMDAxNEEyREUgLyogRnVsbHNjcmVl
bkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCOEExRjAxODQwMEIwMDAwRTlBRTY5IC8q
IFdLUGFnZUZvcm1DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDN0I2MzM3MTJBNDVBQkEw
MEQxNzRBNCAvKiBXS1BhZ2VHcm91cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5RUEzMEQxQTk2
Q0I1OTAwMkQyODA3IC8qIFdLUGFnZUluamVjdGVkQnVuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAq
LywKQEAgLTgzNjUsNyArODQyNyw2IEBACiAJCQkJOTM5MTA3NEYxQkY2QkM2NTAwOEMxN0FEIC8q
IFdLUHJldmlld0VsZW1lbnRJbmZvSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0I0
RTY2MThCQkUzRDkwMDBGQ0ZDOSAvKiBXS1ByaW50aW5nVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkNCQUFDRUIxNDUyMjVFMzAwNTNGODJGIC8qIFdLUHJvY2Vzc0dyb3VwLmggaW4gSGVhZGVy
cyAqLywKLQkJCQlDRDc4RTExNzFEQjdEQzBBMDAxNEEyREUgLyogQVBJRnVsbHNjcmVlbkNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCQUFDRUQxNDUyMjVFMzAwNTNGODJGIC8qIFdLUHJv
Y2Vzc0dyb3VwUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUExNTg0MUExODkwNDRGNTAw
MTc2MTZDIC8qIFdLUHJvY2Vzc1Bvb2wuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBM0NDMTY5MTg5
MDdFQjAwMDFFNkVEOCAvKiBXS1Byb2Nlc3NQb29sSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLApA
QCAtODQzNyw2ICs4NDk4LDcgQEAKIAkJCQkzNzk1Nzg5QzE4QUQ0RjE5MDBCOUVEMkUgLyogV0tX
ZWJQcm9jZXNzUGx1Z0luRm9ybURlbGVnYXRlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUY3NTA2QjExODU5MTYzNzAwRUMwRkY3IC8qIFdLV2ViUHJvY2Vzc1BsdWdJbkZyYW1lLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxRjc1MDZCODE4NTkxNjVEMDBFQzBGRjcgLyogV0tXZWJQcm9jZXNz
UGx1Z0luRnJhbWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNERUEzNjYxRERFNDIz
MTAwRTgyNjQ4IC8qIGpzb24uaHBwIGluIEhlYWRlcnMgKi8sCiAJCQkJMzczRDEyMkQxOEE0QjZF
QjAwNjZEOUNDIC8qIFdLV2ViUHJvY2Vzc1BsdWdJbkZyYW1lUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUY3NTA2QjIxODU5MTYzRTAwRUMwRkY3IC8qIFdLV2ViUHJvY2Vzc1BsdWdJbkhp
dFRlc3RSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFGNzUwNkI3MTg1OTE2NUEwMEVDMEZG
NyAvKiBXS1dlYlByb2Nlc3NQbHVnSW5IaXRUZXN0UmVzdWx0SW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovLApAQCAtOTE5Niw2ICs5MjU4LDcgQEAKIAkJCQlCQ0U4MUQ4QzEzMTlGN0VGMDAyNDE5MTAg
LyogRm9udEluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUExNEY4RTExRDc0QzgzNDAwNkNC
RUM2IC8qIEZyYW1lSW5mb0RhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFMDBENjAxODMx
NzkyMTAwMDg3REQ3IC8qIEZyYW1lTG9hZFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNE
NzhFMTE0MURCN0Q3RUQwMDE0QTJERSAvKiBGdWxsc2NyZWVuQ2xpZW50Lm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTE1QkUxQjIxRDU5MDJERDAwREQ3QzY4IC8qIEdhbWVwYWREYXRhLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDMDZGNDMwMTJEQkI5QjYwMDJENzhERSAvKiBHZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzA2RjQ0QjEy
REJEMUY1MDAyRDc4REUgLyogR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94
eS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkyNzQsMTMgKzkzMzcsMjAgQEAKIAkJCQlFNDQzNkVD
RDFBMEQwNDBCMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlS2V5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTgzMUVFQkJFMUJEODVDNDMwMEJCNjRDMyAvKiBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxv
YWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODMyQUUyNTMxQkUyRThDRDAwRkFBRTEwIC8qIE5l
dHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
Q0Q3OEUxMTQxREI3RDdFRDAwMTRBMkRFIC8qIEZ1bGxzY3JlZW5DbGllbnQubW0gaW4gU291cmNl
cyAqLywKIAkJCQk4M0JEQ0NCOTFBQzVGREI2MDAzRjY0NDEgLyogTmV0d29ya0NhY2hlU3RhdGlz
dGljcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDQzNkVEMDFBMEQwNDBCMDBFQUQyMDQgLyog
TmV0d29ya0NhY2hlU3RvcmFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4MzEwNDI4QzFCRDZC
NjZGMDBBNzE1RTQgLyogTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNTMwMjU4M0IxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVz
b3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTMwMjU4M0QxRENCQkQyMjAwREE4OUMyIC8q
IE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTMwMjU4NDAxRENC
QkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk1MzAyNTg0MjFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZWNvcmRlci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzAyNTg0NDFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29y
a0NhcHR1cmVSZXBsYXllci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTNBMTY0QzE2MzBBOUJG
MDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTFERDlGMjgxNjM2N0RBMjAwMTU3OEU5IC8qIE5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzMjE1OTU0
MURCQUU3MUQwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2suY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTNCQTQ3RDAxREMyRUY1RTAwNERGNEFEIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNUNCQzlCOEQxQzY1Mjc5QzAwQThGRENGIC8qIE5ldHdvcmtEYXRh
VGFza0NvY29hLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTMwMjU4NDYxRENCQkQyMjAwREE4OUMy
IC8qIE5ldHdvcmtEYXRhVGFza1JlcGxheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Mzk5MDIw
MjFCRTlBMDJCMDAwRjM2NTMgLyogTmV0d29ya0xvYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODM2RUVCODAxQkU5RUM5RTAwNkI0QjgyIC8qIE5ldHdvcmtMb2FkTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTE3OTU1NjgxNjI4NzZDRjAwRkE0M0I2IC8qIE5ldHdvcmtQcm9jZXNzLmNwcCBp
biBTb3VyY2VzICovLApAQCAtOTI5OSw2ICs5MzY5LDcgQEAKIAkJCQlFMTUyNTUxQTE3MDExODE5
MDAzRDdBREIgLyogTmV0d29ya1Jlc291cmNlTG9hZGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTVDMTQyNkVGMUMyM0Y4MDkwMEQ0MTE4MyAvKiBOZXR3b3JrUmVzb3Vy
Y2VMb2FkUGFyYW1ldGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzgyODNBQzE2QjRCRjNG
MDBBMjc4RkUgLyogTmV0d29ya1NlcnZpY2VFbnRyeVBvaW50Lm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTMyMTU5NTMxREJBRTcxODAwNTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDMjBDQjlEMUJCMERDRkEwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbkNv
Y29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFBMkVDNTUxNDg5OTgyRTAwODEwRDcxIC8qIE5v
dGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMzEy
NjFFMTQ4RkY4MkMwMEJBMkEzOSAvKiBOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFn
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MzU4LDcgKzk0MjksNiBAQAogCQkJCTFBMkQ5MjIx
MTI4MURDMUIwMDFFQjk2MiAvKiBQbHVnaW5Qcm94eU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTFBOEVGQTcwMTI1MkI4NDEwMEY3MDY3RiAvKiBQbHVnaW5Qcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0Q2MjI3NzE3MzlEODYzMDA1QkQ3RkYgLyogUGx1Z2lu
U2FuZGJveFByb2ZpbGUubW0gaW4gU291cmNlcyAqLywKLQkJCQk1M0JBNDdEMDFEQzJFRjVFMDA0
REY0QUQgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzgy
ODQ0RDE2QjUwODFDMDBBMjc4RkUgLyogUGx1Z2luU2VydmljZUVudHJ5UG9pbnQubW0gaW4gU291
cmNlcyAqLywKIAkJCQkxQTZGQjdBRTExRTY0QjY4MDBEQjEzNzEgLyogUGx1Z2luVmlldy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlFMThDOTJGNDEyREI5RTcxMDBDRjJBRUIgLyogUHJpbnRJbmZv
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTQxNCw2ICs5NDg0LDcgQEAKIAkJCQkxQTY0MjBFNDEy
RENFMkZGMDBDQUFFMkMgLyogU2hhcmVhYmxlQml0bWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUMwMUEyNjAxMTI2NjJGMjEwMEM5RUQ1NSAvKiBTaGFyZWFibGVCaXRtYXBDRy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1MTIxNzQ2MDE2NEMyMEUzMDAzN0E1QzEgLyogU2hhcmVhYmxlUmVzb3Vy
Y2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDQ1MEFFQzAxREMzRkFFNTAwOTk0M0YyIC8qIFNo
YXJlZE1lbW9yeUNvY29hLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEQUYwNkQ3MThCRDFBNDcw
MDgxQ0VCMSAvKiBTbWFydE1hZ25pZmljYXRpb25Db250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMkRFNjk0M0QxOEJEMkE2ODAwNUMxNUU1IC8qIFNtYXJ0TWFnbmlmaWNhdGlvbkNvbnRy
b2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTI3MkIyOEExNDA2
OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRhLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTQ4
OSw2ICs5NTYwLDcgQEAKIAkJCQk1MTAyMUU5QzEyQjE2Nzg4MDA1QzAzM0MgLyogV2ViQ29udGV4
dE1lbnVDbGllbnRNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTI5MzVENzEyODhEMTk0MDBB
NEI2OTUgLyogV2ViQ29udGV4dE1lbnVJdGVtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMEZC
QjlBMTI4OEM5NUUwMEFGRkRGNCAvKiBXZWJDb250ZXh0TWVudUl0ZW1EYXRhLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUExRUEwMjNGMURBQzMxREIwMDk2MDIxRiAvKiBXZWJDb250ZXh0TWVudUxp
c3RlbmVyUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFBODRDRTMxMjdGMzg2QjAwQ0E2
RUE0IC8qIFdlYkNvbnRleHRNZW51UHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFBQ0JC
QTExMjdBOEYyQzAwRDIwM0I5IC8qIFdlYkNvbnRleHRNZW51UHJveHlNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQkzMzA5MzQ0RjEzMTVCOTREMDA5N0E3QkMgLyogV2ViQ29va2llTWFuYWdlci5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTk1NTAsNyArOTYyMiw2IEBACiAJCQkJNTEwNTIzNzkxQzcz
REE3NzAwNzk5M0NCIC8qIFdlYklEQkNvbm5lY3Rpb25Ub0NsaWVudE1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTQxMjk5NTFDNjQyOEMyMDA1OUU3MTQgLyogV2ViSURC
Q29ubmVjdGlvblRvU2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMDUyMzc1MUM3M0Qz
OEYwMDc5OTNDQiAvKiBXZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXJNZXNzYWdlUmVjZWl2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJNDQ1MEFFQzAxREMzRkFFNTAwOTk0M0YyIC8qIFNoYXJlZE1l
bW9yeUNvY29hLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxQTU4NzgwMUQxQzUwODEwMDRCQTlB
RiAvKiBXZWJJREJSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDRjZBQkMxMkM5MUVG
OTAwOEY5QzM1IC8qIFdlYkltYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDOEUyODIxMTI3
NUQxNTQwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05NjY1
LDcgKzk3MzYsNiBAQAogCQkJCTFBNTNDMkE5MUEzMjU3MkIwMDRFOEM3MCAvKiBXZWJzaXRlRGF0
YVN0b3JlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNDgzMkMzMUE5NjVBM0MwMDhCNERGRSAv
KiBXZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQk1Qzc3MDY3NDFE
MTEzODM4MDAxMjcwMEYgLyogV2ViU29ja2V0UHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJQTFENDIwNDcxREI1NTc4NTAwQkI2QjBEIC8qIFdLQ29udGV4dE1lbnVMaXN0ZW5lci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk4MzYwMzQ5RjFBQ0IzNEQ2MDA2MjY1NDkgLyogV2ViU1FMaXRl
RGF0YWJhc2VUcmFja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNTJDMEY3MUEzOENEQzcw
MDE2MTYwQSAvKiBXZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkNDNTcxNUMxMTVBREFFRjAwMUNDQUY5IC8qIFdlYlN5c3RlbUludGVyZmFjZS5tbSBp
biBTb3VyY2VzICovLApAQCAtOTY3OSw2ICs5NzQ5LDcgQEAKIAkJCQkxQUFGMDhBMTE5MjY4MUQx
MDBCNjM5MEMgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0MzNjFENzgxOTI4MDNCRDAwMzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE1NzM5QkJF
MUI0MjA0NjYwMEQyNThDMSAvKiBXZWJVc2VyTWVkaWFDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJODNFRTU3NUIxREI3RDYxMTAwQzc0QzUwIC8qIFdlYlZhbGlkYXRpb25NZXNzYWdlQ2xp
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUyRDVBMUI3MUM1NzRBMDIwMERFMzRBMyAvKiBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJM0Y0MThFRjkx
ODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTJENUExQjExQzU3NDk2MjAwREUzNEEzIC8qIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSBpbiBTb3VyY2VzICovLApAQCAtOTY4Niw3
ICs5NzU3LDYgQEAKIAkJCQkyREZDN0RCQzFCQ0NDMTk1MDBDMTU0OEMgLyogV2ViVmlld0ltcGwu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlDMDMzN0REMTEyN0EyOTgwMDA4RkY0RjQgLyogV2ViV2hl
ZWxFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjgxNjBEMDE4NzY0NTU3MDAyMUU3OUQg
LyogV2luZG93U2VydmVyQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAotCQkJCTUzMjE1OTUz
MURCQUU3MTgwMDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkyOUNENTVBQjEyOEUyOTRGMDAxMzNDODUgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVj
dEJhc2UubW0gaW4gU291cmNlcyAqLywKIAkJCQkyOTIzMkRGODE4QjJBOUFFMDBEMDU5NkYgLyog
V0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdElPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTI5
MjMyREY5MThCMkFCM0EwMEQwNTk2RiAvKiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFj
Lm1tIGluIFNvdXJjZXMgKi8sCkBAIC05NzA1LDcgKzk3NzUsNiBAQAogCQkJCUJDQkFBQ0Y1MTQ1
MjMyNEYwMDUzRjgyRiAvKiBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUFFMDBENEMxODJENkVCMDAwMDg3REQ3IC8qIFdLQnJvd3NpbmdDb250ZXh0SGFuZGxl
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyMDRFRUUxMUM4M0VDODAwOEYzMzc1IC8qIFdLQnVu
ZGxlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUzMjE1OTU0MURCQUU3MUQwMDU0QUEzQyAvKiBO
ZXR3b3JrRGF0YVRhc2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM1RUVCOUUxMjc3NjFBQzAw
MzMyMkI4IC8qIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTkzNUVFQkEwMTI3NzYxQUMwMDMzMjJCOCAvKiBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW0u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGQTJENzcxNTIxMkUyNjAwQzFCQTBCIC8qIFdLQnVu
ZGxlRE9NV2luZG93RXh0ZW5zaW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTczMiw2ICs5ODAx
LDcgQEAKIAkJCQlCQ0I5RTI0QzExMjBFMTVDMDBBMTM3RTAgLyogV0tDb250ZXh0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTFBRTUyRjk3MTkyMDI2MzMwMEExRkEzNyAvKiBXS0NvbnRleHRDb25m
aWd1cmF0aW9uUmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxQTU1NUY1MTI4QzZDNDcwMDlB
QkNFQyAvKiBXS0NvbnRleHRNZW51SXRlbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMUQ0MjA0
NzFEQjU1Nzg1MDBCQjZCMEQgLyogV0tDb250ZXh0TWVudUxpc3RlbmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTlGQjVGMzk0MTY5RTZBODAwMDJDMjVCRiAvKiBXS0NvbnRleHRQcml2YXRlTWFj
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzMwOTM0NUExMzE1Qjk5ODAwOTdBN0JDIC8qIFdLQ29v
a2llTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTJGNThGOTEyQTg4QTU0MDA2Mjk1
MzAgLyogV0tDcmVkZW50aWFsLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTc2NCwxNCArOTgzNCwx
MiBAQAogCQkJCUUxQUVBMjMwMTQ2ODdCREIwMDgwNDU2OSAvKiBXS0Z1bGxLZXlib2FyZEFjY2Vz
c1dhdGNoZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQlDRENBODVDODEzMkFCQTRFMDBFOTYxREYg
LyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJD
NTRDQzEzMTJENjc0RUUwMDVDNjdCMCAvKiBXS0dlb2xvY2F0aW9uTWFuYWdlci5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlBMUVBMDIzRjFEQUMzMURCMDA5NjAyMUYgLyogV2ViQ29udGV4dE1lbnVM
aXN0ZW5lclByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMDZGNDRGMTJEQkRGM0YwMDJE
NzhERSAvKiBXS0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkMwRTYxOTkxMkQ2Q0QxMjAwMTJBNzJBIC8qIFdLR2VvbG9jYXRpb25Qb3NpdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkNCNEU1MDE4QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9s
b2NhdGlvblByb3ZpZGVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDQjRFNTExOEJCRTA0
NDAwMEZDRkM5IC8qIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPU09iakNTZWN1cml0eU9yaWdpbi5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTBGMTc0QUE3MTQyQUFDNjEwMDM5MjUwRiAvKiBXS0dlb21l
dHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI2MkU3MzEwMTQzMDQ3QTYwMDY5RUMzNSAvKiBX
S0hpdFRlc3RSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJODNFRTU3NUIxREI3RDYxMTAw
Qzc0QzUwIC8qIFdlYlZhbGlkYXRpb25NZXNzYWdlQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxMTBBRTBDMTMzQzE2Q0IwMDcyNzE3QSAvKiBXS0ljb25EYXRhYmFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1MTIzQ0YxQjEzM0QyNjBBMDA1NkY4MDAgLyogV0tJY29uRGF0YWJhc2VD
Ry5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0NGNkFDMjEyQzkxRjM0MDA4RjlDMzUgLyogV0tJ
bWFnZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL2NvbmZp
Zy5oIGIvU291cmNlL1dlYktpdDIvY29uZmlnLmgKaW5kZXggNzBjZjUwYjZmYTRjNDdlZGFlMWY4
NjA4ZTYyNTc2OGIyOWU0YmQ2My4uY2E1ODBjNDllZjc1MDc1OTc3Y2Q1NTM0MjZjOWVhYmEwNTFm
YWIwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvY29uZmlnLmgKKysrIGIvU291cmNlL1dl
YktpdDIvY29uZmlnLmgKQEAgLTExMCw2ICsxMTAsMTIgQEAKICNlbmRpZgogI2VuZGlmCiAKKyNp
Zm5kZWYgRU5BQkxFX05FVFdPUktfQ0FQVFVSRQorI2lmIFVTRShORVRXT1JLX1NFU1NJT04pICYm
IFBMQVRGT1JNKENPQ09BKQorI2RlZmluZSBFTkFCTEVfTkVUV09SS19DQVBUVVJFIDEKKyNlbmRp
ZgorI2VuZGlmCisKICNpZm5kZWYgRU5BQkxFX05FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVW
QUxJREFUSU9OCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpICYmIChQTEFURk9STShDT0NPQSkg
fHwgUExBVEZPUk0oR1RLKSkKICNkZWZpbmUgRU5BQkxFX05FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJ
VkVfUkVWQUxJREFUSU9OIDEK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295800</attachid>
            <date>2016-11-30 17:40:21 -0800</date>
            <delta_ts>2016-12-07 13:23:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164527-20161130173953.patch</filename>
            <type>text/plain</type>
            <size>527724</size>
            <attacher name="Keith Rollin">krollin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA5MDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGMxYTU2Y2NhMWMyYTYx
ZTMwMWQyNmExZjUwOTQzYjgwMmYxNTUyNy4uZjY1ZjQ3MGZmOWNkMTIxMjNlMzgzNWUyZmIyMTkw
ZTkwZmNhNzlhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE2LTExLTI5ICBLZWl0
aCBSb2xsaW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KKworICAgICAgICBOZXR3b3JrIGV2ZW50IHJl
Y29yZC9yZXBsYXkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NDUyNworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjkxNjgxNTc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhwb3J0IHBhcnNlVVJMRW5j
b2RlZEZvcm0uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC0tIG5vIGZ1bmN0aW9uYWxpdHkgYWRk
ZWQsIGNoYW5nZWQsIG9yIHJlbW92ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9VUkxQYXJzZXIu
aDoKKwogMjAxNi0xMS0yOCAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgQmxhY2tsaXN0IE5ldGZsaXggZm9yIFRvdWNoQmFyIHN1cHBvcnQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBk
YjljMDUxMjgwYjE3NDQxMjVjZGRkZDY3MjdhYzdiMzgzMmJhMDNiLi5kNjA3MTFhNzQ0YjZiYTIz
YTY5NDk0OTBmNDIxZjNhMjhiNWQ0OGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTU4IEBACisy
MDE2LTExLTI5ICBLZWl0aCBSb2xsaW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KKworICAgICAgICBO
ZXR3b3JrIGV2ZW50IHJlY29yZC9yZXBsYXkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NDUyNworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjkxNjgx
NTc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IFdlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS8qIGZvciByZWNvcmRpbmcgdGhlIG5ldHdv
cmsgZXZlbnRzCisgICAgICAgIHRoYXQgb2NjdXIgd2hlbiBsb2FkaW5nIGEgcGFnZSBhbmQgZm9y
IHJlcGxheWluZyB0aGVtIGxhdGVyLiBVcGRhdGUKKyAgICAgICAgTmV0d29ya0xvYWQgdG8gaW52
b2tlIGNhcHR1cmUgZmFjaWxpdGllcy4gQWRkIHByZWZlcmVuY2VzIGZvciBlbmFibGluZworICAg
ICAgICByZWNvcmQgb3IgcmVwbGF5LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrTG9hZDo6TmV0d29ya0xvYWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6
aW5pdGlhbGl6ZUZvclJlY29yZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkOjppbml0
aWFsaXplRm9yUmVwbGF5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6OmluaXRpYWxp
emUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6c2V0RGVmZXJzTG9hZGluZyk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkOjpjb250aW51ZVdpbGxTZW5kUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkOjpzaGFyZWRXaWxsU2VuZFJlZGlyZWN0ZWRSZXF1
ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6Om5vdGlmeURpZFJlY2VpdmVSZXNw
b25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkOjpkaWRSZWNlaXZlRGF0YSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkOjpkaWRDb21wbGV0ZVdpdGhFcnJvcik6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
Ojppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6dGVybWluYXRlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6Y29weUhlYWRlcnMpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FwdHVyZTo6S2V5VmFsdWVQYWlyOjpLZXlWYWx1ZVBhaXIpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVzb3VyY2VSZXF1ZXN0OjpSZXNvdXJjZVJlcXVlc3QpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVzb3VyY2VSZXF1ZXN0OjpvcGVyYXRv
ciBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fw
dHVyZTo6UmVzb3VyY2VSZXNwb25zZTo6UmVzb3VyY2VSZXNwb25zZSk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZXNvdXJjZVJlc3BvbnNlOjpvcGVyYXRvciBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlc291
cmNlRXJyb3I6OlJlc291cmNlRXJyb3IpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVy
ZTo6UmVzb3VyY2VFcnJvcjo6b3BlcmF0b3IgV2ViQ29yZTo6UmVzb3VyY2VFcnJvcik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpKU09OQ29kZXI6OmVuY29kZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpKU09OQ29kZXI6OmRlY29kZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpKU09OQ29kZXI8U3RyaW5nPjo6ZW5jb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkpTT05Db2RlcjxTdHJpbmc+OjpkZWNvZGUpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6SlNPTkNvZGVyPENhcHR1cmVUaW1lVHlw
ZT46OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpKU09OQ29kZXI8
Q2FwdHVyZVRpbWVUeXBlPjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1
cmU6OkpTT05Db2RlcjxLZXlWYWx1ZVBhaXI+OjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FwdHVyZTo6SlNPTkNvZGVyPEtleVZhbHVlUGFpcj46OmRlY29kZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpKU09OQ29kZXI8VmVjdG9yPFQ+Pjo6ZW5jb2RlKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkpTT05Db2RlcjxWZWN0b3I8VD4+Ojpk
ZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6SlNPTkNvZGVyPFJlc291
cmNlUmVxdWVzdD46OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpK
U09OQ29kZXI8UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhcHR1cmU6OkpTT05Db2RlcjxSZXNvdXJjZVJlc3BvbnNlPjo6ZW5jb2RlKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkpTT05Db2RlcjxSZXNvdXJjZVJlc3BvbnNlPjo6
ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkpTT05Db2RlcjxSZXNv
dXJjZUVycm9yPjo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkpT
T05Db2RlcjxSZXNvdXJjZUVycm9yPjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0NhcHR1cmU6OkpTT05Db2RlcjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+OjplbmNvZGUpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6SlNPTkNvZGVyPFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcj46OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpKU09OQ29k
ZXI8UmVxdWVzdFNlbnRFdmVudD46OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YXB0dXJlOjpKU09OQ29kZXI8UmVxdWVzdFNlbnRFdmVudD46OmRlY29kZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpKU09OQ29kZXI8UmVzcG9uc2VSZWNlaXZlZEV2ZW50Pjo6
ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkpTT05Db2RlcjxSZXNw
b25zZVJlY2VpdmVkRXZlbnQ+OjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2Fw
dHVyZTo6SlNPTkNvZGVyPFJlZGlyZWN0UmVjZWl2ZWRFdmVudD46OmVuY29kZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpKU09OQ29kZXI8UmVkaXJlY3RSZWNlaXZlZEV2ZW50
Pjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkpTT05Db2RlcjxS
ZWRpcmVjdFNlbnRFdmVudD46OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0
dXJlOjpKU09OQ29kZXI8UmVkaXJlY3RTZW50RXZlbnQ+OjpkZWNvZGUpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FwdHVyZTo6SlNPTkNvZGVyPERhdGFSZWNlaXZlZEV2ZW50Pjo6ZW5jb2Rl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkpTT05Db2RlcjxEYXRhUmVjZWl2
ZWRFdmVudD46OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpKU09O
Q29kZXI8RmluaXNoZWRFdmVudD46OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YXB0dXJlOjpKU09OQ29kZXI8RmluaXNoZWRFdmVudD46OmRlY29kZSk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYXB0dXJlOjpldmVudFRvU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhcHR1cmU6OnN0cmluZ1RvRXZlbnQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nh
cHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhcHR1cmU6OlRpbWVkRXZlbnQ6OlRpbWVkRXZlbnQpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVMb2dnaW5nLmg6IEFkZGVkLgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpzaW5nbGV0b24pOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6aW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjp0ZXJtaW5hdGUpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6ZmluZE1hdGNoKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OmZpbmRFeGFjdE1hdGNoKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OmZpbmRCZXN0RnV6enlNYXRj
aCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpmdXp6eU1hdGNo
VVJMcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpsb2FkUmVz
b3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OnJlcG9y
dExvYWRQYXRoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OnJl
cG9ydFJlY29yZFBhdGgpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdl
cjo6cmVwb3J0UmVwbGF5UGF0aCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpN
YW5hZ2VyOjpyZXF1ZXN0VG9QYXRoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6
Ok1hbmFnZXI6OnN0cmluZ1RvSGFzaCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJl
OjpNYW5hZ2VyOjpoYXNoVG9QYXRoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6
Ok1hbmFnZXI6OmxvZ1JlY29yZGVkUmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FwdHVyZTo6TWFuYWdlcjo6bG9nTG9hZGVkUmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6bG9nUGxheWVkQmFja1Jlc291cmNlKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OmVuc3VyZUZpbGVIYW5kbGUpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6b3BlbkNhY2hlRmlsZSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpyZWFkRmlsZSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpnZXRMaW5lKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OmdldFdvcmQpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6cHJpbnRUb0ZpbGUpOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6aXNSZWNvcmRpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6aXNSZXBsYXlpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6bW9kZSk6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZWNvcmRlcjo6cmVjb3JkUmVxdWVz
dFNlbnQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVjb3JkZXI6OnJlY29y
ZFJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVj
b3JkZXI6OnJlY29yZFJlZGlyZWN0UmVjZWl2ZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FwdHVyZTo6UmVjb3JkZXI6OnJlY29yZFJlZGlyZWN0U2VudCk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYXB0dXJlOjpSZWNvcmRlcjo6cmVjb3JkRGF0YVJlY2VpdmVkKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlY29yZGVyOjpyZWNvcmRGaW5pc2gpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVjb3JkZXI6OndyaXRlRXZlbnRzKToKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVjb3JkZXIuaDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZWNvcmRlcjo6cmVjb3JkRXZl
bnQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXBs
YXllci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVwbGF5
ZXI6OnJlcGxheVJlc291cmNlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05l
dHdvcmtDYXB0dXJlUmVwbGF5ZXIuaDogQWRkZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Y2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZXNvdXJjZTo6UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FwdHVyZTo6UmVzb3VyY2U6OnVybCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYXB0dXJlOjpSZXNvdXJjZTo6YmFzZVVSTCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YXB0dXJlOjpSZXNvdXJjZTo6cXVlcnlQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhcHR1cmU6OlJlc291cmNlOjpldmVudFN0cmVhbSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYXB0dXJlOjpSZXNvdXJjZTo6RXZlbnRTdHJlYW06OkV2ZW50U3RyZWFtKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlc291cmNlOjpFdmVudFN0cmVhbTo6bmV4dEV2
ZW50KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVz
b3VyY2UuaDogQWRkZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3Jr
Q2FwdHVyZVR5cGVzLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6
VHlwZUhvbGRlcjo6Zm9yRWFjaFR5cGVJbXBsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
cHR1cmU6OlR5cGVIb2xkZXI6OmZvckVhY2hUeXBlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYXB0dXJlL05ldHdvcmtEYXRhVGFza1JlcGxheS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5OjpOZXR3b3JrRGF0YVRh
c2tSZXBsYXkpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFU
YXNrUmVwbGF5Ojp+TmV0d29ya0RhdGFUYXNrUmVwbGF5KToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxheTo6cmVzdW1lKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxheTo6c3VzcGVuZCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmNh
bmNlbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpOZXR3b3JrRGF0YVRhc2tS
ZXBsYXk6OmNvbXBsZXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5ldHdv
cmtEYXRhVGFza1JlcGxheTo6aW52YWxpZGF0ZUFuZENhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYXB0dXJlOjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmVucXVldWVFdmVudEhhbmRs
ZXIpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVw
bGF5OjpyZXBsYXlSZXF1ZXN0U2VudCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJl
OjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnJlcGxheVJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5OjpyZXBsYXlS
ZWRpcmVjdFJlY2VpdmVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5ldHdv
cmtEYXRhVGFza1JlcGxheTo6cmVwbGF5UmVkaXJlY3RTZW50KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxheTo6cmVwbGF5RGF0YVJlY2VpdmVk
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxh
eTo6cmVwbGF5RmluaXNoZWQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0
d29ya0RhdGFUYXNrUmVwbGF5OjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5OjpkaWRGaW5pc2gpOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0RhdGFUYXNrUmVwbGF5Lmg6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVw
bGF5OjpjcmVhdGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvanNvbi5ocHA6
IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0
d29ya1Byb2Nlc3MpOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBjb25maWcuaDoKKwogMjAxNi0xMS0yOCAgUnlhbiBIYWRkYWQgIDxyeWFu
aGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjA5
MDA4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAppbmRleCA4NjRlYWNkZjc1MWYxM2M0
MDE2NTk4MmZiYWViZjcwM2FiMzk4YWQ1Li43OGUwZTE5YzJiM2JjMmZhNmZlMmVjMzIxYTQ1MmM3
NzEyMjljMTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaApAQCAtNDcsNyArNDcs
NyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0RW5hYmxlZChi
b29sKTsKICAgICAKICAgICB0eXBlZGVmIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+
PiBVUkxFbmNvZGVkRm9ybTsKLSAgICBzdGF0aWMgVVJMRW5jb2RlZEZvcm0gcGFyc2VVUkxFbmNv
ZGVkRm9ybShTdHJpbmdWaWV3KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgVVJMRW5jb2Rl
ZEZvcm0gcGFyc2VVUkxFbmNvZGVkRm9ybShTdHJpbmdWaWV3KTsKICAgICBzdGF0aWMgU3RyaW5n
IHNlcmlhbGl6ZShjb25zdCBVUkxFbmNvZGVkRm9ybSYpOwogCiAgICAgc3RhdGljIGNvbnN0IFVJ
RE5BJiBpbnRlcm5hdGlvbmFsRG9tYWluTmFtZVRyYW5zY29kZXIoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50
eHQKaW5kZXggODcyNjY4ZTBiMWVhZDI0ZmMxMjBmYTA5NzJjY2RjNmQzMmRiMTI2OS4uNzI2NDA5
MmQ1OGM4YzUxNzkxYjUyYTU3NTBjMWM3OGY0OGUwZGRjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQK
QEAgLTIwNCw2ICsyMDQsMTMgQEAgc2V0KE5ldHdvcmtQcm9jZXNzX0NPTU1PTl9TT1VSQ0VTCiAg
ICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3Bw
CiAgICAgTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHAKICAg
ICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVTdG9yYWdlLmNwcAorCisgICAgTmV0
d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcAorICAgIE5ldHdvcmtQ
cm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmNwcAorICAgIE5ldHdvcmtQcm9j
ZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZWNvcmRlci5jcHAKKyAgICBOZXR3b3JrUHJvY2Vz
cy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuY3BwCisgICAgTmV0d29ya1Byb2Nlc3Mv
Y2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNwcAorICAgIE5ldHdvcmtQcm9jZXNzL2Nh
cHR1cmUvTmV0d29ya0RhdGFUYXNrUmVwbGF5LmNwcAogKQogCiBzZXQoV2ViS2l0Ml9TT1VSQ0VT
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKaW5kZXgg
NTE3Zjg0NWFhYmU1MjNmMmVmYTk2MTg0ZWVmNzI1M2FlMmNhNGQ5Zi4uMWMzZTI4MTNkYzY4MDNh
NjNjMzg4Yzk3MzFiNDBmNDcwYTk0N2JlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtMb2FkLmNwcApAQCAtNDMsNiArNDMsMTAgQEAKICNpbmNsdWRlICJOZXR3
b3JrRGF0YVRhc2tDb2NvYS5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJF
KQorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlTWFuYWdlci5oIgorI2VuZGlmCisKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTY3LDYgKzcxLDQ1IEBA
IE5ldHdvcmtMb2FkOjpOZXR3b3JrTG9hZChOZXR3b3JrTG9hZENsaWVudCYgY2xpZW50LCBOZXR3
b3JrTG9hZFBhcmFtZXRlcnMmJiBwYXJhCiAgICAgLCBtX3BhcmFtZXRlcnMoV1RGTW92ZShwYXJh
bWV0ZXJzKSkKICAgICAsIG1fY3VycmVudFJlcXVlc3QobV9wYXJhbWV0ZXJzLnJlcXVlc3QpCiB7
CisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyAgICBzd2l0Y2ggKE5ldHdvcmtDYXB0dXJl
OjpNYW5hZ2VyOjpzaW5nbGV0b24oKS5tb2RlKCkpIHsKKyAgICBjYXNlIE5ldHdvcmtDYXB0dXJl
OjpNYW5hZ2VyOjpSZWNvcmRSZXBsYXlNb2RlOjpSZWNvcmQ6CisgICAgICAgIGluaXRpYWxpemVG
b3JSZWNvcmQobmV0d29ya1Nlc3Npb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5ldHdv
cmtDYXB0dXJlOjpNYW5hZ2VyOjpSZWNvcmRSZXBsYXlNb2RlOjpSZXBsYXk6CisgICAgICAgIGlu
aXRpYWxpemVGb3JSZXBsYXkobmV0d29ya1Nlc3Npb24pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIE5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpSZWNvcmRSZXBsYXlNb2RlOjpEaXNhYmxlZDoK
KyAgICAgICAgaW5pdGlhbGl6ZShuZXR3b3JrU2Vzc2lvbik7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyNlbHNlCisgICAgaW5pdGlhbGl6ZShuZXR3b3JrU2Vzc2lvbik7CisjZW5kaWYKK30KKwor
I2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCit2b2lkIE5ldHdvcmtMb2FkOjppbml0aWFsaXpl
Rm9yUmVjb3JkKE5ldHdvcmtTZXNzaW9uJiBuZXR3b3JrU2Vzc2lvbikKK3sKKyAgICBtX3JlY29y
ZGVyID0gc3RkOjptYWtlX3VuaXF1ZTxOZXR3b3JrQ2FwdHVyZTo6UmVjb3JkZXI+KCk7CisgICAg
bV90YXNrID0gTmV0d29ya0RhdGFUYXNrOjpjcmVhdGUobmV0d29ya1Nlc3Npb24sICp0aGlzLCBt
X3BhcmFtZXRlcnMpOworICAgIGlmICghbV9wYXJhbWV0ZXJzLmRlZmVyc0xvYWRpbmcpIHsKKyAg
ICAgICAgbV90YXNrLT5yZXN1bWUoKTsKKyAgICAgICAgbV9yZWNvcmRlci0+cmVjb3JkUmVxdWVz
dFNlbnQobV9wYXJhbWV0ZXJzLnJlcXVlc3QpOworICAgIH0KK30KKwordm9pZCBOZXR3b3JrTG9h
ZDo6aW5pdGlhbGl6ZUZvclJlcGxheShOZXR3b3JrU2Vzc2lvbiYgbmV0d29ya1Nlc3Npb24pCit7
CisgICAgbV9yZXBsYXllciA9IHN0ZDo6bWFrZV91bmlxdWU8TmV0d29ya0NhcHR1cmU6OlJlcGxh
eWVyPigpOworICAgIG1fdGFzayA9IG1fcmVwbGF5ZXItPnJlcGxheVJlc291cmNlKG5ldHdvcmtT
ZXNzaW9uLCAqdGhpcywgbV9wYXJhbWV0ZXJzKTsKKyAgICBpZiAoIW1fcGFyYW1ldGVycy5kZWZl
cnNMb2FkaW5nKQorICAgICAgICBtX3Rhc2stPnJlc3VtZSgpOworfQorI2VuZGlmCisKK3ZvaWQg
TmV0d29ya0xvYWQ6OmluaXRpYWxpemUoTmV0d29ya1Nlc3Npb24mIG5ldHdvcmtTZXNzaW9uKQor
ewogICAgIG1fdGFzayA9IE5ldHdvcmtEYXRhVGFzazo6Y3JlYXRlKG5ldHdvcmtTZXNzaW9uLCAq
dGhpcywgbV9wYXJhbWV0ZXJzKTsKICAgICBpZiAoIW1fcGFyYW1ldGVycy5kZWZlcnNMb2FkaW5n
KQogICAgICAgICBtX3Rhc2stPnJlc3VtZSgpOwpAQCAtMTEzLDggKzE1NiwxMyBAQCB2b2lkIE5l
dHdvcmtMb2FkOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQogICAgIGlmIChtX3Rhc2sp
IHsKICAgICAgICAgaWYgKGRlZmVycykKICAgICAgICAgICAgIG1fdGFzay0+c3VzcGVuZCgpOwot
ICAgICAgICBlbHNlCisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbV90YXNrLT5yZXN1bWUo
KTsKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorICAgICAgICAgICAgaWYgKG1fcmVjb3Jk
ZXIpCisgICAgICAgICAgICAgICAgbV9yZWNvcmRlci0+cmVjb3JkUmVxdWVzdFNlbnQobV9wYXJh
bWV0ZXJzLnJlcXVlc3QpOworI2VuZGlmCisgICAgICAgIH0KICAgICB9CiAjZWxzZQogICAgIGlm
IChtX2hhbmRsZSkKQEAgLTE0Miw2ICsxOTAsMTEgQEAgdm9pZCBOZXR3b3JrTG9hZDo6Y29udGlu
dWVXaWxsU2VuZFJlcXVlc3QoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgbmV3UmVxdWVzdCkK
ICAgICBtX2N1cnJlbnRSZXF1ZXN0LnVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRQcm9w
ZXJ0aWVzKG5ld1JlcXVlc3QpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJF
KQorICAgIGlmIChtX3JlY29yZGVyKQorICAgICAgICBtX3JlY29yZGVyLT5yZWNvcmRSZWRpcmVj
dFNlbnQobmV3UmVxdWVzdCk7CisjZW5kaWYKKwogI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCiAg
ICAgYXV0byByZWRpcmVjdENvbXBsZXRpb25IYW5kbGVyID0gc3RkOjpleGNoYW5nZShtX3JlZGly
ZWN0Q29tcGxldGlvbkhhbmRsZXIsIG51bGxwdHIpOwogICAgIEFTU0VSVChyZWRpcmVjdENvbXBs
ZXRpb25IYW5kbGVyKTsKQEAgLTE5NCw2ICsyNDcsMTEgQEAgdm9pZCBOZXR3b3JrTG9hZDo6c2hh
cmVkV2lsbFNlbmRSZWRpcmVjdGVkUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBS
ZXMKICAgICBBU1NFUlQoIXJlZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCkpOwogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CiAKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorICAgIGlm
IChtX3JlY29yZGVyKQorICAgICAgICBtX3JlY29yZGVyLT5yZWNvcmRSZWRpcmVjdFJlY2VpdmVk
KHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOworI2VuZGlmCisKICAgICBhdXRvIG9sZFJlcXVl
c3QgPSBXVEZNb3ZlKG1fY3VycmVudFJlcXVlc3QpOwogICAgIG1fY3VycmVudFJlcXVlc3QgPSBy
ZXF1ZXN0OwogICAgIG1fY2xpZW50LmdldCgpLndpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3QoV1RG
TW92ZShvbGRSZXF1ZXN0KSwgV1RGTW92ZShyZXF1ZXN0KSwgV1RGTW92ZShyZWRpcmVjdFJlc3Bv
bnNlKSk7CkBAIC0zMjQsNiArMzgyLDExIEBAIHZvaWQgTmV0d29ya0xvYWQ6Om5vdGlmeURpZFJl
Y2VpdmVSZXNwb25zZShSZXNvdXJjZVJlc3BvbnNlJiYgcmVzcG9uc2UsIFJlc3BvbnNlCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAorI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUp
CisgICAgaWYgKG1fcmVjb3JkZXIpCisgICAgICAgIG1fcmVjb3JkZXItPnJlY29yZFJlc3BvbnNl
UmVjZWl2ZWQocmVzcG9uc2UpOworI2VuZGlmCisKICAgICBpZiAoc2hhcmVkRGlkUmVjZWl2ZVJl
c3BvbnNlKFdURk1vdmUocmVzcG9uc2UpKSA9PSBOZXR3b3JrTG9hZENsaWVudDo6U2hvdWxkQ29u
dGludWVEaWRSZWNlaXZlUmVzcG9uc2U6Ok5vKSB7CiAgICAgICAgIG1fcmVzcG9uc2VDb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpOwogICAgICAgICByZXR1cm47
CkBAIC0zMzUsNiArMzk4LDExIEBAIHZvaWQgTmV0d29ya0xvYWQ6OmRpZFJlY2VpdmVEYXRhKFJl
ZjxTaGFyZWRCdWZmZXI+JiYgYnVmZmVyKQogewogICAgIEFTU0VSVCghbV90aHJvdHRsZSk7CiAK
KyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorICAgIGlmIChtX3JlY29yZGVyKQorICAgICAg
ICBtX3JlY29yZGVyLT5yZWNvcmREYXRhUmVjZWl2ZWQoYnVmZmVyLmdldCgpKTsKKyNlbmRpZgor
CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHRoZSBlbmNvZGVkIGRhdGEgbGVuZ3RoLCBu
b3QgdGhlIGRlY29kZWQgZGF0YSBsZW5ndGguCiAgICAgYXV0byBzaXplID0gYnVmZmVyLT5zaXpl
KCk7CiAgICAgbV9jbGllbnQuZ2V0KCkuZGlkUmVjZWl2ZUJ1ZmZlcihXVEZNb3ZlKGJ1ZmZlciks
IHNpemUpOwpAQCAtMzQ0LDYgKzQxMiwxMSBAQCB2b2lkIE5ldHdvcmtMb2FkOjpkaWRDb21wbGV0
ZVdpdGhFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKICAgICBBU1NFUlQoIW1f
dGhyb3R0bGUpOwogCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyAgICBpZiAobV9yZWNv
cmRlcikKKyAgICAgICAgbV9yZWNvcmRlci0+cmVjb3JkRmluaXNoKGVycm9yKTsKKyNlbmRpZgor
CiAgICAgaWYgKGVycm9yLmlzTnVsbCgpKQogICAgICAgICBtX2NsaWVudC5nZXQoKS5kaWRGaW5p
c2hMb2FkaW5nKFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOwogICAgIGVsc2UK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5oCmluZGV4IDc2NmJk
NTBkY2M4OTkzNDEzNTYyMGZiYmZkNWUxZTlhZWQwNmYzMGEuLmIyNTJhMGMwMWQxNmI3YzU2YWU4
NTFmYTU0ODAxNDY4NDAyNWE5YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtMb2FkLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0xvYWQuaApAQCAtMzgsNiArMzgsMTEgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0F1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlLmg+CiAjZW5kaWYKIAorI2lmIEVOQUJMRShORVRXT1JLX0NBUFRV
UkUpCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVSZWNvcmRlci5oIgorI2luY2x1ZGUgIk5ldHdv
cmtDYXB0dXJlUmVwbGF5ZXIuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xh
c3MgTmV0d29ya0xvYWQgZmluYWwgOgpAQCAtOTUsNiArMTAwLDE0IEBAIHB1YmxpYzoKICNlbmRp
ZgogCiBwcml2YXRlOgorI2lmIFVTRShORVRXT1JLX1NFU1NJT04pCisjaWYgRU5BQkxFKE5FVFdP
UktfQ0FQVFVSRSkKKyAgICB2b2lkIGluaXRpYWxpemVGb3JSZWNvcmQoTmV0d29ya1Nlc3Npb24m
KTsKKyAgICB2b2lkIGluaXRpYWxpemVGb3JSZXBsYXkoTmV0d29ya1Nlc3Npb24mKTsKKyNlbmRp
ZgorICAgIHZvaWQgaW5pdGlhbGl6ZShOZXR3b3JrU2Vzc2lvbiYpOworI2VuZGlmCisKICAgICBO
ZXR3b3JrTG9hZENsaWVudDo6U2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2Ugc2hhcmVk
RGlkUmVjZWl2ZVJlc3BvbnNlKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJik7CiAgICAgdm9p
ZCBzaGFyZWRXaWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0KFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYmLCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYpOwogCkBAIC0xNTEsNiArMTY0LDExIEBA
IHByaXZhdGU6CiAjZW5kaWYKIAogICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBtX2N1cnJl
bnRSZXF1ZXN0OyAvLyBVcGRhdGVkIG9uIHJlZGlyZWN0cy4KKworI2lmIEVOQUJMRShORVRXT1JL
X0NBUFRVUkUpCisgICAgc3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtDYXB0dXJlOjpSZWNvcmRlcj4g
bV9yZWNvcmRlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhcHR1cmU6OlJlcGxheWVy
PiBtX3JlcGxheWVyOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCA2
MWY5ODc2NjA5YjZkNzBhOGY2ZTFjMDc5NTdmYjg1OTYzODIxODgyLi5mZmFmN2RiODU4NzViY2U2
NjBkODY2MzU0MmE5M2RkNWFjYzU3NDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC03NCw2ICs3NCwxMCBAQAogI2luY2x1ZGUg
Ik5ldHdvcmtDYWNoZUNvZGVycy5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBU
VVJFKQorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlTWFuYWdlci5oIgorI2VuZGlmCisKICNpZiBQ
TEFURk9STShDT0NPQSkKICNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbkNvY29hLmgiCiAjZW5kaWYK
QEAgLTIyMiw2ICsyMjYsMTIgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdv
cmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKICAgICAgICAgbWVt
b3J5UHJlc3N1cmVIYW5kbGVyLmluc3RhbGwoKTsKICAgICB9CiAKKyNpZiBFTkFCTEUoTkVUV09S
S19DQVBUVVJFKQorICAgIE5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpzaW5nbGV0b24oKS5pbml0
aWFsaXplKAorICAgICAgICBwYXJhbWV0ZXJzLnJlY29yZFJlcGxheU1vZGUsCisgICAgICAgIHBh
cmFtZXRlcnMucmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbik7CisjZW5kaWYKKwogICAgIG1fZGlz
a0NhY2hlSXNEaXNhYmxlZEZvclRlc3RpbmcgPSBwYXJhbWV0ZXJzLnNob3VsZFVzZVRlc3RpbmdO
ZXR3b3JrU2Vzc2lvbjsKIAogICAgIG1fZGlza0NhY2hlU2l6ZU92ZXJyaWRlID0gcGFyYW1ldGVy
cy5kaXNrQ2FjaGVTaXplT3ZlcnJpZGU7CkBAIC01OTYsNiArNjA2LDEwIEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKHVpbnQ2NF90IHdlYlBhZ2VJ
RCwgY29uc3QgU3RyCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnRlcm1pbmF0ZSgpCiB7CisjaWYg
RU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyAgICBOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6c2lu
Z2xldG9uKCkudGVybWluYXRlKCk7CisjZW5kaWYKKwogICAgIHBsYXRmb3JtVGVybWluYXRlKCk7
CiAgICAgQ2hpbGRQcm9jZXNzOjp0ZXJtaW5hdGUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmNwcAppbmRleCBiZDdhYjU0OGI5YzQ1NzRkMjQxZjQ3N2Q5Yzg5NzdjMmE0YzJk
N2MxLi4wOTlhM2E0MzQ3YmEyMzg1MGIxYzhmOTY5NmJiMzgxMjY4MDdiMDJhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBAIC05Myw2ICs5MywxMCBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVy
KSBjb25zdAogI2lmIE9TKExJTlVYKQogICAgIGVuY29kZXIgPDwgbWVtb3J5UHJlc3N1cmVNb25p
dG9ySGFuZGxlOwogI2VuZGlmCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyAgICBlbmNv
ZGVyIDw8IHJlY29yZFJlcGxheU1vZGU7CisgICAgZW5jb2RlciA8PCByZWNvcmRSZXBsYXlDYWNo
ZUxvY2F0aW9uOworI2VuZGlmCiB9CiAKIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzJiByZXN1bHQpCkBAIC0xODgsNiArMTkyLDEzIEBAIGJvb2wgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIE5l
dHdvcmtQcm9jCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCisjaWYgRU5BQkxFKE5F
VFdPUktfQ0FQVFVSRSkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5yZWNvcmRSZXBs
YXlNb2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzdWx0LnJlY29yZFJlcGxheUNhY2hlTG9jYXRpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisjZW5kaWYKKwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuaAppbmRleCBmNDU2OWM5NDY5YTU3NzJlNjBiMWM5YmZmNTYwODVkM2FjYjQzYzNkLi4z
MzBlM2JhNDA5ZDhkMTlmYjI1MWEyZjJjNDY5N2Y0YmIzN2MyYzk3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgKQEAgLTEwNiw2ICsxMDYsMTEgQEAgc3RydWN0IE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICNpZiBPUyhMSU5VWCkKICAgICBJUEM6OkF0dGFjaG1l
bnQgbWVtb3J5UHJlc3N1cmVNb25pdG9ySGFuZGxlOwogI2VuZGlmCisKKyNpZiBFTkFCTEUoTkVU
V09SS19DQVBUVVJFKQorICAgIFN0cmluZyByZWNvcmRSZXBsYXlNb2RlOworICAgIFN0cmluZyBy
ZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUv
TmV0d29ya0NhcHR1cmVFdmVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhYjdjMjBhZmNhYmJj
NjE3NjM3MmI3NDQ0MDdkN2Q0ZDlmZDE2YmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuY3BwCkBAIC0w
LDAgKzEsNTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ik5ldHdvcmtDYXB0dXJlRXZlbnQuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisK
KworI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlTG9nZ2luZy5oIgorI2luY2x1ZGUgImpzb24uaHBw
IgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
UmVzb3VyY2VSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9VUkxQYXJzZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNl
NjQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgewor
Citjb25zdCBjaGFyIFJlcXVlc3RTZW50RXZlbnQ6OnR5cGVOYW1lW10gPSAiUmVxdWVzdFNlbnRF
dmVudCI7Citjb25zdCBjaGFyIFJlc3BvbnNlUmVjZWl2ZWRFdmVudDo6dHlwZU5hbWVbXSA9ICJS
ZXNwb25zZVJlY2VpdmVkRXZlbnQiOworY29uc3QgY2hhciBSZWRpcmVjdFJlY2VpdmVkRXZlbnQ6
OnR5cGVOYW1lW10gPSAiUmVkaXJlY3RSZWNlaXZlZEV2ZW50IjsKK2NvbnN0IGNoYXIgUmVkaXJl
Y3RTZW50RXZlbnQ6OnR5cGVOYW1lW10gPSAiUmVkaXJlY3RTZW50RXZlbnQiOworY29uc3QgY2hh
ciBEYXRhUmVjZWl2ZWRFdmVudDo6dHlwZU5hbWVbXSA9ICJEYXRhUmVjZWl2ZWRFdmVudCI7Citj
b25zdCBjaGFyIEZpbmlzaGVkRXZlbnQ6OnR5cGVOYW1lW10gPSAiRmluaXNoZWRFdmVudCI7CisK
K3N0YXRpYyBIZWFkZXJzIGNvcHlIZWFkZXJzKGNvbnN0IFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAm
IGh0dHBIZWFkZXJzKQoreworICAgIEhlYWRlcnMgaGVhZGVyczsKKyAgICBmb3IgKGNvbnN0IGF1
dG8mIGhlYWRlciA6IGh0dHBIZWFkZXJzKQorICAgICAgICBoZWFkZXJzLmFwcGVuZChLZXlWYWx1
ZVBhaXIoaGVhZGVyLmtleSwgaGVhZGVyLnZhbHVlKSk7CisgICAgcmV0dXJuIGhlYWRlcnM7Cit9
CisKKy8vIC0tLS0tLS0tLS0KKworS2V5VmFsdWVQYWlyOjpLZXlWYWx1ZVBhaXIoU3RyaW5nJiYg
a2V5LCBTdHJpbmcmJiB2YWx1ZSkKKyAgICA6IGtleShXVEZNb3ZlKGtleSkpCisgICAgLCB2YWx1
ZShXVEZNb3ZlKHZhbHVlKSkKK3sKK30KKworS2V5VmFsdWVQYWlyOjpLZXlWYWx1ZVBhaXIoY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgOiBrZXkoa2V5KQorICAg
ICwgdmFsdWUodmFsdWUpCit7Cit9CisKKy8vIC0tLS0tLS0tLS0KKworUmVzb3VyY2VSZXF1ZXN0
OjpSZXNvdXJjZVJlcXVlc3QoU3RyaW5nJiYgdXJsLCBTdHJpbmcmJiByZWZlcnJlciwgaW50IHBv
bGljeSwgU3RyaW5nJiYgbWV0aG9kLCBIZWFkZXJzJiYgaGVhZGVycykKKyAgICA6IHVybChXVEZN
b3ZlKHVybCkpCisgICAgLCByZWZlcnJlcihXVEZNb3ZlKHJlZmVycmVyKSkKKyAgICAsIHBvbGlj
eShXVEZNb3ZlKHBvbGljeSkpCisgICAgLCBtZXRob2QoV1RGTW92ZShtZXRob2QpKQorICAgICwg
aGVhZGVycyhXVEZNb3ZlKGhlYWRlcnMpKQoreworfQorCitSZXNvdXJjZVJlcXVlc3Q6OlJlc291
cmNlUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCisgICAg
OiB1cmwocmVxdWVzdC51cmwoKS5zdHJpbmcoKSkKKyAgICAsIHJlZmVycmVyKHJlcXVlc3QuaHR0
cFJlZmVycmVyKCkpCisgICAgLCBwb2xpY3koc3RhdGljX2Nhc3Q8aW50PihyZXF1ZXN0LmNhY2hl
UG9saWN5KCkpKQorICAgICwgbWV0aG9kKHJlcXVlc3QuaHR0cE1ldGhvZCgpKQorICAgICwgaGVh
ZGVycyhjb3B5SGVhZGVycyhyZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkpCit7Cit9CisKK1Jl
c291cmNlUmVxdWVzdDo6b3BlcmF0b3IgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0KCkgY29uc3QK
K3sKKyAgICBXZWJDb3JlOjpVUkxQYXJzZXIgcGFyc2VyKHVybCk7CisgICAgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0IHJlcXVlc3QocGFyc2VyLnJlc3VsdCgpLCByZWZlcnJlciwgc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3k+KHBvbGljeSkpOworICAgIHJl
cXVlc3Quc2V0SFRUUE1ldGhvZChtZXRob2QpOworCisgICAgZm9yIChjb25zdCBhdXRvJiBoZWFk
ZXIgOiBoZWFkZXJzKQorICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChoZWFkZXIu
a2V5LCBoZWFkZXIudmFsdWUpOworCisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKKy8vIC0tLS0t
LS0tLS0KKworUmVzb3VyY2VSZXNwb25zZTo6UmVzb3VyY2VSZXNwb25zZShTdHJpbmcmJiB1cmws
IFN0cmluZyYmIG1pbWVUeXBlLCBsb25nIGxvbmcgZXhwZWN0ZWRMZW5ndGgsIFN0cmluZyYmIHRl
eHRFbmNvZGluZ05hbWUsIFN0cmluZyYmIHZlcnNpb24sIGludCBzdGF0dXMsIFN0cmluZyYmIHJl
YXNvbiwgSGVhZGVycyYmIGhlYWRlcnMpCisgICAgOiB1cmwoV1RGTW92ZSh1cmwpKQorICAgICwg
bWltZVR5cGUoV1RGTW92ZShtaW1lVHlwZSkpCisgICAgLCBleHBlY3RlZExlbmd0aChXVEZNb3Zl
KGV4cGVjdGVkTGVuZ3RoKSkKKyAgICAsIHRleHRFbmNvZGluZ05hbWUoV1RGTW92ZSh0ZXh0RW5j
b2RpbmdOYW1lKSkKKyAgICAsIHN0YXR1cyhXVEZNb3ZlKHN0YXR1cykpCisgICAgLCByZWFzb24o
V1RGTW92ZShyZWFzb24pKQorICAgICwgaGVhZGVycyhXVEZNb3ZlKGhlYWRlcnMpKQoreworfQor
CitSZXNvdXJjZVJlc3BvbnNlOjpSZXNvdXJjZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQorICAgIDogdXJsKHJlc3BvbnNlLnVybCgpKQorICAgICwg
bWltZVR5cGUocmVzcG9uc2UubWltZVR5cGUoKSkKKyAgICAsIGV4cGVjdGVkTGVuZ3RoKHJlc3Bv
bnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpKQorICAgICwgdGV4dEVuY29kaW5nTmFtZShyZXNw
b25zZS50ZXh0RW5jb2RpbmdOYW1lKCkpCisgICAgLCB2ZXJzaW9uKHJlc3BvbnNlLmh0dHBWZXJz
aW9uKCkpCisgICAgLCBzdGF0dXMocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSkKKyAgICAsIHJl
YXNvbihyZXNwb25zZS5odHRwU3RhdHVzVGV4dCgpKQorICAgICwgaGVhZGVycyhjb3B5SGVhZGVy
cyhyZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkpKQoreworfQorCitSZXNvdXJjZVJlc3BvbnNl
OjpvcGVyYXRvciBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlKCkgY29uc3QKK3sKKyAgICBXZWJD
b3JlOjpVUkxQYXJzZXIgcGFyc2VyKHVybCk7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSByZXNwb25zZShwYXJzZXIucmVzdWx0KCksIG1pbWVUeXBlLCBleHBlY3RlZExlbmd0aCwgdGV4
dEVuY29kaW5nTmFtZSk7CisgICAgcmVzcG9uc2Uuc2V0SFRUUFZlcnNpb24odmVyc2lvbik7Cisg
ICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoc3RhdHVzKTsKKyAgICByZXNwb25zZS5zZXRI
VFRQU3RhdHVzVGV4dChyZWFzb24pOworCisgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBo
ZWFkZXJzKQorICAgICAgICByZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoaGVhZGVyLmtleSwg
aGVhZGVyLnZhbHVlKTsKKworICAgIHJldHVybiByZXNwb25zZTsKK30KKworLy8gLS0tLS0tLS0t
LQorCitSZXNvdXJjZUVycm9yOjpSZXNvdXJjZUVycm9yKFN0cmluZyYmIGRvbWFpbiwgU3RyaW5n
JiYgZmFpbGluZ1VSTCwgU3RyaW5nJiYgbG9jYWxpemVkRGVzY3JpcHRpb24sIGludCBlcnJvckNv
ZGUsIGludCB0eXBlKQorICAgIDogZG9tYWluKFdURk1vdmUoZG9tYWluKSkKKyAgICAsIGZhaWxp
bmdVUkwoV1RGTW92ZShmYWlsaW5nVVJMKSkKKyAgICAsIGxvY2FsaXplZERlc2NyaXB0aW9uKFdU
Rk1vdmUobG9jYWxpemVkRGVzY3JpcHRpb24pKQorICAgICwgZXJyb3JDb2RlKFdURk1vdmUoZXJy
b3JDb2RlKSkKKyAgICAsIHR5cGUoV1RGTW92ZSh0eXBlKSkKK3sKK30KKworUmVzb3VyY2VFcnJv
cjo6UmVzb3VyY2VFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvcikKKyAg
ICA6IGRvbWFpbihlcnJvci5kb21haW4oKSkKKyAgICAsIGZhaWxpbmdVUkwoZXJyb3IuZmFpbGlu
Z1VSTCgpKQorICAgICwgbG9jYWxpemVkRGVzY3JpcHRpb24oZXJyb3IubG9jYWxpemVkRGVzY3Jp
cHRpb24oKSkKKyAgICAsIGVycm9yQ29kZShlcnJvci5lcnJvckNvZGUoKSkKKyAgICAsIHR5cGUo
c3RhdGljX2Nhc3Q8aW50PihlcnJvci50eXBlKCkpKQoreworfQorCitSZXNvdXJjZUVycm9yOjpv
cGVyYXRvciBXZWJDb3JlOjpSZXNvdXJjZUVycm9yKCkgY29uc3QKK3sKKyAgICBXZWJDb3JlOjpV
UkxQYXJzZXIgcGFyc2VyKGZhaWxpbmdVUkwpOworICAgIFdlYkNvcmU6OlJlc291cmNlRXJyb3Ig
ZXJyb3IoZG9tYWluLCBlcnJvckNvZGUsIHBhcnNlci5yZXN1bHQoKSwgbG9jYWxpemVkRGVzY3Jp
cHRpb24sIHN0YXRpY19jYXN0PFdlYkNvcmU6OlJlc291cmNlRXJyb3I6OlR5cGU+KHR5cGUpKTsK
KworICAgIHJldHVybiBlcnJvcjsKK30KKworLy8gLS0tLS0tLS0tLQorCit1c2luZyBqc29uID0g
bmxvaG1hbm46OmJhc2ljX2pzb248PjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK3N0cnVj
dCBKU09OQ29kZXIgeworICAgIHN0YXRpYyBqc29uIGVuY29kZShUeXBlIHZhbCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBqc29uKHZhbCk7CisgICAgfQorCisgICAgc3RhdGljIFR5cGUgZGVjb2Rl
KGNvbnN0IGpzb24mIGpWYWwpCisgICAgeworICAgICAgICByZXR1cm4galZhbC5nZXQ8VHlwZT4o
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgSlNPTkNvZGVyPGNvbnN0IGNoYXIq
PiB7CisgICAgc3RhdGljIGpzb24gZW5jb2RlKGNvbnN0IGNoYXIqIHZhbCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBqc29uKHZhbCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEpT
T05Db2RlcjxTdHJpbmc+IHsKKyAgICBzdGF0aWMganNvbiBlbmNvZGUoY29uc3QgU3RyaW5nJiB2
YWwpCisgICAgeworICAgICAgICByZXR1cm4ganNvbihzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4o
dmFsLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RyaW5nIGRlY29kZShj
b25zdCBqc29uJiBqVmFsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZyhqVmFsLmdldF9y
ZWY8Y29uc3Qgc3RkOjpzdHJpbmcmPigpLmNfc3RyKCkpOworICAgIH0KK307CisKK3RlbXBsYXRl
PD4KK3N0cnVjdCBKU09OQ29kZXI8Q2FwdHVyZVRpbWVUeXBlPiB7CisgICAgc3RhdGljIGpzb24g
ZW5jb2RlKGNvbnN0IENhcHR1cmVUaW1lVHlwZSYgdGltZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU09OQ29kZXI8ZG91YmxlPjo6ZW5jb2RlKHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNv
bmRzKCkpOworICAgIH0KKworICAgIHN0YXRpYyBDYXB0dXJlVGltZVR5cGUgZGVjb2RlKGNvbnN0
IGpzb24mIGpUaW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENhcHR1cmVUaW1lVHlwZTo6ZnJv
bVJhd1NlY29uZHMoSlNPTkNvZGVyPGRvdWJsZT46OmRlY29kZShqVGltZSkpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBKU09OQ29kZXI8S2V5VmFsdWVQYWlyPiB7CisgICAgc3Rh
dGljIGpzb24gZW5jb2RlKGNvbnN0IEtleVZhbHVlUGFpciYgcGFpcikKKyAgICB7CisgICAgICAg
IHJldHVybiBqc29uIHsKKyAgICAgICAgICAgIEpTT05Db2RlcjxTdHJpbmc+OjplbmNvZGUocGFp
ci5rZXkpLAorICAgICAgICAgICAgSlNPTkNvZGVyPFN0cmluZz46OmVuY29kZShwYWlyLnZhbHVl
KQorICAgICAgICB9OworICAgIH0KKworICAgIHN0YXRpYyBLZXlWYWx1ZVBhaXIgZGVjb2RlKGNv
bnN0IGpzb24mIGpQYWlyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEtleVZhbHVlUGFpciB7Cisg
ICAgICAgICAgICBKU09OQ29kZXI8U3RyaW5nPjo6ZGVjb2RlKGpQYWlyWzBdKSwKKyAgICAgICAg
ICAgIEpTT05Db2RlcjxTdHJpbmc+OjpkZWNvZGUoalBhaXJbMV0pCisgICAgICAgIH07CisgICAg
fQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU09OQ29kZXI8VmVjdG9yPFQ+
PiB7CisgICAgc3RhdGljIGpzb24gZW5jb2RlKGNvbnN0IFZlY3RvcjxUPiYgdmVjdG9yKQorICAg
IHsKKyAgICAgICAganNvbiBqVmVjdG9yOworCisgICAgICAgIGZvciAoY29uc3QgYXV0byYgZWxl
bWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGpWZWN0b3IucHVzaF9iYWNrKEpTT05Db2RlcjxU
Pjo6ZW5jb2RlKGVsZW1lbnQpKTsKKworICAgICAgICByZXR1cm4galZlY3RvcjsKKyAgICB9CisK
KyAgICBzdGF0aWMgVmVjdG9yPFQ+IGRlY29kZShjb25zdCBqc29uJiBqVmVjdG9yKQorICAgIHsK
KyAgICAgICAgVmVjdG9yPFQ+IHZlY3RvcjsKKworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVs
ZW1lbnQgOiBqVmVjdG9yKQorICAgICAgICAgICAgdmVjdG9yLmFwcGVuZChKU09OQ29kZXI8VD46
OmRlY29kZShlbGVtZW50KSk7CisKKyAgICAgICAgcmV0dXJuIHZlY3RvcjsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+CitzdHJ1Y3QgSlNPTkNvZGVyPFJlc291cmNlUmVxdWVzdD4geworICAgIHN0
YXRpYyBqc29uIGVuY29kZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCisgICAgewor
ICAgICAgICByZXR1cm4ganNvbiB7CisgICAgICAgICAgICB7ICJ1cmwiLCBKU09OQ29kZXI8U3Ry
aW5nPjo6ZW5jb2RlKHJlcXVlc3QudXJsKSB9LAorICAgICAgICAgICAgeyAicmVmZXJyZXIiLCBK
U09OQ29kZXI8U3RyaW5nPjo6ZW5jb2RlKHJlcXVlc3QucmVmZXJyZXIpIH0sCisgICAgICAgICAg
ICB7ICJwb2xpY3kiLCBKU09OQ29kZXI8aW50Pjo6ZW5jb2RlKHJlcXVlc3QucG9saWN5KSB9LAor
ICAgICAgICAgICAgeyAibWV0aG9kIiwgSlNPTkNvZGVyPFN0cmluZz46OmVuY29kZShyZXF1ZXN0
Lm1ldGhvZCkgfSwKKyAgICAgICAgICAgIHsgImhlYWRlcnMiLCBKU09OQ29kZXI8SGVhZGVycz46
OmVuY29kZShyZXF1ZXN0LmhlYWRlcnMpIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBzdGF0
aWMgUmVzb3VyY2VSZXF1ZXN0IGRlY29kZShjb25zdCBqc29uJiBqUmVxdWVzdCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBSZXNvdXJjZVJlcXVlc3QgeworICAgICAgICAgICAgSlNPTkNvZGVyPFN0
cmluZz46OmRlY29kZShqUmVxdWVzdFsidXJsIl0pLAorICAgICAgICAgICAgSlNPTkNvZGVyPFN0
cmluZz46OmRlY29kZShqUmVxdWVzdFsicmVmZXJyZXIiXSksCisgICAgICAgICAgICBKU09OQ29k
ZXI8aW50Pjo6ZGVjb2RlKGpSZXF1ZXN0WyJwb2xpY3kiXSksCisgICAgICAgICAgICBKU09OQ29k
ZXI8U3RyaW5nPjo6ZGVjb2RlKGpSZXF1ZXN0WyJtZXRob2QiXSksCisgICAgICAgICAgICBKU09O
Q29kZXI8SGVhZGVycz46OmRlY29kZShqUmVxdWVzdFsiaGVhZGVycyJdKQorICAgICAgICB9Owor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBKU09OQ29kZXI8UmVzb3VyY2VSZXNwb25z
ZT4geworICAgIHN0YXRpYyBqc29uIGVuY29kZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqc29uIHsKKyAgICAgICAgICAgIHsgInVybCIs
IEpTT05Db2RlcjxTdHJpbmc+OjplbmNvZGUocmVzcG9uc2UudXJsKSB9LAorICAgICAgICAgICAg
eyAibWltZVR5cGUiLCBKU09OQ29kZXI8U3RyaW5nPjo6ZW5jb2RlKHJlc3BvbnNlLm1pbWVUeXBl
KSB9LAorICAgICAgICAgICAgeyAiZXhwZWN0ZWRMZW5ndGgiLCBKU09OQ29kZXI8bG9uZyBsb25n
Pjo6ZW5jb2RlKHJlc3BvbnNlLmV4cGVjdGVkTGVuZ3RoKSB9LAorICAgICAgICAgICAgeyAidGV4
dEVuY29kaW5nTmFtZSIsIEpTT05Db2RlcjxTdHJpbmc+OjplbmNvZGUocmVzcG9uc2UudGV4dEVu
Y29kaW5nTmFtZSkgfSwKKyAgICAgICAgICAgIHsgInZlcnNpb24iLCBKU09OQ29kZXI8U3RyaW5n
Pjo6ZW5jb2RlKHJlc3BvbnNlLnZlcnNpb24pIH0sCisgICAgICAgICAgICB7ICJzdGF0dXMiLCBK
U09OQ29kZXI8aW50Pjo6ZW5jb2RlKHJlc3BvbnNlLnN0YXR1cykgfSwKKyAgICAgICAgICAgIHsg
InJlYXNvbiIsIEpTT05Db2RlcjxTdHJpbmc+OjplbmNvZGUocmVzcG9uc2UucmVhc29uKSB9LAor
ICAgICAgICAgICAgeyAiaGVhZGVycyIsIEpTT05Db2RlcjxIZWFkZXJzPjo6ZW5jb2RlKHJlc3Bv
bnNlLmhlYWRlcnMpIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzb3VyY2VS
ZXNwb25zZSBkZWNvZGUoY29uc3QganNvbiYgalJlc3BvbnNlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFJlc291cmNlUmVzcG9uc2UgeworICAgICAgICAgICAgSlNPTkNvZGVyPFN0cmluZz46OmRl
Y29kZShqUmVzcG9uc2VbInVybCJdKSwKKyAgICAgICAgICAgIEpTT05Db2RlcjxTdHJpbmc+Ojpk
ZWNvZGUoalJlc3BvbnNlWyJtaW1lVHlwZSJdKSwKKyAgICAgICAgICAgIEpTT05Db2Rlcjxsb25n
IGxvbmc+OjpkZWNvZGUoalJlc3BvbnNlWyJleHBlY3RlZExlbmd0aCJdKSwKKyAgICAgICAgICAg
IEpTT05Db2RlcjxTdHJpbmc+OjpkZWNvZGUoalJlc3BvbnNlWyJ0ZXh0RW5jb2RpbmdOYW1lIl0p
LAorICAgICAgICAgICAgSlNPTkNvZGVyPFN0cmluZz46OmRlY29kZShqUmVzcG9uc2VbInZlcnNp
b24iXSksCisgICAgICAgICAgICBKU09OQ29kZXI8aW50Pjo6ZGVjb2RlKGpSZXNwb25zZVsic3Rh
dHVzIl0pLAorICAgICAgICAgICAgSlNPTkNvZGVyPFN0cmluZz46OmRlY29kZShqUmVzcG9uc2Vb
InJlYXNvbiJdKSwKKyAgICAgICAgICAgIEpTT05Db2RlcjxIZWFkZXJzPjo6ZGVjb2RlKGpSZXNw
b25zZVsiaGVhZGVycyJdKQorICAgICAgICB9OworICAgIH0KK307CisKK3RlbXBsYXRlPD4KK3N0
cnVjdCBKU09OQ29kZXI8UmVzb3VyY2VFcnJvcj4geworICAgIHN0YXRpYyBqc29uIGVuY29kZShj
b25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKKyAgICB7CisgICAgICAgIHJldHVybiBqc29uIHsK
KyAgICAgICAgICAgIHsgImRvbWFpbiIsIEpTT05Db2RlcjxTdHJpbmc+OjplbmNvZGUoZXJyb3Iu
ZG9tYWluKSB9LAorICAgICAgICAgICAgeyAiZmFpbGluZ1VSTCIsIEpTT05Db2RlcjxTdHJpbmc+
OjplbmNvZGUoZXJyb3IuZmFpbGluZ1VSTCkgfSwKKyAgICAgICAgICAgIHsgImxvY2FsaXplZERl
c2NyaXB0aW9uIiwgSlNPTkNvZGVyPFN0cmluZz46OmVuY29kZShlcnJvci5sb2NhbGl6ZWREZXNj
cmlwdGlvbikgfSwKKyAgICAgICAgICAgIHsgImVycm9yQ29kZSIsIEpTT05Db2RlcjxpbnQ+Ojpl
bmNvZGUoZXJyb3IuZXJyb3JDb2RlKSB9LAorICAgICAgICAgICAgeyAidHlwZSIsIEpTT05Db2Rl
cjxpbnQ+OjplbmNvZGUoZXJyb3IudHlwZSkgfQorICAgICAgICB9OworICAgIH0KKworICAgIHN0
YXRpYyBSZXNvdXJjZUVycm9yIGRlY29kZShjb25zdCBqc29uJiBqRXJyb3IpCisgICAgeworICAg
ICAgICByZXR1cm4gUmVzb3VyY2VFcnJvciB7CisgICAgICAgICAgICBKU09OQ29kZXI8U3RyaW5n
Pjo6ZGVjb2RlKGpFcnJvclsiZG9tYWluIl0pLAorICAgICAgICAgICAgSlNPTkNvZGVyPFN0cmlu
Zz46OmRlY29kZShqRXJyb3JbImZhaWxpbmdVUkwiXSksCisgICAgICAgICAgICBKU09OQ29kZXI8
U3RyaW5nPjo6ZGVjb2RlKGpFcnJvclsibG9jYWxpemVkRGVzY3JpcHRpb24iXSksCisgICAgICAg
ICAgICBKU09OQ29kZXI8aW50Pjo6ZGVjb2RlKGpFcnJvclsiZXJyb3JDb2RlIl0pLAorICAgICAg
ICAgICAgSlNPTkNvZGVyPGludD46OmRlY29kZShqRXJyb3JbInR5cGUiXSkKKyAgICAgICAgfTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgSlNPTkNvZGVyPFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcj4geworICAgIHN0YXRpYyBqc29uIGVuY29kZShjb25zdCBXZWJDb3JlOjpTaGFyZWRC
dWZmZXImIGRhdGEpCisgICAgeworICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOworICAgICAg
ICBiYXNlNjRFbmNvZGUoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCBidWZmZXIpOworICAgICAg
ICByZXR1cm4ganNvbigmYnVmZmVyWzBdLCBidWZmZXIuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgUmVmPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZGVjb2RlKGNvbnN0IGpzb24mIGpEYXRh
KQorICAgIHsKKyAgICAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAgICAgIGNvbnN0IGF1dG8m
IHN0ciA9IGpEYXRhLmdldF9yZWY8Y29uc3Qgc3RkOjpzdHJpbmcmPigpOworICAgICAgICAodm9p
ZCkgYmFzZTY0RGVjb2RlKHN0ci5jX3N0cigpLCBzdHIuc2l6ZSgpLCBkYXRhKTsKKyAgICAgICAg
cmV0dXJuIFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IoZGF0YSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEpTT05Db2RlcjxSZXF1ZXN0U2VudEV2ZW50PiB7Cisg
ICAgc3RhdGljIGpzb24gZW5jb2RlKGNvbnN0IFJlcXVlc3RTZW50RXZlbnQmIGV2ZW50KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGpzb24geworICAgICAgICAgICAgeyAidHlwZSIsIEpTT05Db2Rl
cjxjb25zdCBjaGFyKj46OmVuY29kZShldmVudC50eXBlTmFtZSkgfSwKKyAgICAgICAgICAgIHsg
InRpbWUiLCBKU09OQ29kZXI8Q2FwdHVyZVRpbWVUeXBlPjo6ZW5jb2RlKGV2ZW50LnRpbWUpIH0s
CisgICAgICAgICAgICB7ICJyZXF1ZXN0IiwgSlNPTkNvZGVyPFJlc291cmNlUmVxdWVzdD46OmVu
Y29kZShldmVudC5yZXF1ZXN0KSB9CisgICAgICAgIH07CisgICAgfQorCisgICAgc3RhdGljIFJl
cXVlc3RTZW50RXZlbnQgZGVjb2RlKGNvbnN0IGpzb24mIGpFdmVudCkKKyAgICB7CisgICAgICAg
IHJldHVybiBSZXF1ZXN0U2VudEV2ZW50IHsKKyAgICAgICAgICAgIEpTT05Db2RlcjxDYXB0dXJl
VGltZVR5cGU+OjpkZWNvZGUoakV2ZW50WyJ0aW1lIl0pLAorICAgICAgICAgICAgSlNPTkNvZGVy
PFJlc291cmNlUmVxdWVzdD46OmRlY29kZShqRXZlbnRbInJlcXVlc3QiXSkKKyAgICAgICAgfTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgSlNPTkNvZGVyPFJlc3BvbnNlUmVjZWl2
ZWRFdmVudD4geworICAgIHN0YXRpYyBqc29uIGVuY29kZShjb25zdCBSZXNwb25zZVJlY2VpdmVk
RXZlbnQmIGV2ZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzb24geworICAgICAgICAgICAg
eyAidHlwZSIsIEpTT05Db2Rlcjxjb25zdCBjaGFyKj46OmVuY29kZShldmVudC50eXBlTmFtZSkg
fSwKKyAgICAgICAgICAgIHsgInRpbWUiLCBKU09OQ29kZXI8Q2FwdHVyZVRpbWVUeXBlPjo6ZW5j
b2RlKGV2ZW50LnRpbWUpIH0sCisgICAgICAgICAgICB7ICJyZXNwb25zZSIsIEpTT05Db2RlcjxS
ZXNvdXJjZVJlc3BvbnNlPjo6ZW5jb2RlKGV2ZW50LnJlc3BvbnNlKSB9CisgICAgICAgIH07Cisg
ICAgfQorCisgICAgc3RhdGljIFJlc3BvbnNlUmVjZWl2ZWRFdmVudCBkZWNvZGUoY29uc3QganNv
biYgakV2ZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJlc3BvbnNlUmVjZWl2ZWRFdmVudCB7
CisgICAgICAgICAgICBKU09OQ29kZXI8Q2FwdHVyZVRpbWVUeXBlPjo6ZGVjb2RlKGpFdmVudFsi
dGltZSJdKSwKKyAgICAgICAgICAgIEpTT05Db2RlcjxSZXNvdXJjZVJlc3BvbnNlPjo6ZGVjb2Rl
KGpFdmVudFsicmVzcG9uc2UiXSkKKyAgICAgICAgfTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
CitzdHJ1Y3QgSlNPTkNvZGVyPFJlZGlyZWN0UmVjZWl2ZWRFdmVudD4geworICAgIHN0YXRpYyBq
c29uIGVuY29kZShjb25zdCBSZWRpcmVjdFJlY2VpdmVkRXZlbnQmIGV2ZW50KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGpzb24geworICAgICAgICAgICAgeyAidHlwZSIsIEpTT05Db2Rlcjxjb25z
dCBjaGFyKj46OmVuY29kZShldmVudC50eXBlTmFtZSkgfSwKKyAgICAgICAgICAgIHsgInRpbWUi
LCBKU09OQ29kZXI8Q2FwdHVyZVRpbWVUeXBlPjo6ZW5jb2RlKGV2ZW50LnRpbWUpIH0sCisgICAg
ICAgICAgICB7ICJyZXF1ZXN0IiwgSlNPTkNvZGVyPFJlc291cmNlUmVxdWVzdD46OmVuY29kZShl
dmVudC5yZXF1ZXN0KSB9LAorICAgICAgICAgICAgeyAicmVzcG9uc2UiLCBKU09OQ29kZXI8UmVz
b3VyY2VSZXNwb25zZT46OmVuY29kZShldmVudC5yZXNwb25zZSkgfQorICAgICAgICB9OworICAg
IH0KKworICAgIHN0YXRpYyBSZWRpcmVjdFJlY2VpdmVkRXZlbnQgZGVjb2RlKGNvbnN0IGpzb24m
IGpFdmVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBSZWRpcmVjdFJlY2VpdmVkRXZlbnQgewor
ICAgICAgICAgICAgSlNPTkNvZGVyPENhcHR1cmVUaW1lVHlwZT46OmRlY29kZShqRXZlbnRbInRp
bWUiXSksCisgICAgICAgICAgICBKU09OQ29kZXI8UmVzb3VyY2VSZXF1ZXN0Pjo6ZGVjb2RlKGpF
dmVudFsicmVxdWVzdCJdKSwKKyAgICAgICAgICAgIEpTT05Db2RlcjxSZXNvdXJjZVJlc3BvbnNl
Pjo6ZGVjb2RlKGpFdmVudFsicmVzcG9uc2UiXSkKKyAgICAgICAgfTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+CitzdHJ1Y3QgSlNPTkNvZGVyPFJlZGlyZWN0U2VudEV2ZW50PiB7CisgICAgc3Rh
dGljIGpzb24gZW5jb2RlKGNvbnN0IFJlZGlyZWN0U2VudEV2ZW50JiBldmVudCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBqc29uIHsKKyAgICAgICAgICAgIHsgInR5cGUiLCBKU09OQ29kZXI8Y29u
c3QgY2hhcio+OjplbmNvZGUoZXZlbnQudHlwZU5hbWUpIH0sCisgICAgICAgICAgICB7ICJ0aW1l
IiwgSlNPTkNvZGVyPENhcHR1cmVUaW1lVHlwZT46OmVuY29kZShldmVudC50aW1lKSB9LAorICAg
ICAgICAgICAgeyAicmVxdWVzdCIsIEpTT05Db2RlcjxSZXNvdXJjZVJlcXVlc3Q+OjplbmNvZGUo
ZXZlbnQucmVxdWVzdCkgfSwKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVkaXJl
Y3RTZW50RXZlbnQgZGVjb2RlKGNvbnN0IGpzb24mIGpFdmVudCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBSZWRpcmVjdFNlbnRFdmVudCB7CisgICAgICAgICAgICBKU09OQ29kZXI8Q2FwdHVyZVRp
bWVUeXBlPjo6ZGVjb2RlKGpFdmVudFsidGltZSJdKSwKKyAgICAgICAgICAgIEpTT05Db2RlcjxS
ZXNvdXJjZVJlcXVlc3Q+OjpkZWNvZGUoakV2ZW50WyJyZXF1ZXN0Il0pCisgICAgICAgIH07Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEpTT05Db2RlcjxEYXRhUmVjZWl2ZWRFdmVu
dD4geworICAgIHN0YXRpYyBqc29uIGVuY29kZShjb25zdCBEYXRhUmVjZWl2ZWRFdmVudCYgZXZl
bnQpCisgICAgeworICAgICAgICByZXR1cm4ganNvbiB7CisgICAgICAgICAgICB7ICJ0eXBlIiwg
SlNPTkNvZGVyPGNvbnN0IGNoYXIqPjo6ZW5jb2RlKGV2ZW50LnR5cGVOYW1lKSB9LAorICAgICAg
ICAgICAgeyAidGltZSIsIEpTT05Db2RlcjxDYXB0dXJlVGltZVR5cGU+OjplbmNvZGUoZXZlbnQu
dGltZSkgfSwKKyAgICAgICAgICAgIHsgImRhdGEiLCBKU09OQ29kZXI8V2ViQ29yZTo6U2hhcmVk
QnVmZmVyPjo6ZW5jb2RlKGV2ZW50LmRhdGEuZ2V0KCkpIH0KKyAgICAgICAgfTsKKyAgICB9CisK
KyAgICBzdGF0aWMgRGF0YVJlY2VpdmVkRXZlbnQgZGVjb2RlKGNvbnN0IGpzb24mIGpFdmVudCkK
KyAgICB7CisgICAgICAgIHJldHVybiBEYXRhUmVjZWl2ZWRFdmVudCB7CisgICAgICAgICAgICBK
U09OQ29kZXI8Q2FwdHVyZVRpbWVUeXBlPjo6ZGVjb2RlKGpFdmVudFsidGltZSJdKSwKKyAgICAg
ICAgICAgIEpTT05Db2RlcjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+OjpkZWNvZGUoakV2ZW50WyJk
YXRhIl0pCisgICAgICAgIH07CisgICAgfQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEpTT05D
b2RlcjxGaW5pc2hlZEV2ZW50PiB7CisgICAgc3RhdGljIGpzb24gZW5jb2RlKGNvbnN0IEZpbmlz
aGVkRXZlbnQmIGV2ZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzb24geworICAgICAgICAg
ICAgeyAidHlwZSIsIEpTT05Db2Rlcjxjb25zdCBjaGFyKj46OmVuY29kZShldmVudC50eXBlTmFt
ZSkgfSwKKyAgICAgICAgICAgIHsgInRpbWUiLCBKU09OQ29kZXI8Q2FwdHVyZVRpbWVUeXBlPjo6
ZW5jb2RlKGV2ZW50LnRpbWUpIH0sCisgICAgICAgICAgICB7ICJlcnJvciIsIEpTT05Db2RlcjxS
ZXNvdXJjZUVycm9yPjo6ZW5jb2RlKGV2ZW50LmVycm9yKSB9CisgICAgICAgIH07CisgICAgfQor
CisgICAgc3RhdGljIEZpbmlzaGVkRXZlbnQgZGVjb2RlKGNvbnN0IGpzb24mIGpFdmVudCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBGaW5pc2hlZEV2ZW50IHsKKyAgICAgICAgICAgIEpTT05Db2Rl
cjxDYXB0dXJlVGltZVR5cGU+OjpkZWNvZGUoakV2ZW50WyJ0aW1lIl0pLAorICAgICAgICAgICAg
SlNPTkNvZGVyPFJlc291cmNlRXJyb3I+OjpkZWNvZGUoakV2ZW50WyJlcnJvciJdKQorICAgICAg
ICB9OworICAgIH0KK307CisKK3N0ZDo6c3RyaW5nIGV2ZW50VG9TdHJpbmcoY29uc3QgQ2FwdHVy
ZUV2ZW50JiBldmVudCkKK3sKKyAgICBqc29uIHJlc3VsdDsKKworICAgIFdURjo6dmlzaXQoWyZy
ZXN1bHRdKGNvbnN0IGF1dG8mIGV2ZW50KSB7CisgICAgICAgIHVzaW5nIEV2ZW50VHlwZSA9IHN0
ZDo6ZGVjYXlfdDxkZWNsdHlwZShldmVudCk+OworICAgICAgICByZXN1bHQgPSBKU09OQ29kZXI8
RXZlbnRUeXBlPjo6ZW5jb2RlKGV2ZW50KTsKKyAgICB9LCBldmVudCk7CisKKyAgICByZXR1cm4g
cmVzdWx0LmR1bXAoNCk7Cit9CisKK09wdGlvbmFsQ2FwdHVyZUV2ZW50IHN0cmluZ1RvRXZlbnQo
Y29uc3QgY2hhcioganNvblN0cikKK3sKKyAgICBhdXRvIGpWYWx1ZSA9IGpzb246OnBhcnNlKGpz
b25TdHIpOworICAgIGNvbnN0IGF1dG8mIHR5cGUgPSBqVmFsdWVbInR5cGUiXS5nZXRfcmVmPGNv
bnN0IHN0ZDo6c3RyaW5nJj4oKTsKKworICAgIE9wdGlvbmFsQ2FwdHVyZUV2ZW50IHJlc3VsdCB7
IHN0ZDo6bnVsbG9wdCB9OworICAgIENhcHR1cmVFdmVudFR5cGVIb2xkZXI6OmZvckVhY2hUeXBl
KFsmXShhdXRvKiBUKSAtPiBib29sIHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHN0ZDo6cmVtb3Zl
X3BvaW50ZXJfdDxkZWNsdHlwZShUKT47CisgICAgICAgIGlmICh0eXBlID09IFR5cGU6OnR5cGVO
YW1lKSB7CisgICAgICAgICAgICByZXN1bHQgPSBPcHRpb25hbENhcHR1cmVFdmVudChKU09OQ29k
ZXI8VHlwZT46OmRlY29kZShqVmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZl
bnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44OGZiNjUwNDNlYmJlNmExMDUxYWU3YzVhMGY1NGZkMzQyNWI1ZTgy
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVy
ZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmgKQEAgLTAsMCArMSwyMjQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRlICJO
ZXR3b3JrQ2FwdHVyZVR5cGVzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4K
KyNpbmNsdWRlIDx3dGYvTW9ub3RvbmljVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBSZXNvdXJjZUVycm9yOworY2xhc3MgUmVzb3VyY2VS
ZXF1ZXN0OworY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7
CituYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgeworCitzdHJ1Y3QgUmVxdWVzdFNlbnRFdmVudDsK
K3N0cnVjdCBSZXNwb25zZVJlY2VpdmVkRXZlbnQ7CitzdHJ1Y3QgUmVkaXJlY3RSZWNlaXZlZEV2
ZW50Oworc3RydWN0IFJlZGlyZWN0U2VudEV2ZW50Oworc3RydWN0IERhdGFSZWNlaXZlZEV2ZW50
Oworc3RydWN0IEZpbmlzaGVkRXZlbnQ7CitzdHJ1Y3QgS2V5VmFsdWVQYWlyOworCit1c2luZyBD
YXB0dXJlRXZlbnRUeXBlSG9sZGVyID0gVHlwZUhvbGRlcjxSZXF1ZXN0U2VudEV2ZW50LCBSZXNw
b25zZVJlY2VpdmVkRXZlbnQsIFJlZGlyZWN0UmVjZWl2ZWRFdmVudCwgUmVkaXJlY3RTZW50RXZl
bnQsIERhdGFSZWNlaXZlZEV2ZW50LCBGaW5pc2hlZEV2ZW50PjsKK3VzaW5nIENhcHR1cmVFdmVu
dCA9IENhcHR1cmVFdmVudFR5cGVIb2xkZXI6OlZhcmlhbnRUeXBlOwordXNpbmcgT3B0aW9uYWxD
YXB0dXJlRXZlbnQgPSBzdGQ6Om9wdGlvbmFsPENhcHR1cmVFdmVudD47Cit1c2luZyBDYXB0dXJl
RXZlbnRzID0gVmVjdG9yPENhcHR1cmVFdmVudD47Cit1c2luZyBDYXB0dXJlQ2xvY2tUeXBlID0g
V1RGOjpNb25vdG9uaWNUaW1lOwordXNpbmcgQ2FwdHVyZVRpbWVUeXBlID0gV1RGOjpNb25vdG9u
aWNUaW1lOwordXNpbmcgSGVhZGVycyA9IFZlY3RvcjxLZXlWYWx1ZVBhaXI+OworCitzdGQ6OnN0
cmluZyBldmVudFRvU3RyaW5nKGNvbnN0IENhcHR1cmVFdmVudCYpOworT3B0aW9uYWxDYXB0dXJl
RXZlbnQgc3RyaW5nVG9FdmVudChjb25zdCBjaGFyKik7CisKK3N0cnVjdCBLZXlWYWx1ZVBhaXIg
eworICAgIEtleVZhbHVlUGFpcihTdHJpbmcmJiBrZXksIFN0cmluZyYmIHZhbHVlKTsKKyAgICBL
ZXlWYWx1ZVBhaXIoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOworCisg
ICAgU3RyaW5nIGtleTsKKyAgICBTdHJpbmcgdmFsdWU7Cit9Oworc3RhdGljX2Fzc2VydChzdGQ6
OmlzX21vdmVfY29uc3RydWN0aWJsZTxLZXlWYWx1ZVBhaXI+Ojp2YWx1ZSwgIktleVZhbHVlUGFp
ciBpcyBub3QgbW92ZSBjb25zdHJ1Y3RpYmxlIik7CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfbW92
ZV9hc3NpZ25hYmxlPEtleVZhbHVlUGFpcj46OnZhbHVlLCAiS2V5VmFsdWVQYWlyIGlzIG5vdCBt
b3ZlIGFzc2lnbmFibGUiKTsKKworc3RydWN0IFJlc291cmNlUmVxdWVzdCB7CisgICAgUmVzb3Vy
Y2VSZXF1ZXN0KFN0cmluZyYmIHVybCwgU3RyaW5nJiYgcmVmZXJyZXIsIGludCBwb2xpY3ksIFN0
cmluZyYmIG1ldGhvZCwgSGVhZGVycyYmKTsKKyAgICBSZXNvdXJjZVJlcXVlc3QoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgb3BlcmF0b3IgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0KCkgY29uc3Q7CisKKyAgICBTdHJpbmcgdXJsOworICAgIFN0cmluZyByZWZlcnJlcjsK
KyAgICBpbnQgcG9saWN5OworICAgIFN0cmluZyBtZXRob2Q7CisgICAgSGVhZGVycyBoZWFkZXJz
OworfTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc19tb3ZlX2NvbnN0cnVjdGlibGU8UmVzb3VyY2VS
ZXF1ZXN0Pjo6dmFsdWUsICJSZXNvdXJjZVJlcXVlc3QgaXMgbm90IG1vdmUgY29uc3RydWN0aWJs
ZSIpOworc3RhdGljX2Fzc2VydChzdGQ6OmlzX21vdmVfYXNzaWduYWJsZTxSZXNvdXJjZVJlcXVl
c3Q+Ojp2YWx1ZSwgIlJlc291cmNlUmVxdWVzdCBpcyBub3QgbW92ZSBhc3NpZ25hYmxlIik7CisK
K3N0cnVjdCBSZXNvdXJjZVJlc3BvbnNlIHsKKyAgICBSZXNvdXJjZVJlc3BvbnNlKFN0cmluZyYm
IHVybCwgU3RyaW5nJiYgbWltZVR5cGUsIGxvbmcgbG9uZyBleHBlY3RlZExlbmd0aCwgU3RyaW5n
JiYgdGV4dEVuY29kaW5nTmFtZSwgU3RyaW5nJiYgdmVyc2lvbiwgaW50IHN0YXR1cywgU3RyaW5n
JiYgcmVhc29uLCBIZWFkZXJzJiYpOworICAgIFJlc291cmNlUmVzcG9uc2UoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSYpOworICAgIG9wZXJhdG9yIFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2UoKSBjb25zdDsKKworICAgIFN0cmluZyB1cmw7CisgICAgU3RyaW5nIG1pbWVUeXBlOwor
ICAgIGxvbmcgbG9uZyBleHBlY3RlZExlbmd0aDsKKyAgICBTdHJpbmcgdGV4dEVuY29kaW5nTmFt
ZTsKKyAgICBTdHJpbmcgdmVyc2lvbjsKKyAgICBpbnQgc3RhdHVzOworICAgIFN0cmluZyByZWFz
b247CisgICAgSGVhZGVycyBoZWFkZXJzOworfTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc19tb3Zl
X2NvbnN0cnVjdGlibGU8UmVzb3VyY2VSZXNwb25zZT46OnZhbHVlLCAiUmVzb3VyY2VSZXNwb25z
ZSBpcyBub3QgbW92ZSBjb25zdHJ1Y3RpYmxlIik7CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfbW92
ZV9hc3NpZ25hYmxlPFJlc291cmNlUmVzcG9uc2U+Ojp2YWx1ZSwgIlJlc291cmNlUmVzcG9uc2Ug
aXMgbm90IG1vdmUgYXNzaWduYWJsZSIpOworCitzdHJ1Y3QgUmVzb3VyY2VFcnJvciB7CisgICAg
UmVzb3VyY2VFcnJvcihTdHJpbmcmJiBkb21haW4sIFN0cmluZyYmIGZhaWxpbmdVUkwsIFN0cmlu
ZyYmIGxvY2FsaXplZERlc2NyaXB0aW9uLCBpbnQgZXJyb3JDb2RlLCBpbnQgdHlwZSk7CisgICAg
UmVzb3VyY2VFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CisgICAgb3BlcmF0
b3IgV2ViQ29yZTo6UmVzb3VyY2VFcnJvcigpIGNvbnN0OworCisgICAgU3RyaW5nIGRvbWFpbjsK
KyAgICBTdHJpbmcgZmFpbGluZ1VSTDsKKyAgICBTdHJpbmcgbG9jYWxpemVkRGVzY3JpcHRpb247
CisgICAgaW50IGVycm9yQ29kZTsKKyAgICBpbnQgdHlwZTsKK307CitzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfbW92ZV9jb25zdHJ1Y3RpYmxlPFJlc291cmNlRXJyb3I+Ojp2YWx1ZSwgIlJlc291cmNl
RXJyb3IgaXMgbm90IG1vdmUgY29uc3RydWN0aWJsZSIpOworc3RhdGljX2Fzc2VydChzdGQ6Omlz
X21vdmVfYXNzaWduYWJsZTxSZXNvdXJjZUVycm9yPjo6dmFsdWUsICJSZXNvdXJjZUVycm9yIGlz
IG5vdCBtb3ZlIGFzc2lnbmFibGUiKTsKKworc3RydWN0IFRpbWVkRXZlbnQgeworICAgIFRpbWVk
RXZlbnQoKQorICAgICAgICA6IHRpbWUoQ2FwdHVyZUNsb2NrVHlwZTo6bm93KCkpIHsgfQorICAg
IFRpbWVkRXZlbnQoQ2FwdHVyZVRpbWVUeXBlJiYgdGltZSkKKyAgICAgICAgOiB0aW1lKFdURk1v
dmUodGltZSkpIHsgfQorCisgICAgQ2FwdHVyZVRpbWVUeXBlIHRpbWU7Cit9Oworc3RhdGljX2Fz
c2VydChzdGQ6OmlzX21vdmVfY29uc3RydWN0aWJsZTxUaW1lZEV2ZW50Pjo6dmFsdWUsICJUaW1l
ZEV2ZW50IGlzIG5vdCBtb3ZlIGNvbnN0cnVjdGlibGUiKTsKK3N0YXRpY19hc3NlcnQoc3RkOjpp
c19tb3ZlX2Fzc2lnbmFibGU8VGltZWRFdmVudD46OnZhbHVlLCAiVGltZWRFdmVudCBpcyBub3Qg
bW92ZSBhc3NpZ25hYmxlIik7CisKK3N0cnVjdCBSZXF1ZXN0U2VudEV2ZW50IGZpbmFsIDogcHVi
bGljIFRpbWVkRXZlbnQgeworICAgIFJlcXVlc3RTZW50RXZlbnQoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorICAgICAgICA6IFRpbWVkRXZlbnQoKQorICAgICAgICAs
IHJlcXVlc3QocmVxdWVzdCkgeyB9CisgICAgUmVxdWVzdFNlbnRFdmVudChDYXB0dXJlVGltZVR5
cGUmJiB0aW1lLCBSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0KQorICAgICAgICA6IFRpbWVkRXZl
bnQoV1RGTW92ZSh0aW1lKSkKKyAgICAgICAgLCByZXF1ZXN0KFdURk1vdmUocmVxdWVzdCkpIHsg
fQorCisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Q7CisgICAgc3RhdGljIGNvbnN0IGNoYXIg
dHlwZU5hbWVbXTsKK307CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfbW92ZV9jb25zdHJ1Y3RpYmxl
PFJlcXVlc3RTZW50RXZlbnQ+Ojp2YWx1ZSwgIlJlcXVlc3RTZW50RXZlbnQgaXMgbm90IG1vdmUg
Y29uc3RydWN0aWJsZSIpOworc3RhdGljX2Fzc2VydChzdGQ6OmlzX21vdmVfYXNzaWduYWJsZTxS
ZXF1ZXN0U2VudEV2ZW50Pjo6dmFsdWUsICJSZXF1ZXN0U2VudEV2ZW50IGlzIG5vdCBtb3ZlIGFz
c2lnbmFibGUiKTsKKworc3RydWN0IFJlc3BvbnNlUmVjZWl2ZWRFdmVudCBmaW5hbCA6IHB1Ymxp
YyBUaW1lZEV2ZW50IHsKKyAgICBSZXNwb25zZVJlY2VpdmVkRXZlbnQoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCisgICAgICAgIDogVGltZWRFdmVudCgpCisgICAg
ICAgICwgcmVzcG9uc2UocmVzcG9uc2UpIHsgfQorICAgIFJlc3BvbnNlUmVjZWl2ZWRFdmVudChD
YXB0dXJlVGltZVR5cGUmJiB0aW1lLCBSZXNvdXJjZVJlc3BvbnNlJiYgcmVzcG9uc2UpCisgICAg
ICAgIDogVGltZWRFdmVudChXVEZNb3ZlKHRpbWUpKQorICAgICAgICAsIHJlc3BvbnNlKFdURk1v
dmUocmVzcG9uc2UpKSB7IH0KKworICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisgICAg
c3RhdGljIGNvbnN0IGNoYXIgdHlwZU5hbWVbXTsKK307CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
bW92ZV9jb25zdHJ1Y3RpYmxlPFJlc3BvbnNlUmVjZWl2ZWRFdmVudD46OnZhbHVlLCAiUmVzcG9u
c2VSZWNlaXZlZEV2ZW50IGlzIG5vdCBtb3ZlIGNvbnN0cnVjdGlibGUiKTsKK3N0YXRpY19hc3Nl
cnQoc3RkOjppc19tb3ZlX2Fzc2lnbmFibGU8UmVzcG9uc2VSZWNlaXZlZEV2ZW50Pjo6dmFsdWUs
ICJSZXNwb25zZVJlY2VpdmVkRXZlbnQgaXMgbm90IG1vdmUgYXNzaWduYWJsZSIpOworCitzdHJ1
Y3QgUmVkaXJlY3RSZWNlaXZlZEV2ZW50IGZpbmFsIDogcHVibGljIFRpbWVkRXZlbnQgeworICAg
IFJlZGlyZWN0UmVjZWl2ZWRFdmVudChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQorICAgICAg
ICA6IFRpbWVkRXZlbnQoKQorICAgICAgICAsIHJlcXVlc3QocmVxdWVzdCkKKyAgICAgICAgLCBy
ZXNwb25zZShyZXNwb25zZSkgeyB9CisgICAgUmVkaXJlY3RSZWNlaXZlZEV2ZW50KENhcHR1cmVU
aW1lVHlwZSYmIHRpbWUsIFJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIFJlc291cmNlUmVzcG9u
c2UmJiByZXNwb25zZSkKKyAgICAgICAgOiBUaW1lZEV2ZW50KFdURk1vdmUodGltZSkpCisgICAg
ICAgICwgcmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKQorICAgICAgICAsIHJlc3BvbnNlKFdURk1v
dmUocmVzcG9uc2UpKSB7IH0KKworICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0OworICAgIFJl
c291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgdHlwZU5hbWVb
XTsKK307CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfbW92ZV9jb25zdHJ1Y3RpYmxlPFJlZGlyZWN0
UmVjZWl2ZWRFdmVudD46OnZhbHVlLCAiUmVkaXJlY3RSZWNlaXZlZEV2ZW50IGlzIG5vdCBtb3Zl
IGNvbnN0cnVjdGlibGUiKTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc19tb3ZlX2Fzc2lnbmFibGU8
UmVkaXJlY3RSZWNlaXZlZEV2ZW50Pjo6dmFsdWUsICJSZWRpcmVjdFJlY2VpdmVkRXZlbnQgaXMg
bm90IG1vdmUgYXNzaWduYWJsZSIpOworCitzdHJ1Y3QgUmVkaXJlY3RTZW50RXZlbnQgZmluYWwg
OiBwdWJsaWMgVGltZWRFdmVudCB7CisgICAgUmVkaXJlY3RTZW50RXZlbnQoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQorICAgICAgICA6IFRpbWVkRXZlbnQoKQorICAg
ICAgICAsIHJlcXVlc3QocmVxdWVzdCkgeyB9CisgICAgUmVkaXJlY3RTZW50RXZlbnQoQ2FwdHVy
ZVRpbWVUeXBlJiYgdGltZSwgUmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCkKKyAgICAgICAgOiBU
aW1lZEV2ZW50KFdURk1vdmUodGltZSkpCisgICAgICAgICwgcmVxdWVzdChXVEZNb3ZlKHJlcXVl
c3QpKSB7IH0KKworICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0OworICAgIHN0YXRpYyBjb25z
dCBjaGFyIHR5cGVOYW1lW107Cit9Oworc3RhdGljX2Fzc2VydChzdGQ6OmlzX21vdmVfY29uc3Ry
dWN0aWJsZTxSZWRpcmVjdFNlbnRFdmVudD46OnZhbHVlLCAiUmVkaXJlY3RTZW50RXZlbnQgaXMg
bm90IG1vdmUgY29uc3RydWN0aWJsZSIpOworc3RhdGljX2Fzc2VydChzdGQ6OmlzX21vdmVfYXNz
aWduYWJsZTxSZWRpcmVjdFNlbnRFdmVudD46OnZhbHVlLCAiUmVkaXJlY3RTZW50RXZlbnQgaXMg
bm90IG1vdmUgYXNzaWduYWJsZSIpOworCitzdHJ1Y3QgRGF0YVJlY2VpdmVkRXZlbnQgZmluYWwg
OiBwdWJsaWMgVGltZWRFdmVudCB7CisgICAgRGF0YVJlY2VpdmVkRXZlbnQoKQorICAgICAgICA6
IFRpbWVkRXZlbnQoKQorICAgICAgICAsIGRhdGEoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVh
dGUoKSkgeyB9CisgICAgRGF0YVJlY2VpdmVkRXZlbnQoV2ViQ29yZTo6U2hhcmVkQnVmZmVyJiBk
YXRhKQorICAgICAgICA6IFRpbWVkRXZlbnQoKQorICAgICAgICAsIGRhdGEoUmVmPFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcj4oZGF0YSkpIHsgfQorICAgIERhdGFSZWNlaXZlZEV2ZW50KENhcHR1cmVU
aW1lVHlwZSYmIHRpbWUsIFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciYgZGF0YSkKKyAgICAgICAgOiBU
aW1lZEV2ZW50KFdURk1vdmUodGltZSkpCisgICAgICAgICwgZGF0YShSZWY8V2ViQ29yZTo6U2hh
cmVkQnVmZmVyPihkYXRhKSkgeyB9CisKKyAgICBSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBk
YXRhOworICAgIHN0YXRpYyBjb25zdCBjaGFyIHR5cGVOYW1lW107Cit9Oworc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX21vdmVfY29uc3RydWN0aWJsZTxEYXRhUmVjZWl2ZWRFdmVudD46OnZhbHVlLCAi
RGF0YVJlY2VpdmVkRXZlbnQgaXMgbm90IG1vdmUgY29uc3RydWN0aWJsZSIpOworc3RhdGljX2Fz
c2VydChzdGQ6OmlzX21vdmVfYXNzaWduYWJsZTxEYXRhUmVjZWl2ZWRFdmVudD46OnZhbHVlLCAi
RGF0YVJlY2VpdmVkRXZlbnQgaXMgbm90IG1vdmUgYXNzaWduYWJsZSIpOworCitzdHJ1Y3QgRmlu
aXNoZWRFdmVudCBmaW5hbCA6IHB1YmxpYyBUaW1lZEV2ZW50IHsKKyAgICBGaW5pc2hlZEV2ZW50
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yKQorICAgICAgICA6IFRpbWVkRXZl
bnQoKQorICAgICAgICAsIGVycm9yKGVycm9yKSB7IH0KKyAgICBGaW5pc2hlZEV2ZW50KENhcHR1
cmVUaW1lVHlwZSYmIHRpbWUsIFJlc291cmNlRXJyb3ImJiBlcnJvcikKKyAgICAgICAgOiBUaW1l
ZEV2ZW50KFdURk1vdmUodGltZSkpCisgICAgICAgICwgZXJyb3IoV1RGTW92ZShlcnJvcikpIHsg
fQorCisgICAgUmVzb3VyY2VFcnJvciBlcnJvcjsKKyAgICBzdGF0aWMgY29uc3QgY2hhciB0eXBl
TmFtZVtdOworfTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc19tb3ZlX2NvbnN0cnVjdGlibGU8Rmlu
aXNoZWRFdmVudD46OnZhbHVlLCAiRmluaXNoZWRFdmVudCBpcyBub3QgbW92ZSBjb25zdHJ1Y3Rp
YmxlIik7CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfbW92ZV9hc3NpZ25hYmxlPEZpbmlzaGVkRXZl
bnQ+Ojp2YWx1ZSwgIkZpbmlzaGVkRXZlbnQgaXMgbm90IG1vdmUgYXNzaWduYWJsZSIpOworCit9
IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVMb2dnaW5nLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDg2ODEyZWIwYzg4YzQyNTcxOGI4MmFmODQwZDg5ZTk1NDBmZTNmNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0
d29ya0NhcHR1cmVMb2dnaW5nLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKworI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKKworI2RlZmluZSBFTkFCTEVfV1RGX0lOVEVSTkFMX0RFQlVHR0lORyAgIDAKKworI2Rl
ZmluZSBERUJVR19TVFIocykgICAgICAgICAgICAgICAgICAgIChzKS5hc2NpaSgpLmRhdGEoKQor
CisjaWYgRU5BQkxFKFdURl9JTlRFUk5BTF9ERUJVR0dJTkcpCisjZGVmaW5lIERFQlVHX0xPR19R
VU9URShzdHIpICAgICAgICAgICAgI3N0cgorI2RlZmluZSBERUJVR19MT0dfRVhQQU5EX0FORF9R
VU9URShzdHIpIERFQlVHX0xPR19RVU9URShzdHIpCisjZGVmaW5lIERFQlVHX0xPRyhmb3JtYXQs
IC4uLikgICAgICAgICAgUkVMRUFTRV9MT0coTmV0d29yaywgIiNQTFQ6ICVwIC0gJXtwdWJsaWN9
czo6JXtwdWJsaWN9czogIiBmb3JtYXQsIHRoaXMsIERFQlVHX0xPR19FWFBBTkRfQU5EX1FVT1RF
KERFQlVHX0NMQVNTKSwgX19GVU5DVElPTl9fLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBERUJV
R19MT0dfRVJST1IoZm9ybWF0LCAuLi4pICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIj
UExUOiAlcCAtICV7cHVibGljfXM6OiV7cHVibGljfXM6ICIgZm9ybWF0LCB0aGlzLCBERUJVR19M
T0dfRVhQQU5EX0FORF9RVU9URShERUJVR19DTEFTUyksIF9fRlVOQ1RJT05fXywgIyNfX1ZBX0FS
R1NfXykKKyNlbHNlCisjZGVmaW5lIERFQlVHX0xPRyguLi4pICAgICAgICAgICAgICAgICAgKCh2
b2lkKTApCisjZGVmaW5lIERFQlVHX0xPR19FUlJPUiguLi4pICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoTmV0d29yaywgX19WQV9BUkdTX18pCisjZW5kaWYKKworI2VuZGlmIC8vIEVOQUJM
RShORVRXT1JLX0NBUFRVUkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlTWFuYWdlci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZDg1NWQ1ZTRmNjkzNzllYjAwODBlN2FiZDhhZTMzNzRkZDM2ZjU1ZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1
cmVNYW5hZ2VyLmNwcApAQCAtMCwwICsxLDYwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCIKKworI2lmIEVOQUJM
RShORVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCIK
KyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmgiCisjaW5jbHVkZSAiV2ViQ29yZS9S
ZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJXZWJDb3JlL1VSTC5oIgorI2luY2x1ZGUgPHd0
Zi9NRDUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8aXRl
cmF0b3I+CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjZGVmaW5l
IERFQlVHX0NMQVNTIE1hbmFnZXIKKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0
d29ya0NhcHR1cmUgeworCitzdGF0aWMgY29uc3QgY2hhcioga0Rpck5hbWVSZWNvcmRSZXBsYXkg
PSAiV2ViS2l0UGVyZi9yZWNvcmRfcmVwbGF5IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrRGlyTmFt
ZVJlc291cmNlcyA9ICJyZXNvdXJjZXMiOworc3RhdGljIGNvbnN0IGNoYXIqIGtGaWxlTmFtZVJl
cG9ydExvYWQgPSAicmVwb3J0X2xvYWQudHh0IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrRmlsZU5h
bWVSZXBvcnRSZWNvcmQgPSAicmVwb3J0X3JlY29yZC50eHQiOworc3RhdGljIGNvbnN0IGNoYXIq
IGtGaWxlTmFtZVJlcG9ydFJlcGxheSA9ICJyZXBvcnRfcmVwbGF5LnR4dCI7CisKK3N0YXRpYyBp
bnQga01heE1hdGNoID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKK3N0YXRpYyBp
bnQga01pbk1hdGNoID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKTsKKworTWFuYWdl
ciYgTWFuYWdlcjo6c2luZ2xldG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWFu
YWdlcj4gaW5zdGFuY2U7CisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCit2b2lkIE1hbmFnZXI6
OmluaXRpYWxpemUoY29uc3QgU3RyaW5nJiByZWNvcmRSZXBsYXlNb2RlLCBjb25zdCBTdHJpbmcm
IHJlY29yZFJlcGxheUNhY2hlTG9jYXRpb24pCit7CisgICAgREVCVUdfTE9HKCJJbml0aWFsaXpp
bmciKTsKKworICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHJlY29yZFJlcGxheU1vZGUs
ICJyZWNvcmQiKSkKKyAgICAgICAgbV9yZWNvcmRSZXBsYXlNb2RlID0gUmVjb3JkOworICAgIGVs
c2UgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UocmVjb3JkUmVwbGF5TW9kZSwgInJlcGxheSIp
KQorICAgICAgICBtX3JlY29yZFJlcGxheU1vZGUgPSBSZXBsYXk7CisgICAgZWxzZQorICAgICAg
ICBtX3JlY29yZFJlcGxheU1vZGUgPSBEaXNhYmxlZDsKKworICAgIG1fcmVjb3JkUmVwbGF5Q2Fj
aGVMb2NhdGlvbiA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChyZWNvcmRSZXBs
YXlDYWNoZUxvY2F0aW9uLCBrRGlyTmFtZVJlY29yZFJlcGxheSk7CisKKyAgICBERUJVR19MT0co
IkNhY2hlIGxvY2F0aW9uID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX3JlY29yZFJlcGxheUNh
Y2hlTG9jYXRpb24pKTsKKworICAgIGlmIChpc1JlcGxheWluZygpKQorICAgICAgICBsb2FkUmVz
b3VyY2VzKCk7Cit9CisKK3ZvaWQgTWFuYWdlcjo6dGVybWluYXRlKCkKK3sKKyAgICBtX2xvYWRG
aWxlSGFuZGxlLmNsb3NlRmlsZSgpOworICAgIG1fcmVwbGF5RmlsZUhhbmRsZS5jbG9zZUZpbGUo
KTsKKyAgICBtX3JlY29yZEZpbGVIYW5kbGUuY2xvc2VGaWxlKCk7Cit9CisKK1Jlc291cmNlKiBN
YW5hZ2VyOjpmaW5kTWF0Y2goY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
KQoreworICAgIC8vIERFQlVHX0xPRygiVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihyZXF1
ZXN0LnVybCgpLnN0cmluZygpKSk7CisKKyAgICBhdXRvIGJlc3RNYXRjaCA9IGZpbmRFeGFjdE1h
dGNoKHJlcXVlc3QpOworICAgIGlmICghYmVzdE1hdGNoKQorICAgICAgICBiZXN0TWF0Y2ggPSBm
aW5kQmVzdEZ1enp5TWF0Y2gocmVxdWVzdCk7CisKKyNpZiBFTkFCTEUoV1RGX0lOVEVSTkFMX0RF
QlVHR0lORykKKyAgICBpZiAoIWJlc3RNYXRjaCkKKyAgICAgICAgREVCVUdfTE9HKCJDb3VsZCBu
b3QgZmluZCBtYXRjaCBmb3I6ICV7cHVibGljfXMiLCBERUJVR19TVFIocmVxdWVzdC51cmwoKS5z
dHJpbmcoKSkpOworICAgIGVsc2UgaWYgKHJlcXVlc3QudXJsKCkgPT0gYmVzdE1hdGNoLT51cmwo
KSkKKyAgICAgICAgREVCVUdfTE9HKCJGb3VuZCBleGFjdCBtYXRjaCBmb3I6ICV7cHVibGljfXMi
LCBERUJVR19TVFIocmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworICAgIGVsc2UgeworICAgICAg
ICBERUJVR19MT0coIkZvdW5kIGZ1enp5IG1hdGNoIGZvcjogJXtwdWJsaWN9cyIsIERFQlVHX1NU
UihyZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisgICAgICAgIERFQlVHX0xPRygiICAgICAgIHJl
cGxhY2VkIHdpdGggOiAle3B1YmxpY31zIiwgREVCVUdfU1RSKGJlc3RNYXRjaC0+dXJsKCkuc3Ry
aW5nKCkpKTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBiZXN0TWF0Y2g7Cit9CisKK1Jl
c291cmNlKiBNYW5hZ2VyOjpmaW5kRXhhY3RNYXRjaChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCit7CisgICAgY29uc3QgYXV0byYgdXJsID0gcmVxdWVzdC51cmwoKTsK
KyAgICBhdXRvIGxvd2VyID0gc3RkOjpsb3dlcl9ib3VuZChzdGQ6OmJlZ2luKG1fY2FjaGVkUmVz
b3VyY2VzKSwgc3RkOjplbmQobV9jYWNoZWRSZXNvdXJjZXMpLCB1cmwsIFtdKGF1dG8mIHJlc291
cmNlLCBjb25zdCBhdXRvJiB1cmwpIHsKKyAgICAgICAgcmV0dXJuIFdURjo6Y29kZVBvaW50Q29t
cGFyZUxlc3NUaGFuKHJlc291cmNlLnVybCgpLnN0cmluZygpLCB1cmwuc3RyaW5nKCkpOworICAg
IH0pOworCisgICAgaWYgKGxvd2VyICE9IHN0ZDo6ZW5kKG1fY2FjaGVkUmVzb3VyY2VzKSAmJiBs
b3dlci0+dXJsKCkgPT0gdXJsKSB7CisgICAgICAgIC8vIERFQlVHX0xPRygiRm91bmQgZXhhY3Qg
bWF0Y2g6ICV7cHVibGljfXMiLCBERUJVR19TVFIobG93ZXItPnVybCgpLnN0cmluZygpKSk7Cisg
ICAgICAgIHJldHVybiAmKmxvd2VyOworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQor
CitSZXNvdXJjZSogTWFuYWdlcjo6ZmluZEJlc3RGdXp6eU1hdGNoKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBjb25zdCBhdXRvJiB1cmwgPSByZXF1ZXN0
LnVybCgpOworICAgIFJlc291cmNlKiBiZXN0TWF0Y2ggPSBudWxscHRyOworICAgIGludCBiZXN0
U2NvcmUgPSBrTWluTWF0Y2g7CisgICAgY29uc3QgYXV0byYgYmFzZVVSTCA9IHVybC5zdHJpbmco
KS5sZWZ0KHVybC5wYXRoU3RhcnQoKSk7CisKKyAgICBjb25zdCBhdXRvJiBsb3dlciA9IHN0ZDo6
bG93ZXJfYm91bmQoc3RkOjpiZWdpbihtX2NhY2hlZFJlc291cmNlcyksIHN0ZDo6ZW5kKG1fY2Fj
aGVkUmVzb3VyY2VzKSwgYmFzZVVSTCwgW10oYXV0byYgcmVzb3VyY2UsIGNvbnN0IGF1dG8mIHVy
bCkgeworICAgICAgICByZXR1cm4gV1RGOjpjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4ocmVzb3Vy
Y2UuYmFzZVVSTCgpLnN0cmluZygpLCB1cmwpOworICAgIH0pOworICAgIGNvbnN0IGF1dG8mIHVw
cGVyID0gc3RkOjp1cHBlcl9ib3VuZChsb3dlciwgc3RkOjplbmQobV9jYWNoZWRSZXNvdXJjZXMp
LCBiYXNlVVJMLCBbXShjb25zdCBhdXRvJiB1cmwsIGF1dG8mIHJlc291cmNlKSB7CisgICAgICAg
IHJldHVybiBXVEY6OmNvZGVQb2ludENvbXBhcmVMZXNzVGhhbihyZXNvdXJjZS5iYXNlVVJMKCku
c3RyaW5nKCksIHVybCk7CisgICAgfSk7CisKKyAgICBjb25zdCBhdXRvJiByZXF1ZXN0UGFyYW1l
dGVycyA9IFdlYkNvcmU6OlVSTFBhcnNlcjo6cGFyc2VVUkxFbmNvZGVkRm9ybSh1cmwucXVlcnko
KSk7CisgICAgZm9yIChhdXRvIGlSZXNvdXJjZSA9IGxvd2VyOyBpUmVzb3VyY2UgIT0gdXBwZXI7
ICsraVJlc291cmNlKSB7CisgICAgICAgIGludCB0aGlzU2NvcmUgPSBmdXp6eU1hdGNoVVJMcyh1
cmwsIHJlcXVlc3RQYXJhbWV0ZXJzLCBpUmVzb3VyY2UtPnVybCgpLCBpUmVzb3VyY2UtPnF1ZXJ5
UGFyYW1ldGVycygpKTsKKyAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgaWdub3JpbmcgYW55IG1h
dGNoZXMgPCAwIGFzIGJlaW5nIHRvbyBkaWZmZXJlbnQuCisgICAgICAgIGlmIChiZXN0U2NvcmUg
PCB0aGlzU2NvcmUpIHsKKyAgICAgICAgICAgIERFQlVHX0xPRygiTmV3IGJlc3QgbWF0Y2ggKCVk
KTogJXtwdWJsaWN9cyIsIHRoaXNTY29yZSwgREVCVUdfU1RSKGlSZXNvdXJjZS0+dXJsKCkuc3Ry
aW5nKCkpKTsKKyAgICAgICAgICAgIGJlc3RTY29yZSA9IHRoaXNTY29yZTsKKyAgICAgICAgICAg
IGJlc3RNYXRjaCA9ICYqaVJlc291cmNlOworICAgICAgICAgICAgaWYgKGJlc3RTY29yZSA9PSBr
TWF4TWF0Y2gpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gYmVzdE1hdGNoOworfQorCisvLyBUT0RPOiBDb252ZXJ0IHRvIGFuIGludGVyZmFj
ZSBiYXNlZCBvbiBSZXNvdXJjZVJlcXVlc3Qgc28gdGhhdCB3ZSBjYW4gZG8KKy8vIGRlZXBlciBt
YXRjaGluZy4KKworaW50IE1hbmFnZXI6OmZ1enp5TWF0Y2hVUkxzKGNvbnN0IFdlYkNvcmU6OlVS
TCYgcmVxdWVzdFVSTCwgY29uc3QgV2ViQ29yZTo6VVJMUGFyc2VyOjpVUkxFbmNvZGVkRm9ybSYg
cmVxdWVzdFBhcmFtZXRlcnMsIGNvbnN0IFdlYkNvcmU6OlVSTCYgcmVzb3VyY2VVUkwsIGNvbnN0
IFdlYkNvcmU6OlVSTFBhcnNlcjo6VVJMRW5jb2RlZEZvcm0mIHJlc291cmNlUGFyYW1ldGVycykK
K3sKKyAgICAvLyBUT0RPOiBjb25zaWRlciByZXF1aXJpbmcgdGhhdCBhbnkgdHJhaWxpbmcgc3Vm
Zml4ZXMgKGUuZy4sICIuanMiLAorICAgIC8vICIucG5nIiwgIi5jc3MiLCAiLmh0bWwiLCBldGMu
KSBzaG91bGQgYmUgYW4gZXhhY3QgbWF0Y2guCisKKyAgICAvLyBXZSBkbyBmdXp6eSBtYXRjaGlu
ZyBvbiB0aGUgcGF0aCBhbmQgcXVlcnkgcGFyYW1ldGVycy4gU28gbGV0J3MgZmlyc3QKKyAgICAv
LyBtYWtlIHN1cmUgdGhhdCBhbGwgdGhlIG90aGVyIHBhcnRzIGFyZSBlcXVhbC4KKworICAgIC8v
IElmIHNjaGVtZSwgaG9zdCwgYW5kIHBvcnQgZG9uJ3QgYWxsIG1hdGNoLCByZXR1cm4gdGhpcyBh
cyB0aGUgIndvcnN0IgorICAgIC8vIG1hdGNoLgorCisgICAgaWYgKCFwcm90b2NvbEhvc3RBbmRQ
b3J0QXJlRXF1YWwocmVxdWVzdFVSTCwgcmVzb3VyY2VVUkwpKSB7CisgICAgICAgIERFQlVHX0xP
RygiU2NoZW1lL2hvc3QvcG9ydCBtaXNtYXRjaDogJXtwdWJsaWN9cyAhPSAle3B1YmxpY31zIiwg
REVCVUdfU1RSKHJlcXVlc3RVUkwuc3RyaW5nKCkpLCBERUJVR19TVFIocmVzb3VyY2VVUkwuc3Ry
aW5nKCkpKTsKKyAgICAgICAgcmV0dXJuIGtNaW5NYXRjaDsKKyAgICB9CisKKyAgICAvLyBJZiBm
cmFnbWVudHMgZG9uJ3QgbWF0Y2gsIHJldHVybiB0aGlzIGFzIHRoZSAid29yc3QiIG1hdGNoLgor
CisgICAgaWYgKHJlcXVlc3RVUkwuZnJhZ21lbnRJZGVudGlmaWVyKCkgIT0gcmVzb3VyY2VVUkwu
ZnJhZ21lbnRJZGVudGlmaWVyKCkpIHsKKyAgICAgICAgREVCVUdfTE9HKCJGcmFnbWVudHMgbWlz
bWF0Y2g6ICV7cHVibGljfXMgIT0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihyZXF1ZXN0VVJMLnN0
cmluZygpKSwgREVCVUdfU1RSKHJlc291cmNlVVJMLnN0cmluZygpKSk7CisgICAgICAgIHJldHVy
biBrTWluTWF0Y2g7CisgICAgfQorCisgICAgREVCVUdfTE9HKCJGdXp6eSBtYXRjaGluZzoiKTsK
KyAgICBERUJVR19MT0coIiAgIDogJXtwdWJsaWN9cyIsIERFQlVHX1NUUihyZXF1ZXN0VVJMLnN0
cmluZygpKSk7CisgICAgREVCVUdfTE9HKCIgICA6ICV7cHVibGljfXMiLCBERUJVR19TVFIocmVz
b3VyY2VVUkwuc3RyaW5nKCkpKTsKKworICAgIC8vIENvbXBhcmUgdGhlIHBhdGggY29tcG9uZW50
cyBhbmQgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMuIFNjb3JlIGVhY2ggcGFydGlhbAorICAgIC8vIG1h
dGNoIGFzICs0LCBlYWNoIG1pc21hdGNoIGFzIC0xLCBhbmQgZWFjaCBtaXNzaW5nIGNvbXBvbmVu
dCBhcyAtMS4KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCBhdCB0aGUgY3VycmVudCB0aW1lIHRo
ZXNlIHZhbHVlcyBhcmUgcmF0aGVyIGFyYml0cmFyeSBhbmQKKyAgICAvLyBjb3VsZCBmaW5lLXR1
bmVkLgorCisgICAgY29uc3QgaW50IGtQYXRoTWF0Y2hTY29yZSA9IDQ7CisgICAgY29uc3QgaW50
IGtQYXRoTWlzbWF0Y2hTY29yZSA9IC0xOworICAgIGNvbnN0IGludCBrUGF0aE1pc3NpbmdTY29y
ZSA9IC0xOworICAgIGNvbnN0IGludCBrUGFyYW1ldGVyTWF0Y2hTY29yZSA9IDQ7CisgICAgY29u
c3QgaW50IGtQYXJhbWV0ZXJNaXNtYXRjaFNjb3JlID0gLTE7CisgICAgY29uc3QgaW50IGtQYXJh
bWV0ZXJNaXNzaW5nU2NvcmUgPSAtMTsKKworICAgIGludCBzY29yZSA9IDA7CisKKyAgICAvLyBR
dWFudGl6ZSB0aGUgZGlmZmVyZW5jZXMgaW4gVVJMIHBhdGhzLgorICAgIC8vCisgICAgLy8gVGhl
IGFwcHJvYWNoIGhlcmUgaXMgdG8gaW5jcmVhc2Ugb3VyIHNjb3JlIGZvciBlYWNoIG1hdGNoaW5n
IHBhdGgKKyAgICAvLyBjb21wb25lbnQsIGFuZCB0byBzdWJ0cmFjdCBmb3IgZWFjaCBkaWZmZXJp
bmcgY29tcG9uZW50IGFzIHdlbGwgYXMgZm9yCisgICAgLy8gY29tcG9uZW50cyB0aGF0IGV4aXN0
IGluIG9uZSBwYXRoIGJ1dCBub3QgdGhlIG90aGVyLgorCisgICAgY29uc3QgYXV0byYgcmVxdWVz
dFBhdGggPSByZXF1ZXN0VVJMLnBhdGgoKTsKKyAgICBjb25zdCBhdXRvJiByZXNvdXJjZVBhdGgg
PSByZXNvdXJjZVVSTC5wYXRoKCk7CisKKyAgICBWZWN0b3I8U3RyaW5nPiByZXF1ZXN0UGF0aENv
bXBvbmVudHMsIHJlc291cmNlUGF0aENvbXBvbmVudHM7CisgICAgcmVxdWVzdFBhdGguc3BsaXQo
Jy8nLCByZXF1ZXN0UGF0aENvbXBvbmVudHMpOworICAgIHJlc291cmNlUGF0aC5zcGxpdCgnLycs
IHJlc291cmNlUGF0aENvbXBvbmVudHMpOworCisgICAgYXV0byB1cGRhdGVkSXRlcmF0b3JzID0g
c3RkOjptaXNtYXRjaCgKKyAgICAgICAgc3RkOjpiZWdpbihyZXF1ZXN0UGF0aENvbXBvbmVudHMp
LCBzdGQ6OmVuZChyZXF1ZXN0UGF0aENvbXBvbmVudHMpLAorICAgICAgICBzdGQ6OmJlZ2luKHJl
c291cmNlUGF0aENvbXBvbmVudHMpLCBzdGQ6OmVuZChyZXNvdXJjZVBhdGhDb21wb25lbnRzKSk7
CisKKyAgICBhdXRvIG1hdGNoaW5nRGlzdGFuY2UgPSBzdGQ6OmRpc3RhbmNlKHN0ZDo6YmVnaW4o
cmVxdWVzdFBhdGhDb21wb25lbnRzKSwgdXBkYXRlZEl0ZXJhdG9ycy5maXJzdCk7CisgICAgYXV0
byByZXF1ZXN0UGF0aE1pc21hdGNoRGlzdGFuY2UgPSBzdGQ6OmRpc3RhbmNlKHVwZGF0ZWRJdGVy
YXRvcnMuZmlyc3QsIHN0ZDo6ZW5kKHJlcXVlc3RQYXRoQ29tcG9uZW50cykpOworICAgIGF1dG8g
cmVzb3VyY2VQYXRoTWlzbWF0Y2hEaXN0YW5jZSA9IHN0ZDo6ZGlzdGFuY2UodXBkYXRlZEl0ZXJh
dG9ycy5zZWNvbmQsIHN0ZDo6ZW5kKHJlc291cmNlUGF0aENvbXBvbmVudHMpKTsKKyAgICBkZWNs
dHlwZShtYXRjaGluZ0Rpc3RhbmNlKSBtaXNtYXRjaGluZ0Rpc3RhbmNlOworICAgIGRlY2x0eXBl
KG1hdGNoaW5nRGlzdGFuY2UpIG1pc3NpbmdEaXN0YW5jZTsKKyAgICBpZiAocmVxdWVzdFBhdGhN
aXNtYXRjaERpc3RhbmNlIDwgcmVzb3VyY2VQYXRoTWlzbWF0Y2hEaXN0YW5jZSkgeworICAgICAg
ICBtaXNtYXRjaGluZ0Rpc3RhbmNlID0gcmVxdWVzdFBhdGhNaXNtYXRjaERpc3RhbmNlOworICAg
ICAgICBtaXNzaW5nRGlzdGFuY2UgPSByZXNvdXJjZVBhdGhNaXNtYXRjaERpc3RhbmNlIC0gcmVx
dWVzdFBhdGhNaXNtYXRjaERpc3RhbmNlOworICAgIH0gZWxzZSB7CisgICAgICAgIG1pc21hdGNo
aW5nRGlzdGFuY2UgPSByZXNvdXJjZVBhdGhNaXNtYXRjaERpc3RhbmNlOworICAgICAgICBtaXNz
aW5nRGlzdGFuY2UgPSByZXF1ZXN0UGF0aE1pc21hdGNoRGlzdGFuY2UgLSByZXNvdXJjZVBhdGhN
aXNtYXRjaERpc3RhbmNlOworICAgIH0KKworICAgIERFQlVHX0xPRygiUGF0aCBtYXRjaGluZyBy
ZXN1bHRzOiBtYXRjaGluZyA9ICVkLCBtaXNtYXRjaGluZyA9ICVkLCBtaXNzaW5nID0gJWQiLAor
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG1hdGNoaW5nRGlzdGFuY2UpLAorICAgICAgICBzdGF0
aWNfY2FzdDxpbnQ+KG1pc21hdGNoaW5nRGlzdGFuY2UpLAorICAgICAgICBzdGF0aWNfY2FzdDxp
bnQ+KG1pc3NpbmdEaXN0YW5jZSkpOworCisgICAgc2NvcmUgKz0gbWF0Y2hpbmdEaXN0YW5jZSAq
IGtQYXRoTWF0Y2hTY29yZQorICAgICAgICArIG1pc21hdGNoaW5nRGlzdGFuY2UgKiBrUGF0aE1p
c21hdGNoU2NvcmUKKyAgICAgICAgKyBtaXNzaW5nRGlzdGFuY2UgKiBrUGF0aE1pc3NpbmdTY29y
ZTsKKyAgICBERUJVR19MT0coIlNjb3JlID0gJWQiLCBzY29yZSk7CisKKyAgICAvLyBRdWFudGl6
ZSB0aGUgZGlmZmVyZW5jZXMgaW4gcXVlcnkgcGFyYW1ldGVycy4KKyAgICAvLworICAgIC8vIFRo
ZSBhcHByb2FjaCBoZXJlIGlzIHRvIHdhbGsgbG9jay1zdGVwIG92ZXIgdGhlIHR3byBzZXRzIG9m
IHF1ZXJ5CisgICAgLy8gcGFyYW1ldGVycy4gRm9yIGVhY2ggcGFpciBvZiBwYXJhbWV0ZXJzIGZv
ciBlYWNoIFVSTCwgd2UgY29tcGFyZSB0aGVpcgorICAgIC8vIG5hbWVzIGFuZCB2YWx1ZXMuIElm
IHRoZSBuYW1lcyBhbmQgdmFsdWVzIG1hdGNoLCB3ZSBhZGQgYSBoaWdoIHNjb3JlLiBJZgorICAg
IC8vIGp1c3QgdGhlIG5hbWVzIG1hdGNoLCB3ZSBhZGQgYSBsb3dlciBzY29yZS4KKyAgICAvLwor
ICAgIC8vIElmIHRoZSBuYW1lcyBkb24ndCBtYXRjaCwgd2UgdGhlbiBhc3N1bWUgdGhhdCBzb21l
IGludGVydmVuaW5nIHF1ZXJ5CisgICAgLy8gcGFyYW1ldGVycyBoYXZlIGJlZW4gYWRkZWQgdG8g
b25lIG9yIHRoZSBvdGhlciBVUkwuIFdlIHRoZXJlZm9yZSB0cnkgdG8KKyAgICAvLyBzeW5jIHVw
IHRoZSBpdGVyYXRvcnMgdXNlZCB0byB0cmF2ZXJzZSB0aGUgcXVlcnkgcGFyYW1ldGVyIGNvbGxl
Y3Rpb25zCisgICAgLy8gc28gdGhhdCB0aGV5J3JlIGFnYWluIHBvaW50aW5nIHRvIHBhcmFtZXRl
cnMgd2l0aCB0aGUgc2FtZSBuYW1lcy4gV2UKKyAgICAvLyBmaXJzdCBzdGFydCBzY2FubmluZyBm
b3J3YXJkIGRvd24gdGhlIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIG9uZSBVUkwsCisgICAgLy8gbG9v
a2luZyBmb3Igb25lIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgb25lIHdlJ3JlIG9uIGluIHRo
ZSBvdGhlciBVUkwuCisgICAgLy8gSWYgdGhhdCBkb2Vzbid0IHR1cm4gdXAgYSBtYXRjaCwgd2Ug
cmV2ZXJzZSB0aGUgcm9sZXMgb2YgdGhlIHF1ZXJ5CisgICAgLy8gcGFyYW1ldGVycyBwZXJmb3Jt
IHRoZSBzYW1lIHByb2Nlc3Mgb2Ygc2Nhbm5pbmcgZm9yd2FyZC4gSWYgbmVpdGhlciBvZgorICAg
IC8vIHRoZXNlIHNjYW5zIHByb2R1Y2VzIGEgbWF0Y2gsIHdlIGZpZ3VyZSB0aGF0IGVhY2ggcXVl
cnkgcGFyYW1ldGVyIHdlJ3JlCisgICAgLy8gbG9va2luZyBhdCBmcm9tIGVhY2ggb2YgdGhlIHF1
ZXJ5IHBhcmFtZXRlciBjb2xsZWN0aW9ucyBpcyB1bmlxdWUuIFdlCisgICAgLy8gZGVkdWN0IHBv
aW50cyBmcm9tIHRoZSBvdmVyYWxsIHNjb3JlIGFuZCBtb3ZlIG9uIHRvIHRoZSBuZXh0IHF1ZXJ5
CisgICAgLy8gcGFyYW1ldGVycyBpbiBlYWNoIHNldC4KKyAgICAvLworICAgIC8vIElmLCBvbiB0
aGUgb3RoZXIgaGFuZCwgdGhlIGZvcndhcmQtc2Nhbm5pbmcgZG9lcyB0dXJuIHVwIGEgbWF0Y2gs
IHdlCisgICAgLy8gYWRqdXN0IG91dCBpdGVyYXRvcnMgc28gdGhhdCB0aGV5J3JlIG5vdyBhZ2Fp
biBwb2ludGluZyB0byBxdWVyeQorICAgIC8vIHBhcmFtZXRlcnMgd2l0aCB0aGUgc2FtZSBuYW1l
LiBUaGlzIHN5bmNocm9uaXphdGlvbiBpbnZvbHZlcyBza2lwcGluZworICAgIC8vIG92ZXIgYW55
IGludGVydmVuaW5nIHF1ZXJ5IHBhcmFtZXRlcnMgaW4gb25lIGNvbGxlY3Rpb24gb3IgdGhlIG90
aGVyLgorICAgIC8vIFRoZSBhc3N1bXB0aW9uIGhlcmUgaXMgdGhhdCB0aGVzZSBpbnRlcnZlbmlu
ZyBxdWVyeSBwYXJhbWV0ZXJzIGFyZQorICAgIC8vIGluc2VydGlvbnMgdGhhdCBleGlzdCBpbiBv
bmUgVVJMIGJ1dCBub3QgdGhlIG90aGVyLiBXZSB0cmVhdCB0aGVtIGFzCisgICAgLy8gc3VjaCwg
c3VidHJhY3RpbmcgZnJvbSB0aGUgb3ZlcmFsbCBzY29yZSBmb3IgZWFjaCBvbmUuIEhvd2V2ZXIs
IHRoaXMKKyAgICAvLyBhc3N1bXB0aW9uIG1pZ2h0IGVhc2lseSBiZSBpbmNvcnJlY3QuIEl0IG1p
Z2h0IGJlIHRoYXQgdGhlIHF1ZXJ5CisgICAgLy8gcGFyYW1ldGVycyB0aGF0IHdlJ3JlIHNraXBw
aW5nIG92ZXIgaW4gb25lIFVSTCBtaWdodCBleGlzdCBpbiB0aGUgb3RoZXIKKyAgICAvLyBVUkwu
IElmIHNvLCB0aGVuIHdlIGFyZSBmb3JlZ29pbmcgdGhlIHBvc3NpYmlsaXR5IG9mIHVzaW5nIHRo
b3NlIG1hdGNoZXMKKyAgICAvLyB0byBpbmNyZWFzZSB0aGUgb3ZlcmFsbCBtYXRjaCBzY29yZSBi
ZXR3ZWVuIHRoZSB0d28gVVJMcy4KKyAgICAvLworICAgIC8vIFRvIGFkZHJlc3MgdGhpcyBwcm9i
bGVtLCB3ZSBtaWdodCB3YW50IHRvIGNvbnNpZGVyIHNvcnRpbmcgdGhlIHF1ZXJ5CisgICAgLy8g
cGFyYW1ldGVycyBieSB0aGVpciBuYW1lcy4gSG93ZXZlciwgZG9pbmcgdGhpcyBtYXkgY2F1c2Ug
cHJvYmxlbXMgaWYgdGhlCisgICAgLy8gb3JkZXIgb2YgdGhlIHBhcmFtZXRlcnMgaXMgc2lnbmlm
aWNhbnQuIFNvIGlmIHdlIGRlY2lkZSB0byB0YWtlIHRoZQorICAgIC8vIGFwcHJvYWNoIG9mIHNv
cnRpbmcgdGhlIHBhcmFtZXRlcnMsIGtlZXAgaW4gbWluZCB0aGlzIHBvc3NpYmxlIGRyYXdiYWNr
LgorCisgICAgYXV0byByZXF1ZXN0UGFyYW1ldGVyID0gc3RkOjpiZWdpbihyZXF1ZXN0UGFyYW1l
dGVycyk7CisgICAgYXV0byByZXNvdXJjZVBhcmFtZXRlciA9IHN0ZDo6YmVnaW4ocmVzb3VyY2VQ
YXJhbWV0ZXJzKTsKKworICAgIGZvciAoOyByZXF1ZXN0UGFyYW1ldGVyICE9IHN0ZDo6ZW5kKHJl
cXVlc3RQYXJhbWV0ZXJzKSAmJiByZXNvdXJjZVBhcmFtZXRlciAhPSBzdGQ6OmVuZChyZXNvdXJj
ZVBhcmFtZXRlcnMpOyArK3JlcXVlc3RQYXJhbWV0ZXIsICsrcmVzb3VyY2VQYXJhbWV0ZXIpIHsK
KyAgICAgICAgaWYgKHJlcXVlc3RQYXJhbWV0ZXItPmZpcnN0ID09IHJlc291cmNlUGFyYW1ldGVy
LT5maXJzdCkgeworI2lmIEVOQUJMRShXVEZfSU5URVJOQUxfREVCVUdHSU5HKQorICAgICAgICAg
ICAgaWYgKHJlcXVlc3RQYXJhbWV0ZXItPnNlY29uZCA9PSByZXNvdXJjZVBhcmFtZXRlci0+c2Vj
b25kKQorICAgICAgICAgICAgICAgIERFQlVHX0xPRygiTWF0Y2hpbmcgcGFyYW1ldGVyIG5hbWVz
IGFuZCB2YWx1ZXM6IFwiJXtwdWJsaWN9c1wiID0gXCIle3B1YmxpY31zXCIiLCBERUJVR19TVFIo
cmVxdWVzdFBhcmFtZXRlci0+Zmlyc3QpLCBERUJVR19TVFIocmVxdWVzdFBhcmFtZXRlci0+c2Vj
b25kKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgREVCVUdfTE9HKCJNaXNt
YXRjaGluZyBwYXJhbWV0ZXIgdmFsdWVzOiBcIiV7cHVibGljfXNcIiA9IFwiJXtwdWJsaWN9c1wi
IHZzLiBcIiV7cHVibGljfXNcIiIsIERFQlVHX1NUUihyZXF1ZXN0UGFyYW1ldGVyLT5maXJzdCks
IERFQlVHX1NUUihyZXF1ZXN0UGFyYW1ldGVyLT5zZWNvbmQpLCBERUJVR19TVFIocmVzb3VyY2VQ
YXJhbWV0ZXItPnNlY29uZCkpOworI2VuZGlmCisgICAgICAgICAgICBzY29yZSArPSAocmVxdWVz
dFBhcmFtZXRlci0+c2Vjb25kID09IHJlc291cmNlUGFyYW1ldGVyLT5zZWNvbmQpID8ga1BhcmFt
ZXRlck1hdGNoU2NvcmUgOiBrUGFyYW1ldGVyTWlzbWF0Y2hTY29yZTsKKyAgICAgICAgICAgIERF
QlVHX0xPRygiU2NvcmUgPSAlZCIsIHNjb3JlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIERFQlVHX0xPRygiTWlzbWF0Y2hpbmcgcGFyYW1ldGVyIG5hbWVzOiAle3B1YmxpY31zLCAl
e3B1YmxpY31zIiwgREVCVUdfU1RSKHJlcXVlc3RQYXJhbWV0ZXItPmZpcnN0KSwgREVCVUdfU1RS
KHJlc291cmNlUGFyYW1ldGVyLT5maXJzdCkpOworCisgICAgICAgICAgICBjb25zdCBhdXRvIHNj
YW5Gb3J3YXJkRm9yTWF0Y2ggPSBbdGhpcywgJnNjb3JlLCBrUGFyYW1ldGVyTWF0Y2hTY29yZSwg
a1BhcmFtZXRlck1pc21hdGNoU2NvcmUsIGtQYXJhbWV0ZXJNaXNzaW5nU2NvcmVdKGNvbnN0IGF1
dG8mIGZpeGVkSXRlciwgYXV0byYgc2Nhbm5pbmdJdGVyLCBjb25zdCBhdXRvJiBzY2FubmVyRW5k
KSB7CisgICAgICAgICAgICAgICAgYXV0byBzY2FubmVyID0gc2Nhbm5pbmdJdGVyOworICAgICAg
ICAgICAgICAgIHdoaWxlIChzY2FubmVyICE9IHNjYW5uZXJFbmQgJiYgc2Nhbm5lci0+Zmlyc3Qg
IT0gZml4ZWRJdGVyLT5maXJzdCkKKyAgICAgICAgICAgICAgICAgICAgKytzY2FubmVyOworICAg
ICAgICAgICAgICAgIGlmIChzY2FubmVyID09IHNjYW5uZXJFbmQpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBERUJVR19MT0coIlNraXBwaW5nIHBh
c3QgJWQgbm9uLW1hdGNoaW5nIHBhcmFtZXRlciBuYW1lcyIsIHN0YXRpY19jYXN0PGludD4oc3Rk
OjpkaXN0YW5jZShzY2FubmluZ0l0ZXIsIHNjYW5uZXIpKSk7CisgICAgICAgICAgICAgICAgc2Nv
cmUgKz0ga1BhcmFtZXRlck1pc3NpbmdTY29yZSAqIHN0ZDo6ZGlzdGFuY2Uoc2Nhbm5pbmdJdGVy
LCBzY2FubmVyKTsKKyAgICAgICAgICAgICAgICBERUJVR19MT0coIlNjb3JlID0gJWQiLCBzY29y
ZSk7CisjaWYgRU5BQkxFKFdURl9JTlRFUk5BTF9ERUJVR0dJTkcpCisgICAgICAgICAgICAgICAg
aWYgKGZpeGVkSXRlci0+c2Vjb25kID09IHNjYW5uZXItPnNlY29uZCkKKyAgICAgICAgICAgICAg
ICAgICAgREVCVUdfTE9HKCJNYXRjaGluZyBwYXJhbWV0ZXIgbmFtZXMgYW5kIHZhbHVlczogXCIl
e3B1YmxpY31zXCIgPSBcIiV7cHVibGljfXNcIiIsIERFQlVHX1NUUihmaXhlZEl0ZXItPmZpcnN0
KSwgREVCVUdfU1RSKGZpeGVkSXRlci0+c2Vjb25kKSk7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICBERUJVR19MT0coIk1pc21hdGNoaW5nIHBhcmFtZXRlciB2YWx1
ZXM6IFwiJXtwdWJsaWN9c1wiID0gXCIle3B1YmxpY31zXCIgdnMuIFwiJXtwdWJsaWN9c1wiIiwg
REVCVUdfU1RSKGZpeGVkSXRlci0+Zmlyc3QpLCBERUJVR19TVFIoZml4ZWRJdGVyLT5zZWNvbmQp
LCBERUJVR19TVFIoc2Nhbm5lci0+c2Vjb25kKSk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBz
Y29yZSArPSAoZml4ZWRJdGVyLT5zZWNvbmQgPT0gc2Nhbm5lci0+c2Vjb25kKSA/IGtQYXJhbWV0
ZXJNYXRjaFNjb3JlIDoga1BhcmFtZXRlck1pc21hdGNoU2NvcmU7CisgICAgICAgICAgICAgICAg
REVCVUdfTE9HKCJTY29yZSA9ICVkIiwgc2NvcmUpOworICAgICAgICAgICAgICAgIHNjYW5uaW5n
SXRlciA9IHNjYW5uZXI7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9OworCisgICAgICAgICAgICBpZiAoIXNjYW5Gb3J3YXJkRm9yTWF0Y2gocmVxdWVzdFBhcmFt
ZXRlciwgcmVzb3VyY2VQYXJhbWV0ZXIsIHN0ZDo6ZW5kKHJlc291cmNlUGFyYW1ldGVycykpKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFzY2FuRm9yd2FyZEZvck1hdGNoKHJlc291cmNlUGFyYW1l
dGVyLCByZXF1ZXN0UGFyYW1ldGVyLCBzdGQ6OmVuZChyZXF1ZXN0UGFyYW1ldGVycykpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIERFQlVHX0xPRygiVW5tYXRjaGVkIHBhcmFtZXRlcjogJXtwdWJs
aWN9cz0le3B1YmxpY31zIiwgREVCVUdfU1RSKHJlcXVlc3RQYXJhbWV0ZXItPmZpcnN0KSwgREVC
VUdfU1RSKHJlcXVlc3RQYXJhbWV0ZXItPnNlY29uZCkpOworICAgICAgICAgICAgICAgICAgICBE
RUJVR19MT0coIlVubWF0Y2hlZCBwYXJhbWV0ZXI6ICV7cHVibGljfXM9JXtwdWJsaWN9cyIsIERF
QlVHX1NUUihyZXNvdXJjZVBhcmFtZXRlci0+Zmlyc3QpLCBERUJVR19TVFIocmVzb3VyY2VQYXJh
bWV0ZXItPnNlY29uZCkpOworICAgICAgICAgICAgICAgICAgICBzY29yZSArPSBrUGFyYW1ldGVy
TWlzc2luZ1Njb3JlICsga1BhcmFtZXRlck1pc3NpbmdTY29yZTsKKyAgICAgICAgICAgICAgICAg
ICAgREVCVUdfTE9HKCJTY29yZSA9ICVkIiwgc2NvcmUpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIERFQlVHX0xPRygiQWRqdXN0aW5n
IGZvciB0cmFpbGluZyBwYXJhbWV0ZXJzIik7CisgICAgc2NvcmUgKz0ga1BhcmFtZXRlck1pc3Np
bmdTY29yZQorICAgICAgICAqIChzdGQ6OmRpc3RhbmNlKHJlcXVlc3RQYXJhbWV0ZXIsIHN0ZDo6
ZW5kKHJlcXVlc3RQYXJhbWV0ZXJzKSkKKyAgICAgICAgICAgICsgc3RkOjpkaXN0YW5jZShyZXNv
dXJjZVBhcmFtZXRlciwgc3RkOjplbmQocmVzb3VyY2VQYXJhbWV0ZXJzKSkpOworICAgIERFQlVH
X0xPRygiU2NvcmUgPSAlZCIsIHNjb3JlKTsKKworICAgIHJldHVybiBzY29yZTsKK30KKwordm9p
ZCBNYW5hZ2VyOjpsb2FkUmVzb3VyY2VzKCkKK3sKKyAgICBWZWN0b3I8VmVjdG9yPFN0cmluZz4+
IGxpbmVzOworICAgIGlmICghcmVhZEZpbGUocmVwb3J0UmVjb3JkUGF0aCgpLCBsaW5lcykpCisg
ICAgICAgIHJldHVybjsKKworICAgIGZvciAoY29uc3QgYXV0byYgbGluZSA6IGxpbmVzKSB7Cisg
ICAgICAgIGlmIChsaW5lLnNpemUoKSAhPSAyKSB7CisgICAgICAgICAgICBERUJVR19MT0dfRVJS
T1IoImxpbmUuc2l6ZSA9PSAlZCIsIChpbnQpIGxpbmUuc2l6ZSgpKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgUmVzb3VyY2UgbmV3UmVzb3VyY2UoaGFzaFRv
UGF0aChsaW5lWzBdKSk7CisgICAgICAgIG1fY2FjaGVkUmVzb3VyY2VzLmFwcGVuZChXVEZNb3Zl
KG5ld1Jlc291cmNlKSk7CisgICAgfQorCisgICAgc3RkOjpzb3J0KHN0ZDo6YmVnaW4obV9jYWNo
ZWRSZXNvdXJjZXMpLCBzdGQ6OmVuZChtX2NhY2hlZFJlc291cmNlcyksIFtdKGF1dG8mIGxlZnQs
IGF1dG8mIHJpZ2h0KSB7CisgICAgICAgIHJldHVybiBXVEY6OmNvZGVQb2ludENvbXBhcmVMZXNz
VGhhbihsZWZ0LnVybCgpLnN0cmluZygpLCByaWdodC51cmwoKS5zdHJpbmcoKSk7CisgICAgfSk7
CisKKyAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogbV9jYWNoZWRSZXNvdXJjZXMpCisgICAgICAg
IGxvZ0xvYWRlZFJlc291cmNlKHJlc291cmNlKTsKK30KKworU3RyaW5nIE1hbmFnZXI6OnJlcG9y
dExvYWRQYXRoKCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KG1fcmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbiwga0ZpbGVOYW1lUmVwb3J0TG9hZCk7Cit9
CisKK1N0cmluZyBNYW5hZ2VyOjpyZXBvcnRSZWNvcmRQYXRoKCkKK3sKKyAgICByZXR1cm4gV2Vi
Q29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1fcmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlv
biwga0ZpbGVOYW1lUmVwb3J0UmVjb3JkKTsKK30KKworU3RyaW5nIE1hbmFnZXI6OnJlcG9ydFJl
cGxheVBhdGgoKQoreworICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQobV9yZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uLCBrRmlsZU5hbWVSZXBvcnRSZXBsYXkpOwor
fQorCitTdHJpbmcgTWFuYWdlcjo6cmVxdWVzdFRvUGF0aChjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgLy8gVE9ETzogY29tZSB1cCB3aXRoIGEgbW9yZSBj
b21wcmVoZW5zaXZlIGhhc2ggdGhhdCBpbmNsdWRlcyBIVFRQIG1ldGhvZAorICAgIC8vIGFuZCBw
b3NzaWJseSBvdGhlciB2YWx1ZXMgKHN1Y2ggYXMgaGVhZGVycykuCisKKyAgICBjb25zdCBhdXRv
JiBoYXNoID0gc3RyaW5nVG9IYXNoKHJlcXVlc3QudXJsKCkuc3RyaW5nKCkpOworICAgIGNvbnN0
IGF1dG8mIHBhdGggPSBoYXNoVG9QYXRoKGhhc2gpOworICAgIHJldHVybiBwYXRoOworfQorCitT
dHJpbmcgTWFuYWdlcjo6c3RyaW5nVG9IYXNoKGNvbnN0IFN0cmluZyYgcykKK3sKKyAgICBXVEY6
Ok1ENSBtZDU7CisgICAgaWYgKHMuY2hhcmFjdGVyczgoKSkKKyAgICAgICAgbWQ1LmFkZEJ5dGVz
KHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihzLmNoYXJhY3RlcnM4KCkpLCBzLmxlbmd0aCgp
KTsKKyAgICBlbHNlCisgICAgICAgIG1kNS5hZGRCeXRlcyhyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihzLmNoYXJhY3RlcnMxNigpKSwgMiAqIHMubGVuZ3RoKCkpOworCisgICAgV1RG
OjpNRDU6OkRpZ2VzdCBkaWdlc3Q7CisgICAgbWQ1LmNoZWNrc3VtKGRpZ2VzdCk7CisKKyAgICBy
ZXR1cm4gV1RGOjpiYXNlNjRVUkxFbmNvZGUoJmRpZ2VzdFswXSwgV1RGOjpNRDU6Omhhc2hTaXpl
KTsKK30KKworU3RyaW5nIE1hbmFnZXI6Omhhc2hUb1BhdGgoY29uc3QgU3RyaW5nJiBoYXNoKQor
eworICAgIFN0cmluZ0J1aWxkZXIgaGFzaGVkRmlsZU5hbWU7CisKKyAgICBjb25zdCBpbnQga051
bWJlck9mUGFyZW50RGlyZWN0b3JpZXMgPSAxOworICAgIGNvbnN0IGludCBrUGFyZW50RGlyZWN0
b3J5TmFtZUxlbmd0aCA9IDI7CisgICAgdW5zaWduZWQgaW5kZXggPSAwOworCisgICAgZm9yIChp
bnQgZGlyTnVtID0gMDsgZGlyTnVtIDwga051bWJlck9mUGFyZW50RGlyZWN0b3JpZXM7ICsrZGly
TnVtKSB7CisgICAgICAgIGhhc2hlZEZpbGVOYW1lLmFwcGVuZChoYXNoLnN1YnN0cmluZyhpbmRl
eCwga1BhcmVudERpcmVjdG9yeU5hbWVMZW5ndGgpKTsKKyAgICAgICAgaGFzaGVkRmlsZU5hbWUu
YXBwZW5kKCcvJyk7CisgICAgICAgIGluZGV4ICs9IGtQYXJlbnREaXJlY3RvcnlOYW1lTGVuZ3Ro
OworICAgIH0KKworICAgIGhhc2hlZEZpbGVOYW1lLmFwcGVuZChoYXNoLnN1YnN0cmluZyhpbmRl
eCkpOworICAgIGhhc2hlZEZpbGVOYW1lLmFwcGVuZCgiLmRhdGEiKTsKKworICAgIHJldHVybiBX
ZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoCisgICAgICAgIFdlYkNvcmU6OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChtX3JlY29yZFJlcGxheUNhY2hlTG9jYXRpb24sIGtEaXJOYW1l
UmVzb3VyY2VzKSwKKyAgICAgICAgaGFzaGVkRmlsZU5hbWUudG9TdHJpbmcoKSk7Cit9CisKK3Zv
aWQgTWFuYWdlcjo6bG9nUmVjb3JkZWRSZXNvdXJjZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCit7CisgICAgLy8gTG9nIG5ldHdvcmsgcmVzb3VyY2VzIGFzIHRoZXkg
YXJlIGNhY2hlZCB0byBkaXNrLgorCisgICAgaWYgKGVuc3VyZUZpbGVIYW5kbGUocmVwb3J0UmVj
b3JkUGF0aCgpLCBtX3JlY29yZEZpbGVIYW5kbGUpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIHVy
bCA9IHJlcXVlc3QudXJsKCk7CisgICAgICAgIHByaW50VG9GaWxlKG1fcmVjb3JkRmlsZUhhbmRs
ZSwgIiVzICVzXG4iLCBERUJVR19TVFIoc3RyaW5nVG9IYXNoKHVybC5zdHJpbmcoKSkpLCBERUJV
R19TVFIodXJsLnN0cmluZygpKSk7CisgICAgfQorfQorCit2b2lkIE1hbmFnZXI6OmxvZ0xvYWRl
ZFJlc291cmNlKFJlc291cmNlJiByZXNvdXJjZSkKK3sKKyAgICAvLyBMb2cgY2FjaGVkIHJlc291
cmNlcyBhcyB0aGV5IGFyZSBsb2FkZWQgZnJvbSBkaXNrLgorCisgICAgaWYgKGVuc3VyZUZpbGVI
YW5kbGUocmVwb3J0TG9hZFBhdGgoKSwgbV9sb2FkRmlsZUhhbmRsZSkpCisgICAgICAgIHByaW50
VG9GaWxlKG1fbG9hZEZpbGVIYW5kbGUsICIlc1xuIiwgREVCVUdfU1RSKHJlc291cmNlLnVybCgp
LnN0cmluZygpKSk7Cit9CisKK3ZvaWQgTWFuYWdlcjo6bG9nUGxheWVkQmFja1Jlc291cmNlKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgYm9vbCB3YXNDYWNoZU1pc3Mp
Cit7CisgICAgLy8gTG9nIG5ldHdvcmsgcmVzb3VyY2VzIHRoYXQgYXJlIHJlcXVlc3RlZCBkdXJp
bmcgcmVwbGF5LgorCisgICAgY29uc3QgYXV0byYgdXJsID0gcmVxdWVzdC51cmwoKTsKKworICAg
IGlmICh3YXNDYWNoZU1pc3MpCisgICAgICAgIERFQlVHX0xPRygiQ2FjaGUgbWlzczogVVJMID0g
JXtwdWJsaWN9cyIsIERFQlVHX1NUUih1cmwuc3RyaW5nKCkpKTsKKyAgICBlbHNlCisgICAgICAg
IERFQlVHX0xPRygiQ2FjaGUgaGl0OiAgVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUih1cmwu
c3RyaW5nKCkpKTsKKworICAgIGlmIChlbnN1cmVGaWxlSGFuZGxlKHJlcG9ydFJlcGxheVBhdGgo
KSwgbV9yZXBsYXlGaWxlSGFuZGxlKSkKKyAgICAgICAgcHJpbnRUb0ZpbGUobV9yZXBsYXlGaWxl
SGFuZGxlLCAiJXMgJXNcbiIsIHdhc0NhY2hlTWlzcyA/ICJtaXNzIiA6ICJoaXQgIiwgREVCVUdf
U1RSKHVybC5zdHJpbmcoKSkpOworfQorCitib29sIE1hbmFnZXI6OmVuc3VyZUZpbGVIYW5kbGUo
Y29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgRmlsZUhhbmRsZSYgZmlsZUhhbmRsZSkKK3sKKyAgICBp
ZiAoIWZpbGVIYW5kbGUpCisgICAgICAgIGZpbGVIYW5kbGUgPSBvcGVuQ2FjaGVGaWxlKGZpbGVQ
YXRoLCBXZWJDb3JlOjpPcGVuRm9yV3JpdGUpOworICAgIHJldHVybiBmaWxlSGFuZGxlOworfQor
CitGaWxlSGFuZGxlIE1hbmFnZXI6Om9wZW5DYWNoZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlUGF0
aCwgV2ViQ29yZTo6RmlsZU9wZW5Nb2RlIG1vZGUpCit7CisgICAgLy8gSWYgd2UgY2FuIHRyaXZp
YWxseSBvcGVuIHRoZSBmaWxlLCB0aGVuIGRvIHRoYXQgYW5kIHJldHVybiB0aGUgbmV3IGZpbGUK
KyAgICAvLyBoYW5kbGUuCisKKyAgICBhdXRvIGZpbGVIYW5kbGUgPSBGaWxlSGFuZGxlOjpvcGVu
RmlsZShmaWxlUGF0aCwgbW9kZSk7CisgICAgaWYgKGZpbGVIYW5kbGUpCisgICAgICAgIHJldHVy
biBmaWxlSGFuZGxlOworCisgICAgLy8gSWYgd2UncmUgb3BlbmluZyB0aGUgZmlsZSBmb3Igd3Jp
dGluZyAoaW5jbHVkaW5nIGFwcGVuZGluZyksIHRoZW4gdHJ5CisgICAgLy8gYWdhaW4gYWZ0ZXIg
bWFraW5nIHN1cmUgYWxsIGludGVybWVkaWF0ZSBkaXJlY3RvcmllcyBoYXZlIGJlZW4gY3JlYXRl
ZC4KKworICAgIGlmIChtb2RlICE9IFdlYkNvcmU6Ok9wZW5Gb3JSZWFkKSB7CisgICAgICAgIGNv
bnN0IGF1dG8mIHBhcmVudERpciA9IFdlYkNvcmU6OmRpcmVjdG9yeU5hbWUoZmlsZVBhdGgpOwor
ICAgICAgICBpZiAoIVdlYkNvcmU6Om1ha2VBbGxEaXJlY3RvcmllcyhwYXJlbnREaXIpKSB7Cisg
ICAgICAgICAgICBERUJVR19MT0dfRVJST1IoIkVycm9yICVkIHRyeWluZyB0byBjcmVhdGUgaW50
ZXJtZWRpYXRlIGRpcmVjdG9yaWVzOiAle3B1YmxpY31zIiwgZXJybm8sIERFQlVHX1NUUihwYXJl
bnREaXIpKTsKKyAgICAgICAgICAgIHJldHVybiBmaWxlSGFuZGxlOworICAgICAgICB9CisKKyAg
ICAgICAgZmlsZUhhbmRsZSA9IEZpbGVIYW5kbGU6Om9wZW5GaWxlKGZpbGVQYXRoLCBtb2RlKTsK
KyAgICAgICAgaWYgKGZpbGVIYW5kbGUpCisgICAgICAgICAgICByZXR1cm4gZmlsZUhhbmRsZTsK
KyAgICB9CisKKyAgICAvLyBDb3VsZCBub3Qgb3BlbiB0aGUgZmlsZS4gTG9nIHRoZSBlcnJvciBh
bmQgbGVhdmUsIHJldHVybmluZyB0aGUgaW52YWxpZAorICAgIC8vIGZpbGUgaGFuZGxlLgorCisg
ICAgaWYgKG1vZGUgPT0gV2ViQ29yZTo6T3BlbkZvclJlYWQpCisgICAgICAgIERFQlVHX0xPR19F
UlJPUigiRXJyb3IgJWQgdHJ5aW5nIHRvIG9wZW4gJXtwdWJsaWN9cyBmb3IgcmVhZGluZyIsIGVy
cm5vLCBERUJVR19TVFIoZmlsZVBhdGgpKTsKKyAgICBlbHNlCisgICAgICAgIERFQlVHX0xPR19F
UlJPUigiRXJyb3IgJWQgdHJ5aW5nIHRvIG9wZW4gJXtwdWJsaWN9cyBmb3Igd3JpdGluZyIsIGVy
cm5vLCBERUJVR19TVFIoZmlsZVBhdGgpKTsKKworICAgIHJldHVybiBmaWxlSGFuZGxlOworfQor
Citib29sIE1hbmFnZXI6OnJlYWRGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIFZlY3RvcjxW
ZWN0b3I8U3RyaW5nPj4mIGxpbmVzKQoreworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAg
IFdlYkNvcmU6Ok1hcHBlZEZpbGVEYXRhIGZpbGUoZmlsZVBhdGgsIHN1Y2Nlc3MpOworICAgIGlm
ICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBiZWdpbiA9IHN0
YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihmaWxlLmRhdGEoKSk7CisgICAgYXV0byBlbmQgPSBi
ZWdpbiArIGZpbGUuc2l6ZSgpOworCisgICAgVmVjdG9yPFN0cmluZz4gbGluZTsKKyAgICB3aGls
ZSAoZ2V0TGluZShiZWdpbiwgZW5kLCBsaW5lKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKFdURk1v
dmUobGluZSkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTWFuYWdlcjo6Z2V0TGlu
ZSh1aW50OF90IGNvbnN0IComIHAsIHVpbnQ4X3QgY29uc3QgKiBjb25zdCBlbmQsIFZlY3RvcjxT
dHJpbmc+JiBsaW5lKQoreworICAgIC8vIE5COiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgbWF5IGJl
IG1vcmUgZGF0YSB0byBnZXQsIGZhbHNlIGlmIHdlJ3ZlIGhpdAorICAgIC8vIHRoZSBlbmQgb2Yg
dGhlIGJ1ZmZlci4KKworICAgIC8vIERFQlVHX0xPRygiR2V0dGluZyBhIGxpbmUiKTsKKworICAg
IGxpbmUuY2xlYXIoKTsKKworICAgIGlmIChwID09IGVuZCkgeworICAgICAgICAvLyBERUJVR19M
T0coIkl0ZXJhdG9yIGF0IGVuZDsgcmV0dXJuaW5nIGZhbHNlIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBTdHJpbmcgd29yZDsKKyAgICB3aGlsZSAoZ2V0V29yZChwLCBl
bmQsIHdvcmQpKSB7CisgICAgICAgIGlmICghd29yZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IC8vIERFQlVHX0xPRygiQWRkaW5nIHdvcmQ6ICV7cHVibGljfXMiLCBERUJVR19TVFIod29yZCkp
OworICAgICAgICAgICAgbGluZS5hcHBlbmQod29yZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBNYW5hZ2VyOjpnZXRXb3JkKHVpbnQ4X3QgY29uc3Qg
KiYgcCwgdWludDhfdCBjb25zdCAqIGNvbnN0IGVuZCwgU3RyaW5nJiB3b3JkKQoreworICAgIC8v
IE5COiBSZXR1cm5zIHRydWUgaWYgYSAocG9zc2libHkgZW1wdHkpIHdvcmQgd2FzIGZvdW5kIGFu
ZCB0aGVyZSBtYXkgYmUKKyAgICAvLyBtb3JlLCBmYWxzZSBpZiB3ZSd2ZSBoaXQgdGhlIGVuZCBv
ZiBsaW5lIG9yIGJ1ZmZlci4KKworICAgIC8vIERFQlVHX0xPRygiR2V0dGluZyBhIHdvcmQiKTsK
KworICAgIGlmIChwID09IGVuZCkgeworICAgICAgICAvLyBERUJVR19MT0coIkl0ZXJhdG9yIGF0
IGVuZDsgcmV0dXJuaW5nIGZhbHNlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBpZiAoKnAgPT0gJ1xuJykgeworICAgICAgICAvLyBERUJVR19MT0coIkl0ZXJhdG9yIGhp
dCBFT0w7IHJldHVybmluZyBmYWxzZSIpOworICAgICAgICArK3A7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBib29sIGVzY2FwaW5nID0gZmFsc2U7CisgICAgYm9vbCBpZ25v
cmluZyA9IGZhbHNlOworCisgICAgd29yZCA9IFN0cmluZygpOworCisgICAgLy8gREVCVUdfTE9H
KCJJdGVyYXRpbmciKTsKKworICAgIGZvciAoIDsgcCAhPSBlbmQ7ICsrcCkgeworICAgICAgICBp
ZiAoaWdub3JpbmcpIHsKKyAgICAgICAgICAgIGlmICgqcCA9PSAnXG4nKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgaWYgKGVzY2FwaW5nKSB7CisgICAgICAgICAgICB3
b3JkLmFwcGVuZCgqcCk7CisgICAgICAgICAgICBlc2NhcGluZyA9IGZhbHNlOworICAgICAgICB9
IGVsc2UgaWYgKCpwID09ICcjJykgeworICAgICAgICAgICAgaWdub3JpbmcgPSB0cnVlOworICAg
ICAgICB9IGVsc2UgaWYgKCpwID09ICdcXCcpIHsKKyAgICAgICAgICAgIGVzY2FwaW5nID0gdHJ1
ZTsKKyAgICAgICAgfSBlbHNlIGlmICgqcCA9PSAnICcpIHsKKyAgICAgICAgICAgIGlmICghd29y
ZC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSBpZiAo
KnAgPT0gJ1xuJykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICB3b3JkLmFwcGVuZCgqcCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
TWFuYWdlcjo6cHJpbnRUb0ZpbGUoY29uc3QgRmlsZUhhbmRsZSYgZmlsZUhhbmRsZSwgY29uc3Qg
Y2hhciogZm9ybWF0LCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFy
Z3MsIGZvcm1hdCk7CisKKyAgICBjaGFyKiBidWZmZXIgPSBudWxscHRyOworICAgIHZhc3ByaW50
ZigmYnVmZmVyLCBmb3JtYXQsIGFyZ3MpOworICAgIGF1dG8gd3JpdGVSZXN1bHQgPSBmaWxlSGFu
ZGxlLndyaXRlVG9GaWxlKGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikpOworICAgIGZyZWUoYnVmZmVy
KTsKKworICAgIHZhX2VuZChhcmdzKTsKKworICAgIHJldHVybiB3cml0ZVJlc3VsdCA+PSAwOwor
fQorCit9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVNYW5h
Z2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNmZjNWU5ZmYzZDU3MjI5MzBmOTY2YTNhNjk5YjUwY2U2ZWU0YjZk
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1
cmUvTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmgKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRl
ICJOZXR3b3JrQ2FwdHVyZVR5cGVzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9VUkxQYXJzZXIuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24u
aD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK2NsYXNzIFJlc291cmNlUmVxdWVzdDsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1l
c3BhY2UgTmV0d29ya0NhcHR1cmUgeworCitjbGFzcyBSZXNvdXJjZTsKKworLyoKKyAqIE5ldHdv
cmtDYXB0dXJlOjpNYW5hZ2VyIHNlcnZlcyB0aHJlZSBwdXJwb3NlczoKKyAqCisgKiAgKiBJdCBr
ZWVwcyB0aGUgc3RhdGUgb2Ygd2hldGhlciB3ZSBhcmUgcmVjb3JkaW5nLCByZXBsYXlpbmcsIG9y
IG5laXRoZXIuCisgKiAgKiBJdCBrZWVwcyB0aGUgbGlzdCBvZiBjYWNoZWQgcmVzb3VyY2VzIChp
ZiByZXBsYXlpbmcpLCBwZXJmb3JtcyBmdXp6eQorICogICAgbWF0Y2hpbmcgb24gdGhlbS4KKyAq
ICAqIEl0IGhhcyB1dGlsaXRpZXMgZm9yIGxvZ2dpbmcgYW5kIGZpbGUgbWFuYWdlbWVudC4KKyAq
CisgKiBUT0RPOiBQZXJoYXBzIHdlIHNob3VsZCBicmVhayB0aGlzIHVwIGludG8gdGhyZWUgY2xh
c3Nlcz8KKyAqLworY2xhc3MgTWFuYWdlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWFu
YWdlcik7CisgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8TWFuYWdlcj47CisK
K3B1YmxpYzoKKyAgICBlbnVtIFJlY29yZFJlcGxheU1vZGUgeworICAgICAgICBEaXNhYmxlZCwK
KyAgICAgICAgUmVjb3JkLAorICAgICAgICBSZXBsYXkKKyAgICB9OworCitwdWJsaWM6CisgICAg
c3RhdGljIE1hbmFnZXImIHNpbmdsZXRvbigpOworCisgICAgdm9pZCBpbml0aWFsaXplKGNvbnN0
IFN0cmluZyYgcmVjb3JkUmVwbGF5TW9kZSwgY29uc3QgU3RyaW5nJiByZWNvcmRSZXBsYXlDYWNo
ZUxvY2F0aW9uKTsKKyAgICB2b2lkIHRlcm1pbmF0ZSgpOworCisgICAgYm9vbCBpc1JlY29yZGlu
ZygpIGNvbnN0IHsgcmV0dXJuIG1vZGUoKSA9PSBSZWNvcmRSZXBsYXlNb2RlOjpSZWNvcmQ7IH0K
KyAgICBib29sIGlzUmVwbGF5aW5nKCkgY29uc3QgeyByZXR1cm4gbW9kZSgpID09IFJlY29yZFJl
cGxheU1vZGU6OlJlcGxheTsgfQorICAgIFJlY29yZFJlcGxheU1vZGUgbW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjb3JkUmVwbGF5TW9kZTsgfQorCisgICAgUmVzb3VyY2UqIGZpbmRNYXRjaChj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKworICAgIHZvaWQgbG9nUmVjb3JkZWRS
ZXNvdXJjZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIGxvZ0xv
YWRlZFJlc291cmNlKFJlc291cmNlJik7CisgICAgdm9pZCBsb2dQbGF5ZWRCYWNrUmVzb3VyY2Uo
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgYm9vbCB3YXNDYWNoZU1pc3MpOworCisg
ICAgRmlsZUhhbmRsZSBvcGVuQ2FjaGVGaWxlKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkZpbGVP
cGVuTW9kZSk7CisKKyAgICBTdHJpbmcgcmVxdWVzdFRvUGF0aChjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmKTsKKworcHJpdmF0ZToKKyAgICBNYW5hZ2VyKCkgPSBkZWZhdWx0OworICAg
IH5NYW5hZ2VyKCkgPSBkZWxldGU7CisKKyAgICBSZXNvdXJjZSogZmluZEV4YWN0TWF0Y2goY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgUmVzb3VyY2UqIGZpbmRCZXN0RnV6
enlNYXRjaChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICBpbnQgZnV6enlN
YXRjaFVSTHMoY29uc3QgV2ViQ29yZTo6VVJMJiByZXF1ZXN0VVJMLCBjb25zdCBXZWJDb3JlOjpV
UkxQYXJzZXI6OlVSTEVuY29kZWRGb3JtJiByZXF1ZXN0UGFyYW1ldGVycywgY29uc3QgV2ViQ29y
ZTo6VVJMJiByZXNvdXJjZVVSTCwgY29uc3QgV2ViQ29yZTo6VVJMUGFyc2VyOjpVUkxFbmNvZGVk
Rm9ybSYgcmVzb3VyY2VQYXJhbWV0ZXJzKTsKKworICAgIHZvaWQgbG9hZFJlc291cmNlcygpOwor
CisgICAgU3RyaW5nIHJlcG9ydExvYWRQYXRoKCk7CisgICAgU3RyaW5nIHJlcG9ydFJlY29yZFBh
dGgoKTsKKyAgICBTdHJpbmcgcmVwb3J0UmVwbGF5UGF0aCgpOworCisgICAgU3RyaW5nIHN0cmlu
Z1RvSGFzaChjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgaGFzaFRvUGF0aChjb25zdCBTdHJp
bmcmIGhhc2gpOworCisgICAgYm9vbCBlbnN1cmVGaWxlSGFuZGxlKGNvbnN0IFN0cmluZyYgZmls
ZVBhdGgsIEZpbGVIYW5kbGUmKTsKKworICAgIGJvb2wgcmVhZEZpbGUoY29uc3QgU3RyaW5nJiBm
aWxlUGF0aCwgVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYgYnVmZmVyKTsKKyAgICBib29sIGdldExp
bmUodWludDhfdCBjb25zdCAqJiBwLCB1aW50OF90IGNvbnN0ICogY29uc3QgZW5kLCBWZWN0b3I8
U3RyaW5nPiYgbGluZSk7CisgICAgYm9vbCBnZXRXb3JkKHVpbnQ4X3QgY29uc3QgKiYgcCwgdWlu
dDhfdCBjb25zdCAqIGNvbnN0IGVuZCwgU3RyaW5nJiB3b3JkKTsKKyAgICBib29sIHByaW50VG9G
aWxlKGNvbnN0IEZpbGVIYW5kbGUmLCBjb25zdCBjaGFyKiBmb3JtYXQsIC4uLik7CisKK3ByaXZh
dGU6CisgICAgUmVjb3JkUmVwbGF5TW9kZSBtX3JlY29yZFJlcGxheU1vZGUgeyBEaXNhYmxlZCB9
OworICAgIFN0cmluZyBtX3JlY29yZFJlcGxheUNhY2hlTG9jYXRpb247CisKKyAgICBGaWxlSGFu
ZGxlIG1fbG9hZEZpbGVIYW5kbGU7CisgICAgRmlsZUhhbmRsZSBtX3JlcGxheUZpbGVIYW5kbGU7
CisgICAgRmlsZUhhbmRsZSBtX3JlY29yZEZpbGVIYW5kbGU7CisKKyAgICBWZWN0b3I8UmVzb3Vy
Y2U+IG1fY2FjaGVkUmVzb3VyY2VzOworfTsKKworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhcHR1
cmUKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FQ
VFVSRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUv
TmV0d29ya0NhcHR1cmVSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVjb3JkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5YmZlNmQz
NzU3MTUxNTc4MTcxMzQ5NzQyYTE4ODhmOGE4YjAxOTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVjb3JkZXIu
Y3BwCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlUmVjb3JkZXIuaCIKKworI2lmIEVOQUJMRShORVRXT1JL
X0NBUFRVUkUpCisKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCIKKyNpbmNsdWRl
ICJOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVz
cG9uc2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorCisjZGVmaW5lIERF
QlVHX0NMQVNTIE1hbmFnZXIKKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29y
a0NhcHR1cmUgeworCit2b2lkIFJlY29yZGVyOjpyZWNvcmRSZXF1ZXN0U2VudChjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgLy8gVGhpcyBjbGFzcyByZWNv
cmRzIE5ldHdvcmtMb2FkJ3MgcHJvY2VzcyBvZiBsb2FkaW5nIGEgbmV0d29yayByZXNvdXJjZS4K
KyAgICAvLyBOZXR3b3JrTG9hZCBkb2VzIHRoaXMgYnkgY3JlYXRpbmcgYSBOZXR3b3JrRGF0YVRh
c2sgYW5kIGNhbGxpbmcgcmVzdW1lCisgICAgLy8gb24gaXQuIFRoaXMgY2FsbCB0byByZXN1bWUg
Y2FuIGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgdGFzayBoYXMKKyAgICAvLyBiZWVu
IGNyZWF0ZWQsIG9yIC0tIGlmIHRoZSBsb2FkaW5nIGlzIG1hcmtlZCBhcyBkZWZlcnJlZCAtLSBp
dCBjYW4gYmUKKyAgICAvLyBjYWxsZWQgbGF0ZXIgaW4gTmV0d29ya0xvYWQ6OnNldERlZmVycmVk
KHRydWUpLiBJbiBmYWN0LCB0aGUgbGF0dGVyIGNhbgorICAgIC8vIGJlIGNhbGxlZCBtdWx0aXBs
ZSB0aW1lcyBpZiB0aGUgbG9hZGluZyBpcyBzdXNwZW5kZWQgYW5kIHJlc3VtZWQKKyAgICAvLyBt
dWx0aXBsZSB0aW1lcy4KKyAgICAvLworICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbiBi
b3RoIHBsYWNlcyB3aGVyZSByZXN1bWUgaXMgY2FsbGVkLiBPdXIgdGFzayBpcworICAgIC8vIHRv
IGNhdGNoIHRoZSBjYWxsIHRvIE5ldHdvcmtEYXRhVGFzazo6cmVzdW1lIHRoYXQgc3RhcnRzIHRo
ZSBuZXR3b3JrCisgICAgLy8gbG9hZGluZyBwcm9jZXNzLiBXZSB3YW50IHRvIGlnbm9yZSB0aGUg
b3RoZXIgY2FsbHMgdG8gcmVzdW1lLiBPdXIKKyAgICAvLyBhcHByb2FjaCB0byBrbm93aW5nIHdo
aWNoIG9uZSBpcyB0aGUgZmlyc3QgaXMgdG8gY2hlY2sgb3VyIGNvbGxlY3Rpb24gb2YKKyAgICAv
LyByZWNvcmRlZCBldmVudHMuIElmIGl0IGlzIGVtcHR5LCB0aGVuIHRoaXMgaXMgdGhlIGZpcnN0
IGNhbGwgaW50byB0aGUKKyAgICAvLyByZWNvcmRlciwgYW5kIHdlIHdhbnQgdG8gcmVjb3JkIHRo
ZSBldmVudC4gT3RoZXJ3aXNlLCBpZ25vcmUgaXQuCisKKyAgICBpZiAobV9ldmVudHMuc2l6ZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBERUJVR19MT0coIlNlbnQgcmVxdWVzdCBmb3IgVVJM
ID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihyZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisKKyAg
ICBtX2luaXRpYWxSZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICByZWNvcmRFdmVudChSZXF1ZXN0U2Vu
dEV2ZW50KHJlcXVlc3QpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6cmVjb3JkUmVzcG9uc2VSZWNl
aXZlZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICAv
LyBDYWxsZWQgd2hlbiByZWNlaXZpbmcgYSByZXNwb25zZSBvdGhlciB0aGFuIGEgcmVkaXJlY3Qg
b3IgZXJyb3IuCisKKyAgICBERUJVR19MT0coIlJlY2VpdmVkIHJlc3BvbnNlIGZyb20gVVJMID0g
JXtwdWJsaWN9cyIsIERFQlVHX1NUUihyZXNwb25zZS51cmwoKS5zdHJpbmcoKSkpOworICAgIEFT
U0VSVChtX2V2ZW50cy5zaXplKCkpOworCisgICAgLy8gVE9ETzogSXMgdGhlcmUgYSBiZXR0ZXIg
cmVzcG9uc2UgdG8gcmVjZWl2aW5nIGEgbXVsdGktcGFydCByZXNvdXJjZT8KKyAgICAvLyBMZWFy
biBtb3JlIGFib3V0IG11bHRpLXBhcnQgcmVzb3VyY2VzLiBXaHkgZG9uJ3Qgd2UgcmVjb3JkIHRo
ZXNlPyAoTm90ZSwKKyAgICAvLyB0aGlzIGRlY2lzaW9uIGlzIGJhc2VkIG9uIHNvbWUgTmV0d29y
a0NhY2hlIGNvZGUuKQorCisgICAgaWYgKCFyZXNwb25zZS5pc011bHRpcGFydCgpKQorICAgICAg
ICByZWNvcmRFdmVudChSZXNwb25zZVJlY2VpdmVkRXZlbnQocmVzcG9uc2UpKTsKKyAgICBlbHNl
CisgICAgICAgIG1fZXZlbnRzLmNsZWFyKCk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnJlY29yZFJl
ZGlyZWN0UmVjZWl2ZWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBERUJVR19M
T0coIlJlY2VpdmVkIHJlZGlyZWN0IHRvIFVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIocmVx
dWVzdC51cmwoKS5zdHJpbmcoKSkpOworICAgIEFTU0VSVChtX2V2ZW50cy5zaXplKCkpOworCisg
ICAgcmVjb3JkRXZlbnQoUmVkaXJlY3RSZWNlaXZlZEV2ZW50KHJlcXVlc3QsIHJlc3BvbnNlKSk7
Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnJlY29yZFJlZGlyZWN0U2VudChjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgREVCVUdfTE9HKCJTZW50IHJlZGlyZWN0
IGZvciBVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RSKHJlcXVlc3QudXJsKCkuc3RyaW5nKCkp
KTsKKyAgICBBU1NFUlQobV9ldmVudHMuc2l6ZSgpKTsKKworICAgIHJlY29yZEV2ZW50KFJlZGly
ZWN0U2VudEV2ZW50KHJlcXVlc3QpKTsKK30KKwordm9pZCBSZWNvcmRlcjo6cmVjb3JkRGF0YVJl
Y2VpdmVkKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciYgYnVmZmVyKQoreworICAgIERFQlVHX0xPRygi
UmVjZWl2ZWQgJXUgYnl0ZXMgb2YgZGF0YSIsIGJ1ZmZlci5zaXplKCkpOworCisgICAgaWYgKCFt
X2V2ZW50cy5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFByZXZlbnQgbWVtb3J5
IGdyb3d0aCBpbiBjYXNlIG9mIHN0cmVhbWluZyBkYXRhLiBUT0RPOiBJcyB0aGVyZSBhIGJldHRl
cgorICAgIC8vIHJlc3BvbnNlIHRvIHRoaXM/IElmIHdlIGVuY291bnRlciB0aGlzIGNvbmRpdGlv
biwgYWxsIG9mIG91ciByZWNvcmRpbmcKKyAgICAvLyBzaWxlbnRseSBnb2VzIG91dCB0aGUgd2lu
ZG93LiBSZXBsYXkgd2lsbCBub3Qgd29yaywgYW5kIHRoZSB1c2VyIGRvZXNuJ3QKKyAgICAvLyBr
bm93IHRoYXQuCisKKyAgICBjb25zdGV4cHIgc2l6ZV90IGtNYXhpbXVtQ2FjaGVCdWZmZXJTaXpl
ID0gMTAgKiAxMDI0ICogMTAyNDsKKyAgICBtX2RhdGFMZW5ndGggKz0gYnVmZmVyLnNpemUoKTsK
KyAgICBpZiAobV9kYXRhTGVuZ3RoIDw9IGtNYXhpbXVtQ2FjaGVCdWZmZXJTaXplKQorICAgICAg
ICByZWNvcmRFdmVudChEYXRhUmVjZWl2ZWRFdmVudChidWZmZXIpKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fZXZlbnRzLmNsZWFyKCk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnJlY29yZEZpbmlzaChj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBERUJVR19MT0coIkZp
bmlzaGVkIik7CisKKyAgICBpZiAoIW1fZXZlbnRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgcmVjb3JkRXZlbnQoRmluaXNoZWRFdmVudChlcnJvcikpOworICAgIHdyaXRlRXZlbnRz
KCk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OndyaXRlRXZlbnRzKCkKK3sKKyAgICBhdXRvIHBhdGgg
PSBNYW5hZ2VyOjpzaW5nbGV0b24oKS5yZXF1ZXN0VG9QYXRoKG1faW5pdGlhbFJlcXVlc3QpOwor
ICAgIGF1dG8gaGFuZGxlID0gTWFuYWdlcjo6c2luZ2xldG9uKCkub3BlbkNhY2hlRmlsZShwYXRo
LCBXZWJDb3JlOjpPcGVuRm9yV3JpdGUpOworICAgIGlmICghaGFuZGxlKQorICAgICAgICByZXR1
cm47CisKKyAgICBmb3IgKGF1dG8gY29uc3QmIGV2ZW50IDogbV9ldmVudHMpIHsKKyAgICAgICAg
YXV0byBhc1N0cmluZyA9IGV2ZW50VG9TdHJpbmcoZXZlbnQpOworICAgICAgICBpZiAoaGFuZGxl
LndyaXRlVG9GaWxlKGFzU3RyaW5nLmNfc3RyKCksIGFzU3RyaW5nLnNpemUoKSArIDEpID09IC0x
KSB7CisgICAgICAgICAgICBERUJVR19MT0dfRVJST1IoIkVycm9yIHRyeWluZyB0byB3cml0ZSB0
byBmaWxlIGZvciBVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RSKG1faW5pdGlhbFJlcXVlc3Qu
dXJsKCkuc3RyaW5nKCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0K
KworICAgIE1hbmFnZXI6OnNpbmdsZXRvbigpLmxvZ1JlY29yZGVkUmVzb3VyY2UobV9pbml0aWFs
UmVxdWVzdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJl
UmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29y
a0NhcHR1cmVSZWNvcmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEzNDU2MjEyMWIzNTA5YmQ4NzM3OWRhMzQ3
ZjU4ZTZjMGEzMTBjMzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVjb3JkZXIuaApAQCAtMCwwICsxLDY5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJF
KQorCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVFdmVudC5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
UmVzb3VyY2VSZXF1ZXN0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFJlc291cmNl
RXJyb3I7CitjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworY2xhc3MgU2hhcmVkQnVmZmVyOworfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZSB7CisKK2NsYXNz
IFJlY29yZGVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIHJlY29yZFJlcXVlc3RTZW50KGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIHZvaWQgcmVjb3JkUmVzcG9uc2VSZWNlaXZl
ZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdm9pZCByZWNvcmRSZWRp
cmVjdFJlY2VpdmVkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2b2lkIHJlY29yZFJlZGlyZWN0U2VudChjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIHJlY29yZERhdGFSZWNlaXZl
ZChXZWJDb3JlOjpTaGFyZWRCdWZmZXImKTsKKyAgICB2b2lkIHJlY29yZEZpbmlzaChjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CisKK3ByaXZhdGU6CisgICAgdm9pZCB3cml0ZUV2ZW50
cygpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgdm9pZCByZWNvcmRFdmVudChU
JiYgZXZlbnQpCisgICAgeworICAgICAgICBtX2V2ZW50cy5hcHBlbmQoQ2FwdHVyZUV2ZW50KFdU
Rk1vdmUoZXZlbnQpKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIENhcHR1cmVFdmVudHMgbV9l
dmVudHM7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1faW5pdGlhbFJlcXVlc3Q7Cisg
ICAgc2l6ZV90IG1fZGF0YUxlbmd0aCB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIE5ldHdv
cmtDYXB0dXJlCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRX
T1JLX0NBUFRVUkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YXB0dXJlL05ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
MDRhZjY5YzdkM2EzODhkNGYzY2E2ODBmODE1ZWQ4ZGVlYzZkNDc4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJl
cGxheWVyLmNwcApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuaCIKKworI2lmIEVOQUJMRShO
RVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCIKKyNp
bmNsdWRlICJOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJOZXR3b3JrRGF0YVRh
c2tSZXBsYXkuaCIKKyNpbmNsdWRlICJOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCIKKworI2RlZmlu
ZSBERUJVR19DTEFTUyBSZXBsYXllcgorCituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBO
ZXR3b3JrQ2FwdHVyZSB7CisKK1JlZjxOZXR3b3JrRGF0YVRhc2s+IFJlcGxheWVyOjpyZXBsYXlS
ZXNvdXJjZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xpZW50JiBj
bGllbnQsIGNvbnN0IE5ldHdvcmtMb2FkUGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3sKKyAgICBh
dXRvIGZvdW5kUmVzb3VyY2UgPSBNYW5hZ2VyOjpzaW5nbGV0b24oKS5maW5kTWF0Y2gocGFyYW1l
dGVycy5yZXF1ZXN0KTsKKyAgICBNYW5hZ2VyOjpzaW5nbGV0b24oKS5sb2dQbGF5ZWRCYWNrUmVz
b3VyY2UocGFyYW1ldGVycy5yZXF1ZXN0LCAhZm91bmRSZXNvdXJjZSk7CisgICAgcmV0dXJuIE5l
dHdvcmtEYXRhVGFza1JlcGxheTo6Y3JlYXRlKHNlc3Npb24sIGNsaWVudCwgcGFyYW1ldGVycywg
Zm91bmRSZXNvdXJjZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtD
YXB0dXJlUmVwbGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUv
TmV0d29ya0NhcHR1cmVSZXBsYXllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4N2VjNTA2MGFkNjRkMGZjNzE3
Yjg3MjYzNzI1MTJjOWQ5ODkwYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuaApAQCAtMCwwICsx
LDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTkVUV09SS19D
QVBUVVJFKQorCisjaW5jbHVkZSA8d3RmL1JlZi5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK2Ns
YXNzIE5ldHdvcmtEYXRhVGFzazsKK2NsYXNzIE5ldHdvcmtEYXRhVGFza0NsaWVudDsKK2NsYXNz
IE5ldHdvcmtMb2FkUGFyYW1ldGVyczsKK2NsYXNzIE5ldHdvcmtTZXNzaW9uOworfQorCituYW1l
c3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZSB7CisKK2NsYXNzIFJlcGxh
eWVyIHsKK3B1YmxpYzoKKyAgICBSZWY8TmV0d29ya0RhdGFUYXNrPiByZXBsYXlSZXNvdXJjZShO
ZXR3b3JrU2Vzc2lvbiYsIE5ldHdvcmtEYXRhVGFza0NsaWVudCYsIGNvbnN0IE5ldHdvcmtMb2Fk
UGFyYW1ldGVycyYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0Nh
cHR1cmVSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJl
L05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU2MjA3ZDk0ZTY2NzEzZGEy
N2ViYjBkYTQ2ZWFhMDhkYWI2ZWVmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwCkBAIC0w
LDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ik5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUp
CisKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZUV2ZW50LmgiCisjaW5jbHVkZSAiTmV0d29ya0Nh
cHR1cmVMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVSZWNvcmRlci5oIgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZSB7CisKK1Jlc291cmNl
OjpSZXNvdXJjZShjb25zdCBTdHJpbmcmIGV2ZW50RmlsZVBhdGgpCisgICAgOiBtX2V2ZW50Rmls
ZVBhdGgoZXZlbnRGaWxlUGF0aCkKK3sKK30KKworY29uc3QgV2ViQ29yZTo6VVJMJiBSZXNvdXJj
ZTo6dXJsKCkKK3sKKyAgICBpZiAoIW1fdXJsKSB7CisgICAgICAgIGF1dG8gZXZlbnRzID0gZXZl
bnRTdHJlYW0oKTsKKyAgICAgICAgYXV0byBldmVudCA9IGV2ZW50cy5uZXh0RXZlbnQoKTsKKyAg
ICAgICAgaWYgKCFldmVudCkKKyAgICAgICAgICAgIERFQlVHX0xPR19FUlJPUigiRXZlbnQgc3Ry
ZWFtIGRvZXMgbm90IGNvbnRhaW4gZXZlbnRzOiBmaWxlID0gJXtwdWJsaWN9cyIsIERFQlVHX1NU
UihtX2V2ZW50RmlsZVBhdGgpKTsKKyAgICAgICAgZWxzZSBpZiAoIVdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8UmVxdWVzdFNlbnRFdmVudD4oKmV2ZW50KSkKKyAgICAgICAgICAgIERFQlVHX0xPR19F
UlJPUigiRXZlbnQgc3RyZWFtIGRvZXMgbm90IGhhdmUgYSByZXF1ZXN0U2VudCBldmVudDogZmls
ZSA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9ldmVudEZpbGVQYXRoKSk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgYXV0byByZXF1ZXN0U2VudEV2ZW50ID0gV1RGOjpnZXQ8UmVxdWVz
dFNlbnRFdmVudD4oKmV2ZW50KTsKKyAgICAgICAgICAgIFdlYkNvcmU6OlVSTFBhcnNlciBwYXJz
ZXIocmVxdWVzdFNlbnRFdmVudC5yZXF1ZXN0LnVybCk7CisgICAgICAgICAgICBtX3VybCA9IHBh
cnNlci5yZXN1bHQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAqbV91cmw7Cit9
CisKK2NvbnN0IFdlYkNvcmU6OlVSTCYgUmVzb3VyY2U6OmJhc2VVUkwoKQoreworICAgIGlmICgh
bV9iYXNlVVJMKSB7CisgICAgICAgIGF1dG8gcGF0aFN0YXJ0ID0gdXJsKCkucGF0aFN0YXJ0KCk7
CisgICAgICAgIGF1dG8gYmFzZVVSTFN0ciA9IHVybCgpLnN0cmluZygpLmxlZnQocGF0aFN0YXJ0
KTsKKyAgICAgICAgV2ViQ29yZTo6VVJMUGFyc2VyIHBhcnNlcihiYXNlVVJMU3RyKTsKKyAgICAg
ICAgbV9iYXNlVVJMID0gcGFyc2VyLnJlc3VsdCgpOworICAgIH0KKworICAgIHJldHVybiAqbV9i
YXNlVVJMOworfQorCitXZWJDb3JlOjpVUkxQYXJzZXI6OlVSTEVuY29kZWRGb3JtIFJlc291cmNl
OjpxdWVyeVBhcmFtZXRlcnMoKQoreworICAgIGlmICghbV9xdWVyeVBhcmFtZXRlcnMpCisgICAg
ICAgIG1fcXVlcnlQYXJhbWV0ZXJzID0gV2ViQ29yZTo6VVJMUGFyc2VyOjpwYXJzZVVSTEVuY29k
ZWRGb3JtKHVybCgpLnF1ZXJ5KCkpOworCisgICAgcmV0dXJuICptX3F1ZXJ5UGFyYW1ldGVyczsK
K30KKworUmVzb3VyY2U6OkV2ZW50U3RyZWFtIFJlc291cmNlOjpldmVudFN0cmVhbSgpCit7Cisg
ICAgcmV0dXJuIEV2ZW50U3RyZWFtKG1fZXZlbnRGaWxlUGF0aCk7Cit9CisKK1Jlc291cmNlOjpF
dmVudFN0cmVhbTo6RXZlbnRTdHJlYW0oY29uc3QgU3RyaW5nJiBldmVudEZpbGVQYXRoKQorICAg
IDogbV9ldmVudEZpbGVQYXRoKGV2ZW50RmlsZVBhdGgpCisgICAgLCBtX21hcHBlZEV2ZW50Rmls
ZShtX2V2ZW50RmlsZVBhdGgsIG1faGF2ZU1hcHBlZEV2ZW50RmlsZSkKK3sKK30KKworT3B0aW9u
YWxDYXB0dXJlRXZlbnQgUmVzb3VyY2U6OkV2ZW50U3RyZWFtOjpuZXh0RXZlbnQoKQoreworICAg
IGlmIChtX29mZnNldCA9PSBtX21hcHBlZEV2ZW50RmlsZS5zaXplKCkpIHsKKyAgICAgICAgREVC
VUdfTE9HX0VSUk9SKCJVbmFibGUgdG8gcmV0dXJuIGV2ZW50IC0gYXQgZW5kIG9mIGZpbGU6ICV7
cHVibGljfXMiLCBERUJVR19TVFIobV9ldmVudEZpbGVQYXRoKSk7CisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgY29uc3QgY2hhciogY2hhckJ1ZmZlciA9IHN0YXRp
Y19jYXN0PGNvbnN0IGNoYXIqPihtX21hcHBlZEV2ZW50RmlsZS5kYXRhKCkpOworICAgIGNvbnN0
IGNoYXIqIGN1cnJlbnQgPSBjaGFyQnVmZmVyICsgbV9vZmZzZXQ7CisKKyAgICB3aGlsZSAobV9v
ZmZzZXQgPCBtX21hcHBlZEV2ZW50RmlsZS5zaXplKCkgJiYgY2hhckJ1ZmZlclttX29mZnNldF0p
CisgICAgICAgICsrbV9vZmZzZXQ7CisKKyAgICBpZiAobV9vZmZzZXQgPT0gbV9tYXBwZWRFdmVu
dEZpbGUuc2l6ZSgpKSB7CisgICAgICAgIERFQlVHX0xPR19FUlJPUigiVW5hYmxlIHRvIHJldHVy
biBldmVudCAtIG5vIHRlcm1pbmF0aW5nIE5VTDogJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2V2
ZW50RmlsZVBhdGgpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAg
ICArK21fb2Zmc2V0OworCisgICAgcmV0dXJuIHN0cmluZ1RvRXZlbnQoY3VycmVudCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaCBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXNvdXJj
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjk5Y2Q2MjBlNWI1ZmVkZmFjZDE4YTUzYjZmOGMzNmNiNDlkNmUxOWQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJl
L05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorCisjaW5jbHVkZSAi
TmV0d29ya0NhcHR1cmVFdmVudC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9VUkxQYXJzZXIuaD4K
KyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3Bh
Y2UgTmV0d29ya0NhcHR1cmUgeworCitjbGFzcyBSZXNvdXJjZSB7CitwdWJsaWM6CisgICAgY2xh
c3MgRXZlbnRTdHJlYW0geworICAgIHB1YmxpYzoKKyAgICAgICAgRXZlbnRTdHJlYW0oKSA9IGRl
ZmF1bHQ7CisgICAgICAgIEV2ZW50U3RyZWFtKGNvbnN0IFN0cmluZyYgZXZlbnRGaWxlUGF0aCk7
CisKKyAgICAgICAgT3B0aW9uYWxDYXB0dXJlRXZlbnQgbmV4dEV2ZW50KCk7CisKKyAgICBwcml2
YXRlOgorICAgICAgICBTdHJpbmcgbV9ldmVudEZpbGVQYXRoOworICAgICAgICBib29sIG1faGF2
ZU1hcHBlZEV2ZW50RmlsZSB7IGZhbHNlIH07CisgICAgICAgIFdlYkNvcmU6Ok1hcHBlZEZpbGVE
YXRhIG1fbWFwcGVkRXZlbnRGaWxlOworICAgICAgICBzaXplX3QgbV9vZmZzZXQgeyAwIH07Cisg
ICAgfTsKKworcHVibGljOgorICAgIFJlc291cmNlKGNvbnN0IFN0cmluZyYgZXZlbnRGaWxlUGF0
aCk7CisKKyAgICBjb25zdCBXZWJDb3JlOjpVUkwmIHVybCgpOworICAgIGNvbnN0IFdlYkNvcmU6
OlVSTCYgYmFzZVVSTCgpOworICAgIFdlYkNvcmU6OlVSTFBhcnNlcjo6VVJMRW5jb2RlZEZvcm0g
cXVlcnlQYXJhbWV0ZXJzKCk7CisgICAgRXZlbnRTdHJlYW0gZXZlbnRTdHJlYW0oKTsKKworcHJp
dmF0ZToKKyAgICBTdHJpbmcgbV9ldmVudEZpbGVQYXRoOworICAgIHN0ZDo6b3B0aW9uYWw8V2Vi
Q29yZTo6VVJMPiBtX3VybDsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlVSTD4gbV9iYXNl
VVJMOworICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6VVJMUGFyc2VyOjpVUkxFbmNvZGVkRm9y
bT4gbV9xdWVyeVBhcmFtZXRlcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FwdHVy
ZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQVBU
VVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9O
ZXR3b3JrQ2FwdHVyZVR5cGVzLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0
dXJlL05ldHdvcmtDYXB0dXJlVHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMjRlZDlhYWNkN2FmYjZhZTlm
MmNkZmE3ZmVjMjgzYzJlNmI1MTFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVR5cGVzLmgKQEAgLTAsMCArMSwx
MjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShORVRXT1JLX0NB
UFRVUkUpCisKKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgeworCitjbGFzcyBGaWxlSGFuZGxlIGZp
bmFsIHsKK3B1YmxpYzoKKyAgICBGaWxlSGFuZGxlKCkgPSBkZWZhdWx0OworCisgICAgRmlsZUhh
bmRsZShXZWJDb3JlOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZUhhbmRsZSkKKyAgICAgICAgOiBt
X2ZpbGVIYW5kbGUoZmlsZUhhbmRsZSkgeyB9CisKKyAgICBGaWxlSGFuZGxlKEZpbGVIYW5kbGUm
JiBvdGhlcikKKyAgICAgICAgOiBtX2ZpbGVIYW5kbGUoc3RkOjpleGNoYW5nZShvdGhlci5tX2Zp
bGVIYW5kbGUsIFdlYkNvcmU6OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpKSB7IH0KKworICAg
IH5GaWxlSGFuZGxlKCkKKyAgICB7CisgICAgICAgIGNsb3NlRmlsZSgpOworICAgIH0KKworICAg
IEZpbGVIYW5kbGUmIG9wZXJhdG9yPShXZWJDb3JlOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZmlsZUhh
bmRsZSkKKyAgICB7CisgICAgICAgIGNsb3NlRmlsZSgpOworICAgICAgICBtX2ZpbGVIYW5kbGUg
PSBmaWxlSGFuZGxlOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgRmlsZUhh
bmRsZSYgb3BlcmF0b3I9KEZpbGVIYW5kbGUmJiBvdGhlcikKKyAgICB7CisgICAgICAgIGNsb3Nl
RmlsZSgpOworICAgICAgICBtX2ZpbGVIYW5kbGUgPSBzdGQ6OmV4Y2hhbmdlKG90aGVyLm1fZmls
ZUhhbmRsZSwgV2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSk7CisgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICB9CisKKyAgICBGaWxlSGFuZGxlKGNvbnN0IEZpbGVIYW5kbGUmKSA9
IGRlbGV0ZTsKKyAgICBGaWxlSGFuZGxlJiBvcGVyYXRvcj0oY29uc3QgRmlsZUhhbmRsZSYpID0g
ZGVsZXRlOworCisgICAgb3BlcmF0b3IgV2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlKCkgY29u
c3QgeyByZXR1cm4gbV9maWxlSGFuZGxlOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgp
IGNvbnN0IHsgcmV0dXJuIFdlYkNvcmU6OmlzSGFuZGxlVmFsaWQobV9maWxlSGFuZGxlKTsgfQor
CisgICAgc3RhdGljIEZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBXZWJD
b3JlOjpGaWxlT3Blbk1vZGUgbW9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBGaWxlSGFuZGxl
KFdlYkNvcmU6Om9wZW5GaWxlKHBhdGgsIG1vZGUpKTsKKyAgICB9CisKKyAgICBpbnQgcmVhZEZy
b21GaWxlKHZvaWQqIGRhdGEsIGludCBsZW5ndGgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gV2ViQ29yZTo6cmVhZEZyb21GaWxlKG1fZmlsZUhhbmRsZSwgc3RhdGljX2Nhc3Q8Y2hhcio+
KGRhdGEpLCBsZW5ndGgpOworICAgIH0KKworICAgIGludCB3cml0ZVRvRmlsZShjb25zdCB2b2lk
KiBkYXRhLCBpbnQgbGVuZ3RoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6
OndyaXRlVG9GaWxlKG1fZmlsZUhhbmRsZSwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEp
LCBsZW5ndGgpOworICAgIH0KKworICAgIHZvaWQgY2xvc2VGaWxlKCkKKyAgICB7CisgICAgICAg
IFdlYkNvcmU6OmNsb3NlRmlsZShtX2ZpbGVIYW5kbGUpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBXZWJDb3JlOjpQbGF0Zm9ybUZpbGVIYW5kbGUgbV9maWxlSGFuZGxlIHsgV2ViQ29yZTo6aW52
YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSB9OworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIC4uLiBU
eXBlcz4KK3N0cnVjdCBUeXBlSG9sZGVyIHsKKyAgICB1c2luZyBWYXJpYW50VHlwZSA9IFdURjo6
VmFyaWFudDxUeXBlcy4uLj47CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGbj4KKyAgICBzdGF0
aWMgdm9pZCBmb3JFYWNoVHlwZUltcGwoRm4gZm4pCisgICAgeworICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZuLCB0eXBlbmFtZSBUeXBlLCB0eXBlbmFtZSAuLi4gUmVzdD4KKyAgICBz
dGF0aWMgdm9pZCBmb3JFYWNoVHlwZUltcGwoRm4gZm4pCisgICAgeworICAgICAgICBpZiAoIWZu
KHN0YXRpY19jYXN0PFR5cGUqPihudWxscHRyKSkpCisgICAgICAgICAgICBmb3JFYWNoVHlwZUlt
cGw8Rm4sIFJlc3QuLi4+KGZuKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGbj4K
KyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoVHlwZShGbiBmbikKKyAgICB7CisgICAgICAgIGZvckVh
Y2hUeXBlSW1wbDxGbiwgVHlwZXMuLi4+KGZuKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjhiMzVjODE2ZGUxOWQ2OTcxMjc3N2U2YzdmN2M3M2E5ZjdlZmIwZWUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtEYXRh
VGFza1JlcGxheS5jcHAKQEAgLTAsMCArMSwyODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrUmVwbGF5LmgiCisKKyNpZiBFTkFC
TEUoTkVUV09SS19DQVBUVVJFKQorCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVFdmVudC5oIgor
I2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlTG9nZ2luZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0
dXJlUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCIKKyNpbmNs
dWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9SZXNvdXJjZVJlc3BvbnNlLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworI2RlZmlu
ZSBERUJVR19DTEFTUyBOZXR3b3JrRGF0YVRhc2tSZXBsYXkKKworbmFtZXNwYWNlIFdlYktpdCB7
CituYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
d2ViS2l0UmVsYXlEb21haW4gPSAiV2ViS2l0UmVwbGF5IjsKKworTmV0d29ya0RhdGFUYXNrUmVw
bGF5OjpOZXR3b3JrRGF0YVRhc2tSZXBsYXkoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdv
cmtEYXRhVGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBOZXR3b3JrTG9hZFBhcmFtZXRlcnMmIHBh
cmFtZXRlcnMsIFJlc291cmNlKiByZXNvdXJjZSkKKyAgICA6IE5ldHdvcmtEYXRhVGFzayhzZXNz
aW9uLCBjbGllbnQsIHBhcmFtZXRlcnMucmVxdWVzdCwgcGFyYW1ldGVycy5hbGxvd1N0b3JlZENy
ZWRlbnRpYWxzLCBwYXJhbWV0ZXJzLnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVk
aXJlY3QpCisgICAgLCBtX2N1cnJlbnRSZXF1ZXN0KG1fZmlyc3RSZXF1ZXN0KQorICAgICwgbV9y
ZXNvdXJjZShyZXNvdXJjZSkKK3sKKyAgICBERUJVR19MT0coInJlcXVlc3QgVVJMID0gJXtwdWJs
aWN9cyIsIERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworICAgIERF
QlVHX0xPRygiY2FjaGVkIFVSTCA9ICV7cHVibGljfXMiLCByZXNvdXJjZSA/IERFQlVHX1NUUihy
ZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCkpIDogIjxub3QgZm91bmQ+Iik7CisKKyAgICBtX3Nlc3Np
b24tPnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKCp0aGlzKTsKKworICAgIGlmIChyZXNvdXJjZSkK
KyAgICAgICAgbV9ldmVudFN0cmVhbSA9IHJlc291cmNlLT5ldmVudFN0cmVhbSgpOworfQorCitO
ZXR3b3JrRGF0YVRhc2tSZXBsYXk6On5OZXR3b3JrRGF0YVRhc2tSZXBsYXkoKQoreworICAgIERF
QlVHX0xPRygiVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwo
KS5zdHJpbmcoKSkpOworCisgICAgbV9zZXNzaW9uLT51bnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNr
KCp0aGlzKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnJlc3VtZSgpCit7Cisg
ICAgREVCVUdfTE9HKCJVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RSKG1fZmlyc3RSZXF1ZXN0
LnVybCgpLnN0cmluZygpKSk7CisKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5n
IHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9zdGF0ZSA9IFN0YXRlOjpSdW5uaW5nOworCisgICAgaWYgKG1fc2NoZWR1bGVkRmFpbHVyZVR5
cGUgIT0gTm9GYWlsdXJlKSB7CisgICAgICAgIEFTU0VSVChtX2ZhaWx1cmVUaW1lci5pc0FjdGl2
ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVucXVldWVFdmVudEhhbmRsZXIo
KTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnN1c3BlbmQoKQoreworICAgIERF
QlVHX0xPRygiVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwo
KS5zdHJpbmcoKSkpOworCisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBt
X3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3Rh
dGUgPSBTdGF0ZTo6U3VzcGVuZGVkOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza1JlcGxheTo6
Y2FuY2VsKCkKK3sKKyAgICBERUJVR19MT0coIiIpOworCisgICAgaWYgKG1fc3RhdGUgPT0gU3Rh
dGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q2FuY2VsaW5nOworfQorCit2b2lkIE5ldHdv
cmtEYXRhVGFza1JlcGxheTo6Y29tcGxldGUoKQoreworICAgIERFQlVHX0xPRygiVVJMID0gJXtw
dWJsaWN9cyIsIERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworCisg
ICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9zdGF0ZSA9IFN0YXRlOjpDb21wbGV0ZWQ7CisgICAgbV9yZXNvdXJjZSA9IG51bGxwdHI7
Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjppbnZhbGlkYXRlQW5kQ2FuY2VsKCkK
K3sKKyAgICBERUJVR19MT0coIlVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9maXJzdFJl
cXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKKworICAgIGNhbmNlbCgpOworICAgIGNvbXBsZXRlKCk7
Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjplbnF1ZXVlRXZlbnRIYW5kbGVyKCkK
K3sKKyAgICBERUJVR19MT0coIlVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9maXJzdFJl
cXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7CisgICAgICAgIERFQlVHX0xP
RygiZW5xdWV1ZUV2ZW50SGFuZGxlciBjYWxsYmFjayIpOworCisgICAgICAgIGlmIChtX3N0YXRl
ID09IFN0YXRlOjpTdXNwZW5kZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYg
KG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0
ZWQgfHwgIW1fY2xpZW50KSB7CisgICAgICAgICAgICBjb21wbGV0ZSgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX3Jlc291cmNlKSB7CisgICAgICAg
ICAgICBERUJVR19MT0dfRVJST1IoIkVycm9yIGxvYWRpbmcgcmVzb3VyY2U6IGNvdWxkIG5vdCBm
aW5kIGNhY2hlZCByZXNvdXJjZSwgVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2N1cnJl
bnRSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisgICAgICAgICAgICBkaWRGaW5pc2goRXJyb3I6
Ok5vdEZvdW5kRXJyb3IpOyAvLyBUT0RPOiBUdXJuIHRoaXMgaW50byBhIDQwND8KKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UobV9jdXJyZW50UmVxdWVzdC5odHRwTWV0aG9kKCksICJnZXQiKSkgeworICAg
ICAgICAgICAgREVCVUdfTE9HX0VSUk9SKCJFcnJvciBsb2FkaW5nIHJlc291cmNlOiB1bnN1cHBv
cnRlZCBtZXRob2QgKCV7cHVibGljfXMpLCBVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RSKG1f
Y3VycmVudFJlcXVlc3QuaHR0cE1ldGhvZCgpKSwgREVCVUdfU1RSKG1fY3VycmVudFJlcXVlc3Qu
dXJsKCkuc3RyaW5nKCkpKTsKKyAgICAgICAgICAgIGRpZEZpbmlzaChFcnJvcjo6TWV0aG9kTm90
QWxsb3dlZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRv
IGV2ZW50ID0gbV9ldmVudFN0cmVhbS5uZXh0RXZlbnQoKTsKKyAgICAgICAgaWYgKCFldmVudCkg
eworICAgICAgICAgICAgREVCVUdfTE9HX0VSUk9SKCJFcnJvciBsb2FkaW5nIHJlc291cmNlOiBu
ZXh0RXZlbnQgcmV0dXJuIG51bGwsIFVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9jdXJy
ZW50UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworICAgICAgICAgICAgZGlkRmluaXNoKEVycm9y
OjpOb3RGb3VuZEVycm9yKTsgLy8gVE9ETzogVHVybiB0aGlzIGludG8gYSA0MDQ/CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBhdXRvIHZpc2l0b3IgPSBX
VEY6Om1ha2VWaXNpdG9yKAorICAgICAgICAgICAgW3RoaXNdKGNvbnN0IFJlcXVlc3RTZW50RXZl
bnQmIGV2ZW50KSB7CisgICAgICAgICAgICAgICAgcmVwbGF5UmVxdWVzdFNlbnQoZXZlbnQpOwor
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFt0aGlzXShjb25zdCBSZXNwb25zZVJlY2VpdmVk
RXZlbnQmIGV2ZW50KSB7CisgICAgICAgICAgICAgICAgcmVwbGF5UmVzcG9uc2VSZWNlaXZlZChl
dmVudCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgW3RoaXNdKGNvbnN0IFJlZGlyZWN0
UmVjZWl2ZWRFdmVudCYgZXZlbnQpIHsKKyAgICAgICAgICAgICAgICByZXBsYXlSZWRpcmVjdFJl
Y2VpdmVkKGV2ZW50KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbdGhpc10oY29uc3Qg
UmVkaXJlY3RTZW50RXZlbnQmIGV2ZW50KSB7CisgICAgICAgICAgICAgICAgcmVwbGF5UmVkaXJl
Y3RTZW50KGV2ZW50KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbdGhpc10oY29uc3Qg
RGF0YVJlY2VpdmVkRXZlbnQmIGV2ZW50KSB7CisgICAgICAgICAgICAgICAgcmVwbGF5RGF0YVJl
Y2VpdmVkKGV2ZW50KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbdGhpc10oY29uc3Qg
RmluaXNoZWRFdmVudCYgZXZlbnQpIHsKKyAgICAgICAgICAgICAgICByZXBsYXlGaW5pc2hlZChl
dmVudCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICBXVEY6OnZpc2l0KHZpc2l0b3IsICpl
dmVudCk7CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjpyZXBsYXlS
ZXF1ZXN0U2VudChjb25zdCBSZXF1ZXN0U2VudEV2ZW50JiBldmVudCkKK3sKKyAgICBERUJVR19M
T0coIlVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9maXJzdFJlcXVlc3QudXJsKCkuc3Ry
aW5nKCkpKTsKKworICAgIGVucXVldWVFdmVudEhhbmRsZXIoKTsKK30KKwordm9pZCBOZXR3b3Jr
RGF0YVRhc2tSZXBsYXk6OnJlcGxheVJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgUmVzcG9uc2VSZWNl
aXZlZEV2ZW50JiBldmVudCkKK3sKKyAgICBERUJVR19MT0coIlVSTCA9ICV7cHVibGljfXMiLCBE
RUJVR19TVFIobV9maXJzdFJlcXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKKworICAgIFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UoZXZlbnQucmVzcG9uc2UpOworICAgIGRpZFJlY2Vp
dmVSZXNwb25zZShXVEZNb3ZlKHJlc3BvbnNlKSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNr
UmVwbGF5OjpyZXBsYXlSZWRpcmVjdFJlY2VpdmVkKGNvbnN0IFJlZGlyZWN0UmVjZWl2ZWRFdmVu
dCYgZXZlbnQpCit7CisgICAgREVCVUdfTE9HKCJVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RS
KG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisKKyAgICBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlIHJlY2VpdmVkUmVzcG9uc2UgPSBldmVudC5yZXNwb25zZTsKKyAgICBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QgcmVjZWl2ZWRSZXF1ZXN0ID0gZXZlbnQucmVxdWVzdDsKKworICAg
IEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQtPndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0
aW9uKFdURk1vdmUocmVjZWl2ZWRSZXNwb25zZSksIFdURk1vdmUocmVjZWl2ZWRSZXF1ZXN0KSwg
W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYgdXBkYXRlZFJlcXVlc3QpIHsKKyAgICAgICAgREVCVUdfTE9HKCJyZXBs
YXlSZWRpcmVjdFJlY2VpdmVkIGNhbGxiYWNrOiBVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RS
KG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisKKyAgICAgICAgbV9jdXJyZW50UmVx
dWVzdCA9IHVwZGF0ZWRSZXF1ZXN0OworICAgICAgICBlbnF1ZXVlRXZlbnRIYW5kbGVyKCk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjpyZXBsYXlSZWRpcmVjdFNl
bnQoY29uc3QgUmVkaXJlY3RTZW50RXZlbnQmIGV2ZW50KQoreworICAgIERFQlVHX0xPRygiVVJM
ID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkp
OworCisgICAgZW5xdWV1ZUV2ZW50SGFuZGxlcigpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFz
a1JlcGxheTo6cmVwbGF5RGF0YVJlY2VpdmVkKGNvbnN0IERhdGFSZWNlaXZlZEV2ZW50JiBldmVu
dCkKK3sKKyAgICBERUJVR19MT0coIlVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9maXJz
dFJlcXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKKworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAg
bV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKGV2ZW50LmRhdGEuY29weVJlZigpKTsKKworICAgIGVu
cXVldWVFdmVudEhhbmRsZXIoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnJl
cGxheUZpbmlzaGVkKGNvbnN0IEZpbmlzaGVkRXZlbnQmIGV2ZW50KQoreworICAgIERFQlVHX0xP
RygiVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJp
bmcoKSkpOworCisgICAgZGlkRmluaXNoKGV2ZW50LmVycm9yKTsKK30KKwordm9pZCBOZXR3b3Jr
RGF0YVRhc2tSZXBsYXk6OmRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJiYgcmVzcG9uc2UpCit7CisgICAgREVCVUdfTE9HKCJVUkwgPSAle3B1YmxpY31zIiwgREVC
VUdfU1RSKG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisKKyAgICBBU1NFUlQobV9j
bGllbnQpOworICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2VOZXR3b3JrU2Vzc2lvbihX
VEZNb3ZlKHJlc3BvbnNlKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0o
V2ViQ29yZTo6UG9saWN5QWN0aW9uIHBvbGljeUFjdGlvbikgeworICAgICAgICBERUJVR19MT0co
ImRpZFJlY2VpdmVSZXNwb25zZSBjYWxsYmFjayAoJXUpIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHBvbGljeUFjdGlvbikpOworCisgICAgICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxp
bmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKSB7CisgICAgICAgICAgICBjb21wbGV0
ZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChw
b2xpY3lBY3Rpb24pIHsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpQb2xpY3lBY3Rpb246OlBvbGlj
eVVzZToKKyAgICAgICAgICAgIGVucXVldWVFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFdlYkNvcmU6OlBvbGljeUFjdGlvbjo6UG9saWN5SWdub3JlOgor
ICAgICAgICAgICAgY29tcGxldGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFdlYkNvcmU6OlBvbGljeUFjdGlvbjo6UG9saWN5RG93bmxvYWQ6CisgICAgICAgICAgICBERUJV
R19MT0dfRVJST1IoIldlYkNvcmU6OlBvbGljeUFjdGlvbjo6UG9saWN5RG93bmxvYWQiKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0Rh
dGFUYXNrUmVwbGF5OjpkaWRGaW5pc2goKQoreworICAgIGRpZEZpbmlzaCh7IH0pOworfQorCit2
b2lkIE5ldHdvcmtEYXRhVGFza1JlcGxheTo6ZGlkRmluaXNoKEVycm9yIGVycm9yQ29kZSkKK3sK
KyAgICBkaWRGaW5pc2goV2ViQ29yZTo6UmVzb3VyY2VFcnJvcih3ZWJLaXRSZWxheURvbWFpbiwg
c3RhdGljX2Nhc3Q8aW50PihlcnJvckNvZGUpLCBtX2ZpcnN0UmVxdWVzdC51cmwoKSwgU3RyaW5n
KCkpKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmRpZEZpbmlzaChjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBERUJVR19MT0coIiglZCkiLCBl
cnJvci5lcnJvckNvZGUoKSk7CisKKyAgICBjb21wbGV0ZSgpOworCisgICAgQVNTRVJUKG1fY2xp
ZW50KTsKKyAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoZXJyb3IpOworfQorCit9
IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuaCBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0RhdGFUYXNrUmVwbGF5LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjNmMTc3MTljY2QwZTk5NWQwYjIxM2I3NDUyOTQ2NjkzMzhlYzA1ZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0
d29ya0RhdGFUYXNrUmVwbGF5LmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRlICJOZXR3
b3JrQ2FwdHVyZVJlc291cmNlLmgiCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Y2xhc3MgUmVzb3VyY2VFcnJvcjsKK2NsYXNzIFJlc291cmNlUmVzcG9uc2U7Cit9CisKK25hbWVz
cGFjZSBXZWJLaXQgeworY2xhc3MgTmV0d29ya0RhdGFUYXNrQ2xpZW50OworY2xhc3MgTmV0d29y
a0xvYWRQYXJhbWV0ZXJzOworY2xhc3MgTmV0d29ya1Nlc3Npb247Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlIHsKKworc3RydWN0IFJlcXVlc3RTZW50
RXZlbnQ7CitzdHJ1Y3QgUmVzcG9uc2VSZWNlaXZlZEV2ZW50Oworc3RydWN0IFJlZGlyZWN0UmVj
ZWl2ZWRFdmVudDsKK3N0cnVjdCBSZWRpcmVjdFNlbnRFdmVudDsKK3N0cnVjdCBEYXRhUmVjZWl2
ZWRFdmVudDsKK3N0cnVjdCBGaW5pc2hlZEV2ZW50OworCitjbGFzcyBOZXR3b3JrRGF0YVRhc2tS
ZXBsYXkgOiBwdWJsaWMgTmV0d29ya0RhdGFUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PE5ldHdvcmtEYXRhVGFza1JlcGxheT4gY3JlYXRlKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBO
ZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNsaWVudCwgY29uc3QgTmV0d29ya0xvYWRQYXJhbWV0ZXJz
JiBwYXJhbWV0ZXJzLCBSZXNvdXJjZSogcmVzb3VyY2UpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBOZXR3b3JrRGF0YVRhc2tSZXBsYXkoc2Vzc2lvbiwgY2xpZW50LCBwYXJh
bWV0ZXJzLCByZXNvdXJjZSkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBOZXR3b3JrRGF0YVRh
c2tSZXBsYXkoTmV0d29ya1Nlc3Npb24mLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmLCBjb25zdCBO
ZXR3b3JrTG9hZFBhcmFtZXRlcnMmLCBSZXNvdXJjZSopOworICAgIH5OZXR3b3JrRGF0YVRhc2tS
ZXBsYXkoKSBvdmVycmlkZTsKKworICAgIHZvaWQgcmVzdW1lKCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBzdXNwZW5kKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjYW5jZWwoKSBvdmVycmlkZTsKKyAgICB2
b2lkIGNvbXBsZXRlKCk7CisgICAgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCkgb3ZlcnJpZGU7
CisKKyAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc3RhdGU7IH0K
KworICAgIHZvaWQgZW5xdWV1ZUV2ZW50SGFuZGxlcigpOworCitwdWJsaWM6CisgICAgdm9pZCBy
ZXBsYXlSZXF1ZXN0U2VudChjb25zdCBSZXF1ZXN0U2VudEV2ZW50Jik7CisgICAgdm9pZCByZXBs
YXlSZXNwb25zZVJlY2VpdmVkKGNvbnN0IFJlc3BvbnNlUmVjZWl2ZWRFdmVudCYpOworICAgIHZv
aWQgcmVwbGF5UmVkaXJlY3RSZWNlaXZlZChjb25zdCBSZWRpcmVjdFJlY2VpdmVkRXZlbnQmKTsK
KyAgICB2b2lkIHJlcGxheVJlZGlyZWN0U2VudChjb25zdCBSZWRpcmVjdFNlbnRFdmVudCYpOwor
ICAgIHZvaWQgcmVwbGF5RGF0YVJlY2VpdmVkKGNvbnN0IERhdGFSZWNlaXZlZEV2ZW50Jik7Cisg
ICAgdm9pZCByZXBsYXlGaW5pc2hlZChjb25zdCBGaW5pc2hlZEV2ZW50Jik7CisKK3ByaXZhdGU6
CisgICAgZW51bSBjbGFzcyBFcnJvciB7CisgICAgICAgIE5vRXJyb3IgPSAwLAorICAgICAgICBO
b3RGb3VuZEVycm9yID0gMSwKKyAgICAgICAgTWV0aG9kTm90QWxsb3dlZCA9IDUKKyAgICB9Owor
CisgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYm
KTsKKyAgICB2b2lkIGRpZEZpbmlzaCgpOworICAgIHZvaWQgZGlkRmluaXNoKEVycm9yKTsKKyAg
ICB2b2lkIGRpZEZpbmlzaChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CisKK3ByaXZh
dGU6CisgICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpTdXNwZW5kZWQgfTsKKyAgICBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsKKyAgICBSZXNvdXJjZSogbV9yZXNv
dXJjZTsKKyAgICBSZXNvdXJjZTo6RXZlbnRTdHJlYW0gbV9ldmVudFN0cmVhbTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL2pzb24uaHBwIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FwdHVyZS9qc29uLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZjI4YzZlZjQxMTZiMzdmZWQy
NjhhZWRhZTlmYzEzYjRlNTg3Y2M1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9qc29uLmhwcApAQCAtMCwwICsxLDEwNzk0IEBACisvKgor
ICAgIF9fIF9fX19fIF9fX19fIF9fX19fCisgX198ICB8ICAgX198ICAgICB8ICAgfCB8ICBKU09O
IGZvciBNb2Rlcm4gQysrCit8ICB8ICB8X18gICB8ICB8ICB8IHwgfCB8ICB2ZXJzaW9uIDIuMC43
Cit8X19fX198X19fX198X19fX198X3xfX198ICBodHRwczovL2dpdGh1Yi5jb20vbmxvaG1hbm4v
anNvbgorCitMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgPGh0dHA6Ly9vcGVuc291cmNl
Lm9yZy9saWNlbnNlcy9NSVQ+LgorQ29weXJpZ2h0IChjKSAyMDEzLTIwMTYgTmllbHMgTG9obWFu
biA8aHR0cDovL25sb2htYW5uLm1lPi4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgIGdyYW50ZWQs
IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgIHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlz
IHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkICBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3
YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSAgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j
bHVkaW5nIHdpdGhvdXQgIGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gIHVzZSwgY29weSwgIG1v
ZGlmeSwgbWVyZ2UsICBwdWJsaXNoLCBkaXN0cmlidXRlLCAgc3VibGljZW5zZSwgYW5kL29yICBz
ZWxsCitjb3BpZXMgIG9mICB0aGUgU29mdHdhcmUsICBhbmQgIHRvICBwZXJtaXQgcGVyc29ucyAg
dG8gIHdob20gIHRoZSBTb2Z0d2FyZSAgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0
byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl
IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAorY29w
aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRX
QVJFICBJUyBQUk9WSURFRCAiQVMgIElTIiwgV0lUSE9VVCBXQVJSQU5UWSAgT0YgQU5ZIEtJTkQs
ICBFWFBSRVNTIE9SCitJTVBMSUVELCAgSU5DTFVESU5HIEJVVCAgTk9UICBMSU1JVEVEIFRPICBU
SEUgIFdBUlJBTlRJRVMgT0YgIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SICBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBTkQgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgIFNIQUxMIFRI
RQorQVVUSE9SUyAgT1IgQ09QWVJJR0hUICBIT0xERVJTICBCRSAgTElBQkxFIEZPUiAgQU5ZICBD
TEFJTSwgIERBTUFHRVMgT1IgIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O
IE9GICBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBP
UiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFICBPUiBUSEUgVVNFIE9SIE9USEVSIERF
QUxJTkdTIElOIFRIRQorU09GVFdBUkUuCisqLworCisvKgorICogVGhpcyBmaWxlIHdhcyB0YWtl
biBmcm9tIDxodHRwczovL2dpdGh1Yi5jb20vbmxvaG1hbm4vanNvbj4gYXQgcmV2aXNpb24KKyAq
IGU3MTc0OTIwMTk2ODdiZjBlZGYyYjg4NGI1MWJmMzdkYjQ4MzFhNmYgYW5kIG1vZGlmaWVkIGFz
IGZvbGxvd3MgZm9yCisgKiBpbmNsdXNpb24gaW4gV2ViS2l0OgorICoKKyAqICAqIEV4Y2VwdGlv
bnMgYXJlIGRpc2FibGVkIGluIFdlYktpdCwgc28gYWxsICd0aHJvdycgc3RhdGVtZW50cyB3ZXJl
CisgKiAgICBjb252ZXJ0ZWQgaW50byBhIGNhbGwgdG8gYSBUaHJvdyBmdW5jdGlvbi4gVGhpcyBm
dW5jdGlvbiBjYW4gYmUgZW5hYmxlZAorICogICAgdG8gaW52b2tlICd0aHJvdycgYXMgYmVmb3Jl
LCBidXQgYnkgZGVmYXVsdCBhc3NlcnRzIGFuZCBjcmFzaGVzLgorICogICogdHJ5L2NhdGNoIHN0
YXRlbWVudHMgYXJlIGFsc28gZGlzYWxsb3dlZCwgc28gdGhlc2Ugd2VyZSBjb252ZXJ0ZWQgaW50
bworICogICAgc2ltcGxlIGlmL3RoZW4gY2hlY2tzIHdoZXJlIHBvc3NpYmxlLiBXaGVyZSBub3Qg
cG9zc2libGUsIHRoZSB0cnkvY2F0Y2gKKyAqICAgIHN0YXRlbWVudHMgd2VyZSBzaW1wbHkgcmVt
b3ZlZCB3aXRoIHRoZSBleHBlY3RhdGlvbiB0aGF0IG5vIGNvZGUgcGF0aHMKKyAqICAgIHdvdWxk
IHRyaWdnZXIgdGhlIGFudGljaXBhdGVkIGV4Y2VwdGlvbnMuCisgKiAgKiBGb3IgZWZmaWNpZW5j
eSwgYSBiYXNpY19qc29uIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgYQorICogICAgc3RyaW5nX3Q6
OnZhbHVlX3R5cGUqIGFuZCBhIGNvdW50IHdhcyBhZGRlZC4KKyAqLworCisjaWZuZGVmIE5MT0hN
QU5OX0pTT05fSFBQCisjZGVmaW5lIE5MT0hNQU5OX0pTT05fSFBQCisKKyNpbmNsdWRlIDxhbGdv
cml0aG0+IC8vIGFsbF9vZiwgZm9yX2VhY2gsIHRyYW5zZm9ybQorI2luY2x1ZGUgPGFycmF5PiAv
LyBhcnJheQorI2luY2x1ZGUgPGNhc3NlcnQ+IC8vIGFzc2VydAorI2luY2x1ZGUgPGNjdHlwZT4g
Ly8gaXNkaWdpdAorI2luY2x1ZGUgPGNpc282NDY+IC8vIGFuZCwgbm90LCBvcgorI2luY2x1ZGUg
PGNtYXRoPiAvLyBpc2Zpbml0ZSwgc2lnbmJpdAorI2luY2x1ZGUgPGNzdGRkZWY+IC8vIG51bGxw
dHJfdCwgcHRyZGlmZl90LCBzaXplX3QKKyNpbmNsdWRlIDxjc3RkaW50PiAvLyBpbnQ2NF90LCB1
aW50NjRfdAorI2luY2x1ZGUgPGNzdGRsaWI+IC8vIHN0cnRvZCwgc3RydG9mLCBzdHJ0b2xkLCBz
dHJ0b3VsCisjaW5jbHVkZSA8Y3N0cmluZz4gLy8gc3RybGVuCisjaW5jbHVkZSA8ZnVuY3Rpb25h
bD4gLy8gZnVuY3Rpb24sIGhhc2gsIGxlc3MKKyNpbmNsdWRlIDxpbml0aWFsaXplcl9saXN0PiAv
LyBpbml0aWFsaXplcl9saXN0CisjaW5jbHVkZSA8aW9tYW5pcD4gLy8gc2V0dworI2luY2x1ZGUg
PGlvc3RyZWFtPiAvLyBpc3RyZWFtLCBvc3RyZWFtCisjaW5jbHVkZSA8aXRlcmF0b3I+IC8vIGFk
dmFuY2UsIGJlZ2luLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgZGlzdGFuY2UsIGVuZCwg
aW5zZXJ0ZXIsIGl0ZXJhdG9yLCBpdGVyYXRvcl90cmFpdHMsIG5leHQsIHJhbmRvbV9hY2Nlc3Nf
aXRlcmF0b3JfdGFnLCByZXZlcnNlX2l0ZXJhdG9yCisjaW5jbHVkZSA8bGltaXRzPiAvLyBudW1l
cmljX2xpbWl0cworI2luY2x1ZGUgPGxvY2FsZT4gLy8gbG9jYWxlCisjaW5jbHVkZSA8bWFwPiAv
LyBtYXAKKyNpbmNsdWRlIDxtZW1vcnk+IC8vIGFkZHJlc3NvZiwgYWxsb2NhdG9yLCBhbGxvY2F0
b3JfdHJhaXRzLCB1bmlxdWVfcHRyCisjaW5jbHVkZSA8bnVtZXJpYz4gLy8gYWNjdW11bGF0ZQor
I2luY2x1ZGUgPHNzdHJlYW0+IC8vIHN0cmluZ3N0cmVhbQorI2luY2x1ZGUgPHN0ZGV4Y2VwdD4g
Ly8gZG9tYWluX2Vycm9yLCBpbnZhbGlkX2FyZ3VtZW50LCBvdXRfb2ZfcmFuZ2UKKyNpbmNsdWRl
IDxzdHJpbmc+IC8vIGdldGxpbmUsIHN0b2ksIHN0cmluZywgdG9fc3RyaW5nCisjaW5jbHVkZSA8
dHlwZV90cmFpdHM+IC8vIGFkZF9wb2ludGVyLCBlbmFibGVfaWYsIGlzX2FyaXRobWV0aWMsIGlz
X2Jhc2Vfb2YsIGlzX2NvbnN0LCBpc19jb25zdHJ1Y3RpYmxlLCBpc19jb252ZXJ0aWJsZSwgaXNf
ZmxvYXRpbmdfcG9pbnQsIGlzX2ludGVncmFsLCBpc19ub3Rocm93X21vdmVfYXNzaWduYWJsZSwg
c3RkOjppc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZSwgc3RkOjppc19wb2ludGVyLCBzdGQ6
OmlzX3JlZmVyZW5jZSwgc3RkOjppc19zYW1lLCByZW1vdmVfY29uc3QsIHJlbW92ZV9wb2ludGVy
LCByZW1vdmVfcmVmZXJlbmNlCisjaW5jbHVkZSA8dXRpbGl0eT4gLy8gZGVjbHZhbCwgZm9yd2Fy
ZCwgbWFrZV9wYWlyLCBtb3ZlLCBwYWlyLCBzd2FwCisjaW5jbHVkZSA8dmVjdG9yPiAvLyB2ZWN0
b3IKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+IC8vIEFTU0VSVAorI2luY2x1ZGUgPHd0
Zi9Db21waWxlci5oPiAvLyBOT19SRVRVUk4KKworLy8gZXhjbHVkZSB1bnN1cHBvcnRlZCBjb21w
aWxlcnMKKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKyAgICAjZGVmaW5lIENMQU5HX1ZFUlNJT04g
KF9fY2xhbmdfbWFqb3JfXyAqIDEwMDAwICsgX19jbGFuZ19taW5vcl9fICogMTAwICsgX19jbGFu
Z19wYXRjaGxldmVsX18pCisgICAgI2lmIENMQU5HX1ZFUlNJT04gPCAzMDQwMAorICAgICAgICAj
ZXJyb3IgInVuc3VwcG9ydGVkIENsYW5nIHZlcnNpb24gLSBzZWUgaHR0cHM6Ly9naXRodWIuY29t
L25sb2htYW5uL2pzb24jc3VwcG9ydGVkLWNvbXBpbGVycyIKKyAgICAjZW5kaWYKKyNlbGlmIGRl
ZmluZWQoX19HTlVDX18pCisgICAgI2RlZmluZSBHQ0NfVkVSU0lPTiAoX19HTlVDX18gKiAxMDAw
MCArIF9fR05VQ19NSU5PUl9fICogMTAwICsgX19HTlVDX1BBVENITEVWRUxfXykKKyAgICAjaWYg
R0NDX1ZFUlNJT04gPCA0MDkwMAorICAgICAgICAjZXJyb3IgInVuc3VwcG9ydGVkIEdDQyB2ZXJz
aW9uIC0gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ubG9obWFubi9qc29uI3N1cHBvcnRlZC1jb21w
aWxlcnMiCisgICAgI2VuZGlmCisjZW5kaWYKKworLy8gZGlzYWJsZSBmbG9hdC1lcXVhbCB3YXJu
aW5ncyBvbiBHQ0MvY2xhbmcKKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykgfHwgZGVmaW5lZChfX0dO
VUNfXykgfHwgZGVmaW5lZChfX0dOVUdfXykKKyAgICAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1
c2gKKyAgICAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZmxvYXQtZXF1YWwiCisj
ZW5kaWYKKworLy8gYWxsb3cgZm9yIHBvcnRhYmxlIGRlcHJlY2F0aW9uIHdhcm5pbmdzCisjaWYg
ZGVmaW5lZChfX2NsYW5nX18pIHx8IGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19HTlVH
X18pCisgICAgI2RlZmluZSBKU09OX0RFUFJFQ0FURUQgX19hdHRyaWJ1dGVfXygoZGVwcmVjYXRl
ZCkpCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorICAgICNkZWZpbmUgSlNPTl9ERVBSRUNBVEVE
IF9fZGVjbHNwZWMoZGVwcmVjYXRlZCkKKyNlbHNlCisgICAgI2RlZmluZSBKU09OX0RFUFJFQ0FU
RUQKKyNlbmRpZgorCisvKiEKK0BicmllZiBuYW1lc3BhY2UgZm9yIE5pZWxzIExvaG1hbm4KK0Bz
ZWUgaHR0cHM6Ly9naXRodWIuY29tL25sb2htYW5uCitAc2luY2UgdmVyc2lvbiAxLjAuMAorKi8K
K25hbWVzcGFjZSBubG9obWFubgoreworCisKKy8qIQorQGJyaWVmIHVubmFtZWQgbmFtZXNwYWNl
IHdpdGggaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucworQHNpbmNlIHZlcnNpb24gMS4wLjAKKyov
CituYW1lc3BhY2UKK3sKKy8qIQorQGJyaWVmIEhlbHBlciB0byBkZXRlcm1pbmUgd2hldGhlciB0
aGVyZSdzIGEga2V5X3R5cGUgZm9yIFQuCisKK1RodXMgaGVscGVyIGlzIHVzZWQgdG8gdGVsbCBh
c3NvY2lhdGl2ZSBjb250YWluZXJzIGFwYXJ0IGZyb20gb3RoZXIgY29udGFpbmVycworc3VjaCBh
cyBzZXF1ZW5jZSBjb250YWluZXJzLiBGb3IgaW5zdGFuY2UsIGBzdGQ6Om1hcGAgcGFzc2VzIHRo
ZSB0ZXN0IGFzIGl0Citjb250YWlucyBhIGBtYXBwZWRfdHlwZWAsIHdoZXJlYXMgYHN0ZDo6dmVj
dG9yYCBmYWlscyB0aGUgdGVzdC4KKworQHNhIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzc3
Mjg3MjgvMjY2Mzc4CitAc2luY2UgdmVyc2lvbiAxLjAuMCwgb3ZlcndvcmtlZCBpbiB2ZXJzaW9u
IDIuMC42CisqLwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBoYXNfbWFwcGVkX3R5cGUK
K3sKKyAgcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgPSB0eXBl
bmFtZSBVOjptYXBwZWRfdHlwZT4KKyAgICBzdGF0aWMgaW50IGRldGVjdChVJiYpOworCisgICAg
c3RhdGljIHZvaWQgZGV0ZWN0KC4uLik7CisgIHB1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgdmFsdWUgPQorICAgICAgICBzdGQ6OmlzX2ludGVncmFsPGRlY2x0eXBlKGRldGVjdChz
dGQ6OmRlY2x2YWw8VD4oKSkpPjo6dmFsdWU7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgLi4uIFR5cGVzPgorTk9fUkVUVVJOIHZvaWQgVGhyb3coVHlwZXMgLi4uIGFyZ3Mp
Cit7CisjaWYgMAorICAgIHRocm93IFQoc3RkOjpmb3J3YXJkPFR5cGVzPihhcmdzKS4uLik7Cisj
ZWxzZQorICAgIEFTU0VSVChmYWxzZSk7CisgICAgV1RGQ3Jhc2goKTsKKyNlbmRpZgorfQorfQor
CisvKiEKK0BicmllZiBhIGNsYXNzIHRvIHN0b3JlIEpTT04gdmFsdWVzCisKK0B0cGFyYW0gT2Jq
ZWN0VHlwZSB0eXBlIGZvciBKU09OIG9iamVjdHMgKGBzdGQ6Om1hcGAgYnkgZGVmYXVsdDsgd2ls
bCBiZSB1c2VkCitpbiBAcmVmIG9iamVjdF90KQorQHRwYXJhbSBBcnJheVR5cGUgdHlwZSBmb3Ig
SlNPTiBhcnJheXMgKGBzdGQ6OnZlY3RvcmAgYnkgZGVmYXVsdDsgd2lsbCBiZSB1c2VkCitpbiBA
cmVmIGFycmF5X3QpCitAdHBhcmFtIFN0cmluZ1R5cGUgdHlwZSBmb3IgSlNPTiBzdHJpbmdzIGFu
ZCBvYmplY3Qga2V5cyAoYHN0ZDo6c3RyaW5nYCBieQorZGVmYXVsdDsgd2lsbCBiZSB1c2VkIGlu
IEByZWYgc3RyaW5nX3QpCitAdHBhcmFtIEJvb2xlYW5UeXBlIHR5cGUgZm9yIEpTT04gYm9vbGVh
bnMgKGBib29sYCBieSBkZWZhdWx0OyB3aWxsIGJlIHVzZWQKK2luIEByZWYgYm9vbGVhbl90KQor
QHRwYXJhbSBOdW1iZXJJbnRlZ2VyVHlwZSB0eXBlIGZvciBKU09OIGludGVnZXIgbnVtYmVycyAo
YGludDY0X3RgIGJ5CitkZWZhdWx0OyB3aWxsIGJlIHVzZWQgaW4gQHJlZiBudW1iZXJfaW50ZWdl
cl90KQorQHRwYXJhbSBOdW1iZXJVbnNpZ25lZFR5cGUgdHlwZSBmb3IgSlNPTiB1bnNpZ25lZCBp
bnRlZ2VyIG51bWJlcnMgKEBjCitgdWludDY0X3RgIGJ5IGRlZmF1bHQ7IHdpbGwgYmUgdXNlZCBp
biBAcmVmIG51bWJlcl91bnNpZ25lZF90KQorQHRwYXJhbSBOdW1iZXJGbG9hdFR5cGUgdHlwZSBm
b3IgSlNPTiBmbG9hdGluZy1wb2ludCBudW1iZXJzIChgZG91YmxlYCBieQorZGVmYXVsdDsgd2ls
bCBiZSB1c2VkIGluIEByZWYgbnVtYmVyX2Zsb2F0X3QpCitAdHBhcmFtIEFsbG9jYXRvclR5cGUg
dHlwZSBvZiB0aGUgYWxsb2NhdG9yIHRvIHVzZSAoYHN0ZDo6YWxsb2NhdG9yYCBieQorZGVmYXVs
dCkKKworQHJlcXVpcmVtZW50IFRoZSBjbGFzcyBzYXRpc2ZpZXMgdGhlIGZvbGxvd2luZyBjb25j
ZXB0IHJlcXVpcmVtZW50czoKKy0gQmFzaWMKKyAtIFtEZWZhdWx0Q29uc3RydWN0aWJsZV0oaHR0
cDovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29uY2VwdC9EZWZhdWx0Q29uc3RydWN0aWJs
ZSk6CisgICBKU09OIHZhbHVlcyBjYW4gYmUgZGVmYXVsdCBjb25zdHJ1Y3RlZC4gVGhlIHJlc3Vs
dCB3aWxsIGJlIGEgSlNPTiBudWxsIHZhbHVlLgorIC0gW01vdmVDb25zdHJ1Y3RpYmxlXShodHRw
Oi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L01vdmVDb25zdHJ1Y3RpYmxlKToK
KyAgIEEgSlNPTiB2YWx1ZSBjYW4gYmUgY29uc3RydWN0ZWQgZnJvbSBhbiBydmFsdWUgYXJndW1l
bnQuCisgLSBbQ29weUNvbnN0cnVjdGlibGVdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cv
Y3BwL2NvbmNlcHQvQ29weUNvbnN0cnVjdGlibGUpOgorICAgQSBKU09OIHZhbHVlIGNhbiBiZSBj
b3B5LWNvbnN0cnVjdGVkIGZyb20gYW4gbHZhbHVlIGV4cHJlc3Npb24uCisgLSBbTW92ZUFzc2ln
bmFibGVdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNlcHQvTW92ZUFzc2ln
bmFibGUpOgorICAgQSBKU09OIHZhbHVlIHZhbiBiZSBhc3NpZ25lZCBmcm9tIGFuIHJ2YWx1ZSBh
cmd1bWVudC4KKyAtIFtDb3B5QXNzaWduYWJsZV0oaHR0cDovL2VuLmNwcHJlZmVyZW5jZS5jb20v
dy9jcHAvY29uY2VwdC9Db3B5QXNzaWduYWJsZSk6CisgICBBIEpTT04gdmFsdWUgY2FuIGJlIGNv
cHktYXNzaWduZWQgZnJvbSBhbiBsdmFsdWUgZXhwcmVzc2lvbi4KKyAtIFtEZXN0cnVjdGlibGVd
KGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNlcHQvRGVzdHJ1Y3RpYmxlKToK
KyAgIEpTT04gdmFsdWVzIGNhbiBiZSBkZXN0cnVjdGVkLgorLSBMYXlvdXQKKyAtIFtTdGFuZGFy
ZExheW91dFR5cGVdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNlcHQvU3Rh
bmRhcmRMYXlvdXRUeXBlKToKKyAgIEpTT04gdmFsdWVzIGhhdmUKKyAgIFtzdGFuZGFyZCBsYXlv
dXRdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2xhbmd1YWdlL2RhdGFfbWVtYmVy
cyNTdGFuZGFyZF9sYXlvdXQpOgorICAgQWxsIG5vbi1zdGF0aWMgZGF0YSBtZW1iZXJzIGFyZSBw
cml2YXRlIGFuZCBzdGFuZGFyZCBsYXlvdXQgdHlwZXMsIHRoZSBjbGFzcworICAgaGFzIG5vIHZp
cnR1YWwgZnVuY3Rpb25zIG9yICh2aXJ0dWFsKSBiYXNlIGNsYXNzZXMuCistIExpYnJhcnktd2lk
ZQorIC0gW0VxdWFsaXR5Q29tcGFyYWJsZV0oaHR0cDovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9j
cHAvY29uY2VwdC9FcXVhbGl0eUNvbXBhcmFibGUpOgorICAgSlNPTiB2YWx1ZXMgY2FuIGJlIGNv
bXBhcmVkIHdpdGggYD09YCwgc2VlIEByZWYKKyAgIG9wZXJhdG9yPT0oY29uc3RfcmVmZXJlbmNl
LGNvbnN0X3JlZmVyZW5jZSkuCisgLSBbTGVzc1RoYW5Db21wYXJhYmxlXShodHRwOi8vZW4uY3Bw
cmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L0xlc3NUaGFuQ29tcGFyYWJsZSk6CisgICBKU09O
IHZhbHVlcyBjYW4gYmUgY29tcGFyZWQgd2l0aCBgPGAsIHNlZSBAcmVmCisgICBvcGVyYXRvcjwo
Y29uc3RfcmVmZXJlbmNlLGNvbnN0X3JlZmVyZW5jZSkuCisgLSBbU3dhcHBhYmxlXShodHRwOi8v
ZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L1N3YXBwYWJsZSk6CisgICBBbnkgSlNP
TiBsdmFsdWUgb3IgcnZhbHVlIG9mIGNhbiBiZSBzd2FwcGVkIHdpdGggYW55IGx2YWx1ZSBvciBy
dmFsdWUgb2YKKyAgIG90aGVyIGNvbXBhdGlibGUgdHlwZXMsIHVzaW5nIHVucXVhbGlmaWVkIGZ1
bmN0aW9uIGNhbGwgQHJlZiBzd2FwKCkuCisgLSBbTnVsbGFibGVQb2ludGVyXShodHRwOi8vZW4u
Y3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L051bGxhYmxlUG9pbnRlcik6CisgICBKU09O
IHZhbHVlcyBjYW4gYmUgY29tcGFyZWQgYWdhaW5zdCBgc3RkOjpudWxscHRyX3RgIG9iamVjdHMg
d2hpY2ggYXJlIHVzZWQKKyAgIHRvIG1vZGVsIHRoZSBgbnVsbGAgdmFsdWUuCistIENvbnRhaW5l
cgorIC0gW0NvbnRhaW5lcl0oaHR0cDovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29uY2Vw
dC9Db250YWluZXIpOgorICAgSlNPTiB2YWx1ZXMgY2FuIGJlIHVzZWQgbGlrZSBTVEwgY29udGFp
bmVycyBhbmQgcHJvdmlkZSBpdGVyYXRvciBhY2Nlc3MuCisgLSBbUmV2ZXJzaWJsZUNvbnRhaW5l
cl0oaHR0cDovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29uY2VwdC9SZXZlcnNpYmxlQ29u
dGFpbmVyKTsKKyAgIEpTT04gdmFsdWVzIGNhbiBiZSB1c2VkIGxpa2UgU1RMIGNvbnRhaW5lcnMg
YW5kIHByb3ZpZGUgcmV2ZXJzZSBpdGVyYXRvcgorICAgYWNjZXNzLgorCitAaW52YXJpYW50IFRo
ZSBtZW1iZXIgdmFyaWFibGVzIEBhIG1fdmFsdWUgYW5kIEBhIG1fdHlwZSBoYXZlIHRoZSBmb2xs
b3dpbmcKK3JlbGF0aW9uc2hpcDoKKy0gSWYgYG1fdHlwZSA9PSB2YWx1ZV90OjpvYmplY3RgLCB0
aGVuIGBtX3ZhbHVlLm9iamVjdCAhPSBudWxscHRyYC4KKy0gSWYgYG1fdHlwZSA9PSB2YWx1ZV90
OjphcnJheWAsIHRoZW4gYG1fdmFsdWUuYXJyYXkgIT0gbnVsbHB0cmAuCistIElmIGBtX3R5cGUg
PT0gdmFsdWVfdDo6c3RyaW5nYCwgdGhlbiBgbV92YWx1ZS5zdHJpbmcgIT0gbnVsbHB0cmAuCitU
aGUgaW52YXJpYW50cyBhcmUgY2hlY2tlZCBieSBtZW1iZXIgZnVuY3Rpb24gYXNzZXJ0X2ludmFy
aWFudCgpLgorCitAaW50ZXJuYWwKK0Bub3RlIE9iamVjdFR5cGUgdHJpY2sgZnJvbSBodHRwOi8v
c3RhY2tvdmVyZmxvdy5jb20vYS85ODYwOTExCitAZW5kaW50ZXJuYWwKKworQHNlZSBbUkZDIDcx
NTk6IFRoZSBKYXZhU2NyaXB0IE9iamVjdCBOb3RhdGlvbiAoSlNPTikgRGF0YSBJbnRlcmNoYW5n
ZQorRm9ybWF0XShodHRwOi8vcmZjNzE1OS5uZXQvcmZjNzE1OSkKKworQHNpbmNlIHZlcnNpb24g
MS4wLjAKKworQG5vc3ViZ3JvdXBpbmcKKyovCit0ZW1wbGF0ZSA8CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUuLi4gQXJncz4gY2xhc3MgT2JqZWN0VHlwZSA9
IHN0ZDo6bWFwLAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lLi4uIEFyZ3M+IGNs
YXNzIEFycmF5VHlwZSA9IHN0ZDo6dmVjdG9yLAorICAgIGNsYXNzIFN0cmluZ1R5cGUgPSBzdGQ6
OnN0cmluZywKKyAgICBjbGFzcyBCb29sZWFuVHlwZSA9IGJvb2wsCisgICAgY2xhc3MgTnVtYmVy
SW50ZWdlclR5cGUgPSBzdGQ6OmludDY0X3QsCisgICAgY2xhc3MgTnVtYmVyVW5zaWduZWRUeXBl
ID0gc3RkOjp1aW50NjRfdCwKKyAgICBjbGFzcyBOdW1iZXJGbG9hdFR5cGUgPSBkb3VibGUsCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gY2xhc3MgQWxsb2NhdG9yVHlwZSA9IHN0ZDo6YWxsb2Nh
dG9yCisgICAgPgorY2xhc3MgYmFzaWNfanNvbgoreworICBwcml2YXRlOgorICAgIC8vLyB3b3Jr
YXJvdW5kIHR5cGUgZm9yIE1TVkMKKyAgICB1c2luZyBiYXNpY19qc29uX3QgPSBiYXNpY19qc29u
PE9iamVjdFR5cGUsIEFycmF5VHlwZSwgU3RyaW5nVHlwZSwKKyAgICAgICAgICBCb29sZWFuVHlw
ZSwgTnVtYmVySW50ZWdlclR5cGUsIE51bWJlclVuc2lnbmVkVHlwZSwgTnVtYmVyRmxvYXRUeXBl
LAorICAgICAgICAgIEFsbG9jYXRvclR5cGU+OworCisgIHB1YmxpYzoKKyAgICAvLyBmb3J3YXJk
IGRlY2xhcmF0aW9ucworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2U+IGNsYXNzIGpzb25fcmV2
ZXJzZV9pdGVyYXRvcjsKKyAgICBjbGFzcyBqc29uX3BvaW50ZXI7CisKKyAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KKyAgICAvLyBjb250YWluZXIgdHlwZXMgLy8KKyAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKworICAgIC8vLyBAbmFtZSBjb250YWluZXIgdHlwZXMKKyAgICAvLy8gVGhlIGNh
bm9uaWMgY29udGFpbmVyIHR5cGVzIHRvIHVzZSBAcmVmIGJhc2ljX2pzb24gbGlrZSBhbnkgb3Ro
ZXIgU1RMCisgICAgLy8vIGNvbnRhaW5lci4KKyAgICAvLy8gQHsKKworICAgIC8vLyB0aGUgdHlw
ZSBvZiBlbGVtZW50cyBpbiBhIGJhc2ljX2pzb24gY29udGFpbmVyCisgICAgdXNpbmcgdmFsdWVf
dHlwZSA9IGJhc2ljX2pzb247CisKKyAgICAvLy8gdGhlIHR5cGUgb2YgYW4gZWxlbWVudCByZWZl
cmVuY2UKKyAgICB1c2luZyByZWZlcmVuY2UgPSB2YWx1ZV90eXBlJjsKKyAgICAvLy8gdGhlIHR5
cGUgb2YgYW4gZWxlbWVudCBjb25zdCByZWZlcmVuY2UKKyAgICB1c2luZyBjb25zdF9yZWZlcmVu
Y2UgPSBjb25zdCB2YWx1ZV90eXBlJjsKKworICAgIC8vLyBhIHR5cGUgdG8gcmVwcmVzZW50IGRp
ZmZlcmVuY2VzIGJldHdlZW4gaXRlcmF0b3JzCisgICAgdXNpbmcgZGlmZmVyZW5jZV90eXBlID0g
c3RkOjpwdHJkaWZmX3Q7CisgICAgLy8vIGEgdHlwZSB0byByZXByZXNlbnQgY29udGFpbmVyIHNp
emVzCisgICAgdXNpbmcgc2l6ZV90eXBlID0gc3RkOjpzaXplX3Q7CisKKyAgICAvLy8gdGhlIGFs
bG9jYXRvciB0eXBlCisgICAgdXNpbmcgYWxsb2NhdG9yX3R5cGUgPSBBbGxvY2F0b3JUeXBlPGJh
c2ljX2pzb24+OworCisgICAgLy8vIHRoZSB0eXBlIG9mIGFuIGVsZW1lbnQgcG9pbnRlcgorICAg
IHVzaW5nIHBvaW50ZXIgPSB0eXBlbmFtZSBzdGQ6OmFsbG9jYXRvcl90cmFpdHM8YWxsb2NhdG9y
X3R5cGU+Ojpwb2ludGVyOworICAgIC8vLyB0aGUgdHlwZSBvZiBhbiBlbGVtZW50IGNvbnN0IHBv
aW50ZXIKKyAgICB1c2luZyBjb25zdF9wb2ludGVyID0gdHlwZW5hbWUgc3RkOjphbGxvY2F0b3Jf
dHJhaXRzPGFsbG9jYXRvcl90eXBlPjo6Y29uc3RfcG9pbnRlcjsKKworICAgIC8vLyBhbiBpdGVy
YXRvciBmb3IgYSBiYXNpY19qc29uIGNvbnRhaW5lcgorICAgIGNsYXNzIGl0ZXJhdG9yOworICAg
IC8vLyBhIGNvbnN0IGl0ZXJhdG9yIGZvciBhIGJhc2ljX2pzb24gY29udGFpbmVyCisgICAgY2xh
c3MgY29uc3RfaXRlcmF0b3I7CisgICAgLy8vIGEgcmV2ZXJzZSBpdGVyYXRvciBmb3IgYSBiYXNp
Y19qc29uIGNvbnRhaW5lcgorICAgIHVzaW5nIHJldmVyc2VfaXRlcmF0b3IgPSBqc29uX3JldmVy
c2VfaXRlcmF0b3I8dHlwZW5hbWUgYmFzaWNfanNvbjo6aXRlcmF0b3I+OworICAgIC8vLyBhIGNv
bnN0IHJldmVyc2UgaXRlcmF0b3IgZm9yIGEgYmFzaWNfanNvbiBjb250YWluZXIKKyAgICB1c2lu
ZyBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yID0ganNvbl9yZXZlcnNlX2l0ZXJhdG9yPHR5cGVuYW1l
IGJhc2ljX2pzb246OmNvbnN0X2l0ZXJhdG9yPjsKKworICAgIC8vLyBAfQorCisKKyAgICAvKiEK
KyAgICBAYnJpZWYgcmV0dXJucyB0aGUgYWxsb2NhdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29u
dGFpbmVyCisgICAgKi8KKyAgICBzdGF0aWMgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigp
CisgICAgeworICAgICAgICByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsKKyAgICB9CisKKworICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIEpTT04gdmFsdWUgZGF0YSB0eXBl
cyAvLworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgLy8vIEBuYW1lIEpT
T04gdmFsdWUgZGF0YSB0eXBlcworICAgIC8vLyBUaGUgZGF0YSB0eXBlcyB0byBzdG9yZSBhIEpT
T04gdmFsdWUuIFRoZXNlIHR5cGVzIGFyZSBkZXJpdmVkIGZyb20KKyAgICAvLy8gdGhlIHRlbXBs
YXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8gY2xhc3MgQHJlZiBiYXNpY19qc29uLgorICAgIC8vLyBA
eworCisgICAgLyohCisgICAgQGJyaWVmIGEgdHlwZSBmb3IgYW4gb2JqZWN0CisKKyAgICBbUkZD
IDcxNTldKGh0dHA6Ly9yZmM3MTU5Lm5ldC9yZmM3MTU5KSBkZXNjcmliZXMgSlNPTiBvYmplY3Rz
IGFzIGZvbGxvd3M6CisgICAgPiBBbiBvYmplY3QgaXMgYW4gdW5vcmRlcmVkIGNvbGxlY3Rpb24g
b2YgemVybyBvciBtb3JlIG5hbWUvdmFsdWUgcGFpcnMsCisgICAgPiB3aGVyZSBhIG5hbWUgaXMg
YSBzdHJpbmcgYW5kIGEgdmFsdWUgaXMgYSBzdHJpbmcsIG51bWJlciwgYm9vbGVhbiwgbnVsbCwK
KyAgICA+IG9iamVjdCwgb3IgYXJyYXkuCisKKyAgICBUbyBzdG9yZSBvYmplY3RzIGluIEMrKywg
YSB0eXBlIGlzIGRlZmluZWQgYnkgdGhlIHRlbXBsYXRlIHBhcmFtZXRlcnMKKyAgICBkZXNjcmli
ZWQgYmVsb3cuCisKKyAgICBAdHBhcmFtIE9iamVjdFR5cGUgIHRoZSBjb250YWluZXIgdG8gc3Rv
cmUgb2JqZWN0cyAoZS5nLiwgYHN0ZDo6bWFwYCBvcgorICAgIGBzdGQ6OnVub3JkZXJlZF9tYXBg
KQorICAgIEB0cGFyYW0gU3RyaW5nVHlwZSB0aGUgdHlwZSBvZiB0aGUga2V5cyBvciBuYW1lcyAo
ZS5nLiwgYHN0ZDo6c3RyaW5nYCkuCisgICAgVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gYHN0ZDo6
bGVzczxTdHJpbmdUeXBlPmAgaXMgdXNlZCB0byBvcmRlciBlbGVtZW50cworICAgIGluc2lkZSB0
aGUgY29udGFpbmVyLgorICAgIEB0cGFyYW0gQWxsb2NhdG9yVHlwZSB0aGUgYWxsb2NhdG9yIHRv
IHVzZSBmb3Igb2JqZWN0cyAoZS5nLiwKKyAgICBgc3RkOjphbGxvY2F0b3JgKQorCisgICAgIyMj
IyBEZWZhdWx0IHR5cGUKKworICAgIFdpdGggdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBAYSBPYmpl
Y3RUeXBlIChgc3RkOjptYXBgKSwgQGEgU3RyaW5nVHlwZQorICAgIChgc3RkOjpzdHJpbmdgKSwg
YW5kIEBhIEFsbG9jYXRvclR5cGUgKGBzdGQ6OmFsbG9jYXRvcmApLCB0aGUgZGVmYXVsdAorICAg
IHZhbHVlIGZvciBAYSBvYmplY3RfdCBpczoKKworICAgIEBjb2RlIHsuY3BwfQorICAgIHN0ZDo6
bWFwPAorICAgICAgc3RkOjpzdHJpbmcsIC8vIGtleV90eXBlCisgICAgICBiYXNpY19qc29uLCAv
LyB2YWx1ZV90eXBlCisgICAgICBzdGQ6Omxlc3M8c3RkOjpzdHJpbmc+LCAvLyBrZXlfY29tcGFy
ZQorICAgICAgc3RkOjphbGxvY2F0b3I8c3RkOjpwYWlyPGNvbnN0IHN0ZDo6c3RyaW5nLCBiYXNp
Y19qc29uPj4gLy8gYWxsb2NhdG9yX3R5cGUKKyAgICA+CisgICAgQGVuZGNvZGUKKworICAgICMj
IyMgQmVoYXZpb3IKKworICAgIFRoZSBjaG9pY2Ugb2YgQGEgb2JqZWN0X3QgaW5mbHVlbmNlcyB0
aGUgYmVoYXZpb3Igb2YgdGhlIEpTT04gY2xhc3MuIFdpdGgKKyAgICB0aGUgZGVmYXVsdCB0eXBl
LCBvYmplY3RzIGhhdmUgdGhlIGZvbGxvd2luZyBiZWhhdmlvcjoKKworICAgIC0gV2hlbiBhbGwg
bmFtZXMgYXJlIHVuaXF1ZSwgb2JqZWN0cyB3aWxsIGJlIGludGVyb3BlcmFibGUgaW4gdGhlIHNl
bnNlCisgICAgICB0aGF0IGFsbCBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbnMgcmVjZWl2aW5nIHRo
YXQgb2JqZWN0IHdpbGwgYWdyZWUgb24KKyAgICAgIHRoZSBuYW1lLXZhbHVlIG1hcHBpbmdzLgor
ICAgIC0gV2hlbiB0aGUgbmFtZXMgd2l0aGluIGFuIG9iamVjdCBhcmUgbm90IHVuaXF1ZSwgbGF0
ZXIgc3RvcmVkIG5hbWUvdmFsdWUKKyAgICAgIHBhaXJzIG92ZXJ3cml0ZSBwcmV2aW91c2x5IHN0
b3JlZCBuYW1lL3ZhbHVlIHBhaXJzLCBsZWF2aW5nIHRoZSB1c2VkCisgICAgICBuYW1lcyB1bmlx
dWUuIEZvciBpbnN0YW5jZSwgYHsia2V5IjogMX1gIGFuZCBgeyJrZXkiOiAyLCAia2V5IjogMX1g
IHdpbGwKKyAgICAgIGJlIHRyZWF0ZWQgYXMgZXF1YWwgYW5kIGJvdGggc3RvcmVkIGFzIGB7Imtl
eSI6IDF9YC4KKyAgICAtIEludGVybmFsbHksIG5hbWUvdmFsdWUgcGFpcnMgYXJlIHN0b3JlZCBp
biBsZXhpY29ncmFwaGljYWwgb3JkZXIgb2YgdGhlCisgICAgICBuYW1lcy4gT2JqZWN0cyB3aWxs
IGFsc28gYmUgc2VyaWFsaXplZCAoc2VlIEByZWYgZHVtcCkgaW4gdGhpcyBvcmRlci4KKyAgICAg
IEZvciBpbnN0YW5jZSwgYHsiYiI6IDEsICJhIjogMn1gIGFuZCBgeyJhIjogMiwgImIiOiAxfWAg
d2lsbCBiZSBzdG9yZWQKKyAgICAgIGFuZCBzZXJpYWxpemVkIGFzIGB7ImEiOiAyLCAiYiI6IDF9
YC4KKyAgICAtIFdoZW4gY29tcGFyaW5nIG9iamVjdHMsIHRoZSBvcmRlciBvZiB0aGUgbmFtZS92
YWx1ZSBwYWlycyBpcyBpcnJlbGV2YW50LgorICAgICAgVGhpcyBtYWtlcyBvYmplY3RzIGludGVy
b3BlcmFibGUgaW4gdGhlIHNlbnNlIHRoYXQgdGhleSB3aWxsIG5vdCBiZQorICAgICAgYWZmZWN0
ZWQgYnkgdGhlc2UgZGlmZmVyZW5jZXMuIEZvciBpbnN0YW5jZSwgYHsiYiI6IDEsICJhIjogMn1g
IGFuZAorICAgICAgYHsiYSI6IDIsICJiIjogMX1gIHdpbGwgYmUgdHJlYXRlZCBhcyBlcXVhbC4K
KworICAgICMjIyMgTGltaXRzCisKKyAgICBbUkZDIDcxNTldKGh0dHA6Ly9yZmM3MTU5Lm5ldC9y
ZmM3MTU5KSBzcGVjaWZpZXM6CisgICAgPiBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgc2V0IGxpbWl0
cyBvbiB0aGUgbWF4aW11bSBkZXB0aCBvZiBuZXN0aW5nLgorCisgICAgSW4gdGhpcyBjbGFzcywg
dGhlIG9iamVjdCdzIGxpbWl0IG9mIG5lc3RpbmcgaXMgbm90IGNvbnN0cmFpbnQgZXhwbGljaXRs
eS4KKyAgICBIb3dldmVyLCBhIG1heGltdW0gZGVwdGggb2YgbmVzdGluZyBtYXkgYmUgaW50cm9k
dWNlZCBieSB0aGUgY29tcGlsZXIgb3IKKyAgICBydW50aW1lIGVudmlyb25tZW50LiBBIHRoZW9y
ZXRpY2FsIGxpbWl0IGNhbiBiZSBxdWVyaWVkIGJ5IGNhbGxpbmcgdGhlCisgICAgQHJlZiBtYXhf
c2l6ZSBmdW5jdGlvbiBvZiBhIEpTT04gb2JqZWN0LgorCisgICAgIyMjIyBTdG9yYWdlCisKKyAg
ICBPYmplY3RzIGFyZSBzdG9yZWQgYXMgcG9pbnRlcnMgaW4gYSBAcmVmIGJhc2ljX2pzb24gdHlw
ZS4gVGhhdCBpcywgZm9yIGFueQorICAgIGFjY2VzcyB0byBvYmplY3QgdmFsdWVzLCBhIHBvaW50
ZXIgb2YgdHlwZSBgb2JqZWN0X3QqYCBtdXN0IGJlCisgICAgZGVyZWZlcmVuY2VkLgorCisgICAg
QHNhIEByZWYgYXJyYXlfdCAtLSB0eXBlIGZvciBhbiBhcnJheSB2YWx1ZQorCisgICAgQHNpbmNl
IHZlcnNpb24gMS4wLjAKKworICAgIEBub3RlIFRoZSBvcmRlciBuYW1lL3ZhbHVlIHBhaXJzIGFy
ZSBhZGRlZCB0byB0aGUgb2JqZWN0IGlzICpub3QqCisgICAgcHJlc2VydmVkIGJ5IHRoZSBsaWJy
YXJ5LiBUaGVyZWZvcmUsIGl0ZXJhdGluZyBhbiBvYmplY3QgbWF5IHJldHVybgorICAgIG5hbWUv
dmFsdWUgcGFpcnMgaW4gYSBkaWZmZXJlbnQgb3JkZXIgdGhhbiB0aGV5IHdlcmUgb3JpZ2luYWxs
eSBzdG9yZWQuIEluCisgICAgZmFjdCwga2V5cyB3aWxsIGJlIHRyYXZlcnNlZCBpbiBhbHBoYWJl
dGljYWwgb3JkZXIgYXMgYHN0ZDo6bWFwYCB3aXRoCisgICAgYHN0ZDo6bGVzc2AgaXMgdXNlZCBi
eSBkZWZhdWx0LiBQbGVhc2Ugbm90ZSB0aGlzIGJlaGF2aW9yIGNvbmZvcm1zIHRvIFtSRkMKKyAg
ICA3MTU5XShodHRwOi8vcmZjNzE1OS5uZXQvcmZjNzE1OSksIGJlY2F1c2UgYW55IG9yZGVyIGlt
cGxlbWVudHMgdGhlCisgICAgc3BlY2lmaWVkICJ1bm9yZGVyZWQiIG5hdHVyZSBvZiBKU09OIG9i
amVjdHMuCisgICAgKi8KKyAgICB1c2luZyBvYmplY3RfdCA9IE9iamVjdFR5cGU8U3RyaW5nVHlw
ZSwKKyAgICAgICAgICBiYXNpY19qc29uLAorICAgICAgICAgIHN0ZDo6bGVzczxTdHJpbmdUeXBl
PiwKKyAgICAgICAgICBBbGxvY2F0b3JUeXBlPHN0ZDo6cGFpcjxjb25zdCBTdHJpbmdUeXBlLAor
ICAgICAgICAgIGJhc2ljX2pzb24+Pj47CisKKyAgICAvKiEKKyAgICBAYnJpZWYgYSB0eXBlIGZv
ciBhbiBhcnJheQorCisgICAgW1JGQyA3MTU5XShodHRwOi8vcmZjNzE1OS5uZXQvcmZjNzE1OSkg
ZGVzY3JpYmVzIEpTT04gYXJyYXlzIGFzIGZvbGxvd3M6CisgICAgPiBBbiBhcnJheSBpcyBhbiBv
cmRlcmVkIHNlcXVlbmNlIG9mIHplcm8gb3IgbW9yZSB2YWx1ZXMuCisKKyAgICBUbyBzdG9yZSBv
YmplY3RzIGluIEMrKywgYSB0eXBlIGlzIGRlZmluZWQgYnkgdGhlIHRlbXBsYXRlIHBhcmFtZXRl
cnMKKyAgICBleHBsYWluZWQgYmVsb3cuCisKKyAgICBAdHBhcmFtIEFycmF5VHlwZSAgY29udGFp
bmVyIHR5cGUgdG8gc3RvcmUgYXJyYXlzIChlLmcuLCBgc3RkOjp2ZWN0b3JgIG9yCisgICAgYHN0
ZDo6bGlzdGApCisgICAgQHRwYXJhbSBBbGxvY2F0b3JUeXBlIGFsbG9jYXRvciB0byB1c2UgZm9y
IGFycmF5cyAoZS5nLiwgYHN0ZDo6YWxsb2NhdG9yYCkKKworICAgICMjIyMgRGVmYXVsdCB0eXBl
CisKKyAgICBXaXRoIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgQGEgQXJyYXlUeXBlIChgc3RkOjp2
ZWN0b3JgKSBhbmQgQGEKKyAgICBBbGxvY2F0b3JUeXBlIChgc3RkOjphbGxvY2F0b3JgKSwgdGhl
IGRlZmF1bHQgdmFsdWUgZm9yIEBhIGFycmF5X3QgaXM6CisKKyAgICBAY29kZSB7LmNwcH0KKyAg
ICBzdGQ6OnZlY3RvcjwKKyAgICAgIGJhc2ljX2pzb24sIC8vIHZhbHVlX3R5cGUKKyAgICAgIHN0
ZDo6YWxsb2NhdG9yPGJhc2ljX2pzb24+IC8vIGFsbG9jYXRvcl90eXBlCisgICAgPgorICAgIEBl
bmRjb2RlCisKKyAgICAjIyMjIExpbWl0cworCisgICAgW1JGQyA3MTU5XShodHRwOi8vcmZjNzE1
OS5uZXQvcmZjNzE1OSkgc3BlY2lmaWVzOgorICAgID4gQW4gaW1wbGVtZW50YXRpb24gbWF5IHNl
dCBsaW1pdHMgb24gdGhlIG1heGltdW0gZGVwdGggb2YgbmVzdGluZy4KKworICAgIEluIHRoaXMg
Y2xhc3MsIHRoZSBhcnJheSdzIGxpbWl0IG9mIG5lc3RpbmcgaXMgbm90IGNvbnN0cmFpbnQgZXhw
bGljaXRseS4KKyAgICBIb3dldmVyLCBhIG1heGltdW0gZGVwdGggb2YgbmVzdGluZyBtYXkgYmUg
aW50cm9kdWNlZCBieSB0aGUgY29tcGlsZXIgb3IKKyAgICBydW50aW1lIGVudmlyb25tZW50LiBB
IHRoZW9yZXRpY2FsIGxpbWl0IGNhbiBiZSBxdWVyaWVkIGJ5IGNhbGxpbmcgdGhlCisgICAgQHJl
ZiBtYXhfc2l6ZSBmdW5jdGlvbiBvZiBhIEpTT04gYXJyYXkuCisKKyAgICAjIyMjIFN0b3JhZ2UK
KworICAgIEFycmF5cyBhcmUgc3RvcmVkIGFzIHBvaW50ZXJzIGluIGEgQHJlZiBiYXNpY19qc29u
IHR5cGUuIFRoYXQgaXMsIGZvciBhbnkKKyAgICBhY2Nlc3MgdG8gYXJyYXkgdmFsdWVzLCBhIHBv
aW50ZXIgb2YgdHlwZSBgYXJyYXlfdCpgIG11c3QgYmUgZGVyZWZlcmVuY2VkLgorCisgICAgQHNh
IEByZWYgb2JqZWN0X3QgLS0gdHlwZSBmb3IgYW4gb2JqZWN0IHZhbHVlCisKKyAgICBAc2luY2Ug
dmVyc2lvbiAxLjAuMAorICAgICovCisgICAgdXNpbmcgYXJyYXlfdCA9IEFycmF5VHlwZTxiYXNp
Y19qc29uLCBBbGxvY2F0b3JUeXBlPGJhc2ljX2pzb24+PjsKKworICAgIC8qIQorICAgIEBicmll
ZiBhIHR5cGUgZm9yIGEgc3RyaW5nCisKKyAgICBbUkZDIDcxNTldKGh0dHA6Ly9yZmM3MTU5Lm5l
dC9yZmM3MTU5KSBkZXNjcmliZXMgSlNPTiBzdHJpbmdzIGFzIGZvbGxvd3M6CisgICAgPiBBIHN0
cmluZyBpcyBhIHNlcXVlbmNlIG9mIHplcm8gb3IgbW9yZSBVbmljb2RlIGNoYXJhY3RlcnMuCisK
KyAgICBUbyBzdG9yZSBvYmplY3RzIGluIEMrKywgYSB0eXBlIGlzIGRlZmluZWQgYnkgdGhlIHRl
bXBsYXRlIHBhcmFtZXRlcgorICAgIGRlc2NyaWJlZCBiZWxvdy4gVW5pY29kZSB2YWx1ZXMgYXJl
IHNwbGl0IGJ5IHRoZSBKU09OIGNsYXNzIGludG8KKyAgICBieXRlLXNpemVkIGNoYXJhY3RlcnMg
ZHVyaW5nIGRlc2VyaWFsaXphdGlvbi4KKworICAgIEB0cGFyYW0gU3RyaW5nVHlwZSAgdGhlIGNv
bnRhaW5lciB0byBzdG9yZSBzdHJpbmdzIChlLmcuLCBgc3RkOjpzdHJpbmdgKS4KKyAgICBOb3Rl
IHRoaXMgY29udGFpbmVyIGlzIHVzZWQgZm9yIGtleXMvbmFtZXMgaW4gb2JqZWN0cywgc2VlIEBy
ZWYgb2JqZWN0X3QuCisKKyAgICAjIyMjIERlZmF1bHQgdHlwZQorCisgICAgV2l0aCB0aGUgZGVm
YXVsdCB2YWx1ZXMgZm9yIEBhIFN0cmluZ1R5cGUgKGBzdGQ6OnN0cmluZ2ApLCB0aGUgZGVmYXVs
dAorICAgIHZhbHVlIGZvciBAYSBzdHJpbmdfdCBpczoKKworICAgIEBjb2RlIHsuY3BwfQorICAg
IHN0ZDo6c3RyaW5nCisgICAgQGVuZGNvZGUKKworICAgICMjIyMgU3RyaW5nIGNvbXBhcmlzb24K
KworICAgIFtSRkMgNzE1OV0oaHR0cDovL3JmYzcxNTkubmV0L3JmYzcxNTkpIHN0YXRlczoKKyAg
ICA+IFNvZnR3YXJlIGltcGxlbWVudGF0aW9ucyBhcmUgdHlwaWNhbGx5IHJlcXVpcmVkIHRvIHRl
c3QgbmFtZXMgb2Ygb2JqZWN0CisgICAgPiBtZW1iZXJzIGZvciBlcXVhbGl0eS4gSW1wbGVtZW50
YXRpb25zIHRoYXQgdHJhbnNmb3JtIHRoZSB0ZXh0dWFsCisgICAgPiByZXByZXNlbnRhdGlvbiBp
bnRvIHNlcXVlbmNlcyBvZiBVbmljb2RlIGNvZGUgdW5pdHMgYW5kIHRoZW4gcGVyZm9ybSB0aGUK
KyAgICA+IGNvbXBhcmlzb24gbnVtZXJpY2FsbHksIGNvZGUgdW5pdCBieSBjb2RlIHVuaXQsIGFy
ZSBpbnRlcm9wZXJhYmxlIGluIHRoZQorICAgID4gc2Vuc2UgdGhhdCBpbXBsZW1lbnRhdGlvbnMg
d2lsbCBhZ3JlZSBpbiBhbGwgY2FzZXMgb24gZXF1YWxpdHkgb3IKKyAgICA+IGluZXF1YWxpdHkg
b2YgdHdvIHN0cmluZ3MuIEZvciBleGFtcGxlLCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBjb21wYXJl
CisgICAgPiBzdHJpbmdzIHdpdGggZXNjYXBlZCBjaGFyYWN0ZXJzIHVuY29udmVydGVkIG1heSBp
bmNvcnJlY3RseSBmaW5kIHRoYXQKKyAgICA+IGAiYVxcYiJgIGFuZCBgImFcdTAwNUNiImAgYXJl
IG5vdCBlcXVhbC4KKworICAgIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgaW50ZXJvcGVyYWJsZSBh
cyBpdCBkb2VzIGNvbXBhcmUgc3RyaW5ncyBjb2RlIHVuaXQKKyAgICBieSBjb2RlIHVuaXQuCisK
KyAgICAjIyMjIFN0b3JhZ2UKKworICAgIFN0cmluZyB2YWx1ZXMgYXJlIHN0b3JlZCBhcyBwb2lu
dGVycyBpbiBhIEByZWYgYmFzaWNfanNvbiB0eXBlLiBUaGF0IGlzLAorICAgIGZvciBhbnkgYWNj
ZXNzIHRvIHN0cmluZyB2YWx1ZXMsIGEgcG9pbnRlciBvZiB0eXBlIGBzdHJpbmdfdCpgIG11c3Qg
YmUKKyAgICBkZXJlZmVyZW5jZWQuCisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICov
CisgICAgdXNpbmcgc3RyaW5nX3QgPSBTdHJpbmdUeXBlOworCisgICAgLyohCisgICAgQGJyaWVm
IGEgdHlwZSBmb3IgYSBib29sZWFuCisKKyAgICBbUkZDIDcxNTldKGh0dHA6Ly9yZmM3MTU5Lm5l
dC9yZmM3MTU5KSBpbXBsaWNpdGx5IGRlc2NyaWJlcyBhIGJvb2xlYW4gYXMgYQorICAgIHR5cGUg
d2hpY2ggZGlmZmVyZW50aWF0ZXMgdGhlIHR3byBsaXRlcmFscyBgdHJ1ZWAgYW5kIGBmYWxzZWAu
CisKKyAgICBUbyBzdG9yZSBvYmplY3RzIGluIEMrKywgYSB0eXBlIGlzIGRlZmluZWQgYnkgdGhl
IHRlbXBsYXRlIHBhcmFtZXRlciBAYQorICAgIEJvb2xlYW5UeXBlIHdoaWNoIGNob29zZXMgdGhl
IHR5cGUgdG8gdXNlLgorCisgICAgIyMjIyBEZWZhdWx0IHR5cGUKKworICAgIFdpdGggdGhlIGRl
ZmF1bHQgdmFsdWVzIGZvciBAYSBCb29sZWFuVHlwZSAoYGJvb2xgKSwgdGhlIGRlZmF1bHQgdmFs
dWUgZm9yCisgICAgQGEgYm9vbGVhbl90IGlzOgorCisgICAgQGNvZGUgey5jcHB9CisgICAgYm9v
bAorICAgIEBlbmRjb2RlCisKKyAgICAjIyMjIFN0b3JhZ2UKKworICAgIEJvb2xlYW4gdmFsdWVz
IGFyZSBzdG9yZWQgZGlyZWN0bHkgaW5zaWRlIGEgQHJlZiBiYXNpY19qc29uIHR5cGUuCisKKyAg
ICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgdXNpbmcgYm9vbGVhbl90ID0gQm9v
bGVhblR5cGU7CisKKyAgICAvKiEKKyAgICBAYnJpZWYgYSB0eXBlIGZvciBhIG51bWJlciAoaW50
ZWdlcikKKworICAgIFtSRkMgNzE1OV0oaHR0cDovL3JmYzcxNTkubmV0L3JmYzcxNTkpIGRlc2Ny
aWJlcyBudW1iZXJzIGFzIGZvbGxvd3M6CisgICAgPiBUaGUgcmVwcmVzZW50YXRpb24gb2YgbnVt
YmVycyBpcyBzaW1pbGFyIHRvIHRoYXQgdXNlZCBpbiBtb3N0CisgICAgPiBwcm9ncmFtbWluZyBs
YW5ndWFnZXMuIEEgbnVtYmVyIGlzIHJlcHJlc2VudGVkIGluIGJhc2UgMTAgdXNpbmcgZGVjaW1h
bAorICAgID4gZGlnaXRzLiBJdCBjb250YWlucyBhbiBpbnRlZ2VyIGNvbXBvbmVudCB0aGF0IG1h
eSBiZSBwcmVmaXhlZCB3aXRoIGFuCisgICAgPiBvcHRpb25hbCBtaW51cyBzaWduLCB3aGljaCBt
YXkgYmUgZm9sbG93ZWQgYnkgYSBmcmFjdGlvbiBwYXJ0IGFuZC9vciBhbgorICAgID4gZXhwb25l
bnQgcGFydC4gTGVhZGluZyB6ZXJvcyBhcmUgbm90IGFsbG93ZWQuICguLi4pIE51bWVyaWMgdmFs
dWVzIHRoYXQKKyAgICA+IGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiB0aGUgZ3JhbW1hciBiZWxv
dyAoc3VjaCBhcyBJbmZpbml0eSBhbmQgTmFOKQorICAgID4gYXJlIG5vdCBwZXJtaXR0ZWQuCisK
KyAgICBUaGlzIGRlc2NyaXB0aW9uIGluY2x1ZGVzIGJvdGggaW50ZWdlciBhbmQgZmxvYXRpbmct
cG9pbnQgbnVtYmVycy4KKyAgICBIb3dldmVyLCBDKysgYWxsb3dzIG1vcmUgcHJlY2lzZSBzdG9y
YWdlIGlmIGl0IGlzIGtub3duIHdoZXRoZXIgdGhlIG51bWJlcgorICAgIGlzIGEgc2lnbmVkIGlu
dGVnZXIsIGFuIHVuc2lnbmVkIGludGVnZXIgb3IgYSBmbG9hdGluZy1wb2ludCBudW1iZXIuCisg
ICAgVGhlcmVmb3JlLCB0aHJlZSBkaWZmZXJlbnQgdHlwZXMsIEByZWYgbnVtYmVyX2ludGVnZXJf
dCwgQHJlZgorICAgIG51bWJlcl91bnNpZ25lZF90IGFuZCBAcmVmIG51bWJlcl9mbG9hdF90IGFy
ZSB1c2VkLgorCisgICAgVG8gc3RvcmUgaW50ZWdlciBudW1iZXJzIGluIEMrKywgYSB0eXBlIGlz
IGRlZmluZWQgYnkgdGhlIHRlbXBsYXRlCisgICAgcGFyYW1ldGVyIEBhIE51bWJlckludGVnZXJU
eXBlIHdoaWNoIGNob29zZXMgdGhlIHR5cGUgdG8gdXNlLgorCisgICAgIyMjIyBEZWZhdWx0IHR5
cGUKKworICAgIFdpdGggdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBAYSBOdW1iZXJJbnRlZ2VyVHlw
ZSAoYGludDY0X3RgKSwgdGhlIGRlZmF1bHQKKyAgICB2YWx1ZSBmb3IgQGEgbnVtYmVyX2ludGVn
ZXJfdCBpczoKKworICAgIEBjb2RlIHsuY3BwfQorICAgIGludDY0X3QKKyAgICBAZW5kY29kZQor
CisgICAgIyMjIyBEZWZhdWx0IGJlaGF2aW9yCisKKyAgICAtIFRoZSByZXN0cmljdGlvbnMgYWJv
dXQgbGVhZGluZyB6ZXJvcyBpcyBub3QgZW5mb3JjZWQgaW4gQysrLiBJbnN0ZWFkLAorICAgICAg
bGVhZGluZyB6ZXJvcyBpbiBpbnRlZ2VyIGxpdGVyYWxzIGxlYWQgdG8gYW4gaW50ZXJwcmV0YXRp
b24gYXMgb2N0YWwKKyAgICAgIG51bWJlci4gSW50ZXJuYWxseSwgdGhlIHZhbHVlIHdpbGwgYmUg
c3RvcmVkIGFzIGRlY2ltYWwgbnVtYmVyLiBGb3IKKyAgICAgIGluc3RhbmNlLCB0aGUgQysrIGlu
dGVnZXIgbGl0ZXJhbCBgMDEwYCB3aWxsIGJlIHNlcmlhbGl6ZWQgdG8gYDhgLgorICAgICAgRHVy
aW5nIGRlc2VyaWFsaXphdGlvbiwgbGVhZGluZyB6ZXJvcyB5aWVsZCBhbiBlcnJvci4KKyAgICAt
IE5vdC1hLW51bWJlciAoTmFOKSB2YWx1ZXMgd2lsbCBiZSBzZXJpYWxpemVkIHRvIGBudWxsYC4K
KworICAgICMjIyMgTGltaXRzCisKKyAgICBbUkZDIDcxNTldKGh0dHA6Ly9yZmM3MTU5Lm5ldC9y
ZmM3MTU5KSBzcGVjaWZpZXM6CisgICAgPiBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgc2V0IGxpbWl0
cyBvbiB0aGUgcmFuZ2UgYW5kIHByZWNpc2lvbiBvZiBudW1iZXJzLgorCisgICAgV2hlbiB0aGUg
ZGVmYXVsdCB0eXBlIGlzIHVzZWQsIHRoZSBtYXhpbWFsIGludGVnZXIgbnVtYmVyIHRoYXQgY2Fu
IGJlCisgICAgc3RvcmVkIGlzIGA5MjIzMzcyMDM2ODU0Nzc1ODA3YCAoSU5UNjRfTUFYKSBhbmQg
dGhlIG1pbmltYWwgaW50ZWdlciBudW1iZXIKKyAgICB0aGF0IGNhbiBiZSBzdG9yZWQgaXMgYC05
MjIzMzcyMDM2ODU0Nzc1ODA4YCAoSU5UNjRfTUlOKS4gSW50ZWdlciBudW1iZXJzCisgICAgdGhh
dCBhcmUgb3V0IG9mIHJhbmdlIHdpbGwgeWllbGQgb3Zlci91bmRlcmZsb3cgd2hlbiB1c2VkIGlu
IGEKKyAgICBjb25zdHJ1Y3Rvci4gRHVyaW5nIGRlc2VyaWFsaXphdGlvbiwgdG9vIGxhcmdlIG9y
IHNtYWxsIGludGVnZXIgbnVtYmVycworICAgIHdpbGwgYmUgYXV0b21hdGljYWxseSBiZSBzdG9y
ZWQgYXMgQHJlZiBudW1iZXJfdW5zaWduZWRfdCBvciBAcmVmCisgICAgbnVtYmVyX2Zsb2F0X3Qu
CisKKyAgICBbUkZDIDcxNTldKGh0dHA6Ly9yZmM3MTU5Lm5ldC9yZmM3MTU5KSBmdXJ0aGVyIHN0
YXRlczoKKyAgICA+IE5vdGUgdGhhdCB3aGVuIHN1Y2ggc29mdHdhcmUgaXMgdXNlZCwgbnVtYmVy
cyB0aGF0IGFyZSBpbnRlZ2VycyBhbmQgYXJlCisgICAgPiBpbiB0aGUgcmFuZ2UgXGYkWy0yXns1
M30rMSwgMl57NTN9LTFdXGYkIGFyZSBpbnRlcm9wZXJhYmxlIGluIHRoZSBzZW5zZQorICAgID4g
dGhhdCBpbXBsZW1lbnRhdGlvbnMgd2lsbCBhZ3JlZSBleGFjdGx5IG9uIHRoZWlyIG51bWVyaWMg
dmFsdWVzLgorCisgICAgQXMgdGhpcyByYW5nZSBpcyBhIHN1YnJhbmdlIG9mIHRoZSBleGFjdGx5
IHN1cHBvcnRlZCByYW5nZSBbSU5UNjRfTUlOLAorICAgIElOVDY0X01BWF0sIHRoaXMgY2xhc3Mn
cyBpbnRlZ2VyIHR5cGUgaXMgaW50ZXJvcGVyYWJsZS4KKworICAgICMjIyMgU3RvcmFnZQorCisg
ICAgSW50ZWdlciBudW1iZXIgdmFsdWVzIGFyZSBzdG9yZWQgZGlyZWN0bHkgaW5zaWRlIGEgQHJl
ZiBiYXNpY19qc29uIHR5cGUuCisKKyAgICBAc2EgQHJlZiBudW1iZXJfZmxvYXRfdCAtLSB0eXBl
IGZvciBudW1iZXIgdmFsdWVzIChmbG9hdGluZy1wb2ludCkKKworICAgIEBzYSBAcmVmIG51bWJl
cl91bnNpZ25lZF90IC0tIHR5cGUgZm9yIG51bWJlciB2YWx1ZXMgKHVuc2lnbmVkIGludGVnZXIp
CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgdXNpbmcgbnVtYmVyX2lu
dGVnZXJfdCA9IE51bWJlckludGVnZXJUeXBlOworCisgICAgLyohCisgICAgQGJyaWVmIGEgdHlw
ZSBmb3IgYSBudW1iZXIgKHVuc2lnbmVkKQorCisgICAgW1JGQyA3MTU5XShodHRwOi8vcmZjNzE1
OS5uZXQvcmZjNzE1OSkgZGVzY3JpYmVzIG51bWJlcnMgYXMgZm9sbG93czoKKyAgICA+IFRoZSBy
ZXByZXNlbnRhdGlvbiBvZiBudW1iZXJzIGlzIHNpbWlsYXIgdG8gdGhhdCB1c2VkIGluIG1vc3QK
KyAgICA+IHByb2dyYW1taW5nIGxhbmd1YWdlcy4gQSBudW1iZXIgaXMgcmVwcmVzZW50ZWQgaW4g
YmFzZSAxMCB1c2luZyBkZWNpbWFsCisgICAgPiBkaWdpdHMuIEl0IGNvbnRhaW5zIGFuIGludGVn
ZXIgY29tcG9uZW50IHRoYXQgbWF5IGJlIHByZWZpeGVkIHdpdGggYW4KKyAgICA+IG9wdGlvbmFs
IG1pbnVzIHNpZ24sIHdoaWNoIG1heSBiZSBmb2xsb3dlZCBieSBhIGZyYWN0aW9uIHBhcnQgYW5k
L29yIGFuCisgICAgPiBleHBvbmVudCBwYXJ0LiBMZWFkaW5nIHplcm9zIGFyZSBub3QgYWxsb3dl
ZC4gKC4uLikgTnVtZXJpYyB2YWx1ZXMgdGhhdAorICAgID4gY2Fubm90IGJlIHJlcHJlc2VudGVk
IGluIHRoZSBncmFtbWFyIGJlbG93IChzdWNoIGFzIEluZmluaXR5IGFuZCBOYU4pCisgICAgPiBh
cmUgbm90IHBlcm1pdHRlZC4KKworICAgIFRoaXMgZGVzY3JpcHRpb24gaW5jbHVkZXMgYm90aCBp
bnRlZ2VyIGFuZCBmbG9hdGluZy1wb2ludCBudW1iZXJzLgorICAgIEhvd2V2ZXIsIEMrKyBhbGxv
d3MgbW9yZSBwcmVjaXNlIHN0b3JhZ2UgaWYgaXQgaXMga25vd24gd2hldGhlciB0aGUgbnVtYmVy
CisgICAgaXMgYSBzaWduZWQgaW50ZWdlciwgYW4gdW5zaWduZWQgaW50ZWdlciBvciBhIGZsb2F0
aW5nLXBvaW50IG51bWJlci4KKyAgICBUaGVyZWZvcmUsIHRocmVlIGRpZmZlcmVudCB0eXBlcywg
QHJlZiBudW1iZXJfaW50ZWdlcl90LCBAcmVmCisgICAgbnVtYmVyX3Vuc2lnbmVkX3QgYW5kIEBy
ZWYgbnVtYmVyX2Zsb2F0X3QgYXJlIHVzZWQuCisKKyAgICBUbyBzdG9yZSB1bnNpZ25lZCBpbnRl
Z2VyIG51bWJlcnMgaW4gQysrLCBhIHR5cGUgaXMgZGVmaW5lZCBieSB0aGUKKyAgICB0ZW1wbGF0
ZSBwYXJhbWV0ZXIgQGEgTnVtYmVyVW5zaWduZWRUeXBlIHdoaWNoIGNob29zZXMgdGhlIHR5cGUg
dG8gdXNlLgorCisgICAgIyMjIyBEZWZhdWx0IHR5cGUKKworICAgIFdpdGggdGhlIGRlZmF1bHQg
dmFsdWVzIGZvciBAYSBOdW1iZXJVbnNpZ25lZFR5cGUgKGB1aW50NjRfdGApLCB0aGUKKyAgICBk
ZWZhdWx0IHZhbHVlIGZvciBAYSBudW1iZXJfdW5zaWduZWRfdCBpczoKKworICAgIEBjb2RlIHsu
Y3BwfQorICAgIHVpbnQ2NF90CisgICAgQGVuZGNvZGUKKworICAgICMjIyMgRGVmYXVsdCBiZWhh
dmlvcgorCisgICAgLSBUaGUgcmVzdHJpY3Rpb25zIGFib3V0IGxlYWRpbmcgemVyb3MgaXMgbm90
IGVuZm9yY2VkIGluIEMrKy4gSW5zdGVhZCwKKyAgICAgIGxlYWRpbmcgemVyb3MgaW4gaW50ZWdl
ciBsaXRlcmFscyBsZWFkIHRvIGFuIGludGVycHJldGF0aW9uIGFzIG9jdGFsCisgICAgICBudW1i
ZXIuIEludGVybmFsbHksIHRoZSB2YWx1ZSB3aWxsIGJlIHN0b3JlZCBhcyBkZWNpbWFsIG51bWJl
ci4gRm9yCisgICAgICBpbnN0YW5jZSwgdGhlIEMrKyBpbnRlZ2VyIGxpdGVyYWwgYDAxMGAgd2ls
bCBiZSBzZXJpYWxpemVkIHRvIGA4YC4KKyAgICAgIER1cmluZyBkZXNlcmlhbGl6YXRpb24sIGxl
YWRpbmcgemVyb3MgeWllbGQgYW4gZXJyb3IuCisgICAgLSBOb3QtYS1udW1iZXIgKE5hTikgdmFs
dWVzIHdpbGwgYmUgc2VyaWFsaXplZCB0byBgbnVsbGAuCisKKyAgICAjIyMjIExpbWl0cworCisg
ICAgW1JGQyA3MTU5XShodHRwOi8vcmZjNzE1OS5uZXQvcmZjNzE1OSkgc3BlY2lmaWVzOgorICAg
ID4gQW4gaW1wbGVtZW50YXRpb24gbWF5IHNldCBsaW1pdHMgb24gdGhlIHJhbmdlIGFuZCBwcmVj
aXNpb24gb2YgbnVtYmVycy4KKworICAgIFdoZW4gdGhlIGRlZmF1bHQgdHlwZSBpcyB1c2VkLCB0
aGUgbWF4aW1hbCBpbnRlZ2VyIG51bWJlciB0aGF0IGNhbiBiZQorICAgIHN0b3JlZCBpcyBgMTg0
NDY3NDQwNzM3MDk1NTE2MTVgIChVSU5UNjRfTUFYKSBhbmQgdGhlIG1pbmltYWwgaW50ZWdlcgor
ICAgIG51bWJlciB0aGF0IGNhbiBiZSBzdG9yZWQgaXMgYDBgLiBJbnRlZ2VyIG51bWJlcnMgdGhh
dCBhcmUgb3V0IG9mIHJhbmdlCisgICAgd2lsbCB5aWVsZCBvdmVyL3VuZGVyZmxvdyB3aGVuIHVz
ZWQgaW4gYSBjb25zdHJ1Y3Rvci4gRHVyaW5nCisgICAgZGVzZXJpYWxpemF0aW9uLCB0b28gbGFy
Z2Ugb3Igc21hbGwgaW50ZWdlciBudW1iZXJzIHdpbGwgYmUgYXV0b21hdGljYWxseQorICAgIGJl
IHN0b3JlZCBhcyBAcmVmIG51bWJlcl9pbnRlZ2VyX3Qgb3IgQHJlZiBudW1iZXJfZmxvYXRfdC4K
KworICAgIFtSRkMgNzE1OV0oaHR0cDovL3JmYzcxNTkubmV0L3JmYzcxNTkpIGZ1cnRoZXIgc3Rh
dGVzOgorICAgID4gTm90ZSB0aGF0IHdoZW4gc3VjaCBzb2Z0d2FyZSBpcyB1c2VkLCBudW1iZXJz
IHRoYXQgYXJlIGludGVnZXJzIGFuZCBhcmUKKyAgICA+IGluIHRoZSByYW5nZSBcZiRbLTJeezUz
fSsxLCAyXns1M30tMV1cZiQgYXJlIGludGVyb3BlcmFibGUgaW4gdGhlIHNlbnNlCisgICAgPiB0
aGF0IGltcGxlbWVudGF0aW9ucyB3aWxsIGFncmVlIGV4YWN0bHkgb24gdGhlaXIgbnVtZXJpYyB2
YWx1ZXMuCisKKyAgICBBcyB0aGlzIHJhbmdlIGlzIGEgc3VicmFuZ2UgKHdoZW4gY29uc2lkZXJl
ZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQorICAgIG51bWJlcl9pbnRlZ2VyX3QgdHlwZSkgb2Yg
dGhlIGV4YWN0bHkgc3VwcG9ydGVkIHJhbmdlIFswLCBVSU5UNjRfTUFYXSwKKyAgICB0aGlzIGNs
YXNzJ3MgaW50ZWdlciB0eXBlIGlzIGludGVyb3BlcmFibGUuCisKKyAgICAjIyMjIFN0b3JhZ2UK
KworICAgIEludGVnZXIgbnVtYmVyIHZhbHVlcyBhcmUgc3RvcmVkIGRpcmVjdGx5IGluc2lkZSBh
IEByZWYgYmFzaWNfanNvbiB0eXBlLgorCisgICAgQHNhIEByZWYgbnVtYmVyX2Zsb2F0X3QgLS0g
dHlwZSBmb3IgbnVtYmVyIHZhbHVlcyAoZmxvYXRpbmctcG9pbnQpCisgICAgQHNhIEByZWYgbnVt
YmVyX2ludGVnZXJfdCAtLSB0eXBlIGZvciBudW1iZXIgdmFsdWVzIChpbnRlZ2VyKQorCisgICAg
QHNpbmNlIHZlcnNpb24gMi4wLjAKKyAgICAqLworICAgIHVzaW5nIG51bWJlcl91bnNpZ25lZF90
ID0gTnVtYmVyVW5zaWduZWRUeXBlOworCisgICAgLyohCisgICAgQGJyaWVmIGEgdHlwZSBmb3Ig
YSBudW1iZXIgKGZsb2F0aW5nLXBvaW50KQorCisgICAgW1JGQyA3MTU5XShodHRwOi8vcmZjNzE1
OS5uZXQvcmZjNzE1OSkgZGVzY3JpYmVzIG51bWJlcnMgYXMgZm9sbG93czoKKyAgICA+IFRoZSBy
ZXByZXNlbnRhdGlvbiBvZiBudW1iZXJzIGlzIHNpbWlsYXIgdG8gdGhhdCB1c2VkIGluIG1vc3QK
KyAgICA+IHByb2dyYW1taW5nIGxhbmd1YWdlcy4gQSBudW1iZXIgaXMgcmVwcmVzZW50ZWQgaW4g
YmFzZSAxMCB1c2luZyBkZWNpbWFsCisgICAgPiBkaWdpdHMuIEl0IGNvbnRhaW5zIGFuIGludGVn
ZXIgY29tcG9uZW50IHRoYXQgbWF5IGJlIHByZWZpeGVkIHdpdGggYW4KKyAgICA+IG9wdGlvbmFs
IG1pbnVzIHNpZ24sIHdoaWNoIG1heSBiZSBmb2xsb3dlZCBieSBhIGZyYWN0aW9uIHBhcnQgYW5k
L29yIGFuCisgICAgPiBleHBvbmVudCBwYXJ0LiBMZWFkaW5nIHplcm9zIGFyZSBub3QgYWxsb3dl
ZC4gKC4uLikgTnVtZXJpYyB2YWx1ZXMgdGhhdAorICAgID4gY2Fubm90IGJlIHJlcHJlc2VudGVk
IGluIHRoZSBncmFtbWFyIGJlbG93IChzdWNoIGFzIEluZmluaXR5IGFuZCBOYU4pCisgICAgPiBh
cmUgbm90IHBlcm1pdHRlZC4KKworICAgIFRoaXMgZGVzY3JpcHRpb24gaW5jbHVkZXMgYm90aCBp
bnRlZ2VyIGFuZCBmbG9hdGluZy1wb2ludCBudW1iZXJzLgorICAgIEhvd2V2ZXIsIEMrKyBhbGxv
d3MgbW9yZSBwcmVjaXNlIHN0b3JhZ2UgaWYgaXQgaXMga25vd24gd2hldGhlciB0aGUgbnVtYmVy
CisgICAgaXMgYSBzaWduZWQgaW50ZWdlciwgYW4gdW5zaWduZWQgaW50ZWdlciBvciBhIGZsb2F0
aW5nLXBvaW50IG51bWJlci4KKyAgICBUaGVyZWZvcmUsIHRocmVlIGRpZmZlcmVudCB0eXBlcywg
QHJlZiBudW1iZXJfaW50ZWdlcl90LCBAcmVmCisgICAgbnVtYmVyX3Vuc2lnbmVkX3QgYW5kIEBy
ZWYgbnVtYmVyX2Zsb2F0X3QgYXJlIHVzZWQuCisKKyAgICBUbyBzdG9yZSBmbG9hdGluZy1wb2lu
dCBudW1iZXJzIGluIEMrKywgYSB0eXBlIGlzIGRlZmluZWQgYnkgdGhlIHRlbXBsYXRlCisgICAg
cGFyYW1ldGVyIEBhIE51bWJlckZsb2F0VHlwZSB3aGljaCBjaG9vc2VzIHRoZSB0eXBlIHRvIHVz
ZS4KKworICAgICMjIyMgRGVmYXVsdCB0eXBlCisKKyAgICBXaXRoIHRoZSBkZWZhdWx0IHZhbHVl
cyBmb3IgQGEgTnVtYmVyRmxvYXRUeXBlIChgZG91YmxlYCksIHRoZSBkZWZhdWx0CisgICAgdmFs
dWUgZm9yIEBhIG51bWJlcl9mbG9hdF90IGlzOgorCisgICAgQGNvZGUgey5jcHB9CisgICAgZG91
YmxlCisgICAgQGVuZGNvZGUKKworICAgICMjIyMgRGVmYXVsdCBiZWhhdmlvcgorCisgICAgLSBU
aGUgcmVzdHJpY3Rpb25zIGFib3V0IGxlYWRpbmcgemVyb3MgaXMgbm90IGVuZm9yY2VkIGluIEMr
Ky4gSW5zdGVhZCwKKyAgICAgIGxlYWRpbmcgemVyb3MgaW4gZmxvYXRpbmctcG9pbnQgbGl0ZXJh
bHMgd2lsbCBiZSBpZ25vcmVkLiBJbnRlcm5hbGx5LAorICAgICAgdGhlIHZhbHVlIHdpbGwgYmUg
c3RvcmVkIGFzIGRlY2ltYWwgbnVtYmVyLiBGb3IgaW5zdGFuY2UsIHRoZSBDKysKKyAgICAgIGZs
b2F0aW5nLXBvaW50IGxpdGVyYWwgYDAxLjJgIHdpbGwgYmUgc2VyaWFsaXplZCB0byBgMS4yYC4g
RHVyaW5nCisgICAgICBkZXNlcmlhbGl6YXRpb24sIGxlYWRpbmcgemVyb3MgeWllbGQgYW4gZXJy
b3IuCisgICAgLSBOb3QtYS1udW1iZXIgKE5hTikgdmFsdWVzIHdpbGwgYmUgc2VyaWFsaXplZCB0
byBgbnVsbGAuCisKKyAgICAjIyMjIExpbWl0cworCisgICAgW1JGQyA3MTU5XShodHRwOi8vcmZj
NzE1OS5uZXQvcmZjNzE1OSkgc3RhdGVzOgorICAgID4gVGhpcyBzcGVjaWZpY2F0aW9uIGFsbG93
cyBpbXBsZW1lbnRhdGlvbnMgdG8gc2V0IGxpbWl0cyBvbiB0aGUgcmFuZ2UgYW5kCisgICAgPiBw
cmVjaXNpb24gb2YgbnVtYmVycyBhY2NlcHRlZC4gU2luY2Ugc29mdHdhcmUgdGhhdCBpbXBsZW1l
bnRzIElFRUUKKyAgICA+IDc1NC0yMDA4IGJpbmFyeTY0IChkb3VibGUgcHJlY2lzaW9uKSBudW1i
ZXJzIGlzIGdlbmVyYWxseSBhdmFpbGFibGUgYW5kCisgICAgPiB3aWRlbHkgdXNlZCwgZ29vZCBp
bnRlcm9wZXJhYmlsaXR5IGNhbiBiZSBhY2hpZXZlZCBieSBpbXBsZW1lbnRhdGlvbnMKKyAgICA+
IHRoYXQgZXhwZWN0IG5vIG1vcmUgcHJlY2lzaW9uIG9yIHJhbmdlIHRoYW4gdGhlc2UgcHJvdmlk
ZSwgaW4gdGhlIHNlbnNlCisgICAgPiB0aGF0IGltcGxlbWVudGF0aW9ucyB3aWxsIGFwcHJveGlt
YXRlIEpTT04gbnVtYmVycyB3aXRoaW4gdGhlIGV4cGVjdGVkCisgICAgPiBwcmVjaXNpb24uCisK
KyAgICBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXMgZXhhY3RseSBmb2xsb3cgdGhpcyBhcHByb2Fj
aCwgYXMgaXQgdXNlcyBkb3VibGUKKyAgICBwcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgbnVtYmVy
cy4gTm90ZSB2YWx1ZXMgc21hbGxlciB0aGFuCisgICAgYC0xLjc5NzY5MzEzNDg2MjMyZSszMDhg
IGFuZCB2YWx1ZXMgZ3JlYXRlciB0aGFuIGAxLjc5NzY5MzEzNDg2MjMyZSszMDhgCisgICAgd2ls
bCBiZSBzdG9yZWQgYXMgTmFOIGludGVybmFsbHkgYW5kIGJlIHNlcmlhbGl6ZWQgdG8gYG51bGxg
LgorCisgICAgIyMjIyBTdG9yYWdlCisKKyAgICBGbG9hdGluZy1wb2ludCBudW1iZXIgdmFsdWVz
IGFyZSBzdG9yZWQgZGlyZWN0bHkgaW5zaWRlIGEgQHJlZiBiYXNpY19qc29uCisgICAgdHlwZS4K
KworICAgIEBzYSBAcmVmIG51bWJlcl9pbnRlZ2VyX3QgLS0gdHlwZSBmb3IgbnVtYmVyIHZhbHVl
cyAoaW50ZWdlcikKKworICAgIEBzYSBAcmVmIG51bWJlcl91bnNpZ25lZF90IC0tIHR5cGUgZm9y
IG51bWJlciB2YWx1ZXMgKHVuc2lnbmVkIGludGVnZXIpCisKKyAgICBAc2luY2UgdmVyc2lvbiAx
LjAuMAorICAgICovCisgICAgdXNpbmcgbnVtYmVyX2Zsb2F0X3QgPSBOdW1iZXJGbG9hdFR5cGU7
CisKKyAgICAvLy8gQH0KKworCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAg
Ly8gSlNPTiB0eXBlIGVudW1lcmF0aW9uIC8vCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisKKyAgICAvKiEKKyAgICBAYnJpZWYgdGhlIEpTT04gdHlwZSBlbnVtZXJhdGlvbgorCisg
ICAgVGhpcyBlbnVtZXJhdGlvbiBjb2xsZWN0cyB0aGUgZGlmZmVyZW50IEpTT04gdHlwZXMuIEl0
IGlzIGludGVybmFsbHkgdXNlZAorICAgIHRvIGRpc3Rpbmd1aXNoIHRoZSBzdG9yZWQgdmFsdWVz
LCBhbmQgdGhlIGZ1bmN0aW9ucyBAcmVmIGlzX251bGwoKSwgQHJlZgorICAgIGlzX29iamVjdCgp
LCBAcmVmIGlzX2FycmF5KCksIEByZWYgaXNfc3RyaW5nKCksIEByZWYgaXNfYm9vbGVhbigpLCBA
cmVmCisgICAgaXNfbnVtYmVyKCkgKHdpdGggQHJlZiBpc19udW1iZXJfaW50ZWdlcigpLCBAcmVm
IGlzX251bWJlcl91bnNpZ25lZCgpLCBhbmQKKyAgICBAcmVmIGlzX251bWJlcl9mbG9hdCgpKSwg
QHJlZiBpc19kaXNjYXJkZWQoKSwgQHJlZiBpc19wcmltaXRpdmUoKSwgYW5kCisgICAgQHJlZiBp
c19zdHJ1Y3R1cmVkKCkgcmVseSBvbiBpdC4KKworICAgIEBub3RlIFRoZXJlIGFyZSB0aHJlZSBl
bnVtZXJhdGlvbiBlbnRyaWVzIChudW1iZXJfaW50ZWdlciwKKyAgICBudW1iZXJfdW5zaWduZWQs
IGFuZCBudW1iZXJfZmxvYXQpLCBiZWNhdXNlIHRoZSBsaWJyYXJ5IGRpc3Rpbmd1aXNoZXMKKyAg
ICB0aGVzZSB0aHJlZSB0eXBlcyBmb3IgbnVtYmVyczogQHJlZiBudW1iZXJfdW5zaWduZWRfdCBp
cyB1c2VkIGZvciB1bnNpZ25lZAorICAgIGludGVnZXJzLCBAcmVmIG51bWJlcl9pbnRlZ2VyX3Qg
aXMgdXNlZCBmb3Igc2lnbmVkIGludGVnZXJzLCBhbmQgQHJlZgorICAgIG51bWJlcl9mbG9hdF90
IGlzIHVzZWQgZm9yIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgb3IgdG8gYXBwcm94aW1hdGUKKyAg
ICBpbnRlZ2VycyB3aGljaCBkbyBub3QgZml0IGluIHRoZSBsaW1pdHMgb2YgdGhlaXIgcmVzcGVj
dGl2ZSB0eXBlLgorCisgICAgQHNhIEByZWYgYmFzaWNfanNvbihjb25zdCB2YWx1ZV90IHZhbHVl
X3R5cGUpIC0tIGNyZWF0ZSBhIEpTT04gdmFsdWUgd2l0aAorICAgIHRoZSBkZWZhdWx0IHZhbHVl
IGZvciBhIGdpdmVuIHR5cGUKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAg
ICBlbnVtIGNsYXNzIHZhbHVlX3QgOiB1aW50OF90CisgICAgeworICAgICAgICBudWxsLCAgICAg
ICAgICAgIC8vLzwgbnVsbCB2YWx1ZQorICAgICAgICBvYmplY3QsICAgICAgICAgIC8vLzwgb2Jq
ZWN0ICh1bm9yZGVyZWQgc2V0IG9mIG5hbWUvdmFsdWUgcGFpcnMpCisgICAgICAgIGFycmF5LCAg
ICAgICAgICAgLy8vPCBhcnJheSAob3JkZXJlZCBjb2xsZWN0aW9uIG9mIHZhbHVlcykKKyAgICAg
ICAgc3RyaW5nLCAgICAgICAgICAvLy88IHN0cmluZyB2YWx1ZQorICAgICAgICBib29sZWFuLCAg
ICAgICAgIC8vLzwgYm9vbGVhbiB2YWx1ZQorICAgICAgICBudW1iZXJfaW50ZWdlciwgIC8vLzwg
bnVtYmVyIHZhbHVlIChzaWduZWQgaW50ZWdlcikKKyAgICAgICAgbnVtYmVyX3Vuc2lnbmVkLCAv
Ly88IG51bWJlciB2YWx1ZSAodW5zaWduZWQgaW50ZWdlcikKKyAgICAgICAgbnVtYmVyX2Zsb2F0
LCAgICAvLy88IG51bWJlciB2YWx1ZSAoZmxvYXRpbmctcG9pbnQpCisgICAgICAgIGRpc2NhcmRl
ZCAgICAgICAgLy8vPCBkaXNjYXJkZWQgYnkgdGhlIHRoZSBwYXJzZXIgY2FsbGJhY2sgZnVuY3Rp
b24KKyAgICB9OworCisKKyAgcHJpdmF0ZToKKworICAgIC8vLyBoZWxwZXIgZm9yIGV4Y2VwdGlv
bi1zYWZlIG9iamVjdCBjcmVhdGlvbgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
Li4uIEFyZ3M+CisgICAgc3RhdGljIFQqIGNyZWF0ZShBcmdzJiYgLi4uIGFyZ3MpCisgICAgewor
ICAgICAgICBBbGxvY2F0b3JUeXBlPFQ+IGFsbG9jOworICAgICAgICBhdXRvIGRlbGV0ZXIgPSBb
Jl0oVCAqIG9iamVjdCkKKyAgICAgICAgeworICAgICAgICAgICAgYWxsb2MuZGVhbGxvY2F0ZShv
YmplY3QsIDEpOworICAgICAgICB9OworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VCwgZGVjbHR5
cGUoZGVsZXRlcik+IG9iamVjdChhbGxvYy5hbGxvY2F0ZSgxKSwgZGVsZXRlcik7CisgICAgICAg
IGFsbG9jLmNvbnN0cnVjdChvYmplY3QuZ2V0KCksIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4u
Lik7CisgICAgICAgIGFzc2VydChvYmplY3QuZ2V0KCkgIT0gbnVsbHB0cik7CisgICAgICAgIHJl
dHVybiBvYmplY3QucmVsZWFzZSgpOworICAgIH0KKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLworICAgIC8vIEpTT04gdmFsdWUgc3RvcmFnZSAvLworICAgIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLworCisgICAgLyohCisgICAgQGJyaWVmIGEgSlNPTiB2YWx1ZQorCisgICAgVGhlIGFj
dHVhbCBzdG9yYWdlIGZvciBhIEpTT04gdmFsdWUgb2YgdGhlIEByZWYgYmFzaWNfanNvbiBjbGFz
cy4gVGhpcworICAgIHVuaW9uIGNvbWJpbmVzIHRoZSBkaWZmZXJlbnQgc3RvcmFnZSB0eXBlcyBm
b3IgdGhlIEpTT04gdmFsdWUgdHlwZXMKKyAgICBkZWZpbmVkIGluIEByZWYgdmFsdWVfdC4KKwor
ICAgIEpTT04gdHlwZSB8IHZhbHVlX3QgdHlwZSAgICB8IHVzZWQgdHlwZQorICAgIC0tLS0tLS0t
LSB8IC0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIG9iamVj
dCAgICB8IG9iamVjdCAgICAgICAgICB8IHBvaW50ZXIgdG8gQHJlZiBvYmplY3RfdAorICAgIGFy
cmF5ICAgICB8IGFycmF5ICAgICAgICAgICB8IHBvaW50ZXIgdG8gQHJlZiBhcnJheV90CisgICAg
c3RyaW5nICAgIHwgc3RyaW5nICAgICAgICAgIHwgcG9pbnRlciB0byBAcmVmIHN0cmluZ190Cisg
ICAgYm9vbGVhbiAgIHwgYm9vbGVhbiAgICAgICAgIHwgQHJlZiBib29sZWFuX3QKKyAgICBudW1i
ZXIgICAgfCBudW1iZXJfaW50ZWdlciAgfCBAcmVmIG51bWJlcl9pbnRlZ2VyX3QKKyAgICBudW1i
ZXIgICAgfCBudW1iZXJfdW5zaWduZWQgfCBAcmVmIG51bWJlcl91bnNpZ25lZF90CisgICAgbnVt
YmVyICAgIHwgbnVtYmVyX2Zsb2F0ICAgIHwgQHJlZiBudW1iZXJfZmxvYXRfdAorICAgIG51bGwg
ICAgICB8IG51bGwgICAgICAgICAgICB8ICpubyB2YWx1ZSBpcyBzdG9yZWQqCisKKyAgICBAbm90
ZSBWYXJpYWJsZS1sZW5ndGggdHlwZXMgKG9iamVjdHMsIGFycmF5cywgYW5kIHN0cmluZ3MpIGFy
ZSBzdG9yZWQgYXMKKyAgICBwb2ludGVycy4gVGhlIHNpemUgb2YgdGhlIHVuaW9uIHNob3VsZCBu
b3QgZXhjZWVkIDY0IGJpdHMgaWYgdGhlIGRlZmF1bHQKKyAgICB2YWx1ZSB0eXBlcyBhcmUgdXNl
ZC4KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICB1bmlvbiBqc29uX3Zh
bHVlCisgICAgeworICAgICAgICAvLy8gb2JqZWN0IChzdG9yZWQgd2l0aCBwb2ludGVyIHRvIHNh
dmUgc3RvcmFnZSkKKyAgICAgICAgb2JqZWN0X3QqIG9iamVjdDsKKyAgICAgICAgLy8vIGFycmF5
IChzdG9yZWQgd2l0aCBwb2ludGVyIHRvIHNhdmUgc3RvcmFnZSkKKyAgICAgICAgYXJyYXlfdCog
YXJyYXk7CisgICAgICAgIC8vLyBzdHJpbmcgKHN0b3JlZCB3aXRoIHBvaW50ZXIgdG8gc2F2ZSBz
dG9yYWdlKQorICAgICAgICBzdHJpbmdfdCogc3RyaW5nOworICAgICAgICAvLy8gYm9vbGVhbgor
ICAgICAgICBib29sZWFuX3QgYm9vbGVhbjsKKyAgICAgICAgLy8vIG51bWJlciAoaW50ZWdlcikK
KyAgICAgICAgbnVtYmVyX2ludGVnZXJfdCBudW1iZXJfaW50ZWdlcjsKKyAgICAgICAgLy8vIG51
bWJlciAodW5zaWduZWQgaW50ZWdlcikKKyAgICAgICAgbnVtYmVyX3Vuc2lnbmVkX3QgbnVtYmVy
X3Vuc2lnbmVkOworICAgICAgICAvLy8gbnVtYmVyIChmbG9hdGluZy1wb2ludCkKKyAgICAgICAg
bnVtYmVyX2Zsb2F0X3QgbnVtYmVyX2Zsb2F0OworCisgICAgICAgIC8vLyBkZWZhdWx0IGNvbnN0
cnVjdG9yIChmb3IgbnVsbCB2YWx1ZXMpCisgICAgICAgIGpzb25fdmFsdWUoKSA9IGRlZmF1bHQ7
CisgICAgICAgIC8vLyBjb25zdHJ1Y3RvciBmb3IgYm9vbGVhbnMKKyAgICAgICAganNvbl92YWx1
ZShib29sZWFuX3Qgdikgbm9leGNlcHQgOiBib29sZWFuKHYpIHt9CisgICAgICAgIC8vLyBjb25z
dHJ1Y3RvciBmb3IgbnVtYmVycyAoaW50ZWdlcikKKyAgICAgICAganNvbl92YWx1ZShudW1iZXJf
aW50ZWdlcl90IHYpIG5vZXhjZXB0IDogbnVtYmVyX2ludGVnZXIodikge30KKyAgICAgICAgLy8v
IGNvbnN0cnVjdG9yIGZvciBudW1iZXJzICh1bnNpZ25lZCkKKyAgICAgICAganNvbl92YWx1ZShu
dW1iZXJfdW5zaWduZWRfdCB2KSBub2V4Y2VwdCA6IG51bWJlcl91bnNpZ25lZCh2KSB7fQorICAg
ICAgICAvLy8gY29uc3RydWN0b3IgZm9yIG51bWJlcnMgKGZsb2F0aW5nLXBvaW50KQorICAgICAg
ICBqc29uX3ZhbHVlKG51bWJlcl9mbG9hdF90IHYpIG5vZXhjZXB0IDogbnVtYmVyX2Zsb2F0KHYp
IHt9CisgICAgICAgIC8vLyBjb25zdHJ1Y3RvciBmb3IgZW1wdHkgdmFsdWVzIG9mIGEgZ2l2ZW4g
dHlwZQorICAgICAgICBqc29uX3ZhbHVlKHZhbHVlX3QgdCkKKyAgICAgICAgeworICAgICAgICAg
ICAgc3dpdGNoICh0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVf
dDo6b2JqZWN0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0
ID0gY3JlYXRlPG9iamVjdF90PigpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5OgorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXJyYXkgPSBjcmVhdGU8YXJyYXlf
dD4oKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpzdHJpbmc6CisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBzdHJpbmcgPSBjcmVhdGU8c3RyaW5nX3Q+KCIiKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgYm9vbGVhbiA9IGJvb2xlYW5fdChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVf
dDo6bnVtYmVyX2ludGVnZXI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBudW1iZXJfaW50ZWdlciA9IG51bWJlcl9pbnRlZ2VyX3QoMCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhc2UgdmFs
dWVfdDo6bnVtYmVyX3Vuc2lnbmVkOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgbnVtYmVyX3Vuc2lnbmVkID0gbnVtYmVyX3Vuc2lnbmVkX3QoMCk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNh
c2UgdmFsdWVfdDo6bnVtYmVyX2Zsb2F0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgbnVtYmVyX2Zsb2F0ID0gbnVtYmVyX2Zsb2F0X3QoMC4wKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vLyBj
b25zdHJ1Y3RvciBmb3Igc3RyaW5ncworICAgICAgICBqc29uX3ZhbHVlKGNvbnN0IHN0cmluZ190
JiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgc3RyaW5nID0gY3JlYXRlPHN0cmluZ190
Pih2YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICAvLy8gY29uc3RydWN0b3IgZm9yIG9iamVj
dHMKKyAgICAgICAganNvbl92YWx1ZShjb25zdCBvYmplY3RfdCYgdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG9iamVjdCA9IGNyZWF0ZTxvYmplY3RfdD4odmFsdWUpOworICAgICAgICB9
CisKKyAgICAgICAgLy8vIGNvbnN0cnVjdG9yIGZvciBhcnJheXMKKyAgICAgICAganNvbl92YWx1
ZShjb25zdCBhcnJheV90JiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXJyYXkgPSBj
cmVhdGU8YXJyYXlfdD4odmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qIQorICAg
IEBicmllZiBjaGVja3MgdGhlIGNsYXNzIGludmFyaWFudHMKKworICAgIFRoaXMgZnVuY3Rpb24g
YXNzZXJ0cyB0aGUgY2xhc3MgaW52YXJpYW50cy4gSXQgbmVlZHMgdG8gYmUgY2FsbGVkIGF0IHRo
ZQorICAgIGVuZCBvZiBldmVyeSBjb25zdHJ1Y3RvciB0byBtYWtlIHN1cmUgdGhhdCBjcmVhdGVk
IG9iamVjdHMgcmVzcGVjdCB0aGUKKyAgICBpbnZhcmlhbnQuIEZ1cnRoZXJtb3JlLCBpdCBoYXMg
dG8gYmUgY2FsbGVkIGVhY2ggdGltZSB0aGUgdHlwZSBvZiBhIEpTT04KKyAgICB2YWx1ZSBpcyBj
aGFuZ2VkLCBiZWNhdXNlIHRoZSBpbnZhcmlhbnQgZXhwcmVzc2VzIGEgcmVsYXRpb25zaGlwIGJl
dHdlZW4KKyAgICBAYSBtX3R5cGUgYW5kIEBhIG1fdmFsdWUuCisgICAgKi8KKyAgICB2b2lkIGFz
c2VydF9pbnZhcmlhbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgYXNzZXJ0KG1fdHlwZSAhPSB2
YWx1ZV90OjpvYmplY3Qgb3IgbV92YWx1ZS5vYmplY3QgIT0gbnVsbHB0cik7CisgICAgICAgIGFz
c2VydChtX3R5cGUgIT0gdmFsdWVfdDo6YXJyYXkgb3IgbV92YWx1ZS5hcnJheSAhPSBudWxscHRy
KTsKKyAgICAgICAgYXNzZXJ0KG1fdHlwZSAhPSB2YWx1ZV90OjpzdHJpbmcgb3IgbV92YWx1ZS5z
dHJpbmcgIT0gbnVsbHB0cik7CisgICAgfQorCisgIHB1YmxpYzoKKyAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworICAgIC8vIEpTT04gcGFyc2VyIGNhbGxiYWNrIC8vCisgICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIC8qIQorICAgIEBicmllZiBKU09OIGNhbGxiYWNr
IGV2ZW50cworCisgICAgVGhpcyBlbnVtZXJhdGlvbiBsaXN0cyB0aGUgcGFyc2VyIGV2ZW50cyB0
aGF0IGNhbiB0cmlnZ2VyIGNhbGxpbmcgYQorICAgIGNhbGxiYWNrIGZ1bmN0aW9uIG9mIHR5cGUg
QHJlZiBwYXJzZXJfY2FsbGJhY2tfdCBkdXJpbmcgcGFyc2luZy4KKworICAgIEBpbWFnZSBodG1s
IGNhbGxiYWNrX2V2ZW50cy5wbmcgIkV4YW1wbGUgd2hlbiBjZXJ0YWluIHBhcnNlIGV2ZW50cyBh
cmUgdHJpZ2dlcmVkIgorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGVu
dW0gY2xhc3MgcGFyc2VfZXZlbnRfdCA6IHVpbnQ4X3QKKyAgICB7CisgICAgICAgIC8vLyB0aGUg
cGFyc2VyIHJlYWQgYHtgIGFuZCBzdGFydGVkIHRvIHByb2Nlc3MgYSBKU09OIG9iamVjdAorICAg
ICAgICBvYmplY3Rfc3RhcnQsCisgICAgICAgIC8vLyB0aGUgcGFyc2VyIHJlYWQgYH1gIGFuZCBm
aW5pc2hlZCBwcm9jZXNzaW5nIGEgSlNPTiBvYmplY3QKKyAgICAgICAgb2JqZWN0X2VuZCwKKyAg
ICAgICAgLy8vIHRoZSBwYXJzZXIgcmVhZCBgW2AgYW5kIHN0YXJ0ZWQgdG8gcHJvY2VzcyBhIEpT
T04gYXJyYXkKKyAgICAgICAgYXJyYXlfc3RhcnQsCisgICAgICAgIC8vLyB0aGUgcGFyc2VyIHJl
YWQgYF1gIGFuZCBmaW5pc2hlZCBwcm9jZXNzaW5nIGEgSlNPTiBhcnJheQorICAgICAgICBhcnJh
eV9lbmQsCisgICAgICAgIC8vLyB0aGUgcGFyc2VyIHJlYWQgYSBrZXkgb2YgYSB2YWx1ZSBpbiBh
biBvYmplY3QKKyAgICAgICAga2V5LAorICAgICAgICAvLy8gdGhlIHBhcnNlciBmaW5pc2hlZCBy
ZWFkaW5nIGEgSlNPTiB2YWx1ZQorICAgICAgICB2YWx1ZQorICAgIH07CisKKyAgICAvKiEKKyAg
ICBAYnJpZWYgcGVyLWVsZW1lbnQgcGFyc2VyIGNhbGxiYWNrIHR5cGUKKworICAgIFdpdGggYSBw
YXJzZXIgY2FsbGJhY2sgZnVuY3Rpb24sIHRoZSByZXN1bHQgb2YgcGFyc2luZyBhIEpTT04gdGV4
dCBjYW4gYmUKKyAgICBpbmZsdWVuY2VkLiBXaGVuIHBhc3NlZCB0byBAcmVmIHBhcnNlKHN0ZDo6
aXN0cmVhbSYsIGNvbnN0CisgICAgcGFyc2VyX2NhbGxiYWNrX3QpIG9yIEByZWYgcGFyc2UoY29u
c3QgY2hhciosIGNvbnN0IHBhcnNlcl9jYWxsYmFja190KSwKKyAgICBpdCBpcyBjYWxsZWQgb24g
Y2VydGFpbiBldmVudHMgKHBhc3NlZCBhcyBAcmVmIHBhcnNlX2V2ZW50X3QgdmlhIHBhcmFtZXRl
cgorICAgIEBhIGV2ZW50KSB3aXRoIGEgc2V0IHJlY3Vyc2lvbiBkZXB0aCBAYSBkZXB0aCBhbmQg
Y29udGV4dCBKU09OIHZhbHVlCisgICAgQGEgcGFyc2VkLiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRo
ZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBhIGJvb2xlYW4KKyAgICBpbmRpY2F0aW5nIHdoZXRoZXIg
dGhlIGVsZW1lbnQgdGhhdCBlbWl0dGVkIHRoZSBjYWxsYmFjayBzaGFsbCBiZSBrZXB0IG9yCisg
ICAgbm90LgorCisgICAgV2UgZGlzdGluZ3Vpc2ggc2l4IHNjZW5hcmlvcyAoZGV0ZXJtaW5lZCBi
eSB0aGUgZXZlbnQgdHlwZSkgaW4gd2hpY2ggdGhlCisgICAgY2FsbGJhY2sgZnVuY3Rpb24gY2Fu
IGJlIGNhbGxlZC4gVGhlIGZvbGxvd2luZyB0YWJsZSBkZXNjcmliZXMgdGhlIHZhbHVlcworICAg
IG9mIHRoZSBwYXJhbWV0ZXJzIEBhIGRlcHRoLCBAYSBldmVudCwgYW5kIEBhIHBhcnNlZC4KKwor
ICAgIHBhcmFtZXRlciBAYSBldmVudCB8IGRlc2NyaXB0aW9uIHwgcGFyYW1ldGVyIEBhIGRlcHRo
IHwgcGFyYW1ldGVyIEBhIHBhcnNlZAorICAgIC0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0t
LS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHBhcnNl
X2V2ZW50X3Q6Om9iamVjdF9zdGFydCB8IHRoZSBwYXJzZXIgcmVhZCBge2AgYW5kIHN0YXJ0ZWQg
dG8gcHJvY2VzcyBhIEpTT04gb2JqZWN0IHwgZGVwdGggb2YgdGhlIHBhcmVudCBvZiB0aGUgSlNP
TiBvYmplY3QgfCBhIEpTT04gdmFsdWUgd2l0aCB0eXBlIGRpc2NhcmRlZAorICAgIHBhcnNlX2V2
ZW50X3Q6OmtleSB8IHRoZSBwYXJzZXIgcmVhZCBhIGtleSBvZiBhIHZhbHVlIGluIGFuIG9iamVj
dCB8IGRlcHRoIG9mIHRoZSBjdXJyZW50bHkgcGFyc2VkIEpTT04gb2JqZWN0IHwgYSBKU09OIHN0
cmluZyBjb250YWluaW5nIHRoZSBrZXkKKyAgICBwYXJzZV9ldmVudF90OjpvYmplY3RfZW5kIHwg
dGhlIHBhcnNlciByZWFkIGB9YCBhbmQgZmluaXNoZWQgcHJvY2Vzc2luZyBhIEpTT04gb2JqZWN0
IHwgZGVwdGggb2YgdGhlIHBhcmVudCBvZiB0aGUgSlNPTiBvYmplY3QgfCB0aGUgcGFyc2VkIEpT
T04gb2JqZWN0CisgICAgcGFyc2VfZXZlbnRfdDo6YXJyYXlfc3RhcnQgfCB0aGUgcGFyc2VyIHJl
YWQgYFtgIGFuZCBzdGFydGVkIHRvIHByb2Nlc3MgYSBKU09OIGFycmF5IHwgZGVwdGggb2YgdGhl
IHBhcmVudCBvZiB0aGUgSlNPTiBhcnJheSB8IGEgSlNPTiB2YWx1ZSB3aXRoIHR5cGUgZGlzY2Fy
ZGVkCisgICAgcGFyc2VfZXZlbnRfdDo6YXJyYXlfZW5kIHwgdGhlIHBhcnNlciByZWFkIGBdYCBh
bmQgZmluaXNoZWQgcHJvY2Vzc2luZyBhIEpTT04gYXJyYXkgfCBkZXB0aCBvZiB0aGUgcGFyZW50
IG9mIHRoZSBKU09OIGFycmF5IHwgdGhlIHBhcnNlZCBKU09OIGFycmF5CisgICAgcGFyc2VfZXZl
bnRfdDo6dmFsdWUgfCB0aGUgcGFyc2VyIGZpbmlzaGVkIHJlYWRpbmcgYSBKU09OIHZhbHVlIHwg
ZGVwdGggb2YgdGhlIHZhbHVlIHwgdGhlIHBhcnNlZCBKU09OIHZhbHVlCisKKyAgICBAaW1hZ2Ug
aHRtbCBjYWxsYmFja19ldmVudHMucG5nICJFeGFtcGxlIHdoZW4gY2VydGFpbiBwYXJzZSBldmVu
dHMgYXJlIHRyaWdnZXJlZCIKKworICAgIERpc2NhcmRpbmcgYSB2YWx1ZSAoaS5lLiwgcmV0dXJu
aW5nIGBmYWxzZWApIGhhcyBkaWZmZXJlbnQgZWZmZWN0cworICAgIGRlcGVuZGluZyBvbiB0aGUg
Y29udGV4dCBpbiB3aGljaCBmdW5jdGlvbiB3YXMgY2FsbGVkOgorCisgICAgLSBEaXNjYXJkZWQg
dmFsdWVzIGluIHN0cnVjdHVyZWQgdHlwZXMgYXJlIHNraXBwZWQuIFRoYXQgaXMsIHRoZSBwYXJz
ZXIKKyAgICAgIHdpbGwgYmVoYXZlIGFzIGlmIHRoZSBkaXNjYXJkZWQgdmFsdWUgd2FzIG5ldmVy
IHJlYWQuCisgICAgLSBJbiBjYXNlIGEgdmFsdWUgb3V0c2lkZSBhIHN0cnVjdHVyZWQgdHlwZSBp
cyBza2lwcGVkLCBpdCBpcyByZXBsYWNlZAorICAgICAgd2l0aCBgbnVsbGAuIFRoaXMgY2FzZSBo
YXBwZW5zIGlmIHRoZSB0b3AtbGV2ZWwgZWxlbWVudCBpcyBza2lwcGVkLgorCisgICAgQHBhcmFt
W2luXSBkZXB0aCAgdGhlIGRlcHRoIG9mIHRoZSByZWN1cnNpb24gZHVyaW5nIHBhcnNpbmcKKwor
ICAgIEBwYXJhbVtpbl0gZXZlbnQgIGFuIGV2ZW50IG9mIHR5cGUgcGFyc2VfZXZlbnRfdCBpbmRp
Y2F0aW5nIHRoZSBjb250ZXh0IGluCisgICAgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGhhcyBiZWVu
IGNhbGxlZAorCisgICAgQHBhcmFtW2luLG91dF0gcGFyc2VkICB0aGUgY3VycmVudCBpbnRlcm1l
ZGlhdGUgcGFyc2UgcmVzdWx0OyBub3RlIHRoYXQKKyAgICB3cml0aW5nIHRvIHRoaXMgdmFsdWUg
aGFzIG5vIGVmZmVjdCBmb3IgcGFyc2VfZXZlbnRfdDo6a2V5IGV2ZW50cworCisgICAgQHJldHVy
biBXaGV0aGVyIHRoZSBKU09OIHZhbHVlIHdoaWNoIGNhbGxlZCB0aGUgZnVuY3Rpb24gZHVyaW5n
IHBhcnNpbmcKKyAgICBzaG91bGQgYmUga2VwdCAoYHRydWVgKSBvciBub3QgKGBmYWxzZWApLiBJ
biB0aGUgbGF0dGVyIGNhc2UsIGl0IGlzIGVpdGhlcgorICAgIHNraXBwZWQgY29tcGxldGVseSBv
ciByZXBsYWNlZCBieSBhbiBlbXB0eSBkaXNjYXJkZWQgb2JqZWN0LgorCisgICAgQHNhIEByZWYg
cGFyc2Uoc3RkOjppc3RyZWFtJiwgcGFyc2VyX2NhbGxiYWNrX3QpIG9yCisgICAgQHJlZiBwYXJz
ZShjb25zdCBjaGFyKiwgcGFyc2VyX2NhbGxiYWNrX3QpIGZvciBleGFtcGxlcworCisgICAgQHNp
bmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIHVzaW5nIHBhcnNlcl9jYWxsYmFja190ID0g
c3RkOjpmdW5jdGlvbjxib29sKGludCBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcnNlX2V2ZW50X3QgZXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
YXNpY19qc29uJiBwYXJzZWQpPjsKKworCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy8g
Y29uc3RydWN0b3JzIC8vCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICAvLy8gQG5hbWUg
Y29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycworICAgIC8vLyBDb25zdHJ1Y3RvcnMgb2YgY2xh
c3MgQHJlZiBiYXNpY19qc29uLCBjb3B5L21vdmUgY29uc3RydWN0b3IsIGNvcHkKKyAgICAvLy8g
YXNzaWdubWVudCwgc3RhdGljIGZ1bmN0aW9ucyBjcmVhdGluZyBvYmplY3RzLCBhbmQgdGhlIGRl
c3RydWN0b3IuCisgICAgLy8vIEB7CisKKyAgICAvKiEKKyAgICBAYnJpZWYgY3JlYXRlIGFuIGVt
cHR5IHZhbHVlIHdpdGggYSBnaXZlbiB0eXBlCisKKyAgICBDcmVhdGUgYW4gZW1wdHkgSlNPTiB2
YWx1ZSB3aXRoIGEgZ2l2ZW4gdHlwZS4gVGhlIHZhbHVlIHdpbGwgYmUgZGVmYXVsdAorICAgIGlu
aXRpYWxpemVkIHdpdGggYW4gZW1wdHkgdmFsdWUgd2hpY2ggZGVwZW5kcyBvbiB0aGUgdHlwZToK
KworICAgIFZhbHVlIHR5cGUgIHwgaW5pdGlhbCB2YWx1ZQorICAgIC0tLS0tLS0tLS0tIHwgLS0t
LS0tLS0tLS0tLQorICAgIG51bGwgICAgICAgIHwgYG51bGxgCisgICAgYm9vbGVhbiAgICAgfCBg
ZmFsc2VgCisgICAgc3RyaW5nICAgICAgfCBgIiJgCisgICAgbnVtYmVyICAgICAgfCBgMGAKKyAg
ICBvYmplY3QgICAgICB8IGB7fWAKKyAgICBhcnJheSAgICAgICB8IGBbXWAKKworICAgIEBwYXJh
bVtpbl0gdmFsdWVfdHlwZSAgdGhlIHR5cGUgb2YgdGhlIHZhbHVlIHRvIGNyZWF0ZQorCisgICAg
QGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAdGhyb3cgc3RkOjpiYWRfYWxsb2MgaWYgYWxs
b2NhdGlvbiBmb3Igb2JqZWN0LCBhcnJheSwgb3Igc3RyaW5nIHZhbHVlCisgICAgZmFpbHMKKwor
ICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgdGhlIGNvbnN0cnVjdG9y
IGZvciBkaWZmZXJlbnQgQHJlZgorICAgIHZhbHVlX3QgdmFsdWVzLGJhc2ljX2pzb25fX3ZhbHVl
X3R9CisKKyAgICBAc2EgQHJlZiBiYXNpY19qc29uKHN0ZDo6bnVsbHB0cl90KSAtLSBjcmVhdGUg
YSBgbnVsbGAgdmFsdWUKKyAgICBAc2EgQHJlZiBiYXNpY19qc29uKGJvb2xlYW5fdCB2YWx1ZSkg
LS0gY3JlYXRlIGEgYm9vbGVhbiB2YWx1ZQorICAgIEBzYSBAcmVmIGJhc2ljX2pzb24oY29uc3Qg
c3RyaW5nX3QmKSAtLSBjcmVhdGUgYSBzdHJpbmcgdmFsdWUKKyAgICBAc2EgQHJlZiBiYXNpY19q
c29uKGNvbnN0IG9iamVjdF90JikgLS0gY3JlYXRlIGEgb2JqZWN0IHZhbHVlCisgICAgQHNhIEBy
ZWYgYmFzaWNfanNvbihjb25zdCBhcnJheV90JikgLS0gY3JlYXRlIGEgYXJyYXkgdmFsdWUKKyAg
ICBAc2EgQHJlZiBiYXNpY19qc29uKGNvbnN0IG51bWJlcl9mbG9hdF90KSAtLSBjcmVhdGUgYSBu
dW1iZXIKKyAgICAoZmxvYXRpbmctcG9pbnQpIHZhbHVlCisgICAgQHNhIEByZWYgYmFzaWNfanNv
bihjb25zdCBudW1iZXJfaW50ZWdlcl90KSAtLSBjcmVhdGUgYSBudW1iZXIgKGludGVnZXIpCisg
ICAgdmFsdWUKKyAgICBAc2EgQHJlZiBiYXNpY19qc29uKGNvbnN0IG51bWJlcl91bnNpZ25lZF90
KSAtLSBjcmVhdGUgYSBudW1iZXIgKHVuc2lnbmVkKQorICAgIHZhbHVlCisKKyAgICBAc2luY2Ug
dmVyc2lvbiAxLjAuMAorICAgICovCisgICAgYmFzaWNfanNvbihjb25zdCB2YWx1ZV90IHZhbHVl
X3R5cGUpCisgICAgICAgIDogbV90eXBlKHZhbHVlX3R5cGUpLCBtX3ZhbHVlKHZhbHVlX3R5cGUp
CisgICAgeworICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7CisgICAgfQorCisgICAgLyohCisg
ICAgQGJyaWVmIGNyZWF0ZSBhIG51bGwgb2JqZWN0CisKKyAgICBDcmVhdGUgYSBgbnVsbGAgSlNP
TiB2YWx1ZS4gSXQgZWl0aGVyIHRha2VzIGEgbnVsbCBwb2ludGVyIGFzIHBhcmFtZXRlcgorICAg
IChleHBsaWNpdGx5IGNyZWF0aW5nIGBudWxsYCkgb3Igbm8gcGFyYW1ldGVyIChpbXBsaWNpdGx5
IGNyZWF0aW5nIGBudWxsYCkuCisgICAgVGhlIHBhc3NlZCBudWxsIHBvaW50ZXIgaXRzZWxmIGlz
IG5vdCByZWFkIC0tIGl0IGlzIG9ubHkgdXNlZCB0byBjaG9vc2UKKyAgICB0aGUgcmlnaHQgY29u
c3RydWN0b3IuCisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEBleGNlcHRpb25z
YWZldHkgTm8tdGhyb3cgZ3VhcmFudGVlOiB0aGlzIGNvbnN0cnVjdG9yIG5ldmVyIHRocm93cwor
ICAgIGV4Y2VwdGlvbnMuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIHNo
b3dzIHRoZSBjb25zdHJ1Y3RvciB3aXRoIGFuZCB3aXRob3V0IGEKKyAgICBudWxsIHBvaW50ZXIg
cGFyYW1ldGVyLixiYXNpY19qc29uX19udWxscHRyX3R9CisKKyAgICBAc2luY2UgdmVyc2lvbiAx
LjAuMAorICAgICovCisgICAgYmFzaWNfanNvbihzdGQ6Om51bGxwdHJfdCA9IG51bGxwdHIpIG5v
ZXhjZXB0CisgICAgICAgIDogYmFzaWNfanNvbih2YWx1ZV90OjpudWxsKQorICAgIHsKKyAgICAg
ICAgYXNzZXJ0X2ludmFyaWFudCgpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBjcmVh
dGUgYW4gb2JqZWN0IChleHBsaWNpdCkKKworICAgIENyZWF0ZSBhbiBvYmplY3QgSlNPTiB2YWx1
ZSB3aXRoIGEgZ2l2ZW4gY29udGVudC4KKworICAgIEBwYXJhbVtpbl0gdmFsICBhIHZhbHVlIGZv
ciB0aGUgb2JqZWN0CisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhl
IHBhc3NlZCBAYSB2YWwuCisKKyAgICBAdGhyb3cgc3RkOjpiYWRfYWxsb2MgaWYgYWxsb2NhdGlv
biBmb3Igb2JqZWN0IHZhbHVlIGZhaWxzCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2lu
ZyBjb2RlIHNob3dzIHRoZSBjb25zdHJ1Y3RvciB3aXRoIGFuIEByZWYKKyAgICBvYmplY3RfdCBw
YXJhbWV0ZXIuLGJhc2ljX2pzb25fX29iamVjdF90fQorCisgICAgQHNhIEByZWYgYmFzaWNfanNv
bihjb25zdCBDb21wYXRpYmxlT2JqZWN0VHlwZSYpIC0tIGNyZWF0ZSBhbiBvYmplY3QgdmFsdWUK
KyAgICBmcm9tIGEgY29tcGF0aWJsZSBTVEwgY29udGFpbmVyCisKKyAgICBAc2luY2UgdmVyc2lv
biAxLjAuMAorICAgICovCisgICAgYmFzaWNfanNvbihjb25zdCBvYmplY3RfdCYgdmFsKQorICAg
ICAgICA6IG1fdHlwZSh2YWx1ZV90OjpvYmplY3QpLCBtX3ZhbHVlKHZhbCkKKyAgICB7CisgICAg
ICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgY3Jl
YXRlIGFuIG9iamVjdCAoaW1wbGljaXQpCisKKyAgICBDcmVhdGUgYW4gb2JqZWN0IEpTT04gdmFs
dWUgd2l0aCBhIGdpdmVuIGNvbnRlbnQuIFRoaXMgY29uc3RydWN0b3IgYWxsb3dzCisgICAgYW55
IHR5cGUgQGEgQ29tcGF0aWJsZU9iamVjdFR5cGUgdGhhdCBjYW4gYmUgdXNlZCB0byBjb25zdHJ1
Y3QgdmFsdWVzIG9mCisgICAgdHlwZSBAcmVmIG9iamVjdF90LgorCisgICAgQHRwYXJhbSBDb21w
YXRpYmxlT2JqZWN0VHlwZSBBbiBvYmplY3QgdHlwZSB3aG9zZSBga2V5X3R5cGVgIGFuZAorICAg
IGB2YWx1ZV90eXBlYCBpcyBjb21wYXRpYmxlIHRvIEByZWYgb2JqZWN0X3QuIEV4YW1wbGVzIGlu
Y2x1ZGUgYHN0ZDo6bWFwYCwKKyAgICBgc3RkOjp1bm9yZGVyZWRfbWFwYCwgYHN0ZDo6bXVsdGlt
YXBgLCBhbmQgYHN0ZDo6dW5vcmRlcmVkX211bHRpbWFwYCB3aXRoCisgICAgYSBga2V5X3R5cGVg
IG9mIGBzdGQ6OnN0cmluZ2AsIGFuZCBhIGB2YWx1ZV90eXBlYCBmcm9tIHdoaWNoIGEgQHJlZgor
ICAgIGJhc2ljX2pzb24gdmFsdWUgY2FuIGJlIGNvbnN0cnVjdGVkLgorCisgICAgQHBhcmFtW2lu
XSB2YWwgIGEgdmFsdWUgZm9yIHRoZSBvYmplY3QKKworICAgIEBjb21wbGV4aXR5IExpbmVhciBp
biB0aGUgc2l6ZSBvZiB0aGUgcGFzc2VkIEBhIHZhbC4KKworICAgIEB0aHJvdyBzdGQ6OmJhZF9h
bGxvYyBpZiBhbGxvY2F0aW9uIGZvciBvYmplY3QgdmFsdWUgZmFpbHMKKworICAgIEBsaXZlZXhh
bXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgdGhlIGNvbnN0cnVjdG9yIHdpdGggc2V2ZXJh
bAorICAgIGNvbXBhdGlibGUgb2JqZWN0IHR5cGUgcGFyYW1ldGVycy4sYmFzaWNfanNvbl9fQ29t
cGF0aWJsZU9iamVjdFR5cGV9CisKKyAgICBAc2EgQHJlZiBiYXNpY19qc29uKGNvbnN0IG9iamVj
dF90JikgLS0gY3JlYXRlIGFuIG9iamVjdCB2YWx1ZQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4w
LjAKKyAgICAqLworICAgIHRlbXBsYXRlPGNsYXNzIENvbXBhdGlibGVPYmplY3RUeXBlLCB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjwKKyAgICAgICAgICAgICAgICAgc3RkOjppc19jb25zdHJ1Y3Rp
YmxlPHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlwZSwgdHlwZW5hbWUgQ29tcGF0aWJsZU9iamVj
dFR5cGU6OmtleV90eXBlPjo6dmFsdWUgYW5kCisgICAgICAgICAgICAgICAgIHN0ZDo6aXNfY29u
c3RydWN0aWJsZTxiYXNpY19qc29uLCB0eXBlbmFtZSBDb21wYXRpYmxlT2JqZWN0VHlwZTo6bWFw
cGVkX3R5cGU+Ojp2YWx1ZSwgaW50Pjo6dHlwZSA9IDA+CisgICAgYmFzaWNfanNvbihjb25zdCBD
b21wYXRpYmxlT2JqZWN0VHlwZSYgdmFsKQorICAgICAgICA6IG1fdHlwZSh2YWx1ZV90OjpvYmpl
Y3QpCisgICAgeworICAgICAgICB1c2luZyBzdGQ6OmJlZ2luOworICAgICAgICB1c2luZyBzdGQ6
OmVuZDsKKyAgICAgICAgbV92YWx1ZS5vYmplY3QgPSBjcmVhdGU8b2JqZWN0X3Q+KGJlZ2luKHZh
bCksIGVuZCh2YWwpKTsKKyAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOworICAgIH0KKworICAg
IC8qIQorICAgIEBicmllZiBjcmVhdGUgYW4gYXJyYXkgKGV4cGxpY2l0KQorCisgICAgQ3JlYXRl
IGFuIGFycmF5IEpTT04gdmFsdWUgd2l0aCBhIGdpdmVuIGNvbnRlbnQuCisKKyAgICBAcGFyYW1b
aW5dIHZhbCAgYSB2YWx1ZSBmb3IgdGhlIGFycmF5CisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIg
aW4gdGhlIHNpemUgb2YgdGhlIHBhc3NlZCBAYSB2YWwuCisKKyAgICBAdGhyb3cgc3RkOjpiYWRf
YWxsb2MgaWYgYWxsb2NhdGlvbiBmb3IgYXJyYXkgdmFsdWUgZmFpbHMKKworICAgIEBsaXZlZXhh
bXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgdGhlIGNvbnN0cnVjdG9yIHdpdGggYW4gQHJl
ZiBhcnJheV90CisgICAgcGFyYW1ldGVyLixiYXNpY19qc29uX19hcnJheV90fQorCisgICAgQHNh
IEByZWYgYmFzaWNfanNvbihjb25zdCBDb21wYXRpYmxlQXJyYXlUeXBlJikgLS0gY3JlYXRlIGFu
IGFycmF5IHZhbHVlCisgICAgZnJvbSBhIGNvbXBhdGlibGUgU1RMIGNvbnRhaW5lcnMKKworICAg
IEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBiYXNpY19qc29uKGNvbnN0IGFycmF5
X3QmIHZhbCkKKyAgICAgICAgOiBtX3R5cGUodmFsdWVfdDo6YXJyYXkpLCBtX3ZhbHVlKHZhbCkK
KyAgICB7CisgICAgICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKKyAgICB9CisKKyAgICAvKiEKKyAg
ICBAYnJpZWYgY3JlYXRlIGFuIGFycmF5IChpbXBsaWNpdCkKKworICAgIENyZWF0ZSBhbiBhcnJh
eSBKU09OIHZhbHVlIHdpdGggYSBnaXZlbiBjb250ZW50LiBUaGlzIGNvbnN0cnVjdG9yIGFsbG93
cworICAgIGFueSB0eXBlIEBhIENvbXBhdGlibGVBcnJheVR5cGUgdGhhdCBjYW4gYmUgdXNlZCB0
byBjb25zdHJ1Y3QgdmFsdWVzIG9mCisgICAgdHlwZSBAcmVmIGFycmF5X3QuCisKKyAgICBAdHBh
cmFtIENvbXBhdGlibGVBcnJheVR5cGUgQW4gb2JqZWN0IHR5cGUgd2hvc2UgYHZhbHVlX3R5cGVg
IGlzCisgICAgY29tcGF0aWJsZSB0byBAcmVmIGFycmF5X3QuIEV4YW1wbGVzIGluY2x1ZGUgYHN0
ZDo6dmVjdG9yYCwgYHN0ZDo6ZGVxdWVgLAorICAgIGBzdGQ6Omxpc3RgLCBgc3RkOjpmb3J3YXJk
X2xpc3RgLCBgc3RkOjphcnJheWAsIGBzdGQ6OnNldGAsCisgICAgYHN0ZDo6dW5vcmRlcmVkX3Nl
dGAsIGBzdGQ6Om11bHRpc2V0YCwgYW5kIGB1bm9yZGVyZWRfbXVsdGlzZXRgIHdpdGggYQorICAg
IGB2YWx1ZV90eXBlYCBmcm9tIHdoaWNoIGEgQHJlZiBiYXNpY19qc29uIHZhbHVlIGNhbiBiZSBj
b25zdHJ1Y3RlZC4KKworICAgIEBwYXJhbVtpbl0gdmFsICBhIHZhbHVlIGZvciB0aGUgYXJyYXkK
KworICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgc2l6ZSBvZiB0aGUgcGFzc2VkIEBhIHZh
bC4KKworICAgIEB0aHJvdyBzdGQ6OmJhZF9hbGxvYyBpZiBhbGxvY2F0aW9uIGZvciBhcnJheSB2
YWx1ZSBmYWlscworCisgICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29kZSBzaG93cyB0
aGUgY29uc3RydWN0b3Igd2l0aCBzZXZlcmFsCisgICAgY29tcGF0aWJsZSBhcnJheSB0eXBlIHBh
cmFtZXRlcnMuLGJhc2ljX2pzb25fX0NvbXBhdGlibGVBcnJheVR5cGV9CisKKyAgICBAc2EgQHJl
ZiBiYXNpY19qc29uKGNvbnN0IGFycmF5X3QmKSAtLSBjcmVhdGUgYW4gYXJyYXkgdmFsdWUKKwor
ICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICB0ZW1wbGF0ZTxjbGFzcyBDb21w
YXRpYmxlQXJyYXlUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKKyAgICAgICAgICAgICAg
ICAgbm90IHN0ZDo6aXNfc2FtZTxDb21wYXRpYmxlQXJyYXlUeXBlLCB0eXBlbmFtZSBiYXNpY19q
c29uX3Q6Oml0ZXJhdG9yPjo6dmFsdWUgYW5kCisgICAgICAgICAgICAgICAgIG5vdCBzdGQ6Omlz
X3NhbWU8Q29tcGF0aWJsZUFycmF5VHlwZSwgdHlwZW5hbWUgYmFzaWNfanNvbl90Ojpjb25zdF9p
dGVyYXRvcj46OnZhbHVlIGFuZAorICAgICAgICAgICAgICAgICBub3Qgc3RkOjppc19zYW1lPENv
bXBhdGlibGVBcnJheVR5cGUsIHR5cGVuYW1lIGJhc2ljX2pzb25fdDo6cmV2ZXJzZV9pdGVyYXRv
cj46OnZhbHVlIGFuZAorICAgICAgICAgICAgICAgICBub3Qgc3RkOjppc19zYW1lPENvbXBhdGli
bGVBcnJheVR5cGUsIHR5cGVuYW1lIGJhc2ljX2pzb25fdDo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRv
cj46OnZhbHVlIGFuZAorICAgICAgICAgICAgICAgICBub3Qgc3RkOjppc19zYW1lPENvbXBhdGli
bGVBcnJheVR5cGUsIHR5cGVuYW1lIGFycmF5X3Q6Oml0ZXJhdG9yPjo6dmFsdWUgYW5kCisgICAg
ICAgICAgICAgICAgIG5vdCBzdGQ6OmlzX3NhbWU8Q29tcGF0aWJsZUFycmF5VHlwZSwgdHlwZW5h
bWUgYXJyYXlfdDo6Y29uc3RfaXRlcmF0b3I+Ojp2YWx1ZSBhbmQKKyAgICAgICAgICAgICAgICAg
c3RkOjppc19jb25zdHJ1Y3RpYmxlPGJhc2ljX2pzb24sIHR5cGVuYW1lIENvbXBhdGlibGVBcnJh
eVR5cGU6OnZhbHVlX3R5cGU+Ojp2YWx1ZSwgaW50Pjo6dHlwZSA9IDA+CisgICAgYmFzaWNfanNv
bihjb25zdCBDb21wYXRpYmxlQXJyYXlUeXBlJiB2YWwpCisgICAgICAgIDogbV90eXBlKHZhbHVl
X3Q6OmFycmF5KQorICAgIHsKKyAgICAgICAgdXNpbmcgc3RkOjpiZWdpbjsKKyAgICAgICAgdXNp
bmcgc3RkOjplbmQ7CisgICAgICAgIG1fdmFsdWUuYXJyYXkgPSBjcmVhdGU8YXJyYXlfdD4oYmVn
aW4odmFsKSwgZW5kKHZhbCkpOworICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7CisgICAgfQor
CisgICAgLyohCisgICAgQGJyaWVmIGNyZWF0ZSBhIHN0cmluZyAoZXhwbGljaXQpCisKKyAgICBD
cmVhdGUgYW4gc3RyaW5nIEpTT04gdmFsdWUgd2l0aCBhIGdpdmVuIGNvbnRlbnQuCisKKyAgICBA
cGFyYW1baW5dIHZhbCAgYSB2YWx1ZSBmb3IgdGhlIHN0cmluZworCisgICAgQGNvbXBsZXhpdHkg
TGluZWFyIGluIHRoZSBzaXplIG9mIHRoZSBwYXNzZWQgQGEgdmFsLgorCisgICAgQHRocm93IHN0
ZDo6YmFkX2FsbG9jIGlmIGFsbG9jYXRpb24gZm9yIHN0cmluZyB2YWx1ZSBmYWlscworCisgICAg
QGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29kZSBzaG93cyB0aGUgY29uc3RydWN0b3Igd2l0
aCBhbiBAcmVmCisgICAgc3RyaW5nX3QgcGFyYW1ldGVyLixiYXNpY19qc29uX19zdHJpbmdfdH0K
KworICAgIEBzYSBAcmVmIGJhc2ljX2pzb24oY29uc3QgdHlwZW5hbWUgc3RyaW5nX3Q6OnZhbHVl
X3R5cGUqKSAtLSBjcmVhdGUgYQorICAgIHN0cmluZyB2YWx1ZSBmcm9tIGEgY2hhcmFjdGVyIHBv
aW50ZXIKKyAgICBAc2EgQHJlZiBiYXNpY19qc29uKGNvbnN0IENvbXBhdGlibGVTdHJpbmdUeXBl
JikgLS0gY3JlYXRlIGEgc3RyaW5nIHZhbHVlCisgICAgZnJvbSBhIGNvbXBhdGlibGUgc3RyaW5n
IGNvbnRhaW5lcgorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGJhc2lj
X2pzb24oY29uc3Qgc3RyaW5nX3QmIHZhbCkKKyAgICAgICAgOiBtX3R5cGUodmFsdWVfdDo6c3Ry
aW5nKSwgbV92YWx1ZSh2YWwpCisgICAgeworICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7Cisg
ICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGNyZWF0ZSBhIHN0cmluZyAoZXhwbGljaXQpCisK
KyAgICBDcmVhdGUgYSBzdHJpbmcgSlNPTiB2YWx1ZSB3aXRoIGEgZ2l2ZW4gY29udGVudC4KKwor
ICAgIEBwYXJhbVtpbl0gdmFsICBhIGxpdGVyYWwgdmFsdWUgZm9yIHRoZSBzdHJpbmcKKworICAg
IEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgc2l6ZSBvZiB0aGUgcGFzc2VkIEBhIHZhbC4KKwor
ICAgIEB0aHJvdyBzdGQ6OmJhZF9hbGxvYyBpZiBhbGxvY2F0aW9uIGZvciBzdHJpbmcgdmFsdWUg
ZmFpbHMKKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgdGhlIGNv
bnN0cnVjdG9yIHdpdGggc3RyaW5nIGxpdGVyYWwKKyAgICBwYXJhbWV0ZXIuLGJhc2ljX2pzb25f
X3N0cmluZ190X3ZhbHVlX3R5cGV9CisKKyAgICBAc2EgQHJlZiBiYXNpY19qc29uKGNvbnN0IHN0
cmluZ190JikgLS0gY3JlYXRlIGEgc3RyaW5nIHZhbHVlCisgICAgQHNhIEByZWYgYmFzaWNfanNv
bihjb25zdCBDb21wYXRpYmxlU3RyaW5nVHlwZSYpIC0tIGNyZWF0ZSBhIHN0cmluZyB2YWx1ZQor
ICAgIGZyb20gYSBjb21wYXRpYmxlIHN0cmluZyBjb250YWluZXIKKworICAgIEBzaW5jZSB2ZXJz
aW9uIDEuMC4wCisgICAgKi8KKyAgICBiYXNpY19qc29uKGNvbnN0IHR5cGVuYW1lIHN0cmluZ190
Ojp2YWx1ZV90eXBlKiB2YWwpCisgICAgICAgIDogYmFzaWNfanNvbihzdHJpbmdfdCh2YWwpKQor
ICAgIHsKKyAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOworICAgIH0KKworICAgIGJhc2ljX2pz
b24oY29uc3QgdHlwZW5hbWUgc3RyaW5nX3Q6OnZhbHVlX3R5cGUqIHZhbCwgdHlwZW5hbWUgc3Ry
aW5nX3Q6OnNpemVfdHlwZSBjb3VudCkKKyAgICAgICAgOiBiYXNpY19qc29uKHN0cmluZ190KHZh
bCwgY291bnQpKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOworICAgIH0KKwor
ICAgIC8qIQorICAgIEBicmllZiBjcmVhdGUgYSBzdHJpbmcgKGltcGxpY2l0KQorCisgICAgQ3Jl
YXRlIGEgc3RyaW5nIEpTT04gdmFsdWUgd2l0aCBhIGdpdmVuIGNvbnRlbnQuCisKKyAgICBAcGFy
YW1baW5dIHZhbCAgYSB2YWx1ZSBmb3IgdGhlIHN0cmluZworCisgICAgQHRwYXJhbSBDb21wYXRp
YmxlU3RyaW5nVHlwZSBhbiBzdHJpbmcgdHlwZSB3aGljaCBpcyBjb21wYXRpYmxlIHRvIEByZWYK
KyAgICBzdHJpbmdfdCwgZm9yIGluc3RhbmNlIGBzdGQ6OnN0cmluZ2AuCisKKyAgICBAY29tcGxl
eGl0eSBMaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlIHBhc3NlZCBAYSB2YWwuCisKKyAgICBAdGhy
b3cgc3RkOjpiYWRfYWxsb2MgaWYgYWxsb2NhdGlvbiBmb3Igc3RyaW5nIHZhbHVlIGZhaWxzCisK
KyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIHNob3dzIHRoZSBjb25zdHJ1Y3Rp
b24gb2YgYSBzdHJpbmcgdmFsdWUKKyAgICBmcm9tIGEgY29tcGF0aWJsZSB0eXBlLixiYXNpY19q
c29uX19Db21wYXRpYmxlU3RyaW5nVHlwZX0KKworICAgIEBzYSBAcmVmIGJhc2ljX2pzb24oY29u
c3Qgc3RyaW5nX3QmKSAtLSBjcmVhdGUgYSBzdHJpbmcgdmFsdWUKKyAgICBAc2EgQHJlZiBiYXNp
Y19qc29uKGNvbnN0IHR5cGVuYW1lIHN0cmluZ190Ojp2YWx1ZV90eXBlKikgLS0gY3JlYXRlIGEK
KyAgICBzdHJpbmcgdmFsdWUgZnJvbSBhIGNoYXJhY3RlciBwb2ludGVyCisKKyAgICBAc2luY2Ug
dmVyc2lvbiAxLjAuMAorICAgICovCisgICAgdGVtcGxhdGU8Y2xhc3MgQ29tcGF0aWJsZVN0cmlu
Z1R5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAorICAgICAgICAgICAgICAgICBzdGQ6Omlz
X2NvbnN0cnVjdGlibGU8c3RyaW5nX3QsIENvbXBhdGlibGVTdHJpbmdUeXBlPjo6dmFsdWUsIGlu
dD46OnR5cGUgPSAwPgorICAgIGJhc2ljX2pzb24oY29uc3QgQ29tcGF0aWJsZVN0cmluZ1R5cGUm
IHZhbCkKKyAgICAgICAgOiBiYXNpY19qc29uKHN0cmluZ190KHZhbCkpCisgICAgeworICAgICAg
ICBhc3NlcnRfaW52YXJpYW50KCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGNyZWF0
ZSBhIGJvb2xlYW4gKGV4cGxpY2l0KQorCisgICAgQ3JlYXRlcyBhIEpTT04gYm9vbGVhbiB0eXBl
IGZyb20gYSBnaXZlbiB2YWx1ZS4KKworICAgIEBwYXJhbVtpbl0gdmFsICBhIGJvb2xlYW4gdmFs
dWUgdG8gc3RvcmUKKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQGxpdmVleGFt
cGxle1RoZSBleGFtcGxlIGJlbG93IGRlbW9uc3RyYXRlcyBib29sZWFuCisgICAgdmFsdWVzLixi
YXNpY19qc29uX19ib29sZWFuX3R9CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICov
CisgICAgYmFzaWNfanNvbihib29sZWFuX3QgdmFsKSBub2V4Y2VwdAorICAgICAgICA6IG1fdHlw
ZSh2YWx1ZV90Ojpib29sZWFuKSwgbV92YWx1ZSh2YWwpCisgICAgeworICAgICAgICBhc3NlcnRf
aW52YXJpYW50KCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGNyZWF0ZSBhbiBpbnRl
Z2VyIG51bWJlciAoZXhwbGljaXQpCisKKyAgICBDcmVhdGUgYW4gaW50ZWdlciBudW1iZXIgSlNP
TiB2YWx1ZSB3aXRoIGEgZ2l2ZW4gY29udGVudC4KKworICAgIEB0cGFyYW0gVCBBIGhlbHBlciB0
eXBlIHRvIHJlbW92ZSB0aGlzIGZ1bmN0aW9uIHZpYSBTRklOQUUgaW4gY2FzZSBAcmVmCisgICAg
bnVtYmVyX2ludGVnZXJfdCBpcyB0aGUgc2FtZSBhcyBgaW50YC4gSW4gdGhpcyBjYXNlLCB0aGlz
IGNvbnN0cnVjdG9yCisgICAgd291bGQgaGF2ZSB0aGUgc2FtZSBzaWduYXR1cmUgYXMgQHJlZiBi
YXNpY19qc29uKGNvbnN0IGludCB2YWx1ZSkuIE5vdGUKKyAgICB0aGUgaGVscGVyIHR5cGUgQGEg
VCBpcyBub3QgdmlzaWJsZSBpbiB0aGlzIGNvbnN0cnVjdG9yJ3MgaW50ZXJmYWNlLgorCisgICAg
QHBhcmFtW2luXSB2YWwgIGFuIGludGVnZXIgdG8gY3JlYXRlIGEgSlNPTiBudW1iZXIgZnJvbQor
CisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1w
bGUgYmVsb3cgc2hvd3MgdGhlIGNvbnN0cnVjdGlvbiBvZiBhbiBpbnRlZ2VyCisgICAgbnVtYmVy
IHZhbHVlLixiYXNpY19qc29uX19udW1iZXJfaW50ZWdlcl90fQorCisgICAgQHNhIEByZWYgYmFz
aWNfanNvbihjb25zdCBpbnQpIC0tIGNyZWF0ZSBhIG51bWJlciB2YWx1ZSAoaW50ZWdlcikKKyAg
ICBAc2EgQHJlZiBiYXNpY19qc29uKGNvbnN0IENvbXBhdGlibGVOdW1iZXJJbnRlZ2VyVHlwZSkg
LS0gY3JlYXRlIGEgbnVtYmVyCisgICAgdmFsdWUgKGludGVnZXIpIGZyb20gYSBjb21wYXRpYmxl
IG51bWJlciB0eXBlCisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8CisgICAgICAgICAgICAg
ICAgIG5vdCAoc3RkOjppc19zYW1lPFQsIGludD46OnZhbHVlKSBhbmQKKyAgICAgICAgICAgICAg
ICAgc3RkOjppc19zYW1lPFQsIG51bWJlcl9pbnRlZ2VyX3Q+Ojp2YWx1ZSwgaW50Pjo6dHlwZSA9
IDA+CisgICAgYmFzaWNfanNvbihjb25zdCBudW1iZXJfaW50ZWdlcl90IHZhbCkgbm9leGNlcHQK
KyAgICAgICAgOiBtX3R5cGUodmFsdWVfdDo6bnVtYmVyX2ludGVnZXIpLCBtX3ZhbHVlKHZhbCkK
KyAgICB7CisgICAgICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKKyAgICB9CisKKyAgICAvKiEKKyAg
ICBAYnJpZWYgY3JlYXRlIGFuIGludGVnZXIgbnVtYmVyIGZyb20gYW4gZW51bSB0eXBlIChleHBs
aWNpdCkKKworICAgIENyZWF0ZSBhbiBpbnRlZ2VyIG51bWJlciBKU09OIHZhbHVlIHdpdGggYSBn
aXZlbiBjb250ZW50LgorCisgICAgQHBhcmFtW2luXSB2YWwgIGFuIGludGVnZXIgdG8gY3JlYXRl
IGEgSlNPTiBudW1iZXIgZnJvbQorCisgICAgQG5vdGUgVGhpcyBjb25zdHJ1Y3RvciBhbGxvd3Mg
dG8gcGFzcyBlbnVtcyBkaXJlY3RseSB0byBhIGNvbnN0cnVjdG9yLiBBcworICAgIEMrKyBoYXMg
bm8gd2F5IG9mIHNwZWNpZnlpbmcgdGhlIHR5cGUgb2YgYW4gYW5vbnltb3VzIGVudW0gZXhwbGlj
aXRseSwgd2UKKyAgICBjYW4gb25seSByZWx5IG9uIHRoZSBmYWN0IHRoYXQgc3VjaCB2YWx1ZXMg
aW1wbGljaXRseSBjb252ZXJ0IHRvIGludC4gQXMKKyAgICBpbnQgbWF5IGFscmVhZHkgYmUgdGhl
IHNhbWUgdHlwZSBvZiBudW1iZXJfaW50ZWdlcl90LCB3ZSBtYXkgbmVlZCB0bworICAgIHN3aXRj
aCBvZmYgdGhlIGNvbnN0cnVjdG9yIEByZWYgYmFzaWNfanNvbihjb25zdCBudW1iZXJfaW50ZWdl
cl90KS4KKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQGxpdmVleGFtcGxle1Ro
ZSBleGFtcGxlIGJlbG93IHNob3dzIHRoZSBjb25zdHJ1Y3Rpb24gb2YgYW4gaW50ZWdlcgorICAg
IG51bWJlciB2YWx1ZSBmcm9tIGFuIGFub255bW91cyBlbnVtLixiYXNpY19qc29uX19jb25zdF9p
bnR9CisKKyAgICBAc2EgQHJlZiBiYXNpY19qc29uKGNvbnN0IG51bWJlcl9pbnRlZ2VyX3QpIC0t
IGNyZWF0ZSBhIG51bWJlciB2YWx1ZQorICAgIChpbnRlZ2VyKQorICAgIEBzYSBAcmVmIGJhc2lj
X2pzb24oY29uc3QgQ29tcGF0aWJsZU51bWJlckludGVnZXJUeXBlKSAtLSBjcmVhdGUgYSBudW1i
ZXIKKyAgICB2YWx1ZSAoaW50ZWdlcikgZnJvbSBhIGNvbXBhdGlibGUgbnVtYmVyIHR5cGUKKwor
ICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBiYXNpY19qc29uKGNvbnN0IGlu
dCB2YWwpIG5vZXhjZXB0CisgICAgICAgIDogbV90eXBlKHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2Vy
KSwKKyAgICAgICAgICBtX3ZhbHVlKHN0YXRpY19jYXN0PG51bWJlcl9pbnRlZ2VyX3Q+KHZhbCkp
CisgICAgeworICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7CisgICAgfQorCisgICAgLyohCisg
ICAgQGJyaWVmIGNyZWF0ZSBhbiBpbnRlZ2VyIG51bWJlciAoaW1wbGljaXQpCisKKyAgICBDcmVh
dGUgYW4gaW50ZWdlciBudW1iZXIgSlNPTiB2YWx1ZSB3aXRoIGEgZ2l2ZW4gY29udGVudC4gVGhp
cyBjb25zdHJ1Y3RvcgorICAgIGFsbG93cyBhbnkgdHlwZSBAYSBDb21wYXRpYmxlTnVtYmVySW50
ZWdlclR5cGUgdGhhdCBjYW4gYmUgdXNlZCB0bworICAgIGNvbnN0cnVjdCB2YWx1ZXMgb2YgdHlw
ZSBAcmVmIG51bWJlcl9pbnRlZ2VyX3QuCisKKyAgICBAdHBhcmFtIENvbXBhdGlibGVOdW1iZXJJ
bnRlZ2VyVHlwZSBBbiBpbnRlZ2VyIHR5cGUgd2hpY2ggaXMgY29tcGF0aWJsZSB0bworICAgIEBy
ZWYgbnVtYmVyX2ludGVnZXJfdC4gRXhhbXBsZXMgaW5jbHVkZSB0aGUgdHlwZXMgYGludGAsIGBp
bnQzMl90YCwKKyAgICBgbG9uZ2AsIGFuZCBgc2hvcnRgLgorCisgICAgQHBhcmFtW2luXSB2YWwg
IGFuIGludGVnZXIgdG8gY3JlYXRlIGEgSlNPTiBudW1iZXIgZnJvbQorCisgICAgQGNvbXBsZXhp
dHkgQ29uc3RhbnQuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3Mg
dGhlIGNvbnN0cnVjdGlvbiBvZiBzZXZlcmFsIGludGVnZXIKKyAgICBudW1iZXIgdmFsdWVzIGZy
b20gY29tcGF0aWJsZQorICAgIHR5cGVzLixiYXNpY19qc29uX19Db21wYXRpYmxlSW50ZWdlck51
bWJlclR5cGV9CisKKyAgICBAc2EgQHJlZiBiYXNpY19qc29uKGNvbnN0IG51bWJlcl9pbnRlZ2Vy
X3QpIC0tIGNyZWF0ZSBhIG51bWJlciB2YWx1ZQorICAgIChpbnRlZ2VyKQorICAgIEBzYSBAcmVm
IGJhc2ljX2pzb24oY29uc3QgaW50KSAtLSBjcmVhdGUgYSBudW1iZXIgdmFsdWUgKGludGVnZXIp
CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29tcGF0aWJsZU51bWJlckludGVnZXJUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwK
KyAgICAgICAgICAgICAgICAgc3RkOjppc19jb25zdHJ1Y3RpYmxlPG51bWJlcl9pbnRlZ2VyX3Qs
IENvbXBhdGlibGVOdW1iZXJJbnRlZ2VyVHlwZT46OnZhbHVlIGFuZAorICAgICAgICAgICAgICAg
ICBzdGQ6Om51bWVyaWNfbGltaXRzPENvbXBhdGlibGVOdW1iZXJJbnRlZ2VyVHlwZT46OmlzX2lu
dGVnZXIgYW5kCisgICAgICAgICAgICAgICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8Q29tcGF0aWJs
ZU51bWJlckludGVnZXJUeXBlPjo6aXNfc2lnbmVkLAorICAgICAgICAgICAgICAgICBDb21wYXRp
YmxlTnVtYmVySW50ZWdlclR5cGU+Ojp0eXBlID0gMD4KKyAgICBiYXNpY19qc29uKGNvbnN0IENv
bXBhdGlibGVOdW1iZXJJbnRlZ2VyVHlwZSB2YWwpIG5vZXhjZXB0CisgICAgICAgIDogbV90eXBl
KHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyKSwKKyAgICAgICAgICBtX3ZhbHVlKHN0YXRpY19jYXN0
PG51bWJlcl9pbnRlZ2VyX3Q+KHZhbCkpCisgICAgeworICAgICAgICBhc3NlcnRfaW52YXJpYW50
KCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGNyZWF0ZSBhbiB1bnNpZ25lZCBpbnRl
Z2VyIG51bWJlciAoZXhwbGljaXQpCisKKyAgICBDcmVhdGUgYW4gdW5zaWduZWQgaW50ZWdlciBu
dW1iZXIgSlNPTiB2YWx1ZSB3aXRoIGEgZ2l2ZW4gY29udGVudC4KKworICAgIEB0cGFyYW0gVCAg
aGVscGVyIHR5cGUgdG8gY29tcGFyZSBudW1iZXJfdW5zaWduZWRfdCBhbmQgdW5zaWduZWQgaW50
IChub3QKKyAgICB2aXNpYmxlIGluKSB0aGUgaW50ZXJmYWNlLgorCisgICAgQHBhcmFtW2luXSB2
YWwgIGFuIGludGVnZXIgdG8gY3JlYXRlIGEgSlNPTiBudW1iZXIgZnJvbQorCisgICAgQGNvbXBs
ZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAc2EgQHJlZiBiYXNpY19qc29uKGNvbnN0IENvbXBhdGli
bGVOdW1iZXJVbnNpZ25lZFR5cGUpIC0tIGNyZWF0ZSBhIG51bWJlcgorICAgIHZhbHVlICh1bnNp
Z25lZCBpbnRlZ2VyKSBmcm9tIGEgY29tcGF0aWJsZSBudW1iZXIgdHlwZQorCisgICAgQHNpbmNl
IHZlcnNpb24gMi4wLjAKKyAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPAorICAgICAgICAgICAgICAgICBub3QgKHN0ZDo6aXNfc2FtZTxULCBp
bnQ+Ojp2YWx1ZSkgYW5kCisgICAgICAgICAgICAgICAgIHN0ZDo6aXNfc2FtZTxULCBudW1iZXJf
dW5zaWduZWRfdD46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4KKyAgICBiYXNpY19qc29uKGNvbnN0
IG51bWJlcl91bnNpZ25lZF90IHZhbCkgbm9leGNlcHQKKyAgICAgICAgOiBtX3R5cGUodmFsdWVf
dDo6bnVtYmVyX3Vuc2lnbmVkKSwgbV92YWx1ZSh2YWwpCisgICAgeworICAgICAgICBhc3NlcnRf
aW52YXJpYW50KCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGNyZWF0ZSBhbiB1bnNp
Z25lZCBudW1iZXIgKGltcGxpY2l0KQorCisgICAgQ3JlYXRlIGFuIHVuc2lnbmVkIG51bWJlciBK
U09OIHZhbHVlIHdpdGggYSBnaXZlbiBjb250ZW50LiBUaGlzCisgICAgY29uc3RydWN0b3IgYWxs
b3dzIGFueSB0eXBlIEBhIENvbXBhdGlibGVOdW1iZXJVbnNpZ25lZFR5cGUgdGhhdCBjYW4gYmUK
KyAgICB1c2VkIHRvIGNvbnN0cnVjdCB2YWx1ZXMgb2YgdHlwZSBAcmVmIG51bWJlcl91bnNpZ25l
ZF90LgorCisgICAgQHRwYXJhbSBDb21wYXRpYmxlTnVtYmVyVW5zaWduZWRUeXBlIEFuIGludGVn
ZXIgdHlwZSB3aGljaCBpcyBjb21wYXRpYmxlCisgICAgdG8gQHJlZiBudW1iZXJfdW5zaWduZWRf
dC4gRXhhbXBsZXMgbWF5IGluY2x1ZGUgdGhlIHR5cGVzIGB1bnNpZ25lZCBpbnRgLAorICAgIGB1
aW50MzJfdGAsIG9yIGB1bnNpZ25lZCBzaG9ydGAuCisKKyAgICBAcGFyYW1baW5dIHZhbCAgYW4g
dW5zaWduZWQgaW50ZWdlciB0byBjcmVhdGUgYSBKU09OIG51bWJlciBmcm9tCisKKyAgICBAY29t
cGxleGl0eSBDb25zdGFudC4KKworICAgIEBzYSBAcmVmIGJhc2ljX2pzb24oY29uc3QgbnVtYmVy
X3Vuc2lnbmVkX3QpIC0tIGNyZWF0ZSBhIG51bWJlciB2YWx1ZQorICAgICh1bnNpZ25lZCkKKwor
ICAgIEBzaW5jZSB2ZXJzaW9uIDIuMC4wCisgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
b21wYXRpYmxlTnVtYmVyVW5zaWduZWRUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZiA8Cisg
ICAgICAgICAgICAgICAgIHN0ZDo6aXNfY29uc3RydWN0aWJsZTxudW1iZXJfdW5zaWduZWRfdCwg
Q29tcGF0aWJsZU51bWJlclVuc2lnbmVkVHlwZT46OnZhbHVlIGFuZAorICAgICAgICAgICAgICAg
ICBzdGQ6Om51bWVyaWNfbGltaXRzPENvbXBhdGlibGVOdW1iZXJVbnNpZ25lZFR5cGU+Ojppc19p
bnRlZ2VyIGFuZAorICAgICAgICAgICAgICAgICBub3Qgc3RkOjpudW1lcmljX2xpbWl0czxDb21w
YXRpYmxlTnVtYmVyVW5zaWduZWRUeXBlPjo6aXNfc2lnbmVkLAorICAgICAgICAgICAgICAgICBD
b21wYXRpYmxlTnVtYmVyVW5zaWduZWRUeXBlPjo6dHlwZSA9IDA+CisgICAgYmFzaWNfanNvbihj
b25zdCBDb21wYXRpYmxlTnVtYmVyVW5zaWduZWRUeXBlIHZhbCkgbm9leGNlcHQKKyAgICAgICAg
OiBtX3R5cGUodmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkKSwKKyAgICAgICAgICBtX3ZhbHVlKHN0
YXRpY19jYXN0PG51bWJlcl91bnNpZ25lZF90Pih2YWwpKQorICAgIHsKKyAgICAgICAgYXNzZXJ0
X2ludmFyaWFudCgpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBjcmVhdGUgYSBmbG9h
dGluZy1wb2ludCBudW1iZXIgKGV4cGxpY2l0KQorCisgICAgQ3JlYXRlIGEgZmxvYXRpbmctcG9p
bnQgbnVtYmVyIEpTT04gdmFsdWUgd2l0aCBhIGdpdmVuIGNvbnRlbnQuCisKKyAgICBAcGFyYW1b
aW5dIHZhbCAgYSBmbG9hdGluZy1wb2ludCB2YWx1ZSB0byBjcmVhdGUgYSBKU09OIG51bWJlciBm
cm9tCisKKyAgICBAbm90ZSBbUkZDIDcxNTldKGh0dHA6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZj
L3JmYzcxNTkudHh0KSwgc2VjdGlvbiA2CisgICAgZGlzYWxsb3dzIE5hTiB2YWx1ZXM6CisgICAg
PiBOdW1lcmljIHZhbHVlcyB0aGF0IGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiB0aGUgZ3JhbW1h
ciBiZWxvdyAoc3VjaCBhcworICAgID4gSW5maW5pdHkgYW5kIE5hTikgYXJlIG5vdCBwZXJtaXR0
ZWQuCisgICAgSW4gY2FzZSB0aGUgcGFyYW1ldGVyIEBhIHZhbCBpcyBub3QgYSBudW1iZXIsIGEg
SlNPTiBudWxsIHZhbHVlIGlzIGNyZWF0ZWQKKyAgICBpbnN0ZWFkLgorCisgICAgQGNvbXBsZXhp
dHkgQ29uc3RhbnQuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBleGFtcGxlIGNy
ZWF0ZXMgc2V2ZXJhbCBmbG9hdGluZy1wb2ludAorICAgIHZhbHVlcy4sYmFzaWNfanNvbl9fbnVt
YmVyX2Zsb2F0X3R9CisKKyAgICBAc2EgQHJlZiBiYXNpY19qc29uKGNvbnN0IENvbXBhdGlibGVO
dW1iZXJGbG9hdFR5cGUpIC0tIGNyZWF0ZSBhIG51bWJlcgorICAgIHZhbHVlIChmbG9hdGluZy1w
b2ludCkgZnJvbSBhIGNvbXBhdGlibGUgbnVtYmVyIHR5cGUKKworICAgIEBzaW5jZSB2ZXJzaW9u
IDEuMC4wCisgICAgKi8KKyAgICBiYXNpY19qc29uKGNvbnN0IG51bWJlcl9mbG9hdF90IHZhbCkg
bm9leGNlcHQKKyAgICAgICAgOiBtX3R5cGUodmFsdWVfdDo6bnVtYmVyX2Zsb2F0KSwgbV92YWx1
ZSh2YWwpCisgICAgeworICAgICAgICAvLyByZXBsYWNlIGluZmluaXR5IGFuZCBOQU4gYnkgbnVs
bAorICAgICAgICBpZiAobm90IHN0ZDo6aXNmaW5pdGUodmFsKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbV90eXBlID0gdmFsdWVfdDo6bnVsbDsKKyAgICAgICAgICAgIG1fdmFsdWUgPSBqc29u
X3ZhbHVlKCk7CisgICAgICAgIH0KKworICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7CisgICAg
fQorCisgICAgLyohCisgICAgQGJyaWVmIGNyZWF0ZSBhbiBmbG9hdGluZy1wb2ludCBudW1iZXIg
KGltcGxpY2l0KQorCisgICAgQ3JlYXRlIGFuIGZsb2F0aW5nLXBvaW50IG51bWJlciBKU09OIHZh
bHVlIHdpdGggYSBnaXZlbiBjb250ZW50LiBUaGlzCisgICAgY29uc3RydWN0b3IgYWxsb3dzIGFu
eSB0eXBlIEBhIENvbXBhdGlibGVOdW1iZXJGbG9hdFR5cGUgdGhhdCBjYW4gYmUgdXNlZAorICAg
IHRvIGNvbnN0cnVjdCB2YWx1ZXMgb2YgdHlwZSBAcmVmIG51bWJlcl9mbG9hdF90LgorCisgICAg
QHRwYXJhbSBDb21wYXRpYmxlTnVtYmVyRmxvYXRUeXBlIEEgZmxvYXRpbmctcG9pbnQgdHlwZSB3
aGljaCBpcworICAgIGNvbXBhdGlibGUgdG8gQHJlZiBudW1iZXJfZmxvYXRfdC4gRXhhbXBsZXMg
bWF5IGluY2x1ZGUgdGhlIHR5cGVzIGBmbG9hdGAKKyAgICBvciBgZG91YmxlYC4KKworICAgIEBw
YXJhbVtpbl0gdmFsICBhIGZsb2F0aW5nLXBvaW50IHRvIGNyZWF0ZSBhIEpTT04gbnVtYmVyIGZy
b20KKworICAgIEBub3RlIFtSRkMgNzE1OV0oaHR0cDovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMv
cmZjNzE1OS50eHQpLCBzZWN0aW9uIDYKKyAgICBkaXNhbGxvd3MgTmFOIHZhbHVlczoKKyAgICA+
IE51bWVyaWMgdmFsdWVzIHRoYXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIHRoZSBncmFtbWFy
IGJlbG93IChzdWNoIGFzCisgICAgPiBJbmZpbml0eSBhbmQgTmFOKSBhcmUgbm90IHBlcm1pdHRl
ZC4KKyAgICBJbiBjYXNlIHRoZSBwYXJhbWV0ZXIgQGEgdmFsIGlzIG5vdCBhIG51bWJlciwgYSBK
U09OIG51bGwgdmFsdWUgaXMKKyAgICBjcmVhdGVkIGluc3RlYWQuCisKKyAgICBAY29tcGxleGl0
eSBDb25zdGFudC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyB0
aGUgY29uc3RydWN0aW9uIG9mIHNldmVyYWwKKyAgICBmbG9hdGluZy1wb2ludCBudW1iZXIgdmFs
dWVzIGZyb20gY29tcGF0aWJsZQorICAgIHR5cGVzLixiYXNpY19qc29uX19Db21wYXRpYmxlTnVt
YmVyRmxvYXRUeXBlfQorCisgICAgQHNhIEByZWYgYmFzaWNfanNvbihjb25zdCBudW1iZXJfZmxv
YXRfdCkgLS0gY3JlYXRlIGEgbnVtYmVyIHZhbHVlCisgICAgKGZsb2F0aW5nLXBvaW50KQorCisg
ICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENv
bXBhdGlibGVOdW1iZXJGbG9hdFR5cGUsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8CisgICAgICAgICAgICAgICAgIHN0ZDo6aXNfY29uc3RydWN0aWJsZTxudW1iZXJfZmxvYXRf
dCwgQ29tcGF0aWJsZU51bWJlckZsb2F0VHlwZT46OnZhbHVlIGFuZAorICAgICAgICAgICAgICAg
ICBzdGQ6OmlzX2Zsb2F0aW5nX3BvaW50PENvbXBhdGlibGVOdW1iZXJGbG9hdFR5cGU+Ojp2YWx1
ZT46OnR5cGU+CisgICAgYmFzaWNfanNvbihjb25zdCBDb21wYXRpYmxlTnVtYmVyRmxvYXRUeXBl
IHZhbCkgbm9leGNlcHQKKyAgICAgICAgOiBiYXNpY19qc29uKG51bWJlcl9mbG9hdF90KHZhbCkp
CisgICAgeworICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7CisgICAgfQorCisgICAgLyohCisg
ICAgQGJyaWVmIGNyZWF0ZSBhIGNvbnRhaW5lciAoYXJyYXkgb3Igb2JqZWN0KSBmcm9tIGFuIGlu
aXRpYWxpemVyIGxpc3QKKworICAgIENyZWF0ZXMgYSBKU09OIHZhbHVlIG9mIHR5cGUgYXJyYXkg
b3Igb2JqZWN0IGZyb20gdGhlIHBhc3NlZCBpbml0aWFsaXplcgorICAgIGxpc3QgQGEgaW5pdC4g
SW4gY2FzZSBAYSB0eXBlX2RlZHVjdGlvbiBpcyBgdHJ1ZWAgKGRlZmF1bHQpLCB0aGUgdHlwZSBv
ZgorICAgIHRoZSBKU09OIHZhbHVlIHRvIGJlIGNyZWF0ZWQgaXMgZGVkdWN0ZWQgZnJvbSB0aGUg
aW5pdGlhbGl6ZXIgbGlzdCBAYSBpbml0CisgICAgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcg
cnVsZXM6CisKKyAgICAxLiBJZiB0aGUgbGlzdCBpcyBlbXB0eSwgYW4gZW1wdHkgSlNPTiBvYmpl
Y3QgdmFsdWUgYHt9YCBpcyBjcmVhdGVkLgorICAgIDIuIElmIHRoZSBsaXN0IGNvbnNpc3RzIG9m
IHBhaXJzIHdob3NlIGZpcnN0IGVsZW1lbnQgaXMgYSBzdHJpbmcsIGEgSlNPTgorICAgICAgIG9i
amVjdCB2YWx1ZSBpcyBjcmVhdGVkIHdoZXJlIHRoZSBmaXJzdCBlbGVtZW50cyBvZiB0aGUgcGFp
cnMgYXJlCisgICAgICAgdHJlYXRlZCBhcyBrZXlzIGFuZCB0aGUgc2Vjb25kIGVsZW1lbnRzIGFy
ZSBhcyB2YWx1ZXMuCisgICAgMy4gSW4gYWxsIG90aGVyIGNhc2VzLCBhbiBhcnJheSBpcyBjcmVh
dGVkLgorCisgICAgVGhlIHJ1bGVzIGFpbSB0byBjcmVhdGUgdGhlIGJlc3QgZml0IGJldHdlZW4g
YSBDKysgaW5pdGlhbGl6ZXIgbGlzdCBhbmQKKyAgICBKU09OIHZhbHVlcy4gVGhlIHJhdGlvbmFs
ZSBpcyBhcyBmb2xsb3dzOgorCisgICAgMS4gVGhlIGVtcHR5IGluaXRpYWxpemVyIGxpc3QgaXMg
d3JpdHRlbiBhcyBge31gIHdoaWNoIGlzIGV4YWN0bHkgYW4gZW1wdHkKKyAgICAgICBKU09OIG9i
amVjdC4KKyAgICAyLiBDKysgaGFzIG5vdyB3YXkgb2YgZGVzY3JpYmluZyBtYXBwZWQgdHlwZXMg
b3RoZXIgdGhhbiB0byBsaXN0IGEgbGlzdCBvZgorICAgICAgIHBhaXJzLiBBcyBKU09OIHJlcXVp
cmVzIHRoYXQga2V5cyBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLCBydWxlIDIgaXMgdGhlCisgICAg
ICAgd2Vha2VzdCBjb25zdHJhaW50IG9uZSBjYW4gcG9zZSBvbiBpbml0aWFsaXplciBsaXN0cyB0
byBpbnRlcnByZXQgdGhlbQorICAgICAgIGFzIGFuIG9iamVjdC4KKyAgICAzLiBJbiBhbGwgb3Ro
ZXIgY2FzZXMsIHRoZSBpbml0aWFsaXplciBsaXN0IGNvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBh
cworICAgICAgIEpTT04gb2JqZWN0IHR5cGUsIHNvIGludGVycHJldGluZyBpdCBhcyBKU09OIGFy
cmF5IHR5cGUgaXMgc2FmZS4KKworICAgIFdpdGggdGhlIHJ1bGVzIGRlc2NyaWJlZCBhYm92ZSwg
dGhlIGZvbGxvd2luZyBKU09OIHZhbHVlcyBjYW5ub3QgYmUKKyAgICBleHByZXNzZWQgYnkgYW4g
aW5pdGlhbGl6ZXIgbGlzdDoKKworICAgIC0gdGhlIGVtcHR5IGFycmF5IChgW11gKTogdXNlIEBy
ZWYgYXJyYXkoc3RkOjppbml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+KQorICAgICAgd2l0aCBh
biBlbXB0eSBpbml0aWFsaXplciBsaXN0IGluIHRoaXMgY2FzZQorICAgIC0gYXJyYXlzIHdob3Nl
IGVsZW1lbnRzIHNhdGlzZnkgcnVsZSAyOiB1c2UgQHJlZgorICAgICAgYXJyYXkoc3RkOjppbml0
aWFsaXplcl9saXN0PGJhc2ljX2pzb24+KSB3aXRoIHRoZSBzYW1lIGluaXRpYWxpemVyIGxpc3QK
KyAgICAgIGluIHRoaXMgY2FzZQorCisgICAgQG5vdGUgV2hlbiB1c2VkIHdpdGhvdXQgcGFyZW50
aGVzZXMgYXJvdW5kIGFuIGVtcHR5IGluaXRpYWxpemVyIGxpc3QsIEByZWYKKyAgICBiYXNpY19q
c29uKCkgaXMgY2FsbGVkIGluc3RlYWQgb2YgdGhpcyBmdW5jdGlvbiwgeWllbGRpbmcgdGhlIEpT
T04gbnVsbAorICAgIHZhbHVlLgorCisgICAgQHBhcmFtW2luXSBpbml0ICBpbml0aWFsaXplciBs
aXN0IHdpdGggSlNPTiB2YWx1ZXMKKworICAgIEBwYXJhbVtpbl0gdHlwZV9kZWR1Y3Rpb24gaW50
ZXJuYWwgcGFyYW1ldGVyOyB3aGVuIHNldCB0byBgdHJ1ZWAsIHRoZSB0eXBlCisgICAgb2YgdGhl
IEpTT04gdmFsdWUgaXMgZGVkdWN0ZWQgZnJvbSB0aGUgaW5pdGlhbGl6ZXIgbGlzdCBAYSBpbml0
OyB3aGVuIHNldAorICAgIHRvIGBmYWxzZWAsIHRoZSB0eXBlIHByb3ZpZGVkIHZpYSBAYSBtYW51
YWxfdHlwZSBpcyBmb3JjZWQuIFRoaXMgbW9kZSBpcworICAgIHVzZWQgYnkgdGhlIGZ1bmN0aW9u
cyBAcmVmIGFycmF5KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxiYXNpY19qc29uPikgYW5kCisgICAg
QHJlZiBvYmplY3Qoc3RkOjppbml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+KS4KKworICAgIEBw
YXJhbVtpbl0gbWFudWFsX3R5cGUgaW50ZXJuYWwgcGFyYW1ldGVyOyB3aGVuIEBhIHR5cGVfZGVk
dWN0aW9uIGlzIHNldAorICAgIHRvIGBmYWxzZWAsIHRoZSBjcmVhdGVkIEpTT04gdmFsdWUgd2ls
bCB1c2UgdGhlIHByb3ZpZGVkIHR5cGUgKG9ubHkgQHJlZgorICAgIHZhbHVlX3Q6OmFycmF5IGFu
ZCBAcmVmIHZhbHVlX3Q6Om9iamVjdCBhcmUgdmFsaWQpOyB3aGVuIEBhIHR5cGVfZGVkdWN0aW9u
CisgICAgaXMgc2V0IHRvIGB0cnVlYCwgdGhpcyBwYXJhbWV0ZXIgaGFzIG5vIGVmZmVjdAorCisg
ICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIEBhIHR5cGVfZGVkdWN0aW9uIGlzIGBmYWxz
ZWAsIEBhIG1hbnVhbF90eXBlCisgICAgaXMgYHZhbHVlX3Q6Om9iamVjdGAsIGJ1dCBAYSBpbml0
IGNvbnRhaW5zIGFuIGVsZW1lbnQgd2hpY2ggaXMgbm90IGEgcGFpcgorICAgIHdob3NlIGZpcnN0
IGVsZW1lbnQgaXMgYSBzdHJpbmc7IGV4YW1wbGU6IGAiY2Fubm90IGNyZWF0ZSBvYmplY3QgZnJv
bQorICAgIGluaXRpYWxpemVyIGxpc3QiYAorCisgICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIHRo
ZSBzaXplIG9mIHRoZSBpbml0aWFsaXplciBsaXN0IEBhIGluaXQuCisKKyAgICBAbGl2ZWV4YW1w
bGV7VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93IEpTT04gdmFsdWVzIGFyZSBjcmVhdGVkIGZy
b20KKyAgICBpbml0aWFsaXplciBsaXN0cy4sYmFzaWNfanNvbl9fbGlzdF9pbml0X3R9CisKKyAg
ICBAc2EgQHJlZiBhcnJheShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8YmFzaWNfanNvbj4pIC0tIGNy
ZWF0ZSBhIEpTT04gYXJyYXkKKyAgICB2YWx1ZSBmcm9tIGFuIGluaXRpYWxpemVyIGxpc3QKKyAg
ICBAc2EgQHJlZiBvYmplY3Qoc3RkOjppbml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+KSAtLSBj
cmVhdGUgYSBKU09OIG9iamVjdAorICAgIHZhbHVlIGZyb20gYW4gaW5pdGlhbGl6ZXIgbGlzdAor
CisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGJhc2ljX2pzb24oc3RkOjpp
bml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+IGluaXQsCisgICAgICAgICAgICAgICBib29sIHR5
cGVfZGVkdWN0aW9uID0gdHJ1ZSwKKyAgICAgICAgICAgICAgIHZhbHVlX3QgbWFudWFsX3R5cGUg
PSB2YWx1ZV90OjphcnJheSkKKyAgICB7CisgICAgICAgIC8vIGNoZWNrIGlmIGVhY2ggZWxlbWVu
dCBpcyBhbiBhcnJheSB3aXRoIHR3byBlbGVtZW50cyB3aG9zZSBmaXJzdAorICAgICAgICAvLyBl
bGVtZW50IGlzIGEgc3RyaW5nCisgICAgICAgIGJvb2wgaXNfYW5fb2JqZWN0ID0gc3RkOjphbGxf
b2YoaW5pdC5iZWdpbigpLCBpbml0LmVuZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFtdKGNvbnN0IGJhc2ljX2pzb24gJiBlbGVtZW50KQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZWxlbWVudC5pc19hcnJheSgpIGFuZCBlbGVtZW50LnNpemUoKSA9
PSAyIGFuZCBlbGVtZW50WzBdLmlzX3N0cmluZygpOworICAgICAgICB9KTsKKworICAgICAgICAv
LyBhZGp1c3QgdHlwZSBpZiB0eXBlIGRlZHVjdGlvbiBpcyBub3Qgd2FudGVkCisgICAgICAgIGlm
IChub3QgdHlwZV9kZWR1Y3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGlmIGFycmF5
IGlzIHdhbnRlZCwgZG8gbm90IGNyZWF0ZSBhbiBvYmplY3QgdGhvdWdoIHBvc3NpYmxlCisgICAg
ICAgICAgICBpZiAobWFudWFsX3R5cGUgPT0gdmFsdWVfdDo6YXJyYXkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaXNfYW5fb2JqZWN0ID0gZmFsc2U7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIGlmIG9iamVjdCBpcyB3YW50ZWQgYnV0IGltcG9zc2libGUsIHRocm93
IGFuIGV4Y2VwdGlvbgorICAgICAgICAgICAgaWYgKG1hbnVhbF90eXBlID09IHZhbHVlX3Q6Om9i
amVjdCBhbmQgbm90IGlzX2FuX29iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oImNhbm5vdCBjcmVhdGUgb2JqZWN0IGZyb20gaW5p
dGlhbGl6ZXIgbGlzdCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYg
KGlzX2FuX29iamVjdCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gdGhlIGluaXRpYWxpemVy
IGxpc3QgaXMgYSBsaXN0IG9mIHBhaXJzIC0+IGNyZWF0ZSBvYmplY3QKKyAgICAgICAgICAgIG1f
dHlwZSA9IHZhbHVlX3Q6Om9iamVjdDsKKyAgICAgICAgICAgIG1fdmFsdWUgPSB2YWx1ZV90Ojpv
YmplY3Q7CisKKyAgICAgICAgICAgIHN0ZDo6Zm9yX2VhY2goaW5pdC5iZWdpbigpLCBpbml0LmVu
ZCgpLCBbdGhpc10oY29uc3QgYmFzaWNfanNvbiAmIGVsZW1lbnQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgbV92YWx1ZS5vYmplY3QtPmVtcGxhY2UoKihlbGVtZW50WzBdLm1fdmFs
dWUuc3RyaW5nKSwgZWxlbWVudFsxXSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHRoZSBpbml0aWFsaXplciBsaXN0
IGRlc2NyaWJlcyBhbiBhcnJheSAtPiBjcmVhdGUgYXJyYXkKKyAgICAgICAgICAgIG1fdHlwZSA9
IHZhbHVlX3Q6OmFycmF5OworICAgICAgICAgICAgbV92YWx1ZS5hcnJheSA9IGNyZWF0ZTxhcnJh
eV90Pihpbml0KTsKKyAgICAgICAgfQorCisgICAgICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKKyAg
ICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgZXhwbGljaXRseSBjcmVhdGUgYW4gYXJyYXkgZnJv
bSBhbiBpbml0aWFsaXplciBsaXN0CisKKyAgICBDcmVhdGVzIGEgSlNPTiBhcnJheSB2YWx1ZSBm
cm9tIGEgZ2l2ZW4gaW5pdGlhbGl6ZXIgbGlzdC4gVGhhdCBpcywgZ2l2ZW4gYQorICAgIGxpc3Qg
b2YgdmFsdWVzIGBhLCBiLCBjYCwgY3JlYXRlcyB0aGUgSlNPTiB2YWx1ZSBgW2EsIGIsIGNdYC4g
SWYgdGhlCisgICAgaW5pdGlhbGl6ZXIgbGlzdCBpcyBlbXB0eSwgdGhlIGVtcHR5IGFycmF5IGBb
XWAgaXMgY3JlYXRlZC4KKworICAgIEBub3RlIFRoaXMgZnVuY3Rpb24gaXMgb25seSBuZWVkZWQg
dG8gZXhwcmVzcyB0d28gZWRnZSBjYXNlcyB0aGF0IGNhbm5vdAorICAgIGJlIHJlYWxpemVkIHdp
dGggdGhlIGluaXRpYWxpemVyIGxpc3QgY29uc3RydWN0b3IgKEByZWYKKyAgICBiYXNpY19qc29u
KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxiYXNpY19qc29uPiwgYm9vbCwgdmFsdWVfdCkpLiBUaGVz
ZSBjYXNlcworICAgIGFyZToKKyAgICAxLiBjcmVhdGluZyBhbiBhcnJheSB3aG9zZSBlbGVtZW50
cyBhcmUgYWxsIHBhaXJzIHdob3NlIGZpcnN0IGVsZW1lbnQgaXMgYQorICAgIHN0cmluZyAtLSBp
biB0aGlzIGNhc2UsIHRoZSBpbml0aWFsaXplciBsaXN0IGNvbnN0cnVjdG9yIHdvdWxkIGNyZWF0
ZSBhbgorICAgIG9iamVjdCwgdGFraW5nIHRoZSBmaXJzdCBlbGVtZW50cyBhcyBrZXlzCisgICAg
Mi4gY3JlYXRpbmcgYW4gZW1wdHkgYXJyYXkgLS0gcGFzc2luZyB0aGUgZW1wdHkgaW5pdGlhbGl6
ZXIgbGlzdCB0byB0aGUKKyAgICBpbml0aWFsaXplciBsaXN0IGNvbnN0cnVjdG9yIHlpZWxkcyBh
biBlbXB0eSBvYmplY3QKKworICAgIEBwYXJhbVtpbl0gaW5pdCAgaW5pdGlhbGl6ZXIgbGlzdCB3
aXRoIEpTT04gdmFsdWVzIHRvIGNyZWF0ZSBhbiBhcnJheSBmcm9tCisgICAgKG9wdGlvbmFsKQor
CisgICAgQHJldHVybiBKU09OIGFycmF5IHZhbHVlCisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIg
aW4gdGhlIHNpemUgb2YgQGEgaW5pdC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5n
IGNvZGUgc2hvd3MgYW4gZXhhbXBsZSBmb3IgdGhlIGBhcnJheWAKKyAgICBmdW5jdGlvbi4sYXJy
YXl9CisKKyAgICBAc2EgQHJlZiBiYXNpY19qc29uKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxiYXNp
Y19qc29uPiwgYm9vbCwgdmFsdWVfdCkgLS0KKyAgICBjcmVhdGUgYSBKU09OIHZhbHVlIGZyb20g
YW4gaW5pdGlhbGl6ZXIgbGlzdAorICAgIEBzYSBAcmVmIG9iamVjdChzdGQ6OmluaXRpYWxpemVy
X2xpc3Q8YmFzaWNfanNvbj4pIC0tIGNyZWF0ZSBhIEpTT04gb2JqZWN0CisgICAgdmFsdWUgZnJv
bSBhbiBpbml0aWFsaXplciBsaXN0CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICov
CisgICAgc3RhdGljIGJhc2ljX2pzb24gYXJyYXkoc3RkOjppbml0aWFsaXplcl9saXN0PGJhc2lj
X2pzb24+IGluaXQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmluaXRp
YWxpemVyX2xpc3Q8YmFzaWNfanNvbj4oKSkKKyAgICB7CisgICAgICAgIHJldHVybiBiYXNpY19q
c29uKGluaXQsIGZhbHNlLCB2YWx1ZV90OjphcnJheSk7CisgICAgfQorCisgICAgLyohCisgICAg
QGJyaWVmIGV4cGxpY2l0bHkgY3JlYXRlIGFuIG9iamVjdCBmcm9tIGFuIGluaXRpYWxpemVyIGxp
c3QKKworICAgIENyZWF0ZXMgYSBKU09OIG9iamVjdCB2YWx1ZSBmcm9tIGEgZ2l2ZW4gaW5pdGlh
bGl6ZXIgbGlzdC4gVGhlIGluaXRpYWxpemVyCisgICAgbGlzdHMgZWxlbWVudHMgbXVzdCBiZSBw
YWlycywgYW5kIHRoZWlyIGZpcnN0IGVsZW1lbnRzIG11c3QgYmUgc3RyaW5ncy4gSWYKKyAgICB0
aGUgaW5pdGlhbGl6ZXIgbGlzdCBpcyBlbXB0eSwgdGhlIGVtcHR5IG9iamVjdCBge31gIGlzIGNy
ZWF0ZWQuCisKKyAgICBAbm90ZSBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYWRkZWQgZm9yIHN5bW1l
dHJ5IHJlYXNvbnMuIEluIGNvbnRyYXN0IHRvIHRoZQorICAgIHJlbGF0ZWQgZnVuY3Rpb24gQHJl
ZiBhcnJheShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8YmFzaWNfanNvbj4pLCB0aGVyZSBhcmUKKyAg
ICBubyBjYXNlcyB3aGljaCBjYW4gb25seSBiZSBleHByZXNzZWQgYnkgdGhpcyBmdW5jdGlvbi4g
VGhhdCBpcywgYW55CisgICAgaW5pdGlhbGl6ZXIgbGlzdCBAYSBpbml0IGNhbiBhbHNvIGJlIHBh
c3NlZCB0byB0aGUgaW5pdGlhbGl6ZXIgbGlzdAorICAgIGNvbnN0cnVjdG9yIEByZWYgYmFzaWNf
anNvbihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8YmFzaWNfanNvbj4sIGJvb2wsCisgICAgdmFsdWVf
dCkuCisKKyAgICBAcGFyYW1baW5dIGluaXQgIGluaXRpYWxpemVyIGxpc3QgdG8gY3JlYXRlIGFu
IG9iamVjdCBmcm9tIChvcHRpb25hbCkKKworICAgIEByZXR1cm4gSlNPTiBvYmplY3QgdmFsdWUK
KworICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBAYSBpbml0IGlzIG5vdCBhIHBhaXIg
d2hvc2UgZmlyc3QgZWxlbWVudHMgYXJlCisgICAgc3RyaW5nczsgdGhyb3duIGJ5CisgICAgQHJl
ZiBiYXNpY19qc29uKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxiYXNpY19qc29uPiwgYm9vbCwgdmFs
dWVfdCkKKworICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgc2l6ZSBvZiBAYSBpbml0Lgor
CisgICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29kZSBzaG93cyBhbiBleGFtcGxlIGZv
ciB0aGUgYG9iamVjdGAKKyAgICBmdW5jdGlvbi4sb2JqZWN0fQorCisgICAgQHNhIEByZWYgYmFz
aWNfanNvbihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8YmFzaWNfanNvbj4sIGJvb2wsIHZhbHVlX3Qp
IC0tCisgICAgY3JlYXRlIGEgSlNPTiB2YWx1ZSBmcm9tIGFuIGluaXRpYWxpemVyIGxpc3QKKyAg
ICBAc2EgQHJlZiBhcnJheShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8YmFzaWNfanNvbj4pIC0tIGNy
ZWF0ZSBhIEpTT04gYXJyYXkKKyAgICB2YWx1ZSBmcm9tIGFuIGluaXRpYWxpemVyIGxpc3QKKwor
ICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBzdGF0aWMgYmFzaWNfanNvbiBv
YmplY3Qoc3RkOjppbml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+IGluaXQgPQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+
KCkpCisgICAgeworICAgICAgICByZXR1cm4gYmFzaWNfanNvbihpbml0LCBmYWxzZSwgdmFsdWVf
dDo6b2JqZWN0KTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgY29uc3RydWN0IGFuIGFy
cmF5IHdpdGggY291bnQgY29waWVzIG9mIGdpdmVuIHZhbHVlCisKKyAgICBDb25zdHJ1Y3RzIGEg
SlNPTiBhcnJheSB2YWx1ZSBieSBjcmVhdGluZyBAYSBjbnQgY29waWVzIG9mIGEgcGFzc2VkIHZh
bHVlLgorICAgIEluIGNhc2UgQGEgY250IGlzIGAwYCwgYW4gZW1wdHkgYXJyYXkgaXMgY3JlYXRl
ZC4gQXMgcG9zdGNvbmRpdGlvbiwKKyAgICBgc3RkOjpkaXN0YW5jZShiZWdpbigpLGVuZCgpKSA9
PSBjbnRgIGhvbGRzLgorCisgICAgQHBhcmFtW2luXSBjbnQgIHRoZSBudW1iZXIgb2YgSlNPTiBj
b3BpZXMgb2YgQGEgdmFsIHRvIGNyZWF0ZQorICAgIEBwYXJhbVtpbl0gdmFsICB0aGUgSlNPTiB2
YWx1ZSB0byBjb3B5CisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gQGEgY250LgorCisgICAg
QGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29kZSBzaG93cyBleGFtcGxlcyBmb3IgdGhlIEBy
ZWYKKyAgICBiYXNpY19qc29uKHNpemVfdHlwZVwsIGNvbnN0IGJhc2ljX2pzb24mKQorICAgIGNv
bnN0cnVjdG9yLixiYXNpY19qc29uX19zaXplX3R5cGVfYmFzaWNfanNvbn0KKworICAgIEBzaW5j
ZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBiYXNpY19qc29uKHNpemVfdHlwZSBjbnQsIGNv
bnN0IGJhc2ljX2pzb24mIHZhbCkKKyAgICAgICAgOiBtX3R5cGUodmFsdWVfdDo6YXJyYXkpCisg
ICAgeworICAgICAgICBtX3ZhbHVlLmFycmF5ID0gY3JlYXRlPGFycmF5X3Q+KGNudCwgdmFsKTsK
KyAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmll
ZiBjb25zdHJ1Y3QgYSBKU09OIGNvbnRhaW5lciBnaXZlbiBhbiBpdGVyYXRvciByYW5nZQorCisg
ICAgQ29uc3RydWN0cyB0aGUgSlNPTiB2YWx1ZSB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGUgcmFu
Z2UgYFtmaXJzdCwgbGFzdClgLgorICAgIFRoZSBzZW1hbnRpY3MgZGVwZW5kcyBvbiB0aGUgZGlm
ZmVyZW50IHR5cGVzIGEgSlNPTiB2YWx1ZSBjYW4gaGF2ZToKKyAgICAtIEluIGNhc2Ugb2YgcHJp
bWl0aXZlIHR5cGVzIChudW1iZXIsIGJvb2xlYW4sIG9yIHN0cmluZyksIEBhIGZpcnN0IG11c3QK
KyAgICAgIGJlIGBiZWdpbigpYCBhbmQgQGEgbGFzdCBtdXN0IGJlIGBlbmQoKWAuIEluIHRoaXMg
Y2FzZSwgdGhlIHZhbHVlIGlzCisgICAgICBjb3BpZWQuIE90aGVyd2lzZSwgc3RkOjpvdXRfb2Zf
cmFuZ2UgaXMgdGhyb3duLgorICAgIC0gSW4gY2FzZSBvZiBzdHJ1Y3R1cmVkIHR5cGVzIChhcnJh
eSwgb2JqZWN0KSwgdGhlIGNvbnN0cnVjdG9yIGJlaGF2ZXMgYXMKKyAgICAgIHNpbWlsYXIgdmVy
c2lvbnMgZm9yIGBzdGQ6OnZlY3RvcmAuCisgICAgLSBJbiBjYXNlIG9mIGEgbnVsbCB0eXBlLCBz
dGQ6OmRvbWFpbl9lcnJvciBpcyB0aHJvd24uCisKKyAgICBAdHBhcmFtIElucHV0SVQgYW4gaW5w
dXQgaXRlcmF0b3IgdHlwZSAoQHJlZiBpdGVyYXRvciBvciBAcmVmCisgICAgY29uc3RfaXRlcmF0
b3IpCisKKyAgICBAcGFyYW1baW5dIGZpcnN0IGJlZ2luIG9mIHRoZSByYW5nZSB0byBjb3B5IGZy
b20gKGluY2x1ZGVkKQorICAgIEBwYXJhbVtpbl0gbGFzdCBlbmQgb2YgdGhlIHJhbmdlIHRvIGNv
cHkgZnJvbSAoZXhjbHVkZWQpCisKKyAgICBAcHJlIEl0ZXJhdG9ycyBAYSBmaXJzdCBhbmQgQGEg
bGFzdCBtdXN0IGJlIGluaXRpYWxpemVkLiAqKlRoaXMKKyAgICAgICAgIHByZWNvbmRpdGlvbiBp
cyBlbmZvcmNlZCB3aXRoIGFuIGFzc2VydGlvbi4qKgorCisgICAgQHRocm93IHN0ZDo6ZG9tYWlu
X2Vycm9yIGlmIGl0ZXJhdG9ycyBhcmUgbm90IGNvbXBhdGlibGU7IHRoYXQgaXMsIGRvIG5vdAor
ICAgIGJlbG9uZyB0byB0aGUgc2FtZSBKU09OIHZhbHVlOyBleGFtcGxlOiBgIml0ZXJhdG9ycyBh
cmUgbm90IGNvbXBhdGlibGUiYAorICAgIEB0aHJvdyBzdGQ6Om91dF9vZl9yYW5nZSBpZiBpdGVy
YXRvcnMgYXJlIGZvciBhIHByaW1pdGl2ZSB0eXBlIChudW1iZXIsCisgICAgYm9vbGVhbiwgb3Ig
c3RyaW5nKSB3aGVyZSBhbiBvdXQgb2YgcmFuZ2UgZXJyb3IgY2FuIGJlIGRldGVjdGVkIGVhc2ls
eTsKKyAgICBleGFtcGxlOiBgIml0ZXJhdG9ycyBvdXQgb2YgcmFuZ2UiYAorICAgIEB0aHJvdyBz
dGQ6OmJhZF9hbGxvYyBpZiBhbGxvY2F0aW9uIGZvciBvYmplY3QsIGFycmF5LCBvciBzdHJpbmcg
ZmFpbHMKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgY2FsbGVkIHdpdGggYSBudWxs
IHZhbHVlOyBleGFtcGxlOiBgImNhbm5vdAorICAgIHVzZSBjb25zdHJ1Y3Qgd2l0aCBpdGVyYXRv
cnMgZnJvbSBudWxsImAKKworICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiBkaXN0YW5jZSBiZXR3
ZWVuIEBhIGZpcnN0IGFuZCBAYSBsYXN0LgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxl
IGJlbG93IHNob3dzIHNldmVyYWwgd2F5cyB0byBjcmVhdGUgSlNPTiB2YWx1ZXMgYnkKKyAgICBz
cGVjaWZ5aW5nIGEgc3VicmFuZ2Ugd2l0aCBpdGVyYXRvcnMuLGJhc2ljX2pzb25fX0lucHV0SXRf
SW5wdXRJdH0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICB0ZW1wbGF0
ZTxjbGFzcyBJbnB1dElULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKKyAgICAgICAgICAgICAg
ICAgc3RkOjppc19zYW1lPElucHV0SVQsIHR5cGVuYW1lIGJhc2ljX2pzb25fdDo6aXRlcmF0b3I+
Ojp2YWx1ZSBvcgorICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8SW5wdXRJVCwgdHlwZW5h
bWUgYmFzaWNfanNvbl90Ojpjb25zdF9pdGVyYXRvcj46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4K
KyAgICBiYXNpY19qc29uKElucHV0SVQgZmlyc3QsIElucHV0SVQgbGFzdCkKKyAgICB7CisgICAg
ICAgIGFzc2VydChmaXJzdC5tX29iamVjdCAhPSBudWxscHRyKTsKKyAgICAgICAgYXNzZXJ0KGxh
c3QubV9vYmplY3QgIT0gbnVsbHB0cik7CisKKyAgICAgICAgLy8gbWFrZSBzdXJlIGl0ZXJhdG9y
IGZpdHMgdGhlIGN1cnJlbnQgdmFsdWUKKyAgICAgICAgaWYgKGZpcnN0Lm1fb2JqZWN0ICE9IGxh
c3QubV9vYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vy
cm9yPigiaXRlcmF0b3JzIGFyZSBub3QgY29tcGF0aWJsZSIpOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gY29weSB0eXBlIGZyb20gZmlyc3QgaXRlcmF0b3IKKyAgICAgICAgbV90eXBlID0gZmly
c3QubV9vYmplY3QtPm1fdHlwZTsKKworICAgICAgICAvLyBjaGVjayBpZiBpdGVyYXRvciByYW5n
ZSBpcyBjb21wbGV0ZSBmb3IgcHJpbWl0aXZlIHZhbHVlcworICAgICAgICBzd2l0Y2ggKG1fdHlw
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgorICAgICAg
ICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfZmxvYXQ6CisgICAgICAgICAgICBjYXNlIHZhbHVl
X3Q6Om51bWJlcl9pbnRlZ2VyOgorICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfdW5z
aWduZWQ6CisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OnN0cmluZzoKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAobm90IGZpcnN0Lm1faXQucHJpbWl0aXZlX2l0ZXJhdG9yLmlz
X2JlZ2luKCkgb3Igbm90IGxhc3QubV9pdC5wcmltaXRpdmVfaXRlcmF0b3IuaXNfZW5kKCkpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6Om91dF9vZl9y
YW5nZT4oIml0ZXJhdG9ycyBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKG1fdHlwZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcjoKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBtX3ZhbHVlLm51bWJlcl9pbnRlZ2VyID0gZmlyc3QubV9vYmplY3QtPm1fdmFsdWUu
bnVtYmVyX2ludGVnZXI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkOgorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkID0gZmlyc3QubV9vYmpl
Y3QtPm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLm51bWJlcl9mbG9hdCA9IGZpcnN0
Lm1fb2JqZWN0LT5tX3ZhbHVlLm51bWJlcl9mbG9hdDsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fdmFsdWUuYm9vbGVhbiA9IGZpcnN0Lm1fb2Jq
ZWN0LT5tX3ZhbHVlLmJvb2xlYW47CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6c3RyaW5nOgorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1fdmFsdWUgPSAqZmlyc3QubV9vYmplY3QtPm1fdmFsdWUuc3RyaW5n
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBj
YXNlIHZhbHVlX3Q6Om9iamVjdDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3Zh
bHVlLm9iamVjdCA9IGNyZWF0ZTxvYmplY3RfdD4oZmlyc3QubV9pdC5vYmplY3RfaXRlcmF0b3Is
IGxhc3QubV9pdC5vYmplY3RfaXRlcmF0b3IpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5OgorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG1fdmFsdWUuYXJyYXkgPSBjcmVhdGU8YXJyYXlfdD4oZmly
c3QubV9pdC5hcnJheV9pdGVyYXRvciwgbGFzdC5tX2l0LmFycmF5X2l0ZXJhdG9yKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4o
ImNhbm5vdCB1c2UgY29uc3RydWN0IHdpdGggaXRlcmF0b3JzIGZyb20gIiArIGZpcnN0Lm1fb2Jq
ZWN0LT50eXBlX25hbWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBh
c3NlcnRfaW52YXJpYW50KCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGNvbnN0cnVj
dCBhIEpTT04gdmFsdWUgZ2l2ZW4gYW4gaW5wdXQgc3RyZWFtCisKKyAgICBAcGFyYW1baW4sb3V0
XSBpICBzdHJlYW0gdG8gcmVhZCBhIHNlcmlhbGl6ZWQgSlNPTiB2YWx1ZSBmcm9tCisgICAgQHBh
cmFtW2luXSBjYiBhIHBhcnNlciBjYWxsYmFjayBmdW5jdGlvbiBvZiB0eXBlIEByZWYgcGFyc2Vy
X2NhbGxiYWNrX3QKKyAgICB3aGljaCBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIGRlc2VyaWFsaXph
dGlvbiBieSBmaWx0ZXJpbmcgdW53YW50ZWQgdmFsdWVzCisgICAgKG9wdGlvbmFsKQorCisgICAg
QGNvbXBsZXhpdHkgTGluZWFyIGluIHRoZSBsZW5ndGggb2YgdGhlIGlucHV0LiBUaGUgcGFyc2Vy
IGlzIGEgcHJlZGljdGl2ZQorICAgIExMKDEpIHBhcnNlci4gVGhlIGNvbXBsZXhpdHkgY2FuIGJl
IGhpZ2hlciBpZiB0aGUgcGFyc2VyIGNhbGxiYWNrIGZ1bmN0aW9uCisgICAgQGEgY2IgaGFzIGEg
c3VwZXItbGluZWFyIGNvbXBsZXhpdHkuCisKKyAgICBAbm90ZSBBIFVURi04IGJ5dGUgb3JkZXIg
bWFyayBpcyBzaWxlbnRseSBpZ25vcmVkLgorCisgICAgQGRlcHJlY2F0ZWQgVGhpcyBjb25zdHJ1
Y3RvciBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdmVyc2lvbgorICAgICAg
My4wLjAgdG8gdW5pZnkgdGhlIGludGVyZmFjZSBvZiB0aGUgbGlicmFyeS4gRGVzZXJpYWxpemF0
aW9uIHdpbGwgYmUKKyAgICAgIGRvbmUgYnkgc3RyZWFtIG9wZXJhdG9ycyBvciBieSBjYWxsaW5n
IG9uZSBvZiB0aGUgYHBhcnNlYCBmdW5jdGlvbnMsCisgICAgICBlLmcuIEByZWYgcGFyc2Uoc3Rk
Ojppc3RyZWFtJiwgY29uc3QgcGFyc2VyX2NhbGxiYWNrX3QpLiBUaGF0IGlzLCBjYWxscworICAg
ICAgbGlrZSBganNvbiBqKGkpO2AgZm9yIGFuIGlucHV0IHN0cmVhbSBAYSBpIG5lZWQgdG8gYmUg
cmVwbGFjZWQgYnkKKyAgICAgIGBqc29uIGogPSBqc29uOjpwYXJzZShpKTtgLiBTZWUgdGhlIGV4
YW1wbGUgYmVsb3cuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgZGVtb25z
dHJhdGVzIGNvbnN0cnVjdGluZyBhIEpTT04gdmFsdWUgZnJvbQorICAgIGEgYHN0ZDo6c3RyaW5n
c3RyZWFtYCB3aXRoIGFuZCB3aXRob3V0IGNhbGxiYWNrCisgICAgZnVuY3Rpb24uLGJhc2ljX2pz
b25fX2lzdHJlYW19CisKKyAgICBAc2luY2UgdmVyc2lvbiAyLjAuMCwgZGVwcmVjYXRlZCBpbiB2
ZXJzaW9uIDIuMC4zLCB0byBiZSByZW1vdmVkIGluCisgICAgICAgICAgIHZlcnNpb24gMy4wLjAK
KyAgICAqLworICAgIEpTT05fREVQUkVDQVRFRAorICAgIGV4cGxpY2l0IGJhc2ljX2pzb24oc3Rk
Ojppc3RyZWFtJiBpLCBjb25zdCBwYXJzZXJfY2FsbGJhY2tfdCBjYiA9IG51bGxwdHIpCisgICAg
eworICAgICAgICAqdGhpcyA9IHBhcnNlcihpLCBjYikucGFyc2UoKTsKKyAgICAgICAgYXNzZXJ0
X2ludmFyaWFudCgpOworICAgIH0KKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLworICAgIC8vIG90aGVyIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvciAvLwor
ICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgLyohCisg
ICAgQGJyaWVmIGNvcHkgY29uc3RydWN0b3IKKworICAgIENyZWF0ZXMgYSBjb3B5IG9mIGEgZ2l2
ZW4gSlNPTiB2YWx1ZS4KKworICAgIEBwYXJhbVtpbl0gb3RoZXIgIHRoZSBKU09OIHZhbHVlIHRv
IGNvcHkKKworICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgc2l6ZSBvZiBAYSBvdGhlci4K
KworICAgIEByZXF1aXJlbWVudCBUaGlzIGZ1bmN0aW9uIGhlbHBzIGBiYXNpY19qc29uYCBzYXRp
c2Z5aW5nIHRoZQorICAgIFtDb250YWluZXJdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cv
Y3BwL2NvbmNlcHQvQ29udGFpbmVyKQorICAgIHJlcXVpcmVtZW50czoKKyAgICAtIFRoZSBjb21w
bGV4aXR5IGlzIGxpbmVhci4KKyAgICAtIEFzIHBvc3Rjb25kaXRpb24sIGl0IGhvbGRzOiBgb3Ro
ZXIgPT0gYmFzaWNfanNvbihvdGhlcilgLgorCisgICAgQHRocm93IHN0ZDo6YmFkX2FsbG9jIGlm
IGFsbG9jYXRpb24gZm9yIG9iamVjdCwgYXJyYXksIG9yIHN0cmluZyBmYWlscy4KKworICAgIEBs
aXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgYW4gZXhhbXBsZSBmb3IgdGhlIGNv
cHkKKyAgICBjb25zdHJ1Y3Rvci4sYmFzaWNfanNvbl9fYmFzaWNfanNvbn0KKworICAgIEBzaW5j
ZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBiYXNpY19qc29uKGNvbnN0IGJhc2ljX2pzb24m
IG90aGVyKQorICAgICAgICA6IG1fdHlwZShvdGhlci5tX3R5cGUpCisgICAgeworICAgICAgICAv
LyBjaGVjayBvZiBwYXNzZWQgdmFsdWUgaXMgdmFsaWQKKyAgICAgICAgb3RoZXIuYXNzZXJ0X2lu
dmFyaWFudCgpOworCisgICAgICAgIHN3aXRjaCAobV90eXBlKQorICAgICAgICB7CisgICAgICAg
ICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBtX3ZhbHVlID0gKm90aGVyLm1fdmFsdWUub2JqZWN0OworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5OgorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fdmFsdWUgPSAqb3RoZXIubV92YWx1ZS5hcnJh
eTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Y2FzZSB2YWx1ZV90OjpzdHJpbmc6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV92
YWx1ZSA9ICpvdGhlci5tX3ZhbHVlLnN0cmluZzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBvdGhlci5tX3ZhbHVlLmJvb2xlYW47
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNh
c2UgdmFsdWVfdDo6bnVtYmVyX2ludGVnZXI6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgbV92YWx1ZSA9IG90aGVyLm1fdmFsdWUubnVtYmVyX2ludGVnZXI7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVt
YmVyX3Vuc2lnbmVkOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBv
dGhlci5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfZmxvYXQ6Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV92YWx1ZSA9IG90aGVyLm1fdmFsdWUubnVt
YmVyX2Zsb2F0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOwor
ICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBtb3ZlIGNvbnN0cnVjdG9yCisKKyAgICBNb3Zl
IGNvbnN0cnVjdG9yLiBDb25zdHJ1Y3RzIGEgSlNPTiB2YWx1ZSB3aXRoIHRoZSBjb250ZW50cyBv
ZiB0aGUgZ2l2ZW4KKyAgICB2YWx1ZSBAYSBvdGhlciB1c2luZyBtb3ZlIHNlbWFudGljcy4gSXQg
InN0ZWFscyIgdGhlIHJlc291cmNlcyBmcm9tIEBhCisgICAgb3RoZXIgYW5kIGxlYXZlcyBpdCBh
cyBKU09OIG51bGwgdmFsdWUuCisKKyAgICBAcGFyYW1baW4sb3V0XSBvdGhlciAgdmFsdWUgdG8g
bW92ZSB0byB0aGlzIG9iamVjdAorCisgICAgQHBvc3QgQGEgb3RoZXIgaXMgYSBKU09OIG51bGwg
dmFsdWUKKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQGxpdmVleGFtcGxle1Ro
ZSBjb2RlIGJlbG93IHNob3dzIHRoZSBtb3ZlIGNvbnN0cnVjdG9yIGV4cGxpY2l0bHkgY2FsbGVk
CisgICAgdmlhIHN0ZDo6bW92ZS4sYmFzaWNfanNvbl9fbW92ZWNvbnN0cnVjdG9yfQorCisgICAg
QHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGJhc2ljX2pzb24oYmFzaWNfanNvbiYm
IG90aGVyKSBub2V4Y2VwdAorICAgICAgICA6IG1fdHlwZShzdGQ6Om1vdmUob3RoZXIubV90eXBl
KSksCisgICAgICAgICAgbV92YWx1ZShzdGQ6Om1vdmUob3RoZXIubV92YWx1ZSkpCisgICAgewor
ICAgICAgICAvLyBjaGVjayB0aGF0IHBhc3NlZCB2YWx1ZSBpcyB2YWxpZAorICAgICAgICBvdGhl
ci5hc3NlcnRfaW52YXJpYW50KCk7CisKKyAgICAgICAgLy8gaW52YWxpZGF0ZSBwYXlsb2FkCisg
ICAgICAgIG90aGVyLm1fdHlwZSA9IHZhbHVlX3Q6Om51bGw7CisgICAgICAgIG90aGVyLm1fdmFs
dWUgPSB7fTsKKworICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7CisgICAgfQorCisgICAgLyoh
CisgICAgQGJyaWVmIGNvcHkgYXNzaWdubWVudAorCisgICAgQ29weSBhc3NpZ25tZW50IG9wZXJh
dG9yLiBDb3BpZXMgYSBKU09OIHZhbHVlIHZpYSB0aGUgImNvcHkgYW5kIHN3YXAiCisgICAgc3Ry
YXRlZ3k6IEl0IGlzIGV4cHJlc3NlZCBpbiB0ZXJtcyBvZiB0aGUgY29weSBjb25zdHJ1Y3Rvciwg
ZGVzdHJ1Y3RvciwKKyAgICBhbmQgdGhlIHN3YXAoKSBtZW1iZXIgZnVuY3Rpb24uCisKKyAgICBA
cGFyYW1baW5dIG90aGVyICB2YWx1ZSB0byBjb3B5IGZyb20KKworICAgIEBjb21wbGV4aXR5IExp
bmVhci4KKworICAgIEByZXF1aXJlbWVudCBUaGlzIGZ1bmN0aW9uIGhlbHBzIGBiYXNpY19qc29u
YCBzYXRpc2Z5aW5nIHRoZQorICAgIFtDb250YWluZXJdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2Uu
Y29tL3cvY3BwL2NvbmNlcHQvQ29udGFpbmVyKQorICAgIHJlcXVpcmVtZW50czoKKyAgICAtIFRo
ZSBjb21wbGV4aXR5IGlzIGxpbmVhci4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgY29kZSBiZWxv
dyBzaG93cyBhbmQgZXhhbXBsZSBmb3IgdGhlIGNvcHkgYXNzaWdubWVudC4gSXQKKyAgICBjcmVh
dGVzIGEgY29weSBvZiB2YWx1ZSBgYWAgd2hpY2ggaXMgdGhlbiBzd2FwcGVkIHdpdGggYGJgLiBG
aW5hbGx5XCwgdGhlCisgICAgY29weSBvZiBgYWAgKHdoaWNoIGlzIHRoZSBudWxsIHZhbHVlIGFm
dGVyIHRoZSBzd2FwKSBpcworICAgIGRlc3Ryb3llZC4sYmFzaWNfanNvbl9fY29weWFzc2lnbm1l
bnR9CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgcmVmZXJlbmNlJiBv
cGVyYXRvcj0oYmFzaWNfanNvbiBvdGhlcikgbm9leGNlcHQgKAorICAgICAgICBzdGQ6OmlzX25v
dGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPHZhbHVlX3Q+Ojp2YWx1ZSBhbmQKKyAgICAgICAgc3Rk
Ojppc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTx2YWx1ZV90Pjo6dmFsdWUgYW5kCisgICAgICAg
IHN0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8anNvbl92YWx1ZT46OnZhbHVlIGFu
ZAorICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9hc3NpZ25hYmxlPGpzb25fdmFsdWU+Ojp2
YWx1ZQorICAgICkKKyAgICB7CisgICAgICAgIC8vIGNoZWNrIHRoYXQgcGFzc2VkIHZhbHVlIGlz
IHZhbGlkCisgICAgICAgIG90aGVyLmFzc2VydF9pbnZhcmlhbnQoKTsKKworICAgICAgICB1c2lu
ZyBzdGQ6OnN3YXA7CisgICAgICAgIHN3YXAobV90eXBlLCBvdGhlci5tX3R5cGUpOworICAgICAg
ICBzd2FwKG1fdmFsdWUsIG90aGVyLm1fdmFsdWUpOworCisgICAgICAgIGFzc2VydF9pbnZhcmlh
bnQoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIC8qIQorICAgIEBicmll
ZiBkZXN0cnVjdG9yCisKKyAgICBEZXN0cm95cyB0aGUgSlNPTiB2YWx1ZSBhbmQgZnJlZXMgYWxs
IGFsbG9jYXRlZCBtZW1vcnkuCisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIuCisKKyAgICBAcmVx
dWlyZW1lbnQgVGhpcyBmdW5jdGlvbiBoZWxwcyBgYmFzaWNfanNvbmAgc2F0aXNmeWluZyB0aGUK
KyAgICBbQ29udGFpbmVyXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0
L0NvbnRhaW5lcikKKyAgICByZXF1aXJlbWVudHM6CisgICAgLSBUaGUgY29tcGxleGl0eSBpcyBs
aW5lYXIuCisgICAgLSBBbGwgc3RvcmVkIGVsZW1lbnRzIGFyZSBkZXN0cm95ZWQgYW5kIGFsbCBt
ZW1vcnkgaXMgZnJlZWQuCisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAg
fmJhc2ljX2pzb24oKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOworCisgICAg
ICAgIHN3aXRjaCAobV90eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6
Om9iamVjdDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBbGxvY2F0b3JUeXBlPG9i
amVjdF90PiBhbGxvYzsKKyAgICAgICAgICAgICAgICBhbGxvYy5kZXN0cm95KG1fdmFsdWUub2Jq
ZWN0KTsKKyAgICAgICAgICAgICAgICBhbGxvYy5kZWFsbG9jYXRlKG1fdmFsdWUub2JqZWN0LCAx
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Y2FzZSB2YWx1ZV90OjphcnJheToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBbGxv
Y2F0b3JUeXBlPGFycmF5X3Q+IGFsbG9jOworICAgICAgICAgICAgICAgIGFsbG9jLmRlc3Ryb3ko
bV92YWx1ZS5hcnJheSk7CisgICAgICAgICAgICAgICAgYWxsb2MuZGVhbGxvY2F0ZShtX3ZhbHVl
LmFycmF5LCAxKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgY2FzZSB2YWx1ZV90OjpzdHJpbmc6CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgQWxsb2NhdG9yVHlwZTxzdHJpbmdfdD4gYWxsb2M7CisgICAgICAgICAgICAgICAgYWxs
b2MuZGVzdHJveShtX3ZhbHVlLnN0cmluZyk7CisgICAgICAgICAgICAgICAgYWxsb2MuZGVhbGxv
Y2F0ZShtX3ZhbHVlLnN0cmluZywgMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgLy8gYWxsIG90aGVyIHR5cGVzIG5lZWQgbm8gc3BlY2lmaWMgZGVzdHJ1Y3RvcgorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgLy8vIEB9CisKKyAgcHVibGljOgorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAg
Ly8gb2JqZWN0IGluc3BlY3Rpb24gLy8KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisg
ICAgLy8vIEBuYW1lIG9iamVjdCBpbnNwZWN0aW9uCisgICAgLy8vIEZ1bmN0aW9ucyB0byBpbnNw
ZWN0IHRoZSB0eXBlIG9mIGEgSlNPTiB2YWx1ZS4KKyAgICAvLy8gQHsKKworICAgIC8qIQorICAg
IEBicmllZiBzZXJpYWxpemF0aW9uCisKKyAgICBTZXJpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciBK
U09OIHZhbHVlcy4gVGhlIGZ1bmN0aW9uIHRyaWVzIHRvIG1pbWljCisgICAgUHl0aG9uJ3MgYGpz
b24uZHVtcHMoKWAgZnVuY3Rpb24sIGFuZCBjdXJyZW50bHkgc3VwcG9ydHMgaXRzIEBhIGluZGVu
dAorICAgIHBhcmFtZXRlci4KKworICAgIEBwYXJhbVtpbl0gaW5kZW50IElmIGluZGVudCBpcyBu
b25uZWdhdGl2ZSwgdGhlbiBhcnJheSBlbGVtZW50cyBhbmQgb2JqZWN0CisgICAgbWVtYmVycyB3
aWxsIGJlIHByZXR0eS1wcmludGVkIHdpdGggdGhhdCBpbmRlbnQgbGV2ZWwuIEFuIGluZGVudCBs
ZXZlbCBvZgorICAgIGAwYCB3aWxsIG9ubHkgaW5zZXJ0IG5ld2xpbmVzLiBgLTFgICh0aGUgZGVm
YXVsdCkgc2VsZWN0cyB0aGUgbW9zdCBjb21wYWN0CisgICAgcmVwcmVzZW50YXRpb24uCisKKyAg
ICBAcmV0dXJuIHN0cmluZyBjb250YWluaW5nIHRoZSBzZXJpYWxpemF0aW9uIG9mIHRoZSBKU09O
IHZhbHVlCisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhl
IGZvbGxvd2luZyBleGFtcGxlIHNob3dzIHRoZSBlZmZlY3Qgb2YgZGlmZmVyZW50IEBhIGluZGVu
dAorICAgIHBhcmFtZXRlcnMgdG8gdGhlIHJlc3VsdCBvZiB0aGUgc2VyaWFsaXphdGlvbi4sZHVt
cH0KKworICAgIEBzZWUgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2pzb24uaHRt
bCNqc29uLmR1bXAKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBzdHJp
bmdfdCBkdW1wKGNvbnN0IGludCBpbmRlbnQgPSAtMSkgY29uc3QKKyAgICB7CisgICAgICAgIHN0
ZDo6c3RyaW5nc3RyZWFtIHNzOworICAgICAgICAvLyBmaXggbG9jYWxlIHByb2JsZW1zCisgICAg
ICAgIHNzLmltYnVlKHN0ZDo6bG9jYWxlOjpjbGFzc2ljKCkpOworCisgICAgICAgIC8vIDYsIDE1
IG9yIDE2IGRpZ2l0cyBvZiBwcmVjaXNpb24gYWxsb3dzIHJvdW5kLXRyaXAgSUVFRSA3NTQKKyAg
ICAgICAgLy8gc3RyaW5nLT5mbG9hdC0+c3RyaW5nLCBzdHJpbmctPmRvdWJsZS0+c3RyaW5nIG9y
IHN0cmluZy0+bG9uZworICAgICAgICAvLyBkb3VibGUtPnN0cmluZzsgdG8gYmUgc2FmZSwgd2Ug
cmVhZCB0aGlzIHZhbHVlIGZyb20KKyAgICAgICAgLy8gc3RkOjpudW1lcmljX2xpbWl0czxudW1i
ZXJfZmxvYXRfdD46OmRpZ2l0czEwCisgICAgICAgIHNzLnByZWNpc2lvbihzdGQ6Om51bWVyaWNf
bGltaXRzPGRvdWJsZT46OmRpZ2l0czEwKTsKKworICAgICAgICBpZiAoaW5kZW50ID49IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGR1bXAoc3MsIHRydWUsIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGludD4oaW5kZW50KSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgICBkdW1wKHNzLCBmYWxzZSwgMCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
c3Muc3RyKCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIHJldHVybiB0aGUgdHlwZSBv
ZiB0aGUgSlNPTiB2YWx1ZSAoZXhwbGljaXQpCisKKyAgICBSZXR1cm4gdGhlIHR5cGUgb2YgdGhl
IEpTT04gdmFsdWUgYXMgYSB2YWx1ZSBmcm9tIHRoZSBAcmVmIHZhbHVlX3QKKyAgICBlbnVtZXJh
dGlvbi4KKworICAgIEByZXR1cm4gdGhlIHR5cGUgb2YgdGhlIEpTT04gdmFsdWUKKworICAgIEBj
b21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQGV4Y2VwdGlvbnNhZmV0eSBOby10aHJvdyBndWFy
YW50ZWU6IHRoaXMgbWVtYmVyIGZ1bmN0aW9uIG5ldmVyIHRocm93cworICAgIGV4Y2VwdGlvbnMu
CisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIGV4ZW1wbGlmaWVzIGB0eXBl
KClgIGZvciBhbGwgSlNPTgorICAgIHR5cGVzLix0eXBlfQorCisgICAgQHNpbmNlIHZlcnNpb24g
MS4wLjAKKyAgICAqLworICAgIGNvbnN0ZXhwciB2YWx1ZV90IHR5cGUoKSBjb25zdCBub2V4Y2Vw
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHlwZTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBA
YnJpZWYgcmV0dXJuIHdoZXRoZXIgdHlwZSBpcyBwcmltaXRpdmUKKworICAgIFRoaXMgZnVuY3Rp
b24gcmV0dXJucyB0cnVlIGlmZiB0aGUgSlNPTiB0eXBlIGlzIHByaW1pdGl2ZSAoc3RyaW5nLCBu
dW1iZXIsCisgICAgYm9vbGVhbiwgb3IgbnVsbCkuCisKKyAgICBAcmV0dXJuIGB0cnVlYCBpZiB0
eXBlIGlzIHByaW1pdGl2ZSAoc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4sIG9yIG51bGwpLAorICAg
IGBmYWxzZWAgb3RoZXJ3aXNlLgorCisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBA
ZXhjZXB0aW9uc2FmZXR5IE5vLXRocm93IGd1YXJhbnRlZTogdGhpcyBtZW1iZXIgZnVuY3Rpb24g
bmV2ZXIgdGhyb3dzCisgICAgZXhjZXB0aW9ucy4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9s
bG93aW5nIGNvZGUgZXhlbXBsaWZpZXMgYGlzX3ByaW1pdGl2ZSgpYCBmb3IgYWxsIEpTT04KKyAg
ICB0eXBlcy4saXNfcHJpbWl0aXZlfQorCisgICAgQHNhIEByZWYgaXNfc3RydWN0dXJlZCgpIC0t
IHJldHVybnMgd2hldGhlciBKU09OIHZhbHVlIGlzIHN0cnVjdHVyZWQKKyAgICBAc2EgQHJlZiBp
c19udWxsKCkgLS0gcmV0dXJucyB3aGV0aGVyIEpTT04gdmFsdWUgaXMgYG51bGxgCisgICAgQHNh
IEByZWYgaXNfc3RyaW5nKCkgLS0gcmV0dXJucyB3aGV0aGVyIEpTT04gdmFsdWUgaXMgYSBzdHJp
bmcKKyAgICBAc2EgQHJlZiBpc19ib29sZWFuKCkgLS0gcmV0dXJucyB3aGV0aGVyIEpTT04gdmFs
dWUgaXMgYSBib29sZWFuCisgICAgQHNhIEByZWYgaXNfbnVtYmVyKCkgLS0gcmV0dXJucyB3aGV0
aGVyIEpTT04gdmFsdWUgaXMgYSBudW1iZXIKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisg
ICAgKi8KKyAgICBjb25zdGV4cHIgYm9vbCBpc19wcmltaXRpdmUoKSBjb25zdCBub2V4Y2VwdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGlzX251bGwoKSBvciBpc19zdHJpbmcoKSBvciBpc19ib29s
ZWFuKCkgb3IgaXNfbnVtYmVyKCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIHJldHVy
biB3aGV0aGVyIHR5cGUgaXMgc3RydWN0dXJlZAorCisgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5z
IHRydWUgaWZmIHRoZSBKU09OIHR5cGUgaXMgc3RydWN0dXJlZCAoYXJyYXkgb3IKKyAgICBvYmpl
Y3QpLgorCisgICAgQHJldHVybiBgdHJ1ZWAgaWYgdHlwZSBpcyBzdHJ1Y3R1cmVkIChhcnJheSBv
ciBvYmplY3QpLCBgZmFsc2VgIG90aGVyd2lzZS4KKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50
LgorCisgICAgQGV4Y2VwdGlvbnNhZmV0eSBOby10aHJvdyBndWFyYW50ZWU6IHRoaXMgbWVtYmVy
IGZ1bmN0aW9uIG5ldmVyIHRocm93cworICAgIGV4Y2VwdGlvbnMuCisKKyAgICBAbGl2ZWV4YW1w
bGV7VGhlIGZvbGxvd2luZyBjb2RlIGV4ZW1wbGlmaWVzIGBpc19zdHJ1Y3R1cmVkKClgIGZvciBh
bGwgSlNPTgorICAgIHR5cGVzLixpc19zdHJ1Y3R1cmVkfQorCisgICAgQHNhIEByZWYgaXNfcHJp
bWl0aXZlKCkgLS0gcmV0dXJucyB3aGV0aGVyIHZhbHVlIGlzIHByaW1pdGl2ZQorICAgIEBzYSBA
cmVmIGlzX2FycmF5KCkgLS0gcmV0dXJucyB3aGV0aGVyIHZhbHVlIGlzIGFuIGFycmF5CisgICAg
QHNhIEByZWYgaXNfb2JqZWN0KCkgLS0gcmV0dXJucyB3aGV0aGVyIHZhbHVlIGlzIGFuIG9iamVj
dAorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGNvbnN0ZXhwciBib29s
IGlzX3N0cnVjdHVyZWQoKSBjb25zdCBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlz
X2FycmF5KCkgb3IgaXNfb2JqZWN0KCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIHJl
dHVybiB3aGV0aGVyIHZhbHVlIGlzIG51bGwKKworICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0
cnVlIGlmZiB0aGUgSlNPTiB2YWx1ZSBpcyBudWxsLgorCisgICAgQHJldHVybiBgdHJ1ZWAgaWYg
dHlwZSBpcyBudWxsLCBgZmFsc2VgIG90aGVyd2lzZS4KKworICAgIEBjb21wbGV4aXR5IENvbnN0
YW50LgorCisgICAgQGV4Y2VwdGlvbnNhZmV0eSBOby10aHJvdyBndWFyYW50ZWU6IHRoaXMgbWVt
YmVyIGZ1bmN0aW9uIG5ldmVyIHRocm93cworICAgIGV4Y2VwdGlvbnMuCisKKyAgICBAbGl2ZWV4
YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIGV4ZW1wbGlmaWVzIGBpc19udWxsKClgIGZvciBhbGwg
SlNPTgorICAgIHR5cGVzLixpc19udWxsfQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAg
ICAqLworICAgIGNvbnN0ZXhwciBib29sIGlzX251bGwoKSBjb25zdCBub2V4Y2VwdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fdHlwZSA9PSB2YWx1ZV90OjpudWxsOworICAgIH0KKworICAgIC8q
IQorICAgIEBicmllZiByZXR1cm4gd2hldGhlciB2YWx1ZSBpcyBhIGJvb2xlYW4KKworICAgIFRo
aXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmZiB0aGUgSlNPTiB2YWx1ZSBpcyBhIGJvb2xlYW4u
CisKKyAgICBAcmV0dXJuIGB0cnVlYCBpZiB0eXBlIGlzIGJvb2xlYW4sIGBmYWxzZWAgb3RoZXJ3
aXNlLgorCisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAZXhjZXB0aW9uc2FmZXR5
IE5vLXRocm93IGd1YXJhbnRlZTogdGhpcyBtZW1iZXIgZnVuY3Rpb24gbmV2ZXIgdGhyb3dzCisg
ICAgZXhjZXB0aW9ucy4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgZXhl
bXBsaWZpZXMgYGlzX2Jvb2xlYW4oKWAgZm9yIGFsbCBKU09OCisgICAgdHlwZXMuLGlzX2Jvb2xl
YW59CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgY29uc3RleHByIGJv
b2wgaXNfYm9vbGVhbigpIGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAgICByZXR1cm4gbV90
eXBlID09IHZhbHVlX3Q6OmJvb2xlYW47CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIHJl
dHVybiB3aGV0aGVyIHZhbHVlIGlzIGEgbnVtYmVyCisKKyAgICBUaGlzIGZ1bmN0aW9uIHJldHVy
bnMgdHJ1ZSBpZmYgdGhlIEpTT04gdmFsdWUgaXMgYSBudW1iZXIuIFRoaXMgaW5jbHVkZXMKKyAg
ICBib3RoIGludGVnZXIgYW5kIGZsb2F0aW5nLXBvaW50IHZhbHVlcy4KKworICAgIEByZXR1cm4g
YHRydWVgIGlmIHR5cGUgaXMgbnVtYmVyIChyZWdhcmRsZXNzIHdoZXRoZXIgaW50ZWdlciwgdW5z
aWduZWQKKyAgICBpbnRlZ2VyIG9yIGZsb2F0aW5nLXR5cGUpLCBgZmFsc2VgIG90aGVyd2lzZS4K
KworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQGV4Y2VwdGlvbnNhZmV0eSBOby10
aHJvdyBndWFyYW50ZWU6IHRoaXMgbWVtYmVyIGZ1bmN0aW9uIG5ldmVyIHRocm93cworICAgIGV4
Y2VwdGlvbnMuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIGV4ZW1wbGlm
aWVzIGBpc19udW1iZXIoKWAgZm9yIGFsbCBKU09OCisgICAgdHlwZXMuLGlzX251bWJlcn0KKwor
ICAgIEBzYSBAcmVmIGlzX251bWJlcl9pbnRlZ2VyKCkgLS0gY2hlY2sgaWYgdmFsdWUgaXMgYW4g
aW50ZWdlciBvciB1bnNpZ25lZAorICAgIGludGVnZXIgbnVtYmVyCisgICAgQHNhIEByZWYgaXNf
bnVtYmVyX3Vuc2lnbmVkKCkgLS0gY2hlY2sgaWYgdmFsdWUgaXMgYW4gdW5zaWduZWQgaW50ZWdl
cgorICAgIG51bWJlcgorICAgIEBzYSBAcmVmIGlzX251bWJlcl9mbG9hdCgpIC0tIGNoZWNrIGlm
IHZhbHVlIGlzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyCisKKyAgICBAc2luY2UgdmVyc2lvbiAx
LjAuMAorICAgICovCisgICAgY29uc3RleHByIGJvb2wgaXNfbnVtYmVyKCkgY29uc3Qgbm9leGNl
cHQKKyAgICB7CisgICAgICAgIHJldHVybiBpc19udW1iZXJfaW50ZWdlcigpIG9yIGlzX251bWJl
cl9mbG9hdCgpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiByZXR1cm4gd2hldGhlciB2
YWx1ZSBpcyBhbiBpbnRlZ2VyIG51bWJlcgorCisgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRy
dWUgaWZmIHRoZSBKU09OIHZhbHVlIGlzIGFuIGludGVnZXIgb3IgdW5zaWduZWQKKyAgICBpbnRl
Z2VyIG51bWJlci4gVGhpcyBleGNsdWRlcyBmbG9hdGluZy1wb2ludCB2YWx1ZXMuCisKKyAgICBA
cmV0dXJuIGB0cnVlYCBpZiB0eXBlIGlzIGFuIGludGVnZXIgb3IgdW5zaWduZWQgaW50ZWdlciBu
dW1iZXIsIGBmYWxzZWAKKyAgICBvdGhlcndpc2UuCisKKyAgICBAY29tcGxleGl0eSBDb25zdGFu
dC4KKworICAgIEBleGNlcHRpb25zYWZldHkgTm8tdGhyb3cgZ3VhcmFudGVlOiB0aGlzIG1lbWJl
ciBmdW5jdGlvbiBuZXZlciB0aHJvd3MKKyAgICBleGNlcHRpb25zLgorCisgICAgQGxpdmVleGFt
cGxle1RoZSBmb2xsb3dpbmcgY29kZSBleGVtcGxpZmllcyBgaXNfbnVtYmVyX2ludGVnZXIoKWAg
Zm9yIGFsbAorICAgIEpTT04gdHlwZXMuLGlzX251bWJlcl9pbnRlZ2VyfQorCisgICAgQHNhIEBy
ZWYgaXNfbnVtYmVyKCkgLS0gY2hlY2sgaWYgdmFsdWUgaXMgYSBudW1iZXIKKyAgICBAc2EgQHJl
ZiBpc19udW1iZXJfdW5zaWduZWQoKSAtLSBjaGVjayBpZiB2YWx1ZSBpcyBhbiB1bnNpZ25lZCBp
bnRlZ2VyCisgICAgbnVtYmVyCisgICAgQHNhIEByZWYgaXNfbnVtYmVyX2Zsb2F0KCkgLS0gY2hl
Y2sgaWYgdmFsdWUgaXMgYSBmbG9hdGluZy1wb2ludCBudW1iZXIKKworICAgIEBzaW5jZSB2ZXJz
aW9uIDEuMC4wCisgICAgKi8KKyAgICBjb25zdGV4cHIgYm9vbCBpc19udW1iZXJfaW50ZWdlcigp
IGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAgICByZXR1cm4gbV90eXBlID09IHZhbHVlX3Q6
Om51bWJlcl9pbnRlZ2VyIG9yIG1fdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQ7Cisg
ICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIHJldHVybiB3aGV0aGVyIHZhbHVlIGlzIGFuIHVu
c2lnbmVkIGludGVnZXIgbnVtYmVyCisKKyAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBp
ZmYgdGhlIEpTT04gdmFsdWUgaXMgYW4gdW5zaWduZWQgaW50ZWdlcgorICAgIG51bWJlci4gVGhp
cyBleGNsdWRlcyBmbG9hdGluZy1wb2ludCBhbmQgKHNpZ25lZCkgaW50ZWdlciB2YWx1ZXMuCisK
KyAgICBAcmV0dXJuIGB0cnVlYCBpZiB0eXBlIGlzIGFuIHVuc2lnbmVkIGludGVnZXIgbnVtYmVy
LCBgZmFsc2VgIG90aGVyd2lzZS4KKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAg
QGV4Y2VwdGlvbnNhZmV0eSBOby10aHJvdyBndWFyYW50ZWU6IHRoaXMgbWVtYmVyIGZ1bmN0aW9u
IG5ldmVyIHRocm93cworICAgIGV4Y2VwdGlvbnMuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZv
bGxvd2luZyBjb2RlIGV4ZW1wbGlmaWVzIGBpc19udW1iZXJfdW5zaWduZWQoKWAgZm9yIGFsbAor
ICAgIEpTT04gdHlwZXMuLGlzX251bWJlcl91bnNpZ25lZH0KKworICAgIEBzYSBAcmVmIGlzX251
bWJlcigpIC0tIGNoZWNrIGlmIHZhbHVlIGlzIGEgbnVtYmVyCisgICAgQHNhIEByZWYgaXNfbnVt
YmVyX2ludGVnZXIoKSAtLSBjaGVjayBpZiB2YWx1ZSBpcyBhbiBpbnRlZ2VyIG9yIHVuc2lnbmVk
CisgICAgaW50ZWdlciBudW1iZXIKKyAgICBAc2EgQHJlZiBpc19udW1iZXJfZmxvYXQoKSAtLSBj
aGVjayBpZiB2YWx1ZSBpcyBhIGZsb2F0aW5nLXBvaW50IG51bWJlcgorCisgICAgQHNpbmNlIHZl
cnNpb24gMi4wLjAKKyAgICAqLworICAgIGNvbnN0ZXhwciBib29sIGlzX251bWJlcl91bnNpZ25l
ZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAgICByZXR1cm4gbV90eXBlID09IHZhbHVl
X3Q6Om51bWJlcl91bnNpZ25lZDsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgcmV0dXJu
IHdoZXRoZXIgdmFsdWUgaXMgYSBmbG9hdGluZy1wb2ludCBudW1iZXIKKworICAgIFRoaXMgZnVu
Y3Rpb24gcmV0dXJucyB0cnVlIGlmZiB0aGUgSlNPTiB2YWx1ZSBpcyBhIGZsb2F0aW5nLXBvaW50
IG51bWJlci4KKyAgICBUaGlzIGV4Y2x1ZGVzIGludGVnZXIgYW5kIHVuc2lnbmVkIGludGVnZXIg
dmFsdWVzLgorCisgICAgQHJldHVybiBgdHJ1ZWAgaWYgdHlwZSBpcyBhIGZsb2F0aW5nLXBvaW50
IG51bWJlciwgYGZhbHNlYCBvdGhlcndpc2UuCisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudC4K
KworICAgIEBleGNlcHRpb25zYWZldHkgTm8tdGhyb3cgZ3VhcmFudGVlOiB0aGlzIG1lbWJlciBm
dW5jdGlvbiBuZXZlciB0aHJvd3MKKyAgICBleGNlcHRpb25zLgorCisgICAgQGxpdmVleGFtcGxl
e1RoZSBmb2xsb3dpbmcgY29kZSBleGVtcGxpZmllcyBgaXNfbnVtYmVyX2Zsb2F0KClgIGZvciBh
bGwKKyAgICBKU09OIHR5cGVzLixpc19udW1iZXJfZmxvYXR9CisKKyAgICBAc2EgQHJlZiBpc19u
dW1iZXIoKSAtLSBjaGVjayBpZiB2YWx1ZSBpcyBudW1iZXIKKyAgICBAc2EgQHJlZiBpc19udW1i
ZXJfaW50ZWdlcigpIC0tIGNoZWNrIGlmIHZhbHVlIGlzIGFuIGludGVnZXIgbnVtYmVyCisgICAg
QHNhIEByZWYgaXNfbnVtYmVyX3Vuc2lnbmVkKCkgLS0gY2hlY2sgaWYgdmFsdWUgaXMgYW4gdW5z
aWduZWQgaW50ZWdlcgorICAgIG51bWJlcgorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAg
ICAqLworICAgIGNvbnN0ZXhwciBib29sIGlzX251bWJlcl9mbG9hdCgpIGNvbnN0IG5vZXhjZXB0
CisgICAgeworICAgICAgICByZXR1cm4gbV90eXBlID09IHZhbHVlX3Q6Om51bWJlcl9mbG9hdDsK
KyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgcmV0dXJuIHdoZXRoZXIgdmFsdWUgaXMgYW4g
b2JqZWN0CisKKyAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZmYgdGhlIEpTT04gdmFs
dWUgaXMgYW4gb2JqZWN0LgorCisgICAgQHJldHVybiBgdHJ1ZWAgaWYgdHlwZSBpcyBvYmplY3Qs
IGBmYWxzZWAgb3RoZXJ3aXNlLgorCisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBA
ZXhjZXB0aW9uc2FmZXR5IE5vLXRocm93IGd1YXJhbnRlZTogdGhpcyBtZW1iZXIgZnVuY3Rpb24g
bmV2ZXIgdGhyb3dzCisgICAgZXhjZXB0aW9ucy4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9s
bG93aW5nIGNvZGUgZXhlbXBsaWZpZXMgYGlzX29iamVjdCgpYCBmb3IgYWxsIEpTT04KKyAgICB0
eXBlcy4saXNfb2JqZWN0fQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAg
IGNvbnN0ZXhwciBib29sIGlzX29iamVjdCgpIGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAg
ICByZXR1cm4gbV90eXBlID09IHZhbHVlX3Q6Om9iamVjdDsKKyAgICB9CisKKyAgICAvKiEKKyAg
ICBAYnJpZWYgcmV0dXJuIHdoZXRoZXIgdmFsdWUgaXMgYW4gYXJyYXkKKworICAgIFRoaXMgZnVu
Y3Rpb24gcmV0dXJucyB0cnVlIGlmZiB0aGUgSlNPTiB2YWx1ZSBpcyBhbiBhcnJheS4KKworICAg
IEByZXR1cm4gYHRydWVgIGlmIHR5cGUgaXMgYXJyYXksIGBmYWxzZWAgb3RoZXJ3aXNlLgorCisg
ICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAZXhjZXB0aW9uc2FmZXR5IE5vLXRocm93
IGd1YXJhbnRlZTogdGhpcyBtZW1iZXIgZnVuY3Rpb24gbmV2ZXIgdGhyb3dzCisgICAgZXhjZXB0
aW9ucy4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgZXhlbXBsaWZpZXMg
YGlzX2FycmF5KClgIGZvciBhbGwgSlNPTgorICAgIHR5cGVzLixpc19hcnJheX0KKworICAgIEBz
aW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBjb25zdGV4cHIgYm9vbCBpc19hcnJheSgp
IGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAgICByZXR1cm4gbV90eXBlID09IHZhbHVlX3Q6
OmFycmF5OworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiByZXR1cm4gd2hldGhlciB2YWx1
ZSBpcyBhIHN0cmluZworCisgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWZmIHRoZSBK
U09OIHZhbHVlIGlzIGEgc3RyaW5nLgorCisgICAgQHJldHVybiBgdHJ1ZWAgaWYgdHlwZSBpcyBz
dHJpbmcsIGBmYWxzZWAgb3RoZXJ3aXNlLgorCisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisK
KyAgICBAZXhjZXB0aW9uc2FmZXR5IE5vLXRocm93IGd1YXJhbnRlZTogdGhpcyBtZW1iZXIgZnVu
Y3Rpb24gbmV2ZXIgdGhyb3dzCisgICAgZXhjZXB0aW9ucy4KKworICAgIEBsaXZlZXhhbXBsZXtU
aGUgZm9sbG93aW5nIGNvZGUgZXhlbXBsaWZpZXMgYGlzX3N0cmluZygpYCBmb3IgYWxsIEpTT04K
KyAgICB0eXBlcy4saXNfc3RyaW5nfQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAq
LworICAgIGNvbnN0ZXhwciBib29sIGlzX3N0cmluZygpIGNvbnN0IG5vZXhjZXB0CisgICAgewor
ICAgICAgICByZXR1cm4gbV90eXBlID09IHZhbHVlX3Q6OnN0cmluZzsKKyAgICB9CisKKyAgICAv
KiEKKyAgICBAYnJpZWYgcmV0dXJuIHdoZXRoZXIgdmFsdWUgaXMgZGlzY2FyZGVkCisKKyAgICBU
aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZmYgdGhlIEpTT04gdmFsdWUgd2FzIGRpc2NhcmRl
ZCBkdXJpbmcgcGFyc2luZworICAgIHdpdGggYSBjYWxsYmFjayBmdW5jdGlvbiAoc2VlIEByZWYg
cGFyc2VyX2NhbGxiYWNrX3QpLgorCisgICAgQG5vdGUgVGhpcyBmdW5jdGlvbiB3aWxsIGFsd2F5
cyBiZSBgZmFsc2VgIGZvciBKU09OIHZhbHVlcyBhZnRlciBwYXJzaW5nLgorICAgIFRoYXQgaXMs
IGRpc2NhcmRlZCB2YWx1ZXMgY2FuIG9ubHkgb2NjdXIgZHVyaW5nIHBhcnNpbmcsIGJ1dCB3aWxs
IGJlCisgICAgcmVtb3ZlZCB3aGVuIGluc2lkZSBhIHN0cnVjdHVyZWQgdmFsdWUgb3IgcmVwbGFj
ZWQgYnkgbnVsbCBpbiBvdGhlciBjYXNlcy4KKworICAgIEByZXR1cm4gYHRydWVgIGlmIHR5cGUg
aXMgZGlzY2FyZGVkLCBgZmFsc2VgIG90aGVyd2lzZS4KKworICAgIEBjb21wbGV4aXR5IENvbnN0
YW50LgorCisgICAgQGV4Y2VwdGlvbnNhZmV0eSBOby10aHJvdyBndWFyYW50ZWU6IHRoaXMgbWVt
YmVyIGZ1bmN0aW9uIG5ldmVyIHRocm93cworICAgIGV4Y2VwdGlvbnMuCisKKyAgICBAbGl2ZWV4
YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIGV4ZW1wbGlmaWVzIGBpc19kaXNjYXJkZWQoKWAgZm9y
IGFsbCBKU09OCisgICAgdHlwZXMuLGlzX2Rpc2NhcmRlZH0KKworICAgIEBzaW5jZSB2ZXJzaW9u
IDEuMC4wCisgICAgKi8KKyAgICBjb25zdGV4cHIgYm9vbCBpc19kaXNjYXJkZWQoKSBjb25zdCBu
b2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHlwZSA9PSB2YWx1ZV90OjpkaXNjYXJk
ZWQ7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIHJldHVybiB0aGUgdHlwZSBvZiB0aGUg
SlNPTiB2YWx1ZSAoaW1wbGljaXQpCisKKyAgICBJbXBsaWNpdGx5IHJldHVybiB0aGUgdHlwZSBv
ZiB0aGUgSlNPTiB2YWx1ZSBhcyBhIHZhbHVlIGZyb20gdGhlIEByZWYKKyAgICB2YWx1ZV90IGVu
dW1lcmF0aW9uLgorCisgICAgQHJldHVybiB0aGUgdHlwZSBvZiB0aGUgSlNPTiB2YWx1ZQorCisg
ICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAZXhjZXB0aW9uc2FmZXR5IE5vLXRocm93
IGd1YXJhbnRlZTogdGhpcyBtZW1iZXIgZnVuY3Rpb24gbmV2ZXIgdGhyb3dzCisgICAgZXhjZXB0
aW9ucy4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgZXhlbXBsaWZpZXMg
dGhlIEByZWYgdmFsdWVfdCBvcGVyYXRvciBmb3IKKyAgICBhbGwgSlNPTiB0eXBlcy4sb3BlcmF0
b3JfX3ZhbHVlX3R9CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgY29u
c3RleHByIG9wZXJhdG9yIHZhbHVlX3QoKSBjb25zdCBub2V4Y2VwdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fdHlwZTsKKyAgICB9CisKKyAgICAvLy8gQH0KKworICBwcml2YXRlOgorICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLworICAgIC8vIHZhbHVlIGFjY2VzcyAvLworICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLworCisgICAgLy8vIGdldCBhbiBvYmplY3QgKGV4cGxpY2l0KQorICAgIHRlbXBsYXRl
PGNsYXNzIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAorICAgICAgICAgICAgICAgICBzdGQ6
OmlzX2NvbnZlcnRpYmxlPHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlwZSwgdHlwZW5hbWUgVDo6
a2V5X3R5cGU+Ojp2YWx1ZSBhbmQKKyAgICAgICAgICAgICAgICAgc3RkOjppc19jb252ZXJ0aWJs
ZTxiYXNpY19qc29uX3QsIHR5cGVuYW1lIFQ6Om1hcHBlZF90eXBlPjo6dmFsdWUsIGludD46OnR5
cGUgPSAwPgorICAgIFQgZ2V0X2ltcGwoVCopIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNf
b2JqZWN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBUKG1fdmFsdWUub2JqZWN0
LT5iZWdpbigpLCBtX3ZhbHVlLm9iamVjdC0+ZW5kKCkpOworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJ0eXBl
IG11c3QgYmUgb2JqZWN0LCBidXQgaXMgIiArIHR5cGVfbmFtZSgpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vLyBnZXQgYW4gb2JqZWN0IChleHBsaWNpdCkKKyAgICBvYmplY3RfdCBnZXRf
aW1wbChvYmplY3RfdCopIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNfb2JqZWN0KCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqKG1fdmFsdWUub2JqZWN0KTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWlu
X2Vycm9yPigidHlwZSBtdXN0IGJlIG9iamVjdCwgYnV0IGlzICIgKyB0eXBlX25hbWUoKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8gZ2V0IGFuIGFycmF5IChleHBsaWNpdCkKKyAgICB0
ZW1wbGF0ZTxjbGFzcyBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKKyAgICAgICAgICAgICAg
ICAgc3RkOjppc19jb252ZXJ0aWJsZTxiYXNpY19qc29uX3QsIHR5cGVuYW1lIFQ6OnZhbHVlX3R5
cGU+Ojp2YWx1ZSBhbmQKKyAgICAgICAgICAgICAgICAgbm90IHN0ZDo6aXNfc2FtZTxiYXNpY19q
c29uX3QsIHR5cGVuYW1lIFQ6OnZhbHVlX3R5cGU+Ojp2YWx1ZSBhbmQKKyAgICAgICAgICAgICAg
ICAgbm90IHN0ZDo6aXNfYXJpdGhtZXRpYzxUPjo6dmFsdWUgYW5kCisgICAgICAgICAgICAgICAg
IG5vdCBzdGQ6OmlzX2NvbnZlcnRpYmxlPHN0ZDo6c3RyaW5nLCBUPjo6dmFsdWUgYW5kCisgICAg
ICAgICAgICAgICAgIG5vdCBoYXNfbWFwcGVkX3R5cGU8VD46OnZhbHVlLCBpbnQ+Ojp0eXBlID0g
MD4KKyAgICBUIGdldF9pbXBsKFQqKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzX2FycmF5
KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFQgdG9fdmVjdG9yOworICAgICAgICAgICAgc3Rk
Ojp0cmFuc2Zvcm0obV92YWx1ZS5hcnJheS0+YmVnaW4oKSwgbV92YWx1ZS5hcnJheS0+ZW5kKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Omluc2VydGVyKHRvX3ZlY3RvciwgdG9f
dmVjdG9yLmVuZCgpKSwgW10oYmFzaWNfanNvbiBpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBpLmdldDx0eXBlbmFtZSBUOjp2YWx1ZV90eXBlPigpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICByZXR1cm4gdG9fdmVjdG9yOworICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJ0
eXBlIG11c3QgYmUgYXJyYXksIGJ1dCBpcyAiICsgdHlwZV9uYW1lKCkpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8vIGdldCBhbiBhcnJheSAoZXhwbGljaXQpCisgICAgdGVtcGxhdGU8Y2xh
c3MgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8CisgICAgICAgICAgICAgICAgIHN0ZDo6aXNf
Y29udmVydGlibGU8YmFzaWNfanNvbl90LCBUPjo6dmFsdWUgYW5kCisgICAgICAgICAgICAgICAg
IG5vdCBzdGQ6OmlzX3NhbWU8YmFzaWNfanNvbl90LCBUPjo6dmFsdWUsIGludD46OnR5cGUgPSAw
PgorICAgIHN0ZDo6dmVjdG9yPFQ+IGdldF9pbXBsKHN0ZDo6dmVjdG9yPFQ+KikgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmIChpc19hcnJheSgpKQorICAgICAgICB7CisgICAgICAgICAgICBzdGQ6
OnZlY3RvcjxUPiB0b192ZWN0b3I7CisgICAgICAgICAgICB0b192ZWN0b3IucmVzZXJ2ZShtX3Zh
bHVlLmFycmF5LT5zaXplKCkpOworICAgICAgICAgICAgc3RkOjp0cmFuc2Zvcm0obV92YWx1ZS5h
cnJheS0+YmVnaW4oKSwgbV92YWx1ZS5hcnJheS0+ZW5kKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6Omluc2VydGVyKHRvX3ZlY3RvciwgdG9fdmVjdG9yLmVuZCgpKSwgW10oYmFz
aWNfanNvbiBpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBpLmdldDxU
PigpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gdG9fdmVjdG9yOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3c8c3RkOjpk
b21haW5fZXJyb3I+KCJ0eXBlIG11c3QgYmUgYXJyYXksIGJ1dCBpcyAiICsgdHlwZV9uYW1lKCkp
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8vIGdldCBhbiBhcnJheSAoZXhwbGljaXQpCisg
ICAgdGVtcGxhdGU8Y2xhc3MgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8CisgICAgICAgICAg
ICAgICAgIHN0ZDo6aXNfc2FtZTxiYXNpY19qc29uLCB0eXBlbmFtZSBUOjp2YWx1ZV90eXBlPjo6
dmFsdWUgYW5kCisgICAgICAgICAgICAgICAgIG5vdCBoYXNfbWFwcGVkX3R5cGU8VD46OnZhbHVl
LCBpbnQ+Ojp0eXBlID0gMD4KKyAgICBUIGdldF9pbXBsKFQqKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKGlzX2FycmF5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBUKG1fdmFs
dWUuYXJyYXktPmJlZ2luKCksIG1fdmFsdWUuYXJyYXktPmVuZCgpKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9y
PigidHlwZSBtdXN0IGJlIGFycmF5LCBidXQgaXMgIiArIHR5cGVfbmFtZSgpKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vLyBnZXQgYW4gYXJyYXkgKGV4cGxpY2l0KQorICAgIGFycmF5X3Qg
Z2V0X2ltcGwoYXJyYXlfdCopIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNfYXJyYXkoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICoobV92YWx1ZS5hcnJheSk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFp
bl9lcnJvcj4oInR5cGUgbXVzdCBiZSBhcnJheSwgYnV0IGlzICIgKyB0eXBlX25hbWUoKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8gZ2V0IGEgc3RyaW5nIChleHBsaWNpdCkKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKKyAgICAgICAgICAg
ICAgICAgc3RkOjppc19jb252ZXJ0aWJsZTxzdHJpbmdfdCwgVD46OnZhbHVlLCBpbnQ+Ojp0eXBl
ID0gMD4KKyAgICBUIGdldF9pbXBsKFQqKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzX3N0
cmluZygpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKm1fdmFsdWUuc3RyaW5nOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3c8c3Rk
Ojpkb21haW5fZXJyb3I+KCJ0eXBlIG11c3QgYmUgc3RyaW5nLCBidXQgaXMgIiArIHR5cGVfbmFt
ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLyBnZXQgYSBudW1iZXIgKGV4cGxpY2l0
KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAorICAg
ICAgICAgICAgICAgICBzdGQ6OmlzX2FyaXRobWV0aWM8VD46OnZhbHVlLCBpbnQ+Ojp0eXBlID0g
MD4KKyAgICBUIGdldF9pbXBsKFQqKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX3R5
cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2ludGVnZXI6
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KG1f
dmFsdWUubnVtYmVyX2ludGVnZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNl
IHZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4obV92YWx1ZS5udW1iZXJfdW5zaWduZWQpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4obV92YWx1ZS5u
dW1iZXJfZmxvYXQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigidHlw
ZSBtdXN0IGJlIG51bWJlciwgYnV0IGlzICIgKyB0eXBlX25hbWUoKSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8gZ2V0IGEgYm9vbGVhbiAoZXhwbGljaXQpCisg
ICAgY29uc3RleHByIGJvb2xlYW5fdCBnZXRfaW1wbChib29sZWFuX3QqKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGlzX2Jvb2xlYW4oKQorICAgICAgICAgICAgICAgPyBtX3ZhbHVlLmJv
b2xlYW4KKyAgICAgICAgICAgICAgIDogVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJ0eXBlIG11
c3QgYmUgYm9vbGVhbiwgYnV0IGlzICIgKyB0eXBlX25hbWUoKSksIGZhbHNlOworICAgIH0KKwor
ICAgIC8vLyBnZXQgYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSAob2JqZWN0KQorICAgIG9iamVjdF90
KiBnZXRfaW1wbF9wdHIob2JqZWN0X3QqKSBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGlzX29iamVjdCgpID8gbV92YWx1ZS5vYmplY3QgOiBudWxscHRyOworICAgIH0KKworICAgIC8v
LyBnZXQgYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSAob2JqZWN0KQorICAgIGNvbnN0ZXhwciBjb25z
dCBvYmplY3RfdCogZ2V0X2ltcGxfcHRyKGNvbnN0IG9iamVjdF90KikgY29uc3Qgbm9leGNlcHQK
KyAgICB7CisgICAgICAgIHJldHVybiBpc19vYmplY3QoKSA/IG1fdmFsdWUub2JqZWN0IDogbnVs
bHB0cjsKKyAgICB9CisKKyAgICAvLy8gZ2V0IGEgcG9pbnRlciB0byB0aGUgdmFsdWUgKGFycmF5
KQorICAgIGFycmF5X3QqIGdldF9pbXBsX3B0cihhcnJheV90Kikgbm9leGNlcHQKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpc19hcnJheSgpID8gbV92YWx1ZS5hcnJheSA6IG51bGxwdHI7CisgICAg
fQorCisgICAgLy8vIGdldCBhIHBvaW50ZXIgdG8gdGhlIHZhbHVlIChhcnJheSkKKyAgICBjb25z
dGV4cHIgY29uc3QgYXJyYXlfdCogZ2V0X2ltcGxfcHRyKGNvbnN0IGFycmF5X3QqKSBjb25zdCBu
b2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzX2FycmF5KCkgPyBtX3ZhbHVlLmFycmF5
IDogbnVsbHB0cjsKKyAgICB9CisKKyAgICAvLy8gZ2V0IGEgcG9pbnRlciB0byB0aGUgdmFsdWUg
KHN0cmluZykKKyAgICBzdHJpbmdfdCogZ2V0X2ltcGxfcHRyKHN0cmluZ190Kikgbm9leGNlcHQK
KyAgICB7CisgICAgICAgIHJldHVybiBpc19zdHJpbmcoKSA/IG1fdmFsdWUuc3RyaW5nIDogbnVs
bHB0cjsKKyAgICB9CisKKyAgICAvLy8gZ2V0IGEgcG9pbnRlciB0byB0aGUgdmFsdWUgKHN0cmlu
ZykKKyAgICBjb25zdGV4cHIgY29uc3Qgc3RyaW5nX3QqIGdldF9pbXBsX3B0cihjb25zdCBzdHJp
bmdfdCopIGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAgICByZXR1cm4gaXNfc3RyaW5nKCkg
PyBtX3ZhbHVlLnN0cmluZyA6IG51bGxwdHI7CisgICAgfQorCisgICAgLy8vIGdldCBhIHBvaW50
ZXIgdG8gdGhlIHZhbHVlIChib29sZWFuKQorICAgIGJvb2xlYW5fdCogZ2V0X2ltcGxfcHRyKGJv
b2xlYW5fdCopIG5vZXhjZXB0CisgICAgeworICAgICAgICByZXR1cm4gaXNfYm9vbGVhbigpID8g
Jm1fdmFsdWUuYm9vbGVhbiA6IG51bGxwdHI7CisgICAgfQorCisgICAgLy8vIGdldCBhIHBvaW50
ZXIgdG8gdGhlIHZhbHVlIChib29sZWFuKQorICAgIGNvbnN0ZXhwciBjb25zdCBib29sZWFuX3Qq
IGdldF9pbXBsX3B0cihjb25zdCBib29sZWFuX3QqKSBjb25zdCBub2V4Y2VwdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzX2Jvb2xlYW4oKSA/ICZtX3ZhbHVlLmJvb2xlYW4gOiBudWxscHRyOwor
ICAgIH0KKworICAgIC8vLyBnZXQgYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSAoaW50ZWdlciBudW1i
ZXIpCisgICAgbnVtYmVyX2ludGVnZXJfdCogZ2V0X2ltcGxfcHRyKG51bWJlcl9pbnRlZ2VyX3Qq
KSBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzX251bWJlcl9pbnRlZ2VyKCkgPyAm
bV92YWx1ZS5udW1iZXJfaW50ZWdlciA6IG51bGxwdHI7CisgICAgfQorCisgICAgLy8vIGdldCBh
IHBvaW50ZXIgdG8gdGhlIHZhbHVlIChpbnRlZ2VyIG51bWJlcikKKyAgICBjb25zdGV4cHIgY29u
c3QgbnVtYmVyX2ludGVnZXJfdCogZ2V0X2ltcGxfcHRyKGNvbnN0IG51bWJlcl9pbnRlZ2VyX3Qq
KSBjb25zdCBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzX251bWJlcl9pbnRlZ2Vy
KCkgPyAmbV92YWx1ZS5udW1iZXJfaW50ZWdlciA6IG51bGxwdHI7CisgICAgfQorCisgICAgLy8v
IGdldCBhIHBvaW50ZXIgdG8gdGhlIHZhbHVlICh1bnNpZ25lZCBudW1iZXIpCisgICAgbnVtYmVy
X3Vuc2lnbmVkX3QqIGdldF9pbXBsX3B0cihudW1iZXJfdW5zaWduZWRfdCopIG5vZXhjZXB0Cisg
ICAgeworICAgICAgICByZXR1cm4gaXNfbnVtYmVyX3Vuc2lnbmVkKCkgPyAmbV92YWx1ZS5udW1i
ZXJfdW5zaWduZWQgOiBudWxscHRyOworICAgIH0KKworICAgIC8vLyBnZXQgYSBwb2ludGVyIHRv
IHRoZSB2YWx1ZSAodW5zaWduZWQgbnVtYmVyKQorICAgIGNvbnN0ZXhwciBjb25zdCBudW1iZXJf
dW5zaWduZWRfdCogZ2V0X2ltcGxfcHRyKGNvbnN0IG51bWJlcl91bnNpZ25lZF90KikgY29uc3Qg
bm9leGNlcHQKKyAgICB7CisgICAgICAgIHJldHVybiBpc19udW1iZXJfdW5zaWduZWQoKSA/ICZt
X3ZhbHVlLm51bWJlcl91bnNpZ25lZCA6IG51bGxwdHI7CisgICAgfQorCisgICAgLy8vIGdldCBh
IHBvaW50ZXIgdG8gdGhlIHZhbHVlIChmbG9hdGluZy1wb2ludCBudW1iZXIpCisgICAgbnVtYmVy
X2Zsb2F0X3QqIGdldF9pbXBsX3B0cihudW1iZXJfZmxvYXRfdCopIG5vZXhjZXB0CisgICAgewor
ICAgICAgICByZXR1cm4gaXNfbnVtYmVyX2Zsb2F0KCkgPyAmbV92YWx1ZS5udW1iZXJfZmxvYXQg
OiBudWxscHRyOworICAgIH0KKworICAgIC8vLyBnZXQgYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSAo
ZmxvYXRpbmctcG9pbnQgbnVtYmVyKQorICAgIGNvbnN0ZXhwciBjb25zdCBudW1iZXJfZmxvYXRf
dCogZ2V0X2ltcGxfcHRyKGNvbnN0IG51bWJlcl9mbG9hdF90KikgY29uc3Qgbm9leGNlcHQKKyAg
ICB7CisgICAgICAgIHJldHVybiBpc19udW1iZXJfZmxvYXQoKSA/ICZtX3ZhbHVlLm51bWJlcl9m
bG9hdCA6IG51bGxwdHI7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGhlbHBlciBmdW5j
dGlvbiB0byBpbXBsZW1lbnQgZ2V0X3JlZigpCisKKyAgICBUaGlzIGZ1bmNpb24gaGVscHMgdG8g
aW1wbGVtZW50IGdldF9yZWYoKSB3aXRob3V0IGNvZGUgZHVwbGljYXRpb24gZm9yCisgICAgY29u
c3QgYW5kIG5vbi1jb25zdCBvdmVybG9hZHMKKworICAgIEB0cGFyYW0gVGhpc1R5cGUgd2lsbCBi
ZSBkZWR1Y2VkIGFzIGBiYXNpY19qc29uYCBvciBgY29uc3QgYmFzaWNfanNvbmAKKworICAgIEB0
aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBSZWZlcmVuY2VUeXBlIGRvZXMgbm90IG1hdGNoIHVu
ZGVybHlpbmcgdmFsdWUKKyAgICB0eXBlIG9mIHRoZSBjdXJyZW50IEpTT04KKyAgICAqLworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFJlZmVyZW5jZVR5cGUsIHR5cGVuYW1lIFRoaXNUeXBlPgorICAg
IHN0YXRpYyBSZWZlcmVuY2VUeXBlIGdldF9yZWZfaW1wbChUaGlzVHlwZSYgb2JqKQorICAgIHsK
KyAgICAgICAgLy8gaGVscGVyIHR5cGUKKyAgICAgICAgdXNpbmcgUG9pbnRlclR5cGUgPSB0eXBl
bmFtZSBzdGQ6OmFkZF9wb2ludGVyPFJlZmVyZW5jZVR5cGU+Ojp0eXBlOworCisgICAgICAgIC8v
IGRlbGVnYXRlIHRoZSBjYWxsIHRvIGdldF9wdHI8PigpCisgICAgICAgIGF1dG8gcHRyID0gb2Jq
LnRlbXBsYXRlIGdldF9wdHI8UG9pbnRlclR5cGU+KCk7CisKKyAgICAgICAgaWYgKHB0ciAhPSBu
dWxscHRyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnB0cjsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vy
cm9yPigiaW5jb21wYXRpYmxlIFJlZmVyZW5jZVR5cGUgZm9yIGdldF9yZWYsIGFjdHVhbCB0eXBl
IGlzICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLnR5cGVfbmFt
ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICBwdWJsaWM6CisKKyAgICAvLy8gQG5hbWUgdmFs
dWUgYWNjZXNzCisgICAgLy8vIERpcmVjdCBhY2Nlc3MgdG8gdGhlIHN0b3JlZCB2YWx1ZSBvZiBh
IEpTT04gdmFsdWUuCisgICAgLy8vIEB7CisKKyAgICAvKiEKKyAgICBAYnJpZWYgZ2V0IGEgdmFs
dWUgKGV4cGxpY2l0KQorCisgICAgRXhwbGljaXQgdHlwZSBjb252ZXJzaW9uIGJldHdlZW4gdGhl
IEpTT04gdmFsdWUgYW5kIGEgY29tcGF0aWJsZSB2YWx1ZS4KKworICAgIEB0cGFyYW0gVmFsdWVU
eXBlIG5vbi1wb2ludGVyIHR5cGUgY29tcGF0aWJsZSB0byB0aGUgSlNPTiB2YWx1ZSwgZm9yCisg
ICAgaW5zdGFuY2UgYGludGAgZm9yIEpTT04gaW50ZWdlciBudW1iZXJzLCBgYm9vbGAgZm9yIEpT
T04gYm9vbGVhbnMsIG9yCisgICAgYHN0ZDo6dmVjdG9yYCB0eXBlcyBmb3IgSlNPTiBhcnJheXMK
KworICAgIEByZXR1cm4gY29weSBvZiB0aGUgSlNPTiB2YWx1ZSwgY29udmVydGVkIHRvIHR5cGUg
QGEgVmFsdWVUeXBlCisKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaW4gY2FzZSBwYXNz
ZWQgdHlwZSBAYSBWYWx1ZVR5cGUgaXMgaW5jb21wYXRpYmxlCisgICAgdG8gSlNPTjsgZXhhbXBs
ZTogYCJ0eXBlIG11c3QgYmUgb2JqZWN0LCBidXQgaXMgbnVsbCJgCisKKyAgICBAY29tcGxleGl0
eSBMaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlIEpTT04gdmFsdWUuCisKKyAgICBAbGl2ZWV4YW1w
bGV7VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3Mgc2V2ZXJhbCBjb252ZXJzaW9ucyBmcm9tIEpTT04g
dmFsdWVzCisgICAgdG8gb3RoZXIgdHlwZXMuIFRoZXJlIGEgZmV3IHRoaW5ncyB0byBub3RlOiAo
MSkgRmxvYXRpbmctcG9pbnQgbnVtYmVycyBjYW4KKyAgICBiZSBjb252ZXJ0ZWQgdG8gaW50ZWdl
cnNcLCAoMikgQSBKU09OIGFycmF5IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYSBzdGFuZGFyZAorICAg
IGBzdGQ6OnZlY3RvcjxzaG9ydD5gXCwgKDMpIEEgSlNPTiBvYmplY3QgY2FuIGJlIGNvbnZlcnRl
ZCB0byBDKysKKyAgICBhc3NvY2lhdGl2ZSBjb250YWluZXJzIHN1Y2ggYXMgYHN0ZDo6dW5vcmRl
cmVkX21hcDxzdGQ6OnN0cmluZ1wsCisgICAganNvbj5gLixnZXRfX1ZhbHVlVHlwZV9jb25zdH0K
KworICAgIEBpbnRlcm5hbAorICAgIFRoZSBpZGVhIG9mIHVzaW5nIGEgY2FzdGVkIG51bGwgcG9p
bnRlciB0byBjaG9vc2UgdGhlIGNvcnJlY3QKKyAgICBpbXBsZW1lbnRhdGlvbiBpcyBmcm9tIDxo
dHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS84MzE1MTk3LzI2NjM3OD4uCisgICAgQGVuZGludGVy
bmFsCisKKyAgICBAc2EgQHJlZiBvcGVyYXRvciBWYWx1ZVR5cGUoKSBjb25zdCBmb3IgaW1wbGlj
aXQgY29udmVyc2lvbgorICAgIEBzYSBAcmVmIGdldCgpIGZvciBwb2ludGVyLW1lbWJlciBhY2Nl
c3MKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAorICAgICAgICAgICAgICAg
ICBub3Qgc3RkOjppc19wb2ludGVyPFZhbHVlVHlwZT46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4K
KyAgICBWYWx1ZVR5cGUgZ2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRfaW1w
bChzdGF0aWNfY2FzdDxWYWx1ZVR5cGUqPihudWxscHRyKSk7CisgICAgfQorCisgICAgLyohCisg
ICAgQGJyaWVmIGdldCBhIHBvaW50ZXIgdmFsdWUgKGV4cGxpY2l0KQorCisgICAgRXhwbGljaXQg
cG9pbnRlciBhY2Nlc3MgdG8gdGhlIGludGVybmFsbHkgc3RvcmVkIEpTT04gdmFsdWUuIE5vIGNv
cGllcyBhcmUKKyAgICBtYWRlLgorCisgICAgQHdhcm5pbmcgVGhlIHBvaW50ZXIgYmVjb21lcyBp
bnZhbGlkIGlmIHRoZSB1bmRlcmx5aW5nIEpTT04gb2JqZWN0CisgICAgY2hhbmdlcy4KKworICAg
IEB0cGFyYW0gUG9pbnRlclR5cGUgcG9pbnRlciB0eXBlOyBtdXN0IGJlIGEgcG9pbnRlciB0byBA
cmVmIGFycmF5X3QsIEByZWYKKyAgICBvYmplY3RfdCwgQHJlZiBzdHJpbmdfdCwgQHJlZiBib29s
ZWFuX3QsIEByZWYgbnVtYmVyX2ludGVnZXJfdCwKKyAgICBAcmVmIG51bWJlcl91bnNpZ25lZF90
LCBvciBAcmVmIG51bWJlcl9mbG9hdF90LgorCisgICAgQHJldHVybiBwb2ludGVyIHRvIHRoZSBp
bnRlcm5hbGx5IHN0b3JlZCBKU09OIHZhbHVlIGlmIHRoZSByZXF1ZXN0ZWQKKyAgICBwb2ludGVy
IHR5cGUgQGEgUG9pbnRlclR5cGUgZml0cyB0byB0aGUgSlNPTiB2YWx1ZTsgYG51bGxwdHJgIG90
aGVyd2lzZQorCisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAbGl2ZWV4YW1wbGV7
VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93IHBvaW50ZXJzIHRvIGludGVybmFsIHZhbHVlcyBv
ZiBhCisgICAgSlNPTiB2YWx1ZSBjYW4gYmUgcmVxdWVzdGVkLiBOb3RlIHRoYXQgbm8gdHlwZSBj
b252ZXJzaW9ucyBhcmUgbWFkZSBhbmQgYQorICAgIGBudWxscHRyYCBpcyByZXR1cm5lZCBpZiB0
aGUgdmFsdWUgYW5kIHRoZSByZXF1ZXN0ZWQgcG9pbnRlciB0eXBlIGRvZXMgbm90CisgICAgbWF0
Y2guLGdldF9fUG9pbnRlclR5cGV9CisKKyAgICBAc2EgQHJlZiBnZXRfcHRyKCkgZm9yIGV4cGxp
Y2l0IHBvaW50ZXItbWVtYmVyIGFjY2VzcworCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAg
ICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBvaW50ZXJUeXBlLCB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjwKKyAgICAgICAgICAgICAgICAgc3RkOjppc19wb2ludGVyPFBvaW50ZXJUeXBlPjo6
dmFsdWUsIGludD46OnR5cGUgPSAwPgorICAgIFBvaW50ZXJUeXBlIGdldCgpIG5vZXhjZXB0Cisg
ICAgeworICAgICAgICAvLyBkZWxlZ2F0ZSB0aGUgY2FsbCB0byBnZXRfcHRyCisgICAgICAgIHJl
dHVybiBnZXRfcHRyPFBvaW50ZXJUeXBlPigpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmll
ZiBnZXQgYSBwb2ludGVyIHZhbHVlIChleHBsaWNpdCkKKyAgICBAY29weWRvYyBnZXQoKQorICAg
ICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUG9pbnRlclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPAorICAgICAgICAgICAgICAgICBzdGQ6OmlzX3BvaW50ZXI8UG9pbnRlclR5cGU+Ojp2
YWx1ZSwgaW50Pjo6dHlwZSA9IDA+CisgICAgY29uc3RleHByIGNvbnN0IFBvaW50ZXJUeXBlIGdl
dCgpIGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAgICAvLyBkZWxlZ2F0ZSB0aGUgY2FsbCB0
byBnZXRfcHRyCisgICAgICAgIHJldHVybiBnZXRfcHRyPFBvaW50ZXJUeXBlPigpOworICAgIH0K
KworICAgIC8qIQorICAgIEBicmllZiBnZXQgYSBwb2ludGVyIHZhbHVlIChpbXBsaWNpdCkKKwor
ICAgIEltcGxpY2l0IHBvaW50ZXIgYWNjZXNzIHRvIHRoZSBpbnRlcm5hbGx5IHN0b3JlZCBKU09O
IHZhbHVlLiBObyBjb3BpZXMgYXJlCisgICAgbWFkZS4KKworICAgIEB3YXJuaW5nIFdyaXRpbmcg
ZGF0YSB0byB0aGUgcG9pbnRlZSBvZiB0aGUgcmVzdWx0IHlpZWxkcyBhbiB1bmRlZmluZWQKKyAg
ICBzdGF0ZS4KKworICAgIEB0cGFyYW0gUG9pbnRlclR5cGUgcG9pbnRlciB0eXBlOyBtdXN0IGJl
IGEgcG9pbnRlciB0byBAcmVmIGFycmF5X3QsIEByZWYKKyAgICBvYmplY3RfdCwgQHJlZiBzdHJp
bmdfdCwgQHJlZiBib29sZWFuX3QsIEByZWYgbnVtYmVyX2ludGVnZXJfdCwKKyAgICBAcmVmIG51
bWJlcl91bnNpZ25lZF90LCBvciBAcmVmIG51bWJlcl9mbG9hdF90LiBFbmZvcmNlZCBieSBhIHN0
YXRpYworICAgIGFzc2VydGlvbi4KKworICAgIEByZXR1cm4gcG9pbnRlciB0byB0aGUgaW50ZXJu
YWxseSBzdG9yZWQgSlNPTiB2YWx1ZSBpZiB0aGUgcmVxdWVzdGVkCisgICAgcG9pbnRlciB0eXBl
IEBhIFBvaW50ZXJUeXBlIGZpdHMgdG8gdGhlIEpTT04gdmFsdWU7IGBudWxscHRyYCBvdGhlcndp
c2UKKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQGxpdmVleGFtcGxle1RoZSBl
eGFtcGxlIGJlbG93IHNob3dzIGhvdyBwb2ludGVycyB0byBpbnRlcm5hbCB2YWx1ZXMgb2YgYQor
ICAgIEpTT04gdmFsdWUgY2FuIGJlIHJlcXVlc3RlZC4gTm90ZSB0aGF0IG5vIHR5cGUgY29udmVy
c2lvbnMgYXJlIG1hZGUgYW5kIGEKKyAgICBgbnVsbHB0cmAgaXMgcmV0dXJuZWQgaWYgdGhlIHZh
bHVlIGFuZCB0aGUgcmVxdWVzdGVkIHBvaW50ZXIgdHlwZSBkb2VzIG5vdAorICAgIG1hdGNoLixn
ZXRfcHRyfQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFBvaW50ZXJUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKKyAgICAgICAg
ICAgICAgICAgc3RkOjppc19wb2ludGVyPFBvaW50ZXJUeXBlPjo6dmFsdWUsIGludD46OnR5cGUg
PSAwPgorICAgIFBvaW50ZXJUeXBlIGdldF9wdHIoKSBub2V4Y2VwdAorICAgIHsKKyAgICAgICAg
Ly8gZ2V0IHRoZSB0eXBlIG9mIHRoZSBQb2ludGVyVHlwZSAocmVtb3ZlIHBvaW50ZXIgYW5kIGNv
bnN0KQorICAgICAgICB1c2luZyBwb2ludGVlX3QgPSB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25z
dDx0eXBlbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnJlbW92ZV9wb2ludGVy
PHR5cGVuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6cmVtb3ZlX2NvbnN0PFBv
aW50ZXJUeXBlPjo6dHlwZT46OnR5cGU+Ojp0eXBlOworICAgICAgICAvLyBtYWtlIHN1cmUgdGhl
IHR5cGUgbWF0Y2hlcyB0aGUgYWxsb3dlZCB0eXBlcworICAgICAgICBzdGF0aWNfYXNzZXJ0KAor
ICAgICAgICAgICAgc3RkOjppc19zYW1lPG9iamVjdF90LCBwb2ludGVlX3Q+Ojp2YWx1ZQorICAg
ICAgICAgICAgb3Igc3RkOjppc19zYW1lPGFycmF5X3QsIHBvaW50ZWVfdD46OnZhbHVlCisgICAg
ICAgICAgICBvciBzdGQ6OmlzX3NhbWU8c3RyaW5nX3QsIHBvaW50ZWVfdD46OnZhbHVlCisgICAg
ICAgICAgICBvciBzdGQ6OmlzX3NhbWU8Ym9vbGVhbl90LCBwb2ludGVlX3Q+Ojp2YWx1ZQorICAg
ICAgICAgICAgb3Igc3RkOjppc19zYW1lPG51bWJlcl9pbnRlZ2VyX3QsIHBvaW50ZWVfdD46OnZh
bHVlCisgICAgICAgICAgICBvciBzdGQ6OmlzX3NhbWU8bnVtYmVyX3Vuc2lnbmVkX3QsIHBvaW50
ZWVfdD46OnZhbHVlCisgICAgICAgICAgICBvciBzdGQ6OmlzX3NhbWU8bnVtYmVyX2Zsb2F0X3Qs
IHBvaW50ZWVfdD46OnZhbHVlCisgICAgICAgICAgICAsICJpbmNvbXBhdGlibGUgcG9pbnRlciB0
eXBlIik7CisKKyAgICAgICAgLy8gZGVsZWdhdGUgdGhlIGNhbGwgdG8gZ2V0X2ltcGxfcHRyPD4o
KQorICAgICAgICByZXR1cm4gZ2V0X2ltcGxfcHRyKHN0YXRpY19jYXN0PFBvaW50ZXJUeXBlPihu
dWxscHRyKSk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGdldCBhIHBvaW50ZXIgdmFs
dWUgKGltcGxpY2l0KQorICAgIEBjb3B5ZG9jIGdldF9wdHIoKQorICAgICovCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgUG9pbnRlclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAorICAgICAg
ICAgICAgICAgICBzdGQ6OmlzX3BvaW50ZXI8UG9pbnRlclR5cGU+Ojp2YWx1ZSBhbmQKKyAgICAg
ICAgICAgICAgICAgc3RkOjppc19jb25zdDx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVyPFBv
aW50ZXJUeXBlPjo6dHlwZT46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4KKyAgICBjb25zdGV4cHIg
Y29uc3QgUG9pbnRlclR5cGUgZ2V0X3B0cigpIGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAg
ICAvLyBnZXQgdGhlIHR5cGUgb2YgdGhlIFBvaW50ZXJUeXBlIChyZW1vdmUgcG9pbnRlciBhbmQg
Y29uc3QpCisgICAgICAgIHVzaW5nIHBvaW50ZWVfdCA9IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2Nv
bnN0PHR5cGVuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6cmVtb3ZlX3BvaW50
ZXI8dHlwZW5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpyZW1vdmVfY29uc3Q8
UG9pbnRlclR5cGU+Ojp0eXBlPjo6dHlwZT46OnR5cGU7CisgICAgICAgIC8vIG1ha2Ugc3VyZSB0
aGUgdHlwZSBtYXRjaGVzIHRoZSBhbGxvd2VkIHR5cGVzCisgICAgICAgIHN0YXRpY19hc3NlcnQo
CisgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8b2JqZWN0X3QsIHBvaW50ZWVfdD46OnZhbHVlCisg
ICAgICAgICAgICBvciBzdGQ6OmlzX3NhbWU8YXJyYXlfdCwgcG9pbnRlZV90Pjo6dmFsdWUKKyAg
ICAgICAgICAgIG9yIHN0ZDo6aXNfc2FtZTxzdHJpbmdfdCwgcG9pbnRlZV90Pjo6dmFsdWUKKyAg
ICAgICAgICAgIG9yIHN0ZDo6aXNfc2FtZTxib29sZWFuX3QsIHBvaW50ZWVfdD46OnZhbHVlCisg
ICAgICAgICAgICBvciBzdGQ6OmlzX3NhbWU8bnVtYmVyX2ludGVnZXJfdCwgcG9pbnRlZV90Pjo6
dmFsdWUKKyAgICAgICAgICAgIG9yIHN0ZDo6aXNfc2FtZTxudW1iZXJfdW5zaWduZWRfdCwgcG9p
bnRlZV90Pjo6dmFsdWUKKyAgICAgICAgICAgIG9yIHN0ZDo6aXNfc2FtZTxudW1iZXJfZmxvYXRf
dCwgcG9pbnRlZV90Pjo6dmFsdWUKKyAgICAgICAgICAgICwgImluY29tcGF0aWJsZSBwb2ludGVy
IHR5cGUiKTsKKworICAgICAgICAvLyBkZWxlZ2F0ZSB0aGUgY2FsbCB0byBnZXRfaW1wbF9wdHI8
PigpIGNvbnN0CisgICAgICAgIHJldHVybiBnZXRfaW1wbF9wdHIoc3RhdGljX2Nhc3Q8Y29uc3Qg
UG9pbnRlclR5cGU+KG51bGxwdHIpKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgZ2V0
IGEgcmVmZXJlbmNlIHZhbHVlIChpbXBsaWNpdCkKKworICAgIEltcGxpY3QgcmVmZXJlbmNlIGFj
Y2VzcyB0byB0aGUgaW50ZXJuYWxseSBzdG9yZWQgSlNPTiB2YWx1ZS4gTm8gY29waWVzCisgICAg
YXJlIG1hZGUuCisKKyAgICBAd2FybmluZyBXcml0aW5nIGRhdGEgdG8gdGhlIHJlZmVyZWUgb2Yg
dGhlIHJlc3VsdCB5aWVsZHMgYW4gdW5kZWZpbmVkCisgICAgc3RhdGUuCisKKyAgICBAdHBhcmFt
IFJlZmVyZW5jZVR5cGUgcmVmZXJlbmNlIHR5cGU7IG11c3QgYmUgYSByZWZlcmVuY2UgdG8gQHJl
ZiBhcnJheV90LAorICAgIEByZWYgb2JqZWN0X3QsIEByZWYgc3RyaW5nX3QsIEByZWYgYm9vbGVh
bl90LCBAcmVmIG51bWJlcl9pbnRlZ2VyX3QsIG9yCisgICAgQHJlZiBudW1iZXJfZmxvYXRfdC4g
RW5mb3JjZWQgYnkgc3RhdGljIGFzc2VydGlvbi4KKworICAgIEByZXR1cm4gcmVmZXJlbmNlIHRv
IHRoZSBpbnRlcm5hbGx5IHN0b3JlZCBKU09OIHZhbHVlIGlmIHRoZSByZXF1ZXN0ZWQKKyAgICBy
ZWZlcmVuY2UgdHlwZSBAYSBSZWZlcmVuY2VUeXBlIGZpdHMgdG8gdGhlIEpTT04gdmFsdWU7IHRo
cm93cworICAgIHN0ZDo6ZG9tYWluX2Vycm9yIG90aGVyd2lzZQorCisgICAgQHRocm93IHN0ZDo6
ZG9tYWluX2Vycm9yIGluIGNhc2UgcGFzc2VkIHR5cGUgQGEgUmVmZXJlbmNlVHlwZSBpcworICAg
IGluY29tcGF0aWJsZSB3aXRoIHRoZSBzdG9yZWQgSlNPTiB2YWx1ZQorCisgICAgQGNvbXBsZXhp
dHkgQ29uc3RhbnQuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgc2hvd3Mgc2V2ZXJh
bCBjYWxscyB0byBgZ2V0X3JlZigpYC4sZ2V0X3JlZn0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEu
MS4wCisgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSZWZlcmVuY2VUeXBlLCB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjwKKyAgICAgICAgICAgICAgICAgc3RkOjppc19yZWZlcmVuY2U8UmVm
ZXJlbmNlVHlwZT46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4KKyAgICBSZWZlcmVuY2VUeXBlIGdl
dF9yZWYoKQorICAgIHsKKyAgICAgICAgLy8gZGVsZWdhdGUgY2FsbCB0byBnZXRfcmVmX2ltcGwK
KyAgICAgICAgcmV0dXJuIGdldF9yZWZfaW1wbDxSZWZlcmVuY2VUeXBlPigqdGhpcyk7CisgICAg
fQorCisgICAgLyohCisgICAgQGJyaWVmIGdldCBhIHJlZmVyZW5jZSB2YWx1ZSAoaW1wbGljaXQp
CisgICAgQGNvcHlkb2MgZ2V0X3JlZigpCisgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBS
ZWZlcmVuY2VUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKKyAgICAgICAgICAgICAgICAg
c3RkOjppc19yZWZlcmVuY2U8UmVmZXJlbmNlVHlwZT46OnZhbHVlIGFuZAorICAgICAgICAgICAg
ICAgICBzdGQ6OmlzX2NvbnN0PHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxSZWZlcmVu
Y2VUeXBlPjo6dHlwZT46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4KKyAgICBSZWZlcmVuY2VUeXBl
IGdldF9yZWYoKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gZGVsZWdhdGUgY2FsbCB0byBnZXRf
cmVmX2ltcGwKKyAgICAgICAgcmV0dXJuIGdldF9yZWZfaW1wbDxSZWZlcmVuY2VUeXBlPigqdGhp
cyk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGdldCBhIHZhbHVlIChpbXBsaWNpdCkK
KworICAgIEltcGxpY2l0IHR5cGUgY29udmVyc2lvbiBiZXR3ZWVuIHRoZSBKU09OIHZhbHVlIGFu
ZCBhIGNvbXBhdGlibGUgdmFsdWUuCisgICAgVGhlIGNhbGwgaXMgcmVhbGl6ZWQgYnkgY2FsbGlu
ZyBAcmVmIGdldCgpIGNvbnN0LgorCisgICAgQHRwYXJhbSBWYWx1ZVR5cGUgbm9uLXBvaW50ZXIg
dHlwZSBjb21wYXRpYmxlIHRvIHRoZSBKU09OIHZhbHVlLCBmb3IKKyAgICBpbnN0YW5jZSBgaW50
YCBmb3IgSlNPTiBpbnRlZ2VyIG51bWJlcnMsIGBib29sYCBmb3IgSlNPTiBib29sZWFucywgb3IK
KyAgICBgc3RkOjp2ZWN0b3JgIHR5cGVzIGZvciBKU09OIGFycmF5cy4gVGhlIGNoYXJhY3RlciB0
eXBlIG9mIEByZWYgc3RyaW5nX3QKKyAgICBhcyB3ZWxsIGFzIGFuIGluaXRpYWxpemVyIGxpc3Qg
b2YgdGhpcyB0eXBlIGlzIGV4Y2x1ZGVkIHRvIGF2b2lkCisgICAgYW1iaWd1aXRpZXMgYXMgdGhl
c2UgdHlwZXMgaW1wbGljaXRseSBjb252ZXJ0IHRvIGBzdGQ6OnN0cmluZ2AuCisKKyAgICBAcmV0
dXJuIGNvcHkgb2YgdGhlIEpTT04gdmFsdWUsIGNvbnZlcnRlZCB0byB0eXBlIEBhIFZhbHVlVHlw
ZQorCisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGluIGNhc2UgcGFzc2VkIHR5cGUgQGEg
VmFsdWVUeXBlIGlzIGluY29tcGF0aWJsZQorICAgIHRvIEpTT04sIHRocm93biBieSBAcmVmIGdl
dCgpIGNvbnN0CisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlIEpT
T04gdmFsdWUuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3Mgc2V2
ZXJhbCBjb252ZXJzaW9ucyBmcm9tIEpTT04gdmFsdWVzCisgICAgdG8gb3RoZXIgdHlwZXMuIFRo
ZXJlIGEgZmV3IHRoaW5ncyB0byBub3RlOiAoMSkgRmxvYXRpbmctcG9pbnQgbnVtYmVycyBjYW4K
KyAgICBiZSBjb252ZXJ0ZWQgdG8gaW50ZWdlcnNcLCAoMikgQSBKU09OIGFycmF5IGNhbiBiZSBj
b252ZXJ0ZWQgdG8gYSBzdGFuZGFyZAorICAgIGBzdGQ6OnZlY3RvcjxzaG9ydD5gXCwgKDMpIEEg
SlNPTiBvYmplY3QgY2FuIGJlIGNvbnZlcnRlZCB0byBDKysKKyAgICBhc3NvY2lhdGl2ZSBjb250
YWluZXJzIHN1Y2ggYXMgYHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZ1wsCisgICAganNv
bj5gLixvcGVyYXRvcl9fVmFsdWVUeXBlfQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAg
ICAqLworICAgIHRlbXBsYXRlIDwgdHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZiA8CisgICAgICAgICAgICAgICAgICAgbm90IHN0ZDo6aXNfcG9pbnRlcjxWYWx1ZVR5
cGU+Ojp2YWx1ZSBhbmQKKyAgICAgICAgICAgICAgICAgICBub3Qgc3RkOjppc19zYW1lPFZhbHVl
VHlwZSwgdHlwZW5hbWUgc3RyaW5nX3Q6OnZhbHVlX3R5cGU+Ojp2YWx1ZQorI2lmbmRlZiBfTVND
X1ZFUiAgLy8gRml4IGZvciBpc3N1ZSAjMTY3IG9wZXJhdG9yPDwgYWJpZ3VpdHkgdW5kZXIgVlMy
MDE1CisgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBzdGQ6OmlzX3NhbWU8VmFsdWVUeXBlLCBz
dGQ6OmluaXRpYWxpemVyX2xpc3Q8dHlwZW5hbWUgc3RyaW5nX3Q6OnZhbHVlX3R5cGU+Pjo6dmFs
dWUKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICwgaW50ID46OnR5cGUgPSAwID4KKyAgICBv
cGVyYXRvciBWYWx1ZVR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gZGVsZWdhdGUgdGhl
IGNhbGwgdG8gZ2V0PD4oKSBjb25zdAorICAgICAgICByZXR1cm4gZ2V0PFZhbHVlVHlwZT4oKTsK
KyAgICB9CisKKyAgICAvLy8gQH0KKworCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAv
LyBlbGVtZW50IGFjY2VzcyAvLworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICAvLy8g
QG5hbWUgZWxlbWVudCBhY2Nlc3MKKyAgICAvLy8gQWNjZXNzIHRvIHRoZSBKU09OIHZhbHVlLgor
ICAgIC8vLyBAeworCisgICAgLyohCisgICAgQGJyaWVmIGFjY2VzcyBzcGVjaWZpZWQgYXJyYXkg
ZWxlbWVudCB3aXRoIGJvdW5kcyBjaGVja2luZworCisgICAgUmV0dXJucyBhIHJlZmVyZW5jZSB0
byB0aGUgZWxlbWVudCBhdCBzcGVjaWZpZWQgbG9jYXRpb24gQGEgaWR4LCB3aXRoCisgICAgYm91
bmRzIGNoZWNraW5nLgorCisgICAgQHBhcmFtW2luXSBpZHggIGluZGV4IG9mIHRoZSBlbGVtZW50
IHRvIGFjY2VzcworCisgICAgQHJldHVybiByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgYXQgaW5k
ZXggQGEgaWR4CisKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgdGhlIEpTT04gdmFs
dWUgaXMgbm90IGFuIGFycmF5OyBleGFtcGxlOgorICAgIGAiY2Fubm90IHVzZSBhdCgpIHdpdGgg
c3RyaW5nImAKKyAgICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2UgaWYgdGhlIGluZGV4IEBhIGlk
eCBpcyBvdXQgb2YgcmFuZ2Ugb2YgdGhlIGFycmF5OworICAgIHRoYXQgaXMsIGBpZHggPj0gc2l6
ZSgpYDsgZXhhbXBsZTogYCJhcnJheSBpbmRleCA3IGlzIG91dCBvZiByYW5nZSJgCisKKyAgICBA
Y29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBiZWxv
dyBzaG93cyBob3cgYXJyYXkgZWxlbWVudHMgY2FuIGJlIHJlYWQgYW5kCisgICAgd3JpdHRlbiB1
c2luZyBgYXQoKWAuLGF0X19zaXplX3R5cGV9CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAor
ICAgICovCisgICAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBpZHgpCisgICAgeworICAgICAgICAv
LyBhdCBvbmx5IHdvcmtzIGZvciBhcnJheXMKKyAgICAgICAgaWYgKGlzX2FycmF5KCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChpZHggPCBtX3ZhbHVlLmFycmF5LT5zaXplKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUuYXJyYXktPmF0KGlkeCk7CisgICAgICAgICAgICBU
aHJvdzxzdGQ6Om91dF9vZl9yYW5nZT4oImFycmF5IGluZGV4ICIgKyBzdGQ6OnRvX3N0cmluZyhp
ZHgpICsgIiBpcyBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fubm90IHVzZSBh
dCgpIHdpdGggIiArIHR5cGVfbmFtZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIQor
ICAgIEBicmllZiBhY2Nlc3Mgc3BlY2lmaWVkIGFycmF5IGVsZW1lbnQgd2l0aCBib3VuZHMgY2hl
Y2tpbmcKKworICAgIFJldHVybnMgYSBjb25zdCByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgYXQg
c3BlY2lmaWVkIGxvY2F0aW9uIEBhIGlkeCwKKyAgICB3aXRoIGJvdW5kcyBjaGVja2luZy4KKwor
ICAgIEBwYXJhbVtpbl0gaWR4ICBpbmRleCBvZiB0aGUgZWxlbWVudCB0byBhY2Nlc3MKKworICAg
IEByZXR1cm4gY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IGluZGV4IEBhIGlkeAor
CisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIHRoZSBKU09OIHZhbHVlIGlzIG5vdCBh
biBhcnJheTsgZXhhbXBsZToKKyAgICBgImNhbm5vdCB1c2UgYXQoKSB3aXRoIHN0cmluZyJgCisg
ICAgQHRocm93IHN0ZDo6b3V0X29mX3JhbmdlIGlmIHRoZSBpbmRleCBAYSBpZHggaXMgb3V0IG9m
IHJhbmdlIG9mIHRoZSBhcnJheTsKKyAgICB0aGF0IGlzLCBgaWR4ID49IHNpemUoKWA7IGV4YW1w
bGU6IGAiYXJyYXkgaW5kZXggNyBpcyBvdXQgb2YgcmFuZ2UiYAorCisgICAgQGNvbXBsZXhpdHkg
Q29uc3RhbnQuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93
IGFycmF5IGVsZW1lbnRzIGNhbiBiZSByZWFkIHVzaW5nCisgICAgYGF0KClgLixhdF9fc2l6ZV90
eXBlX2NvbnN0fQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGNvbnN0
X3JlZmVyZW5jZSBhdChzaXplX3R5cGUgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gYXQg
b25seSB3b3JrcyBmb3IgYXJyYXlzCisgICAgICAgIGlmIChpc19hcnJheSgpKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoaWR4IDwgbV92YWx1ZS5hcnJheS0+c2l6ZSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBtX3ZhbHVlLmFycmF5LT5hdChpZHgpOworICAgICAgICAgICAgVGhyb3c8
c3RkOjpvdXRfb2ZfcmFuZ2U+KCJhcnJheSBpbmRleCAiICsgc3RkOjp0b19zdHJpbmcoaWR4KSAr
ICIgaXMgb3V0IG9mIHJhbmdlIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oImNhbm5vdCB1c2UgYXQoKSB3
aXRoICIgKyB0eXBlX25hbWUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiEKKyAgICBA
YnJpZWYgYWNjZXNzIHNwZWNpZmllZCBvYmplY3QgZWxlbWVudCB3aXRoIGJvdW5kcyBjaGVja2lu
ZworCisgICAgUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCBhdCB3aXRoIHNwZWNp
ZmllZCBrZXkgQGEga2V5LCB3aXRoCisgICAgYm91bmRzIGNoZWNraW5nLgorCisgICAgQHBhcmFt
W2luXSBrZXkgIGtleSBvZiB0aGUgZWxlbWVudCB0byBhY2Nlc3MKKworICAgIEByZXR1cm4gcmVm
ZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IGtleSBAYSBrZXkKKworICAgIEB0aHJvdyBzdGQ6OmRv
bWFpbl9lcnJvciBpZiB0aGUgSlNPTiB2YWx1ZSBpcyBub3QgYW4gb2JqZWN0OyBleGFtcGxlOgor
ICAgIGAiY2Fubm90IHVzZSBhdCgpIHdpdGggYm9vbGVhbiJgCisgICAgQHRocm93IHN0ZDo6b3V0
X29mX3JhbmdlIGlmIHRoZSBrZXkgQGEga2V5IGlzIGlzIG5vdCBzdG9yZWQgaW4gdGhlIG9iamVj
dDsKKyAgICB0aGF0IGlzLCBgZmluZChrZXkpID09IGVuZCgpYDsgZXhhbXBsZTogYCJrZXkgInRo
ZSBmYXN0IiBub3QgZm91bmQiYAorCisgICAgQGNvbXBsZXhpdHkgTG9nYXJpdGhtaWMgaW4gdGhl
IHNpemUgb2YgdGhlIGNvbnRhaW5lci4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBi
ZWxvdyBzaG93cyBob3cgb2JqZWN0IGVsZW1lbnRzIGNhbiBiZSByZWFkIGFuZAorICAgIHdyaXR0
ZW4gdXNpbmcgYGF0KClgLixhdF9fb2JqZWN0X3Rfa2V5X3R5cGV9CisKKyAgICBAc2EgQHJlZiBv
cGVyYXRvcltdKGNvbnN0IHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlwZSYpIGZvciB1bmNoZWNr
ZWQKKyAgICBhY2Nlc3MgYnkgcmVmZXJlbmNlCisgICAgQHNhIEByZWYgdmFsdWUoKSBmb3IgYWNj
ZXNzIGJ5IHZhbHVlIHdpdGggYSBkZWZhdWx0IHZhbHVlCisKKyAgICBAc2luY2UgdmVyc2lvbiAx
LjAuMAorICAgICovCisgICAgcmVmZXJlbmNlIGF0KGNvbnN0IHR5cGVuYW1lIG9iamVjdF90Ojpr
ZXlfdHlwZSYga2V5KQorICAgIHsKKyAgICAgICAgLy8gYXQgb25seSB3b3JrcyBmb3Igb2JqZWN0
cworICAgICAgICBpZiAoaXNfb2JqZWN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICht
X3ZhbHVlLm9iamVjdC0+Y291bnQoa2V5KSA+IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
dmFsdWUub2JqZWN0LT5hdChrZXkpOworICAgICAgICAgICAgVGhyb3c8c3RkOjpvdXRfb2ZfcmFu
Z2U+KCJrZXkgJyIgKyBrZXkgKyAiJyBub3QgZm91bmQiKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fu
bm90IHVzZSBhdCgpIHdpdGggIiArIHR5cGVfbmFtZSgpKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8qIQorICAgIEBicmllZiBhY2Nlc3Mgc3BlY2lmaWVkIG9iamVjdCBlbGVtZW50IHdpdGgg
Ym91bmRzIGNoZWNraW5nCisKKyAgICBSZXR1cm5zIGEgY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBl
bGVtZW50IGF0IHdpdGggc3BlY2lmaWVkIGtleSBAYSBrZXksCisgICAgd2l0aCBib3VuZHMgY2hl
Y2tpbmcuCisKKyAgICBAcGFyYW1baW5dIGtleSAga2V5IG9mIHRoZSBlbGVtZW50IHRvIGFjY2Vz
cworCisgICAgQHJldHVybiBjb25zdCByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgYXQga2V5IEBh
IGtleQorCisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIHRoZSBKU09OIHZhbHVlIGlz
IG5vdCBhbiBvYmplY3Q7IGV4YW1wbGU6CisgICAgYCJjYW5ub3QgdXNlIGF0KCkgd2l0aCBib29s
ZWFuImAKKyAgICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2UgaWYgdGhlIGtleSBAYSBrZXkgaXMg
aXMgbm90IHN0b3JlZCBpbiB0aGUgb2JqZWN0OworICAgIHRoYXQgaXMsIGBmaW5kKGtleSkgPT0g
ZW5kKClgOyBleGFtcGxlOiBgImtleSAidGhlIGZhc3QiIG5vdCBmb3VuZCJgCisKKyAgICBAY29t
cGxleGl0eSBMb2dhcml0aG1pYyBpbiB0aGUgc2l6ZSBvZiB0aGUgY29udGFpbmVyLgorCisgICAg
QGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyBvYmplY3QgZWxlbWVudHMg
Y2FuIGJlIHJlYWQgdXNpbmcKKyAgICBgYXQoKWAuLGF0X19vYmplY3RfdF9rZXlfdHlwZV9jb25z
dH0KKworICAgIEBzYSBAcmVmIG9wZXJhdG9yW10oY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6Omtl
eV90eXBlJikgZm9yIHVuY2hlY2tlZAorICAgIGFjY2VzcyBieSByZWZlcmVuY2UKKyAgICBAc2Eg
QHJlZiB2YWx1ZSgpIGZvciBhY2Nlc3MgYnkgdmFsdWUgd2l0aCBhIGRlZmF1bHQgdmFsdWUKKwor
ICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBjb25zdF9yZWZlcmVuY2UgYXQo
Y29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlJiBrZXkpIGNvbnN0CisgICAgeworICAg
ICAgICAvLyBhdCBvbmx5IHdvcmtzIGZvciBvYmplY3RzCisgICAgICAgIGlmIChpc19vYmplY3Qo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fdmFsdWUub2JqZWN0LT5jb3VudChrZXkp
ID4gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV92YWx1ZS5vYmplY3QtPmF0KGtleSk7Cisg
ICAgICAgICAgICBUaHJvdzxzdGQ6Om91dF9vZl9yYW5nZT4oImtleSAnIiArIGtleSArICInIG5v
dCBmb3VuZCIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJjYW5ub3QgdXNlIGF0KCkgd2l0aCAiICsgdHlw
ZV9uYW1lKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGFjY2Vz
cyBzcGVjaWZpZWQgYXJyYXkgZWxlbWVudAorCisgICAgUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0
aGUgZWxlbWVudCBhdCBzcGVjaWZpZWQgbG9jYXRpb24gQGEgaWR4LgorCisgICAgQG5vdGUgSWYg
QGEgaWR4IGlzIGJleW9uZCB0aGUgcmFuZ2Ugb2YgdGhlIGFycmF5IChpLmUuLCBgaWR4ID49IHNp
emUoKWApLAorICAgIHRoZW4gdGhlIGFycmF5IGlzIHNpbGVudGx5IGZpbGxlZCB1cCB3aXRoIGBu
dWxsYCB2YWx1ZXMgdG8gbWFrZSBgaWR4YCBhCisgICAgdmFsaWQgcmVmZXJlbmNlIHRvIHRoZSBs
YXN0IHN0b3JlZCBlbGVtZW50LgorCisgICAgQHBhcmFtW2luXSBpZHggIGluZGV4IG9mIHRoZSBl
bGVtZW50IHRvIGFjY2VzcworCisgICAgQHJldHVybiByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQg
YXQgaW5kZXggQGEgaWR4CisKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgSlNPTiBp
cyBub3QgYW4gYXJyYXkgb3IgbnVsbDsgZXhhbXBsZToKKyAgICBgImNhbm5vdCB1c2Ugb3BlcmF0
b3JbXSB3aXRoIHN0cmluZyJgCisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudCBpZiBAYSBpZHgg
aXMgaW4gdGhlIHJhbmdlIG9mIHRoZSBhcnJheS4gT3RoZXJ3aXNlCisgICAgbGluZWFyIGluIGBp
ZHggLSBzaXplKClgLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJlbG93IHNob3dz
IGhvdyBhcnJheSBlbGVtZW50cyBjYW4gYmUgcmVhZCBhbmQKKyAgICB3cml0dGVuIHVzaW5nIGBb
XWAgb3BlcmF0b3IuIE5vdGUgdGhlIGFkZGl0aW9uIG9mIGBudWxsYAorICAgIHZhbHVlcy4sb3Bl
cmF0b3JhcnJheV9fc2l6ZV90eXBlfQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAq
LworICAgIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBpZHgpCisgICAgeworICAgICAg
ICAvLyBpbXBsaWNpdGx5IGNvbnZlcnQgbnVsbCB2YWx1ZSB0byBhbiBlbXB0eSBhcnJheQorICAg
ICAgICBpZiAoaXNfbnVsbCgpKQorICAgICAgICB7CisgICAgICAgICAgICBtX3R5cGUgPSB2YWx1
ZV90OjphcnJheTsKKyAgICAgICAgICAgIG1fdmFsdWUuYXJyYXkgPSBjcmVhdGU8YXJyYXlfdD4o
KTsKKyAgICAgICAgICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIG9wZXJhdG9yW10gb25seSB3b3JrcyBmb3IgYXJyYXlzCisgICAgICAgIGlmIChpc19hcnJh
eSgpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBmaWxsIHVwIGFycmF5IHdpdGggbnVsbCB2
YWx1ZXMgaWYgZ2l2ZW4gaWR4IGlzIG91dHNpZGUgcmFuZ2UKKyAgICAgICAgICAgIGlmIChpZHgg
Pj0gbV92YWx1ZS5hcnJheS0+c2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1fdmFsdWUuYXJyYXktPmluc2VydChtX3ZhbHVlLmFycmF5LT5lbmQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4IC0gbV92YWx1ZS5hcnJheS0+c2l6ZSgpICsg
MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzaWNfanNvbigpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUuYXJyYXktPm9wZXJh
dG9yW10oaWR4KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fubm90IHVzZSBvcGVyYXRvcltdIHdpdGgg
IiArIHR5cGVfbmFtZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIQorICAgIEBicmll
ZiBhY2Nlc3Mgc3BlY2lmaWVkIGFycmF5IGVsZW1lbnQKKworICAgIFJldHVybnMgYSBjb25zdCBy
ZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgYXQgc3BlY2lmaWVkIGxvY2F0aW9uIEBhIGlkeC4KKwor
ICAgIEBwYXJhbVtpbl0gaWR4ICBpbmRleCBvZiB0aGUgZWxlbWVudCB0byBhY2Nlc3MKKworICAg
IEByZXR1cm4gY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IGluZGV4IEBhIGlkeAor
CisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIEpTT04gaXMgbm90IGFuIGFycmF5OyBl
eGFtcGxlOiBgImNhbm5vdCB1c2UKKyAgICBvcGVyYXRvcltdIHdpdGggbnVsbCJgCisKKyAgICBA
Y29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBiZWxv
dyBzaG93cyBob3cgYXJyYXkgZWxlbWVudHMgY2FuIGJlIHJlYWQgdXNpbmcKKyAgICB0aGUgYFtd
YCBvcGVyYXRvci4sb3BlcmF0b3JhcnJheV9fc2l6ZV90eXBlX2NvbnN0fQorCisgICAgQHNpbmNl
IHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNp
emVfdHlwZSBpZHgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBjb25zdCBvcGVyYXRvcltdIG9u
bHkgd29ya3MgZm9yIGFycmF5cworICAgICAgICBpZiAoaXNfYXJyYXkoKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUuYXJyYXktPm9wZXJhdG9yW10oaWR4KTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9t
YWluX2Vycm9yPigiY2Fubm90IHVzZSBvcGVyYXRvcltdIHdpdGggIiArIHR5cGVfbmFtZSgpKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBhY2Nlc3Mgc3BlY2lmaWVk
IG9iamVjdCBlbGVtZW50CisKKyAgICBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50
IGF0IHdpdGggc3BlY2lmaWVkIGtleSBAYSBrZXkuCisKKyAgICBAbm90ZSBJZiBAYSBrZXkgaXMg
bm90IGZvdW5kIGluIHRoZSBvYmplY3QsIHRoZW4gaXQgaXMgc2lsZW50bHkgYWRkZWQgdG8KKyAg
ICB0aGUgb2JqZWN0IGFuZCBmaWxsZWQgd2l0aCBhIGBudWxsYCB2YWx1ZSB0byBtYWtlIGBrZXlg
IGEgdmFsaWQgcmVmZXJlbmNlLgorICAgIEluIGNhc2UgdGhlIHZhbHVlIHdhcyBgbnVsbGAgYmVm
b3JlLCBpdCBpcyBjb252ZXJ0ZWQgdG8gYW4gb2JqZWN0LgorCisgICAgQHBhcmFtW2luXSBrZXkg
IGtleSBvZiB0aGUgZWxlbWVudCB0byBhY2Nlc3MKKworICAgIEByZXR1cm4gcmVmZXJlbmNlIHRv
IHRoZSBlbGVtZW50IGF0IGtleSBAYSBrZXkKKworICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJv
ciBpZiBKU09OIGlzIG5vdCBhbiBvYmplY3Qgb3IgbnVsbDsgZXhhbXBsZToKKyAgICBgImNhbm5v
dCB1c2Ugb3BlcmF0b3JbXSB3aXRoIHN0cmluZyJgCisKKyAgICBAY29tcGxleGl0eSBMb2dhcml0
aG1pYyBpbiB0aGUgc2l6ZSBvZiB0aGUgY29udGFpbmVyLgorCisgICAgQGxpdmVleGFtcGxle1Ro
ZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyBvYmplY3QgZWxlbWVudHMgY2FuIGJlIHJlYWQgYW5k
CisgICAgd3JpdHRlbiB1c2luZyB0aGUgYFtdYCBvcGVyYXRvci4sb3BlcmF0b3JhcnJheV9fa2V5
X3R5cGV9CisKKyAgICBAc2EgQHJlZiBhdChjb25zdCB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5
cGUmKSBmb3IgYWNjZXNzIGJ5IHJlZmVyZW5jZQorICAgIHdpdGggcmFuZ2UgY2hlY2tpbmcKKyAg
ICBAc2EgQHJlZiB2YWx1ZSgpIGZvciBhY2Nlc3MgYnkgdmFsdWUgd2l0aCBhIGRlZmF1bHQgdmFs
dWUKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICByZWZlcmVuY2Ugb3Bl
cmF0b3JbXShjb25zdCB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUmIGtleSkKKyAgICB7Cisg
ICAgICAgIC8vIGltcGxpY2l0bHkgY29udmVydCBudWxsIHZhbHVlIHRvIGFuIGVtcHR5IG9iamVj
dAorICAgICAgICBpZiAoaXNfbnVsbCgpKQorICAgICAgICB7CisgICAgICAgICAgICBtX3R5cGUg
PSB2YWx1ZV90OjpvYmplY3Q7CisgICAgICAgICAgICBtX3ZhbHVlLm9iamVjdCA9IGNyZWF0ZTxv
YmplY3RfdD4oKTsKKyAgICAgICAgICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIG9wZXJhdG9yW10gb25seSB3b3JrcyBmb3Igb2JqZWN0cworICAgICAgICBp
ZiAoaXNfb2JqZWN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLm9i
amVjdC0+b3BlcmF0b3JbXShrZXkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJjYW5ub3QgdXNlIG9wZXJh
dG9yW10gd2l0aCAiICsgdHlwZV9uYW1lKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoh
CisgICAgQGJyaWVmIHJlYWQtb25seSBhY2Nlc3Mgc3BlY2lmaWVkIG9iamVjdCBlbGVtZW50CisK
KyAgICBSZXR1cm5zIGEgY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IHdpdGggc3Bl
Y2lmaWVkIGtleSBAYSBrZXkuIE5vCisgICAgYm91bmRzIGNoZWNraW5nIGlzIHBlcmZvcm1lZC4K
KworICAgIEB3YXJuaW5nIElmIHRoZSBlbGVtZW50IHdpdGgga2V5IEBhIGtleSBkb2VzIG5vdCBl
eGlzdCwgdGhlIGJlaGF2aW9yIGlzCisgICAgdW5kZWZpbmVkLgorCisgICAgQHBhcmFtW2luXSBr
ZXkgIGtleSBvZiB0aGUgZWxlbWVudCB0byBhY2Nlc3MKKworICAgIEByZXR1cm4gY29uc3QgcmVm
ZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IGtleSBAYSBrZXkKKworICAgIEBwcmUgVGhlIGVsZW1l
bnQgd2l0aCBrZXkgQGEga2V5IG11c3QgZXhpc3QuICoqVGhpcyBwcmVjb25kaXRpb24gaXMKKyAg
ICAgICAgIGVuZm9yY2VkIHdpdGggYW4gYXNzZXJ0aW9uLioqCisKKyAgICBAdGhyb3cgc3RkOjpk
b21haW5fZXJyb3IgaWYgSlNPTiBpcyBub3QgYW4gb2JqZWN0OyBleGFtcGxlOiBgImNhbm5vdCB1
c2UKKyAgICBvcGVyYXRvcltdIHdpdGggbnVsbCJgCisKKyAgICBAY29tcGxleGl0eSBMb2dhcml0
aG1pYyBpbiB0aGUgc2l6ZSBvZiB0aGUgY29udGFpbmVyLgorCisgICAgQGxpdmVleGFtcGxle1Ro
ZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyBvYmplY3QgZWxlbWVudHMgY2FuIGJlIHJlYWQgdXNp
bmcKKyAgICB0aGUgYFtdYCBvcGVyYXRvci4sb3BlcmF0b3JhcnJheV9fa2V5X3R5cGVfY29uc3R9
CisKKyAgICBAc2EgQHJlZiBhdChjb25zdCB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUmKSBm
b3IgYWNjZXNzIGJ5IHJlZmVyZW5jZQorICAgIHdpdGggcmFuZ2UgY2hlY2tpbmcKKyAgICBAc2Eg
QHJlZiB2YWx1ZSgpIGZvciBhY2Nlc3MgYnkgdmFsdWUgd2l0aCBhIGRlZmF1bHQgdmFsdWUKKwor
ICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBjb25zdF9yZWZlcmVuY2Ugb3Bl
cmF0b3JbXShjb25zdCB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUmIGtleSkgY29uc3QKKyAg
ICB7CisgICAgICAgIC8vIGNvbnN0IG9wZXJhdG9yW10gb25seSB3b3JrcyBmb3Igb2JqZWN0cwor
ICAgICAgICBpZiAoaXNfb2JqZWN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydCht
X3ZhbHVlLm9iamVjdC0+ZmluZChrZXkpICE9IG1fdmFsdWUub2JqZWN0LT5lbmQoKSk7CisgICAg
ICAgICAgICByZXR1cm4gbV92YWx1ZS5vYmplY3QtPmZpbmQoa2V5KS0+c2Vjb25kOworICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21h
aW5fZXJyb3I+KCJjYW5ub3QgdXNlIG9wZXJhdG9yW10gd2l0aCAiICsgdHlwZV9uYW1lKCkpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGFjY2VzcyBzcGVjaWZpZWQg
b2JqZWN0IGVsZW1lbnQKKworICAgIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQg
YXQgd2l0aCBzcGVjaWZpZWQga2V5IEBhIGtleS4KKworICAgIEBub3RlIElmIEBhIGtleSBpcyBu
b3QgZm91bmQgaW4gdGhlIG9iamVjdCwgdGhlbiBpdCBpcyBzaWxlbnRseSBhZGRlZCB0bworICAg
IHRoZSBvYmplY3QgYW5kIGZpbGxlZCB3aXRoIGEgYG51bGxgIHZhbHVlIHRvIG1ha2UgYGtleWAg
YSB2YWxpZCByZWZlcmVuY2UuCisgICAgSW4gY2FzZSB0aGUgdmFsdWUgd2FzIGBudWxsYCBiZWZv
cmUsIGl0IGlzIGNvbnZlcnRlZCB0byBhbiBvYmplY3QuCisKKyAgICBAcGFyYW1baW5dIGtleSAg
a2V5IG9mIHRoZSBlbGVtZW50IHRvIGFjY2VzcworCisgICAgQHJldHVybiByZWZlcmVuY2UgdG8g
dGhlIGVsZW1lbnQgYXQga2V5IEBhIGtleQorCisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9y
IGlmIEpTT04gaXMgbm90IGFuIG9iamVjdCBvciBudWxsOyBleGFtcGxlOgorICAgIGAiY2Fubm90
IHVzZSBvcGVyYXRvcltdIHdpdGggc3RyaW5nImAKKworICAgIEBjb21wbGV4aXR5IExvZ2FyaXRo
bWljIGluIHRoZSBzaXplIG9mIHRoZSBjb250YWluZXIuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhl
IGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93IG9iamVjdCBlbGVtZW50cyBjYW4gYmUgcmVhZCBhbmQK
KyAgICB3cml0dGVuIHVzaW5nIHRoZSBgW11gIG9wZXJhdG9yLixvcGVyYXRvcmFycmF5X19rZXlf
dHlwZX0KKworICAgIEBzYSBAcmVmIGF0KGNvbnN0IHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlw
ZSYpIGZvciBhY2Nlc3MgYnkgcmVmZXJlbmNlCisgICAgd2l0aCByYW5nZSBjaGVja2luZworICAg
IEBzYSBAcmVmIHZhbHVlKCkgZm9yIGFjY2VzcyBieSB2YWx1ZSB3aXRoIGEgZGVmYXVsdCB2YWx1
ZQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHN0ZDo6c2l6ZV90IG4+CisgICAgcmVmZXJlbmNlIG9wZXJhdG9yW10oVCAqICgma2V5
KVtuXSkKKyAgICB7CisgICAgICAgIHJldHVybiBvcGVyYXRvcltdKHN0YXRpY19jYXN0PGNvbnN0
IFQ+KGtleSkpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiByZWFkLW9ubHkgYWNjZXNz
IHNwZWNpZmllZCBvYmplY3QgZWxlbWVudAorCisgICAgUmV0dXJucyBhIGNvbnN0IHJlZmVyZW5j
ZSB0byB0aGUgZWxlbWVudCBhdCB3aXRoIHNwZWNpZmllZCBrZXkgQGEga2V5LiBObworICAgIGJv
dW5kcyBjaGVja2luZyBpcyBwZXJmb3JtZWQuCisKKyAgICBAd2FybmluZyBJZiB0aGUgZWxlbWVu
dCB3aXRoIGtleSBAYSBrZXkgZG9lcyBub3QgZXhpc3QsIHRoZSBiZWhhdmlvciBpcworICAgIHVu
ZGVmaW5lZC4KKworICAgIEBub3RlIFRoaXMgZnVuY3Rpb24gaXMgcmVxdWlyZWQgZm9yIGNvbXBh
dGliaWxpdHkgcmVhc29ucyB3aXRoIENsYW5nLgorCisgICAgQHBhcmFtW2luXSBrZXkgIGtleSBv
ZiB0aGUgZWxlbWVudCB0byBhY2Nlc3MKKworICAgIEByZXR1cm4gY29uc3QgcmVmZXJlbmNlIHRv
IHRoZSBlbGVtZW50IGF0IGtleSBAYSBrZXkKKworICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJv
ciBpZiBKU09OIGlzIG5vdCBhbiBvYmplY3Q7IGV4YW1wbGU6IGAiY2Fubm90IHVzZQorICAgIG9w
ZXJhdG9yW10gd2l0aCBudWxsImAKKworICAgIEBjb21wbGV4aXR5IExvZ2FyaXRobWljIGluIHRo
ZSBzaXplIG9mIHRoZSBjb250YWluZXIuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUg
YmVsb3cgc2hvd3MgaG93IG9iamVjdCBlbGVtZW50cyBjYW4gYmUgcmVhZCB1c2luZworICAgIHRo
ZSBgW11gIG9wZXJhdG9yLixvcGVyYXRvcmFycmF5X19rZXlfdHlwZV9jb25zdH0KKworICAgIEBz
YSBAcmVmIGF0KGNvbnN0IHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlwZSYpIGZvciBhY2Nlc3Mg
YnkgcmVmZXJlbmNlCisgICAgd2l0aCByYW5nZSBjaGVja2luZworICAgIEBzYSBAcmVmIHZhbHVl
KCkgZm9yIGFjY2VzcyBieSB2YWx1ZSB3aXRoIGEgZGVmYXVsdCB2YWx1ZQorCisgICAgQHNpbmNl
IHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6c2l6
ZV90IG4+CisgICAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oVCAqICgma2V5KVtuXSkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBvcGVyYXRvcltdKHN0YXRpY19jYXN0PGNvbnN0IFQ+
KGtleSkpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBhY2Nlc3Mgc3BlY2lmaWVkIG9i
amVjdCBlbGVtZW50CisKKyAgICBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0
IHdpdGggc3BlY2lmaWVkIGtleSBAYSBrZXkuCisKKyAgICBAbm90ZSBJZiBAYSBrZXkgaXMgbm90
IGZvdW5kIGluIHRoZSBvYmplY3QsIHRoZW4gaXQgaXMgc2lsZW50bHkgYWRkZWQgdG8KKyAgICB0
aGUgb2JqZWN0IGFuZCBmaWxsZWQgd2l0aCBhIGBudWxsYCB2YWx1ZSB0byBtYWtlIGBrZXlgIGEg
dmFsaWQgcmVmZXJlbmNlLgorICAgIEluIGNhc2UgdGhlIHZhbHVlIHdhcyBgbnVsbGAgYmVmb3Jl
LCBpdCBpcyBjb252ZXJ0ZWQgdG8gYW4gb2JqZWN0LgorCisgICAgQHBhcmFtW2luXSBrZXkgIGtl
eSBvZiB0aGUgZWxlbWVudCB0byBhY2Nlc3MKKworICAgIEByZXR1cm4gcmVmZXJlbmNlIHRvIHRo
ZSBlbGVtZW50IGF0IGtleSBAYSBrZXkKKworICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBp
ZiBKU09OIGlzIG5vdCBhbiBvYmplY3Qgb3IgbnVsbDsgZXhhbXBsZToKKyAgICBgImNhbm5vdCB1
c2Ugb3BlcmF0b3JbXSB3aXRoIHN0cmluZyJgCisKKyAgICBAY29tcGxleGl0eSBMb2dhcml0aG1p
YyBpbiB0aGUgc2l6ZSBvZiB0aGUgY29udGFpbmVyLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBl
eGFtcGxlIGJlbG93IHNob3dzIGhvdyBvYmplY3QgZWxlbWVudHMgY2FuIGJlIHJlYWQgYW5kCisg
ICAgd3JpdHRlbiB1c2luZyB0aGUgYFtdYCBvcGVyYXRvci4sb3BlcmF0b3JhcnJheV9fa2V5X3R5
cGV9CisKKyAgICBAc2EgQHJlZiBhdChjb25zdCB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUm
KSBmb3IgYWNjZXNzIGJ5IHJlZmVyZW5jZQorICAgIHdpdGggcmFuZ2UgY2hlY2tpbmcKKyAgICBA
c2EgQHJlZiB2YWx1ZSgpIGZvciBhY2Nlc3MgYnkgdmFsdWUgd2l0aCBhIGRlZmF1bHQgdmFsdWUK
KworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMS4wCisgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIHJlZmVyZW5jZSBvcGVyYXRvcltdKFQqIGtleSkKKyAgICB7CisgICAgICAgIC8v
IGltcGxpY2l0bHkgY29udmVydCBudWxsIHRvIG9iamVjdAorICAgICAgICBpZiAoaXNfbnVsbCgp
KQorICAgICAgICB7CisgICAgICAgICAgICBtX3R5cGUgPSB2YWx1ZV90OjpvYmplY3Q7CisgICAg
ICAgICAgICBtX3ZhbHVlID0gdmFsdWVfdDo6b2JqZWN0OworICAgICAgICAgICAgYXNzZXJ0X2lu
dmFyaWFudCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gYXQgb25seSB3b3JrcyBmb3Igb2Jq
ZWN0cworICAgICAgICBpZiAoaXNfb2JqZWN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtX3ZhbHVlLm9iamVjdC0+b3BlcmF0b3JbXShrZXkpOworICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJj
YW5ub3QgdXNlIG9wZXJhdG9yW10gd2l0aCAiICsgdHlwZV9uYW1lKCkpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIHJlYWQtb25seSBhY2Nlc3Mgc3BlY2lmaWVkIG9i
amVjdCBlbGVtZW50CisKKyAgICBSZXR1cm5zIGEgY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBlbGVt
ZW50IGF0IHdpdGggc3BlY2lmaWVkIGtleSBAYSBrZXkuIE5vCisgICAgYm91bmRzIGNoZWNraW5n
IGlzIHBlcmZvcm1lZC4KKworICAgIEB3YXJuaW5nIElmIHRoZSBlbGVtZW50IHdpdGgga2V5IEBh
IGtleSBkb2VzIG5vdCBleGlzdCwgdGhlIGJlaGF2aW9yIGlzCisgICAgdW5kZWZpbmVkLgorCisg
ICAgQHBhcmFtW2luXSBrZXkgIGtleSBvZiB0aGUgZWxlbWVudCB0byBhY2Nlc3MKKworICAgIEBy
ZXR1cm4gY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IGtleSBAYSBrZXkKKworICAg
IEBwcmUgVGhlIGVsZW1lbnQgd2l0aCBrZXkgQGEga2V5IG11c3QgZXhpc3QuICoqVGhpcyBwcmVj
b25kaXRpb24gaXMKKyAgICAgICAgIGVuZm9yY2VkIHdpdGggYW4gYXNzZXJ0aW9uLioqCisKKyAg
ICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgSlNPTiBpcyBub3QgYW4gb2JqZWN0OyBleGFt
cGxlOiBgImNhbm5vdCB1c2UKKyAgICBvcGVyYXRvcltdIHdpdGggbnVsbCJgCisKKyAgICBAY29t
cGxleGl0eSBMb2dhcml0aG1pYyBpbiB0aGUgc2l6ZSBvZiB0aGUgY29udGFpbmVyLgorCisgICAg
QGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyBvYmplY3QgZWxlbWVudHMg
Y2FuIGJlIHJlYWQgdXNpbmcKKyAgICB0aGUgYFtdYCBvcGVyYXRvci4sb3BlcmF0b3JhcnJheV9f
a2V5X3R5cGVfY29uc3R9CisKKyAgICBAc2EgQHJlZiBhdChjb25zdCB0eXBlbmFtZSBvYmplY3Rf
dDo6a2V5X3R5cGUmKSBmb3IgYWNjZXNzIGJ5IHJlZmVyZW5jZQorICAgIHdpdGggcmFuZ2UgY2hl
Y2tpbmcKKyAgICBAc2EgQHJlZiB2YWx1ZSgpIGZvciBhY2Nlc3MgYnkgdmFsdWUgd2l0aCBhIGRl
ZmF1bHQgdmFsdWUKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMS4wCisgICAgKi8KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorICAgIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKFQqIGtleSkg
Y29uc3QKKyAgICB7CisgICAgICAgIC8vIGF0IG9ubHkgd29ya3MgZm9yIG9iamVjdHMKKyAgICAg
ICAgaWYgKGlzX29iamVjdCgpKQorICAgICAgICB7CisgICAgICAgICAgICBhc3NlcnQobV92YWx1
ZS5vYmplY3QtPmZpbmQoa2V5KSAhPSBtX3ZhbHVlLm9iamVjdC0+ZW5kKCkpOworICAgICAgICAg
ICAgcmV0dXJuIG1fdmFsdWUub2JqZWN0LT5maW5kKGtleSktPnNlY29uZDsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vy
cm9yPigiY2Fubm90IHVzZSBvcGVyYXRvcltdIHdpdGggIiArIHR5cGVfbmFtZSgpKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBhY2Nlc3Mgc3BlY2lmaWVkIG9iamVj
dCBlbGVtZW50IHdpdGggZGVmYXVsdCB2YWx1ZQorCisgICAgUmV0dXJucyBlaXRoZXIgYSBjb3B5
IG9mIGFuIG9iamVjdCdzIGVsZW1lbnQgYXQgdGhlIHNwZWNpZmllZCBrZXkgQGEga2V5CisgICAg
b3IgYSBnaXZlbiBkZWZhdWx0IHZhbHVlIGlmIG5vIGVsZW1lbnQgd2l0aCBrZXkgQGEga2V5IGV4
aXN0cy4KKworICAgIFRoZSBmdW5jdGlvbiBpcyBiYXNpY2FsbHkgZXF1aXZhbGVudCB0byBleGVj
dXRpbmcKKyAgICBAY29kZSB7LmNwcH0KKyAgICB0cnkgeworICAgICAgICByZXR1cm4gYXQoa2V5
KTsKKyAgICB9IGNhdGNoKHN0ZDo6b3V0X29mX3JhbmdlKSB7CisgICAgICAgIHJldHVybiBkZWZh
dWx0X3ZhbHVlOworICAgIH0KKyAgICBAZW5kY29kZQorCisgICAgQG5vdGUgVW5saWtlIEByZWYg
YXQoY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlJiksIHRoaXMgZnVuY3Rpb24KKyAg
ICBkb2VzIG5vdCB0aHJvdyBpZiB0aGUgZ2l2ZW4ga2V5IEBhIGtleSB3YXMgbm90IGZvdW5kLgor
CisgICAgQG5vdGUgVW5saWtlIEByZWYgb3BlcmF0b3JbXShjb25zdCB0eXBlbmFtZSBvYmplY3Rf
dDo6a2V5X3R5cGUmIGtleSksIHRoaXMKKyAgICBmdW5jdGlvbiBkb2VzIG5vdCBpbXBsaWNpdGx5
IGFkZCBhbiBlbGVtZW50IHRvIHRoZSBwb3NpdGlvbiBkZWZpbmVkIGJ5IEBhCisgICAga2V5LiBU
aGlzIGZ1bmN0aW9uIGlzIGZ1cnRoZXJtb3JlIGFsc28gYXBwbGljYWJsZSB0byBjb25zdCBvYmpl
Y3RzLgorCisgICAgQHBhcmFtW2luXSBrZXkgIGtleSBvZiB0aGUgZWxlbWVudCB0byBhY2Nlc3MK
KyAgICBAcGFyYW1baW5dIGRlZmF1bHRfdmFsdWUgIHRoZSB2YWx1ZSB0byByZXR1cm4gaWYgQGEg
a2V5IGlzIG5vdCBmb3VuZAorCisgICAgQHRwYXJhbSBWYWx1ZVR5cGUgdHlwZSBjb21wYXRpYmxl
IHRvIEpTT04gdmFsdWVzLCBmb3IgaW5zdGFuY2UgYGludGAgZm9yCisgICAgSlNPTiBpbnRlZ2Vy
IG51bWJlcnMsIGBib29sYCBmb3IgSlNPTiBib29sZWFucywgb3IgYHN0ZDo6dmVjdG9yYCB0eXBl
cyBmb3IKKyAgICBKU09OIGFycmF5cy4gTm90ZSB0aGUgdHlwZSBvZiB0aGUgZXhwZWN0ZWQgdmFs
dWUgYXQgQGEga2V5IGFuZCB0aGUgZGVmYXVsdAorICAgIHZhbHVlIEBhIGRlZmF1bHRfdmFsdWUg
bXVzdCBiZSBjb21wYXRpYmxlLgorCisgICAgQHJldHVybiBjb3B5IG9mIHRoZSBlbGVtZW50IGF0
IGtleSBAYSBrZXkgb3IgQGEgZGVmYXVsdF92YWx1ZSBpZiBAYSBrZXkKKyAgICBpcyBub3QgZm91
bmQKKworICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBKU09OIGlzIG5vdCBhbiBvYmpl
Y3Q7IGV4YW1wbGU6IGAiY2Fubm90IHVzZQorICAgIHZhbHVlKCkgd2l0aCBudWxsImAKKworICAg
IEBjb21wbGV4aXR5IExvZ2FyaXRobWljIGluIHRoZSBzaXplIG9mIHRoZSBjb250YWluZXIuCisK
KyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93IG9iamVjdCBlbGVt
ZW50cyBjYW4gYmUgcXVlcmllZAorICAgIHdpdGggYSBkZWZhdWx0IHZhbHVlLixiYXNpY19qc29u
X192YWx1ZX0KKworICAgIEBzYSBAcmVmIGF0KGNvbnN0IHR5cGVuYW1lIG9iamVjdF90OjprZXlf
dHlwZSYpIGZvciBhY2Nlc3MgYnkgcmVmZXJlbmNlCisgICAgd2l0aCByYW5nZSBjaGVja2luZwor
ICAgIEBzYSBAcmVmIG9wZXJhdG9yW10oY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBl
JikgZm9yIHVuY2hlY2tlZAorICAgIGFjY2VzcyBieSByZWZlcmVuY2UKKworICAgIEBzaW5jZSB2
ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICB0ZW1wbGF0ZTxjbGFzcyBWYWx1ZVR5cGUsIHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPAorICAgICAgICAgICAgICAgICBzdGQ6OmlzX2NvbnZlcnRpYmxl
PGJhc2ljX2pzb25fdCwgVmFsdWVUeXBlPjo6dmFsdWUsIGludD46OnR5cGUgPSAwPgorICAgIFZh
bHVlVHlwZSB2YWx1ZShjb25zdCB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUmIGtleSwgVmFs
dWVUeXBlIGRlZmF1bHRfdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICAvLyBhdCBvbmx5IHdv
cmtzIGZvciBvYmplY3RzCisgICAgICAgIGlmIChpc19vYmplY3QoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gaWYga2V5IGlzIGZvdW5kLCByZXR1cm4gdmFsdWUgYW5kIGdpdmVuIGRlZmF1
bHQgdmFsdWUgb3RoZXJ3aXNlCisgICAgICAgICAgICBjb25zdCBhdXRvIGl0ID0gZmluZChrZXkp
OworICAgICAgICAgICAgaWYgKGl0ICE9IGVuZCgpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiAqaXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRfdmFsdWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBU
aHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oImNhbm5vdCB1c2UgdmFsdWUoKSB3aXRoICIgKyB0eXBl
X25hbWUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgb3Zlcmxv
YWQgZm9yIGEgZGVmYXVsdCB2YWx1ZSBvZiB0eXBlIGNvbnN0IGNoYXIqCisgICAgQGNvcHlkb2Mg
YmFzaWNfanNvbjo6dmFsdWUoY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlJiwgVmFs
dWVUeXBlKSBjb25zdAorICAgICovCisgICAgc3RyaW5nX3QgdmFsdWUoY29uc3QgdHlwZW5hbWUg
b2JqZWN0X3Q6OmtleV90eXBlJiBrZXksIGNvbnN0IGNoYXIqIGRlZmF1bHRfdmFsdWUpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUoa2V5LCBzdHJpbmdfdChkZWZhdWx0X3ZhbHVl
KSk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGFjY2VzcyBzcGVjaWZpZWQgb2JqZWN0
IGVsZW1lbnQgdmlhIEpTT04gUG9pbnRlciB3aXRoIGRlZmF1bHQgdmFsdWUKKworICAgIFJldHVy
bnMgZWl0aGVyIGEgY29weSBvZiBhbiBvYmplY3QncyBlbGVtZW50IGF0IHRoZSBzcGVjaWZpZWQg
a2V5IEBhIGtleQorICAgIG9yIGEgZ2l2ZW4gZGVmYXVsdCB2YWx1ZSBpZiBubyBlbGVtZW50IHdp
dGgga2V5IEBhIGtleSBleGlzdHMuCisKKyAgICBUaGUgZnVuY3Rpb24gaXMgYmFzaWNhbGx5IGVx
dWl2YWxlbnQgdG8gZXhlY3V0aW5nCisgICAgQGNvZGUgey5jcHB9CisgICAgdHJ5IHsKKyAgICAg
ICAgcmV0dXJuIGF0KHB0cik7CisgICAgfSBjYXRjaChzdGQ6Om91dF9vZl9yYW5nZSkgeworICAg
ICAgICByZXR1cm4gZGVmYXVsdF92YWx1ZTsKKyAgICB9CisgICAgQGVuZGNvZGUKKworICAgIEBu
b3RlIFVubGlrZSBAcmVmIGF0KGNvbnN0IGpzb25fcG9pbnRlciYpLCB0aGlzIGZ1bmN0aW9uIGRv
ZXMgbm90IHRocm93CisgICAgaWYgdGhlIGdpdmVuIGtleSBAYSBrZXkgd2FzIG5vdCBmb3VuZC4K
KworICAgIEBwYXJhbVtpbl0gcHRyICBhIEpTT04gcG9pbnRlciB0byB0aGUgZWxlbWVudCB0byBh
Y2Nlc3MKKyAgICBAcGFyYW1baW5dIGRlZmF1bHRfdmFsdWUgIHRoZSB2YWx1ZSB0byByZXR1cm4g
aWYgQGEgcHRyIGZvdW5kIG5vIHZhbHVlCisKKyAgICBAdHBhcmFtIFZhbHVlVHlwZSB0eXBlIGNv
bXBhdGlibGUgdG8gSlNPTiB2YWx1ZXMsIGZvciBpbnN0YW5jZSBgaW50YCBmb3IKKyAgICBKU09O
IGludGVnZXIgbnVtYmVycywgYGJvb2xgIGZvciBKU09OIGJvb2xlYW5zLCBvciBgc3RkOjp2ZWN0
b3JgIHR5cGVzIGZvcgorICAgIEpTT04gYXJyYXlzLiBOb3RlIHRoZSB0eXBlIG9mIHRoZSBleHBl
Y3RlZCB2YWx1ZSBhdCBAYSBrZXkgYW5kIHRoZSBkZWZhdWx0CisgICAgdmFsdWUgQGEgZGVmYXVs
dF92YWx1ZSBtdXN0IGJlIGNvbXBhdGlibGUuCisKKyAgICBAcmV0dXJuIGNvcHkgb2YgdGhlIGVs
ZW1lbnQgYXQga2V5IEBhIGtleSBvciBAYSBkZWZhdWx0X3ZhbHVlIGlmIEBhIGtleQorICAgIGlz
IG5vdCBmb3VuZAorCisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIEpTT04gaXMgbm90
IGFuIG9iamVjdDsgZXhhbXBsZTogYCJjYW5ub3QgdXNlCisgICAgdmFsdWUoKSB3aXRoIG51bGwi
YAorCisgICAgQGNvbXBsZXhpdHkgTG9nYXJpdGhtaWMgaW4gdGhlIHNpemUgb2YgdGhlIGNvbnRh
aW5lci4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyBob3cgb2Jq
ZWN0IGVsZW1lbnRzIGNhbiBiZSBxdWVyaWVkCisgICAgd2l0aCBhIGRlZmF1bHQgdmFsdWUuLGJh
c2ljX2pzb25fX3ZhbHVlX3B0cn0KKworICAgIEBzYSBAcmVmIG9wZXJhdG9yW10oY29uc3QganNv
bl9wb2ludGVyJikgZm9yIHVuY2hlY2tlZCBhY2Nlc3MgYnkgcmVmZXJlbmNlCisKKyAgICBAc2lu
Y2UgdmVyc2lvbiAyLjAuMgorICAgICovCisgICAgdGVtcGxhdGU8Y2xhc3MgVmFsdWVUeXBlLCB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKKyAgICAgICAgICAgICAgICAgc3RkOjppc19jb252ZXJ0
aWJsZTxiYXNpY19qc29uX3QsIFZhbHVlVHlwZT46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4KKyAg
ICBWYWx1ZVR5cGUgdmFsdWUoY29uc3QganNvbl9wb2ludGVyJiBwdHIsIFZhbHVlVHlwZSBkZWZh
dWx0X3ZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gYXQgb25seSB3b3JrcyBmb3Igb2Jq
ZWN0cworICAgICAgICBpZiAoaXNfb2JqZWN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBwdHIuZ2V0X2NoZWNrZWQodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oImNhbm5vdCB1c2Ug
dmFsdWUoKSB3aXRoICIgKyB0eXBlX25hbWUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
KiEKKyAgICBAYnJpZWYgb3ZlcmxvYWQgZm9yIGEgZGVmYXVsdCB2YWx1ZSBvZiB0eXBlIGNvbnN0
IGNoYXIqCisgICAgQGNvcHlkb2MgYmFzaWNfanNvbjo6dmFsdWUoY29uc3QganNvbl9wb2ludGVy
JiwgVmFsdWVUeXBlKSBjb25zdAorICAgICovCisgICAgc3RyaW5nX3QgdmFsdWUoY29uc3QganNv
bl9wb2ludGVyJiBwdHIsIGNvbnN0IGNoYXIqIGRlZmF1bHRfdmFsdWUpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gdmFsdWUocHRyLCBzdHJpbmdfdChkZWZhdWx0X3ZhbHVlKSk7CisgICAg
fQorCisgICAgLyohCisgICAgQGJyaWVmIGFjY2VzcyB0aGUgZmlyc3QgZWxlbWVudAorCisgICAg
UmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgY29udGFpbmVy
LiBGb3IgYSBKU09OCisgICAgY29udGFpbmVyIGBjYCwgdGhlIGV4cHJlc3Npb24gYGMuZnJvbnQo
KWAgaXMgZXF1aXZhbGVudCB0byBgKmMuYmVnaW4oKWAuCisKKyAgICBAcmV0dXJuIEluIGNhc2Ug
b2YgYSBzdHJ1Y3R1cmVkIHR5cGUgKGFycmF5IG9yIG9iamVjdCksIGEgcmVmZXJlbmNlIHRvIHRo
ZQorICAgIGZpcnN0IGVsZW1lbnQgaXMgcmV0dXJuZWQuIEluIGNhc3Qgb2YgbnVtYmVyLCBzdHJp
bmcsIG9yIGJvb2xlYW4gdmFsdWVzLCBhCisgICAgcmVmZXJlbmNlIHRvIHRoZSB2YWx1ZSBpcyBy
ZXR1cm5lZC4KKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQHByZSBUaGUgSlNP
TiB2YWx1ZSBtdXN0IG5vdCBiZSBgbnVsbGAgKHdvdWxkIHRocm93IGBzdGQ6Om91dF9vZl9yYW5n
ZWApCisgICAgb3IgYW4gZW1wdHkgYXJyYXkgb3Igb2JqZWN0ICh1bmRlZmluZWQgYmVoYXZpb3Is
ICoqZ3VhcmRlZCBieQorICAgIGFzc2VydGlvbnMqKikuCisgICAgQHBvc3QgVGhlIEpTT04gdmFs
dWUgcmVtYWlucyB1bmNoYW5nZWQuCisKKyAgICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2Ugd2hl
biBjYWxsZWQgb24gYG51bGxgIHZhbHVlCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2lu
ZyBjb2RlIHNob3dzIGFuIGV4YW1wbGUgZm9yIGBmcm9udCgpYC4sZnJvbnR9CisKKyAgICBAc2Eg
QHJlZiBiYWNrKCkgLS0gYWNjZXNzIHRoZSBsYXN0IGVsZW1lbnQKKworICAgIEBzaW5jZSB2ZXJz
aW9uIDEuMC4wCisgICAgKi8KKyAgICByZWZlcmVuY2UgZnJvbnQoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuICpiZWdpbigpOworICAgIH0KKworICAgIC8qIQorICAgIEBjb3B5ZG9jIGJhc2ljX2pz
b246OmZyb250KCkKKyAgICAqLworICAgIGNvbnN0X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gKmNiZWdpbigpOworICAgIH0KKworICAgIC8qIQorICAgIEBi
cmllZiBhY2Nlc3MgdGhlIGxhc3QgZWxlbWVudAorCisgICAgUmV0dXJucyBhIHJlZmVyZW5jZSB0
byB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSBjb250YWluZXIuIEZvciBhIEpTT04KKyAgICBjb250
YWluZXIgYGNgLCB0aGUgZXhwcmVzc2lvbiBgYy5iYWNrKClgIGlzIGVxdWl2YWxlbnQgdG8KKyAg
ICBAY29kZSB7LmNwcH0KKyAgICBhdXRvIHRtcCA9IGMuZW5kKCk7CisgICAgLS10bXA7CisgICAg
cmV0dXJuICp0bXA7CisgICAgQGVuZGNvZGUKKworICAgIEByZXR1cm4gSW4gY2FzZSBvZiBhIHN0
cnVjdHVyZWQgdHlwZSAoYXJyYXkgb3Igb2JqZWN0KSwgYSByZWZlcmVuY2UgdG8gdGhlCisgICAg
bGFzdCBlbGVtZW50IGlzIHJldHVybmVkLiBJbiBjYXN0IG9mIG51bWJlciwgc3RyaW5nLCBvciBi
b29sZWFuIHZhbHVlcywgYQorICAgIHJlZmVyZW5jZSB0byB0aGUgdmFsdWUgaXMgcmV0dXJuZWQu
CisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEBwcmUgVGhlIEpTT04gdmFsdWUg
bXVzdCBub3QgYmUgYG51bGxgICh3b3VsZCB0aHJvdyBgc3RkOjpvdXRfb2ZfcmFuZ2VgKQorICAg
IG9yIGFuIGVtcHR5IGFycmF5IG9yIG9iamVjdCAodW5kZWZpbmVkIGJlaGF2aW9yLCAqKmd1YXJk
ZWQgYnkKKyAgICBhc3NlcnRpb25zKiopLgorICAgIEBwb3N0IFRoZSBKU09OIHZhbHVlIHJlbWFp
bnMgdW5jaGFuZ2VkLgorCisgICAgQHRocm93IHN0ZDo6b3V0X29mX3JhbmdlIHdoZW4gY2FsbGVk
IG9uIGBudWxsYCB2YWx1ZS4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUg
c2hvd3MgYW4gZXhhbXBsZSBmb3IgYGJhY2soKWAuLGJhY2t9CisKKyAgICBAc2EgQHJlZiBmcm9u
dCgpIC0tIGFjY2VzcyB0aGUgZmlyc3QgZWxlbWVudAorCisgICAgQHNpbmNlIHZlcnNpb24gMS4w
LjAKKyAgICAqLworICAgIHJlZmVyZW5jZSBiYWNrKCkKKyAgICB7CisgICAgICAgIGF1dG8gdG1w
ID0gZW5kKCk7CisgICAgICAgIC0tdG1wOworICAgICAgICByZXR1cm4gKnRtcDsKKyAgICB9CisK
KyAgICAvKiEKKyAgICBAY29weWRvYyBiYXNpY19qc29uOjpiYWNrKCkKKyAgICAqLworICAgIGNv
bnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gdG1wID0gY2Vu
ZCgpOworICAgICAgICAtLXRtcDsKKyAgICAgICAgcmV0dXJuICp0bXA7CisgICAgfQorCisgICAg
LyohCisgICAgQGJyaWVmIHJlbW92ZSBlbGVtZW50IGdpdmVuIGFuIGl0ZXJhdG9yCisKKyAgICBS
ZW1vdmVzIHRoZSBlbGVtZW50IHNwZWNpZmllZCBieSBpdGVyYXRvciBAYSBwb3MuIFRoZSBpdGVy
YXRvciBAYSBwb3MgbXVzdAorICAgIGJlIHZhbGlkIGFuZCBkZXJlZmVyZW5jZWFibGUuIFRodXMg
dGhlIGBlbmQoKWAgaXRlcmF0b3IgKHdoaWNoIGlzIHZhbGlkLAorICAgIGJ1dCBpcyBub3QgZGVy
ZWZlcmVuY2VhYmxlKSBjYW5ub3QgYmUgdXNlZCBhcyBhIHZhbHVlIGZvciBAYSBwb3MuCisKKyAg
ICBJZiBjYWxsZWQgb24gYSBwcmltaXRpdmUgdHlwZSBvdGhlciB0aGFuIGBudWxsYCwgdGhlIHJl
c3VsdGluZyBKU09OIHZhbHVlCisgICAgd2lsbCBiZSBgbnVsbGAuCisKKyAgICBAcGFyYW1baW5d
IHBvcyBpdGVyYXRvciB0byB0aGUgZWxlbWVudCB0byByZW1vdmUKKyAgICBAcmV0dXJuIEl0ZXJh
dG9yIGZvbGxvd2luZyB0aGUgbGFzdCByZW1vdmVkIGVsZW1lbnQuIElmIHRoZSBpdGVyYXRvciBA
YQorICAgIHBvcyByZWZlcnMgdG8gdGhlIGxhc3QgZWxlbWVudCwgdGhlIGBlbmQoKWAgaXRlcmF0
b3IgaXMgcmV0dXJuZWQuCisKKyAgICBAdHBhcmFtIEl0ZXJhdG9yVHlwZSBhbiBAcmVmIGl0ZXJh
dG9yIG9yIEByZWYgY29uc3RfaXRlcmF0b3IKKworICAgIEBwb3N0IEludmFsaWRhdGVzIGl0ZXJh
dG9ycyBhbmQgcmVmZXJlbmNlcyBhdCBvciBhZnRlciB0aGUgcG9pbnQgb2YgdGhlCisgICAgZXJh
c2UsIGluY2x1ZGluZyB0aGUgYGVuZCgpYCBpdGVyYXRvci4KKworICAgIEB0aHJvdyBzdGQ6OmRv
bWFpbl9lcnJvciBpZiBjYWxsZWQgb24gYSBgbnVsbGAgdmFsdWU7IGV4YW1wbGU6IGAiY2Fubm90
CisgICAgdXNlIGVyYXNlKCkgd2l0aCBudWxsImAKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJy
b3IgaWYgY2FsbGVkIG9uIGFuIGl0ZXJhdG9yIHdoaWNoIGRvZXMgbm90IGJlbG9uZyB0bworICAg
IHRoZSBjdXJyZW50IEpTT04gdmFsdWU7IGV4YW1wbGU6IGAiaXRlcmF0b3IgZG9lcyBub3QgZml0
IGN1cnJlbnQgdmFsdWUiYAorICAgIEB0aHJvdyBzdGQ6Om91dF9vZl9yYW5nZSBpZiBjYWxsZWQg
b24gYSBwcmltaXRpdmUgdHlwZSB3aXRoIGludmFsaWQKKyAgICBpdGVyYXRvciAoaS5lLiwgYW55
IGl0ZXJhdG9yIHdoaWNoIGlzIG5vdCBgYmVnaW4oKWApOyBleGFtcGxlOiBgIml0ZXJhdG9yCisg
ICAgb3V0IG9mIHJhbmdlImAKKworICAgIEBjb21wbGV4aXR5IFRoZSBjb21wbGV4aXR5IGRlcGVu
ZHMgb24gdGhlIHR5cGU6CisgICAgLSBvYmplY3RzOiBhbW9ydGl6ZWQgY29uc3RhbnQKKyAgICAt
IGFycmF5czogbGluZWFyIGluIGRpc3RhbmNlIGJldHdlZW4gcG9zIGFuZCB0aGUgZW5kIG9mIHRo
ZSBjb250YWluZXIKKyAgICAtIHN0cmluZ3M6IGxpbmVhciBpbiB0aGUgbGVuZ3RoIG9mIHRoZSBz
dHJpbmcKKyAgICAtIG90aGVyIHR5cGVzOiBjb25zdGFudAorCisgICAgQGxpdmVleGFtcGxle1Ro
ZSBleGFtcGxlIHNob3dzIHRoZSByZXN1bHQgb2YgYGVyYXNlKClgIGZvciBkaWZmZXJlbnQgSlNP
TgorICAgIHR5cGVzLixlcmFzZV9fSXRlcmF0b3JUeXBlfQorCisgICAgQHNhIEByZWYgZXJhc2Uo
SXRlcmF0b3JUeXBlLCBJdGVyYXRvclR5cGUpIC0tIHJlbW92ZXMgdGhlIGVsZW1lbnRzIGluCisg
ICAgdGhlIGdpdmVuIHJhbmdlCisgICAgQHNhIEByZWYgZXJhc2UoY29uc3QgdHlwZW5hbWUgb2Jq
ZWN0X3Q6OmtleV90eXBlJikgLS0gcmVtb3ZlcyB0aGUgZWxlbWVudAorICAgIGZyb20gYW4gb2Jq
ZWN0IGF0IHRoZSBnaXZlbiBrZXkKKyAgICBAc2EgQHJlZiBlcmFzZShjb25zdCBzaXplX3R5cGUp
IC0tIHJlbW92ZXMgdGhlIGVsZW1lbnQgZnJvbSBhbiBhcnJheSBhdAorICAgIHRoZSBnaXZlbiBp
bmRleAorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIHRlbXBsYXRlPGNs
YXNzIEl0ZXJhdG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8CisgICAgICAgICAgICAg
ICAgIHN0ZDo6aXNfc2FtZTxJdGVyYXRvclR5cGUsIHR5cGVuYW1lIGJhc2ljX2pzb25fdDo6aXRl
cmF0b3I+Ojp2YWx1ZSBvcgorICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8SXRlcmF0b3JU
eXBlLCB0eXBlbmFtZSBiYXNpY19qc29uX3Q6OmNvbnN0X2l0ZXJhdG9yPjo6dmFsdWUsIGludD46
OnR5cGUKKyAgICAgICAgICAgICA9IDA+CisgICAgSXRlcmF0b3JUeXBlIGVyYXNlKEl0ZXJhdG9y
VHlwZSBwb3MpCisgICAgeworICAgICAgICAvLyBtYWtlIHN1cmUgaXRlcmF0b3IgZml0cyB0aGUg
Y3VycmVudCB2YWx1ZQorICAgICAgICBpZiAodGhpcyAhPSBwb3MubV9vYmplY3QpCisgICAgICAg
IHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiaXRlcmF0b3IgZG9lcyBu
b3QgZml0IGN1cnJlbnQgdmFsdWUiKTsKKyAgICAgICAgfQorCisgICAgICAgIEl0ZXJhdG9yVHlw
ZSByZXN1bHQgPSBlbmQoKTsKKworICAgICAgICBzd2l0Y2ggKG1fdHlwZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgorICAgICAgICAgICAgY2FzZSB2YWx1
ZV90OjpudW1iZXJfZmxvYXQ6CisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9pbnRl
Z2VyOgorICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQ6CisgICAgICAg
ICAgICBjYXNlIHZhbHVlX3Q6OnN0cmluZzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAobm90IHBvcy5tX2l0LnByaW1pdGl2ZV9pdGVyYXRvci5pc19iZWdpbigpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjpvdXRfb2ZfcmFuZ2U+
KCJpdGVyYXRvciBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBpZiAoaXNfc3RyaW5nKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBBbGxvY2F0b3JUeXBlPHN0cmluZ190PiBhbGxvYzsKKyAgICAgICAgICAgICAgICAg
ICAgYWxsb2MuZGVzdHJveShtX3ZhbHVlLnN0cmluZyk7CisgICAgICAgICAgICAgICAgICAgIGFs
bG9jLmRlYWxsb2NhdGUobV92YWx1ZS5zdHJpbmcsIDEpOworICAgICAgICAgICAgICAgICAgICBt
X3ZhbHVlLnN0cmluZyA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgbV90eXBlID0gdmFsdWVfdDo6bnVsbDsKKyAgICAgICAgICAgICAgICBhc3NlcnRfaW52
YXJpYW50KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGNhc2UgdmFsdWVfdDo6b2JqZWN0OgorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJlc3VsdC5tX2l0Lm9iamVjdF9pdGVyYXRvciA9IG1fdmFsdWUub2JqZWN0LT5lcmFzZShw
b3MubV9pdC5vYmplY3RfaXRlcmF0b3IpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5OgorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJlc3VsdC5tX2l0LmFycmF5X2l0ZXJhdG9yID0gbV92YWx1ZS5h
cnJheS0+ZXJhc2UocG9zLm1faXQuYXJyYXlfaXRlcmF0b3IpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fubm90IHVzZSBl
cmFzZSgpIHdpdGggIiArIHR5cGVfbmFtZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIHJl
bW92ZSBlbGVtZW50cyBnaXZlbiBhbiBpdGVyYXRvciByYW5nZQorCisgICAgUmVtb3ZlcyB0aGUg
ZWxlbWVudCBzcGVjaWZpZWQgYnkgdGhlIHJhbmdlIGBbZmlyc3Q7IGxhc3QpYC4gVGhlIGl0ZXJh
dG9yCisgICAgQGEgZmlyc3QgZG9lcyBub3QgbmVlZCB0byBiZSBkZXJlZmVyZW5jZWFibGUgaWYg
YGZpcnN0ID09IGxhc3RgOiBlcmFzaW5nCisgICAgYW4gZW1wdHkgcmFuZ2UgaXMgYSBuby1vcC4K
KworICAgIElmIGNhbGxlZCBvbiBhIHByaW1pdGl2ZSB0eXBlIG90aGVyIHRoYW4gYG51bGxgLCB0
aGUgcmVzdWx0aW5nIEpTT04gdmFsdWUKKyAgICB3aWxsIGJlIGBudWxsYC4KKworICAgIEBwYXJh
bVtpbl0gZmlyc3QgaXRlcmF0b3IgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcmFuZ2UgdG8gcmVt
b3ZlCisgICAgQHBhcmFtW2luXSBsYXN0IGl0ZXJhdG9yIHBhc3QgdGhlIGVuZCBvZiB0aGUgcmFu
Z2UgdG8gcmVtb3ZlCisgICAgQHJldHVybiBJdGVyYXRvciBmb2xsb3dpbmcgdGhlIGxhc3QgcmVt
b3ZlZCBlbGVtZW50LiBJZiB0aGUgaXRlcmF0b3IgQGEKKyAgICBzZWNvbmQgcmVmZXJzIHRvIHRo
ZSBsYXN0IGVsZW1lbnQsIHRoZSBgZW5kKClgIGl0ZXJhdG9yIGlzIHJldHVybmVkLgorCisgICAg
QHRwYXJhbSBJdGVyYXRvclR5cGUgYW4gQHJlZiBpdGVyYXRvciBvciBAcmVmIGNvbnN0X2l0ZXJh
dG9yCisKKyAgICBAcG9zdCBJbnZhbGlkYXRlcyBpdGVyYXRvcnMgYW5kIHJlZmVyZW5jZXMgYXQg
b3IgYWZ0ZXIgdGhlIHBvaW50IG9mIHRoZQorICAgIGVyYXNlLCBpbmNsdWRpbmcgdGhlIGBlbmQo
KWAgaXRlcmF0b3IuCisKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgY2FsbGVkIG9u
IGEgYG51bGxgIHZhbHVlOyBleGFtcGxlOiBgImNhbm5vdAorICAgIHVzZSBlcmFzZSgpIHdpdGgg
bnVsbCJgCisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIGNhbGxlZCBvbiBpdGVyYXRv
cnMgd2hpY2ggZG9lcyBub3QgYmVsb25nIHRvCisgICAgdGhlIGN1cnJlbnQgSlNPTiB2YWx1ZTsg
ZXhhbXBsZTogYCJpdGVyYXRvcnMgZG8gbm90IGZpdCBjdXJyZW50IHZhbHVlImAKKyAgICBAdGhy
b3cgc3RkOjpvdXRfb2ZfcmFuZ2UgaWYgY2FsbGVkIG9uIGEgcHJpbWl0aXZlIHR5cGUgd2l0aCBp
bnZhbGlkCisgICAgaXRlcmF0b3JzIChpLmUuLCBpZiBgZmlyc3QgIT0gYmVnaW4oKWAgYW5kIGBs
YXN0ICE9IGVuZCgpYCk7IGV4YW1wbGU6CisgICAgYCJpdGVyYXRvcnMgb3V0IG9mIHJhbmdlImAK
KworICAgIEBjb21wbGV4aXR5IFRoZSBjb21wbGV4aXR5IGRlcGVuZHMgb24gdGhlIHR5cGU6Cisg
ICAgLSBvYmplY3RzOiBgbG9nKHNpemUoKSkgKyBzdGQ6OmRpc3RhbmNlKGZpcnN0LCBsYXN0KWAK
KyAgICAtIGFycmF5czogbGluZWFyIGluIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIEBhIGZpcnN0IGFu
ZCBAYSBsYXN0LCBwbHVzIGxpbmVhcgorICAgICAgaW4gdGhlIGRpc3RhbmNlIGJldHdlZW4gQGEg
bGFzdCBhbmQgZW5kIG9mIHRoZSBjb250YWluZXIKKyAgICAtIHN0cmluZ3M6IGxpbmVhciBpbiB0
aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcKKyAgICAtIG90aGVyIHR5cGVzOiBjb25zdGFudAorCisg
ICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIHNob3dzIHRoZSByZXN1bHQgb2YgYGVyYXNlKClg
IGZvciBkaWZmZXJlbnQgSlNPTgorICAgIHR5cGVzLixlcmFzZV9fSXRlcmF0b3JUeXBlX0l0ZXJh
dG9yVHlwZX0KKworICAgIEBzYSBAcmVmIGVyYXNlKEl0ZXJhdG9yVHlwZSkgLS0gcmVtb3ZlcyB0
aGUgZWxlbWVudCBhdCBhIGdpdmVuIHBvc2l0aW9uCisgICAgQHNhIEByZWYgZXJhc2UoY29uc3Qg
dHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlJikgLS0gcmVtb3ZlcyB0aGUgZWxlbWVudAorICAg
IGZyb20gYW4gb2JqZWN0IGF0IHRoZSBnaXZlbiBrZXkKKyAgICBAc2EgQHJlZiBlcmFzZShjb25z
dCBzaXplX3R5cGUpIC0tIHJlbW92ZXMgdGhlIGVsZW1lbnQgZnJvbSBhbiBhcnJheSBhdAorICAg
IHRoZSBnaXZlbiBpbmRleAorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAg
IHRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8Cisg
ICAgICAgICAgICAgICAgIHN0ZDo6aXNfc2FtZTxJdGVyYXRvclR5cGUsIHR5cGVuYW1lIGJhc2lj
X2pzb25fdDo6aXRlcmF0b3I+Ojp2YWx1ZSBvcgorICAgICAgICAgICAgICAgICBzdGQ6OmlzX3Nh
bWU8SXRlcmF0b3JUeXBlLCB0eXBlbmFtZSBiYXNpY19qc29uX3Q6OmNvbnN0X2l0ZXJhdG9yPjo6
dmFsdWUsIGludD46OnR5cGUKKyAgICAgICAgICAgICA9IDA+CisgICAgSXRlcmF0b3JUeXBlIGVy
YXNlKEl0ZXJhdG9yVHlwZSBmaXJzdCwgSXRlcmF0b3JUeXBlIGxhc3QpCisgICAgeworICAgICAg
ICAvLyBtYWtlIHN1cmUgaXRlcmF0b3IgZml0cyB0aGUgY3VycmVudCB2YWx1ZQorICAgICAgICBp
ZiAodGhpcyAhPSBmaXJzdC5tX29iamVjdCBvciB0aGlzICE9IGxhc3QubV9vYmplY3QpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiaXRlcmF0b3JzIGRv
IG5vdCBmaXQgY3VycmVudCB2YWx1ZSIpOworICAgICAgICB9CisKKyAgICAgICAgSXRlcmF0b3JU
eXBlIHJlc3VsdCA9IGVuZCgpOworCisgICAgICAgIHN3aXRjaCAobV90eXBlKQorICAgICAgICB7
CisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmJvb2xlYW46CisgICAgICAgICAgICBjYXNlIHZh
bHVlX3Q6Om51bWJlcl9mbG9hdDoKKyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2lu
dGVnZXI6CisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZDoKKyAgICAg
ICAgICAgIGNhc2UgdmFsdWVfdDo6c3RyaW5nOgorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChub3QgZmlyc3QubV9pdC5wcmltaXRpdmVfaXRlcmF0b3IuaXNfYmVnaW4oKSBvciBu
b3QgbGFzdC5tX2l0LnByaW1pdGl2ZV9pdGVyYXRvci5pc19lbmQoKSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6b3V0X29mX3JhbmdlPigiaXRlcmF0
b3JzIG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGlmIChpc19zdHJpbmcoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IEFsbG9jYXRvclR5cGU8c3RyaW5nX3Q+IGFsbG9jOworICAgICAgICAgICAgICAgICAgICBhbGxv
Yy5kZXN0cm95KG1fdmFsdWUuc3RyaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgYWxsb2MuZGVh
bGxvY2F0ZShtX3ZhbHVlLnN0cmluZywgMSk7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUu
c3RyaW5nID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBt
X3R5cGUgPSB2YWx1ZV90OjpudWxsOworICAgICAgICAgICAgICAgIGFzc2VydF9pbnZhcmlhbnQo
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Y2FzZSB2YWx1ZV90OjpvYmplY3Q6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVz
dWx0Lm1faXQub2JqZWN0X2l0ZXJhdG9yID0gbV92YWx1ZS5vYmplY3QtPmVyYXNlKGZpcnN0Lm1f
aXQub2JqZWN0X2l0ZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxhc3QubV9pdC5vYmplY3RfaXRlcmF0b3IpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5Ogor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlc3VsdC5tX2l0LmFycmF5X2l0ZXJhdG9y
ID0gbV92YWx1ZS5hcnJheS0+ZXJhc2UoZmlyc3QubV9pdC5hcnJheV9pdGVyYXRvciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QubV9pdC5hcnJheV9p
dGVyYXRvcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVGhyb3c8c3Rk
Ojpkb21haW5fZXJyb3I+KCJjYW5ub3QgdXNlIGVyYXNlKCkgd2l0aCAiICsgdHlwZV9uYW1lKCkp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgcmVtb3ZlIGVsZW1lbnQgZnJvbSBhIEpTT04gb2Jq
ZWN0IGdpdmVuIGEga2V5CisKKyAgICBSZW1vdmVzIGVsZW1lbnRzIGZyb20gYSBKU09OIG9iamVj
dCB3aXRoIHRoZSBrZXkgdmFsdWUgQGEga2V5LgorCisgICAgQHBhcmFtW2luXSBrZXkgdmFsdWUg
b2YgdGhlIGVsZW1lbnRzIHRvIHJlbW92ZQorCisgICAgQHJldHVybiBOdW1iZXIgb2YgZWxlbWVu
dHMgcmVtb3ZlZC4gSWYgQGEgT2JqZWN0VHlwZSBpcyB0aGUgZGVmYXVsdAorICAgIGBzdGQ6Om1h
cGAgdHlwZSwgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBgMGAgKEBhIGtleSB3YXMg
bm90CisgICAgZm91bmQpIG9yIGAxYCAoQGEga2V5IHdhcyBmb3VuZCkuCisKKyAgICBAcG9zdCBS
ZWZlcmVuY2VzIGFuZCBpdGVyYXRvcnMgdG8gdGhlIGVyYXNlZCBlbGVtZW50cyBhcmUgaW52YWxp
ZGF0ZWQuCisgICAgT3RoZXIgcmVmZXJlbmNlcyBhbmQgaXRlcmF0b3JzIGFyZSBub3QgYWZmZWN0
ZWQuCisKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3Igd2hlbiBjYWxsZWQgb24gYSB0eXBl
IG90aGVyIHRoYW4gSlNPTiBvYmplY3Q7CisgICAgZXhhbXBsZTogYCJjYW5ub3QgdXNlIGVyYXNl
KCkgd2l0aCBudWxsImAKKworICAgIEBjb21wbGV4aXR5IGBsb2coc2l6ZSgpKSArIGNvdW50KGtl
eSlgCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgc2hvd3MgdGhlIGVmZmVjdCBvZiBg
ZXJhc2UoKWAuLGVyYXNlX19rZXlfdHlwZX0KKworICAgIEBzYSBAcmVmIGVyYXNlKEl0ZXJhdG9y
VHlwZSkgLS0gcmVtb3ZlcyB0aGUgZWxlbWVudCBhdCBhIGdpdmVuIHBvc2l0aW9uCisgICAgQHNh
IEByZWYgZXJhc2UoSXRlcmF0b3JUeXBlLCBJdGVyYXRvclR5cGUpIC0tIHJlbW92ZXMgdGhlIGVs
ZW1lbnRzIGluCisgICAgdGhlIGdpdmVuIHJhbmdlCisgICAgQHNhIEByZWYgZXJhc2UoY29uc3Qg
c2l6ZV90eXBlKSAtLSByZW1vdmVzIHRoZSBlbGVtZW50IGZyb20gYW4gYXJyYXkgYXQKKyAgICB0
aGUgZ2l2ZW4gaW5kZXgKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBz
aXplX3R5cGUgZXJhc2UoY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlJiBrZXkpCisg
ICAgeworICAgICAgICAvLyB0aGlzIGVyYXNlIG9ubHkgd29ya3MgZm9yIG9iamVjdHMKKyAgICAg
ICAgaWYgKGlzX29iamVjdCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV92YWx1
ZS5vYmplY3QtPmVyYXNlKGtleSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oImNhbm5vdCB1c2UgZXJhc2Uo
KSB3aXRoICIgKyB0eXBlX25hbWUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiEKKyAg
ICBAYnJpZWYgcmVtb3ZlIGVsZW1lbnQgZnJvbSBhIEpTT04gYXJyYXkgZ2l2ZW4gYW4gaW5kZXgK
KworICAgIFJlbW92ZXMgZWxlbWVudCBmcm9tIGEgSlNPTiBhcnJheSBhdCB0aGUgaW5kZXggQGEg
aWR4LgorCisgICAgQHBhcmFtW2luXSBpZHggaW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gcmVtb3Zl
CisKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3Igd2hlbiBjYWxsZWQgb24gYSB0eXBlIG90
aGVyIHRoYW4gSlNPTiBhcnJheTsKKyAgICBleGFtcGxlOiBgImNhbm5vdCB1c2UgZXJhc2UoKSB3
aXRoIG51bGwiYAorICAgIEB0aHJvdyBzdGQ6Om91dF9vZl9yYW5nZSB3aGVuIGBpZHggPj0gc2l6
ZSgpYDsgZXhhbXBsZTogYCJhcnJheSBpbmRleCAxNworICAgIGlzIG91dCBvZiByYW5nZSJgCisK
KyAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gZGlzdGFuY2UgYmV0d2VlbiBAYSBpZHggYW5kIHRo
ZSBlbmQgb2YgdGhlIGNvbnRhaW5lci4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBz
aG93cyB0aGUgZWZmZWN0IG9mIGBlcmFzZSgpYC4sZXJhc2VfX3NpemVfdHlwZX0KKworICAgIEBz
YSBAcmVmIGVyYXNlKEl0ZXJhdG9yVHlwZSkgLS0gcmVtb3ZlcyB0aGUgZWxlbWVudCBhdCBhIGdp
dmVuIHBvc2l0aW9uCisgICAgQHNhIEByZWYgZXJhc2UoSXRlcmF0b3JUeXBlLCBJdGVyYXRvclR5
cGUpIC0tIHJlbW92ZXMgdGhlIGVsZW1lbnRzIGluCisgICAgdGhlIGdpdmVuIHJhbmdlCisgICAg
QHNhIEByZWYgZXJhc2UoY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlJikgLS0gcmVt
b3ZlcyB0aGUgZWxlbWVudAorICAgIGZyb20gYW4gb2JqZWN0IGF0IHRoZSBnaXZlbiBrZXkKKwor
ICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICB2b2lkIGVyYXNlKGNvbnN0IHNp
emVfdHlwZSBpZHgpCisgICAgeworICAgICAgICAvLyB0aGlzIGVyYXNlIG9ubHkgd29ya3MgZm9y
IGFycmF5cworICAgICAgICBpZiAoaXNfYXJyYXkoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGlkeCA+PSBzaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVGhyb3c8
c3RkOjpvdXRfb2ZfcmFuZ2U+KCJhcnJheSBpbmRleCAiICsgc3RkOjp0b19zdHJpbmcoaWR4KSAr
ICIgaXMgb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1fdmFs
dWUuYXJyYXktPmVyYXNlKG1fdmFsdWUuYXJyYXktPmJlZ2luKCkgKyBzdGF0aWNfY2FzdDxkaWZm
ZXJlbmNlX3R5cGU+KGlkeCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJjYW5ub3QgdXNlIGVyYXNlKCkg
d2l0aCAiICsgdHlwZV9uYW1lKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8vIEB9CisK
KworICAgIC8vLy8vLy8vLy8vLworICAgIC8vIGxvb2t1cCAvLworICAgIC8vLy8vLy8vLy8vLwor
CisgICAgLy8vIEBuYW1lIGxvb2t1cAorICAgIC8vLyBAeworCisgICAgLyohCisgICAgQGJyaWVm
IGZpbmQgYW4gZWxlbWVudCBpbiBhIEpTT04gb2JqZWN0CisKKyAgICBGaW5kcyBhbiBlbGVtZW50
IGluIGEgSlNPTiBvYmplY3Qgd2l0aCBrZXkgZXF1aXZhbGVudCB0byBAYSBrZXkuIElmIHRoZQor
ICAgIGVsZW1lbnQgaXMgbm90IGZvdW5kIG9yIHRoZSBKU09OIHZhbHVlIGlzIG5vdCBhbiBvYmpl
Y3QsIGVuZCgpIGlzCisgICAgcmV0dXJuZWQuCisKKyAgICBAcGFyYW1baW5dIGtleSBrZXkgdmFs
dWUgb2YgdGhlIGVsZW1lbnQgdG8gc2VhcmNoIGZvcgorCisgICAgQHJldHVybiBJdGVyYXRvciB0
byBhbiBlbGVtZW50IHdpdGgga2V5IGVxdWl2YWxlbnQgdG8gQGEga2V5LiBJZiBubyBzdWNoCisg
ICAgZWxlbWVudCBpcyBmb3VuZCwgcGFzdC10aGUtZW5kIChzZWUgZW5kKCkpIGl0ZXJhdG9yIGlz
IHJldHVybmVkLgorCisgICAgQGNvbXBsZXhpdHkgTG9nYXJpdGhtaWMgaW4gdGhlIHNpemUgb2Yg
dGhlIEpTT04gb2JqZWN0LgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIHNob3dzIGhv
dyBgZmluZCgpYCBpcyB1c2VkLixmaW5kX19rZXlfdHlwZX0KKworICAgIEBzaW5jZSB2ZXJzaW9u
IDEuMC4wCisgICAgKi8KKyAgICBpdGVyYXRvciBmaW5kKHR5cGVuYW1lIG9iamVjdF90OjprZXlf
dHlwZSBrZXkpCisgICAgeworICAgICAgICBhdXRvIHJlc3VsdCA9IGVuZCgpOworCisgICAgICAg
IGlmIChpc19vYmplY3QoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0Lm1faXQub2Jq
ZWN0X2l0ZXJhdG9yID0gbV92YWx1ZS5vYmplY3QtPmZpbmQoa2V5KTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGZpbmQg
YW4gZWxlbWVudCBpbiBhIEpTT04gb2JqZWN0CisgICAgQGNvcHlkb2MgZmluZCh0eXBlbmFtZSBv
YmplY3RfdDo6a2V5X3R5cGUpCisgICAgKi8KKyAgICBjb25zdF9pdGVyYXRvciBmaW5kKHR5cGVu
YW1lIG9iamVjdF90OjprZXlfdHlwZSBrZXkpIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIHJl
c3VsdCA9IGNlbmQoKTsKKworICAgICAgICBpZiAoaXNfb2JqZWN0KCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJlc3VsdC5tX2l0Lm9iamVjdF9pdGVyYXRvciA9IG1fdmFsdWUub2JqZWN0LT5m
aW5kKGtleSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIC8qIQorICAgIEBicmllZiByZXR1cm5zIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2Yg
YSBrZXkgaW4gYSBKU09OIG9iamVjdAorCisgICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1l
bnRzIHdpdGgga2V5IEBhIGtleS4gSWYgT2JqZWN0VHlwZSBpcyB0aGUKKyAgICBkZWZhdWx0IGBz
dGQ6Om1hcGAgdHlwZSwgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBgMGAgKEBhIGtl
eSB3YXMKKyAgICBub3QgZm91bmQpIG9yIGAxYCAoQGEga2V5IHdhcyBmb3VuZCkuCisKKyAgICBA
cGFyYW1baW5dIGtleSBrZXkgdmFsdWUgb2YgdGhlIGVsZW1lbnQgdG8gY291bnQKKworICAgIEBy
ZXR1cm4gTnVtYmVyIG9mIGVsZW1lbnRzIHdpdGgga2V5IEBhIGtleS4gSWYgdGhlIEpTT04gdmFs
dWUgaXMgbm90IGFuCisgICAgb2JqZWN0LCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYDBgLgor
CisgICAgQGNvbXBsZXhpdHkgTG9nYXJpdGhtaWMgaW4gdGhlIHNpemUgb2YgdGhlIEpTT04gb2Jq
ZWN0LgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIHNob3dzIGhvdyBgY291bnQoKWAg
aXMgdXNlZC4sY291bnR9CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAg
c2l6ZV90eXBlIGNvdW50KHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlwZSBrZXkpIGNvbnN0Cisg
ICAgeworICAgICAgICAvLyByZXR1cm4gMCBmb3IgYWxsIG5vbm9iamVjdCB0eXBlcworICAgICAg
ICByZXR1cm4gaXNfb2JqZWN0KCkgPyBtX3ZhbHVlLm9iamVjdC0+Y291bnQoa2V5KSA6IDA7Cisg
ICAgfQorCisgICAgLy8vIEB9CisKKworICAgIC8vLy8vLy8vLy8vLy8vLworICAgIC8vIGl0ZXJh
dG9ycyAvLworICAgIC8vLy8vLy8vLy8vLy8vLworCisgICAgLy8vIEBuYW1lIGl0ZXJhdG9ycwor
ICAgIC8vLyBAeworCisgICAgLyohCisgICAgQGJyaWVmIHJldHVybnMgYW4gaXRlcmF0b3IgdG8g
dGhlIGZpcnN0IGVsZW1lbnQKKworICAgIFJldHVybnMgYW4gaXRlcmF0b3IgdG8gdGhlIGZpcnN0
IGVsZW1lbnQuCisKKyAgICBAaW1hZ2UgaHRtbCByYW5nZS1iZWdpbi1lbmQuc3ZnICJJbGx1c3Ry
YXRpb24gZnJvbSBjcHByZWZlcmVuY2UuY29tIgorCisgICAgQHJldHVybiBpdGVyYXRvciB0byB0
aGUgZmlyc3QgZWxlbWVudAorCisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAcmVx
dWlyZW1lbnQgVGhpcyBmdW5jdGlvbiBoZWxwcyBgYmFzaWNfanNvbmAgc2F0aXNmeWluZyB0aGUK
KyAgICBbQ29udGFpbmVyXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0
L0NvbnRhaW5lcikKKyAgICByZXF1aXJlbWVudHM6CisgICAgLSBUaGUgY29tcGxleGl0eSBpcyBj
b25zdGFudC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgYW4g
ZXhhbXBsZSBmb3IgYGJlZ2luKClgLixiZWdpbn0KKworICAgIEBzYSBAcmVmIGNiZWdpbigpIC0t
IHJldHVybnMgYSBjb25zdCBpdGVyYXRvciB0byB0aGUgYmVnaW5uaW5nCisgICAgQHNhIEByZWYg
ZW5kKCkgLS0gcmV0dXJucyBhbiBpdGVyYXRvciB0byB0aGUgZW5kCisgICAgQHNhIEByZWYgY2Vu
ZCgpIC0tIHJldHVybnMgYSBjb25zdCBpdGVyYXRvciB0byB0aGUgZW5kCisKKyAgICBAc2luY2Ug
dmVyc2lvbiAxLjAuMAorICAgICovCisgICAgaXRlcmF0b3IgYmVnaW4oKSBub2V4Y2VwdAorICAg
IHsKKyAgICAgICAgaXRlcmF0b3IgcmVzdWx0KHRoaXMpOworICAgICAgICByZXN1bHQuc2V0X2Jl
Z2luKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyohCisgICAgQGNv
cHlkb2MgYmFzaWNfanNvbjo6Y2JlZ2luKCkKKyAgICAqLworICAgIGNvbnN0X2l0ZXJhdG9yIGJl
Z2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICB7CisgICAgICAgIHJldHVybiBjYmVnaW4oKTsKKyAg
ICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgcmV0dXJucyBhIGNvbnN0IGl0ZXJhdG9yIHRvIHRo
ZSBmaXJzdCBlbGVtZW50CisKKyAgICBSZXR1cm5zIGEgY29uc3QgaXRlcmF0b3IgdG8gdGhlIGZp
cnN0IGVsZW1lbnQuCisKKyAgICBAaW1hZ2UgaHRtbCByYW5nZS1iZWdpbi1lbmQuc3ZnICJJbGx1
c3RyYXRpb24gZnJvbSBjcHByZWZlcmVuY2UuY29tIgorCisgICAgQHJldHVybiBjb25zdCBpdGVy
YXRvciB0byB0aGUgZmlyc3QgZWxlbWVudAorCisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisK
KyAgICBAcmVxdWlyZW1lbnQgVGhpcyBmdW5jdGlvbiBoZWxwcyBgYmFzaWNfanNvbmAgc2F0aXNm
eWluZyB0aGUKKyAgICBbQ29udGFpbmVyXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2Nw
cC9jb25jZXB0L0NvbnRhaW5lcikKKyAgICByZXF1aXJlbWVudHM6CisgICAgLSBUaGUgY29tcGxl
eGl0eSBpcyBjb25zdGFudC4KKyAgICAtIEhhcyB0aGUgc2VtYW50aWNzIG9mIGBjb25zdF9jYXN0
PGNvbnN0IGJhc2ljX2pzb24mPigqdGhpcykuYmVnaW4oKWAuCisKKyAgICBAbGl2ZWV4YW1wbGV7
VGhlIGZvbGxvd2luZyBjb2RlIHNob3dzIGFuIGV4YW1wbGUgZm9yIGBjYmVnaW4oKWAuLGNiZWdp
bn0KKworICAgIEBzYSBAcmVmIGJlZ2luKCkgLS0gcmV0dXJucyBhbiBpdGVyYXRvciB0byB0aGUg
YmVnaW5uaW5nCisgICAgQHNhIEByZWYgZW5kKCkgLS0gcmV0dXJucyBhbiBpdGVyYXRvciB0byB0
aGUgZW5kCisgICAgQHNhIEByZWYgY2VuZCgpIC0tIHJldHVybnMgYSBjb25zdCBpdGVyYXRvciB0
byB0aGUgZW5kCisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgY29uc3Rf
aXRlcmF0b3IgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICB7CisgICAgICAgIGNvbnN0X2l0
ZXJhdG9yIHJlc3VsdCh0aGlzKTsKKyAgICAgICAgcmVzdWx0LnNldF9iZWdpbigpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiByZXR1cm5zIGFu
IGl0ZXJhdG9yIHRvIG9uZSBwYXN0IHRoZSBsYXN0IGVsZW1lbnQKKworICAgIFJldHVybnMgYW4g
aXRlcmF0b3IgdG8gb25lIHBhc3QgdGhlIGxhc3QgZWxlbWVudC4KKworICAgIEBpbWFnZSBodG1s
IHJhbmdlLWJlZ2luLWVuZC5zdmcgIklsbHVzdHJhdGlvbiBmcm9tIGNwcHJlZmVyZW5jZS5jb20i
CisKKyAgICBAcmV0dXJuIGl0ZXJhdG9yIG9uZSBwYXN0IHRoZSBsYXN0IGVsZW1lbnQKKworICAg
IEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQHJlcXVpcmVtZW50IFRoaXMgZnVuY3Rpb24g
aGVscHMgYGJhc2ljX2pzb25gIHNhdGlzZnlpbmcgdGhlCisgICAgW0NvbnRhaW5lcl0oaHR0cDov
L2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29uY2VwdC9Db250YWluZXIpCisgICAgcmVxdWly
ZW1lbnRzOgorICAgIC0gVGhlIGNvbXBsZXhpdHkgaXMgY29uc3RhbnQuCisKKyAgICBAbGl2ZWV4
YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIHNob3dzIGFuIGV4YW1wbGUgZm9yIGBlbmQoKWAuLGVu
ZH0KKworICAgIEBzYSBAcmVmIGNlbmQoKSAtLSByZXR1cm5zIGEgY29uc3QgaXRlcmF0b3IgdG8g
dGhlIGVuZAorICAgIEBzYSBAcmVmIGJlZ2luKCkgLS0gcmV0dXJucyBhbiBpdGVyYXRvciB0byB0
aGUgYmVnaW5uaW5nCisgICAgQHNhIEByZWYgY2JlZ2luKCkgLS0gcmV0dXJucyBhIGNvbnN0IGl0
ZXJhdG9yIHRvIHRoZSBiZWdpbm5pbmcKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAg
Ki8KKyAgICBpdGVyYXRvciBlbmQoKSBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgaXRlcmF0b3Ig
cmVzdWx0KHRoaXMpOworICAgICAgICByZXN1bHQuc2V0X2VuZCgpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIC8qIQorICAgIEBjb3B5ZG9jIGJhc2ljX2pzb246OmNlbmQo
KQorICAgICovCisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgICB7
CisgICAgICAgIHJldHVybiBjZW5kKCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIHJl
dHVybnMgYSBjb25zdCBpdGVyYXRvciB0byBvbmUgcGFzdCB0aGUgbGFzdCBlbGVtZW50CisKKyAg
ICBSZXR1cm5zIGEgY29uc3QgaXRlcmF0b3IgdG8gb25lIHBhc3QgdGhlIGxhc3QgZWxlbWVudC4K
KworICAgIEBpbWFnZSBodG1sIHJhbmdlLWJlZ2luLWVuZC5zdmcgIklsbHVzdHJhdGlvbiBmcm9t
IGNwcHJlZmVyZW5jZS5jb20iCisKKyAgICBAcmV0dXJuIGNvbnN0IGl0ZXJhdG9yIG9uZSBwYXN0
IHRoZSBsYXN0IGVsZW1lbnQKKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQHJl
cXVpcmVtZW50IFRoaXMgZnVuY3Rpb24gaGVscHMgYGJhc2ljX2pzb25gIHNhdGlzZnlpbmcgdGhl
CisgICAgW0NvbnRhaW5lcl0oaHR0cDovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29uY2Vw
dC9Db250YWluZXIpCisgICAgcmVxdWlyZW1lbnRzOgorICAgIC0gVGhlIGNvbXBsZXhpdHkgaXMg
Y29uc3RhbnQuCisgICAgLSBIYXMgdGhlIHNlbWFudGljcyBvZiBgY29uc3RfY2FzdDxjb25zdCBi
YXNpY19qc29uJj4oKnRoaXMpLmVuZCgpYC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93
aW5nIGNvZGUgc2hvd3MgYW4gZXhhbXBsZSBmb3IgYGNlbmQoKWAuLGNlbmR9CisKKyAgICBAc2Eg
QHJlZiBlbmQoKSAtLSByZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIHRoZSBlbmQKKyAgICBAc2EgQHJl
ZiBiZWdpbigpIC0tIHJldHVybnMgYW4gaXRlcmF0b3IgdG8gdGhlIGJlZ2lubmluZworICAgIEBz
YSBAcmVmIGNiZWdpbigpIC0tIHJldHVybnMgYSBjb25zdCBpdGVyYXRvciB0byB0aGUgYmVnaW5u
aW5nCisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgY29uc3RfaXRlcmF0
b3IgY2VuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAgICBjb25zdF9pdGVyYXRvciBy
ZXN1bHQodGhpcyk7CisgICAgICAgIHJlc3VsdC5zZXRfZW5kKCk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIHJldHVybnMgYW4gaXRlcmF0b3Ig
dG8gdGhlIHJldmVyc2UtYmVnaW5uaW5nCisKKyAgICBSZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIHRo
ZSByZXZlcnNlLWJlZ2lubmluZzsgdGhhdCBpcywgdGhlIGxhc3QgZWxlbWVudC4KKworICAgIEBp
bWFnZSBodG1sIHJhbmdlLXJiZWdpbi1yZW5kLnN2ZyAiSWxsdXN0cmF0aW9uIGZyb20gY3BwcmVm
ZXJlbmNlLmNvbSIKKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQHJlcXVpcmVt
ZW50IFRoaXMgZnVuY3Rpb24gaGVscHMgYGJhc2ljX2pzb25gIHNhdGlzZnlpbmcgdGhlCisgICAg
W1JldmVyc2libGVDb250YWluZXJdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2Nv
bmNlcHQvUmV2ZXJzaWJsZUNvbnRhaW5lcikKKyAgICByZXF1aXJlbWVudHM6CisgICAgLSBUaGUg
Y29tcGxleGl0eSBpcyBjb25zdGFudC4KKyAgICAtIEhhcyB0aGUgc2VtYW50aWNzIG9mIGByZXZl
cnNlX2l0ZXJhdG9yKGVuZCgpKWAuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBj
b2RlIHNob3dzIGFuIGV4YW1wbGUgZm9yIGByYmVnaW4oKWAuLHJiZWdpbn0KKworICAgIEBzYSBA
cmVmIGNyYmVnaW4oKSAtLSByZXR1cm5zIGEgY29uc3QgcmV2ZXJzZSBpdGVyYXRvciB0byB0aGUg
YmVnaW5uaW5nCisgICAgQHNhIEByZWYgcmVuZCgpIC0tIHJldHVybnMgYSByZXZlcnNlIGl0ZXJh
dG9yIHRvIHRoZSBlbmQKKyAgICBAc2EgQHJlZiBjcmVuZCgpIC0tIHJldHVybnMgYSBjb25zdCBy
ZXZlcnNlIGl0ZXJhdG9yIHRvIHRoZSBlbmQKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisg
ICAgKi8KKyAgICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIG5vZXhjZXB0CisgICAgeworICAg
ICAgICByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7CisgICAgfQorCisgICAgLyohCisg
ICAgQGNvcHlkb2MgYmFzaWNfanNvbjo6Y3JiZWdpbigpCisgICAgKi8KKyAgICBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAgICByZXR1
cm4gY3JiZWdpbigpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiByZXR1cm5zIGFuIGl0
ZXJhdG9yIHRvIHRoZSByZXZlcnNlLWVuZAorCisgICAgUmV0dXJucyBhbiBpdGVyYXRvciB0byB0
aGUgcmV2ZXJzZS1lbmQ7IHRoYXQgaXMsIG9uZSBiZWZvcmUgdGhlIGZpcnN0CisgICAgZWxlbWVu
dC4KKworICAgIEBpbWFnZSBodG1sIHJhbmdlLXJiZWdpbi1yZW5kLnN2ZyAiSWxsdXN0cmF0aW9u
IGZyb20gY3BwcmVmZXJlbmNlLmNvbSIKKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisg
ICAgQHJlcXVpcmVtZW50IFRoaXMgZnVuY3Rpb24gaGVscHMgYGJhc2ljX2pzb25gIHNhdGlzZnlp
bmcgdGhlCisgICAgW1JldmVyc2libGVDb250YWluZXJdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2Uu
Y29tL3cvY3BwL2NvbmNlcHQvUmV2ZXJzaWJsZUNvbnRhaW5lcikKKyAgICByZXF1aXJlbWVudHM6
CisgICAgLSBUaGUgY29tcGxleGl0eSBpcyBjb25zdGFudC4KKyAgICAtIEhhcyB0aGUgc2VtYW50
aWNzIG9mIGByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpYC4KKworICAgIEBsaXZlZXhhbXBsZXtU
aGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgYW4gZXhhbXBsZSBmb3IgYHJlbmQoKWAuLHJlbmR9CisK
KyAgICBAc2EgQHJlZiBjcmVuZCgpIC0tIHJldHVybnMgYSBjb25zdCByZXZlcnNlIGl0ZXJhdG9y
IHRvIHRoZSBlbmQKKyAgICBAc2EgQHJlZiByYmVnaW4oKSAtLSByZXR1cm5zIGEgcmV2ZXJzZSBp
dGVyYXRvciB0byB0aGUgYmVnaW5uaW5nCisgICAgQHNhIEByZWYgY3JiZWdpbigpIC0tIHJldHVy
bnMgYSBjb25zdCByZXZlcnNlIGl0ZXJhdG9yIHRvIHRoZSBiZWdpbm5pbmcKKworICAgIEBzaW5j
ZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBub2V4
Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7Cisg
ICAgfQorCisgICAgLyohCisgICAgQGNvcHlkb2MgYmFzaWNfanNvbjo6Y3JlbmQoKQorICAgICov
CisgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgICB7
CisgICAgICAgIHJldHVybiBjcmVuZCgpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBy
ZXR1cm5zIGEgY29uc3QgcmV2ZXJzZSBpdGVyYXRvciB0byB0aGUgbGFzdCBlbGVtZW50CisKKyAg
ICBSZXR1cm5zIGEgY29uc3QgaXRlcmF0b3IgdG8gdGhlIHJldmVyc2UtYmVnaW5uaW5nOyB0aGF0
IGlzLCB0aGUgbGFzdAorICAgIGVsZW1lbnQuCisKKyAgICBAaW1hZ2UgaHRtbCByYW5nZS1yYmVn
aW4tcmVuZC5zdmcgIklsbHVzdHJhdGlvbiBmcm9tIGNwcHJlZmVyZW5jZS5jb20iCisKKyAgICBA
Y29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEByZXF1aXJlbWVudCBUaGlzIGZ1bmN0aW9uIGhl
bHBzIGBiYXNpY19qc29uYCBzYXRpc2Z5aW5nIHRoZQorICAgIFtSZXZlcnNpYmxlQ29udGFpbmVy
XShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L1JldmVyc2libGVDb250
YWluZXIpCisgICAgcmVxdWlyZW1lbnRzOgorICAgIC0gVGhlIGNvbXBsZXhpdHkgaXMgY29uc3Rh
bnQuCisgICAgLSBIYXMgdGhlIHNlbWFudGljcyBvZiBgY29uc3RfY2FzdDxjb25zdCBiYXNpY19q
c29uJj4oKnRoaXMpLnJiZWdpbigpYC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5n
IGNvZGUgc2hvd3MgYW4gZXhhbXBsZSBmb3IgYGNyYmVnaW4oKWAuLGNyYmVnaW59CisKKyAgICBA
c2EgQHJlZiByYmVnaW4oKSAtLSByZXR1cm5zIGEgcmV2ZXJzZSBpdGVyYXRvciB0byB0aGUgYmVn
aW5uaW5nCisgICAgQHNhIEByZWYgcmVuZCgpIC0tIHJldHVybnMgYSByZXZlcnNlIGl0ZXJhdG9y
IHRvIHRoZSBlbmQKKyAgICBAc2EgQHJlZiBjcmVuZCgpIC0tIHJldHVybnMgYSBjb25zdCByZXZl
cnNlIGl0ZXJhdG9yIHRvIHRoZSBlbmQKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAg
Ki8KKyAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNyYmVnaW4oKSBjb25zdCBub2V4Y2VwdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoY2VuZCgpKTsKKyAg
ICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgcmV0dXJucyBhIGNvbnN0IHJldmVyc2UgaXRlcmF0
b3IgdG8gb25lIGJlZm9yZSB0aGUgZmlyc3QKKworICAgIFJldHVybnMgYSBjb25zdCByZXZlcnNl
IGl0ZXJhdG9yIHRvIHRoZSByZXZlcnNlLWVuZDsgdGhhdCBpcywgb25lIGJlZm9yZQorICAgIHRo
ZSBmaXJzdCBlbGVtZW50LgorCisgICAgQGltYWdlIGh0bWwgcmFuZ2UtcmJlZ2luLXJlbmQuc3Zn
ICJJbGx1c3RyYXRpb24gZnJvbSBjcHByZWZlcmVuY2UuY29tIgorCisgICAgQGNvbXBsZXhpdHkg
Q29uc3RhbnQuCisKKyAgICBAcmVxdWlyZW1lbnQgVGhpcyBmdW5jdGlvbiBoZWxwcyBgYmFzaWNf
anNvbmAgc2F0aXNmeWluZyB0aGUKKyAgICBbUmV2ZXJzaWJsZUNvbnRhaW5lcl0oaHR0cDovL2Vu
LmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29uY2VwdC9SZXZlcnNpYmxlQ29udGFpbmVyKQorICAg
IHJlcXVpcmVtZW50czoKKyAgICAtIFRoZSBjb21wbGV4aXR5IGlzIGNvbnN0YW50LgorICAgIC0g
SGFzIHRoZSBzZW1hbnRpY3Mgb2YgYGNvbnN0X2Nhc3Q8Y29uc3QgYmFzaWNfanNvbiY+KCp0aGlz
KS5yZW5kKClgLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29kZSBzaG93cyBh
biBleGFtcGxlIGZvciBgY3JlbmQoKWAuLGNyZW5kfQorCisgICAgQHNhIEByZWYgcmVuZCgpIC0t
IHJldHVybnMgYSByZXZlcnNlIGl0ZXJhdG9yIHRvIHRoZSBlbmQKKyAgICBAc2EgQHJlZiByYmVn
aW4oKSAtLSByZXR1cm5zIGEgcmV2ZXJzZSBpdGVyYXRvciB0byB0aGUgYmVnaW5uaW5nCisgICAg
QHNhIEByZWYgY3JiZWdpbigpIC0tIHJldHVybnMgYSBjb25zdCByZXZlcnNlIGl0ZXJhdG9yIHRv
IHRoZSBiZWdpbm5pbmcKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBj
b25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNyZW5kKCkgY29uc3Qgbm9leGNlcHQKKyAgICB7CisgICAg
ICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGNiZWdpbigpKTsKKyAgICB9CisKKyAg
cHJpdmF0ZToKKyAgICAvLyBmb3J3YXJkIGRlY2xhcmF0aW9uCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSXRlcmF0b3JUeXBlPiBjbGFzcyBpdGVyYXRpb25fcHJveHk7CisKKyAgcHVibGljOgorICAg
IC8qIQorICAgIEBicmllZiB3cmFwcGVyIHRvIGFjY2VzcyBpdGVyYXRvciBtZW1iZXIgZnVuY3Rp
b25zIGluIHJhbmdlLWJhc2VkIGZvcgorCisgICAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdG8gYWNj
ZXNzIEByZWYgaXRlcmF0b3I6OmtleSgpIGFuZCBAcmVmCisgICAgaXRlcmF0b3I6OnZhbHVlKCkg
ZHVyaW5nIHJhbmdlLWJhc2VkIGZvciBsb29wcy4gSW4gdGhlc2UgbG9vcHMsIGEKKyAgICByZWZl
cmVuY2UgdG8gdGhlIEpTT04gdmFsdWVzIGlzIHJldHVybmVkLCBzbyB0aGVyZSBpcyBubyBhY2Nl
c3MgdG8gdGhlCisgICAgdW5kZXJseWluZyBpdGVyYXRvci4KKworICAgIEBub3RlIFRoZSBuYW1l
IG9mIHRoaXMgZnVuY3Rpb24gaXMgbm90IHlldCBmaW5hbCBhbmQgbWF5IGNoYW5nZSBpbiB0aGUK
KyAgICBmdXR1cmUuCisgICAgKi8KKyAgICBzdGF0aWMgaXRlcmF0aW9uX3Byb3h5PGl0ZXJhdG9y
PiBpdGVyYXRvcl93cmFwcGVyKHJlZmVyZW5jZSBjb250KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGl0ZXJhdGlvbl9wcm94eTxpdGVyYXRvcj4oY29udCk7CisgICAgfQorCisgICAgLyohCisgICAg
QGNvcHlkb2MgaXRlcmF0b3Jfd3JhcHBlcihyZWZlcmVuY2UpCisgICAgKi8KKyAgICBzdGF0aWMg
aXRlcmF0aW9uX3Byb3h5PGNvbnN0X2l0ZXJhdG9yPiBpdGVyYXRvcl93cmFwcGVyKGNvbnN0X3Jl
ZmVyZW5jZSBjb250KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGl0ZXJhdGlvbl9wcm94eTxjb25z
dF9pdGVyYXRvcj4oY29udCk7CisgICAgfQorCisgICAgLy8vIEB9CisKKworICAgIC8vLy8vLy8v
Ly8vLy8vCisgICAgLy8gY2FwYWNpdHkgLy8KKyAgICAvLy8vLy8vLy8vLy8vLworCisgICAgLy8v
IEBuYW1lIGNhcGFjaXR5CisgICAgLy8vIEB7CisKKyAgICAvKiEKKyAgICBAYnJpZWYgY2hlY2tz
IHdoZXRoZXIgdGhlIGNvbnRhaW5lciBpcyBlbXB0eQorCisgICAgQ2hlY2tzIGlmIGEgSlNPTiB2
YWx1ZSBoYXMgbm8gZWxlbWVudHMuCisKKyAgICBAcmV0dXJuIFRoZSByZXR1cm4gdmFsdWUgZGVw
ZW5kcyBvbiB0aGUgZGlmZmVyZW50IHR5cGVzIGFuZCBpcworICAgICAgICAgICAgZGVmaW5lZCBh
cyBmb2xsb3dzOgorICAgICAgICAgICAgVmFsdWUgdHlwZSAgfCByZXR1cm4gdmFsdWUKKyAgICAg
ICAgICAgIC0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgbnVsbCAgICAg
ICAgfCBgdHJ1ZWAKKyAgICAgICAgICAgIGJvb2xlYW4gICAgIHwgYGZhbHNlYAorICAgICAgICAg
ICAgc3RyaW5nICAgICAgfCBgZmFsc2VgCisgICAgICAgICAgICBudW1iZXIgICAgICB8IGBmYWxz
ZWAKKyAgICAgICAgICAgIG9iamVjdCAgICAgIHwgcmVzdWx0IG9mIGZ1bmN0aW9uIGBvYmplY3Rf
dDo6ZW1wdHkoKWAKKyAgICAgICAgICAgIGFycmF5ICAgICAgIHwgcmVzdWx0IG9mIGZ1bmN0aW9u
IGBhcnJheV90OjplbXB0eSgpYAorCisgICAgQG5vdGUgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBy
ZXR1cm4gd2hldGhlciBhIHN0cmluZyBzdG9yZWQgYXMgSlNPTiB2YWx1ZQorICAgIGlzIGVtcHR5
IC0gaXQgcmV0dXJucyB3aGV0aGVyIHRoZSBKU09OIGNvbnRhaW5lciBpdHNlbGYgaXMgZW1wdHkg
d2hpY2ggaXMKKyAgICBmYWxzZSBpbiB0aGUgY2FzZSBvZiBhIHN0cmluZy4KKworICAgIEBjb21w
bGV4aXR5IENvbnN0YW50LCBhcyBsb25nIGFzIEByZWYgYXJyYXlfdCBhbmQgQHJlZiBvYmplY3Rf
dCBzYXRpc2Z5CisgICAgdGhlIENvbnRhaW5lciBjb25jZXB0OyB0aGF0IGlzLCB0aGVpciBgZW1w
dHkoKWAgZnVuY3Rpb25zIGhhdmUgY29uc3RhbnQKKyAgICBjb21wbGV4aXR5LgorCisgICAgQHJl
cXVpcmVtZW50IFRoaXMgZnVuY3Rpb24gaGVscHMgYGJhc2ljX2pzb25gIHNhdGlzZnlpbmcgdGhl
CisgICAgW0NvbnRhaW5lcl0oaHR0cDovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29uY2Vw
dC9Db250YWluZXIpCisgICAgcmVxdWlyZW1lbnRzOgorICAgIC0gVGhlIGNvbXBsZXhpdHkgaXMg
Y29uc3RhbnQuCisgICAgLSBIYXMgdGhlIHNlbWFudGljcyBvZiBgYmVnaW4oKSA9PSBlbmQoKWAu
CisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIHVzZXMgYGVtcHR5KClgIHRv
IGNoZWNrIGlmIGEgSlNPTgorICAgIG9iamVjdCBjb250YWlucyBhbnkgZWxlbWVudHMuLGVtcHR5
fQorCisgICAgQHNhIEByZWYgc2l6ZSgpIC0tIHJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50
cworCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGJvb2wgZW1wdHkoKSBj
b25zdCBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX3R5cGUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVsbDoKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAvLyBudWxsIHZhbHVlcyBhcmUgZW1wdHkKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBkZWxlZ2F0ZSBjYWxsIHRvIGFycmF5
X3Q6OmVtcHR5KCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV92YWx1ZS5hcnJheS0+ZW1wdHko
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gZGVsZWdhdGUgY2FsbCB0byBvYmplY3Rf
dDo6ZW1wdHkoKQorICAgICAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLm9iamVjdC0+ZW1wdHko
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAvLyBhbGwgb3RoZXIgdHlwZXMgYXJlIG5vbmVtcHR5CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgLyohCisgICAgQGJyaWVmIHJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cworCisg
ICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgSlNPTiB2YWx1ZS4KKworICAg
IEByZXR1cm4gVGhlIHJldHVybiB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBkaWZmZXJlbnQgdHlwZXMg
YW5kIGlzCisgICAgICAgICAgICBkZWZpbmVkIGFzIGZvbGxvd3M6CisgICAgICAgICAgICBWYWx1
ZSB0eXBlICB8IHJldHVybiB2YWx1ZQorICAgICAgICAgICAgLS0tLS0tLS0tLS0gfCAtLS0tLS0t
LS0tLS0tCisgICAgICAgICAgICBudWxsICAgICAgICB8IGAwYAorICAgICAgICAgICAgYm9vbGVh
biAgICAgfCBgMWAKKyAgICAgICAgICAgIHN0cmluZyAgICAgIHwgYDFgCisgICAgICAgICAgICBu
dW1iZXIgICAgICB8IGAxYAorICAgICAgICAgICAgb2JqZWN0ICAgICAgfCByZXN1bHQgb2YgZnVu
Y3Rpb24gb2JqZWN0X3Q6OnNpemUoKQorICAgICAgICAgICAgYXJyYXkgICAgICAgfCByZXN1bHQg
b2YgZnVuY3Rpb24gYXJyYXlfdDo6c2l6ZSgpCisKKyAgICBAbm90ZSBUaGlzIGZ1bmN0aW9uIGRv
ZXMgbm90IHJldHVybiB0aGUgbGVuZ3RoIG9mIGEgc3RyaW5nIHN0b3JlZCBhcyBKU09OCisgICAg
dmFsdWUgLSBpdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIEpTT04gdmFs
dWUgd2hpY2ggaXMgMSBpbgorICAgIHRoZSBjYXNlIG9mIGEgc3RyaW5nLgorCisgICAgQGNvbXBs
ZXhpdHkgQ29uc3RhbnQsIGFzIGxvbmcgYXMgQHJlZiBhcnJheV90IGFuZCBAcmVmIG9iamVjdF90
IHNhdGlzZnkKKyAgICB0aGUgQ29udGFpbmVyIGNvbmNlcHQ7IHRoYXQgaXMsIHRoZWlyIHNpemUo
KSBmdW5jdGlvbnMgaGF2ZSBjb25zdGFudAorICAgIGNvbXBsZXhpdHkuCisKKyAgICBAcmVxdWly
ZW1lbnQgVGhpcyBmdW5jdGlvbiBoZWxwcyBgYmFzaWNfanNvbmAgc2F0aXNmeWluZyB0aGUKKyAg
ICBbQ29udGFpbmVyXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L0Nv
bnRhaW5lcikKKyAgICByZXF1aXJlbWVudHM6CisgICAgLSBUaGUgY29tcGxleGl0eSBpcyBjb25z
dGFudC4KKyAgICAtIEhhcyB0aGUgc2VtYW50aWNzIG9mIGBzdGQ6OmRpc3RhbmNlKGJlZ2luKCks
IGVuZCgpKWAuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIGNhbGxzIGBz
aXplKClgIG9uIHRoZSBkaWZmZXJlbnQgdmFsdWUKKyAgICB0eXBlcy4sc2l6ZX0KKworICAgIEBz
YSBAcmVmIGVtcHR5KCkgLS0gY2hlY2tzIHdoZXRoZXIgdGhlIGNvbnRhaW5lciBpcyBlbXB0eQor
ICAgIEBzYSBAcmVmIG1heF9zaXplKCkgLS0gcmV0dXJucyB0aGUgbWF4aW1hbCBudW1iZXIgb2Yg
ZWxlbWVudHMKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBzaXplX3R5
cGUgc2l6ZSgpIGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAgICBzd2l0Y2ggKG1fdHlwZSkK
KyAgICAgICAgeworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudWxsOgorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIC8vIG51bGwgdmFsdWVzIGFyZSBlbXB0eQorICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6
OmFycmF5OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIGRlbGVnYXRlIGNhbGwg
dG8gYXJyYXlfdDo6c2l6ZSgpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUuYXJyYXkt
PnNpemUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmpl
Y3Q6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gZGVsZWdhdGUgY2FsbCB0byBv
YmplY3RfdDo6c2l6ZSgpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUub2JqZWN0LT5z
aXplKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgLy8gYWxsIG90aGVyIHR5cGVzIGhhdmUgc2l6ZSAxCisgICAg
ICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvKiEKKyAgICBAYnJpZWYgcmV0dXJucyB0aGUgbWF4aW11bSBwb3NzaWJsZSBudW1iZXIg
b2YgZWxlbWVudHMKKworICAgIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRz
IGEgSlNPTiB2YWx1ZSBpcyBhYmxlIHRvIGhvbGQgZHVlIHRvCisgICAgc3lzdGVtIG9yIGxpYnJh
cnkgaW1wbGVtZW50YXRpb24gbGltaXRhdGlvbnMsIGkuZS4gYHN0ZDo6ZGlzdGFuY2UoYmVnaW4o
KSwKKyAgICBlbmQoKSlgIGZvciB0aGUgSlNPTiB2YWx1ZS4KKworICAgIEByZXR1cm4gVGhlIHJl
dHVybiB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBkaWZmZXJlbnQgdHlwZXMgYW5kIGlzCisgICAgICAg
ICAgICBkZWZpbmVkIGFzIGZvbGxvd3M6CisgICAgICAgICAgICBWYWx1ZSB0eXBlICB8IHJldHVy
biB2YWx1ZQorICAgICAgICAgICAgLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tCisgICAgICAg
ICAgICBudWxsICAgICAgICB8IGAwYCAoc2FtZSBhcyBgc2l6ZSgpYCkKKyAgICAgICAgICAgIGJv
b2xlYW4gICAgIHwgYDFgIChzYW1lIGFzIGBzaXplKClgKQorICAgICAgICAgICAgc3RyaW5nICAg
ICAgfCBgMWAgKHNhbWUgYXMgYHNpemUoKWApCisgICAgICAgICAgICBudW1iZXIgICAgICB8IGAx
YCAoc2FtZSBhcyBgc2l6ZSgpYCkKKyAgICAgICAgICAgIG9iamVjdCAgICAgIHwgcmVzdWx0IG9m
IGZ1bmN0aW9uIGBvYmplY3RfdDo6bWF4X3NpemUoKWAKKyAgICAgICAgICAgIGFycmF5ICAgICAg
IHwgcmVzdWx0IG9mIGZ1bmN0aW9uIGBhcnJheV90OjptYXhfc2l6ZSgpYAorCisgICAgQGNvbXBs
ZXhpdHkgQ29uc3RhbnQsIGFzIGxvbmcgYXMgQHJlZiBhcnJheV90IGFuZCBAcmVmIG9iamVjdF90
IHNhdGlzZnkKKyAgICB0aGUgQ29udGFpbmVyIGNvbmNlcHQ7IHRoYXQgaXMsIHRoZWlyIGBtYXhf
c2l6ZSgpYCBmdW5jdGlvbnMgaGF2ZSBjb25zdGFudAorICAgIGNvbXBsZXhpdHkuCisKKyAgICBA
cmVxdWlyZW1lbnQgVGhpcyBmdW5jdGlvbiBoZWxwcyBgYmFzaWNfanNvbmAgc2F0aXNmeWluZyB0
aGUKKyAgICBbQ29udGFpbmVyXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25j
ZXB0L0NvbnRhaW5lcikKKyAgICByZXF1aXJlbWVudHM6CisgICAgLSBUaGUgY29tcGxleGl0eSBp
cyBjb25zdGFudC4KKyAgICAtIEhhcyB0aGUgc2VtYW50aWNzIG9mIHJldHVybmluZyBgYi5zaXpl
KClgIHdoZXJlIGBiYCBpcyB0aGUgbGFyZ2VzdAorICAgICAgcG9zc2libGUgSlNPTiB2YWx1ZS4K
KworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgY2FsbHMgYG1heF9zaXplKClg
IG9uIHRoZSBkaWZmZXJlbnQgdmFsdWUKKyAgICB0eXBlcy4gTm90ZSB0aGUgb3V0cHV0IGlzIGlt
cGxlbWVudGF0aW9uIHNwZWNpZmljLixtYXhfc2l6ZX0KKworICAgIEBzYSBAcmVmIHNpemUoKSAt
LSByZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEu
MC4wCisgICAgKi8KKyAgICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCBub2V4Y2VwdAorICAg
IHsKKyAgICAgICAgc3dpdGNoIChtX3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2Ug
dmFsdWVfdDo6YXJyYXk6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gZGVsZWdh
dGUgY2FsbCB0byBhcnJheV90OjptYXhfc2l6ZSgpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
dmFsdWUuYXJyYXktPm1heF9zaXplKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNh
c2UgdmFsdWVfdDo6b2JqZWN0OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIGRl
bGVnYXRlIGNhbGwgdG8gb2JqZWN0X3Q6Om1heF9zaXplKCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV92YWx1ZS5vYmplY3QtPm1heF9zaXplKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gYWxsIG90aGVy
IHR5cGVzIGhhdmUgbWF4X3NpemUoKSA9PSBzaXplKCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
c2l6ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8vIEB9CisK
KworICAgIC8vLy8vLy8vLy8vLy8vLworICAgIC8vIG1vZGlmaWVycyAvLworICAgIC8vLy8vLy8v
Ly8vLy8vLworCisgICAgLy8vIEBuYW1lIG1vZGlmaWVycworICAgIC8vLyBAeworCisgICAgLyoh
CisgICAgQGJyaWVmIGNsZWFycyB0aGUgY29udGVudHMKKworICAgIENsZWFycyB0aGUgY29udGVu
dCBvZiBhIEpTT04gdmFsdWUgYW5kIHJlc2V0cyBpdCB0byB0aGUgZGVmYXVsdCB2YWx1ZSBhcwor
ICAgIGlmIEByZWYgYmFzaWNfanNvbih2YWx1ZV90KSB3b3VsZCBoYXZlIGJlZW4gY2FsbGVkOgor
CisgICAgVmFsdWUgdHlwZSAgfCBpbml0aWFsIHZhbHVlCisgICAgLS0tLS0tLS0tLS0gfCAtLS0t
LS0tLS0tLS0tCisgICAgbnVsbCAgICAgICAgfCBgbnVsbGAKKyAgICBib29sZWFuICAgICB8IGBm
YWxzZWAKKyAgICBzdHJpbmcgICAgICB8IGAiImAKKyAgICBudW1iZXIgICAgICB8IGAwYAorICAg
IG9iamVjdCAgICAgIHwgYHt9YAorICAgIGFycmF5ICAgICAgIHwgYFtdYAorCisgICAgQG5vdGUg
RmxvYXRpbmctcG9pbnQgbnVtYmVycyBhcmUgc2V0IHRvIGAwLjBgIHdoaWNoIHdpbGwgYmUgc2Vy
aWFsaXplZCB0bworICAgIGAwYC4gVGhlIHZhbGUgdHlwZSByZW1haW5zIEByZWYgbnVtYmVyX2Zs
b2F0X3QuCisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlIEpTT04g
dmFsdWUuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgdGhlIGVm
ZmVjdCBvZiBgY2xlYXIoKWAgdG8gZGlmZmVyZW50CisgICAgSlNPTiB0eXBlcy4sY2xlYXJ9CisK
KyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgdm9pZCBjbGVhcigpIG5vZXhj
ZXB0CisgICAgeworICAgICAgICBzd2l0Y2ggKG1fdHlwZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcjoKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBtX3ZhbHVlLm51bWJlcl9pbnRlZ2VyID0gMDsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfdW5z
aWduZWQ6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV92YWx1ZS5udW1iZXJfdW5z
aWduZWQgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtX3ZhbHVlLm51bWJlcl9mbG9hdCA9IDAuMDsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFu
OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fdmFsdWUuYm9vbGVhbiA9IGZhbHNl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBj
YXNlIHZhbHVlX3Q6OnN0cmluZzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3Zh
bHVlLnN0cmluZy0+Y2xlYXIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBtX3ZhbHVlLmFycmF5LT5jbGVhcigpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLm9iamVjdC0+Y2xlYXIoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBhZGQgYW4gb2JqZWN0
IHRvIGFuIGFycmF5CisKKyAgICBBcHBlbmRzIHRoZSBnaXZlbiBlbGVtZW50IEBhIHZhbCB0byB0
aGUgZW5kIG9mIHRoZSBKU09OIHZhbHVlLiBJZiB0aGUKKyAgICBmdW5jdGlvbiBpcyBjYWxsZWQg
b24gYSBKU09OIG51bGwgdmFsdWUsIGFuIGVtcHR5IGFycmF5IGlzIGNyZWF0ZWQgYmVmb3JlCisg
ICAgYXBwZW5kaW5nIEBhIHZhbC4KKworICAgIEBwYXJhbVtpbl0gdmFsIHRoZSB2YWx1ZSB0byBh
ZGQgdG8gdGhlIEpTT04gYXJyYXkKKworICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciB3aGVu
IGNhbGxlZCBvbiBhIHR5cGUgb3RoZXIgdGhhbiBKU09OIGFycmF5IG9yCisgICAgbnVsbDsgZXhh
bXBsZTogYCJjYW5ub3QgdXNlIHB1c2hfYmFjaygpIHdpdGggbnVtYmVyImAKKworICAgIEBjb21w
bGV4aXR5IEFtb3J0aXplZCBjb25zdGFudC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBs
ZSBzaG93cyBob3cgYHB1c2hfYmFjaygpYCBhbmQgYCs9YCBjYW4gYmUgdXNlZCB0bworICAgIGFk
ZCBlbGVtZW50cyB0byBhIEpTT04gYXJyYXkuIE5vdGUgaG93IHRoZSBgbnVsbGAgdmFsdWUgd2Fz
IHNpbGVudGx5CisgICAgY29udmVydGVkIHRvIGEgSlNPTiBhcnJheS4scHVzaF9iYWNrfQorCisg
ICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIHZvaWQgcHVzaF9iYWNrKGJhc2lj
X2pzb24mJiB2YWwpCisgICAgeworICAgICAgICAvLyBwdXNoX2JhY2sgb25seSB3b3JrcyBmb3Ig
bnVsbCBvYmplY3RzIG9yIGFycmF5cworICAgICAgICBpZiAobm90KGlzX251bGwoKSBvciBpc19h
cnJheSgpKSkKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+
KCJjYW5ub3QgdXNlIHB1c2hfYmFjaygpIHdpdGggIiArIHR5cGVfbmFtZSgpKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIHRyYW5zZm9ybSBudWxsIG9iamVjdCBpbnRvIGFuIGFycmF5CisgICAg
ICAgIGlmIChpc19udWxsKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fdHlwZSA9IHZhbHVl
X3Q6OmFycmF5OworICAgICAgICAgICAgbV92YWx1ZSA9IHZhbHVlX3Q6OmFycmF5OworICAgICAg
ICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gYWRkIGVs
ZW1lbnQgdG8gYXJyYXkgKG1vdmUgc2VtYW50aWNzKQorICAgICAgICBtX3ZhbHVlLmFycmF5LT5w
dXNoX2JhY2soc3RkOjptb3ZlKHZhbCkpOworICAgICAgICAvLyBpbnZhbGlkYXRlIG9iamVjdAor
ICAgICAgICB2YWwubV90eXBlID0gdmFsdWVfdDo6bnVsbDsKKyAgICB9CisKKyAgICAvKiEKKyAg
ICBAYnJpZWYgYWRkIGFuIG9iamVjdCB0byBhbiBhcnJheQorICAgIEBjb3B5ZG9jIHB1c2hfYmFj
ayhiYXNpY19qc29uJiYpCisgICAgKi8KKyAgICByZWZlcmVuY2Ugb3BlcmF0b3IrPShiYXNpY19q
c29uJiYgdmFsKQorICAgIHsKKyAgICAgICAgcHVzaF9iYWNrKHN0ZDo6bW92ZSh2YWwpKTsKKyAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBhZGQgYW4g
b2JqZWN0IHRvIGFuIGFycmF5CisgICAgQGNvcHlkb2MgcHVzaF9iYWNrKGJhc2ljX2pzb24mJikK
KyAgICAqLworICAgIHZvaWQgcHVzaF9iYWNrKGNvbnN0IGJhc2ljX2pzb24mIHZhbCkKKyAgICB7
CisgICAgICAgIC8vIHB1c2hfYmFjayBvbmx5IHdvcmtzIGZvciBudWxsIG9iamVjdHMgb3IgYXJy
YXlzCisgICAgICAgIGlmIChub3QoaXNfbnVsbCgpIG9yIGlzX2FycmF5KCkpKQorICAgICAgICB7
CisgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oImNhbm5vdCB1c2UgcHVzaF9i
YWNrKCkgd2l0aCAiICsgdHlwZV9uYW1lKCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gdHJh
bnNmb3JtIG51bGwgb2JqZWN0IGludG8gYW4gYXJyYXkKKyAgICAgICAgaWYgKGlzX251bGwoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgbV90eXBlID0gdmFsdWVfdDo6YXJyYXk7CisgICAgICAg
ICAgICBtX3ZhbHVlID0gdmFsdWVfdDo6YXJyYXk7CisgICAgICAgICAgICBhc3NlcnRfaW52YXJp
YW50KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBhZGQgZWxlbWVudCB0byBhcnJheQorICAg
ICAgICBtX3ZhbHVlLmFycmF5LT5wdXNoX2JhY2sodmFsKTsKKyAgICB9CisKKyAgICAvKiEKKyAg
ICBAYnJpZWYgYWRkIGFuIG9iamVjdCB0byBhbiBhcnJheQorICAgIEBjb3B5ZG9jIHB1c2hfYmFj
ayhiYXNpY19qc29uJiYpCisgICAgKi8KKyAgICByZWZlcmVuY2Ugb3BlcmF0b3IrPShjb25zdCBi
YXNpY19qc29uJiB2YWwpCisgICAgeworICAgICAgICBwdXNoX2JhY2sodmFsKTsKKyAgICAgICAg
cmV0dXJuICp0aGlzOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBhZGQgYW4gb2JqZWN0
IHRvIGFuIG9iamVjdAorCisgICAgSW5zZXJ0cyB0aGUgZ2l2ZW4gZWxlbWVudCBAYSB2YWwgdG8g
dGhlIEpTT04gb2JqZWN0LiBJZiB0aGUgZnVuY3Rpb24gaXMKKyAgICBjYWxsZWQgb24gYSBKU09O
IG51bGwgdmFsdWUsIGFuIGVtcHR5IG9iamVjdCBpcyBjcmVhdGVkIGJlZm9yZSBpbnNlcnRpbmcK
KyAgICBAYSB2YWwuCisKKyAgICBAcGFyYW1baW5dIHZhbCB0aGUgdmFsdWUgdG8gYWRkIHRvIHRo
ZSBKU09OIG9iamVjdAorCisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIHdoZW4gY2FsbGVk
IG9uIGEgdHlwZSBvdGhlciB0aGFuIEpTT04gb2JqZWN0IG9yCisgICAgbnVsbDsgZXhhbXBsZTog
YCJjYW5ub3QgdXNlIHB1c2hfYmFjaygpIHdpdGggbnVtYmVyImAKKworICAgIEBjb21wbGV4aXR5
IExvZ2FyaXRobWljIGluIHRoZSBzaXplIG9mIHRoZSBjb250YWluZXIsIE8obG9nKGBzaXplKClg
KSkuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgc2hvd3MgaG93IGBwdXNoX2JhY2so
KWAgYW5kIGArPWAgY2FuIGJlIHVzZWQgdG8KKyAgICBhZGQgZWxlbWVudHMgdG8gYSBKU09OIG9i
amVjdC4gTm90ZSBob3cgdGhlIGBudWxsYCB2YWx1ZSB3YXMgc2lsZW50bHkKKyAgICBjb252ZXJ0
ZWQgdG8gYSBKU09OIG9iamVjdC4scHVzaF9iYWNrX19vYmplY3RfdF9fdmFsdWV9CisKKyAgICBA
c2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgdm9pZCBwdXNoX2JhY2soY29uc3QgdHlw
ZW5hbWUgb2JqZWN0X3Q6OnZhbHVlX3R5cGUmIHZhbCkKKyAgICB7CisgICAgICAgIC8vIHB1c2hf
YmFjayBvbmx5IHdvcmtzIGZvciBudWxsIG9iamVjdHMgb3Igb2JqZWN0cworICAgICAgICBpZiAo
bm90KGlzX251bGwoKSBvciBpc19vYmplY3QoKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRo
cm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fubm90IHVzZSBwdXNoX2JhY2soKSB3aXRoICIgKyB0
eXBlX25hbWUoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyB0cmFuc2Zvcm0gbnVsbCBvYmpl
Y3QgaW50byBhbiBvYmplY3QKKyAgICAgICAgaWYgKGlzX251bGwoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbV90eXBlID0gdmFsdWVfdDo6b2JqZWN0OworICAgICAgICAgICAgbV92YWx1ZSA9
IHZhbHVlX3Q6Om9iamVjdDsKKyAgICAgICAgICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIGFkZCBlbGVtZW50IHRvIGFycmF5CisgICAgICAgIG1fdmFsdWUu
b2JqZWN0LT5pbnNlcnQodmFsKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgYWRkIGFu
IG9iamVjdCB0byBhbiBvYmplY3QKKyAgICBAY29weWRvYyBwdXNoX2JhY2soY29uc3QgdHlwZW5h
bWUgb2JqZWN0X3Q6OnZhbHVlX3R5cGUmKQorICAgICovCisgICAgcmVmZXJlbmNlIG9wZXJhdG9y
Kz0oY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OnZhbHVlX3R5cGUmIHZhbCkKKyAgICB7CisgICAg
ICAgIHB1c2hfYmFjayh2YWwpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAg
LyohCisgICAgQGJyaWVmIGFkZCBhbiBvYmplY3QgdG8gYW4gb2JqZWN0CisKKyAgICBUaGlzIGZ1
bmN0aW9uIGFsbG93cyB0byB1c2UgYHB1c2hfYmFja2Agd2l0aCBhbiBpbml0aWFsaXplciBsaXN0
LiBJbiBjYXNlCisKKyAgICAxLiB0aGUgY3VycmVudCB2YWx1ZSBpcyBhbiBvYmplY3QsCisgICAg
Mi4gdGhlIGluaXRpYWxpemVyIGxpc3QgQGEgaW5pdCBjb250YWlucyBvbmx5IHR3byBlbGVtZW50
cywgYW5kCisgICAgMy4gdGhlIGZpcnN0IGVsZW1lbnQgb2YgQGEgaW5pdCBpcyBhIHN0cmluZywK
KworICAgIEBhIGluaXQgaXMgY29udmVydGVkIGludG8gYW4gb2JqZWN0IGVsZW1lbnQgYW5kIGFk
ZGVkIHVzaW5nCisgICAgQHJlZiBwdXNoX2JhY2soY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OnZh
bHVlX3R5cGUmKS4gT3RoZXJ3aXNlLCBAYSBpbml0CisgICAgaXMgY29udmVydGVkIHRvIGEgSlNP
TiB2YWx1ZSBhbmQgYWRkZWQgdXNpbmcgQHJlZiBwdXNoX2JhY2soYmFzaWNfanNvbiYmKS4KKwor
ICAgIEBwYXJhbSBpbml0ICBhbiBpbml0aWFsaXplciBsaXN0CisKKyAgICBAY29tcGxleGl0eSBM
aW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlIGluaXRpYWxpemVyIGxpc3QgQGEgaW5pdC4KKworICAg
IEBub3RlIFRoaXMgZnVuY3Rpb24gaXMgcmVxdWlyZWQgdG8gcmVzb2x2ZSBhbiBhbWJpZ3VvdXMg
b3ZlcmxvYWQgZXJyb3IsCisgICAgICAgICAgYmVjYXVzZSBwYWlycyBsaWtlIGB7ImtleSIsICJ2
YWx1ZSJ9YCBjYW4gYmUgYm90aCBpbnRlcnByZXRlZCBhcworICAgICAgICAgIGBvYmplY3RfdDo6
dmFsdWVfdHlwZWAgb3IgYHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxiYXNpY19qc29uPmAsIHNlZQor
ICAgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9ubG9obWFubi9qc29uL2lzc3Vlcy8yMzUgZm9y
IG1vcmUgaW5mb3JtYXRpb24uCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgc2hvd3Mg
aG93IGluaXRpYWxpemVyIGxpc3RzIGFyZSB0cmVhdGVkIGFzCisgICAgb2JqZWN0cyB3aGVuIHBv
c3NpYmxlLixwdXNoX2JhY2tfX2luaXRpYWxpemVyX2xpc3R9CisgICAgKi8KKyAgICB2b2lkIHB1
c2hfYmFjayhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8YmFzaWNfanNvbj4gaW5pdCkKKyAgICB7Cisg
ICAgICAgIGlmIChpc19vYmplY3QoKSBhbmQgaW5pdC5zaXplKCkgPT0gMiBhbmQgaW5pdC5iZWdp
bigpLT5pc19zdHJpbmcoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3Qgc3RyaW5nX3Qg
a2V5ID0gKmluaXQuYmVnaW4oKTsKKyAgICAgICAgICAgIHB1c2hfYmFjayh0eXBlbmFtZSBvYmpl
Y3RfdDo6dmFsdWVfdHlwZShrZXksICooaW5pdC5iZWdpbigpICsgMSkpKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHB1c2hfYmFjayhiYXNpY19qc29u
KGluaXQpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBhZGQgYW4g
b2JqZWN0IHRvIGFuIG9iamVjdAorICAgIEBjb3B5ZG9jIHB1c2hfYmFjayhzdGQ6OmluaXRpYWxp
emVyX2xpc3Q8YmFzaWNfanNvbj4pCisgICAgKi8KKyAgICByZWZlcmVuY2Ugb3BlcmF0b3IrPShz
dGQ6OmluaXRpYWxpemVyX2xpc3Q8YmFzaWNfanNvbj4gaW5pdCkKKyAgICB7CisgICAgICAgIHB1
c2hfYmFjayhpbml0KTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIC8qIQor
ICAgIEBicmllZiBpbnNlcnRzIGVsZW1lbnQKKworICAgIEluc2VydHMgZWxlbWVudCBAYSB2YWwg
YmVmb3JlIGl0ZXJhdG9yIEBhIHBvcy4KKworICAgIEBwYXJhbVtpbl0gcG9zIGl0ZXJhdG9yIGJl
Zm9yZSB3aGljaCB0aGUgY29udGVudCB3aWxsIGJlIGluc2VydGVkOyBtYXkgYmUKKyAgICB0aGUg
ZW5kKCkgaXRlcmF0b3IKKyAgICBAcGFyYW1baW5dIHZhbCBlbGVtZW50IHRvIGluc2VydAorICAg
IEByZXR1cm4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGluc2VydGVkIEBhIHZhbC4KKworICAg
IEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBjYWxsZWQgb24gSlNPTiB2YWx1ZXMgb3RoZXIg
dGhhbiBhcnJheXM7CisgICAgZXhhbXBsZTogYCJjYW5ub3QgdXNlIGluc2VydCgpIHdpdGggc3Ry
aW5nImAKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgQGEgcG9zIGlzIG5vdCBhbiBp
dGVyYXRvciBvZiAqdGhpczsgZXhhbXBsZToKKyAgICBgIml0ZXJhdG9yIGRvZXMgbm90IGZpdCBj
dXJyZW50IHZhbHVlImAKKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50IHBsdXMgbGluZWFyIGlu
IHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHBvcyBhbmQgZW5kIG9mIHRoZQorICAgIGNvbnRhaW5lci4K
KworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBzaG93cyBob3cgYGluc2VydCgpYCBpcyB1
c2VkLixpbnNlcnR9CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgaXRl
cmF0b3IgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIHBvcywgY29uc3QgYmFzaWNfanNvbiYgdmFsKQor
ICAgIHsKKyAgICAgICAgLy8gaW5zZXJ0IG9ubHkgd29ya3MgZm9yIGFycmF5cworICAgICAgICBp
ZiAoaXNfYXJyYXkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gY2hlY2sgaWYgaXRlcmF0
b3IgcG9zIGZpdHMgdG8gdGhpcyBKU09OIHZhbHVlCisgICAgICAgICAgICBpZiAocG9zLm1fb2Jq
ZWN0ICE9IHRoaXMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjpk
b21haW5fZXJyb3I+KCJpdGVyYXRvciBkb2VzIG5vdCBmaXQgY3VycmVudCB2YWx1ZSIpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBpbnNlcnQgdG8gYXJyYXkgYW5kIHJldHVybiBp
dGVyYXRvcgorICAgICAgICAgICAgaXRlcmF0b3IgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAg
cmVzdWx0Lm1faXQuYXJyYXlfaXRlcmF0b3IgPSBtX3ZhbHVlLmFycmF5LT5pbnNlcnQocG9zLm1f
aXQuYXJyYXlfaXRlcmF0b3IsIHZhbCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3c8c3RkOjpk
b21haW5fZXJyb3I+KCJjYW5ub3QgdXNlIGluc2VydCgpIHdpdGggIiArIHR5cGVfbmFtZSgpKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBpbnNlcnRzIGVsZW1lbnQK
KyAgICBAY29weWRvYyBpbnNlcnQoY29uc3RfaXRlcmF0b3IsIGNvbnN0IGJhc2ljX2pzb24mKQor
ICAgICovCisgICAgaXRlcmF0b3IgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIHBvcywgYmFzaWNfanNv
biYmIHZhbCkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnNlcnQocG9zLCB2YWwpOworICAgIH0K
KworICAgIC8qIQorICAgIEBicmllZiBpbnNlcnRzIGVsZW1lbnRzCisKKyAgICBJbnNlcnRzIEBh
IGNudCBjb3BpZXMgb2YgQGEgdmFsIGJlZm9yZSBpdGVyYXRvciBAYSBwb3MuCisKKyAgICBAcGFy
YW1baW5dIHBvcyBpdGVyYXRvciBiZWZvcmUgd2hpY2ggdGhlIGNvbnRlbnQgd2lsbCBiZSBpbnNl
cnRlZDsgbWF5IGJlCisgICAgdGhlIGVuZCgpIGl0ZXJhdG9yCisgICAgQHBhcmFtW2luXSBjbnQg
bnVtYmVyIG9mIGNvcGllcyBvZiBAYSB2YWwgdG8gaW5zZXJ0CisgICAgQHBhcmFtW2luXSB2YWwg
ZWxlbWVudCB0byBpbnNlcnQKKyAgICBAcmV0dXJuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBm
aXJzdCBlbGVtZW50IGluc2VydGVkLCBvciBAYSBwb3MgaWYKKyAgICBgY250PT0wYAorCisgICAg
QHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIGNhbGxlZCBvbiBKU09OIHZhbHVlcyBvdGhlciB0
aGFuIGFycmF5czsKKyAgICBleGFtcGxlOiBgImNhbm5vdCB1c2UgaW5zZXJ0KCkgd2l0aCBzdHJp
bmciYAorICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBAYSBwb3MgaXMgbm90IGFuIGl0
ZXJhdG9yIG9mICp0aGlzOyBleGFtcGxlOgorICAgIGAiaXRlcmF0b3IgZG9lcyBub3QgZml0IGN1
cnJlbnQgdmFsdWUiYAorCisgICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIEBhIGNudCBwbHVzIGxp
bmVhciBpbiB0aGUgZGlzdGFuY2UgYmV0d2VlbiBAYSBwb3MKKyAgICBhbmQgZW5kIG9mIHRoZSBj
b250YWluZXIuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgc2hvd3MgaG93IGBpbnNl
cnQoKWAgaXMgdXNlZC4saW5zZXJ0X19jb3VudH0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4w
CisgICAgKi8KKyAgICBpdGVyYXRvciBpbnNlcnQoY29uc3RfaXRlcmF0b3IgcG9zLCBzaXplX3R5
cGUgY250LCBjb25zdCBiYXNpY19qc29uJiB2YWwpCisgICAgeworICAgICAgICAvLyBpbnNlcnQg
b25seSB3b3JrcyBmb3IgYXJyYXlzCisgICAgICAgIGlmIChpc19hcnJheSgpKQorICAgICAgICB7
CisgICAgICAgICAgICAvLyBjaGVjayBpZiBpdGVyYXRvciBwb3MgZml0cyB0byB0aGlzIEpTT04g
dmFsdWUKKyAgICAgICAgICAgIGlmIChwb3MubV9vYmplY3QgIT0gdGhpcykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oIml0ZXJhdG9yIGRv
ZXMgbm90IGZpdCBjdXJyZW50IHZhbHVlIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIGluc2VydCB0byBhcnJheSBhbmQgcmV0dXJuIGl0ZXJhdG9yCisgICAgICAgICAgICBpdGVy
YXRvciByZXN1bHQodGhpcyk7CisgICAgICAgICAgICByZXN1bHQubV9pdC5hcnJheV9pdGVyYXRv
ciA9IG1fdmFsdWUuYXJyYXktPmluc2VydChwb3MubV9pdC5hcnJheV9pdGVyYXRvciwgY250LCB2
YWwpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fubm90
IHVzZSBpbnNlcnQoKSB3aXRoICIgKyB0eXBlX25hbWUoKSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvKiEKKyAgICBAYnJpZWYgaW5zZXJ0cyBlbGVtZW50cworCisgICAgSW5zZXJ0cyBlbGVt
ZW50cyBmcm9tIHJhbmdlIGBbZmlyc3QsIGxhc3QpYCBiZWZvcmUgaXRlcmF0b3IgQGEgcG9zLgor
CisgICAgQHBhcmFtW2luXSBwb3MgaXRlcmF0b3IgYmVmb3JlIHdoaWNoIHRoZSBjb250ZW50IHdp
bGwgYmUgaW5zZXJ0ZWQ7IG1heSBiZQorICAgIHRoZSBlbmQoKSBpdGVyYXRvcgorICAgIEBwYXJh
bVtpbl0gZmlyc3QgYmVnaW4gb2YgdGhlIHJhbmdlIG9mIGVsZW1lbnRzIHRvIGluc2VydAorICAg
IEBwYXJhbVtpbl0gbGFzdCBlbmQgb2YgdGhlIHJhbmdlIG9mIGVsZW1lbnRzIHRvIGluc2VydAor
CisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIGNhbGxlZCBvbiBKU09OIHZhbHVlcyBv
dGhlciB0aGFuIGFycmF5czsKKyAgICBleGFtcGxlOiBgImNhbm5vdCB1c2UgaW5zZXJ0KCkgd2l0
aCBzdHJpbmciYAorICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBAYSBwb3MgaXMgbm90
IGFuIGl0ZXJhdG9yIG9mICp0aGlzOyBleGFtcGxlOgorICAgIGAiaXRlcmF0b3IgZG9lcyBub3Qg
Zml0IGN1cnJlbnQgdmFsdWUiYAorICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBAYSBm
aXJzdCBhbmQgQGEgbGFzdCBkbyBub3QgYmVsb25nIHRvIHRoZSBzYW1lCisgICAgSlNPTiB2YWx1
ZTsgZXhhbXBsZTogYCJpdGVyYXRvcnMgZG8gbm90IGZpdCJgCisgICAgQHRocm93IHN0ZDo6ZG9t
YWluX2Vycm9yIGlmIEBhIGZpcnN0IG9yIEBhIGxhc3QgYXJlIGl0ZXJhdG9ycyBpbnRvCisgICAg
Y29udGFpbmVyIGZvciB3aGljaCBpbnNlcnQgaXMgY2FsbGVkOyBleGFtcGxlOiBgInBhc3NlZCBp
dGVyYXRvcnMgbWF5IG5vdAorICAgIGJlbG9uZyB0byBjb250YWluZXIiYAorCisgICAgQHJldHVy
biBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZmlyc3QgZWxlbWVudCBpbnNlcnRlZCwgb3IgQGEg
cG9zIGlmCisgICAgYGZpcnN0PT1sYXN0YAorCisgICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIGBz
dGQ6OmRpc3RhbmNlKGZpcnN0LCBsYXN0KWAgcGx1cyBsaW5lYXIgaW4gdGhlCisgICAgZGlzdGFu
Y2UgYmV0d2VlbiBAYSBwb3MgYW5kIGVuZCBvZiB0aGUgY29udGFpbmVyLgorCisgICAgQGxpdmVl
eGFtcGxle1RoZSBleGFtcGxlIHNob3dzIGhvdyBgaW5zZXJ0KClgIGlzIHVzZWQuLGluc2VydF9f
cmFuZ2V9CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgaXRlcmF0b3Ig
aW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIHBvcywgY29uc3RfaXRlcmF0b3IgZmlyc3QsIGNvbnN0X2l0
ZXJhdG9yIGxhc3QpCisgICAgeworICAgICAgICAvLyBpbnNlcnQgb25seSB3b3JrcyBmb3IgYXJy
YXlzCisgICAgICAgIGlmIChub3QgaXNfYXJyYXkoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
VGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJjYW5ub3QgdXNlIGluc2VydCgpIHdpdGggIiArIHR5
cGVfbmFtZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGNoZWNrIGlmIGl0ZXJhdG9yIHBv
cyBmaXRzIHRvIHRoaXMgSlNPTiB2YWx1ZQorICAgICAgICBpZiAocG9zLm1fb2JqZWN0ICE9IHRo
aXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiaXRl
cmF0b3IgZG9lcyBub3QgZml0IGN1cnJlbnQgdmFsdWUiKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIGNoZWNrIGlmIHJhbmdlIGl0ZXJhdG9ycyBiZWxvbmcgdG8gdGhlIHNhbWUgSlNPTiBvYmpl
Y3QKKyAgICAgICAgaWYgKGZpcnN0Lm1fb2JqZWN0ICE9IGxhc3QubV9vYmplY3QpCisgICAgICAg
IHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiaXRlcmF0b3JzIGRvIG5v
dCBmaXQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmaXJzdC5tX29iamVjdCA9PSB0aGlz
IG9yIGxhc3QubV9vYmplY3QgPT0gdGhpcykKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3c8
c3RkOjpkb21haW5fZXJyb3I+KCJwYXNzZWQgaXRlcmF0b3JzIG1heSBub3QgYmVsb25nIHRvIGNv
bnRhaW5lciIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gaW5zZXJ0IHRvIGFycmF5IGFuZCBy
ZXR1cm4gaXRlcmF0b3IKKyAgICAgICAgaXRlcmF0b3IgcmVzdWx0KHRoaXMpOworICAgICAgICBy
ZXN1bHQubV9pdC5hcnJheV9pdGVyYXRvciA9IG1fdmFsdWUuYXJyYXktPmluc2VydCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zLm1faXQuYXJyYXlfaXRlcmF0
b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Lm1faXQu
YXJyYXlfaXRlcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxhc3QubV9pdC5hcnJheV9pdGVyYXRvcik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgLyohCisgICAgQGJyaWVmIGluc2VydHMgZWxlbWVudHMKKworICAgIEluc2VydHMg
ZWxlbWVudHMgZnJvbSBpbml0aWFsaXplciBsaXN0IEBhIGlsaXN0IGJlZm9yZSBpdGVyYXRvciBA
YSBwb3MuCisKKyAgICBAcGFyYW1baW5dIHBvcyBpdGVyYXRvciBiZWZvcmUgd2hpY2ggdGhlIGNv
bnRlbnQgd2lsbCBiZSBpbnNlcnRlZDsgbWF5IGJlCisgICAgdGhlIGVuZCgpIGl0ZXJhdG9yCisg
ICAgQHBhcmFtW2luXSBpbGlzdCBpbml0aWFsaXplciBsaXN0IHRvIGluc2VydCB0aGUgdmFsdWVz
IGZyb20KKworICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBjYWxsZWQgb24gSlNPTiB2
YWx1ZXMgb3RoZXIgdGhhbiBhcnJheXM7CisgICAgZXhhbXBsZTogYCJjYW5ub3QgdXNlIGluc2Vy
dCgpIHdpdGggc3RyaW5nImAKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgQGEgcG9z
IGlzIG5vdCBhbiBpdGVyYXRvciBvZiAqdGhpczsgZXhhbXBsZToKKyAgICBgIml0ZXJhdG9yIGRv
ZXMgbm90IGZpdCBjdXJyZW50IHZhbHVlImAKKworICAgIEByZXR1cm4gaXRlcmF0b3IgcG9pbnRp
bmcgdG8gdGhlIGZpcnN0IGVsZW1lbnQgaW5zZXJ0ZWQsIG9yIEBhIHBvcyBpZgorICAgIGBpbGlz
dGAgaXMgZW1wdHkKKworICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiBgaWxpc3Quc2l6ZSgpYCBw
bHVzIGxpbmVhciBpbiB0aGUgZGlzdGFuY2UgYmV0d2VlbgorICAgIEBhIHBvcyBhbmQgZW5kIG9m
IHRoZSBjb250YWluZXIuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgc2hvd3MgaG93
IGBpbnNlcnQoKWAgaXMgdXNlZC4saW5zZXJ0X19pbGlzdH0KKworICAgIEBzaW5jZSB2ZXJzaW9u
IDEuMC4wCisgICAgKi8KKyAgICBpdGVyYXRvciBpbnNlcnQoY29uc3RfaXRlcmF0b3IgcG9zLCBz
dGQ6OmluaXRpYWxpemVyX2xpc3Q8YmFzaWNfanNvbj4gaWxpc3QpCisgICAgeworICAgICAgICAv
LyBpbnNlcnQgb25seSB3b3JrcyBmb3IgYXJyYXlzCisgICAgICAgIGlmIChub3QgaXNfYXJyYXko
KSkKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJjYW5u
b3QgdXNlIGluc2VydCgpIHdpdGggIiArIHR5cGVfbmFtZSgpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIGNoZWNrIGlmIGl0ZXJhdG9yIHBvcyBmaXRzIHRvIHRoaXMgSlNPTiB2YWx1ZQorICAg
ICAgICBpZiAocG9zLm1fb2JqZWN0ICE9IHRoaXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRo
cm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiaXRlcmF0b3IgZG9lcyBub3QgZml0IGN1cnJlbnQgdmFs
dWUiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGluc2VydCB0byBhcnJheSBhbmQgcmV0dXJu
IGl0ZXJhdG9yCisgICAgICAgIGl0ZXJhdG9yIHJlc3VsdCh0aGlzKTsKKyAgICAgICAgcmVzdWx0
Lm1faXQuYXJyYXlfaXRlcmF0b3IgPSBtX3ZhbHVlLmFycmF5LT5pbnNlcnQocG9zLm1faXQuYXJy
YXlfaXRlcmF0b3IsIGlsaXN0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICAvKiEKKyAgICBAYnJpZWYgZXhjaGFuZ2VzIHRoZSB2YWx1ZXMKKworICAgIEV4Y2hhbmdlcyB0
aGUgY29udGVudHMgb2YgdGhlIEpTT04gdmFsdWUgd2l0aCB0aG9zZSBvZiBAYSBvdGhlci4gRG9l
cyBub3QKKyAgICBpbnZva2UgYW55IG1vdmUsIGNvcHksIG9yIHN3YXAgb3BlcmF0aW9ucyBvbiBp
bmRpdmlkdWFsIGVsZW1lbnRzLiBBbGwKKyAgICBpdGVyYXRvcnMgYW5kIHJlZmVyZW5jZXMgcmVt
YWluIHZhbGlkLiBUaGUgcGFzdC10aGUtZW5kIGl0ZXJhdG9yIGlzCisgICAgaW52YWxpZGF0ZWQu
CisKKyAgICBAcGFyYW1baW4sb3V0XSBvdGhlciBKU09OIHZhbHVlIHRvIGV4Y2hhbmdlIHRoZSBj
b250ZW50cyB3aXRoCisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEBsaXZlZXhh
bXBsZXtUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyBob3cgSlNPTiB2YWx1ZXMgY2FuIGJlIHN3YXBw
ZWQgd2l0aAorICAgIGBzd2FwKClgLixzd2FwX19yZWZlcmVuY2V9CisKKyAgICBAc2luY2UgdmVy
c2lvbiAxLjAuMAorICAgICovCisgICAgdm9pZCBzd2FwKHJlZmVyZW5jZSBvdGhlcikgbm9leGNl
cHQgKAorICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPHZhbHVlX3Q+
Ojp2YWx1ZSBhbmQKKyAgICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTx2YWx1
ZV90Pjo6dmFsdWUgYW5kCisgICAgICAgIHN0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGli
bGU8anNvbl92YWx1ZT46OnZhbHVlIGFuZAorICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9h
c3NpZ25hYmxlPGpzb25fdmFsdWU+Ojp2YWx1ZQorICAgICkKKyAgICB7CisgICAgICAgIHN0ZDo6
c3dhcChtX3R5cGUsIG90aGVyLm1fdHlwZSk7CisgICAgICAgIHN0ZDo6c3dhcChtX3ZhbHVlLCBv
dGhlci5tX3ZhbHVlKTsKKyAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOworICAgIH0KKworICAg
IC8qIQorICAgIEBicmllZiBleGNoYW5nZXMgdGhlIHZhbHVlcworCisgICAgRXhjaGFuZ2VzIHRo
ZSBjb250ZW50cyBvZiBhIEpTT04gYXJyYXkgd2l0aCB0aG9zZSBvZiBAYSBvdGhlci4gRG9lcyBu
b3QKKyAgICBpbnZva2UgYW55IG1vdmUsIGNvcHksIG9yIHN3YXAgb3BlcmF0aW9ucyBvbiBpbmRp
dmlkdWFsIGVsZW1lbnRzLiBBbGwKKyAgICBpdGVyYXRvcnMgYW5kIHJlZmVyZW5jZXMgcmVtYWlu
IHZhbGlkLiBUaGUgcGFzdC10aGUtZW5kIGl0ZXJhdG9yIGlzCisgICAgaW52YWxpZGF0ZWQuCisK
KyAgICBAcGFyYW1baW4sb3V0XSBvdGhlciBhcnJheSB0byBleGNoYW5nZSB0aGUgY29udGVudHMg
d2l0aAorCisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIHdoZW4gSlNPTiB2YWx1ZSBpcyBu
b3QgYW4gYXJyYXk7IGV4YW1wbGU6IGAiY2Fubm90CisgICAgdXNlIHN3YXAoKSB3aXRoIHN0cmlu
ZyJgCisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUg
ZXhhbXBsZSBiZWxvdyBzaG93cyBob3cgYXJyYXlzIGNhbiBiZSBzd2FwcGVkIHdpdGgKKyAgICBg
c3dhcCgpYC4sc3dhcF9fYXJyYXlfdH0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAg
Ki8KKyAgICB2b2lkIHN3YXAoYXJyYXlfdCYgb3RoZXIpCisgICAgeworICAgICAgICAvLyBzd2Fw
IG9ubHkgd29ya3MgZm9yIGFycmF5cworICAgICAgICBpZiAoaXNfYXJyYXkoKSkKKyAgICAgICAg
eworICAgICAgICAgICAgc3RkOjpzd2FwKCoobV92YWx1ZS5hcnJheSksIG90aGVyKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9t
YWluX2Vycm9yPigiY2Fubm90IHVzZSBzd2FwKCkgd2l0aCAiICsgdHlwZV9uYW1lKCkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGV4Y2hhbmdlcyB0aGUgdmFsdWVz
CisKKyAgICBFeGNoYW5nZXMgdGhlIGNvbnRlbnRzIG9mIGEgSlNPTiBvYmplY3Qgd2l0aCB0aG9z
ZSBvZiBAYSBvdGhlci4gRG9lcyBub3QKKyAgICBpbnZva2UgYW55IG1vdmUsIGNvcHksIG9yIHN3
YXAgb3BlcmF0aW9ucyBvbiBpbmRpdmlkdWFsIGVsZW1lbnRzLiBBbGwKKyAgICBpdGVyYXRvcnMg
YW5kIHJlZmVyZW5jZXMgcmVtYWluIHZhbGlkLiBUaGUgcGFzdC10aGUtZW5kIGl0ZXJhdG9yIGlz
CisgICAgaW52YWxpZGF0ZWQuCisKKyAgICBAcGFyYW1baW4sb3V0XSBvdGhlciBvYmplY3QgdG8g
ZXhjaGFuZ2UgdGhlIGNvbnRlbnRzIHdpdGgKKworICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJv
ciB3aGVuIEpTT04gdmFsdWUgaXMgbm90IGFuIG9iamVjdDsgZXhhbXBsZToKKyAgICBgImNhbm5v
dCB1c2Ugc3dhcCgpIHdpdGggc3RyaW5nImAKKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50Lgor
CisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyBvYmplY3RzIGNh
biBiZSBzd2FwcGVkIHdpdGgKKyAgICBgc3dhcCgpYC4sc3dhcF9fb2JqZWN0X3R9CisKKyAgICBA
c2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgdm9pZCBzd2FwKG9iamVjdF90JiBvdGhl
cikKKyAgICB7CisgICAgICAgIC8vIHN3YXAgb25seSB3b3JrcyBmb3Igb2JqZWN0cworICAgICAg
ICBpZiAoaXNfb2JqZWN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0ZDo6c3dhcCgqKG1f
dmFsdWUub2JqZWN0KSwgb3RoZXIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJjYW5ub3QgdXNlIHN3YXAo
KSB3aXRoICIgKyB0eXBlX25hbWUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiEKKyAg
ICBAYnJpZWYgZXhjaGFuZ2VzIHRoZSB2YWx1ZXMKKworICAgIEV4Y2hhbmdlcyB0aGUgY29udGVu
dHMgb2YgYSBKU09OIHN0cmluZyB3aXRoIHRob3NlIG9mIEBhIG90aGVyLiBEb2VzIG5vdAorICAg
IGludm9rZSBhbnkgbW92ZSwgY29weSwgb3Igc3dhcCBvcGVyYXRpb25zIG9uIGluZGl2aWR1YWwg
ZWxlbWVudHMuIEFsbAorICAgIGl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcyByZW1haW4gdmFsaWQu
IFRoZSBwYXN0LXRoZS1lbmQgaXRlcmF0b3IgaXMKKyAgICBpbnZhbGlkYXRlZC4KKworICAgIEBw
YXJhbVtpbixvdXRdIG90aGVyIHN0cmluZyB0byBleGNoYW5nZSB0aGUgY29udGVudHMgd2l0aAor
CisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIHdoZW4gSlNPTiB2YWx1ZSBpcyBub3QgYSBz
dHJpbmc7IGV4YW1wbGU6IGAiY2Fubm90CisgICAgdXNlIHN3YXAoKSB3aXRoIGJvb2xlYW4iYAor
CisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1w
bGUgYmVsb3cgc2hvd3MgaG93IHN0cmluZ3MgY2FuIGJlIHN3YXBwZWQgd2l0aAorICAgIGBzd2Fw
KClgLixzd2FwX19zdHJpbmdfdH0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8K
KyAgICB2b2lkIHN3YXAoc3RyaW5nX3QmIG90aGVyKQorICAgIHsKKyAgICAgICAgLy8gc3dhcCBv
bmx5IHdvcmtzIGZvciBzdHJpbmdzCisgICAgICAgIGlmIChpc19zdHJpbmcoKSkKKyAgICAgICAg
eworICAgICAgICAgICAgc3RkOjpzd2FwKCoobV92YWx1ZS5zdHJpbmcpLCBvdGhlcik7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBUaHJvdzxzdGQ6OmRv
bWFpbl9lcnJvcj4oImNhbm5vdCB1c2Ugc3dhcCgpIHdpdGggIiArIHR5cGVfbmFtZSgpKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vLyBAfQorCisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLyBsZXhpY29ncmFwaGljYWwgY29tcGFyaXNv
biBvcGVyYXRvcnMgLy8KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKworICAgIC8vLyBAbmFtZSBsZXhpY29ncmFwaGljYWwgY29tcGFyaXNvbiBvcGVyYXRv
cnMKKyAgICAvLy8gQHsKKworICBwcml2YXRlOgorICAgIC8qIQorICAgIEBicmllZiBjb21wYXJp
c29uIG9wZXJhdG9yIGZvciBKU09OIHR5cGVzCisKKyAgICBSZXR1cm5zIGFuIG9yZGVyaW5nIHRo
YXQgaXMgc2ltaWxhciB0byBQeXRob246CisgICAgLSBvcmRlcjogbnVsbCA8IGJvb2xlYW4gPCBu
dW1iZXIgPCBvYmplY3QgPCBhcnJheSA8IHN0cmluZworICAgIC0gZnVydGhlcm1vcmUsIGVhY2gg
dHlwZSBpcyBub3Qgc21hbGxlciB0aGFuIGl0c2VsZgorCisgICAgQHNpbmNlIHZlcnNpb24gMS4w
LjAKKyAgICAqLworICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPChjb25zdCB2YWx1ZV90IGxocywg
Y29uc3QgdmFsdWVfdCByaHMpIG5vZXhjZXB0CisgICAgeworICAgICAgICBzdGF0aWMgY29uc3Rl
eHByIHN0ZDo6YXJyYXk8dWludDhfdCwgOD4gb3JkZXIgPSB7eworICAgICAgICAgICAgICAgIDAs
IC8vIG51bGwKKyAgICAgICAgICAgICAgICAzLCAvLyBvYmplY3QKKyAgICAgICAgICAgICAgICA0
LCAvLyBhcnJheQorICAgICAgICAgICAgICAgIDUsIC8vIHN0cmluZworICAgICAgICAgICAgICAg
IDEsIC8vIGJvb2xlYW4KKyAgICAgICAgICAgICAgICAyLCAvLyBpbnRlZ2VyCisgICAgICAgICAg
ICAgICAgMiwgLy8gdW5zaWduZWQKKyAgICAgICAgICAgICAgICAyLCAvLyBmbG9hdAorICAgICAg
ICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIC8vIGRpc2NhcmRlZCB2YWx1ZXMgYXJlIG5v
dCBjb21wYXJhYmxlCisgICAgICAgIGlmIChsaHMgPT0gdmFsdWVfdDo6ZGlzY2FyZGVkIG9yIHJo
cyA9PSB2YWx1ZV90OjpkaXNjYXJkZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBvcmRlcltzdGF0aWNfY2FzdDxzdGQ6
OnNpemVfdD4obGhzKV0gPCBvcmRlcltzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4ocmhzKV07Cisg
ICAgfQorCisgIHB1YmxpYzoKKyAgICAvKiEKKyAgICBAYnJpZWYgY29tcGFyaXNvbjogZXF1YWwK
KworICAgIENvbXBhcmVzIHR3byBKU09OIHZhbHVlcyBmb3IgZXF1YWxpdHkgYWNjb3JkaW5nIHRv
IHRoZSBmb2xsb3dpbmcgcnVsZXM6CisgICAgLSBUd28gSlNPTiB2YWx1ZXMgYXJlIGVxdWFsIGlm
ICgxKSB0aGV5IGFyZSBmcm9tIHRoZSBzYW1lIHR5cGUgYW5kICgyKQorICAgICAgdGhlaXIgc3Rv
cmVkIHZhbHVlcyBhcmUgdGhlIHNhbWUuCisgICAgLSBJbnRlZ2VyIGFuZCBmbG9hdGluZy1wb2lu
dCBudW1iZXJzIGFyZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCBiZWZvcmUKKyAgICAgIGNvbXBh
cmlzb24uIEZsb2F0aW5nLXBvaW50IG51bWJlcnMgYXJlIGNvbXBhcmVkIGluZGlyZWN0bHk6IHR3
bworICAgICAgZmxvYXRpbmctcG9pbnQgbnVtYmVycyBgZjFgIGFuZCBgZjJgIGFyZSBjb25zaWRl
cmVkIGVxdWFsIGlmIG5laXRoZXIKKyAgICAgIGBmMSA+IGYyYCBub3IgYGYyID4gZjFgIGhvbGRz
LgorICAgIC0gVHdvIEpTT04gbnVsbCB2YWx1ZXMgYXJlIGVxdWFsLgorCisgICAgQHBhcmFtW2lu
XSBsaHMgIGZpcnN0IEpTT04gdmFsdWUgdG8gY29uc2lkZXIKKyAgICBAcGFyYW1baW5dIHJocyAg
c2Vjb25kIEpTT04gdmFsdWUgdG8gY29uc2lkZXIKKyAgICBAcmV0dXJuIHdoZXRoZXIgdGhlIHZh
bHVlcyBAYSBsaHMgYW5kIEBhIHJocyBhcmUgZXF1YWwKKworICAgIEBjb21wbGV4aXR5IExpbmVh
ci4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgY29tcGFyaW5n
IHNldmVyYWwgSlNPTgorICAgIHR5cGVzLixvcGVyYXRvcl9fZXF1YWx9CisKKyAgICBAc2luY2Ug
dmVyc2lvbiAxLjAuMAorICAgICovCisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdF9y
ZWZlcmVuY2UgbGhzLCBjb25zdF9yZWZlcmVuY2UgcmhzKSBub2V4Y2VwdAorICAgIHsKKyAgICAg
ICAgY29uc3QgYXV0byBsaHNfdHlwZSA9IGxocy50eXBlKCk7CisgICAgICAgIGNvbnN0IGF1dG8g
cmhzX3R5cGUgPSByaHMudHlwZSgpOworCisgICAgICAgIGlmIChsaHNfdHlwZSA9PSByaHNfdHlw
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChsaHNfdHlwZSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5OgorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICpsaHMubV92YWx1ZS5hcnJheSA9PSAqcmhz
Lm1fdmFsdWUuYXJyYXk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2Ug
dmFsdWVfdDo6b2JqZWN0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICpsaHMubV92YWx1ZS5vYmplY3QgPT0gKnJocy5tX3ZhbHVlLm9iamVjdDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudWxsOgorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6c3RyaW5nOgorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICpsaHMubV92YWx1ZS5zdHJpbmcg
PT0gKnJocy5tX3ZhbHVlLnN0cmluZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGxocy5tX3ZhbHVlLmJvb2xlYW4gPT0gcmhzLm1fdmFsdWUuYm9vbGVh
bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1i
ZXJfaW50ZWdlcjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBsaHMubV92YWx1ZS5udW1iZXJfaW50ZWdlciA9PSByaHMubV92YWx1ZS5udW1iZXJfaW50ZWdl
cjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1i
ZXJfdW5zaWduZWQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbGhzLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkID09IHJocy5tX3ZhbHVlLm51bWJlcl91bnNp
Z25lZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpu
dW1iZXJfZmxvYXQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbGhzLm1fdmFsdWUubnVtYmVyX2Zsb2F0ID09IHJocy5tX3ZhbHVlLm51bWJlcl9mbG9hdDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobGhzX3R5cGUg
PT0gdmFsdWVfdDo6bnVtYmVyX2ludGVnZXIgYW5kIHJoc190eXBlID09IHZhbHVlX3Q6Om51bWJl
cl9mbG9hdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PG51bWJl
cl9mbG9hdF90PihsaHMubV92YWx1ZS5udW1iZXJfaW50ZWdlcikgPT0gcmhzLm1fdmFsdWUubnVt
YmVyX2Zsb2F0OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGxoc190eXBlID09IHZhbHVl
X3Q6Om51bWJlcl9mbG9hdCBhbmQgcmhzX3R5cGUgPT0gdmFsdWVfdDo6bnVtYmVyX2ludGVnZXIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBsaHMubV92YWx1ZS5udW1iZXJfZmxvYXQg
PT0gc3RhdGljX2Nhc3Q8bnVtYmVyX2Zsb2F0X3Q+KHJocy5tX3ZhbHVlLm51bWJlcl9pbnRlZ2Vy
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChsaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1i
ZXJfdW5zaWduZWQgYW5kIHJoc190eXBlID09IHZhbHVlX3Q6Om51bWJlcl9mbG9hdCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PG51bWJlcl9mbG9hdF90PihsaHMu
bV92YWx1ZS5udW1iZXJfdW5zaWduZWQpID09IHJocy5tX3ZhbHVlLm51bWJlcl9mbG9hdDsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmIChsaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfZmxv
YXQgYW5kIHJoc190eXBlID09IHZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGxocy5tX3ZhbHVlLm51bWJlcl9mbG9hdCA9PSBzdGF0aWNfY2Fz
dDxudW1iZXJfZmxvYXRfdD4ocmhzLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChsaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQg
YW5kIHJoc190eXBlID09IHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bnVtYmVyX2ludGVnZXJfdD4obGhzLm1fdmFsdWUu
bnVtYmVyX3Vuc2lnbmVkKSA9PSByaHMubV92YWx1ZS5udW1iZXJfaW50ZWdlcjsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChsaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlciBh
bmQgcmhzX3R5cGUgPT0gdmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbGhzLm1fdmFsdWUubnVtYmVyX2ludGVnZXIgPT0gc3RhdGljX2Nhc3Q8
bnVtYmVyX2ludGVnZXJfdD4ocmhzLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYg
Y29tcGFyaXNvbjogZXF1YWwKKworICAgIFRoZSBmdW5jdGlvbnMgY29tcGFyZXMgdGhlIGdpdmVu
IEpTT04gdmFsdWUgYWdhaW5zdCBhIG51bGwgcG9pbnRlci4gQXMgdGhlCisgICAgbnVsbCBwb2lu
dGVyIGNhbiBiZSB1c2VkIHRvIGluaXRpYWxpemUgYSBKU09OIHZhbHVlIHRvIG51bGwsIGEgY29t
cGFyaXNvbgorICAgIG9mIEpTT04gdmFsdWUgQGEgdiB3aXRoIGEgbnVsbCBwb2ludGVyIHNob3Vs
ZCBiZSBlcXVpdmFsZW50IHRvIGNhbGwKKyAgICBgdi5pc19udWxsKClgLgorCisgICAgQHBhcmFt
W2luXSB2ICBKU09OIHZhbHVlIHRvIGNvbnNpZGVyCisgICAgQHJldHVybiB3aGV0aGVyIEBhIHYg
aXMgbnVsbAorCisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAbGl2ZWV4YW1wbGV7
VGhlIGV4YW1wbGUgY29tcGFyZXMgc2V2ZXJhbCBKU09OIHR5cGVzIHRvIHRoZSBudWxsIHBvaW50
ZXIuCisgICAgLG9wZXJhdG9yX19lcXVhbF9fbnVsbHB0cl90fQorCisgICAgQHNpbmNlIHZlcnNp
b24gMS4wLjAKKyAgICAqLworICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3RfcmVmZXJl
bmNlIHYsIHN0ZDo6bnVsbHB0cl90KSBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHYu
aXNfbnVsbCgpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBjb21wYXJpc29uOiBlcXVh
bAorICAgIEBjb3B5ZG9jIG9wZXJhdG9yPT0oY29uc3RfcmVmZXJlbmNlLCBzdGQ6Om51bGxwdHJf
dCkKKyAgICAqLworICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oc3RkOjpudWxscHRyX3QsIGNv
bnN0X3JlZmVyZW5jZSB2KSBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHYuaXNfbnVs
bCgpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBjb21wYXJpc29uOiBub3QgZXF1YWwK
KworICAgIENvbXBhcmVzIHR3byBKU09OIHZhbHVlcyBmb3IgaW5lcXVhbGl0eSBieSBjYWxjdWxh
dGluZyBgbm90IChsaHMgPT0gcmhzKWAuCisKKyAgICBAcGFyYW1baW5dIGxocyAgZmlyc3QgSlNP
TiB2YWx1ZSB0byBjb25zaWRlcgorICAgIEBwYXJhbVtpbl0gcmhzICBzZWNvbmQgSlNPTiB2YWx1
ZSB0byBjb25zaWRlcgorICAgIEByZXR1cm4gd2hldGhlciB0aGUgdmFsdWVzIEBhIGxocyBhbmQg
QGEgcmhzIGFyZSBub3QgZXF1YWwKKworICAgIEBjb21wbGV4aXR5IExpbmVhci4KKworICAgIEBs
aXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgY29tcGFyaW5nIHNldmVyYWwgSlNP
TgorICAgIHR5cGVzLixvcGVyYXRvcl9fbm90ZXF1YWx9CisKKyAgICBAc2luY2UgdmVyc2lvbiAx
LjAuMAorICAgICovCisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdF9yZWZlcmVuY2Ug
bGhzLCBjb25zdF9yZWZlcmVuY2UgcmhzKSBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG5vdCAobGhzID09IHJocyk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGNvbXBhcmlz
b246IG5vdCBlcXVhbAorCisgICAgVGhlIGZ1bmN0aW9ucyBjb21wYXJlcyB0aGUgZ2l2ZW4gSlNP
TiB2YWx1ZSBhZ2FpbnN0IGEgbnVsbCBwb2ludGVyLiBBcyB0aGUKKyAgICBudWxsIHBvaW50ZXIg
Y2FuIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSBhIEpTT04gdmFsdWUgdG8gbnVsbCwgYSBjb21wYXJp
c29uCisgICAgb2YgSlNPTiB2YWx1ZSBAYSB2IHdpdGggYSBudWxsIHBvaW50ZXIgc2hvdWxkIGJl
IGVxdWl2YWxlbnQgdG8gY2FsbAorICAgIGBub3Qgdi5pc19udWxsKClgLgorCisgICAgQHBhcmFt
W2luXSB2ICBKU09OIHZhbHVlIHRvIGNvbnNpZGVyCisgICAgQHJldHVybiB3aGV0aGVyIEBhIHYg
aXMgbm90IG51bGwKKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQGxpdmVleGFt
cGxle1RoZSBleGFtcGxlIGNvbXBhcmVzIHNldmVyYWwgSlNPTiB0eXBlcyB0byB0aGUgbnVsbCBw
b2ludGVyLgorICAgICxvcGVyYXRvcl9fbm90ZXF1YWxfX251bGxwdHJfdH0KKworICAgIEBzaW5j
ZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0
X3JlZmVyZW5jZSB2LCBzdGQ6Om51bGxwdHJfdCkgbm9leGNlcHQKKyAgICB7CisgICAgICAgIHJl
dHVybiBub3Qgdi5pc19udWxsKCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGNvbXBh
cmlzb246IG5vdCBlcXVhbAorICAgIEBjb3B5ZG9jIG9wZXJhdG9yIT0oY29uc3RfcmVmZXJlbmNl
LCBzdGQ6Om51bGxwdHJfdCkKKyAgICAqLworICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oc3Rk
OjpudWxscHRyX3QsIGNvbnN0X3JlZmVyZW5jZSB2KSBub2V4Y2VwdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5vdCB2LmlzX251bGwoKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgY29t
cGFyaXNvbjogbGVzcyB0aGFuCisKKyAgICBDb21wYXJlcyB3aGV0aGVyIG9uZSBKU09OIHZhbHVl
IEBhIGxocyBpcyBsZXNzIHRoYW4gYW5vdGhlciBKU09OIHZhbHVlIEBhCisgICAgcmhzIGFjY29y
ZGluZyB0byB0aGUgZm9sbG93aW5nIHJ1bGVzOgorICAgIC0gSWYgQGEgbGhzIGFuZCBAYSByaHMg
aGF2ZSB0aGUgc2FtZSB0eXBlLCB0aGUgdmFsdWVzIGFyZSBjb21wYXJlZCB1c2luZworICAgICAg
dGhlIGRlZmF1bHQgYDxgIG9wZXJhdG9yLgorICAgIC0gSW50ZWdlciBhbmQgZmxvYXRpbmctcG9p
bnQgbnVtYmVycyBhcmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgYmVmb3JlCisgICAgICBjb21w
YXJpc29uCisgICAgLSBJbiBjYXNlIEBhIGxocyBhbmQgQGEgcmhzIGhhdmUgZGlmZmVyZW50IHR5
cGVzLCB0aGUgdmFsdWVzIGFyZSBpZ25vcmVkCisgICAgICBhbmQgdGhlIG9yZGVyIG9mIHRoZSB0
eXBlcyBpcyBjb25zaWRlcmVkLCBzZWUKKyAgICAgIEByZWYgb3BlcmF0b3I8KGNvbnN0IHZhbHVl
X3QsIGNvbnN0IHZhbHVlX3QpLgorCisgICAgQHBhcmFtW2luXSBsaHMgIGZpcnN0IEpTT04gdmFs
dWUgdG8gY29uc2lkZXIKKyAgICBAcGFyYW1baW5dIHJocyAgc2Vjb25kIEpTT04gdmFsdWUgdG8g
Y29uc2lkZXIKKyAgICBAcmV0dXJuIHdoZXRoZXIgQGEgbGhzIGlzIGxlc3MgdGhhbiBAYSByaHMK
KworICAgIEBjb21wbGV4aXR5IExpbmVhci4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBs
ZSBkZW1vbnN0cmF0ZXMgY29tcGFyaW5nIHNldmVyYWwgSlNPTgorICAgIHR5cGVzLixvcGVyYXRv
cl9fbGVzc30KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBmcmllbmQg
Ym9vbCBvcGVyYXRvcjwoY29uc3RfcmVmZXJlbmNlIGxocywgY29uc3RfcmVmZXJlbmNlIHJocykg
bm9leGNlcHQKKyAgICB7CisgICAgICAgIGNvbnN0IGF1dG8gbGhzX3R5cGUgPSBsaHMudHlwZSgp
OworICAgICAgICBjb25zdCBhdXRvIHJoc190eXBlID0gcmhzLnR5cGUoKTsKKworICAgICAgICBp
ZiAobGhzX3R5cGUgPT0gcmhzX3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
bGhzX3R5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojph
cnJheToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAqbGhz
Lm1fdmFsdWUuYXJyYXkgPCAqcmhzLm1fdmFsdWUuYXJyYXk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6b2JqZWN0OgorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICpsaHMubV92YWx1ZS5vYmplY3QgPCAqcmhzLm1f
dmFsdWUub2JqZWN0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIHZh
bHVlX3Q6Om51bGw6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVf
dDo6c3RyaW5nOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICpsaHMubV92YWx1ZS5zdHJpbmcgPCAqcmhzLm1fdmFsdWUuc3RyaW5nOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmJvb2xlYW46CisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGhzLm1fdmFsdWUuYm9vbGVhbiA8
IHJocy5tX3ZhbHVlLmJvb2xlYW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGNhc2UgdmFsdWVfdDo6bnVtYmVyX2ludGVnZXI6CisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbGhzLm1fdmFsdWUubnVtYmVyX2ludGVnZXIgPCByaHMubV92
YWx1ZS5udW1iZXJfaW50ZWdlcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
Y2FzZSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQ6CisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbGhzLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkIDwgcmhzLm1f
dmFsdWUubnVtYmVyX3Vuc2lnbmVkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBsaHMubV92YWx1ZS5udW1iZXJfZmxvYXQgPCByaHMubV92YWx1
ZS5udW1iZXJfZmxvYXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKGxoc190eXBlID09IHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyIGFuZCByaHNfdHlwZSA9
PSB2YWx1ZV90OjpudW1iZXJfZmxvYXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxudW1iZXJfZmxvYXRfdD4obGhzLm1fdmFsdWUubnVtYmVyX2ludGVnZXIpIDwg
cmhzLm1fdmFsdWUubnVtYmVyX2Zsb2F0OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGxo
c190eXBlID09IHZhbHVlX3Q6Om51bWJlcl9mbG9hdCBhbmQgcmhzX3R5cGUgPT0gdmFsdWVfdDo6
bnVtYmVyX2ludGVnZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBsaHMubV92YWx1
ZS5udW1iZXJfZmxvYXQgPCBzdGF0aWNfY2FzdDxudW1iZXJfZmxvYXRfdD4ocmhzLm1fdmFsdWUu
bnVtYmVyX2ludGVnZXIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGxoc190eXBlID09
IHZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZCBhbmQgcmhzX3R5cGUgPT0gdmFsdWVfdDo6bnVtYmVy
X2Zsb2F0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bnVtYmVy
X2Zsb2F0X3Q+KGxocy5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZCkgPCByaHMubV92YWx1ZS5udW1i
ZXJfZmxvYXQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobGhzX3R5cGUgPT0gdmFsdWVf
dDo6bnVtYmVyX2Zsb2F0IGFuZCByaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBsaHMubV92YWx1ZS5udW1iZXJfZmxvYXQg
PCBzdGF0aWNfY2FzdDxudW1iZXJfZmxvYXRfdD4ocmhzLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVk
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChsaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1i
ZXJfaW50ZWdlciBhbmQgcmhzX3R5cGUgPT0gdmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbGhzLm1fdmFsdWUubnVtYmVyX2ludGVnZXIgPCBz
dGF0aWNfY2FzdDxudW1iZXJfaW50ZWdlcl90PihyaHMubV92YWx1ZS5udW1iZXJfdW5zaWduZWQp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGxoc190eXBlID09IHZhbHVlX3Q6Om51bWJl
cl91bnNpZ25lZCBhbmQgcmhzX3R5cGUgPT0gdmFsdWVfdDo6bnVtYmVyX2ludGVnZXIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxudW1iZXJfaW50ZWdlcl90Pihs
aHMubV92YWx1ZS5udW1iZXJfdW5zaWduZWQpIDwgcmhzLm1fdmFsdWUubnVtYmVyX2ludGVnZXI7
CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBvbmx5IHJlYWNoIHRoaXMgbGluZSBpZiB3ZSBj
YW5ub3QgY29tcGFyZSB2YWx1ZXMuIEluIHRoYXQgY2FzZSwKKyAgICAgICAgLy8gd2UgY29tcGFy
ZSB0eXBlcy4gTm90ZSB3ZSBoYXZlIHRvIGNhbGwgdGhlIG9wZXJhdG9yIGV4cGxpY2l0bHksCisg
ICAgICAgIC8vIGJlY2F1c2UgTVNWQyBoYXMgcHJvYmxlbXMgb3RoZXJ3aXNlLgorICAgICAgICBy
ZXR1cm4gb3BlcmF0b3I8KGxoc190eXBlLCByaHNfdHlwZSk7CisgICAgfQorCisgICAgLyohCisg
ICAgQGJyaWVmIGNvbXBhcmlzb246IGxlc3MgdGhhbiBvciBlcXVhbAorCisgICAgQ29tcGFyZXMg
d2hldGhlciBvbmUgSlNPTiB2YWx1ZSBAYSBsaHMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGFu
b3RoZXIKKyAgICBKU09OIHZhbHVlIGJ5IGNhbGN1bGF0aW5nIGBub3QgKHJocyA8IGxocylgLgor
CisgICAgQHBhcmFtW2luXSBsaHMgIGZpcnN0IEpTT04gdmFsdWUgdG8gY29uc2lkZXIKKyAgICBA
cGFyYW1baW5dIHJocyAgc2Vjb25kIEpTT04gdmFsdWUgdG8gY29uc2lkZXIKKyAgICBAcmV0dXJu
IHdoZXRoZXIgQGEgbGhzIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBAYSByaHMKKworICAgIEBj
b21wbGV4aXR5IExpbmVhci4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBkZW1vbnN0
cmF0ZXMgY29tcGFyaW5nIHNldmVyYWwgSlNPTgorICAgIHR5cGVzLixvcGVyYXRvcl9fZ3JlYXRl
cn0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBmcmllbmQgYm9vbCBv
cGVyYXRvcjw9KGNvbnN0X3JlZmVyZW5jZSBsaHMsIGNvbnN0X3JlZmVyZW5jZSByaHMpIG5vZXhj
ZXB0CisgICAgeworICAgICAgICByZXR1cm4gbm90IChyaHMgPCBsaHMpOworICAgIH0KKworICAg
IC8qIQorICAgIEBicmllZiBjb21wYXJpc29uOiBncmVhdGVyIHRoYW4KKworICAgIENvbXBhcmVz
IHdoZXRoZXIgb25lIEpTT04gdmFsdWUgQGEgbGhzIGlzIGdyZWF0ZXIgdGhhbiBhbm90aGVyCisg
ICAgSlNPTiB2YWx1ZSBieSBjYWxjdWxhdGluZyBgbm90IChsaHMgPD0gcmhzKWAuCisKKyAgICBA
cGFyYW1baW5dIGxocyAgZmlyc3QgSlNPTiB2YWx1ZSB0byBjb25zaWRlcgorICAgIEBwYXJhbVtp
bl0gcmhzICBzZWNvbmQgSlNPTiB2YWx1ZSB0byBjb25zaWRlcgorICAgIEByZXR1cm4gd2hldGhl
ciBAYSBsaHMgaXMgZ3JlYXRlciB0aGFuIHRvIEBhIHJocworCisgICAgQGNvbXBsZXhpdHkgTGlu
ZWFyLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGRlbW9uc3RyYXRlcyBjb21wYXJp
bmcgc2V2ZXJhbCBKU09OCisgICAgdHlwZXMuLG9wZXJhdG9yX19sZXNzZXF1YWx9CisKKyAgICBA
c2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+KGNv
bnN0X3JlZmVyZW5jZSBsaHMsIGNvbnN0X3JlZmVyZW5jZSByaHMpIG5vZXhjZXB0CisgICAgewor
ICAgICAgICByZXR1cm4gbm90IChsaHMgPD0gcmhzKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBA
YnJpZWYgY29tcGFyaXNvbjogZ3JlYXRlciB0aGFuIG9yIGVxdWFsCisKKyAgICBDb21wYXJlcyB3
aGV0aGVyIG9uZSBKU09OIHZhbHVlIEBhIGxocyBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8g
YW5vdGhlcgorICAgIEpTT04gdmFsdWUgYnkgY2FsY3VsYXRpbmcgYG5vdCAobGhzIDwgcmhzKWAu
CisKKyAgICBAcGFyYW1baW5dIGxocyAgZmlyc3QgSlNPTiB2YWx1ZSB0byBjb25zaWRlcgorICAg
IEBwYXJhbVtpbl0gcmhzICBzZWNvbmQgSlNPTiB2YWx1ZSB0byBjb25zaWRlcgorICAgIEByZXR1
cm4gd2hldGhlciBAYSBsaHMgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIEBhIHJocworCisg
ICAgQGNvbXBsZXhpdHkgTGluZWFyLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGRl
bW9uc3RyYXRlcyBjb21wYXJpbmcgc2V2ZXJhbCBKU09OCisgICAgdHlwZXMuLG9wZXJhdG9yX19n
cmVhdGVyZXF1YWx9CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgZnJp
ZW5kIGJvb2wgb3BlcmF0b3I+PShjb25zdF9yZWZlcmVuY2UgbGhzLCBjb25zdF9yZWZlcmVuY2Ug
cmhzKSBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vdCAobGhzIDwgcmhzKTsKKyAg
ICB9CisKKyAgICAvLy8gQH0KKworCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIHNl
cmlhbGl6YXRpb24gLy8KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICAvLy8gQG5hbWUg
c2VyaWFsaXphdGlvbgorICAgIC8vLyBAeworCisgICAgLyohCisgICAgQGJyaWVmIHNlcmlhbGl6
ZSB0byBzdHJlYW0KKworICAgIFNlcmlhbGl6ZSB0aGUgZ2l2ZW4gSlNPTiB2YWx1ZSBAYSBqIHRv
IHRoZSBvdXRwdXQgc3RyZWFtIEBhIG8uIFRoZSBKU09OCisgICAgdmFsdWUgd2lsbCBiZSBzZXJp
YWxpemVkIHVzaW5nIHRoZSBAcmVmIGR1bXAgbWVtYmVyIGZ1bmN0aW9uLiBUaGUKKyAgICBpbmRl
bnRhdGlvbiBvZiB0aGUgb3V0cHV0IGNhbiBiZSBjb250cm9sbGVkIHdpdGggdGhlIG1lbWJlciB2
YXJpYWJsZQorICAgIGB3aWR0aGAgb2YgdGhlIG91dHB1dCBzdHJlYW0gQGEgby4gRm9yIGluc3Rh
bmNlLCB1c2luZyB0aGUgbWFuaXB1bGF0b3IKKyAgICBgc3RkOjpzZXR3KDQpYCBvbiBAYSBvIHNl
dHMgdGhlIGluZGVudGF0aW9uIGxldmVsIHRvIGA0YCBhbmQgdGhlCisgICAgc2VyaWFsaXphdGlv
biByZXN1bHQgaXMgdGhlIHNhbWUgYXMgY2FsbGluZyBgZHVtcCg0KWAuCisKKyAgICBAbm90ZSBE
dXJpbmcgc2VyaWFsaXphaW9uLCB0aGUgbG9jYWxlIGFuZCB0aGUgcHJlY2lzaW9uIG9mIHRoZSBv
dXRwdXQKKyAgICBzdHJlYW0gQGEgbyBhcmUgY2hhbmdlZC4gVGhlIG9yaWdpbmFsIHZhbHVlcyBh
cmUgcmVzdG9yZWQgd2hlbiB0aGUKKyAgICBmdW5jdGlvbiByZXR1cm5zLgorCisgICAgQHBhcmFt
W2luLG91dF0gbyAgc3RyZWFtIHRvIHNlcmlhbGl6ZSB0bworICAgIEBwYXJhbVtpbl0gaiAgSlNP
TiB2YWx1ZSB0byBzZXJpYWxpemUKKworICAgIEByZXR1cm4gdGhlIHN0cmVhbSBAYSBvCisKKyAg
ICBAY29tcGxleGl0eSBMaW5lYXIuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVs
b3cgc2hvd3MgdGhlIHNlcmlhbGl6YXRpb24gd2l0aCBkaWZmZXJlbnQKKyAgICBwYXJhbWV0ZXJz
IHRvIGB3aWR0aGAgdG8gYWRqdXN0IHRoZSBpbmRlbnRhdGlvbiBsZXZlbC4sb3BlcmF0b3Jfc2Vy
aWFsaXplfQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGZyaWVuZCBz
dGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvLCBjb25zdCBiYXNpY19qc29u
JiBqKQorICAgIHsKKyAgICAgICAgLy8gcmVhZCB3aWR0aCBtZW1iZXIgYW5kIHVzZSBpdCBhcyBp
bmRlbnRhdGlvbiBwYXJhbWV0ZXIgaWYgbm9uemVybworICAgICAgICBjb25zdCBib29sIHByZXR0
eV9wcmludCA9IChvLndpZHRoKCkgPiAwKTsKKyAgICAgICAgY29uc3QgYXV0byBpbmRlbnRhdGlv
biA9IChwcmV0dHlfcHJpbnQgPyBvLndpZHRoKCkgOiAwKTsKKworICAgICAgICAvLyByZXNldCB3
aWR0aCB0byAwIGZvciBzdWJzZXF1ZW50IGNhbGxzIHRvIHRoaXMgc3RyZWFtCisgICAgICAgIG8u
d2lkdGgoMCk7CisKKyAgICAgICAgLy8gZml4IGxvY2FsZSBwcm9ibGVtcworICAgICAgICBjb25z
dCBhdXRvIG9sZF9sb2NhbGUgPSBvLmltYnVlKHN0ZDo6bG9jYWxlOjpjbGFzc2ljKCkpOworICAg
ICAgICAvLyBzZXQgcHJlY2lzaW9uCisKKyAgICAgICAgLy8gNiwgMTUgb3IgMTYgZGlnaXRzIG9m
IHByZWNpc2lvbiBhbGxvd3Mgcm91bmQtdHJpcCBJRUVFIDc1NAorICAgICAgICAvLyBzdHJpbmct
PmZsb2F0LT5zdHJpbmcsIHN0cmluZy0+ZG91YmxlLT5zdHJpbmcgb3Igc3RyaW5nLT5sb25nCisg
ICAgICAgIC8vIGRvdWJsZS0+c3RyaW5nOyB0byBiZSBzYWZlLCB3ZSByZWFkIHRoaXMgdmFsdWUg
ZnJvbQorICAgICAgICAvLyBzdGQ6Om51bWVyaWNfbGltaXRzPG51bWJlcl9mbG9hdF90Pjo6ZGln
aXRzMTAKKyAgICAgICAgY29uc3QgYXV0byBvbGRfcHJlY2lzaW9uID0gby5wcmVjaXNpb24oc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpkaWdpdHMxMCk7CisKKyAgICAgICAgLy8gZG8gdGhl
IGFjdHVhbCBzZXJpYWxpemF0aW9uCisgICAgICAgIGouZHVtcChvLCBwcmV0dHlfcHJpbnQsIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGludD4oaW5kZW50YXRpb24pKTsKKworICAgICAgICAvLyByZXNl
dCBsb2NhbGUgYW5kIHByZWNpc2lvbgorICAgICAgICBvLmltYnVlKG9sZF9sb2NhbGUpOworICAg
ICAgICBvLnByZWNpc2lvbihvbGRfcHJlY2lzaW9uKTsKKyAgICAgICAgcmV0dXJuIG87CisgICAg
fQorCisgICAgLyohCisgICAgQGJyaWVmIHNlcmlhbGl6ZSB0byBzdHJlYW0KKyAgICBAY29weWRv
YyBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYsIGNvbnN0IGJhc2ljX2pzb24mKQorICAgICovCisg
ICAgZnJpZW5kIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I+Pihjb25zdCBiYXNpY19qc29uJiBqLCBz
dGQ6Om9zdHJlYW0mIG8pCisgICAgeworICAgICAgICByZXR1cm4gbyA8PCBqOworICAgIH0KKwor
ICAgIC8vLyBAfQorCisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLyBkZXNlcmlh
bGl6YXRpb24gLy8KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIC8vLyBAbmFtZSBk
ZXNlcmlhbGl6YXRpb24KKyAgICAvLy8gQHsKKworICAgIC8qIQorICAgIEBicmllZiBkZXNlcmlh
bGl6ZSBmcm9tIGFuIGFycmF5CisKKyAgICBUaGlzIGZ1bmN0aW9uIHJlYWRzIGZyb20gYW4gYXJy
YXkgb2YgMS1ieXRlIHZhbHVlcy4KKworICAgIEBwcmUgRWFjaCBlbGVtZW50IG9mIHRoZSBjb250
YWluZXIgaGFzIGEgc2l6ZSBvZiAxIGJ5dGUuIFZpb2xhdGluZyB0aGlzCisgICAgcHJlY29uZGl0
aW9uIHlpZWxkcyB1bmRlZmluZWQgYmVoYXZpb3IuICoqVGhpcyBwcmVjb25kaXRpb24gaXMgZW5m
b3JjZWQKKyAgICB3aXRoIGEgc3RhdGljIGFzc2VydGlvbi4qKgorCisgICAgQHBhcmFtW2luXSBh
cnJheSAgYXJyYXkgdG8gcmVhZCBmcm9tCisgICAgQHBhcmFtW2luXSBjYiAgYSBwYXJzZXIgY2Fs
bGJhY2sgZnVuY3Rpb24gb2YgdHlwZSBAcmVmIHBhcnNlcl9jYWxsYmFja190CisgICAgd2hpY2gg
aXMgdXNlZCB0byBjb250cm9sIHRoZSBkZXNlcmlhbGl6YXRpb24gYnkgZmlsdGVyaW5nIHVud2Fu
dGVkIHZhbHVlcworICAgIChvcHRpb25hbCkKKworICAgIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBk
ZXNlcmlhbGl6YXRpb24KKworICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgbGVuZ3RoIG9m
IHRoZSBpbnB1dC4gVGhlIHBhcnNlciBpcyBhIHByZWRpY3RpdmUKKyAgICBMTCgxKSBwYXJzZXIu
IFRoZSBjb21wbGV4aXR5IGNhbiBiZSBoaWdoZXIgaWYgdGhlIHBhcnNlciBjYWxsYmFjayBmdW5j
dGlvbgorICAgIEBhIGNiIGhhcyBhIHN1cGVyLWxpbmVhciBjb21wbGV4aXR5LgorCisgICAgQG5v
dGUgQSBVVEYtOCBieXRlIG9yZGVyIG1hcmsgaXMgc2lsZW50bHkgaWdub3JlZC4KKworICAgIEBs
aXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBiZWxvdyBkZW1vbnN0cmF0ZXMgdGhlIGBwYXJzZSgpYCBm
dW5jdGlvbiByZWFkaW5nCisgICAgZnJvbSBhbiBhcnJheS4scGFyc2VfX2FycmF5X19wYXJzZXJf
Y2FsbGJhY2tfdH0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDIuMC4zCisgICAgKi8KKyAgICB0ZW1w
bGF0ZTxjbGFzcyBULCBzdGQ6OnNpemVfdCBOPgorICAgIHN0YXRpYyBiYXNpY19qc29uIHBhcnNl
KFQgKCZhcnJheSlbTl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2Vy
X2NhbGxiYWNrX3QgY2IgPSBudWxscHRyKQorICAgIHsKKyAgICAgICAgLy8gZGVsZWdhdGUgdGhl
IGNhbGwgdG8gdGhlIGl0ZXJhdG9yLXJhbmdlIHBhcnNlIG92ZXJsb2FkCisgICAgICAgIHJldHVy
biBwYXJzZShzdGQ6OmJlZ2luKGFycmF5KSwgc3RkOjplbmQoYXJyYXkpLCBjYik7CisgICAgfQor
CisgICAgLyohCisgICAgQGJyaWVmIGRlc2VyaWFsaXplIGZyb20gc3RyaW5nIGxpdGVyYWwKKwor
ICAgIEB0cGFyYW0gQ2hhclQgY2hhcmFjdGVyL2xpdGVyYWwgdHlwZSB3aXRoIHNpemUgb2YgMSBi
eXRlCisgICAgQHBhcmFtW2luXSBzICBzdHJpbmcgbGl0ZXJhbCB0byByZWFkIGEgc2VyaWFsaXpl
ZCBKU09OIHZhbHVlIGZyb20KKyAgICBAcGFyYW1baW5dIGNiIGEgcGFyc2VyIGNhbGxiYWNrIGZ1
bmN0aW9uIG9mIHR5cGUgQHJlZiBwYXJzZXJfY2FsbGJhY2tfdAorICAgIHdoaWNoIGlzIHVzZWQg
dG8gY29udHJvbCB0aGUgZGVzZXJpYWxpemF0aW9uIGJ5IGZpbHRlcmluZyB1bndhbnRlZCB2YWx1
ZXMKKyAgICAob3B0aW9uYWwpCisKKyAgICBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgZGVzZXJpYWxp
emF0aW9uCisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gdGhlIGxlbmd0aCBvZiB0aGUgaW5w
dXQuIFRoZSBwYXJzZXIgaXMgYSBwcmVkaWN0aXZlCisgICAgTEwoMSkgcGFyc2VyLiBUaGUgY29t
cGxleGl0eSBjYW4gYmUgaGlnaGVyIGlmIHRoZSBwYXJzZXIgY2FsbGJhY2sgZnVuY3Rpb24KKyAg
ICBAYSBjYiBoYXMgYSBzdXBlci1saW5lYXIgY29tcGxleGl0eS4KKworICAgIEBub3RlIEEgVVRG
LTggYnl0ZSBvcmRlciBtYXJrIGlzIHNpbGVudGx5IGlnbm9yZWQuCisgICAgQG5vdGUgU3RyaW5n
IGNvbnRhaW5lcnMgbGlrZSBgc3RkOjpzdHJpbmdgIG9yIEByZWYgc3RyaW5nX3QgY2FuIGJlIHBh
cnNlZAorICAgICAgICAgIHdpdGggQHJlZiBwYXJzZShjb25zdCBDb250aWd1b3VzQ29udGFpbmVy
JiwgY29uc3QgcGFyc2VyX2NhbGxiYWNrX3QpCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1w
bGUgYmVsb3cgZGVtb25zdHJhdGVzIHRoZSBgcGFyc2UoKWAgZnVuY3Rpb24gd2l0aAorICAgIGFu
ZCB3aXRob3V0IGNhbGxiYWNrIGZ1bmN0aW9uLixwYXJzZV9fc3RyaW5nX19wYXJzZXJfY2FsbGJh
Y2tfdH0KKworICAgIEBzYSBAcmVmIHBhcnNlKHN0ZDo6aXN0cmVhbSYsIGNvbnN0IHBhcnNlcl9j
YWxsYmFja190KSBmb3IgYSB2ZXJzaW9uIHRoYXQKKyAgICByZWFkcyBmcm9tIGFuIGlucHV0IHN0
cmVhbQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAgKG9yaWdpbmFsbHkgZm9yIEByZWYgc3Ry
aW5nX3QpCisgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyUFQsIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPAorICAgICAgICAgICAgICAgICBzdGQ6OmlzX3BvaW50ZXI8Q2hhclBUPjo6
dmFsdWUgYW5kCisgICAgICAgICAgICAgICAgIHN0ZDo6aXNfaW50ZWdyYWw8dHlwZW5hbWUgc3Rk
OjpyZW1vdmVfcG9pbnRlcjxDaGFyUFQ+Ojp0eXBlPjo6dmFsdWUgYW5kCisgICAgICAgICAgICAg
ICAgIHNpemVvZih0eXBlbmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVyPENoYXJQVD46OnR5cGUpID09
IDEsIGludD46OnR5cGUgPSAwPgorICAgIHN0YXRpYyBiYXNpY19qc29uIHBhcnNlKGNvbnN0IENo
YXJQVCBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlcl9jYWxsYmFj
a190IGNiID0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIHJldHVybiBwYXJzZXIocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4ocyksIGNiKS5wYXJzZSgpOworICAgIH0KKworICAgIC8qIQor
ICAgIEBicmllZiBkZXNlcmlhbGl6ZSBmcm9tIHN0cmVhbQorCisgICAgQHBhcmFtW2luLG91dF0g
aSAgc3RyZWFtIHRvIHJlYWQgYSBzZXJpYWxpemVkIEpTT04gdmFsdWUgZnJvbQorICAgIEBwYXJh
bVtpbl0gY2IgYSBwYXJzZXIgY2FsbGJhY2sgZnVuY3Rpb24gb2YgdHlwZSBAcmVmIHBhcnNlcl9j
YWxsYmFja190CisgICAgd2hpY2ggaXMgdXNlZCB0byBjb250cm9sIHRoZSBkZXNlcmlhbGl6YXRp
b24gYnkgZmlsdGVyaW5nIHVud2FudGVkIHZhbHVlcworICAgIChvcHRpb25hbCkKKworICAgIEBy
ZXR1cm4gcmVzdWx0IG9mIHRoZSBkZXNlcmlhbGl6YXRpb24KKworICAgIEBjb21wbGV4aXR5IExp
bmVhciBpbiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dC4gVGhlIHBhcnNlciBpcyBhIHByZWRpY3Rp
dmUKKyAgICBMTCgxKSBwYXJzZXIuIFRoZSBjb21wbGV4aXR5IGNhbiBiZSBoaWdoZXIgaWYgdGhl
IHBhcnNlciBjYWxsYmFjayBmdW5jdGlvbgorICAgIEBhIGNiIGhhcyBhIHN1cGVyLWxpbmVhciBj
b21wbGV4aXR5LgorCisgICAgQG5vdGUgQSBVVEYtOCBieXRlIG9yZGVyIG1hcmsgaXMgc2lsZW50
bHkgaWdub3JlZC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBiZWxvdyBkZW1vbnN0
cmF0ZXMgdGhlIGBwYXJzZSgpYCBmdW5jdGlvbiB3aXRoCisgICAgYW5kIHdpdGhvdXQgY2FsbGJh
Y2sgZnVuY3Rpb24uLHBhcnNlX19pc3RyZWFtX19wYXJzZXJfY2FsbGJhY2tfdH0KKworICAgIEBz
YSBAcmVmIHBhcnNlKGNvbnN0IGNoYXIqLCBjb25zdCBwYXJzZXJfY2FsbGJhY2tfdCkgZm9yIGEg
dmVyc2lvbgorICAgIHRoYXQgcmVhZHMgZnJvbSBhIHN0cmluZworCisgICAgQHNpbmNlIHZlcnNp
b24gMS4wLjAKKyAgICAqLworICAgIHN0YXRpYyBiYXNpY19qc29uIHBhcnNlKHN0ZDo6aXN0cmVh
bSYgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZXJfY2FsbGJhY2tf
dCBjYiA9IG51bGxwdHIpCisgICAgeworICAgICAgICByZXR1cm4gcGFyc2VyKGksIGNiKS5wYXJz
ZSgpOworICAgIH0KKworICAgIC8qIQorICAgIEBjb3B5ZG9jIHBhcnNlKHN0ZDo6aXN0cmVhbSYs
IGNvbnN0IHBhcnNlcl9jYWxsYmFja190KQorICAgICovCisgICAgc3RhdGljIGJhc2ljX2pzb24g
cGFyc2Uoc3RkOjppc3RyZWFtJiYgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBwYXJzZXJfY2FsbGJhY2tfdCBjYiA9IG51bGxwdHIpCisgICAgeworICAgICAgICByZXR1cm4g
cGFyc2VyKGksIGNiKS5wYXJzZSgpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBkZXNl
cmlhbGl6ZSBmcm9tIGFuIGl0ZXJhdG9yIHJhbmdlIHdpdGggY29udGlndW91cyBzdG9yYWdlCisK
KyAgICBUaGlzIGZ1bmN0aW9uIHJlYWRzIGZyb20gYW4gaXRlcmF0b3IgcmFuZ2Ugb2YgYSBjb250
YWluZXIgd2l0aCBjb250aWd1b3VzCisgICAgc3RvcmFnZSBvZiAxLWJ5dGUgdmFsdWVzLiBDb21w
YXRpYmxlIGNvbnRhaW5lciB0eXBlcyBpbmNsdWRlCisgICAgYHN0ZDo6dmVjdG9yYCwgYHN0ZDo6
c3RyaW5nYCwgYHN0ZDo6YXJyYXlgLCBgc3RkOjp2YWxhcnJheWAsIGFuZAorICAgIGBzdGQ6Omlu
aXRpYWxpemVyX2xpc3RgLiBGdXJ0aGVybW9yZSwgQy1zdHlsZSBhcnJheXMgY2FuIGJlIHVzZWQg
d2l0aAorICAgIGBzdGQ6OmJlZ2luKClgL2BzdGQ6OmVuZCgpYC4gVXNlci1kZWZpbmVkIGNvbnRh
aW5lcnMgY2FuIGJlIHVzZWQgYXMgbG9uZworICAgIGFzIHRoZXkgaW1wbGVtZW50IHJhbmRvbS1h
Y2Nlc3MgaXRlcmF0b3JzIGFuZCBhIGNvbnRpZ3VvdXMgc3RvcmFnZS4KKworICAgIEBwcmUgVGhl
IGl0ZXJhdG9yIHJhbmdlIGlzIGNvbnRpZ3VvdXMuIFZpb2xhdGluZyB0aGlzIHByZWNvbmRpdGlv
biB5aWVsZHMKKyAgICB1bmRlZmluZWQgYmVoYXZpb3IuICoqVGhpcyBwcmVjb25kaXRpb24gaXMg
ZW5mb3JjZWQgd2l0aCBhbiBhc3NlcnRpb24uKioKKyAgICBAcHJlIEVhY2ggZWxlbWVudCBpbiB0
aGUgcmFuZ2UgaGFzIGEgc2l6ZSBvZiAxIGJ5dGUuIFZpb2xhdGluZyB0aGlzCisgICAgcHJlY29u
ZGl0aW9uIHlpZWxkcyB1bmRlZmluZWQgYmVoYXZpb3IuICoqVGhpcyBwcmVjb25kaXRpb24gaXMg
ZW5mb3JjZWQKKyAgICB3aXRoIGEgc3RhdGljIGFzc2VydGlvbi4qKgorCisgICAgQHdhcm5pbmcg
VGhlcmUgaXMgbm8gd2F5IHRvIGVuZm9yY2UgYWxsIHByZWNvbmRpdGlvbnMgYXQgY29tcGlsZS10
aW1lLiBJZgorICAgICAgICAgICAgIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBub25jb21w
bGlhbnQgaXRlcmF0b3JzIGFuZCB3aXRoCisgICAgICAgICAgICAgYXNzZXJ0aW9ucyBzd2l0Y2hl
ZCBvZmYsIHRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQgYW5kIHdpbGwgbW9zdAorICAgICAgICAg
ICAgIGxpa2VseSB5aWVsZCBzZWdtZW50YXRpb24gdmlvbGF0aW9uLgorCisgICAgQHRwYXJhbSBJ
dGVyYXRvclR5cGUgaXRlcmF0b3Igb2YgY29udGFpbmVyIHdpdGggY29udGlndW91cyBzdG9yYWdl
CisgICAgQHBhcmFtW2luXSBmaXJzdCAgYmVnaW4gb2YgdGhlIHJhbmdlIHRvIHBhcnNlIChpbmNs
dWRlZCkKKyAgICBAcGFyYW1baW5dIGxhc3QgIGVuZCBvZiB0aGUgcmFuZ2UgdG8gcGFyc2UgKGV4
Y2x1ZGVkKQorICAgIEBwYXJhbVtpbl0gY2IgIGEgcGFyc2VyIGNhbGxiYWNrIGZ1bmN0aW9uIG9m
IHR5cGUgQHJlZiBwYXJzZXJfY2FsbGJhY2tfdAorICAgIHdoaWNoIGlzIHVzZWQgdG8gY29udHJv
bCB0aGUgZGVzZXJpYWxpemF0aW9uIGJ5IGZpbHRlcmluZyB1bndhbnRlZCB2YWx1ZXMKKyAgICAo
b3B0aW9uYWwpCisKKyAgICBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgZGVzZXJpYWxpemF0aW9uCisK
KyAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gdGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQuIFRoZSBw
YXJzZXIgaXMgYSBwcmVkaWN0aXZlCisgICAgTEwoMSkgcGFyc2VyLiBUaGUgY29tcGxleGl0eSBj
YW4gYmUgaGlnaGVyIGlmIHRoZSBwYXJzZXIgY2FsbGJhY2sgZnVuY3Rpb24KKyAgICBAYSBjYiBo
YXMgYSBzdXBlci1saW5lYXIgY29tcGxleGl0eS4KKworICAgIEBub3RlIEEgVVRGLTggYnl0ZSBv
cmRlciBtYXJrIGlzIHNpbGVudGx5IGlnbm9yZWQuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4
YW1wbGUgYmVsb3cgZGVtb25zdHJhdGVzIHRoZSBgcGFyc2UoKWAgZnVuY3Rpb24gcmVhZGluZwor
ICAgIGZyb20gYW4gaXRlcmF0b3IgcmFuZ2UuLHBhcnNlX19pdGVyYXRvcnR5cGVfX3BhcnNlcl9j
YWxsYmFja190fQorCisgICAgQHNpbmNlIHZlcnNpb24gMi4wLjMKKyAgICAqLworICAgIHRlbXBs
YXRlPGNsYXNzIEl0ZXJhdG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8CisgICAgICAg
ICAgICAgICAgIHN0ZDo6aXNfYmFzZV9vZjwKKyAgICAgICAgICAgICAgICAgICAgIHN0ZDo6cmFu
ZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsCisgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBz
dGQ6Oml0ZXJhdG9yX3RyYWl0czxJdGVyYXRvclR5cGU+OjppdGVyYXRvcl9jYXRlZ29yeT46OnZh
bHVlLCBpbnQ+Ojp0eXBlID0gMD4KKyAgICBzdGF0aWMgYmFzaWNfanNvbiBwYXJzZShJdGVyYXRv
clR5cGUgZmlyc3QsIEl0ZXJhdG9yVHlwZSBsYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHBhcnNlcl9jYWxsYmFja190IGNiID0gbnVsbHB0cikKKyAgICB7CisgICAgICAg
IC8vIGFzc2VydGlvbiB0byBjaGVjayB0aGF0IHRoZSBpdGVyYXRvciByYW5nZSBpcyBpbmRlZWQg
Y29udGlndW91cywKKyAgICAgICAgLy8gc2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM1
MDA4ODQyLzI2NjM3OCBmb3IgbW9yZSBkaXNjdXNzaW9uCisgICAgICAgIGFzc2VydChzdGQ6OmFj
Y3VtdWxhdGUoZmlyc3QsIGxhc3QsIHN0ZDo6bWFrZV9wYWlyPGJvb2wsIGludD4odHJ1ZSwgMCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZmaXJzdF0oc3RkOjpwYWlyPGJvb2ws
IGludD4gcmVzLCBkZWNsdHlwZSgqZmlyc3QpIHZhbCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmVzLmZpcnN0ICY9ICh2YWwgPT0gKihzdGQ6Om5leHQoc3RkOjphZGRyZXNzb2YoKmZpcnN0KSwg
cmVzLnNlY29uZCsrKSkpOworICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgfSkuZmly
c3QpOworCisgICAgICAgIC8vIGFzc2VydGlvbiB0byBjaGVjayB0aGF0IGVhY2ggZWxlbWVudCBp
cyAxIGJ5dGUgbG9uZworICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZih0eXBlbmFtZSBzdGQ6
Oml0ZXJhdG9yX3RyYWl0czxJdGVyYXRvclR5cGU+Ojp2YWx1ZV90eXBlKSA9PSAxLAorICAgICAg
ICAgICAgICAgICAgICAgICJlYWNoIGVsZW1lbnQgaW4gdGhlIGl0ZXJhdG9yIHJhbmdlIG11c3Qg
aGF2ZSB0aGUgc2l6ZSBvZiAxIGJ5dGUiKTsKKworICAgICAgICAvLyBpZiBpdGVyYXRvciByYW5n
ZSBpcyBlbXB0eSwgY3JlYXRlIGEgcGFyc2VyIHdpdGggYW4gZW1wdHkgc3RyaW5nCisgICAgICAg
IC8vIHRvIGdlbmVyYXRlICJ1bmV4cGVjdGVkIEVPRiIgZXJyb3IgbWVzc2FnZQorICAgICAgICBp
ZiAoc3RkOjpkaXN0YW5jZShmaXJzdCwgbGFzdCkgPD0gMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIHBhcnNlcigiIikucGFyc2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biBwYXJzZXIoZmlyc3QsIGxhc3QsIGNiKS5wYXJzZSgpOworICAgIH0KKworICAgIC8qIQorICAg
IEBicmllZiBkZXNlcmlhbGl6ZSBmcm9tIGEgY29udGFpbmVyIHdpdGggY29udGlndW91cyBzdG9y
YWdlCisKKyAgICBUaGlzIGZ1bmN0aW9uIHJlYWRzIGZyb20gYSBjb250YWluZXIgd2l0aCBjb250
aWd1b3VzIHN0b3JhZ2Ugb2YgMS1ieXRlCisgICAgdmFsdWVzLiBDb21wYXRpYmxlIGNvbnRhaW5l
ciB0eXBlcyBpbmNsdWRlIGBzdGQ6OnZlY3RvcmAsIGBzdGQ6OnN0cmluZ2AsCisgICAgYHN0ZDo6
YXJyYXlgLCBhbmQgYHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdGAuIFVzZXItZGVmaW5lZCBjb250YWlu
ZXJzIGNhbiBiZQorICAgIHVzZWQgYXMgbG9uZyBhcyB0aGV5IGltcGxlbWVudCByYW5kb20tYWNj
ZXNzIGl0ZXJhdG9ycyBhbmQgYSBjb250aWd1b3VzCisgICAgc3RvcmFnZS4KKworICAgIEBwcmUg
VGhlIGNvbnRhaW5lciBzdG9yYWdlIGlzIGNvbnRpZ3VvdXMuIFZpb2xhdGluZyB0aGlzIHByZWNv
bmRpdGlvbgorICAgIHlpZWxkcyB1bmRlZmluZWQgYmVoYXZpb3IuICoqVGhpcyBwcmVjb25kaXRp
b24gaXMgZW5mb3JjZWQgd2l0aCBhbgorICAgIGFzc2VydGlvbi4qKgorICAgIEBwcmUgRWFjaCBl
bGVtZW50IG9mIHRoZSBjb250YWluZXIgaGFzIGEgc2l6ZSBvZiAxIGJ5dGUuIFZpb2xhdGluZyB0
aGlzCisgICAgcHJlY29uZGl0aW9uIHlpZWxkcyB1bmRlZmluZWQgYmVoYXZpb3IuICoqVGhpcyBw
cmVjb25kaXRpb24gaXMgZW5mb3JjZWQKKyAgICB3aXRoIGEgc3RhdGljIGFzc2VydGlvbi4qKgor
CisgICAgQHdhcm5pbmcgVGhlcmUgaXMgbm8gd2F5IHRvIGVuZm9yY2UgYWxsIHByZWNvbmRpdGlv
bnMgYXQgY29tcGlsZS10aW1lLiBJZgorICAgICAgICAgICAgIHRoZSBmdW5jdGlvbiBpcyBjYWxs
ZWQgd2l0aCBhIG5vbmNvbXBsaWFudCBjb250YWluZXIgYW5kIHdpdGgKKyAgICAgICAgICAgICBh
c3NlcnRpb25zIHN3aXRjaGVkIG9mZiwgdGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZCBhbmQgd2ls
bCBtb3N0CisgICAgICAgICAgICAgbGlrZWx5IHlpZWxkIHNlZ21lbnRhdGlvbiB2aW9sYXRpb24u
CisKKyAgICBAdHBhcmFtIENvbnRpZ3VvdXNDb250YWluZXIgY29udGFpbmVyIHR5cGUgd2l0aCBj
b250aWd1b3VzIHN0b3JhZ2UKKyAgICBAcGFyYW1baW5dIGMgIGNvbnRhaW5lciB0byByZWFkIGZy
b20KKyAgICBAcGFyYW1baW5dIGNiICBhIHBhcnNlciBjYWxsYmFjayBmdW5jdGlvbiBvZiB0eXBl
IEByZWYgcGFyc2VyX2NhbGxiYWNrX3QKKyAgICB3aGljaCBpcyB1c2VkIHRvIGNvbnRyb2wgdGhl
IGRlc2VyaWFsaXphdGlvbiBieSBmaWx0ZXJpbmcgdW53YW50ZWQgdmFsdWVzCisgICAgKG9wdGlv
bmFsKQorCisgICAgQHJldHVybiByZXN1bHQgb2YgdGhlIGRlc2VyaWFsaXphdGlvbgorCisgICAg
QGNvbXBsZXhpdHkgTGluZWFyIGluIHRoZSBsZW5ndGggb2YgdGhlIGlucHV0LiBUaGUgcGFyc2Vy
IGlzIGEgcHJlZGljdGl2ZQorICAgIExMKDEpIHBhcnNlci4gVGhlIGNvbXBsZXhpdHkgY2FuIGJl
IGhpZ2hlciBpZiB0aGUgcGFyc2VyIGNhbGxiYWNrIGZ1bmN0aW9uCisgICAgQGEgY2IgaGFzIGEg
c3VwZXItbGluZWFyIGNvbXBsZXhpdHkuCisKKyAgICBAbm90ZSBBIFVURi04IGJ5dGUgb3JkZXIg
bWFyayBpcyBzaWxlbnRseSBpZ25vcmVkLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxl
IGJlbG93IGRlbW9uc3RyYXRlcyB0aGUgYHBhcnNlKClgIGZ1bmN0aW9uIHJlYWRpbmcKKyAgICBm
cm9tIGEgY29udGlndW91cyBjb250YWluZXIuLHBhcnNlX19jb250aWd1b3VzY29udGFpbmVyX19w
YXJzZXJfY2FsbGJhY2tfdH0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDIuMC4zCisgICAgKi8KKyAg
ICB0ZW1wbGF0ZTxjbGFzcyBDb250aWd1b3VzQ29udGFpbmVyLCB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjwKKyAgICAgICAgICAgICAgICAgbm90IHN0ZDo6aXNfcG9pbnRlcjxDb250aWd1b3VzQ29u
dGFpbmVyPjo6dmFsdWUgYW5kCisgICAgICAgICAgICAgICAgIHN0ZDo6aXNfYmFzZV9vZjwKKyAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsCisgICAg
ICAgICAgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxkZWNsdHlwZShz
dGQ6OmJlZ2luKHN0ZDo6ZGVjbHZhbDxDb250aWd1b3VzQ29udGFpbmVyIGNvbnN0PigpKSk+Ojpp
dGVyYXRvcl9jYXRlZ29yeT46OnZhbHVlCisgICAgICAgICAgICAgICAgICwgaW50Pjo6dHlwZSA9
IDA+CisgICAgc3RhdGljIGJhc2ljX2pzb24gcGFyc2UoY29uc3QgQ29udGlndW91c0NvbnRhaW5l
ciYgYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZXJfY2FsbGJhY2tf
dCBjYiA9IG51bGxwdHIpCisgICAgeworICAgICAgICAvLyBkZWxlZ2F0ZSB0aGUgY2FsbCB0byB0
aGUgaXRlcmF0b3ItcmFuZ2UgcGFyc2Ugb3ZlcmxvYWQKKyAgICAgICAgcmV0dXJuIHBhcnNlKHN0
ZDo6YmVnaW4oYyksIHN0ZDo6ZW5kKGMpLCBjYik7CisgICAgfQorCisgICAgLyohCisgICAgQGJy
aWVmIGRlc2VyaWFsaXplIGZyb20gc3RyZWFtCisKKyAgICBEZXNlcmlhbGl6ZXMgYW4gaW5wdXQg
c3RyZWFtIHRvIGEgSlNPTiB2YWx1ZS4KKworICAgIEBwYXJhbVtpbixvdXRdIGkgIGlucHV0IHN0
cmVhbSB0byByZWFkIGEgc2VyaWFsaXplZCBKU09OIHZhbHVlIGZyb20KKyAgICBAcGFyYW1baW4s
b3V0XSBqICBKU09OIHZhbHVlIHRvIHdyaXRlIHRoZSBkZXNlcmlhbGl6ZWQgaW5wdXQgdG8KKwor
ICAgIEB0aHJvdyBzdGQ6OmludmFsaWRfYXJndW1lbnQgaW4gY2FzZSBvZiBwYXJzZSBlcnJvcnMK
KworICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dC4gVGhl
IHBhcnNlciBpcyBhIHByZWRpY3RpdmUKKyAgICBMTCgxKSBwYXJzZXIuCisKKyAgICBAbm90ZSBB
IFVURi04IGJ5dGUgb3JkZXIgbWFyayBpcyBzaWxlbnRseSBpZ25vcmVkLgorCisgICAgQGxpdmVl
eGFtcGxle1RoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyBhIEpTT04gdmFsdWUgaXMgY29uc3Ry
dWN0ZWQgYnkKKyAgICByZWFkaW5nIGEgc2VyaWFsaXphdGlvbiBmcm9tIGEgc3RyZWFtLixvcGVy
YXRvcl9kZXNlcmlhbGl6ZX0KKworICAgIEBzYSBwYXJzZShzdGQ6OmlzdHJlYW0mLCBjb25zdCBw
YXJzZXJfY2FsbGJhY2tfdCkgZm9yIGEgdmFyaWFudCB3aXRoIGEKKyAgICBwYXJzZXIgY2FsbGJh
Y2sgZnVuY3Rpb24gdG8gZmlsdGVyIHZhbHVlcyB3aGlsZSBwYXJzaW5nCisKKyAgICBAc2luY2Ug
dmVyc2lvbiAxLjAuMAorICAgICovCisgICAgZnJpZW5kIHN0ZDo6aXN0cmVhbSYgb3BlcmF0b3I8
PChiYXNpY19qc29uJiBqLCBzdGQ6OmlzdHJlYW0mIGkpCisgICAgeworICAgICAgICBqID0gcGFy
c2VyKGkpLnBhcnNlKCk7CisgICAgICAgIHJldHVybiBpOworICAgIH0KKworICAgIC8qIQorICAg
IEBicmllZiBkZXNlcmlhbGl6ZSBmcm9tIHN0cmVhbQorICAgIEBjb3B5ZG9jIG9wZXJhdG9yPDwo
YmFzaWNfanNvbiYsIHN0ZDo6aXN0cmVhbSYpCisgICAgKi8KKyAgICBmcmllbmQgc3RkOjppc3Ry
ZWFtJiBvcGVyYXRvcj4+KHN0ZDo6aXN0cmVhbSYgaSwgYmFzaWNfanNvbiYgaikKKyAgICB7Cisg
ICAgICAgIGogPSBwYXJzZXIoaSkucGFyc2UoKTsKKyAgICAgICAgcmV0dXJuIGk7CisgICAgfQor
CisgICAgLy8vIEB9CisKKworICBwcml2YXRlOgorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLworICAgIC8vIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyAvLworICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworCisgICAgLyohCisgICAgQGJyaWVmIHJldHVybiB0aGUgdHlwZSBhcyBz
dHJpbmcKKworICAgIFJldHVybnMgdGhlIHR5cGUgbmFtZSBhcyBzdHJpbmcgdG8gYmUgdXNlZCBp
biBlcnJvciBtZXNzYWdlcyAtIHVzdWFsbHkgdG8KKyAgICBpbmRpY2F0ZSB0aGF0IGEgZnVuY3Rp
b24gd2FzIGNhbGxlZCBvbiBhIHdyb25nIEpTT04gdHlwZS4KKworICAgIEByZXR1cm4gYmFzaWNh
bGx5IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgdGhlIEBhIG1fdHlwZSBtZW1iZXIKKwor
ICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAg
ICAqLworICAgIHN0ZDo6c3RyaW5nIHR5cGVfbmFtZSgpIGNvbnN0CisgICAgeworICAgICAgICBz
d2l0Y2ggKG1fdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudWxs
OgorICAgICAgICAgICAgICAgIHJldHVybiAibnVsbCI7CisgICAgICAgICAgICBjYXNlIHZhbHVl
X3Q6Om9iamVjdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIm9iamVjdCI7CisgICAgICAgICAg
ICBjYXNlIHZhbHVlX3Q6OmFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiAiYXJyYXkiOwor
ICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpzdHJpbmc6CisgICAgICAgICAgICAgICAgcmV0dXJu
ICJzdHJpbmciOworICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgorICAgICAgICAg
ICAgICAgIHJldHVybiAiYm9vbGVhbiI7CisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmRpc2Nh
cmRlZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gImRpc2NhcmRlZCI7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAibnVtYmVyIjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8qIQorICAgIEBicmllZiBjYWxjdWxhdGVzIHRoZSBleHRyYSBzcGFjZSB0byBl
c2NhcGUgYSBKU09OIHN0cmluZworCisgICAgQHBhcmFtW2luXSBzICB0aGUgc3RyaW5nIHRvIGVz
Y2FwZQorICAgIEByZXR1cm4gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlcXVpcmVkIHRvIGVz
Y2FwZSBzdHJpbmcgQGEgcworCisgICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIHRoZSBsZW5ndGgg
b2Ygc3RyaW5nIEBhIHMuCisgICAgKi8KKyAgICBzdGF0aWMgc3RkOjpzaXplX3QgZXh0cmFfc3Bh
Y2UoY29uc3Qgc3RyaW5nX3QmIHMpIG5vZXhjZXB0CisgICAgeworICAgICAgICByZXR1cm4gc3Rk
OjphY2N1bXVsYXRlKHMuYmVnaW4oKSwgcy5lbmQoKSwgc2l6ZV90e30sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgW10oc2l6ZV90IHJlcywgdHlwZW5hbWUgc3RyaW5nX3Q6OnZhbHVl
X3R5cGUgYykKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChjKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGNhc2UgJyInOgorICAgICAgICAgICAgICAgIGNhc2UgJ1xcJzoK
KyAgICAgICAgICAgICAgICBjYXNlICdcYic6CisgICAgICAgICAgICAgICAgY2FzZSAnXGYnOgor
ICAgICAgICAgICAgICAgIGNhc2UgJ1xuJzoKKyAgICAgICAgICAgICAgICBjYXNlICdccic6Cisg
ICAgICAgICAgICAgICAgY2FzZSAnXHQnOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gZnJvbSBjICgxIGJ5dGUpIHRvIFx4ICgyIGJ5dGVzKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzICsgMTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGMgPj0gMHgwMCBhbmQgYyA8PSAweDFmKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBmcm9tIGMgKDEgYnl0ZSkgdG8gXHV4eHh4ICg2IGJ5dGVzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcyArIDU7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisK
KyAgICAvKiEKKyAgICBAYnJpZWYgZXNjYXBlIGEgc3RyaW5nCisKKyAgICBFc2NhcGUgYSBzdHJp
bmcgYnkgcmVwbGFjaW5nIGNlcnRhaW4gc3BlY2lhbCBjaGFyYWN0ZXJzIGJ5IGEgc2VxdWVuY2Ug
b2YKKyAgICBhbiBlc2NhcGUgY2hhcmFjdGVyIChiYWNrc2xhc2gpIGFuZCBhbm90aGVyIGNoYXJh
Y3RlciBhbmQgb3RoZXIgY29udHJvbAorICAgIGNoYXJhY3RlcnMgYnkgYSBzZXF1ZW5jZSBvZiAi
XHUiIGZvbGxvd2VkIGJ5IGEgZm91ci1kaWdpdCBoZXgKKyAgICByZXByZXNlbnRhdGlvbi4KKwor
ICAgIEBwYXJhbVtpbl0gcyAgdGhlIHN0cmluZyB0byBlc2NhcGUKKyAgICBAcmV0dXJuICB0aGUg
ZXNjYXBlZCBzdHJpbmcKKworICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgbGVuZ3RoIG9m
IHN0cmluZyBAYSBzLgorICAgICovCisgICAgc3RhdGljIHN0cmluZ190IGVzY2FwZV9zdHJpbmco
Y29uc3Qgc3RyaW5nX3QmIHMpCisgICAgeworICAgICAgICBjb25zdCBhdXRvIHNwYWNlID0gZXh0
cmFfc3BhY2Uocyk7CisgICAgICAgIGlmIChzcGFjZSA9PSAwKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gczsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGNyZWF0ZSBhIHJlc3VsdCBz
dHJpbmcgb2YgbmVjZXNzYXJ5IHNpemUKKyAgICAgICAgc3RyaW5nX3QgcmVzdWx0KHMuc2l6ZSgp
ICsgc3BhY2UsICdcXCcpOworICAgICAgICBzdGQ6OnNpemVfdCBwb3MgPSAwOworCisgICAgICAg
IGZvciAoY29uc3QgYXV0byYgYyA6IHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
YykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBxdW90YXRpb24gbWFyayAoMHgy
MikKKyAgICAgICAgICAgICAgICBjYXNlICciJzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdFtwb3MgKyAxXSA9ICciJzsKKyAgICAgICAgICAgICAgICAgICAg
cG9zICs9IDI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIHJldmVyc2Ugc29saWR1cyAoMHg1YykKKyAgICAgICAgICAg
ICAgICBjYXNlICdcXCc6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAv
LyBub3RoaW5nIHRvIGNoYW5nZQorICAgICAgICAgICAgICAgICAgICBwb3MgKz0gMjsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgLy8gYmFja3NwYWNlICgweDA4KQorICAgICAgICAgICAgICAgIGNhc2UgJ1xiJzoKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtwb3MgKyAxXSA9ICdiJzsK
KyAgICAgICAgICAgICAgICAgICAgcG9zICs9IDI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGZvcm1mZWVkICgweDBj
KQorICAgICAgICAgICAgICAgIGNhc2UgJ1xmJzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdFtwb3MgKyAxXSA9ICdmJzsKKyAgICAgICAgICAgICAgICAgICAg
cG9zICs9IDI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIG5ld2xpbmUgKDB4MGEpCisgICAgICAgICAgICAgICAgY2Fz
ZSAnXG4nOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0W3Bv
cyArIDFdID0gJ24nOworICAgICAgICAgICAgICAgICAgICBwb3MgKz0gMjsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8g
Y2FycmlhZ2UgcmV0dXJuICgweDBkKQorICAgICAgICAgICAgICAgIGNhc2UgJ1xyJzoKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtwb3MgKyAxXSA9ICdyJzsK
KyAgICAgICAgICAgICAgICAgICAgcG9zICs9IDI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGhvcml6b250YWwgdGFi
ICgweDA5KQorICAgICAgICAgICAgICAgIGNhc2UgJ1x0JzoKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdFtwb3MgKyAxXSA9ICd0JzsKKyAgICAgICAgICAgICAg
ICAgICAgcG9zICs9IDI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoYyA+PSAweDAwIGFuZCBjIDw9IDB4MWYpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgYSBudW1iZXIg
MC4uMTUgdG8gaXRzIGhleCByZXByZXNlbnRhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gKDAuLmYpCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBoZXhp
ZnlbMTZdID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnOCcsICc5JywgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdm
JworICAgICAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gcHJpbnQgY2hhcmFjdGVyIGMgYXMgXHV4eHh4CisgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKGNvbnN0IGNoYXIgbSA6CisgICAgICAgICAgICAgICAgICAgIHsgJ3UnLCAnMCcsICcwJywg
aGV4aWZ5W2MgPj4gNF0sIGhleGlmeVtjICYgMHgwZl0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0pCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0WysrcG9zXSA9IG07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICsrcG9zOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gYWxsIG90aGVyIGNoYXJhY3RlcnMgYXJlIGFkZGVkIGFzLWlzCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHRbcG9zKytdID0gYzsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IC8qIQorICAgIEBicmllZiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2VyaWFsaXph
dGlvbiBmdW5jdGlvbgorCisgICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHB1Ymxp
YyBtZW1iZXIgZnVuY3Rpb24gZHVtcCBhbmQgb3JnYW5pemVzCisgICAgdGhlIHNlcmlhbGl6YXRp
b24gaW50ZXJuYWxseS4gVGhlIGluZGVudGF0aW9uIGxldmVsIGlzIHByb3BhZ2F0ZWQgYXMKKyAg
ICBhZGRpdGlvbmFsIHBhcmFtZXRlci4gSW4gY2FzZSBvZiBhcnJheXMgYW5kIG9iamVjdHMsIHRo
ZSBmdW5jdGlvbiBpcworICAgIGNhbGxlZCByZWN1cnNpdmVseS4gTm90ZSB0aGF0CisKKyAgICAt
IHN0cmluZ3MgYW5kIG9iamVjdCBrZXlzIGFyZSBlc2NhcGVkIHVzaW5nIGBlc2NhcGVfc3RyaW5n
KClgCisgICAgLSBpbnRlZ2VyIG51bWJlcnMgYXJlIGNvbnZlcnRlZCBpbXBsaWNpdGx5IHZpYSBg
b3BlcmF0b3I8PGAKKyAgICAtIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgYXJlIGNvbnZlcnRlZCB0
byBhIHN0cmluZyB1c2luZyBgIiVnImAgZm9ybWF0CisKKyAgICBAcGFyYW1bb3V0XSBvICAgICAg
ICAgICAgICBzdHJlYW0gdG8gd3JpdGUgdG8KKyAgICBAcGFyYW1baW5dIHByZXR0eV9wcmludCAg
ICB3aGV0aGVyIHRoZSBvdXRwdXQgc2hhbGwgYmUgcHJldHR5LXByaW50ZWQKKyAgICBAcGFyYW1b
aW5dIGluZGVudF9zdGVwICAgICB0aGUgaW5kZW50IGxldmVsCisgICAgQHBhcmFtW2luXSBjdXJy
ZW50X2luZGVudCAgdGhlIGN1cnJlbnQgaW5kZW50IGxldmVsIChvbmx5IHVzZWQgaW50ZXJuYWxs
eSkKKyAgICAqLworICAgIHZvaWQgZHVtcChzdGQ6Om9zdHJlYW0mIG8sCisgICAgICAgICAgICAg
IGNvbnN0IGJvb2wgcHJldHR5X3ByaW50LAorICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgaW5kZW50X3N0ZXAsCisgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBjdXJyZW50
X2luZGVudCA9IDApIGNvbnN0CisgICAgeworICAgICAgICAvLyB2YXJpYWJsZSB0byBob2xkIGlu
ZGVudGF0aW9uIGZvciByZWN1cnNpdmUgY2FsbHMKKyAgICAgICAgdW5zaWduZWQgaW50IG5ld19p
bmRlbnQgPSBjdXJyZW50X2luZGVudDsKKworICAgICAgICBzd2l0Y2ggKG1fdHlwZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUub2JqZWN0LT5lbXB0eSgpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbyA8PCAie30iOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbyA8PCAieyI7
CisKKyAgICAgICAgICAgICAgICAvLyBpbmNyZWFzZSBpbmRlbnRhdGlvbgorICAgICAgICAgICAg
ICAgIGlmIChwcmV0dHlfcHJpbnQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBuZXdfaW5kZW50ICs9IGluZGVudF9zdGVwOworICAgICAgICAgICAgICAgICAgICBvIDw8
ICJcbiI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZm9yIChhdXRvIGkg
PSBtX3ZhbHVlLm9iamVjdC0+Y2JlZ2luKCk7IGkgIT0gbV92YWx1ZS5vYmplY3QtPmNlbmQoKTsg
KytpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gbV92
YWx1ZS5vYmplY3QtPmNiZWdpbigpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBvIDw8IChwcmV0dHlfcHJpbnQgPyAiLFxuIiA6ICIsIik7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbyA8PCBzdHJpbmdfdChuZXdfaW5k
ZW50LCAnICcpIDw8ICJcIiIKKyAgICAgICAgICAgICAgICAgICAgICA8PCBlc2NhcGVfc3RyaW5n
KGktPmZpcnN0KSA8PCAiXCI6IgorICAgICAgICAgICAgICAgICAgICAgIDw8IChwcmV0dHlfcHJp
bnQgPyAiICIgOiAiIik7CisgICAgICAgICAgICAgICAgICAgIGktPnNlY29uZC5kdW1wKG8sIHBy
ZXR0eV9wcmludCwgaW5kZW50X3N0ZXAsIG5ld19pbmRlbnQpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIC8vIGRlY3JlYXNlIGluZGVudGF0aW9uCisgICAgICAgICAgICAg
ICAgaWYgKHByZXR0eV9wcmludCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIG5ld19pbmRlbnQgLT0gaW5kZW50X3N0ZXA7CisgICAgICAgICAgICAgICAgICAgIG8gPDwg
IlxuIjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvIDw8IHN0cmluZ190
KG5ld19pbmRlbnQsICcgJykgKyAifSI7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5OgorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLmFycmF5LT5lbXB0eSgpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbyA8PCAiW10iOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbyA8PCAi
WyI7CisKKyAgICAgICAgICAgICAgICAvLyBpbmNyZWFzZSBpbmRlbnRhdGlvbgorICAgICAgICAg
ICAgICAgIGlmIChwcmV0dHlfcHJpbnQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBuZXdfaW5kZW50ICs9IGluZGVudF9zdGVwOworICAgICAgICAgICAgICAgICAgICBv
IDw8ICJcbiI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZm9yIChhdXRv
IGkgPSBtX3ZhbHVlLmFycmF5LT5jYmVnaW4oKTsgaSAhPSBtX3ZhbHVlLmFycmF5LT5jZW5kKCk7
ICsraSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpICE9IG1f
dmFsdWUuYXJyYXktPmNiZWdpbigpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBvIDw8IChwcmV0dHlfcHJpbnQgPyAiLFxuIiA6ICIsIik7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbyA8PCBzdHJpbmdfdChuZXdfaW5k
ZW50LCAnICcpOworICAgICAgICAgICAgICAgICAgICBpLT5kdW1wKG8sIHByZXR0eV9wcmludCwg
aW5kZW50X3N0ZXAsIG5ld19pbmRlbnQpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIC8vIGRlY3JlYXNlIGluZGVudGF0aW9uCisgICAgICAgICAgICAgICAgaWYgKHByZXR0
eV9wcmludCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG5ld19pbmRl
bnQgLT0gaW5kZW50X3N0ZXA7CisgICAgICAgICAgICAgICAgICAgIG8gPDwgIlxuIjsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvIDw8IHN0cmluZ190KG5ld19pbmRlbnQs
ICcgJykgPDwgIl0iOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpzdHJpbmc6CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbyA8PCBzdHJpbmdfdCgiXCIiKSA8PCBlc2NhcGVfc3RyaW5nKCptX3ZhbHVlLnN0
cmluZykgPDwgIlwiIjsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6Ym9vbGVhbjoKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBvIDw8IChtX3ZhbHVlLmJvb2xlYW4gPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2Ug
dmFsdWVfdDo6bnVtYmVyX2ludGVnZXI6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
byA8PCBtX3ZhbHVlLm51bWJlcl9pbnRlZ2VyOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQ6
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbyA8PCBtX3ZhbHVlLm51bWJlcl91bnNp
Z25lZDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2Zsb2F0OgorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmIChtX3ZhbHVlLm51bWJlcl9mbG9hdCA9PSAwKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlIGZvciB6ZXJvIHRvIGdldCAiMC4w
Ii8iLTAuMCIKKyAgICAgICAgICAgICAgICAgICAgbyA8PCAoc3RkOjpzaWduYml0KG1fdmFsdWUu
bnVtYmVyX2Zsb2F0KSA/ICItMC4wIiA6ICIwLjAiKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
byA8PCBtX3ZhbHVlLm51bWJlcl9mbG9hdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6
OmRpc2NhcmRlZDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvIDw8ICI8ZGlzY2Fy
ZGVkPiI7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBjYXNlIHZhbHVlX3Q6Om51bGw6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
byA8PCAibnVsbCI7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgIHByaXZhdGU6CisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
ICAgIC8vIG1lbWJlciB2YXJpYWJsZXMgLy8KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisK
KyAgICAvLy8gdGhlIHR5cGUgb2YgdGhlIGN1cnJlbnQgZWxlbWVudAorICAgIHZhbHVlX3QgbV90
eXBlID0gdmFsdWVfdDo6bnVsbDsKKworICAgIC8vLyB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQg
ZWxlbWVudAorICAgIGpzb25fdmFsdWUgbV92YWx1ZSA9IHt9OworCisKKyAgcHJpdmF0ZToKKyAg
ICAvLy8vLy8vLy8vLy8vLy8KKyAgICAvLyBpdGVyYXRvcnMgLy8KKyAgICAvLy8vLy8vLy8vLy8v
Ly8KKworICAgIC8qIQorICAgIEBicmllZiBhbiBpdGVyYXRvciBmb3IgcHJpbWl0aXZlIEpTT04g
dHlwZXMKKworICAgIFRoaXMgY2xhc3MgbW9kZWxzIGFuIGl0ZXJhdG9yIGZvciBwcmltaXRpdmUg
SlNPTiB0eXBlcyAoYm9vbGVhbiwgbnVtYmVyLAorICAgIHN0cmluZykuIEl0J3Mgb25seSBwdXJw
b3NlIGlzIHRvIGFsbG93IHRoZSBpdGVyYXRvci9jb25zdF9pdGVyYXRvciBjbGFzc2VzCisgICAg
dG8gIml0ZXJhdGUiIG92ZXIgcHJpbWl0aXZlIHZhbHVlcy4gSW50ZXJuYWxseSwgdGhlIGl0ZXJh
dG9yIGlzIG1vZGVsZWQgYnkKKyAgICBhIGBkaWZmZXJlbmNlX3R5cGVgIHZhcmlhYmxlLiBWYWx1
ZSBiZWdpbl92YWx1ZSAoYDBgKSBtb2RlbHMgdGhlIGJlZ2luLAorICAgIGVuZF92YWx1ZSAoYDFg
KSBtb2RlbHMgcGFzdCB0aGUgZW5kLgorICAgICovCisgICAgY2xhc3MgcHJpbWl0aXZlX2l0ZXJh
dG9yX3QKKyAgICB7CisgICAgICBwdWJsaWM6CisgICAgICAgIC8vLyBzZXQgaXRlcmF0b3IgdG8g
YSBkZWZpbmVkIGJlZ2lubmluZworICAgICAgICB2b2lkIHNldF9iZWdpbigpIG5vZXhjZXB0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1faXQgPSBiZWdpbl92YWx1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vLyBzZXQgaXRlcmF0b3IgdG8gYSBkZWZpbmVkIHBhc3QgdGhlIGVuZAorICAgICAg
ICB2b2lkIHNldF9lbmQoKSBub2V4Y2VwdAorICAgICAgICB7CisgICAgICAgICAgICBtX2l0ID0g
ZW5kX3ZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgLy8vIHJldHVybiB3aGV0aGVyIHRoZSBp
dGVyYXRvciBjYW4gYmUgZGVyZWZlcmVuY2VkCisgICAgICAgIGNvbnN0ZXhwciBib29sIGlzX2Jl
Z2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChtX2l0
ID09IGJlZ2luX3ZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyByZXR1cm4gd2hldGhl
ciB0aGUgaXRlcmF0b3IgaXMgYXQgZW5kCisgICAgICAgIGNvbnN0ZXhwciBib29sIGlzX2VuZCgp
IGNvbnN0IG5vZXhjZXB0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAobV9pdCA9PSBl
bmRfdmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIHJldHVybiByZWZlcmVuY2UgdG8g
dGhlIHZhbHVlIHRvIGNoYW5nZSBhbmQgY29tcGFyZQorICAgICAgICBvcGVyYXRvciBkaWZmZXJl
bmNlX3R5cGUmICgpIG5vZXhjZXB0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2l0
OworICAgICAgICB9CisKKyAgICAgICAgLy8vIHJldHVybiB2YWx1ZSB0byBjb21wYXJlCisgICAg
ICAgIGNvbnN0ZXhwciBvcGVyYXRvciBkaWZmZXJlbmNlX3R5cGUgKCkgY29uc3Qgbm9leGNlcHQK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faXQ7CisgICAgICAgIH0KKworICAgICAg
cHJpdmF0ZToKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBkaWZmZXJlbmNlX3R5cGUgYmVnaW5f
dmFsdWUgPSAwOworICAgICAgICBzdGF0aWMgY29uc3RleHByIGRpZmZlcmVuY2VfdHlwZSBlbmRf
dmFsdWUgPSBiZWdpbl92YWx1ZSArIDE7CisKKyAgICAgICAgLy8vIGl0ZXJhdG9yIGFzIHNpZ25l
ZCBpbnRlZ2VyIHR5cGUKKyAgICAgICAgZGlmZmVyZW5jZV90eXBlIG1faXQgPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHN0ZDo6cHRyZGlmZl90Pjo6ZGVub3JtX21pbigpOworICAgIH07CisKKyAgICAv
KiEKKyAgICBAYnJpZWYgYW4gaXRlcmF0b3IgdmFsdWUKKworICAgIEBub3RlIFRoaXMgc3RydWN0
dXJlIGNvdWxkIGVhc2lseSBiZSBhIHVuaW9uLCBidXQgTVNWQyBjdXJyZW50bHkgZG9lcyBub3QK
KyAgICBhbGxvdyB1bmlvbnMgbWVtYmVycyB3aXRoIGNvbXBsZXggY29uc3RydWN0b3JzLCBzZWUK
KyAgICBodHRwczovL2dpdGh1Yi5jb20vbmxvaG1hbm4vanNvbi9wdWxsLzEwNS4KKyAgICAqLwor
ICAgIHN0cnVjdCBpbnRlcm5hbF9pdGVyYXRvcgorICAgIHsKKyAgICAgICAgLy8vIGl0ZXJhdG9y
IGZvciBKU09OIG9iamVjdHMKKyAgICAgICAgdHlwZW5hbWUgb2JqZWN0X3Q6Oml0ZXJhdG9yIG9i
amVjdF9pdGVyYXRvcjsKKyAgICAgICAgLy8vIGl0ZXJhdG9yIGZvciBKU09OIGFycmF5cworICAg
ICAgICB0eXBlbmFtZSBhcnJheV90OjppdGVyYXRvciBhcnJheV9pdGVyYXRvcjsKKyAgICAgICAg
Ly8vIGdlbmVyaWMgaXRlcmF0b3IgZm9yIGFsbCBvdGhlciB0eXBlcworICAgICAgICBwcmltaXRp
dmVfaXRlcmF0b3JfdCBwcmltaXRpdmVfaXRlcmF0b3I7CisKKyAgICAgICAgLy8vIGNyZWF0ZSBh
biB1bmluaXRpYWxpemVkIGludGVybmFsX2l0ZXJhdG9yCisgICAgICAgIGludGVybmFsX2l0ZXJh
dG9yKCkgbm9leGNlcHQKKyAgICAgICAgICAgIDogb2JqZWN0X2l0ZXJhdG9yKCksIGFycmF5X2l0
ZXJhdG9yKCksIHByaW1pdGl2ZV9pdGVyYXRvcigpCisgICAgICAgIHt9CisgICAgfTsKKworICAg
IC8vLyBwcm94eSBjbGFzcyBmb3IgdGhlIGl0ZXJhdG9yX3dyYXBwZXIgZnVuY3Rpb25zCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPgorICAgIGNsYXNzIGl0ZXJhdGlvbl9wcm94
eQorICAgIHsKKyAgICAgIHByaXZhdGU6CisgICAgICAgIC8vLyBoZWxwZXIgY2xhc3MgZm9yIGl0
ZXJhdGlvbgorICAgICAgICBjbGFzcyBpdGVyYXRpb25fcHJveHlfaW50ZXJuYWwKKyAgICAgICAg
eworICAgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICAvLy8gdGhlIGl0ZXJhdG9yCisgICAg
ICAgICAgICBJdGVyYXRvclR5cGUgYW5jaG9yOworICAgICAgICAgICAgLy8vIGFuIGluZGV4IGZv
ciBhcnJheXMgKHVzZWQgdG8gY3JlYXRlIGtleSBuYW1lcykKKyAgICAgICAgICAgIHNpemVfdCBh
cnJheV9pbmRleCA9IDA7CisKKyAgICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBleHBsaWNp
dCBpdGVyYXRpb25fcHJveHlfaW50ZXJuYWwoSXRlcmF0b3JUeXBlIGl0KSBub2V4Y2VwdAorICAg
ICAgICAgICAgICAgIDogYW5jaG9yKGl0KQorICAgICAgICAgICAge30KKworICAgICAgICAgICAg
Ly8vIGRlcmVmZXJlbmNlIG9wZXJhdG9yIChuZWVkZWQgZm9yIHJhbmdlLWJhc2VkIGZvcikKKyAg
ICAgICAgICAgIGl0ZXJhdGlvbl9wcm94eV9pbnRlcm5hbCYgb3BlcmF0b3IqKCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vLyBpbmNyZW1lbnQgb3BlcmF0b3IgKG5lZWRlZCBmb3IgcmFuZ2UtYmFzZWQg
Zm9yKQorICAgICAgICAgICAgaXRlcmF0aW9uX3Byb3h5X2ludGVybmFsJiBvcGVyYXRvcisrKCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICArK2FuY2hvcjsKKyAgICAgICAgICAgICAg
ICArK2FycmF5X2luZGV4OworCisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAvLy8gaW5lcXVhbGl0eSBvcGVyYXRvciAobmVlZGVkIGZv
ciByYW5nZS1iYXNlZCBmb3IpCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0gKGNvbnN0IGl0
ZXJhdGlvbl9wcm94eV9pbnRlcm5hbCYgbykgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gYW5jaG9yICE9IG8uYW5jaG9yOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLy8gcmV0dXJuIGtleSBvZiB0aGUgaXRlcmF0b3IKKyAgICAgICAgICAgIHR5cGVu
YW1lIGJhc2ljX2pzb246OnN0cmluZ190IGtleSgpIGNvbnN0CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgYXNzZXJ0KGFuY2hvci5tX29iamVjdCAhPSBudWxscHRyKTsKKworICAgICAg
ICAgICAgICAgIHN3aXRjaCAoYW5jaG9yLm1fb2JqZWN0LT50eXBlKCkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAvLyB1c2UgaW50ZWdlciBhcnJheSBpbmRleCBhcyBr
ZXkKKyAgICAgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6dG9fc3RyaW5n
KGFycmF5X2luZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIC8vIHVzZSBrZXkgZnJvbSB0aGUgb2JqZWN0CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
dmFsdWVfdDo6b2JqZWN0OgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gYW5jaG9yLmtleSgpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgLy8gdXNlIGFuIGVtcHR5IGtleSBmb3IgYWxsIHByaW1pdGl2ZSB0
eXBlcworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vLyBy
ZXR1cm4gdmFsdWUgb2YgdGhlIGl0ZXJhdG9yCisgICAgICAgICAgICB0eXBlbmFtZSBJdGVyYXRv
clR5cGU6OnJlZmVyZW5jZSB2YWx1ZSgpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGFuY2hvci52YWx1ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9Owor
CisgICAgICAgIC8vLyB0aGUgY29udGFpbmVyIHRvIGl0ZXJhdGUKKyAgICAgICAgdHlwZW5hbWUg
SXRlcmF0b3JUeXBlOjpyZWZlcmVuY2UgY29udGFpbmVyOworCisgICAgICBwdWJsaWM6CisgICAg
ICAgIC8vLyBjb25zdHJ1Y3QgaXRlcmF0aW9uIHByb3h5IGZyb20gYSBjb250YWluZXIKKyAgICAg
ICAgZXhwbGljaXQgaXRlcmF0aW9uX3Byb3h5KHR5cGVuYW1lIEl0ZXJhdG9yVHlwZTo6cmVmZXJl
bmNlIGNvbnQpCisgICAgICAgICAgICA6IGNvbnRhaW5lcihjb250KQorICAgICAgICB7fQorCisg
ICAgICAgIC8vLyByZXR1cm4gaXRlcmF0b3IgYmVnaW4gKG5lZWRlZCBmb3IgcmFuZ2UtYmFzZWQg
Zm9yKQorICAgICAgICBpdGVyYXRpb25fcHJveHlfaW50ZXJuYWwgYmVnaW4oKSBub2V4Y2VwdAor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXRlcmF0aW9uX3Byb3h5X2ludGVybmFsKGNv
bnRhaW5lci5iZWdpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyByZXR1cm4gaXRlcmF0
b3IgZW5kIChuZWVkZWQgZm9yIHJhbmdlLWJhc2VkIGZvcikKKyAgICAgICAgaXRlcmF0aW9uX3By
b3h5X2ludGVybmFsIGVuZCgpIG5vZXhjZXB0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBpdGVyYXRpb25fcHJveHlfaW50ZXJuYWwoY29udGFpbmVyLmVuZCgpKTsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgcHVibGljOgorICAgIC8qIQorICAgIEBicmllZiBhIGNvbnN0IHJhbmRvbSBh
Y2Nlc3MgaXRlcmF0b3IgZm9yIHRoZSBAcmVmIGJhc2ljX2pzb24gY2xhc3MKKworICAgIFRoaXMg
Y2xhc3MgaW1wbGVtZW50cyBhIGNvbnN0IGl0ZXJhdG9yIGZvciB0aGUgQHJlZiBiYXNpY19qc29u
IGNsYXNzLiBGcm9tCisgICAgdGhpcyBjbGFzcywgdGhlIEByZWYgaXRlcmF0b3IgY2xhc3MgaXMg
ZGVyaXZlZC4KKworICAgIEBub3RlIEFuIGl0ZXJhdG9yIGlzIGNhbGxlZCAqaW5pdGlhbGl6ZWQq
IHdoZW4gYSBwb2ludGVyIHRvIGEgSlNPTiB2YWx1ZQorICAgICAgICAgIGhhcyBiZWVuIHNldCAo
ZS5nLiwgYnkgYSBjb25zdHJ1Y3RvciBvciBhIGNvcHkgYXNzaWdubWVudCkuIElmIHRoZQorICAg
ICAgICAgIGl0ZXJhdG9yIGlzIGRlZmF1bHQtY29uc3RydWN0ZWQsIGl0IGlzICp1bmluaXRpYWxp
emVkKiBhbmQgbW9zdAorICAgICAgICAgIG1ldGhvZHMgYXJlIHVuZGVmaW5lZC4gKipUaGUgbGli
cmFyeSB1c2VzIGFzc2VydGlvbnMgdG8gZGV0ZWN0IGNhbGxzCisgICAgICAgICAgb24gdW5pbml0
aWFsaXplZCBpdGVyYXRvcnMuKioKKworICAgIEByZXF1aXJlbWVudCBUaGUgY2xhc3Mgc2F0aXNm
aWVzIHRoZSBmb2xsb3dpbmcgY29uY2VwdCByZXF1aXJlbWVudHM6CisgICAgLSBbUmFuZG9tQWNj
ZXNzSXRlcmF0b3JdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNlcHQvUmFu
ZG9tQWNjZXNzSXRlcmF0b3IpOgorICAgICAgVGhlIGl0ZXJhdG9yIHRoYXQgY2FuIGJlIG1vdmVk
IHRvIHBvaW50IChmb3J3YXJkIGFuZCBiYWNrd2FyZCkgdG8gYW55CisgICAgICBlbGVtZW50IGlu
IGNvbnN0YW50IHRpbWUuCisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAg
Y2xhc3MgY29uc3RfaXRlcmF0b3IgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6OnJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnLCBjb25zdCBiYXNpY19qc29uPgorICAgIHsKKyAgICAgICAgLy8v
IGFsbG93IGJhc2ljX2pzb24gdG8gYWNjZXNzIHByaXZhdGUgbWVtYmVycworICAgICAgICBmcmll
bmQgY2xhc3MgYmFzaWNfanNvbjsKKworICAgICAgcHVibGljOgorICAgICAgICAvLy8gdGhlIHR5
cGUgb2YgdGhlIHZhbHVlcyB3aGVuIHRoZSBpdGVyYXRvciBpcyBkZXJlZmVyZW5jZWQKKyAgICAg
ICAgdXNpbmcgdmFsdWVfdHlwZSA9IHR5cGVuYW1lIGJhc2ljX2pzb246OnZhbHVlX3R5cGU7Cisg
ICAgICAgIC8vLyBhIHR5cGUgdG8gcmVwcmVzZW50IGRpZmZlcmVuY2VzIGJldHdlZW4gaXRlcmF0
b3JzCisgICAgICAgIHVzaW5nIGRpZmZlcmVuY2VfdHlwZSA9IHR5cGVuYW1lIGJhc2ljX2pzb246
OmRpZmZlcmVuY2VfdHlwZTsKKyAgICAgICAgLy8vIGRlZmluZXMgYSBwb2ludGVyIHRvIHRoZSB0
eXBlIGl0ZXJhdGVkIG92ZXIgKHZhbHVlX3R5cGUpCisgICAgICAgIHVzaW5nIHBvaW50ZXIgPSB0
eXBlbmFtZSBiYXNpY19qc29uOjpjb25zdF9wb2ludGVyOworICAgICAgICAvLy8gZGVmaW5lcyBh
IHJlZmVyZW5jZSB0byB0aGUgdHlwZSBpdGVyYXRlZCBvdmVyICh2YWx1ZV90eXBlKQorICAgICAg
ICB1c2luZyByZWZlcmVuY2UgPSB0eXBlbmFtZSBiYXNpY19qc29uOjpjb25zdF9yZWZlcmVuY2U7
CisgICAgICAgIC8vLyB0aGUgY2F0ZWdvcnkgb2YgdGhlIGl0ZXJhdG9yCisgICAgICAgIHVzaW5n
IGl0ZXJhdG9yX2NhdGVnb3J5ID0gc3RkOjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZzsKKwor
ICAgICAgICAvLy8gZGVmYXVsdCBjb25zdHJ1Y3RvcgorICAgICAgICBjb25zdF9pdGVyYXRvcigp
ID0gZGVmYXVsdDsKKworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmIGNvbnN0cnVjdG9yIGZv
ciBhIGdpdmVuIEpTT04gaW5zdGFuY2UKKyAgICAgICAgQHBhcmFtW2luXSBvYmplY3QgIHBvaW50
ZXIgdG8gYSBKU09OIG9iamVjdCBmb3IgdGhpcyBpdGVyYXRvcgorICAgICAgICBAcHJlIG9iamVj
dCAhPSBudWxscHRyCisgICAgICAgIEBwb3N0IFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsg
aS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCisgICAgICAgICovCisgICAgICAgIGV4cGxpY2l0
IGNvbnN0X2l0ZXJhdG9yKHBvaW50ZXIgb2JqZWN0KSBub2V4Y2VwdAorICAgICAgICAgICAgOiBt
X29iamVjdChvYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydChtX29iamVjdCAh
PSBudWxscHRyKTsKKworICAgICAgICAgICAgc3dpdGNoIChtX29iamVjdC0+bV90eXBlKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFsdWVfdDo6b2Jq
ZWN0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pdC5vYmplY3Rf
aXRlcmF0b3IgPSB0eXBlbmFtZSBvYmplY3RfdDo6aXRlcmF0b3IoKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY2FzZSBi
YXNpY19qc29uOjp2YWx1ZV90OjphcnJheToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIG1faXQuYXJyYXlfaXRlcmF0b3IgPSB0eXBlbmFtZSBhcnJheV90OjppdGVyYXRv
cigpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgbV9pdC5wcmltaXRpdmVfaXRlcmF0b3IgPSBwcmltaXRpdmVfaXRlcmF0b3JfdCgpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmIGNvcHkgY29uc3Ry
dWN0b3IgZ2l2ZW4gYSBub24tY29uc3QgaXRlcmF0b3IKKyAgICAgICAgQHBhcmFtW2luXSBvdGhl
ciAgaXRlcmF0b3IgdG8gY29weSBmcm9tCisgICAgICAgIEBub3RlIEl0IGlzIG5vdCBjaGVja2Vk
IHdoZXRoZXIgQGEgb3RoZXIgaXMgaW5pdGlhbGl6ZWQuCisgICAgICAgICovCisgICAgICAgIGV4
cGxpY2l0IGNvbnN0X2l0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgbm9leGNlcHQKKyAg
ICAgICAgICAgIDogbV9vYmplY3Qob3RoZXIubV9vYmplY3QpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChtX29iamVjdCAhPSBudWxscHRyKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHN3aXRjaCAobV9vYmplY3QtPm1fdHlwZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFsdWVfdDo6b2JqZWN0OgorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2l0Lm9iamVjdF9pdGVyYXRv
ciA9IG90aGVyLm1faXQub2JqZWN0X2l0ZXJhdG9yOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjYXNl
IGJhc2ljX2pzb246OnZhbHVlX3Q6OmFycmF5OgorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2l0LmFycmF5X2l0ZXJhdG9yID0gb3RoZXIubV9pdC5hcnJh
eV9pdGVyYXRvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9pdC5wcmltaXRpdmVfaXRlcmF0b3Ig
PSBvdGhlci5tX2l0LnByaW1pdGl2ZV9pdGVyYXRvcjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyohCisgICAgICAgIEBicmllZiBjb3B5IGNv
bnN0cnVjdG9yCisgICAgICAgIEBwYXJhbVtpbl0gb3RoZXIgIGl0ZXJhdG9yIHRvIGNvcHkgZnJv
bQorICAgICAgICBAbm90ZSBJdCBpcyBub3QgY2hlY2tlZCB3aGV0aGVyIEBhIG90aGVyIGlzIGlu
aXRpYWxpemVkLgorICAgICAgICAqLworICAgICAgICBjb25zdF9pdGVyYXRvcihjb25zdCBjb25z
dF9pdGVyYXRvciYgb3RoZXIpIG5vZXhjZXB0CisgICAgICAgICAgICA6IG1fb2JqZWN0KG90aGVy
Lm1fb2JqZWN0KSwgbV9pdChvdGhlci5tX2l0KQorICAgICAgICB7fQorCisgICAgICAgIC8qIQor
ICAgICAgICBAYnJpZWYgY29weSBhc3NpZ25tZW50CisgICAgICAgIEBwYXJhbVtpbixvdXRdIG90
aGVyICBpdGVyYXRvciB0byBjb3B5IGZyb20KKyAgICAgICAgQG5vdGUgSXQgaXMgbm90IGNoZWNr
ZWQgd2hldGhlciBAYSBvdGhlciBpcyBpbml0aWFsaXplZC4KKyAgICAgICAgKi8KKyAgICAgICAg
Y29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdF9pdGVyYXRvciBvdGhlcikgbm9leGNlcHQo
CisgICAgICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPHBvaW50ZXI+
Ojp2YWx1ZSBhbmQKKyAgICAgICAgICAgIHN0ZDo6aXNfbm90aHJvd19tb3ZlX2Fzc2lnbmFibGU8
cG9pbnRlcj46OnZhbHVlIGFuZAorICAgICAgICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfY29u
c3RydWN0aWJsZTxpbnRlcm5hbF9pdGVyYXRvcj46OnZhbHVlIGFuZAorICAgICAgICAgICAgc3Rk
Ojppc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxpbnRlcm5hbF9pdGVyYXRvcj46OnZhbHVlCisg
ICAgICAgICkKKyAgICAgICAgeworICAgICAgICAgICAgc3RkOjpzd2FwKG1fb2JqZWN0LCBvdGhl
ci5tX29iamVjdCk7CisgICAgICAgICAgICBzdGQ6OnN3YXAobV9pdCwgb3RoZXIubV9pdCk7Cisg
ICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgLyohCisgICAgICAgIEBicmllZiBzZXQgdGhlIGl0ZXJhdG9yIHRvIHRoZSBmaXJzdCB2
YWx1ZQorICAgICAgICBAcHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9v
YmplY3QgIT0gbnVsbHB0cmAuCisgICAgICAgICovCisgICAgICAgIHZvaWQgc2V0X2JlZ2luKCkg
bm9leGNlcHQKKyAgICAgICAgeworICAgICAgICAgICAgYXNzZXJ0KG1fb2JqZWN0ICE9IG51bGxw
dHIpOworCisgICAgICAgICAgICBzd2l0Y2ggKG1fb2JqZWN0LT5tX3R5cGUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY2FzZSBiYXNpY19qc29uOjp2YWx1ZV90OjpvYmplY3Q6Cisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtX2l0Lm9iamVjdF9pdGVyYXRv
ciA9IG1fb2JqZWN0LT5tX3ZhbHVlLm9iamVjdC0+YmVnaW4oKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY2FzZSBiYXNp
Y19qc29uOjp2YWx1ZV90OjphcnJheToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIG1faXQuYXJyYXlfaXRlcmF0b3IgPSBtX29iamVjdC0+bV92YWx1ZS5hcnJheS0+YmVn
aW4oKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgY2FzZSBiYXNpY19qc29uOjp2YWx1ZV90OjpudWxsOgorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gc2V0IHRvIGVuZCBzbyBiZWdpbigpPT1l
bmQoKSBpcyB0cnVlOiBudWxsIGlzIGVtcHR5CisgICAgICAgICAgICAgICAgICAgIG1faXQucHJp
bWl0aXZlX2l0ZXJhdG9yLnNldF9lbmQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1faXQucHJpbWl0aXZlX2l0ZXJhdG9yLnNldF9i
ZWdpbigpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmIHNl
dCB0aGUgaXRlcmF0b3IgcGFzdCB0aGUgbGFzdCB2YWx1ZQorICAgICAgICBAcHJlIFRoZSBpdGVy
YXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCisgICAgICAg
ICovCisgICAgICAgIHZvaWQgc2V0X2VuZCgpIG5vZXhjZXB0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIGFzc2VydChtX29iamVjdCAhPSBudWxscHRyKTsKKworICAgICAgICAgICAgc3dpdGNoICht
X29iamVjdC0+bV90eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgYmFz
aWNfanNvbjo6dmFsdWVfdDo6b2JqZWN0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgbV9pdC5vYmplY3RfaXRlcmF0b3IgPSBtX29iamVjdC0+bV92YWx1ZS5vYmplY3Qt
PmVuZCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBjYXNlIGJhc2ljX2pzb246OnZhbHVlX3Q6OmFycmF5OgorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pdC5hcnJheV9pdGVyYXRvciA9IG1f
b2JqZWN0LT5tX3ZhbHVlLmFycmF5LT5lbmQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1faXQucHJpbWl0aXZlX2l0ZXJhdG9yLnNl
dF9lbmQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgLyohCisg
ICAgICAgIEBicmllZiByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIHZhbHVlIHBvaW50ZWQgdG8g
YnkgdGhlIGl0ZXJhdG9yCisgICAgICAgIEBwcmUgVGhlIGl0ZXJhdG9yIGlzIGluaXRpYWxpemVk
OyBpLmUuIGBtX29iamVjdCAhPSBudWxscHRyYC4KKyAgICAgICAgKi8KKyAgICAgICAgcmVmZXJl
bmNlIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydChtX29i
amVjdCAhPSBudWxscHRyKTsKKworICAgICAgICAgICAgc3dpdGNoIChtX29iamVjdC0+bV90eXBl
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFsdWVf
dDo6b2JqZWN0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0
KG1faXQub2JqZWN0X2l0ZXJhdG9yICE9IG1fb2JqZWN0LT5tX3ZhbHVlLm9iamVjdC0+ZW5kKCkp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9pdC5vYmplY3RfaXRlcmF0b3ItPnNlY29u
ZDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYXNlIGJhc2ljX2pzb246
OnZhbHVlX3Q6OmFycmF5OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
YXNzZXJ0KG1faXQuYXJyYXlfaXRlcmF0b3IgIT0gbV9vYmplY3QtPm1fdmFsdWUuYXJyYXktPmVu
ZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICptX2l0LmFycmF5X2l0ZXJhdG9yOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFs
dWVfdDo6bnVsbDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRocm93
PHN0ZDo6b3V0X29mX3JhbmdlPigiY2Fubm90IGdldCB2YWx1ZSIpOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpZiAobV9pdC5wcmltaXRpdmVfaXRlcmF0b3IuaXNfYmVnaW4oKSkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICptX29i
amVjdDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6
b3V0X29mX3JhbmdlPigiY2Fubm90IGdldCB2YWx1ZSIpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
LyohCisgICAgICAgIEBicmllZiBkZXJlZmVyZW5jZSB0aGUgaXRlcmF0b3IKKyAgICAgICAgQHBy
ZSBUaGUgaXRlcmF0b3IgaXMgaW5pdGlhbGl6ZWQ7IGkuZS4gYG1fb2JqZWN0ICE9IG51bGxwdHJg
LgorICAgICAgICAqLworICAgICAgICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICBhc3NlcnQobV9vYmplY3QgIT0gbnVsbHB0cik7CisKKyAgICAgICAg
ICAgIHN3aXRjaCAobV9vYmplY3QtPm1fdHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIGJhc2ljX2pzb246OnZhbHVlX3Q6Om9iamVjdDoKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChtX2l0Lm9iamVjdF9pdGVyYXRvciAhPSBtX29i
amVjdC0+bV92YWx1ZS5vYmplY3QtPmVuZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICYobV9pdC5vYmplY3RfaXRlcmF0b3ItPnNlY29uZCk7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgY2FzZSBiYXNpY19qc29uOjp2YWx1ZV90OjphcnJheToKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChtX2l0LmFycmF5X2l0ZXJhdG9y
ICE9IG1fb2JqZWN0LT5tX3ZhbHVlLmFycmF5LT5lbmQoKSk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiAmKm1faXQuYXJyYXlfaXRlcmF0b3I7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2l0LnByaW1pdGl2ZV9pdGVyYXRvci5pc19iZWdpbigpKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9vYmplY3Q7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6Om91dF9vZl9yYW5n
ZT4oImNhbm5vdCBnZXQgdmFsdWUiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAg
ICBAYnJpZWYgcG9zdC1pbmNyZW1lbnQgKGl0KyspCisgICAgICAgIEBwcmUgVGhlIGl0ZXJhdG9y
IGlzIGluaXRpYWxpemVkOyBpLmUuIGBtX29iamVjdCAhPSBudWxscHRyYC4KKyAgICAgICAgKi8K
KyAgICAgICAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gKnRoaXM7CisgICAgICAgICAgICArKygqdGhpcyk7CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgLyohCisgICAgICAg
IEBicmllZiBwcmUtaW5jcmVtZW50ICgrK2l0KQorICAgICAgICBAcHJlIFRoZSBpdGVyYXRvciBp
cyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCisgICAgICAgICovCisg
ICAgICAgIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgYXNzZXJ0KG1fb2JqZWN0ICE9IG51bGxwdHIpOworCisgICAgICAgICAgICBzd2l0Y2ggKG1f
b2JqZWN0LT5tX3R5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBiYXNp
Y19qc29uOjp2YWx1ZV90OjpvYmplY3Q6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBzdGQ6OmFkdmFuY2UobV9pdC5vYmplY3RfaXRlcmF0b3IsIDEpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBj
YXNlIGJhc2ljX2pzb246OnZhbHVlX3Q6OmFycmF5OgorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgc3RkOjphZHZhbmNlKG1faXQuYXJyYXlfaXRlcmF0b3IsIDEpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKytt
X2l0LnByaW1pdGl2ZV9pdGVyYXRvcjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmIHBvc3QtZGVjcmVtZW50
IChpdC0tKQorICAgICAgICBAcHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBg
bV9vYmplY3QgIT0gbnVsbHB0cmAuCisgICAgICAgICovCisgICAgICAgIGNvbnN0X2l0ZXJhdG9y
IG9wZXJhdG9yLS0oaW50KQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9ICp0
aGlzOworICAgICAgICAgICAgLS0oKnRoaXMpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAgICBAYnJpZWYgcHJlLWRlY3JlbWVudCAo
LS1pdCkKKyAgICAgICAgQHByZSBUaGUgaXRlcmF0b3IgaXMgaW5pdGlhbGl6ZWQ7IGkuZS4gYG1f
b2JqZWN0ICE9IG51bGxwdHJgLgorICAgICAgICAqLworICAgICAgICBjb25zdF9pdGVyYXRvciYg
b3BlcmF0b3ItLSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydChtX29iamVjdCAhPSBu
dWxscHRyKTsKKworICAgICAgICAgICAgc3dpdGNoIChtX29iamVjdC0+bV90eXBlKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFsdWVfdDo6b2JqZWN0
OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjphZHZhbmNlKG1f
aXQub2JqZWN0X2l0ZXJhdG9yLCAtMSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFsdWVf
dDo6YXJyYXk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OmFk
dmFuY2UobV9pdC5hcnJheV9pdGVyYXRvciwgLTEpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLS1tX2l0LnByaW1pdGl2ZV9pdGVyYXRv
cjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAg
ICAvKiEKKyAgICAgICAgQGJyaWVmICBjb21wYXJpc29uOiBlcXVhbAorICAgICAgICBAcHJlIFRo
ZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCisg
ICAgICAgICovCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBjb25zdF9pdGVyYXRvciYg
b3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGlmIG9iamVjdHMgYXJlIG5v
dCB0aGUgc2FtZSwgdGhlIGNvbXBhcmlzb24gaXMgdW5kZWZpbmVkCisgICAgICAgICAgICBpZiAo
bV9vYmplY3QgIT0gb3RoZXIubV9vYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJjYW5ub3QgY29tcGFyZSBpdGVyYXRvcnMgb2Yg
ZGlmZmVyZW50IGNvbnRhaW5lcnMiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXNz
ZXJ0KG1fb2JqZWN0ICE9IG51bGxwdHIpOworCisgICAgICAgICAgICBzd2l0Y2ggKG1fb2JqZWN0
LT5tX3R5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBiYXNpY19qc29u
Ojp2YWx1ZV90OjpvYmplY3Q6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gKG1faXQub2JqZWN0X2l0ZXJhdG9yID09IG90aGVyLm1faXQub2JqZWN0X2l0ZXJh
dG9yKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYXNlIGJhc2ljX2pz
b246OnZhbHVlX3Q6OmFycmF5OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIChtX2l0LmFycmF5X2l0ZXJhdG9yID09IG90aGVyLm1faXQuYXJyYXlfaXRlcmF0
b3IpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1faXQucHJpbWl0aXZl
X2l0ZXJhdG9yID09IG90aGVyLm1faXQucHJpbWl0aXZlX2l0ZXJhdG9yKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAg
QGJyaWVmICBjb21wYXJpc29uOiBub3QgZXF1YWwKKyAgICAgICAgQHByZSBUaGUgaXRlcmF0b3Ig
aXMgaW5pdGlhbGl6ZWQ7IGkuZS4gYG1fb2JqZWN0ICE9IG51bGxwdHJgLgorICAgICAgICAqLwor
ICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbm90IG9wZXJhdG9yPT0ob3RoZXIpOwor
ICAgICAgICB9CisKKyAgICAgICAgLyohCisgICAgICAgIEBicmllZiAgY29tcGFyaXNvbjogc21h
bGxlcgorICAgICAgICBAcHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9v
YmplY3QgIT0gbnVsbHB0cmAuCisgICAgICAgICovCisgICAgICAgIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
Ly8gaWYgb2JqZWN0cyBhcmUgbm90IHRoZSBzYW1lLCB0aGUgY29tcGFyaXNvbiBpcyB1bmRlZmlu
ZWQKKyAgICAgICAgICAgIGlmIChtX29iamVjdCAhPSBvdGhlci5tX29iamVjdCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oImNhbm5vdCBj
b21wYXJlIGl0ZXJhdG9ycyBvZiBkaWZmZXJlbnQgY29udGFpbmVycyIpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBhc3NlcnQobV9vYmplY3QgIT0gbnVsbHB0cik7CisKKyAgICAgICAg
ICAgIHN3aXRjaCAobV9vYmplY3QtPm1fdHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIGJhc2ljX2pzb246OnZhbHVlX3Q6Om9iamVjdDoKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fubm90IGNv
bXBhcmUgb3JkZXIgb2Ygb2JqZWN0IGl0ZXJhdG9ycyIpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFsdWVfdDo6YXJyYXk6CisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1faXQuYXJyYXlfaXRlcmF0
b3IgPCBvdGhlci5tX2l0LmFycmF5X2l0ZXJhdG9yKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIChtX2l0LnByaW1pdGl2ZV9pdGVyYXRvciA8IG90aGVyLm1faXQucHJpbWl0
aXZlX2l0ZXJhdG9yKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmICBjb21wYXJpc29uOiBsZXNzIHRoYW4g
b3IgZXF1YWwKKyAgICAgICAgQHByZSBUaGUgaXRlcmF0b3IgaXMgaW5pdGlhbGl6ZWQ7IGkuZS4g
YG1fb2JqZWN0ICE9IG51bGxwdHJgLgorICAgICAgICAqLworICAgICAgICBib29sIG9wZXJhdG9y
PD0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbm90IG90aGVyLm9wZXJhdG9yIDwgKCp0aGlzKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8qIQorICAgICAgICBAYnJpZWYgIGNvbXBhcmlzb246IGdyZWF0ZXIgdGhhbgorICAg
ICAgICBAcHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0g
bnVsbHB0cmAuCisgICAgICAgICovCisgICAgICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0IGNvbnN0
X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5v
dCBvcGVyYXRvcjw9KG90aGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAgICBA
YnJpZWYgIGNvbXBhcmlzb246IGdyZWF0ZXIgdGhhbiBvciBlcXVhbAorICAgICAgICBAcHJlIFRo
ZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCisg
ICAgICAgICovCisgICAgICAgIGJvb2wgb3BlcmF0b3I+PShjb25zdCBjb25zdF9pdGVyYXRvciYg
b3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBub3Qgb3BlcmF0b3I8
KG90aGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAgICBAYnJpZWYgIGFkZCB0
byBpdGVyYXRvcgorICAgICAgICBAcHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5l
LiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCisgICAgICAgICovCisgICAgICAgIGNvbnN0X2l0ZXJh
dG9yJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBpKQorICAgICAgICB7CisgICAgICAgICAg
ICBhc3NlcnQobV9vYmplY3QgIT0gbnVsbHB0cik7CisKKyAgICAgICAgICAgIHN3aXRjaCAobV9v
YmplY3QtPm1fdHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIGJhc2lj
X2pzb246OnZhbHVlX3Q6Om9iamVjdDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fubm90IHVzZSBvZmZzZXRzIHdpdGgg
b2JqZWN0IGl0ZXJhdG9ycyIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGNhc2UgYmFzaWNfanNvbjo6dmFsdWVfdDo6YXJyYXk6CisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBzdGQ6OmFkdmFuY2UobV9pdC5hcnJheV9pdGVyYXRvciwgaSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBt
X2l0LnByaW1pdGl2ZV9pdGVyYXRvciArPSBpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAgICBAYnJpZWYgIHN1YnRyYWN0
IGZyb20gaXRlcmF0b3IKKyAgICAgICAgQHByZSBUaGUgaXRlcmF0b3IgaXMgaW5pdGlhbGl6ZWQ7
IGkuZS4gYG1fb2JqZWN0ICE9IG51bGxwdHJgLgorICAgICAgICAqLworICAgICAgICBjb25zdF9p
dGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgaSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhdG9yKz0oLWkpOworICAgICAgICB9CisKKyAgICAgICAgLyohCisg
ICAgICAgIEBicmllZiAgYWRkIHRvIGl0ZXJhdG9yCisgICAgICAgIEBwcmUgVGhlIGl0ZXJhdG9y
IGlzIGluaXRpYWxpemVkOyBpLmUuIGBtX29iamVjdCAhPSBudWxscHRyYC4KKyAgICAgICAgKi8K
KyAgICAgICAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBpKQorICAg
ICAgICB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9ICp0aGlzOworICAgICAgICAgICAgcmVz
dWx0ICs9IGk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAg
ICAgLyohCisgICAgICAgIEBicmllZiAgc3VidHJhY3QgZnJvbSBpdGVyYXRvcgorICAgICAgICBA
cHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0
cmAuCisgICAgICAgICovCisgICAgICAgIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJl
bmNlX3R5cGUgaSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSAqdGhpczsK
KyAgICAgICAgICAgIHJlc3VsdCAtPSBpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAgICBAYnJpZWYgIHJldHVybiBkaWZmZXJlbmNl
CisgICAgICAgIEBwcmUgVGhlIGl0ZXJhdG9yIGlzIGluaXRpYWxpemVkOyBpLmUuIGBtX29iamVj
dCAhPSBudWxscHRyYC4KKyAgICAgICAgKi8KKyAgICAgICAgZGlmZmVyZW5jZV90eXBlIG9wZXJh
dG9yLShjb25zdCBjb25zdF9pdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGFzc2VydChtX29iamVjdCAhPSBudWxscHRyKTsKKworICAgICAgICAgICAgc3dpdGNo
IChtX29iamVjdC0+bV90eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2Ug
YmFzaWNfanNvbjo6dmFsdWVfdDo6b2JqZWN0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJjYW5ub3QgdXNlIG9mZnNldHMg
d2l0aCBvYmplY3QgaXRlcmF0b3JzIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgY2FzZSBiYXNpY19qc29uOjp2YWx1ZV90OjphcnJheToKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2l0LmFycmF5X2l0ZXJhdG9yIC0gb3RoZXIu
bV9pdC5hcnJheV9pdGVyYXRvcjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1faXQucHJpbWl0aXZlX2l0ZXJhdG9yIC0gb3RoZXIubV9pdC5wcmltaXRpdmVfaXRlcmF0b3I7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
LyohCisgICAgICAgIEBicmllZiAgYWNjZXNzIHRvIHN1Y2Nlc3NvcgorICAgICAgICBAcHJlIFRo
ZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCisg
ICAgICAgICovCisgICAgICAgIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBu
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBhc3NlcnQobV9vYmplY3QgIT0gbnVsbHB0
cik7CisKKyAgICAgICAgICAgIHN3aXRjaCAobV9vYmplY3QtPm1fdHlwZSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBjYXNlIGJhc2ljX2pzb246OnZhbHVlX3Q6Om9iamVjdDoKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vy
cm9yPigiY2Fubm90IHVzZSBvcGVyYXRvcltdIGZvciBvYmplY3QgaXRlcmF0b3JzIik7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY2FzZSBiYXNpY19qc29uOjp2YWx1ZV90
OjphcnJheToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAq
c3RkOjpuZXh0KG1faXQuYXJyYXlfaXRlcmF0b3IsIG4pOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFsdWVfdDo6bnVsbDoKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6b3V0X29mX3JhbmdlPigi
Y2Fubm90IGdldCB2YWx1ZSIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9p
dC5wcmltaXRpdmVfaXRlcmF0b3IgPT0gLW4pCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAqbV9vYmplY3Q7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6Om91dF9vZl9yYW5nZT4oImNhbm5vdCBnZXQg
dmFsdWUiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAgICBAYnJpZWYgIHJldHVy
biB0aGUga2V5IG9mIGFuIG9iamVjdCBpdGVyYXRvcgorICAgICAgICBAcHJlIFRoZSBpdGVyYXRv
ciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCisgICAgICAgICov
CisgICAgICAgIHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlwZSBrZXkoKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICBhc3NlcnQobV9vYmplY3QgIT0gbnVsbHB0cik7CisKKyAgICAgICAg
ICAgIGlmIChtX29iamVjdC0+aXNfb2JqZWN0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1faXQub2JqZWN0X2l0ZXJhdG9yLT5maXJzdDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUaHJvdzxz
dGQ6OmRvbWFpbl9lcnJvcj4oImNhbm5vdCB1c2Uga2V5KCkgZm9yIG5vbi1vYmplY3QgaXRlcmF0
b3JzIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAg
QGJyaWVmICByZXR1cm4gdGhlIHZhbHVlIG9mIGFuIGl0ZXJhdG9yCisgICAgICAgIEBwcmUgVGhl
IGl0ZXJhdG9yIGlzIGluaXRpYWxpemVkOyBpLmUuIGBtX29iamVjdCAhPSBudWxscHRyYC4KKyAg
ICAgICAgKi8KKyAgICAgICAgcmVmZXJlbmNlIHZhbHVlKCkgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdG9yKigpOworICAgICAgICB9CisKKyAgICAgIHByaXZhdGU6
CisgICAgICAgIC8vLyBhc3NvY2lhdGVkIEpTT04gaW5zdGFuY2UKKyAgICAgICAgcG9pbnRlciBt
X29iamVjdCA9IG51bGxwdHI7CisgICAgICAgIC8vLyB0aGUgYWN0dWFsIGl0ZXJhdG9yIG9mIHRo
ZSBhc3NvY2lhdGVkIGluc3RhbmNlCisgICAgICAgIGludGVybmFsX2l0ZXJhdG9yIG1faXQgPSBp
bnRlcm5hbF9pdGVyYXRvcigpOworICAgIH07CisKKyAgICAvKiEKKyAgICBAYnJpZWYgYSBtdXRh
YmxlIHJhbmRvbSBhY2Nlc3MgaXRlcmF0b3IgZm9yIHRoZSBAcmVmIGJhc2ljX2pzb24gY2xhc3MK
KworICAgIEByZXF1aXJlbWVudCBUaGUgY2xhc3Mgc2F0aXNmaWVzIHRoZSBmb2xsb3dpbmcgY29u
Y2VwdCByZXF1aXJlbWVudHM6CisgICAgLSBbUmFuZG9tQWNjZXNzSXRlcmF0b3JdKGh0dHA6Ly9l
bi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNlcHQvUmFuZG9tQWNjZXNzSXRlcmF0b3IpOgor
ICAgICAgVGhlIGl0ZXJhdG9yIHRoYXQgY2FuIGJlIG1vdmVkIHRvIHBvaW50IChmb3J3YXJkIGFu
ZCBiYWNrd2FyZCkgdG8gYW55CisgICAgICBlbGVtZW50IGluIGNvbnN0YW50IHRpbWUuCisgICAg
LSBbT3V0cHV0SXRlcmF0b3JdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNl
cHQvT3V0cHV0SXRlcmF0b3IpOgorICAgICAgSXQgaXMgcG9zc2libGUgdG8gd3JpdGUgdG8gdGhl
IHBvaW50ZWQtdG8gZWxlbWVudC4KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8K
KyAgICBjbGFzcyBpdGVyYXRvciA6IHB1YmxpYyBjb25zdF9pdGVyYXRvcgorICAgIHsKKyAgICAg
IHB1YmxpYzoKKyAgICAgICAgdXNpbmcgYmFzZV9pdGVyYXRvciA9IGNvbnN0X2l0ZXJhdG9yOwor
ICAgICAgICB1c2luZyBwb2ludGVyID0gdHlwZW5hbWUgYmFzaWNfanNvbjo6cG9pbnRlcjsKKyAg
ICAgICAgdXNpbmcgcmVmZXJlbmNlID0gdHlwZW5hbWUgYmFzaWNfanNvbjo6cmVmZXJlbmNlOwor
CisgICAgICAgIC8vLyBkZWZhdWx0IGNvbnN0cnVjdG9yCisgICAgICAgIGl0ZXJhdG9yKCkgPSBk
ZWZhdWx0OworCisgICAgICAgIC8vLyBjb25zdHJ1Y3RvciBmb3IgYSBnaXZlbiBKU09OIGluc3Rh
bmNlCisgICAgICAgIGV4cGxpY2l0IGl0ZXJhdG9yKHBvaW50ZXIgb2JqZWN0KSBub2V4Y2VwdAor
ICAgICAgICAgICAgOiBiYXNlX2l0ZXJhdG9yKG9iamVjdCkKKyAgICAgICAge30KKworICAgICAg
ICAvLy8gY29weSBjb25zdHJ1Y3RvcgorICAgICAgICBpdGVyYXRvcihjb25zdCBpdGVyYXRvciYg
b3RoZXIpIG5vZXhjZXB0CisgICAgICAgICAgICA6IGJhc2VfaXRlcmF0b3Iob3RoZXIpCisgICAg
ICAgIHt9CisKKyAgICAgICAgLy8vIGNvcHkgYXNzaWdubWVudAorICAgICAgICBpdGVyYXRvciYg
b3BlcmF0b3I9KGl0ZXJhdG9yIG90aGVyKSBub2V4Y2VwdCgKKyAgICAgICAgICAgIHN0ZDo6aXNf
bm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8cG9pbnRlcj46OnZhbHVlIGFuZAorICAgICAgICAg
ICAgc3RkOjppc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxwb2ludGVyPjo6dmFsdWUgYW5kCisg
ICAgICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPGludGVybmFsX2l0
ZXJhdG9yPjo6dmFsdWUgYW5kCisgICAgICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9hc3Np
Z25hYmxlPGludGVybmFsX2l0ZXJhdG9yPjo6dmFsdWUKKyAgICAgICAgKQorICAgICAgICB7Cisg
ICAgICAgICAgICBiYXNlX2l0ZXJhdG9yOjpvcGVyYXRvcj0ob3RoZXIpOworICAgICAgICAgICAg
cmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLy8vIHJldHVybiBhIHJlZmVyZW5j
ZSB0byB0aGUgdmFsdWUgcG9pbnRlZCB0byBieSB0aGUgaXRlcmF0b3IKKyAgICAgICAgcmVmZXJl
bmNlIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjb25z
dF9jYXN0PHJlZmVyZW5jZT4oYmFzZV9pdGVyYXRvcjo6b3BlcmF0b3IqKCkpOworICAgICAgICB9
CisKKyAgICAgICAgLy8vIGRlcmVmZXJlbmNlIHRoZSBpdGVyYXRvcgorICAgICAgICBwb2ludGVy
IG9wZXJhdG9yLT4oKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gY29uc3Rf
Y2FzdDxwb2ludGVyPihiYXNlX2l0ZXJhdG9yOjpvcGVyYXRvci0+KCkpOworICAgICAgICB9CisK
KyAgICAgICAgLy8vIHBvc3QtaW5jcmVtZW50IChpdCsrKQorICAgICAgICBpdGVyYXRvciBvcGVy
YXRvcisrKGludCkKKyAgICAgICAgeworICAgICAgICAgICAgaXRlcmF0b3IgcmVzdWx0ID0gKnRo
aXM7CisgICAgICAgICAgICBiYXNlX2l0ZXJhdG9yOjpvcGVyYXRvcisrKCk7CisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgLy8vIHByZS1pbmNyZW1lbnQg
KCsraXQpCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgYmFzZV9pdGVyYXRvcjo6b3BlcmF0b3IrKygpOworICAgICAgICAgICAgcmV0dXJuICp0
aGlzOworICAgICAgICB9CisKKyAgICAgICAgLy8vIHBvc3QtZGVjcmVtZW50IChpdC0tKQorICAg
ICAgICBpdGVyYXRvciBvcGVyYXRvci0tKGludCkKKyAgICAgICAgeworICAgICAgICAgICAgaXRl
cmF0b3IgcmVzdWx0ID0gKnRoaXM7CisgICAgICAgICAgICBiYXNlX2l0ZXJhdG9yOjpvcGVyYXRv
ci0tKCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAg
Ly8vIHByZS1kZWNyZW1lbnQgKC0taXQpCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvci0tKCkK
KyAgICAgICAgeworICAgICAgICAgICAgYmFzZV9pdGVyYXRvcjo6b3BlcmF0b3ItLSgpOworICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLy8vIGFkZCB0byBp
dGVyYXRvcgorICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgaSkK
KyAgICAgICAgeworICAgICAgICAgICAgYmFzZV9pdGVyYXRvcjo6b3BlcmF0b3IrPShpKTsKKyAg
ICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyBzdWJ0cmFj
dCBmcm9tIGl0ZXJhdG9yCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2Vf
dHlwZSBpKQorICAgICAgICB7CisgICAgICAgICAgICBiYXNlX2l0ZXJhdG9yOjpvcGVyYXRvci09
KGkpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLy8v
IGFkZCB0byBpdGVyYXRvcgorICAgICAgICBpdGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90
eXBlIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gKnRoaXM7CisgICAg
ICAgICAgICByZXN1bHQgKz0gaTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IH0KKworICAgICAgICAvLy8gc3VidHJhY3QgZnJvbSBpdGVyYXRvcgorICAgICAgICBpdGVyYXRv
ciBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gKnRoaXM7CisgICAgICAgICAgICByZXN1bHQgLT0gaTsKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICAvLy8gcmV0dXJuIGRpZmZlcmVu
Y2UKKyAgICAgICAgZGlmZmVyZW5jZV90eXBlIG9wZXJhdG9yLShjb25zdCBpdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBiYXNlX2l0ZXJhdG9yOjpv
cGVyYXRvci0ob3RoZXIpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIGFjY2VzcyB0byBzdWNj
ZXNzb3IKKyAgICAgICAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIG4pIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjb25zdF9jYXN0PHJlZmVyZW5jZT4o
YmFzZV9pdGVyYXRvcjo6b3BlcmF0b3JbXShuKSk7CisgICAgICAgIH0KKworICAgICAgICAvLy8g
cmV0dXJuIHRoZSB2YWx1ZSBvZiBhbiBpdGVyYXRvcgorICAgICAgICByZWZlcmVuY2UgdmFsdWUo
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxyZWZlcmVu
Y2U+KGJhc2VfaXRlcmF0b3I6OnZhbHVlKCkpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8q
IQorICAgIEBicmllZiBhIHRlbXBsYXRlIGZvciBhIHJldmVyc2UgaXRlcmF0b3IgY2xhc3MKKwor
ICAgIEB0cGFyYW0gQmFzZSB0aGUgYmFzZSBpdGVyYXRvciB0eXBlIHRvIHJldmVyc2UuIFZhbGlk
IHR5cGVzIGFyZSBAcmVmCisgICAgaXRlcmF0b3IgKHRvIGNyZWF0ZSBAcmVmIHJldmVyc2VfaXRl
cmF0b3IpIGFuZCBAcmVmIGNvbnN0X2l0ZXJhdG9yICh0bworICAgIGNyZWF0ZSBAcmVmIGNvbnN0
X3JldmVyc2VfaXRlcmF0b3IpLgorCisgICAgQHJlcXVpcmVtZW50IFRoZSBjbGFzcyBzYXRpc2Zp
ZXMgdGhlIGZvbGxvd2luZyBjb25jZXB0IHJlcXVpcmVtZW50czoKKyAgICAtIFtSYW5kb21BY2Nl
c3NJdGVyYXRvcl0oaHR0cDovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29uY2VwdC9SYW5k
b21BY2Nlc3NJdGVyYXRvcik6CisgICAgICBUaGUgaXRlcmF0b3IgdGhhdCBjYW4gYmUgbW92ZWQg
dG8gcG9pbnQgKGZvcndhcmQgYW5kIGJhY2t3YXJkKSB0byBhbnkKKyAgICAgIGVsZW1lbnQgaW4g
Y29uc3RhbnQgdGltZS4KKyAgICAtIFtPdXRwdXRJdGVyYXRvcl0oaHR0cDovL2VuLmNwcHJlZmVy
ZW5jZS5jb20vdy9jcHAvY29uY2VwdC9PdXRwdXRJdGVyYXRvcik6CisgICAgICBJdCBpcyBwb3Nz
aWJsZSB0byB3cml0ZSB0byB0aGUgcG9pbnRlZC10byBlbGVtZW50IChvbmx5IGlmIEBhIEJhc2Ug
aXMKKyAgICAgIEByZWYgaXRlcmF0b3IpLgorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAg
ICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2U+CisgICAgY2xhc3MganNvbl9yZXZlcnNl
X2l0ZXJhdG9yIDogcHVibGljIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxCYXNlPgorICAgIHsKKyAg
ICAgIHB1YmxpYzoKKyAgICAgICAgLy8vIHNob3J0Y3V0IHRvIHRoZSByZXZlcnNlIGl0ZXJhdG9y
IGFkYXB0b3IKKyAgICAgICAgdXNpbmcgYmFzZV9pdGVyYXRvciA9IHN0ZDo6cmV2ZXJzZV9pdGVy
YXRvcjxCYXNlPjsKKyAgICAgICAgLy8vIHRoZSByZWZlcmVuY2UgdHlwZSBmb3IgdGhlIHBvaW50
ZWQtdG8gZWxlbWVudAorICAgICAgICB1c2luZyByZWZlcmVuY2UgPSB0eXBlbmFtZSBCYXNlOjpy
ZWZlcmVuY2U7CisKKyAgICAgICAgLy8vIGNyZWF0ZSByZXZlcnNlIGl0ZXJhdG9yIGZyb20gaXRl
cmF0b3IKKyAgICAgICAganNvbl9yZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHR5cGVuYW1lIGJhc2Vf
aXRlcmF0b3I6Oml0ZXJhdG9yX3R5cGUmIGl0KSBub2V4Y2VwdAorICAgICAgICAgICAgOiBiYXNl
X2l0ZXJhdG9yKGl0KQorICAgICAgICB7fQorCisgICAgICAgIC8vLyBjcmVhdGUgcmV2ZXJzZSBp
dGVyYXRvciBmcm9tIGJhc2UgY2xhc3MKKyAgICAgICAganNvbl9yZXZlcnNlX2l0ZXJhdG9yKGNv
bnN0IGJhc2VfaXRlcmF0b3ImIGl0KSBub2V4Y2VwdAorICAgICAgICAgICAgOiBiYXNlX2l0ZXJh
dG9yKGl0KQorICAgICAgICB7fQorCisgICAgICAgIC8vLyBwb3N0LWluY3JlbWVudCAoaXQrKykK
KyAgICAgICAganNvbl9yZXZlcnNlX2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYmFzZV9pdGVyYXRvcjo6b3BlcmF0b3IrKygxKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vLyBwcmUtaW5jcmVtZW50ICgrK2l0KQorICAgICAgICBqc29uX3Jl
dmVyc2VfaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBiYXNl
X2l0ZXJhdG9yOjpvcGVyYXRvcisrKCk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
ICAgIH0KKworICAgICAgICAvLy8gcG9zdC1kZWNyZW1lbnQgKGl0LS0pCisgICAgICAgIGpzb25f
cmV2ZXJzZV9pdGVyYXRvciBvcGVyYXRvci0tKGludCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGJhc2VfaXRlcmF0b3I6Om9wZXJhdG9yLS0oMSk7CisgICAgICAgIH0KKworICAgICAg
ICAvLy8gcHJlLWRlY3JlbWVudCAoLS1pdCkKKyAgICAgICAganNvbl9yZXZlcnNlX2l0ZXJhdG9y
JiBvcGVyYXRvci0tKCkKKyAgICAgICAgeworICAgICAgICAgICAgYmFzZV9pdGVyYXRvcjo6b3Bl
cmF0b3ItLSgpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAg
ICAgLy8vIGFkZCB0byBpdGVyYXRvcgorICAgICAgICBqc29uX3JldmVyc2VfaXRlcmF0b3ImIG9w
ZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJhc2Vf
aXRlcmF0b3I6Om9wZXJhdG9yKz0oaSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
ICAgIH0KKworICAgICAgICAvLy8gYWRkIHRvIGl0ZXJhdG9yCisgICAgICAgIGpzb25fcmV2ZXJz
ZV9pdGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIGkpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gKnRoaXM7CisgICAgICAgICAgICByZXN1bHQgKz0g
aTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICAvLy8g
c3VidHJhY3QgZnJvbSBpdGVyYXRvcgorICAgICAgICBqc29uX3JldmVyc2VfaXRlcmF0b3Igb3Bl
cmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBpKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBh
dXRvIHJlc3VsdCA9ICp0aGlzOworICAgICAgICAgICAgcmVzdWx0IC09IGk7CisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgLy8vIHJldHVybiBkaWZmZXJl
bmNlCisgICAgICAgIGRpZmZlcmVuY2VfdHlwZSBvcGVyYXRvci0oY29uc3QganNvbl9yZXZlcnNl
X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMtPmJhc2UoKSAtIG90aGVyLmJhc2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyBhY2Nl
c3MgdG8gc3VjY2Vzc29yCisgICAgICAgIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2Vf
dHlwZSBuKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKih0aGlzLT5vcGVy
YXRvcisobikpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIHJldHVybiB0aGUga2V5IG9mIGFu
IG9iamVjdCBpdGVyYXRvcgorICAgICAgICB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUga2V5
KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBpdCA9IC0tdGhpcy0+YmFzZSgp
OworICAgICAgICAgICAgcmV0dXJuIGl0LmtleSgpOworICAgICAgICB9CisKKyAgICAgICAgLy8v
IHJldHVybiB0aGUgdmFsdWUgb2YgYW4gaXRlcmF0b3IKKyAgICAgICAgcmVmZXJlbmNlIHZhbHVl
KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBpdCA9IC0tdGhpcy0+YmFzZSgp
OworICAgICAgICAgICAgcmV0dXJuIGl0Lm9wZXJhdG9yICogKCk7CisgICAgICAgIH0KKyAgICB9
OworCisKKyAgcHJpdmF0ZToKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy8gbGV4
ZXIgYW5kIHBhcnNlciAvLworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIC8qIQor
ICAgIEBicmllZiBsZXhpY2FsIGFuYWx5c2lzCisKKyAgICBUaGlzIGNsYXNzIG9yZ2FuaXplcyB0
aGUgbGV4aWNhbCBhbmFseXNpcyBkdXJpbmcgSlNPTiBkZXNlcmlhbGl6YXRpb24uIFRoZQorICAg
IGNvcmUgb2YgaXQgaXMgYSBzY2FubmVyIGdlbmVyYXRlZCBieSBbcmUyY10oaHR0cDovL3JlMmMu
b3JnKSB0aGF0CisgICAgcHJvY2Vzc2VzIGEgYnVmZmVyIGFuZCByZWNvZ25pemVzIHRva2VucyBh
Y2NvcmRpbmcgdG8gUkZDIDcxNTkuCisgICAgKi8KKyAgICBjbGFzcyBsZXhlcgorICAgIHsKKyAg
ICAgIHB1YmxpYzoKKyAgICAgICAgLy8vIHRva2VuIHR5cGVzIGZvciB0aGUgcGFyc2VyCisgICAg
ICAgIGVudW0gY2xhc3MgdG9rZW5fdHlwZQorICAgICAgICB7CisgICAgICAgICAgICB1bmluaXRp
YWxpemVkLCAgIC8vLzwgaW5kaWNhdGluZyB0aGUgc2Nhbm5lciBpcyB1bmluaXRpYWxpemVkCisg
ICAgICAgICAgICBsaXRlcmFsX3RydWUsICAgIC8vLzwgdGhlIGB0cnVlYCBsaXRlcmFsCisgICAg
ICAgICAgICBsaXRlcmFsX2ZhbHNlLCAgIC8vLzwgdGhlIGBmYWxzZWAgbGl0ZXJhbAorICAgICAg
ICAgICAgbGl0ZXJhbF9udWxsLCAgICAvLy88IHRoZSBgbnVsbGAgbGl0ZXJhbAorICAgICAgICAg
ICAgdmFsdWVfc3RyaW5nLCAgICAvLy88IGEgc3RyaW5nIC0tIHVzZSBnZXRfc3RyaW5nKCkgZm9y
IGFjdHVhbCB2YWx1ZQorICAgICAgICAgICAgdmFsdWVfbnVtYmVyLCAgICAvLy88IGEgbnVtYmVy
IC0tIHVzZSBnZXRfbnVtYmVyKCkgZm9yIGFjdHVhbCB2YWx1ZQorICAgICAgICAgICAgYmVnaW5f
YXJyYXksICAgICAvLy88IHRoZSBjaGFyYWN0ZXIgZm9yIGFycmF5IGJlZ2luIGBbYAorICAgICAg
ICAgICAgYmVnaW5fb2JqZWN0LCAgICAvLy88IHRoZSBjaGFyYWN0ZXIgZm9yIG9iamVjdCBiZWdp
biBge2AKKyAgICAgICAgICAgIGVuZF9hcnJheSwgICAgICAgLy8vPCB0aGUgY2hhcmFjdGVyIGZv
ciBhcnJheSBlbmQgYF1gCisgICAgICAgICAgICBlbmRfb2JqZWN0LCAgICAgIC8vLzwgdGhlIGNo
YXJhY3RlciBmb3Igb2JqZWN0IGVuZCBgfWAKKyAgICAgICAgICAgIG5hbWVfc2VwYXJhdG9yLCAg
Ly8vPCB0aGUgbmFtZSBzZXBhcmF0b3IgYDpgCisgICAgICAgICAgICB2YWx1ZV9zZXBhcmF0b3Is
IC8vLzwgdGhlIHZhbHVlIHNlcGFyYXRvciBgLGAKKyAgICAgICAgICAgIHBhcnNlX2Vycm9yLCAg
ICAgLy8vPCBpbmRpY2F0aW5nIGEgcGFyc2UgZXJyb3IKKyAgICAgICAgICAgIGVuZF9vZl9pbnB1
dCAgICAgLy8vPCBpbmRpY2F0aW5nIHRoZSBlbmQgb2YgdGhlIGlucHV0IGJ1ZmZlcgorICAgICAg
ICB9OworCisgICAgICAgIC8vLyB0aGUgY2hhciB0eXBlIHRvIHVzZSBpbiB0aGUgbGV4ZXIKKyAg
ICAgICAgdXNpbmcgbGV4ZXJfY2hhcl90ID0gdW5zaWduZWQgY2hhcjsKKworICAgICAgICAvLy8g
YSBsZXhlciBmcm9tIGEgYnVmZmVyIHdpdGggZ2l2ZW4gbGVuZ3RoCisgICAgICAgIGxleGVyKGNv
bnN0IGxleGVyX2NoYXJfdCogYnVmZiwgY29uc3Qgc2l6ZV90IGxlbikgbm9leGNlcHQKKyAgICAg
ICAgICAgIDogbV9jb250ZW50KGJ1ZmYpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydCht
X2NvbnRlbnQgIT0gbnVsbHB0cik7CisgICAgICAgICAgICBtX3N0YXJ0ID0gbV9jdXJzb3IgPSBt
X2NvbnRlbnQ7CisgICAgICAgICAgICBtX2xpbWl0ID0gbV9jb250ZW50ICsgbGVuOworICAgICAg
ICB9CisKKyAgICAgICAgLy8vIGEgbGV4ZXIgZnJvbSBhbiBpbnB1dCBzdHJlYW0KKyAgICAgICAg
ZXhwbGljaXQgbGV4ZXIoc3RkOjppc3RyZWFtJiBzKQorICAgICAgICAgICAgOiBtX3N0cmVhbSgm
cyksIG1fbGluZV9idWZmZXIoKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBpbW1lZGlhdGVs
eSBhYm9ydCBpZiBzdHJlYW0gaXMgZXJyb25lb3VzCisgICAgICAgICAgICBpZiAocy5mYWlsKCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjppbnZhbGlkX2FyZ3Vt
ZW50Pigic3RyZWFtIGVycm9yOiAiICsgIHN0ZDo6c3RyaW5nKHN0cmVycm9yKGVycm5vKSkpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBmaWxsIGJ1ZmZlcgorICAgICAgICAgICAg
ZmlsbF9saW5lX2J1ZmZlcigpOworCisgICAgICAgICAgICAvLyBza2lwIFVURi04IGJ5dGUtb3Jk
ZXIgbWFyaworICAgICAgICAgICAgaWYgKG1fbGluZV9idWZmZXIuc2l6ZSgpID49IDMgYW5kIG1f
bGluZV9idWZmZXIuc3Vic3RyKDAsIDMpID09ICJceEVGXHhCQlx4QkYiKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG1fbGluZV9idWZmZXJbMF0gPSAnICc7CisgICAgICAgICAgICAg
ICAgbV9saW5lX2J1ZmZlclsxXSA9ICcgJzsKKyAgICAgICAgICAgICAgICBtX2xpbmVfYnVmZmVy
WzJdID0gJyAnOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gc3dpdGNo
IG9mZiB1bndhbnRlZCBmdW5jdGlvbnMgKGR1ZSB0byBwb2ludGVyIG1lbWJlcnMpCisgICAgICAg
IGxleGVyKCkgPSBkZWxldGU7CisgICAgICAgIGxleGVyKGNvbnN0IGxleGVyJikgPSBkZWxldGU7
CisgICAgICAgIGxleGVyIG9wZXJhdG9yPShjb25zdCBsZXhlciYpID0gZGVsZXRlOworCisgICAg
ICAgIC8qIQorICAgICAgICBAYnJpZWYgY3JlYXRlIGEgc3RyaW5nIGZyb20gb25lIG9yIHR3byBV
bmljb2RlIGNvZGUgcG9pbnRzCisKKyAgICAgICAgVGhlcmUgYXJlIHR3byBjYXNlczogKDEpIEBh
IGNvZGVwb2ludDEgaXMgaW4gdGhlIEJhc2ljIE11bHRpbGluZ3VhbAorICAgICAgICBQbGFuZSAo
VSswMDAwIHRocm91Z2ggVStGRkZGKSBhbmQgQGEgY29kZXBvaW50MiBpcyAwLCBvciAoMikKKyAg
ICAgICAgQGEgY29kZXBvaW50MSBhbmQgQGEgY29kZXBvaW50MiBhcmUgYSBVVEYtMTYgc3Vycm9n
YXRlIHBhaXIgdG8KKyAgICAgICAgcmVwcmVzZW50IGEgY29kZSBwb2ludCBhYm92ZSBVK0ZGRkYu
CisKKyAgICAgICAgQHBhcmFtW2luXSBjb2RlcG9pbnQxICB0aGUgY29kZSBwb2ludCAoY2FuIGJl
IGhpZ2ggc3Vycm9nYXRlKQorICAgICAgICBAcGFyYW1baW5dIGNvZGVwb2ludDIgIHRoZSBjb2Rl
IHBvaW50IChjYW4gYmUgbG93IHN1cnJvZ2F0ZSBvciAwKQorCisgICAgICAgIEByZXR1cm4gc3Ry
aW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb2RlIHBvaW50OyB0aGUgbGVuZ3RoIG9mIHRoZQor
ICAgICAgICByZXN1bHQgc3RyaW5nIGlzIGJldHdlZW4gMSBhbmQgNCBjaGFyYWN0ZXJzLgorCisg
ICAgICAgIEB0aHJvdyBzdGQ6Om91dF9vZl9yYW5nZSBpZiBjb2RlIHBvaW50IGlzID4gMHgxMGZm
ZmY7IGV4YW1wbGU6IGAiY29kZQorICAgICAgICBwb2ludHMgYWJvdmUgMHgxMEZGRkYgYXJlIGlu
dmFsaWQiYAorICAgICAgICBAdGhyb3cgc3RkOjppbnZhbGlkX2FyZ3VtZW50IGlmIHRoZSBsb3cg
c3Vycm9nYXRlIGlzIGludmFsaWQ7IGV4YW1wbGU6CisgICAgICAgIGAiIm1pc3Npbmcgb3Igd3Jv
bmcgbG93IHN1cnJvZ2F0ZSIiYAorCisgICAgICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisg
ICAgICAgIEBzZWUgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVVRGLTgjU2FtcGxlX2Nv
ZGU+CisgICAgICAgICovCisgICAgICAgIHN0YXRpYyBzdHJpbmdfdCB0b191bmljb2RlKGNvbnN0
IHN0ZDo6c2l6ZV90IGNvZGVwb2ludDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6c2l6ZV90IGNvZGVwb2ludDIgPSAwKQorICAgICAgICB7CisgICAgICAg
ICAgICAvLyBjYWxjdWxhdGUgdGhlIGNvZGUgcG9pbnQgZnJvbSB0aGUgZ2l2ZW4gY29kZSBwb2lu
dHMKKyAgICAgICAgICAgIHN0ZDo6c2l6ZV90IGNvZGVwb2ludCA9IGNvZGVwb2ludDE7CisKKyAg
ICAgICAgICAgIC8vIGNoZWNrIGlmIGNvZGVwb2ludDEgaXMgYSBoaWdoIHN1cnJvZ2F0ZQorICAg
ICAgICAgICAgaWYgKGNvZGVwb2ludDEgPj0gMHhEODAwIGFuZCBjb2RlcG9pbnQxIDw9IDB4REJG
RikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiBjb2RlcG9pbnQy
IGlzIGEgbG93IHN1cnJvZ2F0ZQorICAgICAgICAgICAgICAgIGlmIChjb2RlcG9pbnQyID49IDB4
REMwMCBhbmQgY29kZXBvaW50MiA8PSAweERGRkYpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBjb2RlcG9pbnQgPQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGln
aCBzdXJyb2dhdGUgb2NjdXBpZXMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgMjIgYml0cworICAgICAg
ICAgICAgICAgICAgICAgICAgKGNvZGVwb2ludDEgPDwgMTApCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBsb3cgc3Vycm9nYXRlIG9jY3VwaWVzIHRoZSBsZWFzdCBzaWduaWZpY2FudCAxNSBi
aXRzCisgICAgICAgICAgICAgICAgICAgICAgICArIGNvZGVwb2ludDIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHRoZXJlIGlzIHN0aWxsIHRoZSAweEQ4MDAsIDB4REMwMCBhbmQgMHgxMDAw
MCBub2lzZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIHJlc3VsdCBzbyB3ZSBo
YXZlIHRvIHN1YnRyYWN0IHdpdGg6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAoMHhEODAw
IDw8IDEwKSArIERDMDAgLSAweDEwMDAwID0gMHgzNUZEQzAwCisgICAgICAgICAgICAgICAgICAg
ICAgICAtIDB4MzVGREMwMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjppbnZh
bGlkX2FyZ3VtZW50PigibWlzc2luZyBvciB3cm9uZyBsb3cgc3Vycm9nYXRlIik7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdHJpbmdfdCByZXN1bHQ7
CisKKyAgICAgICAgICAgIGlmIChjb2RlcG9pbnQgPCAweDgwKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIC8vIDEtYnl0ZSBjaGFyYWN0ZXJzOiAweHh4eHh4eCAoQVNDSUkpCisgICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxLCBzdGF0aWNfY2FzdDx0eXBlbmFtZSBzdHJpbmdf
dDo6dmFsdWVfdHlwZT4oY29kZXBvaW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIGlmIChjb2RlcG9pbnQgPD0gMHg3ZmYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgLy8gMi1ieXRlIGNoYXJhY3RlcnM6IDExMHh4eHh4IDEweHh4eHh4CisgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgxLCBzdGF0aWNfY2FzdDx0eXBlbmFtZSBzdHJpbmdfdDo6dmFsdWVf
dHlwZT4oMHhDMCB8ICgoY29kZXBvaW50ID4+IDYpICYgMHgxRikpKTsKKyAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKDEsIHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0cmluZ190Ojp2YWx1ZV90
eXBlPigweDgwIHwgKGNvZGVwb2ludCAmIDB4M0YpKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIGlmIChjb2RlcG9pbnQgPD0gMHhmZmZmKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIC8vIDMtYnl0ZSBjaGFyYWN0ZXJzOiAxMTEweHh4eCAxMHh4eHh4eCAxMHh4eHh4
eAorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSwgc3RhdGljX2Nhc3Q8dHlwZW5hbWUg
c3RyaW5nX3Q6OnZhbHVlX3R5cGU+KDB4RTAgfCAoKGNvZGVwb2ludCA+PiAxMikgJiAweDBGKSkp
OworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSwgc3RhdGljX2Nhc3Q8dHlwZW5hbWUg
c3RyaW5nX3Q6OnZhbHVlX3R5cGU+KDB4ODAgfCAoKGNvZGVwb2ludCA+PiA2KSAmIDB4M0YpKSk7
CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxLCBzdGF0aWNfY2FzdDx0eXBlbmFtZSBz
dHJpbmdfdDo6dmFsdWVfdHlwZT4oMHg4MCB8IChjb2RlcG9pbnQgJiAweDNGKSkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoY29kZXBvaW50IDw9IDB4MTBmZmZmKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIDQtYnl0ZSBjaGFyYWN0ZXJzOiAxMTExMHh4
eCAxMHh4eHh4eCAxMHh4eHh4eCAxMHh4eHh4eAorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoMSwgc3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3RyaW5nX3Q6OnZhbHVlX3R5cGU+KDB4RjAgfCAo
KGNvZGVwb2ludCA+PiAxOCkgJiAweDA3KSkpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoMSwgc3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3RyaW5nX3Q6OnZhbHVlX3R5cGU+KDB4ODAgfCAo
KGNvZGVwb2ludCA+PiAxMikgJiAweDNGKSkpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoMSwgc3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3RyaW5nX3Q6OnZhbHVlX3R5cGU+KDB4ODAgfCAo
KGNvZGVwb2ludCA+PiA2KSAmIDB4M0YpKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgxLCBzdGF0aWNfY2FzdDx0eXBlbmFtZSBzdHJpbmdfdDo6dmFsdWVfdHlwZT4oMHg4MCB8IChj
b2RlcG9pbnQgJiAweDNGKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6b3V0X29mX3JhbmdlPigiY29k
ZSBwb2ludHMgYWJvdmUgMHgxMEZGRkYgYXJlIGludmFsaWQiKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyByZXR1
cm4gbmFtZSBvZiB2YWx1ZXMgb2YgdHlwZSB0b2tlbl90eXBlIChvbmx5IHVzZWQgZm9yIGVycm9y
cykKKyAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIHRva2VuX3R5cGVfbmFtZShjb25zdCB0b2tl
bl90eXBlIHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAodCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBjYXNlIHRva2VuX3R5cGU6OnVuaW5pdGlhbGl6ZWQ6CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAiPHVuaW5pdGlhbGl6ZWQ+IjsKKyAgICAgICAgICAgICAg
ICBjYXNlIHRva2VuX3R5cGU6OmxpdGVyYWxfdHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICJ0cnVlIGxpdGVyYWwiOworICAgICAgICAgICAgICAgIGNhc2UgdG9rZW5fdHlwZTo6bGl0
ZXJhbF9mYWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmYWxzZSBsaXRlcmFsIjsK
KyAgICAgICAgICAgICAgICBjYXNlIHRva2VuX3R5cGU6OmxpdGVyYWxfbnVsbDoKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICJudWxsIGxpdGVyYWwiOworICAgICAgICAgICAgICAgIGNhc2Ug
dG9rZW5fdHlwZTo6dmFsdWVfc3RyaW5nOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN0
cmluZyBsaXRlcmFsIjsKKyAgICAgICAgICAgICAgICBjYXNlIHRva2VuX3R5cGU6OnZhbHVlX251
bWJlcjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJudW1iZXIgbGl0ZXJhbCI7CisgICAg
ICAgICAgICAgICAgY2FzZSB0b2tlbl90eXBlOjpiZWdpbl9hcnJheToKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICInWyciOworICAgICAgICAgICAgICAgIGNhc2UgdG9rZW5fdHlwZTo6YmVn
aW5fb2JqZWN0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIid7JyI7CisgICAgICAgICAg
ICAgICAgY2FzZSB0b2tlbl90eXBlOjplbmRfYXJyYXk6CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAiJ10nIjsKKyAgICAgICAgICAgICAgICBjYXNlIHRva2VuX3R5cGU6OmVuZF9vYmplY3Q6
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiJ30nIjsKKyAgICAgICAgICAgICAgICBjYXNl
IHRva2VuX3R5cGU6Om5hbWVfc2VwYXJhdG9yOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Iic6JyI7CisgICAgICAgICAgICAgICAgY2FzZSB0b2tlbl90eXBlOjp2YWx1ZV9zZXBhcmF0b3I6
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiJywnIjsKKyAgICAgICAgICAgICAgICBjYXNl
IHRva2VuX3R5cGU6OnBhcnNlX2Vycm9yOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIjxw
YXJzZSBlcnJvcj4iOworICAgICAgICAgICAgICAgIGNhc2UgdG9rZW5fdHlwZTo6ZW5kX29mX2lu
cHV0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gImVuZCBvZiBpbnB1dCI7CisgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IC8vIGNhdGNoIG5vbi1lbnVtIHZhbHVlcworICAgICAgICAgICAgICAgICAgICByZXR1cm4gInVu
a25vd24gdG9rZW4iOyAvLyBMQ09WX0VYQ0xfTElORQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAgICBUaGlzIGZ1bmN0aW9u
IGltcGxlbWVudHMgYSBzY2FubmVyIGZvciBKU09OLiBJdCBpcyBzcGVjaWZpZWQgdXNpbmcKKyAg
ICAgICAgcmVndWxhciBleHByZXNzaW9ucyB0aGF0IHRyeSB0byBmb2xsb3cgUkZDIDcxNTkgYXMg
Y2xvc2UgYXMgcG9zc2libGUuCisgICAgICAgIFRoZXNlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYXJl
IHRoZW4gdHJhbnNsYXRlZCBpbnRvIGEgbWluaW1pemVkCisgICAgICAgIGRldGVybWluaXN0aWMg
ZmluaXRlIGF1dG9tYXRvbiAoREZBKSBieSB0aGUgdG9vbAorICAgICAgICBbcmUyY10oaHR0cDov
L3JlMmMub3JnKS4gQXMgYSByZXN1bHQsIHRoZSB0cmFuc2xhdGVkIGNvZGUgZm9yIHRoaXMKKyAg
ICAgICAgZnVuY3Rpb24gY29uc2lzdHMgb2YgYSBsYXJnZSBibG9jayBvZiBjb2RlIHdpdGggYGdv
dG9gIGp1bXBzLgorCisgICAgICAgIEByZXR1cm4gdGhlIGNsYXNzIG9mIHRoZSBuZXh0IHRva2Vu
IHJlYWQgZnJvbSB0aGUgYnVmZmVyCisKKyAgICAgICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIHRo
ZSBsZW5ndGggb2YgdGhlIGlucHV0LlxuCisKKyAgICAgICAgUHJvcG9zaXRpb246IFRoZSBsb29w
IGJlbG93IHdpbGwgYWx3YXlzIHRlcm1pbmF0ZSBmb3IgZmluaXRlIGlucHV0LlxuCisKKyAgICAg
ICAgUHJvb2YgKGJ5IGNvbnRyYWRpY3Rpb24pOiBBc3N1bWUgYSBmaW5pdGUgaW5wdXQuIFRvIGxv
b3AgZm9yZXZlciwgdGhlCisgICAgICAgIGxvb3AgbXVzdCBuZXZlciBoaXQgY29kZSB3aXRoIGEg
YGJyZWFrYCBzdGF0ZW1lbnQuIFRoZSBvbmx5IGNvZGUKKyAgICAgICAgc25pcHBldHMgd2l0aG91
dCBhIGBicmVha2Agc3RhdGVtZW50IGFyZSB0aGUgY29udGludWUgc3RhdGVtZW50cyBmb3IKKyAg
ICAgICAgd2hpdGVzcGFjZSBhbmQgYnl0ZS1vcmRlci1tYXJrcy4gVG8gbG9vcCBmb3JldmVyLCB0
aGUgaW5wdXQgbXVzdCBiZSBhbgorICAgICAgICBpbmZpbml0ZSBzZXF1ZW5jZSBvZiB3aGl0ZXNw
YWNlIG9yIGJ5dGUtb3JkZXItbWFya3MuIFRoaXMgY29udHJhZGljdHMKKyAgICAgICAgdGhlIGFz
c3VtcHRpb24gb2YgZmluaXRlIGlucHV0LCBxLmUuZC4KKyAgICAgICAgKi8KKyAgICAgICAgdG9r
ZW5fdHlwZSBzY2FuKCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKHRydWUpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gcG9pbnRlciBmb3IgYmFja3RyYWNraW5nIGlu
Zm9ybWF0aW9uCisgICAgICAgICAgICAgICAgbV9tYXJrZXIgPSBudWxscHRyOworCisgICAgICAg
ICAgICAgICAgLy8gcmVtZW1iZXIgdGhlIGJlZ2luIG9mIHRoZSB0b2tlbgorICAgICAgICAgICAg
ICAgIG1fc3RhcnQgPSBtX2N1cnNvcjsKKyAgICAgICAgICAgICAgICBhc3NlcnQobV9zdGFydCAh
PSBudWxscHRyKTsKKworCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBs
ZXhlcl9jaGFyX3QgeXljaDsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHl5YWNj
ZXB0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg
eXlibVtdID0KKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgIDMyLCAgMzIsICAgMCwgICAwLCAgMzIsICAgMCwgICAwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgMTYwLCAxMjgsICAgMCwgMTI4LCAxMjgsIDEyOCwgMTI4
LCAxMjgsCisgICAgICAgICAgICAgICAgICAgICAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwg
MTI4LCAxMjgsIDEyOCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDE5MiwgMTkyLCAxOTIsIDE5
MiwgMTkyLCAxOTIsIDE5MiwgMTkyLAorICAgICAgICAgICAgICAgICAgICAgICAgMTkyLCAxOTIs
IDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsCisgICAgICAgICAgICAgICAgICAgICAgICAx
MjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LAorICAgICAgICAg
ICAgICAgICAgICAgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAxMjgsIDEyOCwgMTI4LCAxMjgsICAgMCwgMTI4LCAxMjgs
IDEyOCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAx
MjgsIDEyOCwgMTI4LAorICAgICAgICAgICAgICAgICAgICAgICAgMTI4LCAxMjgsIDEyOCwgMTI4
LCAxMjgsIDEyOCwgMTI4LCAxMjgsCisgICAgICAgICAgICAgICAgICAgICAgICAxMjgsIDEyOCwg
MTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDEy
OCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LAorICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLAorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
ICAgICAgICBpZiAoKG1fbGltaXQgLSBtX2N1cnNvcikgPCA1KQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxsX2xpbmVfYnVmZmVyKDUpOyAgICAvLyBM
Q09WX0VYQ0xfTElORQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IHl5Y2ggPSAqbV9jdXJzb3I7CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWJtWzAgKyB5eWNo
XSAmIDMyKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBn
b3RvIGJhc2ljX2pzb25fcGFyc2VyXzY7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1snKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLScpCisgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJyInKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHl5Y2ggPD0gMHgwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNl
cl8yOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICchJykKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNp
Y19qc29uX3BhcnNlcl80OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfOTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJysnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pz
b25fcGFyc2VyXzQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJywnKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
b3RvIGJhc2ljX2pzb25fcGFyc2VyXzEwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJz
ZXJfMTI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc5JykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICcvJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNl
cl80OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcwJykKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNp
Y19qc29uX3BhcnNlcl8xMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzE1Owor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnOicpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNf
anNvbl9wYXJzZXJfMTc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1onKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3Bh
cnNlcl8xOTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAnbicpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gJ2UnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ10nKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzIxOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNf
anNvbl9wYXJzZXJfNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2YnKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzIzOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdt
JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl80OworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFzaWNfanNvbl9wYXJzZXJfMjQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh5eWNoIDw9ICd6JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICd0JykKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290
byBiYXNpY19qc29uX3BhcnNlcl8yNTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2Vy
XzQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICd7JykKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBi
YXNpY19qc29uX3BhcnNlcl8yNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnfScpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMjg7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19q
c29uX3BhcnNlcl80OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorYmFzaWNfanNvbl9wYXJzZXJf
MjoKKyAgICAgICAgICAgICAgICAgICAgKyttX2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF90b2tlbl90eXBlID0gdG9rZW5fdHlwZTo6
ZW5kX29mX2lucHV0OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KK2Jhc2ljX2pzb25fcGFyc2VyXzQ6CisgICAgICAgICAgICAgICAgICAgICsr
bV9jdXJzb3I7CitiYXNpY19qc29uX3BhcnNlcl81OgorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3Rva2VuX3R5cGUgPSB0b2tlbl90eXBlOjpwYXJz
ZV9lcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9CitiYXNpY19qc29uX3BhcnNlcl82OgorICAgICAgICAgICAgICAgICAgICArK21fY3Vy
c29yOworICAgICAgICAgICAgICAgICAgICBpZiAobV9saW1pdCA8PSBtX2N1cnNvcikKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlsbF9saW5lX2J1ZmZl
cigxKTsgICAgLy8gTENPVl9FWENMX0xJTkUKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB5eWNoID0gKm1fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAo
eXlibVswICsgeXljaF0gJiAzMikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl82OworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgICAgICB9CitiYXNpY19qc29uX3BhcnNlcl85OgorICAgICAg
ICAgICAgICAgICAgICB5eWFjY2VwdCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHl5Y2ggPSAq
KG1fbWFya2VyID0gKyttX2N1cnNvcik7CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9
IDB4MUYpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFzaWNfanNvbl9wYXJzZXJfNTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBpZiAoeXljaCA8PSAweDdGKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMxOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9IDB4QzEpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNv
bl9wYXJzZXJfNTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBp
ZiAoeXljaCA8PSAweEY0KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMxOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNTsKK2Jhc2ljX2pz
b25fcGFyc2VyXzEwOgorICAgICAgICAgICAgICAgICAgICArK21fY3Vyc29yOworICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3Rva2VuX3R5cGUgPSB0
b2tlbl90eXBlOjp2YWx1ZV9zZXBhcmF0b3I7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorYmFzaWNfanNvbl9wYXJzZXJfMTI6CisgICAgICAg
ICAgICAgICAgICAgIHl5Y2ggPSAqKyttX2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPD0gJy8nKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzAnKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzEzOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc5JykK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNp
Y19qc29uX3BhcnNlcl8xNTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzU7CitiYXNpY19qc29uX3BhcnNlcl8xMzoKKyAg
ICAgICAgICAgICAgICAgICAgeXlhY2NlcHQgPSAxOworICAgICAgICAgICAgICAgICAgICB5eWNo
ID0gKihtX21hcmtlciA9ICsrbV9jdXJzb3IpOworICAgICAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAnRCcpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh5eWNoID09ICcuJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzQzOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPD0gJ0UnKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNDQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnZScpCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBi
YXNpY19qc29uX3BhcnNlcl80NDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorYmFzaWNfanNvbl9wYXJzZXJfMTQ6CisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfdG9rZW5fdHlwZSA9IHRva2VuX3R5cGU6
OnZhbHVlX251bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CitiYXNpY19qc29uX3BhcnNlcl8xNToKKyAgICAgICAgICAgICAgICAgICAg
eXlhY2NlcHQgPSAxOworICAgICAgICAgICAgICAgICAgICBtX21hcmtlciA9ICsrbV9jdXJzb3I7
CisgICAgICAgICAgICAgICAgICAgIGlmICgobV9saW1pdCAtIG1fY3Vyc29yKSA8IDMpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxfbGluZV9idWZm
ZXIoMyk7ICAgIC8vIExDT1ZfRVhDTF9MSU5FCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgeXljaCA9ICptX2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Ym1bMCArIHl5Y2hdICYgNjQpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMTU7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0QnKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnLicpCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBi
YXNpY19qc29uX3BhcnNlcl80MzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMTQ7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnRScpCisgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29u
X3BhcnNlcl80NDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoID09ICdlJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzQ0OworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19q
c29uX3BhcnNlcl8xNDsKKyAgICAgICAgICAgICAgICAgICAgfQorYmFzaWNfanNvbl9wYXJzZXJf
MTc6CisgICAgICAgICAgICAgICAgICAgICsrbV9jdXJzb3I7CisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfdG9rZW5fdHlwZSA9IHRva2VuX3R5cGU6
Om5hbWVfc2VwYXJhdG9yOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KK2Jhc2ljX2pzb25fcGFyc2VyXzE5OgorICAgICAgICAgICAgICAgICAg
ICArK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBsYXN0X3Rva2VuX3R5cGUgPSB0b2tlbl90eXBlOjpiZWdpbl9hcnJheTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CitiYXNpY19qc29u
X3BhcnNlcl8yMToKKyAgICAgICAgICAgICAgICAgICAgKyttX2N1cnNvcjsKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF90b2tlbl90eXBlID0gdG9r
ZW5fdHlwZTo6ZW5kX2FycmF5OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIH0KK2Jhc2ljX2pzb25fcGFyc2VyXzIzOgorICAgICAgICAgICAgICAg
ICAgICB5eWFjY2VwdCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHl5Y2ggPSAqKG1fbWFya2Vy
ID0gKyttX2N1cnNvcik7CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdhJykKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19q
c29uX3BhcnNlcl80NTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzU7CitiYXNpY19qc29uX3BhcnNlcl8yNDoKKyAgICAg
ICAgICAgICAgICAgICAgeXlhY2NlcHQgPSAwOworICAgICAgICAgICAgICAgICAgICB5eWNoID0g
KihtX21hcmtlciA9ICsrbV9jdXJzb3IpOworICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9
PSAndScpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFzaWNfanNvbl9wYXJzZXJfNDY7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl81OworYmFzaWNfanNvbl9wYXJzZXJf
MjU6CisgICAgICAgICAgICAgICAgICAgIHl5YWNjZXB0ID0gMDsKKyAgICAgICAgICAgICAgICAg
ICAgeXljaCA9ICoobV9tYXJrZXIgPSArK21fY3Vyc29yKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPT0gJ3InKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzQ3OworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNTsKK2Jhc2ljX2pz
b25fcGFyc2VyXzI2OgorICAgICAgICAgICAgICAgICAgICArK21fY3Vyc29yOworICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3Rva2VuX3R5cGUgPSB0
b2tlbl90eXBlOjpiZWdpbl9vYmplY3Q7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgfQorYmFzaWNfanNvbl9wYXJzZXJfMjg6CisgICAgICAgICAg
ICAgICAgICAgICsrbV9jdXJzb3I7CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxhc3RfdG9rZW5fdHlwZSA9IHRva2VuX3R5cGU6OmVuZF9vYmplY3Q7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorYmFz
aWNfanNvbl9wYXJzZXJfMzA6CisgICAgICAgICAgICAgICAgICAgICsrbV9jdXJzb3I7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChtX2xpbWl0IDw9IG1fY3Vyc29yKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxsX2xpbmVfYnVmZmVyKDEpOyAgICAv
LyBMQ09WX0VYQ0xfTElORQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIHl5Y2ggPSAqbV9jdXJzb3I7CitiYXNpY19qc29uX3BhcnNlcl8zMToKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHl5Ym1bMCArIHl5Y2hdICYgMTI4KQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMwOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9IDB4RTAp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNo
IDw9ICdcXCcpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gMHgxRikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJf
MzI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoIDw9ICciJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzM7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzU7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gMHhDMSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9IDB4REYpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv
IGJhc2ljX2pzb25fcGFyc2VyXzM2OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzM3OworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gMHhFRikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAweEVEKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNp
Y19qc29uX3BhcnNlcl8zOTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zODsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8
PSAweEYwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl80MDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0g
MHhGMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNDE7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9IDB4
RjQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzQyOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorYmFzaWNfanNvbl9wYXJzZXJfMzI6CisgICAgICAgICAgICAgICAgICAgIG1fY3Vyc29y
ID0gbV9tYXJrZXI7CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWFjY2VwdCA9PSAwKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pz
b25fcGFyc2VyXzU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv
IGJhc2ljX2pzb25fcGFyc2VyXzE0OworICAgICAgICAgICAgICAgICAgICB9CitiYXNpY19qc29u
X3BhcnNlcl8zMzoKKyAgICAgICAgICAgICAgICAgICAgKyttX2N1cnNvcjsKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF90b2tlbl90eXBlID0gdG9r
ZW5fdHlwZTo6dmFsdWVfc3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KK2Jhc2ljX2pzb25fcGFyc2VyXzM1OgorICAgICAgICAgICAg
ICAgICAgICArK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAobV9saW1pdCA8PSBt
X2N1cnNvcikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ZmlsbF9saW5lX2J1ZmZlcigxKTsgICAgLy8gTENPVl9FWENMX0xJTkUKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB5eWNoID0gKm1fY3Vyc29yOworICAgICAgICAg
ICAgICAgICAgICBpZiAoeXljaCA8PSAnZScpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnIicpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMwOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLicpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
b3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMwOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh5eWNoIDw9ICdcXCcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnWycpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNl
cl8zMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ2InKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv
IGJhc2ljX2pzb25fcGFyc2VyXzMwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJf
MzI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0g
J3EnKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICdmJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzA7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh5eWNoID09ICduJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzA7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ3MnKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2gg
PD0gJ3InKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMwOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9
ICd0JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoeXljaCA8PSAndScpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJf
NDg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KK2Jhc2ljX2pzb25fcGFyc2VyXzM2OgorICAgICAgICAgICAgICAgICAgICArK21f
Y3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAobV9saW1pdCA8PSBtX2N1cnNvcikKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlsbF9saW5lX2J1
ZmZlcigxKTsgICAgLy8gTENPVl9FWENMX0xJTkUKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB5eWNoID0gKm1fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBp
ZiAoeXljaCA8PSAweDdGKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9IDB4QkYpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzA7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19q
c29uX3BhcnNlcl8zMjsKK2Jhc2ljX2pzb25fcGFyc2VyXzM3OgorICAgICAgICAgICAgICAgICAg
ICArK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAobV9saW1pdCA8PSBtX2N1cnNv
cikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlsbF9s
aW5lX2J1ZmZlcigxKTsgICAgLy8gTENPVl9FWENMX0xJTkUKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB5eWNoID0gKm1fY3Vyc29yOworICAgICAgICAgICAgICAg
ICAgICBpZiAoeXljaCA8PSAweDlGKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9IDB4QkYpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJz
ZXJfMzY7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZ290byBi
YXNpY19qc29uX3BhcnNlcl8zMjsKK2Jhc2ljX2pzb25fcGFyc2VyXzM4OgorICAgICAgICAgICAg
ICAgICAgICArK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAobV9saW1pdCA8PSBt
X2N1cnNvcikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ZmlsbF9saW5lX2J1ZmZlcigxKTsgICAgLy8gTENPVl9FWENMX0xJTkUKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB5eWNoID0gKm1fY3Vyc29yOworICAgICAgICAg
ICAgICAgICAgICBpZiAoeXljaCA8PSAweDdGKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9IDB4QkYpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNv
bl9wYXJzZXJfMzY7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
Z290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKK2Jhc2ljX2pzb25fcGFyc2VyXzM5OgorICAgICAg
ICAgICAgICAgICAgICArK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAobV9saW1p
dCA8PSBtX2N1cnNvcikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZmlsbF9saW5lX2J1ZmZlcigxKTsgICAgLy8gTENPVl9FWENMX0xJTkUKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB5eWNoID0gKm1fY3Vyc29yOworICAg
ICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAweDdGKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9IDB4OUYp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFz
aWNfanNvbl9wYXJzZXJfMzY7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKK2Jhc2ljX2pzb25fcGFyc2VyXzQwOgor
ICAgICAgICAgICAgICAgICAgICArK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAo
bV9saW1pdCA8PSBtX2N1cnNvcikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZmlsbF9saW5lX2J1ZmZlcigxKTsgICAgLy8gTENPVl9FWENMX0xJTkUKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB5eWNoID0gKm1fY3Vyc29y
OworICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAweDhGKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMy
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9
IDB4QkYpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFzaWNfanNvbl9wYXJzZXJfMzg7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKK2Jhc2ljX2pzb25fcGFyc2Vy
XzQxOgorICAgICAgICAgICAgICAgICAgICArK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAg
ICBpZiAobV9saW1pdCA8PSBtX2N1cnNvcikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZmlsbF9saW5lX2J1ZmZlcigxKTsgICAgLy8gTENPVl9FWENMX0xJ
TkUKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB5eWNoID0gKm1f
Y3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAweDdGKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFy
c2VyXzMyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9IDB4QkYpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzg7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKK2Jhc2ljX2pzb25f
cGFyc2VyXzQyOgorICAgICAgICAgICAgICAgICAgICArK21fY3Vyc29yOworICAgICAgICAgICAg
ICAgICAgICBpZiAobV9saW1pdCA8PSBtX2N1cnNvcikKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZmlsbF9saW5lX2J1ZmZlcigxKTsgICAgLy8gTENPVl9F
WENMX0xJTkUKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB5eWNo
ID0gKm1fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAweDdGKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pz
b25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGlmICh5eWNoIDw9IDB4OEYpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzg7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKK2Jhc2lj
X2pzb25fcGFyc2VyXzQzOgorICAgICAgICAgICAgICAgICAgICB5eWNoID0gKisrbV9jdXJzb3I7
CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAn
OScpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g
YmFzaWNfanNvbl9wYXJzZXJfNDk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKK2Jhc2ljX2pzb25fcGFyc2VyXzQ0
OgorICAgICAgICAgICAgICAgICAgICB5eWNoID0gKisrbV9jdXJzb3I7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoIDw9ICcsJykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJysnKQorICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNTE7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv
IGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gJy0nKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNTE7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAn
LycpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc5JykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25f
cGFyc2VyXzUyOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAgICAgICAgICAgICAgfQor
YmFzaWNfanNvbl9wYXJzZXJfNDU6CisgICAgICAgICAgICAgICAgICAgIHl5Y2ggPSAqKyttX2N1
cnNvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ2wnKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2Vy
XzU0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFz
aWNfanNvbl9wYXJzZXJfMzI7CitiYXNpY19qc29uX3BhcnNlcl80NjoKKyAgICAgICAgICAgICAg
ICAgICAgeXljaCA9ICorK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9
PSAnbCcpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFzaWNfanNvbl9wYXJzZXJfNTU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKK2Jhc2ljX2pzb25fcGFyc2Vy
XzQ3OgorICAgICAgICAgICAgICAgICAgICB5eWNoID0gKisrbV9jdXJzb3I7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh5eWNoID09ICd1JykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl81NjsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMy
OworYmFzaWNfanNvbl9wYXJzZXJfNDg6CisgICAgICAgICAgICAgICAgICAgICsrbV9jdXJzb3I7
CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2xpbWl0IDw9IG1fY3Vyc29yKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxsX2xpbmVfYnVmZmVyKDEp
OyAgICAvLyBMQ09WX0VYQ0xfTElORQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHl5Y2ggPSAqbV9jdXJzb3I7CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNo
IDw9ICdAJykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPD0gJy8nKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnOScpCisg
ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290
byBiYXNpY19qc29uX3BhcnNlcl81NzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnRicpCisgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19q
c29uX3BhcnNlcl81NzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh5eWNoIDw9ICdgJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2gg
PD0gJ2YnKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNTc7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOwor
ICAgICAgICAgICAgICAgICAgICB9CitiYXNpY19qc29uX3BhcnNlcl80OToKKyAgICAgICAgICAg
ICAgICAgICAgeXlhY2NlcHQgPSAxOworICAgICAgICAgICAgICAgICAgICBtX21hcmtlciA9ICsr
bV9jdXJzb3I7CisgICAgICAgICAgICAgICAgICAgIGlmICgobV9saW1pdCAtIG1fY3Vyc29yKSA8
IDMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxf
bGluZV9idWZmZXIoMyk7ICAgIC8vIExDT1ZfRVhDTF9MSU5FCisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgeXljaCA9ICptX2N1cnNvcjsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gJ0QnKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8xNDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICc5JykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzQ5OworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8x
NDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdF
JykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzQ0OworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ2UnKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9w
YXJzZXJfNDQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzE0OworICAgICAgICAgICAgICAgICAgICB9Citi
YXNpY19qc29uX3BhcnNlcl81MToKKyAgICAgICAgICAgICAgICAgICAgeXljaCA9ICorK21fY3Vy
c29yOworICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJf
MzI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2gg
Pj0gJzonKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBn
b3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAgICAgICB9CitiYXNpY19q
c29uX3BhcnNlcl81MjoKKyAgICAgICAgICAgICAgICAgICAgKyttX2N1cnNvcjsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fbGltaXQgPD0gbV9jdXJzb3IpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxfbGluZV9idWZmZXIoMSk7ICAgIC8vIExD
T1ZfRVhDTF9MSU5FCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
eXljaCA9ICptX2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy8nKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2lj
X2pzb25fcGFyc2VyXzE0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICc5JykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl81MjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzE0OworYmFz
aWNfanNvbl9wYXJzZXJfNTQ6CisgICAgICAgICAgICAgICAgICAgIHl5Y2ggPSAqKyttX2N1cnNv
cjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ3MnKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzU4
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNf
anNvbl9wYXJzZXJfMzI7CitiYXNpY19qc29uX3BhcnNlcl81NToKKyAgICAgICAgICAgICAgICAg
ICAgeXljaCA9ICorK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAn
bCcpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g
YmFzaWNfanNvbl9wYXJzZXJfNTk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKK2Jhc2ljX2pzb25fcGFyc2VyXzU2
OgorICAgICAgICAgICAgICAgICAgICB5eWNoID0gKisrbV9jdXJzb3I7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoID09ICdlJykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl82MTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOwor
YmFzaWNfanNvbl9wYXJzZXJfNTc6CisgICAgICAgICAgICAgICAgICAgICsrbV9jdXJzb3I7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2xpbWl0IDw9IG1fY3Vyc29yKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxsX2xpbmVfYnVmZmVyKDEpOyAg
ICAvLyBMQ09WX0VYQ0xfTElORQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIHl5Y2ggPSAqbV9jdXJzb3I7CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9
ICdAJykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPD0gJy8nKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnOScpCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBi
YXNpY19qc29uX3BhcnNlcl82MzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnRicpCisgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29u
X3BhcnNlcl82MzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoIDw9ICdgJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0g
J2YnKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNjM7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAg
ICAgICAgICAgICAgICAgICB9CitiYXNpY19qc29uX3BhcnNlcl81ODoKKyAgICAgICAgICAgICAg
ICAgICAgeXljaCA9ICorK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9
PSAnZScpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFzaWNfanNvbl9wYXJzZXJfNjQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKK2Jhc2ljX2pzb25fcGFyc2Vy
XzU5OgorICAgICAgICAgICAgICAgICAgICArK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3Rva2VuX3R5cGUgPSB0b2tlbl90eXBl
OjpsaXRlcmFsX251bGw7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorYmFzaWNfanNvbl9wYXJzZXJfNjE6CisgICAgICAgICAgICAgICAgICAg
ICsrbV9jdXJzb3I7CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxhc3RfdG9rZW5fdHlwZSA9IHRva2VuX3R5cGU6OmxpdGVyYWxfdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CitiYXNpY19qc29u
X3BhcnNlcl82MzoKKyAgICAgICAgICAgICAgICAgICAgKyttX2N1cnNvcjsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fbGltaXQgPD0gbV9jdXJzb3IpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxfbGluZV9idWZmZXIoMSk7ICAgIC8vIExDT1Zf
RVhDTF9MSU5FCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeXlj
aCA9ICptX2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0AnKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAn
LycpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc5JykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25f
cGFyc2VyXzY2OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdGJykKKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzY2
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPD0gJ2AnKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnZicpCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBi
YXNpY19qc29uX3BhcnNlcl82NjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAgICAg
ICAgICAgIH0KK2Jhc2ljX2pzb25fcGFyc2VyXzY0OgorICAgICAgICAgICAgICAgICAgICArK21f
Y3Vyc29yOworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBs
YXN0X3Rva2VuX3R5cGUgPSB0b2tlbl90eXBlOjpsaXRlcmFsX2ZhbHNlOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KK2Jhc2ljX2pzb25fcGFy
c2VyXzY2OgorICAgICAgICAgICAgICAgICAgICArK21fY3Vyc29yOworICAgICAgICAgICAgICAg
ICAgICBpZiAobV9saW1pdCA8PSBtX2N1cnNvcikKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZmlsbF9saW5lX2J1ZmZlcigxKTsgICAgLy8gTENPVl9FWENM
X0xJTkUKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB5eWNoID0g
Km1fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnQCcpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykK
KyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
b3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzknKQorICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJz
ZXJfMzA7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0YnKQorICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzA7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAnYCcpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdmJykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2lj
X2pzb25fcGFyc2VyXzMwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBy
ZXR1cm4gbGFzdF90b2tlbl90eXBlOworICAgICAgICB9CisKKyAgICAgICAgLyohCisgICAgICAg
IEBicmllZiBhcHBlbmQgZGF0YSBmcm9tIHRoZSBzdHJlYW0gdG8gdGhlIGxpbmUgYnVmZmVyCisK
KyAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHNjYW4oKSBmdW5jdGlvbiB3
aGVuIHRoZSBlbmQgb2YgdGhlCisgICAgICAgIGJ1ZmZlciAoYG1fbGltaXRgKSBpcyByZWFjaGVk
IGFuZCB0aGUgYG1fY3Vyc29yYCBwb2ludGVyIGNhbm5vdCBiZQorICAgICAgICBpbmNyZW1lbnRl
ZCB3aXRob3V0IGxlYXZpbmcgdGhlIGxpbWl0cyBvZiB0aGUgbGluZSBidWZmZXIuIE5vdGUgcmUy
YworICAgICAgICBkZWNpZGVzIHdoZW4gdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLgorCisgICAgICAg
IElmIHRoZSBsZXhlciByZWFkcyBmcm9tIGNvbnRpZ3VvdXMgc3RvcmFnZSwgdGhlcmUgaXMgbm8g
dHJhaWxpbmcgbnVsbAorICAgICAgICBieXRlLiBUaGVyZWZvcmUsIHRoaXMgZnVuY3Rpb24gbXVz
dCBtYWtlIHN1cmUgdG8gYWRkIHRoZXNlIHBhZGRpbmcKKyAgICAgICAgbnVsbCBieXRlcy4KKwor
ICAgICAgICBJZiB0aGUgbGV4ZXIgcmVhZHMgZnJvbSBhbiBpbnB1dCBzdHJlYW0sIHRoaXMgZnVu
Y3Rpb24gcmVhZHMgdGhlIG5leHQKKyAgICAgICAgbGluZSBvZiB0aGUgaW5wdXQuCisKKyAgICAg
ICAgQHByZQorICAgICAgICAgICAgcCBwIHAgcCBwIHAgdSB1IHUgdSB1IHggLiAuIC4gLiAuIC4K
KyAgICAgICAgICAgIF4gICAgICAgICAgIF4gICAgICAgXiAgIF4KKyAgICAgICAgICAgIG1fY29u
dGVudCAgIG1fc3RhcnQgfCAgIG1fbGltaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9jdXJzb3IKKworICAgICAgICBAcG9zdAorICAgICAgICAgICAgdSB1IHUgdSB1IHggeCB4
IHggeCB4IHggLiAuIC4gLiAuIC4KKyAgICAgICAgICAgIF4gICAgICAgXiAgICAgICAgICAgICAg
IF4KKyAgICAgICAgICAgIHwgICAgICAgbV9jdXJzb3IgICAgICAgIG1fbGltaXQKKyAgICAgICAg
ICAgIG1fc3RhcnQKKyAgICAgICAgICAgIG1fY29udGVudAorICAgICAgICAqLworICAgICAgICB2
b2lkIGZpbGxfbGluZV9idWZmZXIoc2l6ZV90IG4gPSAwKQorICAgICAgICB7CisgICAgICAgICAg
ICAvLyBpZiBsaW5lIGJ1ZmZlciBpcyB1c2VkLCBtX2NvbnRlbnQgcG9pbnRzIHRvIGl0cyBkYXRh
CisgICAgICAgICAgICBhc3NlcnQobV9saW5lX2J1ZmZlci5lbXB0eSgpCisgICAgICAgICAgICAg
ICAgICAgb3IgbV9jb250ZW50ID09IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgbGV4ZXJfY2hhcl90
Kj4obV9saW5lX2J1ZmZlci5kYXRhKCkpKTsKKworICAgICAgICAgICAgLy8gaWYgbGluZSBidWZm
ZXIgaXMgdXNlZCwgbV9saW1pdCBpcyBzZXQgcGFzdCB0aGUgZW5kIG9mIGl0cyBkYXRhCisgICAg
ICAgICAgICBhc3NlcnQobV9saW5lX2J1ZmZlci5lbXB0eSgpCisgICAgICAgICAgICAgICAgICAg
b3IgbV9saW1pdCA9PSBtX2NvbnRlbnQgKyBtX2xpbmVfYnVmZmVyLnNpemUoKSk7CisKKyAgICAg
ICAgICAgIC8vIHBvaW50ZXIgcmVsYXRpb25zaGlwcworICAgICAgICAgICAgYXNzZXJ0KG1fY29u
dGVudCA8PSBtX3N0YXJ0KTsKKyAgICAgICAgICAgIGFzc2VydChtX3N0YXJ0IDw9IG1fY3Vyc29y
KTsKKyAgICAgICAgICAgIGFzc2VydChtX2N1cnNvciA8PSBtX2xpbWl0KTsKKyAgICAgICAgICAg
IGFzc2VydChtX21hcmtlciA9PSBudWxscHRyIG9yIG1fbWFya2VyICA8PSBtX2xpbWl0KTsKKwor
ICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHByb2Nlc3NlZCBjaGFyYWN0ZXJzIChwKQorICAgICAg
ICAgICAgY29uc3Qgc2l6ZV90IG51bV9wcm9jZXNzZWRfY2hhcnMgPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KG1fc3RhcnQgLSBtX2NvbnRlbnQpOworICAgICAgICAgICAgLy8gb2Zmc2V0IGZvciBtX21h
cmtlciB3cnQuIHRvIG1fc3RhcnQKKyAgICAgICAgICAgIGNvbnN0IGF1dG8gb2Zmc2V0X21hcmtl
ciA9IChtX21hcmtlciA9PSBudWxscHRyKSA/IDAgOiBtX21hcmtlciAtIG1fc3RhcnQ7CisgICAg
ICAgICAgICAvLyBudW1iZXIgb2YgdW5wcm9jZXNzZWQgY2hhcmFjdGVycyAodSkKKyAgICAgICAg
ICAgIGNvbnN0IGF1dG8gb2Zmc2V0X2N1cnNvciA9IG1fY3Vyc29yIC0gbV9zdGFydDsKKworICAg
ICAgICAgICAgLy8gbm8gc3RyZWFtIGlzIHVzZWQgb3IgZW5kIG9mIGZpbGUgaXMgcmVhY2hlZAor
ICAgICAgICAgICAgaWYgKG1fc3RyZWFtID09IG51bGxwdHIgb3IgbV9zdHJlYW0tPmVvZigpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIG1fc3RhcnQgbWF5IG9yIG1heSBub3Qg
YmUgcG9pbnRpbmcgaW50byBtX2xpbmVfYnVmZmVyIGF0CisgICAgICAgICAgICAgICAgLy8gdGhp
cyBwb2ludC4gV2UgdHJ1c3QgdGhlIHN0YW5kYW5kIGxpYnJhcnkgdG8gZG8gdGhlIHJpZ2h0Cisg
ICAgICAgICAgICAgICAgLy8gdGhpbmcuIFNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcS8y
ODE0MjAxMS8yNjYzNzgKKyAgICAgICAgICAgICAgICBtX2xpbmVfYnVmZmVyLmFzc2lnbihtX3N0
YXJ0LCBtX2xpbWl0KTsKKworICAgICAgICAgICAgICAgIC8vIGFwcGVuZCBuIGNoYXJhY3RlcnMg
dG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUgaXMgc3VmZmljaWVudAorICAgICAgICAgICAgICAgIC8v
IHNwYWNlIGJldHdlZW4gbV9jdXJzb3IgYW5kIG1fbGltaXQKKyAgICAgICAgICAgICAgICBtX2xp
bmVfYnVmZmVyLmFwcGVuZCgxLCAnXHgwMCcpOworICAgICAgICAgICAgICAgIGlmIChuID4gMCkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1fbGluZV9idWZmZXIuYXBw
ZW5kKG4gLSAxLCAnXHgwMScpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBkZWxldGUg
cHJvY2Vzc2VkIGNoYXJhY3RlcnMgZnJvbSBsaW5lIGJ1ZmZlcgorICAgICAgICAgICAgICAgIG1f
bGluZV9idWZmZXIuZXJhc2UoMCwgbnVtX3Byb2Nlc3NlZF9jaGFycyk7CisgICAgICAgICAgICAg
ICAgLy8gcmVhZCBuZXh0IGxpbmUgZnJvbSBpbnB1dCBzdHJlYW0KKyAgICAgICAgICAgICAgICBt
X2xpbmVfYnVmZmVyX3RtcC5jbGVhcigpOworICAgICAgICAgICAgICAgIHN0ZDo6Z2V0bGluZSgq
bV9zdHJlYW0sIG1fbGluZV9idWZmZXJfdG1wLCAnXG4nKTsKKworICAgICAgICAgICAgICAgIC8v
IGFkZCBsaW5lIHdpdGggbmV3bGluZSBzeW1ib2wgdG8gdGhlIGxpbmUgYnVmZmVyCisgICAgICAg
ICAgICAgICAgbV9saW5lX2J1ZmZlciArPSBtX2xpbmVfYnVmZmVyX3RtcDsKKyAgICAgICAgICAg
ICAgICBtX2xpbmVfYnVmZmVyLnB1c2hfYmFjaygnXG4nKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gc2V0IHBvaW50ZXJzCisgICAgICAgICAgICBtX2NvbnRlbnQgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IGxleGVyX2NoYXJfdCo+KG1fbGluZV9idWZmZXIuZGF0YSgpKTsKKyAg
ICAgICAgICAgIGFzc2VydChtX2NvbnRlbnQgIT0gbnVsbHB0cik7CisgICAgICAgICAgICBtX3N0
YXJ0ICA9IG1fY29udGVudDsKKyAgICAgICAgICAgIG1fbWFya2VyID0gbV9zdGFydCArIG9mZnNl
dF9tYXJrZXI7CisgICAgICAgICAgICBtX2N1cnNvciA9IG1fc3RhcnQgKyBvZmZzZXRfY3Vyc29y
OworICAgICAgICAgICAgbV9saW1pdCAgPSBtX3N0YXJ0ICsgbV9saW5lX2J1ZmZlci5zaXplKCk7
CisgICAgICAgIH0KKworICAgICAgICAvLy8gcmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBv
ZiBsYXN0IHJlYWQgdG9rZW4KKyAgICAgICAgc3RyaW5nX3QgZ2V0X3Rva2VuX3N0cmluZygpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydChtX3N0YXJ0ICE9IG51bGxwdHIpOwor
ICAgICAgICAgICAgcmV0dXJuIHN0cmluZ190KHJlaW50ZXJwcmV0X2Nhc3Q8dHlwZW5hbWUgc3Ry
aW5nX3Q6OmNvbnN0X3BvaW50ZXI+KG1fc3RhcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PHNpemVfdD4obV9jdXJzb3IgLSBtX3N0YXJ0KSk7CisgICAgICAgIH0K
KworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmIHJldHVybiBzdHJpbmcgdmFsdWUgZm9yIHN0
cmluZyB0b2tlbnMKKworICAgICAgICBUaGUgZnVuY3Rpb24gaXRlcmF0ZXMgdGhlIGNoYXJhY3Rl
cnMgYmV0d2VlbiB0aGUgb3BlbmluZyBhbmQgY2xvc2luZworICAgICAgICBxdW90ZXMgb2YgdGhl
IHN0cmluZyB2YWx1ZS4gVGhlIGNvbXBsZXRlIHN0cmluZyBpcyB0aGUgcmFuZ2UKKyAgICAgICAg
W21fc3RhcnQsbV9jdXJzb3IpLiBDb25zZXF1ZW50bHksIHdlIGl0ZXJhdGUgZnJvbSBtX3N0YXJ0
KzEgdG8KKyAgICAgICAgbV9jdXJzb3ItMS4KKworICAgICAgICBXZSBkaWZmZXJlbnRpYXRlIHR3
byBjYXNlczoKKworICAgICAgICAxLiBFc2NhcGVkIGNoYXJhY3RlcnMuIEluIHRoaXMgY2FzZSwg
YSBuZXcgY2hhcmFjdGVyIGlzIGNvbnN0cnVjdGVkCisgICAgICAgICAgIGFjY29yZGluZyB0byB0
aGUgbmF0dXJlIG9mIHRoZSBlc2NhcGUuIFNvbWUgZXNjYXBlcyBjcmVhdGUgbmV3CisgICAgICAg
ICAgIGNoYXJhY3RlcnMgKGUuZy4sIGAiXFxuImAgaXMgcmVwbGFjZWQgYnkgYCJcbiJgKSwgc29t
ZSBhcmUgY29waWVkCisgICAgICAgICAgIGFzIGlzIChlLmcuLCBgIlxcXFwiYCkuIEZ1cnRoZXJt
b3JlLCBVbmljb2RlIGVzY2FwZXMgb2YgdGhlIHNoYXBlCisgICAgICAgICAgIGAiXFx1eHh4eCJg
IG5lZWQgc3BlY2lhbCBjYXJlLiBJbiB0aGlzIGNhc2UsIHRvX3VuaWNvZGUgdGFrZXMgY2FyZQor
ICAgICAgICAgICBvZiB0aGUgY29uc3RydWN0aW9uIG9mIHRoZSB2YWx1ZXMuCisgICAgICAgIDIu
IFVuZXNjYXBlZCBjaGFyYWN0ZXJzIGFyZSBjb3BpZWQgYXMgaXMuCisKKyAgICAgICAgQHByZSBg
bV9jdXJzb3IgLSBtX3N0YXJ0ID49IDJgLCBtZWFuaW5nIHRoZSBsZW5ndGggb2YgdGhlIGxhc3Qg
dG9rZW4KKyAgICAgICAgaXMgYXQgbGVhc3QgMiBieXRlcyB3aGljaCBpcyB0cml2aWFsbHkgdHJ1
ZSBmb3IgYW55IHN0cmluZyAod2hpY2gKKyAgICAgICAgY29uc2lzdHMgb2YgYXQgbGVhc3QgdHdv
IHF1b3RlcykuCisKKyAgICAgICAgICAgICIgYzEgYzIgYzMgLi4uICIKKyAgICAgICAgICAgIF4g
ICAgICAgICAgICAgICAgXgorICAgICAgICAgICAgbV9zdGFydCAgICAgICAgICBtX2N1cnNvcgor
CisgICAgICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcu
XG4KKworICAgICAgICBMZW1tYTogVGhlIGxvb3AgYm9keSB3aWxsIGFsd2F5cyB0ZXJtaW5hdGUu
XG4KKworICAgICAgICBQcm9vZiAoYnkgY29udHJhZGljdGlvbik6IEFzc3VtZSB0aGUgbG9vcCBi
b2R5IGRvZXMgbm90IHRlcm1pbmF0ZS4gQXMKKyAgICAgICAgdGhlIGxvb3AgYm9keSBkb2VzIG5v
dCBjb250YWluIGFub3RoZXIgbG9vcCwgb25lIG9mIHRoZSBjYWxsZWQKKyAgICAgICAgZnVuY3Rp
b25zIG11c3QgbmV2ZXIgcmV0dXJuLiBUaGUgY2FsbGVkIGZ1bmN0aW9ucyBhcmUgYHN0ZDo6c3Ry
dG91bGAKKyAgICAgICAgYW5kIHRvX3VuaWNvZGUuIE5laXRoZXIgZnVuY3Rpb24gY2FuIGxvb3Ag
Zm9yZXZlciwgc28gdGhlIGxvb3AgYm9keQorICAgICAgICB3aWxsIG5ldmVyIGxvb3AgZm9yZXZl
ciB3aGljaCBjb250cmFkaWN0cyB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBsb29wCisgICAgICAg
IGJvZHkgZG9lcyBub3QgdGVybWluYXRlLCBxLmUuZC5cbgorCisgICAgICAgIExlbW1hOiBUaGUg
bG9vcCBjb25kaXRpb24gZm9yIHRoZSBmb3IgbG9vcCBpcyBldmVudHVhbGx5IGZhbHNlLlxuCisK
KyAgICAgICAgUHJvb2YgKGJ5IGNvbnRyYWRpY3Rpb24pOiBBc3N1bWUgdGhlIGxvb3AgZG9lcyBu
b3QgdGVybWluYXRlLiBEdWUgdG8KKyAgICAgICAgdGhlIGFib3ZlIGxlbW1hLCB0aGlzIGNhbiBv
bmx5IGJlIGR1ZSB0byBhIHRhdXRvbG9naWNhbCBsb29wCisgICAgICAgIGNvbmRpdGlvbjsgdGhh
dCBpcywgdGhlIGxvb3AgY29uZGl0aW9uIGkgPCBtX2N1cnNvciAtIDEgbXVzdCBhbHdheXMgYmUK
KyAgICAgICAgdHJ1ZS4gTGV0IHggYmUgdGhlIGNoYW5nZSBvZiBpIGZvciBhbnkgbG9vcCBpdGVy
YXRpb24uIFRoZW4KKyAgICAgICAgbV9zdGFydCArIDEgKyB4IDwgbV9jdXJzb3IgLSAxIG11c3Qg
aG9sZCB0byBsb29wIGluZGVmaW5pdGVseS4gVGhpcworICAgICAgICBjYW4gYmUgcmVwaHJhc2Vk
IHRvIG1fY3Vyc29yIC0gbV9zdGFydCAtIDIgPiB4LiBXaXRoIHRoZQorICAgICAgICBwcmVjb25k
aXRpb24sIHdlIHggPD0gMCwgbWVhbmluZyB0aGF0IHRoZSBsb29wIGNvbmRpdGlvbiBob2xkcwor
ICAgICAgICBpbmRlZmluaXRseSBpZiBpIGlzIGFsd2F5cyBkZWNyZWFzZWQuIEhvd2V2ZXIsIG9i
c2VydmUgdGhhdCB0aGUgdmFsdWUKKyAgICAgICAgb2YgaSBpcyBzdHJpY3RseSBpbmNyZWFzaW5n
IHdpdGggZWFjaCBpdGVyYXRpb24sIGFzIGl0IGlzIGluY3JlbWVudGVkCisgICAgICAgIGJ5IDEg
aW4gdGhlIGl0ZXJhdGlvbiBleHByZXNzaW9uIGFuZCBuZXZlciBkZWNyZW1lbnRlZCBpbnNpZGUg
dGhlIGxvb3AKKyAgICAgICAgYm9keS4gSGVuY2UsIHRoZSBsb29wIGNvbmRpdGlvbiB3aWxsIGV2
ZW50dWFsbHkgYmUgZmFsc2Ugd2hpY2gKKyAgICAgICAgY29udHJhZGljdHMgdGhlIGFzc3VtcHRp
b24gdGhhdCB0aGUgbG9vcCBjb25kaXRpb24gaXMgYSB0YXV0b2xvZ3ksCisgICAgICAgIHEuZS5k
LgorCisgICAgICAgIEByZXR1cm4gc3RyaW5nIHZhbHVlIG9mIGN1cnJlbnQgdG9rZW4gd2l0aG91
dCBvcGVuaW5nIGFuZCBjbG9zaW5nCisgICAgICAgIHF1b3RlcworICAgICAgICBAdGhyb3cgc3Rk
OjpvdXRfb2ZfcmFuZ2UgaWYgdG9fdW5pY29kZSBmYWlscworICAgICAgICAqLworICAgICAgICBz
dHJpbmdfdCBnZXRfc3RyaW5nKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgYXNzZXJ0
KG1fY3Vyc29yIC0gbV9zdGFydCA+PSAyKTsKKworICAgICAgICAgICAgc3RyaW5nX3QgcmVzdWx0
OworICAgICAgICAgICAgcmVzdWx0LnJlc2VydmUoc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2N1cnNv
ciAtIG1fc3RhcnQgLSAyKSk7CisKKyAgICAgICAgICAgIC8vIGl0ZXJhdGUgdGhlIHJlc3VsdCBi
ZXR3ZWVuIHRoZSBxdW90ZXMKKyAgICAgICAgICAgIGZvciAoY29uc3QgbGV4ZXJfY2hhcl90KiBp
ID0gbV9zdGFydCArIDE7IGkgPCBtX2N1cnNvciAtIDE7ICsraSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAvLyBmaW5kIG5leHQgZXNjYXBlIGNoYXJhY3RlcgorICAgICAgICAgICAg
ICAgIGF1dG8gZSA9IHN0ZDo6ZmluZChpLCBtX2N1cnNvciAtIDEsICdcXCcpOworICAgICAgICAg
ICAgICAgIGlmIChlICE9IGkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25sb2htYW5uL2pzb24vaXNzdWVzLzM2NSNpc3N1
ZWNvbW1lbnQtMjYyODc0NzA1CisgICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byBrID0gaTsg
ayA8IGU7IGsrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LnB1c2hfYmFjayhzdGF0aWNfY2FzdDx0eXBlbmFtZSBzdHJpbmdfdDo6dmFsdWVf
dHlwZT4oKmspKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBp
ID0gZSAtIDE7IC8vIC0xIGJlY2F1c2Ugb2YgKytpCisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8v
IHByb2Nlc3NpbmcgZXNjYXBlZCBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVh
ZCBuZXh0IGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICArK2k7CisKKyAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoICgqaSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdGhlIGRlZmF1bHQgZXNjYXBlcworICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAndCc6CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ICs9ICJcdCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlICdiJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgKz0gIlxiIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgJ2YnOgorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCArPSAiXGYiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnbic6CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ICs9ICJcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlICdyJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgKz0gIlxyIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgJ1xcJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgKz0gIlxcIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgJy8nOgorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCArPSAiLyI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
ICciJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgKz0gIlwiIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dW5pY29kZQorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndSc6CisgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IGNvZGUgeHh4
eCBmcm9tIHV4eHh4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb2RlcG9pbnQg
PSBzdGQ6OnN0cnRvdWwoc3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDx0eXBlbmFtZSBzdHJp
bmdfdDo6Y29uc3RfcG9pbnRlcj4oaSArIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQpLmNfc3RyKCksIG51bGxwdHIsIDE2KTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIGNvZGVwb2ludCBpcyBh
IGhpZ2ggc3Vycm9nYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGVwb2lu
dCA+PSAweEQ4MDAgYW5kIGNvZGVwb2ludCA8PSAweERCRkYpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUg
dGhlcmUgaXMgYSBzdWJzZXF1ZW50IHVuaWNvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKChpICsgNiA+PSBtX2xpbWl0KSBvciAqIChpICsgNSkgIT0gJ1xcJyBvciAqIChp
ICsgNikgIT0gJ3UnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6OmludmFsaWRfYXJndW1lbnQ+
KCJtaXNzaW5nIGxvdyBzdXJyb2dhdGUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCBjb2RlIHl5eXkg
ZnJvbSB1eHh4eFx1eXl5eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNv
ZGVwb2ludDIgPSBzdGQ6OnN0cnRvdWwoc3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDx0eXBl
bmFtZSBzdHJpbmdfdDo6Y29uc3RfcG9pbnRlcj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpICsgNyksIDQpLmNfc3RyKCks
IG51bGxwdHIsIDE2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9
IHRvX3VuaWNvZGUoY29kZXBvaW50LCBjb2RlcG9pbnQyKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gc2tpcCB0aGUgbmV4dCAxMCBjaGFyYWN0ZXJzICh4eHh4XHV5eXl5KQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IDEwOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb2Rl
cG9pbnQgPj0gMHhEQzAwIGFuZCBjb2RlcG9pbnQgPD0gMHhERkZGKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZm91
bmQgYSBsb25lIGxvdyBzdXJyb2dhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VGhyb3c8c3RkOjppbnZhbGlkX2FyZ3VtZW50PigibWlzc2luZyBoaWdoIHN1cnJvZ2F0ZSIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBhZGQgdW5pY29kZSBjaGFyYWN0ZXIocykKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHRvX3VuaWNvZGUoY29kZXBvaW50KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2tpcCB0aGUgbmV4dCBmb3VyIGNoYXJhY3Rl
cnMgKHh4eHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gNDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmIHBhcnNlIGZsb2F0
aW5nIHBvaW50IG51bWJlcgorCisgICAgICAgIFRoaXMgZnVuY3Rpb24gKGFuZCBpdHMgb3Zlcmxv
YWRzKSBzZXJ2ZXMgdG8gc2VsZWN0IHRoZSBtb3N0IGFwcHJvcHJhdGUKKyAgICAgICAgc3RhbmRh
cmQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHBhcnNpbmcgZnVuY3Rpb24gYmFzZWQgb24gdGhlIHR5
cGUKKyAgICAgICAgc3VwcGxpZWQgdmlhIHRoZSBmaXJzdCBwYXJhbWV0ZXIuICBTZXQgdGhpcyB0
byBAYQorICAgICAgICBzdGF0aWNfY2FzdDxudW1iZXJfZmxvYXRfdCo+KG51bGxwdHIpLgorCisg
ICAgICAgIEBwYXJhbVtpbl0gdHlwZSAgdGhlIEByZWYgbnVtYmVyX2Zsb2F0X3QgaW4gdXNlCisK
KyAgICAgICAgQHBhcmFtW2luLG91dF0gZW5kcHRyIHJlY2lldmVzIGEgcG9pbnRlciB0byB0aGUg
Zmlyc3QgY2hhcmFjdGVyIGFmdGVyCisgICAgICAgIHRoZSBudW1iZXIKKworICAgICAgICBAcmV0
dXJuIHRoZSBmbG9hdGluZyBwb2ludCBudW1iZXIKKyAgICAgICAgKi8KKyAgICAgICAgbG9uZyBk
b3VibGUgc3RyX3RvX2Zsb2F0X3QobG9uZyBkb3VibGUqIC8qIHR5cGUgKi8sIGNoYXIqKiBlbmRw
dHIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OnN0cnRvbGQocmVp
bnRlcnByZXRfY2FzdDx0eXBlbmFtZSBzdHJpbmdfdDo6Y29uc3RfcG9pbnRlcj4obV9zdGFydCks
IGVuZHB0cik7CisgICAgICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmIHBhcnNl
IGZsb2F0aW5nIHBvaW50IG51bWJlcgorCisgICAgICAgIFRoaXMgZnVuY3Rpb24gKGFuZCBpdHMg
b3ZlcmxvYWRzKSBzZXJ2ZXMgdG8gc2VsZWN0IHRoZSBtb3N0IGFwcHJvcHJhdGUKKyAgICAgICAg
c3RhbmRhcmQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHBhcnNpbmcgZnVuY3Rpb24gYmFzZWQgb24g
dGhlIHR5cGUKKyAgICAgICAgc3VwcGxpZWQgdmlhIHRoZSBmaXJzdCBwYXJhbWV0ZXIuICBTZXQg
dGhpcyB0byBAYQorICAgICAgICBzdGF0aWNfY2FzdDxudW1iZXJfZmxvYXRfdCo+KG51bGxwdHIp
LgorCisgICAgICAgIEBwYXJhbVtpbl0gdHlwZSAgdGhlIEByZWYgbnVtYmVyX2Zsb2F0X3QgaW4g
dXNlCisKKyAgICAgICAgQHBhcmFtW2luLG91dF0gZW5kcHRyICByZWNpZXZlcyBhIHBvaW50ZXIg
dG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlcgorICAgICAgICB0aGUgbnVtYmVyCisKKyAgICAg
ICAgQHJldHVybiB0aGUgZmxvYXRpbmcgcG9pbnQgbnVtYmVyCisgICAgICAgICovCisgICAgICAg
IGRvdWJsZSBzdHJfdG9fZmxvYXRfdChkb3VibGUqIC8qIHR5cGUgKi8sIGNoYXIqKiBlbmRwdHIp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OnN0cnRvZChyZWludGVy
cHJldF9jYXN0PHR5cGVuYW1lIHN0cmluZ190Ojpjb25zdF9wb2ludGVyPihtX3N0YXJ0KSwgZW5k
cHRyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAgICBAYnJpZWYgcGFyc2UgZmxv
YXRpbmcgcG9pbnQgbnVtYmVyCisKKyAgICAgICAgVGhpcyBmdW5jdGlvbiAoYW5kIGl0cyBvdmVy
bG9hZHMpIHNlcnZlcyB0byBzZWxlY3QgdGhlIG1vc3QgYXBwcm9wcmF0ZQorICAgICAgICBzdGFu
ZGFyZCBmbG9hdGluZyBwb2ludCBudW1iZXIgcGFyc2luZyBmdW5jdGlvbiBiYXNlZCBvbiB0aGUg
dHlwZQorICAgICAgICBzdXBwbGllZCB2aWEgdGhlIGZpcnN0IHBhcmFtZXRlci4gIFNldCB0aGlz
IHRvIEBhCisgICAgICAgIHN0YXRpY19jYXN0PG51bWJlcl9mbG9hdF90Kj4obnVsbHB0cikuCisK
KyAgICAgICAgQHBhcmFtW2luXSB0eXBlICB0aGUgQHJlZiBudW1iZXJfZmxvYXRfdCBpbiB1c2UK
KworICAgICAgICBAcGFyYW1baW4sb3V0XSBlbmRwdHIgIHJlY2lldmVzIGEgcG9pbnRlciB0byB0
aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyCisgICAgICAgIHRoZSBudW1iZXIKKworICAgICAgICBA
cmV0dXJuIHRoZSBmbG9hdGluZyBwb2ludCBudW1iZXIKKyAgICAgICAgKi8KKyAgICAgICAgZmxv
YXQgc3RyX3RvX2Zsb2F0X3QoZmxvYXQqIC8qIHR5cGUgKi8sIGNoYXIqKiBlbmRwdHIpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OnN0cnRvZihyZWludGVycHJldF9j
YXN0PHR5cGVuYW1lIHN0cmluZ190Ojpjb25zdF9wb2ludGVyPihtX3N0YXJ0KSwgZW5kcHRyKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAgICBAYnJpZWYgcmV0dXJuIG51bWJlciB2
YWx1ZSBmb3IgbnVtYmVyIHRva2VucworCisgICAgICAgIFRoaXMgZnVuY3Rpb24gdHJhbnNsYXRl
cyB0aGUgbGFzdCB0b2tlbiBpbnRvIHRoZSBtb3N0IGFwcHJvcHJpYXRlCisgICAgICAgIG51bWJl
ciB0eXBlIChlaXRoZXIgaW50ZWdlciwgdW5zaWduZWQgaW50ZWdlciBvciBmbG9hdGluZyBwb2lu
dCksCisgICAgICAgIHdoaWNoIGlzIHBhc3NlZCBiYWNrIHRvIHRoZSBjYWxsZXIgdmlhIHRoZSBy
ZXN1bHQgcGFyYW1ldGVyLgorCisgICAgICAgIFRoaXMgZnVuY3Rpb24gcGFyc2VzIHRoZSBpbnRl
Z2VyIGNvbXBvbmVudCB1cCB0byB0aGUgcmFkaXggcG9pbnQgb3IKKyAgICAgICAgZXhwb25lbnQg
d2hpbGUgY29sbGVjdGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgJ2Zsb2F0aW5nIHBvaW50Cisg
ICAgICAgIHJlcHJlc2VudGF0aW9uJywgd2hpY2ggaXQgc3RvcmVzIGluIHRoZSByZXN1bHQgcGFy
YW1ldGVyLiBJZiB0aGVyZSBpcworICAgICAgICBubyByYWRpeCBwb2ludCBvciBleHBvbmVudCwg
YW5kIHRoZSBudW1iZXIgY2FuIGZpdCBpbnRvIGEgQHJlZgorICAgICAgICBudW1iZXJfaW50ZWdl
cl90IG9yIEByZWYgbnVtYmVyX3Vuc2lnbmVkX3QgdGhlbiBpdCBzZXRzIHRoZSByZXN1bHQKKyAg
ICAgICAgcGFyYW1ldGVyIGFjY29yZGluZ2x5LgorCisgICAgICAgIElmIHRoZSBudW1iZXIgaXMg
YSBmbG9hdGluZyBwb2ludCBudW1iZXIgdGhlIG51bWJlciBpcyB0aGVuIHBhcnNlZAorICAgICAg
ICB1c2luZyBAYSBzdGQ6c3RydG9kIChvciBAYSBzdGQ6c3RydG9mIG9yIEBhIHN0ZDo6c3RydG9s
ZCkuCisKKyAgICAgICAgQHBhcmFtW291dF0gcmVzdWx0ICBAcmVmIGJhc2ljX2pzb24gb2JqZWN0
IHRvIHJlY2VpdmUgdGhlIG51bWJlciwgb3IKKyAgICAgICAgTkFOIGlmIHRoZSBjb252ZXJzaW9u
IHJlYWQgcGFzdCB0aGUgY3VycmVudCB0b2tlbi4gVGhlIGxhdHRlciBjYXNlCisgICAgICAgIG5l
ZWRzIHRvIGJlIHRyZWF0ZWQgYnkgdGhlIGNhbGxlciBmdW5jdGlvbi4KKyAgICAgICAgKi8KKyAg
ICAgICAgdm9pZCBnZXRfbnVtYmVyKGJhc2ljX2pzb24mIHJlc3VsdCkgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgYXNzZXJ0KG1fc3RhcnQgIT0gbnVsbHB0cik7CisKKyAgICAgICAgICAg
IGNvbnN0IGxleGVyOjpsZXhlcl9jaGFyX3QqIGN1cnB0ciA9IG1fc3RhcnQ7CisKKyAgICAgICAg
ICAgIC8vIGFjY3VtdWxhdGUgdGhlIGludGVnZXIgY29udmVyc2lvbiByZXN1bHQgKHVuc2lnbmVk
IGZvciBub3cpCisgICAgICAgICAgICBudW1iZXJfdW5zaWduZWRfdCB2YWx1ZSA9IDA7CisKKyAg
ICAgICAgICAgIC8vIG1heGltdW0gYWJzb2x1dGUgdmFsdWUgb2YgdGhlIHJlbGV2YW50IGludGVn
ZXIgdHlwZQorICAgICAgICAgICAgbnVtYmVyX3Vuc2lnbmVkX3QgbWF4OworCisgICAgICAgICAg
ICAvLyB0ZW1wb3JhcmlseSBzdG9yZSB0aGUgdHlwZSB0byBhdm9pZCB1bmVjZXNzYXJ5IGJpdGZp
ZWxkIGFjY2VzcworICAgICAgICAgICAgdmFsdWVfdCB0eXBlOworCisgICAgICAgICAgICAvLyBs
b29rIGZvciBzaWduCisgICAgICAgICAgICBpZiAoKmN1cnB0ciA9PSAnLScpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgdHlwZSA9IHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyOworICAg
ICAgICAgICAgICAgIG1heCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pigoc3RkOjpudW1lcmljX2xp
bWl0czxudW1iZXJfaW50ZWdlcl90Pjo6bWF4KSgpKSArIDE7CisgICAgICAgICAgICAgICAgY3Vy
cHRyKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgdHlwZSA9IHZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZDsKKyAgICAgICAg
ICAgICAgICBtYXggPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oKHN0ZDo6bnVtZXJpY19saW1pdHM8
bnVtYmVyX3Vuc2lnbmVkX3Q+OjptYXgpKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBjb3VudCB0aGUgc2lnbmlmaWNhbnQgZmlndXJlcworICAgICAgICAgICAgZm9yICg7IGN1
cnB0ciA8IG1fY3Vyc29yOyBjdXJwdHIrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAvLyBxdWlja2x5IHNraXAgdGVzdHMgaWYgYSBkaWdpdAorICAgICAgICAgICAgICAgIGlmICgq
Y3VycHRyIDwgJzAnIHx8ICpjdXJwdHIgPiAnOScpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoKmN1cnB0ciA9PSAnLicpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IGNvdW50ICcuJyBidXQgY2hhbmdlIHRv
IGZsb2F0CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gdmFsdWVfdDo6bnVtYmVyX2Zs
b2F0OworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gYXNzdW1lIGV4cG9uZW50IChpZiBub3QgdGhl
biB3aWxsIGZhaWwgcGFyc2UpOiBjaGFuZ2UgdG8KKyAgICAgICAgICAgICAgICAgICAgLy8gZmxv
YXQsIHN0b3AgY291bnRpbmcgYW5kIHJlY29yZCBleHBvbmVudCBkZXRhaWxzCisgICAgICAgICAg
ICAgICAgICAgIHR5cGUgPSB2YWx1ZV90OjpudW1iZXJfZmxvYXQ7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIHNraXAg
aWYgZGVmaW5pdGVseSBub3QgYW4gaW50ZWdlcgorICAgICAgICAgICAgICAgIGlmICh0eXBlICE9
IHZhbHVlX3Q6Om51bWJlcl9mbG9hdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIG11bHRpcGx5IGxhc3QgdmFsdWUgYnkgdGVuIGFuZCBhZGQgdGhlIG5ldyBkaWdp
dAorICAgICAgICAgICAgICAgICAgICBhdXRvIHRlbXAgPSB2YWx1ZSAqIDEwICsgKmN1cnB0ciAt
ICcwJzsKKworICAgICAgICAgICAgICAgICAgICAvLyB0ZXN0IGZvciBvdmVyZmxvdworICAgICAg
ICAgICAgICAgICAgICBpZiAodGVtcCA8IHZhbHVlIHx8IHRlbXAgPiBtYXgpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG92ZXJmbG93CisgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlID0gdmFsdWVfdDo6bnVtYmVyX2Zsb2F0OworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gb3ZlcmZsb3cgLSBzYXZlIGl0Cisg
ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRlbXA7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHNh
dmUgdGhlIHZhbHVlIChpZiBub3QgYSBmbG9hdCkKKyAgICAgICAgICAgIGlmICh0eXBlID09IHZh
bHVlX3Q6Om51bWJlcl91bnNpZ25lZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQubV92YWx1ZS5udW1iZXJfdW5zaWduZWQgPSB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gdmFsdWVfdDo6bnVtYmVyX2ludGVnZXIpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVzdWx0Lm1fdmFsdWUubnVtYmVyX2ludGVnZXIg
PSAtc3RhdGljX2Nhc3Q8bnVtYmVyX2ludGVnZXJfdD4odmFsdWUpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIHBhcnNl
IHdpdGggc3RydG9kCisgICAgICAgICAgICAgICAgcmVzdWx0Lm1fdmFsdWUubnVtYmVyX2Zsb2F0
ID0gc3RyX3RvX2Zsb2F0X3Qoc3RhdGljX2Nhc3Q8bnVtYmVyX2Zsb2F0X3QqPihudWxscHRyKSwg
TlVMTCk7CisKKyAgICAgICAgICAgICAgICAvLyByZXBsYWNlIGluZmluaXR5IGFuZCBOQU4gYnkg
bnVsbAorICAgICAgICAgICAgICAgIGlmIChub3Qgc3RkOjppc2Zpbml0ZShyZXN1bHQubV92YWx1
ZS5udW1iZXJfZmxvYXQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
dHlwZSA9IHZhbHVlX3Q6Om51bGw7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tX3ZhbHVl
ID0gYmFzaWNfanNvbjo6anNvbl92YWx1ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gc2F2ZSB0aGUgdHlwZQorICAgICAgICAgICAgcmVzdWx0
Lm1fdHlwZSA9IHR5cGU7CisgICAgICAgIH0KKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgLy8v
IG9wdGlvbmFsIGlucHV0IHN0cmVhbQorICAgICAgICBzdGQ6OmlzdHJlYW0qIG1fc3RyZWFtID0g
bnVsbHB0cjsKKyAgICAgICAgLy8vIGxpbmUgYnVmZmVyIGJ1ZmZlciBmb3IgbV9zdHJlYW0KKyAg
ICAgICAgc3RyaW5nX3QgbV9saW5lX2J1ZmZlciB7fTsKKyAgICAgICAgLy8vIHVzZWQgZm9yIGZp
bGxpbmcgbV9saW5lX2J1ZmZlcgorICAgICAgICBzdHJpbmdfdCBtX2xpbmVfYnVmZmVyX3RtcCB7
fTsKKyAgICAgICAgLy8vIHRoZSBidWZmZXIgcG9pbnRlcgorICAgICAgICBjb25zdCBsZXhlcl9j
aGFyX3QqIG1fY29udGVudCA9IG51bGxwdHI7CisgICAgICAgIC8vLyBwb2ludGVyIHRvIHRoZSBi
ZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgc3ltYm9sCisgICAgICAgIGNvbnN0IGxleGVyX2NoYXJf
dCogbV9zdGFydCA9IG51bGxwdHI7CisgICAgICAgIC8vLyBwb2ludGVyIGZvciBiYWNrdHJhY2tp
bmcgaW5mb3JtYXRpb24KKyAgICAgICAgY29uc3QgbGV4ZXJfY2hhcl90KiBtX21hcmtlciA9IG51
bGxwdHI7CisgICAgICAgIC8vLyBwb2ludGVyIHRvIHRoZSBjdXJyZW50IHN5bWJvbAorICAgICAg
ICBjb25zdCBsZXhlcl9jaGFyX3QqIG1fY3Vyc29yID0gbnVsbHB0cjsKKyAgICAgICAgLy8vIHBv
aW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyCisgICAgICAgIGNvbnN0IGxleGVyX2NoYXJf
dCogbV9saW1pdCA9IG51bGxwdHI7CisgICAgICAgIC8vLyB0aGUgbGFzdCB0b2tlbiB0eXBlCisg
ICAgICAgIHRva2VuX3R5cGUgbGFzdF90b2tlbl90eXBlID0gdG9rZW5fdHlwZTo6ZW5kX29mX2lu
cHV0OworICAgIH07CisKKyAgICAvKiEKKyAgICBAYnJpZWYgc3ludGF4IGFuYWx5c2lzCisKKyAg
ICBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSByZWN1cnNpdmUgZGVjZW50IHBhcnNlci4KKyAgICAq
LworICAgIGNsYXNzIHBhcnNlcgorICAgIHsKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgLy8vIGEg
cGFyc2VyIHJlYWRpbmcgZnJvbSBhIHN0cmluZyBsaXRlcmFsCisgICAgICAgIHBhcnNlcihjb25z
dCBjaGFyKiBidWZmLCBjb25zdCBwYXJzZXJfY2FsbGJhY2tfdCBjYiA9IG51bGxwdHIpCisgICAg
ICAgICAgICA6IGNhbGxiYWNrKGNiKSwKKyAgICAgICAgICAgICAgbV9sZXhlcihyZWludGVycHJl
dF9jYXN0PGNvbnN0IHR5cGVuYW1lIGxleGVyOjpsZXhlcl9jaGFyX3QqPihidWZmKSwgc3RkOjpz
dHJsZW4oYnVmZikpCisgICAgICAgIHt9CisKKyAgICAgICAgLy8vIGEgcGFyc2VyIHJlYWRpbmcg
ZnJvbSBhbiBpbnB1dCBzdHJlYW0KKyAgICAgICAgcGFyc2VyKHN0ZDo6aXN0cmVhbSYgaXMsIGNv
bnN0IHBhcnNlcl9jYWxsYmFja190IGNiID0gbnVsbHB0cikKKyAgICAgICAgICAgIDogY2FsbGJh
Y2soY2IpLCBtX2xleGVyKGlzKQorICAgICAgICB7fQorCisgICAgICAgIC8vLyBhIHBhcnNlciBy
ZWFkaW5nIGZyb20gYW4gaXRlcmF0b3IgcmFuZ2Ugd2l0aCBjb250aWd1b3VzIHN0b3JhZ2UKKyAg
ICAgICAgdGVtcGxhdGU8Y2xhc3MgSXRlcmF0b3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjwKKyAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6Oml0ZXJh
dG9yX3RyYWl0czxJdGVyYXRvclR5cGU+OjppdGVyYXRvcl9jYXRlZ29yeSwgc3RkOjpyYW5kb21f
YWNjZXNzX2l0ZXJhdG9yX3RhZz46OnZhbHVlCisgICAgICAgICAgICAgICAgICAgICAsIGludD46
OnR5cGUKKyAgICAgICAgICAgICAgICAgPSAwPgorICAgICAgICBwYXJzZXIoSXRlcmF0b3JUeXBl
IGZpcnN0LCBJdGVyYXRvclR5cGUgbGFzdCwgY29uc3QgcGFyc2VyX2NhbGxiYWNrX3QgY2IgPSBu
dWxscHRyKQorICAgICAgICAgICAgOiBjYWxsYmFjayhjYiksCisgICAgICAgICAgICAgIG1fbGV4
ZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB0eXBlbmFtZSBsZXhlcjo6bGV4ZXJfY2hhcl90Kj4o
JigqZmlyc3QpKSwKKyAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0
ZDo6ZGlzdGFuY2UoZmlyc3QsIGxhc3QpKSkKKyAgICAgICAge30KKworICAgICAgICAvLy8gcHVi
bGljIHBhcnNlciBpbnRlcmZhY2UKKyAgICAgICAgYmFzaWNfanNvbiBwYXJzZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIC8vIHJlYWQgZmlyc3QgdG9rZW4KKyAgICAgICAgICAgIGdldF90b2tl
bigpOworCisgICAgICAgICAgICBiYXNpY19qc29uIHJlc3VsdCA9IHBhcnNlX2ludGVybmFsKHRy
dWUpOworICAgICAgICAgICAgcmVzdWx0LmFzc2VydF9pbnZhcmlhbnQoKTsKKworICAgICAgICAg
ICAgZXhwZWN0KGxleGVyOjp0b2tlbl90eXBlOjplbmRfb2ZfaW5wdXQpOworCisgICAgICAgICAg
ICAvLyByZXR1cm4gcGFyc2VyIHJlc3VsdCBhbmQgcmVwbGFjZSBpdCB3aXRoIG51bGwgaW4gY2Fz
ZSB0aGUKKyAgICAgICAgICAgIC8vIHRvcC1sZXZlbCB2YWx1ZSB3YXMgZGlzY2FyZGVkIGJ5IHRo
ZSBjYWxsYmFjayBmdW5jdGlvbgorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5pc19kaXNjYXJk
ZWQoKSA/IGJhc2ljX2pzb24oKSA6IHN0ZDo6bW92ZShyZXN1bHQpOworICAgICAgICB9CisKKyAg
ICAgIHByaXZhdGU6CisgICAgICAgIC8vLyB0aGUgYWN0dWFsIHBhcnNlcgorICAgICAgICBiYXNp
Y19qc29uIHBhcnNlX2ludGVybmFsKGJvb2wga2VlcCkKKyAgICAgICAgeworICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBiYXNpY19qc29uKHZhbHVlX3Q6OmRpc2NhcmRlZCk7CisKKyAgICAgICAg
ICAgIHN3aXRjaCAobGFzdF90b2tlbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBj
YXNlIGxleGVyOjp0b2tlbl90eXBlOjpiZWdpbl9vYmplY3Q6CisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoa2VlcCBhbmQgKG5vdCBjYWxsYmFjaworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9yICgoa2VlcCA9IGNhbGxiYWNrKGRlcHRoKyssIHBh
cnNlX2V2ZW50X3Q6Om9iamVjdF9zdGFydCwgcmVzdWx0KSkgIT0gMCkpKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBleHBsaWNpdGx5IHNldCByZXN1
bHQgdG8gb2JqZWN0IHRvIGNvcGUgd2l0aCB7fQorICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0Lm1fdHlwZSA9IHZhbHVlX3Q6Om9iamVjdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5tX3ZhbHVlID0gdmFsdWVfdDo6b2JqZWN0OworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gcmVhZCBuZXh0IHRva2VuCisgICAgICAgICAgICAgICAg
ICAgIGdldF90b2tlbigpOworCisgICAgICAgICAgICAgICAgICAgIC8vIGNsb3NpbmcgfSAtPiB3
ZSBhcmUgZG9uZQorICAgICAgICAgICAgICAgICAgICBpZiAobGFzdF90b2tlbiA9PSBsZXhlcjo6
dG9rZW5fdHlwZTo6ZW5kX29iamVjdCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZ2V0X3Rva2VuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
a2VlcCBhbmQgY2FsbGJhY2sgYW5kIG5vdCBjYWxsYmFjaygtLWRlcHRoLCBwYXJzZV9ldmVudF90
OjpvYmplY3RfZW5kLCByZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGJhc2ljX2pzb24odmFsdWVfdDo6ZGlzY2Fy
ZGVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAvLyBubyBjb21tYSBpcyBleHBlY3RlZCBoZXJlCisgICAgICAgICAgICAgICAgICAgIHVu
ZXhwZWN0KGxleGVyOjp0b2tlbl90eXBlOjp2YWx1ZV9zZXBhcmF0b3IpOworCisgICAgICAgICAg
ICAgICAgICAgIC8vIG90aGVyd2lzZTogcGFyc2Uga2V5LXZhbHVlIHBhaXJzCisgICAgICAgICAg
ICAgICAgICAgIGRvCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHVnbHksIGJ1dCBjb3VsZCBiZSBmaXhlZCB3aXRoIGxvb3AgcmVvcmdhbml6YXRpb24K
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0X3Rva2VuID09IGxleGVyOjp0b2tlbl90
eXBlOjp2YWx1ZV9zZXBhcmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2V0X3Rva2VuKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0b3JlIGtleQorICAgICAgICAgICAg
ICAgICAgICAgICAgZXhwZWN0KGxleGVyOjp0b2tlbl90eXBlOjp2YWx1ZV9zdHJpbmcpOworICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0byBrZXkgPSBtX2xleGVyLmdldF9zdHJpbmco
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBrZWVwX3RhZyA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGtlZXApCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzaWNf
anNvbiBrKGtleSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlZXBfdGFnID0g
Y2FsbGJhY2soZGVwdGgsIHBhcnNlX2V2ZW50X3Q6OmtleSwgayk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtl
ZXBfdGFnID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlIHNlcGFy
YXRvciAoOikKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldF90b2tlbigpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZXhwZWN0KGxleGVyOjp0b2tlbl90eXBlOjpuYW1lX3NlcGFyYXRvcik7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlIGFuZCBhZGQgdmFsdWUKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGdldF90b2tlbigpOworICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byB2YWx1ZSA9IHBhcnNlX2ludGVybmFsKGtlZXApOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGtlZXAgYW5kIGtlZXBfdGFnIGFuZCBub3QgdmFsdWUuaXNfZGlzY2FyZGVkKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0W2tleV0gPSBzdGQ6Om1vdmUodmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChsYXN0X3Rv
a2VuID09IGxleGVyOjp0b2tlbl90eXBlOjp2YWx1ZV9zZXBhcmF0b3IpOworCisgICAgICAgICAg
ICAgICAgICAgIC8vIGNsb3NpbmcgfQorICAgICAgICAgICAgICAgICAgICBleHBlY3QobGV4ZXI6
OnRva2VuX3R5cGU6OmVuZF9vYmplY3QpOworICAgICAgICAgICAgICAgICAgICBnZXRfdG9rZW4o
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGtlZXAgYW5kIGNhbGxiYWNrIGFuZCBub3QgY2Fs
bGJhY2soLS1kZXB0aCwgcGFyc2VfZXZlbnRfdDo6b2JqZWN0X2VuZCwgcmVzdWx0KSkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYmFzaWNf
anNvbih2YWx1ZV90OjpkaXNjYXJkZWQpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBjYXNlIGxleGVyOjp0b2tlbl90eXBlOjpiZWdpbl9hcnJheToKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChrZWVwIGFuZCAobm90IGNhbGxiYWNr
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgKChrZWVwID0gY2FsbGJhY2so
ZGVwdGgrKywgcGFyc2VfZXZlbnRfdDo6YXJyYXlfc3RhcnQsIHJlc3VsdCkpICE9IDApKSkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhwbGljaXRs
eSBzZXQgcmVzdWx0IHRvIG9iamVjdCB0byBjb3BlIHdpdGggW10KKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5tX3R5cGUgPSB2YWx1ZV90OjphcnJheTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gdmFsdWVfdDo6YXJyYXk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyByZWFkIG5leHQgdG9rZW4KKyAgICAgICAg
ICAgICAgICAgICAgZ2V0X3Rva2VuKCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gY2xvc2lu
ZyBdIC0+IHdlIGFyZSBkb25lCisgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0X3Rva2VuID09
IGxleGVyOjp0b2tlbl90eXBlOjplbmRfYXJyYXkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGdldF90b2tlbigpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGNhbGxiYWNrIGFuZCBub3QgY2FsbGJhY2soLS1kZXB0aCwgcGFyc2VfZXZlbnRfdDo6
YXJyYXlfZW5kLCByZXN1bHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGJhc2ljX2pzb24odmFsdWVfdDo6ZGlzY2FyZGVk
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAvLyBubyBjb21tYSBpcyBleHBlY3RlZCBoZXJlCisgICAgICAgICAgICAgICAgICAgIHVuZXhw
ZWN0KGxleGVyOjp0b2tlbl90eXBlOjp2YWx1ZV9zZXBhcmF0b3IpOworCisgICAgICAgICAgICAg
ICAgICAgIC8vIG90aGVyd2lzZTogcGFyc2UgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIGRv
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVnbHks
IGJ1dCBjb3VsZCBiZSBmaXhlZCB3aXRoIGxvb3AgcmVvcmdhbml6YXRpb24KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChsYXN0X3Rva2VuID09IGxleGVyOjp0b2tlbl90eXBlOjp2YWx1ZV9z
ZXBhcmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2V0X3Rva2VuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvIHZhbHVlID0gcGFyc2VfaW50ZXJuYWwoa2VlcCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoa2VlcCBhbmQgbm90IHZhbHVlLmlzX2Rpc2NhcmRlZCgpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoX2Jh
Y2soc3RkOjptb3ZlKHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxhc3RfdG9rZW4gPT0g
bGV4ZXI6OnRva2VuX3R5cGU6OnZhbHVlX3NlcGFyYXRvcik7CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gY2xvc2luZyBdCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdChsZXhlcjo6dG9rZW5f
dHlwZTo6ZW5kX2FycmF5KTsKKyAgICAgICAgICAgICAgICAgICAgZ2V0X3Rva2VuKCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChrZWVwIGFuZCBjYWxsYmFjayBhbmQgbm90IGNhbGxiYWNrKC0t
ZGVwdGgsIHBhcnNlX2V2ZW50X3Q6OmFycmF5X2VuZCwgcmVzdWx0KSkKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYmFzaWNfanNvbih2YWx1
ZV90OjpkaXNjYXJkZWQpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBjYXNlIGxleGVyOjp0b2tlbl90eXBlOjpsaXRlcmFsX251bGw6CisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBnZXRfdG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0Lm1fdHlwZSA9IHZhbHVlX3Q6Om51bGw7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhc2UgbGV4ZXI6OnRva2Vu
X3R5cGU6OnZhbHVlX3N0cmluZzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGF1dG8gcyA9IG1fbGV4ZXIuZ2V0X3N0cmluZygpOworICAgICAgICAgICAgICAg
ICAgICBnZXRfdG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYmFzaWNfanNv
bihzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgY2FzZSBsZXhlcjo6dG9rZW5fdHlwZTo6bGl0ZXJhbF90cnVlOgorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2V0X3Rva2VuKCk7CisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSB2YWx1ZV90Ojpib29sZWFuOworICAgICAgICAg
ICAgICAgICAgICByZXN1bHQubV92YWx1ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhc2UgbGV4ZXI6OnRv
a2VuX3R5cGU6OmxpdGVyYWxfZmFsc2U6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBnZXRfdG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9
IHZhbHVlX3Q6OmJvb2xlYW47CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGNhc2UgbGV4ZXI6OnRva2VuX3R5cGU6OnZhbHVlX251bWJlcjoKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1fbGV4ZXIuZ2V0X251bWJlcihy
ZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBnZXRfdG9rZW4oKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBsYXN0IHRv
a2VuIHdhcyB1bmV4cGVjdGVkCisgICAgICAgICAgICAgICAgICAgIHVuZXhwZWN0KGxhc3RfdG9r
ZW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGtlZXAgYW5kIGNhbGxiYWNrIGFuZCBub3QgY2FsbGJhY2soZGVwdGgsIHBhcnNlX2V2ZW50X3Q6
OnZhbHVlLCByZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9
IGJhc2ljX2pzb24odmFsdWVfdDo6ZGlzY2FyZGVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICAvLy8gZ2V0IG5leHQgdG9r
ZW4gZnJvbSBsZXhlcgorICAgICAgICB0eXBlbmFtZSBsZXhlcjo6dG9rZW5fdHlwZSBnZXRfdG9r
ZW4oKQorICAgICAgICB7CisgICAgICAgICAgICBsYXN0X3Rva2VuID0gbV9sZXhlci5zY2FuKCk7
CisgICAgICAgICAgICByZXR1cm4gbGFzdF90b2tlbjsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgZXhwZWN0KHR5cGVuYW1lIGxleGVyOjp0b2tlbl90eXBlIHQpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmICh0ICE9IGxhc3RfdG9rZW4pCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgc3RkOjpzdHJpbmcgZXJyb3JfbXNnID0gInBhcnNlIGVycm9yIC0gdW5leHBlY3Rl
ZCAiOworICAgICAgICAgICAgICAgIGVycm9yX21zZyArPSAobGFzdF90b2tlbiA9PSBsZXhlcjo6
dG9rZW5fdHlwZTo6cGFyc2VfZXJyb3IgPyAoIiciICsgIG1fbGV4ZXIuZ2V0X3Rva2VuX3N0cmlu
ZygpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInIikgOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGV4ZXI6OnRva2VuX3R5cGVfbmFtZShsYXN0X3Rva2VuKSk7Cisg
ICAgICAgICAgICAgICAgZXJyb3JfbXNnICs9ICI7IGV4cGVjdGVkICIgKyBsZXhlcjo6dG9rZW5f
dHlwZV9uYW1lKHQpOworICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6aW52YWxpZF9hcmd1bWVu
dD4oZXJyb3JfbXNnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
dW5leHBlY3QodHlwZW5hbWUgbGV4ZXI6OnRva2VuX3R5cGUgdCkgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKHQgPT0gbGFzdF90b2tlbikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBzdGQ6OnN0cmluZyBlcnJvcl9tc2cgPSAicGFyc2UgZXJyb3IgLSB1bmV4cGVjdGVk
ICI7CisgICAgICAgICAgICAgICAgZXJyb3JfbXNnICs9IChsYXN0X3Rva2VuID09IGxleGVyOjp0
b2tlbl90eXBlOjpwYXJzZV9lcnJvciA/ICgiJyIgKyAgbV9sZXhlci5nZXRfdG9rZW5fc3RyaW5n
KCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiciKSA6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsZXhlcjo6dG9rZW5fdHlwZV9uYW1lKGxhc3RfdG9rZW4pKTsKKyAg
ICAgICAgICAgICAgICBUaHJvdzxzdGQ6OmludmFsaWRfYXJndW1lbnQ+KGVycm9yX21zZyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgLy8vIGN1
cnJlbnQgbGV2ZWwgb2YgcmVjdXJzaW9uCisgICAgICAgIGludCBkZXB0aCA9IDA7CisgICAgICAg
IC8vLyBjYWxsYmFjayBmdW5jdGlvbgorICAgICAgICBjb25zdCBwYXJzZXJfY2FsbGJhY2tfdCBj
YWxsYmFjayA9IG51bGxwdHI7CisgICAgICAgIC8vLyB0aGUgdHlwZSBvZiB0aGUgbGFzdCByZWFk
IHRva2VuCisgICAgICAgIHR5cGVuYW1lIGxleGVyOjp0b2tlbl90eXBlIGxhc3RfdG9rZW4gPSBs
ZXhlcjo6dG9rZW5fdHlwZTo6dW5pbml0aWFsaXplZDsKKyAgICAgICAgLy8vIHRoZSBsZXhlcgor
ICAgICAgICBsZXhlciBtX2xleGVyOworICAgIH07CisKKyAgcHVibGljOgorICAgIC8qIQorICAg
IEBicmllZiBKU09OIFBvaW50ZXIKKworICAgIEEgSlNPTiBwb2ludGVyIGRlZmluZXMgYSBzdHJp
bmcgc3ludGF4IGZvciBpZGVudGlmeWluZyBhIHNwZWNpZmljIHZhbHVlCisgICAgd2l0aGluIGEg
SlNPTiBkb2N1bWVudC4gSXQgY2FuIGJlIHVzZWQgd2l0aCBmdW5jdGlvbnMgYGF0YCBhbmQKKyAg
ICBgb3BlcmF0b3JbXWAuIEZ1cnRoZXJtb3JlLCBKU09OIHBvaW50ZXJzIGFyZSB0aGUgYmFzZSBm
b3IgSlNPTiBwYXRjaGVzLgorCisgICAgQHNhIFtSRkMgNjkwMV0oaHR0cHM6Ly90b29scy5pZXRm
Lm9yZy9odG1sL3JmYzY5MDEpCisKKyAgICBAc2luY2UgdmVyc2lvbiAyLjAuMAorICAgICovCisg
ICAgY2xhc3MganNvbl9wb2ludGVyCisgICAgeworICAgICAgICAvLy8gYWxsb3cgYmFzaWNfanNv
biB0byBhY2Nlc3MgcHJpdmF0ZSBtZW1iZXJzCisgICAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19q
c29uOworCisgICAgICBwdWJsaWM6CisgICAgICAgIC8qIQorICAgICAgICBAYnJpZWYgY3JlYXRl
IEpTT04gcG9pbnRlcgorCisgICAgICAgIENyZWF0ZSBhIEpTT04gcG9pbnRlciBhY2NvcmRpbmcg
dG8gdGhlIHN5bnRheCBkZXNjcmliZWQgaW4KKyAgICAgICAgW1NlY3Rpb24gMyBvZiBSRkM2OTAx
XShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjkwMSNzZWN0aW9uLTMpLgorCisgICAg
ICAgIEBwYXJhbVtpbl0gcyAgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgSlNPTiBwb2ludGVyOyBp
ZiBvbWl0dGVkLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICBlbXB0eSBzdHJpbmcgaXMgYXNz
dW1lZCB3aGljaCByZWZlcmVuY2VzIHRoZSB3aG9sZSBKU09OCisgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWUKKworICAgICAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgcmVmZXJlbmNl
IHRva2VuIGlzIG5vbmVtcHR5IGFuZCBkb2VzIG5vdAorICAgICAgICBiZWdpbiB3aXRoIGEgc2xh
c2ggKGAvYCk7IGV4YW1wbGU6IGAiSlNPTiBwb2ludGVyIG11c3QgYmUgZW1wdHkgb3IKKyAgICAg
ICAgYmVnaW4gd2l0aCAvImAKKyAgICAgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIGEg
dGlsZGUgKGB+YCkgaXMgbm90IGZvbGxvd2VkIGJ5IGAwYAorICAgICAgICAocmVwcmVzZW50aW5n
IGB+YCkgb3IgYDFgIChyZXByZXNlbnRpbmcgYC9gKTsgZXhhbXBsZTogYCJlc2NhcGUgZXJyb3I6
CisgICAgICAgIH4gbXVzdCBiZSBmb2xsb3dlZCB3aXRoIDAgb3IgMSJgCisKKyAgICAgICAgQGxp
dmVleGFtcGxle1RoZSBleGFtcGxlIHNob3dzIHRoZSBjb25zdHJ1Y3Rpb24gc2V2ZXJhbCB2YWxp
ZCBKU09OCisgICAgICAgIHBvaW50ZXJzIGFzIHdlbGwgYXMgdGhlIGV4Y2VwdGlvbmFsIGJlaGF2
aW9yLixqc29uX3BvaW50ZXJ9CisKKyAgICAgICAgQHNpbmNlIHZlcnNpb24gMi4wLjAKKyAgICAg
ICAgKi8KKyAgICAgICAgZXhwbGljaXQganNvbl9wb2ludGVyKGNvbnN0IHN0ZDo6c3RyaW5nJiBz
ID0gIiIpCisgICAgICAgICAgICA6IHJlZmVyZW5jZV90b2tlbnMoc3BsaXQocykpCisgICAgICAg
IHt9CisKKyAgICAgICAgLyohCisgICAgICAgIEBicmllZiByZXR1cm4gYSBzdHJpbmcgcmVwcmVz
ZW50YXRpb24gb2YgdGhlIEpTT04gcG9pbnRlcgorCisgICAgICAgIEBpbnZhcmlhbnQgRm9yIGVh
Y2ggSlNPTiBwb2ludGVyIGBwdHJgLCBpdCBob2xkczoKKyAgICAgICAgQGNvZGUgey5jcHB9Cisg
ICAgICAgIHB0ciA9PSBqc29uX3BvaW50ZXIocHRyLnRvX3N0cmluZygpKTsKKyAgICAgICAgQGVu
ZGNvZGUKKworICAgICAgICBAcmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBK
U09OIHBvaW50ZXIKKworICAgICAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgc2hvd3MgdGhl
IHJlc3VsdCBvZiBgdG9fc3RyaW5nYC4sCisgICAgICAgIGpzb25fcG9pbnRlcl9fdG9fc3RyaW5n
fQorCisgICAgICAgIEBzaW5jZSB2ZXJzaW9uIDIuMC4wCisgICAgICAgICovCisgICAgICAgIHN0
ZDo6c3RyaW5nIHRvX3N0cmluZygpIGNvbnN0IG5vZXhjZXB0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBzdGQ6OmFjY3VtdWxhdGUocmVmZXJlbmNlX3Rva2Vucy5iZWdpbigpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VfdG9rZW5zLmVuZCgpLCBz
dGQ6OnN0cmluZ3t9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXShjb25z
dCBzdGQ6OnN0cmluZyAmIGEsIGNvbnN0IHN0ZDo6c3RyaW5nICYgYikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gYSArICIvIiArIGVzY2FwZShiKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9CisKKyAgICAgICAgLy8vIEBjb3B5ZG9jIHRvX3N0cmluZygpCisgICAg
ICAgIG9wZXJhdG9yIHN0ZDo6c3RyaW5nKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIHRvX3N0cmluZygpOworICAgICAgICB9CisKKyAgICAgIHByaXZhdGU6CisgICAgICAg
IC8vLyByZW1vdmUgYW5kIHJldHVybiBsYXN0IHJlZmVyZW5jZSBwb2ludGVyCisgICAgICAgIHN0
ZDo6c3RyaW5nIHBvcF9iYWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGlzX3Jvb3Qo
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJv
cj4oIkpTT04gcG9pbnRlciBoYXMgbm8gcGFyZW50Iik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGF1dG8gbGFzdCA9IHJlZmVyZW5jZV90b2tlbnMuYmFjaygpOworICAgICAgICAgICAg
cmVmZXJlbmNlX3Rva2Vucy5wb3BfYmFjaygpOworICAgICAgICAgICAgcmV0dXJuIGxhc3Q7Cisg
ICAgICAgIH0KKworICAgICAgICAvLy8gcmV0dXJuIHdoZXRoZXIgcG9pbnRlciBwb2ludHMgdG8g
dGhlIHJvb3QgZG9jdW1lbnQKKyAgICAgICAgYm9vbCBpc19yb290KCkgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZV90b2tlbnMuZW1wdHkoKTsKKyAgICAgICAg
fQorCisgICAgICAgIGpzb25fcG9pbnRlciB0b3AoKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoaXNfcm9vdCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRocm93
PHN0ZDo6ZG9tYWluX2Vycm9yPigiSlNPTiBwb2ludGVyIGhhcyBubyBwYXJlbnQiKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAganNvbl9wb2ludGVyIHJlc3VsdCA9ICp0aGlzOworICAg
ICAgICAgICAgcmVzdWx0LnJlZmVyZW5jZV90b2tlbnMgPSB7cmVmZXJlbmNlX3Rva2Vuc1swXX07
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgLyohCisg
ICAgICAgIEBicmllZiBjcmVhdGUgYW5kIHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgcG9pbnRl
ZCB0byB2YWx1ZQorCisgICAgICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgbnVtYmVyIG9m
IHJlZmVyZW5jZSB0b2tlbnMuCisgICAgICAgICovCisgICAgICAgIHJlZmVyZW5jZSBnZXRfYW5k
X2NyZWF0ZShyZWZlcmVuY2UgaikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcG9pbnRl
ciByZXN1bHQgPSAmajsKKworICAgICAgICAgICAgLy8gaW4gY2FzZSBubyByZWZlcmVuY2UgdG9r
ZW5zIGV4aXN0LCByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlCisgICAgICAgICAgICAvLyBKU09O
IHZhbHVlIGogd2hpY2ggd2lsbCBiZSBvdmVyd3JpdHRlbiBieSBhIHByaW1pdGl2ZSB2YWx1ZQor
ICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiByZWZlcmVuY2VfdG9rZW4gOiByZWZlcmVuY2Vf
dG9rZW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAocmVzdWx0LT5t
X3R5cGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNlIHZhbHVl
X3Q6Om51bGw6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChyZWZlcmVuY2VfdG9rZW4gPT0gIjAiKQorICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0IGEgbmV3IGFycmF5IGlmIHJlZmVy
ZW5jZSB0b2tlbiBpcyAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gJnJl
c3VsdC0+b3BlcmF0b3JbXSgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBzdGFydCBhIG5ldyBvYmplY3Qgb3RoZXJ3aXNlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gJnJlc3VsdC0+b3BlcmF0b3JbXShyZWZl
cmVuY2VfdG9rZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGFuIGVudHJ5IGluIHRoZSBvYmplY3QKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICZyZXN1bHQtPm9wZXJhdG9yW10ocmVmZXJlbmNl
X3Rva2VuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGFuIGVu
dHJ5IGluIHRoZSBhcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gJnJlc3Vs
dC0+b3BlcmF0b3JbXShzdGF0aWNfY2FzdDxzaXplX3R5cGU+KHN0ZDo6c3RvaShyZWZlcmVuY2Vf
dG9rZW4pKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgIFRo
ZSBmb2xsb3dpbmcgY29kZSBpcyBvbmx5IHJlYWNoZWQgaWYgdGhlcmUgZXhpc3RzIGEKKyAgICAg
ICAgICAgICAgICAgICAgcmVmZXJlbmNlIHRva2VuIF9hbmRfIHRoZSBjdXJyZW50IHZhbHVlIGlz
IHByaW1pdGl2ZS4gSW4KKyAgICAgICAgICAgICAgICAgICAgdGhpcyBjYXNlLCB3ZSBoYXZlIGFu
IGVycm9yIHNpdHVhdGlvbiwgYmVjYXVzZSBwcmltaXRpdmUKKyAgICAgICAgICAgICAgICAgICAg
dmFsdWVzIG1heSBvbmx5IG9jY3VyIGFzIHNpbmdsZSB2YWx1ZTsgdGhhdCBpcywgd2l0aCBhbgor
ICAgICAgICAgICAgICAgICAgICBlbXB0eSBsaXN0IG9mIHJlZmVyZW5jZSB0b2tlbnMuCisgICAg
ICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWlu
X2Vycm9yPigiaW52YWxpZCB2YWx1ZSB0byB1bmZsYXR0ZW4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0
dXJuICpyZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmIHJl
dHVybiBhIHJlZmVyZW5jZSB0byB0aGUgcG9pbnRlZCB0byB2YWx1ZQorCisgICAgICAgIEBub3Rl
IFRoaXMgdmVyc2lvbiBkb2VzIG5vdCB0aHJvdyBpZiBhIHZhbHVlIGlzIG5vdCBwcmVzZW50LCBi
dXQgdHJpZXMKKyAgICAgICAgdG8gY3JlYXRlIG5lc3RlZCB2YWx1ZXMgaW5zdGVhZC4gRm9yIGlu
c3RhbmNlLCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KKyAgICAgICAgd2l0aCBwb2ludGVyIGAiL3Ro
aXMvdGhhdCJgIG9uIGEgbnVsbCB2YWx1ZSBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcKKyAgICAg
ICAgYG9wZXJhdG9yW10oInRoaXMiKS5vcGVyYXRvcltdKCJ0aGF0IilgIG9uIHRoYXQgdmFsdWUs
IGVmZmVjdGl2ZWx5CisgICAgICAgIGNoYW5naW5nIHRoZSBudWxsIHZhbHVlIHRvIGFuIG9iamVj
dC4KKworICAgICAgICBAcGFyYW1baW5dIHB0ciAgYSBKU09OIHZhbHVlCisKKyAgICAgICAgQHJl
dHVybiByZWZlcmVuY2UgdG8gdGhlIEpTT04gdmFsdWUgcG9pbnRlZCB0byBieSB0aGUgSlNPTiBw
b2ludGVyCisKKyAgICAgICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIHRoZSBsZW5ndGggb2YgdGhl
IEpTT04gcG9pbnRlci4KKworICAgICAgICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2UgICAgICBp
ZiB0aGUgSlNPTiBwb2ludGVyIGNhbiBub3QgYmUgcmVzb2x2ZWQKKyAgICAgICAgQHRocm93IHN0
ZDo6ZG9tYWluX2Vycm9yICAgICAgaWYgYW4gYXJyYXkgaW5kZXggYmVnaW5zIHdpdGggJzAnCisg
ICAgICAgIEB0aHJvdyBzdGQ6OmludmFsaWRfYXJndW1lbnQgIGlmIGFuIGFycmF5IGluZGV4IHdh
cyBub3QgYSBudW1iZXIKKyAgICAgICAgKi8KKyAgICAgICAgcmVmZXJlbmNlIGdldF91bmNoZWNr
ZWQocG9pbnRlciBwdHIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoY29uc3Qg
YXV0byYgcmVmZXJlbmNlX3Rva2VuIDogcmVmZXJlbmNlX3Rva2VucykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IG51bGwgdmFsdWVzIHRvIGFycmF5cyBvciBvYmpl
Y3RzIGJlZm9yZSBjb250aW51aW5nCisgICAgICAgICAgICAgICAgaWYgKHB0ci0+bV90eXBlID09
IHZhbHVlX3Q6Om51bGwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAv
LyBjaGVjayBpZiByZWZlcmVuY2UgdG9rZW4gaXMgYSBudW1iZXIKKyAgICAgICAgICAgICAgICAg
ICAgY29uc3QgYm9vbCBudW1zID0gc3RkOjphbGxfb2YocmVmZXJlbmNlX3Rva2VuLmJlZ2luKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVy
ZW5jZV90b2tlbi5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgW10oY29uc3QgY2hhciB4KQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjppc2RpZ2l0KHgpOworICAgICAgICAgICAg
ICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgdmFsdWUgdG8gYXJy
YXkgZm9yIG51bWJlcnMgb3IgIi0iIG9yIHRvIG9iamVjdAorICAgICAgICAgICAgICAgICAgICAv
LyBvdGhlcndpc2UKKyAgICAgICAgICAgICAgICAgICAgaWYgKG51bXMgb3IgcmVmZXJlbmNlX3Rv
a2VuID09ICItIikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgKnB0ciA9IHZhbHVlX3Q6OmFycmF5OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgKnB0ciA9IHZhbHVlX3Q6Om9iamVjdDsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHN3aXRjaCAocHRyLT5tX3R5cGUp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om9i
amVjdDoKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
dXNlIHVuY2hlY2tlZCBvYmplY3QgYWNjZXNzCisgICAgICAgICAgICAgICAgICAgICAgICBwdHIg
PSAmcHRyLT5vcGVyYXRvcltdKHJlZmVyZW5jZV90b2tlbik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
IGNhc2UgdmFsdWVfdDo6YXJyYXk6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGVycm9yIGNvbmRpdGlvbiAoY2YuIFJGQyA2OTAxLCBTZWN0LiA0KQor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZV90b2tlbi5zaXplKCkgPiAxIGFu
ZCByZWZlcmVuY2VfdG9rZW5bMF0gPT0gJzAnKQorICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiYXJy
YXkgaW5kZXggbXVzdCBub3QgYmVnaW4gd2l0aCAnMCciKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZV90b2tlbiA9PSAi
LSIpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gZXhwbGljaXR5bHkgdHJlYXQgIi0iIGFzIGluZGV4IGJleW9uZCB0aGUgZW5kCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHRyID0gJnB0ci0+b3BlcmF0b3JbXShwdHItPm1fdmFs
dWUuYXJyYXktPnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gY29udmVydCBhcnJheSBpbmRleCB0byBudW1iZXI7IHVuY2hl
Y2tlZCBhY2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHIgPSAmcHRyLT5vcGVy
YXRvcltdKHN0YXRpY19jYXN0PHNpemVfdHlwZT4oc3RkOjpzdG9pKHJlZmVyZW5jZV90b2tlbikp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgVGhyb3c8
c3RkOjpvdXRfb2ZfcmFuZ2U+KCJ1bnJlc29sdmVkIHJlZmVyZW5jZSB0b2tlbiAnIiArIHJlZmVy
ZW5jZV90b2tlbiArICInIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiAqcHRyOworICAgICAgICB9
CisKKyAgICAgICAgcmVmZXJlbmNlIGdldF9jaGVja2VkKHBvaW50ZXIgcHRyKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlZmVyZW5jZV90b2tlbiA6IHJl
ZmVyZW5jZV90b2tlbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChw
dHItPm1fdHlwZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
dmFsdWVfdDo6b2JqZWN0OgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBub3RlOiBhdCBwZXJmb3JtcyByYW5nZSBjaGVjaworICAgICAgICAgICAgICAg
ICAgICAgICAgcHRyID0gJnB0ci0+YXQocmVmZXJlbmNlX3Rva2VuKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZV90b2tlbiA9PSAiLSIpCisgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIi0iIGFsd2F5
cyBmYWlscyB0aGUgcmFuZ2UgY2hlY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJv
dzxzdGQ6Om91dF9vZl9yYW5nZT4oImFycmF5IGluZGV4ICctJyAoIiArCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp0b19zdHJpbmcocHRy
LT5tX3ZhbHVlLmFycmF5LT5zaXplKCkpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiKSBpcyBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXJyb3IgY29uZGl0
aW9uIChjZi4gUkZDIDY5MDEsIFNlY3QuIDQpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cmVmZXJlbmNlX3Rva2VuLnNpemUoKSA+IDEgYW5kIHJlZmVyZW5jZV90b2tlblswXSA9PSAnMCcp
CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJhcnJheSBpbmRleCBtdXN0IG5vdCBiZWdpbiB3aXRo
ICcwJyIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBub3RlOiBhdCBwZXJmb3JtcyByYW5nZSBjaGVjaworICAgICAgICAgICAgICAgICAg
ICAgICAgcHRyID0gJnB0ci0+YXQoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihzdGQ6OnN0b2kocmVm
ZXJlbmNlX3Rva2VuKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6Om91dF9vZl9y
YW5nZT4oInVucmVzb2x2ZWQgcmVmZXJlbmNlIHRva2VuICciICsgcmVmZXJlbmNlX3Rva2VuICsg
IiciKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcmV0dXJuICpwdHI7CisgICAgICAgIH0KKworICAgICAgICAv
KiEKKyAgICAgICAgQGJyaWVmIHJldHVybiBhIGNvbnN0IHJlZmVyZW5jZSB0byB0aGUgcG9pbnRl
ZCB0byB2YWx1ZQorCisgICAgICAgIEBwYXJhbVtpbl0gcHRyICBhIEpTT04gdmFsdWUKKworICAg
ICAgICBAcmV0dXJuIGNvbnN0IHJlZmVyZW5jZSB0byB0aGUgSlNPTiB2YWx1ZSBwb2ludGVkIHRv
IGJ5IHRoZSBKU09OCisgICAgICAgICAgICAgICAgcG9pbnRlcgorICAgICAgICAqLworICAgICAg
ICBjb25zdF9yZWZlcmVuY2UgZ2V0X3VuY2hlY2tlZChjb25zdF9wb2ludGVyIHB0cikgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiByZWZlcmVuY2VfdG9rZW4g
OiByZWZlcmVuY2VfdG9rZW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRj
aCAocHRyLT5tX3R5cGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBj
YXNlIHZhbHVlX3Q6Om9iamVjdDoKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gdXNlIHVuY2hlY2tlZCBvYmplY3QgYWNjZXNzCisgICAgICAgICAgICAg
ICAgICAgICAgICBwdHIgPSAmcHRyLT5vcGVyYXRvcltdKHJlZmVyZW5jZV90b2tlbik7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YXJyYXk6CisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZlcmVuY2VfdG9rZW4gPT0gIi0iKQor
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
ICItIiBjYW5ub3QgYmUgdXNlZCBmb3IgY29uc3QgYWNjZXNzCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVGhyb3c8c3RkOjpvdXRfb2ZfcmFuZ2U+KCJhcnJheSBpbmRleCAnLScgKCIgKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
dG9fc3RyaW5nKHB0ci0+bV92YWx1ZS5hcnJheS0+c2l6ZSgpKSArCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIikgaXMgb3V0IG9mIHJhbmdlIik7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGVycm9yIGNvbmRpdGlvbiAoY2YuIFJGQyA2OTAxLCBTZWN0LiA0KQorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHJlZmVyZW5jZV90b2tlbi5zaXplKCkgPiAxIGFuZCByZWZlcmVuY2VfdG9r
ZW5bMF0gPT0gJzAnKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiYXJyYXkgaW5kZXggbXVzdCBu
b3QgYmVnaW4gd2l0aCAnMCciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdXNlIHVuY2hlY2tlZCBhcnJheSBhY2Nlc3MKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHB0ciA9ICZwdHItPm9wZXJhdG9yW10oc3RhdGljX2Nhc3Q8c2l6ZV90
eXBlPihzdGQ6OnN0b2kocmVmZXJlbmNlX3Rva2VuKSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBU
aHJvdzxzdGQ6Om91dF9vZl9yYW5nZT4oInVucmVzb2x2ZWQgcmVmZXJlbmNlIHRva2VuICciICsg
cmVmZXJlbmNlX3Rva2VuICsgIiciKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuICpwdHI7CisgICAg
ICAgIH0KKworICAgICAgICBjb25zdF9yZWZlcmVuY2UgZ2V0X2NoZWNrZWQoY29uc3RfcG9pbnRl
ciBwdHIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgcmVm
ZXJlbmNlX3Rva2VuIDogcmVmZXJlbmNlX3Rva2VucykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHB0ci0+bV90eXBlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6CisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdGU6IGF0IHBlcmZvcm1zIHJhbmdlIGNoZWNr
CisgICAgICAgICAgICAgICAgICAgICAgICBwdHIgPSAmcHRyLT5hdChyZWZlcmVuY2VfdG9rZW4p
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5OgorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVmZXJlbmNlX3Rva2VuID09
ICItIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyAiLSIgYWx3YXlzIGZhaWxzIHRoZSByYW5nZSBjaGVjaworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRocm93PHN0ZDo6b3V0X29mX3JhbmdlPigiYXJyYXkgaW5kZXggJy0nICgi
ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6OnRvX3N0cmluZyhwdHItPm1fdmFsdWUuYXJyYXktPnNpemUoKSkgKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpIGlzIG91dCBvZiByYW5n
ZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBlcnJvciBjb25kaXRpb24gKGNmLiBSRkMgNjkwMSwgU2VjdC4gNCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChyZWZlcmVuY2VfdG9rZW4uc2l6ZSgpID4gMSBhbmQgcmVmZXJlbmNl
X3Rva2VuWzBdID09ICcwJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oImFycmF5IGluZGV4IG11
c3Qgbm90IGJlZ2luIHdpdGggJzAnIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdGU6IGF0IHBlcmZvcm1zIHJhbmdlIGNoZWNrCisg
ICAgICAgICAgICAgICAgICAgICAgICBwdHIgPSAmcHRyLT5hdChzdGF0aWNfY2FzdDxzaXplX3R5
cGU+KHN0ZDo6c3RvaShyZWZlcmVuY2VfdG9rZW4pKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRo
cm93PHN0ZDo6b3V0X29mX3JhbmdlPigidW5yZXNvbHZlZCByZWZlcmVuY2UgdG9rZW4gJyIgKyBy
ZWZlcmVuY2VfdG9rZW4gKyAiJyIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gKnB0cjsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vLyBzcGxpdCB0aGUgc3RyaW5nIGlucHV0IHRvIHJlZmVyZW5jZSB0
b2tlbnMKKyAgICAgICAgc3RhdGljIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzcGxpdChjb25z
dCBzdGQ6OnN0cmluZyYgcmVmZXJlbmNlX3N0cmluZykKKyAgICAgICAgeworICAgICAgICAgICAg
c3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHJlc3VsdDsKKworICAgICAgICAgICAgLy8gc3BlY2lh
bCBjYXNlOiBlbXB0eSByZWZlcmVuY2Ugc3RyaW5nIC0+IG5vIHJlZmVyZW5jZSB0b2tlbnMKKyAg
ICAgICAgICAgIGlmIChyZWZlcmVuY2Vfc3RyaW5nLmVtcHR5KCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gY2hlY2sgaWYgbm9uZW1wdHkgcmVmZXJlbmNlIHN0cmluZyBiZWdpbnMgd2l0aCBzbGFz
aAorICAgICAgICAgICAgaWYgKHJlZmVyZW5jZV9zdHJpbmdbMF0gIT0gJy8nKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiSlNPTiBwb2lu
dGVyIG11c3QgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCAnLyciKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gZXh0cmFjdCB0aGUgcmVmZXJlbmNlIHRva2VuczoKKyAgICAgICAgICAg
IC8vIC0gc2xhc2g6IHBvc2l0aW9uIG9mIHRoZSBsYXN0IHJlYWQgc2xhc2ggKG9yIGVuZCBvZiBz
dHJpbmcpCisgICAgICAgICAgICAvLyAtIHN0YXJ0OiBwb3NpdGlvbiBhZnRlciB0aGUgcHJldmlv
dXMgc2xhc2gKKyAgICAgICAgICAgIGZvciAoCisgICAgICAgICAgICAgICAgLy8gc2VhcmNoIGZv
ciB0aGUgZmlyc3Qgc2xhc2ggYWZ0ZXIgdGhlIGZpcnN0IGNoYXJhY3RlcgorICAgICAgICAgICAg
ICAgIHNpemVfdCBzbGFzaCA9IHJlZmVyZW5jZV9zdHJpbmcuZmluZF9maXJzdF9vZigiLyIsIDEp
LAorICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaXJzdCByZWZl
cmVuY2UgdG9rZW4KKyAgICAgICAgICAgICAgICBzdGFydCA9IDE7CisgICAgICAgICAgICAgICAg
Ly8gd2UgY2FuIHN0b3AgaWYgc3RhcnQgPT0gc3RyaW5nOjpucG9zKzEgPSAwCisgICAgICAgICAg
ICAgICAgc3RhcnQgIT0gMDsKKyAgICAgICAgICAgICAgICAvLyBzZXQgdGhlIGJlZ2lubmluZyBv
ZiB0aGUgbmV4dCByZWZlcmVuY2UgdG9rZW4KKyAgICAgICAgICAgICAgICAvLyAod2lsbCBldmVu
dHVhbGx5IGJlIDAgaWYgc2xhc2ggPT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgICAgICAgICAg
ICAgc3RhcnQgPSBzbGFzaCArIDEsCisgICAgICAgICAgICAgICAgLy8gZmluZCBuZXh0IHNsYXNo
CisgICAgICAgICAgICAgICAgc2xhc2ggPSByZWZlcmVuY2Vfc3RyaW5nLmZpbmRfZmlyc3Rfb2Yo
Ii8iLCBzdGFydCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gdXNlIHRoZSB0
ZXh0IGJldHdlZW4gdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVmZXJlbmNlIHRva2VuCisgICAgICAg
ICAgICAgICAgLy8gKHN0YXJ0KSBhbmQgdGhlIGxhc3Qgc2xhc2ggKHNsYXNoKS4KKyAgICAgICAg
ICAgICAgICBhdXRvIHJlZmVyZW5jZV90b2tlbiA9IHJlZmVyZW5jZV9zdHJpbmcuc3Vic3RyKHN0
YXJ0LCBzbGFzaCAtIHN0YXJ0KTsKKworICAgICAgICAgICAgICAgIC8vIGNoZWNrIHJlZmVyZW5j
ZSB0b2tlbnMgYXJlIHByb3Blcmx5IGVzY2FwZWQKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBwb3MgPSByZWZlcmVuY2VfdG9rZW4uZmluZF9maXJzdF9vZigifiIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgcG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAgICAgICAgICAgICAg
ICAgICAgcG9zID0gcmVmZXJlbmNlX3Rva2VuLmZpbmRfZmlyc3Rfb2YoIn4iLCBwb3MgKyAxKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZWZlcmVuY2Vf
dG9rZW5bcG9zXSA9PSAnficpOworCisgICAgICAgICAgICAgICAgICAgIC8vIH4gbXVzdCBiZSBm
b2xsb3dlZCBieSAwIG9yIDEKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBvcyA9PSByZWZlcmVu
Y2VfdG9rZW4uc2l6ZSgpIC0gMSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWZl
cmVuY2VfdG9rZW5bcG9zICsgMV0gIT0gJzAnIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZWZlcmVuY2VfdG9rZW5bcG9zICsgMV0gIT0gJzEnKSkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJl
c2NhcGUgZXJyb3I6ICd+JyBtdXN0IGJlIGZvbGxvd2VkIHdpdGggJzAnIG9yICcxJyIpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
Ly8gZmluYWxseSwgc3RvcmUgdGhlIHJlZmVyZW5jZSB0b2tlbgorICAgICAgICAgICAgICAgIHVu
ZXNjYXBlKHJlZmVyZW5jZV90b2tlbik7CisgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2hfYmFj
ayhyZWZlcmVuY2VfdG9rZW4pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICB9CisKKyAgICAgIHByaXZhdGU6CisgICAgICAgIC8qIQorICAgICAg
ICBAYnJpZWYgcmVwbGFjZSBhbGwgb2NjdXJyZW5jZXMgb2YgYSBzdWJzdHJpbmcgYnkgYW5vdGhl
ciBzdHJpbmcKKworICAgICAgICBAcGFyYW1baW4sb3V0XSBzICB0aGUgc3RyaW5nIHRvIG1hbmlw
dWxhdGUKKyAgICAgICAgQHBhcmFtW2luXSAgICAgZiAgdGhlIHN1YnN0cmluZyB0byByZXBsYWNl
IHdpdGggQGEgdAorICAgICAgICBAcGFyYW1baW5dICAgICB0ICB0aGUgc3RyaW5nIHRvIHJlcGxh
Y2UgQGEgZgorCisgICAgICAgIEByZXR1cm4gVGhlIHN0cmluZyBAYSBzIHdoZXJlIGFsbCBvY2N1
cnJlbmNlcyBvZiBAYSBmIGFyZSByZXBsYWNlZAorICAgICAgICAgICAgICAgIHdpdGggQGEgdC4K
KworICAgICAgICBAcHJlIFRoZSBzZWFyY2ggc3RyaW5nIEBhIGYgbXVzdCBub3QgYmUgZW1wdHku
CisKKyAgICAgICAgQHNpbmNlIHZlcnNpb24gMi4wLjAKKyAgICAgICAgKi8KKyAgICAgICAgc3Rh
dGljIHZvaWQgcmVwbGFjZV9zdWJzdHJpbmcoc3RkOjpzdHJpbmcmIHMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdCkKKyAgICAg
ICAgeworICAgICAgICAgICAgYXNzZXJ0KG5vdCBmLmVtcHR5KCkpOworCisgICAgICAgICAgICBm
b3IgKAorICAgICAgICAgICAgICAgIHNpemVfdCBwb3MgPSBzLmZpbmQoZik7ICAgICAgICAgLy8g
ZmluZCBmaXJzdCBvY2N1cnJlbmNlIG9mIGYKKyAgICAgICAgICAgICAgICBwb3MgIT0gc3RkOjpz
dHJpbmc6Om5wb3M7ICAgICAgIC8vIG1ha2Ugc3VyZSBmIHdhcyBmb3VuZAorICAgICAgICAgICAg
ICAgIHMucmVwbGFjZShwb3MsIGYuc2l6ZSgpLCB0KSwgICAgLy8gcmVwbGFjZSB3aXRoIHQKKyAg
ICAgICAgICAgICAgICBwb3MgPSBzLmZpbmQoZiwgcG9zICsgdC5zaXplKCkpIC8vIGZpbmQgbmV4
dCBvY2N1cnJlbmNlIG9mIGYKKyAgICAgICAgICAgICk7CisgICAgICAgIH0KKworICAgICAgICAv
Ly8gZXNjYXBlIHRpbGRlIGFuZCBzbGFzaAorICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgZXNj
YXBlKHN0ZDo6c3RyaW5nIHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGVzY2FwZSAifiIi
IHRvICJ+MCIgYW5kICIvIiB0byAifjEiCisgICAgICAgICAgICByZXBsYWNlX3N1YnN0cmluZyhz
LCAifiIsICJ+MCIpOworICAgICAgICAgICAgcmVwbGFjZV9zdWJzdHJpbmcocywgIi8iLCAifjEi
KTsKKyAgICAgICAgICAgIHJldHVybiBzOworICAgICAgICB9CisKKyAgICAgICAgLy8vIHVuZXNj
YXBlIHRpbGRlIGFuZCBzbGFzaAorICAgICAgICBzdGF0aWMgdm9pZCB1bmVzY2FwZShzdGQ6OnN0
cmluZyYgcykKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZmlyc3QgdHJhbnNmb3JtIGFueSBv
Y2N1cnJlbmNlIG9mIHRoZSBzZXF1ZW5jZSAnfjEnIHRvICcvJworICAgICAgICAgICAgcmVwbGFj
ZV9zdWJzdHJpbmcocywgIn4xIiwgIi8iKTsKKyAgICAgICAgICAgIC8vIHRoZW4gdHJhbnNmb3Jt
IGFueSBvY2N1cnJlbmNlIG9mIHRoZSBzZXF1ZW5jZSAnfjAnIHRvICd+JworICAgICAgICAgICAg
cmVwbGFjZV9zdWJzdHJpbmcocywgIn4wIiwgIn4iKTsKKyAgICAgICAgfQorCisgICAgICAgIC8q
IQorICAgICAgICBAcGFyYW1baW5dIHJlZmVyZW5jZV9zdHJpbmcgIHRoZSByZWZlcmVuY2Ugc3Ry
aW5nIHRvIHRoZSBjdXJyZW50IHZhbHVlCisgICAgICAgIEBwYXJhbVtpbl0gdmFsdWUgICAgICAg
ICAgICAgdGhlIHZhbHVlIHRvIGNvbnNpZGVyCisgICAgICAgIEBwYXJhbVtpbixvdXRdIHJlc3Vs
dCAgICAgICAgdGhlIHJlc3VsdCBvYmplY3QgdG8gaW5zZXJ0IHZhbHVlcyB0bworCisgICAgICAg
IEBub3RlIEVtcHR5IG9iamVjdHMgb3IgYXJyYXlzIGFyZSBmbGF0dGVuZWQgdG8gYG51bGxgLgor
ICAgICAgICAqLworICAgICAgICBzdGF0aWMgdm9pZCBmbGF0dGVuKGNvbnN0IHN0ZDo6c3RyaW5n
JiByZWZlcmVuY2Vfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJh
c2ljX2pzb24mIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX2pzb24m
IHJlc3VsdCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5tX3R5cGUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tX3ZhbHVlLmFycmF5
LT5lbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBmbGF0dGVuIGVtcHR5IGFycmF5IGFzIG51bGwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdFtyZWZlcmVuY2Vfc3RyaW5nXSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBpdGVyYXRlIGFycmF5IGFuZCB1c2UgaW5kZXggYXMgcmVm
ZXJlbmNlIHN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB2YWx1ZS5tX3ZhbHVlLmFycmF5LT5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGF0dGVuKHJlZmVyZW5jZV9z
dHJpbmcgKyAiLyIgKyBzdGQ6OnRvX3N0cmluZyhpKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlLm1fdmFsdWUuYXJyYXktPm9wZXJhdG9yW10oaSksIHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBpZiAodmFsdWUubV92YWx1ZS5vYmplY3QtPmVtcHR5KCkpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZsYXR0ZW4gZW1wdHkgb2JqZWN0
IGFzIG51bGwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtyZWZlcmVuY2Vfc3RyaW5n
XSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBp
dGVyYXRlIG9iamVjdCBhbmQgdXNlIGtleXMgYXMgcmVmZXJlbmNlIHN0cmluZworICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBlbGVtZW50IDogKnZhbHVlLm1fdmFsdWUu
b2JqZWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZsYXR0ZW4ocmVmZXJlbmNlX3N0cmluZyArICIvIiArIGVzY2FwZShlbGVtZW50LmZp
cnN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2Vjb25k
LCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAvLyBhZGQgcHJpbWl0aXZlIHZhbHVlIHdpdGggaXRzIHJlZmVyZW5jZSBzdHJpbmcKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0W3JlZmVyZW5jZV9zdHJpbmddID0gdmFsdWU7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAgICBAcGFyYW1baW5dIHZhbHVlICBmbGF0
dGVuZWQgSlNPTgorCisgICAgICAgIEByZXR1cm4gdW5mbGF0dGVuZWQgSlNPTgorICAgICAgICAq
LworICAgICAgICBzdGF0aWMgYmFzaWNfanNvbiB1bmZsYXR0ZW4oY29uc3QgYmFzaWNfanNvbiYg
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChub3QgdmFsdWUuaXNfb2JqZWN0KCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+
KCJvbmx5IG9iamVjdHMgY2FuIGJlIHVuZmxhdHRlbmVkIik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGJhc2ljX2pzb24gcmVzdWx0OworCisgICAgICAgICAgICAvLyBpdGVyYXRlIHRo
ZSBKU09OIG9iamVjdCB2YWx1ZXMKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgZWxlbWVu
dCA6ICp2YWx1ZS5tX3ZhbHVlLm9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAobm90IGVsZW1lbnQuc2Vjb25kLmlzX3ByaW1pdGl2ZSgpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJ2YWx1ZXMg
aW4gb2JqZWN0IG11c3QgYmUgcHJpbWl0aXZlIik7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgLy8gYXNzaWduIHZhbHVlIHRvIHJlZmVyZW5jZSBwb2ludGVkIHRvIGJ5IEpT
T04gcG9pbnRlcjsgTm90ZQorICAgICAgICAgICAgICAgIC8vIHRoYXQgaWYgdGhlIEpTT04gcG9p
bnRlciBpcyAiIiAoaS5lLiwgcG9pbnRzIHRvIHRoZSB3aG9sZQorICAgICAgICAgICAgICAgIC8v
IHZhbHVlKSwgZnVuY3Rpb24gZ2V0X2FuZF9jcmVhdGUgcmV0dXJucyBhIHJlZmVyZW5jZSB0bwor
ICAgICAgICAgICAgICAgIC8vIHJlc3VsdCBpdHNlbGYuIEFuIGFzc2lnbm1lbnQgd2lsbCB0aGVu
IGNyZWF0ZSBhIHByaW1pdGl2ZQorICAgICAgICAgICAgICAgIC8vIHZhbHVlLgorICAgICAgICAg
ICAgICAgIGpzb25fcG9pbnRlcihlbGVtZW50LmZpcnN0KS5nZXRfYW5kX2NyZWF0ZShyZXN1bHQp
ID0gZWxlbWVudC5zZWNvbmQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgLy8vIHRoZSByZWZl
cmVuY2UgdG9rZW5zCisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiByZWZlcmVuY2Vf
dG9rZW5zIHt9OworICAgIH07CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAg
IC8vIEpTT04gUG9pbnRlciBzdXBwb3J0IC8vCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KKworICAgIC8vLyBAbmFtZSBKU09OIFBvaW50ZXIgZnVuY3Rpb25zCisgICAgLy8vIEB7CisK
KyAgICAvKiEKKyAgICBAYnJpZWYgYWNjZXNzIHNwZWNpZmllZCBlbGVtZW50IHZpYSBKU09OIFBv
aW50ZXIKKworICAgIFVzZXMgYSBKU09OIHBvaW50ZXIgdG8gcmV0cmlldmUgYSByZWZlcmVuY2Ug
dG8gdGhlIHJlc3BlY3RpdmUgSlNPTiB2YWx1ZS4KKyAgICBObyBib3VuZCBjaGVja2luZyBpcyBw
ZXJmb3JtZWQuIFNpbWlsYXIgdG8gQHJlZiBvcGVyYXRvcltdKGNvbnN0IHR5cGVuYW1lCisgICAg
b2JqZWN0X3Q6OmtleV90eXBlJiksIGBudWxsYCB2YWx1ZXMgYXJlIGNyZWF0ZWQgaW4gYXJyYXlz
IGFuZCBvYmplY3RzIGlmCisgICAgbmVjZXNzYXJ5LgorCisgICAgSW4gcGFydGljdWxhcjoKKyAg
ICAtIElmIHRoZSBKU09OIHBvaW50ZXIgcG9pbnRzIHRvIGFuIG9iamVjdCBrZXkgdGhhdCBkb2Vz
IG5vdCBleGlzdCwgaXQKKyAgICAgIGlzIGNyZWF0ZWQgYW4gZmlsbGVkIHdpdGggYSBgbnVsbGAg
dmFsdWUgYmVmb3JlIGEgcmVmZXJlbmNlIHRvIGl0CisgICAgICBpcyByZXR1cm5lZC4KKyAgICAt
IElmIHRoZSBKU09OIHBvaW50ZXIgcG9pbnRzIHRvIGFuIGFycmF5IGluZGV4IHRoYXQgZG9lcyBu
b3QgZXhpc3QsIGl0CisgICAgICBpcyBjcmVhdGVkIGFuIGZpbGxlZCB3aXRoIGEgYG51bGxgIHZh
bHVlIGJlZm9yZSBhIHJlZmVyZW5jZSB0byBpdAorICAgICAgaXMgcmV0dXJuZWQuIEFsbCBpbmRp
Y2VzIGJldHdlZW4gdGhlIGN1cnJlbnQgbWF4aW11bSBhbmQgdGhlIGdpdmVuCisgICAgICBpbmRl
eCBhcmUgYWxzbyBmaWxsZWQgd2l0aCBgbnVsbGAuCisgICAgLSBUaGUgc3BlY2lhbCB2YWx1ZSBg
LWAgaXMgdHJlYXRlZCBhcyBhIHN5bm9ueW0gZm9yIHRoZSBpbmRleCBwYXN0IHRoZQorICAgICAg
ZW5kLgorCisgICAgQHBhcmFtW2luXSBwdHIgIGEgSlNPTiBwb2ludGVyCisKKyAgICBAcmV0dXJu
IHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCBwb2ludGVkIHRvIGJ5IEBhIHB0cgorCisgICAgQGNv
bXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2UgICAgICBp
ZiB0aGUgSlNPTiBwb2ludGVyIGNhbiBub3QgYmUgcmVzb2x2ZWQKKyAgICBAdGhyb3cgc3RkOjpk
b21haW5fZXJyb3IgICAgICBpZiBhbiBhcnJheSBpbmRleCBiZWdpbnMgd2l0aCAnMCcKKyAgICBA
dGhyb3cgc3RkOjppbnZhbGlkX2FyZ3VtZW50ICBpZiBhbiBhcnJheSBpbmRleCB3YXMgbm90IGEg
bnVtYmVyCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGJlaGF2aW9yIGlzIHNob3duIGluIHRoZSBl
eGFtcGxlLixvcGVyYXRvcmpzb25fcG9pbnRlcn0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDIuMC4w
CisgICAgKi8KKyAgICByZWZlcmVuY2Ugb3BlcmF0b3JbXShjb25zdCBqc29uX3BvaW50ZXImIHB0
cikKKyAgICB7CisgICAgICAgIHJldHVybiBwdHIuZ2V0X3VuY2hlY2tlZCh0aGlzKTsKKyAgICB9
CisKKyAgICAvKiEKKyAgICBAYnJpZWYgYWNjZXNzIHNwZWNpZmllZCBlbGVtZW50IHZpYSBKU09O
IFBvaW50ZXIKKworICAgIFVzZXMgYSBKU09OIHBvaW50ZXIgdG8gcmV0cmlldmUgYSByZWZlcmVu
Y2UgdG8gdGhlIHJlc3BlY3RpdmUgSlNPTiB2YWx1ZS4KKyAgICBObyBib3VuZCBjaGVja2luZyBp
cyBwZXJmb3JtZWQuIFRoZSBmdW5jdGlvbiBkb2VzIG5vdCBjaGFuZ2UgdGhlIEpTT04KKyAgICB2
YWx1ZTsgbm8gYG51bGxgIHZhbHVlcyBhcmUgY3JlYXRlZC4gSW4gcGFydGljdWxhciwgdGhlIHRo
ZSBzcGVjaWFsIHZhbHVlCisgICAgYC1gIHlpZWxkcyBhbiBleGNlcHRpb24uCisKKyAgICBAcGFy
YW1baW5dIHB0ciAgSlNPTiBwb2ludGVyIHRvIHRoZSBkZXNpcmVkIGVsZW1lbnQKKworICAgIEBy
ZXR1cm4gY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IHBvaW50ZWQgdG8gYnkgQGEgcHRy
CisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEB0aHJvdyBzdGQ6Om91dF9vZl9y
YW5nZSAgICAgIGlmIHRoZSBKU09OIHBvaW50ZXIgY2FuIG5vdCBiZSByZXNvbHZlZAorICAgIEB0
aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciAgICAgIGlmIGFuIGFycmF5IGluZGV4IGJlZ2lucyB3aXRo
ICcwJworICAgIEB0aHJvdyBzdGQ6OmludmFsaWRfYXJndW1lbnQgIGlmIGFuIGFycmF5IGluZGV4
IHdhcyBub3QgYSBudW1iZXIKKworICAgIEBsaXZlZXhhbXBsZXtUaGUgYmVoYXZpb3IgaXMgc2hv
d24gaW4gdGhlIGV4YW1wbGUuLG9wZXJhdG9yanNvbl9wb2ludGVyX2NvbnN0fQorCisgICAgQHNp
bmNlIHZlcnNpb24gMi4wLjAKKyAgICAqLworICAgIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltd
KGNvbnN0IGpzb25fcG9pbnRlciYgcHRyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHB0
ci5nZXRfdW5jaGVja2VkKHRoaXMpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBhY2Nl
c3Mgc3BlY2lmaWVkIGVsZW1lbnQgdmlhIEpTT04gUG9pbnRlcgorCisgICAgUmV0dXJucyBhIHJl
ZmVyZW5jZSB0byB0aGUgZWxlbWVudCBhdCB3aXRoIHNwZWNpZmllZCBKU09OIHBvaW50ZXIgQGEg
cHRyLAorICAgIHdpdGggYm91bmRzIGNoZWNraW5nLgorCisgICAgQHBhcmFtW2luXSBwdHIgIEpT
T04gcG9pbnRlciB0byB0aGUgZGVzaXJlZCBlbGVtZW50CisKKyAgICBAcmV0dXJuIHJlZmVyZW5j
ZSB0byB0aGUgZWxlbWVudCBwb2ludGVkIHRvIGJ5IEBhIHB0cgorCisgICAgQGNvbXBsZXhpdHkg
Q29uc3RhbnQuCisKKyAgICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2UgICAgICBpZiB0aGUgSlNP
TiBwb2ludGVyIGNhbiBub3QgYmUgcmVzb2x2ZWQKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJy
b3IgICAgICBpZiBhbiBhcnJheSBpbmRleCBiZWdpbnMgd2l0aCAnMCcKKyAgICBAdGhyb3cgc3Rk
OjppbnZhbGlkX2FyZ3VtZW50ICBpZiBhbiBhcnJheSBpbmRleCB3YXMgbm90IGEgbnVtYmVyCisK
KyAgICBAbGl2ZWV4YW1wbGV7VGhlIGJlaGF2aW9yIGlzIHNob3duIGluIHRoZSBleGFtcGxlLixh
dF9qc29uX3BvaW50ZXJ9CisKKyAgICBAc2luY2UgdmVyc2lvbiAyLjAuMAorICAgICovCisgICAg
cmVmZXJlbmNlIGF0KGNvbnN0IGpzb25fcG9pbnRlciYgcHRyKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHB0ci5nZXRfY2hlY2tlZCh0aGlzKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYg
YWNjZXNzIHNwZWNpZmllZCBlbGVtZW50IHZpYSBKU09OIFBvaW50ZXIKKworICAgIFJldHVybnMg
YSBjb25zdCByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgYXQgd2l0aCBzcGVjaWZpZWQgSlNPTiBw
b2ludGVyIEBhCisgICAgcHRyLCB3aXRoIGJvdW5kcyBjaGVja2luZy4KKworICAgIEBwYXJhbVtp
bl0gcHRyICBKU09OIHBvaW50ZXIgdG8gdGhlIGRlc2lyZWQgZWxlbWVudAorCisgICAgQHJldHVy
biByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgcG9pbnRlZCB0byBieSBAYSBwdHIKKworICAgIEBj
b21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQHRocm93IHN0ZDo6b3V0X29mX3JhbmdlICAgICAg
aWYgdGhlIEpTT04gcG9pbnRlciBjYW4gbm90IGJlIHJlc29sdmVkCisgICAgQHRocm93IHN0ZDo6
ZG9tYWluX2Vycm9yICAgICAgaWYgYW4gYXJyYXkgaW5kZXggYmVnaW5zIHdpdGggJzAnCisgICAg
QHRocm93IHN0ZDo6aW52YWxpZF9hcmd1bWVudCAgaWYgYW4gYXJyYXkgaW5kZXggd2FzIG5vdCBh
IG51bWJlcgorCisgICAgQGxpdmVleGFtcGxle1RoZSBiZWhhdmlvciBpcyBzaG93biBpbiB0aGUg
ZXhhbXBsZS4sYXRfanNvbl9wb2ludGVyX2NvbnN0fQorCisgICAgQHNpbmNlIHZlcnNpb24gMi4w
LjAKKyAgICAqLworICAgIGNvbnN0X3JlZmVyZW5jZSBhdChjb25zdCBqc29uX3BvaW50ZXImIHB0
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBwdHIuZ2V0X2NoZWNrZWQodGhpcyk7Cisg
ICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIHJldHVybiBmbGF0dGVuZWQgSlNPTiB2YWx1ZQor
CisgICAgVGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYSBKU09OIG9iamVjdCB3aG9zZSBrZXlzIGFyZSBK
U09OIHBvaW50ZXJzIChzZWUgW1JGQworICAgIDY5MDFdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcv
aHRtbC9yZmM2OTAxKSkgYW5kIHdob3NlIHZhbHVlcyBhcmUgYWxsCisgICAgcHJpbWl0aXZlLiBU
aGUgb3JpZ2luYWwgSlNPTiB2YWx1ZSBjYW4gYmUgcmVzdG9yZWQgdXNpbmcgdGhlIEByZWYKKyAg
ICB1bmZsYXR0ZW4oKSBmdW5jdGlvbi4KKworICAgIEByZXR1cm4gYW4gb2JqZWN0IHRoYXQgbWFw
cyBKU09OIHBvaW50ZXJzIHRvIHByaW1pdHZlIHZhbHVlcworCisgICAgQG5vdGUgRW1wdHkgb2Jq
ZWN0cyBhbmQgYXJyYXlzIGFyZSBmbGF0dGVuZWQgdG8gYG51bGxgIGFuZCB3aWxsIG5vdCBiZQor
ICAgICAgICAgIHJlY29uc3RydWN0ZWQgY29ycmVjdGx5IGJ5IHRoZSBAcmVmIHVuZmxhdHRlbigp
IGZ1bmN0aW9uLgorCisgICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIHRoZSBzaXplIHRoZSBKU09O
IHZhbHVlLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29kZSBzaG93cyBob3cg
YSBKU09OIG9iamVjdCBpcyBmbGF0dGVuZWQgdG8gYW4KKyAgICBvYmplY3Qgd2hvc2Uga2V5cyBj
b25zaXN0IG9mIEpTT04gcG9pbnRlcnMuLGZsYXR0ZW59CisKKyAgICBAc2EgQHJlZiB1bmZsYXR0
ZW4oKSBmb3IgdGhlIHJldmVyc2UgZnVuY3Rpb24KKworICAgIEBzaW5jZSB2ZXJzaW9uIDIuMC4w
CisgICAgKi8KKyAgICBiYXNpY19qc29uIGZsYXR0ZW4oKSBjb25zdAorICAgIHsKKyAgICAgICAg
YmFzaWNfanNvbiByZXN1bHQodmFsdWVfdDo6b2JqZWN0KTsKKyAgICAgICAganNvbl9wb2ludGVy
OjpmbGF0dGVuKCIiLCAqdGhpcywgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgdW5mbGF0dGVuIGEgcHJldmlvdXNseSBmbGF0dGVu
ZWQgSlNPTiB2YWx1ZQorCisgICAgVGhlIGZ1bmN0aW9uIHJlc3RvcmVzIHRoZSBhcmJpdHJhcnkg
bmVzdGluZyBvZiBhIEpTT04gdmFsdWUgdGhhdCBoYXMgYmVlbgorICAgIGZsYXR0ZW5lZCBiZWZv
cmUgdXNpbmcgdGhlIEByZWYgZmxhdHRlbigpIGZ1bmN0aW9uLiBUaGUgSlNPTiB2YWx1ZSBtdXN0
CisgICAgbWVldCBjZXJ0YWluIGNvbnN0cmFpbnRzOgorICAgIDEuIFRoZSB2YWx1ZSBtdXN0IGJl
IGFuIG9iamVjdC4KKyAgICAyLiBUaGUga2V5cyBtdXN0IGJlIEpTT04gcG9pbnRlcnMgKHNlZQor
ICAgICAgIFtSRkMgNjkwMV0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY5MDEpKQor
ICAgIDMuIFRoZSBtYXBwZWQgdmFsdWVzIG11c3QgYmUgcHJpbWl0aXZlIEpTT04gdHlwZXMuCisK
KyAgICBAcmV0dXJuIHRoZSBvcmlnaW5hbCBKU09OIGZyb20gYSBmbGF0dGVuZWQgdmVyc2lvbgor
CisgICAgQG5vdGUgRW1wdHkgb2JqZWN0cyBhbmQgYXJyYXlzIGFyZSBmbGF0dGVuZWQgYnkgQHJl
ZiBmbGF0dGVuKCkgdG8gYG51bGxgCisgICAgICAgICAgdmFsdWVzIGFuZCBjYW4gbm90IHVuZmxh
dHRlbmVkIHRvIHRoZWlyIG9yaWdpbmFsIHR5cGUuIEFwYXJ0IGZyb20KKyAgICAgICAgICB0aGlz
IGV4YW1wbGUsIGZvciBhIEpTT04gdmFsdWUgYGpgLCB0aGUgZm9sbG93aW5nIGlzIGFsd2F5cyB0
cnVlOgorICAgICAgICAgIGBqID09IGouZmxhdHRlbigpLnVuZmxhdHRlbigpYC4KKworICAgIEBj
b21wbGV4aXR5IExpbmVhciBpbiB0aGUgc2l6ZSB0aGUgSlNPTiB2YWx1ZS4KKworICAgIEBsaXZl
ZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgaG93IGEgZmxhdHRlbmVkIEpTT04gb2Jq
ZWN0IGlzCisgICAgdW5mbGF0dGVuZWQgaW50byB0aGUgb3JpZ2luYWwgbmVzdGVkIEpTT04gb2Jq
ZWN0Lix1bmZsYXR0ZW59CisKKyAgICBAc2EgQHJlZiBmbGF0dGVuKCkgZm9yIHRoZSByZXZlcnNl
IGZ1bmN0aW9uCisKKyAgICBAc2luY2UgdmVyc2lvbiAyLjAuMAorICAgICovCisgICAgYmFzaWNf
anNvbiB1bmZsYXR0ZW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzb25fcG9pbnRl
cjo6dW5mbGF0dGVuKCp0aGlzKTsKKyAgICB9CisKKyAgICAvLy8gQH0KKworICAgIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy8gSlNPTiBQYXRjaCBmdW5jdGlvbnMgLy8KKyAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgLy8vIEBuYW1lIEpTT04gUGF0Y2ggZnVu
Y3Rpb25zCisgICAgLy8vIEB7CisKKyAgICAvKiEKKyAgICBAYnJpZWYgYXBwbGllcyBhIEpTT04g
cGF0Y2gKKworICAgIFtKU09OIFBhdGNoXShodHRwOi8vanNvbnBhdGNoLmNvbSkgZGVmaW5lcyBh
IEpTT04gZG9jdW1lbnQgc3RydWN0dXJlIGZvcgorICAgIGV4cHJlc3NpbmcgYSBzZXF1ZW5jZSBv
ZiBvcGVyYXRpb25zIHRvIGFwcGx5IHRvIGEgSlNPTikgZG9jdW1lbnQuIFdpdGgKKyAgICB0aGlz
IGZ1bmNpb24sIGEgSlNPTiBQYXRjaCBpcyBhcHBsaWVkIHRvIHRoZSBjdXJyZW50IEpTT04gdmFs
dWUgYnkKKyAgICBleGVjdXRpbmcgYWxsIG9wZXJhdGlvbnMgZnJvbSB0aGUgcGF0Y2guCisKKyAg
ICBAcGFyYW1baW5dIGpzb25fcGF0Y2ggIEpTT04gcGF0Y2ggZG9jdW1lbnQKKyAgICBAcmV0dXJu
IHBhdGNoZWQgZG9jdW1lbnQKKworICAgIEBub3RlIFRoZSBhcHBsaWNhdGlvbiBvZiBhIHBhdGNo
IGlzIGF0b21pYzogRWl0aGVyIGFsbCBvcGVyYXRpb25zIHN1Y2NlZWQKKyAgICAgICAgICBhbmQg
dGhlIHBhdGNoZWQgZG9jdW1lbnQgaXMgcmV0dXJuZWQgb3IgYW4gZXhjZXB0aW9uIGlzIHRocm93
bi4gSW4KKyAgICAgICAgICBhbnkgY2FzZSwgdGhlIG9yaWdpbmFsIHZhbHVlIGlzIG5vdCBjaGFu
Z2VkOiB0aGUgcGF0Y2ggaXMgYXBwbGllZAorICAgICAgICAgIHRvIGEgY29weSBvZiB0aGUgdmFs
dWUuCisKKyAgICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2UgaWYgYSBKU09OIHBvaW50ZXIgaW5z
aWRlIHRoZSBwYXRjaCBjb3VsZCBub3QKKyAgICBiZSByZXNvbHZlZCBzdWNjZXNzZnVsbHkgaW4g
dGhlIGN1cnJlbnQgSlNPTiB2YWx1ZTsgZXhhbXBsZTogYCJrZXkgYmF6CisgICAgbm90IGZvdW5k
ImAKKyAgICBAdGhyb3cgaW52YWxpZF9hcmd1bWVudCBpZiB0aGUgSlNPTiBwYXRjaCBpcyBtYWxm
b3JtZWQgKGUuZy4sIG1hbmRhdG9yeQorICAgIGF0dHJpYnV0ZXMgYXJlIG1pc3NpbmcpOyBleGFt
cGxlOiBgIm9wZXJhdGlvbiBhZGQgbXVzdCBoYXZlIG1lbWJlciBwYXRoImAKKworICAgIEBjb21w
bGV4aXR5IExpbmVhciBpbiB0aGUgc2l6ZSBvZiB0aGUgSlNPTiB2YWx1ZSBhbmQgdGhlIGxlbmd0
aCBvZiB0aGUKKyAgICBKU09OIHBhdGNoLiBBcyB1c3VhbGx5IG9ubHkgYSBmcmFjdGlvbiBvZiB0
aGUgSlNPTiB2YWx1ZSBpcyBhZmZlY3RlZCBieQorICAgIHRoZSBwYXRjaCwgdGhlIGNvbXBsZXhp
dHkgY2FuIHVzdWFsbHkgYmUgbmVnbGVjdGVkLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBmb2xs
b3dpbmcgY29kZSBzaG93cyBob3cgYSBKU09OIHBhdGNoIGlzIGFwcGxpZWQgdG8gYQorICAgIHZh
bHVlLixwYXRjaH0KKworICAgIEBzYSBAcmVmIGRpZmYgLS0gY3JlYXRlIGEgSlNPTiBwYXRjaCBi
eSBjb21wYXJpbmcgdHdvIEpTT04gdmFsdWVzCisKKyAgICBAc2EgW1JGQyA2OTAyIChKU09OIFBh
dGNoKV0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY5MDIpCisgICAgQHNhIFtSRkMg
NjkwMSAoSlNPTiBQb2ludGVyKV0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY5MDEp
CisKKyAgICBAc2luY2UgdmVyc2lvbiAyLjAuMAorICAgICovCisgICAgYmFzaWNfanNvbiBwYXRj
aChjb25zdCBiYXNpY19qc29uJiBqc29uX3BhdGNoKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8g
bWFrZSBhIHdvcmtpbmcgY29weSB0byBhcHBseSB0aGUgcGF0Y2ggdG8KKyAgICAgICAgYmFzaWNf
anNvbiByZXN1bHQgPSAqdGhpczsKKworICAgICAgICAvLyB0aGUgdmFsaWQgSlNPTiBQYXRjaCBv
cGVyYXRpb25zCisgICAgICAgIGVudW0gY2xhc3MgcGF0Y2hfb3BlcmF0aW9ucyB7YWRkLCByZW1v
dmUsIHJlcGxhY2UsIG1vdmUsIGNvcHksIHRlc3QsIGludmFsaWR9OworCisgICAgICAgIGNvbnN0
IGF1dG8gZ2V0X29wID0gW10oY29uc3Qgc3RkOjpzdHJpbmcgb3ApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChvcCA9PSAiYWRkIikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcGF0Y2hfb3BlcmF0aW9uczo6YWRkOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKG9wID09ICJyZW1vdmUiKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBwYXRjaF9vcGVyYXRpb25zOjpyZW1vdmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAob3AgPT0gInJlcGxhY2UiKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBwYXRjaF9vcGVyYXRpb25zOjpyZXBsYWNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKG9wID09ICJtb3ZlIikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cGF0Y2hfb3BlcmF0aW9uczo6bW92ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChv
cCA9PSAiY29weSIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhdGNo
X29wZXJhdGlvbnM6OmNvcHk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob3AgPT0g
InRlc3QiKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwYXRjaF9vcGVy
YXRpb25zOjp0ZXN0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gcGF0Y2hf
b3BlcmF0aW9uczo6aW52YWxpZDsKKyAgICAgICAgfTsKKworICAgICAgICAvLyB3cmFwcGVyIGZv
ciAiYWRkIiBvcGVyYXRpb247IGFkZCB2YWx1ZSBhdCBwdHIKKyAgICAgICAgY29uc3QgYXV0byBv
cGVyYXRpb25fYWRkID0gWyZyZXN1bHRdKGpzb25fcG9pbnRlciAmIHB0ciwgYmFzaWNfanNvbiB2
YWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGFkZGluZyB0byB0aGUgcm9vdCBvZiB0aGUg
dGFyZ2V0IGRvY3VtZW50IG1lYW5zIHJlcGxhY2luZyBpdAorICAgICAgICAgICAgaWYgKHB0ci5p
c19yb290KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdmFsOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgdG9wIGVsZW1lbnQgb2YgdGhlIHBvaW50ZXIgZXhpc3Rz
CisgICAgICAgICAgICAgICAganNvbl9wb2ludGVyIHRvcF9wb2ludGVyID0gcHRyLnRvcCgpOwor
ICAgICAgICAgICAgICAgIGlmICh0b3BfcG9pbnRlciAhPSBwdHIpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXQodG9wX3BvaW50ZXIpOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGdldCByZWZlcmVuY2UgdG8gcGFyZW50IG9m
IEpTT04gcG9pbnRlciBwdHIKKyAgICAgICAgICAgICAgICBjb25zdCBhdXRvIGxhc3RfcGF0aCA9
IHB0ci5wb3BfYmFjaygpOworICAgICAgICAgICAgICAgIGJhc2ljX2pzb24mIHBhcmVudCA9IHJl
c3VsdFtwdHJdOworCisgICAgICAgICAgICAgICAgc3dpdGNoIChwYXJlbnQubV90eXBlKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudWxsOgor
ICAgICAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlIG9wZXJhdG9yW10gdG8gYWRk
IHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRbbGFzdF9wYXRoXSA9IHZhbDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RfcGF0aCA9PSAiLSIpCisg
ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
c3BlY2lhbCBjYXNlOiBhcHBlbmQgdG8gYmFjaworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmVudC5wdXNoX2JhY2sodmFsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdXRvIGlkeCA9IHN0ZDo6c3RvaShsYXN0X3Bh
dGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3R5
cGU+KGlkeCkgPiBwYXJlbnQuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXZvaWQgdW5kZWZpbmVkIGJlaGF2
aW9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6b3V0X29mX3Jh
bmdlPigiYXJyYXkgaW5kZXggIiArIHN0ZDo6dG9fc3RyaW5nKGlkeCkgKyAiIGlzIG91dCBvZiBy
YW5nZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IGNhc2U6IGluc2VydCBhZGQgb2Zmc2V0
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5pbnNlcnQocGFyZW50LmJl
Z2luKCkgKyBzdGF0aWNfY2FzdDxkaWZmZXJlbmNlX3R5cGU+KGlkeCksIHZhbCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBleGlzdHMgYSBwYXJlbnQgaXQgY2Fubm90IGJlIHBy
aW1pdGl2ZQorICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsgIC8vIExDT1Zf
RVhDTF9MSU5FCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgLy8gd3JhcHBlciBmb3IgInJlbW92ZSIg
b3BlcmF0aW9uOyByZW1vdmUgdmFsdWUgYXQgcHRyCisgICAgICAgIGNvbnN0IGF1dG8gb3BlcmF0
aW9uX3JlbW92ZSA9IFsmcmVzdWx0XShqc29uX3BvaW50ZXIgJiBwdHIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIC8vIGdldCByZWZlcmVuY2UgdG8gcGFyZW50IG9mIEpTT04gcG9pbnRlciBwdHIK
KyAgICAgICAgICAgIGNvbnN0IGF1dG8gbGFzdF9wYXRoID0gcHRyLnBvcF9iYWNrKCk7CisgICAg
ICAgICAgICBiYXNpY19qc29uJiBwYXJlbnQgPSByZXN1bHQuYXQocHRyKTsKKworICAgICAgICAg
ICAgLy8gcmVtb3ZlIGNoaWxkCisgICAgICAgICAgICBpZiAocGFyZW50LmlzX29iamVjdCgpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIHBlcmZvcm0gcmFuZ2UgY2hlY2sKKyAg
ICAgICAgICAgICAgICBhdXRvIGl0ID0gcGFyZW50LmZpbmQobGFzdF9wYXRoKTsKKyAgICAgICAg
ICAgICAgICBpZiAoaXQgIT0gcGFyZW50LmVuZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcGFyZW50LmVyYXNlKGl0KTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
VGhyb3c8c3RkOjpvdXRfb2ZfcmFuZ2U+KCJrZXkgJyIgKyBsYXN0X3BhdGggKyAiJyBub3QgZm91
bmQiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IGlmIChwYXJlbnQuaXNfYXJyYXkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAv
LyBub3RlIGVyYXNlIHBlcmZvcm1zIHJhbmdlIGNoZWNrCisgICAgICAgICAgICAgICAgcGFyZW50
LmVyYXNlKHN0YXRpY19jYXN0PHNpemVfdHlwZT4oc3RkOjpzdG9pKGxhc3RfcGF0aCkpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICAvLyB0eXBlIGNoZWNrCisgICAgICAg
IGlmIChub3QganNvbl9wYXRjaC5pc19hcnJheSgpKQorICAgICAgICB7CisgICAgICAgICAgICAv
LyBhIEpTT04gcGF0Y2ggbXVzdCBiZSBhbiBhcnJheSBvZiBvYmplY3RzCisgICAgICAgICAgICBU
aHJvdzxzdGQ6OmludmFsaWRfYXJndW1lbnQ+KCJKU09OIHBhdGNoIG11c3QgYmUgYW4gYXJyYXkg
b2Ygb2JqZWN0cyIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gaXRlcmF0ZSBhbmQgYXBwbHkg
dGggZW9wZXJhdGlvbnMKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiB2YWwgOiBqc29uX3BhdGNo
KQorICAgICAgICB7CisgICAgICAgICAgICAvLyB3cmFwcGVyIHRvIGdldCBhIHZhbHVlIGZvciBh
biBvcGVyYXRpb24KKyAgICAgICAgICAgIGNvbnN0IGF1dG8gZ2V0X3ZhbHVlID0gWyZ2YWxdKGNv
bnN0IHN0ZDo6c3RyaW5nICYgb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmIG1lbWJlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3RyaW5nX3R5cGUpIC0+IGJhc2ljX2pzb24mCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gZmluZCB2YWx1ZQorICAgICAgICAgICAg
ICAgIGF1dG8gaXQgPSB2YWwubV92YWx1ZS5vYmplY3QtPmZpbmQobWVtYmVyKTsKKworICAgICAg
ICAgICAgICAgIC8vIGNvbnRleHQtc2Vuc2l0aXZlIGVycm9yIG1lc3NhZ2UKKyAgICAgICAgICAg
ICAgICBjb25zdCBhdXRvIGVycm9yX21zZyA9IChvcCA9PSAib3AiKSA/ICJvcGVyYXRpb24iIDog
Im9wZXJhdGlvbiAnIiArIG9wICsgIiciOworCisgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYg
ZGVzaXJlZCB2YWx1ZSBpcyBwcmVzZW50CisgICAgICAgICAgICAgICAgaWYgKGl0ID09IHZhbC5t
X3ZhbHVlLm9iamVjdC0+ZW5kKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBUaHJvdzxzdGQ6OmludmFsaWRfYXJndW1lbnQ+KGVycm9yX21zZyArICIgbXVzdCBoYXZl
IG1lbWJlciAnIiArIG1lbWJlciArICInIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLy8gY2hlY2sgaWYgcmVzdWx0IGlzIG9mIHR5cGUgc3RyaW5nCisgICAgICAgICAg
ICAgICAgaWYgKHN0cmluZ190eXBlIGFuZCBub3QgaXQtPnNlY29uZC5pc19zdHJpbmcoKSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6aW52YWxpZF9h
cmd1bWVudD4oZXJyb3JfbXNnICsgIiBtdXN0IGhhdmUgc3RyaW5nIG1lbWJlciAnIiArIG1lbWJl
ciArICInIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gbm8gZXJy
b3I6IHJldHVybiB2YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAg
ICAgICAgICAgfTsKKworICAgICAgICAgICAgLy8gdHlwZSBjaGVjaworICAgICAgICAgICAgaWYg
KG5vdCB2YWwuaXNfb2JqZWN0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVGhy
b3c8c3RkOjppbnZhbGlkX2FyZ3VtZW50PigiSlNPTiBwYXRjaCBtdXN0IGJlIGFuIGFycmF5IG9m
IG9iamVjdHMiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gY29sbGVjdCBtYW5k
YXRvcnkgbWVtYmVycworICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgb3AgPSBnZXRfdmFs
dWUoIm9wIiwgIm9wIiwgdHJ1ZSk7CisgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBwYXRo
ID0gZ2V0X3ZhbHVlKG9wLCAicGF0aCIsIHRydWUpOworICAgICAgICAgICAganNvbl9wb2ludGVy
IHB0cihwYXRoKTsKKworICAgICAgICAgICAgc3dpdGNoIChnZXRfb3Aob3ApKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGNhc2UgcGF0Y2hfb3BlcmF0aW9uczo6YWRkOgorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uX2FkZChwdHIsIGdldF92
YWx1ZSgiYWRkIiwgInZhbHVlIiwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY2FzZSBwYXRjaF9vcGVyYXRp
b25zOjpyZW1vdmU6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvcGVy
YXRpb25fcmVtb3ZlKHB0cik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhc2UgcGF0Y2hfb3BlcmF0aW9uczo6cmVwbGFj
ZToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSAicGF0aCIg
bG9jYXRpb24gbXVzdCBleGlzdCAtIHVzZSBhdCgpCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5hdChwdHIpID0gZ2V0X3ZhbHVlKCJyZXBsYWNlIiwgInZhbHVlIiwgZmFsc2UpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBjYXNlIHBhdGNoX29wZXJhdGlvbnM6Om1vdmU6CisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyBmcm9tX3BhdGggPSBnZXRfdmFsdWUoIm1v
dmUiLCAiZnJvbSIsIHRydWUpOworICAgICAgICAgICAgICAgICAgICBqc29uX3BvaW50ZXIgZnJv
bV9wdHIoZnJvbV9wYXRoKTsKKworICAgICAgICAgICAgICAgICAgICAvLyB0aGUgImZyb20iIGxv
Y2F0aW9uIG11c3QgZXhpc3QgLSB1c2UgYXQoKQorICAgICAgICAgICAgICAgICAgICBiYXNpY19q
c29uIHYgPSByZXN1bHQuYXQoZnJvbV9wdHIpOworCisgICAgICAgICAgICAgICAgICAgIC8vIFRo
ZSBtb3ZlIG9wZXJhdGlvbiBpcyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvIGEKKyAgICAgICAg
ICAgICAgICAgICAgLy8gInJlbW92ZSIgb3BlcmF0aW9uIG9uIHRoZSAiZnJvbSIgbG9jYXRpb24s
IGZvbGxvd2VkCisgICAgICAgICAgICAgICAgICAgIC8vIGltbWVkaWF0ZWx5IGJ5IGFuICJhZGQi
IG9wZXJhdGlvbiBhdCB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIC8vIGxvY2F0aW9u
IHdpdGggdGhlIHZhbHVlIHRoYXQgd2FzIGp1c3QgcmVtb3ZlZC4KKyAgICAgICAgICAgICAgICAg
ICAgb3BlcmF0aW9uX3JlbW92ZShmcm9tX3B0cik7CisgICAgICAgICAgICAgICAgICAgIG9wZXJh
dGlvbl9hZGQocHRyLCB2KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgY2FzZSBwYXRjaF9vcGVyYXRpb25zOjpjb3B5Ogor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcg
ZnJvbV9wYXRoID0gZ2V0X3ZhbHVlKCJjb3B5IiwgImZyb20iLCB0cnVlKTs7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGpzb25fcG9pbnRlciBmcm9tX3B0cihmcm9tX3BhdGgpOworCisgICAg
ICAgICAgICAgICAgICAgIC8vIHRoZSAiZnJvbSIgbG9jYXRpb24gbXVzdCBleGlzdCAtIHVzZSBh
dCgpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtwdHJdID0gcmVzdWx0LmF0KGZyb21fcHRy
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgY2FzZSBwYXRjaF9vcGVyYXRpb25zOjp0ZXN0OgorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgInZhbHVlIiBtYXRjaGVzIHRoZSBv
bmUgYXQgInBhdGgiCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSAicGF0aCIgbG9jYXRpb24g
bXVzdCBleGlzdCAtIHVzZSBhdCgpCisgICAgICAgICAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9
IChyZXN1bHQuYXQocHRyKSA9PSBnZXRfdmFsdWUoInRlc3QiLCAidmFsdWUiLCBmYWxzZSkpOwor
CisgICAgICAgICAgICAgICAgICAgIC8vIHRocm93IGFuIGV4Y2VwdGlvbiBpZiB0ZXN0IGZhaWxz
CisgICAgICAgICAgICAgICAgICAgIGlmIChub3Qgc3VjY2VzcykKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJ1
bnN1Y2Nlc3NmdWw6ICIgKyB2YWwuZHVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIGNhc2UgcGF0Y2hfb3BlcmF0aW9uczo6aW52YWxpZDoKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIC8vIG9wIG11c3QgYmUgImFkZCIsICJyZW1vdmUiLCAicmVw
bGFjZSIsICJtb3ZlIiwgImNvcHkiLCBvcgorICAgICAgICAgICAgICAgICAgICAvLyAidGVzdCIK
KyAgICAgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjppbnZhbGlkX2FyZ3VtZW50Pigib3BlcmF0
aW9uIHZhbHVlICciICsgb3AgKyAiJyBpcyBpbnZhbGlkIik7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisKKyAgICAvKiEKKyAgICBAYnJpZWYgY3JlYXRlcyBhIGRpZmYgYXMgYSBKU09OIHBhdGNoCisK
KyAgICBDcmVhdGVzIGEgW0pTT04gUGF0Y2hdKGh0dHA6Ly9qc29ucGF0Y2guY29tKSBzbyB0aGF0
IHZhbHVlIEBhIHNvdXJjZSBjYW4KKyAgICBiZSBjaGFuZ2VkIGludG8gdGhlIHZhbHVlIEBhIHRh
cmdldCBieSBjYWxsaW5nIEByZWYgcGF0Y2ggZnVuY3Rpb24uCisKKyAgICBAaW52YXJpYW50IEZv
ciB0d28gSlNPTiB2YWx1ZXMgQGEgc291cmNlIGFuZCBAYSB0YXJnZXQsIHRoZSBmb2xsb3dpbmcg
Y29kZQorICAgIHlpZWxkcyBhbHdheXMgYHRydWVgOgorICAgIEBjb2RlIHsuY3BwfQorICAgIHNv
dXJjZS5wYXRjaChkaWZmKHNvdXJjZSwgdGFyZ2V0KSkgPT0gdGFyZ2V0OworICAgIEBlbmRjb2Rl
CisKKyAgICBAbm90ZSBDdXJyZW50bHksIG9ubHkgYHJlbW92ZWAsIGBhZGRgLCBhbmQgYHJlcGxh
Y2VgIG9wZXJhdGlvbnMgYXJlCisgICAgICAgICAgZ2VuZXJhdGVkLgorCisgICAgQHBhcmFtW2lu
XSBzb3VyY2UgIEpTT04gdmFsdWUgdG8gY29wYXJlIGZyb20KKyAgICBAcGFyYW1baW5dIHRhcmdl
dCAgSlNPTiB2YWx1ZSB0byBjb3BhcmUgYWdhaW5zdAorICAgIEBwYXJhbVtpbl0gcGF0aCAgICBo
ZWxwZXIgdmFsdWUgdG8gY3JlYXRlIEpTT04gcG9pbnRlcnMKKworICAgIEByZXR1cm4gYSBKU09O
IHBhdGNoIHRvIGNvbnZlcnQgdGhlIEBhIHNvdXJjZSB0byBAYSB0YXJnZXQKKworICAgIEBjb21w
bGV4aXR5IExpbmVhciBpbiB0aGUgbGVuZ3RocyBvZiBAYSBzb3VyY2UgYW5kIEBhIHRhcmdldC4K
KworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgaG93IGEgSlNPTiBw
YXRjaCBpcyBjcmVhdGVkIGFzIGEKKyAgICBkaWZmIGZvciB0d28gSlNPTiB2YWx1ZXMuLGRpZmZ9
CisKKyAgICBAc2EgQHJlZiBwYXRjaCAtLSBhcHBseSBhIEpTT04gcGF0Y2gKKworICAgIEBzYSBb
UkZDIDY5MDIgKEpTT04gUGF0Y2gpXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjkw
MikKKworICAgIEBzaW5jZSB2ZXJzaW9uIDIuMC4wCisgICAgKi8KKyAgICBzdGF0aWMgYmFzaWNf
anNvbiBkaWZmKGNvbnN0IGJhc2ljX2pzb24mIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGJhc2ljX2pzb24mIHRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoID0gIiIpCisgICAgeworICAgICAgICAvLyB0aGUg
cGF0Y2gKKyAgICAgICAgYmFzaWNfanNvbiByZXN1bHQodmFsdWVfdDo6YXJyYXkpOworCisgICAg
ICAgIC8vIGlmIHRoZSB2YWx1ZXMgYXJlIHRoZSBzYW1lLCByZXR1cm4gZW1wdHkgcGF0Y2gKKyAg
ICAgICAgaWYgKHNvdXJjZSA9PSB0YXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc291cmNlLnR5cGUoKSAhPSB0YXJn
ZXQudHlwZSgpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBkaWZmZXJlbnQgdHlwZXM6IHJl
cGxhY2UgdmFsdWUKKyAgICAgICAgICAgIHJlc3VsdC5wdXNoX2JhY2soCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgeyJvcCIsICJyZXBsYWNlIn0sCisgICAgICAgICAgICAgICAgeyJw
YXRoIiwgcGF0aH0sCisgICAgICAgICAgICAgICAgeyJ2YWx1ZSIsIHRhcmdldH0KKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg
c3dpdGNoIChzb3VyY2UudHlwZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNh
c2UgdmFsdWVfdDo6YXJyYXk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAvLyBmaXJzdCBwYXNzOiB0cmF2ZXJzZSBjb21tb24gZWxlbWVudHMKKyAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IGkgPSAwOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IHNvdXJj
ZS5zaXplKCkgYW5kIGkgPCB0YXJnZXQuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyByZWN1cnNpdmUgY2FsbCB0byBjb21wYXJlIGFycmF5
IHZhbHVlcyBhdCBpbmRleCBpCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHRlbXBfZGlm
ZiA9IGRpZmYoc291cmNlW2ldLCB0YXJnZXRbaV0sIHBhdGggKyAiLyIgKyBzdGQ6OnRvX3N0cmlu
ZyhpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaW5zZXJ0KHJlc3VsdC5lbmQo
KSwgdGVtcF9kaWZmLmJlZ2luKCksIHRlbXBfZGlmZi5lbmQoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICArK2k7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAvLyBpIG5vdyByZWFjaGVkIHRoZSBlbmQgb2YgYXQgbGVhc3Qgb25lIGFycmF5CisgICAgICAg
ICAgICAgICAgICAgIC8vIGluIGEgc2Vjb25kIHBhc3MsIHRyYXZlcnNlIHRoZSByZW1haW5pbmcg
ZWxlbWVudHMKKworICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgbXkgcmVtYWluaW5nIGVs
ZW1lbnRzCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8gZW5kX2luZGV4ID0gc3RhdGlj
X2Nhc3Q8ZGlmZmVyZW5jZV90eXBlPihyZXN1bHQuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKGkgPCBzb3VyY2Uuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBhZGQgb3BlcmF0aW9ucyBpbiByZXZlcnNlIG9yZGVyIHRv
IGF2b2lkIGludmFsaWQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluZGljZXMKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pbnNlcnQocmVzdWx0LmJlZ2luKCkgKyBlbmRfaW5k
ZXgsIG9iamVjdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7Im9wIiwgInJlbW92ZSJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsicGF0aCIsIHBhdGggKyAiLyIgKyBzdGQ6OnRvX3N0cmluZyhpKX0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICsraTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBvdGhlciByZW1haW5pbmcg
ZWxlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCB0YXJnZXQuc2l6ZSgpKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVz
aF9iYWNrKAorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsib3AiLCAiYWRkIn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJwYXRo
IiwgcGF0aCArICIvIiArIHN0ZDo6dG9fc3RyaW5nKGkpfSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7InZhbHVlIiwgdGFyZ2V0W2ldfQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgICAgICAgICArK2k7CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIGZpcnN0IHBhc3M6IHRyYXZlcnNlIHRoaXMgb2JqZWN0J3MgZWxlbWVu
dHMKKyAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvIGl0ID0gc291cmNlLmJlZ2luKCk7IGl0
ICE9IHNvdXJjZS5lbmQoKTsgKytpdCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gZXNjYXBlIHRoZSBrZXkgbmFtZSB0byBiZSB1c2VkIGluIGEgSlNP
TiBwYXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0byBrZXkgPSBqc29uX3Bv
aW50ZXI6OmVzY2FwZShpdC5rZXkoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0
YXJnZXQuZmluZChpdC5rZXkoKSkgIT0gdGFyZ2V0LmVuZCgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlY3Vyc2l2ZSBjYWxsIHRv
IGNvbXBhcmUgb2JqZWN0IHZhbHVlcyBhdCBrZXkgaXQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIHRlbXBfZGlmZiA9IGRpZmYoaXQudmFsdWUoKSwgdGFyZ2V0W2l0LmtleSgpXSwg
cGF0aCArICIvIiArIGtleSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmlu
c2VydChyZXN1bHQuZW5kKCksIHRlbXBfZGlmZi5iZWdpbigpLCB0ZW1wX2RpZmYuZW5kKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGZvdW5kIGEga2V5IHRoYXQgaXMgbm90IGluIG8gLT4gcmVtb3ZlIGl0CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnB1c2hfYmFjayhvYmplY3QoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Im9wIiwgInJl
bW92ZSJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7InBhdGgiLCBwYXRoICsg
Ii8iICsga2V5fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIC8vIHNlY29uZCBwYXNzOiB0cmF2ZXJzZSBvdGhlciBvYmplY3QncyBlbGVtZW50cworICAg
ICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gaXQgPSB0YXJnZXQuYmVnaW4oKTsgaXQgIT0gdGFy
Z2V0LmVuZCgpOyArK2l0KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc291cmNlLmZpbmQoaXQua2V5KCkpID09IHNvdXJjZS5lbmQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3Vu
ZCBhIGtleSB0aGF0IGlzIG5vdCBpbiB0aGlzIC0+IGFkZCBpdAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGF1dG8ga2V5ID0ganNvbl9wb2ludGVyOjplc2NhcGUoaXQua2V5KCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoX2JhY2soCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
Im9wIiwgImFkZCJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7InBhdGgiLCBw
YXRoICsgIi8iICsga2V5fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJ2YWx1
ZSIsIGl0LnZhbHVlKCl9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gYm90aCBwcmlt
aXRpdmUgdHlwZTogcmVwbGFjZSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVz
aF9iYWNrKAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB7
Im9wIiwgInJlcGxhY2UifSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsicGF0aCIsIHBhdGh9
LAorICAgICAgICAgICAgICAgICAgICAgICAgeyJ2YWx1ZSIsIHRhcmdldH0KKyAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgLy8vIEB9Cit9OworCisKKy8vLy8vLy8vLy8vLy8KKy8vIHByZXNldHMgLy8K
Ky8vLy8vLy8vLy8vLy8KKworLyohCitAYnJpZWYgZGVmYXVsdCBKU09OIGNsYXNzCisKK1RoaXMg
dHlwZSBpcyB0aGUgZGVmYXVsdCBzcGVjaWFsaXphdGlvbiBvZiB0aGUgQHJlZiBiYXNpY19qc29u
IGNsYXNzIHdoaWNoCit1c2VzIHRoZSBzdGFuZGFyZCB0ZW1wbGF0ZSB0eXBlcy4KKworQHNpbmNl
IHZlcnNpb24gMS4wLjAKKyovCit1c2luZyBqc29uID0gYmFzaWNfanNvbjw+OworfQorCisKKy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBub25tZW1iZXIgc3VwcG9ydCAvLworLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KKworLy8gc3BlY2lhbGl6YXRpb24gb2Ygc3RkOjpzd2FwLCBhbmQgc3Rk
OjpoYXNoCituYW1lc3BhY2Ugc3RkCit7CisvKiEKK0BicmllZiBleGNoYW5nZXMgdGhlIHZhbHVl
cyBvZiB0d28gSlNPTiBvYmplY3RzCisKK0BzaW5jZSB2ZXJzaW9uIDEuMC4wCisqLwordGVtcGxh
dGU8PgoraW5saW5lIHZvaWQgc3dhcChubG9obWFubjo6anNvbiYgajEsCisgICAgICAgICAgICAg
ICAgIG5sb2htYW5uOjpqc29uJiBqMikgbm9leGNlcHQoCisgICAgICAgICAgICAgICAgICAgICBp
c19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxubG9obWFubjo6anNvbj46OnZhbHVlIGFuZAor
ICAgICAgICAgICAgICAgICAgICAgaXNfbm90aHJvd19tb3ZlX2Fzc2lnbmFibGU8bmxvaG1hbm46
Ompzb24+Ojp2YWx1ZQorICAgICAgICAgICAgICAgICApCit7CisgICAgajEuc3dhcChqMik7Cit9
CisKKy8vLyBoYXNoIHZhbHVlIGZvciBKU09OIG9iamVjdHMKK3RlbXBsYXRlPD4KK3N0cnVjdCBo
YXNoPG5sb2htYW5uOjpqc29uPgoreworICAgIC8qIQorICAgIEBicmllZiByZXR1cm4gYSBoYXNo
IHZhbHVlIGZvciBhIEpTT04gb2JqZWN0CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAg
ICovCisgICAgc3RkOjpzaXplX3Qgb3BlcmF0b3IoKShjb25zdCBubG9obWFubjo6anNvbiYgaikg
Y29uc3QKKyAgICB7CisgICAgICAgIC8vIGEgbmFpdmUgaGFzaGluZyB2aWEgdGhlIHN0cmluZyBy
ZXByZXNlbnRhdGlvbgorICAgICAgICBjb25zdCBhdXRvJiBoID0gaGFzaDxubG9obWFubjo6anNv
bjo6c3RyaW5nX3Q+KCk7CisgICAgICAgIHJldHVybiBoKGouZHVtcCgpKTsKKyAgICB9Cit9Owor
fQorCisvKiEKK0BicmllZiB1c2VyLWRlZmluZWQgc3RyaW5nIGxpdGVyYWwgZm9yIEpTT04gdmFs
dWVzCisKK1RoaXMgb3BlcmF0b3IgaW1wbGVtZW50cyBhIHVzZXItZGVmaW5lZCBzdHJpbmcgbGl0
ZXJhbCBmb3IgSlNPTiBvYmplY3RzLiBJdAorY2FuIGJlIHVzZWQgYnkgYWRkaW5nIGAiX2pzb24i
YCB0byBhIHN0cmluZyBsaXRlcmFsIGFuZCByZXR1cm5zIGEgSlNPTiBvYmplY3QKK2lmIG5vIHBh
cnNlIGVycm9yIG9jY3VycmVkLgorCitAcGFyYW1baW5dIHMgIGEgc3RyaW5nIHJlcHJlc2VudGF0
aW9uIG9mIGEgSlNPTiBvYmplY3QKK0BwYXJhbVtpbl0gbiAgdGhlIGxlbmd0aCBvZiBzdHJpbmcg
QGEgcworQHJldHVybiBhIEpTT04gb2JqZWN0CisKK0BzaW5jZSB2ZXJzaW9uIDEuMC4wCisqLwor
aW5saW5lIG5sb2htYW5uOjpqc29uIG9wZXJhdG9yICIiIF9qc29uKGNvbnN0IGNoYXIqIHMsIHN0
ZDo6c2l6ZV90IG4pCit7CisgICAgcmV0dXJuIG5sb2htYW5uOjpqc29uOjpwYXJzZShzLCBzICsg
bik7Cit9CisKKy8qIQorQGJyaWVmIHVzZXItZGVmaW5lZCBzdHJpbmcgbGl0ZXJhbCBmb3IgSlNP
TiBwb2ludGVyCisKK1RoaXMgb3BlcmF0b3IgaW1wbGVtZW50cyBhIHVzZXItZGVmaW5lZCBzdHJp
bmcgbGl0ZXJhbCBmb3IgSlNPTiBQb2ludGVycy4gSXQKK2NhbiBiZSB1c2VkIGJ5IGFkZGluZyBg
Il9qc29uX3BvaW50ZXIiYCB0byBhIHN0cmluZyBsaXRlcmFsIGFuZCByZXR1cm5zIGEgSlNPTiBw
b2ludGVyCitvYmplY3QgaWYgbm8gcGFyc2UgZXJyb3Igb2NjdXJyZWQuCisKK0BwYXJhbVtpbl0g
cyAgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBKU09OIFBvaW50ZXIKK0BwYXJhbVtpbl0g
biAgdGhlIGxlbmd0aCBvZiBzdHJpbmcgQGEgcworQHJldHVybiBhIEpTT04gcG9pbnRlciBvYmpl
Y3QKKworQHNpbmNlIHZlcnNpb24gMi4wLjAKKyovCitpbmxpbmUgbmxvaG1hbm46Ompzb246Ompz
b25fcG9pbnRlciBvcGVyYXRvciAiIiBfanNvbl9wb2ludGVyKGNvbnN0IGNoYXIqIHMsIHN0ZDo6
c2l6ZV90IG4pCit7CisgICAgcmV0dXJuIG5sb2htYW5uOjpqc29uOjpqc29uX3BvaW50ZXIoc3Rk
OjpzdHJpbmcocywgbikpOworfQorCisvLyByZXN0b3JlIEdDQy9jbGFuZyBkaWFnbm9zdGljIHNl
dHRpbmdzCisjaWYgZGVmaW5lZChfX2NsYW5nX18pIHx8IGRlZmluZWQoX19HTlVDX18pIHx8IGRl
ZmluZWQoX19HTlVHX18pCisgICAgI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyNlbmRpZgor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQ
cm9jZXNzUG9vbENvY29hLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlBy
b2Nlc3NQb29sQ29jb2EubW0KaW5kZXggNDlkNGQ1YmQ1YTk5ZDRkOTgxMTE2YTA4YTEzMjdkNTAx
Y2JhYjk1MS4uOGQ5YjYzODk3NTY2YzU0MjkzNzkyZDBkNjlhNWE3MDA2NTRmYjFkMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2Eu
bW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29j
b2EubW0KQEAgLTg3LDYgKzg3LDExIEBAIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdlYktpdE5l
dHdvcmtMb2FkVGhyb3R0bGVMYXRlbmN5TWlsbGlzZWNvbmRzRGVmYXVsdHNLZXkKIAogc3RhdGlj
IE5TU3RyaW5nICogY29uc3QgV2ViS2l0VmFyaWF0aW9uRm9udHNFbmFibGVkRGVmYXVsdHNLZXkg
PSBAIkV4cGVyaW1lbnRhbFZhcmlhdGlvbkZvbnRzRW5hYmxlZCI7CiAKKyNpZiBFTkFCTEUoTkVU
V09SS19DQVBUVVJFKQorc3RhdGljIE5TU3RyaW5nICogY29uc3QgV2ViS2l0UmVjb3JkUmVwbGF5
TW9kZURlZmF1bHRzS2V5ID0gQCJXZWJLaXRSZWNvcmRSZXBsYXlNb2RlIjsKK3N0YXRpYyBOU1N0
cmluZyAqIGNvbnN0IFdlYktpdFJlY29yZFJlcGxheUNhY2hlTG9jYXRpb25EZWZhdWx0c0tleSA9
IEAiV2ViS2l0UmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbiI7CisjZW5kaWYKKwogbmFtZXNwYWNl
IFdlYktpdCB7CiAKIE5TU3RyaW5nICpTY2hlbWVGb3JDdXN0b21Qcm90b2NvbFJlZ2lzdGVyZWRO
b3RpZmljYXRpb25OYW1lID0gQCJXZWJLaXRTY2hlbWVGb3JDdXN0b21Qcm90b2NvbFJlZ2lzdGVy
ZWROb3RpZmljYXRpb24iOwpAQCAtMjYyLDYgKzI2NywxMyBAQCB2b2lkIFdlYlByb2Nlc3NQb29s
OjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYQogI2VuZGlmCiAKICAgICBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdF
bmFibGVkID0gY29va2llU3RvcmFnZVBhcnRpdGlvbmluZ0VuYWJsZWQoKTsKKworI2lmIEVOQUJM
RShORVRXT1JLX0NBUFRVUkUpCisgICAgcGFyYW1ldGVycy5yZWNvcmRSZXBsYXlNb2RlID0gW2Rl
ZmF1bHRzIHN0cmluZ0ZvcktleTpXZWJLaXRSZWNvcmRSZXBsYXlNb2RlRGVmYXVsdHNLZXldOwor
ICAgIHBhcmFtZXRlcnMucmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbiA9IFtkZWZhdWx0cyBzdHJp
bmdGb3JLZXk6V2ViS2l0UmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbkRlZmF1bHRzS2V5XTsKKyAg
ICBpZiAocGFyYW1ldGVycy5yZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uLmlzRW1wdHkoKSkKKyAg
ICAgICAgcGFyYW1ldGVycy5yZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uID0gcGFyYW1ldGVycy5k
aXNrQ2FjaGVEaXJlY3Rvcnk7CisjZW5kaWYKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxh
dGZvcm1JbnZhbGlkYXRlQ29udGV4dCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYTE3YTExNGZiMDdhNjMwYWExNTc2NTkzZjgw
YjJiOTgwMmQ0NDI1Mi4uYzIxY2IyOWVjNDRmM2ViY2QwNTI2NjM0ZDc4NmRjZGIxMDdmYjFhZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTA0NCwxMiArMTA0NCwyNyBAQAogCQk1MkQ1QTFCMDFDNTc0OTVBMDBERTM0QTMgLyog
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBQTFDNTc0OTRFMDBERTM0QTMgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5LmggKi87IH07CiAJCTUyRDVBMUIxMUM1NzQ5NjIwMERF
MzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFBQzFDNTc0OTRFMDBERTM0QTMg
LyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tICovOyB9OwogCQk1MkQ1QTFCNzFD
NTc0QTAyMDBERTM0QTMgLyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRDVBMUI0MUM1NzQ5RjIwMERF
MzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tICovOyB9OworCQk1MzAyNTgzQjFE
Q0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgyRTFEQ0JCRDFEMDBEQTg5
QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHAgKi87IH07CisJCTUzMDI1ODNDMURDQkJE
MjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgyRjFEQ0JCRDFEMDBEQTg5QzIgLyog
TmV0d29ya0NhcHR1cmVSZXNvdXJjZS5oICovOyB9OworCQk1MzAyNTgzRDFEQ0JCRDIyMDBEQTg5
QzIgLyogTmV0d29ya0NhcHR1cmVFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgzMDFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0Nh
cHR1cmVFdmVudC5jcHAgKi87IH07CisJCTUzMDI1ODNFMURDQkJEMjIwMERBODlDMiAvKiBOZXR3
b3JrQ2FwdHVyZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzAyNTgzMTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVFdmVudC5o
ICovOyB9OworCQk1MzAyNTgzRjFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVMb2dn
aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAy
NTgzMjFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVMb2dnaW5nLmggKi87IH07CisJ
CTUzMDI1ODQwMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MzMxRENC
QkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTWFuYWdlci5jcHAgKi87IH07CisJCTUzMDI1
ODQxMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1ODM0MURDQkJEMUQwMERB
ODlDMiAvKiBOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCAqLzsgfTsKKwkJNTMwMjU4NDIxRENCQkQy
MjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVjb3JkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MzUxRENCQkQxRDAwREE4OUMyIC8q
IE5ldHdvcmtDYXB0dXJlUmVjb3JkZXIuY3BwICovOyB9OworCQk1MzAyNTg0MzFEQ0JCRDIyMDBE
QTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZWNvcmRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MzYxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdv
cmtDYXB0dXJlUmVjb3JkZXIuaCAqLzsgfTsKKwkJNTMwMjU4NDQxRENCQkQyMjAwREE4OUMyIC8q
IE5ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MzcxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0
dXJlUmVwbGF5ZXIuY3BwICovOyB9OworCQk1MzAyNTg0NTFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0
d29ya0NhcHR1cmVSZXBsYXllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTMwMjU4MzgxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVw
bGF5ZXIuaCAqLzsgfTsKKwkJNTMwMjU4NDYxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtEYXRh
VGFza1JlcGxheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzAyNTgzOTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0RhdGFUYXNrUmVwbGF5LmNw
cCAqLzsgfTsKKwkJNTMwMjU4NDcxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtEYXRhVGFza1Jl
cGxheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMw
MjU4M0ExRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtEYXRhVGFza1JlcGxheS5oICovOyB9Owog
CQk1MzIxNTk1MzFEQkFFNzE4MDA1NEFBM0MgLyogTmV0d29ya1Nlc3Npb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMyMTU5NTIxREJBRTZGQzAw
NTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uLmNwcCAqLzsgfTsKIAkJNTMyMTU5NTQxREJBRTcxRDAw
NTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFzay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzIxNTk1MTFEQkFFNkZDMDA1NEFBM0MgLyogTmV0d29ya0Rh
dGFUYXNrLmNwcCAqLzsgfTsKIAkJNTMyMTU5NTUxREJBRTcyOTAwNTRBQTNDIC8qIE5ldHdvcmtT
ZXNzaW9uQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzMjE1OTUwMURCQUU2RDcwMDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLmggKi87
IH07CiAJCTUzMjE1OTU2MURCQUU3MkQwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMyMTU5NEYx
REJBRTZENzAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLmggKi87IH07CiAJCTUzQkE0
N0QwMURDMkVGNUUwMDRERjRBRCAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOUVCNTQ2MURDMkVFNDAwMDlE
NDhDRiAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmNwcCAqLzsgfTsKIAkJNTNCQTQ3RDExREMyRUY1
RTAwNERGNEFEIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOUVCNTQ3MURDMkVFNDAwMDlENDhDRiAvKiBOZXR3
b3JrRGF0YVRhc2tCbG9iLmggKi87IH07CisJCTUzREVBMzY2MURERTQyMzEwMEU4MjY0OCAvKiBq
c29uLmhwcCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
REVBMzY1MURERTQyMkUwMEU4MjY0OCAvKiBqc29uLmhwcCAqLzsgfTsKKwkJNTNFMjYwNjUxRERB
OTQ4RTAwNTkwODE4IC8qIE5ldHdvcmtDYXB0dXJlVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRTI2MDY0MUREQTk0ODEwMDU5MDgxOCAvKiBO
ZXR3b3JrQ2FwdHVyZVR5cGVzLmggKi87IH07CiAJCTVDMDUyRjI2MUM2RDNCRDMwMDc2RTkxOSAv
KiBBdXRoZW50aWNhdGlvbk1hbmFnZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMDUyRjI0MUM2RDNBQjYwMDc2RTkxOSAvKiBBdXRoZW50
aWNhdGlvbk1hbmFnZXJDb2NvYS5tbSAqLzsgfTsKIAkJNUMxNDI2RUMxQzIzRjgwOTAwRDQxMTgz
IC8qIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMTQyNkUyMUMyM0Y4MDUwMEQ0MTE4MyAv
KiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgKi87IH07CiAJCTVDMTQyNkVE
MUMyM0Y4MDkwMEQ0MTE4MyAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUMxNDI2RTMxQzIz
RjgwNTAwRDQxMTgzIC8qIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggKi87IH07
CkBAIC0zMTQyLDEyICszMTU3LDI3IEBACiAJCTUyRDVBMUIyMUM1NzQ5RjIwMERFMzRBMyAvKiBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTJENUExQjMxQzU3NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVu
TWFuYWdlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJENUEx
QjQxQzU3NDlGMjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzAyNTgyRTFEQ0JCRDFEMDBE
QTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNwcDsgcGF0aCA9IE5ldHdv
cmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUzMDI1ODJGMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2Fw
dHVyZVJlc291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtD
YXB0dXJlUmVzb3VyY2UuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya2VD
YWNoZWRSZXNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzAyNTgzMDFE
Q0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcDsgcGF0aCA9IE5l
dHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUzMDI1ODMxMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2Fw
dHVyZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtDYXB0
dXJlRXZlbnQuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVF
dmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzAyNTgzMjFEQ0JCRDFEMDBE
QTg5QzIgLyogTmV0d29ya0NhcHR1cmVMb2dnaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IE5ldHdvcmtDYXB0dXJlTG9nZ2luZy5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3Mv
Y2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTMwMjU4MzMxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTWFuYWdlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZU1h
bmFnZXIuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZU1h
bmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzAyNTgzNDFEQ0JCRDFE
MDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IE5ldHdvcmtDYXB0dXJlTWFuYWdlci5oOyBwYXRoID0gTmV0d29ya1Byb2Nl
c3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTMwMjU4MzUxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVjb3Jk
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya0NhcHR1
cmVSZWNvcmRlci5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0
dXJlUmVjb3JkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzAyNTgzNjFE
Q0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZWNvcmRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmg7IHBhdGggPSBOZXR3
b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVjb3JkZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTMwMjU4MzcxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0
dXJlUmVwbGF5ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0
d29ya0NhcHR1cmVSZXBsYXllci5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05l
dHdvcmtDYXB0dXJlUmVwbGF5ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MzAyNTgzODFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXBsYXllci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmg7IHBh
dGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMwMjU4MzkxRENCQkQxRDAwREE4OUMyIC8qIE5l
dHdvcmtEYXRhVGFza1JlcGxheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBOZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2Fw
dHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MzAyNTgzQTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0RhdGFUYXNrUmVwbGF5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFza1JlcGxheS5o
OyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMyMTU5NEYxREJBRTZENzAwNTRBQTNDIC8q
IE5ldHdvcmtEYXRhVGFza0NvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IE5ldHdvcmtEYXRhVGFza0NvY29hLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3
b3JrRGF0YVRhc2tDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzIxNTk1
MDFEQkFFNkQ3MDA1NEFBM0MgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrU2Vzc2lvbkNvY29hLmg7IHBhdGggPSBOZXR3b3Jr
UHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzMjE1OTUxMURCQUU2RkMwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2suY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya0RhdGFUYXNrLmNw
cDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFzay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUzMjE1OTUyMURCQUU2RkMwMDU0QUEzQyAvKiBOZXR3b3JrU2Vz
c2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrU2Vz
c2lvbi5jcHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOUVCNTQ2MURDMkVFNDAwMDlENDhDRiAvKiBOZXR3
b3JrRGF0YVRhc2tCbG9iLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IE5ldHdvcmtEYXRhVGFza0Jsb2IuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Rh
dGFUYXNrQmxvYi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOUVCNTQ3MURD
MkVFNDAwMDlENDhDRiAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFza0Jsb2IuaDsgcGF0aCA9IE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtEYXRhVGFza0Jsb2IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTNERUEzNjUxRERFNDIyRTAwRTgyNjQ4IC8qIGpzb24uaHBwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuaDsgbmFtZSA9IGpzb24uaHBwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9q
c29uLmhwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNFMjYwNjQxRERBOTQ4MTAw
NTkwODE4IC8qIE5ldHdvcmtDYXB0dXJlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gTmV0d29ya0NhcHR1cmVUeXBlcy5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2Fw
dHVyZS9OZXR3b3JrQ2FwdHVyZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTU3OUQxOEI3MUNDRkUzNEIwMEIxOTc0QyAvKiBQaG90b3NTUEkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGhvdG9zU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMDUyRjI0MUM2RDNB
QjYwMDc2RTkxOSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEF1dGhlbnRpY2F0aW9uTWFuYWdlckNvY29hLm1t
OyBwYXRoID0gQXV0aGVudGljYXRpb24vY29jb2EvQXV0aGVudGljYXRpb25NYW5hZ2VyQ29jb2Eu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDMTQyNkUyMUMyM0Y4MDUwMEQ0MTE4
MyAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5j
cHA7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDc4LDYgKzU1MDgsNyBAQAog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQlFNDg5RDI4MjFBMEEyQkU4
MDA3OEMwNkEgLyogY2FjaGUgKi8sCisJCQkJNTM5QkQ1QjIxREFEQjBCQTAwRjJFNEUxIC8qIGNh
cHR1cmUgKi8sCiAJCQkJN0VDNEYwRjgxOEU0QTkyMjAwODA1NkFGIC8qIGNvY29hICovLAogCQkJ
CTVDMTQyNkYyMUMyM0Y4MkQwMEQ0MTE4MyAvKiBDdXN0b21Qcm90b2NvbHMgKi8sCiAJCQkJNUMx
NDI2RjExQzIzRjgxNzAwRDQxMTgzIC8qIERvd25sb2FkcyAqLywKQEAgLTU3ODgsNiArNTgxOSwy
OCBAQAogCQkJbmFtZSA9IEljb25EYXRhYmFzZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CiAJCX07CisJCTUzOUJENUIyMURBREIwQkEwMEYyRTRFMSAvKiBjYXB0dXJlICovID0geworCQkJ
aXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk1M0RFQTM2NTFEREU0MjJFMDBF
ODI2NDggLyoganNvbi5ocHAgKi8sCisJCQkJNTMwMjU4MkUxRENCQkQxRDAwREE4OUMyIC8qIE5l
dHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwICovLAorCQkJCTUzMDI1ODJGMURDQkJEMUQwMERBODlD
MiAvKiBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmggKi8sCisJCQkJNTMwMjU4MzAxRENCQkQxRDAw
REE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwICovLAorCQkJCTUzMDI1ODMxMURDQkJE
MUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmggKi8sCisJCQkJNTMwMjU4MzIxRENC
QkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTG9nZ2luZy5oICovLAorCQkJCTUzMDI1ODMz
MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuY3BwICovLAorCQkJCTUz
MDI1ODM0MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCAqLywKKwkJ
CQk1MzAyNTgzNTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZWNvcmRlci5jcHAg
Ki8sCisJCQkJNTMwMjU4MzYxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVjb3Jk
ZXIuaCAqLywKKwkJCQk1MzAyNTgzNzFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVS
ZXBsYXllci5jcHAgKi8sCisJCQkJNTMwMjU4MzgxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtD
YXB0dXJlUmVwbGF5ZXIuaCAqLywKKwkJCQk1M0UyNjA2NDFEREE5NDgxMDA1OTA4MTggLyogTmV0
d29ya0NhcHR1cmVUeXBlcy5oICovLAorCQkJCTUzMDI1ODM5MURDQkJEMUQwMERBODlDMiAvKiBO
ZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwICovLAorCQkJCTUzMDI1ODNBMURDQkJEMUQwMERBODlD
MiAvKiBOZXR3b3JrRGF0YVRhc2tSZXBsYXkuaCAqLywKKwkJCSk7CisJCQluYW1lID0gY2FwdHVy
ZTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTVDMDUyRjIzMUM2RDNBQTEw
MDc2RTkxOSAvKiBjb2NvYSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCkBAIC03NTQwLDYgKzc1OTMsNyBAQAogCQkJCTM3QTY0RTU3MThGMzhGNDYwMEVCMzBGMSAv
KiBfV0tGb3JtSW5wdXRTZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzNEMTIyMzE4QTQ3
MzAxMDA2NkQ5Q0MgLyogX1dLRnJhbWVIYW5kbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3M0Qx
MjI3MThBNDczRjYwMDY2RDlDQyAvKiBfV0tGcmFtZUhhbmRsZUludGVybmFsLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlDRDc4RTExOTFEQjdFNUFEMDAxNEEyREUgLyogX1dLRnVsbHNjcmVlbkRlbGVn
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0U2QTRFRTFCQzVERDM5MDBGOEEwRTcgLyogX1dL
SGl0VGVzdFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNBODhCM0IxQkM3MTBEOTAwQUJB
NUMyIC8qIF9XS0hpdFRlc3RSZXN1bHRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzdB
NjRFNTUxOEYzOEUzQzAwRUIzMEYxIC8qIF9XS0lucHV0RGVsZWdhdGUuaCBpbiBIZWFkZXJzICov
LApAQCAtNzU4MCw3ICs3NjM0LDYgQEAKIAkJCQkxQUZCNEM3MjFBREYxNTVEMDBCMzMzMzkgLyog
X1dLV2Vic2l0ZURhdGFTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0QTkzQjcxQUVCMDhF
QTAwMTUwRTlDIC8qIF9XS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTExNURDNzIxOTFEODJEQTAwREE4MDcyIC8qIF9XS1dlYlZpZXdQcmludEZvcm1hdHRl
ci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0Q3OEUxMTkxREI3RTVBRDAwMTRBMkRFIC8qIF9XS0Z1
bGxzY3JlZW5EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE5REQzQzAxRDA3RDE2ODAw
QUM4MjNCIC8qIF9XS1dlYlZpZXdQcmludEZvcm1hdHRlckludGVybmFsLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBMTgyRDVCNTFCRTZCRDI1MDA4N0E3Q0MgLyogQWNjZXNzaWJpbGl0eUlPUy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTdENzkyRDgxNzY3Q0NBMzAwODgxQ0JFIC8qIEFjdGl2aXR5QXNz
ZXJ0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTc2MDAsNiArNzY1Myw3IEBACiAJCQkJMzdFMjVE
NkUxOEZERTVENjAwNUQzQTAwIC8qIEFQSUZvcm1DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBQzEzMzcyMTg1NjZDN0MwMEYzRUMwNSAvKiBBUElGcmFtZUhhbmRsZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkRGOUVFRTYxQTc4MUZCNDAwQjZDRkJFIC8qIEFQSUZyYW1lSW5mby5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQ0Q3OEUxMTcxREI3REMwQTAwMTRBMkRFIC8qIEFQSUZ1bGxzY3JlZW5D
bGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTc0QUEzMTQyQTRDQjcwMDM5MjUwRiAvKiBB
UElHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRBQkE3NzYxQTgyQjQyMTAwRUYwRjFB
IC8qIEFQSUhpc3RvcnlDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQTg4QjQ2MUJDODgy
OTMwMEFCQTVDMiAvKiBBUElIaXRUZXN0UmVzdWx0LmggaW4gSGVhZGVycyAqLywKQEAgLTc3MTIs
NiArNzc2Niw3IEBACiAJCQkJQkNFODFEOEQxMzE5RjdFRjAwMjQxOTEwIC8qIEZvbnRJbmZvLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQTE0RjhFMjFENzRDODM0MDA2Q0JFQzYgLyogRnJhbWVJbmZv
RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFFMDBENjExODMxNzkyMTAwMDg3REQ3IC8qIEZy
YW1lTG9hZFN0YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQlDRDc4RTExNTFEQjdEN0VEMDAxNEEy
REUgLyogRnVsbHNjcmVlbkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1QkUxQjMxRDU5
MDJERDAwREQ3QzY4IC8qIEdhbWVwYWREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE3NzUz
RjExOEJBQkYwMDA3RDlFOUEgLyogR2VuZXJpY0NhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzA2RjQyRjEyREJCOUI2MDAyRDc4REUgLyogR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNzc5MCw5ICs3ODQ1LDE5IEBACiAJCQkJODM0
QjI1MTIxQTg0MkM4NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUU0NDM2RUNGMUEwRDA0MEIwMEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGVTdG9y
YWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzEwNDI4QjFCRDZCNjZGMDBBNzE1RTQgLyogTmV0
d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzMDI1ODND
MURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1MzAyNTgzRTFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVFdmVudC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNTMwMjU4M0YxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtD
YXB0dXJlTG9nZ2luZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMwMjU4NDExRENCQkQyMjAwREE4
OUMyIC8qIE5ldHdvcmtDYXB0dXJlTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMwMjU4
NDMxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVjb3JkZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUzMDI1ODQ1MURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlcGxh
eWVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0UyNjA2NTFEREE5NDhFMDA1OTA4MTggLyogTmV0
d29ya0NhcHR1cmVUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEzQTE2NEQxNjMwQTlCRjAw
NUQ3RDIyIC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MUREOUYyOTE2MzY3REEyMDAxNTc4RTkgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3NNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUNCQzlCOEUxQzY1MkNBMDAwQThG
RENGIC8qIE5ldHdvcmtEYXRhVGFzay5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNCQTQ3RDExREMy
RUY1RTAwNERGNEFEIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUzMjE1OTU2MURCQUU3MkQwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTMwMjU4NDcxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtEYXRhVGFz
a1JlcGxheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM5OTAyMDMxQkU5QTAyQjAwMEYzNjUzIC8q
IE5ldHdvcmtMb2FkLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0Q0NTRENzFCRTlEM0M0MDA2Qzkz
QkQgLyogTmV0d29ya0xvYWRDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzOTE0OTY1MUJF
QTgzODUwMEQyRDk1MyAvKiBOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLApA
QCAtNzgwOCw2ICs3ODczLDcgQEAKIAkJCQlFMTUyNTUxQjE3MDExODE5MDAzRDdBREIgLyogTmV0
d29ya1Jlc291cmNlTG9hZGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTVDMTQyNkYw
MUMyM0Y4MDkwMEQ0MTE4MyAvKiBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUMyMENCQTAxQkIxRUNEODAwODk1QkIxIC8qIE5ldHdvcmtTZXNzaW9u
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzIxNTk1NTFEQkFFNzI5MDA1NEFBM0MgLyogTmV0d29y
a1Nlc3Npb25Db2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFBMkVDNTYxNDg5OUMwOTAwODEw
RDcxIC8qIE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzMTMxMjYxRjE0OEZGODJDMDBCQTJBMzkgLyogTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVl
c3RNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUEyRUM1MjE0ODk5ODE5MDA4MTBENzEg
LyogTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJz
ICovLApAQCAtNzg2MSw3ICs3OTI3LDYgQEAKIAkJCQkxQTBFQzZDMDEyNEJCRDlCMDA3RUY0QTUg
LyogUGx1Z2luUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTBFQzc1RTEy
NEJDN0IyMDA3RUY0QTUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTA0M0I1RTEyNEQ1RTlEMDBGRkJGQjUgLyogUGx1Z2luUHJvY2Vzc1Byb3h5TWVzc2FnZXMu
aCBpbiBIZWFkZXJzICovLAotCQkJCTUzQkE0N0QxMURDMkVGNUUwMDRERjRBRCAvKiBOZXR3b3Jr
RGF0YVRhc2tCbG9iLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTA0M0RDMTEyNEZGODc1MDBGRkJG
QjUgLyogUGx1Z2luUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOEVGQTcxMTI1MkI4NDEw
MEY3MDY3RiAvKiBQbHVnaW5Qcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTRB
OUYzMzEyQjg0NEUyMDA4RkU5ODQgLyogUGx1Z2luUXVpcmtzLmggaW4gSGVhZGVycyAqLywKQEAg
LTc5ODIsNiArODA0Nyw3IEBACiAJCQkJQkMwMzJENzcxMEY0Mzc4RDAwNThDMTVBIC8qIFdlYkNv
bnRleHRNZW51Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTI5MzVEODEyODhEMTk0MDBB
NEI2OTUgLyogV2ViQ29udGV4dE1lbnVJdGVtLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTBGQkI5
QjEyODhDOTVFMDBBRkZERjQgLyogV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQTFFQTAyNDAxREFDMzFEQjAwOTYwMjFGIC8qIFdlYkNvbnRleHRNZW51TGlzdGVu
ZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBQ0JCODIxMjdBOEJBRDAwRDIwM0I5IC8q
IFdlYkNvbnRleHRNZW51UHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQUNCQkEwMTI3QThG
MkMwMEQyMDNCOSAvKiBXZWJDb250ZXh0TWVudVByb3h5TWFjLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0Y0REUyNTE2OEZBNDQ4MDBDOTRBRkMgLyogV2ViQ29udGV4dFN1cHBsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLApAQCAtODA2OCw3ICs4MTM0LDYgQEAKIAkJCQlCQzdCNjI1MjEyQTQzQzk2MDBE
MTc0QTQgLyogV2ViUGFnZUdyb3VwRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3QjYyMTUx
MkE0MjE5QTAwRDE3NEE0IC8qIFdlYlBhZ2VHcm91cFByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyRDlFQTMwRjFBOTZDQkZGMDAyRDI4MDcgLyogV2ViUGFnZUluamVjdGVkQnVuZGxlQ2xpZW50
LmggaW4gSGVhZGVycyAqLywKLQkJCQlBMUVBMDIzODFEQUJGRjdFMDA5NjAyMUYgLyogV0tDb250
ZXh0TWVudUxpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMENFNzJBMTEyNDdFNzFEMDBC
QzBFQzQgLyogV2ViUGFnZU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDVDOUQwNjE5
QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MDMyREQxMTBGNDM4OUYwMDU4QzE1QSAvKiBXZWJQYWdlUHJveHkuaCBpbiBIZWFkZXJzICovLApA
QCAtODE5Myw3ICs4MjU4LDYgQEAKIAkJCQlCQzdCNjMzRDEyQTQ1RDEyMDBEMTc0QTQgLyogV0tC
dW5kbGVQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjQ3NEQ4MTg0RDQzRkQwMDUx
QjYyMiAvKiBXS0J1bmRsZVBhZ2VMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUVE
ODJBN0YyMTI4QzZGQUYwMDQ0NzdCMyAvKiBXS0J1bmRsZVBhZ2VPdmVybGF5LmggaW4gSGVhZGVy
cyAqLywKLQkJCQk1MzIxNTk1NjFEQkFFNzJEMDA1NEFBM0MgLyogTmV0d29ya0RhdGFUYXNrQ29j
b2EuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjQ3NEVBMTg0RDQ1MTMwMDUxQjYyMiAvKiBXS0J1
bmRsZVBhZ2VQb2xpY3lDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMUI0MTk4MTFENDFE
NTcwMDExRThERCAvKiBXS0J1bmRsZVBhZ2VQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QUI0NzREQTE4NEQ0NDI1MDA1MUI2MjIgLyogV0tCdW5kbGVQYWdlUmVzb3VyY2VMb2FkQ2xpZW50
LmggaW4gSGVhZGVycyAqLywKQEAgLTgyMTcsNiArODI4MSw3IEBACiAJCQkJMUE0NDVCOUYxODRE
NUZCNTAwNEIzNDE0IC8qIFdLQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MUE1NTVGNjEyOEM2QzQ3MDA5QUJDRUMgLyogV0tDb250ZXh0TWVudUl0ZW0u
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxQTU1NjAxMTI4QzZEOTIwMDlBQkNFQyAvKiBXS0NvbnRl
eHRNZW51SXRlbVR5cGVzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBMUVBMDIzODFEQUJGRjdFMDA5
NjAyMUYgLyogV0tDb250ZXh0TWVudUxpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0M5
MzhFMTExODBERTQ0MDA4NUU1RkUgLyogV0tDb250ZXh0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOUZCNUYzOTUxNjlFNkE4MDAwMkMyNUJGIC8qIFdLQ29udGV4dFByaXZhdGVNYWMuaCBp
biBIZWFkZXJzICovLAogCQkJCTMzMDkzNDVCMTMxNUI5OTgwMDk3QTdCQyAvKiBXS0Nvb2tpZU1h
bmFnZXIuaCBpbiBIZWFkZXJzICovLApAQCAtODI2Myw3ICs4MzI4LDYgQEAKIAkJCQlCQzU0Q0Mx
MjEyRDY3NEVFMDA1QzY3QjAgLyogV0tHZW9sb2NhdGlvbk1hbmFnZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMDZGNDRFMTJEQkRGM0YwMDJENzhERSAvKiBXS0dlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMEU2MTk4MTJENkNEMTIwMDEyQTcyQSAv
KiBXS0dlb2xvY2F0aW9uUG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTUzMjE1OTU1MURC
QUU3MjkwMDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbkNvY29hLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkNCNEU0RjE4QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQ0M4QjM3NDEyNUZCNjkwMDBERTQ2QTQgLyogV0tHZW9tZXRy
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0MjJGOEIxOEIyOUI1NDAwRDhDRDk2IC8qIFdLSGlz
dG9yeURlbGVnYXRlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04MzIzLDcgKzgzODcsNiBA
QAogCQkJCTdDRDVFQkI5MTc0NkExNUIwMDBDMUM0NSAvKiBXS09iakNUeXBlV3JhcHBlclJlZi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMzc4RTFBNDAxODFFREEwMTAwMzEwMDdBIC8qIFdLT2JqZWN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUNDNTBGMjFDQkMzODFEMDAzQzdEMDMgLyogV0tPcGVu
UGFuZWxQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKLQkJCQlBMUVBMDI0MDFEQUMzMURCMDA5
NjAyMUYgLyogV2ViQ29udGV4dE1lbnVMaXN0ZW5lclByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTY3Q0QyRTFDQkM1MTNGMDBCRkUzRUEgLyogV0tPcGVuUGFuZWxQYXJhbWV0ZXJzSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDODU3RkU2MTJCODQzRDgwMEVERUIyRSAvKiBXS09w
ZW5QYW5lbFBhcmFtZXRlcnNSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMURGRThGMTJCMzFD
QTgwMDVERjczMCAvKiBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywK
QEAgLTgzMzMsNyArODM5Niw2IEBACiAJCQkJODM3MkRCMjUxQTY3NEM4RjAwQzY5N0M1IC8qIFdL
UGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUI4QTFG
NDE4NDAwQjhGMDBFOUFFNjkgLyogV0tQYWdlRmluZENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUFCOEExRjYxODQwMEI5RDAwRTlBRTY5IC8qIFdLUGFnZUZpbmRNYXRjaGVzQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQlDRDc4RTExNTFEQjdEN0VEMDAxNEEyREUgLyogRnVsbHNjcmVl
bkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCOEExRjAxODQwMEIwMDAwRTlBRTY5IC8q
IFdLUGFnZUZvcm1DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDN0I2MzM3MTJBNDVBQkEw
MEQxNzRBNCAvKiBXS1BhZ2VHcm91cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5RUEzMEQxQTk2
Q0I1OTAwMkQyODA3IC8qIFdLUGFnZUluamVjdGVkQnVuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAq
LywKQEAgLTgzNjUsNyArODQyNyw2IEBACiAJCQkJOTM5MTA3NEYxQkY2QkM2NTAwOEMxN0FEIC8q
IFdLUHJldmlld0VsZW1lbnRJbmZvSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0I0
RTY2MThCQkUzRDkwMDBGQ0ZDOSAvKiBXS1ByaW50aW5nVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkNCQUFDRUIxNDUyMjVFMzAwNTNGODJGIC8qIFdLUHJvY2Vzc0dyb3VwLmggaW4gSGVhZGVy
cyAqLywKLQkJCQlDRDc4RTExNzFEQjdEQzBBMDAxNEEyREUgLyogQVBJRnVsbHNjcmVlbkNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCQUFDRUQxNDUyMjVFMzAwNTNGODJGIC8qIFdLUHJv
Y2Vzc0dyb3VwUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUExNTg0MUExODkwNDRGNTAw
MTc2MTZDIC8qIFdLUHJvY2Vzc1Bvb2wuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBM0NDMTY5MTg5
MDdFQjAwMDFFNkVEOCAvKiBXS1Byb2Nlc3NQb29sSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLApA
QCAtODQzNyw2ICs4NDk4LDcgQEAKIAkJCQkzNzk1Nzg5QzE4QUQ0RjE5MDBCOUVEMkUgLyogV0tX
ZWJQcm9jZXNzUGx1Z0luRm9ybURlbGVnYXRlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUY3NTA2QjExODU5MTYzNzAwRUMwRkY3IC8qIFdLV2ViUHJvY2Vzc1BsdWdJbkZyYW1lLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxRjc1MDZCODE4NTkxNjVEMDBFQzBGRjcgLyogV0tXZWJQcm9jZXNz
UGx1Z0luRnJhbWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNERUEzNjYxRERFNDIz
MTAwRTgyNjQ4IC8qIGpzb24uaHBwIGluIEhlYWRlcnMgKi8sCiAJCQkJMzczRDEyMkQxOEE0QjZF
QjAwNjZEOUNDIC8qIFdLV2ViUHJvY2Vzc1BsdWdJbkZyYW1lUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUY3NTA2QjIxODU5MTYzRTAwRUMwRkY3IC8qIFdLV2ViUHJvY2Vzc1BsdWdJbkhp
dFRlc3RSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFGNzUwNkI3MTg1OTE2NUEwMEVDMEZG
NyAvKiBXS1dlYlByb2Nlc3NQbHVnSW5IaXRUZXN0UmVzdWx0SW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovLApAQCAtOTE5Niw2ICs5MjU4LDcgQEAKIAkJCQlCQ0U4MUQ4QzEzMTlGN0VGMDAyNDE5MTAg
LyogRm9udEluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUExNEY4RTExRDc0QzgzNDAwNkNC
RUM2IC8qIEZyYW1lSW5mb0RhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFMDBENjAxODMx
NzkyMTAwMDg3REQ3IC8qIEZyYW1lTG9hZFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNE
NzhFMTE0MURCN0Q3RUQwMDE0QTJERSAvKiBGdWxsc2NyZWVuQ2xpZW50Lm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTE1QkUxQjIxRDU5MDJERDAwREQ3QzY4IC8qIEdhbWVwYWREYXRhLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDMDZGNDMwMTJEQkI5QjYwMDJENzhERSAvKiBHZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzA2RjQ0QjEy
REJEMUY1MDAyRDc4REUgLyogR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94
eS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkyNzQsMTMgKzkzMzcsMjAgQEAKIAkJCQlFNDQzNkVD
RDFBMEQwNDBCMDBFQUQyMDQgLyogTmV0d29ya0NhY2hlS2V5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTgzMUVFQkJFMUJEODVDNDMwMEJCNjRDMyAvKiBOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxv
YWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODMyQUUyNTMxQkUyRThDRDAwRkFBRTEwIC8qIE5l
dHdvcmtDYWNoZVNwZWN1bGF0aXZlTG9hZE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
Q0Q3OEUxMTQxREI3RDdFRDAwMTRBMkRFIC8qIEZ1bGxzY3JlZW5DbGllbnQubW0gaW4gU291cmNl
cyAqLywKIAkJCQk4M0JEQ0NCOTFBQzVGREI2MDAzRjY0NDEgLyogTmV0d29ya0NhY2hlU3RhdGlz
dGljcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDQzNkVEMDFBMEQwNDBCMDBFQUQyMDQgLyog
TmV0d29ya0NhY2hlU3RvcmFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4MzEwNDI4QzFCRDZC
NjZGMDBBNzE1RTQgLyogTmV0d29ya0NhY2hlU3VicmVzb3VyY2VzRW50cnkuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNTMwMjU4M0IxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVz
b3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTMwMjU4M0QxRENCQkQyMjAwREE4OUMyIC8q
IE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTMwMjU4NDAxRENC
QkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk1MzAyNTg0MjFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZWNvcmRlci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzAyNTg0NDFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29y
a0NhcHR1cmVSZXBsYXllci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTNBMTY0QzE2MzBBOUJG
MDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTFERDlGMjgxNjM2N0RBMjAwMTU3OEU5IC8qIE5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzMjE1OTU0
MURCQUU3MUQwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2suY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTNCQTQ3RDAxREMyRUY1RTAwNERGNEFEIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNUNCQzlCOEQxQzY1Mjc5QzAwQThGRENGIC8qIE5ldHdvcmtEYXRh
VGFza0NvY29hLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTMwMjU4NDYxRENCQkQyMjAwREE4OUMy
IC8qIE5ldHdvcmtEYXRhVGFza1JlcGxheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Mzk5MDIw
MjFCRTlBMDJCMDAwRjM2NTMgLyogTmV0d29ya0xvYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODM2RUVCODAxQkU5RUM5RTAwNkI0QjgyIC8qIE5ldHdvcmtMb2FkTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTE3OTU1NjgxNjI4NzZDRjAwRkE0M0I2IC8qIE5ldHdvcmtQcm9jZXNzLmNwcCBp
biBTb3VyY2VzICovLApAQCAtOTI5OSw2ICs5MzY5LDcgQEAKIAkJCQlFMTUyNTUxQTE3MDExODE5
MDAzRDdBREIgLyogTmV0d29ya1Jlc291cmNlTG9hZGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTVDMTQyNkVGMUMyM0Y4MDkwMEQ0MTE4MyAvKiBOZXR3b3JrUmVzb3Vy
Y2VMb2FkUGFyYW1ldGVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzgyODNBQzE2QjRCRjNG
MDBBMjc4RkUgLyogTmV0d29ya1NlcnZpY2VFbnRyeVBvaW50Lm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTMyMTU5NTMxREJBRTcxODAwNTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTVDMjBDQjlEMUJCMERDRkEwMDg5NUJCMSAvKiBOZXR3b3JrU2Vzc2lvbkNv
Y29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFBMkVDNTUxNDg5OTgyRTAwODEwRDcxIC8qIE5v
dGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMzEy
NjFFMTQ4RkY4MkMwMEJBMkEzOSAvKiBOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFn
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MzU4LDcgKzk0MjksNiBAQAogCQkJCTFBMkQ5MjIx
MTI4MURDMUIwMDFFQjk2MiAvKiBQbHVnaW5Qcm94eU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTFBOEVGQTcwMTI1MkI4NDEwMEY3MDY3RiAvKiBQbHVnaW5Qcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk3Q0Q2MjI3NzE3MzlEODYzMDA1QkQ3RkYgLyogUGx1Z2lu
U2FuZGJveFByb2ZpbGUubW0gaW4gU291cmNlcyAqLywKLQkJCQk1M0JBNDdEMDFEQzJFRjVFMDA0
REY0QUQgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzgy
ODQ0RDE2QjUwODFDMDBBMjc4RkUgLyogUGx1Z2luU2VydmljZUVudHJ5UG9pbnQubW0gaW4gU291
cmNlcyAqLywKIAkJCQkxQTZGQjdBRTExRTY0QjY4MDBEQjEzNzEgLyogUGx1Z2luVmlldy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlFMThDOTJGNDEyREI5RTcxMDBDRjJBRUIgLyogUHJpbnRJbmZv
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTQxNCw2ICs5NDg0LDcgQEAKIAkJCQkxQTY0MjBFNDEy
RENFMkZGMDBDQUFFMkMgLyogU2hhcmVhYmxlQml0bWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUMwMUEyNjAxMTI2NjJGMjEwMEM5RUQ1NSAvKiBTaGFyZWFibGVCaXRtYXBDRy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1MTIxNzQ2MDE2NEMyMEUzMDAzN0E1QzEgLyogU2hhcmVhYmxlUmVzb3Vy
Y2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDQ1MEFFQzAxREMzRkFFNTAwOTk0M0YyIC8qIFNo
YXJlZE1lbW9yeUNvY29hLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEQUYwNkQ3MThCRDFBNDcw
MDgxQ0VCMSAvKiBTbWFydE1hZ25pZmljYXRpb25Db250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMkRFNjk0M0QxOEJEMkE2ODAwNUMxNUU1IC8qIFNtYXJ0TWFnbmlmaWNhdGlvbkNvbnRy
b2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTI3MkIyOEExNDA2
OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRhLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTQ4
OSw2ICs5NTYwLDcgQEAKIAkJCQk1MTAyMUU5QzEyQjE2Nzg4MDA1QzAzM0MgLyogV2ViQ29udGV4
dE1lbnVDbGllbnRNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTI5MzVENzEyODhEMTk0MDBB
NEI2OTUgLyogV2ViQ29udGV4dE1lbnVJdGVtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMEZC
QjlBMTI4OEM5NUUwMEFGRkRGNCAvKiBXZWJDb250ZXh0TWVudUl0ZW1EYXRhLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUExRUEwMjNGMURBQzMxREIwMDk2MDIxRiAvKiBXZWJDb250ZXh0TWVudUxp
c3RlbmVyUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFBODRDRTMxMjdGMzg2QjAwQ0E2
RUE0IC8qIFdlYkNvbnRleHRNZW51UHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFBQ0JC
QTExMjdBOEYyQzAwRDIwM0I5IC8qIFdlYkNvbnRleHRNZW51UHJveHlNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQkzMzA5MzQ0RjEzMTVCOTREMDA5N0E3QkMgLyogV2ViQ29va2llTWFuYWdlci5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTk1NTAsNyArOTYyMiw2IEBACiAJCQkJNTEwNTIzNzkxQzcz
REE3NzAwNzk5M0NCIC8qIFdlYklEQkNvbm5lY3Rpb25Ub0NsaWVudE1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTQxMjk5NTFDNjQyOEMyMDA1OUU3MTQgLyogV2ViSURC
Q29ubmVjdGlvblRvU2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMDUyMzc1MUM3M0Qz
OEYwMDc5OTNDQiAvKiBXZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXJNZXNzYWdlUmVjZWl2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJNDQ1MEFFQzAxREMzRkFFNTAwOTk0M0YyIC8qIFNoYXJlZE1l
bW9yeUNvY29hLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxQTU4NzgwMUQxQzUwODEwMDRCQTlB
RiAvKiBXZWJJREJSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNDRjZBQkMxMkM5MUVG
OTAwOEY5QzM1IC8qIFdlYkltYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDOEUyODIxMTI3
NUQxNTQwMEJDN0JEMCAvKiBXZWJJbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05NjY1
LDcgKzk3MzYsNiBAQAogCQkJCTFBNTNDMkE5MUEzMjU3MkIwMDRFOEM3MCAvKiBXZWJzaXRlRGF0
YVN0b3JlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNDgzMkMzMUE5NjVBM0MwMDhCNERGRSAv
KiBXZWJzaXRlRGF0YVN0b3JlQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQk1Qzc3MDY3NDFE
MTEzODM4MDAxMjcwMEYgLyogV2ViU29ja2V0UHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJQTFENDIwNDcxREI1NTc4NTAwQkI2QjBEIC8qIFdLQ29udGV4dE1lbnVMaXN0ZW5lci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk4MzYwMzQ5RjFBQ0IzNEQ2MDA2MjY1NDkgLyogV2ViU1FMaXRl
RGF0YWJhc2VUcmFja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNTJDMEY3MUEzOENEQzcw
MDE2MTYwQSAvKiBXZWJTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkNDNTcxNUMxMTVBREFFRjAwMUNDQUY5IC8qIFdlYlN5c3RlbUludGVyZmFjZS5tbSBp
biBTb3VyY2VzICovLApAQCAtOTY3OSw2ICs5NzQ5LDcgQEAKIAkJCQkxQUFGMDhBMTE5MjY4MUQx
MDBCNjM5MEMgLyogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0MzNjFENzgxOTI4MDNCRDAwMzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJv
bGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE1NzM5QkJF
MUI0MjA0NjYwMEQyNThDMSAvKiBXZWJVc2VyTWVkaWFDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJODNFRTU3NUIxREI3RDYxMTAwQzc0QzUwIC8qIFdlYlZhbGlkYXRpb25NZXNzYWdlQ2xp
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUyRDVBMUI3MUM1NzRBMDIwMERFMzRBMyAvKiBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJM0Y0MThFRjkx
ODg3QkQ5NzAwMjc5NUZEIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJNZXNzYWdlUmVjZWl2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTJENUExQjExQzU3NDk2MjAwREUzNEEzIC8qIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSBpbiBTb3VyY2VzICovLApAQCAtOTY4Niw3
ICs5NzU3LDYgQEAKIAkJCQkyREZDN0RCQzFCQ0NDMTk1MDBDMTU0OEMgLyogV2ViVmlld0ltcGwu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlDMDMzN0REMTEyN0EyOTgwMDA4RkY0RjQgLyogV2ViV2hl
ZWxFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjgxNjBEMDE4NzY0NTU3MDAyMUU3OUQg
LyogV2luZG93U2VydmVyQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAotCQkJCTUzMjE1OTUz
MURCQUU3MTgwMDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkyOUNENTVBQjEyOEUyOTRGMDAxMzNDODUgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVj
dEJhc2UubW0gaW4gU291cmNlcyAqLywKIAkJCQkyOTIzMkRGODE4QjJBOUFFMDBEMDU5NkYgLyog
V0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdElPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTI5
MjMyREY5MThCMkFCM0EwMEQwNTk2RiAvKiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0TWFj
Lm1tIGluIFNvdXJjZXMgKi8sCkBAIC05NzA1LDcgKzk3NzUsNiBAQAogCQkJCUJDQkFBQ0Y1MTQ1
MjMyNEYwMDUzRjgyRiAvKiBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUFFMDBENEMxODJENkVCMDAwMDg3REQ3IC8qIFdLQnJvd3NpbmdDb250ZXh0SGFuZGxl
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyMDRFRUUxMUM4M0VDODAwOEYzMzc1IC8qIFdLQnVu
ZGxlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUzMjE1OTU0MURCQUU3MUQwMDU0QUEzQyAvKiBO
ZXR3b3JrRGF0YVRhc2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM1RUVCOUUxMjc3NjFBQzAw
MzMyMkI4IC8qIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTkzNUVFQkEwMTI3NzYxQUMwMDMzMjJCOCAvKiBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdEl0ZW0u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGQTJENzcxNTIxMkUyNjAwQzFCQTBCIC8qIFdLQnVu
ZGxlRE9NV2luZG93RXh0ZW5zaW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTczMiw2ICs5ODAx
LDcgQEAKIAkJCQlCQ0I5RTI0QzExMjBFMTVDMDBBMTM3RTAgLyogV0tDb250ZXh0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTFBRTUyRjk3MTkyMDI2MzMwMEExRkEzNyAvKiBXS0NvbnRleHRDb25m
aWd1cmF0aW9uUmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxQTU1NUY1MTI4QzZDNDcwMDlB
QkNFQyAvKiBXS0NvbnRleHRNZW51SXRlbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBMUQ0MjA0
NzFEQjU1Nzg1MDBCQjZCMEQgLyogV0tDb250ZXh0TWVudUxpc3RlbmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTlGQjVGMzk0MTY5RTZBODAwMDJDMjVCRiAvKiBXS0NvbnRleHRQcml2YXRlTWFj
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzMwOTM0NUExMzE1Qjk5ODAwOTdBN0JDIC8qIFdLQ29v
a2llTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTJGNThGOTEyQTg4QTU0MDA2Mjk1
MzAgLyogV0tDcmVkZW50aWFsLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTc2NCwxNCArOTgzNCwx
MiBAQAogCQkJCUUxQUVBMjMwMTQ2ODdCREIwMDgwNDU2OSAvKiBXS0Z1bGxLZXlib2FyZEFjY2Vz
c1dhdGNoZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQlDRENBODVDODEzMkFCQTRFMDBFOTYxREYg
LyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJD
NTRDQzEzMTJENjc0RUUwMDVDNjdCMCAvKiBXS0dlb2xvY2F0aW9uTWFuYWdlci5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlBMUVBMDIzRjFEQUMzMURCMDA5NjAyMUYgLyogV2ViQ29udGV4dE1lbnVM
aXN0ZW5lclByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMDZGNDRGMTJEQkRGM0YwMDJE
NzhERSAvKiBXS0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkMwRTYxOTkxMkQ2Q0QxMjAwMTJBNzJBIC8qIFdLR2VvbG9jYXRpb25Qb3NpdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkNCNEU1MDE4QkJFMDQ0MDAwRkNGQzkgLyogV0tHZW9s
b2NhdGlvblByb3ZpZGVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDQjRFNTExOEJCRTA0
NDAwMEZDRkM5IC8qIFdLR2VvbG9jYXRpb25Qcm92aWRlcklPU09iakNTZWN1cml0eU9yaWdpbi5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTBGMTc0QUE3MTQyQUFDNjEwMDM5MjUwRiAvKiBXS0dlb21l
dHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI2MkU3MzEwMTQzMDQ3QTYwMDY5RUMzNSAvKiBX
S0hpdFRlc3RSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJODNFRTU3NUIxREI3RDYxMTAw
Qzc0QzUwIC8qIFdlYlZhbGlkYXRpb25NZXNzYWdlQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxMTBBRTBDMTMzQzE2Q0IwMDcyNzE3QSAvKiBXS0ljb25EYXRhYmFzZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1MTIzQ0YxQjEzM0QyNjBBMDA1NkY4MDAgLyogV0tJY29uRGF0YWJhc2VD
Ry5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0NGNkFDMjEyQzkxRjM0MDA4RjlDMzUgLyogV0tJ
bWFnZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL2NvbmZp
Zy5oIGIvU291cmNlL1dlYktpdDIvY29uZmlnLmgKaW5kZXggNzBjZjUwYjZmYTRjNDdlZGFlMWY4
NjA4ZTYyNTc2OGIyOWU0YmQ2My4uY2E1ODBjNDllZjc1MDc1OTc3Y2Q1NTM0MjZjOWVhYmEwNTFm
YWIwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvY29uZmlnLmgKKysrIGIvU291cmNlL1dl
YktpdDIvY29uZmlnLmgKQEAgLTExMCw2ICsxMTAsMTIgQEAKICNlbmRpZgogI2VuZGlmCiAKKyNp
Zm5kZWYgRU5BQkxFX05FVFdPUktfQ0FQVFVSRQorI2lmIFVTRShORVRXT1JLX1NFU1NJT04pICYm
IFBMQVRGT1JNKENPQ09BKQorI2RlZmluZSBFTkFCTEVfTkVUV09SS19DQVBUVVJFIDEKKyNlbmRp
ZgorI2VuZGlmCisKICNpZm5kZWYgRU5BQkxFX05FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVW
QUxJREFUSU9OCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpICYmIChQTEFURk9STShDT0NPQSkg
fHwgUExBVEZPUk0oR1RLKSkKICNkZWZpbmUgRU5BQkxFX05FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJ
VkVfUkVWQUxJREFUSU9OIDEK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296410</attachid>
            <date>2016-12-07 13:23:38 -0800</date>
            <delta_ts>2016-12-07 16:44:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164527-20161207132259.patch</filename>
            <type>text/plain</type>
            <size>528986</size>
            <attacher name="Keith Rollin">krollin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA5NDM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzNlMDYyN2RmN2U1NGFk
ZmQxMjZmZjBiMzk5Njk3OGVhNTEzYzkxYy4uMTJiYThkNDUxM2IwNTI2Mzg1OTc1Mzg5NmVhZWFi
OTVhODQyZTNlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE2LTExLTI5ICBLZWl0
aCBSb2xsaW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KKworICAgICAgICBOZXR3b3JrIGV2ZW50IHJl
Y29yZC9yZXBsYXkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NDUyNworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjkxNjgxNTc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICBFeHBvcnQgcGFyc2VVUkxF
bmNvZGVkRm9ybS4KKworICAgICAgICBObyBuZXcgdGVzdHMgLS0gbm8gZnVuY3Rpb25hbGl0eSBh
ZGRlZCwgY2hhbmdlZCwgb3IgcmVtb3ZlZC4KKworICAgICAgICAqIHBsYXRmb3JtL1VSTFBhcnNl
ci5oOgorCiAyMDE2LTEyLTA2ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAg
ICAgICBBcHBseSBzdHlsaW5nIHRvIG1lZGlhIGRvY3VtZW50cyB3aXRoIG1vZGVybiBjb250cm9s
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCmluZGV4IDA5MzgxNmRkMzZhMjg1Nzg4OTI3YjdkYzEzNDc3Y2Y1OWYwNzE5ZjAu
LmM1NjQxZTg5ZjFiMDBkYTQzN2E5OTFkYjkxZGQwMDNhNzk3OTU0MTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNTggQEAKKzIwMTYtMTEtMjkgIEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIE5ldHdvcmsgZXZlbnQgcmVjb3JkL3JlcGxheQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0NTI3CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8yOTE2ODE1Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVu
c2VuLgorCisgICAgICAgIEFkZCBXZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvKiBmb3Ig
cmVjb3JkaW5nIHRoZSBuZXR3b3JrIGV2ZW50cworICAgICAgICB0aGF0IG9jY3VyIHdoZW4gbG9h
ZGluZyBhIHBhZ2UgYW5kIGZvciByZXBsYXlpbmcgdGhlbSBsYXRlci4gVXBkYXRlCisgICAgICAg
IE5ldHdvcmtMb2FkIHRvIGludm9rZSBjYXB0dXJlIGZhY2lsaXRpZXMuIEFkZCBwcmVmZXJlbmNl
cyBmb3IgZW5hYmxpbmcKKyAgICAgICAgcmVjb3JkIG9yIHJlcGxheS4KKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6Ok5ldHdvcmtMb2FkKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0xvYWQ6OmluaXRpYWxpemVGb3JSZWNvcmQpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrTG9hZDo6aW5pdGlhbGl6ZUZvclJlcGxheSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtMb2FkOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6OnNl
dERlZmVyc0xvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6Y29udGludWVX
aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6c2hhcmVkV2ls
bFNlbmRSZWRpcmVjdGVkUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtMb2FkOjpu
b3RpZnlEaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6
ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6ZGlkQ29tcGxl
dGVXaXRoRXJyb3IpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmg6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnRlcm1pbmF0ZSk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaDoK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OmNvcHlIZWFkZXJzKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OktleVZhbHVlUGFpcjo6S2V5VmFsdWVQ
YWlyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlc291cmNlUmVxdWVzdDo6
UmVzb3VyY2VSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlc291
cmNlUmVxdWVzdDo6b3BlcmF0b3IgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0KToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlc291cmNlUmVzcG9uc2U6OlJlc291cmNlUmVzcG9u
c2UpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVzb3VyY2VSZXNwb25zZTo6
b3BlcmF0b3IgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYXB0dXJlOjpSZXNvdXJjZUVycm9yOjpSZXNvdXJjZUVycm9yKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhcHR1cmU6OlJlc291cmNlRXJyb3I6Om9wZXJhdG9yIFdlYkNvcmU6OlJl
c291cmNlRXJyb3IpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6SlNPTkNvZGVy
OjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6SlNPTkNvZGVyOjpk
ZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6SlNPTkNvZGVyPFN0cmlu
Zz46OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpKU09OQ29kZXI8
U3RyaW5nPjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkpTT05D
b2RlcjxDYXB0dXJlVGltZVR5cGU+OjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FwdHVyZTo6SlNPTkNvZGVyPENhcHR1cmVUaW1lVHlwZT46OmRlY29kZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpKU09OQ29kZXI8S2V5VmFsdWVQYWlyPjo6ZW5jb2RlKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkpTT05Db2RlcjxLZXlWYWx1ZVBhaXI+
OjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6SlNPTkNvZGVyPFZl
Y3RvcjxUPj46OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpKU09O
Q29kZXI8VmVjdG9yPFQ+Pjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1
cmU6OkpTT05Db2RlcjxSZXNvdXJjZVJlcXVlc3Q+OjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FwdHVyZTo6SlNPTkNvZGVyPFJlc291cmNlUmVxdWVzdD46OmRlY29kZSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpKU09OQ29kZXI8UmVzb3VyY2VSZXNwb25z
ZT46OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpKU09OQ29kZXI8
UmVzb3VyY2VSZXNwb25zZT46OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0
dXJlOjpKU09OQ29kZXI8UmVzb3VyY2VFcnJvcj46OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYXB0dXJlOjpKU09OQ29kZXI8UmVzb3VyY2VFcnJvcj46OmRlY29kZSk6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpKU09OQ29kZXI8V2ViQ29yZTo6U2hhcmVkQnVm
ZmVyPjo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkpTT05Db2Rl
cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+OjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FwdHVyZTo6SlNPTkNvZGVyPFJlcXVlc3RTZW50RXZlbnQ+OjplbmNvZGUpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6SlNPTkNvZGVyPFJlcXVlc3RTZW50RXZlbnQ+Ojpk
ZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6SlNPTkNvZGVyPFJlc3Bv
bnNlUmVjZWl2ZWRFdmVudD46OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0
dXJlOjpKU09OQ29kZXI8UmVzcG9uc2VSZWNlaXZlZEV2ZW50Pjo6ZGVjb2RlKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkpTT05Db2RlcjxSZWRpcmVjdFJlY2VpdmVkRXZlbnQ+
OjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6SlNPTkNvZGVyPFJl
ZGlyZWN0UmVjZWl2ZWRFdmVudD46OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YXB0dXJlOjpKU09OQ29kZXI8UmVkaXJlY3RTZW50RXZlbnQ+OjplbmNvZGUpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6SlNPTkNvZGVyPFJlZGlyZWN0U2VudEV2ZW50Pjo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OkpTT05Db2RlcjxEYXRhUmVj
ZWl2ZWRFdmVudD46OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpK
U09OQ29kZXI8RGF0YVJlY2VpdmVkRXZlbnQ+OjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpO
ZXR3b3JrQ2FwdHVyZTo6SlNPTkNvZGVyPEZpbmlzaGVkRXZlbnQ+OjplbmNvZGUpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6SlNPTkNvZGVyPEZpbmlzaGVkRXZlbnQ+OjpkZWNv
ZGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6ZXZlbnRUb1N0cmluZyk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpzdHJpbmdUb0V2ZW50KToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuaDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpUaW1lZEV2ZW50OjpUaW1lZEV2ZW50KToK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlTG9nZ2luZy5o
OiBBZGRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJl
TWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFu
YWdlcjo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFn
ZXI6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdl
cjo6dGVybWluYXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6
OmZpbmRNYXRjaCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpm
aW5kRXhhY3RNYXRjaCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2Vy
OjpmaW5kQmVzdEZ1enp5TWF0Y2gpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6
TWFuYWdlcjo6ZnV6enlNYXRjaFVSTHMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVy
ZTo6TWFuYWdlcjo6bG9hZFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0
dXJlOjpNYW5hZ2VyOjpyZXBvcnRMb2FkUGF0aCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YXB0dXJlOjpNYW5hZ2VyOjpyZXBvcnRSZWNvcmRQYXRoKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhcHR1cmU6Ok1hbmFnZXI6OnJlcG9ydFJlcGxheVBhdGgpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6cmVxdWVzdFRvUGF0aCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpzdHJpbmdUb0hhc2gpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6aGFzaFRvUGF0aCk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpsb2dSZWNvcmRlZFJlc291cmNlKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OmxvZ0xvYWRlZFJlc291cmNlKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OmxvZ1BsYXllZEJhY2tS
ZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjplbnN1
cmVGaWxlSGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6
Om9wZW5DYWNoZUZpbGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdl
cjo6cmVhZEZpbGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6
Z2V0TGluZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpnZXRX
b3JkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OnByaW50VG9G
aWxlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlTWFu
YWdlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6
OmlzUmVjb3JkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6
OmlzUmVwbGF5aW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6
Om1vZGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVS
ZWNvcmRlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVj
b3JkZXI6OnJlY29yZFJlcXVlc3RTZW50KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1
cmU6OlJlY29yZGVyOjpyZWNvcmRSZXNwb25zZVJlY2VpdmVkKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhcHR1cmU6OlJlY29yZGVyOjpyZWNvcmRSZWRpcmVjdFJlY2VpdmVkKToKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlY29yZGVyOjpyZWNvcmRSZWRpcmVjdFNlbnQp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVjb3JkZXI6OnJlY29yZERhdGFS
ZWNlaXZlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZWNvcmRlcjo6cmVj
b3JkRmluaXNoKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlY29yZGVyOjp3
cml0ZUV2ZW50cyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2Fw
dHVyZVJlY29yZGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6
UmVjb3JkZXI6OnJlY29yZEV2ZW50KToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJl
L05ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhcHR1cmU6OlJlcGxheWVyOjpyZXBsYXlSZXNvdXJjZSk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmg6IEFkZGVkLgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVzb3VyY2U6OlJlc291cmNl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlc291cmNlOjp1cmwpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVzb3VyY2U6OmJhc2VVUkwpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVzb3VyY2U6OnF1ZXJ5UGFyYW1ldGVycyk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZXNvdXJjZTo6ZXZlbnRTdHJlYW0pOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6UmVzb3VyY2U6OkV2ZW50U3RyZWFtOjpF
dmVudFN0cmVhbSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZXNvdXJjZTo6
RXZlbnRTdHJlYW06Om5leHRFdmVudCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVy
ZS9OZXR3b3JrQ2FwdHVyZVJlc291cmNlLmg6IEFkZGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVUeXBlcy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0NhcHR1cmU6OlR5cGVIb2xkZXI6OmZvckVhY2hUeXBlSW1wbCk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpUeXBlSG9sZGVyOjpmb3JFYWNoVHlwZSk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFza1Jl
cGxheTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Nh
cHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxheTo6fk5ldHdvcmtEYXRhVGFza1JlcGxheSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnJl
c3VtZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpOZXR3b3JrRGF0YVRhc2tS
ZXBsYXk6OnN1c3BlbmQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29y
a0RhdGFUYXNrUmVwbGF5OjpjYW5jZWwpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVy
ZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5Ojpjb21wbGV0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYXB0dXJlOjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmludmFsaWRhdGVBbmRDYW5jZWwp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5
OjplbnF1ZXVlRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6
Ok5ldHdvcmtEYXRhVGFza1JlcGxheTo6cmVwbGF5UmVxdWVzdFNlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrQ2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5OjpyZXBsYXlSZXNwb25z
ZVJlY2VpdmVkKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRh
VGFza1JlcGxheTo6cmVwbGF5UmVkaXJlY3RSZWNlaXZlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYXB0dXJlOjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnJlcGxheVJlZGlyZWN0U2VudCk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6
OnJlcGxheURhdGFSZWNlaXZlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpO
ZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnJlcGxheUZpbmlzaGVkKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxheTo6ZGlkUmVjZWl2ZVJlc3BvbnNl
KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxh
eTo6ZGlkRmluaXNoKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtE
YXRhVGFza1JlcGxheS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6
Ok5ldHdvcmtEYXRhVGFza1JlcGxheTo6Y3JlYXRlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9jYXB0dXJlL2pzb24uaHBwOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2Vi
UHJvY2Vzc1Bvb2xDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBs
YXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKiBXZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY29uZmlnLmg6CisKIDIwMTYtMTItMDYg
IENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMDkzOTEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9VUkxQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5o
CmluZGV4IDg2NGVhY2RmNzUxZjEzYzQwMTY1OTgyZmJhZWJmNzAzYWIzOThhZDUuLjc4ZTBlMTlj
MmIzYmMyZmE2ZmUyZWMzMjFhNDUyYzc3MTIyOWMxNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1VSTFBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VS
TFBhcnNlci5oCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgdm9pZCBzZXRFbmFibGVkKGJvb2wpOwogICAgIAogICAgIHR5cGVkZWYgVmVjdG9yPHN0
ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IFVSTEVuY29kZWRGb3JtOwotICAgIHN0YXRpYyBVUkxF
bmNvZGVkRm9ybSBwYXJzZVVSTEVuY29kZWRGb3JtKFN0cmluZ1ZpZXcpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBVUkxFbmNvZGVkRm9ybSBwYXJzZVVSTEVuY29kZWRGb3JtKFN0cmluZ1Zp
ZXcpOwogICAgIHN0YXRpYyBTdHJpbmcgc2VyaWFsaXplKGNvbnN0IFVSTEVuY29kZWRGb3JtJik7
CiAKICAgICBzdGF0aWMgY29uc3QgVUlETkEmIGludGVybmF0aW9uYWxEb21haW5OYW1lVHJhbnNj
b2RlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAppbmRleCBlZmIyZDY3NThkYTU3OTJlODI4YTllNjVk
NTdjNmRhMzliMTc3MjQ1Li5hYjhjMjUzNzZlZTg0ZjE2MmVkZTc5MDgxMjk1YzU2MmYwMTA5NmRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9DTWFrZUxpc3RzLnR4dApAQCAtMjA4LDYgKzIwOCwxMyBAQCBzZXQoTmV0d29ya1By
b2Nlc3NfQ09NTU9OX1NPVVJDRVMKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2Fj
aGVTdWJyZXNvdXJjZXNFbnRyeS5jcHAKICAgICBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGVTdGF0aXN0aWNzLmNwcAogICAgIE5ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNo
ZVN0b3JhZ2UuY3BwCisKKyAgICBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJl
RXZlbnQuY3BwCisgICAgTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZU1hbmFn
ZXIuY3BwCisgICAgTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlY29yZGVy
LmNwcAorICAgIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXBsYXllci5j
cHAKKyAgICBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3Bw
CisgICAgTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwCiAp
CiAKIHNldChXZWJLaXQyX1NPVVJDRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtMb2FkLmNwcAppbmRleCA1MTdmODQ1YWFiZTUyM2YyZWZhOTYxODRlZWY3MjUzYWUy
Y2E0ZDlmLi4xYzNlMjgxM2RjNjgwM2E2M2MzODhjOTczMWI0MGY0NzBhOTQ3YmVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCkBAIC00Myw2ICs0
MywxMCBAQAogI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFza0NvY29hLmgiCiAjZW5kaWYKIAorI2lm
IEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVNYW5hZ2Vy
LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwpAQCAtNjcsNiArNzEsNDUgQEAgTmV0d29ya0xvYWQ6Ok5ldHdvcmtMb2FkKE5ldHdvcmtM
b2FkQ2xpZW50JiBjbGllbnQsIE5ldHdvcmtMb2FkUGFyYW1ldGVycyYmIHBhcmEKICAgICAsIG1f
cGFyYW1ldGVycyhXVEZNb3ZlKHBhcmFtZXRlcnMpKQogICAgICwgbV9jdXJyZW50UmVxdWVzdCht
X3BhcmFtZXRlcnMucmVxdWVzdCkKIHsKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorICAg
IHN3aXRjaCAoTmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OnNpbmdsZXRvbigpLm1vZGUoKSkgewor
ICAgIGNhc2UgTmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OlJlY29yZFJlcGxheU1vZGU6OlJlY29y
ZDoKKyAgICAgICAgaW5pdGlhbGl6ZUZvclJlY29yZChuZXR3b3JrU2Vzc2lvbik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgTmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OlJlY29yZFJlcGxheU1v
ZGU6OlJlcGxheToKKyAgICAgICAgaW5pdGlhbGl6ZUZvclJlcGxheShuZXR3b3JrU2Vzc2lvbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OlJlY29y
ZFJlcGxheU1vZGU6OkRpc2FibGVkOgorICAgICAgICBpbml0aWFsaXplKG5ldHdvcmtTZXNzaW9u
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2Vsc2UKKyAgICBpbml0aWFsaXplKG5ldHdvcmtT
ZXNzaW9uKTsKKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKK3ZvaWQg
TmV0d29ya0xvYWQ6OmluaXRpYWxpemVGb3JSZWNvcmQoTmV0d29ya1Nlc3Npb24mIG5ldHdvcmtT
ZXNzaW9uKQoreworICAgIG1fcmVjb3JkZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE5ldHdvcmtDYXB0
dXJlOjpSZWNvcmRlcj4oKTsKKyAgICBtX3Rhc2sgPSBOZXR3b3JrRGF0YVRhc2s6OmNyZWF0ZShu
ZXR3b3JrU2Vzc2lvbiwgKnRoaXMsIG1fcGFyYW1ldGVycyk7CisgICAgaWYgKCFtX3BhcmFtZXRl
cnMuZGVmZXJzTG9hZGluZykgeworICAgICAgICBtX3Rhc2stPnJlc3VtZSgpOworICAgICAgICBt
X3JlY29yZGVyLT5yZWNvcmRSZXF1ZXN0U2VudChtX3BhcmFtZXRlcnMucmVxdWVzdCk7CisgICAg
fQorfQorCit2b2lkIE5ldHdvcmtMb2FkOjppbml0aWFsaXplRm9yUmVwbGF5KE5ldHdvcmtTZXNz
aW9uJiBuZXR3b3JrU2Vzc2lvbikKK3sKKyAgICBtX3JlcGxheWVyID0gc3RkOjptYWtlX3VuaXF1
ZTxOZXR3b3JrQ2FwdHVyZTo6UmVwbGF5ZXI+KCk7CisgICAgbV90YXNrID0gbV9yZXBsYXllci0+
cmVwbGF5UmVzb3VyY2UobmV0d29ya1Nlc3Npb24sICp0aGlzLCBtX3BhcmFtZXRlcnMpOworICAg
IGlmICghbV9wYXJhbWV0ZXJzLmRlZmVyc0xvYWRpbmcpCisgICAgICAgIG1fdGFzay0+cmVzdW1l
KCk7Cit9CisjZW5kaWYKKwordm9pZCBOZXR3b3JrTG9hZDo6aW5pdGlhbGl6ZShOZXR3b3JrU2Vz
c2lvbiYgbmV0d29ya1Nlc3Npb24pCit7CiAgICAgbV90YXNrID0gTmV0d29ya0RhdGFUYXNrOjpj
cmVhdGUobmV0d29ya1Nlc3Npb24sICp0aGlzLCBtX3BhcmFtZXRlcnMpOwogICAgIGlmICghbV9w
YXJhbWV0ZXJzLmRlZmVyc0xvYWRpbmcpCiAgICAgICAgIG1fdGFzay0+cmVzdW1lKCk7CkBAIC0x
MTMsOCArMTU2LDEzIEBAIHZvaWQgTmV0d29ya0xvYWQ6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBk
ZWZlcnMpCiAgICAgaWYgKG1fdGFzaykgewogICAgICAgICBpZiAoZGVmZXJzKQogICAgICAgICAg
ICAgbV90YXNrLT5zdXNwZW5kKCk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICBtX3Rhc2stPnJlc3VtZSgpOworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisg
ICAgICAgICAgICBpZiAobV9yZWNvcmRlcikKKyAgICAgICAgICAgICAgICBtX3JlY29yZGVyLT5y
ZWNvcmRSZXF1ZXN0U2VudChtX3BhcmFtZXRlcnMucmVxdWVzdCk7CisjZW5kaWYKKyAgICAgICAg
fQogICAgIH0KICNlbHNlCiAgICAgaWYgKG1faGFuZGxlKQpAQCAtMTQyLDYgKzE5MCwxMSBAQCB2
b2lkIE5ldHdvcmtMb2FkOjpjb250aW51ZVdpbGxTZW5kUmVxdWVzdChXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmJiBuZXdSZXF1ZXN0KQogICAgIG1fY3VycmVudFJlcXVlc3QudXBkYXRlRnJvbURl
bGVnYXRlUHJlc2VydmluZ09sZFByb3BlcnRpZXMobmV3UmVxdWVzdCk7CiAjZW5kaWYKIAorI2lm
IEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisgICAgaWYgKG1fcmVjb3JkZXIpCisgICAgICAgIG1f
cmVjb3JkZXItPnJlY29yZFJlZGlyZWN0U2VudChuZXdSZXF1ZXN0KTsKKyNlbmRpZgorCiAjaWYg
VVNFKE5FVFdPUktfU0VTU0lPTikKICAgICBhdXRvIHJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXIg
PSBzdGQ6OmV4Y2hhbmdlKG1fcmVkaXJlY3RDb21wbGV0aW9uSGFuZGxlciwgbnVsbHB0cik7CiAg
ICAgQVNTRVJUKHJlZGlyZWN0Q29tcGxldGlvbkhhbmRsZXIpOwpAQCAtMTk0LDYgKzI0NywxMSBA
QCB2b2lkIE5ldHdvcmtMb2FkOjpzaGFyZWRXaWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0KFJlc291
cmNlUmVxdWVzdCYmIHJlcXVlc3QsIFJlcwogICAgIEFTU0VSVCghcmVkaXJlY3RSZXNwb25zZS5p
c051bGwoKSk7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAorI2lmIEVOQUJMRShO
RVRXT1JLX0NBUFRVUkUpCisgICAgaWYgKG1fcmVjb3JkZXIpCisgICAgICAgIG1fcmVjb3JkZXIt
PnJlY29yZFJlZGlyZWN0UmVjZWl2ZWQocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CisjZW5k
aWYKKwogICAgIGF1dG8gb2xkUmVxdWVzdCA9IFdURk1vdmUobV9jdXJyZW50UmVxdWVzdCk7CiAg
ICAgbV9jdXJyZW50UmVxdWVzdCA9IHJlcXVlc3Q7CiAgICAgbV9jbGllbnQuZ2V0KCkud2lsbFNl
bmRSZWRpcmVjdGVkUmVxdWVzdChXVEZNb3ZlKG9sZFJlcXVlc3QpLCBXVEZNb3ZlKHJlcXVlc3Qp
LCBXVEZNb3ZlKHJlZGlyZWN0UmVzcG9uc2UpKTsKQEAgLTMyNCw2ICszODIsMTEgQEAgdm9pZCBO
ZXR3b3JrTG9hZDo6bm90aWZ5RGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlUmVzcG9uc2UmJiBy
ZXNwb25zZSwgUmVzcG9uc2UKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCisjaWYg
RU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyAgICBpZiAobV9yZWNvcmRlcikKKyAgICAgICAgbV9y
ZWNvcmRlci0+cmVjb3JkUmVzcG9uc2VSZWNlaXZlZChyZXNwb25zZSk7CisjZW5kaWYKKwogICAg
IGlmIChzaGFyZWREaWRSZWNlaXZlUmVzcG9uc2UoV1RGTW92ZShyZXNwb25zZSkpID09IE5ldHdv
cmtMb2FkQ2xpZW50OjpTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZTo6Tm8pIHsKICAg
ICAgICAgbV9yZXNwb25zZUNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcik7CiAgICAgICAgIHJldHVybjsKQEAgLTMzNSw2ICszOTgsMTEgQEAgdm9pZCBOZXR3b3Jr
TG9hZDo6ZGlkUmVjZWl2ZURhdGEoUmVmPFNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIpCiB7CiAgICAg
QVNTRVJUKCFtX3Rocm90dGxlKTsKIAorI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisgICAg
aWYgKG1fcmVjb3JkZXIpCisgICAgICAgIG1fcmVjb3JkZXItPnJlY29yZERhdGFSZWNlaXZlZChi
dWZmZXIuZ2V0KCkpOworI2VuZGlmCisKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgdGhl
IGVuY29kZWQgZGF0YSBsZW5ndGgsIG5vdCB0aGUgZGVjb2RlZCBkYXRhIGxlbmd0aC4KICAgICBh
dXRvIHNpemUgPSBidWZmZXItPnNpemUoKTsKICAgICBtX2NsaWVudC5nZXQoKS5kaWRSZWNlaXZl
QnVmZmVyKFdURk1vdmUoYnVmZmVyKSwgc2l6ZSk7CkBAIC0zNDQsNiArNDEyLDExIEBAIHZvaWQg
TmV0d29ya0xvYWQ6OmRpZENvbXBsZXRlV2l0aEVycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImIGVy
cm9yKQogewogICAgIEFTU0VSVCghbV90aHJvdHRsZSk7CiAKKyNpZiBFTkFCTEUoTkVUV09SS19D
QVBUVVJFKQorICAgIGlmIChtX3JlY29yZGVyKQorICAgICAgICBtX3JlY29yZGVyLT5yZWNvcmRG
aW5pc2goZXJyb3IpOworI2VuZGlmCisKICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAg
IG1fY2xpZW50LmdldCgpLmRpZEZpbmlzaExvYWRpbmcoV1RGOjptb25vdG9uaWNhbGx5SW5jcmVh
c2luZ1RpbWUoKSk7CiAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0xvYWQuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtMb2FkLmgKaW5kZXggNzY2YmQ1MGRjYzg5OTM0MTM1NjIwZmJiZmQ1ZTFlOWFlZDA2ZjMw
YS4uYjI1MmEwYzAxZDE2YjdjNTZhZTg1MWZhNTQ4MDE0Njg0MDI1YTlhMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrTG9hZC5oCkBAIC0zOCw2ICszOCwxMSBAQAog
I2luY2x1ZGUgPFdlYkNvcmUvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaD4KICNlbmRpZgogCisj
aWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZVJlY29y
ZGVyLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVSZXBsYXllci5oIgorI2VuZGlmCisKIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBOZXR3b3JrTG9hZCBmaW5hbCA6CkBAIC05NSw2ICsx
MDAsMTQgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6CisjaWYgVVNFKE5FVFdPUktfU0VT
U0lPTikKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorICAgIHZvaWQgaW5pdGlhbGl6ZUZv
clJlY29yZChOZXR3b3JrU2Vzc2lvbiYpOworICAgIHZvaWQgaW5pdGlhbGl6ZUZvclJlcGxheShO
ZXR3b3JrU2Vzc2lvbiYpOworI2VuZGlmCisgICAgdm9pZCBpbml0aWFsaXplKE5ldHdvcmtTZXNz
aW9uJik7CisjZW5kaWYKKwogICAgIE5ldHdvcmtMb2FkQ2xpZW50OjpTaG91bGRDb250aW51ZURp
ZFJlY2VpdmVSZXNwb25zZSBzaGFyZWREaWRSZWNlaXZlUmVzcG9uc2UoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYmKTsKICAgICB2b2lkIHNoYXJlZFdpbGxTZW5kUmVkaXJlY3RlZFJlcXVlc3Qo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmJik7
CiAKQEAgLTE1MSw2ICsxNjQsMTEgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0IG1fY3VycmVudFJlcXVlc3Q7IC8vIFVwZGF0ZWQgb24gcmVkaXJlY3Rz
LgorCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8TmV0
d29ya0NhcHR1cmU6OlJlY29yZGVyPiBtX3JlY29yZGVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxO
ZXR3b3JrQ2FwdHVyZTo6UmVwbGF5ZXI+IG1fcmVwbGF5ZXI7CisjZW5kaWYKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MuY3BwCmluZGV4IDYxZjk4NzY2MDliNmQ3MGE4ZjZlMWMwNzk1N2ZiODU5NjM4
MjE4ODIuLmZmYWY3ZGI4NTg3NWJjZTY2MGQ4NjYzNTQyYTkzZGQ1YWNjNTc0MTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTc0
LDYgKzc0LDEwIEBACiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlQ29kZXJzLmgiCiAjZW5kaWYKIAor
I2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVNYW5h
Z2VyLmgiCisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgIk5ldHdvcmtT
ZXNzaW9uQ29jb2EuaCIKICNlbmRpZgpAQCAtMjIyLDYgKzIyNiwxMiBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMmJgogICAgICAgICBtZW1vcnlQcmVzc3VyZUhhbmRsZXIuaW5zdGFsbCgpOwogICAg
IH0KIAorI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisgICAgTmV0d29ya0NhcHR1cmU6Ok1h
bmFnZXI6OnNpbmdsZXRvbigpLmluaXRpYWxpemUoCisgICAgICAgIHBhcmFtZXRlcnMucmVjb3Jk
UmVwbGF5TW9kZSwKKyAgICAgICAgcGFyYW1ldGVycy5yZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9u
KTsKKyNlbmRpZgorCiAgICAgbV9kaXNrQ2FjaGVJc0Rpc2FibGVkRm9yVGVzdGluZyA9IHBhcmFt
ZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uOwogCiAgICAgbV9kaXNrQ2FjaGVT
aXplT3ZlcnJpZGUgPSBwYXJhbWV0ZXJzLmRpc2tDYWNoZVNpemVPdmVycmlkZTsKQEAgLTU5Niw2
ICs2MDYsMTAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6bG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRo
VmFsdWUodWludDY0X3Qgd2ViUGFnZUlELCBjb25zdCBTdHIKIAogdm9pZCBOZXR3b3JrUHJvY2Vz
czo6dGVybWluYXRlKCkKIHsKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorICAgIE5ldHdv
cmtDYXB0dXJlOjpNYW5hZ2VyOjpzaW5nbGV0b24oKS50ZXJtaW5hdGUoKTsKKyNlbmRpZgorCiAg
ICAgcGxhdGZvcm1UZXJtaW5hdGUoKTsKICAgICBDaGlsZFByb2Nlc3M6OnRlcm1pbmF0ZSgpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCmluZGV4IGJkN2FiNTQ4YjljNDU3
NGQyNDFmNDc3ZDljODk3N2MyYTRjMmQ3YzEuLjA5OWEzYTQzNDdiYTIzODUwYjFjOGY5Njk2YmIz
ODEyNjgwN2IwMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKQEAgLTkz
LDYgKzkzLDEwIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29k
ZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAjaWYgT1MoTElOVVgpCiAgICAgZW5jb2Rl
ciA8PCBtZW1vcnlQcmVzc3VyZU1vbml0b3JIYW5kbGU7CiAjZW5kaWYKKyNpZiBFTkFCTEUoTkVU
V09SS19DQVBUVVJFKQorICAgIGVuY29kZXIgPDwgcmVjb3JkUmVwbGF5TW9kZTsKKyAgICBlbmNv
ZGVyIDw8IHJlY29yZFJlcGxheUNhY2hlTG9jYXRpb247CisjZW5kaWYKIH0KIAogYm9vbCBOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2Rl
ciwgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHJlc3VsdCkKQEAgLTE4OCw2ICsx
OTIsMTMgQEAgYm9vbCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKElQ
Qzo6RGVjb2RlciYgZGVjb2RlciwgTmV0d29ya1Byb2MKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
I2VuZGlmCiAKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0LnJlY29yZFJlcGxheU1vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQucmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbikp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCmluZGV4IGY0NTY5Yzk0NjlhNTc3MmU2MGIx
YzliZmY1NjA4NWQzYWNiNDNjM2QuLjMzMGUzYmE0MDlkOGQxOWZiMjUxYTJmMmM0Njk3ZjRiYjM3
YzJjOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApAQCAtMTA2LDYgKzEwNiwx
MSBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogI2lmIE9TKExJ
TlVYKQogICAgIElQQzo6QXR0YWNobWVudCBtZW1vcnlQcmVzc3VyZU1vbml0b3JIYW5kbGU7CiAj
ZW5kaWYKKworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisgICAgU3RyaW5nIHJlY29yZFJl
cGxheU1vZGU7CisgICAgU3RyaW5nIHJlY29yZFJlcGxheUNhY2hlTG9jYXRpb247CisjZW5kaWYK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOTUwOGJhNzEzYWI2NGU0Zjg1NzUzMTg0NmMxYzAzZTgxYjhiYzVhNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29y
a0NhcHR1cmVFdmVudC5jcHAKQEAgLTAsMCArMSw1MDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVFdmVudC5oIgorCisjaWYgRU5B
QkxFKE5FVFdPUktfQ0FQVFVSRSkKKworCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVMb2dnaW5n
LmgiCisjaW5jbHVkZSAianNvbi5ocHAiCisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUVycm9y
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VSTFBhcnNlci5oPgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0JyaWdhbmQuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3Bh
Y2UgTmV0d29ya0NhcHR1cmUgeworCitjb25zdCBjaGFyIFJlcXVlc3RTZW50RXZlbnQ6OnR5cGVO
YW1lW10gPSAiUmVxdWVzdFNlbnRFdmVudCI7Citjb25zdCBjaGFyIFJlc3BvbnNlUmVjZWl2ZWRF
dmVudDo6dHlwZU5hbWVbXSA9ICJSZXNwb25zZVJlY2VpdmVkRXZlbnQiOworY29uc3QgY2hhciBS
ZWRpcmVjdFJlY2VpdmVkRXZlbnQ6OnR5cGVOYW1lW10gPSAiUmVkaXJlY3RSZWNlaXZlZEV2ZW50
IjsKK2NvbnN0IGNoYXIgUmVkaXJlY3RTZW50RXZlbnQ6OnR5cGVOYW1lW10gPSAiUmVkaXJlY3RT
ZW50RXZlbnQiOworY29uc3QgY2hhciBEYXRhUmVjZWl2ZWRFdmVudDo6dHlwZU5hbWVbXSA9ICJE
YXRhUmVjZWl2ZWRFdmVudCI7Citjb25zdCBjaGFyIEZpbmlzaGVkRXZlbnQ6OnR5cGVOYW1lW10g
PSAiRmluaXNoZWRFdmVudCI7CisKK3N0YXRpYyBIZWFkZXJzIGNvcHlIZWFkZXJzKGNvbnN0IFdl
YkNvcmU6OkhUVFBIZWFkZXJNYXAmIGh0dHBIZWFkZXJzKQoreworICAgIEhlYWRlcnMgaGVhZGVy
czsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6IGh0dHBIZWFkZXJzKQorICAgICAgICBo
ZWFkZXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihoZWFkZXIua2V5LCBoZWFkZXIudmFsdWUpKTsK
KyAgICByZXR1cm4gaGVhZGVyczsKK30KKworLy8gLS0tLS0tLS0tLQorCitSZXF1ZXN0OjpSZXF1
ZXN0KFN0cmluZyYmIHVybCwgU3RyaW5nJiYgcmVmZXJyZXIsIGludCBwb2xpY3ksIFN0cmluZyYm
IG1ldGhvZCwgSGVhZGVycyYmIGhlYWRlcnMpCisgICAgOiB1cmwoV1RGTW92ZSh1cmwpKQorICAg
ICwgcmVmZXJyZXIoV1RGTW92ZShyZWZlcnJlcikpCisgICAgLCBwb2xpY3koV1RGTW92ZShwb2xp
Y3kpKQorICAgICwgbWV0aG9kKFdURk1vdmUobWV0aG9kKSkKKyAgICAsIGhlYWRlcnMoV1RGTW92
ZShoZWFkZXJzKSkKK3sKK30KKworUmVxdWVzdDo6UmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpCisgICAgOiB1cmwocmVxdWVzdC51cmwoKS5zdHJpbmcoKSkK
KyAgICAsIHJlZmVycmVyKHJlcXVlc3QuaHR0cFJlZmVycmVyKCkpCisgICAgLCBwb2xpY3koc3Rh
dGljX2Nhc3Q8aW50PihyZXF1ZXN0LmNhY2hlUG9saWN5KCkpKQorICAgICwgbWV0aG9kKHJlcXVl
c3QuaHR0cE1ldGhvZCgpKQorICAgICwgaGVhZGVycyhjb3B5SGVhZGVycyhyZXF1ZXN0Lmh0dHBI
ZWFkZXJGaWVsZHMoKSkpCit7Cit9CisKK1JlcXVlc3Q6Om9wZXJhdG9yIFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCgpIGNvbnN0Cit7CisgICAgV2ViQ29yZTo6VVJMUGFyc2VyIHBhcnNlcih1cmwp
OworICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHBhcnNlci5yZXN1bHQoKSwg
cmVmZXJyZXIsIHN0YXRpY19jYXN0PFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5
Pihwb2xpY3kpKTsKKyAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QobWV0aG9kKTsKKworICAgIGZv
ciAoY29uc3QgYXV0byYgaGVhZGVyIDogaGVhZGVycykKKyAgICAgICAgcmVxdWVzdC5zZXRIVFRQ
SGVhZGVyRmllbGQoaGVhZGVyLmZpcnN0LCBoZWFkZXIuc2Vjb25kKTsKKworICAgIHJldHVybiBy
ZXF1ZXN0OworfQorCisvLyAtLS0tLS0tLS0tCisKK1Jlc3BvbnNlOjpSZXNwb25zZShTdHJpbmcm
JiB1cmwsIFN0cmluZyYmIG1pbWVUeXBlLCBsb25nIGxvbmcgZXhwZWN0ZWRMZW5ndGgsIFN0cmlu
ZyYmIHRleHRFbmNvZGluZ05hbWUsIFN0cmluZyYmIHZlcnNpb24sIGludCBzdGF0dXMsIFN0cmlu
ZyYmIHJlYXNvbiwgSGVhZGVycyYmIGhlYWRlcnMpCisgICAgOiB1cmwoV1RGTW92ZSh1cmwpKQor
ICAgICwgbWltZVR5cGUoV1RGTW92ZShtaW1lVHlwZSkpCisgICAgLCBleHBlY3RlZExlbmd0aChX
VEZNb3ZlKGV4cGVjdGVkTGVuZ3RoKSkKKyAgICAsIHRleHRFbmNvZGluZ05hbWUoV1RGTW92ZSh0
ZXh0RW5jb2RpbmdOYW1lKSkKKyAgICAsIHN0YXR1cyhXVEZNb3ZlKHN0YXR1cykpCisgICAgLCBy
ZWFzb24oV1RGTW92ZShyZWFzb24pKQorICAgICwgaGVhZGVycyhXVEZNb3ZlKGhlYWRlcnMpKQor
eworfQorCitSZXNwb25zZTo6UmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UpCisgICAgOiB1cmwocmVzcG9uc2UudXJsKCkpCisgICAgLCBtaW1lVHlwZShy
ZXNwb25zZS5taW1lVHlwZSgpKQorICAgICwgZXhwZWN0ZWRMZW5ndGgocmVzcG9uc2UuZXhwZWN0
ZWRDb250ZW50TGVuZ3RoKCkpCisgICAgLCB0ZXh0RW5jb2RpbmdOYW1lKHJlc3BvbnNlLnRleHRF
bmNvZGluZ05hbWUoKSkKKyAgICAsIHZlcnNpb24ocmVzcG9uc2UuaHR0cFZlcnNpb24oKSkKKyAg
ICAsIHN0YXR1cyhyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpKQorICAgICwgcmVhc29uKHJlc3Bv
bnNlLmh0dHBTdGF0dXNUZXh0KCkpCisgICAgLCBoZWFkZXJzKGNvcHlIZWFkZXJzKHJlc3BvbnNl
Lmh0dHBIZWFkZXJGaWVsZHMoKSkpCit7Cit9CisKK1Jlc3BvbnNlOjpvcGVyYXRvciBXZWJDb3Jl
OjpSZXNvdXJjZVJlc3BvbnNlKCkgY29uc3QKK3sKKyAgICBXZWJDb3JlOjpVUkxQYXJzZXIgcGFy
c2VyKHVybCk7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZShwYXJzZXIu
cmVzdWx0KCksIG1pbWVUeXBlLCBleHBlY3RlZExlbmd0aCwgdGV4dEVuY29kaW5nTmFtZSk7Cisg
ICAgcmVzcG9uc2Uuc2V0SFRUUFZlcnNpb24odmVyc2lvbik7CisgICAgcmVzcG9uc2Uuc2V0SFRU
UFN0YXR1c0NvZGUoc3RhdHVzKTsKKyAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4dChyZWFz
b24pOworCisgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBoZWFkZXJzKQorICAgICAgICBy
ZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGQoaGVhZGVyLmZpcnN0LCBoZWFkZXIuc2Vjb25kKTsK
KworICAgIHJldHVybiByZXNwb25zZTsKK30KKworLy8gLS0tLS0tLS0tLQorCitFcnJvcjo6RXJy
b3IoU3RyaW5nJiYgZG9tYWluLCBTdHJpbmcmJiBmYWlsaW5nVVJMLCBTdHJpbmcmJiBsb2NhbGl6
ZWREZXNjcmlwdGlvbiwgaW50IGVycm9yQ29kZSwgaW50IHR5cGUpCisgICAgOiBkb21haW4oV1RG
TW92ZShkb21haW4pKQorICAgICwgZmFpbGluZ1VSTChXVEZNb3ZlKGZhaWxpbmdVUkwpKQorICAg
ICwgbG9jYWxpemVkRGVzY3JpcHRpb24oV1RGTW92ZShsb2NhbGl6ZWREZXNjcmlwdGlvbikpCisg
ICAgLCBlcnJvckNvZGUoV1RGTW92ZShlcnJvckNvZGUpKQorICAgICwgdHlwZShXVEZNb3ZlKHR5
cGUpKQoreworfQorCitFcnJvcjo6RXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYg
ZXJyb3IpCisgICAgOiBkb21haW4oZXJyb3IuZG9tYWluKCkpCisgICAgLCBmYWlsaW5nVVJMKGVy
cm9yLmZhaWxpbmdVUkwoKSkKKyAgICAsIGxvY2FsaXplZERlc2NyaXB0aW9uKGVycm9yLmxvY2Fs
aXplZERlc2NyaXB0aW9uKCkpCisgICAgLCBlcnJvckNvZGUoZXJyb3IuZXJyb3JDb2RlKCkpCisg
ICAgLCB0eXBlKHN0YXRpY19jYXN0PGludD4oZXJyb3IudHlwZSgpKSkKK3sKK30KKworRXJyb3I6
Om9wZXJhdG9yIFdlYkNvcmU6OlJlc291cmNlRXJyb3IoKSBjb25zdAoreworICAgIFdlYkNvcmU6
OlVSTFBhcnNlciBwYXJzZXIoZmFpbGluZ1VSTCk7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VFcnJv
ciBlcnJvcihkb21haW4sIGVycm9yQ29kZSwgcGFyc2VyLnJlc3VsdCgpLCBsb2NhbGl6ZWREZXNj
cmlwdGlvbiwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UmVzb3VyY2VFcnJvcjo6VHlwZT4odHlwZSkp
OworCisgICAgcmV0dXJuIGVycm9yOworfQorCisvLyAtLS0tLS0tLS0tCisKKy8vIFNFRSBUSEUg
Tk9URSBJTiBqc29uLmhwcCBSRUdBUkRJTkcgSVRTIFVTRSBJTiBUSElTIFBST0pFQ1QuIElOIFNI
T1JULCBETyBOT1QKKy8vIFVTRSBqc29uLmhwcCBBTllXSEVSRSBFTFNFLiBJVCBXSUxMIEJFIEdP
SU5HIEFXQVkuCit1c2luZyBqc29uID0gbmxvaG1hbm46OmJhc2ljX2pzb248PjsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVHlwZT4KK3N0cnVjdCBKU09OQ29kZXIgeworICAgIHN0YXRpYyBqc29uIGVu
Y29kZShUeXBlIHZhbCkKKyAgICB7CisgICAgICAgIHJldHVybiBqc29uKHZhbCk7CisgICAgfQor
CisgICAgc3RhdGljIFR5cGUgZGVjb2RlKGNvbnN0IGpzb24mIGpWYWwpCisgICAgeworICAgICAg
ICByZXR1cm4galZhbC5nZXQ8VHlwZT4oKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1
Y3QgSlNPTkNvZGVyPGNvbnN0IGNoYXIqPiB7CisgICAgc3RhdGljIGpzb24gZW5jb2RlKGNvbnN0
IGNoYXIqIHZhbCkKKyAgICB7CisgICAgICAgIHJldHVybiBqc29uKHZhbCk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8Pgorc3RydWN0IEpTT05Db2RlcjxTdHJpbmc+IHsKKyAgICBzdGF0aWMganNv
biBlbmNvZGUoY29uc3QgU3RyaW5nJiB2YWwpCisgICAgeworICAgICAgICByZXR1cm4ganNvbihz
dGF0aWNfY2FzdDxjb25zdCBjaGFyKj4odmFsLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgU3RyaW5nIGRlY29kZShjb25zdCBqc29uJiBqVmFsKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIFN0cmluZyhqVmFsLmdldF9yZWY8Y29uc3Qgc3RkOjpzdHJpbmcmPigpLmNfc3RyKCkp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBKU09OQ29kZXI8Q2FwdHVyZVRpbWVU
eXBlPiB7CisgICAgc3RhdGljIGpzb24gZW5jb2RlKGNvbnN0IENhcHR1cmVUaW1lVHlwZSYgdGlt
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU09OQ29kZXI8ZG91YmxlPjo6ZW5jb2RlKHRpbWUu
c2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCkpOworICAgIH0KKworICAgIHN0YXRpYyBDYXB0
dXJlVGltZVR5cGUgZGVjb2RlKGNvbnN0IGpzb24mIGpUaW1lKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIENhcHR1cmVUaW1lVHlwZTo6ZnJvbVJhd1NlY29uZHMoSlNPTkNvZGVyPGRvdWJsZT46OmRl
Y29kZShqVGltZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBKU09OQ29kZXI8
S2V5VmFsdWVQYWlyPiB7CisgICAgc3RhdGljIGpzb24gZW5jb2RlKGNvbnN0IEtleVZhbHVlUGFp
ciYgcGFpcikKKyAgICB7CisgICAgICAgIHJldHVybiBqc29uIHsKKyAgICAgICAgICAgIEpTT05D
b2RlcjxTdHJpbmc+OjplbmNvZGUocGFpci5maXJzdCksCisgICAgICAgICAgICBKU09OQ29kZXI8
U3RyaW5nPjo6ZW5jb2RlKHBhaXIuc2Vjb25kKQorICAgICAgICB9OworICAgIH0KKworICAgIHN0
YXRpYyBLZXlWYWx1ZVBhaXIgZGVjb2RlKGNvbnN0IGpzb24mIGpQYWlyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEtleVZhbHVlUGFpciB7CisgICAgICAgICAgICBKU09OQ29kZXI8U3RyaW5nPjo6
ZGVjb2RlKGpQYWlyWzBdKSwKKyAgICAgICAgICAgIEpTT05Db2RlcjxTdHJpbmc+OjpkZWNvZGUo
alBhaXJbMV0pCisgICAgICAgIH07CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K3N0cnVjdCBKU09OQ29kZXI8VmVjdG9yPFQ+PiB7CisgICAgc3RhdGljIGpzb24gZW5jb2RlKGNv
bnN0IFZlY3RvcjxUPiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAganNvbiBqVmVjdG9yOworCisg
ICAgICAgIGZvciAoY29uc3QgYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGpW
ZWN0b3IucHVzaF9iYWNrKEpTT05Db2RlcjxUPjo6ZW5jb2RlKGVsZW1lbnQpKTsKKworICAgICAg
ICByZXR1cm4galZlY3RvcjsKKyAgICB9CisKKyAgICBzdGF0aWMgVmVjdG9yPFQ+IGRlY29kZShj
b25zdCBqc29uJiBqVmVjdG9yKQorICAgIHsKKyAgICAgICAgVmVjdG9yPFQ+IHZlY3RvcjsKKwor
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVsZW1lbnQgOiBqVmVjdG9yKQorICAgICAgICAgICAg
dmVjdG9yLmFwcGVuZChKU09OQ29kZXI8VD46OmRlY29kZShlbGVtZW50KSk7CisKKyAgICAgICAg
cmV0dXJuIHZlY3RvcjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgSlNPTkNvZGVy
PFJlcXVlc3Q+IHsKKyAgICBzdGF0aWMganNvbiBlbmNvZGUoY29uc3QgUmVxdWVzdCYgcmVxdWVz
dCkKKyAgICB7CisgICAgICAgIHJldHVybiBqc29uIHsKKyAgICAgICAgICAgIHsgInVybCIsIEpT
T05Db2RlcjxTdHJpbmc+OjplbmNvZGUocmVxdWVzdC51cmwpIH0sCisgICAgICAgICAgICB7ICJy
ZWZlcnJlciIsIEpTT05Db2RlcjxTdHJpbmc+OjplbmNvZGUocmVxdWVzdC5yZWZlcnJlcikgfSwK
KyAgICAgICAgICAgIHsgInBvbGljeSIsIEpTT05Db2RlcjxpbnQ+OjplbmNvZGUocmVxdWVzdC5w
b2xpY3kpIH0sCisgICAgICAgICAgICB7ICJtZXRob2QiLCBKU09OQ29kZXI8U3RyaW5nPjo6ZW5j
b2RlKHJlcXVlc3QubWV0aG9kKSB9LAorICAgICAgICAgICAgeyAiaGVhZGVycyIsIEpTT05Db2Rl
cjxIZWFkZXJzPjo6ZW5jb2RlKHJlcXVlc3QuaGVhZGVycykgfQorICAgICAgICB9OworICAgIH0K
KworICAgIHN0YXRpYyBSZXF1ZXN0IGRlY29kZShjb25zdCBqc29uJiBqUmVxdWVzdCkKKyAgICB7
CisgICAgICAgIHJldHVybiBSZXF1ZXN0IHsKKyAgICAgICAgICAgIEpTT05Db2RlcjxTdHJpbmc+
OjpkZWNvZGUoalJlcXVlc3RbInVybCJdKSwKKyAgICAgICAgICAgIEpTT05Db2RlcjxTdHJpbmc+
OjpkZWNvZGUoalJlcXVlc3RbInJlZmVycmVyIl0pLAorICAgICAgICAgICAgSlNPTkNvZGVyPGlu
dD46OmRlY29kZShqUmVxdWVzdFsicG9saWN5Il0pLAorICAgICAgICAgICAgSlNPTkNvZGVyPFN0
cmluZz46OmRlY29kZShqUmVxdWVzdFsibWV0aG9kIl0pLAorICAgICAgICAgICAgSlNPTkNvZGVy
PEhlYWRlcnM+OjpkZWNvZGUoalJlcXVlc3RbImhlYWRlcnMiXSkKKyAgICAgICAgfTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgSlNPTkNvZGVyPFJlc3BvbnNlPiB7CisgICAgc3Rh
dGljIGpzb24gZW5jb2RlKGNvbnN0IFJlc3BvbnNlJiByZXNwb25zZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBqc29uIHsKKyAgICAgICAgICAgIHsgInVybCIsIEpTT05Db2RlcjxTdHJpbmc+Ojpl
bmNvZGUocmVzcG9uc2UudXJsKSB9LAorICAgICAgICAgICAgeyAibWltZVR5cGUiLCBKU09OQ29k
ZXI8U3RyaW5nPjo6ZW5jb2RlKHJlc3BvbnNlLm1pbWVUeXBlKSB9LAorICAgICAgICAgICAgeyAi
ZXhwZWN0ZWRMZW5ndGgiLCBKU09OQ29kZXI8bG9uZyBsb25nPjo6ZW5jb2RlKHJlc3BvbnNlLmV4
cGVjdGVkTGVuZ3RoKSB9LAorICAgICAgICAgICAgeyAidGV4dEVuY29kaW5nTmFtZSIsIEpTT05D
b2RlcjxTdHJpbmc+OjplbmNvZGUocmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSkgfSwKKyAgICAg
ICAgICAgIHsgInZlcnNpb24iLCBKU09OQ29kZXI8U3RyaW5nPjo6ZW5jb2RlKHJlc3BvbnNlLnZl
cnNpb24pIH0sCisgICAgICAgICAgICB7ICJzdGF0dXMiLCBKU09OQ29kZXI8aW50Pjo6ZW5jb2Rl
KHJlc3BvbnNlLnN0YXR1cykgfSwKKyAgICAgICAgICAgIHsgInJlYXNvbiIsIEpTT05Db2RlcjxT
dHJpbmc+OjplbmNvZGUocmVzcG9uc2UucmVhc29uKSB9LAorICAgICAgICAgICAgeyAiaGVhZGVy
cyIsIEpTT05Db2RlcjxIZWFkZXJzPjo6ZW5jb2RlKHJlc3BvbnNlLmhlYWRlcnMpIH0KKyAgICAg
ICAgfTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzcG9uc2UgZGVjb2RlKGNvbnN0IGpzb24mIGpS
ZXNwb25zZSkKKyAgICB7CisgICAgICAgIHJldHVybiBSZXNwb25zZSB7CisgICAgICAgICAgICBK
U09OQ29kZXI8U3RyaW5nPjo6ZGVjb2RlKGpSZXNwb25zZVsidXJsIl0pLAorICAgICAgICAgICAg
SlNPTkNvZGVyPFN0cmluZz46OmRlY29kZShqUmVzcG9uc2VbIm1pbWVUeXBlIl0pLAorICAgICAg
ICAgICAgSlNPTkNvZGVyPGxvbmcgbG9uZz46OmRlY29kZShqUmVzcG9uc2VbImV4cGVjdGVkTGVu
Z3RoIl0pLAorICAgICAgICAgICAgSlNPTkNvZGVyPFN0cmluZz46OmRlY29kZShqUmVzcG9uc2Vb
InRleHRFbmNvZGluZ05hbWUiXSksCisgICAgICAgICAgICBKU09OQ29kZXI8U3RyaW5nPjo6ZGVj
b2RlKGpSZXNwb25zZVsidmVyc2lvbiJdKSwKKyAgICAgICAgICAgIEpTT05Db2RlcjxpbnQ+Ojpk
ZWNvZGUoalJlc3BvbnNlWyJzdGF0dXMiXSksCisgICAgICAgICAgICBKU09OQ29kZXI8U3RyaW5n
Pjo6ZGVjb2RlKGpSZXNwb25zZVsicmVhc29uIl0pLAorICAgICAgICAgICAgSlNPTkNvZGVyPEhl
YWRlcnM+OjpkZWNvZGUoalJlc3BvbnNlWyJoZWFkZXJzIl0pCisgICAgICAgIH07CisgICAgfQor
fTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEpTT05Db2RlcjxFcnJvcj4geworICAgIHN0YXRpYyBq
c29uIGVuY29kZShjb25zdCBFcnJvciYgZXJyb3IpCisgICAgeworICAgICAgICByZXR1cm4ganNv
biB7CisgICAgICAgICAgICB7ICJkb21haW4iLCBKU09OQ29kZXI8U3RyaW5nPjo6ZW5jb2RlKGVy
cm9yLmRvbWFpbikgfSwKKyAgICAgICAgICAgIHsgImZhaWxpbmdVUkwiLCBKU09OQ29kZXI8U3Ry
aW5nPjo6ZW5jb2RlKGVycm9yLmZhaWxpbmdVUkwpIH0sCisgICAgICAgICAgICB7ICJsb2NhbGl6
ZWREZXNjcmlwdGlvbiIsIEpTT05Db2RlcjxTdHJpbmc+OjplbmNvZGUoZXJyb3IubG9jYWxpemVk
RGVzY3JpcHRpb24pIH0sCisgICAgICAgICAgICB7ICJlcnJvckNvZGUiLCBKU09OQ29kZXI8aW50
Pjo6ZW5jb2RlKGVycm9yLmVycm9yQ29kZSkgfSwKKyAgICAgICAgICAgIHsgInR5cGUiLCBKU09O
Q29kZXI8aW50Pjo6ZW5jb2RlKGVycm9yLnR5cGUpIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgRXJyb3IgZGVjb2RlKGNvbnN0IGpzb24mIGpFcnJvcikKKyAgICB7CisgICAgICAg
IHJldHVybiBFcnJvciB7CisgICAgICAgICAgICBKU09OQ29kZXI8U3RyaW5nPjo6ZGVjb2RlKGpF
cnJvclsiZG9tYWluIl0pLAorICAgICAgICAgICAgSlNPTkNvZGVyPFN0cmluZz46OmRlY29kZShq
RXJyb3JbImZhaWxpbmdVUkwiXSksCisgICAgICAgICAgICBKU09OQ29kZXI8U3RyaW5nPjo6ZGVj
b2RlKGpFcnJvclsibG9jYWxpemVkRGVzY3JpcHRpb24iXSksCisgICAgICAgICAgICBKU09OQ29k
ZXI8aW50Pjo6ZGVjb2RlKGpFcnJvclsiZXJyb3JDb2RlIl0pLAorICAgICAgICAgICAgSlNPTkNv
ZGVyPGludD46OmRlY29kZShqRXJyb3JbInR5cGUiXSkKKyAgICAgICAgfTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+CitzdHJ1Y3QgSlNPTkNvZGVyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gewor
ICAgIHN0YXRpYyBqc29uIGVuY29kZShjb25zdCBXZWJDb3JlOjpTaGFyZWRCdWZmZXImIGRhdGEp
CisgICAgeworICAgICAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOworICAgICAgICBiYXNlNjRFbmNv
ZGUoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCBidWZmZXIpOworICAgICAgICByZXR1cm4ganNv
bigmYnVmZmVyWzBdLCBidWZmZXIuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVmPFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZGVjb2RlKGNvbnN0IGpzb24mIGpEYXRhKQorICAgIHsKKyAg
ICAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CisgICAgICAgIGNvbnN0IGF1dG8mIHN0ciA9IGpEYXRh
LmdldF9yZWY8Y29uc3Qgc3RkOjpzdHJpbmcmPigpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGJh
c2U2NERlY29kZShzdHIuY19zdHIoKSwgc3RyLnNpemUoKSwgZGF0YSk7CisgICAgICAgIEFTU0VS
VF9VTlVTRUQocmVzdWx0LCByZXN1bHQpOworICAgICAgICByZXR1cm4gV2ViQ29yZTo6U2hhcmVk
QnVmZmVyOjphZG9wdFZlY3RvcihkYXRhKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1
Y3QgSlNPTkNvZGVyPFJlcXVlc3RTZW50RXZlbnQ+IHsKKyAgICBzdGF0aWMganNvbiBlbmNvZGUo
Y29uc3QgUmVxdWVzdFNlbnRFdmVudCYgZXZlbnQpCisgICAgeworICAgICAgICByZXR1cm4ganNv
biB7CisgICAgICAgICAgICB7ICJ0eXBlIiwgSlNPTkNvZGVyPGNvbnN0IGNoYXIqPjo6ZW5jb2Rl
KGV2ZW50LnR5cGVOYW1lKSB9LAorICAgICAgICAgICAgeyAidGltZSIsIEpTT05Db2RlcjxDYXB0
dXJlVGltZVR5cGU+OjplbmNvZGUoZXZlbnQudGltZSkgfSwKKyAgICAgICAgICAgIHsgInJlcXVl
c3QiLCBKU09OQ29kZXI8UmVxdWVzdD46OmVuY29kZShldmVudC5yZXF1ZXN0KSB9CisgICAgICAg
IH07CisgICAgfQorCisgICAgc3RhdGljIFJlcXVlc3RTZW50RXZlbnQgZGVjb2RlKGNvbnN0IGpz
b24mIGpFdmVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBSZXF1ZXN0U2VudEV2ZW50IHsKKyAg
ICAgICAgICAgIEpTT05Db2RlcjxDYXB0dXJlVGltZVR5cGU+OjpkZWNvZGUoakV2ZW50WyJ0aW1l
Il0pLAorICAgICAgICAgICAgSlNPTkNvZGVyPFJlcXVlc3Q+OjpkZWNvZGUoakV2ZW50WyJyZXF1
ZXN0Il0pCisgICAgICAgIH07CisgICAgfQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEpTT05D
b2RlcjxSZXNwb25zZVJlY2VpdmVkRXZlbnQ+IHsKKyAgICBzdGF0aWMganNvbiBlbmNvZGUoY29u
c3QgUmVzcG9uc2VSZWNlaXZlZEV2ZW50JiBldmVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBq
c29uIHsKKyAgICAgICAgICAgIHsgInR5cGUiLCBKU09OQ29kZXI8Y29uc3QgY2hhcio+OjplbmNv
ZGUoZXZlbnQudHlwZU5hbWUpIH0sCisgICAgICAgICAgICB7ICJ0aW1lIiwgSlNPTkNvZGVyPENh
cHR1cmVUaW1lVHlwZT46OmVuY29kZShldmVudC50aW1lKSB9LAorICAgICAgICAgICAgeyAicmVz
cG9uc2UiLCBKU09OQ29kZXI8UmVzcG9uc2U+OjplbmNvZGUoZXZlbnQucmVzcG9uc2UpIH0KKyAg
ICAgICAgfTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVzcG9uc2VSZWNlaXZlZEV2ZW50IGRlY29k
ZShjb25zdCBqc29uJiBqRXZlbnQpCisgICAgeworICAgICAgICByZXR1cm4gUmVzcG9uc2VSZWNl
aXZlZEV2ZW50IHsKKyAgICAgICAgICAgIEpTT05Db2RlcjxDYXB0dXJlVGltZVR5cGU+OjpkZWNv
ZGUoakV2ZW50WyJ0aW1lIl0pLAorICAgICAgICAgICAgSlNPTkNvZGVyPFJlc3BvbnNlPjo6ZGVj
b2RlKGpFdmVudFsicmVzcG9uc2UiXSkKKyAgICAgICAgfTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+CitzdHJ1Y3QgSlNPTkNvZGVyPFJlZGlyZWN0UmVjZWl2ZWRFdmVudD4geworICAgIHN0YXRp
YyBqc29uIGVuY29kZShjb25zdCBSZWRpcmVjdFJlY2VpdmVkRXZlbnQmIGV2ZW50KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGpzb24geworICAgICAgICAgICAgeyAidHlwZSIsIEpTT05Db2Rlcjxj
b25zdCBjaGFyKj46OmVuY29kZShldmVudC50eXBlTmFtZSkgfSwKKyAgICAgICAgICAgIHsgInRp
bWUiLCBKU09OQ29kZXI8Q2FwdHVyZVRpbWVUeXBlPjo6ZW5jb2RlKGV2ZW50LnRpbWUpIH0sCisg
ICAgICAgICAgICB7ICJyZXF1ZXN0IiwgSlNPTkNvZGVyPFJlcXVlc3Q+OjplbmNvZGUoZXZlbnQu
cmVxdWVzdCkgfSwKKyAgICAgICAgICAgIHsgInJlc3BvbnNlIiwgSlNPTkNvZGVyPFJlc3BvbnNl
Pjo6ZW5jb2RlKGV2ZW50LnJlc3BvbnNlKSB9CisgICAgICAgIH07CisgICAgfQorCisgICAgc3Rh
dGljIFJlZGlyZWN0UmVjZWl2ZWRFdmVudCBkZWNvZGUoY29uc3QganNvbiYgakV2ZW50KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFJlZGlyZWN0UmVjZWl2ZWRFdmVudCB7CisgICAgICAgICAgICBK
U09OQ29kZXI8Q2FwdHVyZVRpbWVUeXBlPjo6ZGVjb2RlKGpFdmVudFsidGltZSJdKSwKKyAgICAg
ICAgICAgIEpTT05Db2RlcjxSZXF1ZXN0Pjo6ZGVjb2RlKGpFdmVudFsicmVxdWVzdCJdKSwKKyAg
ICAgICAgICAgIEpTT05Db2RlcjxSZXNwb25zZT46OmRlY29kZShqRXZlbnRbInJlc3BvbnNlIl0p
CisgICAgICAgIH07CisgICAgfQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEpTT05Db2RlcjxS
ZWRpcmVjdFNlbnRFdmVudD4geworICAgIHN0YXRpYyBqc29uIGVuY29kZShjb25zdCBSZWRpcmVj
dFNlbnRFdmVudCYgZXZlbnQpCisgICAgeworICAgICAgICByZXR1cm4ganNvbiB7CisgICAgICAg
ICAgICB7ICJ0eXBlIiwgSlNPTkNvZGVyPGNvbnN0IGNoYXIqPjo6ZW5jb2RlKGV2ZW50LnR5cGVO
YW1lKSB9LAorICAgICAgICAgICAgeyAidGltZSIsIEpTT05Db2RlcjxDYXB0dXJlVGltZVR5cGU+
OjplbmNvZGUoZXZlbnQudGltZSkgfSwKKyAgICAgICAgICAgIHsgInJlcXVlc3QiLCBKU09OQ29k
ZXI8UmVxdWVzdD46OmVuY29kZShldmVudC5yZXF1ZXN0KSB9LAorICAgICAgICB9OworICAgIH0K
KworICAgIHN0YXRpYyBSZWRpcmVjdFNlbnRFdmVudCBkZWNvZGUoY29uc3QganNvbiYgakV2ZW50
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJlZGlyZWN0U2VudEV2ZW50IHsKKyAgICAgICAgICAg
IEpTT05Db2RlcjxDYXB0dXJlVGltZVR5cGU+OjpkZWNvZGUoakV2ZW50WyJ0aW1lIl0pLAorICAg
ICAgICAgICAgSlNPTkNvZGVyPFJlcXVlc3Q+OjpkZWNvZGUoakV2ZW50WyJyZXF1ZXN0Il0pCisg
ICAgICAgIH07CisgICAgfQorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEpTT05Db2RlcjxEYXRh
UmVjZWl2ZWRFdmVudD4geworICAgIHN0YXRpYyBqc29uIGVuY29kZShjb25zdCBEYXRhUmVjZWl2
ZWRFdmVudCYgZXZlbnQpCisgICAgeworICAgICAgICByZXR1cm4ganNvbiB7CisgICAgICAgICAg
ICB7ICJ0eXBlIiwgSlNPTkNvZGVyPGNvbnN0IGNoYXIqPjo6ZW5jb2RlKGV2ZW50LnR5cGVOYW1l
KSB9LAorICAgICAgICAgICAgeyAidGltZSIsIEpTT05Db2RlcjxDYXB0dXJlVGltZVR5cGU+Ojpl
bmNvZGUoZXZlbnQudGltZSkgfSwKKyAgICAgICAgICAgIHsgImRhdGEiLCBKU09OQ29kZXI8V2Vi
Q29yZTo6U2hhcmVkQnVmZmVyPjo6ZW5jb2RlKGV2ZW50LmRhdGEuZ2V0KCkpIH0KKyAgICAgICAg
fTsKKyAgICB9CisKKyAgICBzdGF0aWMgRGF0YVJlY2VpdmVkRXZlbnQgZGVjb2RlKGNvbnN0IGpz
b24mIGpFdmVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBEYXRhUmVjZWl2ZWRFdmVudCB7Cisg
ICAgICAgICAgICBKU09OQ29kZXI8Q2FwdHVyZVRpbWVUeXBlPjo6ZGVjb2RlKGpFdmVudFsidGlt
ZSJdKSwKKyAgICAgICAgICAgIEpTT05Db2RlcjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+OjpkZWNv
ZGUoakV2ZW50WyJkYXRhIl0pCisgICAgICAgIH07CisgICAgfQorfTsKKwordGVtcGxhdGU8Pgor
c3RydWN0IEpTT05Db2RlcjxGaW5pc2hlZEV2ZW50PiB7CisgICAgc3RhdGljIGpzb24gZW5jb2Rl
KGNvbnN0IEZpbmlzaGVkRXZlbnQmIGV2ZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzb24g
eworICAgICAgICAgICAgeyAidHlwZSIsIEpTT05Db2Rlcjxjb25zdCBjaGFyKj46OmVuY29kZShl
dmVudC50eXBlTmFtZSkgfSwKKyAgICAgICAgICAgIHsgInRpbWUiLCBKU09OQ29kZXI8Q2FwdHVy
ZVRpbWVUeXBlPjo6ZW5jb2RlKGV2ZW50LnRpbWUpIH0sCisgICAgICAgICAgICB7ICJlcnJvciIs
IEpTT05Db2RlcjxFcnJvcj46OmVuY29kZShldmVudC5lcnJvcikgfQorICAgICAgICB9OworICAg
IH0KKworICAgIHN0YXRpYyBGaW5pc2hlZEV2ZW50IGRlY29kZShjb25zdCBqc29uJiBqRXZlbnQp
CisgICAgeworICAgICAgICByZXR1cm4gRmluaXNoZWRFdmVudCB7CisgICAgICAgICAgICBKU09O
Q29kZXI8Q2FwdHVyZVRpbWVUeXBlPjo6ZGVjb2RlKGpFdmVudFsidGltZSJdKSwKKyAgICAgICAg
ICAgIEpTT05Db2RlcjxFcnJvcj46OmRlY29kZShqRXZlbnRbImVycm9yIl0pCisgICAgICAgIH07
CisgICAgfQorfTsKKworc3RkOjpzdHJpbmcgZXZlbnRUb1N0cmluZyhjb25zdCBDYXB0dXJlRXZl
bnQmIGV2ZW50KQoreworICAgIGpzb24gcmVzdWx0OworCisgICAgV1RGOjp2aXNpdChbJnJlc3Vs
dF0oY29uc3QgYXV0byYgZXZlbnQpIHsKKyAgICAgICAgdXNpbmcgRXZlbnRUeXBlID0gc3RkOjpk
ZWNheV90PGRlY2x0eXBlKGV2ZW50KT47CisgICAgICAgIHJlc3VsdCA9IEpTT05Db2RlcjxFdmVu
dFR5cGU+OjplbmNvZGUoZXZlbnQpOworICAgIH0sIGV2ZW50KTsKKworICAgIHJldHVybiByZXN1
bHQuZHVtcCg0KTsKK30KKworT3B0aW9uYWxDYXB0dXJlRXZlbnQgc3RyaW5nVG9FdmVudChjb25z
dCBjaGFyKiBqc29uU3RyKQoreworICAgIGF1dG8galZhbHVlID0ganNvbjo6cGFyc2UoanNvblN0
cik7CisgICAgY29uc3QgYXV0byYgdHlwZSA9IGpWYWx1ZVsidHlwZSJdLmdldF9yZWY8Y29uc3Qg
c3RkOjpzdHJpbmcmPigpOworCisgICAgT3B0aW9uYWxDYXB0dXJlRXZlbnQgcmVzdWx0IHsgc3Rk
OjpudWxsb3B0IH07CisgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8Q2FwdHVyZUV2ZW50PihbJl0oYXV0
byBUKSB7CisgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBkZWNsdHlwZShUKTo6dHlwZTsK
KyAgICAgICAgaWYgKCFyZXN1bHQgJiYgdHlwZSA9PSBUeXBlOjp0eXBlTmFtZSkKKyAgICAgICAg
ICAgIHJlc3VsdCA9IE9wdGlvbmFsQ2FwdHVyZUV2ZW50KEpTT05Db2RlcjxUeXBlPjo6ZGVjb2Rl
KGpWYWx1ZSkpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNw
YWNlIE5ldHdvcmtDYXB0dXJlCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVO
QUJMRShORVRXT1JLX0NBUFRVUkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuaCBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBh
Nzk3ZWM5OTcxNTFmYzdhOTU5MjI1NDQyMzQ0YjFjNGQyNWRjODAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZl
bnQuaApAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlVHlwZXMu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9Nb25v
dG9uaWNUaW1lLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1Zh
cmlhbnQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIFJlc291cmNlRXJyb3I7CitjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CitjbGFzcyBSZXNv
dXJjZVJlc3BvbnNlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3Jr
Q2FwdHVyZSB7CisKK3N0cnVjdCBSZXF1ZXN0U2VudEV2ZW50Oworc3RydWN0IFJlc3BvbnNlUmVj
ZWl2ZWRFdmVudDsKK3N0cnVjdCBSZWRpcmVjdFJlY2VpdmVkRXZlbnQ7CitzdHJ1Y3QgUmVkaXJl
Y3RTZW50RXZlbnQ7CitzdHJ1Y3QgRGF0YVJlY2VpdmVkRXZlbnQ7CitzdHJ1Y3QgRmluaXNoZWRF
dmVudDsKKwordXNpbmcgQ2FwdHVyZUV2ZW50ID0gV1RGOjpWYXJpYW50PFJlcXVlc3RTZW50RXZl
bnQsIFJlc3BvbnNlUmVjZWl2ZWRFdmVudCwgUmVkaXJlY3RSZWNlaXZlZEV2ZW50LCBSZWRpcmVj
dFNlbnRFdmVudCwgRGF0YVJlY2VpdmVkRXZlbnQsIEZpbmlzaGVkRXZlbnQ+OwordXNpbmcgT3B0
aW9uYWxDYXB0dXJlRXZlbnQgPSBzdGQ6Om9wdGlvbmFsPENhcHR1cmVFdmVudD47Cit1c2luZyBD
YXB0dXJlRXZlbnRzID0gVmVjdG9yPENhcHR1cmVFdmVudD47Cit1c2luZyBDYXB0dXJlQ2xvY2tU
eXBlID0gV1RGOjpNb25vdG9uaWNUaW1lOwordXNpbmcgQ2FwdHVyZVRpbWVUeXBlID0gV1RGOjpN
b25vdG9uaWNUaW1lOwordXNpbmcgS2V5VmFsdWVQYWlyID0gc3RkOjpwYWlyPFN0cmluZywgU3Ry
aW5nPjsKK3VzaW5nIEhlYWRlcnMgPSBWZWN0b3I8S2V5VmFsdWVQYWlyPjsKKworc3RkOjpzdHJp
bmcgZXZlbnRUb1N0cmluZyhjb25zdCBDYXB0dXJlRXZlbnQmKTsKK09wdGlvbmFsQ2FwdHVyZUV2
ZW50IHN0cmluZ1RvRXZlbnQoY29uc3QgY2hhciopOworCitzdHJ1Y3QgUmVxdWVzdCB7CisgICAg
Ly8gU2VlIGNvbW1lbnQgZm9yIFJlcXVlc3RTZW50RXZlbnQgZm9yIHdoeSB3ZSBuZWVkIHRoaXMg
ZGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgICBSZXF1ZXN0KCkKKyAgICAgICAgOiB1cmwoKQorICAg
ICAgICAsIHJlZmVycmVyKCkKKyAgICAgICAgLCBwb2xpY3koMCkKKyAgICAgICAgLCBtZXRob2Qo
KQorICAgICAgICAsIGhlYWRlcnMoKSB7IH0KKyAgICBSZXF1ZXN0KFN0cmluZyYmIHVybCwgU3Ry
aW5nJiYgcmVmZXJyZXIsIGludCBwb2xpY3ksIFN0cmluZyYmIG1ldGhvZCwgSGVhZGVycyYmKTsK
KyAgICBSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOworICAgIG9wZXJh
dG9yIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCgpIGNvbnN0OworCisgICAgU3RyaW5nIHVybDsK
KyAgICBTdHJpbmcgcmVmZXJyZXI7CisgICAgaW50IHBvbGljeTsKKyAgICBTdHJpbmcgbWV0aG9k
OworICAgIEhlYWRlcnMgaGVhZGVyczsKK307CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZGVmYXVs
dF9jb25zdHJ1Y3RpYmxlPFJlcXVlc3Q+Ojp2YWx1ZSwgIlJlcXVlc3QgaXMgbm90IGRlZmF1bHQg
Y29uc3RydWN0aWJsZSIpOworc3RhdGljX2Fzc2VydChzdGQ6OmlzX21vdmVfY29uc3RydWN0aWJs
ZTxSZXF1ZXN0Pjo6dmFsdWUsICJSZXF1ZXN0IGlzIG5vdCBtb3ZlIGNvbnN0cnVjdGlibGUiKTsK
K3N0YXRpY19hc3NlcnQoc3RkOjppc19tb3ZlX2Fzc2lnbmFibGU8UmVxdWVzdD46OnZhbHVlLCAi
UmVxdWVzdCBpcyBub3QgbW92ZSBhc3NpZ25hYmxlIik7CisKK3N0cnVjdCBSZXNwb25zZSB7Cisg
ICAgUmVzcG9uc2UoU3RyaW5nJiYgdXJsLCBTdHJpbmcmJiBtaW1lVHlwZSwgbG9uZyBsb25nIGV4
cGVjdGVkTGVuZ3RoLCBTdHJpbmcmJiB0ZXh0RW5jb2RpbmdOYW1lLCBTdHJpbmcmJiB2ZXJzaW9u
LCBpbnQgc3RhdHVzLCBTdHJpbmcmJiByZWFzb24sIEhlYWRlcnMmJik7CisgICAgUmVzcG9uc2Uo
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOworICAgIG9wZXJhdG9yIFdlYkNvcmU6
OlJlc291cmNlUmVzcG9uc2UoKSBjb25zdDsKKworICAgIFN0cmluZyB1cmw7CisgICAgU3RyaW5n
IG1pbWVUeXBlOworICAgIGxvbmcgbG9uZyBleHBlY3RlZExlbmd0aDsKKyAgICBTdHJpbmcgdGV4
dEVuY29kaW5nTmFtZTsKKyAgICBTdHJpbmcgdmVyc2lvbjsKKyAgICBpbnQgc3RhdHVzOworICAg
IFN0cmluZyByZWFzb247CisgICAgSGVhZGVycyBoZWFkZXJzOworfTsKK3N0YXRpY19hc3NlcnQo
c3RkOjppc19tb3ZlX2NvbnN0cnVjdGlibGU8UmVzcG9uc2U+Ojp2YWx1ZSwgIlJlc3BvbnNlIGlz
IG5vdCBtb3ZlIGNvbnN0cnVjdGlibGUiKTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc19tb3ZlX2Fz
c2lnbmFibGU8UmVzcG9uc2U+Ojp2YWx1ZSwgIlJlc3BvbnNlIGlzIG5vdCBtb3ZlIGFzc2lnbmFi
bGUiKTsKKworc3RydWN0IEVycm9yIHsKKyAgICBFcnJvcihTdHJpbmcmJiBkb21haW4sIFN0cmlu
ZyYmIGZhaWxpbmdVUkwsIFN0cmluZyYmIGxvY2FsaXplZERlc2NyaXB0aW9uLCBpbnQgZXJyb3JD
b2RlLCBpbnQgdHlwZSk7CisgICAgRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYp
OworICAgIG9wZXJhdG9yIFdlYkNvcmU6OlJlc291cmNlRXJyb3IoKSBjb25zdDsKKworICAgIFN0
cmluZyBkb21haW47CisgICAgU3RyaW5nIGZhaWxpbmdVUkw7CisgICAgU3RyaW5nIGxvY2FsaXpl
ZERlc2NyaXB0aW9uOworICAgIGludCBlcnJvckNvZGU7CisgICAgaW50IHR5cGU7Cit9Oworc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX21vdmVfY29uc3RydWN0aWJsZTxFcnJvcj46OnZhbHVlLCAiRXJy
b3IgaXMgbm90IG1vdmUgY29uc3RydWN0aWJsZSIpOworc3RhdGljX2Fzc2VydChzdGQ6OmlzX21v
dmVfYXNzaWduYWJsZTxFcnJvcj46OnZhbHVlLCAiRXJyb3IgaXMgbm90IG1vdmUgYXNzaWduYWJs
ZSIpOworCitzdHJ1Y3QgVGltZWRFdmVudCB7CisgICAgVGltZWRFdmVudCgpCisgICAgICAgIDog
dGltZShDYXB0dXJlQ2xvY2tUeXBlOjpub3coKSkgeyB9CisgICAgVGltZWRFdmVudChDYXB0dXJl
VGltZVR5cGUmJiB0aW1lKQorICAgICAgICA6IHRpbWUoV1RGTW92ZSh0aW1lKSkgeyB9CisKKyAg
ICBDYXB0dXJlVGltZVR5cGUgdGltZTsKK307CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfbW92ZV9j
b25zdHJ1Y3RpYmxlPFRpbWVkRXZlbnQ+Ojp2YWx1ZSwgIlRpbWVkRXZlbnQgaXMgbm90IG1vdmUg
Y29uc3RydWN0aWJsZSIpOworc3RhdGljX2Fzc2VydChzdGQ6OmlzX21vdmVfYXNzaWduYWJsZTxU
aW1lZEV2ZW50Pjo6dmFsdWUsICJUaW1lZEV2ZW50IGlzIG5vdCBtb3ZlIGFzc2lnbmFibGUiKTsK
Kworc3RydWN0IFJlcXVlc3RTZW50RXZlbnQgZmluYWwgOiBwdWJsaWMgVGltZWRFdmVudCB7Cisg
ICAgLy8gVGhpcyBkZWZhdWx0IGNvbnN0cnVjdG9yIGlzIG5lZWRlZCBvbmx5IGJlY2F1c2UgdGhp
cyBzdHJ1Y3QgaXMgdGhlIGZpcnN0CisgICAgLy8gdHlwZSBwYXNzZWQgdG8gQ2FwdHVyZUV2ZW50
LCB3aGljaCBpcyBhIFdURjo6VmFyaWFudC4gVGhpcyBtZWFucyB0aGF0IGlmCisgICAgLy8gQ2Fw
dHVyZUV2ZW50IGlzIGRlZmF1bHQtY29uc3RydWN0ZWQsIGl0IG5lZWRzIHRvIGRlZmF1bHQtY29u
c3RydWN0IGFuCisgICAgLy8gaW5zdGFuY2Ugb2YgUmVxdWVzdFNlbnRFdmVudCwgdGhlIGZpcnN0
IHR5cGUgb24gaXRzIGxpc3QuIElmIHdlIGRvbid0CisgICAgLy8gaGF2ZSBhIGRlZmF1bHQgY29u
c3RydWN0b3IgZm9yIHRoaXMgdHlwZSwgdGhlIENhcHR1cmVFdmVudCB3aWxsIGJlCisgICAgLy8g
Y3JlYXRlZCBpbiBhbiBpbnZhbGlkIHN0YXRlIGFuZCB3aWxsIGNyYXNoIHdoZW4gZGVzdHJ1Y3Rl
ZC4KKyAgICBSZXF1ZXN0U2VudEV2ZW50KCkKKyAgICAgICAgOiBUaW1lZEV2ZW50KCkKKyAgICAg
ICAgLCByZXF1ZXN0KCkgeyB9CisgICAgUmVxdWVzdFNlbnRFdmVudChjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCisgICAgICAgIDogVGltZWRFdmVudCgpCisgICAgICAg
ICwgcmVxdWVzdChyZXF1ZXN0KSB7IH0KKyAgICBSZXF1ZXN0U2VudEV2ZW50KENhcHR1cmVUaW1l
VHlwZSYmIHRpbWUsIFJlcXVlc3QmJiByZXF1ZXN0KQorICAgICAgICA6IFRpbWVkRXZlbnQoV1RG
TW92ZSh0aW1lKSkKKyAgICAgICAgLCByZXF1ZXN0KFdURk1vdmUocmVxdWVzdCkpIHsgfQorCisg
ICAgUmVxdWVzdCByZXF1ZXN0OworICAgIHN0YXRpYyBjb25zdCBjaGFyIHR5cGVOYW1lW107Cit9
Oworc3RhdGljX2Fzc2VydChzdGQ6OmlzX2RlZmF1bHRfY29uc3RydWN0aWJsZTxSZXF1ZXN0U2Vu
dEV2ZW50Pjo6dmFsdWUsICJSZXF1ZXN0U2VudEV2ZW50IGlzIG5vdCBkZWZhdWx0IGNvbnN0cnVj
dGlibGUiKTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc19tb3ZlX2NvbnN0cnVjdGlibGU8UmVxdWVz
dFNlbnRFdmVudD46OnZhbHVlLCAiUmVxdWVzdFNlbnRFdmVudCBpcyBub3QgbW92ZSBjb25zdHJ1
Y3RpYmxlIik7CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfbW92ZV9hc3NpZ25hYmxlPFJlcXVlc3RT
ZW50RXZlbnQ+Ojp2YWx1ZSwgIlJlcXVlc3RTZW50RXZlbnQgaXMgbm90IG1vdmUgYXNzaWduYWJs
ZSIpOworCitzdHJ1Y3QgUmVzcG9uc2VSZWNlaXZlZEV2ZW50IGZpbmFsIDogcHVibGljIFRpbWVk
RXZlbnQgeworICAgIFJlc3BvbnNlUmVjZWl2ZWRFdmVudChjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSkKKyAgICAgICAgOiBUaW1lZEV2ZW50KCkKKyAgICAgICAgLCBy
ZXNwb25zZShyZXNwb25zZSkgeyB9CisgICAgUmVzcG9uc2VSZWNlaXZlZEV2ZW50KENhcHR1cmVU
aW1lVHlwZSYmIHRpbWUsIFJlc3BvbnNlJiYgcmVzcG9uc2UpCisgICAgICAgIDogVGltZWRFdmVu
dChXVEZNb3ZlKHRpbWUpKQorICAgICAgICAsIHJlc3BvbnNlKFdURk1vdmUocmVzcG9uc2UpKSB7
IH0KKworICAgIFJlc3BvbnNlIHJlc3BvbnNlOworICAgIHN0YXRpYyBjb25zdCBjaGFyIHR5cGVO
YW1lW107Cit9Oworc3RhdGljX2Fzc2VydChzdGQ6OmlzX21vdmVfY29uc3RydWN0aWJsZTxSZXNw
b25zZVJlY2VpdmVkRXZlbnQ+Ojp2YWx1ZSwgIlJlc3BvbnNlUmVjZWl2ZWRFdmVudCBpcyBub3Qg
bW92ZSBjb25zdHJ1Y3RpYmxlIik7CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfbW92ZV9hc3NpZ25h
YmxlPFJlc3BvbnNlUmVjZWl2ZWRFdmVudD46OnZhbHVlLCAiUmVzcG9uc2VSZWNlaXZlZEV2ZW50
IGlzIG5vdCBtb3ZlIGFzc2lnbmFibGUiKTsKKworc3RydWN0IFJlZGlyZWN0UmVjZWl2ZWRFdmVu
dCBmaW5hbCA6IHB1YmxpYyBUaW1lZEV2ZW50IHsKKyAgICBSZWRpcmVjdFJlY2VpdmVkRXZlbnQo
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKKyAgICAgICAgOiBUaW1lZEV2ZW50KCkKKyAgICAg
ICAgLCByZXF1ZXN0KHJlcXVlc3QpCisgICAgICAgICwgcmVzcG9uc2UocmVzcG9uc2UpIHsgfQor
ICAgIFJlZGlyZWN0UmVjZWl2ZWRFdmVudChDYXB0dXJlVGltZVR5cGUmJiB0aW1lLCBSZXF1ZXN0
JiYgcmVxdWVzdCwgUmVzcG9uc2UmJiByZXNwb25zZSkKKyAgICAgICAgOiBUaW1lZEV2ZW50KFdU
Rk1vdmUodGltZSkpCisgICAgICAgICwgcmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKQorICAgICAg
ICAsIHJlc3BvbnNlKFdURk1vdmUocmVzcG9uc2UpKSB7IH0KKworICAgIFJlcXVlc3QgcmVxdWVz
dDsKKyAgICBSZXNwb25zZSByZXNwb25zZTsKKyAgICBzdGF0aWMgY29uc3QgY2hhciB0eXBlTmFt
ZVtdOworfTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc19tb3ZlX2NvbnN0cnVjdGlibGU8UmVkaXJl
Y3RSZWNlaXZlZEV2ZW50Pjo6dmFsdWUsICJSZWRpcmVjdFJlY2VpdmVkRXZlbnQgaXMgbm90IG1v
dmUgY29uc3RydWN0aWJsZSIpOworc3RhdGljX2Fzc2VydChzdGQ6OmlzX21vdmVfYXNzaWduYWJs
ZTxSZWRpcmVjdFJlY2VpdmVkRXZlbnQ+Ojp2YWx1ZSwgIlJlZGlyZWN0UmVjZWl2ZWRFdmVudCBp
cyBub3QgbW92ZSBhc3NpZ25hYmxlIik7CisKK3N0cnVjdCBSZWRpcmVjdFNlbnRFdmVudCBmaW5h
bCA6IHB1YmxpYyBUaW1lZEV2ZW50IHsKKyAgICBSZWRpcmVjdFNlbnRFdmVudChjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCisgICAgICAgIDogVGltZWRFdmVudCgpCisg
ICAgICAgICwgcmVxdWVzdChyZXF1ZXN0KSB7IH0KKyAgICBSZWRpcmVjdFNlbnRFdmVudChDYXB0
dXJlVGltZVR5cGUmJiB0aW1lLCBSZXF1ZXN0JiYgcmVxdWVzdCkKKyAgICAgICAgOiBUaW1lZEV2
ZW50KFdURk1vdmUodGltZSkpCisgICAgICAgICwgcmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpKSB7
IH0KKworICAgIFJlcXVlc3QgcmVxdWVzdDsKKyAgICBzdGF0aWMgY29uc3QgY2hhciB0eXBlTmFt
ZVtdOworfTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc19tb3ZlX2NvbnN0cnVjdGlibGU8UmVkaXJl
Y3RTZW50RXZlbnQ+Ojp2YWx1ZSwgIlJlZGlyZWN0U2VudEV2ZW50IGlzIG5vdCBtb3ZlIGNvbnN0
cnVjdGlibGUiKTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc19tb3ZlX2Fzc2lnbmFibGU8UmVkaXJl
Y3RTZW50RXZlbnQ+Ojp2YWx1ZSwgIlJlZGlyZWN0U2VudEV2ZW50IGlzIG5vdCBtb3ZlIGFzc2ln
bmFibGUiKTsKKworc3RydWN0IERhdGFSZWNlaXZlZEV2ZW50IGZpbmFsIDogcHVibGljIFRpbWVk
RXZlbnQgeworICAgIERhdGFSZWNlaXZlZEV2ZW50KCkKKyAgICAgICAgOiBUaW1lZEV2ZW50KCkK
KyAgICAgICAgLCBkYXRhKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCkpIHsgfQorICAg
IERhdGFSZWNlaXZlZEV2ZW50KFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciYgZGF0YSkKKyAgICAgICAg
OiBUaW1lZEV2ZW50KCkKKyAgICAgICAgLCBkYXRhKFJlZjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+
KGRhdGEpKSB7IH0KKyAgICBEYXRhUmVjZWl2ZWRFdmVudChDYXB0dXJlVGltZVR5cGUmJiB0aW1l
LCBXZWJDb3JlOjpTaGFyZWRCdWZmZXImIGRhdGEpCisgICAgICAgIDogVGltZWRFdmVudChXVEZN
b3ZlKHRpbWUpKQorICAgICAgICAsIGRhdGEoUmVmPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4oZGF0
YSkpIHsgfQorCisgICAgUmVmPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZGF0YTsKKyAgICBzdGF0
aWMgY29uc3QgY2hhciB0eXBlTmFtZVtdOworfTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc19tb3Zl
X2NvbnN0cnVjdGlibGU8RGF0YVJlY2VpdmVkRXZlbnQ+Ojp2YWx1ZSwgIkRhdGFSZWNlaXZlZEV2
ZW50IGlzIG5vdCBtb3ZlIGNvbnN0cnVjdGlibGUiKTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc19t
b3ZlX2Fzc2lnbmFibGU8RGF0YVJlY2VpdmVkRXZlbnQ+Ojp2YWx1ZSwgIkRhdGFSZWNlaXZlZEV2
ZW50IGlzIG5vdCBtb3ZlIGFzc2lnbmFibGUiKTsKKworc3RydWN0IEZpbmlzaGVkRXZlbnQgZmlu
YWwgOiBwdWJsaWMgVGltZWRFdmVudCB7CisgICAgRmluaXNoZWRFdmVudChjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZUVycm9yJiBlcnJvcikKKyAgICAgICAgOiBUaW1lZEV2ZW50KCkKKyAgICAgICAg
LCBlcnJvcihlcnJvcikgeyB9CisgICAgRmluaXNoZWRFdmVudChDYXB0dXJlVGltZVR5cGUmJiB0
aW1lLCBFcnJvciYmIGVycm9yKQorICAgICAgICA6IFRpbWVkRXZlbnQoV1RGTW92ZSh0aW1lKSkK
KyAgICAgICAgLCBlcnJvcihXVEZNb3ZlKGVycm9yKSkgeyB9CisKKyAgICBFcnJvciBlcnJvcjsK
KyAgICBzdGF0aWMgY29uc3QgY2hhciB0eXBlTmFtZVtdOworfTsKK3N0YXRpY19hc3NlcnQoc3Rk
Ojppc19tb3ZlX2NvbnN0cnVjdGlibGU8RmluaXNoZWRFdmVudD46OnZhbHVlLCAiRmluaXNoZWRF
dmVudCBpcyBub3QgbW92ZSBjb25zdHJ1Y3RpYmxlIik7CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
bW92ZV9hc3NpZ25hYmxlPEZpbmlzaGVkRXZlbnQ+Ojp2YWx1ZSwgIkZpbmlzaGVkRXZlbnQgaXMg
bm90IG1vdmUgYXNzaWduYWJsZSIpOworCit9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZQor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQVBUVVJF
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3
b3JrQ2FwdHVyZUxvZ2dpbmcuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1
cmUvTmV0d29ya0NhcHR1cmVMb2dnaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2RhZmQ2YmYwNTE3NmQzMmVi
MTU1MTYyZjgyMTBmZjk4ZDRkOGM1OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVMb2dnaW5nLmgKQEAgLTAsMCAr
MSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE5FVFdPUktf
Q0FQVFVSRSkKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKworI2RlZmluZSBFTkFCTEVfV1RGX0NB
UFRVUkVfSU5URVJOQUxfREVCVUdHSU5HIDAKKyNkZWZpbmUgRU5BQkxFX1dURl9WRVJCT1NFX0NB
UFRVUkVfSU5URVJOQUxfREVCVUdHSU5HIDAKKworI2RlZmluZSBERUJVR19TVFIocykgICAgICAg
ICAgICAgICAgICAgIChzKS5hc2NpaSgpLmRhdGEoKQorCisjaWYgRU5BQkxFKFdURl9DQVBUVVJF
X0lOVEVSTkFMX0RFQlVHR0lORykKKyNkZWZpbmUgREVCVUdfTE9HX1FVT1RFKHN0cikgICAgICAg
ICAgICAjc3RyCisjZGVmaW5lIERFQlVHX0xPR19FWFBBTkRfQU5EX1FVT1RFKHN0cikgREVCVUdf
TE9HX1FVT1RFKHN0cikKKyNkZWZpbmUgREVCVUdfTE9HKGZvcm1hdCwgLi4uKSAgICAgICAgICBS
RUxFQVNFX0xPRyhOZXR3b3JrLCAiI1BMVDogJXAgLSAle3B1YmxpY31zOjole3B1YmxpY31zOiAi
IGZvcm1hdCwgdGhpcywgREVCVUdfTE9HX0VYUEFORF9BTkRfUVVPVEUoREVCVUdfQ0xBU1MpLCBf
X0ZVTkNUSU9OX18sICMjX19WQV9BUkdTX18pCisjZGVmaW5lIERFQlVHX0xPR19FUlJPUihmb3Jt
YXQsIC4uLikgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiNQTFQ6ICVwIC0gJXtwdWJs
aWN9czo6JXtwdWJsaWN9czogIiBmb3JtYXQsIHRoaXMsIERFQlVHX0xPR19FWFBBTkRfQU5EX1FV
T1RFKERFQlVHX0NMQVNTKSwgX19GVU5DVElPTl9fLCAjI19fVkFfQVJHU19fKQorI2lmIEVOQUJM
RShXVEZfVkVSQk9TRV9DQVBUVVJFX0lOVEVSTkFMX0RFQlVHR0lORykKKyNkZWZpbmUgREVCVUdf
TE9HX1ZFUkJPU0UoZm9ybWF0LCAuLi4pICBERUJVR19MT0coZm9ybWF0LCAjI19fVkFfQVJHU19f
KQorI2Vsc2UKKyNkZWZpbmUgREVCVUdfTE9HX1ZFUkJPU0UoLi4uKSAgICAgICAgICAoKHZvaWQp
MCkKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgREVCVUdfTE9HKC4uLikgICAgICAgICAgICAgICAg
ICAoKHZvaWQpMCkKKyNkZWZpbmUgREVCVUdfTE9HX0VSUk9SKC4uLikgICAgICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihOZXR3b3JrLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgREVCVUdfTE9HX1ZF
UkJPU0UoLi4uKSAgICAgICAgICAoKHZvaWQpMCkKKyNlbmRpZgorCisjZW5kaWYgLy8gRU5BQkxF
KE5FVFdPUktfQ0FQVFVSRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mYzQ4NzRlNDY3NDEzNjUyNDQwNTY3NGNjZjBhYWE5ZjBjOGVjOTA3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVy
ZU1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsNTk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlTWFuYWdlci5oIgorCisjaWYgRU5BQkxF
KE5FVFdPUktfQ0FQVFVSRSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlTG9nZ2luZy5oIgor
I2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJXZWJDb3JlL1Jl
c291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIldlYkNvcmUvVVJMLmgiCisjaW5jbHVkZSA8d3Rm
L01ENS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxpdGVy
YXRvcj4KKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKyNkZWZpbmUg
REVCVUdfQ0xBU1MgTWFuYWdlcgorCituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3
b3JrQ2FwdHVyZSB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBrRGlyTmFtZVJlY29yZFJlcGxheSA9
ICJXZWJLaXRQZXJmL3JlY29yZF9yZXBsYXkiOworc3RhdGljIGNvbnN0IGNoYXIqIGtEaXJOYW1l
UmVzb3VyY2VzID0gInJlc291cmNlcyI7CitzdGF0aWMgY29uc3QgY2hhcioga0ZpbGVOYW1lUmVw
b3J0TG9hZCA9ICJyZXBvcnRfbG9hZC50eHQiOworc3RhdGljIGNvbnN0IGNoYXIqIGtGaWxlTmFt
ZVJlcG9ydFJlY29yZCA9ICJyZXBvcnRfcmVjb3JkLnR4dCI7CitzdGF0aWMgY29uc3QgY2hhciog
a0ZpbGVOYW1lUmVwb3J0UmVwbGF5ID0gInJlcG9ydF9yZXBsYXkudHh0IjsKKworc3RhdGljIGlu
dCBrTWF4TWF0Y2ggPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOworc3RhdGljIGlu
dCBrTWluTWF0Y2ggPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpOworCitNYW5hZ2Vy
JiBNYW5hZ2VyOjpzaW5nbGV0b24oKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNYW5h
Z2VyPiBpbnN0YW5jZTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKK3ZvaWQgTWFuYWdlcjo6
aW5pdGlhbGl6ZShjb25zdCBTdHJpbmcmIHJlY29yZFJlcGxheU1vZGUsIGNvbnN0IFN0cmluZyYg
cmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbikKK3sKKyAgICBERUJVR19MT0coIkluaXRpYWxpemlu
ZyIpOworCisgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UocmVjb3JkUmVwbGF5TW9kZSwg
InJlY29yZCIpKQorICAgICAgICBtX3JlY29yZFJlcGxheU1vZGUgPSBSZWNvcmQ7CisgICAgZWxz
ZSBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShyZWNvcmRSZXBsYXlNb2RlLCAicmVwbGF5Iikp
CisgICAgICAgIG1fcmVjb3JkUmVwbGF5TW9kZSA9IFJlcGxheTsKKyAgICBlbHNlCisgICAgICAg
IG1fcmVjb3JkUmVwbGF5TW9kZSA9IERpc2FibGVkOworCisgICAgbV9yZWNvcmRSZXBsYXlDYWNo
ZUxvY2F0aW9uID0gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHJlY29yZFJlcGxh
eUNhY2hlTG9jYXRpb24sIGtEaXJOYW1lUmVjb3JkUmVwbGF5KTsKKworICAgIERFQlVHX0xPRygi
Q2FjaGUgbG9jYXRpb24gPSAle3B1YmxpY31zIiwgREVCVUdfU1RSKG1fcmVjb3JkUmVwbGF5Q2Fj
aGVMb2NhdGlvbikpOworCisgICAgaWYgKGlzUmVwbGF5aW5nKCkpCisgICAgICAgIGxvYWRSZXNv
dXJjZXMoKTsKK30KKwordm9pZCBNYW5hZ2VyOjp0ZXJtaW5hdGUoKQoreworICAgIG1fbG9hZEZp
bGVIYW5kbGUuY2xvc2VGaWxlKCk7CisgICAgbV9yZXBsYXlGaWxlSGFuZGxlLmNsb3NlRmlsZSgp
OworICAgIG1fcmVjb3JkRmlsZUhhbmRsZS5jbG9zZUZpbGUoKTsKK30KKworUmVzb3VyY2UqIE1h
bmFnZXI6OmZpbmRNYXRjaChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qp
Cit7CisgICAgREVCVUdfTE9HX1ZFUkJPU0UoIlVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIo
cmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworCisgICAgYXV0byBiZXN0TWF0Y2ggPSBmaW5kRXhh
Y3RNYXRjaChyZXF1ZXN0KTsKKyAgICBpZiAoIWJlc3RNYXRjaCkKKyAgICAgICAgYmVzdE1hdGNo
ID0gZmluZEJlc3RGdXp6eU1hdGNoKHJlcXVlc3QpOworCisjaWYgRU5BQkxFKFdURl9DQVBUVVJF
X0lOVEVSTkFMX0RFQlVHR0lORykKKyAgICBpZiAoIWJlc3RNYXRjaCkKKyAgICAgICAgREVCVUdf
TE9HKCJDb3VsZCBub3QgZmluZCBtYXRjaCBmb3I6ICV7cHVibGljfXMiLCBERUJVR19TVFIocmVx
dWVzdC51cmwoKS5zdHJpbmcoKSkpOworICAgIGVsc2UgaWYgKHJlcXVlc3QudXJsKCkgPT0gYmVz
dE1hdGNoLT51cmwoKSkKKyAgICAgICAgREVCVUdfTE9HKCJGb3VuZCBleGFjdCBtYXRjaCBmb3I6
ICV7cHVibGljfXMiLCBERUJVR19TVFIocmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworICAgIGVs
c2UgeworICAgICAgICBERUJVR19MT0coIkZvdW5kIGZ1enp5IG1hdGNoIGZvcjogJXtwdWJsaWN9
cyIsIERFQlVHX1NUUihyZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisgICAgICAgIERFQlVHX0xP
RygiICAgICAgIHJlcGxhY2VkIHdpdGggOiAle3B1YmxpY31zIiwgREVCVUdfU1RSKGJlc3RNYXRj
aC0+dXJsKCkuc3RyaW5nKCkpKTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBiZXN0TWF0
Y2g7Cit9CisKK1Jlc291cmNlKiBNYW5hZ2VyOjpmaW5kRXhhY3RNYXRjaChjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgY29uc3QgYXV0byYgdXJsID0gcmVx
dWVzdC51cmwoKTsKKyAgICBhdXRvIGxvd2VyID0gc3RkOjpsb3dlcl9ib3VuZChzdGQ6OmJlZ2lu
KG1fY2FjaGVkUmVzb3VyY2VzKSwgc3RkOjplbmQobV9jYWNoZWRSZXNvdXJjZXMpLCB1cmwsIFtd
KGF1dG8mIHJlc291cmNlLCBjb25zdCBhdXRvJiB1cmwpIHsKKyAgICAgICAgcmV0dXJuIFdURjo6
Y29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKHJlc291cmNlLnVybCgpLnN0cmluZygpLCB1cmwuc3Ry
aW5nKCkpOworICAgIH0pOworCisgICAgaWYgKGxvd2VyICE9IHN0ZDo6ZW5kKG1fY2FjaGVkUmVz
b3VyY2VzKSAmJiBsb3dlci0+dXJsKCkgPT0gdXJsKSB7CisgICAgICAgIERFQlVHX0xPR19WRVJC
T1NFKCJGb3VuZCBleGFjdCBtYXRjaDogJXtwdWJsaWN9cyIsIERFQlVHX1NUUihsb3dlci0+dXJs
KCkuc3RyaW5nKCkpKTsKKyAgICAgICAgcmV0dXJuICYqbG93ZXI7CisgICAgfQorCisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK1Jlc291cmNlKiBNYW5hZ2VyOjpmaW5kQmVzdEZ1enp5TWF0Y2go
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGNvbnN0IGF1
dG8mIHVybCA9IHJlcXVlc3QudXJsKCk7CisgICAgUmVzb3VyY2UqIGJlc3RNYXRjaCA9IG51bGxw
dHI7CisgICAgaW50IGJlc3RTY29yZSA9IGtNaW5NYXRjaDsKKyAgICBjb25zdCBhdXRvJiBiYXNl
VVJMID0gdXJsLnN0cmluZygpLmxlZnQodXJsLnBhdGhTdGFydCgpKTsKKworICAgIGNvbnN0IGF1
dG8mIGxvd2VyID0gc3RkOjpsb3dlcl9ib3VuZChzdGQ6OmJlZ2luKG1fY2FjaGVkUmVzb3VyY2Vz
KSwgc3RkOjplbmQobV9jYWNoZWRSZXNvdXJjZXMpLCBiYXNlVVJMLCBbXShhdXRvJiByZXNvdXJj
ZSwgY29uc3QgYXV0byYgdXJsKSB7CisgICAgICAgIHJldHVybiBXVEY6OmNvZGVQb2ludENvbXBh
cmVMZXNzVGhhbihyZXNvdXJjZS5iYXNlVVJMKCkuc3RyaW5nKCksIHVybCk7CisgICAgfSk7Cisg
ICAgY29uc3QgYXV0byYgdXBwZXIgPSBzdGQ6OnVwcGVyX2JvdW5kKGxvd2VyLCBzdGQ6OmVuZCht
X2NhY2hlZFJlc291cmNlcyksIGJhc2VVUkwsIFtdKGNvbnN0IGF1dG8mIHVybCwgYXV0byYgcmVz
b3VyY2UpIHsKKyAgICAgICAgcmV0dXJuIFdURjo6Y29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKHJl
c291cmNlLmJhc2VVUkwoKS5zdHJpbmcoKSwgdXJsKTsKKyAgICB9KTsKKworICAgIGNvbnN0IGF1
dG8mIHJlcXVlc3RQYXJhbWV0ZXJzID0gV2ViQ29yZTo6VVJMUGFyc2VyOjpwYXJzZVVSTEVuY29k
ZWRGb3JtKHVybC5xdWVyeSgpKTsKKyAgICBmb3IgKGF1dG8gaVJlc291cmNlID0gbG93ZXI7IGlS
ZXNvdXJjZSAhPSB1cHBlcjsgKytpUmVzb3VyY2UpIHsKKyAgICAgICAgaW50IHRoaXNTY29yZSA9
IGZ1enp5TWF0Y2hVUkxzKHVybCwgcmVxdWVzdFBhcmFtZXRlcnMsIGlSZXNvdXJjZS0+dXJsKCks
IGlSZXNvdXJjZS0+cXVlcnlQYXJhbWV0ZXJzKCkpOworICAgICAgICAvLyBUT0RPOiBDb25zaWRl
ciBpZ25vcmluZyBhbnkgbWF0Y2hlcyA8IDAgYXMgYmVpbmcgdG9vIGRpZmZlcmVudC4KKyAgICAg
ICAgaWYgKGJlc3RTY29yZSA8IHRoaXNTY29yZSkgeworICAgICAgICAgICAgREVCVUdfTE9HKCJO
ZXcgYmVzdCBtYXRjaCAoJWQpOiAle3B1YmxpY31zIiwgdGhpc1Njb3JlLCBERUJVR19TVFIoaVJl
c291cmNlLT51cmwoKS5zdHJpbmcoKSkpOworICAgICAgICAgICAgYmVzdFNjb3JlID0gdGhpc1Nj
b3JlOworICAgICAgICAgICAgYmVzdE1hdGNoID0gJippUmVzb3VyY2U7CisgICAgICAgICAgICBp
ZiAoYmVzdFNjb3JlID09IGtNYXhNYXRjaCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBiZXN0TWF0Y2g7Cit9CisKKy8vIFRPRE86IENvbnZl
cnQgdG8gYW4gaW50ZXJmYWNlIGJhc2VkIG9uIFJlc291cmNlUmVxdWVzdCBzbyB0aGF0IHdlIGNh
biBkbworLy8gZGVlcGVyIG1hdGNoaW5nLgorCitpbnQgTWFuYWdlcjo6ZnV6enlNYXRjaFVSTHMo
Y29uc3QgV2ViQ29yZTo6VVJMJiByZXF1ZXN0VVJMLCBjb25zdCBXZWJDb3JlOjpVUkxQYXJzZXI6
OlVSTEVuY29kZWRGb3JtJiByZXF1ZXN0UGFyYW1ldGVycywgY29uc3QgV2ViQ29yZTo6VVJMJiBy
ZXNvdXJjZVVSTCwgY29uc3QgV2ViQ29yZTo6VVJMUGFyc2VyOjpVUkxFbmNvZGVkRm9ybSYgcmVz
b3VyY2VQYXJhbWV0ZXJzKQoreworICAgIC8vIFRPRE86IGNvbnNpZGVyIHJlcXVpcmluZyB0aGF0
IGFueSB0cmFpbGluZyBzdWZmaXhlcyAoZS5nLiwgIi5qcyIsCisgICAgLy8gIi5wbmciLCAiLmNz
cyIsICIuaHRtbCIsIGV0Yy4pIHNob3VsZCBiZSBhbiBleGFjdCBtYXRjaC4KKworICAgIC8vIFdl
IGRvIGZ1enp5IG1hdGNoaW5nIG9uIHRoZSBwYXRoIGFuZCBxdWVyeSBwYXJhbWV0ZXJzLiBTbyBs
ZXQncyBmaXJzdAorICAgIC8vIG1ha2Ugc3VyZSB0aGF0IGFsbCB0aGUgb3RoZXIgcGFydHMgYXJl
IGVxdWFsLgorCisgICAgLy8gSWYgc2NoZW1lLCBob3N0LCBhbmQgcG9ydCBkb24ndCBhbGwgbWF0
Y2gsIHJldHVybiB0aGlzIGFzIHRoZSAid29yc3QiCisgICAgLy8gbWF0Y2guCisKKyAgICBpZiAo
IXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChyZXF1ZXN0VVJMLCByZXNvdXJjZVVSTCkpIHsK
KyAgICAgICAgREVCVUdfTE9HKCJTY2hlbWUvaG9zdC9wb3J0IG1pc21hdGNoOiAle3B1YmxpY31z
ICE9ICV7cHVibGljfXMiLCBERUJVR19TVFIocmVxdWVzdFVSTC5zdHJpbmcoKSksIERFQlVHX1NU
UihyZXNvdXJjZVVSTC5zdHJpbmcoKSkpOworICAgICAgICByZXR1cm4ga01pbk1hdGNoOworICAg
IH0KKworICAgIC8vIElmIGZyYWdtZW50cyBkb24ndCBtYXRjaCwgcmV0dXJuIHRoaXMgYXMgdGhl
ICJ3b3JzdCIgbWF0Y2guCisKKyAgICBpZiAocmVxdWVzdFVSTC5mcmFnbWVudElkZW50aWZpZXIo
KSAhPSByZXNvdXJjZVVSTC5mcmFnbWVudElkZW50aWZpZXIoKSkgeworICAgICAgICBERUJVR19M
T0coIkZyYWdtZW50cyBtaXNtYXRjaDogJXtwdWJsaWN9cyAhPSAle3B1YmxpY31zIiwgREVCVUdf
U1RSKHJlcXVlc3RVUkwuc3RyaW5nKCkpLCBERUJVR19TVFIocmVzb3VyY2VVUkwuc3RyaW5nKCkp
KTsKKyAgICAgICAgcmV0dXJuIGtNaW5NYXRjaDsKKyAgICB9CisKKyAgICBERUJVR19MT0coIkZ1
enp5IG1hdGNoaW5nOiIpOworICAgIERFQlVHX0xPRygiICAgOiAle3B1YmxpY31zIiwgREVCVUdf
U1RSKHJlcXVlc3RVUkwuc3RyaW5nKCkpKTsKKyAgICBERUJVR19MT0coIiAgIDogJXtwdWJsaWN9
cyIsIERFQlVHX1NUUihyZXNvdXJjZVVSTC5zdHJpbmcoKSkpOworCisgICAgLy8gQ29tcGFyZSB0
aGUgcGF0aCBjb21wb25lbnRzIGFuZCB0aGUgcXVlcnkgcGFyYW1ldGVycy4gU2NvcmUgZWFjaCBw
YXJ0aWFsCisgICAgLy8gbWF0Y2ggYXMgKzQsIGVhY2ggbWlzbWF0Y2ggYXMgLTEsIGFuZCBlYWNo
IG1pc3NpbmcgY29tcG9uZW50IGFzIC0xLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGF0IHRo
ZSBjdXJyZW50IHRpbWUgdGhlc2UgdmFsdWVzIGFyZSByYXRoZXIgYXJiaXRyYXJ5IGFuZAorICAg
IC8vIGNvdWxkIGZpbmUtdHVuZWQuCisKKyAgICBjb25zdCBpbnQga1BhdGhNYXRjaFNjb3JlID0g
NDsKKyAgICBjb25zdCBpbnQga1BhdGhNaXNtYXRjaFNjb3JlID0gLTE7CisgICAgY29uc3QgaW50
IGtQYXRoTWlzc2luZ1Njb3JlID0gLTE7CisgICAgY29uc3QgaW50IGtQYXJhbWV0ZXJNYXRjaFNj
b3JlID0gNDsKKyAgICBjb25zdCBpbnQga1BhcmFtZXRlck1pc21hdGNoU2NvcmUgPSAtMTsKKyAg
ICBjb25zdCBpbnQga1BhcmFtZXRlck1pc3NpbmdTY29yZSA9IC0xOworCisgICAgaW50IHNjb3Jl
ID0gMDsKKworICAgIC8vIFF1YW50aXplIHRoZSBkaWZmZXJlbmNlcyBpbiBVUkwgcGF0aHMuCisg
ICAgLy8KKyAgICAvLyBUaGUgYXBwcm9hY2ggaGVyZSBpcyB0byBpbmNyZWFzZSBvdXIgc2NvcmUg
Zm9yIGVhY2ggbWF0Y2hpbmcgcGF0aAorICAgIC8vIGNvbXBvbmVudCwgYW5kIHRvIHN1YnRyYWN0
IGZvciBlYWNoIGRpZmZlcmluZyBjb21wb25lbnQgYXMgd2VsbCBhcyBmb3IKKyAgICAvLyBjb21w
b25lbnRzIHRoYXQgZXhpc3QgaW4gb25lIHBhdGggYnV0IG5vdCB0aGUgb3RoZXIuCisKKyAgICBj
b25zdCBhdXRvJiByZXF1ZXN0UGF0aCA9IHJlcXVlc3RVUkwucGF0aCgpOworICAgIGNvbnN0IGF1
dG8mIHJlc291cmNlUGF0aCA9IHJlc291cmNlVVJMLnBhdGgoKTsKKworICAgIFZlY3RvcjxTdHJp
bmc+IHJlcXVlc3RQYXRoQ29tcG9uZW50cywgcmVzb3VyY2VQYXRoQ29tcG9uZW50czsKKyAgICBy
ZXF1ZXN0UGF0aC5zcGxpdCgnLycsIHJlcXVlc3RQYXRoQ29tcG9uZW50cyk7CisgICAgcmVzb3Vy
Y2VQYXRoLnNwbGl0KCcvJywgcmVzb3VyY2VQYXRoQ29tcG9uZW50cyk7CisKKyAgICBhdXRvIHVw
ZGF0ZWRJdGVyYXRvcnMgPSBzdGQ6Om1pc21hdGNoKAorICAgICAgICBzdGQ6OmJlZ2luKHJlcXVl
c3RQYXRoQ29tcG9uZW50cyksIHN0ZDo6ZW5kKHJlcXVlc3RQYXRoQ29tcG9uZW50cyksCisgICAg
ICAgIHN0ZDo6YmVnaW4ocmVzb3VyY2VQYXRoQ29tcG9uZW50cyksIHN0ZDo6ZW5kKHJlc291cmNl
UGF0aENvbXBvbmVudHMpKTsKKworICAgIGF1dG8gbWF0Y2hpbmdEaXN0YW5jZSA9IHN0ZDo6ZGlz
dGFuY2Uoc3RkOjpiZWdpbihyZXF1ZXN0UGF0aENvbXBvbmVudHMpLCB1cGRhdGVkSXRlcmF0b3Jz
LmZpcnN0KTsKKyAgICBhdXRvIHJlcXVlc3RQYXRoTWlzbWF0Y2hEaXN0YW5jZSA9IHN0ZDo6ZGlz
dGFuY2UodXBkYXRlZEl0ZXJhdG9ycy5maXJzdCwgc3RkOjplbmQocmVxdWVzdFBhdGhDb21wb25l
bnRzKSk7CisgICAgYXV0byByZXNvdXJjZVBhdGhNaXNtYXRjaERpc3RhbmNlID0gc3RkOjpkaXN0
YW5jZSh1cGRhdGVkSXRlcmF0b3JzLnNlY29uZCwgc3RkOjplbmQocmVzb3VyY2VQYXRoQ29tcG9u
ZW50cykpOworICAgIGRlY2x0eXBlKG1hdGNoaW5nRGlzdGFuY2UpIG1pc21hdGNoaW5nRGlzdGFu
Y2U7CisgICAgZGVjbHR5cGUobWF0Y2hpbmdEaXN0YW5jZSkgbWlzc2luZ0Rpc3RhbmNlOworICAg
IGlmIChyZXF1ZXN0UGF0aE1pc21hdGNoRGlzdGFuY2UgPCByZXNvdXJjZVBhdGhNaXNtYXRjaERp
c3RhbmNlKSB7CisgICAgICAgIG1pc21hdGNoaW5nRGlzdGFuY2UgPSByZXF1ZXN0UGF0aE1pc21h
dGNoRGlzdGFuY2U7CisgICAgICAgIG1pc3NpbmdEaXN0YW5jZSA9IHJlc291cmNlUGF0aE1pc21h
dGNoRGlzdGFuY2UgLSByZXF1ZXN0UGF0aE1pc21hdGNoRGlzdGFuY2U7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbWlzbWF0Y2hpbmdEaXN0YW5jZSA9IHJlc291cmNlUGF0aE1pc21hdGNoRGlzdGFu
Y2U7CisgICAgICAgIG1pc3NpbmdEaXN0YW5jZSA9IHJlcXVlc3RQYXRoTWlzbWF0Y2hEaXN0YW5j
ZSAtIHJlc291cmNlUGF0aE1pc21hdGNoRGlzdGFuY2U7CisgICAgfQorCisgICAgREVCVUdfTE9H
KCJQYXRoIG1hdGNoaW5nIHJlc3VsdHM6IG1hdGNoaW5nID0gJWQsIG1pc21hdGNoaW5nID0gJWQs
IG1pc3NpbmcgPSAlZCIsCisgICAgICAgIHN0YXRpY19jYXN0PGludD4obWF0Y2hpbmdEaXN0YW5j
ZSksCisgICAgICAgIHN0YXRpY19jYXN0PGludD4obWlzbWF0Y2hpbmdEaXN0YW5jZSksCisgICAg
ICAgIHN0YXRpY19jYXN0PGludD4obWlzc2luZ0Rpc3RhbmNlKSk7CisKKyAgICBzY29yZSArPSBt
YXRjaGluZ0Rpc3RhbmNlICoga1BhdGhNYXRjaFNjb3JlCisgICAgICAgICsgbWlzbWF0Y2hpbmdE
aXN0YW5jZSAqIGtQYXRoTWlzbWF0Y2hTY29yZQorICAgICAgICArIG1pc3NpbmdEaXN0YW5jZSAq
IGtQYXRoTWlzc2luZ1Njb3JlOworICAgIERFQlVHX0xPRygiU2NvcmUgPSAlZCIsIHNjb3JlKTsK
KworICAgIC8vIFF1YW50aXplIHRoZSBkaWZmZXJlbmNlcyBpbiBxdWVyeSBwYXJhbWV0ZXJzLgor
ICAgIC8vCisgICAgLy8gVGhlIGFwcHJvYWNoIGhlcmUgaXMgdG8gd2FsayBsb2NrLXN0ZXAgb3Zl
ciB0aGUgdHdvIHNldHMgb2YgcXVlcnkKKyAgICAvLyBwYXJhbWV0ZXJzLiBGb3IgZWFjaCBwYWly
IG9mIHBhcmFtZXRlcnMgZm9yIGVhY2ggVVJMLCB3ZSBjb21wYXJlIHRoZWlyCisgICAgLy8gbmFt
ZXMgYW5kIHZhbHVlcy4gSWYgdGhlIG5hbWVzIGFuZCB2YWx1ZXMgbWF0Y2gsIHdlIGFkZCBhIGhp
Z2ggc2NvcmUuIElmCisgICAgLy8ganVzdCB0aGUgbmFtZXMgbWF0Y2gsIHdlIGFkZCBhIGxvd2Vy
IHNjb3JlLgorICAgIC8vCisgICAgLy8gSWYgdGhlIG5hbWVzIGRvbid0IG1hdGNoLCB3ZSB0aGVu
IGFzc3VtZSB0aGF0IHNvbWUgaW50ZXJ2ZW5pbmcgcXVlcnkKKyAgICAvLyBwYXJhbWV0ZXJzIGhh
dmUgYmVlbiBhZGRlZCB0byBvbmUgb3IgdGhlIG90aGVyIFVSTC4gV2UgdGhlcmVmb3JlIHRyeSB0
bworICAgIC8vIHN5bmMgdXAgdGhlIGl0ZXJhdG9ycyB1c2VkIHRvIHRyYXZlcnNlIHRoZSBxdWVy
eSBwYXJhbWV0ZXIgY29sbGVjdGlvbnMKKyAgICAvLyBzbyB0aGF0IHRoZXkncmUgYWdhaW4gcG9p
bnRpbmcgdG8gcGFyYW1ldGVycyB3aXRoIHRoZSBzYW1lIG5hbWVzLiBXZQorICAgIC8vIGZpcnN0
IHN0YXJ0IHNjYW5uaW5nIGZvcndhcmQgZG93biB0aGUgcXVlcnkgcGFyYW1ldGVycyBmb3Igb25l
IFVSTCwKKyAgICAvLyBsb29raW5nIGZvciBvbmUgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBv
bmUgd2UncmUgb24gaW4gdGhlIG90aGVyIFVSTC4KKyAgICAvLyBJZiB0aGF0IGRvZXNuJ3QgdHVy
biB1cCBhIG1hdGNoLCB3ZSByZXZlcnNlIHRoZSByb2xlcyBvZiB0aGUgcXVlcnkKKyAgICAvLyBw
YXJhbWV0ZXJzIHBlcmZvcm0gdGhlIHNhbWUgcHJvY2VzcyBvZiBzY2FubmluZyBmb3J3YXJkLiBJ
ZiBuZWl0aGVyIG9mCisgICAgLy8gdGhlc2Ugc2NhbnMgcHJvZHVjZXMgYSBtYXRjaCwgd2UgZmln
dXJlIHRoYXQgZWFjaCBxdWVyeSBwYXJhbWV0ZXIgd2UncmUKKyAgICAvLyBsb29raW5nIGF0IGZy
b20gZWFjaCBvZiB0aGUgcXVlcnkgcGFyYW1ldGVyIGNvbGxlY3Rpb25zIGlzIHVuaXF1ZS4gV2UK
KyAgICAvLyBkZWR1Y3QgcG9pbnRzIGZyb20gdGhlIG92ZXJhbGwgc2NvcmUgYW5kIG1vdmUgb24g
dG8gdGhlIG5leHQgcXVlcnkKKyAgICAvLyBwYXJhbWV0ZXJzIGluIGVhY2ggc2V0LgorICAgIC8v
CisgICAgLy8gSWYsIG9uIHRoZSBvdGhlciBoYW5kLCB0aGUgZm9yd2FyZC1zY2FubmluZyBkb2Vz
IHR1cm4gdXAgYSBtYXRjaCwgd2UKKyAgICAvLyBhZGp1c3Qgb3V0IGl0ZXJhdG9ycyBzbyB0aGF0
IHRoZXkncmUgbm93IGFnYWluIHBvaW50aW5nIHRvIHF1ZXJ5CisgICAgLy8gcGFyYW1ldGVycyB3
aXRoIHRoZSBzYW1lIG5hbWUuIFRoaXMgc3luY2hyb25pemF0aW9uIGludm9sdmVzIHNraXBwaW5n
CisgICAgLy8gb3ZlciBhbnkgaW50ZXJ2ZW5pbmcgcXVlcnkgcGFyYW1ldGVycyBpbiBvbmUgY29s
bGVjdGlvbiBvciB0aGUgb3RoZXIuCisgICAgLy8gVGhlIGFzc3VtcHRpb24gaGVyZSBpcyB0aGF0
IHRoZXNlIGludGVydmVuaW5nIHF1ZXJ5IHBhcmFtZXRlcnMgYXJlCisgICAgLy8gaW5zZXJ0aW9u
cyB0aGF0IGV4aXN0IGluIG9uZSBVUkwgYnV0IG5vdCB0aGUgb3RoZXIuIFdlIHRyZWF0IHRoZW0g
YXMKKyAgICAvLyBzdWNoLCBzdWJ0cmFjdGluZyBmcm9tIHRoZSBvdmVyYWxsIHNjb3JlIGZvciBl
YWNoIG9uZS4gSG93ZXZlciwgdGhpcworICAgIC8vIGFzc3VtcHRpb24gbWlnaHQgZWFzaWx5IGJl
IGluY29ycmVjdC4gSXQgbWlnaHQgYmUgdGhhdCB0aGUgcXVlcnkKKyAgICAvLyBwYXJhbWV0ZXJz
IHRoYXQgd2UncmUgc2tpcHBpbmcgb3ZlciBpbiBvbmUgVVJMIG1pZ2h0IGV4aXN0IGluIHRoZSBv
dGhlcgorICAgIC8vIFVSTC4gSWYgc28sIHRoZW4gd2UgYXJlIGZvcmVnb2luZyB0aGUgcG9zc2li
aWxpdHkgb2YgdXNpbmcgdGhvc2UgbWF0Y2hlcworICAgIC8vIHRvIGluY3JlYXNlIHRoZSBvdmVy
YWxsIG1hdGNoIHNjb3JlIGJldHdlZW4gdGhlIHR3byBVUkxzLgorICAgIC8vCisgICAgLy8gVG8g
YWRkcmVzcyB0aGlzIHByb2JsZW0sIHdlIG1pZ2h0IHdhbnQgdG8gY29uc2lkZXIgc29ydGluZyB0
aGUgcXVlcnkKKyAgICAvLyBwYXJhbWV0ZXJzIGJ5IHRoZWlyIG5hbWVzLiBIb3dldmVyLCBkb2lu
ZyB0aGlzIG1heSBjYXVzZSBwcm9ibGVtcyBpZiB0aGUKKyAgICAvLyBvcmRlciBvZiB0aGUgcGFy
YW1ldGVycyBpcyBzaWduaWZpY2FudC4gU28gaWYgd2UgZGVjaWRlIHRvIHRha2UgdGhlCisgICAg
Ly8gYXBwcm9hY2ggb2Ygc29ydGluZyB0aGUgcGFyYW1ldGVycywga2VlcCBpbiBtaW5kIHRoaXMg
cG9zc2libGUgZHJhd2JhY2suCisKKyAgICBhdXRvIHJlcXVlc3RQYXJhbWV0ZXIgPSBzdGQ6OmJl
Z2luKHJlcXVlc3RQYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHJlc291cmNlUGFyYW1ldGVyID0gc3Rk
OjpiZWdpbihyZXNvdXJjZVBhcmFtZXRlcnMpOworCisgICAgZm9yICg7IHJlcXVlc3RQYXJhbWV0
ZXIgIT0gc3RkOjplbmQocmVxdWVzdFBhcmFtZXRlcnMpICYmIHJlc291cmNlUGFyYW1ldGVyICE9
IHN0ZDo6ZW5kKHJlc291cmNlUGFyYW1ldGVycyk7ICsrcmVxdWVzdFBhcmFtZXRlciwgKytyZXNv
dXJjZVBhcmFtZXRlcikgeworICAgICAgICBpZiAocmVxdWVzdFBhcmFtZXRlci0+Zmlyc3QgPT0g
cmVzb3VyY2VQYXJhbWV0ZXItPmZpcnN0KSB7CisjaWYgRU5BQkxFKFdURl9DQVBUVVJFX0lOVEVS
TkFMX0RFQlVHR0lORykKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0UGFyYW1ldGVyLT5zZWNvbmQg
PT0gcmVzb3VyY2VQYXJhbWV0ZXItPnNlY29uZCkKKyAgICAgICAgICAgICAgICBERUJVR19MT0co
Ik1hdGNoaW5nIHBhcmFtZXRlciBuYW1lcyBhbmQgdmFsdWVzOiBcIiV7cHVibGljfXNcIiA9IFwi
JXtwdWJsaWN9c1wiIiwgREVCVUdfU1RSKHJlcXVlc3RQYXJhbWV0ZXItPmZpcnN0KSwgREVCVUdf
U1RSKHJlcXVlc3RQYXJhbWV0ZXItPnNlY29uZCkpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIERFQlVHX0xPRygiTWlzbWF0Y2hpbmcgcGFyYW1ldGVyIHZhbHVlczogXCIle3B1
YmxpY31zXCIgPSBcIiV7cHVibGljfXNcIiB2cy4gXCIle3B1YmxpY31zXCIiLCBERUJVR19TVFIo
cmVxdWVzdFBhcmFtZXRlci0+Zmlyc3QpLCBERUJVR19TVFIocmVxdWVzdFBhcmFtZXRlci0+c2Vj
b25kKSwgREVCVUdfU1RSKHJlc291cmNlUGFyYW1ldGVyLT5zZWNvbmQpKTsKKyNlbmRpZgorICAg
ICAgICAgICAgc2NvcmUgKz0gKHJlcXVlc3RQYXJhbWV0ZXItPnNlY29uZCA9PSByZXNvdXJjZVBh
cmFtZXRlci0+c2Vjb25kKSA/IGtQYXJhbWV0ZXJNYXRjaFNjb3JlIDoga1BhcmFtZXRlck1pc21h
dGNoU2NvcmU7CisgICAgICAgICAgICBERUJVR19MT0coIlNjb3JlID0gJWQiLCBzY29yZSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBERUJVR19MT0coIk1pc21hdGNoaW5nIHBhcmFt
ZXRlciBuYW1lczogJXtwdWJsaWN9cywgJXtwdWJsaWN9cyIsIERFQlVHX1NUUihyZXF1ZXN0UGFy
YW1ldGVyLT5maXJzdCksIERFQlVHX1NUUihyZXNvdXJjZVBhcmFtZXRlci0+Zmlyc3QpKTsKKwor
ICAgICAgICAgICAgY29uc3QgYXV0byBzY2FuRm9yd2FyZEZvck1hdGNoID0gW3RoaXMsICZzY29y
ZSwga1BhcmFtZXRlck1hdGNoU2NvcmUsIGtQYXJhbWV0ZXJNaXNtYXRjaFNjb3JlLCBrUGFyYW1l
dGVyTWlzc2luZ1Njb3JlXShjb25zdCBhdXRvJiBmaXhlZEl0ZXIsIGF1dG8mIHNjYW5uaW5nSXRl
ciwgY29uc3QgYXV0byYgc2Nhbm5lckVuZCkgeworICAgICAgICAgICAgICAgIGF1dG8gc2Nhbm5l
ciA9IHNjYW5uaW5nSXRlcjsKKyAgICAgICAgICAgICAgICB3aGlsZSAoc2Nhbm5lciAhPSBzY2Fu
bmVyRW5kICYmIHNjYW5uZXItPmZpcnN0ICE9IGZpeGVkSXRlci0+Zmlyc3QpCisgICAgICAgICAg
ICAgICAgICAgICsrc2Nhbm5lcjsKKyAgICAgICAgICAgICAgICBpZiAoc2Nhbm5lciA9PSBzY2Fu
bmVyRW5kKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgREVCVUdfTE9HKCJTa2lwcGluZyBwYXN0ICVkIG5vbi1tYXRjaGluZyBwYXJhbWV0ZXIgbmFt
ZXMiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0ZDo6ZGlzdGFuY2Uoc2Nhbm5pbmdJdGVyLCBzY2FubmVy
KSkpOworICAgICAgICAgICAgICAgIHNjb3JlICs9IGtQYXJhbWV0ZXJNaXNzaW5nU2NvcmUgKiBz
dGQ6OmRpc3RhbmNlKHNjYW5uaW5nSXRlciwgc2Nhbm5lcik7CisgICAgICAgICAgICAgICAgREVC
VUdfTE9HKCJTY29yZSA9ICVkIiwgc2NvcmUpOworI2lmIEVOQUJMRShXVEZfQ0FQVFVSRV9JTlRF
Uk5BTF9ERUJVR0dJTkcpCisgICAgICAgICAgICAgICAgaWYgKGZpeGVkSXRlci0+c2Vjb25kID09
IHNjYW5uZXItPnNlY29uZCkKKyAgICAgICAgICAgICAgICAgICAgREVCVUdfTE9HKCJNYXRjaGlu
ZyBwYXJhbWV0ZXIgbmFtZXMgYW5kIHZhbHVlczogXCIle3B1YmxpY31zXCIgPSBcIiV7cHVibGlj
fXNcIiIsIERFQlVHX1NUUihmaXhlZEl0ZXItPmZpcnN0KSwgREVCVUdfU1RSKGZpeGVkSXRlci0+
c2Vjb25kKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBERUJV
R19MT0coIk1pc21hdGNoaW5nIHBhcmFtZXRlciB2YWx1ZXM6IFwiJXtwdWJsaWN9c1wiID0gXCIl
e3B1YmxpY31zXCIgdnMuIFwiJXtwdWJsaWN9c1wiIiwgREVCVUdfU1RSKGZpeGVkSXRlci0+Zmly
c3QpLCBERUJVR19TVFIoZml4ZWRJdGVyLT5zZWNvbmQpLCBERUJVR19TVFIoc2Nhbm5lci0+c2Vj
b25kKSk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBzY29yZSArPSAoZml4ZWRJdGVyLT5zZWNv
bmQgPT0gc2Nhbm5lci0+c2Vjb25kKSA/IGtQYXJhbWV0ZXJNYXRjaFNjb3JlIDoga1BhcmFtZXRl
ck1pc21hdGNoU2NvcmU7CisgICAgICAgICAgICAgICAgREVCVUdfTE9HKCJTY29yZSA9ICVkIiwg
c2NvcmUpOworICAgICAgICAgICAgICAgIHNjYW5uaW5nSXRlciA9IHNjYW5uZXI7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBpZiAo
IXNjYW5Gb3J3YXJkRm9yTWF0Y2gocmVxdWVzdFBhcmFtZXRlciwgcmVzb3VyY2VQYXJhbWV0ZXIs
IHN0ZDo6ZW5kKHJlc291cmNlUGFyYW1ldGVycykpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFz
Y2FuRm9yd2FyZEZvck1hdGNoKHJlc291cmNlUGFyYW1ldGVyLCByZXF1ZXN0UGFyYW1ldGVyLCBz
dGQ6OmVuZChyZXF1ZXN0UGFyYW1ldGVycykpKSB7CisgICAgICAgICAgICAgICAgICAgIERFQlVH
X0xPRygiVW5tYXRjaGVkIHBhcmFtZXRlcjogJXtwdWJsaWN9cz0le3B1YmxpY31zIiwgREVCVUdf
U1RSKHJlcXVlc3RQYXJhbWV0ZXItPmZpcnN0KSwgREVCVUdfU1RSKHJlcXVlc3RQYXJhbWV0ZXIt
PnNlY29uZCkpOworICAgICAgICAgICAgICAgICAgICBERUJVR19MT0coIlVubWF0Y2hlZCBwYXJh
bWV0ZXI6ICV7cHVibGljfXM9JXtwdWJsaWN9cyIsIERFQlVHX1NUUihyZXNvdXJjZVBhcmFtZXRl
ci0+Zmlyc3QpLCBERUJVR19TVFIocmVzb3VyY2VQYXJhbWV0ZXItPnNlY29uZCkpOworICAgICAg
ICAgICAgICAgICAgICBzY29yZSArPSBrUGFyYW1ldGVyTWlzc2luZ1Njb3JlICsga1BhcmFtZXRl
ck1pc3NpbmdTY29yZTsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdfTE9HKCJTY29yZSA9ICVk
Iiwgc2NvcmUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIERFQlVHX0xPRygiQWRqdXN0aW5nIGZvciB0cmFpbGluZyBwYXJhbWV0ZXJz
Iik7CisgICAgc2NvcmUgKz0ga1BhcmFtZXRlck1pc3NpbmdTY29yZQorICAgICAgICAqIChzdGQ6
OmRpc3RhbmNlKHJlcXVlc3RQYXJhbWV0ZXIsIHN0ZDo6ZW5kKHJlcXVlc3RQYXJhbWV0ZXJzKSkK
KyAgICAgICAgICAgICsgc3RkOjpkaXN0YW5jZShyZXNvdXJjZVBhcmFtZXRlciwgc3RkOjplbmQo
cmVzb3VyY2VQYXJhbWV0ZXJzKSkpOworICAgIERFQlVHX0xPRygiU2NvcmUgPSAlZCIsIHNjb3Jl
KTsKKworICAgIHJldHVybiBzY29yZTsKK30KKwordm9pZCBNYW5hZ2VyOjpsb2FkUmVzb3VyY2Vz
KCkKK3sKKyAgICBhdXRvIGxpbmVzID0gcmVhZEZpbGUocmVwb3J0UmVjb3JkUGF0aCgpKTsKKyAg
ICBpZiAoIWxpbmVzKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGxp
bmUgOiAqbGluZXMpIHsKKyAgICAgICAgaWYgKGxpbmUuc2l6ZSgpICE9IDIpIHsKKyAgICAgICAg
ICAgIERFQlVHX0xPR19FUlJPUigibGluZS5zaXplID09ICVkIiwgKGludCkgbGluZS5zaXplKCkp
OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBSZXNvdXJjZSBu
ZXdSZXNvdXJjZShoYXNoVG9QYXRoKGxpbmVbMF0pKTsKKyAgICAgICAgbV9jYWNoZWRSZXNvdXJj
ZXMuYXBwZW5kKFdURk1vdmUobmV3UmVzb3VyY2UpKTsKKyAgICB9CisKKyAgICBzdGQ6OnNvcnQo
c3RkOjpiZWdpbihtX2NhY2hlZFJlc291cmNlcyksIHN0ZDo6ZW5kKG1fY2FjaGVkUmVzb3VyY2Vz
KSwgW10oYXV0byYgbGVmdCwgYXV0byYgcmlnaHQpIHsKKyAgICAgICAgcmV0dXJuIFdURjo6Y29k
ZVBvaW50Q29tcGFyZUxlc3NUaGFuKGxlZnQudXJsKCkuc3RyaW5nKCksIHJpZ2h0LnVybCgpLnN0
cmluZygpKTsKKyAgICB9KTsKKworICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiBtX2NhY2hlZFJl
c291cmNlcykKKyAgICAgICAgbG9nTG9hZGVkUmVzb3VyY2UocmVzb3VyY2UpOworfQorCitTdHJp
bmcgTWFuYWdlcjo6cmVwb3J0TG9hZFBhdGgoKQoreworICAgIHJldHVybiBXZWJDb3JlOjpwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQobV9yZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uLCBrRmlsZU5h
bWVSZXBvcnRMb2FkKTsKK30KKworU3RyaW5nIE1hbmFnZXI6OnJlcG9ydFJlY29yZFBhdGgoKQor
eworICAgIHJldHVybiBXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9yZWNvcmRS
ZXBsYXlDYWNoZUxvY2F0aW9uLCBrRmlsZU5hbWVSZXBvcnRSZWNvcmQpOworfQorCitTdHJpbmcg
TWFuYWdlcjo6cmVwb3J0UmVwbGF5UGF0aCgpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChtX3JlY29yZFJlcGxheUNhY2hlTG9jYXRpb24sIGtGaWxlTmFt
ZVJlcG9ydFJlcGxheSk7Cit9CisKK1N0cmluZyBNYW5hZ2VyOjpyZXF1ZXN0VG9QYXRoKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICAvLyBUT0RPOiBjb21l
IHVwIHdpdGggYSBtb3JlIGNvbXByZWhlbnNpdmUgaGFzaCB0aGF0IGluY2x1ZGVzIEhUVFAgbWV0
aG9kCisgICAgLy8gYW5kIHBvc3NpYmx5IG90aGVyIHZhbHVlcyAoc3VjaCBhcyBoZWFkZXJzKS4K
KworICAgIGNvbnN0IGF1dG8mIGhhc2ggPSBzdHJpbmdUb0hhc2gocmVxdWVzdC51cmwoKS5zdHJp
bmcoKSk7CisgICAgY29uc3QgYXV0byYgcGF0aCA9IGhhc2hUb1BhdGgoaGFzaCk7CisgICAgcmV0
dXJuIHBhdGg7Cit9CisKK1N0cmluZyBNYW5hZ2VyOjpzdHJpbmdUb0hhc2goY29uc3QgU3RyaW5n
JiBzKQoreworICAgIFdURjo6TUQ1IG1kNTsKKyAgICBpZiAocy5jaGFyYWN0ZXJzOCgpKQorICAg
ICAgICBtZDUuYWRkQnl0ZXMoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHMuY2hhcmFjdGVy
czgoKSksIHMubGVuZ3RoKCkpOworICAgIGVsc2UKKyAgICAgICAgbWQ1LmFkZEJ5dGVzKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHMuY2hhcmFjdGVyczE2KCkpLCAyICogcy5sZW5n
dGgoKSk7CisKKyAgICBXVEY6Ok1ENTo6RGlnZXN0IGRpZ2VzdDsKKyAgICBtZDUuY2hlY2tzdW0o
ZGlnZXN0KTsKKworICAgIHJldHVybiBXVEY6OmJhc2U2NFVSTEVuY29kZSgmZGlnZXN0WzBdLCBX
VEY6Ok1ENTo6aGFzaFNpemUpOworfQorCitTdHJpbmcgTWFuYWdlcjo6aGFzaFRvUGF0aChjb25z
dCBTdHJpbmcmIGhhc2gpCit7CisgICAgYXV0byBoYXNoSGVhZCA9IGhhc2guc3Vic3RyaW5nKDAs
IDIpOworICAgIGF1dG8gaGFzaFRhaWwgPSBoYXNoLnN1YnN0cmluZygyKTsKKworICAgIFN0cmlu
Z0J1aWxkZXIgZmlsZU5hbWU7CisgICAgZmlsZU5hbWUuYXBwZW5kKGhhc2hUYWlsKTsKKyAgICBm
aWxlTmFtZS5hcHBlbmQoIi5kYXRhIik7CisKKyAgICBhdXRvIHBhdGggPSBXZWJDb3JlOjpwYXRo
QnlBcHBlbmRpbmdDb21wb25lbnQobV9yZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uLCBrRGlyTmFt
ZVJlc291cmNlcyk7CisgICAgcGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVu
dChwYXRoLCBoYXNoSGVhZCk7CisgICAgcGF0aCA9IFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChwYXRoLCBmaWxlTmFtZS50b1N0cmluZygpKTsKKworICAgIHJldHVybiBwYXRoOwor
fQorCit2b2lkIE1hbmFnZXI6OmxvZ1JlY29yZGVkUmVzb3VyY2UoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIC8vIExvZyBuZXR3b3JrIHJlc291cmNlcyBh
cyB0aGV5IGFyZSBjYWNoZWQgdG8gZGlzay4KKworICAgIGlmIChlbnN1cmVGaWxlSGFuZGxlKHJl
cG9ydFJlY29yZFBhdGgoKSwgbV9yZWNvcmRGaWxlSGFuZGxlKSkgeworICAgICAgICBjb25zdCBh
dXRvJiB1cmwgPSByZXF1ZXN0LnVybCgpOworICAgICAgICBwcmludFRvRmlsZShtX3JlY29yZEZp
bGVIYW5kbGUsICIlcyAlc1xuIiwgREVCVUdfU1RSKHN0cmluZ1RvSGFzaCh1cmwuc3RyaW5nKCkp
KSwgREVCVUdfU1RSKHVybC5zdHJpbmcoKSkpOworICAgIH0KK30KKwordm9pZCBNYW5hZ2VyOjps
b2dMb2FkZWRSZXNvdXJjZShSZXNvdXJjZSYgcmVzb3VyY2UpCit7CisgICAgLy8gTG9nIGNhY2hl
ZCByZXNvdXJjZXMgYXMgdGhleSBhcmUgbG9hZGVkIGZyb20gZGlzay4KKworICAgIGlmIChlbnN1
cmVGaWxlSGFuZGxlKHJlcG9ydExvYWRQYXRoKCksIG1fbG9hZEZpbGVIYW5kbGUpKQorICAgICAg
ICBwcmludFRvRmlsZShtX2xvYWRGaWxlSGFuZGxlLCAiJXNcbiIsIERFQlVHX1NUUihyZXNvdXJj
ZS51cmwoKS5zdHJpbmcoKSkpOworfQorCit2b2lkIE1hbmFnZXI6OmxvZ1BsYXllZEJhY2tSZXNv
dXJjZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgd2FzQ2Fj
aGVNaXNzKQoreworICAgIC8vIExvZyBuZXR3b3JrIHJlc291cmNlcyB0aGF0IGFyZSByZXF1ZXN0
ZWQgZHVyaW5nIHJlcGxheS4KKworICAgIGNvbnN0IGF1dG8mIHVybCA9IHJlcXVlc3QudXJsKCk7
CisKKyAgICBpZiAod2FzQ2FjaGVNaXNzKQorICAgICAgICBERUJVR19MT0coIkNhY2hlIG1pc3M6
IFVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIodXJsLnN0cmluZygpKSk7CisgICAgZWxzZQor
ICAgICAgICBERUJVR19MT0coIkNhY2hlIGhpdDogIFVSTCA9ICV7cHVibGljfXMiLCBERUJVR19T
VFIodXJsLnN0cmluZygpKSk7CisKKyAgICBpZiAoZW5zdXJlRmlsZUhhbmRsZShyZXBvcnRSZXBs
YXlQYXRoKCksIG1fcmVwbGF5RmlsZUhhbmRsZSkpCisgICAgICAgIHByaW50VG9GaWxlKG1fcmVw
bGF5RmlsZUhhbmRsZSwgIiVzICVzXG4iLCB3YXNDYWNoZU1pc3MgPyAibWlzcyIgOiAiaGl0ICIs
IERFQlVHX1NUUih1cmwuc3RyaW5nKCkpKTsKK30KKworYm9vbCBNYW5hZ2VyOjplbnN1cmVGaWxl
SGFuZGxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIEZpbGVIYW5kbGUmIGZpbGVIYW5kbGUpCit7
CisgICAgaWYgKCFmaWxlSGFuZGxlKQorICAgICAgICBmaWxlSGFuZGxlID0gb3BlbkNhY2hlRmls
ZShmaWxlUGF0aCwgV2ViQ29yZTo6T3BlbkZvcldyaXRlKTsKKyAgICByZXR1cm4gZmlsZUhhbmRs
ZTsKK30KKworRmlsZUhhbmRsZSBNYW5hZ2VyOjpvcGVuQ2FjaGVGaWxlKGNvbnN0IFN0cmluZyYg
ZmlsZVBhdGgsIFdlYkNvcmU6OkZpbGVPcGVuTW9kZSBtb2RlKQoreworICAgIC8vIElmIHdlIGNh
biB0cml2aWFsbHkgb3BlbiB0aGUgZmlsZSwgdGhlbiBkbyB0aGF0IGFuZCByZXR1cm4gdGhlIG5l
dyBmaWxlCisgICAgLy8gaGFuZGxlLgorCisgICAgYXV0byBmaWxlSGFuZGxlID0gRmlsZUhhbmRs
ZTo6b3BlbkZpbGUoZmlsZVBhdGgsIG1vZGUpOworICAgIGlmIChmaWxlSGFuZGxlKQorICAgICAg
ICByZXR1cm4gZmlsZUhhbmRsZTsKKworICAgIC8vIElmIHdlJ3JlIG9wZW5pbmcgdGhlIGZpbGUg
Zm9yIHdyaXRpbmcgKGluY2x1ZGluZyBhcHBlbmRpbmcpLCB0aGVuIHRyeQorICAgIC8vIGFnYWlu
IGFmdGVyIG1ha2luZyBzdXJlIGFsbCBpbnRlcm1lZGlhdGUgZGlyZWN0b3JpZXMgaGF2ZSBiZWVu
IGNyZWF0ZWQuCisKKyAgICBpZiAobW9kZSAhPSBXZWJDb3JlOjpPcGVuRm9yUmVhZCkgeworICAg
ICAgICBjb25zdCBhdXRvJiBwYXJlbnREaXIgPSBXZWJDb3JlOjpkaXJlY3RvcnlOYW1lKGZpbGVQ
YXRoKTsKKyAgICAgICAgaWYgKCFXZWJDb3JlOjptYWtlQWxsRGlyZWN0b3JpZXMocGFyZW50RGly
KSkgeworICAgICAgICAgICAgREVCVUdfTE9HX0VSUk9SKCJFcnJvciAlZCB0cnlpbmcgdG8gY3Jl
YXRlIGludGVybWVkaWF0ZSBkaXJlY3RvcmllczogJXtwdWJsaWN9cyIsIGVycm5vLCBERUJVR19T
VFIocGFyZW50RGlyKSk7CisgICAgICAgICAgICByZXR1cm4gZmlsZUhhbmRsZTsKKyAgICAgICAg
fQorCisgICAgICAgIGZpbGVIYW5kbGUgPSBGaWxlSGFuZGxlOjpvcGVuRmlsZShmaWxlUGF0aCwg
bW9kZSk7CisgICAgICAgIGlmIChmaWxlSGFuZGxlKQorICAgICAgICAgICAgcmV0dXJuIGZpbGVI
YW5kbGU7CisgICAgfQorCisgICAgLy8gQ291bGQgbm90IG9wZW4gdGhlIGZpbGUuIExvZyB0aGUg
ZXJyb3IgYW5kIGxlYXZlLCByZXR1cm5pbmcgdGhlIGludmFsaWQKKyAgICAvLyBmaWxlIGhhbmRs
ZS4KKworICAgIGlmIChtb2RlID09IFdlYkNvcmU6Ok9wZW5Gb3JSZWFkKQorICAgICAgICBERUJV
R19MT0dfRVJST1IoIkVycm9yICVkIHRyeWluZyB0byBvcGVuICV7cHVibGljfXMgZm9yIHJlYWRp
bmciLCBlcnJubywgREVCVUdfU1RSKGZpbGVQYXRoKSk7CisgICAgZWxzZQorICAgICAgICBERUJV
R19MT0dfRVJST1IoIkVycm9yICVkIHRyeWluZyB0byBvcGVuICV7cHVibGljfXMgZm9yIHdyaXRp
bmciLCBlcnJubywgREVCVUdfU1RSKGZpbGVQYXRoKSk7CisKKyAgICByZXR1cm4gZmlsZUhhbmRs
ZTsKK30KKworc3RkOjpvcHRpb25hbDxWZWN0b3I8VmVjdG9yPFN0cmluZz4+PiBNYW5hZ2VyOjpy
ZWFkRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQoreworICAgIGJvb2wgc3VjY2VzcyA9IGZh
bHNlOworICAgIFdlYkNvcmU6Ok1hcHBlZEZpbGVEYXRhIGZpbGUoZmlsZVBhdGgsIHN1Y2Nlc3Mp
OworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4gbGluZXM7CisgICAgYXV0byBiZWdpbiA9IHN0YXRpY19j
YXN0PGNvbnN0IHVpbnQ4X3QqPihmaWxlLmRhdGEoKSk7CisgICAgYXV0byBlbmQgPSBiZWdpbiAr
IGZpbGUuc2l6ZSgpOworCisgICAgVmVjdG9yPFN0cmluZz4gbGluZTsKKyAgICB3aGlsZSAoZ2V0
TGluZShiZWdpbiwgZW5kLCBsaW5lKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKFdURk1vdmUobGlu
ZSkpOworCisgICAgcmV0dXJuIFdURk1vdmUobGluZXMpOworfQorCitib29sIE1hbmFnZXI6Omdl
dExpbmUodWludDhfdCBjb25zdCAqJiBwLCB1aW50OF90IGNvbnN0ICogY29uc3QgZW5kLCBWZWN0
b3I8U3RyaW5nPiYgbGluZSkKK3sKKyAgICAvLyBOQjogUmV0dXJucyB0cnVlIGlmIHRoZXJlIG1h
eSBiZSBtb3JlIGRhdGEgdG8gZ2V0LCBmYWxzZSBpZiB3ZSd2ZSBoaXQKKyAgICAvLyB0aGUgZW5k
IG9mIHRoZSBidWZmZXIuCisKKyAgICBERUJVR19MT0dfVkVSQk9TRSgiR2V0dGluZyBhIGxpbmUi
KTsKKworICAgIGxpbmUuY2xlYXIoKTsKKworICAgIGlmIChwID09IGVuZCkgeworICAgICAgICBE
RUJVR19MT0dfVkVSQk9TRSgiSXRlcmF0b3IgYXQgZW5kOyByZXR1cm5pbmcgZmFsc2UiKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIFN0cmluZyB3b3JkOworICAgIHdoaWxl
IChnZXRXb3JkKHAsIGVuZCwgd29yZCkpIHsKKyAgICAgICAgaWYgKCF3b3JkLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgREVCVUdfTE9HX1ZFUkJPU0UoIkFkZGluZyB3b3JkOiAle3B1YmxpY31z
IiwgREVCVUdfU1RSKHdvcmQpKTsKKyAgICAgICAgICAgIGxpbmUuYXBwZW5kKHdvcmQpOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTWFuYWdlcjo6Z2V0
V29yZCh1aW50OF90IGNvbnN0IComIHAsIHVpbnQ4X3QgY29uc3QgKiBjb25zdCBlbmQsIFN0cmlu
ZyYgd29yZCkKK3sKKyAgICAvLyBOQjogUmV0dXJucyB0cnVlIGlmIGEgKHBvc3NpYmx5IGVtcHR5
KSB3b3JkIHdhcyBmb3VuZCBhbmQgdGhlcmUgbWF5IGJlCisgICAgLy8gbW9yZSwgZmFsc2UgaWYg
d2UndmUgaGl0IHRoZSBlbmQgb2YgbGluZSBvciBidWZmZXIuCisKKyAgICBERUJVR19MT0dfVkVS
Qk9TRSgiR2V0dGluZyBhIHdvcmQiKTsKKworICAgIGlmIChwID09IGVuZCkgeworICAgICAgICBE
RUJVR19MT0dfVkVSQk9TRSgiSXRlcmF0b3IgYXQgZW5kOyByZXR1cm5pbmcgZmFsc2UiKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICgqcCA9PSAnXG4nKSB7CisgICAg
ICAgIERFQlVHX0xPR19WRVJCT1NFKCJJdGVyYXRvciBoaXQgRU9MOyByZXR1cm5pbmcgZmFsc2Ui
KTsKKyAgICAgICAgKytwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9v
bCBlc2NhcGluZyA9IGZhbHNlOworICAgIGJvb2wgaWdub3JpbmcgPSBmYWxzZTsKKworICAgIHdv
cmQgPSBTdHJpbmcoKTsKKworICAgIERFQlVHX0xPR19WRVJCT1NFKCJJdGVyYXRpbmciKTsKKwor
ICAgIGZvciAoIDsgcCAhPSBlbmQ7ICsrcCkgeworICAgICAgICBpZiAoaWdub3JpbmcpIHsKKyAg
ICAgICAgICAgIGlmICgqcCA9PSAnXG4nKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9IGVsc2UgaWYgKGVzY2FwaW5nKSB7CisgICAgICAgICAgICB3b3JkLmFwcGVuZCgqcCk7Cisg
ICAgICAgICAgICBlc2NhcGluZyA9IGZhbHNlOworICAgICAgICB9IGVsc2UgaWYgKCpwID09ICcj
JykgeworICAgICAgICAgICAgaWdub3JpbmcgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKCpw
ID09ICdcXCcpIHsKKyAgICAgICAgICAgIGVzY2FwaW5nID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNl
IGlmICgqcCA9PSAnICcpIHsKKyAgICAgICAgICAgIGlmICghd29yZC5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSBpZiAoKnAgPT0gJ1xuJykKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBlbHNlCisgICAgICAgICAgICB3b3JkLmFwcGVuZCgqcCk7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTWFuYWdlcjo6cHJpbnRUb0Zp
bGUoY29uc3QgRmlsZUhhbmRsZSYgZmlsZUhhbmRsZSwgY29uc3QgY2hhciogZm9ybWF0LCAuLi4p
Cit7CisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7CisKKyAg
ICBjaGFyKiBidWZmZXIgPSBudWxscHRyOworICAgIHZhc3ByaW50ZigmYnVmZmVyLCBmb3JtYXQs
IGFyZ3MpOworICAgIGF1dG8gd3JpdGVSZXN1bHQgPSBmaWxlSGFuZGxlLndyaXRlVG9GaWxlKGJ1
ZmZlciwgc3RybGVuKGJ1ZmZlcikpOworICAgIGZyZWUoYnVmZmVyKTsKKworICAgIHZhX2VuZChh
cmdzKTsKKworICAgIHJldHVybiB3cml0ZVJlc3VsdCA+PSAwOworfQorCit9IC8vIG5hbWVzcGFj
ZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MjY5YWUyNGVkOWFlNDZhMWFhMzdjODY5MDNhN2NkMzJkZWFkOWU4OAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVN
YW5hZ2VyLmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZVR5
cGVzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9VUkxQYXJzZXIuaD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFJlc291cmNl
UmVxdWVzdDsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29ya0NhcHR1
cmUgeworCitjbGFzcyBSZXNvdXJjZTsKKworLyoKKyAqIE5ldHdvcmtDYXB0dXJlOjpNYW5hZ2Vy
IHNlcnZlcyB0aHJlZSBwdXJwb3NlczoKKyAqCisgKiAgKiBJdCBrZWVwcyB0aGUgc3RhdGUgb2Yg
d2hldGhlciB3ZSBhcmUgcmVjb3JkaW5nLCByZXBsYXlpbmcsIG9yIG5laXRoZXIuCisgKiAgKiBJ
dCBrZWVwcyB0aGUgbGlzdCBvZiBjYWNoZWQgcmVzb3VyY2VzIChpZiByZXBsYXlpbmcpLCBwZXJm
b3JtcyBmdXp6eQorICogICAgbWF0Y2hpbmcgb24gdGhlbS4KKyAqICAqIEl0IGhhcyB1dGlsaXRp
ZXMgZm9yIGxvZ2dpbmcgYW5kIGZpbGUgbWFuYWdlbWVudC4KKyAqCisgKiBUT0RPOiBQZXJoYXBz
IHdlIHNob3VsZCBicmVhayB0aGlzIHVwIGludG8gdGhyZWUgY2xhc3Nlcz8KKyAqLworY2xhc3Mg
TWFuYWdlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWFuYWdlcik7CisgICAgZnJpZW5k
IGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8TWFuYWdlcj47CisKK3B1YmxpYzoKKyAgICBlbnVt
IFJlY29yZFJlcGxheU1vZGUgeworICAgICAgICBEaXNhYmxlZCwKKyAgICAgICAgUmVjb3JkLAor
ICAgICAgICBSZXBsYXkKKyAgICB9OworCisgICAgc3RhdGljIE1hbmFnZXImIHNpbmdsZXRvbigp
OworCisgICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IFN0cmluZyYgcmVjb3JkUmVwbGF5TW9kZSwg
Y29uc3QgU3RyaW5nJiByZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uKTsKKyAgICB2b2lkIHRlcm1p
bmF0ZSgpOworCisgICAgYm9vbCBpc1JlY29yZGluZygpIGNvbnN0IHsgcmV0dXJuIG1vZGUoKSA9
PSBSZWNvcmRSZXBsYXlNb2RlOjpSZWNvcmQ7IH0KKyAgICBib29sIGlzUmVwbGF5aW5nKCkgY29u
c3QgeyByZXR1cm4gbW9kZSgpID09IFJlY29yZFJlcGxheU1vZGU6OlJlcGxheTsgfQorICAgIFJl
Y29yZFJlcGxheU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjb3JkUmVwbGF5TW9kZTsg
fQorCisgICAgUmVzb3VyY2UqIGZpbmRNYXRjaChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmKTsKKworICAgIHZvaWQgbG9nUmVjb3JkZWRSZXNvdXJjZShjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIGxvZ0xvYWRlZFJlc291cmNlKFJlc291cmNlJik7Cisg
ICAgdm9pZCBsb2dQbGF5ZWRCYWNrUmVzb3VyY2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiwgYm9vbCB3YXNDYWNoZU1pc3MpOworCisgICAgRmlsZUhhbmRsZSBvcGVuQ2FjaGVGaWxl
KGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkZpbGVPcGVuTW9kZSk7CisKKyAgICBTdHJpbmcgcmVx
dWVzdFRvUGF0aChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKworcHJpdmF0ZToK
KyAgICBNYW5hZ2VyKCkgPSBkZWZhdWx0OworICAgIH5NYW5hZ2VyKCkgPSBkZWxldGU7CisKKyAg
ICBSZXNvdXJjZSogZmluZEV4YWN0TWF0Y2goY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
Jik7CisgICAgUmVzb3VyY2UqIGZpbmRCZXN0RnV6enlNYXRjaChjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmKTsKKyAgICBpbnQgZnV6enlNYXRjaFVSTHMoY29uc3QgV2ViQ29yZTo6VVJM
JiByZXF1ZXN0VVJMLCBjb25zdCBXZWJDb3JlOjpVUkxQYXJzZXI6OlVSTEVuY29kZWRGb3JtJiBy
ZXF1ZXN0UGFyYW1ldGVycywgY29uc3QgV2ViQ29yZTo6VVJMJiByZXNvdXJjZVVSTCwgY29uc3Qg
V2ViQ29yZTo6VVJMUGFyc2VyOjpVUkxFbmNvZGVkRm9ybSYgcmVzb3VyY2VQYXJhbWV0ZXJzKTsK
KworICAgIHZvaWQgbG9hZFJlc291cmNlcygpOworCisgICAgU3RyaW5nIHJlcG9ydExvYWRQYXRo
KCk7CisgICAgU3RyaW5nIHJlcG9ydFJlY29yZFBhdGgoKTsKKyAgICBTdHJpbmcgcmVwb3J0UmVw
bGF5UGF0aCgpOworCisgICAgU3RyaW5nIHN0cmluZ1RvSGFzaChjb25zdCBTdHJpbmcmKTsKKyAg
ICBTdHJpbmcgaGFzaFRvUGF0aChjb25zdCBTdHJpbmcmIGhhc2gpOworCisgICAgYm9vbCBlbnN1
cmVGaWxlSGFuZGxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgsIEZpbGVIYW5kbGUmKTsKKworICAg
IHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFZlY3RvcjxTdHJpbmc+Pj4gcmVhZEZpbGUoY29uc3QgU3Ry
aW5nJiBmaWxlUGF0aCk7CisgICAgYm9vbCBnZXRMaW5lKHVpbnQ4X3QgY29uc3QgKiYgcCwgdWlu
dDhfdCBjb25zdCAqIGNvbnN0IGVuZCwgVmVjdG9yPFN0cmluZz4mIGxpbmUpOworICAgIGJvb2wg
Z2V0V29yZCh1aW50OF90IGNvbnN0IComIHAsIHVpbnQ4X3QgY29uc3QgKiBjb25zdCBlbmQsIFN0
cmluZyYgd29yZCk7CisgICAgYm9vbCBwcmludFRvRmlsZShjb25zdCBGaWxlSGFuZGxlJiwgY29u
c3QgY2hhciogZm9ybWF0LCAuLi4pOworCisgICAgUmVjb3JkUmVwbGF5TW9kZSBtX3JlY29yZFJl
cGxheU1vZGUgeyBEaXNhYmxlZCB9OworICAgIFN0cmluZyBtX3JlY29yZFJlcGxheUNhY2hlTG9j
YXRpb247CisKKyAgICBGaWxlSGFuZGxlIG1fbG9hZEZpbGVIYW5kbGU7CisgICAgRmlsZUhhbmRs
ZSBtX3JlcGxheUZpbGVIYW5kbGU7CisgICAgRmlsZUhhbmRsZSBtX3JlY29yZEZpbGVIYW5kbGU7
CisKKyAgICBWZWN0b3I8UmVzb3VyY2U+IG1fY2FjaGVkUmVzb3VyY2VzOworfTsKKworfSAvLyBu
YW1lc3BhY2UgTmV0d29ya0NhcHR1cmUKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZWNvcmRlci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVjb3JkZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmI2YzFjNTJhOTAwMzBkYzg3N2ZiYzgxMzkyMmM1MTJjMGM0YTk0MDMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05l
dHdvcmtDYXB0dXJlUmVjb3JkZXIuY3BwCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlUmVjb3JkZXIuaCIK
KworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVy
ZUxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1
ZmZlci5oPgorCisjZGVmaW5lIERFQlVHX0NMQVNTIE1hbmFnZXIKKworbmFtZXNwYWNlIFdlYktp
dCB7CituYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgeworCit2b2lkIFJlY29yZGVyOjpyZWNvcmRS
ZXF1ZXN0U2VudChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7Cisg
ICAgLy8gVGhpcyBjbGFzcyByZWNvcmRzIE5ldHdvcmtMb2FkJ3MgcHJvY2VzcyBvZiBsb2FkaW5n
IGEgbmV0d29yayByZXNvdXJjZS4KKyAgICAvLyBOZXR3b3JrTG9hZCBkb2VzIHRoaXMgYnkgY3Jl
YXRpbmcgYSBOZXR3b3JrRGF0YVRhc2sgYW5kIGNhbGxpbmcgcmVzdW1lCisgICAgLy8gb24gaXQu
IFRoaXMgY2FsbCB0byByZXN1bWUgY2FuIGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUg
dGFzayBoYXMKKyAgICAvLyBiZWVuIGNyZWF0ZWQsIG9yIC0tIGlmIHRoZSBsb2FkaW5nIGlzIG1h
cmtlZCBhcyBkZWZlcnJlZCAtLSBpdCBjYW4gYmUKKyAgICAvLyBjYWxsZWQgbGF0ZXIgaW4gTmV0
d29ya0xvYWQ6OnNldERlZmVycmVkKHRydWUpLiBJbiBmYWN0LCB0aGUgbGF0dGVyIGNhbgorICAg
IC8vIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBpZiB0aGUgbG9hZGluZyBpcyBzdXNwZW5kZWQg
YW5kIHJlc3VtZWQKKyAgICAvLyBtdWx0aXBsZSB0aW1lcy4KKyAgICAvLworICAgIC8vIFRoaXMg
bWV0aG9kIGlzIGNhbGxlZCBpbiBib3RoIHBsYWNlcyB3aGVyZSByZXN1bWUgaXMgY2FsbGVkLiBP
dXIgdGFzayBpcworICAgIC8vIHRvIGNhdGNoIHRoZSBjYWxsIHRvIE5ldHdvcmtEYXRhVGFzazo6
cmVzdW1lIHRoYXQgc3RhcnRzIHRoZSBuZXR3b3JrCisgICAgLy8gbG9hZGluZyBwcm9jZXNzLiBX
ZSB3YW50IHRvIGlnbm9yZSB0aGUgb3RoZXIgY2FsbHMgdG8gcmVzdW1lLiBPdXIKKyAgICAvLyBh
cHByb2FjaCB0byBrbm93aW5nIHdoaWNoIG9uZSBpcyB0aGUgZmlyc3QgaXMgdG8gY2hlY2sgb3Vy
IGNvbGxlY3Rpb24gb2YKKyAgICAvLyByZWNvcmRlZCBldmVudHMuIElmIGl0IGlzIGVtcHR5LCB0
aGVuIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgaW50byB0aGUKKyAgICAvLyByZWNvcmRlciwgYW5k
IHdlIHdhbnQgdG8gcmVjb3JkIHRoZSBldmVudC4gT3RoZXJ3aXNlLCBpZ25vcmUgaXQuCisKKyAg
ICBpZiAobV9ldmVudHMuc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBERUJVR19MT0co
IlNlbnQgcmVxdWVzdCBmb3IgVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihyZXF1ZXN0LnVy
bCgpLnN0cmluZygpKSk7CisKKyAgICBtX2luaXRpYWxSZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICBy
ZWNvcmRFdmVudChSZXF1ZXN0U2VudEV2ZW50KHJlcXVlc3QpKTsKK30KKwordm9pZCBSZWNvcmRl
cjo6cmVjb3JkUmVzcG9uc2VSZWNlaXZlZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkKK3sKKyAgICAvLyBDYWxsZWQgd2hlbiByZWNlaXZpbmcgYSByZXNwb25zZSBv
dGhlciB0aGFuIGEgcmVkaXJlY3Qgb3IgZXJyb3IuCisKKyAgICBERUJVR19MT0coIlJlY2VpdmVk
IHJlc3BvbnNlIGZyb20gVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihyZXNwb25zZS51cmwo
KS5zdHJpbmcoKSkpOworICAgIEFTU0VSVChtX2V2ZW50cy5zaXplKCkpOworCisgICAgLy8gVE9E
TzogSXMgdGhlcmUgYSBiZXR0ZXIgcmVzcG9uc2UgdG8gcmVjZWl2aW5nIGEgbXVsdGktcGFydCBy
ZXNvdXJjZT8KKyAgICAvLyBMZWFybiBtb3JlIGFib3V0IG11bHRpLXBhcnQgcmVzb3VyY2VzLiBX
aHkgZG9uJ3Qgd2UgcmVjb3JkIHRoZXNlPyAoTm90ZSwKKyAgICAvLyB0aGlzIGRlY2lzaW9uIGlz
IGJhc2VkIG9uIHNvbWUgTmV0d29ya0NhY2hlIGNvZGUuKQorCisgICAgaWYgKCFyZXNwb25zZS5p
c011bHRpcGFydCgpKQorICAgICAgICByZWNvcmRFdmVudChSZXNwb25zZVJlY2VpdmVkRXZlbnQo
cmVzcG9uc2UpKTsKKyAgICBlbHNlCisgICAgICAgIG1fZXZlbnRzLmNsZWFyKCk7Cit9CisKK3Zv
aWQgUmVjb3JkZXI6OnJlY29yZFJlZGlyZWN0UmVjZWl2ZWQoY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSkKK3sKKyAgICBERUJVR19MT0coIlJlY2VpdmVkIHJlZGlyZWN0IHRvIFVSTCA9ICV7cHVi
bGljfXMiLCBERUJVR19TVFIocmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworICAgIEFTU0VSVCht
X2V2ZW50cy5zaXplKCkpOworCisgICAgcmVjb3JkRXZlbnQoUmVkaXJlY3RSZWNlaXZlZEV2ZW50
KHJlcXVlc3QsIHJlc3BvbnNlKSk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OnJlY29yZFJlZGlyZWN0
U2VudChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgREVC
VUdfTE9HKCJTZW50IHJlZGlyZWN0IGZvciBVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RSKHJl
cXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKKyAgICBBU1NFUlQobV9ldmVudHMuc2l6ZSgpKTsKKwor
ICAgIHJlY29yZEV2ZW50KFJlZGlyZWN0U2VudEV2ZW50KHJlcXVlc3QpKTsKK30KKwordm9pZCBS
ZWNvcmRlcjo6cmVjb3JkRGF0YVJlY2VpdmVkKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciYgYnVmZmVy
KQoreworICAgIERFQlVHX0xPRygiUmVjZWl2ZWQgJXUgYnl0ZXMgb2YgZGF0YSIsIGJ1ZmZlci5z
aXplKCkpOworCisgICAgaWYgKCFtX2V2ZW50cy5zaXplKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIFByZXZlbnQgbWVtb3J5IGdyb3d0aCBpbiBjYXNlIG9mIHN0cmVhbWluZyBkYXRhLiBU
T0RPOiBJcyB0aGVyZSBhIGJldHRlcgorICAgIC8vIHJlc3BvbnNlIHRvIHRoaXM/IElmIHdlIGVu
Y291bnRlciB0aGlzIGNvbmRpdGlvbiwgYWxsIG9mIG91ciByZWNvcmRpbmcKKyAgICAvLyBzaWxl
bnRseSBnb2VzIG91dCB0aGUgd2luZG93LiBSZXBsYXkgd2lsbCBub3Qgd29yaywgYW5kIHRoZSB1
c2VyIGRvZXNuJ3QKKyAgICAvLyBrbm93IHRoYXQuCisKKyAgICBjb25zdGV4cHIgc2l6ZV90IGtN
YXhpbXVtQ2FjaGVCdWZmZXJTaXplID0gMTAgKiAxMDI0ICogMTAyNDsKKyAgICBtX2RhdGFMZW5n
dGggKz0gYnVmZmVyLnNpemUoKTsKKyAgICBpZiAobV9kYXRhTGVuZ3RoIDw9IGtNYXhpbXVtQ2Fj
aGVCdWZmZXJTaXplKQorICAgICAgICByZWNvcmRFdmVudChEYXRhUmVjZWl2ZWRFdmVudChidWZm
ZXIpKTsKKyAgICBlbHNlCisgICAgICAgIG1fZXZlbnRzLmNsZWFyKCk7Cit9CisKK3ZvaWQgUmVj
b3JkZXI6OnJlY29yZEZpbmlzaChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvcikK
K3sKKyAgICBERUJVR19MT0coIkZpbmlzaGVkIik7CisKKyAgICBpZiAoIW1fZXZlbnRzLnNpemUo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVjb3JkRXZlbnQoRmluaXNoZWRFdmVudChlcnJv
cikpOworICAgIHdyaXRlRXZlbnRzKCk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OndyaXRlRXZlbnRz
KCkKK3sKKyAgICBhdXRvIHBhdGggPSBNYW5hZ2VyOjpzaW5nbGV0b24oKS5yZXF1ZXN0VG9QYXRo
KG1faW5pdGlhbFJlcXVlc3QpOworICAgIGF1dG8gaGFuZGxlID0gTWFuYWdlcjo6c2luZ2xldG9u
KCkub3BlbkNhY2hlRmlsZShwYXRoLCBXZWJDb3JlOjpPcGVuRm9yV3JpdGUpOworICAgIGlmICgh
aGFuZGxlKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1dG8gY29uc3QmIGV2ZW50IDog
bV9ldmVudHMpIHsKKyAgICAgICAgYXV0byBhc1N0cmluZyA9IGV2ZW50VG9TdHJpbmcoZXZlbnQp
OworICAgICAgICAvLyBXcml0ZSBvdXQgdGhlIEpTT04gc3RyaW5nIHdpdGggdGhlIHRlcm1pbmF0
aW5nIE5VTC4gVGhpcyBhbGxvd3MgdXMKKyAgICAgICAgLy8gdG8gYmV0dGVyIGZpbmQgdGhlIHNl
cGFyYXRlIEpTT04gb2JqZWN0cyB0aGF0IHdlIHdyaXRlIHRvIGEgc2luZ2xlCisgICAgICAgIC8v
IGZpbGUuIEl0IGFsc28gd29ya3MgYmV0dGVyIHdpdGggSlNPTiBwYXJzZXJzIHRoYXQgZXhwZWN0
IHRvIGZpbmQgYQorICAgICAgICAvLyBOVUwgYXQgdGhlIGVuZCBvZiB0aGVpciBpbnB1dC4KKyAg
ICAgICAgaWYgKGhhbmRsZS53cml0ZVRvRmlsZShhc1N0cmluZy5jX3N0cigpLCBhc1N0cmluZy5z
aXplKCkgKyAxKSA9PSAtMSkgeworICAgICAgICAgICAgREVCVUdfTE9HX0VSUk9SKCJFcnJvciB0
cnlpbmcgdG8gd3JpdGUgdG8gZmlsZSBmb3IgVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUiht
X2luaXRpYWxSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBNYW5hZ2VyOjpzaW5nbGV0b24oKS5sb2dSZWNvcmRlZFJl
c291cmNlKG1faW5pdGlhbFJlcXVlc3QpOworfQorCit9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2Fw
dHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19D
QVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVy
ZS9OZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVjb3JkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZmQ1MzEzMDA4
YzdjMzM3NjA0M2RhYjM1NDYwNzlkMTZhOWY4NTVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmgK
QEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KE5FVFdPUktfQ0FQVFVSRSkKKworI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlRXZlbnQuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CitjbGFzcyBSZXNvdXJjZUVycm9yOworY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKK2NsYXNzIFNo
YXJlZEJ1ZmZlcjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1lc3BhY2UgTmV0d29ya0Nh
cHR1cmUgeworCitjbGFzcyBSZWNvcmRlciB7CitwdWJsaWM6CisgICAgdm9pZCByZWNvcmRSZXF1
ZXN0U2VudChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2b2lkIHJlY29y
ZFJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOworICAg
IHZvaWQgcmVjb3JkUmVkaXJlY3RSZWNlaXZlZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdm9pZCByZWNvcmRS
ZWRpcmVjdFNlbnQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgdm9pZCBy
ZWNvcmREYXRhUmVjZWl2ZWQoV2ViQ29yZTo6U2hhcmVkQnVmZmVyJik7CisgICAgdm9pZCByZWNv
cmRGaW5pc2goY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOworCitwcml2YXRlOgorICAg
IHZvaWQgd3JpdGVFdmVudHMoKTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHZv
aWQgcmVjb3JkRXZlbnQoVCYmIGV2ZW50KQorICAgIHsKKyAgICAgICAgbV9ldmVudHMuYXBwZW5k
KENhcHR1cmVFdmVudChXVEZNb3ZlKGV2ZW50KSkpOworICAgIH0KKworICAgIENhcHR1cmVFdmVu
dHMgbV9ldmVudHM7CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1faW5pdGlhbFJlcXVl
c3Q7CisgICAgc2l6ZV90IG1fZGF0YUxlbmd0aCB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNl
IE5ldHdvcmtDYXB0dXJlCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShORVRXT1JLX0NBUFRVUkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hMDRhZjY5YzdkM2EzODhkNGYzY2E2ODBmODE1ZWQ4ZGVlYzZkNDc4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2Fw
dHVyZVJlcGxheWVyLmNwcApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuaCIKKworI2lmIEVO
QUJMRShORVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZUxvZ2dpbmcu
aCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJOZXR3b3Jr
RGF0YVRhc2tSZXBsYXkuaCIKKyNpbmNsdWRlICJOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCIKKwor
I2RlZmluZSBERUJVR19DTEFTUyBSZXBsYXllcgorCituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVz
cGFjZSBOZXR3b3JrQ2FwdHVyZSB7CisKK1JlZjxOZXR3b3JrRGF0YVRhc2s+IFJlcGxheWVyOjpy
ZXBsYXlSZXNvdXJjZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNrQ2xp
ZW50JiBjbGllbnQsIGNvbnN0IE5ldHdvcmtMb2FkUGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3sK
KyAgICBhdXRvIGZvdW5kUmVzb3VyY2UgPSBNYW5hZ2VyOjpzaW5nbGV0b24oKS5maW5kTWF0Y2go
cGFyYW1ldGVycy5yZXF1ZXN0KTsKKyAgICBNYW5hZ2VyOjpzaW5nbGV0b24oKS5sb2dQbGF5ZWRC
YWNrUmVzb3VyY2UocGFyYW1ldGVycy5yZXF1ZXN0LCAhZm91bmRSZXNvdXJjZSk7CisgICAgcmV0
dXJuIE5ldHdvcmtEYXRhVGFza1JlcGxheTo6Y3JlYXRlKHNlc3Npb24sIGNsaWVudCwgcGFyYW1l
dGVycywgZm91bmRSZXNvdXJjZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJl
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBUFRV
UkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05l
dHdvcmtDYXB0dXJlUmVwbGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2Nh
cHR1cmUvTmV0d29ya0NhcHR1cmVSZXBsYXllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA4N2VjNTA2MGFkNjRk
MGZjNzE3Yjg3MjYzNzI1MTJjOWQ5ODkwYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuaApAQCAt
MCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTkVU
V09SS19DQVBUVVJFKQorCisjaW5jbHVkZSA8d3RmL1JlZi5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKK2NsYXNzIE5ldHdvcmtEYXRhVGFzazsKK2NsYXNzIE5ldHdvcmtEYXRhVGFza0NsaWVudDsK
K2NsYXNzIE5ldHdvcmtMb2FkUGFyYW1ldGVyczsKK2NsYXNzIE5ldHdvcmtTZXNzaW9uOworfQor
CituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZSB7CisKK2NsYXNz
IFJlcGxheWVyIHsKK3B1YmxpYzoKKyAgICBSZWY8TmV0d29ya0RhdGFUYXNrPiByZXBsYXlSZXNv
dXJjZShOZXR3b3JrU2Vzc2lvbiYsIE5ldHdvcmtEYXRhVGFza0NsaWVudCYsIGNvbnN0IE5ldHdv
cmtMb2FkUGFyYW1ldGVycyYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FQVFVS
RSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0
d29ya0NhcHR1cmVSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU2MjA3ZDk0ZTY2
NzEzZGEyN2ViYjBkYTQ2ZWFhMDhkYWI2ZWVmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3Bw
CkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIk5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaCIKKworI2lmIEVOQUJMRShORVRXT1JLX0NB
UFRVUkUpCisKKyNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZUV2ZW50LmgiCisjaW5jbHVkZSAiTmV0
d29ya0NhcHR1cmVMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVSZWNvcmRlci5o
IgorCituYW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZSB7CisKK1Jl
c291cmNlOjpSZXNvdXJjZShjb25zdCBTdHJpbmcmIGV2ZW50RmlsZVBhdGgpCisgICAgOiBtX2V2
ZW50RmlsZVBhdGgoZXZlbnRGaWxlUGF0aCkKK3sKK30KKworY29uc3QgV2ViQ29yZTo6VVJMJiBS
ZXNvdXJjZTo6dXJsKCkKK3sKKyAgICBpZiAoIW1fdXJsKSB7CisgICAgICAgIGF1dG8gZXZlbnRz
ID0gZXZlbnRTdHJlYW0oKTsKKyAgICAgICAgYXV0byBldmVudCA9IGV2ZW50cy5uZXh0RXZlbnQo
KTsKKyAgICAgICAgaWYgKCFldmVudCkKKyAgICAgICAgICAgIERFQlVHX0xPR19FUlJPUigiRXZl
bnQgc3RyZWFtIGRvZXMgbm90IGNvbnRhaW4gZXZlbnRzOiBmaWxlID0gJXtwdWJsaWN9cyIsIERF
QlVHX1NUUihtX2V2ZW50RmlsZVBhdGgpKTsKKyAgICAgICAgZWxzZSBpZiAoIVdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8UmVxdWVzdFNlbnRFdmVudD4oKmV2ZW50KSkKKyAgICAgICAgICAgIERFQlVH
X0xPR19FUlJPUigiRXZlbnQgc3RyZWFtIGRvZXMgbm90IGhhdmUgYSByZXF1ZXN0U2VudCBldmVu
dDogZmlsZSA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9ldmVudEZpbGVQYXRoKSk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgYXV0byByZXF1ZXN0U2VudEV2ZW50ID0gV1RGOjpnZXQ8
UmVxdWVzdFNlbnRFdmVudD4oKmV2ZW50KTsKKyAgICAgICAgICAgIFdlYkNvcmU6OlVSTFBhcnNl
ciBwYXJzZXIocmVxdWVzdFNlbnRFdmVudC5yZXF1ZXN0LnVybCk7CisgICAgICAgICAgICBtX3Vy
bCA9IHBhcnNlci5yZXN1bHQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAqbV91
cmw7Cit9CisKK2NvbnN0IFdlYkNvcmU6OlVSTCYgUmVzb3VyY2U6OmJhc2VVUkwoKQoreworICAg
IGlmICghbV9iYXNlVVJMKSB7CisgICAgICAgIGF1dG8gcGF0aFN0YXJ0ID0gdXJsKCkucGF0aFN0
YXJ0KCk7CisgICAgICAgIGF1dG8gYmFzZVVSTFN0ciA9IHVybCgpLnN0cmluZygpLmxlZnQocGF0
aFN0YXJ0KTsKKyAgICAgICAgV2ViQ29yZTo6VVJMUGFyc2VyIHBhcnNlcihiYXNlVVJMU3RyKTsK
KyAgICAgICAgbV9iYXNlVVJMID0gcGFyc2VyLnJlc3VsdCgpOworICAgIH0KKworICAgIHJldHVy
biAqbV9iYXNlVVJMOworfQorCitXZWJDb3JlOjpVUkxQYXJzZXI6OlVSTEVuY29kZWRGb3JtIFJl
c291cmNlOjpxdWVyeVBhcmFtZXRlcnMoKQoreworICAgIGlmICghbV9xdWVyeVBhcmFtZXRlcnMp
CisgICAgICAgIG1fcXVlcnlQYXJhbWV0ZXJzID0gV2ViQ29yZTo6VVJMUGFyc2VyOjpwYXJzZVVS
TEVuY29kZWRGb3JtKHVybCgpLnF1ZXJ5KCkpOworCisgICAgcmV0dXJuICptX3F1ZXJ5UGFyYW1l
dGVyczsKK30KKworUmVzb3VyY2U6OkV2ZW50U3RyZWFtIFJlc291cmNlOjpldmVudFN0cmVhbSgp
Cit7CisgICAgcmV0dXJuIEV2ZW50U3RyZWFtKG1fZXZlbnRGaWxlUGF0aCk7Cit9CisKK1Jlc291
cmNlOjpFdmVudFN0cmVhbTo6RXZlbnRTdHJlYW0oY29uc3QgU3RyaW5nJiBldmVudEZpbGVQYXRo
KQorICAgIDogbV9ldmVudEZpbGVQYXRoKGV2ZW50RmlsZVBhdGgpCisgICAgLCBtX21hcHBlZEV2
ZW50RmlsZShtX2V2ZW50RmlsZVBhdGgsIG1faGF2ZU1hcHBlZEV2ZW50RmlsZSkKK3sKK30KKwor
T3B0aW9uYWxDYXB0dXJlRXZlbnQgUmVzb3VyY2U6OkV2ZW50U3RyZWFtOjpuZXh0RXZlbnQoKQor
eworICAgIGlmIChtX29mZnNldCA9PSBtX21hcHBlZEV2ZW50RmlsZS5zaXplKCkpIHsKKyAgICAg
ICAgREVCVUdfTE9HX0VSUk9SKCJVbmFibGUgdG8gcmV0dXJuIGV2ZW50IC0gYXQgZW5kIG9mIGZp
bGU6ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9ldmVudEZpbGVQYXRoKSk7CisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgY29uc3QgY2hhciogY2hhckJ1ZmZlciA9
IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihtX21hcHBlZEV2ZW50RmlsZS5kYXRhKCkpOworICAg
IGNvbnN0IGNoYXIqIGN1cnJlbnQgPSBjaGFyQnVmZmVyICsgbV9vZmZzZXQ7CisKKyAgICB3aGls
ZSAobV9vZmZzZXQgPCBtX21hcHBlZEV2ZW50RmlsZS5zaXplKCkgJiYgY2hhckJ1ZmZlclttX29m
ZnNldF0pCisgICAgICAgICsrbV9vZmZzZXQ7CisKKyAgICBpZiAobV9vZmZzZXQgPT0gbV9tYXBw
ZWRFdmVudEZpbGUuc2l6ZSgpKSB7CisgICAgICAgIERFQlVHX0xPR19FUlJPUigiVW5hYmxlIHRv
IHJldHVybiBldmVudCAtIG5vIHRlcm1pbmF0aW5nIE5VTDogJXtwdWJsaWN9cyIsIERFQlVHX1NU
UihtX2V2ZW50RmlsZVBhdGgpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9
CisKKyAgICArK21fb2Zmc2V0OworCisgICAgcmV0dXJuIHN0cmluZ1RvRXZlbnQoY3VycmVudCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2Uu
aCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVS
ZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5Y2Q2MjBlNWI1ZmVkZmFjZDE4YTUzYjZmOGMzNmNiNDlk
NmUxOWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaApAQCAtMCwwICsxLDczIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQorCisjaW5j
bHVkZSAiTmV0d29ya0NhcHR1cmVFdmVudC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3Rl
bS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9VUkxQYXJz
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Citu
YW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgeworCitjbGFzcyBSZXNvdXJjZSB7CitwdWJsaWM6Cisg
ICAgY2xhc3MgRXZlbnRTdHJlYW0geworICAgIHB1YmxpYzoKKyAgICAgICAgRXZlbnRTdHJlYW0o
KSA9IGRlZmF1bHQ7CisgICAgICAgIEV2ZW50U3RyZWFtKGNvbnN0IFN0cmluZyYgZXZlbnRGaWxl
UGF0aCk7CisKKyAgICAgICAgT3B0aW9uYWxDYXB0dXJlRXZlbnQgbmV4dEV2ZW50KCk7CisKKyAg
ICBwcml2YXRlOgorICAgICAgICBTdHJpbmcgbV9ldmVudEZpbGVQYXRoOworICAgICAgICBib29s
IG1faGF2ZU1hcHBlZEV2ZW50RmlsZSB7IGZhbHNlIH07CisgICAgICAgIFdlYkNvcmU6Ok1hcHBl
ZEZpbGVEYXRhIG1fbWFwcGVkRXZlbnRGaWxlOworICAgICAgICBzaXplX3QgbV9vZmZzZXQgeyAw
IH07CisgICAgfTsKKworcHVibGljOgorICAgIFJlc291cmNlKGNvbnN0IFN0cmluZyYgZXZlbnRG
aWxlUGF0aCk7CisKKyAgICBjb25zdCBXZWJDb3JlOjpVUkwmIHVybCgpOworICAgIGNvbnN0IFdl
YkNvcmU6OlVSTCYgYmFzZVVSTCgpOworICAgIFdlYkNvcmU6OlVSTFBhcnNlcjo6VVJMRW5jb2Rl
ZEZvcm0gcXVlcnlQYXJhbWV0ZXJzKCk7CisgICAgRXZlbnRTdHJlYW0gZXZlbnRTdHJlYW0oKTsK
KworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9ldmVudEZpbGVQYXRoOworICAgIHN0ZDo6b3B0aW9u
YWw8V2ViQ29yZTo6VVJMPiBtX3VybDsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlVSTD4g
bV9iYXNlVVJMOworICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6VVJMUGFyc2VyOjpVUkxFbmNv
ZGVkRm9ybT4gbV9xdWVyeVBhcmFtZXRlcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBOZXR3b3Jr
Q2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09S
S19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fw
dHVyZS9OZXR3b3JrQ2FwdHVyZVR5cGVzLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlVHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOTZjMTY0NWRlNTc0
YWY3ZTZiOGFhMWJhZTk3MTQ5MDljOGEwMjFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVR5cGVzLmgKQEAgLTAs
MCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKE5FVFdP
UktfQ0FQVFVSRSkKKworI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKK25hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZSB7CisKK2NsYXNzIEZpbGVIYW5k
bGUgZmluYWwgeworcHVibGljOgorICAgIEZpbGVIYW5kbGUoKSA9IGRlZmF1bHQ7CisKKyAgICBG
aWxlSGFuZGxlKFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBmaWxlSGFuZGxlKQorICAgICAg
ICA6IG1fZmlsZUhhbmRsZShmaWxlSGFuZGxlKSB7IH0KKworICAgIEZpbGVIYW5kbGUoRmlsZUhh
bmRsZSYmIG90aGVyKQorICAgICAgICA6IG1fZmlsZUhhbmRsZShzdGQ6OmV4Y2hhbmdlKG90aGVy
Lm1fZmlsZUhhbmRsZSwgV2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkpIHsgfQor
CisgICAgfkZpbGVIYW5kbGUoKQorICAgIHsKKyAgICAgICAgY2xvc2VGaWxlKCk7CisgICAgfQor
CisgICAgRmlsZUhhbmRsZSYgb3BlcmF0b3I9KFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBm
aWxlSGFuZGxlKQorICAgIHsKKyAgICAgICAgY2xvc2VGaWxlKCk7CisgICAgICAgIG1fZmlsZUhh
bmRsZSA9IGZpbGVIYW5kbGU7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBG
aWxlSGFuZGxlJiBvcGVyYXRvcj0oRmlsZUhhbmRsZSYmIG90aGVyKQorICAgIHsKKyAgICAgICAg
Y2xvc2VGaWxlKCk7CisgICAgICAgIG1fZmlsZUhhbmRsZSA9IHN0ZDo6ZXhjaGFuZ2Uob3RoZXIu
bV9maWxlSGFuZGxlLCBXZWJDb3JlOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKTsKKyAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIEZpbGVIYW5kbGUoY29uc3QgRmlsZUhhbmRs
ZSYpID0gZGVsZXRlOworICAgIEZpbGVIYW5kbGUmIG9wZXJhdG9yPShjb25zdCBGaWxlSGFuZGxl
JikgPSBkZWxldGU7CisKKyAgICBvcGVyYXRvciBXZWJDb3JlOjpQbGF0Zm9ybUZpbGVIYW5kbGUo
KSBjb25zdCB7IHJldHVybiBtX2ZpbGVIYW5kbGU7IH0KKyAgICBleHBsaWNpdCBvcGVyYXRvciBi
b29sKCkgY29uc3QgeyByZXR1cm4gV2ViQ29yZTo6aXNIYW5kbGVWYWxpZChtX2ZpbGVIYW5kbGUp
OyB9CisKKyAgICBzdGF0aWMgRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgs
IFdlYkNvcmU6OkZpbGVPcGVuTW9kZSBtb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZpbGVI
YW5kbGUoV2ViQ29yZTo6b3BlbkZpbGUocGF0aCwgbW9kZSkpOworICAgIH0KKworICAgIGludCBy
ZWFkRnJvbUZpbGUodm9pZCogZGF0YSwgaW50IGxlbmd0aCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBXZWJDb3JlOjpyZWFkRnJvbUZpbGUobV9maWxlSGFuZGxlLCBzdGF0aWNfY2FzdDxj
aGFyKj4oZGF0YSksIGxlbmd0aCk7CisgICAgfQorCisgICAgaW50IHdyaXRlVG9GaWxlKGNvbnN0
IHZvaWQqIGRhdGEsIGludCBsZW5ndGgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV2Vi
Q29yZTo6d3JpdGVUb0ZpbGUobV9maWxlSGFuZGxlLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4o
ZGF0YSksIGxlbmd0aCk7CisgICAgfQorCisgICAgdm9pZCBjbG9zZUZpbGUoKQorICAgIHsKKyAg
ICAgICAgV2ViQ29yZTo6Y2xvc2VGaWxlKG1fZmlsZUhhbmRsZSk7CisgICAgfQorCitwcml2YXRl
OgorICAgIFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhhbmRsZSBtX2ZpbGVIYW5kbGUgeyBXZWJDb3Jl
OjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBOZXR3
b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVU
V09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhi
MzVjODE2ZGUxOWQ2OTcxMjc3N2U2YzdmN2M3M2E5ZjdlZmIwZWUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtEYXRhVGFza1Jl
cGxheS5jcHAKQEAgLTAsMCArMSwyODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrUmVwbGF5LmgiCisKKyNpZiBFTkFCTEUoTkVU
V09SS19DQVBUVVJFKQorCisjaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVFdmVudC5oIgorI2luY2x1
ZGUgIk5ldHdvcmtDYXB0dXJlTG9nZ2luZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlUmVz
b3VyY2UuaCIKKyNpbmNsdWRlICJOZXR3b3JrTG9hZFBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlICJO
ZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZVJlc3BvbnNlLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKworI2RlZmluZSBERUJV
R19DTEFTUyBOZXR3b3JrRGF0YVRhc2tSZXBsYXkKKworbmFtZXNwYWNlIFdlYktpdCB7CituYW1l
c3BhY2UgTmV0d29ya0NhcHR1cmUgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3Qgd2ViS2l0
UmVsYXlEb21haW4gPSAiV2ViS2l0UmVwbGF5IjsKKworTmV0d29ya0RhdGFUYXNrUmVwbGF5OjpO
ZXR3b3JrRGF0YVRhc2tSZXBsYXkoTmV0d29ya1Nlc3Npb24mIHNlc3Npb24sIE5ldHdvcmtEYXRh
VGFza0NsaWVudCYgY2xpZW50LCBjb25zdCBOZXR3b3JrTG9hZFBhcmFtZXRlcnMmIHBhcmFtZXRl
cnMsIFJlc291cmNlKiByZXNvdXJjZSkKKyAgICA6IE5ldHdvcmtEYXRhVGFzayhzZXNzaW9uLCBj
bGllbnQsIHBhcmFtZXRlcnMucmVxdWVzdCwgcGFyYW1ldGVycy5hbGxvd1N0b3JlZENyZWRlbnRp
YWxzLCBwYXJhbWV0ZXJzLnNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Qp
CisgICAgLCBtX2N1cnJlbnRSZXF1ZXN0KG1fZmlyc3RSZXF1ZXN0KQorICAgICwgbV9yZXNvdXJj
ZShyZXNvdXJjZSkKK3sKKyAgICBERUJVR19MT0coInJlcXVlc3QgVVJMID0gJXtwdWJsaWN9cyIs
IERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworICAgIERFQlVHX0xP
RygiY2FjaGVkIFVSTCA9ICV7cHVibGljfXMiLCByZXNvdXJjZSA/IERFQlVHX1NUUihyZXNvdXJj
ZS0+dXJsKCkuc3RyaW5nKCkpIDogIjxub3QgZm91bmQ+Iik7CisKKyAgICBtX3Nlc3Npb24tPnJl
Z2lzdGVyTmV0d29ya0RhdGFUYXNrKCp0aGlzKTsKKworICAgIGlmIChyZXNvdXJjZSkKKyAgICAg
ICAgbV9ldmVudFN0cmVhbSA9IHJlc291cmNlLT5ldmVudFN0cmVhbSgpOworfQorCitOZXR3b3Jr
RGF0YVRhc2tSZXBsYXk6On5OZXR3b3JrRGF0YVRhc2tSZXBsYXkoKQoreworICAgIERFQlVHX0xP
RygiVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJp
bmcoKSkpOworCisgICAgbV9zZXNzaW9uLT51bnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKCp0aGlz
KTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnJlc3VtZSgpCit7CisgICAgREVC
VUdfTE9HKCJVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RSKG1fZmlyc3RSZXF1ZXN0LnVybCgp
LnN0cmluZygpKSk7CisKKyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1f
c3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdGF0
ZSA9IFN0YXRlOjpSdW5uaW5nOworCisgICAgaWYgKG1fc2NoZWR1bGVkRmFpbHVyZVR5cGUgIT0g
Tm9GYWlsdXJlKSB7CisgICAgICAgIEFTU0VSVChtX2ZhaWx1cmVUaW1lci5pc0FjdGl2ZSgpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVucXVldWVFdmVudEhhbmRsZXIoKTsKK30K
Kwordm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnN1c3BlbmQoKQoreworICAgIERFQlVHX0xP
RygiVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJp
bmcoKSkpOworCisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRl
ID09IFN0YXRlOjpDb21wbGV0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3RhdGUgPSBT
dGF0ZTo6U3VzcGVuZGVkOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza1JlcGxheTo6Y2FuY2Vs
KCkKK3sKKyAgICBERUJVR19MT0coIiIpOworCisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNh
bmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q2FuY2VsaW5nOworfQorCit2b2lkIE5ldHdvcmtEYXRh
VGFza1JlcGxheTo6Y29tcGxldGUoKQoreworICAgIERFQlVHX0xPRygiVVJMID0gJXtwdWJsaWN9
cyIsIERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworCisgICAgaWYg
KG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9z
dGF0ZSA9IFN0YXRlOjpDb21wbGV0ZWQ7CisgICAgbV9yZXNvdXJjZSA9IG51bGxwdHI7Cit9CisK
K3ZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjppbnZhbGlkYXRlQW5kQ2FuY2VsKCkKK3sKKyAg
ICBERUJVR19MT0coIlVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9maXJzdFJlcXVlc3Qu
dXJsKCkuc3RyaW5nKCkpKTsKKworICAgIGNhbmNlbCgpOworICAgIGNvbXBsZXRlKCk7Cit9CisK
K3ZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjplbnF1ZXVlRXZlbnRIYW5kbGVyKCkKK3sKKyAg
ICBERUJVR19MT0coIlVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9maXJzdFJlcXVlc3Qu
dXJsKCkuc3RyaW5nKCkpKTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7CisgICAgICAgIERFQlVHX0xPRygiZW5x
dWV1ZUV2ZW50SGFuZGxlciBjYWxsYmFjayIpOworCisgICAgICAgIGlmIChtX3N0YXRlID09IFN0
YXRlOjpTdXNwZW5kZWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKG1fc3Rh
dGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRlID09IFN0YXRlOjpDb21wbGV0ZWQgfHwg
IW1fY2xpZW50KSB7CisgICAgICAgICAgICBjb21wbGV0ZSgpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX3Jlc291cmNlKSB7CisgICAgICAgICAgICBE
RUJVR19MT0dfRVJST1IoIkVycm9yIGxvYWRpbmcgcmVzb3VyY2U6IGNvdWxkIG5vdCBmaW5kIGNh
Y2hlZCByZXNvdXJjZSwgVVJMID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2N1cnJlbnRSZXF1
ZXN0LnVybCgpLnN0cmluZygpKSk7CisgICAgICAgICAgICBkaWRGaW5pc2goRXJyb3I6Ok5vdEZv
dW5kRXJyb3IpOyAvLyBUT0RPOiBUdXJuIHRoaXMgaW50byBhIDQwND8KKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UobV9jdXJyZW50UmVxdWVzdC5odHRwTWV0aG9kKCksICJnZXQiKSkgeworICAgICAgICAg
ICAgREVCVUdfTE9HX0VSUk9SKCJFcnJvciBsb2FkaW5nIHJlc291cmNlOiB1bnN1cHBvcnRlZCBt
ZXRob2QgKCV7cHVibGljfXMpLCBVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RSKG1fY3VycmVu
dFJlcXVlc3QuaHR0cE1ldGhvZCgpKSwgREVCVUdfU1RSKG1fY3VycmVudFJlcXVlc3QudXJsKCku
c3RyaW5nKCkpKTsKKyAgICAgICAgICAgIGRpZEZpbmlzaChFcnJvcjo6TWV0aG9kTm90QWxsb3dl
ZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGV2ZW50
ID0gbV9ldmVudFN0cmVhbS5uZXh0RXZlbnQoKTsKKyAgICAgICAgaWYgKCFldmVudCkgeworICAg
ICAgICAgICAgREVCVUdfTE9HX0VSUk9SKCJFcnJvciBsb2FkaW5nIHJlc291cmNlOiBuZXh0RXZl
bnQgcmV0dXJuIG51bGwsIFVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9jdXJyZW50UmVx
dWVzdC51cmwoKS5zdHJpbmcoKSkpOworICAgICAgICAgICAgZGlkRmluaXNoKEVycm9yOjpOb3RG
b3VuZEVycm9yKTsgLy8gVE9ETzogVHVybiB0aGlzIGludG8gYSA0MDQ/CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBhdXRvIHZpc2l0b3IgPSBXVEY6Om1h
a2VWaXNpdG9yKAorICAgICAgICAgICAgW3RoaXNdKGNvbnN0IFJlcXVlc3RTZW50RXZlbnQmIGV2
ZW50KSB7CisgICAgICAgICAgICAgICAgcmVwbGF5UmVxdWVzdFNlbnQoZXZlbnQpOworICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgIFt0aGlzXShjb25zdCBSZXNwb25zZVJlY2VpdmVkRXZlbnQm
IGV2ZW50KSB7CisgICAgICAgICAgICAgICAgcmVwbGF5UmVzcG9uc2VSZWNlaXZlZChldmVudCk7
CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgW3RoaXNdKGNvbnN0IFJlZGlyZWN0UmVjZWl2
ZWRFdmVudCYgZXZlbnQpIHsKKyAgICAgICAgICAgICAgICByZXBsYXlSZWRpcmVjdFJlY2VpdmVk
KGV2ZW50KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbdGhpc10oY29uc3QgUmVkaXJl
Y3RTZW50RXZlbnQmIGV2ZW50KSB7CisgICAgICAgICAgICAgICAgcmVwbGF5UmVkaXJlY3RTZW50
KGV2ZW50KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbdGhpc10oY29uc3QgRGF0YVJl
Y2VpdmVkRXZlbnQmIGV2ZW50KSB7CisgICAgICAgICAgICAgICAgcmVwbGF5RGF0YVJlY2VpdmVk
KGV2ZW50KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbdGhpc10oY29uc3QgRmluaXNo
ZWRFdmVudCYgZXZlbnQpIHsKKyAgICAgICAgICAgICAgICByZXBsYXlGaW5pc2hlZChldmVudCk7
CisgICAgICAgICAgICB9KTsKKworICAgICAgICBXVEY6OnZpc2l0KHZpc2l0b3IsICpldmVudCk7
CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjpyZXBsYXlSZXF1ZXN0
U2VudChjb25zdCBSZXF1ZXN0U2VudEV2ZW50JiBldmVudCkKK3sKKyAgICBERUJVR19MT0coIlVS
TCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9maXJzdFJlcXVlc3QudXJsKCkuc3RyaW5nKCkp
KTsKKworICAgIGVucXVldWVFdmVudEhhbmRsZXIoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRh
c2tSZXBsYXk6OnJlcGxheVJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgUmVzcG9uc2VSZWNlaXZlZEV2
ZW50JiBldmVudCkKK3sKKyAgICBERUJVR19MT0coIlVSTCA9ICV7cHVibGljfXMiLCBERUJVR19T
VFIobV9maXJzdFJlcXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKKworICAgIFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UgcmVzcG9uc2UoZXZlbnQucmVzcG9uc2UpOworICAgIGRpZFJlY2VpdmVSZXNw
b25zZShXVEZNb3ZlKHJlc3BvbnNlKSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5
OjpyZXBsYXlSZWRpcmVjdFJlY2VpdmVkKGNvbnN0IFJlZGlyZWN0UmVjZWl2ZWRFdmVudCYgZXZl
bnQpCit7CisgICAgREVCVUdfTE9HKCJVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RSKG1fZmly
c3RSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlIHJlY2VpdmVkUmVzcG9uc2UgPSBldmVudC5yZXNwb25zZTsKKyAgICBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QgcmVjZWl2ZWRSZXF1ZXN0ID0gZXZlbnQucmVxdWVzdDsKKworICAgIEFTU0VS
VChtX2NsaWVudCk7CisgICAgbV9jbGllbnQtPndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uKFdU
Rk1vdmUocmVjZWl2ZWRSZXNwb25zZSksIFdURk1vdmUocmVjZWl2ZWRSZXF1ZXN0KSwgW3RoaXMs
IHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYgdXBkYXRlZFJlcXVlc3QpIHsKKyAgICAgICAgREVCVUdfTE9HKCJyZXBsYXlSZWRp
cmVjdFJlY2VpdmVkIGNhbGxiYWNrOiBVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RSKG1fZmly
c3RSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisKKyAgICAgICAgbV9jdXJyZW50UmVxdWVzdCA9
IHVwZGF0ZWRSZXF1ZXN0OworICAgICAgICBlbnF1ZXVlRXZlbnRIYW5kbGVyKCk7CisgICAgfSk7
Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjpyZXBsYXlSZWRpcmVjdFNlbnQoY29u
c3QgUmVkaXJlY3RTZW50RXZlbnQmIGV2ZW50KQoreworICAgIERFQlVHX0xPRygiVVJMID0gJXtw
dWJsaWN9cyIsIERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOworCisg
ICAgZW5xdWV1ZUV2ZW50SGFuZGxlcigpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza1JlcGxh
eTo6cmVwbGF5RGF0YVJlY2VpdmVkKGNvbnN0IERhdGFSZWNlaXZlZEV2ZW50JiBldmVudCkKK3sK
KyAgICBERUJVR19MT0coIlVSTCA9ICV7cHVibGljfXMiLCBERUJVR19TVFIobV9maXJzdFJlcXVl
c3QudXJsKCkuc3RyaW5nKCkpKTsKKworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGll
bnQtPmRpZFJlY2VpdmVEYXRhKGV2ZW50LmRhdGEuY29weVJlZigpKTsKKworICAgIGVucXVldWVF
dmVudEhhbmRsZXIoKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnJlcGxheUZp
bmlzaGVkKGNvbnN0IEZpbmlzaGVkRXZlbnQmIGV2ZW50KQoreworICAgIERFQlVHX0xPRygiVVJM
ID0gJXtwdWJsaWN9cyIsIERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkp
OworCisgICAgZGlkRmluaXNoKGV2ZW50LmVycm9yKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRh
c2tSZXBsYXk6OmRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYg
cmVzcG9uc2UpCit7CisgICAgREVCVUdfTE9HKCJVUkwgPSAle3B1YmxpY31zIiwgREVCVUdfU1RS
KG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7CisKKyAgICBBU1NFUlQobV9jbGllbnQp
OworICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2VOZXR3b3JrU2Vzc2lvbihXVEZNb3Zl
KHJlc3BvbnNlKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oV2ViQ29y
ZTo6UG9saWN5QWN0aW9uIHBvbGljeUFjdGlvbikgeworICAgICAgICBERUJVR19MT0coImRpZFJl
Y2VpdmVSZXNwb25zZSBjYWxsYmFjayAoJXUpIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBvbGlj
eUFjdGlvbikpOworCisgICAgICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwg
bV9zdGF0ZSA9PSBTdGF0ZTo6Q29tcGxldGVkKSB7CisgICAgICAgICAgICBjb21wbGV0ZSgpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChwb2xpY3lB
Y3Rpb24pIHsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpQb2xpY3lBY3Rpb246OlBvbGljeVVzZToK
KyAgICAgICAgICAgIGVucXVldWVFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFdlYkNvcmU6OlBvbGljeUFjdGlvbjo6UG9saWN5SWdub3JlOgorICAgICAg
ICAgICAgY29tcGxldGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkNv
cmU6OlBvbGljeUFjdGlvbjo6UG9saWN5RG93bmxvYWQ6CisgICAgICAgICAgICBERUJVR19MT0df
RVJST1IoIldlYkNvcmU6OlBvbGljeUFjdGlvbjo6UG9saWN5RG93bmxvYWQiKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZvaWQgTmV0d29ya0RhdGFUYXNr
UmVwbGF5OjpkaWRGaW5pc2goKQoreworICAgIGRpZEZpbmlzaCh7IH0pOworfQorCit2b2lkIE5l
dHdvcmtEYXRhVGFza1JlcGxheTo6ZGlkRmluaXNoKEVycm9yIGVycm9yQ29kZSkKK3sKKyAgICBk
aWRGaW5pc2goV2ViQ29yZTo6UmVzb3VyY2VFcnJvcih3ZWJLaXRSZWxheURvbWFpbiwgc3RhdGlj
X2Nhc3Q8aW50PihlcnJvckNvZGUpLCBtX2ZpcnN0UmVxdWVzdC51cmwoKSwgU3RyaW5nKCkpKTsK
K30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmRpZEZpbmlzaChjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBERUJVR19MT0coIiglZCkiLCBlcnJvci5l
cnJvckNvZGUoKSk7CisKKyAgICBjb21wbGV0ZSgpOworCisgICAgQVNTRVJUKG1fY2xpZW50KTsK
KyAgICBtX2NsaWVudC0+ZGlkQ29tcGxldGVXaXRoRXJyb3IoZXJyb3IpOworfQorCit9IC8vIG5h
bWVzcGFjZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuaCBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0RhdGFUYXNrUmVwbGF5LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYmQyOGE3ZDM1ZGFhZjljZDhlZjcxZjllNGNkNTgxZDFjZTFlMzhhYgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0Rh
dGFUYXNrUmVwbGF5LmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCisKKyNpbmNsdWRlICJOZXR3b3JrQ2Fw
dHVyZVJlc291cmNlLmgiCisjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3Mg
UmVzb3VyY2VFcnJvcjsKK2NsYXNzIFJlc291cmNlUmVzcG9uc2U7Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworY2xhc3MgTmV0d29ya0RhdGFUYXNrQ2xpZW50OworY2xhc3MgTmV0d29ya0xvYWRQ
YXJhbWV0ZXJzOworY2xhc3MgTmV0d29ya1Nlc3Npb247Cit9CisKK25hbWVzcGFjZSBXZWJLaXQg
eworbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlIHsKKworc3RydWN0IFJlcXVlc3RTZW50RXZlbnQ7
CitzdHJ1Y3QgUmVzcG9uc2VSZWNlaXZlZEV2ZW50Oworc3RydWN0IFJlZGlyZWN0UmVjZWl2ZWRF
dmVudDsKK3N0cnVjdCBSZWRpcmVjdFNlbnRFdmVudDsKK3N0cnVjdCBEYXRhUmVjZWl2ZWRFdmVu
dDsKK3N0cnVjdCBGaW5pc2hlZEV2ZW50OworCitjbGFzcyBOZXR3b3JrRGF0YVRhc2tSZXBsYXkg
OiBwdWJsaWMgTmV0d29ya0RhdGFUYXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPE5ldHdv
cmtEYXRhVGFza1JlcGxheT4gY3JlYXRlKE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3Jr
RGF0YVRhc2tDbGllbnQmIGNsaWVudCwgY29uc3QgTmV0d29ya0xvYWRQYXJhbWV0ZXJzJiBwYXJh
bWV0ZXJzLCBSZXNvdXJjZSogcmVzb3VyY2UpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBOZXR3b3JrRGF0YVRhc2tSZXBsYXkoc2Vzc2lvbiwgY2xpZW50LCBwYXJhbWV0ZXJz
LCByZXNvdXJjZSkpOworICAgIH0KKworICAgIHZvaWQgcmVwbGF5UmVxdWVzdFNlbnQoY29uc3Qg
UmVxdWVzdFNlbnRFdmVudCYpOworICAgIHZvaWQgcmVwbGF5UmVzcG9uc2VSZWNlaXZlZChjb25z
dCBSZXNwb25zZVJlY2VpdmVkRXZlbnQmKTsKKyAgICB2b2lkIHJlcGxheVJlZGlyZWN0UmVjZWl2
ZWQoY29uc3QgUmVkaXJlY3RSZWNlaXZlZEV2ZW50Jik7CisgICAgdm9pZCByZXBsYXlSZWRpcmVj
dFNlbnQoY29uc3QgUmVkaXJlY3RTZW50RXZlbnQmKTsKKyAgICB2b2lkIHJlcGxheURhdGFSZWNl
aXZlZChjb25zdCBEYXRhUmVjZWl2ZWRFdmVudCYpOworICAgIHZvaWQgcmVwbGF5RmluaXNoZWQo
Y29uc3QgRmluaXNoZWRFdmVudCYpOworCitwcml2YXRlOgorICAgIE5ldHdvcmtEYXRhVGFza1Jl
cGxheShOZXR3b3JrU2Vzc2lvbiYsIE5ldHdvcmtEYXRhVGFza0NsaWVudCYsIGNvbnN0IE5ldHdv
cmtMb2FkUGFyYW1ldGVycyYsIFJlc291cmNlKik7CisgICAgfk5ldHdvcmtEYXRhVGFza1JlcGxh
eSgpIG92ZXJyaWRlOworCisgICAgdm9pZCByZXN1bWUoKSBvdmVycmlkZTsKKyAgICB2b2lkIHN1
c3BlbmQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGNhbmNlbCgpIG92ZXJyaWRlOworICAgIHZvaWQg
Y29tcGxldGUoKTsKKyAgICB2b2lkIGludmFsaWRhdGVBbmRDYW5jZWwoKSBvdmVycmlkZTsKKwor
ICAgIFN0YXRlIHN0YXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zdGF0ZTsgfQorCisg
ICAgdm9pZCBlbnF1ZXVlRXZlbnRIYW5kbGVyKCk7CisKKyAgICBlbnVtIGNsYXNzIEVycm9yIHsK
KyAgICAgICAgTm9FcnJvciA9IDAsCisgICAgICAgIE5vdEZvdW5kRXJyb3IgPSAxLAorICAgICAg
ICBNZXRob2ROb3RBbGxvd2VkID0gNQorICAgIH07CisKKyAgICB2b2lkIGRpZFJlY2VpdmVSZXNw
b25zZShXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiYpOworICAgIHZvaWQgZGlkRmluaXNoKCk7
CisgICAgdm9pZCBkaWRGaW5pc2goRXJyb3IpOworICAgIHZvaWQgZGlkRmluaXNoKGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlRXJyb3ImKTsKKworICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6U3Vz
cGVuZGVkIH07CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1fY3VycmVudFJlcXVlc3Q7
CisgICAgUmVzb3VyY2UqIG1fcmVzb3VyY2U7CisgICAgUmVzb3VyY2U6OkV2ZW50U3RyZWFtIG1f
ZXZlbnRTdHJlYW07Cit9OworCit9IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZQorfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9qc29uLmhwcCBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvanNvbi5ocHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTBhYzhlMmZkZjQwZTFlMTcwZGY0NDExNzY5OTZlYTRhYmQ1Zjk0MgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvanNvbi5ocHAKQEAg
LTAsMCArMSwxMDgyMSBAQAorLyoKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRE8gTk9U
IFVTRSBUSElTIEpTT04gTElCUkFSWSEKKyAqCisgKiBUaGlzIEpTT04gbGlicmFyeSBleGlzdHMg
YXMgYSB0ZW1wb3JhcnkgZmFjaWxpdHkgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcKKyAqIEpTT04g
ZmlsZXMuIFVsdGltYXRlbHksIHdlIHNob3VsZCBiZSB1c2luZyB0aGUgSlNPTiBmYWNpbGl0aWVz
IHRoYXQgYXJlIGluCisgKiBKYXZhU2NyaXB0Q29yZS4gSG93ZXZlciwgdGhvc2UgYXJlIHRvbyBo
ZWF2eS13ZWlnaHQgZm9yIHdoYXQgd2Ugd2FudCBpbiB0aGUKKyAqIE5ldHdvcmtQcm9jZXNzLiBU
aGUgTmV0d29ya1Byb2Nlc3MgY3VycmVudGx5IGRvZXNuJ3QgdXNlIEphdmFTY3JpcHRDb3JlIGFu
ZAorICogZG9lc24ndCBhbGxvY2F0ZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBtZW1vcnktaGFu
ZGxpbmcgZmFjaWxpdGllcyB0aGF0IEpTQworICogcmVxdWlyZXMuIEFsbCB3ZSB3YW50IGlzIHNv
bWV0aGluZyB0aGF0IHdpbGwgZG8gdGhlIHNpbXBsZSBzdHJlYW1pbmcgYW5kCisgKiBwYXJzaW5n
IG9mIEpTT04uIFRvIHVsdGltYXRlbHkgYWNoaWV2ZSB0aGlzLCB3ZSB3aWxsIGJlIG1vZGlmeWlu
ZyB0aGUKKyAqIEpTT05QYXJzZSBpbiBKU0MgdG8gYmUgbGlnaHRlci13ZWlnaHQsIHBlcmZvcm1p
bmcganVzdCB0aGUgc3RyZWFtaW5nIG9yCisgKiBwYXJzaW5nIGFuZCBsZWF2aW5nIHRoZSBtZW1v
cnkgbWFuYWdlbWVudCBhbmQgb2JqZWN0IGNyZWF0aW9uIHRvIHRoZSBjYWxsZXIuCisgKiBUaGlz
IHdpbGwgYmUgc2ltaWxhciB0byBob3dlIFlhcnJQYXJzZXIgd29ya3MuIFRoZSBuZXcgSlNPTlBh
cnNlIHdpbGwgYmUKKyAqIHVzZWQgaGVyZSBhbmQgaW4gb3RoZXIgcGxhY2VzIGxpa2UgaW4gQ29u
dGV4dEV4dGVuc2lvblBhcnNlci4gVW50aWwgdGhlbiwgd2UKKyAqIHVzZSB0aGlzIGxpYnJhcnku
CisgKgorICogSW4gdGhhdCBjb250ZXh0LCB0aGlzIGxpYnJhcnkgc2hvdWxkIG5vdCBiZSB1c2Vk
IGJ5IGFueW9uZSBlbHNlLiBJdCB3aWxsIGJlCisgKiBnb2luZyBhd2F5LiBBbHNvLCBpdCBoYXMg
bm90IGJlZW4gdmV0dGVkIGZvciBzZWN1cml0eSBpc3N1ZXMgdGhhdCBtaWdodAorICogYXJpc2Ug
aWYgaXQgd2VyZSB1c2VkIGluIGEgY29udGV4dCB3aGVyZSBjdXN0b21lciBkYXRhIGlzIGJlaW5n
IG1hbmlwdWxhdGVkLgorICoKKyAqIERPIE5PVCBVU0UgVEhJUyBKU09OIExJQlJBUlkhCisgKgor
ICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUaGlzIGZpbGUgd2FzIHRha2VuIGZyb20gPGh0
dHBzOi8vZ2l0aHViLmNvbS9ubG9obWFubi9qc29uPiBhdCByZXZpc2lvbgorICogZTcxNzQ5MjAx
OTY4N2JmMGVkZjJiODg0YjUxYmYzN2RiNDgzMWE2ZiBhbmQgbW9kaWZpZWQgYXMgZm9sbG93cyBm
b3IKKyAqIGluY2x1c2lvbiBpbiBXZWJLaXQ6CisgKgorICogICogRXhjZXB0aW9ucyBhcmUgZGlz
YWJsZWQgaW4gV2ViS2l0LCBzbyBhbGwgJ3Rocm93JyBzdGF0ZW1lbnRzIHdlcmUKKyAqICAgIGNv
bnZlcnRlZCBpbnRvIGEgY2FsbCB0byBhIFRocm93IGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIGNh
biBiZSBlbmFibGVkCisgKiAgICB0byBpbnZva2UgJ3Rocm93JyBhcyBiZWZvcmUsIGJ1dCBieSBk
ZWZhdWx0IGFzc2VydHMgYW5kIGNyYXNoZXMuCisgKiAgKiB0cnkvY2F0Y2ggc3RhdGVtZW50cyBh
cmUgYWxzbyBkaXNhbGxvd2VkLCBzbyB0aGVzZSB3ZXJlIGNvbnZlcnRlZCBpbnRvCisgKiAgICBz
aW1wbGUgaWYvdGhlbiBjaGVja3Mgd2hlcmUgcG9zc2libGUuIFdoZXJlIG5vdCBwb3NzaWJsZSwg
dGhlIHRyeS9jYXRjaAorICogICAgc3RhdGVtZW50cyB3ZXJlIHNpbXBseSByZW1vdmVkIHdpdGgg
dGhlIGV4cGVjdGF0aW9uIHRoYXQgbm8gY29kZSBwYXRocworICogICAgd291bGQgdHJpZ2dlciB0
aGUgYW50aWNpcGF0ZWQgZXhjZXB0aW9ucy4KKyAqICAqIEZvciBlZmZpY2llbmN5LCBhIGJhc2lj
X2pzb24gY29uc3RydWN0b3IgdGhhdCB0YWtlcyBhCisgKiAgICBzdHJpbmdfdDo6dmFsdWVfdHlw
ZSogYW5kIGEgY291bnQgd2FzIGFkZGVkLgorICoKKyAqICoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8K
KworLyoKKyAgICBfXyBfX19fXyBfX19fXyBfX19fXworIF9ffCAgfCAgIF9ffCAgICAgfCAgIHwg
fCAgSlNPTiBmb3IgTW9kZXJuIEMrKworfCAgfCAgfF9fICAgfCAgfCAgfCB8IHwgfCAgdmVyc2lv
biAyLjAuNworfF9fX19ffF9fX19ffF9fX19ffF98X19ffCAgaHR0cHM6Ly9naXRodWIuY29tL25s
b2htYW5uL2pzb24KKworTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIDxodHRwOi8vb3Bl
bnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUPi4KK0NvcHlyaWdodCAoYykgMjAxMy0yMDE2IE5pZWxz
IExvaG1hbm4gPGh0dHA6Ly9ubG9obWFubi5tZT4uCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5ICBn
cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55ICBwZXJzb24gb2J0YWluaW5nIGEgY29weQor
b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCAgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl
ICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgIHdpdGhvdXQgcmVzdHJpY3Rp
b24sIGluY2x1ZGluZyB3aXRob3V0ICBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvICB1c2UsIGNv
cHksICBtb2RpZnksIG1lcmdlLCAgcHVibGlzaCwgZGlzdHJpYnV0ZSwgIHN1YmxpY2Vuc2UsIGFu
ZC9vciAgc2VsbAorY29waWVzICBvZiAgdGhlIFNvZnR3YXJlLCAgYW5kICB0byAgcGVybWl0IHBl
cnNvbnMgIHRvICB3aG9tICB0aGUgU29mdHdhcmUgIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1
YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0
IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBh
bGwKK2NvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RI
RSBTT0ZUV0FSRSAgSVMgUFJPVklERUQgIkFTICBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgIE9GIEFO
WSBLSU5ELCAgRVhQUkVTUyBPUgorSU1QTElFRCwgIElOQ0xVRElORyBCVVQgIE5PVCAgTElNSVRF
RCBUTyAgVEhFICBXQVJSQU5USUVTIE9GICBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiAg
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UICBT
SEFMTCBUSEUKK0FVVEhPUlMgIE9SIENPUFlSSUdIVCAgSE9MREVSUyAgQkUgIExJQUJMRSBGT1Ig
IEFOWSAgQ0xBSU0sICBEQU1BR0VTIE9SICBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFO
IEFDVElPTiBPRiAgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitP
VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSAgT1IgVEhFIFVTRSBPUiBP
VEhFUiBERUFMSU5HUyBJTiBUSEUKK1NPRlRXQVJFLgorKi8KKworI2lmbmRlZiBOTE9ITUFOTl9K
U09OX0hQUAorI2RlZmluZSBOTE9ITUFOTl9KU09OX0hQUAorCisjaW5jbHVkZSA8YWxnb3JpdGht
PiAvLyBhbGxfb2YsIGZvcl9lYWNoLCB0cmFuc2Zvcm0KKyNpbmNsdWRlIDxhcnJheT4gLy8gYXJy
YXkKKyNpbmNsdWRlIDxjYXNzZXJ0PiAvLyBhc3NlcnQKKyNpbmNsdWRlIDxjY3R5cGU+IC8vIGlz
ZGlnaXQKKyNpbmNsdWRlIDxjaXNvNjQ2PiAvLyBhbmQsIG5vdCwgb3IKKyNpbmNsdWRlIDxjbWF0
aD4gLy8gaXNmaW5pdGUsIHNpZ25iaXQKKyNpbmNsdWRlIDxjc3RkZGVmPiAvLyBudWxscHRyX3Qs
IHB0cmRpZmZfdCwgc2l6ZV90CisjaW5jbHVkZSA8Y3N0ZGludD4gLy8gaW50NjRfdCwgdWludDY0
X3QKKyNpbmNsdWRlIDxjc3RkbGliPiAvLyBzdHJ0b2QsIHN0cnRvZiwgc3RydG9sZCwgc3RydG91
bAorI2luY2x1ZGUgPGNzdHJpbmc+IC8vIHN0cmxlbgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+IC8v
IGZ1bmN0aW9uLCBoYXNoLCBsZXNzCisjaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4gLy8gaW5p
dGlhbGl6ZXJfbGlzdAorI2luY2x1ZGUgPGlvbWFuaXA+IC8vIHNldHcKKyNpbmNsdWRlIDxpb3N0
cmVhbT4gLy8gaXN0cmVhbSwgb3N0cmVhbQorI2luY2x1ZGUgPGl0ZXJhdG9yPiAvLyBhZHZhbmNl
LCBiZWdpbiwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGRpc3RhbmNlLCBlbmQsIGluc2Vy
dGVyLCBpdGVyYXRvciwgaXRlcmF0b3JfdHJhaXRzLCBuZXh0LCByYW5kb21fYWNjZXNzX2l0ZXJh
dG9yX3RhZywgcmV2ZXJzZV9pdGVyYXRvcgorI2luY2x1ZGUgPGxpbWl0cz4gLy8gbnVtZXJpY19s
aW1pdHMKKyNpbmNsdWRlIDxsb2NhbGU+IC8vIGxvY2FsZQorI2luY2x1ZGUgPG1hcD4gLy8gbWFw
CisjaW5jbHVkZSA8bWVtb3J5PiAvLyBhZGRyZXNzb2YsIGFsbG9jYXRvciwgYWxsb2NhdG9yX3Ry
YWl0cywgdW5pcXVlX3B0cgorI2luY2x1ZGUgPG51bWVyaWM+IC8vIGFjY3VtdWxhdGUKKyNpbmNs
dWRlIDxzc3RyZWFtPiAvLyBzdHJpbmdzdHJlYW0KKyNpbmNsdWRlIDxzdGRleGNlcHQ+IC8vIGRv
bWFpbl9lcnJvciwgaW52YWxpZF9hcmd1bWVudCwgb3V0X29mX3JhbmdlCisjaW5jbHVkZSA8c3Ry
aW5nPiAvLyBnZXRsaW5lLCBzdG9pLCBzdHJpbmcsIHRvX3N0cmluZworI2luY2x1ZGUgPHR5cGVf
dHJhaXRzPiAvLyBhZGRfcG9pbnRlciwgZW5hYmxlX2lmLCBpc19hcml0aG1ldGljLCBpc19iYXNl
X29mLCBpc19jb25zdCwgaXNfY29uc3RydWN0aWJsZSwgaXNfY29udmVydGlibGUsIGlzX2Zsb2F0
aW5nX3BvaW50LCBpc19pbnRlZ3JhbCwgaXNfbm90aHJvd19tb3ZlX2Fzc2lnbmFibGUsIHN0ZDo6
aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGUsIHN0ZDo6aXNfcG9pbnRlciwgc3RkOjppc19y
ZWZlcmVuY2UsIHN0ZDo6aXNfc2FtZSwgcmVtb3ZlX2NvbnN0LCByZW1vdmVfcG9pbnRlciwgcmVt
b3ZlX3JlZmVyZW5jZQorI2luY2x1ZGUgPHV0aWxpdHk+IC8vIGRlY2x2YWwsIGZvcndhcmQsIG1h
a2VfcGFpciwgbW92ZSwgcGFpciwgc3dhcAorI2luY2x1ZGUgPHZlY3Rvcj4gLy8gdmVjdG9yCisK
KyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPiAvLyBBU1NFUlQKKyNpbmNsdWRlIDx3dGYvQ29t
cGlsZXIuaD4gLy8gTk9fUkVUVVJOCisKKy8vIGV4Y2x1ZGUgdW5zdXBwb3J0ZWQgY29tcGlsZXJz
CisjaWYgZGVmaW5lZChfX2NsYW5nX18pCisgICAgI2RlZmluZSBDTEFOR19WRVJTSU9OIChfX2Ns
YW5nX21ham9yX18gKiAxMDAwMCArIF9fY2xhbmdfbWlub3JfXyAqIDEwMCArIF9fY2xhbmdfcGF0
Y2hsZXZlbF9fKQorICAgICNpZiBDTEFOR19WRVJTSU9OIDwgMzA0MDAKKyAgICAgICAgI2Vycm9y
ICJ1bnN1cHBvcnRlZCBDbGFuZyB2ZXJzaW9uIC0gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ubG9o
bWFubi9qc29uI3N1cHBvcnRlZC1jb21waWxlcnMiCisgICAgI2VuZGlmCisjZWxpZiBkZWZpbmVk
KF9fR05VQ19fKQorICAgICNkZWZpbmUgR0NDX1ZFUlNJT04gKF9fR05VQ19fICogMTAwMDAgKyBf
X0dOVUNfTUlOT1JfXyAqIDEwMCArIF9fR05VQ19QQVRDSExFVkVMX18pCisgICAgI2lmIEdDQ19W
RVJTSU9OIDwgNDA5MDAKKyAgICAgICAgI2Vycm9yICJ1bnN1cHBvcnRlZCBHQ0MgdmVyc2lvbiAt
IHNlZSBodHRwczovL2dpdGh1Yi5jb20vbmxvaG1hbm4vanNvbiNzdXBwb3J0ZWQtY29tcGlsZXJz
IgorICAgICNlbmRpZgorI2VuZGlmCisKKy8vIGRpc2FibGUgZmxvYXQtZXF1YWwgd2FybmluZ3Mg
b24gR0NDL2NsYW5nCisjaWYgZGVmaW5lZChfX2NsYW5nX18pIHx8IGRlZmluZWQoX19HTlVDX18p
IHx8IGRlZmluZWQoX19HTlVHX18pCisgICAgI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisg
ICAgI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Zsb2F0LWVxdWFsIgorI2VuZGlm
CisKKy8vIGFsbG93IGZvciBwb3J0YWJsZSBkZXByZWNhdGlvbiB3YXJuaW5ncworI2lmIGRlZmlu
ZWQoX19jbGFuZ19fKSB8fCBkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKF9fR05VR19fKQor
ICAgICNkZWZpbmUgSlNPTl9ERVBSRUNBVEVEIF9fYXR0cmlidXRlX18oKGRlcHJlY2F0ZWQpKQor
I2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgICAjZGVmaW5lIEpTT05fREVQUkVDQVRFRCBfX2Rl
Y2xzcGVjKGRlcHJlY2F0ZWQpCisjZWxzZQorICAgICNkZWZpbmUgSlNPTl9ERVBSRUNBVEVECisj
ZW5kaWYKKworLyohCitAYnJpZWYgbmFtZXNwYWNlIGZvciBOaWVscyBMb2htYW5uCitAc2VlIGh0
dHBzOi8vZ2l0aHViLmNvbS9ubG9obWFubgorQHNpbmNlIHZlcnNpb24gMS4wLjAKKyovCituYW1l
c3BhY2UgbmxvaG1hbm4KK3sKKworCisvKiEKK0BicmllZiB1bm5hbWVkIG5hbWVzcGFjZSB3aXRo
IGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMKK0BzaW5jZSB2ZXJzaW9uIDEuMC4wCisqLworbmFt
ZXNwYWNlCit7CisvKiEKK0BicmllZiBIZWxwZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlcmUn
cyBhIGtleV90eXBlIGZvciBULgorCitUaHVzIGhlbHBlciBpcyB1c2VkIHRvIHRlbGwgYXNzb2Np
YXRpdmUgY29udGFpbmVycyBhcGFydCBmcm9tIG90aGVyIGNvbnRhaW5lcnMKK3N1Y2ggYXMgc2Vx
dWVuY2UgY29udGFpbmVycy4gRm9yIGluc3RhbmNlLCBgc3RkOjptYXBgIHBhc3NlcyB0aGUgdGVz
dCBhcyBpdAorY29udGFpbnMgYSBgbWFwcGVkX3R5cGVgLCB3aGVyZWFzIGBzdGQ6OnZlY3RvcmAg
ZmFpbHMgdGhlIHRlc3QuCisKK0BzYSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83NzI4NzI4
LzI2NjM3OAorQHNpbmNlIHZlcnNpb24gMS4wLjAsIG92ZXJ3b3JrZWQgaW4gdmVyc2lvbiAyLjAu
NgorKi8KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgaGFzX21hcHBlZF90eXBlCit7Cisg
IHByaXZhdGU6CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lID0gdHlwZW5hbWUg
VTo6bWFwcGVkX3R5cGU+CisgICAgc3RhdGljIGludCBkZXRlY3QoVSYmKTsKKworICAgIHN0YXRp
YyB2b2lkIGRldGVjdCguLi4pOworICBwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IHZhbHVlID0KKyAgICAgICAgc3RkOjppc19pbnRlZ3JhbDxkZWNsdHlwZShkZXRlY3Qoc3RkOjpk
ZWNsdmFsPFQ+KCkpKT46OnZhbHVlOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIC4uLiBUeXBlcz4KK05PX1JFVFVSTiB2b2lkIFRocm93KFR5cGVzIC4uLiBhcmdzKQorewor
I2lmIDAKKyAgICB0aHJvdyBUKHN0ZDo6Zm9yd2FyZDxUeXBlcz4oYXJncykuLi4pOworI2Vsc2UK
KyAgICBBU1NFUlQoZmFsc2UpOworICAgIFdURkNyYXNoKCk7CisjZW5kaWYKK30KK30KKworLyoh
CitAYnJpZWYgYSBjbGFzcyB0byBzdG9yZSBKU09OIHZhbHVlcworCitAdHBhcmFtIE9iamVjdFR5
cGUgdHlwZSBmb3IgSlNPTiBvYmplY3RzIChgc3RkOjptYXBgIGJ5IGRlZmF1bHQ7IHdpbGwgYmUg
dXNlZAoraW4gQHJlZiBvYmplY3RfdCkKK0B0cGFyYW0gQXJyYXlUeXBlIHR5cGUgZm9yIEpTT04g
YXJyYXlzIChgc3RkOjp2ZWN0b3JgIGJ5IGRlZmF1bHQ7IHdpbGwgYmUgdXNlZAoraW4gQHJlZiBh
cnJheV90KQorQHRwYXJhbSBTdHJpbmdUeXBlIHR5cGUgZm9yIEpTT04gc3RyaW5ncyBhbmQgb2Jq
ZWN0IGtleXMgKGBzdGQ6OnN0cmluZ2AgYnkKK2RlZmF1bHQ7IHdpbGwgYmUgdXNlZCBpbiBAcmVm
IHN0cmluZ190KQorQHRwYXJhbSBCb29sZWFuVHlwZSB0eXBlIGZvciBKU09OIGJvb2xlYW5zIChg
Ym9vbGAgYnkgZGVmYXVsdDsgd2lsbCBiZSB1c2VkCitpbiBAcmVmIGJvb2xlYW5fdCkKK0B0cGFy
YW0gTnVtYmVySW50ZWdlclR5cGUgdHlwZSBmb3IgSlNPTiBpbnRlZ2VyIG51bWJlcnMgKGBpbnQ2
NF90YCBieQorZGVmYXVsdDsgd2lsbCBiZSB1c2VkIGluIEByZWYgbnVtYmVyX2ludGVnZXJfdCkK
K0B0cGFyYW0gTnVtYmVyVW5zaWduZWRUeXBlIHR5cGUgZm9yIEpTT04gdW5zaWduZWQgaW50ZWdl
ciBudW1iZXJzIChAYworYHVpbnQ2NF90YCBieSBkZWZhdWx0OyB3aWxsIGJlIHVzZWQgaW4gQHJl
ZiBudW1iZXJfdW5zaWduZWRfdCkKK0B0cGFyYW0gTnVtYmVyRmxvYXRUeXBlIHR5cGUgZm9yIEpT
T04gZmxvYXRpbmctcG9pbnQgbnVtYmVycyAoYGRvdWJsZWAgYnkKK2RlZmF1bHQ7IHdpbGwgYmUg
dXNlZCBpbiBAcmVmIG51bWJlcl9mbG9hdF90KQorQHRwYXJhbSBBbGxvY2F0b3JUeXBlIHR5cGUg
b2YgdGhlIGFsbG9jYXRvciB0byB1c2UgKGBzdGQ6OmFsbG9jYXRvcmAgYnkKK2RlZmF1bHQpCisK
K0ByZXF1aXJlbWVudCBUaGUgY2xhc3Mgc2F0aXNmaWVzIHRoZSBmb2xsb3dpbmcgY29uY2VwdCBy
ZXF1aXJlbWVudHM6CistIEJhc2ljCisgLSBbRGVmYXVsdENvbnN0cnVjdGlibGVdKGh0dHA6Ly9l
bi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNlcHQvRGVmYXVsdENvbnN0cnVjdGlibGUpOgor
ICAgSlNPTiB2YWx1ZXMgY2FuIGJlIGRlZmF1bHQgY29uc3RydWN0ZWQuIFRoZSByZXN1bHQgd2ls
bCBiZSBhIEpTT04gbnVsbCB2YWx1ZS4KKyAtIFtNb3ZlQ29uc3RydWN0aWJsZV0oaHR0cDovL2Vu
LmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29uY2VwdC9Nb3ZlQ29uc3RydWN0aWJsZSk6CisgICBB
IEpTT04gdmFsdWUgY2FuIGJlIGNvbnN0cnVjdGVkIGZyb20gYW4gcnZhbHVlIGFyZ3VtZW50Lgor
IC0gW0NvcHlDb25zdHJ1Y3RpYmxlXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9j
b25jZXB0L0NvcHlDb25zdHJ1Y3RpYmxlKToKKyAgIEEgSlNPTiB2YWx1ZSBjYW4gYmUgY29weS1j
b25zdHJ1Y3RlZCBmcm9tIGFuIGx2YWx1ZSBleHByZXNzaW9uLgorIC0gW01vdmVBc3NpZ25hYmxl
XShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L01vdmVBc3NpZ25hYmxl
KToKKyAgIEEgSlNPTiB2YWx1ZSB2YW4gYmUgYXNzaWduZWQgZnJvbSBhbiBydmFsdWUgYXJndW1l
bnQuCisgLSBbQ29weUFzc2lnbmFibGVdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3Bw
L2NvbmNlcHQvQ29weUFzc2lnbmFibGUpOgorICAgQSBKU09OIHZhbHVlIGNhbiBiZSBjb3B5LWFz
c2lnbmVkIGZyb20gYW4gbHZhbHVlIGV4cHJlc3Npb24uCisgLSBbRGVzdHJ1Y3RpYmxlXShodHRw
Oi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L0Rlc3RydWN0aWJsZSk6CisgICBK
U09OIHZhbHVlcyBjYW4gYmUgZGVzdHJ1Y3RlZC4KKy0gTGF5b3V0CisgLSBbU3RhbmRhcmRMYXlv
dXRUeXBlXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L1N0YW5kYXJk
TGF5b3V0VHlwZSk6CisgICBKU09OIHZhbHVlcyBoYXZlCisgICBbc3RhbmRhcmQgbGF5b3V0XSho
dHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9sYW5ndWFnZS9kYXRhX21lbWJlcnMjU3Rh
bmRhcmRfbGF5b3V0KToKKyAgIEFsbCBub24tc3RhdGljIGRhdGEgbWVtYmVycyBhcmUgcHJpdmF0
ZSBhbmQgc3RhbmRhcmQgbGF5b3V0IHR5cGVzLCB0aGUgY2xhc3MKKyAgIGhhcyBubyB2aXJ0dWFs
IGZ1bmN0aW9ucyBvciAodmlydHVhbCkgYmFzZSBjbGFzc2VzLgorLSBMaWJyYXJ5LXdpZGUKKyAt
IFtFcXVhbGl0eUNvbXBhcmFibGVdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2Nv
bmNlcHQvRXF1YWxpdHlDb21wYXJhYmxlKToKKyAgIEpTT04gdmFsdWVzIGNhbiBiZSBjb21wYXJl
ZCB3aXRoIGA9PWAsIHNlZSBAcmVmCisgICBvcGVyYXRvcj09KGNvbnN0X3JlZmVyZW5jZSxjb25z
dF9yZWZlcmVuY2UpLgorIC0gW0xlc3NUaGFuQ29tcGFyYWJsZV0oaHR0cDovL2VuLmNwcHJlZmVy
ZW5jZS5jb20vdy9jcHAvY29uY2VwdC9MZXNzVGhhbkNvbXBhcmFibGUpOgorICAgSlNPTiB2YWx1
ZXMgY2FuIGJlIGNvbXBhcmVkIHdpdGggYDxgLCBzZWUgQHJlZgorICAgb3BlcmF0b3I8KGNvbnN0
X3JlZmVyZW5jZSxjb25zdF9yZWZlcmVuY2UpLgorIC0gW1N3YXBwYWJsZV0oaHR0cDovL2VuLmNw
cHJlZmVyZW5jZS5jb20vdy9jcHAvY29uY2VwdC9Td2FwcGFibGUpOgorICAgQW55IEpTT04gbHZh
bHVlIG9yIHJ2YWx1ZSBvZiBjYW4gYmUgc3dhcHBlZCB3aXRoIGFueSBsdmFsdWUgb3IgcnZhbHVl
IG9mCisgICBvdGhlciBjb21wYXRpYmxlIHR5cGVzLCB1c2luZyB1bnF1YWxpZmllZCBmdW5jdGlv
biBjYWxsIEByZWYgc3dhcCgpLgorIC0gW051bGxhYmxlUG9pbnRlcl0oaHR0cDovL2VuLmNwcHJl
ZmVyZW5jZS5jb20vdy9jcHAvY29uY2VwdC9OdWxsYWJsZVBvaW50ZXIpOgorICAgSlNPTiB2YWx1
ZXMgY2FuIGJlIGNvbXBhcmVkIGFnYWluc3QgYHN0ZDo6bnVsbHB0cl90YCBvYmplY3RzIHdoaWNo
IGFyZSB1c2VkCisgICB0byBtb2RlbCB0aGUgYG51bGxgIHZhbHVlLgorLSBDb250YWluZXIKKyAt
IFtDb250YWluZXJdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNlcHQvQ29u
dGFpbmVyKToKKyAgIEpTT04gdmFsdWVzIGNhbiBiZSB1c2VkIGxpa2UgU1RMIGNvbnRhaW5lcnMg
YW5kIHByb3ZpZGUgaXRlcmF0b3IgYWNjZXNzLgorIC0gW1JldmVyc2libGVDb250YWluZXJdKGh0
dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNlcHQvUmV2ZXJzaWJsZUNvbnRhaW5l
cik7CisgICBKU09OIHZhbHVlcyBjYW4gYmUgdXNlZCBsaWtlIFNUTCBjb250YWluZXJzIGFuZCBw
cm92aWRlIHJldmVyc2UgaXRlcmF0b3IKKyAgIGFjY2Vzcy4KKworQGludmFyaWFudCBUaGUgbWVt
YmVyIHZhcmlhYmxlcyBAYSBtX3ZhbHVlIGFuZCBAYSBtX3R5cGUgaGF2ZSB0aGUgZm9sbG93aW5n
CityZWxhdGlvbnNoaXA6CistIElmIGBtX3R5cGUgPT0gdmFsdWVfdDo6b2JqZWN0YCwgdGhlbiBg
bV92YWx1ZS5vYmplY3QgIT0gbnVsbHB0cmAuCistIElmIGBtX3R5cGUgPT0gdmFsdWVfdDo6YXJy
YXlgLCB0aGVuIGBtX3ZhbHVlLmFycmF5ICE9IG51bGxwdHJgLgorLSBJZiBgbV90eXBlID09IHZh
bHVlX3Q6OnN0cmluZ2AsIHRoZW4gYG1fdmFsdWUuc3RyaW5nICE9IG51bGxwdHJgLgorVGhlIGlu
dmFyaWFudHMgYXJlIGNoZWNrZWQgYnkgbWVtYmVyIGZ1bmN0aW9uIGFzc2VydF9pbnZhcmlhbnQo
KS4KKworQGludGVybmFsCitAbm90ZSBPYmplY3RUeXBlIHRyaWNrIGZyb20gaHR0cDovL3N0YWNr
b3ZlcmZsb3cuY29tL2EvOTg2MDkxMQorQGVuZGludGVybmFsCisKK0BzZWUgW1JGQyA3MTU5OiBU
aGUgSmF2YVNjcmlwdCBPYmplY3QgTm90YXRpb24gKEpTT04pIERhdGEgSW50ZXJjaGFuZ2UKK0Zv
cm1hdF0oaHR0cDovL3JmYzcxNTkubmV0L3JmYzcxNTkpCisKK0BzaW5jZSB2ZXJzaW9uIDEuMC4w
CisKK0Bub3N1Ymdyb3VwaW5nCisqLwordGVtcGxhdGUgPAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lLi4uIEFyZ3M+IGNsYXNzIE9iamVjdFR5cGUgPSBzdGQ6
Om1hcCwKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZS4uLiBBcmdzPiBjbGFzcyBB
cnJheVR5cGUgPSBzdGQ6OnZlY3RvciwKKyAgICBjbGFzcyBTdHJpbmdUeXBlID0gc3RkOjpzdHJp
bmcsCisgICAgY2xhc3MgQm9vbGVhblR5cGUgPSBib29sLAorICAgIGNsYXNzIE51bWJlckludGVn
ZXJUeXBlID0gc3RkOjppbnQ2NF90LAorICAgIGNsYXNzIE51bWJlclVuc2lnbmVkVHlwZSA9IHN0
ZDo6dWludDY0X3QsCisgICAgY2xhc3MgTnVtYmVyRmxvYXRUeXBlID0gZG91YmxlLAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IGNsYXNzIEFsbG9jYXRvclR5cGUgPSBzdGQ6OmFsbG9jYXRvcgor
ICAgID4KK2NsYXNzIGJhc2ljX2pzb24KK3sKKyAgcHJpdmF0ZToKKyAgICAvLy8gd29ya2Fyb3Vu
ZCB0eXBlIGZvciBNU1ZDCisgICAgdXNpbmcgYmFzaWNfanNvbl90ID0gYmFzaWNfanNvbjxPYmpl
Y3RUeXBlLCBBcnJheVR5cGUsIFN0cmluZ1R5cGUsCisgICAgICAgICAgQm9vbGVhblR5cGUsIE51
bWJlckludGVnZXJUeXBlLCBOdW1iZXJVbnNpZ25lZFR5cGUsIE51bWJlckZsb2F0VHlwZSwKKyAg
ICAgICAgICBBbGxvY2F0b3JUeXBlPjsKKworICBwdWJsaWM6CisgICAgLy8gZm9yd2FyZCBkZWNs
YXJhdGlvbnMKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlPiBjbGFzcyBqc29uX3JldmVyc2Vf
aXRlcmF0b3I7CisgICAgY2xhc3MganNvbl9wb2ludGVyOworCisgICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCisgICAgLy8gY29udGFpbmVyIHR5cGVzIC8vCisgICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCisKKyAgICAvLy8gQG5hbWUgY29udGFpbmVyIHR5cGVzCisgICAgLy8vIFRoZSBjYW5vbmlj
IGNvbnRhaW5lciB0eXBlcyB0byB1c2UgQHJlZiBiYXNpY19qc29uIGxpa2UgYW55IG90aGVyIFNU
TAorICAgIC8vLyBjb250YWluZXIuCisgICAgLy8vIEB7CisKKyAgICAvLy8gdGhlIHR5cGUgb2Yg
ZWxlbWVudHMgaW4gYSBiYXNpY19qc29uIGNvbnRhaW5lcgorICAgIHVzaW5nIHZhbHVlX3R5cGUg
PSBiYXNpY19qc29uOworCisgICAgLy8vIHRoZSB0eXBlIG9mIGFuIGVsZW1lbnQgcmVmZXJlbmNl
CisgICAgdXNpbmcgcmVmZXJlbmNlID0gdmFsdWVfdHlwZSY7CisgICAgLy8vIHRoZSB0eXBlIG9m
IGFuIGVsZW1lbnQgY29uc3QgcmVmZXJlbmNlCisgICAgdXNpbmcgY29uc3RfcmVmZXJlbmNlID0g
Y29uc3QgdmFsdWVfdHlwZSY7CisKKyAgICAvLy8gYSB0eXBlIHRvIHJlcHJlc2VudCBkaWZmZXJl
bmNlcyBiZXR3ZWVuIGl0ZXJhdG9ycworICAgIHVzaW5nIGRpZmZlcmVuY2VfdHlwZSA9IHN0ZDo6
cHRyZGlmZl90OworICAgIC8vLyBhIHR5cGUgdG8gcmVwcmVzZW50IGNvbnRhaW5lciBzaXplcwor
ICAgIHVzaW5nIHNpemVfdHlwZSA9IHN0ZDo6c2l6ZV90OworCisgICAgLy8vIHRoZSBhbGxvY2F0
b3IgdHlwZQorICAgIHVzaW5nIGFsbG9jYXRvcl90eXBlID0gQWxsb2NhdG9yVHlwZTxiYXNpY19q
c29uPjsKKworICAgIC8vLyB0aGUgdHlwZSBvZiBhbiBlbGVtZW50IHBvaW50ZXIKKyAgICB1c2lu
ZyBwb2ludGVyID0gdHlwZW5hbWUgc3RkOjphbGxvY2F0b3JfdHJhaXRzPGFsbG9jYXRvcl90eXBl
Pjo6cG9pbnRlcjsKKyAgICAvLy8gdGhlIHR5cGUgb2YgYW4gZWxlbWVudCBjb25zdCBwb2ludGVy
CisgICAgdXNpbmcgY29uc3RfcG9pbnRlciA9IHR5cGVuYW1lIHN0ZDo6YWxsb2NhdG9yX3RyYWl0
czxhbGxvY2F0b3JfdHlwZT46OmNvbnN0X3BvaW50ZXI7CisKKyAgICAvLy8gYW4gaXRlcmF0b3Ig
Zm9yIGEgYmFzaWNfanNvbiBjb250YWluZXIKKyAgICBjbGFzcyBpdGVyYXRvcjsKKyAgICAvLy8g
YSBjb25zdCBpdGVyYXRvciBmb3IgYSBiYXNpY19qc29uIGNvbnRhaW5lcgorICAgIGNsYXNzIGNv
bnN0X2l0ZXJhdG9yOworICAgIC8vLyBhIHJldmVyc2UgaXRlcmF0b3IgZm9yIGEgYmFzaWNfanNv
biBjb250YWluZXIKKyAgICB1c2luZyByZXZlcnNlX2l0ZXJhdG9yID0ganNvbl9yZXZlcnNlX2l0
ZXJhdG9yPHR5cGVuYW1lIGJhc2ljX2pzb246Oml0ZXJhdG9yPjsKKyAgICAvLy8gYSBjb25zdCBy
ZXZlcnNlIGl0ZXJhdG9yIGZvciBhIGJhc2ljX2pzb24gY29udGFpbmVyCisgICAgdXNpbmcgY29u
c3RfcmV2ZXJzZV9pdGVyYXRvciA9IGpzb25fcmV2ZXJzZV9pdGVyYXRvcjx0eXBlbmFtZSBiYXNp
Y19qc29uOjpjb25zdF9pdGVyYXRvcj47CisKKyAgICAvLy8gQH0KKworCisgICAgLyohCisgICAg
QGJyaWVmIHJldHVybnMgdGhlIGFsbG9jYXRvciBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnRhaW5l
cgorICAgICovCisgICAgc3RhdGljIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7CisgICAgfQorCisKKyAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLyBKU09OIHZhbHVlIGRhdGEgdHlwZXMgLy8K
KyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIC8vLyBAbmFtZSBKU09OIHZh
bHVlIGRhdGEgdHlwZXMKKyAgICAvLy8gVGhlIGRhdGEgdHlwZXMgdG8gc3RvcmUgYSBKU09OIHZh
bHVlLiBUaGVzZSB0eXBlcyBhcmUgZGVyaXZlZCBmcm9tCisgICAgLy8vIHRoZSB0ZW1wbGF0ZSBh
cmd1bWVudHMgcGFzc2VkIHRvIGNsYXNzIEByZWYgYmFzaWNfanNvbi4KKyAgICAvLy8gQHsKKwor
ICAgIC8qIQorICAgIEBicmllZiBhIHR5cGUgZm9yIGFuIG9iamVjdAorCisgICAgW1JGQyA3MTU5
XShodHRwOi8vcmZjNzE1OS5uZXQvcmZjNzE1OSkgZGVzY3JpYmVzIEpTT04gb2JqZWN0cyBhcyBm
b2xsb3dzOgorICAgID4gQW4gb2JqZWN0IGlzIGFuIHVub3JkZXJlZCBjb2xsZWN0aW9uIG9mIHpl
cm8gb3IgbW9yZSBuYW1lL3ZhbHVlIHBhaXJzLAorICAgID4gd2hlcmUgYSBuYW1lIGlzIGEgc3Ry
aW5nIGFuZCBhIHZhbHVlIGlzIGEgc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4sIG51bGwsCisgICAg
PiBvYmplY3QsIG9yIGFycmF5LgorCisgICAgVG8gc3RvcmUgb2JqZWN0cyBpbiBDKyssIGEgdHlw
ZSBpcyBkZWZpbmVkIGJ5IHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzCisgICAgZGVzY3JpYmVkIGJl
bG93LgorCisgICAgQHRwYXJhbSBPYmplY3RUeXBlICB0aGUgY29udGFpbmVyIHRvIHN0b3JlIG9i
amVjdHMgKGUuZy4sIGBzdGQ6Om1hcGAgb3IKKyAgICBgc3RkOjp1bm9yZGVyZWRfbWFwYCkKKyAg
ICBAdHBhcmFtIFN0cmluZ1R5cGUgdGhlIHR5cGUgb2YgdGhlIGtleXMgb3IgbmFtZXMgKGUuZy4s
IGBzdGQ6OnN0cmluZ2ApLgorICAgIFRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIGBzdGQ6Omxlc3M8
U3RyaW5nVHlwZT5gIGlzIHVzZWQgdG8gb3JkZXIgZWxlbWVudHMKKyAgICBpbnNpZGUgdGhlIGNv
bnRhaW5lci4KKyAgICBAdHBhcmFtIEFsbG9jYXRvclR5cGUgdGhlIGFsbG9jYXRvciB0byB1c2Ug
Zm9yIG9iamVjdHMgKGUuZy4sCisgICAgYHN0ZDo6YWxsb2NhdG9yYCkKKworICAgICMjIyMgRGVm
YXVsdCB0eXBlCisKKyAgICBXaXRoIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgQGEgT2JqZWN0VHlw
ZSAoYHN0ZDo6bWFwYCksIEBhIFN0cmluZ1R5cGUKKyAgICAoYHN0ZDo6c3RyaW5nYCksIGFuZCBA
YSBBbGxvY2F0b3JUeXBlIChgc3RkOjphbGxvY2F0b3JgKSwgdGhlIGRlZmF1bHQKKyAgICB2YWx1
ZSBmb3IgQGEgb2JqZWN0X3QgaXM6CisKKyAgICBAY29kZSB7LmNwcH0KKyAgICBzdGQ6Om1hcDwK
KyAgICAgIHN0ZDo6c3RyaW5nLCAvLyBrZXlfdHlwZQorICAgICAgYmFzaWNfanNvbiwgLy8gdmFs
dWVfdHlwZQorICAgICAgc3RkOjpsZXNzPHN0ZDo6c3RyaW5nPiwgLy8ga2V5X2NvbXBhcmUKKyAg
ICAgIHN0ZDo6YWxsb2NhdG9yPHN0ZDo6cGFpcjxjb25zdCBzdGQ6OnN0cmluZywgYmFzaWNfanNv
bj4+IC8vIGFsbG9jYXRvcl90eXBlCisgICAgPgorICAgIEBlbmRjb2RlCisKKyAgICAjIyMjIEJl
aGF2aW9yCisKKyAgICBUaGUgY2hvaWNlIG9mIEBhIG9iamVjdF90IGluZmx1ZW5jZXMgdGhlIGJl
aGF2aW9yIG9mIHRoZSBKU09OIGNsYXNzLiBXaXRoCisgICAgdGhlIGRlZmF1bHQgdHlwZSwgb2Jq
ZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgYmVoYXZpb3I6CisKKyAgICAtIFdoZW4gYWxsIG5hbWVz
IGFyZSB1bmlxdWUsIG9iamVjdHMgd2lsbCBiZSBpbnRlcm9wZXJhYmxlIGluIHRoZSBzZW5zZQor
ICAgICAgdGhhdCBhbGwgc29mdHdhcmUgaW1wbGVtZW50YXRpb25zIHJlY2VpdmluZyB0aGF0IG9i
amVjdCB3aWxsIGFncmVlIG9uCisgICAgICB0aGUgbmFtZS12YWx1ZSBtYXBwaW5ncy4KKyAgICAt
IFdoZW4gdGhlIG5hbWVzIHdpdGhpbiBhbiBvYmplY3QgYXJlIG5vdCB1bmlxdWUsIGxhdGVyIHN0
b3JlZCBuYW1lL3ZhbHVlCisgICAgICBwYWlycyBvdmVyd3JpdGUgcHJldmlvdXNseSBzdG9yZWQg
bmFtZS92YWx1ZSBwYWlycywgbGVhdmluZyB0aGUgdXNlZAorICAgICAgbmFtZXMgdW5pcXVlLiBG
b3IgaW5zdGFuY2UsIGB7ImtleSI6IDF9YCBhbmQgYHsia2V5IjogMiwgImtleSI6IDF9YCB3aWxs
CisgICAgICBiZSB0cmVhdGVkIGFzIGVxdWFsIGFuZCBib3RoIHN0b3JlZCBhcyBgeyJrZXkiOiAx
fWAuCisgICAgLSBJbnRlcm5hbGx5LCBuYW1lL3ZhbHVlIHBhaXJzIGFyZSBzdG9yZWQgaW4gbGV4
aWNvZ3JhcGhpY2FsIG9yZGVyIG9mIHRoZQorICAgICAgbmFtZXMuIE9iamVjdHMgd2lsbCBhbHNv
IGJlIHNlcmlhbGl6ZWQgKHNlZSBAcmVmIGR1bXApIGluIHRoaXMgb3JkZXIuCisgICAgICBGb3Ig
aW5zdGFuY2UsIGB7ImIiOiAxLCAiYSI6IDJ9YCBhbmQgYHsiYSI6IDIsICJiIjogMX1gIHdpbGwg
YmUgc3RvcmVkCisgICAgICBhbmQgc2VyaWFsaXplZCBhcyBgeyJhIjogMiwgImIiOiAxfWAuCisg
ICAgLSBXaGVuIGNvbXBhcmluZyBvYmplY3RzLCB0aGUgb3JkZXIgb2YgdGhlIG5hbWUvdmFsdWUg
cGFpcnMgaXMgaXJyZWxldmFudC4KKyAgICAgIFRoaXMgbWFrZXMgb2JqZWN0cyBpbnRlcm9wZXJh
YmxlIGluIHRoZSBzZW5zZSB0aGF0IHRoZXkgd2lsbCBub3QgYmUKKyAgICAgIGFmZmVjdGVkIGJ5
IHRoZXNlIGRpZmZlcmVuY2VzLiBGb3IgaW5zdGFuY2UsIGB7ImIiOiAxLCAiYSI6IDJ9YCBhbmQK
KyAgICAgIGB7ImEiOiAyLCAiYiI6IDF9YCB3aWxsIGJlIHRyZWF0ZWQgYXMgZXF1YWwuCisKKyAg
ICAjIyMjIExpbWl0cworCisgICAgW1JGQyA3MTU5XShodHRwOi8vcmZjNzE1OS5uZXQvcmZjNzE1
OSkgc3BlY2lmaWVzOgorICAgID4gQW4gaW1wbGVtZW50YXRpb24gbWF5IHNldCBsaW1pdHMgb24g
dGhlIG1heGltdW0gZGVwdGggb2YgbmVzdGluZy4KKworICAgIEluIHRoaXMgY2xhc3MsIHRoZSBv
YmplY3QncyBsaW1pdCBvZiBuZXN0aW5nIGlzIG5vdCBjb25zdHJhaW50IGV4cGxpY2l0bHkuCisg
ICAgSG93ZXZlciwgYSBtYXhpbXVtIGRlcHRoIG9mIG5lc3RpbmcgbWF5IGJlIGludHJvZHVjZWQg
YnkgdGhlIGNvbXBpbGVyIG9yCisgICAgcnVudGltZSBlbnZpcm9ubWVudC4gQSB0aGVvcmV0aWNh
bCBsaW1pdCBjYW4gYmUgcXVlcmllZCBieSBjYWxsaW5nIHRoZQorICAgIEByZWYgbWF4X3NpemUg
ZnVuY3Rpb24gb2YgYSBKU09OIG9iamVjdC4KKworICAgICMjIyMgU3RvcmFnZQorCisgICAgT2Jq
ZWN0cyBhcmUgc3RvcmVkIGFzIHBvaW50ZXJzIGluIGEgQHJlZiBiYXNpY19qc29uIHR5cGUuIFRo
YXQgaXMsIGZvciBhbnkKKyAgICBhY2Nlc3MgdG8gb2JqZWN0IHZhbHVlcywgYSBwb2ludGVyIG9m
IHR5cGUgYG9iamVjdF90KmAgbXVzdCBiZQorICAgIGRlcmVmZXJlbmNlZC4KKworICAgIEBzYSBA
cmVmIGFycmF5X3QgLS0gdHlwZSBmb3IgYW4gYXJyYXkgdmFsdWUKKworICAgIEBzaW5jZSB2ZXJz
aW9uIDEuMC4wCisKKyAgICBAbm90ZSBUaGUgb3JkZXIgbmFtZS92YWx1ZSBwYWlycyBhcmUgYWRk
ZWQgdG8gdGhlIG9iamVjdCBpcyAqbm90KgorICAgIHByZXNlcnZlZCBieSB0aGUgbGlicmFyeS4g
VGhlcmVmb3JlLCBpdGVyYXRpbmcgYW4gb2JqZWN0IG1heSByZXR1cm4KKyAgICBuYW1lL3ZhbHVl
IHBhaXJzIGluIGEgZGlmZmVyZW50IG9yZGVyIHRoYW4gdGhleSB3ZXJlIG9yaWdpbmFsbHkgc3Rv
cmVkLiBJbgorICAgIGZhY3QsIGtleXMgd2lsbCBiZSB0cmF2ZXJzZWQgaW4gYWxwaGFiZXRpY2Fs
IG9yZGVyIGFzIGBzdGQ6Om1hcGAgd2l0aAorICAgIGBzdGQ6Omxlc3NgIGlzIHVzZWQgYnkgZGVm
YXVsdC4gUGxlYXNlIG5vdGUgdGhpcyBiZWhhdmlvciBjb25mb3JtcyB0byBbUkZDCisgICAgNzE1
OV0oaHR0cDovL3JmYzcxNTkubmV0L3JmYzcxNTkpLCBiZWNhdXNlIGFueSBvcmRlciBpbXBsZW1l
bnRzIHRoZQorICAgIHNwZWNpZmllZCAidW5vcmRlcmVkIiBuYXR1cmUgb2YgSlNPTiBvYmplY3Rz
LgorICAgICovCisgICAgdXNpbmcgb2JqZWN0X3QgPSBPYmplY3RUeXBlPFN0cmluZ1R5cGUsCisg
ICAgICAgICAgYmFzaWNfanNvbiwKKyAgICAgICAgICBzdGQ6Omxlc3M8U3RyaW5nVHlwZT4sCisg
ICAgICAgICAgQWxsb2NhdG9yVHlwZTxzdGQ6OnBhaXI8Y29uc3QgU3RyaW5nVHlwZSwKKyAgICAg
ICAgICBiYXNpY19qc29uPj4+OworCisgICAgLyohCisgICAgQGJyaWVmIGEgdHlwZSBmb3IgYW4g
YXJyYXkKKworICAgIFtSRkMgNzE1OV0oaHR0cDovL3JmYzcxNTkubmV0L3JmYzcxNTkpIGRlc2Ny
aWJlcyBKU09OIGFycmF5cyBhcyBmb2xsb3dzOgorICAgID4gQW4gYXJyYXkgaXMgYW4gb3JkZXJl
ZCBzZXF1ZW5jZSBvZiB6ZXJvIG9yIG1vcmUgdmFsdWVzLgorCisgICAgVG8gc3RvcmUgb2JqZWN0
cyBpbiBDKyssIGEgdHlwZSBpcyBkZWZpbmVkIGJ5IHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzCisg
ICAgZXhwbGFpbmVkIGJlbG93LgorCisgICAgQHRwYXJhbSBBcnJheVR5cGUgIGNvbnRhaW5lciB0
eXBlIHRvIHN0b3JlIGFycmF5cyAoZS5nLiwgYHN0ZDo6dmVjdG9yYCBvcgorICAgIGBzdGQ6Omxp
c3RgKQorICAgIEB0cGFyYW0gQWxsb2NhdG9yVHlwZSBhbGxvY2F0b3IgdG8gdXNlIGZvciBhcnJh
eXMgKGUuZy4sIGBzdGQ6OmFsbG9jYXRvcmApCisKKyAgICAjIyMjIERlZmF1bHQgdHlwZQorCisg
ICAgV2l0aCB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIEBhIEFycmF5VHlwZSAoYHN0ZDo6dmVjdG9y
YCkgYW5kIEBhCisgICAgQWxsb2NhdG9yVHlwZSAoYHN0ZDo6YWxsb2NhdG9yYCksIHRoZSBkZWZh
dWx0IHZhbHVlIGZvciBAYSBhcnJheV90IGlzOgorCisgICAgQGNvZGUgey5jcHB9CisgICAgc3Rk
Ojp2ZWN0b3I8CisgICAgICBiYXNpY19qc29uLCAvLyB2YWx1ZV90eXBlCisgICAgICBzdGQ6OmFs
bG9jYXRvcjxiYXNpY19qc29uPiAvLyBhbGxvY2F0b3JfdHlwZQorICAgID4KKyAgICBAZW5kY29k
ZQorCisgICAgIyMjIyBMaW1pdHMKKworICAgIFtSRkMgNzE1OV0oaHR0cDovL3JmYzcxNTkubmV0
L3JmYzcxNTkpIHNwZWNpZmllczoKKyAgICA+IEFuIGltcGxlbWVudGF0aW9uIG1heSBzZXQgbGlt
aXRzIG9uIHRoZSBtYXhpbXVtIGRlcHRoIG9mIG5lc3RpbmcuCisKKyAgICBJbiB0aGlzIGNsYXNz
LCB0aGUgYXJyYXkncyBsaW1pdCBvZiBuZXN0aW5nIGlzIG5vdCBjb25zdHJhaW50IGV4cGxpY2l0
bHkuCisgICAgSG93ZXZlciwgYSBtYXhpbXVtIGRlcHRoIG9mIG5lc3RpbmcgbWF5IGJlIGludHJv
ZHVjZWQgYnkgdGhlIGNvbXBpbGVyIG9yCisgICAgcnVudGltZSBlbnZpcm9ubWVudC4gQSB0aGVv
cmV0aWNhbCBsaW1pdCBjYW4gYmUgcXVlcmllZCBieSBjYWxsaW5nIHRoZQorICAgIEByZWYgbWF4
X3NpemUgZnVuY3Rpb24gb2YgYSBKU09OIGFycmF5LgorCisgICAgIyMjIyBTdG9yYWdlCisKKyAg
ICBBcnJheXMgYXJlIHN0b3JlZCBhcyBwb2ludGVycyBpbiBhIEByZWYgYmFzaWNfanNvbiB0eXBl
LiBUaGF0IGlzLCBmb3IgYW55CisgICAgYWNjZXNzIHRvIGFycmF5IHZhbHVlcywgYSBwb2ludGVy
IG9mIHR5cGUgYGFycmF5X3QqYCBtdXN0IGJlIGRlcmVmZXJlbmNlZC4KKworICAgIEBzYSBAcmVm
IG9iamVjdF90IC0tIHR5cGUgZm9yIGFuIG9iamVjdCB2YWx1ZQorCisgICAgQHNpbmNlIHZlcnNp
b24gMS4wLjAKKyAgICAqLworICAgIHVzaW5nIGFycmF5X3QgPSBBcnJheVR5cGU8YmFzaWNfanNv
biwgQWxsb2NhdG9yVHlwZTxiYXNpY19qc29uPj47CisKKyAgICAvKiEKKyAgICBAYnJpZWYgYSB0
eXBlIGZvciBhIHN0cmluZworCisgICAgW1JGQyA3MTU5XShodHRwOi8vcmZjNzE1OS5uZXQvcmZj
NzE1OSkgZGVzY3JpYmVzIEpTT04gc3RyaW5ncyBhcyBmb2xsb3dzOgorICAgID4gQSBzdHJpbmcg
aXMgYSBzZXF1ZW5jZSBvZiB6ZXJvIG9yIG1vcmUgVW5pY29kZSBjaGFyYWN0ZXJzLgorCisgICAg
VG8gc3RvcmUgb2JqZWN0cyBpbiBDKyssIGEgdHlwZSBpcyBkZWZpbmVkIGJ5IHRoZSB0ZW1wbGF0
ZSBwYXJhbWV0ZXIKKyAgICBkZXNjcmliZWQgYmVsb3cuIFVuaWNvZGUgdmFsdWVzIGFyZSBzcGxp
dCBieSB0aGUgSlNPTiBjbGFzcyBpbnRvCisgICAgYnl0ZS1zaXplZCBjaGFyYWN0ZXJzIGR1cmlu
ZyBkZXNlcmlhbGl6YXRpb24uCisKKyAgICBAdHBhcmFtIFN0cmluZ1R5cGUgIHRoZSBjb250YWlu
ZXIgdG8gc3RvcmUgc3RyaW5ncyAoZS5nLiwgYHN0ZDo6c3RyaW5nYCkuCisgICAgTm90ZSB0aGlz
IGNvbnRhaW5lciBpcyB1c2VkIGZvciBrZXlzL25hbWVzIGluIG9iamVjdHMsIHNlZSBAcmVmIG9i
amVjdF90LgorCisgICAgIyMjIyBEZWZhdWx0IHR5cGUKKworICAgIFdpdGggdGhlIGRlZmF1bHQg
dmFsdWVzIGZvciBAYSBTdHJpbmdUeXBlIChgc3RkOjpzdHJpbmdgKSwgdGhlIGRlZmF1bHQKKyAg
ICB2YWx1ZSBmb3IgQGEgc3RyaW5nX3QgaXM6CisKKyAgICBAY29kZSB7LmNwcH0KKyAgICBzdGQ6
OnN0cmluZworICAgIEBlbmRjb2RlCisKKyAgICAjIyMjIFN0cmluZyBjb21wYXJpc29uCisKKyAg
ICBbUkZDIDcxNTldKGh0dHA6Ly9yZmM3MTU5Lm5ldC9yZmM3MTU5KSBzdGF0ZXM6CisgICAgPiBT
b2Z0d2FyZSBpbXBsZW1lbnRhdGlvbnMgYXJlIHR5cGljYWxseSByZXF1aXJlZCB0byB0ZXN0IG5h
bWVzIG9mIG9iamVjdAorICAgID4gbWVtYmVycyBmb3IgZXF1YWxpdHkuIEltcGxlbWVudGF0aW9u
cyB0aGF0IHRyYW5zZm9ybSB0aGUgdGV4dHVhbAorICAgID4gcmVwcmVzZW50YXRpb24gaW50byBz
ZXF1ZW5jZXMgb2YgVW5pY29kZSBjb2RlIHVuaXRzIGFuZCB0aGVuIHBlcmZvcm0gdGhlCisgICAg
PiBjb21wYXJpc29uIG51bWVyaWNhbGx5LCBjb2RlIHVuaXQgYnkgY29kZSB1bml0LCBhcmUgaW50
ZXJvcGVyYWJsZSBpbiB0aGUKKyAgICA+IHNlbnNlIHRoYXQgaW1wbGVtZW50YXRpb25zIHdpbGwg
YWdyZWUgaW4gYWxsIGNhc2VzIG9uIGVxdWFsaXR5IG9yCisgICAgPiBpbmVxdWFsaXR5IG9mIHR3
byBzdHJpbmdzLiBGb3IgZXhhbXBsZSwgaW1wbGVtZW50YXRpb25zIHRoYXQgY29tcGFyZQorICAg
ID4gc3RyaW5ncyB3aXRoIGVzY2FwZWQgY2hhcmFjdGVycyB1bmNvbnZlcnRlZCBtYXkgaW5jb3Jy
ZWN0bHkgZmluZCB0aGF0CisgICAgPiBgImFcXGIiYCBhbmQgYCJhXHUwMDVDYiJgIGFyZSBub3Qg
ZXF1YWwuCisKKyAgICBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGludGVyb3BlcmFibGUgYXMgaXQg
ZG9lcyBjb21wYXJlIHN0cmluZ3MgY29kZSB1bml0CisgICAgYnkgY29kZSB1bml0LgorCisgICAg
IyMjIyBTdG9yYWdlCisKKyAgICBTdHJpbmcgdmFsdWVzIGFyZSBzdG9yZWQgYXMgcG9pbnRlcnMg
aW4gYSBAcmVmIGJhc2ljX2pzb24gdHlwZS4gVGhhdCBpcywKKyAgICBmb3IgYW55IGFjY2VzcyB0
byBzdHJpbmcgdmFsdWVzLCBhIHBvaW50ZXIgb2YgdHlwZSBgc3RyaW5nX3QqYCBtdXN0IGJlCisg
ICAgZGVyZWZlcmVuY2VkLgorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAg
IHVzaW5nIHN0cmluZ190ID0gU3RyaW5nVHlwZTsKKworICAgIC8qIQorICAgIEBicmllZiBhIHR5
cGUgZm9yIGEgYm9vbGVhbgorCisgICAgW1JGQyA3MTU5XShodHRwOi8vcmZjNzE1OS5uZXQvcmZj
NzE1OSkgaW1wbGljaXRseSBkZXNjcmliZXMgYSBib29sZWFuIGFzIGEKKyAgICB0eXBlIHdoaWNo
IGRpZmZlcmVudGlhdGVzIHRoZSB0d28gbGl0ZXJhbHMgYHRydWVgIGFuZCBgZmFsc2VgLgorCisg
ICAgVG8gc3RvcmUgb2JqZWN0cyBpbiBDKyssIGEgdHlwZSBpcyBkZWZpbmVkIGJ5IHRoZSB0ZW1w
bGF0ZSBwYXJhbWV0ZXIgQGEKKyAgICBCb29sZWFuVHlwZSB3aGljaCBjaG9vc2VzIHRoZSB0eXBl
IHRvIHVzZS4KKworICAgICMjIyMgRGVmYXVsdCB0eXBlCisKKyAgICBXaXRoIHRoZSBkZWZhdWx0
IHZhbHVlcyBmb3IgQGEgQm9vbGVhblR5cGUgKGBib29sYCksIHRoZSBkZWZhdWx0IHZhbHVlIGZv
cgorICAgIEBhIGJvb2xlYW5fdCBpczoKKworICAgIEBjb2RlIHsuY3BwfQorICAgIGJvb2wKKyAg
ICBAZW5kY29kZQorCisgICAgIyMjIyBTdG9yYWdlCisKKyAgICBCb29sZWFuIHZhbHVlcyBhcmUg
c3RvcmVkIGRpcmVjdGx5IGluc2lkZSBhIEByZWYgYmFzaWNfanNvbiB0eXBlLgorCisgICAgQHNp
bmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIHVzaW5nIGJvb2xlYW5fdCA9IEJvb2xlYW5U
eXBlOworCisgICAgLyohCisgICAgQGJyaWVmIGEgdHlwZSBmb3IgYSBudW1iZXIgKGludGVnZXIp
CisKKyAgICBbUkZDIDcxNTldKGh0dHA6Ly9yZmM3MTU5Lm5ldC9yZmM3MTU5KSBkZXNjcmliZXMg
bnVtYmVycyBhcyBmb2xsb3dzOgorICAgID4gVGhlIHJlcHJlc2VudGF0aW9uIG9mIG51bWJlcnMg
aXMgc2ltaWxhciB0byB0aGF0IHVzZWQgaW4gbW9zdAorICAgID4gcHJvZ3JhbW1pbmcgbGFuZ3Vh
Z2VzLiBBIG51bWJlciBpcyByZXByZXNlbnRlZCBpbiBiYXNlIDEwIHVzaW5nIGRlY2ltYWwKKyAg
ICA+IGRpZ2l0cy4gSXQgY29udGFpbnMgYW4gaW50ZWdlciBjb21wb25lbnQgdGhhdCBtYXkgYmUg
cHJlZml4ZWQgd2l0aCBhbgorICAgID4gb3B0aW9uYWwgbWludXMgc2lnbiwgd2hpY2ggbWF5IGJl
IGZvbGxvd2VkIGJ5IGEgZnJhY3Rpb24gcGFydCBhbmQvb3IgYW4KKyAgICA+IGV4cG9uZW50IHBh
cnQuIExlYWRpbmcgemVyb3MgYXJlIG5vdCBhbGxvd2VkLiAoLi4uKSBOdW1lcmljIHZhbHVlcyB0
aGF0CisgICAgPiBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gdGhlIGdyYW1tYXIgYmVsb3cgKHN1
Y2ggYXMgSW5maW5pdHkgYW5kIE5hTikKKyAgICA+IGFyZSBub3QgcGVybWl0dGVkLgorCisgICAg
VGhpcyBkZXNjcmlwdGlvbiBpbmNsdWRlcyBib3RoIGludGVnZXIgYW5kIGZsb2F0aW5nLXBvaW50
IG51bWJlcnMuCisgICAgSG93ZXZlciwgQysrIGFsbG93cyBtb3JlIHByZWNpc2Ugc3RvcmFnZSBp
ZiBpdCBpcyBrbm93biB3aGV0aGVyIHRoZSBudW1iZXIKKyAgICBpcyBhIHNpZ25lZCBpbnRlZ2Vy
LCBhbiB1bnNpZ25lZCBpbnRlZ2VyIG9yIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLgorICAgIFRo
ZXJlZm9yZSwgdGhyZWUgZGlmZmVyZW50IHR5cGVzLCBAcmVmIG51bWJlcl9pbnRlZ2VyX3QsIEBy
ZWYKKyAgICBudW1iZXJfdW5zaWduZWRfdCBhbmQgQHJlZiBudW1iZXJfZmxvYXRfdCBhcmUgdXNl
ZC4KKworICAgIFRvIHN0b3JlIGludGVnZXIgbnVtYmVycyBpbiBDKyssIGEgdHlwZSBpcyBkZWZp
bmVkIGJ5IHRoZSB0ZW1wbGF0ZQorICAgIHBhcmFtZXRlciBAYSBOdW1iZXJJbnRlZ2VyVHlwZSB3
aGljaCBjaG9vc2VzIHRoZSB0eXBlIHRvIHVzZS4KKworICAgICMjIyMgRGVmYXVsdCB0eXBlCisK
KyAgICBXaXRoIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgQGEgTnVtYmVySW50ZWdlclR5cGUgKGBp
bnQ2NF90YCksIHRoZSBkZWZhdWx0CisgICAgdmFsdWUgZm9yIEBhIG51bWJlcl9pbnRlZ2VyX3Qg
aXM6CisKKyAgICBAY29kZSB7LmNwcH0KKyAgICBpbnQ2NF90CisgICAgQGVuZGNvZGUKKworICAg
ICMjIyMgRGVmYXVsdCBiZWhhdmlvcgorCisgICAgLSBUaGUgcmVzdHJpY3Rpb25zIGFib3V0IGxl
YWRpbmcgemVyb3MgaXMgbm90IGVuZm9yY2VkIGluIEMrKy4gSW5zdGVhZCwKKyAgICAgIGxlYWRp
bmcgemVyb3MgaW4gaW50ZWdlciBsaXRlcmFscyBsZWFkIHRvIGFuIGludGVycHJldGF0aW9uIGFz
IG9jdGFsCisgICAgICBudW1iZXIuIEludGVybmFsbHksIHRoZSB2YWx1ZSB3aWxsIGJlIHN0b3Jl
ZCBhcyBkZWNpbWFsIG51bWJlci4gRm9yCisgICAgICBpbnN0YW5jZSwgdGhlIEMrKyBpbnRlZ2Vy
IGxpdGVyYWwgYDAxMGAgd2lsbCBiZSBzZXJpYWxpemVkIHRvIGA4YC4KKyAgICAgIER1cmluZyBk
ZXNlcmlhbGl6YXRpb24sIGxlYWRpbmcgemVyb3MgeWllbGQgYW4gZXJyb3IuCisgICAgLSBOb3Qt
YS1udW1iZXIgKE5hTikgdmFsdWVzIHdpbGwgYmUgc2VyaWFsaXplZCB0byBgbnVsbGAuCisKKyAg
ICAjIyMjIExpbWl0cworCisgICAgW1JGQyA3MTU5XShodHRwOi8vcmZjNzE1OS5uZXQvcmZjNzE1
OSkgc3BlY2lmaWVzOgorICAgID4gQW4gaW1wbGVtZW50YXRpb24gbWF5IHNldCBsaW1pdHMgb24g
dGhlIHJhbmdlIGFuZCBwcmVjaXNpb24gb2YgbnVtYmVycy4KKworICAgIFdoZW4gdGhlIGRlZmF1
bHQgdHlwZSBpcyB1c2VkLCB0aGUgbWF4aW1hbCBpbnRlZ2VyIG51bWJlciB0aGF0IGNhbiBiZQor
ICAgIHN0b3JlZCBpcyBgOTIyMzM3MjAzNjg1NDc3NTgwN2AgKElOVDY0X01BWCkgYW5kIHRoZSBt
aW5pbWFsIGludGVnZXIgbnVtYmVyCisgICAgdGhhdCBjYW4gYmUgc3RvcmVkIGlzIGAtOTIyMzM3
MjAzNjg1NDc3NTgwOGAgKElOVDY0X01JTikuIEludGVnZXIgbnVtYmVycworICAgIHRoYXQgYXJl
IG91dCBvZiByYW5nZSB3aWxsIHlpZWxkIG92ZXIvdW5kZXJmbG93IHdoZW4gdXNlZCBpbiBhCisg
ICAgY29uc3RydWN0b3IuIER1cmluZyBkZXNlcmlhbGl6YXRpb24sIHRvbyBsYXJnZSBvciBzbWFs
bCBpbnRlZ2VyIG51bWJlcnMKKyAgICB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYmUgc3RvcmVkIGFz
IEByZWYgbnVtYmVyX3Vuc2lnbmVkX3Qgb3IgQHJlZgorICAgIG51bWJlcl9mbG9hdF90LgorCisg
ICAgW1JGQyA3MTU5XShodHRwOi8vcmZjNzE1OS5uZXQvcmZjNzE1OSkgZnVydGhlciBzdGF0ZXM6
CisgICAgPiBOb3RlIHRoYXQgd2hlbiBzdWNoIHNvZnR3YXJlIGlzIHVzZWQsIG51bWJlcnMgdGhh
dCBhcmUgaW50ZWdlcnMgYW5kIGFyZQorICAgID4gaW4gdGhlIHJhbmdlIFxmJFstMl57NTN9KzEs
IDJeezUzfS0xXVxmJCBhcmUgaW50ZXJvcGVyYWJsZSBpbiB0aGUgc2Vuc2UKKyAgICA+IHRoYXQg
aW1wbGVtZW50YXRpb25zIHdpbGwgYWdyZWUgZXhhY3RseSBvbiB0aGVpciBudW1lcmljIHZhbHVl
cy4KKworICAgIEFzIHRoaXMgcmFuZ2UgaXMgYSBzdWJyYW5nZSBvZiB0aGUgZXhhY3RseSBzdXBw
b3J0ZWQgcmFuZ2UgW0lOVDY0X01JTiwKKyAgICBJTlQ2NF9NQVhdLCB0aGlzIGNsYXNzJ3MgaW50
ZWdlciB0eXBlIGlzIGludGVyb3BlcmFibGUuCisKKyAgICAjIyMjIFN0b3JhZ2UKKworICAgIElu
dGVnZXIgbnVtYmVyIHZhbHVlcyBhcmUgc3RvcmVkIGRpcmVjdGx5IGluc2lkZSBhIEByZWYgYmFz
aWNfanNvbiB0eXBlLgorCisgICAgQHNhIEByZWYgbnVtYmVyX2Zsb2F0X3QgLS0gdHlwZSBmb3Ig
bnVtYmVyIHZhbHVlcyAoZmxvYXRpbmctcG9pbnQpCisKKyAgICBAc2EgQHJlZiBudW1iZXJfdW5z
aWduZWRfdCAtLSB0eXBlIGZvciBudW1iZXIgdmFsdWVzICh1bnNpZ25lZCBpbnRlZ2VyKQorCisg
ICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIHVzaW5nIG51bWJlcl9pbnRlZ2Vy
X3QgPSBOdW1iZXJJbnRlZ2VyVHlwZTsKKworICAgIC8qIQorICAgIEBicmllZiBhIHR5cGUgZm9y
IGEgbnVtYmVyICh1bnNpZ25lZCkKKworICAgIFtSRkMgNzE1OV0oaHR0cDovL3JmYzcxNTkubmV0
L3JmYzcxNTkpIGRlc2NyaWJlcyBudW1iZXJzIGFzIGZvbGxvd3M6CisgICAgPiBUaGUgcmVwcmVz
ZW50YXRpb24gb2YgbnVtYmVycyBpcyBzaW1pbGFyIHRvIHRoYXQgdXNlZCBpbiBtb3N0CisgICAg
PiBwcm9ncmFtbWluZyBsYW5ndWFnZXMuIEEgbnVtYmVyIGlzIHJlcHJlc2VudGVkIGluIGJhc2Ug
MTAgdXNpbmcgZGVjaW1hbAorICAgID4gZGlnaXRzLiBJdCBjb250YWlucyBhbiBpbnRlZ2VyIGNv
bXBvbmVudCB0aGF0IG1heSBiZSBwcmVmaXhlZCB3aXRoIGFuCisgICAgPiBvcHRpb25hbCBtaW51
cyBzaWduLCB3aGljaCBtYXkgYmUgZm9sbG93ZWQgYnkgYSBmcmFjdGlvbiBwYXJ0IGFuZC9vciBh
bgorICAgID4gZXhwb25lbnQgcGFydC4gTGVhZGluZyB6ZXJvcyBhcmUgbm90IGFsbG93ZWQuICgu
Li4pIE51bWVyaWMgdmFsdWVzIHRoYXQKKyAgICA+IGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiB0
aGUgZ3JhbW1hciBiZWxvdyAoc3VjaCBhcyBJbmZpbml0eSBhbmQgTmFOKQorICAgID4gYXJlIG5v
dCBwZXJtaXR0ZWQuCisKKyAgICBUaGlzIGRlc2NyaXB0aW9uIGluY2x1ZGVzIGJvdGggaW50ZWdl
ciBhbmQgZmxvYXRpbmctcG9pbnQgbnVtYmVycy4KKyAgICBIb3dldmVyLCBDKysgYWxsb3dzIG1v
cmUgcHJlY2lzZSBzdG9yYWdlIGlmIGl0IGlzIGtub3duIHdoZXRoZXIgdGhlIG51bWJlcgorICAg
IGlzIGEgc2lnbmVkIGludGVnZXIsIGFuIHVuc2lnbmVkIGludGVnZXIgb3IgYSBmbG9hdGluZy1w
b2ludCBudW1iZXIuCisgICAgVGhlcmVmb3JlLCB0aHJlZSBkaWZmZXJlbnQgdHlwZXMsIEByZWYg
bnVtYmVyX2ludGVnZXJfdCwgQHJlZgorICAgIG51bWJlcl91bnNpZ25lZF90IGFuZCBAcmVmIG51
bWJlcl9mbG9hdF90IGFyZSB1c2VkLgorCisgICAgVG8gc3RvcmUgdW5zaWduZWQgaW50ZWdlciBu
dW1iZXJzIGluIEMrKywgYSB0eXBlIGlzIGRlZmluZWQgYnkgdGhlCisgICAgdGVtcGxhdGUgcGFy
YW1ldGVyIEBhIE51bWJlclVuc2lnbmVkVHlwZSB3aGljaCBjaG9vc2VzIHRoZSB0eXBlIHRvIHVz
ZS4KKworICAgICMjIyMgRGVmYXVsdCB0eXBlCisKKyAgICBXaXRoIHRoZSBkZWZhdWx0IHZhbHVl
cyBmb3IgQGEgTnVtYmVyVW5zaWduZWRUeXBlIChgdWludDY0X3RgKSwgdGhlCisgICAgZGVmYXVs
dCB2YWx1ZSBmb3IgQGEgbnVtYmVyX3Vuc2lnbmVkX3QgaXM6CisKKyAgICBAY29kZSB7LmNwcH0K
KyAgICB1aW50NjRfdAorICAgIEBlbmRjb2RlCisKKyAgICAjIyMjIERlZmF1bHQgYmVoYXZpb3IK
KworICAgIC0gVGhlIHJlc3RyaWN0aW9ucyBhYm91dCBsZWFkaW5nIHplcm9zIGlzIG5vdCBlbmZv
cmNlZCBpbiBDKysuIEluc3RlYWQsCisgICAgICBsZWFkaW5nIHplcm9zIGluIGludGVnZXIgbGl0
ZXJhbHMgbGVhZCB0byBhbiBpbnRlcnByZXRhdGlvbiBhcyBvY3RhbAorICAgICAgbnVtYmVyLiBJ
bnRlcm5hbGx5LCB0aGUgdmFsdWUgd2lsbCBiZSBzdG9yZWQgYXMgZGVjaW1hbCBudW1iZXIuIEZv
cgorICAgICAgaW5zdGFuY2UsIHRoZSBDKysgaW50ZWdlciBsaXRlcmFsIGAwMTBgIHdpbGwgYmUg
c2VyaWFsaXplZCB0byBgOGAuCisgICAgICBEdXJpbmcgZGVzZXJpYWxpemF0aW9uLCBsZWFkaW5n
IHplcm9zIHlpZWxkIGFuIGVycm9yLgorICAgIC0gTm90LWEtbnVtYmVyIChOYU4pIHZhbHVlcyB3
aWxsIGJlIHNlcmlhbGl6ZWQgdG8gYG51bGxgLgorCisgICAgIyMjIyBMaW1pdHMKKworICAgIFtS
RkMgNzE1OV0oaHR0cDovL3JmYzcxNTkubmV0L3JmYzcxNTkpIHNwZWNpZmllczoKKyAgICA+IEFu
IGltcGxlbWVudGF0aW9uIG1heSBzZXQgbGltaXRzIG9uIHRoZSByYW5nZSBhbmQgcHJlY2lzaW9u
IG9mIG51bWJlcnMuCisKKyAgICBXaGVuIHRoZSBkZWZhdWx0IHR5cGUgaXMgdXNlZCwgdGhlIG1h
eGltYWwgaW50ZWdlciBudW1iZXIgdGhhdCBjYW4gYmUKKyAgICBzdG9yZWQgaXMgYDE4NDQ2NzQ0
MDczNzA5NTUxNjE1YCAoVUlOVDY0X01BWCkgYW5kIHRoZSBtaW5pbWFsIGludGVnZXIKKyAgICBu
dW1iZXIgdGhhdCBjYW4gYmUgc3RvcmVkIGlzIGAwYC4gSW50ZWdlciBudW1iZXJzIHRoYXQgYXJl
IG91dCBvZiByYW5nZQorICAgIHdpbGwgeWllbGQgb3Zlci91bmRlcmZsb3cgd2hlbiB1c2VkIGlu
IGEgY29uc3RydWN0b3IuIER1cmluZworICAgIGRlc2VyaWFsaXphdGlvbiwgdG9vIGxhcmdlIG9y
IHNtYWxsIGludGVnZXIgbnVtYmVycyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkKKyAgICBiZSBzdG9y
ZWQgYXMgQHJlZiBudW1iZXJfaW50ZWdlcl90IG9yIEByZWYgbnVtYmVyX2Zsb2F0X3QuCisKKyAg
ICBbUkZDIDcxNTldKGh0dHA6Ly9yZmM3MTU5Lm5ldC9yZmM3MTU5KSBmdXJ0aGVyIHN0YXRlczoK
KyAgICA+IE5vdGUgdGhhdCB3aGVuIHN1Y2ggc29mdHdhcmUgaXMgdXNlZCwgbnVtYmVycyB0aGF0
IGFyZSBpbnRlZ2VycyBhbmQgYXJlCisgICAgPiBpbiB0aGUgcmFuZ2UgXGYkWy0yXns1M30rMSwg
Ml57NTN9LTFdXGYkIGFyZSBpbnRlcm9wZXJhYmxlIGluIHRoZSBzZW5zZQorICAgID4gdGhhdCBp
bXBsZW1lbnRhdGlvbnMgd2lsbCBhZ3JlZSBleGFjdGx5IG9uIHRoZWlyIG51bWVyaWMgdmFsdWVz
LgorCisgICAgQXMgdGhpcyByYW5nZSBpcyBhIHN1YnJhbmdlICh3aGVuIGNvbnNpZGVyZWQgaW4g
Y29uanVuY3Rpb24gd2l0aCB0aGUKKyAgICBudW1iZXJfaW50ZWdlcl90IHR5cGUpIG9mIHRoZSBl
eGFjdGx5IHN1cHBvcnRlZCByYW5nZSBbMCwgVUlOVDY0X01BWF0sCisgICAgdGhpcyBjbGFzcydz
IGludGVnZXIgdHlwZSBpcyBpbnRlcm9wZXJhYmxlLgorCisgICAgIyMjIyBTdG9yYWdlCisKKyAg
ICBJbnRlZ2VyIG51bWJlciB2YWx1ZXMgYXJlIHN0b3JlZCBkaXJlY3RseSBpbnNpZGUgYSBAcmVm
IGJhc2ljX2pzb24gdHlwZS4KKworICAgIEBzYSBAcmVmIG51bWJlcl9mbG9hdF90IC0tIHR5cGUg
Zm9yIG51bWJlciB2YWx1ZXMgKGZsb2F0aW5nLXBvaW50KQorICAgIEBzYSBAcmVmIG51bWJlcl9p
bnRlZ2VyX3QgLS0gdHlwZSBmb3IgbnVtYmVyIHZhbHVlcyAoaW50ZWdlcikKKworICAgIEBzaW5j
ZSB2ZXJzaW9uIDIuMC4wCisgICAgKi8KKyAgICB1c2luZyBudW1iZXJfdW5zaWduZWRfdCA9IE51
bWJlclVuc2lnbmVkVHlwZTsKKworICAgIC8qIQorICAgIEBicmllZiBhIHR5cGUgZm9yIGEgbnVt
YmVyIChmbG9hdGluZy1wb2ludCkKKworICAgIFtSRkMgNzE1OV0oaHR0cDovL3JmYzcxNTkubmV0
L3JmYzcxNTkpIGRlc2NyaWJlcyBudW1iZXJzIGFzIGZvbGxvd3M6CisgICAgPiBUaGUgcmVwcmVz
ZW50YXRpb24gb2YgbnVtYmVycyBpcyBzaW1pbGFyIHRvIHRoYXQgdXNlZCBpbiBtb3N0CisgICAg
PiBwcm9ncmFtbWluZyBsYW5ndWFnZXMuIEEgbnVtYmVyIGlzIHJlcHJlc2VudGVkIGluIGJhc2Ug
MTAgdXNpbmcgZGVjaW1hbAorICAgID4gZGlnaXRzLiBJdCBjb250YWlucyBhbiBpbnRlZ2VyIGNv
bXBvbmVudCB0aGF0IG1heSBiZSBwcmVmaXhlZCB3aXRoIGFuCisgICAgPiBvcHRpb25hbCBtaW51
cyBzaWduLCB3aGljaCBtYXkgYmUgZm9sbG93ZWQgYnkgYSBmcmFjdGlvbiBwYXJ0IGFuZC9vciBh
bgorICAgID4gZXhwb25lbnQgcGFydC4gTGVhZGluZyB6ZXJvcyBhcmUgbm90IGFsbG93ZWQuICgu
Li4pIE51bWVyaWMgdmFsdWVzIHRoYXQKKyAgICA+IGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiB0
aGUgZ3JhbW1hciBiZWxvdyAoc3VjaCBhcyBJbmZpbml0eSBhbmQgTmFOKQorICAgID4gYXJlIG5v
dCBwZXJtaXR0ZWQuCisKKyAgICBUaGlzIGRlc2NyaXB0aW9uIGluY2x1ZGVzIGJvdGggaW50ZWdl
ciBhbmQgZmxvYXRpbmctcG9pbnQgbnVtYmVycy4KKyAgICBIb3dldmVyLCBDKysgYWxsb3dzIG1v
cmUgcHJlY2lzZSBzdG9yYWdlIGlmIGl0IGlzIGtub3duIHdoZXRoZXIgdGhlIG51bWJlcgorICAg
IGlzIGEgc2lnbmVkIGludGVnZXIsIGFuIHVuc2lnbmVkIGludGVnZXIgb3IgYSBmbG9hdGluZy1w
b2ludCBudW1iZXIuCisgICAgVGhlcmVmb3JlLCB0aHJlZSBkaWZmZXJlbnQgdHlwZXMsIEByZWYg
bnVtYmVyX2ludGVnZXJfdCwgQHJlZgorICAgIG51bWJlcl91bnNpZ25lZF90IGFuZCBAcmVmIG51
bWJlcl9mbG9hdF90IGFyZSB1c2VkLgorCisgICAgVG8gc3RvcmUgZmxvYXRpbmctcG9pbnQgbnVt
YmVycyBpbiBDKyssIGEgdHlwZSBpcyBkZWZpbmVkIGJ5IHRoZSB0ZW1wbGF0ZQorICAgIHBhcmFt
ZXRlciBAYSBOdW1iZXJGbG9hdFR5cGUgd2hpY2ggY2hvb3NlcyB0aGUgdHlwZSB0byB1c2UuCisK
KyAgICAjIyMjIERlZmF1bHQgdHlwZQorCisgICAgV2l0aCB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9y
IEBhIE51bWJlckZsb2F0VHlwZSAoYGRvdWJsZWApLCB0aGUgZGVmYXVsdAorICAgIHZhbHVlIGZv
ciBAYSBudW1iZXJfZmxvYXRfdCBpczoKKworICAgIEBjb2RlIHsuY3BwfQorICAgIGRvdWJsZQor
ICAgIEBlbmRjb2RlCisKKyAgICAjIyMjIERlZmF1bHQgYmVoYXZpb3IKKworICAgIC0gVGhlIHJl
c3RyaWN0aW9ucyBhYm91dCBsZWFkaW5nIHplcm9zIGlzIG5vdCBlbmZvcmNlZCBpbiBDKysuIElu
c3RlYWQsCisgICAgICBsZWFkaW5nIHplcm9zIGluIGZsb2F0aW5nLXBvaW50IGxpdGVyYWxzIHdp
bGwgYmUgaWdub3JlZC4gSW50ZXJuYWxseSwKKyAgICAgIHRoZSB2YWx1ZSB3aWxsIGJlIHN0b3Jl
ZCBhcyBkZWNpbWFsIG51bWJlci4gRm9yIGluc3RhbmNlLCB0aGUgQysrCisgICAgICBmbG9hdGlu
Zy1wb2ludCBsaXRlcmFsIGAwMS4yYCB3aWxsIGJlIHNlcmlhbGl6ZWQgdG8gYDEuMmAuIER1cmlu
ZworICAgICAgZGVzZXJpYWxpemF0aW9uLCBsZWFkaW5nIHplcm9zIHlpZWxkIGFuIGVycm9yLgor
ICAgIC0gTm90LWEtbnVtYmVyIChOYU4pIHZhbHVlcyB3aWxsIGJlIHNlcmlhbGl6ZWQgdG8gYG51
bGxgLgorCisgICAgIyMjIyBMaW1pdHMKKworICAgIFtSRkMgNzE1OV0oaHR0cDovL3JmYzcxNTku
bmV0L3JmYzcxNTkpIHN0YXRlczoKKyAgICA+IFRoaXMgc3BlY2lmaWNhdGlvbiBhbGxvd3MgaW1w
bGVtZW50YXRpb25zIHRvIHNldCBsaW1pdHMgb24gdGhlIHJhbmdlIGFuZAorICAgID4gcHJlY2lz
aW9uIG9mIG51bWJlcnMgYWNjZXB0ZWQuIFNpbmNlIHNvZnR3YXJlIHRoYXQgaW1wbGVtZW50cyBJ
RUVFCisgICAgPiA3NTQtMjAwOCBiaW5hcnk2NCAoZG91YmxlIHByZWNpc2lvbikgbnVtYmVycyBp
cyBnZW5lcmFsbHkgYXZhaWxhYmxlIGFuZAorICAgID4gd2lkZWx5IHVzZWQsIGdvb2QgaW50ZXJv
cGVyYWJpbGl0eSBjYW4gYmUgYWNoaWV2ZWQgYnkgaW1wbGVtZW50YXRpb25zCisgICAgPiB0aGF0
IGV4cGVjdCBubyBtb3JlIHByZWNpc2lvbiBvciByYW5nZSB0aGFuIHRoZXNlIHByb3ZpZGUsIGlu
IHRoZSBzZW5zZQorICAgID4gdGhhdCBpbXBsZW1lbnRhdGlvbnMgd2lsbCBhcHByb3hpbWF0ZSBK
U09OIG51bWJlcnMgd2l0aGluIHRoZSBleHBlY3RlZAorICAgID4gcHJlY2lzaW9uLgorCisgICAg
VGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzIGV4YWN0bHkgZm9sbG93IHRoaXMgYXBwcm9hY2gsIGFz
IGl0IHVzZXMgZG91YmxlCisgICAgcHJlY2lzaW9uIGZsb2F0aW5nLXBvaW50IG51bWJlcnMuIE5v
dGUgdmFsdWVzIHNtYWxsZXIgdGhhbgorICAgIGAtMS43OTc2OTMxMzQ4NjIzMmUrMzA4YCBhbmQg
dmFsdWVzIGdyZWF0ZXIgdGhhbiBgMS43OTc2OTMxMzQ4NjIzMmUrMzA4YAorICAgIHdpbGwgYmUg
c3RvcmVkIGFzIE5hTiBpbnRlcm5hbGx5IGFuZCBiZSBzZXJpYWxpemVkIHRvIGBudWxsYC4KKwor
ICAgICMjIyMgU3RvcmFnZQorCisgICAgRmxvYXRpbmctcG9pbnQgbnVtYmVyIHZhbHVlcyBhcmUg
c3RvcmVkIGRpcmVjdGx5IGluc2lkZSBhIEByZWYgYmFzaWNfanNvbgorICAgIHR5cGUuCisKKyAg
ICBAc2EgQHJlZiBudW1iZXJfaW50ZWdlcl90IC0tIHR5cGUgZm9yIG51bWJlciB2YWx1ZXMgKGlu
dGVnZXIpCisKKyAgICBAc2EgQHJlZiBudW1iZXJfdW5zaWduZWRfdCAtLSB0eXBlIGZvciBudW1i
ZXIgdmFsdWVzICh1bnNpZ25lZCBpbnRlZ2VyKQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAK
KyAgICAqLworICAgIHVzaW5nIG51bWJlcl9mbG9hdF90ID0gTnVtYmVyRmxvYXRUeXBlOworCisg
ICAgLy8vIEB9CisKKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIEpT
T04gdHlwZSBlbnVtZXJhdGlvbiAvLworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
CisgICAgLyohCisgICAgQGJyaWVmIHRoZSBKU09OIHR5cGUgZW51bWVyYXRpb24KKworICAgIFRo
aXMgZW51bWVyYXRpb24gY29sbGVjdHMgdGhlIGRpZmZlcmVudCBKU09OIHR5cGVzLiBJdCBpcyBp
bnRlcm5hbGx5IHVzZWQKKyAgICB0byBkaXN0aW5ndWlzaCB0aGUgc3RvcmVkIHZhbHVlcywgYW5k
IHRoZSBmdW5jdGlvbnMgQHJlZiBpc19udWxsKCksIEByZWYKKyAgICBpc19vYmplY3QoKSwgQHJl
ZiBpc19hcnJheSgpLCBAcmVmIGlzX3N0cmluZygpLCBAcmVmIGlzX2Jvb2xlYW4oKSwgQHJlZgor
ICAgIGlzX251bWJlcigpICh3aXRoIEByZWYgaXNfbnVtYmVyX2ludGVnZXIoKSwgQHJlZiBpc19u
dW1iZXJfdW5zaWduZWQoKSwgYW5kCisgICAgQHJlZiBpc19udW1iZXJfZmxvYXQoKSksIEByZWYg
aXNfZGlzY2FyZGVkKCksIEByZWYgaXNfcHJpbWl0aXZlKCksIGFuZAorICAgIEByZWYgaXNfc3Ry
dWN0dXJlZCgpIHJlbHkgb24gaXQuCisKKyAgICBAbm90ZSBUaGVyZSBhcmUgdGhyZWUgZW51bWVy
YXRpb24gZW50cmllcyAobnVtYmVyX2ludGVnZXIsCisgICAgbnVtYmVyX3Vuc2lnbmVkLCBhbmQg
bnVtYmVyX2Zsb2F0KSwgYmVjYXVzZSB0aGUgbGlicmFyeSBkaXN0aW5ndWlzaGVzCisgICAgdGhl
c2UgdGhyZWUgdHlwZXMgZm9yIG51bWJlcnM6IEByZWYgbnVtYmVyX3Vuc2lnbmVkX3QgaXMgdXNl
ZCBmb3IgdW5zaWduZWQKKyAgICBpbnRlZ2VycywgQHJlZiBudW1iZXJfaW50ZWdlcl90IGlzIHVz
ZWQgZm9yIHNpZ25lZCBpbnRlZ2VycywgYW5kIEByZWYKKyAgICBudW1iZXJfZmxvYXRfdCBpcyB1
c2VkIGZvciBmbG9hdGluZy1wb2ludCBudW1iZXJzIG9yIHRvIGFwcHJveGltYXRlCisgICAgaW50
ZWdlcnMgd2hpY2ggZG8gbm90IGZpdCBpbiB0aGUgbGltaXRzIG9mIHRoZWlyIHJlc3BlY3RpdmUg
dHlwZS4KKworICAgIEBzYSBAcmVmIGJhc2ljX2pzb24oY29uc3QgdmFsdWVfdCB2YWx1ZV90eXBl
KSAtLSBjcmVhdGUgYSBKU09OIHZhbHVlIHdpdGgKKyAgICB0aGUgZGVmYXVsdCB2YWx1ZSBmb3Ig
YSBnaXZlbiB0eXBlCisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgZW51
bSBjbGFzcyB2YWx1ZV90IDogdWludDhfdAorICAgIHsKKyAgICAgICAgbnVsbCwgICAgICAgICAg
ICAvLy88IG51bGwgdmFsdWUKKyAgICAgICAgb2JqZWN0LCAgICAgICAgICAvLy88IG9iamVjdCAo
dW5vcmRlcmVkIHNldCBvZiBuYW1lL3ZhbHVlIHBhaXJzKQorICAgICAgICBhcnJheSwgICAgICAg
ICAgIC8vLzwgYXJyYXkgKG9yZGVyZWQgY29sbGVjdGlvbiBvZiB2YWx1ZXMpCisgICAgICAgIHN0
cmluZywgICAgICAgICAgLy8vPCBzdHJpbmcgdmFsdWUKKyAgICAgICAgYm9vbGVhbiwgICAgICAg
ICAvLy88IGJvb2xlYW4gdmFsdWUKKyAgICAgICAgbnVtYmVyX2ludGVnZXIsICAvLy88IG51bWJl
ciB2YWx1ZSAoc2lnbmVkIGludGVnZXIpCisgICAgICAgIG51bWJlcl91bnNpZ25lZCwgLy8vPCBu
dW1iZXIgdmFsdWUgKHVuc2lnbmVkIGludGVnZXIpCisgICAgICAgIG51bWJlcl9mbG9hdCwgICAg
Ly8vPCBudW1iZXIgdmFsdWUgKGZsb2F0aW5nLXBvaW50KQorICAgICAgICBkaXNjYXJkZWQgICAg
ICAgIC8vLzwgZGlzY2FyZGVkIGJ5IHRoZSB0aGUgcGFyc2VyIGNhbGxiYWNrIGZ1bmN0aW9uCisg
ICAgfTsKKworCisgIHByaXZhdGU6CisKKyAgICAvLy8gaGVscGVyIGZvciBleGNlcHRpb24tc2Fm
ZSBvYmplY3QgY3JlYXRpb24KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBB
cmdzPgorICAgIHN0YXRpYyBUKiBjcmVhdGUoQXJncyYmIC4uLiBhcmdzKQorICAgIHsKKyAgICAg
ICAgQWxsb2NhdG9yVHlwZTxUPiBhbGxvYzsKKyAgICAgICAgYXV0byBkZWxldGVyID0gWyZdKFQg
KiBvYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFsbG9jLmRlYWxsb2NhdGUob2JqZWN0
LCAxKTsKKyAgICAgICAgfTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFQsIGRlY2x0eXBlKGRl
bGV0ZXIpPiBvYmplY3QoYWxsb2MuYWxsb2NhdGUoMSksIGRlbGV0ZXIpOworICAgICAgICBhbGxv
Yy5jb25zdHJ1Y3Qob2JqZWN0LmdldCgpLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwor
ICAgICAgICBhc3NlcnQob2JqZWN0LmdldCgpICE9IG51bGxwdHIpOworICAgICAgICByZXR1cm4g
b2JqZWN0LnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
KyAgICAvLyBKU09OIHZhbHVlIHN0b3JhZ2UgLy8KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KKworICAgIC8qIQorICAgIEBicmllZiBhIEpTT04gdmFsdWUKKworICAgIFRoZSBhY3R1YWwg
c3RvcmFnZSBmb3IgYSBKU09OIHZhbHVlIG9mIHRoZSBAcmVmIGJhc2ljX2pzb24gY2xhc3MuIFRo
aXMKKyAgICB1bmlvbiBjb21iaW5lcyB0aGUgZGlmZmVyZW50IHN0b3JhZ2UgdHlwZXMgZm9yIHRo
ZSBKU09OIHZhbHVlIHR5cGVzCisgICAgZGVmaW5lZCBpbiBAcmVmIHZhbHVlX3QuCisKKyAgICBK
U09OIHR5cGUgfCB2YWx1ZV90IHR5cGUgICAgfCB1c2VkIHR5cGUKKyAgICAtLS0tLS0tLS0gfCAt
LS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBvYmplY3QgICAg
fCBvYmplY3QgICAgICAgICAgfCBwb2ludGVyIHRvIEByZWYgb2JqZWN0X3QKKyAgICBhcnJheSAg
ICAgfCBhcnJheSAgICAgICAgICAgfCBwb2ludGVyIHRvIEByZWYgYXJyYXlfdAorICAgIHN0cmlu
ZyAgICB8IHN0cmluZyAgICAgICAgICB8IHBvaW50ZXIgdG8gQHJlZiBzdHJpbmdfdAorICAgIGJv
b2xlYW4gICB8IGJvb2xlYW4gICAgICAgICB8IEByZWYgYm9vbGVhbl90CisgICAgbnVtYmVyICAg
IHwgbnVtYmVyX2ludGVnZXIgIHwgQHJlZiBudW1iZXJfaW50ZWdlcl90CisgICAgbnVtYmVyICAg
IHwgbnVtYmVyX3Vuc2lnbmVkIHwgQHJlZiBudW1iZXJfdW5zaWduZWRfdAorICAgIG51bWJlciAg
ICB8IG51bWJlcl9mbG9hdCAgICB8IEByZWYgbnVtYmVyX2Zsb2F0X3QKKyAgICBudWxsICAgICAg
fCBudWxsICAgICAgICAgICAgfCAqbm8gdmFsdWUgaXMgc3RvcmVkKgorCisgICAgQG5vdGUgVmFy
aWFibGUtbGVuZ3RoIHR5cGVzIChvYmplY3RzLCBhcnJheXMsIGFuZCBzdHJpbmdzKSBhcmUgc3Rv
cmVkIGFzCisgICAgcG9pbnRlcnMuIFRoZSBzaXplIG9mIHRoZSB1bmlvbiBzaG91bGQgbm90IGV4
Y2VlZCA2NCBiaXRzIGlmIHRoZSBkZWZhdWx0CisgICAgdmFsdWUgdHlwZXMgYXJlIHVzZWQuCisK
KyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgdW5pb24ganNvbl92YWx1ZQor
ICAgIHsKKyAgICAgICAgLy8vIG9iamVjdCAoc3RvcmVkIHdpdGggcG9pbnRlciB0byBzYXZlIHN0
b3JhZ2UpCisgICAgICAgIG9iamVjdF90KiBvYmplY3Q7CisgICAgICAgIC8vLyBhcnJheSAoc3Rv
cmVkIHdpdGggcG9pbnRlciB0byBzYXZlIHN0b3JhZ2UpCisgICAgICAgIGFycmF5X3QqIGFycmF5
OworICAgICAgICAvLy8gc3RyaW5nIChzdG9yZWQgd2l0aCBwb2ludGVyIHRvIHNhdmUgc3RvcmFn
ZSkKKyAgICAgICAgc3RyaW5nX3QqIHN0cmluZzsKKyAgICAgICAgLy8vIGJvb2xlYW4KKyAgICAg
ICAgYm9vbGVhbl90IGJvb2xlYW47CisgICAgICAgIC8vLyBudW1iZXIgKGludGVnZXIpCisgICAg
ICAgIG51bWJlcl9pbnRlZ2VyX3QgbnVtYmVyX2ludGVnZXI7CisgICAgICAgIC8vLyBudW1iZXIg
KHVuc2lnbmVkIGludGVnZXIpCisgICAgICAgIG51bWJlcl91bnNpZ25lZF90IG51bWJlcl91bnNp
Z25lZDsKKyAgICAgICAgLy8vIG51bWJlciAoZmxvYXRpbmctcG9pbnQpCisgICAgICAgIG51bWJl
cl9mbG9hdF90IG51bWJlcl9mbG9hdDsKKworICAgICAgICAvLy8gZGVmYXVsdCBjb25zdHJ1Y3Rv
ciAoZm9yIG51bGwgdmFsdWVzKQorICAgICAgICBqc29uX3ZhbHVlKCkgPSBkZWZhdWx0OworICAg
ICAgICAvLy8gY29uc3RydWN0b3IgZm9yIGJvb2xlYW5zCisgICAgICAgIGpzb25fdmFsdWUoYm9v
bGVhbl90IHYpIG5vZXhjZXB0IDogYm9vbGVhbih2KSB7fQorICAgICAgICAvLy8gY29uc3RydWN0
b3IgZm9yIG51bWJlcnMgKGludGVnZXIpCisgICAgICAgIGpzb25fdmFsdWUobnVtYmVyX2ludGVn
ZXJfdCB2KSBub2V4Y2VwdCA6IG51bWJlcl9pbnRlZ2VyKHYpIHt9CisgICAgICAgIC8vLyBjb25z
dHJ1Y3RvciBmb3IgbnVtYmVycyAodW5zaWduZWQpCisgICAgICAgIGpzb25fdmFsdWUobnVtYmVy
X3Vuc2lnbmVkX3Qgdikgbm9leGNlcHQgOiBudW1iZXJfdW5zaWduZWQodikge30KKyAgICAgICAg
Ly8vIGNvbnN0cnVjdG9yIGZvciBudW1iZXJzIChmbG9hdGluZy1wb2ludCkKKyAgICAgICAganNv
bl92YWx1ZShudW1iZXJfZmxvYXRfdCB2KSBub2V4Y2VwdCA6IG51bWJlcl9mbG9hdCh2KSB7fQor
ICAgICAgICAvLy8gY29uc3RydWN0b3IgZm9yIGVtcHR5IHZhbHVlcyBvZiBhIGdpdmVuIHR5cGUK
KyAgICAgICAganNvbl92YWx1ZSh2YWx1ZV90IHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3
aXRjaCAodCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om9i
amVjdDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG9iamVjdCA9IGNy
ZWF0ZTxvYmplY3RfdD4oKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gY3JlYXRlPGFycmF5X3Q+KCk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGNhc2UgdmFsdWVfdDo6c3RyaW5nOgorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgc3RyaW5nID0gY3JlYXRlPHN0cmluZ190PigiIik7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNh
c2UgdmFsdWVfdDo6Ym9vbGVhbjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGJvb2xlYW4gPSBib29sZWFuX3QoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51
bWJlcl9pbnRlZ2VyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbnVt
YmVyX2ludGVnZXIgPSBudW1iZXJfaW50ZWdlcl90KDApOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6
Om51bWJlcl91bnNpZ25lZDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IG51bWJlcl91bnNpZ25lZCA9IG51bWJlcl91bnNpZ25lZF90KDApOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYXNlIHZh
bHVlX3Q6Om51bWJlcl9mbG9hdDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIG51bWJlcl9mbG9hdCA9IG51bWJlcl9mbG9hdF90KDAuMCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLy8gY29uc3Ry
dWN0b3IgZm9yIHN0cmluZ3MKKyAgICAgICAganNvbl92YWx1ZShjb25zdCBzdHJpbmdfdCYgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cmluZyA9IGNyZWF0ZTxzdHJpbmdfdD4odmFs
dWUpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIGNvbnN0cnVjdG9yIGZvciBvYmplY3RzCisg
ICAgICAgIGpzb25fdmFsdWUoY29uc3Qgb2JqZWN0X3QmIHZhbHVlKQorICAgICAgICB7CisgICAg
ICAgICAgICBvYmplY3QgPSBjcmVhdGU8b2JqZWN0X3Q+KHZhbHVlKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vLyBjb25zdHJ1Y3RvciBmb3IgYXJyYXlzCisgICAgICAgIGpzb25fdmFsdWUoY29u
c3QgYXJyYXlfdCYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFycmF5ID0gY3JlYXRl
PGFycmF5X3Q+KHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKiEKKyAgICBAYnJp
ZWYgY2hlY2tzIHRoZSBjbGFzcyBpbnZhcmlhbnRzCisKKyAgICBUaGlzIGZ1bmN0aW9uIGFzc2Vy
dHMgdGhlIGNsYXNzIGludmFyaWFudHMuIEl0IG5lZWRzIHRvIGJlIGNhbGxlZCBhdCB0aGUKKyAg
ICBlbmQgb2YgZXZlcnkgY29uc3RydWN0b3IgdG8gbWFrZSBzdXJlIHRoYXQgY3JlYXRlZCBvYmpl
Y3RzIHJlc3BlY3QgdGhlCisgICAgaW52YXJpYW50LiBGdXJ0aGVybW9yZSwgaXQgaGFzIHRvIGJl
IGNhbGxlZCBlYWNoIHRpbWUgdGhlIHR5cGUgb2YgYSBKU09OCisgICAgdmFsdWUgaXMgY2hhbmdl
ZCwgYmVjYXVzZSB0aGUgaW52YXJpYW50IGV4cHJlc3NlcyBhIHJlbGF0aW9uc2hpcCBiZXR3ZWVu
CisgICAgQGEgbV90eXBlIGFuZCBAYSBtX3ZhbHVlLgorICAgICovCisgICAgdm9pZCBhc3NlcnRf
aW52YXJpYW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIGFzc2VydChtX3R5cGUgIT0gdmFsdWVf
dDo6b2JqZWN0IG9yIG1fdmFsdWUub2JqZWN0ICE9IG51bGxwdHIpOworICAgICAgICBhc3NlcnQo
bV90eXBlICE9IHZhbHVlX3Q6OmFycmF5IG9yIG1fdmFsdWUuYXJyYXkgIT0gbnVsbHB0cik7Cisg
ICAgICAgIGFzc2VydChtX3R5cGUgIT0gdmFsdWVfdDo6c3RyaW5nIG9yIG1fdmFsdWUuc3RyaW5n
ICE9IG51bGxwdHIpOworICAgIH0KKworICBwdWJsaWM6CisgICAgLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKyAgICAvLyBKU09OIHBhcnNlciBjYWxsYmFjayAvLworICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCisKKyAgICAvKiEKKyAgICBAYnJpZWYgSlNPTiBjYWxsYmFjayBldmVu
dHMKKworICAgIFRoaXMgZW51bWVyYXRpb24gbGlzdHMgdGhlIHBhcnNlciBldmVudHMgdGhhdCBj
YW4gdHJpZ2dlciBjYWxsaW5nIGEKKyAgICBjYWxsYmFjayBmdW5jdGlvbiBvZiB0eXBlIEByZWYg
cGFyc2VyX2NhbGxiYWNrX3QgZHVyaW5nIHBhcnNpbmcuCisKKyAgICBAaW1hZ2UgaHRtbCBjYWxs
YmFja19ldmVudHMucG5nICJFeGFtcGxlIHdoZW4gY2VydGFpbiBwYXJzZSBldmVudHMgYXJlIHRy
aWdnZXJlZCIKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBlbnVtIGNs
YXNzIHBhcnNlX2V2ZW50X3QgOiB1aW50OF90CisgICAgeworICAgICAgICAvLy8gdGhlIHBhcnNl
ciByZWFkIGB7YCBhbmQgc3RhcnRlZCB0byBwcm9jZXNzIGEgSlNPTiBvYmplY3QKKyAgICAgICAg
b2JqZWN0X3N0YXJ0LAorICAgICAgICAvLy8gdGhlIHBhcnNlciByZWFkIGB9YCBhbmQgZmluaXNo
ZWQgcHJvY2Vzc2luZyBhIEpTT04gb2JqZWN0CisgICAgICAgIG9iamVjdF9lbmQsCisgICAgICAg
IC8vLyB0aGUgcGFyc2VyIHJlYWQgYFtgIGFuZCBzdGFydGVkIHRvIHByb2Nlc3MgYSBKU09OIGFy
cmF5CisgICAgICAgIGFycmF5X3N0YXJ0LAorICAgICAgICAvLy8gdGhlIHBhcnNlciByZWFkIGBd
YCBhbmQgZmluaXNoZWQgcHJvY2Vzc2luZyBhIEpTT04gYXJyYXkKKyAgICAgICAgYXJyYXlfZW5k
LAorICAgICAgICAvLy8gdGhlIHBhcnNlciByZWFkIGEga2V5IG9mIGEgdmFsdWUgaW4gYW4gb2Jq
ZWN0CisgICAgICAgIGtleSwKKyAgICAgICAgLy8vIHRoZSBwYXJzZXIgZmluaXNoZWQgcmVhZGlu
ZyBhIEpTT04gdmFsdWUKKyAgICAgICAgdmFsdWUKKyAgICB9OworCisgICAgLyohCisgICAgQGJy
aWVmIHBlci1lbGVtZW50IHBhcnNlciBjYWxsYmFjayB0eXBlCisKKyAgICBXaXRoIGEgcGFyc2Vy
IGNhbGxiYWNrIGZ1bmN0aW9uLCB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgYSBKU09OIHRleHQgY2Fu
IGJlCisgICAgaW5mbHVlbmNlZC4gV2hlbiBwYXNzZWQgdG8gQHJlZiBwYXJzZShzdGQ6OmlzdHJl
YW0mLCBjb25zdAorICAgIHBhcnNlcl9jYWxsYmFja190KSBvciBAcmVmIHBhcnNlKGNvbnN0IGNo
YXIqLCBjb25zdCBwYXJzZXJfY2FsbGJhY2tfdCksCisgICAgaXQgaXMgY2FsbGVkIG9uIGNlcnRh
aW4gZXZlbnRzIChwYXNzZWQgYXMgQHJlZiBwYXJzZV9ldmVudF90IHZpYSBwYXJhbWV0ZXIKKyAg
ICBAYSBldmVudCkgd2l0aCBhIHNldCByZWN1cnNpb24gZGVwdGggQGEgZGVwdGggYW5kIGNvbnRl
eHQgSlNPTiB2YWx1ZQorICAgIEBhIHBhcnNlZC4gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgY2Fs
bGJhY2sgZnVuY3Rpb24gaXMgYSBib29sZWFuCisgICAgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBl
bGVtZW50IHRoYXQgZW1pdHRlZCB0aGUgY2FsbGJhY2sgc2hhbGwgYmUga2VwdCBvcgorICAgIG5v
dC4KKworICAgIFdlIGRpc3Rpbmd1aXNoIHNpeCBzY2VuYXJpb3MgKGRldGVybWluZWQgYnkgdGhl
IGV2ZW50IHR5cGUpIGluIHdoaWNoIHRoZQorICAgIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbiBiZSBj
YWxsZWQuIFRoZSBmb2xsb3dpbmcgdGFibGUgZGVzY3JpYmVzIHRoZSB2YWx1ZXMKKyAgICBvZiB0
aGUgcGFyYW1ldGVycyBAYSBkZXB0aCwgQGEgZXZlbnQsIGFuZCBAYSBwYXJzZWQuCisKKyAgICBw
YXJhbWV0ZXIgQGEgZXZlbnQgfCBkZXNjcmlwdGlvbiB8IHBhcmFtZXRlciBAYSBkZXB0aCB8IHBh
cmFtZXRlciBAYSBwYXJzZWQKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLSB8
IC0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBwYXJzZV9ldmVu
dF90OjpvYmplY3Rfc3RhcnQgfCB0aGUgcGFyc2VyIHJlYWQgYHtgIGFuZCBzdGFydGVkIHRvIHBy
b2Nlc3MgYSBKU09OIG9iamVjdCB8IGRlcHRoIG9mIHRoZSBwYXJlbnQgb2YgdGhlIEpTT04gb2Jq
ZWN0IHwgYSBKU09OIHZhbHVlIHdpdGggdHlwZSBkaXNjYXJkZWQKKyAgICBwYXJzZV9ldmVudF90
OjprZXkgfCB0aGUgcGFyc2VyIHJlYWQgYSBrZXkgb2YgYSB2YWx1ZSBpbiBhbiBvYmplY3QgfCBk
ZXB0aCBvZiB0aGUgY3VycmVudGx5IHBhcnNlZCBKU09OIG9iamVjdCB8IGEgSlNPTiBzdHJpbmcg
Y29udGFpbmluZyB0aGUga2V5CisgICAgcGFyc2VfZXZlbnRfdDo6b2JqZWN0X2VuZCB8IHRoZSBw
YXJzZXIgcmVhZCBgfWAgYW5kIGZpbmlzaGVkIHByb2Nlc3NpbmcgYSBKU09OIG9iamVjdCB8IGRl
cHRoIG9mIHRoZSBwYXJlbnQgb2YgdGhlIEpTT04gb2JqZWN0IHwgdGhlIHBhcnNlZCBKU09OIG9i
amVjdAorICAgIHBhcnNlX2V2ZW50X3Q6OmFycmF5X3N0YXJ0IHwgdGhlIHBhcnNlciByZWFkIGBb
YCBhbmQgc3RhcnRlZCB0byBwcm9jZXNzIGEgSlNPTiBhcnJheSB8IGRlcHRoIG9mIHRoZSBwYXJl
bnQgb2YgdGhlIEpTT04gYXJyYXkgfCBhIEpTT04gdmFsdWUgd2l0aCB0eXBlIGRpc2NhcmRlZAor
ICAgIHBhcnNlX2V2ZW50X3Q6OmFycmF5X2VuZCB8IHRoZSBwYXJzZXIgcmVhZCBgXWAgYW5kIGZp
bmlzaGVkIHByb2Nlc3NpbmcgYSBKU09OIGFycmF5IHwgZGVwdGggb2YgdGhlIHBhcmVudCBvZiB0
aGUgSlNPTiBhcnJheSB8IHRoZSBwYXJzZWQgSlNPTiBhcnJheQorICAgIHBhcnNlX2V2ZW50X3Q6
OnZhbHVlIHwgdGhlIHBhcnNlciBmaW5pc2hlZCByZWFkaW5nIGEgSlNPTiB2YWx1ZSB8IGRlcHRo
IG9mIHRoZSB2YWx1ZSB8IHRoZSBwYXJzZWQgSlNPTiB2YWx1ZQorCisgICAgQGltYWdlIGh0bWwg
Y2FsbGJhY2tfZXZlbnRzLnBuZyAiRXhhbXBsZSB3aGVuIGNlcnRhaW4gcGFyc2UgZXZlbnRzIGFy
ZSB0cmlnZ2VyZWQiCisKKyAgICBEaXNjYXJkaW5nIGEgdmFsdWUgKGkuZS4sIHJldHVybmluZyBg
ZmFsc2VgKSBoYXMgZGlmZmVyZW50IGVmZmVjdHMKKyAgICBkZXBlbmRpbmcgb24gdGhlIGNvbnRl
eHQgaW4gd2hpY2ggZnVuY3Rpb24gd2FzIGNhbGxlZDoKKworICAgIC0gRGlzY2FyZGVkIHZhbHVl
cyBpbiBzdHJ1Y3R1cmVkIHR5cGVzIGFyZSBza2lwcGVkLiBUaGF0IGlzLCB0aGUgcGFyc2VyCisg
ICAgICB3aWxsIGJlaGF2ZSBhcyBpZiB0aGUgZGlzY2FyZGVkIHZhbHVlIHdhcyBuZXZlciByZWFk
LgorICAgIC0gSW4gY2FzZSBhIHZhbHVlIG91dHNpZGUgYSBzdHJ1Y3R1cmVkIHR5cGUgaXMgc2tp
cHBlZCwgaXQgaXMgcmVwbGFjZWQKKyAgICAgIHdpdGggYG51bGxgLiBUaGlzIGNhc2UgaGFwcGVu
cyBpZiB0aGUgdG9wLWxldmVsIGVsZW1lbnQgaXMgc2tpcHBlZC4KKworICAgIEBwYXJhbVtpbl0g
ZGVwdGggIHRoZSBkZXB0aCBvZiB0aGUgcmVjdXJzaW9uIGR1cmluZyBwYXJzaW5nCisKKyAgICBA
cGFyYW1baW5dIGV2ZW50ICBhbiBldmVudCBvZiB0eXBlIHBhcnNlX2V2ZW50X3QgaW5kaWNhdGlu
ZyB0aGUgY29udGV4dCBpbgorICAgIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBoYXMgYmVlbiBjYWxs
ZWQKKworICAgIEBwYXJhbVtpbixvdXRdIHBhcnNlZCAgdGhlIGN1cnJlbnQgaW50ZXJtZWRpYXRl
IHBhcnNlIHJlc3VsdDsgbm90ZSB0aGF0CisgICAgd3JpdGluZyB0byB0aGlzIHZhbHVlIGhhcyBu
byBlZmZlY3QgZm9yIHBhcnNlX2V2ZW50X3Q6OmtleSBldmVudHMKKworICAgIEByZXR1cm4gV2hl
dGhlciB0aGUgSlNPTiB2YWx1ZSB3aGljaCBjYWxsZWQgdGhlIGZ1bmN0aW9uIGR1cmluZyBwYXJz
aW5nCisgICAgc2hvdWxkIGJlIGtlcHQgKGB0cnVlYCkgb3Igbm90IChgZmFsc2VgKS4gSW4gdGhl
IGxhdHRlciBjYXNlLCBpdCBpcyBlaXRoZXIKKyAgICBza2lwcGVkIGNvbXBsZXRlbHkgb3IgcmVw
bGFjZWQgYnkgYW4gZW1wdHkgZGlzY2FyZGVkIG9iamVjdC4KKworICAgIEBzYSBAcmVmIHBhcnNl
KHN0ZDo6aXN0cmVhbSYsIHBhcnNlcl9jYWxsYmFja190KSBvcgorICAgIEByZWYgcGFyc2UoY29u
c3QgY2hhciosIHBhcnNlcl9jYWxsYmFja190KSBmb3IgZXhhbXBsZXMKKworICAgIEBzaW5jZSB2
ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICB1c2luZyBwYXJzZXJfY2FsbGJhY2tfdCA9IHN0ZDo6
ZnVuY3Rpb248Ym9vbChpbnQgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJzZV9ldmVudF90IGV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzaWNf
anNvbiYgcGFyc2VkKT47CisKKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIGNvbnN0
cnVjdG9ycyAvLworICAgIC8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgLy8vIEBuYW1lIGNvbnN0
cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMKKyAgICAvLy8gQ29uc3RydWN0b3JzIG9mIGNsYXNzIEBy
ZWYgYmFzaWNfanNvbiwgY29weS9tb3ZlIGNvbnN0cnVjdG9yLCBjb3B5CisgICAgLy8vIGFzc2ln
bm1lbnQsIHN0YXRpYyBmdW5jdGlvbnMgY3JlYXRpbmcgb2JqZWN0cywgYW5kIHRoZSBkZXN0cnVj
dG9yLgorICAgIC8vLyBAeworCisgICAgLyohCisgICAgQGJyaWVmIGNyZWF0ZSBhbiBlbXB0eSB2
YWx1ZSB3aXRoIGEgZ2l2ZW4gdHlwZQorCisgICAgQ3JlYXRlIGFuIGVtcHR5IEpTT04gdmFsdWUg
d2l0aCBhIGdpdmVuIHR5cGUuIFRoZSB2YWx1ZSB3aWxsIGJlIGRlZmF1bHQKKyAgICBpbml0aWFs
aXplZCB3aXRoIGFuIGVtcHR5IHZhbHVlIHdoaWNoIGRlcGVuZHMgb24gdGhlIHR5cGU6CisKKyAg
ICBWYWx1ZSB0eXBlICB8IGluaXRpYWwgdmFsdWUKKyAgICAtLS0tLS0tLS0tLSB8IC0tLS0tLS0t
LS0tLS0KKyAgICBudWxsICAgICAgICB8IGBudWxsYAorICAgIGJvb2xlYW4gICAgIHwgYGZhbHNl
YAorICAgIHN0cmluZyAgICAgIHwgYCIiYAorICAgIG51bWJlciAgICAgIHwgYDBgCisgICAgb2Jq
ZWN0ICAgICAgfCBge31gCisgICAgYXJyYXkgICAgICAgfCBgW11gCisKKyAgICBAcGFyYW1baW5d
IHZhbHVlX3R5cGUgIHRoZSB0eXBlIG9mIHRoZSB2YWx1ZSB0byBjcmVhdGUKKworICAgIEBjb21w
bGV4aXR5IENvbnN0YW50LgorCisgICAgQHRocm93IHN0ZDo6YmFkX2FsbG9jIGlmIGFsbG9jYXRp
b24gZm9yIG9iamVjdCwgYXJyYXksIG9yIHN0cmluZyB2YWx1ZQorICAgIGZhaWxzCisKKyAgICBA
bGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIHNob3dzIHRoZSBjb25zdHJ1Y3RvciBmb3Ig
ZGlmZmVyZW50IEByZWYKKyAgICB2YWx1ZV90IHZhbHVlcyxiYXNpY19qc29uX192YWx1ZV90fQor
CisgICAgQHNhIEByZWYgYmFzaWNfanNvbihzdGQ6Om51bGxwdHJfdCkgLS0gY3JlYXRlIGEgYG51
bGxgIHZhbHVlCisgICAgQHNhIEByZWYgYmFzaWNfanNvbihib29sZWFuX3QgdmFsdWUpIC0tIGNy
ZWF0ZSBhIGJvb2xlYW4gdmFsdWUKKyAgICBAc2EgQHJlZiBiYXNpY19qc29uKGNvbnN0IHN0cmlu
Z190JikgLS0gY3JlYXRlIGEgc3RyaW5nIHZhbHVlCisgICAgQHNhIEByZWYgYmFzaWNfanNvbihj
b25zdCBvYmplY3RfdCYpIC0tIGNyZWF0ZSBhIG9iamVjdCB2YWx1ZQorICAgIEBzYSBAcmVmIGJh
c2ljX2pzb24oY29uc3QgYXJyYXlfdCYpIC0tIGNyZWF0ZSBhIGFycmF5IHZhbHVlCisgICAgQHNh
IEByZWYgYmFzaWNfanNvbihjb25zdCBudW1iZXJfZmxvYXRfdCkgLS0gY3JlYXRlIGEgbnVtYmVy
CisgICAgKGZsb2F0aW5nLXBvaW50KSB2YWx1ZQorICAgIEBzYSBAcmVmIGJhc2ljX2pzb24oY29u
c3QgbnVtYmVyX2ludGVnZXJfdCkgLS0gY3JlYXRlIGEgbnVtYmVyIChpbnRlZ2VyKQorICAgIHZh
bHVlCisgICAgQHNhIEByZWYgYmFzaWNfanNvbihjb25zdCBudW1iZXJfdW5zaWduZWRfdCkgLS0g
Y3JlYXRlIGEgbnVtYmVyICh1bnNpZ25lZCkKKyAgICB2YWx1ZQorCisgICAgQHNpbmNlIHZlcnNp
b24gMS4wLjAKKyAgICAqLworICAgIGJhc2ljX2pzb24oY29uc3QgdmFsdWVfdCB2YWx1ZV90eXBl
KQorICAgICAgICA6IG1fdHlwZSh2YWx1ZV90eXBlKSwgbV92YWx1ZSh2YWx1ZV90eXBlKQorICAg
IHsKKyAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOworICAgIH0KKworICAgIC8qIQorICAgIEBi
cmllZiBjcmVhdGUgYSBudWxsIG9iamVjdAorCisgICAgQ3JlYXRlIGEgYG51bGxgIEpTT04gdmFs
dWUuIEl0IGVpdGhlciB0YWtlcyBhIG51bGwgcG9pbnRlciBhcyBwYXJhbWV0ZXIKKyAgICAoZXhw
bGljaXRseSBjcmVhdGluZyBgbnVsbGApIG9yIG5vIHBhcmFtZXRlciAoaW1wbGljaXRseSBjcmVh
dGluZyBgbnVsbGApLgorICAgIFRoZSBwYXNzZWQgbnVsbCBwb2ludGVyIGl0c2VsZiBpcyBub3Qg
cmVhZCAtLSBpdCBpcyBvbmx5IHVzZWQgdG8gY2hvb3NlCisgICAgdGhlIHJpZ2h0IGNvbnN0cnVj
dG9yLgorCisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAZXhjZXB0aW9uc2FmZXR5
IE5vLXRocm93IGd1YXJhbnRlZTogdGhpcyBjb25zdHJ1Y3RvciBuZXZlciB0aHJvd3MKKyAgICBl
eGNlcHRpb25zLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29kZSBzaG93cyB0
aGUgY29uc3RydWN0b3Igd2l0aCBhbmQgd2l0aG91dCBhCisgICAgbnVsbCBwb2ludGVyIHBhcmFt
ZXRlci4sYmFzaWNfanNvbl9fbnVsbHB0cl90fQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAK
KyAgICAqLworICAgIGJhc2ljX2pzb24oc3RkOjpudWxscHRyX3QgPSBudWxscHRyKSBub2V4Y2Vw
dAorICAgICAgICA6IGJhc2ljX2pzb24odmFsdWVfdDo6bnVsbCkKKyAgICB7CisgICAgICAgIGFz
c2VydF9pbnZhcmlhbnQoKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgY3JlYXRlIGFu
IG9iamVjdCAoZXhwbGljaXQpCisKKyAgICBDcmVhdGUgYW4gb2JqZWN0IEpTT04gdmFsdWUgd2l0
aCBhIGdpdmVuIGNvbnRlbnQuCisKKyAgICBAcGFyYW1baW5dIHZhbCAgYSB2YWx1ZSBmb3IgdGhl
IG9iamVjdAorCisgICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIHRoZSBzaXplIG9mIHRoZSBwYXNz
ZWQgQGEgdmFsLgorCisgICAgQHRocm93IHN0ZDo6YmFkX2FsbG9jIGlmIGFsbG9jYXRpb24gZm9y
IG9iamVjdCB2YWx1ZSBmYWlscworCisgICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29k
ZSBzaG93cyB0aGUgY29uc3RydWN0b3Igd2l0aCBhbiBAcmVmCisgICAgb2JqZWN0X3QgcGFyYW1l
dGVyLixiYXNpY19qc29uX19vYmplY3RfdH0KKworICAgIEBzYSBAcmVmIGJhc2ljX2pzb24oY29u
c3QgQ29tcGF0aWJsZU9iamVjdFR5cGUmKSAtLSBjcmVhdGUgYW4gb2JqZWN0IHZhbHVlCisgICAg
ZnJvbSBhIGNvbXBhdGlibGUgU1RMIGNvbnRhaW5lcgorCisgICAgQHNpbmNlIHZlcnNpb24gMS4w
LjAKKyAgICAqLworICAgIGJhc2ljX2pzb24oY29uc3Qgb2JqZWN0X3QmIHZhbCkKKyAgICAgICAg
OiBtX3R5cGUodmFsdWVfdDo6b2JqZWN0KSwgbV92YWx1ZSh2YWwpCisgICAgeworICAgICAgICBh
c3NlcnRfaW52YXJpYW50KCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGNyZWF0ZSBh
biBvYmplY3QgKGltcGxpY2l0KQorCisgICAgQ3JlYXRlIGFuIG9iamVjdCBKU09OIHZhbHVlIHdp
dGggYSBnaXZlbiBjb250ZW50LiBUaGlzIGNvbnN0cnVjdG9yIGFsbG93cworICAgIGFueSB0eXBl
IEBhIENvbXBhdGlibGVPYmplY3RUeXBlIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29uc3RydWN0IHZh
bHVlcyBvZgorICAgIHR5cGUgQHJlZiBvYmplY3RfdC4KKworICAgIEB0cGFyYW0gQ29tcGF0aWJs
ZU9iamVjdFR5cGUgQW4gb2JqZWN0IHR5cGUgd2hvc2UgYGtleV90eXBlYCBhbmQKKyAgICBgdmFs
dWVfdHlwZWAgaXMgY29tcGF0aWJsZSB0byBAcmVmIG9iamVjdF90LiBFeGFtcGxlcyBpbmNsdWRl
IGBzdGQ6Om1hcGAsCisgICAgYHN0ZDo6dW5vcmRlcmVkX21hcGAsIGBzdGQ6Om11bHRpbWFwYCwg
YW5kIGBzdGQ6OnVub3JkZXJlZF9tdWx0aW1hcGAgd2l0aAorICAgIGEgYGtleV90eXBlYCBvZiBg
c3RkOjpzdHJpbmdgLCBhbmQgYSBgdmFsdWVfdHlwZWAgZnJvbSB3aGljaCBhIEByZWYKKyAgICBi
YXNpY19qc29uIHZhbHVlIGNhbiBiZSBjb25zdHJ1Y3RlZC4KKworICAgIEBwYXJhbVtpbl0gdmFs
ICBhIHZhbHVlIGZvciB0aGUgb2JqZWN0CisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gdGhl
IHNpemUgb2YgdGhlIHBhc3NlZCBAYSB2YWwuCisKKyAgICBAdGhyb3cgc3RkOjpiYWRfYWxsb2Mg
aWYgYWxsb2NhdGlvbiBmb3Igb2JqZWN0IHZhbHVlIGZhaWxzCisKKyAgICBAbGl2ZWV4YW1wbGV7
VGhlIGZvbGxvd2luZyBjb2RlIHNob3dzIHRoZSBjb25zdHJ1Y3RvciB3aXRoIHNldmVyYWwKKyAg
ICBjb21wYXRpYmxlIG9iamVjdCB0eXBlIHBhcmFtZXRlcnMuLGJhc2ljX2pzb25fX0NvbXBhdGli
bGVPYmplY3RUeXBlfQorCisgICAgQHNhIEByZWYgYmFzaWNfanNvbihjb25zdCBvYmplY3RfdCYp
IC0tIGNyZWF0ZSBhbiBvYmplY3QgdmFsdWUKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisg
ICAgKi8KKyAgICB0ZW1wbGF0ZTxjbGFzcyBDb21wYXRpYmxlT2JqZWN0VHlwZSwgdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8CisgICAgICAgICAgICAgICAgIHN0ZDo6aXNfY29uc3RydWN0aWJsZTx0
eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUsIHR5cGVuYW1lIENvbXBhdGlibGVPYmplY3RUeXBl
OjprZXlfdHlwZT46OnZhbHVlIGFuZAorICAgICAgICAgICAgICAgICBzdGQ6OmlzX2NvbnN0cnVj
dGlibGU8YmFzaWNfanNvbiwgdHlwZW5hbWUgQ29tcGF0aWJsZU9iamVjdFR5cGU6Om1hcHBlZF90
eXBlPjo6dmFsdWUsIGludD46OnR5cGUgPSAwPgorICAgIGJhc2ljX2pzb24oY29uc3QgQ29tcGF0
aWJsZU9iamVjdFR5cGUmIHZhbCkKKyAgICAgICAgOiBtX3R5cGUodmFsdWVfdDo6b2JqZWN0KQor
ICAgIHsKKyAgICAgICAgdXNpbmcgc3RkOjpiZWdpbjsKKyAgICAgICAgdXNpbmcgc3RkOjplbmQ7
CisgICAgICAgIG1fdmFsdWUub2JqZWN0ID0gY3JlYXRlPG9iamVjdF90PihiZWdpbih2YWwpLCBl
bmQodmFsKSk7CisgICAgICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKKyAgICB9CisKKyAgICAvKiEK
KyAgICBAYnJpZWYgY3JlYXRlIGFuIGFycmF5IChleHBsaWNpdCkKKworICAgIENyZWF0ZSBhbiBh
cnJheSBKU09OIHZhbHVlIHdpdGggYSBnaXZlbiBjb250ZW50LgorCisgICAgQHBhcmFtW2luXSB2
YWwgIGEgdmFsdWUgZm9yIHRoZSBhcnJheQorCisgICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIHRo
ZSBzaXplIG9mIHRoZSBwYXNzZWQgQGEgdmFsLgorCisgICAgQHRocm93IHN0ZDo6YmFkX2FsbG9j
IGlmIGFsbG9jYXRpb24gZm9yIGFycmF5IHZhbHVlIGZhaWxzCisKKyAgICBAbGl2ZWV4YW1wbGV7
VGhlIGZvbGxvd2luZyBjb2RlIHNob3dzIHRoZSBjb25zdHJ1Y3RvciB3aXRoIGFuIEByZWYgYXJy
YXlfdAorICAgIHBhcmFtZXRlci4sYmFzaWNfanNvbl9fYXJyYXlfdH0KKworICAgIEBzYSBAcmVm
IGJhc2ljX2pzb24oY29uc3QgQ29tcGF0aWJsZUFycmF5VHlwZSYpIC0tIGNyZWF0ZSBhbiBhcnJh
eSB2YWx1ZQorICAgIGZyb20gYSBjb21wYXRpYmxlIFNUTCBjb250YWluZXJzCisKKyAgICBAc2lu
Y2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgYmFzaWNfanNvbihjb25zdCBhcnJheV90JiB2
YWwpCisgICAgICAgIDogbV90eXBlKHZhbHVlX3Q6OmFycmF5KSwgbV92YWx1ZSh2YWwpCisgICAg
eworICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJy
aWVmIGNyZWF0ZSBhbiBhcnJheSAoaW1wbGljaXQpCisKKyAgICBDcmVhdGUgYW4gYXJyYXkgSlNP
TiB2YWx1ZSB3aXRoIGEgZ2l2ZW4gY29udGVudC4gVGhpcyBjb25zdHJ1Y3RvciBhbGxvd3MKKyAg
ICBhbnkgdHlwZSBAYSBDb21wYXRpYmxlQXJyYXlUeXBlIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29u
c3RydWN0IHZhbHVlcyBvZgorICAgIHR5cGUgQHJlZiBhcnJheV90LgorCisgICAgQHRwYXJhbSBD
b21wYXRpYmxlQXJyYXlUeXBlIEFuIG9iamVjdCB0eXBlIHdob3NlIGB2YWx1ZV90eXBlYCBpcwor
ICAgIGNvbXBhdGlibGUgdG8gQHJlZiBhcnJheV90LiBFeGFtcGxlcyBpbmNsdWRlIGBzdGQ6OnZl
Y3RvcmAsIGBzdGQ6OmRlcXVlYCwKKyAgICBgc3RkOjpsaXN0YCwgYHN0ZDo6Zm9yd2FyZF9saXN0
YCwgYHN0ZDo6YXJyYXlgLCBgc3RkOjpzZXRgLAorICAgIGBzdGQ6OnVub3JkZXJlZF9zZXRgLCBg
c3RkOjptdWx0aXNldGAsIGFuZCBgdW5vcmRlcmVkX211bHRpc2V0YCB3aXRoIGEKKyAgICBgdmFs
dWVfdHlwZWAgZnJvbSB3aGljaCBhIEByZWYgYmFzaWNfanNvbiB2YWx1ZSBjYW4gYmUgY29uc3Ry
dWN0ZWQuCisKKyAgICBAcGFyYW1baW5dIHZhbCAgYSB2YWx1ZSBmb3IgdGhlIGFycmF5CisKKyAg
ICBAY29tcGxleGl0eSBMaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlIHBhc3NlZCBAYSB2YWwuCisK
KyAgICBAdGhyb3cgc3RkOjpiYWRfYWxsb2MgaWYgYWxsb2NhdGlvbiBmb3IgYXJyYXkgdmFsdWUg
ZmFpbHMKKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgdGhlIGNv
bnN0cnVjdG9yIHdpdGggc2V2ZXJhbAorICAgIGNvbXBhdGlibGUgYXJyYXkgdHlwZSBwYXJhbWV0
ZXJzLixiYXNpY19qc29uX19Db21wYXRpYmxlQXJyYXlUeXBlfQorCisgICAgQHNhIEByZWYgYmFz
aWNfanNvbihjb25zdCBhcnJheV90JikgLS0gY3JlYXRlIGFuIGFycmF5IHZhbHVlCisKKyAgICBA
c2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgdGVtcGxhdGU8Y2xhc3MgQ29tcGF0aWJs
ZUFycmF5VHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8CisgICAgICAgICAgICAgICAgIG5v
dCBzdGQ6OmlzX3NhbWU8Q29tcGF0aWJsZUFycmF5VHlwZSwgdHlwZW5hbWUgYmFzaWNfanNvbl90
OjppdGVyYXRvcj46OnZhbHVlIGFuZAorICAgICAgICAgICAgICAgICBub3Qgc3RkOjppc19zYW1l
PENvbXBhdGlibGVBcnJheVR5cGUsIHR5cGVuYW1lIGJhc2ljX2pzb25fdDo6Y29uc3RfaXRlcmF0
b3I+Ojp2YWx1ZSBhbmQKKyAgICAgICAgICAgICAgICAgbm90IHN0ZDo6aXNfc2FtZTxDb21wYXRp
YmxlQXJyYXlUeXBlLCB0eXBlbmFtZSBiYXNpY19qc29uX3Q6OnJldmVyc2VfaXRlcmF0b3I+Ojp2
YWx1ZSBhbmQKKyAgICAgICAgICAgICAgICAgbm90IHN0ZDo6aXNfc2FtZTxDb21wYXRpYmxlQXJy
YXlUeXBlLCB0eXBlbmFtZSBiYXNpY19qc29uX3Q6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3I+Ojp2
YWx1ZSBhbmQKKyAgICAgICAgICAgICAgICAgbm90IHN0ZDo6aXNfc2FtZTxDb21wYXRpYmxlQXJy
YXlUeXBlLCB0eXBlbmFtZSBhcnJheV90OjppdGVyYXRvcj46OnZhbHVlIGFuZAorICAgICAgICAg
ICAgICAgICBub3Qgc3RkOjppc19zYW1lPENvbXBhdGlibGVBcnJheVR5cGUsIHR5cGVuYW1lIGFy
cmF5X3Q6OmNvbnN0X2l0ZXJhdG9yPjo6dmFsdWUgYW5kCisgICAgICAgICAgICAgICAgIHN0ZDo6
aXNfY29uc3RydWN0aWJsZTxiYXNpY19qc29uLCB0eXBlbmFtZSBDb21wYXRpYmxlQXJyYXlUeXBl
Ojp2YWx1ZV90eXBlPjo6dmFsdWUsIGludD46OnR5cGUgPSAwPgorICAgIGJhc2ljX2pzb24oY29u
c3QgQ29tcGF0aWJsZUFycmF5VHlwZSYgdmFsKQorICAgICAgICA6IG1fdHlwZSh2YWx1ZV90Ojph
cnJheSkKKyAgICB7CisgICAgICAgIHVzaW5nIHN0ZDo6YmVnaW47CisgICAgICAgIHVzaW5nIHN0
ZDo6ZW5kOworICAgICAgICBtX3ZhbHVlLmFycmF5ID0gY3JlYXRlPGFycmF5X3Q+KGJlZ2luKHZh
bCksIGVuZCh2YWwpKTsKKyAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOworICAgIH0KKworICAg
IC8qIQorICAgIEBicmllZiBjcmVhdGUgYSBzdHJpbmcgKGV4cGxpY2l0KQorCisgICAgQ3JlYXRl
IGFuIHN0cmluZyBKU09OIHZhbHVlIHdpdGggYSBnaXZlbiBjb250ZW50LgorCisgICAgQHBhcmFt
W2luXSB2YWwgIGEgdmFsdWUgZm9yIHRoZSBzdHJpbmcKKworICAgIEBjb21wbGV4aXR5IExpbmVh
ciBpbiB0aGUgc2l6ZSBvZiB0aGUgcGFzc2VkIEBhIHZhbC4KKworICAgIEB0aHJvdyBzdGQ6OmJh
ZF9hbGxvYyBpZiBhbGxvY2F0aW9uIGZvciBzdHJpbmcgdmFsdWUgZmFpbHMKKworICAgIEBsaXZl
ZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgdGhlIGNvbnN0cnVjdG9yIHdpdGggYW4g
QHJlZgorICAgIHN0cmluZ190IHBhcmFtZXRlci4sYmFzaWNfanNvbl9fc3RyaW5nX3R9CisKKyAg
ICBAc2EgQHJlZiBiYXNpY19qc29uKGNvbnN0IHR5cGVuYW1lIHN0cmluZ190Ojp2YWx1ZV90eXBl
KikgLS0gY3JlYXRlIGEKKyAgICBzdHJpbmcgdmFsdWUgZnJvbSBhIGNoYXJhY3RlciBwb2ludGVy
CisgICAgQHNhIEByZWYgYmFzaWNfanNvbihjb25zdCBDb21wYXRpYmxlU3RyaW5nVHlwZSYpIC0t
IGNyZWF0ZSBhIHN0cmluZyB2YWx1ZQorICAgIGZyb20gYSBjb21wYXRpYmxlIHN0cmluZyBjb250
YWluZXIKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBiYXNpY19qc29u
KGNvbnN0IHN0cmluZ190JiB2YWwpCisgICAgICAgIDogbV90eXBlKHZhbHVlX3Q6OnN0cmluZyks
IG1fdmFsdWUodmFsKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOworICAgIH0K
KworICAgIC8qIQorICAgIEBicmllZiBjcmVhdGUgYSBzdHJpbmcgKGV4cGxpY2l0KQorCisgICAg
Q3JlYXRlIGEgc3RyaW5nIEpTT04gdmFsdWUgd2l0aCBhIGdpdmVuIGNvbnRlbnQuCisKKyAgICBA
cGFyYW1baW5dIHZhbCAgYSBsaXRlcmFsIHZhbHVlIGZvciB0aGUgc3RyaW5nCisKKyAgICBAY29t
cGxleGl0eSBMaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlIHBhc3NlZCBAYSB2YWwuCisKKyAgICBA
dGhyb3cgc3RkOjpiYWRfYWxsb2MgaWYgYWxsb2NhdGlvbiBmb3Igc3RyaW5nIHZhbHVlIGZhaWxz
CisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIHNob3dzIHRoZSBjb25zdHJ1
Y3RvciB3aXRoIHN0cmluZyBsaXRlcmFsCisgICAgcGFyYW1ldGVyLixiYXNpY19qc29uX19zdHJp
bmdfdF92YWx1ZV90eXBlfQorCisgICAgQHNhIEByZWYgYmFzaWNfanNvbihjb25zdCBzdHJpbmdf
dCYpIC0tIGNyZWF0ZSBhIHN0cmluZyB2YWx1ZQorICAgIEBzYSBAcmVmIGJhc2ljX2pzb24oY29u
c3QgQ29tcGF0aWJsZVN0cmluZ1R5cGUmKSAtLSBjcmVhdGUgYSBzdHJpbmcgdmFsdWUKKyAgICBm
cm9tIGEgY29tcGF0aWJsZSBzdHJpbmcgY29udGFpbmVyCisKKyAgICBAc2luY2UgdmVyc2lvbiAx
LjAuMAorICAgICovCisgICAgYmFzaWNfanNvbihjb25zdCB0eXBlbmFtZSBzdHJpbmdfdDo6dmFs
dWVfdHlwZSogdmFsKQorICAgICAgICA6IGJhc2ljX2pzb24oc3RyaW5nX3QodmFsKSkKKyAgICB7
CisgICAgICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKKyAgICB9CisKKyAgICBiYXNpY19qc29uKGNv
bnN0IHR5cGVuYW1lIHN0cmluZ190Ojp2YWx1ZV90eXBlKiB2YWwsIHR5cGVuYW1lIHN0cmluZ190
OjpzaXplX3R5cGUgY291bnQpCisgICAgICAgIDogYmFzaWNfanNvbihzdHJpbmdfdCh2YWwsIGNv
dW50KSkKKyAgICB7CisgICAgICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKKyAgICB9CisKKyAgICAv
KiEKKyAgICBAYnJpZWYgY3JlYXRlIGEgc3RyaW5nIChpbXBsaWNpdCkKKworICAgIENyZWF0ZSBh
IHN0cmluZyBKU09OIHZhbHVlIHdpdGggYSBnaXZlbiBjb250ZW50LgorCisgICAgQHBhcmFtW2lu
XSB2YWwgIGEgdmFsdWUgZm9yIHRoZSBzdHJpbmcKKworICAgIEB0cGFyYW0gQ29tcGF0aWJsZVN0
cmluZ1R5cGUgYW4gc3RyaW5nIHR5cGUgd2hpY2ggaXMgY29tcGF0aWJsZSB0byBAcmVmCisgICAg
c3RyaW5nX3QsIGZvciBpbnN0YW5jZSBgc3RkOjpzdHJpbmdgLgorCisgICAgQGNvbXBsZXhpdHkg
TGluZWFyIGluIHRoZSBzaXplIG9mIHRoZSBwYXNzZWQgQGEgdmFsLgorCisgICAgQHRocm93IHN0
ZDo6YmFkX2FsbG9jIGlmIGFsbG9jYXRpb24gZm9yIHN0cmluZyB2YWx1ZSBmYWlscworCisgICAg
QGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29kZSBzaG93cyB0aGUgY29uc3RydWN0aW9uIG9m
IGEgc3RyaW5nIHZhbHVlCisgICAgZnJvbSBhIGNvbXBhdGlibGUgdHlwZS4sYmFzaWNfanNvbl9f
Q29tcGF0aWJsZVN0cmluZ1R5cGV9CisKKyAgICBAc2EgQHJlZiBiYXNpY19qc29uKGNvbnN0IHN0
cmluZ190JikgLS0gY3JlYXRlIGEgc3RyaW5nIHZhbHVlCisgICAgQHNhIEByZWYgYmFzaWNfanNv
bihjb25zdCB0eXBlbmFtZSBzdHJpbmdfdDo6dmFsdWVfdHlwZSopIC0tIGNyZWF0ZSBhCisgICAg
c3RyaW5nIHZhbHVlIGZyb20gYSBjaGFyYWN0ZXIgcG9pbnRlcgorCisgICAgQHNpbmNlIHZlcnNp
b24gMS4wLjAKKyAgICAqLworICAgIHRlbXBsYXRlPGNsYXNzIENvbXBhdGlibGVTdHJpbmdUeXBl
LCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKKyAgICAgICAgICAgICAgICAgc3RkOjppc19jb25z
dHJ1Y3RpYmxlPHN0cmluZ190LCBDb21wYXRpYmxlU3RyaW5nVHlwZT46OnZhbHVlLCBpbnQ+Ojp0
eXBlID0gMD4KKyAgICBiYXNpY19qc29uKGNvbnN0IENvbXBhdGlibGVTdHJpbmdUeXBlJiB2YWwp
CisgICAgICAgIDogYmFzaWNfanNvbihzdHJpbmdfdCh2YWwpKQorICAgIHsKKyAgICAgICAgYXNz
ZXJ0X2ludmFyaWFudCgpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBjcmVhdGUgYSBi
b29sZWFuIChleHBsaWNpdCkKKworICAgIENyZWF0ZXMgYSBKU09OIGJvb2xlYW4gdHlwZSBmcm9t
IGEgZ2l2ZW4gdmFsdWUuCisKKyAgICBAcGFyYW1baW5dIHZhbCAgYSBib29sZWFuIHZhbHVlIHRv
IHN0b3JlCisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEBsaXZlZXhhbXBsZXtU
aGUgZXhhbXBsZSBiZWxvdyBkZW1vbnN0cmF0ZXMgYm9vbGVhbgorICAgIHZhbHVlcy4sYmFzaWNf
anNvbl9fYm9vbGVhbl90fQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAg
IGJhc2ljX2pzb24oYm9vbGVhbl90IHZhbCkgbm9leGNlcHQKKyAgICAgICAgOiBtX3R5cGUodmFs
dWVfdDo6Ym9vbGVhbiksIG1fdmFsdWUodmFsKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2ludmFy
aWFudCgpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBjcmVhdGUgYW4gaW50ZWdlciBu
dW1iZXIgKGV4cGxpY2l0KQorCisgICAgQ3JlYXRlIGFuIGludGVnZXIgbnVtYmVyIEpTT04gdmFs
dWUgd2l0aCBhIGdpdmVuIGNvbnRlbnQuCisKKyAgICBAdHBhcmFtIFQgQSBoZWxwZXIgdHlwZSB0
byByZW1vdmUgdGhpcyBmdW5jdGlvbiB2aWEgU0ZJTkFFIGluIGNhc2UgQHJlZgorICAgIG51bWJl
cl9pbnRlZ2VyX3QgaXMgdGhlIHNhbWUgYXMgYGludGAuIEluIHRoaXMgY2FzZSwgdGhpcyBjb25z
dHJ1Y3RvcgorICAgIHdvdWxkIGhhdmUgdGhlIHNhbWUgc2lnbmF0dXJlIGFzIEByZWYgYmFzaWNf
anNvbihjb25zdCBpbnQgdmFsdWUpLiBOb3RlCisgICAgdGhlIGhlbHBlciB0eXBlIEBhIFQgaXMg
bm90IHZpc2libGUgaW4gdGhpcyBjb25zdHJ1Y3RvcidzIGludGVyZmFjZS4KKworICAgIEBwYXJh
bVtpbl0gdmFsICBhbiBpbnRlZ2VyIHRvIGNyZWF0ZSBhIEpTT04gbnVtYmVyIGZyb20KKworICAg
IEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJl
bG93IHNob3dzIHRoZSBjb25zdHJ1Y3Rpb24gb2YgYW4gaW50ZWdlcgorICAgIG51bWJlciB2YWx1
ZS4sYmFzaWNfanNvbl9fbnVtYmVyX2ludGVnZXJfdH0KKworICAgIEBzYSBAcmVmIGJhc2ljX2pz
b24oY29uc3QgaW50KSAtLSBjcmVhdGUgYSBudW1iZXIgdmFsdWUgKGludGVnZXIpCisgICAgQHNh
IEByZWYgYmFzaWNfanNvbihjb25zdCBDb21wYXRpYmxlTnVtYmVySW50ZWdlclR5cGUpIC0tIGNy
ZWF0ZSBhIG51bWJlcgorICAgIHZhbHVlIChpbnRlZ2VyKSBmcm9tIGEgY29tcGF0aWJsZSBudW1i
ZXIgdHlwZQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAorICAgICAgICAgICAgICAgICBu
b3QgKHN0ZDo6aXNfc2FtZTxULCBpbnQ+Ojp2YWx1ZSkgYW5kCisgICAgICAgICAgICAgICAgIHN0
ZDo6aXNfc2FtZTxULCBudW1iZXJfaW50ZWdlcl90Pjo6dmFsdWUsIGludD46OnR5cGUgPSAwPgor
ICAgIGJhc2ljX2pzb24oY29uc3QgbnVtYmVyX2ludGVnZXJfdCB2YWwpIG5vZXhjZXB0CisgICAg
ICAgIDogbV90eXBlKHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyKSwgbV92YWx1ZSh2YWwpCisgICAg
eworICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJy
aWVmIGNyZWF0ZSBhbiBpbnRlZ2VyIG51bWJlciBmcm9tIGFuIGVudW0gdHlwZSAoZXhwbGljaXQp
CisKKyAgICBDcmVhdGUgYW4gaW50ZWdlciBudW1iZXIgSlNPTiB2YWx1ZSB3aXRoIGEgZ2l2ZW4g
Y29udGVudC4KKworICAgIEBwYXJhbVtpbl0gdmFsICBhbiBpbnRlZ2VyIHRvIGNyZWF0ZSBhIEpT
T04gbnVtYmVyIGZyb20KKworICAgIEBub3RlIFRoaXMgY29uc3RydWN0b3IgYWxsb3dzIHRvIHBh
c3MgZW51bXMgZGlyZWN0bHkgdG8gYSBjb25zdHJ1Y3Rvci4gQXMKKyAgICBDKysgaGFzIG5vIHdh
eSBvZiBzcGVjaWZ5aW5nIHRoZSB0eXBlIG9mIGFuIGFub255bW91cyBlbnVtIGV4cGxpY2l0bHks
IHdlCisgICAgY2FuIG9ubHkgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHN1Y2ggdmFsdWVzIGltcGxp
Y2l0bHkgY29udmVydCB0byBpbnQuIEFzCisgICAgaW50IG1heSBhbHJlYWR5IGJlIHRoZSBzYW1l
IHR5cGUgb2YgbnVtYmVyX2ludGVnZXJfdCwgd2UgbWF5IG5lZWQgdG8KKyAgICBzd2l0Y2ggb2Zm
IHRoZSBjb25zdHJ1Y3RvciBAcmVmIGJhc2ljX2pzb24oY29uc3QgbnVtYmVyX2ludGVnZXJfdCku
CisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhh
bXBsZSBiZWxvdyBzaG93cyB0aGUgY29uc3RydWN0aW9uIG9mIGFuIGludGVnZXIKKyAgICBudW1i
ZXIgdmFsdWUgZnJvbSBhbiBhbm9ueW1vdXMgZW51bS4sYmFzaWNfanNvbl9fY29uc3RfaW50fQor
CisgICAgQHNhIEByZWYgYmFzaWNfanNvbihjb25zdCBudW1iZXJfaW50ZWdlcl90KSAtLSBjcmVh
dGUgYSBudW1iZXIgdmFsdWUKKyAgICAoaW50ZWdlcikKKyAgICBAc2EgQHJlZiBiYXNpY19qc29u
KGNvbnN0IENvbXBhdGlibGVOdW1iZXJJbnRlZ2VyVHlwZSkgLS0gY3JlYXRlIGEgbnVtYmVyCisg
ICAgdmFsdWUgKGludGVnZXIpIGZyb20gYSBjb21wYXRpYmxlIG51bWJlciB0eXBlCisKKyAgICBA
c2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgYmFzaWNfanNvbihjb25zdCBpbnQgdmFs
KSBub2V4Y2VwdAorICAgICAgICA6IG1fdHlwZSh2YWx1ZV90OjpudW1iZXJfaW50ZWdlciksCisg
ICAgICAgICAgbV92YWx1ZShzdGF0aWNfY2FzdDxudW1iZXJfaW50ZWdlcl90Pih2YWwpKQorICAg
IHsKKyAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOworICAgIH0KKworICAgIC8qIQorICAgIEBi
cmllZiBjcmVhdGUgYW4gaW50ZWdlciBudW1iZXIgKGltcGxpY2l0KQorCisgICAgQ3JlYXRlIGFu
IGludGVnZXIgbnVtYmVyIEpTT04gdmFsdWUgd2l0aCBhIGdpdmVuIGNvbnRlbnQuIFRoaXMgY29u
c3RydWN0b3IKKyAgICBhbGxvd3MgYW55IHR5cGUgQGEgQ29tcGF0aWJsZU51bWJlckludGVnZXJU
eXBlIHRoYXQgY2FuIGJlIHVzZWQgdG8KKyAgICBjb25zdHJ1Y3QgdmFsdWVzIG9mIHR5cGUgQHJl
ZiBudW1iZXJfaW50ZWdlcl90LgorCisgICAgQHRwYXJhbSBDb21wYXRpYmxlTnVtYmVySW50ZWdl
clR5cGUgQW4gaW50ZWdlciB0eXBlIHdoaWNoIGlzIGNvbXBhdGlibGUgdG8KKyAgICBAcmVmIG51
bWJlcl9pbnRlZ2VyX3QuIEV4YW1wbGVzIGluY2x1ZGUgdGhlIHR5cGVzIGBpbnRgLCBgaW50MzJf
dGAsCisgICAgYGxvbmdgLCBhbmQgYHNob3J0YC4KKworICAgIEBwYXJhbVtpbl0gdmFsICBhbiBp
bnRlZ2VyIHRvIGNyZWF0ZSBhIEpTT04gbnVtYmVyIGZyb20KKworICAgIEBjb21wbGV4aXR5IENv
bnN0YW50LgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJlbG93IHNob3dzIHRoZSBj
b25zdHJ1Y3Rpb24gb2Ygc2V2ZXJhbCBpbnRlZ2VyCisgICAgbnVtYmVyIHZhbHVlcyBmcm9tIGNv
bXBhdGlibGUKKyAgICB0eXBlcy4sYmFzaWNfanNvbl9fQ29tcGF0aWJsZUludGVnZXJOdW1iZXJU
eXBlfQorCisgICAgQHNhIEByZWYgYmFzaWNfanNvbihjb25zdCBudW1iZXJfaW50ZWdlcl90KSAt
LSBjcmVhdGUgYSBudW1iZXIgdmFsdWUKKyAgICAoaW50ZWdlcikKKyAgICBAc2EgQHJlZiBiYXNp
Y19qc29uKGNvbnN0IGludCkgLS0gY3JlYXRlIGEgbnVtYmVyIHZhbHVlIChpbnRlZ2VyKQorCisg
ICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENv
bXBhdGlibGVOdW1iZXJJbnRlZ2VyVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8CisgICAg
ICAgICAgICAgICAgIHN0ZDo6aXNfY29uc3RydWN0aWJsZTxudW1iZXJfaW50ZWdlcl90LCBDb21w
YXRpYmxlTnVtYmVySW50ZWdlclR5cGU+Ojp2YWx1ZSBhbmQKKyAgICAgICAgICAgICAgICAgc3Rk
OjpudW1lcmljX2xpbWl0czxDb21wYXRpYmxlTnVtYmVySW50ZWdlclR5cGU+Ojppc19pbnRlZ2Vy
IGFuZAorICAgICAgICAgICAgICAgICBzdGQ6Om51bWVyaWNfbGltaXRzPENvbXBhdGlibGVOdW1i
ZXJJbnRlZ2VyVHlwZT46OmlzX3NpZ25lZCwKKyAgICAgICAgICAgICAgICAgQ29tcGF0aWJsZU51
bWJlckludGVnZXJUeXBlPjo6dHlwZSA9IDA+CisgICAgYmFzaWNfanNvbihjb25zdCBDb21wYXRp
YmxlTnVtYmVySW50ZWdlclR5cGUgdmFsKSBub2V4Y2VwdAorICAgICAgICA6IG1fdHlwZSh2YWx1
ZV90OjpudW1iZXJfaW50ZWdlciksCisgICAgICAgICAgbV92YWx1ZShzdGF0aWNfY2FzdDxudW1i
ZXJfaW50ZWdlcl90Pih2YWwpKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOwor
ICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBjcmVhdGUgYW4gdW5zaWduZWQgaW50ZWdlciBu
dW1iZXIgKGV4cGxpY2l0KQorCisgICAgQ3JlYXRlIGFuIHVuc2lnbmVkIGludGVnZXIgbnVtYmVy
IEpTT04gdmFsdWUgd2l0aCBhIGdpdmVuIGNvbnRlbnQuCisKKyAgICBAdHBhcmFtIFQgIGhlbHBl
ciB0eXBlIHRvIGNvbXBhcmUgbnVtYmVyX3Vuc2lnbmVkX3QgYW5kIHVuc2lnbmVkIGludCAobm90
CisgICAgdmlzaWJsZSBpbikgdGhlIGludGVyZmFjZS4KKworICAgIEBwYXJhbVtpbl0gdmFsICBh
biBpbnRlZ2VyIHRvIGNyZWF0ZSBhIEpTT04gbnVtYmVyIGZyb20KKworICAgIEBjb21wbGV4aXR5
IENvbnN0YW50LgorCisgICAgQHNhIEByZWYgYmFzaWNfanNvbihjb25zdCBDb21wYXRpYmxlTnVt
YmVyVW5zaWduZWRUeXBlKSAtLSBjcmVhdGUgYSBudW1iZXIKKyAgICB2YWx1ZSAodW5zaWduZWQg
aW50ZWdlcikgZnJvbSBhIGNvbXBhdGlibGUgbnVtYmVyIHR5cGUKKworICAgIEBzaW5jZSB2ZXJz
aW9uIDIuMC4wCisgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjwKKyAgICAgICAgICAgICAgICAgbm90IChzdGQ6OmlzX3NhbWU8VCwgaW50Pjo6
dmFsdWUpIGFuZAorICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8VCwgbnVtYmVyX3Vuc2ln
bmVkX3Q+Ojp2YWx1ZSwgaW50Pjo6dHlwZSA9IDA+CisgICAgYmFzaWNfanNvbihjb25zdCBudW1i
ZXJfdW5zaWduZWRfdCB2YWwpIG5vZXhjZXB0CisgICAgICAgIDogbV90eXBlKHZhbHVlX3Q6Om51
bWJlcl91bnNpZ25lZCksIG1fdmFsdWUodmFsKQorICAgIHsKKyAgICAgICAgYXNzZXJ0X2ludmFy
aWFudCgpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBjcmVhdGUgYW4gdW5zaWduZWQg
bnVtYmVyIChpbXBsaWNpdCkKKworICAgIENyZWF0ZSBhbiB1bnNpZ25lZCBudW1iZXIgSlNPTiB2
YWx1ZSB3aXRoIGEgZ2l2ZW4gY29udGVudC4gVGhpcworICAgIGNvbnN0cnVjdG9yIGFsbG93cyBh
bnkgdHlwZSBAYSBDb21wYXRpYmxlTnVtYmVyVW5zaWduZWRUeXBlIHRoYXQgY2FuIGJlCisgICAg
dXNlZCB0byBjb25zdHJ1Y3QgdmFsdWVzIG9mIHR5cGUgQHJlZiBudW1iZXJfdW5zaWduZWRfdC4K
KworICAgIEB0cGFyYW0gQ29tcGF0aWJsZU51bWJlclVuc2lnbmVkVHlwZSBBbiBpbnRlZ2VyIHR5
cGUgd2hpY2ggaXMgY29tcGF0aWJsZQorICAgIHRvIEByZWYgbnVtYmVyX3Vuc2lnbmVkX3QuIEV4
YW1wbGVzIG1heSBpbmNsdWRlIHRoZSB0eXBlcyBgdW5zaWduZWQgaW50YCwKKyAgICBgdWludDMy
X3RgLCBvciBgdW5zaWduZWQgc2hvcnRgLgorCisgICAgQHBhcmFtW2luXSB2YWwgIGFuIHVuc2ln
bmVkIGludGVnZXIgdG8gY3JlYXRlIGEgSlNPTiBudW1iZXIgZnJvbQorCisgICAgQGNvbXBsZXhp
dHkgQ29uc3RhbnQuCisKKyAgICBAc2EgQHJlZiBiYXNpY19qc29uKGNvbnN0IG51bWJlcl91bnNp
Z25lZF90KSAtLSBjcmVhdGUgYSBudW1iZXIgdmFsdWUKKyAgICAodW5zaWduZWQpCisKKyAgICBA
c2luY2UgdmVyc2lvbiAyLjAuMAorICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29tcGF0
aWJsZU51bWJlclVuc2lnbmVkVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWYgPAorICAgICAg
ICAgICAgICAgICBzdGQ6OmlzX2NvbnN0cnVjdGlibGU8bnVtYmVyX3Vuc2lnbmVkX3QsIENvbXBh
dGlibGVOdW1iZXJVbnNpZ25lZFR5cGU+Ojp2YWx1ZSBhbmQKKyAgICAgICAgICAgICAgICAgc3Rk
OjpudW1lcmljX2xpbWl0czxDb21wYXRpYmxlTnVtYmVyVW5zaWduZWRUeXBlPjo6aXNfaW50ZWdl
ciBhbmQKKyAgICAgICAgICAgICAgICAgbm90IHN0ZDo6bnVtZXJpY19saW1pdHM8Q29tcGF0aWJs
ZU51bWJlclVuc2lnbmVkVHlwZT46OmlzX3NpZ25lZCwKKyAgICAgICAgICAgICAgICAgQ29tcGF0
aWJsZU51bWJlclVuc2lnbmVkVHlwZT46OnR5cGUgPSAwPgorICAgIGJhc2ljX2pzb24oY29uc3Qg
Q29tcGF0aWJsZU51bWJlclVuc2lnbmVkVHlwZSB2YWwpIG5vZXhjZXB0CisgICAgICAgIDogbV90
eXBlKHZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZCksCisgICAgICAgICAgbV92YWx1ZShzdGF0aWNf
Y2FzdDxudW1iZXJfdW5zaWduZWRfdD4odmFsKSkKKyAgICB7CisgICAgICAgIGFzc2VydF9pbnZh
cmlhbnQoKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgY3JlYXRlIGEgZmxvYXRpbmct
cG9pbnQgbnVtYmVyIChleHBsaWNpdCkKKworICAgIENyZWF0ZSBhIGZsb2F0aW5nLXBvaW50IG51
bWJlciBKU09OIHZhbHVlIHdpdGggYSBnaXZlbiBjb250ZW50LgorCisgICAgQHBhcmFtW2luXSB2
YWwgIGEgZmxvYXRpbmctcG9pbnQgdmFsdWUgdG8gY3JlYXRlIGEgSlNPTiBudW1iZXIgZnJvbQor
CisgICAgQG5vdGUgW1JGQyA3MTU5XShodHRwOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3
MTU5LnR4dCksIHNlY3Rpb24gNgorICAgIGRpc2FsbG93cyBOYU4gdmFsdWVzOgorICAgID4gTnVt
ZXJpYyB2YWx1ZXMgdGhhdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gdGhlIGdyYW1tYXIgYmVs
b3cgKHN1Y2ggYXMKKyAgICA+IEluZmluaXR5IGFuZCBOYU4pIGFyZSBub3QgcGVybWl0dGVkLgor
ICAgIEluIGNhc2UgdGhlIHBhcmFtZXRlciBAYSB2YWwgaXMgbm90IGEgbnVtYmVyLCBhIEpTT04g
bnVsbCB2YWx1ZSBpcyBjcmVhdGVkCisgICAgaW5zdGVhZC4KKworICAgIEBjb21wbGV4aXR5IENv
bnN0YW50LgorCisgICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgZXhhbXBsZSBjcmVhdGVz
IHNldmVyYWwgZmxvYXRpbmctcG9pbnQKKyAgICB2YWx1ZXMuLGJhc2ljX2pzb25fX251bWJlcl9m
bG9hdF90fQorCisgICAgQHNhIEByZWYgYmFzaWNfanNvbihjb25zdCBDb21wYXRpYmxlTnVtYmVy
RmxvYXRUeXBlKSAtLSBjcmVhdGUgYSBudW1iZXIKKyAgICB2YWx1ZSAoZmxvYXRpbmctcG9pbnQp
IGZyb20gYSBjb21wYXRpYmxlIG51bWJlciB0eXBlCisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAu
MAorICAgICovCisgICAgYmFzaWNfanNvbihjb25zdCBudW1iZXJfZmxvYXRfdCB2YWwpIG5vZXhj
ZXB0CisgICAgICAgIDogbV90eXBlKHZhbHVlX3Q6Om51bWJlcl9mbG9hdCksIG1fdmFsdWUodmFs
KQorICAgIHsKKyAgICAgICAgLy8gcmVwbGFjZSBpbmZpbml0eSBhbmQgTkFOIGJ5IG51bGwKKyAg
ICAgICAgaWYgKG5vdCBzdGQ6OmlzZmluaXRlKHZhbCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1fdHlwZSA9IHZhbHVlX3Q6Om51bGw7CisgICAgICAgICAgICBtX3ZhbHVlID0ganNvbl92YWx1
ZSgpOworICAgICAgICB9CisKKyAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOworICAgIH0KKwor
ICAgIC8qIQorICAgIEBicmllZiBjcmVhdGUgYW4gZmxvYXRpbmctcG9pbnQgbnVtYmVyIChpbXBs
aWNpdCkKKworICAgIENyZWF0ZSBhbiBmbG9hdGluZy1wb2ludCBudW1iZXIgSlNPTiB2YWx1ZSB3
aXRoIGEgZ2l2ZW4gY29udGVudC4gVGhpcworICAgIGNvbnN0cnVjdG9yIGFsbG93cyBhbnkgdHlw
ZSBAYSBDb21wYXRpYmxlTnVtYmVyRmxvYXRUeXBlIHRoYXQgY2FuIGJlIHVzZWQKKyAgICB0byBj
b25zdHJ1Y3QgdmFsdWVzIG9mIHR5cGUgQHJlZiBudW1iZXJfZmxvYXRfdC4KKworICAgIEB0cGFy
YW0gQ29tcGF0aWJsZU51bWJlckZsb2F0VHlwZSBBIGZsb2F0aW5nLXBvaW50IHR5cGUgd2hpY2gg
aXMKKyAgICBjb21wYXRpYmxlIHRvIEByZWYgbnVtYmVyX2Zsb2F0X3QuIEV4YW1wbGVzIG1heSBp
bmNsdWRlIHRoZSB0eXBlcyBgZmxvYXRgCisgICAgb3IgYGRvdWJsZWAuCisKKyAgICBAcGFyYW1b
aW5dIHZhbCAgYSBmbG9hdGluZy1wb2ludCB0byBjcmVhdGUgYSBKU09OIG51bWJlciBmcm9tCisK
KyAgICBAbm90ZSBbUkZDIDcxNTldKGh0dHA6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzcx
NTkudHh0KSwgc2VjdGlvbiA2CisgICAgZGlzYWxsb3dzIE5hTiB2YWx1ZXM6CisgICAgPiBOdW1l
cmljIHZhbHVlcyB0aGF0IGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiB0aGUgZ3JhbW1hciBiZWxv
dyAoc3VjaCBhcworICAgID4gSW5maW5pdHkgYW5kIE5hTikgYXJlIG5vdCBwZXJtaXR0ZWQuCisg
ICAgSW4gY2FzZSB0aGUgcGFyYW1ldGVyIEBhIHZhbCBpcyBub3QgYSBudW1iZXIsIGEgSlNPTiBu
dWxsIHZhbHVlIGlzCisgICAgY3JlYXRlZCBpbnN0ZWFkLgorCisgICAgQGNvbXBsZXhpdHkgQ29u
c3RhbnQuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgdGhlIGNv
bnN0cnVjdGlvbiBvZiBzZXZlcmFsCisgICAgZmxvYXRpbmctcG9pbnQgbnVtYmVyIHZhbHVlcyBm
cm9tIGNvbXBhdGlibGUKKyAgICB0eXBlcy4sYmFzaWNfanNvbl9fQ29tcGF0aWJsZU51bWJlckZs
b2F0VHlwZX0KKworICAgIEBzYSBAcmVmIGJhc2ljX2pzb24oY29uc3QgbnVtYmVyX2Zsb2F0X3Qp
IC0tIGNyZWF0ZSBhIG51bWJlciB2YWx1ZQorICAgIChmbG9hdGluZy1wb2ludCkKKworICAgIEBz
aW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb21wYXRp
YmxlTnVtYmVyRmxvYXRUeXBlLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAor
ICAgICAgICAgICAgICAgICBzdGQ6OmlzX2NvbnN0cnVjdGlibGU8bnVtYmVyX2Zsb2F0X3QsIENv
bXBhdGlibGVOdW1iZXJGbG9hdFR5cGU+Ojp2YWx1ZSBhbmQKKyAgICAgICAgICAgICAgICAgc3Rk
Ojppc19mbG9hdGluZ19wb2ludDxDb21wYXRpYmxlTnVtYmVyRmxvYXRUeXBlPjo6dmFsdWU+Ojp0
eXBlPgorICAgIGJhc2ljX2pzb24oY29uc3QgQ29tcGF0aWJsZU51bWJlckZsb2F0VHlwZSB2YWwp
IG5vZXhjZXB0CisgICAgICAgIDogYmFzaWNfanNvbihudW1iZXJfZmxvYXRfdCh2YWwpKQorICAg
IHsKKyAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOworICAgIH0KKworICAgIC8qIQorICAgIEBi
cmllZiBjcmVhdGUgYSBjb250YWluZXIgKGFycmF5IG9yIG9iamVjdCkgZnJvbSBhbiBpbml0aWFs
aXplciBsaXN0CisKKyAgICBDcmVhdGVzIGEgSlNPTiB2YWx1ZSBvZiB0eXBlIGFycmF5IG9yIG9i
amVjdCBmcm9tIHRoZSBwYXNzZWQgaW5pdGlhbGl6ZXIKKyAgICBsaXN0IEBhIGluaXQuIEluIGNh
c2UgQGEgdHlwZV9kZWR1Y3Rpb24gaXMgYHRydWVgIChkZWZhdWx0KSwgdGhlIHR5cGUgb2YKKyAg
ICB0aGUgSlNPTiB2YWx1ZSB0byBiZSBjcmVhdGVkIGlzIGRlZHVjdGVkIGZyb20gdGhlIGluaXRp
YWxpemVyIGxpc3QgQGEgaW5pdAorICAgIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHJ1bGVz
OgorCisgICAgMS4gSWYgdGhlIGxpc3QgaXMgZW1wdHksIGFuIGVtcHR5IEpTT04gb2JqZWN0IHZh
bHVlIGB7fWAgaXMgY3JlYXRlZC4KKyAgICAyLiBJZiB0aGUgbGlzdCBjb25zaXN0cyBvZiBwYWly
cyB3aG9zZSBmaXJzdCBlbGVtZW50IGlzIGEgc3RyaW5nLCBhIEpTT04KKyAgICAgICBvYmplY3Qg
dmFsdWUgaXMgY3JlYXRlZCB3aGVyZSB0aGUgZmlyc3QgZWxlbWVudHMgb2YgdGhlIHBhaXJzIGFy
ZQorICAgICAgIHRyZWF0ZWQgYXMga2V5cyBhbmQgdGhlIHNlY29uZCBlbGVtZW50cyBhcmUgYXMg
dmFsdWVzLgorICAgIDMuIEluIGFsbCBvdGhlciBjYXNlcywgYW4gYXJyYXkgaXMgY3JlYXRlZC4K
KworICAgIFRoZSBydWxlcyBhaW0gdG8gY3JlYXRlIHRoZSBiZXN0IGZpdCBiZXR3ZWVuIGEgQysr
IGluaXRpYWxpemVyIGxpc3QgYW5kCisgICAgSlNPTiB2YWx1ZXMuIFRoZSByYXRpb25hbGUgaXMg
YXMgZm9sbG93czoKKworICAgIDEuIFRoZSBlbXB0eSBpbml0aWFsaXplciBsaXN0IGlzIHdyaXR0
ZW4gYXMgYHt9YCB3aGljaCBpcyBleGFjdGx5IGFuIGVtcHR5CisgICAgICAgSlNPTiBvYmplY3Qu
CisgICAgMi4gQysrIGhhcyBub3cgd2F5IG9mIGRlc2NyaWJpbmcgbWFwcGVkIHR5cGVzIG90aGVy
IHRoYW4gdG8gbGlzdCBhIGxpc3Qgb2YKKyAgICAgICBwYWlycy4gQXMgSlNPTiByZXF1aXJlcyB0
aGF0IGtleXMgbXVzdCBiZSBvZiB0eXBlIHN0cmluZywgcnVsZSAyIGlzIHRoZQorICAgICAgIHdl
YWtlc3QgY29uc3RyYWludCBvbmUgY2FuIHBvc2Ugb24gaW5pdGlhbGl6ZXIgbGlzdHMgdG8gaW50
ZXJwcmV0IHRoZW0KKyAgICAgICBhcyBhbiBvYmplY3QuCisgICAgMy4gSW4gYWxsIG90aGVyIGNh
c2VzLCB0aGUgaW5pdGlhbGl6ZXIgbGlzdCBjb3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMKKyAg
ICAgICBKU09OIG9iamVjdCB0eXBlLCBzbyBpbnRlcnByZXRpbmcgaXQgYXMgSlNPTiBhcnJheSB0
eXBlIGlzIHNhZmUuCisKKyAgICBXaXRoIHRoZSBydWxlcyBkZXNjcmliZWQgYWJvdmUsIHRoZSBm
b2xsb3dpbmcgSlNPTiB2YWx1ZXMgY2Fubm90IGJlCisgICAgZXhwcmVzc2VkIGJ5IGFuIGluaXRp
YWxpemVyIGxpc3Q6CisKKyAgICAtIHRoZSBlbXB0eSBhcnJheSAoYFtdYCk6IHVzZSBAcmVmIGFy
cmF5KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxiYXNpY19qc29uPikKKyAgICAgIHdpdGggYW4gZW1w
dHkgaW5pdGlhbGl6ZXIgbGlzdCBpbiB0aGlzIGNhc2UKKyAgICAtIGFycmF5cyB3aG9zZSBlbGVt
ZW50cyBzYXRpc2Z5IHJ1bGUgMjogdXNlIEByZWYKKyAgICAgIGFycmF5KHN0ZDo6aW5pdGlhbGl6
ZXJfbGlzdDxiYXNpY19qc29uPikgd2l0aCB0aGUgc2FtZSBpbml0aWFsaXplciBsaXN0CisgICAg
ICBpbiB0aGlzIGNhc2UKKworICAgIEBub3RlIFdoZW4gdXNlZCB3aXRob3V0IHBhcmVudGhlc2Vz
IGFyb3VuZCBhbiBlbXB0eSBpbml0aWFsaXplciBsaXN0LCBAcmVmCisgICAgYmFzaWNfanNvbigp
IGlzIGNhbGxlZCBpbnN0ZWFkIG9mIHRoaXMgZnVuY3Rpb24sIHlpZWxkaW5nIHRoZSBKU09OIG51
bGwKKyAgICB2YWx1ZS4KKworICAgIEBwYXJhbVtpbl0gaW5pdCAgaW5pdGlhbGl6ZXIgbGlzdCB3
aXRoIEpTT04gdmFsdWVzCisKKyAgICBAcGFyYW1baW5dIHR5cGVfZGVkdWN0aW9uIGludGVybmFs
IHBhcmFtZXRlcjsgd2hlbiBzZXQgdG8gYHRydWVgLCB0aGUgdHlwZQorICAgIG9mIHRoZSBKU09O
IHZhbHVlIGlzIGRlZHVjdGVkIGZyb20gdGhlIGluaXRpYWxpemVyIGxpc3QgQGEgaW5pdDsgd2hl
biBzZXQKKyAgICB0byBgZmFsc2VgLCB0aGUgdHlwZSBwcm92aWRlZCB2aWEgQGEgbWFudWFsX3R5
cGUgaXMgZm9yY2VkLiBUaGlzIG1vZGUgaXMKKyAgICB1c2VkIGJ5IHRoZSBmdW5jdGlvbnMgQHJl
ZiBhcnJheShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8YmFzaWNfanNvbj4pIGFuZAorICAgIEByZWYg
b2JqZWN0KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxiYXNpY19qc29uPikuCisKKyAgICBAcGFyYW1b
aW5dIG1hbnVhbF90eXBlIGludGVybmFsIHBhcmFtZXRlcjsgd2hlbiBAYSB0eXBlX2RlZHVjdGlv
biBpcyBzZXQKKyAgICB0byBgZmFsc2VgLCB0aGUgY3JlYXRlZCBKU09OIHZhbHVlIHdpbGwgdXNl
IHRoZSBwcm92aWRlZCB0eXBlIChvbmx5IEByZWYKKyAgICB2YWx1ZV90OjphcnJheSBhbmQgQHJl
ZiB2YWx1ZV90OjpvYmplY3QgYXJlIHZhbGlkKTsgd2hlbiBAYSB0eXBlX2RlZHVjdGlvbgorICAg
IGlzIHNldCB0byBgdHJ1ZWAsIHRoaXMgcGFyYW1ldGVyIGhhcyBubyBlZmZlY3QKKworICAgIEB0
aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBAYSB0eXBlX2RlZHVjdGlvbiBpcyBgZmFsc2VgLCBA
YSBtYW51YWxfdHlwZQorICAgIGlzIGB2YWx1ZV90OjpvYmplY3RgLCBidXQgQGEgaW5pdCBjb250
YWlucyBhbiBlbGVtZW50IHdoaWNoIGlzIG5vdCBhIHBhaXIKKyAgICB3aG9zZSBmaXJzdCBlbGVt
ZW50IGlzIGEgc3RyaW5nOyBleGFtcGxlOiBgImNhbm5vdCBjcmVhdGUgb2JqZWN0IGZyb20KKyAg
ICBpbml0aWFsaXplciBsaXN0ImAKKworICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgc2l6
ZSBvZiB0aGUgaW5pdGlhbGl6ZXIgbGlzdCBAYSBpbml0LgorCisgICAgQGxpdmVleGFtcGxle1Ro
ZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyBKU09OIHZhbHVlcyBhcmUgY3JlYXRlZCBmcm9tCisg
ICAgaW5pdGlhbGl6ZXIgbGlzdHMuLGJhc2ljX2pzb25fX2xpc3RfaW5pdF90fQorCisgICAgQHNh
IEByZWYgYXJyYXkoc3RkOjppbml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+KSAtLSBjcmVhdGUg
YSBKU09OIGFycmF5CisgICAgdmFsdWUgZnJvbSBhbiBpbml0aWFsaXplciBsaXN0CisgICAgQHNh
IEByZWYgb2JqZWN0KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxiYXNpY19qc29uPikgLS0gY3JlYXRl
IGEgSlNPTiBvYmplY3QKKyAgICB2YWx1ZSBmcm9tIGFuIGluaXRpYWxpemVyIGxpc3QKKworICAg
IEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBiYXNpY19qc29uKHN0ZDo6aW5pdGlh
bGl6ZXJfbGlzdDxiYXNpY19qc29uPiBpbml0LAorICAgICAgICAgICAgICAgYm9vbCB0eXBlX2Rl
ZHVjdGlvbiA9IHRydWUsCisgICAgICAgICAgICAgICB2YWx1ZV90IG1hbnVhbF90eXBlID0gdmFs
dWVfdDo6YXJyYXkpCisgICAgeworICAgICAgICAvLyBjaGVjayBpZiBlYWNoIGVsZW1lbnQgaXMg
YW4gYXJyYXkgd2l0aCB0d28gZWxlbWVudHMgd2hvc2UgZmlyc3QKKyAgICAgICAgLy8gZWxlbWVu
dCBpcyBhIHN0cmluZworICAgICAgICBib29sIGlzX2FuX29iamVjdCA9IHN0ZDo6YWxsX29mKGlu
aXQuYmVnaW4oKSwgaW5pdC5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBbXShjb25zdCBiYXNpY19qc29uICYgZWxlbWVudCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGVsZW1lbnQuaXNfYXJyYXkoKSBhbmQgZWxlbWVudC5zaXplKCkgPT0gMiBh
bmQgZWxlbWVudFswXS5pc19zdHJpbmcoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gYWRq
dXN0IHR5cGUgaWYgdHlwZSBkZWR1Y3Rpb24gaXMgbm90IHdhbnRlZAorICAgICAgICBpZiAobm90
IHR5cGVfZGVkdWN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBpZiBhcnJheSBpcyB3
YW50ZWQsIGRvIG5vdCBjcmVhdGUgYW4gb2JqZWN0IHRob3VnaCBwb3NzaWJsZQorICAgICAgICAg
ICAgaWYgKG1hbnVhbF90eXBlID09IHZhbHVlX3Q6OmFycmF5KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlzX2FuX29iamVjdCA9IGZhbHNlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBpZiBvYmplY3QgaXMgd2FudGVkIGJ1dCBpbXBvc3NpYmxlLCB0aHJvdyBhbiBl
eGNlcHRpb24KKyAgICAgICAgICAgIGlmIChtYW51YWxfdHlwZSA9PSB2YWx1ZV90OjpvYmplY3Qg
YW5kIG5vdCBpc19hbl9vYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVGhy
b3c8c3RkOjpkb21haW5fZXJyb3I+KCJjYW5ub3QgY3JlYXRlIG9iamVjdCBmcm9tIGluaXRpYWxp
emVyIGxpc3QiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc19h
bl9vYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHRoZSBpbml0aWFsaXplciBsaXN0
IGlzIGEgbGlzdCBvZiBwYWlycyAtPiBjcmVhdGUgb2JqZWN0CisgICAgICAgICAgICBtX3R5cGUg
PSB2YWx1ZV90OjpvYmplY3Q7CisgICAgICAgICAgICBtX3ZhbHVlID0gdmFsdWVfdDo6b2JqZWN0
OworCisgICAgICAgICAgICBzdGQ6OmZvcl9lYWNoKGluaXQuYmVnaW4oKSwgaW5pdC5lbmQoKSwg
W3RoaXNdKGNvbnN0IGJhc2ljX2pzb24gJiBlbGVtZW50KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG1fdmFsdWUub2JqZWN0LT5lbXBsYWNlKCooZWxlbWVudFswXS5tX3ZhbHVlLnN0
cmluZyksIGVsZW1lbnRbMV0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyB0aGUgaW5pdGlhbGl6ZXIgbGlzdCBkZXNj
cmliZXMgYW4gYXJyYXkgLT4gY3JlYXRlIGFycmF5CisgICAgICAgICAgICBtX3R5cGUgPSB2YWx1
ZV90OjphcnJheTsKKyAgICAgICAgICAgIG1fdmFsdWUuYXJyYXkgPSBjcmVhdGU8YXJyYXlfdD4o
aW5pdCk7CisgICAgICAgIH0KKworICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7CisgICAgfQor
CisgICAgLyohCisgICAgQGJyaWVmIGV4cGxpY2l0bHkgY3JlYXRlIGFuIGFycmF5IGZyb20gYW4g
aW5pdGlhbGl6ZXIgbGlzdAorCisgICAgQ3JlYXRlcyBhIEpTT04gYXJyYXkgdmFsdWUgZnJvbSBh
IGdpdmVuIGluaXRpYWxpemVyIGxpc3QuIFRoYXQgaXMsIGdpdmVuIGEKKyAgICBsaXN0IG9mIHZh
bHVlcyBgYSwgYiwgY2AsIGNyZWF0ZXMgdGhlIEpTT04gdmFsdWUgYFthLCBiLCBjXWAuIElmIHRo
ZQorICAgIGluaXRpYWxpemVyIGxpc3QgaXMgZW1wdHksIHRoZSBlbXB0eSBhcnJheSBgW11gIGlz
IGNyZWF0ZWQuCisKKyAgICBAbm90ZSBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgbmVlZGVkIHRvIGV4
cHJlc3MgdHdvIGVkZ2UgY2FzZXMgdGhhdCBjYW5ub3QKKyAgICBiZSByZWFsaXplZCB3aXRoIHRo
ZSBpbml0aWFsaXplciBsaXN0IGNvbnN0cnVjdG9yIChAcmVmCisgICAgYmFzaWNfanNvbihzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8YmFzaWNfanNvbj4sIGJvb2wsIHZhbHVlX3QpKS4gVGhlc2UgY2Fz
ZXMKKyAgICBhcmU6CisgICAgMS4gY3JlYXRpbmcgYW4gYXJyYXkgd2hvc2UgZWxlbWVudHMgYXJl
IGFsbCBwYWlycyB3aG9zZSBmaXJzdCBlbGVtZW50IGlzIGEKKyAgICBzdHJpbmcgLS0gaW4gdGhp
cyBjYXNlLCB0aGUgaW5pdGlhbGl6ZXIgbGlzdCBjb25zdHJ1Y3RvciB3b3VsZCBjcmVhdGUgYW4K
KyAgICBvYmplY3QsIHRha2luZyB0aGUgZmlyc3QgZWxlbWVudHMgYXMga2V5cworICAgIDIuIGNy
ZWF0aW5nIGFuIGVtcHR5IGFycmF5IC0tIHBhc3NpbmcgdGhlIGVtcHR5IGluaXRpYWxpemVyIGxp
c3QgdG8gdGhlCisgICAgaW5pdGlhbGl6ZXIgbGlzdCBjb25zdHJ1Y3RvciB5aWVsZHMgYW4gZW1w
dHkgb2JqZWN0CisKKyAgICBAcGFyYW1baW5dIGluaXQgIGluaXRpYWxpemVyIGxpc3Qgd2l0aCBK
U09OIHZhbHVlcyB0byBjcmVhdGUgYW4gYXJyYXkgZnJvbQorICAgIChvcHRpb25hbCkKKworICAg
IEByZXR1cm4gSlNPTiBhcnJheSB2YWx1ZQorCisgICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIHRo
ZSBzaXplIG9mIEBhIGluaXQuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2Rl
IHNob3dzIGFuIGV4YW1wbGUgZm9yIHRoZSBgYXJyYXlgCisgICAgZnVuY3Rpb24uLGFycmF5fQor
CisgICAgQHNhIEByZWYgYmFzaWNfanNvbihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8YmFzaWNfanNv
bj4sIGJvb2wsIHZhbHVlX3QpIC0tCisgICAgY3JlYXRlIGEgSlNPTiB2YWx1ZSBmcm9tIGFuIGlu
aXRpYWxpemVyIGxpc3QKKyAgICBAc2EgQHJlZiBvYmplY3Qoc3RkOjppbml0aWFsaXplcl9saXN0
PGJhc2ljX2pzb24+KSAtLSBjcmVhdGUgYSBKU09OIG9iamVjdAorICAgIHZhbHVlIGZyb20gYW4g
aW5pdGlhbGl6ZXIgbGlzdAorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAg
IHN0YXRpYyBiYXNpY19qc29uIGFycmF5KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxiYXNpY19qc29u
PiBpbml0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppbml0aWFsaXpl
cl9saXN0PGJhc2ljX2pzb24+KCkpCisgICAgeworICAgICAgICByZXR1cm4gYmFzaWNfanNvbihp
bml0LCBmYWxzZSwgdmFsdWVfdDo6YXJyYXkpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmll
ZiBleHBsaWNpdGx5IGNyZWF0ZSBhbiBvYmplY3QgZnJvbSBhbiBpbml0aWFsaXplciBsaXN0CisK
KyAgICBDcmVhdGVzIGEgSlNPTiBvYmplY3QgdmFsdWUgZnJvbSBhIGdpdmVuIGluaXRpYWxpemVy
IGxpc3QuIFRoZSBpbml0aWFsaXplcgorICAgIGxpc3RzIGVsZW1lbnRzIG11c3QgYmUgcGFpcnMs
IGFuZCB0aGVpciBmaXJzdCBlbGVtZW50cyBtdXN0IGJlIHN0cmluZ3MuIElmCisgICAgdGhlIGlu
aXRpYWxpemVyIGxpc3QgaXMgZW1wdHksIHRoZSBlbXB0eSBvYmplY3QgYHt9YCBpcyBjcmVhdGVk
LgorCisgICAgQG5vdGUgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGFkZGVkIGZvciBzeW1tZXRyeSBy
ZWFzb25zLiBJbiBjb250cmFzdCB0byB0aGUKKyAgICByZWxhdGVkIGZ1bmN0aW9uIEByZWYgYXJy
YXkoc3RkOjppbml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+KSwgdGhlcmUgYXJlCisgICAgbm8g
Y2FzZXMgd2hpY2ggY2FuIG9ubHkgYmUgZXhwcmVzc2VkIGJ5IHRoaXMgZnVuY3Rpb24uIFRoYXQg
aXMsIGFueQorICAgIGluaXRpYWxpemVyIGxpc3QgQGEgaW5pdCBjYW4gYWxzbyBiZSBwYXNzZWQg
dG8gdGhlIGluaXRpYWxpemVyIGxpc3QKKyAgICBjb25zdHJ1Y3RvciBAcmVmIGJhc2ljX2pzb24o
c3RkOjppbml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+LCBib29sLAorICAgIHZhbHVlX3QpLgor
CisgICAgQHBhcmFtW2luXSBpbml0ICBpbml0aWFsaXplciBsaXN0IHRvIGNyZWF0ZSBhbiBvYmpl
Y3QgZnJvbSAob3B0aW9uYWwpCisKKyAgICBAcmV0dXJuIEpTT04gb2JqZWN0IHZhbHVlCisKKyAg
ICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgQGEgaW5pdCBpcyBub3QgYSBwYWlyIHdob3Nl
IGZpcnN0IGVsZW1lbnRzIGFyZQorICAgIHN0cmluZ3M7IHRocm93biBieQorICAgIEByZWYgYmFz
aWNfanNvbihzdGQ6OmluaXRpYWxpemVyX2xpc3Q8YmFzaWNfanNvbj4sIGJvb2wsIHZhbHVlX3Qp
CisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gdGhlIHNpemUgb2YgQGEgaW5pdC4KKworICAg
IEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgYW4gZXhhbXBsZSBmb3IgdGhl
IGBvYmplY3RgCisgICAgZnVuY3Rpb24uLG9iamVjdH0KKworICAgIEBzYSBAcmVmIGJhc2ljX2pz
b24oc3RkOjppbml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+LCBib29sLCB2YWx1ZV90KSAtLQor
ICAgIGNyZWF0ZSBhIEpTT04gdmFsdWUgZnJvbSBhbiBpbml0aWFsaXplciBsaXN0CisgICAgQHNh
IEByZWYgYXJyYXkoc3RkOjppbml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+KSAtLSBjcmVhdGUg
YSBKU09OIGFycmF5CisgICAgdmFsdWUgZnJvbSBhbiBpbml0aWFsaXplciBsaXN0CisKKyAgICBA
c2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgc3RhdGljIGJhc2ljX2pzb24gb2JqZWN0
KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxiYXNpY19qc29uPiBpbml0ID0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxiYXNpY19qc29uPigpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGJhc2ljX2pzb24oaW5pdCwgZmFsc2UsIHZhbHVlX3Q6Om9i
amVjdCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGNvbnN0cnVjdCBhbiBhcnJheSB3
aXRoIGNvdW50IGNvcGllcyBvZiBnaXZlbiB2YWx1ZQorCisgICAgQ29uc3RydWN0cyBhIEpTT04g
YXJyYXkgdmFsdWUgYnkgY3JlYXRpbmcgQGEgY250IGNvcGllcyBvZiBhIHBhc3NlZCB2YWx1ZS4K
KyAgICBJbiBjYXNlIEBhIGNudCBpcyBgMGAsIGFuIGVtcHR5IGFycmF5IGlzIGNyZWF0ZWQuIEFz
IHBvc3Rjb25kaXRpb24sCisgICAgYHN0ZDo6ZGlzdGFuY2UoYmVnaW4oKSxlbmQoKSkgPT0gY250
YCBob2xkcy4KKworICAgIEBwYXJhbVtpbl0gY250ICB0aGUgbnVtYmVyIG9mIEpTT04gY29waWVz
IG9mIEBhIHZhbCB0byBjcmVhdGUKKyAgICBAcGFyYW1baW5dIHZhbCAgdGhlIEpTT04gdmFsdWUg
dG8gY29weQorCisgICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIEBhIGNudC4KKworICAgIEBsaXZl
ZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgZXhhbXBsZXMgZm9yIHRoZSBAcmVmCisg
ICAgYmFzaWNfanNvbihzaXplX3R5cGVcLCBjb25zdCBiYXNpY19qc29uJikKKyAgICBjb25zdHJ1
Y3Rvci4sYmFzaWNfanNvbl9fc2l6ZV90eXBlX2Jhc2ljX2pzb259CisKKyAgICBAc2luY2UgdmVy
c2lvbiAxLjAuMAorICAgICovCisgICAgYmFzaWNfanNvbihzaXplX3R5cGUgY250LCBjb25zdCBi
YXNpY19qc29uJiB2YWwpCisgICAgICAgIDogbV90eXBlKHZhbHVlX3Q6OmFycmF5KQorICAgIHsK
KyAgICAgICAgbV92YWx1ZS5hcnJheSA9IGNyZWF0ZTxhcnJheV90PihjbnQsIHZhbCk7CisgICAg
ICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgY29u
c3RydWN0IGEgSlNPTiBjb250YWluZXIgZ2l2ZW4gYW4gaXRlcmF0b3IgcmFuZ2UKKworICAgIENv
bnN0cnVjdHMgdGhlIEpTT04gdmFsdWUgd2l0aCB0aGUgY29udGVudHMgb2YgdGhlIHJhbmdlIGBb
Zmlyc3QsIGxhc3QpYC4KKyAgICBUaGUgc2VtYW50aWNzIGRlcGVuZHMgb24gdGhlIGRpZmZlcmVu
dCB0eXBlcyBhIEpTT04gdmFsdWUgY2FuIGhhdmU6CisgICAgLSBJbiBjYXNlIG9mIHByaW1pdGl2
ZSB0eXBlcyAobnVtYmVyLCBib29sZWFuLCBvciBzdHJpbmcpLCBAYSBmaXJzdCBtdXN0CisgICAg
ICBiZSBgYmVnaW4oKWAgYW5kIEBhIGxhc3QgbXVzdCBiZSBgZW5kKClgLiBJbiB0aGlzIGNhc2Us
IHRoZSB2YWx1ZSBpcworICAgICAgY29waWVkLiBPdGhlcndpc2UsIHN0ZDo6b3V0X29mX3Jhbmdl
IGlzIHRocm93bi4KKyAgICAtIEluIGNhc2Ugb2Ygc3RydWN0dXJlZCB0eXBlcyAoYXJyYXksIG9i
amVjdCksIHRoZSBjb25zdHJ1Y3RvciBiZWhhdmVzIGFzCisgICAgICBzaW1pbGFyIHZlcnNpb25z
IGZvciBgc3RkOjp2ZWN0b3JgLgorICAgIC0gSW4gY2FzZSBvZiBhIG51bGwgdHlwZSwgc3RkOjpk
b21haW5fZXJyb3IgaXMgdGhyb3duLgorCisgICAgQHRwYXJhbSBJbnB1dElUIGFuIGlucHV0IGl0
ZXJhdG9yIHR5cGUgKEByZWYgaXRlcmF0b3Igb3IgQHJlZgorICAgIGNvbnN0X2l0ZXJhdG9yKQor
CisgICAgQHBhcmFtW2luXSBmaXJzdCBiZWdpbiBvZiB0aGUgcmFuZ2UgdG8gY29weSBmcm9tIChp
bmNsdWRlZCkKKyAgICBAcGFyYW1baW5dIGxhc3QgZW5kIG9mIHRoZSByYW5nZSB0byBjb3B5IGZy
b20gKGV4Y2x1ZGVkKQorCisgICAgQHByZSBJdGVyYXRvcnMgQGEgZmlyc3QgYW5kIEBhIGxhc3Qg
bXVzdCBiZSBpbml0aWFsaXplZC4gKipUaGlzCisgICAgICAgICBwcmVjb25kaXRpb24gaXMgZW5m
b3JjZWQgd2l0aCBhbiBhc3NlcnRpb24uKioKKworICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJv
ciBpZiBpdGVyYXRvcnMgYXJlIG5vdCBjb21wYXRpYmxlOyB0aGF0IGlzLCBkbyBub3QKKyAgICBi
ZWxvbmcgdG8gdGhlIHNhbWUgSlNPTiB2YWx1ZTsgZXhhbXBsZTogYCJpdGVyYXRvcnMgYXJlIG5v
dCBjb21wYXRpYmxlImAKKyAgICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2UgaWYgaXRlcmF0b3Jz
IGFyZSBmb3IgYSBwcmltaXRpdmUgdHlwZSAobnVtYmVyLAorICAgIGJvb2xlYW4sIG9yIHN0cmlu
Zykgd2hlcmUgYW4gb3V0IG9mIHJhbmdlIGVycm9yIGNhbiBiZSBkZXRlY3RlZCBlYXNpbHk7Cisg
ICAgZXhhbXBsZTogYCJpdGVyYXRvcnMgb3V0IG9mIHJhbmdlImAKKyAgICBAdGhyb3cgc3RkOjpi
YWRfYWxsb2MgaWYgYWxsb2NhdGlvbiBmb3Igb2JqZWN0LCBhcnJheSwgb3Igc3RyaW5nIGZhaWxz
CisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIGNhbGxlZCB3aXRoIGEgbnVsbCB2YWx1
ZTsgZXhhbXBsZTogYCJjYW5ub3QKKyAgICB1c2UgY29uc3RydWN0IHdpdGggaXRlcmF0b3JzIGZy
b20gbnVsbCJgCisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gZGlzdGFuY2UgYmV0d2VlbiBA
YSBmaXJzdCBhbmQgQGEgbGFzdC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBiZWxv
dyBzaG93cyBzZXZlcmFsIHdheXMgdG8gY3JlYXRlIEpTT04gdmFsdWVzIGJ5CisgICAgc3BlY2lm
eWluZyBhIHN1YnJhbmdlIHdpdGggaXRlcmF0b3JzLixiYXNpY19qc29uX19JbnB1dEl0X0lucHV0
SXR9CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgdGVtcGxhdGU8Y2xh
c3MgSW5wdXRJVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8CisgICAgICAgICAgICAgICAgIHN0
ZDo6aXNfc2FtZTxJbnB1dElULCB0eXBlbmFtZSBiYXNpY19qc29uX3Q6Oml0ZXJhdG9yPjo6dmFs
dWUgb3IKKyAgICAgICAgICAgICAgICAgc3RkOjppc19zYW1lPElucHV0SVQsIHR5cGVuYW1lIGJh
c2ljX2pzb25fdDo6Y29uc3RfaXRlcmF0b3I+Ojp2YWx1ZSwgaW50Pjo6dHlwZSA9IDA+CisgICAg
YmFzaWNfanNvbihJbnB1dElUIGZpcnN0LCBJbnB1dElUIGxhc3QpCisgICAgeworICAgICAgICBh
c3NlcnQoZmlyc3QubV9vYmplY3QgIT0gbnVsbHB0cik7CisgICAgICAgIGFzc2VydChsYXN0Lm1f
b2JqZWN0ICE9IG51bGxwdHIpOworCisgICAgICAgIC8vIG1ha2Ugc3VyZSBpdGVyYXRvciBmaXRz
IHRoZSBjdXJyZW50IHZhbHVlCisgICAgICAgIGlmIChmaXJzdC5tX29iamVjdCAhPSBsYXN0Lm1f
b2JqZWN0KQorICAgICAgICB7CisgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4o
Iml0ZXJhdG9ycyBhcmUgbm90IGNvbXBhdGlibGUiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IGNvcHkgdHlwZSBmcm9tIGZpcnN0IGl0ZXJhdG9yCisgICAgICAgIG1fdHlwZSA9IGZpcnN0Lm1f
b2JqZWN0LT5tX3R5cGU7CisKKyAgICAgICAgLy8gY2hlY2sgaWYgaXRlcmF0b3IgcmFuZ2UgaXMg
Y29tcGxldGUgZm9yIHByaW1pdGl2ZSB2YWx1ZXMKKyAgICAgICAgc3dpdGNoIChtX3R5cGUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6Ym9vbGVhbjoKKyAgICAgICAgICAg
IGNhc2UgdmFsdWVfdDo6bnVtYmVyX2Zsb2F0OgorICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpu
dW1iZXJfaW50ZWdlcjoKKyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVk
OgorICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpzdHJpbmc6CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaWYgKG5vdCBmaXJzdC5tX2l0LnByaW1pdGl2ZV9pdGVyYXRvci5pc19iZWdp
bigpIG9yIG5vdCBsYXN0Lm1faXQucHJpbWl0aXZlX2l0ZXJhdG9yLmlzX2VuZCgpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjpvdXRfb2ZfcmFuZ2U+
KCJpdGVyYXRvcnMgb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgc3dpdGNoIChtX3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNh
c2UgdmFsdWVfdDo6bnVtYmVyX2ludGVnZXI6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgbV92YWx1ZS5udW1iZXJfaW50ZWdlciA9IGZpcnN0Lm1fb2JqZWN0LT5tX3ZhbHVlLm51bWJl
cl9pbnRlZ2VyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZDoKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBtX3ZhbHVlLm51bWJlcl91bnNpZ25lZCA9IGZpcnN0Lm1fb2JqZWN0LT5t
X3ZhbHVlLm51bWJlcl91bnNpZ25lZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfZmxvYXQ6CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbV92YWx1ZS5udW1iZXJfZmxvYXQgPSBmaXJzdC5tX29i
amVjdC0+bV92YWx1ZS5udW1iZXJfZmxvYXQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6Ym9vbGVhbjoKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLmJvb2xlYW4gPSBmaXJzdC5tX29iamVjdC0+
bV92YWx1ZS5ib29sZWFuOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OnN0cmluZzoKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtX3ZhbHVlID0gKmZpcnN0Lm1fb2JqZWN0LT5tX3ZhbHVlLnN0cmluZzsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2
YWx1ZV90OjpvYmplY3Q6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV92YWx1ZS5v
YmplY3QgPSBjcmVhdGU8b2JqZWN0X3Q+KGZpcnN0Lm1faXQub2JqZWN0X2l0ZXJhdG9yLCBsYXN0
Lm1faXQub2JqZWN0X2l0ZXJhdG9yKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBtX3ZhbHVlLmFycmF5ID0gY3JlYXRlPGFycmF5X3Q+KGZpcnN0Lm1f
aXQuYXJyYXlfaXRlcmF0b3IsIGxhc3QubV9pdC5hcnJheV9pdGVyYXRvcik7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJjYW5u
b3QgdXNlIGNvbnN0cnVjdCB3aXRoIGl0ZXJhdG9ycyBmcm9tICIgKyBmaXJzdC5tX29iamVjdC0+
dHlwZV9uYW1lKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYXNzZXJ0
X2ludmFyaWFudCgpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBjb25zdHJ1Y3QgYSBK
U09OIHZhbHVlIGdpdmVuIGFuIGlucHV0IHN0cmVhbQorCisgICAgQHBhcmFtW2luLG91dF0gaSAg
c3RyZWFtIHRvIHJlYWQgYSBzZXJpYWxpemVkIEpTT04gdmFsdWUgZnJvbQorICAgIEBwYXJhbVtp
bl0gY2IgYSBwYXJzZXIgY2FsbGJhY2sgZnVuY3Rpb24gb2YgdHlwZSBAcmVmIHBhcnNlcl9jYWxs
YmFja190CisgICAgd2hpY2ggaXMgdXNlZCB0byBjb250cm9sIHRoZSBkZXNlcmlhbGl6YXRpb24g
YnkgZmlsdGVyaW5nIHVud2FudGVkIHZhbHVlcworICAgIChvcHRpb25hbCkKKworICAgIEBjb21w
bGV4aXR5IExpbmVhciBpbiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dC4gVGhlIHBhcnNlciBpcyBh
IHByZWRpY3RpdmUKKyAgICBMTCgxKSBwYXJzZXIuIFRoZSBjb21wbGV4aXR5IGNhbiBiZSBoaWdo
ZXIgaWYgdGhlIHBhcnNlciBjYWxsYmFjayBmdW5jdGlvbgorICAgIEBhIGNiIGhhcyBhIHN1cGVy
LWxpbmVhciBjb21wbGV4aXR5LgorCisgICAgQG5vdGUgQSBVVEYtOCBieXRlIG9yZGVyIG1hcmsg
aXMgc2lsZW50bHkgaWdub3JlZC4KKworICAgIEBkZXByZWNhdGVkIFRoaXMgY29uc3RydWN0b3Ig
aXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHZlcnNpb24KKyAgICAgIDMuMC4w
IHRvIHVuaWZ5IHRoZSBpbnRlcmZhY2Ugb2YgdGhlIGxpYnJhcnkuIERlc2VyaWFsaXphdGlvbiB3
aWxsIGJlCisgICAgICBkb25lIGJ5IHN0cmVhbSBvcGVyYXRvcnMgb3IgYnkgY2FsbGluZyBvbmUg
b2YgdGhlIGBwYXJzZWAgZnVuY3Rpb25zLAorICAgICAgZS5nLiBAcmVmIHBhcnNlKHN0ZDo6aXN0
cmVhbSYsIGNvbnN0IHBhcnNlcl9jYWxsYmFja190KS4gVGhhdCBpcywgY2FsbHMKKyAgICAgIGxp
a2UgYGpzb24gaihpKTtgIGZvciBhbiBpbnB1dCBzdHJlYW0gQGEgaSBuZWVkIHRvIGJlIHJlcGxh
Y2VkIGJ5CisgICAgICBganNvbiBqID0ganNvbjo6cGFyc2UoaSk7YC4gU2VlIHRoZSBleGFtcGxl
IGJlbG93LgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJlbG93IGRlbW9uc3RyYXRl
cyBjb25zdHJ1Y3RpbmcgYSBKU09OIHZhbHVlIGZyb20KKyAgICBhIGBzdGQ6OnN0cmluZ3N0cmVh
bWAgd2l0aCBhbmQgd2l0aG91dCBjYWxsYmFjaworICAgIGZ1bmN0aW9uLixiYXNpY19qc29uX19p
c3RyZWFtfQorCisgICAgQHNpbmNlIHZlcnNpb24gMi4wLjAsIGRlcHJlY2F0ZWQgaW4gdmVyc2lv
biAyLjAuMywgdG8gYmUgcmVtb3ZlZCBpbgorICAgICAgICAgICB2ZXJzaW9uIDMuMC4wCisgICAg
Ki8KKyAgICBKU09OX0RFUFJFQ0FURUQKKyAgICBleHBsaWNpdCBiYXNpY19qc29uKHN0ZDo6aXN0
cmVhbSYgaSwgY29uc3QgcGFyc2VyX2NhbGxiYWNrX3QgY2IgPSBudWxscHRyKQorICAgIHsKKyAg
ICAgICAgKnRoaXMgPSBwYXJzZXIoaSwgY2IpLnBhcnNlKCk7CisgICAgICAgIGFzc2VydF9pbnZh
cmlhbnQoKTsKKyAgICB9CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KKyAgICAvLyBvdGhlciBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3IgLy8KKyAgICAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIC8qIQorICAgIEBi
cmllZiBjb3B5IGNvbnN0cnVjdG9yCisKKyAgICBDcmVhdGVzIGEgY29weSBvZiBhIGdpdmVuIEpT
T04gdmFsdWUuCisKKyAgICBAcGFyYW1baW5dIG90aGVyICB0aGUgSlNPTiB2YWx1ZSB0byBjb3B5
CisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gdGhlIHNpemUgb2YgQGEgb3RoZXIuCisKKyAg
ICBAcmVxdWlyZW1lbnQgVGhpcyBmdW5jdGlvbiBoZWxwcyBgYmFzaWNfanNvbmAgc2F0aXNmeWlu
ZyB0aGUKKyAgICBbQ29udGFpbmVyXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9j
b25jZXB0L0NvbnRhaW5lcikKKyAgICByZXF1aXJlbWVudHM6CisgICAgLSBUaGUgY29tcGxleGl0
eSBpcyBsaW5lYXIuCisgICAgLSBBcyBwb3N0Y29uZGl0aW9uLCBpdCBob2xkczogYG90aGVyID09
IGJhc2ljX2pzb24ob3RoZXIpYC4KKworICAgIEB0aHJvdyBzdGQ6OmJhZF9hbGxvYyBpZiBhbGxv
Y2F0aW9uIGZvciBvYmplY3QsIGFycmF5LCBvciBzdHJpbmcgZmFpbHMuCisKKyAgICBAbGl2ZWV4
YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIHNob3dzIGFuIGV4YW1wbGUgZm9yIHRoZSBjb3B5Cisg
ICAgY29uc3RydWN0b3IuLGJhc2ljX2pzb25fX2Jhc2ljX2pzb259CisKKyAgICBAc2luY2UgdmVy
c2lvbiAxLjAuMAorICAgICovCisgICAgYmFzaWNfanNvbihjb25zdCBiYXNpY19qc29uJiBvdGhl
cikKKyAgICAgICAgOiBtX3R5cGUob3RoZXIubV90eXBlKQorICAgIHsKKyAgICAgICAgLy8gY2hl
Y2sgb2YgcGFzc2VkIHZhbHVlIGlzIHZhbGlkCisgICAgICAgIG90aGVyLmFzc2VydF9pbnZhcmlh
bnQoKTsKKworICAgICAgICBzd2l0Y2ggKG1fdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAg
Y2FzZSB2YWx1ZV90OjpvYmplY3Q6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV92
YWx1ZSA9ICpvdGhlci5tX3ZhbHVlLm9iamVjdDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlID0gKm90aGVyLm1fdmFsdWUuYXJyYXk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2Ug
dmFsdWVfdDo6c3RyaW5nOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fdmFsdWUg
PSAqb3RoZXIubV92YWx1ZS5zdHJpbmc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6Ym9vbGVhbjoKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlID0gb3RoZXIubV92YWx1ZS5ib29sZWFuOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIHZh
bHVlX3Q6Om51bWJlcl9pbnRlZ2VyOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1f
dmFsdWUgPSBvdGhlci5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl91
bnNpZ25lZDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlID0gb3RoZXIu
bV92YWx1ZS5udW1iZXJfdW5zaWduZWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2Zsb2F0OgorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBvdGhlci5tX3ZhbHVlLm51bWJlcl9m
bG9hdDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKKyAgICB9
CisKKyAgICAvKiEKKyAgICBAYnJpZWYgbW92ZSBjb25zdHJ1Y3RvcgorCisgICAgTW92ZSBjb25z
dHJ1Y3Rvci4gQ29uc3RydWN0cyBhIEpTT04gdmFsdWUgd2l0aCB0aGUgY29udGVudHMgb2YgdGhl
IGdpdmVuCisgICAgdmFsdWUgQGEgb3RoZXIgdXNpbmcgbW92ZSBzZW1hbnRpY3MuIEl0ICJzdGVh
bHMiIHRoZSByZXNvdXJjZXMgZnJvbSBAYQorICAgIG90aGVyIGFuZCBsZWF2ZXMgaXQgYXMgSlNP
TiBudWxsIHZhbHVlLgorCisgICAgQHBhcmFtW2luLG91dF0gb3RoZXIgIHZhbHVlIHRvIG1vdmUg
dG8gdGhpcyBvYmplY3QKKworICAgIEBwb3N0IEBhIG90aGVyIGlzIGEgSlNPTiBudWxsIHZhbHVl
CisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgY29k
ZSBiZWxvdyBzaG93cyB0aGUgbW92ZSBjb25zdHJ1Y3RvciBleHBsaWNpdGx5IGNhbGxlZAorICAg
IHZpYSBzdGQ6Om1vdmUuLGJhc2ljX2pzb25fX21vdmVjb25zdHJ1Y3Rvcn0KKworICAgIEBzaW5j
ZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBiYXNpY19qc29uKGJhc2ljX2pzb24mJiBvdGhl
cikgbm9leGNlcHQKKyAgICAgICAgOiBtX3R5cGUoc3RkOjptb3ZlKG90aGVyLm1fdHlwZSkpLAor
ICAgICAgICAgIG1fdmFsdWUoc3RkOjptb3ZlKG90aGVyLm1fdmFsdWUpKQorICAgIHsKKyAgICAg
ICAgLy8gY2hlY2sgdGhhdCBwYXNzZWQgdmFsdWUgaXMgdmFsaWQKKyAgICAgICAgb3RoZXIuYXNz
ZXJ0X2ludmFyaWFudCgpOworCisgICAgICAgIC8vIGludmFsaWRhdGUgcGF5bG9hZAorICAgICAg
ICBvdGhlci5tX3R5cGUgPSB2YWx1ZV90OjpudWxsOworICAgICAgICBvdGhlci5tX3ZhbHVlID0g
e307CisKKyAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOworICAgIH0KKworICAgIC8qIQorICAg
IEBicmllZiBjb3B5IGFzc2lnbm1lbnQKKworICAgIENvcHkgYXNzaWdubWVudCBvcGVyYXRvci4g
Q29waWVzIGEgSlNPTiB2YWx1ZSB2aWEgdGhlICJjb3B5IGFuZCBzd2FwIgorICAgIHN0cmF0ZWd5
OiBJdCBpcyBleHByZXNzZWQgaW4gdGVybXMgb2YgdGhlIGNvcHkgY29uc3RydWN0b3IsIGRlc3Ry
dWN0b3IsCisgICAgYW5kIHRoZSBzd2FwKCkgbWVtYmVyIGZ1bmN0aW9uLgorCisgICAgQHBhcmFt
W2luXSBvdGhlciAgdmFsdWUgdG8gY29weSBmcm9tCisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIu
CisKKyAgICBAcmVxdWlyZW1lbnQgVGhpcyBmdW5jdGlvbiBoZWxwcyBgYmFzaWNfanNvbmAgc2F0
aXNmeWluZyB0aGUKKyAgICBbQ29udGFpbmVyXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93
L2NwcC9jb25jZXB0L0NvbnRhaW5lcikKKyAgICByZXF1aXJlbWVudHM6CisgICAgLSBUaGUgY29t
cGxleGl0eSBpcyBsaW5lYXIuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGNvZGUgYmVsb3cgc2hv
d3MgYW5kIGV4YW1wbGUgZm9yIHRoZSBjb3B5IGFzc2lnbm1lbnQuIEl0CisgICAgY3JlYXRlcyBh
IGNvcHkgb2YgdmFsdWUgYGFgIHdoaWNoIGlzIHRoZW4gc3dhcHBlZCB3aXRoIGBiYC4gRmluYWxs
eVwsIHRoZQorICAgIGNvcHkgb2YgYGFgICh3aGljaCBpcyB0aGUgbnVsbCB2YWx1ZSBhZnRlciB0
aGUgc3dhcCkgaXMKKyAgICBkZXN0cm95ZWQuLGJhc2ljX2pzb25fX2NvcHlhc3NpZ25tZW50fQor
CisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIHJlZmVyZW5jZSYgb3BlcmF0
b3I9KGJhc2ljX2pzb24gb3RoZXIpIG5vZXhjZXB0ICgKKyAgICAgICAgc3RkOjppc19ub3Rocm93
X21vdmVfY29uc3RydWN0aWJsZTx2YWx1ZV90Pjo6dmFsdWUgYW5kCisgICAgICAgIHN0ZDo6aXNf
bm90aHJvd19tb3ZlX2Fzc2lnbmFibGU8dmFsdWVfdD46OnZhbHVlIGFuZAorICAgICAgICBzdGQ6
OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPGpzb25fdmFsdWU+Ojp2YWx1ZSBhbmQKKyAg
ICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxqc29uX3ZhbHVlPjo6dmFsdWUK
KyAgICApCisgICAgeworICAgICAgICAvLyBjaGVjayB0aGF0IHBhc3NlZCB2YWx1ZSBpcyB2YWxp
ZAorICAgICAgICBvdGhlci5hc3NlcnRfaW52YXJpYW50KCk7CisKKyAgICAgICAgdXNpbmcgc3Rk
Ojpzd2FwOworICAgICAgICBzd2FwKG1fdHlwZSwgb3RoZXIubV90eXBlKTsKKyAgICAgICAgc3dh
cChtX3ZhbHVlLCBvdGhlci5tX3ZhbHVlKTsKKworICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7
CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgZGVz
dHJ1Y3RvcgorCisgICAgRGVzdHJveXMgdGhlIEpTT04gdmFsdWUgYW5kIGZyZWVzIGFsbCBhbGxv
Y2F0ZWQgbWVtb3J5LgorCisgICAgQGNvbXBsZXhpdHkgTGluZWFyLgorCisgICAgQHJlcXVpcmVt
ZW50IFRoaXMgZnVuY3Rpb24gaGVscHMgYGJhc2ljX2pzb25gIHNhdGlzZnlpbmcgdGhlCisgICAg
W0NvbnRhaW5lcl0oaHR0cDovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29uY2VwdC9Db250
YWluZXIpCisgICAgcmVxdWlyZW1lbnRzOgorICAgIC0gVGhlIGNvbXBsZXhpdHkgaXMgbGluZWFy
LgorICAgIC0gQWxsIHN0b3JlZCBlbGVtZW50cyBhcmUgZGVzdHJveWVkIGFuZCBhbGwgbWVtb3J5
IGlzIGZyZWVkLgorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIH5iYXNp
Y19qc29uKCkKKyAgICB7CisgICAgICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKKworICAgICAgICBz
d2l0Y2ggKG1fdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmpl
Y3Q6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQWxsb2NhdG9yVHlwZTxvYmplY3Rf
dD4gYWxsb2M7CisgICAgICAgICAgICAgICAgYWxsb2MuZGVzdHJveShtX3ZhbHVlLm9iamVjdCk7
CisgICAgICAgICAgICAgICAgYWxsb2MuZGVhbGxvY2F0ZShtX3ZhbHVlLm9iamVjdCwgMSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2Ug
dmFsdWVfdDo6YXJyYXk6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQWxsb2NhdG9y
VHlwZTxhcnJheV90PiBhbGxvYzsKKyAgICAgICAgICAgICAgICBhbGxvYy5kZXN0cm95KG1fdmFs
dWUuYXJyYXkpOworICAgICAgICAgICAgICAgIGFsbG9jLmRlYWxsb2NhdGUobV92YWx1ZS5hcnJh
eSwgMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGNhc2UgdmFsdWVfdDo6c3RyaW5nOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IEFsbG9jYXRvclR5cGU8c3RyaW5nX3Q+IGFsbG9jOworICAgICAgICAgICAgICAgIGFsbG9jLmRl
c3Ryb3kobV92YWx1ZS5zdHJpbmcpOworICAgICAgICAgICAgICAgIGFsbG9jLmRlYWxsb2NhdGUo
bV92YWx1ZS5zdHJpbmcsIDEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IC8vIGFsbCBvdGhlciB0eXBlcyBuZWVkIG5vIHNwZWNpZmljIGRlc3RydWN0b3IKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
LyBAfQorCisgIHB1YmxpYzoKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIG9i
amVjdCBpbnNwZWN0aW9uIC8vCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIC8v
LyBAbmFtZSBvYmplY3QgaW5zcGVjdGlvbgorICAgIC8vLyBGdW5jdGlvbnMgdG8gaW5zcGVjdCB0
aGUgdHlwZSBvZiBhIEpTT04gdmFsdWUuCisgICAgLy8vIEB7CisKKyAgICAvKiEKKyAgICBAYnJp
ZWYgc2VyaWFsaXphdGlvbgorCisgICAgU2VyaWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgSlNPTiB2
YWx1ZXMuIFRoZSBmdW5jdGlvbiB0cmllcyB0byBtaW1pYworICAgIFB5dGhvbidzIGBqc29uLmR1
bXBzKClgIGZ1bmN0aW9uLCBhbmQgY3VycmVudGx5IHN1cHBvcnRzIGl0cyBAYSBpbmRlbnQKKyAg
ICBwYXJhbWV0ZXIuCisKKyAgICBAcGFyYW1baW5dIGluZGVudCBJZiBpbmRlbnQgaXMgbm9ubmVn
YXRpdmUsIHRoZW4gYXJyYXkgZWxlbWVudHMgYW5kIG9iamVjdAorICAgIG1lbWJlcnMgd2lsbCBi
ZSBwcmV0dHktcHJpbnRlZCB3aXRoIHRoYXQgaW5kZW50IGxldmVsLiBBbiBpbmRlbnQgbGV2ZWwg
b2YKKyAgICBgMGAgd2lsbCBvbmx5IGluc2VydCBuZXdsaW5lcy4gYC0xYCAodGhlIGRlZmF1bHQp
IHNlbGVjdHMgdGhlIG1vc3QgY29tcGFjdAorICAgIHJlcHJlc2VudGF0aW9uLgorCisgICAgQHJl
dHVybiBzdHJpbmcgY29udGFpbmluZyB0aGUgc2VyaWFsaXphdGlvbiBvZiB0aGUgSlNPTiB2YWx1
ZQorCisgICAgQGNvbXBsZXhpdHkgTGluZWFyLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBmb2xs
b3dpbmcgZXhhbXBsZSBzaG93cyB0aGUgZWZmZWN0IG9mIGRpZmZlcmVudCBAYSBpbmRlbnQKKyAg
ICBwYXJhbWV0ZXJzIHRvIHRoZSByZXN1bHQgb2YgdGhlIHNlcmlhbGl6YXRpb24uLGR1bXB9CisK
KyAgICBAc2VlIGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS9qc29uLmh0bWwjanNv
bi5kdW1wCisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgc3RyaW5nX3Qg
ZHVtcChjb25zdCBpbnQgaW5kZW50ID0gLTEpIGNvbnN0CisgICAgeworICAgICAgICBzdGQ6OnN0
cmluZ3N0cmVhbSBzczsKKyAgICAgICAgLy8gZml4IGxvY2FsZSBwcm9ibGVtcworICAgICAgICBz
cy5pbWJ1ZShzdGQ6OmxvY2FsZTo6Y2xhc3NpYygpKTsKKworICAgICAgICAvLyA2LCAxNSBvciAx
NiBkaWdpdHMgb2YgcHJlY2lzaW9uIGFsbG93cyByb3VuZC10cmlwIElFRUUgNzU0CisgICAgICAg
IC8vIHN0cmluZy0+ZmxvYXQtPnN0cmluZywgc3RyaW5nLT5kb3VibGUtPnN0cmluZyBvciBzdHJp
bmctPmxvbmcKKyAgICAgICAgLy8gZG91YmxlLT5zdHJpbmc7IHRvIGJlIHNhZmUsIHdlIHJlYWQg
dGhpcyB2YWx1ZSBmcm9tCisgICAgICAgIC8vIHN0ZDo6bnVtZXJpY19saW1pdHM8bnVtYmVyX2Zs
b2F0X3Q+OjpkaWdpdHMxMAorICAgICAgICBzcy5wcmVjaXNpb24oc3RkOjpudW1lcmljX2xpbWl0
czxkb3VibGU+OjpkaWdpdHMxMCk7CisKKyAgICAgICAgaWYgKGluZGVudCA+PSAwKQorICAgICAg
ICB7CisgICAgICAgICAgICBkdW1wKHNzLCB0cnVlLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+
KGluZGVudCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgZHVtcChzcywgZmFsc2UsIDApOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNzLnN0
cigpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiByZXR1cm4gdGhlIHR5cGUgb2YgdGhl
IEpTT04gdmFsdWUgKGV4cGxpY2l0KQorCisgICAgUmV0dXJuIHRoZSB0eXBlIG9mIHRoZSBKU09O
IHZhbHVlIGFzIGEgdmFsdWUgZnJvbSB0aGUgQHJlZiB2YWx1ZV90CisgICAgZW51bWVyYXRpb24u
CisKKyAgICBAcmV0dXJuIHRoZSB0eXBlIG9mIHRoZSBKU09OIHZhbHVlCisKKyAgICBAY29tcGxl
eGl0eSBDb25zdGFudC4KKworICAgIEBleGNlcHRpb25zYWZldHkgTm8tdGhyb3cgZ3VhcmFudGVl
OiB0aGlzIG1lbWJlciBmdW5jdGlvbiBuZXZlciB0aHJvd3MKKyAgICBleGNlcHRpb25zLgorCisg
ICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29kZSBleGVtcGxpZmllcyBgdHlwZSgpYCBm
b3IgYWxsIEpTT04KKyAgICB0eXBlcy4sdHlwZX0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4w
CisgICAgKi8KKyAgICBjb25zdGV4cHIgdmFsdWVfdCB0eXBlKCkgY29uc3Qgbm9leGNlcHQKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3R5cGU7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVm
IHJldHVybiB3aGV0aGVyIHR5cGUgaXMgcHJpbWl0aXZlCisKKyAgICBUaGlzIGZ1bmN0aW9uIHJl
dHVybnMgdHJ1ZSBpZmYgdGhlIEpTT04gdHlwZSBpcyBwcmltaXRpdmUgKHN0cmluZywgbnVtYmVy
LAorICAgIGJvb2xlYW4sIG9yIG51bGwpLgorCisgICAgQHJldHVybiBgdHJ1ZWAgaWYgdHlwZSBp
cyBwcmltaXRpdmUgKHN0cmluZywgbnVtYmVyLCBib29sZWFuLCBvciBudWxsKSwKKyAgICBgZmFs
c2VgIG90aGVyd2lzZS4KKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQGV4Y2Vw
dGlvbnNhZmV0eSBOby10aHJvdyBndWFyYW50ZWU6IHRoaXMgbWVtYmVyIGZ1bmN0aW9uIG5ldmVy
IHRocm93cworICAgIGV4Y2VwdGlvbnMuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2lu
ZyBjb2RlIGV4ZW1wbGlmaWVzIGBpc19wcmltaXRpdmUoKWAgZm9yIGFsbCBKU09OCisgICAgdHlw
ZXMuLGlzX3ByaW1pdGl2ZX0KKworICAgIEBzYSBAcmVmIGlzX3N0cnVjdHVyZWQoKSAtLSByZXR1
cm5zIHdoZXRoZXIgSlNPTiB2YWx1ZSBpcyBzdHJ1Y3R1cmVkCisgICAgQHNhIEByZWYgaXNfbnVs
bCgpIC0tIHJldHVybnMgd2hldGhlciBKU09OIHZhbHVlIGlzIGBudWxsYAorICAgIEBzYSBAcmVm
IGlzX3N0cmluZygpIC0tIHJldHVybnMgd2hldGhlciBKU09OIHZhbHVlIGlzIGEgc3RyaW5nCisg
ICAgQHNhIEByZWYgaXNfYm9vbGVhbigpIC0tIHJldHVybnMgd2hldGhlciBKU09OIHZhbHVlIGlz
IGEgYm9vbGVhbgorICAgIEBzYSBAcmVmIGlzX251bWJlcigpIC0tIHJldHVybnMgd2hldGhlciBK
U09OIHZhbHVlIGlzIGEgbnVtYmVyCisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICov
CisgICAgY29uc3RleHByIGJvb2wgaXNfcHJpbWl0aXZlKCkgY29uc3Qgbm9leGNlcHQKKyAgICB7
CisgICAgICAgIHJldHVybiBpc19udWxsKCkgb3IgaXNfc3RyaW5nKCkgb3IgaXNfYm9vbGVhbigp
IG9yIGlzX251bWJlcigpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiByZXR1cm4gd2hl
dGhlciB0eXBlIGlzIHN0cnVjdHVyZWQKKworICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVl
IGlmZiB0aGUgSlNPTiB0eXBlIGlzIHN0cnVjdHVyZWQgKGFycmF5IG9yCisgICAgb2JqZWN0KS4K
KworICAgIEByZXR1cm4gYHRydWVgIGlmIHR5cGUgaXMgc3RydWN0dXJlZCAoYXJyYXkgb3Igb2Jq
ZWN0KSwgYGZhbHNlYCBvdGhlcndpc2UuCisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudC4KKwor
ICAgIEBleGNlcHRpb25zYWZldHkgTm8tdGhyb3cgZ3VhcmFudGVlOiB0aGlzIG1lbWJlciBmdW5j
dGlvbiBuZXZlciB0aHJvd3MKKyAgICBleGNlcHRpb25zLgorCisgICAgQGxpdmVleGFtcGxle1Ro
ZSBmb2xsb3dpbmcgY29kZSBleGVtcGxpZmllcyBgaXNfc3RydWN0dXJlZCgpYCBmb3IgYWxsIEpT
T04KKyAgICB0eXBlcy4saXNfc3RydWN0dXJlZH0KKworICAgIEBzYSBAcmVmIGlzX3ByaW1pdGl2
ZSgpIC0tIHJldHVybnMgd2hldGhlciB2YWx1ZSBpcyBwcmltaXRpdmUKKyAgICBAc2EgQHJlZiBp
c19hcnJheSgpIC0tIHJldHVybnMgd2hldGhlciB2YWx1ZSBpcyBhbiBhcnJheQorICAgIEBzYSBA
cmVmIGlzX29iamVjdCgpIC0tIHJldHVybnMgd2hldGhlciB2YWx1ZSBpcyBhbiBvYmplY3QKKwor
ICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBjb25zdGV4cHIgYm9vbCBpc19z
dHJ1Y3R1cmVkKCkgY29uc3Qgbm9leGNlcHQKKyAgICB7CisgICAgICAgIHJldHVybiBpc19hcnJh
eSgpIG9yIGlzX29iamVjdCgpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiByZXR1cm4g
d2hldGhlciB2YWx1ZSBpcyBudWxsCisKKyAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBp
ZmYgdGhlIEpTT04gdmFsdWUgaXMgbnVsbC4KKworICAgIEByZXR1cm4gYHRydWVgIGlmIHR5cGUg
aXMgbnVsbCwgYGZhbHNlYCBvdGhlcndpc2UuCisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudC4K
KworICAgIEBleGNlcHRpb25zYWZldHkgTm8tdGhyb3cgZ3VhcmFudGVlOiB0aGlzIG1lbWJlciBm
dW5jdGlvbiBuZXZlciB0aHJvd3MKKyAgICBleGNlcHRpb25zLgorCisgICAgQGxpdmVleGFtcGxl
e1RoZSBmb2xsb3dpbmcgY29kZSBleGVtcGxpZmllcyBgaXNfbnVsbCgpYCBmb3IgYWxsIEpTT04K
KyAgICB0eXBlcy4saXNfbnVsbH0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8K
KyAgICBjb25zdGV4cHIgYm9vbCBpc19udWxsKCkgY29uc3Qgbm9leGNlcHQKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3R5cGUgPT0gdmFsdWVfdDo6bnVsbDsKKyAgICB9CisKKyAgICAvKiEKKyAg
ICBAYnJpZWYgcmV0dXJuIHdoZXRoZXIgdmFsdWUgaXMgYSBib29sZWFuCisKKyAgICBUaGlzIGZ1
bmN0aW9uIHJldHVybnMgdHJ1ZSBpZmYgdGhlIEpTT04gdmFsdWUgaXMgYSBib29sZWFuLgorCisg
ICAgQHJldHVybiBgdHJ1ZWAgaWYgdHlwZSBpcyBib29sZWFuLCBgZmFsc2VgIG90aGVyd2lzZS4K
KworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQGV4Y2VwdGlvbnNhZmV0eSBOby10
aHJvdyBndWFyYW50ZWU6IHRoaXMgbWVtYmVyIGZ1bmN0aW9uIG5ldmVyIHRocm93cworICAgIGV4
Y2VwdGlvbnMuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIGV4ZW1wbGlm
aWVzIGBpc19ib29sZWFuKClgIGZvciBhbGwgSlNPTgorICAgIHR5cGVzLixpc19ib29sZWFufQor
CisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGNvbnN0ZXhwciBib29sIGlz
X2Jvb2xlYW4oKSBjb25zdCBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHlwZSA9
PSB2YWx1ZV90Ojpib29sZWFuOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiByZXR1cm4g
d2hldGhlciB2YWx1ZSBpcyBhIG51bWJlcgorCisgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRy
dWUgaWZmIHRoZSBKU09OIHZhbHVlIGlzIGEgbnVtYmVyLiBUaGlzIGluY2x1ZGVzCisgICAgYm90
aCBpbnRlZ2VyIGFuZCBmbG9hdGluZy1wb2ludCB2YWx1ZXMuCisKKyAgICBAcmV0dXJuIGB0cnVl
YCBpZiB0eXBlIGlzIG51bWJlciAocmVnYXJkbGVzcyB3aGV0aGVyIGludGVnZXIsIHVuc2lnbmVk
CisgICAgaW50ZWdlciBvciBmbG9hdGluZy10eXBlKSwgYGZhbHNlYCBvdGhlcndpc2UuCisKKyAg
ICBAY29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEBleGNlcHRpb25zYWZldHkgTm8tdGhyb3cg
Z3VhcmFudGVlOiB0aGlzIG1lbWJlciBmdW5jdGlvbiBuZXZlciB0aHJvd3MKKyAgICBleGNlcHRp
b25zLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29kZSBleGVtcGxpZmllcyBg
aXNfbnVtYmVyKClgIGZvciBhbGwgSlNPTgorICAgIHR5cGVzLixpc19udW1iZXJ9CisKKyAgICBA
c2EgQHJlZiBpc19udW1iZXJfaW50ZWdlcigpIC0tIGNoZWNrIGlmIHZhbHVlIGlzIGFuIGludGVn
ZXIgb3IgdW5zaWduZWQKKyAgICBpbnRlZ2VyIG51bWJlcgorICAgIEBzYSBAcmVmIGlzX251bWJl
cl91bnNpZ25lZCgpIC0tIGNoZWNrIGlmIHZhbHVlIGlzIGFuIHVuc2lnbmVkIGludGVnZXIKKyAg
ICBudW1iZXIKKyAgICBAc2EgQHJlZiBpc19udW1iZXJfZmxvYXQoKSAtLSBjaGVjayBpZiB2YWx1
ZSBpcyBhIGZsb2F0aW5nLXBvaW50IG51bWJlcgorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAK
KyAgICAqLworICAgIGNvbnN0ZXhwciBib29sIGlzX251bWJlcigpIGNvbnN0IG5vZXhjZXB0Cisg
ICAgeworICAgICAgICByZXR1cm4gaXNfbnVtYmVyX2ludGVnZXIoKSBvciBpc19udW1iZXJfZmxv
YXQoKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgcmV0dXJuIHdoZXRoZXIgdmFsdWUg
aXMgYW4gaW50ZWdlciBudW1iZXIKKworICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlm
ZiB0aGUgSlNPTiB2YWx1ZSBpcyBhbiBpbnRlZ2VyIG9yIHVuc2lnbmVkCisgICAgaW50ZWdlciBu
dW1iZXIuIFRoaXMgZXhjbHVkZXMgZmxvYXRpbmctcG9pbnQgdmFsdWVzLgorCisgICAgQHJldHVy
biBgdHJ1ZWAgaWYgdHlwZSBpcyBhbiBpbnRlZ2VyIG9yIHVuc2lnbmVkIGludGVnZXIgbnVtYmVy
LCBgZmFsc2VgCisgICAgb3RoZXJ3aXNlLgorCisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisK
KyAgICBAZXhjZXB0aW9uc2FmZXR5IE5vLXRocm93IGd1YXJhbnRlZTogdGhpcyBtZW1iZXIgZnVu
Y3Rpb24gbmV2ZXIgdGhyb3dzCisgICAgZXhjZXB0aW9ucy4KKworICAgIEBsaXZlZXhhbXBsZXtU
aGUgZm9sbG93aW5nIGNvZGUgZXhlbXBsaWZpZXMgYGlzX251bWJlcl9pbnRlZ2VyKClgIGZvciBh
bGwKKyAgICBKU09OIHR5cGVzLixpc19udW1iZXJfaW50ZWdlcn0KKworICAgIEBzYSBAcmVmIGlz
X251bWJlcigpIC0tIGNoZWNrIGlmIHZhbHVlIGlzIGEgbnVtYmVyCisgICAgQHNhIEByZWYgaXNf
bnVtYmVyX3Vuc2lnbmVkKCkgLS0gY2hlY2sgaWYgdmFsdWUgaXMgYW4gdW5zaWduZWQgaW50ZWdl
cgorICAgIG51bWJlcgorICAgIEBzYSBAcmVmIGlzX251bWJlcl9mbG9hdCgpIC0tIGNoZWNrIGlm
IHZhbHVlIGlzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyCisKKyAgICBAc2luY2UgdmVyc2lvbiAx
LjAuMAorICAgICovCisgICAgY29uc3RleHByIGJvb2wgaXNfbnVtYmVyX2ludGVnZXIoKSBjb25z
dCBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHlwZSA9PSB2YWx1ZV90OjpudW1i
ZXJfaW50ZWdlciBvciBtX3R5cGUgPT0gdmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkOworICAgIH0K
KworICAgIC8qIQorICAgIEBicmllZiByZXR1cm4gd2hldGhlciB2YWx1ZSBpcyBhbiB1bnNpZ25l
ZCBpbnRlZ2VyIG51bWJlcgorCisgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWZmIHRo
ZSBKU09OIHZhbHVlIGlzIGFuIHVuc2lnbmVkIGludGVnZXIKKyAgICBudW1iZXIuIFRoaXMgZXhj
bHVkZXMgZmxvYXRpbmctcG9pbnQgYW5kIChzaWduZWQpIGludGVnZXIgdmFsdWVzLgorCisgICAg
QHJldHVybiBgdHJ1ZWAgaWYgdHlwZSBpcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIG51bWJlciwgYGZh
bHNlYCBvdGhlcndpc2UuCisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEBleGNl
cHRpb25zYWZldHkgTm8tdGhyb3cgZ3VhcmFudGVlOiB0aGlzIG1lbWJlciBmdW5jdGlvbiBuZXZl
ciB0aHJvd3MKKyAgICBleGNlcHRpb25zLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dp
bmcgY29kZSBleGVtcGxpZmllcyBgaXNfbnVtYmVyX3Vuc2lnbmVkKClgIGZvciBhbGwKKyAgICBK
U09OIHR5cGVzLixpc19udW1iZXJfdW5zaWduZWR9CisKKyAgICBAc2EgQHJlZiBpc19udW1iZXIo
KSAtLSBjaGVjayBpZiB2YWx1ZSBpcyBhIG51bWJlcgorICAgIEBzYSBAcmVmIGlzX251bWJlcl9p
bnRlZ2VyKCkgLS0gY2hlY2sgaWYgdmFsdWUgaXMgYW4gaW50ZWdlciBvciB1bnNpZ25lZAorICAg
IGludGVnZXIgbnVtYmVyCisgICAgQHNhIEByZWYgaXNfbnVtYmVyX2Zsb2F0KCkgLS0gY2hlY2sg
aWYgdmFsdWUgaXMgYSBmbG9hdGluZy1wb2ludCBudW1iZXIKKworICAgIEBzaW5jZSB2ZXJzaW9u
IDIuMC4wCisgICAgKi8KKyAgICBjb25zdGV4cHIgYm9vbCBpc19udW1iZXJfdW5zaWduZWQoKSBj
b25zdCBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHlwZSA9PSB2YWx1ZV90Ojpu
dW1iZXJfdW5zaWduZWQ7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIHJldHVybiB3aGV0
aGVyIHZhbHVlIGlzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyCisKKyAgICBUaGlzIGZ1bmN0aW9u
IHJldHVybnMgdHJ1ZSBpZmYgdGhlIEpTT04gdmFsdWUgaXMgYSBmbG9hdGluZy1wb2ludCBudW1i
ZXIuCisgICAgVGhpcyBleGNsdWRlcyBpbnRlZ2VyIGFuZCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVl
cy4KKworICAgIEByZXR1cm4gYHRydWVgIGlmIHR5cGUgaXMgYSBmbG9hdGluZy1wb2ludCBudW1i
ZXIsIGBmYWxzZWAgb3RoZXJ3aXNlLgorCisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAg
ICBAZXhjZXB0aW9uc2FmZXR5IE5vLXRocm93IGd1YXJhbnRlZTogdGhpcyBtZW1iZXIgZnVuY3Rp
b24gbmV2ZXIgdGhyb3dzCisgICAgZXhjZXB0aW9ucy4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUg
Zm9sbG93aW5nIGNvZGUgZXhlbXBsaWZpZXMgYGlzX251bWJlcl9mbG9hdCgpYCBmb3IgYWxsCisg
ICAgSlNPTiB0eXBlcy4saXNfbnVtYmVyX2Zsb2F0fQorCisgICAgQHNhIEByZWYgaXNfbnVtYmVy
KCkgLS0gY2hlY2sgaWYgdmFsdWUgaXMgbnVtYmVyCisgICAgQHNhIEByZWYgaXNfbnVtYmVyX2lu
dGVnZXIoKSAtLSBjaGVjayBpZiB2YWx1ZSBpcyBhbiBpbnRlZ2VyIG51bWJlcgorICAgIEBzYSBA
cmVmIGlzX251bWJlcl91bnNpZ25lZCgpIC0tIGNoZWNrIGlmIHZhbHVlIGlzIGFuIHVuc2lnbmVk
IGludGVnZXIKKyAgICBudW1iZXIKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8K
KyAgICBjb25zdGV4cHIgYm9vbCBpc19udW1iZXJfZmxvYXQoKSBjb25zdCBub2V4Y2VwdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfZmxvYXQ7CisgICAg
fQorCisgICAgLyohCisgICAgQGJyaWVmIHJldHVybiB3aGV0aGVyIHZhbHVlIGlzIGFuIG9iamVj
dAorCisgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWZmIHRoZSBKU09OIHZhbHVlIGlz
IGFuIG9iamVjdC4KKworICAgIEByZXR1cm4gYHRydWVgIGlmIHR5cGUgaXMgb2JqZWN0LCBgZmFs
c2VgIG90aGVyd2lzZS4KKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQGV4Y2Vw
dGlvbnNhZmV0eSBOby10aHJvdyBndWFyYW50ZWU6IHRoaXMgbWVtYmVyIGZ1bmN0aW9uIG5ldmVy
IHRocm93cworICAgIGV4Y2VwdGlvbnMuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2lu
ZyBjb2RlIGV4ZW1wbGlmaWVzIGBpc19vYmplY3QoKWAgZm9yIGFsbCBKU09OCisgICAgdHlwZXMu
LGlzX29iamVjdH0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBjb25z
dGV4cHIgYm9vbCBpc19vYmplY3QoKSBjb25zdCBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fdHlwZSA9PSB2YWx1ZV90OjpvYmplY3Q7CisgICAgfQorCisgICAgLyohCisgICAgQGJy
aWVmIHJldHVybiB3aGV0aGVyIHZhbHVlIGlzIGFuIGFycmF5CisKKyAgICBUaGlzIGZ1bmN0aW9u
IHJldHVybnMgdHJ1ZSBpZmYgdGhlIEpTT04gdmFsdWUgaXMgYW4gYXJyYXkuCisKKyAgICBAcmV0
dXJuIGB0cnVlYCBpZiB0eXBlIGlzIGFycmF5LCBgZmFsc2VgIG90aGVyd2lzZS4KKworICAgIEBj
b21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQGV4Y2VwdGlvbnNhZmV0eSBOby10aHJvdyBndWFy
YW50ZWU6IHRoaXMgbWVtYmVyIGZ1bmN0aW9uIG5ldmVyIHRocm93cworICAgIGV4Y2VwdGlvbnMu
CisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIGV4ZW1wbGlmaWVzIGBpc19h
cnJheSgpYCBmb3IgYWxsIEpTT04KKyAgICB0eXBlcy4saXNfYXJyYXl9CisKKyAgICBAc2luY2Ug
dmVyc2lvbiAxLjAuMAorICAgICovCisgICAgY29uc3RleHByIGJvb2wgaXNfYXJyYXkoKSBjb25z
dCBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHlwZSA9PSB2YWx1ZV90OjphcnJh
eTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgcmV0dXJuIHdoZXRoZXIgdmFsdWUgaXMg
YSBzdHJpbmcKKworICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmZiB0aGUgSlNPTiB2
YWx1ZSBpcyBhIHN0cmluZy4KKworICAgIEByZXR1cm4gYHRydWVgIGlmIHR5cGUgaXMgc3RyaW5n
LCBgZmFsc2VgIG90aGVyd2lzZS4KKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAg
QGV4Y2VwdGlvbnNhZmV0eSBOby10aHJvdyBndWFyYW50ZWU6IHRoaXMgbWVtYmVyIGZ1bmN0aW9u
IG5ldmVyIHRocm93cworICAgIGV4Y2VwdGlvbnMuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZv
bGxvd2luZyBjb2RlIGV4ZW1wbGlmaWVzIGBpc19zdHJpbmcoKWAgZm9yIGFsbCBKU09OCisgICAg
dHlwZXMuLGlzX3N0cmluZ30KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAg
ICBjb25zdGV4cHIgYm9vbCBpc19zdHJpbmcoKSBjb25zdCBub2V4Y2VwdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fdHlwZSA9PSB2YWx1ZV90OjpzdHJpbmc7CisgICAgfQorCisgICAgLyohCisg
ICAgQGJyaWVmIHJldHVybiB3aGV0aGVyIHZhbHVlIGlzIGRpc2NhcmRlZAorCisgICAgVGhpcyBm
dW5jdGlvbiByZXR1cm5zIHRydWUgaWZmIHRoZSBKU09OIHZhbHVlIHdhcyBkaXNjYXJkZWQgZHVy
aW5nIHBhcnNpbmcKKyAgICB3aXRoIGEgY2FsbGJhY2sgZnVuY3Rpb24gKHNlZSBAcmVmIHBhcnNl
cl9jYWxsYmFja190KS4KKworICAgIEBub3RlIFRoaXMgZnVuY3Rpb24gd2lsbCBhbHdheXMgYmUg
YGZhbHNlYCBmb3IgSlNPTiB2YWx1ZXMgYWZ0ZXIgcGFyc2luZy4KKyAgICBUaGF0IGlzLCBkaXNj
YXJkZWQgdmFsdWVzIGNhbiBvbmx5IG9jY3VyIGR1cmluZyBwYXJzaW5nLCBidXQgd2lsbCBiZQor
ICAgIHJlbW92ZWQgd2hlbiBpbnNpZGUgYSBzdHJ1Y3R1cmVkIHZhbHVlIG9yIHJlcGxhY2VkIGJ5
IG51bGwgaW4gb3RoZXIgY2FzZXMuCisKKyAgICBAcmV0dXJuIGB0cnVlYCBpZiB0eXBlIGlzIGRp
c2NhcmRlZCwgYGZhbHNlYCBvdGhlcndpc2UuCisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudC4K
KworICAgIEBleGNlcHRpb25zYWZldHkgTm8tdGhyb3cgZ3VhcmFudGVlOiB0aGlzIG1lbWJlciBm
dW5jdGlvbiBuZXZlciB0aHJvd3MKKyAgICBleGNlcHRpb25zLgorCisgICAgQGxpdmVleGFtcGxl
e1RoZSBmb2xsb3dpbmcgY29kZSBleGVtcGxpZmllcyBgaXNfZGlzY2FyZGVkKClgIGZvciBhbGwg
SlNPTgorICAgIHR5cGVzLixpc19kaXNjYXJkZWR9CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAu
MAorICAgICovCisgICAgY29uc3RleHByIGJvb2wgaXNfZGlzY2FyZGVkKCkgY29uc3Qgbm9leGNl
cHQKKyAgICB7CisgICAgICAgIHJldHVybiBtX3R5cGUgPT0gdmFsdWVfdDo6ZGlzY2FyZGVkOwor
ICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiByZXR1cm4gdGhlIHR5cGUgb2YgdGhlIEpTT04g
dmFsdWUgKGltcGxpY2l0KQorCisgICAgSW1wbGljaXRseSByZXR1cm4gdGhlIHR5cGUgb2YgdGhl
IEpTT04gdmFsdWUgYXMgYSB2YWx1ZSBmcm9tIHRoZSBAcmVmCisgICAgdmFsdWVfdCBlbnVtZXJh
dGlvbi4KKworICAgIEByZXR1cm4gdGhlIHR5cGUgb2YgdGhlIEpTT04gdmFsdWUKKworICAgIEBj
b21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQGV4Y2VwdGlvbnNhZmV0eSBOby10aHJvdyBndWFy
YW50ZWU6IHRoaXMgbWVtYmVyIGZ1bmN0aW9uIG5ldmVyIHRocm93cworICAgIGV4Y2VwdGlvbnMu
CisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIGV4ZW1wbGlmaWVzIHRoZSBA
cmVmIHZhbHVlX3Qgb3BlcmF0b3IgZm9yCisgICAgYWxsIEpTT04gdHlwZXMuLG9wZXJhdG9yX192
YWx1ZV90fQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGNvbnN0ZXhw
ciBvcGVyYXRvciB2YWx1ZV90KCkgY29uc3Qgbm9leGNlcHQKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3R5cGU7CisgICAgfQorCisgICAgLy8vIEB9CisKKyAgcHJpdmF0ZToKKyAgICAvLy8vLy8v
Ly8vLy8vLy8vLy8KKyAgICAvLyB2YWx1ZSBhY2Nlc3MgLy8KKyAgICAvLy8vLy8vLy8vLy8vLy8v
Ly8KKworICAgIC8vLyBnZXQgYW4gb2JqZWN0IChleHBsaWNpdCkKKyAgICB0ZW1wbGF0ZTxjbGFz
cyBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKKyAgICAgICAgICAgICAgICAgc3RkOjppc19j
b252ZXJ0aWJsZTx0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUsIHR5cGVuYW1lIFQ6OmtleV90
eXBlPjo6dmFsdWUgYW5kCisgICAgICAgICAgICAgICAgIHN0ZDo6aXNfY29udmVydGlibGU8YmFz
aWNfanNvbl90LCB0eXBlbmFtZSBUOjptYXBwZWRfdHlwZT46OnZhbHVlLCBpbnQ+Ojp0eXBlID0g
MD4KKyAgICBUIGdldF9pbXBsKFQqKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzX29iamVj
dCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gVChtX3ZhbHVlLm9iamVjdC0+YmVn
aW4oKSwgbV92YWx1ZS5vYmplY3QtPmVuZCgpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigidHlwZSBtdXN0
IGJlIG9iamVjdCwgYnV0IGlzICIgKyB0eXBlX25hbWUoKSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLy8gZ2V0IGFuIG9iamVjdCAoZXhwbGljaXQpCisgICAgb2JqZWN0X3QgZ2V0X2ltcGwo
b2JqZWN0X3QqKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzX29iamVjdCgpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gKihtX3ZhbHVlLm9iamVjdCk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJv
cj4oInR5cGUgbXVzdCBiZSBvYmplY3QsIGJ1dCBpcyAiICsgdHlwZV9uYW1lKCkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgLy8vIGdldCBhbiBhcnJheSAoZXhwbGljaXQpCisgICAgdGVtcGxh
dGU8Y2xhc3MgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8CisgICAgICAgICAgICAgICAgIHN0
ZDo6aXNfY29udmVydGlibGU8YmFzaWNfanNvbl90LCB0eXBlbmFtZSBUOjp2YWx1ZV90eXBlPjo6
dmFsdWUgYW5kCisgICAgICAgICAgICAgICAgIG5vdCBzdGQ6OmlzX3NhbWU8YmFzaWNfanNvbl90
LCB0eXBlbmFtZSBUOjp2YWx1ZV90eXBlPjo6dmFsdWUgYW5kCisgICAgICAgICAgICAgICAgIG5v
dCBzdGQ6OmlzX2FyaXRobWV0aWM8VD46OnZhbHVlIGFuZAorICAgICAgICAgICAgICAgICBub3Qg
c3RkOjppc19jb252ZXJ0aWJsZTxzdGQ6OnN0cmluZywgVD46OnZhbHVlIGFuZAorICAgICAgICAg
ICAgICAgICBub3QgaGFzX21hcHBlZF90eXBlPFQ+Ojp2YWx1ZSwgaW50Pjo6dHlwZSA9IDA+Cisg
ICAgVCBnZXRfaW1wbChUKikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc19hcnJheSgpKQor
ICAgICAgICB7CisgICAgICAgICAgICBUIHRvX3ZlY3RvcjsKKyAgICAgICAgICAgIHN0ZDo6dHJh
bnNmb3JtKG1fdmFsdWUuYXJyYXktPmJlZ2luKCksIG1fdmFsdWUuYXJyYXktPmVuZCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppbnNlcnRlcih0b192ZWN0b3IsIHRvX3ZlY3Rv
ci5lbmQoKSksIFtdKGJhc2ljX2pzb24gaSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gaS5nZXQ8dHlwZW5hbWUgVDo6dmFsdWVfdHlwZT4oKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgcmV0dXJuIHRvX3ZlY3RvcjsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigidHlwZSBt
dXN0IGJlIGFycmF5LCBidXQgaXMgIiArIHR5cGVfbmFtZSgpKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vLyBnZXQgYW4gYXJyYXkgKGV4cGxpY2l0KQorICAgIHRlbXBsYXRlPGNsYXNzIFQs
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAorICAgICAgICAgICAgICAgICBzdGQ6OmlzX2NvbnZl
cnRpYmxlPGJhc2ljX2pzb25fdCwgVD46OnZhbHVlIGFuZAorICAgICAgICAgICAgICAgICBub3Qg
c3RkOjppc19zYW1lPGJhc2ljX2pzb25fdCwgVD46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4KKyAg
ICBzdGQ6OnZlY3RvcjxUPiBnZXRfaW1wbChzdGQ6OnZlY3RvcjxUPiopIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoaXNfYXJyYXkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgc3RkOjp2ZWN0
b3I8VD4gdG9fdmVjdG9yOworICAgICAgICAgICAgdG9fdmVjdG9yLnJlc2VydmUobV92YWx1ZS5h
cnJheS0+c2l6ZSgpKTsKKyAgICAgICAgICAgIHN0ZDo6dHJhbnNmb3JtKG1fdmFsdWUuYXJyYXkt
PmJlZ2luKCksIG1fdmFsdWUuYXJyYXktPmVuZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjppbnNlcnRlcih0b192ZWN0b3IsIHRvX3ZlY3Rvci5lbmQoKSksIFtdKGJhc2ljX2pz
b24gaSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaS5nZXQ8VD4oKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuIHRvX3ZlY3RvcjsKKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWlu
X2Vycm9yPigidHlwZSBtdXN0IGJlIGFycmF5LCBidXQgaXMgIiArIHR5cGVfbmFtZSgpKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vLyBnZXQgYW4gYXJyYXkgKGV4cGxpY2l0KQorICAgIHRl
bXBsYXRlPGNsYXNzIFQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAorICAgICAgICAgICAgICAg
ICBzdGQ6OmlzX3NhbWU8YmFzaWNfanNvbiwgdHlwZW5hbWUgVDo6dmFsdWVfdHlwZT46OnZhbHVl
IGFuZAorICAgICAgICAgICAgICAgICBub3QgaGFzX21hcHBlZF90eXBlPFQ+Ojp2YWx1ZSwgaW50
Pjo6dHlwZSA9IDA+CisgICAgVCBnZXRfaW1wbChUKikgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChpc19hcnJheSgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gVChtX3ZhbHVlLmFy
cmF5LT5iZWdpbigpLCBtX3ZhbHVlLmFycmF5LT5lbmQoKSk7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oInR5
cGUgbXVzdCBiZSBhcnJheSwgYnV0IGlzICIgKyB0eXBlX25hbWUoKSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLy8gZ2V0IGFuIGFycmF5IChleHBsaWNpdCkKKyAgICBhcnJheV90IGdldF9p
bXBsKGFycmF5X3QqKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzX2FycmF5KCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqKG1fdmFsdWUuYXJyYXkpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJy
b3I+KCJ0eXBlIG11c3QgYmUgYXJyYXksIGJ1dCBpcyAiICsgdHlwZV9uYW1lKCkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgLy8vIGdldCBhIHN0cmluZyAoZXhwbGljaXQpCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8CisgICAgICAgICAgICAgICAg
IHN0ZDo6aXNfY29udmVydGlibGU8c3RyaW5nX3QsIFQ+Ojp2YWx1ZSwgaW50Pjo6dHlwZSA9IDA+
CisgICAgVCBnZXRfaW1wbChUKikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc19zdHJpbmco
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICptX3ZhbHVlLnN0cmluZzsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9t
YWluX2Vycm9yPigidHlwZSBtdXN0IGJlIHN0cmluZywgYnV0IGlzICIgKyB0eXBlX25hbWUoKSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8gZ2V0IGEgbnVtYmVyIChleHBsaWNpdCkKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKKyAgICAgICAg
ICAgICAgICAgc3RkOjppc19hcml0aG1ldGljPFQ+Ojp2YWx1ZSwgaW50Pjo6dHlwZSA9IDA+Cisg
ICAgVCBnZXRfaW1wbChUKikgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV90eXBlKQor
ICAgICAgICB7CisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyOgorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihtX3ZhbHVl
Lm51bWJlcl9pbnRlZ2VyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1
ZV90OjpudW1iZXJfdW5zaWduZWQ6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFQ+KG1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfZmxvYXQ6CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KG1fdmFsdWUubnVtYmVy
X2Zsb2F0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oInR5cGUgbXVz
dCBiZSBudW1iZXIsIGJ1dCBpcyAiICsgdHlwZV9uYW1lKCkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgLy8vIGdldCBhIGJvb2xlYW4gKGV4cGxpY2l0KQorICAgIGNv
bnN0ZXhwciBib29sZWFuX3QgZ2V0X2ltcGwoYm9vbGVhbl90KikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBpc19ib29sZWFuKCkKKyAgICAgICAgICAgICAgID8gbV92YWx1ZS5ib29sZWFu
CisgICAgICAgICAgICAgICA6IFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigidHlwZSBtdXN0IGJl
IGJvb2xlYW4sIGJ1dCBpcyAiICsgdHlwZV9uYW1lKCkpLCBmYWxzZTsKKyAgICB9CisKKyAgICAv
Ly8gZ2V0IGEgcG9pbnRlciB0byB0aGUgdmFsdWUgKG9iamVjdCkKKyAgICBvYmplY3RfdCogZ2V0
X2ltcGxfcHRyKG9iamVjdF90Kikgbm9leGNlcHQKKyAgICB7CisgICAgICAgIHJldHVybiBpc19v
YmplY3QoKSA/IG1fdmFsdWUub2JqZWN0IDogbnVsbHB0cjsKKyAgICB9CisKKyAgICAvLy8gZ2V0
IGEgcG9pbnRlciB0byB0aGUgdmFsdWUgKG9iamVjdCkKKyAgICBjb25zdGV4cHIgY29uc3Qgb2Jq
ZWN0X3QqIGdldF9pbXBsX3B0cihjb25zdCBvYmplY3RfdCopIGNvbnN0IG5vZXhjZXB0CisgICAg
eworICAgICAgICByZXR1cm4gaXNfb2JqZWN0KCkgPyBtX3ZhbHVlLm9iamVjdCA6IG51bGxwdHI7
CisgICAgfQorCisgICAgLy8vIGdldCBhIHBvaW50ZXIgdG8gdGhlIHZhbHVlIChhcnJheSkKKyAg
ICBhcnJheV90KiBnZXRfaW1wbF9wdHIoYXJyYXlfdCopIG5vZXhjZXB0CisgICAgeworICAgICAg
ICByZXR1cm4gaXNfYXJyYXkoKSA/IG1fdmFsdWUuYXJyYXkgOiBudWxscHRyOworICAgIH0KKwor
ICAgIC8vLyBnZXQgYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSAoYXJyYXkpCisgICAgY29uc3RleHBy
IGNvbnN0IGFycmF5X3QqIGdldF9pbXBsX3B0cihjb25zdCBhcnJheV90KikgY29uc3Qgbm9leGNl
cHQKKyAgICB7CisgICAgICAgIHJldHVybiBpc19hcnJheSgpID8gbV92YWx1ZS5hcnJheSA6IG51
bGxwdHI7CisgICAgfQorCisgICAgLy8vIGdldCBhIHBvaW50ZXIgdG8gdGhlIHZhbHVlIChzdHJp
bmcpCisgICAgc3RyaW5nX3QqIGdldF9pbXBsX3B0cihzdHJpbmdfdCopIG5vZXhjZXB0CisgICAg
eworICAgICAgICByZXR1cm4gaXNfc3RyaW5nKCkgPyBtX3ZhbHVlLnN0cmluZyA6IG51bGxwdHI7
CisgICAgfQorCisgICAgLy8vIGdldCBhIHBvaW50ZXIgdG8gdGhlIHZhbHVlIChzdHJpbmcpCisg
ICAgY29uc3RleHByIGNvbnN0IHN0cmluZ190KiBnZXRfaW1wbF9wdHIoY29uc3Qgc3RyaW5nX3Qq
KSBjb25zdCBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzX3N0cmluZygpID8gbV92
YWx1ZS5zdHJpbmcgOiBudWxscHRyOworICAgIH0KKworICAgIC8vLyBnZXQgYSBwb2ludGVyIHRv
IHRoZSB2YWx1ZSAoYm9vbGVhbikKKyAgICBib29sZWFuX3QqIGdldF9pbXBsX3B0cihib29sZWFu
X3QqKSBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzX2Jvb2xlYW4oKSA/ICZtX3Zh
bHVlLmJvb2xlYW4gOiBudWxscHRyOworICAgIH0KKworICAgIC8vLyBnZXQgYSBwb2ludGVyIHRv
IHRoZSB2YWx1ZSAoYm9vbGVhbikKKyAgICBjb25zdGV4cHIgY29uc3QgYm9vbGVhbl90KiBnZXRf
aW1wbF9wdHIoY29uc3QgYm9vbGVhbl90KikgY29uc3Qgbm9leGNlcHQKKyAgICB7CisgICAgICAg
IHJldHVybiBpc19ib29sZWFuKCkgPyAmbV92YWx1ZS5ib29sZWFuIDogbnVsbHB0cjsKKyAgICB9
CisKKyAgICAvLy8gZ2V0IGEgcG9pbnRlciB0byB0aGUgdmFsdWUgKGludGVnZXIgbnVtYmVyKQor
ICAgIG51bWJlcl9pbnRlZ2VyX3QqIGdldF9pbXBsX3B0cihudW1iZXJfaW50ZWdlcl90Kikgbm9l
eGNlcHQKKyAgICB7CisgICAgICAgIHJldHVybiBpc19udW1iZXJfaW50ZWdlcigpID8gJm1fdmFs
dWUubnVtYmVyX2ludGVnZXIgOiBudWxscHRyOworICAgIH0KKworICAgIC8vLyBnZXQgYSBwb2lu
dGVyIHRvIHRoZSB2YWx1ZSAoaW50ZWdlciBudW1iZXIpCisgICAgY29uc3RleHByIGNvbnN0IG51
bWJlcl9pbnRlZ2VyX3QqIGdldF9pbXBsX3B0cihjb25zdCBudW1iZXJfaW50ZWdlcl90KikgY29u
c3Qgbm9leGNlcHQKKyAgICB7CisgICAgICAgIHJldHVybiBpc19udW1iZXJfaW50ZWdlcigpID8g
Jm1fdmFsdWUubnVtYmVyX2ludGVnZXIgOiBudWxscHRyOworICAgIH0KKworICAgIC8vLyBnZXQg
YSBwb2ludGVyIHRvIHRoZSB2YWx1ZSAodW5zaWduZWQgbnVtYmVyKQorICAgIG51bWJlcl91bnNp
Z25lZF90KiBnZXRfaW1wbF9wdHIobnVtYmVyX3Vuc2lnbmVkX3QqKSBub2V4Y2VwdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGlzX251bWJlcl91bnNpZ25lZCgpID8gJm1fdmFsdWUubnVtYmVyX3Vu
c2lnbmVkIDogbnVsbHB0cjsKKyAgICB9CisKKyAgICAvLy8gZ2V0IGEgcG9pbnRlciB0byB0aGUg
dmFsdWUgKHVuc2lnbmVkIG51bWJlcikKKyAgICBjb25zdGV4cHIgY29uc3QgbnVtYmVyX3Vuc2ln
bmVkX3QqIGdldF9pbXBsX3B0cihjb25zdCBudW1iZXJfdW5zaWduZWRfdCopIGNvbnN0IG5vZXhj
ZXB0CisgICAgeworICAgICAgICByZXR1cm4gaXNfbnVtYmVyX3Vuc2lnbmVkKCkgPyAmbV92YWx1
ZS5udW1iZXJfdW5zaWduZWQgOiBudWxscHRyOworICAgIH0KKworICAgIC8vLyBnZXQgYSBwb2lu
dGVyIHRvIHRoZSB2YWx1ZSAoZmxvYXRpbmctcG9pbnQgbnVtYmVyKQorICAgIG51bWJlcl9mbG9h
dF90KiBnZXRfaW1wbF9wdHIobnVtYmVyX2Zsb2F0X3QqKSBub2V4Y2VwdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGlzX251bWJlcl9mbG9hdCgpID8gJm1fdmFsdWUubnVtYmVyX2Zsb2F0IDogbnVs
bHB0cjsKKyAgICB9CisKKyAgICAvLy8gZ2V0IGEgcG9pbnRlciB0byB0aGUgdmFsdWUgKGZsb2F0
aW5nLXBvaW50IG51bWJlcikKKyAgICBjb25zdGV4cHIgY29uc3QgbnVtYmVyX2Zsb2F0X3QqIGdl
dF9pbXBsX3B0cihjb25zdCBudW1iZXJfZmxvYXRfdCopIGNvbnN0IG5vZXhjZXB0CisgICAgewor
ICAgICAgICByZXR1cm4gaXNfbnVtYmVyX2Zsb2F0KCkgPyAmbV92YWx1ZS5udW1iZXJfZmxvYXQg
OiBudWxscHRyOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBoZWxwZXIgZnVuY3Rpb24g
dG8gaW1wbGVtZW50IGdldF9yZWYoKQorCisgICAgVGhpcyBmdW5jaW9uIGhlbHBzIHRvIGltcGxl
bWVudCBnZXRfcmVmKCkgd2l0aG91dCBjb2RlIGR1cGxpY2F0aW9uIGZvcgorICAgIGNvbnN0IGFu
ZCBub24tY29uc3Qgb3ZlcmxvYWRzCisKKyAgICBAdHBhcmFtIFRoaXNUeXBlIHdpbGwgYmUgZGVk
dWNlZCBhcyBgYmFzaWNfanNvbmAgb3IgYGNvbnN0IGJhc2ljX2pzb25gCisKKyAgICBAdGhyb3cg
c3RkOjpkb21haW5fZXJyb3IgaWYgUmVmZXJlbmNlVHlwZSBkb2VzIG5vdCBtYXRjaCB1bmRlcmx5
aW5nIHZhbHVlCisgICAgdHlwZSBvZiB0aGUgY3VycmVudCBKU09OCisgICAgKi8KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBSZWZlcmVuY2VUeXBlLCB0eXBlbmFtZSBUaGlzVHlwZT4KKyAgICBzdGF0
aWMgUmVmZXJlbmNlVHlwZSBnZXRfcmVmX2ltcGwoVGhpc1R5cGUmIG9iaikKKyAgICB7CisgICAg
ICAgIC8vIGhlbHBlciB0eXBlCisgICAgICAgIHVzaW5nIFBvaW50ZXJUeXBlID0gdHlwZW5hbWUg
c3RkOjphZGRfcG9pbnRlcjxSZWZlcmVuY2VUeXBlPjo6dHlwZTsKKworICAgICAgICAvLyBkZWxl
Z2F0ZSB0aGUgY2FsbCB0byBnZXRfcHRyPD4oKQorICAgICAgICBhdXRvIHB0ciA9IG9iai50ZW1w
bGF0ZSBnZXRfcHRyPFBvaW50ZXJUeXBlPigpOworCisgICAgICAgIGlmIChwdHIgIT0gbnVsbHB0
cikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpwdHI7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4o
ImluY29tcGF0aWJsZSBSZWZlcmVuY2VUeXBlIGZvciBnZXRfcmVmLCBhY3R1YWwgdHlwZSBpcyAi
ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai50eXBlX25hbWUoKSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgcHVibGljOgorCisgICAgLy8vIEBuYW1lIHZhbHVlIGFj
Y2VzcworICAgIC8vLyBEaXJlY3QgYWNjZXNzIHRvIHRoZSBzdG9yZWQgdmFsdWUgb2YgYSBKU09O
IHZhbHVlLgorICAgIC8vLyBAeworCisgICAgLyohCisgICAgQGJyaWVmIGdldCBhIHZhbHVlIChl
eHBsaWNpdCkKKworICAgIEV4cGxpY2l0IHR5cGUgY29udmVyc2lvbiBiZXR3ZWVuIHRoZSBKU09O
IHZhbHVlIGFuZCBhIGNvbXBhdGlibGUgdmFsdWUuCisKKyAgICBAdHBhcmFtIFZhbHVlVHlwZSBu
b24tcG9pbnRlciB0eXBlIGNvbXBhdGlibGUgdG8gdGhlIEpTT04gdmFsdWUsIGZvcgorICAgIGlu
c3RhbmNlIGBpbnRgIGZvciBKU09OIGludGVnZXIgbnVtYmVycywgYGJvb2xgIGZvciBKU09OIGJv
b2xlYW5zLCBvcgorICAgIGBzdGQ6OnZlY3RvcmAgdHlwZXMgZm9yIEpTT04gYXJyYXlzCisKKyAg
ICBAcmV0dXJuIGNvcHkgb2YgdGhlIEpTT04gdmFsdWUsIGNvbnZlcnRlZCB0byB0eXBlIEBhIFZh
bHVlVHlwZQorCisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGluIGNhc2UgcGFzc2VkIHR5
cGUgQGEgVmFsdWVUeXBlIGlzIGluY29tcGF0aWJsZQorICAgIHRvIEpTT047IGV4YW1wbGU6IGAi
dHlwZSBtdXN0IGJlIG9iamVjdCwgYnV0IGlzIG51bGwiYAorCisgICAgQGNvbXBsZXhpdHkgTGlu
ZWFyIGluIHRoZSBzaXplIG9mIHRoZSBKU09OIHZhbHVlLgorCisgICAgQGxpdmVleGFtcGxle1Ro
ZSBleGFtcGxlIGJlbG93IHNob3dzIHNldmVyYWwgY29udmVyc2lvbnMgZnJvbSBKU09OIHZhbHVl
cworICAgIHRvIG90aGVyIHR5cGVzLiBUaGVyZSBhIGZldyB0aGluZ3MgdG8gbm90ZTogKDEpIEZs
b2F0aW5nLXBvaW50IG51bWJlcnMgY2FuCisgICAgYmUgY29udmVydGVkIHRvIGludGVnZXJzXCwg
KDIpIEEgSlNPTiBhcnJheSBjYW4gYmUgY29udmVydGVkIHRvIGEgc3RhbmRhcmQKKyAgICBgc3Rk
Ojp2ZWN0b3I8c2hvcnQ+YFwsICgzKSBBIEpTT04gb2JqZWN0IGNhbiBiZSBjb252ZXJ0ZWQgdG8g
QysrCisgICAgYXNzb2NpYXRpdmUgY29udGFpbmVycyBzdWNoIGFzIGBzdGQ6OnVub3JkZXJlZF9t
YXA8c3RkOjpzdHJpbmdcLAorICAgIGpzb24+YC4sZ2V0X19WYWx1ZVR5cGVfY29uc3R9CisKKyAg
ICBAaW50ZXJuYWwKKyAgICBUaGUgaWRlYSBvZiB1c2luZyBhIGNhc3RlZCBudWxsIHBvaW50ZXIg
dG8gY2hvb3NlIHRoZSBjb3JyZWN0CisgICAgaW1wbGVtZW50YXRpb24gaXMgZnJvbSA8aHR0cDov
L3N0YWNrb3ZlcmZsb3cuY29tL2EvODMxNTE5Ny8yNjYzNzg+LgorICAgIEBlbmRpbnRlcm5hbAor
CisgICAgQHNhIEByZWYgb3BlcmF0b3IgVmFsdWVUeXBlKCkgY29uc3QgZm9yIGltcGxpY2l0IGNv
bnZlcnNpb24KKyAgICBAc2EgQHJlZiBnZXQoKSBmb3IgcG9pbnRlci1tZW1iZXIgYWNjZXNzCisK
KyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmFsdWVUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKKyAgICAgICAgICAgICAgICAgbm90
IHN0ZDo6aXNfcG9pbnRlcjxWYWx1ZVR5cGU+Ojp2YWx1ZSwgaW50Pjo6dHlwZSA9IDA+CisgICAg
VmFsdWVUeXBlIGdldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZ2V0X2ltcGwoc3Rh
dGljX2Nhc3Q8VmFsdWVUeXBlKj4obnVsbHB0cikpOworICAgIH0KKworICAgIC8qIQorICAgIEBi
cmllZiBnZXQgYSBwb2ludGVyIHZhbHVlIChleHBsaWNpdCkKKworICAgIEV4cGxpY2l0IHBvaW50
ZXIgYWNjZXNzIHRvIHRoZSBpbnRlcm5hbGx5IHN0b3JlZCBKU09OIHZhbHVlLiBObyBjb3BpZXMg
YXJlCisgICAgbWFkZS4KKworICAgIEB3YXJuaW5nIFRoZSBwb2ludGVyIGJlY29tZXMgaW52YWxp
ZCBpZiB0aGUgdW5kZXJseWluZyBKU09OIG9iamVjdAorICAgIGNoYW5nZXMuCisKKyAgICBAdHBh
cmFtIFBvaW50ZXJUeXBlIHBvaW50ZXIgdHlwZTsgbXVzdCBiZSBhIHBvaW50ZXIgdG8gQHJlZiBh
cnJheV90LCBAcmVmCisgICAgb2JqZWN0X3QsIEByZWYgc3RyaW5nX3QsIEByZWYgYm9vbGVhbl90
LCBAcmVmIG51bWJlcl9pbnRlZ2VyX3QsCisgICAgQHJlZiBudW1iZXJfdW5zaWduZWRfdCwgb3Ig
QHJlZiBudW1iZXJfZmxvYXRfdC4KKworICAgIEByZXR1cm4gcG9pbnRlciB0byB0aGUgaW50ZXJu
YWxseSBzdG9yZWQgSlNPTiB2YWx1ZSBpZiB0aGUgcmVxdWVzdGVkCisgICAgcG9pbnRlciB0eXBl
IEBhIFBvaW50ZXJUeXBlIGZpdHMgdG8gdGhlIEpTT04gdmFsdWU7IGBudWxscHRyYCBvdGhlcndp
c2UKKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQGxpdmVleGFtcGxle1RoZSBl
eGFtcGxlIGJlbG93IHNob3dzIGhvdyBwb2ludGVycyB0byBpbnRlcm5hbCB2YWx1ZXMgb2YgYQor
ICAgIEpTT04gdmFsdWUgY2FuIGJlIHJlcXVlc3RlZC4gTm90ZSB0aGF0IG5vIHR5cGUgY29udmVy
c2lvbnMgYXJlIG1hZGUgYW5kIGEKKyAgICBgbnVsbHB0cmAgaXMgcmV0dXJuZWQgaWYgdGhlIHZh
bHVlIGFuZCB0aGUgcmVxdWVzdGVkIHBvaW50ZXIgdHlwZSBkb2VzIG5vdAorICAgIG1hdGNoLixn
ZXRfX1BvaW50ZXJUeXBlfQorCisgICAgQHNhIEByZWYgZ2V0X3B0cigpIGZvciBleHBsaWNpdCBw
b2ludGVyLW1lbWJlciBhY2Nlc3MKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQb2ludGVyVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8CisgICAgICAgICAgICAgICAgIHN0ZDo6aXNfcG9pbnRlcjxQb2ludGVyVHlwZT46OnZhbHVl
LCBpbnQ+Ojp0eXBlID0gMD4KKyAgICBQb2ludGVyVHlwZSBnZXQoKSBub2V4Y2VwdAorICAgIHsK
KyAgICAgICAgLy8gZGVsZWdhdGUgdGhlIGNhbGwgdG8gZ2V0X3B0cgorICAgICAgICByZXR1cm4g
Z2V0X3B0cjxQb2ludGVyVHlwZT4oKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgZ2V0
IGEgcG9pbnRlciB2YWx1ZSAoZXhwbGljaXQpCisgICAgQGNvcHlkb2MgZ2V0KCkKKyAgICAqLwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBvaW50ZXJUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjwKKyAgICAgICAgICAgICAgICAgc3RkOjppc19wb2ludGVyPFBvaW50ZXJUeXBlPjo6dmFsdWUs
IGludD46OnR5cGUgPSAwPgorICAgIGNvbnN0ZXhwciBjb25zdCBQb2ludGVyVHlwZSBnZXQoKSBj
b25zdCBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgLy8gZGVsZWdhdGUgdGhlIGNhbGwgdG8gZ2V0
X3B0cgorICAgICAgICByZXR1cm4gZ2V0X3B0cjxQb2ludGVyVHlwZT4oKTsKKyAgICB9CisKKyAg
ICAvKiEKKyAgICBAYnJpZWYgZ2V0IGEgcG9pbnRlciB2YWx1ZSAoaW1wbGljaXQpCisKKyAgICBJ
bXBsaWNpdCBwb2ludGVyIGFjY2VzcyB0byB0aGUgaW50ZXJuYWxseSBzdG9yZWQgSlNPTiB2YWx1
ZS4gTm8gY29waWVzIGFyZQorICAgIG1hZGUuCisKKyAgICBAd2FybmluZyBXcml0aW5nIGRhdGEg
dG8gdGhlIHBvaW50ZWUgb2YgdGhlIHJlc3VsdCB5aWVsZHMgYW4gdW5kZWZpbmVkCisgICAgc3Rh
dGUuCisKKyAgICBAdHBhcmFtIFBvaW50ZXJUeXBlIHBvaW50ZXIgdHlwZTsgbXVzdCBiZSBhIHBv
aW50ZXIgdG8gQHJlZiBhcnJheV90LCBAcmVmCisgICAgb2JqZWN0X3QsIEByZWYgc3RyaW5nX3Qs
IEByZWYgYm9vbGVhbl90LCBAcmVmIG51bWJlcl9pbnRlZ2VyX3QsCisgICAgQHJlZiBudW1iZXJf
dW5zaWduZWRfdCwgb3IgQHJlZiBudW1iZXJfZmxvYXRfdC4gRW5mb3JjZWQgYnkgYSBzdGF0aWMK
KyAgICBhc3NlcnRpb24uCisKKyAgICBAcmV0dXJuIHBvaW50ZXIgdG8gdGhlIGludGVybmFsbHkg
c3RvcmVkIEpTT04gdmFsdWUgaWYgdGhlIHJlcXVlc3RlZAorICAgIHBvaW50ZXIgdHlwZSBAYSBQ
b2ludGVyVHlwZSBmaXRzIHRvIHRoZSBKU09OIHZhbHVlOyBgbnVsbHB0cmAgb3RoZXJ3aXNlCisK
KyAgICBAY29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBs
ZSBiZWxvdyBzaG93cyBob3cgcG9pbnRlcnMgdG8gaW50ZXJuYWwgdmFsdWVzIG9mIGEKKyAgICBK
U09OIHZhbHVlIGNhbiBiZSByZXF1ZXN0ZWQuIE5vdGUgdGhhdCBubyB0eXBlIGNvbnZlcnNpb25z
IGFyZSBtYWRlIGFuZCBhCisgICAgYG51bGxwdHJgIGlzIHJldHVybmVkIGlmIHRoZSB2YWx1ZSBh
bmQgdGhlIHJlcXVlc3RlZCBwb2ludGVyIHR5cGUgZG9lcyBub3QKKyAgICBtYXRjaC4sZ2V0X3B0
cn0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBQb2ludGVyVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8CisgICAgICAgICAgICAg
ICAgIHN0ZDo6aXNfcG9pbnRlcjxQb2ludGVyVHlwZT46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4K
KyAgICBQb2ludGVyVHlwZSBnZXRfcHRyKCkgbm9leGNlcHQKKyAgICB7CisgICAgICAgIC8vIGdl
dCB0aGUgdHlwZSBvZiB0aGUgUG9pbnRlclR5cGUgKHJlbW92ZSBwb2ludGVyIGFuZCBjb25zdCkK
KyAgICAgICAgdXNpbmcgcG9pbnRlZV90ID0gdHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8dHlw
ZW5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpyZW1vdmVfcG9pbnRlcjx0eXBl
bmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnJlbW92ZV9jb25zdDxQb2ludGVy
VHlwZT46OnR5cGU+Ojp0eXBlPjo6dHlwZTsKKyAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSB0eXBl
IG1hdGNoZXMgdGhlIGFsbG93ZWQgdHlwZXMKKyAgICAgICAgc3RhdGljX2Fzc2VydCgKKyAgICAg
ICAgICAgIHN0ZDo6aXNfc2FtZTxvYmplY3RfdCwgcG9pbnRlZV90Pjo6dmFsdWUKKyAgICAgICAg
ICAgIG9yIHN0ZDo6aXNfc2FtZTxhcnJheV90LCBwb2ludGVlX3Q+Ojp2YWx1ZQorICAgICAgICAg
ICAgb3Igc3RkOjppc19zYW1lPHN0cmluZ190LCBwb2ludGVlX3Q+Ojp2YWx1ZQorICAgICAgICAg
ICAgb3Igc3RkOjppc19zYW1lPGJvb2xlYW5fdCwgcG9pbnRlZV90Pjo6dmFsdWUKKyAgICAgICAg
ICAgIG9yIHN0ZDo6aXNfc2FtZTxudW1iZXJfaW50ZWdlcl90LCBwb2ludGVlX3Q+Ojp2YWx1ZQor
ICAgICAgICAgICAgb3Igc3RkOjppc19zYW1lPG51bWJlcl91bnNpZ25lZF90LCBwb2ludGVlX3Q+
Ojp2YWx1ZQorICAgICAgICAgICAgb3Igc3RkOjppc19zYW1lPG51bWJlcl9mbG9hdF90LCBwb2lu
dGVlX3Q+Ojp2YWx1ZQorICAgICAgICAgICAgLCAiaW5jb21wYXRpYmxlIHBvaW50ZXIgdHlwZSIp
OworCisgICAgICAgIC8vIGRlbGVnYXRlIHRoZSBjYWxsIHRvIGdldF9pbXBsX3B0cjw+KCkKKyAg
ICAgICAgcmV0dXJuIGdldF9pbXBsX3B0cihzdGF0aWNfY2FzdDxQb2ludGVyVHlwZT4obnVsbHB0
cikpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBnZXQgYSBwb2ludGVyIHZhbHVlIChp
bXBsaWNpdCkKKyAgICBAY29weWRvYyBnZXRfcHRyKCkKKyAgICAqLworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFBvaW50ZXJUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKKyAgICAgICAgICAg
ICAgICAgc3RkOjppc19wb2ludGVyPFBvaW50ZXJUeXBlPjo6dmFsdWUgYW5kCisgICAgICAgICAg
ICAgICAgIHN0ZDo6aXNfY29uc3Q8dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxQb2ludGVy
VHlwZT46OnR5cGU+Ojp2YWx1ZSwgaW50Pjo6dHlwZSA9IDA+CisgICAgY29uc3RleHByIGNvbnN0
IFBvaW50ZXJUeXBlIGdldF9wdHIoKSBjb25zdCBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgLy8g
Z2V0IHRoZSB0eXBlIG9mIHRoZSBQb2ludGVyVHlwZSAocmVtb3ZlIHBvaW50ZXIgYW5kIGNvbnN0
KQorICAgICAgICB1c2luZyBwb2ludGVlX3QgPSB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDx0
eXBlbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnJlbW92ZV9wb2ludGVyPHR5
cGVuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6cmVtb3ZlX2NvbnN0PFBvaW50
ZXJUeXBlPjo6dHlwZT46OnR5cGU+Ojp0eXBlOworICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIHR5
cGUgbWF0Y2hlcyB0aGUgYWxsb3dlZCB0eXBlcworICAgICAgICBzdGF0aWNfYXNzZXJ0KAorICAg
ICAgICAgICAgc3RkOjppc19zYW1lPG9iamVjdF90LCBwb2ludGVlX3Q+Ojp2YWx1ZQorICAgICAg
ICAgICAgb3Igc3RkOjppc19zYW1lPGFycmF5X3QsIHBvaW50ZWVfdD46OnZhbHVlCisgICAgICAg
ICAgICBvciBzdGQ6OmlzX3NhbWU8c3RyaW5nX3QsIHBvaW50ZWVfdD46OnZhbHVlCisgICAgICAg
ICAgICBvciBzdGQ6OmlzX3NhbWU8Ym9vbGVhbl90LCBwb2ludGVlX3Q+Ojp2YWx1ZQorICAgICAg
ICAgICAgb3Igc3RkOjppc19zYW1lPG51bWJlcl9pbnRlZ2VyX3QsIHBvaW50ZWVfdD46OnZhbHVl
CisgICAgICAgICAgICBvciBzdGQ6OmlzX3NhbWU8bnVtYmVyX3Vuc2lnbmVkX3QsIHBvaW50ZWVf
dD46OnZhbHVlCisgICAgICAgICAgICBvciBzdGQ6OmlzX3NhbWU8bnVtYmVyX2Zsb2F0X3QsIHBv
aW50ZWVfdD46OnZhbHVlCisgICAgICAgICAgICAsICJpbmNvbXBhdGlibGUgcG9pbnRlciB0eXBl
Iik7CisKKyAgICAgICAgLy8gZGVsZWdhdGUgdGhlIGNhbGwgdG8gZ2V0X2ltcGxfcHRyPD4oKSBj
b25zdAorICAgICAgICByZXR1cm4gZ2V0X2ltcGxfcHRyKHN0YXRpY19jYXN0PGNvbnN0IFBvaW50
ZXJUeXBlPihudWxscHRyKSk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGdldCBhIHJl
ZmVyZW5jZSB2YWx1ZSAoaW1wbGljaXQpCisKKyAgICBJbXBsaWN0IHJlZmVyZW5jZSBhY2Nlc3Mg
dG8gdGhlIGludGVybmFsbHkgc3RvcmVkIEpTT04gdmFsdWUuIE5vIGNvcGllcworICAgIGFyZSBt
YWRlLgorCisgICAgQHdhcm5pbmcgV3JpdGluZyBkYXRhIHRvIHRoZSByZWZlcmVlIG9mIHRoZSBy
ZXN1bHQgeWllbGRzIGFuIHVuZGVmaW5lZAorICAgIHN0YXRlLgorCisgICAgQHRwYXJhbSBSZWZl
cmVuY2VUeXBlIHJlZmVyZW5jZSB0eXBlOyBtdXN0IGJlIGEgcmVmZXJlbmNlIHRvIEByZWYgYXJy
YXlfdCwKKyAgICBAcmVmIG9iamVjdF90LCBAcmVmIHN0cmluZ190LCBAcmVmIGJvb2xlYW5fdCwg
QHJlZiBudW1iZXJfaW50ZWdlcl90LCBvcgorICAgIEByZWYgbnVtYmVyX2Zsb2F0X3QuIEVuZm9y
Y2VkIGJ5IHN0YXRpYyBhc3NlcnRpb24uCisKKyAgICBAcmV0dXJuIHJlZmVyZW5jZSB0byB0aGUg
aW50ZXJuYWxseSBzdG9yZWQgSlNPTiB2YWx1ZSBpZiB0aGUgcmVxdWVzdGVkCisgICAgcmVmZXJl
bmNlIHR5cGUgQGEgUmVmZXJlbmNlVHlwZSBmaXRzIHRvIHRoZSBKU09OIHZhbHVlOyB0aHJvd3MK
KyAgICBzdGQ6OmRvbWFpbl9lcnJvciBvdGhlcndpc2UKKworICAgIEB0aHJvdyBzdGQ6OmRvbWFp
bl9lcnJvciBpbiBjYXNlIHBhc3NlZCB0eXBlIEBhIFJlZmVyZW5jZVR5cGUgaXMKKyAgICBpbmNv
bXBhdGlibGUgd2l0aCB0aGUgc3RvcmVkIEpTT04gdmFsdWUKKworICAgIEBjb21wbGV4aXR5IENv
bnN0YW50LgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIHNob3dzIHNldmVyYWwgY2Fs
bHMgdG8gYGdldF9yZWYoKWAuLGdldF9yZWZ9CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjEuMAor
ICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUmVmZXJlbmNlVHlwZSwgdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8CisgICAgICAgICAgICAgICAgIHN0ZDo6aXNfcmVmZXJlbmNlPFJlZmVyZW5j
ZVR5cGU+Ojp2YWx1ZSwgaW50Pjo6dHlwZSA9IDA+CisgICAgUmVmZXJlbmNlVHlwZSBnZXRfcmVm
KCkKKyAgICB7CisgICAgICAgIC8vIGRlbGVnYXRlIGNhbGwgdG8gZ2V0X3JlZl9pbXBsCisgICAg
ICAgIHJldHVybiBnZXRfcmVmX2ltcGw8UmVmZXJlbmNlVHlwZT4oKnRoaXMpOworICAgIH0KKwor
ICAgIC8qIQorICAgIEBicmllZiBnZXQgYSByZWZlcmVuY2UgdmFsdWUgKGltcGxpY2l0KQorICAg
IEBjb3B5ZG9jIGdldF9yZWYoKQorICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUmVmZXJl
bmNlVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8CisgICAgICAgICAgICAgICAgIHN0ZDo6
aXNfcmVmZXJlbmNlPFJlZmVyZW5jZVR5cGU+Ojp2YWx1ZSBhbmQKKyAgICAgICAgICAgICAgICAg
c3RkOjppc19jb25zdDx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8UmVmZXJlbmNlVHlw
ZT46OnR5cGU+Ojp2YWx1ZSwgaW50Pjo6dHlwZSA9IDA+CisgICAgUmVmZXJlbmNlVHlwZSBnZXRf
cmVmKCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIGRlbGVnYXRlIGNhbGwgdG8gZ2V0X3JlZl9p
bXBsCisgICAgICAgIHJldHVybiBnZXRfcmVmX2ltcGw8UmVmZXJlbmNlVHlwZT4oKnRoaXMpOwor
ICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBnZXQgYSB2YWx1ZSAoaW1wbGljaXQpCisKKyAg
ICBJbXBsaWNpdCB0eXBlIGNvbnZlcnNpb24gYmV0d2VlbiB0aGUgSlNPTiB2YWx1ZSBhbmQgYSBj
b21wYXRpYmxlIHZhbHVlLgorICAgIFRoZSBjYWxsIGlzIHJlYWxpemVkIGJ5IGNhbGxpbmcgQHJl
ZiBnZXQoKSBjb25zdC4KKworICAgIEB0cGFyYW0gVmFsdWVUeXBlIG5vbi1wb2ludGVyIHR5cGUg
Y29tcGF0aWJsZSB0byB0aGUgSlNPTiB2YWx1ZSwgZm9yCisgICAgaW5zdGFuY2UgYGludGAgZm9y
IEpTT04gaW50ZWdlciBudW1iZXJzLCBgYm9vbGAgZm9yIEpTT04gYm9vbGVhbnMsIG9yCisgICAg
YHN0ZDo6dmVjdG9yYCB0eXBlcyBmb3IgSlNPTiBhcnJheXMuIFRoZSBjaGFyYWN0ZXIgdHlwZSBv
ZiBAcmVmIHN0cmluZ190CisgICAgYXMgd2VsbCBhcyBhbiBpbml0aWFsaXplciBsaXN0IG9mIHRo
aXMgdHlwZSBpcyBleGNsdWRlZCB0byBhdm9pZAorICAgIGFtYmlndWl0aWVzIGFzIHRoZXNlIHR5
cGVzIGltcGxpY2l0bHkgY29udmVydCB0byBgc3RkOjpzdHJpbmdgLgorCisgICAgQHJldHVybiBj
b3B5IG9mIHRoZSBKU09OIHZhbHVlLCBjb252ZXJ0ZWQgdG8gdHlwZSBAYSBWYWx1ZVR5cGUKKwor
ICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpbiBjYXNlIHBhc3NlZCB0eXBlIEBhIFZhbHVl
VHlwZSBpcyBpbmNvbXBhdGlibGUKKyAgICB0byBKU09OLCB0aHJvd24gYnkgQHJlZiBnZXQoKSBj
b25zdAorCisgICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIHRoZSBzaXplIG9mIHRoZSBKU09OIHZh
bHVlLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJlbG93IHNob3dzIHNldmVyYWwg
Y29udmVyc2lvbnMgZnJvbSBKU09OIHZhbHVlcworICAgIHRvIG90aGVyIHR5cGVzLiBUaGVyZSBh
IGZldyB0aGluZ3MgdG8gbm90ZTogKDEpIEZsb2F0aW5nLXBvaW50IG51bWJlcnMgY2FuCisgICAg
YmUgY29udmVydGVkIHRvIGludGVnZXJzXCwgKDIpIEEgSlNPTiBhcnJheSBjYW4gYmUgY29udmVy
dGVkIHRvIGEgc3RhbmRhcmQKKyAgICBgc3RkOjp2ZWN0b3I8c2hvcnQ+YFwsICgzKSBBIEpTT04g
b2JqZWN0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gQysrCisgICAgYXNzb2NpYXRpdmUgY29udGFpbmVy
cyBzdWNoIGFzIGBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmdcLAorICAgIGpzb24+YC4s
b3BlcmF0b3JfX1ZhbHVlVHlwZX0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8K
KyAgICB0ZW1wbGF0ZSA8IHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVf
aWYgPAorICAgICAgICAgICAgICAgICAgIG5vdCBzdGQ6OmlzX3BvaW50ZXI8VmFsdWVUeXBlPjo6
dmFsdWUgYW5kCisgICAgICAgICAgICAgICAgICAgbm90IHN0ZDo6aXNfc2FtZTxWYWx1ZVR5cGUs
IHR5cGVuYW1lIHN0cmluZ190Ojp2YWx1ZV90eXBlPjo6dmFsdWUKKyNpZm5kZWYgX01TQ19WRVIg
IC8vIEZpeCBmb3IgaXNzdWUgIzE2NyBvcGVyYXRvcjw8IGFiaWd1aXR5IHVuZGVyIFZTMjAxNQor
ICAgICAgICAgICAgICAgICAgIGFuZCBub3Qgc3RkOjppc19zYW1lPFZhbHVlVHlwZSwgc3RkOjpp
bml0aWFsaXplcl9saXN0PHR5cGVuYW1lIHN0cmluZ190Ojp2YWx1ZV90eXBlPj46OnZhbHVlCisj
ZW5kaWYKKyAgICAgICAgICAgICAgICAgICAsIGludCA+Ojp0eXBlID0gMCA+CisgICAgb3BlcmF0
b3IgVmFsdWVUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIGRlbGVnYXRlIHRoZSBjYWxs
IHRvIGdldDw+KCkgY29uc3QKKyAgICAgICAgcmV0dXJuIGdldDxWYWx1ZVR5cGU+KCk7CisgICAg
fQorCisgICAgLy8vIEB9CisKKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy8gZWxl
bWVudCBhY2Nlc3MgLy8KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgLy8vIEBuYW1l
IGVsZW1lbnQgYWNjZXNzCisgICAgLy8vIEFjY2VzcyB0byB0aGUgSlNPTiB2YWx1ZS4KKyAgICAv
Ly8gQHsKKworICAgIC8qIQorICAgIEBicmllZiBhY2Nlc3Mgc3BlY2lmaWVkIGFycmF5IGVsZW1l
bnQgd2l0aCBib3VuZHMgY2hlY2tpbmcKKworICAgIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhl
IGVsZW1lbnQgYXQgc3BlY2lmaWVkIGxvY2F0aW9uIEBhIGlkeCwgd2l0aAorICAgIGJvdW5kcyBj
aGVja2luZy4KKworICAgIEBwYXJhbVtpbl0gaWR4ICBpbmRleCBvZiB0aGUgZWxlbWVudCB0byBh
Y2Nlc3MKKworICAgIEByZXR1cm4gcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IGluZGV4IEBh
IGlkeAorCisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIHRoZSBKU09OIHZhbHVlIGlz
IG5vdCBhbiBhcnJheTsgZXhhbXBsZToKKyAgICBgImNhbm5vdCB1c2UgYXQoKSB3aXRoIHN0cmlu
ZyJgCisgICAgQHRocm93IHN0ZDo6b3V0X29mX3JhbmdlIGlmIHRoZSBpbmRleCBAYSBpZHggaXMg
b3V0IG9mIHJhbmdlIG9mIHRoZSBhcnJheTsKKyAgICB0aGF0IGlzLCBgaWR4ID49IHNpemUoKWA7
IGV4YW1wbGU6IGAiYXJyYXkgaW5kZXggNyBpcyBvdXQgb2YgcmFuZ2UiYAorCisgICAgQGNvbXBs
ZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgc2hv
d3MgaG93IGFycmF5IGVsZW1lbnRzIGNhbiBiZSByZWFkIGFuZAorICAgIHdyaXR0ZW4gdXNpbmcg
YGF0KClgLixhdF9fc2l6ZV90eXBlfQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAq
LworICAgIHJlZmVyZW5jZSBhdChzaXplX3R5cGUgaWR4KQorICAgIHsKKyAgICAgICAgLy8gYXQg
b25seSB3b3JrcyBmb3IgYXJyYXlzCisgICAgICAgIGlmIChpc19hcnJheSgpKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoaWR4IDwgbV92YWx1ZS5hcnJheS0+c2l6ZSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBtX3ZhbHVlLmFycmF5LT5hdChpZHgpOworICAgICAgICAgICAgVGhyb3c8
c3RkOjpvdXRfb2ZfcmFuZ2U+KCJhcnJheSBpbmRleCAiICsgc3RkOjp0b19zdHJpbmcoaWR4KSAr
ICIgaXMgb3V0IG9mIHJhbmdlIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oImNhbm5vdCB1c2UgYXQoKSB3
aXRoICIgKyB0eXBlX25hbWUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiEKKyAgICBA
YnJpZWYgYWNjZXNzIHNwZWNpZmllZCBhcnJheSBlbGVtZW50IHdpdGggYm91bmRzIGNoZWNraW5n
CisKKyAgICBSZXR1cm5zIGEgY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IHNwZWNp
ZmllZCBsb2NhdGlvbiBAYSBpZHgsCisgICAgd2l0aCBib3VuZHMgY2hlY2tpbmcuCisKKyAgICBA
cGFyYW1baW5dIGlkeCAgaW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gYWNjZXNzCisKKyAgICBAcmV0
dXJuIGNvbnN0IHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCBhdCBpbmRleCBAYSBpZHgKKworICAg
IEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiB0aGUgSlNPTiB2YWx1ZSBpcyBub3QgYW4gYXJy
YXk7IGV4YW1wbGU6CisgICAgYCJjYW5ub3QgdXNlIGF0KCkgd2l0aCBzdHJpbmciYAorICAgIEB0
aHJvdyBzdGQ6Om91dF9vZl9yYW5nZSBpZiB0aGUgaW5kZXggQGEgaWR4IGlzIG91dCBvZiByYW5n
ZSBvZiB0aGUgYXJyYXk7CisgICAgdGhhdCBpcywgYGlkeCA+PSBzaXplKClgOyBleGFtcGxlOiBg
ImFycmF5IGluZGV4IDcgaXMgb3V0IG9mIHJhbmdlImAKKworICAgIEBjb21wbGV4aXR5IENvbnN0
YW50LgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyBhcnJh
eSBlbGVtZW50cyBjYW4gYmUgcmVhZCB1c2luZworICAgIGBhdCgpYC4sYXRfX3NpemVfdHlwZV9j
b25zdH0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBjb25zdF9yZWZl
cmVuY2UgYXQoc2l6ZV90eXBlIGlkeCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIGF0IG9ubHkg
d29ya3MgZm9yIGFycmF5cworICAgICAgICBpZiAoaXNfYXJyYXkoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKGlkeCA8IG1fdmFsdWUuYXJyYXktPnNpemUoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV92YWx1ZS5hcnJheS0+YXQoaWR4KTsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6
b3V0X29mX3JhbmdlPigiYXJyYXkgaW5kZXggIiArIHN0ZDo6dG9fc3RyaW5nKGlkeCkgKyAiIGlz
IG91dCBvZiByYW5nZSIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJjYW5ub3QgdXNlIGF0KCkgd2l0aCAi
ICsgdHlwZV9uYW1lKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVm
IGFjY2VzcyBzcGVjaWZpZWQgb2JqZWN0IGVsZW1lbnQgd2l0aCBib3VuZHMgY2hlY2tpbmcKKwor
ICAgIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgYXQgd2l0aCBzcGVjaWZpZWQg
a2V5IEBhIGtleSwgd2l0aAorICAgIGJvdW5kcyBjaGVja2luZy4KKworICAgIEBwYXJhbVtpbl0g
a2V5ICBrZXkgb2YgdGhlIGVsZW1lbnQgdG8gYWNjZXNzCisKKyAgICBAcmV0dXJuIHJlZmVyZW5j
ZSB0byB0aGUgZWxlbWVudCBhdCBrZXkgQGEga2V5CisKKyAgICBAdGhyb3cgc3RkOjpkb21haW5f
ZXJyb3IgaWYgdGhlIEpTT04gdmFsdWUgaXMgbm90IGFuIG9iamVjdDsgZXhhbXBsZToKKyAgICBg
ImNhbm5vdCB1c2UgYXQoKSB3aXRoIGJvb2xlYW4iYAorICAgIEB0aHJvdyBzdGQ6Om91dF9vZl9y
YW5nZSBpZiB0aGUga2V5IEBhIGtleSBpcyBpcyBub3Qgc3RvcmVkIGluIHRoZSBvYmplY3Q7Cisg
ICAgdGhhdCBpcywgYGZpbmQoa2V5KSA9PSBlbmQoKWA7IGV4YW1wbGU6IGAia2V5ICJ0aGUgZmFz
dCIgbm90IGZvdW5kImAKKworICAgIEBjb21wbGV4aXR5IExvZ2FyaXRobWljIGluIHRoZSBzaXpl
IG9mIHRoZSBjb250YWluZXIuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cg
c2hvd3MgaG93IG9iamVjdCBlbGVtZW50cyBjYW4gYmUgcmVhZCBhbmQKKyAgICB3cml0dGVuIHVz
aW5nIGBhdCgpYC4sYXRfX29iamVjdF90X2tleV90eXBlfQorCisgICAgQHNhIEByZWYgb3BlcmF0
b3JbXShjb25zdCB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUmKSBmb3IgdW5jaGVja2VkCisg
ICAgYWNjZXNzIGJ5IHJlZmVyZW5jZQorICAgIEBzYSBAcmVmIHZhbHVlKCkgZm9yIGFjY2VzcyBi
eSB2YWx1ZSB3aXRoIGEgZGVmYXVsdCB2YWx1ZQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAK
KyAgICAqLworICAgIHJlZmVyZW5jZSBhdChjb25zdCB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5
cGUmIGtleSkKKyAgICB7CisgICAgICAgIC8vIGF0IG9ubHkgd29ya3MgZm9yIG9iamVjdHMKKyAg
ICAgICAgaWYgKGlzX29iamVjdCgpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV92YWx1
ZS5vYmplY3QtPmNvdW50KGtleSkgPiAwKQorICAgICAgICAgICAgICAgIHJldHVybiBtX3ZhbHVl
Lm9iamVjdC0+YXQoa2V5KTsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6b3V0X29mX3JhbmdlPigi
a2V5ICciICsga2V5ICsgIicgbm90IGZvdW5kIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oImNhbm5vdCB1
c2UgYXQoKSB3aXRoICIgKyB0eXBlX25hbWUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
KiEKKyAgICBAYnJpZWYgYWNjZXNzIHNwZWNpZmllZCBvYmplY3QgZWxlbWVudCB3aXRoIGJvdW5k
cyBjaGVja2luZworCisgICAgUmV0dXJucyBhIGNvbnN0IHJlZmVyZW5jZSB0byB0aGUgZWxlbWVu
dCBhdCB3aXRoIHNwZWNpZmllZCBrZXkgQGEga2V5LAorICAgIHdpdGggYm91bmRzIGNoZWNraW5n
LgorCisgICAgQHBhcmFtW2luXSBrZXkgIGtleSBvZiB0aGUgZWxlbWVudCB0byBhY2Nlc3MKKwor
ICAgIEByZXR1cm4gY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IGtleSBAYSBrZXkK
KworICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiB0aGUgSlNPTiB2YWx1ZSBpcyBub3Qg
YW4gb2JqZWN0OyBleGFtcGxlOgorICAgIGAiY2Fubm90IHVzZSBhdCgpIHdpdGggYm9vbGVhbiJg
CisgICAgQHRocm93IHN0ZDo6b3V0X29mX3JhbmdlIGlmIHRoZSBrZXkgQGEga2V5IGlzIGlzIG5v
dCBzdG9yZWQgaW4gdGhlIG9iamVjdDsKKyAgICB0aGF0IGlzLCBgZmluZChrZXkpID09IGVuZCgp
YDsgZXhhbXBsZTogYCJrZXkgInRoZSBmYXN0IiBub3QgZm91bmQiYAorCisgICAgQGNvbXBsZXhp
dHkgTG9nYXJpdGhtaWMgaW4gdGhlIHNpemUgb2YgdGhlIGNvbnRhaW5lci4KKworICAgIEBsaXZl
ZXhhbXBsZXtUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyBob3cgb2JqZWN0IGVsZW1lbnRzIGNhbiBi
ZSByZWFkIHVzaW5nCisgICAgYGF0KClgLixhdF9fb2JqZWN0X3Rfa2V5X3R5cGVfY29uc3R9CisK
KyAgICBAc2EgQHJlZiBvcGVyYXRvcltdKGNvbnN0IHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlw
ZSYpIGZvciB1bmNoZWNrZWQKKyAgICBhY2Nlc3MgYnkgcmVmZXJlbmNlCisgICAgQHNhIEByZWYg
dmFsdWUoKSBmb3IgYWNjZXNzIGJ5IHZhbHVlIHdpdGggYSBkZWZhdWx0IHZhbHVlCisKKyAgICBA
c2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgY29uc3RfcmVmZXJlbmNlIGF0KGNvbnN0
IHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlwZSYga2V5KSBjb25zdAorICAgIHsKKyAgICAgICAg
Ly8gYXQgb25seSB3b3JrcyBmb3Igb2JqZWN0cworICAgICAgICBpZiAoaXNfb2JqZWN0KCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3ZhbHVlLm9iamVjdC0+Y291bnQoa2V5KSA+IDAp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUub2JqZWN0LT5hdChrZXkpOworICAgICAg
ICAgICAgVGhyb3c8c3RkOjpvdXRfb2ZfcmFuZ2U+KCJrZXkgJyIgKyBrZXkgKyAiJyBub3QgZm91
bmQiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRo
cm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fubm90IHVzZSBhdCgpIHdpdGggIiArIHR5cGVfbmFt
ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBhY2Nlc3Mgc3Bl
Y2lmaWVkIGFycmF5IGVsZW1lbnQKKworICAgIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGVs
ZW1lbnQgYXQgc3BlY2lmaWVkIGxvY2F0aW9uIEBhIGlkeC4KKworICAgIEBub3RlIElmIEBhIGlk
eCBpcyBiZXlvbmQgdGhlIHJhbmdlIG9mIHRoZSBhcnJheSAoaS5lLiwgYGlkeCA+PSBzaXplKClg
KSwKKyAgICB0aGVuIHRoZSBhcnJheSBpcyBzaWxlbnRseSBmaWxsZWQgdXAgd2l0aCBgbnVsbGAg
dmFsdWVzIHRvIG1ha2UgYGlkeGAgYQorICAgIHZhbGlkIHJlZmVyZW5jZSB0byB0aGUgbGFzdCBz
dG9yZWQgZWxlbWVudC4KKworICAgIEBwYXJhbVtpbl0gaWR4ICBpbmRleCBvZiB0aGUgZWxlbWVu
dCB0byBhY2Nlc3MKKworICAgIEByZXR1cm4gcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IGlu
ZGV4IEBhIGlkeAorCisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIEpTT04gaXMgbm90
IGFuIGFycmF5IG9yIG51bGw7IGV4YW1wbGU6CisgICAgYCJjYW5ub3QgdXNlIG9wZXJhdG9yW10g
d2l0aCBzdHJpbmciYAorCisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQgaWYgQGEgaWR4IGlzIGlu
IHRoZSByYW5nZSBvZiB0aGUgYXJyYXkuIE90aGVyd2lzZQorICAgIGxpbmVhciBpbiBgaWR4IC0g
c2l6ZSgpYC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyBob3cg
YXJyYXkgZWxlbWVudHMgY2FuIGJlIHJlYWQgYW5kCisgICAgd3JpdHRlbiB1c2luZyBgW11gIG9w
ZXJhdG9yLiBOb3RlIHRoZSBhZGRpdGlvbiBvZiBgbnVsbGAKKyAgICB2YWx1ZXMuLG9wZXJhdG9y
YXJyYXlfX3NpemVfdHlwZX0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAg
ICByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgaWR4KQorICAgIHsKKyAgICAgICAgLy8g
aW1wbGljaXRseSBjb252ZXJ0IG51bGwgdmFsdWUgdG8gYW4gZW1wdHkgYXJyYXkKKyAgICAgICAg
aWYgKGlzX251bGwoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbV90eXBlID0gdmFsdWVfdDo6
YXJyYXk7CisgICAgICAgICAgICBtX3ZhbHVlLmFycmF5ID0gY3JlYXRlPGFycmF5X3Q+KCk7Cisg
ICAgICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBv
cGVyYXRvcltdIG9ubHkgd29ya3MgZm9yIGFycmF5cworICAgICAgICBpZiAoaXNfYXJyYXkoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgLy8gZmlsbCB1cCBhcnJheSB3aXRoIG51bGwgdmFsdWVz
IGlmIGdpdmVuIGlkeCBpcyBvdXRzaWRlIHJhbmdlCisgICAgICAgICAgICBpZiAoaWR4ID49IG1f
dmFsdWUuYXJyYXktPnNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3Zh
bHVlLmFycmF5LT5pbnNlcnQobV92YWx1ZS5hcnJheS0+ZW5kKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlkeCAtIG1fdmFsdWUuYXJyYXktPnNpemUoKSArIDEsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX2pzb24oKSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLmFycmF5LT5vcGVyYXRvcltd
KGlkeCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBU
aHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oImNhbm5vdCB1c2Ugb3BlcmF0b3JbXSB3aXRoICIgKyB0
eXBlX25hbWUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgYWNj
ZXNzIHNwZWNpZmllZCBhcnJheSBlbGVtZW50CisKKyAgICBSZXR1cm5zIGEgY29uc3QgcmVmZXJl
bmNlIHRvIHRoZSBlbGVtZW50IGF0IHNwZWNpZmllZCBsb2NhdGlvbiBAYSBpZHguCisKKyAgICBA
cGFyYW1baW5dIGlkeCAgaW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gYWNjZXNzCisKKyAgICBAcmV0
dXJuIGNvbnN0IHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCBhdCBpbmRleCBAYSBpZHgKKworICAg
IEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBKU09OIGlzIG5vdCBhbiBhcnJheTsgZXhhbXBs
ZTogYCJjYW5ub3QgdXNlCisgICAgb3BlcmF0b3JbXSB3aXRoIG51bGwiYAorCisgICAgQGNvbXBs
ZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgc2hv
d3MgaG93IGFycmF5IGVsZW1lbnRzIGNhbiBiZSByZWFkIHVzaW5nCisgICAgdGhlIGBbXWAgb3Bl
cmF0b3IuLG9wZXJhdG9yYXJyYXlfX3NpemVfdHlwZV9jb25zdH0KKworICAgIEBzaW5jZSB2ZXJz
aW9uIDEuMC4wCisgICAgKi8KKyAgICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5
cGUgaWR4KSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gY29uc3Qgb3BlcmF0b3JbXSBvbmx5IHdv
cmtzIGZvciBhcnJheXMKKyAgICAgICAgaWYgKGlzX2FycmF5KCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBtX3ZhbHVlLmFycmF5LT5vcGVyYXRvcltdKGlkeCk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9l
cnJvcj4oImNhbm5vdCB1c2Ugb3BlcmF0b3JbXSB3aXRoICIgKyB0eXBlX25hbWUoKSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgYWNjZXNzIHNwZWNpZmllZCBvYmpl
Y3QgZWxlbWVudAorCisgICAgUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCBhdCB3
aXRoIHNwZWNpZmllZCBrZXkgQGEga2V5LgorCisgICAgQG5vdGUgSWYgQGEga2V5IGlzIG5vdCBm
b3VuZCBpbiB0aGUgb2JqZWN0LCB0aGVuIGl0IGlzIHNpbGVudGx5IGFkZGVkIHRvCisgICAgdGhl
IG9iamVjdCBhbmQgZmlsbGVkIHdpdGggYSBgbnVsbGAgdmFsdWUgdG8gbWFrZSBga2V5YCBhIHZh
bGlkIHJlZmVyZW5jZS4KKyAgICBJbiBjYXNlIHRoZSB2YWx1ZSB3YXMgYG51bGxgIGJlZm9yZSwg
aXQgaXMgY29udmVydGVkIHRvIGFuIG9iamVjdC4KKworICAgIEBwYXJhbVtpbl0ga2V5ICBrZXkg
b2YgdGhlIGVsZW1lbnQgdG8gYWNjZXNzCisKKyAgICBAcmV0dXJuIHJlZmVyZW5jZSB0byB0aGUg
ZWxlbWVudCBhdCBrZXkgQGEga2V5CisKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYg
SlNPTiBpcyBub3QgYW4gb2JqZWN0IG9yIG51bGw7IGV4YW1wbGU6CisgICAgYCJjYW5ub3QgdXNl
IG9wZXJhdG9yW10gd2l0aCBzdHJpbmciYAorCisgICAgQGNvbXBsZXhpdHkgTG9nYXJpdGhtaWMg
aW4gdGhlIHNpemUgb2YgdGhlIGNvbnRhaW5lci4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhh
bXBsZSBiZWxvdyBzaG93cyBob3cgb2JqZWN0IGVsZW1lbnRzIGNhbiBiZSByZWFkIGFuZAorICAg
IHdyaXR0ZW4gdXNpbmcgdGhlIGBbXWAgb3BlcmF0b3IuLG9wZXJhdG9yYXJyYXlfX2tleV90eXBl
fQorCisgICAgQHNhIEByZWYgYXQoY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlJikg
Zm9yIGFjY2VzcyBieSByZWZlcmVuY2UKKyAgICB3aXRoIHJhbmdlIGNoZWNraW5nCisgICAgQHNh
IEByZWYgdmFsdWUoKSBmb3IgYWNjZXNzIGJ5IHZhbHVlIHdpdGggYSBkZWZhdWx0IHZhbHVlCisK
KyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgcmVmZXJlbmNlIG9wZXJhdG9y
W10oY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlJiBrZXkpCisgICAgeworICAgICAg
ICAvLyBpbXBsaWNpdGx5IGNvbnZlcnQgbnVsbCB2YWx1ZSB0byBhbiBlbXB0eSBvYmplY3QKKyAg
ICAgICAgaWYgKGlzX251bGwoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbV90eXBlID0gdmFs
dWVfdDo6b2JqZWN0OworICAgICAgICAgICAgbV92YWx1ZS5vYmplY3QgPSBjcmVhdGU8b2JqZWN0
X3Q+KCk7CisgICAgICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBvcGVyYXRvcltdIG9ubHkgd29ya3MgZm9yIG9iamVjdHMKKyAgICAgICAgaWYgKGlz
X29iamVjdCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV92YWx1ZS5vYmplY3Qt
Pm9wZXJhdG9yW10oa2V5KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fubm90IHVzZSBvcGVyYXRvcltd
IHdpdGggIiArIHR5cGVfbmFtZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIQorICAg
IEBicmllZiByZWFkLW9ubHkgYWNjZXNzIHNwZWNpZmllZCBvYmplY3QgZWxlbWVudAorCisgICAg
UmV0dXJucyBhIGNvbnN0IHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCBhdCB3aXRoIHNwZWNpZmll
ZCBrZXkgQGEga2V5LiBObworICAgIGJvdW5kcyBjaGVja2luZyBpcyBwZXJmb3JtZWQuCisKKyAg
ICBAd2FybmluZyBJZiB0aGUgZWxlbWVudCB3aXRoIGtleSBAYSBrZXkgZG9lcyBub3QgZXhpc3Qs
IHRoZSBiZWhhdmlvciBpcworICAgIHVuZGVmaW5lZC4KKworICAgIEBwYXJhbVtpbl0ga2V5ICBr
ZXkgb2YgdGhlIGVsZW1lbnQgdG8gYWNjZXNzCisKKyAgICBAcmV0dXJuIGNvbnN0IHJlZmVyZW5j
ZSB0byB0aGUgZWxlbWVudCBhdCBrZXkgQGEga2V5CisKKyAgICBAcHJlIFRoZSBlbGVtZW50IHdp
dGgga2V5IEBhIGtleSBtdXN0IGV4aXN0LiAqKlRoaXMgcHJlY29uZGl0aW9uIGlzCisgICAgICAg
ICBlbmZvcmNlZCB3aXRoIGFuIGFzc2VydGlvbi4qKgorCisgICAgQHRocm93IHN0ZDo6ZG9tYWlu
X2Vycm9yIGlmIEpTT04gaXMgbm90IGFuIG9iamVjdDsgZXhhbXBsZTogYCJjYW5ub3QgdXNlCisg
ICAgb3BlcmF0b3JbXSB3aXRoIG51bGwiYAorCisgICAgQGNvbXBsZXhpdHkgTG9nYXJpdGhtaWMg
aW4gdGhlIHNpemUgb2YgdGhlIGNvbnRhaW5lci4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhh
bXBsZSBiZWxvdyBzaG93cyBob3cgb2JqZWN0IGVsZW1lbnRzIGNhbiBiZSByZWFkIHVzaW5nCisg
ICAgdGhlIGBbXWAgb3BlcmF0b3IuLG9wZXJhdG9yYXJyYXlfX2tleV90eXBlX2NvbnN0fQorCisg
ICAgQHNhIEByZWYgYXQoY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlJikgZm9yIGFj
Y2VzcyBieSByZWZlcmVuY2UKKyAgICB3aXRoIHJhbmdlIGNoZWNraW5nCisgICAgQHNhIEByZWYg
dmFsdWUoKSBmb3IgYWNjZXNzIGJ5IHZhbHVlIHdpdGggYSBkZWZhdWx0IHZhbHVlCisKKyAgICBA
c2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9y
W10oY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlJiBrZXkpIGNvbnN0CisgICAgewor
ICAgICAgICAvLyBjb25zdCBvcGVyYXRvcltdIG9ubHkgd29ya3MgZm9yIG9iamVjdHMKKyAgICAg
ICAgaWYgKGlzX29iamVjdCgpKQorICAgICAgICB7CisgICAgICAgICAgICBhc3NlcnQobV92YWx1
ZS5vYmplY3QtPmZpbmQoa2V5KSAhPSBtX3ZhbHVlLm9iamVjdC0+ZW5kKCkpOworICAgICAgICAg
ICAgcmV0dXJuIG1fdmFsdWUub2JqZWN0LT5maW5kKGtleSktPnNlY29uZDsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vy
cm9yPigiY2Fubm90IHVzZSBvcGVyYXRvcltdIHdpdGggIiArIHR5cGVfbmFtZSgpKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBhY2Nlc3Mgc3BlY2lmaWVkIG9iamVj
dCBlbGVtZW50CisKKyAgICBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IHdp
dGggc3BlY2lmaWVkIGtleSBAYSBrZXkuCisKKyAgICBAbm90ZSBJZiBAYSBrZXkgaXMgbm90IGZv
dW5kIGluIHRoZSBvYmplY3QsIHRoZW4gaXQgaXMgc2lsZW50bHkgYWRkZWQgdG8KKyAgICB0aGUg
b2JqZWN0IGFuZCBmaWxsZWQgd2l0aCBhIGBudWxsYCB2YWx1ZSB0byBtYWtlIGBrZXlgIGEgdmFs
aWQgcmVmZXJlbmNlLgorICAgIEluIGNhc2UgdGhlIHZhbHVlIHdhcyBgbnVsbGAgYmVmb3JlLCBp
dCBpcyBjb252ZXJ0ZWQgdG8gYW4gb2JqZWN0LgorCisgICAgQHBhcmFtW2luXSBrZXkgIGtleSBv
ZiB0aGUgZWxlbWVudCB0byBhY2Nlc3MKKworICAgIEByZXR1cm4gcmVmZXJlbmNlIHRvIHRoZSBl
bGVtZW50IGF0IGtleSBAYSBrZXkKKworICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBK
U09OIGlzIG5vdCBhbiBvYmplY3Qgb3IgbnVsbDsgZXhhbXBsZToKKyAgICBgImNhbm5vdCB1c2Ug
b3BlcmF0b3JbXSB3aXRoIHN0cmluZyJgCisKKyAgICBAY29tcGxleGl0eSBMb2dhcml0aG1pYyBp
biB0aGUgc2l6ZSBvZiB0aGUgY29udGFpbmVyLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFt
cGxlIGJlbG93IHNob3dzIGhvdyBvYmplY3QgZWxlbWVudHMgY2FuIGJlIHJlYWQgYW5kCisgICAg
d3JpdHRlbiB1c2luZyB0aGUgYFtdYCBvcGVyYXRvci4sb3BlcmF0b3JhcnJheV9fa2V5X3R5cGV9
CisKKyAgICBAc2EgQHJlZiBhdChjb25zdCB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUmKSBm
b3IgYWNjZXNzIGJ5IHJlZmVyZW5jZQorICAgIHdpdGggcmFuZ2UgY2hlY2tpbmcKKyAgICBAc2Eg
QHJlZiB2YWx1ZSgpIGZvciBhY2Nlc3MgYnkgdmFsdWUgd2l0aCBhIGRlZmF1bHQgdmFsdWUKKwor
ICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzdGQ6OnNpemVfdCBuPgorICAgIHJlZmVyZW5jZSBvcGVyYXRvcltdKFQgKiAoJmtleSlbbl0p
CisgICAgeworICAgICAgICByZXR1cm4gb3BlcmF0b3JbXShzdGF0aWNfY2FzdDxjb25zdCBUPihr
ZXkpKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgcmVhZC1vbmx5IGFjY2VzcyBzcGVj
aWZpZWQgb2JqZWN0IGVsZW1lbnQKKworICAgIFJldHVybnMgYSBjb25zdCByZWZlcmVuY2UgdG8g
dGhlIGVsZW1lbnQgYXQgd2l0aCBzcGVjaWZpZWQga2V5IEBhIGtleS4gTm8KKyAgICBib3VuZHMg
Y2hlY2tpbmcgaXMgcGVyZm9ybWVkLgorCisgICAgQHdhcm5pbmcgSWYgdGhlIGVsZW1lbnQgd2l0
aCBrZXkgQGEga2V5IGRvZXMgbm90IGV4aXN0LCB0aGUgYmVoYXZpb3IgaXMKKyAgICB1bmRlZmlu
ZWQuCisKKyAgICBAbm90ZSBUaGlzIGZ1bmN0aW9uIGlzIHJlcXVpcmVkIGZvciBjb21wYXRpYmls
aXR5IHJlYXNvbnMgd2l0aCBDbGFuZy4KKworICAgIEBwYXJhbVtpbl0ga2V5ICBrZXkgb2YgdGhl
IGVsZW1lbnQgdG8gYWNjZXNzCisKKyAgICBAcmV0dXJuIGNvbnN0IHJlZmVyZW5jZSB0byB0aGUg
ZWxlbWVudCBhdCBrZXkgQGEga2V5CisKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYg
SlNPTiBpcyBub3QgYW4gb2JqZWN0OyBleGFtcGxlOiBgImNhbm5vdCB1c2UKKyAgICBvcGVyYXRv
cltdIHdpdGggbnVsbCJgCisKKyAgICBAY29tcGxleGl0eSBMb2dhcml0aG1pYyBpbiB0aGUgc2l6
ZSBvZiB0aGUgY29udGFpbmVyLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJlbG93
IHNob3dzIGhvdyBvYmplY3QgZWxlbWVudHMgY2FuIGJlIHJlYWQgdXNpbmcKKyAgICB0aGUgYFtd
YCBvcGVyYXRvci4sb3BlcmF0b3JhcnJheV9fa2V5X3R5cGVfY29uc3R9CisKKyAgICBAc2EgQHJl
ZiBhdChjb25zdCB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUmKSBmb3IgYWNjZXNzIGJ5IHJl
ZmVyZW5jZQorICAgIHdpdGggcmFuZ2UgY2hlY2tpbmcKKyAgICBAc2EgQHJlZiB2YWx1ZSgpIGZv
ciBhY2Nlc3MgYnkgdmFsdWUgd2l0aCBhIGRlZmF1bHQgdmFsdWUKKworICAgIEBzaW5jZSB2ZXJz
aW9uIDEuMC4wCisgICAgKi8KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBu
PgorICAgIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKFQgKiAoJmtleSlbbl0pIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gb3BlcmF0b3JbXShzdGF0aWNfY2FzdDxjb25zdCBUPihrZXkp
KTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgYWNjZXNzIHNwZWNpZmllZCBvYmplY3Qg
ZWxlbWVudAorCisgICAgUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCBhdCB3aXRo
IHNwZWNpZmllZCBrZXkgQGEga2V5LgorCisgICAgQG5vdGUgSWYgQGEga2V5IGlzIG5vdCBmb3Vu
ZCBpbiB0aGUgb2JqZWN0LCB0aGVuIGl0IGlzIHNpbGVudGx5IGFkZGVkIHRvCisgICAgdGhlIG9i
amVjdCBhbmQgZmlsbGVkIHdpdGggYSBgbnVsbGAgdmFsdWUgdG8gbWFrZSBga2V5YCBhIHZhbGlk
IHJlZmVyZW5jZS4KKyAgICBJbiBjYXNlIHRoZSB2YWx1ZSB3YXMgYG51bGxgIGJlZm9yZSwgaXQg
aXMgY29udmVydGVkIHRvIGFuIG9iamVjdC4KKworICAgIEBwYXJhbVtpbl0ga2V5ICBrZXkgb2Yg
dGhlIGVsZW1lbnQgdG8gYWNjZXNzCisKKyAgICBAcmV0dXJuIHJlZmVyZW5jZSB0byB0aGUgZWxl
bWVudCBhdCBrZXkgQGEga2V5CisKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgSlNP
TiBpcyBub3QgYW4gb2JqZWN0IG9yIG51bGw7IGV4YW1wbGU6CisgICAgYCJjYW5ub3QgdXNlIG9w
ZXJhdG9yW10gd2l0aCBzdHJpbmciYAorCisgICAgQGNvbXBsZXhpdHkgTG9nYXJpdGhtaWMgaW4g
dGhlIHNpemUgb2YgdGhlIGNvbnRhaW5lci4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBs
ZSBiZWxvdyBzaG93cyBob3cgb2JqZWN0IGVsZW1lbnRzIGNhbiBiZSByZWFkIGFuZAorICAgIHdy
aXR0ZW4gdXNpbmcgdGhlIGBbXWAgb3BlcmF0b3IuLG9wZXJhdG9yYXJyYXlfX2tleV90eXBlfQor
CisgICAgQHNhIEByZWYgYXQoY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlJikgZm9y
IGFjY2VzcyBieSByZWZlcmVuY2UKKyAgICB3aXRoIHJhbmdlIGNoZWNraW5nCisgICAgQHNhIEBy
ZWYgdmFsdWUoKSBmb3IgYWNjZXNzIGJ5IHZhbHVlIHdpdGggYSBkZWZhdWx0IHZhbHVlCisKKyAg
ICBAc2luY2UgdmVyc2lvbiAxLjEuMAorICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
KyAgICByZWZlcmVuY2Ugb3BlcmF0b3JbXShUKiBrZXkpCisgICAgeworICAgICAgICAvLyBpbXBs
aWNpdGx5IGNvbnZlcnQgbnVsbCB0byBvYmplY3QKKyAgICAgICAgaWYgKGlzX251bGwoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgbV90eXBlID0gdmFsdWVfdDo6b2JqZWN0OworICAgICAgICAg
ICAgbV92YWx1ZSA9IHZhbHVlX3Q6Om9iamVjdDsKKyAgICAgICAgICAgIGFzc2VydF9pbnZhcmlh
bnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGF0IG9ubHkgd29ya3MgZm9yIG9iamVjdHMK
KyAgICAgICAgaWYgKGlzX29iamVjdCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV92YWx1ZS5vYmplY3QtPm9wZXJhdG9yW10oa2V5KTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fubm90
IHVzZSBvcGVyYXRvcltdIHdpdGggIiArIHR5cGVfbmFtZSgpKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8qIQorICAgIEBicmllZiByZWFkLW9ubHkgYWNjZXNzIHNwZWNpZmllZCBvYmplY3Qg
ZWxlbWVudAorCisgICAgUmV0dXJucyBhIGNvbnN0IHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCBh
dCB3aXRoIHNwZWNpZmllZCBrZXkgQGEga2V5LiBObworICAgIGJvdW5kcyBjaGVja2luZyBpcyBw
ZXJmb3JtZWQuCisKKyAgICBAd2FybmluZyBJZiB0aGUgZWxlbWVudCB3aXRoIGtleSBAYSBrZXkg
ZG9lcyBub3QgZXhpc3QsIHRoZSBiZWhhdmlvciBpcworICAgIHVuZGVmaW5lZC4KKworICAgIEBw
YXJhbVtpbl0ga2V5ICBrZXkgb2YgdGhlIGVsZW1lbnQgdG8gYWNjZXNzCisKKyAgICBAcmV0dXJu
IGNvbnN0IHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCBhdCBrZXkgQGEga2V5CisKKyAgICBAcHJl
IFRoZSBlbGVtZW50IHdpdGgga2V5IEBhIGtleSBtdXN0IGV4aXN0LiAqKlRoaXMgcHJlY29uZGl0
aW9uIGlzCisgICAgICAgICBlbmZvcmNlZCB3aXRoIGFuIGFzc2VydGlvbi4qKgorCisgICAgQHRo
cm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIEpTT04gaXMgbm90IGFuIG9iamVjdDsgZXhhbXBsZTog
YCJjYW5ub3QgdXNlCisgICAgb3BlcmF0b3JbXSB3aXRoIG51bGwiYAorCisgICAgQGNvbXBsZXhp
dHkgTG9nYXJpdGhtaWMgaW4gdGhlIHNpemUgb2YgdGhlIGNvbnRhaW5lci4KKworICAgIEBsaXZl
ZXhhbXBsZXtUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyBob3cgb2JqZWN0IGVsZW1lbnRzIGNhbiBi
ZSByZWFkIHVzaW5nCisgICAgdGhlIGBbXWAgb3BlcmF0b3IuLG9wZXJhdG9yYXJyYXlfX2tleV90
eXBlX2NvbnN0fQorCisgICAgQHNhIEByZWYgYXQoY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6Omtl
eV90eXBlJikgZm9yIGFjY2VzcyBieSByZWZlcmVuY2UKKyAgICB3aXRoIHJhbmdlIGNoZWNraW5n
CisgICAgQHNhIEByZWYgdmFsdWUoKSBmb3IgYWNjZXNzIGJ5IHZhbHVlIHdpdGggYSBkZWZhdWx0
IHZhbHVlCisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjEuMAorICAgICovCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShUKiBrZXkpIGNvbnN0
CisgICAgeworICAgICAgICAvLyBhdCBvbmx5IHdvcmtzIGZvciBvYmplY3RzCisgICAgICAgIGlm
IChpc19vYmplY3QoKSkKKyAgICAgICAgeworICAgICAgICAgICAgYXNzZXJ0KG1fdmFsdWUub2Jq
ZWN0LT5maW5kKGtleSkgIT0gbV92YWx1ZS5vYmplY3QtPmVuZCgpKTsKKyAgICAgICAgICAgIHJl
dHVybiBtX3ZhbHVlLm9iamVjdC0+ZmluZChrZXkpLT5zZWNvbmQ7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4o
ImNhbm5vdCB1c2Ugb3BlcmF0b3JbXSB3aXRoICIgKyB0eXBlX25hbWUoKSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgYWNjZXNzIHNwZWNpZmllZCBvYmplY3QgZWxl
bWVudCB3aXRoIGRlZmF1bHQgdmFsdWUKKworICAgIFJldHVybnMgZWl0aGVyIGEgY29weSBvZiBh
biBvYmplY3QncyBlbGVtZW50IGF0IHRoZSBzcGVjaWZpZWQga2V5IEBhIGtleQorICAgIG9yIGEg
Z2l2ZW4gZGVmYXVsdCB2YWx1ZSBpZiBubyBlbGVtZW50IHdpdGgga2V5IEBhIGtleSBleGlzdHMu
CisKKyAgICBUaGUgZnVuY3Rpb24gaXMgYmFzaWNhbGx5IGVxdWl2YWxlbnQgdG8gZXhlY3V0aW5n
CisgICAgQGNvZGUgey5jcHB9CisgICAgdHJ5IHsKKyAgICAgICAgcmV0dXJuIGF0KGtleSk7Cisg
ICAgfSBjYXRjaChzdGQ6Om91dF9vZl9yYW5nZSkgeworICAgICAgICByZXR1cm4gZGVmYXVsdF92
YWx1ZTsKKyAgICB9CisgICAgQGVuZGNvZGUKKworICAgIEBub3RlIFVubGlrZSBAcmVmIGF0KGNv
bnN0IHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlwZSYpLCB0aGlzIGZ1bmN0aW9uCisgICAgZG9l
cyBub3QgdGhyb3cgaWYgdGhlIGdpdmVuIGtleSBAYSBrZXkgd2FzIG5vdCBmb3VuZC4KKworICAg
IEBub3RlIFVubGlrZSBAcmVmIG9wZXJhdG9yW10oY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6Omtl
eV90eXBlJiBrZXkpLCB0aGlzCisgICAgZnVuY3Rpb24gZG9lcyBub3QgaW1wbGljaXRseSBhZGQg
YW4gZWxlbWVudCB0byB0aGUgcG9zaXRpb24gZGVmaW5lZCBieSBAYQorICAgIGtleS4gVGhpcyBm
dW5jdGlvbiBpcyBmdXJ0aGVybW9yZSBhbHNvIGFwcGxpY2FibGUgdG8gY29uc3Qgb2JqZWN0cy4K
KworICAgIEBwYXJhbVtpbl0ga2V5ICBrZXkgb2YgdGhlIGVsZW1lbnQgdG8gYWNjZXNzCisgICAg
QHBhcmFtW2luXSBkZWZhdWx0X3ZhbHVlICB0aGUgdmFsdWUgdG8gcmV0dXJuIGlmIEBhIGtleSBp
cyBub3QgZm91bmQKKworICAgIEB0cGFyYW0gVmFsdWVUeXBlIHR5cGUgY29tcGF0aWJsZSB0byBK
U09OIHZhbHVlcywgZm9yIGluc3RhbmNlIGBpbnRgIGZvcgorICAgIEpTT04gaW50ZWdlciBudW1i
ZXJzLCBgYm9vbGAgZm9yIEpTT04gYm9vbGVhbnMsIG9yIGBzdGQ6OnZlY3RvcmAgdHlwZXMgZm9y
CisgICAgSlNPTiBhcnJheXMuIE5vdGUgdGhlIHR5cGUgb2YgdGhlIGV4cGVjdGVkIHZhbHVlIGF0
IEBhIGtleSBhbmQgdGhlIGRlZmF1bHQKKyAgICB2YWx1ZSBAYSBkZWZhdWx0X3ZhbHVlIG11c3Qg
YmUgY29tcGF0aWJsZS4KKworICAgIEByZXR1cm4gY29weSBvZiB0aGUgZWxlbWVudCBhdCBrZXkg
QGEga2V5IG9yIEBhIGRlZmF1bHRfdmFsdWUgaWYgQGEga2V5CisgICAgaXMgbm90IGZvdW5kCisK
KyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgSlNPTiBpcyBub3QgYW4gb2JqZWN0OyBl
eGFtcGxlOiBgImNhbm5vdCB1c2UKKyAgICB2YWx1ZSgpIHdpdGggbnVsbCJgCisKKyAgICBAY29t
cGxleGl0eSBMb2dhcml0aG1pYyBpbiB0aGUgc2l6ZSBvZiB0aGUgY29udGFpbmVyLgorCisgICAg
QGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyBvYmplY3QgZWxlbWVudHMg
Y2FuIGJlIHF1ZXJpZWQKKyAgICB3aXRoIGEgZGVmYXVsdCB2YWx1ZS4sYmFzaWNfanNvbl9fdmFs
dWV9CisKKyAgICBAc2EgQHJlZiBhdChjb25zdCB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUm
KSBmb3IgYWNjZXNzIGJ5IHJlZmVyZW5jZQorICAgIHdpdGggcmFuZ2UgY2hlY2tpbmcKKyAgICBA
c2EgQHJlZiBvcGVyYXRvcltdKGNvbnN0IHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlwZSYpIGZv
ciB1bmNoZWNrZWQKKyAgICBhY2Nlc3MgYnkgcmVmZXJlbmNlCisKKyAgICBAc2luY2UgdmVyc2lv
biAxLjAuMAorICAgICovCisgICAgdGVtcGxhdGU8Y2xhc3MgVmFsdWVUeXBlLCB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjwKKyAgICAgICAgICAgICAgICAgc3RkOjppc19jb252ZXJ0aWJsZTxiYXNp
Y19qc29uX3QsIFZhbHVlVHlwZT46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4KKyAgICBWYWx1ZVR5
cGUgdmFsdWUoY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlJiBrZXksIFZhbHVlVHlw
ZSBkZWZhdWx0X3ZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gYXQgb25seSB3b3JrcyBm
b3Igb2JqZWN0cworICAgICAgICBpZiAoaXNfb2JqZWN0KCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIGlmIGtleSBpcyBmb3VuZCwgcmV0dXJuIHZhbHVlIGFuZCBnaXZlbiBkZWZhdWx0IHZh
bHVlIG90aGVyd2lzZQorICAgICAgICAgICAgY29uc3QgYXV0byBpdCA9IGZpbmQoa2V5KTsKKyAg
ICAgICAgICAgIGlmIChpdCAhPSBlbmQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gKml0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0X3ZhbHVlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3c8
c3RkOjpkb21haW5fZXJyb3I+KCJjYW5ub3QgdXNlIHZhbHVlKCkgd2l0aCAiICsgdHlwZV9uYW1l
KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIG92ZXJsb2FkIGZv
ciBhIGRlZmF1bHQgdmFsdWUgb2YgdHlwZSBjb25zdCBjaGFyKgorICAgIEBjb3B5ZG9jIGJhc2lj
X2pzb246OnZhbHVlKGNvbnN0IHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlwZSYsIFZhbHVlVHlw
ZSkgY29uc3QKKyAgICAqLworICAgIHN0cmluZ190IHZhbHVlKGNvbnN0IHR5cGVuYW1lIG9iamVj
dF90OjprZXlfdHlwZSYga2V5LCBjb25zdCBjaGFyKiBkZWZhdWx0X3ZhbHVlKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIHZhbHVlKGtleSwgc3RyaW5nX3QoZGVmYXVsdF92YWx1ZSkpOwor
ICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBhY2Nlc3Mgc3BlY2lmaWVkIG9iamVjdCBlbGVt
ZW50IHZpYSBKU09OIFBvaW50ZXIgd2l0aCBkZWZhdWx0IHZhbHVlCisKKyAgICBSZXR1cm5zIGVp
dGhlciBhIGNvcHkgb2YgYW4gb2JqZWN0J3MgZWxlbWVudCBhdCB0aGUgc3BlY2lmaWVkIGtleSBA
YSBrZXkKKyAgICBvciBhIGdpdmVuIGRlZmF1bHQgdmFsdWUgaWYgbm8gZWxlbWVudCB3aXRoIGtl
eSBAYSBrZXkgZXhpc3RzLgorCisgICAgVGhlIGZ1bmN0aW9uIGlzIGJhc2ljYWxseSBlcXVpdmFs
ZW50IHRvIGV4ZWN1dGluZworICAgIEBjb2RlIHsuY3BwfQorICAgIHRyeSB7CisgICAgICAgIHJl
dHVybiBhdChwdHIpOworICAgIH0gY2F0Y2goc3RkOjpvdXRfb2ZfcmFuZ2UpIHsKKyAgICAgICAg
cmV0dXJuIGRlZmF1bHRfdmFsdWU7CisgICAgfQorICAgIEBlbmRjb2RlCisKKyAgICBAbm90ZSBV
bmxpa2UgQHJlZiBhdChjb25zdCBqc29uX3BvaW50ZXImKSwgdGhpcyBmdW5jdGlvbiBkb2VzIG5v
dCB0aHJvdworICAgIGlmIHRoZSBnaXZlbiBrZXkgQGEga2V5IHdhcyBub3QgZm91bmQuCisKKyAg
ICBAcGFyYW1baW5dIHB0ciAgYSBKU09OIHBvaW50ZXIgdG8gdGhlIGVsZW1lbnQgdG8gYWNjZXNz
CisgICAgQHBhcmFtW2luXSBkZWZhdWx0X3ZhbHVlICB0aGUgdmFsdWUgdG8gcmV0dXJuIGlmIEBh
IHB0ciBmb3VuZCBubyB2YWx1ZQorCisgICAgQHRwYXJhbSBWYWx1ZVR5cGUgdHlwZSBjb21wYXRp
YmxlIHRvIEpTT04gdmFsdWVzLCBmb3IgaW5zdGFuY2UgYGludGAgZm9yCisgICAgSlNPTiBpbnRl
Z2VyIG51bWJlcnMsIGBib29sYCBmb3IgSlNPTiBib29sZWFucywgb3IgYHN0ZDo6dmVjdG9yYCB0
eXBlcyBmb3IKKyAgICBKU09OIGFycmF5cy4gTm90ZSB0aGUgdHlwZSBvZiB0aGUgZXhwZWN0ZWQg
dmFsdWUgYXQgQGEga2V5IGFuZCB0aGUgZGVmYXVsdAorICAgIHZhbHVlIEBhIGRlZmF1bHRfdmFs
dWUgbXVzdCBiZSBjb21wYXRpYmxlLgorCisgICAgQHJldHVybiBjb3B5IG9mIHRoZSBlbGVtZW50
IGF0IGtleSBAYSBrZXkgb3IgQGEgZGVmYXVsdF92YWx1ZSBpZiBAYSBrZXkKKyAgICBpcyBub3Qg
Zm91bmQKKworICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBKU09OIGlzIG5vdCBhbiBv
YmplY3Q7IGV4YW1wbGU6IGAiY2Fubm90IHVzZQorICAgIHZhbHVlKCkgd2l0aCBudWxsImAKKwor
ICAgIEBjb21wbGV4aXR5IExvZ2FyaXRobWljIGluIHRoZSBzaXplIG9mIHRoZSBjb250YWluZXIu
CisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93IG9iamVjdCBl
bGVtZW50cyBjYW4gYmUgcXVlcmllZAorICAgIHdpdGggYSBkZWZhdWx0IHZhbHVlLixiYXNpY19q
c29uX192YWx1ZV9wdHJ9CisKKyAgICBAc2EgQHJlZiBvcGVyYXRvcltdKGNvbnN0IGpzb25fcG9p
bnRlciYpIGZvciB1bmNoZWNrZWQgYWNjZXNzIGJ5IHJlZmVyZW5jZQorCisgICAgQHNpbmNlIHZl
cnNpb24gMi4wLjIKKyAgICAqLworICAgIHRlbXBsYXRlPGNsYXNzIFZhbHVlVHlwZSwgdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8CisgICAgICAgICAgICAgICAgIHN0ZDo6aXNfY29udmVydGlibGU8
YmFzaWNfanNvbl90LCBWYWx1ZVR5cGU+Ojp2YWx1ZSwgaW50Pjo6dHlwZSA9IDA+CisgICAgVmFs
dWVUeXBlIHZhbHVlKGNvbnN0IGpzb25fcG9pbnRlciYgcHRyLCBWYWx1ZVR5cGUgZGVmYXVsdF92
YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIGF0IG9ubHkgd29ya3MgZm9yIG9iamVjdHMK
KyAgICAgICAgaWYgKGlzX29iamVjdCgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
cHRyLmdldF9jaGVja2VkKHRoaXMpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJjYW5ub3QgdXNlIHZhbHVl
KCkgd2l0aCAiICsgdHlwZV9uYW1lKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLyohCisg
ICAgQGJyaWVmIG92ZXJsb2FkIGZvciBhIGRlZmF1bHQgdmFsdWUgb2YgdHlwZSBjb25zdCBjaGFy
KgorICAgIEBjb3B5ZG9jIGJhc2ljX2pzb246OnZhbHVlKGNvbnN0IGpzb25fcG9pbnRlciYsIFZh
bHVlVHlwZSkgY29uc3QKKyAgICAqLworICAgIHN0cmluZ190IHZhbHVlKGNvbnN0IGpzb25fcG9p
bnRlciYgcHRyLCBjb25zdCBjaGFyKiBkZWZhdWx0X3ZhbHVlKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHZhbHVlKHB0ciwgc3RyaW5nX3QoZGVmYXVsdF92YWx1ZSkpOworICAgIH0KKwor
ICAgIC8qIQorICAgIEBicmllZiBhY2Nlc3MgdGhlIGZpcnN0IGVsZW1lbnQKKworICAgIFJldHVy
bnMgYSByZWZlcmVuY2UgdG8gdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGNvbnRhaW5lci4gRm9y
IGEgSlNPTgorICAgIGNvbnRhaW5lciBgY2AsIHRoZSBleHByZXNzaW9uIGBjLmZyb250KClgIGlz
IGVxdWl2YWxlbnQgdG8gYCpjLmJlZ2luKClgLgorCisgICAgQHJldHVybiBJbiBjYXNlIG9mIGEg
c3RydWN0dXJlZCB0eXBlIChhcnJheSBvciBvYmplY3QpLCBhIHJlZmVyZW5jZSB0byB0aGUKKyAg
ICBmaXJzdCBlbGVtZW50IGlzIHJldHVybmVkLiBJbiBjYXN0IG9mIG51bWJlciwgc3RyaW5nLCBv
ciBib29sZWFuIHZhbHVlcywgYQorICAgIHJlZmVyZW5jZSB0byB0aGUgdmFsdWUgaXMgcmV0dXJu
ZWQuCisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEBwcmUgVGhlIEpTT04gdmFs
dWUgbXVzdCBub3QgYmUgYG51bGxgICh3b3VsZCB0aHJvdyBgc3RkOjpvdXRfb2ZfcmFuZ2VgKQor
ICAgIG9yIGFuIGVtcHR5IGFycmF5IG9yIG9iamVjdCAodW5kZWZpbmVkIGJlaGF2aW9yLCAqKmd1
YXJkZWQgYnkKKyAgICBhc3NlcnRpb25zKiopLgorICAgIEBwb3N0IFRoZSBKU09OIHZhbHVlIHJl
bWFpbnMgdW5jaGFuZ2VkLgorCisgICAgQHRocm93IHN0ZDo6b3V0X29mX3JhbmdlIHdoZW4gY2Fs
bGVkIG9uIGBudWxsYCB2YWx1ZQorCisgICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29k
ZSBzaG93cyBhbiBleGFtcGxlIGZvciBgZnJvbnQoKWAuLGZyb250fQorCisgICAgQHNhIEByZWYg
YmFjaygpIC0tIGFjY2VzcyB0aGUgbGFzdCBlbGVtZW50CisKKyAgICBAc2luY2UgdmVyc2lvbiAx
LjAuMAorICAgICovCisgICAgcmVmZXJlbmNlIGZyb250KCkKKyAgICB7CisgICAgICAgIHJldHVy
biAqYmVnaW4oKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAY29weWRvYyBiYXNpY19qc29uOjpm
cm9udCgpCisgICAgKi8KKyAgICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuICpjYmVnaW4oKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYg
YWNjZXNzIHRoZSBsYXN0IGVsZW1lbnQKKworICAgIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhl
IGxhc3QgZWxlbWVudCBpbiB0aGUgY29udGFpbmVyLiBGb3IgYSBKU09OCisgICAgY29udGFpbmVy
IGBjYCwgdGhlIGV4cHJlc3Npb24gYGMuYmFjaygpYCBpcyBlcXVpdmFsZW50IHRvCisgICAgQGNv
ZGUgey5jcHB9CisgICAgYXV0byB0bXAgPSBjLmVuZCgpOworICAgIC0tdG1wOworICAgIHJldHVy
biAqdG1wOworICAgIEBlbmRjb2RlCisKKyAgICBAcmV0dXJuIEluIGNhc2Ugb2YgYSBzdHJ1Y3R1
cmVkIHR5cGUgKGFycmF5IG9yIG9iamVjdCksIGEgcmVmZXJlbmNlIHRvIHRoZQorICAgIGxhc3Qg
ZWxlbWVudCBpcyByZXR1cm5lZC4gSW4gY2FzdCBvZiBudW1iZXIsIHN0cmluZywgb3IgYm9vbGVh
biB2YWx1ZXMsIGEKKyAgICByZWZlcmVuY2UgdG8gdGhlIHZhbHVlIGlzIHJldHVybmVkLgorCisg
ICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAcHJlIFRoZSBKU09OIHZhbHVlIG11c3Qg
bm90IGJlIGBudWxsYCAod291bGQgdGhyb3cgYHN0ZDo6b3V0X29mX3JhbmdlYCkKKyAgICBvciBh
biBlbXB0eSBhcnJheSBvciBvYmplY3QgKHVuZGVmaW5lZCBiZWhhdmlvciwgKipndWFyZGVkIGJ5
CisgICAgYXNzZXJ0aW9ucyoqKS4KKyAgICBAcG9zdCBUaGUgSlNPTiB2YWx1ZSByZW1haW5zIHVu
Y2hhbmdlZC4KKworICAgIEB0aHJvdyBzdGQ6Om91dF9vZl9yYW5nZSB3aGVuIGNhbGxlZCBvbiBg
bnVsbGAgdmFsdWUuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIHNob3dz
IGFuIGV4YW1wbGUgZm9yIGBiYWNrKClgLixiYWNrfQorCisgICAgQHNhIEByZWYgZnJvbnQoKSAt
LSBhY2Nlc3MgdGhlIGZpcnN0IGVsZW1lbnQKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisg
ICAgKi8KKyAgICByZWZlcmVuY2UgYmFjaygpCisgICAgeworICAgICAgICBhdXRvIHRtcCA9IGVu
ZCgpOworICAgICAgICAtLXRtcDsKKyAgICAgICAgcmV0dXJuICp0bXA7CisgICAgfQorCisgICAg
LyohCisgICAgQGNvcHlkb2MgYmFzaWNfanNvbjo6YmFjaygpCisgICAgKi8KKyAgICBjb25zdF9y
ZWZlcmVuY2UgYmFjaygpIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIHRtcCA9IGNlbmQoKTsK
KyAgICAgICAgLS10bXA7CisgICAgICAgIHJldHVybiAqdG1wOworICAgIH0KKworICAgIC8qIQor
ICAgIEBicmllZiByZW1vdmUgZWxlbWVudCBnaXZlbiBhbiBpdGVyYXRvcgorCisgICAgUmVtb3Zl
cyB0aGUgZWxlbWVudCBzcGVjaWZpZWQgYnkgaXRlcmF0b3IgQGEgcG9zLiBUaGUgaXRlcmF0b3Ig
QGEgcG9zIG11c3QKKyAgICBiZSB2YWxpZCBhbmQgZGVyZWZlcmVuY2VhYmxlLiBUaHVzIHRoZSBg
ZW5kKClgIGl0ZXJhdG9yICh3aGljaCBpcyB2YWxpZCwKKyAgICBidXQgaXMgbm90IGRlcmVmZXJl
bmNlYWJsZSkgY2Fubm90IGJlIHVzZWQgYXMgYSB2YWx1ZSBmb3IgQGEgcG9zLgorCisgICAgSWYg
Y2FsbGVkIG9uIGEgcHJpbWl0aXZlIHR5cGUgb3RoZXIgdGhhbiBgbnVsbGAsIHRoZSByZXN1bHRp
bmcgSlNPTiB2YWx1ZQorICAgIHdpbGwgYmUgYG51bGxgLgorCisgICAgQHBhcmFtW2luXSBwb3Mg
aXRlcmF0b3IgdG8gdGhlIGVsZW1lbnQgdG8gcmVtb3ZlCisgICAgQHJldHVybiBJdGVyYXRvciBm
b2xsb3dpbmcgdGhlIGxhc3QgcmVtb3ZlZCBlbGVtZW50LiBJZiB0aGUgaXRlcmF0b3IgQGEKKyAg
ICBwb3MgcmVmZXJzIHRvIHRoZSBsYXN0IGVsZW1lbnQsIHRoZSBgZW5kKClgIGl0ZXJhdG9yIGlz
IHJldHVybmVkLgorCisgICAgQHRwYXJhbSBJdGVyYXRvclR5cGUgYW4gQHJlZiBpdGVyYXRvciBv
ciBAcmVmIGNvbnN0X2l0ZXJhdG9yCisKKyAgICBAcG9zdCBJbnZhbGlkYXRlcyBpdGVyYXRvcnMg
YW5kIHJlZmVyZW5jZXMgYXQgb3IgYWZ0ZXIgdGhlIHBvaW50IG9mIHRoZQorICAgIGVyYXNlLCBp
bmNsdWRpbmcgdGhlIGBlbmQoKWAgaXRlcmF0b3IuCisKKyAgICBAdGhyb3cgc3RkOjpkb21haW5f
ZXJyb3IgaWYgY2FsbGVkIG9uIGEgYG51bGxgIHZhbHVlOyBleGFtcGxlOiBgImNhbm5vdAorICAg
IHVzZSBlcmFzZSgpIHdpdGggbnVsbCJgCisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlm
IGNhbGxlZCBvbiBhbiBpdGVyYXRvciB3aGljaCBkb2VzIG5vdCBiZWxvbmcgdG8KKyAgICB0aGUg
Y3VycmVudCBKU09OIHZhbHVlOyBleGFtcGxlOiBgIml0ZXJhdG9yIGRvZXMgbm90IGZpdCBjdXJy
ZW50IHZhbHVlImAKKyAgICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2UgaWYgY2FsbGVkIG9uIGEg
cHJpbWl0aXZlIHR5cGUgd2l0aCBpbnZhbGlkCisgICAgaXRlcmF0b3IgKGkuZS4sIGFueSBpdGVy
YXRvciB3aGljaCBpcyBub3QgYGJlZ2luKClgKTsgZXhhbXBsZTogYCJpdGVyYXRvcgorICAgIG91
dCBvZiByYW5nZSJgCisKKyAgICBAY29tcGxleGl0eSBUaGUgY29tcGxleGl0eSBkZXBlbmRzIG9u
IHRoZSB0eXBlOgorICAgIC0gb2JqZWN0czogYW1vcnRpemVkIGNvbnN0YW50CisgICAgLSBhcnJh
eXM6IGxpbmVhciBpbiBkaXN0YW5jZSBiZXR3ZWVuIHBvcyBhbmQgdGhlIGVuZCBvZiB0aGUgY29u
dGFpbmVyCisgICAgLSBzdHJpbmdzOiBsaW5lYXIgaW4gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5n
CisgICAgLSBvdGhlciB0eXBlczogY29uc3RhbnQKKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhh
bXBsZSBzaG93cyB0aGUgcmVzdWx0IG9mIGBlcmFzZSgpYCBmb3IgZGlmZmVyZW50IEpTT04KKyAg
ICB0eXBlcy4sZXJhc2VfX0l0ZXJhdG9yVHlwZX0KKworICAgIEBzYSBAcmVmIGVyYXNlKEl0ZXJh
dG9yVHlwZSwgSXRlcmF0b3JUeXBlKSAtLSByZW1vdmVzIHRoZSBlbGVtZW50cyBpbgorICAgIHRo
ZSBnaXZlbiByYW5nZQorICAgIEBzYSBAcmVmIGVyYXNlKGNvbnN0IHR5cGVuYW1lIG9iamVjdF90
OjprZXlfdHlwZSYpIC0tIHJlbW92ZXMgdGhlIGVsZW1lbnQKKyAgICBmcm9tIGFuIG9iamVjdCBh
dCB0aGUgZ2l2ZW4ga2V5CisgICAgQHNhIEByZWYgZXJhc2UoY29uc3Qgc2l6ZV90eXBlKSAtLSBy
ZW1vdmVzIHRoZSBlbGVtZW50IGZyb20gYW4gYXJyYXkgYXQKKyAgICB0aGUgZ2l2ZW4gaW5kZXgK
KworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICB0ZW1wbGF0ZTxjbGFzcyBJ
dGVyYXRvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAorICAgICAgICAgICAgICAgICBz
dGQ6OmlzX3NhbWU8SXRlcmF0b3JUeXBlLCB0eXBlbmFtZSBiYXNpY19qc29uX3Q6Oml0ZXJhdG9y
Pjo6dmFsdWUgb3IKKyAgICAgICAgICAgICAgICAgc3RkOjppc19zYW1lPEl0ZXJhdG9yVHlwZSwg
dHlwZW5hbWUgYmFzaWNfanNvbl90Ojpjb25zdF9pdGVyYXRvcj46OnZhbHVlLCBpbnQ+Ojp0eXBl
CisgICAgICAgICAgICAgPSAwPgorICAgIEl0ZXJhdG9yVHlwZSBlcmFzZShJdGVyYXRvclR5cGUg
cG9zKQorICAgIHsKKyAgICAgICAgLy8gbWFrZSBzdXJlIGl0ZXJhdG9yIGZpdHMgdGhlIGN1cnJl
bnQgdmFsdWUKKyAgICAgICAgaWYgKHRoaXMgIT0gcG9zLm1fb2JqZWN0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oIml0ZXJhdG9yIGRvZXMgbm90IGZp
dCBjdXJyZW50IHZhbHVlIik7CisgICAgICAgIH0KKworICAgICAgICBJdGVyYXRvclR5cGUgcmVz
dWx0ID0gZW5kKCk7CisKKyAgICAgICAgc3dpdGNoIChtX3R5cGUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNhc2UgdmFsdWVfdDo6Ym9vbGVhbjoKKyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6
bnVtYmVyX2Zsb2F0OgorICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcjoK
KyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkOgorICAgICAgICAgICAg
Y2FzZSB2YWx1ZV90OjpzdHJpbmc6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KG5vdCBwb3MubV9pdC5wcmltaXRpdmVfaXRlcmF0b3IuaXNfYmVnaW4oKSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6b3V0X29mX3JhbmdlPigiaXRl
cmF0b3Igb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgaWYgKGlzX3N0cmluZygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgQWxsb2NhdG9yVHlwZTxzdHJpbmdfdD4gYWxsb2M7CisgICAgICAgICAgICAgICAgICAgIGFs
bG9jLmRlc3Ryb3kobV92YWx1ZS5zdHJpbmcpOworICAgICAgICAgICAgICAgICAgICBhbGxvYy5k
ZWFsbG9jYXRlKG1fdmFsdWUuc3RyaW5nLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1
ZS5zdHJpbmcgPSBudWxscHRyOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IG1fdHlwZSA9IHZhbHVlX3Q6Om51bGw7CisgICAgICAgICAgICAgICAgYXNzZXJ0X2ludmFyaWFu
dCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQubV9pdC5vYmplY3RfaXRlcmF0b3IgPSBtX3ZhbHVlLm9iamVjdC0+ZXJhc2UocG9zLm1f
aXQub2JqZWN0X2l0ZXJhdG9yKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXN1bHQubV9pdC5hcnJheV9pdGVyYXRvciA9IG1fdmFsdWUuYXJyYXkt
PmVyYXNlKHBvcy5tX2l0LmFycmF5X2l0ZXJhdG9yKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oImNhbm5vdCB1c2UgZXJhc2Uo
KSB3aXRoICIgKyB0eXBlX25hbWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiByZW1vdmUg
ZWxlbWVudHMgZ2l2ZW4gYW4gaXRlcmF0b3IgcmFuZ2UKKworICAgIFJlbW92ZXMgdGhlIGVsZW1l
bnQgc3BlY2lmaWVkIGJ5IHRoZSByYW5nZSBgW2ZpcnN0OyBsYXN0KWAuIFRoZSBpdGVyYXRvcgor
ICAgIEBhIGZpcnN0IGRvZXMgbm90IG5lZWQgdG8gYmUgZGVyZWZlcmVuY2VhYmxlIGlmIGBmaXJz
dCA9PSBsYXN0YDogZXJhc2luZworICAgIGFuIGVtcHR5IHJhbmdlIGlzIGEgbm8tb3AuCisKKyAg
ICBJZiBjYWxsZWQgb24gYSBwcmltaXRpdmUgdHlwZSBvdGhlciB0aGFuIGBudWxsYCwgdGhlIHJl
c3VsdGluZyBKU09OIHZhbHVlCisgICAgd2lsbCBiZSBgbnVsbGAuCisKKyAgICBAcGFyYW1baW5d
IGZpcnN0IGl0ZXJhdG9yIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJhbmdlIHRvIHJlbW92ZQor
ICAgIEBwYXJhbVtpbl0gbGFzdCBpdGVyYXRvciBwYXN0IHRoZSBlbmQgb2YgdGhlIHJhbmdlIHRv
IHJlbW92ZQorICAgIEByZXR1cm4gSXRlcmF0b3IgZm9sbG93aW5nIHRoZSBsYXN0IHJlbW92ZWQg
ZWxlbWVudC4gSWYgdGhlIGl0ZXJhdG9yIEBhCisgICAgc2Vjb25kIHJlZmVycyB0byB0aGUgbGFz
dCBlbGVtZW50LCB0aGUgYGVuZCgpYCBpdGVyYXRvciBpcyByZXR1cm5lZC4KKworICAgIEB0cGFy
YW0gSXRlcmF0b3JUeXBlIGFuIEByZWYgaXRlcmF0b3Igb3IgQHJlZiBjb25zdF9pdGVyYXRvcgor
CisgICAgQHBvc3QgSW52YWxpZGF0ZXMgaXRlcmF0b3JzIGFuZCByZWZlcmVuY2VzIGF0IG9yIGFm
dGVyIHRoZSBwb2ludCBvZiB0aGUKKyAgICBlcmFzZSwgaW5jbHVkaW5nIHRoZSBgZW5kKClgIGl0
ZXJhdG9yLgorCisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIGNhbGxlZCBvbiBhIGBu
dWxsYCB2YWx1ZTsgZXhhbXBsZTogYCJjYW5ub3QKKyAgICB1c2UgZXJhc2UoKSB3aXRoIG51bGwi
YAorICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBjYWxsZWQgb24gaXRlcmF0b3JzIHdo
aWNoIGRvZXMgbm90IGJlbG9uZyB0bworICAgIHRoZSBjdXJyZW50IEpTT04gdmFsdWU7IGV4YW1w
bGU6IGAiaXRlcmF0b3JzIGRvIG5vdCBmaXQgY3VycmVudCB2YWx1ZSJgCisgICAgQHRocm93IHN0
ZDo6b3V0X29mX3JhbmdlIGlmIGNhbGxlZCBvbiBhIHByaW1pdGl2ZSB0eXBlIHdpdGggaW52YWxp
ZAorICAgIGl0ZXJhdG9ycyAoaS5lLiwgaWYgYGZpcnN0ICE9IGJlZ2luKClgIGFuZCBgbGFzdCAh
PSBlbmQoKWApOyBleGFtcGxlOgorICAgIGAiaXRlcmF0b3JzIG91dCBvZiByYW5nZSJgCisKKyAg
ICBAY29tcGxleGl0eSBUaGUgY29tcGxleGl0eSBkZXBlbmRzIG9uIHRoZSB0eXBlOgorICAgIC0g
b2JqZWN0czogYGxvZyhzaXplKCkpICsgc3RkOjpkaXN0YW5jZShmaXJzdCwgbGFzdClgCisgICAg
LSBhcnJheXM6IGxpbmVhciBpbiB0aGUgZGlzdGFuY2UgYmV0d2VlbiBAYSBmaXJzdCBhbmQgQGEg
bGFzdCwgcGx1cyBsaW5lYXIKKyAgICAgIGluIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIEBhIGxhc3Qg
YW5kIGVuZCBvZiB0aGUgY29udGFpbmVyCisgICAgLSBzdHJpbmdzOiBsaW5lYXIgaW4gdGhlIGxl
bmd0aCBvZiB0aGUgc3RyaW5nCisgICAgLSBvdGhlciB0eXBlczogY29uc3RhbnQKKworICAgIEBs
aXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBzaG93cyB0aGUgcmVzdWx0IG9mIGBlcmFzZSgpYCBmb3Ig
ZGlmZmVyZW50IEpTT04KKyAgICB0eXBlcy4sZXJhc2VfX0l0ZXJhdG9yVHlwZV9JdGVyYXRvclR5
cGV9CisKKyAgICBAc2EgQHJlZiBlcmFzZShJdGVyYXRvclR5cGUpIC0tIHJlbW92ZXMgdGhlIGVs
ZW1lbnQgYXQgYSBnaXZlbiBwb3NpdGlvbgorICAgIEBzYSBAcmVmIGVyYXNlKGNvbnN0IHR5cGVu
YW1lIG9iamVjdF90OjprZXlfdHlwZSYpIC0tIHJlbW92ZXMgdGhlIGVsZW1lbnQKKyAgICBmcm9t
IGFuIG9iamVjdCBhdCB0aGUgZ2l2ZW4ga2V5CisgICAgQHNhIEByZWYgZXJhc2UoY29uc3Qgc2l6
ZV90eXBlKSAtLSByZW1vdmVzIHRoZSBlbGVtZW50IGZyb20gYW4gYXJyYXkgYXQKKyAgICB0aGUg
Z2l2ZW4gaW5kZXgKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICB0ZW1w
bGF0ZTxjbGFzcyBJdGVyYXRvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAorICAgICAg
ICAgICAgICAgICBzdGQ6OmlzX3NhbWU8SXRlcmF0b3JUeXBlLCB0eXBlbmFtZSBiYXNpY19qc29u
X3Q6Oml0ZXJhdG9yPjo6dmFsdWUgb3IKKyAgICAgICAgICAgICAgICAgc3RkOjppc19zYW1lPEl0
ZXJhdG9yVHlwZSwgdHlwZW5hbWUgYmFzaWNfanNvbl90Ojpjb25zdF9pdGVyYXRvcj46OnZhbHVl
LCBpbnQ+Ojp0eXBlCisgICAgICAgICAgICAgPSAwPgorICAgIEl0ZXJhdG9yVHlwZSBlcmFzZShJ
dGVyYXRvclR5cGUgZmlyc3QsIEl0ZXJhdG9yVHlwZSBsYXN0KQorICAgIHsKKyAgICAgICAgLy8g
bWFrZSBzdXJlIGl0ZXJhdG9yIGZpdHMgdGhlIGN1cnJlbnQgdmFsdWUKKyAgICAgICAgaWYgKHRo
aXMgIT0gZmlyc3QubV9vYmplY3Qgb3IgdGhpcyAhPSBsYXN0Lm1fb2JqZWN0KQorICAgICAgICB7
CisgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oIml0ZXJhdG9ycyBkbyBub3Qg
Zml0IGN1cnJlbnQgdmFsdWUiKTsKKyAgICAgICAgfQorCisgICAgICAgIEl0ZXJhdG9yVHlwZSBy
ZXN1bHQgPSBlbmQoKTsKKworICAgICAgICBzd2l0Y2ggKG1fdHlwZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgorICAgICAgICAgICAgY2FzZSB2YWx1ZV90
OjpudW1iZXJfZmxvYXQ6CisgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2Vy
OgorICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQ6CisgICAgICAgICAg
ICBjYXNlIHZhbHVlX3Q6OnN0cmluZzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAobm90IGZpcnN0Lm1faXQucHJpbWl0aXZlX2l0ZXJhdG9yLmlzX2JlZ2luKCkgb3Igbm90IGxh
c3QubV9pdC5wcmltaXRpdmVfaXRlcmF0b3IuaXNfZW5kKCkpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6Om91dF9vZl9yYW5nZT4oIml0ZXJhdG9ycyBv
dXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAo
aXNfc3RyaW5nKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBBbGxv
Y2F0b3JUeXBlPHN0cmluZ190PiBhbGxvYzsKKyAgICAgICAgICAgICAgICAgICAgYWxsb2MuZGVz
dHJveShtX3ZhbHVlLnN0cmluZyk7CisgICAgICAgICAgICAgICAgICAgIGFsbG9jLmRlYWxsb2Nh
dGUobV92YWx1ZS5zdHJpbmcsIDEpOworICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLnN0cmlu
ZyA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV90eXBl
ID0gdmFsdWVfdDo6bnVsbDsKKyAgICAgICAgICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2Ug
dmFsdWVfdDo6b2JqZWN0OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlc3VsdC5t
X2l0Lm9iamVjdF9pdGVyYXRvciA9IG1fdmFsdWUub2JqZWN0LT5lcmFzZShmaXJzdC5tX2l0Lm9i
amVjdF9pdGVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsYXN0Lm1faXQub2JqZWN0X2l0ZXJhdG9yKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXN1bHQubV9pdC5hcnJheV9pdGVyYXRvciA9IG1f
dmFsdWUuYXJyYXktPmVyYXNlKGZpcnN0Lm1faXQuYXJyYXlfaXRlcmF0b3IsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Lm1faXQuYXJyYXlfaXRlcmF0
b3IpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9t
YWluX2Vycm9yPigiY2Fubm90IHVzZSBlcmFzZSgpIHdpdGggIiArIHR5cGVfbmFtZSgpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgLyohCisgICAgQGJyaWVmIHJlbW92ZSBlbGVtZW50IGZyb20gYSBKU09OIG9iamVjdCBn
aXZlbiBhIGtleQorCisgICAgUmVtb3ZlcyBlbGVtZW50cyBmcm9tIGEgSlNPTiBvYmplY3Qgd2l0
aCB0aGUga2V5IHZhbHVlIEBhIGtleS4KKworICAgIEBwYXJhbVtpbl0ga2V5IHZhbHVlIG9mIHRo
ZSBlbGVtZW50cyB0byByZW1vdmUKKworICAgIEByZXR1cm4gTnVtYmVyIG9mIGVsZW1lbnRzIHJl
bW92ZWQuIElmIEBhIE9iamVjdFR5cGUgaXMgdGhlIGRlZmF1bHQKKyAgICBgc3RkOjptYXBgIHR5
cGUsIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBhbHdheXMgYmUgYDBgIChAYSBrZXkgd2FzIG5vdAor
ICAgIGZvdW5kKSBvciBgMWAgKEBhIGtleSB3YXMgZm91bmQpLgorCisgICAgQHBvc3QgUmVmZXJl
bmNlcyBhbmQgaXRlcmF0b3JzIHRvIHRoZSBlcmFzZWQgZWxlbWVudHMgYXJlIGludmFsaWRhdGVk
LgorICAgIE90aGVyIHJlZmVyZW5jZXMgYW5kIGl0ZXJhdG9ycyBhcmUgbm90IGFmZmVjdGVkLgor
CisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIHdoZW4gY2FsbGVkIG9uIGEgdHlwZSBvdGhl
ciB0aGFuIEpTT04gb2JqZWN0OworICAgIGV4YW1wbGU6IGAiY2Fubm90IHVzZSBlcmFzZSgpIHdp
dGggbnVsbCJgCisKKyAgICBAY29tcGxleGl0eSBgbG9nKHNpemUoKSkgKyBjb3VudChrZXkpYAor
CisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIHNob3dzIHRoZSBlZmZlY3Qgb2YgYGVyYXNl
KClgLixlcmFzZV9fa2V5X3R5cGV9CisKKyAgICBAc2EgQHJlZiBlcmFzZShJdGVyYXRvclR5cGUp
IC0tIHJlbW92ZXMgdGhlIGVsZW1lbnQgYXQgYSBnaXZlbiBwb3NpdGlvbgorICAgIEBzYSBAcmVm
IGVyYXNlKEl0ZXJhdG9yVHlwZSwgSXRlcmF0b3JUeXBlKSAtLSByZW1vdmVzIHRoZSBlbGVtZW50
cyBpbgorICAgIHRoZSBnaXZlbiByYW5nZQorICAgIEBzYSBAcmVmIGVyYXNlKGNvbnN0IHNpemVf
dHlwZSkgLS0gcmVtb3ZlcyB0aGUgZWxlbWVudCBmcm9tIGFuIGFycmF5IGF0CisgICAgdGhlIGdp
dmVuIGluZGV4CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgc2l6ZV90
eXBlIGVyYXNlKGNvbnN0IHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlwZSYga2V5KQorICAgIHsK
KyAgICAgICAgLy8gdGhpcyBlcmFzZSBvbmx5IHdvcmtzIGZvciBvYmplY3RzCisgICAgICAgIGlm
IChpc19vYmplY3QoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUub2Jq
ZWN0LT5lcmFzZShrZXkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJjYW5ub3QgdXNlIGVyYXNlKCkgd2l0
aCAiICsgdHlwZV9uYW1lKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLyohCisgICAgQGJy
aWVmIHJlbW92ZSBlbGVtZW50IGZyb20gYSBKU09OIGFycmF5IGdpdmVuIGFuIGluZGV4CisKKyAg
ICBSZW1vdmVzIGVsZW1lbnQgZnJvbSBhIEpTT04gYXJyYXkgYXQgdGhlIGluZGV4IEBhIGlkeC4K
KworICAgIEBwYXJhbVtpbl0gaWR4IGluZGV4IG9mIHRoZSBlbGVtZW50IHRvIHJlbW92ZQorCisg
ICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIHdoZW4gY2FsbGVkIG9uIGEgdHlwZSBvdGhlciB0
aGFuIEpTT04gYXJyYXk7CisgICAgZXhhbXBsZTogYCJjYW5ub3QgdXNlIGVyYXNlKCkgd2l0aCBu
dWxsImAKKyAgICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2Ugd2hlbiBgaWR4ID49IHNpemUoKWA7
IGV4YW1wbGU6IGAiYXJyYXkgaW5kZXggMTcKKyAgICBpcyBvdXQgb2YgcmFuZ2UiYAorCisgICAg
QGNvbXBsZXhpdHkgTGluZWFyIGluIGRpc3RhbmNlIGJldHdlZW4gQGEgaWR4IGFuZCB0aGUgZW5k
IG9mIHRoZSBjb250YWluZXIuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgc2hvd3Mg
dGhlIGVmZmVjdCBvZiBgZXJhc2UoKWAuLGVyYXNlX19zaXplX3R5cGV9CisKKyAgICBAc2EgQHJl
ZiBlcmFzZShJdGVyYXRvclR5cGUpIC0tIHJlbW92ZXMgdGhlIGVsZW1lbnQgYXQgYSBnaXZlbiBw
b3NpdGlvbgorICAgIEBzYSBAcmVmIGVyYXNlKEl0ZXJhdG9yVHlwZSwgSXRlcmF0b3JUeXBlKSAt
LSByZW1vdmVzIHRoZSBlbGVtZW50cyBpbgorICAgIHRoZSBnaXZlbiByYW5nZQorICAgIEBzYSBA
cmVmIGVyYXNlKGNvbnN0IHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlwZSYpIC0tIHJlbW92ZXMg
dGhlIGVsZW1lbnQKKyAgICBmcm9tIGFuIG9iamVjdCBhdCB0aGUgZ2l2ZW4ga2V5CisKKyAgICBA
c2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgdm9pZCBlcmFzZShjb25zdCBzaXplX3R5
cGUgaWR4KQorICAgIHsKKyAgICAgICAgLy8gdGhpcyBlcmFzZSBvbmx5IHdvcmtzIGZvciBhcnJh
eXMKKyAgICAgICAgaWYgKGlzX2FycmF5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChp
ZHggPj0gc2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6
b3V0X29mX3JhbmdlPigiYXJyYXkgaW5kZXggIiArIHN0ZDo6dG9fc3RyaW5nKGlkeCkgKyAiIGlz
IG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX3ZhbHVlLmFy
cmF5LT5lcmFzZShtX3ZhbHVlLmFycmF5LT5iZWdpbigpICsgc3RhdGljX2Nhc3Q8ZGlmZmVyZW5j
ZV90eXBlPihpZHgpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fubm90IHVzZSBlcmFzZSgpIHdpdGgg
IiArIHR5cGVfbmFtZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLyBAfQorCisKKyAg
ICAvLy8vLy8vLy8vLy8KKyAgICAvLyBsb29rdXAgLy8KKyAgICAvLy8vLy8vLy8vLy8KKworICAg
IC8vLyBAbmFtZSBsb29rdXAKKyAgICAvLy8gQHsKKworICAgIC8qIQorICAgIEBicmllZiBmaW5k
IGFuIGVsZW1lbnQgaW4gYSBKU09OIG9iamVjdAorCisgICAgRmluZHMgYW4gZWxlbWVudCBpbiBh
IEpTT04gb2JqZWN0IHdpdGgga2V5IGVxdWl2YWxlbnQgdG8gQGEga2V5LiBJZiB0aGUKKyAgICBl
bGVtZW50IGlzIG5vdCBmb3VuZCBvciB0aGUgSlNPTiB2YWx1ZSBpcyBub3QgYW4gb2JqZWN0LCBl
bmQoKSBpcworICAgIHJldHVybmVkLgorCisgICAgQHBhcmFtW2luXSBrZXkga2V5IHZhbHVlIG9m
IHRoZSBlbGVtZW50IHRvIHNlYXJjaCBmb3IKKworICAgIEByZXR1cm4gSXRlcmF0b3IgdG8gYW4g
ZWxlbWVudCB3aXRoIGtleSBlcXVpdmFsZW50IHRvIEBhIGtleS4gSWYgbm8gc3VjaAorICAgIGVs
ZW1lbnQgaXMgZm91bmQsIHBhc3QtdGhlLWVuZCAoc2VlIGVuZCgpKSBpdGVyYXRvciBpcyByZXR1
cm5lZC4KKworICAgIEBjb21wbGV4aXR5IExvZ2FyaXRobWljIGluIHRoZSBzaXplIG9mIHRoZSBK
U09OIG9iamVjdC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBzaG93cyBob3cgYGZp
bmQoKWAgaXMgdXNlZC4sZmluZF9fa2V5X3R5cGV9CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAu
MAorICAgICovCisgICAgaXRlcmF0b3IgZmluZCh0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUg
a2V5KQorICAgIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBlbmQoKTsKKworICAgICAgICBpZiAo
aXNfb2JqZWN0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdC5tX2l0Lm9iamVjdF9p
dGVyYXRvciA9IG1fdmFsdWUub2JqZWN0LT5maW5kKGtleSk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBmaW5kIGFuIGVs
ZW1lbnQgaW4gYSBKU09OIG9iamVjdAorICAgIEBjb3B5ZG9jIGZpbmQodHlwZW5hbWUgb2JqZWN0
X3Q6OmtleV90eXBlKQorICAgICovCisgICAgY29uc3RfaXRlcmF0b3IgZmluZCh0eXBlbmFtZSBv
YmplY3RfdDo6a2V5X3R5cGUga2V5KSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byByZXN1bHQg
PSBjZW5kKCk7CisKKyAgICAgICAgaWYgKGlzX29iamVjdCgpKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXN1bHQubV9pdC5vYmplY3RfaXRlcmF0b3IgPSBtX3ZhbHVlLm9iamVjdC0+ZmluZChr
ZXkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAv
KiEKKyAgICBAYnJpZWYgcmV0dXJucyB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIGEga2V5
IGluIGEgSlNPTiBvYmplY3QKKworICAgIFJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyB3
aXRoIGtleSBAYSBrZXkuIElmIE9iamVjdFR5cGUgaXMgdGhlCisgICAgZGVmYXVsdCBgc3RkOjpt
YXBgIHR5cGUsIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBhbHdheXMgYmUgYDBgIChAYSBrZXkgd2Fz
CisgICAgbm90IGZvdW5kKSBvciBgMWAgKEBhIGtleSB3YXMgZm91bmQpLgorCisgICAgQHBhcmFt
W2luXSBrZXkga2V5IHZhbHVlIG9mIHRoZSBlbGVtZW50IHRvIGNvdW50CisKKyAgICBAcmV0dXJu
IE51bWJlciBvZiBlbGVtZW50cyB3aXRoIGtleSBAYSBrZXkuIElmIHRoZSBKU09OIHZhbHVlIGlz
IG5vdCBhbgorICAgIG9iamVjdCwgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGAwYC4KKworICAg
IEBjb21wbGV4aXR5IExvZ2FyaXRobWljIGluIHRoZSBzaXplIG9mIHRoZSBKU09OIG9iamVjdC4K
KworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBzaG93cyBob3cgYGNvdW50KClgIGlzIHVz
ZWQuLGNvdW50fQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIHNpemVf
dHlwZSBjb3VudCh0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUga2V5KSBjb25zdAorICAgIHsK
KyAgICAgICAgLy8gcmV0dXJuIDAgZm9yIGFsbCBub25vYmplY3QgdHlwZXMKKyAgICAgICAgcmV0
dXJuIGlzX29iamVjdCgpID8gbV92YWx1ZS5vYmplY3QtPmNvdW50KGtleSkgOiAwOworICAgIH0K
KworICAgIC8vLyBAfQorCisKKyAgICAvLy8vLy8vLy8vLy8vLy8KKyAgICAvLyBpdGVyYXRvcnMg
Ly8KKyAgICAvLy8vLy8vLy8vLy8vLy8KKworICAgIC8vLyBAbmFtZSBpdGVyYXRvcnMKKyAgICAv
Ly8gQHsKKworICAgIC8qIQorICAgIEBicmllZiByZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIHRoZSBm
aXJzdCBlbGVtZW50CisKKyAgICBSZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIHRoZSBmaXJzdCBlbGVt
ZW50LgorCisgICAgQGltYWdlIGh0bWwgcmFuZ2UtYmVnaW4tZW5kLnN2ZyAiSWxsdXN0cmF0aW9u
IGZyb20gY3BwcmVmZXJlbmNlLmNvbSIKKworICAgIEByZXR1cm4gaXRlcmF0b3IgdG8gdGhlIGZp
cnN0IGVsZW1lbnQKKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQHJlcXVpcmVt
ZW50IFRoaXMgZnVuY3Rpb24gaGVscHMgYGJhc2ljX2pzb25gIHNhdGlzZnlpbmcgdGhlCisgICAg
W0NvbnRhaW5lcl0oaHR0cDovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29uY2VwdC9Db250
YWluZXIpCisgICAgcmVxdWlyZW1lbnRzOgorICAgIC0gVGhlIGNvbXBsZXhpdHkgaXMgY29uc3Rh
bnQuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIHNob3dzIGFuIGV4YW1w
bGUgZm9yIGBiZWdpbigpYC4sYmVnaW59CisKKyAgICBAc2EgQHJlZiBjYmVnaW4oKSAtLSByZXR1
cm5zIGEgY29uc3QgaXRlcmF0b3IgdG8gdGhlIGJlZ2lubmluZworICAgIEBzYSBAcmVmIGVuZCgp
IC0tIHJldHVybnMgYW4gaXRlcmF0b3IgdG8gdGhlIGVuZAorICAgIEBzYSBAcmVmIGNlbmQoKSAt
LSByZXR1cm5zIGEgY29uc3QgaXRlcmF0b3IgdG8gdGhlIGVuZAorCisgICAgQHNpbmNlIHZlcnNp
b24gMS4wLjAKKyAgICAqLworICAgIGl0ZXJhdG9yIGJlZ2luKCkgbm9leGNlcHQKKyAgICB7Cisg
ICAgICAgIGl0ZXJhdG9yIHJlc3VsdCh0aGlzKTsKKyAgICAgICAgcmVzdWx0LnNldF9iZWdpbigp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qIQorICAgIEBjb3B5ZG9j
IGJhc2ljX2pzb246OmNiZWdpbigpCisgICAgKi8KKyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigp
IGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAgICByZXR1cm4gY2JlZ2luKCk7CisgICAgfQor
CisgICAgLyohCisgICAgQGJyaWVmIHJldHVybnMgYSBjb25zdCBpdGVyYXRvciB0byB0aGUgZmly
c3QgZWxlbWVudAorCisgICAgUmV0dXJucyBhIGNvbnN0IGl0ZXJhdG9yIHRvIHRoZSBmaXJzdCBl
bGVtZW50LgorCisgICAgQGltYWdlIGh0bWwgcmFuZ2UtYmVnaW4tZW5kLnN2ZyAiSWxsdXN0cmF0
aW9uIGZyb20gY3BwcmVmZXJlbmNlLmNvbSIKKworICAgIEByZXR1cm4gY29uc3QgaXRlcmF0b3Ig
dG8gdGhlIGZpcnN0IGVsZW1lbnQKKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAg
QHJlcXVpcmVtZW50IFRoaXMgZnVuY3Rpb24gaGVscHMgYGJhc2ljX2pzb25gIHNhdGlzZnlpbmcg
dGhlCisgICAgW0NvbnRhaW5lcl0oaHR0cDovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29u
Y2VwdC9Db250YWluZXIpCisgICAgcmVxdWlyZW1lbnRzOgorICAgIC0gVGhlIGNvbXBsZXhpdHkg
aXMgY29uc3RhbnQuCisgICAgLSBIYXMgdGhlIHNlbWFudGljcyBvZiBgY29uc3RfY2FzdDxjb25z
dCBiYXNpY19qc29uJj4oKnRoaXMpLmJlZ2luKClgLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBm
b2xsb3dpbmcgY29kZSBzaG93cyBhbiBleGFtcGxlIGZvciBgY2JlZ2luKClgLixjYmVnaW59CisK
KyAgICBAc2EgQHJlZiBiZWdpbigpIC0tIHJldHVybnMgYW4gaXRlcmF0b3IgdG8gdGhlIGJlZ2lu
bmluZworICAgIEBzYSBAcmVmIGVuZCgpIC0tIHJldHVybnMgYW4gaXRlcmF0b3IgdG8gdGhlIGVu
ZAorICAgIEBzYSBAcmVmIGNlbmQoKSAtLSByZXR1cm5zIGEgY29uc3QgaXRlcmF0b3IgdG8gdGhl
IGVuZAorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGNvbnN0X2l0ZXJh
dG9yIGNiZWdpbigpIGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAgICBjb25zdF9pdGVyYXRv
ciByZXN1bHQodGhpcyk7CisgICAgICAgIHJlc3VsdC5zZXRfYmVnaW4oKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgcmV0dXJucyBhbiBpdGVy
YXRvciB0byBvbmUgcGFzdCB0aGUgbGFzdCBlbGVtZW50CisKKyAgICBSZXR1cm5zIGFuIGl0ZXJh
dG9yIHRvIG9uZSBwYXN0IHRoZSBsYXN0IGVsZW1lbnQuCisKKyAgICBAaW1hZ2UgaHRtbCByYW5n
ZS1iZWdpbi1lbmQuc3ZnICJJbGx1c3RyYXRpb24gZnJvbSBjcHByZWZlcmVuY2UuY29tIgorCisg
ICAgQHJldHVybiBpdGVyYXRvciBvbmUgcGFzdCB0aGUgbGFzdCBlbGVtZW50CisKKyAgICBAY29t
cGxleGl0eSBDb25zdGFudC4KKworICAgIEByZXF1aXJlbWVudCBUaGlzIGZ1bmN0aW9uIGhlbHBz
IGBiYXNpY19qc29uYCBzYXRpc2Z5aW5nIHRoZQorICAgIFtDb250YWluZXJdKGh0dHA6Ly9lbi5j
cHByZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNlcHQvQ29udGFpbmVyKQorICAgIHJlcXVpcmVtZW50
czoKKyAgICAtIFRoZSBjb21wbGV4aXR5IGlzIGNvbnN0YW50LgorCisgICAgQGxpdmVleGFtcGxl
e1RoZSBmb2xsb3dpbmcgY29kZSBzaG93cyBhbiBleGFtcGxlIGZvciBgZW5kKClgLixlbmR9CisK
KyAgICBAc2EgQHJlZiBjZW5kKCkgLS0gcmV0dXJucyBhIGNvbnN0IGl0ZXJhdG9yIHRvIHRoZSBl
bmQKKyAgICBAc2EgQHJlZiBiZWdpbigpIC0tIHJldHVybnMgYW4gaXRlcmF0b3IgdG8gdGhlIGJl
Z2lubmluZworICAgIEBzYSBAcmVmIGNiZWdpbigpIC0tIHJldHVybnMgYSBjb25zdCBpdGVyYXRv
ciB0byB0aGUgYmVnaW5uaW5nCisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisg
ICAgaXRlcmF0b3IgZW5kKCkgbm9leGNlcHQKKyAgICB7CisgICAgICAgIGl0ZXJhdG9yIHJlc3Vs
dCh0aGlzKTsKKyAgICAgICAgcmVzdWx0LnNldF9lbmQoKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAY29weWRvYyBiYXNpY19qc29uOjpjZW5kKCkKKyAg
ICAqLworICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgeworICAg
ICAgICByZXR1cm4gY2VuZCgpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiByZXR1cm5z
IGEgY29uc3QgaXRlcmF0b3IgdG8gb25lIHBhc3QgdGhlIGxhc3QgZWxlbWVudAorCisgICAgUmV0
dXJucyBhIGNvbnN0IGl0ZXJhdG9yIHRvIG9uZSBwYXN0IHRoZSBsYXN0IGVsZW1lbnQuCisKKyAg
ICBAaW1hZ2UgaHRtbCByYW5nZS1iZWdpbi1lbmQuc3ZnICJJbGx1c3RyYXRpb24gZnJvbSBjcHBy
ZWZlcmVuY2UuY29tIgorCisgICAgQHJldHVybiBjb25zdCBpdGVyYXRvciBvbmUgcGFzdCB0aGUg
bGFzdCBlbGVtZW50CisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEByZXF1aXJl
bWVudCBUaGlzIGZ1bmN0aW9uIGhlbHBzIGBiYXNpY19qc29uYCBzYXRpc2Z5aW5nIHRoZQorICAg
IFtDb250YWluZXJdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNlcHQvQ29u
dGFpbmVyKQorICAgIHJlcXVpcmVtZW50czoKKyAgICAtIFRoZSBjb21wbGV4aXR5IGlzIGNvbnN0
YW50LgorICAgIC0gSGFzIHRoZSBzZW1hbnRpY3Mgb2YgYGNvbnN0X2Nhc3Q8Y29uc3QgYmFzaWNf
anNvbiY+KCp0aGlzKS5lbmQoKWAuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBj
b2RlIHNob3dzIGFuIGV4YW1wbGUgZm9yIGBjZW5kKClgLixjZW5kfQorCisgICAgQHNhIEByZWYg
ZW5kKCkgLS0gcmV0dXJucyBhbiBpdGVyYXRvciB0byB0aGUgZW5kCisgICAgQHNhIEByZWYgYmVn
aW4oKSAtLSByZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIHRoZSBiZWdpbm5pbmcKKyAgICBAc2EgQHJl
ZiBjYmVnaW4oKSAtLSByZXR1cm5zIGEgY29uc3QgaXRlcmF0b3IgdG8gdGhlIGJlZ2lubmluZwor
CisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGNvbnN0X2l0ZXJhdG9yIGNl
bmQoKSBjb25zdCBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgY29uc3RfaXRlcmF0b3IgcmVzdWx0
KHRoaXMpOworICAgICAgICByZXN1bHQuc2V0X2VuZCgpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiByZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIHRo
ZSByZXZlcnNlLWJlZ2lubmluZworCisgICAgUmV0dXJucyBhbiBpdGVyYXRvciB0byB0aGUgcmV2
ZXJzZS1iZWdpbm5pbmc7IHRoYXQgaXMsIHRoZSBsYXN0IGVsZW1lbnQuCisKKyAgICBAaW1hZ2Ug
aHRtbCByYW5nZS1yYmVnaW4tcmVuZC5zdmcgIklsbHVzdHJhdGlvbiBmcm9tIGNwcHJlZmVyZW5j
ZS5jb20iCisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEByZXF1aXJlbWVudCBU
aGlzIGZ1bmN0aW9uIGhlbHBzIGBiYXNpY19qc29uYCBzYXRpc2Z5aW5nIHRoZQorICAgIFtSZXZl
cnNpYmxlQ29udGFpbmVyXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0
L1JldmVyc2libGVDb250YWluZXIpCisgICAgcmVxdWlyZW1lbnRzOgorICAgIC0gVGhlIGNvbXBs
ZXhpdHkgaXMgY29uc3RhbnQuCisgICAgLSBIYXMgdGhlIHNlbWFudGljcyBvZiBgcmV2ZXJzZV9p
dGVyYXRvcihlbmQoKSlgLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29kZSBz
aG93cyBhbiBleGFtcGxlIGZvciBgcmJlZ2luKClgLixyYmVnaW59CisKKyAgICBAc2EgQHJlZiBj
cmJlZ2luKCkgLS0gcmV0dXJucyBhIGNvbnN0IHJldmVyc2UgaXRlcmF0b3IgdG8gdGhlIGJlZ2lu
bmluZworICAgIEBzYSBAcmVmIHJlbmQoKSAtLSByZXR1cm5zIGEgcmV2ZXJzZSBpdGVyYXRvciB0
byB0aGUgZW5kCisgICAgQHNhIEByZWYgY3JlbmQoKSAtLSByZXR1cm5zIGEgY29uc3QgcmV2ZXJz
ZSBpdGVyYXRvciB0byB0aGUgZW5kCisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICov
CisgICAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBub2V4Y2VwdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOworICAgIH0KKworICAgIC8qIQorICAgIEBj
b3B5ZG9jIGJhc2ljX2pzb246OmNyYmVnaW4oKQorICAgICovCisgICAgY29uc3RfcmV2ZXJzZV9p
dGVyYXRvciByYmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGNy
YmVnaW4oKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgcmV0dXJucyBhbiBpdGVyYXRv
ciB0byB0aGUgcmV2ZXJzZS1lbmQKKworICAgIFJldHVybnMgYW4gaXRlcmF0b3IgdG8gdGhlIHJl
dmVyc2UtZW5kOyB0aGF0IGlzLCBvbmUgYmVmb3JlIHRoZSBmaXJzdAorICAgIGVsZW1lbnQuCisK
KyAgICBAaW1hZ2UgaHRtbCByYW5nZS1yYmVnaW4tcmVuZC5zdmcgIklsbHVzdHJhdGlvbiBmcm9t
IGNwcHJlZmVyZW5jZS5jb20iCisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEBy
ZXF1aXJlbWVudCBUaGlzIGZ1bmN0aW9uIGhlbHBzIGBiYXNpY19qc29uYCBzYXRpc2Z5aW5nIHRo
ZQorICAgIFtSZXZlcnNpYmxlQ29udGFpbmVyXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93
L2NwcC9jb25jZXB0L1JldmVyc2libGVDb250YWluZXIpCisgICAgcmVxdWlyZW1lbnRzOgorICAg
IC0gVGhlIGNvbXBsZXhpdHkgaXMgY29uc3RhbnQuCisgICAgLSBIYXMgdGhlIHNlbWFudGljcyBv
ZiBgcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKWAuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZv
bGxvd2luZyBjb2RlIHNob3dzIGFuIGV4YW1wbGUgZm9yIGByZW5kKClgLixyZW5kfQorCisgICAg
QHNhIEByZWYgY3JlbmQoKSAtLSByZXR1cm5zIGEgY29uc3QgcmV2ZXJzZSBpdGVyYXRvciB0byB0
aGUgZW5kCisgICAgQHNhIEByZWYgcmJlZ2luKCkgLS0gcmV0dXJucyBhIHJldmVyc2UgaXRlcmF0
b3IgdG8gdGhlIGJlZ2lubmluZworICAgIEBzYSBAcmVmIGNyYmVnaW4oKSAtLSByZXR1cm5zIGEg
Y29uc3QgcmV2ZXJzZSBpdGVyYXRvciB0byB0aGUgYmVnaW5uaW5nCisKKyAgICBAc2luY2UgdmVy
c2lvbiAxLjAuMAorICAgICovCisgICAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgbm9leGNlcHQK
KyAgICB7CisgICAgICAgIHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOworICAgIH0K
KworICAgIC8qIQorICAgIEBjb3B5ZG9jIGJhc2ljX2pzb246OmNyZW5kKCkKKyAgICAqLworICAg
IGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgeworICAg
ICAgICByZXR1cm4gY3JlbmQoKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgcmV0dXJu
cyBhIGNvbnN0IHJldmVyc2UgaXRlcmF0b3IgdG8gdGhlIGxhc3QgZWxlbWVudAorCisgICAgUmV0
dXJucyBhIGNvbnN0IGl0ZXJhdG9yIHRvIHRoZSByZXZlcnNlLWJlZ2lubmluZzsgdGhhdCBpcywg
dGhlIGxhc3QKKyAgICBlbGVtZW50LgorCisgICAgQGltYWdlIGh0bWwgcmFuZ2UtcmJlZ2luLXJl
bmQuc3ZnICJJbGx1c3RyYXRpb24gZnJvbSBjcHByZWZlcmVuY2UuY29tIgorCisgICAgQGNvbXBs
ZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAcmVxdWlyZW1lbnQgVGhpcyBmdW5jdGlvbiBoZWxwcyBg
YmFzaWNfanNvbmAgc2F0aXNmeWluZyB0aGUKKyAgICBbUmV2ZXJzaWJsZUNvbnRhaW5lcl0oaHR0
cDovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29uY2VwdC9SZXZlcnNpYmxlQ29udGFpbmVy
KQorICAgIHJlcXVpcmVtZW50czoKKyAgICAtIFRoZSBjb21wbGV4aXR5IGlzIGNvbnN0YW50Lgor
ICAgIC0gSGFzIHRoZSBzZW1hbnRpY3Mgb2YgYGNvbnN0X2Nhc3Q8Y29uc3QgYmFzaWNfanNvbiY+
KCp0aGlzKS5yYmVnaW4oKWAuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2Rl
IHNob3dzIGFuIGV4YW1wbGUgZm9yIGBjcmJlZ2luKClgLixjcmJlZ2lufQorCisgICAgQHNhIEBy
ZWYgcmJlZ2luKCkgLS0gcmV0dXJucyBhIHJldmVyc2UgaXRlcmF0b3IgdG8gdGhlIGJlZ2lubmlu
ZworICAgIEBzYSBAcmVmIHJlbmQoKSAtLSByZXR1cm5zIGEgcmV2ZXJzZSBpdGVyYXRvciB0byB0
aGUgZW5kCisgICAgQHNhIEByZWYgY3JlbmQoKSAtLSByZXR1cm5zIGEgY29uc3QgcmV2ZXJzZSBp
dGVyYXRvciB0byB0aGUgZW5kCisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisg
ICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjcmJlZ2luKCkgY29uc3Qgbm9leGNlcHQKKyAgICB7
CisgICAgICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGNlbmQoKSk7CisgICAgfQor
CisgICAgLyohCisgICAgQGJyaWVmIHJldHVybnMgYSBjb25zdCByZXZlcnNlIGl0ZXJhdG9yIHRv
IG9uZSBiZWZvcmUgdGhlIGZpcnN0CisKKyAgICBSZXR1cm5zIGEgY29uc3QgcmV2ZXJzZSBpdGVy
YXRvciB0byB0aGUgcmV2ZXJzZS1lbmQ7IHRoYXQgaXMsIG9uZSBiZWZvcmUKKyAgICB0aGUgZmly
c3QgZWxlbWVudC4KKworICAgIEBpbWFnZSBodG1sIHJhbmdlLXJiZWdpbi1yZW5kLnN2ZyAiSWxs
dXN0cmF0aW9uIGZyb20gY3BwcmVmZXJlbmNlLmNvbSIKKworICAgIEBjb21wbGV4aXR5IENvbnN0
YW50LgorCisgICAgQHJlcXVpcmVtZW50IFRoaXMgZnVuY3Rpb24gaGVscHMgYGJhc2ljX2pzb25g
IHNhdGlzZnlpbmcgdGhlCisgICAgW1JldmVyc2libGVDb250YWluZXJdKGh0dHA6Ly9lbi5jcHBy
ZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNlcHQvUmV2ZXJzaWJsZUNvbnRhaW5lcikKKyAgICByZXF1
aXJlbWVudHM6CisgICAgLSBUaGUgY29tcGxleGl0eSBpcyBjb25zdGFudC4KKyAgICAtIEhhcyB0
aGUgc2VtYW50aWNzIG9mIGBjb25zdF9jYXN0PGNvbnN0IGJhc2ljX2pzb24mPigqdGhpcykucmVu
ZCgpYC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgYW4gZXhh
bXBsZSBmb3IgYGNyZW5kKClgLixjcmVuZH0KKworICAgIEBzYSBAcmVmIHJlbmQoKSAtLSByZXR1
cm5zIGEgcmV2ZXJzZSBpdGVyYXRvciB0byB0aGUgZW5kCisgICAgQHNhIEByZWYgcmJlZ2luKCkg
LS0gcmV0dXJucyBhIHJldmVyc2UgaXRlcmF0b3IgdG8gdGhlIGJlZ2lubmluZworICAgIEBzYSBA
cmVmIGNyYmVnaW4oKSAtLSByZXR1cm5zIGEgY29uc3QgcmV2ZXJzZSBpdGVyYXRvciB0byB0aGUg
YmVnaW5uaW5nCisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgY29uc3Rf
cmV2ZXJzZV9pdGVyYXRvciBjcmVuZCgpIGNvbnN0IG5vZXhjZXB0CisgICAgeworICAgICAgICBy
ZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihjYmVnaW4oKSk7CisgICAgfQorCisgIHByaXZh
dGU6CisgICAgLy8gZm9yd2FyZCBkZWNsYXJhdGlvbgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0
ZXJhdG9yVHlwZT4gY2xhc3MgaXRlcmF0aW9uX3Byb3h5OworCisgIHB1YmxpYzoKKyAgICAvKiEK
KyAgICBAYnJpZWYgd3JhcHBlciB0byBhY2Nlc3MgaXRlcmF0b3IgbWVtYmVyIGZ1bmN0aW9ucyBp
biByYW5nZS1iYXNlZCBmb3IKKworICAgIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRvIGFjY2VzcyBA
cmVmIGl0ZXJhdG9yOjprZXkoKSBhbmQgQHJlZgorICAgIGl0ZXJhdG9yOjp2YWx1ZSgpIGR1cmlu
ZyByYW5nZS1iYXNlZCBmb3IgbG9vcHMuIEluIHRoZXNlIGxvb3BzLCBhCisgICAgcmVmZXJlbmNl
IHRvIHRoZSBKU09OIHZhbHVlcyBpcyByZXR1cm5lZCwgc28gdGhlcmUgaXMgbm8gYWNjZXNzIHRv
IHRoZQorICAgIHVuZGVybHlpbmcgaXRlcmF0b3IuCisKKyAgICBAbm90ZSBUaGUgbmFtZSBvZiB0
aGlzIGZ1bmN0aW9uIGlzIG5vdCB5ZXQgZmluYWwgYW5kIG1heSBjaGFuZ2UgaW4gdGhlCisgICAg
ZnV0dXJlLgorICAgICovCisgICAgc3RhdGljIGl0ZXJhdGlvbl9wcm94eTxpdGVyYXRvcj4gaXRl
cmF0b3Jfd3JhcHBlcihyZWZlcmVuY2UgY29udCkKKyAgICB7CisgICAgICAgIHJldHVybiBpdGVy
YXRpb25fcHJveHk8aXRlcmF0b3I+KGNvbnQpOworICAgIH0KKworICAgIC8qIQorICAgIEBjb3B5
ZG9jIGl0ZXJhdG9yX3dyYXBwZXIocmVmZXJlbmNlKQorICAgICovCisgICAgc3RhdGljIGl0ZXJh
dGlvbl9wcm94eTxjb25zdF9pdGVyYXRvcj4gaXRlcmF0b3Jfd3JhcHBlcihjb25zdF9yZWZlcmVu
Y2UgY29udCkKKyAgICB7CisgICAgICAgIHJldHVybiBpdGVyYXRpb25fcHJveHk8Y29uc3RfaXRl
cmF0b3I+KGNvbnQpOworICAgIH0KKworICAgIC8vLyBAfQorCisKKyAgICAvLy8vLy8vLy8vLy8v
LworICAgIC8vIGNhcGFjaXR5IC8vCisgICAgLy8vLy8vLy8vLy8vLy8KKworICAgIC8vLyBAbmFt
ZSBjYXBhY2l0eQorICAgIC8vLyBAeworCisgICAgLyohCisgICAgQGJyaWVmIGNoZWNrcyB3aGV0
aGVyIHRoZSBjb250YWluZXIgaXMgZW1wdHkKKworICAgIENoZWNrcyBpZiBhIEpTT04gdmFsdWUg
aGFzIG5vIGVsZW1lbnRzLgorCisgICAgQHJldHVybiBUaGUgcmV0dXJuIHZhbHVlIGRlcGVuZHMg
b24gdGhlIGRpZmZlcmVudCB0eXBlcyBhbmQgaXMKKyAgICAgICAgICAgIGRlZmluZWQgYXMgZm9s
bG93czoKKyAgICAgICAgICAgIFZhbHVlIHR5cGUgIHwgcmV0dXJuIHZhbHVlCisgICAgICAgICAg
ICAtLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgIG51bGwgICAgICAgIHwg
YHRydWVgCisgICAgICAgICAgICBib29sZWFuICAgICB8IGBmYWxzZWAKKyAgICAgICAgICAgIHN0
cmluZyAgICAgIHwgYGZhbHNlYAorICAgICAgICAgICAgbnVtYmVyICAgICAgfCBgZmFsc2VgCisg
ICAgICAgICAgICBvYmplY3QgICAgICB8IHJlc3VsdCBvZiBmdW5jdGlvbiBgb2JqZWN0X3Q6OmVt
cHR5KClgCisgICAgICAgICAgICBhcnJheSAgICAgICB8IHJlc3VsdCBvZiBmdW5jdGlvbiBgYXJy
YXlfdDo6ZW1wdHkoKWAKKworICAgIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJu
IHdoZXRoZXIgYSBzdHJpbmcgc3RvcmVkIGFzIEpTT04gdmFsdWUKKyAgICBpcyBlbXB0eSAtIGl0
IHJldHVybnMgd2hldGhlciB0aGUgSlNPTiBjb250YWluZXIgaXRzZWxmIGlzIGVtcHR5IHdoaWNo
IGlzCisgICAgZmFsc2UgaW4gdGhlIGNhc2Ugb2YgYSBzdHJpbmcuCisKKyAgICBAY29tcGxleGl0
eSBDb25zdGFudCwgYXMgbG9uZyBhcyBAcmVmIGFycmF5X3QgYW5kIEByZWYgb2JqZWN0X3Qgc2F0
aXNmeQorICAgIHRoZSBDb250YWluZXIgY29uY2VwdDsgdGhhdCBpcywgdGhlaXIgYGVtcHR5KClg
IGZ1bmN0aW9ucyBoYXZlIGNvbnN0YW50CisgICAgY29tcGxleGl0eS4KKworICAgIEByZXF1aXJl
bWVudCBUaGlzIGZ1bmN0aW9uIGhlbHBzIGBiYXNpY19qc29uYCBzYXRpc2Z5aW5nIHRoZQorICAg
IFtDb250YWluZXJdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNlcHQvQ29u
dGFpbmVyKQorICAgIHJlcXVpcmVtZW50czoKKyAgICAtIFRoZSBjb21wbGV4aXR5IGlzIGNvbnN0
YW50LgorICAgIC0gSGFzIHRoZSBzZW1hbnRpY3Mgb2YgYGJlZ2luKCkgPT0gZW5kKClgLgorCisg
ICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29kZSB1c2VzIGBlbXB0eSgpYCB0byBjaGVj
ayBpZiBhIEpTT04KKyAgICBvYmplY3QgY29udGFpbnMgYW55IGVsZW1lbnRzLixlbXB0eX0KKwor
ICAgIEBzYSBAcmVmIHNpemUoKSAtLSByZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMKKwor
ICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBib29sIGVtcHR5KCkgY29uc3Qg
bm9leGNlcHQKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV90eXBlKQorICAgICAgICB7CisgICAg
ICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bGw6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgLy8gbnVsbCB2YWx1ZXMgYXJlIGVtcHR5CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YXJyYXk6CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gZGVsZWdhdGUgY2FsbCB0byBhcnJheV90Ojpl
bXB0eSgpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUuYXJyYXktPmVtcHR5KCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6b2JqZWN0OgorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIC8vIGRlbGVnYXRlIGNhbGwgdG8gb2JqZWN0X3Q6OmVt
cHR5KCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV92YWx1ZS5vYmplY3QtPmVtcHR5KCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgLy8gYWxsIG90aGVyIHR5cGVzIGFyZSBub25lbXB0eQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IC8qIQorICAgIEBicmllZiByZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMKKworICAgIFJl
dHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhIEpTT04gdmFsdWUuCisKKyAgICBAcmV0
dXJuIFRoZSByZXR1cm4gdmFsdWUgZGVwZW5kcyBvbiB0aGUgZGlmZmVyZW50IHR5cGVzIGFuZCBp
cworICAgICAgICAgICAgZGVmaW5lZCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgVmFsdWUgdHlw
ZSAgfCByZXR1cm4gdmFsdWUKKyAgICAgICAgICAgIC0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0t
LQorICAgICAgICAgICAgbnVsbCAgICAgICAgfCBgMGAKKyAgICAgICAgICAgIGJvb2xlYW4gICAg
IHwgYDFgCisgICAgICAgICAgICBzdHJpbmcgICAgICB8IGAxYAorICAgICAgICAgICAgbnVtYmVy
ICAgICAgfCBgMWAKKyAgICAgICAgICAgIG9iamVjdCAgICAgIHwgcmVzdWx0IG9mIGZ1bmN0aW9u
IG9iamVjdF90OjpzaXplKCkKKyAgICAgICAgICAgIGFycmF5ICAgICAgIHwgcmVzdWx0IG9mIGZ1
bmN0aW9uIGFycmF5X3Q6OnNpemUoKQorCisgICAgQG5vdGUgVGhpcyBmdW5jdGlvbiBkb2VzIG5v
dCByZXR1cm4gdGhlIGxlbmd0aCBvZiBhIHN0cmluZyBzdG9yZWQgYXMgSlNPTgorICAgIHZhbHVl
IC0gaXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBKU09OIHZhbHVlIHdo
aWNoIGlzIDEgaW4KKyAgICB0aGUgY2FzZSBvZiBhIHN0cmluZy4KKworICAgIEBjb21wbGV4aXR5
IENvbnN0YW50LCBhcyBsb25nIGFzIEByZWYgYXJyYXlfdCBhbmQgQHJlZiBvYmplY3RfdCBzYXRp
c2Z5CisgICAgdGhlIENvbnRhaW5lciBjb25jZXB0OyB0aGF0IGlzLCB0aGVpciBzaXplKCkgZnVu
Y3Rpb25zIGhhdmUgY29uc3RhbnQKKyAgICBjb21wbGV4aXR5LgorCisgICAgQHJlcXVpcmVtZW50
IFRoaXMgZnVuY3Rpb24gaGVscHMgYGJhc2ljX2pzb25gIHNhdGlzZnlpbmcgdGhlCisgICAgW0Nv
bnRhaW5lcl0oaHR0cDovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29uY2VwdC9Db250YWlu
ZXIpCisgICAgcmVxdWlyZW1lbnRzOgorICAgIC0gVGhlIGNvbXBsZXhpdHkgaXMgY29uc3RhbnQu
CisgICAgLSBIYXMgdGhlIHNlbWFudGljcyBvZiBgc3RkOjpkaXN0YW5jZShiZWdpbigpLCBlbmQo
KSlgLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29kZSBjYWxscyBgc2l6ZSgp
YCBvbiB0aGUgZGlmZmVyZW50IHZhbHVlCisgICAgdHlwZXMuLHNpemV9CisKKyAgICBAc2EgQHJl
ZiBlbXB0eSgpIC0tIGNoZWNrcyB3aGV0aGVyIHRoZSBjb250YWluZXIgaXMgZW1wdHkKKyAgICBA
c2EgQHJlZiBtYXhfc2l6ZSgpIC0tIHJldHVybnMgdGhlIG1heGltYWwgbnVtYmVyIG9mIGVsZW1l
bnRzCisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgc2l6ZV90eXBlIHNp
emUoKSBjb25zdCBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX3R5cGUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVsbDoKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAvLyBudWxsIHZhbHVlcyBhcmUgZW1wdHkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJh
eToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBkZWxlZ2F0ZSBjYWxsIHRvIGFy
cmF5X3Q6OnNpemUoKQorICAgICAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLmFycmF5LT5zaXpl
KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6b2JqZWN0Ogor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIGRlbGVnYXRlIGNhbGwgdG8gb2JqZWN0
X3Q6OnNpemUoKQorICAgICAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLm9iamVjdC0+c2l6ZSgp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIC8vIGFsbCBvdGhlciB0eXBlcyBoYXZlIHNpemUgMQorICAgICAgICAg
ICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
LyohCisgICAgQGJyaWVmIHJldHVybnMgdGhlIG1heGltdW0gcG9zc2libGUgbnVtYmVyIG9mIGVs
ZW1lbnRzCisKKyAgICBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyBhIEpT
T04gdmFsdWUgaXMgYWJsZSB0byBob2xkIGR1ZSB0bworICAgIHN5c3RlbSBvciBsaWJyYXJ5IGlt
cGxlbWVudGF0aW9uIGxpbWl0YXRpb25zLCBpLmUuIGBzdGQ6OmRpc3RhbmNlKGJlZ2luKCksCisg
ICAgZW5kKCkpYCBmb3IgdGhlIEpTT04gdmFsdWUuCisKKyAgICBAcmV0dXJuIFRoZSByZXR1cm4g
dmFsdWUgZGVwZW5kcyBvbiB0aGUgZGlmZmVyZW50IHR5cGVzIGFuZCBpcworICAgICAgICAgICAg
ZGVmaW5lZCBhcyBmb2xsb3dzOgorICAgICAgICAgICAgVmFsdWUgdHlwZSAgfCByZXR1cm4gdmFs
dWUKKyAgICAgICAgICAgIC0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAg
bnVsbCAgICAgICAgfCBgMGAgKHNhbWUgYXMgYHNpemUoKWApCisgICAgICAgICAgICBib29sZWFu
ICAgICB8IGAxYCAoc2FtZSBhcyBgc2l6ZSgpYCkKKyAgICAgICAgICAgIHN0cmluZyAgICAgIHwg
YDFgIChzYW1lIGFzIGBzaXplKClgKQorICAgICAgICAgICAgbnVtYmVyICAgICAgfCBgMWAgKHNh
bWUgYXMgYHNpemUoKWApCisgICAgICAgICAgICBvYmplY3QgICAgICB8IHJlc3VsdCBvZiBmdW5j
dGlvbiBgb2JqZWN0X3Q6Om1heF9zaXplKClgCisgICAgICAgICAgICBhcnJheSAgICAgICB8IHJl
c3VsdCBvZiBmdW5jdGlvbiBgYXJyYXlfdDo6bWF4X3NpemUoKWAKKworICAgIEBjb21wbGV4aXR5
IENvbnN0YW50LCBhcyBsb25nIGFzIEByZWYgYXJyYXlfdCBhbmQgQHJlZiBvYmplY3RfdCBzYXRp
c2Z5CisgICAgdGhlIENvbnRhaW5lciBjb25jZXB0OyB0aGF0IGlzLCB0aGVpciBgbWF4X3NpemUo
KWAgZnVuY3Rpb25zIGhhdmUgY29uc3RhbnQKKyAgICBjb21wbGV4aXR5LgorCisgICAgQHJlcXVp
cmVtZW50IFRoaXMgZnVuY3Rpb24gaGVscHMgYGJhc2ljX2pzb25gIHNhdGlzZnlpbmcgdGhlCisg
ICAgW0NvbnRhaW5lcl0oaHR0cDovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29uY2VwdC9D
b250YWluZXIpCisgICAgcmVxdWlyZW1lbnRzOgorICAgIC0gVGhlIGNvbXBsZXhpdHkgaXMgY29u
c3RhbnQuCisgICAgLSBIYXMgdGhlIHNlbWFudGljcyBvZiByZXR1cm5pbmcgYGIuc2l6ZSgpYCB3
aGVyZSBgYmAgaXMgdGhlIGxhcmdlc3QKKyAgICAgIHBvc3NpYmxlIEpTT04gdmFsdWUuCisKKyAg
ICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIGNhbGxzIGBtYXhfc2l6ZSgpYCBvbiB0
aGUgZGlmZmVyZW50IHZhbHVlCisgICAgdHlwZXMuIE5vdGUgdGhlIG91dHB1dCBpcyBpbXBsZW1l
bnRhdGlvbiBzcGVjaWZpYy4sbWF4X3NpemV9CisKKyAgICBAc2EgQHJlZiBzaXplKCkgLS0gcmV0
dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzCisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAor
ICAgICovCisgICAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3Qgbm9leGNlcHQKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAobV90eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIHZhbHVl
X3Q6OmFycmF5OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIGRlbGVnYXRlIGNh
bGwgdG8gYXJyYXlfdDo6bWF4X3NpemUoKQorICAgICAgICAgICAgICAgIHJldHVybiBtX3ZhbHVl
LmFycmF5LT5tYXhfc2l6ZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIHZh
bHVlX3Q6Om9iamVjdDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBkZWxlZ2F0
ZSBjYWxsIHRvIG9iamVjdF90OjptYXhfc2l6ZSgpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
dmFsdWUub2JqZWN0LT5tYXhfc2l6ZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIGFsbCBvdGhlciB0eXBl
cyBoYXZlIG1heF9zaXplKCkgPT0gc2l6ZSgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNpemUo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLyBAfQorCisKKyAg
ICAvLy8vLy8vLy8vLy8vLy8KKyAgICAvLyBtb2RpZmllcnMgLy8KKyAgICAvLy8vLy8vLy8vLy8v
Ly8KKworICAgIC8vLyBAbmFtZSBtb2RpZmllcnMKKyAgICAvLy8gQHsKKworICAgIC8qIQorICAg
IEBicmllZiBjbGVhcnMgdGhlIGNvbnRlbnRzCisKKyAgICBDbGVhcnMgdGhlIGNvbnRlbnQgb2Yg
YSBKU09OIHZhbHVlIGFuZCByZXNldHMgaXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUgYXMKKyAgICBp
ZiBAcmVmIGJhc2ljX2pzb24odmFsdWVfdCkgd291bGQgaGF2ZSBiZWVuIGNhbGxlZDoKKworICAg
IFZhbHVlIHR5cGUgIHwgaW5pdGlhbCB2YWx1ZQorICAgIC0tLS0tLS0tLS0tIHwgLS0tLS0tLS0t
LS0tLQorICAgIG51bGwgICAgICAgIHwgYG51bGxgCisgICAgYm9vbGVhbiAgICAgfCBgZmFsc2Vg
CisgICAgc3RyaW5nICAgICAgfCBgIiJgCisgICAgbnVtYmVyICAgICAgfCBgMGAKKyAgICBvYmpl
Y3QgICAgICB8IGB7fWAKKyAgICBhcnJheSAgICAgICB8IGBbXWAKKworICAgIEBub3RlIEZsb2F0
aW5nLXBvaW50IG51bWJlcnMgYXJlIHNldCB0byBgMC4wYCB3aGljaCB3aWxsIGJlIHNlcmlhbGl6
ZWQgdG8KKyAgICBgMGAuIFRoZSB2YWxlIHR5cGUgcmVtYWlucyBAcmVmIG51bWJlcl9mbG9hdF90
LgorCisgICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIHRoZSBzaXplIG9mIHRoZSBKU09OIHZhbHVl
LgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJlbG93IHNob3dzIHRoZSBlZmZlY3Qg
b2YgYGNsZWFyKClgIHRvIGRpZmZlcmVudAorICAgIEpTT04gdHlwZXMuLGNsZWFyfQorCisgICAg
QHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIHZvaWQgY2xlYXIoKSBub2V4Y2VwdAor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChtX3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNh
c2UgdmFsdWVfdDo6bnVtYmVyX2ludGVnZXI6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgbV92YWx1ZS5udW1iZXJfaW50ZWdlciA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVk
OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fdmFsdWUubnVtYmVyX3Vuc2lnbmVk
ID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfZmxvYXQ6CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgbV92YWx1ZS5udW1iZXJfZmxvYXQgPSAwLjA7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6Ym9vbGVhbjoKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLmJvb2xlYW4gPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2
YWx1ZV90OjpzdHJpbmc6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV92YWx1ZS5z
dHJpbmctPmNsZWFyKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YXJyYXk6CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbV92YWx1ZS5hcnJheS0+Y2xlYXIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbV92YWx1ZS5vYmplY3QtPmNsZWFyKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgYWRkIGFuIG9iamVjdCB0byBh
biBhcnJheQorCisgICAgQXBwZW5kcyB0aGUgZ2l2ZW4gZWxlbWVudCBAYSB2YWwgdG8gdGhlIGVu
ZCBvZiB0aGUgSlNPTiB2YWx1ZS4gSWYgdGhlCisgICAgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGEg
SlNPTiBudWxsIHZhbHVlLCBhbiBlbXB0eSBhcnJheSBpcyBjcmVhdGVkIGJlZm9yZQorICAgIGFw
cGVuZGluZyBAYSB2YWwuCisKKyAgICBAcGFyYW1baW5dIHZhbCB0aGUgdmFsdWUgdG8gYWRkIHRv
IHRoZSBKU09OIGFycmF5CisKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3Igd2hlbiBjYWxs
ZWQgb24gYSB0eXBlIG90aGVyIHRoYW4gSlNPTiBhcnJheSBvcgorICAgIG51bGw7IGV4YW1wbGU6
IGAiY2Fubm90IHVzZSBwdXNoX2JhY2soKSB3aXRoIG51bWJlciJgCisKKyAgICBAY29tcGxleGl0
eSBBbW9ydGl6ZWQgY29uc3RhbnQuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgc2hv
d3MgaG93IGBwdXNoX2JhY2soKWAgYW5kIGArPWAgY2FuIGJlIHVzZWQgdG8KKyAgICBhZGQgZWxl
bWVudHMgdG8gYSBKU09OIGFycmF5LiBOb3RlIGhvdyB0aGUgYG51bGxgIHZhbHVlIHdhcyBzaWxl
bnRseQorICAgIGNvbnZlcnRlZCB0byBhIEpTT04gYXJyYXkuLHB1c2hfYmFja30KKworICAgIEBz
aW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICB2b2lkIHB1c2hfYmFjayhiYXNpY19qc29u
JiYgdmFsKQorICAgIHsKKyAgICAgICAgLy8gcHVzaF9iYWNrIG9ubHkgd29ya3MgZm9yIG51bGwg
b2JqZWN0cyBvciBhcnJheXMKKyAgICAgICAgaWYgKG5vdChpc19udWxsKCkgb3IgaXNfYXJyYXko
KSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fu
bm90IHVzZSBwdXNoX2JhY2soKSB3aXRoICIgKyB0eXBlX25hbWUoKSk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyB0cmFuc2Zvcm0gbnVsbCBvYmplY3QgaW50byBhbiBhcnJheQorICAgICAgICBp
ZiAoaXNfbnVsbCgpKQorICAgICAgICB7CisgICAgICAgICAgICBtX3R5cGUgPSB2YWx1ZV90Ojph
cnJheTsKKyAgICAgICAgICAgIG1fdmFsdWUgPSB2YWx1ZV90OjphcnJheTsKKyAgICAgICAgICAg
IGFzc2VydF9pbnZhcmlhbnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGFkZCBlbGVtZW50
IHRvIGFycmF5IChtb3ZlIHNlbWFudGljcykKKyAgICAgICAgbV92YWx1ZS5hcnJheS0+cHVzaF9i
YWNrKHN0ZDo6bW92ZSh2YWwpKTsKKyAgICAgICAgLy8gaW52YWxpZGF0ZSBvYmplY3QKKyAgICAg
ICAgdmFsLm1fdHlwZSA9IHZhbHVlX3Q6Om51bGw7CisgICAgfQorCisgICAgLyohCisgICAgQGJy
aWVmIGFkZCBhbiBvYmplY3QgdG8gYW4gYXJyYXkKKyAgICBAY29weWRvYyBwdXNoX2JhY2soYmFz
aWNfanNvbiYmKQorICAgICovCisgICAgcmVmZXJlbmNlIG9wZXJhdG9yKz0oYmFzaWNfanNvbiYm
IHZhbCkKKyAgICB7CisgICAgICAgIHB1c2hfYmFjayhzdGQ6Om1vdmUodmFsKSk7CisgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgYWRkIGFuIG9iamVj
dCB0byBhbiBhcnJheQorICAgIEBjb3B5ZG9jIHB1c2hfYmFjayhiYXNpY19qc29uJiYpCisgICAg
Ki8KKyAgICB2b2lkIHB1c2hfYmFjayhjb25zdCBiYXNpY19qc29uJiB2YWwpCisgICAgeworICAg
ICAgICAvLyBwdXNoX2JhY2sgb25seSB3b3JrcyBmb3IgbnVsbCBvYmplY3RzIG9yIGFycmF5cwor
ICAgICAgICBpZiAobm90KGlzX251bGwoKSBvciBpc19hcnJheSgpKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJjYW5ub3QgdXNlIHB1c2hfYmFjaygp
IHdpdGggIiArIHR5cGVfbmFtZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHRyYW5zZm9y
bSBudWxsIG9iamVjdCBpbnRvIGFuIGFycmF5CisgICAgICAgIGlmIChpc19udWxsKCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1fdHlwZSA9IHZhbHVlX3Q6OmFycmF5OworICAgICAgICAgICAg
bV92YWx1ZSA9IHZhbHVlX3Q6OmFycmF5OworICAgICAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgp
OworICAgICAgICB9CisKKyAgICAgICAgLy8gYWRkIGVsZW1lbnQgdG8gYXJyYXkKKyAgICAgICAg
bV92YWx1ZS5hcnJheS0+cHVzaF9iYWNrKHZhbCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJy
aWVmIGFkZCBhbiBvYmplY3QgdG8gYW4gYXJyYXkKKyAgICBAY29weWRvYyBwdXNoX2JhY2soYmFz
aWNfanNvbiYmKQorICAgICovCisgICAgcmVmZXJlbmNlIG9wZXJhdG9yKz0oY29uc3QgYmFzaWNf
anNvbiYgdmFsKQorICAgIHsKKyAgICAgICAgcHVzaF9iYWNrKHZhbCk7CisgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgYWRkIGFuIG9iamVjdCB0byBh
biBvYmplY3QKKworICAgIEluc2VydHMgdGhlIGdpdmVuIGVsZW1lbnQgQGEgdmFsIHRvIHRoZSBK
U09OIG9iamVjdC4gSWYgdGhlIGZ1bmN0aW9uIGlzCisgICAgY2FsbGVkIG9uIGEgSlNPTiBudWxs
IHZhbHVlLCBhbiBlbXB0eSBvYmplY3QgaXMgY3JlYXRlZCBiZWZvcmUgaW5zZXJ0aW5nCisgICAg
QGEgdmFsLgorCisgICAgQHBhcmFtW2luXSB2YWwgdGhlIHZhbHVlIHRvIGFkZCB0byB0aGUgSlNP
TiBvYmplY3QKKworICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciB3aGVuIGNhbGxlZCBvbiBh
IHR5cGUgb3RoZXIgdGhhbiBKU09OIG9iamVjdCBvcgorICAgIG51bGw7IGV4YW1wbGU6IGAiY2Fu
bm90IHVzZSBwdXNoX2JhY2soKSB3aXRoIG51bWJlciJgCisKKyAgICBAY29tcGxleGl0eSBMb2dh
cml0aG1pYyBpbiB0aGUgc2l6ZSBvZiB0aGUgY29udGFpbmVyLCBPKGxvZyhgc2l6ZSgpYCkpLgor
CisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIHNob3dzIGhvdyBgcHVzaF9iYWNrKClgIGFu
ZCBgKz1gIGNhbiBiZSB1c2VkIHRvCisgICAgYWRkIGVsZW1lbnRzIHRvIGEgSlNPTiBvYmplY3Qu
IE5vdGUgaG93IHRoZSBgbnVsbGAgdmFsdWUgd2FzIHNpbGVudGx5CisgICAgY29udmVydGVkIHRv
IGEgSlNPTiBvYmplY3QuLHB1c2hfYmFja19fb2JqZWN0X3RfX3ZhbHVlfQorCisgICAgQHNpbmNl
IHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIHZvaWQgcHVzaF9iYWNrKGNvbnN0IHR5cGVuYW1l
IG9iamVjdF90Ojp2YWx1ZV90eXBlJiB2YWwpCisgICAgeworICAgICAgICAvLyBwdXNoX2JhY2sg
b25seSB3b3JrcyBmb3IgbnVsbCBvYmplY3RzIG9yIG9iamVjdHMKKyAgICAgICAgaWYgKG5vdChp
c19udWxsKCkgb3IgaXNfb2JqZWN0KCkpKQorICAgICAgICB7CisgICAgICAgICAgICBUaHJvdzxz
dGQ6OmRvbWFpbl9lcnJvcj4oImNhbm5vdCB1c2UgcHVzaF9iYWNrKCkgd2l0aCAiICsgdHlwZV9u
YW1lKCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gdHJhbnNmb3JtIG51bGwgb2JqZWN0IGlu
dG8gYW4gb2JqZWN0CisgICAgICAgIGlmIChpc19udWxsKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1fdHlwZSA9IHZhbHVlX3Q6Om9iamVjdDsKKyAgICAgICAgICAgIG1fdmFsdWUgPSB2YWx1
ZV90OjpvYmplY3Q7CisgICAgICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBhZGQgZWxlbWVudCB0byBhcnJheQorICAgICAgICBtX3ZhbHVlLm9iamVj
dC0+aW5zZXJ0KHZhbCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGFkZCBhbiBvYmpl
Y3QgdG8gYW4gb2JqZWN0CisgICAgQGNvcHlkb2MgcHVzaF9iYWNrKGNvbnN0IHR5cGVuYW1lIG9i
amVjdF90Ojp2YWx1ZV90eXBlJikKKyAgICAqLworICAgIHJlZmVyZW5jZSBvcGVyYXRvcis9KGNv
bnN0IHR5cGVuYW1lIG9iamVjdF90Ojp2YWx1ZV90eXBlJiB2YWwpCisgICAgeworICAgICAgICBw
dXNoX2JhY2sodmFsKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIC8qIQor
ICAgIEBicmllZiBhZGQgYW4gb2JqZWN0IHRvIGFuIG9iamVjdAorCisgICAgVGhpcyBmdW5jdGlv
biBhbGxvd3MgdG8gdXNlIGBwdXNoX2JhY2tgIHdpdGggYW4gaW5pdGlhbGl6ZXIgbGlzdC4gSW4g
Y2FzZQorCisgICAgMS4gdGhlIGN1cnJlbnQgdmFsdWUgaXMgYW4gb2JqZWN0LAorICAgIDIuIHRo
ZSBpbml0aWFsaXplciBsaXN0IEBhIGluaXQgY29udGFpbnMgb25seSB0d28gZWxlbWVudHMsIGFu
ZAorICAgIDMuIHRoZSBmaXJzdCBlbGVtZW50IG9mIEBhIGluaXQgaXMgYSBzdHJpbmcsCisKKyAg
ICBAYSBpbml0IGlzIGNvbnZlcnRlZCBpbnRvIGFuIG9iamVjdCBlbGVtZW50IGFuZCBhZGRlZCB1
c2luZworICAgIEByZWYgcHVzaF9iYWNrKGNvbnN0IHR5cGVuYW1lIG9iamVjdF90Ojp2YWx1ZV90
eXBlJikuIE90aGVyd2lzZSwgQGEgaW5pdAorICAgIGlzIGNvbnZlcnRlZCB0byBhIEpTT04gdmFs
dWUgYW5kIGFkZGVkIHVzaW5nIEByZWYgcHVzaF9iYWNrKGJhc2ljX2pzb24mJikuCisKKyAgICBA
cGFyYW0gaW5pdCAgYW4gaW5pdGlhbGl6ZXIgbGlzdAorCisgICAgQGNvbXBsZXhpdHkgTGluZWFy
IGluIHRoZSBzaXplIG9mIHRoZSBpbml0aWFsaXplciBsaXN0IEBhIGluaXQuCisKKyAgICBAbm90
ZSBUaGlzIGZ1bmN0aW9uIGlzIHJlcXVpcmVkIHRvIHJlc29sdmUgYW4gYW1iaWd1b3VzIG92ZXJs
b2FkIGVycm9yLAorICAgICAgICAgIGJlY2F1c2UgcGFpcnMgbGlrZSBgeyJrZXkiLCAidmFsdWUi
fWAgY2FuIGJlIGJvdGggaW50ZXJwcmV0ZWQgYXMKKyAgICAgICAgICBgb2JqZWN0X3Q6OnZhbHVl
X3R5cGVgIG9yIGBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8YmFzaWNfanNvbj5gLCBzZWUKKyAgICAg
ICAgICBodHRwczovL2dpdGh1Yi5jb20vbmxvaG1hbm4vanNvbi9pc3N1ZXMvMjM1IGZvciBtb3Jl
IGluZm9ybWF0aW9uLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIHNob3dzIGhvdyBp
bml0aWFsaXplciBsaXN0cyBhcmUgdHJlYXRlZCBhcworICAgIG9iamVjdHMgd2hlbiBwb3NzaWJs
ZS4scHVzaF9iYWNrX19pbml0aWFsaXplcl9saXN0fQorICAgICovCisgICAgdm9pZCBwdXNoX2Jh
Y2soc3RkOjppbml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+IGluaXQpCisgICAgeworICAgICAg
ICBpZiAoaXNfb2JqZWN0KCkgYW5kIGluaXQuc2l6ZSgpID09IDIgYW5kIGluaXQuYmVnaW4oKS0+
aXNfc3RyaW5nKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IHN0cmluZ190IGtleSA9
ICppbml0LmJlZ2luKCk7CisgICAgICAgICAgICBwdXNoX2JhY2sodHlwZW5hbWUgb2JqZWN0X3Q6
OnZhbHVlX3R5cGUoa2V5LCAqKGluaXQuYmVnaW4oKSArIDEpKSk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwdXNoX2JhY2soYmFzaWNfanNvbihpbml0
KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgYWRkIGFuIG9iamVj
dCB0byBhbiBvYmplY3QKKyAgICBAY29weWRvYyBwdXNoX2JhY2soc3RkOjppbml0aWFsaXplcl9s
aXN0PGJhc2ljX2pzb24+KQorICAgICovCisgICAgcmVmZXJlbmNlIG9wZXJhdG9yKz0oc3RkOjpp
bml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+IGluaXQpCisgICAgeworICAgICAgICBwdXNoX2Jh
Y2soaW5pdCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICAvKiEKKyAgICBA
YnJpZWYgaW5zZXJ0cyBlbGVtZW50CisKKyAgICBJbnNlcnRzIGVsZW1lbnQgQGEgdmFsIGJlZm9y
ZSBpdGVyYXRvciBAYSBwb3MuCisKKyAgICBAcGFyYW1baW5dIHBvcyBpdGVyYXRvciBiZWZvcmUg
d2hpY2ggdGhlIGNvbnRlbnQgd2lsbCBiZSBpbnNlcnRlZDsgbWF5IGJlCisgICAgdGhlIGVuZCgp
IGl0ZXJhdG9yCisgICAgQHBhcmFtW2luXSB2YWwgZWxlbWVudCB0byBpbnNlcnQKKyAgICBAcmV0
dXJuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBpbnNlcnRlZCBAYSB2YWwuCisKKyAgICBAdGhy
b3cgc3RkOjpkb21haW5fZXJyb3IgaWYgY2FsbGVkIG9uIEpTT04gdmFsdWVzIG90aGVyIHRoYW4g
YXJyYXlzOworICAgIGV4YW1wbGU6IGAiY2Fubm90IHVzZSBpbnNlcnQoKSB3aXRoIHN0cmluZyJg
CisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIEBhIHBvcyBpcyBub3QgYW4gaXRlcmF0
b3Igb2YgKnRoaXM7IGV4YW1wbGU6CisgICAgYCJpdGVyYXRvciBkb2VzIG5vdCBmaXQgY3VycmVu
dCB2YWx1ZSJgCisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudCBwbHVzIGxpbmVhciBpbiB0aGUg
ZGlzdGFuY2UgYmV0d2VlbiBwb3MgYW5kIGVuZCBvZiB0aGUKKyAgICBjb250YWluZXIuCisKKyAg
ICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgc2hvd3MgaG93IGBpbnNlcnQoKWAgaXMgdXNlZC4s
aW5zZXJ0fQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGl0ZXJhdG9y
IGluc2VydChjb25zdF9pdGVyYXRvciBwb3MsIGNvbnN0IGJhc2ljX2pzb24mIHZhbCkKKyAgICB7
CisgICAgICAgIC8vIGluc2VydCBvbmx5IHdvcmtzIGZvciBhcnJheXMKKyAgICAgICAgaWYgKGlz
X2FycmF5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGNoZWNrIGlmIGl0ZXJhdG9yIHBv
cyBmaXRzIHRvIHRoaXMgSlNPTiB2YWx1ZQorICAgICAgICAgICAgaWYgKHBvcy5tX29iamVjdCAh
PSB0aGlzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWlu
X2Vycm9yPigiaXRlcmF0b3IgZG9lcyBub3QgZml0IGN1cnJlbnQgdmFsdWUiKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gaW5zZXJ0IHRvIGFycmF5IGFuZCByZXR1cm4gaXRlcmF0
b3IKKyAgICAgICAgICAgIGl0ZXJhdG9yIHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIHJlc3Vs
dC5tX2l0LmFycmF5X2l0ZXJhdG9yID0gbV92YWx1ZS5hcnJheS0+aW5zZXJ0KHBvcy5tX2l0LmFy
cmF5X2l0ZXJhdG9yLCB2YWwpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWlu
X2Vycm9yPigiY2Fubm90IHVzZSBpbnNlcnQoKSB3aXRoICIgKyB0eXBlX25hbWUoKSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgaW5zZXJ0cyBlbGVtZW50CisgICAg
QGNvcHlkb2MgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yLCBjb25zdCBiYXNpY19qc29uJikKKyAgICAq
LworICAgIGl0ZXJhdG9yIGluc2VydChjb25zdF9pdGVyYXRvciBwb3MsIGJhc2ljX2pzb24mJiB2
YWwpCisgICAgeworICAgICAgICByZXR1cm4gaW5zZXJ0KHBvcywgdmFsKTsKKyAgICB9CisKKyAg
ICAvKiEKKyAgICBAYnJpZWYgaW5zZXJ0cyBlbGVtZW50cworCisgICAgSW5zZXJ0cyBAYSBjbnQg
Y29waWVzIG9mIEBhIHZhbCBiZWZvcmUgaXRlcmF0b3IgQGEgcG9zLgorCisgICAgQHBhcmFtW2lu
XSBwb3MgaXRlcmF0b3IgYmVmb3JlIHdoaWNoIHRoZSBjb250ZW50IHdpbGwgYmUgaW5zZXJ0ZWQ7
IG1heSBiZQorICAgIHRoZSBlbmQoKSBpdGVyYXRvcgorICAgIEBwYXJhbVtpbl0gY250IG51bWJl
ciBvZiBjb3BpZXMgb2YgQGEgdmFsIHRvIGluc2VydAorICAgIEBwYXJhbVtpbl0gdmFsIGVsZW1l
bnQgdG8gaW5zZXJ0CisgICAgQHJldHVybiBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZmlyc3Qg
ZWxlbWVudCBpbnNlcnRlZCwgb3IgQGEgcG9zIGlmCisgICAgYGNudD09MGAKKworICAgIEB0aHJv
dyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBjYWxsZWQgb24gSlNPTiB2YWx1ZXMgb3RoZXIgdGhhbiBh
cnJheXM7CisgICAgZXhhbXBsZTogYCJjYW5ub3QgdXNlIGluc2VydCgpIHdpdGggc3RyaW5nImAK
KyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgQGEgcG9zIGlzIG5vdCBhbiBpdGVyYXRv
ciBvZiAqdGhpczsgZXhhbXBsZToKKyAgICBgIml0ZXJhdG9yIGRvZXMgbm90IGZpdCBjdXJyZW50
IHZhbHVlImAKKworICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiBAYSBjbnQgcGx1cyBsaW5lYXIg
aW4gdGhlIGRpc3RhbmNlIGJldHdlZW4gQGEgcG9zCisgICAgYW5kIGVuZCBvZiB0aGUgY29udGFp
bmVyLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIHNob3dzIGhvdyBgaW5zZXJ0KClg
IGlzIHVzZWQuLGluc2VydF9fY291bnR9CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAg
ICovCisgICAgaXRlcmF0b3IgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIHBvcywgc2l6ZV90eXBlIGNu
dCwgY29uc3QgYmFzaWNfanNvbiYgdmFsKQorICAgIHsKKyAgICAgICAgLy8gaW5zZXJ0IG9ubHkg
d29ya3MgZm9yIGFycmF5cworICAgICAgICBpZiAoaXNfYXJyYXkoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gY2hlY2sgaWYgaXRlcmF0b3IgcG9zIGZpdHMgdG8gdGhpcyBKU09OIHZhbHVl
CisgICAgICAgICAgICBpZiAocG9zLm1fb2JqZWN0ICE9IHRoaXMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJpdGVyYXRvciBkb2VzIG5v
dCBmaXQgY3VycmVudCB2YWx1ZSIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBp
bnNlcnQgdG8gYXJyYXkgYW5kIHJldHVybiBpdGVyYXRvcgorICAgICAgICAgICAgaXRlcmF0b3Ig
cmVzdWx0KHRoaXMpOworICAgICAgICAgICAgcmVzdWx0Lm1faXQuYXJyYXlfaXRlcmF0b3IgPSBt
X3ZhbHVlLmFycmF5LT5pbnNlcnQocG9zLm1faXQuYXJyYXlfaXRlcmF0b3IsIGNudCwgdmFsKTsK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oImNhbm5vdCB1c2Ug
aW5zZXJ0KCkgd2l0aCAiICsgdHlwZV9uYW1lKCkpOworICAgICAgICB9CisgICAgfQorCisgICAg
LyohCisgICAgQGJyaWVmIGluc2VydHMgZWxlbWVudHMKKworICAgIEluc2VydHMgZWxlbWVudHMg
ZnJvbSByYW5nZSBgW2ZpcnN0LCBsYXN0KWAgYmVmb3JlIGl0ZXJhdG9yIEBhIHBvcy4KKworICAg
IEBwYXJhbVtpbl0gcG9zIGl0ZXJhdG9yIGJlZm9yZSB3aGljaCB0aGUgY29udGVudCB3aWxsIGJl
IGluc2VydGVkOyBtYXkgYmUKKyAgICB0aGUgZW5kKCkgaXRlcmF0b3IKKyAgICBAcGFyYW1baW5d
IGZpcnN0IGJlZ2luIG9mIHRoZSByYW5nZSBvZiBlbGVtZW50cyB0byBpbnNlcnQKKyAgICBAcGFy
YW1baW5dIGxhc3QgZW5kIG9mIHRoZSByYW5nZSBvZiBlbGVtZW50cyB0byBpbnNlcnQKKworICAg
IEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBjYWxsZWQgb24gSlNPTiB2YWx1ZXMgb3RoZXIg
dGhhbiBhcnJheXM7CisgICAgZXhhbXBsZTogYCJjYW5ub3QgdXNlIGluc2VydCgpIHdpdGggc3Ry
aW5nImAKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgQGEgcG9zIGlzIG5vdCBhbiBp
dGVyYXRvciBvZiAqdGhpczsgZXhhbXBsZToKKyAgICBgIml0ZXJhdG9yIGRvZXMgbm90IGZpdCBj
dXJyZW50IHZhbHVlImAKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgQGEgZmlyc3Qg
YW5kIEBhIGxhc3QgZG8gbm90IGJlbG9uZyB0byB0aGUgc2FtZQorICAgIEpTT04gdmFsdWU7IGV4
YW1wbGU6IGAiaXRlcmF0b3JzIGRvIG5vdCBmaXQiYAorICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9l
cnJvciBpZiBAYSBmaXJzdCBvciBAYSBsYXN0IGFyZSBpdGVyYXRvcnMgaW50bworICAgIGNvbnRh
aW5lciBmb3Igd2hpY2ggaW5zZXJ0IGlzIGNhbGxlZDsgZXhhbXBsZTogYCJwYXNzZWQgaXRlcmF0
b3JzIG1heSBub3QKKyAgICBiZWxvbmcgdG8gY29udGFpbmVyImAKKworICAgIEByZXR1cm4gaXRl
cmF0b3IgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IGVsZW1lbnQgaW5zZXJ0ZWQsIG9yIEBhIHBvcyBp
ZgorICAgIGBmaXJzdD09bGFzdGAKKworICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiBgc3RkOjpk
aXN0YW5jZShmaXJzdCwgbGFzdClgIHBsdXMgbGluZWFyIGluIHRoZQorICAgIGRpc3RhbmNlIGJl
dHdlZW4gQGEgcG9zIGFuZCBlbmQgb2YgdGhlIGNvbnRhaW5lci4KKworICAgIEBsaXZlZXhhbXBs
ZXtUaGUgZXhhbXBsZSBzaG93cyBob3cgYGluc2VydCgpYCBpcyB1c2VkLixpbnNlcnRfX3Jhbmdl
fQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGl0ZXJhdG9yIGluc2Vy
dChjb25zdF9pdGVyYXRvciBwb3MsIGNvbnN0X2l0ZXJhdG9yIGZpcnN0LCBjb25zdF9pdGVyYXRv
ciBsYXN0KQorICAgIHsKKyAgICAgICAgLy8gaW5zZXJ0IG9ubHkgd29ya3MgZm9yIGFycmF5cwor
ICAgICAgICBpZiAobm90IGlzX2FycmF5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93
PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fubm90IHVzZSBpbnNlcnQoKSB3aXRoICIgKyB0eXBlX25h
bWUoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBjaGVjayBpZiBpdGVyYXRvciBwb3MgZml0
cyB0byB0aGlzIEpTT04gdmFsdWUKKyAgICAgICAgaWYgKHBvcy5tX29iamVjdCAhPSB0aGlzKQor
ICAgICAgICB7CisgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oIml0ZXJhdG9y
IGRvZXMgbm90IGZpdCBjdXJyZW50IHZhbHVlIik7CisgICAgICAgIH0KKworICAgICAgICAvLyBj
aGVjayBpZiByYW5nZSBpdGVyYXRvcnMgYmVsb25nIHRvIHRoZSBzYW1lIEpTT04gb2JqZWN0Cisg
ICAgICAgIGlmIChmaXJzdC5tX29iamVjdCAhPSBsYXN0Lm1fb2JqZWN0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oIml0ZXJhdG9ycyBkbyBub3QgZml0
Iik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmlyc3QubV9vYmplY3QgPT0gdGhpcyBvciBs
YXN0Lm1fb2JqZWN0ID09IHRoaXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6
ZG9tYWluX2Vycm9yPigicGFzc2VkIGl0ZXJhdG9ycyBtYXkgbm90IGJlbG9uZyB0byBjb250YWlu
ZXIiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGluc2VydCB0byBhcnJheSBhbmQgcmV0dXJu
IGl0ZXJhdG9yCisgICAgICAgIGl0ZXJhdG9yIHJlc3VsdCh0aGlzKTsKKyAgICAgICAgcmVzdWx0
Lm1faXQuYXJyYXlfaXRlcmF0b3IgPSBtX3ZhbHVlLmFycmF5LT5pbnNlcnQoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcy5tX2l0LmFycmF5X2l0ZXJhdG9yLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdC5tX2l0LmFycmF5
X2l0ZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0
Lm1faXQuYXJyYXlfaXRlcmF0b3IpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIC8qIQorICAgIEBicmllZiBpbnNlcnRzIGVsZW1lbnRzCisKKyAgICBJbnNlcnRzIGVsZW1l
bnRzIGZyb20gaW5pdGlhbGl6ZXIgbGlzdCBAYSBpbGlzdCBiZWZvcmUgaXRlcmF0b3IgQGEgcG9z
LgorCisgICAgQHBhcmFtW2luXSBwb3MgaXRlcmF0b3IgYmVmb3JlIHdoaWNoIHRoZSBjb250ZW50
IHdpbGwgYmUgaW5zZXJ0ZWQ7IG1heSBiZQorICAgIHRoZSBlbmQoKSBpdGVyYXRvcgorICAgIEBw
YXJhbVtpbl0gaWxpc3QgaW5pdGlhbGl6ZXIgbGlzdCB0byBpbnNlcnQgdGhlIHZhbHVlcyBmcm9t
CisKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgY2FsbGVkIG9uIEpTT04gdmFsdWVz
IG90aGVyIHRoYW4gYXJyYXlzOworICAgIGV4YW1wbGU6IGAiY2Fubm90IHVzZSBpbnNlcnQoKSB3
aXRoIHN0cmluZyJgCisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIEBhIHBvcyBpcyBu
b3QgYW4gaXRlcmF0b3Igb2YgKnRoaXM7IGV4YW1wbGU6CisgICAgYCJpdGVyYXRvciBkb2VzIG5v
dCBmaXQgY3VycmVudCB2YWx1ZSJgCisKKyAgICBAcmV0dXJuIGl0ZXJhdG9yIHBvaW50aW5nIHRv
IHRoZSBmaXJzdCBlbGVtZW50IGluc2VydGVkLCBvciBAYSBwb3MgaWYKKyAgICBgaWxpc3RgIGlz
IGVtcHR5CisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gYGlsaXN0LnNpemUoKWAgcGx1cyBs
aW5lYXIgaW4gdGhlIGRpc3RhbmNlIGJldHdlZW4KKyAgICBAYSBwb3MgYW5kIGVuZCBvZiB0aGUg
Y29udGFpbmVyLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIHNob3dzIGhvdyBgaW5z
ZXJ0KClgIGlzIHVzZWQuLGluc2VydF9faWxpc3R9CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAu
MAorICAgICovCisgICAgaXRlcmF0b3IgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIHBvcywgc3RkOjpp
bml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+IGlsaXN0KQorICAgIHsKKyAgICAgICAgLy8gaW5z
ZXJ0IG9ubHkgd29ya3MgZm9yIGFycmF5cworICAgICAgICBpZiAobm90IGlzX2FycmF5KCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fubm90IHVz
ZSBpbnNlcnQoKSB3aXRoICIgKyB0eXBlX25hbWUoKSk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBjaGVjayBpZiBpdGVyYXRvciBwb3MgZml0cyB0byB0aGlzIEpTT04gdmFsdWUKKyAgICAgICAg
aWYgKHBvcy5tX29iamVjdCAhPSB0aGlzKQorICAgICAgICB7CisgICAgICAgICAgICBUaHJvdzxz
dGQ6OmRvbWFpbl9lcnJvcj4oIml0ZXJhdG9yIGRvZXMgbm90IGZpdCBjdXJyZW50IHZhbHVlIik7
CisgICAgICAgIH0KKworICAgICAgICAvLyBpbnNlcnQgdG8gYXJyYXkgYW5kIHJldHVybiBpdGVy
YXRvcgorICAgICAgICBpdGVyYXRvciByZXN1bHQodGhpcyk7CisgICAgICAgIHJlc3VsdC5tX2l0
LmFycmF5X2l0ZXJhdG9yID0gbV92YWx1ZS5hcnJheS0+aW5zZXJ0KHBvcy5tX2l0LmFycmF5X2l0
ZXJhdG9yLCBpbGlzdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgLyoh
CisgICAgQGJyaWVmIGV4Y2hhbmdlcyB0aGUgdmFsdWVzCisKKyAgICBFeGNoYW5nZXMgdGhlIGNv
bnRlbnRzIG9mIHRoZSBKU09OIHZhbHVlIHdpdGggdGhvc2Ugb2YgQGEgb3RoZXIuIERvZXMgbm90
CisgICAgaW52b2tlIGFueSBtb3ZlLCBjb3B5LCBvciBzd2FwIG9wZXJhdGlvbnMgb24gaW5kaXZp
ZHVhbCBlbGVtZW50cy4gQWxsCisgICAgaXRlcmF0b3JzIGFuZCByZWZlcmVuY2VzIHJlbWFpbiB2
YWxpZC4gVGhlIHBhc3QtdGhlLWVuZCBpdGVyYXRvciBpcworICAgIGludmFsaWRhdGVkLgorCisg
ICAgQHBhcmFtW2luLG91dF0gb3RoZXIgSlNPTiB2YWx1ZSB0byBleGNoYW5nZSB0aGUgY29udGVu
dHMgd2l0aAorCisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAbGl2ZWV4YW1wbGV7
VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93IEpTT04gdmFsdWVzIGNhbiBiZSBzd2FwcGVkIHdp
dGgKKyAgICBgc3dhcCgpYC4sc3dhcF9fcmVmZXJlbmNlfQorCisgICAgQHNpbmNlIHZlcnNpb24g
MS4wLjAKKyAgICAqLworICAgIHZvaWQgc3dhcChyZWZlcmVuY2Ugb3RoZXIpIG5vZXhjZXB0ICgK
KyAgICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTx2YWx1ZV90Pjo6dmFs
dWUgYW5kCisgICAgICAgIHN0ZDo6aXNfbm90aHJvd19tb3ZlX2Fzc2lnbmFibGU8dmFsdWVfdD46
OnZhbHVlIGFuZAorICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPGpz
b25fdmFsdWU+Ojp2YWx1ZSBhbmQKKyAgICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfYXNzaWdu
YWJsZTxqc29uX3ZhbHVlPjo6dmFsdWUKKyAgICApCisgICAgeworICAgICAgICBzdGQ6OnN3YXAo
bV90eXBlLCBvdGhlci5tX3R5cGUpOworICAgICAgICBzdGQ6OnN3YXAobV92YWx1ZSwgb3RoZXIu
bV92YWx1ZSk7CisgICAgICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKKyAgICB9CisKKyAgICAvKiEK
KyAgICBAYnJpZWYgZXhjaGFuZ2VzIHRoZSB2YWx1ZXMKKworICAgIEV4Y2hhbmdlcyB0aGUgY29u
dGVudHMgb2YgYSBKU09OIGFycmF5IHdpdGggdGhvc2Ugb2YgQGEgb3RoZXIuIERvZXMgbm90Cisg
ICAgaW52b2tlIGFueSBtb3ZlLCBjb3B5LCBvciBzd2FwIG9wZXJhdGlvbnMgb24gaW5kaXZpZHVh
bCBlbGVtZW50cy4gQWxsCisgICAgaXRlcmF0b3JzIGFuZCByZWZlcmVuY2VzIHJlbWFpbiB2YWxp
ZC4gVGhlIHBhc3QtdGhlLWVuZCBpdGVyYXRvciBpcworICAgIGludmFsaWRhdGVkLgorCisgICAg
QHBhcmFtW2luLG91dF0gb3RoZXIgYXJyYXkgdG8gZXhjaGFuZ2UgdGhlIGNvbnRlbnRzIHdpdGgK
KworICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciB3aGVuIEpTT04gdmFsdWUgaXMgbm90IGFu
IGFycmF5OyBleGFtcGxlOiBgImNhbm5vdAorICAgIHVzZSBzd2FwKCkgd2l0aCBzdHJpbmciYAor
CisgICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1w
bGUgYmVsb3cgc2hvd3MgaG93IGFycmF5cyBjYW4gYmUgc3dhcHBlZCB3aXRoCisgICAgYHN3YXAo
KWAuLHN3YXBfX2FycmF5X3R9CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisg
ICAgdm9pZCBzd2FwKGFycmF5X3QmIG90aGVyKQorICAgIHsKKyAgICAgICAgLy8gc3dhcCBvbmx5
IHdvcmtzIGZvciBhcnJheXMKKyAgICAgICAgaWYgKGlzX2FycmF5KCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN0ZDo6c3dhcCgqKG1fdmFsdWUuYXJyYXkpLCBvdGhlcik7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9l
cnJvcj4oImNhbm5vdCB1c2Ugc3dhcCgpIHdpdGggIiArIHR5cGVfbmFtZSgpKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBleGNoYW5nZXMgdGhlIHZhbHVlcworCisg
ICAgRXhjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBhIEpTT04gb2JqZWN0IHdpdGggdGhvc2Ugb2Yg
QGEgb3RoZXIuIERvZXMgbm90CisgICAgaW52b2tlIGFueSBtb3ZlLCBjb3B5LCBvciBzd2FwIG9w
ZXJhdGlvbnMgb24gaW5kaXZpZHVhbCBlbGVtZW50cy4gQWxsCisgICAgaXRlcmF0b3JzIGFuZCBy
ZWZlcmVuY2VzIHJlbWFpbiB2YWxpZC4gVGhlIHBhc3QtdGhlLWVuZCBpdGVyYXRvciBpcworICAg
IGludmFsaWRhdGVkLgorCisgICAgQHBhcmFtW2luLG91dF0gb3RoZXIgb2JqZWN0IHRvIGV4Y2hh
bmdlIHRoZSBjb250ZW50cyB3aXRoCisKKyAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3Igd2hl
biBKU09OIHZhbHVlIGlzIG5vdCBhbiBvYmplY3Q7IGV4YW1wbGU6CisgICAgYCJjYW5ub3QgdXNl
IHN3YXAoKSB3aXRoIHN0cmluZyJgCisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudC4KKworICAg
IEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyBob3cgb2JqZWN0cyBjYW4gYmUg
c3dhcHBlZCB3aXRoCisgICAgYHN3YXAoKWAuLHN3YXBfX29iamVjdF90fQorCisgICAgQHNpbmNl
IHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIHZvaWQgc3dhcChvYmplY3RfdCYgb3RoZXIpCisg
ICAgeworICAgICAgICAvLyBzd2FwIG9ubHkgd29ya3MgZm9yIG9iamVjdHMKKyAgICAgICAgaWYg
KGlzX29iamVjdCgpKQorICAgICAgICB7CisgICAgICAgICAgICBzdGQ6OnN3YXAoKihtX3ZhbHVl
Lm9iamVjdCksIG90aGVyKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fubm90IHVzZSBzd2FwKCkgd2l0
aCAiICsgdHlwZV9uYW1lKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLyohCisgICAgQGJy
aWVmIGV4Y2hhbmdlcyB0aGUgdmFsdWVzCisKKyAgICBFeGNoYW5nZXMgdGhlIGNvbnRlbnRzIG9m
IGEgSlNPTiBzdHJpbmcgd2l0aCB0aG9zZSBvZiBAYSBvdGhlci4gRG9lcyBub3QKKyAgICBpbnZv
a2UgYW55IG1vdmUsIGNvcHksIG9yIHN3YXAgb3BlcmF0aW9ucyBvbiBpbmRpdmlkdWFsIGVsZW1l
bnRzLiBBbGwKKyAgICBpdGVyYXRvcnMgYW5kIHJlZmVyZW5jZXMgcmVtYWluIHZhbGlkLiBUaGUg
cGFzdC10aGUtZW5kIGl0ZXJhdG9yIGlzCisgICAgaW52YWxpZGF0ZWQuCisKKyAgICBAcGFyYW1b
aW4sb3V0XSBvdGhlciBzdHJpbmcgdG8gZXhjaGFuZ2UgdGhlIGNvbnRlbnRzIHdpdGgKKworICAg
IEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciB3aGVuIEpTT04gdmFsdWUgaXMgbm90IGEgc3RyaW5n
OyBleGFtcGxlOiBgImNhbm5vdAorICAgIHVzZSBzd2FwKCkgd2l0aCBib29sZWFuImAKKworICAg
IEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJl
bG93IHNob3dzIGhvdyBzdHJpbmdzIGNhbiBiZSBzd2FwcGVkIHdpdGgKKyAgICBgc3dhcCgpYC4s
c3dhcF9fc3RyaW5nX3R9CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAg
dm9pZCBzd2FwKHN0cmluZ190JiBvdGhlcikKKyAgICB7CisgICAgICAgIC8vIHN3YXAgb25seSB3
b3JrcyBmb3Igc3RyaW5ncworICAgICAgICBpZiAoaXNfc3RyaW5nKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN0ZDo6c3dhcCgqKG1fdmFsdWUuc3RyaW5nKSwgb3RoZXIpOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5f
ZXJyb3I+KCJjYW5ub3QgdXNlIHN3YXAoKSB3aXRoICIgKyB0eXBlX25hbWUoKSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLy8gQH0KKworCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy8gbGV4aWNvZ3JhcGhpY2FsIGNvbXBhcmlzb24gb3Bl
cmF0b3JzIC8vCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CisKKyAgICAvLy8gQG5hbWUgbGV4aWNvZ3JhcGhpY2FsIGNvbXBhcmlzb24gb3BlcmF0b3JzCisg
ICAgLy8vIEB7CisKKyAgcHJpdmF0ZToKKyAgICAvKiEKKyAgICBAYnJpZWYgY29tcGFyaXNvbiBv
cGVyYXRvciBmb3IgSlNPTiB0eXBlcworCisgICAgUmV0dXJucyBhbiBvcmRlcmluZyB0aGF0IGlz
IHNpbWlsYXIgdG8gUHl0aG9uOgorICAgIC0gb3JkZXI6IG51bGwgPCBib29sZWFuIDwgbnVtYmVy
IDwgb2JqZWN0IDwgYXJyYXkgPCBzdHJpbmcKKyAgICAtIGZ1cnRoZXJtb3JlLCBlYWNoIHR5cGUg
aXMgbm90IHNtYWxsZXIgdGhhbiBpdHNlbGYKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisg
ICAgKi8KKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvcjwoY29uc3QgdmFsdWVfdCBsaHMsIGNvbnN0
IHZhbHVlX3QgcmhzKSBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBz
dGQ6OmFycmF5PHVpbnQ4X3QsIDg+IG9yZGVyID0ge3sKKyAgICAgICAgICAgICAgICAwLCAvLyBu
dWxsCisgICAgICAgICAgICAgICAgMywgLy8gb2JqZWN0CisgICAgICAgICAgICAgICAgNCwgLy8g
YXJyYXkKKyAgICAgICAgICAgICAgICA1LCAvLyBzdHJpbmcKKyAgICAgICAgICAgICAgICAxLCAv
LyBib29sZWFuCisgICAgICAgICAgICAgICAgMiwgLy8gaW50ZWdlcgorICAgICAgICAgICAgICAg
IDIsIC8vIHVuc2lnbmVkCisgICAgICAgICAgICAgICAgMiwgLy8gZmxvYXQKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfTsKKworICAgICAgICAvLyBkaXNjYXJkZWQgdmFsdWVzIGFyZSBub3QgY29t
cGFyYWJsZQorICAgICAgICBpZiAobGhzID09IHZhbHVlX3Q6OmRpc2NhcmRlZCBvciByaHMgPT0g
dmFsdWVfdDo6ZGlzY2FyZGVkKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gb3JkZXJbc3RhdGljX2Nhc3Q8c3RkOjpzaXpl
X3Q+KGxocyldIDwgb3JkZXJbc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KHJocyldOworICAgIH0K
KworICBwdWJsaWM6CisgICAgLyohCisgICAgQGJyaWVmIGNvbXBhcmlzb246IGVxdWFsCisKKyAg
ICBDb21wYXJlcyB0d28gSlNPTiB2YWx1ZXMgZm9yIGVxdWFsaXR5IGFjY29yZGluZyB0byB0aGUg
Zm9sbG93aW5nIHJ1bGVzOgorICAgIC0gVHdvIEpTT04gdmFsdWVzIGFyZSBlcXVhbCBpZiAoMSkg
dGhleSBhcmUgZnJvbSB0aGUgc2FtZSB0eXBlIGFuZCAoMikKKyAgICAgIHRoZWlyIHN0b3JlZCB2
YWx1ZXMgYXJlIHRoZSBzYW1lLgorICAgIC0gSW50ZWdlciBhbmQgZmxvYXRpbmctcG9pbnQgbnVt
YmVycyBhcmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgYmVmb3JlCisgICAgICBjb21wYXJpc29u
LiBGbG9hdGluZy1wb2ludCBudW1iZXJzIGFyZSBjb21wYXJlZCBpbmRpcmVjdGx5OiB0d28KKyAg
ICAgIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgYGYxYCBhbmQgYGYyYCBhcmUgY29uc2lkZXJlZCBl
cXVhbCBpZiBuZWl0aGVyCisgICAgICBgZjEgPiBmMmAgbm9yIGBmMiA+IGYxYCBob2xkcy4KKyAg
ICAtIFR3byBKU09OIG51bGwgdmFsdWVzIGFyZSBlcXVhbC4KKworICAgIEBwYXJhbVtpbl0gbGhz
ICBmaXJzdCBKU09OIHZhbHVlIHRvIGNvbnNpZGVyCisgICAgQHBhcmFtW2luXSByaHMgIHNlY29u
ZCBKU09OIHZhbHVlIHRvIGNvbnNpZGVyCisgICAgQHJldHVybiB3aGV0aGVyIHRoZSB2YWx1ZXMg
QGEgbGhzIGFuZCBAYSByaHMgYXJlIGVxdWFsCisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIuCisK
KyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgZGVtb25zdHJhdGVzIGNvbXBhcmluZyBzZXZl
cmFsIEpTT04KKyAgICB0eXBlcy4sb3BlcmF0b3JfX2VxdWFsfQorCisgICAgQHNpbmNlIHZlcnNp
b24gMS4wLjAKKyAgICAqLworICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3RfcmVmZXJl
bmNlIGxocywgY29uc3RfcmVmZXJlbmNlIHJocykgbm9leGNlcHQKKyAgICB7CisgICAgICAgIGNv
bnN0IGF1dG8gbGhzX3R5cGUgPSBsaHMudHlwZSgpOworICAgICAgICBjb25zdCBhdXRvIHJoc190
eXBlID0gcmhzLnR5cGUoKTsKKworICAgICAgICBpZiAobGhzX3R5cGUgPT0gcmhzX3R5cGUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobGhzX3R5cGUpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAqbGhzLm1fdmFsdWUuYXJyYXkgPT0gKnJocy5tX3Zh
bHVlLmFycmF5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIHZhbHVl
X3Q6Om9iamVjdDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biAqbGhzLm1fdmFsdWUub2JqZWN0ID09ICpyaHMubV92YWx1ZS5vYmplY3Q7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVsbDoKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OnN0cmluZzoKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAqbGhzLm1fdmFsdWUuc3RyaW5nID09ICpy
aHMubV92YWx1ZS5zdHJpbmc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNh
c2UgdmFsdWVfdDo6Ym9vbGVhbjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBsaHMubV92YWx1ZS5ib29sZWFuID09IHJocy5tX3ZhbHVlLmJvb2xlYW47Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2lu
dGVnZXI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGhz
Lm1fdmFsdWUubnVtYmVyX2ludGVnZXIgPT0gcmhzLm1fdmFsdWUubnVtYmVyX2ludGVnZXI7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX3Vu
c2lnbmVkOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxo
cy5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZCA9PSByaHMubV92YWx1ZS5udW1iZXJfdW5zaWduZWQ7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVy
X2Zsb2F0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxo
cy5tX3ZhbHVlLm51bWJlcl9mbG9hdCA9PSByaHMubV92YWx1ZS5udW1iZXJfZmxvYXQ7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGxoc190eXBlID09IHZh
bHVlX3Q6Om51bWJlcl9pbnRlZ2VyIGFuZCByaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfZmxv
YXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxudW1iZXJfZmxv
YXRfdD4obGhzLm1fdmFsdWUubnVtYmVyX2ludGVnZXIpID09IHJocy5tX3ZhbHVlLm51bWJlcl9m
bG9hdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChsaHNfdHlwZSA9PSB2YWx1ZV90Ojpu
dW1iZXJfZmxvYXQgYW5kIHJoc190eXBlID09IHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbGhzLm1fdmFsdWUubnVtYmVyX2Zsb2F0ID09IHN0
YXRpY19jYXN0PG51bWJlcl9mbG9hdF90PihyaHMubV92YWx1ZS5udW1iZXJfaW50ZWdlcik7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobGhzX3R5cGUgPT0gdmFsdWVfdDo6bnVtYmVyX3Vu
c2lnbmVkIGFuZCByaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfZmxvYXQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxudW1iZXJfZmxvYXRfdD4obGhzLm1fdmFs
dWUubnVtYmVyX3Vuc2lnbmVkKSA9PSByaHMubV92YWx1ZS5udW1iZXJfZmxvYXQ7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAobGhzX3R5cGUgPT0gdmFsdWVfdDo6bnVtYmVyX2Zsb2F0IGFu
ZCByaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBsaHMubV92YWx1ZS5udW1iZXJfZmxvYXQgPT0gc3RhdGljX2Nhc3Q8bnVt
YmVyX2Zsb2F0X3Q+KHJocy5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZCk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAobGhzX3R5cGUgPT0gdmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkIGFuZCBy
aHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcikKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PG51bWJlcl9pbnRlZ2VyX3Q+KGxocy5tX3ZhbHVlLm51bWJl
cl91bnNpZ25lZCkgPT0gcmhzLm1fdmFsdWUubnVtYmVyX2ludGVnZXI7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAobGhzX3R5cGUgPT0gdmFsdWVfdDo6bnVtYmVyX2ludGVnZXIgYW5kIHJo
c190eXBlID09IHZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGxocy5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyID09IHN0YXRpY19jYXN0PG51bWJl
cl9pbnRlZ2VyX3Q+KHJocy5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZCk7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGNvbXBh
cmlzb246IGVxdWFsCisKKyAgICBUaGUgZnVuY3Rpb25zIGNvbXBhcmVzIHRoZSBnaXZlbiBKU09O
IHZhbHVlIGFnYWluc3QgYSBudWxsIHBvaW50ZXIuIEFzIHRoZQorICAgIG51bGwgcG9pbnRlciBj
YW4gYmUgdXNlZCB0byBpbml0aWFsaXplIGEgSlNPTiB2YWx1ZSB0byBudWxsLCBhIGNvbXBhcmlz
b24KKyAgICBvZiBKU09OIHZhbHVlIEBhIHYgd2l0aCBhIG51bGwgcG9pbnRlciBzaG91bGQgYmUg
ZXF1aXZhbGVudCB0byBjYWxsCisgICAgYHYuaXNfbnVsbCgpYC4KKworICAgIEBwYXJhbVtpbl0g
diAgSlNPTiB2YWx1ZSB0byBjb25zaWRlcgorICAgIEByZXR1cm4gd2hldGhlciBAYSB2IGlzIG51
bGwKKworICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgorCisgICAgQGxpdmVleGFtcGxle1RoZSBl
eGFtcGxlIGNvbXBhcmVzIHNldmVyYWwgSlNPTiB0eXBlcyB0byB0aGUgbnVsbCBwb2ludGVyLgor
ICAgICxvcGVyYXRvcl9fZXF1YWxfX251bGxwdHJfdH0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEu
MC4wCisgICAgKi8KKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0X3JlZmVyZW5jZSB2
LCBzdGQ6Om51bGxwdHJfdCkgbm9leGNlcHQKKyAgICB7CisgICAgICAgIHJldHVybiB2LmlzX251
bGwoKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgY29tcGFyaXNvbjogZXF1YWwKKyAg
ICBAY29weWRvYyBvcGVyYXRvcj09KGNvbnN0X3JlZmVyZW5jZSwgc3RkOjpudWxscHRyX3QpCisg
ICAgKi8KKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KHN0ZDo6bnVsbHB0cl90LCBjb25zdF9y
ZWZlcmVuY2Ugdikgbm9leGNlcHQKKyAgICB7CisgICAgICAgIHJldHVybiB2LmlzX251bGwoKTsK
KyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgY29tcGFyaXNvbjogbm90IGVxdWFsCisKKyAg
ICBDb21wYXJlcyB0d28gSlNPTiB2YWx1ZXMgZm9yIGluZXF1YWxpdHkgYnkgY2FsY3VsYXRpbmcg
YG5vdCAobGhzID09IHJocylgLgorCisgICAgQHBhcmFtW2luXSBsaHMgIGZpcnN0IEpTT04gdmFs
dWUgdG8gY29uc2lkZXIKKyAgICBAcGFyYW1baW5dIHJocyAgc2Vjb25kIEpTT04gdmFsdWUgdG8g
Y29uc2lkZXIKKyAgICBAcmV0dXJuIHdoZXRoZXIgdGhlIHZhbHVlcyBAYSBsaHMgYW5kIEBhIHJo
cyBhcmUgbm90IGVxdWFsCisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIuCisKKyAgICBAbGl2ZWV4
YW1wbGV7VGhlIGV4YW1wbGUgZGVtb25zdHJhdGVzIGNvbXBhcmluZyBzZXZlcmFsIEpTT04KKyAg
ICB0eXBlcy4sb3BlcmF0b3JfX25vdGVxdWFsfQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAK
KyAgICAqLworICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3RfcmVmZXJlbmNlIGxocywg
Y29uc3RfcmVmZXJlbmNlIHJocykgbm9leGNlcHQKKyAgICB7CisgICAgICAgIHJldHVybiBub3Qg
KGxocyA9PSByaHMpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBjb21wYXJpc29uOiBu
b3QgZXF1YWwKKworICAgIFRoZSBmdW5jdGlvbnMgY29tcGFyZXMgdGhlIGdpdmVuIEpTT04gdmFs
dWUgYWdhaW5zdCBhIG51bGwgcG9pbnRlci4gQXMgdGhlCisgICAgbnVsbCBwb2ludGVyIGNhbiBi
ZSB1c2VkIHRvIGluaXRpYWxpemUgYSBKU09OIHZhbHVlIHRvIG51bGwsIGEgY29tcGFyaXNvbgor
ICAgIG9mIEpTT04gdmFsdWUgQGEgdiB3aXRoIGEgbnVsbCBwb2ludGVyIHNob3VsZCBiZSBlcXVp
dmFsZW50IHRvIGNhbGwKKyAgICBgbm90IHYuaXNfbnVsbCgpYC4KKworICAgIEBwYXJhbVtpbl0g
diAgSlNPTiB2YWx1ZSB0byBjb25zaWRlcgorICAgIEByZXR1cm4gd2hldGhlciBAYSB2IGlzIG5v
dCBudWxsCisKKyAgICBAY29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEBsaXZlZXhhbXBsZXtU
aGUgZXhhbXBsZSBjb21wYXJlcyBzZXZlcmFsIEpTT04gdHlwZXMgdG8gdGhlIG51bGwgcG9pbnRl
ci4KKyAgICAsb3BlcmF0b3JfX25vdGVxdWFsX19udWxscHRyX3R9CisKKyAgICBAc2luY2UgdmVy
c2lvbiAxLjAuMAorICAgICovCisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdF9yZWZl
cmVuY2Ugdiwgc3RkOjpudWxscHRyX3QpIG5vZXhjZXB0CisgICAgeworICAgICAgICByZXR1cm4g
bm90IHYuaXNfbnVsbCgpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBjb21wYXJpc29u
OiBub3QgZXF1YWwKKyAgICBAY29weWRvYyBvcGVyYXRvciE9KGNvbnN0X3JlZmVyZW5jZSwgc3Rk
OjpudWxscHRyX3QpCisgICAgKi8KKyAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KHN0ZDo6bnVs
bHB0cl90LCBjb25zdF9yZWZlcmVuY2Ugdikgbm9leGNlcHQKKyAgICB7CisgICAgICAgIHJldHVy
biBub3Qgdi5pc19udWxsKCk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGNvbXBhcmlz
b246IGxlc3MgdGhhbgorCisgICAgQ29tcGFyZXMgd2hldGhlciBvbmUgSlNPTiB2YWx1ZSBAYSBs
aHMgaXMgbGVzcyB0aGFuIGFub3RoZXIgSlNPTiB2YWx1ZSBAYQorICAgIHJocyBhY2NvcmRpbmcg
dG8gdGhlIGZvbGxvd2luZyBydWxlczoKKyAgICAtIElmIEBhIGxocyBhbmQgQGEgcmhzIGhhdmUg
dGhlIHNhbWUgdHlwZSwgdGhlIHZhbHVlcyBhcmUgY29tcGFyZWQgdXNpbmcKKyAgICAgIHRoZSBk
ZWZhdWx0IGA8YCBvcGVyYXRvci4KKyAgICAtIEludGVnZXIgYW5kIGZsb2F0aW5nLXBvaW50IG51
bWJlcnMgYXJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIGJlZm9yZQorICAgICAgY29tcGFyaXNv
bgorICAgIC0gSW4gY2FzZSBAYSBsaHMgYW5kIEBhIHJocyBoYXZlIGRpZmZlcmVudCB0eXBlcywg
dGhlIHZhbHVlcyBhcmUgaWdub3JlZAorICAgICAgYW5kIHRoZSBvcmRlciBvZiB0aGUgdHlwZXMg
aXMgY29uc2lkZXJlZCwgc2VlCisgICAgICBAcmVmIG9wZXJhdG9yPChjb25zdCB2YWx1ZV90LCBj
b25zdCB2YWx1ZV90KS4KKworICAgIEBwYXJhbVtpbl0gbGhzICBmaXJzdCBKU09OIHZhbHVlIHRv
IGNvbnNpZGVyCisgICAgQHBhcmFtW2luXSByaHMgIHNlY29uZCBKU09OIHZhbHVlIHRvIGNvbnNp
ZGVyCisgICAgQHJldHVybiB3aGV0aGVyIEBhIGxocyBpcyBsZXNzIHRoYW4gQGEgcmhzCisKKyAg
ICBAY29tcGxleGl0eSBMaW5lYXIuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgZGVt
b25zdHJhdGVzIGNvbXBhcmluZyBzZXZlcmFsIEpTT04KKyAgICB0eXBlcy4sb3BlcmF0b3JfX2xl
c3N9CisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgZnJpZW5kIGJvb2wg
b3BlcmF0b3I8KGNvbnN0X3JlZmVyZW5jZSBsaHMsIGNvbnN0X3JlZmVyZW5jZSByaHMpIG5vZXhj
ZXB0CisgICAgeworICAgICAgICBjb25zdCBhdXRvIGxoc190eXBlID0gbGhzLnR5cGUoKTsKKyAg
ICAgICAgY29uc3QgYXV0byByaHNfdHlwZSA9IHJocy50eXBlKCk7CisKKyAgICAgICAgaWYgKGxo
c190eXBlID09IHJoc190eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGxoc190
eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YXJyYXk6
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKmxocy5tX3Zh
bHVlLmFycmF5IDwgKnJocy5tX3ZhbHVlLmFycmF5OworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAqbGhzLm1fdmFsdWUub2JqZWN0IDwgKnJocy5tX3ZhbHVl
Lm9iamVjdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90
OjpudWxsOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OnN0
cmluZzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAqbGhz
Lm1fdmFsdWUuc3RyaW5nIDwgKnJocy5tX3ZhbHVlLnN0cmluZzsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxocy5tX3ZhbHVlLmJvb2xlYW4gPCByaHMu
bV92YWx1ZS5ib29sZWFuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNl
IHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGxocy5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyIDwgcmhzLm1fdmFsdWUu
bnVtYmVyX2ludGVnZXI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2Ug
dmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGxocy5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZCA8IHJocy5tX3ZhbHVl
Lm51bWJlcl91bnNpZ25lZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2Fz
ZSB2YWx1ZV90OjpudW1iZXJfZmxvYXQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbGhzLm1fdmFsdWUubnVtYmVyX2Zsb2F0IDwgcmhzLm1fdmFsdWUubnVt
YmVyX2Zsb2F0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
IChsaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlciBhbmQgcmhzX3R5cGUgPT0gdmFs
dWVfdDo6bnVtYmVyX2Zsb2F0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8bnVtYmVyX2Zsb2F0X3Q+KGxocy5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyKSA8IHJocy5t
X3ZhbHVlLm51bWJlcl9mbG9hdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChsaHNfdHlw
ZSA9PSB2YWx1ZV90OjpudW1iZXJfZmxvYXQgYW5kIHJoc190eXBlID09IHZhbHVlX3Q6Om51bWJl
cl9pbnRlZ2VyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbGhzLm1fdmFsdWUubnVt
YmVyX2Zsb2F0IDwgc3RhdGljX2Nhc3Q8bnVtYmVyX2Zsb2F0X3Q+KHJocy5tX3ZhbHVlLm51bWJl
cl9pbnRlZ2VyKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChsaHNfdHlwZSA9PSB2YWx1
ZV90OjpudW1iZXJfdW5zaWduZWQgYW5kIHJoc190eXBlID09IHZhbHVlX3Q6Om51bWJlcl9mbG9h
dCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PG51bWJlcl9mbG9h
dF90PihsaHMubV92YWx1ZS5udW1iZXJfdW5zaWduZWQpIDwgcmhzLm1fdmFsdWUubnVtYmVyX2Zs
b2F0OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGxoc190eXBlID09IHZhbHVlX3Q6Om51
bWJlcl9mbG9hdCBhbmQgcmhzX3R5cGUgPT0gdmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbGhzLm1fdmFsdWUubnVtYmVyX2Zsb2F0IDwgc3Rh
dGljX2Nhc3Q8bnVtYmVyX2Zsb2F0X3Q+KHJocy5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobGhzX3R5cGUgPT0gdmFsdWVfdDo6bnVtYmVyX2lu
dGVnZXIgYW5kIHJoc190eXBlID09IHZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGxocy5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyIDwgc3RhdGlj
X2Nhc3Q8bnVtYmVyX2ludGVnZXJfdD4ocmhzLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmIChsaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfdW5z
aWduZWQgYW5kIHJoc190eXBlID09IHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bnVtYmVyX2ludGVnZXJfdD4obGhzLm1f
dmFsdWUubnVtYmVyX3Vuc2lnbmVkKSA8IHJocy5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gV2Ugb25seSByZWFjaCB0aGlzIGxpbmUgaWYgd2UgY2Fubm90
IGNvbXBhcmUgdmFsdWVzLiBJbiB0aGF0IGNhc2UsCisgICAgICAgIC8vIHdlIGNvbXBhcmUgdHlw
ZXMuIE5vdGUgd2UgaGF2ZSB0byBjYWxsIHRoZSBvcGVyYXRvciBleHBsaWNpdGx5LAorICAgICAg
ICAvLyBiZWNhdXNlIE1TVkMgaGFzIHByb2JsZW1zIG90aGVyd2lzZS4KKyAgICAgICAgcmV0dXJu
IG9wZXJhdG9yPChsaHNfdHlwZSwgcmhzX3R5cGUpOworICAgIH0KKworICAgIC8qIQorICAgIEBi
cmllZiBjb21wYXJpc29uOiBsZXNzIHRoYW4gb3IgZXF1YWwKKworICAgIENvbXBhcmVzIHdoZXRo
ZXIgb25lIEpTT04gdmFsdWUgQGEgbGhzIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBhbm90aGVy
CisgICAgSlNPTiB2YWx1ZSBieSBjYWxjdWxhdGluZyBgbm90IChyaHMgPCBsaHMpYC4KKworICAg
IEBwYXJhbVtpbl0gbGhzICBmaXJzdCBKU09OIHZhbHVlIHRvIGNvbnNpZGVyCisgICAgQHBhcmFt
W2luXSByaHMgIHNlY29uZCBKU09OIHZhbHVlIHRvIGNvbnNpZGVyCisgICAgQHJldHVybiB3aGV0
aGVyIEBhIGxocyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gQGEgcmhzCisKKyAgICBAY29tcGxl
eGl0eSBMaW5lYXIuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgZGVtb25zdHJhdGVz
IGNvbXBhcmluZyBzZXZlcmFsIEpTT04KKyAgICB0eXBlcy4sb3BlcmF0b3JfX2dyZWF0ZXJ9CisK
KyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAgZnJpZW5kIGJvb2wgb3BlcmF0
b3I8PShjb25zdF9yZWZlcmVuY2UgbGhzLCBjb25zdF9yZWZlcmVuY2UgcmhzKSBub2V4Y2VwdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG5vdCAocmhzIDwgbGhzKTsKKyAgICB9CisKKyAgICAvKiEK
KyAgICBAYnJpZWYgY29tcGFyaXNvbjogZ3JlYXRlciB0aGFuCisKKyAgICBDb21wYXJlcyB3aGV0
aGVyIG9uZSBKU09OIHZhbHVlIEBhIGxocyBpcyBncmVhdGVyIHRoYW4gYW5vdGhlcgorICAgIEpT
T04gdmFsdWUgYnkgY2FsY3VsYXRpbmcgYG5vdCAobGhzIDw9IHJocylgLgorCisgICAgQHBhcmFt
W2luXSBsaHMgIGZpcnN0IEpTT04gdmFsdWUgdG8gY29uc2lkZXIKKyAgICBAcGFyYW1baW5dIHJo
cyAgc2Vjb25kIEpTT04gdmFsdWUgdG8gY29uc2lkZXIKKyAgICBAcmV0dXJuIHdoZXRoZXIgQGEg
bGhzIGlzIGdyZWF0ZXIgdGhhbiB0byBAYSByaHMKKworICAgIEBjb21wbGV4aXR5IExpbmVhci4K
KworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgY29tcGFyaW5nIHNl
dmVyYWwgSlNPTgorICAgIHR5cGVzLixvcGVyYXRvcl9fbGVzc2VxdWFsfQorCisgICAgQHNpbmNl
IHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPihjb25zdF9y
ZWZlcmVuY2UgbGhzLCBjb25zdF9yZWZlcmVuY2UgcmhzKSBub2V4Y2VwdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG5vdCAobGhzIDw9IHJocyk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVm
IGNvbXBhcmlzb246IGdyZWF0ZXIgdGhhbiBvciBlcXVhbAorCisgICAgQ29tcGFyZXMgd2hldGhl
ciBvbmUgSlNPTiB2YWx1ZSBAYSBsaHMgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGFub3Ro
ZXIKKyAgICBKU09OIHZhbHVlIGJ5IGNhbGN1bGF0aW5nIGBub3QgKGxocyA8IHJocylgLgorCisg
ICAgQHBhcmFtW2luXSBsaHMgIGZpcnN0IEpTT04gdmFsdWUgdG8gY29uc2lkZXIKKyAgICBAcGFy
YW1baW5dIHJocyAgc2Vjb25kIEpTT04gdmFsdWUgdG8gY29uc2lkZXIKKyAgICBAcmV0dXJuIHdo
ZXRoZXIgQGEgbGhzIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBAYSByaHMKKworICAgIEBj
b21wbGV4aXR5IExpbmVhci4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBkZW1vbnN0
cmF0ZXMgY29tcGFyaW5nIHNldmVyYWwgSlNPTgorICAgIHR5cGVzLixvcGVyYXRvcl9fZ3JlYXRl
cmVxdWFsfQorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGZyaWVuZCBi
b29sIG9wZXJhdG9yPj0oY29uc3RfcmVmZXJlbmNlIGxocywgY29uc3RfcmVmZXJlbmNlIHJocykg
bm9leGNlcHQKKyAgICB7CisgICAgICAgIHJldHVybiBub3QgKGxocyA8IHJocyk7CisgICAgfQor
CisgICAgLy8vIEB9CisKKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLyBzZXJpYWxp
emF0aW9uIC8vCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgLy8vIEBuYW1lIHNlcmlh
bGl6YXRpb24KKyAgICAvLy8gQHsKKworICAgIC8qIQorICAgIEBicmllZiBzZXJpYWxpemUgdG8g
c3RyZWFtCisKKyAgICBTZXJpYWxpemUgdGhlIGdpdmVuIEpTT04gdmFsdWUgQGEgaiB0byB0aGUg
b3V0cHV0IHN0cmVhbSBAYSBvLiBUaGUgSlNPTgorICAgIHZhbHVlIHdpbGwgYmUgc2VyaWFsaXpl
ZCB1c2luZyB0aGUgQHJlZiBkdW1wIG1lbWJlciBmdW5jdGlvbi4gVGhlCisgICAgaW5kZW50YXRp
b24gb2YgdGhlIG91dHB1dCBjYW4gYmUgY29udHJvbGxlZCB3aXRoIHRoZSBtZW1iZXIgdmFyaWFi
bGUKKyAgICBgd2lkdGhgIG9mIHRoZSBvdXRwdXQgc3RyZWFtIEBhIG8uIEZvciBpbnN0YW5jZSwg
dXNpbmcgdGhlIG1hbmlwdWxhdG9yCisgICAgYHN0ZDo6c2V0dyg0KWAgb24gQGEgbyBzZXRzIHRo
ZSBpbmRlbnRhdGlvbiBsZXZlbCB0byBgNGAgYW5kIHRoZQorICAgIHNlcmlhbGl6YXRpb24gcmVz
dWx0IGlzIHRoZSBzYW1lIGFzIGNhbGxpbmcgYGR1bXAoNClgLgorCisgICAgQG5vdGUgRHVyaW5n
IHNlcmlhbGl6YWlvbiwgdGhlIGxvY2FsZSBhbmQgdGhlIHByZWNpc2lvbiBvZiB0aGUgb3V0cHV0
CisgICAgc3RyZWFtIEBhIG8gYXJlIGNoYW5nZWQuIFRoZSBvcmlnaW5hbCB2YWx1ZXMgYXJlIHJl
c3RvcmVkIHdoZW4gdGhlCisgICAgZnVuY3Rpb24gcmV0dXJucy4KKworICAgIEBwYXJhbVtpbixv
dXRdIG8gIHN0cmVhbSB0byBzZXJpYWxpemUgdG8KKyAgICBAcGFyYW1baW5dIGogIEpTT04gdmFs
dWUgdG8gc2VyaWFsaXplCisKKyAgICBAcmV0dXJuIHRoZSBzdHJlYW0gQGEgbworCisgICAgQGNv
bXBsZXhpdHkgTGluZWFyLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJlbG93IHNo
b3dzIHRoZSBzZXJpYWxpemF0aW9uIHdpdGggZGlmZmVyZW50CisgICAgcGFyYW1ldGVycyB0byBg
d2lkdGhgIHRvIGFkanVzdCB0aGUgaW5kZW50YXRpb24gbGV2ZWwuLG9wZXJhdG9yX3NlcmlhbGl6
ZX0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8KKyAgICBmcmllbmQgc3RkOjpv
c3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgbywgY29uc3QgYmFzaWNfanNvbiYgaikK
KyAgICB7CisgICAgICAgIC8vIHJlYWQgd2lkdGggbWVtYmVyIGFuZCB1c2UgaXQgYXMgaW5kZW50
YXRpb24gcGFyYW1ldGVyIGlmIG5vbnplcm8KKyAgICAgICAgY29uc3QgYm9vbCBwcmV0dHlfcHJp
bnQgPSAoby53aWR0aCgpID4gMCk7CisgICAgICAgIGNvbnN0IGF1dG8gaW5kZW50YXRpb24gPSAo
cHJldHR5X3ByaW50ID8gby53aWR0aCgpIDogMCk7CisKKyAgICAgICAgLy8gcmVzZXQgd2lkdGgg
dG8gMCBmb3Igc3Vic2VxdWVudCBjYWxscyB0byB0aGlzIHN0cmVhbQorICAgICAgICBvLndpZHRo
KDApOworCisgICAgICAgIC8vIGZpeCBsb2NhbGUgcHJvYmxlbXMKKyAgICAgICAgY29uc3QgYXV0
byBvbGRfbG9jYWxlID0gby5pbWJ1ZShzdGQ6OmxvY2FsZTo6Y2xhc3NpYygpKTsKKyAgICAgICAg
Ly8gc2V0IHByZWNpc2lvbgorCisgICAgICAgIC8vIDYsIDE1IG9yIDE2IGRpZ2l0cyBvZiBwcmVj
aXNpb24gYWxsb3dzIHJvdW5kLXRyaXAgSUVFRSA3NTQKKyAgICAgICAgLy8gc3RyaW5nLT5mbG9h
dC0+c3RyaW5nLCBzdHJpbmctPmRvdWJsZS0+c3RyaW5nIG9yIHN0cmluZy0+bG9uZworICAgICAg
ICAvLyBkb3VibGUtPnN0cmluZzsgdG8gYmUgc2FmZSwgd2UgcmVhZCB0aGlzIHZhbHVlIGZyb20K
KyAgICAgICAgLy8gc3RkOjpudW1lcmljX2xpbWl0czxudW1iZXJfZmxvYXRfdD46OmRpZ2l0czEw
CisgICAgICAgIGNvbnN0IGF1dG8gb2xkX3ByZWNpc2lvbiA9IG8ucHJlY2lzaW9uKHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZG91YmxlPjo6ZGlnaXRzMTApOworCisgICAgICAgIC8vIGRvIHRoZSBhY3R1
YWwgc2VyaWFsaXphdGlvbgorICAgICAgICBqLmR1bXAobywgcHJldHR5X3ByaW50LCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBpbnQ+KGluZGVudGF0aW9uKSk7CisKKyAgICAgICAgLy8gcmVzZXQgbG9j
YWxlIGFuZCBwcmVjaXNpb24KKyAgICAgICAgby5pbWJ1ZShvbGRfbG9jYWxlKTsKKyAgICAgICAg
by5wcmVjaXNpb24ob2xkX3ByZWNpc2lvbik7CisgICAgICAgIHJldHVybiBvOworICAgIH0KKwor
ICAgIC8qIQorICAgIEBicmllZiBzZXJpYWxpemUgdG8gc3RyZWFtCisgICAgQGNvcHlkb2Mgb3Bl
cmF0b3I8PChzdGQ6Om9zdHJlYW0mLCBjb25zdCBiYXNpY19qc29uJikKKyAgICAqLworICAgIGZy
aWVuZCBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPj4oY29uc3QgYmFzaWNfanNvbiYgaiwgc3RkOjpv
c3RyZWFtJiBvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG8gPDwgajsKKyAgICB9CisKKyAgICAv
Ly8gQH0KKworCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy8gZGVzZXJpYWxpemF0
aW9uIC8vCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICAvLy8gQG5hbWUgZGVzZXJp
YWxpemF0aW9uCisgICAgLy8vIEB7CisKKyAgICAvKiEKKyAgICBAYnJpZWYgZGVzZXJpYWxpemUg
ZnJvbSBhbiBhcnJheQorCisgICAgVGhpcyBmdW5jdGlvbiByZWFkcyBmcm9tIGFuIGFycmF5IG9m
IDEtYnl0ZSB2YWx1ZXMuCisKKyAgICBAcHJlIEVhY2ggZWxlbWVudCBvZiB0aGUgY29udGFpbmVy
IGhhcyBhIHNpemUgb2YgMSBieXRlLiBWaW9sYXRpbmcgdGhpcworICAgIHByZWNvbmRpdGlvbiB5
aWVsZHMgdW5kZWZpbmVkIGJlaGF2aW9yLiAqKlRoaXMgcHJlY29uZGl0aW9uIGlzIGVuZm9yY2Vk
CisgICAgd2l0aCBhIHN0YXRpYyBhc3NlcnRpb24uKioKKworICAgIEBwYXJhbVtpbl0gYXJyYXkg
IGFycmF5IHRvIHJlYWQgZnJvbQorICAgIEBwYXJhbVtpbl0gY2IgIGEgcGFyc2VyIGNhbGxiYWNr
IGZ1bmN0aW9uIG9mIHR5cGUgQHJlZiBwYXJzZXJfY2FsbGJhY2tfdAorICAgIHdoaWNoIGlzIHVz
ZWQgdG8gY29udHJvbCB0aGUgZGVzZXJpYWxpemF0aW9uIGJ5IGZpbHRlcmluZyB1bndhbnRlZCB2
YWx1ZXMKKyAgICAob3B0aW9uYWwpCisKKyAgICBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgZGVzZXJp
YWxpemF0aW9uCisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gdGhlIGxlbmd0aCBvZiB0aGUg
aW5wdXQuIFRoZSBwYXJzZXIgaXMgYSBwcmVkaWN0aXZlCisgICAgTEwoMSkgcGFyc2VyLiBUaGUg
Y29tcGxleGl0eSBjYW4gYmUgaGlnaGVyIGlmIHRoZSBwYXJzZXIgY2FsbGJhY2sgZnVuY3Rpb24K
KyAgICBAYSBjYiBoYXMgYSBzdXBlci1saW5lYXIgY29tcGxleGl0eS4KKworICAgIEBub3RlIEEg
VVRGLTggYnl0ZSBvcmRlciBtYXJrIGlzIHNpbGVudGx5IGlnbm9yZWQuCisKKyAgICBAbGl2ZWV4
YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgZGVtb25zdHJhdGVzIHRoZSBgcGFyc2UoKWAgZnVuY3Rp
b24gcmVhZGluZworICAgIGZyb20gYW4gYXJyYXkuLHBhcnNlX19hcnJheV9fcGFyc2VyX2NhbGxi
YWNrX3R9CisKKyAgICBAc2luY2UgdmVyc2lvbiAyLjAuMworICAgICovCisgICAgdGVtcGxhdGU8
Y2xhc3MgVCwgc3RkOjpzaXplX3QgTj4KKyAgICBzdGF0aWMgYmFzaWNfanNvbiBwYXJzZShUICgm
YXJyYXkpW05dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlcl9jYWxs
YmFja190IGNiID0gbnVsbHB0cikKKyAgICB7CisgICAgICAgIC8vIGRlbGVnYXRlIHRoZSBjYWxs
IHRvIHRoZSBpdGVyYXRvci1yYW5nZSBwYXJzZSBvdmVybG9hZAorICAgICAgICByZXR1cm4gcGFy
c2Uoc3RkOjpiZWdpbihhcnJheSksIHN0ZDo6ZW5kKGFycmF5KSwgY2IpOworICAgIH0KKworICAg
IC8qIQorICAgIEBicmllZiBkZXNlcmlhbGl6ZSBmcm9tIHN0cmluZyBsaXRlcmFsCisKKyAgICBA
dHBhcmFtIENoYXJUIGNoYXJhY3Rlci9saXRlcmFsIHR5cGUgd2l0aCBzaXplIG9mIDEgYnl0ZQor
ICAgIEBwYXJhbVtpbl0gcyAgc3RyaW5nIGxpdGVyYWwgdG8gcmVhZCBhIHNlcmlhbGl6ZWQgSlNP
TiB2YWx1ZSBmcm9tCisgICAgQHBhcmFtW2luXSBjYiBhIHBhcnNlciBjYWxsYmFjayBmdW5jdGlv
biBvZiB0eXBlIEByZWYgcGFyc2VyX2NhbGxiYWNrX3QKKyAgICB3aGljaCBpcyB1c2VkIHRvIGNv
bnRyb2wgdGhlIGRlc2VyaWFsaXphdGlvbiBieSBmaWx0ZXJpbmcgdW53YW50ZWQgdmFsdWVzCisg
ICAgKG9wdGlvbmFsKQorCisgICAgQHJldHVybiByZXN1bHQgb2YgdGhlIGRlc2VyaWFsaXphdGlv
bgorCisgICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIHRoZSBsZW5ndGggb2YgdGhlIGlucHV0LiBU
aGUgcGFyc2VyIGlzIGEgcHJlZGljdGl2ZQorICAgIExMKDEpIHBhcnNlci4gVGhlIGNvbXBsZXhp
dHkgY2FuIGJlIGhpZ2hlciBpZiB0aGUgcGFyc2VyIGNhbGxiYWNrIGZ1bmN0aW9uCisgICAgQGEg
Y2IgaGFzIGEgc3VwZXItbGluZWFyIGNvbXBsZXhpdHkuCisKKyAgICBAbm90ZSBBIFVURi04IGJ5
dGUgb3JkZXIgbWFyayBpcyBzaWxlbnRseSBpZ25vcmVkLgorICAgIEBub3RlIFN0cmluZyBjb250
YWluZXJzIGxpa2UgYHN0ZDo6c3RyaW5nYCBvciBAcmVmIHN0cmluZ190IGNhbiBiZSBwYXJzZWQK
KyAgICAgICAgICB3aXRoIEByZWYgcGFyc2UoY29uc3QgQ29udGlndW91c0NvbnRhaW5lciYsIGNv
bnN0IHBhcnNlcl9jYWxsYmFja190KQorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJl
bG93IGRlbW9uc3RyYXRlcyB0aGUgYHBhcnNlKClgIGZ1bmN0aW9uIHdpdGgKKyAgICBhbmQgd2l0
aG91dCBjYWxsYmFjayBmdW5jdGlvbi4scGFyc2VfX3N0cmluZ19fcGFyc2VyX2NhbGxiYWNrX3R9
CisKKyAgICBAc2EgQHJlZiBwYXJzZShzdGQ6OmlzdHJlYW0mLCBjb25zdCBwYXJzZXJfY2FsbGJh
Y2tfdCkgZm9yIGEgdmVyc2lvbiB0aGF0CisgICAgcmVhZHMgZnJvbSBhbiBpbnB1dCBzdHJlYW0K
KworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wIChvcmlnaW5hbGx5IGZvciBAcmVmIHN0cmluZ190
KQorICAgICovCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclBULCB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjwKKyAgICAgICAgICAgICAgICAgc3RkOjppc19wb2ludGVyPENoYXJQVD46OnZhbHVl
IGFuZAorICAgICAgICAgICAgICAgICBzdGQ6OmlzX2ludGVncmFsPHR5cGVuYW1lIHN0ZDo6cmVt
b3ZlX3BvaW50ZXI8Q2hhclBUPjo6dHlwZT46OnZhbHVlIGFuZAorICAgICAgICAgICAgICAgICBz
aXplb2YodHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxDaGFyUFQ+Ojp0eXBlKSA9PSAxLCBp
bnQ+Ojp0eXBlID0gMD4KKyAgICBzdGF0aWMgYmFzaWNfanNvbiBwYXJzZShjb25zdCBDaGFyUFQg
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZXJfY2FsbGJhY2tfdCBj
YiA9IG51bGxwdHIpCisgICAgeworICAgICAgICByZXR1cm4gcGFyc2VyKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KHMpLCBjYikucGFyc2UoKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBA
YnJpZWYgZGVzZXJpYWxpemUgZnJvbSBzdHJlYW0KKworICAgIEBwYXJhbVtpbixvdXRdIGkgIHN0
cmVhbSB0byByZWFkIGEgc2VyaWFsaXplZCBKU09OIHZhbHVlIGZyb20KKyAgICBAcGFyYW1baW5d
IGNiIGEgcGFyc2VyIGNhbGxiYWNrIGZ1bmN0aW9uIG9mIHR5cGUgQHJlZiBwYXJzZXJfY2FsbGJh
Y2tfdAorICAgIHdoaWNoIGlzIHVzZWQgdG8gY29udHJvbCB0aGUgZGVzZXJpYWxpemF0aW9uIGJ5
IGZpbHRlcmluZyB1bndhbnRlZCB2YWx1ZXMKKyAgICAob3B0aW9uYWwpCisKKyAgICBAcmV0dXJu
IHJlc3VsdCBvZiB0aGUgZGVzZXJpYWxpemF0aW9uCisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIg
aW4gdGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQuIFRoZSBwYXJzZXIgaXMgYSBwcmVkaWN0aXZlCisg
ICAgTEwoMSkgcGFyc2VyLiBUaGUgY29tcGxleGl0eSBjYW4gYmUgaGlnaGVyIGlmIHRoZSBwYXJz
ZXIgY2FsbGJhY2sgZnVuY3Rpb24KKyAgICBAYSBjYiBoYXMgYSBzdXBlci1saW5lYXIgY29tcGxl
eGl0eS4KKworICAgIEBub3RlIEEgVVRGLTggYnl0ZSBvcmRlciBtYXJrIGlzIHNpbGVudGx5IGln
bm9yZWQuCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgZGVtb25zdHJhdGVz
IHRoZSBgcGFyc2UoKWAgZnVuY3Rpb24gd2l0aAorICAgIGFuZCB3aXRob3V0IGNhbGxiYWNrIGZ1
bmN0aW9uLixwYXJzZV9faXN0cmVhbV9fcGFyc2VyX2NhbGxiYWNrX3R9CisKKyAgICBAc2EgQHJl
ZiBwYXJzZShjb25zdCBjaGFyKiwgY29uc3QgcGFyc2VyX2NhbGxiYWNrX3QpIGZvciBhIHZlcnNp
b24KKyAgICB0aGF0IHJlYWRzIGZyb20gYSBzdHJpbmcKKworICAgIEBzaW5jZSB2ZXJzaW9uIDEu
MC4wCisgICAgKi8KKyAgICBzdGF0aWMgYmFzaWNfanNvbiBwYXJzZShzdGQ6OmlzdHJlYW0mIGks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VyX2NhbGxiYWNrX3QgY2Ig
PSBudWxscHRyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBhcnNlcihpLCBjYikucGFyc2UoKTsK
KyAgICB9CisKKyAgICAvKiEKKyAgICBAY29weWRvYyBwYXJzZShzdGQ6OmlzdHJlYW0mLCBjb25z
dCBwYXJzZXJfY2FsbGJhY2tfdCkKKyAgICAqLworICAgIHN0YXRpYyBiYXNpY19qc29uIHBhcnNl
KHN0ZDo6aXN0cmVhbSYmIGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFy
c2VyX2NhbGxiYWNrX3QgY2IgPSBudWxscHRyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBhcnNl
cihpLCBjYikucGFyc2UoKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgZGVzZXJpYWxp
emUgZnJvbSBhbiBpdGVyYXRvciByYW5nZSB3aXRoIGNvbnRpZ3VvdXMgc3RvcmFnZQorCisgICAg
VGhpcyBmdW5jdGlvbiByZWFkcyBmcm9tIGFuIGl0ZXJhdG9yIHJhbmdlIG9mIGEgY29udGFpbmVy
IHdpdGggY29udGlndW91cworICAgIHN0b3JhZ2Ugb2YgMS1ieXRlIHZhbHVlcy4gQ29tcGF0aWJs
ZSBjb250YWluZXIgdHlwZXMgaW5jbHVkZQorICAgIGBzdGQ6OnZlY3RvcmAsIGBzdGQ6OnN0cmlu
Z2AsIGBzdGQ6OmFycmF5YCwgYHN0ZDo6dmFsYXJyYXlgLCBhbmQKKyAgICBgc3RkOjppbml0aWFs
aXplcl9saXN0YC4gRnVydGhlcm1vcmUsIEMtc3R5bGUgYXJyYXlzIGNhbiBiZSB1c2VkIHdpdGgK
KyAgICBgc3RkOjpiZWdpbigpYC9gc3RkOjplbmQoKWAuIFVzZXItZGVmaW5lZCBjb250YWluZXJz
IGNhbiBiZSB1c2VkIGFzIGxvbmcKKyAgICBhcyB0aGV5IGltcGxlbWVudCByYW5kb20tYWNjZXNz
IGl0ZXJhdG9ycyBhbmQgYSBjb250aWd1b3VzIHN0b3JhZ2UuCisKKyAgICBAcHJlIFRoZSBpdGVy
YXRvciByYW5nZSBpcyBjb250aWd1b3VzLiBWaW9sYXRpbmcgdGhpcyBwcmVjb25kaXRpb24geWll
bGRzCisgICAgdW5kZWZpbmVkIGJlaGF2aW9yLiAqKlRoaXMgcHJlY29uZGl0aW9uIGlzIGVuZm9y
Y2VkIHdpdGggYW4gYXNzZXJ0aW9uLioqCisgICAgQHByZSBFYWNoIGVsZW1lbnQgaW4gdGhlIHJh
bmdlIGhhcyBhIHNpemUgb2YgMSBieXRlLiBWaW9sYXRpbmcgdGhpcworICAgIHByZWNvbmRpdGlv
biB5aWVsZHMgdW5kZWZpbmVkIGJlaGF2aW9yLiAqKlRoaXMgcHJlY29uZGl0aW9uIGlzIGVuZm9y
Y2VkCisgICAgd2l0aCBhIHN0YXRpYyBhc3NlcnRpb24uKioKKworICAgIEB3YXJuaW5nIFRoZXJl
IGlzIG5vIHdheSB0byBlbmZvcmNlIGFsbCBwcmVjb25kaXRpb25zIGF0IGNvbXBpbGUtdGltZS4g
SWYKKyAgICAgICAgICAgICB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggbm9uY29tcGxpYW50
IGl0ZXJhdG9ycyBhbmQgd2l0aAorICAgICAgICAgICAgIGFzc2VydGlvbnMgc3dpdGNoZWQgb2Zm
LCB0aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkIGFuZCB3aWxsIG1vc3QKKyAgICAgICAgICAgICBs
aWtlbHkgeWllbGQgc2VnbWVudGF0aW9uIHZpb2xhdGlvbi4KKworICAgIEB0cGFyYW0gSXRlcmF0
b3JUeXBlIGl0ZXJhdG9yIG9mIGNvbnRhaW5lciB3aXRoIGNvbnRpZ3VvdXMgc3RvcmFnZQorICAg
IEBwYXJhbVtpbl0gZmlyc3QgIGJlZ2luIG9mIHRoZSByYW5nZSB0byBwYXJzZSAoaW5jbHVkZWQp
CisgICAgQHBhcmFtW2luXSBsYXN0ICBlbmQgb2YgdGhlIHJhbmdlIHRvIHBhcnNlIChleGNsdWRl
ZCkKKyAgICBAcGFyYW1baW5dIGNiICBhIHBhcnNlciBjYWxsYmFjayBmdW5jdGlvbiBvZiB0eXBl
IEByZWYgcGFyc2VyX2NhbGxiYWNrX3QKKyAgICB3aGljaCBpcyB1c2VkIHRvIGNvbnRyb2wgdGhl
IGRlc2VyaWFsaXphdGlvbiBieSBmaWx0ZXJpbmcgdW53YW50ZWQgdmFsdWVzCisgICAgKG9wdGlv
bmFsKQorCisgICAgQHJldHVybiByZXN1bHQgb2YgdGhlIGRlc2VyaWFsaXphdGlvbgorCisgICAg
QGNvbXBsZXhpdHkgTGluZWFyIGluIHRoZSBsZW5ndGggb2YgdGhlIGlucHV0LiBUaGUgcGFyc2Vy
IGlzIGEgcHJlZGljdGl2ZQorICAgIExMKDEpIHBhcnNlci4gVGhlIGNvbXBsZXhpdHkgY2FuIGJl
IGhpZ2hlciBpZiB0aGUgcGFyc2VyIGNhbGxiYWNrIGZ1bmN0aW9uCisgICAgQGEgY2IgaGFzIGEg
c3VwZXItbGluZWFyIGNvbXBsZXhpdHkuCisKKyAgICBAbm90ZSBBIFVURi04IGJ5dGUgb3JkZXIg
bWFyayBpcyBzaWxlbnRseSBpZ25vcmVkLgorCisgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxl
IGJlbG93IGRlbW9uc3RyYXRlcyB0aGUgYHBhcnNlKClgIGZ1bmN0aW9uIHJlYWRpbmcKKyAgICBm
cm9tIGFuIGl0ZXJhdG9yIHJhbmdlLixwYXJzZV9faXRlcmF0b3J0eXBlX19wYXJzZXJfY2FsbGJh
Y2tfdH0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDIuMC4zCisgICAgKi8KKyAgICB0ZW1wbGF0ZTxj
bGFzcyBJdGVyYXRvclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAorICAgICAgICAgICAg
ICAgICBzdGQ6OmlzX2Jhc2Vfb2Y8CisgICAgICAgICAgICAgICAgICAgICBzdGQ6OnJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnLAorICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjpp
dGVyYXRvcl90cmFpdHM8SXRlcmF0b3JUeXBlPjo6aXRlcmF0b3JfY2F0ZWdvcnk+Ojp2YWx1ZSwg
aW50Pjo6dHlwZSA9IDA+CisgICAgc3RhdGljIGJhc2ljX2pzb24gcGFyc2UoSXRlcmF0b3JUeXBl
IGZpcnN0LCBJdGVyYXRvclR5cGUgbGFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBwYXJzZXJfY2FsbGJhY2tfdCBjYiA9IG51bGxwdHIpCisgICAgeworICAgICAgICAvLyBh
c3NlcnRpb24gdG8gY2hlY2sgdGhhdCB0aGUgaXRlcmF0b3IgcmFuZ2UgaXMgaW5kZWVkIGNvbnRp
Z3VvdXMsCisgICAgICAgIC8vIHNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zNTAwODg0
Mi8yNjYzNzggZm9yIG1vcmUgZGlzY3Vzc2lvbgorICAgICAgICBhc3NlcnQoc3RkOjphY2N1bXVs
YXRlKGZpcnN0LCBsYXN0LCBzdGQ6Om1ha2VfcGFpcjxib29sLCBpbnQ+KHRydWUsIDApLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsmZmlyc3RdKHN0ZDo6cGFpcjxib29sLCBpbnQ+
IHJlcywgZGVjbHR5cGUoKmZpcnN0KSB2YWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlcy5m
aXJzdCAmPSAodmFsID09ICooc3RkOjpuZXh0KHN0ZDo6YWRkcmVzc29mKCpmaXJzdCksIHJlcy5z
ZWNvbmQrKykpKTsKKyAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgIH0pLmZpcnN0KTsK
KworICAgICAgICAvLyBhc3NlcnRpb24gdG8gY2hlY2sgdGhhdCBlYWNoIGVsZW1lbnQgaXMgMSBi
eXRlIGxvbmcKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YodHlwZW5hbWUgc3RkOjppdGVy
YXRvcl90cmFpdHM8SXRlcmF0b3JUeXBlPjo6dmFsdWVfdHlwZSkgPT0gMSwKKyAgICAgICAgICAg
ICAgICAgICAgICAiZWFjaCBlbGVtZW50IGluIHRoZSBpdGVyYXRvciByYW5nZSBtdXN0IGhhdmUg
dGhlIHNpemUgb2YgMSBieXRlIik7CisKKyAgICAgICAgLy8gaWYgaXRlcmF0b3IgcmFuZ2UgaXMg
ZW1wdHksIGNyZWF0ZSBhIHBhcnNlciB3aXRoIGFuIGVtcHR5IHN0cmluZworICAgICAgICAvLyB0
byBnZW5lcmF0ZSAidW5leHBlY3RlZCBFT0YiIGVycm9yIG1lc3NhZ2UKKyAgICAgICAgaWYgKHN0
ZDo6ZGlzdGFuY2UoZmlyc3QsIGxhc3QpIDw9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBwYXJzZXIoIiIpLnBhcnNlKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcGFy
c2VyKGZpcnN0LCBsYXN0LCBjYikucGFyc2UoKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJp
ZWYgZGVzZXJpYWxpemUgZnJvbSBhIGNvbnRhaW5lciB3aXRoIGNvbnRpZ3VvdXMgc3RvcmFnZQor
CisgICAgVGhpcyBmdW5jdGlvbiByZWFkcyBmcm9tIGEgY29udGFpbmVyIHdpdGggY29udGlndW91
cyBzdG9yYWdlIG9mIDEtYnl0ZQorICAgIHZhbHVlcy4gQ29tcGF0aWJsZSBjb250YWluZXIgdHlw
ZXMgaW5jbHVkZSBgc3RkOjp2ZWN0b3JgLCBgc3RkOjpzdHJpbmdgLAorICAgIGBzdGQ6OmFycmF5
YCwgYW5kIGBzdGQ6OmluaXRpYWxpemVyX2xpc3RgLiBVc2VyLWRlZmluZWQgY29udGFpbmVycyBj
YW4gYmUKKyAgICB1c2VkIGFzIGxvbmcgYXMgdGhleSBpbXBsZW1lbnQgcmFuZG9tLWFjY2VzcyBp
dGVyYXRvcnMgYW5kIGEgY29udGlndW91cworICAgIHN0b3JhZ2UuCisKKyAgICBAcHJlIFRoZSBj
b250YWluZXIgc3RvcmFnZSBpcyBjb250aWd1b3VzLiBWaW9sYXRpbmcgdGhpcyBwcmVjb25kaXRp
b24KKyAgICB5aWVsZHMgdW5kZWZpbmVkIGJlaGF2aW9yLiAqKlRoaXMgcHJlY29uZGl0aW9uIGlz
IGVuZm9yY2VkIHdpdGggYW4KKyAgICBhc3NlcnRpb24uKioKKyAgICBAcHJlIEVhY2ggZWxlbWVu
dCBvZiB0aGUgY29udGFpbmVyIGhhcyBhIHNpemUgb2YgMSBieXRlLiBWaW9sYXRpbmcgdGhpcwor
ICAgIHByZWNvbmRpdGlvbiB5aWVsZHMgdW5kZWZpbmVkIGJlaGF2aW9yLiAqKlRoaXMgcHJlY29u
ZGl0aW9uIGlzIGVuZm9yY2VkCisgICAgd2l0aCBhIHN0YXRpYyBhc3NlcnRpb24uKioKKworICAg
IEB3YXJuaW5nIFRoZXJlIGlzIG5vIHdheSB0byBlbmZvcmNlIGFsbCBwcmVjb25kaXRpb25zIGF0
IGNvbXBpbGUtdGltZS4gSWYKKyAgICAgICAgICAgICB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdp
dGggYSBub25jb21wbGlhbnQgY29udGFpbmVyIGFuZCB3aXRoCisgICAgICAgICAgICAgYXNzZXJ0
aW9ucyBzd2l0Y2hlZCBvZmYsIHRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQgYW5kIHdpbGwgbW9z
dAorICAgICAgICAgICAgIGxpa2VseSB5aWVsZCBzZWdtZW50YXRpb24gdmlvbGF0aW9uLgorCisg
ICAgQHRwYXJhbSBDb250aWd1b3VzQ29udGFpbmVyIGNvbnRhaW5lciB0eXBlIHdpdGggY29udGln
dW91cyBzdG9yYWdlCisgICAgQHBhcmFtW2luXSBjICBjb250YWluZXIgdG8gcmVhZCBmcm9tCisg
ICAgQHBhcmFtW2luXSBjYiAgYSBwYXJzZXIgY2FsbGJhY2sgZnVuY3Rpb24gb2YgdHlwZSBAcmVm
IHBhcnNlcl9jYWxsYmFja190CisgICAgd2hpY2ggaXMgdXNlZCB0byBjb250cm9sIHRoZSBkZXNl
cmlhbGl6YXRpb24gYnkgZmlsdGVyaW5nIHVud2FudGVkIHZhbHVlcworICAgIChvcHRpb25hbCkK
KworICAgIEByZXR1cm4gcmVzdWx0IG9mIHRoZSBkZXNlcmlhbGl6YXRpb24KKworICAgIEBjb21w
bGV4aXR5IExpbmVhciBpbiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dC4gVGhlIHBhcnNlciBpcyBh
IHByZWRpY3RpdmUKKyAgICBMTCgxKSBwYXJzZXIuIFRoZSBjb21wbGV4aXR5IGNhbiBiZSBoaWdo
ZXIgaWYgdGhlIHBhcnNlciBjYWxsYmFjayBmdW5jdGlvbgorICAgIEBhIGNiIGhhcyBhIHN1cGVy
LWxpbmVhciBjb21wbGV4aXR5LgorCisgICAgQG5vdGUgQSBVVEYtOCBieXRlIG9yZGVyIG1hcmsg
aXMgc2lsZW50bHkgaWdub3JlZC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBiZWxv
dyBkZW1vbnN0cmF0ZXMgdGhlIGBwYXJzZSgpYCBmdW5jdGlvbiByZWFkaW5nCisgICAgZnJvbSBh
IGNvbnRpZ3VvdXMgY29udGFpbmVyLixwYXJzZV9fY29udGlndW91c2NvbnRhaW5lcl9fcGFyc2Vy
X2NhbGxiYWNrX3R9CisKKyAgICBAc2luY2UgdmVyc2lvbiAyLjAuMworICAgICovCisgICAgdGVt
cGxhdGU8Y2xhc3MgQ29udGlndW91c0NvbnRhaW5lciwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
CisgICAgICAgICAgICAgICAgIG5vdCBzdGQ6OmlzX3BvaW50ZXI8Q29udGlndW91c0NvbnRhaW5l
cj46OnZhbHVlIGFuZAorICAgICAgICAgICAgICAgICBzdGQ6OmlzX2Jhc2Vfb2Y8CisgICAgICAg
ICAgICAgICAgICAgICBzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLAorICAgICAgICAg
ICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8ZGVjbHR5cGUoc3RkOjpi
ZWdpbihzdGQ6OmRlY2x2YWw8Q29udGlndW91c0NvbnRhaW5lciBjb25zdD4oKSkpPjo6aXRlcmF0
b3JfY2F0ZWdvcnk+Ojp2YWx1ZQorICAgICAgICAgICAgICAgICAsIGludD46OnR5cGUgPSAwPgor
ICAgIHN0YXRpYyBiYXNpY19qc29uIHBhcnNlKGNvbnN0IENvbnRpZ3VvdXNDb250YWluZXImIGMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VyX2NhbGxiYWNrX3QgY2Ig
PSBudWxscHRyKQorICAgIHsKKyAgICAgICAgLy8gZGVsZWdhdGUgdGhlIGNhbGwgdG8gdGhlIGl0
ZXJhdG9yLXJhbmdlIHBhcnNlIG92ZXJsb2FkCisgICAgICAgIHJldHVybiBwYXJzZShzdGQ6OmJl
Z2luKGMpLCBzdGQ6OmVuZChjKSwgY2IpOworICAgIH0KKworICAgIC8qIQorICAgIEBicmllZiBk
ZXNlcmlhbGl6ZSBmcm9tIHN0cmVhbQorCisgICAgRGVzZXJpYWxpemVzIGFuIGlucHV0IHN0cmVh
bSB0byBhIEpTT04gdmFsdWUuCisKKyAgICBAcGFyYW1baW4sb3V0XSBpICBpbnB1dCBzdHJlYW0g
dG8gcmVhZCBhIHNlcmlhbGl6ZWQgSlNPTiB2YWx1ZSBmcm9tCisgICAgQHBhcmFtW2luLG91dF0g
aiAgSlNPTiB2YWx1ZSB0byB3cml0ZSB0aGUgZGVzZXJpYWxpemVkIGlucHV0IHRvCisKKyAgICBA
dGhyb3cgc3RkOjppbnZhbGlkX2FyZ3VtZW50IGluIGNhc2Ugb2YgcGFyc2UgZXJyb3JzCisKKyAg
ICBAY29tcGxleGl0eSBMaW5lYXIgaW4gdGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQuIFRoZSBwYXJz
ZXIgaXMgYSBwcmVkaWN0aXZlCisgICAgTEwoMSkgcGFyc2VyLgorCisgICAgQG5vdGUgQSBVVEYt
OCBieXRlIG9yZGVyIG1hcmsgaXMgc2lsZW50bHkgaWdub3JlZC4KKworICAgIEBsaXZlZXhhbXBs
ZXtUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyBob3cgYSBKU09OIHZhbHVlIGlzIGNvbnN0cnVjdGVk
IGJ5CisgICAgcmVhZGluZyBhIHNlcmlhbGl6YXRpb24gZnJvbSBhIHN0cmVhbS4sb3BlcmF0b3Jf
ZGVzZXJpYWxpemV9CisKKyAgICBAc2EgcGFyc2Uoc3RkOjppc3RyZWFtJiwgY29uc3QgcGFyc2Vy
X2NhbGxiYWNrX3QpIGZvciBhIHZhcmlhbnQgd2l0aCBhCisgICAgcGFyc2VyIGNhbGxiYWNrIGZ1
bmN0aW9uIHRvIGZpbHRlciB2YWx1ZXMgd2hpbGUgcGFyc2luZworCisgICAgQHNpbmNlIHZlcnNp
b24gMS4wLjAKKyAgICAqLworICAgIGZyaWVuZCBzdGQ6OmlzdHJlYW0mIG9wZXJhdG9yPDwoYmFz
aWNfanNvbiYgaiwgc3RkOjppc3RyZWFtJiBpKQorICAgIHsKKyAgICAgICAgaiA9IHBhcnNlcihp
KS5wYXJzZSgpOworICAgICAgICByZXR1cm4gaTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJp
ZWYgZGVzZXJpYWxpemUgZnJvbSBzdHJlYW0KKyAgICBAY29weWRvYyBvcGVyYXRvcjw8KGJhc2lj
X2pzb24mLCBzdGQ6OmlzdHJlYW0mKQorICAgICovCisgICAgZnJpZW5kIHN0ZDo6aXN0cmVhbSYg
b3BlcmF0b3I+PihzdGQ6OmlzdHJlYW0mIGksIGJhc2ljX2pzb24mIGopCisgICAgeworICAgICAg
ICBqID0gcGFyc2VyKGkpLnBhcnNlKCk7CisgICAgICAgIHJldHVybiBpOworICAgIH0KKworICAg
IC8vLyBAfQorCisKKyAgcHJpdmF0ZToKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
KyAgICAvLyBjb252ZW5pZW5jZSBmdW5jdGlvbnMgLy8KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8KKworICAgIC8qIQorICAgIEBicmllZiByZXR1cm4gdGhlIHR5cGUgYXMgc3RyaW5n
CisKKyAgICBSZXR1cm5zIHRoZSB0eXBlIG5hbWUgYXMgc3RyaW5nIHRvIGJlIHVzZWQgaW4gZXJy
b3IgbWVzc2FnZXMgLSB1c3VhbGx5IHRvCisgICAgaW5kaWNhdGUgdGhhdCBhIGZ1bmN0aW9uIHdh
cyBjYWxsZWQgb24gYSB3cm9uZyBKU09OIHR5cGUuCisKKyAgICBAcmV0dXJuIGJhc2ljYWxseSBh
IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHRoZSBAYSBtX3R5cGUgbWVtYmVyCisKKyAgICBA
Y29tcGxleGl0eSBDb25zdGFudC4KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8K
KyAgICBzdGQ6OnN0cmluZyB0eXBlX25hbWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNo
IChtX3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVsbDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gIm51bGwiOworICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpv
YmplY3Q6CisgICAgICAgICAgICAgICAgcmV0dXJuICJvYmplY3QiOworICAgICAgICAgICAgY2Fz
ZSB2YWx1ZV90OjphcnJheToKKyAgICAgICAgICAgICAgICByZXR1cm4gImFycmF5IjsKKyAgICAg
ICAgICAgIGNhc2UgdmFsdWVfdDo6c3RyaW5nOgorICAgICAgICAgICAgICAgIHJldHVybiAic3Ry
aW5nIjsKKyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6Ym9vbGVhbjoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gImJvb2xlYW4iOworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpkaXNjYXJkZWQ6
CisgICAgICAgICAgICAgICAgcmV0dXJuICJkaXNjYXJkZWQiOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIm51bWJlciI7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvKiEKKyAgICBAYnJpZWYgY2FsY3VsYXRlcyB0aGUgZXh0cmEgc3BhY2UgdG8gZXNjYXBl
IGEgSlNPTiBzdHJpbmcKKworICAgIEBwYXJhbVtpbl0gcyAgdGhlIHN0cmluZyB0byBlc2NhcGUK
KyAgICBAcmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyByZXF1aXJlZCB0byBlc2NhcGUg
c3RyaW5nIEBhIHMKKworICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgbGVuZ3RoIG9mIHN0
cmluZyBAYSBzLgorICAgICovCisgICAgc3RhdGljIHN0ZDo6c2l6ZV90IGV4dHJhX3NwYWNlKGNv
bnN0IHN0cmluZ190JiBzKSBub2V4Y2VwdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6YWNj
dW11bGF0ZShzLmJlZ2luKCksIHMuZW5kKCksIHNpemVfdHt9LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFtdKHNpemVfdCByZXMsIHR5cGVuYW1lIHN0cmluZ190Ojp2YWx1ZV90eXBl
IGMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBjYXNlICciJzoKKyAgICAgICAgICAgICAgICBjYXNlICdcXCc6CisgICAg
ICAgICAgICAgICAgY2FzZSAnXGInOgorICAgICAgICAgICAgICAgIGNhc2UgJ1xmJzoKKyAgICAg
ICAgICAgICAgICBjYXNlICdcbic6CisgICAgICAgICAgICAgICAgY2FzZSAnXHInOgorICAgICAg
ICAgICAgICAgIGNhc2UgJ1x0JzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIGZyb20gYyAoMSBieXRlKSB0byBceCAoMiBieXRlcykKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlcyArIDE7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjID49
IDB4MDAgYW5kIGMgPD0gMHgxZikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZnJvbSBjICgxIGJ5dGUpIHRvIFx1eHh4eCAoNiBieXRlcykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZXMgKyA1OworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAg
LyohCisgICAgQGJyaWVmIGVzY2FwZSBhIHN0cmluZworCisgICAgRXNjYXBlIGEgc3RyaW5nIGJ5
IHJlcGxhY2luZyBjZXJ0YWluIHNwZWNpYWwgY2hhcmFjdGVycyBieSBhIHNlcXVlbmNlIG9mCisg
ICAgYW4gZXNjYXBlIGNoYXJhY3RlciAoYmFja3NsYXNoKSBhbmQgYW5vdGhlciBjaGFyYWN0ZXIg
YW5kIG90aGVyIGNvbnRyb2wKKyAgICBjaGFyYWN0ZXJzIGJ5IGEgc2VxdWVuY2Ugb2YgIlx1IiBm
b2xsb3dlZCBieSBhIGZvdXItZGlnaXQgaGV4CisgICAgcmVwcmVzZW50YXRpb24uCisKKyAgICBA
cGFyYW1baW5dIHMgIHRoZSBzdHJpbmcgdG8gZXNjYXBlCisgICAgQHJldHVybiAgdGhlIGVzY2Fw
ZWQgc3RyaW5nCisKKyAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gdGhlIGxlbmd0aCBvZiBzdHJp
bmcgQGEgcy4KKyAgICAqLworICAgIHN0YXRpYyBzdHJpbmdfdCBlc2NhcGVfc3RyaW5nKGNvbnN0
IHN0cmluZ190JiBzKQorICAgIHsKKyAgICAgICAgY29uc3QgYXV0byBzcGFjZSA9IGV4dHJhX3Nw
YWNlKHMpOworICAgICAgICBpZiAoc3BhY2UgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIHM7CisgICAgICAgIH0KKworICAgICAgICAvLyBjcmVhdGUgYSByZXN1bHQgc3RyaW5n
IG9mIG5lY2Vzc2FyeSBzaXplCisgICAgICAgIHN0cmluZ190IHJlc3VsdChzLnNpemUoKSArIHNw
YWNlLCAnXFwnKTsKKyAgICAgICAgc3RkOjpzaXplX3QgcG9zID0gMDsKKworICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIGMgOiBzKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGMpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gcXVvdGF0aW9uIG1hcmsgKDB4MjIpCisg
ICAgICAgICAgICAgICAgY2FzZSAnIic6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXN1bHRbcG9zICsgMV0gPSAnIic7CisgICAgICAgICAgICAgICAgICAgIHBvcyAr
PSAyOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAvLyByZXZlcnNlIHNvbGlkdXMgKDB4NWMpCisgICAgICAgICAgICAgICAg
Y2FzZSAnXFwnOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gbm90
aGluZyB0byBjaGFuZ2UKKyAgICAgICAgICAgICAgICAgICAgcG9zICs9IDI7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8v
IGJhY2tzcGFjZSAoMHgwOCkKKyAgICAgICAgICAgICAgICBjYXNlICdcYic6CisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXN1bHRbcG9zICsgMV0gPSAnYic7CisgICAg
ICAgICAgICAgICAgICAgIHBvcyArPSAyOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBmb3JtZmVlZCAoMHgwYykKKyAg
ICAgICAgICAgICAgICBjYXNlICdcZic6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXN1bHRbcG9zICsgMV0gPSAnZic7CisgICAgICAgICAgICAgICAgICAgIHBvcyAr
PSAyOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAvLyBuZXdsaW5lICgweDBhKQorICAgICAgICAgICAgICAgIGNhc2UgJ1xu
JzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtwb3MgKyAx
XSA9ICduJzsKKyAgICAgICAgICAgICAgICAgICAgcG9zICs9IDI7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGNhcnJp
YWdlIHJldHVybiAoMHgwZCkKKyAgICAgICAgICAgICAgICBjYXNlICdccic6CisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXN1bHRbcG9zICsgMV0gPSAncic7CisgICAg
ICAgICAgICAgICAgICAgIHBvcyArPSAyOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBob3Jpem9udGFsIHRhYiAoMHgw
OSkKKyAgICAgICAgICAgICAgICBjYXNlICdcdCc6CisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXN1bHRbcG9zICsgMV0gPSAndCc7CisgICAgICAgICAgICAgICAgICAg
IHBvcyArPSAyOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGMgPj0gMHgwMCBhbmQgYyA8PSAweDFmKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IGEgbnVtYmVyIDAuLjE1
IHRvIGl0cyBoZXggcmVwcmVzZW50YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICgw
Li5mKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgaGV4aWZ5WzE2
XSA9CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJzgnLCAnOScsICdhJywgJ2InLCAnYycsICdkJywgJ2UnLCAnZicKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBy
aW50IGNoYXJhY3RlciBjIGFzIFx1eHh4eAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChj
b25zdCBjaGFyIG0gOgorICAgICAgICAgICAgICAgICAgICB7ICd1JywgJzAnLCAnMCcsIGhleGlm
eVtjID4+IDRdLCBoZXhpZnlbYyAmIDB4MGZdCisgICAgICAgICAgICAgICAgICAgICAgICB9KQor
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdFsrK3Bvc10gPSBtOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICArK3BvczsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGFsbCBvdGhlciBjaGFyYWN0ZXJzIGFyZSBhZGRlZCBhcy1pcworICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0W3BvcysrXSA9IGM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiEK
KyAgICBAYnJpZWYgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIHNlcmlhbGl6YXRpb24g
ZnVuY3Rpb24KKworICAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBwdWJsaWMgbWVt
YmVyIGZ1bmN0aW9uIGR1bXAgYW5kIG9yZ2FuaXplcworICAgIHRoZSBzZXJpYWxpemF0aW9uIGlu
dGVybmFsbHkuIFRoZSBpbmRlbnRhdGlvbiBsZXZlbCBpcyBwcm9wYWdhdGVkIGFzCisgICAgYWRk
aXRpb25hbCBwYXJhbWV0ZXIuIEluIGNhc2Ugb2YgYXJyYXlzIGFuZCBvYmplY3RzLCB0aGUgZnVu
Y3Rpb24gaXMKKyAgICBjYWxsZWQgcmVjdXJzaXZlbHkuIE5vdGUgdGhhdAorCisgICAgLSBzdHJp
bmdzIGFuZCBvYmplY3Qga2V5cyBhcmUgZXNjYXBlZCB1c2luZyBgZXNjYXBlX3N0cmluZygpYAor
ICAgIC0gaW50ZWdlciBudW1iZXJzIGFyZSBjb252ZXJ0ZWQgaW1wbGljaXRseSB2aWEgYG9wZXJh
dG9yPDxgCisgICAgLSBmbG9hdGluZy1wb2ludCBudW1iZXJzIGFyZSBjb252ZXJ0ZWQgdG8gYSBz
dHJpbmcgdXNpbmcgYCIlZyJgIGZvcm1hdAorCisgICAgQHBhcmFtW291dF0gbyAgICAgICAgICAg
ICAgc3RyZWFtIHRvIHdyaXRlIHRvCisgICAgQHBhcmFtW2luXSBwcmV0dHlfcHJpbnQgICAgd2hl
dGhlciB0aGUgb3V0cHV0IHNoYWxsIGJlIHByZXR0eS1wcmludGVkCisgICAgQHBhcmFtW2luXSBp
bmRlbnRfc3RlcCAgICAgdGhlIGluZGVudCBsZXZlbAorICAgIEBwYXJhbVtpbl0gY3VycmVudF9p
bmRlbnQgIHRoZSBjdXJyZW50IGluZGVudCBsZXZlbCAob25seSB1c2VkIGludGVybmFsbHkpCisg
ICAgKi8KKyAgICB2b2lkIGR1bXAoc3RkOjpvc3RyZWFtJiBvLAorICAgICAgICAgICAgICBjb25z
dCBib29sIHByZXR0eV9wcmludCwKKyAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGlu
ZGVudF9zdGVwLAorICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgY3VycmVudF9pbmRl
bnQgPSAwKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gdmFyaWFibGUgdG8gaG9sZCBpbmRlbnRh
dGlvbiBmb3IgcmVjdXJzaXZlIGNhbGxzCisgICAgICAgIHVuc2lnbmVkIGludCBuZXdfaW5kZW50
ID0gY3VycmVudF9pbmRlbnQ7CisKKyAgICAgICAgc3dpdGNoIChtX3R5cGUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6b2JqZWN0OgorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmIChtX3ZhbHVlLm9iamVjdC0+ZW1wdHkoKSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIG8gPDwgInt9IjsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG8gPDwgInsiOworCisg
ICAgICAgICAgICAgICAgLy8gaW5jcmVhc2UgaW5kZW50YXRpb24KKyAgICAgICAgICAgICAgICBp
ZiAocHJldHR5X3ByaW50KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
bmV3X2luZGVudCArPSBpbmRlbnRfc3RlcDsKKyAgICAgICAgICAgICAgICAgICAgbyA8PCAiXG4i
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZvciAoYXV0byBpID0gbV92
YWx1ZS5vYmplY3QtPmNiZWdpbigpOyBpICE9IG1fdmFsdWUub2JqZWN0LT5jZW5kKCk7ICsraSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpICE9IG1fdmFsdWUu
b2JqZWN0LT5jYmVnaW4oKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbyA8PCAocHJldHR5X3ByaW50ID8gIixcbiIgOiAiLCIpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG8gPDwgc3RyaW5nX3QobmV3X2luZGVudCwg
JyAnKSA8PCAiXCIiCisgICAgICAgICAgICAgICAgICAgICAgPDwgZXNjYXBlX3N0cmluZyhpLT5m
aXJzdCkgPDwgIlwiOiIKKyAgICAgICAgICAgICAgICAgICAgICA8PCAocHJldHR5X3ByaW50ID8g
IiAiIDogIiIpOworICAgICAgICAgICAgICAgICAgICBpLT5zZWNvbmQuZHVtcChvLCBwcmV0dHlf
cHJpbnQsIGluZGVudF9zdGVwLCBuZXdfaW5kZW50KTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAvLyBkZWNyZWFzZSBpbmRlbnRhdGlvbgorICAgICAgICAgICAgICAgIGlm
IChwcmV0dHlfcHJpbnQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBu
ZXdfaW5kZW50IC09IGluZGVudF9zdGVwOworICAgICAgICAgICAgICAgICAgICBvIDw8ICJcbiI7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbyA8PCBzdHJpbmdfdChuZXdf
aW5kZW50LCAnICcpICsgIn0iOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAobV92YWx1ZS5hcnJheS0+ZW1wdHkoKSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIG8gPDwgIltdIjsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG8gPDwgIlsiOwor
CisgICAgICAgICAgICAgICAgLy8gaW5jcmVhc2UgaW5kZW50YXRpb24KKyAgICAgICAgICAgICAg
ICBpZiAocHJldHR5X3ByaW50KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgbmV3X2luZGVudCArPSBpbmRlbnRfc3RlcDsKKyAgICAgICAgICAgICAgICAgICAgbyA8PCAi
XG4iOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZvciAoYXV0byBpID0g
bV92YWx1ZS5hcnJheS0+Y2JlZ2luKCk7IGkgIT0gbV92YWx1ZS5hcnJheS0+Y2VuZCgpOyArK2kp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSBtX3ZhbHVl
LmFycmF5LT5jYmVnaW4oKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbyA8PCAocHJldHR5X3ByaW50ID8gIixcbiIgOiAiLCIpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG8gPDwgc3RyaW5nX3QobmV3X2luZGVudCwg
JyAnKTsKKyAgICAgICAgICAgICAgICAgICAgaS0+ZHVtcChvLCBwcmV0dHlfcHJpbnQsIGluZGVu
dF9zdGVwLCBuZXdfaW5kZW50KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAvLyBkZWNyZWFzZSBpbmRlbnRhdGlvbgorICAgICAgICAgICAgICAgIGlmIChwcmV0dHlfcHJp
bnQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBuZXdfaW5kZW50IC09
IGluZGVudF9zdGVwOworICAgICAgICAgICAgICAgICAgICBvIDw8ICJcbiI7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgbyA8PCBzdHJpbmdfdChuZXdfaW5kZW50LCAnICcp
IDw8ICJdIjsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGNhc2UgdmFsdWVfdDo6c3RyaW5nOgorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG8gPDwgc3RyaW5nX3QoIlwiIikgPDwgZXNjYXBlX3N0cmluZygqbV92YWx1ZS5zdHJpbmcp
IDw8ICJcIiI7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBjYXNlIHZhbHVlX3Q6OmJvb2xlYW46CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgbyA8PCAobV92YWx1ZS5ib29sZWFuID8gInRydWUiIDogImZhbHNlIik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIHZhbHVl
X3Q6Om51bWJlcl9pbnRlZ2VyOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG8gPDwg
bV92YWx1ZS5udW1iZXJfaW50ZWdlcjsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkOgorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG8gPDwgbV92YWx1ZS5udW1iZXJfdW5zaWduZWQ7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBj
YXNlIHZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAobV92YWx1ZS5udW1iZXJfZmxvYXQgPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IgemVybyB0byBnZXQgIjAuMCIvIi0w
LjAiCisgICAgICAgICAgICAgICAgICAgIG8gPDwgKHN0ZDo6c2lnbmJpdChtX3ZhbHVlLm51bWJl
cl9mbG9hdCkgPyAiLTAuMCIgOiAiMC4wIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG8gPDwg
bV92YWx1ZS5udW1iZXJfZmxvYXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpkaXNj
YXJkZWQ6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbyA8PCAiPGRpc2NhcmRlZD4i
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Y2FzZSB2YWx1ZV90OjpudWxsOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG8gPDwg
Im51bGwiOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICBwcml2YXRlOgorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAv
LyBtZW1iZXIgdmFyaWFibGVzIC8vCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAg
Ly8vIHRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IGVsZW1lbnQKKyAgICB2YWx1ZV90IG1fdHlwZSA9
IHZhbHVlX3Q6Om51bGw7CisKKyAgICAvLy8gdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IGVsZW1l
bnQKKyAgICBqc29uX3ZhbHVlIG1fdmFsdWUgPSB7fTsKKworCisgIHByaXZhdGU6CisgICAgLy8v
Ly8vLy8vLy8vLy8vCisgICAgLy8gaXRlcmF0b3JzIC8vCisgICAgLy8vLy8vLy8vLy8vLy8vCisK
KyAgICAvKiEKKyAgICBAYnJpZWYgYW4gaXRlcmF0b3IgZm9yIHByaW1pdGl2ZSBKU09OIHR5cGVz
CisKKyAgICBUaGlzIGNsYXNzIG1vZGVscyBhbiBpdGVyYXRvciBmb3IgcHJpbWl0aXZlIEpTT04g
dHlwZXMgKGJvb2xlYW4sIG51bWJlciwKKyAgICBzdHJpbmcpLiBJdCdzIG9ubHkgcHVycG9zZSBp
cyB0byBhbGxvdyB0aGUgaXRlcmF0b3IvY29uc3RfaXRlcmF0b3IgY2xhc3NlcworICAgIHRvICJp
dGVyYXRlIiBvdmVyIHByaW1pdGl2ZSB2YWx1ZXMuIEludGVybmFsbHksIHRoZSBpdGVyYXRvciBp
cyBtb2RlbGVkIGJ5CisgICAgYSBgZGlmZmVyZW5jZV90eXBlYCB2YXJpYWJsZS4gVmFsdWUgYmVn
aW5fdmFsdWUgKGAwYCkgbW9kZWxzIHRoZSBiZWdpbiwKKyAgICBlbmRfdmFsdWUgKGAxYCkgbW9k
ZWxzIHBhc3QgdGhlIGVuZC4KKyAgICAqLworICAgIGNsYXNzIHByaW1pdGl2ZV9pdGVyYXRvcl90
CisgICAgeworICAgICAgcHVibGljOgorICAgICAgICAvLy8gc2V0IGl0ZXJhdG9yIHRvIGEgZGVm
aW5lZCBiZWdpbm5pbmcKKyAgICAgICAgdm9pZCBzZXRfYmVnaW4oKSBub2V4Y2VwdAorICAgICAg
ICB7CisgICAgICAgICAgICBtX2l0ID0gYmVnaW5fdmFsdWU7CisgICAgICAgIH0KKworICAgICAg
ICAvLy8gc2V0IGl0ZXJhdG9yIHRvIGEgZGVmaW5lZCBwYXN0IHRoZSBlbmQKKyAgICAgICAgdm9p
ZCBzZXRfZW5kKCkgbm9leGNlcHQKKyAgICAgICAgeworICAgICAgICAgICAgbV9pdCA9IGVuZF92
YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyByZXR1cm4gd2hldGhlciB0aGUgaXRlcmF0
b3IgY2FuIGJlIGRlcmVmZXJlbmNlZAorICAgICAgICBjb25zdGV4cHIgYm9vbCBpc19iZWdpbigp
IGNvbnN0IG5vZXhjZXB0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAobV9pdCA9PSBi
ZWdpbl92YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICAvLy8gcmV0dXJuIHdoZXRoZXIgdGhl
IGl0ZXJhdG9yIGlzIGF0IGVuZAorICAgICAgICBjb25zdGV4cHIgYm9vbCBpc19lbmQoKSBjb25z
dCBub2V4Y2VwdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKG1faXQgPT0gZW5kX3Zh
bHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyByZXR1cm4gcmVmZXJlbmNlIHRvIHRoZSB2
YWx1ZSB0byBjaGFuZ2UgYW5kIGNvbXBhcmUKKyAgICAgICAgb3BlcmF0b3IgZGlmZmVyZW5jZV90
eXBlJiAoKSBub2V4Y2VwdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pdDsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vLyByZXR1cm4gdmFsdWUgdG8gY29tcGFyZQorICAgICAgICBj
b25zdGV4cHIgb3BlcmF0b3IgZGlmZmVyZW5jZV90eXBlICgpIGNvbnN0IG5vZXhjZXB0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2l0OworICAgICAgICB9CisKKyAgICAgIHByaXZh
dGU6CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgZGlmZmVyZW5jZV90eXBlIGJlZ2luX3ZhbHVl
ID0gMDsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBkaWZmZXJlbmNlX3R5cGUgZW5kX3ZhbHVl
ID0gYmVnaW5fdmFsdWUgKyAxOworCisgICAgICAgIC8vLyBpdGVyYXRvciBhcyBzaWduZWQgaW50
ZWdlciB0eXBlCisgICAgICAgIGRpZmZlcmVuY2VfdHlwZSBtX2l0ID0gc3RkOjpudW1lcmljX2xp
bWl0czxzdGQ6OnB0cmRpZmZfdD46OmRlbm9ybV9taW4oKTsKKyAgICB9OworCisgICAgLyohCisg
ICAgQGJyaWVmIGFuIGl0ZXJhdG9yIHZhbHVlCisKKyAgICBAbm90ZSBUaGlzIHN0cnVjdHVyZSBj
b3VsZCBlYXNpbHkgYmUgYSB1bmlvbiwgYnV0IE1TVkMgY3VycmVudGx5IGRvZXMgbm90CisgICAg
YWxsb3cgdW5pb25zIG1lbWJlcnMgd2l0aCBjb21wbGV4IGNvbnN0cnVjdG9ycywgc2VlCisgICAg
aHR0cHM6Ly9naXRodWIuY29tL25sb2htYW5uL2pzb24vcHVsbC8xMDUuCisgICAgKi8KKyAgICBz
dHJ1Y3QgaW50ZXJuYWxfaXRlcmF0b3IKKyAgICB7CisgICAgICAgIC8vLyBpdGVyYXRvciBmb3Ig
SlNPTiBvYmplY3RzCisgICAgICAgIHR5cGVuYW1lIG9iamVjdF90OjppdGVyYXRvciBvYmplY3Rf
aXRlcmF0b3I7CisgICAgICAgIC8vLyBpdGVyYXRvciBmb3IgSlNPTiBhcnJheXMKKyAgICAgICAg
dHlwZW5hbWUgYXJyYXlfdDo6aXRlcmF0b3IgYXJyYXlfaXRlcmF0b3I7CisgICAgICAgIC8vLyBn
ZW5lcmljIGl0ZXJhdG9yIGZvciBhbGwgb3RoZXIgdHlwZXMKKyAgICAgICAgcHJpbWl0aXZlX2l0
ZXJhdG9yX3QgcHJpbWl0aXZlX2l0ZXJhdG9yOworCisgICAgICAgIC8vLyBjcmVhdGUgYW4gdW5p
bml0aWFsaXplZCBpbnRlcm5hbF9pdGVyYXRvcgorICAgICAgICBpbnRlcm5hbF9pdGVyYXRvcigp
IG5vZXhjZXB0CisgICAgICAgICAgICA6IG9iamVjdF9pdGVyYXRvcigpLCBhcnJheV9pdGVyYXRv
cigpLCBwcmltaXRpdmVfaXRlcmF0b3IoKQorICAgICAgICB7fQorICAgIH07CisKKyAgICAvLy8g
cHJveHkgY2xhc3MgZm9yIHRoZSBpdGVyYXRvcl93cmFwcGVyIGZ1bmN0aW9ucworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KKyAgICBjbGFzcyBpdGVyYXRpb25fcHJveHkKKyAg
ICB7CisgICAgICBwcml2YXRlOgorICAgICAgICAvLy8gaGVscGVyIGNsYXNzIGZvciBpdGVyYXRp
b24KKyAgICAgICAgY2xhc3MgaXRlcmF0aW9uX3Byb3h5X2ludGVybmFsCisgICAgICAgIHsKKyAg
ICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgLy8vIHRoZSBpdGVyYXRvcgorICAgICAgICAg
ICAgSXRlcmF0b3JUeXBlIGFuY2hvcjsKKyAgICAgICAgICAgIC8vLyBhbiBpbmRleCBmb3IgYXJy
YXlzICh1c2VkIHRvIGNyZWF0ZSBrZXkgbmFtZXMpCisgICAgICAgICAgICBzaXplX3QgYXJyYXlf
aW5kZXggPSAwOworCisgICAgICAgICAgcHVibGljOgorICAgICAgICAgICAgZXhwbGljaXQgaXRl
cmF0aW9uX3Byb3h5X2ludGVybmFsKEl0ZXJhdG9yVHlwZSBpdCkgbm9leGNlcHQKKyAgICAgICAg
ICAgICAgICA6IGFuY2hvcihpdCkKKyAgICAgICAgICAgIHt9CisKKyAgICAgICAgICAgIC8vLyBk
ZXJlZmVyZW5jZSBvcGVyYXRvciAobmVlZGVkIGZvciByYW5nZS1iYXNlZCBmb3IpCisgICAgICAg
ICAgICBpdGVyYXRpb25fcHJveHlfaW50ZXJuYWwmIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLy8gaW5jcmVtZW50IG9wZXJhdG9yIChuZWVkZWQgZm9yIHJhbmdlLWJhc2VkIGZvcikK
KyAgICAgICAgICAgIGl0ZXJhdGlvbl9wcm94eV9pbnRlcm5hbCYgb3BlcmF0b3IrKygpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgKythbmNob3I7CisgICAgICAgICAgICAgICAgKyth
cnJheV9pbmRleDsKKworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8vIGluZXF1YWxpdHkgb3BlcmF0b3IgKG5lZWRlZCBmb3IgcmFu
Z2UtYmFzZWQgZm9yKQorICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9IChjb25zdCBpdGVyYXRp
b25fcHJveHlfaW50ZXJuYWwmIG8pIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGFuY2hvciAhPSBvLmFuY2hvcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8vIHJldHVybiBrZXkgb2YgdGhlIGl0ZXJhdG9yCisgICAgICAgICAgICB0eXBlbmFtZSBi
YXNpY19qc29uOjpzdHJpbmdfdCBrZXkoKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGFzc2VydChhbmNob3IubV9vYmplY3QgIT0gbnVsbHB0cik7CisKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGFuY2hvci5tX29iamVjdC0+dHlwZSgpKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gdXNlIGludGVnZXIgYXJyYXkgaW5kZXggYXMga2V5Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YXJyYXk6CisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6OnRvX3N0cmluZyhhcnJh
eV9pbmRleCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAv
LyB1c2Uga2V5IGZyb20gdGhlIG9iamVjdAorICAgICAgICAgICAgICAgICAgICBjYXNlIHZhbHVl
X3Q6Om9iamVjdDoKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGFuY2hvci5rZXkoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIC8vIHVzZSBhbiBlbXB0eSBrZXkgZm9yIGFsbCBwcmltaXRpdmUgdHlwZXMK
KyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICIiOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLy8gcmV0dXJu
IHZhbHVlIG9mIHRoZSBpdGVyYXRvcgorICAgICAgICAgICAgdHlwZW5hbWUgSXRlcmF0b3JUeXBl
OjpyZWZlcmVuY2UgdmFsdWUoKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBhbmNob3IudmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAg
ICAgICAvLy8gdGhlIGNvbnRhaW5lciB0byBpdGVyYXRlCisgICAgICAgIHR5cGVuYW1lIEl0ZXJh
dG9yVHlwZTo6cmVmZXJlbmNlIGNvbnRhaW5lcjsKKworICAgICAgcHVibGljOgorICAgICAgICAv
Ly8gY29uc3RydWN0IGl0ZXJhdGlvbiBwcm94eSBmcm9tIGEgY29udGFpbmVyCisgICAgICAgIGV4
cGxpY2l0IGl0ZXJhdGlvbl9wcm94eSh0eXBlbmFtZSBJdGVyYXRvclR5cGU6OnJlZmVyZW5jZSBj
b250KQorICAgICAgICAgICAgOiBjb250YWluZXIoY29udCkKKyAgICAgICAge30KKworICAgICAg
ICAvLy8gcmV0dXJuIGl0ZXJhdG9yIGJlZ2luIChuZWVkZWQgZm9yIHJhbmdlLWJhc2VkIGZvcikK
KyAgICAgICAgaXRlcmF0aW9uX3Byb3h5X2ludGVybmFsIGJlZ2luKCkgbm9leGNlcHQKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdGlvbl9wcm94eV9pbnRlcm5hbChjb250YWlu
ZXIuYmVnaW4oKSk7CisgICAgICAgIH0KKworICAgICAgICAvLy8gcmV0dXJuIGl0ZXJhdG9yIGVu
ZCAobmVlZGVkIGZvciByYW5nZS1iYXNlZCBmb3IpCisgICAgICAgIGl0ZXJhdGlvbl9wcm94eV9p
bnRlcm5hbCBlbmQoKSBub2V4Y2VwdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXRl
cmF0aW9uX3Byb3h5X2ludGVybmFsKGNvbnRhaW5lci5lbmQoKSk7CisgICAgICAgIH0KKyAgICB9
OworCisgIHB1YmxpYzoKKyAgICAvKiEKKyAgICBAYnJpZWYgYSBjb25zdCByYW5kb20gYWNjZXNz
IGl0ZXJhdG9yIGZvciB0aGUgQHJlZiBiYXNpY19qc29uIGNsYXNzCisKKyAgICBUaGlzIGNsYXNz
IGltcGxlbWVudHMgYSBjb25zdCBpdGVyYXRvciBmb3IgdGhlIEByZWYgYmFzaWNfanNvbiBjbGFz
cy4gRnJvbQorICAgIHRoaXMgY2xhc3MsIHRoZSBAcmVmIGl0ZXJhdG9yIGNsYXNzIGlzIGRlcml2
ZWQuCisKKyAgICBAbm90ZSBBbiBpdGVyYXRvciBpcyBjYWxsZWQgKmluaXRpYWxpemVkKiB3aGVu
IGEgcG9pbnRlciB0byBhIEpTT04gdmFsdWUKKyAgICAgICAgICBoYXMgYmVlbiBzZXQgKGUuZy4s
IGJ5IGEgY29uc3RydWN0b3Igb3IgYSBjb3B5IGFzc2lnbm1lbnQpLiBJZiB0aGUKKyAgICAgICAg
ICBpdGVyYXRvciBpcyBkZWZhdWx0LWNvbnN0cnVjdGVkLCBpdCBpcyAqdW5pbml0aWFsaXplZCog
YW5kIG1vc3QKKyAgICAgICAgICBtZXRob2RzIGFyZSB1bmRlZmluZWQuICoqVGhlIGxpYnJhcnkg
dXNlcyBhc3NlcnRpb25zIHRvIGRldGVjdCBjYWxscworICAgICAgICAgIG9uIHVuaW5pdGlhbGl6
ZWQgaXRlcmF0b3JzLioqCisKKyAgICBAcmVxdWlyZW1lbnQgVGhlIGNsYXNzIHNhdGlzZmllcyB0
aGUgZm9sbG93aW5nIGNvbmNlcHQgcmVxdWlyZW1lbnRzOgorICAgIC0gW1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yKToKKyAgICAgIFRoZSBpdGVyYXRvciB0aGF0IGNhbiBiZSBtb3ZlZCB0byBw
b2ludCAoZm9yd2FyZCBhbmQgYmFja3dhcmQpIHRvIGFueQorICAgICAgZWxlbWVudCBpbiBjb25z
dGFudCB0aW1lLgorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLworICAgIGNsYXNz
IGNvbnN0X2l0ZXJhdG9yIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpyYW5kb21fYWNjZXNz
X2l0ZXJhdG9yX3RhZywgY29uc3QgYmFzaWNfanNvbj4KKyAgICB7CisgICAgICAgIC8vLyBhbGxv
dyBiYXNpY19qc29uIHRvIGFjY2VzcyBwcml2YXRlIG1lbWJlcnMKKyAgICAgICAgZnJpZW5kIGNs
YXNzIGJhc2ljX2pzb247CisKKyAgICAgIHB1YmxpYzoKKyAgICAgICAgLy8vIHRoZSB0eXBlIG9m
IHRoZSB2YWx1ZXMgd2hlbiB0aGUgaXRlcmF0b3IgaXMgZGVyZWZlcmVuY2VkCisgICAgICAgIHVz
aW5nIHZhbHVlX3R5cGUgPSB0eXBlbmFtZSBiYXNpY19qc29uOjp2YWx1ZV90eXBlOworICAgICAg
ICAvLy8gYSB0eXBlIHRvIHJlcHJlc2VudCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGl0ZXJhdG9ycwor
ICAgICAgICB1c2luZyBkaWZmZXJlbmNlX3R5cGUgPSB0eXBlbmFtZSBiYXNpY19qc29uOjpkaWZm
ZXJlbmNlX3R5cGU7CisgICAgICAgIC8vLyBkZWZpbmVzIGEgcG9pbnRlciB0byB0aGUgdHlwZSBp
dGVyYXRlZCBvdmVyICh2YWx1ZV90eXBlKQorICAgICAgICB1c2luZyBwb2ludGVyID0gdHlwZW5h
bWUgYmFzaWNfanNvbjo6Y29uc3RfcG9pbnRlcjsKKyAgICAgICAgLy8vIGRlZmluZXMgYSByZWZl
cmVuY2UgdG8gdGhlIHR5cGUgaXRlcmF0ZWQgb3ZlciAodmFsdWVfdHlwZSkKKyAgICAgICAgdXNp
bmcgcmVmZXJlbmNlID0gdHlwZW5hbWUgYmFzaWNfanNvbjo6Y29uc3RfcmVmZXJlbmNlOworICAg
ICAgICAvLy8gdGhlIGNhdGVnb3J5IG9mIHRoZSBpdGVyYXRvcgorICAgICAgICB1c2luZyBpdGVy
YXRvcl9jYXRlZ29yeSA9IHN0ZDo6YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWc7CisKKyAgICAg
ICAgLy8vIGRlZmF1bHQgY29uc3RydWN0b3IKKyAgICAgICAgY29uc3RfaXRlcmF0b3IoKSA9IGRl
ZmF1bHQ7CisKKyAgICAgICAgLyohCisgICAgICAgIEBicmllZiBjb25zdHJ1Y3RvciBmb3IgYSBn
aXZlbiBKU09OIGluc3RhbmNlCisgICAgICAgIEBwYXJhbVtpbl0gb2JqZWN0ICBwb2ludGVyIHRv
IGEgSlNPTiBvYmplY3QgZm9yIHRoaXMgaXRlcmF0b3IKKyAgICAgICAgQHByZSBvYmplY3QgIT0g
bnVsbHB0cgorICAgICAgICBAcG9zdCBUaGUgaXRlcmF0b3IgaXMgaW5pdGlhbGl6ZWQ7IGkuZS4g
YG1fb2JqZWN0ICE9IG51bGxwdHJgLgorICAgICAgICAqLworICAgICAgICBleHBsaWNpdCBjb25z
dF9pdGVyYXRvcihwb2ludGVyIG9iamVjdCkgbm9leGNlcHQKKyAgICAgICAgICAgIDogbV9vYmpl
Y3Qob2JqZWN0KQorICAgICAgICB7CisgICAgICAgICAgICBhc3NlcnQobV9vYmplY3QgIT0gbnVs
bHB0cik7CisKKyAgICAgICAgICAgIHN3aXRjaCAobV9vYmplY3QtPm1fdHlwZSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIGJhc2ljX2pzb246OnZhbHVlX3Q6Om9iamVjdDoK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1faXQub2JqZWN0X2l0ZXJh
dG9yID0gdHlwZW5hbWUgb2JqZWN0X3Q6Oml0ZXJhdG9yKCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhc2UgYmFzaWNf
anNvbjo6dmFsdWVfdDo6YXJyYXk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBtX2l0LmFycmF5X2l0ZXJhdG9yID0gdHlwZW5hbWUgYXJyYXlfdDo6aXRlcmF0b3IoKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IG1faXQucHJpbWl0aXZlX2l0ZXJhdG9yID0gcHJpbWl0aXZlX2l0ZXJhdG9yX3QoKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgLyohCisgICAgICAgIEBicmllZiBjb3B5IGNvbnN0cnVjdG9y
IGdpdmVuIGEgbm9uLWNvbnN0IGl0ZXJhdG9yCisgICAgICAgIEBwYXJhbVtpbl0gb3RoZXIgIGl0
ZXJhdG9yIHRvIGNvcHkgZnJvbQorICAgICAgICBAbm90ZSBJdCBpcyBub3QgY2hlY2tlZCB3aGV0
aGVyIEBhIG90aGVyIGlzIGluaXRpYWxpemVkLgorICAgICAgICAqLworICAgICAgICBleHBsaWNp
dCBjb25zdF9pdGVyYXRvcihjb25zdCBpdGVyYXRvciYgb3RoZXIpIG5vZXhjZXB0CisgICAgICAg
ICAgICA6IG1fb2JqZWN0KG90aGVyLm1fb2JqZWN0KQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAobV9vYmplY3QgIT0gbnVsbHB0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKG1fb2JqZWN0LT5tX3R5cGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBjYXNlIGJhc2ljX2pzb246OnZhbHVlX3Q6Om9iamVjdDoKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9pdC5vYmplY3RfaXRlcmF0b3IgPSBv
dGhlci5tX2l0Lm9iamVjdF9pdGVyYXRvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBiYXNp
Y19qc29uOjp2YWx1ZV90OjphcnJheToKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pdC5hcnJheV9pdGVyYXRvciA9IG90aGVyLm1faXQuYXJyYXlfaXRl
cmF0b3I7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faXQucHJpbWl0aXZlX2l0ZXJhdG9yID0gb3Ro
ZXIubV9pdC5wcmltaXRpdmVfaXRlcmF0b3I7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAgICBAYnJpZWYgY29weSBjb25zdHJ1
Y3RvcgorICAgICAgICBAcGFyYW1baW5dIG90aGVyICBpdGVyYXRvciB0byBjb3B5IGZyb20KKyAg
ICAgICAgQG5vdGUgSXQgaXMgbm90IGNoZWNrZWQgd2hldGhlciBAYSBvdGhlciBpcyBpbml0aWFs
aXplZC4KKyAgICAgICAgKi8KKyAgICAgICAgY29uc3RfaXRlcmF0b3IoY29uc3QgY29uc3RfaXRl
cmF0b3ImIG90aGVyKSBub2V4Y2VwdAorICAgICAgICAgICAgOiBtX29iamVjdChvdGhlci5tX29i
amVjdCksIG1faXQob3RoZXIubV9pdCkKKyAgICAgICAge30KKworICAgICAgICAvKiEKKyAgICAg
ICAgQGJyaWVmIGNvcHkgYXNzaWdubWVudAorICAgICAgICBAcGFyYW1baW4sb3V0XSBvdGhlciAg
aXRlcmF0b3IgdG8gY29weSBmcm9tCisgICAgICAgIEBub3RlIEl0IGlzIG5vdCBjaGVja2VkIHdo
ZXRoZXIgQGEgb3RoZXIgaXMgaW5pdGlhbGl6ZWQuCisgICAgICAgICovCisgICAgICAgIGNvbnN0
X2l0ZXJhdG9yJiBvcGVyYXRvcj0oY29uc3RfaXRlcmF0b3Igb3RoZXIpIG5vZXhjZXB0KAorICAg
ICAgICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxwb2ludGVyPjo6dmFs
dWUgYW5kCisgICAgICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9hc3NpZ25hYmxlPHBvaW50
ZXI+Ojp2YWx1ZSBhbmQKKyAgICAgICAgICAgIHN0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVj
dGlibGU8aW50ZXJuYWxfaXRlcmF0b3I+Ojp2YWx1ZSBhbmQKKyAgICAgICAgICAgIHN0ZDo6aXNf
bm90aHJvd19tb3ZlX2Fzc2lnbmFibGU8aW50ZXJuYWxfaXRlcmF0b3I+Ojp2YWx1ZQorICAgICAg
ICApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0ZDo6c3dhcChtX29iamVjdCwgb3RoZXIubV9v
YmplY3QpOworICAgICAgICAgICAgc3RkOjpzd2FwKG1faXQsIG90aGVyLm1faXQpOworICAgICAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgIHByaXZhdGU6CisgICAgICAg
IC8qIQorICAgICAgICBAYnJpZWYgc2V0IHRoZSBpdGVyYXRvciB0byB0aGUgZmlyc3QgdmFsdWUK
KyAgICAgICAgQHByZSBUaGUgaXRlcmF0b3IgaXMgaW5pdGlhbGl6ZWQ7IGkuZS4gYG1fb2JqZWN0
ICE9IG51bGxwdHJgLgorICAgICAgICAqLworICAgICAgICB2b2lkIHNldF9iZWdpbigpIG5vZXhj
ZXB0CisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydChtX29iamVjdCAhPSBudWxscHRyKTsK
KworICAgICAgICAgICAgc3dpdGNoIChtX29iamVjdC0+bV90eXBlKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFsdWVfdDo6b2JqZWN0OgorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pdC5vYmplY3RfaXRlcmF0b3IgPSBt
X29iamVjdC0+bV92YWx1ZS5vYmplY3QtPmJlZ2luKCk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhc2UgYmFzaWNfanNv
bjo6dmFsdWVfdDo6YXJyYXk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBtX2l0LmFycmF5X2l0ZXJhdG9yID0gbV9vYmplY3QtPm1fdmFsdWUuYXJyYXktPmJlZ2luKCk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFsdWVfdDo6bnVsbDoKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIC8vIHNldCB0byBlbmQgc28gYmVnaW4oKT09ZW5kKCkg
aXMgdHJ1ZTogbnVsbCBpcyBlbXB0eQorICAgICAgICAgICAgICAgICAgICBtX2l0LnByaW1pdGl2
ZV9pdGVyYXRvci5zZXRfZW5kKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBtX2l0LnByaW1pdGl2ZV9pdGVyYXRvci5zZXRfYmVnaW4o
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyohCisgICAgICAgIEBicmllZiBzZXQgdGhl
IGl0ZXJhdG9yIHBhc3QgdGhlIGxhc3QgdmFsdWUKKyAgICAgICAgQHByZSBUaGUgaXRlcmF0b3Ig
aXMgaW5pdGlhbGl6ZWQ7IGkuZS4gYG1fb2JqZWN0ICE9IG51bGxwdHJgLgorICAgICAgICAqLwor
ICAgICAgICB2b2lkIHNldF9lbmQoKSBub2V4Y2VwdAorICAgICAgICB7CisgICAgICAgICAgICBh
c3NlcnQobV9vYmplY3QgIT0gbnVsbHB0cik7CisKKyAgICAgICAgICAgIHN3aXRjaCAobV9vYmpl
Y3QtPm1fdHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIGJhc2ljX2pz
b246OnZhbHVlX3Q6Om9iamVjdDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIG1faXQub2JqZWN0X2l0ZXJhdG9yID0gbV9vYmplY3QtPm1fdmFsdWUub2JqZWN0LT5lbmQo
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgY2FzZSBiYXNpY19qc29uOjp2YWx1ZV90OjphcnJheToKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1faXQuYXJyYXlfaXRlcmF0b3IgPSBtX29iamVj
dC0+bV92YWx1ZS5hcnJheS0+ZW5kKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBtX2l0LnByaW1pdGl2ZV9pdGVyYXRvci5zZXRfZW5k
KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBwdWJsaWM6CisgICAgICAgIC8qIQorICAgICAg
ICBAYnJpZWYgcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoZSB2YWx1ZSBwb2ludGVkIHRvIGJ5IHRo
ZSBpdGVyYXRvcgorICAgICAgICBAcHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5l
LiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCisgICAgICAgICovCisgICAgICAgIHJlZmVyZW5jZSBv
cGVyYXRvciooKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBhc3NlcnQobV9vYmplY3Qg
IT0gbnVsbHB0cik7CisKKyAgICAgICAgICAgIHN3aXRjaCAobV9vYmplY3QtPm1fdHlwZSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIGJhc2ljX2pzb246OnZhbHVlX3Q6Om9i
amVjdDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChtX2l0
Lm9iamVjdF9pdGVyYXRvciAhPSBtX29iamVjdC0+bV92YWx1ZS5vYmplY3QtPmVuZCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG1faXQub2JqZWN0X2l0ZXJhdG9yLT5zZWNvbmQ7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY2FzZSBiYXNpY19qc29uOjp2YWx1
ZV90OjphcnJheToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFzc2Vy
dChtX2l0LmFycmF5X2l0ZXJhdG9yICE9IG1fb2JqZWN0LT5tX3ZhbHVlLmFycmF5LT5lbmQoKSk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAqbV9pdC5hcnJheV9pdGVyYXRvcjsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYXNlIGJhc2ljX2pzb246OnZhbHVlX3Q6
Om51bGw6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6
Om91dF9vZl9yYW5nZT4oImNhbm5vdCBnZXQgdmFsdWUiKTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG1faXQucHJpbWl0aXZlX2l0ZXJhdG9yLmlzX2JlZ2luKCkpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAqbV9vYmplY3Q7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6Om91dF9v
Zl9yYW5nZT4oImNhbm5vdCBnZXQgdmFsdWUiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIQor
ICAgICAgICBAYnJpZWYgZGVyZWZlcmVuY2UgdGhlIGl0ZXJhdG9yCisgICAgICAgIEBwcmUgVGhl
IGl0ZXJhdG9yIGlzIGluaXRpYWxpemVkOyBpLmUuIGBtX29iamVjdCAhPSBudWxscHRyYC4KKyAg
ICAgICAgKi8KKyAgICAgICAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgYXNzZXJ0KG1fb2JqZWN0ICE9IG51bGxwdHIpOworCisgICAgICAgICAgICBz
d2l0Y2ggKG1fb2JqZWN0LT5tX3R5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Y2FzZSBiYXNpY19qc29uOjp2YWx1ZV90OjpvYmplY3Q6CisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBhc3NlcnQobV9pdC5vYmplY3RfaXRlcmF0b3IgIT0gbV9vYmplY3Qt
Pm1fdmFsdWUub2JqZWN0LT5lbmQoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAmKG1f
aXQub2JqZWN0X2l0ZXJhdG9yLT5zZWNvbmQpOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFsdWVfdDo6YXJyYXk6CisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBhc3NlcnQobV9pdC5hcnJheV9pdGVyYXRvciAhPSBt
X29iamVjdC0+bV92YWx1ZS5hcnJheS0+ZW5kKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gJiptX2l0LmFycmF5X2l0ZXJhdG9yOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBp
ZiAobV9pdC5wcmltaXRpdmVfaXRlcmF0b3IuaXNfYmVnaW4oKSkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fb2JqZWN0OworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjpvdXRfb2ZfcmFuZ2U+KCJj
YW5ub3QgZ2V0IHZhbHVlIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAgQGJy
aWVmIHBvc3QtaW5jcmVtZW50IChpdCsrKQorICAgICAgICBAcHJlIFRoZSBpdGVyYXRvciBpcyBp
bml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCisgICAgICAgICovCisgICAg
ICAgIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KQorICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvIHJlc3VsdCA9ICp0aGlzOworICAgICAgICAgICAgKysoKnRoaXMpOworICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAgICBAYnJp
ZWYgcHJlLWluY3JlbWVudCAoKytpdCkKKyAgICAgICAgQHByZSBUaGUgaXRlcmF0b3IgaXMgaW5p
dGlhbGl6ZWQ7IGkuZS4gYG1fb2JqZWN0ICE9IG51bGxwdHJgLgorICAgICAgICAqLworICAgICAg
ICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFz
c2VydChtX29iamVjdCAhPSBudWxscHRyKTsKKworICAgICAgICAgICAgc3dpdGNoIChtX29iamVj
dC0+bV90eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgYmFzaWNfanNv
bjo6dmFsdWVfdDo6b2JqZWN0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgc3RkOjphZHZhbmNlKG1faXQub2JqZWN0X2l0ZXJhdG9yLCAxKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY2FzZSBi
YXNpY19qc29uOjp2YWx1ZV90OjphcnJheToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6YWR2YW5jZShtX2l0LmFycmF5X2l0ZXJhdG9yLCAxKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICsrbV9pdC5w
cmltaXRpdmVfaXRlcmF0b3I7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAg
ICAgICB9CisKKyAgICAgICAgLyohCisgICAgICAgIEBicmllZiBwb3N0LWRlY3JlbWVudCAoaXQt
LSkKKyAgICAgICAgQHByZSBUaGUgaXRlcmF0b3IgaXMgaW5pdGlhbGl6ZWQ7IGkuZS4gYG1fb2Jq
ZWN0ICE9IG51bGxwdHJgLgorICAgICAgICAqLworICAgICAgICBjb25zdF9pdGVyYXRvciBvcGVy
YXRvci0tKGludCkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSAqdGhpczsK
KyAgICAgICAgICAgIC0tKCp0aGlzKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmIHByZS1kZWNyZW1lbnQgKC0taXQp
CisgICAgICAgIEBwcmUgVGhlIGl0ZXJhdG9yIGlzIGluaXRpYWxpemVkOyBpLmUuIGBtX29iamVj
dCAhPSBudWxscHRyYC4KKyAgICAgICAgKi8KKyAgICAgICAgY29uc3RfaXRlcmF0b3ImIG9wZXJh
dG9yLS0oKQorICAgICAgICB7CisgICAgICAgICAgICBhc3NlcnQobV9vYmplY3QgIT0gbnVsbHB0
cik7CisKKyAgICAgICAgICAgIHN3aXRjaCAobV9vYmplY3QtPm1fdHlwZSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBjYXNlIGJhc2ljX2pzb246OnZhbHVlX3Q6Om9iamVjdDoKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6YWR2YW5jZShtX2l0Lm9i
amVjdF9pdGVyYXRvciwgLTEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYXNlIGJhc2ljX2pzb246OnZhbHVlX3Q6OmFy
cmF5OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjphZHZhbmNl
KG1faXQuYXJyYXlfaXRlcmF0b3IsIC0xKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIC0tbV9pdC5wcmltaXRpdmVfaXRlcmF0b3I7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoh
CisgICAgICAgIEBicmllZiAgY29tcGFyaXNvbjogZXF1YWwKKyAgICAgICAgQHByZSBUaGUgaXRl
cmF0b3IgaXMgaW5pdGlhbGl6ZWQ7IGkuZS4gYG1fb2JqZWN0ICE9IG51bGxwdHJgLgorICAgICAg
ICAqLworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVy
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICAvLyBpZiBvYmplY3RzIGFyZSBub3QgdGhl
IHNhbWUsIHRoZSBjb21wYXJpc29uIGlzIHVuZGVmaW5lZAorICAgICAgICAgICAgaWYgKG1fb2Jq
ZWN0ICE9IG90aGVyLm1fb2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRo
cm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fubm90IGNvbXBhcmUgaXRlcmF0b3JzIG9mIGRpZmZl
cmVudCBjb250YWluZXJzIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGFzc2VydCht
X29iamVjdCAhPSBudWxscHRyKTsKKworICAgICAgICAgICAgc3dpdGNoIChtX29iamVjdC0+bV90
eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFs
dWVfdDo6b2JqZWN0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIChtX2l0Lm9iamVjdF9pdGVyYXRvciA9PSBvdGhlci5tX2l0Lm9iamVjdF9pdGVyYXRvcik7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY2FzZSBiYXNpY19qc29uOjp2
YWx1ZV90OjphcnJheToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAobV9pdC5hcnJheV9pdGVyYXRvciA9PSBvdGhlci5tX2l0LmFycmF5X2l0ZXJhdG9yKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtX2l0LnByaW1pdGl2ZV9pdGVy
YXRvciA9PSBvdGhlci5tX2l0LnByaW1pdGl2ZV9pdGVyYXRvcik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyohCisgICAgICAgIEBicmll
ZiAgY29tcGFyaXNvbjogbm90IGVxdWFsCisgICAgICAgIEBwcmUgVGhlIGl0ZXJhdG9yIGlzIGlu
aXRpYWxpemVkOyBpLmUuIGBtX29iamVjdCAhPSBudWxscHRyYC4KKyAgICAgICAgKi8KKyAgICAg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5vdCBvcGVyYXRvcj09KG90aGVyKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8qIQorICAgICAgICBAYnJpZWYgIGNvbXBhcmlzb246IHNtYWxsZXIK
KyAgICAgICAgQHByZSBUaGUgaXRlcmF0b3IgaXMgaW5pdGlhbGl6ZWQ7IGkuZS4gYG1fb2JqZWN0
ICE9IG51bGxwdHJgLgorICAgICAgICAqLworICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBj
b25zdF9pdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGlm
IG9iamVjdHMgYXJlIG5vdCB0aGUgc2FtZSwgdGhlIGNvbXBhcmlzb24gaXMgdW5kZWZpbmVkCisg
ICAgICAgICAgICBpZiAobV9vYmplY3QgIT0gb3RoZXIubV9vYmplY3QpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJjYW5ub3QgY29tcGFy
ZSBpdGVyYXRvcnMgb2YgZGlmZmVyZW50IGNvbnRhaW5lcnMiKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgYXNzZXJ0KG1fb2JqZWN0ICE9IG51bGxwdHIpOworCisgICAgICAgICAgICBz
d2l0Y2ggKG1fb2JqZWN0LT5tX3R5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Y2FzZSBiYXNpY19qc29uOjp2YWx1ZV90OjpvYmplY3Q6CisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oImNhbm5vdCBjb21wYXJl
IG9yZGVyIG9mIG9iamVjdCBpdGVyYXRvcnMiKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBjYXNlIGJhc2ljX2pzb246OnZhbHVlX3Q6OmFycmF5OgorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtX2l0LmFycmF5X2l0ZXJhdG9yIDwg
b3RoZXIubV9pdC5hcnJheV9pdGVyYXRvcik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiAobV9pdC5wcmltaXRpdmVfaXRlcmF0b3IgPCBvdGhlci5tX2l0LnByaW1pdGl2ZV9p
dGVyYXRvcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgLyohCisgICAgICAgIEBicmllZiAgY29tcGFyaXNvbjogbGVzcyB0aGFuIG9yIGVx
dWFsCisgICAgICAgIEBwcmUgVGhlIGl0ZXJhdG9yIGlzIGluaXRpYWxpemVkOyBpLmUuIGBtX29i
amVjdCAhPSBudWxscHRyYC4KKyAgICAgICAgKi8KKyAgICAgICAgYm9vbCBvcGVyYXRvcjw9KGNv
bnN0IGNvbnN0X2l0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG5vdCBvdGhlci5vcGVyYXRvciA8ICgqdGhpcyk7CisgICAgICAgIH0KKworICAgICAg
ICAvKiEKKyAgICAgICAgQGJyaWVmICBjb21wYXJpc29uOiBncmVhdGVyIHRoYW4KKyAgICAgICAg
QHByZSBUaGUgaXRlcmF0b3IgaXMgaW5pdGlhbGl6ZWQ7IGkuZS4gYG1fb2JqZWN0ICE9IG51bGxw
dHJgLgorICAgICAgICAqLworICAgICAgICBib29sIG9wZXJhdG9yPihjb25zdCBjb25zdF9pdGVy
YXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBub3Qgb3Bl
cmF0b3I8PShvdGhlcik7CisgICAgICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVm
ICBjb21wYXJpc29uOiBncmVhdGVyIHRoYW4gb3IgZXF1YWwKKyAgICAgICAgQHByZSBUaGUgaXRl
cmF0b3IgaXMgaW5pdGlhbGl6ZWQ7IGkuZS4gYG1fb2JqZWN0ICE9IG51bGxwdHJgLgorICAgICAg
ICAqLworICAgICAgICBib29sIG9wZXJhdG9yPj0oY29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVy
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbm90IG9wZXJhdG9yPChvdGhl
cik7CisgICAgICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmICBhZGQgdG8gaXRl
cmF0b3IKKyAgICAgICAgQHByZSBUaGUgaXRlcmF0b3IgaXMgaW5pdGlhbGl6ZWQ7IGkuZS4gYG1f
b2JqZWN0ICE9IG51bGxwdHJgLgorICAgICAgICAqLworICAgICAgICBjb25zdF9pdGVyYXRvciYg
b3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgaSkKKyAgICAgICAgeworICAgICAgICAgICAgYXNz
ZXJ0KG1fb2JqZWN0ICE9IG51bGxwdHIpOworCisgICAgICAgICAgICBzd2l0Y2ggKG1fb2JqZWN0
LT5tX3R5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBiYXNpY19qc29u
Ojp2YWx1ZV90OjpvYmplY3Q6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oImNhbm5vdCB1c2Ugb2Zmc2V0cyB3aXRoIG9iamVj
dCBpdGVyYXRvcnMiKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYXNl
IGJhc2ljX2pzb246OnZhbHVlX3Q6OmFycmF5OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgc3RkOjphZHZhbmNlKG1faXQuYXJyYXlfaXRlcmF0b3IsIGkpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pdC5w
cmltaXRpdmVfaXRlcmF0b3IgKz0gaTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmICBzdWJ0cmFjdCBmcm9t
IGl0ZXJhdG9yCisgICAgICAgIEBwcmUgVGhlIGl0ZXJhdG9yIGlzIGluaXRpYWxpemVkOyBpLmUu
IGBtX29iamVjdCAhPSBudWxscHRyYC4KKyAgICAgICAgKi8KKyAgICAgICAgY29uc3RfaXRlcmF0
b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIGkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBvcGVyYXRvcis9KC1pKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAg
ICBAYnJpZWYgIGFkZCB0byBpdGVyYXRvcgorICAgICAgICBAcHJlIFRoZSBpdGVyYXRvciBpcyBp
bml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCisgICAgICAgICovCisgICAg
ICAgIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgaSkKKyAgICAgICAg
eworICAgICAgICAgICAgYXV0byByZXN1bHQgPSAqdGhpczsKKyAgICAgICAgICAgIHJlc3VsdCAr
PSBpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIC8q
IQorICAgICAgICBAYnJpZWYgIHN1YnRyYWN0IGZyb20gaXRlcmF0b3IKKyAgICAgICAgQHByZSBU
aGUgaXRlcmF0b3IgaXMgaW5pdGlhbGl6ZWQ7IGkuZS4gYG1fb2JqZWN0ICE9IG51bGxwdHJgLgor
ICAgICAgICAqLworICAgICAgICBjb25zdF9pdGVyYXRvciBvcGVyYXRvci0oZGlmZmVyZW5jZV90
eXBlIGkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gKnRoaXM7CisgICAg
ICAgICAgICByZXN1bHQgLT0gaTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IH0KKworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmICByZXR1cm4gZGlmZmVyZW5jZQorICAg
ICAgICBAcHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0g
bnVsbHB0cmAuCisgICAgICAgICovCisgICAgICAgIGRpZmZlcmVuY2VfdHlwZSBvcGVyYXRvci0o
Y29uc3QgY29uc3RfaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICBhc3NlcnQobV9vYmplY3QgIT0gbnVsbHB0cik7CisKKyAgICAgICAgICAgIHN3aXRjaCAobV9v
YmplY3QtPm1fdHlwZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIGJhc2lj
X2pzb246OnZhbHVlX3Q6Om9iamVjdDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiY2Fubm90IHVzZSBvZmZzZXRzIHdpdGgg
b2JqZWN0IGl0ZXJhdG9ycyIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGNhc2UgYmFzaWNfanNvbjo6dmFsdWVfdDo6YXJyYXk6CisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbV9pdC5hcnJheV9pdGVyYXRvciAtIG90aGVyLm1faXQu
YXJyYXlfaXRlcmF0b3I7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2l0
LnByaW1pdGl2ZV9pdGVyYXRvciAtIG90aGVyLm1faXQucHJpbWl0aXZlX2l0ZXJhdG9yOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIQor
ICAgICAgICBAYnJpZWYgIGFjY2VzcyB0byBzdWNjZXNzb3IKKyAgICAgICAgQHByZSBUaGUgaXRl
cmF0b3IgaXMgaW5pdGlhbGl6ZWQ7IGkuZS4gYG1fb2JqZWN0ICE9IG51bGxwdHJgLgorICAgICAg
ICAqLworICAgICAgICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgbikgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgYXNzZXJ0KG1fb2JqZWN0ICE9IG51bGxwdHIpOwor
CisgICAgICAgICAgICBzd2l0Y2ggKG1fb2JqZWN0LT5tX3R5cGUpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgY2FzZSBiYXNpY19qc29uOjp2YWx1ZV90OjpvYmplY3Q6CisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4o
ImNhbm5vdCB1c2Ugb3BlcmF0b3JbXSBmb3Igb2JqZWN0IGl0ZXJhdG9ycyIpOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFsdWVfdDo6YXJy
YXk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKnN0ZDo6
bmV4dChtX2l0LmFycmF5X2l0ZXJhdG9yLCBuKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBjYXNlIGJhc2ljX2pzb246OnZhbHVlX3Q6Om51bGw6CisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6Om91dF9vZl9yYW5nZT4oImNhbm5v
dCBnZXQgdmFsdWUiKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1faXQucHJp
bWl0aXZlX2l0ZXJhdG9yID09IC1uKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gKm1fb2JqZWN0OworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgVGhyb3c8c3RkOjpvdXRfb2ZfcmFuZ2U+KCJjYW5ub3QgZ2V0IHZhbHVl
Iik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmICByZXR1cm4gdGhl
IGtleSBvZiBhbiBvYmplY3QgaXRlcmF0b3IKKyAgICAgICAgQHByZSBUaGUgaXRlcmF0b3IgaXMg
aW5pdGlhbGl6ZWQ7IGkuZS4gYG1fb2JqZWN0ICE9IG51bGxwdHJgLgorICAgICAgICAqLworICAg
ICAgICB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUga2V5KCkgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgYXNzZXJ0KG1fb2JqZWN0ICE9IG51bGxwdHIpOworCisgICAgICAgICAgICBp
ZiAobV9vYmplY3QtPmlzX29iamVjdCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBtX2l0Lm9iamVjdF9pdGVyYXRvci0+Zmlyc3Q7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjpk
b21haW5fZXJyb3I+KCJjYW5ub3QgdXNlIGtleSgpIGZvciBub24tb2JqZWN0IGl0ZXJhdG9ycyIp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyohCisgICAgICAgIEBicmll
ZiAgcmV0dXJuIHRoZSB2YWx1ZSBvZiBhbiBpdGVyYXRvcgorICAgICAgICBAcHJlIFRoZSBpdGVy
YXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCisgICAgICAg
ICovCisgICAgICAgIHJlZmVyZW5jZSB2YWx1ZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRvciooKTsKKyAgICAgICAgfQorCisgICAgICBwcml2YXRlOgorICAg
ICAgICAvLy8gYXNzb2NpYXRlZCBKU09OIGluc3RhbmNlCisgICAgICAgIHBvaW50ZXIgbV9vYmpl
Y3QgPSBudWxscHRyOworICAgICAgICAvLy8gdGhlIGFjdHVhbCBpdGVyYXRvciBvZiB0aGUgYXNz
b2NpYXRlZCBpbnN0YW5jZQorICAgICAgICBpbnRlcm5hbF9pdGVyYXRvciBtX2l0ID0gaW50ZXJu
YWxfaXRlcmF0b3IoKTsKKyAgICB9OworCisgICAgLyohCisgICAgQGJyaWVmIGEgbXV0YWJsZSBy
YW5kb20gYWNjZXNzIGl0ZXJhdG9yIGZvciB0aGUgQHJlZiBiYXNpY19qc29uIGNsYXNzCisKKyAg
ICBAcmVxdWlyZW1lbnQgVGhlIGNsYXNzIHNhdGlzZmllcyB0aGUgZm9sbG93aW5nIGNvbmNlcHQg
cmVxdWlyZW1lbnRzOgorICAgIC0gW1JhbmRvbUFjY2Vzc0l0ZXJhdG9yXShodHRwOi8vZW4uY3Bw
cmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L1JhbmRvbUFjY2Vzc0l0ZXJhdG9yKToKKyAgICAg
IFRoZSBpdGVyYXRvciB0aGF0IGNhbiBiZSBtb3ZlZCB0byBwb2ludCAoZm9yd2FyZCBhbmQgYmFj
a3dhcmQpIHRvIGFueQorICAgICAgZWxlbWVudCBpbiBjb25zdGFudCB0aW1lLgorICAgIC0gW091
dHB1dEl0ZXJhdG9yXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L091
dHB1dEl0ZXJhdG9yKToKKyAgICAgIEl0IGlzIHBvc3NpYmxlIHRvIHdyaXRlIHRvIHRoZSBwb2lu
dGVkLXRvIGVsZW1lbnQuCisKKyAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAorICAgICovCisgICAg
Y2xhc3MgaXRlcmF0b3IgOiBwdWJsaWMgY29uc3RfaXRlcmF0b3IKKyAgICB7CisgICAgICBwdWJs
aWM6CisgICAgICAgIHVzaW5nIGJhc2VfaXRlcmF0b3IgPSBjb25zdF9pdGVyYXRvcjsKKyAgICAg
ICAgdXNpbmcgcG9pbnRlciA9IHR5cGVuYW1lIGJhc2ljX2pzb246OnBvaW50ZXI7CisgICAgICAg
IHVzaW5nIHJlZmVyZW5jZSA9IHR5cGVuYW1lIGJhc2ljX2pzb246OnJlZmVyZW5jZTsKKworICAg
ICAgICAvLy8gZGVmYXVsdCBjb25zdHJ1Y3RvcgorICAgICAgICBpdGVyYXRvcigpID0gZGVmYXVs
dDsKKworICAgICAgICAvLy8gY29uc3RydWN0b3IgZm9yIGEgZ2l2ZW4gSlNPTiBpbnN0YW5jZQor
ICAgICAgICBleHBsaWNpdCBpdGVyYXRvcihwb2ludGVyIG9iamVjdCkgbm9leGNlcHQKKyAgICAg
ICAgICAgIDogYmFzZV9pdGVyYXRvcihvYmplY3QpCisgICAgICAgIHt9CisKKyAgICAgICAgLy8v
IGNvcHkgY29uc3RydWN0b3IKKyAgICAgICAgaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIG90aGVy
KSBub2V4Y2VwdAorICAgICAgICAgICAgOiBiYXNlX2l0ZXJhdG9yKG90aGVyKQorICAgICAgICB7
fQorCisgICAgICAgIC8vLyBjb3B5IGFzc2lnbm1lbnQKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJh
dG9yPShpdGVyYXRvciBvdGhlcikgbm9leGNlcHQoCisgICAgICAgICAgICBzdGQ6OmlzX25vdGhy
b3dfbW92ZV9jb25zdHJ1Y3RpYmxlPHBvaW50ZXI+Ojp2YWx1ZSBhbmQKKyAgICAgICAgICAgIHN0
ZDo6aXNfbm90aHJvd19tb3ZlX2Fzc2lnbmFibGU8cG9pbnRlcj46OnZhbHVlIGFuZAorICAgICAg
ICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxpbnRlcm5hbF9pdGVyYXRv
cj46OnZhbHVlIGFuZAorICAgICAgICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfYXNzaWduYWJs
ZTxpbnRlcm5hbF9pdGVyYXRvcj46OnZhbHVlCisgICAgICAgICkKKyAgICAgICAgeworICAgICAg
ICAgICAgYmFzZV9pdGVyYXRvcjo6b3BlcmF0b3I9KG90aGVyKTsKKyAgICAgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyByZXR1cm4gYSByZWZlcmVuY2UgdG8g
dGhlIHZhbHVlIHBvaW50ZWQgdG8gYnkgdGhlIGl0ZXJhdG9yCisgICAgICAgIHJlZmVyZW5jZSBv
cGVyYXRvciooKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gY29uc3RfY2Fz
dDxyZWZlcmVuY2U+KGJhc2VfaXRlcmF0b3I6Om9wZXJhdG9yKigpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vLyBkZXJlZmVyZW5jZSB0aGUgaXRlcmF0b3IKKyAgICAgICAgcG9pbnRlciBvcGVy
YXRvci0+KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
cG9pbnRlcj4oYmFzZV9pdGVyYXRvcjo6b3BlcmF0b3ItPigpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vLyBwb3N0LWluY3JlbWVudCAoaXQrKykKKyAgICAgICAgaXRlcmF0b3Igb3BlcmF0b3Ir
KyhpbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGl0ZXJhdG9yIHJlc3VsdCA9ICp0aGlzOwor
ICAgICAgICAgICAgYmFzZV9pdGVyYXRvcjo6b3BlcmF0b3IrKygpOworICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyBwcmUtaW5jcmVtZW50ICgrK2l0
KQorICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGJhc2VfaXRlcmF0b3I6Om9wZXJhdG9yKysoKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICAgICAgfQorCisgICAgICAgIC8vLyBwb3N0LWRlY3JlbWVudCAoaXQtLSkKKyAgICAgICAg
aXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGl0ZXJhdG9y
IHJlc3VsdCA9ICp0aGlzOworICAgICAgICAgICAgYmFzZV9pdGVyYXRvcjo6b3BlcmF0b3ItLSgp
OworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyBw
cmUtZGVjcmVtZW50ICgtLWl0KQorICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3ItLSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGJhc2VfaXRlcmF0b3I6Om9wZXJhdG9yLS0oKTsKKyAgICAgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyBhZGQgdG8gaXRlcmF0
b3IKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIGkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGJhc2VfaXRlcmF0b3I6Om9wZXJhdG9yKz0oaSk7CisgICAgICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvLy8gc3VidHJhY3QgZnJv
bSBpdGVyYXRvcgorICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUg
aSkKKyAgICAgICAgeworICAgICAgICAgICAgYmFzZV9pdGVyYXRvcjo6b3BlcmF0b3ItPShpKTsK
KyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyBhZGQg
dG8gaXRlcmF0b3IKKyAgICAgICAgaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBp
KQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9ICp0aGlzOworICAgICAgICAg
ICAgcmVzdWx0ICs9IGk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisK
KyAgICAgICAgLy8vIHN1YnRyYWN0IGZyb20gaXRlcmF0b3IKKyAgICAgICAgaXRlcmF0b3Igb3Bl
cmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBpKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9ICp0aGlzOworICAgICAgICAgICAgcmVzdWx0IC09IGk7CisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgLy8vIHJldHVybiBkaWZmZXJlbmNlCisg
ICAgICAgIGRpZmZlcmVuY2VfdHlwZSBvcGVyYXRvci0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYmFzZV9pdGVyYXRvcjo6b3BlcmF0
b3ItKG90aGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyBhY2Nlc3MgdG8gc3VjY2Vzc29y
CisgICAgICAgIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBuKSBjb25zdAor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxyZWZlcmVuY2U+KGJhc2Vf
aXRlcmF0b3I6Om9wZXJhdG9yW10obikpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIHJldHVy
biB0aGUgdmFsdWUgb2YgYW4gaXRlcmF0b3IKKyAgICAgICAgcmVmZXJlbmNlIHZhbHVlKCkgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8cmVmZXJlbmNlPihi
YXNlX2l0ZXJhdG9yOjp2YWx1ZSgpKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKiEKKyAg
ICBAYnJpZWYgYSB0ZW1wbGF0ZSBmb3IgYSByZXZlcnNlIGl0ZXJhdG9yIGNsYXNzCisKKyAgICBA
dHBhcmFtIEJhc2UgdGhlIGJhc2UgaXRlcmF0b3IgdHlwZSB0byByZXZlcnNlLiBWYWxpZCB0eXBl
cyBhcmUgQHJlZgorICAgIGl0ZXJhdG9yICh0byBjcmVhdGUgQHJlZiByZXZlcnNlX2l0ZXJhdG9y
KSBhbmQgQHJlZiBjb25zdF9pdGVyYXRvciAodG8KKyAgICBjcmVhdGUgQHJlZiBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yKS4KKworICAgIEByZXF1aXJlbWVudCBUaGUgY2xhc3Mgc2F0aXNmaWVzIHRo
ZSBmb2xsb3dpbmcgY29uY2VwdCByZXF1aXJlbWVudHM6CisgICAgLSBbUmFuZG9tQWNjZXNzSXRl
cmF0b3JdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNlcHQvUmFuZG9tQWNj
ZXNzSXRlcmF0b3IpOgorICAgICAgVGhlIGl0ZXJhdG9yIHRoYXQgY2FuIGJlIG1vdmVkIHRvIHBv
aW50IChmb3J3YXJkIGFuZCBiYWNrd2FyZCkgdG8gYW55CisgICAgICBlbGVtZW50IGluIGNvbnN0
YW50IHRpbWUuCisgICAgLSBbT3V0cHV0SXRlcmF0b3JdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2Uu
Y29tL3cvY3BwL2NvbmNlcHQvT3V0cHV0SXRlcmF0b3IpOgorICAgICAgSXQgaXMgcG9zc2libGUg
dG8gd3JpdGUgdG8gdGhlIHBvaW50ZWQtdG8gZWxlbWVudCAob25seSBpZiBAYSBCYXNlIGlzCisg
ICAgICBAcmVmIGl0ZXJhdG9yKS4KKworICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCisgICAgKi8K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlPgorICAgIGNsYXNzIGpzb25fcmV2ZXJzZV9pdGVy
YXRvciA6IHB1YmxpYyBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8QmFzZT4KKyAgICB7CisgICAgICBw
dWJsaWM6CisgICAgICAgIC8vLyBzaG9ydGN1dCB0byB0aGUgcmV2ZXJzZSBpdGVyYXRvciBhZGFw
dG9yCisgICAgICAgIHVzaW5nIGJhc2VfaXRlcmF0b3IgPSBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8
QmFzZT47CisgICAgICAgIC8vLyB0aGUgcmVmZXJlbmNlIHR5cGUgZm9yIHRoZSBwb2ludGVkLXRv
IGVsZW1lbnQKKyAgICAgICAgdXNpbmcgcmVmZXJlbmNlID0gdHlwZW5hbWUgQmFzZTo6cmVmZXJl
bmNlOworCisgICAgICAgIC8vLyBjcmVhdGUgcmV2ZXJzZSBpdGVyYXRvciBmcm9tIGl0ZXJhdG9y
CisgICAgICAgIGpzb25fcmV2ZXJzZV9pdGVyYXRvcihjb25zdCB0eXBlbmFtZSBiYXNlX2l0ZXJh
dG9yOjppdGVyYXRvcl90eXBlJiBpdCkgbm9leGNlcHQKKyAgICAgICAgICAgIDogYmFzZV9pdGVy
YXRvcihpdCkKKyAgICAgICAge30KKworICAgICAgICAvLy8gY3JlYXRlIHJldmVyc2UgaXRlcmF0
b3IgZnJvbSBiYXNlIGNsYXNzCisgICAgICAgIGpzb25fcmV2ZXJzZV9pdGVyYXRvcihjb25zdCBi
YXNlX2l0ZXJhdG9yJiBpdCkgbm9leGNlcHQKKyAgICAgICAgICAgIDogYmFzZV9pdGVyYXRvcihp
dCkKKyAgICAgICAge30KKworICAgICAgICAvLy8gcG9zdC1pbmNyZW1lbnQgKGl0KyspCisgICAg
ICAgIGpzb25fcmV2ZXJzZV9pdGVyYXRvciBvcGVyYXRvcisrKGludCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGJhc2VfaXRlcmF0b3I6Om9wZXJhdG9yKysoMSk7CisgICAgICAgIH0K
KworICAgICAgICAvLy8gcHJlLWluY3JlbWVudCAoKytpdCkKKyAgICAgICAganNvbl9yZXZlcnNl
X2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgYmFzZV9pdGVy
YXRvcjo6b3BlcmF0b3IrKygpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9
CisKKyAgICAgICAgLy8vIHBvc3QtZGVjcmVtZW50IChpdC0tKQorICAgICAgICBqc29uX3JldmVy
c2VfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBiYXNlX2l0ZXJhdG9yOjpvcGVyYXRvci0tKDEpOworICAgICAgICB9CisKKyAgICAgICAgLy8v
IHByZS1kZWNyZW1lbnQgKC0taXQpCisgICAgICAgIGpzb25fcmV2ZXJzZV9pdGVyYXRvciYgb3Bl
cmF0b3ItLSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJhc2VfaXRlcmF0b3I6Om9wZXJhdG9y
LS0oKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8v
LyBhZGQgdG8gaXRlcmF0b3IKKyAgICAgICAganNvbl9yZXZlcnNlX2l0ZXJhdG9yJiBvcGVyYXRv
cis9KGRpZmZlcmVuY2VfdHlwZSBpKQorICAgICAgICB7CisgICAgICAgICAgICBiYXNlX2l0ZXJh
dG9yOjpvcGVyYXRvcis9KGkpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9
CisKKyAgICAgICAgLy8vIGFkZCB0byBpdGVyYXRvcgorICAgICAgICBqc29uX3JldmVyc2VfaXRl
cmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBpKSBjb25zdAorICAgICAgICB7CisgICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9ICp0aGlzOworICAgICAgICAgICAgcmVzdWx0ICs9IGk7Cisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgLy8vIHN1YnRy
YWN0IGZyb20gaXRlcmF0b3IKKyAgICAgICAganNvbl9yZXZlcnNlX2l0ZXJhdG9yIG9wZXJhdG9y
LShkaWZmZXJlbmNlX3R5cGUgaSkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSAqdGhpczsKKyAgICAgICAgICAgIHJlc3VsdCAtPSBpOworICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyByZXR1cm4gZGlmZmVyZW5jZQor
ICAgICAgICBkaWZmZXJlbmNlX3R5cGUgb3BlcmF0b3ItKGNvbnN0IGpzb25fcmV2ZXJzZV9pdGVy
YXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLT5i
YXNlKCkgLSBvdGhlci5iYXNlKCk7CisgICAgICAgIH0KKworICAgICAgICAvLy8gYWNjZXNzIHRv
IHN1Y2Nlc3NvcgorICAgICAgICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUg
bikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICoodGhpcy0+b3BlcmF0b3Ir
KG4pKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyByZXR1cm4gdGhlIGtleSBvZiBhbiBvYmpl
Y3QgaXRlcmF0b3IKKyAgICAgICAgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlIGtleSgpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gaXQgPSAtLXRoaXMtPmJhc2UoKTsKKyAg
ICAgICAgICAgIHJldHVybiBpdC5rZXkoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyByZXR1
cm4gdGhlIHZhbHVlIG9mIGFuIGl0ZXJhdG9yCisgICAgICAgIHJlZmVyZW5jZSB2YWx1ZSgpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gaXQgPSAtLXRoaXMtPmJhc2UoKTsKKyAg
ICAgICAgICAgIHJldHVybiBpdC5vcGVyYXRvciAqICgpOworICAgICAgICB9CisgICAgfTsKKwor
CisgIHByaXZhdGU6CisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIGxleGVyIGFu
ZCBwYXJzZXIgLy8KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICAvKiEKKyAgICBA
YnJpZWYgbGV4aWNhbCBhbmFseXNpcworCisgICAgVGhpcyBjbGFzcyBvcmdhbml6ZXMgdGhlIGxl
eGljYWwgYW5hbHlzaXMgZHVyaW5nIEpTT04gZGVzZXJpYWxpemF0aW9uLiBUaGUKKyAgICBjb3Jl
IG9mIGl0IGlzIGEgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgW3JlMmNdKGh0dHA6Ly9yZTJjLm9yZykg
dGhhdAorICAgIHByb2Nlc3NlcyBhIGJ1ZmZlciBhbmQgcmVjb2duaXplcyB0b2tlbnMgYWNjb3Jk
aW5nIHRvIFJGQyA3MTU5LgorICAgICovCisgICAgY2xhc3MgbGV4ZXIKKyAgICB7CisgICAgICBw
dWJsaWM6CisgICAgICAgIC8vLyB0b2tlbiB0eXBlcyBmb3IgdGhlIHBhcnNlcgorICAgICAgICBl
bnVtIGNsYXNzIHRva2VuX3R5cGUKKyAgICAgICAgeworICAgICAgICAgICAgdW5pbml0aWFsaXpl
ZCwgICAvLy88IGluZGljYXRpbmcgdGhlIHNjYW5uZXIgaXMgdW5pbml0aWFsaXplZAorICAgICAg
ICAgICAgbGl0ZXJhbF90cnVlLCAgICAvLy88IHRoZSBgdHJ1ZWAgbGl0ZXJhbAorICAgICAgICAg
ICAgbGl0ZXJhbF9mYWxzZSwgICAvLy88IHRoZSBgZmFsc2VgIGxpdGVyYWwKKyAgICAgICAgICAg
IGxpdGVyYWxfbnVsbCwgICAgLy8vPCB0aGUgYG51bGxgIGxpdGVyYWwKKyAgICAgICAgICAgIHZh
bHVlX3N0cmluZywgICAgLy8vPCBhIHN0cmluZyAtLSB1c2UgZ2V0X3N0cmluZygpIGZvciBhY3R1
YWwgdmFsdWUKKyAgICAgICAgICAgIHZhbHVlX251bWJlciwgICAgLy8vPCBhIG51bWJlciAtLSB1
c2UgZ2V0X251bWJlcigpIGZvciBhY3R1YWwgdmFsdWUKKyAgICAgICAgICAgIGJlZ2luX2FycmF5
LCAgICAgLy8vPCB0aGUgY2hhcmFjdGVyIGZvciBhcnJheSBiZWdpbiBgW2AKKyAgICAgICAgICAg
IGJlZ2luX29iamVjdCwgICAgLy8vPCB0aGUgY2hhcmFjdGVyIGZvciBvYmplY3QgYmVnaW4gYHtg
CisgICAgICAgICAgICBlbmRfYXJyYXksICAgICAgIC8vLzwgdGhlIGNoYXJhY3RlciBmb3IgYXJy
YXkgZW5kIGBdYAorICAgICAgICAgICAgZW5kX29iamVjdCwgICAgICAvLy88IHRoZSBjaGFyYWN0
ZXIgZm9yIG9iamVjdCBlbmQgYH1gCisgICAgICAgICAgICBuYW1lX3NlcGFyYXRvciwgIC8vLzwg
dGhlIG5hbWUgc2VwYXJhdG9yIGA6YAorICAgICAgICAgICAgdmFsdWVfc2VwYXJhdG9yLCAvLy88
IHRoZSB2YWx1ZSBzZXBhcmF0b3IgYCxgCisgICAgICAgICAgICBwYXJzZV9lcnJvciwgICAgIC8v
LzwgaW5kaWNhdGluZyBhIHBhcnNlIGVycm9yCisgICAgICAgICAgICBlbmRfb2ZfaW5wdXQgICAg
IC8vLzwgaW5kaWNhdGluZyB0aGUgZW5kIG9mIHRoZSBpbnB1dCBidWZmZXIKKyAgICAgICAgfTsK
KworICAgICAgICAvLy8gdGhlIGNoYXIgdHlwZSB0byB1c2UgaW4gdGhlIGxleGVyCisgICAgICAg
IHVzaW5nIGxleGVyX2NoYXJfdCA9IHVuc2lnbmVkIGNoYXI7CisKKyAgICAgICAgLy8vIGEgbGV4
ZXIgZnJvbSBhIGJ1ZmZlciB3aXRoIGdpdmVuIGxlbmd0aAorICAgICAgICBsZXhlcihjb25zdCBs
ZXhlcl9jaGFyX3QqIGJ1ZmYsIGNvbnN0IHNpemVfdCBsZW4pIG5vZXhjZXB0CisgICAgICAgICAg
ICA6IG1fY29udGVudChidWZmKQorICAgICAgICB7CisgICAgICAgICAgICBhc3NlcnQobV9jb250
ZW50ICE9IG51bGxwdHIpOworICAgICAgICAgICAgbV9zdGFydCA9IG1fY3Vyc29yID0gbV9jb250
ZW50OworICAgICAgICAgICAgbV9saW1pdCA9IG1fY29udGVudCArIGxlbjsKKyAgICAgICAgfQor
CisgICAgICAgIC8vLyBhIGxleGVyIGZyb20gYW4gaW5wdXQgc3RyZWFtCisgICAgICAgIGV4cGxp
Y2l0IGxleGVyKHN0ZDo6aXN0cmVhbSYgcykKKyAgICAgICAgICAgIDogbV9zdHJlYW0oJnMpLCBt
X2xpbmVfYnVmZmVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gaW1tZWRpYXRlbHkgYWJv
cnQgaWYgc3RyZWFtIGlzIGVycm9uZW91cworICAgICAgICAgICAgaWYgKHMuZmFpbCgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6aW52YWxpZF9hcmd1bWVudD4o
InN0cmVhbSBlcnJvcjogIiArICBzdGQ6OnN0cmluZyhzdHJlcnJvcihlcnJubykpKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gZmlsbCBidWZmZXIKKyAgICAgICAgICAgIGZpbGxf
bGluZV9idWZmZXIoKTsKKworICAgICAgICAgICAgLy8gc2tpcCBVVEYtOCBieXRlLW9yZGVyIG1h
cmsKKyAgICAgICAgICAgIGlmIChtX2xpbmVfYnVmZmVyLnNpemUoKSA+PSAzIGFuZCBtX2xpbmVf
YnVmZmVyLnN1YnN0cigwLCAzKSA9PSAiXHhFRlx4QkJceEJGIikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBtX2xpbmVfYnVmZmVyWzBdID0gJyAnOworICAgICAgICAgICAgICAgIG1f
bGluZV9idWZmZXJbMV0gPSAnICc7CisgICAgICAgICAgICAgICAgbV9saW5lX2J1ZmZlclsyXSA9
ICcgJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIHN3aXRjaCBvZmYg
dW53YW50ZWQgZnVuY3Rpb25zIChkdWUgdG8gcG9pbnRlciBtZW1iZXJzKQorICAgICAgICBsZXhl
cigpID0gZGVsZXRlOworICAgICAgICBsZXhlcihjb25zdCBsZXhlciYpID0gZGVsZXRlOworICAg
ICAgICBsZXhlciBvcGVyYXRvcj0oY29uc3QgbGV4ZXImKSA9IGRlbGV0ZTsKKworICAgICAgICAv
KiEKKyAgICAgICAgQGJyaWVmIGNyZWF0ZSBhIHN0cmluZyBmcm9tIG9uZSBvciB0d28gVW5pY29k
ZSBjb2RlIHBvaW50cworCisgICAgICAgIFRoZXJlIGFyZSB0d28gY2FzZXM6ICgxKSBAYSBjb2Rl
cG9pbnQxIGlzIGluIHRoZSBCYXNpYyBNdWx0aWxpbmd1YWwKKyAgICAgICAgUGxhbmUgKFUrMDAw
MCB0aHJvdWdoIFUrRkZGRikgYW5kIEBhIGNvZGVwb2ludDIgaXMgMCwgb3IgKDIpCisgICAgICAg
IEBhIGNvZGVwb2ludDEgYW5kIEBhIGNvZGVwb2ludDIgYXJlIGEgVVRGLTE2IHN1cnJvZ2F0ZSBw
YWlyIHRvCisgICAgICAgIHJlcHJlc2VudCBhIGNvZGUgcG9pbnQgYWJvdmUgVStGRkZGLgorCisg
ICAgICAgIEBwYXJhbVtpbl0gY29kZXBvaW50MSAgdGhlIGNvZGUgcG9pbnQgKGNhbiBiZSBoaWdo
IHN1cnJvZ2F0ZSkKKyAgICAgICAgQHBhcmFtW2luXSBjb2RlcG9pbnQyICB0aGUgY29kZSBwb2lu
dCAoY2FuIGJlIGxvdyBzdXJyb2dhdGUgb3IgMCkKKworICAgICAgICBAcmV0dXJuIHN0cmluZyBy
ZXByZXNlbnRhdGlvbiBvZiB0aGUgY29kZSBwb2ludDsgdGhlIGxlbmd0aCBvZiB0aGUKKyAgICAg
ICAgcmVzdWx0IHN0cmluZyBpcyBiZXR3ZWVuIDEgYW5kIDQgY2hhcmFjdGVycy4KKworICAgICAg
ICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2UgaWYgY29kZSBwb2ludCBpcyA+IDB4MTBmZmZmOyBl
eGFtcGxlOiBgImNvZGUKKyAgICAgICAgcG9pbnRzIGFib3ZlIDB4MTBGRkZGIGFyZSBpbnZhbGlk
ImAKKyAgICAgICAgQHRocm93IHN0ZDo6aW52YWxpZF9hcmd1bWVudCBpZiB0aGUgbG93IHN1cnJv
Z2F0ZSBpcyBpbnZhbGlkOyBleGFtcGxlOgorICAgICAgICBgIiJtaXNzaW5nIG9yIHdyb25nIGxv
dyBzdXJyb2dhdGUiImAKKworICAgICAgICBAY29tcGxleGl0eSBDb25zdGFudC4KKworICAgICAg
ICBAc2VlIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VURi04I1NhbXBsZV9jb2RlPgor
ICAgICAgICAqLworICAgICAgICBzdGF0aWMgc3RyaW5nX3QgdG9fdW5pY29kZShjb25zdCBzdGQ6
OnNpemVfdCBjb2RlcG9pbnQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzdGQ6OnNpemVfdCBjb2RlcG9pbnQyID0gMCkKKyAgICAgICAgeworICAgICAgICAgICAg
Ly8gY2FsY3VsYXRlIHRoZSBjb2RlIHBvaW50IGZyb20gdGhlIGdpdmVuIGNvZGUgcG9pbnRzCisg
ICAgICAgICAgICBzdGQ6OnNpemVfdCBjb2RlcG9pbnQgPSBjb2RlcG9pbnQxOworCisgICAgICAg
ICAgICAvLyBjaGVjayBpZiBjb2RlcG9pbnQxIGlzIGEgaGlnaCBzdXJyb2dhdGUKKyAgICAgICAg
ICAgIGlmIChjb2RlcG9pbnQxID49IDB4RDgwMCBhbmQgY29kZXBvaW50MSA8PSAweERCRkYpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgY29kZXBvaW50MiBpcyBh
IGxvdyBzdXJyb2dhdGUKKyAgICAgICAgICAgICAgICBpZiAoY29kZXBvaW50MiA+PSAweERDMDAg
YW5kIGNvZGVwb2ludDIgPD0gMHhERkZGKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29kZXBvaW50ID0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhpZ2ggc3Vy
cm9nYXRlIG9jY3VwaWVzIHRoZSBtb3N0IHNpZ25pZmljYW50IDIyIGJpdHMKKyAgICAgICAgICAg
ICAgICAgICAgICAgIChjb2RlcG9pbnQxIDw8IDEwKQorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gbG93IHN1cnJvZ2F0ZSBvY2N1cGllcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgMTUgYml0cwor
ICAgICAgICAgICAgICAgICAgICAgICAgKyBjb2RlcG9pbnQyCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0aGVyZSBpcyBzdGlsbCB0aGUgMHhEODAwLCAweERDMDAgYW5kIDB4MTAwMDAgbm9p
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSByZXN1bHQgc28gd2UgaGF2ZSB0
byBzdWJ0cmFjdCB3aXRoOgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gKDB4RDgwMCA8PCAx
MCkgKyBEQzAwIC0gMHgxMDAwMCA9IDB4MzVGREMwMAorICAgICAgICAgICAgICAgICAgICAgICAg
LSAweDM1RkRDMDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6aW52YWxpZF9h
cmd1bWVudD4oIm1pc3Npbmcgb3Igd3JvbmcgbG93IHN1cnJvZ2F0ZSIpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RyaW5nX3QgcmVzdWx0OworCisg
ICAgICAgICAgICBpZiAoY29kZXBvaW50IDwgMHg4MCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAvLyAxLWJ5dGUgY2hhcmFjdGVyczogMHh4eHh4eHggKEFTQ0lJKQorICAgICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoMSwgc3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3RyaW5nX3Q6OnZh
bHVlX3R5cGU+KGNvZGVwb2ludCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBp
ZiAoY29kZXBvaW50IDw9IDB4N2ZmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8v
IDItYnl0ZSBjaGFyYWN0ZXJzOiAxMTB4eHh4eCAxMHh4eHh4eAorICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoMSwgc3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3RyaW5nX3Q6OnZhbHVlX3R5cGU+
KDB4QzAgfCAoKGNvZGVwb2ludCA+PiA2KSAmIDB4MUYpKSk7CisgICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgxLCBzdGF0aWNfY2FzdDx0eXBlbmFtZSBzdHJpbmdfdDo6dmFsdWVfdHlwZT4o
MHg4MCB8IChjb2RlcG9pbnQgJiAweDNGKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSBpZiAoY29kZXBvaW50IDw9IDB4ZmZmZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAvLyAzLWJ5dGUgY2hhcmFjdGVyczogMTExMHh4eHggMTB4eHh4eHggMTB4eHh4eHgKKyAg
ICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDEsIHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0cmlu
Z190Ojp2YWx1ZV90eXBlPigweEUwIHwgKChjb2RlcG9pbnQgPj4gMTIpICYgMHgwRikpKTsKKyAg
ICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDEsIHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0cmlu
Z190Ojp2YWx1ZV90eXBlPigweDgwIHwgKChjb2RlcG9pbnQgPj4gNikgJiAweDNGKSkpOworICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSwgc3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3RyaW5n
X3Q6OnZhbHVlX3R5cGU+KDB4ODAgfCAoY29kZXBvaW50ICYgMHgzRikpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGNvZGVwb2ludCA8PSAweDEwZmZmZikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAvLyA0LWJ5dGUgY2hhcmFjdGVyczogMTExMTB4eHggMTB4
eHh4eHggMTB4eHh4eHggMTB4eHh4eHgKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDEs
IHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0cmluZ190Ojp2YWx1ZV90eXBlPigweEYwIHwgKChjb2Rl
cG9pbnQgPj4gMTgpICYgMHgwNykpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDEs
IHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0cmluZ190Ojp2YWx1ZV90eXBlPigweDgwIHwgKChjb2Rl
cG9pbnQgPj4gMTIpICYgMHgzRikpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDEs
IHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0cmluZ190Ojp2YWx1ZV90eXBlPigweDgwIHwgKChjb2Rl
cG9pbnQgPj4gNikgJiAweDNGKSkpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSwg
c3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3RyaW5nX3Q6OnZhbHVlX3R5cGU+KDB4ODAgfCAoY29kZXBv
aW50ICYgMHgzRikpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6Om91dF9vZl9yYW5nZT4oImNvZGUgcG9p
bnRzIGFib3ZlIDB4MTBGRkZGIGFyZSBpbnZhbGlkIik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICAvLy8gcmV0dXJuIG5h
bWUgb2YgdmFsdWVzIG9mIHR5cGUgdG9rZW5fdHlwZSAob25seSB1c2VkIGZvciBlcnJvcnMpCisg
ICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyB0b2tlbl90eXBlX25hbWUoY29uc3QgdG9rZW5fdHlw
ZSB0KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgY2FzZSB0b2tlbl90eXBlOjp1bmluaXRpYWxpemVkOgorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gIjx1bmluaXRpYWxpemVkPiI7CisgICAgICAgICAgICAgICAgY2Fz
ZSB0b2tlbl90eXBlOjpsaXRlcmFsX3RydWU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAi
dHJ1ZSBsaXRlcmFsIjsKKyAgICAgICAgICAgICAgICBjYXNlIHRva2VuX3R5cGU6OmxpdGVyYWxf
ZmFsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiZmFsc2UgbGl0ZXJhbCI7CisgICAg
ICAgICAgICAgICAgY2FzZSB0b2tlbl90eXBlOjpsaXRlcmFsX251bGw6CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAibnVsbCBsaXRlcmFsIjsKKyAgICAgICAgICAgICAgICBjYXNlIHRva2Vu
X3R5cGU6OnZhbHVlX3N0cmluZzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJzdHJpbmcg
bGl0ZXJhbCI7CisgICAgICAgICAgICAgICAgY2FzZSB0b2tlbl90eXBlOjp2YWx1ZV9udW1iZXI6
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAibnVtYmVyIGxpdGVyYWwiOworICAgICAgICAg
ICAgICAgIGNhc2UgdG9rZW5fdHlwZTo6YmVnaW5fYXJyYXk6CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiAiJ1snIjsKKyAgICAgICAgICAgICAgICBjYXNlIHRva2VuX3R5cGU6OmJlZ2luX29i
amVjdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICIneyciOworICAgICAgICAgICAgICAg
IGNhc2UgdG9rZW5fdHlwZTo6ZW5kX2FycmF5OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
IiddJyI7CisgICAgICAgICAgICAgICAgY2FzZSB0b2tlbl90eXBlOjplbmRfb2JqZWN0OgorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gIid9JyI7CisgICAgICAgICAgICAgICAgY2FzZSB0b2tl
bl90eXBlOjpuYW1lX3NlcGFyYXRvcjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICInOici
OworICAgICAgICAgICAgICAgIGNhc2UgdG9rZW5fdHlwZTo6dmFsdWVfc2VwYXJhdG9yOgorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gIicsJyI7CisgICAgICAgICAgICAgICAgY2FzZSB0b2tl
bl90eXBlOjpwYXJzZV9lcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICI8cGFyc2Ug
ZXJyb3I+IjsKKyAgICAgICAgICAgICAgICBjYXNlIHRva2VuX3R5cGU6OmVuZF9vZl9pbnB1dDoK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJlbmQgb2YgaW5wdXQiOworICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBj
YXRjaCBub24tZW51bSB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3du
IHRva2VuIjsgLy8gTENPVl9FWENMX0xJTkUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAgVGhpcyBmdW5jdGlvbiBpbXBs
ZW1lbnRzIGEgc2Nhbm5lciBmb3IgSlNPTi4gSXQgaXMgc3BlY2lmaWVkIHVzaW5nCisgICAgICAg
IHJlZ3VsYXIgZXhwcmVzc2lvbnMgdGhhdCB0cnkgdG8gZm9sbG93IFJGQyA3MTU5IGFzIGNsb3Nl
IGFzIHBvc3NpYmxlLgorICAgICAgICBUaGVzZSByZWd1bGFyIGV4cHJlc3Npb25zIGFyZSB0aGVu
IHRyYW5zbGF0ZWQgaW50byBhIG1pbmltaXplZAorICAgICAgICBkZXRlcm1pbmlzdGljIGZpbml0
ZSBhdXRvbWF0b24gKERGQSkgYnkgdGhlIHRvb2wKKyAgICAgICAgW3JlMmNdKGh0dHA6Ly9yZTJj
Lm9yZykuIEFzIGEgcmVzdWx0LCB0aGUgdHJhbnNsYXRlZCBjb2RlIGZvciB0aGlzCisgICAgICAg
IGZ1bmN0aW9uIGNvbnNpc3RzIG9mIGEgbGFyZ2UgYmxvY2sgb2YgY29kZSB3aXRoIGBnb3RvYCBq
dW1wcy4KKworICAgICAgICBAcmV0dXJuIHRoZSBjbGFzcyBvZiB0aGUgbmV4dCB0b2tlbiByZWFk
IGZyb20gdGhlIGJ1ZmZlcgorCisgICAgICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgbGVu
Z3RoIG9mIHRoZSBpbnB1dC5cbgorCisgICAgICAgIFByb3Bvc2l0aW9uOiBUaGUgbG9vcCBiZWxv
dyB3aWxsIGFsd2F5cyB0ZXJtaW5hdGUgZm9yIGZpbml0ZSBpbnB1dC5cbgorCisgICAgICAgIFBy
b29mIChieSBjb250cmFkaWN0aW9uKTogQXNzdW1lIGEgZmluaXRlIGlucHV0LiBUbyBsb29wIGZv
cmV2ZXIsIHRoZQorICAgICAgICBsb29wIG11c3QgbmV2ZXIgaGl0IGNvZGUgd2l0aCBhIGBicmVh
a2Agc3RhdGVtZW50LiBUaGUgb25seSBjb2RlCisgICAgICAgIHNuaXBwZXRzIHdpdGhvdXQgYSBg
YnJlYWtgIHN0YXRlbWVudCBhcmUgdGhlIGNvbnRpbnVlIHN0YXRlbWVudHMgZm9yCisgICAgICAg
IHdoaXRlc3BhY2UgYW5kIGJ5dGUtb3JkZXItbWFya3MuIFRvIGxvb3AgZm9yZXZlciwgdGhlIGlu
cHV0IG11c3QgYmUgYW4KKyAgICAgICAgaW5maW5pdGUgc2VxdWVuY2Ugb2Ygd2hpdGVzcGFjZSBv
ciBieXRlLW9yZGVyLW1hcmtzLiBUaGlzIGNvbnRyYWRpY3RzCisgICAgICAgIHRoZSBhc3N1bXB0
aW9uIG9mIGZpbml0ZSBpbnB1dCwgcS5lLmQuCisgICAgICAgICovCisgICAgICAgIHRva2VuX3R5
cGUgc2NhbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIC8vIHBvaW50ZXIgZm9yIGJhY2t0cmFja2luZyBpbmZvcm1h
dGlvbgorICAgICAgICAgICAgICAgIG1fbWFya2VyID0gbnVsbHB0cjsKKworICAgICAgICAgICAg
ICAgIC8vIHJlbWVtYmVyIHRoZSBiZWdpbiBvZiB0aGUgdG9rZW4KKyAgICAgICAgICAgICAgICBt
X3N0YXJ0ID0gbV9jdXJzb3I7CisgICAgICAgICAgICAgICAgYXNzZXJ0KG1fc3RhcnQgIT0gbnVs
bHB0cik7CisKKworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbGV4ZXJf
Y2hhcl90IHl5Y2g7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB5eWFjY2VwdCA9
IDA7CisgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHl5Ym1b
XSA9CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IDAsICAzMiwgIDMyLCAgIDAsICAgMCwgIDMyLCAgIDAsICAgMCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIDE2MCwgMTI4LCAgIDAsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4
LAorICAgICAgICAgICAgICAgICAgICAgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwg
MTI4LCAxMjgsCisgICAgICAgICAgICAgICAgICAgICAgICAxOTIsIDE5MiwgMTkyLCAxOTIsIDE5
MiwgMTkyLCAxOTIsIDE5MiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDE5MiwgMTkyLCAxMjgs
IDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LAorICAgICAgICAgICAgICAgICAgICAgICAgMTI4LCAx
MjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LAorICAgICAg
ICAgICAgICAgICAgICAgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAgIDAsIDEyOCwgMTI4LCAxMjgs
CisgICAgICAgICAgICAgICAgICAgICAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAx
MjgsIDEyOCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4
LCAxMjgsIDEyOCwgMTI4LAorICAgICAgICAgICAgICAgICAgICAgICAgMTI4LCAxMjgsIDEyOCwg
MTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsCisgICAgICAgICAgICAgICAgICAgICAgICAxMjgsIDEy
OCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKChtX2xpbWl0IC0gbV9jdXJzb3IpIDwgNSkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZmlsbF9saW5lX2J1ZmZlcig1KTsgICAgLy8gTENPVl9F
WENMX0xJTkUKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB5eWNo
ID0gKm1fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAoeXlibVswICsgeXljaF0gJiAz
MikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBi
YXNpY19qc29uX3BhcnNlcl82OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoIDw9ICdbJykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy0nKQorICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICciJykKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh5eWNoIDw9IDB4MDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMjsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoeXljaCA8PSAnIScpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNv
bl9wYXJzZXJfNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoIDw9ICcrJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3Bh
cnNlcl80OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcsJykKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBi
YXNpY19qc29uX3BhcnNlcl8xMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzEy
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnOScpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoeXljaCA8PSAnLycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNDsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoeXljaCA8PSAnMCcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNv
bl9wYXJzZXJfMTM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8xNTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gJzonKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25f
cGFyc2VyXzE3OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdaJykKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290
byBiYXNpY19qc29uX3BhcnNlcl80OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJf
MTk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0g
J24nKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICdlJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICddJykKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8yMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25f
cGFyc2VyXzQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdmJykKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z290byBiYXNpY19qc29uX3BhcnNlcl8yMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnbScpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJh
c2ljX2pzb25fcGFyc2VyXzI0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAneicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAndCcpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFz
aWNfanNvbl9wYXJzZXJfMjU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl80Owor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoeXljaCA8PSAneycpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNf
anNvbl9wYXJzZXJfMjY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ30nKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzI4OworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9w
YXJzZXJfNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KK2Jhc2ljX2pzb25fcGFyc2VyXzI6Cisg
ICAgICAgICAgICAgICAgICAgICsrbV9jdXJzb3I7CisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxhc3RfdG9rZW5fdHlwZSA9IHRva2VuX3R5cGU6OmVuZF9v
Zl9pbnB1dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9CitiYXNpY19qc29uX3BhcnNlcl80OgorICAgICAgICAgICAgICAgICAgICArK21fY3Vy
c29yOworYmFzaWNfanNvbl9wYXJzZXJfNToKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbGFzdF90b2tlbl90eXBlID0gdG9rZW5fdHlwZTo6cGFyc2VfZXJy
b3I7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQorYmFzaWNfanNvbl9wYXJzZXJfNjoKKyAgICAgICAgICAgICAgICAgICAgKyttX2N1cnNvcjsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG1fbGltaXQgPD0gbV9jdXJzb3IpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxfbGluZV9idWZmZXIoMSk7
ICAgIC8vIExDT1ZfRVhDTF9MSU5FCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgeXljaCA9ICptX2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHl5Ym1b
MCArIHl5Y2hdICYgMzIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNjsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICAgICAgfQorYmFzaWNfanNvbl9wYXJzZXJfOToKKyAgICAgICAgICAg
ICAgICAgICAgeXlhY2NlcHQgPSAwOworICAgICAgICAgICAgICAgICAgICB5eWNoID0gKihtX21h
cmtlciA9ICsrbV9jdXJzb3IpOworICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAweDFG
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJh
c2ljX2pzb25fcGFyc2VyXzU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gMHg3RikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAweEMxKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFy
c2VyXzU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHl5
Y2ggPD0gMHhGNCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzU7CitiYXNpY19qc29uX3Bh
cnNlcl8xMDoKKyAgICAgICAgICAgICAgICAgICAgKyttX2N1cnNvcjsKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF90b2tlbl90eXBlID0gdG9rZW5f
dHlwZTo6dmFsdWVfc2VwYXJhdG9yOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KK2Jhc2ljX2pzb25fcGFyc2VyXzEyOgorICAgICAgICAgICAg
ICAgICAgICB5eWNoID0gKisrbV9jdXJzb3I7CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNo
IDw9ICcvJykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
Z290byBiYXNpY19qc29uX3BhcnNlcl81OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcwJykKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8xMzsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnOScpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNv
bl9wYXJzZXJfMTU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
Z290byBiYXNpY19qc29uX3BhcnNlcl81OworYmFzaWNfanNvbl9wYXJzZXJfMTM6CisgICAgICAg
ICAgICAgICAgICAgIHl5YWNjZXB0ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgeXljaCA9ICoo
bV9tYXJrZXIgPSArK21fY3Vyc29yKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0g
J0QnKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
eXljaCA9PSAnLicpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl80MzsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNo
IDw9ICdFJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzQ0OworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ2UnKQorICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNf
anNvbl9wYXJzZXJfNDQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KK2Jhc2ljX2pzb25fcGFyc2VyXzE0OgorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3Rva2VuX3R5cGUgPSB0b2tlbl90eXBlOjp2YWx1
ZV9udW1iZXI7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorYmFzaWNfanNvbl9wYXJzZXJfMTU6CisgICAgICAgICAgICAgICAgICAgIHl5YWNj
ZXB0ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgbV9tYXJrZXIgPSArK21fY3Vyc29yOworICAg
ICAgICAgICAgICAgICAgICBpZiAoKG1fbGltaXQgLSBtX2N1cnNvcikgPCAzKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxsX2xpbmVfYnVmZmVyKDMp
OyAgICAvLyBMQ09WX0VYQ0xfTElORQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHl5Y2ggPSAqbV9jdXJzb3I7CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWJt
WzAgKyB5eWNoXSAmIDY0KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzE1OworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdEJykKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJy4nKQorICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNf
anNvbl9wYXJzZXJfNDM7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzE0OworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0UnKQorICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJz
ZXJfNDQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoeXljaCA9PSAnZScpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl80NDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9w
YXJzZXJfMTQ7CisgICAgICAgICAgICAgICAgICAgIH0KK2Jhc2ljX2pzb25fcGFyc2VyXzE3Ogor
ICAgICAgICAgICAgICAgICAgICArK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3Rva2VuX3R5cGUgPSB0b2tlbl90eXBlOjpuYW1l
X3NlcGFyYXRvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CitiYXNpY19qc29uX3BhcnNlcl8xOToKKyAgICAgICAgICAgICAgICAgICAgKytt
X2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
bGFzdF90b2tlbl90eXBlID0gdG9rZW5fdHlwZTo6YmVnaW5fYXJyYXk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorYmFzaWNfanNvbl9wYXJz
ZXJfMjE6CisgICAgICAgICAgICAgICAgICAgICsrbV9jdXJzb3I7CisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfdG9rZW5fdHlwZSA9IHRva2VuX3R5
cGU6OmVuZF9hcnJheTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CitiYXNpY19qc29uX3BhcnNlcl8yMzoKKyAgICAgICAgICAgICAgICAgICAg
eXlhY2NlcHQgPSAwOworICAgICAgICAgICAgICAgICAgICB5eWNoID0gKihtX21hcmtlciA9ICsr
bV9jdXJzb3IpOworICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnYScpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9w
YXJzZXJfNDU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZ290
byBiYXNpY19qc29uX3BhcnNlcl81OworYmFzaWNfanNvbl9wYXJzZXJfMjQ6CisgICAgICAgICAg
ICAgICAgICAgIHl5YWNjZXB0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgeXljaCA9ICoobV9t
YXJrZXIgPSArK21fY3Vyc29yKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ3Un
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJh
c2ljX2pzb25fcGFyc2VyXzQ2OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNTsKK2Jhc2ljX2pzb25fcGFyc2VyXzI1Ogor
ICAgICAgICAgICAgICAgICAgICB5eWFjY2VwdCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHl5
Y2ggPSAqKG1fbWFya2VyID0gKyttX2N1cnNvcik7CisgICAgICAgICAgICAgICAgICAgIGlmICh5
eWNoID09ICdyJykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgZ290byBiYXNpY19qc29uX3BhcnNlcl80NzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzU7CitiYXNpY19qc29uX3Bh
cnNlcl8yNjoKKyAgICAgICAgICAgICAgICAgICAgKyttX2N1cnNvcjsKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF90b2tlbl90eXBlID0gdG9rZW5f
dHlwZTo6YmVnaW5fb2JqZWN0OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIH0KK2Jhc2ljX2pzb25fcGFyc2VyXzI4OgorICAgICAgICAgICAgICAg
ICAgICArK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBsYXN0X3Rva2VuX3R5cGUgPSB0b2tlbl90eXBlOjplbmRfb2JqZWN0OworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KK2Jhc2ljX2pz
b25fcGFyc2VyXzMwOgorICAgICAgICAgICAgICAgICAgICArK21fY3Vyc29yOworICAgICAgICAg
ICAgICAgICAgICBpZiAobV9saW1pdCA8PSBtX2N1cnNvcikKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgZmlsbF9saW5lX2J1ZmZlcigxKTsgICAgLy8gTENP
Vl9FWENMX0xJTkUKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB5
eWNoID0gKm1fY3Vyc29yOworYmFzaWNfanNvbl9wYXJzZXJfMzE6CisgICAgICAgICAgICAgICAg
ICAgIGlmICh5eWJtWzAgKyB5eWNoXSAmIDEyOCkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMDsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAweEUwKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAn
XFwnKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9IDB4MUYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoeXljaCA8PSAnIicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMzOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
b3RvIGJhc2ljX2pzb25fcGFyc2VyXzM1OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9IDB4QzEpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJh
c2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAweERGKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNp
Y19qc29uX3BhcnNlcl8zNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zNzsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh5eWNoIDw9IDB4RUYpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gMHhFRCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNv
bl9wYXJzZXJfMzk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzg7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gMHhG
MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNDA7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9IDB4RjMp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzQxOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAweEY0KQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl80MjsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
K2Jhc2ljX2pzb25fcGFyc2VyXzMyOgorICAgICAgICAgICAgICAgICAgICBtX2N1cnNvciA9IG1f
bWFya2VyOworICAgICAgICAgICAgICAgICAgICBpZiAoeXlhY2NlcHQgPT0gMCkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3Bh
cnNlcl81OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNp
Y19qc29uX3BhcnNlcl8xNDsKKyAgICAgICAgICAgICAgICAgICAgfQorYmFzaWNfanNvbl9wYXJz
ZXJfMzM6CisgICAgICAgICAgICAgICAgICAgICsrbV9jdXJzb3I7CisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfdG9rZW5fdHlwZSA9IHRva2VuX3R5
cGU6OnZhbHVlX3N0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9CitiYXNpY19qc29uX3BhcnNlcl8zNToKKyAgICAgICAgICAgICAgICAg
ICAgKyttX2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fbGltaXQgPD0gbV9jdXJz
b3IpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxf
bGluZV9idWZmZXIoMSk7ICAgIC8vIExDT1ZfRVhDTF9MSU5FCisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgeXljaCA9ICptX2N1cnNvcjsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gJ2UnKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJyInKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290
byBiYXNpY19qc29uX3BhcnNlcl8zMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy4nKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBi
YXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXlj
aCA8PSAnXFwnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ1snKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJh
c2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzA7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdiJykKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNp
Y19qc29uX3BhcnNlcl8zMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdxJykK
KyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoeXljaCA8PSAnZicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMwOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
eXljaCA9PSAnbicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMwOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJh
c2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdzJykKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdy
JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
b3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAndCcp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzA7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPD0gJ3UnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzQ4Owor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CitiYXNpY19qc29uX3BhcnNlcl8zNjoKKyAgICAgICAgICAgICAgICAgICAgKyttX2N1cnNv
cjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fbGltaXQgPD0gbV9jdXJzb3IpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxfbGluZV9idWZmZXIo
MSk7ICAgIC8vIExDT1ZfRVhDTF9MSU5FCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgeXljaCA9ICptX2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHl5
Y2ggPD0gMHg3RikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAweEJGKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMwOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9w
YXJzZXJfMzI7CitiYXNpY19qc29uX3BhcnNlcl8zNzoKKyAgICAgICAgICAgICAgICAgICAgKytt
X2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fbGltaXQgPD0gbV9jdXJzb3IpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxfbGluZV9i
dWZmZXIoMSk7ICAgIC8vIExDT1ZfRVhDTF9MSU5FCisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgeXljaCA9ICptX2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPD0gMHg5RikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAweEJGKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzM2
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNf
anNvbl9wYXJzZXJfMzI7CitiYXNpY19qc29uX3BhcnNlcl8zODoKKyAgICAgICAgICAgICAgICAg
ICAgKyttX2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fbGltaXQgPD0gbV9jdXJz
b3IpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxf
bGluZV9idWZmZXIoMSk7ICAgIC8vIExDT1ZfRVhDTF9MSU5FCisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgeXljaCA9ICptX2N1cnNvcjsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHl5Y2ggPD0gMHg3RikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAweEJGKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFy
c2VyXzM2OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGdvdG8g
YmFzaWNfanNvbl9wYXJzZXJfMzI7CitiYXNpY19qc29uX3BhcnNlcl8zOToKKyAgICAgICAgICAg
ICAgICAgICAgKyttX2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fbGltaXQgPD0g
bV9jdXJzb3IpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZpbGxfbGluZV9idWZmZXIoMSk7ICAgIC8vIExDT1ZfRVhDTF9MSU5FCisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeXljaCA9ICptX2N1cnNvcjsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gMHg3RikKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAweDlGKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pz
b25fcGFyc2VyXzM2OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CitiYXNpY19qc29uX3BhcnNlcl80MDoKKyAgICAg
ICAgICAgICAgICAgICAgKyttX2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fbGlt
aXQgPD0gbV9jdXJzb3IpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZpbGxfbGluZV9idWZmZXIoMSk7ICAgIC8vIExDT1ZfRVhDTF9MSU5FCisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeXljaCA9ICptX2N1cnNvcjsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gMHg4RikKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAweEJG
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJh
c2ljX2pzb25fcGFyc2VyXzM4OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CitiYXNpY19qc29uX3BhcnNlcl80MToK
KyAgICAgICAgICAgICAgICAgICAgKyttX2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG1fbGltaXQgPD0gbV9jdXJzb3IpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZpbGxfbGluZV9idWZmZXIoMSk7ICAgIC8vIExDT1ZfRVhDTF9MSU5FCisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeXljaCA9ICptX2N1cnNv
cjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gMHg3RikKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8z
MjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8
PSAweEJGKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBn
b3RvIGJhc2ljX2pzb25fcGFyc2VyXzM4OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CitiYXNpY19qc29uX3BhcnNl
cl80MjoKKyAgICAgICAgICAgICAgICAgICAgKyttX2N1cnNvcjsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fbGltaXQgPD0gbV9jdXJzb3IpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZpbGxfbGluZV9idWZmZXIoMSk7ICAgIC8vIExDT1ZfRVhDTF9M
SU5FCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeXljaCA9ICpt
X2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gMHg3RikKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3Bh
cnNlcl8zMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAo
eXljaCA8PSAweDhGKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzM4OworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CitiYXNpY19qc29u
X3BhcnNlcl80MzoKKyAgICAgICAgICAgICAgICAgICAgeXljaCA9ICorK21fY3Vyc29yOworICAg
ICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzknKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2lj
X2pzb25fcGFyc2VyXzQ5OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CitiYXNpY19qc29uX3BhcnNlcl80NDoKKyAg
ICAgICAgICAgICAgICAgICAgeXljaCA9ICorK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAg
ICBpZiAoeXljaCA8PSAnLCcpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh5eWNoID09ICcrJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzUxOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNp
Y19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh5eWNoIDw9ICctJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzUxOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy8nKQor
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnOScpCisgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNl
cl81MjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAgICAgICAgICAgIH0KK2Jhc2lj
X2pzb25fcGFyc2VyXzQ1OgorICAgICAgICAgICAgICAgICAgICB5eWNoID0gKisrbV9jdXJzb3I7
CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdsJykKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl81NDsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pz
b25fcGFyc2VyXzMyOworYmFzaWNfanNvbl9wYXJzZXJfNDY6CisgICAgICAgICAgICAgICAgICAg
IHl5Y2ggPSAqKyttX2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ2wn
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJh
c2ljX2pzb25fcGFyc2VyXzU1OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CitiYXNpY19qc29uX3BhcnNlcl80NzoK
KyAgICAgICAgICAgICAgICAgICAgeXljaCA9ICorK21fY3Vyc29yOworICAgICAgICAgICAgICAg
ICAgICBpZiAoeXljaCA9PSAndScpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNTY7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKK2Jh
c2ljX2pzb25fcGFyc2VyXzQ4OgorICAgICAgICAgICAgICAgICAgICArK21fY3Vyc29yOworICAg
ICAgICAgICAgICAgICAgICBpZiAobV9saW1pdCA8PSBtX2N1cnNvcikKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlsbF9saW5lX2J1ZmZlcigxKTsgICAg
Ly8gTENPVl9FWENMX0xJTkUKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB5eWNoID0gKm1fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAn
QCcpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICcvJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzknKQorICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFz
aWNfanNvbl9wYXJzZXJfNTc7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0YnKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9w
YXJzZXJfNTc7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoeXljaCA8PSAnYCcpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdm
JykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzU3OworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAg
ICAgICAgICAgICAgICAgfQorYmFzaWNfanNvbl9wYXJzZXJfNDk6CisgICAgICAgICAgICAgICAg
ICAgIHl5YWNjZXB0ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgbV9tYXJrZXIgPSArK21fY3Vy
c29yOworICAgICAgICAgICAgICAgICAgICBpZiAoKG1fbGltaXQgLSBtX2N1cnNvcikgPCAzKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxsX2xpbmVf
YnVmZmVyKDMpOyAgICAvLyBMQ09WX0VYQ0xfTElORQorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIHl5Y2ggPSAqbV9jdXJzb3I7CisgICAgICAgICAgICAgICAgICAg
IGlmICh5eWNoIDw9ICdEJykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gJy8nKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMTQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8
PSAnOScpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl80OTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMTQ7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnRScpCisg
ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290
byBiYXNpY19qc29uX3BhcnNlcl80NDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdlJykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2Vy
XzQ0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
Z290byBiYXNpY19qc29uX3BhcnNlcl8xNDsKKyAgICAgICAgICAgICAgICAgICAgfQorYmFzaWNf
anNvbl9wYXJzZXJfNTE6CisgICAgICAgICAgICAgICAgICAgIHl5Y2ggPSAqKyttX2N1cnNvcjsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy8nKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID49ICc6
JykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBi
YXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAgICAgICAgICAgICAgfQorYmFzaWNfanNvbl9w
YXJzZXJfNTI6CisgICAgICAgICAgICAgICAgICAgICsrbV9jdXJzb3I7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChtX2xpbWl0IDw9IG1fY3Vyc29yKQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmaWxsX2xpbmVfYnVmZmVyKDEpOyAgICAvLyBMQ09WX0VY
Q0xfTElORQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHl5Y2gg
PSAqbV9jdXJzb3I7CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29u
X3BhcnNlcl8xNDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBp
ZiAoeXljaCA8PSAnOScpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNTI7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8xNDsKK2Jhc2ljX2pz
b25fcGFyc2VyXzU0OgorICAgICAgICAgICAgICAgICAgICB5eWNoID0gKisrbV9jdXJzb3I7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdzJykKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl81ODsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25f
cGFyc2VyXzMyOworYmFzaWNfanNvbl9wYXJzZXJfNTU6CisgICAgICAgICAgICAgICAgICAgIHl5
Y2ggPSAqKyttX2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ2wnKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2lj
X2pzb25fcGFyc2VyXzU5OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CitiYXNpY19qc29uX3BhcnNlcl81NjoKKyAg
ICAgICAgICAgICAgICAgICAgeXljaCA9ICorK21fY3Vyc29yOworICAgICAgICAgICAgICAgICAg
ICBpZiAoeXljaCA9PSAnZScpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNjE7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKK2Jhc2lj
X2pzb25fcGFyc2VyXzU3OgorICAgICAgICAgICAgICAgICAgICArK21fY3Vyc29yOworICAgICAg
ICAgICAgICAgICAgICBpZiAobV9saW1pdCA8PSBtX2N1cnNvcikKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlsbF9saW5lX2J1ZmZlcigxKTsgICAgLy8g
TENPVl9FWENMX0xJTkUKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB5eWNoID0gKm1fY3Vyc29yOworICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnQCcp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNo
IDw9ICcvJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzknKQorICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNf
anNvbl9wYXJzZXJfNjM7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0YnKQorICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJz
ZXJfNjM7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoeXljaCA8PSAnYCcpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdmJykK
KyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
b3RvIGJhc2ljX2pzb25fcGFyc2VyXzYzOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAg
ICAgICAgICAgICAgfQorYmFzaWNfanNvbl9wYXJzZXJfNTg6CisgICAgICAgICAgICAgICAgICAg
IHl5Y2ggPSAqKyttX2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ2Un
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJh
c2ljX2pzb25fcGFyc2VyXzY0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CitiYXNpY19qc29uX3BhcnNlcl81OToK
KyAgICAgICAgICAgICAgICAgICAgKyttX2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF90b2tlbl90eXBlID0gdG9rZW5fdHlwZTo6bGl0
ZXJhbF9udWxsOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIH0KK2Jhc2ljX2pzb25fcGFyc2VyXzYxOgorICAgICAgICAgICAgICAgICAgICArK21f
Y3Vyc29yOworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBs
YXN0X3Rva2VuX3R5cGUgPSB0b2tlbl90eXBlOjpsaXRlcmFsX3RydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorYmFzaWNfanNvbl9wYXJz
ZXJfNjM6CisgICAgICAgICAgICAgICAgICAgICsrbV9jdXJzb3I7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2xpbWl0IDw9IG1fY3Vyc29yKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBmaWxsX2xpbmVfYnVmZmVyKDEpOyAgICAvLyBMQ09WX0VYQ0xf
TElORQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHl5Y2ggPSAq
bV9jdXJzb3I7CisgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdAJykKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy8nKQor
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnOScpCisgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNl
cl82NjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoeXljaCA8PSAnRicpCisgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl82NjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNo
IDw9ICdgJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2YnKQorICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNf
anNvbl9wYXJzZXJfNjY7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOworICAgICAgICAgICAgICAgICAg
ICB9CitiYXNpY19qc29uX3BhcnNlcl82NDoKKyAgICAgICAgICAgICAgICAgICAgKyttX2N1cnNv
cjsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF90
b2tlbl90eXBlID0gdG9rZW5fdHlwZTo6bGl0ZXJhbF9mYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CitiYXNpY19qc29uX3BhcnNlcl82
NjoKKyAgICAgICAgICAgICAgICAgICAgKyttX2N1cnNvcjsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG1fbGltaXQgPD0gbV9jdXJzb3IpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZpbGxfbGluZV9idWZmZXIoMSk7ICAgIC8vIExDT1ZfRVhDTF9MSU5F
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeXljaCA9ICptX2N1
cnNvcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0AnKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBi
YXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc5JykKKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMw
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZ290
byBiYXNpY19qc29uX3BhcnNlcl8zMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoIDw9ICdGJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMwOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0g
J2AnKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnZicpCisgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29u
X3BhcnNlcl8zMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
IGxhc3RfdG9rZW5fdHlwZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAgICBAYnJp
ZWYgYXBwZW5kIGRhdGEgZnJvbSB0aGUgc3RyZWFtIHRvIHRoZSBsaW5lIGJ1ZmZlcgorCisgICAg
ICAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBzY2FuKCkgZnVuY3Rpb24gd2hlbiB0
aGUgZW5kIG9mIHRoZQorICAgICAgICBidWZmZXIgKGBtX2xpbWl0YCkgaXMgcmVhY2hlZCBhbmQg
dGhlIGBtX2N1cnNvcmAgcG9pbnRlciBjYW5ub3QgYmUKKyAgICAgICAgaW5jcmVtZW50ZWQgd2l0
aG91dCBsZWF2aW5nIHRoZSBsaW1pdHMgb2YgdGhlIGxpbmUgYnVmZmVyLiBOb3RlIHJlMmMKKyAg
ICAgICAgZGVjaWRlcyB3aGVuIHRvIGNhbGwgdGhpcyBmdW5jdGlvbi4KKworICAgICAgICBJZiB0
aGUgbGV4ZXIgcmVhZHMgZnJvbSBjb250aWd1b3VzIHN0b3JhZ2UsIHRoZXJlIGlzIG5vIHRyYWls
aW5nIG51bGwKKyAgICAgICAgYnl0ZS4gVGhlcmVmb3JlLCB0aGlzIGZ1bmN0aW9uIG11c3QgbWFr
ZSBzdXJlIHRvIGFkZCB0aGVzZSBwYWRkaW5nCisgICAgICAgIG51bGwgYnl0ZXMuCisKKyAgICAg
ICAgSWYgdGhlIGxleGVyIHJlYWRzIGZyb20gYW4gaW5wdXQgc3RyZWFtLCB0aGlzIGZ1bmN0aW9u
IHJlYWRzIHRoZSBuZXh0CisgICAgICAgIGxpbmUgb2YgdGhlIGlucHV0LgorCisgICAgICAgIEBw
cmUKKyAgICAgICAgICAgIHAgcCBwIHAgcCBwIHUgdSB1IHUgdSB4IC4gLiAuIC4gLiAuCisgICAg
ICAgICAgICBeICAgICAgICAgICBeICAgICAgIF4gICBeCisgICAgICAgICAgICBtX2NvbnRlbnQg
ICBtX3N0YXJ0IHwgICBtX2xpbWl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Y3Vyc29yCisKKyAgICAgICAgQHBvc3QKKyAgICAgICAgICAgIHUgdSB1IHUgdSB4IHggeCB4IHgg
eCB4IC4gLiAuIC4gLiAuCisgICAgICAgICAgICBeICAgICAgIF4gICAgICAgICAgICAgICBeCisg
ICAgICAgICAgICB8ICAgICAgIG1fY3Vyc29yICAgICAgICBtX2xpbWl0CisgICAgICAgICAgICBt
X3N0YXJ0CisgICAgICAgICAgICBtX2NvbnRlbnQKKyAgICAgICAgKi8KKyAgICAgICAgdm9pZCBm
aWxsX2xpbmVfYnVmZmVyKHNpemVfdCBuID0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
aWYgbGluZSBidWZmZXIgaXMgdXNlZCwgbV9jb250ZW50IHBvaW50cyB0byBpdHMgZGF0YQorICAg
ICAgICAgICAgYXNzZXJ0KG1fbGluZV9idWZmZXIuZW1wdHkoKQorICAgICAgICAgICAgICAgICAg
IG9yIG1fY29udGVudCA9PSByZWludGVycHJldF9jYXN0PGNvbnN0IGxleGVyX2NoYXJfdCo+KG1f
bGluZV9idWZmZXIuZGF0YSgpKSk7CisKKyAgICAgICAgICAgIC8vIGlmIGxpbmUgYnVmZmVyIGlz
IHVzZWQsIG1fbGltaXQgaXMgc2V0IHBhc3QgdGhlIGVuZCBvZiBpdHMgZGF0YQorICAgICAgICAg
ICAgYXNzZXJ0KG1fbGluZV9idWZmZXIuZW1wdHkoKQorICAgICAgICAgICAgICAgICAgIG9yIG1f
bGltaXQgPT0gbV9jb250ZW50ICsgbV9saW5lX2J1ZmZlci5zaXplKCkpOworCisgICAgICAgICAg
ICAvLyBwb2ludGVyIHJlbGF0aW9uc2hpcHMKKyAgICAgICAgICAgIGFzc2VydChtX2NvbnRlbnQg
PD0gbV9zdGFydCk7CisgICAgICAgICAgICBhc3NlcnQobV9zdGFydCA8PSBtX2N1cnNvcik7Cisg
ICAgICAgICAgICBhc3NlcnQobV9jdXJzb3IgPD0gbV9saW1pdCk7CisgICAgICAgICAgICBhc3Nl
cnQobV9tYXJrZXIgPT0gbnVsbHB0ciBvciBtX21hcmtlciAgPD0gbV9saW1pdCk7CisKKyAgICAg
ICAgICAgIC8vIG51bWJlciBvZiBwcm9jZXNzZWQgY2hhcmFjdGVycyAocCkKKyAgICAgICAgICAg
IGNvbnN0IHNpemVfdCBudW1fcHJvY2Vzc2VkX2NoYXJzID0gc3RhdGljX2Nhc3Q8c2l6ZV90Piht
X3N0YXJ0IC0gbV9jb250ZW50KTsKKyAgICAgICAgICAgIC8vIG9mZnNldCBmb3IgbV9tYXJrZXIg
d3J0LiB0byBtX3N0YXJ0CisgICAgICAgICAgICBjb25zdCBhdXRvIG9mZnNldF9tYXJrZXIgPSAo
bV9tYXJrZXIgPT0gbnVsbHB0cikgPyAwIDogbV9tYXJrZXIgLSBtX3N0YXJ0OworICAgICAgICAg
ICAgLy8gbnVtYmVyIG9mIHVucHJvY2Vzc2VkIGNoYXJhY3RlcnMgKHUpCisgICAgICAgICAgICBj
b25zdCBhdXRvIG9mZnNldF9jdXJzb3IgPSBtX2N1cnNvciAtIG1fc3RhcnQ7CisKKyAgICAgICAg
ICAgIC8vIG5vIHN0cmVhbSBpcyB1c2VkIG9yIGVuZCBvZiBmaWxlIGlzIHJlYWNoZWQKKyAgICAg
ICAgICAgIGlmIChtX3N0cmVhbSA9PSBudWxscHRyIG9yIG1fc3RyZWFtLT5lb2YoKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBtX3N0YXJ0IG1heSBvciBtYXkgbm90IGJlIHBv
aW50aW5nIGludG8gbV9saW5lX2J1ZmZlciBhdAorICAgICAgICAgICAgICAgIC8vIHRoaXMgcG9p
bnQuIFdlIHRydXN0IHRoZSBzdGFuZGFuZCBsaWJyYXJ5IHRvIGRvIHRoZSByaWdodAorICAgICAg
ICAgICAgICAgIC8vIHRoaW5nLiBTZWUgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMjgxNDIw
MTEvMjY2Mzc4CisgICAgICAgICAgICAgICAgbV9saW5lX2J1ZmZlci5hc3NpZ24obV9zdGFydCwg
bV9saW1pdCk7CisKKyAgICAgICAgICAgICAgICAvLyBhcHBlbmQgbiBjaGFyYWN0ZXJzIHRvIG1h
a2Ugc3VyZSB0aGF0IHRoZXJlIGlzIHN1ZmZpY2llbnQKKyAgICAgICAgICAgICAgICAvLyBzcGFj
ZSBiZXR3ZWVuIG1fY3Vyc29yIGFuZCBtX2xpbWl0CisgICAgICAgICAgICAgICAgbV9saW5lX2J1
ZmZlci5hcHBlbmQoMSwgJ1x4MDAnKTsKKyAgICAgICAgICAgICAgICBpZiAobiA+IDApCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtX2xpbmVfYnVmZmVyLmFwcGVuZChu
IC0gMSwgJ1x4MDEnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gZGVsZXRlIHByb2Nl
c3NlZCBjaGFyYWN0ZXJzIGZyb20gbGluZSBidWZmZXIKKyAgICAgICAgICAgICAgICBtX2xpbmVf
YnVmZmVyLmVyYXNlKDAsIG51bV9wcm9jZXNzZWRfY2hhcnMpOworICAgICAgICAgICAgICAgIC8v
IHJlYWQgbmV4dCBsaW5lIGZyb20gaW5wdXQgc3RyZWFtCisgICAgICAgICAgICAgICAgbV9saW5l
X2J1ZmZlcl90bXAuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICBzdGQ6OmdldGxpbmUoKm1fc3Ry
ZWFtLCBtX2xpbmVfYnVmZmVyX3RtcCwgJ1xuJyk7CisKKyAgICAgICAgICAgICAgICAvLyBhZGQg
bGluZSB3aXRoIG5ld2xpbmUgc3ltYm9sIHRvIHRoZSBsaW5lIGJ1ZmZlcgorICAgICAgICAgICAg
ICAgIG1fbGluZV9idWZmZXIgKz0gbV9saW5lX2J1ZmZlcl90bXA7CisgICAgICAgICAgICAgICAg
bV9saW5lX2J1ZmZlci5wdXNoX2JhY2soJ1xuJyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIHNldCBwb2ludGVycworICAgICAgICAgICAgbV9jb250ZW50ID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBsZXhlcl9jaGFyX3QqPihtX2xpbmVfYnVmZmVyLmRhdGEoKSk7CisgICAgICAg
ICAgICBhc3NlcnQobV9jb250ZW50ICE9IG51bGxwdHIpOworICAgICAgICAgICAgbV9zdGFydCAg
PSBtX2NvbnRlbnQ7CisgICAgICAgICAgICBtX21hcmtlciA9IG1fc3RhcnQgKyBvZmZzZXRfbWFy
a2VyOworICAgICAgICAgICAgbV9jdXJzb3IgPSBtX3N0YXJ0ICsgb2Zmc2V0X2N1cnNvcjsKKyAg
ICAgICAgICAgIG1fbGltaXQgID0gbV9zdGFydCArIG1fbGluZV9idWZmZXIuc2l6ZSgpOworICAg
ICAgICB9CisKKyAgICAgICAgLy8vIHJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgbGFz
dCByZWFkIHRva2VuCisgICAgICAgIHN0cmluZ190IGdldF90b2tlbl9zdHJpbmcoKSBjb25zdAor
ICAgICAgICB7CisgICAgICAgICAgICBhc3NlcnQobV9zdGFydCAhPSBudWxscHRyKTsKKyAgICAg
ICAgICAgIHJldHVybiBzdHJpbmdfdChyZWludGVycHJldF9jYXN0PHR5cGVuYW1lIHN0cmluZ190
Ojpjb25zdF9wb2ludGVyPihtX3N0YXJ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxzaXplX3Q+KG1fY3Vyc29yIC0gbV9zdGFydCkpOworICAgICAgICB9CisKKyAg
ICAgICAgLyohCisgICAgICAgIEBicmllZiByZXR1cm4gc3RyaW5nIHZhbHVlIGZvciBzdHJpbmcg
dG9rZW5zCisKKyAgICAgICAgVGhlIGZ1bmN0aW9uIGl0ZXJhdGVzIHRoZSBjaGFyYWN0ZXJzIGJl
dHdlZW4gdGhlIG9wZW5pbmcgYW5kIGNsb3NpbmcKKyAgICAgICAgcXVvdGVzIG9mIHRoZSBzdHJp
bmcgdmFsdWUuIFRoZSBjb21wbGV0ZSBzdHJpbmcgaXMgdGhlIHJhbmdlCisgICAgICAgIFttX3N0
YXJ0LG1fY3Vyc29yKS4gQ29uc2VxdWVudGx5LCB3ZSBpdGVyYXRlIGZyb20gbV9zdGFydCsxIHRv
CisgICAgICAgIG1fY3Vyc29yLTEuCisKKyAgICAgICAgV2UgZGlmZmVyZW50aWF0ZSB0d28gY2Fz
ZXM6CisKKyAgICAgICAgMS4gRXNjYXBlZCBjaGFyYWN0ZXJzLiBJbiB0aGlzIGNhc2UsIGEgbmV3
IGNoYXJhY3RlciBpcyBjb25zdHJ1Y3RlZAorICAgICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIG5h
dHVyZSBvZiB0aGUgZXNjYXBlLiBTb21lIGVzY2FwZXMgY3JlYXRlIG5ldworICAgICAgICAgICBj
aGFyYWN0ZXJzIChlLmcuLCBgIlxcbiJgIGlzIHJlcGxhY2VkIGJ5IGAiXG4iYCksIHNvbWUgYXJl
IGNvcGllZAorICAgICAgICAgICBhcyBpcyAoZS5nLiwgYCJcXFxcImApLiBGdXJ0aGVybW9yZSwg
VW5pY29kZSBlc2NhcGVzIG9mIHRoZSBzaGFwZQorICAgICAgICAgICBgIlxcdXh4eHgiYCBuZWVk
IHNwZWNpYWwgY2FyZS4gSW4gdGhpcyBjYXNlLCB0b191bmljb2RlIHRha2VzIGNhcmUKKyAgICAg
ICAgICAgb2YgdGhlIGNvbnN0cnVjdGlvbiBvZiB0aGUgdmFsdWVzLgorICAgICAgICAyLiBVbmVz
Y2FwZWQgY2hhcmFjdGVycyBhcmUgY29waWVkIGFzIGlzLgorCisgICAgICAgIEBwcmUgYG1fY3Vy
c29yIC0gbV9zdGFydCA+PSAyYCwgbWVhbmluZyB0aGUgbGVuZ3RoIG9mIHRoZSBsYXN0IHRva2Vu
CisgICAgICAgIGlzIGF0IGxlYXN0IDIgYnl0ZXMgd2hpY2ggaXMgdHJpdmlhbGx5IHRydWUgZm9y
IGFueSBzdHJpbmcgKHdoaWNoCisgICAgICAgIGNvbnNpc3RzIG9mIGF0IGxlYXN0IHR3byBxdW90
ZXMpLgorCisgICAgICAgICAgICAiIGMxIGMyIGMzIC4uLiAiCisgICAgICAgICAgICBeICAgICAg
ICAgICAgICAgIF4KKyAgICAgICAgICAgIG1fc3RhcnQgICAgICAgICAgbV9jdXJzb3IKKworICAg
ICAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLlxuCisK
KyAgICAgICAgTGVtbWE6IFRoZSBsb29wIGJvZHkgd2lsbCBhbHdheXMgdGVybWluYXRlLlxuCisK
KyAgICAgICAgUHJvb2YgKGJ5IGNvbnRyYWRpY3Rpb24pOiBBc3N1bWUgdGhlIGxvb3AgYm9keSBk
b2VzIG5vdCB0ZXJtaW5hdGUuIEFzCisgICAgICAgIHRoZSBsb29wIGJvZHkgZG9lcyBub3QgY29u
dGFpbiBhbm90aGVyIGxvb3AsIG9uZSBvZiB0aGUgY2FsbGVkCisgICAgICAgIGZ1bmN0aW9ucyBt
dXN0IG5ldmVyIHJldHVybi4gVGhlIGNhbGxlZCBmdW5jdGlvbnMgYXJlIGBzdGQ6OnN0cnRvdWxg
CisgICAgICAgIGFuZCB0b191bmljb2RlLiBOZWl0aGVyIGZ1bmN0aW9uIGNhbiBsb29wIGZvcmV2
ZXIsIHNvIHRoZSBsb29wIGJvZHkKKyAgICAgICAgd2lsbCBuZXZlciBsb29wIGZvcmV2ZXIgd2hp
Y2ggY29udHJhZGljdHMgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgbG9vcAorICAgICAgICBib2R5
IGRvZXMgbm90IHRlcm1pbmF0ZSwgcS5lLmQuXG4KKworICAgICAgICBMZW1tYTogVGhlIGxvb3Ag
Y29uZGl0aW9uIGZvciB0aGUgZm9yIGxvb3AgaXMgZXZlbnR1YWxseSBmYWxzZS5cbgorCisgICAg
ICAgIFByb29mIChieSBjb250cmFkaWN0aW9uKTogQXNzdW1lIHRoZSBsb29wIGRvZXMgbm90IHRl
cm1pbmF0ZS4gRHVlIHRvCisgICAgICAgIHRoZSBhYm92ZSBsZW1tYSwgdGhpcyBjYW4gb25seSBi
ZSBkdWUgdG8gYSB0YXV0b2xvZ2ljYWwgbG9vcAorICAgICAgICBjb25kaXRpb247IHRoYXQgaXMs
IHRoZSBsb29wIGNvbmRpdGlvbiBpIDwgbV9jdXJzb3IgLSAxIG11c3QgYWx3YXlzIGJlCisgICAg
ICAgIHRydWUuIExldCB4IGJlIHRoZSBjaGFuZ2Ugb2YgaSBmb3IgYW55IGxvb3AgaXRlcmF0aW9u
LiBUaGVuCisgICAgICAgIG1fc3RhcnQgKyAxICsgeCA8IG1fY3Vyc29yIC0gMSBtdXN0IGhvbGQg
dG8gbG9vcCBpbmRlZmluaXRlbHkuIFRoaXMKKyAgICAgICAgY2FuIGJlIHJlcGhyYXNlZCB0byBt
X2N1cnNvciAtIG1fc3RhcnQgLSAyID4geC4gV2l0aCB0aGUKKyAgICAgICAgcHJlY29uZGl0aW9u
LCB3ZSB4IDw9IDAsIG1lYW5pbmcgdGhhdCB0aGUgbG9vcCBjb25kaXRpb24gaG9sZHMKKyAgICAg
ICAgaW5kZWZpbml0bHkgaWYgaSBpcyBhbHdheXMgZGVjcmVhc2VkLiBIb3dldmVyLCBvYnNlcnZl
IHRoYXQgdGhlIHZhbHVlCisgICAgICAgIG9mIGkgaXMgc3RyaWN0bHkgaW5jcmVhc2luZyB3aXRo
IGVhY2ggaXRlcmF0aW9uLCBhcyBpdCBpcyBpbmNyZW1lbnRlZAorICAgICAgICBieSAxIGluIHRo
ZSBpdGVyYXRpb24gZXhwcmVzc2lvbiBhbmQgbmV2ZXIgZGVjcmVtZW50ZWQgaW5zaWRlIHRoZSBs
b29wCisgICAgICAgIGJvZHkuIEhlbmNlLCB0aGUgbG9vcCBjb25kaXRpb24gd2lsbCBldmVudHVh
bGx5IGJlIGZhbHNlIHdoaWNoCisgICAgICAgIGNvbnRyYWRpY3RzIHRoZSBhc3N1bXB0aW9uIHRo
YXQgdGhlIGxvb3AgY29uZGl0aW9uIGlzIGEgdGF1dG9sb2d5LAorICAgICAgICBxLmUuZC4KKwor
ICAgICAgICBAcmV0dXJuIHN0cmluZyB2YWx1ZSBvZiBjdXJyZW50IHRva2VuIHdpdGhvdXQgb3Bl
bmluZyBhbmQgY2xvc2luZworICAgICAgICBxdW90ZXMKKyAgICAgICAgQHRocm93IHN0ZDo6b3V0
X29mX3JhbmdlIGlmIHRvX3VuaWNvZGUgZmFpbHMKKyAgICAgICAgKi8KKyAgICAgICAgc3RyaW5n
X3QgZ2V0X3N0cmluZygpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydChtX2N1
cnNvciAtIG1fc3RhcnQgPj0gMik7CisKKyAgICAgICAgICAgIHN0cmluZ190IHJlc3VsdDsKKyAg
ICAgICAgICAgIHJlc3VsdC5yZXNlcnZlKHN0YXRpY19jYXN0PHNpemVfdD4obV9jdXJzb3IgLSBt
X3N0YXJ0IC0gMikpOworCisgICAgICAgICAgICAvLyBpdGVyYXRlIHRoZSByZXN1bHQgYmV0d2Vl
biB0aGUgcXVvdGVzCisgICAgICAgICAgICBmb3IgKGNvbnN0IGxleGVyX2NoYXJfdCogaSA9IG1f
c3RhcnQgKyAxOyBpIDwgbV9jdXJzb3IgLSAxOyArK2kpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgLy8gZmluZCBuZXh0IGVzY2FwZSBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICBh
dXRvIGUgPSBzdGQ6OmZpbmQoaSwgbV9jdXJzb3IgLSAxLCAnXFwnKTsKKyAgICAgICAgICAgICAg
ICBpZiAoZSAhPSBpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
c2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ubG9obWFubi9qc29uL2lzc3Vlcy8zNjUjaXNzdWVjb21t
ZW50LTI2Mjg3NDcwNQorICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gayA9IGk7IGsgPCBl
OyBrKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5wdXNoX2JhY2soc3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3RyaW5nX3Q6OnZhbHVlX3R5cGU+
KCprKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaSA9IGUg
LSAxOyAvLyAtMSBiZWNhdXNlIG9mICsraQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBwcm9j
ZXNzaW5nIGVzY2FwZWQgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgICAgIC8vIHJlYWQgbmV4
dCBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAgICAgKytpOworCisgICAgICAgICAgICAgICAg
ICAgIHN3aXRjaCAoKmkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHRoZSBkZWZhdWx0IGVzY2FwZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgJ3QnOgorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCArPSAiXHQiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAnYic6CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0ICs9ICJcYiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
ICdmJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgKz0gIlxmIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J24nOgorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCArPSAiXG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn
cic6CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ICs9ICJcciI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdc
XCc6CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ICs9ICJcXCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcv
JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgKz0gIi8iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnIic6
CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ICs9ICJcIiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVuaWNv
ZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3UnOgorICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCBjb2RlIHh4eHggZnJv
bSB1eHh4eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29kZXBvaW50ID0gc3Rk
OjpzdHJ0b3VsKHN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8dHlwZW5hbWUgc3RyaW5nX3Q6
OmNvbnN0X3BvaW50ZXI+KGkgKyAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA0KS5jX3N0cigpLCBudWxscHRyLCAxNik7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiBjb2RlcG9pbnQgaXMgYSBoaWdo
IHN1cnJvZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlcG9pbnQgPj0g
MHhEODAwIGFuZCBjb2RlcG9pbnQgPD0gMHhEQkZGKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoZXJl
IGlzIGEgc3Vic2VxdWVudCB1bmljb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgoaSArIDYgPj0gbV9saW1pdCkgb3IgKiAoaSArIDUpICE9ICdcXCcgb3IgKiAoaSArIDYp
ICE9ICd1JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjppbnZhbGlkX2FyZ3VtZW50PigibWlz
c2luZyBsb3cgc3Vycm9nYXRlIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXQgY29kZSB5eXl5IGZyb20g
dXh4eHhcdXl5eXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb2RlcG9p
bnQyID0gc3RkOjpzdHJ0b3VsKHN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8dHlwZW5hbWUg
c3RyaW5nX3Q6OmNvbnN0X3BvaW50ZXI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSArIDcpLCA0KS5jX3N0cigpLCBudWxs
cHRyLCAxNik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB0b191
bmljb2RlKGNvZGVwb2ludCwgY29kZXBvaW50Mik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHNraXAgdGhlIG5leHQgMTAgY2hhcmFjdGVycyAoeHh4eFx1eXl5eSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSAxMDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29kZXBvaW50
ID49IDB4REMwMCBhbmQgY29kZXBvaW50IDw9IDB4REZGRikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGZvdW5kIGEg
bG9uZSBsb3cgc3Vycm9nYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocm93
PHN0ZDo6aW52YWxpZF9hcmd1bWVudD4oIm1pc3NpbmcgaGlnaCBzdXJyb2dhdGUiKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gYWRkIHVuaWNvZGUgY2hhcmFjdGVyKHMpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCArPSB0b191bmljb2RlKGNvZGVwb2ludCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHNraXAgdGhlIG5leHQgZm91ciBjaGFyYWN0ZXJzICh4
eHh4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9CisKKyAgICAgICAgLyohCisgICAgICAgIEBicmllZiBwYXJzZSBmbG9hdGluZyBw
b2ludCBudW1iZXIKKworICAgICAgICBUaGlzIGZ1bmN0aW9uIChhbmQgaXRzIG92ZXJsb2Fkcykg
c2VydmVzIHRvIHNlbGVjdCB0aGUgbW9zdCBhcHByb3ByYXRlCisgICAgICAgIHN0YW5kYXJkIGZs
b2F0aW5nIHBvaW50IG51bWJlciBwYXJzaW5nIGZ1bmN0aW9uIGJhc2VkIG9uIHRoZSB0eXBlCisg
ICAgICAgIHN1cHBsaWVkIHZpYSB0aGUgZmlyc3QgcGFyYW1ldGVyLiAgU2V0IHRoaXMgdG8gQGEK
KyAgICAgICAgc3RhdGljX2Nhc3Q8bnVtYmVyX2Zsb2F0X3QqPihudWxscHRyKS4KKworICAgICAg
ICBAcGFyYW1baW5dIHR5cGUgIHRoZSBAcmVmIG51bWJlcl9mbG9hdF90IGluIHVzZQorCisgICAg
ICAgIEBwYXJhbVtpbixvdXRdIGVuZHB0ciByZWNpZXZlcyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0
IGNoYXJhY3RlciBhZnRlcgorICAgICAgICB0aGUgbnVtYmVyCisKKyAgICAgICAgQHJldHVybiB0
aGUgZmxvYXRpbmcgcG9pbnQgbnVtYmVyCisgICAgICAgICovCisgICAgICAgIGxvbmcgZG91Ymxl
IHN0cl90b19mbG9hdF90KGxvbmcgZG91YmxlKiAvKiB0eXBlICovLCBjaGFyKiogZW5kcHRyKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpzdHJ0b2xkKHJlaW50ZXJw
cmV0X2Nhc3Q8dHlwZW5hbWUgc3RyaW5nX3Q6OmNvbnN0X3BvaW50ZXI+KG1fc3RhcnQpLCBlbmRw
dHIpOworICAgICAgICB9CisKKyAgICAgICAgLyohCisgICAgICAgIEBicmllZiBwYXJzZSBmbG9h
dGluZyBwb2ludCBudW1iZXIKKworICAgICAgICBUaGlzIGZ1bmN0aW9uIChhbmQgaXRzIG92ZXJs
b2Fkcykgc2VydmVzIHRvIHNlbGVjdCB0aGUgbW9zdCBhcHByb3ByYXRlCisgICAgICAgIHN0YW5k
YXJkIGZsb2F0aW5nIHBvaW50IG51bWJlciBwYXJzaW5nIGZ1bmN0aW9uIGJhc2VkIG9uIHRoZSB0
eXBlCisgICAgICAgIHN1cHBsaWVkIHZpYSB0aGUgZmlyc3QgcGFyYW1ldGVyLiAgU2V0IHRoaXMg
dG8gQGEKKyAgICAgICAgc3RhdGljX2Nhc3Q8bnVtYmVyX2Zsb2F0X3QqPihudWxscHRyKS4KKwor
ICAgICAgICBAcGFyYW1baW5dIHR5cGUgIHRoZSBAcmVmIG51bWJlcl9mbG9hdF90IGluIHVzZQor
CisgICAgICAgIEBwYXJhbVtpbixvdXRdIGVuZHB0ciAgcmVjaWV2ZXMgYSBwb2ludGVyIHRvIHRo
ZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIKKyAgICAgICAgdGhlIG51bWJlcgorCisgICAgICAgIEBy
ZXR1cm4gdGhlIGZsb2F0aW5nIHBvaW50IG51bWJlcgorICAgICAgICAqLworICAgICAgICBkb3Vi
bGUgc3RyX3RvX2Zsb2F0X3QoZG91YmxlKiAvKiB0eXBlICovLCBjaGFyKiogZW5kcHRyKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpzdHJ0b2QocmVpbnRlcnByZXRf
Y2FzdDx0eXBlbmFtZSBzdHJpbmdfdDo6Y29uc3RfcG9pbnRlcj4obV9zdGFydCksIGVuZHB0cik7
CisgICAgICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmIHBhcnNlIGZsb2F0aW5n
IHBvaW50IG51bWJlcgorCisgICAgICAgIFRoaXMgZnVuY3Rpb24gKGFuZCBpdHMgb3ZlcmxvYWRz
KSBzZXJ2ZXMgdG8gc2VsZWN0IHRoZSBtb3N0IGFwcHJvcHJhdGUKKyAgICAgICAgc3RhbmRhcmQg
ZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHBhcnNpbmcgZnVuY3Rpb24gYmFzZWQgb24gdGhlIHR5cGUK
KyAgICAgICAgc3VwcGxpZWQgdmlhIHRoZSBmaXJzdCBwYXJhbWV0ZXIuICBTZXQgdGhpcyB0byBA
YQorICAgICAgICBzdGF0aWNfY2FzdDxudW1iZXJfZmxvYXRfdCo+KG51bGxwdHIpLgorCisgICAg
ICAgIEBwYXJhbVtpbl0gdHlwZSAgdGhlIEByZWYgbnVtYmVyX2Zsb2F0X3QgaW4gdXNlCisKKyAg
ICAgICAgQHBhcmFtW2luLG91dF0gZW5kcHRyICByZWNpZXZlcyBhIHBvaW50ZXIgdG8gdGhlIGZp
cnN0IGNoYXJhY3RlciBhZnRlcgorICAgICAgICB0aGUgbnVtYmVyCisKKyAgICAgICAgQHJldHVy
biB0aGUgZmxvYXRpbmcgcG9pbnQgbnVtYmVyCisgICAgICAgICovCisgICAgICAgIGZsb2F0IHN0
cl90b19mbG9hdF90KGZsb2F0KiAvKiB0eXBlICovLCBjaGFyKiogZW5kcHRyKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpzdHJ0b2YocmVpbnRlcnByZXRfY2FzdDx0
eXBlbmFtZSBzdHJpbmdfdDo6Y29uc3RfcG9pbnRlcj4obV9zdGFydCksIGVuZHB0cik7CisgICAg
ICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmIHJldHVybiBudW1iZXIgdmFsdWUg
Zm9yIG51bWJlciB0b2tlbnMKKworICAgICAgICBUaGlzIGZ1bmN0aW9uIHRyYW5zbGF0ZXMgdGhl
IGxhc3QgdG9rZW4gaW50byB0aGUgbW9zdCBhcHByb3ByaWF0ZQorICAgICAgICBudW1iZXIgdHlw
ZSAoZWl0aGVyIGludGVnZXIsIHVuc2lnbmVkIGludGVnZXIgb3IgZmxvYXRpbmcgcG9pbnQpLAor
ICAgICAgICB3aGljaCBpcyBwYXNzZWQgYmFjayB0byB0aGUgY2FsbGVyIHZpYSB0aGUgcmVzdWx0
IHBhcmFtZXRlci4KKworICAgICAgICBUaGlzIGZ1bmN0aW9uIHBhcnNlcyB0aGUgaW50ZWdlciBj
b21wb25lbnQgdXAgdG8gdGhlIHJhZGl4IHBvaW50IG9yCisgICAgICAgIGV4cG9uZW50IHdoaWxl
IGNvbGxlY3RpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlICdmbG9hdGluZyBwb2ludAorICAgICAg
ICByZXByZXNlbnRhdGlvbicsIHdoaWNoIGl0IHN0b3JlcyBpbiB0aGUgcmVzdWx0IHBhcmFtZXRl
ci4gSWYgdGhlcmUgaXMKKyAgICAgICAgbm8gcmFkaXggcG9pbnQgb3IgZXhwb25lbnQsIGFuZCB0
aGUgbnVtYmVyIGNhbiBmaXQgaW50byBhIEByZWYKKyAgICAgICAgbnVtYmVyX2ludGVnZXJfdCBv
ciBAcmVmIG51bWJlcl91bnNpZ25lZF90IHRoZW4gaXQgc2V0cyB0aGUgcmVzdWx0CisgICAgICAg
IHBhcmFtZXRlciBhY2NvcmRpbmdseS4KKworICAgICAgICBJZiB0aGUgbnVtYmVyIGlzIGEgZmxv
YXRpbmcgcG9pbnQgbnVtYmVyIHRoZSBudW1iZXIgaXMgdGhlbiBwYXJzZWQKKyAgICAgICAgdXNp
bmcgQGEgc3RkOnN0cnRvZCAob3IgQGEgc3RkOnN0cnRvZiBvciBAYSBzdGQ6OnN0cnRvbGQpLgor
CisgICAgICAgIEBwYXJhbVtvdXRdIHJlc3VsdCAgQHJlZiBiYXNpY19qc29uIG9iamVjdCB0byBy
ZWNlaXZlIHRoZSBudW1iZXIsIG9yCisgICAgICAgIE5BTiBpZiB0aGUgY29udmVyc2lvbiByZWFk
IHBhc3QgdGhlIGN1cnJlbnQgdG9rZW4uIFRoZSBsYXR0ZXIgY2FzZQorICAgICAgICBuZWVkcyB0
byBiZSB0cmVhdGVkIGJ5IHRoZSBjYWxsZXIgZnVuY3Rpb24uCisgICAgICAgICovCisgICAgICAg
IHZvaWQgZ2V0X251bWJlcihiYXNpY19qc29uJiByZXN1bHQpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIGFzc2VydChtX3N0YXJ0ICE9IG51bGxwdHIpOworCisgICAgICAgICAgICBjb25z
dCBsZXhlcjo6bGV4ZXJfY2hhcl90KiBjdXJwdHIgPSBtX3N0YXJ0OworCisgICAgICAgICAgICAv
LyBhY2N1bXVsYXRlIHRoZSBpbnRlZ2VyIGNvbnZlcnNpb24gcmVzdWx0ICh1bnNpZ25lZCBmb3Ig
bm93KQorICAgICAgICAgICAgbnVtYmVyX3Vuc2lnbmVkX3QgdmFsdWUgPSAwOworCisgICAgICAg
ICAgICAvLyBtYXhpbXVtIGFic29sdXRlIHZhbHVlIG9mIHRoZSByZWxldmFudCBpbnRlZ2VyIHR5
cGUKKyAgICAgICAgICAgIG51bWJlcl91bnNpZ25lZF90IG1heDsKKworICAgICAgICAgICAgLy8g
dGVtcG9yYXJpbHkgc3RvcmUgdGhlIHR5cGUgdG8gYXZvaWQgdW5lY2Vzc2FyeSBiaXRmaWVsZCBh
Y2Nlc3MKKyAgICAgICAgICAgIHZhbHVlX3QgdHlwZTsKKworICAgICAgICAgICAgLy8gbG9vayBm
b3Igc2lnbgorICAgICAgICAgICAgaWYgKCpjdXJwdHIgPT0gJy0nKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHR5cGUgPSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcjsKKyAgICAgICAg
ICAgICAgICBtYXggPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oKHN0ZDo6bnVtZXJpY19saW1pdHM8
bnVtYmVyX2ludGVnZXJfdD46Om1heCkoKSkgKyAxOworICAgICAgICAgICAgICAgIGN1cnB0cisr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHR5cGUgPSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQ7CisgICAgICAgICAgICAg
ICAgbWF4ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KChzdGQ6Om51bWVyaWNfbGltaXRzPG51bWJl
cl91bnNpZ25lZF90Pjo6bWF4KSgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
Y291bnQgdGhlIHNpZ25pZmljYW50IGZpZ3VyZXMKKyAgICAgICAgICAgIGZvciAoOyBjdXJwdHIg
PCBtX2N1cnNvcjsgY3VycHRyKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8g
cXVpY2tseSBza2lwIHRlc3RzIGlmIGEgZGlnaXQKKyAgICAgICAgICAgICAgICBpZiAoKmN1cnB0
ciA8ICcwJyB8fCAqY3VycHRyID4gJzknKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCpjdXJwdHIgPT0gJy4nKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBjb3VudCAnLicgYnV0IGNoYW5nZSB0byBmbG9h
dAorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHZhbHVlX3Q6Om51bWJlcl9mbG9hdDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIC8vIGFzc3VtZSBleHBvbmVudCAoaWYgbm90IHRoZW4gd2ls
bCBmYWlsIHBhcnNlKTogY2hhbmdlIHRvCisgICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0LCBz
dG9wIGNvdW50aW5nIGFuZCByZWNvcmQgZXhwb25lbnQgZGV0YWlscworICAgICAgICAgICAgICAg
ICAgICB0eXBlID0gdmFsdWVfdDo6bnVtYmVyX2Zsb2F0OworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBza2lwIGlmIGRl
ZmluaXRlbHkgbm90IGFuIGludGVnZXIKKyAgICAgICAgICAgICAgICBpZiAodHlwZSAhPSB2YWx1
ZV90OjpudW1iZXJfZmxvYXQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAvLyBtdWx0aXBseSBsYXN0IHZhbHVlIGJ5IHRlbiBhbmQgYWRkIHRoZSBuZXcgZGlnaXQKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byB0ZW1wID0gdmFsdWUgKiAxMCArICpjdXJwdHIgLSAnMCc7
CisKKyAgICAgICAgICAgICAgICAgICAgLy8gdGVzdCBmb3Igb3ZlcmZsb3cKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHRlbXAgPCB2YWx1ZSB8fCB0ZW1wID4gbWF4KQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdmVyZmxvdworICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZSA9IHZhbHVlX3Q6Om51bWJlcl9mbG9hdDsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIG92ZXJmbG93IC0gc2F2ZSBpdAorICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0ZW1wOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBzYXZlIHRo
ZSB2YWx1ZSAoaWYgbm90IGEgZmxvYXQpCisgICAgICAgICAgICBpZiAodHlwZSA9PSB2YWx1ZV90
OjpudW1iZXJfdW5zaWduZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVzdWx0
Lm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkID0gdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIGlmICh0eXBlID09IHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJlc3VsdC5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyID0gLXN0
YXRpY19jYXN0PG51bWJlcl9pbnRlZ2VyX3Q+KHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBwYXJzZSB3aXRo
IHN0cnRvZAorICAgICAgICAgICAgICAgIHJlc3VsdC5tX3ZhbHVlLm51bWJlcl9mbG9hdCA9IHN0
cl90b19mbG9hdF90KHN0YXRpY19jYXN0PG51bWJlcl9mbG9hdF90Kj4obnVsbHB0ciksIE5VTEwp
OworCisgICAgICAgICAgICAgICAgLy8gcmVwbGFjZSBpbmZpbml0eSBhbmQgTkFOIGJ5IG51bGwK
KyAgICAgICAgICAgICAgICBpZiAobm90IHN0ZDo6aXNmaW5pdGUocmVzdWx0Lm1fdmFsdWUubnVt
YmVyX2Zsb2F0KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHR5cGUg
PSB2YWx1ZV90OjpudWxsOworICAgICAgICAgICAgICAgICAgICByZXN1bHQubV92YWx1ZSA9IGJh
c2ljX2pzb246Ompzb25fdmFsdWUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIHNhdmUgdGhlIHR5cGUKKyAgICAgICAgICAgIHJlc3VsdC5tX3R5
cGUgPSB0eXBlOworICAgICAgICB9CisKKyAgICAgIHByaXZhdGU6CisgICAgICAgIC8vLyBvcHRp
b25hbCBpbnB1dCBzdHJlYW0KKyAgICAgICAgc3RkOjppc3RyZWFtKiBtX3N0cmVhbSA9IG51bGxw
dHI7CisgICAgICAgIC8vLyBsaW5lIGJ1ZmZlciBidWZmZXIgZm9yIG1fc3RyZWFtCisgICAgICAg
IHN0cmluZ190IG1fbGluZV9idWZmZXIge307CisgICAgICAgIC8vLyB1c2VkIGZvciBmaWxsaW5n
IG1fbGluZV9idWZmZXIKKyAgICAgICAgc3RyaW5nX3QgbV9saW5lX2J1ZmZlcl90bXAge307Cisg
ICAgICAgIC8vLyB0aGUgYnVmZmVyIHBvaW50ZXIKKyAgICAgICAgY29uc3QgbGV4ZXJfY2hhcl90
KiBtX2NvbnRlbnQgPSBudWxscHRyOworICAgICAgICAvLy8gcG9pbnRlciB0byB0aGUgYmVnaW5u
aW5nIG9mIHRoZSBjdXJyZW50IHN5bWJvbAorICAgICAgICBjb25zdCBsZXhlcl9jaGFyX3QqIG1f
c3RhcnQgPSBudWxscHRyOworICAgICAgICAvLy8gcG9pbnRlciBmb3IgYmFja3RyYWNraW5nIGlu
Zm9ybWF0aW9uCisgICAgICAgIGNvbnN0IGxleGVyX2NoYXJfdCogbV9tYXJrZXIgPSBudWxscHRy
OworICAgICAgICAvLy8gcG9pbnRlciB0byB0aGUgY3VycmVudCBzeW1ib2wKKyAgICAgICAgY29u
c3QgbGV4ZXJfY2hhcl90KiBtX2N1cnNvciA9IG51bGxwdHI7CisgICAgICAgIC8vLyBwb2ludGVy
IHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlcgorICAgICAgICBjb25zdCBsZXhlcl9jaGFyX3QqIG1f
bGltaXQgPSBudWxscHRyOworICAgICAgICAvLy8gdGhlIGxhc3QgdG9rZW4gdHlwZQorICAgICAg
ICB0b2tlbl90eXBlIGxhc3RfdG9rZW5fdHlwZSA9IHRva2VuX3R5cGU6OmVuZF9vZl9pbnB1dDsK
KyAgICB9OworCisgICAgLyohCisgICAgQGJyaWVmIHN5bnRheCBhbmFseXNpcworCisgICAgVGhp
cyBjbGFzcyBpbXBsZW1lbnRzIGEgcmVjdXJzaXZlIGRlY2VudCBwYXJzZXIuCisgICAgKi8KKyAg
ICBjbGFzcyBwYXJzZXIKKyAgICB7CisgICAgICBwdWJsaWM6CisgICAgICAgIC8vLyBhIHBhcnNl
ciByZWFkaW5nIGZyb20gYSBzdHJpbmcgbGl0ZXJhbAorICAgICAgICBwYXJzZXIoY29uc3QgY2hh
ciogYnVmZiwgY29uc3QgcGFyc2VyX2NhbGxiYWNrX3QgY2IgPSBudWxscHRyKQorICAgICAgICAg
ICAgOiBjYWxsYmFjayhjYiksCisgICAgICAgICAgICAgIG1fbGV4ZXIocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB0eXBlbmFtZSBsZXhlcjo6bGV4ZXJfY2hhcl90Kj4oYnVmZiksIHN0ZDo6c3RybGVu
KGJ1ZmYpKQorICAgICAgICB7fQorCisgICAgICAgIC8vLyBhIHBhcnNlciByZWFkaW5nIGZyb20g
YW4gaW5wdXQgc3RyZWFtCisgICAgICAgIHBhcnNlcihzdGQ6OmlzdHJlYW0mIGlzLCBjb25zdCBw
YXJzZXJfY2FsbGJhY2tfdCBjYiA9IG51bGxwdHIpCisgICAgICAgICAgICA6IGNhbGxiYWNrKGNi
KSwgbV9sZXhlcihpcykKKyAgICAgICAge30KKworICAgICAgICAvLy8gYSBwYXJzZXIgcmVhZGlu
ZyBmcm9tIGFuIGl0ZXJhdG9yIHJhbmdlIHdpdGggY29udGlndW91cyBzdG9yYWdlCisgICAgICAg
IHRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8Cisg
ICAgICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8dHlwZW5hbWUgc3RkOjppdGVyYXRvcl90
cmFpdHM8SXRlcmF0b3JUeXBlPjo6aXRlcmF0b3JfY2F0ZWdvcnksIHN0ZDo6cmFuZG9tX2FjY2Vz
c19pdGVyYXRvcl90YWc+Ojp2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgLCBpbnQ+Ojp0eXBl
CisgICAgICAgICAgICAgICAgID0gMD4KKyAgICAgICAgcGFyc2VyKEl0ZXJhdG9yVHlwZSBmaXJz
dCwgSXRlcmF0b3JUeXBlIGxhc3QsIGNvbnN0IHBhcnNlcl9jYWxsYmFja190IGNiID0gbnVsbHB0
cikKKyAgICAgICAgICAgIDogY2FsbGJhY2soY2IpLAorICAgICAgICAgICAgICBtX2xleGVyKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdHlwZW5hbWUgbGV4ZXI6OmxleGVyX2NoYXJfdCo+KCYoKmZp
cnN0KSksCisgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGQ6OmRp
c3RhbmNlKGZpcnN0LCBsYXN0KSkpCisgICAgICAgIHt9CisKKyAgICAgICAgLy8vIHB1YmxpYyBw
YXJzZXIgaW50ZXJmYWNlCisgICAgICAgIGJhc2ljX2pzb24gcGFyc2UoKQorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyByZWFkIGZpcnN0IHRva2VuCisgICAgICAgICAgICBnZXRfdG9rZW4oKTsK
KworICAgICAgICAgICAgYmFzaWNfanNvbiByZXN1bHQgPSBwYXJzZV9pbnRlcm5hbCh0cnVlKTsK
KyAgICAgICAgICAgIHJlc3VsdC5hc3NlcnRfaW52YXJpYW50KCk7CisKKyAgICAgICAgICAgIGV4
cGVjdChsZXhlcjo6dG9rZW5fdHlwZTo6ZW5kX29mX2lucHV0KTsKKworICAgICAgICAgICAgLy8g
cmV0dXJuIHBhcnNlciByZXN1bHQgYW5kIHJlcGxhY2UgaXQgd2l0aCBudWxsIGluIGNhc2UgdGhl
CisgICAgICAgICAgICAvLyB0b3AtbGV2ZWwgdmFsdWUgd2FzIGRpc2NhcmRlZCBieSB0aGUgY2Fs
bGJhY2sgZnVuY3Rpb24KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQuaXNfZGlzY2FyZGVkKCkg
PyBiYXNpY19qc29uKCkgOiBzdGQ6Om1vdmUocmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICBw
cml2YXRlOgorICAgICAgICAvLy8gdGhlIGFjdHVhbCBwYXJzZXIKKyAgICAgICAgYmFzaWNfanNv
biBwYXJzZV9pbnRlcm5hbChib29sIGtlZXApCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gYmFzaWNfanNvbih2YWx1ZV90OjpkaXNjYXJkZWQpOworCisgICAgICAgICAgICBz
d2l0Y2ggKGxhc3RfdG9rZW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBs
ZXhlcjo6dG9rZW5fdHlwZTo6YmVnaW5fb2JqZWN0OgorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGtlZXAgYW5kIChub3QgY2FsbGJhY2sKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvciAoKGtlZXAgPSBjYWxsYmFjayhkZXB0aCsrLCBwYXJzZV9l
dmVudF90OjpvYmplY3Rfc3RhcnQsIHJlc3VsdCkpICE9IDApKSkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhwbGljaXRseSBzZXQgcmVzdWx0IHRv
IG9iamVjdCB0byBjb3BlIHdpdGgge30KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5t
X3R5cGUgPSB2YWx1ZV90OjpvYmplY3Q7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQu
bV92YWx1ZSA9IHZhbHVlX3Q6Om9iamVjdDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIC8vIHJlYWQgbmV4dCB0b2tlbgorICAgICAgICAgICAgICAgICAgICBn
ZXRfdG9rZW4oKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBjbG9zaW5nIH0gLT4gd2UgYXJl
IGRvbmUKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RfdG9rZW4gPT0gbGV4ZXI6OnRva2Vu
X3R5cGU6OmVuZF9vYmplY3QpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGdldF90b2tlbigpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtlZXAg
YW5kIGNhbGxiYWNrIGFuZCBub3QgY2FsbGJhY2soLS1kZXB0aCwgcGFyc2VfZXZlbnRfdDo6b2Jq
ZWN0X2VuZCwgcmVzdWx0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBiYXNpY19qc29uKHZhbHVlX3Q6OmRpc2NhcmRlZCk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gbm8gY29tbWEgaXMgZXhwZWN0ZWQgaGVyZQorICAgICAgICAgICAgICAgICAgICB1bmV4cGVj
dChsZXhlcjo6dG9rZW5fdHlwZTo6dmFsdWVfc2VwYXJhdG9yKTsKKworICAgICAgICAgICAgICAg
ICAgICAvLyBvdGhlcndpc2U6IHBhcnNlIGtleS12YWx1ZSBwYWlycworICAgICAgICAgICAgICAg
ICAgICBkbworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyB1Z2x5LCBidXQgY291bGQgYmUgZml4ZWQgd2l0aCBsb29wIHJlb3JnYW5pemF0aW9uCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobGFzdF90b2tlbiA9PSBsZXhlcjo6dG9rZW5fdHlwZTo6
dmFsdWVfc2VwYXJhdG9yKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdldF90b2tlbigpOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdG9yZSBrZXkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGV4cGVjdChsZXhlcjo6dG9rZW5fdHlwZTo6dmFsdWVfc3RyaW5nKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8ga2V5ID0gbV9sZXhlci5nZXRfc3RyaW5nKCk7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wga2VlcF90YWcgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChrZWVwKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX2pzb24g
ayhrZXkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZWVwX3RhZyA9IGNhbGxi
YWNrKGRlcHRoLCBwYXJzZV9ldmVudF90OjprZXksIGspOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZWVwX3Rh
ZyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZSBzZXBhcmF0b3Ig
KDopCisgICAgICAgICAgICAgICAgICAgICAgICBnZXRfdG9rZW4oKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGV4cGVjdChsZXhlcjo6dG9rZW5fdHlwZTo6bmFtZV9zZXBhcmF0b3IpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZSBhbmQgYWRkIHZhbHVlCisgICAgICAgICAg
ICAgICAgICAgICAgICBnZXRfdG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8g
dmFsdWUgPSBwYXJzZV9pbnRlcm5hbChrZWVwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChrZWVwIGFuZCBrZWVwX3RhZyBhbmQgbm90IHZhbHVlLmlzX2Rpc2NhcmRlZCgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtr
ZXldID0gc3RkOjptb3ZlKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3aGlsZSAobGFzdF90b2tlbiA9
PSBsZXhlcjo6dG9rZW5fdHlwZTo6dmFsdWVfc2VwYXJhdG9yKTsKKworICAgICAgICAgICAgICAg
ICAgICAvLyBjbG9zaW5nIH0KKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGxleGVyOjp0b2tl
bl90eXBlOjplbmRfb2JqZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgZ2V0X3Rva2VuKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChrZWVwIGFuZCBjYWxsYmFjayBhbmQgbm90IGNhbGxiYWNr
KC0tZGVwdGgsIHBhcnNlX2V2ZW50X3Q6Om9iamVjdF9lbmQsIHJlc3VsdCkpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGJhc2ljX2pzb24o
dmFsdWVfdDo6ZGlzY2FyZGVkKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgY2FzZSBsZXhlcjo6dG9rZW5fdHlwZTo6YmVnaW5fYXJyYXk6CisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoa2VlcCBhbmQgKG5vdCBjYWxsYmFjaworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yICgoa2VlcCA9IGNhbGxiYWNrKGRlcHRo
KyssIHBhcnNlX2V2ZW50X3Q6OmFycmF5X3N0YXJ0LCByZXN1bHQpKSAhPSAwKSkpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4cGxpY2l0bHkgc2V0
IHJlc3VsdCB0byBvYmplY3QgdG8gY29wZSB3aXRoIFtdCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQubV90eXBlID0gdmFsdWVfdDo6YXJyYXk7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQubV92YWx1ZSA9IHZhbHVlX3Q6OmFycmF5OworICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVhZCBuZXh0IHRva2VuCisgICAgICAgICAgICAg
ICAgICAgIGdldF90b2tlbigpOworCisgICAgICAgICAgICAgICAgICAgIC8vIGNsb3NpbmcgXSAt
PiB3ZSBhcmUgZG9uZQorICAgICAgICAgICAgICAgICAgICBpZiAobGFzdF90b2tlbiA9PSBsZXhl
cjo6dG9rZW5fdHlwZTo6ZW5kX2FycmF5KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBnZXRfdG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChjYWxsYmFjayBhbmQgbm90IGNhbGxiYWNrKC0tZGVwdGgsIHBhcnNlX2V2ZW50X3Q6OmFycmF5
X2VuZCwgcmVzdWx0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBiYXNpY19qc29uKHZhbHVlX3Q6OmRpc2NhcmRlZCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
bm8gY29tbWEgaXMgZXhwZWN0ZWQgaGVyZQorICAgICAgICAgICAgICAgICAgICB1bmV4cGVjdChs
ZXhlcjo6dG9rZW5fdHlwZTo6dmFsdWVfc2VwYXJhdG9yKTsKKworICAgICAgICAgICAgICAgICAg
ICAvLyBvdGhlcndpc2U6IHBhcnNlIHZhbHVlcworICAgICAgICAgICAgICAgICAgICBkbworICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyB1Z2x5LCBidXQg
Y291bGQgYmUgZml4ZWQgd2l0aCBsb29wIHJlb3JnYW5pemF0aW9uCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobGFzdF90b2tlbiA9PSBsZXhlcjo6dG9rZW5fdHlwZTo6dmFsdWVfc2VwYXJh
dG9yKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdldF90b2tlbigpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBwYXJzZSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgYXV0
byB2YWx1ZSA9IHBhcnNlX2ludGVybmFsKGtlZXApOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGtlZXAgYW5kIG5vdCB2YWx1ZS5pc19kaXNjYXJkZWQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaF9iYWNrKHN0
ZDo6bW92ZSh2YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChsYXN0X3Rva2VuID09IGxleGVy
Ojp0b2tlbl90eXBlOjp2YWx1ZV9zZXBhcmF0b3IpOworCisgICAgICAgICAgICAgICAgICAgIC8v
IGNsb3NpbmcgXQorICAgICAgICAgICAgICAgICAgICBleHBlY3QobGV4ZXI6OnRva2VuX3R5cGU6
OmVuZF9hcnJheSk7CisgICAgICAgICAgICAgICAgICAgIGdldF90b2tlbigpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoa2VlcCBhbmQgY2FsbGJhY2sgYW5kIG5vdCBjYWxsYmFjaygtLWRlcHRo
LCBwYXJzZV9ldmVudF90OjphcnJheV9lbmQsIHJlc3VsdCkpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGJhc2ljX2pzb24odmFsdWVfdDo6
ZGlzY2FyZGVkKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY2Fz
ZSBsZXhlcjo6dG9rZW5fdHlwZTo6bGl0ZXJhbF9udWxsOgorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgZ2V0X3Rva2VuKCk7CisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5tX3R5cGUgPSB2YWx1ZV90OjpudWxsOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYXNlIGxleGVyOjp0b2tlbl90eXBl
Ojp2YWx1ZV9zdHJpbmc6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBj
b25zdCBhdXRvIHMgPSBtX2xleGVyLmdldF9zdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAg
Z2V0X3Rva2VuKCk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGJhc2ljX2pzb24ocyk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGNhc2UgbGV4ZXI6OnRva2VuX3R5cGU6OmxpdGVyYWxfdHJ1ZToKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdldF90b2tlbigpOworICAgICAgICAgICAg
ICAgICAgICByZXN1bHQubV90eXBlID0gdmFsdWVfdDo6Ym9vbGVhbjsKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0Lm1fdmFsdWUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYXNlIGxleGVyOjp0b2tlbl90
eXBlOjpsaXRlcmFsX2ZhbHNlOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgZ2V0X3Rva2VuKCk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSB2YWx1
ZV90Ojpib29sZWFuOworICAgICAgICAgICAgICAgICAgICByZXN1bHQubV92YWx1ZSA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBjYXNlIGxleGVyOjp0b2tlbl90eXBlOjp2YWx1ZV9udW1iZXI6CisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtX2xleGVyLmdldF9udW1iZXIocmVzdWx0
KTsKKyAgICAgICAgICAgICAgICAgICAgZ2V0X3Rva2VuKCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbGFzdCB0b2tlbiB3
YXMgdW5leHBlY3RlZAorICAgICAgICAgICAgICAgICAgICB1bmV4cGVjdChsYXN0X3Rva2VuKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChrZWVw
IGFuZCBjYWxsYmFjayBhbmQgbm90IGNhbGxiYWNrKGRlcHRoLCBwYXJzZV9ldmVudF90Ojp2YWx1
ZSwgcmVzdWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBiYXNp
Y19qc29uKHZhbHVlX3Q6OmRpc2NhcmRlZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgLy8vIGdldCBuZXh0IHRva2VuIGZy
b20gbGV4ZXIKKyAgICAgICAgdHlwZW5hbWUgbGV4ZXI6OnRva2VuX3R5cGUgZ2V0X3Rva2VuKCkK
KyAgICAgICAgeworICAgICAgICAgICAgbGFzdF90b2tlbiA9IG1fbGV4ZXIuc2NhbigpOworICAg
ICAgICAgICAgcmV0dXJuIGxhc3RfdG9rZW47CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGV4
cGVjdCh0eXBlbmFtZSBsZXhlcjo6dG9rZW5fdHlwZSB0KSBjb25zdAorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAodCAhPSBsYXN0X3Rva2VuKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nIGVycm9yX21zZyA9ICJwYXJzZSBlcnJvciAtIHVuZXhwZWN0ZWQgIjsK
KyAgICAgICAgICAgICAgICBlcnJvcl9tc2cgKz0gKGxhc3RfdG9rZW4gPT0gbGV4ZXI6OnRva2Vu
X3R5cGU6OnBhcnNlX2Vycm9yID8gKCInIiArICBtX2xleGVyLmdldF90b2tlbl9zdHJpbmcoKSAr
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyIpIDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxleGVyOjp0b2tlbl90eXBlX25hbWUobGFzdF90b2tlbikpOworICAgICAg
ICAgICAgICAgIGVycm9yX21zZyArPSAiOyBleHBlY3RlZCAiICsgbGV4ZXI6OnRva2VuX3R5cGVf
bmFtZSh0KTsKKyAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6OmludmFsaWRfYXJndW1lbnQ+KGVy
cm9yX21zZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHVuZXhw
ZWN0KHR5cGVuYW1lIGxleGVyOjp0b2tlbl90eXBlIHQpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmICh0ID09IGxhc3RfdG9rZW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgc3RkOjpzdHJpbmcgZXJyb3JfbXNnID0gInBhcnNlIGVycm9yIC0gdW5leHBlY3RlZCAiOwor
ICAgICAgICAgICAgICAgIGVycm9yX21zZyArPSAobGFzdF90b2tlbiA9PSBsZXhlcjo6dG9rZW5f
dHlwZTo6cGFyc2VfZXJyb3IgPyAoIiciICsgIG1fbGV4ZXIuZ2V0X3Rva2VuX3N0cmluZygpICsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInIikgOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGV4ZXI6OnRva2VuX3R5cGVfbmFtZShsYXN0X3Rva2VuKSk7CisgICAgICAg
ICAgICAgICAgVGhyb3c8c3RkOjppbnZhbGlkX2FyZ3VtZW50PihlcnJvcl9tc2cpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgIHByaXZhdGU6CisgICAgICAgIC8vLyBjdXJyZW50
IGxldmVsIG9mIHJlY3Vyc2lvbgorICAgICAgICBpbnQgZGVwdGggPSAwOworICAgICAgICAvLy8g
Y2FsbGJhY2sgZnVuY3Rpb24KKyAgICAgICAgY29uc3QgcGFyc2VyX2NhbGxiYWNrX3QgY2FsbGJh
Y2sgPSBudWxscHRyOworICAgICAgICAvLy8gdGhlIHR5cGUgb2YgdGhlIGxhc3QgcmVhZCB0b2tl
bgorICAgICAgICB0eXBlbmFtZSBsZXhlcjo6dG9rZW5fdHlwZSBsYXN0X3Rva2VuID0gbGV4ZXI6
OnRva2VuX3R5cGU6OnVuaW5pdGlhbGl6ZWQ7CisgICAgICAgIC8vLyB0aGUgbGV4ZXIKKyAgICAg
ICAgbGV4ZXIgbV9sZXhlcjsKKyAgICB9OworCisgIHB1YmxpYzoKKyAgICAvKiEKKyAgICBAYnJp
ZWYgSlNPTiBQb2ludGVyCisKKyAgICBBIEpTT04gcG9pbnRlciBkZWZpbmVzIGEgc3RyaW5nIHN5
bnRheCBmb3IgaWRlbnRpZnlpbmcgYSBzcGVjaWZpYyB2YWx1ZQorICAgIHdpdGhpbiBhIEpTT04g
ZG9jdW1lbnQuIEl0IGNhbiBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIGBhdGAgYW5kCisgICAgYG9w
ZXJhdG9yW11gLiBGdXJ0aGVybW9yZSwgSlNPTiBwb2ludGVycyBhcmUgdGhlIGJhc2UgZm9yIEpT
T04gcGF0Y2hlcy4KKworICAgIEBzYSBbUkZDIDY5MDFdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcv
aHRtbC9yZmM2OTAxKQorCisgICAgQHNpbmNlIHZlcnNpb24gMi4wLjAKKyAgICAqLworICAgIGNs
YXNzIGpzb25fcG9pbnRlcgorICAgIHsKKyAgICAgICAgLy8vIGFsbG93IGJhc2ljX2pzb24gdG8g
YWNjZXNzIHByaXZhdGUgbWVtYmVycworICAgICAgICBmcmllbmQgY2xhc3MgYmFzaWNfanNvbjsK
KworICAgICAgcHVibGljOgorICAgICAgICAvKiEKKyAgICAgICAgQGJyaWVmIGNyZWF0ZSBKU09O
IHBvaW50ZXIKKworICAgICAgICBDcmVhdGUgYSBKU09OIHBvaW50ZXIgYWNjb3JkaW5nIHRvIHRo
ZSBzeW50YXggZGVzY3JpYmVkIGluCisgICAgICAgIFtTZWN0aW9uIDMgb2YgUkZDNjkwMV0oaHR0
cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY5MDEjc2VjdGlvbi0zKS4KKworICAgICAgICBA
cGFyYW1baW5dIHMgIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIEpTT04gcG9pbnRlcjsgaWYgb21p
dHRlZCwgdGhlCisgICAgICAgICAgICAgICAgICAgICAgZW1wdHkgc3RyaW5nIGlzIGFzc3VtZWQg
d2hpY2ggcmVmZXJlbmNlcyB0aGUgd2hvbGUgSlNPTgorICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlCisKKyAgICAgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIHJlZmVyZW5jZSB0b2tl
biBpcyBub25lbXB0eSBhbmQgZG9lcyBub3QKKyAgICAgICAgYmVnaW4gd2l0aCBhIHNsYXNoIChg
L2ApOyBleGFtcGxlOiBgIkpTT04gcG9pbnRlciBtdXN0IGJlIGVtcHR5IG9yCisgICAgICAgIGJl
Z2luIHdpdGggLyJgCisgICAgICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBhIHRpbGRl
IChgfmApIGlzIG5vdCBmb2xsb3dlZCBieSBgMGAKKyAgICAgICAgKHJlcHJlc2VudGluZyBgfmAp
IG9yIGAxYCAocmVwcmVzZW50aW5nIGAvYCk7IGV4YW1wbGU6IGAiZXNjYXBlIGVycm9yOgorICAg
ICAgICB+IG11c3QgYmUgZm9sbG93ZWQgd2l0aCAwIG9yIDEiYAorCisgICAgICAgIEBsaXZlZXhh
bXBsZXtUaGUgZXhhbXBsZSBzaG93cyB0aGUgY29uc3RydWN0aW9uIHNldmVyYWwgdmFsaWQgSlNP
TgorICAgICAgICBwb2ludGVycyBhcyB3ZWxsIGFzIHRoZSBleGNlcHRpb25hbCBiZWhhdmlvci4s
anNvbl9wb2ludGVyfQorCisgICAgICAgIEBzaW5jZSB2ZXJzaW9uIDIuMC4wCisgICAgICAgICov
CisgICAgICAgIGV4cGxpY2l0IGpzb25fcG9pbnRlcihjb25zdCBzdGQ6OnN0cmluZyYgcyA9ICIi
KQorICAgICAgICAgICAgOiByZWZlcmVuY2VfdG9rZW5zKHNwbGl0KHMpKQorICAgICAgICB7fQor
CisgICAgICAgIC8qIQorICAgICAgICBAYnJpZWYgcmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0
aW9uIG9mIHRoZSBKU09OIHBvaW50ZXIKKworICAgICAgICBAaW52YXJpYW50IEZvciBlYWNoIEpT
T04gcG9pbnRlciBgcHRyYCwgaXQgaG9sZHM6CisgICAgICAgIEBjb2RlIHsuY3BwfQorICAgICAg
ICBwdHIgPT0ganNvbl9wb2ludGVyKHB0ci50b19zdHJpbmcoKSk7CisgICAgICAgIEBlbmRjb2Rl
CisKKyAgICAgICAgQHJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgSlNPTiBw
b2ludGVyCisKKyAgICAgICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIHNob3dzIHRoZSByZXN1
bHQgb2YgYHRvX3N0cmluZ2AuLAorICAgICAgICBqc29uX3BvaW50ZXJfX3RvX3N0cmluZ30KKwor
ICAgICAgICBAc2luY2UgdmVyc2lvbiAyLjAuMAorICAgICAgICAqLworICAgICAgICBzdGQ6OnN0
cmluZyB0b19zdHJpbmcoKSBjb25zdCBub2V4Y2VwdAorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gc3RkOjphY2N1bXVsYXRlKHJlZmVyZW5jZV90b2tlbnMuYmVnaW4oKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlX3Rva2Vucy5lbmQoKSwgc3RkOjpz
dHJpbmd7fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10oY29uc3Qgc3Rk
OjpzdHJpbmcgJiBhLCBjb25zdCBzdGQ6OnN0cmluZyAmIGIpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGEgKyAiLyIgKyBlc2NhcGUoYik7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vLyBAY29weWRvYyB0b19zdHJpbmcoKQorICAgICAgICBv
cGVyYXRvciBzdGQ6OnN0cmluZygpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biB0b19zdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICBwcml2YXRlOgorICAgICAgICAvLy8g
cmVtb3ZlIGFuZCByZXR1cm4gbGFzdCByZWZlcmVuY2UgcG9pbnRlcgorICAgICAgICBzdGQ6OnN0
cmluZyBwb3BfYmFjaygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpc19yb290KCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJK
U09OIHBvaW50ZXIgaGFzIG5vIHBhcmVudCIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBhdXRvIGxhc3QgPSByZWZlcmVuY2VfdG9rZW5zLmJhY2soKTsKKyAgICAgICAgICAgIHJlZmVy
ZW5jZV90b2tlbnMucG9wX2JhY2soKTsKKyAgICAgICAgICAgIHJldHVybiBsYXN0OworICAgICAg
ICB9CisKKyAgICAgICAgLy8vIHJldHVybiB3aGV0aGVyIHBvaW50ZXIgcG9pbnRzIHRvIHRoZSBy
b290IGRvY3VtZW50CisgICAgICAgIGJvb2wgaXNfcm9vdCgpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiByZWZlcmVuY2VfdG9rZW5zLmVtcHR5KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBqc29uX3BvaW50ZXIgdG9wKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGlzX3Jvb3QoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6
OmRvbWFpbl9lcnJvcj4oIkpTT04gcG9pbnRlciBoYXMgbm8gcGFyZW50Iik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGpzb25fcG9pbnRlciByZXN1bHQgPSAqdGhpczsKKyAgICAgICAg
ICAgIHJlc3VsdC5yZWZlcmVuY2VfdG9rZW5zID0ge3JlZmVyZW5jZV90b2tlbnNbMF19OworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIQorICAgICAg
ICBAYnJpZWYgY3JlYXRlIGFuZCByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIHBvaW50ZWQgdG8g
dmFsdWUKKworICAgICAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gdGhlIG51bWJlciBvZiByZWZl
cmVuY2UgdG9rZW5zLgorICAgICAgICAqLworICAgICAgICByZWZlcmVuY2UgZ2V0X2FuZF9jcmVh
dGUocmVmZXJlbmNlIGopIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHBvaW50ZXIgcmVz
dWx0ID0gJmo7CisKKyAgICAgICAgICAgIC8vIGluIGNhc2Ugbm8gcmVmZXJlbmNlIHRva2VucyBl
eGlzdCwgcmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoZQorICAgICAgICAgICAgLy8gSlNPTiB2YWx1
ZSBqIHdoaWNoIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgYSBwcmltaXRpdmUgdmFsdWUKKyAgICAg
ICAgICAgIGZvciAoY29uc3QgYXV0byYgcmVmZXJlbmNlX3Rva2VuIDogcmVmZXJlbmNlX3Rva2Vu
cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlc3VsdC0+bV90eXBl
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpu
dWxsOgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cmVmZXJlbmNlX3Rva2VuID09ICIwIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGFydCBhIG5ldyBhcnJheSBpZiByZWZlcmVuY2Ug
dG9rZW4gaXMgMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICZyZXN1bHQt
Pm9wZXJhdG9yW10oMCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gc3RhcnQgYSBuZXcgb2JqZWN0IG90aGVyd2lzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICZyZXN1bHQtPm9wZXJhdG9yW10ocmVmZXJlbmNl
X3Rva2VuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSB2YWx1ZV90OjpvYmplY3Q6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGNyZWF0ZSBhbiBlbnRyeSBpbiB0aGUgb2JqZWN0CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSAmcmVzdWx0LT5vcGVyYXRvcltdKHJlZmVyZW5jZV90b2tl
bik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YXJyYXk6CisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhbiBlbnRyeSBp
biB0aGUgYXJyYXkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICZyZXN1bHQtPm9w
ZXJhdG9yW10oc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihzdGQ6OnN0b2kocmVmZXJlbmNlX3Rva2Vu
KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICBUaGUgZm9s
bG93aW5nIGNvZGUgaXMgb25seSByZWFjaGVkIGlmIHRoZXJlIGV4aXN0cyBhCisgICAgICAgICAg
ICAgICAgICAgIHJlZmVyZW5jZSB0b2tlbiBfYW5kXyB0aGUgY3VycmVudCB2YWx1ZSBpcyBwcmlt
aXRpdmUuIEluCisgICAgICAgICAgICAgICAgICAgIHRoaXMgY2FzZSwgd2UgaGF2ZSBhbiBlcnJv
ciBzaXR1YXRpb24sIGJlY2F1c2UgcHJpbWl0aXZlCisgICAgICAgICAgICAgICAgICAgIHZhbHVl
cyBtYXkgb25seSBvY2N1ciBhcyBzaW5nbGUgdmFsdWU7IHRoYXQgaXMsIHdpdGggYW4KKyAgICAg
ICAgICAgICAgICAgICAgZW1wdHkgbGlzdCBvZiByZWZlcmVuY2UgdG9rZW5zLgorICAgICAgICAg
ICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJv
cj4oImludmFsaWQgdmFsdWUgdG8gdW5mbGF0dGVuIik7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiAq
cmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgLyohCisgICAgICAgIEBicmllZiByZXR1cm4g
YSByZWZlcmVuY2UgdG8gdGhlIHBvaW50ZWQgdG8gdmFsdWUKKworICAgICAgICBAbm90ZSBUaGlz
IHZlcnNpb24gZG9lcyBub3QgdGhyb3cgaWYgYSB2YWx1ZSBpcyBub3QgcHJlc2VudCwgYnV0IHRy
aWVzCisgICAgICAgIHRvIGNyZWF0ZSBuZXN0ZWQgdmFsdWVzIGluc3RlYWQuIEZvciBpbnN0YW5j
ZSwgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCisgICAgICAgIHdpdGggcG9pbnRlciBgIi90aGlzL3Ro
YXQiYCBvbiBhIG51bGwgdmFsdWUgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nCisgICAgICAgIGBv
cGVyYXRvcltdKCJ0aGlzIikub3BlcmF0b3JbXSgidGhhdCIpYCBvbiB0aGF0IHZhbHVlLCBlZmZl
Y3RpdmVseQorICAgICAgICBjaGFuZ2luZyB0aGUgbnVsbCB2YWx1ZSB0byBhbiBvYmplY3QuCisK
KyAgICAgICAgQHBhcmFtW2luXSBwdHIgIGEgSlNPTiB2YWx1ZQorCisgICAgICAgIEByZXR1cm4g
cmVmZXJlbmNlIHRvIHRoZSBKU09OIHZhbHVlIHBvaW50ZWQgdG8gYnkgdGhlIEpTT04gcG9pbnRl
cgorCisgICAgICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgbGVuZ3RoIG9mIHRoZSBKU09O
IHBvaW50ZXIuCisKKyAgICAgICAgQHRocm93IHN0ZDo6b3V0X29mX3JhbmdlICAgICAgaWYgdGhl
IEpTT04gcG9pbnRlciBjYW4gbm90IGJlIHJlc29sdmVkCisgICAgICAgIEB0aHJvdyBzdGQ6OmRv
bWFpbl9lcnJvciAgICAgIGlmIGFuIGFycmF5IGluZGV4IGJlZ2lucyB3aXRoICcwJworICAgICAg
ICBAdGhyb3cgc3RkOjppbnZhbGlkX2FyZ3VtZW50ICBpZiBhbiBhcnJheSBpbmRleCB3YXMgbm90
IGEgbnVtYmVyCisgICAgICAgICovCisgICAgICAgIHJlZmVyZW5jZSBnZXRfdW5jaGVja2VkKHBv
aW50ZXIgcHRyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8m
IHJlZmVyZW5jZV90b2tlbiA6IHJlZmVyZW5jZV90b2tlbnMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgLy8gY29udmVydCBudWxsIHZhbHVlcyB0byBhcnJheXMgb3Igb2JqZWN0cyBi
ZWZvcmUgY29udGludWluZworICAgICAgICAgICAgICAgIGlmIChwdHItPm1fdHlwZSA9PSB2YWx1
ZV90OjpudWxsKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gY2hl
Y2sgaWYgcmVmZXJlbmNlIHRva2VuIGlzIGEgbnVtYmVyCisgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGJvb2wgbnVtcyA9IHN0ZDo6YWxsX29mKHJlZmVyZW5jZV90b2tlbi5iZWdpbigpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2Vf
dG9rZW4uZW5kKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFtdKGNvbnN0IGNoYXIgeCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6aXNkaWdpdCh4KTsKKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlIHZhbHVlIHRvIGFycmF5IGZv
ciBudW1iZXJzIG9yICItIiBvciB0byBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgLy8gb3Ro
ZXJ3aXNlCisgICAgICAgICAgICAgICAgICAgIGlmIChudW1zIG9yIHJlZmVyZW5jZV90b2tlbiA9
PSAiLSIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpw
dHIgPSB2YWx1ZV90OjphcnJheTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICpwdHIgPSB2YWx1ZV90OjpvYmplY3Q7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHB0ci0+bV90eXBlKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSB1
bmNoZWNrZWQgb2JqZWN0IGFjY2VzcworICAgICAgICAgICAgICAgICAgICAgICAgcHRyID0gJnB0
ci0+b3BlcmF0b3JbXShyZWZlcmVuY2VfdG9rZW4pOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjYXNl
IHZhbHVlX3Q6OmFycmF5OgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBlcnJvciBjb25kaXRpb24gKGNmLiBSRkMgNjkwMSwgU2VjdC4gNCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChyZWZlcmVuY2VfdG9rZW4uc2l6ZSgpID4gMSBhbmQgcmVm
ZXJlbmNlX3Rva2VuWzBdID09ICcwJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oImFycmF5IGlu
ZGV4IG11c3Qgbm90IGJlZ2luIHdpdGggJzAnIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZlcmVuY2VfdG9rZW4gPT0gIi0iKQor
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGV4cGxpY2l0eWx5IHRyZWF0ICItIiBhcyBpbmRleCBiZXlvbmQgdGhlIGVuZAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB0ciA9ICZwdHItPm9wZXJhdG9yW10ocHRyLT5tX3ZhbHVlLmFy
cmF5LT5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGNvbnZlcnQgYXJyYXkgaW5kZXggdG8gbnVtYmVyOyB1bmNoZWNrZWQg
YWNjZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyID0gJnB0ci0+b3BlcmF0b3Jb
XShzdGF0aWNfY2FzdDxzaXplX3R5cGU+KHN0ZDo6c3RvaShyZWZlcmVuY2VfdG9rZW4pKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6
b3V0X29mX3JhbmdlPigidW5yZXNvbHZlZCByZWZlcmVuY2UgdG9rZW4gJyIgKyByZWZlcmVuY2Vf
dG9rZW4gKyAiJyIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gKnB0cjsKKyAgICAgICAgfQorCisg
ICAgICAgIHJlZmVyZW5jZSBnZXRfY2hlY2tlZChwb2ludGVyIHB0cikgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiByZWZlcmVuY2VfdG9rZW4gOiByZWZlcmVu
Y2VfdG9rZW5zKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAocHRyLT5t
X3R5cGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNlIHZhbHVl
X3Q6Om9iamVjdDoKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gbm90ZTogYXQgcGVyZm9ybXMgcmFuZ2UgY2hlY2sKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHB0ciA9ICZwdHItPmF0KHJlZmVyZW5jZV90b2tlbik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
IGNhc2UgdmFsdWVfdDo6YXJyYXk6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChyZWZlcmVuY2VfdG9rZW4gPT0gIi0iKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICItIiBhbHdheXMgZmFp
bHMgdGhlIHJhbmdlIGNoZWNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyb3c8c3Rk
OjpvdXRfb2ZfcmFuZ2U+KCJhcnJheSBpbmRleCAnLScgKCIgKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dG9fc3RyaW5nKHB0ci0+bV92
YWx1ZS5hcnJheS0+c2l6ZSgpKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIikgaXMgb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVycm9yIGNvbmRpdGlvbiAo
Y2YuIFJGQyA2OTAxLCBTZWN0LiA0KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmVy
ZW5jZV90b2tlbi5zaXplKCkgPiAxIGFuZCByZWZlcmVuY2VfdG9rZW5bMF0gPT0gJzAnKQorICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocm93
PHN0ZDo6ZG9tYWluX2Vycm9yPigiYXJyYXkgaW5kZXggbXVzdCBub3QgYmVnaW4gd2l0aCAnMCci
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gbm90ZTogYXQgcGVyZm9ybXMgcmFuZ2UgY2hlY2sKKyAgICAgICAgICAgICAgICAgICAgICAg
IHB0ciA9ICZwdHItPmF0KHN0YXRpY19jYXN0PHNpemVfdHlwZT4oc3RkOjpzdG9pKHJlZmVyZW5j
ZV90b2tlbikpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgVGhyb3c8c3RkOjpvdXRfb2ZfcmFuZ2U+
KCJ1bnJlc29sdmVkIHJlZmVyZW5jZSB0b2tlbiAnIiArIHJlZmVyZW5jZV90b2tlbiArICInIik7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybiAqcHRyOworICAgICAgICB9CisKKyAgICAgICAgLyohCisg
ICAgICAgIEBicmllZiByZXR1cm4gYSBjb25zdCByZWZlcmVuY2UgdG8gdGhlIHBvaW50ZWQgdG8g
dmFsdWUKKworICAgICAgICBAcGFyYW1baW5dIHB0ciAgYSBKU09OIHZhbHVlCisKKyAgICAgICAg
QHJldHVybiBjb25zdCByZWZlcmVuY2UgdG8gdGhlIEpTT04gdmFsdWUgcG9pbnRlZCB0byBieSB0
aGUgSlNPTgorICAgICAgICAgICAgICAgIHBvaW50ZXIKKyAgICAgICAgKi8KKyAgICAgICAgY29u
c3RfcmVmZXJlbmNlIGdldF91bmNoZWNrZWQoY29uc3RfcG9pbnRlciBwdHIpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgcmVmZXJlbmNlX3Rva2VuIDogcmVm
ZXJlbmNlX3Rva2VucykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHB0
ci0+bV90eXBlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSB2
YWx1ZV90OjpvYmplY3Q6CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHVzZSB1bmNoZWNrZWQgb2JqZWN0IGFjY2VzcworICAgICAgICAgICAgICAgICAg
ICAgICAgcHRyID0gJnB0ci0+b3BlcmF0b3JbXShyZWZlcmVuY2VfdG9rZW4pOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5OgorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVmZXJlbmNlX3Rva2VuID09ICItIikKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAiLSIg
Y2Fubm90IGJlIHVzZWQgZm9yIGNvbnN0IGFjY2VzcworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRocm93PHN0ZDo6b3V0X29mX3JhbmdlPigiYXJyYXkgaW5kZXggJy0nICgiICsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnRvX3N0
cmluZyhwdHItPm1fdmFsdWUuYXJyYXktPnNpemUoKSkgKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpIGlzIG91dCBvZiByYW5nZSIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBlcnJv
ciBjb25kaXRpb24gKGNmLiBSRkMgNjkwMSwgU2VjdC4gNCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChyZWZlcmVuY2VfdG9rZW4uc2l6ZSgpID4gMSBhbmQgcmVmZXJlbmNlX3Rva2VuWzBd
ID09ICcwJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oImFycmF5IGluZGV4IG11c3Qgbm90IGJl
Z2luIHdpdGggJzAnIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHVzZSB1bmNoZWNrZWQgYXJyYXkgYWNjZXNzCisgICAgICAgICAgICAg
ICAgICAgICAgICBwdHIgPSAmcHRyLT5vcGVyYXRvcltdKHN0YXRpY19jYXN0PHNpemVfdHlwZT4o
c3RkOjpzdG9pKHJlZmVyZW5jZV90b2tlbikpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgVGhyb3c8
c3RkOjpvdXRfb2ZfcmFuZ2U+KCJ1bnJlc29sdmVkIHJlZmVyZW5jZSB0b2tlbiAnIiArIHJlZmVy
ZW5jZV90b2tlbiArICInIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiAqcHRyOworICAgICAgICB9
CisKKyAgICAgICAgY29uc3RfcmVmZXJlbmNlIGdldF9jaGVja2VkKGNvbnN0X3BvaW50ZXIgcHRy
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlZmVyZW5j
ZV90b2tlbiA6IHJlZmVyZW5jZV90b2tlbnMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgc3dpdGNoIChwdHItPm1fdHlwZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgdmFsdWVfdDo6b2JqZWN0OgorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBub3RlOiBhdCBwZXJmb3JtcyByYW5nZSBjaGVjaworICAg
ICAgICAgICAgICAgICAgICAgICAgcHRyID0gJnB0ci0+YXQocmVmZXJlbmNlX3Rva2VuKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZV90b2tlbiA9PSAiLSIp
CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gIi0iIGFsd2F5cyBmYWlscyB0aGUgcmFuZ2UgY2hlY2sKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUaHJvdzxzdGQ6Om91dF9vZl9yYW5nZT4oImFycmF5IGluZGV4ICctJyAoIiArCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp0
b19zdHJpbmcocHRyLT5tX3ZhbHVlLmFycmF5LT5zaXplKCkpICsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKSBpcyBvdXQgb2YgcmFuZ2UiKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
ZXJyb3IgY29uZGl0aW9uIChjZi4gUkZDIDY5MDEsIFNlY3QuIDQpCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocmVmZXJlbmNlX3Rva2VuLnNpemUoKSA+IDEgYW5kIHJlZmVyZW5jZV90b2tl
blswXSA9PSAnMCcpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVGhyb3c8c3RkOjpkb21haW5fZXJyb3I+KCJhcnJheSBpbmRleCBtdXN0IG5v
dCBiZWdpbiB3aXRoICcwJyIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBub3RlOiBhdCBwZXJmb3JtcyByYW5nZSBjaGVjaworICAgICAg
ICAgICAgICAgICAgICAgICAgcHRyID0gJnB0ci0+YXQoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihz
dGQ6OnN0b2kocmVmZXJlbmNlX3Rva2VuKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBUaHJvdzxz
dGQ6Om91dF9vZl9yYW5nZT4oInVucmVzb2x2ZWQgcmVmZXJlbmNlIHRva2VuICciICsgcmVmZXJl
bmNlX3Rva2VuICsgIiciKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuICpwdHI7CisgICAgICAgIH0K
KworICAgICAgICAvLy8gc3BsaXQgdGhlIHN0cmluZyBpbnB1dCB0byByZWZlcmVuY2UgdG9rZW5z
CisgICAgICAgIHN0YXRpYyBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc3BsaXQoY29uc3Qgc3Rk
OjpzdHJpbmcmIHJlZmVyZW5jZV9zdHJpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0ZDo6
dmVjdG9yPHN0ZDo6c3RyaW5nPiByZXN1bHQ7CisKKyAgICAgICAgICAgIC8vIHNwZWNpYWwgY2Fz
ZTogZW1wdHkgcmVmZXJlbmNlIHN0cmluZyAtPiBubyByZWZlcmVuY2UgdG9rZW5zCisgICAgICAg
ICAgICBpZiAocmVmZXJlbmNlX3N0cmluZy5lbXB0eSgpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IGNoZWNrIGlmIG5vbmVtcHR5IHJlZmVyZW5jZSBzdHJpbmcgYmVnaW5zIHdpdGggc2xhc2gKKyAg
ICAgICAgICAgIGlmIChyZWZlcmVuY2Vfc3RyaW5nWzBdICE9ICcvJykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6OmRvbWFpbl9lcnJvcj4oIkpTT04gcG9pbnRlciBt
dXN0IGJlIGVtcHR5IG9yIGJlZ2luIHdpdGggJy8nIik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIGV4dHJhY3QgdGhlIHJlZmVyZW5jZSB0b2tlbnM6CisgICAgICAgICAgICAvLyAt
IHNsYXNoOiBwb3NpdGlvbiBvZiB0aGUgbGFzdCByZWFkIHNsYXNoIChvciBlbmQgb2Ygc3RyaW5n
KQorICAgICAgICAgICAgLy8gLSBzdGFydDogcG9zaXRpb24gYWZ0ZXIgdGhlIHByZXZpb3VzIHNs
YXNoCisgICAgICAgICAgICBmb3IgKAorICAgICAgICAgICAgICAgIC8vIHNlYXJjaCBmb3IgdGhl
IGZpcnN0IHNsYXNoIGFmdGVyIHRoZSBmaXJzdCBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICBz
aXplX3Qgc2xhc2ggPSByZWZlcmVuY2Vfc3RyaW5nLmZpbmRfZmlyc3Rfb2YoIi8iLCAxKSwKKyAg
ICAgICAgICAgICAgICAvLyBzZXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlyc3QgcmVmZXJlbmNl
IHRva2VuCisgICAgICAgICAgICAgICAgc3RhcnQgPSAxOworICAgICAgICAgICAgICAgIC8vIHdl
IGNhbiBzdG9wIGlmIHN0YXJ0ID09IHN0cmluZzo6bnBvcysxID0gMAorICAgICAgICAgICAgICAg
IHN0YXJ0ICE9IDA7CisgICAgICAgICAgICAgICAgLy8gc2V0IHRoZSBiZWdpbm5pbmcgb2YgdGhl
IG5leHQgcmVmZXJlbmNlIHRva2VuCisgICAgICAgICAgICAgICAgLy8gKHdpbGwgZXZlbnR1YWxs
eSBiZSAwIGlmIHNsYXNoID09IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgICAgICAgICAgICAgIHN0
YXJ0ID0gc2xhc2ggKyAxLAorICAgICAgICAgICAgICAgIC8vIGZpbmQgbmV4dCBzbGFzaAorICAg
ICAgICAgICAgICAgIHNsYXNoID0gcmVmZXJlbmNlX3N0cmluZy5maW5kX2ZpcnN0X29mKCIvIiwg
c3RhcnQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgdGV4dCBi
ZXR3ZWVuIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlZmVyZW5jZSB0b2tlbgorICAgICAgICAgICAg
ICAgIC8vIChzdGFydCkgYW5kIHRoZSBsYXN0IHNsYXNoIChzbGFzaCkuCisgICAgICAgICAgICAg
ICAgYXV0byByZWZlcmVuY2VfdG9rZW4gPSByZWZlcmVuY2Vfc3RyaW5nLnN1YnN0cihzdGFydCwg
c2xhc2ggLSBzdGFydCk7CisKKyAgICAgICAgICAgICAgICAvLyBjaGVjayByZWZlcmVuY2UgdG9r
ZW5zIGFyZSBwcm9wZXJseSBlc2NhcGVkCisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgcG9z
ID0gcmVmZXJlbmNlX3Rva2VuLmZpbmRfZmlyc3Rfb2YoIn4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHBvcyA9IHJlZmVyZW5jZV90b2tlbi5maW5kX2ZpcnN0X29mKCJ+IiwgcG9zICsgMSkpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhc3NlcnQocmVmZXJlbmNlX3Rva2Vu
W3Bvc10gPT0gJ34nKTsKKworICAgICAgICAgICAgICAgICAgICAvLyB+IG11c3QgYmUgZm9sbG93
ZWQgYnkgMCBvciAxCisgICAgICAgICAgICAgICAgICAgIGlmIChwb3MgPT0gcmVmZXJlbmNlX3Rv
a2VuLnNpemUoKSAtIDEgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVmZXJlbmNl
X3Rva2VuW3BvcyArIDFdICE9ICcwJyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVmZXJlbmNlX3Rva2VuW3BvcyArIDFdICE9ICcxJykpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigiZXNjYXBl
IGVycm9yOiAnficgbXVzdCBiZSBmb2xsb3dlZCB3aXRoICcwJyBvciAnMSciKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGZp
bmFsbHksIHN0b3JlIHRoZSByZWZlcmVuY2UgdG9rZW4KKyAgICAgICAgICAgICAgICB1bmVzY2Fw
ZShyZWZlcmVuY2VfdG9rZW4pOworICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoX2JhY2socmVm
ZXJlbmNlX3Rva2VuKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgfQorCisgICAgICBwcml2YXRlOgorICAgICAgICAvKiEKKyAgICAgICAgQGJy
aWVmIHJlcGxhY2UgYWxsIG9jY3VycmVuY2VzIG9mIGEgc3Vic3RyaW5nIGJ5IGFub3RoZXIgc3Ry
aW5nCisKKyAgICAgICAgQHBhcmFtW2luLG91dF0gcyAgdGhlIHN0cmluZyB0byBtYW5pcHVsYXRl
CisgICAgICAgIEBwYXJhbVtpbl0gICAgIGYgIHRoZSBzdWJzdHJpbmcgdG8gcmVwbGFjZSB3aXRo
IEBhIHQKKyAgICAgICAgQHBhcmFtW2luXSAgICAgdCAgdGhlIHN0cmluZyB0byByZXBsYWNlIEBh
IGYKKworICAgICAgICBAcmV0dXJuIFRoZSBzdHJpbmcgQGEgcyB3aGVyZSBhbGwgb2NjdXJyZW5j
ZXMgb2YgQGEgZiBhcmUgcmVwbGFjZWQKKyAgICAgICAgICAgICAgICB3aXRoIEBhIHQuCisKKyAg
ICAgICAgQHByZSBUaGUgc2VhcmNoIHN0cmluZyBAYSBmIG11c3Qgbm90IGJlIGVtcHR5LgorCisg
ICAgICAgIEBzaW5jZSB2ZXJzaW9uIDIuMC4wCisgICAgICAgICovCisgICAgICAgIHN0YXRpYyB2
b2lkIHJlcGxhY2Vfc3Vic3RyaW5nKHN0ZDo6c3RyaW5nJiBzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGFzc2VydChub3QgZi5lbXB0eSgpKTsKKworICAgICAgICAgICAgZm9yICgK
KyAgICAgICAgICAgICAgICBzaXplX3QgcG9zID0gcy5maW5kKGYpOyAgICAgICAgIC8vIGZpbmQg
Zmlyc3Qgb2NjdXJyZW5jZSBvZiBmCisgICAgICAgICAgICAgICAgcG9zICE9IHN0ZDo6c3RyaW5n
OjpucG9zOyAgICAgICAvLyBtYWtlIHN1cmUgZiB3YXMgZm91bmQKKyAgICAgICAgICAgICAgICBz
LnJlcGxhY2UocG9zLCBmLnNpemUoKSwgdCksICAgIC8vIHJlcGxhY2Ugd2l0aCB0CisgICAgICAg
ICAgICAgICAgcG9zID0gcy5maW5kKGYsIHBvcyArIHQuc2l6ZSgpKSAvLyBmaW5kIG5leHQgb2Nj
dXJyZW5jZSBvZiBmCisgICAgICAgICAgICApOworICAgICAgICB9CisKKyAgICAgICAgLy8vIGVz
Y2FwZSB0aWxkZSBhbmQgc2xhc2gKKyAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIGVzY2FwZShz
dGQ6OnN0cmluZyBzKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBlc2NhcGUgIn4iIiB0byAi
fjAiIGFuZCAiLyIgdG8gIn4xIgorICAgICAgICAgICAgcmVwbGFjZV9zdWJzdHJpbmcocywgIn4i
LCAifjAiKTsKKyAgICAgICAgICAgIHJlcGxhY2Vfc3Vic3RyaW5nKHMsICIvIiwgIn4xIik7Cisg
ICAgICAgICAgICByZXR1cm4gczsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyB1bmVzY2FwZSB0
aWxkZSBhbmQgc2xhc2gKKyAgICAgICAgc3RhdGljIHZvaWQgdW5lc2NhcGUoc3RkOjpzdHJpbmcm
IHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGZpcnN0IHRyYW5zZm9ybSBhbnkgb2NjdXJy
ZW5jZSBvZiB0aGUgc2VxdWVuY2UgJ34xJyB0byAnLycKKyAgICAgICAgICAgIHJlcGxhY2Vfc3Vi
c3RyaW5nKHMsICJ+MSIsICIvIik7CisgICAgICAgICAgICAvLyB0aGVuIHRyYW5zZm9ybSBhbnkg
b2NjdXJyZW5jZSBvZiB0aGUgc2VxdWVuY2UgJ34wJyB0byAnficKKyAgICAgICAgICAgIHJlcGxh
Y2Vfc3Vic3RyaW5nKHMsICJ+MCIsICJ+Iik7CisgICAgICAgIH0KKworICAgICAgICAvKiEKKyAg
ICAgICAgQHBhcmFtW2luXSByZWZlcmVuY2Vfc3RyaW5nICB0aGUgcmVmZXJlbmNlIHN0cmluZyB0
byB0aGUgY3VycmVudCB2YWx1ZQorICAgICAgICBAcGFyYW1baW5dIHZhbHVlICAgICAgICAgICAg
IHRoZSB2YWx1ZSB0byBjb25zaWRlcgorICAgICAgICBAcGFyYW1baW4sb3V0XSByZXN1bHQgICAg
ICAgIHRoZSByZXN1bHQgb2JqZWN0IHRvIGluc2VydCB2YWx1ZXMgdG8KKworICAgICAgICBAbm90
ZSBFbXB0eSBvYmplY3RzIG9yIGFycmF5cyBhcmUgZmxhdHRlbmVkIHRvIGBudWxsYC4KKyAgICAg
ICAgKi8KKyAgICAgICAgc3RhdGljIHZvaWQgZmxhdHRlbihjb25zdCBzdGQ6OnN0cmluZyYgcmVm
ZXJlbmNlX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19q
c29uJiB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNpY19qc29uJiByZXN1
bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAodmFsdWUubV90eXBlKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YXJyYXk6CisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubV92YWx1ZS5hcnJheS0+ZW1w
dHkoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
ZmxhdHRlbiBlbXB0eSBhcnJheSBhcyBudWxsCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHRbcmVmZXJlbmNlX3N0cmluZ10gPSBudWxscHRyOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaXRlcmF0ZSBhcnJheSBhbmQgdXNlIGluZGV4IGFzIHJlZmVyZW5j
ZSBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
dmFsdWUubV92YWx1ZS5hcnJheS0+c2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhdHRlbihyZWZlcmVuY2Vfc3RyaW5n
ICsgIi8iICsgc3RkOjp0b19zdHJpbmcoaSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZS5tX3ZhbHVlLmFycmF5LT5vcGVyYXRvcltdKGkpLCByZXN1bHQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNh
c2UgdmFsdWVfdDo6b2JqZWN0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHZhbHVlLm1fdmFsdWUub2JqZWN0LT5lbXB0eSgpKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBmbGF0dGVuIGVtcHR5IG9iamVjdCBhcyBu
dWxsCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbcmVmZXJlbmNlX3N0cmluZ10gPSBu
dWxscHRyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXRlcmF0
ZSBvYmplY3QgYW5kIHVzZSBrZXlzIGFzIHJlZmVyZW5jZSBzdHJpbmcKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgZWxlbWVudCA6ICp2YWx1ZS5tX3ZhbHVlLm9iamVj
dCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmbGF0dGVuKHJlZmVyZW5jZV9zdHJpbmcgKyAiLyIgKyBlc2NhcGUoZWxlbWVudC5maXJzdCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNlY29uZCwgcmVz
dWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gYWRkIHByaW1pdGl2ZSB2YWx1ZSB3aXRoIGl0cyByZWZlcmVuY2Ugc3RyaW5nCisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdFtyZWZlcmVuY2Vfc3RyaW5nXSA9IHZhbHVlOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICAvKiEKKyAgICAgICAgQHBhcmFtW2luXSB2YWx1ZSAgZmxhdHRlbmVk
IEpTT04KKworICAgICAgICBAcmV0dXJuIHVuZmxhdHRlbmVkIEpTT04KKyAgICAgICAgKi8KKyAg
ICAgICAgc3RhdGljIGJhc2ljX2pzb24gdW5mbGF0dGVuKGNvbnN0IGJhc2ljX2pzb24mIHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobm90IHZhbHVlLmlzX29iamVjdCgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigib25s
eSBvYmplY3RzIGNhbiBiZSB1bmZsYXR0ZW5lZCIpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBiYXNpY19qc29uIHJlc3VsdDsKKworICAgICAgICAgICAgLy8gaXRlcmF0ZSB0aGUgSlNP
TiBvYmplY3QgdmFsdWVzCisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVsZW1lbnQgOiAq
dmFsdWUubV92YWx1ZS5vYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KG5vdCBlbGVtZW50LnNlY29uZC5pc19wcmltaXRpdmUoKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigidmFsdWVzIGluIG9i
amVjdCBtdXN0IGJlIHByaW1pdGl2ZSIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIC8vIGFzc2lnbiB2YWx1ZSB0byByZWZlcmVuY2UgcG9pbnRlZCB0byBieSBKU09OIHBv
aW50ZXI7IE5vdGUKKyAgICAgICAgICAgICAgICAvLyB0aGF0IGlmIHRoZSBKU09OIHBvaW50ZXIg
aXMgIiIgKGkuZS4sIHBvaW50cyB0byB0aGUgd2hvbGUKKyAgICAgICAgICAgICAgICAvLyB2YWx1
ZSksIGZ1bmN0aW9uIGdldF9hbmRfY3JlYXRlIHJldHVybnMgYSByZWZlcmVuY2UgdG8KKyAgICAg
ICAgICAgICAgICAvLyByZXN1bHQgaXRzZWxmLiBBbiBhc3NpZ25tZW50IHdpbGwgdGhlbiBjcmVh
dGUgYSBwcmltaXRpdmUKKyAgICAgICAgICAgICAgICAvLyB2YWx1ZS4KKyAgICAgICAgICAgICAg
ICBqc29uX3BvaW50ZXIoZWxlbWVudC5maXJzdCkuZ2V0X2FuZF9jcmVhdGUocmVzdWx0KSA9IGVs
ZW1lbnQuc2Vjb25kOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICB9CisKKyAgICAgIHByaXZhdGU6CisgICAgICAgIC8vLyB0aGUgcmVmZXJlbmNl
IHRva2VucworICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcmVmZXJlbmNlX3Rva2Vu
cyB7fTsKKyAgICB9OworCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLyBK
U09OIFBvaW50ZXIgc3VwcG9ydCAvLworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisK
KyAgICAvLy8gQG5hbWUgSlNPTiBQb2ludGVyIGZ1bmN0aW9ucworICAgIC8vLyBAeworCisgICAg
LyohCisgICAgQGJyaWVmIGFjY2VzcyBzcGVjaWZpZWQgZWxlbWVudCB2aWEgSlNPTiBQb2ludGVy
CisKKyAgICBVc2VzIGEgSlNPTiBwb2ludGVyIHRvIHJldHJpZXZlIGEgcmVmZXJlbmNlIHRvIHRo
ZSByZXNwZWN0aXZlIEpTT04gdmFsdWUuCisgICAgTm8gYm91bmQgY2hlY2tpbmcgaXMgcGVyZm9y
bWVkLiBTaW1pbGFyIHRvIEByZWYgb3BlcmF0b3JbXShjb25zdCB0eXBlbmFtZQorICAgIG9iamVj
dF90OjprZXlfdHlwZSYpLCBgbnVsbGAgdmFsdWVzIGFyZSBjcmVhdGVkIGluIGFycmF5cyBhbmQg
b2JqZWN0cyBpZgorICAgIG5lY2Vzc2FyeS4KKworICAgIEluIHBhcnRpY3VsYXI6CisgICAgLSBJ
ZiB0aGUgSlNPTiBwb2ludGVyIHBvaW50cyB0byBhbiBvYmplY3Qga2V5IHRoYXQgZG9lcyBub3Qg
ZXhpc3QsIGl0CisgICAgICBpcyBjcmVhdGVkIGFuIGZpbGxlZCB3aXRoIGEgYG51bGxgIHZhbHVl
IGJlZm9yZSBhIHJlZmVyZW5jZSB0byBpdAorICAgICAgaXMgcmV0dXJuZWQuCisgICAgLSBJZiB0
aGUgSlNPTiBwb2ludGVyIHBvaW50cyB0byBhbiBhcnJheSBpbmRleCB0aGF0IGRvZXMgbm90IGV4
aXN0LCBpdAorICAgICAgaXMgY3JlYXRlZCBhbiBmaWxsZWQgd2l0aCBhIGBudWxsYCB2YWx1ZSBi
ZWZvcmUgYSByZWZlcmVuY2UgdG8gaXQKKyAgICAgIGlzIHJldHVybmVkLiBBbGwgaW5kaWNlcyBi
ZXR3ZWVuIHRoZSBjdXJyZW50IG1heGltdW0gYW5kIHRoZSBnaXZlbgorICAgICAgaW5kZXggYXJl
IGFsc28gZmlsbGVkIHdpdGggYG51bGxgLgorICAgIC0gVGhlIHNwZWNpYWwgdmFsdWUgYC1gIGlz
IHRyZWF0ZWQgYXMgYSBzeW5vbnltIGZvciB0aGUgaW5kZXggcGFzdCB0aGUKKyAgICAgIGVuZC4K
KworICAgIEBwYXJhbVtpbl0gcHRyICBhIEpTT04gcG9pbnRlcgorCisgICAgQHJldHVybiByZWZl
cmVuY2UgdG8gdGhlIGVsZW1lbnQgcG9pbnRlZCB0byBieSBAYSBwdHIKKworICAgIEBjb21wbGV4
aXR5IENvbnN0YW50LgorCisgICAgQHRocm93IHN0ZDo6b3V0X29mX3JhbmdlICAgICAgaWYgdGhl
IEpTT04gcG9pbnRlciBjYW4gbm90IGJlIHJlc29sdmVkCisgICAgQHRocm93IHN0ZDo6ZG9tYWlu
X2Vycm9yICAgICAgaWYgYW4gYXJyYXkgaW5kZXggYmVnaW5zIHdpdGggJzAnCisgICAgQHRocm93
IHN0ZDo6aW52YWxpZF9hcmd1bWVudCAgaWYgYW4gYXJyYXkgaW5kZXggd2FzIG5vdCBhIG51bWJl
cgorCisgICAgQGxpdmVleGFtcGxle1RoZSBiZWhhdmlvciBpcyBzaG93biBpbiB0aGUgZXhhbXBs
ZS4sb3BlcmF0b3Jqc29uX3BvaW50ZXJ9CisKKyAgICBAc2luY2UgdmVyc2lvbiAyLjAuMAorICAg
ICovCisgICAgcmVmZXJlbmNlIG9wZXJhdG9yW10oY29uc3QganNvbl9wb2ludGVyJiBwdHIpCisg
ICAgeworICAgICAgICByZXR1cm4gcHRyLmdldF91bmNoZWNrZWQodGhpcyk7CisgICAgfQorCisg
ICAgLyohCisgICAgQGJyaWVmIGFjY2VzcyBzcGVjaWZpZWQgZWxlbWVudCB2aWEgSlNPTiBQb2lu
dGVyCisKKyAgICBVc2VzIGEgSlNPTiBwb2ludGVyIHRvIHJldHJpZXZlIGEgcmVmZXJlbmNlIHRv
IHRoZSByZXNwZWN0aXZlIEpTT04gdmFsdWUuCisgICAgTm8gYm91bmQgY2hlY2tpbmcgaXMgcGVy
Zm9ybWVkLiBUaGUgZnVuY3Rpb24gZG9lcyBub3QgY2hhbmdlIHRoZSBKU09OCisgICAgdmFsdWU7
IG5vIGBudWxsYCB2YWx1ZXMgYXJlIGNyZWF0ZWQuIEluIHBhcnRpY3VsYXIsIHRoZSB0aGUgc3Bl
Y2lhbCB2YWx1ZQorICAgIGAtYCB5aWVsZHMgYW4gZXhjZXB0aW9uLgorCisgICAgQHBhcmFtW2lu
XSBwdHIgIEpTT04gcG9pbnRlciB0byB0aGUgZGVzaXJlZCBlbGVtZW50CisKKyAgICBAcmV0dXJu
IGNvbnN0IHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCBwb2ludGVkIHRvIGJ5IEBhIHB0cgorCisg
ICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCisKKyAgICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2Ug
ICAgICBpZiB0aGUgSlNPTiBwb2ludGVyIGNhbiBub3QgYmUgcmVzb2x2ZWQKKyAgICBAdGhyb3cg
c3RkOjpkb21haW5fZXJyb3IgICAgICBpZiBhbiBhcnJheSBpbmRleCBiZWdpbnMgd2l0aCAnMCcK
KyAgICBAdGhyb3cgc3RkOjppbnZhbGlkX2FyZ3VtZW50ICBpZiBhbiBhcnJheSBpbmRleCB3YXMg
bm90IGEgbnVtYmVyCisKKyAgICBAbGl2ZWV4YW1wbGV7VGhlIGJlaGF2aW9yIGlzIHNob3duIGlu
IHRoZSBleGFtcGxlLixvcGVyYXRvcmpzb25fcG9pbnRlcl9jb25zdH0KKworICAgIEBzaW5jZSB2
ZXJzaW9uIDIuMC4wCisgICAgKi8KKyAgICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShjb25z
dCBqc29uX3BvaW50ZXImIHB0cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBwdHIuZ2V0
X3VuY2hlY2tlZCh0aGlzKTsKKyAgICB9CisKKyAgICAvKiEKKyAgICBAYnJpZWYgYWNjZXNzIHNw
ZWNpZmllZCBlbGVtZW50IHZpYSBKU09OIFBvaW50ZXIKKworICAgIFJldHVybnMgYSByZWZlcmVu
Y2UgdG8gdGhlIGVsZW1lbnQgYXQgd2l0aCBzcGVjaWZpZWQgSlNPTiBwb2ludGVyIEBhIHB0ciwK
KyAgICB3aXRoIGJvdW5kcyBjaGVja2luZy4KKworICAgIEBwYXJhbVtpbl0gcHRyICBKU09OIHBv
aW50ZXIgdG8gdGhlIGRlc2lyZWQgZWxlbWVudAorCisgICAgQHJldHVybiByZWZlcmVuY2UgdG8g
dGhlIGVsZW1lbnQgcG9pbnRlZCB0byBieSBAYSBwdHIKKworICAgIEBjb21wbGV4aXR5IENvbnN0
YW50LgorCisgICAgQHRocm93IHN0ZDo6b3V0X29mX3JhbmdlICAgICAgaWYgdGhlIEpTT04gcG9p
bnRlciBjYW4gbm90IGJlIHJlc29sdmVkCisgICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yICAg
ICAgaWYgYW4gYXJyYXkgaW5kZXggYmVnaW5zIHdpdGggJzAnCisgICAgQHRocm93IHN0ZDo6aW52
YWxpZF9hcmd1bWVudCAgaWYgYW4gYXJyYXkgaW5kZXggd2FzIG5vdCBhIG51bWJlcgorCisgICAg
QGxpdmVleGFtcGxle1RoZSBiZWhhdmlvciBpcyBzaG93biBpbiB0aGUgZXhhbXBsZS4sYXRfanNv
bl9wb2ludGVyfQorCisgICAgQHNpbmNlIHZlcnNpb24gMi4wLjAKKyAgICAqLworICAgIHJlZmVy
ZW5jZSBhdChjb25zdCBqc29uX3BvaW50ZXImIHB0cikKKyAgICB7CisgICAgICAgIHJldHVybiBw
dHIuZ2V0X2NoZWNrZWQodGhpcyk7CisgICAgfQorCisgICAgLyohCisgICAgQGJyaWVmIGFjY2Vz
cyBzcGVjaWZpZWQgZWxlbWVudCB2aWEgSlNPTiBQb2ludGVyCisKKyAgICBSZXR1cm5zIGEgY29u
c3QgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IHdpdGggc3BlY2lmaWVkIEpTT04gcG9pbnRl
ciBAYQorICAgIHB0ciwgd2l0aCBib3VuZHMgY2hlY2tpbmcuCisKKyAgICBAcGFyYW1baW5dIHB0
ciAgSlNPTiBwb2ludGVyIHRvIHRoZSBkZXNpcmVkIGVsZW1lbnQKKworICAgIEByZXR1cm4gcmVm
ZXJlbmNlIHRvIHRoZSBlbGVtZW50IHBvaW50ZWQgdG8gYnkgQGEgcHRyCisKKyAgICBAY29tcGxl
eGl0eSBDb25zdGFudC4KKworICAgIEB0aHJvdyBzdGQ6Om91dF9vZl9yYW5nZSAgICAgIGlmIHRo
ZSBKU09OIHBvaW50ZXIgY2FuIG5vdCBiZSByZXNvbHZlZAorICAgIEB0aHJvdyBzdGQ6OmRvbWFp
bl9lcnJvciAgICAgIGlmIGFuIGFycmF5IGluZGV4IGJlZ2lucyB3aXRoICcwJworICAgIEB0aHJv
dyBzdGQ6OmludmFsaWRfYXJndW1lbnQgIGlmIGFuIGFycmF5IGluZGV4IHdhcyBub3QgYSBudW1i
ZXIKKworICAgIEBsaXZlZXhhbXBsZXtUaGUgYmVoYXZpb3IgaXMgc2hvd24gaW4gdGhlIGV4YW1w
bGUuLGF0X2pzb25fcG9pbnRlcl9jb25zdH0KKworICAgIEBzaW5jZSB2ZXJzaW9uIDIuMC4wCisg
ICAgKi8KKyAgICBjb25zdF9yZWZlcmVuY2UgYXQoY29uc3QganNvbl9wb2ludGVyJiBwdHIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gcHRyLmdldF9jaGVja2VkKHRoaXMpOworICAgIH0K
KworICAgIC8qIQorICAgIEBicmllZiByZXR1cm4gZmxhdHRlbmVkIEpTT04gdmFsdWUKKworICAg
IFRoZSBmdW5jdGlvbiBjcmVhdGVzIGEgSlNPTiBvYmplY3Qgd2hvc2Uga2V5cyBhcmUgSlNPTiBw
b2ludGVycyAoc2VlIFtSRkMKKyAgICA2OTAxXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwv
cmZjNjkwMSkpIGFuZCB3aG9zZSB2YWx1ZXMgYXJlIGFsbAorICAgIHByaW1pdGl2ZS4gVGhlIG9y
aWdpbmFsIEpTT04gdmFsdWUgY2FuIGJlIHJlc3RvcmVkIHVzaW5nIHRoZSBAcmVmCisgICAgdW5m
bGF0dGVuKCkgZnVuY3Rpb24uCisKKyAgICBAcmV0dXJuIGFuIG9iamVjdCB0aGF0IG1hcHMgSlNP
TiBwb2ludGVycyB0byBwcmltaXR2ZSB2YWx1ZXMKKworICAgIEBub3RlIEVtcHR5IG9iamVjdHMg
YW5kIGFycmF5cyBhcmUgZmxhdHRlbmVkIHRvIGBudWxsYCBhbmQgd2lsbCBub3QgYmUKKyAgICAg
ICAgICByZWNvbnN0cnVjdGVkIGNvcnJlY3RseSBieSB0aGUgQHJlZiB1bmZsYXR0ZW4oKSBmdW5j
dGlvbi4KKworICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgc2l6ZSB0aGUgSlNPTiB2YWx1
ZS4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgaG93IGEgSlNP
TiBvYmplY3QgaXMgZmxhdHRlbmVkIHRvIGFuCisgICAgb2JqZWN0IHdob3NlIGtleXMgY29uc2lz
dCBvZiBKU09OIHBvaW50ZXJzLixmbGF0dGVufQorCisgICAgQHNhIEByZWYgdW5mbGF0dGVuKCkg
Zm9yIHRoZSByZXZlcnNlIGZ1bmN0aW9uCisKKyAgICBAc2luY2UgdmVyc2lvbiAyLjAuMAorICAg
ICovCisgICAgYmFzaWNfanNvbiBmbGF0dGVuKCkgY29uc3QKKyAgICB7CisgICAgICAgIGJhc2lj
X2pzb24gcmVzdWx0KHZhbHVlX3Q6Om9iamVjdCk7CisgICAgICAgIGpzb25fcG9pbnRlcjo6Zmxh
dHRlbigiIiwgKnRoaXMsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgLyohCisgICAgQGJyaWVmIHVuZmxhdHRlbiBhIHByZXZpb3VzbHkgZmxhdHRlbmVkIEpT
T04gdmFsdWUKKworICAgIFRoZSBmdW5jdGlvbiByZXN0b3JlcyB0aGUgYXJiaXRyYXJ5IG5lc3Rp
bmcgb2YgYSBKU09OIHZhbHVlIHRoYXQgaGFzIGJlZW4KKyAgICBmbGF0dGVuZWQgYmVmb3JlIHVz
aW5nIHRoZSBAcmVmIGZsYXR0ZW4oKSBmdW5jdGlvbi4gVGhlIEpTT04gdmFsdWUgbXVzdAorICAg
IG1lZXQgY2VydGFpbiBjb25zdHJhaW50czoKKyAgICAxLiBUaGUgdmFsdWUgbXVzdCBiZSBhbiBv
YmplY3QuCisgICAgMi4gVGhlIGtleXMgbXVzdCBiZSBKU09OIHBvaW50ZXJzIChzZWUKKyAgICAg
ICBbUkZDIDY5MDFdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2OTAxKSkKKyAgICAz
LiBUaGUgbWFwcGVkIHZhbHVlcyBtdXN0IGJlIHByaW1pdGl2ZSBKU09OIHR5cGVzLgorCisgICAg
QHJldHVybiB0aGUgb3JpZ2luYWwgSlNPTiBmcm9tIGEgZmxhdHRlbmVkIHZlcnNpb24KKworICAg
IEBub3RlIEVtcHR5IG9iamVjdHMgYW5kIGFycmF5cyBhcmUgZmxhdHRlbmVkIGJ5IEByZWYgZmxh
dHRlbigpIHRvIGBudWxsYAorICAgICAgICAgIHZhbHVlcyBhbmQgY2FuIG5vdCB1bmZsYXR0ZW5l
ZCB0byB0aGVpciBvcmlnaW5hbCB0eXBlLiBBcGFydCBmcm9tCisgICAgICAgICAgdGhpcyBleGFt
cGxlLCBmb3IgYSBKU09OIHZhbHVlIGBqYCwgdGhlIGZvbGxvd2luZyBpcyBhbHdheXMgdHJ1ZToK
KyAgICAgICAgICBgaiA9PSBqLmZsYXR0ZW4oKS51bmZsYXR0ZW4oKWAuCisKKyAgICBAY29tcGxl
eGl0eSBMaW5lYXIgaW4gdGhlIHNpemUgdGhlIEpTT04gdmFsdWUuCisKKyAgICBAbGl2ZWV4YW1w
bGV7VGhlIGZvbGxvd2luZyBjb2RlIHNob3dzIGhvdyBhIGZsYXR0ZW5lZCBKU09OIG9iamVjdCBp
cworICAgIHVuZmxhdHRlbmVkIGludG8gdGhlIG9yaWdpbmFsIG5lc3RlZCBKU09OIG9iamVjdC4s
dW5mbGF0dGVufQorCisgICAgQHNhIEByZWYgZmxhdHRlbigpIGZvciB0aGUgcmV2ZXJzZSBmdW5j
dGlvbgorCisgICAgQHNpbmNlIHZlcnNpb24gMi4wLjAKKyAgICAqLworICAgIGJhc2ljX2pzb24g
dW5mbGF0dGVuKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBqc29uX3BvaW50ZXI6OnVu
ZmxhdHRlbigqdGhpcyk7CisgICAgfQorCisgICAgLy8vIEB9CisKKyAgICAvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLworICAgIC8vIEpTT04gUGF0Y2ggZnVuY3Rpb25zIC8vCisgICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIC8vLyBAbmFtZSBKU09OIFBhdGNoIGZ1bmN0aW9u
cworICAgIC8vLyBAeworCisgICAgLyohCisgICAgQGJyaWVmIGFwcGxpZXMgYSBKU09OIHBhdGNo
CisKKyAgICBbSlNPTiBQYXRjaF0oaHR0cDovL2pzb25wYXRjaC5jb20pIGRlZmluZXMgYSBKU09O
IGRvY3VtZW50IHN0cnVjdHVyZSBmb3IKKyAgICBleHByZXNzaW5nIGEgc2VxdWVuY2Ugb2Ygb3Bl
cmF0aW9ucyB0byBhcHBseSB0byBhIEpTT04pIGRvY3VtZW50LiBXaXRoCisgICAgdGhpcyBmdW5j
aW9uLCBhIEpTT04gUGF0Y2ggaXMgYXBwbGllZCB0byB0aGUgY3VycmVudCBKU09OIHZhbHVlIGJ5
CisgICAgZXhlY3V0aW5nIGFsbCBvcGVyYXRpb25zIGZyb20gdGhlIHBhdGNoLgorCisgICAgQHBh
cmFtW2luXSBqc29uX3BhdGNoICBKU09OIHBhdGNoIGRvY3VtZW50CisgICAgQHJldHVybiBwYXRj
aGVkIGRvY3VtZW50CisKKyAgICBAbm90ZSBUaGUgYXBwbGljYXRpb24gb2YgYSBwYXRjaCBpcyBh
dG9taWM6IEVpdGhlciBhbGwgb3BlcmF0aW9ucyBzdWNjZWVkCisgICAgICAgICAgYW5kIHRoZSBw
YXRjaGVkIGRvY3VtZW50IGlzIHJldHVybmVkIG9yIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uIElu
CisgICAgICAgICAgYW55IGNhc2UsIHRoZSBvcmlnaW5hbCB2YWx1ZSBpcyBub3QgY2hhbmdlZDog
dGhlIHBhdGNoIGlzIGFwcGxpZWQKKyAgICAgICAgICB0byBhIGNvcHkgb2YgdGhlIHZhbHVlLgor
CisgICAgQHRocm93IHN0ZDo6b3V0X29mX3JhbmdlIGlmIGEgSlNPTiBwb2ludGVyIGluc2lkZSB0
aGUgcGF0Y2ggY291bGQgbm90CisgICAgYmUgcmVzb2x2ZWQgc3VjY2Vzc2Z1bGx5IGluIHRoZSBj
dXJyZW50IEpTT04gdmFsdWU7IGV4YW1wbGU6IGAia2V5IGJhegorICAgIG5vdCBmb3VuZCJgCisg
ICAgQHRocm93IGludmFsaWRfYXJndW1lbnQgaWYgdGhlIEpTT04gcGF0Y2ggaXMgbWFsZm9ybWVk
IChlLmcuLCBtYW5kYXRvcnkKKyAgICBhdHRyaWJ1dGVzIGFyZSBtaXNzaW5nKTsgZXhhbXBsZTog
YCJvcGVyYXRpb24gYWRkIG11c3QgaGF2ZSBtZW1iZXIgcGF0aCJgCisKKyAgICBAY29tcGxleGl0
eSBMaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlIEpTT04gdmFsdWUgYW5kIHRoZSBsZW5ndGggb2Yg
dGhlCisgICAgSlNPTiBwYXRjaC4gQXMgdXN1YWxseSBvbmx5IGEgZnJhY3Rpb24gb2YgdGhlIEpT
T04gdmFsdWUgaXMgYWZmZWN0ZWQgYnkKKyAgICB0aGUgcGF0Y2gsIHRoZSBjb21wbGV4aXR5IGNh
biB1c3VhbGx5IGJlIG5lZ2xlY3RlZC4KKworICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5n
IGNvZGUgc2hvd3MgaG93IGEgSlNPTiBwYXRjaCBpcyBhcHBsaWVkIHRvIGEKKyAgICB2YWx1ZS4s
cGF0Y2h9CisKKyAgICBAc2EgQHJlZiBkaWZmIC0tIGNyZWF0ZSBhIEpTT04gcGF0Y2ggYnkgY29t
cGFyaW5nIHR3byBKU09OIHZhbHVlcworCisgICAgQHNhIFtSRkMgNjkwMiAoSlNPTiBQYXRjaCld
KGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2OTAyKQorICAgIEBzYSBbUkZDIDY5MDEg
KEpTT04gUG9pbnRlcildKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2OTAxKQorCisg
ICAgQHNpbmNlIHZlcnNpb24gMi4wLjAKKyAgICAqLworICAgIGJhc2ljX2pzb24gcGF0Y2goY29u
c3QgYmFzaWNfanNvbiYganNvbl9wYXRjaCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIG1ha2Ug
YSB3b3JraW5nIGNvcHkgdG8gYXBwbHkgdGhlIHBhdGNoIHRvCisgICAgICAgIGJhc2ljX2pzb24g
cmVzdWx0ID0gKnRoaXM7CisKKyAgICAgICAgLy8gdGhlIHZhbGlkIEpTT04gUGF0Y2ggb3BlcmF0
aW9ucworICAgICAgICBlbnVtIGNsYXNzIHBhdGNoX29wZXJhdGlvbnMge2FkZCwgcmVtb3ZlLCBy
ZXBsYWNlLCBtb3ZlLCBjb3B5LCB0ZXN0LCBpbnZhbGlkfTsKKworICAgICAgICBjb25zdCBhdXRv
IGdldF9vcCA9IFtdKGNvbnN0IHN0ZDo6c3RyaW5nIG9wKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAob3AgPT0gImFkZCIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHBhdGNoX29wZXJhdGlvbnM6OmFkZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChv
cCA9PSAicmVtb3ZlIikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGF0
Y2hfb3BlcmF0aW9uczo6cmVtb3ZlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG9w
ID09ICJyZXBsYWNlIikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGF0
Y2hfb3BlcmF0aW9uczo6cmVwbGFjZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChv
cCA9PSAibW92ZSIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhdGNo
X29wZXJhdGlvbnM6Om1vdmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob3AgPT0g
ImNvcHkiKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBwYXRjaF9vcGVy
YXRpb25zOjpjb3B5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG9wID09ICJ0ZXN0
IikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGF0Y2hfb3BlcmF0aW9u
czo6dGVzdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHBhdGNoX29wZXJh
dGlvbnM6OmludmFsaWQ7CisgICAgICAgIH07CisKKyAgICAgICAgLy8gd3JhcHBlciBmb3IgImFk
ZCIgb3BlcmF0aW9uOyBhZGQgdmFsdWUgYXQgcHRyCisgICAgICAgIGNvbnN0IGF1dG8gb3BlcmF0
aW9uX2FkZCA9IFsmcmVzdWx0XShqc29uX3BvaW50ZXIgJiBwdHIsIGJhc2ljX2pzb24gdmFsKQor
ICAgICAgICB7CisgICAgICAgICAgICAvLyBhZGRpbmcgdG8gdGhlIHJvb3Qgb2YgdGhlIHRhcmdl
dCBkb2N1bWVudCBtZWFucyByZXBsYWNpbmcgaXQKKyAgICAgICAgICAgIGlmIChwdHIuaXNfcm9v
dCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZhbDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAvLyBtYWtlIHN1cmUgdGhlIHRvcCBlbGVtZW50IG9mIHRoZSBwb2ludGVyIGV4aXN0cworICAg
ICAgICAgICAgICAgIGpzb25fcG9pbnRlciB0b3BfcG9pbnRlciA9IHB0ci50b3AoKTsKKyAgICAg
ICAgICAgICAgICBpZiAodG9wX3BvaW50ZXIgIT0gcHRyKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LmF0KHRvcF9wb2ludGVyKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAvLyBnZXQgcmVmZXJlbmNlIHRvIHBhcmVudCBvZiBKU09O
IHBvaW50ZXIgcHRyCisgICAgICAgICAgICAgICAgY29uc3QgYXV0byBsYXN0X3BhdGggPSBwdHIu
cG9wX2JhY2soKTsKKyAgICAgICAgICAgICAgICBiYXNpY19qc29uJiBwYXJlbnQgPSByZXN1bHRb
cHRyXTsKKworICAgICAgICAgICAgICAgIHN3aXRjaCAocGFyZW50Lm1fdHlwZSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVsbDoKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6CisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSBvcGVyYXRvcltdIHRvIGFkZCB2YWx1
ZQorICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50W2xhc3RfcGF0aF0gPSB2YWw7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YXJyYXk6CisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0X3BhdGggPT0gIi0iKQorICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNp
YWwgY2FzZTogYXBwZW5kIHRvIGJhY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJl
bnQucHVzaF9iYWNrKHZhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgYXV0byBpZHggPSBzdGQ6OnN0b2kobGFzdF9wYXRoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihp
ZHgpID4gcGFyZW50LnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF2b2lkIHVuZGVmaW5lZCBiZWhhdmlvcgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6Om91dF9vZl9yYW5nZT4o
ImFycmF5IGluZGV4ICIgKyBzdGQ6OnRvX3N0cmluZyhpZHgpICsgIiBpcyBvdXQgb2YgcmFuZ2Ui
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCBjYXNlOiBpbnNlcnQgYWRkIG9mZnNldAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQuaW5zZXJ0KHBhcmVudC5iZWdpbigp
ICsgc3RhdGljX2Nhc3Q8ZGlmZmVyZW5jZV90eXBlPihpZHgpLCB2YWwpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaWYgdGhlcmUgZXhpc3RzIGEgcGFyZW50IGl0IGNhbm5vdCBiZSBwcmltaXRp
dmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSk7ICAvLyBMQ09WX0VYQ0xf
TElORQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9OworCisgICAgICAgIC8vIHdyYXBwZXIgZm9yICJyZW1vdmUiIG9wZXJh
dGlvbjsgcmVtb3ZlIHZhbHVlIGF0IHB0cgorICAgICAgICBjb25zdCBhdXRvIG9wZXJhdGlvbl9y
ZW1vdmUgPSBbJnJlc3VsdF0oanNvbl9wb2ludGVyICYgcHRyKQorICAgICAgICB7CisgICAgICAg
ICAgICAvLyBnZXQgcmVmZXJlbmNlIHRvIHBhcmVudCBvZiBKU09OIHBvaW50ZXIgcHRyCisgICAg
ICAgICAgICBjb25zdCBhdXRvIGxhc3RfcGF0aCA9IHB0ci5wb3BfYmFjaygpOworICAgICAgICAg
ICAgYmFzaWNfanNvbiYgcGFyZW50ID0gcmVzdWx0LmF0KHB0cik7CisKKyAgICAgICAgICAgIC8v
IHJlbW92ZSBjaGlsZAorICAgICAgICAgICAgaWYgKHBhcmVudC5pc19vYmplY3QoKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBwZXJmb3JtIHJhbmdlIGNoZWNrCisgICAgICAg
ICAgICAgICAgYXV0byBpdCA9IHBhcmVudC5maW5kKGxhc3RfcGF0aCk7CisgICAgICAgICAgICAg
ICAgaWYgKGl0ICE9IHBhcmVudC5lbmQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHBhcmVudC5lcmFzZShpdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFRocm93
PHN0ZDo6b3V0X29mX3JhbmdlPigia2V5ICciICsgbGFzdF9wYXRoICsgIicgbm90IGZvdW5kIik7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAo
cGFyZW50LmlzX2FycmF5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gbm90
ZSBlcmFzZSBwZXJmb3JtcyByYW5nZSBjaGVjaworICAgICAgICAgICAgICAgIHBhcmVudC5lcmFz
ZShzdGF0aWNfY2FzdDxzaXplX3R5cGU+KHN0ZDo6c3RvaShsYXN0X3BhdGgpKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgLy8gdHlwZSBjaGVjaworICAgICAgICBpZiAo
bm90IGpzb25fcGF0Y2guaXNfYXJyYXkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gYSBK
U09OIHBhdGNoIG11c3QgYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cworICAgICAgICAgICAgVGhyb3c8
c3RkOjppbnZhbGlkX2FyZ3VtZW50PigiSlNPTiBwYXRjaCBtdXN0IGJlIGFuIGFycmF5IG9mIG9i
amVjdHMiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGl0ZXJhdGUgYW5kIGFwcGx5IHRoIGVv
cGVyYXRpb25zCisgICAgICAgIGZvciAoY29uc3QgYXV0byYgdmFsIDoganNvbl9wYXRjaCkKKyAg
ICAgICAgeworICAgICAgICAgICAgLy8gd3JhcHBlciB0byBnZXQgYSB2YWx1ZSBmb3IgYW4gb3Bl
cmF0aW9uCisgICAgICAgICAgICBjb25zdCBhdXRvIGdldF92YWx1ZSA9IFsmdmFsXShjb25zdCBz
dGQ6OnN0cmluZyAmIG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjpzdHJpbmcgJiBtZW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIHN0cmluZ190eXBlKSAtPiBiYXNpY19qc29uJgorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIC8vIGZpbmQgdmFsdWUKKyAgICAgICAgICAgICAgICBh
dXRvIGl0ID0gdmFsLm1fdmFsdWUub2JqZWN0LT5maW5kKG1lbWJlcik7CisKKyAgICAgICAgICAg
ICAgICAvLyBjb250ZXh0LXNlbnNpdGl2ZSBlcnJvciBtZXNzYWdlCisgICAgICAgICAgICAgICAg
Y29uc3QgYXV0byBlcnJvcl9tc2cgPSAob3AgPT0gIm9wIikgPyAib3BlcmF0aW9uIiA6ICJvcGVy
YXRpb24gJyIgKyBvcCArICInIjsKKworICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIGRlc2ly
ZWQgdmFsdWUgaXMgcHJlc2VudAorICAgICAgICAgICAgICAgIGlmIChpdCA9PSB2YWwubV92YWx1
ZS5vYmplY3QtPmVuZCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
VGhyb3c8c3RkOjppbnZhbGlkX2FyZ3VtZW50PihlcnJvcl9tc2cgKyAiIG11c3QgaGF2ZSBtZW1i
ZXIgJyIgKyBtZW1iZXIgKyAiJyIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIC8vIGNoZWNrIGlmIHJlc3VsdCBpcyBvZiB0eXBlIHN0cmluZworICAgICAgICAgICAgICAg
IGlmIChzdHJpbmdfdHlwZSBhbmQgbm90IGl0LT5zZWNvbmQuaXNfc3RyaW5nKCkpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBUaHJvdzxzdGQ6OmludmFsaWRfYXJndW1l
bnQ+KGVycm9yX21zZyArICIgbXVzdCBoYXZlIHN0cmluZyBtZW1iZXIgJyIgKyBtZW1iZXIgKyAi
JyIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIG5vIGVycm9yOiBy
ZXR1cm4gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICAgICAg
ICAgIH07CisKKyAgICAgICAgICAgIC8vIHR5cGUgY2hlY2sKKyAgICAgICAgICAgIGlmIChub3Qg
dmFsLmlzX29iamVjdCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRocm93PHN0
ZDo6aW52YWxpZF9hcmd1bWVudD4oIkpTT04gcGF0Y2ggbXVzdCBiZSBhbiBhcnJheSBvZiBvYmpl
Y3RzIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGNvbGxlY3QgbWFuZGF0b3J5
IG1lbWJlcnMKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG9wID0gZ2V0X3ZhbHVlKCJv
cCIsICJvcCIsIHRydWUpOworICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgcGF0aCA9IGdl
dF92YWx1ZShvcCwgInBhdGgiLCB0cnVlKTsKKyAgICAgICAgICAgIGpzb25fcG9pbnRlciBwdHIo
cGF0aCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAoZ2V0X29wKG9wKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBjYXNlIHBhdGNoX29wZXJhdGlvbnM6OmFkZDoKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbl9hZGQocHRyLCBnZXRfdmFsdWUo
ImFkZCIsICJ2YWx1ZSIsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNhc2UgcGF0Y2hfb3BlcmF0aW9uczo6
cmVtb3ZlOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9u
X3JlbW92ZShwdHIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBjYXNlIHBhdGNoX29wZXJhdGlvbnM6OnJlcGxhY2U6Cisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyB0aGUgInBhdGgiIGxvY2F0
aW9uIG11c3QgZXhpc3QgLSB1c2UgYXQoKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXQo
cHRyKSA9IGdldF92YWx1ZSgicmVwbGFjZSIsICJ2YWx1ZSIsIGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY2Fz
ZSBwYXRjaF9vcGVyYXRpb25zOjptb3ZlOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgZnJvbV9wYXRoID0gZ2V0X3ZhbHVlKCJtb3ZlIiwg
ImZyb20iLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAganNvbl9wb2ludGVyIGZyb21fcHRy
KGZyb21fcGF0aCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlICJmcm9tIiBsb2NhdGlv
biBtdXN0IGV4aXN0IC0gdXNlIGF0KCkKKyAgICAgICAgICAgICAgICAgICAgYmFzaWNfanNvbiB2
ID0gcmVzdWx0LmF0KGZyb21fcHRyKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbW92
ZSBvcGVyYXRpb24gaXMgZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBhCisgICAgICAgICAgICAg
ICAgICAgIC8vICJyZW1vdmUiIG9wZXJhdGlvbiBvbiB0aGUgImZyb20iIGxvY2F0aW9uLCBmb2xs
b3dlZAorICAgICAgICAgICAgICAgICAgICAvLyBpbW1lZGlhdGVseSBieSBhbiAiYWRkIiBvcGVy
YXRpb24gYXQgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbiB3aXRo
IHRoZSB2YWx1ZSB0aGF0IHdhcyBqdXN0IHJlbW92ZWQuCisgICAgICAgICAgICAgICAgICAgIG9w
ZXJhdGlvbl9yZW1vdmUoZnJvbV9wdHIpOworICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25f
YWRkKHB0ciwgdik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGNhc2UgcGF0Y2hfb3BlcmF0aW9uczo6Y29weToKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZyb21f
cGF0aCA9IGdldF92YWx1ZSgiY29weSIsICJmcm9tIiwgdHJ1ZSk7OworICAgICAgICAgICAgICAg
ICAgICBjb25zdCBqc29uX3BvaW50ZXIgZnJvbV9wdHIoZnJvbV9wYXRoKTsKKworICAgICAgICAg
ICAgICAgICAgICAvLyB0aGUgImZyb20iIGxvY2F0aW9uIG11c3QgZXhpc3QgLSB1c2UgYXQoKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHRbcHRyXSA9IHJlc3VsdC5hdChmcm9tX3B0cik7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIGNhc2UgcGF0Y2hfb3BlcmF0aW9uczo6dGVzdDoKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmICJ2YWx1ZSIgbWF0Y2hlcyB0aGUgb25lIGF0
ICJwYXRoIgorICAgICAgICAgICAgICAgICAgICAvLyB0aGUgInBhdGgiIGxvY2F0aW9uIG11c3Qg
ZXhpc3QgLSB1c2UgYXQoKQorICAgICAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSAocmVz
dWx0LmF0KHB0cikgPT0gZ2V0X3ZhbHVlKCJ0ZXN0IiwgInZhbHVlIiwgZmFsc2UpKTsKKworICAg
ICAgICAgICAgICAgICAgICAvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgdGVzdCBmYWlscworICAg
ICAgICAgICAgICAgICAgICBpZiAobm90IHN1Y2Nlc3MpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6ZG9tYWluX2Vycm9yPigidW5zdWNj
ZXNzZnVsOiAiICsgdmFsLmR1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBjYXNlIHBhdGNoX29wZXJhdGlvbnM6OmludmFsaWQ6CisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAvLyBvcCBtdXN0IGJlICJhZGQiLCAicmVtb3ZlIiwgInJlcGxhY2Ui
LCAibW92ZSIsICJjb3B5Iiwgb3IKKyAgICAgICAgICAgICAgICAgICAgLy8gInRlc3QiCisgICAg
ICAgICAgICAgICAgICAgIFRocm93PHN0ZDo6aW52YWxpZF9hcmd1bWVudD4oIm9wZXJhdGlvbiB2
YWx1ZSAnIiArIG9wICsgIicgaXMgaW52YWxpZCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisg
ICAgLyohCisgICAgQGJyaWVmIGNyZWF0ZXMgYSBkaWZmIGFzIGEgSlNPTiBwYXRjaAorCisgICAg
Q3JlYXRlcyBhIFtKU09OIFBhdGNoXShodHRwOi8vanNvbnBhdGNoLmNvbSkgc28gdGhhdCB2YWx1
ZSBAYSBzb3VyY2UgY2FuCisgICAgYmUgY2hhbmdlZCBpbnRvIHRoZSB2YWx1ZSBAYSB0YXJnZXQg
YnkgY2FsbGluZyBAcmVmIHBhdGNoIGZ1bmN0aW9uLgorCisgICAgQGludmFyaWFudCBGb3IgdHdv
IEpTT04gdmFsdWVzIEBhIHNvdXJjZSBhbmQgQGEgdGFyZ2V0LCB0aGUgZm9sbG93aW5nIGNvZGUK
KyAgICB5aWVsZHMgYWx3YXlzIGB0cnVlYDoKKyAgICBAY29kZSB7LmNwcH0KKyAgICBzb3VyY2Uu
cGF0Y2goZGlmZihzb3VyY2UsIHRhcmdldCkpID09IHRhcmdldDsKKyAgICBAZW5kY29kZQorCisg
ICAgQG5vdGUgQ3VycmVudGx5LCBvbmx5IGByZW1vdmVgLCBgYWRkYCwgYW5kIGByZXBsYWNlYCBv
cGVyYXRpb25zIGFyZQorICAgICAgICAgIGdlbmVyYXRlZC4KKworICAgIEBwYXJhbVtpbl0gc291
cmNlICBKU09OIHZhbHVlIHRvIGNvcGFyZSBmcm9tCisgICAgQHBhcmFtW2luXSB0YXJnZXQgIEpT
T04gdmFsdWUgdG8gY29wYXJlIGFnYWluc3QKKyAgICBAcGFyYW1baW5dIHBhdGggICAgaGVscGVy
IHZhbHVlIHRvIGNyZWF0ZSBKU09OIHBvaW50ZXJzCisKKyAgICBAcmV0dXJuIGEgSlNPTiBwYXRj
aCB0byBjb252ZXJ0IHRoZSBAYSBzb3VyY2UgdG8gQGEgdGFyZ2V0CisKKyAgICBAY29tcGxleGl0
eSBMaW5lYXIgaW4gdGhlIGxlbmd0aHMgb2YgQGEgc291cmNlIGFuZCBAYSB0YXJnZXQuCisKKyAg
ICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIHNob3dzIGhvdyBhIEpTT04gcGF0Y2gg
aXMgY3JlYXRlZCBhcyBhCisgICAgZGlmZiBmb3IgdHdvIEpTT04gdmFsdWVzLixkaWZmfQorCisg
ICAgQHNhIEByZWYgcGF0Y2ggLS0gYXBwbHkgYSBKU09OIHBhdGNoCisKKyAgICBAc2EgW1JGQyA2
OTAyIChKU09OIFBhdGNoKV0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY5MDIpCisK
KyAgICBAc2luY2UgdmVyc2lvbiAyLjAuMAorICAgICovCisgICAgc3RhdGljIGJhc2ljX2pzb24g
ZGlmZihjb25zdCBiYXNpY19qc29uJiBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBiYXNpY19qc29uJiB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzdGQ6OnN0cmluZyYgcGF0aCA9ICIiKQorICAgIHsKKyAgICAgICAgLy8gdGhlIHBhdGNo
CisgICAgICAgIGJhc2ljX2pzb24gcmVzdWx0KHZhbHVlX3Q6OmFycmF5KTsKKworICAgICAgICAv
LyBpZiB0aGUgdmFsdWVzIGFyZSB0aGUgc2FtZSwgcmV0dXJuIGVtcHR5IHBhdGNoCisgICAgICAg
IGlmIChzb3VyY2UgPT0gdGFyZ2V0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNvdXJjZS50eXBlKCkgIT0gdGFyZ2V0LnR5
cGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZGlmZmVyZW50IHR5cGVzOiByZXBsYWNl
IHZhbHVlCisgICAgICAgICAgICByZXN1bHQucHVzaF9iYWNrKAorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHsib3AiLCAicmVwbGFjZSJ9LAorICAgICAgICAgICAgICAgIHsicGF0aCIs
IHBhdGh9LAorICAgICAgICAgICAgICAgIHsidmFsdWUiLCB0YXJnZXR9CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRj
aCAoc291cmNlLnR5cGUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIHZh
bHVlX3Q6OmFycmF5OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
Zmlyc3QgcGFzczogdHJhdmVyc2UgY29tbW9uIGVsZW1lbnRzCisgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBpID0gMDsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBzb3VyY2Uuc2l6
ZSgpIGFuZCBpIDwgdGFyZ2V0LnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gcmVjdXJzaXZlIGNhbGwgdG8gY29tcGFyZSBhcnJheSB2YWx1
ZXMgYXQgaW5kZXggaQorICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB0ZW1wX2RpZmYgPSBk
aWZmKHNvdXJjZVtpXSwgdGFyZ2V0W2ldLCBwYXRoICsgIi8iICsgc3RkOjp0b19zdHJpbmcoaSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmluc2VydChyZXN1bHQuZW5kKCksIHRl
bXBfZGlmZi5iZWdpbigpLCB0ZW1wX2RpZmYuZW5kKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgKytpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
aSBub3cgcmVhY2hlZCB0aGUgZW5kIG9mIGF0IGxlYXN0IG9uZSBhcnJheQorICAgICAgICAgICAg
ICAgICAgICAvLyBpbiBhIHNlY29uZCBwYXNzLCB0cmF2ZXJzZSB0aGUgcmVtYWluaW5nIGVsZW1l
bnRzCisKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIG15IHJlbWFpbmluZyBlbGVtZW50
cworICAgICAgICAgICAgICAgICAgICBjb25zdCBhdXRvIGVuZF9pbmRleCA9IHN0YXRpY19jYXN0
PGRpZmZlcmVuY2VfdHlwZT4ocmVzdWx0LnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIHdo
aWxlIChpIDwgc291cmNlLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gYWRkIG9wZXJhdGlvbnMgaW4gcmV2ZXJzZSBvcmRlciB0byBhdm9p
ZCBpbnZhbGlkCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmRpY2VzCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQuaW5zZXJ0KHJlc3VsdC5iZWdpbigpICsgZW5kX2luZGV4LCBv
YmplY3QoCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeyJvcCIsICJyZW1vdmUifSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7InBh
dGgiLCBwYXRoICsgIi8iICsgc3RkOjp0b19zdHJpbmcoaSl9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9KSk7CisgICAgICAgICAgICAgICAgICAgICAgICArK2k7CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBhZGQgb3RoZXIgcmVtYWluaW5nIGVsZW1l
bnRzCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgdGFyZ2V0LnNpemUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2hfYmFj
aygKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7Im9wIiwgImFkZCJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsicGF0aCIsIHBh
dGggKyAiLyIgKyBzdGQ6OnRvX3N0cmluZyhpKX0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeyJ2YWx1ZSIsIHRhcmdldFtpXX0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgICAgICAgICAgICAgKytpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAvLyBmaXJzdCBwYXNzOiB0cmF2ZXJzZSB0aGlzIG9iamVjdCdzIGVsZW1lbnRzCisg
ICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byBpdCA9IHNvdXJjZS5iZWdpbigpOyBpdCAhPSBz
b3VyY2UuZW5kKCk7ICsraXQpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGVzY2FwZSB0aGUga2V5IG5hbWUgdG8gYmUgdXNlZCBpbiBhIEpTT04gcGF0
Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8ga2V5ID0ganNvbl9wb2ludGVy
Ojplc2NhcGUoaXQua2V5KCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0
LmZpbmQoaXQua2V5KCkpICE9IHRhcmdldC5lbmQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWN1cnNpdmUgY2FsbCB0byBjb21w
YXJlIG9iamVjdCB2YWx1ZXMgYXQga2V5IGl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byB0ZW1wX2RpZmYgPSBkaWZmKGl0LnZhbHVlKCksIHRhcmdldFtpdC5rZXkoKV0sIHBhdGgg
KyAiLyIgKyBrZXkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pbnNlcnQo
cmVzdWx0LmVuZCgpLCB0ZW1wX2RpZmYuYmVnaW4oKSwgdGVtcF9kaWZmLmVuZCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3Vu
ZCBhIGtleSB0aGF0IGlzIG5vdCBpbiBvIC0+IHJlbW92ZSBpdAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5wdXNoX2JhY2sob2JqZWN0KAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJvcCIsICJyZW1vdmUi
fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJwYXRoIiwgcGF0aCArICIvIiAr
IGtleX0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAv
LyBzZWNvbmQgcGFzczogdHJhdmVyc2Ugb3RoZXIgb2JqZWN0J3MgZWxlbWVudHMKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChhdXRvIGl0ID0gdGFyZ2V0LmJlZ2luKCk7IGl0ICE9IHRhcmdldC5l
bmQoKTsgKytpdCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHNvdXJjZS5maW5kKGl0LmtleSgpKSA9PSBzb3VyY2UuZW5kKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQgYSBr
ZXkgdGhhdCBpcyBub3QgaW4gdGhpcyAtPiBhZGQgaXQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBhdXRvIGtleSA9IGpzb25fcG9pbnRlcjo6ZXNjYXBlKGl0LmtleSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaF9iYWNrKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJvcCIs
ICJhZGQifSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJwYXRoIiwgcGF0aCAr
ICIvIiArIGtleX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsidmFsdWUiLCBp
dC52YWx1ZSgpfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIGJvdGggcHJpbWl0aXZl
IHR5cGU6IHJlcGxhY2UgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2hfYmFj
aygKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgeyJvcCIs
ICJyZXBsYWNlIn0sCisgICAgICAgICAgICAgICAgICAgICAgICB7InBhdGgiLCBwYXRofSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHsidmFsdWUiLCB0YXJnZXR9CisgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIC8vLyBAfQorfTsKKworCisvLy8vLy8vLy8vLy8vCisvLyBwcmVzZXRzIC8vCisvLy8v
Ly8vLy8vLy8vCisKKy8qIQorQGJyaWVmIGRlZmF1bHQgSlNPTiBjbGFzcworCitUaGlzIHR5cGUg
aXMgdGhlIGRlZmF1bHQgc3BlY2lhbGl6YXRpb24gb2YgdGhlIEByZWYgYmFzaWNfanNvbiBjbGFz
cyB3aGljaAordXNlcyB0aGUgc3RhbmRhcmQgdGVtcGxhdGUgdHlwZXMuCisKK0BzaW5jZSB2ZXJz
aW9uIDEuMC4wCisqLwordXNpbmcganNvbiA9IGJhc2ljX2pzb248PjsKK30KKworCisvLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLworLy8gbm9ubWVtYmVyIHN1cHBvcnQgLy8KKy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCisKKy8vIHNwZWNpYWxpemF0aW9uIG9mIHN0ZDo6c3dhcCwgYW5kIHN0ZDo6aGFz
aAorbmFtZXNwYWNlIHN0ZAoreworLyohCitAYnJpZWYgZXhjaGFuZ2VzIHRoZSB2YWx1ZXMgb2Yg
dHdvIEpTT04gb2JqZWN0cworCitAc2luY2UgdmVyc2lvbiAxLjAuMAorKi8KK3RlbXBsYXRlPD4K
K2lubGluZSB2b2lkIHN3YXAobmxvaG1hbm46Ompzb24mIGoxLAorICAgICAgICAgICAgICAgICBu
bG9obWFubjo6anNvbiYgajIpIG5vZXhjZXB0KAorICAgICAgICAgICAgICAgICAgICAgaXNfbm90
aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8bmxvaG1hbm46Ompzb24+Ojp2YWx1ZSBhbmQKKyAgICAg
ICAgICAgICAgICAgICAgIGlzX25vdGhyb3dfbW92ZV9hc3NpZ25hYmxlPG5sb2htYW5uOjpqc29u
Pjo6dmFsdWUKKyAgICAgICAgICAgICAgICAgKQoreworICAgIGoxLnN3YXAoajIpOworfQorCisv
Ly8gaGFzaCB2YWx1ZSBmb3IgSlNPTiBvYmplY3RzCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgaGFzaDxu
bG9obWFubjo6anNvbj4KK3sKKyAgICAvKiEKKyAgICBAYnJpZWYgcmV0dXJuIGEgaGFzaCB2YWx1
ZSBmb3IgYSBKU09OIG9iamVjdAorCisgICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKKyAgICAqLwor
ICAgIHN0ZDo6c2l6ZV90IG9wZXJhdG9yKCkoY29uc3QgbmxvaG1hbm46Ompzb24mIGopIGNvbnN0
CisgICAgeworICAgICAgICAvLyBhIG5haXZlIGhhc2hpbmcgdmlhIHRoZSBzdHJpbmcgcmVwcmVz
ZW50YXRpb24KKyAgICAgICAgY29uc3QgYXV0byYgaCA9IGhhc2g8bmxvaG1hbm46Ompzb246OnN0
cmluZ190PigpOworICAgICAgICByZXR1cm4gaChqLmR1bXAoKSk7CisgICAgfQorfTsKK30KKwor
LyohCitAYnJpZWYgdXNlci1kZWZpbmVkIHN0cmluZyBsaXRlcmFsIGZvciBKU09OIHZhbHVlcwor
CitUaGlzIG9wZXJhdG9yIGltcGxlbWVudHMgYSB1c2VyLWRlZmluZWQgc3RyaW5nIGxpdGVyYWwg
Zm9yIEpTT04gb2JqZWN0cy4gSXQKK2NhbiBiZSB1c2VkIGJ5IGFkZGluZyBgIl9qc29uImAgdG8g
YSBzdHJpbmcgbGl0ZXJhbCBhbmQgcmV0dXJucyBhIEpTT04gb2JqZWN0CitpZiBubyBwYXJzZSBl
cnJvciBvY2N1cnJlZC4KKworQHBhcmFtW2luXSBzICBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBv
ZiBhIEpTT04gb2JqZWN0CitAcGFyYW1baW5dIG4gIHRoZSBsZW5ndGggb2Ygc3RyaW5nIEBhIHMK
K0ByZXR1cm4gYSBKU09OIG9iamVjdAorCitAc2luY2UgdmVyc2lvbiAxLjAuMAorKi8KK2lubGlu
ZSBubG9obWFubjo6anNvbiBvcGVyYXRvciAiIiBfanNvbihjb25zdCBjaGFyKiBzLCBzdGQ6OnNp
emVfdCBuKQoreworICAgIHJldHVybiBubG9obWFubjo6anNvbjo6cGFyc2UocywgcyArIG4pOwor
fQorCisvKiEKK0BicmllZiB1c2VyLWRlZmluZWQgc3RyaW5nIGxpdGVyYWwgZm9yIEpTT04gcG9p
bnRlcgorCitUaGlzIG9wZXJhdG9yIGltcGxlbWVudHMgYSB1c2VyLWRlZmluZWQgc3RyaW5nIGxp
dGVyYWwgZm9yIEpTT04gUG9pbnRlcnMuIEl0CitjYW4gYmUgdXNlZCBieSBhZGRpbmcgYCJfanNv
bl9wb2ludGVyImAgdG8gYSBzdHJpbmcgbGl0ZXJhbCBhbmQgcmV0dXJucyBhIEpTT04gcG9pbnRl
cgorb2JqZWN0IGlmIG5vIHBhcnNlIGVycm9yIG9jY3VycmVkLgorCitAcGFyYW1baW5dIHMgIGEg
c3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgSlNPTiBQb2ludGVyCitAcGFyYW1baW5dIG4gIHRo
ZSBsZW5ndGggb2Ygc3RyaW5nIEBhIHMKK0ByZXR1cm4gYSBKU09OIHBvaW50ZXIgb2JqZWN0CisK
K0BzaW5jZSB2ZXJzaW9uIDIuMC4wCisqLworaW5saW5lIG5sb2htYW5uOjpqc29uOjpqc29uX3Bv
aW50ZXIgb3BlcmF0b3IgIiIgX2pzb25fcG9pbnRlcihjb25zdCBjaGFyKiBzLCBzdGQ6OnNpemVf
dCBuKQoreworICAgIHJldHVybiBubG9obWFubjo6anNvbjo6anNvbl9wb2ludGVyKHN0ZDo6c3Ry
aW5nKHMsIG4pKTsKK30KKworLy8gcmVzdG9yZSBHQ0MvY2xhbmcgZGlhZ25vc3RpYyBzZXR0aW5n
cworI2lmIGRlZmluZWQoX19jbGFuZ19fKSB8fCBkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVk
KF9fR05VR19fKQorICAgICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vz
c1Bvb2xDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNz
UG9vbENvY29hLm1tCmluZGV4IDRlODczZWFkNjUxODVmNjU5ZDk2MTFhOGFmOTlkYjIzYTNkYzc3
ODguLmU3OWE0ZmFiMzMzZjU1NGM1NjJhMzdkYTVkNzUwMThlMjViN2JhZDcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1t
CkBAIC04Nyw2ICs4NywxMSBAQCBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBXZWJLaXROZXR3b3Jr
TG9hZFRocm90dGxlTGF0ZW5jeU1pbGxpc2Vjb25kc0RlZmF1bHRzS2V5CiAKIHN0YXRpYyBOU1N0
cmluZyAqIGNvbnN0IFdlYktpdFZhcmlhdGlvbkZvbnRzRW5hYmxlZERlZmF1bHRzS2V5ID0gQCJF
eHBlcmltZW50YWxWYXJpYXRpb25Gb250c0VuYWJsZWQiOwogCisjaWYgRU5BQkxFKE5FVFdPUktf
Q0FQVFVSRSkKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdlYktpdFJlY29yZFJlcGxheU1vZGVE
ZWZhdWx0c0tleSA9IEAiV2ViS2l0UmVjb3JkUmVwbGF5TW9kZSI7CitzdGF0aWMgTlNTdHJpbmcg
KiBjb25zdCBXZWJLaXRSZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uRGVmYXVsdHNLZXkgPSBAIldl
YktpdFJlY29yZFJlcGxheUNhY2hlTG9jYXRpb24iOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBOU1N0cmluZyAqU2NoZW1lRm9yQ3VzdG9tUHJvdG9jb2xSZWdpc3RlcmVkTm90aWZp
Y2F0aW9uTmFtZSA9IEAiV2ViS2l0U2NoZW1lRm9yQ3VzdG9tUHJvdG9jb2xSZWdpc3RlcmVkTm90
aWZpY2F0aW9uIjsKQEAgLTI4NCw2ICsyODksMTMgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxh
dGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmEK
ICNlbmRpZgogCiAgICAgcGFyYW1ldGVycy5jb29raWVTdG9yYWdlUGFydGl0aW9uaW5nRW5hYmxl
ZCA9IGNvb2tpZVN0b3JhZ2VQYXJ0aXRpb25pbmdFbmFibGVkKCk7CisKKyNpZiBFTkFCTEUoTkVU
V09SS19DQVBUVVJFKQorICAgIHBhcmFtZXRlcnMucmVjb3JkUmVwbGF5TW9kZSA9IFtkZWZhdWx0
cyBzdHJpbmdGb3JLZXk6V2ViS2l0UmVjb3JkUmVwbGF5TW9kZURlZmF1bHRzS2V5XTsKKyAgICBw
YXJhbWV0ZXJzLnJlY29yZFJlcGxheUNhY2hlTG9jYXRpb24gPSBbZGVmYXVsdHMgc3RyaW5nRm9y
S2V5OldlYktpdFJlY29yZFJlcGxheUNhY2hlTG9jYXRpb25EZWZhdWx0c0tleV07CisgICAgaWYg
KHBhcmFtZXRlcnMucmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbi5pc0VtcHR5KCkpCisgICAgICAg
IHBhcmFtZXRlcnMucmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbiA9IHBhcmFtZXRlcnMuZGlza0Nh
Y2hlRGlyZWN0b3J5OworI2VuZGlmCiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3Jt
SW52YWxpZGF0ZUNvbnRleHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDRiMjQxODYwMTJlYzc4ZGUzZDc2MzljNGM5YTliNGZm
ODVmNTc4MjIuLjIyYWI1ZjBkMDZjODQ3NzM3ZDAzMmVkYzZmYWViNDM5MmM2MzgzZTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTEwNTYsMTIgKzEwNTYsMjcgQEAKIAkJNTJENUExQjAxQzU3NDk1QTAwREUzNEEzIC8qIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTJENUExQUExQzU3NDk0RTAwREUzNEEzIC8qIFdlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXJQcm94eS5oICovOyB9OwogCQk1MkQ1QTFCMTFDNTc0OTYyMDBERTM0QTMg
LyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlclByb3h5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJENUExQUMxQzU3NDk0RTAwREUzNEEzIC8qIFdl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXJQcm94eS5tbSAqLzsgfTsKIAkJNTJENUExQjcxQzU3NEEw
MjAwREUzNEEzIC8qIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkQ1QTFCNDFDNTc0OUYyMDBERTM0QTMg
LyogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSAqLzsgfTsKKwkJNTMwMjU4M0IxRENCQkQy
MjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MkUxRENCQkQxRDAwREE4OUMyIC8q
IE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwICovOyB9OworCQk1MzAyNTgzQzFEQ0JCRDIyMDBE
QTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MkYxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdv
cmtDYXB0dXJlUmVzb3VyY2UuaCAqLzsgfTsKKwkJNTMwMjU4M0QxRENCQkQyMjAwREE4OUMyIC8q
IE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTMwMjU4MzAxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJl
RXZlbnQuY3BwICovOyB9OworCQk1MzAyNTgzRTFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0Nh
cHR1cmVFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTMwMjU4MzExRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuaCAqLzsg
fTsKKwkJNTMwMjU4M0YxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTG9nZ2luZy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MzIx
RENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTG9nZ2luZy5oICovOyB9OworCQk1MzAy
NTg0MDFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1ODMzMURDQkJEMUQw
MERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuY3BwICovOyB9OworCQk1MzAyNTg0MTFE
Q0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgzNDFEQ0JCRDFEMDBEQTg5QzIg
LyogTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmggKi87IH07CisJCTUzMDI1ODQyMURDQkJEMjIwMERB
ODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1ODM1MURDQkJEMUQwMERBODlDMiAvKiBOZXR3
b3JrQ2FwdHVyZVJlY29yZGVyLmNwcCAqLzsgfTsKKwkJNTMwMjU4NDMxRENCQkQyMjAwREE4OUMy
IC8qIE5ldHdvcmtDYXB0dXJlUmVjb3JkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1ODM2MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2Fw
dHVyZVJlY29yZGVyLmggKi87IH07CisJCTUzMDI1ODQ0MURDQkJEMjIwMERBODlDMiAvKiBOZXR3
b3JrQ2FwdHVyZVJlcGxheWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzMDI1ODM3MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJl
cGxheWVyLmNwcCAqLzsgfTsKKwkJNTMwMjU4NDUxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtD
YXB0dXJlUmVwbGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzMDI1ODM4MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlcGxheWVy
LmggKi87IH07CisJCTUzMDI1ODQ2MURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrRGF0YVRhc2tS
ZXBsYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTMwMjU4MzkxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtEYXRhVGFza1JlcGxheS5jcHAgKi87
IH07CisJCTUzMDI1ODQ3MURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrRGF0YVRhc2tSZXBsYXku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMDI1ODNB
MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrRGF0YVRhc2tSZXBsYXkuaCAqLzsgfTsKIAkJNTMy
MTU5NTMxREJBRTcxODAwNTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMjE1OTUyMURCQUU2RkMwMDU0QUEz
QyAvKiBOZXR3b3JrU2Vzc2lvbi5jcHAgKi87IH07CiAJCTUzMjE1OTU0MURCQUU3MUQwMDU0QUEz
QyAvKiBOZXR3b3JrRGF0YVRhc2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTMyMTU5NTExREJBRTZGQzAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFz
ay5jcHAgKi87IH07CiAJCTUzMjE1OTU1MURCQUU3MjkwMDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lv
bkNvY29hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MzIxNTk1MDFEQkFFNkQ3MDA1NEFBM0MgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5oICovOyB9Owog
CQk1MzIxNTk1NjFEQkFFNzJEMDA1NEFBM0MgLyogTmV0d29ya0RhdGFUYXNrQ29jb2EuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMjE1OTRGMURCQUU2
RDcwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oICovOyB9OwogCQk1M0JBNDdEMDFE
QzJFRjVFMDA0REY0QUQgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlFQjU0NjFEQzJFRTQwMDA5RDQ4Q0Yg
LyogTmV0d29ya0RhdGFUYXNrQmxvYi5jcHAgKi87IH07CiAJCTUzQkE0N0QxMURDMkVGNUUwMDRE
RjRBRCAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzlFQjU0NzFEQzJFRTQwMDA5RDQ4Q0YgLyogTmV0d29ya0Rh
dGFUYXNrQmxvYi5oICovOyB9OworCQk1M0RFQTM2NjFEREU0MjMxMDBFODI2NDggLyoganNvbi5o
cHAgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0RFQTM2
NTFEREU0MjJFMDBFODI2NDggLyoganNvbi5ocHAgKi87IH07CisJCTUzRTI2MDY1MUREQTk0OEUw
MDU5MDgxOCAvKiBOZXR3b3JrQ2FwdHVyZVR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0UyNjA2NDFEREE5NDgxMDA1OTA4MTggLyogTmV0d29y
a0NhcHR1cmVUeXBlcy5oICovOyB9OwogCQk1QzA1MkYyNjFDNkQzQkQzMDA3NkU5MTkgLyogQXV0
aGVudGljYXRpb25NYW5hZ2VyQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1QzA1MkYyNDFDNkQzQUI2MDA3NkU5MTkgLyogQXV0aGVudGljYXRp
b25NYW5hZ2VyQ29jb2EubW0gKi87IH07CiAJCTVDMTQyNkVDMUMyM0Y4MDkwMEQ0MTE4MyAvKiBO
ZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1QzE0MjZFMjFDMjNGODA1MDBENDExODMgLyogTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwICovOyB9OwogCQk1QzE0MjZFRDFDMjNG
ODA5MDBENDExODMgLyogTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDMTQyNkUzMUMyM0Y4MDUw
MEQ0MTE4MyAvKiBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oICovOyB9OwpAQCAt
MzE2OCwxMiArMzE4MywyNyBAQAogCQk1MkQ1QTFCMjFDNTc0OUYyMDBERTM0QTMgLyogV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUyRDVBMUIzMUM1NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1l
c3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFn
ZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRDVBMUI0MUM1
NzQ5RjIwMERFMzRBMyAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMwMjU4MkUxRENCQkQxRDAwREE4OUMy
IC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHA7IHBhdGggPSBOZXR3b3JrUHJv
Y2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MzAyNTgyRjFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVS
ZXNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrQ2FwdHVy
ZVJlc291cmNlLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtlQ2FjaGVk
UmVzb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMwMjU4MzAxRENCQkQx
RDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya0NhcHR1cmVFdmVudC5jcHA7IHBhdGggPSBOZXR3b3Jr
UHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MzAyNTgzMTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVF
dmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZUV2
ZW50Lmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMwMjU4MzIxRENCQkQxRDAwREE4OUMy
IC8qIE5ldHdvcmtDYXB0dXJlTG9nZ2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBOZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NhcHR1
cmUvTmV0d29ya0NhcHR1cmVMb2dnaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUzMDI1ODMzMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya0NhcHR1cmVNYW5hZ2Vy
LmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVNYW5hZ2Vy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMwMjU4MzQxRENCQkQxRDAwREE4
OUMyIC8qIE5ldHdvcmtDYXB0dXJlTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2Nh
cHR1cmUvTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUzMDI1ODM1MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtDYXB0dXJlUmVj
b3JkZXIuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJl
Y29yZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMwMjU4MzYxRENCQkQx
RDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVjb3JkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gTmV0d29ya0NhcHR1cmVSZWNvcmRlci5oOyBwYXRoID0gTmV0d29ya1By
b2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUzMDI1ODM3MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJl
cGxheWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtD
YXB0dXJlUmVwbGF5ZXIuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3Jr
Q2FwdHVyZVJlcGxheWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTMwMjU4
MzgxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTmV0d29ya0NhcHR1cmVSZXBsYXllci5oOyBwYXRoID0g
TmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzMDI1ODM5MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3Jr
RGF0YVRhc2tSZXBsYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
TmV0d29ya0RhdGFUYXNrUmVwbGF5LmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUv
TmV0d29ya0RhdGFUYXNrUmVwbGF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTMwMjU4M0ExRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtEYXRhVGFza1JlcGxheS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3b3JrRGF0YVRhc2tSZXBsYXkuaDsgcGF0
aCA9IE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0RhdGFUYXNrUmVwbGF5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMjE1OTRGMURCQUU2RDcwMDU0QUEzQyAvKiBOZXR3
b3JrRGF0YVRhc2tDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3
b3JrRGF0YVRhc2tDb2NvYS5oOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0Rh
dGFUYXNrQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMyMTU5NTAxREJB
RTZENzAwNTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gTmV0d29ya1Nlc3Npb25Db2NvYS5oOyBwYXRoID0gTmV0d29ya1Byb2Nl
c3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MzIxNTk1MTFEQkFFNkZDMDA1NEFBM0MgLyogTmV0d29ya0RhdGFUYXNrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtEYXRhVGFzay5jcHA7IHBh
dGggPSBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrRGF0YVRhc2suY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MzIxNTk1MjFEQkFFNkZDMDA1NEFBM0MgLyogTmV0d29ya1Nlc3Npb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya1Nlc3Npb24u
Y3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MzlFQjU0NjFEQzJFRTQwMDA5RDQ4Q0YgLyogTmV0d29ya0Rh
dGFUYXNrQmxvYi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3
b3JrRGF0YVRhc2tCbG9iLmNwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtEYXRhVGFz
a0Jsb2IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzlFQjU0NzFEQzJFRTQw
MDA5RDQ4Q0YgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBOZXR3b3JrRGF0YVRhc2tCbG9iLmg7IHBhdGggPSBOZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrRGF0YVRhc2tCbG9iLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzREVB
MzY1MURERTQyMkUwMEU4MjY0OCAvKiBqc29uLmhwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lmg7IG5hbWUgPSBqc29uLmhwcDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvanNvbi5o
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRTI2MDY0MUREQTk0ODEwMDU5MDgx
OCAvKiBOZXR3b3JrQ2FwdHVyZVR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IE5ldHdvcmtDYXB0dXJlVHlwZXMuaDsgcGF0aCA9IE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUv
TmV0d29ya0NhcHR1cmVUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzlE
MThCNzFDQ0ZFMzRCMDBCMTk3NEMgLyogUGhvdG9zU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBob3Rv
c1NQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzA1MkYyNDFDNkQzQUI2MDA3
NkU5MTkgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBBdXRoZW50aWNhdGlvbk1hbmFnZXJDb2NvYS5tbTsgcGF0
aCA9IEF1dGhlbnRpY2F0aW9uL2NvY29hL0F1dGhlbnRpY2F0aW9uTWFuYWdlckNvY29hLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzE0MjZFMjFDMjNGODA1MDBENDExODMgLyog
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwOyBw
YXRoID0gTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTUxMiw2ICs1NTQyLDcgQEAKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJRTQ4OUQyODIxQTBBMkJFODAwNzhD
MDZBIC8qIGNhY2hlICovLAorCQkJCTUzOUJENUIyMURBREIwQkEwMEYyRTRFMSAvKiBjYXB0dXJl
ICovLAogCQkJCTdFQzRGMEY4MThFNEE5MjIwMDgwNTZBRiAvKiBjb2NvYSAqLywKIAkJCQk1QzE0
MjZGMjFDMjNGODJEMDBENDExODMgLyogQ3VzdG9tUHJvdG9jb2xzICovLAogCQkJCTVDMTQyNkYx
MUMyM0Y4MTcwMEQ0MTE4MyAvKiBEb3dubG9hZHMgKi8sCkBAIC01ODIyLDYgKzU4NTMsMjggQEAK
IAkJCW5hbWUgPSBJY29uRGF0YWJhc2U7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9
OworCQk1MzlCRDVCMjFEQURCMEJBMDBGMkU0RTEgLyogY2FwdHVyZSAqLyA9IHsKKwkJCWlzYSA9
IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNTNERUEzNjUxRERFNDIyRTAwRTgyNjQ4
IC8qIGpzb24uaHBwICovLAorCQkJCTUzMDI1ODJFMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3Jr
Q2FwdHVyZVJlc291cmNlLmNwcCAqLywKKwkJCQk1MzAyNTgyRjFEQ0JCRDFEMDBEQTg5QzIgLyog
TmV0d29ya0NhcHR1cmVSZXNvdXJjZS5oICovLAorCQkJCTUzMDI1ODMwMURDQkJEMUQwMERBODlD
MiAvKiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcCAqLywKKwkJCQk1MzAyNTgzMTFEQ0JCRDFEMDBE
QTg5QzIgLyogTmV0d29ya0NhcHR1cmVFdmVudC5oICovLAorCQkJCTUzMDI1ODMyMURDQkJEMUQw
MERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCAqLywKKwkJCQk1MzAyNTgzMzFEQ0JC
RDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmNwcCAqLywKKwkJCQk1MzAyNTgz
NDFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmggKi8sCisJCQkJNTMw
MjU4MzUxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVjb3JkZXIuY3BwICovLAor
CQkJCTUzMDI1ODM2MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmgg
Ki8sCisJCQkJNTMwMjU4MzcxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVwbGF5
ZXIuY3BwICovLAorCQkJCTUzMDI1ODM4MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVy
ZVJlcGxheWVyLmggKi8sCisJCQkJNTNFMjYwNjQxRERBOTQ4MTAwNTkwODE4IC8qIE5ldHdvcmtD
YXB0dXJlVHlwZXMuaCAqLywKKwkJCQk1MzAyNTgzOTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29y
a0RhdGFUYXNrUmVwbGF5LmNwcCAqLywKKwkJCQk1MzAyNTgzQTFEQ0JCRDFEMDBEQTg5QzIgLyog
TmV0d29ya0RhdGFUYXNrUmVwbGF5LmggKi8sCisJCQkpOworCQkJbmFtZSA9IGNhcHR1cmU7CisJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1QzA1MkYyMzFDNkQzQUExMDA3NkU5
MTkgLyogY29jb2EgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApA
QCAtNzU3OSw2ICs3NjMyLDcgQEAKIAkJCQkzN0E2NEU1NzE4RjM4RjQ2MDBFQjMwRjEgLyogX1dL
Rm9ybUlucHV0U2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzczRDEyMjMxOEE0NzMwMTAw
NjZEOUNDIC8qIF9XS0ZyYW1lSGFuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzNEMTIyNzE4
QTQ3M0Y2MDA2NkQ5Q0MgLyogX1dLRnJhbWVIYW5kbGVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQ0Q3OEUxMTkxREI3RTVBRDAwMTRBMkRFIC8qIF9XS0Z1bGxzY3JlZW5EZWxlZ2F0ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTNFNkE0RUUxQkM1REQzOTAwRjhBMEU3IC8qIF9XS0hpdFRl
c3RSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQTg4QjNCMUJDNzEwRDkwMEFCQTVDMiAv
KiBfV0tIaXRUZXN0UmVzdWx0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3QTY0RTU1
MThGMzhFM0MwMEVCMzBGMSAvKiBfV0tJbnB1dERlbGVnYXRlLmggaW4gSGVhZGVycyAqLywKQEAg
LTc2MTksNyArNzY3Myw2IEBACiAJCQkJMUFGQjRDNzIxQURGMTU1RDAwQjMzMzM5IC8qIF9XS1dl
YnNpdGVEYXRhU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNEE5M0I3MUFFQjA4RUEwMDE1
MEU5QyAvKiBfV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUExMTVEQzcyMTkxRDgyREEwMERBODA3MiAvKiBfV0tXZWJWaWV3UHJpbnRGb3JtYXR0ZXIuaCBp
biBIZWFkZXJzICovLAotCQkJCUNENzhFMTE5MURCN0U1QUQwMDE0QTJERSAvKiBfV0tGdWxsc2Ny
ZWVuRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUExOUREM0MwMUQwN0QxNjgwMEFDODIz
QiAvKiBfV0tXZWJWaWV3UHJpbnRGb3JtYXR0ZXJJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTE4MkQ1QjUxQkU2QkQyNTAwODdBN0NDIC8qIEFjY2Vzc2liaWxpdHlJT1MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3RDc5MkQ4MTc2N0NDQTMwMDg4MUNCRSAvKiBBY3Rpdml0eUFzc2VydGlv
bi5oIGluIEhlYWRlcnMgKi8sCkBAIC03NjM5LDYgKzc2OTIsNyBAQAogCQkJCTM3RTI1RDZFMThG
REU1RDYwMDVEM0EwMCAvKiBBUElGb3JtQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUMx
MzM3MjE4NTY2QzdDMDBGM0VDMDUgLyogQVBJRnJhbWVIYW5kbGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTJERjlFRUU2MUE3ODFGQjQwMEI2Q0ZCRSAvKiBBUElGcmFtZUluZm8uaCBpbiBIZWFkZXJz
ICovLAorCQkJCUNENzhFMTE3MURCN0RDMEEwMDE0QTJERSAvKiBBUElGdWxsc2NyZWVuQ2xpZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE3NEFBMzE0MkE0Q0I3MDAzOTI1MEYgLyogQVBJR2Vv
bWV0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEQUJBNzc2MUE4MkI0MjEwMEVGMEYxQSAvKiBB
UElIaXN0b3J5Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0E4OEI0NjFCQzg4MjkzMDBB
QkE1QzIgLyogQVBJSGl0VGVzdFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCkBAIC03NzUyLDYgKzc4
MDYsNyBAQAogCQkJCUJDRTgxRDhEMTMxOUY3RUYwMDI0MTkxMCAvKiBGb250SW5mby5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUExNEY4RTIxRDc0QzgzNDAwNkNCRUM2IC8qIEZyYW1lSW5mb0RhdGEu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTAwRDYxMTgzMTc5MjEwMDA4N0RENyAvKiBGcmFtZUxv
YWRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0Q3OEUxMTUxREI3RDdFRDAwMTRBMkRFIC8q
IEZ1bGxzY3JlZW5DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNUJFMUIzMUQ1OTAyREQw
MEREN0M2OCAvKiBHYW1lcGFkRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxNzc1M0YxMThC
QUJGMDAwN0Q5RTlBIC8qIEdlbmVyaWNDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMw
NkY0MkYxMkRCQjlCNjAwMkQ3OERFIC8qIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTc4MzEsOSArNzg4NiwxOSBAQAogCQkJCTM3NzUxMjMx
MURGMERFRTIwMDhBMzUxQyAvKiBBUElJbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTQ0MzZFQ0YxQTBEMDQwQjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZVN0
b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzMTA0MjhCMUJENkI2NkYwMEE3MTVFNCAvKiBO
ZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTMwMjU4
M0MxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUzMDI1ODNFMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUV2ZW50
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzAyNTgzRjFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29y
a0NhcHR1cmVMb2dnaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzAyNTg0MTFEQ0JCRDIyMDBE
QTg5QzIgLyogTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MzAy
NTg0MzFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZWNvcmRlci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTMwMjU4NDUxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVw
bGF5ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzRTI2MDY1MUREQTk0OEUwMDU5MDgxOCAvKiBO
ZXR3b3JrQ2FwdHVyZVR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTNBMTY0RDE2MzBBOUJG
MDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxREQ5RjI5MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0JDOUI4RTFDNjUyQ0EwMDBB
OEZEQ0YgLyogTmV0d29ya0RhdGFUYXNrLmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0JBNDdEMTFE
QzJFRjVFMDA0REY0QUQgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNTMyMTU5NTYxREJBRTcyRDAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLmggaW4g
SGVhZGVycyAqLywKKwkJCQk1MzAyNTg0NzFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0RhdGFU
YXNrUmVwbGF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk4Mzk5MDIwMzFCRTlBMDJCMDAwRjM2NTMg
LyogTmV0d29ya0xvYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzRDQ1NEQ3MUJFOUQzQzQwMDZD
OTNCRCAvKiBOZXR3b3JrTG9hZENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM5MTQ5NjUx
QkVBODM4NTAwRDJEOTUzIC8qIE5ldHdvcmtMb2FkUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8s
CkBAIC03ODQ5LDYgKzc5MTQsNyBAQAogCQkJCUUxNTI1NTFCMTcwMTE4MTkwMDNEN0FEQiAvKiBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXJNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMxNDI2
RjAxQzIzRjgwOTAwRDQxMTgzIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1QzIwQ0JBMDFCQjFFQ0Q4MDA4OTVCQjEgLyogTmV0d29ya1Nlc3Np
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCTUzMjE1OTU1MURCQUU3MjkwMDU0QUEzQyAvKiBOZXR3
b3JrU2Vzc2lvbkNvY29hLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUEyRUM1NjE0ODk5QzA5MDA4
MTBENzEgLyogTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCTMxMzEyNjFGMTQ4RkY4MkMwMEJBMkEzOSAvKiBOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVx
dWVzdE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxQTJFQzUyMTQ4OTk4MTkwMDgxMEQ3
MSAvKiBOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5oIGluIEhlYWRl
cnMgKi8sCkBAIC03OTAyLDcgKzc5NjgsNiBAQAogCQkJCTFBMEVDNkMwMTI0QkJEOUIwMDdFRjRB
NSAvKiBQbHVnaW5Qcm9jZXNzTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMEVDNzVF
MTI0QkM3QjIwMDdFRjRBNSAvKiBQbHVnaW5Qcm9jZXNzUHJveHkuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBMDQzQjVFMTI0RDVFOUQwMEZGQkZCNSAvKiBQbHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdl
cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTNCQTQ3RDExREMyRUY1RTAwNERGNEFEIC8qIE5ldHdv
cmtEYXRhVGFza0Jsb2IuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMDQzREMxMTI0RkY4NzUwMEZG
QkZCNSAvKiBQbHVnaW5Qcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE4RUZBNzExMjUyQjg0
MTAwRjcwNjdGIC8qIFBsdWdpblByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
NEE5RjMzMTJCODQ0RTIwMDhGRTk4NCAvKiBQbHVnaW5RdWlya3MuaCBpbiBIZWFkZXJzICovLApA
QCAtODAyNCw2ICs4MDg5LDcgQEAKIAkJCQlCQzAzMkQ3NzEwRjQzNzhEMDA1OEMxNUEgLyogV2Vi
Q29udGV4dE1lbnVDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMjkzNUQ4MTI4OEQxOTQw
MEE0QjY5NSAvKiBXZWJDb250ZXh0TWVudUl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMEZC
QjlCMTI4OEM5NUUwMEFGRkRGNCAvKiBXZWJDb250ZXh0TWVudUl0ZW1EYXRhLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlBMUVBMDI0MDFEQUMzMURCMDA5NjAyMUYgLyogV2ViQ29udGV4dE1lbnVMaXN0
ZW5lclByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUFDQkI4MjEyN0E4QkFEMDBEMjAzQjkg
LyogV2ViQ29udGV4dE1lbnVQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBQ0JCQTAxMjdB
OEYyQzAwRDIwM0I5IC8qIFdlYkNvbnRleHRNZW51UHJveHlNYWMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDRjRERTI1MTY4RkE0NDgwMEM5NEFGQyAvKiBXZWJDb250ZXh0U3VwcGxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC04MTEyLDcgKzgxNzgsNiBAQAogCQkJCUJDN0I2MjUyMTJBNDNDOTYw
MEQxNzRBNCAvKiBXZWJQYWdlR3JvdXBEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdCNjIx
NTEyQTQyMTlBMDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwUHJveHkuaCBpbiBIZWFkZXJzICovLAog
CQkJCTJEOUVBMzBGMUE5NkNCRkYwMDJEMjgwNyAvKiBXZWJQYWdlSW5qZWN0ZWRCdW5kbGVDbGll
bnQuaCBpbiBIZWFkZXJzICovLAotCQkJCUExRUEwMjM4MURBQkZGN0UwMDk2MDIxRiAvKiBXS0Nv
bnRleHRNZW51TGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUMwQ0U3MkExMTI0N0U3MUQw
MEJDMEVDNCAvKiBXZWJQYWdlTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENUM5RDA2
MTlDODFEOEYwMEIzQzVDMSAvKiBXZWJQYWdlT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMwMzJERDExMEY0Mzg5RjAwNThDMTVBIC8qIFdlYlBhZ2VQcm94eS5oIGluIEhlYWRlcnMgKi8s
CkBAIC04MjM4LDcgKzgzMDMsNiBAQAogCQkJCUJDN0I2MzNEMTJBNDVEMTIwMEQxNzRBNCAvKiBX
S0J1bmRsZVBhZ2VHcm91cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCNDc0RDgxODRENDNGRDAw
NTFCNjIyIC8qIFdLQnVuZGxlUGFnZUxvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RUQ4MkE3RjIxMjhDNkZBRjAwNDQ3N0IzIC8qIFdLQnVuZGxlUGFnZU92ZXJsYXkuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTUzMjE1OTU2MURCQUU3MkQwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2tD
b2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCNDc0RUExODRENDUxMzAwNTFCNjIyIC8qIFdL
QnVuZGxlUGFnZVBvbGljeUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxQjQxOTgxMUQ0
MUQ1NzAwMTFFOEREIC8qIFdLQnVuZGxlUGFnZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBQjQ3NERBMTg0RDQ0MjUwMDUxQjYyMiAvKiBXS0J1bmRsZVBhZ2VSZXNvdXJjZUxvYWRDbGll
bnQuaCBpbiBIZWFkZXJzICovLApAQCAtODI2Miw2ICs4MzI2LDcgQEAKIAkJCQkxQTQ0NUI5RjE4
NEQ1RkI1MDA0QjM0MTQgLyogV0tDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxQTU1NUY2MTI4QzZDNDcwMDlBQkNFQyAvKiBXS0NvbnRleHRNZW51SXRl
bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFBNTU2MDExMjhDNkQ5MjAwOUFCQ0VDIC8qIFdLQ29u
dGV4dE1lbnVJdGVtVHlwZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUExRUEwMjM4MURBQkZGN0Uw
MDk2MDIxRiAvKiBXS0NvbnRleHRNZW51TGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
QzkzOEUxMTE4MERFNDQwMDg1RTVGRSAvKiBXS0NvbnRleHRQcml2YXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5RkI1RjM5NTE2OUU2QTgwMDAyQzI1QkYgLyogV0tDb250ZXh0UHJpdmF0ZU1hYy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMzMwOTM0NUIxMzE1Qjk5ODAwOTdBN0JDIC8qIFdLQ29va2ll
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCkBAIC04MzA4LDcgKzgzNzMsNiBAQAogCQkJCUJDNTRD
QzEyMTJENjc0RUUwMDVDNjdCMCAvKiBXS0dlb2xvY2F0aW9uTWFuYWdlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMwNkY0NEUxMkRCREYzRjAwMkQ3OERFIC8qIFdLR2VvbG9jYXRpb25QZXJtaXNz
aW9uUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwRTYxOTgxMkQ2Q0QxMjAwMTJBNzJB
IC8qIFdLR2VvbG9jYXRpb25Qb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTMyMTU5NTUx
REJBRTcyOTAwNTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQ0I0RTRGMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDQzhCMzc0MTI1RkI2OTAwMERFNDZBNCAvKiBXS0dlb21l
dHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzRFNzVGRTFERjIyMTE5MDBEMzE4RUMgLyogVXNl
ck1lZGlhUHJvY2Vzc01hbmFnZXIuaCBpbiBIZWFkZXJzICovLApAQCAtODM2OSw3ICs4NDMzLDYg
QEAKIAkJCQk3Q0Q1RUJCOTE3NDZBMTVCMDAwQzFDNDUgLyogV0tPYmpDVHlwZVdyYXBwZXJSZWYu
aCBpbiBIZWFkZXJzICovLAogCQkJCTM3OEUxQTQwMTgxRURBMDEwMDMxMDA3QSAvKiBXS09iamVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDQzUwRjIxQ0JDMzgxRDAwM0M3RDAzIC8qIFdLT3Bl
blBhbmVsUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTFFQTAyNDAxREFDMzFEQjAw
OTYwMjFGIC8qIFdlYkNvbnRleHRNZW51TGlzdGVuZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUE2N0NEMkUxQ0JDNTEzRjAwQkZFM0VBIC8qIFdLT3BlblBhbmVsUGFyYW1ldGVyc0ludGVy
bmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzg1N0ZFNjEyQjg0M0Q4MDBFREVCMkUgLyogV0tP
cGVuUGFuZWxQYXJhbWV0ZXJzUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzFERkU4RjEyQjMx
Q0E4MDA1REY3MzAgLyogV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8s
CkBAIC04Mzc5LDcgKzg0NDIsNiBAQAogCQkJCTgzNzJEQjI1MUE2NzRDOEYwMEM2OTdDNSAvKiBX
S1BhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCOEEx
RjQxODQwMEI4RjAwRTlBRTY5IC8qIFdLUGFnZUZpbmRDbGllbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBQjhBMUY2MTg0MDBCOUQwMEU5QUU2OSAvKiBXS1BhZ2VGaW5kTWF0Y2hlc0NsaWVudC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJQ0Q3OEUxMTUxREI3RDdFRDAwMTRBMkRFIC8qIEZ1bGxzY3Jl
ZW5DbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjhBMUYwMTg0MDBCMDAwMEU5QUU2OSAv
KiBXS1BhZ2VGb3JtQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdCNjMzNzEyQTQ1QUJB
MDBEMTc0QTQgLyogV0tQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEOUVBMzBEMUE5
NkNCNTkwMDJEMjgwNyAvKiBXS1BhZ2VJbmplY3RlZEJ1bmRsZUNsaWVudC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC04NDExLDcgKzg0NzMsNiBAQAogCQkJCTkzOTEwNzRGMUJGNkJDNjUwMDhDMTdBRCAv
KiBXS1ByZXZpZXdFbGVtZW50SW5mb0ludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNC
NEU2NjE4QkJFM0Q5MDAwRkNGQzkgLyogV0tQcmludGluZ1ZpZXcuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDQkFBQ0VCMTQ1MjI1RTMwMDUzRjgyRiAvKiBXS1Byb2Nlc3NHcm91cC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJQ0Q3OEUxMTcxREI3REMwQTAwMTRBMkRFIC8qIEFQSUZ1bGxzY3JlZW5DbGll
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQkFBQ0VEMTQ1MjI1RTMwMDUzRjgyRiAvKiBXS1By
b2Nlc3NHcm91cFByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMTU4NDFBMTg5MDQ0RjUw
MDE3NjE2QyAvKiBXS1Byb2Nlc3NQb29sLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTNDQzE2OTE4
OTA3RUIwMDAxRTZFRDggLyogV0tQcm9jZXNzUG9vbEludGVybmFsLmggaW4gSGVhZGVycyAqLywK
QEAgLTg0ODMsNiArODU0NCw3IEBACiAJCQkJMzc5NTc4OUMxOEFENEYxOTAwQjlFRDJFIC8qIFdL
V2ViUHJvY2Vzc1BsdWdJbkZvcm1EZWxlZ2F0ZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFGNzUwNkIxMTg1OTE2MzcwMEVDMEZGNyAvKiBXS1dlYlByb2Nlc3NQbHVnSW5GcmFtZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUY3NTA2QjgxODU5MTY1RDAwRUMwRkY3IC8qIFdLV2ViUHJvY2Vz
c1BsdWdJbkZyYW1lSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzREVBMzY2MURERTQy
MzEwMEU4MjY0OCAvKiBqc29uLmhwcCBpbiBIZWFkZXJzICovLAogCQkJCTM3M0QxMjJEMThBNEI2
RUIwMDY2RDlDQyAvKiBXS1dlYlByb2Nlc3NQbHVnSW5GcmFtZVByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFGNzUwNkIyMTg1OTE2M0UwMEVDMEZGNyAvKiBXS1dlYlByb2Nlc3NQbHVnSW5I
aXRUZXN0UmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxRjc1MDZCNzE4NTkxNjVBMDBFQzBG
RjcgLyogV0tXZWJQcm9jZXNzUGx1Z0luSGl0VGVzdFJlc3VsdEludGVybmFsLmggaW4gSGVhZGVy
cyAqLywKQEAgLTkyNDIsNiArOTMwNCw3IEBACiAJCQkJQkNFODFEOEMxMzE5RjdFRjAwMjQxOTEw
IC8qIEZvbnRJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMTRGOEUxMUQ3NEM4MzQwMDZD
QkVDNiAvKiBGcmFtZUluZm9EYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRTAwRDYwMTgz
MTc5MjEwMDA4N0RENyAvKiBGcmFtZUxvYWRTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlD
RDc4RTExNDFEQjdEN0VEMDAxNEEyREUgLyogRnVsbHNjcmVlbkNsaWVudC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxNUJFMUIyMUQ1OTAyREQwMEREN0M2OCAvKiBHYW1lcGFkRGF0YS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQzA2RjQzMDEyREJCOUI2MDAyRDc4REUgLyogR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwNkY0NEIx
MkRCRDFGNTAwMkQ3OERFIC8qIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJv
eHkuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MzIwLDEzICs5MzgzLDIwIEBACiAJCQkJRTQ0MzZF
Q0QxQTBEMDQwQjAwRUFEMjA0IC8qIE5ldHdvcmtDYWNoZUtleS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4MzFFRUJCRTFCRDg1QzQzMDBCQjY0QzMgLyogTmV0d29ya0NhY2hlU3BlY3VsYXRpdmVM
b2FkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgzMkFFMjUzMUJFMkU4Q0QwMEZBQUUxMCAvKiBO
ZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZUxvYWRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CUNENzhFMTE0MURCN0Q3RUQwMDE0QTJERSAvKiBGdWxsc2NyZWVuQ2xpZW50Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODNCRENDQjkxQUM1RkRCNjAwM0Y2NDQxIC8qIE5ldHdvcmtDYWNoZVN0YXRp
c3RpY3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ0MzZFRDAxQTBEMDQwQjAwRUFEMjA0IC8q
IE5ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODMxMDQyOEMxQkQ2
QjY2RjAwQTcxNUU0IC8qIE5ldHdvcmtDYWNoZVN1YnJlc291cmNlc0VudHJ5LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTUzMDI1ODNCMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJl
c291cmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzMDI1ODNEMURDQkJEMjIwMERBODlDMiAv
KiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzMDI1ODQwMURD
QkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNTMwMjU4NDIxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVjb3JkZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTMwMjU4NDQxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdv
cmtDYXB0dXJlUmVwbGF5ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEzQTE2NEMxNjMwQTlC
RjAwNUQ3RDIyIC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxREQ5RjI4MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzIxNTk1
NDFEQkFFNzFEMDA1NEFBM0MgLyogTmV0d29ya0RhdGFUYXNrLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTUzQkE0N0QwMURDMkVGNUUwMDRERjRBRCAvKiBOZXR3b3JrRGF0YVRhc2tCbG9iLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTVDQkM5QjhEMUM2NTI3OUMwMEE4RkRDRiAvKiBOZXR3b3JrRGF0
YVRhc2tDb2NvYS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTUzMDI1ODQ2MURDQkJEMjIwMERBODlD
MiAvKiBOZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODM5OTAy
MDIxQkU5QTAyQjAwMEYzNjUzIC8qIE5ldHdvcmtMb2FkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTgzNkVFQjgwMUJFOUVDOUUwMDZCNEI4MiAvKiBOZXR3b3JrTG9hZE1hYy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxNzk1NTY4MTYyODc2Q0YwMEZBNDNCNiAvKiBOZXR3b3JrUHJvY2Vzcy5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTkzNDUsNiArOTQxNSw3IEBACiAJCQkJRTE1MjU1MUExNzAxMTgx
OTAwM0Q3QURCIC8qIE5ldHdvcmtSZXNvdXJjZUxvYWRlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1QzE0MjZFRjFDMjNGODA5MDBENDExODMgLyogTmV0d29ya1Jlc291
cmNlTG9hZFBhcmFtZXRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM4MjgzQUMxNkI0QkYz
RjAwQTI3OEZFIC8qIE5ldHdvcmtTZXJ2aWNlRW50cnlQb2ludC5tbSBpbiBTb3VyY2VzICovLAor
CQkJCTUzMjE1OTUzMURCQUU3MTgwMDU0QUEzQyAvKiBOZXR3b3JrU2Vzc2lvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1QzIwQ0I5RDFCQjBEQ0ZBMDA4OTVCQjEgLyogTmV0d29ya1Nlc3Npb25D
b2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTMxQTJFQzU1MTQ4OTk4MkUwMDgxMEQ3MSAvKiBO
b3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTMx
MjYxRTE0OEZGODJDMDBCQTJBMzkgLyogTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTQwNSw3ICs5NDc2LDYgQEAKIAkJCQkxQTJEOTIy
MTEyODFEQzFCMDAxRUI5NjIgLyogUGx1Z2luUHJveHlNYWMubW0gaW4gU291cmNlcyAqLywKIAkJ
CQkxQThFRkE3MDEyNTJCODQxMDBGNzA2N0YgLyogUGx1Z2luUHJveHlNZXNzYWdlUmVjZWl2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NENjIyNzcxNzM5RDg2MzAwNUJEN0ZGIC8qIFBsdWdp
blNhbmRib3hQcm9maWxlLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNTNCQTQ3RDAxREMyRUY1RTAw
NERGNEFEIC8qIE5ldHdvcmtEYXRhVGFza0Jsb2IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM4
Mjg0NEQxNkI1MDgxQzAwQTI3OEZFIC8qIFBsdWdpblNlcnZpY2VFbnRyeVBvaW50Lm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUE2RkI3QUUxMUU2NEI2ODAwREIxMzcxIC8qIFBsdWdpblZpZXcuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRTE4QzkyRjQxMkRCOUU3MTAwQ0YyQUVCIC8qIFByaW50SW5m
by5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk0NjEsNiArOTUzMSw3IEBACiAJCQkJMUE2NDIwRTQx
MkRDRTJGRjAwQ0FBRTJDIC8qIFNoYXJlYWJsZUJpdG1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlDMDFBMjYwMTEyNjYyRjIxMDBDOUVENTUgLyogU2hhcmVhYmxlQml0bWFwQ0cuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTEyMTc0NjAxNjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJlc291
cmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ0NTBBRUMwMURDM0ZBRTUwMDk5NDNGMiAvKiBT
aGFyZWRNZW1vcnlDb2NvYS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyREFGMDZENzE4QkQxQTQ3
MDA4MUNFQjEgLyogU21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTJERTY5NDNEMThCRDJBNjgwMDVDMTVFNSAvKiBTbWFydE1hZ25pZmljYXRpb25Db250
cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUyNzJCMjhBMTQw
Njk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk1
MzYsNiArOTYwNyw3IEBACiAJCQkJNTEwMjFFOUMxMkIxNjc4ODAwNUMwMzNDIC8qIFdlYkNvbnRl
eHRNZW51Q2xpZW50TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyOTM1RDcxMjg4RDE5NDAw
QTRCNjk1IC8qIFdlYkNvbnRleHRNZW51SXRlbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTBG
QkI5QTEyODhDOTVFMDBBRkZERjQgLyogV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlBMUVBMDIzRjFEQUMzMURCMDA5NjAyMUYgLyogV2ViQ29udGV4dE1lbnVM
aXN0ZW5lclByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxQTg0Q0UzMTI3RjM4NkIwMENB
NkVBNCAvKiBXZWJDb250ZXh0TWVudVByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxQUNC
QkExMTI3QThGMkMwMEQyMDNCOSAvKiBXZWJDb250ZXh0TWVudVByb3h5TWFjLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMzMwOTM0NEYxMzE1Qjk0RDAwOTdBN0JDIC8qIFdlYkNvb2tpZU1hbmFnZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC05NTk4LDcgKzk2NzAsNiBAQAogCQkJCTUxMDUyMzc5MUM3
M0RBNzcwMDc5OTNDQiAvKiBXZWJJREJDb25uZWN0aW9uVG9DbGllbnRNZXNzYWdlUmVjZWl2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0MTI5OTUxQzY0MjhDMjAwNTlFNzE0IC8qIFdlYklE
QkNvbm5lY3Rpb25Ub1NlcnZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTA1MjM3NTFDNzNE
MzhGMDA3OTkzQ0IgLyogV2ViSURCQ29ubmVjdGlvblRvU2VydmVyTWVzc2FnZVJlY2VpdmVyLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCTQ0NTBBRUMwMURDM0ZBRTUwMDk5NDNGMiAvKiBTaGFyZWRN
ZW1vcnlDb2NvYS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUE1ODc4MDFEMUM1MDgxMDA0QkE5
QUYgLyogV2ViSURCUmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0Y2QUJDMTJDOTFF
RjkwMDhGOUMzNSAvKiBXZWJJbWFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQzhFMjgyMTEy
NzVEMTU0MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTcx
Myw3ICs5Nzg0LDYgQEAKIAkJCQkxQTUzQzJBOTFBMzI1NzJCMDA0RThDNzAgLyogV2Vic2l0ZURh
dGFTdG9yZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTQ4MzJDMzFBOTY1QTNDMDA4QjRERkUg
LyogV2Vic2l0ZURhdGFTdG9yZUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUM3NzA2NzQx
RDExMzgzODAwMTI3MDBGIC8qIFdlYlNvY2tldFByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCUExRDQyMDQ3MURCNTU3ODUwMEJCNkIwRCAvKiBXS0NvbnRleHRNZW51TGlzdGVuZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODM2MDM0OUYxQUNCMzRENjAwNjI2NTQ5IC8qIFdlYlNRTGl0
ZURhdGFiYXNlVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTUyQzBGNzFBMzhDREM3
MDAxNjE2MEEgLyogV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDQzU3MTVDMTE1QURBRUYwMDFDQ0FGOSAvKiBXZWJTeXN0ZW1JbnRlcmZhY2UubW0g
aW4gU291cmNlcyAqLywKQEAgLTk3MjcsNiArOTc5Nyw3IEBACiAJCQkJMUFBRjA4QTExOTI2ODFE
MTAwQjYzOTBDIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTdDMzYxRDc4MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENvbnRy
b2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNTczOUJC
RTFCNDIwNDY2MDBEMjU4QzEgLyogV2ViVXNlck1lZGlhQ2xpZW50LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTgzRUU1NzVCMURCN0Q2MTEwMEM3NEM1MCAvKiBXZWJWYWxpZGF0aW9uTWVzc2FnZUNs
aWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MkQ1QTFCNzFDNTc0QTAyMDBERTM0QTMgLyog
V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTNGNDE4RUY5
MTg4N0JEOTcwMDI3OTVGRCAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyTWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUyRDVBMUIxMUM1NzQ5NjIwMERFMzRBMyAvKiBX
ZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkubW0gaW4gU291cmNlcyAqLywKQEAgLTk3MzQs
NyArOTgwNSw2IEBACiAJCQkJMkRGQzdEQkMxQkNDQzE5NTAwQzE1NDhDIC8qIFdlYlZpZXdJbXBs
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQzAzMzdERDExMjdBMjk4MDAwOEZGNEY0IC8qIFdlYldo
ZWVsRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4MTYwRDAxODc2NDU1NzAwMjFFNzlE
IC8qIFdpbmRvd1NlcnZlckNvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKLQkJCQk1MzIxNTk1
MzFEQkFFNzE4MDA1NEFBM0MgLyogTmV0d29ya1Nlc3Npb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMjlDRDU1QUIxMjhFMjk0RjAwMTMzQzg1IC8qIFdLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmpl
Y3RCYXNlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjkyMzJERjgxOEIyQTlBRTAwRDA1OTZGIC8q
IFdLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQky
OTIzMkRGOTE4QjJBQjNBMDBEMDU5NkYgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1h
Yy5tbSBpbiBTb3VyY2VzICovLApAQCAtOTc1Myw3ICs5ODIzLDYgQEAKIAkJCQlCQ0JBQUNGNTE0
NTIzMjRGMDA1M0Y4MkYgLyogV0tCcm93c2luZ0NvbnRleHRHcm91cC5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTFBRTAwRDRDMTgyRDZFQjAwMDA4N0RENyAvKiBXS0Jyb3dzaW5nQ29udGV4dEhhbmRs
ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDMjA0RUVFMTFDODNFQzgwMDhGMzM3NSAvKiBXS0J1
bmRsZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MzIxNTk1NDFEQkFFNzFEMDA1NEFBM0MgLyog
TmV0d29ya0RhdGFUYXNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzNUVFQjlFMTI3NzYxQUMw
MDMzMjJCOCAvKiBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5MzVFRUJBMDEyNzc2MUFDMDAzMzIyQjggLyogV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RJdGVt
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRkEyRDc3MTUyMTJFMjYwMEMxQkEwQiAvKiBXS0J1
bmRsZURPTVdpbmRvd0V4dGVuc2lvbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk3ODAsNiArOTg0
OSw3IEBACiAJCQkJQkNCOUUyNEMxMTIwRTE1QzAwQTEzN0UwIC8qIFdLQ29udGV4dC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxQUU1MkY5NzE5MjAyNjMzMDBBMUZBMzcgLyogV0tDb250ZXh0Q29u
ZmlndXJhdGlvblJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUE1NTVGNTEyOEM2QzQ3MDA5
QUJDRUMgLyogV0tDb250ZXh0TWVudUl0ZW0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTFENDIw
NDcxREI1NTc4NTAwQkI2QjBEIC8qIFdLQ29udGV4dE1lbnVMaXN0ZW5lci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5RkI1RjM5NDE2OUU2QTgwMDAyQzI1QkYgLyogV0tDb250ZXh0UHJpdmF0ZU1h
Yy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTMzMDkzNDVBMTMxNUI5OTgwMDk3QTdCQyAvKiBXS0Nv
b2tpZU1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyRjU4RjkxMkE4OEE1NDAwNjI5
NTMwIC8qIFdLQ3JlZGVudGlhbC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk4MTIsNyArOTg4Miw2
IEBACiAJCQkJRTFBRUEyMzAxNDY4N0JEQjAwODA0NTY5IC8qIFdLRnVsbEtleWJvYXJkQWNjZXNz
V2F0Y2hlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEQ0E4NUM4MTMyQUJBNEUwMEU5NjFERiAv
KiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1
NENDMTMxMkQ2NzRFRTAwNUM2N0IwIC8qIFdLR2VvbG9jYXRpb25NYW5hZ2VyLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCUExRUEwMjNGMURBQzMxREIwMDk2MDIxRiAvKiBXZWJDb250ZXh0TWVudUxp
c3RlbmVyUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwNkY0NEYxMkRCREYzRjAwMkQ3
OERFIC8qIFdLR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQzBFNjE5OTEyRDZDRDEyMDAxMkE3MkEgLyogV0tHZW9sb2NhdGlvblBvc2l0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0I0RTUwMThCQkUwNDQwMDBGQ0ZDOSAvKiBXS0dlb2xv
Y2F0aW9uUHJvdmlkZXJJT1MubW0gaW4gU291cmNlcyAqLywKQEAgLTk4MjAsNyArOTg4OSw2IEBA
CiAJCQkJMEYxNzRBQTcxNDJBQUM2MTAwMzkyNTBGIC8qIFdLR2VvbWV0cnkuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMzc0OTQyMUExREYxRjlGRjAwMzNDMTlGIC8qIFdLV2ViUHJvY2Vzc1BsdWdJ
blJhbmdlSGFuZGxlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjYyRTczMTAxNDMwNDdBNjAwNjlF
QzM1IC8qIFdLSGl0VGVzdFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk4M0VFNTc1QjFE
QjdENjExMDBDNzRDNTAgLyogV2ViVmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTExMEFFMEMxMzNDMTZDQjAwNzI3MTdBIC8qIFdLSWNvbkRhdGFiYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxMjNDRjFCMTMzRDI2MEEwMDU2RjgwMCAvKiBXS0ljb25E
YXRhYmFzZUNHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQ0Y2QUMyMTJDOTFGMzQwMDhGOUMz
NSAvKiBXS0ltYWdlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvY29uZmlnLmggYi9Tb3VyY2UvV2ViS2l0Mi9jb25maWcuaAppbmRleCA3MGNmNTBiNmZhNGM0
N2VkYWUxZjg2MDhlNjI1NzY4YjI5ZTRiZDYzLi5jYTU4MGM0OWVmNzUwNzU5NzdjZDU1MzQyNmM5
ZWFiYTA1MWZhYjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9jb25maWcuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9jb25maWcuaApAQCAtMTEwLDYgKzExMCwxMiBAQAogI2VuZGlmCiAjZW5k
aWYKIAorI2lmbmRlZiBFTkFCTEVfTkVUV09SS19DQVBUVVJFCisjaWYgVVNFKE5FVFdPUktfU0VT
U0lPTikgJiYgUExBVEZPUk0oQ09DT0EpCisjZGVmaW5lIEVOQUJMRV9ORVRXT1JLX0NBUFRVUkUg
MQorI2VuZGlmCisjZW5kaWYKKwogI2lmbmRlZiBFTkFCTEVfTkVUV09SS19DQUNIRV9TUEVDVUxB
VElWRV9SRVZBTElEQVRJT04KICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkgJiYgKFBMQVRGT1JN
KENPQ09BKSB8fCBQTEFURk9STShHVEspKQogI2RlZmluZSBFTkFCTEVfTkVUV09SS19DQUNIRV9T
UEVDVUxBVElWRV9SRVZBTElEQVRJT04gMQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>