<?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>34326</bug_id>
          
          <creation_ts>2010-01-29 04:52:48 -0800</creation_ts>
          <short_desc>[Chromium] Upstream the rest of DevTools WebKit API implementation</short_desc>
          <delta_ts>2010-02-03 00:15:35 -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>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yury Semikhatsky">yurys</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>pfeldman</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>185819</commentid>
    <comment_count>0</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-01-29 04:52:48 -0800</bug_when>
    <thetext>There are some parts of DevTools WebKit API implementation that are not specific to Chromium architecture but still live in the Chromium repository. We should migrate them to WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185825</commentid>
    <comment_count>1</comment_count>
      <attachid>47707</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-01-29 05:28:21 -0800</bug_when>
    <thetext>Created attachment 47707
patch

Add API methods for loading injected script and dispatch script sources from resource bundle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185829</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-29 05:30:29 -0800</bug_when>
    <thetext>Attachment 47707 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebKit/chromium/public/WebDevToolsAgentClient.h:35:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185831</commentid>
    <comment_count>3</comment_count>
      <attachid>47707</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-01-29 05:33:35 -0800</bug_when>
    <thetext>Comment on attachment 47707
patch

Please fix style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185836</commentid>
    <comment_count>4</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-01-29 05:41:54 -0800</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebKit/chromium/ChangeLog
	M	WebKit/chromium/public/WebDevToolsAgentClient.h
Committed r54057</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185837</commentid>
    <comment_count>5</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-01-29 05:42:24 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 47707 [details])
&gt; Please fix style.
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186415</commentid>
    <comment_count>6</comment_count>
      <attachid>47842</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-02-01 07:37:50 -0800</bug_when>
    <thetext>Created attachment 47842
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186418</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-01 07:40:19 -0800</bug_when>
    <thetext>Attachment 47842 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Last 3072 characters of output:
h:60:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit/chromium/src/ToolsAgent.h:61:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit/chromium/src/ToolsAgent.h:63:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit/chromium/src/ToolsAgent.h:64:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit/chromium/src/ToolsAgent.h:65:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit/chromium/src/WebDevToolsAgentImpl.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebKit/chromium/src/WebDevToolsFrontendImpl.h:46:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebKit/chromium/src/ProfilerAgentImpl.cpp:38:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebKit/chromium/src/ProfilerAgentImpl.cpp:39:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit/chromium/src/ProfilerAgentImpl.cpp:42:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebKit/chromium/src/ProfilerAgentImpl.cpp:43:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit/chromium/src/ProfilerAgentImpl.cpp:44:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit/chromium/src/ProfilerAgentImpl.cpp:45:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit/chromium/src/ProfilerAgentImpl.cpp:46:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit/chromium/src/ProfilerAgentImpl.cpp:47:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit/chromium/src/DebuggerAgentManager.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebKit/chromium/src/DebuggerAgent.h:39:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit/chromium/src/DebuggerAgent.h:40:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit/chromium/src/DebuggerAgent.h:45:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit/chromium/src/DebuggerAgent.h:46:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit/chromium/src/DebuggerAgent.h:47:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit/chromium/src/DebuggerAgent.h:48:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit/chromium/src/DevToolsRPC.h:86:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 76


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186421</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-01 07:45:36 -0800</bug_when>
    <thetext>Attachment 47842 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/226008</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186426</commentid>
    <comment_count>9</comment_count>
      <attachid>47842</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-02-01 07:58:48 -0800</bug_when>
    <thetext>Comment on attachment 47842
patch

Bunch of style nits, other than that r+.

&gt; +                &apos;src/DebuggerAgent.h&apos;,
&gt; +		&apos;src/DebuggerAgentImpl.cpp&apos;,
&gt; +		&apos;src/DebuggerAgentImpl.h&apos;,
&gt; +		&apos;src/DebuggerAgentManager.cpp&apos;,
&gt; +		&apos;src/DebuggerAgentManager.h&apos;,
&gt; +		&apos;src/DevToolsRPC.h&apos;,
&gt; +		&apos;src/DevToolsRPCJS.h&apos;,

Indent.


&gt; +
&gt; +#define APU_AGENT_DELEGATE_STRUCT(METHOD0, METHOD1, METHOD2, METHOD3, MEHTOD4, METHOD5) \
&gt; +  /* Sends a json object to apu. */ \
&gt; +  METHOD1(dispatchToApu, String /* data */)
&gt; +

4 space indent?

&gt; +
&gt; +    v8::Handle&lt;v8::Value&gt; args[] = {
&gt; +      functionNameWrapper,
&gt; +      jsonArgsWrapper,
&gt; +      callIdWrapper
&gt; +    };

4 space indent?

&gt; +    v8::Handle&lt;v8::Value&gt; args[] = {
&gt; +      v8::Local&lt;v8::Value&gt;()

Indent.

&gt; +WebCore::Page* DebuggerAgentImpl::page()
&gt; +{
&gt; +  return m_webViewImpl-&gt;page();
&gt; +}

Indent.


&gt; +
&gt; +#include &quot;webkit/glue/glue_util.h&quot;
&gt; +#include &quot;webkit/glue/webkit_glue.h&quot;
&gt; +


Does this compile?

&gt; +    virtual void dispatchOnInjectedScript(
&gt; +        int callId,
&gt; +        int injectedScriptId,
&gt; +        const WebCore::String&amp; functionName,
&gt; +        const WebCore::String&amp; jsonArgs,
&gt; +        bool async);

Use single line here in and cpp.


&gt; +WebDevToolsFrontend* WebDevToolsFrontend::create(
&gt; +    WebView* view,
&gt; +    WebDevToolsFrontendClient* client,
&gt; +    const WebString&amp; applicationLocale)
&gt; +{
&gt; +    return new WebDevToolsFrontendImpl(
&gt; +      static_cast&lt;WebViewImpl*&gt;(view),
&gt; +      client,
&gt; +      applicationLocale);
&gt; +}

Why wrapping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186846</commentid>
    <comment_count>10</comment_count>
      <attachid>47911</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-02-02 00:44:35 -0800</bug_when>
    <thetext>Created attachment 47911
patch

All the comments have been addressed. Style errors fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186947</commentid>
    <comment_count>11</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-02-02 06:23:15 -0800</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebKit/chromium/ChangeLog
	M	WebKit/chromium/WebKit.gyp
	A	WebKit/chromium/src/APUAgentDelegate.h
	A	WebKit/chromium/src/BoundObject.cpp
	A	WebKit/chromium/src/BoundObject.h
	A	WebKit/chromium/src/DebuggerAgent.h
	A	WebKit/chromium/src/DebuggerAgentImpl.cpp
	A	WebKit/chromium/src/DebuggerAgentImpl.h
	A	WebKit/chromium/src/DebuggerAgentManager.cpp
	A	WebKit/chromium/src/DebuggerAgentManager.h
	A	WebKit/chromium/src/DevToolsRPC.h
	A	WebKit/chromium/src/DevToolsRPCJS.h
	A	WebKit/chromium/src/ProfilerAgent.h
	A	WebKit/chromium/src/ProfilerAgentImpl.cpp
	A	WebKit/chromium/src/ProfilerAgentImpl.h
	A	WebKit/chromium/src/ToolsAgent.h
	A	WebKit/chromium/src/WebDevToolsAgentImpl.cpp
	A	WebKit/chromium/src/WebDevToolsAgentImpl.h
	A	WebKit/chromium/src/WebDevToolsFrontendImpl.cpp
	A	WebKit/chromium/src/WebDevToolsFrontendImpl.h
Committed r54232</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187135</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-02 14:09:08 -0800</bug_when>
    <thetext>Looks like this was landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187137</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-02 14:09:49 -0800</bug_when>
    <thetext>Consider trying &quot;webkit-patch&quot; for landing your bugs.  That tool will automatically update/close bugs for you.

See &quot;webkit-patch --help&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187284</commentid>
    <comment_count>14</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-02-03 00:11:22 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Consider trying &quot;webkit-patch&quot; for landing your bugs.  That tool will
&gt; automatically update/close bugs for you.
&gt; 
&gt; See &quot;webkit-patch --help&quot;
 Thaks for the suggestion, will try. But this particular bug was not closed intentionally since there are some pieces of devtools implemented in JavaScript that are to be upstreamed. It might be a good idea to file a separate bug for them though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187287</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-03 00:15:35 -0800</bug_when>
    <thetext>One bug per change is generally preferred, yes.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47707</attachid>
            <date>2010-01-29 05:28:21 -0800</date>
            <delta_ts>2010-01-29 05:42:10 -0800</delta_ts>
            <desc>patch</desc>
            <filename>upstream-devtools1.patch</filename>
            <type>text/plain</type>
            <size>1384</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDljMDJmZDkuLjQxNzFhYzQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE1IEBACisyMDEwLTAxLTI5ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBB
UEkgbWV0aG9kcyBmb3IgbG9hZGluZyBpbnNwZWN0b3IgdXRpbGl0eSBzY3JpcHRzLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDMyNgorCisgICAg
ICAgICogcHVibGljL1dlYkRldlRvb2xzQWdlbnRDbGllbnQuaDoKKyAgICAgICAgKFdlYktpdDo6
V2ViRGV2VG9vbHNBZ2VudENsaWVudDo6aW5qZWN0ZWRTY3JpcHRTb3VyY2UpOgorICAgICAgICAo
V2ViS2l0OjpXZWJEZXZUb29sc0FnZW50Q2xpZW50OjppbmplY3RlZFNjcmlwdERpc3BhdGNoZXJT
b3VyY2UpOgorCiAyMDEwLTAxLTI5ICBEYXJpbiBGaXNoZXIgIDxkYXJpbkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViRGV2VG9vbHNBZ2VudENsaWVudC5oIGIvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJEZXZUb29sc0FnZW50Q2xpZW50LmgKaW5kZXggN2MxOGRjNC4uNTAyZjUxNSAx
MDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEZXZUb29sc0FnZW50Q2xpZW50
LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEZXZUb29sc0FnZW50Q2xpZW50LmgK
QEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgV2ViRGV2VG9vbHNBZ2VudENsaWVudF9oCiAKICNp
bmNsdWRlICJXZWJDb21tb24uaCIKKyNpbmNsdWRlICJXZWJDU3RyaW5nLmgiCiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogY2xhc3MgV2ViU3RyaW5nOwpAQCAtNTIsNiArNTMsOSBAQCBwdWJsaWM6CiAK
ICAgICBXRUJLSVRfQVBJIHN0YXRpYyB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9udGVuZE9uSU9UaHJl
YWQoY29uc3QgV2ViRGV2VG9vbHNNZXNzYWdlRGF0YSYpOwogCisgICAgdmlydHVhbCBXZWJDU3Ry
aW5nIGluamVjdGVkU2NyaXB0U291cmNlKCkgeyByZXR1cm4gV2ViQ1N0cmluZygpOyB9CisgICAg
dmlydHVhbCBXZWJDU3RyaW5nIGluamVjdGVkU2NyaXB0RGlzcGF0Y2hlclNvdXJjZSgpIHsgcmV0
dXJuIFdlYkNTdHJpbmcoKTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgfldlYkRldlRvb2xzQWdlbnRD
bGllbnQoKSB7IH0KIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47842</attachid>
            <date>2010-02-01 07:37:50 -0800</date>
            <delta_ts>2010-02-02 00:44:35 -0800</delta_ts>
            <desc>patch</desc>
            <filename>upstream-devtools2.patch</filename>
            <type>text/plain</type>
            <size>129780</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDZhOGU3NmEuLmM2OTQ3YWIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE0OCBAQAorMjAxMC0wMi0wMSAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcHN0
cmVhbSBEZXZUb29scyBjb2RlLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zNDMyNgorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBz
cmMvQVBVQWdlbnREZWxlZ2F0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvQm91bmRPYmplY3Qu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6Qm91bmRPYmplY3Q6OkJvdW5kT2JqZWN0KToK
KyAgICAgICAgKFdlYktpdDo6Qm91bmRPYmplY3Q6On5Cb3VuZE9iamVjdCk6CisgICAgICAgIChX
ZWJLaXQ6OkJvdW5kT2JqZWN0OjphZGRQcm90b0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
Qm91bmRPYmplY3Q6OmJ1aWxkKToKKyAgICAgICAgKiBzcmMvQm91bmRPYmplY3QuaDogQWRkZWQu
CisgICAgICAgICogc3JjL0RlYnVnZ2VyQWdlbnQuaDogQWRkZWQuCisgICAgICAgICogc3JjL0Rl
YnVnZ2VyQWdlbnRJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkRlYnVnZ2VyQWdl
bnRJbXBsOjpEZWJ1Z2dlckFnZW50SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OkRlYnVnZ2VyQWdl
bnRJbXBsOjp+RGVidWdnZXJBZ2VudEltcGwpOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFn
ZW50SW1wbDo6Z2V0Q29udGV4dElkKToKKyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2VudElt
cGw6OmRlYnVnZ2VyT3V0cHV0KToKKyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2VudEltcGw6
OmNyZWF0ZVV0aWxpdHlDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2VudElt
cGw6OmV4ZWN1dGVVdGlsaXR5RnVuY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFn
ZW50SW1wbDo6ZXhlY3V0ZVZvaWRKYXZhU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6RGVidWdn
ZXJBZ2VudEltcGw6OnBhZ2UpOgorICAgICAgICAqIHNyYy9EZWJ1Z2dlckFnZW50SW1wbC5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2VudEltcGw6OnNldEF1dG9Db250aW51
ZU9uRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2VudEltcGw6OmF1dG9D
b250aW51ZU9uRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2VudEltcGw6
OndlYmRldnRvb2xzQWdlbnQpOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFnZW50SW1wbDo6
d2ViVmlldyk6CisgICAgICAgICogc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OkRlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpkZWJ1Z0hvc3REaXNwYXRj
aEhhbmRsZXIpOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFnZW50TWFuYWdlcjo6ZGVidWdB
dHRhY2gpOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFnZW50TWFuYWdlcjo6ZGVidWdEZXRh
Y2gpOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFnZW50TWFuYWdlcjo6b25WOERlYnVnTWVz
c2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkRlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpwYXVzZVNjcmlw
dCk6CisgICAgICAgIChXZWJLaXQ6OkRlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpleGVjdXRlRGVidWdn
ZXJDb21tYW5kKToKKyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2VudE1hbmFnZXI6OnNldE1l
c3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2Vu
dE1hbmFnZXI6OnNldEhvc3RJZCk6CisgICAgICAgIChXZWJLaXQ6OkRlYnVnZ2VyQWdlbnRNYW5h
Z2VyOjpvbldlYlZpZXdDbG9zZWQpOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFnZW50TWFu
YWdlcjo6b25OYXZpZ2F0ZSk6CisgICAgICAgIChXZWJLaXQ6OkRlYnVnZ2VyQWdlbnRNYW5hZ2Vy
OjpzZW5kQ29tbWFuZFRvVjgpOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFnZW50TWFuYWdl
cjo6c2VuZENvbnRpbnVlQ29tbWFuZFRvVjgpOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFn
ZW50TWFuYWdlcjo6ZmluZEFnZW50Rm9yQ3VycmVudFY4Q29udGV4dCk6CisgICAgICAgIChXZWJL
aXQ6OkRlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpkZWJ1Z2dlckFnZW50Rm9ySG9zdElkKToKKyAgICAg
ICAgKiBzcmMvRGVidWdnZXJBZ2VudE1hbmFnZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OkRlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpVdGlsaXR5Q29udGV4dFNjb3BlOjpVdGlsaXR5Q29udGV4
dFNjb3BlKToKKyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2VudE1hbmFnZXI6OlV0aWxpdHlD
b250ZXh0U2NvcGU6On5VdGlsaXR5Q29udGV4dFNjb3BlKToKKyAgICAgICAgKiBzcmMvRGV2VG9v
bHNSUEMuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Oik6CisgICAgICAgIChXZWJLaXQ6OkRl
dlRvb2xzUlBDOjpEZWxlZ2F0ZTo6RGVsZWdhdGUpOgorICAgICAgICAoV2ViS2l0OjpEZXZUb29s
c1JQQzo6RGVsZWdhdGU6On5EZWxlZ2F0ZSk6CisgICAgICAgIChXZWJLaXQ6OkRldlRvb2xzUlBD
OjpEZXZUb29sc1JQQyk6CisgICAgICAgIChXZWJLaXQ6OkRldlRvb2xzUlBDOjp+RGV2VG9vbHNS
UEMpOgorICAgICAgICAoV2ViS2l0OjpEZXZUb29sc1JQQzo6c2VuZFJwY01lc3NhZ2UpOgorICAg
ICAgICAqIHNyYy9EZXZUb29sc1JQQ0pTLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9Qcm9maWxl
ckFnZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9Qcm9maWxlckFnZW50SW1wbC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpQcm9maWxlckFnZW50SW1wbDo6Z2V0QWN0aXZlUHJvZmls
ZXJNb2R1bGVzKToKKyAgICAgICAgKFdlYktpdDo6UHJvZmlsZXJBZ2VudEltcGw6OmdldExvZ0xp
bmVzKToKKyAgICAgICAgKiBzcmMvUHJvZmlsZXJBZ2VudEltcGwuaDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OlByb2ZpbGVyQWdlbnRJbXBsOjpQcm9maWxlckFnZW50SW1wbCk6CisgICAgICAg
IChXZWJLaXQ6OlByb2ZpbGVyQWdlbnRJbXBsOjp+UHJvZmlsZXJBZ2VudEltcGwpOgorICAgICAg
ICAqIHNyYy9Ub29sc0FnZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0Fn
ZW50SW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjopOgorICAgICAgICAoV2ViS2l0
OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6V2ViRGV2VG9vbHNBZ2VudEltcGwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6fldlYkRldlRvb2xzQWdlbnRJbXBsKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpc3Bvc2VVdGlsaXR5Q29udGV4
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjp1bmhpZGVSZXNvdXJj
ZXNQYW5lbElmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudElt
cGw6OmF0dGFjaCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpkZXRh
Y2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkTmF2aWdhdGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkQ29tbWl0UHJvdmlz
aW9uYWxMb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpZENs
ZWFyV2luZG93T2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6
OmZvcmNlUmVwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpk
aXNwYXRjaE9uSW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRv
b2xzQWdlbnRJbXBsOjpkaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6ZXhlY3V0ZVZvaWRKYXZhU2NyaXB0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVu
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjppbnNwZWN0RWxlbWVu
dEF0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OnNldFJ1bnRpbWVG
ZWF0dXJlRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpz
ZW5kUnBjTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpj
b21waWxlVXRpbGl0eVNjcmlwdHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50
SW1wbDo6aW5pdERldlRvb2xzQWdlbnRIb3N0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9v
bHNBZ2VudEltcGw6OmNyZWF0ZUluc3BlY3RvckJhY2tlbmRWOFdyYXBwZXIpOgorICAgICAgICAo
V2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6cmVzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OnNldEFwdUFnZW50RW5h
YmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpqc0Rpc3BhdGNo
T25DbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6anNEaXNw
YXRjaFRvQXB1KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmpzRXZh
bHVhdGVPblNlbGYpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6anNP
blJ1bnRpbWVGZWF0dXJlU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9v
bHNBZ2VudEltcGw6Omluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJE
ZXZUb29sc0FnZW50SW1wbDo6aWRlbnRpZmllckZvckluaXRpYWxSZXF1ZXN0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkRmluaXNoTG9hZGluZyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpkaWRGYWlsTG9hZGluZyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpldmFsdWF0ZUluV2ViSW5zcGVj
dG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OnNldFRpbWVsaW5l
UHJvZmlsaW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnQ6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnQ6OmV4ZWN1dGVEZWJ1Z2dl
ckNvbW1hbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50OjpkZWJ1Z2dlclBh
dXNlU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudDo6c2V0TWVzc2Fn
ZUxvb3BEaXNwYXRjaEhhbmRsZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50
OjpkaXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmRPbklPVGhyZWFkKToKKyAgICAgICAgKiBzcmMv
V2ViRGV2VG9vbHNBZ2VudEltcGwuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkRldlRv
b2xzQWdlbnRJbXBsOjpob3N0SWQpOgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0Zyb250ZW5k
SW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpUb1Y4U3RyaW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OldlYkRldlRvb2xzRnJvbnRlbmRJbXBsKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6On5XZWJEZXZUb29sc0Zyb250ZW5k
SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpkaXNwYXRj
aE1lc3NhZ2VGcm9tQWdlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250ZW5k
SW1wbDo6ZXhlY3V0ZVNjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRl
bmRJbXBsOjpkaXNwYXRjaE9uV2ViSW5zcGVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2
VG9vbHNGcm9udGVuZEltcGw6OnNlbmRScGNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RGV2VG9vbHNGcm9udGVuZEltcGw6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKToKKyAgICAgICAg
KFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmNvbnRleHRNZW51Q2xlYXJlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0xvYWRlZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc1BsYXRmb3JtKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzUG9ydCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0NvcHlUZXh0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzQWN0aXZhdGVXaW5kb3cpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNDbG9zZVdpbmRvdyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0RvY2tXaW5kb3cpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNVbmRvY2tXaW5kb3cpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNMb2NhbGl6ZWRTdHJp
bmdzVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzSGlk
ZGVuUGFuZWxzKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6Ompz
RGVidWdnZXJDb21tYW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZElt
cGw6OmpzU2V0dGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRlbmRJbXBs
Ojpqc1NldFNldHRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250ZW5kSW1w
bDo6anNEZWJ1Z2dlclBhdXNlU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNG
cm9udGVuZEltcGw6OmpzV2luZG93VW5sb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2
VG9vbHNGcm9udGVuZEltcGw6OmpzU2hvd0NvbnRleHRNZW51KToKKyAgICAgICAgKiBzcmMvV2Vi
RGV2VG9vbHNGcm9udGVuZEltcGwuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkRldlRv
b2xzRnJvbnRlbmRJbXBsOjpNZW51UHJvdmlkZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpNZW51UHJvdmlkZXI6On5NZW51UHJvdmlkZXIpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6TWVudVByb3ZpZGVyOjpk
aXNjb25uZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6Ok1l
bnVQcm92aWRlcjo6cG9wdWxhdGVDb250ZXh0TWVudSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRl
dlRvb2xzRnJvbnRlbmRJbXBsOjpNZW51UHJvdmlkZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVk
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6Ok1lbnVQcm92aWRl
cjo6Y29udGV4dE1lbnVDbGVhcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNGcm9u
dGVuZEltcGw6Ok1lbnVQcm92aWRlcjo6TWVudVByb3ZpZGVyKToKKwogMjAxMC0wMS0zMSAgS2Vu
dCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVy
ZW15IE9ybG93LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCAzYjVhMTdmLi4xNWE3NTMzIDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cApAQCAtMTkyLDYgKzE5Miw3IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy93aW4vV2Vi
U2FuZGJveFN1cHBvcnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy93aW4vV2ViU2NyZWVu
SW5mb0ZhY3RvcnkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy93aW4vV2ViU2NyZWVuSW5m
b0ZhY3RvcnkuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9BUFVBZ2VudERlbGVnYXRlLmgnLAog
ICAgICAgICAgICAgICAgICdzcmMvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwJywKICAgICAgICAg
ICAgICAgICAnc3JjL0FwcGxpY2F0aW9uQ2FjaGVIb3N0SW50ZXJuYWwuaCcsCiAgICAgICAgICAg
ICAgICAgJ3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcCcsCkBAIC0xOTksNiArMjAwLDggQEAK
ICAgICAgICAgICAgICAgICAnc3JjL0F1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudC5oJywKICAg
ICAgICAgICAgICAgICAnc3JjL0JhY2tGb3J3YXJkTGlzdENsaWVudEltcGwuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL0JhY2tGb3J3YXJkTGlzdENsaWVudEltcGwuaCcsCisgICAgICAgICAg
ICAgICAgJ3NyYy9Cb3VuZE9iamVjdC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvQm91bmRP
YmplY3QuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9DaHJvbWVDbGllbnRJbXBsLmgnLAogICAgICAgICAgICAgICAg
ICdzcmMvQ2hyb21pdW1CcmlkZ2UuY3BwJywKQEAgLTIwNyw2ICsyMTAsMTMgQEAKICAgICAgICAg
ICAgICAgICAnc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvRGF0
YWJhc2VPYnNlcnZlci5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvRGVidWdnZXJBZ2VudC5o
JywKKwkJJ3NyYy9EZWJ1Z2dlckFnZW50SW1wbC5jcHAnLAorCQknc3JjL0RlYnVnZ2VyQWdlbnRJ
bXBsLmgnLAorCQknc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmNwcCcsCisJCSdzcmMvRGVidWdn
ZXJBZ2VudE1hbmFnZXIuaCcsCisJCSdzcmMvRGV2VG9vbHNSUEMuaCcsCisJCSdzcmMvRGV2VG9v
bHNSUENKUy5oJywKICAgICAgICAgICAgICAgICAnc3JjL0RPTVV0aWxpdGllc1ByaXZhdGUuY3Bw
JywKICAgICAgICAgICAgICAgICAnc3JjL0RPTVV0aWxpdGllc1ByaXZhdGUuaCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9EcmFnQ2xpZW50SW1wbC5jcHAnLApAQCAtMjMyLDYgKzI0Miw5IEBACiAg
ICAgICAgICAgICAgICAgJ3NyYy9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAnLAogICAgICAg
ICAgICAgICAgICdzcmMvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCcsCisgICAgICAgICAg
ICAgICAgJ3NyYy9Qcm9maWxlckFnZW50LmgnLAorICAgICAgICAgICAgICAgICdzcmMvUHJvZmls
ZXJBZ2VudEltcGwuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1Byb2ZpbGVyQWdlbnRJbXBs
LmgnLAogICAgICAgICAgICAgICAgICdzcmMvUmVzb3VyY2VIYW5kbGUuY3BwJywKICAgICAgICAg
ICAgICAgICAnc3JjL1NoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwJywKICAgICAgICAgICAgICAg
ICAnc3JjL1NvY2tldFN0cmVhbUhhbmRsZS5jcHAnLApAQCAtMjQzLDYgKzI1Niw3IEBACiAgICAg
ICAgICAgICAgICAgJ3NyYy9TdG9yYWdlTmFtZXNwYWNlUHJveHkuY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94eS5oJywKICAgICAgICAgICAgICAgICAnc3Jj
L1RlbXBvcmFyeUdsdWUuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9Ub29sc0FnZW50LmgnLAog
ICAgICAgICAgICAgICAgICdzcmMvV2ViQWNjZXNzaWJpbGl0eUNhY2hlLmNwcCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJBY2Nlc3NpYmlsaXR5Q2FjaGVJbXBsLmNwcCcsCiAgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJBY2Nlc3NpYmlsaXR5Q2FjaGVJbXBsLmgnLApAQCAtMjU5LDYgKzI3Mywx
MCBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViRGF0YWJhc2UuY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYkRhdGFTb3VyY2VJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJEYXRhU291cmNlSW1wbC5oJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkRldlRvb2xzQWdl
bnRJbXBsLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5o
JywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkRldlRvb2xzRnJvbnRlbmRJbXBsLmNwcCcsCisg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5oJywKICAgICAgICAg
ICAgICAgICAnc3JjL1dlYkRvY3VtZW50LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJE
cmFnRGF0YS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRWxlbWVudC5jcHAnLApkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9BUFVBZ2VudERlbGVnYXRlLmggYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL0FQVUFnZW50RGVsZWdhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4wMTM5ZmFmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9BUFVBZ2VudERlbGVnYXRlLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQVBVQWdlbnREZWxl
Z2F0ZV9oCisjZGVmaW5lIEFQVUFnZW50RGVsZWdhdGVfaAorCisjaW5jbHVkZSAiRGV2VG9vbHNS
UEMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNkZWZpbmUgQVBVX0FHRU5UX0RFTEVHQVRF
X1NUUlVDVChNRVRIT0QwLCBNRVRIT0QxLCBNRVRIT0QyLCBNRVRIT0QzLCBNRUhUT0Q0LCBNRVRI
T0Q1KSBcCisgIC8qIFNlbmRzIGEganNvbiBvYmplY3QgdG8gYXB1LiAqLyBcCisgIE1FVEhPRDEo
ZGlzcGF0Y2hUb0FwdSwgU3RyaW5nIC8qIGRhdGEgKi8pCisKK0RFRklORV9SUENfQ0xBU1MoQXB1
QWdlbnREZWxlZ2F0ZSwgQVBVX0FHRU5UX0RFTEVHQVRFX1NUUlVDVCkKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9Cb3Vu
ZE9iamVjdC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0JvdW5kT2JqZWN0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDA5NmMyCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9Cb3VuZE9iamVjdC5jcHAKQEAgLTAsMCArMSw3OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCb3VuZE9iamVjdC5oIgorCisjaW5jbHVkZSAiVjhQ
cm94eS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworQm91bmRPYmplY3Q6OkJvdW5kT2JqZWN0
KHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQsIHZvaWQqIHY4VGhpcywgY29uc3QgY2hh
ciogb2JqZWN0TmFtZSkKKyAgICA6IG1fb2JqZWN0TmFtZShvYmplY3ROYW1lKQorICAgICwgbV9j
b250ZXh0KGNvbnRleHQpCisgICAgLCBtX3Y4VGhpcyh2OFRoaXMpCit7CisgICAgdjg6OkNvbnRl
eHQ6OlNjb3BlIGNvbnRleHRTY29wZShjb250ZXh0KTsKKyAgICB2ODo6TG9jYWw8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IGxvY2FsVGVtcGxhdGUgPSB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFdl
YkNvcmU6OlY4UHJveHk6OmNoZWNrTmV3TGVnYWwpOworICAgIG1faG9zdFRlbXBsYXRlID0gdjg6
OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcobG9jYWxUZW1wbGF0ZSk7Cisg
ICAgbV9ob3N0VGVtcGxhdGUtPlNldENsYXNzTmFtZSh2ODo6U3RyaW5nOjpOZXcob2JqZWN0TmFt
ZSkpOworfQorCitCb3VuZE9iamVjdDo6fkJvdW5kT2JqZWN0KCkKK3sKKyAgICBtX2hvc3RUZW1w
bGF0ZS5EaXNwb3NlKCk7Cit9CisKK3ZvaWQgQm91bmRPYmplY3Q6OmFkZFByb3RvRnVuY3Rpb24o
Y29uc3QgY2hhciogbmFtZSwgdjg6Okludm9jYXRpb25DYWxsYmFjayBjYWxsYmFjaykKK3sKKyAg
ICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKG1fY29udGV4dCk7CisgICAgdjg6Okxv
Y2FsPHY4OjpTaWduYXR1cmU+IHNpZ25hdHVyZSA9IHY4OjpTaWduYXR1cmU6Ok5ldyhtX2hvc3RU
ZW1wbGF0ZSk7CisgICAgdjg6OkxvY2FsPHY4OjpPYmplY3RUZW1wbGF0ZT4gcHJvdG8gPSBtX2hv
c3RUZW1wbGF0ZS0+UHJvdG90eXBlVGVtcGxhdGUoKTsKKyAgICB2ODo6TG9jYWw8djg6OkV4dGVy
bmFsPiB2OFRoaXMgPSB2ODo6RXh0ZXJuYWw6Ok5ldyhtX3Y4VGhpcyk7CisgICAgcHJvdG8tPlNl
dCgKKyAgICAgICAgdjg6OlN0cmluZzo6TmV3KG5hbWUpLAorICAgICAgICB2ODo6RnVuY3Rpb25U
ZW1wbGF0ZTo6TmV3KAorICAgICAgICAgICAgY2FsbGJhY2ssCisgICAgICAgICAgICB2OFRoaXMs
CisgICAgICAgICAgICBzaWduYXR1cmUpLAorICAgICAgICBzdGF0aWNfY2FzdDx2ODo6UHJvcGVy
dHlBdHRyaWJ1dGU+KHY4OjpEb250RGVsZXRlKSk7Cit9CisKK3ZvaWQgQm91bmRPYmplY3Q6OmJ1
aWxkKCkKK3sKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKG1fY29udGV4dCk7
CisgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gY29uc3RydWN0b3IgPSBtX2hvc3RUZW1wbGF0
ZS0+R2V0RnVuY3Rpb24oKTsKKyAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gYm91bmRPYmplY3Qg
PSBXZWJDb3JlOjpTYWZlQWxsb2NhdGlvbjo6bmV3SW5zdGFuY2UoY29uc3RydWN0b3IpOworCisg
ICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnbG9iYWwgPSBtX2NvbnRleHQtPkdsb2JhbCgpOwor
ICAgIGdsb2JhbC0+U2V0KHY4OjpTdHJpbmc6Ok5ldyhtX29iamVjdE5hbWUpLCBib3VuZE9iamVj
dCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9Cb3VuZE9iamVjdC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9Cb3VuZE9iamVjdC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2OWU4M2YKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0JvdW5kT2JqZWN0LmgKQEAgLTAsMCArMSw2MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgQm91bmRPYmplY3RfaAorI2RlZmluZSBCb3VuZE9iamVjdF9oCisKKyNpbmNsdWRl
IDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworLy8gQm91bmRPYmplY3QgaXMgYSBoZWxwZXIgY2xhc3MgdGhhdCBsZXRzIHlvdSBtYXAg
SmF2YVNjcmlwdCBtZXRob2QgY2FsbHMKKy8vIGRpcmVjdGx5IHRvIEMrKyBtZXRob2QgY2FsbHMu
IEl0IHNob3VsZCBiZSBkZXN0cm95ZWQgb25jZSBKUyBvYmplY3QgaXMKKy8vIGJ1aWx0LgorY2xh
c3MgQm91bmRPYmplY3QgOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIEJvdW5k
T2JqZWN0KHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQsIHZvaWQqIHY4VGhpcywgY29u
c3QgY2hhciogb2JqZWN0TmFtZSk7CisgICAgdmlydHVhbCB+Qm91bmRPYmplY3QoKTsKKworICAg
IHZvaWQgYWRkUHJvdG9GdW5jdGlvbihjb25zdCBjaGFyKiBuYW1lLCB2ODo6SW52b2NhdGlvbkNh
bGxiYWNrIGNhbGxiYWNrKTsKKyAgICB2b2lkIGJ1aWxkKCk7CisKK3ByaXZhdGU6CisgICAgdjg6
OkhhbmRsZVNjb3BlIG1faGFuZGxlU2NvcGU7CisgICAgY29uc3QgY2hhciogbV9vYmplY3ROYW1l
OworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IG1fY29udGV4dDsKKyAgICB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gbV9ob3N0VGVtcGxhdGU7CisgICAgdm9pZCogbV92
OFRoaXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnQuaCBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvRGVidWdnZXJBZ2VudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJk
NWIwNmQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdl
bnQuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEZWJ1Z2dlckFnZW50X2gKKyNkZWZpbmUgRGVi
dWdnZXJBZ2VudF9oCisKKyNpbmNsdWRlICJEZXZUb29sc1JQQy5oIgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworI2RlZmluZSBERUJVR0dFUl9BR0VOVF9TVFJVQ1QoTUVUSE9EMCwgTUVUSE9EMSwg
TUVUSE9EMiwgTUVUSE9EMywgTUVUSE9ENCwgTUVUSE9ENSkgXAorICAvKiBSZXF1ZXN0cyBnbG9i
YWwgY29udGV4dCBpZCBvZiB0aGUgaW5zcGVjdGVkIHRhYi4gKi8gXAorICBNRVRIT0QwKGdldENv
bnRleHRJZCkKKworREVGSU5FX1JQQ19DTEFTUyhEZWJ1Z2dlckFnZW50LCBERUJVR0dFUl9BR0VO
VF9TVFJVQ1QpCisKKyNkZWZpbmUgREVCVUdHRVJfQUdFTlRfREVMRUdBVEVfU1RSVUNUKE1FVEhP
RDAsIE1FVEhPRDEsIE1FVEhPRDIsIE1FVEhPRDMsIE1FVEhPRDQsIE1FVEhPRDUpIFwKKyAgTUVU
SE9EMShkZWJ1Z2dlck91dHB1dCwgU3RyaW5nIC8qIG91dHB1dCB0ZXh0ICovKSBcCisgIFwKKyAg
LyogUHVzaGVzIGRlYnVnZ2VyIGNvbnRleHQgaWQgaW50byB0aGUgY2xpZW50LiAqLyBcCisgIE1F
VEhPRDEoc2V0Q29udGV4dElkLCBpbnQgLyogY29udGV4dCBpZCAqLykKKworREVGSU5FX1JQQ19D
TEFTUyhEZWJ1Z2dlckFnZW50RGVsZWdhdGUsIERFQlVHR0VSX0FHRU5UX0RFTEVHQVRFX1NUUlVD
VCkKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L0RlYnVnZ2VyQWdlbnRJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li41N2NiMzVkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dl
ckFnZW50SW1wbC5jcHAKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRGVidWdnZXJBZ2VudEltcGwuaCIKKworI2luY2x1ZGUgIkRlYnVnZ2VyQWdlbnRNYW5h
Z2VyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOERPTVdpbmRv
dy5oIgorI2luY2x1ZGUgIlY4SW5kZXguaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVk
ZSAiV2ViRGV2VG9vbHNBZ2VudEltcGwuaCIKKyNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKwordXNpbmcgV2ViQ29yZTo6RE9NV2luZG93OwordXNpbmcgV2ViQ29y
ZTo6RG9jdW1lbnQ7Cit1c2luZyBXZWJDb3JlOjpGcmFtZTsKK3VzaW5nIFdlYkNvcmU6OlBhZ2U7
Cit1c2luZyBXZWJDb3JlOjpTdHJpbmc7Cit1c2luZyBXZWJDb3JlOjpWOENsYXNzSW5kZXg7Cit1
c2luZyBXZWJDb3JlOjpWOEN1c3RvbTsKK3VzaW5nIFdlYkNvcmU6OlY4RE9NV2luZG93OwordXNp
bmcgV2ViQ29yZTo6VjhET01XcmFwcGVyOwordXNpbmcgV2ViQ29yZTo6VjhQcm94eTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK0RlYnVnZ2VyQWdlbnRJbXBsOjpEZWJ1Z2dlckFnZW50SW1wbCgK
KyAgICBXZWJWaWV3SW1wbCogd2ViVmlld0ltcGwsCisgICAgRGVidWdnZXJBZ2VudERlbGVnYXRl
KiBkZWxlZ2F0ZSwKKyAgICBXZWJEZXZUb29sc0FnZW50SW1wbCogd2ViZGV2dG9vbHNBZ2VudCkK
KyAgICA6IG1fd2ViVmlld0ltcGwod2ViVmlld0ltcGwpCisgICAgLCBtX2RlbGVnYXRlKGRlbGVn
YXRlKQorICAgICwgbV93ZWJkZXZ0b29sc0FnZW50KHdlYmRldnRvb2xzQWdlbnQpCisgICAgLCBt
X2F1dG9Db250aW51ZU9uRXhjZXB0aW9uKGZhbHNlKQoreworICAgIERlYnVnZ2VyQWdlbnRNYW5h
Z2VyOjpkZWJ1Z0F0dGFjaCh0aGlzKTsKK30KKworRGVidWdnZXJBZ2VudEltcGw6On5EZWJ1Z2dl
ckFnZW50SW1wbCgpCit7CisgICAgRGVidWdnZXJBZ2VudE1hbmFnZXI6OmRlYnVnRGV0YWNoKHRo
aXMpOworfQorCit2b2lkIERlYnVnZ2VyQWdlbnRJbXBsOjpnZXRDb250ZXh0SWQoKQoreworICAg
IG1fZGVsZWdhdGUtPnNldENvbnRleHRJZChtX3dlYmRldnRvb2xzQWdlbnQtPmhvc3RJZCgpKTsK
K30KKwordm9pZCBEZWJ1Z2dlckFnZW50SW1wbDo6ZGVidWdnZXJPdXRwdXQoY29uc3QgU3RyaW5n
JiBjb21tYW5kKQoreworICAgIG1fZGVsZWdhdGUtPmRlYnVnZ2VyT3V0cHV0KGNvbW1hbmQpOwor
ICAgIG1fd2ViZGV2dG9vbHNBZ2VudC0+Zm9yY2VSZXBhaW50KCk7Cit9CisKKy8vIHN0YXRpYwor
dm9pZCBEZWJ1Z2dlckFnZW50SW1wbDo6Y3JlYXRlVXRpbGl0eUNvbnRleHQoRnJhbWUqIGZyYW1l
LCB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4qIGNvbnRleHQpCit7CisgICAgdjg6OkhhbmRs
ZVNjb3BlIHNjb3BlOworCisgICAgLy8gU2V0IHVwIHRoZSBET00gd2luZG93IGFzIHRoZSBwcm90
b3R5cGUgb2YgdGhlIG5ldyBnbG9iYWwgb2JqZWN0LgorICAgIHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+IHdpbmRvd0NvbnRleHQgPSBWOFByb3h5Ojpjb250ZXh0KGZyYW1lKTsKKyAgICB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IHdpbmRvd0dsb2JhbCA9IHdpbmRvd0NvbnRleHQtPkdsb2JhbCgpOwor
ICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd2luZG93V3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6
bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgd2luZG93R2xvYmFsKTsK
KworICAgIEFTU0VSVChWOERPTVdpbmRvdzo6dG9OYXRpdmUod2luZG93V3JhcHBlcikgPT0gZnJh
bWUtPmRvbVdpbmRvdygpKTsKKworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdFRlbXBsYXRlPiBn
bG9iYWxUZW1wbGF0ZSA9IHY4OjpPYmplY3RUZW1wbGF0ZTo6TmV3KCk7CisKKyAgICAvLyBUT0RP
KHl1cnlzKTogcHJvdmlkZSBhIGZ1bmN0aW9uIGluIHY4IGJpbmRpbmdzIHRoYXQgd291bGQgbWFr
ZSB0aGUKKyAgICAvLyB1dGlsaXR5IGNvbnRleHQgbW9yZSBsaWtlIG1haW4gd29ybGQgY29udGV4
dCBvZiB0aGUgaW5zcGVjdGVkIGZyYW1lLAorICAgIC8vIG90aGVyd2lzZSB3ZSBuZWVkIHRvIG1h
bnVhbGx5IG1ha2UgaXQgc2F0aXNmeSB2YXJpb3VzIGludmFyaWFudHMKKyAgICAvLyB0aGF0IFY4
UHJveHk6OmdldEVudGVyZWQgYW5kIHNvbWUgb3RoZXIgVjhQcm94eSBtZXRob2RzIGV4cGVjdCB0
byBmaW5kCisgICAgLy8gb24gdjggY29udGV4dHMgb24gdGhlIGNvbnRleHRzIHN0YWNrLgorICAg
IC8vIFNlZSBWOFByb3h5OjpjcmVhdGVOZXdDb250ZXh0LgorICAgIC8vCisgICAgLy8gSW5zdGFs
bCBhIHNlY3VyaXR5IGhhbmRsZXIgd2l0aCBWOC4KKyAgICBnbG9iYWxUZW1wbGF0ZS0+U2V0QWNj
ZXNzQ2hlY2tDYWxsYmFja3MoCisgICAgICAgIFY4RE9NV2luZG93OjpuYW1lZFNlY3VyaXR5Q2hl
Y2ssCisgICAgICAgIFY4RE9NV2luZG93OjppbmRleGVkU2VjdXJpdHlDaGVjaywKKyAgICAgICAg
djg6OkludGVnZXI6Ok5ldyhWOENsYXNzSW5kZXg6OkRPTVdJTkRPVykpOworICAgIC8vIFdlIHNl
dCBudW1iZXIgb2YgaW50ZXJuYWwgZmllbGRzIHRvIG1hdGNoIHRoYXQgaW4gVjhET01XaW5kb3cg
d3JhcHBlci4KKyAgICAvLyBTZWUgaHR0cDovL2NyYnVnLmNvbS8yODk2MQorICAgIGdsb2JhbFRl
bXBsYXRlLT5TZXRJbnRlcm5hbEZpZWxkQ291bnQoVjhET01XaW5kb3c6OmludGVybmFsRmllbGRD
b3VudCk7CisKKyAgICAqY29udGV4dCA9IHY4OjpDb250ZXh0OjpOZXcoMCAvKiBubyBleHRlbnNp
b25zICovLCBnbG9iYWxUZW1wbGF0ZSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpKTsKKyAgICB2
ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKCpjb250ZXh0KTsKKyAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGdsb2JhbCA9ICgqY29udGV4dCktPkdsb2JhbCgpOworCisgICAgdjg6Okhh
bmRsZTx2ODo6U3RyaW5nPiBpbXBsaWNpdFByb3RvU3RyaW5nID0gdjg6OlN0cmluZzo6TmV3KCJf
X3Byb3RvX18iKTsKKyAgICBnbG9iYWwtPlNldChpbXBsaWNpdFByb3RvU3RyaW5nLCB3aW5kb3dX
cmFwcGVyKTsKKworICAgIC8vIEdpdmUgdGhlIGNvZGUgcnVubmluZyBpbiB0aGUgbmV3IGNvbnRl
eHQgYSB3YXkgdG8gZ2V0IGFjY2VzcyB0byB0aGUKKyAgICAvLyBvcmlnaW5hbCBjb250ZXh0Lgor
ICAgIGdsb2JhbC0+U2V0KHY4OjpTdHJpbmc6Ok5ldygiY29udGVudFdpbmRvdyIpLCB3aW5kb3dH
bG9iYWwpOworfQorCitTdHJpbmcgRGVidWdnZXJBZ2VudEltcGw6OmV4ZWN1dGVVdGlsaXR5RnVu
Y3Rpb24oCisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCwKKyAgICBpbnQgY2Fs
bElkLAorICAgIGNvbnN0IGNoYXIqIG9iamVjdCwKKyAgICBjb25zdCBTdHJpbmcgJmZ1bmN0aW9u
TmFtZSwKKyAgICBjb25zdCBTdHJpbmcmIGpzb25BcmdzLAorICAgIGJvb2wgYXN5bmMsCisgICAg
U3RyaW5nKiBleGNlcHRpb24pCit7CisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgIEFT
U0VSVCghY29udGV4dC5Jc0VtcHR5KCkpOworICAgIGlmIChjb250ZXh0LklzRW1wdHkoKSkgewor
ICAgICAgICAqZXhjZXB0aW9uID0gIk5vIHdpbmRvdyBjb250ZXh0LiI7CisgICAgICAgIHJldHVy
biAiIjsKKyAgICB9CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShjb250ZXh0
KTsKKworICAgIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpVdGlsaXR5Q29udGV4dFNjb3BlIHV0aWxp
dHlTY29wZTsKKworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZGlzcGF0Y2hPYmplY3QgPSB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KAorICAgICAgICBjb250ZXh0LT5HbG9iYWwoKS0+
R2V0KHY4OjpTdHJpbmc6Ok5ldyhvYmplY3QpKSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gZGlzcGF0Y2hGdW5jdGlvbiA9IGRpc3BhdGNoT2JqZWN0LT5HZXQodjg6OlN0cmluZzo6TmV3
KCJkaXNwYXRjaCIpKTsKKyAgICBBU1NFUlQoZGlzcGF0Y2hGdW5jdGlvbi0+SXNGdW5jdGlvbigp
KTsKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gZnVuY3Rpb24gPSB2ODo6SGFuZGxlPHY4
OjpGdW5jdGlvbj46OkNhc3QoZGlzcGF0Y2hGdW5jdGlvbik7CisKKyAgICB2ODo6SGFuZGxlPHY4
OjpTdHJpbmc+IGZ1bmN0aW9uTmFtZVdyYXBwZXIgPSB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+KAor
ICAgICAgICB2ODo6U3RyaW5nOjpOZXcoZnVuY3Rpb25OYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAg
ICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGpzb25BcmdzV3JhcHBlciA9IHY4OjpIYW5kbGU8djg6
OlN0cmluZz4oCisgICAgICAgIHY4OjpTdHJpbmc6Ok5ldyhqc29uQXJncy51dGY4KCkuZGF0YSgp
KSk7CisgICAgdjg6OkhhbmRsZTx2ODo6TnVtYmVyPiBjYWxsSWRXcmFwcGVyID0gdjg6OkhhbmRs
ZTx2ODo6TnVtYmVyPigKKyAgICAgICAgdjg6Ok51bWJlcjo6TmV3KGFzeW5jID8gY2FsbElkIDog
MCkpOworCisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3NbXSA9IHsKKyAgICAgIGZ1bmN0
aW9uTmFtZVdyYXBwZXIsCisgICAgICBqc29uQXJnc1dyYXBwZXIsCisgICAgICBjYWxsSWRXcmFw
cGVyCisgICAgfTsKKworICAgIHY4OjpUcnlDYXRjaCB0cnlDYXRjaDsKKyAgICB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gcmVzT2JqID0gZnVuY3Rpb24tPkNhbGwoY29udGV4dC0+R2xvYmFsKCksIDMs
IGFyZ3MpOworICAgIGlmICh0cnlDYXRjaC5IYXNDYXVnaHQoKSkgeworICAgICAgICB2ODo6TG9j
YWw8djg6Ok1lc3NhZ2U+IG1lc3NhZ2UgPSB0cnlDYXRjaC5NZXNzYWdlKCk7CisgICAgICAgIGlm
IChtZXNzYWdlLklzRW1wdHkoKSkKKyAgICAgICAgICAgICpleGNlcHRpb24gPSAiVW5rbm93biBl
eGNlcHRpb24iOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqZXhjZXB0aW9uID0gV2ViQ29y
ZTo6dG9XZWJDb3JlU3RyaW5nKG1lc3NhZ2UtPkdldCgpKTsKKyAgICAgICAgcmV0dXJuICIiOwor
ICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gV2ViQ29yZTo6dG9XZWJDb3JlU3RyaW5nV2l0aE51
bGxDaGVjayhyZXNPYmopOworfQorCit2b2lkIERlYnVnZ2VyQWdlbnRJbXBsOjpleGVjdXRlVm9p
ZEphdmFTY3JpcHQodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKK3sKKyAgICB2ODo6
SGFuZGxlU2NvcGUgc2NvcGU7CisgICAgQVNTRVJUKCFjb250ZXh0LklzRW1wdHkoKSk7CisgICAg
djg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShjb250ZXh0KTsKKyAgICBEZWJ1Z2dlckFn
ZW50TWFuYWdlcjo6VXRpbGl0eUNvbnRleHRTY29wZSB1dGlsaXR5U2NvcGU7CisKKyAgICB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gZnVuY3Rpb24gPQorICAgICAgICBjb250ZXh0LT5HbG9iYWwoKS0+
R2V0KHY4OjpTdHJpbmc6Ok5ldygiZGV2dG9vbHMkJHZvaWQiKSk7CisgICAgQVNTRVJUKGZ1bmN0
aW9uLT5Jc0Z1bmN0aW9uKCkpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmdzW10gPSB7
CisgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPigpCisgICAgfTsKKyAgICB2ODo6SGFuZGxlPHY4
OjpGdW5jdGlvbj46OkNhc3QoZnVuY3Rpb24pLT5DYWxsKGNvbnRleHQtPkdsb2JhbCgpLCAwLCBh
cmdzKTsKK30KKworV2ViQ29yZTo6UGFnZSogRGVidWdnZXJBZ2VudEltcGw6OnBhZ2UoKQorewor
ICByZXR1cm4gbV93ZWJWaWV3SW1wbC0+cGFnZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudEltcGwuaCBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudEltcGwuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi44ODcyNTE3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50SW1wbC5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBE
ZWJ1Z2dlckFnZW50SW1wbF9oCisjZGVmaW5lIERlYnVnZ2VyQWdlbnRJbXBsX2gKKworI2luY2x1
ZGUgIkRlYnVnZ2VyQWdlbnQuaCIKKworI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworICAgIGNsYXNzIERvY3VtZW50OworICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNzIE5v
ZGU7CisgICAgY2xhc3MgUGFnZTsKKyAgICBjbGFzcyBTdHJpbmc7Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCisgICAgY2xhc3MgV2ViRGV2VG9vbHNBZ2VudEltcGw7CisgICAgY2xhc3MgV2Vi
Vmlld0ltcGw7CisKK2NsYXNzIERlYnVnZ2VyQWdlbnRJbXBsIDogcHVibGljIERlYnVnZ2VyQWdl
bnQgeworcHVibGljOgorICAgIC8vIENyZWF0ZXMgdXRpbGl0eSBjb250ZXh0IHdpdGggaW5qZWN0
ZWQganMgYWdlbnQuCisgICAgc3RhdGljIHZvaWQgY3JlYXRlVXRpbGl0eUNvbnRleHQoV2ViQ29y
ZTo6RnJhbWUqIGZyYW1lLCB2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4qIGNvbnRleHQpOwor
CisgICAgRGVidWdnZXJBZ2VudEltcGwoV2ViS2l0OjpXZWJWaWV3SW1wbCogd2ViVmlld0ltcGws
CisgICAgICAgICAgICAgICAgICAgICAgRGVidWdnZXJBZ2VudERlbGVnYXRlKiBkZWxlZ2F0ZSwK
KyAgICAgICAgICAgICAgICAgICAgICBXZWJEZXZUb29sc0FnZW50SW1wbCogd2ViZGV2dG9vbHNB
Z2VudCk7CisgICAgdmlydHVhbCB+RGVidWdnZXJBZ2VudEltcGwoKTsKKworICAgIC8vIERlYnVn
Z2VyQWdlbnQgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2b2lkIGdldENvbnRleHRJZCgp
OworCisgICAgdm9pZCBkZWJ1Z2dlck91dHB1dChjb25zdCBXZWJDb3JlOjpTdHJpbmcmIG91dCk7
CisKKyAgICB2b2lkIHNldEF1dG9Db250aW51ZU9uRXhjZXB0aW9uKGJvb2wgYXV0b0NvbnRpbnVl
KSB7IG1fYXV0b0NvbnRpbnVlT25FeGNlcHRpb24gPSBhdXRvQ29udGludWU7IH0KKworICAgIGJv
b2wgYXV0b0NvbnRpbnVlT25FeGNlcHRpb24oKSB7IHJldHVybiBtX2F1dG9Db250aW51ZU9uRXhj
ZXB0aW9uOyB9CisKKyAgICAvLyBFeGVjdXRlcyBmdW5jdGlvbiB3aXRoIHRoZSBnaXZlbiBuYW1l
IGluIHRoZSB1dGlsaXR5IGNvbnRleHQuIFBhc3NlcyBub2RlCisgICAgLy8gYW5kIGpzb24gYXJn
cyBhcyBwYXJhbWV0ZXJzLiBOb3RlIHRoYXQgdGhlIGZ1bmN0aW9uIGNhbGxlZCBtdXN0IGJlCisg
ICAgLy8gaW1wbGVtZW50ZWQgaW4gdGhlIGluamVjdF9kaXNwYXRjaC5qcyBmaWxlLgorICAgIFdl
YkNvcmU6OlN0cmluZyBleGVjdXRlVXRpbGl0eUZ1bmN0aW9uKAorICAgICAgICB2ODo6SGFuZGxl
PHY4OjpDb250ZXh0PiBjb250ZXh0LAorICAgICAgICBpbnQgY2FsbElkLAorICAgICAgICBjb25z
dCBjaGFyKiBvYmplY3QsCisgICAgICAgIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgZnVuY3Rpb25O
YW1lLAorICAgICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGpzb25BcmdzLAorICAgICAgICBi
b29sIGFzeW5jLAorICAgICAgICBXZWJDb3JlOjpTdHJpbmcqIGV4Y2VwdGlvbik7CisKKyAgICAv
LyBFeGVjdXRlcyBhIG5vLW9wIGZ1bmN0aW9uIGluIHRoZSB1dGlsaXR5IGNvbnRleHQuIFdlIGRv
bid0IHVzZQorICAgIC8vIGV4ZWN1dGVVdGlsaXR5RnVuY3Rpb24gZm9yIHRoYXQgdG8gYXZvaWQg
c2NyaXB0IGV2YWx1YXRpb24gbGVhZGluZyB0bworICAgIC8vIHVuZGVzaXJhYmxlIEFmdGVyQ29t
cGlsZSBldmVudHMuCisgICAgdm9pZCBleGVjdXRlVm9pZEphdmFTY3JpcHQodjg6OkhhbmRsZTx2
ODo6Q29udGV4dD4gY29udGV4dCk7CisKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdlKCk7CisgICAg
V2ViRGV2VG9vbHNBZ2VudEltcGwqIHdlYmRldnRvb2xzQWdlbnQoKSB7IHJldHVybiBtX3dlYmRl
dnRvb2xzQWdlbnQ7IH07CisKKyAgICBXZWJLaXQ6OldlYlZpZXdJbXBsKiB3ZWJWaWV3KCkgeyBy
ZXR1cm4gbV93ZWJWaWV3SW1wbDsgfQorCitwcml2YXRlOgorICAgIFdlYktpdDo6V2ViVmlld0lt
cGwqIG1fd2ViVmlld0ltcGw7CisgICAgRGVidWdnZXJBZ2VudERlbGVnYXRlKiBtX2RlbGVnYXRl
OworICAgIFdlYkRldlRvb2xzQWdlbnRJbXBsKiBtX3dlYmRldnRvb2xzQWdlbnQ7CisgICAgYm9v
bCBtX2F1dG9Db250aW51ZU9uRXhjZXB0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50
TWFuYWdlci5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjM2MWVmCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5jcHAKQEAg
LTAsMCArMSwzMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGVidWdnZXJBZ2Vu
dE1hbmFnZXIuaCIKKworI2luY2x1ZGUgIkRlYnVnZ2VyQWdlbnRJbXBsLmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCIKKyNpbmNsdWRlICJW
OFByb3h5LmgiCisjaW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2VudEltcGwuaCIKKyNpbmNsdWRlICJX
ZWJGcmFtZUltcGwuaCIKKyNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitXZWJEZXZUb29sc0FnZW50OjpNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciBEZWJ1
Z2dlckFnZW50TWFuYWdlcjo6c19tZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciA9IDA7CisKK2Jv
b2wgRGVidWdnZXJBZ2VudE1hbmFnZXI6OnNfaW5Ib3N0RGlzcGF0Y2hIYW5kbGVyID0gZmFsc2U7
CisKK0RlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpEZWZlcnJlcnNNYXAgRGVidWdnZXJBZ2VudE1hbmFn
ZXI6OnNfcGFnZURlZmVycmVyczsKKworYm9vbCBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6c19pblV0
aWxpdHlDb250ZXh0ID0gZmFsc2U7CisKK2Jvb2wgRGVidWdnZXJBZ2VudE1hbmFnZXI6OnNfZGVi
dWdCcmVha0RlbGF5ZWQgPSBmYWxzZTsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgQ2FsbGVySWRX
cmFwcGVyIDogcHVibGljIHY4OjpEZWJ1Zzo6Q2xpZW50RGF0YSwgcHVibGljIE5vbmNvcHlhYmxl
IHsKK3B1YmxpYzoKKyAgICBDYWxsZXJJZFdyYXBwZXIoKSA6IG1fY2FsbGVySXNNYW5hbmFnZXIo
dHJ1ZSksIG1fY2FsbGVySWQoMCkgeyB9CisgICAgZXhwbGljaXQgQ2FsbGVySWRXcmFwcGVyKGlu
dCBjYWxsZXJJZCkKKyAgICAgICAgOiBtX2NhbGxlcklzTWFuYW5hZ2VyKGZhbHNlKQorICAgICAg
ICAsIG1fY2FsbGVySWQoY2FsbGVySWQpIHsgfQorICAgIH5DYWxsZXJJZFdyYXBwZXIoKSB7IH0K
KyAgICBib29sIGNhbGxlcklzTWFuYW5hZ2VyKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZXJJc01h
bmFuYWdlcjsgfQorICAgIGludCBjYWxsZXJJZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVySWQ7
IH0KK3ByaXZhdGU6CisgICAgYm9vbCBtX2NhbGxlcklzTWFuYW5hZ2VyOworICAgIGludCBtX2Nh
bGxlcklkOworfTsKKworfSAgLy8gbmFtZXNwYWNlCisKKwordm9pZCBEZWJ1Z2dlckFnZW50TWFu
YWdlcjo6ZGVidWdIb3N0RGlzcGF0Y2hIYW5kbGVyKCkKK3sKKyAgICBpZiAoIXNfbWVzc2FnZUxv
b3BEaXNwYXRjaEhhbmRsZXIgfHwgIXNfYXR0YWNoZWRBZ2VudHNNYXApCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChzX2luSG9zdERpc3BhdGNoSGFuZGxlcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgc19pbkhvc3REaXNwYXRjaEhhbmRsZXIgPSB0cnVlOworCisgICAgVmVjdG9yPFdlYlZp
ZXdJbXBsKj4gdmlld3M7CisgICAgLy8gMS4gRGlzYWJsZSBhY3RpdmUgb2JqZWN0cyBhbmQgaW5w
dXQgZXZlbnRzLgorICAgIGZvciAoQXR0YWNoZWRBZ2VudHNNYXA6Oml0ZXJhdG9yIGl0ID0gc19h
dHRhY2hlZEFnZW50c01hcC0+YmVnaW4oKTsgaXQgIT0gc19hdHRhY2hlZEFnZW50c01hcC0+ZW5k
KCk7ICsraXQpIHsKKyAgICAgICAgRGVidWdnZXJBZ2VudEltcGwqIGFnZW50ID0gaXQtPnNlY29u
ZDsKKyAgICAgICAgc19wYWdlRGVmZXJyZXJzLnNldChhZ2VudC0+d2ViVmlldygpLCBuZXcgV2Vi
Q29yZTo6UGFnZUdyb3VwTG9hZERlZmVycmVyKGFnZW50LT5wYWdlKCksIHRydWUpKTsKKyAgICAg
ICAgdmlld3MuYXBwZW5kKGFnZW50LT53ZWJWaWV3KCkpOworICAgICAgICBhZ2VudC0+d2ViVmll
dygpLT5zZXRJZ25vcmVJbnB1dEV2ZW50cyh0cnVlKTsKKyAgICB9CisKKyAgICAvLyAyLiBQcm9j
ZXNzIG1lc3NhZ2VzLgorICAgIHNfbWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIoKTsKKworICAg
IC8vIDMuIEJyaW5nIHRoaW5ncyBiYWNrLgorICAgIGZvciAoVmVjdG9yPFdlYlZpZXdJbXBsKj46
Oml0ZXJhdG9yIGl0ID0gdmlld3MuYmVnaW4oKTsgaXQgIT0gdmlld3MuZW5kKCk7ICsraXQpIHsK
KyAgICAgICAgaWYgKHNfcGFnZURlZmVycmVycy5jb250YWlucygqaXQpKSB7CisgICAgICAgICAg
ICAvLyBUaGUgdmlldyB3YXMgbm90IGNsb3NlZCBkdXJpbmcgdGhlIGRpc3BhdGNoLgorICAgICAg
ICAgICAgKCppdCktPnNldElnbm9yZUlucHV0RXZlbnRzKGZhbHNlKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBkZWxldGVBbGxWYWx1ZXMoc19wYWdlRGVmZXJyZXJzKTsKKyAgICBzX3BhZ2VEZWZl
cnJlcnMuY2xlYXIoKTsKKworICAgIHNfaW5Ib3N0RGlzcGF0Y2hIYW5kbGVyID0gZmFsc2U7Cisg
ICAgaWYgKCFzX2F0dGFjaGVkQWdlbnRzTWFwKSB7CisgICAgICAgIC8vIFJlbW92ZSBoYW5kbGVy
cyBpZiBhbGwgYWdlbnRzIHdlcmUgZGV0YWNoZWQgd2l0aGluIGhvc3QgZGlzcGF0Y2guCisgICAg
ICAgIHY4OjpEZWJ1Zzo6U2V0TWVzc2FnZUhhbmRsZXIoMCk7CisgICAgICAgIHY4OjpEZWJ1Zzo6
U2V0SG9zdERpc3BhdGNoSGFuZGxlcigwKTsKKyAgICB9Cit9CisKK0RlYnVnZ2VyQWdlbnRNYW5h
Z2VyOjpBdHRhY2hlZEFnZW50c01hcCogRGVidWdnZXJBZ2VudE1hbmFnZXI6OnNfYXR0YWNoZWRB
Z2VudHNNYXAgPSAwOworCit2b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpkZWJ1Z0F0dGFjaChE
ZWJ1Z2dlckFnZW50SW1wbCogZGVidWdnZXJBZ2VudCkKK3sKKyAgICBpZiAoIXNfYXR0YWNoZWRB
Z2VudHNNYXApIHsKKyAgICAgICAgc19hdHRhY2hlZEFnZW50c01hcCA9IG5ldyBBdHRhY2hlZEFn
ZW50c01hcCgpOworICAgICAgICB2ODo6RGVidWc6OlNldE1lc3NhZ2VIYW5kbGVyMigmRGVidWdn
ZXJBZ2VudE1hbmFnZXI6Om9uVjhEZWJ1Z01lc3NhZ2UpOworICAgICAgICB2ODo6RGVidWc6OlNl
dEhvc3REaXNwYXRjaEhhbmRsZXIoJkRlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpkZWJ1Z0hvc3REaXNw
YXRjaEhhbmRsZXIsIDEwMCAvKiBtcyAqLyk7CisgICAgfQorICAgIGludCBob3N0SWQgPSBkZWJ1
Z2dlckFnZW50LT53ZWJkZXZ0b29sc0FnZW50KCktPmhvc3RJZCgpOworICAgIEFTU0VSVChob3N0
SWQgIT0gMCk7CisgICAgc19hdHRhY2hlZEFnZW50c01hcC0+c2V0KGhvc3RJZCwgZGVidWdnZXJB
Z2VudCk7Cit9CisKK3ZvaWQgRGVidWdnZXJBZ2VudE1hbmFnZXI6OmRlYnVnRGV0YWNoKERlYnVn
Z2VyQWdlbnRJbXBsKiBkZWJ1Z2dlckFnZW50KQoreworICAgIGlmICghc19hdHRhY2hlZEFnZW50
c01hcCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpbnQgaG9zdElkID0gZGVidWdnZXJBZ2VudC0+d2ViZGV2dG9vbHNBZ2VudCgp
LT5ob3N0SWQoKTsKKyAgICBBU1NFUlQoc19hdHRhY2hlZEFnZW50c01hcC0+Z2V0KGhvc3RJZCkg
PT0gZGVidWdnZXJBZ2VudCk7CisgICAgYm9vbCBpc09uQnJlYWtwb2ludCA9IChmaW5kQWdlbnRG
b3JDdXJyZW50VjhDb250ZXh0KCkgPT0gZGVidWdnZXJBZ2VudCk7CisgICAgc19hdHRhY2hlZEFn
ZW50c01hcC0+cmVtb3ZlKGhvc3RJZCk7CisKKyAgICBpZiAoc19hdHRhY2hlZEFnZW50c01hcC0+
aXNFbXB0eSgpKSB7CisgICAgICAgIGRlbGV0ZSBzX2F0dGFjaGVkQWdlbnRzTWFwOworICAgICAg
ICBzX2F0dGFjaGVkQWdlbnRzTWFwID0gMDsKKyAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvIG5v
dCBlbXB0eSBoYW5kbGVycyB3aGlsZSBpbiBkaXNwYXRjaCAtIHdlIHNjaGVkdWxlCisgICAgICAg
IC8vIGNvbnRpbnVlIGFuZCBkbyByZW1vdmFsIG9uY2Ugd2UgYXJlIG91dCBvZiB0aGUgZGlzcGF0
Y2guIEFsc28gdGhlcmUgaXMKKyAgICAgICAgLy8gbm8gbmVlZCB0byBzZW5kIGNvbnRpbnVlIGNv
bW1hbmQgaW4gdGhpcyBjYXNlIHNpbmNlIHJlbW92aW5nIG1lc3NhZ2UKKyAgICAgICAgLy8gaGFu
ZGxlciB3aWxsIGNhdXNlIGRlYnVnZ2VyIHVubG9hZCBhbmQgYWxsIGJyZWFrcG9pbnRzIHdpbGwg
YmUgY2xlYXJlZC4KKyAgICAgICAgaWYgKCFzX2luSG9zdERpc3BhdGNoSGFuZGxlcikgeworICAg
ICAgICAgICAgdjg6OkRlYnVnOjpTZXRNZXNzYWdlSGFuZGxlcjIoMCk7CisgICAgICAgICAgICB2
ODo6RGVidWc6OlNldEhvc3REaXNwYXRjaEhhbmRsZXIoMCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgLy8gUmVtb3ZlIGFsbCBicmVha3BvaW50cyBzZXQgYnkgdGhlIGFnZW50Lgor
ICAgICAgU3RyaW5nIGNsZWFyQnJlYWtwb2ludEdyb3VwQ21kID0gU3RyaW5nOjpmb3JtYXQoCisg
ICAgICAgICAgIntcInNlcVwiOjEsXCJ0eXBlXCI6XCJyZXF1ZXN0XCIsXCJjb21tYW5kXCI6XCJj
bGVhcmJyZWFrcG9pbnRncm91cFwiLCIKKyAgICAgICAgICAgICAgIlwiYXJndW1lbnRzXCI6e1wi
Z3JvdXBJZFwiOiVkfX0iLAorICAgICAgICAgIGhvc3RJZCk7CisgICAgICBzZW5kQ29tbWFuZFRv
VjgoY2xlYXJCcmVha3BvaW50R3JvdXBDbWQsIG5ldyBDYWxsZXJJZFdyYXBwZXIoKSk7CisKKyAg
ICAgIGlmIChpc09uQnJlYWtwb2ludCkgeworICAgICAgICAgIC8vIEZvcmNlIGNvbnRpbnVlIGlm
IGRldGFjaCBoYXBwZW5lZCBpbiBuZXNzdGVkIG1lc3NhZ2UgbG9vcCB3aGlsZQorICAgICAgICAg
IC8vIGRlYnVnZ2VyIHdhcyBwYXVzZWQgb24gYSBicmVha3BvaW50KGFzIGxvbmcgYXMgdGhlcmUg
YXJlIG90aGVyCisgICAgICAgICAgLy8gYXR0YWNoZWQgYWdlbnRzIHY4IHdpbGwgd2FpdCBmb3Ig
ZXhwbGljaXQnY29udGludWUnIG1lc3NhZ2UpLgorICAgICAgICAgIHNlbmRDb250aW51ZUNvbW1h
bmRUb1Y4KCk7CisgICAgICB9CisgICAgfQorfQorCit2b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2Vy
OjpvblY4RGVidWdNZXNzYWdlKGNvbnN0IHY4OjpEZWJ1Zzo6TWVzc2FnZSYgbWVzc2FnZSkKK3sK
KyAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CisgICAgdjg6OlN0cmluZzo6VmFsdWUgdmFsdWUo
bWVzc2FnZS5HZXRKU09OKCkpOworICAgIFN0cmluZyBvdXQocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBVQ2hhcio+KCp2YWx1ZSksIHZhbHVlLmxlbmd0aCgpKTsKKworICAgIC8vIElmIGNhbGxlckRh
dGEgaXMgbm90IDAgdGhlIG1lc3NhZ2UgaXMgYSByZXNwb25zZSB0byBhIGRlYnVnZ2VyIGNvbW1h
bmQuCisgICAgaWYgKHY4OjpEZWJ1Zzo6Q2xpZW50RGF0YSogY2FsbGVyRGF0YSA9IG1lc3NhZ2Uu
R2V0Q2xpZW50RGF0YSgpKSB7CisgICAgICAgIENhbGxlcklkV3JhcHBlciogd3JhcHBlciA9IHN0
YXRpY19jYXN0PENhbGxlcklkV3JhcHBlcio+KGNhbGxlckRhdGEpOworICAgICAgICBpZiAod3Jh
cHBlci0+Y2FsbGVySXNNYW5hbmFnZXIoKSkgeworICAgICAgICAgICAgLy8gSnVzdCBpZ25vcmUg
bWVzc2FnZXMgc2VudCBieSB0aGlzIG1hbmFnZXIuCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgRGVidWdnZXJBZ2VudEltcGwqIGRlYnVnZ2VyQWdlbnQgPSBkZWJ1Z2dl
ckFnZW50Rm9ySG9zdElkKHdyYXBwZXItPmNhbGxlcklkKCkpOworICAgICAgICBpZiAoZGVidWdn
ZXJBZ2VudCkKKyAgICAgICAgICAgIGRlYnVnZ2VyQWdlbnQtPmRlYnVnZ2VyT3V0cHV0KG91dCk7
CisgICAgICAgIGVsc2UgaWYgKCFtZXNzYWdlLldpbGxTdGFydFJ1bm5pbmcoKSkgeworICAgICAg
ICAgICAgLy8gQXV0b2NvbnRpbnVlIGV4ZWN1dGlvbiBpZiB0aGVyZSBpcyBubyBoYW5kbGVyLgor
ICAgICAgICAgICAgc2VuZENvbnRpbnVlQ29tbWFuZFRvVjgoKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm47CisgICAgfSAvLyBPdGhlcndpc2UgaXQncyBhbiBldmVudCBtZXNzYWdlLgorICAg
IEFTU0VSVChtZXNzYWdlLklzRXZlbnQoKSk7CisKKyAgICAvLyBJZ25vcmUgdW5zdXBwb3J0ZWQg
ZXZlbnQgdHlwZXMuCisgICAgaWYgKG1lc3NhZ2UuR2V0RXZlbnQoKSAhPSB2ODo6QWZ0ZXJDb21w
aWxlICYmCisgICAgICAgIG1lc3NhZ2UuR2V0RXZlbnQoKSAhPSB2ODo6QnJlYWsgJiYKKyAgICAg
ICAgbWVzc2FnZS5HZXRFdmVudCgpICE9IHY4OjpFeGNlcHRpb24pIHsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBtZXNzYWdl
LkdldEV2ZW50Q29udGV4dCgpOworICAgIC8vIElmIHRoZSBjb250ZXh0IGlzIGZyb20gb25lIG9m
IHRoZSBpbnBlY3RlZCB0YWJzIGl0IHNob3VsZCBoYXZlIGl0cyBjb250ZXh0CisgICAgLy8gZGF0
YS4KKyAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gVW5rbm93biBjb250
ZXh0LCBza2lwIHRoZSBldmVudC4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChz
X2luVXRpbGl0eUNvbnRleHQgJiYgbWVzc2FnZS5HZXRFdmVudCgpID09IHY4OjpCcmVhaykgewor
ICAgICAgICAvLyBUaGlzIG1heSBoYXBwZW4gd2hlbiB0d28gdGFicyBhcmUgYmVpbmcgZGVidWdn
ZWQgaW4gdGhlIHNhbWUgcHJvY2Vzcy4KKyAgICAgICAgLy8gU3VwcG9zZSB0aGF0IGZpcnN0IGRl
YnVnZ2VyIGlzIHBhdWVzZWQgb24gYW4gZXhjZXB0aW9uLiBJdCB3aWxsIHJ1bgorICAgICAgICAv
LyBuZXN0ZWQgTWVzc2FnZUxvb3Agd2hpY2ggbWF5IHByb2Nlc3MgQnJlYWsgcmVxdWVzdCBmcm9t
IHRoZSBzZWNvbmQKKyAgICAgICAgLy8gZGVidWdnZXIuCisgICAgICAgIHNfZGVidWdCcmVha0Rl
bGF5ZWQgPSB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIHRoZSBjb250ZXh0IGlz
IGZyb20gb25lIG9mIHRoZSBpbnBlY3RlZCB0YWJzIG9yIGluamVjdGVkIGV4dGVuc2lvbgorICAg
ICAgICAvLyBzY3JpcHRzIGl0IG11c3QgaGF2ZSBob3N0SWQgaW4gdGhlIGRhdGEgZmllbGQuCisg
ICAgICAgIGludCBob3N0SWQgPSBXZWJDb3JlOjpWOFByb3h5Ojpjb250ZXh0RGVidWdJZChjb250
ZXh0KTsKKyAgICAgICAgaWYgKGhvc3RJZCAhPSAtMSkgeworICAgICAgICAgICAgRGVidWdnZXJB
Z2VudEltcGwqIGFnZW50ID0gZGVidWdnZXJBZ2VudEZvckhvc3RJZChob3N0SWQpOworICAgICAg
ICAgICAgaWYgKGFnZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKGFnZW50LT5hdXRvQ29udGlu
dWVPbkV4Y2VwdGlvbigpCisgICAgICAgICAgICAgICAgICAgICYmIG1lc3NhZ2UuR2V0RXZlbnQo
KSA9PSB2ODo6RXhjZXB0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIHNlbmRDb250aW51ZUNv
bW1hbmRUb1Y4KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBhZ2VudC0+ZGVidWdnZXJPdXRwdXQob3V0KTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAoIW1lc3NhZ2UuV2lsbFN0YXJ0UnVubmluZygpKSB7CisgICAgICAgIC8vIEF1dG9jb250
aW51ZSBleGVjdXRpb24gb24gYnJlYWsgYW5kIGV4Y2VwdGlvbiAgZXZlbnRzIGlmIHRoZXJlIGlz
IG5vCisgICAgICAgIC8vIGhhbmRsZXIuCisgICAgICAgIHNlbmRDb250aW51ZUNvbW1hbmRUb1Y4
KCk7CisgICAgfQorfQorCit2b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpwYXVzZVNjcmlwdCgp
Cit7CisgICAgaWYgKHNfaW5VdGlsaXR5Q29udGV4dCkKKyAgICAgICAgc19kZWJ1Z0JyZWFrRGVs
YXllZCA9IHRydWU7CisgICAgZWxzZQorICAgICAgICB2ODo6RGVidWc6OkRlYnVnQnJlYWsoKTsK
K30KKwordm9pZCBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6ZXhlY3V0ZURlYnVnZ2VyQ29tbWFuZChj
b25zdCBTdHJpbmcmIGNvbW1hbmQsIGludCBjYWxsZXJJZCkKK3sKKyAgICBzZW5kQ29tbWFuZFRv
VjgoY29tbWFuZCwgbmV3IENhbGxlcklkV3JhcHBlcihjYWxsZXJJZCkpOworfQorCit2b2lkIERl
YnVnZ2VyQWdlbnRNYW5hZ2VyOjpzZXRNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcihXZWJEZXZU
b29sc0FnZW50OjpNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciBoYW5kbGVyKQoreworICAgIHNf
bWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIgPSBoYW5kbGVyOworfQorCit2b2lkIERlYnVnZ2Vy
QWdlbnRNYW5hZ2VyOjpzZXRIb3N0SWQoV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSwgaW50IGhvc3RJ
ZCkKK3sKKyAgICBBU1NFUlQoaG9zdElkID4gMCk7CisgICAgV2ViQ29yZTo6VjhQcm94eSogcHJv
eHkgPSBXZWJDb3JlOjpWOFByb3h5OjpyZXRyaWV2ZSh3ZWJmcmFtZS0+ZnJhbWUoKSk7CisgICAg
aWYgKHByb3h5KQorICAgICAgICBwcm94eS0+c2V0Q29udGV4dERlYnVnSWQoaG9zdElkKTsKK30K
Kwordm9pZCBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6b25XZWJWaWV3Q2xvc2VkKFdlYlZpZXdJbXBs
KiB3ZWJ2aWV3KQoreworICAgIGlmIChzX3BhZ2VEZWZlcnJlcnMuY29udGFpbnMod2Vidmlldykp
IHsKKyAgICAgICAgZGVsZXRlIHNfcGFnZURlZmVycmVycy5nZXQod2Vidmlldyk7CisgICAgICAg
IHNfcGFnZURlZmVycmVycy5yZW1vdmUod2Vidmlldyk7CisgICAgfQorfQorCit2b2lkIERlYnVn
Z2VyQWdlbnRNYW5hZ2VyOjpvbk5hdmlnYXRlKCkKK3sKKyAgICBpZiAoc19pbkhvc3REaXNwYXRj
aEhhbmRsZXIpCisgICAgICAgIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpzZW5kQ29udGludWVDb21t
YW5kVG9WOCgpOworfQorCit2b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpzZW5kQ29tbWFuZFRv
VjgoY29uc3QgU3RyaW5nJiBjbWQsIHY4OjpEZWJ1Zzo6Q2xpZW50RGF0YSogZGF0YSkKK3sKKyAg
ICB2ODo6RGVidWc6OlNlbmRDb21tYW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDE2X3Qq
PihjbWQuY2hhcmFjdGVycygpKSwgY21kLmxlbmd0aCgpLCBkYXRhKTsKK30KKwordm9pZCBEZWJ1
Z2dlckFnZW50TWFuYWdlcjo6c2VuZENvbnRpbnVlQ29tbWFuZFRvVjgoKQoreworICAgIFN0cmlu
ZyBjb250aW51ZUNtZCgie1wic2VxXCI6MSxcInR5cGVcIjpcInJlcXVlc3RcIixcImNvbW1hbmRc
IjpcImNvbnRpbnVlXCJ9Iik7CisgICAgc2VuZENvbW1hbmRUb1Y4KGNvbnRpbnVlQ21kLCBuZXcg
Q2FsbGVySWRXcmFwcGVyKCkpOworfQorCitEZWJ1Z2dlckFnZW50SW1wbCogRGVidWdnZXJBZ2Vu
dE1hbmFnZXI6OmZpbmRBZ2VudEZvckN1cnJlbnRWOENvbnRleHQoKQoreworICAgIGlmICghc19h
dHRhY2hlZEFnZW50c01hcCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQVNTRVJUKCFzX2F0dGFj
aGVkQWdlbnRzTWFwLT5pc0VtcHR5KCkpOworCisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0g
V2ViQ29yZTo6VjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckVudGVyZWRDb250ZXh0KCk7CisgICAg
aWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9
IGZyYW1lLT5wYWdlKCk7CisgICAgZm9yIChBdHRhY2hlZEFnZW50c01hcDo6aXRlcmF0b3IgaXQg
PSBzX2F0dGFjaGVkQWdlbnRzTWFwLT5iZWdpbigpOyBpdCAhPSBzX2F0dGFjaGVkQWdlbnRzTWFw
LT5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnNlY29uZC0+cGFnZSgpID09IHBhZ2Up
CisgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9
CisKK0RlYnVnZ2VyQWdlbnRJbXBsKiBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6ZGVidWdnZXJBZ2Vu
dEZvckhvc3RJZChpbnQgaG9zdElkKQoreworICAgIGlmICghc19hdHRhY2hlZEFnZW50c01hcCkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHNfYXR0YWNoZWRBZ2VudHNNYXAtPmdldCho
b3N0SWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudE1hbmFnZXIuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
RGVidWdnZXJBZ2VudE1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5mZjI4ODA4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dl
ckFnZW50TWFuYWdlci5oCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEZWJ1Z2dlckFnZW50TWFu
YWdlcl9oCisjZGVmaW5lIERlYnVnZ2VyQWdlbnRNYW5hZ2VyX2gKKworI2luY2x1ZGUgIldlYkRl
dlRvb2xzQWdlbnQuaCIKKyNpbmNsdWRlIDx2OC1kZWJ1Zy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKyAgICBjbGFzcyBQYWdlR3JvdXBMb2FkRGVmZXJyZXI7CisgICAgY2xhc3MgU3RyaW5nOwor
fQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworICAgIGNsYXNzIERlYnVnZ2VyQWdlbnRJbXBsOwor
ICAgIGNsYXNzIERpY3Rpb25hcnlWYWx1ZTsKKyAgICBjbGFzcyBXZWJGcmFtZUltcGw7CisgICAg
Y2xhc3MgV2ViVmlld0ltcGw7CisKKy8vIFRoZXJlIGlzIHNpbmdsZSB2OCBpbnN0YW5jZSBwZXIg
cmVuZGVyIHByb2Nlc3MuIEFsc28gdGhlcmUgbWF5IGJlIHNldmVyYWwKKy8vIFJlbmRlclZpZXdz
IGFuZCBjb25zZXF1ZW50bHkgZGV2dG9vbHMgYWdlbnRzIGluIHRoZSBwcm9jZXNzIHRoYXQgd2Fu
dCB0byB0YWxrCisvLyB0byB0aGUgdjggZGVidWdnZXIuIFRoaXMgY2xhc3MgY29vcmRpbmF0ZXMg
Y29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBkZWJ1ZworLy8gYWdlbnRzIGFuZCB2OCBkZWJ1Z2dl
ci4gSXQgd2lsbCBzZXQgZGVidWcgb3V0cHV0IGhhbmRsZXIgYXMgbG9uZyBhcyBhdCBsZWFzdAor
Ly8gb25lIGRlYnVnZ2VyIGFnZW50IGlzIGF0dGFjaGVkIGFuZCByZW1vdmUgaXQgd2hlbiBsYXN0
IGRlYnVnZ2VyIGFnZW50IGlzCisvLyBkZXRhY2hlZC4gV2hlbiBtZXNzYWdlIGlzIHJlY2VpdmVk
IGZyb20gZGVidWdnZXIgaXQgd2lsbCByb3V0ZSBpdCB0byB0aGUKKy8vIHJpZ2h0IGRlYnVnZ2Vy
IGFnZW50IGlmIHRoZXJlIGlzIG9uZSBvdGhlcndpc2UgdGhlIG1lc3NhZ2Ugd2lsbCBiZSBpZ25v
cmVkLgorLy8KKy8vIHY4IG1heSBzZW5kIGEgbWVzc2FnZShlLmcuIGV4Y2VwdGlvbiBldmVudCkg
YWZ0ZXIgd2hpY2ggaXQKKy8vIHdvdWxkIGV4cGVjdCBzb21lIGFjdGlvbnMgZnJvbSB0aGUgaGFu
ZGxlci4gSWYgdGhlcmUgaXMgbm8gYXBwcm9wcmlhdGUKKy8vIGRlYnVnZ2VyIGFnZW50IHRvIGhh
bmRsZSBzdWNoIG1lc3NhZ2VzIHRoZSBtYW5hZ2VyIHdpbGwgcGVyZm9ybSB0aGUgYWN0aW9uCisv
LyBpdHNlbGYsIG90aGVyd2lzZSB2OCBtYXkgaGFuZyB3YWl0aW5nIGZvciB0aGUgYWN0aW9uLgor
Y2xhc3MgRGVidWdnZXJBZ2VudE1hbmFnZXIgOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGlj
OgorICAgIHN0YXRpYyB2b2lkIGRlYnVnQXR0YWNoKERlYnVnZ2VyQWdlbnRJbXBsKiBkZWJ1Z2dl
ckFnZW50KTsKKyAgICBzdGF0aWMgdm9pZCBkZWJ1Z0RldGFjaChEZWJ1Z2dlckFnZW50SW1wbCog
ZGVidWdnZXJBZ2VudCk7CisgICAgc3RhdGljIHZvaWQgcGF1c2VTY3JpcHQoKTsKKyAgICBzdGF0
aWMgdm9pZCBleGVjdXRlRGVidWdnZXJDb21tYW5kKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgY29t
bWFuZCwgaW50IGNhbGxlcklkKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRNZXNzYWdlTG9vcERpc3Bh
dGNoSGFuZGxlcihXZWJEZXZUb29sc0FnZW50OjpNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciBo
YW5kbGVyKTsKKworICAgIC8vIFNldHMgfGhvc3RJZHwgYXMgdGhlIGZyYW1lIGNvbnRleHQgZGF0
YS4gVGhpcyBpZCBpcyB1c2VkIHRvIGZpbHRlciBzY3JpcHRzCisgICAgLy8gcmVsYXRlZCB0byB0
aGUgaW5zcGVjdGVkIHBhZ2UuCisgICAgc3RhdGljIHZvaWQgc2V0SG9zdElkKFdlYkZyYW1lSW1w
bCogd2ViZnJhbWUsIGludCBob3N0SWQpOworCisgICAgc3RhdGljIHZvaWQgb25XZWJWaWV3Q2xv
c2VkKFdlYlZpZXdJbXBsKiB3ZWJ2aWV3KTsKKworICAgIHN0YXRpYyB2b2lkIG9uTmF2aWdhdGUo
KTsKKworICAgIGNsYXNzIFV0aWxpdHlDb250ZXh0U2NvcGUgOiBwdWJsaWMgTm9uY29weWFibGUg
eworICAgIHB1YmxpYzoKKyAgICAgICAgVXRpbGl0eUNvbnRleHRTY29wZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIEFTU0VSVCghc19pblV0aWxpdHlDb250ZXh0KTsKKyAgICAgICAgICAgIHNf
aW5VdGlsaXR5Q29udGV4dCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgflV0aWxpdHlDb250
ZXh0U2NvcGUoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc19kZWJ1Z0JyZWFrRGVsYXll
ZCkgeworICAgICAgICAgICAgICB2ODo6RGVidWc6OkRlYnVnQnJlYWsoKTsKKyAgICAgICAgICAg
ICAgc19kZWJ1Z0JyZWFrRGVsYXllZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgc19pblV0aWxpdHlDb250ZXh0ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9OworCitwcml2
YXRlOgorICAgIERlYnVnZ2VyQWdlbnRNYW5hZ2VyKCk7CisgICAgfkRlYnVnZ2VyQWdlbnRNYW5h
Z2VyKCk7CisKKyAgICBzdGF0aWMgdm9pZCBkZWJ1Z0hvc3REaXNwYXRjaEhhbmRsZXIoKTsKKyAg
ICBzdGF0aWMgdm9pZCBvblY4RGVidWdNZXNzYWdlKGNvbnN0IHY4OjpEZWJ1Zzo6TWVzc2FnZSYg
bWVzc2FnZSk7CisgICAgc3RhdGljIHZvaWQgc2VuZENvbW1hbmRUb1Y4KGNvbnN0IFdlYkNvcmU6
OlN0cmluZyYgY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ODo6RGVidWc6
OkNsaWVudERhdGEqIGRhdGEpOworICAgIHN0YXRpYyB2b2lkIHNlbmRDb250aW51ZUNvbW1hbmRU
b1Y4KCk7CisKKyAgICBzdGF0aWMgRGVidWdnZXJBZ2VudEltcGwqIGZpbmRBZ2VudEZvckN1cnJl
bnRWOENvbnRleHQoKTsKKyAgICBzdGF0aWMgRGVidWdnZXJBZ2VudEltcGwqIGRlYnVnZ2VyQWdl
bnRGb3JIb3N0SWQoaW50IGhvc3RJZCk7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBEZWJ1
Z2dlckFnZW50SW1wbCo+IEF0dGFjaGVkQWdlbnRzTWFwOworICAgIHN0YXRpYyBBdHRhY2hlZEFn
ZW50c01hcCogc19hdHRhY2hlZEFnZW50c01hcDsKKworICAgIHN0YXRpYyBXZWJEZXZUb29sc0Fn
ZW50OjpNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciBzX21lc3NhZ2VMb29wRGlzcGF0Y2hIYW5k
bGVyOworICAgIHN0YXRpYyBib29sIHNfaW5Ib3N0RGlzcGF0Y2hIYW5kbGVyOworICAgIHR5cGVk
ZWYgSGFzaE1hcDxXZWJWaWV3SW1wbCosIFdlYkNvcmU6OlBhZ2VHcm91cExvYWREZWZlcnJlcio+
IERlZmVycmVyc01hcDsKKyAgICBzdGF0aWMgRGVmZXJyZXJzTWFwIHNfcGFnZURlZmVycmVyczsK
KworICAgIHN0YXRpYyBib29sIHNfaW5VdGlsaXR5Q29udGV4dDsKKyAgICBzdGF0aWMgYm9vbCBz
X2RlYnVnQnJlYWtEZWxheWVkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9EZXZUb29sc1JQQy5oIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9EZXZUb29sc1JQQy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjIzOTUyZGQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Rl
dlRvb2xzUlBDLmgKQEAgLTAsMCArMSwzOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBEZXZUb29scyBSUEMgc3Vic3lzdGVtIGlz
IGEgc2ltcGxlIHN0cmluZyBzZXJpYWxpemF0aW9uLWJhc2VkIHJwYworLy8gaW1wbGVtZW50YXRp
b24uIFRoZSBjbGllbnQgaXMgcmVzcG9uc2libGUgZm9yIGRlZmluaW5nIHRoZSBScGMtZW5hYmxl
ZAorLy8gaW50ZXJmYWNlIGluIHRlcm1zIG9mIGl0cyBtYWNyb3M6CisvLworLy8gI2RlZmluZSBN
WUFQSV9TVFJVQ1QoTUVUSE9EMCwgTUVUSE9EMSwgTUVUSE9EMiwgTUVUSE9EMykKKy8vICAgTUVU
SE9EMChNZXRob2QxKQorLy8gICBNRVRIT0QxKE1ldGhvZDMsIGludCkKKy8vIChzbmlwcGV0IGFi
b3ZlIHNob3VsZCBiZSBtdWx0aWxpbmUgbWFjcm8sIGFkZCB0cmFpbGluZyBiYWNrc2xhc2hlcykK
Ky8vCisvLyBERUZJTkVfUlBDX0NMQVNTKE15QXBpLCBNWUFQSV9TVFJVQ1QpCisvLworLy8gVGhl
IHNuaXBwZXQgYWJvdmUgd2lsbCBnZW5lcmF0ZSB0aHJlZSBjbGFzc2VzOiBNeUFwaSwgTXlBcGlT
dHViIGFuZAorLy8gTXlBcGlEaXNwYXRjaC4KKy8vCisvLyAxLiBGb3IgZWFjaCBtZXRob2QgZGVm
aW5lZCBpbiB0aGUgbWFyY28gTXlBcGkgd2lsbCBoYXZlIGEKKy8vIHB1cmUgdmlydHVhbCBmdW5j
dGlvbiBnZW5lcmF0ZWQsIHNvIHRoYXQgTXlBcGkgd291bGQgbG9vayBsaWtlOgorLy8KKy8vIGNs
YXNzIE15QXBpIHsKKy8vIHByaXZhdGU6CisvLyAgICAgTXlBcGkoKSB7IH0KKy8vICAgICB+TXlB
cGkoKSB7IH0KKy8vICAgICB2aXJ0dWFsIHZvaWQgbWV0aG9kMSgpID0gMDsKKy8vICAgICB2aXJ0
dWFsIHZvaWQgbWV0aG9kMigKKy8vICAgICAgICAgaW50IHBhcmFtMSwKKy8vICAgICAgICAgY29u
c3QgU3RyaW5nJiBwYXJhbTIsCisvLyAgICAgICAgIGNvbnN0IFZhbHVlJiBwYXJhbTMpID0gMDsK
Ky8vICAgICB2aXJ0dWFsIHZvaWQgbWV0aG9kMyhpbnQgcGFyYW0xKSA9IDA7CisvLyB9OworLy8K
Ky8vIDIuIE15QXBpU3R1YiB3aWxsIGltcGxlbWVudCBNeUFwaSBpbnRlcmZhY2UgYW5kIHdvdWxk
IHNlcmlhbGl6ZSBhbGwgY2FsbHMKKy8vIGludG8gdGhlIHN0cmluZy1iYXNlZCBjYWxscyBvZiB0
aGUgdW5kZXJseWluZyB0cmFuc3BvcnQ6CisvLworLy8gRGV2VG9vbHNSUEM6OkRlbGVnYXRlKiB0
cmFuc3BvcnQ7CisvLyBteUFwaSA9IG5ldyBNeUFwaVN0dWIodHJhbnNwb3J0KTsKKy8vIG15QXBp
LT5tZXRob2QxKCk7CisvLyBteUFwaS0+bWV0aG9kMygyKTsKKy8vCisvLyAzLiBNeUFwaURlbGVn
YXRlIGlzIGNhcGFibGUgb2YgZGlzcGF0Y2hpbmcgdGhlIGNhbGxzIGFuZCBjb252ZXJ0IHRoZW0g
dG8gdGhlCisvLyBjYWxscyB0byB0aGUgdW5kZXJseWluZyBNeUFwaSBtZXRob2RzOgorLy8KKy8v
IE15QXBpKiByZWFsT2JqZWN0OworLy8gTXlBcGlEaXNwYXRjaDo6ZGlzcGF0Y2gocmVhbE9iamVj
dCwgcmF3U3RyaW5nQ2FsbEdlbmVyYXRlZEJ5U3R1Yik7CisvLworLy8gd2lsbCBtYWtlIGNvcnJl
c3BvbmRpbmcgY2FsbHMgdG8gdGhlIHJlYWwgb2JqZWN0LgorCisjaWZuZGVmIERldlRvb2xzUlBD
X2gKKyNkZWZpbmUgRGV2VG9vbHNSUENfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KyNpbmNsdWRlICJWZWN0b3IuaCIKKyNpbmNsdWRlICJXZWJEZXZUb29sc01lc3NhZ2VEYXRhLmgi
CisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
ICAgIGNsYXNzIFN0cmluZzsKK30KKwordXNpbmcgV2ViQ29yZTo6U3RyaW5nOwordXNpbmcgV1RG
OjpWZWN0b3I7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBSUEMgZGlzcGF0Y2ggbWFjcm8K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBScGNUeXBlVHJhaXQgeworICAgIHR5cGVk
ZWYgVCBBcGlUeXBlOworfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IFJwY1R5cGVUcmFpdDxib29s
PiB7CisgICAgdHlwZWRlZiBib29sIEFwaVR5cGU7CisgICAgc3RhdGljIGJvb2wgcGFyc2UoY29u
c3QgV2ViQ29yZTo6U3RyaW5nJiB0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHQgPT0gInRydWUi
OworICAgIH0KKyAgICBzdGF0aWMgV2ViQ29yZTo6U3RyaW5nIHRvU3RyaW5nKGJvb2wgYikKKyAg
ICB7CisgICAgICAgIHJldHVybiBiID8gInRydWUiIDogImZhbHNlIjsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+CitzdHJ1Y3QgUnBjVHlwZVRyYWl0PGludD4geworICAgIHR5cGVkZWYgaW50IEFw
aVR5cGU7CisgICAgc3RhdGljIGludCBwYXJzZShjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHQpCisg
ICAgeworICAgICAgICBib29sIHN1Y2Nlc3M7CisgICAgICAgIGludCBpID0gdC50b0ludFN0cmlj
dCgmc3VjY2Vzcyk7CisgICAgICAgIEFTU0VSVChzdWNjZXNzKTsKKyAgICAgICAgcmV0dXJuIGk7
CisgICAgfQorICAgIHN0YXRpYyBXZWJDb3JlOjpTdHJpbmcgdG9TdHJpbmcoaW50IGkpCisgICAg
eworICAgICAgICByZXR1cm4gV2ViQ29yZTo6U3RyaW5nOjpudW1iZXIoaSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8Pgorc3RydWN0IFJwY1R5cGVUcmFpdDxTdHJpbmc+IHsKKyAgICB0eXBlZGVm
IGNvbnN0IFN0cmluZyYgQXBpVHlwZTsKKyAgICBzdGF0aWMgU3RyaW5nIHBhcnNlKGNvbnN0IFdl
YkNvcmU6OlN0cmluZyYgdCkKKyAgICB7CisgICAgICAgIHJldHVybiB0OworICAgIH0KKyAgICBz
dGF0aWMgV2ViQ29yZTo6U3RyaW5nIHRvU3RyaW5nKGNvbnN0IFN0cmluZyYgdCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0OworICAgIH0KK307CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFJQQyBBcGkgbWV0aG9kIGRlY2xhcmF0
aW9ucworCisjZGVmaW5lIFRPT0xTX1JQQ19BUElfTUVUSE9EMChNZXRob2QpIFwKKyAgICB2aXJ0
dWFsIHZvaWQgTWV0aG9kKCkgPSAwOworCisjZGVmaW5lIFRPT0xTX1JQQ19BUElfTUVUSE9EMShN
ZXRob2QsIFQxKSBcCisgICAgdmlydHVhbCB2b2lkIE1ldGhvZChScGNUeXBlVHJhaXQ8VDE+OjpB
cGlUeXBlIHQxKSA9IDA7CisKKyNkZWZpbmUgVE9PTFNfUlBDX0FQSV9NRVRIT0QyKE1ldGhvZCwg
VDEsIFQyKSBcCisgICAgdmlydHVhbCB2b2lkIE1ldGhvZChScGNUeXBlVHJhaXQ8VDE+OjpBcGlU
eXBlIHQxLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBScGNUeXBlVHJhaXQ8VDI+OjpBcGlU
eXBlIHQyKSA9IDA7CisKKyNkZWZpbmUgVE9PTFNfUlBDX0FQSV9NRVRIT0QzKE1ldGhvZCwgVDEs
IFQyLCBUMykgXAorICAgIHZpcnR1YWwgdm9pZCBNZXRob2QoUnBjVHlwZVRyYWl0PFQxPjo6QXBp
VHlwZSB0MSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgUnBjVHlwZVRyYWl0PFQyPjo6QXBp
VHlwZSB0MiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgUnBjVHlwZVRyYWl0PFQzPjo6QXBp
VHlwZSB0MykgPSAwOworCisjZGVmaW5lIFRPT0xTX1JQQ19BUElfTUVUSE9ENChNZXRob2QsIFQx
LCBUMiwgVDMsIFQ0KSBcCisgICAgdmlydHVhbCB2b2lkIE1ldGhvZChScGNUeXBlVHJhaXQ8VDE+
OjpBcGlUeXBlIHQxLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBScGNUeXBlVHJhaXQ8VDI+
OjpBcGlUeXBlIHQyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBScGNUeXBlVHJhaXQ8VDM+
OjpBcGlUeXBlIHQzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBScGNUeXBlVHJhaXQ8VDQ+
OjpBcGlUeXBlIHQ0KSA9IDA7CisKKyNkZWZpbmUgVE9PTFNfUlBDX0FQSV9NRVRIT0Q1KE1ldGhv
ZCwgVDEsIFQyLCBUMywgVDQsIFQ1KSBcCisgICAgdmlydHVhbCB2b2lkIE1ldGhvZChScGNUeXBl
VHJhaXQ8VDE+OjpBcGlUeXBlIHQxLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBScGNUeXBl
VHJhaXQ8VDI+OjpBcGlUeXBlIHQyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBScGNUeXBl
VHJhaXQ8VDM+OjpBcGlUeXBlIHQzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBScGNUeXBl
VHJhaXQ8VDQ+OjpBcGlUeXBlIHQ0LCBcCisgICAgICAgICAgICAgICAgICAgICAgICBScGNUeXBl
VHJhaXQ8VDU+OjpBcGlUeXBlIHQ1KSA9IDA7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFJQQyBzdHViIG1ldGhvZCBpbXBsZW1l
bnRhdGlvbnMKKworI2RlZmluZSBUT09MU19SUENfU1RVQl9NRVRIT0QwKE1ldGhvZCkgXAorICAg
IHZpcnR1YWwgdm9pZCBNZXRob2QoKSB7IFwKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gYXJnczsg
XAorICAgICAgICB0aGlzLT5zZW5kUnBjTWVzc2FnZShtX2NsYXNzTmFtZSwgI01ldGhvZCwgYXJn
cyk7IFwKKyAgICB9CisKKyNkZWZpbmUgVE9PTFNfUlBDX1NUVUJfTUVUSE9EMShNZXRob2QsIFQx
KSBcCisgICAgdmlydHVhbCB2b2lkIE1ldGhvZChScGNUeXBlVHJhaXQ8VDE+OjpBcGlUeXBlIHQx
KSB7IFwKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gYXJncygxKTsgXAorICAgICAgICBhcmdzWzBd
ID0gUnBjVHlwZVRyYWl0PFQxPjo6dG9TdHJpbmcodDEpOyBcCisgICAgICAgIHRoaXMtPnNlbmRS
cGNNZXNzYWdlKG1fY2xhc3NOYW1lLCAjTWV0aG9kLCBhcmdzKTsgXAorICAgIH0KKworI2RlZmlu
ZSBUT09MU19SUENfU1RVQl9NRVRIT0QyKE1ldGhvZCwgVDEsIFQyKSBcCisgICAgdmlydHVhbCB2
b2lkIE1ldGhvZChScGNUeXBlVHJhaXQ8VDE+OjpBcGlUeXBlIHQxLCBcCisgICAgICAgICAgICAg
ICAgICAgICAgICBScGNUeXBlVHJhaXQ8VDI+OjpBcGlUeXBlIHQyKSB7IFwKKyAgICAgICAgVmVj
dG9yPFN0cmluZz4gYXJncygyKTsgXAorICAgICAgICBhcmdzWzBdID0gUnBjVHlwZVRyYWl0PFQx
Pjo6dG9TdHJpbmcodDEpOyBcCisgICAgICAgIGFyZ3NbMV0gPSBScGNUeXBlVHJhaXQ8VDI+Ojp0
b1N0cmluZyh0Mik7IFwKKyAgICAgICAgdGhpcy0+c2VuZFJwY01lc3NhZ2UobV9jbGFzc05hbWUs
ICNNZXRob2QsIGFyZ3MpOyBcCisgICAgfQorCisjZGVmaW5lIFRPT0xTX1JQQ19TVFVCX01FVEhP
RDMoTWV0aG9kLCBUMSwgVDIsIFQzKSBcCisgICAgdmlydHVhbCB2b2lkIE1ldGhvZChScGNUeXBl
VHJhaXQ8VDE+OjpBcGlUeXBlIHQxLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBScGNUeXBl
VHJhaXQ8VDI+OjpBcGlUeXBlIHQyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBScGNUeXBl
VHJhaXQ8VDM+OjpBcGlUeXBlIHQzKSB7IFwKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gYXJncygz
KTsgXAorICAgICAgICBhcmdzWzBdID0gUnBjVHlwZVRyYWl0PFQxPjo6dG9TdHJpbmcodDEpOyBc
CisgICAgICAgIGFyZ3NbMV0gPSBScGNUeXBlVHJhaXQ8VDI+Ojp0b1N0cmluZyh0Mik7IFwKKyAg
ICAgICAgYXJnc1syXSA9IFJwY1R5cGVUcmFpdDxUMz46OnRvU3RyaW5nKHQzKTsgXAorICAgICAg
ICB0aGlzLT5zZW5kUnBjTWVzc2FnZShtX2NsYXNzTmFtZSwgI01ldGhvZCwgYXJncyk7IFwKKyAg
ICB9CisKKyNkZWZpbmUgVE9PTFNfUlBDX1NUVUJfTUVUSE9ENChNZXRob2QsIFQxLCBUMiwgVDMs
IFQ0KSBcCisgICAgdmlydHVhbCB2b2lkIE1ldGhvZChScGNUeXBlVHJhaXQ8VDE+OjpBcGlUeXBl
IHQxLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBScGNUeXBlVHJhaXQ8VDI+OjpBcGlUeXBl
IHQyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBScGNUeXBlVHJhaXQ8VDM+OjpBcGlUeXBl
IHQzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBScGNUeXBlVHJhaXQ8VDQ+OjpBcGlUeXBl
IHQ0KSB7IFwKKyAgICAgICAgVmVjdG9yPFN0cmluZz4gYXJncyg0KTsgXAorICAgICAgICBhcmdz
WzBdID0gUnBjVHlwZVRyYWl0PFQxPjo6dG9TdHJpbmcodDEpOyBcCisgICAgICAgIGFyZ3NbMV0g
PSBScGNUeXBlVHJhaXQ8VDI+Ojp0b1N0cmluZyh0Mik7IFwKKyAgICAgICAgYXJnc1syXSA9IFJw
Y1R5cGVUcmFpdDxUMz46OnRvU3RyaW5nKHQzKTsgXAorICAgICAgICBhcmdzWzNdID0gUnBjVHlw
ZVRyYWl0PFQ0Pjo6dG9TdHJpbmcodDQpOyBcCisgICAgICAgIHRoaXMtPnNlbmRScGNNZXNzYWdl
KG1fY2xhc3NOYW1lLCAjTWV0aG9kLCBhcmdzKTsgXAorICAgIH0KKworI2RlZmluZSBUT09MU19S
UENfU1RVQl9NRVRIT0Q1KE1ldGhvZCwgVDEsIFQyLCBUMywgVDQsIFQ1KSBcCisgICAgdmlydHVh
bCB2b2lkIE1ldGhvZChScGNUeXBlVHJhaXQ8VDE+OjpBcGlUeXBlIHQxLCBcCisgICAgICAgICAg
ICAgICAgICAgICAgICBScGNUeXBlVHJhaXQ8VDI+OjpBcGlUeXBlIHQyLCBcCisgICAgICAgICAg
ICAgICAgICAgICAgICBScGNUeXBlVHJhaXQ8VDM+OjpBcGlUeXBlIHQzLCBcCisgICAgICAgICAg
ICAgICAgICAgICAgICBScGNUeXBlVHJhaXQ8VDQ+OjpBcGlUeXBlIHQ0LCBcCisgICAgICAgICAg
ICAgICAgICAgICAgICBScGNUeXBlVHJhaXQ8VDU+OjpBcGlUeXBlIHQ1KSB7IFwKKyAgICAgICAg
VmVjdG9yPFN0cmluZz4gYXJncyg1KTsgXAorICAgICAgICBhcmdzWzBdID0gUnBjVHlwZVRyYWl0
PFQxPjo6dG9TdHJpbmcodDEpOyBcCisgICAgICAgIGFyZ3NbMV0gPSBScGNUeXBlVHJhaXQ8VDI+
Ojp0b1N0cmluZyh0Mik7IFwKKyAgICAgICAgYXJnc1syXSA9IFJwY1R5cGVUcmFpdDxUMz46OnRv
U3RyaW5nKHQzKTsgXAorICAgICAgICBhcmdzWzNdID0gUnBjVHlwZVRyYWl0PFQ0Pjo6dG9TdHJp
bmcodDQpOyBcCisgICAgICAgIGFyZ3NbNF0gPSBScGNUeXBlVHJhaXQ8VDU+Ojp0b1N0cmluZyh0
NSk7IFwKKyAgICAgICAgdGhpcy0+c2VuZFJwY01lc3NhZ2UobV9jbGFzc05hbWUsICNNZXRob2Qs
IGFyZ3MpOyBcCisgICAgfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCisvLyBSUEMgZGlzcGF0Y2ggbWV0aG9kIGltcGxlbWVudGF0aW9u
cworCisjZGVmaW5lIFRPT0xTX1JQQ19ESVNQQVRDSDAoTWV0aG9kKSBcCitpZiAobWV0aG9kTmFt
ZSA9PSAjTWV0aG9kKSB7IFwKKyAgICBkZWxlZ2F0ZS0+TWV0aG9kKCk7IFwKKyAgICByZXR1cm4g
dHJ1ZTsgXAorfQorCisjZGVmaW5lIFRPT0xTX1JQQ19ESVNQQVRDSDEoTWV0aG9kLCBUMSkgXAor
aWYgKG1ldGhvZE5hbWUgPT0gI01ldGhvZCkgeyBcCisgICAgZGVsZWdhdGUtPk1ldGhvZChScGNU
eXBlVHJhaXQ8VDE+OjpwYXJzZShhcmdzWzBdKSk7IFwKKyAgICByZXR1cm4gdHJ1ZTsgXAorfQor
CisjZGVmaW5lIFRPT0xTX1JQQ19ESVNQQVRDSDIoTWV0aG9kLCBUMSwgVDIpIFwKK2lmIChtZXRo
b2ROYW1lID09ICNNZXRob2QpIHsgXAorICAgIGRlbGVnYXRlLT5NZXRob2QoIFwKKyAgICAgICAg
UnBjVHlwZVRyYWl0PFQxPjo6cGFyc2UoYXJnc1swXSksIFwKKyAgICAgICAgUnBjVHlwZVRyYWl0
PFQyPjo6cGFyc2UoYXJnc1sxXSkgXAorICAgICk7IFwKKyAgICByZXR1cm4gdHJ1ZTsgXAorfQor
CisjZGVmaW5lIFRPT0xTX1JQQ19ESVNQQVRDSDMoTWV0aG9kLCBUMSwgVDIsIFQzKSBcCitpZiAo
bWV0aG9kTmFtZSA9PSAjTWV0aG9kKSB7IFwKKyAgICBkZWxlZ2F0ZS0+TWV0aG9kKCBcCisgICAg
ICAgIFJwY1R5cGVUcmFpdDxUMT46OnBhcnNlKGFyZ3NbMF0pLCBcCisgICAgICAgIFJwY1R5cGVU
cmFpdDxUMj46OnBhcnNlKGFyZ3NbMV0pLCBcCisgICAgICAgIFJwY1R5cGVUcmFpdDxUMz46OnBh
cnNlKGFyZ3NbMl0pIFwKKyAgICApOyBcCisgICAgcmV0dXJuIHRydWU7IFwKK30KKworI2RlZmlu
ZSBUT09MU19SUENfRElTUEFUQ0g0KE1ldGhvZCwgVDEsIFQyLCBUMywgVDQpIFwKK2lmIChtZXRo
b2ROYW1lID09ICNNZXRob2QpIHsgXAorICAgIGRlbGVnYXRlLT5NZXRob2QoIFwKKyAgICAgICAg
UnBjVHlwZVRyYWl0PFQxPjo6cGFyc2UoYXJnc1swXSksIFwKKyAgICAgICAgUnBjVHlwZVRyYWl0
PFQyPjo6cGFyc2UoYXJnc1sxXSksIFwKKyAgICAgICAgUnBjVHlwZVRyYWl0PFQzPjo6cGFyc2Uo
YXJnc1syXSksIFwKKyAgICAgICAgUnBjVHlwZVRyYWl0PFQ0Pjo6cGFyc2UoYXJnc1szXSkgXAor
ICAgICk7IFwKKyAgICByZXR1cm4gdHJ1ZTsgXAorfQorCisjZGVmaW5lIFRPT0xTX1JQQ19ESVNQ
QVRDSDUoTWV0aG9kLCBUMSwgVDIsIFQzLCBUNCwgVDUpIFwKK2lmIChtZXRob2ROYW1lID09ICNN
ZXRob2QpIHsgXAorICAgIGRlbGVnYXRlLT5NZXRob2QoIFwKKyAgICAgICAgUnBjVHlwZVRyYWl0
PFQxPjo6cGFyc2UoYXJnc1swXSksIFwKKyAgICAgICAgUnBjVHlwZVRyYWl0PFQyPjo6cGFyc2Uo
YXJnc1sxXSksIFwKKyAgICAgICAgUnBjVHlwZVRyYWl0PFQzPjo6cGFyc2UoYXJnc1syXSksIFwK
KyAgICAgICAgUnBjVHlwZVRyYWl0PFQ0Pjo6cGFyc2UoYXJnc1szXSksIFwKKyAgICAgICAgUnBj
VHlwZVRyYWl0PFQ1Pjo6cGFyc2UoYXJnc1s0XSkgXAorICAgICk7IFwKKyAgICByZXR1cm4gdHJ1
ZTsgXAorfQorCisjZGVmaW5lIFRPT0xTX0VORF9SUENfRElTUEFUQ0goKSBcCit9CisKKy8vIFRo
aXMgbWFjcm8gZGVmaW5lcyB0aHJlZSBjbGFzc2VzOiBDbGFzcyB3aXRoIHRoZSBBcGksIENsYXNz
U3R1YiB0aGF0IGlzCisvLyBzZXJpYWxpemluZyBtZXRob2QgY2FsbHMgYW5kIENsYXNzRGlzcGF0
Y2ggdGhhdCBpcyBjYXBhYmxlIG9mIGRpc3BhdGNoaW5nCisvLyB0aGUgc2VyaWFsaXplZCBtZXNz
YWdlIGludG8gaXRzIGRlbGVnYXRlLgorI2RlZmluZSBERUZJTkVfUlBDX0NMQVNTKENsYXNzLCBT
VFJVQ1QpIFwKK2NsYXNzIENsYXNzIDogcHVibGljIE5vbmNvcHlhYmxlIHtcCitwdWJsaWM6IFwK
KyAgICBDbGFzcygpIFwKKyAgICB7IFwKKyAgICAgICAgbV9jbGFzc05hbWUgPSAjQ2xhc3M7IFwK
KyAgICB9IFwKKyAgICB2aXJ0dWFsIH5DbGFzcygpIHsgfSBcCisgICAgXAorICAgIFNUUlVDVCgg
XAorICAgICAgICBUT09MU19SUENfQVBJX01FVEhPRDAsIFwKKyAgICAgICAgVE9PTFNfUlBDX0FQ
SV9NRVRIT0QxLCBcCisgICAgICAgIFRPT0xTX1JQQ19BUElfTUVUSE9EMiwgXAorICAgICAgICBU
T09MU19SUENfQVBJX01FVEhPRDMsIFwKKyAgICAgICAgVE9PTFNfUlBDX0FQSV9NRVRIT0Q0LCBc
CisgICAgICAgIFRPT0xTX1JQQ19BUElfTUVUSE9ENSkgXAorICAgIFdlYkNvcmU6OlN0cmluZyBt
X2NsYXNzTmFtZTsgXAorfTsgXAorXAorY2xhc3MgQ2xhc3MjI1N0dWIgXAorICAgIDogcHVibGlj
IENsYXNzIFwKKyAgICAsIHB1YmxpYyBEZXZUb29sc1JQQyB7IFwKK3B1YmxpYzogXAorICAgIGV4
cGxpY2l0IENsYXNzIyNTdHViKERlbGVnYXRlKiBkZWxlZ2F0ZSkgOiBEZXZUb29sc1JQQyhkZWxl
Z2F0ZSkgeyB9IFwKKyAgICB2aXJ0dWFsIH5DbGFzcyMjU3R1YigpIHsgfSBcCisgICAgdHlwZWRl
ZiBDbGFzcyBDTEFTUzsgXAorICAgIFNUUlVDVCggXAorICAgICAgICBUT09MU19SUENfU1RVQl9N
RVRIT0QwLCBcCisgICAgICAgIFRPT0xTX1JQQ19TVFVCX01FVEhPRDEsIFwKKyAgICAgICAgVE9P
TFNfUlBDX1NUVUJfTUVUSE9EMiwgXAorICAgICAgICBUT09MU19SUENfU1RVQl9NRVRIT0QzLCBc
CisgICAgICAgIFRPT0xTX1JQQ19TVFVCX01FVEhPRDQsIFwKKyAgICAgICAgVE9PTFNfUlBDX1NU
VUJfTUVUSE9ENSkgXAorfTsgXAorXAorY2xhc3MgQ2xhc3MjI0Rpc3BhdGNoIDogcHVibGljIE5v
bmNvcHlhYmxlIHsgXAorcHVibGljOiBcCisgICAgQ2xhc3MjI0Rpc3BhdGNoKCkgeyB9IFwKKyAg
ICB2aXJ0dWFsIH5DbGFzcyMjRGlzcGF0Y2goKSB7IH0gXAorICAgIFwKKyAgICBzdGF0aWMgYm9v
bCBkaXNwYXRjaChDbGFzcyogZGVsZWdhdGUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBXZWJLaXQ6OldlYkRldlRvb2xzTWVzc2FnZURhdGEmIGRhdGEpIHsgXAorICAgICAgICBT
dHJpbmcgY2xhc3NOYW1lID0gZGF0YS5jbGFzc05hbWU7IFwKKyAgICAgICAgaWYgKGNsYXNzTmFt
ZSAhPSAjQ2xhc3MpIFwKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgXAorICAgICAgICBTdHJp
bmcgbWV0aG9kTmFtZSA9IGRhdGEubWV0aG9kTmFtZTsgXAorICAgICAgICBWZWN0b3I8U3RyaW5n
PiBhcmdzOyBcCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGF0YS5hcmd1bWVudHMu
c2l6ZSgpOyBpKyspIFwKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGRhdGEuYXJndW1lbnRzW2ld
KTsgXAorICAgICAgICB0eXBlZGVmIENsYXNzIENMQVNTOyBcCisgICAgICAgIFNUUlVDVCggXAor
ICAgICAgICAgICAgVE9PTFNfUlBDX0RJU1BBVENIMCwgXAorICAgICAgICAgICAgVE9PTFNfUlBD
X0RJU1BBVENIMSwgXAorICAgICAgICAgICAgVE9PTFNfUlBDX0RJU1BBVENIMiwgXAorICAgICAg
ICAgICAgVE9PTFNfUlBDX0RJU1BBVENIMywgXAorICAgICAgICAgICAgVE9PTFNfUlBDX0RJU1BB
VENINCwgXAorICAgICAgICAgICAgVE9PTFNfUlBDX0RJU1BBVENINSkgXAorICAgICAgICByZXR1
cm4gZmFsc2U7IFwKKyAgICB9IFwKK307CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFJQQyBiYXNlIGNsYXNzCitjbGFzcyBEZXZU
b29sc1JQQyB7CitwdWJsaWM6CisgICAgY2xhc3MgRGVsZWdhdGUgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgRGVsZWdhdGUoKSB7IH0KKyAgICAgICAgdmlydHVhbCB+RGVsZWdhdGUoKSB7IH0KKyAg
ICAgICAgdmlydHVhbCB2b2lkIHNlbmRScGNNZXNzYWdlKGNvbnN0IFdlYktpdDo6V2ViRGV2VG9v
bHNNZXNzYWdlRGF0YSYgZGF0YSkgPSAwOworICAgIH07CisKKyAgICBleHBsaWNpdCBEZXZUb29s
c1JQQyhEZWxlZ2F0ZSogZGVsZWdhdGUpIDogbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkgeyB9CisgICAg
dmlydHVhbCB+RGV2VG9vbHNSUEMoKSB7IH07CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHNlbmRS
cGNNZXNzYWdlKGNvbnN0IFN0cmluZyYgY2xhc3NOYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nJiBtZXRob2ROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGFyZ3MpIHsKKyAgICAgIFdlYktpdDo6V2ViVmVjdG9yPFdlYktp
dDo6V2ViU3RyaW5nPiB3ZWJBcmdzKGFyZ3Muc2l6ZSgpKTsKKyAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYXJncy5zaXplKCk7IGkrKykKKyAgICAgICAgICB3ZWJBcmdzW2ldID0gYXJnc1tp
XTsKKyAgICAgIFdlYktpdDo6V2ViRGV2VG9vbHNNZXNzYWdlRGF0YSBkYXRhOworICAgICAgZGF0
YS5jbGFzc05hbWUgPSBjbGFzc05hbWU7CisgICAgICBkYXRhLm1ldGhvZE5hbWUgPSBtZXRob2RO
YW1lOworICAgICAgZGF0YS5hcmd1bWVudHMuc3dhcCh3ZWJBcmdzKTsKKyAgICAgIHRoaXMtPm1f
ZGVsZWdhdGUtPnNlbmRScGNNZXNzYWdlKGRhdGEpOworICAgIH0KKworICAgIERlbGVnYXRlKiBt
X2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9EZXZUb29sc1JQQ0pTLmggYi9XZWJLaXQvY2hyb21p
dW0vc3JjL0RldlRvb2xzUlBDSlMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li44YWUyNzlmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9EZXZUb29s
c1JQQ0pTLmgKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBBZGRpdGlvbmFsIHNldCBvZiBtYWNyb3MgZm9y
IHRoZSBKUyBSUEMuCisKKyNpZm5kZWYgRGV2VG9vbHNSUENKU19oCisjZGVmaW5lIERldlRvb2xz
UlBDSlNfaAorCisvLyBEbyBub3QgcmVtb3ZlIHRoaXMgb25lIGFsdGhvdWdoIGl0IGlzIG5vdCB1
c2VkLgorI2luY2x1ZGUgIkJvdW5kT2JqZWN0LmgiCisjaW5jbHVkZSAiRGV2VG9vbHNSUEMuaCIK
KyNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIEpTIFJQQyBi
aW5kcyBhbmQgc3R1YnMKKworI2RlZmluZSBUT09MU19SUENfSlNfQklORF9NRVRIT0QwKE1ldGhv
ZCkgXAorICAgIGJvdW5kT2JqLmFkZFByb3RvRnVuY3Rpb24oI01ldGhvZCwgT0NMQVNTOjpqcyMj
TWV0aG9kKTsKKworI2RlZmluZSBUT09MU19SUENfSlNfQklORF9NRVRIT0QxKE1ldGhvZCwgVDEp
IFwKKyAgICBib3VuZE9iai5hZGRQcm90b0Z1bmN0aW9uKCNNZXRob2QsIE9DTEFTUzo6anMjI01l
dGhvZCk7CisKKyNkZWZpbmUgVE9PTFNfUlBDX0pTX0JJTkRfTUVUSE9EMihNZXRob2QsIFQxLCBU
MikgXAorICAgIGJvdW5kT2JqLmFkZFByb3RvRnVuY3Rpb24oI01ldGhvZCwgT0NMQVNTOjpqcyMj
TWV0aG9kKTsKKworI2RlZmluZSBUT09MU19SUENfSlNfQklORF9NRVRIT0QzKE1ldGhvZCwgVDEs
IFQyLCBUMykgXAorICAgIGJvdW5kT2JqLmFkZFByb3RvRnVuY3Rpb24oI01ldGhvZCwgT0NMQVNT
OjpqcyMjTWV0aG9kKTsKKworI2RlZmluZSBUT09MU19SUENfSlNfQklORF9NRVRIT0Q0KE1ldGhv
ZCwgVDEsIFQyLCBUMywgVDQpIFwKKyAgICBib3VuZE9iai5hZGRQcm90b0Z1bmN0aW9uKCNNZXRo
b2QsIE9DTEFTUzo6anMjI01ldGhvZCk7CisKKyNkZWZpbmUgVE9PTFNfUlBDX0pTX0JJTkRfTUVU
SE9ENShNZXRob2QsIFQxLCBUMiwgVDMsIFQ0LCBUNSkgXAorICAgIGJvdW5kT2JqLmFkZFByb3Rv
RnVuY3Rpb24oI01ldGhvZCwgT0NMQVNTOjpqcyMjTWV0aG9kKTsKKworI2RlZmluZSBUT09MU19S
UENfSlNfU1RVQl9NRVRIT0QwKE1ldGhvZCkgXAorICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4ganMjI01ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKSB7IFwKKyAgICAgICAg
c2VuZFJwY01lc3NhZ2VGcm9tSlMoI01ldGhvZCwgYXJncywgMCk7IFwKKyAgICAgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsgXAorICAgIH0KKworI2RlZmluZSBUT09MU19SUENfSlNfU1RVQl9N
RVRIT0QxKE1ldGhvZCwgVDEpIFwKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpz
IyNNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykgeyBcCisgICAgICAgIHNlbmRScGNN
ZXNzYWdlRnJvbUpTKCNNZXRob2QsIGFyZ3MsIDEpOyBcCisgICAgICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7IFwKKyAgICB9CisKKyNkZWZpbmUgVE9PTFNfUlBDX0pTX1NUVUJfTUVUSE9EMihN
ZXRob2QsIFQxLCBUMikgXAorICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganMjI01l
dGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKSB7IFwKKyAgICAgICAgc2VuZFJwY01lc3Nh
Z2VGcm9tSlMoI01ldGhvZCwgYXJncywgMik7IFwKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsgXAorICAgIH0KKworI2RlZmluZSBUT09MU19SUENfSlNfU1RVQl9NRVRIT0QzKE1ldGhv
ZCwgVDEsIFQyLCBUMykgXAorICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganMjI01l
dGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKSB7IFwKKyAgICAgICAgc2VuZFJwY01lc3Nh
Z2VGcm9tSlMoI01ldGhvZCwgYXJncywgMyk7IFwKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsgXAorICAgIH0KKworI2RlZmluZSBUT09MU19SUENfSlNfU1RVQl9NRVRIT0Q0KE1ldGhv
ZCwgVDEsIFQyLCBUMywgVDQpIFwKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpz
IyNNZXRob2QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykgeyBcCisgICAgICAgIHNlbmRScGNN
ZXNzYWdlRnJvbUpTKCNNZXRob2QsIGFyZ3MsIDQpOyBcCisgICAgICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7IFwKKyAgICB9CisKKyNkZWZpbmUgVE9PTFNfUlBDX0pTX1NUVUJfTUVUSE9ENShN
ZXRob2QsIFQxLCBUMiwgVDMsIFQ0LCBUNSkgXAorICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4ganMjI01ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKSB7IFwKKyAgICAgICAg
c2VuZFJwY01lc3NhZ2VGcm9tSlMoI01ldGhvZCwgYXJncywgNSk7IFwKKyAgICAgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsgXAorICAgIH0KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gSlMgUlBDIG1haW4gb2JqIG1hY3JvCisK
KyNkZWZpbmUgREVGSU5FX1JQQ19KU19CT1VORF9PQkooQ2xhc3MsIFNUUlVDVCwgRENsYXNzLCBE
RUxFR0FURV9TVFJVQ1QpIFwKK2NsYXNzIEpTIyNDbGFzcyMjQm91bmRPYmogOiBwdWJsaWMgQ2xh
c3MjI1N0dWIgeyBcCitwdWJsaWM6IFwKKyAgICBKUyMjQ2xhc3MjI0JvdW5kT2JqKERlbGVnYXRl
KiBycGNEZWxlZ2F0ZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4gY29udGV4dCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
Y2xhc3NuYW1lKSBcCisgICAgICAgIDogQ2xhc3MjI1N0dWIocnBjRGVsZWdhdGUpIHsgXAorICAg
ICAgQm91bmRPYmplY3QgYm91bmRPYmooY29udGV4dCwgdGhpcywgY2xhc3NuYW1lKTsgXAorICAg
ICAgU1RSVUNUKCBcCisgICAgICAgICAgVE9PTFNfUlBDX0pTX0JJTkRfTUVUSE9EMCwgXAorICAg
ICAgICAgIFRPT0xTX1JQQ19KU19CSU5EX01FVEhPRDEsIFwKKyAgICAgICAgICBUT09MU19SUENf
SlNfQklORF9NRVRIT0QyLCBcCisgICAgICAgICAgVE9PTFNfUlBDX0pTX0JJTkRfTUVUSE9EMywg
XAorICAgICAgICAgIFRPT0xTX1JQQ19KU19CSU5EX01FVEhPRDQsIFwKKyAgICAgICAgICBUT09M
U19SUENfSlNfQklORF9NRVRIT0Q1KSBcCisgICAgICBib3VuZE9iai5idWlsZCgpOyBcCisgICAg
fSBcCisgICAgdmlydHVhbCB+SlMjI0NsYXNzIyNCb3VuZE9iaigpIHsgfSBcCisgICAgdHlwZWRl
ZiBKUyMjQ2xhc3MjI0JvdW5kT2JqIE9DTEFTUzsgXAorICAgIFNUUlVDVCggXAorICAgICAgICBU
T09MU19SUENfSlNfU1RVQl9NRVRIT0QwLCBcCisgICAgICAgIFRPT0xTX1JQQ19KU19TVFVCX01F
VEhPRDEsIFwKKyAgICAgICAgVE9PTFNfUlBDX0pTX1NUVUJfTUVUSE9EMiwgXAorICAgICAgICBU
T09MU19SUENfSlNfU1RVQl9NRVRIT0QzLCBcCisgICAgICAgIFRPT0xTX1JQQ19KU19TVFVCX01F
VEhPRDQsIFwKKyAgICAgICAgVE9PTFNfUlBDX0pTX1NUVUJfTUVUSE9ENSkgXAorcHJpdmF0ZTog
XAorICAgIHN0YXRpYyB2b2lkIHNlbmRScGNNZXNzYWdlRnJvbUpTKGNvbnN0IGNoYXIqIG1ldGhv
ZCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHY4OjpBcmd1
bWVudHMmIGpzQXJndW1lbnRzLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IGFyZ3NDb3VudCkgXAorICAgIHsgXAorICAgICAgICBWZWN0b3I8U3RyaW5nPiBh
cmdzKGFyZ3NDb3VudCk7IFwKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdzQ291
bnQ7IGkrKykgXAorICAgICAgICAgICAgYXJnc1tpXSA9IFdlYkNvcmU6OnRvV2ViQ29yZVN0cmlu
Z1dpdGhOdWxsQ2hlY2soanNBcmd1bWVudHNbaV0pOyBcCisgICAgICAgIHZvaWQqIHNlbGZQdHIg
PSB2ODo6RXh0ZXJuYWw6OkNhc3QoKmpzQXJndW1lbnRzLkRhdGEoKSktPlZhbHVlKCk7IFwKKyAg
ICAgICAgSlMjI0NsYXNzIyNCb3VuZE9iaiogc2VsZiA9IHN0YXRpY19jYXN0PEpTIyNDbGFzcyMj
Qm91bmRPYmoqPihzZWxmUHRyKTsgXAorICAgICAgICBzZWxmLT5zZW5kUnBjTWVzc2FnZSgjQ2xh
c3MsIG1ldGhvZCwgYXJncyk7IFwKKyAgICB9IFwKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvUHJvZmlsZXJBZ2Vu
dC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9Qcm9maWxlckFnZW50LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNzI1NzkxYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvUHJvZmlsZXJBZ2VudC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFByb2Zp
bGVyQWdlbnRfaAorI2RlZmluZSBQcm9maWxlckFnZW50X2gKKworI2luY2x1ZGUgIkRldlRvb2xz
UlBDLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBQcm9maWxlciBhZ2VudCBwcm92aWRl
cyBBUEkgZm9yIHJldHJpZXZpbmcgcHJvZmlsZXIgZGF0YS4KKy8vIFRoZXNlIG1ldGhvZHMgYXJl
IGhhbmRsZWQgb24gdGhlIElPIHRocmVhZCwgc28gcHJvZmlsZXIgY2FuCisvLyBvcGVyYXRlIHdo
aWxlIGEgc2NyaXB0IG9uIGEgcGFnZSBwZXJmb3JtcyBoZWF2eSB3b3JrLgorI2RlZmluZSBQUk9G
SUxFUl9BR0VOVF9TVFJVQ1QoTUVUSE9EMCwgTUVUSE9EMSwgTUVUSE9EMiwgTUVUSE9EMywgTUVU
SE9ENCwgTUVUSE9ENSkgXAorICAvKiBSZXF1ZXN0cyBjdXJyZW50IHByb2ZpbGVyIHN0YXRlLiAq
LyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBNRVRIT0QwKGdldEFjdGl2ZVByb2ZpbGVy
TW9kdWxlcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAv
KiBSZXRyaWV2ZXMgcG9ydGlvbiBvZiBwcm9maWxlciBsb2cuICovICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICBNRVRIT0QxKGdldExvZ0xpbmVzLCBpbnQgLyogcG9zaXRpb24gKi8pCisKK0RF
RklORV9SUENfQ0xBU1MoUHJvZmlsZXJBZ2VudCwgUFJPRklMRVJfQUdFTlRfU1RSVUNUKQorCisj
ZGVmaW5lIFBST0ZJTEVSX0FHRU5UX0RFTEVHQVRFX1NUUlVDVChNRVRIT0QwLCBNRVRIT0QxLCBN
RVRIT0QyLCBNRVRIT0QzLCBNRVRIT0Q0LCBNRVRIT0Q1KSBcCisgIC8qIFJlc3BvbnNlIHRvIGdl
dEFjdGl2ZVByb2ZpbGVyTW9kdWxlcy4gKi8gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
IE1FVEhPRDEoZGlkR2V0QWN0aXZlUHJvZmlsZXJNb2R1bGVzLCBpbnQgLyogZmxhZ3MgKi8pICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIC8qIFJlc3BvbnNlIHRvIGdldExv
Z0xpbmVzLiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIE1F
VEhPRDIoZGlkR2V0TG9nTGluZXMsIGludCAvKiBwb3NpdGlvbiAqLywgU3RyaW5nIC8qIGxvZyAq
LykKKworREVGSU5FX1JQQ19DTEFTUyhQcm9maWxlckFnZW50RGVsZWdhdGUsIFBST0ZJTEVSX0FH
RU5UX0RFTEVHQVRFX1NUUlVDVCkKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9Qcm9maWxlckFnZW50SW1wbC5jcHAgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1Byb2ZpbGVyQWdlbnRJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4yYzhlNTRhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9Qcm9maWxlckFnZW50SW1wbC5jcHAKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJQcm9maWxlckFnZW50SW1wbC5oIgorCisjaW5jbHVkZSA8
djguaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgUHJvZmlsZXJBZ2VudEltcGw6Omdl
dEFjdGl2ZVByb2ZpbGVyTW9kdWxlcygpIHsKKyAgbV9kZWxlZ2F0ZS0+ZGlkR2V0QWN0aXZlUHJv
ZmlsZXJNb2R1bGVzKHY4OjpWODo6R2V0QWN0aXZlUHJvZmlsZXJNb2R1bGVzKCkpOworfQorCit2
b2lkIFByb2ZpbGVyQWdlbnRJbXBsOjpnZXRMb2dMaW5lcyhpbnQgcG9zaXRpb24pIHsKKyAgc3Rh
dGljIGNoYXIgYnVmZmVyWzY1NTM2XTsKKyAgY29uc3QgaW50IHJlYWRTaXplID0gdjg6OlY4OjpH
ZXRMb2dMaW5lcyhwb3NpdGlvbiwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSAtIDEpOworICBidWZm
ZXJbcmVhZFNpemVdID0gJ1wwJzsKKyAgcG9zaXRpb24gKz0gcmVhZFNpemU7CisgIG1fZGVsZWdh
dGUtPmRpZEdldExvZ0xpbmVzKHBvc2l0aW9uLCBidWZmZXIpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvUHJvZmlsZXJBZ2VudElt
cGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvUHJvZmlsZXJBZ2VudEltcGwuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTgyZDIzCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9Qcm9maWxlckFnZW50SW1wbC5oCkBAIC0wLDAgKzEsNTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFByb2ZpbGVyQWdlbnRJbXBsX2gKKyNkZWZpbmUgUHJvZmlsZXJBZ2VudEltcGxfaAorCisj
aW5jbHVkZSAiUHJvZmlsZXJBZ2VudC5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
UHJvZmlsZXJBZ2VudEltcGwgOiBwdWJsaWMgUHJvZmlsZXJBZ2VudCB7CisgcHVibGljOgorICBQ
cm9maWxlckFnZW50SW1wbChQcm9maWxlckFnZW50RGVsZWdhdGUqIGRlbGVnYXRlKSA6IG1fZGVs
ZWdhdGUoZGVsZWdhdGUpIHsgfQorICB2aXJ0dWFsIH5Qcm9maWxlckFnZW50SW1wbCgpIHsgfQor
CisgIC8vIFByb2ZpbGVyQWdlbnQgaW1wbGVtZW50YXRpb24uCisKKyAgLy8gVGhpcyBtZXRob2Qg
aXMgY2FsbGVkIG9uIElPIHRocmVhZC4KKyAgdmlydHVhbCB2b2lkIGdldEFjdGl2ZVByb2ZpbGVy
TW9kdWxlcygpOworCisgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiBJTyB0aHJlYWQuCisg
IHZpcnR1YWwgdm9pZCBnZXRMb2dMaW5lcyhpbnQgcG9zaXRpb24pOworCisgcHJpdmF0ZToKKyAg
UHJvZmlsZXJBZ2VudERlbGVnYXRlKiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9Ub29sc0Fn
ZW50LmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1Rvb2xzQWdlbnQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi43N2U4MWEwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9Ub29sc0FnZW50LmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVG9vbHNBZ2Vu
dF9oCisjZGVmaW5lIFRvb2xzQWdlbnRfaAorCisjaW5jbHVkZSAiRGV2VG9vbHNSUEMuaCIKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFRvb2xzIGFnZW50IHByb3ZpZGVzIEFQSSBmb3IgZW5h
YmxpbmcgLyBkaXNhYmxpbmcgb3RoZXIgYWdlbnRzIGFzIHdlbGwgYXMKKy8vIEFQSSBmb3IgYXV4
aWxpYXJ5IFVJIGZ1bmN0aW9ucyBzdWNoIGFzIGRvbSBlbGVtZW50cyBoaWdobGlnaHRpbmcuCisj
ZGVmaW5lIFRPT0xTX0FHRU5UX1NUUlVDVChNRVRIT0QwLCBNRVRIT0QxLCBNRVRIT0QyLCBNRVRI
T0QzLCBNRVRIT0Q0LCBNRVRIT0Q1KSBcCisgIC8qIFJlcXVlc3QgdGhlIGFnZW50IHRvIHRvIHJ1
biBhIG5vLW9wIEphdmFTY3JpcHQgZnVuY3Rpb24gdG8gdHJpZ2dlciB2OAorICAgICBleGVjdXRp
b24uICovIFwKKyAgTUVUSE9EMChleGVjdXRlVm9pZEphdmFTY3JpcHQpIFwKKyAgXAorICAvKiBE
aXNwYXRjaGVzIGdpdmVuIGZ1bmN0aW9uIG9uIHRoZSBJbnNwZWN0b3JDb250cm9sbGVyIG9iamVj
dCAqLyBcCisgIE1FVEhPRDMoZGlzcGF0Y2hPbkluc3BlY3RvckNvbnRyb2xsZXIsIGludCAvKiBj
YWxsX2lkICovLCBcCisgICAgICBTdHJpbmcgLyogZnVuY3Rpb25fbmFtZSAqLywgU3RyaW5nIC8q
IGpzb25fYXJncyAqLykgXAorICBcCisgIC8qIERpc3BhdGNoZXMgZ2l2ZW4gZnVuY3Rpb24gb24g
dGhlIEluamVjdGVkU2NyaXB0IG9iamVjdCAqLyBcCisgIE1FVEhPRDUoZGlzcGF0Y2hPbkluamVj
dGVkU2NyaXB0LCBpbnQgLyogY2FsbF9pZCAqLywgXAorICAgICAgaW50IC8qIGluamVjdGVkX3Nj
cmlwdF9pZCAqLywgU3RyaW5nIC8qIGZ1bmN0aW9uX25hbWUgKi8sIFwKKyAgICAgIFN0cmluZyAv
KiBqc29uX2FyZ3MgKi8sIGJvb2wgLyogYXN5bmMgKi8pCisKK0RFRklORV9SUENfQ0xBU1MoVG9v
bHNBZ2VudCwgVE9PTFNfQUdFTlRfU1RSVUNUKQorCisjZGVmaW5lIFRPT0xTX0FHRU5UX0RFTEVH
QVRFX1NUUlVDVChNRVRIT0QwLCBNRVRIT0QxLCBNRVRIT0QyLCBNRVRIT0QzLCBNRVRIT0Q0LCBN
RVRIT0Q1KSBcCisgIC8qIFVwZGF0ZXMgZm9jdXNlZCBub2RlIG9uIHRoZSBjbGllbnQuICovIFwK
KyAgTUVUSE9EMShmcmFtZU5hdmlnYXRlLCBTdHJpbmcgLyogdXJsICovKSBcCisgIFwKKyAgLyog
UmVzcG9uc2UgdG8gdGhlIERpc3BhdGNoT24qLiAqLyBcCisgIE1FVEhPRDMoZGlkRGlzcGF0Y2hP
biwgaW50IC8qIGNhbGxfaWQgKi8sIFN0cmluZyAvKiByZXN1bHQgKi8sIFwKKyAgICAgIFN0cmlu
ZyAvKiBleGNlcHRpb24gKi8pIFwKKyAgXAorICAvKiBTZW5kcyBJbnNwZWN0b3JGcm9udGVuZCBt
ZXNzYWdlIHRvIGJlIGRpc3BhdGNoZWQgb24gY2xpZW50LiAqLyBcCisgIE1FVEhPRDEoZGlzcGF0
Y2hPbkNsaWVudCwgU3RyaW5nIC8qIGRhdGEgKi8pCisKK0RFRklORV9SUENfQ0xBU1MoVG9vbHNB
Z2VudERlbGVnYXRlLCBUT09MU19BR0VOVF9ERUxFR0FURV9TVFJVQ1QpCisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RGV2VG9vbHNBZ2VudEltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Fn
ZW50SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk2NzRlNQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudElt
cGwuY3BwCkBAIC0wLDAgKzEsNTgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8
c3RyaW5nPgorCisjaW5jbHVkZSAiQm91bmRPYmplY3QuaCIKKyNpbmNsdWRlICJEZWJ1Z2dlckFn
ZW50SW1wbC5oIgorI2luY2x1ZGUgIkRlYnVnZ2VyQWdlbnRNYW5hZ2VyLmgiCisjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiSW5qZWN0
ZWRTY3JpcHRIb3N0LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZC5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgor
I2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlByb2Zp
bGVyQWdlbnRJbXBsLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgorI2luY2x1ZGUgIlJl
c291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRl
ICJTY3JpcHRPYmplY3QuaCIKKyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgorI2luY2x1ZGUgIlNj
cmlwdFZhbHVlLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhQcm94eS5o
IgorI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiV2ViRGF0YVNvdXJjZS5oIgor
I2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJEZXZUb29s
c0FnZW50SW1wbC5oIgorI2luY2x1ZGUgIldlYkRldlRvb2xzTWVzc2FnZURhdGEuaCIKKyNpbmNs
dWRlICJXZWJGcmFtZUltcGwuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJX
ZWJVUkwuaCIKKyNpbmNsdWRlICJXZWJVUkxFcnJvci5oIgorI2luY2x1ZGUgIldlYlVSTFJlcXVl
c3QuaCIKKyNpbmNsdWRlICJXZWJVUkxSZXNwb25zZS5oIgorI2luY2x1ZGUgIldlYlZpZXdJbXBs
LmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorCisjaW5jbHVkZSAid2Via2l0L2dsdWUvZ2x1ZV91dGlsLmgiCisjaW5jbHVkZSAid2Via2l0
L2dsdWUvd2Via2l0X2dsdWUuaCIKKwordXNpbmcgV2ViQ29yZTo6RG9jdW1lbnQ7Cit1c2luZyBX
ZWJDb3JlOjpEb2N1bWVudExvYWRlcjsKK3VzaW5nIFdlYkNvcmU6OkZyYW1lTG9hZGVyOwordXNp
bmcgV2ViQ29yZTo6SW5qZWN0ZWRTY3JpcHRIb3N0OwordXNpbmcgV2ViQ29yZTo6SW5zcGVjdG9y
QmFja2VuZDsKK3VzaW5nIFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI7Cit1c2luZyBXZWJD
b3JlOjpJbnNwZWN0b3JGcm9udGVuZDsKK3VzaW5nIFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNl
OwordXNpbmcgV2ViQ29yZTo6Tm9kZTsKK3VzaW5nIFdlYkNvcmU6OlBhZ2U7Cit1c2luZyBXZWJD
b3JlOjpSZXNvdXJjZUVycm9yOwordXNpbmcgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OwordXNp
bmcgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZTsKK3VzaW5nIFdlYkNvcmU6OlNhZmVBbGxvY2F0
aW9uOwordXNpbmcgV2ViQ29yZTo6U2NyaXB0T2JqZWN0OwordXNpbmcgV2ViQ29yZTo6U2NyaXB0
U3RhdGU7Cit1c2luZyBXZWJDb3JlOjpTY3JpcHRWYWx1ZTsKK3VzaW5nIFdlYkNvcmU6OlN0cmlu
ZzsKK3VzaW5nIFdlYkNvcmU6OlY4Q2xhc3NJbmRleDsKK3VzaW5nIFdlYkNvcmU6OlY4RE9NV3Jh
cHBlcjsKK3VzaW5nIFdlYkNvcmU6OlY4UHJveHk7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitu
YW1lc3BhY2UgeworCit2b2lkIEluc3BlY3RvckJhY2tlbmRXZWFrUmVmZXJlbmNlQ2FsbGJhY2so
djg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiBvYmplY3QsIHZvaWQqIHBhcmFtZXRlcikKK3sKKyAg
ICBJbnNwZWN0b3JCYWNrZW5kKiBiYWNrZW5kID0gc3RhdGljX2Nhc3Q8SW5zcGVjdG9yQmFja2Vu
ZCo+KHBhcmFtZXRlcik7CisgICAgYmFja2VuZC0+ZGVyZWYoKTsKKyAgICBvYmplY3QuRGlzcG9z
ZSgpOworfQorCit2b2lkIFNldEFwdUFnZW50RW5hYmxlZEluVXRpbGl0eUNvbnRleHQodjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCwgYm9vbCBlbmFibGVkKQoreworICAgIHY4OjpIYW5k
bGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3Bl
KGNvbnRleHQpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZGlzcGF0Y2hlciA9IHY4OjpM
b2NhbDx2ODo6T2JqZWN0Pjo6Q2FzdCgKKyAgICAgICAgY29udGV4dC0+R2xvYmFsKCktPkdldCh2
ODo6U3RyaW5nOjpOZXcoIkFwdUFnZW50RGlzcGF0Y2hlciIpKSk7CisgICAgaWYgKGRpc3BhdGNo
ZXIuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgZGlzcGF0Y2hlci0+U2V0KHY4OjpT
dHJpbmc6Ok5ldygiZW5hYmxlZCIpLCB2ODo6Qm9vbGVhbjo6TmV3KGVuYWJsZWQpKTsKK30KKwor
Ly8gVE9ETyhwZmVsZG1hbik6IE1ha2UgdGhpcyBwdWJsaWMgaW4gV2ViRGV2VG9vbHNBZ2VudCBB
UEkuCitzdGF0aWMgY29uc3QgY2hhciBrQXB1QWdlbnRGZWF0dXJlTmFtZVtdID0gImFwdS1hZ2Vu
dCI7CisKKy8vIEtlZXAgdGhlc2UgaW4gc3luYyB3aXRoIHRoZSBvbmVzIGluIGluamVjdF9kaXNw
YXRjaC5qcy4KK3N0YXRpYyBjb25zdCBjaGFyIGtUaW1lbGluZUZlYXR1cmVOYW1lW10gPSAidGlt
ZWxpbmUtcHJvZmlsZXIiOworc3RhdGljIGNvbnN0IGNoYXIga1Jlc291cmNlVHJhY2tpbmdGZWF0
dXJlTmFtZVtdID0gInJlc291cmNlLXRyYWNraW5nIjsKKworY2xhc3MgSU9SUENEZWxlZ2F0ZSA6
IHB1YmxpYyBEZXZUb29sc1JQQzo6RGVsZWdhdGUsIHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJs
aWM6CisgICAgSU9SUENEZWxlZ2F0ZSgpIHsgfQorICAgIHZpcnR1YWwgfklPUlBDRGVsZWdhdGUo
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2VuZFJwY01lc3NhZ2UoY29uc3QgV2ViRGV2VG9vbHNN
ZXNzYWdlRGF0YSYgZGF0YSkKKyAgICB7CisgICAgICAgIFdlYkRldlRvb2xzQWdlbnRDbGllbnQ6
OnNlbmRNZXNzYWdlVG9Gcm9udGVuZE9uSU9UaHJlYWQoZGF0YSk7CisgICAgfQorfTsKKworfSAv
LyAgbmFtZXNwYWNlCisKK1dlYkRldlRvb2xzQWdlbnRJbXBsOjpXZWJEZXZUb29sc0FnZW50SW1w
bCgKKyAgICBXZWJWaWV3SW1wbCogd2ViVmlld0ltcGwsCisgICAgV2ViRGV2VG9vbHNBZ2VudENs
aWVudCogY2xpZW50KQorICAgIDogbV9ob3N0SWQoY2xpZW50LT5ob3N0SWRlbnRpZmllcigpKQor
ICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV93ZWJWaWV3SW1wbCh3ZWJWaWV3SW1wbCkK
KyAgICAsIG1fYXB1QWdlbnRFbmFibGVkKGZhbHNlKQorICAgICwgbV9yZXNvdXJjZVRyYWNraW5n
V2FzRW5hYmxlZChmYWxzZSkKKyAgICAsIG1fYXR0YWNoZWQoZmFsc2UpCit7CisgICAgbV9kZWJ1
Z2dlckFnZW50RGVsZWdhdGVTdHViLnNldChuZXcgRGVidWdnZXJBZ2VudERlbGVnYXRlU3R1Yih0
aGlzKSk7CisgICAgbV90b29sc0FnZW50RGVsZWdhdGVTdHViLnNldChuZXcgVG9vbHNBZ2VudERl
bGVnYXRlU3R1Yih0aGlzKSk7CisgICAgbV9hcHVBZ2VudERlbGVnYXRlU3R1Yi5zZXQobmV3IEFw
dUFnZW50RGVsZWdhdGVTdHViKHRoaXMpKTsKK30KKworV2ViRGV2VG9vbHNBZ2VudEltcGw6On5X
ZWJEZXZUb29sc0FnZW50SW1wbCgpCit7CisgICAgRGVidWdnZXJBZ2VudE1hbmFnZXI6Om9uV2Vi
Vmlld0Nsb3NlZChtX3dlYlZpZXdJbXBsKTsKKyAgICBkaXNwb3NlVXRpbGl0eUNvbnRleHQoKTsK
K30KKwordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlzcG9zZVV0aWxpdHlDb250ZXh0KCkK
K3sKKyAgICBpZiAoIW1fdXRpbGl0eUNvbnRleHQuSXNFbXB0eSgpKSB7CisgICAgICAgIG1fdXRp
bGl0eUNvbnRleHQuRGlzcG9zZSgpOworICAgICAgICBtX3V0aWxpdHlDb250ZXh0LkNsZWFyKCk7
CisgICAgfQorfQorCit2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjp1bmhpZGVSZXNvdXJjZXNQ
YW5lbElmTmVjZXNzYXJ5KCkKK3sKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IG1fd2Vi
Vmlld0ltcGwtPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpOworICAgIGljLT5lbnN1cmVS
ZXNvdXJjZVRyYWNraW5nU2V0dGluZ3NMb2FkZWQoKTsKKyAgICBTdHJpbmcgY29tbWFuZCA9IFN0
cmluZzo6Zm9ybWF0KCJbXCJzZXRSZXNvdXJjZXNQYW5lbEVuYWJsZWRcIiwgJXNdIiwKKyAgICAg
ICAgaWMtPnJlc291cmNlVHJhY2tpbmdFbmFibGVkKCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKyAg
ICBtX3Rvb2xzQWdlbnREZWxlZ2F0ZVN0dWItPmRpc3BhdGNoT25DbGllbnQoY29tbWFuZCk7Cit9
CisKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmF0dGFjaCgpCit7CisgICAgaWYgKG1fYXR0
YWNoZWQpCisgICAgICAgIHJldHVybjsKKyAgICBtX2RlYnVnZ2VyQWdlbnRJbXBsLnNldCgKKyAg
ICAgICAgbmV3IERlYnVnZ2VyQWdlbnRJbXBsKG1fd2ViVmlld0ltcGwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2RlYnVnZ2VyQWdlbnREZWxlZ2F0ZVN0dWIuZ2V0KCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzKSk7CisgICAgcmVzZXRJbnNwZWN0b3JGcm9u
dGVuZFByb3h5KCk7CisgICAgdW5oaWRlUmVzb3VyY2VzUGFuZWxJZk5lY2Vzc2FyeSgpOworICAg
IC8vIEFsbG93IGNvbnRyb2xsZXIgdG8gc2VuZCBtZXNzYWdlcyB0byB0aGUgZnJvbnRlbmQuCisg
ICAgSW5zcGVjdG9yQ29udHJvbGxlciogaWMgPSBpbnNwZWN0b3JDb250cm9sbGVyKCk7CisKKyAg
ICB7IC8vIFRPRE8oeXVyeXMpOiB0aGUgc291cmNlIHNob3VsZCBoYXZlIGFscmVhZHkgYmVlbiBw
dXNoZWQgYnkgdGhlIGZyb250ZW5kLgorICAgICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7Cisg
ICAgICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUobV91dGlsaXR5Q29udGV4dCk7
CisgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb25zdHJ1Y3RvclZhbHVlID0gbV91dGls
aXR5Q29udGV4dC0+R2xvYmFsKCktPkdldCgKKyAgICAgICAgICAgIHY4OjpTdHJpbmc6Ok5ldygi
aW5qZWN0ZWRTY3JpcHRDb25zdHJ1Y3RvciIpKTsKKyAgICAgICAgaWYgKGNvbnN0cnVjdG9yVmFs
dWUtPklzRnVuY3Rpb24oKSkgeworICAgICAgICAgICAgU3RyaW5nIHNvdXJjZSA9IFdlYkNvcmU6
OnRvV2ViQ29yZVN0cmluZyhjb25zdHJ1Y3RvclZhbHVlKTsKKyAgICAgICAgICAgIGljLT5pbmpl
Y3RlZFNjcmlwdEhvc3QoKS0+c2V0SW5qZWN0ZWRTY3JpcHRTb3VyY2UoIigiICsgc291cmNlICsg
IikiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGljLT5zZXRXaW5kb3dWaXNpYmxlKHRydWUs
IGZhbHNlKTsKKyAgICBtX2F0dGFjaGVkID0gdHJ1ZTsKK30KKwordm9pZCBXZWJEZXZUb29sc0Fn
ZW50SW1wbDo6ZGV0YWNoKCkKK3sKKyAgICAvLyBQcmV2ZW50IGNvbnRyb2xsZXIgZnJvbSBzZW5k
aW5nIG1lc3NhZ2VzIHRvIHRoZSBmcm9udGVuZC4KKyAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBp
YyA9IG1fd2ViVmlld0ltcGwtPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpOworICAgIGlj
LT5oaWRlSGlnaGxpZ2h0KCk7CisgICAgaWMtPmNsb3NlKCk7CisgICAgZGlzcG9zZVV0aWxpdHlD
b250ZXh0KCk7CisgICAgbV9kZWJ1Z2dlckFnZW50SW1wbC5zZXQoMCk7CisgICAgbV9hdHRhY2hl
ZCA9IGZhbHNlOworICAgIG1fYXB1QWdlbnRFbmFibGVkID0gZmFsc2U7Cit9CisKK3ZvaWQgV2Vi
RGV2VG9vbHNBZ2VudEltcGw6OmRpZE5hdmlnYXRlKCkKK3sKKyAgICBEZWJ1Z2dlckFnZW50TWFu
YWdlcjo6b25OYXZpZ2F0ZSgpOworfQorCit2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpkaWRD
b21taXRQcm92aXNpb25hbExvYWQoV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSwgYm9vbCBpc05ld05h
dmlnYXRpb24pCit7CisgICAgaWYgKCFtX2F0dGFjaGVkKQorICAgICAgICByZXR1cm47CisgICAg
V2ViRGF0YVNvdXJjZSogZHMgPSB3ZWJmcmFtZS0+ZGF0YVNvdXJjZSgpOworICAgIGNvbnN0IFdl
YlVSTFJlcXVlc3QmIHJlcXVlc3QgPSBkcy0+cmVxdWVzdCgpOworICAgIFdlYlVSTCB1cmwgPSBk
cy0+aGFzVW5yZWFjaGFibGVVUkwoKSA/CisgICAgICAgIGRzLT51bnJlYWNoYWJsZVVSTCgpIDoK
KyAgICAgICAgcmVxdWVzdC51cmwoKTsKKyAgICBpZiAoIXdlYmZyYW1lLT5wYXJlbnQoKSkgewor
ICAgICAgICByZXNldEluc3BlY3RvckZyb250ZW5kUHJveHkoKTsKKyAgICAgICAgbV90b29sc0Fn
ZW50RGVsZWdhdGVTdHViLT5mcmFtZU5hdmlnYXRlKAorICAgICAgICAgICAgd2Via2l0X2dsdWU6
OldlYlVSTFRvS1VSTCh1cmwpLnN0cmluZygpKTsKKyAgICAgICAgU2V0QXB1QWdlbnRFbmFibGVk
SW5VdGlsaXR5Q29udGV4dChtX3V0aWxpdHlDb250ZXh0LCBtX2FwdUFnZW50RW5hYmxlZCk7Cisg
ICAgICAgIHVuaGlkZVJlc291cmNlc1BhbmVsSWZOZWNlc3NhcnkoKTsKKyAgICB9Cit9CisKK3Zv
aWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpZENsZWFyV2luZG93T2JqZWN0KFdlYkZyYW1lSW1w
bCogd2ViZnJhbWUpCit7CisgICAgRGVidWdnZXJBZ2VudE1hbmFnZXI6OnNldEhvc3RJZCh3ZWJm
cmFtZSwgbV9ob3N0SWQpOworICAgIGlmIChtX2F0dGFjaGVkKSB7CisgICAgICAgIC8vIFB1c2gg
Y29udGV4dCBpZCBpbnRvIHRoZSBjbGllbnQgaWYgaXQgaXMgYWxyZWFkeSBhdHRhY2hlZC4KKyAg
ICAgICAgbV9kZWJ1Z2dlckFnZW50RGVsZWdhdGVTdHViLT5zZXRDb250ZXh0SWQobV9ob3N0SWQp
OworICAgIH0KK30KKwordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6Zm9yY2VSZXBhaW50KCkK
K3sKKyAgICBtX2NsaWVudC0+Zm9yY2VSZXBhaW50KCk7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNB
Z2VudEltcGw6OmRpc3BhdGNoT25JbnNwZWN0b3JDb250cm9sbGVyKAorICAgICAgaW50IGNhbGxJ
ZCwKKyAgICAgIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLAorICAgICAgY29uc3QgU3RyaW5n
JiBqc29uQXJncykKK3sKKyAgICBTdHJpbmcgcmVzdWx0OworICAgIFN0cmluZyBleGNlcHRpb247
CisgICAgcmVzdWx0ID0gbV9kZWJ1Z2dlckFnZW50SW1wbC0+ZXhlY3V0ZVV0aWxpdHlGdW5jdGlv
bihtX3V0aWxpdHlDb250ZXh0LCBjYWxsSWQsCisgICAgICAgICJJbnNwZWN0b3JDb250cm9sbGVy
RGlzcGF0Y2hlciIsIGZ1bmN0aW9uTmFtZSwganNvbkFyZ3MsIGZhbHNlIC8qIGlzIHN5bmMgKi8s
ICZleGNlcHRpb24pOworICAgIG1fdG9vbHNBZ2VudERlbGVnYXRlU3R1Yi0+ZGlkRGlzcGF0Y2hP
bihjYWxsSWQsIHJlc3VsdCwgZXhjZXB0aW9uKTsKK30KKwordm9pZCBXZWJEZXZUb29sc0FnZW50
SW1wbDo6ZGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KAorICAgICAgaW50IGNhbGxJZCwKKyAgICAg
IGludCBpbmplY3RlZFNjcmlwdElkLAorICAgICAgY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUs
CisgICAgICBjb25zdCBTdHJpbmcmIGpzb25BcmdzLAorICAgICAgYm9vbCBhc3luYykKK3sKKyAg
ICBpbnNwZWN0b3JDb250cm9sbGVyKCktPmluc3BlY3RvckJhY2tlbmQoKS0+ZGlzcGF0Y2hPbklu
amVjdGVkU2NyaXB0KAorICAgICAgICBjYWxsSWQsCisgICAgICAgIGluamVjdGVkU2NyaXB0SWQs
CisgICAgICAgIGZ1bmN0aW9uTmFtZSwKKyAgICAgICAganNvbkFyZ3MsCisgICAgICAgIGFzeW5j
KTsKK30KKwordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6ZXhlY3V0ZVZvaWRKYXZhU2NyaXB0
KCkKK3sKKyAgICBtX2RlYnVnZ2VyQWdlbnRJbXBsLT5leGVjdXRlVm9pZEphdmFTY3JpcHQobV91
dGlsaXR5Q29udGV4dCk7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpc3BhdGNo
TWVzc2FnZUZyb21Gcm9udGVuZChjb25zdCBXZWJEZXZUb29sc01lc3NhZ2VEYXRhJiBkYXRhKQor
eworICAgIGlmIChUb29sc0FnZW50RGlzcGF0Y2g6OmRpc3BhdGNoKHRoaXMsIGRhdGEpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fYXR0YWNoZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChtX2RlYnVnZ2VyQWdlbnRJbXBsLmdldCgpICYmIERlYnVnZ2VyQWdlbnREaXNwYXRj
aDo6ZGlzcGF0Y2gobV9kZWJ1Z2dlckFnZW50SW1wbC5nZXQoKSwgZGF0YSkpCisgICAgICAgIHJl
dHVybjsKK30KKwordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6aW5zcGVjdEVsZW1lbnRBdChj
b25zdCBXZWJQb2ludCYgcG9pbnQpCit7CisgICAgbV93ZWJWaWV3SW1wbC0+aW5zcGVjdEVsZW1l
bnRBdChwb2ludCk7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OnNldFJ1bnRpbWVG
ZWF0dXJlRW5hYmxlZChjb25zdCBXZWJTdHJpbmcmIHdmZWF0dXJlLCBib29sIGVuYWJsZWQpCit7
CisgICAgU3RyaW5nIGZlYXR1cmUgPSB3ZWJraXRfZ2x1ZTo6V2ViU3RyaW5nVG9TdHJpbmcod2Zl
YXR1cmUpOworICAgIGlmIChmZWF0dXJlID09IGtBcHVBZ2VudEZlYXR1cmVOYW1lKQorICAgICAg
ICBzZXRBcHVBZ2VudEVuYWJsZWQoZW5hYmxlZCk7CisgICAgZWxzZSBpZiAoZmVhdHVyZSA9PSBr
VGltZWxpbmVGZWF0dXJlTmFtZSkKKyAgICAgICAgc2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVk
KGVuYWJsZWQpOworICAgIGVsc2UgaWYgKGZlYXR1cmUgPT0ga1Jlc291cmNlVHJhY2tpbmdGZWF0
dXJlTmFtZSkgeworICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IG1fd2ViVmlld0lt
cGwtPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpOworICAgICAgICBpZiAoZW5hYmxlZCkK
KyAgICAgICAgICBpYy0+ZW5hYmxlUmVzb3VyY2VUcmFja2luZyhmYWxzZSAvKiBub3Qgc3RpY2t5
ICovLCBmYWxzZSAvKiBubyByZWxvYWQgKi8pOworICAgICAgICBlbHNlCisgICAgICAgICAgaWMt
PmRpc2FibGVSZXNvdXJjZVRyYWNraW5nKGZhbHNlIC8qIG5vdCBzdGlja3kgKi8pOworICAgIH0K
K30KKwordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6c2VuZFJwY01lc3NhZ2UoY29uc3QgV2Vi
RGV2VG9vbHNNZXNzYWdlRGF0YSYgZGF0YSkKK3sKKyAgICBtX2NsaWVudC0+c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKGRhdGEpOworfQorCit2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpjb21waWxl
VXRpbGl0eVNjcmlwdHMoKQoreworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKyAg
ICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKG1fdXRpbGl0eUNvbnRleHQpOworICAg
IC8vIEluamVjdCBqYXZhc2NyaXB0IGludG8gdGhlIGNvbnRleHQuCisgICAgV2ViQ1N0cmluZyBp
bmplY3RlZFNjcmlwdEpzID0gbV9jbGllbnQtPmluamVjdGVkU2NyaXB0U291cmNlKCk7CisgICAg
djg6OlNjcmlwdDo6Q29tcGlsZSh2ODo6U3RyaW5nOjpOZXcoCisgICAgICAgIGluamVjdGVkU2Ny
aXB0SnMuZGF0YSgpLAorICAgICAgICBpbmplY3RlZFNjcmlwdEpzLmxlbmd0aCgpKSktPlJ1bigp
OworICAgIFdlYkNTdHJpbmcgaW5qZWN0RGlzcGF0Y2hKcyA9IG1fY2xpZW50LT5pbmplY3RlZFNj
cmlwdERpc3BhdGNoZXJTb3VyY2UoKTsKKyAgICB2ODo6U2NyaXB0OjpDb21waWxlKHY4OjpTdHJp
bmc6Ok5ldygKKyAgICAgICAgaW5qZWN0RGlzcGF0Y2hKcy5kYXRhKCksCisgICAgICAgIGluamVj
dERpc3BhdGNoSnMubGVuZ3RoKCkpKS0+UnVuKCk7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNBZ2Vu
dEltcGw6OmluaXREZXZUb29sc0FnZW50SG9zdCgpCit7CisgICAgQm91bmRPYmplY3QgZGV2dG9v
bHNBZ2VudEhvc3QobV91dGlsaXR5Q29udGV4dCwgdGhpcywgIkRldlRvb2xzQWdlbnRIb3N0Iik7
CisgICAgZGV2dG9vbHNBZ2VudEhvc3QuYWRkUHJvdG9GdW5jdGlvbigKKyAgICAgICAgImRpc3Bh
dGNoIiwKKyAgICAgICAgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmpzRGlzcGF0Y2hPbkNsaWVudCk7
CisgICAgZGV2dG9vbHNBZ2VudEhvc3QuYWRkUHJvdG9GdW5jdGlvbigKKyAgICAgICAgImRpc3Bh
dGNoVG9BcHUiLAorICAgICAgICBXZWJEZXZUb29sc0FnZW50SW1wbDo6anNEaXNwYXRjaFRvQXB1
KTsKKyAgICBkZXZ0b29sc0FnZW50SG9zdC5hZGRQcm90b0Z1bmN0aW9uKAorICAgICAgICAiZXZh
bHVhdGVPblNlbGYiLAorICAgICAgICBXZWJEZXZUb29sc0FnZW50SW1wbDo6anNFdmFsdWF0ZU9u
U2VsZik7CisgICAgZGV2dG9vbHNBZ2VudEhvc3QuYWRkUHJvdG9GdW5jdGlvbigKKyAgICAgICAg
InJ1bnRpbWVGZWF0dXJlU3RhdGVDaGFuZ2VkIiwKKyAgICAgICAgV2ViRGV2VG9vbHNBZ2VudElt
cGw6OmpzT25SdW50aW1lRmVhdHVyZVN0YXRlQ2hhbmdlZCk7CisgICAgZGV2dG9vbHNBZ2VudEhv
c3QuYnVpbGQoKTsKKworICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6Q29udGV4
dDo6U2NvcGUgdXRpbGl0eVNjb3BlKG1fdXRpbGl0eUNvbnRleHQpOworICAgIC8vIENhbGwgY3Vz
dG9tIGNvZGUgdG8gY3JlYXRlIGluc3BlY3RvciBiYWNrZW5kIHdyYXBwZXIgaW4gdGhlIHV0aWxp
dHkgY29udGV4dAorICAgIC8vIGluc3RlYWQgb2YgY2FsbGluZyBWOERPTVdyYXBwZXI6OmNvbnZl
cnRUb1Y4T2JqZWN0IHRoYXQgd291bGQgY3JlYXRlIHRoZQorICAgIC8vIHdyYXBwZXIgaW4gdGhl
IFBhZ2UgbWFpbiBmcmFtZSBjb250ZXh0LgorICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gYmFj
a2VuZFdyYXBwZXIgPSBjcmVhdGVJbnNwZWN0b3JCYWNrZW5kVjhXcmFwcGVyKCk7CisgICAgaWYg
KGJhY2tlbmRXcmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fdXRpbGl0
eUNvbnRleHQtPkdsb2JhbCgpLT5TZXQodjg6OlN0cmluZzo6TmV3KCJJbnNwZWN0b3JCYWNrZW5k
IiksIGJhY2tlbmRXcmFwcGVyKTsKK30KKwordjg6OkxvY2FsPHY4OjpPYmplY3Q+IFdlYkRldlRv
b2xzQWdlbnRJbXBsOjpjcmVhdGVJbnNwZWN0b3JCYWNrZW5kVjhXcmFwcGVyKCkKK3sKKyAgICBW
OENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgZGVzY3JpcHRvclR5cGUgPSBWOENsYXNzSW5kZXg6
OklOU1BFQ1RPUkJBQ0tFTkQ7CisgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IGZ1bmN0aW9u
ID0gVjhET01XcmFwcGVyOjpnZXRUZW1wbGF0ZShkZXNjcmlwdG9yVHlwZSktPkdldEZ1bmN0aW9u
KCk7CisgICAgaWYgKGZ1bmN0aW9uLklzRW1wdHkoKSkgeworICAgICAgICAvLyBSZXR1cm4gaWYg
YWxsb2NhdGlvbiBmYWlsZWQuCisgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6Ok9iamVjdD4o
KTsKKyAgICB9CisgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGluc3RhbmNlID0gU2FmZUFsbG9j
YXRpb246Om5ld0luc3RhbmNlKGZ1bmN0aW9uKTsKKyAgICBpZiAoaW5zdGFuY2UuSXNFbXB0eSgp
KSB7CisgICAgICAgIC8vIEF2b2lkIHNldHRpbmcgdGhlIHdyYXBwZXIgaWYgYWxsb2NhdGlvbiBm
YWlsZWQuCisgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6Ok9iamVjdD4oKTsKKyAgICB9Cisg
ICAgSW5zcGVjdG9yQmFja2VuZCogYmFja2VuZCA9IG1fd2ViVmlld0ltcGwtPnBhZ2UoKS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLT5pbnNwZWN0b3JCYWNrZW5kKCk7CisgICAgVjhET01XcmFwcGVy
OjpzZXRET01XcmFwcGVyKGluc3RhbmNlLCBWOENsYXNzSW5kZXg6OlRvSW50KGRlc2NyaXB0b3JU
eXBlKSwgYmFja2VuZCk7CisgICAgLy8gQ3JlYXRlIGEgd2VhayByZWZlcmVuY2UgdG8gdGhlIHY4
IHdyYXBwZXIgb2YgSW5zcGVjdG9yQmFja2VuZCB0byBkZXJlZgorICAgIC8vIEluc3BlY3RvckJh
Y2tlbmQgd2hlbiB0aGUgd3JhcHBlciBpcyBnYXJiYWdlIGNvbGxlY3RlZC4KKyAgICBiYWNrZW5k
LT5yZWYoKTsKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3ZWFrSGFuZGxlID0gdjg6
OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhpbnN0YW5jZSk7CisgICAgd2Vha0hhbmRsZS5N
YWtlV2VhayhiYWNrZW5kLCAmSW5zcGVjdG9yQmFja2VuZFdlYWtSZWZlcmVuY2VDYWxsYmFjayk7
CisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCit2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpy
ZXNldEluc3BlY3RvckZyb250ZW5kUHJveHkoKQoreworICAgIGRpc3Bvc2VVdGlsaXR5Q29udGV4
dCgpOworICAgIG1fZGVidWdnZXJBZ2VudEltcGwtPmNyZWF0ZVV0aWxpdHlDb250ZXh0KG1fd2Vi
Vmlld0ltcGwtPnBhZ2UoKS0+bWFpbkZyYW1lKCksICZtX3V0aWxpdHlDb250ZXh0KTsKKyAgICBj
b21waWxlVXRpbGl0eVNjcmlwdHMoKTsKKyAgICBpbml0RGV2VG9vbHNBZ2VudEhvc3QoKTsKKwor
ICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4
dFNjb3BlKG1fdXRpbGl0eUNvbnRleHQpOworICAgIFNjcmlwdFN0YXRlKiBzdGF0ZSA9IFNjcmlw
dFN0YXRlOjpmb3JDb250ZXh0KAorICAgICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXco
bV91dGlsaXR5Q29udGV4dCkpOworICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGljID0gaW5zcGVj
dG9yQ29udHJvbGxlcigpOworICAgIGljLT5zZXRGcm9udGVuZFByb3h5T2JqZWN0KHN0YXRlLCBT
Y3JpcHRPYmplY3Qoc3RhdGUsIG1fdXRpbGl0eUNvbnRleHQtPkdsb2JhbCgpKSk7Cit9CisKK3Zv
aWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OnNldEFwdUFnZW50RW5hYmxlZChib29sIGVuYWJsZWQp
Cit7CisgICAgbV9hcHVBZ2VudEVuYWJsZWQgPSBlbmFibGVkOworICAgIFNldEFwdUFnZW50RW5h
YmxlZEluVXRpbGl0eUNvbnRleHQobV91dGlsaXR5Q29udGV4dCwgZW5hYmxlZCk7CisgICAgSW5z
cGVjdG9yQ29udHJvbGxlciogaWMgPSBtX3dlYlZpZXdJbXBsLT5wYWdlKCktPmluc3BlY3RvckNv
bnRyb2xsZXIoKTsKKyAgICBpZiAoZW5hYmxlZCkgeworICAgICAgICBtX3Jlc291cmNlVHJhY2tp
bmdXYXNFbmFibGVkID0gaWMtPnJlc291cmNlVHJhY2tpbmdFbmFibGVkKCk7CisgICAgICAgIGlj
LT5zdGFydFRpbWVsaW5lUHJvZmlsZXIoKTsKKyAgICAgICAgaWYgKCFtX3Jlc291cmNlVHJhY2tp
bmdXYXNFbmFibGVkKSB7CisgICAgICAgICAgICAvLyBUT0RPKGtub3J0b24pOiBJbnRyb2R1Y2Ug
c29tZSBraW5kIG9mIGFnZW50cyBkZXBlbmRlbmN5IGhlcmUgc28gdGhhdAorICAgICAgICAgICAg
Ly8gdXNlciBjb3VsZCB0dXJuIG9mZiByZXNvdXJjZSB0cmFja2luZyB3aGlsZSBhcHUgYWdlbnQg
aXMgb24uCisgICAgICAgICAgICBpYy0+ZW5hYmxlUmVzb3VyY2VUcmFja2luZyhmYWxzZSwgZmFs
c2UpOworICAgICAgICB9CisgICAgICAgIG1fZGVidWdnZXJBZ2VudEltcGwtPnNldEF1dG9Db250
aW51ZU9uRXhjZXB0aW9uKHRydWUpOworICAgIH0gZWxzZSB7CisgICAgICBpYy0+c3RvcFRpbWVs
aW5lUHJvZmlsZXIoKTsKKyAgICAgIGlmICghbV9yZXNvdXJjZVRyYWNraW5nV2FzRW5hYmxlZCkK
KyAgICAgICAgICBpYy0+ZGlzYWJsZVJlc291cmNlVHJhY2tpbmcoZmFsc2UpOworICAgICAgbV9y
ZXNvdXJjZVRyYWNraW5nV2FzRW5hYmxlZCA9IGZhbHNlOworICAgIH0KKyAgICBtX2NsaWVudC0+
cnVudGltZUZlYXR1cmVTdGF0ZUNoYW5nZWQoCisgICAgICAgIHdlYmtpdF9nbHVlOjpTdHJpbmdU
b1dlYlN0cmluZyhrQXB1QWdlbnRGZWF0dXJlTmFtZSksCisgICAgICAgIGVuYWJsZWQpOworfQor
CisvLyBzdGF0aWMKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJEZXZUb29sc0FnZW50SW1wbDo6
anNEaXNwYXRjaE9uQ2xpZW50KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgdjg6
OlRyeUNhdGNoIGV4Y2VwdGlvbkNhdGNoZXI7CisgICAgU3RyaW5nIG1lc3NhZ2UgPSBXZWJDb3Jl
Ojp0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKGFyZ3NbMF0pOworICAgIGlmIChtZXNzYWdl
LmlzRW1wdHkoKSB8fCBleGNlcHRpb25DYXRjaGVyLkhhc0NhdWdodCgpKQorICAgICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIFdlYkRldlRvb2xzQWdlbnRJbXBsKiBhZ2VudCA9IHN0
YXRpY19jYXN0PFdlYkRldlRvb2xzQWdlbnRJbXBsKj4odjg6OkV4dGVybmFsOjpDYXN0KCphcmdz
LkRhdGEoKSktPlZhbHVlKCkpOworICAgIGFnZW50LT5tX3Rvb2xzQWdlbnREZWxlZ2F0ZVN0dWIt
PmRpc3BhdGNoT25DbGllbnQobWVzc2FnZSk7CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsK
K30KKworLy8gc3RhdGljCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNBZ2VudElt
cGw6OmpzRGlzcGF0Y2hUb0FwdShjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIHY4
OjpUcnlDYXRjaCBleGNlcHRpb25DYXRjaGVyOworICAgIFN0cmluZyBtZXNzYWdlID0gV2ViQ29y
ZTo6dG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhhcmdzWzBdKTsKKyAgICBpZiAobWVzc2Fn
ZS5pc0VtcHR5KCkgfHwgZXhjZXB0aW9uQ2F0Y2hlci5IYXNDYXVnaHQoKSkKKyAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICBXZWJEZXZUb29sc0FnZW50SW1wbCogYWdlbnQgPSBz
dGF0aWNfY2FzdDxXZWJEZXZUb29sc0FnZW50SW1wbCo+KAorICAgICAgICB2ODo6RXh0ZXJuYWw6
OkNhc3QoKmFyZ3MuRGF0YSgpKS0+VmFsdWUoKSk7CisgICAgYWdlbnQtPm1fYXB1QWdlbnREZWxl
Z2F0ZVN0dWItPmRpc3BhdGNoVG9BcHUobWVzc2FnZSk7CisgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKK30KKworLy8gc3RhdGljCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNB
Z2VudEltcGw6OmpzRXZhbHVhdGVPblNlbGYoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sK
KyAgICBTdHJpbmcgY29kZTsKKyAgICB7CisgICAgICAgIHY4OjpUcnlDYXRjaCBleGNlcHRpb25D
YXRjaGVyOworICAgICAgICBjb2RlID0gV2ViQ29yZTo6dG9XZWJDb3JlU3RyaW5nV2l0aE51bGxD
aGVjayhhcmdzWzBdKTsKKyAgICAgICAgaWYgKGNvZGUuaXNFbXB0eSgpIHx8IGV4Y2VwdGlvbkNh
dGNoZXIuSGFzQ2F1Z2h0KCkpCisgICAgICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwor
ICAgIH0KKyAgICBXZWJEZXZUb29sc0FnZW50SW1wbCogYWdlbnQgPSBzdGF0aWNfY2FzdDxXZWJE
ZXZUb29sc0FnZW50SW1wbCo+KHY4OjpFeHRlcm5hbDo6Q2FzdCgqYXJncy5EYXRhKCkpLT5WYWx1
ZSgpKTsKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUoYWdlbnQtPm1fdXRpbGl0eUNvbnRleHQpOwor
ICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoYWdlbnQtPm1fd2ViVmlld0lt
cGwtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpOworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHJlc3Vs
dCA9IHByb3h5LT5ydW5TY3JpcHQodjg6OlNjcmlwdDo6Q29tcGlsZSh2ODo6U3RyaW5nOjpOZXco
Y29kZS51dGY4KCkuZGF0YSgpKSksIHRydWUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8v
IHN0YXRpYwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzQWdlbnRJbXBsOjpqc09u
UnVudGltZUZlYXR1cmVTdGF0ZUNoYW5nZWQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sK
KyAgdjg6OlRyeUNhdGNoIGV4Y2VwdGlvbkNhdGNoZXI7CisgIFN0cmluZyBmZWF0dXJlID0gV2Vi
Q29yZTo6dG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhhcmdzWzBdKTsKKyAgYm9vbCBlbmFi
bGVkID0gYXJnc1sxXS0+VG9Cb29sZWFuKCktPlZhbHVlKCk7CisgIGlmIChmZWF0dXJlLmlzRW1w
dHkoKSB8fCBleGNlcHRpb25DYXRjaGVyLkhhc0NhdWdodCgpKQorICAgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKKyAgV2ViRGV2VG9vbHNBZ2VudEltcGwqIGFnZW50ID0gc3RhdGljX2Nhc3Q8
V2ViRGV2VG9vbHNBZ2VudEltcGwqPih2ODo6RXh0ZXJuYWw6OkNhc3QoKmFyZ3MuRGF0YSgpKS0+
VmFsdWUoKSk7CisgIGFnZW50LT5tX2NsaWVudC0+cnVudGltZUZlYXR1cmVTdGF0ZUNoYW5nZWQo
d2Via2l0X2dsdWU6OlN0cmluZ1RvV2ViU3RyaW5nKGZlYXR1cmUpLCBlbmFibGVkKTsKKyAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKworCitXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
KiBXZWJEZXZUb29sc0FnZW50SW1wbDo6aW5zcGVjdG9yQ29udHJvbGxlcigpCit7CisgICAgaWYg
KFBhZ2UqIHBhZ2UgPSBtX3dlYlZpZXdJbXBsLT5wYWdlKCkpCisgICAgICAgIHJldHVybiBwYWdl
LT5pbnNwZWN0b3JDb250cm9sbGVyKCk7CisgICAgcmV0dXJuIDA7Cit9CisKKworLy8tLS0tLS0t
IHBsdWdpbiByZXNvdXJjZSBsb2FkIG5vdGlmaWNhdGlvbnMgLS0tLS0tLS0tLS0tLS0tCit2b2lk
IFdlYkRldlRvb2xzQWdlbnRJbXBsOjppZGVudGlmaWVyRm9ySW5pdGlhbFJlcXVlc3QoCisgICAg
dW5zaWduZWQgbG9uZyByZXNvdXJjZUlkLAorICAgIFdlYkZyYW1lKiBmcmFtZSwKKyAgICBjb25z
dCBXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVy
KiBpYyA9IGluc3BlY3RvckNvbnRyb2xsZXIoKSkgeworICAgICAgICBXZWJGcmFtZUltcGwqIHdl
YkZyYW1lSW1wbCA9IHN0YXRpY19jYXN0PFdlYkZyYW1lSW1wbCo+KGZyYW1lKTsKKyAgICAgICAg
RnJhbWVMb2FkZXIqIGZyYW1lTG9hZGVyID0gd2ViRnJhbWVJbXBsLT5mcmFtZSgpLT5sb2FkZXIo
KTsKKyAgICAgICAgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IGZyYW1lTG9hZGVyLT5hY3RpdmVE
b2N1bWVudExvYWRlcigpOworICAgICAgICBpYy0+aWRlbnRpZmllckZvckluaXRpYWxSZXF1ZXN0
KHJlc291cmNlSWQsIGxvYWRlciwgcmVxdWVzdC50b1Jlc291cmNlUmVxdWVzdCgpKTsKKyAgICB9
Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OndpbGxTZW5kUmVxdWVzdCh1bnNpZ25l
ZCBsb25nIHJlc291cmNlSWQsIGNvbnN0IFdlYlVSTFJlcXVlc3QmIHJlcXVlc3QpCit7CisgIGlm
IChJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGluc3BlY3RvckNvbnRyb2xsZXIoKSkKKyAgICAg
IGljLT53aWxsU2VuZFJlcXVlc3QocmVzb3VyY2VJZCwgcmVxdWVzdC50b1Jlc291cmNlUmVxdWVz
dCgpLCBSZXNvdXJjZVJlc3BvbnNlKCkpOworfQorCit2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBs
OjpkaWRSZWNlaXZlRGF0YSh1bnNpZ25lZCBsb25nIHJlc291cmNlSWQsIGludCBsZW5ndGgpCit7
CisgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGljID0gaW5zcGVjdG9yQ29udHJvbGxlcigp
KQorICAgICAgICBpYy0+ZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgocmVzb3VyY2VJZCwgbGVuZ3Ro
KTsKK30KKwordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVu
c2lnbmVkIGxvbmcgcmVzb3VyY2VJZCwgY29uc3QgV2ViVVJMUmVzcG9uc2UmIHJlc3BvbnNlKQor
eworICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGluc3BlY3RvckNvbnRyb2xsZXIo
KSkKKyAgICAgICAgaWMtPmRpZFJlY2VpdmVSZXNwb25zZShyZXNvdXJjZUlkLCByZXNwb25zZS50
b1Jlc291cmNlUmVzcG9uc2UoKSk7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmRp
ZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyByZXNvdXJjZUlkKQoreworICAgIGlmIChJbnNw
ZWN0b3JDb250cm9sbGVyKiBpYyA9IGluc3BlY3RvckNvbnRyb2xsZXIoKSkKKyAgICAgICAgaWMt
PmRpZEZpbmlzaExvYWRpbmcocmVzb3VyY2VJZCk7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNBZ2Vu
dEltcGw6OmRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VJZCwgY29uc3QgV2Vi
VVJMRXJyb3ImIGVycm9yKQoreworICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcjsKKyAg
ICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaWMgPSBpbnNwZWN0b3JDb250cm9sbGVyKCkpCisg
ICAgICAgIGljLT5kaWRGYWlsTG9hZGluZyhyZXNvdXJjZUlkLCByZXNvdXJjZUVycm9yKTsKK30K
Kwordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihsb25n
IGNhbGxJZCwgY29uc3QgV2ViU3RyaW5nJiBzY3JpcHQpCit7CisgICAgSW5zcGVjdG9yQ29udHJv
bGxlciogaWMgPSBpbnNwZWN0b3JDb250cm9sbGVyKCk7CisgICAgaWMtPmV2YWx1YXRlRm9yVGVz
dEluRnJvbnRlbmQoY2FsbElkLCB3ZWJraXRfZ2x1ZTo6V2ViU3RyaW5nVG9TdHJpbmcoc2NyaXB0
KSk7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OnNldFRpbWVsaW5lUHJvZmlsaW5n
RW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaWMgPSBp
bnNwZWN0b3JDb250cm9sbGVyKCk7CisgICAgaWYgKGVuYWJsZWQpCisgICAgICAgIGljLT5zdGFy
dFRpbWVsaW5lUHJvZmlsZXIoKTsKKyAgICBlbHNlCisgICAgICAgIGljLT5zdG9wVGltZWxpbmVQ
cm9maWxlcigpOworfQorCitXZWJEZXZUb29sc0FnZW50KiBXZWJEZXZUb29sc0FnZW50OjpjcmVh
dGUoV2ViVmlldyogd2VidmlldywgV2ViRGV2VG9vbHNBZ2VudENsaWVudCogY2xpZW50KQorewor
ICAgIHJldHVybiBuZXcgV2ViRGV2VG9vbHNBZ2VudEltcGwoc3RhdGljX2Nhc3Q8V2ViVmlld0lt
cGwqPih3ZWJ2aWV3KSwgY2xpZW50KTsKK30KKwordm9pZCBXZWJEZXZUb29sc0FnZW50OjpleGVj
dXRlRGVidWdnZXJDb21tYW5kKGNvbnN0IFdlYlN0cmluZyYgY29tbWFuZCwgaW50IGNhbGxlcklk
KQoreworICAgIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpleGVjdXRlRGVidWdnZXJDb21tYW5kKHdl
YmtpdF9nbHVlOjpXZWJTdHJpbmdUb1N0cmluZyhjb21tYW5kKSwgY2FsbGVySWQpOworfQorCit2
b2lkIFdlYkRldlRvb2xzQWdlbnQ6OmRlYnVnZ2VyUGF1c2VTY3JpcHQoKQoreworICAgIERlYnVn
Z2VyQWdlbnRNYW5hZ2VyOjpwYXVzZVNjcmlwdCgpOworfQorCit2b2lkIFdlYkRldlRvb2xzQWdl
bnQ6OnNldE1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyKE1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5k
bGVyIGhhbmRsZXIpCit7CisgICAgRGVidWdnZXJBZ2VudE1hbmFnZXI6OnNldE1lc3NhZ2VMb29w
RGlzcGF0Y2hIYW5kbGVyKGhhbmRsZXIpOworfQorCitib29sIFdlYkRldlRvb2xzQWdlbnQ6OmRp
c3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZE9uSU9UaHJlYWQoY29uc3QgV2ViRGV2VG9vbHNNZXNz
YWdlRGF0YSYgZGF0YSkKK3sKKyAgICBJT1JQQ0RlbGVnYXRlIHRyYW5zcG9ydDsKKyAgICBQcm9m
aWxlckFnZW50RGVsZWdhdGVTdHViIHN0dWIoJnRyYW5zcG9ydCk7CisgICAgUHJvZmlsZXJBZ2Vu
dEltcGwgYWdlbnQoJnN0dWIpOworICAgIHJldHVybiBQcm9maWxlckFnZW50RGlzcGF0Y2g6OmRp
c3BhdGNoKCZhZ2VudCwgZGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjU0MmYwNDkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmgKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdl
YkRldlRvb2xzQWdlbnRJbXBsX2gKKyNkZWZpbmUgV2ViRGV2VG9vbHNBZ2VudEltcGxfaAorCisj
aW5jbHVkZSAiQVBVQWdlbnREZWxlZ2F0ZS5oIgorI2luY2x1ZGUgIkRldlRvb2xzUlBDLmgiCisj
aW5jbHVkZSAiVG9vbHNBZ2VudC5oIgorI2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnRQcml2YXRl
LmgiCisKKyNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworICAgIGNsYXNzIERvY3VtZW50OworICAgIGNsYXNzIEluc3BlY3RvckNv
bnRyb2xsZXI7CisgICAgY2xhc3MgTm9kZTsKKyAgICBjbGFzcyBTdHJpbmc7Cit9CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCisgICAgY2xhc3MgRGVidWdnZXJBZ2VudERlbGVnYXRlU3R1YjsKKyAg
ICBjbGFzcyBEZWJ1Z2dlckFnZW50SW1wbDsKKyAgICBjbGFzcyBXZWJEZXZUb29sc0FnZW50Q2xp
ZW50OworICAgIGNsYXNzIFdlYkZyYW1lOworICAgIGNsYXNzIFdlYkZyYW1lSW1wbDsKKyAgICBj
bGFzcyBXZWJTdHJpbmc7CisgICAgY2xhc3MgV2ViVVJMUmVxdWVzdDsKKyAgICBjbGFzcyBXZWJV
UkxSZXNwb25zZTsKKyAgICBjbGFzcyBXZWJWaWV3SW1wbDsKKyAgICBzdHJ1Y3QgV2ViVVJMRXJy
b3I7CisgICAgc3RydWN0IFdlYkRldlRvb2xzTWVzc2FnZURhdGE7CisKK2NsYXNzIFdlYkRldlRv
b2xzQWdlbnRJbXBsIDogcHVibGljIFdlYkRldlRvb2xzQWdlbnRQcml2YXRlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdWJsaWMgVG9vbHNBZ2VudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIERldlRvb2xzUlBDOjpEZWxlZ2F0ZSB7CitwdWJsaWM6CisgICAg
V2ViRGV2VG9vbHNBZ2VudEltcGwoV2ViVmlld0ltcGwqIHdlYlZpZXdJbXBsLCBXZWJEZXZUb29s
c0FnZW50Q2xpZW50KiBjbGllbnQpOworICAgIHZpcnR1YWwgfldlYkRldlRvb2xzQWdlbnRJbXBs
KCk7CisKKyAgICAvLyBUb29sc0FnZW50IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaE9uSW5zcGVjdG9yQ29udHJvbGxlcigKKyAgICAgICAgaW50IGNhbGxJZCwKKyAg
ICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBmdW5jdGlvbk5hbWUsCisgICAgICAgIGNvbnN0
IFdlYkNvcmU6OlN0cmluZyYganNvbkFyZ3MpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaE9u
SW5qZWN0ZWRTY3JpcHQoCisgICAgICAgIGludCBjYWxsSWQsCisgICAgICAgIGludCBpbmplY3Rl
ZFNjcmlwdElkLAorICAgICAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGZ1bmN0aW9uTmFtZSwK
KyAgICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBqc29uQXJncywKKyAgICAgICAgYm9vbCBh
c3luYyk7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVWb2lkSmF2YVNjcmlwdCgpOworCisgICAg
Ly8gV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2
b2lkIGRpZENsZWFyV2luZG93T2JqZWN0KFdlYkZyYW1lSW1wbCogZnJhbWUpOworICAgIHZpcnR1
YWwgdm9pZCBkaWRDb21taXRQcm92aXNpb25hbExvYWQoV2ViRnJhbWVJbXBsKiBmcmFtZSwgYm9v
bCBpc05ld05hdmlnYXRpb24pOworCisgICAgLy8gV2ViRGV2VG9vbHNBZ2VudCBpbXBsZW1lbnRh
dGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CisgICAgdmlydHVhbCB2b2lkIGRldGFj
aCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWROYXZpZ2F0ZSgpOworICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQoY29uc3QgV2ViRGV2VG9vbHNNZXNzYWdlRGF0YSYg
ZGF0YSk7CisgICAgdmlydHVhbCB2b2lkIGluc3BlY3RFbGVtZW50QXQoY29uc3QgV2ViUG9pbnQm
IHBvaW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgZXZhbHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNh
bGxJZCwgY29uc3QgV2ViU3RyaW5nJiBzY3JpcHQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRSdW50
aW1lRmVhdHVyZUVuYWJsZWQoY29uc3QgV2ViU3RyaW5nJiBmZWF0dXJlLCBib29sIGVuYWJsZWQp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQoYm9vbCBlbmFi
bGUpOworCisgICAgdmlydHVhbCB2b2lkIGlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdCh1bnNp
Z25lZCBsb25nLCBXZWJGcmFtZSosIGNvbnN0IFdlYlVSTFJlcXVlc3QmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgd2lsbFNlbmRSZXF1ZXN0KHVuc2lnbmVkIGxvbmcsIGNvbnN0IFdlYlVSTFJlcXVlc3Qm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEodW5zaWduZWQgbG9uZywgaW50IGxl
bmd0aCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25n
LCBjb25zdCBXZWJVUkxSZXNwb25zZSYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nKHVuc2lnbmVkIGxvbmcpOworICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsTG9hZGluZyh1bnNp
Z25lZCBsb25nLCBjb25zdCBXZWJVUkxFcnJvciYpOworCisgICAgLy8gRGV2VG9vbHNSUEM6OkRl
bGVnYXRlIGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBzZW5kUnBjTWVzc2FnZShj
b25zdCBXZWJEZXZUb29sc01lc3NhZ2VEYXRhJiBkYXRhKTsKKworICAgIHZvaWQgZm9yY2VSZXBh
aW50KCk7CisKKyAgICBpbnQgaG9zdElkKCkgeyByZXR1cm4gbV9ob3N0SWQ7IH0KKworcHJpdmF0
ZToKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRGlzcGF0Y2hPbkNsaWVudChj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGpzRGlzcGF0Y2hUb0FwdShjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKKyAgICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZhbHVhdGVPblNlbGYoY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncyk7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc09uUnVudGlt
ZUZlYXR1cmVTdGF0ZUNoYW5nZWQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7CisKKyAgICB2
b2lkIGRpc3Bvc2VVdGlsaXR5Q29udGV4dCgpOworICAgIHZvaWQgdW5oaWRlUmVzb3VyY2VzUGFu
ZWxJZk5lY2Vzc2FyeSgpOworCisgICAgdm9pZCBjb21waWxlVXRpbGl0eVNjcmlwdHMoKTsKKyAg
ICB2b2lkIGluaXREZXZUb29sc0FnZW50SG9zdCgpOworICAgIHZvaWQgcmVzZXRJbnNwZWN0b3JG
cm9udGVuZFByb3h5KCk7CisgICAgdm9pZCBzZXRBcHVBZ2VudEVuYWJsZWQoYm9vbCBlbmFibGVk
KTsKKworICAgIFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xs
ZXIoKTsKKworICAgIC8vIENyZWF0ZXMgSW5zcGVjdG9yQmFja2VuZCB2OCB3cmFwcGVyIGluIHRo
ZSB1dGlsaXR5IGNvbnRleHQgc28gdGhhdCBpdCdzCisgICAgLy8gbWV0aG9kcyBwcm90b3R5cGUg
aXMgRnVuY3Rpb24ucHJvdG95cGUgb2JqZWN0IGZyb20gdGhlIHV0aWxpdHkgY29udGV4dC4KKyAg
ICAvLyBPdGhlcndpc2Ugc29tZSB1c2VmdWwgbWV0aG9kcyAgZGVmaW5lZCBvbiBGdW5jdGlvbi5w
cm90b3R5cGUoc3VjaCBhcyBiaW5kKQorICAgIC8vIGFyZSBtaXNzaW5nIGZvciBJbnNwZWN0b3JD
b250cm9sbGVyIG5hdGl2ZSBtZXRob2RzLgorICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBjcmVh
dGVJbnNwZWN0b3JCYWNrZW5kVjhXcmFwcGVyKCk7CisKKyAgICBpbnQgbV9ob3N0SWQ7CisgICAg
V2ViRGV2VG9vbHNBZ2VudENsaWVudCogbV9jbGllbnQ7CisgICAgV2ViVmlld0ltcGwqIG1fd2Vi
Vmlld0ltcGw7CisgICAgT3duUHRyPERlYnVnZ2VyQWdlbnREZWxlZ2F0ZVN0dWI+IG1fZGVidWdn
ZXJBZ2VudERlbGVnYXRlU3R1YjsKKyAgICBPd25QdHI8VG9vbHNBZ2VudERlbGVnYXRlU3R1Yj4g
bV90b29sc0FnZW50RGVsZWdhdGVTdHViOworICAgIE93blB0cjxEZWJ1Z2dlckFnZW50SW1wbD4g
bV9kZWJ1Z2dlckFnZW50SW1wbDsKKyAgICBPd25QdHI8QXB1QWdlbnREZWxlZ2F0ZVN0dWI+IG1f
YXB1QWdlbnREZWxlZ2F0ZVN0dWI7CisgICAgYm9vbCBtX2FwdUFnZW50RW5hYmxlZDsKKyAgICBi
b29sIG1fcmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQ7CisgICAgYm9vbCBtX2F0dGFjaGVkOwor
ICAgIC8vIFRPRE8ocGZlbGRtYW4pOiBUaGlzIHNob3VsZCBub3QgYmUgbmVlZGVkIG9uY2UgR0Mg
c3R5bGVzIGlzc3VlIGlzIGZpeGVkCisgICAgLy8gZm9yIG1hdGNoaW5nIHJ1bGVzLgorICAgIHY4
OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBtX3V0aWxpdHlDb250ZXh0OworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRl
dlRvb2xzRnJvbnRlbmRJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li41MWUzOWQwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZU
b29sc0Zyb250ZW5kSW1wbC5jcHAKQEAgLTAsMCArMSw0MDAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViRGV2VG9vbHNGcm9udGVuZEltcGwuaCIKKworI2luY2x1ZGUgPHN0cmlu
Zz4KKworI2luY2x1ZGUgIkJvdW5kT2JqZWN0LmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnVDb250
cm9sbGVyLmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnVJdGVtLmgiCisjaW5jbHVkZSAiRGVidWdn
ZXJBZ2VudC5oIgorI2luY2x1ZGUgIkRldlRvb2xzUlBDSlMuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVk
ZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JCYWNrZW5kLmgiCisjaW5jbHVkZSAiSW5z
cGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kSG9zdC5oIgor
I2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFzdGVib2Fy
ZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiUHJvZmlsZXJBZ2Vu
dC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
KyNpbmNsdWRlICJUb29sc0FnZW50LmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVk
ZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCisjaW5jbHVk
ZSAiVjhJbnNwZWN0b3JGcm9udGVuZEhvc3QuaCIKKyNpbmNsdWRlICJWOE5vZGUuaCIKKyNpbmNs
dWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJXZWJE
ZXZUb29sc0Zyb250ZW5kQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCisjaW5j
bHVkZSAiV2ViU2NyaXB0U291cmNlLmgiCisjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyB2ODo6TG9jYWw8
djg6OlN0cmluZz4gVG9WOFN0cmluZyhjb25zdCBTdHJpbmcmIHMpCit7CisgICAgaWYgKHMuaXNO
dWxsKCkpCisgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6OlN0cmluZz4oKTsKKworICAgIHJl
dHVybiB2ODo6U3RyaW5nOjpOZXcocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KHMu
Y2hhcmFjdGVycygpKSwgcy5sZW5ndGgoKSk7Cit9CisKK0RFRklORV9SUENfSlNfQk9VTkRfT0JK
KERlYnVnZ2VyQWdlbnQsIERFQlVHR0VSX0FHRU5UX1NUUlVDVCwgRGVidWdnZXJBZ2VudERlbGVn
YXRlLCBERUJVR0dFUl9BR0VOVF9ERUxFR0FURV9TVFJVQ1QpCitERUZJTkVfUlBDX0pTX0JPVU5E
X09CSihQcm9maWxlckFnZW50LCBQUk9GSUxFUl9BR0VOVF9TVFJVQ1QsIFByb2ZpbGVyQWdlbnRE
ZWxlZ2F0ZSwgUFJPRklMRVJfQUdFTlRfREVMRUdBVEVfU1RSVUNUKQorREVGSU5FX1JQQ19KU19C
T1VORF9PQkooVG9vbHNBZ2VudCwgVE9PTFNfQUdFTlRfU1RSVUNULCBUb29sc0FnZW50RGVsZWdh
dGUsIFRPT0xTX0FHRU5UX0RFTEVHQVRFX1NUUlVDVCkKKworV2ViRGV2VG9vbHNGcm9udGVuZCog
V2ViRGV2VG9vbHNGcm9udGVuZDo6Y3JlYXRlKAorICAgIFdlYlZpZXcqIHZpZXcsCisgICAgV2Vi
RGV2VG9vbHNGcm9udGVuZENsaWVudCogY2xpZW50LAorICAgIGNvbnN0IFdlYlN0cmluZyYgYXBw
bGljYXRpb25Mb2NhbGUpCit7CisgICAgcmV0dXJuIG5ldyBXZWJEZXZUb29sc0Zyb250ZW5kSW1w
bCgKKyAgICAgIHN0YXRpY19jYXN0PFdlYlZpZXdJbXBsKj4odmlldyksCisgICAgICBjbGllbnQs
CisgICAgICBhcHBsaWNhdGlvbkxvY2FsZSk7Cit9CisKK1dlYkRldlRvb2xzRnJvbnRlbmRJbXBs
OjpXZWJEZXZUb29sc0Zyb250ZW5kSW1wbCgKKyAgICBXZWJWaWV3SW1wbCogd2ViVmlld0ltcGws
CisgICAgV2ViRGV2VG9vbHNGcm9udGVuZENsaWVudCogY2xpZW50LAorICAgIGNvbnN0IFN0cmlu
ZyYgYXBwbGljYXRpb25Mb2NhbGUpCisgICAgOiBtX3dlYlZpZXdJbXBsKHdlYlZpZXdJbXBsKQor
ICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9hcHBsaWNhdGlvbkxvY2FsZShhcHBsaWNh
dGlvbkxvY2FsZSkKKyAgICAsIG1fbG9hZGVkKGZhbHNlKQoreworICAgIFdlYkZyYW1lSW1wbCog
ZnJhbWUgPSBtX3dlYlZpZXdJbXBsLT5tYWluRnJhbWVJbXBsKCk7CisgICAgdjg6OkhhbmRsZVNj
b3BlIHNjb3BlOworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGZyYW1lQ29udGV4dCA9IFY4
UHJveHk6OmNvbnRleHQoZnJhbWUtPmZyYW1lKCkpOworCisgICAgbV9kZWJ1Z2dlckFnZW50T2Jq
LnNldChuZXcgSlNEZWJ1Z2dlckFnZW50Qm91bmRPYmoodGhpcywgZnJhbWVDb250ZXh0LCAiUmVt
b3RlRGVidWdnZXJBZ2VudCIpKTsKKyAgICBtX3Byb2ZpbGVyQWdlbnRPYmouc2V0KG5ldyBKU1By
b2ZpbGVyQWdlbnRCb3VuZE9iaih0aGlzLCBmcmFtZUNvbnRleHQsICJSZW1vdGVQcm9maWxlckFn
ZW50IikpOworICAgIG1fdG9vbHNBZ2VudE9iai5zZXQobmV3IEpTVG9vbHNBZ2VudEJvdW5kT2Jq
KHRoaXMsIGZyYW1lQ29udGV4dCwgIlJlbW90ZVRvb2xzQWdlbnQiKSk7CisKKyAgICAvLyBEZWJ1
Z2dlciBjb21tYW5kcyBzaG91bGQgYmUgc2VudCB1c2luZyBzcGVjaWFsIG1ldGhvZC4KKyAgICBC
b3VuZE9iamVjdCBkZWJ1Z2dlckNvbW1hbmRFeGVjdXRvck9iaihmcmFtZUNvbnRleHQsIHRoaXMs
ICJSZW1vdGVEZWJ1Z2dlckNvbW1hbmRFeGVjdXRvciIpOworICAgIGRlYnVnZ2VyQ29tbWFuZEV4
ZWN1dG9yT2JqLmFkZFByb3RvRnVuY3Rpb24oCisgICAgICAgICJEZWJ1Z2dlckNvbW1hbmQiLAor
ICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNEZWJ1Z2dlckNvbW1hbmQpOworICAg
IGRlYnVnZ2VyQ29tbWFuZEV4ZWN1dG9yT2JqLmFkZFByb3RvRnVuY3Rpb24oCisgICAgICAgICJE
ZWJ1Z2dlclBhdXNlU2NyaXB0IiwKKyAgICAgICAgV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6Ompz
RGVidWdnZXJQYXVzZVNjcmlwdCk7CisgICAgZGVidWdnZXJDb21tYW5kRXhlY3V0b3JPYmouYnVp
bGQoKTsKKworICAgIEJvdW5kT2JqZWN0IGRldlRvb2xzSG9zdChmcmFtZUNvbnRleHQsIHRoaXMs
ICJJbnNwZWN0b3JGcm9udGVuZEhvc3QiKTsKKyAgICBkZXZUb29sc0hvc3QuYWRkUHJvdG9GdW5j
dGlvbigKKyAgICAgICAgImxvYWRlZCIsCisgICAgICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBs
Ojpqc0xvYWRlZCk7CisgICAgZGV2VG9vbHNIb3N0LmFkZFByb3RvRnVuY3Rpb24oCisgICAgICAg
ICJwbGF0Zm9ybSIsCisgICAgICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc1BsYXRmb3Jt
KTsKKyAgICBkZXZUb29sc0hvc3QuYWRkUHJvdG9GdW5jdGlvbigKKyAgICAgICAgInBvcnQiLAor
ICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNQb3J0KTsKKyAgICBkZXZUb29sc0hv
c3QuYWRkUHJvdG9GdW5jdGlvbigKKyAgICAgICAgImNvcHlUZXh0IiwKKyAgICAgICAgV2ViRGV2
VG9vbHNGcm9udGVuZEltcGw6OmpzQ29weVRleHQpOworICAgIGRldlRvb2xzSG9zdC5hZGRQcm90
b0Z1bmN0aW9uKAorICAgICAgICAiYWN0aXZhdGVXaW5kb3ciLAorICAgICAgICBXZWJEZXZUb29s
c0Zyb250ZW5kSW1wbDo6anNBY3RpdmF0ZVdpbmRvdyk7CisgICAgZGV2VG9vbHNIb3N0LmFkZFBy
b3RvRnVuY3Rpb24oCisgICAgICAgICJjbG9zZVdpbmRvdyIsCisgICAgICAgIFdlYkRldlRvb2xz
RnJvbnRlbmRJbXBsOjpqc0Nsb3NlV2luZG93KTsKKyAgICBkZXZUb29sc0hvc3QuYWRkUHJvdG9G
dW5jdGlvbigKKyAgICAgICAgImF0dGFjaCIsCisgICAgICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJ
bXBsOjpqc0RvY2tXaW5kb3cpOworICAgIGRldlRvb2xzSG9zdC5hZGRQcm90b0Z1bmN0aW9uKAor
ICAgICAgICAiZGV0YWNoIiwKKyAgICAgICAgV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzVW5k
b2NrV2luZG93KTsKKyAgICBkZXZUb29sc0hvc3QuYWRkUHJvdG9GdW5jdGlvbigKKyAgICAgICAg
ImxvY2FsaXplZFN0cmluZ3NVUkwiLAorICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6
anNMb2NhbGl6ZWRTdHJpbmdzVVJMKTsKKyAgICBkZXZUb29sc0hvc3QuYWRkUHJvdG9GdW5jdGlv
bigKKyAgICAgICAgImhpZGRlblBhbmVscyIsCisgICAgICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJ
bXBsOjpqc0hpZGRlblBhbmVscyk7CisgICAgZGV2VG9vbHNIb3N0LmFkZFByb3RvRnVuY3Rpb24o
CisgICAgICAgICJzZXR0aW5nIiwKKyAgICAgICAgV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6Ompz
U2V0dGluZyk7CisgICAgZGV2VG9vbHNIb3N0LmFkZFByb3RvRnVuY3Rpb24oCisgICAgICAgICJz
ZXRTZXR0aW5nIiwKKyAgICAgICAgV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzU2V0U2V0dGlu
Zyk7CisgICAgZGV2VG9vbHNIb3N0LmFkZFByb3RvRnVuY3Rpb24oCisgICAgICAgICJ3aW5kb3dV
bmxvYWRpbmciLAorICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNXaW5kb3dVbmxv
YWRpbmcpOworICAgIGRldlRvb2xzSG9zdC5hZGRQcm90b0Z1bmN0aW9uKAorICAgICAgICAic2hv
d0NvbnRleHRNZW51IiwKKyAgICAgICAgV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzU2hvd0Nv
bnRleHRNZW51KTsKKyAgICBkZXZUb29sc0hvc3QuYnVpbGQoKTsKK30KKworV2ViRGV2VG9vbHNG
cm9udGVuZEltcGw6On5XZWJEZXZUb29sc0Zyb250ZW5kSW1wbCgpCit7CisgICAgaWYgKG1fbWVu
dVByb3ZpZGVyKQorICAgICAgICBtX21lbnVQcm92aWRlci0+ZGlzY29ubmVjdCgpOworfQorCit2
b2lkIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpkaXNwYXRjaE1lc3NhZ2VGcm9tQWdlbnQoY29u
c3QgV2ViRGV2VG9vbHNNZXNzYWdlRGF0YSYgZGF0YSkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiB2
OworICAgIHYuYXBwZW5kKGRhdGEuY2xhc3NOYW1lKTsKKyAgICB2LmFwcGVuZChkYXRhLm1ldGhv
ZE5hbWUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGF0YS5hcmd1bWVudHMuc2l6ZSgp
OyBpKyspCisgICAgICAgIHYuYXBwZW5kKGRhdGEuYXJndW1lbnRzW2ldKTsKKyAgICBpZiAoIW1f
bG9hZGVkKSB7CisgICAgICAgIG1fcGVuZGluZ0luY29taW5nTWVzc2FnZXMuYXBwZW5kKHYpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGV4ZWN1dGVTY3JpcHQodik7Cit9CisKK3ZvaWQg
V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmV4ZWN1dGVTY3JpcHQoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHYpCit7CisgICAgV2ViRnJhbWVJbXBsKiBmcmFtZSA9IG1fd2ViVmlld0ltcGwtPm1haW5G
cmFtZUltcGwoKTsKKyAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CisgICAgdjg6OkhhbmRsZTx2
ODo6Q29udGV4dD4gZnJhbWVDb250ZXh0ID0gVjhQcm94eTo6Y29udGV4dChmcmFtZS0+ZnJhbWUo
KSk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShmcmFtZUNvbnRleHQpOwor
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBkaXNwYXRjaEZ1bmN0aW9uID0gZnJhbWVDb250ZXh0
LT5HbG9iYWwoKS0+R2V0KHY4OjpTdHJpbmc6Ok5ldygiZGV2dG9vbHMkJGRpc3BhdGNoIikpOwor
ICAgIEFTU0VSVChkaXNwYXRjaEZ1bmN0aW9uLT5Jc0Z1bmN0aW9uKCkpOworICAgIHY4OjpIYW5k
bGU8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbiA9IHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPjo6Q2Fz
dChkaXNwYXRjaEZ1bmN0aW9uKTsKKyAgICBWZWN0b3I8IHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+
IGFyZ3M7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2LnNpemUoKTsgaSsrKQorICAgICAg
ICBhcmdzLmFwcGVuZChUb1Y4U3RyaW5nKHYuYXQoaSkpKTsKKyAgICBmdW5jdGlvbi0+Q2FsbChm
cmFtZUNvbnRleHQtPkdsb2JhbCgpLCBhcmdzLnNpemUoKSwgYXJncy5kYXRhKCkpOworfQorCit2
b2lkIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpkaXNwYXRjaE9uV2ViSW5zcGVjdG9yKGNvbnN0
IFN0cmluZyYgbWV0aG9kTmFtZSwgY29uc3QgU3RyaW5nJiBwYXJhbSkKK3sKKyAgICBXZWJGcmFt
ZUltcGwqIGZyYW1lID0gbV93ZWJWaWV3SW1wbC0+bWFpbkZyYW1lSW1wbCgpOworICAgIHY4OjpI
YW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBmcmFtZUNvbnRl
eHQgPSBWOFByb3h5Ojpjb250ZXh0KGZyYW1lLT5mcmFtZSgpKTsKKyAgICB2ODo6Q29udGV4dDo6
U2NvcGUgY29udGV4dFNjb3BlKGZyYW1lQ29udGV4dCk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gd2ViSW5zcGVjdG9yID0gZnJhbWVDb250ZXh0LT5HbG9iYWwoKS0+R2V0KHY4OjpTdHJp
bmc6Ok5ldygiV2ViSW5zcGVjdG9yIikpOworICAgIEFTU0VSVCh3ZWJJbnNwZWN0b3ItPklzT2Jq
ZWN0KCkpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd2ViSW5zcGVjdG9yT2JqID0gdjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh3ZWJJbnNwZWN0b3IpOworCisgICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IG1ldGhvZCA9IHdlYkluc3BlY3Rvck9iai0+R2V0KFRvVjhTdHJpbmcobWV0
aG9kTmFtZSkpOworICAgIEFTU0VSVChtZXRob2QtPklzRnVuY3Rpb24oKSk7CisgICAgdjg6Okhh
bmRsZTx2ODo6RnVuY3Rpb24+IG1ldGhvZEZ1bmMgPSB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj46
OkNhc3QobWV0aG9kKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJnc1tdID0geworICAg
ICAgVG9WOFN0cmluZyhwYXJhbSkKKyAgICB9OworICAgIG1ldGhvZEZ1bmMtPkNhbGwoZnJhbWVD
b250ZXh0LT5HbG9iYWwoKSwgMSwgYXJncyk7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNGcm9udGVu
ZEltcGw6OnNlbmRScGNNZXNzYWdlKGNvbnN0IFdlYkRldlRvb2xzTWVzc2FnZURhdGEmIGRhdGEp
Cit7CisgICAgbV9jbGllbnQtPnNlbmRNZXNzYWdlVG9BZ2VudChkYXRhKTsKK30KKwordm9pZCBX
ZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1l
bnVJdGVtKiBpdGVtKQoreworICAgIGludCBpdGVtTnVtYmVyID0gaXRlbS0+YWN0aW9uKCkgLSBD
b250ZXh0TWVudUl0ZW1CYXNlQ3VzdG9tVGFnOworICAgIGRpc3BhdGNoT25XZWJJbnNwZWN0b3Io
ImNvbnRleHRNZW51SXRlbVNlbGVjdGVkIiwgU3RyaW5nOjpudW1iZXIoaXRlbU51bWJlcikpOwor
fQorCit2b2lkIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpjb250ZXh0TWVudUNsZWFyZWQoKQor
eworICAgIGRpc3BhdGNoT25XZWJJbnNwZWN0b3IoImNvbnRleHRNZW51Q2xlYXJlZCIsICIiKTsK
K30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0xv
YWRlZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIFdlYkRldlRvb2xzRnJvbnRl
bmRJbXBsKiBmcm9udGVuZCA9IHN0YXRpY19jYXN0PFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsKj4o
djg6OkV4dGVybmFsOjpDYXN0KCphcmdzLkRhdGEoKSktPlZhbHVlKCkpOworICAgIGZyb250ZW5k
LT5tX2xvYWRlZCA9IHRydWU7CisKKyAgICAvLyBHcmFudCB0aGUgZGV2dG9vbHMgcGFnZSB0aGUg
YWJpbGl0eSB0byBoYXZlIHNvdXJjZSB2aWV3IGlmcmFtZXMuCisgICAgUGFnZSogcGFnZSA9IFY4
UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgpLT5wYWdlKCk7CisgICAgU2Vj
dXJpdHlPcmlnaW4qIG9yaWdpbiA9IHBhZ2UtPm1haW5GcmFtZSgpLT5kb21XaW5kb3coKS0+c2Vj
dXJpdHlPcmlnaW4oKTsKKyAgICBvcmlnaW4tPmdyYW50VW5pdmVyc2FsQWNjZXNzKCk7CisKKyAg
ICBmb3IgKFZlY3RvcjxWZWN0b3I8U3RyaW5nPiA+OjppdGVyYXRvciBpdCA9IGZyb250ZW5kLT5t
X3BlbmRpbmdJbmNvbWluZ01lc3NhZ2VzLmJlZ2luKCk7CisgICAgICAgICBpdCAhPSBmcm9udGVu
ZC0+bV9wZW5kaW5nSW5jb21pbmdNZXNzYWdlcy5lbmQoKTsKKyAgICAgICAgICsraXQpIHsKKyAg
ICAgICAgZnJvbnRlbmQtPmV4ZWN1dGVTY3JpcHQoKml0KTsKKyAgICB9CisgICAgZnJvbnRlbmQt
Pm1fcGVuZGluZ0luY29taW5nTWVzc2FnZXMuY2xlYXIoKTsKKyAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOworfQorCisvLyBzdGF0aWMKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJEZXZUb29s
c0Zyb250ZW5kSW1wbDo6anNQbGF0Zm9ybShjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQorewor
I2lmIGRlZmluZWQoT1NfTUFDT1NYKQorICAgIHJldHVybiB2OFN0cmluZygibWFjLWxlb3BhcmQi
KTsKKyNlbGlmIGRlZmluZWQoT1NfTElOVVgpCisgICAgcmV0dXJuIHY4U3RyaW5nKCJsaW51eCIp
OworI2VsaWYgZGVmaW5lZChPU19GUkVFQlNEKQorICAgIHJldHVybiB2OFN0cmluZygiZnJlZWJz
ZCIpOworI2VsaWYgZGVmaW5lZChPU19PUEVOQlNEKQorICAgIHJldHVybiB2OFN0cmluZygib3Bl
bmJzZCIpOworI2VsaWYgZGVmaW5lZChPU19XSU4pCisgICAgcmV0dXJuIHY4U3RyaW5nKCJ3aW5k
b3dzIik7CisjZW5kaWYKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJv
bnRlbmRJbXBsOjpqc1BvcnQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9v
bHNGcm9udGVuZEltcGw6OmpzQ29weVRleHQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sK
KyAgICBTdHJpbmcgdGV4dCA9IFdlYkNvcmU6OnRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2so
YXJnc1swXSk7CisgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+d3JpdGVQbGFp
blRleHQodGV4dCk7CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKwordjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0FjdGl2YXRlV2luZG93KGNv
bnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgV2ViRGV2VG9vbHNGcm9udGVuZEltcGwq
IGZyb250ZW5kID0gc3RhdGljX2Nhc3Q8V2ViRGV2VG9vbHNGcm9udGVuZEltcGwqPih2ODo6RXh0
ZXJuYWw6OkNhc3QoKmFyZ3MuRGF0YSgpKS0+VmFsdWUoKSk7CisgICAgZnJvbnRlbmQtPm1fY2xp
ZW50LT5hY3RpdmF0ZVdpbmRvdygpOworICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisK
K3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNDbG9zZVdp
bmRvdyhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIFdlYkRldlRvb2xzRnJvbnRl
bmRJbXBsKiBmcm9udGVuZCA9IHN0YXRpY19jYXN0PFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsKj4o
djg6OkV4dGVybmFsOjpDYXN0KCphcmdzLkRhdGEoKSktPlZhbHVlKCkpOworICAgIGZyb250ZW5k
LT5tX2NsaWVudC0+Y2xvc2VXaW5kb3coKTsKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwor
fQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzRG9j
a1dpbmRvdyhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIFdlYkRldlRvb2xzRnJv
bnRlbmRJbXBsKiBmcm9udGVuZCA9IHN0YXRpY19jYXN0PFdlYkRldlRvb2xzRnJvbnRlbmRJbXBs
Kj4odjg6OkV4dGVybmFsOjpDYXN0KCphcmdzLkRhdGEoKSktPlZhbHVlKCkpOworICAgIGZyb250
ZW5kLT5tX2NsaWVudC0+ZG9ja1dpbmRvdygpOworICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNV
bmRvY2tXaW5kb3coY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBXZWJEZXZUb29s
c0Zyb250ZW5kSW1wbCogZnJvbnRlbmQgPSBzdGF0aWNfY2FzdDxXZWJEZXZUb29sc0Zyb250ZW5k
SW1wbCo+KHY4OjpFeHRlcm5hbDo6Q2FzdCgqYXJncy5EYXRhKCkpLT5WYWx1ZSgpKTsKKyAgICBm
cm9udGVuZC0+bV9jbGllbnQtPnVuZG9ja1dpbmRvdygpOworICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJEZXZUb29sc0Zyb250ZW5kSW1w
bDo6anNMb2NhbGl6ZWRTdHJpbmdzVVJMKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7Cisg
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdl
YkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0hpZGRlblBhbmVscyhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQoreworICAgIHJldHVybiB2OFN0cmluZygiIik7Cit9CisKK3Y4OjpIYW5kbGU8djg6
OlZhbHVlPiBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNEZWJ1Z2dlckNvbW1hbmQoY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbCogZnJv
bnRlbmQgPSBzdGF0aWNfY2FzdDxXZWJEZXZUb29sc0Zyb250ZW5kSW1wbCo+KHY4OjpFeHRlcm5h
bDo6Q2FzdCgqYXJncy5EYXRhKCkpLT5WYWx1ZSgpKTsKKyAgICBXZWJTdHJpbmcgY29tbWFuZCA9
IFdlYkNvcmU6OnRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2soYXJnc1swXSk7CisgICAgZnJv
bnRlbmQtPm1fY2xpZW50LT5zZW5kRGVidWdnZXJDb21tYW5kVG9BZ2VudChjb21tYW5kKTsKKyAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2Vi
RGV2VG9vbHNGcm9udGVuZEltcGw6OmpzU2V0dGluZyhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdz
KQoreworICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZh
bHVlPiBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNTZXRTZXR0aW5nKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKwordjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0RlYnVnZ2VyUGF1c2VT
Y3JpcHQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBXZWJEZXZUb29sc0Zyb250
ZW5kSW1wbCogZnJvbnRlbmQgPSBzdGF0aWNfY2FzdDxXZWJEZXZUb29sc0Zyb250ZW5kSW1wbCo+
KHY4OjpFeHRlcm5hbDo6Q2FzdCgqYXJncy5EYXRhKCkpLT5WYWx1ZSgpKTsKKyAgICBmcm9udGVu
ZC0+bV9jbGllbnQtPnNlbmREZWJ1Z2dlclBhdXNlU2NyaXB0KCk7CisgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRl
bmRJbXBsOjpqc1dpbmRvd1VubG9hZGluZyhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQorewor
ICAgIC8vVE9ETyhwZmVsZG1hbik6IEltcGxlbWVudCB0aGlzLgorICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJEZXZUb29sc0Zyb250ZW5k
SW1wbDo6anNTaG93Q29udGV4dE1lbnUoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAg
ICBpZiAoYXJncy5MZW5ndGgoKSA8IDIpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
CisKKyAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gZXZlbnRXcmFwcGVyID0gdjg6OkxvY2FsPHY4
OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pOworICAgIGlmIChWOERPTVdyYXBwZXI6OmRvbVdyYXBw
ZXJUeXBlKGV2ZW50V3JhcHBlcikgIT0gVjhDbGFzc0luZGV4OjpFVkVOVCkKKyAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIEV2ZW50KiBldmVudCA9IFY4RXZlbnQ6OnRvTmF0
aXZlKGV2ZW50V3JhcHBlcik7CisgICAgaWYgKCFhcmdzWzFdLT5Jc0FycmF5KCkpCisgICAgICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBhcnJh
eSA9IHY4OjpMb2NhbDx2ODo6QXJyYXk+OjpDYXN0KGFyZ3NbMV0pOworICAgIFZlY3RvcjxDb250
ZXh0TWVudUl0ZW0qPiBpdGVtczsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXkt
Pkxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGl0ZW0gPSB2
ODo6TG9jYWw8djg6Ok9iamVjdD46OkNhc3QoYXJyYXktPkdldCh2ODo6SW50ZWdlcjo6TmV3KGkp
KSk7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGxhYmVsID0gaXRlbS0+R2V0KHY4OjpT
dHJpbmc6Ok5ldygibGFiZWwiKSk7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGlkID0g
aXRlbS0+R2V0KHY4OjpTdHJpbmc6Ok5ldygiaWQiKSk7CisgICAgICAgIGlmIChsYWJlbC0+SXNV
bmRlZmluZWQoKSB8fCBpZC0+SXNVbmRlZmluZWQoKSkgeworICAgICAgICAgIGl0ZW1zLmFwcGVu
ZChuZXcgQ29udGV4dE1lbnVJdGVtKFNlcGFyYXRvclR5cGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtVGFnTm9BY3Rpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nKCkpKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICBDb250ZXh0TWVudUFjdGlvbiB0eXBlZElkID0gc3RhdGlj
X2Nhc3Q8Q29udGV4dE1lbnVBY3Rpb24+KAorICAgICAgICAgICAgICBDb250ZXh0TWVudUl0ZW1C
YXNlQ3VzdG9tVGFnICsgaWQtPlRvSW50MzIoKS0+VmFsdWUoKSk7CisgICAgICAgICAgaXRlbXMu
YXBwZW5kKG5ldyBDb250ZXh0TWVudUl0ZW0oQWN0aW9uVHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlZElkLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sobGFiZWwp
KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbCogZnJv
bnRlbmQgPSBzdGF0aWNfY2FzdDxXZWJEZXZUb29sc0Zyb250ZW5kSW1wbCo+KHY4OjpFeHRlcm5h
bDo6Q2FzdCgqYXJncy5EYXRhKCkpLT5WYWx1ZSgpKTsKKworICAgIGZyb250ZW5kLT5tX21lbnVQ
cm92aWRlciA9IE1lbnVQcm92aWRlcjo6Y3JlYXRlKGZyb250ZW5kLCBpdGVtcyk7CisKKyAgICBD
b250ZXh0TWVudUNvbnRyb2xsZXIqIG1lbnVDb250cm9sbGVyID0gZnJvbnRlbmQtPm1fd2ViVmll
d0ltcGwtPnBhZ2UoKS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCk7CisgICAgbWVudUNvbnRyb2xs
ZXItPnNob3dDb250ZXh0TWVudShldmVudCwgZnJvbnRlbmQtPm1fbWVudVByb3ZpZGVyKTsKKwor
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5o
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1wbC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMjAzOTkKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzRnJvbnRlbmRJbXBsLmgKQEAgLTAsMCArMSwx
NjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsX2gKKyNkZWZpbmUgV2ViRGV2VG9v
bHNGcm9udGVuZEltcGxfaAorCisjaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIKKyNpbmNsdWRlICJD
b250ZXh0TWVudVByb3ZpZGVyLmgiCisjaW5jbHVkZSAiRGV2VG9vbHNSUEMuaCIKKyNpbmNsdWRl
ICJXZWJEZXZUb29sc0Zyb250ZW5kLmgiCisjaW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgQ29udGV4dE1lbnVJdGVtOworICAg
IGNsYXNzIE5vZGU7CisgICAgY2xhc3MgUGFnZTsKKyAgICBjbGFzcyBTdHJpbmc7Cit9CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCisgICAgY2xhc3MgSlNEZWJ1Z2dlckFnZW50Qm91bmRPYmo7Cisg
ICAgY2xhc3MgSlNQcm9maWxlckFnZW50Qm91bmRPYmo7CisgICAgY2xhc3MgSlNUb29sc0FnZW50
Qm91bmRPYmo7CisgICAgY2xhc3MgV2ViRGV2VG9vbHNDbGllbnREZWxlZ2F0ZTsKKyAgICBjbGFz
cyBXZWJWaWV3SW1wbDsKKyAgICBzdHJ1Y3QgV2ViRGV2VG9vbHNNZXNzYWdlRGF0YTsKKworY2xh
c3MgV2ViRGV2VG9vbHNGcm9udGVuZEltcGwgOiBwdWJsaWMgV2ViS2l0OjpXZWJEZXZUb29sc0Zy
b250ZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBEZXZUb29sc1JQ
Qzo6RGVsZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIE5vbmNv
cHlhYmxlIHsKK3B1YmxpYzoKKyAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbCgKKyAgICAgICAg
V2ViS2l0OjpXZWJWaWV3SW1wbCogd2ViVmlld0ltcGwsCisgICAgICAgIFdlYktpdDo6V2ViRGV2
VG9vbHNGcm9udGVuZENsaWVudCogY2xpZW50LAorICAgICAgICBjb25zdCBTdHJpbmcmIGFwcGxp
Y2F0aW9uTG9jYWxlKTsKKyAgICB2aXJ0dWFsIH5XZWJEZXZUb29sc0Zyb250ZW5kSW1wbCgpOwor
CisgICAgLy8gRGV2VG9vbHNSUEM6OkRlbGVnYXRlIGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1
YWwgdm9pZCBzZW5kUnBjTWVzc2FnZShjb25zdCBXZWJLaXQ6OldlYkRldlRvb2xzTWVzc2FnZURh
dGEmIGRhdGEpOworCisgICAgLy8gV2ViRGV2VG9vbHNGcm9udGVuZCBpbXBsZW1lbnRhdGlvbi4K
KyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRnJvbUFnZW50KGNvbnN0IFdlYktpdDo6
V2ViRGV2VG9vbHNNZXNzYWdlRGF0YSYgZGF0YSk7CisKK3ByaXZhdGU6CisgICAgY2xhc3MgTWVu
dVByb3ZpZGVyIDogcHVibGljIFdlYkNvcmU6OkNvbnRleHRNZW51UHJvdmlkZXIgeworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVudVByb3ZpZGVyPiBjcmVhdGUoV2Vi
RGV2VG9vbHNGcm9udGVuZEltcGwqIGZyb250ZW5kSG9zdCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6
OkNvbnRleHRNZW51SXRlbSo+JiBpdGVtcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBNZW51UHJvdmlkZXIoZnJvbnRlbmRIb3N0LCBpdGVtcykpOworICAgICAg
ICB9CisKKyAgICAgICAgdmlydHVhbCB+TWVudVByb3ZpZGVyKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgY29udGV4dE1lbnVDbGVhcmVkKCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGRp
c2Nvbm5lY3QoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2Zyb250ZW5kSG9zdCA9IDA7Cisg
ICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVDb250ZXh0TWVudShXZWJD
b3JlOjpDb250ZXh0TWVudSogbWVudSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2l0ZW1zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIG1lbnUt
PmFwcGVuZEl0ZW0oKm1faXRlbXNbaV0pOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2
b2lkIGNvbnRleHRNZW51SXRlbVNlbGVjdGVkKFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbSogaXRl
bSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fZnJvbnRlbmRIb3N0KQorICAgICAgICAg
ICAgICAgIG1fZnJvbnRlbmRIb3N0LT5jb250ZXh0TWVudUl0ZW1TZWxlY3RlZChpdGVtKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0TWVudUNsZWFyZWQoKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAobV9mcm9udGVuZEhvc3QpCisgICAgICAgICAgICAgICAg
bV9mcm9udGVuZEhvc3QtPmNvbnRleHRNZW51Q2xlYXJlZCgpOworICAgICAgICAgICAgZGVsZXRl
QWxsVmFsdWVzKG1faXRlbXMpOworICAgICAgICAgICAgbV9pdGVtcy5jbGVhcigpOworICAgICAg
ICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBNZW51UHJvdmlkZXIoV2ViRGV2VG9vbHNGcm9u
dGVuZEltcGwqIGZyb250ZW5kSG9zdCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvbnRleHRNZW51
SXRlbSo+JiBpdGVtcykKKyAgICAgICAgICAgIDogbV9mcm9udGVuZEhvc3QoZnJvbnRlbmRIb3N0
KQorICAgICAgICAgICAgLCBtX2l0ZW1zKGl0ZW1zKSB7IH0KKyAgICAgICAgV2ViRGV2VG9vbHNG
cm9udGVuZEltcGwqIG1fZnJvbnRlbmRIb3N0OworICAgICAgICBWZWN0b3I8V2ViQ29yZTo6Q29u
dGV4dE1lbnVJdGVtKj4gbV9pdGVtczsKKyAgICB9OworCisgICAgdm9pZCBleGVjdXRlU2NyaXB0
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2KTsKKyAgICB2b2lkIGRpc3BhdGNoT25XZWJJbnNwZWN0
b3IoY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IFN0cmluZyYgcGFyYW0pOworCisgICAgLy8g
ZnJpZW5kIGNsYXNzIE1lbnVTZWxlY3Rpb25IYW5kbGVyOworICAgIHZvaWQgY29udGV4dE1lbnVJ
dGVtU2VsZWN0ZWQoV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtKiBtZW51SXRlbSk7CisgICAgdm9p
ZCBjb250ZXh0TWVudUNsZWFyZWQoKTsKKworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4ganNMb2FkZWQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7CisgICAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBqc1BsYXRmb3JtKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwor
ICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNQb3J0KGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZ3MpOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNDb3B5VGV4dChj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKKworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4ganNBY3RpdmF0ZVdpbmRvdyhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKKyAgICBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzQ2xvc2VXaW5kb3coY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncyk7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0RvY2tXaW5k
b3coY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBqc1VuZG9ja1dpbmRvdyhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKKyAgICBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzTG9jYWxpemVkU3RyaW5nc1VSTChjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpz
SGlkZGVuUGFuZWxzKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOworICAgIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4ganNEZWJ1Z2dlckNvbW1hbmQoY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncyk7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc1NldHRpbmcoY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncyk7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBq
c1NldFNldHRpbmcoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7CisgICAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBqc0RlYnVnZ2VyUGF1c2VTY3JpcHQoY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJncyk7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc1dpbmRvd1VubG9h
ZGluZyhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGpzU2hvd0NvbnRleHRNZW51KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOwor
CisgICAgV2ViS2l0OjpXZWJWaWV3SW1wbCogbV93ZWJWaWV3SW1wbDsKKyAgICBXZWJLaXQ6Oldl
YkRldlRvb2xzRnJvbnRlbmRDbGllbnQqIG1fY2xpZW50OworICAgIFN0cmluZyBtX2FwcGxpY2F0
aW9uTG9jYWxlOworICAgIE93blB0cjxKU0RlYnVnZ2VyQWdlbnRCb3VuZE9iaj4gbV9kZWJ1Z2dl
ckFnZW50T2JqOworICAgIE93blB0cjxKU1Byb2ZpbGVyQWdlbnRCb3VuZE9iaj4gbV9wcm9maWxl
ckFnZW50T2JqOworICAgIE93blB0cjxKU1Rvb2xzQWdlbnRCb3VuZE9iaj4gbV90b29sc0FnZW50
T2JqOworICAgIGJvb2wgbV9sb2FkZWQ7CisgICAgVmVjdG9yPFZlY3RvcjxTdHJpbmc+ID4gbV9w
ZW5kaW5nSW5jb21pbmdNZXNzYWdlczsKKyAgICBSZWZQdHI8TWVudVByb3ZpZGVyPiBtX21lbnVQ
cm92aWRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYK
</data>
<flag name="review"
          id="30388"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47911</attachid>
            <date>2010-02-02 00:44:35 -0800</date>
            <delta_ts>2010-02-02 06:23:34 -0800</delta_ts>
            <desc>patch</desc>
            <filename>upstream-devtools3.patch</filename>
            <type>text/plain</type>
            <size>129021</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDZhOGU3NmEuLmM2OTQ3YWIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE0OCBAQAorMjAxMC0wMi0wMSAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcHN0
cmVhbSBEZXZUb29scyBjb2RlLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zNDMyNgorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBz
cmMvQVBVQWdlbnREZWxlZ2F0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvQm91bmRPYmplY3Qu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6Qm91bmRPYmplY3Q6OkJvdW5kT2JqZWN0KToK
KyAgICAgICAgKFdlYktpdDo6Qm91bmRPYmplY3Q6On5Cb3VuZE9iamVjdCk6CisgICAgICAgIChX
ZWJLaXQ6OkJvdW5kT2JqZWN0OjphZGRQcm90b0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
Qm91bmRPYmplY3Q6OmJ1aWxkKToKKyAgICAgICAgKiBzcmMvQm91bmRPYmplY3QuaDogQWRkZWQu
CisgICAgICAgICogc3JjL0RlYnVnZ2VyQWdlbnQuaDogQWRkZWQuCisgICAgICAgICogc3JjL0Rl
YnVnZ2VyQWdlbnRJbXBsLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkRlYnVnZ2VyQWdl
bnRJbXBsOjpEZWJ1Z2dlckFnZW50SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OkRlYnVnZ2VyQWdl
bnRJbXBsOjp+RGVidWdnZXJBZ2VudEltcGwpOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFn
ZW50SW1wbDo6Z2V0Q29udGV4dElkKToKKyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2VudElt
cGw6OmRlYnVnZ2VyT3V0cHV0KToKKyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2VudEltcGw6
OmNyZWF0ZVV0aWxpdHlDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2VudElt
cGw6OmV4ZWN1dGVVdGlsaXR5RnVuY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFn
ZW50SW1wbDo6ZXhlY3V0ZVZvaWRKYXZhU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6RGVidWdn
ZXJBZ2VudEltcGw6OnBhZ2UpOgorICAgICAgICAqIHNyYy9EZWJ1Z2dlckFnZW50SW1wbC5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2VudEltcGw6OnNldEF1dG9Db250aW51
ZU9uRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2VudEltcGw6OmF1dG9D
b250aW51ZU9uRXhjZXB0aW9uKToKKyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2VudEltcGw6
OndlYmRldnRvb2xzQWdlbnQpOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFnZW50SW1wbDo6
d2ViVmlldyk6CisgICAgICAgICogc3JjL0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OkRlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpkZWJ1Z0hvc3REaXNwYXRj
aEhhbmRsZXIpOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFnZW50TWFuYWdlcjo6ZGVidWdB
dHRhY2gpOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFnZW50TWFuYWdlcjo6ZGVidWdEZXRh
Y2gpOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFnZW50TWFuYWdlcjo6b25WOERlYnVnTWVz
c2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkRlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpwYXVzZVNjcmlw
dCk6CisgICAgICAgIChXZWJLaXQ6OkRlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpleGVjdXRlRGVidWdn
ZXJDb21tYW5kKToKKyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2VudE1hbmFnZXI6OnNldE1l
c3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2Vu
dE1hbmFnZXI6OnNldEhvc3RJZCk6CisgICAgICAgIChXZWJLaXQ6OkRlYnVnZ2VyQWdlbnRNYW5h
Z2VyOjpvbldlYlZpZXdDbG9zZWQpOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFnZW50TWFu
YWdlcjo6b25OYXZpZ2F0ZSk6CisgICAgICAgIChXZWJLaXQ6OkRlYnVnZ2VyQWdlbnRNYW5hZ2Vy
OjpzZW5kQ29tbWFuZFRvVjgpOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFnZW50TWFuYWdl
cjo6c2VuZENvbnRpbnVlQ29tbWFuZFRvVjgpOgorICAgICAgICAoV2ViS2l0OjpEZWJ1Z2dlckFn
ZW50TWFuYWdlcjo6ZmluZEFnZW50Rm9yQ3VycmVudFY4Q29udGV4dCk6CisgICAgICAgIChXZWJL
aXQ6OkRlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpkZWJ1Z2dlckFnZW50Rm9ySG9zdElkKToKKyAgICAg
ICAgKiBzcmMvRGVidWdnZXJBZ2VudE1hbmFnZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OkRlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpVdGlsaXR5Q29udGV4dFNjb3BlOjpVdGlsaXR5Q29udGV4
dFNjb3BlKToKKyAgICAgICAgKFdlYktpdDo6RGVidWdnZXJBZ2VudE1hbmFnZXI6OlV0aWxpdHlD
b250ZXh0U2NvcGU6On5VdGlsaXR5Q29udGV4dFNjb3BlKToKKyAgICAgICAgKiBzcmMvRGV2VG9v
bHNSUEMuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Oik6CisgICAgICAgIChXZWJLaXQ6OkRl
dlRvb2xzUlBDOjpEZWxlZ2F0ZTo6RGVsZWdhdGUpOgorICAgICAgICAoV2ViS2l0OjpEZXZUb29s
c1JQQzo6RGVsZWdhdGU6On5EZWxlZ2F0ZSk6CisgICAgICAgIChXZWJLaXQ6OkRldlRvb2xzUlBD
OjpEZXZUb29sc1JQQyk6CisgICAgICAgIChXZWJLaXQ6OkRldlRvb2xzUlBDOjp+RGV2VG9vbHNS
UEMpOgorICAgICAgICAoV2ViS2l0OjpEZXZUb29sc1JQQzo6c2VuZFJwY01lc3NhZ2UpOgorICAg
ICAgICAqIHNyYy9EZXZUb29sc1JQQ0pTLmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9Qcm9maWxl
ckFnZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9Qcm9maWxlckFnZW50SW1wbC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpQcm9maWxlckFnZW50SW1wbDo6Z2V0QWN0aXZlUHJvZmls
ZXJNb2R1bGVzKToKKyAgICAgICAgKFdlYktpdDo6UHJvZmlsZXJBZ2VudEltcGw6OmdldExvZ0xp
bmVzKToKKyAgICAgICAgKiBzcmMvUHJvZmlsZXJBZ2VudEltcGwuaDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OlByb2ZpbGVyQWdlbnRJbXBsOjpQcm9maWxlckFnZW50SW1wbCk6CisgICAgICAg
IChXZWJLaXQ6OlByb2ZpbGVyQWdlbnRJbXBsOjp+UHJvZmlsZXJBZ2VudEltcGwpOgorICAgICAg
ICAqIHNyYy9Ub29sc0FnZW50Lmg6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0Fn
ZW50SW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjopOgorICAgICAgICAoV2ViS2l0
OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6V2ViRGV2VG9vbHNBZ2VudEltcGwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6fldlYkRldlRvb2xzQWdlbnRJbXBsKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpc3Bvc2VVdGlsaXR5Q29udGV4
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjp1bmhpZGVSZXNvdXJj
ZXNQYW5lbElmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudElt
cGw6OmF0dGFjaCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpkZXRh
Y2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkTmF2aWdhdGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkQ29tbWl0UHJvdmlz
aW9uYWxMb2FkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpZENs
ZWFyV2luZG93T2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6
OmZvcmNlUmVwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpk
aXNwYXRjaE9uSW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRv
b2xzQWdlbnRJbXBsOjpkaXNwYXRjaE9uSW5qZWN0ZWRTY3JpcHQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6ZXhlY3V0ZVZvaWRKYXZhU2NyaXB0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVu
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjppbnNwZWN0RWxlbWVu
dEF0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OnNldFJ1bnRpbWVG
ZWF0dXJlRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpz
ZW5kUnBjTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpj
b21waWxlVXRpbGl0eVNjcmlwdHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50
SW1wbDo6aW5pdERldlRvb2xzQWdlbnRIb3N0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9v
bHNBZ2VudEltcGw6OmNyZWF0ZUluc3BlY3RvckJhY2tlbmRWOFdyYXBwZXIpOgorICAgICAgICAo
V2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6cmVzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OnNldEFwdUFnZW50RW5h
YmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpqc0Rpc3BhdGNo
T25DbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6anNEaXNw
YXRjaFRvQXB1KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OmpzRXZh
bHVhdGVPblNlbGYpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6anNP
blJ1bnRpbWVGZWF0dXJlU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9v
bHNBZ2VudEltcGw6Omluc3BlY3RvckNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJE
ZXZUb29sc0FnZW50SW1wbDo6aWRlbnRpZmllckZvckluaXRpYWxSZXF1ZXN0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAg
IChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkRmluaXNoTG9hZGluZyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpkaWRGYWlsTG9hZGluZyk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRJbXBsOjpldmFsdWF0ZUluV2ViSW5zcGVj
dG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudEltcGw6OnNldFRpbWVsaW5l
UHJvZmlsaW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnQ6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnQ6OmV4ZWN1dGVEZWJ1Z2dl
ckNvbW1hbmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50OjpkZWJ1Z2dlclBh
dXNlU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudDo6c2V0TWVzc2Fn
ZUxvb3BEaXNwYXRjaEhhbmRsZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50
OjpkaXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmRPbklPVGhyZWFkKToKKyAgICAgICAgKiBzcmMv
V2ViRGV2VG9vbHNBZ2VudEltcGwuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkRldlRv
b2xzQWdlbnRJbXBsOjpob3N0SWQpOgorICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0Zyb250ZW5k
SW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpUb1Y4U3RyaW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OldlYkRldlRvb2xzRnJvbnRlbmRJbXBsKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6On5XZWJEZXZUb29sc0Zyb250ZW5k
SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpkaXNwYXRj
aE1lc3NhZ2VGcm9tQWdlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250ZW5k
SW1wbDo6ZXhlY3V0ZVNjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRl
bmRJbXBsOjpkaXNwYXRjaE9uV2ViSW5zcGVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2
VG9vbHNGcm9udGVuZEltcGw6OnNlbmRScGNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RGV2VG9vbHNGcm9udGVuZEltcGw6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKToKKyAgICAgICAg
KFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmNvbnRleHRNZW51Q2xlYXJlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0xvYWRlZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc1BsYXRmb3JtKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzUG9ydCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0NvcHlUZXh0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzQWN0aXZhdGVXaW5kb3cpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNDbG9zZVdpbmRvdyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0RvY2tXaW5kb3cpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNVbmRvY2tXaW5kb3cpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNMb2NhbGl6ZWRTdHJp
bmdzVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzSGlk
ZGVuUGFuZWxzKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6Ompz
RGVidWdnZXJDb21tYW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZElt
cGw6OmpzU2V0dGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRlbmRJbXBs
Ojpqc1NldFNldHRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250ZW5kSW1w
bDo6anNEZWJ1Z2dlclBhdXNlU2NyaXB0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNG
cm9udGVuZEltcGw6OmpzV2luZG93VW5sb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2
VG9vbHNGcm9udGVuZEltcGw6OmpzU2hvd0NvbnRleHRNZW51KToKKyAgICAgICAgKiBzcmMvV2Vi
RGV2VG9vbHNGcm9udGVuZEltcGwuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkRldlRv
b2xzRnJvbnRlbmRJbXBsOjpNZW51UHJvdmlkZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpNZW51UHJvdmlkZXI6On5NZW51UHJvdmlkZXIpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6TWVudVByb3ZpZGVyOjpk
aXNjb25uZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6Ok1l
bnVQcm92aWRlcjo6cG9wdWxhdGVDb250ZXh0TWVudSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRl
dlRvb2xzRnJvbnRlbmRJbXBsOjpNZW51UHJvdmlkZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVk
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZEltcGw6Ok1lbnVQcm92aWRl
cjo6Y29udGV4dE1lbnVDbGVhcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRGV2VG9vbHNGcm9u
dGVuZEltcGw6Ok1lbnVQcm92aWRlcjo6TWVudVByb3ZpZGVyKToKKwogMjAxMC0wMS0zMSAgS2Vu
dCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVy
ZW15IE9ybG93LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCAzYjVhMTdmLi4zMDQ5YjczIDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cApAQCAtMTkyLDYgKzE5Miw3IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy93aW4vV2Vi
U2FuZGJveFN1cHBvcnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy93aW4vV2ViU2NyZWVu
SW5mb0ZhY3RvcnkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy93aW4vV2ViU2NyZWVuSW5m
b0ZhY3RvcnkuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9BUFVBZ2VudERlbGVnYXRlLmgnLAog
ICAgICAgICAgICAgICAgICdzcmMvQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwJywKICAgICAgICAg
ICAgICAgICAnc3JjL0FwcGxpY2F0aW9uQ2FjaGVIb3N0SW50ZXJuYWwuaCcsCiAgICAgICAgICAg
ICAgICAgJ3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcCcsCkBAIC0xOTksNiArMjAwLDggQEAK
ICAgICAgICAgICAgICAgICAnc3JjL0F1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudC5oJywKICAg
ICAgICAgICAgICAgICAnc3JjL0JhY2tGb3J3YXJkTGlzdENsaWVudEltcGwuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL0JhY2tGb3J3YXJkTGlzdENsaWVudEltcGwuaCcsCisgICAgICAgICAg
ICAgICAgJ3NyYy9Cb3VuZE9iamVjdC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvQm91bmRP
YmplY3QuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9DaHJvbWVDbGllbnRJbXBsLmgnLAogICAgICAgICAgICAgICAg
ICdzcmMvQ2hyb21pdW1CcmlkZ2UuY3BwJywKQEAgLTIwNyw2ICsyMTAsMTMgQEAKICAgICAgICAg
ICAgICAgICAnc3JjL0NvbnRleHRNZW51Q2xpZW50SW1wbC5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvQ29udGV4dE1lbnVDbGllbnRJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvRGF0
YWJhc2VPYnNlcnZlci5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvRGVidWdnZXJBZ2VudC5o
JywKKyAgICAgICAgICAgICAgICAnc3JjL0RlYnVnZ2VyQWdlbnRJbXBsLmNwcCcsCisgICAgICAg
ICAgICAgICAgJ3NyYy9EZWJ1Z2dlckFnZW50SW1wbC5oJywKKyAgICAgICAgICAgICAgICAnc3Jj
L0RlYnVnZ2VyQWdlbnRNYW5hZ2VyLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9EZWJ1Z2dl
ckFnZW50TWFuYWdlci5oJywKKyAgICAgICAgICAgICAgICAnc3JjL0RldlRvb2xzUlBDLmgnLAor
ICAgICAgICAgICAgICAgICdzcmMvRGV2VG9vbHNSUENKUy5oJywKICAgICAgICAgICAgICAgICAn
c3JjL0RPTVV0aWxpdGllc1ByaXZhdGUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0RPTVV0
aWxpdGllc1ByaXZhdGUuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9EcmFnQ2xpZW50SW1wbC5j
cHAnLApAQCAtMjMyLDYgKzI0Miw5IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9Ob3RpZmljYXRp
b25QcmVzZW50ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9QbGF0Zm9ybU1lc3Nh
Z2VQb3J0Q2hhbm5lbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvUGxhdGZvcm1NZXNzYWdl
UG9ydENoYW5uZWwuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9Qcm9maWxlckFnZW50LmgnLAor
ICAgICAgICAgICAgICAgICdzcmMvUHJvZmlsZXJBZ2VudEltcGwuY3BwJywKKyAgICAgICAgICAg
ICAgICAnc3JjL1Byb2ZpbGVyQWdlbnRJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvUmVz
b3VyY2VIYW5kbGUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1NoYXJlZFdvcmtlclJlcG9z
aXRvcnkuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1NvY2tldFN0cmVhbUhhbmRsZS5jcHAn
LApAQCAtMjQzLDYgKzI1Niw3IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9TdG9yYWdlTmFtZXNw
YWNlUHJveHkuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1N0b3JhZ2VOYW1lc3BhY2VQcm94
eS5oJywKICAgICAgICAgICAgICAgICAnc3JjL1RlbXBvcmFyeUdsdWUuaCcsCisgICAgICAgICAg
ICAgICAgJ3NyYy9Ub29sc0FnZW50LmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQWNjZXNz
aWJpbGl0eUNhY2hlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJBY2Nlc3NpYmlsaXR5
Q2FjaGVJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJBY2Nlc3NpYmlsaXR5Q2Fj
aGVJbXBsLmgnLApAQCAtMjU5LDYgKzI3MywxMCBAQAogICAgICAgICAgICAgICAgICdzcmMvV2Vi
RGF0YWJhc2UuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkRhdGFTb3VyY2VJbXBsLmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJEYXRhU291cmNlSW1wbC5oJywKKyAgICAgICAg
ICAgICAgICAnc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcCcsCisgICAgICAgICAgICAgICAg
J3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5oJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkRl
dlRvb2xzRnJvbnRlbmRJbXBsLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJEZXZUb29s
c0Zyb250ZW5kSW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkRvY3VtZW50LmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJEcmFnRGF0YS5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViRWxlbWVudC5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9B
UFVBZ2VudERlbGVnYXRlLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL0FQVUFnZW50RGVsZWdhdGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGJlNzAyCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9BUFVBZ2VudERlbGVnYXRlLmgKQEAgLTAsMCAr
MSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQVBVQWdlbnREZWxlZ2F0ZV9oCisjZGVmaW5lIEFQVUFnZW50RGVsZWdh
dGVfaAorCisjaW5jbHVkZSAiRGV2VG9vbHNSUEMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
KyNkZWZpbmUgQVBVX0FHRU5UX0RFTEVHQVRFX1NUUlVDVChNRVRIT0QwLCBNRVRIT0QxLCBNRVRI
T0QyLCBNRVRIT0QzLCBNRUhUT0Q0LCBNRVRIT0Q1KSBcCisgICAgLyogU2VuZHMgYSBqc29uIG9i
amVjdCB0byBhcHUuICovIFwKKyAgICBNRVRIT0QxKGRpc3BhdGNoVG9BcHUsIFN0cmluZyAvKiBk
YXRhICovKQorCitERUZJTkVfUlBDX0NMQVNTKEFwdUFnZW50RGVsZWdhdGUsIEFQVV9BR0VOVF9E
RUxFR0FURV9TVFJVQ1QpCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQm91bmRPYmplY3QuY3BwIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9Cb3VuZE9iamVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uOTAwOTZjMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQm91bmRP
YmplY3QuY3BwCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Qm91bmRPYmplY3QuaCIKKworI2luY2x1ZGUgIlY4UHJveHkuaCIKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK0JvdW5kT2JqZWN0OjpCb3VuZE9iamVjdCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBj
b250ZXh0LCB2b2lkKiB2OFRoaXMsIGNvbnN0IGNoYXIqIG9iamVjdE5hbWUpCisgICAgOiBtX29i
amVjdE5hbWUob2JqZWN0TmFtZSkKKyAgICAsIG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV92
OFRoaXModjhUaGlzKQoreworICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUoY29u
dGV4dCk7CisgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBsb2NhbFRlbXBsYXRl
ID0gdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhXZWJDb3JlOjpWOFByb3h5OjpjaGVja05ld0xl
Z2FsKTsKKyAgICBtX2hvc3RUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPjo6TmV3KGxvY2FsVGVtcGxhdGUpOworICAgIG1faG9zdFRlbXBsYXRlLT5TZXRDbGFz
c05hbWUodjg6OlN0cmluZzo6TmV3KG9iamVjdE5hbWUpKTsKK30KKworQm91bmRPYmplY3Q6On5C
b3VuZE9iamVjdCgpCit7CisgICAgbV9ob3N0VGVtcGxhdGUuRGlzcG9zZSgpOworfQorCit2b2lk
IEJvdW5kT2JqZWN0OjphZGRQcm90b0Z1bmN0aW9uKGNvbnN0IGNoYXIqIG5hbWUsIHY4OjpJbnZv
Y2F0aW9uQ2FsbGJhY2sgY2FsbGJhY2spCit7CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRl
eHRTY29wZShtX2NvbnRleHQpOworICAgIHY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPiBzaWduYXR1
cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcobV9ob3N0VGVtcGxhdGUpOworICAgIHY4OjpMb2NhbDx2
ODo6T2JqZWN0VGVtcGxhdGU+IHByb3RvID0gbV9ob3N0VGVtcGxhdGUtPlByb3RvdHlwZVRlbXBs
YXRlKCk7CisgICAgdjg6OkxvY2FsPHY4OjpFeHRlcm5hbD4gdjhUaGlzID0gdjg6OkV4dGVybmFs
OjpOZXcobV92OFRoaXMpOworICAgIHByb3RvLT5TZXQoCisgICAgICAgIHY4OjpTdHJpbmc6Ok5l
dyhuYW1lKSwKKyAgICAgICAgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldygKKyAgICAgICAgICAg
IGNhbGxiYWNrLAorICAgICAgICAgICAgdjhUaGlzLAorICAgICAgICAgICAgc2lnbmF0dXJlKSwK
KyAgICAgICAgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6RG9udERlbGV0
ZSkpOworfQorCit2b2lkIEJvdW5kT2JqZWN0OjpidWlsZCgpCit7CisgICAgdjg6OkNvbnRleHQ6
OlNjb3BlIGNvbnRleHRTY29wZShtX2NvbnRleHQpOworICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rp
b24+IGNvbnN0cnVjdG9yID0gbV9ob3N0VGVtcGxhdGUtPkdldEZ1bmN0aW9uKCk7CisgICAgdjg6
OkxvY2FsPHY4OjpPYmplY3Q+IGJvdW5kT2JqZWN0ID0gV2ViQ29yZTo6U2FmZUFsbG9jYXRpb246
Om5ld0luc3RhbmNlKGNvbnN0cnVjdG9yKTsKKworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
Z2xvYmFsID0gbV9jb250ZXh0LT5HbG9iYWwoKTsKKyAgICBnbG9iYWwtPlNldCh2ODo6U3RyaW5n
OjpOZXcobV9vYmplY3ROYW1lKSwgYm91bmRPYmplY3QpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQm91bmRPYmplY3QuaCBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvQm91bmRPYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi43NjllODNmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9Cb3VuZE9iamVjdC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJvdW5kT2JqZWN0X2gKKyNk
ZWZpbmUgQm91bmRPYmplY3RfaAorCisjaW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIEJvdW5kT2JqZWN0IGlzIGEg
aGVscGVyIGNsYXNzIHRoYXQgbGV0cyB5b3UgbWFwIEphdmFTY3JpcHQgbWV0aG9kIGNhbGxzCisv
LyBkaXJlY3RseSB0byBDKysgbWV0aG9kIGNhbGxzLiBJdCBzaG91bGQgYmUgZGVzdHJveWVkIG9u
Y2UgSlMgb2JqZWN0IGlzCisvLyBidWlsdC4KK2NsYXNzIEJvdW5kT2JqZWN0IDogcHVibGljIE5v
bmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBCb3VuZE9iamVjdCh2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiBjb250ZXh0LCB2b2lkKiB2OFRoaXMsIGNvbnN0IGNoYXIqIG9iamVjdE5hbWUpOworICAg
IHZpcnR1YWwgfkJvdW5kT2JqZWN0KCk7CisKKyAgICB2b2lkIGFkZFByb3RvRnVuY3Rpb24oY29u
c3QgY2hhciogbmFtZSwgdjg6Okludm9jYXRpb25DYWxsYmFjayBjYWxsYmFjayk7CisgICAgdm9p
ZCBidWlsZCgpOworCitwcml2YXRlOgorICAgIHY4OjpIYW5kbGVTY29wZSBtX2hhbmRsZVNjb3Bl
OworICAgIGNvbnN0IGNoYXIqIG1fb2JqZWN0TmFtZTsKKyAgICB2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PiBtX2NvbnRleHQ7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IG1faG9zdFRlbXBsYXRlOworICAgIHZvaWQqIG1fdjhUaGlzOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1
Z2dlckFnZW50LmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2VyQWdlbnQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWM5Njg2Ci0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50LmgKQEAgLTAsMCArMSw1NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgRGVidWdnZXJBZ2VudF9oCisjZGVmaW5lIERlYnVnZ2VyQWdlbnRfaAorCisjaW5jbHVkZSAi
RGV2VG9vbHNSUEMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNkZWZpbmUgREVCVUdHRVJf
QUdFTlRfU1RSVUNUKE1FVEhPRDAsIE1FVEhPRDEsIE1FVEhPRDIsIE1FVEhPRDMsIE1FVEhPRDQs
IE1FVEhPRDUpIFwKKyAgICAvKiBSZXF1ZXN0cyBnbG9iYWwgY29udGV4dCBpZCBvZiB0aGUgaW5z
cGVjdGVkIHRhYi4gKi8gXAorICAgIE1FVEhPRDAoZ2V0Q29udGV4dElkKQorCitERUZJTkVfUlBD
X0NMQVNTKERlYnVnZ2VyQWdlbnQsIERFQlVHR0VSX0FHRU5UX1NUUlVDVCkKKworI2RlZmluZSBE
RUJVR0dFUl9BR0VOVF9ERUxFR0FURV9TVFJVQ1QoTUVUSE9EMCwgTUVUSE9EMSwgTUVUSE9EMiwg
TUVUSE9EMywgTUVUSE9ENCwgTUVUSE9ENSkgXAorICAgIE1FVEhPRDEoZGVidWdnZXJPdXRwdXQs
IFN0cmluZyAvKiBvdXRwdXQgdGV4dCAqLykgXAorICAgIFwKKyAgICAvKiBQdXNoZXMgZGVidWdn
ZXIgY29udGV4dCBpZCBpbnRvIHRoZSBjbGllbnQuICovIFwKKyAgICBNRVRIT0QxKHNldENvbnRl
eHRJZCwgaW50IC8qIGNvbnRleHQgaWQgKi8pCisKK0RFRklORV9SUENfQ0xBU1MoRGVidWdnZXJB
Z2VudERlbGVnYXRlLCBERUJVR0dFUl9BR0VOVF9ERUxFR0FURV9TVFJVQ1QpCisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
RGVidWdnZXJBZ2VudEltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50
SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMzZDFlYQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudEltcGwuY3Bw
CkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRlYnVnZ2Vy
QWdlbnRJbXBsLmgiCisKKyNpbmNsdWRlICJEZWJ1Z2dlckFnZW50TWFuYWdlci5oIgorI2luY2x1
ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisj
aW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhET01XaW5kb3cuaCIKKyNpbmNsdWRl
ICJWOEluZGV4LmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorI2luY2x1ZGUgIldlYkRldlRvb2xz
QWdlbnRJbXBsLmgiCisjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKKyNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK3VzaW5nIFdlYkNvcmU6OkRPTVdpbmRvdzsKK3VzaW5nIFdlYkNvcmU6OkRvY3VtZW50Owor
dXNpbmcgV2ViQ29yZTo6RnJhbWU7Cit1c2luZyBXZWJDb3JlOjpQYWdlOwordXNpbmcgV2ViQ29y
ZTo6U3RyaW5nOwordXNpbmcgV2ViQ29yZTo6VjhDbGFzc0luZGV4OwordXNpbmcgV2ViQ29yZTo6
VjhDdXN0b207Cit1c2luZyBXZWJDb3JlOjpWOERPTVdpbmRvdzsKK3VzaW5nIFdlYkNvcmU6OlY4
RE9NV3JhcHBlcjsKK3VzaW5nIFdlYkNvcmU6OlY4UHJveHk7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitEZWJ1Z2dlckFnZW50SW1wbDo6RGVidWdnZXJBZ2VudEltcGwoCisgICAgV2ViVmlld0lt
cGwqIHdlYlZpZXdJbXBsLAorICAgIERlYnVnZ2VyQWdlbnREZWxlZ2F0ZSogZGVsZWdhdGUsCisg
ICAgV2ViRGV2VG9vbHNBZ2VudEltcGwqIHdlYmRldnRvb2xzQWdlbnQpCisgICAgOiBtX3dlYlZp
ZXdJbXBsKHdlYlZpZXdJbXBsKQorICAgICwgbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkKKyAgICAsIG1f
d2ViZGV2dG9vbHNBZ2VudCh3ZWJkZXZ0b29sc0FnZW50KQorICAgICwgbV9hdXRvQ29udGludWVP
bkV4Y2VwdGlvbihmYWxzZSkKK3sKKyAgICBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6ZGVidWdBdHRh
Y2godGhpcyk7Cit9CisKK0RlYnVnZ2VyQWdlbnRJbXBsOjp+RGVidWdnZXJBZ2VudEltcGwoKQor
eworICAgIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpkZWJ1Z0RldGFjaCh0aGlzKTsKK30KKwordm9p
ZCBEZWJ1Z2dlckFnZW50SW1wbDo6Z2V0Q29udGV4dElkKCkKK3sKKyAgICBtX2RlbGVnYXRlLT5z
ZXRDb250ZXh0SWQobV93ZWJkZXZ0b29sc0FnZW50LT5ob3N0SWQoKSk7Cit9CisKK3ZvaWQgRGVi
dWdnZXJBZ2VudEltcGw6OmRlYnVnZ2VyT3V0cHV0KGNvbnN0IFN0cmluZyYgY29tbWFuZCkKK3sK
KyAgICBtX2RlbGVnYXRlLT5kZWJ1Z2dlck91dHB1dChjb21tYW5kKTsKKyAgICBtX3dlYmRldnRv
b2xzQWdlbnQtPmZvcmNlUmVwYWludCgpOworfQorCisvLyBzdGF0aWMKK3ZvaWQgRGVidWdnZXJB
Z2VudEltcGw6OmNyZWF0ZVV0aWxpdHlDb250ZXh0KEZyYW1lKiBmcmFtZSwgdjg6OlBlcnNpc3Rl
bnQ8djg6OkNvbnRleHQ+KiBjb250ZXh0KQoreworICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsK
KworICAgIC8vIFNldCB1cCB0aGUgRE9NIHdpbmRvdyBhcyB0aGUgcHJvdG90eXBlIG9mIHRoZSBu
ZXcgZ2xvYmFsIG9iamVjdC4KKyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB3aW5kb3dDb250
ZXh0ID0gVjhQcm94eTo6Y29udGV4dChmcmFtZSk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3aW5kb3dHbG9iYWwgPSB3aW5kb3dDb250ZXh0LT5HbG9iYWwoKTsKKyAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IHdpbmRvd1dyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBw
ZXIoVjhDbGFzc0luZGV4OjpET01XSU5ET1csIHdpbmRvd0dsb2JhbCk7CisKKyAgICBBU1NFUlQo
VjhET01XaW5kb3c6OnRvTmF0aXZlKHdpbmRvd1dyYXBwZXIpID09IGZyYW1lLT5kb21XaW5kb3co
KSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3RUZW1wbGF0ZT4gZ2xvYmFsVGVtcGxhdGUg
PSB2ODo6T2JqZWN0VGVtcGxhdGU6Ok5ldygpOworCisgICAgLy8gVE9ETyh5dXJ5cyk6IHByb3Zp
ZGUgYSBmdW5jdGlvbiBpbiB2OCBiaW5kaW5ncyB0aGF0IHdvdWxkIG1ha2UgdGhlCisgICAgLy8g
dXRpbGl0eSBjb250ZXh0IG1vcmUgbGlrZSBtYWluIHdvcmxkIGNvbnRleHQgb2YgdGhlIGluc3Bl
Y3RlZCBmcmFtZSwKKyAgICAvLyBvdGhlcndpc2Ugd2UgbmVlZCB0byBtYW51YWxseSBtYWtlIGl0
IHNhdGlzZnkgdmFyaW91cyBpbnZhcmlhbnRzCisgICAgLy8gdGhhdCBWOFByb3h5OjpnZXRFbnRl
cmVkIGFuZCBzb21lIG90aGVyIFY4UHJveHkgbWV0aG9kcyBleHBlY3QgdG8gZmluZAorICAgIC8v
IG9uIHY4IGNvbnRleHRzIG9uIHRoZSBjb250ZXh0cyBzdGFjay4KKyAgICAvLyBTZWUgVjhQcm94
eTo6Y3JlYXRlTmV3Q29udGV4dC4KKyAgICAvLworICAgIC8vIEluc3RhbGwgYSBzZWN1cml0eSBo
YW5kbGVyIHdpdGggVjguCisgICAgZ2xvYmFsVGVtcGxhdGUtPlNldEFjY2Vzc0NoZWNrQ2FsbGJh
Y2tzKAorICAgICAgICBWOERPTVdpbmRvdzo6bmFtZWRTZWN1cml0eUNoZWNrLAorICAgICAgICBW
OERPTVdpbmRvdzo6aW5kZXhlZFNlY3VyaXR5Q2hlY2ssCisgICAgICAgIHY4OjpJbnRlZ2VyOjpO
ZXcoVjhDbGFzc0luZGV4OjpET01XSU5ET1cpKTsKKyAgICAvLyBXZSBzZXQgbnVtYmVyIG9mIGlu
dGVybmFsIGZpZWxkcyB0byBtYXRjaCB0aGF0IGluIFY4RE9NV2luZG93IHdyYXBwZXIuCisgICAg
Ly8gU2VlIGh0dHA6Ly9jcmJ1Zy5jb20vMjg5NjEKKyAgICBnbG9iYWxUZW1wbGF0ZS0+U2V0SW50
ZXJuYWxGaWVsZENvdW50KFY4RE9NV2luZG93OjppbnRlcm5hbEZpZWxkQ291bnQpOworCisgICAg
KmNvbnRleHQgPSB2ODo6Q29udGV4dDo6TmV3KDAgLyogbm8gZXh0ZW5zaW9ucyAqLywgZ2xvYmFs
VGVtcGxhdGUsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSk7CisgICAgdjg6OkNvbnRleHQ6OlNj
b3BlIGNvbnRleHRTY29wZSgqY29udGV4dCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBn
bG9iYWwgPSAoKmNvbnRleHQpLT5HbG9iYWwoKTsKKworICAgIHY4OjpIYW5kbGU8djg6OlN0cmlu
Zz4gaW1wbGljaXRQcm90b1N0cmluZyA9IHY4OjpTdHJpbmc6Ok5ldygiX19wcm90b19fIik7Cisg
ICAgZ2xvYmFsLT5TZXQoaW1wbGljaXRQcm90b1N0cmluZywgd2luZG93V3JhcHBlcik7CisKKyAg
ICAvLyBHaXZlIHRoZSBjb2RlIHJ1bm5pbmcgaW4gdGhlIG5ldyBjb250ZXh0IGEgd2F5IHRvIGdl
dCBhY2Nlc3MgdG8gdGhlCisgICAgLy8gb3JpZ2luYWwgY29udGV4dC4KKyAgICBnbG9iYWwtPlNl
dCh2ODo6U3RyaW5nOjpOZXcoImNvbnRlbnRXaW5kb3ciKSwgd2luZG93R2xvYmFsKTsKK30KKwor
U3RyaW5nIERlYnVnZ2VyQWdlbnRJbXBsOjpleGVjdXRlVXRpbGl0eUZ1bmN0aW9uKAorICAgIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQsCisgICAgaW50IGNhbGxJZCwKKyAgICBjb25z
dCBjaGFyKiBvYmplY3QsCisgICAgY29uc3QgU3RyaW5nICZmdW5jdGlvbk5hbWUsCisgICAgY29u
c3QgU3RyaW5nJiBqc29uQXJncywKKyAgICBib29sIGFzeW5jLAorICAgIFN0cmluZyogZXhjZXB0
aW9uKQoreworICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICBBU1NFUlQoIWNvbnRleHQu
SXNFbXB0eSgpKTsKKyAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgKmV4Y2Vw
dGlvbiA9ICJObyB3aW5kb3cgY29udGV4dC4iOworICAgICAgICByZXR1cm4gIiI7CisgICAgfQor
ICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUoY29udGV4dCk7CisKKyAgICBEZWJ1
Z2dlckFnZW50TWFuYWdlcjo6VXRpbGl0eUNvbnRleHRTY29wZSB1dGlsaXR5U2NvcGU7CisKKyAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGRpc3BhdGNoT2JqZWN0ID0gdjg6OkhhbmRsZTx2ODo6
T2JqZWN0Pjo6Q2FzdCgKKyAgICAgICAgY29udGV4dC0+R2xvYmFsKCktPkdldCh2ODo6U3RyaW5n
OjpOZXcob2JqZWN0KSkpOworCisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGRpc3BhdGNoRnVu
Y3Rpb24gPSBkaXNwYXRjaE9iamVjdC0+R2V0KHY4OjpTdHJpbmc6Ok5ldygiZGlzcGF0Y2giKSk7
CisgICAgQVNTRVJUKGRpc3BhdGNoRnVuY3Rpb24tPklzRnVuY3Rpb24oKSk7CisgICAgdjg6Okhh
bmRsZTx2ODo6RnVuY3Rpb24+IGZ1bmN0aW9uID0gdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+OjpD
YXN0KGRpc3BhdGNoRnVuY3Rpb24pOworCisgICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBmdW5j
dGlvbk5hbWVXcmFwcGVyID0gdjg6OkhhbmRsZTx2ODo6U3RyaW5nPigKKyAgICAgICAgdjg6OlN0
cmluZzo6TmV3KGZ1bmN0aW9uTmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgdjg6OkhhbmRsZTx2
ODo6U3RyaW5nPiBqc29uQXJnc1dyYXBwZXIgPSB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+KAorICAg
ICAgICB2ODo6U3RyaW5nOjpOZXcoanNvbkFyZ3MudXRmOCgpLmRhdGEoKSkpOworICAgIHY4OjpI
YW5kbGU8djg6Ok51bWJlcj4gY2FsbElkV3JhcHBlciA9IHY4OjpIYW5kbGU8djg6Ok51bWJlcj4o
CisgICAgICAgIHY4OjpOdW1iZXI6Ok5ldyhhc3luYyA/IGNhbGxJZCA6IDApKTsKKworICAgIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBhcmdzW10gPSB7CisgICAgICAgIGZ1bmN0aW9uTmFtZVdyYXBw
ZXIsCisgICAgICAgIGpzb25BcmdzV3JhcHBlciwKKyAgICAgICAgY2FsbElkV3JhcHBlcgorICAg
IH07CisKKyAgICB2ODo6VHJ5Q2F0Y2ggdHJ5Q2F0Y2g7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHJlc09iaiA9IGZ1bmN0aW9uLT5DYWxsKGNvbnRleHQtPkdsb2JhbCgpLCAzLCBhcmdzKTsK
KyAgICBpZiAodHJ5Q2F0Y2guSGFzQ2F1Z2h0KCkpIHsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpN
ZXNzYWdlPiBtZXNzYWdlID0gdHJ5Q2F0Y2guTWVzc2FnZSgpOworICAgICAgICBpZiAobWVzc2Fn
ZS5Jc0VtcHR5KCkpCisgICAgICAgICAgICAqZXhjZXB0aW9uID0gIlVua25vd24gZXhjZXB0aW9u
IjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IFdlYkNvcmU6OnRvV2Vi
Q29yZVN0cmluZyhtZXNzYWdlLT5HZXQoKSk7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9Cisg
ICAgcmV0dXJuIFdlYkNvcmU6OnRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2socmVzT2JqKTsK
K30KKwordm9pZCBEZWJ1Z2dlckFnZW50SW1wbDo6ZXhlY3V0ZVZvaWRKYXZhU2NyaXB0KHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQpCit7CisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3Bl
OworICAgIEFTU0VSVCghY29udGV4dC5Jc0VtcHR5KCkpOworICAgIHY4OjpDb250ZXh0OjpTY29w
ZSBjb250ZXh0U2NvcGUoY29udGV4dCk7CisgICAgRGVidWdnZXJBZ2VudE1hbmFnZXI6OlV0aWxp
dHlDb250ZXh0U2NvcGUgdXRpbGl0eVNjb3BlOworCisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGZ1bmN0aW9uID0KKyAgICAgICAgY29udGV4dC0+R2xvYmFsKCktPkdldCh2ODo6U3RyaW5nOjpO
ZXcoImRldnRvb2xzJCR2b2lkIikpOworICAgIEFTU0VSVChmdW5jdGlvbi0+SXNGdW5jdGlvbigp
KTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJnc1tdID0geworICAgICAgICB2ODo6TG9j
YWw8djg6OlZhbHVlPigpCisgICAgfTsKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj46OkNh
c3QoZnVuY3Rpb24pLT5DYWxsKGNvbnRleHQtPkdsb2JhbCgpLCAwLCBhcmdzKTsKK30KKworV2Vi
Q29yZTo6UGFnZSogRGVidWdnZXJBZ2VudEltcGw6OnBhZ2UoKQoreworICAgIHJldHVybiBtX3dl
YlZpZXdJbXBsLT5wYWdlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50SW1wbC5oIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9EZWJ1Z2dlckFnZW50SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjY1ZGMxNGMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Rl
YnVnZ2VyQWdlbnRJbXBsLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERlYnVnZ2VyQWdlbnRJ
bXBsX2gKKyNkZWZpbmUgRGVidWdnZXJBZ2VudEltcGxfaAorCisjaW5jbHVkZSAiRGVidWdnZXJB
Z2VudC5oIgorCisjaW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBE
b2N1bWVudDsKK2NsYXNzIEZyYW1lOworY2xhc3MgTm9kZTsKK2NsYXNzIFBhZ2U7CitjbGFzcyBT
dHJpbmc7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJEZXZUb29sc0FnZW50
SW1wbDsKK2NsYXNzIFdlYlZpZXdJbXBsOworCitjbGFzcyBEZWJ1Z2dlckFnZW50SW1wbCA6IHB1
YmxpYyBEZWJ1Z2dlckFnZW50IHsKK3B1YmxpYzoKKyAgICAvLyBDcmVhdGVzIHV0aWxpdHkgY29u
dGV4dCB3aXRoIGluamVjdGVkIGpzIGFnZW50LgorICAgIHN0YXRpYyB2b2lkIGNyZWF0ZVV0aWxp
dHlDb250ZXh0KFdlYkNvcmU6OkZyYW1lKiBmcmFtZSwgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRl
eHQ+KiBjb250ZXh0KTsKKworICAgIERlYnVnZ2VyQWdlbnRJbXBsKFdlYktpdDo6V2ViVmlld0lt
cGwqIHdlYlZpZXdJbXBsLAorICAgICAgICAgICAgICAgICAgICAgIERlYnVnZ2VyQWdlbnREZWxl
Z2F0ZSogZGVsZWdhdGUsCisgICAgICAgICAgICAgICAgICAgICAgV2ViRGV2VG9vbHNBZ2VudElt
cGwqIHdlYmRldnRvb2xzQWdlbnQpOworICAgIHZpcnR1YWwgfkRlYnVnZ2VyQWdlbnRJbXBsKCk7
CisKKyAgICAvLyBEZWJ1Z2dlckFnZW50IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9p
ZCBnZXRDb250ZXh0SWQoKTsKKworICAgIHZvaWQgZGVidWdnZXJPdXRwdXQoY29uc3QgV2ViQ29y
ZTo6U3RyaW5nJiBvdXQpOworCisgICAgdm9pZCBzZXRBdXRvQ29udGludWVPbkV4Y2VwdGlvbihi
b29sIGF1dG9Db250aW51ZSkgeyBtX2F1dG9Db250aW51ZU9uRXhjZXB0aW9uID0gYXV0b0NvbnRp
bnVlOyB9CisKKyAgICBib29sIGF1dG9Db250aW51ZU9uRXhjZXB0aW9uKCkgeyByZXR1cm4gbV9h
dXRvQ29udGludWVPbkV4Y2VwdGlvbjsgfQorCisgICAgLy8gRXhlY3V0ZXMgZnVuY3Rpb24gd2l0
aCB0aGUgZ2l2ZW4gbmFtZSBpbiB0aGUgdXRpbGl0eSBjb250ZXh0LiBQYXNzZXMgbm9kZQorICAg
IC8vIGFuZCBqc29uIGFyZ3MgYXMgcGFyYW1ldGVycy4gTm90ZSB0aGF0IHRoZSBmdW5jdGlvbiBj
YWxsZWQgbXVzdCBiZQorICAgIC8vIGltcGxlbWVudGVkIGluIHRoZSBpbmplY3RfZGlzcGF0Y2gu
anMgZmlsZS4KKyAgICBXZWJDb3JlOjpTdHJpbmcgZXhlY3V0ZVV0aWxpdHlGdW5jdGlvbigKKyAg
ICAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCwKKyAgICAgICAgaW50IGNhbGxJ
ZCwKKyAgICAgICAgY29uc3QgY2hhciogb2JqZWN0LAorICAgICAgICBjb25zdCBXZWJDb3JlOjpT
dHJpbmcmIGZ1bmN0aW9uTmFtZSwKKyAgICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBqc29u
QXJncywKKyAgICAgICAgYm9vbCBhc3luYywKKyAgICAgICAgV2ViQ29yZTo6U3RyaW5nKiBleGNl
cHRpb24pOworCisgICAgLy8gRXhlY3V0ZXMgYSBuby1vcCBmdW5jdGlvbiBpbiB0aGUgdXRpbGl0
eSBjb250ZXh0LiBXZSBkb24ndCB1c2UKKyAgICAvLyBleGVjdXRlVXRpbGl0eUZ1bmN0aW9uIGZv
ciB0aGF0IHRvIGF2b2lkIHNjcmlwdCBldmFsdWF0aW9uIGxlYWRpbmcgdG8KKyAgICAvLyB1bmRl
c2lyYWJsZSBBZnRlckNvbXBpbGUgZXZlbnRzLgorICAgIHZvaWQgZXhlY3V0ZVZvaWRKYXZhU2Ny
aXB0KHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQpOworCisgICAgV2ViQ29yZTo6UGFn
ZSogcGFnZSgpOworICAgIFdlYkRldlRvb2xzQWdlbnRJbXBsKiB3ZWJkZXZ0b29sc0FnZW50KCkg
eyByZXR1cm4gbV93ZWJkZXZ0b29sc0FnZW50OyB9CisKKyAgICBXZWJLaXQ6OldlYlZpZXdJbXBs
KiB3ZWJWaWV3KCkgeyByZXR1cm4gbV93ZWJWaWV3SW1wbDsgfQorCitwcml2YXRlOgorICAgIFdl
YktpdDo6V2ViVmlld0ltcGwqIG1fd2ViVmlld0ltcGw7CisgICAgRGVidWdnZXJBZ2VudERlbGVn
YXRlKiBtX2RlbGVnYXRlOworICAgIFdlYkRldlRvb2xzQWdlbnRJbXBsKiBtX3dlYmRldnRvb2xz
QWdlbnQ7CisgICAgYm9vbCBtX2F1dG9Db250aW51ZU9uRXhjZXB0aW9uOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9EZWJ1Z2dlckFnZW50TWFuYWdlci5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0RlYnVnZ2Vy
QWdlbnRNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWFm
YWZmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50
TWFuYWdlci5jcHAKQEAgLTAsMCArMSwzMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRGVidWdnZXJBZ2VudE1hbmFnZXIuaCIKKworI2luY2x1ZGUgIkRlYnVnZ2VyQWdlbnRJbXBs
LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlR3JvdXBMb2FkRGVmZXJyZXIu
aCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2VudEltcGwu
aCIKKyNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKKyNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgor
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJEZXZUb29sc0FnZW50OjpNZXNzYWdlTG9vcERpc3Bh
dGNoSGFuZGxlciBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6c19tZXNzYWdlTG9vcERpc3BhdGNoSGFu
ZGxlciA9IDA7CisKK2Jvb2wgRGVidWdnZXJBZ2VudE1hbmFnZXI6OnNfaW5Ib3N0RGlzcGF0Y2hI
YW5kbGVyID0gZmFsc2U7CisKK0RlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpEZWZlcnJlcnNNYXAgRGVi
dWdnZXJBZ2VudE1hbmFnZXI6OnNfcGFnZURlZmVycmVyczsKKworYm9vbCBEZWJ1Z2dlckFnZW50
TWFuYWdlcjo6c19pblV0aWxpdHlDb250ZXh0ID0gZmFsc2U7CisKK2Jvb2wgRGVidWdnZXJBZ2Vu
dE1hbmFnZXI6OnNfZGVidWdCcmVha0RlbGF5ZWQgPSBmYWxzZTsKKworbmFtZXNwYWNlIHsKKwor
Y2xhc3MgQ2FsbGVySWRXcmFwcGVyIDogcHVibGljIHY4OjpEZWJ1Zzo6Q2xpZW50RGF0YSwgcHVi
bGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBDYWxsZXJJZFdyYXBwZXIoKSA6IG1fY2Fs
bGVySXNNYW5hbmFnZXIodHJ1ZSksIG1fY2FsbGVySWQoMCkgeyB9CisgICAgZXhwbGljaXQgQ2Fs
bGVySWRXcmFwcGVyKGludCBjYWxsZXJJZCkKKyAgICAgICAgOiBtX2NhbGxlcklzTWFuYW5hZ2Vy
KGZhbHNlKQorICAgICAgICAsIG1fY2FsbGVySWQoY2FsbGVySWQpIHsgfQorICAgIH5DYWxsZXJJ
ZFdyYXBwZXIoKSB7IH0KKyAgICBib29sIGNhbGxlcklzTWFuYW5hZ2VyKCkgY29uc3QgeyByZXR1
cm4gbV9jYWxsZXJJc01hbmFuYWdlcjsgfQorICAgIGludCBjYWxsZXJJZCgpIGNvbnN0IHsgcmV0
dXJuIG1fY2FsbGVySWQ7IH0KK3ByaXZhdGU6CisgICAgYm9vbCBtX2NhbGxlcklzTWFuYW5hZ2Vy
OworICAgIGludCBtX2NhbGxlcklkOworfTsKKworfSAvLyBuYW1lc3BhY2UKKworCit2b2lkIERl
YnVnZ2VyQWdlbnRNYW5hZ2VyOjpkZWJ1Z0hvc3REaXNwYXRjaEhhbmRsZXIoKQoreworICAgIGlm
ICghc19tZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciB8fCAhc19hdHRhY2hlZEFnZW50c01hcCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHNfaW5Ib3N0RGlzcGF0Y2hIYW5kbGVyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzX2luSG9zdERpc3BhdGNoSGFuZGxlciA9IHRydWU7CisKKyAg
ICBWZWN0b3I8V2ViVmlld0ltcGwqPiB2aWV3czsKKyAgICAvLyAxLiBEaXNhYmxlIGFjdGl2ZSBv
YmplY3RzIGFuZCBpbnB1dCBldmVudHMuCisgICAgZm9yIChBdHRhY2hlZEFnZW50c01hcDo6aXRl
cmF0b3IgaXQgPSBzX2F0dGFjaGVkQWdlbnRzTWFwLT5iZWdpbigpOyBpdCAhPSBzX2F0dGFjaGVk
QWdlbnRzTWFwLT5lbmQoKTsgKytpdCkgeworICAgICAgICBEZWJ1Z2dlckFnZW50SW1wbCogYWdl
bnQgPSBpdC0+c2Vjb25kOworICAgICAgICBzX3BhZ2VEZWZlcnJlcnMuc2V0KGFnZW50LT53ZWJW
aWV3KCksIG5ldyBXZWJDb3JlOjpQYWdlR3JvdXBMb2FkRGVmZXJyZXIoYWdlbnQtPnBhZ2UoKSwg
dHJ1ZSkpOworICAgICAgICB2aWV3cy5hcHBlbmQoYWdlbnQtPndlYlZpZXcoKSk7CisgICAgICAg
IGFnZW50LT53ZWJWaWV3KCktPnNldElnbm9yZUlucHV0RXZlbnRzKHRydWUpOworICAgIH0KKwor
ICAgIC8vIDIuIFByb2Nlc3MgbWVzc2FnZXMuCisgICAgc19tZXNzYWdlTG9vcERpc3BhdGNoSGFu
ZGxlcigpOworCisgICAgLy8gMy4gQnJpbmcgdGhpbmdzIGJhY2suCisgICAgZm9yIChWZWN0b3I8
V2ViVmlld0ltcGwqPjo6aXRlcmF0b3IgaXQgPSB2aWV3cy5iZWdpbigpOyBpdCAhPSB2aWV3cy5l
bmQoKTsgKytpdCkgeworICAgICAgICBpZiAoc19wYWdlRGVmZXJyZXJzLmNvbnRhaW5zKCppdCkp
IHsKKyAgICAgICAgICAgIC8vIFRoZSB2aWV3IHdhcyBub3QgY2xvc2VkIGR1cmluZyB0aGUgZGlz
cGF0Y2guCisgICAgICAgICAgICAoKml0KS0+c2V0SWdub3JlSW5wdXRFdmVudHMoZmFsc2UpOwor
ICAgICAgICB9CisgICAgfQorICAgIGRlbGV0ZUFsbFZhbHVlcyhzX3BhZ2VEZWZlcnJlcnMpOwor
ICAgIHNfcGFnZURlZmVycmVycy5jbGVhcigpOworCisgICAgc19pbkhvc3REaXNwYXRjaEhhbmRs
ZXIgPSBmYWxzZTsKKyAgICBpZiAoIXNfYXR0YWNoZWRBZ2VudHNNYXApIHsKKyAgICAgICAgLy8g
UmVtb3ZlIGhhbmRsZXJzIGlmIGFsbCBhZ2VudHMgd2VyZSBkZXRhY2hlZCB3aXRoaW4gaG9zdCBk
aXNwYXRjaC4KKyAgICAgICAgdjg6OkRlYnVnOjpTZXRNZXNzYWdlSGFuZGxlcigwKTsKKyAgICAg
ICAgdjg6OkRlYnVnOjpTZXRIb3N0RGlzcGF0Y2hIYW5kbGVyKDApOworICAgIH0KK30KKworRGVi
dWdnZXJBZ2VudE1hbmFnZXI6OkF0dGFjaGVkQWdlbnRzTWFwKiBEZWJ1Z2dlckFnZW50TWFuYWdl
cjo6c19hdHRhY2hlZEFnZW50c01hcCA9IDA7CisKK3ZvaWQgRGVidWdnZXJBZ2VudE1hbmFnZXI6
OmRlYnVnQXR0YWNoKERlYnVnZ2VyQWdlbnRJbXBsKiBkZWJ1Z2dlckFnZW50KQoreworICAgIGlm
ICghc19hdHRhY2hlZEFnZW50c01hcCkgeworICAgICAgICBzX2F0dGFjaGVkQWdlbnRzTWFwID0g
bmV3IEF0dGFjaGVkQWdlbnRzTWFwKCk7CisgICAgICAgIHY4OjpEZWJ1Zzo6U2V0TWVzc2FnZUhh
bmRsZXIyKCZEZWJ1Z2dlckFnZW50TWFuYWdlcjo6b25WOERlYnVnTWVzc2FnZSk7CisgICAgICAg
IHY4OjpEZWJ1Zzo6U2V0SG9zdERpc3BhdGNoSGFuZGxlcigmRGVidWdnZXJBZ2VudE1hbmFnZXI6
OmRlYnVnSG9zdERpc3BhdGNoSGFuZGxlciwgMTAwIC8qIG1zICovKTsKKyAgICB9CisgICAgaW50
IGhvc3RJZCA9IGRlYnVnZ2VyQWdlbnQtPndlYmRldnRvb2xzQWdlbnQoKS0+aG9zdElkKCk7Cisg
ICAgQVNTRVJUKGhvc3RJZCk7CisgICAgc19hdHRhY2hlZEFnZW50c01hcC0+c2V0KGhvc3RJZCwg
ZGVidWdnZXJBZ2VudCk7Cit9CisKK3ZvaWQgRGVidWdnZXJBZ2VudE1hbmFnZXI6OmRlYnVnRGV0
YWNoKERlYnVnZ2VyQWdlbnRJbXBsKiBkZWJ1Z2dlckFnZW50KQoreworICAgIGlmICghc19hdHRh
Y2hlZEFnZW50c01hcCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpbnQgaG9zdElkID0gZGVidWdnZXJBZ2VudC0+d2ViZGV2dG9v
bHNBZ2VudCgpLT5ob3N0SWQoKTsKKyAgICBBU1NFUlQoc19hdHRhY2hlZEFnZW50c01hcC0+Z2V0
KGhvc3RJZCkgPT0gZGVidWdnZXJBZ2VudCk7CisgICAgYm9vbCBpc09uQnJlYWtwb2ludCA9IChm
aW5kQWdlbnRGb3JDdXJyZW50VjhDb250ZXh0KCkgPT0gZGVidWdnZXJBZ2VudCk7CisgICAgc19h
dHRhY2hlZEFnZW50c01hcC0+cmVtb3ZlKGhvc3RJZCk7CisKKyAgICBpZiAoc19hdHRhY2hlZEFn
ZW50c01hcC0+aXNFbXB0eSgpKSB7CisgICAgICAgIGRlbGV0ZSBzX2F0dGFjaGVkQWdlbnRzTWFw
OworICAgICAgICBzX2F0dGFjaGVkQWdlbnRzTWFwID0gMDsKKyAgICAgICAgLy8gTm90ZSB0aGF0
IHdlIGRvIG5vdCBlbXB0eSBoYW5kbGVycyB3aGlsZSBpbiBkaXNwYXRjaCAtIHdlIHNjaGVkdWxl
CisgICAgICAgIC8vIGNvbnRpbnVlIGFuZCBkbyByZW1vdmFsIG9uY2Ugd2UgYXJlIG91dCBvZiB0
aGUgZGlzcGF0Y2guIEFsc28gdGhlcmUgaXMKKyAgICAgICAgLy8gbm8gbmVlZCB0byBzZW5kIGNv
bnRpbnVlIGNvbW1hbmQgaW4gdGhpcyBjYXNlIHNpbmNlIHJlbW92aW5nIG1lc3NhZ2UKKyAgICAg
ICAgLy8gaGFuZGxlciB3aWxsIGNhdXNlIGRlYnVnZ2VyIHVubG9hZCBhbmQgYWxsIGJyZWFrcG9p
bnRzIHdpbGwgYmUgY2xlYXJlZC4KKyAgICAgICAgaWYgKCFzX2luSG9zdERpc3BhdGNoSGFuZGxl
cikgeworICAgICAgICAgICAgdjg6OkRlYnVnOjpTZXRNZXNzYWdlSGFuZGxlcjIoMCk7CisgICAg
ICAgICAgICB2ODo6RGVidWc6OlNldEhvc3REaXNwYXRjaEhhbmRsZXIoMCk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgLy8gUmVtb3ZlIGFsbCBicmVha3BvaW50cyBzZXQgYnkgdGhl
IGFnZW50LgorICAgICAgU3RyaW5nIGNsZWFyQnJlYWtwb2ludEdyb3VwQ21kID0gU3RyaW5nOjpm
b3JtYXQoCisgICAgICAgICAgIntcInNlcVwiOjEsXCJ0eXBlXCI6XCJyZXF1ZXN0XCIsXCJjb21t
YW5kXCI6XCJjbGVhcmJyZWFrcG9pbnRncm91cFwiLCIKKyAgICAgICAgICAgICAgIlwiYXJndW1l
bnRzXCI6e1wiZ3JvdXBJZFwiOiVkfX0iLAorICAgICAgICAgIGhvc3RJZCk7CisgICAgICBzZW5k
Q29tbWFuZFRvVjgoY2xlYXJCcmVha3BvaW50R3JvdXBDbWQsIG5ldyBDYWxsZXJJZFdyYXBwZXIo
KSk7CisKKyAgICAgIGlmIChpc09uQnJlYWtwb2ludCkgeworICAgICAgICAgIC8vIEZvcmNlIGNv
bnRpbnVlIGlmIGRldGFjaCBoYXBwZW5lZCBpbiBuZXNzdGVkIG1lc3NhZ2UgbG9vcCB3aGlsZQor
ICAgICAgICAgIC8vIGRlYnVnZ2VyIHdhcyBwYXVzZWQgb24gYSBicmVha3BvaW50KGFzIGxvbmcg
YXMgdGhlcmUgYXJlIG90aGVyCisgICAgICAgICAgLy8gYXR0YWNoZWQgYWdlbnRzIHY4IHdpbGwg
d2FpdCBmb3IgZXhwbGljaXQnY29udGludWUnIG1lc3NhZ2UpLgorICAgICAgICAgIHNlbmRDb250
aW51ZUNvbW1hbmRUb1Y4KCk7CisgICAgICB9CisgICAgfQorfQorCit2b2lkIERlYnVnZ2VyQWdl
bnRNYW5hZ2VyOjpvblY4RGVidWdNZXNzYWdlKGNvbnN0IHY4OjpEZWJ1Zzo6TWVzc2FnZSYgbWVz
c2FnZSkKK3sKKyAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CisgICAgdjg6OlN0cmluZzo6VmFs
dWUgdmFsdWUobWVzc2FnZS5HZXRKU09OKCkpOworICAgIFN0cmluZyBvdXQocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBVQ2hhcio+KCp2YWx1ZSksIHZhbHVlLmxlbmd0aCgpKTsKKworICAgIC8vIElm
IGNhbGxlckRhdGEgaXMgbm90IDAgdGhlIG1lc3NhZ2UgaXMgYSByZXNwb25zZSB0byBhIGRlYnVn
Z2VyIGNvbW1hbmQuCisgICAgaWYgKHY4OjpEZWJ1Zzo6Q2xpZW50RGF0YSogY2FsbGVyRGF0YSA9
IG1lc3NhZ2UuR2V0Q2xpZW50RGF0YSgpKSB7CisgICAgICAgIENhbGxlcklkV3JhcHBlciogd3Jh
cHBlciA9IHN0YXRpY19jYXN0PENhbGxlcklkV3JhcHBlcio+KGNhbGxlckRhdGEpOworICAgICAg
ICBpZiAod3JhcHBlci0+Y2FsbGVySXNNYW5hbmFnZXIoKSkgeworICAgICAgICAgICAgLy8gSnVz
dCBpZ25vcmUgbWVzc2FnZXMgc2VudCBieSB0aGlzIG1hbmFnZXIuCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgRGVidWdnZXJBZ2VudEltcGwqIGRlYnVnZ2VyQWdlbnQg
PSBkZWJ1Z2dlckFnZW50Rm9ySG9zdElkKHdyYXBwZXItPmNhbGxlcklkKCkpOworICAgICAgICBp
ZiAoZGVidWdnZXJBZ2VudCkKKyAgICAgICAgICAgIGRlYnVnZ2VyQWdlbnQtPmRlYnVnZ2VyT3V0
cHV0KG91dCk7CisgICAgICAgIGVsc2UgaWYgKCFtZXNzYWdlLldpbGxTdGFydFJ1bm5pbmcoKSkg
eworICAgICAgICAgICAgLy8gQXV0b2NvbnRpbnVlIGV4ZWN1dGlvbiBpZiB0aGVyZSBpcyBubyBo
YW5kbGVyLgorICAgICAgICAgICAgc2VuZENvbnRpbnVlQ29tbWFuZFRvVjgoKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm47CisgICAgfSAvLyBPdGhlcndpc2UgaXQncyBhbiBldmVudCBtZXNz
YWdlLgorICAgIEFTU0VSVChtZXNzYWdlLklzRXZlbnQoKSk7CisKKyAgICAvLyBJZ25vcmUgdW5z
dXBwb3J0ZWQgZXZlbnQgdHlwZXMuCisgICAgaWYgKG1lc3NhZ2UuR2V0RXZlbnQoKSAhPSB2ODo6
QWZ0ZXJDb21waWxlICYmIG1lc3NhZ2UuR2V0RXZlbnQoKSAhPSB2ODo6QnJlYWsgJiYgbWVzc2Fn
ZS5HZXRFdmVudCgpICE9IHY4OjpFeGNlcHRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBtZXNzYWdlLkdldEV2ZW50Q29udGV4dCgp
OworICAgIC8vIElmIHRoZSBjb250ZXh0IGlzIGZyb20gb25lIG9mIHRoZSBpbnBlY3RlZCB0YWJz
IGl0IHNob3VsZCBoYXZlIGl0cyBjb250ZXh0CisgICAgLy8gZGF0YS4KKyAgICBpZiAoY29udGV4
dC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gVW5rbm93biBjb250ZXh0LCBza2lwIHRoZSBldmVu
dC4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzX2luVXRpbGl0eUNvbnRleHQg
JiYgbWVzc2FnZS5HZXRFdmVudCgpID09IHY4OjpCcmVhaykgeworICAgICAgICAvLyBUaGlzIG1h
eSBoYXBwZW4gd2hlbiB0d28gdGFicyBhcmUgYmVpbmcgZGVidWdnZWQgaW4gdGhlIHNhbWUgcHJv
Y2Vzcy4KKyAgICAgICAgLy8gU3VwcG9zZSB0aGF0IGZpcnN0IGRlYnVnZ2VyIGlzIHBhdWVzZWQg
b24gYW4gZXhjZXB0aW9uLiBJdCB3aWxsIHJ1bgorICAgICAgICAvLyBuZXN0ZWQgTWVzc2FnZUxv
b3Agd2hpY2ggbWF5IHByb2Nlc3MgQnJlYWsgcmVxdWVzdCBmcm9tIHRoZSBzZWNvbmQKKyAgICAg
ICAgLy8gZGVidWdnZXIuCisgICAgICAgIHNfZGVidWdCcmVha0RlbGF5ZWQgPSB0cnVlOworICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIElmIHRoZSBjb250ZXh0IGlzIGZyb20gb25lIG9mIHRoZSBp
bnBlY3RlZCB0YWJzIG9yIGluamVjdGVkIGV4dGVuc2lvbgorICAgICAgICAvLyBzY3JpcHRzIGl0
IG11c3QgaGF2ZSBob3N0SWQgaW4gdGhlIGRhdGEgZmllbGQuCisgICAgICAgIGludCBob3N0SWQg
PSBXZWJDb3JlOjpWOFByb3h5Ojpjb250ZXh0RGVidWdJZChjb250ZXh0KTsKKyAgICAgICAgaWYg
KGhvc3RJZCAhPSAtMSkgeworICAgICAgICAgICAgRGVidWdnZXJBZ2VudEltcGwqIGFnZW50ID0g
ZGVidWdnZXJBZ2VudEZvckhvc3RJZChob3N0SWQpOworICAgICAgICAgICAgaWYgKGFnZW50KSB7
CisgICAgICAgICAgICAgICAgaWYgKGFnZW50LT5hdXRvQ29udGludWVPbkV4Y2VwdGlvbigpCisg
ICAgICAgICAgICAgICAgICAgICYmIG1lc3NhZ2UuR2V0RXZlbnQoKSA9PSB2ODo6RXhjZXB0aW9u
KSB7CisgICAgICAgICAgICAgICAgICAgIHNlbmRDb250aW51ZUNvbW1hbmRUb1Y4KCk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBhZ2VudC0+ZGVidWdnZXJPdXRwdXQob3V0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1lc3NhZ2UuV2ls
bFN0YXJ0UnVubmluZygpKSB7CisgICAgICAgIC8vIEF1dG9jb250aW51ZSBleGVjdXRpb24gb24g
YnJlYWsgYW5kIGV4Y2VwdGlvbiAgZXZlbnRzIGlmIHRoZXJlIGlzIG5vCisgICAgICAgIC8vIGhh
bmRsZXIuCisgICAgICAgIHNlbmRDb250aW51ZUNvbW1hbmRUb1Y4KCk7CisgICAgfQorfQorCit2
b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpwYXVzZVNjcmlwdCgpCit7CisgICAgaWYgKHNfaW5V
dGlsaXR5Q29udGV4dCkKKyAgICAgICAgc19kZWJ1Z0JyZWFrRGVsYXllZCA9IHRydWU7CisgICAg
ZWxzZQorICAgICAgICB2ODo6RGVidWc6OkRlYnVnQnJlYWsoKTsKK30KKwordm9pZCBEZWJ1Z2dl
ckFnZW50TWFuYWdlcjo6ZXhlY3V0ZURlYnVnZ2VyQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1h
bmQsIGludCBjYWxsZXJJZCkKK3sKKyAgICBzZW5kQ29tbWFuZFRvVjgoY29tbWFuZCwgbmV3IENh
bGxlcklkV3JhcHBlcihjYWxsZXJJZCkpOworfQorCit2b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2Vy
OjpzZXRNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcihXZWJEZXZUb29sc0FnZW50OjpNZXNzYWdl
TG9vcERpc3BhdGNoSGFuZGxlciBoYW5kbGVyKQoreworICAgIHNfbWVzc2FnZUxvb3BEaXNwYXRj
aEhhbmRsZXIgPSBoYW5kbGVyOworfQorCit2b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpzZXRI
b3N0SWQoV2ViRnJhbWVJbXBsKiB3ZWJmcmFtZSwgaW50IGhvc3RJZCkKK3sKKyAgICBBU1NFUlQo
aG9zdElkID4gMCk7CisgICAgV2ViQ29yZTo6VjhQcm94eSogcHJveHkgPSBXZWJDb3JlOjpWOFBy
b3h5OjpyZXRyaWV2ZSh3ZWJmcmFtZS0+ZnJhbWUoKSk7CisgICAgaWYgKHByb3h5KQorICAgICAg
ICBwcm94eS0+c2V0Q29udGV4dERlYnVnSWQoaG9zdElkKTsKK30KKwordm9pZCBEZWJ1Z2dlckFn
ZW50TWFuYWdlcjo6b25XZWJWaWV3Q2xvc2VkKFdlYlZpZXdJbXBsKiB3ZWJ2aWV3KQoreworICAg
IGlmIChzX3BhZ2VEZWZlcnJlcnMuY29udGFpbnMod2VidmlldykpIHsKKyAgICAgICAgZGVsZXRl
IHNfcGFnZURlZmVycmVycy5nZXQod2Vidmlldyk7CisgICAgICAgIHNfcGFnZURlZmVycmVycy5y
ZW1vdmUod2Vidmlldyk7CisgICAgfQorfQorCit2b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpv
bk5hdmlnYXRlKCkKK3sKKyAgICBpZiAoc19pbkhvc3REaXNwYXRjaEhhbmRsZXIpCisgICAgICAg
IERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpzZW5kQ29udGludWVDb21tYW5kVG9WOCgpOworfQorCit2
b2lkIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpzZW5kQ29tbWFuZFRvVjgoY29uc3QgU3RyaW5nJiBj
bWQsIHY4OjpEZWJ1Zzo6Q2xpZW50RGF0YSogZGF0YSkKK3sKKyAgICB2ODo6RGVidWc6OlNlbmRD
b21tYW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDE2X3QqPihjbWQuY2hhcmFjdGVycygp
KSwgY21kLmxlbmd0aCgpLCBkYXRhKTsKK30KKwordm9pZCBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6
c2VuZENvbnRpbnVlQ29tbWFuZFRvVjgoKQoreworICAgIFN0cmluZyBjb250aW51ZUNtZCgie1wi
c2VxXCI6MSxcInR5cGVcIjpcInJlcXVlc3RcIixcImNvbW1hbmRcIjpcImNvbnRpbnVlXCJ9Iik7
CisgICAgc2VuZENvbW1hbmRUb1Y4KGNvbnRpbnVlQ21kLCBuZXcgQ2FsbGVySWRXcmFwcGVyKCkp
OworfQorCitEZWJ1Z2dlckFnZW50SW1wbCogRGVidWdnZXJBZ2VudE1hbmFnZXI6OmZpbmRBZ2Vu
dEZvckN1cnJlbnRWOENvbnRleHQoKQoreworICAgIGlmICghc19hdHRhY2hlZEFnZW50c01hcCkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgQVNTRVJUKCFzX2F0dGFjaGVkQWdlbnRzTWFwLT5pc0Vt
cHR5KCkpOworCisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gV2ViQ29yZTo6VjhQcm94eTo6
cmV0cmlldmVGcmFtZUZvckVudGVyZWRDb250ZXh0KCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7Cisg
ICAgZm9yIChBdHRhY2hlZEFnZW50c01hcDo6aXRlcmF0b3IgaXQgPSBzX2F0dGFjaGVkQWdlbnRz
TWFwLT5iZWdpbigpOyBpdCAhPSBzX2F0dGFjaGVkQWdlbnRzTWFwLT5lbmQoKTsgKytpdCkgewor
ICAgICAgICBpZiAoaXQtPnNlY29uZC0+cGFnZSgpID09IHBhZ2UpCisgICAgICAgICAgICByZXR1
cm4gaXQtPnNlY29uZDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK0RlYnVnZ2VyQWdlbnRJ
bXBsKiBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6ZGVidWdnZXJBZ2VudEZvckhvc3RJZChpbnQgaG9z
dElkKQoreworICAgIGlmICghc19hdHRhY2hlZEFnZW50c01hcCkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIHNfYXR0YWNoZWRBZ2VudHNNYXAtPmdldChob3N0SWQpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdn
ZXJBZ2VudE1hbmFnZXIuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvRGVidWdnZXJBZ2VudE1hbmFn
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmU5MDMwCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9EZWJ1Z2dlckFnZW50TWFuYWdlci5oCkBA
IC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBEZWJ1Z2dlckFnZW50TWFuYWdlcl9oCisjZGVmaW5lIERl
YnVnZ2VyQWdlbnRNYW5hZ2VyX2gKKworI2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnQuaCIKKyNp
bmNsdWRlIDx2OC1kZWJ1Zy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFBhZ2VHcm91
cExvYWREZWZlcnJlcjsKK2NsYXNzIFN0cmluZzsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIERlYnVnZ2VyQWdlbnRJbXBsOworY2xhc3MgRGljdGlvbmFyeVZhbHVlOworY2xhc3Mg
V2ViRnJhbWVJbXBsOworY2xhc3MgV2ViVmlld0ltcGw7CisKKy8vIFRoZXJlIGlzIHNpbmdsZSB2
OCBpbnN0YW5jZSBwZXIgcmVuZGVyIHByb2Nlc3MuIEFsc28gdGhlcmUgbWF5IGJlIHNldmVyYWwK
Ky8vIFJlbmRlclZpZXdzIGFuZCBjb25zZXF1ZW50bHkgZGV2dG9vbHMgYWdlbnRzIGluIHRoZSBw
cm9jZXNzIHRoYXQgd2FudCB0byB0YWxrCisvLyB0byB0aGUgdjggZGVidWdnZXIuIFRoaXMgY2xh
c3MgY29vcmRpbmF0ZXMgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBkZWJ1ZworLy8gYWdlbnRz
IGFuZCB2OCBkZWJ1Z2dlci4gSXQgd2lsbCBzZXQgZGVidWcgb3V0cHV0IGhhbmRsZXIgYXMgbG9u
ZyBhcyBhdCBsZWFzdAorLy8gb25lIGRlYnVnZ2VyIGFnZW50IGlzIGF0dGFjaGVkIGFuZCByZW1v
dmUgaXQgd2hlbiBsYXN0IGRlYnVnZ2VyIGFnZW50IGlzCisvLyBkZXRhY2hlZC4gV2hlbiBtZXNz
YWdlIGlzIHJlY2VpdmVkIGZyb20gZGVidWdnZXIgaXQgd2lsbCByb3V0ZSBpdCB0byB0aGUKKy8v
IHJpZ2h0IGRlYnVnZ2VyIGFnZW50IGlmIHRoZXJlIGlzIG9uZSBvdGhlcndpc2UgdGhlIG1lc3Nh
Z2Ugd2lsbCBiZSBpZ25vcmVkLgorLy8KKy8vIHY4IG1heSBzZW5kIGEgbWVzc2FnZShlLmcuIGV4
Y2VwdGlvbiBldmVudCkgYWZ0ZXIgd2hpY2ggaXQKKy8vIHdvdWxkIGV4cGVjdCBzb21lIGFjdGlv
bnMgZnJvbSB0aGUgaGFuZGxlci4gSWYgdGhlcmUgaXMgbm8gYXBwcm9wcmlhdGUKKy8vIGRlYnVn
Z2VyIGFnZW50IHRvIGhhbmRsZSBzdWNoIG1lc3NhZ2VzIHRoZSBtYW5hZ2VyIHdpbGwgcGVyZm9y
bSB0aGUgYWN0aW9uCisvLyBpdHNlbGYsIG90aGVyd2lzZSB2OCBtYXkgaGFuZyB3YWl0aW5nIGZv
ciB0aGUgYWN0aW9uLgorY2xhc3MgRGVidWdnZXJBZ2VudE1hbmFnZXIgOiBwdWJsaWMgTm9uY29w
eWFibGUgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGRlYnVnQXR0YWNoKERlYnVnZ2VyQWdl
bnRJbXBsKiBkZWJ1Z2dlckFnZW50KTsKKyAgICBzdGF0aWMgdm9pZCBkZWJ1Z0RldGFjaChEZWJ1
Z2dlckFnZW50SW1wbCogZGVidWdnZXJBZ2VudCk7CisgICAgc3RhdGljIHZvaWQgcGF1c2VTY3Jp
cHQoKTsKKyAgICBzdGF0aWMgdm9pZCBleGVjdXRlRGVidWdnZXJDb21tYW5kKGNvbnN0IFdlYkNv
cmU6OlN0cmluZyYgY29tbWFuZCwgaW50IGNhbGxlcklkKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRN
ZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcihXZWJEZXZUb29sc0FnZW50OjpNZXNzYWdlTG9vcERp
c3BhdGNoSGFuZGxlciBoYW5kbGVyKTsKKworICAgIC8vIFNldHMgfGhvc3RJZHwgYXMgdGhlIGZy
YW1lIGNvbnRleHQgZGF0YS4gVGhpcyBpZCBpcyB1c2VkIHRvIGZpbHRlciBzY3JpcHRzCisgICAg
Ly8gcmVsYXRlZCB0byB0aGUgaW5zcGVjdGVkIHBhZ2UuCisgICAgc3RhdGljIHZvaWQgc2V0SG9z
dElkKFdlYkZyYW1lSW1wbCogd2ViZnJhbWUsIGludCBob3N0SWQpOworCisgICAgc3RhdGljIHZv
aWQgb25XZWJWaWV3Q2xvc2VkKFdlYlZpZXdJbXBsKiB3ZWJ2aWV3KTsKKworICAgIHN0YXRpYyB2
b2lkIG9uTmF2aWdhdGUoKTsKKworICAgIGNsYXNzIFV0aWxpdHlDb250ZXh0U2NvcGUgOiBwdWJs
aWMgTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgVXRpbGl0eUNvbnRleHRTY29w
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghc19pblV0aWxpdHlDb250ZXh0KTsK
KyAgICAgICAgICAgIHNfaW5VdGlsaXR5Q29udGV4dCA9IHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgflV0aWxpdHlDb250ZXh0U2NvcGUoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc19k
ZWJ1Z0JyZWFrRGVsYXllZCkgeworICAgICAgICAgICAgICB2ODo6RGVidWc6OkRlYnVnQnJlYWso
KTsKKyAgICAgICAgICAgICAgc19kZWJ1Z0JyZWFrRGVsYXllZCA9IGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgc19pblV0aWxpdHlDb250ZXh0ID0gZmFsc2U7CisgICAgICAgIH0K
KyAgICB9OworCitwcml2YXRlOgorICAgIERlYnVnZ2VyQWdlbnRNYW5hZ2VyKCk7CisgICAgfkRl
YnVnZ2VyQWdlbnRNYW5hZ2VyKCk7CisKKyAgICBzdGF0aWMgdm9pZCBkZWJ1Z0hvc3REaXNwYXRj
aEhhbmRsZXIoKTsKKyAgICBzdGF0aWMgdm9pZCBvblY4RGVidWdNZXNzYWdlKGNvbnN0IHY4OjpE
ZWJ1Zzo6TWVzc2FnZSYgbWVzc2FnZSk7CisgICAgc3RhdGljIHZvaWQgc2VuZENvbW1hbmRUb1Y4
KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2ODo6RGVidWc6OkNsaWVudERhdGEqIGRhdGEpOworICAgIHN0YXRpYyB2b2lkIHNlbmRD
b250aW51ZUNvbW1hbmRUb1Y4KCk7CisKKyAgICBzdGF0aWMgRGVidWdnZXJBZ2VudEltcGwqIGZp
bmRBZ2VudEZvckN1cnJlbnRWOENvbnRleHQoKTsKKyAgICBzdGF0aWMgRGVidWdnZXJBZ2VudElt
cGwqIGRlYnVnZ2VyQWdlbnRGb3JIb3N0SWQoaW50IGhvc3RJZCk7CisKKyAgICB0eXBlZGVmIEhh
c2hNYXA8aW50LCBEZWJ1Z2dlckFnZW50SW1wbCo+IEF0dGFjaGVkQWdlbnRzTWFwOworICAgIHN0
YXRpYyBBdHRhY2hlZEFnZW50c01hcCogc19hdHRhY2hlZEFnZW50c01hcDsKKworICAgIHN0YXRp
YyBXZWJEZXZUb29sc0FnZW50OjpNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlciBzX21lc3NhZ2VM
b29wRGlzcGF0Y2hIYW5kbGVyOworICAgIHN0YXRpYyBib29sIHNfaW5Ib3N0RGlzcGF0Y2hIYW5k
bGVyOworICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJWaWV3SW1wbCosIFdlYkNvcmU6OlBhZ2VHcm91
cExvYWREZWZlcnJlcio+IERlZmVycmVyc01hcDsKKyAgICBzdGF0aWMgRGVmZXJyZXJzTWFwIHNf
cGFnZURlZmVycmVyczsKKworICAgIHN0YXRpYyBib29sIHNfaW5VdGlsaXR5Q29udGV4dDsKKyAg
ICBzdGF0aWMgYm9vbCBzX2RlYnVnQnJlYWtEZWxheWVkOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9EZXZUb29s
c1JQQy5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9EZXZUb29sc1JQQy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNzY4MjEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL0RldlRvb2xzUlBDLmgKQEAgLTAsMCArMSwzOTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBEZXZUb29scyBS
UEMgc3Vic3lzdGVtIGlzIGEgc2ltcGxlIHN0cmluZyBzZXJpYWxpemF0aW9uLWJhc2VkIHJwYwor
Ly8gaW1wbGVtZW50YXRpb24uIFRoZSBjbGllbnQgaXMgcmVzcG9uc2libGUgZm9yIGRlZmluaW5n
IHRoZSBScGMtZW5hYmxlZAorLy8gaW50ZXJmYWNlIGluIHRlcm1zIG9mIGl0cyBtYWNyb3M6Cisv
LworLy8gI2RlZmluZSBNWUFQSV9TVFJVQ1QoTUVUSE9EMCwgTUVUSE9EMSwgTUVUSE9EMiwgTUVU
SE9EMykKKy8vICAgTUVUSE9EMChNZXRob2QxKQorLy8gICBNRVRIT0QxKE1ldGhvZDMsIGludCkK
Ky8vIChzbmlwcGV0IGFib3ZlIHNob3VsZCBiZSBtdWx0aWxpbmUgbWFjcm8sIGFkZCB0cmFpbGlu
ZyBiYWNrc2xhc2hlcykKKy8vCisvLyBERUZJTkVfUlBDX0NMQVNTKE15QXBpLCBNWUFQSV9TVFJV
Q1QpCisvLworLy8gVGhlIHNuaXBwZXQgYWJvdmUgd2lsbCBnZW5lcmF0ZSB0aHJlZSBjbGFzc2Vz
OiBNeUFwaSwgTXlBcGlTdHViIGFuZAorLy8gTXlBcGlEaXNwYXRjaC4KKy8vCisvLyAxLiBGb3Ig
ZWFjaCBtZXRob2QgZGVmaW5lZCBpbiB0aGUgbWFyY28gTXlBcGkgd2lsbCBoYXZlIGEKKy8vIHB1
cmUgdmlydHVhbCBmdW5jdGlvbiBnZW5lcmF0ZWQsIHNvIHRoYXQgTXlBcGkgd291bGQgbG9vayBs
aWtlOgorLy8KKy8vIGNsYXNzIE15QXBpIHsKKy8vIHByaXZhdGU6CisvLyAgICAgTXlBcGkoKSB7
IH0KKy8vICAgICB+TXlBcGkoKSB7IH0KKy8vICAgICB2aXJ0dWFsIHZvaWQgbWV0aG9kMSgpID0g
MDsKKy8vICAgICB2aXJ0dWFsIHZvaWQgbWV0aG9kMigKKy8vICAgICAgICAgaW50IHBhcmFtMSwK
Ky8vICAgICAgICAgY29uc3QgU3RyaW5nJiBwYXJhbTIsCisvLyAgICAgICAgIGNvbnN0IFZhbHVl
JiBwYXJhbTMpID0gMDsKKy8vICAgICB2aXJ0dWFsIHZvaWQgbWV0aG9kMyhpbnQgcGFyYW0xKSA9
IDA7CisvLyB9OworLy8KKy8vIDIuIE15QXBpU3R1YiB3aWxsIGltcGxlbWVudCBNeUFwaSBpbnRl
cmZhY2UgYW5kIHdvdWxkIHNlcmlhbGl6ZSBhbGwgY2FsbHMKKy8vIGludG8gdGhlIHN0cmluZy1i
YXNlZCBjYWxscyBvZiB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQ6CisvLworLy8gRGV2VG9vbHNS
UEM6OkRlbGVnYXRlKiB0cmFuc3BvcnQ7CisvLyBteUFwaSA9IG5ldyBNeUFwaVN0dWIodHJhbnNw
b3J0KTsKKy8vIG15QXBpLT5tZXRob2QxKCk7CisvLyBteUFwaS0+bWV0aG9kMygyKTsKKy8vCisv
LyAzLiBNeUFwaURlbGVnYXRlIGlzIGNhcGFibGUgb2YgZGlzcGF0Y2hpbmcgdGhlIGNhbGxzIGFu
ZCBjb252ZXJ0IHRoZW0gdG8gdGhlCisvLyBjYWxscyB0byB0aGUgdW5kZXJseWluZyBNeUFwaSBt
ZXRob2RzOgorLy8KKy8vIE15QXBpKiByZWFsT2JqZWN0OworLy8gTXlBcGlEaXNwYXRjaDo6ZGlz
cGF0Y2gocmVhbE9iamVjdCwgcmF3U3RyaW5nQ2FsbEdlbmVyYXRlZEJ5U3R1Yik7CisvLworLy8g
d2lsbCBtYWtlIGNvcnJlc3BvbmRpbmcgY2FsbHMgdG8gdGhlIHJlYWwgb2JqZWN0LgorCisjaWZu
ZGVmIERldlRvb2xzUlBDX2gKKyNkZWZpbmUgRGV2VG9vbHNSUENfaAorCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKKyNpbmNsdWRlICJXZWJEZXZUb29s
c01lc3NhZ2VEYXRhLmgiCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworY2xhc3MgU3RyaW5nOworfQorCit1c2luZyBXZWJDb3JlOjpTdHJpbmc7
Cit1c2luZyBXVEY6OlZlY3RvcjsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFJQQyBkaXNw
YXRjaCBtYWNybworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IFJwY1R5cGVUcmFpdCB7
CisgICAgdHlwZWRlZiBUIEFwaVR5cGU7Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgUnBjVHlw
ZVRyYWl0PGJvb2w+IHsKKyAgICB0eXBlZGVmIGJvb2wgQXBpVHlwZTsKKyAgICBzdGF0aWMgYm9v
bCBwYXJzZShjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHQpCisgICAgeworICAgICAgICByZXR1cm4g
dCA9PSAidHJ1ZSI7CisgICAgfQorICAgIHN0YXRpYyBXZWJDb3JlOjpTdHJpbmcgdG9TdHJpbmco
Ym9vbCBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGIgPyAidHJ1ZSIgOiAiZmFsc2UiOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBScGNUeXBlVHJhaXQ8aW50PiB7CisgICAgdHlw
ZWRlZiBpbnQgQXBpVHlwZTsKKyAgICBzdGF0aWMgaW50IHBhcnNlKGNvbnN0IFdlYkNvcmU6OlN0
cmluZyYgdCkKKyAgICB7CisgICAgICAgIGJvb2wgc3VjY2VzczsKKyAgICAgICAgaW50IGkgPSB0
LnRvSW50U3RyaWN0KCZzdWNjZXNzKTsKKyAgICAgICAgQVNTRVJUKHN1Y2Nlc3MpOworICAgICAg
ICByZXR1cm4gaTsKKyAgICB9CisgICAgc3RhdGljIFdlYkNvcmU6OlN0cmluZyB0b1N0cmluZyhp
bnQgaSkKKyAgICB7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpTdHJpbmc6Om51bWJlcihpKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgUnBjVHlwZVRyYWl0PFN0cmluZz4gewor
ICAgIHR5cGVkZWYgY29uc3QgU3RyaW5nJiBBcGlUeXBlOworICAgIHN0YXRpYyBTdHJpbmcgcGFy
c2UoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiB0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHQ7Cisg
ICAgfQorICAgIHN0YXRpYyBXZWJDb3JlOjpTdHJpbmcgdG9TdHJpbmcoY29uc3QgU3RyaW5nJiB0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHQ7CisgICAgfQorfTsKKworLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gUlBDIEFwaSBtZXRo
b2QgZGVjbGFyYXRpb25zCisKKyNkZWZpbmUgVE9PTFNfUlBDX0FQSV9NRVRIT0QwKE1ldGhvZCkg
XAorICAgIHZpcnR1YWwgdm9pZCBNZXRob2QoKSA9IDA7CisKKyNkZWZpbmUgVE9PTFNfUlBDX0FQ
SV9NRVRIT0QxKE1ldGhvZCwgVDEpIFwKKyAgICB2aXJ0dWFsIHZvaWQgTWV0aG9kKFJwY1R5cGVU
cmFpdDxUMT46OkFwaVR5cGUgdDEpID0gMDsKKworI2RlZmluZSBUT09MU19SUENfQVBJX01FVEhP
RDIoTWV0aG9kLCBUMSwgVDIpIFwKKyAgICB2aXJ0dWFsIHZvaWQgTWV0aG9kKFJwY1R5cGVUcmFp
dDxUMT46OkFwaVR5cGUgdDEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJwY1R5cGVUcmFp
dDxUMj46OkFwaVR5cGUgdDIpID0gMDsKKworI2RlZmluZSBUT09MU19SUENfQVBJX01FVEhPRDMo
TWV0aG9kLCBUMSwgVDIsIFQzKSBcCisgICAgdmlydHVhbCB2b2lkIE1ldGhvZChScGNUeXBlVHJh
aXQ8VDE+OjpBcGlUeXBlIHQxLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBScGNUeXBlVHJh
aXQ8VDI+OjpBcGlUeXBlIHQyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBScGNUeXBlVHJh
aXQ8VDM+OjpBcGlUeXBlIHQzKSA9IDA7CisKKyNkZWZpbmUgVE9PTFNfUlBDX0FQSV9NRVRIT0Q0
KE1ldGhvZCwgVDEsIFQyLCBUMywgVDQpIFwKKyAgICB2aXJ0dWFsIHZvaWQgTWV0aG9kKFJwY1R5
cGVUcmFpdDxUMT46OkFwaVR5cGUgdDEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJwY1R5
cGVUcmFpdDxUMj46OkFwaVR5cGUgdDIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJwY1R5
cGVUcmFpdDxUMz46OkFwaVR5cGUgdDMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJwY1R5
cGVUcmFpdDxUND46OkFwaVR5cGUgdDQpID0gMDsKKworI2RlZmluZSBUT09MU19SUENfQVBJX01F
VEhPRDUoTWV0aG9kLCBUMSwgVDIsIFQzLCBUNCwgVDUpIFwKKyAgICB2aXJ0dWFsIHZvaWQgTWV0
aG9kKFJwY1R5cGVUcmFpdDxUMT46OkFwaVR5cGUgdDEsIFwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFJwY1R5cGVUcmFpdDxUMj46OkFwaVR5cGUgdDIsIFwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFJwY1R5cGVUcmFpdDxUMz46OkFwaVR5cGUgdDMsIFwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFJwY1R5cGVUcmFpdDxUND46OkFwaVR5cGUgdDQsIFwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFJwY1R5cGVUcmFpdDxUNT46OkFwaVR5cGUgdDUpID0gMDsKKworLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gUlBDIHN0dWIgbWV0
aG9kIGltcGxlbWVudGF0aW9ucworCisjZGVmaW5lIFRPT0xTX1JQQ19TVFVCX01FVEhPRDAoTWV0
aG9kKSBcCisgICAgdmlydHVhbCB2b2lkIE1ldGhvZCgpIHsgXAorICAgICAgICBWZWN0b3I8U3Ry
aW5nPiBhcmdzOyBcCisgICAgICAgIHRoaXMtPnNlbmRScGNNZXNzYWdlKG1fY2xhc3NOYW1lLCAj
TWV0aG9kLCBhcmdzKTsgXAorICAgIH0KKworI2RlZmluZSBUT09MU19SUENfU1RVQl9NRVRIT0Qx
KE1ldGhvZCwgVDEpIFwKKyAgICB2aXJ0dWFsIHZvaWQgTWV0aG9kKFJwY1R5cGVUcmFpdDxUMT46
OkFwaVR5cGUgdDEpIHsgXAorICAgICAgICBWZWN0b3I8U3RyaW5nPiBhcmdzKDEpOyBcCisgICAg
ICAgIGFyZ3NbMF0gPSBScGNUeXBlVHJhaXQ8VDE+Ojp0b1N0cmluZyh0MSk7IFwKKyAgICAgICAg
dGhpcy0+c2VuZFJwY01lc3NhZ2UobV9jbGFzc05hbWUsICNNZXRob2QsIGFyZ3MpOyBcCisgICAg
fQorCisjZGVmaW5lIFRPT0xTX1JQQ19TVFVCX01FVEhPRDIoTWV0aG9kLCBUMSwgVDIpIFwKKyAg
ICB2aXJ0dWFsIHZvaWQgTWV0aG9kKFJwY1R5cGVUcmFpdDxUMT46OkFwaVR5cGUgdDEsIFwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFJwY1R5cGVUcmFpdDxUMj46OkFwaVR5cGUgdDIpIHsgXAor
ICAgICAgICBWZWN0b3I8U3RyaW5nPiBhcmdzKDIpOyBcCisgICAgICAgIGFyZ3NbMF0gPSBScGNU
eXBlVHJhaXQ8VDE+Ojp0b1N0cmluZyh0MSk7IFwKKyAgICAgICAgYXJnc1sxXSA9IFJwY1R5cGVU
cmFpdDxUMj46OnRvU3RyaW5nKHQyKTsgXAorICAgICAgICB0aGlzLT5zZW5kUnBjTWVzc2FnZSht
X2NsYXNzTmFtZSwgI01ldGhvZCwgYXJncyk7IFwKKyAgICB9CisKKyNkZWZpbmUgVE9PTFNfUlBD
X1NUVUJfTUVUSE9EMyhNZXRob2QsIFQxLCBUMiwgVDMpIFwKKyAgICB2aXJ0dWFsIHZvaWQgTWV0
aG9kKFJwY1R5cGVUcmFpdDxUMT46OkFwaVR5cGUgdDEsIFwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFJwY1R5cGVUcmFpdDxUMj46OkFwaVR5cGUgdDIsIFwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFJwY1R5cGVUcmFpdDxUMz46OkFwaVR5cGUgdDMpIHsgXAorICAgICAgICBWZWN0b3I8U3Ry
aW5nPiBhcmdzKDMpOyBcCisgICAgICAgIGFyZ3NbMF0gPSBScGNUeXBlVHJhaXQ8VDE+Ojp0b1N0
cmluZyh0MSk7IFwKKyAgICAgICAgYXJnc1sxXSA9IFJwY1R5cGVUcmFpdDxUMj46OnRvU3RyaW5n
KHQyKTsgXAorICAgICAgICBhcmdzWzJdID0gUnBjVHlwZVRyYWl0PFQzPjo6dG9TdHJpbmcodDMp
OyBcCisgICAgICAgIHRoaXMtPnNlbmRScGNNZXNzYWdlKG1fY2xhc3NOYW1lLCAjTWV0aG9kLCBh
cmdzKTsgXAorICAgIH0KKworI2RlZmluZSBUT09MU19SUENfU1RVQl9NRVRIT0Q0KE1ldGhvZCwg
VDEsIFQyLCBUMywgVDQpIFwKKyAgICB2aXJ0dWFsIHZvaWQgTWV0aG9kKFJwY1R5cGVUcmFpdDxU
MT46OkFwaVR5cGUgdDEsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJwY1R5cGVUcmFpdDxU
Mj46OkFwaVR5cGUgdDIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJwY1R5cGVUcmFpdDxU
Mz46OkFwaVR5cGUgdDMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJwY1R5cGVUcmFpdDxU
ND46OkFwaVR5cGUgdDQpIHsgXAorICAgICAgICBWZWN0b3I8U3RyaW5nPiBhcmdzKDQpOyBcCisg
ICAgICAgIGFyZ3NbMF0gPSBScGNUeXBlVHJhaXQ8VDE+Ojp0b1N0cmluZyh0MSk7IFwKKyAgICAg
ICAgYXJnc1sxXSA9IFJwY1R5cGVUcmFpdDxUMj46OnRvU3RyaW5nKHQyKTsgXAorICAgICAgICBh
cmdzWzJdID0gUnBjVHlwZVRyYWl0PFQzPjo6dG9TdHJpbmcodDMpOyBcCisgICAgICAgIGFyZ3Nb
M10gPSBScGNUeXBlVHJhaXQ8VDQ+Ojp0b1N0cmluZyh0NCk7IFwKKyAgICAgICAgdGhpcy0+c2Vu
ZFJwY01lc3NhZ2UobV9jbGFzc05hbWUsICNNZXRob2QsIGFyZ3MpOyBcCisgICAgfQorCisjZGVm
aW5lIFRPT0xTX1JQQ19TVFVCX01FVEhPRDUoTWV0aG9kLCBUMSwgVDIsIFQzLCBUNCwgVDUpIFwK
KyAgICB2aXJ0dWFsIHZvaWQgTWV0aG9kKFJwY1R5cGVUcmFpdDxUMT46OkFwaVR5cGUgdDEsIFwK
KyAgICAgICAgICAgICAgICAgICAgICAgIFJwY1R5cGVUcmFpdDxUMj46OkFwaVR5cGUgdDIsIFwK
KyAgICAgICAgICAgICAgICAgICAgICAgIFJwY1R5cGVUcmFpdDxUMz46OkFwaVR5cGUgdDMsIFwK
KyAgICAgICAgICAgICAgICAgICAgICAgIFJwY1R5cGVUcmFpdDxUND46OkFwaVR5cGUgdDQsIFwK
KyAgICAgICAgICAgICAgICAgICAgICAgIFJwY1R5cGVUcmFpdDxUNT46OkFwaVR5cGUgdDUpIHsg
XAorICAgICAgICBWZWN0b3I8U3RyaW5nPiBhcmdzKDUpOyBcCisgICAgICAgIGFyZ3NbMF0gPSBS
cGNUeXBlVHJhaXQ8VDE+Ojp0b1N0cmluZyh0MSk7IFwKKyAgICAgICAgYXJnc1sxXSA9IFJwY1R5
cGVUcmFpdDxUMj46OnRvU3RyaW5nKHQyKTsgXAorICAgICAgICBhcmdzWzJdID0gUnBjVHlwZVRy
YWl0PFQzPjo6dG9TdHJpbmcodDMpOyBcCisgICAgICAgIGFyZ3NbM10gPSBScGNUeXBlVHJhaXQ8
VDQ+Ojp0b1N0cmluZyh0NCk7IFwKKyAgICAgICAgYXJnc1s0XSA9IFJwY1R5cGVUcmFpdDxUNT46
OnRvU3RyaW5nKHQ1KTsgXAorICAgICAgICB0aGlzLT5zZW5kUnBjTWVzc2FnZShtX2NsYXNzTmFt
ZSwgI01ldGhvZCwgYXJncyk7IFwKKyAgICB9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFJQQyBkaXNwYXRjaCBtZXRob2QgaW1w
bGVtZW50YXRpb25zCisKKyNkZWZpbmUgVE9PTFNfUlBDX0RJU1BBVENIMChNZXRob2QpIFwKK2lm
IChtZXRob2ROYW1lID09ICNNZXRob2QpIHsgXAorICAgIGRlbGVnYXRlLT5NZXRob2QoKTsgXAor
ICAgIHJldHVybiB0cnVlOyBcCit9CisKKyNkZWZpbmUgVE9PTFNfUlBDX0RJU1BBVENIMShNZXRo
b2QsIFQxKSBcCitpZiAobWV0aG9kTmFtZSA9PSAjTWV0aG9kKSB7IFwKKyAgICBkZWxlZ2F0ZS0+
TWV0aG9kKFJwY1R5cGVUcmFpdDxUMT46OnBhcnNlKGFyZ3NbMF0pKTsgXAorICAgIHJldHVybiB0
cnVlOyBcCit9CisKKyNkZWZpbmUgVE9PTFNfUlBDX0RJU1BBVENIMihNZXRob2QsIFQxLCBUMikg
XAoraWYgKG1ldGhvZE5hbWUgPT0gI01ldGhvZCkgeyBcCisgICAgZGVsZWdhdGUtPk1ldGhvZCgg
XAorICAgICAgICBScGNUeXBlVHJhaXQ8VDE+OjpwYXJzZShhcmdzWzBdKSwgXAorICAgICAgICBS
cGNUeXBlVHJhaXQ8VDI+OjpwYXJzZShhcmdzWzFdKSBcCisgICAgKTsgXAorICAgIHJldHVybiB0
cnVlOyBcCit9CisKKyNkZWZpbmUgVE9PTFNfUlBDX0RJU1BBVENIMyhNZXRob2QsIFQxLCBUMiwg
VDMpIFwKK2lmIChtZXRob2ROYW1lID09ICNNZXRob2QpIHsgXAorICAgIGRlbGVnYXRlLT5NZXRo
b2QoIFwKKyAgICAgICAgUnBjVHlwZVRyYWl0PFQxPjo6cGFyc2UoYXJnc1swXSksIFwKKyAgICAg
ICAgUnBjVHlwZVRyYWl0PFQyPjo6cGFyc2UoYXJnc1sxXSksIFwKKyAgICAgICAgUnBjVHlwZVRy
YWl0PFQzPjo6cGFyc2UoYXJnc1syXSkgXAorICAgICk7IFwKKyAgICByZXR1cm4gdHJ1ZTsgXAor
fQorCisjZGVmaW5lIFRPT0xTX1JQQ19ESVNQQVRDSDQoTWV0aG9kLCBUMSwgVDIsIFQzLCBUNCkg
XAoraWYgKG1ldGhvZE5hbWUgPT0gI01ldGhvZCkgeyBcCisgICAgZGVsZWdhdGUtPk1ldGhvZCgg
XAorICAgICAgICBScGNUeXBlVHJhaXQ8VDE+OjpwYXJzZShhcmdzWzBdKSwgXAorICAgICAgICBS
cGNUeXBlVHJhaXQ8VDI+OjpwYXJzZShhcmdzWzFdKSwgXAorICAgICAgICBScGNUeXBlVHJhaXQ8
VDM+OjpwYXJzZShhcmdzWzJdKSwgXAorICAgICAgICBScGNUeXBlVHJhaXQ8VDQ+OjpwYXJzZShh
cmdzWzNdKSBcCisgICAgKTsgXAorICAgIHJldHVybiB0cnVlOyBcCit9CisKKyNkZWZpbmUgVE9P
TFNfUlBDX0RJU1BBVENINShNZXRob2QsIFQxLCBUMiwgVDMsIFQ0LCBUNSkgXAoraWYgKG1ldGhv
ZE5hbWUgPT0gI01ldGhvZCkgeyBcCisgICAgZGVsZWdhdGUtPk1ldGhvZCggXAorICAgICAgICBS
cGNUeXBlVHJhaXQ8VDE+OjpwYXJzZShhcmdzWzBdKSwgXAorICAgICAgICBScGNUeXBlVHJhaXQ8
VDI+OjpwYXJzZShhcmdzWzFdKSwgXAorICAgICAgICBScGNUeXBlVHJhaXQ8VDM+OjpwYXJzZShh
cmdzWzJdKSwgXAorICAgICAgICBScGNUeXBlVHJhaXQ8VDQ+OjpwYXJzZShhcmdzWzNdKSwgXAor
ICAgICAgICBScGNUeXBlVHJhaXQ8VDU+OjpwYXJzZShhcmdzWzRdKSBcCisgICAgKTsgXAorICAg
IHJldHVybiB0cnVlOyBcCit9CisKKyNkZWZpbmUgVE9PTFNfRU5EX1JQQ19ESVNQQVRDSCgpIFwK
K30KKworLy8gVGhpcyBtYWNybyBkZWZpbmVzIHRocmVlIGNsYXNzZXM6IENsYXNzIHdpdGggdGhl
IEFwaSwgQ2xhc3NTdHViIHRoYXQgaXMKKy8vIHNlcmlhbGl6aW5nIG1ldGhvZCBjYWxscyBhbmQg
Q2xhc3NEaXNwYXRjaCB0aGF0IGlzIGNhcGFibGUgb2YgZGlzcGF0Y2hpbmcKKy8vIHRoZSBzZXJp
YWxpemVkIG1lc3NhZ2UgaW50byBpdHMgZGVsZWdhdGUuCisjZGVmaW5lIERFRklORV9SUENfQ0xB
U1MoQ2xhc3MsIFNUUlVDVCkgXAorY2xhc3MgQ2xhc3MgOiBwdWJsaWMgTm9uY29weWFibGUge1wK
K3B1YmxpYzogXAorICAgIENsYXNzKCkgXAorICAgIHsgXAorICAgICAgICBtX2NsYXNzTmFtZSA9
ICNDbGFzczsgXAorICAgIH0gXAorICAgIHZpcnR1YWwgfkNsYXNzKCkgeyB9IFwKKyAgICBcCisg
ICAgU1RSVUNUKCBcCisgICAgICAgIFRPT0xTX1JQQ19BUElfTUVUSE9EMCwgXAorICAgICAgICBU
T09MU19SUENfQVBJX01FVEhPRDEsIFwKKyAgICAgICAgVE9PTFNfUlBDX0FQSV9NRVRIT0QyLCBc
CisgICAgICAgIFRPT0xTX1JQQ19BUElfTUVUSE9EMywgXAorICAgICAgICBUT09MU19SUENfQVBJ
X01FVEhPRDQsIFwKKyAgICAgICAgVE9PTFNfUlBDX0FQSV9NRVRIT0Q1KSBcCisgICAgV2ViQ29y
ZTo6U3RyaW5nIG1fY2xhc3NOYW1lOyBcCit9OyBcCitcCitjbGFzcyBDbGFzcyMjU3R1YiBcCisg
ICAgOiBwdWJsaWMgQ2xhc3MgXAorICAgICwgcHVibGljIERldlRvb2xzUlBDIHsgXAorcHVibGlj
OiBcCisgICAgZXhwbGljaXQgQ2xhc3MjI1N0dWIoRGVsZWdhdGUqIGRlbGVnYXRlKSA6IERldlRv
b2xzUlBDKGRlbGVnYXRlKSB7IH0gXAorICAgIHZpcnR1YWwgfkNsYXNzIyNTdHViKCkgeyB9IFwK
KyAgICB0eXBlZGVmIENsYXNzIENMQVNTOyBcCisgICAgU1RSVUNUKCBcCisgICAgICAgIFRPT0xT
X1JQQ19TVFVCX01FVEhPRDAsIFwKKyAgICAgICAgVE9PTFNfUlBDX1NUVUJfTUVUSE9EMSwgXAor
ICAgICAgICBUT09MU19SUENfU1RVQl9NRVRIT0QyLCBcCisgICAgICAgIFRPT0xTX1JQQ19TVFVC
X01FVEhPRDMsIFwKKyAgICAgICAgVE9PTFNfUlBDX1NUVUJfTUVUSE9ENCwgXAorICAgICAgICBU
T09MU19SUENfU1RVQl9NRVRIT0Q1KSBcCit9OyBcCitcCitjbGFzcyBDbGFzcyMjRGlzcGF0Y2gg
OiBwdWJsaWMgTm9uY29weWFibGUgeyBcCitwdWJsaWM6IFwKKyAgICBDbGFzcyMjRGlzcGF0Y2go
KSB7IH0gXAorICAgIHZpcnR1YWwgfkNsYXNzIyNEaXNwYXRjaCgpIHsgfSBcCisgICAgXAorICAg
IHN0YXRpYyBib29sIGRpc3BhdGNoKENsYXNzKiBkZWxlZ2F0ZSwgXAorICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViRGV2VG9vbHNNZXNzYWdlRGF0YSYgZGF0YSkgeyBc
CisgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBkYXRhLmNsYXNzTmFtZTsgXAorICAgICAgICBp
ZiAoY2xhc3NOYW1lICE9ICNDbGFzcykgXAorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyBcCisg
ICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gZGF0YS5tZXRob2ROYW1lOyBcCisgICAgICAgIFZl
Y3RvcjxTdHJpbmc+IGFyZ3M7IFwKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXRh
LmFyZ3VtZW50cy5zaXplKCk7IGkrKykgXAorICAgICAgICAgICAgYXJncy5hcHBlbmQoZGF0YS5h
cmd1bWVudHNbaV0pOyBcCisgICAgICAgIHR5cGVkZWYgQ2xhc3MgQ0xBU1M7IFwKKyAgICAgICAg
U1RSVUNUKCBcCisgICAgICAgICAgICBUT09MU19SUENfRElTUEFUQ0gwLCBcCisgICAgICAgICAg
ICBUT09MU19SUENfRElTUEFUQ0gxLCBcCisgICAgICAgICAgICBUT09MU19SUENfRElTUEFUQ0gy
LCBcCisgICAgICAgICAgICBUT09MU19SUENfRElTUEFUQ0gzLCBcCisgICAgICAgICAgICBUT09M
U19SUENfRElTUEFUQ0g0LCBcCisgICAgICAgICAgICBUT09MU19SUENfRElTUEFUQ0g1KSBcCisg
ICAgICAgIHJldHVybiBmYWxzZTsgXAorICAgIH0gXAorfTsKKworLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gUlBDIGJhc2UgY2xhc3MK
K2NsYXNzIERldlRvb2xzUlBDIHsKK3B1YmxpYzoKKyAgICBjbGFzcyBEZWxlZ2F0ZSB7CisgICAg
cHVibGljOgorICAgICAgICBEZWxlZ2F0ZSgpIHsgfQorICAgICAgICB2aXJ0dWFsIH5EZWxlZ2F0
ZSgpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgc2VuZFJwY01lc3NhZ2UoY29uc3QgV2ViS2l0
OjpXZWJEZXZUb29sc01lc3NhZ2VEYXRhJiBkYXRhKSA9IDA7CisgICAgfTsKKworICAgIGV4cGxp
Y2l0IERldlRvb2xzUlBDKERlbGVnYXRlKiBkZWxlZ2F0ZSkgOiBtX2RlbGVnYXRlKGRlbGVnYXRl
KSB7IH0KKyAgICB2aXJ0dWFsIH5EZXZUb29sc1JQQygpIHsgfTsKKworcHJvdGVjdGVkOgorICAg
IHZvaWQgc2VuZFJwY01lc3NhZ2UoY29uc3QgU3RyaW5nJiBjbGFzc05hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG1ldGhvZE5hbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJncykgeworICAgICAgV2ViS2l0OjpXZWJW
ZWN0b3I8V2ViS2l0OjpXZWJTdHJpbmc+IHdlYkFyZ3MoYXJncy5zaXplKCkpOworICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgaSsrKQorICAgICAgICAgIHdlYkFyZ3Nb
aV0gPSBhcmdzW2ldOworICAgICAgV2ViS2l0OjpXZWJEZXZUb29sc01lc3NhZ2VEYXRhIGRhdGE7
CisgICAgICBkYXRhLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKKyAgICAgIGRhdGEubWV0aG9kTmFt
ZSA9IG1ldGhvZE5hbWU7CisgICAgICBkYXRhLmFyZ3VtZW50cy5zd2FwKHdlYkFyZ3MpOworICAg
ICAgdGhpcy0+bV9kZWxlZ2F0ZS0+c2VuZFJwY01lc3NhZ2UoZGF0YSk7CisgICAgfQorCisgICAg
RGVsZWdhdGUqIG1fZGVsZWdhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0RldlRvb2xzUlBDSlMuaCBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvRGV2VG9vbHNSUENKUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjhhZTI3OWYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL0RldlRvb2xzUlBDSlMuaApAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIEFkZGl0aW9uYWwgc2V0IG9m
IG1hY3JvcyBmb3IgdGhlIEpTIFJQQy4KKworI2lmbmRlZiBEZXZUb29sc1JQQ0pTX2gKKyNkZWZp
bmUgRGV2VG9vbHNSUENKU19oCisKKy8vIERvIG5vdCByZW1vdmUgdGhpcyBvbmUgYWx0aG91Z2gg
aXQgaXMgbm90IHVzZWQuCisjaW5jbHVkZSAiQm91bmRPYmplY3QuaCIKKyNpbmNsdWRlICJEZXZU
b29sc1JQQy5oIgorI2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor
Ly8gSlMgUlBDIGJpbmRzIGFuZCBzdHVicworCisjZGVmaW5lIFRPT0xTX1JQQ19KU19CSU5EX01F
VEhPRDAoTWV0aG9kKSBcCisgICAgYm91bmRPYmouYWRkUHJvdG9GdW5jdGlvbigjTWV0aG9kLCBP
Q0xBU1M6OmpzIyNNZXRob2QpOworCisjZGVmaW5lIFRPT0xTX1JQQ19KU19CSU5EX01FVEhPRDEo
TWV0aG9kLCBUMSkgXAorICAgIGJvdW5kT2JqLmFkZFByb3RvRnVuY3Rpb24oI01ldGhvZCwgT0NM
QVNTOjpqcyMjTWV0aG9kKTsKKworI2RlZmluZSBUT09MU19SUENfSlNfQklORF9NRVRIT0QyKE1l
dGhvZCwgVDEsIFQyKSBcCisgICAgYm91bmRPYmouYWRkUHJvdG9GdW5jdGlvbigjTWV0aG9kLCBP
Q0xBU1M6OmpzIyNNZXRob2QpOworCisjZGVmaW5lIFRPT0xTX1JQQ19KU19CSU5EX01FVEhPRDMo
TWV0aG9kLCBUMSwgVDIsIFQzKSBcCisgICAgYm91bmRPYmouYWRkUHJvdG9GdW5jdGlvbigjTWV0
aG9kLCBPQ0xBU1M6OmpzIyNNZXRob2QpOworCisjZGVmaW5lIFRPT0xTX1JQQ19KU19CSU5EX01F
VEhPRDQoTWV0aG9kLCBUMSwgVDIsIFQzLCBUNCkgXAorICAgIGJvdW5kT2JqLmFkZFByb3RvRnVu
Y3Rpb24oI01ldGhvZCwgT0NMQVNTOjpqcyMjTWV0aG9kKTsKKworI2RlZmluZSBUT09MU19SUENf
SlNfQklORF9NRVRIT0Q1KE1ldGhvZCwgVDEsIFQyLCBUMywgVDQsIFQ1KSBcCisgICAgYm91bmRP
YmouYWRkUHJvdG9GdW5jdGlvbigjTWV0aG9kLCBPQ0xBU1M6OmpzIyNNZXRob2QpOworCisjZGVm
aW5lIFRPT0xTX1JQQ19KU19TVFVCX01FVEhPRDAoTWV0aG9kKSBcCisgICAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBqcyMjTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpIHsg
XAorICAgICAgICBzZW5kUnBjTWVzc2FnZUZyb21KUygjTWV0aG9kLCBhcmdzLCAwKTsgXAorICAg
ICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOyBcCisgICAgfQorCisjZGVmaW5lIFRPT0xTX1JQ
Q19KU19TVFVCX01FVEhPRDEoTWV0aG9kLCBUMSkgXAorICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4ganMjI01ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKSB7IFwKKyAgICAg
ICAgc2VuZFJwY01lc3NhZ2VGcm9tSlMoI01ldGhvZCwgYXJncywgMSk7IFwKKyAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsgXAorICAgIH0KKworI2RlZmluZSBUT09MU19SUENfSlNfU1RV
Ql9NRVRIT0QyKE1ldGhvZCwgVDEsIFQyKSBcCisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBqcyMjTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpIHsgXAorICAgICAgICBz
ZW5kUnBjTWVzc2FnZUZyb21KUygjTWV0aG9kLCBhcmdzLCAyKTsgXAorICAgICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOyBcCisgICAgfQorCisjZGVmaW5lIFRPT0xTX1JQQ19KU19TVFVCX01F
VEhPRDMoTWV0aG9kLCBUMSwgVDIsIFQzKSBcCisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBqcyMjTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpIHsgXAorICAgICAgICBz
ZW5kUnBjTWVzc2FnZUZyb21KUygjTWV0aG9kLCBhcmdzLCAzKTsgXAorICAgICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOyBcCisgICAgfQorCisjZGVmaW5lIFRPT0xTX1JQQ19KU19TVFVCX01F
VEhPRDQoTWV0aG9kLCBUMSwgVDIsIFQzLCBUNCkgXAorICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4ganMjI01ldGhvZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKSB7IFwKKyAgICAg
ICAgc2VuZFJwY01lc3NhZ2VGcm9tSlMoI01ldGhvZCwgYXJncywgNCk7IFwKKyAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsgXAorICAgIH0KKworI2RlZmluZSBUT09MU19SUENfSlNfU1RV
Ql9NRVRIT0Q1KE1ldGhvZCwgVDEsIFQyLCBUMywgVDQsIFQ1KSBcCisgICAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBqcyMjTWV0aG9kKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpIHsg
XAorICAgICAgICBzZW5kUnBjTWVzc2FnZUZyb21KUygjTWV0aG9kLCBhcmdzLCA1KTsgXAorICAg
ICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOyBcCisgICAgfQorCisvLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBKUyBSUEMgbWFpbiBv
YmogbWFjcm8KKworI2RlZmluZSBERUZJTkVfUlBDX0pTX0JPVU5EX09CSihDbGFzcywgU1RSVUNU
LCBEQ2xhc3MsIERFTEVHQVRFX1NUUlVDVCkgXAorY2xhc3MgSlMjI0NsYXNzIyNCb3VuZE9iaiA6
IHB1YmxpYyBDbGFzcyMjU3R1YiB7IFwKK3B1YmxpYzogXAorICAgIEpTIyNDbGFzcyMjQm91bmRP
YmooRGVsZWdhdGUqIHJwY0RlbGVnYXRlLCBcCisgICAgICAgICAgICAgICAgICAgICAgICB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0LCBcCisgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBjbGFzc25hbWUpIFwKKyAgICAgICAgOiBDbGFzcyMjU3R1YihycGNEZWxlZ2F0
ZSkgeyBcCisgICAgICBCb3VuZE9iamVjdCBib3VuZE9iaihjb250ZXh0LCB0aGlzLCBjbGFzc25h
bWUpOyBcCisgICAgICBTVFJVQ1QoIFwKKyAgICAgICAgICBUT09MU19SUENfSlNfQklORF9NRVRI
T0QwLCBcCisgICAgICAgICAgVE9PTFNfUlBDX0pTX0JJTkRfTUVUSE9EMSwgXAorICAgICAgICAg
IFRPT0xTX1JQQ19KU19CSU5EX01FVEhPRDIsIFwKKyAgICAgICAgICBUT09MU19SUENfSlNfQklO
RF9NRVRIT0QzLCBcCisgICAgICAgICAgVE9PTFNfUlBDX0pTX0JJTkRfTUVUSE9ENCwgXAorICAg
ICAgICAgIFRPT0xTX1JQQ19KU19CSU5EX01FVEhPRDUpIFwKKyAgICAgIGJvdW5kT2JqLmJ1aWxk
KCk7IFwKKyAgICB9IFwKKyAgICB2aXJ0dWFsIH5KUyMjQ2xhc3MjI0JvdW5kT2JqKCkgeyB9IFwK
KyAgICB0eXBlZGVmIEpTIyNDbGFzcyMjQm91bmRPYmogT0NMQVNTOyBcCisgICAgU1RSVUNUKCBc
CisgICAgICAgIFRPT0xTX1JQQ19KU19TVFVCX01FVEhPRDAsIFwKKyAgICAgICAgVE9PTFNfUlBD
X0pTX1NUVUJfTUVUSE9EMSwgXAorICAgICAgICBUT09MU19SUENfSlNfU1RVQl9NRVRIT0QyLCBc
CisgICAgICAgIFRPT0xTX1JQQ19KU19TVFVCX01FVEhPRDMsIFwKKyAgICAgICAgVE9PTFNfUlBD
X0pTX1NUVUJfTUVUSE9ENCwgXAorICAgICAgICBUT09MU19SUENfSlNfU1RVQl9NRVRIT0Q1KSBc
Citwcml2YXRlOiBcCisgICAgc3RhdGljIHZvaWQgc2VuZFJwY01lc3NhZ2VGcm9tSlMoY29uc3Qg
Y2hhciogbWV0aG9kLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgdjg6OkFyZ3VtZW50cyYganNBcmd1bWVudHMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgYXJnc0NvdW50KSBcCisgICAgeyBcCisgICAgICAgIFZlY3Rv
cjxTdHJpbmc+IGFyZ3MoYXJnc0NvdW50KTsgXAorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGFyZ3NDb3VudDsgaSsrKSBcCisgICAgICAgICAgICBhcmdzW2ldID0gV2ViQ29yZTo6dG9X
ZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhqc0FyZ3VtZW50c1tpXSk7IFwKKyAgICAgICAgdm9p
ZCogc2VsZlB0ciA9IHY4OjpFeHRlcm5hbDo6Q2FzdCgqanNBcmd1bWVudHMuRGF0YSgpKS0+VmFs
dWUoKTsgXAorICAgICAgICBKUyMjQ2xhc3MjI0JvdW5kT2JqKiBzZWxmID0gc3RhdGljX2Nhc3Q8
SlMjI0NsYXNzIyNCb3VuZE9iaio+KHNlbGZQdHIpOyBcCisgICAgICAgIHNlbGYtPnNlbmRScGNN
ZXNzYWdlKCNDbGFzcywgbWV0aG9kLCBhcmdzKTsgXAorICAgIH0gXAorfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9Q
cm9maWxlckFnZW50LmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1Byb2ZpbGVyQWdlbnQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjMzN2I4Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9Qcm9maWxlckFnZW50LmgKQEAgLTAsMCArMSw2MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgUHJvZmlsZXJBZ2VudF9oCisjZGVmaW5lIFByb2ZpbGVyQWdlbnRfaAorCisjaW5jbHVk
ZSAiRGV2VG9vbHNSUEMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFByb2ZpbGVyIGFn
ZW50IHByb3ZpZGVzIEFQSSBmb3IgcmV0cmlldmluZyBwcm9maWxlciBkYXRhLgorLy8gVGhlc2Ug
bWV0aG9kcyBhcmUgaGFuZGxlZCBvbiB0aGUgSU8gdGhyZWFkLCBzbyBwcm9maWxlciBjYW4KKy8v
IG9wZXJhdGUgd2hpbGUgYSBzY3JpcHQgb24gYSBwYWdlIHBlcmZvcm1zIGhlYXZ5IHdvcmsuCisj
ZGVmaW5lIFBST0ZJTEVSX0FHRU5UX1NUUlVDVChNRVRIT0QwLCBNRVRIT0QxLCBNRVRIT0QyLCBN
RVRIT0QzLCBNRVRIT0Q0LCBNRVRIT0Q1KSBcCisgICAgLyogUmVxdWVzdHMgY3VycmVudCBwcm9m
aWxlciBzdGF0ZS4gKi8gXAorICAgIE1FVEhPRDAoZ2V0QWN0aXZlUHJvZmlsZXJNb2R1bGVzKSBc
CisgICAgXAorICAgIC8qIFJldHJpZXZlcyBwb3J0aW9uIG9mIHByb2ZpbGVyIGxvZy4gKi8gXAor
ICAgIE1FVEhPRDEoZ2V0TG9nTGluZXMsIGludCAvKiBwb3NpdGlvbiAqLykKKworREVGSU5FX1JQ
Q19DTEFTUyhQcm9maWxlckFnZW50LCBQUk9GSUxFUl9BR0VOVF9TVFJVQ1QpCisKKyNkZWZpbmUg
UFJPRklMRVJfQUdFTlRfREVMRUdBVEVfU1RSVUNUKE1FVEhPRDAsIE1FVEhPRDEsIE1FVEhPRDIs
IE1FVEhPRDMsIE1FVEhPRDQsIE1FVEhPRDUpIFwKKyAgICAvKiBSZXNwb25zZSB0byBnZXRBY3Rp
dmVQcm9maWxlck1vZHVsZXMuICovIFwKKyAgICBNRVRIT0QxKGRpZEdldEFjdGl2ZVByb2ZpbGVy
TW9kdWxlcywgaW50IC8qIGZsYWdzICovKSBcCisgICAgXAorICAgIC8qIFJlc3BvbnNlIHRvIGdl
dExvZ0xpbmVzLiAqLyBcCisgICAgTUVUSE9EMihkaWRHZXRMb2dMaW5lcywgaW50IC8qIHBvc2l0
aW9uICovLCBTdHJpbmcgLyogbG9nICovKQorCitERUZJTkVfUlBDX0NMQVNTKFByb2ZpbGVyQWdl
bnREZWxlZ2F0ZSwgUFJPRklMRVJfQUdFTlRfREVMRUdBVEVfU1RSVUNUKQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1By
b2ZpbGVyQWdlbnRJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvUHJvZmlsZXJBZ2VudElt
cGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NTcwZGYKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1Byb2ZpbGVyQWdlbnRJbXBsLmNwcApA
QCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlByb2ZpbGVyQWdl
bnRJbXBsLmgiCisKKyNpbmNsdWRlIDx2OC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9p
ZCBQcm9maWxlckFnZW50SW1wbDo6Z2V0QWN0aXZlUHJvZmlsZXJNb2R1bGVzKCkKK3sKKyAgICBt
X2RlbGVnYXRlLT5kaWRHZXRBY3RpdmVQcm9maWxlck1vZHVsZXModjg6OlY4OjpHZXRBY3RpdmVQ
cm9maWxlck1vZHVsZXMoKSk7Cit9CisKK3ZvaWQgUHJvZmlsZXJBZ2VudEltcGw6OmdldExvZ0xp
bmVzKGludCBwb3NpdGlvbikKK3sKKyAgICBzdGF0aWMgY2hhciBidWZmZXJbNjU1MzZdOworICAg
IGNvbnN0IGludCByZWFkU2l6ZSA9IHY4OjpWODo6R2V0TG9nTGluZXMocG9zaXRpb24sIGJ1ZmZl
ciwgc2l6ZW9mKGJ1ZmZlcikgLSAxKTsKKyAgICBidWZmZXJbcmVhZFNpemVdID0gJ1wwJzsKKyAg
ICBwb3NpdGlvbiArPSByZWFkU2l6ZTsKKyAgICBtX2RlbGVnYXRlLT5kaWRHZXRMb2dMaW5lcyhw
b3NpdGlvbiwgYnVmZmVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vc3JjL1Byb2ZpbGVyQWdlbnRJbXBsLmggYi9XZWJLaXQvY2hyb21p
dW0vc3JjL1Byb2ZpbGVyQWdlbnRJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZDM4ZjU3YwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvUHJv
ZmlsZXJBZ2VudEltcGwuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQcm9maWxlckFnZW50SW1w
bF9oCisjZGVmaW5lIFByb2ZpbGVyQWdlbnRJbXBsX2gKKworI2luY2x1ZGUgIlByb2ZpbGVyQWdl
bnQuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFByb2ZpbGVyQWdlbnRJbXBsIDog
cHVibGljIFByb2ZpbGVyQWdlbnQgeworcHVibGljOgorICAgIFByb2ZpbGVyQWdlbnRJbXBsKFBy
b2ZpbGVyQWdlbnREZWxlZ2F0ZSogZGVsZWdhdGUpIDogbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkgeyB9
CisgICAgdmlydHVhbCB+UHJvZmlsZXJBZ2VudEltcGwoKSB7IH0KKworICAgIC8vIFByb2ZpbGVy
QWdlbnQgaW1wbGVtZW50YXRpb24uCisKKyAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24g
SU8gdGhyZWFkLgorICAgIHZpcnR1YWwgdm9pZCBnZXRBY3RpdmVQcm9maWxlck1vZHVsZXMoKTsK
KworICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiBJTyB0aHJlYWQuCisgICAgdmlydHVh
bCB2b2lkIGdldExvZ0xpbmVzKGludCBwb3NpdGlvbik7CisKK3ByaXZhdGU6CisgICAgUHJvZmls
ZXJBZ2VudERlbGVnYXRlKiBtX2RlbGVnYXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9Ub29sc0FnZW50Lmgg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL1Rvb2xzQWdlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5mZDFmY2I3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9Ub29sc0FnZW50LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVG9vbHNBZ2VudF9oCisj
ZGVmaW5lIFRvb2xzQWdlbnRfaAorCisjaW5jbHVkZSAiRGV2VG9vbHNSUEMuaCIKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKKy8vIFRvb2xzIGFnZW50IHByb3ZpZGVzIEFQSSBmb3IgZW5hYmxpbmcg
LyBkaXNhYmxpbmcgb3RoZXIgYWdlbnRzIGFzIHdlbGwgYXMKKy8vIEFQSSBmb3IgYXV4aWxpYXJ5
IFVJIGZ1bmN0aW9ucyBzdWNoIGFzIGRvbSBlbGVtZW50cyBoaWdobGlnaHRpbmcuCisjZGVmaW5l
IFRPT0xTX0FHRU5UX1NUUlVDVChNRVRIT0QwLCBNRVRIT0QxLCBNRVRIT0QyLCBNRVRIT0QzLCBN
RVRIT0Q0LCBNRVRIT0Q1KSBcCisgICAgLyogUmVxdWVzdCB0aGUgYWdlbnQgdG8gdG8gcnVuIGEg
bm8tb3AgSmF2YVNjcmlwdCBmdW5jdGlvbiB0byB0cmlnZ2VyIHY4IGV4ZWN1dGlvbi4gKi8gXAor
ICAgIE1FVEhPRDAoZXhlY3V0ZVZvaWRKYXZhU2NyaXB0KSBcCisgICAgXAorICAgIC8qIERpc3Bh
dGNoZXMgZ2l2ZW4gZnVuY3Rpb24gb24gdGhlIEluc3BlY3RvckNvbnRyb2xsZXIgb2JqZWN0ICov
IFwKKyAgICBNRVRIT0QzKGRpc3BhdGNoT25JbnNwZWN0b3JDb250cm9sbGVyLCBpbnQgLyogY2Fs
bF9pZCAqLywgXAorICAgICAgICBTdHJpbmcgLyogZnVuY3Rpb25fbmFtZSAqLywgU3RyaW5nIC8q
IGpzb25fYXJncyAqLykgXAorICAgIFwKKyAgICAvKiBEaXNwYXRjaGVzIGdpdmVuIGZ1bmN0aW9u
IG9uIHRoZSBJbmplY3RlZFNjcmlwdCBvYmplY3QgKi8gXAorICAgIE1FVEhPRDUoZGlzcGF0Y2hP
bkluamVjdGVkU2NyaXB0LCBpbnQgLyogY2FsbF9pZCAqLywgXAorICAgICAgICBpbnQgLyogaW5q
ZWN0ZWRfc2NyaXB0X2lkICovLCBTdHJpbmcgLyogZnVuY3Rpb25fbmFtZSAqLywgXAorICAgICAg
ICBTdHJpbmcgLyoganNvbl9hcmdzICovLCBib29sIC8qIGFzeW5jICovKQorCitERUZJTkVfUlBD
X0NMQVNTKFRvb2xzQWdlbnQsIFRPT0xTX0FHRU5UX1NUUlVDVCkKKworI2RlZmluZSBUT09MU19B
R0VOVF9ERUxFR0FURV9TVFJVQ1QoTUVUSE9EMCwgTUVUSE9EMSwgTUVUSE9EMiwgTUVUSE9EMywg
TUVUSE9ENCwgTUVUSE9ENSkgXAorICAgIC8qIFVwZGF0ZXMgZm9jdXNlZCBub2RlIG9uIHRoZSBj
bGllbnQuICovIFwKKyAgICBNRVRIT0QxKGZyYW1lTmF2aWdhdGUsIFN0cmluZyAvKiB1cmwgKi8p
IFwKKyAgICBcCisgICAgLyogUmVzcG9uc2UgdG8gdGhlIERpc3BhdGNoT24qLiAqLyBcCisgICAg
TUVUSE9EMyhkaWREaXNwYXRjaE9uLCBpbnQgLyogY2FsbF9pZCAqLywgU3RyaW5nIC8qIHJlc3Vs
dCAqLywgU3RyaW5nIC8qIGV4Y2VwdGlvbiAqLykgXAorICAgIFwKKyAgICAvKiBTZW5kcyBJbnNw
ZWN0b3JGcm9udGVuZCBtZXNzYWdlIHRvIGJlIGRpc3BhdGNoZWQgb24gY2xpZW50LiAqLyBcCisg
ICAgTUVUSE9EMShkaXNwYXRjaE9uQ2xpZW50LCBTdHJpbmcgLyogZGF0YSAqLykKKworREVGSU5F
X1JQQ19DTEFTUyhUb29sc0FnZW50RGVsZWdhdGUsIFRPT0xTX0FHRU5UX0RFTEVHQVRFX1NUUlVD
VCkKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi45ZDM4NmYzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJEZXZUb29sc0FnZW50SW1wbC5jcHAKQEAgLTAsMCArMSw1NjYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2VudEltcGwuaCIKKworI2luY2x1ZGUgIkJvdW5k
T2JqZWN0LmgiCisjaW5jbHVkZSAiRGVidWdnZXJBZ2VudEltcGwuaCIKKyNpbmNsdWRlICJEZWJ1
Z2dlckFnZW50TWFuYWdlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZl
bnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0SG9zdC5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvckJhY2tlbmQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCisj
aW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JSZXNvdXJj
ZS5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJQcm9maWxlckFnZW50SW1wbC5oIgorI2luY2x1ZGUg
IlJlc291cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRl
ICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCisjaW5jbHVk
ZSAiU2NyaXB0U3RhdGUuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgIlY4
QmluZGluZy5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlICJWOFV0aWxpdGllcy5o
IgorI2luY2x1ZGUgIldlYkRhdGFTb3VyY2UuaCIKKyNpbmNsdWRlICJXZWJEZXZUb29sc0FnZW50
Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViRGV2VG9vbHNNZXNzYWdlRGF0YS5oIgorI2luY2x1ZGUg
IldlYkZyYW1lSW1wbC5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorI2luY2x1ZGUgIldlYlVS
TC5oIgorI2luY2x1ZGUgIldlYlVSTEVycm9yLmgiCisjaW5jbHVkZSAiV2ViVVJMUmVxdWVzdC5o
IgorI2luY2x1ZGUgIldlYlVSTFJlc3BvbnNlLmgiCisjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIK
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisK
K3VzaW5nIFdlYkNvcmU6OkRvY3VtZW50OwordXNpbmcgV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI7
Cit1c2luZyBXZWJDb3JlOjpGcmFtZUxvYWRlcjsKK3VzaW5nIFdlYkNvcmU6OkluamVjdGVkU2Ny
aXB0SG9zdDsKK3VzaW5nIFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ7Cit1c2luZyBXZWJDb3Jl
OjpJbnNwZWN0b3JDb250cm9sbGVyOwordXNpbmcgV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ7
Cit1c2luZyBXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZTsKK3VzaW5nIFdlYkNvcmU6Ok5vZGU7
Cit1c2luZyBXZWJDb3JlOjpQYWdlOwordXNpbmcgV2ViQ29yZTo6UmVzb3VyY2VFcnJvcjsKK3Vz
aW5nIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDsKK3VzaW5nIFdlYkNvcmU6OlJlc291cmNlUmVz
cG9uc2U7Cit1c2luZyBXZWJDb3JlOjpTYWZlQWxsb2NhdGlvbjsKK3VzaW5nIFdlYkNvcmU6OlNj
cmlwdE9iamVjdDsKK3VzaW5nIFdlYkNvcmU6OlNjcmlwdFN0YXRlOwordXNpbmcgV2ViQ29yZTo6
U2NyaXB0VmFsdWU7Cit1c2luZyBXZWJDb3JlOjpTdHJpbmc7Cit1c2luZyBXZWJDb3JlOjpWOENs
YXNzSW5kZXg7Cit1c2luZyBXZWJDb3JlOjpWOERPTVdyYXBwZXI7Cit1c2luZyBXZWJDb3JlOjpW
OFByb3h5OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworbmFtZXNwYWNlIHsKKwordm9pZCBJbnNw
ZWN0b3JCYWNrZW5kV2Vha1JlZmVyZW5jZUNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1
ZT4gb2JqZWN0LCB2b2lkKiBwYXJhbWV0ZXIpCit7CisgICAgSW5zcGVjdG9yQmFja2VuZCogYmFj
a2VuZCA9IHN0YXRpY19jYXN0PEluc3BlY3RvckJhY2tlbmQqPihwYXJhbWV0ZXIpOworICAgIGJh
Y2tlbmQtPmRlcmVmKCk7CisgICAgb2JqZWN0LkRpc3Bvc2UoKTsKK30KKwordm9pZCBTZXRBcHVB
Z2VudEVuYWJsZWRJblV0aWxpdHlDb250ZXh0KHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRl
eHQsIGJvb2wgZW5hYmxlZCkKK3sKKyAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Cisg
ICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShjb250ZXh0KTsKKyAgICB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IGRpc3BhdGNoZXIgPSB2ODo6TG9jYWw8djg6Ok9iamVjdD46OkNhc3Qo
CisgICAgICAgIGNvbnRleHQtPkdsb2JhbCgpLT5HZXQodjg6OlN0cmluZzo6TmV3KCJBcHVBZ2Vu
dERpc3BhdGNoZXIiKSkpOworICAgIGlmIChkaXNwYXRjaGVyLklzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGRpc3BhdGNoZXItPlNldCh2ODo6U3RyaW5nOjpOZXcoImVuYWJsZWQiKSwg
djg6OkJvb2xlYW46Ok5ldyhlbmFibGVkKSk7Cit9CisKKy8vIFRPRE8ocGZlbGRtYW4pOiBNYWtl
IHRoaXMgcHVibGljIGluIFdlYkRldlRvb2xzQWdlbnQgQVBJLgorc3RhdGljIGNvbnN0IGNoYXIg
a0FwdUFnZW50RmVhdHVyZU5hbWVbXSA9ICJhcHUtYWdlbnQiOworCisvLyBLZWVwIHRoZXNlIGlu
IHN5bmMgd2l0aCB0aGUgb25lcyBpbiBpbmplY3RfZGlzcGF0Y2guanMuCitzdGF0aWMgY29uc3Qg
Y2hhciBrVGltZWxpbmVGZWF0dXJlTmFtZVtdID0gInRpbWVsaW5lLXByb2ZpbGVyIjsKK3N0YXRp
YyBjb25zdCBjaGFyIGtSZXNvdXJjZVRyYWNraW5nRmVhdHVyZU5hbWVbXSA9ICJyZXNvdXJjZS10
cmFja2luZyI7CisKK2NsYXNzIElPUlBDRGVsZWdhdGUgOiBwdWJsaWMgRGV2VG9vbHNSUEM6OkRl
bGVnYXRlLCBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIElPUlBDRGVsZWdhdGUo
KSB7IH0KKyAgICB2aXJ0dWFsIH5JT1JQQ0RlbGVnYXRlKCkgeyB9CisgICAgdmlydHVhbCB2b2lk
IHNlbmRScGNNZXNzYWdlKGNvbnN0IFdlYkRldlRvb2xzTWVzc2FnZURhdGEmIGRhdGEpCisgICAg
eworICAgICAgICBXZWJEZXZUb29sc0FnZW50Q2xpZW50OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmRP
bklPVGhyZWFkKGRhdGEpOworICAgIH0KK307CisKK30gLy8gIG5hbWVzcGFjZQorCitXZWJEZXZU
b29sc0FnZW50SW1wbDo6V2ViRGV2VG9vbHNBZ2VudEltcGwoCisgICAgV2ViVmlld0ltcGwqIHdl
YlZpZXdJbXBsLAorICAgIFdlYkRldlRvb2xzQWdlbnRDbGllbnQqIGNsaWVudCkKKyAgICA6IG1f
aG9zdElkKGNsaWVudC0+aG9zdElkZW50aWZpZXIoKSkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkK
KyAgICAsIG1fd2ViVmlld0ltcGwod2ViVmlld0ltcGwpCisgICAgLCBtX2FwdUFnZW50RW5hYmxl
ZChmYWxzZSkKKyAgICAsIG1fcmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQoZmFsc2UpCisgICAg
LCBtX2F0dGFjaGVkKGZhbHNlKQoreworICAgIG1fZGVidWdnZXJBZ2VudERlbGVnYXRlU3R1Yi5z
ZXQobmV3IERlYnVnZ2VyQWdlbnREZWxlZ2F0ZVN0dWIodGhpcykpOworICAgIG1fdG9vbHNBZ2Vu
dERlbGVnYXRlU3R1Yi5zZXQobmV3IFRvb2xzQWdlbnREZWxlZ2F0ZVN0dWIodGhpcykpOworICAg
IG1fYXB1QWdlbnREZWxlZ2F0ZVN0dWIuc2V0KG5ldyBBcHVBZ2VudERlbGVnYXRlU3R1Yih0aGlz
KSk7Cit9CisKK1dlYkRldlRvb2xzQWdlbnRJbXBsOjp+V2ViRGV2VG9vbHNBZ2VudEltcGwoKQor
eworICAgIERlYnVnZ2VyQWdlbnRNYW5hZ2VyOjpvbldlYlZpZXdDbG9zZWQobV93ZWJWaWV3SW1w
bCk7CisgICAgZGlzcG9zZVV0aWxpdHlDb250ZXh0KCk7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNB
Z2VudEltcGw6OmRpc3Bvc2VVdGlsaXR5Q29udGV4dCgpCit7CisgICAgaWYgKCFtX3V0aWxpdHlD
b250ZXh0LklzRW1wdHkoKSkgeworICAgICAgICBtX3V0aWxpdHlDb250ZXh0LkRpc3Bvc2UoKTsK
KyAgICAgICAgbV91dGlsaXR5Q29udGV4dC5DbGVhcigpOworICAgIH0KK30KKwordm9pZCBXZWJE
ZXZUb29sc0FnZW50SW1wbDo6dW5oaWRlUmVzb3VyY2VzUGFuZWxJZk5lY2Vzc2FyeSgpCit7Cisg
ICAgSW5zcGVjdG9yQ29udHJvbGxlciogaWMgPSBtX3dlYlZpZXdJbXBsLT5wYWdlKCktPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKTsKKyAgICBpYy0+ZW5zdXJlUmVzb3VyY2VUcmFja2luZ1NldHRpbmdz
TG9hZGVkKCk7CisgICAgU3RyaW5nIGNvbW1hbmQgPSBTdHJpbmc6OmZvcm1hdCgiW1wic2V0UmVz
b3VyY2VzUGFuZWxFbmFibGVkXCIsICVzXSIsCisgICAgICAgIGljLT5yZXNvdXJjZVRyYWNraW5n
RW5hYmxlZCgpID8gInRydWUiIDogImZhbHNlIik7CisgICAgbV90b29sc0FnZW50RGVsZWdhdGVT
dHViLT5kaXNwYXRjaE9uQ2xpZW50KGNvbW1hbmQpOworfQorCit2b2lkIFdlYkRldlRvb2xzQWdl
bnRJbXBsOjphdHRhY2goKQoreworICAgIGlmIChtX2F0dGFjaGVkKQorICAgICAgICByZXR1cm47
CisgICAgbV9kZWJ1Z2dlckFnZW50SW1wbC5zZXQoCisgICAgICAgIG5ldyBEZWJ1Z2dlckFnZW50
SW1wbChtX3dlYlZpZXdJbXBsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kZWJ1
Z2dlckFnZW50RGVsZWdhdGVTdHViLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGhpcykpOworICAgIHJlc2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eSgpOworICAgIHVuaGlk
ZVJlc291cmNlc1BhbmVsSWZOZWNlc3NhcnkoKTsKKyAgICAvLyBBbGxvdyBjb250cm9sbGVyIHRv
IHNlbmQgbWVzc2FnZXMgdG8gdGhlIGZyb250ZW5kLgorICAgIEluc3BlY3RvckNvbnRyb2xsZXIq
IGljID0gaW5zcGVjdG9yQ29udHJvbGxlcigpOworCisgICAgeyAvLyBUT0RPKHl1cnlzKTogdGhl
IHNvdXJjZSBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gcHVzaGVkIGJ5IHRoZSBmcm9udGVuZC4K
KyAgICAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgICAgICB2ODo6Q29udGV4dDo6U2Nv
cGUgY29udGV4dFNjb3BlKG1fdXRpbGl0eUNvbnRleHQpOworICAgICAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gY29uc3RydWN0b3JWYWx1ZSA9IG1fdXRpbGl0eUNvbnRleHQtPkdsb2JhbCgpLT5H
ZXQoCisgICAgICAgICAgICB2ODo6U3RyaW5nOjpOZXcoImluamVjdGVkU2NyaXB0Q29uc3RydWN0
b3IiKSk7CisgICAgICAgIGlmIChjb25zdHJ1Y3RvclZhbHVlLT5Jc0Z1bmN0aW9uKCkpIHsKKyAg
ICAgICAgICAgIFN0cmluZyBzb3VyY2UgPSBXZWJDb3JlOjp0b1dlYkNvcmVTdHJpbmcoY29uc3Ry
dWN0b3JWYWx1ZSk7CisgICAgICAgICAgICBpYy0+aW5qZWN0ZWRTY3JpcHRIb3N0KCktPnNldElu
amVjdGVkU2NyaXB0U291cmNlKCIoIiArIHNvdXJjZSArICIpIik7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpYy0+c2V0V2luZG93VmlzaWJsZSh0cnVlLCBmYWxzZSk7CisgICAgbV9hdHRhY2hl
ZCA9IHRydWU7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmRldGFjaCgpCit7Cisg
ICAgLy8gUHJldmVudCBjb250cm9sbGVyIGZyb20gc2VuZGluZyBtZXNzYWdlcyB0byB0aGUgZnJv
bnRlbmQuCisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaWMgPSBtX3dlYlZpZXdJbXBsLT5wYWdl
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKKyAgICBpYy0+aGlkZUhpZ2hsaWdodCgpOworICAg
IGljLT5jbG9zZSgpOworICAgIGRpc3Bvc2VVdGlsaXR5Q29udGV4dCgpOworICAgIG1fZGVidWdn
ZXJBZ2VudEltcGwuc2V0KDApOworICAgIG1fYXR0YWNoZWQgPSBmYWxzZTsKKyAgICBtX2FwdUFn
ZW50RW5hYmxlZCA9IGZhbHNlOworfQorCit2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpkaWRO
YXZpZ2F0ZSgpCit7CisgICAgRGVidWdnZXJBZ2VudE1hbmFnZXI6Om9uTmF2aWdhdGUoKTsKK30K
Kwordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkQ29tbWl0UHJvdmlzaW9uYWxMb2FkKFdl
YkZyYW1lSW1wbCogd2ViZnJhbWUsIGJvb2wgaXNOZXdOYXZpZ2F0aW9uKQoreworICAgIGlmICgh
bV9hdHRhY2hlZCkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkRhdGFTb3VyY2UqIGRzID0gd2Vi
ZnJhbWUtPmRhdGFTb3VyY2UoKTsKKyAgICBjb25zdCBXZWJVUkxSZXF1ZXN0JiByZXF1ZXN0ID0g
ZHMtPnJlcXVlc3QoKTsKKyAgICBXZWJVUkwgdXJsID0gZHMtPmhhc1VucmVhY2hhYmxlVVJMKCkg
PworICAgICAgICBkcy0+dW5yZWFjaGFibGVVUkwoKSA6CisgICAgICAgIHJlcXVlc3QudXJsKCk7
CisgICAgaWYgKCF3ZWJmcmFtZS0+cGFyZW50KCkpIHsKKyAgICAgICAgcmVzZXRJbnNwZWN0b3JG
cm9udGVuZFByb3h5KCk7CisgICAgICAgIG1fdG9vbHNBZ2VudERlbGVnYXRlU3R1Yi0+ZnJhbWVO
YXZpZ2F0ZShXZWJDb3JlOjpLVVJMKHVybCkuc3RyaW5nKCkpOworICAgICAgICBTZXRBcHVBZ2Vu
dEVuYWJsZWRJblV0aWxpdHlDb250ZXh0KG1fdXRpbGl0eUNvbnRleHQsIG1fYXB1QWdlbnRFbmFi
bGVkKTsKKyAgICAgICAgdW5oaWRlUmVzb3VyY2VzUGFuZWxJZk5lY2Vzc2FyeSgpOworICAgIH0K
K30KKwordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkQ2xlYXJXaW5kb3dPYmplY3QoV2Vi
RnJhbWVJbXBsKiB3ZWJmcmFtZSkKK3sKKyAgICBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6c2V0SG9z
dElkKHdlYmZyYW1lLCBtX2hvc3RJZCk7CisgICAgaWYgKG1fYXR0YWNoZWQpIHsKKyAgICAgICAg
Ly8gUHVzaCBjb250ZXh0IGlkIGludG8gdGhlIGNsaWVudCBpZiBpdCBpcyBhbHJlYWR5IGF0dGFj
aGVkLgorICAgICAgICBtX2RlYnVnZ2VyQWdlbnREZWxlZ2F0ZVN0dWItPnNldENvbnRleHRJZCht
X2hvc3RJZCk7CisgICAgfQorfQorCit2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpmb3JjZVJl
cGFpbnQoKQoreworICAgIG1fY2xpZW50LT5mb3JjZVJlcGFpbnQoKTsKK30KKwordm9pZCBXZWJE
ZXZUb29sc0FnZW50SW1wbDo6ZGlzcGF0Y2hPbkluc3BlY3RvckNvbnRyb2xsZXIoaW50IGNhbGxJ
ZCwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYganNvbkFyZ3MpCit7
CisgICAgU3RyaW5nIHJlc3VsdDsKKyAgICBTdHJpbmcgZXhjZXB0aW9uOworICAgIHJlc3VsdCA9
IG1fZGVidWdnZXJBZ2VudEltcGwtPmV4ZWN1dGVVdGlsaXR5RnVuY3Rpb24obV91dGlsaXR5Q29u
dGV4dCwgY2FsbElkLAorICAgICAgICAiSW5zcGVjdG9yQ29udHJvbGxlckRpc3BhdGNoZXIiLCBm
dW5jdGlvbk5hbWUsIGpzb25BcmdzLCBmYWxzZSAvKiBpcyBzeW5jICovLCAmZXhjZXB0aW9uKTsK
KyAgICBtX3Rvb2xzQWdlbnREZWxlZ2F0ZVN0dWItPmRpZERpc3BhdGNoT24oY2FsbElkLCByZXN1
bHQsIGV4Y2VwdGlvbik7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmRpc3BhdGNo
T25JbmplY3RlZFNjcmlwdChpbnQgY2FsbElkLCBpbnQgaW5qZWN0ZWRTY3JpcHRJZCwgY29uc3Qg
U3RyaW5nJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYganNvbkFyZ3MsIGJvb2wgYXN5bmMp
Cit7CisgICAgaW5zcGVjdG9yQ29udHJvbGxlcigpLT5pbnNwZWN0b3JCYWNrZW5kKCktPmRpc3Bh
dGNoT25JbmplY3RlZFNjcmlwdCgKKyAgICAgICAgY2FsbElkLAorICAgICAgICBpbmplY3RlZFNj
cmlwdElkLAorICAgICAgICBmdW5jdGlvbk5hbWUsCisgICAgICAgIGpzb25BcmdzLAorICAgICAg
ICBhc3luYyk7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmV4ZWN1dGVWb2lkSmF2
YVNjcmlwdCgpCit7CisgICAgbV9kZWJ1Z2dlckFnZW50SW1wbC0+ZXhlY3V0ZVZvaWRKYXZhU2Ny
aXB0KG1fdXRpbGl0eUNvbnRleHQpOworfQorCit2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpk
aXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQoY29uc3QgV2ViRGV2VG9vbHNNZXNzYWdlRGF0YSYg
ZGF0YSkKK3sKKyAgICBpZiAoVG9vbHNBZ2VudERpc3BhdGNoOjpkaXNwYXRjaCh0aGlzLCBkYXRh
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2F0dGFjaGVkKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAobV9kZWJ1Z2dlckFnZW50SW1wbC5nZXQoKSAmJiBEZWJ1Z2dlckFnZW50
RGlzcGF0Y2g6OmRpc3BhdGNoKG1fZGVidWdnZXJBZ2VudEltcGwuZ2V0KCksIGRhdGEpKQorICAg
ICAgICByZXR1cm47Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6Omluc3BlY3RFbGVt
ZW50QXQoY29uc3QgV2ViUG9pbnQmIHBvaW50KQoreworICAgIG1fd2ViVmlld0ltcGwtPmluc3Bl
Y3RFbGVtZW50QXQocG9pbnQpOworfQorCit2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpzZXRS
dW50aW1lRmVhdHVyZUVuYWJsZWQoY29uc3QgV2ViU3RyaW5nJiBmZWF0dXJlLCBib29sIGVuYWJs
ZWQpCit7CisgICAgaWYgKGZlYXR1cmUgPT0ga0FwdUFnZW50RmVhdHVyZU5hbWUpCisgICAgICAg
IHNldEFwdUFnZW50RW5hYmxlZChlbmFibGVkKTsKKyAgICBlbHNlIGlmIChmZWF0dXJlID09IGtU
aW1lbGluZUZlYXR1cmVOYW1lKQorICAgICAgICBzZXRUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQo
ZW5hYmxlZCk7CisgICAgZWxzZSBpZiAoZmVhdHVyZSA9PSBrUmVzb3VyY2VUcmFja2luZ0ZlYXR1
cmVOYW1lKSB7CisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGljID0gbV93ZWJWaWV3SW1w
bC0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCk7CisgICAgICAgIGlmIChlbmFibGVkKQor
ICAgICAgICAgIGljLT5lbmFibGVSZXNvdXJjZVRyYWNraW5nKGZhbHNlIC8qIG5vdCBzdGlja3kg
Ki8sIGZhbHNlIC8qIG5vIHJlbG9hZCAqLyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBpYy0+
ZGlzYWJsZVJlc291cmNlVHJhY2tpbmcoZmFsc2UgLyogbm90IHN0aWNreSAqLyk7CisgICAgfQor
fQorCit2b2lkIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpzZW5kUnBjTWVzc2FnZShjb25zdCBXZWJE
ZXZUb29sc01lc3NhZ2VEYXRhJiBkYXRhKQoreworICAgIG1fY2xpZW50LT5zZW5kTWVzc2FnZVRv
RnJvbnRlbmQoZGF0YSk7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmNvbXBpbGVV
dGlsaXR5U2NyaXB0cygpCit7CisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworICAg
IHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUobV91dGlsaXR5Q29udGV4dCk7CisgICAg
Ly8gSW5qZWN0IGphdmFzY3JpcHQgaW50byB0aGUgY29udGV4dC4KKyAgICBXZWJDU3RyaW5nIGlu
amVjdGVkU2NyaXB0SnMgPSBtX2NsaWVudC0+aW5qZWN0ZWRTY3JpcHRTb3VyY2UoKTsKKyAgICB2
ODo6U2NyaXB0OjpDb21waWxlKHY4OjpTdHJpbmc6Ok5ldygKKyAgICAgICAgaW5qZWN0ZWRTY3Jp
cHRKcy5kYXRhKCksCisgICAgICAgIGluamVjdGVkU2NyaXB0SnMubGVuZ3RoKCkpKS0+UnVuKCk7
CisgICAgV2ViQ1N0cmluZyBpbmplY3REaXNwYXRjaEpzID0gbV9jbGllbnQtPmluamVjdGVkU2Ny
aXB0RGlzcGF0Y2hlclNvdXJjZSgpOworICAgIHY4OjpTY3JpcHQ6OkNvbXBpbGUodjg6OlN0cmlu
Zzo6TmV3KAorICAgICAgICBpbmplY3REaXNwYXRjaEpzLmRhdGEoKSwKKyAgICAgICAgaW5qZWN0
RGlzcGF0Y2hKcy5sZW5ndGgoKSkpLT5SdW4oKTsKK30KKwordm9pZCBXZWJEZXZUb29sc0FnZW50
SW1wbDo6aW5pdERldlRvb2xzQWdlbnRIb3N0KCkKK3sKKyAgICBCb3VuZE9iamVjdCBkZXZ0b29s
c0FnZW50SG9zdChtX3V0aWxpdHlDb250ZXh0LCB0aGlzLCAiRGV2VG9vbHNBZ2VudEhvc3QiKTsK
KyAgICBkZXZ0b29sc0FnZW50SG9zdC5hZGRQcm90b0Z1bmN0aW9uKAorICAgICAgICAiZGlzcGF0
Y2giLAorICAgICAgICBXZWJEZXZUb29sc0FnZW50SW1wbDo6anNEaXNwYXRjaE9uQ2xpZW50KTsK
KyAgICBkZXZ0b29sc0FnZW50SG9zdC5hZGRQcm90b0Z1bmN0aW9uKAorICAgICAgICAiZGlzcGF0
Y2hUb0FwdSIsCisgICAgICAgIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpqc0Rpc3BhdGNoVG9BcHUp
OworICAgIGRldnRvb2xzQWdlbnRIb3N0LmFkZFByb3RvRnVuY3Rpb24oCisgICAgICAgICJldmFs
dWF0ZU9uU2VsZiIsCisgICAgICAgIFdlYkRldlRvb2xzQWdlbnRJbXBsOjpqc0V2YWx1YXRlT25T
ZWxmKTsKKyAgICBkZXZ0b29sc0FnZW50SG9zdC5hZGRQcm90b0Z1bmN0aW9uKAorICAgICAgICAi
cnVudGltZUZlYXR1cmVTdGF0ZUNoYW5nZWQiLAorICAgICAgICBXZWJEZXZUb29sc0FnZW50SW1w
bDo6anNPblJ1bnRpbWVGZWF0dXJlU3RhdGVDaGFuZ2VkKTsKKyAgICBkZXZ0b29sc0FnZW50SG9z
dC5idWlsZCgpOworCisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgIHY4OjpDb250ZXh0
OjpTY29wZSB1dGlsaXR5U2NvcGUobV91dGlsaXR5Q29udGV4dCk7CisgICAgLy8gQ2FsbCBjdXN0
b20gY29kZSB0byBjcmVhdGUgaW5zcGVjdG9yIGJhY2tlbmQgd3JhcHBlciBpbiB0aGUgdXRpbGl0
eSBjb250ZXh0CisgICAgLy8gaW5zdGVhZCBvZiBjYWxsaW5nIFY4RE9NV3JhcHBlcjo6Y29udmVy
dFRvVjhPYmplY3QgdGhhdCB3b3VsZCBjcmVhdGUgdGhlCisgICAgLy8gd3JhcHBlciBpbiB0aGUg
UGFnZSBtYWluIGZyYW1lIGNvbnRleHQuCisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBiYWNr
ZW5kV3JhcHBlciA9IGNyZWF0ZUluc3BlY3RvckJhY2tlbmRWOFdyYXBwZXIoKTsKKyAgICBpZiAo
YmFja2VuZFdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgbV91dGlsaXR5
Q29udGV4dC0+R2xvYmFsKCktPlNldCh2ODo6U3RyaW5nOjpOZXcoIkluc3BlY3RvckJhY2tlbmQi
KSwgYmFja2VuZFdyYXBwZXIpOworfQorCit2ODo6TG9jYWw8djg6Ok9iamVjdD4gV2ViRGV2VG9v
bHNBZ2VudEltcGw6OmNyZWF0ZUluc3BlY3RvckJhY2tlbmRWOFdyYXBwZXIoKQoreworICAgIFY4
Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBkZXNjcmlwdG9yVHlwZSA9IFY4Q2xhc3NJbmRleDo6
SU5TUEVDVE9SQkFDS0VORDsKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gZnVuY3Rpb24g
PSBWOERPTVdyYXBwZXI6OmdldFRlbXBsYXRlKGRlc2NyaXB0b3JUeXBlKS0+R2V0RnVuY3Rpb24o
KTsKKyAgICBpZiAoZnVuY3Rpb24uSXNFbXB0eSgpKSB7CisgICAgICAgIC8vIFJldHVybiBpZiBh
bGxvY2F0aW9uIGZhaWxlZC4KKyAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6T2JqZWN0Pigp
OworICAgIH0KKyAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gaW5zdGFuY2UgPSBTYWZlQWxsb2Nh
dGlvbjo6bmV3SW5zdGFuY2UoZnVuY3Rpb24pOworICAgIGlmIChpbnN0YW5jZS5Jc0VtcHR5KCkp
IHsKKyAgICAgICAgLy8gQXZvaWQgc2V0dGluZyB0aGUgd3JhcHBlciBpZiBhbGxvY2F0aW9uIGZh
aWxlZC4KKyAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6T2JqZWN0PigpOworICAgIH0KKyAg
ICBJbnNwZWN0b3JCYWNrZW5kKiBiYWNrZW5kID0gbV93ZWJWaWV3SW1wbC0+cGFnZSgpLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCktPmluc3BlY3RvckJhY2tlbmQoKTsKKyAgICBWOERPTVdyYXBwZXI6
OnNldERPTVdyYXBwZXIoaW5zdGFuY2UsIFY4Q2xhc3NJbmRleDo6VG9JbnQoZGVzY3JpcHRvclR5
cGUpLCBiYWNrZW5kKTsKKyAgICAvLyBDcmVhdGUgYSB3ZWFrIHJlZmVyZW5jZSB0byB0aGUgdjgg
d3JhcHBlciBvZiBJbnNwZWN0b3JCYWNrZW5kIHRvIGRlcmVmCisgICAgLy8gSW5zcGVjdG9yQmFj
a2VuZCB3aGVuIHRoZSB3cmFwcGVyIGlzIGdhcmJhZ2UgY29sbGVjdGVkLgorICAgIGJhY2tlbmQt
PnJlZigpOworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdlYWtIYW5kbGUgPSB2ODo6
UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGluc3RhbmNlKTsKKyAgICB3ZWFrSGFuZGxlLk1h
a2VXZWFrKGJhY2tlbmQsICZJbnNwZWN0b3JCYWNrZW5kV2Vha1JlZmVyZW5jZUNhbGxiYWNrKTsK
KyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OnJl
c2V0SW5zcGVjdG9yRnJvbnRlbmRQcm94eSgpCit7CisgICAgZGlzcG9zZVV0aWxpdHlDb250ZXh0
KCk7CisgICAgbV9kZWJ1Z2dlckFnZW50SW1wbC0+Y3JlYXRlVXRpbGl0eUNvbnRleHQobV93ZWJW
aWV3SW1wbC0+cGFnZSgpLT5tYWluRnJhbWUoKSwgJm1fdXRpbGl0eUNvbnRleHQpOworICAgIGNv
bXBpbGVVdGlsaXR5U2NyaXB0cygpOworICAgIGluaXREZXZUb29sc0FnZW50SG9zdCgpOworCisg
ICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0
U2NvcGUobV91dGlsaXR5Q29udGV4dCk7CisgICAgU2NyaXB0U3RhdGUqIHN0YXRlID0gU2NyaXB0
U3RhdGU6OmZvckNvbnRleHQoCisgICAgICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyht
X3V0aWxpdHlDb250ZXh0KSk7CisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaWMgPSBpbnNwZWN0
b3JDb250cm9sbGVyKCk7CisgICAgaWMtPnNldEZyb250ZW5kUHJveHlPYmplY3Qoc3RhdGUsIFNj
cmlwdE9iamVjdChzdGF0ZSwgbV91dGlsaXR5Q29udGV4dC0+R2xvYmFsKCkpKTsKK30KKwordm9p
ZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6c2V0QXB1QWdlbnRFbmFibGVkKGJvb2wgZW5hYmxlZCkK
K3sKKyAgICBtX2FwdUFnZW50RW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgU2V0QXB1QWdlbnRFbmFi
bGVkSW5VdGlsaXR5Q29udGV4dChtX3V0aWxpdHlDb250ZXh0LCBlbmFibGVkKTsKKyAgICBJbnNw
ZWN0b3JDb250cm9sbGVyKiBpYyA9IG1fd2ViVmlld0ltcGwtPnBhZ2UoKS0+aW5zcGVjdG9yQ29u
dHJvbGxlcigpOworICAgIGlmIChlbmFibGVkKSB7CisgICAgICAgIG1fcmVzb3VyY2VUcmFja2lu
Z1dhc0VuYWJsZWQgPSBpYy0+cmVzb3VyY2VUcmFja2luZ0VuYWJsZWQoKTsKKyAgICAgICAgaWMt
PnN0YXJ0VGltZWxpbmVQcm9maWxlcigpOworICAgICAgICBpZiAoIW1fcmVzb3VyY2VUcmFja2lu
Z1dhc0VuYWJsZWQpIHsKKyAgICAgICAgICAgIC8vIFRPRE8oa25vcnRvbik6IEludHJvZHVjZSBz
b21lIGtpbmQgb2YgYWdlbnRzIGRlcGVuZGVuY3kgaGVyZSBzbyB0aGF0CisgICAgICAgICAgICAv
LyB1c2VyIGNvdWxkIHR1cm4gb2ZmIHJlc291cmNlIHRyYWNraW5nIHdoaWxlIGFwdSBhZ2VudCBp
cyBvbi4KKyAgICAgICAgICAgIGljLT5lbmFibGVSZXNvdXJjZVRyYWNraW5nKGZhbHNlLCBmYWxz
ZSk7CisgICAgICAgIH0KKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50SW1wbC0+c2V0QXV0b0NvbnRp
bnVlT25FeGNlcHRpb24odHJ1ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGljLT5zdG9wVGltZWxp
bmVQcm9maWxlcigpOworICAgICAgaWYgKCFtX3Jlc291cmNlVHJhY2tpbmdXYXNFbmFibGVkKQor
ICAgICAgICAgIGljLT5kaXNhYmxlUmVzb3VyY2VUcmFja2luZyhmYWxzZSk7CisgICAgICBtX3Jl
c291cmNlVHJhY2tpbmdXYXNFbmFibGVkID0gZmFsc2U7CisgICAgfQorICAgIG1fY2xpZW50LT5y
dW50aW1lRmVhdHVyZVN0YXRlQ2hhbmdlZCgKKyAgICAgICAga0FwdUFnZW50RmVhdHVyZU5hbWUs
CisgICAgICAgIGVuYWJsZWQpOworfQorCisvLyBzdGF0aWMKK3Y4OjpIYW5kbGU8djg6OlZhbHVl
PiBXZWJEZXZUb29sc0FnZW50SW1wbDo6anNEaXNwYXRjaE9uQ2xpZW50KGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCit7CisgICAgdjg6OlRyeUNhdGNoIGV4Y2VwdGlvbkNhdGNoZXI7CisgICAg
U3RyaW5nIG1lc3NhZ2UgPSBXZWJDb3JlOjp0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKGFy
Z3NbMF0pOworICAgIGlmIChtZXNzYWdlLmlzRW1wdHkoKSB8fCBleGNlcHRpb25DYXRjaGVyLkhh
c0NhdWdodCgpKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIFdlYkRldlRv
b2xzQWdlbnRJbXBsKiBhZ2VudCA9IHN0YXRpY19jYXN0PFdlYkRldlRvb2xzQWdlbnRJbXBsKj4o
djg6OkV4dGVybmFsOjpDYXN0KCphcmdzLkRhdGEoKSktPlZhbHVlKCkpOworICAgIGFnZW50LT5t
X3Rvb2xzQWdlbnREZWxlZ2F0ZVN0dWItPmRpc3BhdGNoT25DbGllbnQobWVzc2FnZSk7CisgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKworLy8gc3RhdGljCit2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gV2ViRGV2VG9vbHNBZ2VudEltcGw6OmpzRGlzcGF0Y2hUb0FwdShjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKQoreworICAgIHY4OjpUcnlDYXRjaCBleGNlcHRpb25DYXRjaGVyOworICAg
IFN0cmluZyBtZXNzYWdlID0gV2ViQ29yZTo6dG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhh
cmdzWzBdKTsKKyAgICBpZiAobWVzc2FnZS5pc0VtcHR5KCkgfHwgZXhjZXB0aW9uQ2F0Y2hlci5I
YXNDYXVnaHQoKSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICBXZWJEZXZU
b29sc0FnZW50SW1wbCogYWdlbnQgPSBzdGF0aWNfY2FzdDxXZWJEZXZUb29sc0FnZW50SW1wbCo+
KAorICAgICAgICB2ODo6RXh0ZXJuYWw6OkNhc3QoKmFyZ3MuRGF0YSgpKS0+VmFsdWUoKSk7Cisg
ICAgYWdlbnQtPm1fYXB1QWdlbnREZWxlZ2F0ZVN0dWItPmRpc3BhdGNoVG9BcHUobWVzc2FnZSk7
CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKworLy8gc3RhdGljCit2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNBZ2VudEltcGw6OmpzRXZhbHVhdGVPblNlbGYoY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBTdHJpbmcgY29kZTsKKyAgICB7CisgICAgICAg
IHY4OjpUcnlDYXRjaCBleGNlcHRpb25DYXRjaGVyOworICAgICAgICBjb2RlID0gV2ViQ29yZTo6
dG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhhcmdzWzBdKTsKKyAgICAgICAgaWYgKGNvZGUu
aXNFbXB0eSgpIHx8IGV4Y2VwdGlvbkNhdGNoZXIuSGFzQ2F1Z2h0KCkpCisgICAgICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIH0KKyAgICBXZWJEZXZUb29sc0FnZW50SW1wbCog
YWdlbnQgPSBzdGF0aWNfY2FzdDxXZWJEZXZUb29sc0FnZW50SW1wbCo+KHY4OjpFeHRlcm5hbDo6
Q2FzdCgqYXJncy5EYXRhKCkpLT5WYWx1ZSgpKTsKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUoYWdl
bnQtPm1fdXRpbGl0eUNvbnRleHQpOworICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0
cmlldmUoYWdlbnQtPm1fd2ViVmlld0ltcGwtPnBhZ2UoKS0+bWFpbkZyYW1lKCkpOworICAgIHY4
OjpMb2NhbDx2ODo6VmFsdWU+IHJlc3VsdCA9IHByb3h5LT5ydW5TY3JpcHQodjg6OlNjcmlwdDo6
Q29tcGlsZSh2ODo6U3RyaW5nOjpOZXcoY29kZS51dGY4KCkuZGF0YSgpKSksIHRydWUpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKKy8vIHN0YXRpYwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdl
YkRldlRvb2xzQWdlbnRJbXBsOjpqc09uUnVudGltZUZlYXR1cmVTdGF0ZUNoYW5nZWQoY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICB2ODo6VHJ5Q2F0Y2ggZXhjZXB0aW9uQ2F0Y2hl
cjsKKyAgICBTdHJpbmcgZmVhdHVyZSA9IFdlYkNvcmU6OnRvV2ViQ29yZVN0cmluZ1dpdGhOdWxs
Q2hlY2soYXJnc1swXSk7CisgICAgYm9vbCBlbmFibGVkID0gYXJnc1sxXS0+VG9Cb29sZWFuKCkt
PlZhbHVlKCk7CisgICAgaWYgKGZlYXR1cmUuaXNFbXB0eSgpIHx8IGV4Y2VwdGlvbkNhdGNoZXIu
SGFzQ2F1Z2h0KCkpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgV2ViRGV2
VG9vbHNBZ2VudEltcGwqIGFnZW50ID0gc3RhdGljX2Nhc3Q8V2ViRGV2VG9vbHNBZ2VudEltcGwq
Pih2ODo6RXh0ZXJuYWw6OkNhc3QoKmFyZ3MuRGF0YSgpKS0+VmFsdWUoKSk7CisgICAgYWdlbnQt
Pm1fY2xpZW50LT5ydW50aW1lRmVhdHVyZVN0YXRlQ2hhbmdlZChmZWF0dXJlLCBlbmFibGVkKTsK
KyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCisKK1dlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXIqIFdlYkRldlRvb2xzQWdlbnRJbXBsOjppbnNwZWN0b3JDb250cm9sbGVyKCkKK3sK
KyAgICBpZiAoUGFnZSogcGFnZSA9IG1fd2ViVmlld0ltcGwtPnBhZ2UoKSkKKyAgICAgICAgcmV0
dXJuIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKTsKKyAgICByZXR1cm4gMDsKK30KKworCisv
Ly0tLS0tLS0gcGx1Z2luIHJlc291cmNlIGxvYWQgbm90aWZpY2F0aW9ucyAtLS0tLS0tLS0tLS0t
LS0KK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudEltcGw6OmlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVz
dCgKKyAgICB1bnNpZ25lZCBsb25nIHJlc291cmNlSWQsCisgICAgV2ViRnJhbWUqIGZyYW1lLAor
ICAgIGNvbnN0IFdlYlVSTFJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgaWYgKEluc3BlY3RvckNv
bnRyb2xsZXIqIGljID0gaW5zcGVjdG9yQ29udHJvbGxlcigpKSB7CisgICAgICAgIFdlYkZyYW1l
SW1wbCogd2ViRnJhbWVJbXBsID0gc3RhdGljX2Nhc3Q8V2ViRnJhbWVJbXBsKj4oZnJhbWUpOwor
ICAgICAgICBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIgPSB3ZWJGcmFtZUltcGwtPmZyYW1lKCkt
PmxvYWRlcigpOworICAgICAgICBEb2N1bWVudExvYWRlciogbG9hZGVyID0gZnJhbWVMb2FkZXIt
PmFjdGl2ZURvY3VtZW50TG9hZGVyKCk7CisgICAgICAgIGljLT5pZGVudGlmaWVyRm9ySW5pdGlh
bFJlcXVlc3QocmVzb3VyY2VJZCwgbG9hZGVyLCByZXF1ZXN0LnRvUmVzb3VyY2VSZXF1ZXN0KCkp
OworICAgIH0KK30KKwordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6d2lsbFNlbmRSZXF1ZXN0
KHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VJZCwgY29uc3QgV2ViVVJMUmVxdWVzdCYgcmVxdWVzdCkK
K3sKKyAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaWMgPSBpbnNwZWN0b3JDb250cm9sbGVy
KCkpCisgICAgICAgIGljLT53aWxsU2VuZFJlcXVlc3QocmVzb3VyY2VJZCwgcmVxdWVzdC50b1Jl
c291cmNlUmVxdWVzdCgpLCBSZXNvdXJjZVJlc3BvbnNlKCkpOworfQorCit2b2lkIFdlYkRldlRv
b2xzQWdlbnRJbXBsOjpkaWRSZWNlaXZlRGF0YSh1bnNpZ25lZCBsb25nIHJlc291cmNlSWQsIGlu
dCBsZW5ndGgpCit7CisgICAgaWYgKEluc3BlY3RvckNvbnRyb2xsZXIqIGljID0gaW5zcGVjdG9y
Q29udHJvbGxlcigpKQorICAgICAgICBpYy0+ZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgocmVzb3Vy
Y2VJZCwgbGVuZ3RoKTsKK30KKwordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VJZCwgY29uc3QgV2ViVVJMUmVzcG9uc2Um
IHJlc3BvbnNlKQoreworICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGluc3BlY3Rv
ckNvbnRyb2xsZXIoKSkKKyAgICAgICAgaWMtPmRpZFJlY2VpdmVSZXNwb25zZShyZXNvdXJjZUlk
LCByZXNwb25zZS50b1Jlc291cmNlUmVzcG9uc2UoKSk7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNB
Z2VudEltcGw6OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyByZXNvdXJjZUlkKQorewor
ICAgIGlmIChJbnNwZWN0b3JDb250cm9sbGVyKiBpYyA9IGluc3BlY3RvckNvbnRyb2xsZXIoKSkK
KyAgICAgICAgaWMtPmRpZEZpbmlzaExvYWRpbmcocmVzb3VyY2VJZCk7Cit9CisKK3ZvaWQgV2Vi
RGV2VG9vbHNBZ2VudEltcGw6OmRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxvbmcgcmVzb3VyY2VJ
ZCwgY29uc3QgV2ViVVJMRXJyb3ImIGVycm9yKQoreworICAgIFJlc291cmNlRXJyb3IgcmVzb3Vy
Y2VFcnJvcjsKKyAgICBpZiAoSW5zcGVjdG9yQ29udHJvbGxlciogaWMgPSBpbnNwZWN0b3JDb250
cm9sbGVyKCkpCisgICAgICAgIGljLT5kaWRGYWlsTG9hZGluZyhyZXNvdXJjZUlkLCByZXNvdXJj
ZUVycm9yKTsKK30KKwordm9pZCBXZWJEZXZUb29sc0FnZW50SW1wbDo6ZXZhbHVhdGVJbldlYklu
c3BlY3Rvcihsb25nIGNhbGxJZCwgY29uc3QgV2ViU3RyaW5nJiBzY3JpcHQpCit7CisgICAgSW5z
cGVjdG9yQ29udHJvbGxlciogaWMgPSBpbnNwZWN0b3JDb250cm9sbGVyKCk7CisgICAgaWMtPmV2
YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQoY2FsbElkLCBzY3JpcHQpOworfQorCit2b2lkIFdlYkRl
dlRvb2xzQWdlbnRJbXBsOjpzZXRUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQoYm9vbCBlbmFibGVk
KQoreworICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGljID0gaW5zcGVjdG9yQ29udHJvbGxlcigp
OworICAgIGlmIChlbmFibGVkKQorICAgICAgICBpYy0+c3RhcnRUaW1lbGluZVByb2ZpbGVyKCk7
CisgICAgZWxzZQorICAgICAgICBpYy0+c3RvcFRpbWVsaW5lUHJvZmlsZXIoKTsKK30KKworV2Vi
RGV2VG9vbHNBZ2VudCogV2ViRGV2VG9vbHNBZ2VudDo6Y3JlYXRlKFdlYlZpZXcqIHdlYnZpZXcs
IFdlYkRldlRvb2xzQWdlbnRDbGllbnQqIGNsaWVudCkKK3sKKyAgICByZXR1cm4gbmV3IFdlYkRl
dlRvb2xzQWdlbnRJbXBsKHN0YXRpY19jYXN0PFdlYlZpZXdJbXBsKj4od2VidmlldyksIGNsaWVu
dCk7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudDo6ZXhlY3V0ZURlYnVnZ2VyQ29tbWFuZChj
b25zdCBXZWJTdHJpbmcmIGNvbW1hbmQsIGludCBjYWxsZXJJZCkKK3sKKyAgICBEZWJ1Z2dlckFn
ZW50TWFuYWdlcjo6ZXhlY3V0ZURlYnVnZ2VyQ29tbWFuZChjb21tYW5kLCBjYWxsZXJJZCk7Cit9
CisKK3ZvaWQgV2ViRGV2VG9vbHNBZ2VudDo6ZGVidWdnZXJQYXVzZVNjcmlwdCgpCit7CisgICAg
RGVidWdnZXJBZ2VudE1hbmFnZXI6OnBhdXNlU2NyaXB0KCk7Cit9CisKK3ZvaWQgV2ViRGV2VG9v
bHNBZ2VudDo6c2V0TWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIoTWVzc2FnZUxvb3BEaXNwYXRj
aEhhbmRsZXIgaGFuZGxlcikKK3sKKyAgICBEZWJ1Z2dlckFnZW50TWFuYWdlcjo6c2V0TWVzc2Fn
ZUxvb3BEaXNwYXRjaEhhbmRsZXIoaGFuZGxlcik7Cit9CisKK2Jvb2wgV2ViRGV2VG9vbHNBZ2Vu
dDo6ZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kT25JT1RocmVhZChjb25zdCBXZWJEZXZUb29s
c01lc3NhZ2VEYXRhJiBkYXRhKQoreworICAgIElPUlBDRGVsZWdhdGUgdHJhbnNwb3J0OworICAg
IFByb2ZpbGVyQWdlbnREZWxlZ2F0ZVN0dWIgc3R1YigmdHJhbnNwb3J0KTsKKyAgICBQcm9maWxl
ckFnZW50SW1wbCBhZ2VudCgmc3R1Yik7CisgICAgcmV0dXJuIFByb2ZpbGVyQWdlbnREaXNwYXRj
aDo6ZGlzcGF0Y2goJmFnZW50LCBkYXRhKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmggYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y1OTI4YgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuaApAQCAtMCwwICsxLDE0MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgV2ViRGV2VG9vbHNBZ2VudEltcGxfaAorI2RlZmluZSBXZWJEZXZUb29sc0FnZW50SW1wbF9o
CisKKyNpbmNsdWRlICJBUFVBZ2VudERlbGVnYXRlLmgiCisjaW5jbHVkZSAiRGV2VG9vbHNSUEMu
aCIKKyNpbmNsdWRlICJUb29sc0FnZW50LmgiCisjaW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2VudFBy
aXZhdGUuaCIKKworI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEluc3BlY3RvckNvbnRy
b2xsZXI7CitjbGFzcyBOb2RlOworY2xhc3MgU3RyaW5nOworfQorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgRGVidWdnZXJBZ2VudERlbGVnYXRlU3R1YjsKK2NsYXNzIERlYnVnZ2VyQWdl
bnRJbXBsOworY2xhc3MgV2ViRGV2VG9vbHNBZ2VudENsaWVudDsKK2NsYXNzIFdlYkZyYW1lOwor
Y2xhc3MgV2ViRnJhbWVJbXBsOworY2xhc3MgV2ViU3RyaW5nOworY2xhc3MgV2ViVVJMUmVxdWVz
dDsKK2NsYXNzIFdlYlVSTFJlc3BvbnNlOworY2xhc3MgV2ViVmlld0ltcGw7CitzdHJ1Y3QgV2Vi
VVJMRXJyb3I7CitzdHJ1Y3QgV2ViRGV2VG9vbHNNZXNzYWdlRGF0YTsKKworY2xhc3MgV2ViRGV2
VG9vbHNBZ2VudEltcGwgOiBwdWJsaWMgV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBUb29sc0FnZW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdWJsaWMgRGV2VG9vbHNSUEM6OkRlbGVnYXRlIHsKK3B1YmxpYzoKKyAg
ICBXZWJEZXZUb29sc0FnZW50SW1wbChXZWJWaWV3SW1wbCogd2ViVmlld0ltcGwsIFdlYkRldlRv
b2xzQWdlbnRDbGllbnQqIGNsaWVudCk7CisgICAgdmlydHVhbCB+V2ViRGV2VG9vbHNBZ2VudElt
cGwoKTsKKworICAgIC8vIFRvb2xzQWdlbnQgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoT25JbnNwZWN0b3JDb250cm9sbGVyKGludCBjYWxsSWQsIGNvbnN0IFdlYkNv
cmU6OlN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGpzb25Bcmdz
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hPbkluamVjdGVkU2NyaXB0KGludCBjYWxsSWQs
IGludCBpbmplY3RlZFNjcmlwdElkLCBjb25zdCBXZWJDb3JlOjpTdHJpbmcmIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBqc29uQXJncywgYm9vbCBhc3luYyk7CisgICAgdmly
dHVhbCB2b2lkIGV4ZWN1dGVWb2lkSmF2YVNjcmlwdCgpOworCisgICAgLy8gV2ViRGV2VG9vbHNB
Z2VudFByaXZhdGUgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2b2lkIGRpZENsZWFyV2lu
ZG93T2JqZWN0KFdlYkZyYW1lSW1wbCogZnJhbWUpOworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21t
aXRQcm92aXNpb25hbExvYWQoV2ViRnJhbWVJbXBsKiBmcmFtZSwgYm9vbCBpc05ld05hdmlnYXRp
b24pOworCisgICAgLy8gV2ViRGV2VG9vbHNBZ2VudCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0
dWFsIHZvaWQgYXR0YWNoKCk7CisgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOworICAgIHZpcnR1
YWwgdm9pZCBkaWROYXZpZ2F0ZSgpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaE1lc3NhZ2VG
cm9tRnJvbnRlbmQoY29uc3QgV2ViRGV2VG9vbHNNZXNzYWdlRGF0YSYgZGF0YSk7CisgICAgdmly
dHVhbCB2b2lkIGluc3BlY3RFbGVtZW50QXQoY29uc3QgV2ViUG9pbnQmIHBvaW50KTsKKyAgICB2
aXJ0dWFsIHZvaWQgZXZhbHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNhbGxJZCwgY29uc3QgV2Vi
U3RyaW5nJiBzY3JpcHQpOworICAgIHZpcnR1YWwgdm9pZCBzZXRSdW50aW1lRmVhdHVyZUVuYWJs
ZWQoY29uc3QgV2ViU3RyaW5nJiBmZWF0dXJlLCBib29sIGVuYWJsZWQpOworICAgIHZpcnR1YWwg
dm9pZCBzZXRUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQoYm9vbCBlbmFibGUpOworCisgICAgdmly
dHVhbCB2b2lkIGlkZW50aWZpZXJGb3JJbml0aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25nLCBXZWJG
cmFtZSosIGNvbnN0IFdlYlVSTFJlcXVlc3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRS
ZXF1ZXN0KHVuc2lnbmVkIGxvbmcsIGNvbnN0IFdlYlVSTFJlcXVlc3QmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVjZWl2ZURhdGEodW5zaWduZWQgbG9uZywgaW50IGxlbmd0aCk7CisgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nLCBjb25zdCBXZWJVUkxS
ZXNwb25zZSYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxv
bmcpOworICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsTG9hZGluZyh1bnNpZ25lZCBsb25nLCBjb25z
dCBXZWJVUkxFcnJvciYpOworCisgICAgLy8gRGV2VG9vbHNSUEM6OkRlbGVnYXRlIGltcGxlbWVu
dGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBzZW5kUnBjTWVzc2FnZShjb25zdCBXZWJEZXZUb29s
c01lc3NhZ2VEYXRhJiBkYXRhKTsKKworICAgIHZvaWQgZm9yY2VSZXBhaW50KCk7CisKKyAgICBp
bnQgaG9zdElkKCkgeyByZXR1cm4gbV9ob3N0SWQ7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRGlzcGF0Y2hPbkNsaWVudChjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRGlzcGF0Y2hU
b0FwdShjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGpzRXZhbHVhdGVPblNlbGYoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7Cisg
ICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc09uUnVudGltZUZlYXR1cmVTdGF0ZUNo
YW5nZWQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7CisKKyAgICB2b2lkIGRpc3Bvc2VVdGls
aXR5Q29udGV4dCgpOworICAgIHZvaWQgdW5oaWRlUmVzb3VyY2VzUGFuZWxJZk5lY2Vzc2FyeSgp
OworCisgICAgdm9pZCBjb21waWxlVXRpbGl0eVNjcmlwdHMoKTsKKyAgICB2b2lkIGluaXREZXZU
b29sc0FnZW50SG9zdCgpOworICAgIHZvaWQgcmVzZXRJbnNwZWN0b3JGcm9udGVuZFByb3h5KCk7
CisgICAgdm9pZCBzZXRBcHVBZ2VudEVuYWJsZWQoYm9vbCBlbmFibGVkKTsKKworICAgIFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIoKTsKKworICAgIC8v
IENyZWF0ZXMgSW5zcGVjdG9yQmFja2VuZCB2OCB3cmFwcGVyIGluIHRoZSB1dGlsaXR5IGNvbnRl
eHQgc28gdGhhdCBpdCdzCisgICAgLy8gbWV0aG9kcyBwcm90b3R5cGUgaXMgRnVuY3Rpb24ucHJv
dG95cGUgb2JqZWN0IGZyb20gdGhlIHV0aWxpdHkgY29udGV4dC4KKyAgICAvLyBPdGhlcndpc2Ug
c29tZSB1c2VmdWwgbWV0aG9kcyAgZGVmaW5lZCBvbiBGdW5jdGlvbi5wcm90b3R5cGUoc3VjaCBh
cyBiaW5kKQorICAgIC8vIGFyZSBtaXNzaW5nIGZvciBJbnNwZWN0b3JDb250cm9sbGVyIG5hdGl2
ZSBtZXRob2RzLgorICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBjcmVhdGVJbnNwZWN0b3JCYWNr
ZW5kVjhXcmFwcGVyKCk7CisKKyAgICBpbnQgbV9ob3N0SWQ7CisgICAgV2ViRGV2VG9vbHNBZ2Vu
dENsaWVudCogbV9jbGllbnQ7CisgICAgV2ViVmlld0ltcGwqIG1fd2ViVmlld0ltcGw7CisgICAg
T3duUHRyPERlYnVnZ2VyQWdlbnREZWxlZ2F0ZVN0dWI+IG1fZGVidWdnZXJBZ2VudERlbGVnYXRl
U3R1YjsKKyAgICBPd25QdHI8VG9vbHNBZ2VudERlbGVnYXRlU3R1Yj4gbV90b29sc0FnZW50RGVs
ZWdhdGVTdHViOworICAgIE93blB0cjxEZWJ1Z2dlckFnZW50SW1wbD4gbV9kZWJ1Z2dlckFnZW50
SW1wbDsKKyAgICBPd25QdHI8QXB1QWdlbnREZWxlZ2F0ZVN0dWI+IG1fYXB1QWdlbnREZWxlZ2F0
ZVN0dWI7CisgICAgYm9vbCBtX2FwdUFnZW50RW5hYmxlZDsKKyAgICBib29sIG1fcmVzb3VyY2VU
cmFja2luZ1dhc0VuYWJsZWQ7CisgICAgYm9vbCBtX2F0dGFjaGVkOworICAgIC8vIFRPRE8ocGZl
bGRtYW4pOiBUaGlzIHNob3VsZCBub3QgYmUgbmVlZGVkIG9uY2UgR0Mgc3R5bGVzIGlzc3VlIGlz
IGZpeGVkCisgICAgLy8gZm9yIG1hdGNoaW5nIHJ1bGVzLgorICAgIHY4OjpQZXJzaXN0ZW50PHY4
OjpDb250ZXh0PiBtX3V0aWxpdHlDb250ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zy
b250ZW5kSW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzRnJvbnRlbmRJ
bXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTY1Y2VjCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250ZW5kSW1w
bC5jcHAKQEAgLTAsMCArMSwzOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
RGV2VG9vbHNGcm9udGVuZEltcGwuaCIKKworI2luY2x1ZGUgIkJvdW5kT2JqZWN0LmgiCisjaW5j
bHVkZSAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnVJdGVt
LmgiCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRGVidWdnZXJBZ2VudC5oIgor
I2luY2x1ZGUgIkRldlRvb2xzUlBDSlMuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1
ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JCYWNr
ZW5kLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkluc3Bl
Y3RvckZyb250ZW5kSG9zdC5oIgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJQYWdlLmgi
CisjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisj
aW5jbHVkZSAiUHJvZmlsZXJBZ2VudC5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJUb29sc0FnZW50LmgiCisjaW5jbHVkZSAi
VjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhE
T01XcmFwcGVyLmgiCisjaW5jbHVkZSAiVjhJbnNwZWN0b3JGcm9udGVuZEhvc3QuaCIKKyNpbmNs
dWRlICJWOE5vZGUuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAiVjhVdGlsaXRp
ZXMuaCIKKyNpbmNsdWRlICJXZWJEZXZUb29sc0Zyb250ZW5kQ2xpZW50LmgiCisjaW5jbHVkZSAi
V2ViRnJhbWVJbXBsLmgiCisjaW5jbHVkZSAiV2ViU2NyaXB0U291cmNlLmgiCisjaW5jbHVkZSAi
V2ViVmlld0ltcGwuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK3N0YXRpYyB2ODo6TG9jYWw8djg6OlN0cmluZz4gVG9WOFN0cmluZyhjb25zdCBTdHJpbmcm
IHMpCit7CisgICAgaWYgKHMuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6
OlN0cmluZz4oKTsKKworICAgIHJldHVybiB2ODo6U3RyaW5nOjpOZXcocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50MTZfdCo+KHMuY2hhcmFjdGVycygpKSwgcy5sZW5ndGgoKSk7Cit9CisKK0RF
RklORV9SUENfSlNfQk9VTkRfT0JKKERlYnVnZ2VyQWdlbnQsIERFQlVHR0VSX0FHRU5UX1NUUlVD
VCwgRGVidWdnZXJBZ2VudERlbGVnYXRlLCBERUJVR0dFUl9BR0VOVF9ERUxFR0FURV9TVFJVQ1Qp
CitERUZJTkVfUlBDX0pTX0JPVU5EX09CSihQcm9maWxlckFnZW50LCBQUk9GSUxFUl9BR0VOVF9T
VFJVQ1QsIFByb2ZpbGVyQWdlbnREZWxlZ2F0ZSwgUFJPRklMRVJfQUdFTlRfREVMRUdBVEVfU1RS
VUNUKQorREVGSU5FX1JQQ19KU19CT1VORF9PQkooVG9vbHNBZ2VudCwgVE9PTFNfQUdFTlRfU1RS
VUNULCBUb29sc0FnZW50RGVsZWdhdGUsIFRPT0xTX0FHRU5UX0RFTEVHQVRFX1NUUlVDVCkKKwor
V2ViRGV2VG9vbHNGcm9udGVuZCogV2ViRGV2VG9vbHNGcm9udGVuZDo6Y3JlYXRlKAorICAgIFdl
YlZpZXcqIHZpZXcsCisgICAgV2ViRGV2VG9vbHNGcm9udGVuZENsaWVudCogY2xpZW50LAorICAg
IGNvbnN0IFdlYlN0cmluZyYgYXBwbGljYXRpb25Mb2NhbGUpCit7CisgICAgcmV0dXJuIG5ldyBX
ZWJEZXZUb29sc0Zyb250ZW5kSW1wbCgKKyAgICAgIHN0YXRpY19jYXN0PFdlYlZpZXdJbXBsKj4o
dmlldyksCisgICAgICBjbGllbnQsCisgICAgICBhcHBsaWNhdGlvbkxvY2FsZSk7Cit9CisKK1dl
YkRldlRvb2xzRnJvbnRlbmRJbXBsOjpXZWJEZXZUb29sc0Zyb250ZW5kSW1wbCgKKyAgICBXZWJW
aWV3SW1wbCogd2ViVmlld0ltcGwsCisgICAgV2ViRGV2VG9vbHNGcm9udGVuZENsaWVudCogY2xp
ZW50LAorICAgIGNvbnN0IFN0cmluZyYgYXBwbGljYXRpb25Mb2NhbGUpCisgICAgOiBtX3dlYlZp
ZXdJbXBsKHdlYlZpZXdJbXBsKQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9hcHBs
aWNhdGlvbkxvY2FsZShhcHBsaWNhdGlvbkxvY2FsZSkKKyAgICAsIG1fbG9hZGVkKGZhbHNlKQor
eworICAgIFdlYkZyYW1lSW1wbCogZnJhbWUgPSBtX3dlYlZpZXdJbXBsLT5tYWluRnJhbWVJbXBs
KCk7CisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOworICAgIHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+IGZyYW1lQ29udGV4dCA9IFY4UHJveHk6OmNvbnRleHQoZnJhbWUtPmZyYW1lKCkpOworCisg
ICAgbV9kZWJ1Z2dlckFnZW50T2JqLnNldChuZXcgSlNEZWJ1Z2dlckFnZW50Qm91bmRPYmoodGhp
cywgZnJhbWVDb250ZXh0LCAiUmVtb3RlRGVidWdnZXJBZ2VudCIpKTsKKyAgICBtX3Byb2ZpbGVy
QWdlbnRPYmouc2V0KG5ldyBKU1Byb2ZpbGVyQWdlbnRCb3VuZE9iaih0aGlzLCBmcmFtZUNvbnRl
eHQsICJSZW1vdGVQcm9maWxlckFnZW50IikpOworICAgIG1fdG9vbHNBZ2VudE9iai5zZXQobmV3
IEpTVG9vbHNBZ2VudEJvdW5kT2JqKHRoaXMsIGZyYW1lQ29udGV4dCwgIlJlbW90ZVRvb2xzQWdl
bnQiKSk7CisKKyAgICAvLyBEZWJ1Z2dlciBjb21tYW5kcyBzaG91bGQgYmUgc2VudCB1c2luZyBz
cGVjaWFsIG1ldGhvZC4KKyAgICBCb3VuZE9iamVjdCBkZWJ1Z2dlckNvbW1hbmRFeGVjdXRvck9i
aihmcmFtZUNvbnRleHQsIHRoaXMsICJSZW1vdGVEZWJ1Z2dlckNvbW1hbmRFeGVjdXRvciIpOwor
ICAgIGRlYnVnZ2VyQ29tbWFuZEV4ZWN1dG9yT2JqLmFkZFByb3RvRnVuY3Rpb24oCisgICAgICAg
ICJEZWJ1Z2dlckNvbW1hbmQiLAorICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNE
ZWJ1Z2dlckNvbW1hbmQpOworICAgIGRlYnVnZ2VyQ29tbWFuZEV4ZWN1dG9yT2JqLmFkZFByb3Rv
RnVuY3Rpb24oCisgICAgICAgICJEZWJ1Z2dlclBhdXNlU2NyaXB0IiwKKyAgICAgICAgV2ViRGV2
VG9vbHNGcm9udGVuZEltcGw6OmpzRGVidWdnZXJQYXVzZVNjcmlwdCk7CisgICAgZGVidWdnZXJD
b21tYW5kRXhlY3V0b3JPYmouYnVpbGQoKTsKKworICAgIEJvdW5kT2JqZWN0IGRldlRvb2xzSG9z
dChmcmFtZUNvbnRleHQsIHRoaXMsICJJbnNwZWN0b3JGcm9udGVuZEhvc3QiKTsKKyAgICBkZXZU
b29sc0hvc3QuYWRkUHJvdG9GdW5jdGlvbigKKyAgICAgICAgImxvYWRlZCIsCisgICAgICAgIFdl
YkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0xvYWRlZCk7CisgICAgZGV2VG9vbHNIb3N0LmFkZFBy
b3RvRnVuY3Rpb24oCisgICAgICAgICJwbGF0Zm9ybSIsCisgICAgICAgIFdlYkRldlRvb2xzRnJv
bnRlbmRJbXBsOjpqc1BsYXRmb3JtKTsKKyAgICBkZXZUb29sc0hvc3QuYWRkUHJvdG9GdW5jdGlv
bigKKyAgICAgICAgInBvcnQiLAorICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNQ
b3J0KTsKKyAgICBkZXZUb29sc0hvc3QuYWRkUHJvdG9GdW5jdGlvbigKKyAgICAgICAgImNvcHlU
ZXh0IiwKKyAgICAgICAgV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzQ29weVRleHQpOworICAg
IGRldlRvb2xzSG9zdC5hZGRQcm90b0Z1bmN0aW9uKAorICAgICAgICAiYWN0aXZhdGVXaW5kb3ci
LAorICAgICAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNBY3RpdmF0ZVdpbmRvdyk7Cisg
ICAgZGV2VG9vbHNIb3N0LmFkZFByb3RvRnVuY3Rpb24oCisgICAgICAgICJjbG9zZVdpbmRvdyIs
CisgICAgICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0Nsb3NlV2luZG93KTsKKyAgICBk
ZXZUb29sc0hvc3QuYWRkUHJvdG9GdW5jdGlvbigKKyAgICAgICAgImF0dGFjaCIsCisgICAgICAg
IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0RvY2tXaW5kb3cpOworICAgIGRldlRvb2xzSG9z
dC5hZGRQcm90b0Z1bmN0aW9uKAorICAgICAgICAiZGV0YWNoIiwKKyAgICAgICAgV2ViRGV2VG9v
bHNGcm9udGVuZEltcGw6OmpzVW5kb2NrV2luZG93KTsKKyAgICBkZXZUb29sc0hvc3QuYWRkUHJv
dG9GdW5jdGlvbigKKyAgICAgICAgImxvY2FsaXplZFN0cmluZ3NVUkwiLAorICAgICAgICBXZWJE
ZXZUb29sc0Zyb250ZW5kSW1wbDo6anNMb2NhbGl6ZWRTdHJpbmdzVVJMKTsKKyAgICBkZXZUb29s
c0hvc3QuYWRkUHJvdG9GdW5jdGlvbigKKyAgICAgICAgImhpZGRlblBhbmVscyIsCisgICAgICAg
IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0hpZGRlblBhbmVscyk7CisgICAgZGV2VG9vbHNI
b3N0LmFkZFByb3RvRnVuY3Rpb24oCisgICAgICAgICJzZXR0aW5nIiwKKyAgICAgICAgV2ViRGV2
VG9vbHNGcm9udGVuZEltcGw6OmpzU2V0dGluZyk7CisgICAgZGV2VG9vbHNIb3N0LmFkZFByb3Rv
RnVuY3Rpb24oCisgICAgICAgICJzZXRTZXR0aW5nIiwKKyAgICAgICAgV2ViRGV2VG9vbHNGcm9u
dGVuZEltcGw6OmpzU2V0U2V0dGluZyk7CisgICAgZGV2VG9vbHNIb3N0LmFkZFByb3RvRnVuY3Rp
b24oCisgICAgICAgICJ3aW5kb3dVbmxvYWRpbmciLAorICAgICAgICBXZWJEZXZUb29sc0Zyb250
ZW5kSW1wbDo6anNXaW5kb3dVbmxvYWRpbmcpOworICAgIGRldlRvb2xzSG9zdC5hZGRQcm90b0Z1
bmN0aW9uKAorICAgICAgICAic2hvd0NvbnRleHRNZW51IiwKKyAgICAgICAgV2ViRGV2VG9vbHNG
cm9udGVuZEltcGw6OmpzU2hvd0NvbnRleHRNZW51KTsKKyAgICBkZXZUb29sc0hvc3QuYnVpbGQo
KTsKK30KKworV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6On5XZWJEZXZUb29sc0Zyb250ZW5kSW1w
bCgpCit7CisgICAgaWYgKG1fbWVudVByb3ZpZGVyKQorICAgICAgICBtX21lbnVQcm92aWRlci0+
ZGlzY29ubmVjdCgpOworfQorCit2b2lkIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpkaXNwYXRj
aE1lc3NhZ2VGcm9tQWdlbnQoY29uc3QgV2ViRGV2VG9vbHNNZXNzYWdlRGF0YSYgZGF0YSkKK3sK
KyAgICBWZWN0b3I8U3RyaW5nPiB2OworICAgIHYuYXBwZW5kKGRhdGEuY2xhc3NOYW1lKTsKKyAg
ICB2LmFwcGVuZChkYXRhLm1ldGhvZE5hbWUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
ZGF0YS5hcmd1bWVudHMuc2l6ZSgpOyBpKyspCisgICAgICAgIHYuYXBwZW5kKGRhdGEuYXJndW1l
bnRzW2ldKTsKKyAgICBpZiAoIW1fbG9hZGVkKSB7CisgICAgICAgIG1fcGVuZGluZ0luY29taW5n
TWVzc2FnZXMuYXBwZW5kKHYpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGV4ZWN1dGVT
Y3JpcHQodik7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmV4ZWN1dGVTY3Jp
cHQoY29uc3QgVmVjdG9yPFN0cmluZz4mIHYpCit7CisgICAgV2ViRnJhbWVJbXBsKiBmcmFtZSA9
IG1fd2ViVmlld0ltcGwtPm1haW5GcmFtZUltcGwoKTsKKyAgICB2ODo6SGFuZGxlU2NvcGUgc2Nv
cGU7CisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gZnJhbWVDb250ZXh0ID0gVjhQcm94eTo6
Y29udGV4dChmcmFtZS0+ZnJhbWUoKSk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRT
Y29wZShmcmFtZUNvbnRleHQpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBkaXNwYXRjaEZ1
bmN0aW9uID0gZnJhbWVDb250ZXh0LT5HbG9iYWwoKS0+R2V0KHY4OjpTdHJpbmc6Ok5ldygiZGV2
dG9vbHMkJGRpc3BhdGNoIikpOworICAgIEFTU0VSVChkaXNwYXRjaEZ1bmN0aW9uLT5Jc0Z1bmN0
aW9uKCkpOworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbiA9IHY4OjpIYW5k
bGU8djg6OkZ1bmN0aW9uPjo6Q2FzdChkaXNwYXRjaEZ1bmN0aW9uKTsKKyAgICBWZWN0b3I8IHY4
OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFyZ3M7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2
LnNpemUoKTsgaSsrKQorICAgICAgICBhcmdzLmFwcGVuZChUb1Y4U3RyaW5nKHYuYXQoaSkpKTsK
KyAgICBmdW5jdGlvbi0+Q2FsbChmcmFtZUNvbnRleHQtPkdsb2JhbCgpLCBhcmdzLnNpemUoKSwg
YXJncy5kYXRhKCkpOworfQorCit2b2lkIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpkaXNwYXRj
aE9uV2ViSW5zcGVjdG9yKGNvbnN0IFN0cmluZyYgbWV0aG9kTmFtZSwgY29uc3QgU3RyaW5nJiBw
YXJhbSkKK3sKKyAgICBXZWJGcmFtZUltcGwqIGZyYW1lID0gbV93ZWJWaWV3SW1wbC0+bWFpbkZy
YW1lSW1wbCgpOworICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PiBmcmFtZUNvbnRleHQgPSBWOFByb3h5Ojpjb250ZXh0KGZyYW1lLT5mcmFtZSgp
KTsKKyAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKGZyYW1lQ29udGV4dCk7CisK
KyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2ViSW5zcGVjdG9yID0gZnJhbWVDb250ZXh0LT5H
bG9iYWwoKS0+R2V0KHY4OjpTdHJpbmc6Ok5ldygiV2ViSW5zcGVjdG9yIikpOworICAgIEFTU0VS
VCh3ZWJJbnNwZWN0b3ItPklzT2JqZWN0KCkpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
d2ViSW5zcGVjdG9yT2JqID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh3ZWJJbnNwZWN0
b3IpOworCisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZCA9IHdlYkluc3BlY3Rvck9i
ai0+R2V0KFRvVjhTdHJpbmcobWV0aG9kTmFtZSkpOworICAgIEFTU0VSVChtZXRob2QtPklzRnVu
Y3Rpb24oKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+IG1ldGhvZEZ1bmMgPSB2ODo6
SGFuZGxlPHY4OjpGdW5jdGlvbj46OkNhc3QobWV0aG9kKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gYXJnc1tdID0geworICAgICAgVG9WOFN0cmluZyhwYXJhbSkKKyAgICB9OworICAgIG1l
dGhvZEZ1bmMtPkNhbGwoZnJhbWVDb250ZXh0LT5HbG9iYWwoKSwgMSwgYXJncyk7Cit9CisKK3Zv
aWQgV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OnNlbmRScGNNZXNzYWdlKGNvbnN0IFdlYkRldlRv
b2xzTWVzc2FnZURhdGEmIGRhdGEpCit7CisgICAgbV9jbGllbnQtPnNlbmRNZXNzYWdlVG9BZ2Vu
dChkYXRhKTsKK30KKwordm9pZCBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6Y29udGV4dE1lbnVJ
dGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVJdGVtKiBpdGVtKQoreworICAgIGludCBpdGVtTnVtYmVy
ID0gaXRlbS0+YWN0aW9uKCkgLSBDb250ZXh0TWVudUl0ZW1CYXNlQ3VzdG9tVGFnOworICAgIGRp
c3BhdGNoT25XZWJJbnNwZWN0b3IoImNvbnRleHRNZW51SXRlbVNlbGVjdGVkIiwgU3RyaW5nOjpu
dW1iZXIoaXRlbU51bWJlcikpOworfQorCit2b2lkIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpj
b250ZXh0TWVudUNsZWFyZWQoKQoreworICAgIGRpc3BhdGNoT25XZWJJbnNwZWN0b3IoImNvbnRl
eHRNZW51Q2xlYXJlZCIsICIiKTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRv
b2xzRnJvbnRlbmRJbXBsOjpqc0xvYWRlZChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQorewor
ICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsKiBmcm9udGVuZCA9IHN0YXRpY19jYXN0PFdlYkRl
dlRvb2xzRnJvbnRlbmRJbXBsKj4odjg6OkV4dGVybmFsOjpDYXN0KCphcmdzLkRhdGEoKSktPlZh
bHVlKCkpOworICAgIGZyb250ZW5kLT5tX2xvYWRlZCA9IHRydWU7CisKKyAgICAvLyBHcmFudCB0
aGUgZGV2dG9vbHMgcGFnZSB0aGUgYWJpbGl0eSB0byBoYXZlIHNvdXJjZSB2aWV3IGlmcmFtZXMu
CisgICAgUGFnZSogcGFnZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4
dCgpLT5wYWdlKCk7CisgICAgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IHBhZ2UtPm1haW5GcmFt
ZSgpLT5kb21XaW5kb3coKS0+c2VjdXJpdHlPcmlnaW4oKTsKKyAgICBvcmlnaW4tPmdyYW50VW5p
dmVyc2FsQWNjZXNzKCk7CisKKyAgICBmb3IgKFZlY3RvcjxWZWN0b3I8U3RyaW5nPiA+OjppdGVy
YXRvciBpdCA9IGZyb250ZW5kLT5tX3BlbmRpbmdJbmNvbWluZ01lc3NhZ2VzLmJlZ2luKCk7Cisg
ICAgICAgICBpdCAhPSBmcm9udGVuZC0+bV9wZW5kaW5nSW5jb21pbmdNZXNzYWdlcy5lbmQoKTsK
KyAgICAgICAgICsraXQpIHsKKyAgICAgICAgZnJvbnRlbmQtPmV4ZWN1dGVTY3JpcHQoKml0KTsK
KyAgICB9CisgICAgZnJvbnRlbmQtPm1fcGVuZGluZ0luY29taW5nTWVzc2FnZXMuY2xlYXIoKTsK
KyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCisvLyBzdGF0aWMKK3Y4OjpIYW5kbGU8
djg6OlZhbHVlPiBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNQbGF0Zm9ybShjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQoreworI2lmIGRlZmluZWQoT1NfTUFDT1NYKQorICAgIHJldHVybiB2
OFN0cmluZygibWFjLWxlb3BhcmQiKTsKKyNlbGlmIGRlZmluZWQoT1NfTElOVVgpCisgICAgcmV0
dXJuIHY4U3RyaW5nKCJsaW51eCIpOworI2VsaWYgZGVmaW5lZChPU19GUkVFQlNEKQorICAgIHJl
dHVybiB2OFN0cmluZygiZnJlZWJzZCIpOworI2VsaWYgZGVmaW5lZChPU19PUEVOQlNEKQorICAg
IHJldHVybiB2OFN0cmluZygib3BlbmJzZCIpOworI2VsaWYgZGVmaW5lZChPU19XSU4pCisgICAg
cmV0dXJuIHY4U3RyaW5nKCJ3aW5kb3dzIik7CisjZW5kaWYKK30KKwordjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc1BvcnQoY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJncykKK3sKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCit2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzQ29weVRleHQoY29uc3Qgdjg6
OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBTdHJpbmcgdGV4dCA9IFdlYkNvcmU6OnRvV2ViQ29y
ZVN0cmluZ1dpdGhOdWxsQ2hlY2soYXJnc1swXSk7CisgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBh
c3RlYm9hcmQoKS0+d3JpdGVQbGFpblRleHQodGV4dCk7CisgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBs
Ojpqc0FjdGl2YXRlV2luZG93KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgV2Vi
RGV2VG9vbHNGcm9udGVuZEltcGwqIGZyb250ZW5kID0gc3RhdGljX2Nhc3Q8V2ViRGV2VG9vbHNG
cm9udGVuZEltcGwqPih2ODo6RXh0ZXJuYWw6OkNhc3QoKmFyZ3MuRGF0YSgpKS0+VmFsdWUoKSk7
CisgICAgZnJvbnRlbmQtPm1fY2xpZW50LT5hY3RpdmF0ZVdpbmRvdygpOworICAgIHJldHVybiB2
ODo6VW5kZWZpbmVkKCk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJEZXZUb29sc0Zy
b250ZW5kSW1wbDo6anNDbG9zZVdpbmRvdyhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQorewor
ICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsKiBmcm9udGVuZCA9IHN0YXRpY19jYXN0PFdlYkRl
dlRvb2xzRnJvbnRlbmRJbXBsKj4odjg6OkV4dGVybmFsOjpDYXN0KCphcmdzLkRhdGEoKSktPlZh
bHVlKCkpOworICAgIGZyb250ZW5kLT5tX2NsaWVudC0+Y2xvc2VXaW5kb3coKTsKKyAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9v
bHNGcm9udGVuZEltcGw6OmpzRG9ja1dpbmRvdyhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQor
eworICAgIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsKiBmcm9udGVuZCA9IHN0YXRpY19jYXN0PFdl
YkRldlRvb2xzRnJvbnRlbmRJbXBsKj4odjg6OkV4dGVybmFsOjpDYXN0KCphcmdzLkRhdGEoKSkt
PlZhbHVlKCkpOworICAgIGZyb250ZW5kLT5tX2NsaWVudC0+ZG9ja1dpbmRvdygpOworICAgIHJl
dHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJEZXZU
b29sc0Zyb250ZW5kSW1wbDo6anNVbmRvY2tXaW5kb3coY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKK3sKKyAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbCogZnJvbnRlbmQgPSBzdGF0aWNfY2Fz
dDxXZWJEZXZUb29sc0Zyb250ZW5kSW1wbCo+KHY4OjpFeHRlcm5hbDo6Q2FzdCgqYXJncy5EYXRh
KCkpLT5WYWx1ZSgpKTsKKyAgICBmcm9udGVuZC0+bV9jbGllbnQtPnVuZG9ja1dpbmRvdygpOwor
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBX
ZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNMb2NhbGl6ZWRTdHJpbmdzVVJMKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKwordjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc0hpZGRlblBhbmVs
cyhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiB2OFN0cmluZygiIik7
Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNE
ZWJ1Z2dlckNvbW1hbmQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBXZWJEZXZU
b29sc0Zyb250ZW5kSW1wbCogZnJvbnRlbmQgPSBzdGF0aWNfY2FzdDxXZWJEZXZUb29sc0Zyb250
ZW5kSW1wbCo+KHY4OjpFeHRlcm5hbDo6Q2FzdCgqYXJncy5EYXRhKCkpLT5WYWx1ZSgpKTsKKyAg
ICBXZWJTdHJpbmcgY29tbWFuZCA9IFdlYkNvcmU6OnRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hl
Y2soYXJnc1swXSk7CisgICAgZnJvbnRlbmQtPm1fY2xpZW50LT5zZW5kRGVidWdnZXJDb21tYW5k
VG9BZ2VudChjb21tYW5kKTsKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCit2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzU2V0dGluZyhjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9
CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbDo6anNTZXRT
ZXR0aW5nKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJ
bXBsOjpqc0RlYnVnZ2VyUGF1c2VTY3JpcHQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sK
KyAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbCogZnJvbnRlbmQgPSBzdGF0aWNfY2FzdDxXZWJE
ZXZUb29sc0Zyb250ZW5kSW1wbCo+KHY4OjpFeHRlcm5hbDo6Q2FzdCgqYXJncy5EYXRhKCkpLT5W
YWx1ZSgpKTsKKyAgICBmcm9udGVuZC0+bV9jbGllbnQtPnNlbmREZWJ1Z2dlclBhdXNlU2NyaXB0
KCk7CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFs
dWU+IFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsOjpqc1dpbmRvd1VubG9hZGluZyhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQoreworICAgIC8vIFRPRE8ocGZlbGRtYW4pOiBJbXBsZW1lbnQgdGhp
cy4KKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCit2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gV2ViRGV2VG9vbHNGcm9udGVuZEltcGw6OmpzU2hvd0NvbnRleHRNZW51KGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKQorICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGV2ZW50
V3JhcHBlciA9IHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKTsKKyAgICBpZiAo
VjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZShldmVudFdyYXBwZXIpICE9IFY4Q2xhc3NJbmRl
eDo6RVZFTlQpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBFdmVudCog
ZXZlbnQgPSBWOEV2ZW50Ojp0b05hdGl2ZShldmVudFdyYXBwZXIpOworICAgIGlmICghYXJnc1sx
XS0+SXNBcnJheSgpKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgdjg6
OkxvY2FsPHY4OjpBcnJheT4gYXJyYXkgPSB2ODo6TG9jYWw8djg6OkFycmF5Pjo6Q2FzdChhcmdz
WzFdKTsKKyAgICBWZWN0b3I8Q29udGV4dE1lbnVJdGVtKj4gaXRlbXM7CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGFycmF5LT5MZW5ndGgoKTsgKytpKSB7CisgICAgICAgIHY4OjpMb2Nh
bDx2ODo6T2JqZWN0PiBpdGVtID0gdjg6OkxvY2FsPHY4OjpPYmplY3Q+OjpDYXN0KGFycmF5LT5H
ZXQodjg6OkludGVnZXI6Ok5ldyhpKSkpOworICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBs
YWJlbCA9IGl0ZW0tPkdldCh2ODo6U3RyaW5nOjpOZXcoImxhYmVsIikpOworICAgICAgICB2ODo6
TG9jYWw8djg6OlZhbHVlPiBpZCA9IGl0ZW0tPkdldCh2ODo6U3RyaW5nOjpOZXcoImlkIikpOwor
ICAgICAgICBpZiAobGFiZWwtPklzVW5kZWZpbmVkKCkgfHwgaWQtPklzVW5kZWZpbmVkKCkpIHsK
KyAgICAgICAgICBpdGVtcy5hcHBlbmQobmV3IENvbnRleHRNZW51SXRlbShTZXBhcmF0b3JUeXBl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRNZW51
SXRlbVRhZ05vQWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0cmluZygpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgQ29udGV4dE1lbnVB
Y3Rpb24gdHlwZWRJZCA9IHN0YXRpY19jYXN0PENvbnRleHRNZW51QWN0aW9uPigKKyAgICAgICAg
ICAgICAgQ29udGV4dE1lbnVJdGVtQmFzZUN1c3RvbVRhZyArIGlkLT5Ub0ludDMyKCktPlZhbHVl
KCkpOworICAgICAgICAgIGl0ZW1zLmFwcGVuZChuZXcgQ29udGV4dE1lbnVJdGVtKEFjdGlvblR5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZWRJZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1dlYkNvcmVTdHJp
bmdXaXRoTnVsbENoZWNrKGxhYmVsKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgV2ViRGV2
VG9vbHNGcm9udGVuZEltcGwqIGZyb250ZW5kID0gc3RhdGljX2Nhc3Q8V2ViRGV2VG9vbHNGcm9u
dGVuZEltcGwqPih2ODo6RXh0ZXJuYWw6OkNhc3QoKmFyZ3MuRGF0YSgpKS0+VmFsdWUoKSk7CisK
KyAgICBmcm9udGVuZC0+bV9tZW51UHJvdmlkZXIgPSBNZW51UHJvdmlkZXI6OmNyZWF0ZShmcm9u
dGVuZCwgaXRlbXMpOworCisgICAgQ29udGV4dE1lbnVDb250cm9sbGVyKiBtZW51Q29udHJvbGxl
ciA9IGZyb250ZW5kLT5tX3dlYlZpZXdJbXBsLT5wYWdlKCktPmNvbnRleHRNZW51Q29udHJvbGxl
cigpOworICAgIG1lbnVDb250cm9sbGVyLT5zaG93Q29udGV4dE1lbnUoZXZlbnQsIGZyb250ZW5k
LT5tX21lbnVQcm92aWRlcik7CisKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RGV2VG9vbHNGcm9udGVuZEltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNG
cm9udGVuZEltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmIzNGRh
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Zyb250
ZW5kSW1wbC5oCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJEZXZUb29sc0Zyb250ZW5kSW1w
bF9oCisjZGVmaW5lIFdlYkRldlRvb2xzRnJvbnRlbmRJbXBsX2gKKworI2luY2x1ZGUgIkNvbnRl
eHRNZW51LmgiCisjaW5jbHVkZSAiQ29udGV4dE1lbnVQcm92aWRlci5oIgorI2luY2x1ZGUgIkRl
dlRvb2xzUlBDLmgiCisjaW5jbHVkZSAiV2ViRGV2VG9vbHNGcm9udGVuZC5oIgorI2luY2x1ZGUg
PHY4Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ29u
dGV4dE1lbnVJdGVtOworY2xhc3MgTm9kZTsKK2NsYXNzIFBhZ2U7CitjbGFzcyBTdHJpbmc7Cit9
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBKU0RlYnVnZ2VyQWdlbnRCb3VuZE9iajsK
K2NsYXNzIEpTUHJvZmlsZXJBZ2VudEJvdW5kT2JqOworY2xhc3MgSlNUb29sc0FnZW50Qm91bmRP
Ymo7CitjbGFzcyBXZWJEZXZUb29sc0NsaWVudERlbGVnYXRlOworY2xhc3MgV2ViVmlld0ltcGw7
CitzdHJ1Y3QgV2ViRGV2VG9vbHNNZXNzYWdlRGF0YTsKKworY2xhc3MgV2ViRGV2VG9vbHNGcm9u
dGVuZEltcGwgOiBwdWJsaWMgV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250ZW5kCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBEZXZUb29sc1JQQzo6RGVsZWdhdGUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoK
KyAgICBXZWJEZXZUb29sc0Zyb250ZW5kSW1wbCgKKyAgICAgICAgV2ViS2l0OjpXZWJWaWV3SW1w
bCogd2ViVmlld0ltcGwsCisgICAgICAgIFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZENsaWVu
dCogY2xpZW50LAorICAgICAgICBjb25zdCBTdHJpbmcmIGFwcGxpY2F0aW9uTG9jYWxlKTsKKyAg
ICB2aXJ0dWFsIH5XZWJEZXZUb29sc0Zyb250ZW5kSW1wbCgpOworCisgICAgLy8gRGV2VG9vbHNS
UEM6OkRlbGVnYXRlIGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBzZW5kUnBjTWVz
c2FnZShjb25zdCBXZWJLaXQ6OldlYkRldlRvb2xzTWVzc2FnZURhdGEmIGRhdGEpOworCisgICAg
Ly8gV2ViRGV2VG9vbHNGcm9udGVuZCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hNZXNzYWdlRnJvbUFnZW50KGNvbnN0IFdlYktpdDo6V2ViRGV2VG9vbHNNZXNzYWdl
RGF0YSYgZGF0YSk7CisKK3ByaXZhdGU6CisgICAgY2xhc3MgTWVudVByb3ZpZGVyIDogcHVibGlj
IFdlYkNvcmU6OkNvbnRleHRNZW51UHJvdmlkZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8TWVudVByb3ZpZGVyPiBjcmVhdGUoV2ViRGV2VG9vbHNGcm9udGVuZElt
cGwqIGZyb250ZW5kSG9zdCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbSo+
JiBpdGVtcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZW51
UHJvdmlkZXIoZnJvbnRlbmRIb3N0LCBpdGVtcykpOworICAgICAgICB9CisKKyAgICAgICAgdmly
dHVhbCB+TWVudVByb3ZpZGVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dE1lbnVD
bGVhcmVkKCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGRpc2Nvbm5lY3QoKQorICAgICAg
ICB7CisgICAgICAgICAgICBtX2Zyb250ZW5kSG9zdCA9IDA7CisgICAgICAgIH0KKworICAgICAg
ICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVDb250ZXh0TWVudShXZWJDb3JlOjpDb250ZXh0TWVudSog
bWVudSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2l0
ZW1zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIG1lbnUtPmFwcGVuZEl0ZW0oKm1faXRl
bXNbaV0pOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGNvbnRleHRNZW51SXRl
bVNlbGVjdGVkKFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbSogaXRlbSkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKG1fZnJvbnRlbmRIb3N0KQorICAgICAgICAgICAgICAgIG1fZnJvbnRlbmRI
b3N0LT5jb250ZXh0TWVudUl0ZW1TZWxlY3RlZChpdGVtKTsKKyAgICAgICAgfQorCisgICAgICAg
IHZpcnR1YWwgdm9pZCBjb250ZXh0TWVudUNsZWFyZWQoKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAobV9mcm9udGVuZEhvc3QpCisgICAgICAgICAgICAgICAgbV9mcm9udGVuZEhvc3QtPmNv
bnRleHRNZW51Q2xlYXJlZCgpOworICAgICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKG1faXRlbXMp
OworICAgICAgICAgICAgbV9pdGVtcy5jbGVhcigpOworICAgICAgICB9CisKKyAgICBwcml2YXRl
OgorICAgICAgICBNZW51UHJvdmlkZXIoV2ViRGV2VG9vbHNGcm9udGVuZEltcGwqIGZyb250ZW5k
SG9zdCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbSo+JiBpdGVtcykKKyAg
ICAgICAgICAgIDogbV9mcm9udGVuZEhvc3QoZnJvbnRlbmRIb3N0KQorICAgICAgICAgICAgLCBt
X2l0ZW1zKGl0ZW1zKSB7IH0KKyAgICAgICAgV2ViRGV2VG9vbHNGcm9udGVuZEltcGwqIG1fZnJv
bnRlbmRIb3N0OworICAgICAgICBWZWN0b3I8V2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtKj4gbV9p
dGVtczsKKyAgICB9OworCisgICAgdm9pZCBleGVjdXRlU2NyaXB0KGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiB2KTsKKyAgICB2b2lkIGRpc3BhdGNoT25XZWJJbnNwZWN0b3IoY29uc3QgU3RyaW5nJiBt
ZXRob2QsIGNvbnN0IFN0cmluZyYgcGFyYW0pOworCisgICAgLy8gZnJpZW5kIGNsYXNzIE1lbnVT
ZWxlY3Rpb25IYW5kbGVyOworICAgIHZvaWQgY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoV2ViQ29y
ZTo6Q29udGV4dE1lbnVJdGVtKiBtZW51SXRlbSk7CisgICAgdm9pZCBjb250ZXh0TWVudUNsZWFy
ZWQoKTsKKworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNMb2FkZWQoY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncyk7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBq
c1BsYXRmb3JtKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOworICAgIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4ganNQb3J0KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOworICAgIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNDb3B5VGV4dChjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKTsKKworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNBY3RpdmF0ZVdp
bmRvdyhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGpzQ2xvc2VXaW5kb3coY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7CisgICAg
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0RvY2tXaW5kb3coY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncyk7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc1VuZG9ja1dp
bmRvdyhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGpzTG9jYWxpemVkU3RyaW5nc1VSTChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdz
KTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzSGlkZGVuUGFuZWxzKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
anNEZWJ1Z2dlckNvbW1hbmQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7CisgICAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc1NldHRpbmcoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cyk7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc1NldFNldHRpbmcoY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncyk7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBq
c0RlYnVnZ2VyUGF1c2VTY3JpcHQoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncyk7CisgICAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc1dpbmRvd1VubG9hZGluZyhjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzU2hvd0Nv
bnRleHRNZW51KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpOworCisgICAgV2ViS2l0OjpXZWJW
aWV3SW1wbCogbV93ZWJWaWV3SW1wbDsKKyAgICBXZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRlbmRD
bGllbnQqIG1fY2xpZW50OworICAgIFN0cmluZyBtX2FwcGxpY2F0aW9uTG9jYWxlOworICAgIE93
blB0cjxKU0RlYnVnZ2VyQWdlbnRCb3VuZE9iaj4gbV9kZWJ1Z2dlckFnZW50T2JqOworICAgIE93
blB0cjxKU1Byb2ZpbGVyQWdlbnRCb3VuZE9iaj4gbV9wcm9maWxlckFnZW50T2JqOworICAgIE93
blB0cjxKU1Rvb2xzQWdlbnRCb3VuZE9iaj4gbV90b29sc0FnZW50T2JqOworICAgIGJvb2wgbV9s
b2FkZWQ7CisgICAgVmVjdG9yPFZlY3RvcjxTdHJpbmc+ID4gbV9wZW5kaW5nSW5jb21pbmdNZXNz
YWdlczsKKyAgICBSZWZQdHI8TWVudVByb3ZpZGVyPiBtX21lbnVQcm92aWRlcjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYK
</data>
<flag name="review"
          id="30483"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>