<?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>191121</bug_id>
          
          <creation_ts>2018-10-31 10:43:37 -0700</creation_ts>
          <short_desc>JSC should have a module loader API</short_desc>
          <delta_ts>2019-02-05 12:45:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1473773</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2018-10-31 10:43:37 -0700</bug_when>
    <thetext>JSC should have a module loader API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1473774</commentid>
    <comment_count>1</comment_count>
      <attachid>353502</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2018-10-31 10:44:38 -0700</bug_when>
    <thetext>Created attachment 353502
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1473812</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-10-31 12:05:03 -0700</bug_when>
    <thetext>Attachment 353502 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/testapi.mm:1823:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 1 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476082</commentid>
    <comment_count>3</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2018-11-07 11:23:37 -0800</bug_when>
    <thetext>rdar://problem/31376275</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1482352</commentid>
    <comment_count>4</comment_count>
      <attachid>353502</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2018-11-27 21:20:02 -0800</bug_when>
    <thetext>Comment on attachment 353502
Patch

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

&gt; Source/JavaScriptCore/API/JSAbstractModule.h:33
&gt; +@interface JSAbstractModule : NSObject

I&apos;m not clear on what &quot;Abstract&quot; means here. There is no JSConcreteModule. Maybe this should just be JSModule.

&gt; Source/JavaScriptCore/API/JSAbstractModule.h:36
&gt; ++ (instancetype)moduleWithSource:(NSString *)source andURL:(NSURL *)url inVirtualMachine:(JSVirtualMachine *)vm;

I think we usually leave out &quot;and&quot; and &quot;in&quot; in method names.

&gt; Source/JavaScriptCore/API/JSAbstractModule.h:38
&gt; +// Add more constructors for various ways to build modules e.g. builtin modules.

Not really appropriate for an API header.

&gt; Source/JavaScriptCore/API/JSContext.h:83
&gt; +- (JSValue *)evaluteModule:(JSAbstractModule *);

It&apos;s kind of odd that a module is just a script and a URL, but somehow that&apos;s different from evaulateScript:withSourceURL:.

Maybe evaluateModule should have the same API as evaluateScript, but it returns a module object. Then the JSModule class wouldn&apos;t need to allow you to construct a module directly.

&gt; Source/JavaScriptCore/API/JSVirtualMachine.h:57
&gt; +- (instancetype)initWithModuleLoader:(JSModuleLoaderResolutionCallback)loaderCallback;

It&apos;s usually better for a client like this to be an object. That way, you can add client methods in the future if module loader resolution ever becomes more complicated.

Should we offer a getter/setter for the VM&apos;s module loader resolution callback?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494165</commentid>
    <comment_count>5</comment_count>
      <attachid>359040</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-01-14 09:12:52 -0800</bug_when>
    <thetext>Created attachment 359040
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494167</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-14 09:16:22 -0800</bug_when>
    <thetext>Attachment 359040 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/testapi.mm:1847:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:1861:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/JSScript.mm:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494169</commentid>
    <comment_count>7</comment_count>
      <attachid>359041</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-01-14 09:19:31 -0800</bug_when>
    <thetext>Created attachment 359041
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494170</commentid>
    <comment_count>8</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-14 09:21:44 -0800</bug_when>
    <thetext>Attachment 359041 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/testapi.mm:1847:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:1861:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/JSScript.mm:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494176</commentid>
    <comment_count>9</comment_count>
      <attachid>359044</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-01-14 09:41:55 -0800</bug_when>
    <thetext>Created attachment 359044
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494179</commentid>
    <comment_count>10</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-14 09:45:26 -0800</bug_when>
    <thetext>Attachment 359044 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/testapi.mm:1847:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:1861:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/JSScript.mm:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494185</commentid>
    <comment_count>11</comment_count>
      <attachid>359048</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-01-14 09:59:29 -0800</bug_when>
    <thetext>Created attachment 359048
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494187</commentid>
    <comment_count>12</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-14 10:03:40 -0800</bug_when>
    <thetext>Attachment 359048 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/testapi.mm:1847:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:1861:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/JSScript.mm:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494191</commentid>
    <comment_count>13</comment_count>
      <attachid>359050</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-01-14 10:28:41 -0800</bug_when>
    <thetext>Created attachment 359050
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494192</commentid>
    <comment_count>14</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-14 10:30:22 -0800</bug_when>
    <thetext>Attachment 359050 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/testapi.mm:1847:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:1861:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/JSScript.mm:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494206</commentid>
    <comment_count>15</comment_count>
      <attachid>359053</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-01-14 10:51:48 -0800</bug_when>
    <thetext>Created attachment 359053
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494207</commentid>
    <comment_count>16</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-14 10:54:35 -0800</bug_when>
    <thetext>Attachment 359053 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/testapi.mm:1847:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:1861:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/JSScript.mm:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494208</commentid>
    <comment_count>17</comment_count>
      <attachid>359054</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-01-14 11:04:11 -0800</bug_when>
    <thetext>Created attachment 359054
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494210</commentid>
    <comment_count>18</comment_count>
      <attachid>359050</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-01-14 11:06:30 -0800</bug_when>
    <thetext>Comment on attachment 359050
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        This patch adds a new delegate to JSContxt that is called to fetch

typo JSContext

&gt; Source/JavaScriptCore/API/JSAPIGlobalObject.mm:117
&gt; +    if (!specifier.startsWith(&apos;/&apos;) &amp;&amp; !specifier.startsWith(&quot;./&quot;) &amp;&amp; !specifier.startsWith(&quot;../&quot;))
&gt; +        return reject(createError(exec, &quot;Module specifier does not start with \&quot;/\&quot;, \&quot;./\&quot;, or \&quot;../\&quot;.&quot;_s));

why doesn&apos;t ES Modules allow you to import { Foo } from &quot;Foo.js&quot; without the &quot;./Foo.js&quot;? I think the modules in Node allow this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494211</commentid>
    <comment_count>19</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-14 11:07:13 -0800</bug_when>
    <thetext>Attachment 359054 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/testapi.mm:1847:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:1861:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/JSScript.mm:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494212</commentid>
    <comment_count>20</comment_count>
      <attachid>359054</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2019-01-14 11:13:42 -0800</bug_when>
    <thetext>Comment on attachment 359054
Patch

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

r=me after EWS is green.

&gt; Source/JavaScriptCore/API/JSContextPrivate.h:37
&gt; +/*! @abstract Provides source code for any JS module that is actively imported.

Shouldn&apos;t there be an @method and @abstract on its own line.

&gt; Source/JavaScriptCore/API/JSContextPrivate.h:74
&gt; +/*! @abstract The delegate the context will use when trying to load a module. Note, this delegate will be ignored for contexts returned by UIWebView. */

Shouldn&apos;t @property be above @abstract and both on their own lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494221</commentid>
    <comment_count>21</comment_count>
      <attachid>359050</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-01-14 11:23:17 -0800</bug_when>
    <thetext>Comment on attachment 359050
Patch

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:8
&gt;&gt; +        This patch adds a new delegate to JSContxt that is called to fetch
&gt; 
&gt; typo JSContext

Fixed.

&gt;&gt; Source/JavaScriptCore/API/JSAPIGlobalObject.mm:117
&gt;&gt; +        return reject(createError(exec, &quot;Module specifier does not start with \&quot;/\&quot;, \&quot;./\&quot;, or \&quot;../\&quot;.&quot;_s));
&gt; 
&gt; why doesn&apos;t ES Modules allow you to import { Foo } from &quot;Foo.js&quot; without the &quot;./Foo.js&quot;? I think the modules in Node allow this.

I don&apos;t think it&apos;s an ES Modules thing. The ES spec lets you do whatever you want with your specifier/importer pair. The web makes this restriction for future proofing. 

As far as node goes. it seems like import &quot;foo.js&quot; will never resolve whereas import &quot;./foo.js&quot; seems to work. Maybe I&apos;m doing it wrong though...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494227</commentid>
    <comment_count>22</comment_count>
      <attachid>359058</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-01-14 11:34:23 -0800</bug_when>
    <thetext>Created attachment 359058
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494229</commentid>
    <comment_count>23</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-14 11:37:35 -0800</bug_when>
    <thetext>Attachment 359058 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/testapi.mm:1847:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:1861:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/JSScript.mm:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 28 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494232</commentid>
    <comment_count>24</comment_count>
      <attachid>359060</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-01-14 11:42:46 -0800</bug_when>
    <thetext>Created attachment 359060
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494234</commentid>
    <comment_count>25</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-14 11:46:10 -0800</bug_when>
    <thetext>Attachment 359060 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/testapi.mm:1847:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:1861:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/API/JSScript.mm:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494248</commentid>
    <comment_count>26</comment_count>
      <attachid>359054</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-01-14 12:23:07 -0800</bug_when>
    <thetext>Comment on attachment 359054
Patch

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

&gt;&gt; Source/JavaScriptCore/API/JSContextPrivate.h:37
&gt;&gt; +/*! @abstract Provides source code for any JS module that is actively imported.
&gt; 
&gt; Shouldn&apos;t there be an @method and @abstract on its own line.

I don&apos;t think so. At least that&apos;s not what we do in WKWebView&apos;s delegate protocols.

&gt;&gt; Source/JavaScriptCore/API/JSContextPrivate.h:74
&gt;&gt; +/*! @abstract The delegate the context will use when trying to load a module. Note, this delegate will be ignored for contexts returned by UIWebView. */
&gt; 
&gt; Shouldn&apos;t @property be above @abstract and both on their own lines.

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494250</commentid>
    <comment_count>27</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-01-14 12:27:29 -0800</bug_when>
    <thetext>Committed r239933: &lt;https://trac.webkit.org/changeset/239933&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1495008</commentid>
    <comment_count>28</comment_count>
      <attachid>359060</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-01-15 20:58:26 -0800</bug_when>
    <thetext>Comment on attachment 359060
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        any resolved module. The resolution of a module identifier is computed
&gt; +        as if it were a URL on the web with the caveat that it must be a file URL.

Why limit to file URLs? Seems like we should be able to resolve HTTP URLs too, and clients might want that.

&gt; Source/JavaScriptCore/API/JSAPIGlobalObject.mm:125
&gt; +    if (specifier.startsWith(&apos;/&apos;)) {
&gt; +        absoluteURL = URL(URL({ }, &quot;file://&quot;), specifier);
&gt; +        if (absoluteURL.isValid())
&gt; +            return import(absoluteURL);
&gt; +    }

Seems like you should just use the sourceOrigin here instead of forcing file://. Client apps may host modules on the web.

&gt; Source/JavaScriptCore/API/JSContextPrivate.h:50
&gt; +- (void)context:(JSContext *)context fetchModuleForIdentifier:(JSValue *)identifier withResolveHandler:(JSValue *)resolve andRejectHandler:(JSValue *)reject;

Delegate APIs usually supply blocks for callbacks, rather than JSValues. That&apos;s a more familiar syntax for Swift and Objective-C programmers. 

Relatedly, why is the module identifier a JSValue instead of a URL?

Has anybody specifically requested the ability to inspect a resolve handler, a reject handler, or a module identifier as a JavaScript value? What benefit would that provide? In addition to fitting in with the platform better overall, platform data types come with their own documentation, and don&apos;t require an explanation. NSURL * is self-documenting. JSValue * with three lines of text is a headache. I would find this API much easier to understand and use if it just passed me an NSURL * or NSString * and two blocks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1497898</commentid>
    <comment_count>29</comment_count>
      <attachid>359060</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2019-01-24 11:37:36 -0800</bug_when>
    <thetext>Comment on attachment 359060
Patch

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

&gt;&gt; Source/JavaScriptCore/API/JSAPIGlobalObject.mm:125
&gt;&gt; +    }
&gt; 
&gt; Seems like you should just use the sourceOrigin here instead of forcing file://. Client apps may host modules on the web.

SourceOrigin may be null. In that case it&apos;s not clear what URI to use. In theory we could make this not

&gt;&gt; Source/JavaScriptCore/API/JSContextPrivate.h:50
&gt;&gt; +- (void)context:(JSContext *)context fetchModuleForIdentifier:(JSValue *)identifier withResolveHandler:(JSValue *)resolve andRejectHandler:(JSValue *)reject;
&gt; 
&gt; Delegate APIs usually supply blocks for callbacks, rather than JSValues. That&apos;s a more familiar syntax for Swift and Objective-C programmers. 
&gt; 
&gt; Relatedly, why is the module identifier a JSValue instead of a URL?
&gt; 
&gt; Has anybody specifically requested the ability to inspect a resolve handler, a reject handler, or a module identifier as a JavaScript value? What benefit would that provide? In addition to fitting in with the platform better overall, platform data types come with their own documentation, and don&apos;t require an explanation. NSURL * is self-documenting. JSValue * with three lines of text is a headache. I would find this API much easier to understand and use if it just passed me an NSURL * or NSString * and two blocks.

I made it a JSValue callback to make it explicit that it will re-enter the VM per our discussion.

The identifier is a JSValue rather an a URL as it&apos;s significantly more future proof. If, for example builtin modules become a thing, we need some way to pass that onto the fetcher -- for polyfilling. There is also nothing in the JS language that restricts identifiers from extending beyond strings. In which case, we&apos;d be in the awkward situation of having to add a second delegate that handles that case. Given that module loading is still heavy active in every committee (TC-39, W3C, Node) that&apos;s a real risk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502476</commentid>
    <comment_count>30</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-02-05 12:45:21 -0800</bug_when>
    <thetext>&gt; &gt; Seems like you should just use the sourceOrigin here instead of forcing file://. Client apps may host modules on the web.
&gt; 
&gt; SourceOrigin may be null. In that case it&apos;s not clear what URI to use. In
&gt; theory we could make this not

We can check for null.

More broadly, if someone imports an absolute or relative path relative to an invalid host, scheme, or port, I recommend that we try our best to resolve relative to the host, scheme, and port specified by our client, and from their, it&apos;s their job to handle the resulting URL, or fail the module load.

At the limit, if we know for certain that the resulting URL is invalid, we can keep your current behavior to fail eagerly -- or, if you like, we can send the invalid URL to our client and let them sort it out.

&gt; &gt;&gt; Source/JavaScriptCore/API/JSContextPrivate.h:50
&gt; &gt;&gt; +- (void)context:(JSContext *)context fetchModuleForIdentifier:(JSValue *)identifier withResolveHandler:(JSValue *)resolve andRejectHandler:(JSValue *)reject;
&gt; &gt; 
&gt; &gt; Delegate APIs usually supply blocks for callbacks, rather than JSValues. That&apos;s a more familiar syntax for Swift and Objective-C programmers. 
&gt; &gt; 
&gt; &gt; Relatedly, why is the module identifier a JSValue instead of a URL?
&gt; &gt; 
&gt; &gt; Has anybody specifically requested the ability to inspect a resolve handler, a reject handler, or a module identifier as a JavaScript value? What benefit would that provide? In addition to fitting in with the platform better overall, platform data types come with their own documentation, and don&apos;t require an explanation. NSURL * is self-documenting. JSValue * with three lines of text is a headache. I would find this API much easier to understand and use if it just passed me an NSURL * or NSString * and two blocks.
&gt; 
&gt; I made it a JSValue callback to make it explicit that it will re-enter the
&gt; VM per our discussion.

It&apos;s usually understood, in delegate APIs, that once the delegate returns, or invokes a provided callback, the framework will then continue executing code.

Also, I don&apos;t think &quot;JSValue&quot; means &quot;JavaScriptCore has an internal locking strategy&quot;. I think that&apos;s just JavaScriptCore&apos;s behavior for all its APIs, JSValue or not.

So, I think this should be a block.

You could convince me otherwise by citing a prominent example of a JavaScript app that is somehow hamstrung by a block.

&gt; The identifier is a JSValue rather an a URL as it&apos;s significantly more
&gt; future proof. If, for example builtin modules become a thing, we need some
&gt; way to pass that onto the fetcher -- for polyfilling. There is also nothing
&gt; in the JS language that restricts identifiers from extending beyond strings.
&gt; In which case, we&apos;d be in the awkward situation of having to add a second
&gt; delegate that handles that case. Given that module loading is still heavy
&gt; active in every committee (TC-39, W3C, Node) that&apos;s a real risk.

Though the ECMA specification has some weirdness in it, that&apos;s not how people experience the programming language. We&apos;re trying to create an environment that papers over the weirdness of the specification and provides the Javascript programming environment in a way that&apos;s easy to use right by default, and hard to use wrong.

So, I think we should use URL here.

You could convince me otherwise by citing a prominent example of a JavaScript app that is somehow hamstrung by a URL.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>353502</attachid>
            <date>2018-10-31 10:44:38 -0700</date>
            <delta_ts>2019-01-14 09:12:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191121-20181031104433.patch</filename>
            <type>text/plain</type>
            <size>18757</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3Mjc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MTk4OWJkZWNiYjUyNDBhYTA4ZmU3M2EzOTRkNTRiYmM0NDhjOTU4Li44YTRhOGQxNjIxOWI5YjE3
M2EyZWJjNTFkYjhiOWZiMzM2MzA0NDBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMSBAQAorMjAxOC0xMC0zMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBKU0Mgc2hvdWxkIGhhdmUgYSBtb2R1bGUgbG9hZGVyIEFQSQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMTIxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBUEkvSlNBYnN0
cmFjdE1vZHVsZS5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvSlNDb250ZXh0Lmg6CisgICAgICAg
ICogQVBJL0pTQ29udGV4dC5tbToKKyAgICAgICAgKC1bSlNDb250ZXh0IGV2YWx1YXRlTW9kdWxl
Ol0pOgorICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lLmg6CisgICAgICAgICogQVBJL0pT
VmlydHVhbE1hY2hpbmUubW06CisgICAgICAgICgtW0pTVmlydHVhbE1hY2hpbmUgaW5pdFdpdGhN
b2R1bGVMb2FkZXI6XSk6CisgICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAgICAg
ICh0ZXN0T2JqZWN0aXZlQ0FQSSk6IERlbGV0ZWQuCisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0Ogor
ICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0ds
b2JhbE9iamVjdDo6bW9kdWxlTG9hZGVySW1wb3J0TW9kdWxlKToKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUpOgorICAgICAgICAoSlNDOjpKU0dsb2Jh
bE9iamVjdDo6bW9kdWxlTG9hZGVyRmV0Y2gpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVj
dDo6bW9kdWxlTG9hZGVyQ3JlYXRlSW1wb3J0TWV0YVByb3BlcnRpZXMpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAg
IChKU0M6OlZNOjpzZXRNb2R1bGVMb2FkZXJDYWxsYmFjayk6CisgICAgICAgIChKU0M6OlZNOjpn
ZXRNb2R1bGVMb2FkZXJDYWxsYmFjayBjb25zdCk6CisKIDIwMTgtMTAtMTggIEFsZXhleSBQcm9z
a3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgU3dpdGNoIGZyb20gUExBVEZPUk0o
SU9TKSB0byBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0Fic3RyYWN0TW9kdWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQWJzdHJhY3RNb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNzAxNzEyYTQyYzI2Yjk3MzkyYjlhMWI0
MjI3ZTA3NDQwMzI5ZWYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0Fic3RyYWN0TW9kdWxlLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pT
VmFsdWUuaD4KKworI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECisKK05TX0FTU1VNRV9OT05OVUxM
X0JFR0lOCisKK0pTQ19BUElfQVZBSUxBQkxFKEpTQ19NQUNfVEJBLCBKU0NfSU9TX1RCQSkKK0Bp
bnRlcmZhY2UgSlNBYnN0cmFjdE1vZHVsZSA6IE5TT2JqZWN0CisKKy8vIENyZWF0ZSBhIG1vZHVs
ZSB3aXRoIGZyb20gc29tZSBzb3VyY2UuCisrIChpbnN0YW5jZXR5cGUpbW9kdWxlV2l0aFNvdXJj
ZTooTlNTdHJpbmcgKilzb3VyY2UgYW5kVVJMOihOU1VSTCAqKXVybCBpblZpcnR1YWxNYWNoaW5l
OihKU1ZpcnR1YWxNYWNoaW5lICopdm07CisKKy8vIEFkZCBtb3JlIGNvbnN0cnVjdG9ycyBmb3Ig
dmFyaW91cyB3YXlzIHRvIGJ1aWxkIG1vZHVsZXMgZS5nLiBidWlsdGluIG1vZHVsZXMuCisKK0Bl
bmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECisKKyNlbmRpZiAvLyBKU0NfT0JKQ19BUElfRU5B
QkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0LmgKaW5kZXggODljODdmOWUyZTFm
ZjFiMTcxYjFlYmJhOGM0NTIxNTlmNDRmNDc1YS4uY2Q4Zjc0ZjQyMzRlMWE3ZWIxOWU2YTdlMGRj
ODBjNTk1NjAyOWEzMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nv
bnRleHQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5oCkBAIC04
MCw2ICs4MCw4IEBAIE5TX0NMQVNTX0FWQUlMQUJMRSgxMF85LCA3XzApCiAqLwogLSAoSlNWYWx1
ZSAqKWV2YWx1YXRlU2NyaXB0OihOU1N0cmluZyAqKXNjcmlwdCB3aXRoU291cmNlVVJMOihOU1VS
TCAqKXNvdXJjZVVSTCBKU0NfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTApLCBpb3MoOC4wKSk7
CiAKKy0gKEpTVmFsdWUgKilldmFsdXRlTW9kdWxlOihKU0Fic3RyYWN0TW9kdWxlICopOworCiAv
KiEKIEBtZXRob2Rncm91cCBDYWxsYmFjayBBY2Nlc3NvcnMKICovCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDb250ZXh0Lm1tCmluZGV4IDI3NTY2ZjQxYjk3ZTFiMzliZGRlOWI0OGFhYTU1OWYx
NGNiNzM5ZWEuLmJkMDgwOTI5MTc5YzNlOTAxNDg1YjQ3NGFmZDE4ZGMxOWE3ZjE4ZmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCkBAIC0xMTAsNiArMTEwLDEzIEBACiAg
ICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6cmVzdWx0IGluQ29udGV4dDpz
ZWxmXTsKIH0KIAorLSAoSlNWYWx1ZSAqKWV2YWx1YXRlTW9kdWxlOihKU0Fic3RyYWN0TW9kdWxl
ICopbW9kdWxlCit7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKG1fY29udGV4dCk7
CisgICAgbG9hZEFuZEV2YWx1YXRlTW9kdWxlKGV4ZWMsICkKKyAgICByZXR1cm4gbmlsOworfQor
CiAtICh2b2lkKXNldEV4Y2VwdGlvbjooSlNWYWx1ZSAqKXZhbHVlCiB7CiAgICAgSlNDOjpFeGVj
U3RhdGUqIGV4ZWMgPSB0b0pTKG1fY29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWaXJ0dWFsTWFjaGluZS5oCmluZGV4IGU5Yzc1ZGEwNzcyYzU1NDQwMTlhNGFjZGY0Yzkw
NTVjNGNlZjQ0N2MuLmQ5YTQ4NzJjNDA3ZmRiZGIzZDIxMTU3MzhmNDQyMTZmYTAzYTVlZGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5oCkBAIC0yNyw2
ICsyNyw4IEBACiAKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogCitAY2xhc3MgSlNBYnN0cmFj
dE1vZHVsZSwgSlNDb250ZXh0LCBKU1ZhbHVlOworCiAvKiEKIEBpbnRlcmZhY2UKIEBkaXNjdXNz
aW9uIEFuIGluc3RhbmNlIG9mIEpTVmlydHVhbE1hY2hpbmUgcmVwcmVzZW50cyBhIHNpbmdsZSBK
YXZhU2NyaXB0ICJvYmplY3Qgc3BhY2UiCkBAIC01MSw2ICs1Myw5IEBAIE5TX0NMQVNTX0FWQUlM
QUJMRSgxMF85LCA3XzApCiAqLwogLSAoaW5zdGFuY2V0eXBlKWluaXQ7CiAKK3R5cGVkZWYgdm9p
ZCAoXkpTTW9kdWxlTG9hZGVyUmVzb2x1dGlvbkNhbGxiYWNrKShKU0NvbnRleHQgKnJlZmVyZW5j
aW5nQ29udGV4dCwgSlNBYnN0cmFjdE1vZHVsZSAqcmVmZXJyaW5nQWJzdHJhY3RNb2R1bGUsIE5T
U3RyaW5nICppZGVudGlmaWVyLCBKU1ZhbHVlICpyZXNsb3ZlLCBKU1ZhbHVlICpyZWplY3QpOwor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTW9kdWxlTG9hZGVyOihKU01vZHVsZUxvYWRlclJlc29s
dXRpb25DYWxsYmFjaylsb2FkZXJDYWxsYmFjazsKKwogLyohCiBAbWV0aG9kZ3JvdXAgTWVtb3J5
IE1hbmFnZW1lbnQKICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
VmlydHVhbE1hY2hpbmUubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1h
Y2hpbmUubW0KaW5kZXggZDBjM2M2MDNhODE0YTljNDhjZDExZDhhODIyOTBhMmQ1OWE3OWNjNy4u
NjczNTVkZTFjNDNlNjVkOGViYTgwNTM3ZjgwNTdmZjY3NWNkM2Q4NyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZS5tbQpAQCAtMTIzLDYgKzEyMywxNCBA
QCBzdGF0aWMgTlNNYXBUYWJsZSAqd3JhcHBlckNhY2hlKCkKICAgICByZXR1cm4gc2VsZjsKIH0K
IAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTW9kdWxlTG9hZGVyOihKU01vZHVsZUxvYWRlclJl
c29sdXRpb25DYWxsYmFjaylsb2FkZXJDYWxsYmFjaworeworICAgIHNlbGYgPSBbc2VsZiBpbml0
XTsKKyAgICB0b0pTKG1fZ3JvdXApLT5zZXRNb2R1bGVMb2FkZXJDYWxsYmFjayhyZWludGVycHJl
dF9jYXN0PEpTQzo6Vk06Ok1vZHVsZUxvYWRlckNhbGxiYWNrPihsb2FkZXJDYWxsYmFjaykpOwor
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKIC0gKHZvaWQpZGVhbGxvYwogewogICAgIEpTQ29udGV4
dEdyb3VwUmVsZWFzZShtX2dyb3VwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvdGVzdHMvdGVzdGFwaS5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMv
dGVzdGFwaS5tbQppbmRleCAzN2UxMzg1YzhjNDg0ZWZhZThhOWMzZjkyZTEzNWNhNzNmOTU5MTky
Li5hN2YyNzBhNmY5NDA4YTA4ODMwMWI0OWNlMDM2YTFmZTRjYmZhMGExIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0KKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCkBAIC0xODEyLDEyICsxODEyLDI2IEBA
IHN0YXRpYyB2b2lkIHBhcmFsbGVsUHJvbWlzZVJlc29sdmVUZXN0KCkKICAgICB9CiB9CiAKK3N0
YXRpYyB2b2lkIG1vZHVsZUxvYWRlcigpCit7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAg
ICAgIEpTVmlydHVhbE1hY2hpbmUgKnZtID0gW1tKU1ZpcnR1YWxNYWNoaW5lIGFsbG9jXSBpbml0
V2l0aE1vZHVsZUxvYWRlcjpeKEpTQ29udGV4dCAqcmVmZXJlbmNpbmdDb250ZXh0LCBKU0Fic3Ry
YWN0TW9kdWxlICpyZWZlcnJpbmdBYnN0cmFjdE1vZHVsZSwgTlNTdHJpbmcgKmlkZW50aWZpZXIs
IEpTVmFsdWUgKnJlc2xvdmUsIEpTVmFsdWUgKnJlamVjdCkgeworICAgICAgICAgICAgY2hlY2tS
ZXN1bHQoQCJ5YXkhIiwgZmFsc2UpOworICAgICAgICB9XTsKKyAgICAgICAgSlNDb250ZXh0ICpj
b250ZXh0ID0gW1tKU0NvbnRleHQgYWxsb2NdIGluaXRXaXRoVmlydHVhbE1hY2hpbmU6dm1dOwor
CisgICAgeworICAgIH0KK30KKworCiB2b2lkIHRlc3RPYmplY3RpdmVDQVBJKCkKIHsKICAgICBO
U0xvZyhAIlRlc3RpbmcgT2JqZWN0aXZlLUMgQVBJIik7CiAgICAgY2hlY2tOZWdhdGl2ZU5TSW50
ZWdlcnMoKTsKICAgICBydW5KSVRUaHJlYWRMaW1pdFRlc3RzKCk7CiAKKwogICAgIHByb21pc2VX
aXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6UmVzb2x2ZUVhZ2VyKTsKICAgICBwcm9taXNlV2l0aEV4
ZWN1dG9yKFJlc29sdXRpb246OlJlamVjdEVhZ2VyKTsKICAgICBwcm9taXNlV2l0aEV4ZWN1dG9y
KFJlc29sdXRpb246OlJlc29sdmVMYXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggYTYwZDY3MTQwNjZjZGZhZTdjOTllYzJjNjYwNDc1ZjdmMGZiMzk5OC4uZmM1N2IwODc5ZDdj
MjNhMTIwNGYxOWNiNzhiM2NmYjU4YWVkYThiOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTEwNDksNiArMTA0OSw3IEBACiAJCTUzODFCOTM5MUU2MEU5N0QwMDkwRjc5NCAvKiBX
YXNtRmF1bHRTaWduYWxIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MzgxQjkzODFFNjBFOTdEMDA5MEY3OTQgLyogV2FzbUZhdWx0U2lnbmFs
SGFuZGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTUzOTE3RTdCMUI3OTA2RkEwMDBFQkQzMyAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTM5MTdFN0ExQjc5MDZFNDAwMEVCRDMzIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlRnVuY3Rpb25zLmggKi87IH07CiAJCTUzOUZCOEJBMUM5OURBN0MwMDk0MEZB
MSAvKiBKU0FycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmgg
Ki87IH07CisJCTUzQUIyRkNBMjE3OTU0MjQwMDc4QTNCQiAvKiBKU0Fic3RyYWN0TW9kdWxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0FCMkZDOTIx
Nzk1NDI0MDA3OEEzQkIgLyogSlNBYnN0cmFjdE1vZHVsZS5oICovOyB9OwogCQk1M0I0QkQxMjFG
NjhCMzI1MDBEMkJFQTMgLyogV2FzbU9wcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTMzQjE1REUxREM3RjQ2MzAwNEQ1MDBBIC8qIFdhc21PcHMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0I2MDFF
QzIwMzRCOEM1MDA2QkU2NjcgLyogSlNDYXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0I2MDFFQjIwMzRCOEM1MDA2QkU2NjcgLyogSlNDYXN0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTNDNkZF
RUYxRThBREZBOTAwQjE4NDI1IC8qIFdhc21PcGNvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzQzZGRUVFMUU4QURGQTkwMEIxODQyNSAv
KiBXYXNtT3Bjb2RlT3JpZ2luLmggKi87IH07CkBAIC0zNTMyLDYgKzM1MzMsOCBAQAogCQk1Mzkx
N0U3QzFCNzkxMTA2MDAwRUJEMzMgLyogSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOTE3RTgzMUI3OTFDQjgwMDBFQkQzMyAv
KiBUeXBlZEFycmF5UHJvdG90eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0
OyBuYW1lID0gVHlwZWRBcnJheVByb3RvdHlwZS5qczsgcGF0aCA9IGJ1aWx0aW5zL1R5cGVkQXJy
YXlQcm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJNTM5RkI4Qjkx
Qzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTQXJyYXlJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUzQUIyRkM5MjE3OTU0MjQwMDc4QTNCQiAvKiBKU0Fic3RyYWN0TW9kdWxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTQWJzdHJhY3RNb2R1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTNBQjJGQ0IyMTc5NTYxODAwNzhBM0JCIC8qIEpTQWJzdHJhY3RNb2R1bGUubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBKU0Fic3RyYWN0TW9kdWxlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1M0IwQkUzMzFFNTYxQUM5MDBBOEZDMjkgLyogR2V0dGVyU2V0dGVyQWNjZXNz
Q2FzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZXR0ZXJTZXR0
ZXJBY2Nlc3NDYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNCMEJFMzUx
RTU2MUIwOTAwQThGQzI5IC8qIFByb3h5YWJsZUFjY2Vzc0Nhc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzQjBCRTM3MUU1NjFCMjQwMEE4RkMyOSAvKiBJbnRyaW5z
aWNHZXR0ZXJBY2Nlc3NDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNTkwOCw2ICs1OTExLDggQEAKIAkJCQk1MzUyOUE0QjFDNDU3Qjc1MDAwQjQ5QzYg
LyogQVBJVXRpbHMuaCAqLywKIAkJCQkxQ0FBOEI0QTBEMzJDMzlBMDA0MUJDRkYgLyogSmF2YVNj
cmlwdC5oICovLAogCQkJCTFDQUE4QjRCMEQzMkMzOUEwMDQxQkNGRiAvKiBKYXZhU2NyaXB0Q29y
ZS5oICovLAorCQkJCTUzQUIyRkM5MjE3OTU0MjQwMDc4QTNCQiAvKiBKU0Fic3RyYWN0TW9kdWxl
LmggKi8sCisJCQkJNTNBQjJGQ0IyMTc5NTYxODAwNzhBM0JCIC8qIEpTQWJzdHJhY3RNb2R1bGUu
bW0gKi8sCiAJCQkJQkMwODk0RDUwRkFGQkEyRDAwMDAxODY1IC8qIEpTQVBJVmFsdWVXcmFwcGVy
LmNwcCAqLywKIAkJCQlCQzA4OTRENjBGQUZCQTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBw
ZXIuaCAqLywKIAkJCQlDMkNGMzlDMDE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2Jq
ZWN0LmggKi8sCkBAIC05MTAzLDYgKzkxMDgsNyBAQAogCQkJCTBGNUVGOTFGMTY4NzhGN0QwMDNF
NUMyNSAvKiBKSVRUaHVua3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzcxMkUzMTdDRDg3OTMw
MDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJREMwMTg0MTkxRDEwQzE4OTAwNTdCMDUzIC8qIEpJVFdvcmtsaXN0LmggaW4g
SGVhZGVycyAqLywKKwkJCQk1M0FCMkZDQTIxNzk1NDI0MDA3OEEzQkIgLyogSlNBYnN0cmFjdE1v
ZHVsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQwNDgwMTMxMDIxQTFEOTAwOEU3RjAxIC8qIEpT
QVBJVmFsdWVXcmFwcGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkNGMzlDMjE2RTE1QTgxMDBE
RDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQx
NzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNBcnJheS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGFjZjRmZGIwMTZkODg1NzA4YTQzMDA5MDQ4
MDlhMjk1YzU1MGRhOGUuLjU3OWNlYWVjMDg4MGRhODhlODQ3OGE4NzI1NGVjNTVjMzlhZWExNTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0yMiw2ICsyMiw3IEBA
CiAvLyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIEFQSS9KU0FQSVdyYXBwZXJP
YmplY3QubW0KK0FQSS9KU0Fic3RyYWN0TW9kdWxlLm1tCiBBUEkvSlNDb250ZXh0Lm1tCiBBUEkv
SlNNYW5hZ2VkVmFsdWUubW0KIEFQSS9KU1JlbW90ZUluc3BlY3Rvci5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCA3YmNlYWYy
ZTBkZDE1OTdjNzg4NmEwMzczMjZiZDlhYTY5ZTgzZDk1Li40MjQyYzAwMGQ1OTcwOTZkNDdkMzBi
OTY1MGI2ZjhmMzEyNTAyYTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSAiRXJyb3Iu
aCIKICNpbmNsdWRlICJFcnJvckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiRXJyb3JQcm90b3R5
cGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0cnVj
dG9yLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJHZW5lcmF0
b3JGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCkBAIC05Nyw2ICs5OCw3IEBACiAjaW5jbHVkZSAiSlNH
bG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJKU0ludGVybmFsUHJvbWlzZS5oIgog
I2luY2x1ZGUgIkpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU0lu
dGVybmFsUHJvbWlzZURlZmVycmVkLmgiCiAjaW5jbHVkZSAiSlNJbnRlcm5hbFByb21pc2VQcm90
b3R5cGUuaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIkpT
TG9jay5oIgpAQCAtMTYzNSw2ICsxNjM3LDg3IEBAIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgSlNH
bG9iYWxPYmplY3Q6OmludGxQbHVyYWxSdWxlc0F2YWlsYWJsZUxvY2FsZXMoKQogfQogI2VuZGlm
IC8vIEVOQUJMRShJTlRMKQogCitKU0ludGVybmFsUHJvbWlzZSogSlNHbG9iYWxPYmplY3Q6Om1v
ZHVsZUxvYWRlckltcG9ydE1vZHVsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFeGVj
U3RhdGUqIGV4ZWMsIEpTTW9kdWxlTG9hZGVyKiwgSlNTdHJpbmcqIG1vZHVsZU5hbWVWYWx1ZSwg
SlNWYWx1ZSBwYXJhbWV0ZXJzLCBjb25zdCBTb3VyY2VPcmlnaW4mIHNvdXJjZU9yaWdpbikKK3sK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgYXV0byByZWplY3RQcm9taXNlID0gWyZdIChKU1Zh
bHVlIGVycm9yKSB7CisgICAgICAgIHJldHVybiBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkOjpj
cmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KS0+cmVqZWN0KGV4ZWMsIGVycm9yKTsKKyAgICB9Owor
CisgICAgaWYgKHNvdXJjZU9yaWdpbi5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHJlamVjdFBy
b21pc2UoY3JlYXRlRXJyb3IoZXhlYywgIkNvdWxkIG5vdCByZXNvbHZlIHRoZSBtb2R1bGUgc3Bl
Y2lmaWVyLiJfcykpOworCisgICAgYXV0byByZWZlcnJlciA9IHNvdXJjZU9yaWdpbi5zdHJpbmco
KTsKKyAgICBhdXRvIG1vZHVsZU5hbWUgPSBtb2R1bGVOYW1lVmFsdWUtPnZhbHVlKGV4ZWMpOwor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgSlNWYWx1ZSBl
eGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKKyAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2UoZXhjZXB0aW9uKTsKKyAgICB9CisK
KyAgICBkYXRhTG9nTG4ocmVmZXJyZXIpOworICAgIGRhdGFMb2dMbihwYXJhbWV0ZXJzKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQor
CitJZGVudGlmaWVyIEpTR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJSZXNvbHZlKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgSlNNb2R1bGVMb2FkZXIqLCBK
U1ZhbHVlIGtleVZhbHVlLCBKU1ZhbHVlIHJlZmVycmVyVmFsdWUsIEpTVmFsdWUpCit7CisgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKworICAgIHNjb3BlLnJlbGVhc2VBc3NlcnROb0V4Y2VwdGlvbigpOwor
ICAgIGNvbnN0IElkZW50aWZpZXIga2V5ID0ga2V5VmFsdWUudG9Qcm9wZXJ0eUtleShleGVjKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgaWYgKGtleS5pc1N5
bWJvbCgpKQorICAgICAgICByZXR1cm4ga2V5OworCisgICAgUkVMRUFTRV9BU1NFUlQoIXJlZmVy
cmVyVmFsdWUuaXNVbmRlZmluZWQoKSk7CisKKyAgICBjb25zdCBJZGVudGlmaWVyIHJlZmVycmVy
ID0gcmVmZXJyZXJWYWx1ZS50b1Byb3BlcnR5S2V5KGV4ZWMpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXJlZmVycmVyLmlzU3ltYm9s
KCkpOworCisKKworICAgIC8vIFRPRE86IENhbGwgbG9hZGVyIGNhbGxiYWNrIGhlcmUuLi4KKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBJZGVudGlmaWVyKCk7
Cit9CisKK0pTSW50ZXJuYWxQcm9taXNlKiBKU0dsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyRmV0
Y2goSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU01vZHVs
ZUxvYWRlciosIEpTVmFsdWUga2V5LCBKU1ZhbHVlLCBKU1ZhbHVlKQoreworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09Q
RSh2bSk7CisgICAgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBKU0ludGVy
bmFsUHJvbWlzZURlZmVycmVkOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICBTdHJp
bmcgbW9kdWxlS2V5ID0ga2V5LnRvV1RGU3RyaW5nKGV4ZWMpOworICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBzY29wZS5l
eGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0
dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywgZXhjZXB0aW9uKTsKKyAgICB9CisKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitKU09i
amVjdCogSlNHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0
aWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgSlNNb2R1
bGVMb2FkZXIqLCBKU1ZhbHVlIGtleSwgSlNNb2R1bGVSZWNvcmQqLCBKU1ZhbHVlKQoreworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgSlNPYmplY3QqIG1ldGFQcm9wZXJ0aWVzID0gY29uc3RydWN0RW1wdHlP
YmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0LT5udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlKCkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworCisgICAgbWV0YVBy
b3BlcnRpZXMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmaWxl
bmFtZSIpLCBrZXkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwor
CisgICAgcmV0dXJuIG1ldGFQcm9wZXJ0aWVzOworfQorCiB2b2lkIEpTR2xvYmFsT2JqZWN0Ojpx
dWV1ZU1pY3JvdGFzayhSZWY8TWljcm90YXNrPiYmIHRhc2spCiB7CiAgICAgaWYgKGdsb2JhbE9i
amVjdE1ldGhvZFRhYmxlKCktPnF1ZXVlVGFza1RvRXZlbnRMb29wKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAppbmRleCA1Njg4N2FmZDgzNmU5
NGQ5NTg4OTdlNWZiZDFkOTcxNGI5MjM4YzMxLi42MTQ2ZjNhOTY4MWNlZmUxYTA4NWYxMjgwZTcz
MWM2MmQ1ODkyMTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmgKQEAgLTg3OCw2ICs4NzgsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29s
IHNob3VsZEludGVycnVwdFNjcmlwdEJlZm9yZVRpbWVvdXQoY29uc3QgSlNHbG9iYWxPYmplY3Qq
KSB7IHJldHVybiBmYWxzZTsgfQogICAgIHN0YXRpYyBSdW50aW1lRmxhZ3MgamF2YVNjcmlwdFJ1
bnRpbWVGbGFncyhjb25zdCBKU0dsb2JhbE9iamVjdCopIHsgcmV0dXJuIFJ1bnRpbWVGbGFncygp
OyB9CiAKKyAgICBzdGF0aWMgSlNJbnRlcm5hbFByb21pc2UqIG1vZHVsZUxvYWRlckltcG9ydE1v
ZHVsZShKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVyKiwgSlNTdHJp
bmcqIG1vZHVsZU5hbWVWYWx1ZSwgSlNWYWx1ZSBwYXJhbWV0ZXJzLCBjb25zdCBTb3VyY2VPcmln
aW4mKTsKKyAgICBzdGF0aWMgSWRlbnRpZmllciBtb2R1bGVMb2FkZXJSZXNvbHZlKEpTR2xvYmFs
T2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlIGtleVZhbHVlLCBK
U1ZhbHVlIHJlZmVycmVyVmFsdWUsIEpTVmFsdWUpOworICAgIHN0YXRpYyBKU0ludGVybmFsUHJv
bWlzZSogbW9kdWxlTG9hZGVyRmV0Y2goSlNHbG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU01v
ZHVsZUxvYWRlciosIEpTVmFsdWUsIEpTVmFsdWUsIEpTVmFsdWUpOworICAgIHN0YXRpYyBKU09i
amVjdCogbW9kdWxlTG9hZGVyQ3JlYXRlSW1wb3J0TWV0YVByb3BlcnRpZXMoSlNHbG9iYWxPYmpl
Y3QqLCBFeGVjU3RhdGUqLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUsIEpTTW9kdWxlUmVjb3Jk
KiwgSlNWYWx1ZSk7CisKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHF1ZXVlTWljcm90YXNr
KFJlZjxNaWNyb3Rhc2s+JiYpOwogCiAgICAgYm9vbCBldmFsRW5hYmxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fZXZhbEVuYWJsZWQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDVj
YWNjYzU3MTU5ZWMzMjc0OWU1NTJiMzc4NjgxNGY2N2QxMDg5NDcuLmU3YmU3NGE0MWYzYjI1MmI2
ZDMxNTkyMDI0ZjgzMTg5NDlkZjVkYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApA
QCAtODksNiArODksMTAgQEAKICNlbmRpZgogI2VuZGlmCiAKKyNpZiBKU0NfT0JKQ19BUElfRU5B
QkxFRAorI2luY2x1ZGUgPHd0Zi9CbG9ja1B0ci5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXVEYg
ewogY2xhc3MgU2ltcGxlU3RhdHM7CiB9IC8vIG5hbWVzcGFjZSBXVEYKQEAgLTg5Myw2ICs4OTcs
MTIgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0UnVuTG9vcChDRlJ1
bkxvb3BSZWYpOwogI2VuZGlmIC8vIFVTRShDRikKIAorI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVE
CisgICAgdHlwZWRlZiB2b2lkICheTW9kdWxlTG9hZGVyQ2FsbGJhY2spKHZvaWQpOworICAgIHZv
aWQgc2V0TW9kdWxlTG9hZGVyQ2FsbGJhY2soTW9kdWxlTG9hZGVyQ2FsbGJhY2sgY2FsbGJhY2sp
IHsgbV9tb2R1bGVMb2FkZXJDYWxsYmFjayA9IGNhbGxiYWNrOyB9OworICAgIE1vZHVsZUxvYWRl
ckNhbGxiYWNrIGdldE1vZHVsZUxvYWRlckNhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9tb2R1
bGVMb2FkZXJDYWxsYmFjay5nZXQoKTsgfQorI2VuZGlmCisKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIApAQCAtOTk1LDEyICsxMDA1LDE4IEBAIHBy
aXZhdGU6CiAgICAgVk1UcmFwcyBtX3RyYXBzOwogICAgIFJlZlB0cjxXYXRjaGRvZz4gbV93YXRj
aGRvZzsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SGVhcFByb2ZpbGVyPiBtX2hlYXBQcm9maWxlcjsK
KyAgICAKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgUmVmUHRyPFNhbXBsaW5n
UHJvZmlsZXI+IG1fc2FtcGxpbmdQcm9maWxlcjsKICNlbmRpZgogICAgIHN0ZDo6dW5pcXVlX3B0
cjxTaGFkb3dDaGlja2VuPiBtX3NoYWRvd0NoaWNrZW47CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5
dGVjb2RlSW50cmluc2ljUmVnaXN0cnk+IG1fYnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTsKIAor
I2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECisgICAgLy8gVGhpcyBibG9jayBhY3R1YWxseSBoYXMg
YXJndW1lbnRzIGJ1dCBpdCB0YWtlcyBhIG9iamMgSlNWYWx1ZSB3aGljaCBjYXVzZXMgZGlzYXN0
ZXJpb3VzIG5hbWluZyBjb25mbGljdHMuLi4KKyAgICBCbG9ja1B0cjx2b2lkKCk+IG1fbW9kdWxl
TG9hZGVyQ2FsbGJhY2s7CisjZW5kaWYKKwogI2lmIEVOQUJMRShKSVQpCiAjaWYgIUFTU0VSVF9E
SVNBQkxFRAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHNfY2FuVXNlSklUSXNT
ZXQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359040</attachid>
            <date>2019-01-14 09:12:52 -0800</date>
            <delta_ts>2019-01-14 09:19:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191121-20190114091251.patch</filename>
            <type>text/plain</type>
            <size>69430</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5NTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
NDM2OGRjOGIyMDI0NGNlNTNjODQyZTYxNjVkOTk2ZjViYWVhNjEwLi40MmU2NDAzYjgzNGRlZmFm
YmY4MDRjMmMwZWQxZDQ0ZmRjMjEyZTA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4OSBAQAorMjAxOS0wMS0xNCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBKU0Mgc2hvdWxkIGhhdmUgYSBtb2R1bGUgbG9hZGVyIEFQSQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMTIxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
ZGRzIGEgbmV3IGRlbGVnYXRlIHRvIEpTQ29udHh0IHRoYXQgaXMgY2FsbGVkIHRvIGZldGNoCisg
ICAgICAgIGFueSByZXNvbHZlZCBtb2R1bGUuIFRoZSByZXNvbHV0aW9uIG9mIGEgbW9kdWxlIGlk
ZW50aWZpZXIgaXMgY29tcHV0ZWQKKyAgICAgICAgYXMgaWYgaXQgd2VyZSBhIFVSTCBvbiB0aGUg
d2ViIHdpdGggdGhlIGNhdmVhdCB0aGF0IGl0IG11c3QgYmUgYSBmaWxlIFVSTC4KKworICAgICAg
ICBBIG5ldyBjbGFzcyBKU1NjcmlwdCBoYXMgYWxzbyBiZWVuIGFkZGVkIHRoYXQgaXMgc2ltaWxh
ciB0byBKU1NjcmlwdFJlZi4KKyAgICAgICAgUmlnaHQgbm93IGFsbCBKU1NjcmlwdHMgYXJlIGNv
cGllZCBpbnRvIG1lbW9yeS4gSW4gdGhlIGZ1dHVyZSB3ZSBzaG91bGQKKyAgICAgICAgbW1hcCB0
aGUgcHJvdmlkZWQgZmlsZSBpbnRvIG1lbW9yeSBzbyB0aGUgT1MgY2FuIGV2aWN0IGl0IHRvIGRp
c2sgdW5kZXIKKyAgICAgICAgcHJlc3N1cmUuIEFkZGl0aW9uYWxseSwgdGhlIEFQSSBkb2VzIG5v
dCBtYWtlIHVzZSBvZiB0aGUgY29kZSBzaWduaW5nIHBhdGgKKyAgICAgICAgbm9yIHRoZSBieXRl
Y29kZSBjYWNoaW5nIHBhdGgsIHdoaWNoIHdlIHdpbGwgYWRkIGluIHN1YnNlcXVlbnQgcGF0Y2hl
cy4KKworICAgICAgICBMYXN0bHksIGEgY291cGxlIG9mIG5ldyBjb252ZW5pZW5jZSBtZXRob2Rz
IGhhdmUgYmVlbiBhZGRlZC4gQyBBUEkKKyAgICAgICAgY29udmVyc2lvbiwgY2FuIG5vdyB0b1Jl
ZiBhIEpTVmFsdWUgd2l0aCBqdXN0IGEgdm0gcmF0aGVyIHRoYW4KKyAgICAgICAgcmVxdWlyaW5n
IGFuIEV4ZWNTdGF0ZS4gU2Vjb25kbHksIHRoZXJlIGlzIG5vdyBhIGNhbGwgd3JhcHBlciB0aGF0
CisgICAgICAgIGRvZXMgbm90IHJlcXVpcmUgQ2FsbERhdGEgYW5kIENhbGxUeXBlIHNpbmNlIG1h
bnkgcGxhY2VzIGRvbid0CisgICAgICAgIGNhcmUgYWJvdXQgdGhpcy4KKworICAgICAgICAqIEFQ
SS9BUElDYXN0Lmg6CisgICAgICAgICh0b1JlZik6CisgICAgICAgICogQVBJL0pTQVBJR2xvYmFs
T2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FQSUdsb2JhbE9iamVjdDo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6SlNBUElHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OkpTQVBJR2xvYmFsT2JqZWN0OjpzY3JpcHRXcmFwcGVyTWFwIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6SlNBUElHbG9iYWxPYmplY3Q6OnNldFNjcmlwdFdyYXBwZXJNYXApOgor
ICAgICAgICAoSlNDOjpKU0FQSUdsb2JhbE9iamVjdDo6SlNBUElHbG9iYWxPYmplY3QpOgorICAg
ICAgICAqIEFQSS9KU0FQSUdsb2JhbE9iamVjdC5tbTogQWRkZWQuCisgICAgICAgIChKU0M6OkpT
QVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6SlNB
UElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckltcG9ydE1vZHVsZSk6CisgICAgICAgIChKU0M6
OkpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJGZXRjaCk6CisgICAgICAgIChKU0M6OkpT
QVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJDcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcyk6
CisgICAgICAgICogQVBJL0pTQVBJVmFsdWVXcmFwcGVyLmg6CisgICAgICAgIChKU0M6OmpzQVBJ
VmFsdWVXcmFwcGVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBBUEkvSlNDb250ZXh0Lmg6CisgICAg
ICAgICogQVBJL0pTQ29udGV4dC5tbToKKyAgICAgICAgKC1bSlNDb250ZXh0IG1vZHVsZUxvYWRl
ckRlbGVnYXRlXSk6CisgICAgICAgICgtW0pTQ29udGV4dCBzZXRNb2R1bGVMb2FkZXJEZWxlZ2F0
ZTpdKToKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0SW50ZXJuYWwuaDoKKyAgICAgICAgKiBBUEkv
SlNDb250ZXh0UHJpdmF0ZS5oOgorICAgICAgICAqIEFQSS9KU0NvbnRleHRSZWYuY3BwOgorICAg
ICAgICAoSlNHbG9iYWxDb250ZXh0Q3JlYXRlSW5Hcm91cCk6CisgICAgICAgICogQVBJL0pTU2Ny
aXB0Lmg6IEFkZGVkLgorICAgICAgICAqIEFQSS9KU1NjcmlwdC5tbTogQWRkZWQuCisgICAgICAg
ICgrW0pTU2NyaXB0IHNjcmlwdFdpdGhTb3VyY2U6aW5WaXJ0dWFsTWFjaGluZTpdKToKKyAgICAg
ICAgKGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUpOgorICAgICAgICAoK1tKU1NjcmlwdCBz
Y3JpcHRGcm9tVVRGOEZpbGU6aW5WaXJ0dWFsTWFjaGluZTp3aXRoQ29kZVNpZ25pbmc6YW5kQnl0
ZWNvZGVDYWNoZTpdKToKKyAgICAgICAgKGdldEpTU2NyaXB0U291cmNlQ29kZSk6CisgICAgICAg
ICogQVBJL0pTU2NyaXB0SW50ZXJuYWwuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaC4KKyAgICAgICAgKiBBUEkvSlNWYWx1
ZUludGVybmFsLmg6CisgICAgICAgICogQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oOgor
ICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpLm1tOgorICAgICAgICAoK1tKU0NvbnRleHRGZXRj
aERlbGVnYXRlIGNvbnRleHRXaXRoQmxvY2tGb3JGZXRjaDpdKToKKyAgICAgICAgKC1bSlNDb250
ZXh0RmV0Y2hEZWxlZ2F0ZSBjb250ZXh0OmZldGNoTW9kdWxlRm9ySWRlbnRpZmllcjp3aXRoUmVz
b2x2ZUhhbmRsZXI6YW5kUmVqZWN0SGFuZGxlcjpdKToKKyAgICAgICAgKGNoZWNrTW9kdWxlQ29k
ZVJhbik6CisgICAgICAgIChjaGVja01vZHVsZVdhc1JlamVjdGVkKToKKyAgICAgICAgKHRlc3RG
ZXRjaCk6CisgICAgICAgICh0ZXN0RmV0Y2hXaXRoVHdvQ3ljbGUpOgorICAgICAgICAodGVzdEZl
dGNoV2l0aFRocmVlQ3ljbGUpOgorICAgICAgICAodGVzdExvYWRlclJlc29sdmVzQWJzb2x1dGVT
Y3JpcHRVUkwpOgorICAgICAgICAodGVzdExvYWRlclJlamVjdHNOaWxTY3JpcHRVUkwpOgorICAg
ICAgICAodGVzdExvYWRlclJlamVjdHNGYWlsZWRGZXRjaCk6CisgICAgICAgICh0ZXN0SW1wb3J0
TW9kdWxlVHdpY2UpOgorICAgICAgICAoK1tKU0NvbnRleHRGaWxlTG9hZGVyRGVsZWdhdGUgbmV3
Q29udGV4dF0pOgorICAgICAgICAocmVzb2x2ZVBhdGhUb1NjcmlwdHMpOgorICAgICAgICAoLVtK
U0NvbnRleHRGaWxlTG9hZGVyRGVsZWdhdGUgY29udGV4dDpmZXRjaE1vZHVsZUZvcklkZW50aWZp
ZXI6d2l0aFJlc29sdmVIYW5kbGVyOmFuZFJlamVjdEhhbmRsZXI6XSk6CisgICAgICAgICh0ZXN0
TG9hZEJhc2ljRmlsZSk6CisgICAgICAgICh0ZXN0T2JqZWN0aXZlQ0FQSSk6CisgICAgICAgICog
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3Vy
Y2VzQ29jb2EudHh0OgorICAgICAgICAqIGNvbmZpZy5oOgorICAgICAgICAqIHJ1bnRpbWUvQ2Fs
bERhdGEuY3BwOgorICAgICAgICAoSlNDOjpjYWxsKToKKyAgICAgICAgKiBydW50aW1lL0NhbGxE
YXRhLmg6CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6
bG9hZEFuZEV2YWx1YXRlTW9kdWxlKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uaDoK
KyAgICAgICAgKiBydW50aW1lL0pTQ2FzdC5oOgorICAgICAgICAoSlNDOjpqc1NlY3VyZUNhc3Qp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpj
cmVhdGVQcm94eVByb3BlcnR5KToKKwogMjAxOC0xMi0zMSAgS2VpdGggTWlsbGVyICA8a2VpdGhf
bWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBTb3VyY2VQcm92aWRlcnMgc2hvdWxkIHVzZSBh
biBhY3R1YWwgVVJMIGluc3RlYWQgb2YgYSBzdHJpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvQVBJQ2FzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElD
YXN0LmgKaW5kZXggM2I1NTkxMTllMjJhMWU1Njg4MDg4NzI3ZjliYTdkY2IyODI0YWY0ZC4uOGIw
ODZmMGY0NTFmMjgzYTUyNzYzZTE5OGFiMGNlOTZlY2Q2NTk2ZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9BUElDYXN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9BUElDYXN0LmgKQEAgLTEyOCwyMSArMTI4LDI2IEBAIGlubGluZSBKU0M6OlZNKiB0b0pT
KEpTQ29udGV4dEdyb3VwUmVmIGcpCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDOjpW
TSo+KGNvbnN0X2Nhc3Q8T3BhcXVlSlNDb250ZXh0R3JvdXAqPihnKSk7CiB9CiAKLWlubGluZSBK
U1ZhbHVlUmVmIHRvUmVmKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdikKK2lu
bGluZSBKU1ZhbHVlUmVmIHRvUmVmKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdikKIHsKLSAg
ICBBU1NFUlQoZXhlYy0+dm0oKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAg
ICBBU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAjaWYgIUNQVShB
RERSRVNTNjQpCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIXYuaXND
ZWxsKCkpCi0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTVmFsdWVSZWY+KEpTQzo6
anNBUElWYWx1ZVdyYXBwZXIoZXhlYywgdikuYXNDZWxsKCkpOworICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxKU1ZhbHVlUmVmPihKU0M6OkpTQVBJV3JhcHBlclZhbHVlOjpjcmVhdGUo
dm0sIHYpLmFzQ2VsbCgpKTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlUmVm
Pih2LmFzQ2VsbCgpKTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNF
RF9QQVJBTSh2bSk7CiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU1ZhbHVlUmVmPih2KTsKICNl
bmRpZgogfQogCitpbmxpbmUgSlNWYWx1ZVJlZiB0b1JlZihKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
SlNDOjpKU1ZhbHVlIHYpCit7CisgICAgcmV0dXJuIHRvUmVmKGV4ZWMtPnZtKCksIHYpOworfQor
CiBpbmxpbmUgSlNPYmplY3RSZWYgdG9SZWYoSlNDOjpKU09iamVjdCogbykKIHsKICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxKU09iamVjdFJlZj4obyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTVkMmQ2ZmZmZGZkYTdi
MzFhOGQ0NWZhYjM5N2JiNmYyMTA0M2VkZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QuaApAQCAtMCwwICsxLDcxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKworT0JKQ19DTEFTUyBOU01hcFRhYmxlOwor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNBUElHbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNH
bG9iYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0dsb2JhbE9iamVjdDsK
KworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9k
VGFibGUgc19nbG9iYWxPYmplY3RNZXRob2RUYWJsZTsKKworICAgIHN0YXRpYyBKU0FQSUdsb2Jh
bE9iamVjdCogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAg
ICAgICBhdXRvKiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FQSUdsb2Jh
bE9iamVjdD4odm0uaGVhcCkpIEpTQVBJR2xvYmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpOworICAg
ICAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsK
KyAgICB9CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIGF1dG8qIHJlc3VsdCA9IFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCAwLCBwcm90b3R5cGUsIFR5cGVJbmZvKEdsb2JhbE9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRUcmFuc2l0aW9uV2F0
Y2hwb2ludElzTGlrZWx5VG9CZUZpcmVkKHRydWUpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIHN0YXRpYyBKU0ludGVybmFsUHJvbWlzZSogbW9kdWxlTG9hZGVySW1wb3J0
TW9kdWxlKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNNb2R1bGVMb2FkZXIqLCBKU1N0
cmluZyogbW9kdWxlTmFtZVZhbHVlLCBKU1ZhbHVlIHBhcmFtZXRlcnMsIGNvbnN0IFNvdXJjZU9y
aWdpbiYpOworICAgIHN0YXRpYyBJZGVudGlmaWVyIG1vZHVsZUxvYWRlclJlc29sdmUoSlNHbG9i
YWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUga2V5VmFsdWUs
IEpTVmFsdWUgcmVmZXJyZXJWYWx1ZSwgSlNWYWx1ZSk7CisgICAgc3RhdGljIEpTSW50ZXJuYWxQ
cm9taXNlKiBtb2R1bGVMb2FkZXJGZXRjaChKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpT
TW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSwgSlNWYWx1ZSwgSlNWYWx1ZSk7CisgICAgc3RhdGljIEpT
T2JqZWN0KiBtb2R1bGVMb2FkZXJDcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcyhKU0dsb2JhbE9i
amVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSwgSlNNb2R1bGVSZWNv
cmQqLCBKU1ZhbHVlKTsKKworICAgIE5TTWFwVGFibGUqIHNjcmlwdFdyYXBwZXJNYXAoKSBjb25z
dCB7IHJldHVybiBtX3NjcmlwdFdyYXBwZXJNYXAuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFNjcmlw
dFdyYXBwZXJNYXAoTlNNYXBUYWJsZSogbWFwKSB7IG1fc2NyaXB0V3JhcHBlck1hcCA9IG1hcDsg
fQorCitwcml2YXRlOgorICAgIEpTQVBJR2xvYmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCAmc19nbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSkKKyAgICB7IH0KKworICAgIFJldGFpblB0cjxOU01hcFRhYmxlPiBtX3Njcmlw
dFdyYXBwZXJNYXA7Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQ
SUdsb2JhbE9iamVjdC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMTBlNWM5N2VlY2UzMmFmOWM4MWIyZjlmMGQy
NzQ4MmRmOGNiOTYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0FQSUdsb2JhbE9iamVjdC5tbQpAQCAtMCwwICsxLDIxMyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIkpTQVBJR2xvYmFsT2JqZWN0LmgiCisKKyNpbXBvcnQgIkFQSUNhc3QuaCIKKyNpbXBvcnQg
IkNhdGNoU2NvcGUuaCIKKyNpbXBvcnQgIkNvbXBsZXRpb24uaCIKKyNpbXBvcnQgIkVycm9yLmgi
CisjaW1wb3J0ICJFeGNlcHRpb24uaCIKKyNpbXBvcnQgIkpTQ29udGV4dEludGVybmFsLmgiCisj
aW1wb3J0ICJKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmgiCisjaW1wb3J0ICJKU05hdGl2ZVN0
ZEZ1bmN0aW9uLmgiCisjaW1wb3J0ICJKU1NjcmlwdEludGVybmFsLmgiCisjaW1wb3J0ICJKU1Nv
dXJjZUNvZGUuaCIKKyNpbXBvcnQgIkpTVmFsdWVJbnRlcm5hbC5oIgorI2ltcG9ydCAiSlNWaXJ0
dWFsTWFjaGluZUludGVybmFsLmgiCisjaW1wb3J0ICJKYXZhU2NyaXB0Q29yZS5oIgorI2ltcG9y
dCAiT2JqZWN0Q29uc3RydWN0b3IuaCIKKyNpbXBvcnQgIlNvdXJjZU9yaWdpbi5oIgorCisjaW1w
b3J0IDx3dGYvVVJMLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNB
UElHbG9iYWxPYmplY3Q6OnNfaW5mbyA9IHsgIkdsb2JhbE9iamVjdCIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBUElHbG9iYWxPYmplY3Qp
IH07CisKK2NvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIEpTQVBJR2xvYmFsT2JqZWN0Ojpz
X2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlID0geworICAgICZzdXBwb3J0c1JpY2hTb3VyY2VJbmZv
LAorICAgICZzaG91bGRJbnRlcnJ1cHRTY3JpcHQsCisgICAgJmphdmFTY3JpcHRSdW50aW1lRmxh
Z3MsCisgICAgbnVsbHB0ciwgLy8gcXVldWVUYXNrVG9FdmVudExvb3AKKyAgICAmc2hvdWxkSW50
ZXJydXB0U2NyaXB0QmVmb3JlVGltZW91dCwKKyAgICAmbW9kdWxlTG9hZGVySW1wb3J0TW9kdWxl
LCAvLyBtb2R1bGVMb2FkZXJJbXBvcnRNb2R1bGUKKyAgICAmbW9kdWxlTG9hZGVyUmVzb2x2ZSwg
Ly8gbW9kdWxlTG9hZGVyUmVzb2x2ZQorICAgICZtb2R1bGVMb2FkZXJGZXRjaCwgLy8gbW9kdWxl
TG9hZGVyRmV0Y2gKKyAgICAmbW9kdWxlTG9hZGVyQ3JlYXRlSW1wb3J0TWV0YVByb3BlcnRpZXMs
IC8vIG1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzCisgICAgbnVsbHB0ciwg
Ly8gbW9kdWxlTG9hZGVyRXZhbHVhdGUKKyAgICBudWxscHRyLCAvLyBwcm9taXNlUmVqZWN0aW9u
VHJhY2tlcgorICAgIG51bGxwdHIsIC8vIGRlZmF1bHRMYW5ndWFnZQorICAgIG51bGxwdHIsIC8v
IGNvbXBpbGVTdHJlYW1pbmcKKyAgICBudWxscHRyLCAvLyBpbnN0YW50aWF0ZVN0cmVhbWluZwor
fTsKKworSWRlbnRpZmllciBKU0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyUmVzb2x2ZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIEpTTW9kdWxlTG9h
ZGVyKiwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgcmVmZXJyZXIsIEpTVmFsdWUpCit7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgQVNTRVJUKGdsb2JhbE9iamVjdCA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpOworICAgIEFTU0VSVChrZXkuaXNTdHJpbmcoKSB8fCBrZXkuaXNTeW1ib2woKSk7CisgICAg
U3RyaW5nIG5hbWUgPSAga2V5LnRvV1RGU3RyaW5nKGV4ZWMpOworCisgICAgVVJMIHJlZmVycmVy
VVJMKFVSTCgpLCBqc0Nhc3Q8SlNTdHJpbmcqPihyZWZlcnJlciktPnRyeUdldFZhbHVlKCkpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKHJlZmVycmVyVVJMLmlzVmFsaWQoKSk7CisKKyAgICBVUkwgdXJs
ID0gVVJMKHJlZmVycmVyVVJMLCBuYW1lKTsKKyAgICBpZiAodXJsLmlzVmFsaWQoKSkKKyAgICAg
ICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgdXJsKTsKKworICAgIHRocm93
Vk1FcnJvcihleGVjLCBzY29wZSwgIkNvdWxkIG5vdCBmb3JtIHZhbGlkIFVSTCBmcm9tIGlkZW50
aWZpZXIgYW5kIGJhc2UiX3MpOworICAgIHJldHVybiB7IH07Cit9CisKK0pTSW50ZXJuYWxQcm9t
aXNlKiBKU0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVySW1wb3J0TW9kdWxlKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgSlNNb2R1bGVMb2FkZXIqLCBK
U1N0cmluZyogc3BlY2lmaWVyVmFsdWUsIEpTVmFsdWUsIGNvbnN0IFNvdXJjZU9yaWdpbiYgc291
cmNlT3JpZ2luKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgYXV0byByZWplY3QgPSBbJl0g
KEpTVmFsdWUgZXhjZXB0aW9uKSAtPiBKU0ludGVybmFsUHJvbWlzZSogeworICAgICAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBhdXRvKiBwcm9taXNlID0gSlNJbnRlcm5hbFBy
b21pc2VEZWZlcnJlZDo6dHJ5Q3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7CisgICAgICAgIHNj
b3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiBwcm9taXNlLT5yZWplY3QoZXhl
YywgZXhjZXB0aW9uKTsKKyAgICB9OworCisgICAgYXV0byBpbXBvcnQgPSBbJl0gKFVSTCYgdXJs
KSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gaW1wb3J0TW9kdWxlKGV4ZWMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCB1cmwpLCBqc1VuZGVmaW5lZCgpLCBqc1VuZGVmaW5lZCgpKTsKKyAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIHJldHVy
biByZWplY3Qoc2NvcGUuZXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH07CisKKyAgICBhdXRvIHNwZWNpZmllciA9IHNwZWNpZmllclZhbHVlLT52YWx1ZShleGVjKTsK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgIEpTVmFsdWUg
ZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CisgICAgICAgIHJldHVybiByZWplY3QoZXhjZXB0aW9uKTsKKyAgICB9CisKKyAgICBV
UkwgYWJzb2x1dGVVUkwoVVJMKCksIHNwZWNpZmllcik7CisgICAgaWYgKGFic29sdXRlVVJMLmlz
VmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGltcG9ydChhYnNvbHV0ZVVSTCk7CisKKyAgICBpZiAo
IXNwZWNpZmllci5zdGFydHNXaXRoKCcvJykgJiYgIXNwZWNpZmllci5zdGFydHNXaXRoKCIuLyIp
ICYmICFzcGVjaWZpZXIuc3RhcnRzV2l0aCgiLi4vIikpCisgICAgICAgIHJldHVybiByZWplY3Qo
Y3JlYXRlRXJyb3IoZXhlYywgIk1vZHVsZSBzcGVjaWZpZXIgZG9lcyBub3Qgc3RhcnQgd2l0aCBc
Ii9cIiwgXCIuL1wiLCBvciBcIi4uL1wiLiJfcykpOworCisgICAgaWYgKHNwZWNpZmllci5zdGFy
dHNXaXRoKCcvJykpIHsKKyAgICAgICAgYWJzb2x1dGVVUkwgPSBVUkwoVVJMKHsgfSwgImZpbGU6
Ly8iKSwgc3BlY2lmaWVyKTsKKyAgICAgICAgaWYgKGFic29sdXRlVVJMLmlzVmFsaWQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBpbXBvcnQoYWJzb2x1dGVVUkwpOworICAgIH0KKworICAgIGF1dG8g
bm9CYXNlRXJyb3JNZXNzYWdlID0gIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGJhc2UgVVJMIGZv
ciBsb2FkaW5nLiJfczsKKyAgICBpZiAoc291cmNlT3JpZ2luLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gcmVqZWN0KGNyZWF0ZUVycm9yKGV4ZWMsIG5vQmFzZUVycm9yTWVzc2FnZSkpOworCisg
ICAgYXV0byByZWZlcnJlciA9IHNvdXJjZU9yaWdpbi5zdHJpbmcoKTsKKyAgICBVUkwgYmFzZVVS
TChVUkwoKSwgcmVmZXJyZXIpOworICAgIGlmICghYmFzZVVSTC5pc1ZhbGlkKCkpCisgICAgICAg
IHJldHVybiByZWplY3QoY3JlYXRlRXJyb3IoZXhlYywgbm9CYXNlRXJyb3JNZXNzYWdlKSk7CisK
KyAgICBVUkwgdXJsKGJhc2VVUkwsIHNwZWNpZmllcik7CisgICAgaWYgKCF1cmwuaXNWYWxpZCgp
KQorICAgICAgICByZXR1cm4gcmVqZWN0KGNyZWF0ZUVycm9yKGV4ZWMsICJjb3VsZCBub3QgZGV0
ZXJtaW5lIGEgdmFsaWQgVVJMIGZvciBtb2R1bGUgc3BlY2lmaWVyIl9zKSk7CisKKyAgICByZXR1
cm4gaW1wb3J0KHVybCk7Cit9CisKK0pTSW50ZXJuYWxQcm9taXNlKiBKU0FQSUdsb2JhbE9iamVj
dDo6bW9kdWxlTG9hZGVyRmV0Y2goSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUga2V5LCBKU1ZhbHVlLCBKU1ZhbHVl
KQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0ID09IGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAgSlNDb250ZXh0ICpjb250ZXh0ID0gW0pT
Q29udGV4dCBjb250ZXh0V2l0aEpTR2xvYmFsQ29udGV4dFJlZjp0b0dsb2JhbFJlZihnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSldOworCisgICAgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZCog
ZGVmZXJyZWQgPSBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkOjp0cnlDcmVhdGUoZXhlYywgZ2xv
YmFsT2JqZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKwor
ICAgIElkZW50aWZpZXIgbW9kdWxlS2V5ID0ga2V5LnRvUHJvcGVydHlLZXkoZXhlYyk7CisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICBKU1ZhbHVlIGV4Y2Vw
dGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OworICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBleGNlcHRpb24pOworICAg
IH0KKworICAgIGlmIChVTkxJS0VMWSghW2NvbnRleHQgbW9kdWxlTG9hZGVyRGVsZWdhdGVdKSkK
KyAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywg
Ik5vIG1vZHVsZSBsb2FkZXIgcHJvdmlkZWQuIikpOworCisgICAgYXV0byBkZWZlcnJlZFByb21p
c2UgPSBTdHJvbmc8SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZD4odm0sIGRlZmVycmVkKTsKKyAg
ICBhdXRvIHN0cm9uZ0tleSA9IFN0cm9uZzxKU1N0cmluZz4odm0sIGpzU2VjdXJlQ2FzdDxKU1N0
cmluZyo+KHZtLCBrZXkpKTsKKyAgICBhdXRvKiByZXNvbHZlID0gSlNOYXRpdmVTdGRGdW5jdGlv
bjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIDEsICJyZXNvbHZlIiwgWz1dIChFeGVjU3RhdGUq
IGV4ZWMpIHsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgLy8gVGhpcyBj
YXB0dXJlcyB0aGUgZ2xvYmFsT2JqZWN0IGJ1dCB0aGF0J3Mgb2sgYmVjYXVzZSBvdXIgc3RydWN0
dXJlIGtlZXBzIGl0IGFsaXZlIGFueXdheS4KKyAgICAgICAgSlNDb250ZXh0ICpjb250ZXh0ID0g
W0pTQ29udGV4dCBjb250ZXh0V2l0aEpTR2xvYmFsQ29udGV4dFJlZjp0b0dsb2JhbFJlZihnbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSldOworICAgICAgICBpZCBzY3JpcHQgPSB2YWx1ZVRvT2Jq
ZWN0KGNvbnRleHQsIHRvUmVmKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKSk7CisKKyAgICAgICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFbc2NyaXB0
IGlzS2luZE9mQ2xhc3M6W0pTU2NyaXB0IGNsYXNzXV0pKSB7CisgICAgICAgICAgICBhcmdzLmFw
cGVuZChjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkZpcnN0IGFyZ3VtZW50IG9mIHJlc29sdXRpb24g
Y2FsbGJhY2sgaXMgbm90IGEgSlNTY3JpcHQiKSk7CisgICAgICAgICAgICBjYWxsKGV4ZWMsIGRl
ZmVycmVkUHJvbWlzZS0+SlNQcm9taXNlRGVmZXJyZWQ6OnJlamVjdCgpLCBhcmdzLCAiVGhpcyBz
aG91bGQgbmV2ZXIgYmUgc2Vlbi4uLiIpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1Vu
ZGVmaW5lZCgpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2UgPSBn
ZXRKU1NjcmlwdFNvdXJjZUNvZGUoc3RhdGljX2Nhc3Q8SlNTY3JpcHQgKj4oc2NyaXB0KSk7Cisg
ICAgICAgIGFyZ3MuYXBwZW5kKEpTU291cmNlQ29kZTo6Y3JlYXRlKHZtLCBtYWtlU291cmNlKHNv
dXJjZSwgU291cmNlT3JpZ2luKG1vZHVsZUtleS5zdHJpbmcoKSksIFVSTCh7IH0sIG1vZHVsZUtl
eS5zdHJpbmcoKSksIFRleHRQb3NpdGlvbigpLCBKU0M6OlNvdXJjZVByb3ZpZGVyU291cmNlVHlw
ZTo6TW9kdWxlKSkpOworICAgICAgICBjYWxsKGV4ZWMsIGRlZmVycmVkUHJvbWlzZS0+SlNQcm9t
aXNlRGVmZXJyZWQ6OnJlc29sdmUoKSwgYXJncywgIlRoaXMgc2hvdWxkIG5ldmVyIGJlIHNlZW4u
Li4iKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZWRKU1VuZGVmaW5lZCgpOworICAgIH0pOworCisg
ICAgYXV0byogcmVqZWN0ID0gSlNOYXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIDEsICJyZWplY3QiLCBbPV0gKEV4ZWNTdGF0ZSogZXhlYykgeworICAgICAgICBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgICAgICBhcmdzLmFwcGVuZChleGVjLT5hcmd1bWVu
dCgwKSk7CisKKyAgICAgICAgY2FsbChleGVjLCBkZWZlcnJlZFByb21pc2UtPkpTUHJvbWlzZURl
ZmVycmVkOjpyZWplY3QoKSwgYXJncywgIlRoaXMgc2hvdWxkIG5ldmVyIGJlIHNlZW4uLi4iKTsK
KyAgICAgICAgcmV0dXJuIGVuY29kZWRKU1VuZGVmaW5lZCgpOworICAgIH0pOworCisgICAgW1tj
b250ZXh0IG1vZHVsZUxvYWRlckRlbGVnYXRlXSBjb250ZXh0OmNvbnRleHQgZmV0Y2hNb2R1bGVG
b3JJZGVudGlmaWVyOls6OkpTVmFsdWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjp0b1JlZihleGVjLCBr
ZXkpIGluQ29udGV4dDpjb250ZXh0XSB3aXRoUmVzb2x2ZUhhbmRsZXI6Wzo6SlNWYWx1ZSB2YWx1
ZVdpdGhKU1ZhbHVlUmVmOnRvUmVmKGV4ZWMsIHJlc29sdmUpIGluQ29udGV4dDpjb250ZXh0XSBh
bmRSZWplY3RIYW5kbGVyOls6OkpTVmFsdWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjp0b1JlZihleGVj
LCByZWplY3QpIGluQ29udGV4dDpjb250ZXh0XV07CisgICAgaWYgKGNvbnRleHQuZXhjZXB0aW9u
KSB7CisgICAgICAgIGRlZmVycmVkLT5yZWplY3QoZXhlYywgdG9KUyhleGVjLCBbY29udGV4dC5l
eGNlcHRpb24gSlNWYWx1ZVJlZl0pKTsKKyAgICAgICAgY29udGV4dC5leGNlcHRpb24gPSBuaWw7
CisgICAgfQorICAgIHJldHVybiBkZWZlcnJlZC0+cHJvbWlzZSgpOworfQorCitKU09iamVjdCog
SlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVz
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgSlNNb2R1bGVM
b2FkZXIqLCBKU1ZhbHVlIGtleSwgSlNNb2R1bGVSZWNvcmQqLCBKU1ZhbHVlKQoreworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgSlNPYmplY3QqIG1ldGFQcm9wZXJ0aWVzID0gY29uc3RydWN0RW1wdHlPYmpl
Y3QoZXhlYywgZ2xvYmFsT2JqZWN0LT5udWxsUHJvdG90eXBlT2JqZWN0U3RydWN0dXJlKCkpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworCisgICAgbWV0YVByb3Bl
cnRpZXMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJmaWxlbmFt
ZSIpLCBrZXkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworCisg
ICAgcmV0dXJuIG1ldGFQcm9wZXJ0aWVzOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQVBJVmFsdWVXcmFwcGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQVBJVmFsdWVXcmFwcGVyLmgKaW5kZXggMDZiMzA3MTAzZWVhMjM0MDU0N2IwMzAy
OWNlM2ZiMGU2ZDc2NzYzMy4uNzQ0OTE5M2NiYjI1MGM2NjhmYzE5YWZjZmE3YTcwNTE0NDc1MzIy
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVZhbHVlV3JhcHBl
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElWYWx1ZVdyYXBwZXIuaApA
QCAtNDQsMTAgKzQ0LDkgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAot
ICAgIHN0YXRpYyBKU0FQSVZhbHVlV3JhcHBlciogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSB2YWx1ZSkgCisgICAgc3RhdGljIEpTQVBJVmFsdWVXcmFwcGVyKiBjcmVhdGUoVk0mIHZt
LCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICAgICAgSlNBUElWYWx1ZVdyYXBwZXIqIHdyYXBwZXIgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU0FQSVZhbHVlV3JhcHBlcj4odm0uaGVhcCkpIEpTQVBJVmFsdWVXcmFwcGVyKGV4ZWMp
OworICAgICAgICBKU0FQSVZhbHVlV3JhcHBlciogd3JhcHBlciA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEpTQVBJVmFsdWVXcmFwcGVyPih2bS5oZWFwKSkgSlNBUElWYWx1ZVdyYXBwZXIo
dm0pOwogICAgICAgICB3cmFwcGVyLT5maW5pc2hDcmVhdGlvbih2bSwgdmFsdWUpOwogICAgICAg
ICByZXR1cm4gd3JhcHBlcjsKICAgICB9CkBAIC02MSwxNyArNjAsMTIgQEAgcHJvdGVjdGVkOgog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBKU0FQSVZhbHVlV3JhcHBlcihFeGVjU3RhdGUqIGV4ZWMp
Ci0gICAgICAgIDogSlNDZWxsKGV4ZWMtPnZtKCksIGV4ZWMtPnZtKCkuYXBpV3JhcHBlclN0cnVj
dHVyZS5nZXQoKSkKKyAgICBKU0FQSVZhbHVlV3JhcHBlcihWTSYgdm0pCisgICAgICAgIDogSlND
ZWxsKHZtLCB2bS5hcGlXcmFwcGVyU3RydWN0dXJlLmdldCgpKQogICAgIHsKICAgICB9CiAKICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92YWx1ZTsKIH07CiAKLWlubGluZSBKU1ZhbHVlIGpz
QVBJVmFsdWVXcmFwcGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBy
ZXR1cm4gSlNBUElWYWx1ZVdyYXBwZXI6OmNyZWF0ZShleGVjLCB2YWx1ZSk7Ci19Ci0KIH0gLy8g
bmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nv
bnRleHQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0LmgKaW5kZXggODlj
ODdmOWUyZTFmZjFiMTcxYjFlYmJhOGM0NTIxNTlmNDRmNDc1YS4uMGE4NTZjNTk1OGY4OWM3YjEx
NWVlYWQ4NGVhNTNhMzQ0MzFiMmM3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NvbnRleHQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4
dC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMxLDcgKzMxLDcgQEAKIAogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAKLUBjbGFzcyBK
U1ZpcnR1YWxNYWNoaW5lLCBKU1ZhbHVlOworQGNsYXNzIEpTU2NyaXB0LCBKU1ZpcnR1YWxNYWNo
aW5lLCBKU1ZhbHVlLCBKU0NvbnRleHQ7CiAKIC8qIQogQGludGVyZmFjZQpAQCAtMzksNyArMzks
NyBAQAogIEphdmFTY3JpcHQgZXhlY3V0aW9uIHRha2VzIHBsYWNlIHdpdGhpbiBhIGNvbnRleHQs
IGFuZCBhbGwgSmF2YVNjcmlwdCB2YWx1ZXMKICBhcmUgdGllZCB0byBhIGNvbnRleHQuCiAqLwot
TlNfQ0xBU1NfQVZBSUxBQkxFKDEwXzksIDdfMCkKK0pTQ19DTEFTU19BVkFJTEFCTEUobWFjb3N4
KDEwLjkpLCBpc28oNy4wKSkKIEBpbnRlcmZhY2UgSlNDb250ZXh0IDogTlNPYmplY3QKIAogLyoh
CkBAIC0xNzcsNyArMTc3LDYgQEAgTlNfQ0xBU1NfQVZBSUxBQkxFKDEwXzksIDdfMCkKIEBkaXNj
dXNzaW9uIE5hbWUgb2YgdGhlIEpTQ29udGV4dC4gRXhwb3NlZCB3aGVuIHJlbW90ZSBkZWJ1Z2dp
bmcgdGhlIGNvbnRleHQuCiAqLwogQHByb3BlcnR5IChjb3B5KSBOU1N0cmluZyAqbmFtZSBKU0Nf
QVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTApLCBpb3MoOC4wKSk7Ci0KIEBlbmQKIAogLyohCkBA
IC0yMzEsNiArMjMwLDcgQEAgTlNfQ0xBU1NfQVZBSUxBQkxFKDEwXzksIDdfMCkKIEByZXN1bHQg
VGhlIEMgQVBJIGVxdWl2YWxlbnQgb2YgdGhpcyBKU0NvbnRleHQuCiAqLwogQHByb3BlcnR5IChy
ZWFkb25seSkgSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xvYmFsQ29udGV4dFJlZjsKKwogQGVuZAog
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0
Lm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0KaW5kZXggMjc1NjZm
NDFiOTdlMWIzOWJkZGU5YjQ4YWFhNTU5ZjE0Y2I3MzllYS4uM2M3NzZkNGQ5MDBlZTE3MzMzNjJh
YzI5ZjYyNGY0NDRkNTQ1ZTdiNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NvbnRleHQubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQu
bW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjYsMTEgKzI2LDE1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbXBvcnQgIkFQSUNh
c3QuaCIKKyNpbXBvcnQgIkNvbXBsZXRpb24uaCIKICNpbXBvcnQgIkpTQ0lubGluZXMuaCIKICNp
bXBvcnQgIkpTQ29udGV4dEludGVybmFsLmgiCiAjaW1wb3J0ICJKU0NvbnRleHRQcml2YXRlLmgi
CiAjaW1wb3J0ICJKU0NvbnRleHRSZWZJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNHbG9iYWxPYmpl
Y3QuaCIKKyNpbXBvcnQgIkpTSW50ZXJuYWxQcm9taXNlLmgiCisjaW1wb3J0ICJKU01vZHVsZUxv
YWRlci5oIgorI2ltcG9ydCAiSlNTY3JpcHRJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNWYWx1ZUlu
dGVybmFsLmgiCiAjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKICNpbXBvcnQg
IkpTV3JhcHBlck1hcC5oIgpAQCAtMzgsMTIgKzQyLDE1IEBACiAjaW1wb3J0ICJPYmpjUnVudGlt
ZUV4dHJhcy5oIgogI2ltcG9ydCAiU3Ryb25nSW5saW5lcy5oIgogCisjaW1wb3J0IDx3dGYvV2Vh
a09iakNQdHIuaD4KKwogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAKIEBpbXBsZW1lbnRhdGlv
biBKU0NvbnRleHQgewogICAgIEpTVmlydHVhbE1hY2hpbmUgKm1fdmlydHVhbE1hY2hpbmU7CiAg
ICAgSlNHbG9iYWxDb250ZXh0UmVmIG1fY29udGV4dDsKICAgICBKU0M6OlN0cm9uZzxKU0M6OkpT
T2JqZWN0PiBtX2V4Y2VwdGlvbjsKKyAgICBXZWFrT2JqQ1B0cjxpZCA8SlNNb2R1bGVMb2FkZXJE
ZWxlZ2F0ZT4+IG1fbW9kdWxlTG9hZGVyRGVsZWdhdGU7CiB9CiAKIC0gKEpTR2xvYmFsQ29udGV4
dFJlZilKU0dsb2JhbENvbnRleHRSZWYKQEAgLTIzMyw2ICsyNDAsMTYgQEAKICAgICBKU0dsb2Jh
bENvbnRleHRTZXREZWJ1Z2dlclJ1bkxvb3AobV9jb250ZXh0LCBydW5Mb29wKTsKIH0KIAorLSAo
aWQ8SlNNb2R1bGVMb2FkZXJEZWxlZ2F0ZT4pbW9kdWxlTG9hZGVyRGVsZWdhdGUKK3sKKyAgICBy
ZXR1cm4gbV9tb2R1bGVMb2FkZXJEZWxlZ2F0ZS5nZXRBdXRvcmVsZWFzZWQoKTsKK30KKworLSAo
dm9pZClzZXRNb2R1bGVMb2FkZXJEZWxlZ2F0ZTooaWQ8SlNNb2R1bGVMb2FkZXJEZWxlZ2F0ZT4p
bW9kdWxlTG9hZGVyRGVsZWdhdGUKK3sKKyAgICBtX21vZHVsZUxvYWRlckRlbGVnYXRlID0gbW9k
dWxlTG9hZGVyRGVsZWdhdGU7Cit9CisKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIEpTQ29udGV4
dChTdWJzY3JpcHRTdXBwb3J0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NvbnRleHRJbnRlcm5hbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRl
eHRJbnRlcm5hbC5oCmluZGV4IDI4ZjcwOWMxZTQ4ZjFlMWE4MDM4NTY1MGFhZTZlNDFjZDM1MTUw
ZmEuLmFiNDU4MjlmMDAyN2U0ZmFkNmJmYmQxYWZjNDAyYjNhMWJlODViNTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0SW50ZXJuYWwuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dEludGVybmFsLmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyArMjcsNyBAQAog
CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIAotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlND
b250ZXh0Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRQcml2YXRlLmg+CiAK
IHN0cnVjdCBDYWxsYmFja0RhdGEgewogICAgIENhbGxiYWNrRGF0YSogbmV4dDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UHJpdmF0ZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRQcml2YXRlLmgKaW5kZXggZmY5NjIyYWRkZjYw
YjdjMTAzNTdkYWNjZjFjNmY0MWVjYjg2MWYxYy4uZDRlMjA2YjMzNTc1ZTlmYTZkNDE4MmU5ZTFh
ZDg5NDA1NjhhODY3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nv
bnRleHRQcml2YXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRQ
cml2YXRlLmgKQEAgLTMwLDYgKzMwLDI3IEBACiAKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pT
Q29udGV4dC5oPgogCitAcHJvdG9jb2wgSlNNb2R1bGVMb2FkZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+
CisKK0ByZXF1aXJlZAorCisvKiEgQGFic3RyYWN0IFByb3ZpZGVzIHNvdXJjZSBjb2RlIGZvciBh
bnkgSlMgbW9kdWxlIHRoYXQgaXMgYWN0aXZlbHkgaW1wb3J0ZWQuCisgQHBhcmFtIGNvbnRleHQg
VGhlIGNvbnRleHQgZm9yIHdoaWNoIHRoZSBtb2R1bGUgaXMgYmVpbmcgcmVxdWVzdGVkLgorIEBw
YXJhbSBpZGVudGlmaWVyIFRoZSByZXNvbHZlZCBpZGVudGlmaWVyIGZvciB0aGUgcmVxdWVzdGVk
IG1vZHVsZS4KKyBAcGFyYW0gcmVzb2x2ZSBBIEpTIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCB0aGUg
ZGVzaXJlZCBzY3JpcHQgZm9yIGlkZW50aWZpZXIuCisgQHBhcmFtIHJlamVjdCBBIEpTIGZ1bmN0
aW9uIHRvIGNhbGwgd2hlbiBpZGVudGlmaWVyIGNhbm5vdCBiZSBmZXRjaGVkLgorIEBkaXNjdXNz
aW9uIEN1cnJlbnRseSwgaWRlbnRpZmllciB3aWxsIGFsd2F5cyBiZSBhbiBhYnNvbHV0ZSBmaWxl
IFVSTCBjb21wdXRlZCBmcm9tIHNwZWNpZmllciBvZiB0aGUgcmVxdWVzdGVkIG1vZHVsZSByZWxh
dGl2ZSB0byB0aGUgVVJMIG9mIHRoZSByZXF1ZXN0aW5nIHNjcmlwdC4gSWYgdGhlIHJlcXVlc3Rp
bmcgc2NyaXB0IGRvZXMgbm90IGhhdmUgYSBVUkwgYW5kIHRoZSBtb2R1bGUgc3BlY2lmaWVyIGlz
IG5vdCBhbiBhYnNvbHV0ZSBwYXRoIHRoZSBtb2R1bGUgbG9hZGVyIHdpbGwgZmFpbCB0byBsb2Fk
IHRoZSBtb2R1bGUuCisKKyBUaGUgZmlyc3QgYXJndW1lbnQgdG8gcmVzb2x2ZSBzaG9sdWQgYWx3
YXlzIGJlIGEgSlNTY3JpcHQsIG90aGVyd2lzZSB0aGUgbW9kdWxlIGxvYWRlciB3aWxsIHJlamVj
dCB0aGUgbW9kdWxlLgorCisgT25jZSBhbiBpZGVudGlmaWVyIGhhcyBiZWVuIHJlc29sdmVkIG9y
IHJlamVjdGVkIGluIGEgZ2l2ZW4gY29udGV4dCBpdCB3aWxsIG5ldmVyIGJlIHJlcXVlc3RlZCBh
Z2Fpbi4gSWYgYSBzY3JpcHQgaXMgc3VjY2Vzc2Z1bGx5IGV2YWx1YXRlZCBpdCB3aWxsIG5vdCBi
ZSByZS1ldmFsdWF0ZWQgb24gYW55IHN1YnNlcXVlbnQgaW1wb3J0LgorCisgVGhlIFZNIHdpbGwg
cmV0YWluIGFsbCBldmFsdWF0ZWQgbW9kdWxlcyBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb250
ZXh0LgorICovCistICh2b2lkKWNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQgZmV0Y2hNb2R1
bGVGb3JJZGVudGlmaWVyOihKU1ZhbHVlICopaWRlbnRpZmllciB3aXRoUmVzb2x2ZUhhbmRsZXI6
KEpTVmFsdWUgKilyZXNvbHZlIGFuZFJlamVjdEhhbmRsZXI6KEpTVmFsdWUgKilyZWplY3Q7CisK
K0BlbmQKKwogQGludGVyZmFjZSBKU0NvbnRleHQoUHJpdmF0ZSkKIAogLyohCkBAIC01MCw2ICs3
MSw5IEBACiAqLwogQHByb3BlcnR5IChzZXR0ZXI9X3NldERlYnVnZ2VyUnVuTG9vcDopIENGUnVu
TG9vcFJlZiBfZGVidWdnZXJSdW5Mb29wIEpTQ19BUElfQVZBSUxBQkxFKG1hY29zeCgxMC4xMCks
IGlvcyg4LjApKTsKIAorLyohIEBhYnN0cmFjdCBUaGUgZGVsZWdhdGUgdGhlIGNvbnRleHQgd2ls
bCB1c2Ugd2hlbiB0cnlpbmcgdG8gbG9hZCBhIG1vZHVsZS4gTm90ZSwgdGhpcyBkZWxlZ2F0ZSB3
aWxsIGJlIGlnbm9yZWQgZm9yIGNvbnRleHRzIHJldHVybmVkIGJ5IFVJV2ViVmlldy4gKi8KK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrKSBpZCA8SlNNb2R1bGVMb2FkZXJEZWxlZ2F0ZT4gbW9k
dWxlTG9hZGVyRGVsZWdhdGUgSlNDX0FQSV9BVkFJTEFCTEUobWFjb3N4KEpTQ19NQUNfVEJBKSwg
aW9zKEpTQ19JT1NfVEJBKSk7CisKIEBlbmQKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ29udGV4dFJlZi5jcHAKaW5kZXggZTE4ZGZkMjFmZjI4NDAwN2QwMDM5ZTY0MzJk
OWVjM2M0ZjFmMzE3Ny4uOWY1ZmRhZmM3ODE5NmZlNDQ4YzE4ZDA3OTE1ZTA0ZmEzODY4NGFhYSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcApAQCAtMzAsOSAr
MzAsOSBAQAogI2luY2x1ZGUgIkFQSUNhc3QuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNp
bmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCisjaW5jbHVkZSAiSlNBUElHbG9iYWxPYmpl
Y3QuaCIKICNpbmNsdWRlICJKU0NhbGxiYWNrT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNDbGFzc1Jl
Zi5oIgotI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU291cmNlUHJvdmlkZXIuaCIKQEAg
LTEzOCw3ICsxMzgsNyBAQCBKU0dsb2JhbENvbnRleHRSZWYgSlNHbG9iYWxDb250ZXh0Q3JlYXRl
SW5Hcm91cChKU0NvbnRleHRHcm91cFJlZiBncm91cCwgSlNDbGFzcwogICAgIEpTTG9ja0hvbGRl
ciBsb2NrZXIodm0ucHRyKCkpOwogCiAgICAgaWYgKCFnbG9iYWxPYmplY3RDbGFzcykgewotICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gSlNHbG9iYWxPYmplY3Q6OmNyZWF0
ZSh2bS5nZXQoKSwgSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bS5nZXQoKSwganNO
dWxsKCkpKTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTQVBJR2xv
YmFsT2JqZWN0OjpjcmVhdGUodm0uZ2V0KCksIEpTQVBJR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1
Y3R1cmUodm0uZ2V0KCksIGpzTnVsbCgpKSk7CiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1Ip
CiAgICAgICAgIGlmIChKU1JlbW90ZUluc3BlY3RvckdldEluc3BlY3Rpb25FbmFibGVkQnlEZWZh
dWx0KCkpCiAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPnNldFJlbW90ZURlYnVnZ2luZ0VuYWJs
ZWQodHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTBj
YjYwOTA4OGVjODJmNzQ0YWE3MmE3Y2Q3YzFkOGUxMzg1M2M4NwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQuaApAQCAtMCwwICsxLDYyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSlNWYWx1ZS5oPgorCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKworTlNf
QVNTVU1FX05PTk5VTExfQkVHSU4KKworT0JKQ19DTEFTUyBKU1ZpcnR1YWxNYWNoaW5lOworCitK
U0NfQ0xBU1NfQVZBSUxBQkxFKG1hY29zeChKU0NfTUFDX1RCQSksIGlvcyhKU0NfSU9TX1RCQSkp
CitAaW50ZXJmYWNlIEpTU2NyaXB0IDogTlNPYmplY3QKKworLyohCisgQG1ldGhvZAorIEBhYnN0
cmFjdCBDcmVhdGUgYSBKU1NjcmlwdCBmb3IgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIG1hY2hpbmUu
CisgQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIGNvZGUgdG8gdXNlIHdoZW4gdGhlIHNjcmlwdCBp
cyBldmFsdWF0ZWQgYnkgdGhlIEpTIHZtLgorIEBwYXJhbSB2bSBUaGUgSlNWaXJ0dWFsTWFjaGlu
ZSB0aGUgc2NyaXB0IGNhbiBiZSBldmFsdWF0ZWQgaW4uCisgQHJlc3VsdCBUaGUgbmV3IHNjcmlw
dC4KKyAqLworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdFdpdGhTb3VyY2U6KE5TU3Ry
aW5nICopc291cmNlIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bTsKKwor
LyohCisgQG1ldGhvZAorIEBhYnN0cmFjdCBDcmVhdGUgYSBKU1NjcmlwdCBmb3IgdGhlIHNwZWNp
ZmllZCB2aXJ0dWFsIG1hY2hpbmUgd2l0aCBhIHBhdGggdG8gYSBjb2Rlc2lnbmluZyBhbmQgYnl0
ZWNvZGUgY2FjaGluZy4KKyBAcGFyYW0gZmlsZVBhdGggQSBVUkwgY29udGFpbmluZyB0aGUgcGF0
aCB0byBhIEpTIHNvdXJjZSBjb2RlIGZpbGUgb24gZGlzay4KKyBAcGFyYW0gdm0gVGhlIEpTVmly
dHVhbE1hY2hpbmUgdGhlIHNjcmlwdCBjYW4gYmUgZXZhbHVhdGVkIGluLgorIEBwYXJhbSBjb2Rl
U2lnbmluZ1BhdGggQSBVUkwgY29udGFpbmluZyB0aGUgcGF0aCB0byB0aGUgY29kZVNpZ25pbmcg
ZmlsZSBmb3IgZmlsZVBhdGggb24gZGlzay4KKyBAcGFyYW0gY2FjaGVQYXRoIEEgVVJMIGNvbnRh
aW5pbmcgdGhlIHBhdGggd2hlcmUgdGhlIFZNIHNob3VsZCBjYWNoZSBmb3IgZnV0dXJlIGV4ZWN1
dGlvbi4KKyBAcmVzdWx0IFRoZSBuZXcgc2NyaXB0LgorIEBkaXNjdXNzaW9uIHRoZSBmaWxlcyBh
dCBmaWxlUGF0aCwgY29kZVNpZ25pbmdQYXRoLCBhbmQgY2FjaGVQYXRoIHNob3VsZCBub3QgYmUg
ZXh0ZXJuYWxseSBtb2RpZmllZCAgZm9yIHRoZSBsaWZlY3ljbGUgb2Ygdm0uIE5vdGUgdGhhdCBj
b2RlU2lnbmluZ1BhdGggYW5kIGNhY2hlUGF0aCBhcmUgbm90IHVzZWQgY3VycmVudGx5LCBidXQg
dGhhdCB3aWxsIGNoYW5nZSBpbiB0aGUgbmVhciBmdXR1cmUuCisgKi8KKysgKG51bGxhYmxlIGlu
c3RhbmNldHlwZSlzY3JpcHRGcm9tVVRGOEZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0dWFs
TWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhDb2RlU2lnbmluZzoobnVsbGFibGUg
TlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZToobnVsbGFibGUgTlNVUkwg
KiljYWNoZVBhdGg7CisKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECisKKyNlbmRpZiAv
LyBKU0NfT0JKQ19BUElfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1NjcmlwdC5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQubW0K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNzk2YzQxZWY5ZWNjMzk4NDcwMDZjZmIxYjY1NzNjNTM0OWQzZmRkZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQubW0KQEAg
LTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkpTU2NyaXB0SW50ZXJuYWwuaCIKKwor
I2ltcG9ydCAiQVBJQ2FzdC5oIgorI2ltcG9ydCAiSlNDb250ZXh0SW50ZXJuYWwuaCIKKyNpbXBv
cnQgIkpTVmFsdWVQcml2YXRlLmgiCisjaW1wb3J0ICJTeW1ib2wuaCIKKworI2lmIEpTQ19PQkpD
X0FQSV9FTkFCTEVECisKK0BpbXBsZW1lbnRhdGlvbiBKU1NjcmlwdCB7CisgICAgU3RyaW5nIG1f
c291cmNlOworfQorCisrIChpbnN0YW5jZXR5cGUpc2NyaXB0V2l0aFNvdXJjZTooTlNTdHJpbmcg
Kilzb3VyY2UgaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtCit7CisgICAg
VU5VU0VEX1BBUkFNKHZtKTsKKyAgICBKU1NjcmlwdCAqcmVzdWx0ID0gW1tKU1NjcmlwdCBhbGxv
Y10gaW5pdF07CisgICAgcmVzdWx0LT5tX3NvdXJjZSA9IHNvdXJjZTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3I+CitzdGF0aWMgYm9vbCBmaWxsQnVm
ZmVyV2l0aENvbnRlbnRzT2ZGaWxlKEZJTEUqIGZpbGUsIFZlY3RvciYgYnVmZmVyKQoreworICAg
IC8vIFdlIG1pZ2h0IGhhdmUgaW5qZWN0ZWQgInVzZSBzdHJpY3QiOyBhdCB0aGUgdG9wLgorICAg
IHNpemVfdCBpbml0aWFsU2l6ZSA9IGJ1ZmZlci5zaXplKCk7CisgICAgaWYgKGZzZWVrKGZpbGUs
IDAsIFNFRUtfRU5EKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGxvbmcgYnVm
ZmVyQ2FwYWNpdHkgPSBmdGVsbChmaWxlKTsKKyAgICBpZiAoYnVmZmVyQ2FwYWNpdHkgPT0gLTEp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZnNlZWsoZmlsZSwgMCwgU0VFS19TRVQp
ID09IC0xKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYnVmZmVyLnJlc2l6ZShidWZmZXJD
YXBhY2l0eSArIGluaXRpYWxTaXplKTsKKyAgICBzaXplX3QgcmVhZFNpemUgPSBmcmVhZChidWZm
ZXIuZGF0YSgpICsgaW5pdGlhbFNpemUsIDEsIGJ1ZmZlci5zaXplKCksIGZpbGUpOworICAgIHJl
dHVybiByZWFkU2l6ZSA9PSBidWZmZXIuc2l6ZSgpIC0gaW5pdGlhbFNpemU7Cit9CisKK3N0YXRp
YyBib29sIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSwgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgRklMRSogZiA9IGZvcGVuKGZpbGVOYW1l
LnV0ZjgoKS5kYXRhKCksICJyYiIpOworICAgIGlmICghZikgeworICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkNvdWxkIG5vdCBvcGVuIGZpbGU6ICVzXG4iLCBmaWxlTmFtZS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgcmVzdWx0ID0gZmls
bEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShmLCBidWZmZXIpOworICAgIGZjbG9zZShmKTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworKyAoaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21VVEY4
RmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5l
ICopdm0gd2l0aENvZGVTaWduaW5nOihOU1VSTCAqKWNvZGVTaWduaW5nUGF0aCBhbmRCeXRlY29k
ZUNhY2hlOihOU1VSTCAqKWNhY2hlUGF0aAoreworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBj
aGVjayBjb2RlU2lnbmluZy4KKyAgICBVTlVTRURfUEFSQU0oY29kZVNpZ25pbmdQYXRoKTsKKyAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWN0dWFsbHkgY2FjaGUgYnl0ZWNvZGUuCisgICAgVU5V
U0VEX1BBUkFNKGNhY2hlUGF0aCk7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBVUkwgZmls
ZVBhdGhVUkwoW2ZpbGVQYXRoIGFic29sdXRlVVJMXSk7CisgICAgaWYgKCFmaWxlUGF0aFVSTC5p
c0xvY2FsRmlsZSgpKQorICAgICAgICByZXR1cm4gbmlsOworICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBtbWFwIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBpbnN0ZWFkIG9mIGNvcHlpbmcgaXQg
aW50byBkaXJ0eSBtZW1vcnkuCisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICBpZiAoIWZp
bGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZVBhdGhVUkwuZmlsZVN5c3RlbVBhdGgoKSwg
YnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIEpTU2NyaXB0ICpyZXN1bHQgPSBb
W0pTU2NyaXB0IGFsbG9jXSBpbml0XTsKKyAgICByZXN1bHQtPm1fc291cmNlID0gU3RyaW5nOjpm
cm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhidWZmZXIuZGF0YSgpLCBidWZmZXIuc2l6ZSgpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitjb25zdCBTdHJpbmcmIGdldEpTU2NyaXB0U291cmNl
Q29kZShKU1NjcmlwdCAqbW9kdWxlKSB7IHJldHVybiBtb2R1bGUtPm1fc291cmNlOyB9CisKK0Bl
bmQKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNT
Y3JpcHRJbnRlcm5hbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVy
bmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNTRmZGZhZTAwYzc0NmI5OTU4MmI5NmM4MTkwMDdlYmRkOGJlNWE4
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRJ
bnRlcm5hbC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCAiSlNTY3JpcHQuaCIKKyNp
bXBvcnQgIlNvdXJjZUNvZGUuaCIKKworCitjb25zdCBTdHJpbmcmIGdldEpTU2NyaXB0U291cmNl
Q29kZShKU1NjcmlwdCAqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNWYWx1ZUludGVybmFsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVJbnRl
cm5hbC5oCmluZGV4IDRmMWE4ZjY5Y2JmY2MyOWFlYjI2NzQ3MzgxZDhkNWY1ZTgxYmFlYWEuLjU0
Yjc1NWVmZmZlNmVkMjRhNWMzMDIyYjdkNGMzYTE4NTAwYjAxZTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZUludGVybmFsLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1ZhbHVlSW50ZXJuYWwuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw4ICsyNiw3IEBACiAjaWZuZGVmIEpT
VmFsdWVJbnRlcm5hbF9oCiAjZGVmaW5lIEpTVmFsdWVJbnRlcm5hbF9oCiAKLSNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9K
U1ZhbHVlLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUHJpdmF0ZS5oPgogCiAj
aWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgKaW5kZXggNWNhOWE3ZjRhMTA3MDQ0ZDYw
OWIxMTI3N2JlODk3NmE0MzY3YWE5Yi4uOTEyMmVkNDlhNGVhMWFhNDllYzY2N2ZlZjY2MjdmYzQz
Yjc3NzE2ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxN
YWNoaW5lSW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVh
bE1hY2hpbmVJbnRlcm5hbC5oCkBAIC00Niw4ICs0Niw4IEBAIEpTQ29udGV4dEdyb3VwUmVmIGdl
dEdyb3VwRnJvbVZpcnR1YWxNYWNoaW5lKEpTVmlydHVhbE1hY2hpbmUgKik7CiAKIC0gKEpTQ29u
dGV4dCAqKWNvbnRleHRGb3JHbG9iYWxDb250ZXh0UmVmOihKU0dsb2JhbENvbnRleHRSZWYpZ2xv
YmFsQ29udGV4dDsKIC0gKHZvaWQpYWRkQ29udGV4dDooSlNDb250ZXh0ICopd3JhcHBlciBmb3JH
bG9iYWxDb250ZXh0UmVmOihKU0dsb2JhbENvbnRleHRSZWYpZ2xvYmFsQ29udGV4dDsKLQogQGVu
ZAorCiAjZW5kaWYgLy8gZGVmaW5lZChfX09CSkNfXykKIAogdm9pZCBzY2FuRXh0ZXJuYWxPYmpl
Y3RHcmFwaChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRvciYsIHZvaWQqIHJvb3QpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCmluZGV4IDM3ZTEzODVjOGM0ODRl
ZmFlOGE5YzNmOTJlMTM1Y2E3M2Y5NTkxOTIuLjQzNWZkYmIzNmQyNDQ2ZTg1ZGI1MzEzNjMzY2Q3
NjRmZWY3OTk4YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMv
dGVzdGFwaS5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGku
bW0KQEAgLTMxLDcgKzMxLDkgQEAKICNpbXBvcnQgIkRGR1dvcmtsaXN0LmgiCiAjaW1wb3J0ICJE
YXRlVGVzdHMuaCIKICNpbXBvcnQgIkpTQ2FzdC5oIgorI2ltcG9ydCAiSlNDb250ZXh0UHJpdmF0
ZS5oIgogI2ltcG9ydCAiSlNFeHBvcnRUZXN0cy5oIgorI2ltcG9ydCAiSlNTY3JpcHQuaCIKICNp
bXBvcnQgIkpTVmFsdWVQcml2YXRlLmgiCiAjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJu
YWwuaCIKICNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmVQcml2YXRlLmgiCkBAIC0xODEyLDEyICsx
ODE0LDI0OCBAQCBzdGF0aWMgdm9pZCBwYXJhbGxlbFByb21pc2VSZXNvbHZlVGVzdCgpCiAgICAg
fQogfQogCit0eXBlZGVmIEpTVmFsdWUgKiheUmVzb2x2ZUJsb2NrKShKU0NvbnRleHQgKiwgSlNW
YWx1ZSAqLCBKU1NjcmlwdCAqKTsKK3R5cGVkZWYgdm9pZCAoXkZldGNoQmxvY2spKEpTQ29udGV4
dCAqLCBKU1ZhbHVlICosIEpTVmFsdWUgKiwgSlNWYWx1ZSAqKTsKKworQGludGVyZmFjZSBKU0Nv
bnRleHRGZXRjaERlbGVnYXRlIDogSlNDb250ZXh0IDxKU01vZHVsZUxvYWRlckRlbGVnYXRlPgor
CisrIChpbnN0YW5jZXR5cGUpY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOihGZXRjaEJsb2NrKWJs
b2NrOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBKU0NvbnRleHRGZXRjaERlbGVnYXRlIHsK
KyAgICBGZXRjaEJsb2NrIG1fZmV0Y2hCbG9jazsKK30KKworKyAoaW5zdGFuY2V0eXBlKWNvbnRl
eHRXaXRoQmxvY2tGb3JGZXRjaDooRmV0Y2hCbG9jaylibG9jaworeworICAgIGF1dG8gKnJlc3Vs
dCA9IFtbSlNDb250ZXh0RmV0Y2hEZWxlZ2F0ZSBhbGxvY10gaW5pdF07CisgICAgcmVzdWx0LT5t
X2ZldGNoQmxvY2sgPSBibG9jazsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCistICh2b2lkKWNv
bnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQgZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyOihKU1Zh
bHVlICopaWRlbnRpZmllciB3aXRoUmVzb2x2ZUhhbmRsZXI6KEpTVmFsdWUgKilyZXNvbHZlIGFu
ZFJlamVjdEhhbmRsZXI6KEpTVmFsdWUgKilyZWplY3QKK3sKKyAgICBtX2ZldGNoQmxvY2soY29u
dGV4dCwgaWRlbnRpZmllciwgcmVzb2x2ZSwgcmVqZWN0KTsKK30KKworQGVuZAorCitzdGF0aWMg
dm9pZCBjaGVja01vZHVsZUNvZGVSYW4oSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICpwcm9t
aXNlLCBKU1ZhbHVlICpleHBlY3RlZCkKK3sKKyAgICBfX2Jsb2NrIEJPT0wgcHJvbWlzZVdhc1Jl
c29sdmVkID0gZmFsc2U7CisgICAgW3Byb21pc2UgaW52b2tlTWV0aG9kOkAidGhlbiIgd2l0aEFy
Z3VtZW50czpAW14oSlNWYWx1ZSAqZXhwb3J0VmFsdWUpIHsKKyAgICAgICAgcHJvbWlzZVdhc1Jl
c29sdmVkID0gdHJ1ZTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJtb2R1bGUgZXhwb3J0ZWQgdmFs
dWUgJ2V4cCcgaXMgbnVsbCIsIFtleHBvcnRWYWx1ZVtAImV4cCJdIGlzRXF1YWxUb09iamVjdDpl
eHBlY3RlZF0pOworICAgICAgICBjaGVja1Jlc3VsdChAInJhbiBpcyAlQCIsIFtjb250ZXh0W0Ai
cmFuIl0gaXNFcXVhbFRvT2JqZWN0OmV4cGVjdGVkXSk7CisgICAgfSwgXihKU1ZhbHVlICplcnJv
cikgeworICAgICAgICBOU0xvZyhAIiVAIiwgW2Vycm9yIHRvU3RyaW5nXSk7CisgICAgICAgIGNo
ZWNrUmVzdWx0KEAibW9kdWxlIGdyYXBoIHdhcyByZXNvbHZlZCBhcyBleHBlY3RlZCIsIE5PKTsK
KyAgICB9XV07CisgICAgY2hlY2tSZXN1bHQoQCJQcm9taXNlIHdhcyByZXNvbHZlZCIsIHByb21p
c2VXYXNSZXNvbHZlZCk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrTW9kdWxlV2FzUmVqZWN0ZWQo
SlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICpwcm9taXNlKQoreworICAgIF9fYmxvY2sgQk9P
TCBwcm9taXNlV2FzUmVqZWN0ZWQgPSBmYWxzZTsKKyAgICBbcHJvbWlzZSBpbnZva2VNZXRob2Q6
QCJ0aGVuIiB3aXRoQXJndW1lbnRzOkBbXigpIHsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJtb2R1
bGUgd2FzIHJlamVjdGVkIGFzIGV4cGVjdGVkIiwgTk8pOworICAgIH0sIF4oSlNWYWx1ZSAqZXJy
b3IpIHsKKyAgICAgICAgcHJvbWlzZVdhc1JlamVjdGVkID0gdHJ1ZTsKKyAgICAgICAgTlNMb2co
QCIlQCIsIFtlcnJvciB0b1N0cmluZ10pOworICAgICAgICBjaGVja1Jlc3VsdChAIm1vZHVsZSBn
cmFwaCB3YXMgcmVqZWN0ZWQgd2l0aCBlcnJvciIsICFbZXJyb3IgaXNFcXVhbFdpdGhUeXBlQ29l
cmNpb25Ub09iamVjdDpbSlNWYWx1ZSB2YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRleHRdXSk7
CisgICAgfV1dOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmV0Y2goKQoreworICAgIEBhdXRvcmVs
ZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZldGNoRGVsZWdh
dGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl4oSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVl
ICppZGVudGlmaWVyLCBKU1ZhbHVlICpyZXNvbHZlLCBKU1ZhbHVlICpyZWplY3QpIHsKKyAgICAg
ICAgICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL2RpcmVjdG9y
eS9iYXIuanMiXSkKKyAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpA
W1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNlOkAiaW1wb3J0IFwiLi4vZm9vLmpzXCI7IGV4cG9y
dCBsZXQgZXhwID0gbnVsbDsiIGluVmlydHVhbE1hY2hpbmU6W2NvbnRleHQgdmlydHVhbE1hY2hp
bmVdXV1dOworICAgICAgICAgICAgZWxzZSBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0
OkAiZmlsZTovLy9mb28uanMiXSkKKyAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFy
Z3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNlOkAiZ2xvYmFsVGhpcy5yYW4gPSBu
dWxsOyIgaW5WaXJ0dWFsTWFjaGluZTpbY29udGV4dCB2aXJ0dWFsTWFjaGluZV1dXV07CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgW3JlamVjdCBjYWxsV2l0aEFyZ3VtZW50czpA
W1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6QCJXZWlyZCBwYXRoIiBpbkNv
bnRleHQ6Y29udGV4dF1dXTsKKyAgICAgICAgfV07CisgICAgICAgIGNvbnRleHQubW9kdWxlTG9h
ZGVyRGVsZWdhdGUgPSBjb250ZXh0OworICAgICAgICBKU1ZhbHVlICpwcm9taXNlID0gW2NvbnRl
eHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy4vYmFyLmpzJyk7IiB3aXRoU291cmNlVVJMOltO
U1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvZGlyZWN0b3J5IiBpc0RpcmVjdG9yeTpZRVNdXTsKKyAg
ICAgICAgSlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE51bGxJbkNvbnRleHQ6Y29u
dGV4dF07CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCBwcm9taXNlLCBudWxs
KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGZXRjaFdpdGhUd29DeWNsZSgpCit7Cisg
ICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0
RmV0Y2hEZWxlZ2F0ZSBjb250ZXh0V2l0aEJsb2NrRm9yRmV0Y2g6XihKU0NvbnRleHQgKmNvbnRl
eHQsIEpTVmFsdWUgKmlkZW50aWZpZXIsIEpTVmFsdWUgKnJlc29sdmUsIEpTVmFsdWUgKnJlamVj
dCkgeworICAgICAgICAgICAgaWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZpbGU6
Ly8vZGlyZWN0b3J5L2Jhci5qcyJdKQorICAgICAgICAgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRo
QXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlwdFdpdGhTb3VyY2U6QCJpbXBvcnQgeyBuIH0gZnJv
bSBcIi4uL2Zvby5qc1wiOyBleHBvcnQgbGV0IGV4cCA9IG47IiBpblZpcnR1YWxNYWNoaW5lOltj
b250ZXh0IHZpcnR1YWxNYWNoaW5lXV1dXTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFtpZGVudGlm
aWVyIGlzRXF1YWxUb09iamVjdDpAImZpbGU6Ly8vZm9vLmpzIl0pCisgICAgICAgICAgICAgICAg
W3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0V2l0aFNvdXJjZTpA
ImltcG9ydCBcImRpcmVjdG9yeS9iYXIuanNcIjsgZ2xvYmFsVGhpcy5yYW4gPSBudWxsOyBleHBv
cnQgbGV0IG4gPSBudWxsOyIgaW5WaXJ0dWFsTWFjaGluZTpbY29udGV4dCB2aXJ0dWFsTWFjaGlu
ZV1dXV07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgW3JlamVjdCBjYWxsV2l0
aEFyZ3VtZW50czpAW1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6QCJXZWly
ZCBwYXRoIiBpbkNvbnRleHQ6Y29udGV4dF1dXTsKKyAgICAgICAgfV07CisgICAgICAgIGNvbnRl
eHQubW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBjb250ZXh0OworICAgICAgICBKU1ZhbHVlICpwcm9t
aXNlID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy4vYmFyLmpzJyk7IiB3aXRo
U291cmNlVVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvZGlyZWN0b3J5IiBpc0RpcmVjdG9y
eTpZRVNdXTsKKyAgICAgICAgSlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE51bGxJ
bkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCBw
cm9taXNlLCBudWxsKTsKKyAgICB9Cit9CisKKworc3RhdGljIHZvaWQgdGVzdEZldGNoV2l0aFRo
cmVlQ3ljbGUoKQoreworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250
ZXh0ID0gW0pTQ29udGV4dEZldGNoRGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl4o
SlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICppZGVudGlmaWVyLCBKU1ZhbHVlICpyZXNvbHZl
LCBKU1ZhbHVlICpyZWplY3QpIHsKKyAgICAgICAgICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFs
VG9PYmplY3Q6QCJmaWxlOi8vL2RpcmVjdG9yeS9iYXIuanMiXSkKKyAgICAgICAgICAgICAgICBb
cmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNlOkAi
aW1wb3J0IHsgbiB9IGZyb20gXCIuLi9mb28uanNcIjsgZXhwb3J0IGxldCBmb28gPSBuOyIgaW5W
aXJ0dWFsTWFjaGluZTpbY29udGV4dCB2aXJ0dWFsTWFjaGluZV1dXV07CisgICAgICAgICAgICBl
bHNlIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL2Zvby5qcyJdKQor
ICAgICAgICAgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0IHNj
cmlwdFdpdGhTb3VyY2U6QCJpbXBvcnQgXCJvdGhlckRpcmVjdG9yeS9iYXouanNcIjsgZXhwb3J0
IGxldCBuID0gbnVsbDsiIGluVmlydHVhbE1hY2hpbmU6W2NvbnRleHQgdmlydHVhbE1hY2hpbmVd
XV1dOworICAgICAgICAgICAgZWxzZSBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0OkAi
ZmlsZTovLy9vdGhlckRpcmVjdG9yeS9iYXouanMiXSkKKyAgICAgICAgICAgICAgICBbcmVzb2x2
ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNlOkAiaW1wb3J0
IHsgZm9vIH0gZnJvbSBcIi4uL2RpcmVjdG9yeS9iYXIuanNcIjsgZ2xvYmFsVGhpcy5yYW4gPSBu
dWxsOyBleHBvcnQgbGV0IGV4cCA9IGZvbzsiIGluVmlydHVhbE1hY2hpbmU6W2NvbnRleHQgdmly
dHVhbE1hY2hpbmVdXV1dOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFtyZWpl
Y3QgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZyb21NZXNz
YWdlOkAiV2VpcmQgcGF0aCIgaW5Db250ZXh0OmNvbnRleHRdXV07CisgICAgICAgIH1dOworICAg
ICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAgICAgSlNW
YWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0KCcuLi9vdGhl
ckRpcmVjdG9yeS9iYXouanMnKTsiIHdpdGhTb3VyY2VVUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0
aDpAIi9kaXJlY3RvcnkiIGlzRGlyZWN0b3J5OllFU11dOworICAgICAgICBKU1ZhbHVlICpudWxs
ID0gW0pTVmFsdWUgdmFsdWVXaXRoTnVsbEluQ29udGV4dDpjb250ZXh0XTsKKyAgICAgICAgY2hl
Y2tNb2R1bGVDb2RlUmFuKGNvbnRleHQsIHByb21pc2UsIG51bGwpOworICAgIH0KK30KKworc3Rh
dGljIHZvaWQgdGVzdExvYWRlclJlc29sdmVzQWJzb2x1dGVTY3JpcHRVUkwoKQoreworICAgIEBh
dXRvcmVsZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZldGNo
RGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl4oSlNDb250ZXh0ICpjb250ZXh0LCBK
U1ZhbHVlICppZGVudGlmaWVyLCBKU1ZhbHVlICpyZXNvbHZlLCBKU1ZhbHVlICpyZWplY3QpIHsK
KyAgICAgICAgICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL2Rp
cmVjdG9yeS9iYXIuanMiXSkKKyAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3Vt
ZW50czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNlOkAiZXhwb3J0IGxldCBleHAgPSBudWxs
OyBnbG9iYWxUaGlzLnJhbiA9IG51bGw7IiBpblZpcnR1YWxNYWNoaW5lOltjb250ZXh0IHZpcnR1
YWxNYWNoaW5lXV1dXTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBbcmVqZWN0
IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTVmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2Fn
ZTpAIldlaXJkIHBhdGgiIGluQ29udGV4dDpjb250ZXh0XV1dOworICAgICAgICB9XTsKKyAgICAg
ICAgY29udGV4dC5tb2R1bGVMb2FkZXJEZWxlZ2F0ZSA9IGNvbnRleHQ7CisgICAgICAgIEpTVmFs
dWUgKnByb21pc2UgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImltcG9ydCgnL2RpcmVjdG9y
eS9iYXIuanMnKTsiXTsKKyAgICAgICAgSlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVlIHZhbHVlV2l0
aE51bGxJbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250
ZXh0LCBwcm9taXNlLCBudWxsKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkZXJS
ZWplY3RzTmlsU2NyaXB0VVJMKCkKK3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAg
YXV0byAqY29udGV4dCA9IFtKU0NvbnRleHRGZXRjaERlbGVnYXRlIGNvbnRleHRXaXRoQmxvY2tG
b3JGZXRjaDpeKEpTQ29udGV4dCAqLCBKU1ZhbHVlICosIEpTVmFsdWUgKiwgSlNWYWx1ZSAqKSB7
CisgICAgICAgICAgICBjaGVja1Jlc3VsdChAIkNvZGUgaXMgbm90IHJ1biIsIE5PKTsKKyAgICAg
ICAgfV07CisgICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBjb250ZXh0Owor
ICAgICAgICBKU1ZhbHVlICpwcm9taXNlID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBv
cnQoJy4uL290aGVyRGlyZWN0b3J5L2Jhei5qcycpOyJdOworICAgICAgICBjaGVja01vZHVsZVdh
c1JlamVjdGVkKGNvbnRleHQsIHByb21pc2UpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGVz
dExvYWRlclJlamVjdHNGYWlsZWRGZXRjaCgpCit7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7Cisg
ICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0RmV0Y2hEZWxlZ2F0ZSBjb250ZXh0V2l0
aEJsb2NrRm9yRmV0Y2g6XihKU0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWUgKiwgSlNWYWx1ZSAq
LCBKU1ZhbHVlICpyZWplY3QpIHsKKyAgICAgICAgICAgIFtyZWplY3QgY2FsbFdpdGhBcmd1bWVu
dHM6QFtbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZyb21NZXNzYWdlOkAiTm9wZSIgaW5Db250
ZXh0OmNvbnRleHRdXV07CisgICAgICAgIH1dOworICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRl
ckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0
IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0KCcvb3RoZXJEaXJlY3RvcnkvYmF6LmpzJyk7Il07Cisg
ICAgICAgIGNoZWNrTW9kdWxlV2FzUmVqZWN0ZWQoY29udGV4dCwgcHJvbWlzZSk7CisgICAgfQor
fQorCitzdGF0aWMgdm9pZCB0ZXN0SW1wb3J0TW9kdWxlVHdpY2UoKQoreworICAgIEBhdXRvcmVs
ZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZldGNoRGVsZWdh
dGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl4oSlNDb250ZXh0ICogY29udGV4dCwgSlNWYWx1
ZSAqLCBKU1ZhbHVlICpyZXNvbHZlLCBKU1ZhbHVlICopIHsKKyAgICAgICAgICAgIFtyZXNvbHZl
IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlwdFdpdGhTb3VyY2U6QCJyYW4rKzsg
ZXhwb3J0IGxldCBleHAgPSAxOyIgaW5WaXJ0dWFsTWFjaGluZTpbY29udGV4dCB2aXJ0dWFsTWFj
aGluZV1dXV07CisgICAgICAgIH1dOworICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVn
YXRlID0gY29udGV4dDsKKyAgICAgICAgY29udGV4dFtAInJhbiJdID0gQCgwKTsKKyAgICAgICAg
SlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0KCcvYmF6
LmpzJyk7Il07CisgICAgICAgIEpTVmFsdWUgKnByb21pc2UyID0gW2NvbnRleHQgZXZhbHVhdGVT
Y3JpcHQ6QCJpbXBvcnQoJy9iYXouanMnKTsiXTsKKyAgICAgICAgSlNWYWx1ZSAqb25lID0gW0pT
VmFsdWUgdmFsdWVXaXRoSW50MzI6MSBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNoZWNr
TW9kdWxlQ29kZVJhbihjb250ZXh0LCBwcm9taXNlLCBvbmUpOworICAgICAgICBjaGVja01vZHVs
ZUNvZGVSYW4oY29udGV4dCwgcHJvbWlzZTIsIG9uZSk7CisgICAgfQorfQorCitAaW50ZXJmYWNl
IEpTQ29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0ZSA6IEpTQ29udGV4dCA8SlNNb2R1bGVMb2FkZXJE
ZWxlZ2F0ZT4KKworKyAoaW5zdGFuY2V0eXBlKW5ld0NvbnRleHQ7CisKK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIEpTQ29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0ZSB7Cit9CisKKysgKGluc3RhbmNl
dHlwZSluZXdDb250ZXh0Cit7CisgICAgYXV0byAqcmVzdWx0ID0gW1tKU0NvbnRleHRGaWxlTG9h
ZGVyRGVsZWdhdGUgYWxsb2NdIGluaXRdOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRp
YyBOU1VSTCAqcmVzb2x2ZVBhdGhUb1NjcmlwdHMoKQoreworICAgIE5TU3RyaW5nICphcmcwID0g
TlNQcm9jZXNzSW5mby5wcm9jZXNzSW5mby5hcmd1bWVudHNbMF07CisgICAgTlNVUkwgKmJhc2U7
CisgICAgaWYgKFthcmcwIGhhc1ByZWZpeDpAIi8iXSkKKyAgICAgICAgYmFzZSA9IFtOU1VSTCBm
aWxlVVJMV2l0aFBhdGg6YXJnMCBpc0RpcmVjdG9yeTpOT107CisgICAgZWxzZSB7CisgICAgICAg
IGNvbnN0IHNpemVfdCBtYXhMZW5ndGggPSAxMDAwMDsKKyAgICAgICAgY2hhciBjd2RbbWF4TGVu
Z3RoXTsKKyAgICAgICAgaWYgKCFnZXRjd2QoY3dkLCBtYXhMZW5ndGgpKSB7CisgICAgICAgICAg
ICBOU0xvZyhAImdldGN3ZCBlcnJvcmVkIHdpdGggY29kZTogJXMiLCBzdHJlcnJvcihlcnJubykp
OworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgICBOU1VSTCAqY3dkVVJM
ID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVz
IiwgY3dkXV07CisgICAgICAgIGJhc2UgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOmFyZzAgaXNE
aXJlY3Rvcnk6Tk8gcmVsYXRpdmVUb1VSTDpjd2RVUkxdOworICAgIH0KKyAgICByZXR1cm4gW05T
VVJMIGZpbGVVUkxXaXRoUGF0aDpAIi4vdGVzdGFwaVNjcmlwdHMvIiBpc0RpcmVjdG9yeTpZRVMg
cmVsYXRpdmVUb1VSTDpiYXNlXTsKK30KKworLSAodm9pZCljb250ZXh0OihKU0NvbnRleHQgKilj
b250ZXh0IGZldGNoTW9kdWxlRm9ySWRlbnRpZmllcjooSlNWYWx1ZSAqKWlkZW50aWZpZXIgd2l0
aFJlc29sdmVIYW5kbGVyOihKU1ZhbHVlICopcmVzb2x2ZSBhbmRSZWplY3RIYW5kbGVyOihKU1Zh
bHVlICopcmVqZWN0Cit7CisgICAgTlNVUkwgKmZpbGVQYXRoID0gW05TVVJMIFVSTFdpdGhTdHJp
bmc6W2lkZW50aWZpZXIgdG9TdHJpbmddXTsKKyAgICBhdXRvICpzY3JpcHQgPSBbSlNTY3JpcHQg
c2NyaXB0RnJvbVVURjhGaWxlOmZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6W2NvbnRleHQgdmly
dHVhbE1hY2hpbmVdIHdpdGhDb2RlU2lnbmluZzpuaWwgYW5kQnl0ZWNvZGVDYWNoZTpuaWxdOwor
ICAgIGlmIChzY3JpcHQpCisgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbc2Ny
aXB0XV07CisgICAgZWxzZQorICAgICAgICBbcmVqZWN0IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pT
VmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpAIlVuYWJsZSB0byBjcmVhdGUgU2Ny
aXB0IiBpbkNvbnRleHQ6Y29udGV4dF1dXTsKK30KKworQGVuZAorCitzdGF0aWMgdm9pZCB0ZXN0
TG9hZEJhc2ljRmlsZSgpCit7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIGF1dG8g
KmNvbnRleHQgPSBbSlNDb250ZXh0RmlsZUxvYWRlckRlbGVnYXRlIG5ld0NvbnRleHRdOworICAg
ICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAgICAgSlNW
YWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0KCcuL2Jhc2lj
LmpzJyk7IiB3aXRoU291cmNlVVJMOnJlc29sdmVQYXRoVG9TY3JpcHRzKCldOworICAgICAgICBK
U1ZhbHVlICpudWxsID0gW0pTVmFsdWUgdmFsdWVXaXRoTnVsbEluQ29udGV4dDpjb250ZXh0XTsK
KyAgICAgICAgY2hlY2tNb2R1bGVDb2RlUmFuKGNvbnRleHQsIHByb21pc2UsIG51bGwpOworICAg
IH0KK30KKwogdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSgpCiB7CiAgICAgTlNMb2coQCJUZXN0aW5n
IE9iamVjdGl2ZS1DIEFQSSIpOworCiAgICAgY2hlY2tOZWdhdGl2ZU5TSW50ZWdlcnMoKTsKICAg
ICBydW5KSVRUaHJlYWRMaW1pdFRlc3RzKCk7CiAKKyAgICB0ZXN0TG9hZGVyUmVzb2x2ZXNBYnNv
bHV0ZVNjcmlwdFVSTCgpOworICAgIHRlc3RGZXRjaCgpOworICAgIHRlc3RGZXRjaFdpdGhUd29D
eWNsZSgpOworICAgIHRlc3RGZXRjaFdpdGhUaHJlZUN5Y2xlKCk7CisgICAgdGVzdEltcG9ydE1v
ZHVsZVR3aWNlKCk7CisKKyAgICB0ZXN0TG9hZGVyUmVqZWN0c05pbFNjcmlwdFVSTCgpOworICAg
IHRlc3RMb2FkZXJSZWplY3RzRmFpbGVkRmV0Y2goKTsKKworICAgIC8vIEZpbGUgbG9hZGluZwor
ICAgIHRlc3RMb2FkQmFzaWNGaWxlKCk7CisKICAgICBwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29s
dXRpb246OlJlc29sdmVFYWdlcik7CiAgICAgcHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9u
OjpSZWplY3RFYWdlcik7CiAgICAgcHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZXNv
bHZlTGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGYzZWYxYzQyMzgwYjNj
ZWYyZjAwZmFjNjU4ZTkyZTlkNmU3OTlmMDMuLjYzOGJkNzEwZTY4M2UxNjdjYWU5MWM1MDNiNDE4
ZTI0YWNmZjJlMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDU3LDYgKzEw
NTcsOCBAQAogCQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOUZCOEI5MUM5
OURBN0MwMDk0MEZBMSAvKiBKU0FycmF5SW5saW5lcy5oICovOyB9OwogCQk1M0I0QkQxMjFGNjhC
MzI1MDBEMkJFQTMgLyogV2FzbU9wcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTMzQjE1REUxREM3RjQ2MzAwNEQ1MDBBIC8qIFdhc21PcHMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0I2MDFFQzIw
MzRCOEM1MDA2QkU2NjcgLyogSlNDYXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1M0I2MDFFQjIwMzRCOEM1MDA2QkU2NjcgLyogSlNDYXN0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTNDM0Q1RTUy
MUVDRTc3MjAwODdGREZDIC8qIGJhc2ljLmpzIGluIENvcHkgU3VwcG9ydCBTY3JpcHQgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNDM0Q1RTQyMUVDRTZDRTAwODdGREZDIC8q
IGJhc2ljLmpzICovOyB9OworCQk1M0M0RjY2QjIxQjFBNDA5MDAyRkQwMDkgLyogSlNBUElHbG9i
YWxPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzQzRGNjZBMjFCMUE0MDkwMDJGRDAwOSAvKiBKU0FQSUdsb2JhbE9iamVjdC5oICovOyB9Owog
CQk1M0M2RkVFRjFFOEFERkE5MDBCMTg0MjUgLyogV2FzbU9wY29kZU9yaWdpbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNDNkZFRUUxRThBREZBOTAw
QjE4NDI1IC8qIFdhc21PcGNvZGVPcmlnaW4uaCAqLzsgfTsKIAkJNTNDQTczMEExRUE1MzNEODAw
NzYwNDlEIC8qIFdhc21CQlFQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1M0NBNzMwODFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJCUVBsYW4uaCAq
LzsgfTsKIAkJNTNENDQ0REMxREFGMDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNENDQ0REIx
REFGMDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5oICovOyB9OwpAQCAtMTA2NSw2
ICsxMDY3LDggQEAKIAkJNTNFOUUwQUMxRUFFODNERjAwRkVFMjUxIC8qIFdhc21NYWNoaW5lVGhy
ZWFkcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNF
OUUwQUExRUFFODNERTAwRkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFkcy5oICovOyB9OwogCQk1
M0U5RTBBRjFFQUVDNDU3MDBGRUUyNTEgLyogV2FzbVRpZXJVcENvdW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0U5RTBBRTFFQUVDNDU3MDBGRUUy
NTEgLyogV2FzbVRpZXJVcENvdW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNTNFQUZFMkYyMDhERkFCNDAwN0Q1MjRCIC8qIHRlc3RhcGkuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxRDRFMTkx
RjU5Q0REMjAwRUM4MzZDIC8qIHRlc3RhcGkuY3BwICovOyB9OworCQk1M0VFMDFCNjIxOEY2OTE2
MDBBRDFGOEQgLyogSlNTY3JpcHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzRUUwMUI1MjE4RjY5MEYwMEFEMUY4RCAvKiBKU1NjcmlwdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUzRUUwMUI4MjE4
RjdFRkYwMEFEMUY4RCAvKiBKU1NjcmlwdEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0VFMDFCNzIxOEY3RUZGMDBBRDFGOEQgLyogSlNT
Y3JpcHRJbnRlcm5hbC5oICovOyB9OwogCQk1M0YxMUY0MTIwOTEzOEQ3MDBFNDExQTcgLyogSlNJ
bW11dGFibGVCdXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzRjExRjQwMjA5MTM4RDcwMEU0MTFBNyAvKiBKU0ltbXV0YWJsZUJ1dHRlcmZs
eS5oICovOyB9OwogCQk1M0Y0MEU4NTFENThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rpb25zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU4NDFE
NThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rpb25zLmggKi87IH07CiAJCTUzRjQwRThCMUQ1OTAx
QkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNt
RnVuY3Rpb25QYXJzZXIuaCAqLzsgfTsKQEAgLTEyMTksNyArMTIyMyw3IEBACiAJCTg2RTNDNjE1
MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwRjE2N0JBQjg3MDA2RDc2MEEgLyog
SlNWaXJ0dWFsTWFjaGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywg
KTsgfTsgfTsKIAkJODZFM0M2MTcxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4dEludGVybmFs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYw
OTE2N0JBQjg3MDA2RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NkUzQzYxOTE2N0JBQkVFMDA2RDc2
MEEgLyogSlNXcmFwcGVyTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NkUzQzYwQzE2N0JBQjg3MDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLmggKi87
IH07Ci0JCTg2RTNDNjFCMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZhbHVlSW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjBFMTY3QkFC
ODcwMDZENzYwQSAvKiBKU1ZhbHVlSW50ZXJuYWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk4NkUzQzYxQjE2N0JBQkVFMDA2RDc2MEEgLyogSlNW
YWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4NkUzQzYwRTE2N0JBQjg3MDA2RDc2MEEgLyogSlNWYWx1ZUludGVybmFsLmggKi87IH07
CiAJCTg2RTNDNjFEMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjEx
MTY3QkFCODcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NkVDOURDNTEzMjhERjgy
MDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUM5REI1MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRl
Q29kZVBhcnNlci5oICovOyB9OwogCQk4NkVDOURDNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2Vu
ZXJhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2RUM5REI2MTMyOERGODIwMDJCMkFENyAvKiBERkdHZW5lcmF0aW9uSW5mby5oICovOyB9
OwpAQCAtMjAwMyw5ICsyMDA3LDEwIEBACiAJCTVEQkIxNTExMTMxRDBCMTMwMDU2QUQzNiAvKiBD
b3B5IFN1cHBvcnQgU2NyaXB0ICovID0gewogCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFz
ZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDEyOwotCQkJZHN0UGF0aCA9ICIiOworCQkJZHN0UGF0
aCA9IHRlc3RhcGlTY3JpcHRzOwogCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDE2OwogCQkJZmlsZXMg
PSAoCisJCQkJNTNDM0Q1RTUyMUVDRTc3MjAwODdGREZDIC8qIGJhc2ljLmpzIGluIENvcHkgU3Vw
cG9ydCBTY3JpcHQgKi8sCiAJCQkJRkVDQjhCMkExRDI1Q0I1QTAwNkYyNDYzIC8qIHRlc3RhcGkt
ZnVuY3Rpb24tb3ZlcnJpZGVzLmpzIGluIENvcHkgU3VwcG9ydCBTY3JpcHQgKi8sCiAJCQkJNURC
QjE1MUIxMzFEMEIzMTAwNTZBRDM2IC8qIHRlc3RhcGkuanMgaW4gQ29weSBTdXBwb3J0IFNjcmlw
dCAqLywKIAkJCSk7CkBAIC0zNTU3LDYgKzM1NjIsOSBAQAogCQk1M0IwQkUzNTFFNTYxQjA5MDBB
OEZDMjkgLyogUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQcm94eWFibGVBY2Nlc3NDYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTNCMEJFMzcxRTU2MUIyNDAwQThGQzI5IC8qIEludHJpbnNpY0dldHRlckFj
Y2Vzc0Nhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50cmlu
c2ljR2V0dGVyQWNjZXNzQ2FzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUz
QjYwMUVCMjAzNEI4QzUwMDZCRTY2NyAvKiBKU0Nhc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYXN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzQzNENUU0MjFFQ0U2Q0UwMDg3RkRG
QyAvKiBiYXNpYy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IGJh
c2ljLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0M0RjY2QTIxQjFBNDA5MDAy
RkQwMDkgLyogSlNBUElHbG9iYWxPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBUElHbG9iYWxP
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNDNEY2NkMyMUIxQTdDQTAw
MkZEMDA5IC8qIEpTQVBJR2xvYmFsT2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSlNB
UElHbG9iYWxPYmplY3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzQzZGRUVF
MUU4QURGQTkwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdhc21PcGNvZGVPcmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTNDNkZFRjAxRThBRkUwQzAwQjE4NDI1IC8qIFdhc21PcGNvZGVPcmlnaW4uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbU9wY29kZU9yaWdpbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzQ0E3MzA3MUVBNTMzRDgwMDc2MDQ5
RCAvKiBXYXNtQkJRUGxhbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXYXNtQkJRUGxhbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNTY5LDYg
KzM1NzcsOSBAQAogCQk1M0U5RTBBOTFFQUU4M0RFMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJl
YWRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21NYWNoaW5l
VGhyZWFkcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRTlFMEFBMUVBRTgz
REUwMEZFRTI1MSAvKiBXYXNtTWFjaGluZVRocmVhZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2FzbU1hY2hpbmVUaHJlYWRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUzRTlFMEFFMUVBRUM0NTcwMEZFRTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVRpZXJVcENvdW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRUUwMUI0MjE4RjY5MEUwMEFEMUY4RCAvKiBKU1Njcmlw
dC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEpTU2NyaXB0Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0VFMDFCNTIxOEY2OTBGMDBBRDFGOEQg
LyogSlNTY3JpcHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTY3JpcHQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNFRTAxQjcyMThGN0VGRjAwQUQxRjhE
IC8qIEpTU2NyaXB0SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNTY3JpcHRJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0YxMUY0
MDIwOTEzOEQ3MDBFNDExQTcgLyogSlNJbW11dGFibGVCdXR0ZXJmbHkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNJbW11dGFibGVCdXR0ZXJmbHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTNGMTFGNDIyMDkxNzQ5ODAwRTQxMUE3IC8qIEpTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTNGMjU2RTExQjg3RTI4MDAwQjRCNzY4IC8qIEpTVHlwZWRBcnJheVZp
ZXdQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNU
eXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC01NTM4LDYgKzU1NDksNyBAQAogCQkxNDEyMTEwMDBBNDg3NzI2MDA0ODAyNTUgLyogdGVzdHMg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTUzQzNENUUz
MjFFQ0U2OEUwMDg3RkRGQyAvKiB0ZXN0YXBpU2NyaXB0cyAqLywKIAkJCQlGRUYwNDA1MDFBQUU2
NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCAqLywKIAkJCQlGRUYwNDA1MjFB
QUVDNEVEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmggKi8sCiAJCQkJQzI5RUNCMDIx
ODA0RDBFRDAwRDJDQkI0IC8qIEN1cnJlbnRUaGlzSW5zaWRlQmxvY2tHZXR0ZXJUZXN0LmggKi8s
CkBAIC01OTM3LDYgKzU5NDksOCBAQAogCQkJCTUzNTI5QTRCMUM0NTdCNzUwMDBCNDlDNiAvKiBB
UElVdGlscy5oICovLAogCQkJCTFDQUE4QjRBMEQzMkMzOUEwMDQxQkNGRiAvKiBKYXZhU2NyaXB0
LmggKi8sCiAJCQkJMUNBQThCNEIwRDMyQzM5QTAwNDFCQ0ZGIC8qIEphdmFTY3JpcHRDb3JlLmgg
Ki8sCisJCQkJNTNDNEY2NkEyMUIxQTQwOTAwMkZEMDA5IC8qIEpTQVBJR2xvYmFsT2JqZWN0Lmgg
Ki8sCisJCQkJNTNDNEY2NkMyMUIxQTdDQTAwMkZEMDA5IC8qIEpTQVBJR2xvYmFsT2JqZWN0Lm1t
ICovLAogCQkJCUJDMDg5NEQ1MEZBRkJBMkQwMDAwMTg2NSAvKiBKU0FQSVZhbHVlV3JhcHBlci5j
cHAgKi8sCiAJCQkJQkMwODk0RDYwRkFGQkEyRDAwMDAxODY1IC8qIEpTQVBJVmFsdWVXcmFwcGVy
LmggKi8sCiAJCQkJQzJDRjM5QzAxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVj
dC5oICovLApAQCAtNTk3OCw2ICs1OTkyLDkgQEAKIAkJCQlBNTUyQzM3RDFBRERCOEZFMDAxMzk3
MjYgLyogSlNSZW1vdGVJbnNwZWN0b3IuY3BwICovLAogCQkJCUE1NTJDMzdFMUFEREI4RkUwMDEz
OTcyNiAvKiBKU1JlbW90ZUluc3BlY3Rvci5oICovLAogCQkJCTk1QzE4RDNFMEM5MEU3RUYwMEU3
MkY3MyAvKiBKU1JldGFpblB0ci5oICovLAorCQkJCTUzRUUwMUI1MjE4RjY5MEYwMEFEMUY4RCAv
KiBKU1NjcmlwdC5oICovLAorCQkJCTUzRUUwMUI0MjE4RjY5MEUwMEFEMUY4RCAvKiBKU1Njcmlw
dC5tbSAqLywKKwkJCQk1M0VFMDFCNzIxOEY3RUZGMDBBRDFGOEQgLyogSlNTY3JpcHRJbnRlcm5h
bC5oICovLAogCQkJCUE3QzBDNEFBMTY3QzA4Q0QwMDE3MDExRCAvKiBKU1NjcmlwdFJlZi5jcHAg
Ki8sCiAJCQkJQTdDMEM0QUIxNjdDMDhDRDAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0ZS5o
ICovLAogCQkJCTE0ODJCNzRDMEE0MzAzMjgwMDUxN0NGQyAvKiBKU1N0cmluZ1JlZi5jcHAgKi8s
CkBAIC02Mjc4LDYgKzYyOTUsMTUgQEAKIAkJCXBhdGggPSAidW5pZmllZC1zb3VyY2VzIjsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTUzQzNENUUzMjFFQ0U2OEUwMDg3RkRG
QyAvKiB0ZXN0YXBpU2NyaXB0cyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRy
ZW4gPSAoCisJCQkJNTNDM0Q1RTQyMUVDRTZDRTAwODdGREZDIC8qIGJhc2ljLmpzICovLAorCQkJ
KTsKKwkJCW5hbWUgPSB0ZXN0YXBpU2NyaXB0czsKKwkJCXBhdGggPSBBUEkvdGVzdHMvdGVzdGFw
aVNjcmlwdHM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk2NTBGREY4RDA5
RDBGQ0E3MDA3NjlFNTQgLyogRGVyaXZlZCBTb3VyY2VzICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTkxNjYsNiArOTE5Miw3IEBACiAJCQkJMEY1RUY5MUYx
Njg3OEY3RDAwM0U1QzI1IC8qIEpJVFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDNzEy
RTMxN0NEODc5MzAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmggaW4gSGVhZGVycyAqLywKIAkJCQlEQzAxODQxOTFEMTBDMTg5MDA1N0IwNTMgLyogSklUV29y
a2xpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzQzRGNjZCMjFCMUE0MDkwMDJGRDAwOSAvKiBK
U0FQSUdsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQwNDgwMTMxMDIxQTFEOTAw
OEU3RjAxIC8qIEpTQVBJVmFsdWVXcmFwcGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkNGMzlD
MjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQxNzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNBcnJheS5oIGluIEhlYWRlcnMgKi8s
CkBAIC05Mjg2LDggKzkzMTMsMTAgQEAKIAkJCQlCQzE4QzQyNjBFMTZGNUNEMDBCMzQ0NjAgLyog
SlNSZXRhaW5QdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzNDYzODcxMUU3MENGM0QwMEYxMkFD
MSAvKiBKU1J1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4NzRBRTYxNUVCREU0
QTAwMkUzNTg3IC8qIEpTU2NvcGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzRUUwMUI2MjE4RjY5
MTYwMEFEMUY4RCAvKiBKU1NjcmlwdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTA2NDMzN0RENEIw
NDAyQkFGMzRBNTkyIC8qIEpTU2NyaXB0RmV0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMy
MDFDMUQxRjhFODIzNjAwNzZBMDMyIC8qIEpTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1M0VFMDFCODIxOEY3RUZGMDBBRDFGOEQgLyogSlNTY3JpcHRJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpTU2Ny
aXB0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdGMzMyQzAwNEE0
RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NEY4Mjg4MUUyRkZERTAwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENl
bGxUeXBlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXNDb2NvYS50
eHQKaW5kZXggYWNmNGZkYjAxNmQ4ODU3MDhhNDMwMDkwNDgwOWEyOTVjNTUwZGE4ZS4uYWY2Zjll
ZjVmYzMzZTAxZjFkZWY2NzNmMTI2NzliMWQ3Nzc3NmI0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXNDb2NvYS50eHQKQEAgLTIxLDcgKzIxLDkgQEAKIC8vIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKIC8v
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAorQVBJL0pTQVBJR2xvYmFsT2JqZWN0
Lm1tCiBBUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCitBUEkvSlNTY3JpcHQubW0KIEFQSS9KU0Nv
bnRleHQubW0KIEFQSS9KU01hbmFnZWRWYWx1ZS5tbQogQVBJL0pTUmVtb3RlSW5zcGVjdG9yLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbmZpZy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2NvbmZpZy5oCmluZGV4IGUwMjMyY2Y1Nzg2YWYwZjQ1ZDBkMTMwOGI2NzY2
ODA2Y2FlNGUwMGEuLmUzNjQzOTBmZGQwZjdkNDU3N2RjZTFlNDY4ODNiN2UxMjdlYTVjMGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvY29uZmlnLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKQEAgLTI0LDYgKzI0LDcgQEAKICNlbmRpZgogCiAjZGVmaW5lIEpTQ19BUElfQVZBSUxB
QkxFKC4uLikKKyNkZWZpbmUgSlNDX0NMQVNTX0FWQUlMQUJMRSguLi4pIEpTX0VYUE9SVAogLy8g
VXNlIHplcm8gc2luY2UgaXQgd2lsbCBiZSBsZXNzIHRoYW4gYW55IHBvc3NpYmxlIHZlcnNpb24g
bnVtYmVyLgogI2RlZmluZSBKU0NfTUFDX1ZFUlNJT05fVEJBIDAKICNkZWZpbmUgSlNDX0lPU19W
RVJTSU9OX1RCQSAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
YWxsRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAK
aW5kZXggYzhkMDhlY2YwMjliNmExN2E1ZjgxN2VmZjc4ZjEwMjRmNzhkN2NhMC4uMTM4M2E1NGM2
ZjY5NmE2YWRjMmY0NWU4MWQzNzYzODEzNGNhN2IyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhbGxEYXRhLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDI0IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCitKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1bmN0aW9uT2Jq
ZWN0LCBjb25zdCBBcmdMaXN0JiBhcmdzLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpCit7Cisg
ICAgcmV0dXJuIGNhbGwoZXhlYywgZnVuY3Rpb25PYmplY3QsIGZ1bmN0aW9uT2JqZWN0LCBhcmdz
LCBlcnJvck1lc3NhZ2UpOworfQorCitKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJn
cywgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgQ2FsbERh
dGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YSh2bSwgZnVu
Y3Rpb25PYmplY3QsIGNhbGxEYXRhKTsKKyAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5v
bmUpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgZXJyb3JNZXNz
YWdlKTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY2FsbChleGVjLCBmdW5jdGlv
bk9iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MpKTsKK30KKwogSlNW
YWx1ZSBjYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5
cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5oCmluZGV4IGNiZjkxNjc2MWE1YjEwMzBm
ZTE1Y2I2Mjg1YWVhYzkxOWUwNWJkZmIuLjA4Zjc5ZGY0ZDY3ODAxMzQ0NGE2YTYzOWFiNGZmYTQ5
YWU3MWI1YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxE
YXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTY0LDYgKzY0LDEwIEBAIGVudW0gY2xhc3MgUHJvZmlsaW5nUmVhc29uIHsKICAgICBPdGhlcgog
fTsKIAorLy8gQ29udmVuaWVuY2Ugd3JhcHBlciBzbyB5b3UgZG9uJ3QgbmVlZCB0byBkZWFsIHdp
dGggQ2FsbERhdGEgYW5kIENhbGxUeXBlIHVubGVzcyB5b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGVt
LgorSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSosIEpTVmFsdWUgZnVu
Y3Rpb25PYmplY3QsIGNvbnN0IEFyZ0xpc3QmLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpOwor
SlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSosIEpTVmFsdWUgZnVuY3Rp
b25PYmplY3QsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiwgY29uc3QgY2hhciog
ZXJyb3JNZXNzYWdlKTsKKwogSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0
ZSosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIENhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYsIEpT
VmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CiBKU19FWFBPUlRfUFJJVkFURSBKU1Zh
bHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5cGUsIGNv
bnN0IENhbGxEYXRhJiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmLCBOYWtlZFB0
cjxFeGNlcHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKaW5kZXggMTEwMmY2NmMzMjI2ZDc0NWNhZThjZmJh
MjBmNmFmNDMzNzlhYmVkOS4uM2ZiNGFiOWQzYWEyZTM0YmJjZDlhZGZmYTczMDdlNzA3NmE0NjFh
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKQEAg
LTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRl
biAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChw
bWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLgorICog
IENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0xNjEsNiArMTYxLDE2IEBAIHN0YXRpYyBKU0ludGVybmFsUHJvbWlzZSogcmVqZWN0UHJv
bWlzZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPCiAgICAgcmV0dXJu
IGRlZmVycmVkLT5wcm9taXNlKCk7CiB9CiAKK0pTSW50ZXJuYWxQcm9taXNlKiBsb2FkQW5kRXZh
bHVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBTeW1ib2wqIG1vZHVsZUlkLCBKU1ZhbHVlIHBh
cmFtZXRlcnMsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcikKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2bS5h
dG9taWNTdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0b21pY1N0cmluZ1RhYmxl
KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3lPbkN1cnJlbnRUaHJl
YWQoKSk7CisKKyAgICByZXR1cm4gdm0udm1FbnRyeUdsb2JhbE9iamVjdChleGVjKS0+bW9kdWxl
TG9hZGVyKCktPmxvYWRBbmRFdmFsdWF0ZU1vZHVsZShleGVjLCBtb2R1bGVJZCwgcGFyYW1ldGVy
cywgc2NyaXB0RmV0Y2hlcik7Cit9CisKIEpTSW50ZXJuYWxQcm9taXNlKiBsb2FkQW5kRXZhbHVh
dGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1vZHVsZU5hbWUsIEpTVmFs
dWUgcGFyYW1ldGVycywgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21w
bGV0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmgKaW5k
ZXggZGU0NDhhNDA4NDcxYzc0MmU2ZjIyODhmMWFhNzI0ZTMzZjg5NzQ5Ny4uODI3ZTYxZjNjNjFk
MGNiN2JiZTc1YTYxMjc3MTI0ZmIwZGE3MmFhZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbXBsZXRpb24uaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChD
KSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0zMyw2ICszMyw3IEBAIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEpTT2Jq
ZWN0OwogY2xhc3MgUGFyc2VyRXJyb3I7CiBjbGFzcyBTb3VyY2VDb2RlOworY2xhc3MgU3ltYm9s
OwogY2xhc3MgVk07CiBjbGFzcyBKU0ludGVybmFsUHJvbWlzZTsKIApAQCAtNTcsNiArNTgsNyBA
QCBpbmxpbmUgSlNWYWx1ZSBwcm9maWxlZEV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgUHJvZmls
aW5nUmVhc29uIHJlYXNvbiwgY29uc3QgUwogSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBldmFs
dWF0ZVdpdGhTY29wZUV4dGVuc2lvbihFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNP
YmplY3QqIHNjb3BlRXh0ZW5zaW9uLCBOYWtlZFB0cjxFeGNlcHRpb24+JiByZXR1cm5lZEV4Y2Vw
dGlvbik7CiAKIC8vIExvYWQgdGhlIG1vZHVsZSBzb3VyY2UgYW5kIGV2YWx1YXRlIGl0LgorSlNf
RVhQT1JUX1BSSVZBVEUgSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRFdmFsdWF0ZU1vZHVsZShF
eGVjU3RhdGUqLCBTeW1ib2wqIG1vZHVsZUlkLCBKU1ZhbHVlIHBhcmFtZXRlcnMsIEpTVmFsdWUg
c2NyaXB0RmV0Y2hlcik7CiBKU19FWFBPUlRfUFJJVkFURSBKU0ludGVybmFsUHJvbWlzZSogbG9h
ZEFuZEV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgbW9kdWxlTmFtZSwg
SlNWYWx1ZSBwYXJhbWV0ZXJzLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpOwogSlNfRVhQT1JUX1BS
SVZBVEUgSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRFdmFsdWF0ZU1vZHVsZShFeGVjU3RhdGUq
LCBjb25zdCBTb3VyY2VDb2RlJiwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYXN0LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaAppbmRleCBhMzY5ZDQ4OTY2MjYyYWExYjYyOWYzNDNj
YjI0ZjFmNzQ2M2FjNWY3Li40OTVjN2UxMWVmZmRmNTU3YTkyMmI0MjY3MTdlOGUzZDRkYmFjZGUz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjUsNCArMTY1LDEyIEBA
IFRvIGpzRHluYW1pY0Nhc3QoVk0mIHZtLCBKU1ZhbHVlIGZyb20pCiAgICAgcmV0dXJuIGpzRHlu
YW1pY0Nhc3Q8VG8+KHZtLCBmcm9tLmFzQ2VsbCgpKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUg
VG8sIHR5cGVuYW1lIEZyb20+CitUbyBqc1NlY3VyZUNhc3QoVk0mIHZtLCBGcm9tIGZyb20pCit7
CisgICAgYXV0byogcmVzdWx0ID0ganNEeW5hbWljQ2FzdDxUbz4odm0sIGZyb20pOworICAgIFJF
TEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocmVzdWx0KTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAKaW5kZXggZTg2ZTgyY2ZjNjYyMWMyYTM0OTMwNzliZjhhNDI5ZTY0
ZjU4NTEwZC4uZTlkMmVhNThmYjQ3ZmI0M2I2NjFlZGViYWRjNDRiZTZhOWI1ZDEzOCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2Fy
aWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNjIsNiAr
NjIsNyBAQAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXJyb3JDb25zdHJ1Y3Rvci5o
IgogI2luY2x1ZGUgIkVycm9yUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAj
aW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90
eXBlLmgiCiAjaW5jbHVkZSAiR2VuZXJhdG9yRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgpAQCAtMTky
LDcgKzE5Myw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgc3RhdGljIEpTVmFsdWUgY3Jl
YXRlUHJveHlQcm9wZXJ0eShWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCitzdGF0aWMgSlNWYWx1
ZSBjcmVhdGVQcm94eVByb3BlcnR5KFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKIHsKICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4ob2JqZWN0KTsK
ICAgICByZXR1cm4gUHJveHlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHZtLCBQcm94eUNvbnN0cnVjdG9y
OjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbCwgZ2xvYmFsLT5mdW5jdGlvblByb3RvdHlwZSgp
KSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359041</attachid>
            <date>2019-01-14 09:19:31 -0800</date>
            <delta_ts>2019-01-14 09:41:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191121-20190114091930.patch</filename>
            <type>text/plain</type>
            <size>69103</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5NTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
NDM2OGRjOGIyMDI0NGNlNTNjODQyZTYxNjVkOTk2ZjViYWVhNjEwLi4wY2QzNjhmNTFjN2ExYmMw
M2E1MTAyM2U1NTNmZjhlZDNhMjVlM2U0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NyBAQAorMjAxOS0wMS0xNCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBKU0Mgc2hvdWxkIGhhdmUgYSBtb2R1bGUgbG9hZGVyIEFQSQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMTIxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
ZGRzIGEgbmV3IGRlbGVnYXRlIHRvIEpTQ29udHh0IHRoYXQgaXMgY2FsbGVkIHRvIGZldGNoCisg
ICAgICAgIGFueSByZXNvbHZlZCBtb2R1bGUuIFRoZSByZXNvbHV0aW9uIG9mIGEgbW9kdWxlIGlk
ZW50aWZpZXIgaXMgY29tcHV0ZWQKKyAgICAgICAgYXMgaWYgaXQgd2VyZSBhIFVSTCBvbiB0aGUg
d2ViIHdpdGggdGhlIGNhdmVhdCB0aGF0IGl0IG11c3QgYmUgYSBmaWxlIFVSTC4KKworICAgICAg
ICBBIG5ldyBjbGFzcyBKU1NjcmlwdCBoYXMgYWxzbyBiZWVuIGFkZGVkIHRoYXQgaXMgc2ltaWxh
ciB0byBKU1NjcmlwdFJlZi4KKyAgICAgICAgUmlnaHQgbm93IGFsbCBKU1NjcmlwdHMgYXJlIGNv
cGllZCBpbnRvIG1lbW9yeS4gSW4gdGhlIGZ1dHVyZSB3ZSBzaG91bGQKKyAgICAgICAgbW1hcCB0
aGUgcHJvdmlkZWQgZmlsZSBpbnRvIG1lbW9yeSBzbyB0aGUgT1MgY2FuIGV2aWN0IGl0IHRvIGRp
c2sgdW5kZXIKKyAgICAgICAgcHJlc3N1cmUuIEFkZGl0aW9uYWxseSwgdGhlIEFQSSBkb2VzIG5v
dCBtYWtlIHVzZSBvZiB0aGUgY29kZSBzaWduaW5nIHBhdGgKKyAgICAgICAgbm9yIHRoZSBieXRl
Y29kZSBjYWNoaW5nIHBhdGgsIHdoaWNoIHdlIHdpbGwgYWRkIGluIHN1YnNlcXVlbnQgcGF0Y2hl
cy4KKworICAgICAgICBMYXN0bHksIGEgY291cGxlIG9mIG5ldyBjb252ZW5pZW5jZSBtZXRob2Rz
IGhhdmUgYmVlbiBhZGRlZC4gQyBBUEkKKyAgICAgICAgY29udmVyc2lvbiwgY2FuIG5vdyB0b1Jl
ZiBhIEpTVmFsdWUgd2l0aCBqdXN0IGEgdm0gcmF0aGVyIHRoYW4KKyAgICAgICAgcmVxdWlyaW5n
IGFuIEV4ZWNTdGF0ZS4gU2Vjb25kbHksIHRoZXJlIGlzIG5vdyBhIGNhbGwgd3JhcHBlciB0aGF0
CisgICAgICAgIGRvZXMgbm90IHJlcXVpcmUgQ2FsbERhdGEgYW5kIENhbGxUeXBlIHNpbmNlIG1h
bnkgcGxhY2VzIGRvbid0CisgICAgICAgIGNhcmUgYWJvdXQgdGhpcy4KKworICAgICAgICAqIEFQ
SS9BUElDYXN0Lmg6CisgICAgICAgICh0b1JlZik6CisgICAgICAgICogQVBJL0pTQVBJR2xvYmFs
T2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FQSUdsb2JhbE9iamVjdDo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6SlNBUElHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OkpTQVBJR2xvYmFsT2JqZWN0OjpKU0FQSUdsb2JhbE9iamVjdCk6CisgICAg
ICAgICogQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNB
UElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUpOgorICAgICAgICAoSlNDOjpKU0FQ
SUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVySW1wb3J0TW9kdWxlKToKKyAgICAgICAgKEpTQzo6
SlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckZldGNoKToKKyAgICAgICAgKEpTQzo6SlNB
UElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzKToK
KyAgICAgICAgKiBBUEkvSlNBUElWYWx1ZVdyYXBwZXIuaDoKKyAgICAgICAgKEpTQzo6anNBUElW
YWx1ZVdyYXBwZXIpOiBEZWxldGVkLgorICAgICAgICAqIEFQSS9KU0NvbnRleHQuaDoKKyAgICAg
ICAgKiBBUEkvSlNDb250ZXh0Lm1tOgorICAgICAgICAoLVtKU0NvbnRleHQgbW9kdWxlTG9hZGVy
RGVsZWdhdGVdKToKKyAgICAgICAgKC1bSlNDb250ZXh0IHNldE1vZHVsZUxvYWRlckRlbGVnYXRl
Ol0pOgorICAgICAgICAqIEFQSS9KU0NvbnRleHRJbnRlcm5hbC5oOgorICAgICAgICAqIEFQSS9K
U0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogQVBJL0pTQ29udGV4dFJlZi5jcHA6CisgICAg
ICAgIChKU0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKToKKyAgICAgICAgKiBBUEkvSlNTY3Jp
cHQuaDogQWRkZWQuCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOiBBZGRlZC4KKyAgICAgICAg
KCtbSlNTY3JpcHQgc2NyaXB0V2l0aFNvdXJjZTppblZpcnR1YWxNYWNoaW5lOl0pOgorICAgICAg
ICAoZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZSk6CisgICAgICAgICgrW0pTU2NyaXB0IHNj
cmlwdEZyb21VVEY4RmlsZTppblZpcnR1YWxNYWNoaW5lOndpdGhDb2RlU2lnbmluZzphbmRCeXRl
Y29kZUNhY2hlOl0pOgorICAgICAgICAoZ2V0SlNTY3JpcHRTb3VyY2VDb2RlKToKKyAgICAgICAg
KiBBUEkvSlNTY3JpcHRJbnRlcm5hbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oLgorICAgICAgICAqIEFQSS9KU1ZhbHVl
SW50ZXJuYWwuaDoKKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmg6Cisg
ICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAgICAgICgrW0pTQ29udGV4dEZldGNo
RGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl0pOgorICAgICAgICAoLVtKU0NvbnRl
eHRGZXRjaERlbGVnYXRlIGNvbnRleHQ6ZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyOndpdGhSZXNv
bHZlSGFuZGxlcjphbmRSZWplY3RIYW5kbGVyOl0pOgorICAgICAgICAoY2hlY2tNb2R1bGVDb2Rl
UmFuKToKKyAgICAgICAgKGNoZWNrTW9kdWxlV2FzUmVqZWN0ZWQpOgorICAgICAgICAodGVzdEZl
dGNoKToKKyAgICAgICAgKHRlc3RGZXRjaFdpdGhUd29DeWNsZSk6CisgICAgICAgICh0ZXN0RmV0
Y2hXaXRoVGhyZWVDeWNsZSk6CisgICAgICAgICh0ZXN0TG9hZGVyUmVzb2x2ZXNBYnNvbHV0ZVNj
cmlwdFVSTCk6CisgICAgICAgICh0ZXN0TG9hZGVyUmVqZWN0c05pbFNjcmlwdFVSTCk6CisgICAg
ICAgICh0ZXN0TG9hZGVyUmVqZWN0c0ZhaWxlZEZldGNoKToKKyAgICAgICAgKHRlc3RJbXBvcnRN
b2R1bGVUd2ljZSk6CisgICAgICAgICgrW0pTQ29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0ZSBuZXdD
b250ZXh0XSk6CisgICAgICAgIChyZXNvbHZlUGF0aFRvU2NyaXB0cyk6CisgICAgICAgICgtW0pT
Q29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0ZSBjb250ZXh0OmZldGNoTW9kdWxlRm9ySWRlbnRpZmll
cjp3aXRoUmVzb2x2ZUhhbmRsZXI6YW5kUmVqZWN0SGFuZGxlcjpdKToKKyAgICAgICAgKHRlc3RM
b2FkQmFzaWNGaWxlKToKKyAgICAgICAgKHRlc3RPYmplY3RpdmVDQVBJKToKKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJj
ZXNDb2NvYS50eHQ6CisgICAgICAgICogY29uZmlnLmg6CisgICAgICAgICogcnVudGltZS9DYWxs
RGF0YS5jcHA6CisgICAgICAgIChKU0M6OmNhbGwpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FsbERh
dGEuaDoKKyAgICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjps
b2FkQW5kRXZhbHVhdGVNb2R1bGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNDYXN0Lmg6CisgICAgICAgIChKU0M6OmpzU2VjdXJlQ2FzdCk6
CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmNy
ZWF0ZVByb3h5UHJvcGVydHkpOgorCiAyMDE4LTEyLTMxICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9t
aWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFNvdXJjZVByb3ZpZGVycyBzaG91bGQgdXNlIGFu
IGFjdHVhbCBVUkwgaW5zdGVhZCBvZiBhIHN0cmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9BUElDYXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNh
c3QuaAppbmRleCAzYjU1OTExOWUyMmExZTU2ODgwODg3MjdmOWJhN2RjYjI4MjRhZjRkLi44YjA4
NmYwZjQ1MWYyODNhNTI3NjNlMTk4YWIwY2U5NmVjZDY1OTZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0FQSUNhc3QuaApAQCAtMTI4LDIxICsxMjgsMjYgQEAgaW5saW5lIEpTQzo6Vk0qIHRvSlMo
SlNDb250ZXh0R3JvdXBSZWYgZykKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0M6OlZN
Kj4oY29uc3RfY2FzdDxPcGFxdWVKU0NvbnRleHRHcm91cCo+KGcpKTsKIH0KIAotaW5saW5lIEpT
VmFsdWVSZWYgdG9SZWYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2KQoraW5s
aW5lIEpTVmFsdWVSZWYgdG9SZWYoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2KQogewotICAg
IEFTU0VSVChleGVjLT52bSgpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAg
IEFTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICNpZiAhQ1BVKEFE
RFJFU1M2NCkKICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmICghdi5pc0Nl
bGwoKSkKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZVJlZj4oSlNDOjpq
c0FQSVZhbHVlV3JhcHBlcihleGVjLCB2KS5hc0NlbGwoKSk7CisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PEpTVmFsdWVSZWY+KEpTQzo6SlNBUElXcmFwcGVyVmFsdWU6OmNyZWF0ZSh2
bSwgdikuYXNDZWxsKCkpOwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTVmFsdWVSZWY+
KHYuYXNDZWxsKCkpOwogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VE
X1BBUkFNKHZtKTsKICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEpTVmFsdWVSZWY+KHYpOwogI2Vu
ZGlmCiB9CiAKK2lubGluZSBKU1ZhbHVlUmVmIHRvUmVmKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBK
U0M6OkpTVmFsdWUgdikKK3sKKyAgICByZXR1cm4gdG9SZWYoZXhlYy0+dm0oKSwgdik7Cit9CisK
IGlubGluZSBKU09iamVjdFJlZiB0b1JlZihKU0M6OkpTT2JqZWN0KiBvKQogewogICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PEpTT2JqZWN0UmVmPihvKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMGMyNGFiYzc3YTJhZGIz
OWFhMDI1MTA4MTkxZGIzYTQzNjhjOWFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3Mg
SlNBUElHbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNHbG9iYWxPYmplY3QgeworcHVibGljOgorICAg
IHVzaW5nIEJhc2UgPSBKU0dsb2JhbE9iamVjdDsKKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBz
dGF0aWMgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgc19nbG9iYWxPYmplY3RNZXRob2RU
YWJsZTsKKworICAgIHN0YXRpYyBKU0FQSUdsb2JhbE9iamVjdCogY3JlYXRlKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBhdXRvKiBvYmplY3QgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FQSUdsb2JhbE9iamVjdD4odm0uaGVhcCkpIEpTQVBJR2xv
YmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpOworICAgICAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7Cisg
ICAgICAgIGF1dG8qIHJlc3VsdCA9IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCAwLCBwcm90b3R5cGUs
IFR5cGVJbmZvKEdsb2JhbE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAg
ICAgICAgcmVzdWx0LT5zZXRUcmFuc2l0aW9uV2F0Y2hwb2ludElzTGlrZWx5VG9CZUZpcmVkKHRy
dWUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBKU0ludGVy
bmFsUHJvbWlzZSogbW9kdWxlTG9hZGVySW1wb3J0TW9kdWxlKEpTR2xvYmFsT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgSlNNb2R1bGVMb2FkZXIqLCBKU1N0cmluZyogbW9kdWxlTmFtZVZhbHVlLCBKU1Zh
bHVlIHBhcmFtZXRlcnMsIGNvbnN0IFNvdXJjZU9yaWdpbiYpOworICAgIHN0YXRpYyBJZGVudGlm
aWVyIG1vZHVsZUxvYWRlclJlc29sdmUoSlNHbG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU01v
ZHVsZUxvYWRlciosIEpTVmFsdWUga2V5VmFsdWUsIEpTVmFsdWUgcmVmZXJyZXJWYWx1ZSwgSlNW
YWx1ZSk7CisgICAgc3RhdGljIEpTSW50ZXJuYWxQcm9taXNlKiBtb2R1bGVMb2FkZXJGZXRjaChK
U0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSwgSlNW
YWx1ZSwgSlNWYWx1ZSk7CisgICAgc3RhdGljIEpTT2JqZWN0KiBtb2R1bGVMb2FkZXJDcmVhdGVJ
bXBvcnRNZXRhUHJvcGVydGllcyhKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxl
TG9hZGVyKiwgSlNWYWx1ZSwgSlNNb2R1bGVSZWNvcmQqLCBKU1ZhbHVlKTsKKworcHJpdmF0ZToK
KyAgICBKU0FQSUdsb2JhbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
ICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSwgJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCisg
ICAgeyB9Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QVBJR2xvYmFsT2JqZWN0Lm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2Jh
bE9iamVjdC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNDJmNWYyMzIxNmY0NmFmMWFmMDczODJiMTg1M2EzZWE1
YWU3NGI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQ
SUdsb2JhbE9iamVjdC5tbQpAQCAtMCwwICsxLDIxMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkpT
QVBJR2xvYmFsT2JqZWN0LmgiCisKKyNpbXBvcnQgIkFQSUNhc3QuaCIKKyNpbXBvcnQgIkNhdGNo
U2NvcGUuaCIKKyNpbXBvcnQgIkNvbXBsZXRpb24uaCIKKyNpbXBvcnQgIkVycm9yLmgiCisjaW1w
b3J0ICJFeGNlcHRpb24uaCIKKyNpbXBvcnQgIkpTQ29udGV4dEludGVybmFsLmgiCisjaW1wb3J0
ICJKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmgiCisjaW1wb3J0ICJKU05hdGl2ZVN0ZEZ1bmN0
aW9uLmgiCisjaW1wb3J0ICJKU1NjcmlwdEludGVybmFsLmgiCisjaW1wb3J0ICJKU1NvdXJjZUNv
ZGUuaCIKKyNpbXBvcnQgIkpTVmFsdWVJbnRlcm5hbC5oIgorI2ltcG9ydCAiSlNWaXJ0dWFsTWFj
aGluZUludGVybmFsLmgiCisjaW1wb3J0ICJKYXZhU2NyaXB0Q29yZS5oIgorI2ltcG9ydCAiT2Jq
ZWN0Q29uc3RydWN0b3IuaCIKKyNpbXBvcnQgIlNvdXJjZU9yaWdpbi5oIgorCisjaW1wb3J0IDx3
dGYvVVJMLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNBUElHbG9i
YWxPYmplY3Q6OnNfaW5mbyA9IHsgIkdsb2JhbE9iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBUElHbG9iYWxPYmplY3QpIH07CisK
K2NvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIEpTQVBJR2xvYmFsT2JqZWN0OjpzX2dsb2Jh
bE9iamVjdE1ldGhvZFRhYmxlID0geworICAgICZzdXBwb3J0c1JpY2hTb3VyY2VJbmZvLAorICAg
ICZzaG91bGRJbnRlcnJ1cHRTY3JpcHQsCisgICAgJmphdmFTY3JpcHRSdW50aW1lRmxhZ3MsCisg
ICAgbnVsbHB0ciwgLy8gcXVldWVUYXNrVG9FdmVudExvb3AKKyAgICAmc2hvdWxkSW50ZXJydXB0
U2NyaXB0QmVmb3JlVGltZW91dCwKKyAgICAmbW9kdWxlTG9hZGVySW1wb3J0TW9kdWxlLCAvLyBt
b2R1bGVMb2FkZXJJbXBvcnRNb2R1bGUKKyAgICAmbW9kdWxlTG9hZGVyUmVzb2x2ZSwgLy8gbW9k
dWxlTG9hZGVyUmVzb2x2ZQorICAgICZtb2R1bGVMb2FkZXJGZXRjaCwgLy8gbW9kdWxlTG9hZGVy
RmV0Y2gKKyAgICAmbW9kdWxlTG9hZGVyQ3JlYXRlSW1wb3J0TWV0YVByb3BlcnRpZXMsIC8vIG1v
ZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzCisgICAgbnVsbHB0ciwgLy8gbW9k
dWxlTG9hZGVyRXZhbHVhdGUKKyAgICBudWxscHRyLCAvLyBwcm9taXNlUmVqZWN0aW9uVHJhY2tl
cgorICAgIG51bGxwdHIsIC8vIGRlZmF1bHRMYW5ndWFnZQorICAgIG51bGxwdHIsIC8vIGNvbXBp
bGVTdHJlYW1pbmcKKyAgICBudWxscHRyLCAvLyBpbnN0YW50aWF0ZVN0cmVhbWluZworfTsKKwor
SWRlbnRpZmllciBKU0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyUmVzb2x2ZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIEpTTW9kdWxlTG9hZGVyKiwg
SlNWYWx1ZSBrZXksIEpTVmFsdWUgcmVmZXJyZXIsIEpTVmFsdWUpCit7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgQVNTRVJUX1VOVVNFRChnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCA9PSBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpOworICAgIEFTU0VSVChrZXkuaXNTdHJpbmcoKSB8fCBrZXkuaXNT
eW1ib2woKSk7CisgICAgU3RyaW5nIG5hbWUgPSAga2V5LnRvV1RGU3RyaW5nKGV4ZWMpOworCisg
ICAgVVJMIHJlZmVycmVyVVJMKFVSTCgpLCBqc0Nhc3Q8SlNTdHJpbmcqPihyZWZlcnJlciktPnRy
eUdldFZhbHVlKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlZmVycmVyVVJMLmlzVmFsaWQoKSk7
CisKKyAgICBVUkwgdXJsID0gVVJMKHJlZmVycmVyVVJMLCBuYW1lKTsKKyAgICBpZiAodXJsLmlz
VmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgdXJs
KTsKKworICAgIHRocm93Vk1FcnJvcihleGVjLCBzY29wZSwgIkNvdWxkIG5vdCBmb3JtIHZhbGlk
IFVSTCBmcm9tIGlkZW50aWZpZXIgYW5kIGJhc2UiX3MpOworICAgIHJldHVybiB7IH07Cit9CisK
K0pTSW50ZXJuYWxQcm9taXNlKiBKU0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVySW1wb3J0
TW9kdWxlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgSlNN
b2R1bGVMb2FkZXIqLCBKU1N0cmluZyogc3BlY2lmaWVyVmFsdWUsIEpTVmFsdWUsIGNvbnN0IFNv
dXJjZU9yaWdpbiYgc291cmNlT3JpZ2luKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgYXV0
byByZWplY3QgPSBbJl0gKEpTVmFsdWUgZXhjZXB0aW9uKSAtPiBKU0ludGVybmFsUHJvbWlzZSog
eworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBhdXRvKiBwcm9taXNl
ID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6dHJ5Q3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVj
dCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiBwcm9t
aXNlLT5yZWplY3QoZXhlYywgZXhjZXB0aW9uKTsKKyAgICB9OworCisgICAgYXV0byBpbXBvcnQg
PSBbJl0gKFVSTCYgdXJsKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gaW1wb3J0TW9kdWxlKGV4
ZWMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCB1cmwpLCBqc1VuZGVmaW5lZCgpLCBqc1Vu
ZGVmaW5lZCgpKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAg
ICAgICAgICAgIHJldHVybiByZWplY3Qoc2NvcGUuZXhjZXB0aW9uKCkpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH07CisKKyAgICBhdXRvIHNwZWNpZmllciA9IHNwZWNpZmllclZhbHVl
LT52YWx1ZShleGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7Cisg
ICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgIHNj
b3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiByZWplY3QoZXhjZXB0aW9uKTsK
KyAgICB9CisKKyAgICBVUkwgYWJzb2x1dGVVUkwoVVJMKCksIHNwZWNpZmllcik7CisgICAgaWYg
KGFic29sdXRlVVJMLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGltcG9ydChhYnNvbHV0ZVVS
TCk7CisKKyAgICBpZiAoIXNwZWNpZmllci5zdGFydHNXaXRoKCcvJykgJiYgIXNwZWNpZmllci5z
dGFydHNXaXRoKCIuLyIpICYmICFzcGVjaWZpZXIuc3RhcnRzV2l0aCgiLi4vIikpCisgICAgICAg
IHJldHVybiByZWplY3QoY3JlYXRlRXJyb3IoZXhlYywgIk1vZHVsZSBzcGVjaWZpZXIgZG9lcyBu
b3Qgc3RhcnQgd2l0aCBcIi9cIiwgXCIuL1wiLCBvciBcIi4uL1wiLiJfcykpOworCisgICAgaWYg
KHNwZWNpZmllci5zdGFydHNXaXRoKCcvJykpIHsKKyAgICAgICAgYWJzb2x1dGVVUkwgPSBVUkwo
VVJMKHsgfSwgImZpbGU6Ly8iKSwgc3BlY2lmaWVyKTsKKyAgICAgICAgaWYgKGFic29sdXRlVVJM
LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBpbXBvcnQoYWJzb2x1dGVVUkwpOworICAg
IH0KKworICAgIGF1dG8gbm9CYXNlRXJyb3JNZXNzYWdlID0gIkNvdWxkIG5vdCBkZXRlcm1pbmUg
dGhlIGJhc2UgVVJMIGZvciBsb2FkaW5nLiJfczsKKyAgICBpZiAoc291cmNlT3JpZ2luLmlzTnVs
bCgpKQorICAgICAgICByZXR1cm4gcmVqZWN0KGNyZWF0ZUVycm9yKGV4ZWMsIG5vQmFzZUVycm9y
TWVzc2FnZSkpOworCisgICAgYXV0byByZWZlcnJlciA9IHNvdXJjZU9yaWdpbi5zdHJpbmcoKTsK
KyAgICBVUkwgYmFzZVVSTChVUkwoKSwgcmVmZXJyZXIpOworICAgIGlmICghYmFzZVVSTC5pc1Zh
bGlkKCkpCisgICAgICAgIHJldHVybiByZWplY3QoY3JlYXRlRXJyb3IoZXhlYywgbm9CYXNlRXJy
b3JNZXNzYWdlKSk7CisKKyAgICBVUkwgdXJsKGJhc2VVUkwsIHNwZWNpZmllcik7CisgICAgaWYg
KCF1cmwuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gcmVqZWN0KGNyZWF0ZUVycm9yKGV4ZWMs
ICJjb3VsZCBub3QgZGV0ZXJtaW5lIGEgdmFsaWQgVVJMIGZvciBtb2R1bGUgc3BlY2lmaWVyIl9z
KSk7CisKKyAgICByZXR1cm4gaW1wb3J0KHVybCk7Cit9CisKK0pTSW50ZXJuYWxQcm9taXNlKiBK
U0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyRmV0Y2goSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUga2V5LCBK
U1ZhbHVlLCBKU1ZhbHVlKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICBBU1NFUlQoZ2xv
YmFsT2JqZWN0ID09IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAgSlNDb250ZXh0
ICpjb250ZXh0ID0gW0pTQ29udGV4dCBjb250ZXh0V2l0aEpTR2xvYmFsQ29udGV4dFJlZjp0b0ds
b2JhbFJlZihnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSldOworCisgICAgSlNJbnRlcm5hbFBy
b21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkOjp0cnlD
cmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKKworICAgIElkZW50aWZpZXIgbW9kdWxlS2V5ID0ga2V5LnRvUHJvcGVydHlL
ZXkoZXhlYyk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAg
ICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBzY29wZS5j
bGVhckV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBl
eGNlcHRpb24pOworICAgIH0KKworICAgIGlmIChVTkxJS0VMWSghW2NvbnRleHQgbW9kdWxlTG9h
ZGVyRGVsZWdhdGVdKSkKKyAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywgY3Jl
YXRlRXJyb3IoZXhlYywgIk5vIG1vZHVsZSBsb2FkZXIgcHJvdmlkZWQuIikpOworCisgICAgYXV0
byBkZWZlcnJlZFByb21pc2UgPSBTdHJvbmc8SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZD4odm0s
IGRlZmVycmVkKTsKKyAgICBhdXRvIHN0cm9uZ0tleSA9IFN0cm9uZzxKU1N0cmluZz4odm0sIGpz
U2VjdXJlQ2FzdDxKU1N0cmluZyo+KHZtLCBrZXkpKTsKKyAgICBhdXRvKiByZXNvbHZlID0gSlNO
YXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIDEsICJyZXNvbHZlIiwg
Wz1dIChFeGVjU3RhdGUqIGV4ZWMpIHsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICAgICAgLy8gVGhpcyBjYXB0dXJlcyB0aGUgZ2xvYmFsT2JqZWN0IGJ1dCB0aGF0J3Mgb2sgYmVj
YXVzZSBvdXIgc3RydWN0dXJlIGtlZXBzIGl0IGFsaXZlIGFueXdheS4KKyAgICAgICAgSlNDb250
ZXh0ICpjb250ZXh0ID0gW0pTQ29udGV4dCBjb250ZXh0V2l0aEpTR2xvYmFsQ29udGV4dFJlZjp0
b0dsb2JhbFJlZihnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSldOworICAgICAgICBpZCBzY3Jp
cHQgPSB2YWx1ZVRvT2JqZWN0KGNvbnRleHQsIHRvUmVmKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDAp
KSk7CisKKyAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICAgICAgaWYgKFVO
TElLRUxZKCFbc2NyaXB0IGlzS2luZE9mQ2xhc3M6W0pTU2NyaXB0IGNsYXNzXV0pKSB7CisgICAg
ICAgICAgICBhcmdzLmFwcGVuZChjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkZpcnN0IGFyZ3VtZW50
IG9mIHJlc29sdXRpb24gY2FsbGJhY2sgaXMgbm90IGEgSlNTY3JpcHQiKSk7CisgICAgICAgICAg
ICBjYWxsKGV4ZWMsIGRlZmVycmVkUHJvbWlzZS0+SlNQcm9taXNlRGVmZXJyZWQ6OnJlamVjdCgp
LCBhcmdzLCAiVGhpcyBzaG91bGQgbmV2ZXIgYmUgc2Vlbi4uLiIpOworICAgICAgICAgICAgcmV0
dXJuIGVuY29kZWRKU1VuZGVmaW5lZCgpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgU3Ry
aW5nJiBzb3VyY2UgPSBnZXRKU1NjcmlwdFNvdXJjZUNvZGUoc3RhdGljX2Nhc3Q8SlNTY3JpcHQg
Kj4oc2NyaXB0KSk7CisgICAgICAgIGFyZ3MuYXBwZW5kKEpTU291cmNlQ29kZTo6Y3JlYXRlKHZt
LCBtYWtlU291cmNlKHNvdXJjZSwgU291cmNlT3JpZ2luKG1vZHVsZUtleS5zdHJpbmcoKSksIFVS
TCh7IH0sIG1vZHVsZUtleS5zdHJpbmcoKSksIFRleHRQb3NpdGlvbigpLCBKU0M6OlNvdXJjZVBy
b3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlKSkpOworICAgICAgICBjYWxsKGV4ZWMsIGRlZmVycmVk
UHJvbWlzZS0+SlNQcm9taXNlRGVmZXJyZWQ6OnJlc29sdmUoKSwgYXJncywgIlRoaXMgc2hvdWxk
IG5ldmVyIGJlIHNlZW4uLi4iKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZWRKU1VuZGVmaW5lZCgp
OworICAgIH0pOworCisgICAgYXV0byogcmVqZWN0ID0gSlNOYXRpdmVTdGRGdW5jdGlvbjo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIDEsICJyZWplY3QiLCBbPV0gKEV4ZWNTdGF0ZSogZXhlYykg
eworICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgICAgICBhcmdzLmFwcGVu
ZChleGVjLT5hcmd1bWVudCgwKSk7CisKKyAgICAgICAgY2FsbChleGVjLCBkZWZlcnJlZFByb21p
c2UtPkpTUHJvbWlzZURlZmVycmVkOjpyZWplY3QoKSwgYXJncywgIlRoaXMgc2hvdWxkIG5ldmVy
IGJlIHNlZW4uLi4iKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZWRKU1VuZGVmaW5lZCgpOworICAg
IH0pOworCisgICAgW1tjb250ZXh0IG1vZHVsZUxvYWRlckRlbGVnYXRlXSBjb250ZXh0OmNvbnRl
eHQgZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyOls6OkpTVmFsdWUgdmFsdWVXaXRoSlNWYWx1ZVJl
Zjp0b1JlZihleGVjLCBrZXkpIGluQ29udGV4dDpjb250ZXh0XSB3aXRoUmVzb2x2ZUhhbmRsZXI6
Wzo6SlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnRvUmVmKGV4ZWMsIHJlc29sdmUpIGluQ29u
dGV4dDpjb250ZXh0XSBhbmRSZWplY3RIYW5kbGVyOls6OkpTVmFsdWUgdmFsdWVXaXRoSlNWYWx1
ZVJlZjp0b1JlZihleGVjLCByZWplY3QpIGluQ29udGV4dDpjb250ZXh0XV07CisgICAgaWYgKGNv
bnRleHQuZXhjZXB0aW9uKSB7CisgICAgICAgIGRlZmVycmVkLT5yZWplY3QoZXhlYywgdG9KUyhl
eGVjLCBbY29udGV4dC5leGNlcHRpb24gSlNWYWx1ZVJlZl0pKTsKKyAgICAgICAgY29udGV4dC5l
eGNlcHRpb24gPSBuaWw7CisgICAgfQorICAgIHJldHVybiBkZWZlcnJlZC0+cHJvbWlzZSgpOwor
fQorCitKU09iamVjdCogSlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckNyZWF0ZUltcG9y
dE1ldGFQcm9wZXJ0aWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlIGtleSwgSlNNb2R1bGVSZWNvcmQqLCBKU1Zh
bHVlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNPYmplY3QqIG1ldGFQcm9wZXJ0aWVzID0gY29u
c3RydWN0RW1wdHlPYmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0LT5udWxsUHJvdG90eXBlT2JqZWN0
U3RydWN0dXJlKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwor
CisgICAgbWV0YVByb3BlcnRpZXMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJmaWxlbmFtZSIpLCBrZXkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IG51bGxwdHIpOworCisgICAgcmV0dXJuIG1ldGFQcm9wZXJ0aWVzOworfQorCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJVmFsdWVXcmFwcGVyLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJVmFsdWVXcmFwcGVyLmgKaW5kZXggMDZiMzA3MTAz
ZWVhMjM0MDU0N2IwMzAyOWNlM2ZiMGU2ZDc2NzYzMy4uNzQ0OTE5M2NiYjI1MGM2NjhmYzE5YWZj
ZmE3YTcwNTE0NDc1MzIyZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0FQSVZhbHVlV3JhcHBlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElW
YWx1ZVdyYXBwZXIuaApAQCAtNDQsMTAgKzQ0LDkgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9F
WFBPUlRfSU5GTzsKIAotICAgIHN0YXRpYyBKU0FQSVZhbHVlV3JhcHBlciogY3JlYXRlKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkgCisgICAgc3RhdGljIEpTQVBJVmFsdWVXcmFwcGVy
KiBjcmVhdGUoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICAgICAgSlNBUElWYWx1ZVdyYXBwZXIqIHdyYXBwZXIgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FQSVZhbHVlV3JhcHBlcj4odm0uaGVhcCkpIEpTQVBJVmFs
dWVXcmFwcGVyKGV4ZWMpOworICAgICAgICBKU0FQSVZhbHVlV3JhcHBlciogd3JhcHBlciA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQVBJVmFsdWVXcmFwcGVyPih2bS5oZWFwKSkgSlNB
UElWYWx1ZVdyYXBwZXIodm0pOwogICAgICAgICB3cmFwcGVyLT5maW5pc2hDcmVhdGlvbih2bSwg
dmFsdWUpOwogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB9CkBAIC02MSwxNyArNjAsMTIg
QEAgcHJvdGVjdGVkOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBKU0FQSVZhbHVlV3JhcHBlcihF
eGVjU3RhdGUqIGV4ZWMpCi0gICAgICAgIDogSlNDZWxsKGV4ZWMtPnZtKCksIGV4ZWMtPnZtKCku
YXBpV3JhcHBlclN0cnVjdHVyZS5nZXQoKSkKKyAgICBKU0FQSVZhbHVlV3JhcHBlcihWTSYgdm0p
CisgICAgICAgIDogSlNDZWxsKHZtLCB2bS5hcGlXcmFwcGVyU3RydWN0dXJlLmdldCgpKQogICAg
IHsKICAgICB9CiAKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92YWx1ZTsKIH07CiAKLWlu
bGluZSBKU1ZhbHVlIGpzQVBJVmFsdWVXcmFwcGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2
YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNBUElWYWx1ZVdyYXBwZXI6OmNyZWF0ZShleGVjLCB2YWx1
ZSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NvbnRleHQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250
ZXh0LmgKaW5kZXggODljODdmOWUyZTFmZjFiMTcxYjFlYmJhOGM0NTIxNTlmNDRmNDc1YS4uMGE4
NTZjNTk1OGY4OWM3YjExNWVlYWQ4NGVhNTNhMzQ0MzFiMmM3NyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ29udGV4dC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2lmIEpTQ19PQkpDX0FQSV9FTkFC
TEVECiAKLUBjbGFzcyBKU1ZpcnR1YWxNYWNoaW5lLCBKU1ZhbHVlOworQGNsYXNzIEpTU2NyaXB0
LCBKU1ZpcnR1YWxNYWNoaW5lLCBKU1ZhbHVlLCBKU0NvbnRleHQ7CiAKIC8qIQogQGludGVyZmFj
ZQpAQCAtMzksNyArMzksNyBAQAogIEphdmFTY3JpcHQgZXhlY3V0aW9uIHRha2VzIHBsYWNlIHdp
dGhpbiBhIGNvbnRleHQsIGFuZCBhbGwgSmF2YVNjcmlwdCB2YWx1ZXMKICBhcmUgdGllZCB0byBh
IGNvbnRleHQuCiAqLwotTlNfQ0xBU1NfQVZBSUxBQkxFKDEwXzksIDdfMCkKK0pTQ19DTEFTU19B
VkFJTEFCTEUobWFjb3N4KDEwLjkpLCBpc28oNy4wKSkKIEBpbnRlcmZhY2UgSlNDb250ZXh0IDog
TlNPYmplY3QKIAogLyohCkBAIC0xNzcsNyArMTc3LDYgQEAgTlNfQ0xBU1NfQVZBSUxBQkxFKDEw
XzksIDdfMCkKIEBkaXNjdXNzaW9uIE5hbWUgb2YgdGhlIEpTQ29udGV4dC4gRXhwb3NlZCB3aGVu
IHJlbW90ZSBkZWJ1Z2dpbmcgdGhlIGNvbnRleHQuCiAqLwogQHByb3BlcnR5IChjb3B5KSBOU1N0
cmluZyAqbmFtZSBKU0NfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTApLCBpb3MoOC4wKSk7Ci0K
IEBlbmQKIAogLyohCkBAIC0yMzEsNiArMjMwLDcgQEAgTlNfQ0xBU1NfQVZBSUxBQkxFKDEwXzks
IDdfMCkKIEByZXN1bHQgVGhlIEMgQVBJIGVxdWl2YWxlbnQgb2YgdGhpcyBKU0NvbnRleHQuCiAq
LwogQHByb3BlcnR5IChyZWFkb25seSkgSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xvYmFsQ29udGV4
dFJlZjsKKwogQGVuZAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDb250ZXh0Lm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQu
bW0KaW5kZXggMjc1NjZmNDFiOTdlMWIzOWJkZGU5YjQ4YWFhNTU5ZjE0Y2I3MzllYS4uM2M3NzZk
NGQ5MDBlZTE3MzMzNjJhYzI5ZjYyNGY0NDRkNTQ1ZTdiNCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NvbnRleHQubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjYsMTEgKzI2LDE1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAK
ICNpbXBvcnQgIkFQSUNhc3QuaCIKKyNpbXBvcnQgIkNvbXBsZXRpb24uaCIKICNpbXBvcnQgIkpT
Q0lubGluZXMuaCIKICNpbXBvcnQgIkpTQ29udGV4dEludGVybmFsLmgiCiAjaW1wb3J0ICJKU0Nv
bnRleHRQcml2YXRlLmgiCiAjaW1wb3J0ICJKU0NvbnRleHRSZWZJbnRlcm5hbC5oIgogI2ltcG9y
dCAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbXBvcnQgIkpTSW50ZXJuYWxQcm9taXNlLmgiCisjaW1w
b3J0ICJKU01vZHVsZUxvYWRlci5oIgorI2ltcG9ydCAiSlNTY3JpcHRJbnRlcm5hbC5oIgogI2lt
cG9ydCAiSlNWYWx1ZUludGVybmFsLmgiCiAjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJu
YWwuaCIKICNpbXBvcnQgIkpTV3JhcHBlck1hcC5oIgpAQCAtMzgsMTIgKzQyLDE1IEBACiAjaW1w
b3J0ICJPYmpjUnVudGltZUV4dHJhcy5oIgogI2ltcG9ydCAiU3Ryb25nSW5saW5lcy5oIgogCisj
aW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KKwogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAK
IEBpbXBsZW1lbnRhdGlvbiBKU0NvbnRleHQgewogICAgIEpTVmlydHVhbE1hY2hpbmUgKm1fdmly
dHVhbE1hY2hpbmU7CiAgICAgSlNHbG9iYWxDb250ZXh0UmVmIG1fY29udGV4dDsKICAgICBKU0M6
OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBtX2V4Y2VwdGlvbjsKKyAgICBXZWFrT2JqQ1B0cjxpZCA8
SlNNb2R1bGVMb2FkZXJEZWxlZ2F0ZT4+IG1fbW9kdWxlTG9hZGVyRGVsZWdhdGU7CiB9CiAKIC0g
KEpTR2xvYmFsQ29udGV4dFJlZilKU0dsb2JhbENvbnRleHRSZWYKQEAgLTIzMyw2ICsyNDAsMTYg
QEAKICAgICBKU0dsb2JhbENvbnRleHRTZXREZWJ1Z2dlclJ1bkxvb3AobV9jb250ZXh0LCBydW5M
b29wKTsKIH0KIAorLSAoaWQ8SlNNb2R1bGVMb2FkZXJEZWxlZ2F0ZT4pbW9kdWxlTG9hZGVyRGVs
ZWdhdGUKK3sKKyAgICByZXR1cm4gbV9tb2R1bGVMb2FkZXJEZWxlZ2F0ZS5nZXRBdXRvcmVsZWFz
ZWQoKTsKK30KKworLSAodm9pZClzZXRNb2R1bGVMb2FkZXJEZWxlZ2F0ZTooaWQ8SlNNb2R1bGVM
b2FkZXJEZWxlZ2F0ZT4pbW9kdWxlTG9hZGVyRGVsZWdhdGUKK3sKKyAgICBtX21vZHVsZUxvYWRl
ckRlbGVnYXRlID0gbW9kdWxlTG9hZGVyRGVsZWdhdGU7Cit9CisKIEBlbmQKIAogQGltcGxlbWVu
dGF0aW9uIEpTQ29udGV4dChTdWJzY3JpcHRTdXBwb3J0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRJbnRlcm5hbC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NvbnRleHRJbnRlcm5hbC5oCmluZGV4IDI4ZjcwOWMxZTQ4ZjFlMWE4MDM4NTY1
MGFhZTZlNDFjZDM1MTUwZmEuLmFiNDU4MjlmMDAyN2U0ZmFkNmJmYmQxYWZjNDAyYjNhMWJlODVi
NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0SW50ZXJu
YWwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dEludGVybmFsLmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjcsNyArMjcsNyBAQAogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIAotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSlNDb250ZXh0Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRl
eHRQcml2YXRlLmg+CiAKIHN0cnVjdCBDYWxsYmFja0RhdGEgewogICAgIENhbGxiYWNrRGF0YSog
bmV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UHJp
dmF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRQcml2YXRlLmgKaW5k
ZXggZmY5NjIyYWRkZjYwYjdjMTAzNTdkYWNjZjFjNmY0MWVjYjg2MWYxYy4uZDRlMjA2YjMzNTc1
ZTlmYTZkNDE4MmU5ZTFhZDg5NDA1NjhhODY3NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NvbnRleHRQcml2YXRlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NvbnRleHRQcml2YXRlLmgKQEAgLTMwLDYgKzMwLDI3IEBACiAKICNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0pTQ29udGV4dC5oPgogCitAcHJvdG9jb2wgSlNNb2R1bGVMb2FkZXJEZWxl
Z2F0ZSA8TlNPYmplY3Q+CisKK0ByZXF1aXJlZAorCisvKiEgQGFic3RyYWN0IFByb3ZpZGVzIHNv
dXJjZSBjb2RlIGZvciBhbnkgSlMgbW9kdWxlIHRoYXQgaXMgYWN0aXZlbHkgaW1wb3J0ZWQuCisg
QHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgZm9yIHdoaWNoIHRoZSBtb2R1bGUgaXMgYmVpbmcg
cmVxdWVzdGVkLgorIEBwYXJhbSBpZGVudGlmaWVyIFRoZSByZXNvbHZlZCBpZGVudGlmaWVyIGZv
ciB0aGUgcmVxdWVzdGVkIG1vZHVsZS4KKyBAcGFyYW0gcmVzb2x2ZSBBIEpTIGZ1bmN0aW9uIHRv
IGNhbGwgd2l0aCB0aGUgZGVzaXJlZCBzY3JpcHQgZm9yIGlkZW50aWZpZXIuCisgQHBhcmFtIHJl
amVjdCBBIEpTIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBpZGVudGlmaWVyIGNhbm5vdCBiZSBmZXRj
aGVkLgorIEBkaXNjdXNzaW9uIEN1cnJlbnRseSwgaWRlbnRpZmllciB3aWxsIGFsd2F5cyBiZSBh
biBhYnNvbHV0ZSBmaWxlIFVSTCBjb21wdXRlZCBmcm9tIHNwZWNpZmllciBvZiB0aGUgcmVxdWVz
dGVkIG1vZHVsZSByZWxhdGl2ZSB0byB0aGUgVVJMIG9mIHRoZSByZXF1ZXN0aW5nIHNjcmlwdC4g
SWYgdGhlIHJlcXVlc3Rpbmcgc2NyaXB0IGRvZXMgbm90IGhhdmUgYSBVUkwgYW5kIHRoZSBtb2R1
bGUgc3BlY2lmaWVyIGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRoIHRoZSBtb2R1bGUgbG9hZGVyIHdp
bGwgZmFpbCB0byBsb2FkIHRoZSBtb2R1bGUuCisKKyBUaGUgZmlyc3QgYXJndW1lbnQgdG8gcmVz
b2x2ZSBzaG9sdWQgYWx3YXlzIGJlIGEgSlNTY3JpcHQsIG90aGVyd2lzZSB0aGUgbW9kdWxlIGxv
YWRlciB3aWxsIHJlamVjdCB0aGUgbW9kdWxlLgorCisgT25jZSBhbiBpZGVudGlmaWVyIGhhcyBi
ZWVuIHJlc29sdmVkIG9yIHJlamVjdGVkIGluIGEgZ2l2ZW4gY29udGV4dCBpdCB3aWxsIG5ldmVy
IGJlIHJlcXVlc3RlZCBhZ2Fpbi4gSWYgYSBzY3JpcHQgaXMgc3VjY2Vzc2Z1bGx5IGV2YWx1YXRl
ZCBpdCB3aWxsIG5vdCBiZSByZS1ldmFsdWF0ZWQgb24gYW55IHN1YnNlcXVlbnQgaW1wb3J0Lgor
CisgVGhlIFZNIHdpbGwgcmV0YWluIGFsbCBldmFsdWF0ZWQgbW9kdWxlcyBmb3IgdGhlIGxpZmV0
aW1lIG9mIHRoZSBjb250ZXh0LgorICovCistICh2b2lkKWNvbnRleHQ6KEpTQ29udGV4dCAqKWNv
bnRleHQgZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyOihKU1ZhbHVlICopaWRlbnRpZmllciB3aXRo
UmVzb2x2ZUhhbmRsZXI6KEpTVmFsdWUgKilyZXNvbHZlIGFuZFJlamVjdEhhbmRsZXI6KEpTVmFs
dWUgKilyZWplY3Q7CisKK0BlbmQKKwogQGludGVyZmFjZSBKU0NvbnRleHQoUHJpdmF0ZSkKIAog
LyohCkBAIC01MCw2ICs3MSw5IEBACiAqLwogQHByb3BlcnR5IChzZXR0ZXI9X3NldERlYnVnZ2Vy
UnVuTG9vcDopIENGUnVuTG9vcFJlZiBfZGVidWdnZXJSdW5Mb29wIEpTQ19BUElfQVZBSUxBQkxF
KG1hY29zeCgxMC4xMCksIGlvcyg4LjApKTsKIAorLyohIEBhYnN0cmFjdCBUaGUgZGVsZWdhdGUg
dGhlIGNvbnRleHQgd2lsbCB1c2Ugd2hlbiB0cnlpbmcgdG8gbG9hZCBhIG1vZHVsZS4gTm90ZSwg
dGhpcyBkZWxlZ2F0ZSB3aWxsIGJlIGlnbm9yZWQgZm9yIGNvbnRleHRzIHJldHVybmVkIGJ5IFVJ
V2ViVmlldy4gKi8KK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrKSBpZCA8SlNNb2R1bGVMb2Fk
ZXJEZWxlZ2F0ZT4gbW9kdWxlTG9hZGVyRGVsZWdhdGUgSlNDX0FQSV9BVkFJTEFCTEUobWFjb3N4
KEpTQ19NQUNfVEJBKSwgaW9zKEpTQ19JT1NfVEJBKSk7CisKIEBlbmQKIAogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAKaW5kZXggZTE4ZGZkMjFmZjI4
NDAwN2QwMDM5ZTY0MzJkOWVjM2M0ZjFmMzE3Ny4uOWY1ZmRhZmM3ODE5NmZlNDQ4YzE4ZDA3OTE1
ZTA0ZmEzODY4NGFhYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nv
bnRleHRSZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVm
LmNwcApAQCAtMzAsOSArMzAsOSBAQAogI2luY2x1ZGUgIkFQSUNhc3QuaCIKICNpbmNsdWRlICJD
YWxsRnJhbWUuaCIKICNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCisjaW5jbHVkZSAi
SlNBUElHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0NhbGxiYWNrT2JqZWN0LmgiCiAjaW5j
bHVkZSAiSlNDbGFzc1JlZi5oIgotI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU291cmNl
UHJvdmlkZXIuaCIKQEAgLTEzOCw3ICsxMzgsNyBAQCBKU0dsb2JhbENvbnRleHRSZWYgSlNHbG9i
YWxDb250ZXh0Q3JlYXRlSW5Hcm91cChKU0NvbnRleHRHcm91cFJlZiBncm91cCwgSlNDbGFzcwog
ICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0ucHRyKCkpOwogCiAgICAgaWYgKCFnbG9iYWxPYmpl
Y3RDbGFzcykgewotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gSlNHbG9i
YWxPYmplY3Q6OmNyZWF0ZSh2bS5nZXQoKSwgSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVy
ZSh2bS5nZXQoKSwganNOdWxsKCkpKTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IEpTQVBJR2xvYmFsT2JqZWN0OjpjcmVhdGUodm0uZ2V0KCksIEpTQVBJR2xvYmFsT2Jq
ZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0uZ2V0KCksIGpzTnVsbCgpKSk7CiAjaWYgRU5BQkxFKFJF
TU9URV9JTlNQRUNUT1IpCiAgICAgICAgIGlmIChKU1JlbW90ZUluc3BlY3RvckdldEluc3BlY3Rp
b25FbmFibGVkQnlEZWZhdWx0KCkpCiAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPnNldFJlbW90
ZURlYnVnZ2luZ0VuYWJsZWQodHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTU2NyaXB0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOTBjYjYwOTA4OGVjODJmNzQ0YWE3MmE3Y2Q3YzFkOGUxMzg1M2M4NwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQuaApAQCAt
MCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZS5oPgorCisjaWYgSlNDX09CSkNfQVBJ
X0VOQUJMRUQKKworTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KKworT0JKQ19DTEFTUyBKU1ZpcnR1
YWxNYWNoaW5lOworCitKU0NfQ0xBU1NfQVZBSUxBQkxFKG1hY29zeChKU0NfTUFDX1RCQSksIGlv
cyhKU0NfSU9TX1RCQSkpCitAaW50ZXJmYWNlIEpTU2NyaXB0IDogTlNPYmplY3QKKworLyohCisg
QG1ldGhvZAorIEBhYnN0cmFjdCBDcmVhdGUgYSBKU1NjcmlwdCBmb3IgdGhlIHNwZWNpZmllZCB2
aXJ0dWFsIG1hY2hpbmUuCisgQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIGNvZGUgdG8gdXNlIHdo
ZW4gdGhlIHNjcmlwdCBpcyBldmFsdWF0ZWQgYnkgdGhlIEpTIHZtLgorIEBwYXJhbSB2bSBUaGUg
SlNWaXJ0dWFsTWFjaGluZSB0aGUgc2NyaXB0IGNhbiBiZSBldmFsdWF0ZWQgaW4uCisgQHJlc3Vs
dCBUaGUgbmV3IHNjcmlwdC4KKyAqLworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdFdp
dGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1h
Y2hpbmUgKil2bTsKKworLyohCisgQG1ldGhvZAorIEBhYnN0cmFjdCBDcmVhdGUgYSBKU1Njcmlw
dCBmb3IgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIG1hY2hpbmUgd2l0aCBhIHBhdGggdG8gYSBjb2Rl
c2lnbmluZyBhbmQgYnl0ZWNvZGUgY2FjaGluZy4KKyBAcGFyYW0gZmlsZVBhdGggQSBVUkwgY29u
dGFpbmluZyB0aGUgcGF0aCB0byBhIEpTIHNvdXJjZSBjb2RlIGZpbGUgb24gZGlzay4KKyBAcGFy
YW0gdm0gVGhlIEpTVmlydHVhbE1hY2hpbmUgdGhlIHNjcmlwdCBjYW4gYmUgZXZhbHVhdGVkIGlu
LgorIEBwYXJhbSBjb2RlU2lnbmluZ1BhdGggQSBVUkwgY29udGFpbmluZyB0aGUgcGF0aCB0byB0
aGUgY29kZVNpZ25pbmcgZmlsZSBmb3IgZmlsZVBhdGggb24gZGlzay4KKyBAcGFyYW0gY2FjaGVQ
YXRoIEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBhdGggd2hlcmUgdGhlIFZNIHNob3VsZCBjYWNoZSBm
b3IgZnV0dXJlIGV4ZWN1dGlvbi4KKyBAcmVzdWx0IFRoZSBuZXcgc2NyaXB0LgorIEBkaXNjdXNz
aW9uIHRoZSBmaWxlcyBhdCBmaWxlUGF0aCwgY29kZVNpZ25pbmdQYXRoLCBhbmQgY2FjaGVQYXRo
IHNob3VsZCBub3QgYmUgZXh0ZXJuYWxseSBtb2RpZmllZCAgZm9yIHRoZSBsaWZlY3ljbGUgb2Yg
dm0uIE5vdGUgdGhhdCBjb2RlU2lnbmluZ1BhdGggYW5kIGNhY2hlUGF0aCBhcmUgbm90IHVzZWQg
Y3VycmVudGx5LCBidXQgdGhhdCB3aWxsIGNoYW5nZSBpbiB0aGUgbmVhciBmdXR1cmUuCisgKi8K
KysgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRGcm9tVVRGOEZpbGU6KE5TVVJMICopZmls
ZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhDb2RlU2ln
bmluZzoobnVsbGFibGUgTlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZToo
bnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGg7CisKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExf
RU5ECisKKyNlbmRpZiAvLyBKU0NfT0JKQ19BUElfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNTY3JpcHQubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzk2YzQxZWY5ZWNjMzk4NDcwMDZjZmIxYjY1NzNj
NTM0OWQzZmRkZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNTY3JpcHQubW0KQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkpTU2NyaXB0
SW50ZXJuYWwuaCIKKworI2ltcG9ydCAiQVBJQ2FzdC5oIgorI2ltcG9ydCAiSlNDb250ZXh0SW50
ZXJuYWwuaCIKKyNpbXBvcnQgIkpTVmFsdWVQcml2YXRlLmgiCisjaW1wb3J0ICJTeW1ib2wuaCIK
KworI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECisKK0BpbXBsZW1lbnRhdGlvbiBKU1NjcmlwdCB7
CisgICAgU3RyaW5nIG1fc291cmNlOworfQorCisrIChpbnN0YW5jZXR5cGUpc2NyaXB0V2l0aFNv
dXJjZTooTlNTdHJpbmcgKilzb3VyY2UgaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGlu
ZSAqKXZtCit7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBKU1NjcmlwdCAqcmVzdWx0ID0g
W1tKU1NjcmlwdCBhbGxvY10gaW5pdF07CisgICAgcmVzdWx0LT5tX3NvdXJjZSA9IHNvdXJjZTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3I+CitzdGF0
aWMgYm9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKEZJTEUqIGZpbGUsIFZlY3RvciYg
YnVmZmVyKQoreworICAgIC8vIFdlIG1pZ2h0IGhhdmUgaW5qZWN0ZWQgInVzZSBzdHJpY3QiOyBh
dCB0aGUgdG9wLgorICAgIHNpemVfdCBpbml0aWFsU2l6ZSA9IGJ1ZmZlci5zaXplKCk7CisgICAg
aWYgKGZzZWVrKGZpbGUsIDAsIFNFRUtfRU5EKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGxvbmcgYnVmZmVyQ2FwYWNpdHkgPSBmdGVsbChmaWxlKTsKKyAgICBpZiAoYnVmZmVy
Q2FwYWNpdHkgPT0gLTEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZnNlZWsoZmls
ZSwgMCwgU0VFS19TRVQpID09IC0xKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYnVmZmVy
LnJlc2l6ZShidWZmZXJDYXBhY2l0eSArIGluaXRpYWxTaXplKTsKKyAgICBzaXplX3QgcmVhZFNp
emUgPSBmcmVhZChidWZmZXIuZGF0YSgpICsgaW5pdGlhbFNpemUsIDEsIGJ1ZmZlci5zaXplKCks
IGZpbGUpOworICAgIHJldHVybiByZWFkU2l6ZSA9PSBidWZmZXIuc2l6ZSgpIC0gaW5pdGlhbFNp
emU7Cit9CisKK3N0YXRpYyBib29sIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoY29uc3Qg
U3RyaW5nJiBmaWxlTmFtZSwgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgRklMRSogZiA9
IGZvcGVuKGZpbGVOYW1lLnV0ZjgoKS5kYXRhKCksICJyYiIpOworICAgIGlmICghZikgeworICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBvcGVuIGZpbGU6ICVzXG4iLCBmaWxlTmFt
ZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJv
b2wgcmVzdWx0ID0gZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShmLCBidWZmZXIpOworICAg
IGZjbG9zZShmKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworKyAoaW5zdGFuY2V0eXBl
KXNjcmlwdEZyb21VVEY4RmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihK
U1ZpcnR1YWxNYWNoaW5lICopdm0gd2l0aENvZGVTaWduaW5nOihOU1VSTCAqKWNvZGVTaWduaW5n
UGF0aCBhbmRCeXRlY29kZUNhY2hlOihOU1VSTCAqKWNhY2hlUGF0aAoreworICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCBjaGVjayBjb2RlU2lnbmluZy4KKyAgICBVTlVTRURfUEFSQU0oY29kZVNp
Z25pbmdQYXRoKTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWN0dWFsbHkgY2FjaGUgYnl0
ZWNvZGUuCisgICAgVU5VU0VEX1BBUkFNKGNhY2hlUGF0aCk7CisgICAgVU5VU0VEX1BBUkFNKHZt
KTsKKyAgICBVUkwgZmlsZVBhdGhVUkwoW2ZpbGVQYXRoIGFic29sdXRlVVJMXSk7CisgICAgaWYg
KCFmaWxlUGF0aFVSTC5pc0xvY2FsRmlsZSgpKQorICAgICAgICByZXR1cm4gbmlsOworICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBtbWFwIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBpbnN0ZWFk
IG9mIGNvcHlpbmcgaXQgaW50byBkaXJ0eSBtZW1vcnkuCisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZl
cjsKKyAgICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZVBhdGhVUkwuZmls
ZVN5c3RlbVBhdGgoKSwgYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIEpTU2Ny
aXB0ICpyZXN1bHQgPSBbW0pTU2NyaXB0IGFsbG9jXSBpbml0XTsKKyAgICByZXN1bHQtPm1fc291
cmNlID0gU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhidWZmZXIuZGF0YSgpLCBi
dWZmZXIuc2l6ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitjb25zdCBTdHJpbmcmIGdl
dEpTU2NyaXB0U291cmNlQ29kZShKU1NjcmlwdCAqbW9kdWxlKSB7IHJldHVybiBtb2R1bGUtPm1f
c291cmNlOyB9CisKK0BlbmQKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1NjcmlwdEludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTRmZGZhZTAwYzc0NmI5OTU4MmI5NmM4
MTkwMDdlYmRkOGJlNWE4MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2ltcG9ydCAi
SlNTY3JpcHQuaCIKKyNpbXBvcnQgIlNvdXJjZUNvZGUuaCIKKworCitjb25zdCBTdHJpbmcmIGdl
dEpTU2NyaXB0U291cmNlQ29kZShKU1NjcmlwdCAqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNWYWx1ZUludGVybmFsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTVmFsdWVJbnRlcm5hbC5oCmluZGV4IDRmMWE4ZjY5Y2JmY2MyOWFlYjI2NzQ3MzgxZDhk
NWY1ZTgxYmFlYWEuLjU0Yjc1NWVmZmZlNmVkMjRhNWMzMDIyYjdkNGMzYTE4NTAwYjAxZTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZUludGVybmFsLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlSW50ZXJuYWwuaApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw4ICsyNiw3
IEBACiAjaWZuZGVmIEpTVmFsdWVJbnRlcm5hbF9oCiAjZGVmaW5lIEpTVmFsdWVJbnRlcm5hbF9o
CiAKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+Ci0jaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9KU1ZhbHVlLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVl
UHJpdmF0ZS5oPgogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgKaW5kZXggNWNh
OWE3ZjRhMTA3MDQ0ZDYwOWIxMTI3N2JlODk3NmE0MzY3YWE5Yi4uOTEyMmVkNDlhNGVhMWFhNDll
YzY2N2ZlZjY2MjdmYzQzYjc3NzE2ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCkBAIC00Niw4ICs0Niw4IEBAIEpTQ29u
dGV4dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWNoaW5lKEpTVmlydHVhbE1hY2hpbmUg
Kik7CiAKIC0gKEpTQ29udGV4dCAqKWNvbnRleHRGb3JHbG9iYWxDb250ZXh0UmVmOihKU0dsb2Jh
bENvbnRleHRSZWYpZ2xvYmFsQ29udGV4dDsKIC0gKHZvaWQpYWRkQ29udGV4dDooSlNDb250ZXh0
ICopd3JhcHBlciBmb3JHbG9iYWxDb250ZXh0UmVmOihKU0dsb2JhbENvbnRleHRSZWYpZ2xvYmFs
Q29udGV4dDsKLQogQGVuZAorCiAjZW5kaWYgLy8gZGVmaW5lZChfX09CSkNfXykKIAogdm9pZCBz
Y2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRvciYsIHZvaWQq
IHJvb3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0
YXBpLm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCmluZGV4
IDM3ZTEzODVjOGM0ODRlZmFlOGE5YzNmOTJlMTM1Y2E3M2Y5NTkxOTIuLjQzNWZkYmIzNmQyNDQ2
ZTg1ZGI1MzEzNjMzY2Q3NjRmZWY3OTk4YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L3Rlc3RzL3Rlc3RhcGkubW0KQEAgLTMxLDcgKzMxLDkgQEAKICNpbXBvcnQgIkRGR1dvcmtsaXN0
LmgiCiAjaW1wb3J0ICJEYXRlVGVzdHMuaCIKICNpbXBvcnQgIkpTQ2FzdC5oIgorI2ltcG9ydCAi
SlNDb250ZXh0UHJpdmF0ZS5oIgogI2ltcG9ydCAiSlNFeHBvcnRUZXN0cy5oIgorI2ltcG9ydCAi
SlNTY3JpcHQuaCIKICNpbXBvcnQgIkpTVmFsdWVQcml2YXRlLmgiCiAjaW1wb3J0ICJKU1ZpcnR1
YWxNYWNoaW5lSW50ZXJuYWwuaCIKICNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmVQcml2YXRlLmgi
CkBAIC0xODEyLDEyICsxODE0LDI0OCBAQCBzdGF0aWMgdm9pZCBwYXJhbGxlbFByb21pc2VSZXNv
bHZlVGVzdCgpCiAgICAgfQogfQogCit0eXBlZGVmIEpTVmFsdWUgKiheUmVzb2x2ZUJsb2NrKShK
U0NvbnRleHQgKiwgSlNWYWx1ZSAqLCBKU1NjcmlwdCAqKTsKK3R5cGVkZWYgdm9pZCAoXkZldGNo
QmxvY2spKEpTQ29udGV4dCAqLCBKU1ZhbHVlICosIEpTVmFsdWUgKiwgSlNWYWx1ZSAqKTsKKwor
QGludGVyZmFjZSBKU0NvbnRleHRGZXRjaERlbGVnYXRlIDogSlNDb250ZXh0IDxKU01vZHVsZUxv
YWRlckRlbGVnYXRlPgorCisrIChpbnN0YW5jZXR5cGUpY29udGV4dFdpdGhCbG9ja0ZvckZldGNo
OihGZXRjaEJsb2NrKWJsb2NrOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBKU0NvbnRleHRG
ZXRjaERlbGVnYXRlIHsKKyAgICBGZXRjaEJsb2NrIG1fZmV0Y2hCbG9jazsKK30KKworKyAoaW5z
dGFuY2V0eXBlKWNvbnRleHRXaXRoQmxvY2tGb3JGZXRjaDooRmV0Y2hCbG9jaylibG9jaworewor
ICAgIGF1dG8gKnJlc3VsdCA9IFtbSlNDb250ZXh0RmV0Y2hEZWxlZ2F0ZSBhbGxvY10gaW5pdF07
CisgICAgcmVzdWx0LT5tX2ZldGNoQmxvY2sgPSBibG9jazsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCistICh2b2lkKWNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQgZmV0Y2hNb2R1bGVGb3JJ
ZGVudGlmaWVyOihKU1ZhbHVlICopaWRlbnRpZmllciB3aXRoUmVzb2x2ZUhhbmRsZXI6KEpTVmFs
dWUgKilyZXNvbHZlIGFuZFJlamVjdEhhbmRsZXI6KEpTVmFsdWUgKilyZWplY3QKK3sKKyAgICBt
X2ZldGNoQmxvY2soY29udGV4dCwgaWRlbnRpZmllciwgcmVzb2x2ZSwgcmVqZWN0KTsKK30KKwor
QGVuZAorCitzdGF0aWMgdm9pZCBjaGVja01vZHVsZUNvZGVSYW4oSlNDb250ZXh0ICpjb250ZXh0
LCBKU1ZhbHVlICpwcm9taXNlLCBKU1ZhbHVlICpleHBlY3RlZCkKK3sKKyAgICBfX2Jsb2NrIEJP
T0wgcHJvbWlzZVdhc1Jlc29sdmVkID0gZmFsc2U7CisgICAgW3Byb21pc2UgaW52b2tlTWV0aG9k
OkAidGhlbiIgd2l0aEFyZ3VtZW50czpAW14oSlNWYWx1ZSAqZXhwb3J0VmFsdWUpIHsKKyAgICAg
ICAgcHJvbWlzZVdhc1Jlc29sdmVkID0gdHJ1ZTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJtb2R1
bGUgZXhwb3J0ZWQgdmFsdWUgJ2V4cCcgaXMgbnVsbCIsIFtleHBvcnRWYWx1ZVtAImV4cCJdIGlz
RXF1YWxUb09iamVjdDpleHBlY3RlZF0pOworICAgICAgICBjaGVja1Jlc3VsdChAInJhbiBpcyAl
QCIsIFtjb250ZXh0W0AicmFuIl0gaXNFcXVhbFRvT2JqZWN0OmV4cGVjdGVkXSk7CisgICAgfSwg
XihKU1ZhbHVlICplcnJvcikgeworICAgICAgICBOU0xvZyhAIiVAIiwgW2Vycm9yIHRvU3RyaW5n
XSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAibW9kdWxlIGdyYXBoIHdhcyByZXNvbHZlZCBhcyBl
eHBlY3RlZCIsIE5PKTsKKyAgICB9XV07CisgICAgY2hlY2tSZXN1bHQoQCJQcm9taXNlIHdhcyBy
ZXNvbHZlZCIsIHByb21pc2VXYXNSZXNvbHZlZCk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrTW9k
dWxlV2FzUmVqZWN0ZWQoSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICpwcm9taXNlKQorewor
ICAgIF9fYmxvY2sgQk9PTCBwcm9taXNlV2FzUmVqZWN0ZWQgPSBmYWxzZTsKKyAgICBbcHJvbWlz
ZSBpbnZva2VNZXRob2Q6QCJ0aGVuIiB3aXRoQXJndW1lbnRzOkBbXigpIHsKKyAgICAgICAgY2hl
Y2tSZXN1bHQoQCJtb2R1bGUgd2FzIHJlamVjdGVkIGFzIGV4cGVjdGVkIiwgTk8pOworICAgIH0s
IF4oSlNWYWx1ZSAqZXJyb3IpIHsKKyAgICAgICAgcHJvbWlzZVdhc1JlamVjdGVkID0gdHJ1ZTsK
KyAgICAgICAgTlNMb2coQCIlQCIsIFtlcnJvciB0b1N0cmluZ10pOworICAgICAgICBjaGVja1Jl
c3VsdChAIm1vZHVsZSBncmFwaCB3YXMgcmVqZWN0ZWQgd2l0aCBlcnJvciIsICFbZXJyb3IgaXNF
cXVhbFdpdGhUeXBlQ29lcmNpb25Ub09iamVjdDpbSlNWYWx1ZSB2YWx1ZVdpdGhOdWxsSW5Db250
ZXh0OmNvbnRleHRdXSk7CisgICAgfV1dOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmV0Y2goKQor
eworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29u
dGV4dEZldGNoRGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl4oSlNDb250ZXh0ICpj
b250ZXh0LCBKU1ZhbHVlICppZGVudGlmaWVyLCBKU1ZhbHVlICpyZXNvbHZlLCBKU1ZhbHVlICpy
ZWplY3QpIHsKKyAgICAgICAgICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJm
aWxlOi8vL2RpcmVjdG9yeS9iYXIuanMiXSkKKyAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxs
V2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNlOkAiaW1wb3J0IFwiLi4v
Zm9vLmpzXCI7IGV4cG9ydCBsZXQgZXhwID0gbnVsbDsiIGluVmlydHVhbE1hY2hpbmU6W2NvbnRl
eHQgdmlydHVhbE1hY2hpbmVdXV1dOworICAgICAgICAgICAgZWxzZSBpZiAoW2lkZW50aWZpZXIg
aXNFcXVhbFRvT2JqZWN0OkAiZmlsZTovLy9mb28uanMiXSkKKyAgICAgICAgICAgICAgICBbcmVz
b2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNlOkAiZ2xv
YmFsVGhpcy5yYW4gPSBudWxsOyIgaW5WaXJ0dWFsTWFjaGluZTpbY29udGV4dCB2aXJ0dWFsTWFj
aGluZV1dXV07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgW3JlamVjdCBjYWxs
V2l0aEFyZ3VtZW50czpAW1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6QCJX
ZWlyZCBwYXRoIiBpbkNvbnRleHQ6Y29udGV4dF1dXTsKKyAgICAgICAgfV07CisgICAgICAgIGNv
bnRleHQubW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBjb250ZXh0OworICAgICAgICBKU1ZhbHVlICpw
cm9taXNlID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy4vYmFyLmpzJyk7IiB3
aXRoU291cmNlVVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvZGlyZWN0b3J5IiBpc0RpcmVj
dG9yeTpZRVNdXTsKKyAgICAgICAgSlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE51
bGxJbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0
LCBwcm9taXNlLCBudWxsKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGZXRjaFdpdGhU
d29DeWNsZSgpCit7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRl
eHQgPSBbSlNDb250ZXh0RmV0Y2hEZWxlZ2F0ZSBjb250ZXh0V2l0aEJsb2NrRm9yRmV0Y2g6XihK
U0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWUgKmlkZW50aWZpZXIsIEpTVmFsdWUgKnJlc29sdmUs
IEpTVmFsdWUgKnJlamVjdCkgeworICAgICAgICAgICAgaWYgKFtpZGVudGlmaWVyIGlzRXF1YWxU
b09iamVjdDpAImZpbGU6Ly8vZGlyZWN0b3J5L2Jhci5qcyJdKQorICAgICAgICAgICAgICAgIFty
ZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlwdFdpdGhTb3VyY2U6QCJp
bXBvcnQgeyBuIH0gZnJvbSBcIi4uL2Zvby5qc1wiOyBleHBvcnQgbGV0IGV4cCA9IG47IiBpblZp
cnR1YWxNYWNoaW5lOltjb250ZXh0IHZpcnR1YWxNYWNoaW5lXV1dXTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZpbGU6Ly8vZm9vLmpzIl0pCisg
ICAgICAgICAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2Ny
aXB0V2l0aFNvdXJjZTpAImltcG9ydCBcImRpcmVjdG9yeS9iYXIuanNcIjsgZ2xvYmFsVGhpcy5y
YW4gPSBudWxsOyBleHBvcnQgbGV0IG4gPSBudWxsOyIgaW5WaXJ0dWFsTWFjaGluZTpbY29udGV4
dCB2aXJ0dWFsTWFjaGluZV1dXV07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
W3JlamVjdCBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJv
bU1lc3NhZ2U6QCJXZWlyZCBwYXRoIiBpbkNvbnRleHQ6Y29udGV4dF1dXTsKKyAgICAgICAgfV07
CisgICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBjb250ZXh0OworICAgICAg
ICBKU1ZhbHVlICpwcm9taXNlID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy4v
YmFyLmpzJyk7IiB3aXRoU291cmNlVVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvZGlyZWN0
b3J5IiBpc0RpcmVjdG9yeTpZRVNdXTsKKyAgICAgICAgSlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVl
IHZhbHVlV2l0aE51bGxJbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNoZWNrTW9kdWxlQ29k
ZVJhbihjb250ZXh0LCBwcm9taXNlLCBudWxsKTsKKyAgICB9Cit9CisKKworc3RhdGljIHZvaWQg
dGVzdEZldGNoV2l0aFRocmVlQ3ljbGUoKQoreworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAg
ICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZldGNoRGVsZWdhdGUgY29udGV4dFdpdGhC
bG9ja0ZvckZldGNoOl4oSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICppZGVudGlmaWVyLCBK
U1ZhbHVlICpyZXNvbHZlLCBKU1ZhbHVlICpyZWplY3QpIHsKKyAgICAgICAgICAgIGlmIChbaWRl
bnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL2RpcmVjdG9yeS9iYXIuanMiXSkKKyAg
ICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3Jp
cHRXaXRoU291cmNlOkAiaW1wb3J0IHsgbiB9IGZyb20gXCIuLi9mb28uanNcIjsgZXhwb3J0IGxl
dCBmb28gPSBuOyIgaW5WaXJ0dWFsTWFjaGluZTpbY29udGV4dCB2aXJ0dWFsTWFjaGluZV1dXV07
CisgICAgICAgICAgICBlbHNlIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxl
Oi8vL2Zvby5qcyJdKQorICAgICAgICAgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRz
OkBbW0pTU2NyaXB0IHNjcmlwdFdpdGhTb3VyY2U6QCJpbXBvcnQgXCJvdGhlckRpcmVjdG9yeS9i
YXouanNcIjsgZXhwb3J0IGxldCBuID0gbnVsbDsiIGluVmlydHVhbE1hY2hpbmU6W2NvbnRleHQg
dmlydHVhbE1hY2hpbmVdXV1dOworICAgICAgICAgICAgZWxzZSBpZiAoW2lkZW50aWZpZXIgaXNF
cXVhbFRvT2JqZWN0OkAiZmlsZTovLy9vdGhlckRpcmVjdG9yeS9iYXouanMiXSkKKyAgICAgICAg
ICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRo
U291cmNlOkAiaW1wb3J0IHsgZm9vIH0gZnJvbSBcIi4uL2RpcmVjdG9yeS9iYXIuanNcIjsgZ2xv
YmFsVGhpcy5yYW4gPSBudWxsOyBleHBvcnQgbGV0IGV4cCA9IGZvbzsiIGluVmlydHVhbE1hY2hp
bmU6W2NvbnRleHQgdmlydHVhbE1hY2hpbmVdXV1dOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIFtyZWplY3QgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNWYWx1ZSB2YWx1ZVdpdGhO
ZXdFcnJvckZyb21NZXNzYWdlOkAiV2VpcmQgcGF0aCIgaW5Db250ZXh0OmNvbnRleHRdXV07Cisg
ICAgICAgIH1dOworICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4
dDsKKyAgICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAi
aW1wb3J0KCcuLi9vdGhlckRpcmVjdG9yeS9iYXouanMnKTsiIHdpdGhTb3VyY2VVUkw6W05TVVJM
IGZpbGVVUkxXaXRoUGF0aDpAIi9kaXJlY3RvcnkiIGlzRGlyZWN0b3J5OllFU11dOworICAgICAg
ICBKU1ZhbHVlICpudWxsID0gW0pTVmFsdWUgdmFsdWVXaXRoTnVsbEluQ29udGV4dDpjb250ZXh0
XTsKKyAgICAgICAgY2hlY2tNb2R1bGVDb2RlUmFuKGNvbnRleHQsIHByb21pc2UsIG51bGwpOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgdGVzdExvYWRlclJlc29sdmVzQWJzb2x1dGVTY3JpcHRV
UkwoKQoreworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250ZXh0ID0g
W0pTQ29udGV4dEZldGNoRGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl4oSlNDb250
ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICppZGVudGlmaWVyLCBKU1ZhbHVlICpyZXNvbHZlLCBKU1Zh
bHVlICpyZWplY3QpIHsKKyAgICAgICAgICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmpl
Y3Q6QCJmaWxlOi8vL2RpcmVjdG9yeS9iYXIuanMiXSkKKyAgICAgICAgICAgICAgICBbcmVzb2x2
ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNlOkAiZXhwb3J0
IGxldCBleHAgPSBudWxsOyBnbG9iYWxUaGlzLnJhbiA9IG51bGw7IiBpblZpcnR1YWxNYWNoaW5l
Oltjb250ZXh0IHZpcnR1YWxNYWNoaW5lXV1dXTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBbcmVqZWN0IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTVmFsdWUgdmFsdWVXaXRoTmV3
RXJyb3JGcm9tTWVzc2FnZTpAIldlaXJkIHBhdGgiIGluQ29udGV4dDpjb250ZXh0XV1dOworICAg
ICAgICB9XTsKKyAgICAgICAgY29udGV4dC5tb2R1bGVMb2FkZXJEZWxlZ2F0ZSA9IGNvbnRleHQ7
CisgICAgICAgIEpTVmFsdWUgKnByb21pc2UgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImlt
cG9ydCgnL2RpcmVjdG9yeS9iYXIuanMnKTsiXTsKKyAgICAgICAgSlNWYWx1ZSAqbnVsbCA9IFtK
U1ZhbHVlIHZhbHVlV2l0aE51bGxJbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNoZWNrTW9k
dWxlQ29kZVJhbihjb250ZXh0LCBwcm9taXNlLCBudWxsKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RMb2FkZXJSZWplY3RzTmlsU2NyaXB0VVJMKCkKK3sKKyAgICBAYXV0b3JlbGVhc2Vw
b29sIHsKKyAgICAgICAgYXV0byAqY29udGV4dCA9IFtKU0NvbnRleHRGZXRjaERlbGVnYXRlIGNv
bnRleHRXaXRoQmxvY2tGb3JGZXRjaDpeKEpTQ29udGV4dCAqLCBKU1ZhbHVlICosIEpTVmFsdWUg
KiwgSlNWYWx1ZSAqKSB7CisgICAgICAgICAgICBjaGVja1Jlc3VsdChAIkNvZGUgaXMgbm90IHJ1
biIsIE5PKTsKKyAgICAgICAgfV07CisgICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVyRGVsZWdh
dGUgPSBjb250ZXh0OworICAgICAgICBKU1ZhbHVlICpwcm9taXNlID0gW2NvbnRleHQgZXZhbHVh
dGVTY3JpcHQ6QCJpbXBvcnQoJy4uL290aGVyRGlyZWN0b3J5L2Jhei5qcycpOyJdOworICAgICAg
ICBjaGVja01vZHVsZVdhc1JlamVjdGVkKGNvbnRleHQsIHByb21pc2UpOworICAgIH0KK30KKwor
c3RhdGljIHZvaWQgdGVzdExvYWRlclJlamVjdHNGYWlsZWRGZXRjaCgpCit7CisgICAgQGF1dG9y
ZWxlYXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0RmV0Y2hEZWxl
Z2F0ZSBjb250ZXh0V2l0aEJsb2NrRm9yRmV0Y2g6XihKU0NvbnRleHQgKmNvbnRleHQsIEpTVmFs
dWUgKiwgSlNWYWx1ZSAqLCBKU1ZhbHVlICpyZWplY3QpIHsKKyAgICAgICAgICAgIFtyZWplY3Qg
Y2FsbFdpdGhBcmd1bWVudHM6QFtbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZyb21NZXNzYWdl
OkAiTm9wZSIgaW5Db250ZXh0OmNvbnRleHRdXV07CisgICAgICAgIH1dOworICAgICAgICBjb250
ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAgICAgSlNWYWx1ZSAqcHJv
bWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0KCcvb3RoZXJEaXJlY3Rvcnkv
YmF6LmpzJyk7Il07CisgICAgICAgIGNoZWNrTW9kdWxlV2FzUmVqZWN0ZWQoY29udGV4dCwgcHJv
bWlzZSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB0ZXN0SW1wb3J0TW9kdWxlVHdpY2UoKQor
eworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29u
dGV4dEZldGNoRGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl4oSlNDb250ZXh0ICog
Y29udGV4dCwgSlNWYWx1ZSAqLCBKU1ZhbHVlICpyZXNvbHZlLCBKU1ZhbHVlICopIHsKKyAgICAg
ICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlwdFdpdGhT
b3VyY2U6QCJyYW4rKzsgZXhwb3J0IGxldCBleHAgPSAxOyIgaW5WaXJ0dWFsTWFjaGluZTpbY29u
dGV4dCB2aXJ0dWFsTWFjaGluZV1dXV07CisgICAgICAgIH1dOworICAgICAgICBjb250ZXh0Lm1v
ZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAgICAgY29udGV4dFtAInJhbiJdID0g
QCgwKTsKKyAgICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0
OkAiaW1wb3J0KCcvYmF6LmpzJyk7Il07CisgICAgICAgIEpTVmFsdWUgKnByb21pc2UyID0gW2Nv
bnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy9iYXouanMnKTsiXTsKKyAgICAgICAgSlNW
YWx1ZSAqb25lID0gW0pTVmFsdWUgdmFsdWVXaXRoSW50MzI6MSBpbkNvbnRleHQ6Y29udGV4dF07
CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCBwcm9taXNlLCBvbmUpOworICAg
ICAgICBjaGVja01vZHVsZUNvZGVSYW4oY29udGV4dCwgcHJvbWlzZTIsIG9uZSk7CisgICAgfQor
fQorCitAaW50ZXJmYWNlIEpTQ29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0ZSA6IEpTQ29udGV4dCA8
SlNNb2R1bGVMb2FkZXJEZWxlZ2F0ZT4KKworKyAoaW5zdGFuY2V0eXBlKW5ld0NvbnRleHQ7CisK
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIEpTQ29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0ZSB7Cit9
CisKKysgKGluc3RhbmNldHlwZSluZXdDb250ZXh0Cit7CisgICAgYXV0byAqcmVzdWx0ID0gW1tK
U0NvbnRleHRGaWxlTG9hZGVyRGVsZWdhdGUgYWxsb2NdIGluaXRdOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3N0YXRpYyBOU1VSTCAqcmVzb2x2ZVBhdGhUb1NjcmlwdHMoKQoreworICAgIE5T
U3RyaW5nICphcmcwID0gTlNQcm9jZXNzSW5mby5wcm9jZXNzSW5mby5hcmd1bWVudHNbMF07Cisg
ICAgTlNVUkwgKmJhc2U7CisgICAgaWYgKFthcmcwIGhhc1ByZWZpeDpAIi8iXSkKKyAgICAgICAg
YmFzZSA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6YXJnMCBpc0RpcmVjdG9yeTpOT107CisgICAg
ZWxzZSB7CisgICAgICAgIGNvbnN0IHNpemVfdCBtYXhMZW5ndGggPSAxMDAwMDsKKyAgICAgICAg
Y2hhciBjd2RbbWF4TGVuZ3RoXTsKKyAgICAgICAgaWYgKCFnZXRjd2QoY3dkLCBtYXhMZW5ndGgp
KSB7CisgICAgICAgICAgICBOU0xvZyhAImdldGN3ZCBlcnJvcmVkIHdpdGggY29kZTogJXMiLCBz
dHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAg
ICBOU1VSTCAqY3dkVVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIiVzIiwgY3dkXV07CisgICAgICAgIGJhc2UgPSBbTlNVUkwgZmlsZVVSTFdp
dGhQYXRoOmFyZzAgaXNEaXJlY3Rvcnk6Tk8gcmVsYXRpdmVUb1VSTDpjd2RVUkxdOworICAgIH0K
KyAgICByZXR1cm4gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpAIi4vdGVzdGFwaVNjcmlwdHMvIiBp
c0RpcmVjdG9yeTpZRVMgcmVsYXRpdmVUb1VSTDpiYXNlXTsKK30KKworLSAodm9pZCljb250ZXh0
OihKU0NvbnRleHQgKiljb250ZXh0IGZldGNoTW9kdWxlRm9ySWRlbnRpZmllcjooSlNWYWx1ZSAq
KWlkZW50aWZpZXIgd2l0aFJlc29sdmVIYW5kbGVyOihKU1ZhbHVlICopcmVzb2x2ZSBhbmRSZWpl
Y3RIYW5kbGVyOihKU1ZhbHVlICopcmVqZWN0Cit7CisgICAgTlNVUkwgKmZpbGVQYXRoID0gW05T
VVJMIFVSTFdpdGhTdHJpbmc6W2lkZW50aWZpZXIgdG9TdHJpbmddXTsKKyAgICBhdXRvICpzY3Jp
cHQgPSBbSlNTY3JpcHQgc2NyaXB0RnJvbVVURjhGaWxlOmZpbGVQYXRoIGluVmlydHVhbE1hY2hp
bmU6W2NvbnRleHQgdmlydHVhbE1hY2hpbmVdIHdpdGhDb2RlU2lnbmluZzpuaWwgYW5kQnl0ZWNv
ZGVDYWNoZTpuaWxdOworICAgIGlmIChzY3JpcHQpCisgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRo
QXJndW1lbnRzOkBbc2NyaXB0XV07CisgICAgZWxzZQorICAgICAgICBbcmVqZWN0IGNhbGxXaXRo
QXJndW1lbnRzOkBbW0pTVmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpAIlVuYWJs
ZSB0byBjcmVhdGUgU2NyaXB0IiBpbkNvbnRleHQ6Y29udGV4dF1dXTsKK30KKworQGVuZAorCitz
dGF0aWMgdm9pZCB0ZXN0TG9hZEJhc2ljRmlsZSgpCit7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7
CisgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0RmlsZUxvYWRlckRlbGVnYXRlIG5l
d0NvbnRleHRdOworICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4
dDsKKyAgICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAi
aW1wb3J0KCcuL2Jhc2ljLmpzJyk7IiB3aXRoU291cmNlVVJMOnJlc29sdmVQYXRoVG9TY3JpcHRz
KCldOworICAgICAgICBKU1ZhbHVlICpudWxsID0gW0pTVmFsdWUgdmFsdWVXaXRoTnVsbEluQ29u
dGV4dDpjb250ZXh0XTsKKyAgICAgICAgY2hlY2tNb2R1bGVDb2RlUmFuKGNvbnRleHQsIHByb21p
c2UsIG51bGwpOworICAgIH0KK30KKwogdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSgpCiB7CiAgICAg
TlNMb2coQCJUZXN0aW5nIE9iamVjdGl2ZS1DIEFQSSIpOworCiAgICAgY2hlY2tOZWdhdGl2ZU5T
SW50ZWdlcnMoKTsKICAgICBydW5KSVRUaHJlYWRMaW1pdFRlc3RzKCk7CiAKKyAgICB0ZXN0TG9h
ZGVyUmVzb2x2ZXNBYnNvbHV0ZVNjcmlwdFVSTCgpOworICAgIHRlc3RGZXRjaCgpOworICAgIHRl
c3RGZXRjaFdpdGhUd29DeWNsZSgpOworICAgIHRlc3RGZXRjaFdpdGhUaHJlZUN5Y2xlKCk7Cisg
ICAgdGVzdEltcG9ydE1vZHVsZVR3aWNlKCk7CisKKyAgICB0ZXN0TG9hZGVyUmVqZWN0c05pbFNj
cmlwdFVSTCgpOworICAgIHRlc3RMb2FkZXJSZWplY3RzRmFpbGVkRmV0Y2goKTsKKworICAgIC8v
IEZpbGUgbG9hZGluZworICAgIHRlc3RMb2FkQmFzaWNGaWxlKCk7CisKICAgICBwcm9taXNlV2l0
aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlc29sdmVFYWdlcik7CiAgICAgcHJvbWlzZVdpdGhFeGVj
dXRvcihSZXNvbHV0aW9uOjpSZWplY3RFYWdlcik7CiAgICAgcHJvbWlzZVdpdGhFeGVjdXRvcihS
ZXNvbHV0aW9uOjpSZXNvbHZlTGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IGYzZWYxYzQyMzgwYjNjZWYyZjAwZmFjNjU4ZTkyZTlkNmU3OTlmMDMuLjYzOGJkNzEwZTY4M2Ux
NjdjYWU5MWM1MDNiNDE4ZTI0YWNmZjJlMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0xMDU3LDYgKzEwNTcsOCBAQAogCQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBGQTEgLyogSlNB
cnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzOUZCOEI5MUM5OURBN0MwMDk0MEZBMSAvKiBKU0FycmF5SW5saW5lcy5oICovOyB9Owog
CQk1M0I0QkQxMjFGNjhCMzI1MDBEMkJFQTMgLyogV2FzbU9wcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMzQjE1REUxREM3RjQ2MzAwNEQ1MDBBIC8q
IFdhc21PcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1M0I2MDFFQzIwMzRCOEM1MDA2QkU2NjcgLyogSlNDYXN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0I2MDFFQjIwMzRCOEM1MDA2QkU2Njcg
LyogSlNDYXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNTNDM0Q1RTUyMUVDRTc3MjAwODdGREZDIC8qIGJhc2ljLmpzIGluIENvcHkgU3VwcG9y
dCBTY3JpcHQgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNDM0Q1RTQyMUVD
RTZDRTAwODdGREZDIC8qIGJhc2ljLmpzICovOyB9OworCQk1M0M0RjY2QjIxQjFBNDA5MDAyRkQw
MDkgLyogSlNBUElHbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzQzRGNjZBMjFCMUE0MDkwMDJGRDAwOSAvKiBKU0FQSUdsb2JhbE9i
amVjdC5oICovOyB9OwogCQk1M0M2RkVFRjFFOEFERkE5MDBCMTg0MjUgLyogV2FzbU9wY29kZU9y
aWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTND
NkZFRUUxRThBREZBOTAwQjE4NDI1IC8qIFdhc21PcGNvZGVPcmlnaW4uaCAqLzsgfTsKIAkJNTND
QTczMEExRUE1MzNEODAwNzYwNDlEIC8qIFdhc21CQlFQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0NBNzMwODFFQTUzM0Q4MDA3NjA0OUQgLyog
V2FzbUJCUVBsYW4uaCAqLzsgfTsKIAkJNTNENDQ0REMxREFGMDhBQjAwQjkyNzg0IC8qIEIzV2Fz
bUFkZHJlc3NWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTNENDQ0REIxREFGMDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5oICov
OyB9OwpAQCAtMTA2NSw2ICsxMDY3LDggQEAKIAkJNTNFOUUwQUMxRUFFODNERjAwRkVFMjUxIC8q
IFdhc21NYWNoaW5lVGhyZWFkcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTNFOUUwQUExRUFFODNERTAwRkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFk
cy5oICovOyB9OwogCQk1M0U5RTBBRjFFQUVDNDU3MDBGRUUyNTEgLyogV2FzbVRpZXJVcENvdW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0U5RTBB
RTFFQUVDNDU3MDBGRUUyNTEgLyogV2FzbVRpZXJVcENvdW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTNFQUZFMkYyMDhERkFCNDAwN0Q1MjRC
IC8qIHRlc3RhcGkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMxRDRFMTkxRjU5Q0REMjAwRUM4MzZDIC8qIHRlc3RhcGkuY3BwICovOyB9OworCQk1
M0VFMDFCNjIxOEY2OTE2MDBBRDFGOEQgLyogSlNTY3JpcHQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRUUwMUI1MjE4RjY5MEYwMEFEMUY4RCAvKiBK
U1NjcmlwdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTUzRUUwMUI4MjE4RjdFRkYwMEFEMUY4RCAvKiBKU1NjcmlwdEludGVybmFsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0VFMDFCNzIxOEY3RUZG
MDBBRDFGOEQgLyogSlNTY3JpcHRJbnRlcm5hbC5oICovOyB9OwogCQk1M0YxMUY0MTIwOTEzOEQ3
MDBFNDExQTcgLyogSlNJbW11dGFibGVCdXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjExRjQwMjA5MTM4RDcwMEU0MTFBNyAvKiBKU0lt
bXV0YWJsZUJ1dHRlcmZseS5oICovOyB9OwogCQk1M0Y0MEU4NTFENThGOTc3MDA5OUExQjYgLyog
V2FzbVNlY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1M0Y0MEU4NDFENThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rpb25zLmggKi87IH07CiAJ
CTUzRjQwRThCMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRThBMUQ1OTAxQkIw
MDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCAqLzsgfTsKQEAgLTEyMTksNyArMTIyMyw3
IEBACiAJCTg2RTNDNjE1MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwRjE2N0JB
Qjg3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJODZFM0M2MTcxNjdCQUJFRTAwNkQ3NjBBIC8qIEpT
Q29udGV4dEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NkUzQzYwOTE2N0JBQjg3MDA2RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NkUzQzYx
OTE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwQzE2N0JBQjg3MDA2RDc2MEEgLyogSlNX
cmFwcGVyTWFwLmggKi87IH07Ci0JCTg2RTNDNjFCMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZhbHVl
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg2RTNDNjBFMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZhbHVlSW50ZXJuYWwuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk4NkUzQzYxQjE2N0JBQkVF
MDA2RDc2MEEgLyogSlNWYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwRTE2N0JBQjg3MDA2RDc2MEEgLyogSlNWYWx1ZUlu
dGVybmFsLmggKi87IH07CiAJCTg2RTNDNjFEMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxN
YWNoaW5lSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2RTNDNjExMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJu
YWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4
NkVDOURDNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUM5REI1MTMyOERGODIwMDJC
MkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5oICovOyB9OwogCQk4NkVDOURDNjEzMjhERjgyMDAy
QjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUM5REI2MTMyOERGODIwMDJCMkFENyAvKiBERkdHZW5lcmF0
aW9uSW5mby5oICovOyB9OwpAQCAtMjAwMyw5ICsyMDA3LDEwIEBACiAJCTVEQkIxNTExMTMxRDBC
MTMwMDU2QUQzNiAvKiBDb3B5IFN1cHBvcnQgU2NyaXB0ICovID0gewogCQkJaXNhID0gUEJYQ29w
eUZpbGVzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDEyOwotCQkJZHN0UGF0aCA9
ICIiOworCQkJZHN0UGF0aCA9IHRlc3RhcGlTY3JpcHRzOwogCQkJZHN0U3ViZm9sZGVyU3BlYyA9
IDE2OwogCQkJZmlsZXMgPSAoCisJCQkJNTNDM0Q1RTUyMUVDRTc3MjAwODdGREZDIC8qIGJhc2lj
LmpzIGluIENvcHkgU3VwcG9ydCBTY3JpcHQgKi8sCiAJCQkJRkVDQjhCMkExRDI1Q0I1QTAwNkYy
NDYzIC8qIHRlc3RhcGktZnVuY3Rpb24tb3ZlcnJpZGVzLmpzIGluIENvcHkgU3VwcG9ydCBTY3Jp
cHQgKi8sCiAJCQkJNURCQjE1MUIxMzFEMEIzMTAwNTZBRDM2IC8qIHRlc3RhcGkuanMgaW4gQ29w
eSBTdXBwb3J0IFNjcmlwdCAqLywKIAkJCSk7CkBAIC0zNTU3LDYgKzM1NjIsOSBAQAogCQk1M0Iw
QkUzNTFFNTYxQjA5MDBBOEZDMjkgLyogUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm94eWFibGVBY2Nlc3NDYXNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNCMEJFMzcxRTU2MUIyNDAwQThGQzI5IC8qIElu
dHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzQjYwMUVCMjAzNEI4QzUwMDZCRTY2NyAvKiBKU0Nhc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNDYXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzQzNENUU0
MjFFQ0U2Q0UwMDg3RkRGQyAvKiBiYXNpYy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNj
cmlwdDsgcGF0aCA9IGJhc2ljLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0M0
RjY2QTIxQjFBNDA5MDAyRkQwMDkgLyogSlNBUElHbG9iYWxPYmplY3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNBUElHbG9iYWxPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTND
NEY2NkMyMUIxQTdDQTAwMkZEMDA5IC8qIEpTQVBJR2xvYmFsT2JqZWN0Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gSlNBUElHbG9iYWxPYmplY3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUzQzZGRUVFMUU4QURGQTkwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21PcGNvZGVPcmlnaW4uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNDNkZFRjAxRThBRkUwQzAwQjE4NDI1IC8qIFdhc21P
cGNvZGVPcmlnaW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Fz
bU9wY29kZU9yaWdpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzQ0E3MzA3
MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxhbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXYXNtQkJRUGxhbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0zNTY5LDYgKzM1NzcsOSBAQAogCQk1M0U5RTBBOTFFQUU4M0RFMDBGRUUyNTEgLyog
V2FzbU1hY2hpbmVUaHJlYWRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdhc21NYWNoaW5lVGhyZWFkcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUzRTlFMEFBMUVBRTgzREUwMEZFRTI1MSAvKiBXYXNtTWFjaGluZVRocmVhZHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU1hY2hpbmVUaHJlYWRzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRTlFMEFFMUVBRUM0NTcwMEZFRTI1MSAvKiBXYXNtVGll
clVwQ291bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVRpZXJVcENv
dW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRUUwMUI0MjE4RjY5MEUwMEFE
MUY4RCAvKiBKU1NjcmlwdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IEpTU2NyaXB0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0VFMDFCNTIx
OEY2OTBGMDBBRDFGOEQgLyogSlNTY3JpcHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNTY3JpcHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNFRTAxQjcy
MThGN0VGRjAwQUQxRjhEIC8qIEpTU2NyaXB0SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNTY3JpcHRJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1M0YxMUY0MDIwOTEzOEQ3MDBFNDExQTcgLyogSlNJbW11dGFibGVCdXR0ZXJmbHku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNJbW11dGFibGVCdXR0ZXJmbHkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTNGMTFGNDIyMDkxNzQ5ODAwRTQxMUE3IC8qIEpTSW1tdXRhYmxlQnV0
dGVyZmx5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGMjU2RTExQjg3RTI4MDAwQjRCNzY4IC8q
IEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC01NTM4LDYgKzU1NDksNyBAQAogCQkxNDEyMTEwMDBBNDg3NzI2MDA0
ODAyNTUgLyogdGVzdHMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAorCQkJCTUzQzNENUUzMjFFQ0U2OEUwMDg3RkRGQyAvKiB0ZXN0YXBpU2NyaXB0cyAqLywKIAkJ
CQlGRUYwNDA1MDFBQUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCAqLywK
IAkJCQlGRUYwNDA1MjFBQUVDNEVEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmggKi8s
CiAJCQkJQzI5RUNCMDIxODA0RDBFRDAwRDJDQkI0IC8qIEN1cnJlbnRUaGlzSW5zaWRlQmxvY2tH
ZXR0ZXJUZXN0LmggKi8sCkBAIC01OTM3LDYgKzU5NDksOCBAQAogCQkJCTUzNTI5QTRCMUM0NTdC
NzUwMDBCNDlDNiAvKiBBUElVdGlscy5oICovLAogCQkJCTFDQUE4QjRBMEQzMkMzOUEwMDQxQkNG
RiAvKiBKYXZhU2NyaXB0LmggKi8sCiAJCQkJMUNBQThCNEIwRDMyQzM5QTAwNDFCQ0ZGIC8qIEph
dmFTY3JpcHRDb3JlLmggKi8sCisJCQkJNTNDNEY2NkEyMUIxQTQwOTAwMkZEMDA5IC8qIEpTQVBJ
R2xvYmFsT2JqZWN0LmggKi8sCisJCQkJNTNDNEY2NkMyMUIxQTdDQTAwMkZEMDA5IC8qIEpTQVBJ
R2xvYmFsT2JqZWN0Lm1tICovLAogCQkJCUJDMDg5NEQ1MEZBRkJBMkQwMDAwMTg2NSAvKiBKU0FQ
SVZhbHVlV3JhcHBlci5jcHAgKi8sCiAJCQkJQkMwODk0RDYwRkFGQkEyRDAwMDAxODY1IC8qIEpT
QVBJVmFsdWVXcmFwcGVyLmggKi8sCiAJCQkJQzJDRjM5QzAxNkUxNUE4MTAwREQ2OUJFIC8qIEpT
QVBJV3JhcHBlck9iamVjdC5oICovLApAQCAtNTk3OCw2ICs1OTkyLDkgQEAKIAkJCQlBNTUyQzM3
RDFBRERCOEZFMDAxMzk3MjYgLyogSlNSZW1vdGVJbnNwZWN0b3IuY3BwICovLAogCQkJCUE1NTJD
MzdFMUFEREI4RkUwMDEzOTcyNiAvKiBKU1JlbW90ZUluc3BlY3Rvci5oICovLAogCQkJCTk1QzE4
RDNFMEM5MEU3RUYwMEU3MkY3MyAvKiBKU1JldGFpblB0ci5oICovLAorCQkJCTUzRUUwMUI1MjE4
RjY5MEYwMEFEMUY4RCAvKiBKU1NjcmlwdC5oICovLAorCQkJCTUzRUUwMUI0MjE4RjY5MEUwMEFE
MUY4RCAvKiBKU1NjcmlwdC5tbSAqLywKKwkJCQk1M0VFMDFCNzIxOEY3RUZGMDBBRDFGOEQgLyog
SlNTY3JpcHRJbnRlcm5hbC5oICovLAogCQkJCUE3QzBDNEFBMTY3QzA4Q0QwMDE3MDExRCAvKiBK
U1NjcmlwdFJlZi5jcHAgKi8sCiAJCQkJQTdDMEM0QUIxNjdDMDhDRDAwMTcwMTFEIC8qIEpTU2Ny
aXB0UmVmUHJpdmF0ZS5oICovLAogCQkJCTE0ODJCNzRDMEE0MzAzMjgwMDUxN0NGQyAvKiBKU1N0
cmluZ1JlZi5jcHAgKi8sCkBAIC02Mjc4LDYgKzYyOTUsMTUgQEAKIAkJCXBhdGggPSAidW5pZmll
ZC1zb3VyY2VzIjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTUzQzNENUUz
MjFFQ0U2OEUwMDg3RkRGQyAvKiB0ZXN0YXBpU2NyaXB0cyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdy
b3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNTNDM0Q1RTQyMUVDRTZDRTAwODdGREZDIC8qIGJh
c2ljLmpzICovLAorCQkJKTsKKwkJCW5hbWUgPSB0ZXN0YXBpU2NyaXB0czsKKwkJCXBhdGggPSBB
UEkvdGVzdHMvdGVzdGFwaVNjcmlwdHM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9
OwogCQk2NTBGREY4RDA5RDBGQ0E3MDA3NjlFNTQgLyogRGVyaXZlZCBTb3VyY2VzICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTkxNjYsNiArOTE5Miw3IEBA
CiAJCQkJMEY1RUY5MUYxNjg3OEY3RDAwM0U1QzI1IC8qIEpJVFRodW5rcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDNzEyRTMxN0NEODc5MzAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlEQzAxODQxOTFEMTBDMTg5MDA1
N0IwNTMgLyogSklUV29ya2xpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzQzRGNjZCMjFCMUE0
MDkwMDJGRDAwOSAvKiBKU0FQSUdsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQw
NDgwMTMxMDIxQTFEOTAwOEU3RjAxIC8qIEpTQVBJVmFsdWVXcmFwcGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDMkNGMzlDMjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNBcnJheS5o
IGluIEhlYWRlcnMgKi8sCkBAIC05Mjg2LDggKzkzMTMsMTAgQEAKIAkJCQlCQzE4QzQyNjBFMTZG
NUNEMDBCMzQ0NjAgLyogSlNSZXRhaW5QdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzNDYzODcx
MUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTQ4NzRBRTYxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUzRUUwMUI2MjE4RjY5MTYwMEFEMUY4RCAvKiBKU1NjcmlwdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTA2NDMzN0RENEIwNDAyQkFGMzRBNTkyIC8qIEpTU2NyaXB0RmV0Y2hlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTMyMDFDMUQxRjhFODIzNjAwNzZBMDMyIC8qIEpTU2NyaXB0RmV0Y2hQYXJh
bWV0ZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0VFMDFCODIxOEY3RUZGMDBBRDFGOEQgLyog
SlNTY3JpcHRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAw
MTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlE
MTExNTdGMzMyQzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNEY4Mjg4MUUyRkZERTAwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggYWNmNGZkYjAxNmQ4ODU3MDhhNDMwMDkwNDgwOWEyOTVj
NTUwZGE4ZS4uYWY2ZjllZjVmYzMzZTAxZjFkZWY2NzNmMTI2NzliMWQ3Nzc3NmI0ZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTIxLDcgKzIxLDkgQEAKIC8vIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKIC8vIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAorQVBJL0pT
QVBJR2xvYmFsT2JqZWN0Lm1tCiBBUEkvSlNBUElXcmFwcGVyT2JqZWN0Lm1tCitBUEkvSlNTY3Jp
cHQubW0KIEFQSS9KU0NvbnRleHQubW0KIEFQSS9KU01hbmFnZWRWYWx1ZS5tbQogQVBJL0pTUmVt
b3RlSW5zcGVjdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbmZp
Zy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbmZpZy5oCmluZGV4IGUwMjMyY2Y1Nzg2YWYw
ZjQ1ZDBkMTMwOGI2NzY2ODA2Y2FlNGUwMGEuLmUzNjQzOTBmZGQwZjdkNDU3N2RjZTFlNDY4ODNi
N2UxMjdlYTVjMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvY29uZmlnLmgKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNhbS53ZWluaWdAZ21h
aWwuY29tPgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0LDYgKzI0LDcgQEAKICNlbmRpZgogCiAjZGVmaW5l
IEpTQ19BUElfQVZBSUxBQkxFKC4uLikKKyNkZWZpbmUgSlNDX0NMQVNTX0FWQUlMQUJMRSguLi4p
IEpTX0VYUE9SVAogLy8gVXNlIHplcm8gc2luY2UgaXQgd2lsbCBiZSBsZXNzIHRoYW4gYW55IHBv
c3NpYmxlIHZlcnNpb24gbnVtYmVyLgogI2RlZmluZSBKU0NfTUFDX1ZFUlNJT05fVEJBIDAKICNk
ZWZpbmUgSlNDX0lPU19WRVJTSU9OX1RCQSAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWxsRGF0YS5jcHAKaW5kZXggYzhkMDhlY2YwMjliNmExN2E1ZjgxN2VmZjc4ZjEwMjRmNzhk
N2NhMC4uMTM4M2E1NGM2ZjY5NmE2YWRjMmY0NWU4MWQzNzYzODEzNGNhN2IyZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDI0IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCitKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGZ1bmN0aW9uT2JqZWN0LCBjb25zdCBBcmdMaXN0JiBhcmdzLCBjb25zdCBjaGFyKiBlcnJv
ck1lc3NhZ2UpCit7CisgICAgcmV0dXJuIGNhbGwoZXhlYywgZnVuY3Rpb25PYmplY3QsIGZ1bmN0
aW9uT2JqZWN0LCBhcmdzLCBlcnJvck1lc3NhZ2UpOworfQorCitKU1ZhbHVlIGNhbGwoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncywgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKQoreworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRD
YWxsRGF0YSh2bSwgZnVuY3Rpb25PYmplY3QsIGNhbGxEYXRhKTsKKyAgICBpZiAoY2FsbFR5cGUg
PT0gQ2FsbFR5cGU6Ok5vbmUpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBz
Y29wZSwgZXJyb3JNZXNzYWdlKTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY2Fs
bChleGVjLCBmdW5jdGlvbk9iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFy
Z3MpKTsKK30KKwogSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBmdW5jdGlv
bk9iamVjdCwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSwgSlNW
YWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxE
YXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5oCmluZGV4IGNi
ZjkxNjc2MWE1YjEwMzBmZTE1Y2I2Mjg1YWVhYzkxOWUwNWJkZmIuLjA4Zjc5ZGY0ZDY3ODAxMzQ0
NGE2YTYzOWFiNGZmYTQ5YWU3MWI1YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhbGxEYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FsbERhdGEuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTY0LDYgKzY0LDEwIEBAIGVudW0gY2xhc3MgUHJvZmlsaW5nUmVhc29u
IHsKICAgICBPdGhlcgogfTsKIAorLy8gQ29udmVuaWVuY2Ugd3JhcHBlciBzbyB5b3UgZG9uJ3Qg
bmVlZCB0byBkZWFsIHdpdGggQ2FsbERhdGEgYW5kIENhbGxUeXBlIHVubGVzcyB5b3UgYXJlIGdv
aW5nIHRvIHVzZSB0aGVtLgorSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0
ZSosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIGNvbnN0IEFyZ0xpc3QmLCBjb25zdCBjaGFyKiBl
cnJvck1lc3NhZ2UpOworSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSos
IEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKTsKKwogSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1
ZSBjYWxsKEV4ZWNTdGF0ZSosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIENhbGxUeXBlLCBjb25z
dCBDYWxsRGF0YSYsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CiBKU19FWFBP
UlRfUFJJVkFURSBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVj
dCwgQ2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmLCBOYWtlZFB0cjxFeGNlcHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbik7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKaW5kZXggMTEwMmY2NmMz
MjI2ZDc0NWNhZThjZmJhMjBmNmFmNDMzNzlhYmVkOS4uM2ZiNGFiOWQzYWEyZTM0YmJjZDlhZGZm
YTczMDdlNzA3NmE0NjFhZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tcGxldGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
cGxldGlvbi5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0y
MDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAx
IFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTgg
QXBwbGUgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4KICAqCiAg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0xNjEsNiArMTYxLDE2IEBAIHN0YXRpYyBKU0ludGVybmFsUHJv
bWlzZSogcmVqZWN0UHJvbWlzZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPCiAgICAgcmV0dXJuIGRlZmVycmVkLT5wcm9taXNlKCk7CiB9CiAKK0pTSW50ZXJuYWxQcm9t
aXNlKiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBTeW1ib2wqIG1vZHVs
ZUlkLCBKU1ZhbHVlIHBhcmFtZXRlcnMsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcikKK3sKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBSRUxF
QVNFX0FTU0VSVCh2bS5hdG9taWNTdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0
b21pY1N0cmluZ1RhYmxlKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1
c3lPbkN1cnJlbnRUaHJlYWQoKSk7CisKKyAgICByZXR1cm4gdm0udm1FbnRyeUdsb2JhbE9iamVj
dChleGVjKS0+bW9kdWxlTG9hZGVyKCktPmxvYWRBbmRFdmFsdWF0ZU1vZHVsZShleGVjLCBtb2R1
bGVJZCwgcGFyYW1ldGVycywgc2NyaXB0RmV0Y2hlcik7Cit9CisKIEpTSW50ZXJuYWxQcm9taXNl
KiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1v
ZHVsZU5hbWUsIEpTVmFsdWUgcGFyYW1ldGVycywgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21wbGV0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21wbGV0aW9uLmgKaW5kZXggZGU0NDhhNDA4NDcxYzc0MmU2ZjIyODhmMWFhNzI0ZTMzZjg5NzQ5
Ny4uODI3ZTYxZjNjNjFkMGNiN2JiZTc1YTYxMjc3MTI0ZmIwZGE3MmFhZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMyw2ICszMyw3IEBAIGNsYXNzIEV4ZWNTdGF0
ZTsKIGNsYXNzIEpTT2JqZWN0OwogY2xhc3MgUGFyc2VyRXJyb3I7CiBjbGFzcyBTb3VyY2VDb2Rl
OworY2xhc3MgU3ltYm9sOwogY2xhc3MgVk07CiBjbGFzcyBKU0ludGVybmFsUHJvbWlzZTsKIApA
QCAtNTcsNiArNTgsNyBAQCBpbmxpbmUgSlNWYWx1ZSBwcm9maWxlZEV2YWx1YXRlKEV4ZWNTdGF0
ZSogZXhlYywgUHJvZmlsaW5nUmVhc29uIHJlYXNvbiwgY29uc3QgUwogSlNfRVhQT1JUX1BSSVZB
VEUgSlNWYWx1ZSBldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbihFeGVjU3RhdGUqLCBjb25zdCBT
b3VyY2VDb2RlJiwgSlNPYmplY3QqIHNjb3BlRXh0ZW5zaW9uLCBOYWtlZFB0cjxFeGNlcHRpb24+
JiByZXR1cm5lZEV4Y2VwdGlvbik7CiAKIC8vIExvYWQgdGhlIG1vZHVsZSBzb3VyY2UgYW5kIGV2
YWx1YXRlIGl0LgorSlNfRVhQT1JUX1BSSVZBVEUgSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRF
dmFsdWF0ZU1vZHVsZShFeGVjU3RhdGUqLCBTeW1ib2wqIG1vZHVsZUlkLCBKU1ZhbHVlIHBhcmFt
ZXRlcnMsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcik7CiBKU19FWFBPUlRfUFJJVkFURSBKU0ludGVy
bmFsUHJvbWlzZSogbG9hZEFuZEV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmlu
ZyYgbW9kdWxlTmFtZSwgSlNWYWx1ZSBwYXJhbWV0ZXJzLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIp
OwogSlNfRVhQT1JUX1BSSVZBVEUgSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRFdmFsdWF0ZU1v
ZHVsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVy
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYXN0Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaAppbmRleCBhMzY5ZDQ4OTY2
MjYyYWExYjYyOWYzNDNjYjI0ZjFmNzQ2M2FjNWY3Li40OTVjN2UxMWVmZmRmNTU3YTkyMmI0MjY3
MTdlOGUzZDRkYmFjZGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Nhc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
NjUsNCArMTY1LDEyIEBAIFRvIGpzRHluYW1pY0Nhc3QoVk0mIHZtLCBKU1ZhbHVlIGZyb20pCiAg
ICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8VG8+KHZtLCBmcm9tLmFzQ2VsbCgpKTsKIH0KIAordGVt
cGxhdGU8dHlwZW5hbWUgVG8sIHR5cGVuYW1lIEZyb20+CitUbyBqc1NlY3VyZUNhc3QoVk0mIHZt
LCBGcm9tIGZyb20pCit7CisgICAgYXV0byogcmVzdWx0ID0ganNEeW5hbWljQ2FzdDxUbz4odm0s
IGZyb20pOworICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocmVz
dWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5kZXggZTg2ZTgyY2ZjNjYyMWMyYTM0
OTMwNzliZjhhNDI5ZTY0ZjU4NTEwZC4uZTlkMmVhNThmYjQ3ZmI0M2I2NjFlZGViYWRjNDRiZTZh
OWI1ZDEzOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDct
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dApAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXJy
b3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkVycm9yUHJvdG90eXBlLmgiCisjaW5jbHVkZSAi
RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUg
IkZ1bmN0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiR2VuZXJhdG9yRnVuY3Rpb25Db25zdHJ1
Y3Rvci5oIgpAQCAtMTkyLDcgKzE5Myw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgc3Rh
dGljIEpTVmFsdWUgY3JlYXRlUHJveHlQcm9wZXJ0eShWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3Qp
CitzdGF0aWMgSlNWYWx1ZSBjcmVhdGVQcm94eVByb3BlcnR5KFZNJiB2bSwgSlNPYmplY3QqIG9i
amVjdCkKIHsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsID0ganNDYXN0PEpTR2xvYmFsT2Jq
ZWN0Kj4ob2JqZWN0KTsKICAgICByZXR1cm4gUHJveHlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHZtLCBQ
cm94eUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbCwgZ2xvYmFsLT5mdW5j
dGlvblByb3RvdHlwZSgpKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359044</attachid>
            <date>2019-01-14 09:41:55 -0800</date>
            <delta_ts>2019-01-14 09:59:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191121-20190114094155.patch</filename>
            <type>text/plain</type>
            <size>70951</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5NTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
NDM2OGRjOGIyMDI0NGNlNTNjODQyZTYxNjVkOTk2ZjViYWVhNjEwLi5iNzI4ZGY2NDg3MmYyZjI5
YzYyYmUxMDg2MDIwMWZkZmVhZDJkMWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4OCBAQAorMjAxOS0wMS0xNCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBKU0Mgc2hvdWxkIGhhdmUgYSBtb2R1bGUgbG9hZGVyIEFQSQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMTIxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
ZGRzIGEgbmV3IGRlbGVnYXRlIHRvIEpTQ29udHh0IHRoYXQgaXMgY2FsbGVkIHRvIGZldGNoCisg
ICAgICAgIGFueSByZXNvbHZlZCBtb2R1bGUuIFRoZSByZXNvbHV0aW9uIG9mIGEgbW9kdWxlIGlk
ZW50aWZpZXIgaXMgY29tcHV0ZWQKKyAgICAgICAgYXMgaWYgaXQgd2VyZSBhIFVSTCBvbiB0aGUg
d2ViIHdpdGggdGhlIGNhdmVhdCB0aGF0IGl0IG11c3QgYmUgYSBmaWxlIFVSTC4KKworICAgICAg
ICBBIG5ldyBjbGFzcyBKU1NjcmlwdCBoYXMgYWxzbyBiZWVuIGFkZGVkIHRoYXQgaXMgc2ltaWxh
ciB0byBKU1NjcmlwdFJlZi4KKyAgICAgICAgUmlnaHQgbm93IGFsbCBKU1NjcmlwdHMgYXJlIGNv
cGllZCBpbnRvIG1lbW9yeS4gSW4gdGhlIGZ1dHVyZSB3ZSBzaG91bGQKKyAgICAgICAgbW1hcCB0
aGUgcHJvdmlkZWQgZmlsZSBpbnRvIG1lbW9yeSBzbyB0aGUgT1MgY2FuIGV2aWN0IGl0IHRvIGRp
c2sgdW5kZXIKKyAgICAgICAgcHJlc3N1cmUuIEFkZGl0aW9uYWxseSwgdGhlIEFQSSBkb2VzIG5v
dCBtYWtlIHVzZSBvZiB0aGUgY29kZSBzaWduaW5nIHBhdGgKKyAgICAgICAgbm9yIHRoZSBieXRl
Y29kZSBjYWNoaW5nIHBhdGgsIHdoaWNoIHdlIHdpbGwgYWRkIGluIHN1YnNlcXVlbnQgcGF0Y2hl
cy4KKworICAgICAgICBMYXN0bHksIGEgY291cGxlIG9mIG5ldyBjb252ZW5pZW5jZSBtZXRob2Rz
IGhhdmUgYmVlbiBhZGRlZC4gQyBBUEkKKyAgICAgICAgY29udmVyc2lvbiwgY2FuIG5vdyB0b1Jl
ZiBhIEpTVmFsdWUgd2l0aCBqdXN0IGEgdm0gcmF0aGVyIHRoYW4KKyAgICAgICAgcmVxdWlyaW5n
IGFuIEV4ZWNTdGF0ZS4gU2Vjb25kbHksIHRoZXJlIGlzIG5vdyBhIGNhbGwgd3JhcHBlciB0aGF0
CisgICAgICAgIGRvZXMgbm90IHJlcXVpcmUgQ2FsbERhdGEgYW5kIENhbGxUeXBlIHNpbmNlIG1h
bnkgcGxhY2VzIGRvbid0CisgICAgICAgIGNhcmUgYWJvdXQgdGhpcy4KKworICAgICAgICAqIEFQ
SS9BUElDYXN0Lmg6CisgICAgICAgICh0b1JlZik6CisgICAgICAgICogQVBJL0pTQVBJR2xvYmFs
T2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FQSUdsb2JhbE9iamVjdDo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6SlNBUElHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OkpTQVBJR2xvYmFsT2JqZWN0OjpKU0FQSUdsb2JhbE9iamVjdCk6CisgICAg
ICAgICogQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNB
UElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUpOgorICAgICAgICAoSlNDOjpKU0FQ
SUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVySW1wb3J0TW9kdWxlKToKKyAgICAgICAgKEpTQzo6
SlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckZldGNoKToKKyAgICAgICAgKEpTQzo6SlNB
UElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzKToK
KyAgICAgICAgKiBBUEkvSlNBUElWYWx1ZVdyYXBwZXIuaDoKKyAgICAgICAgKEpTQzo6anNBUElW
YWx1ZVdyYXBwZXIpOiBEZWxldGVkLgorICAgICAgICAqIEFQSS9KU0NvbnRleHQuaDoKKyAgICAg
ICAgKiBBUEkvSlNDb250ZXh0Lm1tOgorICAgICAgICAoLVtKU0NvbnRleHQgbW9kdWxlTG9hZGVy
RGVsZWdhdGVdKToKKyAgICAgICAgKC1bSlNDb250ZXh0IHNldE1vZHVsZUxvYWRlckRlbGVnYXRl
Ol0pOgorICAgICAgICAqIEFQSS9KU0NvbnRleHRJbnRlcm5hbC5oOgorICAgICAgICAqIEFQSS9K
U0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogQVBJL0pTQ29udGV4dFJlZi5jcHA6CisgICAg
ICAgIChKU0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKToKKyAgICAgICAgKiBBUEkvSlNTY3Jp
cHQuaDogQWRkZWQuCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOiBBZGRlZC4KKyAgICAgICAg
KCtbSlNTY3JpcHQgc2NyaXB0V2l0aFNvdXJjZTppblZpcnR1YWxNYWNoaW5lOl0pOgorICAgICAg
ICAoZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZSk6CisgICAgICAgICgrW0pTU2NyaXB0IHNj
cmlwdEZyb21VVEY4RmlsZTppblZpcnR1YWxNYWNoaW5lOndpdGhDb2RlU2lnbmluZzphbmRCeXRl
Y29kZUNhY2hlOl0pOgorICAgICAgICAoZ2V0SlNTY3JpcHRTb3VyY2VDb2RlKToKKyAgICAgICAg
KiBBUEkvSlNTY3JpcHRJbnRlcm5hbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oLgorICAgICAgICAqIEFQSS9KU1ZhbHVl
SW50ZXJuYWwuaDoKKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmg6Cisg
ICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAgICAgICgrW0pTQ29udGV4dEZldGNo
RGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl0pOgorICAgICAgICAoLVtKU0NvbnRl
eHRGZXRjaERlbGVnYXRlIGNvbnRleHQ6ZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyOndpdGhSZXNv
bHZlSGFuZGxlcjphbmRSZWplY3RIYW5kbGVyOl0pOgorICAgICAgICAoY2hlY2tNb2R1bGVDb2Rl
UmFuKToKKyAgICAgICAgKGNoZWNrTW9kdWxlV2FzUmVqZWN0ZWQpOgorICAgICAgICAodGVzdEZl
dGNoKToKKyAgICAgICAgKHRlc3RGZXRjaFdpdGhUd29DeWNsZSk6CisgICAgICAgICh0ZXN0RmV0
Y2hXaXRoVGhyZWVDeWNsZSk6CisgICAgICAgICh0ZXN0TG9hZGVyUmVzb2x2ZXNBYnNvbHV0ZVNj
cmlwdFVSTCk6CisgICAgICAgICh0ZXN0TG9hZGVyUmVqZWN0c05pbFNjcmlwdFVSTCk6CisgICAg
ICAgICh0ZXN0TG9hZGVyUmVqZWN0c0ZhaWxlZEZldGNoKToKKyAgICAgICAgKHRlc3RJbXBvcnRN
b2R1bGVUd2ljZSk6CisgICAgICAgICgrW0pTQ29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0ZSBuZXdD
b250ZXh0XSk6CisgICAgICAgIChyZXNvbHZlUGF0aFRvU2NyaXB0cyk6CisgICAgICAgICgtW0pT
Q29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0ZSBjb250ZXh0OmZldGNoTW9kdWxlRm9ySWRlbnRpZmll
cjp3aXRoUmVzb2x2ZUhhbmRsZXI6YW5kUmVqZWN0SGFuZGxlcjpdKToKKyAgICAgICAgKHRlc3RM
b2FkQmFzaWNGaWxlKToKKyAgICAgICAgKHRlc3RPYmplY3RpdmVDQVBJKToKKyAgICAgICAgKiBB
UEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvYmFzaWMuanM6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmguCisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2Vz
Q29jb2EudHh0OgorICAgICAgICAqIGNvbmZpZy5oOgorICAgICAgICAqIHJ1bnRpbWUvQ2FsbERh
dGEuY3BwOgorICAgICAgICAoSlNDOjpjYWxsKToKKyAgICAgICAgKiBydW50aW1lL0NhbGxEYXRh
Lmg6CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6bG9h
ZEFuZEV2YWx1YXRlTW9kdWxlKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTQ2FzdC5oOgorICAgICAgICAoSlNDOjpqc1NlY3VyZUNhc3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpjcmVh
dGVQcm94eVByb3BlcnR5KToKKwogMjAxOC0xMi0zMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWls
bGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBTb3VyY2VQcm92aWRlcnMgc2hvdWxkIHVzZSBhbiBh
Y3R1YWwgVVJMIGluc3RlYWQgb2YgYSBzdHJpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvQVBJQ2FzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElDYXN0
LmgKaW5kZXggM2I1NTkxMTllMjJhMWU1Njg4MDg4NzI3ZjliYTdkY2IyODI0YWY0ZC4uOGIwODZm
MGY0NTFmMjgzYTUyNzYzZTE5OGFiMGNlOTZlY2Q2NTk2ZSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9BUElDYXN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9BUElDYXN0LmgKQEAgLTEyOCwyMSArMTI4LDI2IEBAIGlubGluZSBKU0M6OlZNKiB0b0pTKEpT
Q29udGV4dEdyb3VwUmVmIGcpCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDOjpWTSo+
KGNvbnN0X2Nhc3Q8T3BhcXVlSlNDb250ZXh0R3JvdXAqPihnKSk7CiB9CiAKLWlubGluZSBKU1Zh
bHVlUmVmIHRvUmVmKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdikKK2lubGlu
ZSBKU1ZhbHVlUmVmIHRvUmVmKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdikKIHsKLSAgICBB
U1NFUlQoZXhlYy0+dm0oKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBB
U1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAjaWYgIUNQVShBRERS
RVNTNjQpCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIXYuaXNDZWxs
KCkpCi0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTVmFsdWVSZWY+KEpTQzo6anNB
UElWYWx1ZVdyYXBwZXIoZXhlYywgdikuYXNDZWxsKCkpOworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxKU1ZhbHVlUmVmPihKU0M6OkpTQVBJV3JhcHBlclZhbHVlOjpjcmVhdGUodm0s
IHYpLmFzQ2VsbCgpKTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlUmVmPih2
LmFzQ2VsbCgpKTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9Q
QVJBTSh2bSk7CiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU1ZhbHVlUmVmPih2KTsKICNlbmRp
ZgogfQogCitpbmxpbmUgSlNWYWx1ZVJlZiB0b1JlZihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlND
OjpKU1ZhbHVlIHYpCit7CisgICAgcmV0dXJuIHRvUmVmKGV4ZWMtPnZtKCksIHYpOworfQorCiBp
bmxpbmUgSlNPYmplY3RSZWYgdG9SZWYoSlNDOjpKU09iamVjdCogbykKIHsKICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxKU09iamVjdFJlZj4obyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjBjMjRhYmM3N2EyYWRiMzlh
YTAyNTEwODE5MWRiM2E0MzY4YzlhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QuaApAQCAtMCwwICsxLDY0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpT
QVBJR2xvYmFsT2JqZWN0IDogcHVibGljIEpTR2xvYmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1
c2luZyBCYXNlID0gSlNHbG9iYWxPYmplY3Q7CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3Rh
dGljIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIHNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFi
bGU7CisKKyAgICBzdGF0aWMgSlNBUElHbG9iYWxPYmplY3QqIGNyZWF0ZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgYXV0byogb2JqZWN0ID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNBUElHbG9iYWxPYmplY3Q+KHZtLmhlYXApKSBKU0FQSUdsb2Jh
bE9iamVjdCh2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2
bSk7CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorCisgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICBhdXRvKiByZXN1bHQgPSBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgMCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhHbG9iYWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAg
ICAgIHJlc3VsdC0+c2V0VHJhbnNpdGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZCh0cnVl
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNJbnRlcm5h
bFByb21pc2UqIG1vZHVsZUxvYWRlckltcG9ydE1vZHVsZShKU0dsb2JhbE9iamVjdCosIEV4ZWNT
dGF0ZSosIEpTTW9kdWxlTG9hZGVyKiwgSlNTdHJpbmcqIG1vZHVsZU5hbWVWYWx1ZSwgSlNWYWx1
ZSBwYXJhbWV0ZXJzLCBjb25zdCBTb3VyY2VPcmlnaW4mKTsKKyAgICBzdGF0aWMgSWRlbnRpZmll
ciBtb2R1bGVMb2FkZXJSZXNvbHZlKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNNb2R1
bGVMb2FkZXIqLCBKU1ZhbHVlIGtleVZhbHVlLCBKU1ZhbHVlIHJlZmVycmVyVmFsdWUsIEpTVmFs
dWUpOworICAgIHN0YXRpYyBKU0ludGVybmFsUHJvbWlzZSogbW9kdWxlTG9hZGVyRmV0Y2goSlNH
bG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUsIEpTVmFs
dWUsIEpTVmFsdWUpOworICAgIHN0YXRpYyBKU09iamVjdCogbW9kdWxlTG9hZGVyQ3JlYXRlSW1w
b3J0TWV0YVByb3BlcnRpZXMoSlNHbG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU01vZHVsZUxv
YWRlciosIEpTVmFsdWUsIEpTTW9kdWxlUmVjb3JkKiwgSlNWYWx1ZSk7CisKK3ByaXZhdGU6Cisg
ICAgSlNBUElHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsICZzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQorICAg
IHsgfQorfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQ
SUdsb2JhbE9iamVjdC5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxP
YmplY3QubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYzQyZjVmMjMyMTZmNDZhZjFhZjA3MzgyYjE4NTNhM2VhNWFl
NzRiNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElH
bG9iYWxPYmplY3QubW0KQEAgLTAsMCArMSwyMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJKU0FQ
SUdsb2JhbE9iamVjdC5oIgorCisjaW1wb3J0ICJBUElDYXN0LmgiCisjaW1wb3J0ICJDYXRjaFNj
b3BlLmgiCisjaW1wb3J0ICJDb21wbGV0aW9uLmgiCisjaW1wb3J0ICJFcnJvci5oIgorI2ltcG9y
dCAiRXhjZXB0aW9uLmgiCisjaW1wb3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgorI2ltcG9ydCAi
SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5oIgorI2ltcG9ydCAiSlNOYXRpdmVTdGRGdW5jdGlv
bi5oIgorI2ltcG9ydCAiSlNTY3JpcHRJbnRlcm5hbC5oIgorI2ltcG9ydCAiSlNTb3VyY2VDb2Rl
LmgiCisjaW1wb3J0ICJKU1ZhbHVlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTVmlydHVhbE1hY2hp
bmVJbnRlcm5hbC5oIgorI2ltcG9ydCAiSmF2YVNjcmlwdENvcmUuaCIKKyNpbXBvcnQgIk9iamVj
dENvbnN0cnVjdG9yLmgiCisjaW1wb3J0ICJTb3VyY2VPcmlnaW4uaCIKKworI2ltcG9ydCA8d3Rm
L1VSTC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTQVBJR2xvYmFs
T2JqZWN0OjpzX2luZm8gPSB7ICJHbG9iYWxPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQVBJR2xvYmFsT2JqZWN0KSB9OworCitj
b25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSBKU0FQSUdsb2JhbE9iamVjdDo6c19nbG9iYWxP
YmplY3RNZXRob2RUYWJsZSA9IHsKKyAgICAmc3VwcG9ydHNSaWNoU291cmNlSW5mbywKKyAgICAm
c2hvdWxkSW50ZXJydXB0U2NyaXB0LAorICAgICZqYXZhU2NyaXB0UnVudGltZUZsYWdzLAorICAg
IG51bGxwdHIsIC8vIHF1ZXVlVGFza1RvRXZlbnRMb29wCisgICAgJnNob3VsZEludGVycnVwdFNj
cmlwdEJlZm9yZVRpbWVvdXQsCisgICAgJm1vZHVsZUxvYWRlckltcG9ydE1vZHVsZSwgLy8gbW9k
dWxlTG9hZGVySW1wb3J0TW9kdWxlCisgICAgJm1vZHVsZUxvYWRlclJlc29sdmUsIC8vIG1vZHVs
ZUxvYWRlclJlc29sdmUKKyAgICAmbW9kdWxlTG9hZGVyRmV0Y2gsIC8vIG1vZHVsZUxvYWRlckZl
dGNoCisgICAgJm1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzLCAvLyBtb2R1
bGVMb2FkZXJDcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcworICAgIG51bGxwdHIsIC8vIG1vZHVs
ZUxvYWRlckV2YWx1YXRlCisgICAgbnVsbHB0ciwgLy8gcHJvbWlzZVJlamVjdGlvblRyYWNrZXIK
KyAgICBudWxscHRyLCAvLyBkZWZhdWx0TGFuZ3VhZ2UKKyAgICBudWxscHRyLCAvLyBjb21waWxl
U3RyZWFtaW5nCisgICAgbnVsbHB0ciwgLy8gaW5zdGFudGlhdGVTdHJlYW1pbmcKK307CisKK0lk
ZW50aWZpZXIgSlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU01vZHVsZUxvYWRlciosIEpT
VmFsdWUga2V5LCBKU1ZhbHVlIHJlZmVycmVyLCBKU1ZhbHVlKQoreworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IEFTU0VSVF9VTlVTRUQoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QgPT0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKTsKKyAgICBBU1NFUlQoa2V5LmlzU3RyaW5nKCkgfHwga2V5LmlzU3lt
Ym9sKCkpOworICAgIFN0cmluZyBuYW1lID0gIGtleS50b1dURlN0cmluZyhleGVjKTsKKworICAg
IFVSTCByZWZlcnJlclVSTChVUkwoKSwganNDYXN0PEpTU3RyaW5nKj4ocmVmZXJyZXIpLT50cnlH
ZXRWYWx1ZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWZlcnJlclVSTC5pc1ZhbGlkKCkpOwor
CisgICAgVVJMIHVybCA9IFVSTChyZWZlcnJlclVSTCwgbmFtZSk7CisgICAgaWYgKHVybC5pc1Zh
bGlkKCkpCisgICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIHVybCk7
CisKKyAgICB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsICJDb3VsZCBub3QgZm9ybSB2YWxpZCBV
UkwgZnJvbSBpZGVudGlmaWVyIGFuZCBiYXNlIl9zKTsKKyAgICByZXR1cm4geyB9OworfQorCitK
U0ludGVybmFsUHJvbWlzZSogSlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckltcG9ydE1v
ZHVsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIEpTTW9k
dWxlTG9hZGVyKiwgSlNTdHJpbmcqIHNwZWNpZmllclZhbHVlLCBKU1ZhbHVlLCBjb25zdCBTb3Vy
Y2VPcmlnaW4mIHNvdXJjZU9yaWdpbikKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIGF1dG8g
cmVqZWN0ID0gWyZdIChKU1ZhbHVlIGV4Y2VwdGlvbikgLT4gSlNJbnRlcm5hbFByb21pc2UqIHsK
KyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgYXV0byogcHJvbWlzZSA9
IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OnRyeUNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3Qp
OworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gcHJvbWlz
ZS0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgfTsKKworICAgIGF1dG8gaW1wb3J0ID0g
WyZdIChVUkwmIHVybCkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IGltcG9ydE1vZHVsZShleGVj
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgdXJsKSwganNVbmRlZmluZWQoKSwganNVbmRl
ZmluZWQoKSk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAg
ICAgICAgICByZXR1cm4gcmVqZWN0KHNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9OworCisgICAgYXV0byBzcGVjaWZpZXIgPSBzcGVjaWZpZXJWYWx1ZS0+
dmFsdWUoZXhlYyk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAg
ICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gcmVqZWN0KGV4Y2VwdGlvbik7Cisg
ICAgfQorCisgICAgVVJMIGFic29sdXRlVVJMKFVSTCgpLCBzcGVjaWZpZXIpOworICAgIGlmIChh
YnNvbHV0ZVVSTC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBpbXBvcnQoYWJzb2x1dGVVUkwp
OworCisgICAgaWYgKCFzcGVjaWZpZXIuc3RhcnRzV2l0aCgnLycpICYmICFzcGVjaWZpZXIuc3Rh
cnRzV2l0aCgiLi8iKSAmJiAhc3BlY2lmaWVyLnN0YXJ0c1dpdGgoIi4uLyIpKQorICAgICAgICBy
ZXR1cm4gcmVqZWN0KGNyZWF0ZUVycm9yKGV4ZWMsICJNb2R1bGUgc3BlY2lmaWVyIGRvZXMgbm90
IHN0YXJ0IHdpdGggXCIvXCIsIFwiLi9cIiwgb3IgXCIuLi9cIi4iX3MpKTsKKworICAgIGlmIChz
cGVjaWZpZXIuc3RhcnRzV2l0aCgnLycpKSB7CisgICAgICAgIGFic29sdXRlVVJMID0gVVJMKFVS
TCh7IH0sICJmaWxlOi8vIiksIHNwZWNpZmllcik7CisgICAgICAgIGlmIChhYnNvbHV0ZVVSTC5p
c1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gaW1wb3J0KGFic29sdXRlVVJMKTsKKyAgICB9
CisKKyAgICBhdXRvIG5vQmFzZUVycm9yTWVzc2FnZSA9ICJDb3VsZCBub3QgZGV0ZXJtaW5lIHRo
ZSBiYXNlIFVSTCBmb3IgbG9hZGluZy4iX3M7CisgICAgaWYgKHNvdXJjZU9yaWdpbi5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuIHJlamVjdChjcmVhdGVFcnJvcihleGVjLCBub0Jhc2VFcnJvck1l
c3NhZ2UpKTsKKworICAgIGF1dG8gcmVmZXJyZXIgPSBzb3VyY2VPcmlnaW4uc3RyaW5nKCk7Cisg
ICAgVVJMIGJhc2VVUkwoVVJMKCksIHJlZmVycmVyKTsKKyAgICBpZiAoIWJhc2VVUkwuaXNWYWxp
ZCgpKQorICAgICAgICByZXR1cm4gcmVqZWN0KGNyZWF0ZUVycm9yKGV4ZWMsIG5vQmFzZUVycm9y
TWVzc2FnZSkpOworCisgICAgVVJMIHVybChiYXNlVVJMLCBzcGVjaWZpZXIpOworICAgIGlmICgh
dXJsLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHJlamVjdChjcmVhdGVFcnJvcihleGVjLCAi
Y291bGQgbm90IGRldGVybWluZSBhIHZhbGlkIFVSTCBmb3IgbW9kdWxlIHNwZWNpZmllciJfcykp
OworCisgICAgcmV0dXJuIGltcG9ydCh1cmwpOworfQorCitKU0ludGVybmFsUHJvbWlzZSogSlNB
UElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckZldGNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlIGtleSwgSlNW
YWx1ZSwgSlNWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgQVNTRVJUKGdsb2Jh
bE9iamVjdCA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworICAgIEpTQ29udGV4dCAq
Y29udGV4dCA9IFtKU0NvbnRleHQgY29udGV4dFdpdGhKU0dsb2JhbENvbnRleHRSZWY6dG9HbG9i
YWxSZWYoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpXTsKKworICAgIEpTSW50ZXJuYWxQcm9t
aXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6dHJ5Q3Jl
YXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
bnVsbHB0cik7CisKKyAgICBJZGVudGlmaWVyIG1vZHVsZUtleSA9IGtleS50b1Byb3BlcnR5S2V5
KGV4ZWMpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAg
SlNWYWx1ZSBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywgZXhj
ZXB0aW9uKTsKKyAgICB9CisKKyAgICBpZiAoVU5MSUtFTFkoIVtjb250ZXh0IG1vZHVsZUxvYWRl
ckRlbGVnYXRlXSkpCisgICAgICAgIHJldHVybiBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGNyZWF0
ZUVycm9yKGV4ZWMsICJObyBtb2R1bGUgbG9hZGVyIHByb3ZpZGVkLiIpKTsKKworICAgIGF1dG8g
ZGVmZXJyZWRQcm9taXNlID0gU3Ryb25nPEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ+KHZtLCBk
ZWZlcnJlZCk7CisgICAgYXV0byBzdHJvbmdLZXkgPSBTdHJvbmc8SlNTdHJpbmc+KHZtLCBqc1Nl
Y3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwga2V5KSk7CisgICAgYXV0byogcmVzb2x2ZSA9IEpTTmF0
aXZlU3RkRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAxLCAicmVzb2x2ZSIsIFs9
XSAoRXhlY1N0YXRlKiBleGVjKSB7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
ICAgIC8vIFRoaXMgY2FwdHVyZXMgdGhlIGdsb2JhbE9iamVjdCBidXQgdGhhdCdzIG9rIGJlY2F1
c2Ugb3VyIHN0cnVjdHVyZSBrZWVwcyBpdCBhbGl2ZSBhbnl3YXkuCisgICAgICAgIEpTQ29udGV4
dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY29udGV4dFdpdGhKU0dsb2JhbENvbnRleHRSZWY6dG9H
bG9iYWxSZWYoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpXTsKKyAgICAgICAgaWQgc2NyaXB0
ID0gdmFsdWVUb09iamVjdChjb250ZXh0LCB0b1JlZihleGVjLCBleGVjLT5hcmd1bWVudCgwKSkp
OworCisgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgICAgIGlmIChVTkxJ
S0VMWSghW3NjcmlwdCBpc0tpbmRPZkNsYXNzOltKU1NjcmlwdCBjbGFzc11dKSkgeworICAgICAg
ICAgICAgYXJncy5hcHBlbmQoY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJGaXJzdCBhcmd1bWVudCBv
ZiByZXNvbHV0aW9uIGNhbGxiYWNrIGlzIG5vdCBhIEpTU2NyaXB0IikpOworICAgICAgICAgICAg
Y2FsbChleGVjLCBkZWZlcnJlZFByb21pc2UtPkpTUHJvbWlzZURlZmVycmVkOjpyZWplY3QoKSwg
YXJncywgIlRoaXMgc2hvdWxkIG5ldmVyIGJlIHNlZW4uLi4iKTsKKyAgICAgICAgICAgIHJldHVy
biBlbmNvZGVkSlNVbmRlZmluZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFN0cmlu
ZyYgc291cmNlID0gZ2V0SlNTY3JpcHRTb3VyY2VDb2RlKHN0YXRpY19jYXN0PEpTU2NyaXB0ICo+
KHNjcmlwdCkpOworICAgICAgICBhcmdzLmFwcGVuZChKU1NvdXJjZUNvZGU6OmNyZWF0ZSh2bSwg
bWFrZVNvdXJjZShzb3VyY2UsIFNvdXJjZU9yaWdpbihtb2R1bGVLZXkuc3RyaW5nKCkpLCBVUkwo
eyB9LCBtb2R1bGVLZXkuc3RyaW5nKCkpLCBUZXh0UG9zaXRpb24oKSwgSlNDOjpTb3VyY2VQcm92
aWRlclNvdXJjZVR5cGU6Ok1vZHVsZSkpKTsKKyAgICAgICAgY2FsbChleGVjLCBkZWZlcnJlZFBy
b21pc2UtPkpTUHJvbWlzZURlZmVycmVkOjpyZXNvbHZlKCksIGFyZ3MsICJUaGlzIHNob3VsZCBu
ZXZlciBiZSBzZWVuLi4uIik7CisgICAgICAgIHJldHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsK
KyAgICB9KTsKKworICAgIGF1dG8qIHJlamVjdCA9IEpTTmF0aXZlU3RkRnVuY3Rpb246OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCAxLCAicmVqZWN0IiwgWz1dIChFeGVjU3RhdGUqIGV4ZWMpIHsK
KyAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICAgICAgYXJncy5hcHBlbmQo
ZXhlYy0+YXJndW1lbnQoMCkpOworCisgICAgICAgIGNhbGwoZXhlYywgZGVmZXJyZWRQcm9taXNl
LT5KU1Byb21pc2VEZWZlcnJlZDo6cmVqZWN0KCksIGFyZ3MsICJUaGlzIHNob3VsZCBuZXZlciBi
ZSBzZWVuLi4uIik7CisgICAgICAgIHJldHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsKKyAgICB9
KTsKKworICAgIFtbY29udGV4dCBtb2R1bGVMb2FkZXJEZWxlZ2F0ZV0gY29udGV4dDpjb250ZXh0
IGZldGNoTW9kdWxlRm9ySWRlbnRpZmllcjpbOjpKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6
dG9SZWYoZXhlYywga2V5KSBpbkNvbnRleHQ6Y29udGV4dF0gd2l0aFJlc29sdmVIYW5kbGVyOls6
OkpTVmFsdWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjp0b1JlZihleGVjLCByZXNvbHZlKSBpbkNvbnRl
eHQ6Y29udGV4dF0gYW5kUmVqZWN0SGFuZGxlcjpbOjpKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVS
ZWY6dG9SZWYoZXhlYywgcmVqZWN0KSBpbkNvbnRleHQ6Y29udGV4dF1dOworICAgIGlmIChjb250
ZXh0LmV4Y2VwdGlvbikgeworICAgICAgICBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIHRvSlMoZXhl
YywgW2NvbnRleHQuZXhjZXB0aW9uIEpTVmFsdWVSZWZdKSk7CisgICAgICAgIGNvbnRleHQuZXhj
ZXB0aW9uID0gbmlsOworICAgIH0KKyAgICByZXR1cm4gZGVmZXJyZWQtPnByb21pc2UoKTsKK30K
KworSlNPYmplY3QqIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJDcmVhdGVJbXBvcnRN
ZXRhUHJvcGVydGllcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSBrZXksIEpTTW9kdWxlUmVjb3JkKiwgSlNWYWx1
ZSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTT2JqZWN0KiBtZXRhUHJvcGVydGllcyA9IGNvbnN0
cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIGdsb2JhbE9iamVjdC0+bnVsbFByb3RvdHlwZU9iamVjdFN0
cnVjdHVyZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKwor
ICAgIG1ldGFQcm9wZXJ0aWVzLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCAiZmlsZW5hbWUiKSwga2V5KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBu
dWxscHRyKTsKKworICAgIHJldHVybiBtZXRhUHJvcGVydGllczsKK30KKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVZhbHVlV3JhcHBlci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVZhbHVlV3JhcHBlci5oCmluZGV4IDA2YjMwNzEwM2Vl
YTIzNDA1NDdiMDMwMjljZTNmYjBlNmQ3Njc2MzMuLjc0NDkxOTNjYmIyNTBjNjY4ZmMxOWFmY2Zh
N2E3MDUxNDQ3NTMyMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNB
UElWYWx1ZVdyYXBwZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJVmFs
dWVXcmFwcGVyLmgKQEAgLTQ0LDEwICs0NCw5IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfRVhQ
T1JUX0lORk87CiAKLSAgICBzdGF0aWMgSlNBUElWYWx1ZVdyYXBwZXIqIGNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpIAorICAgIHN0YXRpYyBKU0FQSVZhbHVlV3JhcHBlciog
Y3JlYXRlKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgICAgIEpTQVBJVmFsdWVXcmFwcGVyKiB3cmFwcGVyID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNBUElWYWx1ZVdyYXBwZXI+KHZtLmhlYXApKSBKU0FQSVZhbHVl
V3JhcHBlcihleGVjKTsKKyAgICAgICAgSlNBUElWYWx1ZVdyYXBwZXIqIHdyYXBwZXIgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FQSVZhbHVlV3JhcHBlcj4odm0uaGVhcCkpIEpTQVBJ
VmFsdWVXcmFwcGVyKHZtKTsKICAgICAgICAgd3JhcHBlci0+ZmluaXNoQ3JlYXRpb24odm0sIHZh
bHVlKTsKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgfQpAQCAtNjEsMTcgKzYwLDEyIEBA
IHByb3RlY3RlZDoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSlNBUElWYWx1ZVdyYXBwZXIoRXhl
Y1N0YXRlKiBleGVjKQotICAgICAgICA6IEpTQ2VsbChleGVjLT52bSgpLCBleGVjLT52bSgpLmFw
aVdyYXBwZXJTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgSlNBUElWYWx1ZVdyYXBwZXIoVk0mIHZtKQor
ICAgICAgICA6IEpTQ2VsbCh2bSwgdm0uYXBpV3JhcHBlclN0cnVjdHVyZS5nZXQoKSkKICAgICB7
CiAgICAgfQogCiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fdmFsdWU7CiB9OwogCi1pbmxp
bmUgSlNWYWx1ZSBqc0FQSVZhbHVlV3JhcHBlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFs
dWUpCi17Ci0gICAgcmV0dXJuIEpTQVBJVmFsdWVXcmFwcGVyOjpjcmVhdGUoZXhlYywgdmFsdWUp
OwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDb250ZXh0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4
dC5oCmluZGV4IDg5Yzg3ZjllMmUxZmYxYjE3MWIxZWJiYThjNDUyMTU5ZjQ0ZjQ3NWEuLjBhODU2
YzU5NThmODljN2IxMTVlZWFkODRlYTUzYTM0NDMxYjJjNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NvbnRleHQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMSw3ICszMSw3IEBACiAKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxF
RAogCi1AY2xhc3MgSlNWaXJ0dWFsTWFjaGluZSwgSlNWYWx1ZTsKK0BjbGFzcyBKU1NjcmlwdCwg
SlNWaXJ0dWFsTWFjaGluZSwgSlNWYWx1ZSwgSlNDb250ZXh0OwogCiAvKiEKIEBpbnRlcmZhY2UK
QEAgLTM5LDcgKzM5LDcgQEAKICBKYXZhU2NyaXB0IGV4ZWN1dGlvbiB0YWtlcyBwbGFjZSB3aXRo
aW4gYSBjb250ZXh0LCBhbmQgYWxsIEphdmFTY3JpcHQgdmFsdWVzCiAgYXJlIHRpZWQgdG8gYSBj
b250ZXh0LgogKi8KLU5TX0NMQVNTX0FWQUlMQUJMRSgxMF85LCA3XzApCitKU0NfQ0xBU1NfQVZB
SUxBQkxFKG1hY29zeCgxMC45KSwgaXNvKDcuMCkpCiBAaW50ZXJmYWNlIEpTQ29udGV4dCA6IE5T
T2JqZWN0CiAKIC8qIQpAQCAtMTc3LDcgKzE3Nyw2IEBAIE5TX0NMQVNTX0FWQUlMQUJMRSgxMF85
LCA3XzApCiBAZGlzY3Vzc2lvbiBOYW1lIG9mIHRoZSBKU0NvbnRleHQuIEV4cG9zZWQgd2hlbiBy
ZW1vdGUgZGVidWdnaW5nIHRoZSBjb250ZXh0LgogKi8KIEBwcm9wZXJ0eSAoY29weSkgTlNTdHJp
bmcgKm5hbWUgSlNDX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEwKSwgaW9zKDguMCkpOwotCiBA
ZW5kCiAKIC8qIQpAQCAtMjMxLDYgKzIzMCw3IEBAIE5TX0NMQVNTX0FWQUlMQUJMRSgxMF85LCA3
XzApCiBAcmVzdWx0IFRoZSBDIEFQSSBlcXVpdmFsZW50IG9mIHRoaXMgSlNDb250ZXh0LgogKi8K
IEBwcm9wZXJ0eSAocmVhZG9ubHkpIEpTR2xvYmFsQ29udGV4dFJlZiBKU0dsb2JhbENvbnRleHRS
ZWY7CisKIEBlbmQKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ29udGV4dC5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1t
CmluZGV4IDI3NTY2ZjQxYjk3ZTFiMzliZGRlOWI0OGFhYTU1OWYxNGNiNzM5ZWEuLjNjNzc2ZDRk
OTAwZWUxNzMzMzYyYWMyOWY2MjRmNDQ0ZDU0NWU3YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDb250ZXh0Lm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI2LDExICsyNiwxNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAj
aW1wb3J0ICJBUElDYXN0LmgiCisjaW1wb3J0ICJDb21wbGV0aW9uLmgiCiAjaW1wb3J0ICJKU0NJ
bmxpbmVzLmgiCiAjaW1wb3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNDb250
ZXh0UHJpdmF0ZS5oIgogI2ltcG9ydCAiSlNDb250ZXh0UmVmSW50ZXJuYWwuaCIKICNpbXBvcnQg
IkpTR2xvYmFsT2JqZWN0LmgiCisjaW1wb3J0ICJKU0ludGVybmFsUHJvbWlzZS5oIgorI2ltcG9y
dCAiSlNNb2R1bGVMb2FkZXIuaCIKKyNpbXBvcnQgIkpTU2NyaXB0SW50ZXJuYWwuaCIKICNpbXBv
cnQgIkpTVmFsdWVJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNWaXJ0dWFsTWFjaGluZUludGVybmFs
LmgiCiAjaW1wb3J0ICJKU1dyYXBwZXJNYXAuaCIKQEAgLTM4LDEyICs0MiwxNSBAQAogI2ltcG9y
dCAiT2JqY1J1bnRpbWVFeHRyYXMuaCIKICNpbXBvcnQgIlN0cm9uZ0lubGluZXMuaCIKIAorI2lt
cG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+CisKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogCiBA
aW1wbGVtZW50YXRpb24gSlNDb250ZXh0IHsKICAgICBKU1ZpcnR1YWxNYWNoaW5lICptX3ZpcnR1
YWxNYWNoaW5lOwogICAgIEpTR2xvYmFsQ29udGV4dFJlZiBtX2NvbnRleHQ7CiAgICAgSlNDOjpT
dHJvbmc8SlNDOjpKU09iamVjdD4gbV9leGNlcHRpb247CisgICAgV2Vha09iakNQdHI8aWQgPEpT
TW9kdWxlTG9hZGVyRGVsZWdhdGU+PiBtX21vZHVsZUxvYWRlckRlbGVnYXRlOwogfQogCiAtIChK
U0dsb2JhbENvbnRleHRSZWYpSlNHbG9iYWxDb250ZXh0UmVmCkBAIC0yMzMsNiArMjQwLDE2IEBA
CiAgICAgSlNHbG9iYWxDb250ZXh0U2V0RGVidWdnZXJSdW5Mb29wKG1fY29udGV4dCwgcnVuTG9v
cCk7CiB9CiAKKy0gKGlkPEpTTW9kdWxlTG9hZGVyRGVsZWdhdGU+KW1vZHVsZUxvYWRlckRlbGVn
YXRlCit7CisgICAgcmV0dXJuIG1fbW9kdWxlTG9hZGVyRGVsZWdhdGUuZ2V0QXV0b3JlbGVhc2Vk
KCk7Cit9CisKKy0gKHZvaWQpc2V0TW9kdWxlTG9hZGVyRGVsZWdhdGU6KGlkPEpTTW9kdWxlTG9h
ZGVyRGVsZWdhdGU+KW1vZHVsZUxvYWRlckRlbGVnYXRlCit7CisgICAgbV9tb2R1bGVMb2FkZXJE
ZWxlZ2F0ZSA9IG1vZHVsZUxvYWRlckRlbGVnYXRlOworfQorCiBAZW5kCiAKIEBpbXBsZW1lbnRh
dGlvbiBKU0NvbnRleHQoU3Vic2NyaXB0U3VwcG9ydCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0SW50ZXJuYWwuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNDb250ZXh0SW50ZXJuYWwuaAppbmRleCAyOGY3MDljMWU0OGYxZTFhODAzODU2NTBh
YWU2ZTQxY2QzNTE1MGZhLi5hYjQ1ODI5ZjAwMjdlNGZhZDZiZmJkMWFmYzQwMmIzYTFiZTg1YjU4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dEludGVybmFs
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRJbnRlcm5hbC5oCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3
LDcgKzI3LDcgQEAKIAogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAKLSNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0pTQ29udGV4dC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0
UHJpdmF0ZS5oPgogCiBzdHJ1Y3QgQ2FsbGJhY2tEYXRhIHsKICAgICBDYWxsYmFja0RhdGEqIG5l
eHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFByaXZh
dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UHJpdmF0ZS5oCmluZGV4
IGZmOTYyMmFkZGY2MGI3YzEwMzU3ZGFjY2YxYzZmNDFlY2I4NjFmMWMuLmQ0ZTIwNmIzMzU3NWU5
ZmE2ZDQxODJlOWUxYWQ4OTQwNTY4YTg2NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDb250ZXh0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDb250ZXh0UHJpdmF0ZS5oCkBAIC0zMCw2ICszMCwyNyBAQAogCiAjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9KU0NvbnRleHQuaD4KIAorQHByb3RvY29sIEpTTW9kdWxlTG9hZGVyRGVsZWdh
dGUgPE5TT2JqZWN0PgorCitAcmVxdWlyZWQKKworLyohIEBhYnN0cmFjdCBQcm92aWRlcyBzb3Vy
Y2UgY29kZSBmb3IgYW55IEpTIG1vZHVsZSB0aGF0IGlzIGFjdGl2ZWx5IGltcG9ydGVkLgorIEBw
YXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IGZvciB3aGljaCB0aGUgbW9kdWxlIGlzIGJlaW5nIHJl
cXVlc3RlZC4KKyBAcGFyYW0gaWRlbnRpZmllciBUaGUgcmVzb2x2ZWQgaWRlbnRpZmllciBmb3Ig
dGhlIHJlcXVlc3RlZCBtb2R1bGUuCisgQHBhcmFtIHJlc29sdmUgQSBKUyBmdW5jdGlvbiB0byBj
YWxsIHdpdGggdGhlIGRlc2lyZWQgc2NyaXB0IGZvciBpZGVudGlmaWVyLgorIEBwYXJhbSByZWpl
Y3QgQSBKUyBmdW5jdGlvbiB0byBjYWxsIHdoZW4gaWRlbnRpZmllciBjYW5ub3QgYmUgZmV0Y2hl
ZC4KKyBAZGlzY3Vzc2lvbiBDdXJyZW50bHksIGlkZW50aWZpZXIgd2lsbCBhbHdheXMgYmUgYW4g
YWJzb2x1dGUgZmlsZSBVUkwgY29tcHV0ZWQgZnJvbSBzcGVjaWZpZXIgb2YgdGhlIHJlcXVlc3Rl
ZCBtb2R1bGUgcmVsYXRpdmUgdG8gdGhlIFVSTCBvZiB0aGUgcmVxdWVzdGluZyBzY3JpcHQuIElm
IHRoZSByZXF1ZXN0aW5nIHNjcmlwdCBkb2VzIG5vdCBoYXZlIGEgVVJMIGFuZCB0aGUgbW9kdWxl
IHNwZWNpZmllciBpcyBub3QgYW4gYWJzb2x1dGUgcGF0aCB0aGUgbW9kdWxlIGxvYWRlciB3aWxs
IGZhaWwgdG8gbG9hZCB0aGUgbW9kdWxlLgorCisgVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHJlc29s
dmUgc2hvbHVkIGFsd2F5cyBiZSBhIEpTU2NyaXB0LCBvdGhlcndpc2UgdGhlIG1vZHVsZSBsb2Fk
ZXIgd2lsbCByZWplY3QgdGhlIG1vZHVsZS4KKworIE9uY2UgYW4gaWRlbnRpZmllciBoYXMgYmVl
biByZXNvbHZlZCBvciByZWplY3RlZCBpbiBhIGdpdmVuIGNvbnRleHQgaXQgd2lsbCBuZXZlciBi
ZSByZXF1ZXN0ZWQgYWdhaW4uIElmIGEgc2NyaXB0IGlzIHN1Y2Nlc3NmdWxseSBldmFsdWF0ZWQg
aXQgd2lsbCBub3QgYmUgcmUtZXZhbHVhdGVkIG9uIGFueSBzdWJzZXF1ZW50IGltcG9ydC4KKwor
IFRoZSBWTSB3aWxsIHJldGFpbiBhbGwgZXZhbHVhdGVkIG1vZHVsZXMgZm9yIHRoZSBsaWZldGlt
ZSBvZiB0aGUgY29udGV4dC4KKyAqLworLSAodm9pZCljb250ZXh0OihKU0NvbnRleHQgKiljb250
ZXh0IGZldGNoTW9kdWxlRm9ySWRlbnRpZmllcjooSlNWYWx1ZSAqKWlkZW50aWZpZXIgd2l0aFJl
c29sdmVIYW5kbGVyOihKU1ZhbHVlICopcmVzb2x2ZSBhbmRSZWplY3RIYW5kbGVyOihKU1ZhbHVl
ICopcmVqZWN0OworCitAZW5kCisKIEBpbnRlcmZhY2UgSlNDb250ZXh0KFByaXZhdGUpCiAKIC8q
IQpAQCAtNTAsNiArNzEsOSBAQAogKi8KIEBwcm9wZXJ0eSAoc2V0dGVyPV9zZXREZWJ1Z2dlclJ1
bkxvb3A6KSBDRlJ1bkxvb3BSZWYgX2RlYnVnZ2VyUnVuTG9vcCBKU0NfQVBJX0FWQUlMQUJMRSht
YWNvc3goMTAuMTApLCBpb3MoOC4wKSk7CiAKKy8qISBAYWJzdHJhY3QgVGhlIGRlbGVnYXRlIHRo
ZSBjb250ZXh0IHdpbGwgdXNlIHdoZW4gdHJ5aW5nIHRvIGxvYWQgYSBtb2R1bGUuIE5vdGUsIHRo
aXMgZGVsZWdhdGUgd2lsbCBiZSBpZ25vcmVkIGZvciBjb250ZXh0cyByZXR1cm5lZCBieSBVSVdl
YlZpZXcuICovCitAcHJvcGVydHkgKG5vbmF0b21pYywgd2VhaykgaWQgPEpTTW9kdWxlTG9hZGVy
RGVsZWdhdGU+IG1vZHVsZUxvYWRlckRlbGVnYXRlIEpTQ19BUElfQVZBSUxBQkxFKG1hY29zeChK
U0NfTUFDX1RCQSksIGlvcyhKU0NfSU9TX1RCQSkpOworCiBAZW5kCiAKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCmluZGV4IGUxOGRmZDIxZmYyODQw
MDdkMDAzOWU2NDMyZDllYzNjNGYxZjMxNzcuLjlmNWZkYWZjNzgxOTZmZTQ0OGMxOGQwNzkxNWUw
NGZhMzg2ODRhYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250
ZXh0UmVmLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5j
cHAKQEAgLTMwLDkgKzMwLDkgQEAKICNpbmNsdWRlICJBUElDYXN0LmgiCiAjaW5jbHVkZSAiQ2Fs
bEZyYW1lLmgiCiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgorI2luY2x1ZGUgIkpT
QVBJR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja09iamVjdC5oIgogI2luY2x1
ZGUgIkpTQ2xhc3NSZWYuaCIKLSNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUg
IkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlNvdXJjZVBy
b3ZpZGVyLmgiCkBAIC0xMzgsNyArMTM4LDcgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xvYmFs
Q29udGV4dENyZWF0ZUluR3JvdXAoSlNDb250ZXh0R3JvdXBSZWYgZ3JvdXAsIEpTQ2xhc3MKICAg
ICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtLnB0cigpKTsKIAogICAgIGlmICghZ2xvYmFsT2JqZWN0
Q2xhc3MpIHsKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpTR2xvYmFs
T2JqZWN0OjpjcmVhdGUodm0uZ2V0KCksIEpTR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUo
dm0uZ2V0KCksIGpzTnVsbCgpKSk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBKU0FQSUdsb2JhbE9iamVjdDo6Y3JlYXRlKHZtLmdldCgpLCBKU0FQSUdsb2JhbE9iamVj
dDo6Y3JlYXRlU3RydWN0dXJlKHZtLmdldCgpLCBqc051bGwoKSkpOwogI2lmIEVOQUJMRShSRU1P
VEVfSU5TUEVDVE9SKQogICAgICAgICBpZiAoSlNSZW1vdGVJbnNwZWN0b3JHZXRJbnNwZWN0aW9u
RW5hYmxlZEJ5RGVmYXVsdCgpKQogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zZXRSZW1vdGVE
ZWJ1Z2dpbmdFbmFibGVkKHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1NjcmlwdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjkwY2I2MDkwODhlYzgyZjc0NGFhNzJhN2NkN2MxZDhlMTM4NTNjODcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0LmgKQEAgLTAs
MCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWUuaD4KKworI2lmIEpTQ19PQkpDX0FQSV9F
TkFCTEVECisKK05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisKK09CSkNfQ0xBU1MgSlNWaXJ0dWFs
TWFjaGluZTsKKworSlNDX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goSlNDX01BQ19UQkEpLCBpb3Mo
SlNDX0lPU19UQkEpKQorQGludGVyZmFjZSBKU1NjcmlwdCA6IE5TT2JqZWN0CisKKy8qIQorIEBt
ZXRob2QKKyBAYWJzdHJhY3QgQ3JlYXRlIGEgSlNTY3JpcHQgZm9yIHRoZSBzcGVjaWZpZWQgdmly
dHVhbCBtYWNoaW5lLgorIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBjb2RlIHRvIHVzZSB3aGVu
IHRoZSBzY3JpcHQgaXMgZXZhbHVhdGVkIGJ5IHRoZSBKUyB2bS4KKyBAcGFyYW0gdm0gVGhlIEpT
VmlydHVhbE1hY2hpbmUgdGhlIHNjcmlwdCBjYW4gYmUgZXZhbHVhdGVkIGluLgorIEByZXN1bHQg
VGhlIG5ldyBzY3JpcHQuCisgKi8KKysgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRXaXRo
U291cmNlOihOU1N0cmluZyAqKXNvdXJjZSBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNo
aW5lICopdm07CisKKy8qIQorIEBtZXRob2QKKyBAYWJzdHJhY3QgQ3JlYXRlIGEgSlNTY3JpcHQg
Zm9yIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBtYWNoaW5lIHdpdGggYSBwYXRoIHRvIGEgY29kZXNp
Z25pbmcgYW5kIGJ5dGVjb2RlIGNhY2hpbmcuCisgQHBhcmFtIGZpbGVQYXRoIEEgVVJMIGNvbnRh
aW5pbmcgdGhlIHBhdGggdG8gYSBKUyBzb3VyY2UgY29kZSBmaWxlIG9uIGRpc2suCisgQHBhcmFt
IHZtIFRoZSBKU1ZpcnR1YWxNYWNoaW5lIHRoZSBzY3JpcHQgY2FuIGJlIGV2YWx1YXRlZCBpbi4K
KyBAcGFyYW0gY29kZVNpZ25pbmdQYXRoIEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gdGhl
IGNvZGVTaWduaW5nIGZpbGUgZm9yIGZpbGVQYXRoIG9uIGRpc2suCisgQHBhcmFtIGNhY2hlUGF0
aCBBIFVSTCBjb250YWluaW5nIHRoZSBwYXRoIHdoZXJlIHRoZSBWTSBzaG91bGQgY2FjaGUgZm9y
IGZ1dHVyZSBleGVjdXRpb24uCisgQHJlc3VsdCBUaGUgbmV3IHNjcmlwdC4KKyBAZGlzY3Vzc2lv
biB0aGUgZmlsZXMgYXQgZmlsZVBhdGgsIGNvZGVTaWduaW5nUGF0aCwgYW5kIGNhY2hlUGF0aCBz
aG91bGQgbm90IGJlIGV4dGVybmFsbHkgbW9kaWZpZWQgIGZvciB0aGUgbGlmZWN5Y2xlIG9mIHZt
LiBOb3RlIHRoYXQgY29kZVNpZ25pbmdQYXRoIGFuZCBjYWNoZVBhdGggYXJlIG5vdCB1c2VkIGN1
cnJlbnRseSwgYnV0IHRoYXQgd2lsbCBjaGFuZ2UgaW4gdGhlIG5lYXIgZnV0dXJlLgorICovCisr
IChudWxsYWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0RnJvbVVURjhGaWxlOihOU1VSTCAqKWZpbGVQ
YXRoIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSB3aXRoQ29kZVNpZ25p
bmc6KG51bGxhYmxlIE5TVVJMICopY29kZVNpZ25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6KG51
bGxhYmxlIE5TVVJMICopY2FjaGVQYXRoOworCitAZW5kCisKK05TX0FTU1VNRV9OT05OVUxMX0VO
RAorCisjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTU2NyaXB0Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc5NmM0MWVmOWVjYzM5ODQ3MDA2Y2ZiMWI2NTczYzUz
NDlkM2ZkZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
U2NyaXB0Lm1tCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJKU1NjcmlwdElu
dGVybmFsLmgiCisKKyNpbXBvcnQgIkFQSUNhc3QuaCIKKyNpbXBvcnQgIkpTQ29udGV4dEludGVy
bmFsLmgiCisjaW1wb3J0ICJKU1ZhbHVlUHJpdmF0ZS5oIgorI2ltcG9ydCAiU3ltYm9sLmgiCisK
KyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAorCitAaW1wbGVtZW50YXRpb24gSlNTY3JpcHQgewor
ICAgIFN0cmluZyBtX3NvdXJjZTsKK30KKworKyAoaW5zdGFuY2V0eXBlKXNjcmlwdFdpdGhTb3Vy
Y2U6KE5TU3RyaW5nICopc291cmNlIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUg
Kil2bQoreworICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAgSlNTY3JpcHQgKnJlc3VsdCA9IFtb
SlNTY3JpcHQgYWxsb2NdIGluaXRdOworICAgIHJlc3VsdC0+bV9zb3VyY2UgPSBzb3VyY2U7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yPgorc3RhdGlj
IGJvb2wgZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShGSUxFKiBmaWxlLCBWZWN0b3ImIGJ1
ZmZlcikKK3sKKyAgICAvLyBXZSBtaWdodCBoYXZlIGluamVjdGVkICJ1c2Ugc3RyaWN0IjsgYXQg
dGhlIHRvcC4KKyAgICBzaXplX3QgaW5pdGlhbFNpemUgPSBidWZmZXIuc2l6ZSgpOworICAgIGlm
IChmc2VlayhmaWxlLCAwLCBTRUVLX0VORCkgPT0gLTEpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBsb25nIGJ1ZmZlckNhcGFjaXR5ID0gZnRlbGwoZmlsZSk7CisgICAgaWYgKGJ1ZmZlckNh
cGFjaXR5ID09IC0xKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGZzZWVrKGZpbGUs
IDAsIFNFRUtfU0VUKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGJ1ZmZlci5y
ZXNpemUoYnVmZmVyQ2FwYWNpdHkgKyBpbml0aWFsU2l6ZSk7CisgICAgc2l6ZV90IHJlYWRTaXpl
ID0gZnJlYWQoYnVmZmVyLmRhdGEoKSArIGluaXRpYWxTaXplLCAxLCBidWZmZXIuc2l6ZSgpLCBm
aWxlKTsKKyAgICByZXR1cm4gcmVhZFNpemUgPT0gYnVmZmVyLnNpemUoKSAtIGluaXRpYWxTaXpl
OworfQorCitzdGF0aWMgYm9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGNvbnN0IFN0
cmluZyYgZmlsZU5hbWUsIFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAgIEZJTEUqIGYgPSBm
b3BlbihmaWxlTmFtZS51dGY4KCkuZGF0YSgpLCAicmIiKTsKKyAgICBpZiAoIWYpIHsKKyAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3BlbiBmaWxlOiAlc1xuIiwgZmlsZU5hbWUu
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29s
IHJlc3VsdCA9IGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZiwgYnVmZmVyKTsKKyAgICBm
Y2xvc2UoZik7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKKysgKGluc3RhbmNldHlwZSlz
Y3JpcHRGcm9tVVRGOEZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNW
aXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhDb2RlU2lnbmluZzooTlNVUkwgKiljb2RlU2lnbmluZ1Bh
dGggYW5kQnl0ZWNvZGVDYWNoZTooTlNVUkwgKiljYWNoZVBhdGgKK3sKKyAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgY2hlY2sgY29kZVNpZ25pbmcuCisgICAgVU5VU0VEX1BBUkFNKGNvZGVTaWdu
aW5nUGF0aCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFjdHVhbGx5IGNhY2hlIGJ5dGVj
b2RlLgorICAgIFVOVVNFRF9QQVJBTShjYWNoZVBhdGgpOworICAgIFVOVVNFRF9QQVJBTSh2bSk7
CisgICAgVVJMIGZpbGVQYXRoVVJMKFtmaWxlUGF0aCBhYnNvbHV0ZVVSTF0pOworICAgIGlmICgh
ZmlsZVBhdGhVUkwuaXNMb2NhbEZpbGUoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgbW1hcCB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgaW5zdGVhZCBv
ZiBjb3B5aW5nIGl0IGludG8gZGlydHkgbWVtb3J5LgorICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7
CisgICAgaWYgKCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVQYXRoVVJMLmZpbGVT
eXN0ZW1QYXRoKCksIGJ1ZmZlcikpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBKU1Njcmlw
dCAqcmVzdWx0ID0gW1tKU1NjcmlwdCBhbGxvY10gaW5pdF07CisgICAgcmVzdWx0LT5tX3NvdXJj
ZSA9IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soYnVmZmVyLmRhdGEoKSwgYnVm
ZmVyLnNpemUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworY29uc3QgU3RyaW5nJiBnZXRK
U1NjcmlwdFNvdXJjZUNvZGUoSlNTY3JpcHQgKm1vZHVsZSkgeyByZXR1cm4gbW9kdWxlLT5tX3Nv
dXJjZTsgfQorCitAZW5kCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNTY3JpcHRJbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU0ZmRmYWUwMGM3NDZiOTk1ODJiOTZjODE5
MDA3ZWJkZDhiZTVhODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTU2NyaXB0SW50ZXJuYWwuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbXBvcnQgIkpT
U2NyaXB0LmgiCisjaW1wb3J0ICJTb3VyY2VDb2RlLmgiCisKKworY29uc3QgU3RyaW5nJiBnZXRK
U1NjcmlwdFNvdXJjZUNvZGUoSlNTY3JpcHQgKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTVmFsdWVJbnRlcm5hbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1ZhbHVlSW50ZXJuYWwuaAppbmRleCA0ZjFhOGY2OWNiZmNjMjlhZWIyNjc0NzM4MWQ4ZDVm
NWU4MWJhZWFhLi41NGI3NTVlZmZmZTZlZDI0YTVjMzAyMmI3ZDRjM2ExODUwMGIwMWUwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVJbnRlcm5hbC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZUludGVybmFsLmgKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsOCArMjYsNyBA
QAogI2lmbmRlZiBKU1ZhbHVlSW50ZXJuYWxfaAogI2RlZmluZSBKU1ZhbHVlSW50ZXJuYWxfaAog
Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgotI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvSlNWYWx1ZS5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVBy
aXZhdGUuaD4KIAogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCmluZGV4IDVjYTlh
N2Y0YTEwNzA0NGQ2MDliMTEyNzdiZTg5NzZhNDM2N2FhOWIuLjkxMjJlZDQ5YTRlYTFhYTQ5ZWM2
NjdmZWY2NjI3ZmM0M2I3NzcxNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaApAQCAtNDYsOCArNDYsOCBAQCBKU0NvbnRl
eHRHcm91cFJlZiBnZXRHcm91cEZyb21WaXJ0dWFsTWFjaGluZShKU1ZpcnR1YWxNYWNoaW5lICop
OwogCiAtIChKU0NvbnRleHQgKiljb250ZXh0Rm9yR2xvYmFsQ29udGV4dFJlZjooSlNHbG9iYWxD
b250ZXh0UmVmKWdsb2JhbENvbnRleHQ7CiAtICh2b2lkKWFkZENvbnRleHQ6KEpTQ29udGV4dCAq
KXdyYXBwZXIgZm9yR2xvYmFsQ29udGV4dFJlZjooSlNHbG9iYWxDb250ZXh0UmVmKWdsb2JhbENv
bnRleHQ7Ci0KIEBlbmQKKwogI2VuZGlmIC8vIGRlZmluZWQoX19PQkpDX18pCiAKIHZvaWQgc2Nh
bkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0b3ImLCB2b2lkKiBy
b290KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFw
aS5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQppbmRleCAz
N2UxMzg1YzhjNDg0ZWZhZThhOWMzZjkyZTEzNWNhNzNmOTU5MTkyLi40MzVmZGJiMzZkMjQ0NmU4
NWRiNTMxMzYzM2NkNzY0ZmVmNzk5OGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90
ZXN0cy90ZXN0YXBpLm1tCkBAIC0zMSw3ICszMSw5IEBACiAjaW1wb3J0ICJERkdXb3JrbGlzdC5o
IgogI2ltcG9ydCAiRGF0ZVRlc3RzLmgiCiAjaW1wb3J0ICJKU0Nhc3QuaCIKKyNpbXBvcnQgIkpT
Q29udGV4dFByaXZhdGUuaCIKICNpbXBvcnQgIkpTRXhwb3J0VGVzdHMuaCIKKyNpbXBvcnQgIkpT
U2NyaXB0LmgiCiAjaW1wb3J0ICJKU1ZhbHVlUHJpdmF0ZS5oIgogI2ltcG9ydCAiSlNWaXJ0dWFs
TWFjaGluZUludGVybmFsLmgiCiAjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZS5oIgpA
QCAtMTgxMiwxMiArMTgxNCwyNDggQEAgc3RhdGljIHZvaWQgcGFyYWxsZWxQcm9taXNlUmVzb2x2
ZVRlc3QoKQogICAgIH0KIH0KIAordHlwZWRlZiBKU1ZhbHVlICooXlJlc29sdmVCbG9jaykoSlND
b250ZXh0ICosIEpTVmFsdWUgKiwgSlNTY3JpcHQgKik7Cit0eXBlZGVmIHZvaWQgKF5GZXRjaEJs
b2NrKShKU0NvbnRleHQgKiwgSlNWYWx1ZSAqLCBKU1ZhbHVlICosIEpTVmFsdWUgKik7CisKK0Bp
bnRlcmZhY2UgSlNDb250ZXh0RmV0Y2hEZWxlZ2F0ZSA6IEpTQ29udGV4dCA8SlNNb2R1bGVMb2Fk
ZXJEZWxlZ2F0ZT4KKworKyAoaW5zdGFuY2V0eXBlKWNvbnRleHRXaXRoQmxvY2tGb3JGZXRjaDoo
RmV0Y2hCbG9jaylibG9jazsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gSlNDb250ZXh0RmV0
Y2hEZWxlZ2F0ZSB7CisgICAgRmV0Y2hCbG9jayBtX2ZldGNoQmxvY2s7Cit9CisKKysgKGluc3Rh
bmNldHlwZSljb250ZXh0V2l0aEJsb2NrRm9yRmV0Y2g6KEZldGNoQmxvY2spYmxvY2sKK3sKKyAg
ICBhdXRvICpyZXN1bHQgPSBbW0pTQ29udGV4dEZldGNoRGVsZWdhdGUgYWxsb2NdIGluaXRdOwor
ICAgIHJlc3VsdC0+bV9mZXRjaEJsb2NrID0gYmxvY2s7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworLSAodm9pZCljb250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IGZldGNoTW9kdWxlRm9ySWRl
bnRpZmllcjooSlNWYWx1ZSAqKWlkZW50aWZpZXIgd2l0aFJlc29sdmVIYW5kbGVyOihKU1ZhbHVl
ICopcmVzb2x2ZSBhbmRSZWplY3RIYW5kbGVyOihKU1ZhbHVlICopcmVqZWN0Cit7CisgICAgbV9m
ZXRjaEJsb2NrKGNvbnRleHQsIGlkZW50aWZpZXIsIHJlc29sdmUsIHJlamVjdCk7Cit9CisKK0Bl
bmQKKworc3RhdGljIHZvaWQgY2hlY2tNb2R1bGVDb2RlUmFuKEpTQ29udGV4dCAqY29udGV4dCwg
SlNWYWx1ZSAqcHJvbWlzZSwgSlNWYWx1ZSAqZXhwZWN0ZWQpCit7CisgICAgX19ibG9jayBCT09M
IHByb21pc2VXYXNSZXNvbHZlZCA9IGZhbHNlOworICAgIFtwcm9taXNlIGludm9rZU1ldGhvZDpA
InRoZW4iIHdpdGhBcmd1bWVudHM6QFteKEpTVmFsdWUgKmV4cG9ydFZhbHVlKSB7CisgICAgICAg
IHByb21pc2VXYXNSZXNvbHZlZCA9IHRydWU7CisgICAgICAgIGNoZWNrUmVzdWx0KEAibW9kdWxl
IGV4cG9ydGVkIHZhbHVlICdleHAnIGlzIG51bGwiLCBbZXhwb3J0VmFsdWVbQCJleHAiXSBpc0Vx
dWFsVG9PYmplY3Q6ZXhwZWN0ZWRdKTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJyYW4gaXMgJUAi
LCBbY29udGV4dFtAInJhbiJdIGlzRXF1YWxUb09iamVjdDpleHBlY3RlZF0pOworICAgIH0sIF4o
SlNWYWx1ZSAqZXJyb3IpIHsKKyAgICAgICAgTlNMb2coQCIlQCIsIFtlcnJvciB0b1N0cmluZ10p
OworICAgICAgICBjaGVja1Jlc3VsdChAIm1vZHVsZSBncmFwaCB3YXMgcmVzb2x2ZWQgYXMgZXhw
ZWN0ZWQiLCBOTyk7CisgICAgfV1dOworICAgIGNoZWNrUmVzdWx0KEAiUHJvbWlzZSB3YXMgcmVz
b2x2ZWQiLCBwcm9taXNlV2FzUmVzb2x2ZWQpOworfQorCitzdGF0aWMgdm9pZCBjaGVja01vZHVs
ZVdhc1JlamVjdGVkKEpTQ29udGV4dCAqY29udGV4dCwgSlNWYWx1ZSAqcHJvbWlzZSkKK3sKKyAg
ICBfX2Jsb2NrIEJPT0wgcHJvbWlzZVdhc1JlamVjdGVkID0gZmFsc2U7CisgICAgW3Byb21pc2Ug
aW52b2tlTWV0aG9kOkAidGhlbiIgd2l0aEFyZ3VtZW50czpAW14oKSB7CisgICAgICAgIGNoZWNr
UmVzdWx0KEAibW9kdWxlIHdhcyByZWplY3RlZCBhcyBleHBlY3RlZCIsIE5PKTsKKyAgICB9LCBe
KEpTVmFsdWUgKmVycm9yKSB7CisgICAgICAgIHByb21pc2VXYXNSZWplY3RlZCA9IHRydWU7Cisg
ICAgICAgIE5TTG9nKEAiJUAiLCBbZXJyb3IgdG9TdHJpbmddKTsKKyAgICAgICAgY2hlY2tSZXN1
bHQoQCJtb2R1bGUgZ3JhcGggd2FzIHJlamVjdGVkIHdpdGggZXJyb3IiLCAhW2Vycm9yIGlzRXF1
YWxXaXRoVHlwZUNvZXJjaW9uVG9PYmplY3Q6W0pTVmFsdWUgdmFsdWVXaXRoTnVsbEluQ29udGV4
dDpjb250ZXh0XV0pOworICAgIH1dXTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZldGNoKCkKK3sK
KyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgYXV0byAqY29udGV4dCA9IFtKU0NvbnRl
eHRGZXRjaERlbGVnYXRlIGNvbnRleHRXaXRoQmxvY2tGb3JGZXRjaDpeKEpTQ29udGV4dCAqY29u
dGV4dCwgSlNWYWx1ZSAqaWRlbnRpZmllciwgSlNWYWx1ZSAqcmVzb2x2ZSwgSlNWYWx1ZSAqcmVq
ZWN0KSB7CisgICAgICAgICAgICBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0OkAiZmls
ZTovLy9kaXJlY3RvcnkvYmFyLmpzIl0pCisgICAgICAgICAgICAgICAgW3Jlc29sdmUgY2FsbFdp
dGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0V2l0aFNvdXJjZTpAImltcG9ydCBcIi4uL2Zv
by5qc1wiOyBleHBvcnQgbGV0IGV4cCA9IG51bGw7IiBpblZpcnR1YWxNYWNoaW5lOltjb250ZXh0
IHZpcnR1YWxNYWNoaW5lXV1dXTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFtpZGVudGlmaWVyIGlz
RXF1YWxUb09iamVjdDpAImZpbGU6Ly8vZm9vLmpzIl0pCisgICAgICAgICAgICAgICAgW3Jlc29s
dmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0V2l0aFNvdXJjZTpAImdsb2Jh
bFRoaXMucmFuID0gbnVsbDsiIGluVmlydHVhbE1hY2hpbmU6W2NvbnRleHQgdmlydHVhbE1hY2hp
bmVdXV1dOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFtyZWplY3QgY2FsbFdp
dGhBcmd1bWVudHM6QFtbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZyb21NZXNzYWdlOkAiV2Vp
cmQgcGF0aCIgaW5Db250ZXh0OmNvbnRleHRdXV07CisgICAgICAgIH1dOworICAgICAgICBjb250
ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAgICAgSlNWYWx1ZSAqcHJv
bWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0KCcuL2Jhci5qcycpOyIgd2l0
aFNvdXJjZVVSTDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOkAiL2RpcmVjdG9yeSIgaXNEaXJlY3Rv
cnk6WUVTXV07CisgICAgICAgIEpTVmFsdWUgKm51bGwgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhOdWxs
SW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICBjaGVja01vZHVsZUNvZGVSYW4oY29udGV4dCwg
cHJvbWlzZSwgbnVsbCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB0ZXN0RmV0Y2hXaXRoVHdv
Q3ljbGUoKQoreworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250ZXh0
ID0gW0pTQ29udGV4dEZldGNoRGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl4oSlND
b250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICppZGVudGlmaWVyLCBKU1ZhbHVlICpyZXNvbHZlLCBK
U1ZhbHVlICpyZWplY3QpIHsKKyAgICAgICAgICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9P
YmplY3Q6QCJmaWxlOi8vL2RpcmVjdG9yeS9iYXIuanMiXSkKKyAgICAgICAgICAgICAgICBbcmVz
b2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNlOkAiaW1w
b3J0IHsgbiB9IGZyb20gXCIuLi9mb28uanNcIjsgZXhwb3J0IGxldCBleHAgPSBuOyIgaW5WaXJ0
dWFsTWFjaGluZTpbY29udGV4dCB2aXJ0dWFsTWFjaGluZV1dXV07CisgICAgICAgICAgICBlbHNl
IGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL2Zvby5qcyJdKQorICAg
ICAgICAgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlw
dFdpdGhTb3VyY2U6QCJpbXBvcnQgXCJkaXJlY3RvcnkvYmFyLmpzXCI7IGdsb2JhbFRoaXMucmFu
ID0gbnVsbDsgZXhwb3J0IGxldCBuID0gbnVsbDsiIGluVmlydHVhbE1hY2hpbmU6W2NvbnRleHQg
dmlydHVhbE1hY2hpbmVdXV1dOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFty
ZWplY3QgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZyb21N
ZXNzYWdlOkAiV2VpcmQgcGF0aCIgaW5Db250ZXh0OmNvbnRleHRdXV07CisgICAgICAgIH1dOwor
ICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAgICAg
SlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0KCcuL2Jh
ci5qcycpOyIgd2l0aFNvdXJjZVVSTDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOkAiL2RpcmVjdG9y
eSIgaXNEaXJlY3Rvcnk6WUVTXV07CisgICAgICAgIEpTVmFsdWUgKm51bGwgPSBbSlNWYWx1ZSB2
YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICBjaGVja01vZHVsZUNvZGVS
YW4oY29udGV4dCwgcHJvbWlzZSwgbnVsbCk7CisgICAgfQorfQorCisKK3N0YXRpYyB2b2lkIHRl
c3RGZXRjaFdpdGhUaHJlZUN5Y2xlKCkKK3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAg
ICAgYXV0byAqY29udGV4dCA9IFtKU0NvbnRleHRGZXRjaERlbGVnYXRlIGNvbnRleHRXaXRoQmxv
Y2tGb3JGZXRjaDpeKEpTQ29udGV4dCAqY29udGV4dCwgSlNWYWx1ZSAqaWRlbnRpZmllciwgSlNW
YWx1ZSAqcmVzb2x2ZSwgSlNWYWx1ZSAqcmVqZWN0KSB7CisgICAgICAgICAgICBpZiAoW2lkZW50
aWZpZXIgaXNFcXVhbFRvT2JqZWN0OkAiZmlsZTovLy9kaXJlY3RvcnkvYmFyLmpzIl0pCisgICAg
ICAgICAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0
V2l0aFNvdXJjZTpAImltcG9ydCB7IG4gfSBmcm9tIFwiLi4vZm9vLmpzXCI7IGV4cG9ydCBsZXQg
Zm9vID0gbjsiIGluVmlydHVhbE1hY2hpbmU6W2NvbnRleHQgdmlydHVhbE1hY2hpbmVdXV1dOwor
ICAgICAgICAgICAgZWxzZSBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0OkAiZmlsZTov
Ly9mb28uanMiXSkKKyAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpA
W1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNlOkAiaW1wb3J0IFwib3RoZXJEaXJlY3RvcnkvYmF6
LmpzXCI7IGV4cG9ydCBsZXQgbiA9IG51bGw7IiBpblZpcnR1YWxNYWNoaW5lOltjb250ZXh0IHZp
cnR1YWxNYWNoaW5lXV1dXTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFtpZGVudGlmaWVyIGlzRXF1
YWxUb09iamVjdDpAImZpbGU6Ly8vb3RoZXJEaXJlY3RvcnkvYmF6LmpzIl0pCisgICAgICAgICAg
ICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0V2l0aFNv
dXJjZTpAImltcG9ydCB7IGZvbyB9IGZyb20gXCIuLi9kaXJlY3RvcnkvYmFyLmpzXCI7IGdsb2Jh
bFRoaXMucmFuID0gbnVsbDsgZXhwb3J0IGxldCBleHAgPSBmb287IiBpblZpcnR1YWxNYWNoaW5l
Oltjb250ZXh0IHZpcnR1YWxNYWNoaW5lXV1dXTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBbcmVqZWN0IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTVmFsdWUgdmFsdWVXaXRoTmV3
RXJyb3JGcm9tTWVzc2FnZTpAIldlaXJkIHBhdGgiIGluQ29udGV4dDpjb250ZXh0XV1dOworICAg
ICAgICB9XTsKKyAgICAgICAgY29udGV4dC5tb2R1bGVMb2FkZXJEZWxlZ2F0ZSA9IGNvbnRleHQ7
CisgICAgICAgIEpTVmFsdWUgKnByb21pc2UgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImlt
cG9ydCgnLi4vb3RoZXJEaXJlY3RvcnkvYmF6LmpzJyk7IiB3aXRoU291cmNlVVJMOltOU1VSTCBm
aWxlVVJMV2l0aFBhdGg6QCIvZGlyZWN0b3J5IiBpc0RpcmVjdG9yeTpZRVNdXTsKKyAgICAgICAg
SlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE51bGxJbkNvbnRleHQ6Y29udGV4dF07
CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCBwcm9taXNlLCBudWxsKTsKKyAg
ICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkZXJSZXNvbHZlc0Fic29sdXRlU2NyaXB0VVJM
KCkKK3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgYXV0byAqY29udGV4dCA9IFtK
U0NvbnRleHRGZXRjaERlbGVnYXRlIGNvbnRleHRXaXRoQmxvY2tGb3JGZXRjaDpeKEpTQ29udGV4
dCAqY29udGV4dCwgSlNWYWx1ZSAqaWRlbnRpZmllciwgSlNWYWx1ZSAqcmVzb2x2ZSwgSlNWYWx1
ZSAqcmVqZWN0KSB7CisgICAgICAgICAgICBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0
OkAiZmlsZTovLy9kaXJlY3RvcnkvYmFyLmpzIl0pCisgICAgICAgICAgICAgICAgW3Jlc29sdmUg
Y2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0V2l0aFNvdXJjZTpAImV4cG9ydCBs
ZXQgZXhwID0gbnVsbDsgZ2xvYmFsVGhpcy5yYW4gPSBudWxsOyIgaW5WaXJ0dWFsTWFjaGluZTpb
Y29udGV4dCB2aXJ0dWFsTWFjaGluZV1dXV07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgW3JlamVjdCBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vy
cm9yRnJvbU1lc3NhZ2U6QCJXZWlyZCBwYXRoIiBpbkNvbnRleHQ6Y29udGV4dF1dXTsKKyAgICAg
ICAgfV07CisgICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBjb250ZXh0Owor
ICAgICAgICBKU1ZhbHVlICpwcm9taXNlID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBv
cnQoJy9kaXJlY3RvcnkvYmFyLmpzJyk7Il07CisgICAgICAgIEpTVmFsdWUgKm51bGwgPSBbSlNW
YWx1ZSB2YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICBjaGVja01vZHVs
ZUNvZGVSYW4oY29udGV4dCwgcHJvbWlzZSwgbnVsbCk7CisgICAgfQorfQorCitzdGF0aWMgdm9p
ZCB0ZXN0TG9hZGVyUmVqZWN0c05pbFNjcmlwdFVSTCgpCit7CisgICAgQGF1dG9yZWxlYXNlcG9v
bCB7CisgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0RmV0Y2hEZWxlZ2F0ZSBjb250
ZXh0V2l0aEJsb2NrRm9yRmV0Y2g6XihKU0NvbnRleHQgKiwgSlNWYWx1ZSAqLCBKU1ZhbHVlICos
IEpTVmFsdWUgKikgeworICAgICAgICAgICAgY2hlY2tSZXN1bHQoQCJDb2RlIGlzIG5vdCBydW4i
LCBOTyk7CisgICAgICAgIH1dOworICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRl
ID0gY29udGV4dDsKKyAgICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRl
U2NyaXB0OkAiaW1wb3J0KCcuLi9vdGhlckRpcmVjdG9yeS9iYXouanMnKTsiXTsKKyAgICAgICAg
Y2hlY2tNb2R1bGVXYXNSZWplY3RlZChjb250ZXh0LCBwcm9taXNlKTsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RMb2FkZXJSZWplY3RzRmFpbGVkRmV0Y2goKQoreworICAgIEBhdXRvcmVs
ZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZldGNoRGVsZWdh
dGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl4oSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVl
ICosIEpTVmFsdWUgKiwgSlNWYWx1ZSAqcmVqZWN0KSB7CisgICAgICAgICAgICBbcmVqZWN0IGNh
bGxXaXRoQXJndW1lbnRzOkBbW0pTVmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpA
Ik5vcGUiIGluQ29udGV4dDpjb250ZXh0XV1dOworICAgICAgICB9XTsKKyAgICAgICAgY29udGV4
dC5tb2R1bGVMb2FkZXJEZWxlZ2F0ZSA9IGNvbnRleHQ7CisgICAgICAgIEpTVmFsdWUgKnByb21p
c2UgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImltcG9ydCgnL290aGVyRGlyZWN0b3J5L2Jh
ei5qcycpOyJdOworICAgICAgICBjaGVja01vZHVsZVdhc1JlamVjdGVkKGNvbnRleHQsIHByb21p
c2UpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGVzdEltcG9ydE1vZHVsZVR3aWNlKCkKK3sK
KyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgYXV0byAqY29udGV4dCA9IFtKU0NvbnRl
eHRGZXRjaERlbGVnYXRlIGNvbnRleHRXaXRoQmxvY2tGb3JGZXRjaDpeKEpTQ29udGV4dCAqIGNv
bnRleHQsIEpTVmFsdWUgKiwgSlNWYWx1ZSAqcmVzb2x2ZSwgSlNWYWx1ZSAqKSB7CisgICAgICAg
ICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRoU291
cmNlOkAicmFuKys7IGV4cG9ydCBsZXQgZXhwID0gMTsiIGluVmlydHVhbE1hY2hpbmU6W2NvbnRl
eHQgdmlydHVhbE1hY2hpbmVdXV1dOworICAgICAgICB9XTsKKyAgICAgICAgY29udGV4dC5tb2R1
bGVMb2FkZXJEZWxlZ2F0ZSA9IGNvbnRleHQ7CisgICAgICAgIGNvbnRleHRbQCJyYW4iXSA9IEAo
MCk7CisgICAgICAgIEpTVmFsdWUgKnByb21pc2UgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpA
ImltcG9ydCgnL2Jhei5qcycpOyJdOworICAgICAgICBKU1ZhbHVlICpwcm9taXNlMiA9IFtjb250
ZXh0IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0KCcvYmF6LmpzJyk7Il07CisgICAgICAgIEpTVmFs
dWUgKm9uZSA9IFtKU1ZhbHVlIHZhbHVlV2l0aEludDMyOjEgaW5Db250ZXh0OmNvbnRleHRdOwor
ICAgICAgICBjaGVja01vZHVsZUNvZGVSYW4oY29udGV4dCwgcHJvbWlzZSwgb25lKTsKKyAgICAg
ICAgY2hlY2tNb2R1bGVDb2RlUmFuKGNvbnRleHQsIHByb21pc2UyLCBvbmUpOworICAgIH0KK30K
KworQGludGVyZmFjZSBKU0NvbnRleHRGaWxlTG9hZGVyRGVsZWdhdGUgOiBKU0NvbnRleHQgPEpT
TW9kdWxlTG9hZGVyRGVsZWdhdGU+CisKKysgKGluc3RhbmNldHlwZSluZXdDb250ZXh0OworCitA
ZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBKU0NvbnRleHRGaWxlTG9hZGVyRGVsZWdhdGUgeworfQor
CisrIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dAoreworICAgIGF1dG8gKnJlc3VsdCA9IFtbSlND
b250ZXh0RmlsZUxvYWRlckRlbGVnYXRlIGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitzdGF0aWMgTlNVUkwgKnJlc29sdmVQYXRoVG9TY3JpcHRzKCkKK3sKKyAgICBOU1N0
cmluZyAqYXJnMCA9IE5TUHJvY2Vzc0luZm8ucHJvY2Vzc0luZm8uYXJndW1lbnRzWzBdOworICAg
IE5TVVJMICpiYXNlOworICAgIGlmIChbYXJnMCBoYXNQcmVmaXg6QCIvIl0pCisgICAgICAgIGJh
c2UgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOmFyZzAgaXNEaXJlY3Rvcnk6Tk9dOworICAgIGVs
c2UgeworICAgICAgICBjb25zdCBzaXplX3QgbWF4TGVuZ3RoID0gMTAwMDA7CisgICAgICAgIGNo
YXIgY3dkW21heExlbmd0aF07CisgICAgICAgIGlmICghZ2V0Y3dkKGN3ZCwgbWF4TGVuZ3RoKSkg
eworICAgICAgICAgICAgTlNMb2coQCJnZXRjd2QgZXJyb3JlZCB3aXRoIGNvZGU6ICVzIiwgc3Ry
ZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAg
TlNVUkwgKmN3ZFVSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCIlcyIsIGN3ZF1dOworICAgICAgICBiYXNlID0gW05TVVJMIGZpbGVVUkxXaXRo
UGF0aDphcmcwIGlzRGlyZWN0b3J5Ok5PIHJlbGF0aXZlVG9VUkw6Y3dkVVJMXTsKKyAgICB9Cisg
ICAgcmV0dXJuIFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIuL3Rlc3RhcGlTY3JpcHRzLyIgaXNE
aXJlY3Rvcnk6WUVTIHJlbGF0aXZlVG9VUkw6YmFzZV07Cit9CisKKy0gKHZvaWQpY29udGV4dDoo
SlNDb250ZXh0ICopY29udGV4dCBmZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6KEpTVmFsdWUgKilp
ZGVudGlmaWVyIHdpdGhSZXNvbHZlSGFuZGxlcjooSlNWYWx1ZSAqKXJlc29sdmUgYW5kUmVqZWN0
SGFuZGxlcjooSlNWYWx1ZSAqKXJlamVjdAoreworICAgIE5TVVJMICpmaWxlUGF0aCA9IFtOU1VS
TCBVUkxXaXRoU3RyaW5nOltpZGVudGlmaWVyIHRvU3RyaW5nXV07CisgICAgYXV0byAqc2NyaXB0
ID0gW0pTU2NyaXB0IHNjcmlwdEZyb21VVEY4RmlsZTpmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5l
Oltjb250ZXh0IHZpcnR1YWxNYWNoaW5lXSB3aXRoQ29kZVNpZ25pbmc6bmlsIGFuZEJ5dGVjb2Rl
Q2FjaGU6bmlsXTsKKyAgICBpZiAoc2NyaXB0KQorICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFy
Z3VtZW50czpAW3NjcmlwdF1dOworICAgIGVsc2UKKyAgICAgICAgW3JlamVjdCBjYWxsV2l0aEFy
Z3VtZW50czpAW1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6QCJVbmFibGUg
dG8gY3JlYXRlIFNjcmlwdCIgaW5Db250ZXh0OmNvbnRleHRdXV07Cit9CisKK0BlbmQKKworc3Rh
dGljIHZvaWQgdGVzdExvYWRCYXNpY0ZpbGUoKQoreworICAgIEBhdXRvcmVsZWFzZXBvb2wgewor
ICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0ZSBuZXdD
b250ZXh0XTsKKyAgICAgICAgY29udGV4dC5tb2R1bGVMb2FkZXJEZWxlZ2F0ZSA9IGNvbnRleHQ7
CisgICAgICAgIEpTVmFsdWUgKnByb21pc2UgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImlt
cG9ydCgnLi9iYXNpYy5qcycpOyIgd2l0aFNvdXJjZVVSTDpyZXNvbHZlUGF0aFRvU2NyaXB0cygp
XTsKKyAgICAgICAgSlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE51bGxJbkNvbnRl
eHQ6Y29udGV4dF07CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCBwcm9taXNl
LCBudWxsKTsKKyAgICB9Cit9CisKIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoKQogewogICAgIE5T
TG9nKEAiVGVzdGluZyBPYmplY3RpdmUtQyBBUEkiKTsKKwogICAgIGNoZWNrTmVnYXRpdmVOU0lu
dGVnZXJzKCk7CiAgICAgcnVuSklUVGhyZWFkTGltaXRUZXN0cygpOwogCisgICAgdGVzdExvYWRl
clJlc29sdmVzQWJzb2x1dGVTY3JpcHRVUkwoKTsKKyAgICB0ZXN0RmV0Y2goKTsKKyAgICB0ZXN0
RmV0Y2hXaXRoVHdvQ3ljbGUoKTsKKyAgICB0ZXN0RmV0Y2hXaXRoVGhyZWVDeWNsZSgpOworICAg
IHRlc3RJbXBvcnRNb2R1bGVUd2ljZSgpOworCisgICAgdGVzdExvYWRlclJlamVjdHNOaWxTY3Jp
cHRVUkwoKTsKKyAgICB0ZXN0TG9hZGVyUmVqZWN0c0ZhaWxlZEZldGNoKCk7CisKKyAgICAvLyBG
aWxlIGxvYWRpbmcKKyAgICB0ZXN0TG9hZEJhc2ljRmlsZSgpOworCiAgICAgcHJvbWlzZVdpdGhF
eGVjdXRvcihSZXNvbHV0aW9uOjpSZXNvbHZlRWFnZXIpOwogICAgIHByb21pc2VXaXRoRXhlY3V0
b3IoUmVzb2x1dGlvbjo6UmVqZWN0RWFnZXIpOwogICAgIHByb21pc2VXaXRoRXhlY3V0b3IoUmVz
b2x1dGlvbjo6UmVzb2x2ZUxhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy9iYXNpYy5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvYmFzaWMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODUyOGM0OWNj
MmE3NGU2Njk5MjY2YjJjOGEyYzdkMTBkYTc3NzIzOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvYmFzaWMuanMKQEAgLTAs
MCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CitleHBvcnQgbGV0IGV4cCA9IG51bGw7CitnbG9iYWxUaGlzLnJhbiA9IG51bGw7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGYzZWYxYzQyMzgwYjNjZWYyZjAwZmFjNjU4ZTkyZTlk
NmU3OTlmMDMuLjYzOGJkNzEwZTY4M2UxNjdjYWU5MWM1MDNiNDE4ZTI0YWNmZjJlMjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDU3LDYgKzEwNTcsOCBAQAogCQk1MzlGQjhC
QTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOUZCOEI5MUM5OURBN0MwMDk0MEZBMSAvKiBK
U0FycmF5SW5saW5lcy5oICovOyB9OwogCQk1M0I0QkQxMjFGNjhCMzI1MDBEMkJFQTMgLyogV2Fz
bU9wcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMz
QjE1REUxREM3RjQ2MzAwNEQ1MDBBIC8qIFdhc21PcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0I2MDFFQzIwMzRCOEM1MDA2QkU2NjcgLyog
SlNDYXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
M0I2MDFFQjIwMzRCOEM1MDA2QkU2NjcgLyogSlNDYXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTNDM0Q1RTUyMUVDRTc3MjAwODdGREZDIC8q
IGJhc2ljLmpzIGluIENvcHkgU3VwcG9ydCBTY3JpcHQgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTNDM0Q1RTQyMUVDRTZDRTAwODdGREZDIC8qIGJhc2ljLmpzICovOyB9Owor
CQk1M0M0RjY2QjIxQjFBNDA5MDAyRkQwMDkgLyogSlNBUElHbG9iYWxPYmplY3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzQzRGNjZBMjFCMUE0MDkw
MDJGRDAwOSAvKiBKU0FQSUdsb2JhbE9iamVjdC5oICovOyB9OwogCQk1M0M2RkVFRjFFOEFERkE5
MDBCMTg0MjUgLyogV2FzbU9wY29kZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTNDNkZFRUUxRThBREZBOTAwQjE4NDI1IC8qIFdhc21PcGNv
ZGVPcmlnaW4uaCAqLzsgfTsKIAkJNTNDQTczMEExRUE1MzNEODAwNzYwNDlEIC8qIFdhc21CQlFQ
bGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0NB
NzMwODFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJCUVBsYW4uaCAqLzsgfTsKIAkJNTNENDQ0REMx
REFGMDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNENDQ0REIxREFGMDhBQjAwQjkyNzg0IC8q
IEIzV2FzbUFkZHJlc3NWYWx1ZS5oICovOyB9OwpAQCAtMTA2NSw2ICsxMDY3LDggQEAKIAkJNTNF
OUUwQUMxRUFFODNERjAwRkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFkcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFOUUwQUExRUFFODNERTAwRkVF
MjUxIC8qIFdhc21NYWNoaW5lVGhyZWFkcy5oICovOyB9OwogCQk1M0U5RTBBRjFFQUVDNDU3MDBG
RUUyNTEgLyogV2FzbVRpZXJVcENvdW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1M0U5RTBBRTFFQUVDNDU3MDBGRUUyNTEgLyogV2FzbVRpZXJVcENv
dW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NTNFQUZFMkYyMDhERkFCNDAwN0Q1MjRCIC8qIHRlc3RhcGkuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxRDRFMTkxRjU5Q0REMjAwRUM4MzZDIC8q
IHRlc3RhcGkuY3BwICovOyB9OworCQk1M0VFMDFCNjIxOEY2OTE2MDBBRDFGOEQgLyogSlNTY3Jp
cHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRUUw
MUI1MjE4RjY5MEYwMEFEMUY4RCAvKiBKU1NjcmlwdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUzRUUwMUI4MjE4RjdFRkYwMEFEMUY4RCAvKiBK
U1NjcmlwdEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1M0VFMDFCNzIxOEY3RUZGMDBBRDFGOEQgLyogSlNTY3JpcHRJbnRlcm5hbC5oICov
OyB9OwogCQk1M0YxMUY0MTIwOTEzOEQ3MDBFNDExQTcgLyogSlNJbW11dGFibGVCdXR0ZXJmbHku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjExRjQw
MjA5MTM4RDcwMEU0MTFBNyAvKiBKU0ltbXV0YWJsZUJ1dHRlcmZseS5oICovOyB9OwogCQk1M0Y0
MEU4NTFENThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU4NDFENThGOTc3MDA5OUExQjYgLyog
V2FzbVNlY3Rpb25zLmggKi87IH07CiAJCTUzRjQwRThCMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNt
RnVuY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzRjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCAq
LzsgfTsKQEAgLTEyMTksNyArMTIyMyw3IEBACiAJCTg2RTNDNjE1MTY3QkFCRDcwMDZENzYwQSAv
KiBKU1ZpcnR1YWxNYWNoaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NkUzQzYwRjE2N0JBQjg3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJODZFM0M2
MTcxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwOTE2N0JBQjg3MDA2RDc2MEEg
LyogSlNDb250ZXh0SW50ZXJuYWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk4NkUzQzYxOTE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVyTWFw
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYw
QzE2N0JBQjg3MDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLmggKi87IH07Ci0JCTg2RTNDNjFCMTY3
QkFCRUUwMDZENzYwQSAvKiBKU1ZhbHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjBFMTY3QkFCODcwMDZENzYwQSAvKiBKU1Zh
bHVlSW50ZXJuYWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk4NkUzQzYxQjE2N0JBQkVFMDA2RDc2MEEgLyogSlNWYWx1ZUludGVybmFsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkUzQzYwRTE2N0JB
Qjg3MDA2RDc2MEEgLyogSlNWYWx1ZUludGVybmFsLmggKi87IH07CiAJCTg2RTNDNjFEMTY3QkFC
RUUwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjExMTY3QkFCODcwMDZENzYwQSAv
KiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk4NkVDOURDNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0
ZUNvZGVQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2RUM5REI1MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5oICovOyB9
OwogCQk4NkVDOURDNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUM5REI2MTMyOERG
ODIwMDJCMkFENyAvKiBERkdHZW5lcmF0aW9uSW5mby5oICovOyB9OwpAQCAtMjAwMyw5ICsyMDA3
LDEwIEBACiAJCTVEQkIxNTExMTMxRDBCMTMwMDU2QUQzNiAvKiBDb3B5IFN1cHBvcnQgU2NyaXB0
ICovID0gewogCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9u
TWFzayA9IDEyOwotCQkJZHN0UGF0aCA9ICIiOworCQkJZHN0UGF0aCA9IHRlc3RhcGlTY3JpcHRz
OwogCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDE2OwogCQkJZmlsZXMgPSAoCisJCQkJNTNDM0Q1RTUy
MUVDRTc3MjAwODdGREZDIC8qIGJhc2ljLmpzIGluIENvcHkgU3VwcG9ydCBTY3JpcHQgKi8sCiAJ
CQkJRkVDQjhCMkExRDI1Q0I1QTAwNkYyNDYzIC8qIHRlc3RhcGktZnVuY3Rpb24tb3ZlcnJpZGVz
LmpzIGluIENvcHkgU3VwcG9ydCBTY3JpcHQgKi8sCiAJCQkJNURCQjE1MUIxMzFEMEIzMTAwNTZB
RDM2IC8qIHRlc3RhcGkuanMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLywKIAkJCSk7CkBAIC0z
NTU3LDYgKzM1NjIsOSBAQAogCQk1M0IwQkUzNTFFNTYxQjA5MDBBOEZDMjkgLyogUHJveHlhYmxl
QWNjZXNzQ2FzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm94
eWFibGVBY2Nlc3NDYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNCMEJF
MzcxRTU2MUIyNDAwQThGQzI5IC8qIEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50cmluc2ljR2V0dGVyQWNjZXNzQ2Fz
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzQjYwMUVCMjAzNEI4QzUwMDZC
RTY2NyAvKiBKU0Nhc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYXN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUzQzNENUU0MjFFQ0U2Q0UwMDg3RkRGQyAvKiBiYXNpYy5qcyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IGJhc2ljLmpzOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1M0M0RjY2QTIxQjFBNDA5MDAyRkQwMDkgLyogSlNBUElHbG9i
YWxPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNBUElHbG9iYWxPYmplY3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNDNEY2NkMyMUIxQTdDQTAwMkZEMDA5IC8qIEpTQVBJR2xv
YmFsT2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSlNBUElHbG9iYWxPYmplY3QubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzQzZGRUVFMUU4QURGQTkwMEIxODQyNSAv
KiBXYXNtT3Bjb2RlT3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdh
c21PcGNvZGVPcmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNDNkZFRjAx
RThBRkUwQzAwQjE4NDI1IC8qIFdhc21PcGNvZGVPcmlnaW4uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbU9wY29kZU9yaWdpbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzQ0E3MzA3MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxhbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQkJRUGxhbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNTY5LDYgKzM1NzcsOSBAQAogCQk1M0U5
RTBBOTFFQUU4M0RFMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21NYWNoaW5lVGhyZWFkcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRTlFMEFBMUVBRTgzREUwMEZFRTI1MSAvKiBXYXNt
TWFjaGluZVRocmVhZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU1h
Y2hpbmVUaHJlYWRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRTlFMEFFMUVB
RUM0NTcwMEZFRTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2FzbVRpZXJVcENvdW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUzRUUwMUI0MjE4RjY5MEUwMEFEMUY4RCAvKiBKU1NjcmlwdC5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEpTU2NyaXB0Lm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1M0VFMDFCNTIxOEY2OTBGMDBBRDFGOEQgLyogSlNTY3JpcHQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTY3JpcHQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTNFRTAxQjcyMThGN0VGRjAwQUQxRjhEIC8qIEpTU2NyaXB0SW50ZXJu
YWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTY3JpcHRJbnRlcm5hbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0YxMUY0MDIwOTEzOEQ3MDBFNDExQTcg
LyogSlNJbW11dGFibGVCdXR0ZXJmbHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbW11dGFibGVCdXR0
ZXJmbHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGMTFGNDIyMDkxNzQ5ODAw
RTQxMUE3IC8qIEpTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
SW1tdXRhYmxlQnV0dGVyZmx5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNG
MjU2RTExQjg3RTI4MDAwQjRCNzY4IC8qIEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTM4LDYgKzU1NDksNyBA
QAogCQkxNDEyMTEwMDBBNDg3NzI2MDA0ODAyNTUgLyogdGVzdHMgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTUzQzNENUUzMjFFQ0U2OEUwMDg3RkRGQyAv
KiB0ZXN0YXBpU2NyaXB0cyAqLywKIAkJCQlGRUYwNDA1MDFBQUU2NjJEMDBCRDI4QjAgLyogQ29t
cGFyZUFuZFN3YXBUZXN0LmNwcCAqLywKIAkJCQlGRUYwNDA1MjFBQUVDNEVEMDBCRDI4QjAgLyog
Q29tcGFyZUFuZFN3YXBUZXN0LmggKi8sCiAJCQkJQzI5RUNCMDIxODA0RDBFRDAwRDJDQkI0IC8q
IEN1cnJlbnRUaGlzSW5zaWRlQmxvY2tHZXR0ZXJUZXN0LmggKi8sCkBAIC01OTM3LDYgKzU5NDks
OCBAQAogCQkJCTUzNTI5QTRCMUM0NTdCNzUwMDBCNDlDNiAvKiBBUElVdGlscy5oICovLAogCQkJ
CTFDQUE4QjRBMEQzMkMzOUEwMDQxQkNGRiAvKiBKYXZhU2NyaXB0LmggKi8sCiAJCQkJMUNBQThC
NEIwRDMyQzM5QTAwNDFCQ0ZGIC8qIEphdmFTY3JpcHRDb3JlLmggKi8sCisJCQkJNTNDNEY2NkEy
MUIxQTQwOTAwMkZEMDA5IC8qIEpTQVBJR2xvYmFsT2JqZWN0LmggKi8sCisJCQkJNTNDNEY2NkMy
MUIxQTdDQTAwMkZEMDA5IC8qIEpTQVBJR2xvYmFsT2JqZWN0Lm1tICovLAogCQkJCUJDMDg5NEQ1
MEZBRkJBMkQwMDAwMTg2NSAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgKi8sCiAJCQkJQkMwODk0
RDYwRkFGQkEyRDAwMDAxODY1IC8qIEpTQVBJVmFsdWVXcmFwcGVyLmggKi8sCiAJCQkJQzJDRjM5
QzAxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5oICovLApAQCAtNTk3OCw2
ICs1OTkyLDkgQEAKIAkJCQlBNTUyQzM3RDFBRERCOEZFMDAxMzk3MjYgLyogSlNSZW1vdGVJbnNw
ZWN0b3IuY3BwICovLAogCQkJCUE1NTJDMzdFMUFEREI4RkUwMDEzOTcyNiAvKiBKU1JlbW90ZUlu
c3BlY3Rvci5oICovLAogCQkJCTk1QzE4RDNFMEM5MEU3RUYwMEU3MkY3MyAvKiBKU1JldGFpblB0
ci5oICovLAorCQkJCTUzRUUwMUI1MjE4RjY5MEYwMEFEMUY4RCAvKiBKU1NjcmlwdC5oICovLAor
CQkJCTUzRUUwMUI0MjE4RjY5MEUwMEFEMUY4RCAvKiBKU1NjcmlwdC5tbSAqLywKKwkJCQk1M0VF
MDFCNzIxOEY3RUZGMDBBRDFGOEQgLyogSlNTY3JpcHRJbnRlcm5hbC5oICovLAogCQkJCUE3QzBD
NEFBMTY3QzA4Q0QwMDE3MDExRCAvKiBKU1NjcmlwdFJlZi5jcHAgKi8sCiAJCQkJQTdDMEM0QUIx
NjdDMDhDRDAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0ZS5oICovLAogCQkJCTE0ODJCNzRD
MEE0MzAzMjgwMDUxN0NGQyAvKiBKU1N0cmluZ1JlZi5jcHAgKi8sCkBAIC02Mjc4LDYgKzYyOTUs
MTUgQEAKIAkJCXBhdGggPSAidW5pZmllZC1zb3VyY2VzIjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CiAJCX07CisJCTUzQzNENUUzMjFFQ0U2OEUwMDg3RkRGQyAvKiB0ZXN0YXBpU2NyaXB0
cyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNTNDM0Q1
RTQyMUVDRTZDRTAwODdGREZDIC8qIGJhc2ljLmpzICovLAorCQkJKTsKKwkJCW5hbWUgPSB0ZXN0
YXBpU2NyaXB0czsKKwkJCXBhdGggPSBBUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHM7CisJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk2NTBGREY4RDA5RDBGQ0E3MDA3NjlFNTQgLyog
RGVyaXZlZCBTb3VyY2VzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKQEAgLTkxNjYsNiArOTE5Miw3IEBACiAJCQkJMEY1RUY5MUYxNjg3OEY3RDAwM0U1QzI1IC8q
IEpJVFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDNzEyRTMxN0NEODc5MzAwOENDOTND
IC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywK
IAkJCQlEQzAxODQxOTFEMTBDMTg5MDA1N0IwNTMgLyogSklUV29ya2xpc3QuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUzQzRGNjZCMjFCMUE0MDkwMDJGRDAwOSAvKiBKU0FQSUdsb2JhbE9iamVjdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODQwNDgwMTMxMDIxQTFEOTAwOEU3RjAxIC8qIEpTQVBJVmFs
dWVXcmFwcGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkNGMzlDMjE2RTE1QTgxMDBERDY5QkUg
LyogSlNBUElXcmFwcGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNzBFMTZG
NUNEMDBCMzQ0NjAgLyogSlNBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC05Mjg2LDggKzkzMTMs
MTAgQEAKIAkJCQlCQzE4QzQyNjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNSZXRhaW5QdHIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUzNDYzODcxMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1l
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4NzRBRTYxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2Nv
cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzRUUwMUI2MjE4RjY5MTYwMEFEMUY4RCAvKiBKU1Nj
cmlwdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTA2NDMzN0RENEIwNDAyQkFGMzRBNTkyIC8qIEpT
U2NyaXB0RmV0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMyMDFDMUQxRjhFODIzNjAwNzZB
MDMyIC8qIEpTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0VF
MDFCODIxOEY3RUZGMDBBRDFGOEQgLyogSlNTY3JpcHRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdGMzMyQzAwNEE0RTdEIC8qIEpTU2VnbWVudGVk
VmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNEY4Mjg4MUUyRkZERTAwMDc1
MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVy
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzQ29jb2EudHh0
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggYWNmNGZkYjAx
NmQ4ODU3MDhhNDMwMDkwNDgwOWEyOTVjNTUwZGE4ZS4uYWY2ZjllZjVmYzMzZTAxZjFkZWY2NzNm
MTI2NzliMWQ3Nzc3NmI0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXNDb2NvYS50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXNDb2NvYS50eHQK
QEAgLTIxLDcgKzIxLDkgQEAKIC8vIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKIC8vIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KIAorQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tCiBBUEkvSlNBUElXcmFw
cGVyT2JqZWN0Lm1tCitBUEkvSlNTY3JpcHQubW0KIEFQSS9KU0NvbnRleHQubW0KIEFQSS9KU01h
bmFnZWRWYWx1ZS5tbQogQVBJL0pTUmVtb3RlSW5zcGVjdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2NvbmZpZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbmZp
Zy5oCmluZGV4IGUwMjMyY2Y1Nzg2YWYwZjQ1ZDBkMTMwOGI2NzY2ODA2Y2FlNGUwMGEuLmUzNjQz
OTBmZGQwZjdkNDU3N2RjZTFlNDY4ODNiN2UxMjdlYTVjMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9jb25maWcuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvY29uZmln
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVl
bCBXZWluaWcgPHNhbS53ZWluaWdAZ21haWwuY29tPgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI0LDYgKzI0
LDcgQEAKICNlbmRpZgogCiAjZGVmaW5lIEpTQ19BUElfQVZBSUxBQkxFKC4uLikKKyNkZWZpbmUg
SlNDX0NMQVNTX0FWQUlMQUJMRSguLi4pIEpTX0VYUE9SVAogLy8gVXNlIHplcm8gc2luY2UgaXQg
d2lsbCBiZSBsZXNzIHRoYW4gYW55IHBvc3NpYmxlIHZlcnNpb24gbnVtYmVyLgogI2RlZmluZSBK
U0NfTUFDX1ZFUlNJT05fVEJBIDAKICNkZWZpbmUgSlNDX0lPU19WRVJTSU9OX1RCQSAwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAKaW5kZXggYzhkMDhlY2YwMjli
NmExN2E1ZjgxN2VmZjc4ZjEwMjRmNzhkN2NhMC4uMTM4M2E1NGM2ZjY5NmE2YWRjMmY0NWU4MWQz
NzYzODEzNGNhN2IyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FsbERhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRh
LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM0LDYgKzM0LDI0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitKU1ZhbHVlIGNh
bGwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBjb25zdCBBcmdMaXN0
JiBhcmdzLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpCit7CisgICAgcmV0dXJuIGNhbGwoZXhl
YywgZnVuY3Rpb25PYmplY3QsIGZ1bmN0aW9uT2JqZWN0LCBhcmdzLCBlcnJvck1lc3NhZ2UpOwor
fQorCitKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncywgY29uc3QgY2hhciogZXJy
b3JNZXNzYWdlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAg
Q2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YSh2bSwgZnVuY3Rpb25PYmplY3QsIGNhbGxE
YXRhKTsKKyAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpCisgICAgICAgIHJldHVy
biB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKKworICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgY2FsbChleGVjLCBmdW5jdGlvbk9iamVjdCwgY2FsbFR5cGUs
IGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFyZ3MpKTsKK30KKwogSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0
IENhbGxEYXRhJiBjYWxsRGF0YSwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWxsRGF0YS5oCmluZGV4IGNiZjkxNjc2MWE1YjEwMzBmZTE1Y2I2Mjg1YWVhYzkxOWUw
NWJkZmIuLjA4Zjc5ZGY0ZDY3ODAxMzQ0NGE2YTYzOWFiNGZmYTQ5YWU3MWI1YTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDYgKzY0LDEwIEBAIGVu
dW0gY2xhc3MgUHJvZmlsaW5nUmVhc29uIHsKICAgICBPdGhlcgogfTsKIAorLy8gQ29udmVuaWVu
Y2Ugd3JhcHBlciBzbyB5b3UgZG9uJ3QgbmVlZCB0byBkZWFsIHdpdGggQ2FsbERhdGEgYW5kIENh
bGxUeXBlIHVubGVzcyB5b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGVtLgorSlNfRVhQT1JUX1BSSVZB
VEUgSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIGNvbnN0
IEFyZ0xpc3QmLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpOworSlNfRVhQT1JUX1BSSVZBVEUg
SlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTVmFsdWUg
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKTsKKwog
SlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSosIEpTVmFsdWUgZnVuY3Rp
b25PYmplY3QsIENhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYsIEpTVmFsdWUgdGhpc1ZhbHVlLCBj
b25zdCBBcmdMaXN0Jik7CiBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRl
KiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNW
YWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmLCBOYWtlZFB0cjxFeGNlcHRpb24+JiByZXR1
cm5lZEV4Y2VwdGlvbik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbXBsZXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxl
dGlvbi5jcHAKaW5kZXggMTEwMmY2NmMzMjI2ZDc0NWNhZThjZmJhMjBmNmFmNDMzNzlhYmVkOS4u
M2ZiNGFiOWQzYWEyZTM0YmJjZDlhZGZmYTczMDdlNzA3NmE0NjFhZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgog
ICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcp
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAg
Q29weXJpZ2h0IChDKSAyMDAzLTIwMTggQXBwbGUgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAw
My0yMDE5IEFwcGxlIEluYy4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xNjEsNiArMTYxLDE2
IEBAIHN0YXRpYyBKU0ludGVybmFsUHJvbWlzZSogcmVqZWN0UHJvbWlzZShFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPCiAgICAgcmV0dXJuIGRlZmVycmVkLT5wcm9taXNl
KCk7CiB9CiAKK0pTSW50ZXJuYWxQcm9taXNlKiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoRXhlY1N0
YXRlKiBleGVjLCBTeW1ib2wqIG1vZHVsZUlkLCBKU1ZhbHVlIHBhcmFtZXRlcnMsIEpTVmFsdWUg
c2NyaXB0RmV0Y2hlcikKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hv
bGRlciBsb2NrKHZtKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2bS5hdG9taWNTdHJpbmdUYWJsZSgp
ID09IFRocmVhZDo6Y3VycmVudCgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOworICAgIFJFTEVBU0Vf
QVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3lPbkN1cnJlbnRUaHJlYWQoKSk7CisKKyAgICByZXR1
cm4gdm0udm1FbnRyeUdsb2JhbE9iamVjdChleGVjKS0+bW9kdWxlTG9hZGVyKCktPmxvYWRBbmRF
dmFsdWF0ZU1vZHVsZShleGVjLCBtb2R1bGVJZCwgcGFyYW1ldGVycywgc2NyaXB0RmV0Y2hlcik7
Cit9CisKIEpTSW50ZXJuYWxQcm9taXNlKiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTdHJpbmcmIG1vZHVsZU5hbWUsIEpTVmFsdWUgcGFyYW1ldGVycywgSlNW
YWx1ZSBzY3JpcHRGZXRjaGVyKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmgKaW5kZXggZGU0NDhhNDA4NDcxYzc0
MmU2ZjIyODhmMWFhNzI0ZTMzZjg5NzQ5Ny4uODI3ZTYxZjNjNjFkMGNiN2JiZTc1YTYxMjc3MTI0
ZmIwZGE3MmFhZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
cGxldGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24u
aApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkg
UG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2Vs
bHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMyw2
ICszMyw3IEBAIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIEpTT2JqZWN0OwogY2xhc3MgUGFyc2Vy
RXJyb3I7CiBjbGFzcyBTb3VyY2VDb2RlOworY2xhc3MgU3ltYm9sOwogY2xhc3MgVk07CiBjbGFz
cyBKU0ludGVybmFsUHJvbWlzZTsKIApAQCAtNTcsNiArNTgsNyBAQCBpbmxpbmUgSlNWYWx1ZSBw
cm9maWxlZEV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgUHJvZmlsaW5nUmVhc29uIHJlYXNvbiwg
Y29uc3QgUwogSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBldmFsdWF0ZVdpdGhTY29wZUV4dGVu
c2lvbihFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNPYmplY3QqIHNjb3BlRXh0ZW5z
aW9uLCBOYWtlZFB0cjxFeGNlcHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbik7CiAKIC8vIExvYWQg
dGhlIG1vZHVsZSBzb3VyY2UgYW5kIGV2YWx1YXRlIGl0LgorSlNfRVhQT1JUX1BSSVZBVEUgSlNJ
bnRlcm5hbFByb21pc2UqIGxvYWRBbmRFdmFsdWF0ZU1vZHVsZShFeGVjU3RhdGUqLCBTeW1ib2wq
IG1vZHVsZUlkLCBKU1ZhbHVlIHBhcmFtZXRlcnMsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcik7CiBK
U19FWFBPUlRfUFJJVkFURSBKU0ludGVybmFsUHJvbWlzZSogbG9hZEFuZEV2YWx1YXRlTW9kdWxl
KEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYgbW9kdWxlTmFtZSwgSlNWYWx1ZSBwYXJhbWV0ZXJz
LCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpOwogSlNfRVhQT1JUX1BSSVZBVEUgSlNJbnRlcm5hbFBy
b21pc2UqIGxvYWRBbmRFdmFsdWF0ZU1vZHVsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2Rl
JiwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDYXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Nhc3QuaAppbmRleCBhMzY5ZDQ4OTY2MjYyYWExYjYyOWYzNDNjYjI0ZjFmNzQ2M2FjNWY3Li40
OTVjN2UxMWVmZmRmNTU3YTkyMmI0MjY3MTdlOGUzZDRkYmFjZGUzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Nhc3QuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjUsNCArMTY1LDEyIEBAIFRvIGpzRHluYW1pY0Nhc3Qo
Vk0mIHZtLCBKU1ZhbHVlIGZyb20pCiAgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8VG8+KHZtLCBm
cm9tLmFzQ2VsbCgpKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVG8sIHR5cGVuYW1lIEZyb20+
CitUbyBqc1NlY3VyZUNhc3QoVk0mIHZtLCBGcm9tIGZyb20pCit7CisgICAgYXV0byogcmVzdWx0
ID0ganNEeW5hbWljQ2FzdDxUbz4odm0sIGZyb20pOworICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04ocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAK
aW5kZXggZTg2ZTgyY2ZjNjYyMWMyYTM0OTMwNzliZjhhNDI5ZTY0ZjU4NTEwZC4uZTlkMmVhNThm
YjQ3ZmI0M2I2NjFlZGViYWRjNDRiZTZhOWI1ZDEzOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdh
dGVybG9vLmNhKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUg
IkVycm9yLmgiCiAjaW5jbHVkZSAiRXJyb3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkVycm9y
UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25D
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAi
R2VuZXJhdG9yRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgpAQCAtMTkyLDcgKzE5Myw3IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi0gICAgc3RhdGljIEpTVmFsdWUgY3JlYXRlUHJveHlQcm9wZXJ0eShW
TSYgdm0sIEpTT2JqZWN0KiBvYmplY3QpCitzdGF0aWMgSlNWYWx1ZSBjcmVhdGVQcm94eVByb3Bl
cnR5KFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKIHsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsID0ganNDYXN0PEpTR2xvYmFsT2JqZWN0Kj4ob2JqZWN0KTsKICAgICByZXR1cm4gUHJveHlD
b25zdHJ1Y3Rvcjo6Y3JlYXRlKHZtLCBQcm94eUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUo
dm0sIGdsb2JhbCwgZ2xvYmFsLT5mdW5jdGlvblByb3RvdHlwZSgpKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359048</attachid>
            <date>2019-01-14 09:59:29 -0800</date>
            <delta_ts>2019-01-14 10:28:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191121-20190114095928.patch</filename>
            <type>text/plain</type>
            <size>72190</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5NTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
NDM2OGRjOGIyMDI0NGNlNTNjODQyZTYxNjVkOTk2ZjViYWVhNjEwLi5iNzI4ZGY2NDg3MmYyZjI5
YzYyYmUxMDg2MDIwMWZkZmVhZDJkMWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4OCBAQAorMjAxOS0wMS0xNCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBKU0Mgc2hvdWxkIGhhdmUgYSBtb2R1bGUgbG9hZGVyIEFQSQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMTIxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
ZGRzIGEgbmV3IGRlbGVnYXRlIHRvIEpTQ29udHh0IHRoYXQgaXMgY2FsbGVkIHRvIGZldGNoCisg
ICAgICAgIGFueSByZXNvbHZlZCBtb2R1bGUuIFRoZSByZXNvbHV0aW9uIG9mIGEgbW9kdWxlIGlk
ZW50aWZpZXIgaXMgY29tcHV0ZWQKKyAgICAgICAgYXMgaWYgaXQgd2VyZSBhIFVSTCBvbiB0aGUg
d2ViIHdpdGggdGhlIGNhdmVhdCB0aGF0IGl0IG11c3QgYmUgYSBmaWxlIFVSTC4KKworICAgICAg
ICBBIG5ldyBjbGFzcyBKU1NjcmlwdCBoYXMgYWxzbyBiZWVuIGFkZGVkIHRoYXQgaXMgc2ltaWxh
ciB0byBKU1NjcmlwdFJlZi4KKyAgICAgICAgUmlnaHQgbm93IGFsbCBKU1NjcmlwdHMgYXJlIGNv
cGllZCBpbnRvIG1lbW9yeS4gSW4gdGhlIGZ1dHVyZSB3ZSBzaG91bGQKKyAgICAgICAgbW1hcCB0
aGUgcHJvdmlkZWQgZmlsZSBpbnRvIG1lbW9yeSBzbyB0aGUgT1MgY2FuIGV2aWN0IGl0IHRvIGRp
c2sgdW5kZXIKKyAgICAgICAgcHJlc3N1cmUuIEFkZGl0aW9uYWxseSwgdGhlIEFQSSBkb2VzIG5v
dCBtYWtlIHVzZSBvZiB0aGUgY29kZSBzaWduaW5nIHBhdGgKKyAgICAgICAgbm9yIHRoZSBieXRl
Y29kZSBjYWNoaW5nIHBhdGgsIHdoaWNoIHdlIHdpbGwgYWRkIGluIHN1YnNlcXVlbnQgcGF0Y2hl
cy4KKworICAgICAgICBMYXN0bHksIGEgY291cGxlIG9mIG5ldyBjb252ZW5pZW5jZSBtZXRob2Rz
IGhhdmUgYmVlbiBhZGRlZC4gQyBBUEkKKyAgICAgICAgY29udmVyc2lvbiwgY2FuIG5vdyB0b1Jl
ZiBhIEpTVmFsdWUgd2l0aCBqdXN0IGEgdm0gcmF0aGVyIHRoYW4KKyAgICAgICAgcmVxdWlyaW5n
IGFuIEV4ZWNTdGF0ZS4gU2Vjb25kbHksIHRoZXJlIGlzIG5vdyBhIGNhbGwgd3JhcHBlciB0aGF0
CisgICAgICAgIGRvZXMgbm90IHJlcXVpcmUgQ2FsbERhdGEgYW5kIENhbGxUeXBlIHNpbmNlIG1h
bnkgcGxhY2VzIGRvbid0CisgICAgICAgIGNhcmUgYWJvdXQgdGhpcy4KKworICAgICAgICAqIEFQ
SS9BUElDYXN0Lmg6CisgICAgICAgICh0b1JlZik6CisgICAgICAgICogQVBJL0pTQVBJR2xvYmFs
T2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FQSUdsb2JhbE9iamVjdDo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6SlNBUElHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OkpTQVBJR2xvYmFsT2JqZWN0OjpKU0FQSUdsb2JhbE9iamVjdCk6CisgICAg
ICAgICogQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNB
UElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUpOgorICAgICAgICAoSlNDOjpKU0FQ
SUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVySW1wb3J0TW9kdWxlKToKKyAgICAgICAgKEpTQzo6
SlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckZldGNoKToKKyAgICAgICAgKEpTQzo6SlNB
UElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzKToK
KyAgICAgICAgKiBBUEkvSlNBUElWYWx1ZVdyYXBwZXIuaDoKKyAgICAgICAgKEpTQzo6anNBUElW
YWx1ZVdyYXBwZXIpOiBEZWxldGVkLgorICAgICAgICAqIEFQSS9KU0NvbnRleHQuaDoKKyAgICAg
ICAgKiBBUEkvSlNDb250ZXh0Lm1tOgorICAgICAgICAoLVtKU0NvbnRleHQgbW9kdWxlTG9hZGVy
RGVsZWdhdGVdKToKKyAgICAgICAgKC1bSlNDb250ZXh0IHNldE1vZHVsZUxvYWRlckRlbGVnYXRl
Ol0pOgorICAgICAgICAqIEFQSS9KU0NvbnRleHRJbnRlcm5hbC5oOgorICAgICAgICAqIEFQSS9K
U0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogQVBJL0pTQ29udGV4dFJlZi5jcHA6CisgICAg
ICAgIChKU0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKToKKyAgICAgICAgKiBBUEkvSlNTY3Jp
cHQuaDogQWRkZWQuCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOiBBZGRlZC4KKyAgICAgICAg
KCtbSlNTY3JpcHQgc2NyaXB0V2l0aFNvdXJjZTppblZpcnR1YWxNYWNoaW5lOl0pOgorICAgICAg
ICAoZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZSk6CisgICAgICAgICgrW0pTU2NyaXB0IHNj
cmlwdEZyb21VVEY4RmlsZTppblZpcnR1YWxNYWNoaW5lOndpdGhDb2RlU2lnbmluZzphbmRCeXRl
Y29kZUNhY2hlOl0pOgorICAgICAgICAoZ2V0SlNTY3JpcHRTb3VyY2VDb2RlKToKKyAgICAgICAg
KiBBUEkvSlNTY3JpcHRJbnRlcm5hbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oLgorICAgICAgICAqIEFQSS9KU1ZhbHVl
SW50ZXJuYWwuaDoKKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmg6Cisg
ICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAgICAgICgrW0pTQ29udGV4dEZldGNo
RGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl0pOgorICAgICAgICAoLVtKU0NvbnRl
eHRGZXRjaERlbGVnYXRlIGNvbnRleHQ6ZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyOndpdGhSZXNv
bHZlSGFuZGxlcjphbmRSZWplY3RIYW5kbGVyOl0pOgorICAgICAgICAoY2hlY2tNb2R1bGVDb2Rl
UmFuKToKKyAgICAgICAgKGNoZWNrTW9kdWxlV2FzUmVqZWN0ZWQpOgorICAgICAgICAodGVzdEZl
dGNoKToKKyAgICAgICAgKHRlc3RGZXRjaFdpdGhUd29DeWNsZSk6CisgICAgICAgICh0ZXN0RmV0
Y2hXaXRoVGhyZWVDeWNsZSk6CisgICAgICAgICh0ZXN0TG9hZGVyUmVzb2x2ZXNBYnNvbHV0ZVNj
cmlwdFVSTCk6CisgICAgICAgICh0ZXN0TG9hZGVyUmVqZWN0c05pbFNjcmlwdFVSTCk6CisgICAg
ICAgICh0ZXN0TG9hZGVyUmVqZWN0c0ZhaWxlZEZldGNoKToKKyAgICAgICAgKHRlc3RJbXBvcnRN
b2R1bGVUd2ljZSk6CisgICAgICAgICgrW0pTQ29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0ZSBuZXdD
b250ZXh0XSk6CisgICAgICAgIChyZXNvbHZlUGF0aFRvU2NyaXB0cyk6CisgICAgICAgICgtW0pT
Q29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0ZSBjb250ZXh0OmZldGNoTW9kdWxlRm9ySWRlbnRpZmll
cjp3aXRoUmVzb2x2ZUhhbmRsZXI6YW5kUmVqZWN0SGFuZGxlcjpdKToKKyAgICAgICAgKHRlc3RM
b2FkQmFzaWNGaWxlKToKKyAgICAgICAgKHRlc3RPYmplY3RpdmVDQVBJKToKKyAgICAgICAgKiBB
UEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvYmFzaWMuanM6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmguCisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2Vz
Q29jb2EudHh0OgorICAgICAgICAqIGNvbmZpZy5oOgorICAgICAgICAqIHJ1bnRpbWUvQ2FsbERh
dGEuY3BwOgorICAgICAgICAoSlNDOjpjYWxsKToKKyAgICAgICAgKiBydW50aW1lL0NhbGxEYXRh
Lmg6CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6bG9h
ZEFuZEV2YWx1YXRlTW9kdWxlKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTQ2FzdC5oOgorICAgICAgICAoSlNDOjpqc1NlY3VyZUNhc3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpjcmVh
dGVQcm94eVByb3BlcnR5KToKKwogMjAxOC0xMi0zMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWls
bGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBTb3VyY2VQcm92aWRlcnMgc2hvdWxkIHVzZSBhbiBh
Y3R1YWwgVVJMIGluc3RlYWQgb2YgYSBzdHJpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvQVBJQ2FzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElDYXN0
LmgKaW5kZXggM2I1NTkxMTllMjJhMWU1Njg4MDg4NzI3ZjliYTdkY2IyODI0YWY0ZC4uOGIwODZm
MGY0NTFmMjgzYTUyNzYzZTE5OGFiMGNlOTZlY2Q2NTk2ZSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9BUElDYXN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9BUElDYXN0LmgKQEAgLTEyOCwyMSArMTI4LDI2IEBAIGlubGluZSBKU0M6OlZNKiB0b0pTKEpT
Q29udGV4dEdyb3VwUmVmIGcpCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDOjpWTSo+
KGNvbnN0X2Nhc3Q8T3BhcXVlSlNDb250ZXh0R3JvdXAqPihnKSk7CiB9CiAKLWlubGluZSBKU1Zh
bHVlUmVmIHRvUmVmKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdikKK2lubGlu
ZSBKU1ZhbHVlUmVmIHRvUmVmKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdikKIHsKLSAgICBB
U1NFUlQoZXhlYy0+dm0oKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBB
U1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAjaWYgIUNQVShBRERS
RVNTNjQpCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIXYuaXNDZWxs
KCkpCi0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTVmFsdWVSZWY+KEpTQzo6anNB
UElWYWx1ZVdyYXBwZXIoZXhlYywgdikuYXNDZWxsKCkpOworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxKU1ZhbHVlUmVmPihKU0M6OkpTQVBJV3JhcHBlclZhbHVlOjpjcmVhdGUodm0s
IHYpLmFzQ2VsbCgpKTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlUmVmPih2
LmFzQ2VsbCgpKTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9Q
QVJBTSh2bSk7CiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU1ZhbHVlUmVmPih2KTsKICNlbmRp
ZgogfQogCitpbmxpbmUgSlNWYWx1ZVJlZiB0b1JlZihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlND
OjpKU1ZhbHVlIHYpCit7CisgICAgcmV0dXJuIHRvUmVmKGV4ZWMtPnZtKCksIHYpOworfQorCiBp
bmxpbmUgSlNPYmplY3RSZWYgdG9SZWYoSlNDOjpKU09iamVjdCogbykKIHsKICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxKU09iamVjdFJlZj4obyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjBjMjRhYmM3N2EyYWRiMzlh
YTAyNTEwODE5MWRiM2E0MzY4YzlhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QuaApAQCAtMCwwICsxLDY0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpT
QVBJR2xvYmFsT2JqZWN0IDogcHVibGljIEpTR2xvYmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1
c2luZyBCYXNlID0gSlNHbG9iYWxPYmplY3Q7CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3Rh
dGljIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIHNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFi
bGU7CisKKyAgICBzdGF0aWMgSlNBUElHbG9iYWxPYmplY3QqIGNyZWF0ZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgYXV0byogb2JqZWN0ID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNBUElHbG9iYWxPYmplY3Q+KHZtLmhlYXApKSBKU0FQSUdsb2Jh
bE9iamVjdCh2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2
bSk7CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorCisgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICBhdXRvKiByZXN1bHQgPSBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgMCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhHbG9iYWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAg
ICAgIHJlc3VsdC0+c2V0VHJhbnNpdGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZCh0cnVl
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNJbnRlcm5h
bFByb21pc2UqIG1vZHVsZUxvYWRlckltcG9ydE1vZHVsZShKU0dsb2JhbE9iamVjdCosIEV4ZWNT
dGF0ZSosIEpTTW9kdWxlTG9hZGVyKiwgSlNTdHJpbmcqIG1vZHVsZU5hbWVWYWx1ZSwgSlNWYWx1
ZSBwYXJhbWV0ZXJzLCBjb25zdCBTb3VyY2VPcmlnaW4mKTsKKyAgICBzdGF0aWMgSWRlbnRpZmll
ciBtb2R1bGVMb2FkZXJSZXNvbHZlKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNNb2R1
bGVMb2FkZXIqLCBKU1ZhbHVlIGtleVZhbHVlLCBKU1ZhbHVlIHJlZmVycmVyVmFsdWUsIEpTVmFs
dWUpOworICAgIHN0YXRpYyBKU0ludGVybmFsUHJvbWlzZSogbW9kdWxlTG9hZGVyRmV0Y2goSlNH
bG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUsIEpTVmFs
dWUsIEpTVmFsdWUpOworICAgIHN0YXRpYyBKU09iamVjdCogbW9kdWxlTG9hZGVyQ3JlYXRlSW1w
b3J0TWV0YVByb3BlcnRpZXMoSlNHbG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU01vZHVsZUxv
YWRlciosIEpTVmFsdWUsIEpTTW9kdWxlUmVjb3JkKiwgSlNWYWx1ZSk7CisKK3ByaXZhdGU6Cisg
ICAgSlNBUElHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsICZzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQorICAg
IHsgfQorfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQ
SUdsb2JhbE9iamVjdC5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxP
YmplY3QubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYzQyZjVmMjMyMTZmNDZhZjFhZjA3MzgyYjE4NTNhM2VhNWFl
NzRiNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElH
bG9iYWxPYmplY3QubW0KQEAgLTAsMCArMSwyMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJKU0FQ
SUdsb2JhbE9iamVjdC5oIgorCisjaW1wb3J0ICJBUElDYXN0LmgiCisjaW1wb3J0ICJDYXRjaFNj
b3BlLmgiCisjaW1wb3J0ICJDb21wbGV0aW9uLmgiCisjaW1wb3J0ICJFcnJvci5oIgorI2ltcG9y
dCAiRXhjZXB0aW9uLmgiCisjaW1wb3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgorI2ltcG9ydCAi
SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5oIgorI2ltcG9ydCAiSlNOYXRpdmVTdGRGdW5jdGlv
bi5oIgorI2ltcG9ydCAiSlNTY3JpcHRJbnRlcm5hbC5oIgorI2ltcG9ydCAiSlNTb3VyY2VDb2Rl
LmgiCisjaW1wb3J0ICJKU1ZhbHVlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTVmlydHVhbE1hY2hp
bmVJbnRlcm5hbC5oIgorI2ltcG9ydCAiSmF2YVNjcmlwdENvcmUuaCIKKyNpbXBvcnQgIk9iamVj
dENvbnN0cnVjdG9yLmgiCisjaW1wb3J0ICJTb3VyY2VPcmlnaW4uaCIKKworI2ltcG9ydCA8d3Rm
L1VSTC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTQVBJR2xvYmFs
T2JqZWN0OjpzX2luZm8gPSB7ICJHbG9iYWxPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQVBJR2xvYmFsT2JqZWN0KSB9OworCitj
b25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSBKU0FQSUdsb2JhbE9iamVjdDo6c19nbG9iYWxP
YmplY3RNZXRob2RUYWJsZSA9IHsKKyAgICAmc3VwcG9ydHNSaWNoU291cmNlSW5mbywKKyAgICAm
c2hvdWxkSW50ZXJydXB0U2NyaXB0LAorICAgICZqYXZhU2NyaXB0UnVudGltZUZsYWdzLAorICAg
IG51bGxwdHIsIC8vIHF1ZXVlVGFza1RvRXZlbnRMb29wCisgICAgJnNob3VsZEludGVycnVwdFNj
cmlwdEJlZm9yZVRpbWVvdXQsCisgICAgJm1vZHVsZUxvYWRlckltcG9ydE1vZHVsZSwgLy8gbW9k
dWxlTG9hZGVySW1wb3J0TW9kdWxlCisgICAgJm1vZHVsZUxvYWRlclJlc29sdmUsIC8vIG1vZHVs
ZUxvYWRlclJlc29sdmUKKyAgICAmbW9kdWxlTG9hZGVyRmV0Y2gsIC8vIG1vZHVsZUxvYWRlckZl
dGNoCisgICAgJm1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzLCAvLyBtb2R1
bGVMb2FkZXJDcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcworICAgIG51bGxwdHIsIC8vIG1vZHVs
ZUxvYWRlckV2YWx1YXRlCisgICAgbnVsbHB0ciwgLy8gcHJvbWlzZVJlamVjdGlvblRyYWNrZXIK
KyAgICBudWxscHRyLCAvLyBkZWZhdWx0TGFuZ3VhZ2UKKyAgICBudWxscHRyLCAvLyBjb21waWxl
U3RyZWFtaW5nCisgICAgbnVsbHB0ciwgLy8gaW5zdGFudGlhdGVTdHJlYW1pbmcKK307CisKK0lk
ZW50aWZpZXIgSlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU01vZHVsZUxvYWRlciosIEpT
VmFsdWUga2V5LCBKU1ZhbHVlIHJlZmVycmVyLCBKU1ZhbHVlKQoreworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IEFTU0VSVF9VTlVTRUQoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QgPT0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKTsKKyAgICBBU1NFUlQoa2V5LmlzU3RyaW5nKCkgfHwga2V5LmlzU3lt
Ym9sKCkpOworICAgIFN0cmluZyBuYW1lID0gIGtleS50b1dURlN0cmluZyhleGVjKTsKKworICAg
IFVSTCByZWZlcnJlclVSTChVUkwoKSwganNDYXN0PEpTU3RyaW5nKj4ocmVmZXJyZXIpLT50cnlH
ZXRWYWx1ZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWZlcnJlclVSTC5pc1ZhbGlkKCkpOwor
CisgICAgVVJMIHVybCA9IFVSTChyZWZlcnJlclVSTCwgbmFtZSk7CisgICAgaWYgKHVybC5pc1Zh
bGlkKCkpCisgICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIHVybCk7
CisKKyAgICB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsICJDb3VsZCBub3QgZm9ybSB2YWxpZCBV
UkwgZnJvbSBpZGVudGlmaWVyIGFuZCBiYXNlIl9zKTsKKyAgICByZXR1cm4geyB9OworfQorCitK
U0ludGVybmFsUHJvbWlzZSogSlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckltcG9ydE1v
ZHVsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIEpTTW9k
dWxlTG9hZGVyKiwgSlNTdHJpbmcqIHNwZWNpZmllclZhbHVlLCBKU1ZhbHVlLCBjb25zdCBTb3Vy
Y2VPcmlnaW4mIHNvdXJjZU9yaWdpbikKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIGF1dG8g
cmVqZWN0ID0gWyZdIChKU1ZhbHVlIGV4Y2VwdGlvbikgLT4gSlNJbnRlcm5hbFByb21pc2UqIHsK
KyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgYXV0byogcHJvbWlzZSA9
IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OnRyeUNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3Qp
OworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gcHJvbWlz
ZS0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgfTsKKworICAgIGF1dG8gaW1wb3J0ID0g
WyZdIChVUkwmIHVybCkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IGltcG9ydE1vZHVsZShleGVj
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgdXJsKSwganNVbmRlZmluZWQoKSwganNVbmRl
ZmluZWQoKSk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAg
ICAgICAgICByZXR1cm4gcmVqZWN0KHNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9OworCisgICAgYXV0byBzcGVjaWZpZXIgPSBzcGVjaWZpZXJWYWx1ZS0+
dmFsdWUoZXhlYyk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAg
ICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gcmVqZWN0KGV4Y2VwdGlvbik7Cisg
ICAgfQorCisgICAgVVJMIGFic29sdXRlVVJMKFVSTCgpLCBzcGVjaWZpZXIpOworICAgIGlmIChh
YnNvbHV0ZVVSTC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBpbXBvcnQoYWJzb2x1dGVVUkwp
OworCisgICAgaWYgKCFzcGVjaWZpZXIuc3RhcnRzV2l0aCgnLycpICYmICFzcGVjaWZpZXIuc3Rh
cnRzV2l0aCgiLi8iKSAmJiAhc3BlY2lmaWVyLnN0YXJ0c1dpdGgoIi4uLyIpKQorICAgICAgICBy
ZXR1cm4gcmVqZWN0KGNyZWF0ZUVycm9yKGV4ZWMsICJNb2R1bGUgc3BlY2lmaWVyIGRvZXMgbm90
IHN0YXJ0IHdpdGggXCIvXCIsIFwiLi9cIiwgb3IgXCIuLi9cIi4iX3MpKTsKKworICAgIGlmIChz
cGVjaWZpZXIuc3RhcnRzV2l0aCgnLycpKSB7CisgICAgICAgIGFic29sdXRlVVJMID0gVVJMKFVS
TCh7IH0sICJmaWxlOi8vIiksIHNwZWNpZmllcik7CisgICAgICAgIGlmIChhYnNvbHV0ZVVSTC5p
c1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gaW1wb3J0KGFic29sdXRlVVJMKTsKKyAgICB9
CisKKyAgICBhdXRvIG5vQmFzZUVycm9yTWVzc2FnZSA9ICJDb3VsZCBub3QgZGV0ZXJtaW5lIHRo
ZSBiYXNlIFVSTCBmb3IgbG9hZGluZy4iX3M7CisgICAgaWYgKHNvdXJjZU9yaWdpbi5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuIHJlamVjdChjcmVhdGVFcnJvcihleGVjLCBub0Jhc2VFcnJvck1l
c3NhZ2UpKTsKKworICAgIGF1dG8gcmVmZXJyZXIgPSBzb3VyY2VPcmlnaW4uc3RyaW5nKCk7Cisg
ICAgVVJMIGJhc2VVUkwoVVJMKCksIHJlZmVycmVyKTsKKyAgICBpZiAoIWJhc2VVUkwuaXNWYWxp
ZCgpKQorICAgICAgICByZXR1cm4gcmVqZWN0KGNyZWF0ZUVycm9yKGV4ZWMsIG5vQmFzZUVycm9y
TWVzc2FnZSkpOworCisgICAgVVJMIHVybChiYXNlVVJMLCBzcGVjaWZpZXIpOworICAgIGlmICgh
dXJsLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHJlamVjdChjcmVhdGVFcnJvcihleGVjLCAi
Y291bGQgbm90IGRldGVybWluZSBhIHZhbGlkIFVSTCBmb3IgbW9kdWxlIHNwZWNpZmllciJfcykp
OworCisgICAgcmV0dXJuIGltcG9ydCh1cmwpOworfQorCitKU0ludGVybmFsUHJvbWlzZSogSlNB
UElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckZldGNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlIGtleSwgSlNW
YWx1ZSwgSlNWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgQVNTRVJUKGdsb2Jh
bE9iamVjdCA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworICAgIEpTQ29udGV4dCAq
Y29udGV4dCA9IFtKU0NvbnRleHQgY29udGV4dFdpdGhKU0dsb2JhbENvbnRleHRSZWY6dG9HbG9i
YWxSZWYoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpXTsKKworICAgIEpTSW50ZXJuYWxQcm9t
aXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6dHJ5Q3Jl
YXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
bnVsbHB0cik7CisKKyAgICBJZGVudGlmaWVyIG1vZHVsZUtleSA9IGtleS50b1Byb3BlcnR5S2V5
KGV4ZWMpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAg
SlNWYWx1ZSBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywgZXhj
ZXB0aW9uKTsKKyAgICB9CisKKyAgICBpZiAoVU5MSUtFTFkoIVtjb250ZXh0IG1vZHVsZUxvYWRl
ckRlbGVnYXRlXSkpCisgICAgICAgIHJldHVybiBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGNyZWF0
ZUVycm9yKGV4ZWMsICJObyBtb2R1bGUgbG9hZGVyIHByb3ZpZGVkLiIpKTsKKworICAgIGF1dG8g
ZGVmZXJyZWRQcm9taXNlID0gU3Ryb25nPEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ+KHZtLCBk
ZWZlcnJlZCk7CisgICAgYXV0byBzdHJvbmdLZXkgPSBTdHJvbmc8SlNTdHJpbmc+KHZtLCBqc1Nl
Y3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwga2V5KSk7CisgICAgYXV0byogcmVzb2x2ZSA9IEpTTmF0
aXZlU3RkRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAxLCAicmVzb2x2ZSIsIFs9
XSAoRXhlY1N0YXRlKiBleGVjKSB7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
ICAgIC8vIFRoaXMgY2FwdHVyZXMgdGhlIGdsb2JhbE9iamVjdCBidXQgdGhhdCdzIG9rIGJlY2F1
c2Ugb3VyIHN0cnVjdHVyZSBrZWVwcyBpdCBhbGl2ZSBhbnl3YXkuCisgICAgICAgIEpTQ29udGV4
dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY29udGV4dFdpdGhKU0dsb2JhbENvbnRleHRSZWY6dG9H
bG9iYWxSZWYoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpXTsKKyAgICAgICAgaWQgc2NyaXB0
ID0gdmFsdWVUb09iamVjdChjb250ZXh0LCB0b1JlZihleGVjLCBleGVjLT5hcmd1bWVudCgwKSkp
OworCisgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgICAgIGlmIChVTkxJ
S0VMWSghW3NjcmlwdCBpc0tpbmRPZkNsYXNzOltKU1NjcmlwdCBjbGFzc11dKSkgeworICAgICAg
ICAgICAgYXJncy5hcHBlbmQoY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJGaXJzdCBhcmd1bWVudCBv
ZiByZXNvbHV0aW9uIGNhbGxiYWNrIGlzIG5vdCBhIEpTU2NyaXB0IikpOworICAgICAgICAgICAg
Y2FsbChleGVjLCBkZWZlcnJlZFByb21pc2UtPkpTUHJvbWlzZURlZmVycmVkOjpyZWplY3QoKSwg
YXJncywgIlRoaXMgc2hvdWxkIG5ldmVyIGJlIHNlZW4uLi4iKTsKKyAgICAgICAgICAgIHJldHVy
biBlbmNvZGVkSlNVbmRlZmluZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFN0cmlu
ZyYgc291cmNlID0gZ2V0SlNTY3JpcHRTb3VyY2VDb2RlKHN0YXRpY19jYXN0PEpTU2NyaXB0ICo+
KHNjcmlwdCkpOworICAgICAgICBhcmdzLmFwcGVuZChKU1NvdXJjZUNvZGU6OmNyZWF0ZSh2bSwg
bWFrZVNvdXJjZShzb3VyY2UsIFNvdXJjZU9yaWdpbihtb2R1bGVLZXkuc3RyaW5nKCkpLCBVUkwo
eyB9LCBtb2R1bGVLZXkuc3RyaW5nKCkpLCBUZXh0UG9zaXRpb24oKSwgSlNDOjpTb3VyY2VQcm92
aWRlclNvdXJjZVR5cGU6Ok1vZHVsZSkpKTsKKyAgICAgICAgY2FsbChleGVjLCBkZWZlcnJlZFBy
b21pc2UtPkpTUHJvbWlzZURlZmVycmVkOjpyZXNvbHZlKCksIGFyZ3MsICJUaGlzIHNob3VsZCBu
ZXZlciBiZSBzZWVuLi4uIik7CisgICAgICAgIHJldHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsK
KyAgICB9KTsKKworICAgIGF1dG8qIHJlamVjdCA9IEpTTmF0aXZlU3RkRnVuY3Rpb246OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCAxLCAicmVqZWN0IiwgWz1dIChFeGVjU3RhdGUqIGV4ZWMpIHsK
KyAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICAgICAgYXJncy5hcHBlbmQo
ZXhlYy0+YXJndW1lbnQoMCkpOworCisgICAgICAgIGNhbGwoZXhlYywgZGVmZXJyZWRQcm9taXNl
LT5KU1Byb21pc2VEZWZlcnJlZDo6cmVqZWN0KCksIGFyZ3MsICJUaGlzIHNob3VsZCBuZXZlciBi
ZSBzZWVuLi4uIik7CisgICAgICAgIHJldHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsKKyAgICB9
KTsKKworICAgIFtbY29udGV4dCBtb2R1bGVMb2FkZXJEZWxlZ2F0ZV0gY29udGV4dDpjb250ZXh0
IGZldGNoTW9kdWxlRm9ySWRlbnRpZmllcjpbOjpKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6
dG9SZWYoZXhlYywga2V5KSBpbkNvbnRleHQ6Y29udGV4dF0gd2l0aFJlc29sdmVIYW5kbGVyOls6
OkpTVmFsdWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjp0b1JlZihleGVjLCByZXNvbHZlKSBpbkNvbnRl
eHQ6Y29udGV4dF0gYW5kUmVqZWN0SGFuZGxlcjpbOjpKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVS
ZWY6dG9SZWYoZXhlYywgcmVqZWN0KSBpbkNvbnRleHQ6Y29udGV4dF1dOworICAgIGlmIChjb250
ZXh0LmV4Y2VwdGlvbikgeworICAgICAgICBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIHRvSlMoZXhl
YywgW2NvbnRleHQuZXhjZXB0aW9uIEpTVmFsdWVSZWZdKSk7CisgICAgICAgIGNvbnRleHQuZXhj
ZXB0aW9uID0gbmlsOworICAgIH0KKyAgICByZXR1cm4gZGVmZXJyZWQtPnByb21pc2UoKTsKK30K
KworSlNPYmplY3QqIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJDcmVhdGVJbXBvcnRN
ZXRhUHJvcGVydGllcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSBrZXksIEpTTW9kdWxlUmVjb3JkKiwgSlNWYWx1
ZSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTT2JqZWN0KiBtZXRhUHJvcGVydGllcyA9IGNvbnN0
cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIGdsb2JhbE9iamVjdC0+bnVsbFByb3RvdHlwZU9iamVjdFN0
cnVjdHVyZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKwor
ICAgIG1ldGFQcm9wZXJ0aWVzLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCAiZmlsZW5hbWUiKSwga2V5KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBu
dWxscHRyKTsKKworICAgIHJldHVybiBtZXRhUHJvcGVydGllczsKK30KKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVZhbHVlV3JhcHBlci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVZhbHVlV3JhcHBlci5oCmluZGV4IDA2YjMwNzEwM2Vl
YTIzNDA1NDdiMDMwMjljZTNmYjBlNmQ3Njc2MzMuLmFhMjYwODJmZjM1YmFkOTA5YzFiYjNhNjQ1
OTJiMGUxZTE4ODc5MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNB
UElWYWx1ZVdyYXBwZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJVmFs
dWVXcmFwcGVyLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0y
MDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAx
IFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0
LCAyMDA1LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDQsMTAgKzQ0LDkgQEAgcHVibGljOgogCiAgICAgREVD
TEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIHN0YXRpYyBKU0FQSVZhbHVlV3JhcHBlciogY3JlYXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkgCisgICAgc3RhdGljIEpTQVBJVmFsdWVX
cmFwcGVyKiBjcmVhdGUoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICAgICAgSlNBUElWYWx1ZVdyYXBwZXIqIHdyYXBwZXIgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FQSVZhbHVlV3JhcHBlcj4odm0uaGVhcCkpIEpT
QVBJVmFsdWVXcmFwcGVyKGV4ZWMpOworICAgICAgICBKU0FQSVZhbHVlV3JhcHBlciogd3JhcHBl
ciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQVBJVmFsdWVXcmFwcGVyPih2bS5oZWFw
KSkgSlNBUElWYWx1ZVdyYXBwZXIodm0pOwogICAgICAgICB3cmFwcGVyLT5maW5pc2hDcmVhdGlv
bih2bSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB9CkBAIC02MSwxNyAr
NjAsMTIgQEAgcHJvdGVjdGVkOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBKU0FQSVZhbHVlV3Jh
cHBlcihFeGVjU3RhdGUqIGV4ZWMpCi0gICAgICAgIDogSlNDZWxsKGV4ZWMtPnZtKCksIGV4ZWMt
PnZtKCkuYXBpV3JhcHBlclN0cnVjdHVyZS5nZXQoKSkKKyAgICBKU0FQSVZhbHVlV3JhcHBlcihW
TSYgdm0pCisgICAgICAgIDogSlNDZWxsKHZtLCB2bS5hcGlXcmFwcGVyU3RydWN0dXJlLmdldCgp
KQogICAgIHsKICAgICB9CiAKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92YWx1ZTsKIH07
CiAKLWlubGluZSBKU1ZhbHVlIGpzQVBJVmFsdWVXcmFwcGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNBUElWYWx1ZVdyYXBwZXI6OmNyZWF0ZShleGVj
LCB2YWx1ZSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDb250ZXh0LmgKaW5kZXggODljODdmOWUyZTFmZjFiMTcxYjFlYmJhOGM0NTIxNTlmNDRmNDc1
YS4uMGE4NTZjNTk1OGY4OWM3YjExNWVlYWQ4NGVhNTNhMzQ0MzFiMmM3NyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ29udGV4dC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2lmIEpTQ19PQkpDX0FQ
SV9FTkFCTEVECiAKLUBjbGFzcyBKU1ZpcnR1YWxNYWNoaW5lLCBKU1ZhbHVlOworQGNsYXNzIEpT
U2NyaXB0LCBKU1ZpcnR1YWxNYWNoaW5lLCBKU1ZhbHVlLCBKU0NvbnRleHQ7CiAKIC8qIQogQGlu
dGVyZmFjZQpAQCAtMzksNyArMzksNyBAQAogIEphdmFTY3JpcHQgZXhlY3V0aW9uIHRha2VzIHBs
YWNlIHdpdGhpbiBhIGNvbnRleHQsIGFuZCBhbGwgSmF2YVNjcmlwdCB2YWx1ZXMKICBhcmUgdGll
ZCB0byBhIGNvbnRleHQuCiAqLwotTlNfQ0xBU1NfQVZBSUxBQkxFKDEwXzksIDdfMCkKK0pTQ19D
TEFTU19BVkFJTEFCTEUobWFjb3N4KDEwLjkpLCBpc28oNy4wKSkKIEBpbnRlcmZhY2UgSlNDb250
ZXh0IDogTlNPYmplY3QKIAogLyohCkBAIC0xNzcsNyArMTc3LDYgQEAgTlNfQ0xBU1NfQVZBSUxB
QkxFKDEwXzksIDdfMCkKIEBkaXNjdXNzaW9uIE5hbWUgb2YgdGhlIEpTQ29udGV4dC4gRXhwb3Nl
ZCB3aGVuIHJlbW90ZSBkZWJ1Z2dpbmcgdGhlIGNvbnRleHQuCiAqLwogQHByb3BlcnR5IChjb3B5
KSBOU1N0cmluZyAqbmFtZSBKU0NfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTApLCBpb3MoOC4w
KSk7Ci0KIEBlbmQKIAogLyohCkBAIC0yMzEsNiArMjMwLDcgQEAgTlNfQ0xBU1NfQVZBSUxBQkxF
KDEwXzksIDdfMCkKIEByZXN1bHQgVGhlIEMgQVBJIGVxdWl2YWxlbnQgb2YgdGhpcyBKU0NvbnRl
eHQuCiAqLwogQHByb3BlcnR5IChyZWFkb25seSkgSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xvYmFs
Q29udGV4dFJlZjsKKwogQGVuZAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nv
bnRleHQubW0KaW5kZXggMjc1NjZmNDFiOTdlMWIzOWJkZGU5YjQ4YWFhNTU5ZjE0Y2I3MzllYS4u
M2M3NzZkNGQ5MDBlZTE3MzMzNjJhYzI5ZjYyNGY0NDRkNTQ1ZTdiNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0KKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NvbnRleHQubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTEgKzI2LDE1IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAKICNpbXBvcnQgIkFQSUNhc3QuaCIKKyNpbXBvcnQgIkNvbXBsZXRpb24uaCIKICNpbXBv
cnQgIkpTQ0lubGluZXMuaCIKICNpbXBvcnQgIkpTQ29udGV4dEludGVybmFsLmgiCiAjaW1wb3J0
ICJKU0NvbnRleHRQcml2YXRlLmgiCiAjaW1wb3J0ICJKU0NvbnRleHRSZWZJbnRlcm5hbC5oIgog
I2ltcG9ydCAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbXBvcnQgIkpTSW50ZXJuYWxQcm9taXNlLmgi
CisjaW1wb3J0ICJKU01vZHVsZUxvYWRlci5oIgorI2ltcG9ydCAiSlNTY3JpcHRJbnRlcm5hbC5o
IgogI2ltcG9ydCAiSlNWYWx1ZUludGVybmFsLmgiCiAjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5l
SW50ZXJuYWwuaCIKICNpbXBvcnQgIkpTV3JhcHBlck1hcC5oIgpAQCAtMzgsMTIgKzQyLDE1IEBA
CiAjaW1wb3J0ICJPYmpjUnVudGltZUV4dHJhcy5oIgogI2ltcG9ydCAiU3Ryb25nSW5saW5lcy5o
IgogCisjaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KKwogI2lmIEpTQ19PQkpDX0FQSV9FTkFC
TEVECiAKIEBpbXBsZW1lbnRhdGlvbiBKU0NvbnRleHQgewogICAgIEpTVmlydHVhbE1hY2hpbmUg
Km1fdmlydHVhbE1hY2hpbmU7CiAgICAgSlNHbG9iYWxDb250ZXh0UmVmIG1fY29udGV4dDsKICAg
ICBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBtX2V4Y2VwdGlvbjsKKyAgICBXZWFrT2JqQ1B0
cjxpZCA8SlNNb2R1bGVMb2FkZXJEZWxlZ2F0ZT4+IG1fbW9kdWxlTG9hZGVyRGVsZWdhdGU7CiB9
CiAKIC0gKEpTR2xvYmFsQ29udGV4dFJlZilKU0dsb2JhbENvbnRleHRSZWYKQEAgLTIzMyw2ICsy
NDAsMTYgQEAKICAgICBKU0dsb2JhbENvbnRleHRTZXREZWJ1Z2dlclJ1bkxvb3AobV9jb250ZXh0
LCBydW5Mb29wKTsKIH0KIAorLSAoaWQ8SlNNb2R1bGVMb2FkZXJEZWxlZ2F0ZT4pbW9kdWxlTG9h
ZGVyRGVsZWdhdGUKK3sKKyAgICByZXR1cm4gbV9tb2R1bGVMb2FkZXJEZWxlZ2F0ZS5nZXRBdXRv
cmVsZWFzZWQoKTsKK30KKworLSAodm9pZClzZXRNb2R1bGVMb2FkZXJEZWxlZ2F0ZTooaWQ8SlNN
b2R1bGVMb2FkZXJEZWxlZ2F0ZT4pbW9kdWxlTG9hZGVyRGVsZWdhdGUKK3sKKyAgICBtX21vZHVs
ZUxvYWRlckRlbGVnYXRlID0gbW9kdWxlTG9hZGVyRGVsZWdhdGU7Cit9CisKIEBlbmQKIAogQGlt
cGxlbWVudGF0aW9uIEpTQ29udGV4dChTdWJzY3JpcHRTdXBwb3J0KQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRJbnRlcm5hbC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NvbnRleHRJbnRlcm5hbC5oCmluZGV4IDI4ZjcwOWMxZTQ4ZjFlMWE4
MDM4NTY1MGFhZTZlNDFjZDM1MTUwZmEuLmFiNDU4MjlmMDAyN2U0ZmFkNmJmYmQxYWZjNDAyYjNh
MWJlODViNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0
SW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dEludGVy
bmFsLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIAotI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9K
U0NvbnRleHRQcml2YXRlLmg+CiAKIHN0cnVjdCBDYWxsYmFja0RhdGEgewogICAgIENhbGxiYWNr
RGF0YSogbmV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250
ZXh0UHJpdmF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRQcml2YXRl
LmgKaW5kZXggZmY5NjIyYWRkZjYwYjdjMTAzNTdkYWNjZjFjNmY0MWVjYjg2MWYxYy4uZDRlMjA2
YjMzNTc1ZTlmYTZkNDE4MmU5ZTFhZDg5NDA1NjhhODY3NyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRQcml2YXRlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NvbnRleHRQcml2YXRlLmgKQEAgLTMwLDYgKzMwLDI3IEBACiAKICNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dC5oPgogCitAcHJvdG9jb2wgSlNNb2R1bGVMb2Fk
ZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+CisKK0ByZXF1aXJlZAorCisvKiEgQGFic3RyYWN0IFByb3Zp
ZGVzIHNvdXJjZSBjb2RlIGZvciBhbnkgSlMgbW9kdWxlIHRoYXQgaXMgYWN0aXZlbHkgaW1wb3J0
ZWQuCisgQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgZm9yIHdoaWNoIHRoZSBtb2R1bGUgaXMg
YmVpbmcgcmVxdWVzdGVkLgorIEBwYXJhbSBpZGVudGlmaWVyIFRoZSByZXNvbHZlZCBpZGVudGlm
aWVyIGZvciB0aGUgcmVxdWVzdGVkIG1vZHVsZS4KKyBAcGFyYW0gcmVzb2x2ZSBBIEpTIGZ1bmN0
aW9uIHRvIGNhbGwgd2l0aCB0aGUgZGVzaXJlZCBzY3JpcHQgZm9yIGlkZW50aWZpZXIuCisgQHBh
cmFtIHJlamVjdCBBIEpTIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBpZGVudGlmaWVyIGNhbm5vdCBi
ZSBmZXRjaGVkLgorIEBkaXNjdXNzaW9uIEN1cnJlbnRseSwgaWRlbnRpZmllciB3aWxsIGFsd2F5
cyBiZSBhbiBhYnNvbHV0ZSBmaWxlIFVSTCBjb21wdXRlZCBmcm9tIHNwZWNpZmllciBvZiB0aGUg
cmVxdWVzdGVkIG1vZHVsZSByZWxhdGl2ZSB0byB0aGUgVVJMIG9mIHRoZSByZXF1ZXN0aW5nIHNj
cmlwdC4gSWYgdGhlIHJlcXVlc3Rpbmcgc2NyaXB0IGRvZXMgbm90IGhhdmUgYSBVUkwgYW5kIHRo
ZSBtb2R1bGUgc3BlY2lmaWVyIGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRoIHRoZSBtb2R1bGUgbG9h
ZGVyIHdpbGwgZmFpbCB0byBsb2FkIHRoZSBtb2R1bGUuCisKKyBUaGUgZmlyc3QgYXJndW1lbnQg
dG8gcmVzb2x2ZSBzaG9sdWQgYWx3YXlzIGJlIGEgSlNTY3JpcHQsIG90aGVyd2lzZSB0aGUgbW9k
dWxlIGxvYWRlciB3aWxsIHJlamVjdCB0aGUgbW9kdWxlLgorCisgT25jZSBhbiBpZGVudGlmaWVy
IGhhcyBiZWVuIHJlc29sdmVkIG9yIHJlamVjdGVkIGluIGEgZ2l2ZW4gY29udGV4dCBpdCB3aWxs
IG5ldmVyIGJlIHJlcXVlc3RlZCBhZ2Fpbi4gSWYgYSBzY3JpcHQgaXMgc3VjY2Vzc2Z1bGx5IGV2
YWx1YXRlZCBpdCB3aWxsIG5vdCBiZSByZS1ldmFsdWF0ZWQgb24gYW55IHN1YnNlcXVlbnQgaW1w
b3J0LgorCisgVGhlIFZNIHdpbGwgcmV0YWluIGFsbCBldmFsdWF0ZWQgbW9kdWxlcyBmb3IgdGhl
IGxpZmV0aW1lIG9mIHRoZSBjb250ZXh0LgorICovCistICh2b2lkKWNvbnRleHQ6KEpTQ29udGV4
dCAqKWNvbnRleHQgZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyOihKU1ZhbHVlICopaWRlbnRpZmll
ciB3aXRoUmVzb2x2ZUhhbmRsZXI6KEpTVmFsdWUgKilyZXNvbHZlIGFuZFJlamVjdEhhbmRsZXI6
KEpTVmFsdWUgKilyZWplY3Q7CisKK0BlbmQKKwogQGludGVyZmFjZSBKU0NvbnRleHQoUHJpdmF0
ZSkKIAogLyohCkBAIC01MCw2ICs3MSw5IEBACiAqLwogQHByb3BlcnR5IChzZXR0ZXI9X3NldERl
YnVnZ2VyUnVuTG9vcDopIENGUnVuTG9vcFJlZiBfZGVidWdnZXJSdW5Mb29wIEpTQ19BUElfQVZB
SUxBQkxFKG1hY29zeCgxMC4xMCksIGlvcyg4LjApKTsKIAorLyohIEBhYnN0cmFjdCBUaGUgZGVs
ZWdhdGUgdGhlIGNvbnRleHQgd2lsbCB1c2Ugd2hlbiB0cnlpbmcgdG8gbG9hZCBhIG1vZHVsZS4g
Tm90ZSwgdGhpcyBkZWxlZ2F0ZSB3aWxsIGJlIGlnbm9yZWQgZm9yIGNvbnRleHRzIHJldHVybmVk
IGJ5IFVJV2ViVmlldy4gKi8KK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrKSBpZCA8SlNNb2R1
bGVMb2FkZXJEZWxlZ2F0ZT4gbW9kdWxlTG9hZGVyRGVsZWdhdGUgSlNDX0FQSV9BVkFJTEFCTEUo
bWFjb3N4KEpTQ19NQUNfVEJBKSwgaW9zKEpTQ19JT1NfVEJBKSk7CisKIEBlbmQKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAKaW5kZXggZTE4ZGZk
MjFmZjI4NDAwN2QwMDM5ZTY0MzJkOWVjM2M0ZjFmMzE3Ny4uOWY1ZmRhZmM3ODE5NmZlNDQ4YzE4
ZDA3OTE1ZTA0ZmEzODY4NGFhYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NvbnRleHRSZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250
ZXh0UmVmLmNwcApAQCAtMzAsOSArMzAsOSBAQAogI2luY2x1ZGUgIkFQSUNhc3QuaCIKICNpbmNs
dWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCisjaW5j
bHVkZSAiSlNBUElHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0NhbGxiYWNrT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiSlNDbGFzc1JlZi5oIgotI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAj
aW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
U291cmNlUHJvdmlkZXIuaCIKQEAgLTEzOCw3ICsxMzgsNyBAQCBKU0dsb2JhbENvbnRleHRSZWYg
SlNHbG9iYWxDb250ZXh0Q3JlYXRlSW5Hcm91cChKU0NvbnRleHRHcm91cFJlZiBncm91cCwgSlND
bGFzcwogICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0ucHRyKCkpOwogCiAgICAgaWYgKCFnbG9i
YWxPYmplY3RDbGFzcykgewotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
SlNHbG9iYWxPYmplY3Q6OmNyZWF0ZSh2bS5nZXQoKSwgSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0
cnVjdHVyZSh2bS5nZXQoKSwganNOdWxsKCkpKTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IEpTQVBJR2xvYmFsT2JqZWN0OjpjcmVhdGUodm0uZ2V0KCksIEpTQVBJR2xv
YmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0uZ2V0KCksIGpzTnVsbCgpKSk7CiAjaWYgRU5B
QkxFKFJFTU9URV9JTlNQRUNUT1IpCiAgICAgICAgIGlmIChKU1JlbW90ZUluc3BlY3RvckdldElu
c3BlY3Rpb25FbmFibGVkQnlEZWZhdWx0KCkpCiAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPnNl
dFJlbW90ZURlYnVnZ2luZ0VuYWJsZWQodHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTU2NyaXB0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2Ny
aXB0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOTBjYjYwOTA4OGVjODJmNzQ0YWE3MmE3Y2Q3YzFkOGUxMzg1M2M4
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQu
aApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZS5oPgorCisjaWYgSlNDX09C
SkNfQVBJX0VOQUJMRUQKKworTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KKworT0JKQ19DTEFTUyBK
U1ZpcnR1YWxNYWNoaW5lOworCitKU0NfQ0xBU1NfQVZBSUxBQkxFKG1hY29zeChKU0NfTUFDX1RC
QSksIGlvcyhKU0NfSU9TX1RCQSkpCitAaW50ZXJmYWNlIEpTU2NyaXB0IDogTlNPYmplY3QKKwor
LyohCisgQG1ldGhvZAorIEBhYnN0cmFjdCBDcmVhdGUgYSBKU1NjcmlwdCBmb3IgdGhlIHNwZWNp
ZmllZCB2aXJ0dWFsIG1hY2hpbmUuCisgQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIGNvZGUgdG8g
dXNlIHdoZW4gdGhlIHNjcmlwdCBpcyBldmFsdWF0ZWQgYnkgdGhlIEpTIHZtLgorIEBwYXJhbSB2
bSBUaGUgSlNWaXJ0dWFsTWFjaGluZSB0aGUgc2NyaXB0IGNhbiBiZSBldmFsdWF0ZWQgaW4uCisg
QHJlc3VsdCBUaGUgbmV3IHNjcmlwdC4KKyAqLworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNj
cmlwdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGluVmlydHVhbE1hY2hpbmU6KEpTVmly
dHVhbE1hY2hpbmUgKil2bTsKKworLyohCisgQG1ldGhvZAorIEBhYnN0cmFjdCBDcmVhdGUgYSBK
U1NjcmlwdCBmb3IgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIG1hY2hpbmUgd2l0aCBhIHBhdGggdG8g
YSBjb2Rlc2lnbmluZyBhbmQgYnl0ZWNvZGUgY2FjaGluZy4KKyBAcGFyYW0gZmlsZVBhdGggQSBV
UkwgY29udGFpbmluZyB0aGUgcGF0aCB0byBhIEpTIHNvdXJjZSBjb2RlIGZpbGUgb24gZGlzay4K
KyBAcGFyYW0gdm0gVGhlIEpTVmlydHVhbE1hY2hpbmUgdGhlIHNjcmlwdCBjYW4gYmUgZXZhbHVh
dGVkIGluLgorIEBwYXJhbSBjb2RlU2lnbmluZ1BhdGggQSBVUkwgY29udGFpbmluZyB0aGUgcGF0
aCB0byB0aGUgY29kZVNpZ25pbmcgZmlsZSBmb3IgZmlsZVBhdGggb24gZGlzay4KKyBAcGFyYW0g
Y2FjaGVQYXRoIEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBhdGggd2hlcmUgdGhlIFZNIHNob3VsZCBj
YWNoZSBmb3IgZnV0dXJlIGV4ZWN1dGlvbi4KKyBAcmVzdWx0IFRoZSBuZXcgc2NyaXB0LgorIEBk
aXNjdXNzaW9uIHRoZSBmaWxlcyBhdCBmaWxlUGF0aCwgY29kZVNpZ25pbmdQYXRoLCBhbmQgY2Fj
aGVQYXRoIHNob3VsZCBub3QgYmUgZXh0ZXJuYWxseSBtb2RpZmllZCAgZm9yIHRoZSBsaWZlY3lj
bGUgb2Ygdm0uIE5vdGUgdGhhdCBjb2RlU2lnbmluZ1BhdGggYW5kIGNhY2hlUGF0aCBhcmUgbm90
IHVzZWQgY3VycmVudGx5LCBidXQgdGhhdCB3aWxsIGNoYW5nZSBpbiB0aGUgbmVhciBmdXR1cmUu
CisgKi8KKysgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRGcm9tVVRGOEZpbGU6KE5TVVJM
ICopZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhD
b2RlU2lnbmluZzoobnVsbGFibGUgTlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVD
YWNoZToobnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGg7CisKK0BlbmQKKworTlNfQVNTVU1FX05P
Tk5VTExfRU5ECisKKyNlbmRpZiAvLyBKU0NfT0JKQ19BUElfRU5BQkxFRApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNTY3JpcHQubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzk2YzQxZWY5ZWNjMzk4NDcwMDZjZmIx
YjY1NzNjNTM0OWQzZmRkZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNTY3JpcHQubW0KQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkpT
U2NyaXB0SW50ZXJuYWwuaCIKKworI2ltcG9ydCAiQVBJQ2FzdC5oIgorI2ltcG9ydCAiSlNDb250
ZXh0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTVmFsdWVQcml2YXRlLmgiCisjaW1wb3J0ICJTeW1i
b2wuaCIKKworI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECisKK0BpbXBsZW1lbnRhdGlvbiBKU1Nj
cmlwdCB7CisgICAgU3RyaW5nIG1fc291cmNlOworfQorCisrIChpbnN0YW5jZXR5cGUpc2NyaXB0
V2l0aFNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2UgaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFs
TWFjaGluZSAqKXZtCit7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBKU1NjcmlwdCAqcmVz
dWx0ID0gW1tKU1NjcmlwdCBhbGxvY10gaW5pdF07CisgICAgcmVzdWx0LT5tX3NvdXJjZSA9IHNv
dXJjZTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3I+
CitzdGF0aWMgYm9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKEZJTEUqIGZpbGUsIFZl
Y3RvciYgYnVmZmVyKQoreworICAgIC8vIFdlIG1pZ2h0IGhhdmUgaW5qZWN0ZWQgInVzZSBzdHJp
Y3QiOyBhdCB0aGUgdG9wLgorICAgIHNpemVfdCBpbml0aWFsU2l6ZSA9IGJ1ZmZlci5zaXplKCk7
CisgICAgaWYgKGZzZWVrKGZpbGUsIDAsIFNFRUtfRU5EKSA9PSAtMSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGxvbmcgYnVmZmVyQ2FwYWNpdHkgPSBmdGVsbChmaWxlKTsKKyAgICBpZiAo
YnVmZmVyQ2FwYWNpdHkgPT0gLTEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZnNl
ZWsoZmlsZSwgMCwgU0VFS19TRVQpID09IC0xKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
YnVmZmVyLnJlc2l6ZShidWZmZXJDYXBhY2l0eSArIGluaXRpYWxTaXplKTsKKyAgICBzaXplX3Qg
cmVhZFNpemUgPSBmcmVhZChidWZmZXIuZGF0YSgpICsgaW5pdGlhbFNpemUsIDEsIGJ1ZmZlci5z
aXplKCksIGZpbGUpOworICAgIHJldHVybiByZWFkU2l6ZSA9PSBidWZmZXIuc2l6ZSgpIC0gaW5p
dGlhbFNpemU7Cit9CisKK3N0YXRpYyBib29sIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUo
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgRklM
RSogZiA9IGZvcGVuKGZpbGVOYW1lLnV0ZjgoKS5kYXRhKCksICJyYiIpOworICAgIGlmICghZikg
eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBvcGVuIGZpbGU6ICVzXG4iLCBm
aWxlTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGJvb2wgcmVzdWx0ID0gZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShmLCBidWZmZXIp
OworICAgIGZjbG9zZShmKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworKyAoaW5zdGFu
Y2V0eXBlKXNjcmlwdEZyb21VVEY4RmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNo
aW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0gd2l0aENvZGVTaWduaW5nOihOU1VSTCAqKWNvZGVT
aWduaW5nUGF0aCBhbmRCeXRlY29kZUNhY2hlOihOU1VSTCAqKWNhY2hlUGF0aAoreworICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBjaGVjayBjb2RlU2lnbmluZy4KKyAgICBVTlVTRURfUEFSQU0o
Y29kZVNpZ25pbmdQYXRoKTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWN0dWFsbHkgY2Fj
aGUgYnl0ZWNvZGUuCisgICAgVU5VU0VEX1BBUkFNKGNhY2hlUGF0aCk7CisgICAgVU5VU0VEX1BB
UkFNKHZtKTsKKyAgICBVUkwgZmlsZVBhdGhVUkwoW2ZpbGVQYXRoIGFic29sdXRlVVJMXSk7Cisg
ICAgaWYgKCFmaWxlUGF0aFVSTC5pc0xvY2FsRmlsZSgpKQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBtbWFwIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBp
bnN0ZWFkIG9mIGNvcHlpbmcgaXQgaW50byBkaXJ0eSBtZW1vcnkuCisgICAgVmVjdG9yPGNoYXI+
IGJ1ZmZlcjsKKyAgICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZVBhdGhV
UkwuZmlsZVN5c3RlbVBhdGgoKSwgYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IEpTU2NyaXB0ICpyZXN1bHQgPSBbW0pTU2NyaXB0IGFsbG9jXSBpbml0XTsKKyAgICByZXN1bHQt
Pm1fc291cmNlID0gU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhidWZmZXIuZGF0
YSgpLCBidWZmZXIuc2l6ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitjb25zdCBTdHJp
bmcmIGdldEpTU2NyaXB0U291cmNlQ29kZShKU1NjcmlwdCAqbW9kdWxlKSB7IHJldHVybiBtb2R1
bGUtPm1fc291cmNlOyB9CisKK0BlbmQKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTRmZGZhZTAwYzc0NmI5OTU4
MmI5NmM4MTkwMDdlYmRkOGJlNWE4MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lt
cG9ydCAiSlNTY3JpcHQuaCIKKyNpbXBvcnQgIlNvdXJjZUNvZGUuaCIKKworCitjb25zdCBTdHJp
bmcmIGdldEpTU2NyaXB0U291cmNlQ29kZShKU1NjcmlwdCAqKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZUludGVybmFsLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTVmFsdWVJbnRlcm5hbC5oCmluZGV4IDRmMWE4ZjY5Y2JmY2MyOWFlYjI2NzQ3
MzgxZDhkNWY1ZTgxYmFlYWEuLjU0Yjc1NWVmZmZlNmVkMjRhNWMzMDIyYjdkNGMzYTE4NTAwYjAx
ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZUludGVybmFs
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlSW50ZXJuYWwuaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw4
ICsyNiw3IEBACiAjaWZuZGVmIEpTVmFsdWVJbnRlcm5hbF9oCiAjZGVmaW5lIEpTVmFsdWVJbnRl
cm5hbF9oCiAKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+Ci0jaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9K
U1ZhbHVlUHJpdmF0ZS5oPgogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgKaW5k
ZXggNWNhOWE3ZjRhMTA3MDQ0ZDYwOWIxMTI3N2JlODk3NmE0MzY3YWE5Yi4uOTEyMmVkNDlhNGVh
MWFhNDllYzY2N2ZlZjY2MjdmYzQzYjc3NzE2ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCkBAIC00Niw4ICs0Niw4IEBA
IEpTQ29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWNoaW5lKEpTVmlydHVhbE1h
Y2hpbmUgKik7CiAKIC0gKEpTQ29udGV4dCAqKWNvbnRleHRGb3JHbG9iYWxDb250ZXh0UmVmOihK
U0dsb2JhbENvbnRleHRSZWYpZ2xvYmFsQ29udGV4dDsKIC0gKHZvaWQpYWRkQ29udGV4dDooSlND
b250ZXh0ICopd3JhcHBlciBmb3JHbG9iYWxDb250ZXh0UmVmOihKU0dsb2JhbENvbnRleHRSZWYp
Z2xvYmFsQ29udGV4dDsKLQogQGVuZAorCiAjZW5kaWYgLy8gZGVmaW5lZChfX09CSkNfXykKIAog
dm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRvciYs
IHZvaWQqIHJvb3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0
cy90ZXN0YXBpLm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1t
CmluZGV4IDM3ZTEzODVjOGM0ODRlZmFlOGE5YzNmOTJlMTM1Y2E3M2Y5NTkxOTIuLjQzNWZkYmIz
NmQyNDQ2ZTg1ZGI1MzEzNjMzY2Q3NjRmZWY3OTk4YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0KQEAgLTMxLDcgKzMxLDkgQEAKICNpbXBvcnQgIkRGR1dv
cmtsaXN0LmgiCiAjaW1wb3J0ICJEYXRlVGVzdHMuaCIKICNpbXBvcnQgIkpTQ2FzdC5oIgorI2lt
cG9ydCAiSlNDb250ZXh0UHJpdmF0ZS5oIgogI2ltcG9ydCAiSlNFeHBvcnRUZXN0cy5oIgorI2lt
cG9ydCAiSlNTY3JpcHQuaCIKICNpbXBvcnQgIkpTVmFsdWVQcml2YXRlLmgiCiAjaW1wb3J0ICJK
U1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKICNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmVQcml2
YXRlLmgiCkBAIC0xODEyLDEyICsxODE0LDI0OCBAQCBzdGF0aWMgdm9pZCBwYXJhbGxlbFByb21p
c2VSZXNvbHZlVGVzdCgpCiAgICAgfQogfQogCit0eXBlZGVmIEpTVmFsdWUgKiheUmVzb2x2ZUJs
b2NrKShKU0NvbnRleHQgKiwgSlNWYWx1ZSAqLCBKU1NjcmlwdCAqKTsKK3R5cGVkZWYgdm9pZCAo
XkZldGNoQmxvY2spKEpTQ29udGV4dCAqLCBKU1ZhbHVlICosIEpTVmFsdWUgKiwgSlNWYWx1ZSAq
KTsKKworQGludGVyZmFjZSBKU0NvbnRleHRGZXRjaERlbGVnYXRlIDogSlNDb250ZXh0IDxKU01v
ZHVsZUxvYWRlckRlbGVnYXRlPgorCisrIChpbnN0YW5jZXR5cGUpY29udGV4dFdpdGhCbG9ja0Zv
ckZldGNoOihGZXRjaEJsb2NrKWJsb2NrOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBKU0Nv
bnRleHRGZXRjaERlbGVnYXRlIHsKKyAgICBGZXRjaEJsb2NrIG1fZmV0Y2hCbG9jazsKK30KKwor
KyAoaW5zdGFuY2V0eXBlKWNvbnRleHRXaXRoQmxvY2tGb3JGZXRjaDooRmV0Y2hCbG9jaylibG9j
aworeworICAgIGF1dG8gKnJlc3VsdCA9IFtbSlNDb250ZXh0RmV0Y2hEZWxlZ2F0ZSBhbGxvY10g
aW5pdF07CisgICAgcmVzdWx0LT5tX2ZldGNoQmxvY2sgPSBibG9jazsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCistICh2b2lkKWNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQgZmV0Y2hNb2R1
bGVGb3JJZGVudGlmaWVyOihKU1ZhbHVlICopaWRlbnRpZmllciB3aXRoUmVzb2x2ZUhhbmRsZXI6
KEpTVmFsdWUgKilyZXNvbHZlIGFuZFJlamVjdEhhbmRsZXI6KEpTVmFsdWUgKilyZWplY3QKK3sK
KyAgICBtX2ZldGNoQmxvY2soY29udGV4dCwgaWRlbnRpZmllciwgcmVzb2x2ZSwgcmVqZWN0KTsK
K30KKworQGVuZAorCitzdGF0aWMgdm9pZCBjaGVja01vZHVsZUNvZGVSYW4oSlNDb250ZXh0ICpj
b250ZXh0LCBKU1ZhbHVlICpwcm9taXNlLCBKU1ZhbHVlICpleHBlY3RlZCkKK3sKKyAgICBfX2Js
b2NrIEJPT0wgcHJvbWlzZVdhc1Jlc29sdmVkID0gZmFsc2U7CisgICAgW3Byb21pc2UgaW52b2tl
TWV0aG9kOkAidGhlbiIgd2l0aEFyZ3VtZW50czpAW14oSlNWYWx1ZSAqZXhwb3J0VmFsdWUpIHsK
KyAgICAgICAgcHJvbWlzZVdhc1Jlc29sdmVkID0gdHJ1ZTsKKyAgICAgICAgY2hlY2tSZXN1bHQo
QCJtb2R1bGUgZXhwb3J0ZWQgdmFsdWUgJ2V4cCcgaXMgbnVsbCIsIFtleHBvcnRWYWx1ZVtAImV4
cCJdIGlzRXF1YWxUb09iamVjdDpleHBlY3RlZF0pOworICAgICAgICBjaGVja1Jlc3VsdChAInJh
biBpcyAlQCIsIFtjb250ZXh0W0AicmFuIl0gaXNFcXVhbFRvT2JqZWN0OmV4cGVjdGVkXSk7Cisg
ICAgfSwgXihKU1ZhbHVlICplcnJvcikgeworICAgICAgICBOU0xvZyhAIiVAIiwgW2Vycm9yIHRv
U3RyaW5nXSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAibW9kdWxlIGdyYXBoIHdhcyByZXNvbHZl
ZCBhcyBleHBlY3RlZCIsIE5PKTsKKyAgICB9XV07CisgICAgY2hlY2tSZXN1bHQoQCJQcm9taXNl
IHdhcyByZXNvbHZlZCIsIHByb21pc2VXYXNSZXNvbHZlZCk7Cit9CisKK3N0YXRpYyB2b2lkIGNo
ZWNrTW9kdWxlV2FzUmVqZWN0ZWQoSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICpwcm9taXNl
KQoreworICAgIF9fYmxvY2sgQk9PTCBwcm9taXNlV2FzUmVqZWN0ZWQgPSBmYWxzZTsKKyAgICBb
cHJvbWlzZSBpbnZva2VNZXRob2Q6QCJ0aGVuIiB3aXRoQXJndW1lbnRzOkBbXigpIHsKKyAgICAg
ICAgY2hlY2tSZXN1bHQoQCJtb2R1bGUgd2FzIHJlamVjdGVkIGFzIGV4cGVjdGVkIiwgTk8pOwor
ICAgIH0sIF4oSlNWYWx1ZSAqZXJyb3IpIHsKKyAgICAgICAgcHJvbWlzZVdhc1JlamVjdGVkID0g
dHJ1ZTsKKyAgICAgICAgTlNMb2coQCIlQCIsIFtlcnJvciB0b1N0cmluZ10pOworICAgICAgICBj
aGVja1Jlc3VsdChAIm1vZHVsZSBncmFwaCB3YXMgcmVqZWN0ZWQgd2l0aCBlcnJvciIsICFbZXJy
b3IgaXNFcXVhbFdpdGhUeXBlQ29lcmNpb25Ub09iamVjdDpbSlNWYWx1ZSB2YWx1ZVdpdGhOdWxs
SW5Db250ZXh0OmNvbnRleHRdXSk7CisgICAgfV1dOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmV0
Y2goKQoreworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250ZXh0ID0g
W0pTQ29udGV4dEZldGNoRGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl4oSlNDb250
ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICppZGVudGlmaWVyLCBKU1ZhbHVlICpyZXNvbHZlLCBKU1Zh
bHVlICpyZWplY3QpIHsKKyAgICAgICAgICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmpl
Y3Q6QCJmaWxlOi8vL2RpcmVjdG9yeS9iYXIuanMiXSkKKyAgICAgICAgICAgICAgICBbcmVzb2x2
ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNlOkAiaW1wb3J0
IFwiLi4vZm9vLmpzXCI7IGV4cG9ydCBsZXQgZXhwID0gbnVsbDsiIGluVmlydHVhbE1hY2hpbmU6
W2NvbnRleHQgdmlydHVhbE1hY2hpbmVdXV1dOworICAgICAgICAgICAgZWxzZSBpZiAoW2lkZW50
aWZpZXIgaXNFcXVhbFRvT2JqZWN0OkAiZmlsZTovLy9mb28uanMiXSkKKyAgICAgICAgICAgICAg
ICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNl
OkAiZ2xvYmFsVGhpcy5yYW4gPSBudWxsOyIgaW5WaXJ0dWFsTWFjaGluZTpbY29udGV4dCB2aXJ0
dWFsTWFjaGluZV1dXV07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgW3JlamVj
dCBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3Nh
Z2U6QCJXZWlyZCBwYXRoIiBpbkNvbnRleHQ6Y29udGV4dF1dXTsKKyAgICAgICAgfV07CisgICAg
ICAgIGNvbnRleHQubW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBjb250ZXh0OworICAgICAgICBKU1Zh
bHVlICpwcm9taXNlID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy4vYmFyLmpz
Jyk7IiB3aXRoU291cmNlVVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvZGlyZWN0b3J5IiBp
c0RpcmVjdG9yeTpZRVNdXTsKKyAgICAgICAgSlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVlIHZhbHVl
V2l0aE51bGxJbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihj
b250ZXh0LCBwcm9taXNlLCBudWxsKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGZXRj
aFdpdGhUd29DeWNsZSgpCit7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIGF1dG8g
KmNvbnRleHQgPSBbSlNDb250ZXh0RmV0Y2hEZWxlZ2F0ZSBjb250ZXh0V2l0aEJsb2NrRm9yRmV0
Y2g6XihKU0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWUgKmlkZW50aWZpZXIsIEpTVmFsdWUgKnJl
c29sdmUsIEpTVmFsdWUgKnJlamVjdCkgeworICAgICAgICAgICAgaWYgKFtpZGVudGlmaWVyIGlz
RXF1YWxUb09iamVjdDpAImZpbGU6Ly8vZGlyZWN0b3J5L2Jhci5qcyJdKQorICAgICAgICAgICAg
ICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlwdFdpdGhTb3Vy
Y2U6QCJpbXBvcnQgeyBuIH0gZnJvbSBcIi4uL2Zvby5qc1wiOyBleHBvcnQgbGV0IGV4cCA9IG47
IiBpblZpcnR1YWxNYWNoaW5lOltjb250ZXh0IHZpcnR1YWxNYWNoaW5lXV1dXTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZpbGU6Ly8vZm9vLmpz
Il0pCisgICAgICAgICAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3Jp
cHQgc2NyaXB0V2l0aFNvdXJjZTpAImltcG9ydCBcImRpcmVjdG9yeS9iYXIuanNcIjsgZ2xvYmFs
VGhpcy5yYW4gPSBudWxsOyBleHBvcnQgbGV0IG4gPSBudWxsOyIgaW5WaXJ0dWFsTWFjaGluZTpb
Y29udGV4dCB2aXJ0dWFsTWFjaGluZV1dXV07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgW3JlamVjdCBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vy
cm9yRnJvbU1lc3NhZ2U6QCJXZWlyZCBwYXRoIiBpbkNvbnRleHQ6Y29udGV4dF1dXTsKKyAgICAg
ICAgfV07CisgICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBjb250ZXh0Owor
ICAgICAgICBKU1ZhbHVlICpwcm9taXNlID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBv
cnQoJy4vYmFyLmpzJyk7IiB3aXRoU291cmNlVVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIv
ZGlyZWN0b3J5IiBpc0RpcmVjdG9yeTpZRVNdXTsKKyAgICAgICAgSlNWYWx1ZSAqbnVsbCA9IFtK
U1ZhbHVlIHZhbHVlV2l0aE51bGxJbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNoZWNrTW9k
dWxlQ29kZVJhbihjb250ZXh0LCBwcm9taXNlLCBudWxsKTsKKyAgICB9Cit9CisKKworc3RhdGlj
IHZvaWQgdGVzdEZldGNoV2l0aFRocmVlQ3ljbGUoKQoreworICAgIEBhdXRvcmVsZWFzZXBvb2wg
eworICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZldGNoRGVsZWdhdGUgY29udGV4
dFdpdGhCbG9ja0ZvckZldGNoOl4oSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICppZGVudGlm
aWVyLCBKU1ZhbHVlICpyZXNvbHZlLCBKU1ZhbHVlICpyZWplY3QpIHsKKyAgICAgICAgICAgIGlm
IChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL2RpcmVjdG9yeS9iYXIuanMi
XSkKKyAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1Njcmlw
dCBzY3JpcHRXaXRoU291cmNlOkAiaW1wb3J0IHsgbiB9IGZyb20gXCIuLi9mb28uanNcIjsgZXhw
b3J0IGxldCBmb28gPSBuOyIgaW5WaXJ0dWFsTWFjaGluZTpbY29udGV4dCB2aXJ0dWFsTWFjaGlu
ZV1dXV07CisgICAgICAgICAgICBlbHNlIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6
QCJmaWxlOi8vL2Zvby5qcyJdKQorICAgICAgICAgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJn
dW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlwdFdpdGhTb3VyY2U6QCJpbXBvcnQgXCJvdGhlckRpcmVj
dG9yeS9iYXouanNcIjsgZXhwb3J0IGxldCBuID0gbnVsbDsiIGluVmlydHVhbE1hY2hpbmU6W2Nv
bnRleHQgdmlydHVhbE1hY2hpbmVdXV1dOworICAgICAgICAgICAgZWxzZSBpZiAoW2lkZW50aWZp
ZXIgaXNFcXVhbFRvT2JqZWN0OkAiZmlsZTovLy9vdGhlckRpcmVjdG9yeS9iYXouanMiXSkKKyAg
ICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3Jp
cHRXaXRoU291cmNlOkAiaW1wb3J0IHsgZm9vIH0gZnJvbSBcIi4uL2RpcmVjdG9yeS9iYXIuanNc
IjsgZ2xvYmFsVGhpcy5yYW4gPSBudWxsOyBleHBvcnQgbGV0IGV4cCA9IGZvbzsiIGluVmlydHVh
bE1hY2hpbmU6W2NvbnRleHQgdmlydHVhbE1hY2hpbmVdXV1dOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIFtyZWplY3QgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNWYWx1ZSB2YWx1
ZVdpdGhOZXdFcnJvckZyb21NZXNzYWdlOkAiV2VpcmQgcGF0aCIgaW5Db250ZXh0OmNvbnRleHRd
XV07CisgICAgICAgIH1dOworICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0g
Y29udGV4dDsKKyAgICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2Ny
aXB0OkAiaW1wb3J0KCcuLi9vdGhlckRpcmVjdG9yeS9iYXouanMnKTsiIHdpdGhTb3VyY2VVUkw6
W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpAIi9kaXJlY3RvcnkiIGlzRGlyZWN0b3J5OllFU11dOwor
ICAgICAgICBKU1ZhbHVlICpudWxsID0gW0pTVmFsdWUgdmFsdWVXaXRoTnVsbEluQ29udGV4dDpj
b250ZXh0XTsKKyAgICAgICAgY2hlY2tNb2R1bGVDb2RlUmFuKGNvbnRleHQsIHByb21pc2UsIG51
bGwpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGVzdExvYWRlclJlc29sdmVzQWJzb2x1dGVT
Y3JpcHRVUkwoKQoreworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250
ZXh0ID0gW0pTQ29udGV4dEZldGNoRGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl4o
SlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICppZGVudGlmaWVyLCBKU1ZhbHVlICpyZXNvbHZl
LCBKU1ZhbHVlICpyZWplY3QpIHsKKyAgICAgICAgICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFs
VG9PYmplY3Q6QCJmaWxlOi8vL2RpcmVjdG9yeS9iYXIuanMiXSkKKyAgICAgICAgICAgICAgICBb
cmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNlOkAi
ZXhwb3J0IGxldCBleHAgPSBudWxsOyBnbG9iYWxUaGlzLnJhbiA9IG51bGw7IiBpblZpcnR1YWxN
YWNoaW5lOltjb250ZXh0IHZpcnR1YWxNYWNoaW5lXV1dXTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBbcmVqZWN0IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTVmFsdWUgdmFsdWVX
aXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpAIldlaXJkIHBhdGgiIGluQ29udGV4dDpjb250ZXh0XV1d
OworICAgICAgICB9XTsKKyAgICAgICAgY29udGV4dC5tb2R1bGVMb2FkZXJEZWxlZ2F0ZSA9IGNv
bnRleHQ7CisgICAgICAgIEpTVmFsdWUgKnByb21pc2UgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlw
dDpAImltcG9ydCgnL2RpcmVjdG9yeS9iYXIuanMnKTsiXTsKKyAgICAgICAgSlNWYWx1ZSAqbnVs
bCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE51bGxJbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNo
ZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCBwcm9taXNlLCBudWxsKTsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RMb2FkZXJSZWplY3RzTmlsU2NyaXB0VVJMKCkKK3sKKyAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKKyAgICAgICAgYXV0byAqY29udGV4dCA9IFtKU0NvbnRleHRGZXRjaERlbGVn
YXRlIGNvbnRleHRXaXRoQmxvY2tGb3JGZXRjaDpeKEpTQ29udGV4dCAqLCBKU1ZhbHVlICosIEpT
VmFsdWUgKiwgSlNWYWx1ZSAqKSB7CisgICAgICAgICAgICBjaGVja1Jlc3VsdChAIkNvZGUgaXMg
bm90IHJ1biIsIE5PKTsKKyAgICAgICAgfV07CisgICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVy
RGVsZWdhdGUgPSBjb250ZXh0OworICAgICAgICBKU1ZhbHVlICpwcm9taXNlID0gW2NvbnRleHQg
ZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy4uL290aGVyRGlyZWN0b3J5L2Jhei5qcycpOyJdOwor
ICAgICAgICBjaGVja01vZHVsZVdhc1JlamVjdGVkKGNvbnRleHQsIHByb21pc2UpOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgdGVzdExvYWRlclJlamVjdHNGYWlsZWRGZXRjaCgpCit7CisgICAg
QGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0RmV0
Y2hEZWxlZ2F0ZSBjb250ZXh0V2l0aEJsb2NrRm9yRmV0Y2g6XihKU0NvbnRleHQgKmNvbnRleHQs
IEpTVmFsdWUgKiwgSlNWYWx1ZSAqLCBKU1ZhbHVlICpyZWplY3QpIHsKKyAgICAgICAgICAgIFty
ZWplY3QgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZyb21N
ZXNzYWdlOkAiTm9wZSIgaW5Db250ZXh0OmNvbnRleHRdXV07CisgICAgICAgIH1dOworICAgICAg
ICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAgICAgSlNWYWx1
ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0KCcvb3RoZXJEaXJl
Y3RvcnkvYmF6LmpzJyk7Il07CisgICAgICAgIGNoZWNrTW9kdWxlV2FzUmVqZWN0ZWQoY29udGV4
dCwgcHJvbWlzZSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB0ZXN0SW1wb3J0TW9kdWxlVHdp
Y2UoKQoreworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250ZXh0ID0g
W0pTQ29udGV4dEZldGNoRGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl4oSlNDb250
ZXh0ICogY29udGV4dCwgSlNWYWx1ZSAqLCBKU1ZhbHVlICpyZXNvbHZlLCBKU1ZhbHVlICopIHsK
KyAgICAgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlw
dFdpdGhTb3VyY2U6QCJyYW4rKzsgZXhwb3J0IGxldCBleHAgPSAxOyIgaW5WaXJ0dWFsTWFjaGlu
ZTpbY29udGV4dCB2aXJ0dWFsTWFjaGluZV1dXV07CisgICAgICAgIH1dOworICAgICAgICBjb250
ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAgICAgY29udGV4dFtAInJh
biJdID0gQCgwKTsKKyAgICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRl
U2NyaXB0OkAiaW1wb3J0KCcvYmF6LmpzJyk7Il07CisgICAgICAgIEpTVmFsdWUgKnByb21pc2Uy
ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy9iYXouanMnKTsiXTsKKyAgICAg
ICAgSlNWYWx1ZSAqb25lID0gW0pTVmFsdWUgdmFsdWVXaXRoSW50MzI6MSBpbkNvbnRleHQ6Y29u
dGV4dF07CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCBwcm9taXNlLCBvbmUp
OworICAgICAgICBjaGVja01vZHVsZUNvZGVSYW4oY29udGV4dCwgcHJvbWlzZTIsIG9uZSk7Cisg
ICAgfQorfQorCitAaW50ZXJmYWNlIEpTQ29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0ZSA6IEpTQ29u
dGV4dCA8SlNNb2R1bGVMb2FkZXJEZWxlZ2F0ZT4KKworKyAoaW5zdGFuY2V0eXBlKW5ld0NvbnRl
eHQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEpTQ29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0
ZSB7Cit9CisKKysgKGluc3RhbmNldHlwZSluZXdDb250ZXh0Cit7CisgICAgYXV0byAqcmVzdWx0
ID0gW1tKU0NvbnRleHRGaWxlTG9hZGVyRGVsZWdhdGUgYWxsb2NdIGluaXRdOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3N0YXRpYyBOU1VSTCAqcmVzb2x2ZVBhdGhUb1NjcmlwdHMoKQorewor
ICAgIE5TU3RyaW5nICphcmcwID0gTlNQcm9jZXNzSW5mby5wcm9jZXNzSW5mby5hcmd1bWVudHNb
MF07CisgICAgTlNVUkwgKmJhc2U7CisgICAgaWYgKFthcmcwIGhhc1ByZWZpeDpAIi8iXSkKKyAg
ICAgICAgYmFzZSA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6YXJnMCBpc0RpcmVjdG9yeTpOT107
CisgICAgZWxzZSB7CisgICAgICAgIGNvbnN0IHNpemVfdCBtYXhMZW5ndGggPSAxMDAwMDsKKyAg
ICAgICAgY2hhciBjd2RbbWF4TGVuZ3RoXTsKKyAgICAgICAgaWYgKCFnZXRjd2QoY3dkLCBtYXhM
ZW5ndGgpKSB7CisgICAgICAgICAgICBOU0xvZyhAImdldGN3ZCBlcnJvcmVkIHdpdGggY29kZTog
JXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQor
ICAgICAgICBOU1VSTCAqY3dkVVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIiVzIiwgY3dkXV07CisgICAgICAgIGJhc2UgPSBbTlNVUkwgZmls
ZVVSTFdpdGhQYXRoOmFyZzAgaXNEaXJlY3Rvcnk6Tk8gcmVsYXRpdmVUb1VSTDpjd2RVUkxdOwor
ICAgIH0KKyAgICByZXR1cm4gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpAIi4vdGVzdGFwaVNjcmlw
dHMvIiBpc0RpcmVjdG9yeTpZRVMgcmVsYXRpdmVUb1VSTDpiYXNlXTsKK30KKworLSAodm9pZClj
b250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IGZldGNoTW9kdWxlRm9ySWRlbnRpZmllcjooSlNW
YWx1ZSAqKWlkZW50aWZpZXIgd2l0aFJlc29sdmVIYW5kbGVyOihKU1ZhbHVlICopcmVzb2x2ZSBh
bmRSZWplY3RIYW5kbGVyOihKU1ZhbHVlICopcmVqZWN0Cit7CisgICAgTlNVUkwgKmZpbGVQYXRo
ID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W2lkZW50aWZpZXIgdG9TdHJpbmddXTsKKyAgICBhdXRv
ICpzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0RnJvbVVURjhGaWxlOmZpbGVQYXRoIGluVmlydHVh
bE1hY2hpbmU6W2NvbnRleHQgdmlydHVhbE1hY2hpbmVdIHdpdGhDb2RlU2lnbmluZzpuaWwgYW5k
Qnl0ZWNvZGVDYWNoZTpuaWxdOworICAgIGlmIChzY3JpcHQpCisgICAgICAgIFtyZXNvbHZlIGNh
bGxXaXRoQXJndW1lbnRzOkBbc2NyaXB0XV07CisgICAgZWxzZQorICAgICAgICBbcmVqZWN0IGNh
bGxXaXRoQXJndW1lbnRzOkBbW0pTVmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpA
IlVuYWJsZSB0byBjcmVhdGUgU2NyaXB0IiBpbkNvbnRleHQ6Y29udGV4dF1dXTsKK30KKworQGVu
ZAorCitzdGF0aWMgdm9pZCB0ZXN0TG9hZEJhc2ljRmlsZSgpCit7CisgICAgQGF1dG9yZWxlYXNl
cG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0RmlsZUxvYWRlckRlbGVn
YXRlIG5ld0NvbnRleHRdOworICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0g
Y29udGV4dDsKKyAgICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2Ny
aXB0OkAiaW1wb3J0KCcuL2Jhc2ljLmpzJyk7IiB3aXRoU291cmNlVVJMOnJlc29sdmVQYXRoVG9T
Y3JpcHRzKCldOworICAgICAgICBKU1ZhbHVlICpudWxsID0gW0pTVmFsdWUgdmFsdWVXaXRoTnVs
bEluQ29udGV4dDpjb250ZXh0XTsKKyAgICAgICAgY2hlY2tNb2R1bGVDb2RlUmFuKGNvbnRleHQs
IHByb21pc2UsIG51bGwpOworICAgIH0KK30KKwogdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSgpCiB7
CiAgICAgTlNMb2coQCJUZXN0aW5nIE9iamVjdGl2ZS1DIEFQSSIpOworCiAgICAgY2hlY2tOZWdh
dGl2ZU5TSW50ZWdlcnMoKTsKICAgICBydW5KSVRUaHJlYWRMaW1pdFRlc3RzKCk7CiAKKyAgICB0
ZXN0TG9hZGVyUmVzb2x2ZXNBYnNvbHV0ZVNjcmlwdFVSTCgpOworICAgIHRlc3RGZXRjaCgpOwor
ICAgIHRlc3RGZXRjaFdpdGhUd29DeWNsZSgpOworICAgIHRlc3RGZXRjaFdpdGhUaHJlZUN5Y2xl
KCk7CisgICAgdGVzdEltcG9ydE1vZHVsZVR3aWNlKCk7CisKKyAgICB0ZXN0TG9hZGVyUmVqZWN0
c05pbFNjcmlwdFVSTCgpOworICAgIHRlc3RMb2FkZXJSZWplY3RzRmFpbGVkRmV0Y2goKTsKKwor
ICAgIC8vIEZpbGUgbG9hZGluZworICAgIHRlc3RMb2FkQmFzaWNGaWxlKCk7CisKICAgICBwcm9t
aXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlc29sdmVFYWdlcik7CiAgICAgcHJvbWlzZVdp
dGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZWplY3RFYWdlcik7CiAgICAgcHJvbWlzZVdpdGhFeGVj
dXRvcihSZXNvbHV0aW9uOjpSZXNvbHZlTGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzL2Jhc2ljLmpzIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy9iYXNpYy5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
NTI4YzQ5Y2MyYTc0ZTY2OTkyNjZiMmM4YTJjN2QxMGRhNzc3MjM4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy9iYXNpYy5q
cwpAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKK2V4cG9ydCBsZXQgZXhwID0gbnVsbDsKK2dsb2JhbFRoaXMucmFuID0gbnVsbDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjNlZjFjNDIzODBiM2NlZjJmMDBmYWM2
NThlOTJlOWQ2ZTc5OWYwMy4uNjM4YmQ3MTBlNjgzZTE2N2NhZTkxYzUwM2I0MThlMjRhY2ZmMmUy
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwNTcsNiArMTA1Nyw4IEBACiAJ
CTUzOUZCOEJBMUM5OURBN0MwMDk0MEZBMSAvKiBKU0FycmF5SW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM5RkI4QjkxQzk5REE3QzAwOTQw
RkExIC8qIEpTQXJyYXlJbmxpbmVzLmggKi87IH07CiAJCTUzQjRCRDEyMUY2OEIzMjUwMEQyQkVB
MyAvKiBXYXNtT3BzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzNCMTVERTFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzQjYwMUVDMjAzNEI4QzUwMDZC
RTY2NyAvKiBKU0Nhc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzQjYwMUVCMjAzNEI4QzUwMDZCRTY2NyAvKiBKU0Nhc3QuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1M0MzRDVFNTIxRUNFNzcyMDA4
N0ZERkMgLyogYmFzaWMuanMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0MzRDVFNDIxRUNFNkNFMDA4N0ZERkMgLyogYmFzaWMuanMg
Ki87IH07CisJCTUzQzRGNjZCMjFCMUE0MDkwMDJGRDAwOSAvKiBKU0FQSUdsb2JhbE9iamVjdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNDNEY2NkEy
MUIxQTQwOTAwMkZEMDA5IC8qIEpTQVBJR2xvYmFsT2JqZWN0LmggKi87IH07CiAJCTUzQzZGRUVG
MUU4QURGQTkwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0M2RkVFRTFFOEFERkE5MDBCMTg0MjUgLyog
V2FzbU9wY29kZU9yaWdpbi5oICovOyB9OwogCQk1M0NBNzMwQTFFQTUzM0Q4MDA3NjA0OUQgLyog
V2FzbUJCUVBsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzQ0E3MzA4MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxhbi5oICovOyB9OwogCQk1
M0Q0NDREQzFEQUYwOEFCMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Q0NDREQjFEQUYwOEFCMDBC
OTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmggKi87IH07CkBAIC0xMDY1LDYgKzEwNjcsOCBA
QAogCQk1M0U5RTBBQzFFQUU4M0RGMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0U5RTBBQTFFQUU4
M0RFMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmggKi87IH07CiAJCTUzRTlFMEFGMUVB
RUM0NTcwMEZFRTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRTlFMEFFMUVBRUM0NTcwMEZFRTI1MSAvKiBXYXNt
VGllclVwQ291bnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1M0VBRkUyRjIwOERGQUI0MDA3RDUyNEIgLyogdGVzdGFwaS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzFENEUxOTFGNTlDREQyMDBF
QzgzNkMgLyogdGVzdGFwaS5jcHAgKi87IH07CisJCTUzRUUwMUI2MjE4RjY5MTYwMEFEMUY4RCAv
KiBKU1NjcmlwdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTNFRTAxQjUyMThGNjkwRjAwQUQxRjhEIC8qIEpTU2NyaXB0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTNFRTAxQjgyMThGN0VGRjAwQUQx
RjhEIC8qIEpTU2NyaXB0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzRUUwMUI3MjE4RjdFRkYwMEFEMUY4RCAvKiBKU1NjcmlwdEludGVy
bmFsLmggKi87IH07CiAJCTUzRjExRjQxMjA5MTM4RDcwMEU0MTFBNyAvKiBKU0ltbXV0YWJsZUJ1
dHRlcmZseS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTNGMTFGNDAyMDkxMzhENzAwRTQxMUE3IC8qIEpTSW1tdXRhYmxlQnV0dGVyZmx5LmggKi87IH07
CiAJCTUzRjQwRTg1MUQ1OEY5NzcwMDk5QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTg0MUQ1OEY5NzcwMDk5
QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCAqLzsgfTsKIAkJNTNGNDBFOEIxRDU5MDFCQjAwOTlBMUI2
IC8qIFdhc21GdW5jdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTNGNDBFOEExRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBh
cnNlci5oICovOyB9OwpAQCAtMTIxOSw3ICsxMjIzLDcgQEAKIAkJODZFM0M2MTUxNjdCQUJENzAw
NkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjBGMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZpcnR1YWxN
YWNoaW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9Owog
CQk4NkUzQzYxNzE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjA5MTY3QkFCODcw
MDZENzYwQSAvKiBKU0NvbnRleHRJbnRlcm5hbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2RTNDNjE5MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dy
YXBwZXJNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg2RTNDNjBDMTY3QkFCODcwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAuaCAqLzsgfTsKLQkJODZF
M0M2MUIxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MEUxNjdCQUI4NzAwNkQ3NjBB
IC8qIEpTVmFsdWVJbnRlcm5hbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTg2RTNDNjFCMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZhbHVlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTND
NjBFMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZhbHVlSW50ZXJuYWwuaCAqLzsgfTsKIAkJODZFM0M2
MUQxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MTExNjdCQUI4NzAw
NkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2RUM5REM1MTMyOERGODIwMDJCMkFENyAv
KiBERkdCeXRlQ29kZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODZFQzlEQjUxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2Vy
LmggKi87IH07CiAJCTg2RUM5REM2MTMyOERGODIwMDJCMkFENyAvKiBERkdHZW5lcmF0aW9uSW5m
by5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQzlE
QjYxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVyYXRpb25JbmZvLmggKi87IH07CkBAIC0yMDAz
LDkgKzIwMDcsMTAgQEAKIAkJNURCQjE1MTExMzFEMEIxMzAwNTZBRDM2IC8qIENvcHkgU3VwcG9y
dCBTY3JpcHQgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlOwogCQkJYnVp
bGRBY3Rpb25NYXNrID0gMTI7Ci0JCQlkc3RQYXRoID0gIiI7CisJCQlkc3RQYXRoID0gdGVzdGFw
aVNjcmlwdHM7CiAJCQlkc3RTdWJmb2xkZXJTcGVjID0gMTY7CiAJCQlmaWxlcyA9ICgKKwkJCQk1
M0MzRDVFNTIxRUNFNzcyMDA4N0ZERkMgLyogYmFzaWMuanMgaW4gQ29weSBTdXBwb3J0IFNjcmlw
dCAqLywKIAkJCQlGRUNCOEIyQTFEMjVDQjVBMDA2RjI0NjMgLyogdGVzdGFwaS1mdW5jdGlvbi1v
dmVycmlkZXMuanMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLywKIAkJCQk1REJCMTUxQjEzMUQw
QjMxMDA1NkFEMzYgLyogdGVzdGFwaS5qcyBpbiBDb3B5IFN1cHBvcnQgU2NyaXB0ICovLAogCQkJ
KTsKQEAgLTM1NTcsNiArMzU2Miw5IEBACiAJCTUzQjBCRTM1MUU1NjFCMDkwMEE4RkMyOSAvKiBQ
cm94eWFibGVBY2Nlc3NDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFByb3h5YWJsZUFjY2Vzc0Nhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1M0IwQkUzNzFFNTYxQjI0MDBBOEZDMjkgLyogSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRyaW5zaWNHZXR0ZXJB
Y2Nlc3NDYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNCNjAxRUIyMDM0
QjhDNTAwNkJFNjY3IC8qIEpTQ2FzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Nhc3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNDM0Q1RTQyMUVDRTZDRTAwODdGREZDIC8qIGJhc2lj
LmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gYmFzaWMuanM7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzQzRGNjZBMjFCMUE0MDkwMDJGRDAwOSAvKiBK
U0FQSUdsb2JhbE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0FQSUdsb2JhbE9iamVjdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0M0RjY2QzIxQjFBN0NBMDAyRkQwMDkgLyog
SlNBUElHbG9iYWxPYmplY3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU0FQSUdsb2JhbE9i
amVjdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNDNkZFRUUxRThBREZBOTAw
QjE4NDI1IC8qIFdhc21PcGNvZGVPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2FzbU9wY29kZU9yaWdpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
M0M2RkVGMDFFOEFGRTBDMDBCMTg0MjUgLyogV2FzbU9wY29kZU9yaWdpbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtT3Bjb2RlT3JpZ2luLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNDQTczMDcxRUE1MzNEODAwNzYwNDlEIC8qIFdhc21C
QlFQbGFuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21CQlFQ
bGFuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1NjksNiArMzU3Nyw5IEBA
CiAJCTUzRTlFMEE5MUVBRTgzREUwMEZFRTI1MSAvKiBXYXNtTWFjaGluZVRocmVhZHMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbU1hY2hpbmVUaHJlYWRzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFOUUwQUExRUFFODNERTAwRkVFMjUx
IC8qIFdhc21NYWNoaW5lVGhyZWFkcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXYXNtTWFjaGluZVRocmVhZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNF
OUUwQUUxRUFFQzQ1NzAwRkVFMjUxIC8qIFdhc21UaWVyVXBDb3VudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtVGllclVwQ291bnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTNFRTAxQjQyMThGNjkwRTAwQUQxRjhEIC8qIEpTU2NyaXB0Lm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSlNTY3JpcHQubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRUUwMUI1MjE4RjY5MEYwMEFEMUY4RCAvKiBKU1Njcmlw
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NjcmlwdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1M0VFMDFCNzIxOEY3RUZGMDBBRDFGOEQgLyogSlNTY3Jp
cHRJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NjcmlwdElu
dGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjExRjQwMjA5MTM4RDcw
MEU0MTFBNyAvKiBKU0ltbXV0YWJsZUJ1dHRlcmZseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ltbXV0
YWJsZUJ1dHRlcmZseS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0YxMUY0MjIw
OTE3NDk4MDBFNDExQTcgLyogSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1M0YyNTZFMTFCODdFMjgwMDBCNEI3NjggLyogSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1MzgsNiAr
NTU0OSw3IEBACiAJCTE0MTIxMTAwMEE0ODc3MjYwMDQ4MDI1NSAvKiB0ZXN0cyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNTNDM0Q1RTMyMUVDRTY4RTAw
ODdGREZDIC8qIHRlc3RhcGlTY3JpcHRzICovLAogCQkJCUZFRjA0MDUwMUFBRTY2MkQwMEJEMjhC
MCAvKiBDb21wYXJlQW5kU3dhcFRlc3QuY3BwICovLAogCQkJCUZFRjA0MDUyMUFBRUM0RUQwMEJE
MjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3QuaCAqLywKIAkJCQlDMjlFQ0IwMjE4MDREMEVEMDBE
MkNCQjQgLyogQ3VycmVudFRoaXNJbnNpZGVCbG9ja0dldHRlclRlc3QuaCAqLywKQEAgLTU5Mzcs
NiArNTk0OSw4IEBACiAJCQkJNTM1MjlBNEIxQzQ1N0I3NTAwMEI0OUM2IC8qIEFQSVV0aWxzLmgg
Ki8sCiAJCQkJMUNBQThCNEEwRDMyQzM5QTAwNDFCQ0ZGIC8qIEphdmFTY3JpcHQuaCAqLywKIAkJ
CQkxQ0FBOEI0QjBEMzJDMzlBMDA0MUJDRkYgLyogSmF2YVNjcmlwdENvcmUuaCAqLywKKwkJCQk1
M0M0RjY2QTIxQjFBNDA5MDAyRkQwMDkgLyogSlNBUElHbG9iYWxPYmplY3QuaCAqLywKKwkJCQk1
M0M0RjY2QzIxQjFBN0NBMDAyRkQwMDkgLyogSlNBUElHbG9iYWxPYmplY3QubW0gKi8sCiAJCQkJ
QkMwODk0RDUwRkFGQkEyRDAwMDAxODY1IC8qIEpTQVBJVmFsdWVXcmFwcGVyLmNwcCAqLywKIAkJ
CQlCQzA4OTRENjBGQUZCQTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuaCAqLywKIAkJ
CQlDMkNGMzlDMDE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmggKi8sCkBA
IC01OTc4LDYgKzU5OTIsOSBAQAogCQkJCUE1NTJDMzdEMUFEREI4RkUwMDEzOTcyNiAvKiBKU1Jl
bW90ZUluc3BlY3Rvci5jcHAgKi8sCiAJCQkJQTU1MkMzN0UxQUREQjhGRTAwMTM5NzI2IC8qIEpT
UmVtb3RlSW5zcGVjdG9yLmggKi8sCiAJCQkJOTVDMThEM0UwQzkwRTdFRjAwRTcyRjczIC8qIEpT
UmV0YWluUHRyLmggKi8sCisJCQkJNTNFRTAxQjUyMThGNjkwRjAwQUQxRjhEIC8qIEpTU2NyaXB0
LmggKi8sCisJCQkJNTNFRTAxQjQyMThGNjkwRTAwQUQxRjhEIC8qIEpTU2NyaXB0Lm1tICovLAor
CQkJCTUzRUUwMUI3MjE4RjdFRkYwMEFEMUY4RCAvKiBKU1NjcmlwdEludGVybmFsLmggKi8sCiAJ
CQkJQTdDMEM0QUExNjdDMDhDRDAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmLmNwcCAqLywKIAkJCQlB
N0MwQzRBQjE2N0MwOENEMDAxNzAxMUQgLyogSlNTY3JpcHRSZWZQcml2YXRlLmggKi8sCiAJCQkJ
MTQ4MkI3NEMwQTQzMDMyODAwNTE3Q0ZDIC8qIEpTU3RyaW5nUmVmLmNwcCAqLywKQEAgLTYyNzgs
NiArNjI5NSwxNSBAQAogCQkJcGF0aCA9ICJ1bmlmaWVkLXNvdXJjZXMiOwogCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNTNDM0Q1RTMyMUVDRTY4RTAwODdGREZDIC8qIHRlc3Rh
cGlTY3JpcHRzICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJ
CQk1M0MzRDVFNDIxRUNFNkNFMDA4N0ZERkMgLyogYmFzaWMuanMgKi8sCisJCQkpOworCQkJbmFt
ZSA9IHRlc3RhcGlTY3JpcHRzOworCQkJcGF0aCA9IEFQSS90ZXN0cy90ZXN0YXBpU2NyaXB0czsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTY1MEZERjhEMDlEMEZDQTcwMDc2
OUU1NCAvKiBEZXJpdmVkIFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKApAQCAtOTE2Niw2ICs5MTkyLDcgQEAKIAkJCQkwRjVFRjkxRjE2ODc4RjdEMDAz
RTVDMjUgLyogSklUVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM3MTJFMzE3Q0Q4Nzkz
MDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFk
ZXJzICovLAogCQkJCURDMDE4NDE5MUQxMEMxODkwMDU3QjA1MyAvKiBKSVRXb3JrbGlzdC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNTNDNEY2NkIyMUIxQTQwOTAwMkZEMDA5IC8qIEpTQVBJR2xvYmFs
T2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDA0ODAxMzEwMjFBMUQ5MDA4RTdGMDEgLyog
SlNBUElWYWx1ZVdyYXBwZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQ0YzOUMyMTZFMTVBODEw
MERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDE3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0FycmF5LmggaW4gSGVhZGVycyAqLywKQEAgLTkyODYs
OCArOTMxMywxMCBAQAogCQkJCUJDMThDNDI2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1JldGFpblB0
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM0NjM4NzExRTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVu
TG9vcFRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDg3NEFFNjE1RUJERTRBMDAyRTM1ODcg
LyogSlNTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNFRTAxQjYyMThGNjkxNjAwQUQxRjhE
IC8qIEpTU2NyaXB0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MDY0MzM3REQ0QjA0MDJCQUYzNEE1
OTIgLyogSlNTY3JpcHRGZXRjaGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzIwMUMxRDFGOEU4
MjM2MDA3NkEwMzIgLyogSlNTY3JpcHRGZXRjaFBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTUzRUUwMUI4MjE4RjdFRkYwMEFEMUY4RCAvKiBKU1NjcmlwdEludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0MwQzRBQzE2ODEwMzAyMDAxNzAxMUQgLyogSlNTY3JpcHRSZWZQcml2
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQxMTE1N0YzMzJDMDA0QTRFN0QgLyogSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0RjgyODgxRTJG
RkRFMDAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCBp
biBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXND
b2NvYS50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCBh
Y2Y0ZmRiMDE2ZDg4NTcwOGE0MzAwOTA0ODA5YTI5NWM1NTBkYThlLi5hZjZmOWVmNWZjMzNlMDFm
MWRlZjY3M2YxMjY3OWIxZDc3Nzc2YjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlc0Nv
Y29hLnR4dApAQCAtMjEsNyArMjEsOSBAQAogLy8gQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgogLy8gVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCitBUEkvSlNBUElHbG9iYWxPYmplY3QubW0KIEFQSS9K
U0FQSVdyYXBwZXJPYmplY3QubW0KK0FQSS9KU1NjcmlwdC5tbQogQVBJL0pTQ29udGV4dC5tbQog
QVBJL0pTTWFuYWdlZFZhbHVlLm1tCiBBUEkvSlNSZW1vdGVJbnNwZWN0b3IuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvY29uZmlnLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvY29uZmlnLmgKaW5kZXggZTAyMzJjZjU3ODZhZjBmNDVkMGQxMzA4YjY3NjY4MDZjYWU0ZTAw
YS4uZTM2NDM5MGZkZDBmN2Q0NTc3ZGNlMWU0Njg4M2I3ZTEyN2VhNWMwYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2NvbmZpZy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9jb25maWcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAt
MjQsNiArMjQsNyBAQAogI2VuZGlmCiAKICNkZWZpbmUgSlNDX0FQSV9BVkFJTEFCTEUoLi4uKQor
I2RlZmluZSBKU0NfQ0xBU1NfQVZBSUxBQkxFKC4uLikgSlNfRVhQT1JUCiAvLyBVc2UgemVybyBz
aW5jZSBpdCB3aWxsIGJlIGxlc3MgdGhhbiBhbnkgcG9zc2libGUgdmVyc2lvbiBudW1iZXIuCiAj
ZGVmaW5lIEpTQ19NQUNfVkVSU0lPTl9UQkEgMAogI2RlZmluZSBKU0NfSU9TX1ZFUlNJT05fVEJB
IDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wb3N0cHJvY2Vzcy1oZWFkZXJz
LnNoIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bvc3Rwcm9jZXNzLWhlYWRlcnMuc2gKaW5kZXgg
ZmQyODgzNmRjOGJkZjFlNWY0OTM5ZjQyNTk5YTFjMDdmNGY5YmZjOS4uMTA3YWUxYmRhZWQ1OTc2
NmIxNzBiODQyMWQ3MDhlNGM3YjdmNjcwOSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Bvc3Rwcm9jZXNzLWhlYWRlcnMuc2gKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bv
c3Rwcm9jZXNzLWhlYWRlcnMuc2gKQEAgLTcyLDggKzcyLDggQEAgZnVuY3Rpb24gcmV3cml0ZV9o
ZWFkZXJzICgpIHsKICAgICAgICAgICAgIC1lIHMvSlNDX0lPU19WRVJTSU9OX1RCQS8ke0lPU19W
RVJTSU9OX05VTUJFUn0vZwogICAgICAgICAgICAgLWUgcy9KU0NfQVBJX0FWQUlMQUJMRS9BUElf
QVZBSUxBQkxFLwogICAgICAgICAgICAgLWUgcy9KU0NfQVBJX0RFUFJFQ0FURUQvQVBJX0RFUFJF
Q0FURUQvCi0gICAgICAgICAgICAtZSAicy9eSlNDX0NMQVNTX0FWQUlMQUJMRS9KU0NfRVhURVJO
IEFQSV9BVkFJTEFCTEUvIgotICAgICAgICAgICAgLWUgInMvXkpTQ19DTEFTU19ERVBSRUNBVEVE
L0pTQ19FWFRFUk4gQVBJX0RFUFJFQ0FURUQvIgorICAgICAgICAgICAgLWUgInMvXkpTQ19DTEFT
U19BVkFJTEFCTEUvSlNfRVhQT1JUIEFQSV9BVkFJTEFCTEUvIgorICAgICAgICAgICAgLWUgInMv
XkpTQ19DTEFTU19ERVBSRUNBVEVEL0pTX0VYUE9SVCBBUElfREVQUkVDQVRFRC8iCiAgICAgICAg
ICkKICAgICBlbHNlCiAgICAgICAgIFNFRF9PUFRJT05TKz0oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWxsRGF0YS5jcHAKaW5kZXggYzhkMDhlY2YwMjliNmExN2E1ZjgxN2VmZjc4
ZjEwMjRmNzhkN2NhMC4uMTM4M2E1NGM2ZjY5NmE2YWRjMmY0NWU4MWQzNzYzODEzNGNhN2IyZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYg
KzM0LDI0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBjb25zdCBBcmdMaXN0JiBhcmdzLCBjb25zdCBj
aGFyKiBlcnJvck1lc3NhZ2UpCit7CisgICAgcmV0dXJuIGNhbGwoZXhlYywgZnVuY3Rpb25PYmpl
Y3QsIGZ1bmN0aW9uT2JqZWN0LCBhcmdzLCBlcnJvck1lc3NhZ2UpOworfQorCitKU1ZhbHVlIGNh
bGwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncywgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKQorewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5
cGUgPSBnZXRDYWxsRGF0YSh2bSwgZnVuY3Rpb25PYmplY3QsIGNhbGxEYXRhKTsKKyAgICBpZiAo
Y2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJv
cihleGVjLCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgY2FsbChleGVjLCBmdW5jdGlvbk9iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlz
VmFsdWUsIGFyZ3MpKTsKK30KKwogSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxs
RGF0YSwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhbGxEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5o
CmluZGV4IGNiZjkxNjc2MWE1YjEwMzBmZTE1Y2I2Mjg1YWVhYzkxOWUwNWJkZmIuLjA4Zjc5ZGY0
ZDY3ODAxMzQ0NGE2YTYzOWFiNGZmYTQ5YWU3MWI1YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FsbERhdGEuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDYgKzY0LDEwIEBAIGVudW0gY2xhc3MgUHJvZmls
aW5nUmVhc29uIHsKICAgICBPdGhlcgogfTsKIAorLy8gQ29udmVuaWVuY2Ugd3JhcHBlciBzbyB5
b3UgZG9uJ3QgbmVlZCB0byBkZWFsIHdpdGggQ2FsbERhdGEgYW5kIENhbGxUeXBlIHVubGVzcyB5
b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGVtLgorSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjYWxs
KEV4ZWNTdGF0ZSosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIGNvbnN0IEFyZ0xpc3QmLCBjb25z
dCBjaGFyKiBlcnJvck1lc3NhZ2UpOworSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjYWxsKEV4
ZWNTdGF0ZSosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKTsKKwogSlNfRVhQT1JUX1BSSVZB
VEUgSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIENhbGxU
eXBlLCBjb25zdCBDYWxsRGF0YSYsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7
CiBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5j
dGlvbk9iamVjdCwgQ2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1ZSB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmLCBOYWtlZFB0cjxFeGNlcHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbik7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24u
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKaW5kZXgg
MTEwMmY2NmMzMjI2ZDc0NWNhZThjZmJhMjBmNmFmNDMzNzlhYmVkOS4uM2ZiNGFiOWQzYWEyZTM0
YmJjZDlhZGZmYTczMDdlNzA3NmE0NjFhZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tcGxldGlvbi5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAo
QykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0
IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAy
MDAzLTIwMTggQXBwbGUgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIElu
Yy4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xNjEsNiArMTYxLDE2IEBAIHN0YXRpYyBKU0lu
dGVybmFsUHJvbWlzZSogcmVqZWN0UHJvbWlzZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPCiAgICAgcmV0dXJuIGRlZmVycmVkLT5wcm9taXNlKCk7CiB9CiAKK0pTSW50
ZXJuYWxQcm9taXNlKiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBTeW1i
b2wqIG1vZHVsZUlkLCBKU1ZhbHVlIHBhcmFtZXRlcnMsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcikK
K3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
KyAgICBSRUxFQVNFX0FTU0VSVCh2bS5hdG9taWNTdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3Vy
cmVudCgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCF2bS5pc0Nv
bGxlY3RvckJ1c3lPbkN1cnJlbnRUaHJlYWQoKSk7CisKKyAgICByZXR1cm4gdm0udm1FbnRyeUds
b2JhbE9iamVjdChleGVjKS0+bW9kdWxlTG9hZGVyKCktPmxvYWRBbmRFdmFsdWF0ZU1vZHVsZShl
eGVjLCBtb2R1bGVJZCwgcGFyYW1ldGVycywgc2NyaXB0RmV0Y2hlcik7Cit9CisKIEpTSW50ZXJu
YWxQcm9taXNlKiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBT
dHJpbmcmIG1vZHVsZU5hbWUsIEpTVmFsdWUgcGFyYW1ldGVycywgSlNWYWx1ZSBzY3JpcHRGZXRj
aGVyKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21wbGV0aW9uLmgKaW5kZXggZGU0NDhhNDA4NDcxYzc0MmU2ZjIyODhmMWFhNzI0
ZTMzZjg5NzQ5Ny4uODI3ZTYxZjNjNjFkMGNiN2JiZTc1YTYxMjc3MTI0ZmIwZGE3MmFhZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaApAQCAtMSw3ICsxLDcg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNv
bSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMyw2ICszMyw3IEBAIGNsYXNz
IEV4ZWNTdGF0ZTsKIGNsYXNzIEpTT2JqZWN0OwogY2xhc3MgUGFyc2VyRXJyb3I7CiBjbGFzcyBT
b3VyY2VDb2RlOworY2xhc3MgU3ltYm9sOwogY2xhc3MgVk07CiBjbGFzcyBKU0ludGVybmFsUHJv
bWlzZTsKIApAQCAtNTcsNiArNTgsNyBAQCBpbmxpbmUgSlNWYWx1ZSBwcm9maWxlZEV2YWx1YXRl
KEV4ZWNTdGF0ZSogZXhlYywgUHJvZmlsaW5nUmVhc29uIHJlYXNvbiwgY29uc3QgUwogSlNfRVhQ
T1JUX1BSSVZBVEUgSlNWYWx1ZSBldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbihFeGVjU3RhdGUq
LCBjb25zdCBTb3VyY2VDb2RlJiwgSlNPYmplY3QqIHNjb3BlRXh0ZW5zaW9uLCBOYWtlZFB0cjxF
eGNlcHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbik7CiAKIC8vIExvYWQgdGhlIG1vZHVsZSBzb3Vy
Y2UgYW5kIGV2YWx1YXRlIGl0LgorSlNfRVhQT1JUX1BSSVZBVEUgSlNJbnRlcm5hbFByb21pc2Uq
IGxvYWRBbmRFdmFsdWF0ZU1vZHVsZShFeGVjU3RhdGUqLCBTeW1ib2wqIG1vZHVsZUlkLCBKU1Zh
bHVlIHBhcmFtZXRlcnMsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcik7CiBKU19FWFBPUlRfUFJJVkFU
RSBKU0ludGVybmFsUHJvbWlzZSogbG9hZEFuZEV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0ZSosIGNv
bnN0IFN0cmluZyYgbW9kdWxlTmFtZSwgSlNWYWx1ZSBwYXJhbWV0ZXJzLCBKU1ZhbHVlIHNjcmlw
dEZldGNoZXIpOwogSlNfRVhQT1JUX1BSSVZBVEUgSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRF
dmFsdWF0ZU1vZHVsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNWYWx1ZSBzY3Jp
cHRGZXRjaGVyKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDYXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaAppbmRleCBh
MzY5ZDQ4OTY2MjYyYWExYjYyOWYzNDNjYjI0ZjFmNzQ2M2FjNWY3Li40OTVjN2UxMWVmZmRmNTU3
YTkyMmI0MjY3MTdlOGUzZDRkYmFjZGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Nhc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Nhc3QuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xNjUsNCArMTY1LDEyIEBAIFRvIGpzRHluYW1pY0Nhc3QoVk0mIHZtLCBKU1ZhbHVl
IGZyb20pCiAgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8VG8+KHZtLCBmcm9tLmFzQ2VsbCgpKTsK
IH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVG8sIHR5cGVuYW1lIEZyb20+CitUbyBqc1NlY3VyZUNh
c3QoVk0mIHZtLCBGcm9tIGZyb20pCit7CisgICAgYXV0byogcmVzdWx0ID0ganNEeW5hbWljQ2Fz
dDxUbz4odm0sIGZyb20pOworICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04ocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5kZXggZTg2ZTgyY2Zj
NjYyMWMyYTM0OTMwNzliZjhhNDI5ZTY0ZjU4NTEwZC4uZTlkMmVhNThmYjQ3ZmI0M2I2NjFlZGVi
YWRjNDRiZTZhOWI1ZDEzOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dApAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5j
bHVkZSAiRXJyb3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkVycm9yUHJvdG90eXBlLmgiCisj
aW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgog
I2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiR2VuZXJhdG9yRnVuY3Rp
b25Db25zdHJ1Y3Rvci5oIgpAQCAtMTkyLDcgKzE5Myw3IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci0gICAgc3RhdGljIEpTVmFsdWUgY3JlYXRlUHJveHlQcm9wZXJ0eShWTSYgdm0sIEpTT2JqZWN0
KiBvYmplY3QpCitzdGF0aWMgSlNWYWx1ZSBjcmVhdGVQcm94eVByb3BlcnR5KFZNJiB2bSwgSlNP
YmplY3QqIG9iamVjdCkKIHsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsID0ganNDYXN0PEpT
R2xvYmFsT2JqZWN0Kj4ob2JqZWN0KTsKICAgICByZXR1cm4gUHJveHlDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlKHZtLCBQcm94eUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbCwgZ2xv
YmFsLT5mdW5jdGlvblByb3RvdHlwZSgpKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359050</attachid>
            <date>2019-01-14 10:28:41 -0800</date>
            <delta_ts>2019-01-14 10:51:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191121-20190114102840.patch</filename>
            <type>text/plain</type>
            <size>72190</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5NTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
NDM2OGRjOGIyMDI0NGNlNTNjODQyZTYxNjVkOTk2ZjViYWVhNjEwLi5iNzI4ZGY2NDg3MmYyZjI5
YzYyYmUxMDg2MDIwMWZkZmVhZDJkMWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4OCBAQAorMjAxOS0wMS0xNCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBKU0Mgc2hvdWxkIGhhdmUgYSBtb2R1bGUgbG9hZGVyIEFQSQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMTIxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
ZGRzIGEgbmV3IGRlbGVnYXRlIHRvIEpTQ29udHh0IHRoYXQgaXMgY2FsbGVkIHRvIGZldGNoCisg
ICAgICAgIGFueSByZXNvbHZlZCBtb2R1bGUuIFRoZSByZXNvbHV0aW9uIG9mIGEgbW9kdWxlIGlk
ZW50aWZpZXIgaXMgY29tcHV0ZWQKKyAgICAgICAgYXMgaWYgaXQgd2VyZSBhIFVSTCBvbiB0aGUg
d2ViIHdpdGggdGhlIGNhdmVhdCB0aGF0IGl0IG11c3QgYmUgYSBmaWxlIFVSTC4KKworICAgICAg
ICBBIG5ldyBjbGFzcyBKU1NjcmlwdCBoYXMgYWxzbyBiZWVuIGFkZGVkIHRoYXQgaXMgc2ltaWxh
ciB0byBKU1NjcmlwdFJlZi4KKyAgICAgICAgUmlnaHQgbm93IGFsbCBKU1NjcmlwdHMgYXJlIGNv
cGllZCBpbnRvIG1lbW9yeS4gSW4gdGhlIGZ1dHVyZSB3ZSBzaG91bGQKKyAgICAgICAgbW1hcCB0
aGUgcHJvdmlkZWQgZmlsZSBpbnRvIG1lbW9yeSBzbyB0aGUgT1MgY2FuIGV2aWN0IGl0IHRvIGRp
c2sgdW5kZXIKKyAgICAgICAgcHJlc3N1cmUuIEFkZGl0aW9uYWxseSwgdGhlIEFQSSBkb2VzIG5v
dCBtYWtlIHVzZSBvZiB0aGUgY29kZSBzaWduaW5nIHBhdGgKKyAgICAgICAgbm9yIHRoZSBieXRl
Y29kZSBjYWNoaW5nIHBhdGgsIHdoaWNoIHdlIHdpbGwgYWRkIGluIHN1YnNlcXVlbnQgcGF0Y2hl
cy4KKworICAgICAgICBMYXN0bHksIGEgY291cGxlIG9mIG5ldyBjb252ZW5pZW5jZSBtZXRob2Rz
IGhhdmUgYmVlbiBhZGRlZC4gQyBBUEkKKyAgICAgICAgY29udmVyc2lvbiwgY2FuIG5vdyB0b1Jl
ZiBhIEpTVmFsdWUgd2l0aCBqdXN0IGEgdm0gcmF0aGVyIHRoYW4KKyAgICAgICAgcmVxdWlyaW5n
IGFuIEV4ZWNTdGF0ZS4gU2Vjb25kbHksIHRoZXJlIGlzIG5vdyBhIGNhbGwgd3JhcHBlciB0aGF0
CisgICAgICAgIGRvZXMgbm90IHJlcXVpcmUgQ2FsbERhdGEgYW5kIENhbGxUeXBlIHNpbmNlIG1h
bnkgcGxhY2VzIGRvbid0CisgICAgICAgIGNhcmUgYWJvdXQgdGhpcy4KKworICAgICAgICAqIEFQ
SS9BUElDYXN0Lmg6CisgICAgICAgICh0b1JlZik6CisgICAgICAgICogQVBJL0pTQVBJR2xvYmFs
T2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FQSUdsb2JhbE9iamVjdDo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6SlNBUElHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OkpTQVBJR2xvYmFsT2JqZWN0OjpKU0FQSUdsb2JhbE9iamVjdCk6CisgICAg
ICAgICogQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNB
UElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUpOgorICAgICAgICAoSlNDOjpKU0FQ
SUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVySW1wb3J0TW9kdWxlKToKKyAgICAgICAgKEpTQzo6
SlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckZldGNoKToKKyAgICAgICAgKEpTQzo6SlNB
UElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzKToK
KyAgICAgICAgKiBBUEkvSlNBUElWYWx1ZVdyYXBwZXIuaDoKKyAgICAgICAgKEpTQzo6anNBUElW
YWx1ZVdyYXBwZXIpOiBEZWxldGVkLgorICAgICAgICAqIEFQSS9KU0NvbnRleHQuaDoKKyAgICAg
ICAgKiBBUEkvSlNDb250ZXh0Lm1tOgorICAgICAgICAoLVtKU0NvbnRleHQgbW9kdWxlTG9hZGVy
RGVsZWdhdGVdKToKKyAgICAgICAgKC1bSlNDb250ZXh0IHNldE1vZHVsZUxvYWRlckRlbGVnYXRl
Ol0pOgorICAgICAgICAqIEFQSS9KU0NvbnRleHRJbnRlcm5hbC5oOgorICAgICAgICAqIEFQSS9K
U0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogQVBJL0pTQ29udGV4dFJlZi5jcHA6CisgICAg
ICAgIChKU0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKToKKyAgICAgICAgKiBBUEkvSlNTY3Jp
cHQuaDogQWRkZWQuCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOiBBZGRlZC4KKyAgICAgICAg
KCtbSlNTY3JpcHQgc2NyaXB0V2l0aFNvdXJjZTppblZpcnR1YWxNYWNoaW5lOl0pOgorICAgICAg
ICAoZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZSk6CisgICAgICAgICgrW0pTU2NyaXB0IHNj
cmlwdEZyb21VVEY4RmlsZTppblZpcnR1YWxNYWNoaW5lOndpdGhDb2RlU2lnbmluZzphbmRCeXRl
Y29kZUNhY2hlOl0pOgorICAgICAgICAoZ2V0SlNTY3JpcHRTb3VyY2VDb2RlKToKKyAgICAgICAg
KiBBUEkvSlNTY3JpcHRJbnRlcm5hbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oLgorICAgICAgICAqIEFQSS9KU1ZhbHVl
SW50ZXJuYWwuaDoKKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmg6Cisg
ICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAgICAgICgrW0pTQ29udGV4dEZldGNo
RGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl0pOgorICAgICAgICAoLVtKU0NvbnRl
eHRGZXRjaERlbGVnYXRlIGNvbnRleHQ6ZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyOndpdGhSZXNv
bHZlSGFuZGxlcjphbmRSZWplY3RIYW5kbGVyOl0pOgorICAgICAgICAoY2hlY2tNb2R1bGVDb2Rl
UmFuKToKKyAgICAgICAgKGNoZWNrTW9kdWxlV2FzUmVqZWN0ZWQpOgorICAgICAgICAodGVzdEZl
dGNoKToKKyAgICAgICAgKHRlc3RGZXRjaFdpdGhUd29DeWNsZSk6CisgICAgICAgICh0ZXN0RmV0
Y2hXaXRoVGhyZWVDeWNsZSk6CisgICAgICAgICh0ZXN0TG9hZGVyUmVzb2x2ZXNBYnNvbHV0ZVNj
cmlwdFVSTCk6CisgICAgICAgICh0ZXN0TG9hZGVyUmVqZWN0c05pbFNjcmlwdFVSTCk6CisgICAg
ICAgICh0ZXN0TG9hZGVyUmVqZWN0c0ZhaWxlZEZldGNoKToKKyAgICAgICAgKHRlc3RJbXBvcnRN
b2R1bGVUd2ljZSk6CisgICAgICAgICgrW0pTQ29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0ZSBuZXdD
b250ZXh0XSk6CisgICAgICAgIChyZXNvbHZlUGF0aFRvU2NyaXB0cyk6CisgICAgICAgICgtW0pT
Q29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0ZSBjb250ZXh0OmZldGNoTW9kdWxlRm9ySWRlbnRpZmll
cjp3aXRoUmVzb2x2ZUhhbmRsZXI6YW5kUmVqZWN0SGFuZGxlcjpdKToKKyAgICAgICAgKHRlc3RM
b2FkQmFzaWNGaWxlKToKKyAgICAgICAgKHRlc3RPYmplY3RpdmVDQVBJKToKKyAgICAgICAgKiBB
UEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvYmFzaWMuanM6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmguCisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2Vz
Q29jb2EudHh0OgorICAgICAgICAqIGNvbmZpZy5oOgorICAgICAgICAqIHJ1bnRpbWUvQ2FsbERh
dGEuY3BwOgorICAgICAgICAoSlNDOjpjYWxsKToKKyAgICAgICAgKiBydW50aW1lL0NhbGxEYXRh
Lmg6CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6bG9h
ZEFuZEV2YWx1YXRlTW9kdWxlKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTQ2FzdC5oOgorICAgICAgICAoSlNDOjpqc1NlY3VyZUNhc3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpjcmVh
dGVQcm94eVByb3BlcnR5KToKKwogMjAxOC0xMi0zMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWls
bGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBTb3VyY2VQcm92aWRlcnMgc2hvdWxkIHVzZSBhbiBh
Y3R1YWwgVVJMIGluc3RlYWQgb2YgYSBzdHJpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvQVBJQ2FzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElDYXN0
LmgKaW5kZXggM2I1NTkxMTllMjJhMWU1Njg4MDg4NzI3ZjliYTdkY2IyODI0YWY0ZC4uNTAyZDAx
N2M5YjJkNWFiYzBiZDIxZDUwNDkzMmJhMDVkNmEwOTIxYiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9BUElDYXN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9BUElDYXN0LmgKQEAgLTEyOCwyMSArMTI4LDI2IEBAIGlubGluZSBKU0M6OlZNKiB0b0pTKEpT
Q29udGV4dEdyb3VwUmVmIGcpCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDOjpWTSo+
KGNvbnN0X2Nhc3Q8T3BhcXVlSlNDb250ZXh0R3JvdXAqPihnKSk7CiB9CiAKLWlubGluZSBKU1Zh
bHVlUmVmIHRvUmVmKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdikKK2lubGlu
ZSBKU1ZhbHVlUmVmIHRvUmVmKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdikKIHsKLSAgICBB
U1NFUlQoZXhlYy0+dm0oKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBB
U1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAjaWYgIUNQVShBRERS
RVNTNjQpCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIXYuaXNDZWxs
KCkpCi0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTVmFsdWVSZWY+KEpTQzo6anNB
UElWYWx1ZVdyYXBwZXIoZXhlYywgdikuYXNDZWxsKCkpOworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxKU1ZhbHVlUmVmPihKU0M6OkpTQVBJVmFsdWVXcmFwcGVyOjpjcmVhdGUodm0s
IHYpLmFzQ2VsbCgpKTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlUmVmPih2
LmFzQ2VsbCgpKTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9Q
QVJBTSh2bSk7CiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU1ZhbHVlUmVmPih2KTsKICNlbmRp
ZgogfQogCitpbmxpbmUgSlNWYWx1ZVJlZiB0b1JlZihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlND
OjpKU1ZhbHVlIHYpCit7CisgICAgcmV0dXJuIHRvUmVmKGV4ZWMtPnZtKCksIHYpOworfQorCiBp
bmxpbmUgSlNPYmplY3RSZWYgdG9SZWYoSlNDOjpKU09iamVjdCogbykKIHsKICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxKU09iamVjdFJlZj4obyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjBjMjRhYmM3N2EyYWRiMzlh
YTAyNTEwODE5MWRiM2E0MzY4YzlhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QuaApAQCAtMCwwICsxLDY0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpT
QVBJR2xvYmFsT2JqZWN0IDogcHVibGljIEpTR2xvYmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1
c2luZyBCYXNlID0gSlNHbG9iYWxPYmplY3Q7CisKKyAgICBERUNMQVJFX0lORk87CisgICAgc3Rh
dGljIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIHNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFi
bGU7CisKKyAgICBzdGF0aWMgSlNBUElHbG9iYWxPYmplY3QqIGNyZWF0ZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgYXV0byogb2JqZWN0ID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNBUElHbG9iYWxPYmplY3Q+KHZtLmhlYXApKSBKU0FQSUdsb2Jh
bE9iamVjdCh2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2
bSk7CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorCisgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICBhdXRvKiByZXN1bHQgPSBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgMCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhHbG9iYWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAg
ICAgIHJlc3VsdC0+c2V0VHJhbnNpdGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZCh0cnVl
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNJbnRlcm5h
bFByb21pc2UqIG1vZHVsZUxvYWRlckltcG9ydE1vZHVsZShKU0dsb2JhbE9iamVjdCosIEV4ZWNT
dGF0ZSosIEpTTW9kdWxlTG9hZGVyKiwgSlNTdHJpbmcqIG1vZHVsZU5hbWVWYWx1ZSwgSlNWYWx1
ZSBwYXJhbWV0ZXJzLCBjb25zdCBTb3VyY2VPcmlnaW4mKTsKKyAgICBzdGF0aWMgSWRlbnRpZmll
ciBtb2R1bGVMb2FkZXJSZXNvbHZlKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNNb2R1
bGVMb2FkZXIqLCBKU1ZhbHVlIGtleVZhbHVlLCBKU1ZhbHVlIHJlZmVycmVyVmFsdWUsIEpTVmFs
dWUpOworICAgIHN0YXRpYyBKU0ludGVybmFsUHJvbWlzZSogbW9kdWxlTG9hZGVyRmV0Y2goSlNH
bG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUsIEpTVmFs
dWUsIEpTVmFsdWUpOworICAgIHN0YXRpYyBKU09iamVjdCogbW9kdWxlTG9hZGVyQ3JlYXRlSW1w
b3J0TWV0YVByb3BlcnRpZXMoSlNHbG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU01vZHVsZUxv
YWRlciosIEpTVmFsdWUsIEpTTW9kdWxlUmVjb3JkKiwgSlNWYWx1ZSk7CisKK3ByaXZhdGU6Cisg
ICAgSlNBUElHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsICZzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQorICAg
IHsgfQorfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQ
SUdsb2JhbE9iamVjdC5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxP
YmplY3QubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYzQyZjVmMjMyMTZmNDZhZjFhZjA3MzgyYjE4NTNhM2VhNWFl
NzRiNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElH
bG9iYWxPYmplY3QubW0KQEAgLTAsMCArMSwyMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJKU0FQ
SUdsb2JhbE9iamVjdC5oIgorCisjaW1wb3J0ICJBUElDYXN0LmgiCisjaW1wb3J0ICJDYXRjaFNj
b3BlLmgiCisjaW1wb3J0ICJDb21wbGV0aW9uLmgiCisjaW1wb3J0ICJFcnJvci5oIgorI2ltcG9y
dCAiRXhjZXB0aW9uLmgiCisjaW1wb3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgorI2ltcG9ydCAi
SlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5oIgorI2ltcG9ydCAiSlNOYXRpdmVTdGRGdW5jdGlv
bi5oIgorI2ltcG9ydCAiSlNTY3JpcHRJbnRlcm5hbC5oIgorI2ltcG9ydCAiSlNTb3VyY2VDb2Rl
LmgiCisjaW1wb3J0ICJKU1ZhbHVlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTVmlydHVhbE1hY2hp
bmVJbnRlcm5hbC5oIgorI2ltcG9ydCAiSmF2YVNjcmlwdENvcmUuaCIKKyNpbXBvcnQgIk9iamVj
dENvbnN0cnVjdG9yLmgiCisjaW1wb3J0ICJTb3VyY2VPcmlnaW4uaCIKKworI2ltcG9ydCA8d3Rm
L1VSTC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTQVBJR2xvYmFs
T2JqZWN0OjpzX2luZm8gPSB7ICJHbG9iYWxPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQVBJR2xvYmFsT2JqZWN0KSB9OworCitj
b25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSBKU0FQSUdsb2JhbE9iamVjdDo6c19nbG9iYWxP
YmplY3RNZXRob2RUYWJsZSA9IHsKKyAgICAmc3VwcG9ydHNSaWNoU291cmNlSW5mbywKKyAgICAm
c2hvdWxkSW50ZXJydXB0U2NyaXB0LAorICAgICZqYXZhU2NyaXB0UnVudGltZUZsYWdzLAorICAg
IG51bGxwdHIsIC8vIHF1ZXVlVGFza1RvRXZlbnRMb29wCisgICAgJnNob3VsZEludGVycnVwdFNj
cmlwdEJlZm9yZVRpbWVvdXQsCisgICAgJm1vZHVsZUxvYWRlckltcG9ydE1vZHVsZSwgLy8gbW9k
dWxlTG9hZGVySW1wb3J0TW9kdWxlCisgICAgJm1vZHVsZUxvYWRlclJlc29sdmUsIC8vIG1vZHVs
ZUxvYWRlclJlc29sdmUKKyAgICAmbW9kdWxlTG9hZGVyRmV0Y2gsIC8vIG1vZHVsZUxvYWRlckZl
dGNoCisgICAgJm1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzLCAvLyBtb2R1
bGVMb2FkZXJDcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcworICAgIG51bGxwdHIsIC8vIG1vZHVs
ZUxvYWRlckV2YWx1YXRlCisgICAgbnVsbHB0ciwgLy8gcHJvbWlzZVJlamVjdGlvblRyYWNrZXIK
KyAgICBudWxscHRyLCAvLyBkZWZhdWx0TGFuZ3VhZ2UKKyAgICBudWxscHRyLCAvLyBjb21waWxl
U3RyZWFtaW5nCisgICAgbnVsbHB0ciwgLy8gaW5zdGFudGlhdGVTdHJlYW1pbmcKK307CisKK0lk
ZW50aWZpZXIgSlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU01vZHVsZUxvYWRlciosIEpT
VmFsdWUga2V5LCBKU1ZhbHVlIHJlZmVycmVyLCBKU1ZhbHVlKQoreworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IEFTU0VSVF9VTlVTRUQoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QgPT0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKTsKKyAgICBBU1NFUlQoa2V5LmlzU3RyaW5nKCkgfHwga2V5LmlzU3lt
Ym9sKCkpOworICAgIFN0cmluZyBuYW1lID0gIGtleS50b1dURlN0cmluZyhleGVjKTsKKworICAg
IFVSTCByZWZlcnJlclVSTChVUkwoKSwganNDYXN0PEpTU3RyaW5nKj4ocmVmZXJyZXIpLT50cnlH
ZXRWYWx1ZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWZlcnJlclVSTC5pc1ZhbGlkKCkpOwor
CisgICAgVVJMIHVybCA9IFVSTChyZWZlcnJlclVSTCwgbmFtZSk7CisgICAgaWYgKHVybC5pc1Zh
bGlkKCkpCisgICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIHVybCk7
CisKKyAgICB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsICJDb3VsZCBub3QgZm9ybSB2YWxpZCBV
UkwgZnJvbSBpZGVudGlmaWVyIGFuZCBiYXNlIl9zKTsKKyAgICByZXR1cm4geyB9OworfQorCitK
U0ludGVybmFsUHJvbWlzZSogSlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckltcG9ydE1v
ZHVsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIEpTTW9k
dWxlTG9hZGVyKiwgSlNTdHJpbmcqIHNwZWNpZmllclZhbHVlLCBKU1ZhbHVlLCBjb25zdCBTb3Vy
Y2VPcmlnaW4mIHNvdXJjZU9yaWdpbikKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIGF1dG8g
cmVqZWN0ID0gWyZdIChKU1ZhbHVlIGV4Y2VwdGlvbikgLT4gSlNJbnRlcm5hbFByb21pc2UqIHsK
KyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgYXV0byogcHJvbWlzZSA9
IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OnRyeUNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3Qp
OworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gcHJvbWlz
ZS0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgfTsKKworICAgIGF1dG8gaW1wb3J0ID0g
WyZdIChVUkwmIHVybCkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IGltcG9ydE1vZHVsZShleGVj
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgdXJsKSwganNVbmRlZmluZWQoKSwganNVbmRl
ZmluZWQoKSk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAg
ICAgICAgICByZXR1cm4gcmVqZWN0KHNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9OworCisgICAgYXV0byBzcGVjaWZpZXIgPSBzcGVjaWZpZXJWYWx1ZS0+
dmFsdWUoZXhlYyk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAg
ICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gcmVqZWN0KGV4Y2VwdGlvbik7Cisg
ICAgfQorCisgICAgVVJMIGFic29sdXRlVVJMKFVSTCgpLCBzcGVjaWZpZXIpOworICAgIGlmIChh
YnNvbHV0ZVVSTC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBpbXBvcnQoYWJzb2x1dGVVUkwp
OworCisgICAgaWYgKCFzcGVjaWZpZXIuc3RhcnRzV2l0aCgnLycpICYmICFzcGVjaWZpZXIuc3Rh
cnRzV2l0aCgiLi8iKSAmJiAhc3BlY2lmaWVyLnN0YXJ0c1dpdGgoIi4uLyIpKQorICAgICAgICBy
ZXR1cm4gcmVqZWN0KGNyZWF0ZUVycm9yKGV4ZWMsICJNb2R1bGUgc3BlY2lmaWVyIGRvZXMgbm90
IHN0YXJ0IHdpdGggXCIvXCIsIFwiLi9cIiwgb3IgXCIuLi9cIi4iX3MpKTsKKworICAgIGlmIChz
cGVjaWZpZXIuc3RhcnRzV2l0aCgnLycpKSB7CisgICAgICAgIGFic29sdXRlVVJMID0gVVJMKFVS
TCh7IH0sICJmaWxlOi8vIiksIHNwZWNpZmllcik7CisgICAgICAgIGlmIChhYnNvbHV0ZVVSTC5p
c1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gaW1wb3J0KGFic29sdXRlVVJMKTsKKyAgICB9
CisKKyAgICBhdXRvIG5vQmFzZUVycm9yTWVzc2FnZSA9ICJDb3VsZCBub3QgZGV0ZXJtaW5lIHRo
ZSBiYXNlIFVSTCBmb3IgbG9hZGluZy4iX3M7CisgICAgaWYgKHNvdXJjZU9yaWdpbi5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuIHJlamVjdChjcmVhdGVFcnJvcihleGVjLCBub0Jhc2VFcnJvck1l
c3NhZ2UpKTsKKworICAgIGF1dG8gcmVmZXJyZXIgPSBzb3VyY2VPcmlnaW4uc3RyaW5nKCk7Cisg
ICAgVVJMIGJhc2VVUkwoVVJMKCksIHJlZmVycmVyKTsKKyAgICBpZiAoIWJhc2VVUkwuaXNWYWxp
ZCgpKQorICAgICAgICByZXR1cm4gcmVqZWN0KGNyZWF0ZUVycm9yKGV4ZWMsIG5vQmFzZUVycm9y
TWVzc2FnZSkpOworCisgICAgVVJMIHVybChiYXNlVVJMLCBzcGVjaWZpZXIpOworICAgIGlmICgh
dXJsLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHJlamVjdChjcmVhdGVFcnJvcihleGVjLCAi
Y291bGQgbm90IGRldGVybWluZSBhIHZhbGlkIFVSTCBmb3IgbW9kdWxlIHNwZWNpZmllciJfcykp
OworCisgICAgcmV0dXJuIGltcG9ydCh1cmwpOworfQorCitKU0ludGVybmFsUHJvbWlzZSogSlNB
UElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckZldGNoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlIGtleSwgSlNW
YWx1ZSwgSlNWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgQVNTRVJUKGdsb2Jh
bE9iamVjdCA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworICAgIEpTQ29udGV4dCAq
Y29udGV4dCA9IFtKU0NvbnRleHQgY29udGV4dFdpdGhKU0dsb2JhbENvbnRleHRSZWY6dG9HbG9i
YWxSZWYoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpXTsKKworICAgIEpTSW50ZXJuYWxQcm9t
aXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6dHJ5Q3Jl
YXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
bnVsbHB0cik7CisKKyAgICBJZGVudGlmaWVyIG1vZHVsZUtleSA9IGtleS50b1Byb3BlcnR5S2V5
KGV4ZWMpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAg
SlNWYWx1ZSBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhlYywgZXhj
ZXB0aW9uKTsKKyAgICB9CisKKyAgICBpZiAoVU5MSUtFTFkoIVtjb250ZXh0IG1vZHVsZUxvYWRl
ckRlbGVnYXRlXSkpCisgICAgICAgIHJldHVybiBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGNyZWF0
ZUVycm9yKGV4ZWMsICJObyBtb2R1bGUgbG9hZGVyIHByb3ZpZGVkLiIpKTsKKworICAgIGF1dG8g
ZGVmZXJyZWRQcm9taXNlID0gU3Ryb25nPEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ+KHZtLCBk
ZWZlcnJlZCk7CisgICAgYXV0byBzdHJvbmdLZXkgPSBTdHJvbmc8SlNTdHJpbmc+KHZtLCBqc1Nl
Y3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwga2V5KSk7CisgICAgYXV0byogcmVzb2x2ZSA9IEpTTmF0
aXZlU3RkRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAxLCAicmVzb2x2ZSIsIFs9
XSAoRXhlY1N0YXRlKiBleGVjKSB7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
ICAgIC8vIFRoaXMgY2FwdHVyZXMgdGhlIGdsb2JhbE9iamVjdCBidXQgdGhhdCdzIG9rIGJlY2F1
c2Ugb3VyIHN0cnVjdHVyZSBrZWVwcyBpdCBhbGl2ZSBhbnl3YXkuCisgICAgICAgIEpTQ29udGV4
dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY29udGV4dFdpdGhKU0dsb2JhbENvbnRleHRSZWY6dG9H
bG9iYWxSZWYoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpXTsKKyAgICAgICAgaWQgc2NyaXB0
ID0gdmFsdWVUb09iamVjdChjb250ZXh0LCB0b1JlZihleGVjLCBleGVjLT5hcmd1bWVudCgwKSkp
OworCisgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgICAgIGlmIChVTkxJ
S0VMWSghW3NjcmlwdCBpc0tpbmRPZkNsYXNzOltKU1NjcmlwdCBjbGFzc11dKSkgeworICAgICAg
ICAgICAgYXJncy5hcHBlbmQoY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJGaXJzdCBhcmd1bWVudCBv
ZiByZXNvbHV0aW9uIGNhbGxiYWNrIGlzIG5vdCBhIEpTU2NyaXB0IikpOworICAgICAgICAgICAg
Y2FsbChleGVjLCBkZWZlcnJlZFByb21pc2UtPkpTUHJvbWlzZURlZmVycmVkOjpyZWplY3QoKSwg
YXJncywgIlRoaXMgc2hvdWxkIG5ldmVyIGJlIHNlZW4uLi4iKTsKKyAgICAgICAgICAgIHJldHVy
biBlbmNvZGVkSlNVbmRlZmluZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFN0cmlu
ZyYgc291cmNlID0gZ2V0SlNTY3JpcHRTb3VyY2VDb2RlKHN0YXRpY19jYXN0PEpTU2NyaXB0ICo+
KHNjcmlwdCkpOworICAgICAgICBhcmdzLmFwcGVuZChKU1NvdXJjZUNvZGU6OmNyZWF0ZSh2bSwg
bWFrZVNvdXJjZShzb3VyY2UsIFNvdXJjZU9yaWdpbihtb2R1bGVLZXkuc3RyaW5nKCkpLCBVUkwo
eyB9LCBtb2R1bGVLZXkuc3RyaW5nKCkpLCBUZXh0UG9zaXRpb24oKSwgSlNDOjpTb3VyY2VQcm92
aWRlclNvdXJjZVR5cGU6Ok1vZHVsZSkpKTsKKyAgICAgICAgY2FsbChleGVjLCBkZWZlcnJlZFBy
b21pc2UtPkpTUHJvbWlzZURlZmVycmVkOjpyZXNvbHZlKCksIGFyZ3MsICJUaGlzIHNob3VsZCBu
ZXZlciBiZSBzZWVuLi4uIik7CisgICAgICAgIHJldHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsK
KyAgICB9KTsKKworICAgIGF1dG8qIHJlamVjdCA9IEpTTmF0aXZlU3RkRnVuY3Rpb246OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCAxLCAicmVqZWN0IiwgWz1dIChFeGVjU3RhdGUqIGV4ZWMpIHsK
KyAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICAgICAgYXJncy5hcHBlbmQo
ZXhlYy0+YXJndW1lbnQoMCkpOworCisgICAgICAgIGNhbGwoZXhlYywgZGVmZXJyZWRQcm9taXNl
LT5KU1Byb21pc2VEZWZlcnJlZDo6cmVqZWN0KCksIGFyZ3MsICJUaGlzIHNob3VsZCBuZXZlciBi
ZSBzZWVuLi4uIik7CisgICAgICAgIHJldHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsKKyAgICB9
KTsKKworICAgIFtbY29udGV4dCBtb2R1bGVMb2FkZXJEZWxlZ2F0ZV0gY29udGV4dDpjb250ZXh0
IGZldGNoTW9kdWxlRm9ySWRlbnRpZmllcjpbOjpKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6
dG9SZWYoZXhlYywga2V5KSBpbkNvbnRleHQ6Y29udGV4dF0gd2l0aFJlc29sdmVIYW5kbGVyOls6
OkpTVmFsdWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjp0b1JlZihleGVjLCByZXNvbHZlKSBpbkNvbnRl
eHQ6Y29udGV4dF0gYW5kUmVqZWN0SGFuZGxlcjpbOjpKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVS
ZWY6dG9SZWYoZXhlYywgcmVqZWN0KSBpbkNvbnRleHQ6Y29udGV4dF1dOworICAgIGlmIChjb250
ZXh0LmV4Y2VwdGlvbikgeworICAgICAgICBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIHRvSlMoZXhl
YywgW2NvbnRleHQuZXhjZXB0aW9uIEpTVmFsdWVSZWZdKSk7CisgICAgICAgIGNvbnRleHQuZXhj
ZXB0aW9uID0gbmlsOworICAgIH0KKyAgICByZXR1cm4gZGVmZXJyZWQtPnByb21pc2UoKTsKK30K
KworSlNPYmplY3QqIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJDcmVhdGVJbXBvcnRN
ZXRhUHJvcGVydGllcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFeGVjU3RhdGUqIGV4
ZWMsIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSBrZXksIEpTTW9kdWxlUmVjb3JkKiwgSlNWYWx1
ZSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTT2JqZWN0KiBtZXRhUHJvcGVydGllcyA9IGNvbnN0
cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIGdsb2JhbE9iamVjdC0+bnVsbFByb3RvdHlwZU9iamVjdFN0
cnVjdHVyZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKwor
ICAgIG1ldGFQcm9wZXJ0aWVzLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCAiZmlsZW5hbWUiKSwga2V5KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBu
dWxscHRyKTsKKworICAgIHJldHVybiBtZXRhUHJvcGVydGllczsKK30KKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVZhbHVlV3JhcHBlci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVZhbHVlV3JhcHBlci5oCmluZGV4IDA2YjMwNzEwM2Vl
YTIzNDA1NDdiMDMwMjljZTNmYjBlNmQ3Njc2MzMuLmFhMjYwODJmZjM1YmFkOTA5YzFiYjNhNjQ1
OTJiMGUxZTE4ODc5MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNB
UElWYWx1ZVdyYXBwZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJVmFs
dWVXcmFwcGVyLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0y
MDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAx
IFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0
LCAyMDA1LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDQsMTAgKzQ0LDkgQEAgcHVibGljOgogCiAgICAgREVD
TEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIHN0YXRpYyBKU0FQSVZhbHVlV3JhcHBlciogY3JlYXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkgCisgICAgc3RhdGljIEpTQVBJVmFsdWVX
cmFwcGVyKiBjcmVhdGUoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICAgICAgSlNBUElWYWx1ZVdyYXBwZXIqIHdyYXBwZXIgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FQSVZhbHVlV3JhcHBlcj4odm0uaGVhcCkpIEpT
QVBJVmFsdWVXcmFwcGVyKGV4ZWMpOworICAgICAgICBKU0FQSVZhbHVlV3JhcHBlciogd3JhcHBl
ciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQVBJVmFsdWVXcmFwcGVyPih2bS5oZWFw
KSkgSlNBUElWYWx1ZVdyYXBwZXIodm0pOwogICAgICAgICB3cmFwcGVyLT5maW5pc2hDcmVhdGlv
bih2bSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICB9CkBAIC02MSwxNyAr
NjAsMTIgQEAgcHJvdGVjdGVkOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBKU0FQSVZhbHVlV3Jh
cHBlcihFeGVjU3RhdGUqIGV4ZWMpCi0gICAgICAgIDogSlNDZWxsKGV4ZWMtPnZtKCksIGV4ZWMt
PnZtKCkuYXBpV3JhcHBlclN0cnVjdHVyZS5nZXQoKSkKKyAgICBKU0FQSVZhbHVlV3JhcHBlcihW
TSYgdm0pCisgICAgICAgIDogSlNDZWxsKHZtLCB2bS5hcGlXcmFwcGVyU3RydWN0dXJlLmdldCgp
KQogICAgIHsKICAgICB9CiAKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92YWx1ZTsKIH07
CiAKLWlubGluZSBKU1ZhbHVlIGpzQVBJVmFsdWVXcmFwcGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNBUElWYWx1ZVdyYXBwZXI6OmNyZWF0ZShleGVj
LCB2YWx1ZSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDb250ZXh0LmgKaW5kZXggODljODdmOWUyZTFmZjFiMTcxYjFlYmJhOGM0NTIxNTlmNDRmNDc1
YS4uMTc5MGU1OTdiNDhhOWI4M2E5NDVmOTMyYjJlYTRlYmIzNjNlZmNmZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ29udGV4dC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2lmIEpTQ19PQkpDX0FQ
SV9FTkFCTEVECiAKLUBjbGFzcyBKU1ZpcnR1YWxNYWNoaW5lLCBKU1ZhbHVlOworQGNsYXNzIEpT
U2NyaXB0LCBKU1ZpcnR1YWxNYWNoaW5lLCBKU1ZhbHVlLCBKU0NvbnRleHQ7CiAKIC8qIQogQGlu
dGVyZmFjZQpAQCAtMzksNyArMzksNyBAQAogIEphdmFTY3JpcHQgZXhlY3V0aW9uIHRha2VzIHBs
YWNlIHdpdGhpbiBhIGNvbnRleHQsIGFuZCBhbGwgSmF2YVNjcmlwdCB2YWx1ZXMKICBhcmUgdGll
ZCB0byBhIGNvbnRleHQuCiAqLwotTlNfQ0xBU1NfQVZBSUxBQkxFKDEwXzksIDdfMCkKK0pTQ19D
TEFTU19BVkFJTEFCTEUobWFjb3N4KDEwLjkpLCBpb3MoNy4wKSkKIEBpbnRlcmZhY2UgSlNDb250
ZXh0IDogTlNPYmplY3QKIAogLyohCkBAIC0xNzcsNyArMTc3LDYgQEAgTlNfQ0xBU1NfQVZBSUxB
QkxFKDEwXzksIDdfMCkKIEBkaXNjdXNzaW9uIE5hbWUgb2YgdGhlIEpTQ29udGV4dC4gRXhwb3Nl
ZCB3aGVuIHJlbW90ZSBkZWJ1Z2dpbmcgdGhlIGNvbnRleHQuCiAqLwogQHByb3BlcnR5IChjb3B5
KSBOU1N0cmluZyAqbmFtZSBKU0NfQVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTApLCBpb3MoOC4w
KSk7Ci0KIEBlbmQKIAogLyohCkBAIC0yMzEsNiArMjMwLDcgQEAgTlNfQ0xBU1NfQVZBSUxBQkxF
KDEwXzksIDdfMCkKIEByZXN1bHQgVGhlIEMgQVBJIGVxdWl2YWxlbnQgb2YgdGhpcyBKU0NvbnRl
eHQuCiAqLwogQHByb3BlcnR5IChyZWFkb25seSkgSlNHbG9iYWxDb250ZXh0UmVmIEpTR2xvYmFs
Q29udGV4dFJlZjsKKwogQGVuZAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nv
bnRleHQubW0KaW5kZXggMjc1NjZmNDFiOTdlMWIzOWJkZGU5YjQ4YWFhNTU5ZjE0Y2I3MzllYS4u
M2M3NzZkNGQ5MDBlZTE3MzMzNjJhYzI5ZjYyNGY0NDRkNTQ1ZTdiNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0KKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NvbnRleHQubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTEgKzI2LDE1IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAKICNpbXBvcnQgIkFQSUNhc3QuaCIKKyNpbXBvcnQgIkNvbXBsZXRpb24uaCIKICNpbXBv
cnQgIkpTQ0lubGluZXMuaCIKICNpbXBvcnQgIkpTQ29udGV4dEludGVybmFsLmgiCiAjaW1wb3J0
ICJKU0NvbnRleHRQcml2YXRlLmgiCiAjaW1wb3J0ICJKU0NvbnRleHRSZWZJbnRlcm5hbC5oIgog
I2ltcG9ydCAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbXBvcnQgIkpTSW50ZXJuYWxQcm9taXNlLmgi
CisjaW1wb3J0ICJKU01vZHVsZUxvYWRlci5oIgorI2ltcG9ydCAiSlNTY3JpcHRJbnRlcm5hbC5o
IgogI2ltcG9ydCAiSlNWYWx1ZUludGVybmFsLmgiCiAjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5l
SW50ZXJuYWwuaCIKICNpbXBvcnQgIkpTV3JhcHBlck1hcC5oIgpAQCAtMzgsMTIgKzQyLDE1IEBA
CiAjaW1wb3J0ICJPYmpjUnVudGltZUV4dHJhcy5oIgogI2ltcG9ydCAiU3Ryb25nSW5saW5lcy5o
IgogCisjaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KKwogI2lmIEpTQ19PQkpDX0FQSV9FTkFC
TEVECiAKIEBpbXBsZW1lbnRhdGlvbiBKU0NvbnRleHQgewogICAgIEpTVmlydHVhbE1hY2hpbmUg
Km1fdmlydHVhbE1hY2hpbmU7CiAgICAgSlNHbG9iYWxDb250ZXh0UmVmIG1fY29udGV4dDsKICAg
ICBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBtX2V4Y2VwdGlvbjsKKyAgICBXZWFrT2JqQ1B0
cjxpZCA8SlNNb2R1bGVMb2FkZXJEZWxlZ2F0ZT4+IG1fbW9kdWxlTG9hZGVyRGVsZWdhdGU7CiB9
CiAKIC0gKEpTR2xvYmFsQ29udGV4dFJlZilKU0dsb2JhbENvbnRleHRSZWYKQEAgLTIzMyw2ICsy
NDAsMTYgQEAKICAgICBKU0dsb2JhbENvbnRleHRTZXREZWJ1Z2dlclJ1bkxvb3AobV9jb250ZXh0
LCBydW5Mb29wKTsKIH0KIAorLSAoaWQ8SlNNb2R1bGVMb2FkZXJEZWxlZ2F0ZT4pbW9kdWxlTG9h
ZGVyRGVsZWdhdGUKK3sKKyAgICByZXR1cm4gbV9tb2R1bGVMb2FkZXJEZWxlZ2F0ZS5nZXRBdXRv
cmVsZWFzZWQoKTsKK30KKworLSAodm9pZClzZXRNb2R1bGVMb2FkZXJEZWxlZ2F0ZTooaWQ8SlNN
b2R1bGVMb2FkZXJEZWxlZ2F0ZT4pbW9kdWxlTG9hZGVyRGVsZWdhdGUKK3sKKyAgICBtX21vZHVs
ZUxvYWRlckRlbGVnYXRlID0gbW9kdWxlTG9hZGVyRGVsZWdhdGU7Cit9CisKIEBlbmQKIAogQGlt
cGxlbWVudGF0aW9uIEpTQ29udGV4dChTdWJzY3JpcHRTdXBwb3J0KQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRJbnRlcm5hbC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0NvbnRleHRJbnRlcm5hbC5oCmluZGV4IDI4ZjcwOWMxZTQ4ZjFlMWE4
MDM4NTY1MGFhZTZlNDFjZDM1MTUwZmEuLmFiNDU4MjlmMDAyN2U0ZmFkNmJmYmQxYWZjNDAyYjNh
MWJlODViNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0
SW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dEludGVy
bmFsLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIAotI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9K
U0NvbnRleHRQcml2YXRlLmg+CiAKIHN0cnVjdCBDYWxsYmFja0RhdGEgewogICAgIENhbGxiYWNr
RGF0YSogbmV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250
ZXh0UHJpdmF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRQcml2YXRl
LmgKaW5kZXggZmY5NjIyYWRkZjYwYjdjMTAzNTdkYWNjZjFjNmY0MWVjYjg2MWYxYy4uZDRlMjA2
YjMzNTc1ZTlmYTZkNDE4MmU5ZTFhZDg5NDA1NjhhODY3NyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRQcml2YXRlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NvbnRleHRQcml2YXRlLmgKQEAgLTMwLDYgKzMwLDI3IEBACiAKICNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dC5oPgogCitAcHJvdG9jb2wgSlNNb2R1bGVMb2Fk
ZXJEZWxlZ2F0ZSA8TlNPYmplY3Q+CisKK0ByZXF1aXJlZAorCisvKiEgQGFic3RyYWN0IFByb3Zp
ZGVzIHNvdXJjZSBjb2RlIGZvciBhbnkgSlMgbW9kdWxlIHRoYXQgaXMgYWN0aXZlbHkgaW1wb3J0
ZWQuCisgQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgZm9yIHdoaWNoIHRoZSBtb2R1bGUgaXMg
YmVpbmcgcmVxdWVzdGVkLgorIEBwYXJhbSBpZGVudGlmaWVyIFRoZSByZXNvbHZlZCBpZGVudGlm
aWVyIGZvciB0aGUgcmVxdWVzdGVkIG1vZHVsZS4KKyBAcGFyYW0gcmVzb2x2ZSBBIEpTIGZ1bmN0
aW9uIHRvIGNhbGwgd2l0aCB0aGUgZGVzaXJlZCBzY3JpcHQgZm9yIGlkZW50aWZpZXIuCisgQHBh
cmFtIHJlamVjdCBBIEpTIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBpZGVudGlmaWVyIGNhbm5vdCBi
ZSBmZXRjaGVkLgorIEBkaXNjdXNzaW9uIEN1cnJlbnRseSwgaWRlbnRpZmllciB3aWxsIGFsd2F5
cyBiZSBhbiBhYnNvbHV0ZSBmaWxlIFVSTCBjb21wdXRlZCBmcm9tIHNwZWNpZmllciBvZiB0aGUg
cmVxdWVzdGVkIG1vZHVsZSByZWxhdGl2ZSB0byB0aGUgVVJMIG9mIHRoZSByZXF1ZXN0aW5nIHNj
cmlwdC4gSWYgdGhlIHJlcXVlc3Rpbmcgc2NyaXB0IGRvZXMgbm90IGhhdmUgYSBVUkwgYW5kIHRo
ZSBtb2R1bGUgc3BlY2lmaWVyIGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRoIHRoZSBtb2R1bGUgbG9h
ZGVyIHdpbGwgZmFpbCB0byBsb2FkIHRoZSBtb2R1bGUuCisKKyBUaGUgZmlyc3QgYXJndW1lbnQg
dG8gcmVzb2x2ZSBzaG9sdWQgYWx3YXlzIGJlIGEgSlNTY3JpcHQsIG90aGVyd2lzZSB0aGUgbW9k
dWxlIGxvYWRlciB3aWxsIHJlamVjdCB0aGUgbW9kdWxlLgorCisgT25jZSBhbiBpZGVudGlmaWVy
IGhhcyBiZWVuIHJlc29sdmVkIG9yIHJlamVjdGVkIGluIGEgZ2l2ZW4gY29udGV4dCBpdCB3aWxs
IG5ldmVyIGJlIHJlcXVlc3RlZCBhZ2Fpbi4gSWYgYSBzY3JpcHQgaXMgc3VjY2Vzc2Z1bGx5IGV2
YWx1YXRlZCBpdCB3aWxsIG5vdCBiZSByZS1ldmFsdWF0ZWQgb24gYW55IHN1YnNlcXVlbnQgaW1w
b3J0LgorCisgVGhlIFZNIHdpbGwgcmV0YWluIGFsbCBldmFsdWF0ZWQgbW9kdWxlcyBmb3IgdGhl
IGxpZmV0aW1lIG9mIHRoZSBjb250ZXh0LgorICovCistICh2b2lkKWNvbnRleHQ6KEpTQ29udGV4
dCAqKWNvbnRleHQgZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyOihKU1ZhbHVlICopaWRlbnRpZmll
ciB3aXRoUmVzb2x2ZUhhbmRsZXI6KEpTVmFsdWUgKilyZXNvbHZlIGFuZFJlamVjdEhhbmRsZXI6
KEpTVmFsdWUgKilyZWplY3Q7CisKK0BlbmQKKwogQGludGVyZmFjZSBKU0NvbnRleHQoUHJpdmF0
ZSkKIAogLyohCkBAIC01MCw2ICs3MSw5IEBACiAqLwogQHByb3BlcnR5IChzZXR0ZXI9X3NldERl
YnVnZ2VyUnVuTG9vcDopIENGUnVuTG9vcFJlZiBfZGVidWdnZXJSdW5Mb29wIEpTQ19BUElfQVZB
SUxBQkxFKG1hY29zeCgxMC4xMCksIGlvcyg4LjApKTsKIAorLyohIEBhYnN0cmFjdCBUaGUgZGVs
ZWdhdGUgdGhlIGNvbnRleHQgd2lsbCB1c2Ugd2hlbiB0cnlpbmcgdG8gbG9hZCBhIG1vZHVsZS4g
Tm90ZSwgdGhpcyBkZWxlZ2F0ZSB3aWxsIGJlIGlnbm9yZWQgZm9yIGNvbnRleHRzIHJldHVybmVk
IGJ5IFVJV2ViVmlldy4gKi8KK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCB3ZWFrKSBpZCA8SlNNb2R1
bGVMb2FkZXJEZWxlZ2F0ZT4gbW9kdWxlTG9hZGVyRGVsZWdhdGUgSlNDX0FQSV9BVkFJTEFCTEUo
bWFjb3N4KEpTQ19NQUNfVEJBKSwgaW9zKEpTQ19JT1NfVEJBKSk7CisKIEBlbmQKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAKaW5kZXggZTE4ZGZk
MjFmZjI4NDAwN2QwMDM5ZTY0MzJkOWVjM2M0ZjFmMzE3Ny4uOWY1ZmRhZmM3ODE5NmZlNDQ4YzE4
ZDA3OTE1ZTA0ZmEzODY4NGFhYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU0NvbnRleHRSZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250
ZXh0UmVmLmNwcApAQCAtMzAsOSArMzAsOSBAQAogI2luY2x1ZGUgIkFQSUNhc3QuaCIKICNpbmNs
dWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCisjaW5j
bHVkZSAiSlNBUElHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0NhbGxiYWNrT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiSlNDbGFzc1JlZi5oIgotI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAj
aW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
U291cmNlUHJvdmlkZXIuaCIKQEAgLTEzOCw3ICsxMzgsNyBAQCBKU0dsb2JhbENvbnRleHRSZWYg
SlNHbG9iYWxDb250ZXh0Q3JlYXRlSW5Hcm91cChKU0NvbnRleHRHcm91cFJlZiBncm91cCwgSlND
bGFzcwogICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0ucHRyKCkpOwogCiAgICAgaWYgKCFnbG9i
YWxPYmplY3RDbGFzcykgewotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
SlNHbG9iYWxPYmplY3Q6OmNyZWF0ZSh2bS5nZXQoKSwgSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0
cnVjdHVyZSh2bS5nZXQoKSwganNOdWxsKCkpKTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IEpTQVBJR2xvYmFsT2JqZWN0OjpjcmVhdGUodm0uZ2V0KCksIEpTQVBJR2xv
YmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUodm0uZ2V0KCksIGpzTnVsbCgpKSk7CiAjaWYgRU5B
QkxFKFJFTU9URV9JTlNQRUNUT1IpCiAgICAgICAgIGlmIChKU1JlbW90ZUluc3BlY3RvckdldElu
c3BlY3Rpb25FbmFibGVkQnlEZWZhdWx0KCkpCiAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPnNl
dFJlbW90ZURlYnVnZ2luZ0VuYWJsZWQodHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTU2NyaXB0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2Ny
aXB0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOTBjYjYwOTA4OGVjODJmNzQ0YWE3MmE3Y2Q3YzFkOGUxMzg1M2M4
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQu
aApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZS5oPgorCisjaWYgSlNDX09C
SkNfQVBJX0VOQUJMRUQKKworTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KKworT0JKQ19DTEFTUyBK
U1ZpcnR1YWxNYWNoaW5lOworCitKU0NfQ0xBU1NfQVZBSUxBQkxFKG1hY29zeChKU0NfTUFDX1RC
QSksIGlvcyhKU0NfSU9TX1RCQSkpCitAaW50ZXJmYWNlIEpTU2NyaXB0IDogTlNPYmplY3QKKwor
LyohCisgQG1ldGhvZAorIEBhYnN0cmFjdCBDcmVhdGUgYSBKU1NjcmlwdCBmb3IgdGhlIHNwZWNp
ZmllZCB2aXJ0dWFsIG1hY2hpbmUuCisgQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIGNvZGUgdG8g
dXNlIHdoZW4gdGhlIHNjcmlwdCBpcyBldmFsdWF0ZWQgYnkgdGhlIEpTIHZtLgorIEBwYXJhbSB2
bSBUaGUgSlNWaXJ0dWFsTWFjaGluZSB0aGUgc2NyaXB0IGNhbiBiZSBldmFsdWF0ZWQgaW4uCisg
QHJlc3VsdCBUaGUgbmV3IHNjcmlwdC4KKyAqLworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNj
cmlwdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGluVmlydHVhbE1hY2hpbmU6KEpTVmly
dHVhbE1hY2hpbmUgKil2bTsKKworLyohCisgQG1ldGhvZAorIEBhYnN0cmFjdCBDcmVhdGUgYSBK
U1NjcmlwdCBmb3IgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIG1hY2hpbmUgd2l0aCBhIHBhdGggdG8g
YSBjb2Rlc2lnbmluZyBhbmQgYnl0ZWNvZGUgY2FjaGluZy4KKyBAcGFyYW0gZmlsZVBhdGggQSBV
UkwgY29udGFpbmluZyB0aGUgcGF0aCB0byBhIEpTIHNvdXJjZSBjb2RlIGZpbGUgb24gZGlzay4K
KyBAcGFyYW0gdm0gVGhlIEpTVmlydHVhbE1hY2hpbmUgdGhlIHNjcmlwdCBjYW4gYmUgZXZhbHVh
dGVkIGluLgorIEBwYXJhbSBjb2RlU2lnbmluZ1BhdGggQSBVUkwgY29udGFpbmluZyB0aGUgcGF0
aCB0byB0aGUgY29kZVNpZ25pbmcgZmlsZSBmb3IgZmlsZVBhdGggb24gZGlzay4KKyBAcGFyYW0g
Y2FjaGVQYXRoIEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBhdGggd2hlcmUgdGhlIFZNIHNob3VsZCBj
YWNoZSBmb3IgZnV0dXJlIGV4ZWN1dGlvbi4KKyBAcmVzdWx0IFRoZSBuZXcgc2NyaXB0LgorIEBk
aXNjdXNzaW9uIHRoZSBmaWxlcyBhdCBmaWxlUGF0aCwgY29kZVNpZ25pbmdQYXRoLCBhbmQgY2Fj
aGVQYXRoIHNob3VsZCBub3QgYmUgZXh0ZXJuYWxseSBtb2RpZmllZCAgZm9yIHRoZSBsaWZlY3lj
bGUgb2Ygdm0uIE5vdGUgdGhhdCBjb2RlU2lnbmluZ1BhdGggYW5kIGNhY2hlUGF0aCBhcmUgbm90
IHVzZWQgY3VycmVudGx5LCBidXQgdGhhdCB3aWxsIGNoYW5nZSBpbiB0aGUgbmVhciBmdXR1cmUu
CisgKi8KKysgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3JpcHRGcm9tVVRGOEZpbGU6KE5TVVJM
ICopZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhD
b2RlU2lnbmluZzoobnVsbGFibGUgTlNVUkwgKiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVD
YWNoZToobnVsbGFibGUgTlNVUkwgKiljYWNoZVBhdGg7CisKK0BlbmQKKworTlNfQVNTVU1FX05P
Tk5VTExfRU5ECisKKyNlbmRpZiAvLyBKU0NfT0JKQ19BUElfRU5BQkxFRApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNTY3JpcHQubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzk2YzQxZWY5ZWNjMzk4NDcwMDZjZmIx
YjY1NzNjNTM0OWQzZmRkZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNTY3JpcHQubW0KQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkpT
U2NyaXB0SW50ZXJuYWwuaCIKKworI2ltcG9ydCAiQVBJQ2FzdC5oIgorI2ltcG9ydCAiSlNDb250
ZXh0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTVmFsdWVQcml2YXRlLmgiCisjaW1wb3J0ICJTeW1i
b2wuaCIKKworI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECisKK0BpbXBsZW1lbnRhdGlvbiBKU1Nj
cmlwdCB7CisgICAgU3RyaW5nIG1fc291cmNlOworfQorCisrIChpbnN0YW5jZXR5cGUpc2NyaXB0
V2l0aFNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2UgaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFs
TWFjaGluZSAqKXZtCit7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBKU1NjcmlwdCAqcmVz
dWx0ID0gW1tKU1NjcmlwdCBhbGxvY10gaW5pdF07CisgICAgcmVzdWx0LT5tX3NvdXJjZSA9IHNv
dXJjZTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3I+
CitzdGF0aWMgYm9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKEZJTEUqIGZpbGUsIFZl
Y3RvciYgYnVmZmVyKQoreworICAgIC8vIFdlIG1pZ2h0IGhhdmUgaW5qZWN0ZWQgInVzZSBzdHJp
Y3QiOyBhdCB0aGUgdG9wLgorICAgIHNpemVfdCBpbml0aWFsU2l6ZSA9IGJ1ZmZlci5zaXplKCk7
CisgICAgaWYgKGZzZWVrKGZpbGUsIDAsIFNFRUtfRU5EKSA9PSAtMSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGxvbmcgYnVmZmVyQ2FwYWNpdHkgPSBmdGVsbChmaWxlKTsKKyAgICBpZiAo
YnVmZmVyQ2FwYWNpdHkgPT0gLTEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZnNl
ZWsoZmlsZSwgMCwgU0VFS19TRVQpID09IC0xKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
YnVmZmVyLnJlc2l6ZShidWZmZXJDYXBhY2l0eSArIGluaXRpYWxTaXplKTsKKyAgICBzaXplX3Qg
cmVhZFNpemUgPSBmcmVhZChidWZmZXIuZGF0YSgpICsgaW5pdGlhbFNpemUsIDEsIGJ1ZmZlci5z
aXplKCksIGZpbGUpOworICAgIHJldHVybiByZWFkU2l6ZSA9PSBidWZmZXIuc2l6ZSgpIC0gaW5p
dGlhbFNpemU7Cit9CisKK3N0YXRpYyBib29sIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUo
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgVmVjdG9yPGNoYXI+JiBidWZmZXIpCit7CisgICAgRklM
RSogZiA9IGZvcGVuKGZpbGVOYW1lLnV0ZjgoKS5kYXRhKCksICJyYiIpOworICAgIGlmICghZikg
eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBvcGVuIGZpbGU6ICVzXG4iLCBm
aWxlTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGJvb2wgcmVzdWx0ID0gZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShmLCBidWZmZXIp
OworICAgIGZjbG9zZShmKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworKyAoaW5zdGFu
Y2V0eXBlKXNjcmlwdEZyb21VVEY4RmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNo
aW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0gd2l0aENvZGVTaWduaW5nOihOU1VSTCAqKWNvZGVT
aWduaW5nUGF0aCBhbmRCeXRlY29kZUNhY2hlOihOU1VSTCAqKWNhY2hlUGF0aAoreworICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBjaGVjayBjb2RlU2lnbmluZy4KKyAgICBVTlVTRURfUEFSQU0o
Y29kZVNpZ25pbmdQYXRoKTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWN0dWFsbHkgY2Fj
aGUgYnl0ZWNvZGUuCisgICAgVU5VU0VEX1BBUkFNKGNhY2hlUGF0aCk7CisgICAgVU5VU0VEX1BB
UkFNKHZtKTsKKyAgICBVUkwgZmlsZVBhdGhVUkwoW2ZpbGVQYXRoIGFic29sdXRlVVJMXSk7Cisg
ICAgaWYgKCFmaWxlUGF0aFVSTC5pc0xvY2FsRmlsZSgpKQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBtbWFwIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBp
bnN0ZWFkIG9mIGNvcHlpbmcgaXQgaW50byBkaXJ0eSBtZW1vcnkuCisgICAgVmVjdG9yPGNoYXI+
IGJ1ZmZlcjsKKyAgICBpZiAoIWZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZmlsZVBhdGhV
UkwuZmlsZVN5c3RlbVBhdGgoKSwgYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IEpTU2NyaXB0ICpyZXN1bHQgPSBbW0pTU2NyaXB0IGFsbG9jXSBpbml0XTsKKyAgICByZXN1bHQt
Pm1fc291cmNlID0gU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhidWZmZXIuZGF0
YSgpLCBidWZmZXIuc2l6ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitjb25zdCBTdHJp
bmcmIGdldEpTU2NyaXB0U291cmNlQ29kZShKU1NjcmlwdCAqbW9kdWxlKSB7IHJldHVybiBtb2R1
bGUtPm1fc291cmNlOyB9CisKK0BlbmQKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTRmZGZhZTAwYzc0NmI5OTU4
MmI5NmM4MTkwMDdlYmRkOGJlNWE4MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lt
cG9ydCAiSlNTY3JpcHQuaCIKKyNpbXBvcnQgIlNvdXJjZUNvZGUuaCIKKworCitjb25zdCBTdHJp
bmcmIGdldEpTU2NyaXB0U291cmNlQ29kZShKU1NjcmlwdCAqKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZUludGVybmFsLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTVmFsdWVJbnRlcm5hbC5oCmluZGV4IDRmMWE4ZjY5Y2JmY2MyOWFlYjI2NzQ3
MzgxZDhkNWY1ZTgxYmFlYWEuLjU0Yjc1NWVmZmZlNmVkMjRhNWMzMDIyYjdkNGMzYTE4NTAwYjAx
ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZUludGVybmFs
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlSW50ZXJuYWwuaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw4
ICsyNiw3IEBACiAjaWZuZGVmIEpTVmFsdWVJbnRlcm5hbF9oCiAjZGVmaW5lIEpTVmFsdWVJbnRl
cm5hbF9oCiAKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+Ci0jaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9K
U1ZhbHVlUHJpdmF0ZS5oPgogCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgKaW5k
ZXggNWNhOWE3ZjRhMTA3MDQ0ZDYwOWIxMTI3N2JlODk3NmE0MzY3YWE5Yi4uOTEyMmVkNDlhNGVh
MWFhNDllYzY2N2ZlZjY2MjdmYzQzYjc3NzE2ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCkBAIC00Niw4ICs0Niw4IEBA
IEpTQ29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZpcnR1YWxNYWNoaW5lKEpTVmlydHVhbE1h
Y2hpbmUgKik7CiAKIC0gKEpTQ29udGV4dCAqKWNvbnRleHRGb3JHbG9iYWxDb250ZXh0UmVmOihK
U0dsb2JhbENvbnRleHRSZWYpZ2xvYmFsQ29udGV4dDsKIC0gKHZvaWQpYWRkQ29udGV4dDooSlND
b250ZXh0ICopd3JhcHBlciBmb3JHbG9iYWxDb250ZXh0UmVmOihKU0dsb2JhbENvbnRleHRSZWYp
Z2xvYmFsQ29udGV4dDsKLQogQGVuZAorCiAjZW5kaWYgLy8gZGVmaW5lZChfX09CSkNfXykKIAog
dm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRvciYs
IHZvaWQqIHJvb3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0
cy90ZXN0YXBpLm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1t
CmluZGV4IDM3ZTEzODVjOGM0ODRlZmFlOGE5YzNmOTJlMTM1Y2E3M2Y5NTkxOTIuLjQzNWZkYmIz
NmQyNDQ2ZTg1ZGI1MzEzNjMzY2Q3NjRmZWY3OTk4YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0KQEAgLTMxLDcgKzMxLDkgQEAKICNpbXBvcnQgIkRGR1dv
cmtsaXN0LmgiCiAjaW1wb3J0ICJEYXRlVGVzdHMuaCIKICNpbXBvcnQgIkpTQ2FzdC5oIgorI2lt
cG9ydCAiSlNDb250ZXh0UHJpdmF0ZS5oIgogI2ltcG9ydCAiSlNFeHBvcnRUZXN0cy5oIgorI2lt
cG9ydCAiSlNTY3JpcHQuaCIKICNpbXBvcnQgIkpTVmFsdWVQcml2YXRlLmgiCiAjaW1wb3J0ICJK
U1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKICNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmVQcml2
YXRlLmgiCkBAIC0xODEyLDEyICsxODE0LDI0OCBAQCBzdGF0aWMgdm9pZCBwYXJhbGxlbFByb21p
c2VSZXNvbHZlVGVzdCgpCiAgICAgfQogfQogCit0eXBlZGVmIEpTVmFsdWUgKiheUmVzb2x2ZUJs
b2NrKShKU0NvbnRleHQgKiwgSlNWYWx1ZSAqLCBKU1NjcmlwdCAqKTsKK3R5cGVkZWYgdm9pZCAo
XkZldGNoQmxvY2spKEpTQ29udGV4dCAqLCBKU1ZhbHVlICosIEpTVmFsdWUgKiwgSlNWYWx1ZSAq
KTsKKworQGludGVyZmFjZSBKU0NvbnRleHRGZXRjaERlbGVnYXRlIDogSlNDb250ZXh0IDxKU01v
ZHVsZUxvYWRlckRlbGVnYXRlPgorCisrIChpbnN0YW5jZXR5cGUpY29udGV4dFdpdGhCbG9ja0Zv
ckZldGNoOihGZXRjaEJsb2NrKWJsb2NrOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBKU0Nv
bnRleHRGZXRjaERlbGVnYXRlIHsKKyAgICBGZXRjaEJsb2NrIG1fZmV0Y2hCbG9jazsKK30KKwor
KyAoaW5zdGFuY2V0eXBlKWNvbnRleHRXaXRoQmxvY2tGb3JGZXRjaDooRmV0Y2hCbG9jaylibG9j
aworeworICAgIGF1dG8gKnJlc3VsdCA9IFtbSlNDb250ZXh0RmV0Y2hEZWxlZ2F0ZSBhbGxvY10g
aW5pdF07CisgICAgcmVzdWx0LT5tX2ZldGNoQmxvY2sgPSBibG9jazsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCistICh2b2lkKWNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQgZmV0Y2hNb2R1
bGVGb3JJZGVudGlmaWVyOihKU1ZhbHVlICopaWRlbnRpZmllciB3aXRoUmVzb2x2ZUhhbmRsZXI6
KEpTVmFsdWUgKilyZXNvbHZlIGFuZFJlamVjdEhhbmRsZXI6KEpTVmFsdWUgKilyZWplY3QKK3sK
KyAgICBtX2ZldGNoQmxvY2soY29udGV4dCwgaWRlbnRpZmllciwgcmVzb2x2ZSwgcmVqZWN0KTsK
K30KKworQGVuZAorCitzdGF0aWMgdm9pZCBjaGVja01vZHVsZUNvZGVSYW4oSlNDb250ZXh0ICpj
b250ZXh0LCBKU1ZhbHVlICpwcm9taXNlLCBKU1ZhbHVlICpleHBlY3RlZCkKK3sKKyAgICBfX2Js
b2NrIEJPT0wgcHJvbWlzZVdhc1Jlc29sdmVkID0gZmFsc2U7CisgICAgW3Byb21pc2UgaW52b2tl
TWV0aG9kOkAidGhlbiIgd2l0aEFyZ3VtZW50czpAW14oSlNWYWx1ZSAqZXhwb3J0VmFsdWUpIHsK
KyAgICAgICAgcHJvbWlzZVdhc1Jlc29sdmVkID0gdHJ1ZTsKKyAgICAgICAgY2hlY2tSZXN1bHQo
QCJtb2R1bGUgZXhwb3J0ZWQgdmFsdWUgJ2V4cCcgaXMgbnVsbCIsIFtleHBvcnRWYWx1ZVtAImV4
cCJdIGlzRXF1YWxUb09iamVjdDpleHBlY3RlZF0pOworICAgICAgICBjaGVja1Jlc3VsdChAInJh
biBpcyAlQCIsIFtjb250ZXh0W0AicmFuIl0gaXNFcXVhbFRvT2JqZWN0OmV4cGVjdGVkXSk7Cisg
ICAgfSwgXihKU1ZhbHVlICplcnJvcikgeworICAgICAgICBOU0xvZyhAIiVAIiwgW2Vycm9yIHRv
U3RyaW5nXSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAibW9kdWxlIGdyYXBoIHdhcyByZXNvbHZl
ZCBhcyBleHBlY3RlZCIsIE5PKTsKKyAgICB9XV07CisgICAgY2hlY2tSZXN1bHQoQCJQcm9taXNl
IHdhcyByZXNvbHZlZCIsIHByb21pc2VXYXNSZXNvbHZlZCk7Cit9CisKK3N0YXRpYyB2b2lkIGNo
ZWNrTW9kdWxlV2FzUmVqZWN0ZWQoSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICpwcm9taXNl
KQoreworICAgIF9fYmxvY2sgQk9PTCBwcm9taXNlV2FzUmVqZWN0ZWQgPSBmYWxzZTsKKyAgICBb
cHJvbWlzZSBpbnZva2VNZXRob2Q6QCJ0aGVuIiB3aXRoQXJndW1lbnRzOkBbXigpIHsKKyAgICAg
ICAgY2hlY2tSZXN1bHQoQCJtb2R1bGUgd2FzIHJlamVjdGVkIGFzIGV4cGVjdGVkIiwgTk8pOwor
ICAgIH0sIF4oSlNWYWx1ZSAqZXJyb3IpIHsKKyAgICAgICAgcHJvbWlzZVdhc1JlamVjdGVkID0g
dHJ1ZTsKKyAgICAgICAgTlNMb2coQCIlQCIsIFtlcnJvciB0b1N0cmluZ10pOworICAgICAgICBj
aGVja1Jlc3VsdChAIm1vZHVsZSBncmFwaCB3YXMgcmVqZWN0ZWQgd2l0aCBlcnJvciIsICFbZXJy
b3IgaXNFcXVhbFdpdGhUeXBlQ29lcmNpb25Ub09iamVjdDpbSlNWYWx1ZSB2YWx1ZVdpdGhOdWxs
SW5Db250ZXh0OmNvbnRleHRdXSk7CisgICAgfV1dOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmV0
Y2goKQoreworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250ZXh0ID0g
W0pTQ29udGV4dEZldGNoRGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl4oSlNDb250
ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICppZGVudGlmaWVyLCBKU1ZhbHVlICpyZXNvbHZlLCBKU1Zh
bHVlICpyZWplY3QpIHsKKyAgICAgICAgICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmpl
Y3Q6QCJmaWxlOi8vL2RpcmVjdG9yeS9iYXIuanMiXSkKKyAgICAgICAgICAgICAgICBbcmVzb2x2
ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNlOkAiaW1wb3J0
IFwiLi4vZm9vLmpzXCI7IGV4cG9ydCBsZXQgZXhwID0gbnVsbDsiIGluVmlydHVhbE1hY2hpbmU6
W2NvbnRleHQgdmlydHVhbE1hY2hpbmVdXV1dOworICAgICAgICAgICAgZWxzZSBpZiAoW2lkZW50
aWZpZXIgaXNFcXVhbFRvT2JqZWN0OkAiZmlsZTovLy9mb28uanMiXSkKKyAgICAgICAgICAgICAg
ICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNl
OkAiZ2xvYmFsVGhpcy5yYW4gPSBudWxsOyIgaW5WaXJ0dWFsTWFjaGluZTpbY29udGV4dCB2aXJ0
dWFsTWFjaGluZV1dXV07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgW3JlamVj
dCBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3Nh
Z2U6QCJXZWlyZCBwYXRoIiBpbkNvbnRleHQ6Y29udGV4dF1dXTsKKyAgICAgICAgfV07CisgICAg
ICAgIGNvbnRleHQubW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBjb250ZXh0OworICAgICAgICBKU1Zh
bHVlICpwcm9taXNlID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy4vYmFyLmpz
Jyk7IiB3aXRoU291cmNlVVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvZGlyZWN0b3J5IiBp
c0RpcmVjdG9yeTpZRVNdXTsKKyAgICAgICAgSlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVlIHZhbHVl
V2l0aE51bGxJbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihj
b250ZXh0LCBwcm9taXNlLCBudWxsKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGZXRj
aFdpdGhUd29DeWNsZSgpCit7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIGF1dG8g
KmNvbnRleHQgPSBbSlNDb250ZXh0RmV0Y2hEZWxlZ2F0ZSBjb250ZXh0V2l0aEJsb2NrRm9yRmV0
Y2g6XihKU0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWUgKmlkZW50aWZpZXIsIEpTVmFsdWUgKnJl
c29sdmUsIEpTVmFsdWUgKnJlamVjdCkgeworICAgICAgICAgICAgaWYgKFtpZGVudGlmaWVyIGlz
RXF1YWxUb09iamVjdDpAImZpbGU6Ly8vZGlyZWN0b3J5L2Jhci5qcyJdKQorICAgICAgICAgICAg
ICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlwdFdpdGhTb3Vy
Y2U6QCJpbXBvcnQgeyBuIH0gZnJvbSBcIi4uL2Zvby5qc1wiOyBleHBvcnQgbGV0IGV4cCA9IG47
IiBpblZpcnR1YWxNYWNoaW5lOltjb250ZXh0IHZpcnR1YWxNYWNoaW5lXV1dXTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZpbGU6Ly8vZm9vLmpz
Il0pCisgICAgICAgICAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3Jp
cHQgc2NyaXB0V2l0aFNvdXJjZTpAImltcG9ydCBcImRpcmVjdG9yeS9iYXIuanNcIjsgZ2xvYmFs
VGhpcy5yYW4gPSBudWxsOyBleHBvcnQgbGV0IG4gPSBudWxsOyIgaW5WaXJ0dWFsTWFjaGluZTpb
Y29udGV4dCB2aXJ0dWFsTWFjaGluZV1dXV07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgW3JlamVjdCBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vy
cm9yRnJvbU1lc3NhZ2U6QCJXZWlyZCBwYXRoIiBpbkNvbnRleHQ6Y29udGV4dF1dXTsKKyAgICAg
ICAgfV07CisgICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBjb250ZXh0Owor
ICAgICAgICBKU1ZhbHVlICpwcm9taXNlID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBv
cnQoJy4vYmFyLmpzJyk7IiB3aXRoU291cmNlVVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIv
ZGlyZWN0b3J5IiBpc0RpcmVjdG9yeTpZRVNdXTsKKyAgICAgICAgSlNWYWx1ZSAqbnVsbCA9IFtK
U1ZhbHVlIHZhbHVlV2l0aE51bGxJbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNoZWNrTW9k
dWxlQ29kZVJhbihjb250ZXh0LCBwcm9taXNlLCBudWxsKTsKKyAgICB9Cit9CisKKworc3RhdGlj
IHZvaWQgdGVzdEZldGNoV2l0aFRocmVlQ3ljbGUoKQoreworICAgIEBhdXRvcmVsZWFzZXBvb2wg
eworICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZldGNoRGVsZWdhdGUgY29udGV4
dFdpdGhCbG9ja0ZvckZldGNoOl4oSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICppZGVudGlm
aWVyLCBKU1ZhbHVlICpyZXNvbHZlLCBKU1ZhbHVlICpyZWplY3QpIHsKKyAgICAgICAgICAgIGlm
IChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL2RpcmVjdG9yeS9iYXIuanMi
XSkKKyAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1Njcmlw
dCBzY3JpcHRXaXRoU291cmNlOkAiaW1wb3J0IHsgbiB9IGZyb20gXCIuLi9mb28uanNcIjsgZXhw
b3J0IGxldCBmb28gPSBuOyIgaW5WaXJ0dWFsTWFjaGluZTpbY29udGV4dCB2aXJ0dWFsTWFjaGlu
ZV1dXV07CisgICAgICAgICAgICBlbHNlIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6
QCJmaWxlOi8vL2Zvby5qcyJdKQorICAgICAgICAgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJn
dW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlwdFdpdGhTb3VyY2U6QCJpbXBvcnQgXCJvdGhlckRpcmVj
dG9yeS9iYXouanNcIjsgZXhwb3J0IGxldCBuID0gbnVsbDsiIGluVmlydHVhbE1hY2hpbmU6W2Nv
bnRleHQgdmlydHVhbE1hY2hpbmVdXV1dOworICAgICAgICAgICAgZWxzZSBpZiAoW2lkZW50aWZp
ZXIgaXNFcXVhbFRvT2JqZWN0OkAiZmlsZTovLy9vdGhlckRpcmVjdG9yeS9iYXouanMiXSkKKyAg
ICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3Jp
cHRXaXRoU291cmNlOkAiaW1wb3J0IHsgZm9vIH0gZnJvbSBcIi4uL2RpcmVjdG9yeS9iYXIuanNc
IjsgZ2xvYmFsVGhpcy5yYW4gPSBudWxsOyBleHBvcnQgbGV0IGV4cCA9IGZvbzsiIGluVmlydHVh
bE1hY2hpbmU6W2NvbnRleHQgdmlydHVhbE1hY2hpbmVdXV1dOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIFtyZWplY3QgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNWYWx1ZSB2YWx1
ZVdpdGhOZXdFcnJvckZyb21NZXNzYWdlOkAiV2VpcmQgcGF0aCIgaW5Db250ZXh0OmNvbnRleHRd
XV07CisgICAgICAgIH1dOworICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0g
Y29udGV4dDsKKyAgICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2Ny
aXB0OkAiaW1wb3J0KCcuLi9vdGhlckRpcmVjdG9yeS9iYXouanMnKTsiIHdpdGhTb3VyY2VVUkw6
W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpAIi9kaXJlY3RvcnkiIGlzRGlyZWN0b3J5OllFU11dOwor
ICAgICAgICBKU1ZhbHVlICpudWxsID0gW0pTVmFsdWUgdmFsdWVXaXRoTnVsbEluQ29udGV4dDpj
b250ZXh0XTsKKyAgICAgICAgY2hlY2tNb2R1bGVDb2RlUmFuKGNvbnRleHQsIHByb21pc2UsIG51
bGwpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGVzdExvYWRlclJlc29sdmVzQWJzb2x1dGVT
Y3JpcHRVUkwoKQoreworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250
ZXh0ID0gW0pTQ29udGV4dEZldGNoRGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl4o
SlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICppZGVudGlmaWVyLCBKU1ZhbHVlICpyZXNvbHZl
LCBKU1ZhbHVlICpyZWplY3QpIHsKKyAgICAgICAgICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFs
VG9PYmplY3Q6QCJmaWxlOi8vL2RpcmVjdG9yeS9iYXIuanMiXSkKKyAgICAgICAgICAgICAgICBb
cmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNlOkAi
ZXhwb3J0IGxldCBleHAgPSBudWxsOyBnbG9iYWxUaGlzLnJhbiA9IG51bGw7IiBpblZpcnR1YWxN
YWNoaW5lOltjb250ZXh0IHZpcnR1YWxNYWNoaW5lXV1dXTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBbcmVqZWN0IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTVmFsdWUgdmFsdWVX
aXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpAIldlaXJkIHBhdGgiIGluQ29udGV4dDpjb250ZXh0XV1d
OworICAgICAgICB9XTsKKyAgICAgICAgY29udGV4dC5tb2R1bGVMb2FkZXJEZWxlZ2F0ZSA9IGNv
bnRleHQ7CisgICAgICAgIEpTVmFsdWUgKnByb21pc2UgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlw
dDpAImltcG9ydCgnL2RpcmVjdG9yeS9iYXIuanMnKTsiXTsKKyAgICAgICAgSlNWYWx1ZSAqbnVs
bCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE51bGxJbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNo
ZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCBwcm9taXNlLCBudWxsKTsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RMb2FkZXJSZWplY3RzTmlsU2NyaXB0VVJMKCkKK3sKKyAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKKyAgICAgICAgYXV0byAqY29udGV4dCA9IFtKU0NvbnRleHRGZXRjaERlbGVn
YXRlIGNvbnRleHRXaXRoQmxvY2tGb3JGZXRjaDpeKEpTQ29udGV4dCAqLCBKU1ZhbHVlICosIEpT
VmFsdWUgKiwgSlNWYWx1ZSAqKSB7CisgICAgICAgICAgICBjaGVja1Jlc3VsdChAIkNvZGUgaXMg
bm90IHJ1biIsIE5PKTsKKyAgICAgICAgfV07CisgICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVy
RGVsZWdhdGUgPSBjb250ZXh0OworICAgICAgICBKU1ZhbHVlICpwcm9taXNlID0gW2NvbnRleHQg
ZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy4uL290aGVyRGlyZWN0b3J5L2Jhei5qcycpOyJdOwor
ICAgICAgICBjaGVja01vZHVsZVdhc1JlamVjdGVkKGNvbnRleHQsIHByb21pc2UpOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgdGVzdExvYWRlclJlamVjdHNGYWlsZWRGZXRjaCgpCit7CisgICAg
QGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0RmV0
Y2hEZWxlZ2F0ZSBjb250ZXh0V2l0aEJsb2NrRm9yRmV0Y2g6XihKU0NvbnRleHQgKmNvbnRleHQs
IEpTVmFsdWUgKiwgSlNWYWx1ZSAqLCBKU1ZhbHVlICpyZWplY3QpIHsKKyAgICAgICAgICAgIFty
ZWplY3QgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZyb21N
ZXNzYWdlOkAiTm9wZSIgaW5Db250ZXh0OmNvbnRleHRdXV07CisgICAgICAgIH1dOworICAgICAg
ICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAgICAgSlNWYWx1
ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0KCcvb3RoZXJEaXJl
Y3RvcnkvYmF6LmpzJyk7Il07CisgICAgICAgIGNoZWNrTW9kdWxlV2FzUmVqZWN0ZWQoY29udGV4
dCwgcHJvbWlzZSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB0ZXN0SW1wb3J0TW9kdWxlVHdp
Y2UoKQoreworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250ZXh0ID0g
W0pTQ29udGV4dEZldGNoRGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl4oSlNDb250
ZXh0ICogY29udGV4dCwgSlNWYWx1ZSAqLCBKU1ZhbHVlICpyZXNvbHZlLCBKU1ZhbHVlICopIHsK
KyAgICAgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlw
dFdpdGhTb3VyY2U6QCJyYW4rKzsgZXhwb3J0IGxldCBleHAgPSAxOyIgaW5WaXJ0dWFsTWFjaGlu
ZTpbY29udGV4dCB2aXJ0dWFsTWFjaGluZV1dXV07CisgICAgICAgIH1dOworICAgICAgICBjb250
ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAgICAgY29udGV4dFtAInJh
biJdID0gQCgwKTsKKyAgICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRl
U2NyaXB0OkAiaW1wb3J0KCcvYmF6LmpzJyk7Il07CisgICAgICAgIEpTVmFsdWUgKnByb21pc2Uy
ID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy9iYXouanMnKTsiXTsKKyAgICAg
ICAgSlNWYWx1ZSAqb25lID0gW0pTVmFsdWUgdmFsdWVXaXRoSW50MzI6MSBpbkNvbnRleHQ6Y29u
dGV4dF07CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCBwcm9taXNlLCBvbmUp
OworICAgICAgICBjaGVja01vZHVsZUNvZGVSYW4oY29udGV4dCwgcHJvbWlzZTIsIG9uZSk7Cisg
ICAgfQorfQorCitAaW50ZXJmYWNlIEpTQ29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0ZSA6IEpTQ29u
dGV4dCA8SlNNb2R1bGVMb2FkZXJEZWxlZ2F0ZT4KKworKyAoaW5zdGFuY2V0eXBlKW5ld0NvbnRl
eHQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEpTQ29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0
ZSB7Cit9CisKKysgKGluc3RhbmNldHlwZSluZXdDb250ZXh0Cit7CisgICAgYXV0byAqcmVzdWx0
ID0gW1tKU0NvbnRleHRGaWxlTG9hZGVyRGVsZWdhdGUgYWxsb2NdIGluaXRdOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3N0YXRpYyBOU1VSTCAqcmVzb2x2ZVBhdGhUb1NjcmlwdHMoKQorewor
ICAgIE5TU3RyaW5nICphcmcwID0gTlNQcm9jZXNzSW5mby5wcm9jZXNzSW5mby5hcmd1bWVudHNb
MF07CisgICAgTlNVUkwgKmJhc2U7CisgICAgaWYgKFthcmcwIGhhc1ByZWZpeDpAIi8iXSkKKyAg
ICAgICAgYmFzZSA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6YXJnMCBpc0RpcmVjdG9yeTpOT107
CisgICAgZWxzZSB7CisgICAgICAgIGNvbnN0IHNpemVfdCBtYXhMZW5ndGggPSAxMDAwMDsKKyAg
ICAgICAgY2hhciBjd2RbbWF4TGVuZ3RoXTsKKyAgICAgICAgaWYgKCFnZXRjd2QoY3dkLCBtYXhM
ZW5ndGgpKSB7CisgICAgICAgICAgICBOU0xvZyhAImdldGN3ZCBlcnJvcmVkIHdpdGggY29kZTog
JXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQor
ICAgICAgICBOU1VSTCAqY3dkVVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIiVzIiwgY3dkXV07CisgICAgICAgIGJhc2UgPSBbTlNVUkwgZmls
ZVVSTFdpdGhQYXRoOmFyZzAgaXNEaXJlY3Rvcnk6Tk8gcmVsYXRpdmVUb1VSTDpjd2RVUkxdOwor
ICAgIH0KKyAgICByZXR1cm4gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpAIi4vdGVzdGFwaVNjcmlw
dHMvIiBpc0RpcmVjdG9yeTpZRVMgcmVsYXRpdmVUb1VSTDpiYXNlXTsKK30KKworLSAodm9pZClj
b250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IGZldGNoTW9kdWxlRm9ySWRlbnRpZmllcjooSlNW
YWx1ZSAqKWlkZW50aWZpZXIgd2l0aFJlc29sdmVIYW5kbGVyOihKU1ZhbHVlICopcmVzb2x2ZSBh
bmRSZWplY3RIYW5kbGVyOihKU1ZhbHVlICopcmVqZWN0Cit7CisgICAgTlNVUkwgKmZpbGVQYXRo
ID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W2lkZW50aWZpZXIgdG9TdHJpbmddXTsKKyAgICBhdXRv
ICpzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0RnJvbVVURjhGaWxlOmZpbGVQYXRoIGluVmlydHVh
bE1hY2hpbmU6W2NvbnRleHQgdmlydHVhbE1hY2hpbmVdIHdpdGhDb2RlU2lnbmluZzpuaWwgYW5k
Qnl0ZWNvZGVDYWNoZTpuaWxdOworICAgIGlmIChzY3JpcHQpCisgICAgICAgIFtyZXNvbHZlIGNh
bGxXaXRoQXJndW1lbnRzOkBbc2NyaXB0XV07CisgICAgZWxzZQorICAgICAgICBbcmVqZWN0IGNh
bGxXaXRoQXJndW1lbnRzOkBbW0pTVmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpA
IlVuYWJsZSB0byBjcmVhdGUgU2NyaXB0IiBpbkNvbnRleHQ6Y29udGV4dF1dXTsKK30KKworQGVu
ZAorCitzdGF0aWMgdm9pZCB0ZXN0TG9hZEJhc2ljRmlsZSgpCit7CisgICAgQGF1dG9yZWxlYXNl
cG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0RmlsZUxvYWRlckRlbGVn
YXRlIG5ld0NvbnRleHRdOworICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0g
Y29udGV4dDsKKyAgICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2Ny
aXB0OkAiaW1wb3J0KCcuL2Jhc2ljLmpzJyk7IiB3aXRoU291cmNlVVJMOnJlc29sdmVQYXRoVG9T
Y3JpcHRzKCldOworICAgICAgICBKU1ZhbHVlICpudWxsID0gW0pTVmFsdWUgdmFsdWVXaXRoTnVs
bEluQ29udGV4dDpjb250ZXh0XTsKKyAgICAgICAgY2hlY2tNb2R1bGVDb2RlUmFuKGNvbnRleHQs
IHByb21pc2UsIG51bGwpOworICAgIH0KK30KKwogdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSgpCiB7
CiAgICAgTlNMb2coQCJUZXN0aW5nIE9iamVjdGl2ZS1DIEFQSSIpOworCiAgICAgY2hlY2tOZWdh
dGl2ZU5TSW50ZWdlcnMoKTsKICAgICBydW5KSVRUaHJlYWRMaW1pdFRlc3RzKCk7CiAKKyAgICB0
ZXN0TG9hZGVyUmVzb2x2ZXNBYnNvbHV0ZVNjcmlwdFVSTCgpOworICAgIHRlc3RGZXRjaCgpOwor
ICAgIHRlc3RGZXRjaFdpdGhUd29DeWNsZSgpOworICAgIHRlc3RGZXRjaFdpdGhUaHJlZUN5Y2xl
KCk7CisgICAgdGVzdEltcG9ydE1vZHVsZVR3aWNlKCk7CisKKyAgICB0ZXN0TG9hZGVyUmVqZWN0
c05pbFNjcmlwdFVSTCgpOworICAgIHRlc3RMb2FkZXJSZWplY3RzRmFpbGVkRmV0Y2goKTsKKwor
ICAgIC8vIEZpbGUgbG9hZGluZworICAgIHRlc3RMb2FkQmFzaWNGaWxlKCk7CisKICAgICBwcm9t
aXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlc29sdmVFYWdlcik7CiAgICAgcHJvbWlzZVdp
dGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZWplY3RFYWdlcik7CiAgICAgcHJvbWlzZVdpdGhFeGVj
dXRvcihSZXNvbHV0aW9uOjpSZXNvbHZlTGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzL2Jhc2ljLmpzIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy9iYXNpYy5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
NTI4YzQ5Y2MyYTc0ZTY2OTkyNjZiMmM4YTJjN2QxMGRhNzc3MjM4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy9iYXNpYy5q
cwpAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKK2V4cG9ydCBsZXQgZXhwID0gbnVsbDsKK2dsb2JhbFRoaXMucmFuID0gbnVsbDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjNlZjFjNDIzODBiM2NlZjJmMDBmYWM2
NThlOTJlOWQ2ZTc5OWYwMy4uNjM4YmQ3MTBlNjgzZTE2N2NhZTkxYzUwM2I0MThlMjRhY2ZmMmUy
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwNTcsNiArMTA1Nyw4IEBACiAJ
CTUzOUZCOEJBMUM5OURBN0MwMDk0MEZBMSAvKiBKU0FycmF5SW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM5RkI4QjkxQzk5REE3QzAwOTQw
RkExIC8qIEpTQXJyYXlJbmxpbmVzLmggKi87IH07CiAJCTUzQjRCRDEyMUY2OEIzMjUwMEQyQkVB
MyAvKiBXYXNtT3BzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzNCMTVERTFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzQjYwMUVDMjAzNEI4QzUwMDZC
RTY2NyAvKiBKU0Nhc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzQjYwMUVCMjAzNEI4QzUwMDZCRTY2NyAvKiBKU0Nhc3QuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1M0MzRDVFNTIxRUNFNzcyMDA4
N0ZERkMgLyogYmFzaWMuanMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0MzRDVFNDIxRUNFNkNFMDA4N0ZERkMgLyogYmFzaWMuanMg
Ki87IH07CisJCTUzQzRGNjZCMjFCMUE0MDkwMDJGRDAwOSAvKiBKU0FQSUdsb2JhbE9iamVjdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNDNEY2NkEy
MUIxQTQwOTAwMkZEMDA5IC8qIEpTQVBJR2xvYmFsT2JqZWN0LmggKi87IH07CiAJCTUzQzZGRUVG
MUU4QURGQTkwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0M2RkVFRTFFOEFERkE5MDBCMTg0MjUgLyog
V2FzbU9wY29kZU9yaWdpbi5oICovOyB9OwogCQk1M0NBNzMwQTFFQTUzM0Q4MDA3NjA0OUQgLyog
V2FzbUJCUVBsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzQ0E3MzA4MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxhbi5oICovOyB9OwogCQk1
M0Q0NDREQzFEQUYwOEFCMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Q0NDREQjFEQUYwOEFCMDBC
OTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmggKi87IH07CkBAIC0xMDY1LDYgKzEwNjcsOCBA
QAogCQk1M0U5RTBBQzFFQUU4M0RGMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0U5RTBBQTFFQUU4
M0RFMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmggKi87IH07CiAJCTUzRTlFMEFGMUVB
RUM0NTcwMEZFRTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRTlFMEFFMUVBRUM0NTcwMEZFRTI1MSAvKiBXYXNt
VGllclVwQ291bnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1M0VBRkUyRjIwOERGQUI0MDA3RDUyNEIgLyogdGVzdGFwaS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzFENEUxOTFGNTlDREQyMDBF
QzgzNkMgLyogdGVzdGFwaS5jcHAgKi87IH07CisJCTUzRUUwMUI2MjE4RjY5MTYwMEFEMUY4RCAv
KiBKU1NjcmlwdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTNFRTAxQjUyMThGNjkwRjAwQUQxRjhEIC8qIEpTU2NyaXB0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTNFRTAxQjgyMThGN0VGRjAwQUQx
RjhEIC8qIEpTU2NyaXB0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzRUUwMUI3MjE4RjdFRkYwMEFEMUY4RCAvKiBKU1NjcmlwdEludGVy
bmFsLmggKi87IH07CiAJCTUzRjExRjQxMjA5MTM4RDcwMEU0MTFBNyAvKiBKU0ltbXV0YWJsZUJ1
dHRlcmZseS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTNGMTFGNDAyMDkxMzhENzAwRTQxMUE3IC8qIEpTSW1tdXRhYmxlQnV0dGVyZmx5LmggKi87IH07
CiAJCTUzRjQwRTg1MUQ1OEY5NzcwMDk5QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTg0MUQ1OEY5NzcwMDk5
QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCAqLzsgfTsKIAkJNTNGNDBFOEIxRDU5MDFCQjAwOTlBMUI2
IC8qIFdhc21GdW5jdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTNGNDBFOEExRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBh
cnNlci5oICovOyB9OwpAQCAtMTIxOSw3ICsxMjIzLDcgQEAKIAkJODZFM0M2MTUxNjdCQUJENzAw
NkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjBGMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZpcnR1YWxN
YWNoaW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9Owog
CQk4NkUzQzYxNzE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjA5MTY3QkFCODcw
MDZENzYwQSAvKiBKU0NvbnRleHRJbnRlcm5hbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2RTNDNjE5MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dy
YXBwZXJNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg2RTNDNjBDMTY3QkFCODcwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAuaCAqLzsgfTsKLQkJODZF
M0M2MUIxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MEUxNjdCQUI4NzAwNkQ3NjBB
IC8qIEpTVmFsdWVJbnRlcm5hbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTg2RTNDNjFCMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZhbHVlSW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTND
NjBFMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZhbHVlSW50ZXJuYWwuaCAqLzsgfTsKIAkJODZFM0M2
MUQxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MTExNjdCQUI4NzAw
NkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2RUM5REM1MTMyOERGODIwMDJCMkFENyAv
KiBERkdCeXRlQ29kZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODZFQzlEQjUxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2Vy
LmggKi87IH07CiAJCTg2RUM5REM2MTMyOERGODIwMDJCMkFENyAvKiBERkdHZW5lcmF0aW9uSW5m
by5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQzlE
QjYxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVyYXRpb25JbmZvLmggKi87IH07CkBAIC0yMDAz
LDkgKzIwMDcsMTAgQEAKIAkJNURCQjE1MTExMzFEMEIxMzAwNTZBRDM2IC8qIENvcHkgU3VwcG9y
dCBTY3JpcHQgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlOwogCQkJYnVp
bGRBY3Rpb25NYXNrID0gMTI7Ci0JCQlkc3RQYXRoID0gIiI7CisJCQlkc3RQYXRoID0gdGVzdGFw
aVNjcmlwdHM7CiAJCQlkc3RTdWJmb2xkZXJTcGVjID0gMTY7CiAJCQlmaWxlcyA9ICgKKwkJCQk1
M0MzRDVFNTIxRUNFNzcyMDA4N0ZERkMgLyogYmFzaWMuanMgaW4gQ29weSBTdXBwb3J0IFNjcmlw
dCAqLywKIAkJCQlGRUNCOEIyQTFEMjVDQjVBMDA2RjI0NjMgLyogdGVzdGFwaS1mdW5jdGlvbi1v
dmVycmlkZXMuanMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLywKIAkJCQk1REJCMTUxQjEzMUQw
QjMxMDA1NkFEMzYgLyogdGVzdGFwaS5qcyBpbiBDb3B5IFN1cHBvcnQgU2NyaXB0ICovLAogCQkJ
KTsKQEAgLTM1NTcsNiArMzU2Miw5IEBACiAJCTUzQjBCRTM1MUU1NjFCMDkwMEE4RkMyOSAvKiBQ
cm94eWFibGVBY2Nlc3NDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFByb3h5YWJsZUFjY2Vzc0Nhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1M0IwQkUzNzFFNTYxQjI0MDBBOEZDMjkgLyogSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRyaW5zaWNHZXR0ZXJB
Y2Nlc3NDYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNCNjAxRUIyMDM0
QjhDNTAwNkJFNjY3IC8qIEpTQ2FzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Nhc3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNDM0Q1RTQyMUVDRTZDRTAwODdGREZDIC8qIGJhc2lj
LmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gYmFzaWMuanM7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzQzRGNjZBMjFCMUE0MDkwMDJGRDAwOSAvKiBK
U0FQSUdsb2JhbE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0FQSUdsb2JhbE9iamVjdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0M0RjY2QzIxQjFBN0NBMDAyRkQwMDkgLyog
SlNBUElHbG9iYWxPYmplY3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU0FQSUdsb2JhbE9i
amVjdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNDNkZFRUUxRThBREZBOTAw
QjE4NDI1IC8qIFdhc21PcGNvZGVPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2FzbU9wY29kZU9yaWdpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
M0M2RkVGMDFFOEFGRTBDMDBCMTg0MjUgLyogV2FzbU9wY29kZU9yaWdpbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtT3Bjb2RlT3JpZ2luLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNDQTczMDcxRUE1MzNEODAwNzYwNDlEIC8qIFdhc21C
QlFQbGFuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21CQlFQ
bGFuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1NjksNiArMzU3Nyw5IEBA
CiAJCTUzRTlFMEE5MUVBRTgzREUwMEZFRTI1MSAvKiBXYXNtTWFjaGluZVRocmVhZHMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbU1hY2hpbmVUaHJlYWRzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFOUUwQUExRUFFODNERTAwRkVFMjUx
IC8qIFdhc21NYWNoaW5lVGhyZWFkcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXYXNtTWFjaGluZVRocmVhZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNF
OUUwQUUxRUFFQzQ1NzAwRkVFMjUxIC8qIFdhc21UaWVyVXBDb3VudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtVGllclVwQ291bnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTNFRTAxQjQyMThGNjkwRTAwQUQxRjhEIC8qIEpTU2NyaXB0Lm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSlNTY3JpcHQubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRUUwMUI1MjE4RjY5MEYwMEFEMUY4RCAvKiBKU1Njcmlw
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NjcmlwdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1M0VFMDFCNzIxOEY3RUZGMDBBRDFGOEQgLyogSlNTY3Jp
cHRJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NjcmlwdElu
dGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjExRjQwMjA5MTM4RDcw
MEU0MTFBNyAvKiBKU0ltbXV0YWJsZUJ1dHRlcmZseS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ltbXV0
YWJsZUJ1dHRlcmZseS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0YxMUY0MjIw
OTE3NDk4MDBFNDExQTcgLyogSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNJbW11dGFibGVCdXR0ZXJmbHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1M0YyNTZFMTFCODdFMjgwMDBCNEI3NjggLyogSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlw
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1MzgsNiAr
NTU0OSw3IEBACiAJCTE0MTIxMTAwMEE0ODc3MjYwMDQ4MDI1NSAvKiB0ZXN0cyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNTNDM0Q1RTMyMUVDRTY4RTAw
ODdGREZDIC8qIHRlc3RhcGlTY3JpcHRzICovLAogCQkJCUZFRjA0MDUwMUFBRTY2MkQwMEJEMjhC
MCAvKiBDb21wYXJlQW5kU3dhcFRlc3QuY3BwICovLAogCQkJCUZFRjA0MDUyMUFBRUM0RUQwMEJE
MjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3QuaCAqLywKIAkJCQlDMjlFQ0IwMjE4MDREMEVEMDBE
MkNCQjQgLyogQ3VycmVudFRoaXNJbnNpZGVCbG9ja0dldHRlclRlc3QuaCAqLywKQEAgLTU5Mzcs
NiArNTk0OSw4IEBACiAJCQkJNTM1MjlBNEIxQzQ1N0I3NTAwMEI0OUM2IC8qIEFQSVV0aWxzLmgg
Ki8sCiAJCQkJMUNBQThCNEEwRDMyQzM5QTAwNDFCQ0ZGIC8qIEphdmFTY3JpcHQuaCAqLywKIAkJ
CQkxQ0FBOEI0QjBEMzJDMzlBMDA0MUJDRkYgLyogSmF2YVNjcmlwdENvcmUuaCAqLywKKwkJCQk1
M0M0RjY2QTIxQjFBNDA5MDAyRkQwMDkgLyogSlNBUElHbG9iYWxPYmplY3QuaCAqLywKKwkJCQk1
M0M0RjY2QzIxQjFBN0NBMDAyRkQwMDkgLyogSlNBUElHbG9iYWxPYmplY3QubW0gKi8sCiAJCQkJ
QkMwODk0RDUwRkFGQkEyRDAwMDAxODY1IC8qIEpTQVBJVmFsdWVXcmFwcGVyLmNwcCAqLywKIAkJ
CQlCQzA4OTRENjBGQUZCQTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuaCAqLywKIAkJ
CQlDMkNGMzlDMDE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmggKi8sCkBA
IC01OTc4LDYgKzU5OTIsOSBAQAogCQkJCUE1NTJDMzdEMUFEREI4RkUwMDEzOTcyNiAvKiBKU1Jl
bW90ZUluc3BlY3Rvci5jcHAgKi8sCiAJCQkJQTU1MkMzN0UxQUREQjhGRTAwMTM5NzI2IC8qIEpT
UmVtb3RlSW5zcGVjdG9yLmggKi8sCiAJCQkJOTVDMThEM0UwQzkwRTdFRjAwRTcyRjczIC8qIEpT
UmV0YWluUHRyLmggKi8sCisJCQkJNTNFRTAxQjUyMThGNjkwRjAwQUQxRjhEIC8qIEpTU2NyaXB0
LmggKi8sCisJCQkJNTNFRTAxQjQyMThGNjkwRTAwQUQxRjhEIC8qIEpTU2NyaXB0Lm1tICovLAor
CQkJCTUzRUUwMUI3MjE4RjdFRkYwMEFEMUY4RCAvKiBKU1NjcmlwdEludGVybmFsLmggKi8sCiAJ
CQkJQTdDMEM0QUExNjdDMDhDRDAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmLmNwcCAqLywKIAkJCQlB
N0MwQzRBQjE2N0MwOENEMDAxNzAxMUQgLyogSlNTY3JpcHRSZWZQcml2YXRlLmggKi8sCiAJCQkJ
MTQ4MkI3NEMwQTQzMDMyODAwNTE3Q0ZDIC8qIEpTU3RyaW5nUmVmLmNwcCAqLywKQEAgLTYyNzgs
NiArNjI5NSwxNSBAQAogCQkJcGF0aCA9ICJ1bmlmaWVkLXNvdXJjZXMiOwogCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNTNDM0Q1RTMyMUVDRTY4RTAwODdGREZDIC8qIHRlc3Rh
cGlTY3JpcHRzICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJ
CQk1M0MzRDVFNDIxRUNFNkNFMDA4N0ZERkMgLyogYmFzaWMuanMgKi8sCisJCQkpOworCQkJbmFt
ZSA9IHRlc3RhcGlTY3JpcHRzOworCQkJcGF0aCA9IEFQSS90ZXN0cy90ZXN0YXBpU2NyaXB0czsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTY1MEZERjhEMDlEMEZDQTcwMDc2
OUU1NCAvKiBEZXJpdmVkIFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKApAQCAtOTE2Niw2ICs5MTkyLDcgQEAKIAkJCQkwRjVFRjkxRjE2ODc4RjdEMDAz
RTVDMjUgLyogSklUVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM3MTJFMzE3Q0Q4Nzkz
MDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFk
ZXJzICovLAogCQkJCURDMDE4NDE5MUQxMEMxODkwMDU3QjA1MyAvKiBKSVRXb3JrbGlzdC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNTNDNEY2NkIyMUIxQTQwOTAwMkZEMDA5IC8qIEpTQVBJR2xvYmFs
T2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDA0ODAxMzEwMjFBMUQ5MDA4RTdGMDEgLyog
SlNBUElWYWx1ZVdyYXBwZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQ0YzOUMyMTZFMTVBODEw
MERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDE3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0FycmF5LmggaW4gSGVhZGVycyAqLywKQEAgLTkyODYs
OCArOTMxMywxMCBAQAogCQkJCUJDMThDNDI2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1JldGFpblB0
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTM0NjM4NzExRTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVu
TG9vcFRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDg3NEFFNjE1RUJERTRBMDAyRTM1ODcg
LyogSlNTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNFRTAxQjYyMThGNjkxNjAwQUQxRjhE
IC8qIEpTU2NyaXB0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MDY0MzM3REQ0QjA0MDJCQUYzNEE1
OTIgLyogSlNTY3JpcHRGZXRjaGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzIwMUMxRDFGOEU4
MjM2MDA3NkEwMzIgLyogSlNTY3JpcHRGZXRjaFBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTUzRUUwMUI4MjE4RjdFRkYwMEFEMUY4RCAvKiBKU1NjcmlwdEludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0MwQzRBQzE2ODEwMzAyMDAxNzAxMUQgLyogSlNTY3JpcHRSZWZQcml2
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQxMTE1N0YzMzJDMDA0QTRFN0QgLyogSlNT
ZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0RjgyODgxRTJG
RkRFMDAwNzUxODRDIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3RIZWFwQ2VsbFR5cGUuaCBp
biBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXND
b2NvYS50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCBh
Y2Y0ZmRiMDE2ZDg4NTcwOGE0MzAwOTA0ODA5YTI5NWM1NTBkYThlLi5hZjZmOWVmNWZjMzNlMDFm
MWRlZjY3M2YxMjY3OWIxZDc3Nzc2YjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlc0Nv
Y29hLnR4dApAQCAtMjEsNyArMjEsOSBAQAogLy8gQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgogLy8gVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCitBUEkvSlNBUElHbG9iYWxPYmplY3QubW0KIEFQSS9K
U0FQSVdyYXBwZXJPYmplY3QubW0KK0FQSS9KU1NjcmlwdC5tbQogQVBJL0pTQ29udGV4dC5tbQog
QVBJL0pTTWFuYWdlZFZhbHVlLm1tCiBBUEkvSlNSZW1vdGVJbnNwZWN0b3IuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvY29uZmlnLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvY29uZmlnLmgKaW5kZXggZTAyMzJjZjU3ODZhZjBmNDVkMGQxMzA4YjY3NjY4MDZjYWU0ZTAw
YS4uZTM2NDM5MGZkZDBmN2Q0NTc3ZGNlMWU0Njg4M2I3ZTEyN2VhNWMwYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2NvbmZpZy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9jb25maWcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgU2FtdWVsIFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAt
MjQsNiArMjQsNyBAQAogI2VuZGlmCiAKICNkZWZpbmUgSlNDX0FQSV9BVkFJTEFCTEUoLi4uKQor
I2RlZmluZSBKU0NfQ0xBU1NfQVZBSUxBQkxFKC4uLikgSlNfRVhQT1JUCiAvLyBVc2UgemVybyBz
aW5jZSBpdCB3aWxsIGJlIGxlc3MgdGhhbiBhbnkgcG9zc2libGUgdmVyc2lvbiBudW1iZXIuCiAj
ZGVmaW5lIEpTQ19NQUNfVkVSU0lPTl9UQkEgMAogI2RlZmluZSBKU0NfSU9TX1ZFUlNJT05fVEJB
IDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wb3N0cHJvY2Vzcy1oZWFkZXJz
LnNoIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bvc3Rwcm9jZXNzLWhlYWRlcnMuc2gKaW5kZXgg
ZmQyODgzNmRjOGJkZjFlNWY0OTM5ZjQyNTk5YTFjMDdmNGY5YmZjOS4uMTA3YWUxYmRhZWQ1OTc2
NmIxNzBiODQyMWQ3MDhlNGM3YjdmNjcwOSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Bvc3Rwcm9jZXNzLWhlYWRlcnMuc2gKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bv
c3Rwcm9jZXNzLWhlYWRlcnMuc2gKQEAgLTcyLDggKzcyLDggQEAgZnVuY3Rpb24gcmV3cml0ZV9o
ZWFkZXJzICgpIHsKICAgICAgICAgICAgIC1lIHMvSlNDX0lPU19WRVJTSU9OX1RCQS8ke0lPU19W
RVJTSU9OX05VTUJFUn0vZwogICAgICAgICAgICAgLWUgcy9KU0NfQVBJX0FWQUlMQUJMRS9BUElf
QVZBSUxBQkxFLwogICAgICAgICAgICAgLWUgcy9KU0NfQVBJX0RFUFJFQ0FURUQvQVBJX0RFUFJF
Q0FURUQvCi0gICAgICAgICAgICAtZSAicy9eSlNDX0NMQVNTX0FWQUlMQUJMRS9KU0NfRVhURVJO
IEFQSV9BVkFJTEFCTEUvIgotICAgICAgICAgICAgLWUgInMvXkpTQ19DTEFTU19ERVBSRUNBVEVE
L0pTQ19FWFRFUk4gQVBJX0RFUFJFQ0FURUQvIgorICAgICAgICAgICAgLWUgInMvXkpTQ19DTEFT
U19BVkFJTEFCTEUvSlNfRVhQT1JUIEFQSV9BVkFJTEFCTEUvIgorICAgICAgICAgICAgLWUgInMv
XkpTQ19DTEFTU19ERVBSRUNBVEVEL0pTX0VYUE9SVCBBUElfREVQUkVDQVRFRC8iCiAgICAgICAg
ICkKICAgICBlbHNlCiAgICAgICAgIFNFRF9PUFRJT05TKz0oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DYWxsRGF0YS5jcHAKaW5kZXggYzhkMDhlY2YwMjliNmExN2E1ZjgxN2VmZjc4
ZjEwMjRmNzhkN2NhMC4uMTM4M2E1NGM2ZjY5NmE2YWRjMmY0NWU4MWQzNzYzODEzNGNhN2IyZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYg
KzM0LDI0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBjb25zdCBBcmdMaXN0JiBhcmdzLCBjb25zdCBj
aGFyKiBlcnJvck1lc3NhZ2UpCit7CisgICAgcmV0dXJuIGNhbGwoZXhlYywgZnVuY3Rpb25PYmpl
Y3QsIGZ1bmN0aW9uT2JqZWN0LCBhcmdzLCBlcnJvck1lc3NhZ2UpOworfQorCitKU1ZhbHVlIGNh
bGwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlIHRoaXNW
YWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncywgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKQorewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5
cGUgPSBnZXRDYWxsRGF0YSh2bSwgZnVuY3Rpb25PYmplY3QsIGNhbGxEYXRhKTsKKyAgICBpZiAo
Y2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJv
cihleGVjLCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgY2FsbChleGVjLCBmdW5jdGlvbk9iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlz
VmFsdWUsIGFyZ3MpKTsKK30KKwogSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxs
RGF0YSwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NhbGxEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5o
CmluZGV4IGNiZjkxNjc2MWE1YjEwMzBmZTE1Y2I2Mjg1YWVhYzkxOWUwNWJkZmIuLjA4Zjc5ZGY0
ZDY3ODAxMzQ0NGE2YTYzOWFiNGZmYTQ5YWU3MWI1YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ2FsbERhdGEuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDYgKzY0LDEwIEBAIGVudW0gY2xhc3MgUHJvZmls
aW5nUmVhc29uIHsKICAgICBPdGhlcgogfTsKIAorLy8gQ29udmVuaWVuY2Ugd3JhcHBlciBzbyB5
b3UgZG9uJ3QgbmVlZCB0byBkZWFsIHdpdGggQ2FsbERhdGEgYW5kIENhbGxUeXBlIHVubGVzcyB5
b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGVtLgorSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjYWxs
KEV4ZWNTdGF0ZSosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIGNvbnN0IEFyZ0xpc3QmLCBjb25z
dCBjaGFyKiBlcnJvck1lc3NhZ2UpOworSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjYWxsKEV4
ZWNTdGF0ZSosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKTsKKwogSlNfRVhQT1JUX1BSSVZB
VEUgSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIENhbGxU
eXBlLCBjb25zdCBDYWxsRGF0YSYsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7
CiBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5j
dGlvbk9iamVjdCwgQ2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1ZSB0aGlzVmFsdWUs
IGNvbnN0IEFyZ0xpc3QmLCBOYWtlZFB0cjxFeGNlcHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbik7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24u
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKaW5kZXgg
MTEwMmY2NmMzMjI2ZDc0NWNhZThjZmJhMjBmNmFmNDMzNzlhYmVkOS4uM2ZiNGFiOWQzYWEyZTM0
YmJjZDlhZGZmYTczMDdlNzA3NmE0NjFhZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tcGxldGlvbi5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAo
QykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0
IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAy
MDAzLTIwMTggQXBwbGUgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIElu
Yy4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xNjEsNiArMTYxLDE2IEBAIHN0YXRpYyBKU0lu
dGVybmFsUHJvbWlzZSogcmVqZWN0UHJvbWlzZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPCiAgICAgcmV0dXJuIGRlZmVycmVkLT5wcm9taXNlKCk7CiB9CiAKK0pTSW50
ZXJuYWxQcm9taXNlKiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBTeW1i
b2wqIG1vZHVsZUlkLCBKU1ZhbHVlIHBhcmFtZXRlcnMsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcikK
K3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsK
KyAgICBSRUxFQVNFX0FTU0VSVCh2bS5hdG9taWNTdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3Vy
cmVudCgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCF2bS5pc0Nv
bGxlY3RvckJ1c3lPbkN1cnJlbnRUaHJlYWQoKSk7CisKKyAgICByZXR1cm4gdm0udm1FbnRyeUds
b2JhbE9iamVjdChleGVjKS0+bW9kdWxlTG9hZGVyKCktPmxvYWRBbmRFdmFsdWF0ZU1vZHVsZShl
eGVjLCBtb2R1bGVJZCwgcGFyYW1ldGVycywgc2NyaXB0RmV0Y2hlcik7Cit9CisKIEpTSW50ZXJu
YWxQcm9taXNlKiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBT
dHJpbmcmIG1vZHVsZU5hbWUsIEpTVmFsdWUgcGFyYW1ldGVycywgSlNWYWx1ZSBzY3JpcHRGZXRj
aGVyKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21wbGV0aW9uLmgKaW5kZXggZGU0NDhhNDA4NDcxYzc0MmU2ZjIyODhmMWFhNzI0
ZTMzZjg5NzQ5Ny4uODI3ZTYxZjNjNjFkMGNiN2JiZTc1YTYxMjc3MTI0ZmIwZGE3MmFhZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaApAQCAtMSw3ICsxLDcg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNv
bSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMyw2ICszMyw3IEBAIGNsYXNz
IEV4ZWNTdGF0ZTsKIGNsYXNzIEpTT2JqZWN0OwogY2xhc3MgUGFyc2VyRXJyb3I7CiBjbGFzcyBT
b3VyY2VDb2RlOworY2xhc3MgU3ltYm9sOwogY2xhc3MgVk07CiBjbGFzcyBKU0ludGVybmFsUHJv
bWlzZTsKIApAQCAtNTcsNiArNTgsNyBAQCBpbmxpbmUgSlNWYWx1ZSBwcm9maWxlZEV2YWx1YXRl
KEV4ZWNTdGF0ZSogZXhlYywgUHJvZmlsaW5nUmVhc29uIHJlYXNvbiwgY29uc3QgUwogSlNfRVhQ
T1JUX1BSSVZBVEUgSlNWYWx1ZSBldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbihFeGVjU3RhdGUq
LCBjb25zdCBTb3VyY2VDb2RlJiwgSlNPYmplY3QqIHNjb3BlRXh0ZW5zaW9uLCBOYWtlZFB0cjxF
eGNlcHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbik7CiAKIC8vIExvYWQgdGhlIG1vZHVsZSBzb3Vy
Y2UgYW5kIGV2YWx1YXRlIGl0LgorSlNfRVhQT1JUX1BSSVZBVEUgSlNJbnRlcm5hbFByb21pc2Uq
IGxvYWRBbmRFdmFsdWF0ZU1vZHVsZShFeGVjU3RhdGUqLCBTeW1ib2wqIG1vZHVsZUlkLCBKU1Zh
bHVlIHBhcmFtZXRlcnMsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcik7CiBKU19FWFBPUlRfUFJJVkFU
RSBKU0ludGVybmFsUHJvbWlzZSogbG9hZEFuZEV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0ZSosIGNv
bnN0IFN0cmluZyYgbW9kdWxlTmFtZSwgSlNWYWx1ZSBwYXJhbWV0ZXJzLCBKU1ZhbHVlIHNjcmlw
dEZldGNoZXIpOwogSlNfRVhQT1JUX1BSSVZBVEUgSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRF
dmFsdWF0ZU1vZHVsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNWYWx1ZSBzY3Jp
cHRGZXRjaGVyKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDYXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaAppbmRleCBh
MzY5ZDQ4OTY2MjYyYWExYjYyOWYzNDNjYjI0ZjFmNzQ2M2FjNWY3Li40OTVjN2UxMWVmZmRmNTU3
YTkyMmI0MjY3MTdlOGUzZDRkYmFjZGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Nhc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Nhc3QuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xNjUsNCArMTY1LDEyIEBAIFRvIGpzRHluYW1pY0Nhc3QoVk0mIHZtLCBKU1ZhbHVl
IGZyb20pCiAgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8VG8+KHZtLCBmcm9tLmFzQ2VsbCgpKTsK
IH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVG8sIHR5cGVuYW1lIEZyb20+CitUbyBqc1NlY3VyZUNh
c3QoVk0mIHZtLCBGcm9tIGZyb20pCit7CisgICAgYXV0byogcmVzdWx0ID0ganNEeW5hbWljQ2Fz
dDxUbz4odm0sIGZyb20pOworICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04ocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5kZXggZTg2ZTgyY2Zj
NjYyMWMyYTM0OTMwNzliZjhhNDI5ZTY0ZjU4NTEwZC4uZTlkMmVhNThmYjQ3ZmI0M2I2NjFlZGVi
YWRjNDRiZTZhOWI1ZDEzOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dApAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5j
bHVkZSAiRXJyb3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkVycm9yUHJvdG90eXBlLmgiCisj
aW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgog
I2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiR2VuZXJhdG9yRnVuY3Rp
b25Db25zdHJ1Y3Rvci5oIgpAQCAtMTkyLDcgKzE5Myw3IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci0gICAgc3RhdGljIEpTVmFsdWUgY3JlYXRlUHJveHlQcm9wZXJ0eShWTSYgdm0sIEpTT2JqZWN0
KiBvYmplY3QpCitzdGF0aWMgSlNWYWx1ZSBjcmVhdGVQcm94eVByb3BlcnR5KFZNJiB2bSwgSlNP
YmplY3QqIG9iamVjdCkKIHsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsID0ganNDYXN0PEpT
R2xvYmFsT2JqZWN0Kj4ob2JqZWN0KTsKICAgICByZXR1cm4gUHJveHlDb25zdHJ1Y3Rvcjo6Y3Jl
YXRlKHZtLCBQcm94eUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbCwgZ2xv
YmFsLT5mdW5jdGlvblByb3RvdHlwZSgpKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359053</attachid>
            <date>2019-01-14 10:51:48 -0800</date>
            <delta_ts>2019-01-14 11:04:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191121-20190114105147.patch</filename>
            <type>text/plain</type>
            <size>70794</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5NTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
NDM2OGRjOGIyMDI0NGNlNTNjODQyZTYxNjVkOTk2ZjViYWVhNjEwLi5iNzI4ZGY2NDg3MmYyZjI5
YzYyYmUxMDg2MDIwMWZkZmVhZDJkMWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4OCBAQAorMjAxOS0wMS0xNCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBKU0Mgc2hvdWxkIGhhdmUgYSBtb2R1bGUgbG9hZGVyIEFQSQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMTIxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
ZGRzIGEgbmV3IGRlbGVnYXRlIHRvIEpTQ29udHh0IHRoYXQgaXMgY2FsbGVkIHRvIGZldGNoCisg
ICAgICAgIGFueSByZXNvbHZlZCBtb2R1bGUuIFRoZSByZXNvbHV0aW9uIG9mIGEgbW9kdWxlIGlk
ZW50aWZpZXIgaXMgY29tcHV0ZWQKKyAgICAgICAgYXMgaWYgaXQgd2VyZSBhIFVSTCBvbiB0aGUg
d2ViIHdpdGggdGhlIGNhdmVhdCB0aGF0IGl0IG11c3QgYmUgYSBmaWxlIFVSTC4KKworICAgICAg
ICBBIG5ldyBjbGFzcyBKU1NjcmlwdCBoYXMgYWxzbyBiZWVuIGFkZGVkIHRoYXQgaXMgc2ltaWxh
ciB0byBKU1NjcmlwdFJlZi4KKyAgICAgICAgUmlnaHQgbm93IGFsbCBKU1NjcmlwdHMgYXJlIGNv
cGllZCBpbnRvIG1lbW9yeS4gSW4gdGhlIGZ1dHVyZSB3ZSBzaG91bGQKKyAgICAgICAgbW1hcCB0
aGUgcHJvdmlkZWQgZmlsZSBpbnRvIG1lbW9yeSBzbyB0aGUgT1MgY2FuIGV2aWN0IGl0IHRvIGRp
c2sgdW5kZXIKKyAgICAgICAgcHJlc3N1cmUuIEFkZGl0aW9uYWxseSwgdGhlIEFQSSBkb2VzIG5v
dCBtYWtlIHVzZSBvZiB0aGUgY29kZSBzaWduaW5nIHBhdGgKKyAgICAgICAgbm9yIHRoZSBieXRl
Y29kZSBjYWNoaW5nIHBhdGgsIHdoaWNoIHdlIHdpbGwgYWRkIGluIHN1YnNlcXVlbnQgcGF0Y2hl
cy4KKworICAgICAgICBMYXN0bHksIGEgY291cGxlIG9mIG5ldyBjb252ZW5pZW5jZSBtZXRob2Rz
IGhhdmUgYmVlbiBhZGRlZC4gQyBBUEkKKyAgICAgICAgY29udmVyc2lvbiwgY2FuIG5vdyB0b1Jl
ZiBhIEpTVmFsdWUgd2l0aCBqdXN0IGEgdm0gcmF0aGVyIHRoYW4KKyAgICAgICAgcmVxdWlyaW5n
IGFuIEV4ZWNTdGF0ZS4gU2Vjb25kbHksIHRoZXJlIGlzIG5vdyBhIGNhbGwgd3JhcHBlciB0aGF0
CisgICAgICAgIGRvZXMgbm90IHJlcXVpcmUgQ2FsbERhdGEgYW5kIENhbGxUeXBlIHNpbmNlIG1h
bnkgcGxhY2VzIGRvbid0CisgICAgICAgIGNhcmUgYWJvdXQgdGhpcy4KKworICAgICAgICAqIEFQ
SS9BUElDYXN0Lmg6CisgICAgICAgICh0b1JlZik6CisgICAgICAgICogQVBJL0pTQVBJR2xvYmFs
T2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FQSUdsb2JhbE9iamVjdDo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6SlNBUElHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OkpTQVBJR2xvYmFsT2JqZWN0OjpKU0FQSUdsb2JhbE9iamVjdCk6CisgICAg
ICAgICogQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNB
UElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUpOgorICAgICAgICAoSlNDOjpKU0FQ
SUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVySW1wb3J0TW9kdWxlKToKKyAgICAgICAgKEpTQzo6
SlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckZldGNoKToKKyAgICAgICAgKEpTQzo6SlNB
UElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzKToK
KyAgICAgICAgKiBBUEkvSlNBUElWYWx1ZVdyYXBwZXIuaDoKKyAgICAgICAgKEpTQzo6anNBUElW
YWx1ZVdyYXBwZXIpOiBEZWxldGVkLgorICAgICAgICAqIEFQSS9KU0NvbnRleHQuaDoKKyAgICAg
ICAgKiBBUEkvSlNDb250ZXh0Lm1tOgorICAgICAgICAoLVtKU0NvbnRleHQgbW9kdWxlTG9hZGVy
RGVsZWdhdGVdKToKKyAgICAgICAgKC1bSlNDb250ZXh0IHNldE1vZHVsZUxvYWRlckRlbGVnYXRl
Ol0pOgorICAgICAgICAqIEFQSS9KU0NvbnRleHRJbnRlcm5hbC5oOgorICAgICAgICAqIEFQSS9K
U0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogQVBJL0pTQ29udGV4dFJlZi5jcHA6CisgICAg
ICAgIChKU0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKToKKyAgICAgICAgKiBBUEkvSlNTY3Jp
cHQuaDogQWRkZWQuCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOiBBZGRlZC4KKyAgICAgICAg
KCtbSlNTY3JpcHQgc2NyaXB0V2l0aFNvdXJjZTppblZpcnR1YWxNYWNoaW5lOl0pOgorICAgICAg
ICAoZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZSk6CisgICAgICAgICgrW0pTU2NyaXB0IHNj
cmlwdEZyb21VVEY4RmlsZTppblZpcnR1YWxNYWNoaW5lOndpdGhDb2RlU2lnbmluZzphbmRCeXRl
Y29kZUNhY2hlOl0pOgorICAgICAgICAoZ2V0SlNTY3JpcHRTb3VyY2VDb2RlKToKKyAgICAgICAg
KiBBUEkvSlNTY3JpcHRJbnRlcm5hbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oLgorICAgICAgICAqIEFQSS9KU1ZhbHVl
SW50ZXJuYWwuaDoKKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmg6Cisg
ICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAgICAgICgrW0pTQ29udGV4dEZldGNo
RGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl0pOgorICAgICAgICAoLVtKU0NvbnRl
eHRGZXRjaERlbGVnYXRlIGNvbnRleHQ6ZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyOndpdGhSZXNv
bHZlSGFuZGxlcjphbmRSZWplY3RIYW5kbGVyOl0pOgorICAgICAgICAoY2hlY2tNb2R1bGVDb2Rl
UmFuKToKKyAgICAgICAgKGNoZWNrTW9kdWxlV2FzUmVqZWN0ZWQpOgorICAgICAgICAodGVzdEZl
dGNoKToKKyAgICAgICAgKHRlc3RGZXRjaFdpdGhUd29DeWNsZSk6CisgICAgICAgICh0ZXN0RmV0
Y2hXaXRoVGhyZWVDeWNsZSk6CisgICAgICAgICh0ZXN0TG9hZGVyUmVzb2x2ZXNBYnNvbHV0ZVNj
cmlwdFVSTCk6CisgICAgICAgICh0ZXN0TG9hZGVyUmVqZWN0c05pbFNjcmlwdFVSTCk6CisgICAg
ICAgICh0ZXN0TG9hZGVyUmVqZWN0c0ZhaWxlZEZldGNoKToKKyAgICAgICAgKHRlc3RJbXBvcnRN
b2R1bGVUd2ljZSk6CisgICAgICAgICgrW0pTQ29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0ZSBuZXdD
b250ZXh0XSk6CisgICAgICAgIChyZXNvbHZlUGF0aFRvU2NyaXB0cyk6CisgICAgICAgICgtW0pT
Q29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0ZSBjb250ZXh0OmZldGNoTW9kdWxlRm9ySWRlbnRpZmll
cjp3aXRoUmVzb2x2ZUhhbmRsZXI6YW5kUmVqZWN0SGFuZGxlcjpdKToKKyAgICAgICAgKHRlc3RM
b2FkQmFzaWNGaWxlKToKKyAgICAgICAgKHRlc3RPYmplY3RpdmVDQVBJKToKKyAgICAgICAgKiBB
UEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvYmFzaWMuanM6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmguCisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2Vz
Q29jb2EudHh0OgorICAgICAgICAqIGNvbmZpZy5oOgorICAgICAgICAqIHJ1bnRpbWUvQ2FsbERh
dGEuY3BwOgorICAgICAgICAoSlNDOjpjYWxsKToKKyAgICAgICAgKiBydW50aW1lL0NhbGxEYXRh
Lmg6CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6bG9h
ZEFuZEV2YWx1YXRlTW9kdWxlKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTQ2FzdC5oOgorICAgICAgICAoSlNDOjpqc1NlY3VyZUNhc3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpjcmVh
dGVQcm94eVByb3BlcnR5KToKKwogMjAxOC0xMi0zMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWls
bGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBTb3VyY2VQcm92aWRlcnMgc2hvdWxkIHVzZSBhbiBh
Y3R1YWwgVVJMIGluc3RlYWQgb2YgYSBzdHJpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvQVBJQ2FzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElDYXN0
LmgKaW5kZXggM2I1NTkxMTllMjJhMWU1Njg4MDg4NzI3ZjliYTdkY2IyODI0YWY0ZC4uNTAyZDAx
N2M5YjJkNWFiYzBiZDIxZDUwNDkzMmJhMDVkNmEwOTIxYiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9BUElDYXN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9BUElDYXN0LmgKQEAgLTEyOCwyMSArMTI4LDI2IEBAIGlubGluZSBKU0M6OlZNKiB0b0pTKEpT
Q29udGV4dEdyb3VwUmVmIGcpCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDOjpWTSo+
KGNvbnN0X2Nhc3Q8T3BhcXVlSlNDb250ZXh0R3JvdXAqPihnKSk7CiB9CiAKLWlubGluZSBKU1Zh
bHVlUmVmIHRvUmVmKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdikKK2lubGlu
ZSBKU1ZhbHVlUmVmIHRvUmVmKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdikKIHsKLSAgICBB
U1NFUlQoZXhlYy0+dm0oKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBB
U1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAjaWYgIUNQVShBRERS
RVNTNjQpCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIXYuaXNDZWxs
KCkpCi0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTVmFsdWVSZWY+KEpTQzo6anNB
UElWYWx1ZVdyYXBwZXIoZXhlYywgdikuYXNDZWxsKCkpOworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxKU1ZhbHVlUmVmPihKU0M6OkpTQVBJVmFsdWVXcmFwcGVyOjpjcmVhdGUodm0s
IHYpLmFzQ2VsbCgpKTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlUmVmPih2
LmFzQ2VsbCgpKTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9Q
QVJBTSh2bSk7CiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU1ZhbHVlUmVmPih2KTsKICNlbmRp
ZgogfQogCitpbmxpbmUgSlNWYWx1ZVJlZiB0b1JlZihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlND
OjpKU1ZhbHVlIHYpCit7CisgICAgcmV0dXJuIHRvUmVmKGV4ZWMtPnZtKCksIHYpOworfQorCiBp
bmxpbmUgSlNPYmplY3RSZWYgdG9SZWYoSlNDOjpKU09iamVjdCogbykKIHsKICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxKU09iamVjdFJlZj4obyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWQ1ZjEyYzdlYmYyODk5NDJl
Njc4NjA3ZjM3YmFiOWNlNmMzZGQ2OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QuaApAQCAtMCwwICsxLDY0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpT
QVBJR2xvYmFsT2JqZWN0IDogcHVibGljIEpTR2xvYmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1
c2luZyBCYXNlID0gSlNHbG9iYWxPYmplY3Q7CisKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwor
ICAgIHN0YXRpYyBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSBzX2dsb2JhbE9iamVjdE1l
dGhvZFRhYmxlOworCisgICAgc3RhdGljIEpTQVBJR2xvYmFsT2JqZWN0KiBjcmVhdGUoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIGF1dG8qIG9iamVjdCA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQVBJR2xvYmFsT2JqZWN0Pih2bS5oZWFwKSkgSlNB
UElHbG9iYWxPYmplY3Qodm0sIHN0cnVjdHVyZSk7CisgICAgICAgIG9iamVjdC0+ZmluaXNoQ3Jl
YXRpb24odm0pOworICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KKworICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTVmFsdWUgcHJvdG90eXBlKQorICAg
IHsKKyAgICAgICAgYXV0byogcmVzdWx0ID0gU3RydWN0dXJlOjpjcmVhdGUodm0sIDAsIHByb3Rv
dHlwZSwgVHlwZUluZm8oR2xvYmFsT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OworICAgICAgICByZXN1bHQtPnNldFRyYW5zaXRpb25XYXRjaHBvaW50SXNMaWtlbHlUb0JlRmly
ZWQodHJ1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEpT
SW50ZXJuYWxQcm9taXNlKiBtb2R1bGVMb2FkZXJJbXBvcnRNb2R1bGUoSlNHbG9iYWxPYmplY3Qq
LCBFeGVjU3RhdGUqLCBKU01vZHVsZUxvYWRlciosIEpTU3RyaW5nKiBtb2R1bGVOYW1lVmFsdWUs
IEpTVmFsdWUgcGFyYW1ldGVycywgY29uc3QgU291cmNlT3JpZ2luJik7CisgICAgc3RhdGljIElk
ZW50aWZpZXIgbW9kdWxlTG9hZGVyUmVzb2x2ZShKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSos
IEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSBrZXlWYWx1ZSwgSlNWYWx1ZSByZWZlcnJlclZhbHVl
LCBKU1ZhbHVlKTsKKyAgICBzdGF0aWMgSlNJbnRlcm5hbFByb21pc2UqIG1vZHVsZUxvYWRlckZl
dGNoKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVl
LCBKU1ZhbHVlLCBKU1ZhbHVlKTsKKyAgICBzdGF0aWMgSlNPYmplY3QqIG1vZHVsZUxvYWRlckNy
ZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNN
b2R1bGVMb2FkZXIqLCBKU1ZhbHVlLCBKU01vZHVsZVJlY29yZCosIEpTVmFsdWUpOworCitwcml2
YXRlOgorICAgIEpTQVBJR2xvYmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlLCAmc19nbG9iYWxPYmplY3RNZXRob2RUYWJs
ZSkKKyAgICB7IH0KK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNBUElHbG9iYWxPYmplY3QubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJ
R2xvYmFsT2JqZWN0Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0MmY1ZjIzMjE2ZjQ2YWYxYWYwNzM4MmIxODUz
YTNlYTVhZTc0YjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQVBJR2xvYmFsT2JqZWN0Lm1tCkBAIC0wLDAgKzEsMjEzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9y
dCAiSlNBUElHbG9iYWxPYmplY3QuaCIKKworI2ltcG9ydCAiQVBJQ2FzdC5oIgorI2ltcG9ydCAi
Q2F0Y2hTY29wZS5oIgorI2ltcG9ydCAiQ29tcGxldGlvbi5oIgorI2ltcG9ydCAiRXJyb3IuaCIK
KyNpbXBvcnQgIkV4Y2VwdGlvbi5oIgorI2ltcG9ydCAiSlNDb250ZXh0SW50ZXJuYWwuaCIKKyNp
bXBvcnQgIkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaCIKKyNpbXBvcnQgIkpTTmF0aXZlU3Rk
RnVuY3Rpb24uaCIKKyNpbXBvcnQgIkpTU2NyaXB0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTU291
cmNlQ29kZS5oIgorI2ltcG9ydCAiSlNWYWx1ZUludGVybmFsLmgiCisjaW1wb3J0ICJKU1ZpcnR1
YWxNYWNoaW5lSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkphdmFTY3JpcHRDb3JlLmgiCisjaW1wb3J0
ICJPYmplY3RDb25zdHJ1Y3Rvci5oIgorI2ltcG9ydCAiU291cmNlT3JpZ2luLmgiCisKKyNpbXBv
cnQgPHd0Zi9VUkwuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0FQ
SUdsb2JhbE9iamVjdDo6c19pbmZvID0geyAiR2xvYmFsT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywg
bnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FQSUdsb2JhbE9iamVjdCkg
fTsKKworY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgSlNBUElHbG9iYWxPYmplY3Q6OnNf
Z2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPSB7CisgICAgJnN1cHBvcnRzUmljaFNvdXJjZUluZm8s
CisgICAgJnNob3VsZEludGVycnVwdFNjcmlwdCwKKyAgICAmamF2YVNjcmlwdFJ1bnRpbWVGbGFn
cywKKyAgICBudWxscHRyLCAvLyBxdWV1ZVRhc2tUb0V2ZW50TG9vcAorICAgICZzaG91bGRJbnRl
cnJ1cHRTY3JpcHRCZWZvcmVUaW1lb3V0LAorICAgICZtb2R1bGVMb2FkZXJJbXBvcnRNb2R1bGUs
IC8vIG1vZHVsZUxvYWRlckltcG9ydE1vZHVsZQorICAgICZtb2R1bGVMb2FkZXJSZXNvbHZlLCAv
LyBtb2R1bGVMb2FkZXJSZXNvbHZlCisgICAgJm1vZHVsZUxvYWRlckZldGNoLCAvLyBtb2R1bGVM
b2FkZXJGZXRjaAorICAgICZtb2R1bGVMb2FkZXJDcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcywg
Ly8gbW9kdWxlTG9hZGVyQ3JlYXRlSW1wb3J0TWV0YVByb3BlcnRpZXMKKyAgICBudWxscHRyLCAv
LyBtb2R1bGVMb2FkZXJFdmFsdWF0ZQorICAgIG51bGxwdHIsIC8vIHByb21pc2VSZWplY3Rpb25U
cmFja2VyCisgICAgbnVsbHB0ciwgLy8gZGVmYXVsdExhbmd1YWdlCisgICAgbnVsbHB0ciwgLy8g
Y29tcGlsZVN0cmVhbWluZworICAgIG51bGxwdHIsIC8vIGluc3RhbnRpYXRlU3RyZWFtaW5nCit9
OworCitJZGVudGlmaWVyIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJSZXNvbHZlKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgSlNNb2R1bGVMb2Fk
ZXIqLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSByZWZlcnJlciwgSlNWYWx1ZSkKK3sKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICBBU1NFUlRfVU5VU0VEKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0ID09IGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAgQVNTRVJUKGtleS5pc1N0cmluZygpIHx8IGtl
eS5pc1N5bWJvbCgpKTsKKyAgICBTdHJpbmcgbmFtZSA9ICBrZXkudG9XVEZTdHJpbmcoZXhlYyk7
CisKKyAgICBVUkwgcmVmZXJyZXJVUkwoVVJMKCksIGpzQ2FzdDxKU1N0cmluZyo+KHJlZmVycmVy
KS0+dHJ5R2V0VmFsdWUoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVmZXJyZXJVUkwuaXNWYWxp
ZCgpKTsKKworICAgIFVSTCB1cmwgPSBVUkwocmVmZXJyZXJVUkwsIG5hbWUpOworICAgIGlmICh1
cmwuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVj
LCB1cmwpOworCisgICAgdGhyb3dWTUVycm9yKGV4ZWMsIHNjb3BlLCAiQ291bGQgbm90IGZvcm0g
dmFsaWQgVVJMIGZyb20gaWRlbnRpZmllciBhbmQgYmFzZSJfcyk7CisgICAgcmV0dXJuIHsgfTsK
K30KKworSlNJbnRlcm5hbFByb21pc2UqIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJJ
bXBvcnRNb2R1bGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBKU01vZHVsZUxvYWRlciosIEpTU3RyaW5nKiBzcGVjaWZpZXJWYWx1ZSwgSlNWYWx1ZSwgY29u
c3QgU291cmNlT3JpZ2luJiBzb3VyY2VPcmlnaW4pCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAg
ICBhdXRvIHJlamVjdCA9IFsmXSAoSlNWYWx1ZSBleGNlcHRpb24pIC0+IEpTSW50ZXJuYWxQcm9t
aXNlKiB7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIGF1dG8qIHBy
b21pc2UgPSBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkOjp0cnlDcmVhdGUoZXhlYywgZ2xvYmFs
T2JqZWN0KTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJu
IHByb21pc2UtPnJlamVjdChleGVjLCBleGNlcHRpb24pOworICAgIH07CisKKyAgICBhdXRvIGlt
cG9ydCA9IFsmXSAoVVJMJiB1cmwpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBpbXBvcnRNb2R1
bGUoZXhlYywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHVybCksIGpzVW5kZWZpbmVkKCks
IGpzVW5kZWZpbmVkKCkpOworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChzY29wZS5leGNlcHRpb24oKSk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfTsKKworICAgIGF1dG8gc3BlY2lmaWVyID0gc3BlY2lmaWVy
VmFsdWUtPnZhbHVlKGV4ZWMpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
IHsKKyAgICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICAg
ICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGNlcHRp
b24pOworICAgIH0KKworICAgIFVSTCBhYnNvbHV0ZVVSTChVUkwoKSwgc3BlY2lmaWVyKTsKKyAg
ICBpZiAoYWJzb2x1dGVVUkwuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gaW1wb3J0KGFic29s
dXRlVVJMKTsKKworICAgIGlmICghc3BlY2lmaWVyLnN0YXJ0c1dpdGgoJy8nKSAmJiAhc3BlY2lm
aWVyLnN0YXJ0c1dpdGgoIi4vIikgJiYgIXNwZWNpZmllci5zdGFydHNXaXRoKCIuLi8iKSkKKyAg
ICAgICAgcmV0dXJuIHJlamVjdChjcmVhdGVFcnJvcihleGVjLCAiTW9kdWxlIHNwZWNpZmllciBk
b2VzIG5vdCBzdGFydCB3aXRoIFwiL1wiLCBcIi4vXCIsIG9yIFwiLi4vXCIuIl9zKSk7CisKKyAg
ICBpZiAoc3BlY2lmaWVyLnN0YXJ0c1dpdGgoJy8nKSkgeworICAgICAgICBhYnNvbHV0ZVVSTCA9
IFVSTChVUkwoeyB9LCAiZmlsZTovLyIpLCBzcGVjaWZpZXIpOworICAgICAgICBpZiAoYWJzb2x1
dGVVUkwuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGltcG9ydChhYnNvbHV0ZVVSTCk7
CisgICAgfQorCisgICAgYXV0byBub0Jhc2VFcnJvck1lc3NhZ2UgPSAiQ291bGQgbm90IGRldGVy
bWluZSB0aGUgYmFzZSBVUkwgZm9yIGxvYWRpbmcuIl9zOworICAgIGlmIChzb3VyY2VPcmlnaW4u
aXNOdWxsKCkpCisgICAgICAgIHJldHVybiByZWplY3QoY3JlYXRlRXJyb3IoZXhlYywgbm9CYXNl
RXJyb3JNZXNzYWdlKSk7CisKKyAgICBhdXRvIHJlZmVycmVyID0gc291cmNlT3JpZ2luLnN0cmlu
ZygpOworICAgIFVSTCBiYXNlVVJMKFVSTCgpLCByZWZlcnJlcik7CisgICAgaWYgKCFiYXNlVVJM
LmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHJlamVjdChjcmVhdGVFcnJvcihleGVjLCBub0Jh
c2VFcnJvck1lc3NhZ2UpKTsKKworICAgIFVSTCB1cmwoYmFzZVVSTCwgc3BlY2lmaWVyKTsKKyAg
ICBpZiAoIXVybC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiByZWplY3QoY3JlYXRlRXJyb3Io
ZXhlYywgImNvdWxkIG5vdCBkZXRlcm1pbmUgYSB2YWxpZCBVUkwgZm9yIG1vZHVsZSBzcGVjaWZp
ZXIiX3MpKTsKKworICAgIHJldHVybiBpbXBvcnQodXJsKTsKK30KKworSlNJbnRlcm5hbFByb21p
c2UqIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJGZXRjaChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSBr
ZXksIEpTVmFsdWUsIEpTVmFsdWUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgIEFTU0VS
VChnbG9iYWxPYmplY3QgPT0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKKyAgICBKU0Nv
bnRleHQgKmNvbnRleHQgPSBbSlNDb250ZXh0IGNvbnRleHRXaXRoSlNHbG9iYWxDb250ZXh0UmVm
OnRvR2xvYmFsUmVmKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKV07CisKKyAgICBKU0ludGVy
bmFsUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6
OnRyeUNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIG51bGxwdHIpOworCisgICAgSWRlbnRpZmllciBtb2R1bGVLZXkgPSBrZXkudG9Qcm9w
ZXJ0eUtleShleGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7Cisg
ICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgIHNj
b3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiBkZWZlcnJlZC0+cmVqZWN0KGV4
ZWMsIGV4Y2VwdGlvbik7CisgICAgfQorCisgICAgaWYgKFVOTElLRUxZKCFbY29udGV4dCBtb2R1
bGVMb2FkZXJEZWxlZ2F0ZV0pKQorICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVj
LCBjcmVhdGVFcnJvcihleGVjLCAiTm8gbW9kdWxlIGxvYWRlciBwcm92aWRlZC4iKSk7CisKKyAg
ICBhdXRvIGRlZmVycmVkUHJvbWlzZSA9IFN0cm9uZzxKU0ludGVybmFsUHJvbWlzZURlZmVycmVk
Pih2bSwgZGVmZXJyZWQpOworICAgIGF1dG8gc3Ryb25nS2V5ID0gU3Ryb25nPEpTU3RyaW5nPih2
bSwganNTZWN1cmVDYXN0PEpTU3RyaW5nKj4odm0sIGtleSkpOworICAgIGF1dG8qIHJlc29sdmUg
PSBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgInJlc29s
dmUiLCBbPV0gKEV4ZWNTdGF0ZSogZXhlYykgeworICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgICAgICAvLyBUaGlzIGNhcHR1cmVzIHRoZSBnbG9iYWxPYmplY3QgYnV0IHRoYXQncyBv
ayBiZWNhdXNlIG91ciBzdHJ1Y3R1cmUga2VlcHMgaXQgYWxpdmUgYW55d2F5LgorICAgICAgICBK
U0NvbnRleHQgKmNvbnRleHQgPSBbSlNDb250ZXh0IGNvbnRleHRXaXRoSlNHbG9iYWxDb250ZXh0
UmVmOnRvR2xvYmFsUmVmKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKV07CisgICAgICAgIGlk
IHNjcmlwdCA9IHZhbHVlVG9PYmplY3QoY29udGV4dCwgdG9SZWYoZXhlYywgZXhlYy0+YXJndW1l
bnQoMCkpKTsKKworICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgICAgICBp
ZiAoVU5MSUtFTFkoIVtzY3JpcHQgaXNLaW5kT2ZDbGFzczpbSlNTY3JpcHQgY2xhc3NdXSkpIHsK
KyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRmlyc3QgYXJn
dW1lbnQgb2YgcmVzb2x1dGlvbiBjYWxsYmFjayBpcyBub3QgYSBKU1NjcmlwdCIpKTsKKyAgICAg
ICAgICAgIGNhbGwoZXhlYywgZGVmZXJyZWRQcm9taXNlLT5KU1Byb21pc2VEZWZlcnJlZDo6cmVq
ZWN0KCksIGFyZ3MsICJUaGlzIHNob3VsZCBuZXZlciBiZSBzZWVuLi4uIik7CisgICAgICAgICAg
ICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKworICAgICAgICBjb25z
dCBTdHJpbmcmIHNvdXJjZSA9IGdldEpTU2NyaXB0U291cmNlQ29kZShzdGF0aWNfY2FzdDxKU1Nj
cmlwdCAqPihzY3JpcHQpKTsKKyAgICAgICAgYXJncy5hcHBlbmQoSlNTb3VyY2VDb2RlOjpjcmVh
dGUodm0sIG1ha2VTb3VyY2Uoc291cmNlLCBTb3VyY2VPcmlnaW4obW9kdWxlS2V5LnN0cmluZygp
KSwgVVJMKHsgfSwgbW9kdWxlS2V5LnN0cmluZygpKSwgVGV4dFBvc2l0aW9uKCksIEpTQzo6U291
cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpNb2R1bGUpKSk7CisgICAgICAgIGNhbGwoZXhlYywgZGVm
ZXJyZWRQcm9taXNlLT5KU1Byb21pc2VEZWZlcnJlZDo6cmVzb2x2ZSgpLCBhcmdzLCAiVGhpcyBz
aG91bGQgbmV2ZXIgYmUgc2Vlbi4uLiIpOworICAgICAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZp
bmVkKCk7CisgICAgfSk7CisKKyAgICBhdXRvKiByZWplY3QgPSBKU05hdGl2ZVN0ZEZ1bmN0aW9u
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgInJlamVjdCIsIFs9XSAoRXhlY1N0YXRlKiBl
eGVjKSB7CisgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgICAgIGFyZ3Mu
YXBwZW5kKGV4ZWMtPmFyZ3VtZW50KDApKTsKKworICAgICAgICBjYWxsKGV4ZWMsIGRlZmVycmVk
UHJvbWlzZS0+SlNQcm9taXNlRGVmZXJyZWQ6OnJlamVjdCgpLCBhcmdzLCAiVGhpcyBzaG91bGQg
bmV2ZXIgYmUgc2Vlbi4uLiIpOworICAgICAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7
CisgICAgfSk7CisKKyAgICBbW2NvbnRleHQgbW9kdWxlTG9hZGVyRGVsZWdhdGVdIGNvbnRleHQ6
Y29udGV4dCBmZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6Wzo6SlNWYWx1ZSB2YWx1ZVdpdGhKU1Zh
bHVlUmVmOnRvUmVmKGV4ZWMsIGtleSkgaW5Db250ZXh0OmNvbnRleHRdIHdpdGhSZXNvbHZlSGFu
ZGxlcjpbOjpKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6dG9SZWYoZXhlYywgcmVzb2x2ZSkg
aW5Db250ZXh0OmNvbnRleHRdIGFuZFJlamVjdEhhbmRsZXI6Wzo6SlNWYWx1ZSB2YWx1ZVdpdGhK
U1ZhbHVlUmVmOnRvUmVmKGV4ZWMsIHJlamVjdCkgaW5Db250ZXh0OmNvbnRleHRdXTsKKyAgICBp
ZiAoY29udGV4dC5leGNlcHRpb24pIHsKKyAgICAgICAgZGVmZXJyZWQtPnJlamVjdChleGVjLCB0
b0pTKGV4ZWMsIFtjb250ZXh0LmV4Y2VwdGlvbiBKU1ZhbHVlUmVmXSkpOworICAgICAgICBjb250
ZXh0LmV4Y2VwdGlvbiA9IG5pbDsKKyAgICB9CisgICAgcmV0dXJuIGRlZmVycmVkLT5wcm9taXNl
KCk7Cit9CisKK0pTT2JqZWN0KiBKU0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyQ3JlYXRl
SW1wb3J0TWV0YVByb3BlcnRpZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUga2V5LCBKU01vZHVsZVJlY29yZCos
IEpTVmFsdWUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU09iamVjdCogbWV0YVByb3BlcnRpZXMg
PSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBnbG9iYWxPYmplY3QtPm51bGxQcm90b3R5cGVP
YmplY3RTdHJ1Y3R1cmUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0
cik7CisKKyAgICBtZXRhUHJvcGVydGllcy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgImZpbGVuYW1lIiksIGtleSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gbWV0YVByb3BlcnRpZXM7Cit9CisKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElWYWx1ZVdyYXBwZXIuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElWYWx1ZVdyYXBwZXIuaAppbmRleCAwNmIz
MDcxMDNlZWEyMzQwNTQ3YjAzMDI5Y2UzZmIwZTZkNzY3NjMzLi5hYTI2MDgyZmYzNWJhZDkwOWMx
YmIzYTY0NTkyYjBlMWUxODg3OTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQVBJVmFsdWVXcmFwcGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9K
U0FQSVZhbHVlV3JhcHBlci5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMp
IDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAo
QykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQ0LDEwICs0NCw5IEBAIHB1YmxpYzoKIAog
ICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBzdGF0aWMgSlNBUElWYWx1ZVdyYXBwZXIq
IGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpIAorICAgIHN0YXRpYyBKU0FQ
SVZhbHVlV3JhcHBlciogY3JlYXRlKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAg
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgICAgIEpTQVBJVmFsdWVXcmFwcGVyKiB3cmFw
cGVyID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBUElWYWx1ZVdyYXBwZXI+KHZtLmhl
YXApKSBKU0FQSVZhbHVlV3JhcHBlcihleGVjKTsKKyAgICAgICAgSlNBUElWYWx1ZVdyYXBwZXIq
IHdyYXBwZXIgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FQSVZhbHVlV3JhcHBlcj4o
dm0uaGVhcCkpIEpTQVBJVmFsdWVXcmFwcGVyKHZtKTsKICAgICAgICAgd3JhcHBlci0+ZmluaXNo
Q3JlYXRpb24odm0sIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgfQpAQCAt
NjEsMTcgKzYwLDEyIEBAIHByb3RlY3RlZDoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSlNBUElW
YWx1ZVdyYXBwZXIoRXhlY1N0YXRlKiBleGVjKQotICAgICAgICA6IEpTQ2VsbChleGVjLT52bSgp
LCBleGVjLT52bSgpLmFwaVdyYXBwZXJTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgSlNBUElWYWx1ZVdy
YXBwZXIoVk0mIHZtKQorICAgICAgICA6IEpTQ2VsbCh2bSwgdm0uYXBpV3JhcHBlclN0cnVjdHVy
ZS5nZXQoKSkKICAgICB7CiAgICAgfQogCiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fdmFs
dWU7CiB9OwogCi1pbmxpbmUgSlNWYWx1ZSBqc0FQSVZhbHVlV3JhcHBlcihFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQVBJVmFsdWVXcmFwcGVyOjpjcmVh
dGUoZXhlYywgdmFsdWUpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ29udGV4dC5oCmluZGV4IDg5Yzg3ZjllMmUxZmYxYjE3MWIxZWJiYThjNDUyMTU5
ZjQ0ZjQ3NWEuLjE3OTBlNTk3YjQ4YTliODNhOTQ1ZjkzMmIyZWE0ZWJiMzYzZWZjZmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw3ICszMSw3IEBACiAKICNpZiBKU0Nf
T0JKQ19BUElfRU5BQkxFRAogCi1AY2xhc3MgSlNWaXJ0dWFsTWFjaGluZSwgSlNWYWx1ZTsKK0Bj
bGFzcyBKU1NjcmlwdCwgSlNWaXJ0dWFsTWFjaGluZSwgSlNWYWx1ZSwgSlNDb250ZXh0OwogCiAv
KiEKIEBpbnRlcmZhY2UKQEAgLTM5LDcgKzM5LDcgQEAKICBKYXZhU2NyaXB0IGV4ZWN1dGlvbiB0
YWtlcyBwbGFjZSB3aXRoaW4gYSBjb250ZXh0LCBhbmQgYWxsIEphdmFTY3JpcHQgdmFsdWVzCiAg
YXJlIHRpZWQgdG8gYSBjb250ZXh0LgogKi8KLU5TX0NMQVNTX0FWQUlMQUJMRSgxMF85LCA3XzAp
CitKU0NfQ0xBU1NfQVZBSUxBQkxFKG1hY29zeCgxMC45KSwgaW9zKDcuMCkpCiBAaW50ZXJmYWNl
IEpTQ29udGV4dCA6IE5TT2JqZWN0CiAKIC8qIQpAQCAtMTc3LDcgKzE3Nyw2IEBAIE5TX0NMQVNT
X0FWQUlMQUJMRSgxMF85LCA3XzApCiBAZGlzY3Vzc2lvbiBOYW1lIG9mIHRoZSBKU0NvbnRleHQu
IEV4cG9zZWQgd2hlbiByZW1vdGUgZGVidWdnaW5nIHRoZSBjb250ZXh0LgogKi8KIEBwcm9wZXJ0
eSAoY29weSkgTlNTdHJpbmcgKm5hbWUgSlNDX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEwKSwg
aW9zKDguMCkpOwotCiBAZW5kCiAKIC8qIQpAQCAtMjMxLDYgKzIzMCw3IEBAIE5TX0NMQVNTX0FW
QUlMQUJMRSgxMF85LCA3XzApCiBAcmVzdWx0IFRoZSBDIEFQSSBlcXVpdmFsZW50IG9mIHRoaXMg
SlNDb250ZXh0LgogKi8KIEBwcm9wZXJ0eSAocmVhZG9ubHkpIEpTR2xvYmFsQ29udGV4dFJlZiBK
U0dsb2JhbENvbnRleHRSZWY7CisKIEBlbmQKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDb250ZXh0Lm1tCmluZGV4IDI3NTY2ZjQxYjk3ZTFiMzliZGRlOWI0OGFhYTU1OWYxNGNi
NzM5ZWEuLjNjNzc2ZDRkOTAwZWUxNzMzMzYyYWMyOWY2MjRmNDQ0ZDU0NWU3YjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDExICsyNiwxNSBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogCiAjaW1wb3J0ICJBUElDYXN0LmgiCisjaW1wb3J0ICJDb21wbGV0aW9uLmgi
CiAjaW1wb3J0ICJKU0NJbmxpbmVzLmgiCiAjaW1wb3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgog
I2ltcG9ydCAiSlNDb250ZXh0UHJpdmF0ZS5oIgogI2ltcG9ydCAiSlNDb250ZXh0UmVmSW50ZXJu
YWwuaCIKICNpbXBvcnQgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW1wb3J0ICJKU0ludGVybmFsUHJv
bWlzZS5oIgorI2ltcG9ydCAiSlNNb2R1bGVMb2FkZXIuaCIKKyNpbXBvcnQgIkpTU2NyaXB0SW50
ZXJuYWwuaCIKICNpbXBvcnQgIkpTVmFsdWVJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNWaXJ0dWFs
TWFjaGluZUludGVybmFsLmgiCiAjaW1wb3J0ICJKU1dyYXBwZXJNYXAuaCIKQEAgLTM4LDEyICs0
MiwxNSBAQAogI2ltcG9ydCAiT2JqY1J1bnRpbWVFeHRyYXMuaCIKICNpbXBvcnQgIlN0cm9uZ0lu
bGluZXMuaCIKIAorI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+CisKICNpZiBKU0NfT0JKQ19B
UElfRU5BQkxFRAogCiBAaW1wbGVtZW50YXRpb24gSlNDb250ZXh0IHsKICAgICBKU1ZpcnR1YWxN
YWNoaW5lICptX3ZpcnR1YWxNYWNoaW5lOwogICAgIEpTR2xvYmFsQ29udGV4dFJlZiBtX2NvbnRl
eHQ7CiAgICAgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4gbV9leGNlcHRpb247CisgICAgV2Vh
a09iakNQdHI8aWQgPEpTTW9kdWxlTG9hZGVyRGVsZWdhdGU+PiBtX21vZHVsZUxvYWRlckRlbGVn
YXRlOwogfQogCiAtIChKU0dsb2JhbENvbnRleHRSZWYpSlNHbG9iYWxDb250ZXh0UmVmCkBAIC0y
MzMsNiArMjQwLDE2IEBACiAgICAgSlNHbG9iYWxDb250ZXh0U2V0RGVidWdnZXJSdW5Mb29wKG1f
Y29udGV4dCwgcnVuTG9vcCk7CiB9CiAKKy0gKGlkPEpTTW9kdWxlTG9hZGVyRGVsZWdhdGU+KW1v
ZHVsZUxvYWRlckRlbGVnYXRlCit7CisgICAgcmV0dXJuIG1fbW9kdWxlTG9hZGVyRGVsZWdhdGUu
Z2V0QXV0b3JlbGVhc2VkKCk7Cit9CisKKy0gKHZvaWQpc2V0TW9kdWxlTG9hZGVyRGVsZWdhdGU6
KGlkPEpTTW9kdWxlTG9hZGVyRGVsZWdhdGU+KW1vZHVsZUxvYWRlckRlbGVnYXRlCit7CisgICAg
bV9tb2R1bGVMb2FkZXJEZWxlZ2F0ZSA9IG1vZHVsZUxvYWRlckRlbGVnYXRlOworfQorCiBAZW5k
CiAKIEBpbXBsZW1lbnRhdGlvbiBKU0NvbnRleHQoU3Vic2NyaXB0U3VwcG9ydCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0SW50ZXJuYWwuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0SW50ZXJuYWwuaAppbmRleCAyOGY3MDljMWU0
OGYxZTFhODAzODU2NTBhYWU2ZTQxY2QzNTE1MGZhLi5hYjQ1ODI5ZjAwMjdlNGZhZDZiZmJkMWFm
YzQwMmIzYTFiZTg1YjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q29udGV4dEludGVybmFsLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRl
eHRJbnRlcm5hbC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAK
LSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dC5oPgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSlNDb250ZXh0UHJpdmF0ZS5oPgogCiBzdHJ1Y3QgQ2FsbGJhY2tEYXRhIHsKICAgICBD
YWxsYmFja0RhdGEqIG5leHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ29udGV4dFByaXZhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0
UHJpdmF0ZS5oCmluZGV4IGZmOTYyMmFkZGY2MGI3YzEwMzU3ZGFjY2YxYzZmNDFlY2I4NjFmMWMu
LmQ0ZTIwNmIzMzU3NWU5ZmE2ZDQxODJlOWUxYWQ4OTQwNTY4YTg2NzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UHJpdmF0ZS5oCkBAIC0zMCw2ICszMCwyNyBAQAog
CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHQuaD4KIAorQHByb3RvY29sIEpTTW9k
dWxlTG9hZGVyRGVsZWdhdGUgPE5TT2JqZWN0PgorCitAcmVxdWlyZWQKKworLyohIEBhYnN0cmFj
dCBQcm92aWRlcyBzb3VyY2UgY29kZSBmb3IgYW55IEpTIG1vZHVsZSB0aGF0IGlzIGFjdGl2ZWx5
IGltcG9ydGVkLgorIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IGZvciB3aGljaCB0aGUgbW9k
dWxlIGlzIGJlaW5nIHJlcXVlc3RlZC4KKyBAcGFyYW0gaWRlbnRpZmllciBUaGUgcmVzb2x2ZWQg
aWRlbnRpZmllciBmb3IgdGhlIHJlcXVlc3RlZCBtb2R1bGUuCisgQHBhcmFtIHJlc29sdmUgQSBK
UyBmdW5jdGlvbiB0byBjYWxsIHdpdGggdGhlIGRlc2lyZWQgc2NyaXB0IGZvciBpZGVudGlmaWVy
LgorIEBwYXJhbSByZWplY3QgQSBKUyBmdW5jdGlvbiB0byBjYWxsIHdoZW4gaWRlbnRpZmllciBj
YW5ub3QgYmUgZmV0Y2hlZC4KKyBAZGlzY3Vzc2lvbiBDdXJyZW50bHksIGlkZW50aWZpZXIgd2ls
bCBhbHdheXMgYmUgYW4gYWJzb2x1dGUgZmlsZSBVUkwgY29tcHV0ZWQgZnJvbSBzcGVjaWZpZXIg
b2YgdGhlIHJlcXVlc3RlZCBtb2R1bGUgcmVsYXRpdmUgdG8gdGhlIFVSTCBvZiB0aGUgcmVxdWVz
dGluZyBzY3JpcHQuIElmIHRoZSByZXF1ZXN0aW5nIHNjcmlwdCBkb2VzIG5vdCBoYXZlIGEgVVJM
IGFuZCB0aGUgbW9kdWxlIHNwZWNpZmllciBpcyBub3QgYW4gYWJzb2x1dGUgcGF0aCB0aGUgbW9k
dWxlIGxvYWRlciB3aWxsIGZhaWwgdG8gbG9hZCB0aGUgbW9kdWxlLgorCisgVGhlIGZpcnN0IGFy
Z3VtZW50IHRvIHJlc29sdmUgc2hvbHVkIGFsd2F5cyBiZSBhIEpTU2NyaXB0LCBvdGhlcndpc2Ug
dGhlIG1vZHVsZSBsb2FkZXIgd2lsbCByZWplY3QgdGhlIG1vZHVsZS4KKworIE9uY2UgYW4gaWRl
bnRpZmllciBoYXMgYmVlbiByZXNvbHZlZCBvciByZWplY3RlZCBpbiBhIGdpdmVuIGNvbnRleHQg
aXQgd2lsbCBuZXZlciBiZSByZXF1ZXN0ZWQgYWdhaW4uIElmIGEgc2NyaXB0IGlzIHN1Y2Nlc3Nm
dWxseSBldmFsdWF0ZWQgaXQgd2lsbCBub3QgYmUgcmUtZXZhbHVhdGVkIG9uIGFueSBzdWJzZXF1
ZW50IGltcG9ydC4KKworIFRoZSBWTSB3aWxsIHJldGFpbiBhbGwgZXZhbHVhdGVkIG1vZHVsZXMg
Zm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29udGV4dC4KKyAqLworLSAodm9pZCljb250ZXh0OihK
U0NvbnRleHQgKiljb250ZXh0IGZldGNoTW9kdWxlRm9ySWRlbnRpZmllcjooSlNWYWx1ZSAqKWlk
ZW50aWZpZXIgd2l0aFJlc29sdmVIYW5kbGVyOihKU1ZhbHVlICopcmVzb2x2ZSBhbmRSZWplY3RI
YW5kbGVyOihKU1ZhbHVlICopcmVqZWN0OworCitAZW5kCisKIEBpbnRlcmZhY2UgSlNDb250ZXh0
KFByaXZhdGUpCiAKIC8qIQpAQCAtNTAsNiArNzEsOSBAQAogKi8KIEBwcm9wZXJ0eSAoc2V0dGVy
PV9zZXREZWJ1Z2dlclJ1bkxvb3A6KSBDRlJ1bkxvb3BSZWYgX2RlYnVnZ2VyUnVuTG9vcCBKU0Nf
QVBJX0FWQUlMQUJMRShtYWNvc3goMTAuMTApLCBpb3MoOC4wKSk7CiAKKy8qISBAYWJzdHJhY3Qg
VGhlIGRlbGVnYXRlIHRoZSBjb250ZXh0IHdpbGwgdXNlIHdoZW4gdHJ5aW5nIHRvIGxvYWQgYSBt
b2R1bGUuIE5vdGUsIHRoaXMgZGVsZWdhdGUgd2lsbCBiZSBpZ25vcmVkIGZvciBjb250ZXh0cyBy
ZXR1cm5lZCBieSBVSVdlYlZpZXcuICovCitAcHJvcGVydHkgKG5vbmF0b21pYywgd2VhaykgaWQg
PEpTTW9kdWxlTG9hZGVyRGVsZWdhdGU+IG1vZHVsZUxvYWRlckRlbGVnYXRlIEpTQ19BUElfQVZB
SUxBQkxFKG1hY29zeChKU0NfTUFDX1RCQSksIGlvcyhKU0NfSU9TX1RCQSkpOworCiBAZW5kCiAK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRS
ZWYuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCmluZGV4
IGUxOGRmZDIxZmYyODQwMDdkMDAzOWU2NDMyZDllYzNjNGYxZjMxNzcuLjlmNWZkYWZjNzgxOTZm
ZTQ0OGMxOGQwNzkxNWUwNGZhMzg2ODRhYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ29udGV4dFJlZi5jcHAKQEAgLTMwLDkgKzMwLDkgQEAKICNpbmNsdWRlICJBUElDYXN0Lmgi
CiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5o
IgorI2luY2x1ZGUgIkpTQVBJR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja09i
amVjdC5oIgogI2luY2x1ZGUgIkpTQ2xhc3NSZWYuaCIKLSNpbmNsdWRlICJKU0dsb2JhbE9iamVj
dC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIlNvdXJjZVByb3ZpZGVyLmgiCkBAIC0xMzgsNyArMTM4LDcgQEAgSlNHbG9iYWxDb250
ZXh0UmVmIEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXAoSlNDb250ZXh0R3JvdXBSZWYgZ3Jv
dXAsIEpTQ2xhc3MKICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtLnB0cigpKTsKIAogICAgIGlm
ICghZ2xvYmFsT2JqZWN0Q2xhc3MpIHsKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IEpTR2xvYmFsT2JqZWN0OjpjcmVhdGUodm0uZ2V0KCksIEpTR2xvYmFsT2JqZWN0Ojpj
cmVhdGVTdHJ1Y3R1cmUodm0uZ2V0KCksIGpzTnVsbCgpKSk7CisgICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBKU0FQSUdsb2JhbE9iamVjdDo6Y3JlYXRlKHZtLmdldCgpLCBK
U0FQSUdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLmdldCgpLCBqc051bGwoKSkpOwog
I2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQogICAgICAgICBpZiAoSlNSZW1vdGVJbnNwZWN0
b3JHZXRJbnNwZWN0aW9uRW5hYmxlZEJ5RGVmYXVsdCgpKQogICAgICAgICAgICAgZ2xvYmFsT2Jq
ZWN0LT5zZXRSZW1vdGVEZWJ1Z2dpbmdFbmFibGVkKHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1NjcmlwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwY2I2MDkwODhlYzgyZjc0NGFhNzJhN2NkN2MxZDhl
MTM4NTNjODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
U2NyaXB0LmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWUuaD4KKworI2lm
IEpTQ19PQkpDX0FQSV9FTkFCTEVECisKK05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisKK09CSkNf
Q0xBU1MgSlNWaXJ0dWFsTWFjaGluZTsKKworSlNDX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goSlND
X01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEpKQorQGludGVyZmFjZSBKU1NjcmlwdCA6IE5TT2Jq
ZWN0CisKKy8qIQorIEBtZXRob2QKKyBAYWJzdHJhY3QgQ3JlYXRlIGEgSlNTY3JpcHQgZm9yIHRo
ZSBzcGVjaWZpZWQgdmlydHVhbCBtYWNoaW5lLgorIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBj
b2RlIHRvIHVzZSB3aGVuIHRoZSBzY3JpcHQgaXMgZXZhbHVhdGVkIGJ5IHRoZSBKUyB2bS4KKyBA
cGFyYW0gdm0gVGhlIEpTVmlydHVhbE1hY2hpbmUgdGhlIHNjcmlwdCBjYW4gYmUgZXZhbHVhdGVk
IGluLgorIEByZXN1bHQgVGhlIG5ldyBzY3JpcHQuCisgKi8KKysgKG51bGxhYmxlIGluc3RhbmNl
dHlwZSlzY3JpcHRXaXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJjZSBpblZpcnR1YWxNYWNoaW5l
OihKU1ZpcnR1YWxNYWNoaW5lICopdm07CisKKy8qIQorIEBtZXRob2QKKyBAYWJzdHJhY3QgQ3Jl
YXRlIGEgSlNTY3JpcHQgZm9yIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBtYWNoaW5lIHdpdGggYSBw
YXRoIHRvIGEgY29kZXNpZ25pbmcgYW5kIGJ5dGVjb2RlIGNhY2hpbmcuCisgQHBhcmFtIGZpbGVQ
YXRoIEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gYSBKUyBzb3VyY2UgY29kZSBmaWxlIG9u
IGRpc2suCisgQHBhcmFtIHZtIFRoZSBKU1ZpcnR1YWxNYWNoaW5lIHRoZSBzY3JpcHQgY2FuIGJl
IGV2YWx1YXRlZCBpbi4KKyBAcGFyYW0gY29kZVNpZ25pbmdQYXRoIEEgVVJMIGNvbnRhaW5pbmcg
dGhlIHBhdGggdG8gdGhlIGNvZGVTaWduaW5nIGZpbGUgZm9yIGZpbGVQYXRoIG9uIGRpc2suCisg
QHBhcmFtIGNhY2hlUGF0aCBBIFVSTCBjb250YWluaW5nIHRoZSBwYXRoIHdoZXJlIHRoZSBWTSBz
aG91bGQgY2FjaGUgZm9yIGZ1dHVyZSBleGVjdXRpb24uCisgQHJlc3VsdCBUaGUgbmV3IHNjcmlw
dC4KKyBAZGlzY3Vzc2lvbiB0aGUgZmlsZXMgYXQgZmlsZVBhdGgsIGNvZGVTaWduaW5nUGF0aCwg
YW5kIGNhY2hlUGF0aCBzaG91bGQgbm90IGJlIGV4dGVybmFsbHkgbW9kaWZpZWQgIGZvciB0aGUg
bGlmZWN5Y2xlIG9mIHZtLiBOb3RlIHRoYXQgY29kZVNpZ25pbmdQYXRoIGFuZCBjYWNoZVBhdGgg
YXJlIG5vdCB1c2VkIGN1cnJlbnRseSwgYnV0IHRoYXQgd2lsbCBjaGFuZ2UgaW4gdGhlIG5lYXIg
ZnV0dXJlLgorICovCisrIChudWxsYWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0RnJvbVVURjhGaWxl
OihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2
bSB3aXRoQ29kZVNpZ25pbmc6KG51bGxhYmxlIE5TVVJMICopY29kZVNpZ25pbmdQYXRoIGFuZEJ5
dGVjb2RlQ2FjaGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQYXRoOworCitAZW5kCisKK05TX0FT
U1VNRV9OT05OVUxMX0VORAorCisjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQubW0gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc5NmM0MWVmOWVjYzM5ODQ3
MDA2Y2ZiMWI2NTczYzUzNDlkM2ZkZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1w
b3J0ICJKU1NjcmlwdEludGVybmFsLmgiCisKKyNpbXBvcnQgIkFQSUNhc3QuaCIKKyNpbXBvcnQg
IkpTQ29udGV4dEludGVybmFsLmgiCisjaW1wb3J0ICJKU1ZhbHVlUHJpdmF0ZS5oIgorI2ltcG9y
dCAiU3ltYm9sLmgiCisKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAorCitAaW1wbGVtZW50YXRp
b24gSlNTY3JpcHQgeworICAgIFN0cmluZyBtX3NvdXJjZTsKK30KKworKyAoaW5zdGFuY2V0eXBl
KXNjcmlwdFdpdGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGluVmlydHVhbE1hY2hpbmU6KEpT
VmlydHVhbE1hY2hpbmUgKil2bQoreworICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAgSlNTY3Jp
cHQgKnJlc3VsdCA9IFtbSlNTY3JpcHQgYWxsb2NdIGluaXRdOworICAgIHJlc3VsdC0+bV9zb3Vy
Y2UgPSBzb3VyY2U7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VmVjdG9yPgorc3RhdGljIGJvb2wgZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShGSUxFKiBm
aWxlLCBWZWN0b3ImIGJ1ZmZlcikKK3sKKyAgICAvLyBXZSBtaWdodCBoYXZlIGluamVjdGVkICJ1
c2Ugc3RyaWN0IjsgYXQgdGhlIHRvcC4KKyAgICBzaXplX3QgaW5pdGlhbFNpemUgPSBidWZmZXIu
c2l6ZSgpOworICAgIGlmIChmc2VlayhmaWxlLCAwLCBTRUVLX0VORCkgPT0gLTEpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBsb25nIGJ1ZmZlckNhcGFjaXR5ID0gZnRlbGwoZmlsZSk7Cisg
ICAgaWYgKGJ1ZmZlckNhcGFjaXR5ID09IC0xKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKGZzZWVrKGZpbGUsIDAsIFNFRUtfU0VUKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGJ1ZmZlci5yZXNpemUoYnVmZmVyQ2FwYWNpdHkgKyBpbml0aWFsU2l6ZSk7CisgICAg
c2l6ZV90IHJlYWRTaXplID0gZnJlYWQoYnVmZmVyLmRhdGEoKSArIGluaXRpYWxTaXplLCAxLCBi
dWZmZXIuc2l6ZSgpLCBmaWxlKTsKKyAgICByZXR1cm4gcmVhZFNpemUgPT0gYnVmZmVyLnNpemUo
KSAtIGluaXRpYWxTaXplOworfQorCitzdGF0aWMgYm9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRz
T2ZGaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIFZlY3RvcjxjaGFyPiYgYnVmZmVyKQorewor
ICAgIEZJTEUqIGYgPSBmb3BlbihmaWxlTmFtZS51dGY4KCkuZGF0YSgpLCAicmIiKTsKKyAgICBp
ZiAoIWYpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3BlbiBmaWxlOiAl
c1xuIiwgZmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBib29sIHJlc3VsdCA9IGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZiwg
YnVmZmVyKTsKKyAgICBmY2xvc2UoZik7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKKysg
KGluc3RhbmNldHlwZSlzY3JpcHRGcm9tVVRGOEZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0
dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhDb2RlU2lnbmluZzooTlNVUkwg
Kiljb2RlU2lnbmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZTooTlNVUkwgKiljYWNoZVBhdGgKK3sK
KyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgY2hlY2sgY29kZVNpZ25pbmcuCisgICAgVU5VU0VE
X1BBUkFNKGNvZGVTaWduaW5nUGF0aCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFjdHVh
bGx5IGNhY2hlIGJ5dGVjb2RlLgorICAgIFVOVVNFRF9QQVJBTShjYWNoZVBhdGgpOworICAgIFVO
VVNFRF9QQVJBTSh2bSk7CisgICAgVVJMIGZpbGVQYXRoVVJMKFtmaWxlUGF0aCBhYnNvbHV0ZVVS
TF0pOworICAgIGlmICghZmlsZVBhdGhVUkwuaXNMb2NhbEZpbGUoKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbW1hcCB0aGUgY29udGVudHMgb2YgdGhl
IGZpbGUgaW5zdGVhZCBvZiBjb3B5aW5nIGl0IGludG8gZGlydHkgbWVtb3J5LgorICAgIFZlY3Rv
cjxjaGFyPiBidWZmZXI7CisgICAgaWYgKCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZp
bGVQYXRoVVJMLmZpbGVTeXN0ZW1QYXRoKCksIGJ1ZmZlcikpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICBKU1NjcmlwdCAqcmVzdWx0ID0gW1tKU1NjcmlwdCBhbGxvY10gaW5pdF07CisgICAg
cmVzdWx0LT5tX3NvdXJjZSA9IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soYnVm
ZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworY29u
c3QgU3RyaW5nJiBnZXRKU1NjcmlwdFNvdXJjZUNvZGUoSlNTY3JpcHQgKm1vZHVsZSkgeyByZXR1
cm4gbW9kdWxlLT5tX3NvdXJjZTsgfQorCitAZW5kCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU0ZmRmYWUwMGM3
NDZiOTk1ODJiOTZjODE5MDA3ZWJkZDhiZTVhODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaApAQCAtMCwwICsxLDMyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbXBvcnQgIkpTU2NyaXB0LmgiCisjaW1wb3J0ICJTb3VyY2VDb2RlLmgiCisKKworY29u
c3QgU3RyaW5nJiBnZXRKU1NjcmlwdFNvdXJjZUNvZGUoSlNTY3JpcHQgKik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVJbnRlcm5hbC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlSW50ZXJuYWwuaAppbmRleCA0ZjFhOGY2OWNiZmNjMjlh
ZWIyNjc0NzM4MWQ4ZDVmNWU4MWJhZWFhLi41NGI3NTVlZmZmZTZlZDI0YTVjMzAyMmI3ZDRjM2Ex
ODUwMGIwMWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVJ
bnRlcm5hbC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZUludGVybmFs
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjYsOCArMjYsNyBAQAogI2lmbmRlZiBKU1ZhbHVlSW50ZXJuYWxfaAogI2RlZmluZSBKU1Zh
bHVlSW50ZXJuYWxfaAogCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5o
PgotI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZS5oPgorI2ltcG9ydCA8SmF2YVNjcmlw
dENvcmUvSlNWYWx1ZVByaXZhdGUuaD4KIAogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVy
bmFsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5h
bC5oCmluZGV4IDVjYTlhN2Y0YTEwNzA0NGQ2MDliMTEyNzdiZTg5NzZhNDM2N2FhOWIuLjkxMjJl
ZDQ5YTRlYTFhYTQ5ZWM2NjdmZWY2NjI3ZmM0M2I3NzcxNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaApAQCAtNDYsOCAr
NDYsOCBAQCBKU0NvbnRleHRHcm91cFJlZiBnZXRHcm91cEZyb21WaXJ0dWFsTWFjaGluZShKU1Zp
cnR1YWxNYWNoaW5lICopOwogCiAtIChKU0NvbnRleHQgKiljb250ZXh0Rm9yR2xvYmFsQ29udGV4
dFJlZjooSlNHbG9iYWxDb250ZXh0UmVmKWdsb2JhbENvbnRleHQ7CiAtICh2b2lkKWFkZENvbnRl
eHQ6KEpTQ29udGV4dCAqKXdyYXBwZXIgZm9yR2xvYmFsQ29udGV4dFJlZjooSlNHbG9iYWxDb250
ZXh0UmVmKWdsb2JhbENvbnRleHQ7Ci0KIEBlbmQKKwogI2VuZGlmIC8vIGRlZmluZWQoX19PQkpD
X18pCiAKIHZvaWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYsIEpTQzo6U2xvdFZp
c2l0b3ImLCB2b2lkKiByb290KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvdGVzdHMvdGVzdGFwaS5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVz
dGFwaS5tbQppbmRleCAzN2UxMzg1YzhjNDg0ZWZhZThhOWMzZjkyZTEzNWNhNzNmOTU5MTkyLi40
MzVmZGJiMzZkMjQ0NmU4NWRiNTMxMzYzM2NkNzY0ZmVmNzk5OGIwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0KKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCkBAIC0zMSw3ICszMSw5IEBACiAjaW1wb3J0
ICJERkdXb3JrbGlzdC5oIgogI2ltcG9ydCAiRGF0ZVRlc3RzLmgiCiAjaW1wb3J0ICJKU0Nhc3Qu
aCIKKyNpbXBvcnQgIkpTQ29udGV4dFByaXZhdGUuaCIKICNpbXBvcnQgIkpTRXhwb3J0VGVzdHMu
aCIKKyNpbXBvcnQgIkpTU2NyaXB0LmgiCiAjaW1wb3J0ICJKU1ZhbHVlUHJpdmF0ZS5oIgogI2lt
cG9ydCAiSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgiCiAjaW1wb3J0ICJKU1ZpcnR1YWxNYWNo
aW5lUHJpdmF0ZS5oIgpAQCAtMTgxMiwxMiArMTgxNCwyNDggQEAgc3RhdGljIHZvaWQgcGFyYWxs
ZWxQcm9taXNlUmVzb2x2ZVRlc3QoKQogICAgIH0KIH0KIAordHlwZWRlZiBKU1ZhbHVlICooXlJl
c29sdmVCbG9jaykoSlNDb250ZXh0ICosIEpTVmFsdWUgKiwgSlNTY3JpcHQgKik7Cit0eXBlZGVm
IHZvaWQgKF5GZXRjaEJsb2NrKShKU0NvbnRleHQgKiwgSlNWYWx1ZSAqLCBKU1ZhbHVlICosIEpT
VmFsdWUgKik7CisKK0BpbnRlcmZhY2UgSlNDb250ZXh0RmV0Y2hEZWxlZ2F0ZSA6IEpTQ29udGV4
dCA8SlNNb2R1bGVMb2FkZXJEZWxlZ2F0ZT4KKworKyAoaW5zdGFuY2V0eXBlKWNvbnRleHRXaXRo
QmxvY2tGb3JGZXRjaDooRmV0Y2hCbG9jaylibG9jazsKKworQGVuZAorCitAaW1wbGVtZW50YXRp
b24gSlNDb250ZXh0RmV0Y2hEZWxlZ2F0ZSB7CisgICAgRmV0Y2hCbG9jayBtX2ZldGNoQmxvY2s7
Cit9CisKKysgKGluc3RhbmNldHlwZSljb250ZXh0V2l0aEJsb2NrRm9yRmV0Y2g6KEZldGNoQmxv
Y2spYmxvY2sKK3sKKyAgICBhdXRvICpyZXN1bHQgPSBbW0pTQ29udGV4dEZldGNoRGVsZWdhdGUg
YWxsb2NdIGluaXRdOworICAgIHJlc3VsdC0+bV9mZXRjaEJsb2NrID0gYmxvY2s7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworLSAodm9pZCljb250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IGZl
dGNoTW9kdWxlRm9ySWRlbnRpZmllcjooSlNWYWx1ZSAqKWlkZW50aWZpZXIgd2l0aFJlc29sdmVI
YW5kbGVyOihKU1ZhbHVlICopcmVzb2x2ZSBhbmRSZWplY3RIYW5kbGVyOihKU1ZhbHVlICopcmVq
ZWN0Cit7CisgICAgbV9mZXRjaEJsb2NrKGNvbnRleHQsIGlkZW50aWZpZXIsIHJlc29sdmUsIHJl
amVjdCk7Cit9CisKK0BlbmQKKworc3RhdGljIHZvaWQgY2hlY2tNb2R1bGVDb2RlUmFuKEpTQ29u
dGV4dCAqY29udGV4dCwgSlNWYWx1ZSAqcHJvbWlzZSwgSlNWYWx1ZSAqZXhwZWN0ZWQpCit7Cisg
ICAgX19ibG9jayBCT09MIHByb21pc2VXYXNSZXNvbHZlZCA9IGZhbHNlOworICAgIFtwcm9taXNl
IGludm9rZU1ldGhvZDpAInRoZW4iIHdpdGhBcmd1bWVudHM6QFteKEpTVmFsdWUgKmV4cG9ydFZh
bHVlKSB7CisgICAgICAgIHByb21pc2VXYXNSZXNvbHZlZCA9IHRydWU7CisgICAgICAgIGNoZWNr
UmVzdWx0KEAibW9kdWxlIGV4cG9ydGVkIHZhbHVlICdleHAnIGlzIG51bGwiLCBbZXhwb3J0VmFs
dWVbQCJleHAiXSBpc0VxdWFsVG9PYmplY3Q6ZXhwZWN0ZWRdKTsKKyAgICAgICAgY2hlY2tSZXN1
bHQoQCJyYW4gaXMgJUAiLCBbY29udGV4dFtAInJhbiJdIGlzRXF1YWxUb09iamVjdDpleHBlY3Rl
ZF0pOworICAgIH0sIF4oSlNWYWx1ZSAqZXJyb3IpIHsKKyAgICAgICAgTlNMb2coQCIlQCIsIFtl
cnJvciB0b1N0cmluZ10pOworICAgICAgICBjaGVja1Jlc3VsdChAIm1vZHVsZSBncmFwaCB3YXMg
cmVzb2x2ZWQgYXMgZXhwZWN0ZWQiLCBOTyk7CisgICAgfV1dOworICAgIGNoZWNrUmVzdWx0KEAi
UHJvbWlzZSB3YXMgcmVzb2x2ZWQiLCBwcm9taXNlV2FzUmVzb2x2ZWQpOworfQorCitzdGF0aWMg
dm9pZCBjaGVja01vZHVsZVdhc1JlamVjdGVkKEpTQ29udGV4dCAqY29udGV4dCwgSlNWYWx1ZSAq
cHJvbWlzZSkKK3sKKyAgICBfX2Jsb2NrIEJPT0wgcHJvbWlzZVdhc1JlamVjdGVkID0gZmFsc2U7
CisgICAgW3Byb21pc2UgaW52b2tlTWV0aG9kOkAidGhlbiIgd2l0aEFyZ3VtZW50czpAW14oKSB7
CisgICAgICAgIGNoZWNrUmVzdWx0KEAibW9kdWxlIHdhcyByZWplY3RlZCBhcyBleHBlY3RlZCIs
IE5PKTsKKyAgICB9LCBeKEpTVmFsdWUgKmVycm9yKSB7CisgICAgICAgIHByb21pc2VXYXNSZWpl
Y3RlZCA9IHRydWU7CisgICAgICAgIE5TTG9nKEAiJUAiLCBbZXJyb3IgdG9TdHJpbmddKTsKKyAg
ICAgICAgY2hlY2tSZXN1bHQoQCJtb2R1bGUgZ3JhcGggd2FzIHJlamVjdGVkIHdpdGggZXJyb3Ii
LCAhW2Vycm9yIGlzRXF1YWxXaXRoVHlwZUNvZXJjaW9uVG9PYmplY3Q6W0pTVmFsdWUgdmFsdWVX
aXRoTnVsbEluQ29udGV4dDpjb250ZXh0XV0pOworICAgIH1dXTsKK30KKworc3RhdGljIHZvaWQg
dGVzdEZldGNoKCkKK3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgYXV0byAqY29u
dGV4dCA9IFtKU0NvbnRleHRGZXRjaERlbGVnYXRlIGNvbnRleHRXaXRoQmxvY2tGb3JGZXRjaDpe
KEpTQ29udGV4dCAqY29udGV4dCwgSlNWYWx1ZSAqaWRlbnRpZmllciwgSlNWYWx1ZSAqcmVzb2x2
ZSwgSlNWYWx1ZSAqcmVqZWN0KSB7CisgICAgICAgICAgICBpZiAoW2lkZW50aWZpZXIgaXNFcXVh
bFRvT2JqZWN0OkAiZmlsZTovLy9kaXJlY3RvcnkvYmFyLmpzIl0pCisgICAgICAgICAgICAgICAg
W3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0V2l0aFNvdXJjZTpA
ImltcG9ydCBcIi4uL2Zvby5qc1wiOyBleHBvcnQgbGV0IGV4cCA9IG51bGw7IiBpblZpcnR1YWxN
YWNoaW5lOltjb250ZXh0IHZpcnR1YWxNYWNoaW5lXV1dXTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KFtpZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZpbGU6Ly8vZm9vLmpzIl0pCisgICAgICAg
ICAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0V2l0
aFNvdXJjZTpAImdsb2JhbFRoaXMucmFuID0gbnVsbDsiIGluVmlydHVhbE1hY2hpbmU6W2NvbnRl
eHQgdmlydHVhbE1hY2hpbmVdXV1dOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IFtyZWplY3QgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZy
b21NZXNzYWdlOkAiV2VpcmQgcGF0aCIgaW5Db250ZXh0OmNvbnRleHRdXV07CisgICAgICAgIH1d
OworICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAg
ICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0KCcu
L2Jhci5qcycpOyIgd2l0aFNvdXJjZVVSTDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOkAiL2RpcmVj
dG9yeSIgaXNEaXJlY3Rvcnk6WUVTXV07CisgICAgICAgIEpTVmFsdWUgKm51bGwgPSBbSlNWYWx1
ZSB2YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICBjaGVja01vZHVsZUNv
ZGVSYW4oY29udGV4dCwgcHJvbWlzZSwgbnVsbCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB0
ZXN0RmV0Y2hXaXRoVHdvQ3ljbGUoKQoreworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAg
ICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZldGNoRGVsZWdhdGUgY29udGV4dFdpdGhCbG9j
a0ZvckZldGNoOl4oSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICppZGVudGlmaWVyLCBKU1Zh
bHVlICpyZXNvbHZlLCBKU1ZhbHVlICpyZWplY3QpIHsKKyAgICAgICAgICAgIGlmIChbaWRlbnRp
ZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL2RpcmVjdG9yeS9iYXIuanMiXSkKKyAgICAg
ICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRX
aXRoU291cmNlOkAiaW1wb3J0IHsgbiB9IGZyb20gXCIuLi9mb28uanNcIjsgZXhwb3J0IGxldCBl
eHAgPSBuOyIgaW5WaXJ0dWFsTWFjaGluZTpbY29udGV4dCB2aXJ0dWFsTWFjaGluZV1dXV07Cisg
ICAgICAgICAgICBlbHNlIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8v
L2Zvby5qcyJdKQorICAgICAgICAgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBb
W0pTU2NyaXB0IHNjcmlwdFdpdGhTb3VyY2U6QCJpbXBvcnQgXCJkaXJlY3RvcnkvYmFyLmpzXCI7
IGdsb2JhbFRoaXMucmFuID0gbnVsbDsgZXhwb3J0IGxldCBuID0gbnVsbDsiIGluVmlydHVhbE1h
Y2hpbmU6W2NvbnRleHQgdmlydHVhbE1hY2hpbmVdXV1dOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIFtyZWplY3QgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNWYWx1ZSB2YWx1ZVdp
dGhOZXdFcnJvckZyb21NZXNzYWdlOkAiV2VpcmQgcGF0aCIgaW5Db250ZXh0OmNvbnRleHRdXV07
CisgICAgICAgIH1dOworICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29u
dGV4dDsKKyAgICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0
OkAiaW1wb3J0KCcuL2Jhci5qcycpOyIgd2l0aFNvdXJjZVVSTDpbTlNVUkwgZmlsZVVSTFdpdGhQ
YXRoOkAiL2RpcmVjdG9yeSIgaXNEaXJlY3Rvcnk6WUVTXV07CisgICAgICAgIEpTVmFsdWUgKm51
bGwgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICBj
aGVja01vZHVsZUNvZGVSYW4oY29udGV4dCwgcHJvbWlzZSwgbnVsbCk7CisgICAgfQorfQorCisK
K3N0YXRpYyB2b2lkIHRlc3RGZXRjaFdpdGhUaHJlZUN5Y2xlKCkKK3sKKyAgICBAYXV0b3JlbGVh
c2Vwb29sIHsKKyAgICAgICAgYXV0byAqY29udGV4dCA9IFtKU0NvbnRleHRGZXRjaERlbGVnYXRl
IGNvbnRleHRXaXRoQmxvY2tGb3JGZXRjaDpeKEpTQ29udGV4dCAqY29udGV4dCwgSlNWYWx1ZSAq
aWRlbnRpZmllciwgSlNWYWx1ZSAqcmVzb2x2ZSwgSlNWYWx1ZSAqcmVqZWN0KSB7CisgICAgICAg
ICAgICBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0OkAiZmlsZTovLy9kaXJlY3Rvcnkv
YmFyLmpzIl0pCisgICAgICAgICAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtb
SlNTY3JpcHQgc2NyaXB0V2l0aFNvdXJjZTpAImltcG9ydCB7IG4gfSBmcm9tIFwiLi4vZm9vLmpz
XCI7IGV4cG9ydCBsZXQgZm9vID0gbjsiIGluVmlydHVhbE1hY2hpbmU6W2NvbnRleHQgdmlydHVh
bE1hY2hpbmVdXV1dOworICAgICAgICAgICAgZWxzZSBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRv
T2JqZWN0OkAiZmlsZTovLy9mb28uanMiXSkKKyAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxs
V2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNlOkAiaW1wb3J0IFwib3Ro
ZXJEaXJlY3RvcnkvYmF6LmpzXCI7IGV4cG9ydCBsZXQgbiA9IG51bGw7IiBpblZpcnR1YWxNYWNo
aW5lOltjb250ZXh0IHZpcnR1YWxNYWNoaW5lXV1dXTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFtp
ZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZpbGU6Ly8vb3RoZXJEaXJlY3RvcnkvYmF6Lmpz
Il0pCisgICAgICAgICAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3Jp
cHQgc2NyaXB0V2l0aFNvdXJjZTpAImltcG9ydCB7IGZvbyB9IGZyb20gXCIuLi9kaXJlY3Rvcnkv
YmFyLmpzXCI7IGdsb2JhbFRoaXMucmFuID0gbnVsbDsgZXhwb3J0IGxldCBleHAgPSBmb287IiBp
blZpcnR1YWxNYWNoaW5lOltjb250ZXh0IHZpcnR1YWxNYWNoaW5lXV1dXTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBbcmVqZWN0IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTVmFs
dWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpAIldlaXJkIHBhdGgiIGluQ29udGV4dDpj
b250ZXh0XV1dOworICAgICAgICB9XTsKKyAgICAgICAgY29udGV4dC5tb2R1bGVMb2FkZXJEZWxl
Z2F0ZSA9IGNvbnRleHQ7CisgICAgICAgIEpTVmFsdWUgKnByb21pc2UgPSBbY29udGV4dCBldmFs
dWF0ZVNjcmlwdDpAImltcG9ydCgnLi4vb3RoZXJEaXJlY3RvcnkvYmF6LmpzJyk7IiB3aXRoU291
cmNlVVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvZGlyZWN0b3J5IiBpc0RpcmVjdG9yeTpZ
RVNdXTsKKyAgICAgICAgSlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE51bGxJbkNv
bnRleHQ6Y29udGV4dF07CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCBwcm9t
aXNlLCBudWxsKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkZXJSZXNvbHZlc0Fi
c29sdXRlU2NyaXB0VVJMKCkKK3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgYXV0
byAqY29udGV4dCA9IFtKU0NvbnRleHRGZXRjaERlbGVnYXRlIGNvbnRleHRXaXRoQmxvY2tGb3JG
ZXRjaDpeKEpTQ29udGV4dCAqY29udGV4dCwgSlNWYWx1ZSAqaWRlbnRpZmllciwgSlNWYWx1ZSAq
cmVzb2x2ZSwgSlNWYWx1ZSAqcmVqZWN0KSB7CisgICAgICAgICAgICBpZiAoW2lkZW50aWZpZXIg
aXNFcXVhbFRvT2JqZWN0OkAiZmlsZTovLy9kaXJlY3RvcnkvYmFyLmpzIl0pCisgICAgICAgICAg
ICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0V2l0aFNv
dXJjZTpAImV4cG9ydCBsZXQgZXhwID0gbnVsbDsgZ2xvYmFsVGhpcy5yYW4gPSBudWxsOyIgaW5W
aXJ0dWFsTWFjaGluZTpbY29udGV4dCB2aXJ0dWFsTWFjaGluZV1dXV07CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgW3JlamVjdCBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1ZhbHVl
IHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6QCJXZWlyZCBwYXRoIiBpbkNvbnRleHQ6Y29u
dGV4dF1dXTsKKyAgICAgICAgfV07CisgICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVyRGVsZWdh
dGUgPSBjb250ZXh0OworICAgICAgICBKU1ZhbHVlICpwcm9taXNlID0gW2NvbnRleHQgZXZhbHVh
dGVTY3JpcHQ6QCJpbXBvcnQoJy9kaXJlY3RvcnkvYmFyLmpzJyk7Il07CisgICAgICAgIEpTVmFs
dWUgKm51bGwgPSBbSlNWYWx1ZSB2YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRleHRdOworICAg
ICAgICBjaGVja01vZHVsZUNvZGVSYW4oY29udGV4dCwgcHJvbWlzZSwgbnVsbCk7CisgICAgfQor
fQorCitzdGF0aWMgdm9pZCB0ZXN0TG9hZGVyUmVqZWN0c05pbFNjcmlwdFVSTCgpCit7CisgICAg
QGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0RmV0
Y2hEZWxlZ2F0ZSBjb250ZXh0V2l0aEJsb2NrRm9yRmV0Y2g6XihKU0NvbnRleHQgKiwgSlNWYWx1
ZSAqLCBKU1ZhbHVlICosIEpTVmFsdWUgKikgeworICAgICAgICAgICAgY2hlY2tSZXN1bHQoQCJD
b2RlIGlzIG5vdCBydW4iLCBOTyk7CisgICAgICAgIH1dOworICAgICAgICBjb250ZXh0Lm1vZHVs
ZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtj
b250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0KCcuLi9vdGhlckRpcmVjdG9yeS9iYXouanMn
KTsiXTsKKyAgICAgICAgY2hlY2tNb2R1bGVXYXNSZWplY3RlZChjb250ZXh0LCBwcm9taXNlKTsK
KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkZXJSZWplY3RzRmFpbGVkRmV0Y2goKQor
eworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29u
dGV4dEZldGNoRGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl4oSlNDb250ZXh0ICpj
b250ZXh0LCBKU1ZhbHVlICosIEpTVmFsdWUgKiwgSlNWYWx1ZSAqcmVqZWN0KSB7CisgICAgICAg
ICAgICBbcmVqZWN0IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTVmFsdWUgdmFsdWVXaXRoTmV3RXJy
b3JGcm9tTWVzc2FnZTpAIk5vcGUiIGluQ29udGV4dDpjb250ZXh0XV1dOworICAgICAgICB9XTsK
KyAgICAgICAgY29udGV4dC5tb2R1bGVMb2FkZXJEZWxlZ2F0ZSA9IGNvbnRleHQ7CisgICAgICAg
IEpTVmFsdWUgKnByb21pc2UgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImltcG9ydCgnL290
aGVyRGlyZWN0b3J5L2Jhei5qcycpOyJdOworICAgICAgICBjaGVja01vZHVsZVdhc1JlamVjdGVk
KGNvbnRleHQsIHByb21pc2UpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGVzdEltcG9ydE1v
ZHVsZVR3aWNlKCkKK3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgYXV0byAqY29u
dGV4dCA9IFtKU0NvbnRleHRGZXRjaERlbGVnYXRlIGNvbnRleHRXaXRoQmxvY2tGb3JGZXRjaDpe
KEpTQ29udGV4dCAqIGNvbnRleHQsIEpTVmFsdWUgKiwgSlNWYWx1ZSAqcmVzb2x2ZSwgSlNWYWx1
ZSAqKSB7CisgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1Njcmlw
dCBzY3JpcHRXaXRoU291cmNlOkAicmFuKys7IGV4cG9ydCBsZXQgZXhwID0gMTsiIGluVmlydHVh
bE1hY2hpbmU6W2NvbnRleHQgdmlydHVhbE1hY2hpbmVdXV1dOworICAgICAgICB9XTsKKyAgICAg
ICAgY29udGV4dC5tb2R1bGVMb2FkZXJEZWxlZ2F0ZSA9IGNvbnRleHQ7CisgICAgICAgIGNvbnRl
eHRbQCJyYW4iXSA9IEAoMCk7CisgICAgICAgIEpTVmFsdWUgKnByb21pc2UgPSBbY29udGV4dCBl
dmFsdWF0ZVNjcmlwdDpAImltcG9ydCgnL2Jhei5qcycpOyJdOworICAgICAgICBKU1ZhbHVlICpw
cm9taXNlMiA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0KCcvYmF6LmpzJyk7Il07
CisgICAgICAgIEpTVmFsdWUgKm9uZSA9IFtKU1ZhbHVlIHZhbHVlV2l0aEludDMyOjEgaW5Db250
ZXh0OmNvbnRleHRdOworICAgICAgICBjaGVja01vZHVsZUNvZGVSYW4oY29udGV4dCwgcHJvbWlz
ZSwgb25lKTsKKyAgICAgICAgY2hlY2tNb2R1bGVDb2RlUmFuKGNvbnRleHQsIHByb21pc2UyLCBv
bmUpOworICAgIH0KK30KKworQGludGVyZmFjZSBKU0NvbnRleHRGaWxlTG9hZGVyRGVsZWdhdGUg
OiBKU0NvbnRleHQgPEpTTW9kdWxlTG9hZGVyRGVsZWdhdGU+CisKKysgKGluc3RhbmNldHlwZSlu
ZXdDb250ZXh0OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBKU0NvbnRleHRGaWxlTG9hZGVy
RGVsZWdhdGUgeworfQorCisrIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dAoreworICAgIGF1dG8g
KnJlc3VsdCA9IFtbSlNDb250ZXh0RmlsZUxvYWRlckRlbGVnYXRlIGFsbG9jXSBpbml0XTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgTlNVUkwgKnJlc29sdmVQYXRoVG9TY3JpcHRz
KCkKK3sKKyAgICBOU1N0cmluZyAqYXJnMCA9IE5TUHJvY2Vzc0luZm8ucHJvY2Vzc0luZm8uYXJn
dW1lbnRzWzBdOworICAgIE5TVVJMICpiYXNlOworICAgIGlmIChbYXJnMCBoYXNQcmVmaXg6QCIv
Il0pCisgICAgICAgIGJhc2UgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOmFyZzAgaXNEaXJlY3Rv
cnk6Tk9dOworICAgIGVsc2UgeworICAgICAgICBjb25zdCBzaXplX3QgbWF4TGVuZ3RoID0gMTAw
MDA7CisgICAgICAgIGNoYXIgY3dkW21heExlbmd0aF07CisgICAgICAgIGlmICghZ2V0Y3dkKGN3
ZCwgbWF4TGVuZ3RoKSkgeworICAgICAgICAgICAgTlNMb2coQCJnZXRjd2QgZXJyb3JlZCB3aXRo
IGNvZGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAg
ICAgIH0KKyAgICAgICAgTlNVUkwgKmN3ZFVSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlcyIsIGN3ZF1dOworICAgICAgICBiYXNlID0gW05T
VVJMIGZpbGVVUkxXaXRoUGF0aDphcmcwIGlzRGlyZWN0b3J5Ok5PIHJlbGF0aXZlVG9VUkw6Y3dk
VVJMXTsKKyAgICB9CisgICAgcmV0dXJuIFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIuL3Rlc3Rh
cGlTY3JpcHRzLyIgaXNEaXJlY3Rvcnk6WUVTIHJlbGF0aXZlVG9VUkw6YmFzZV07Cit9CisKKy0g
KHZvaWQpY29udGV4dDooSlNDb250ZXh0ICopY29udGV4dCBmZXRjaE1vZHVsZUZvcklkZW50aWZp
ZXI6KEpTVmFsdWUgKilpZGVudGlmaWVyIHdpdGhSZXNvbHZlSGFuZGxlcjooSlNWYWx1ZSAqKXJl
c29sdmUgYW5kUmVqZWN0SGFuZGxlcjooSlNWYWx1ZSAqKXJlamVjdAoreworICAgIE5TVVJMICpm
aWxlUGF0aCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOltpZGVudGlmaWVyIHRvU3RyaW5nXV07Cisg
ICAgYXV0byAqc2NyaXB0ID0gW0pTU2NyaXB0IHNjcmlwdEZyb21VVEY4RmlsZTpmaWxlUGF0aCBp
blZpcnR1YWxNYWNoaW5lOltjb250ZXh0IHZpcnR1YWxNYWNoaW5lXSB3aXRoQ29kZVNpZ25pbmc6
bmlsIGFuZEJ5dGVjb2RlQ2FjaGU6bmlsXTsKKyAgICBpZiAoc2NyaXB0KQorICAgICAgICBbcmVz
b2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW3NjcmlwdF1dOworICAgIGVsc2UKKyAgICAgICAgW3Jl
amVjdCBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1l
c3NhZ2U6QCJVbmFibGUgdG8gY3JlYXRlIFNjcmlwdCIgaW5Db250ZXh0OmNvbnRleHRdXV07Cit9
CisKK0BlbmQKKworc3RhdGljIHZvaWQgdGVzdExvYWRCYXNpY0ZpbGUoKQoreworICAgIEBhdXRv
cmVsZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZpbGVMb2Fk
ZXJEZWxlZ2F0ZSBuZXdDb250ZXh0XTsKKyAgICAgICAgY29udGV4dC5tb2R1bGVMb2FkZXJEZWxl
Z2F0ZSA9IGNvbnRleHQ7CisgICAgICAgIEpTVmFsdWUgKnByb21pc2UgPSBbY29udGV4dCBldmFs
dWF0ZVNjcmlwdDpAImltcG9ydCgnLi9iYXNpYy5qcycpOyIgd2l0aFNvdXJjZVVSTDpyZXNvbHZl
UGF0aFRvU2NyaXB0cygpXTsKKyAgICAgICAgSlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVlIHZhbHVl
V2l0aE51bGxJbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihj
b250ZXh0LCBwcm9taXNlLCBudWxsKTsKKyAgICB9Cit9CisKIHZvaWQgdGVzdE9iamVjdGl2ZUNB
UEkoKQogewogICAgIE5TTG9nKEAiVGVzdGluZyBPYmplY3RpdmUtQyBBUEkiKTsKKwogICAgIGNo
ZWNrTmVnYXRpdmVOU0ludGVnZXJzKCk7CiAgICAgcnVuSklUVGhyZWFkTGltaXRUZXN0cygpOwog
CisgICAgdGVzdExvYWRlclJlc29sdmVzQWJzb2x1dGVTY3JpcHRVUkwoKTsKKyAgICB0ZXN0RmV0
Y2goKTsKKyAgICB0ZXN0RmV0Y2hXaXRoVHdvQ3ljbGUoKTsKKyAgICB0ZXN0RmV0Y2hXaXRoVGhy
ZWVDeWNsZSgpOworICAgIHRlc3RJbXBvcnRNb2R1bGVUd2ljZSgpOworCisgICAgdGVzdExvYWRl
clJlamVjdHNOaWxTY3JpcHRVUkwoKTsKKyAgICB0ZXN0TG9hZGVyUmVqZWN0c0ZhaWxlZEZldGNo
KCk7CisKKyAgICAvLyBGaWxlIGxvYWRpbmcKKyAgICB0ZXN0TG9hZEJhc2ljRmlsZSgpOworCiAg
ICAgcHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZXNvbHZlRWFnZXIpOwogICAgIHBy
b21pc2VXaXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6UmVqZWN0RWFnZXIpOwogICAgIHByb21pc2VX
aXRoRXhlY3V0b3IoUmVzb2x1dGlvbjo6UmVzb2x2ZUxhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy9iYXNpYy5qcyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvYmFzaWMuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uODUyOGM0OWNjMmE3NGU2Njk5MjY2YjJjOGEyYzdkMTBkYTc3NzIzOAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMv
YmFzaWMuanMKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCitleHBvcnQgbGV0IGV4cCA9IG51bGw7CitnbG9iYWxUaGlzLnJhbiA9
IG51bGw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGYzZWYxYzQyMzgwYjNjZWYy
ZjAwZmFjNjU4ZTkyZTlkNmU3OTlmMDMuLmY2Zjk2MDhhZjI4ODhiODY1ZDI1ZjRhNDBmMmQ5ZTUx
OWJlOGFkMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDU3LDYgKzEwNTcs
OCBAQAogCQk1MzlGQjhCQTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOUZCOEI5MUM5OURB
N0MwMDk0MEZBMSAvKiBKU0FycmF5SW5saW5lcy5oICovOyB9OwogCQk1M0I0QkQxMjFGNjhCMzI1
MDBEMkJFQTMgLyogV2FzbU9wcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTMzQjE1REUxREM3RjQ2MzAwNEQ1MDBBIC8qIFdhc21PcHMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0I2MDFFQzIwMzRC
OEM1MDA2QkU2NjcgLyogSlNDYXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1M0I2MDFFQjIwMzRCOEM1MDA2QkU2NjcgLyogSlNDYXN0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTNDM0Q1RTUyMUVD
RTc3MjAwODdGREZDIC8qIGJhc2ljLmpzIGluIENvcHkgU3VwcG9ydCBTY3JpcHQgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNDM0Q1RTQyMUVDRTZDRTAwODdGREZDIC8qIGJh
c2ljLmpzICovOyB9OworCQk1M0M0RjY2QjIxQjFBNDA5MDAyRkQwMDkgLyogSlNBUElHbG9iYWxP
YmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
QzRGNjZBMjFCMUE0MDkwMDJGRDAwOSAvKiBKU0FQSUdsb2JhbE9iamVjdC5oICovOyB9OwogCQk1
M0M2RkVFRjFFOEFERkE5MDBCMTg0MjUgLyogV2FzbU9wY29kZU9yaWdpbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNDNkZFRUUxRThBREZBOTAwQjE4
NDI1IC8qIFdhc21PcGNvZGVPcmlnaW4uaCAqLzsgfTsKIAkJNTNDQTczMEExRUE1MzNEODAwNzYw
NDlEIC8qIFdhc21CQlFQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1M0NBNzMwODFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJCUVBsYW4uaCAqLzsg
fTsKIAkJNTNENDQ0REMxREFGMDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNENDQ0REIxREFG
MDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5oICovOyB9OwpAQCAtMTA2NSw2ICsx
MDY3LDggQEAKIAkJNTNFOUUwQUMxRUFFODNERjAwRkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFk
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFOUUw
QUExRUFFODNERTAwRkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFkcy5oICovOyB9OwogCQk1M0U5
RTBBRjFFQUVDNDU3MDBGRUUyNTEgLyogV2FzbVRpZXJVcENvdW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0U5RTBBRTFFQUVDNDU3MDBGRUUyNTEg
LyogV2FzbVRpZXJVcENvdW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNTNFQUZFMkYyMDhERkFCNDAwN0Q1MjRCIC8qIHRlc3RhcGkuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxRDRFMTkxRjU5
Q0REMjAwRUM4MzZDIC8qIHRlc3RhcGkuY3BwICovOyB9OworCQk1M0VFMDFCNjIxOEY2OTE2MDBB
RDFGOEQgLyogSlNTY3JpcHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzRUUwMUI1MjE4RjY5MEYwMEFEMUY4RCAvKiBKU1NjcmlwdC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUzRUUwMUI4MjE4RjdF
RkYwMEFEMUY4RCAvKiBKU1NjcmlwdEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0VFMDFCNzIxOEY3RUZGMDBBRDFGOEQgLyogSlNTY3Jp
cHRJbnRlcm5hbC5oICovOyB9OwogCQk1M0YxMUY0MTIwOTEzOEQ3MDBFNDExQTcgLyogSlNJbW11
dGFibGVCdXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzRjExRjQwMjA5MTM4RDcwMEU0MTFBNyAvKiBKU0ltbXV0YWJsZUJ1dHRlcmZseS5o
ICovOyB9OwogCQk1M0Y0MEU4NTFENThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rpb25zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU4NDFENThG
OTc3MDA5OUExQjYgLyogV2FzbVNlY3Rpb25zLmggKi87IH07CiAJCTUzRjQwRThCMUQ1OTAxQkIw
MDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVu
Y3Rpb25QYXJzZXIuaCAqLzsgfTsKQEAgLTIwMDMsOSArMjAwNywxMCBAQAogCQk1REJCMTUxMTEz
MUQwQjEzMDA1NkFEMzYgLyogQ29weSBTdXBwb3J0IFNjcmlwdCAqLyA9IHsKIAkJCWlzYSA9IFBC
WENvcHlGaWxlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAxMjsKLQkJCWRzdFBh
dGggPSAiIjsKKwkJCWRzdFBhdGggPSB0ZXN0YXBpU2NyaXB0czsKIAkJCWRzdFN1YmZvbGRlclNw
ZWMgPSAxNjsKIAkJCWZpbGVzID0gKAorCQkJCTUzQzNENUU1MjFFQ0U3NzIwMDg3RkRGQyAvKiBi
YXNpYy5qcyBpbiBDb3B5IFN1cHBvcnQgU2NyaXB0ICovLAogCQkJCUZFQ0I4QjJBMUQyNUNCNUEw
MDZGMjQ2MyAvKiB0ZXN0YXBpLWZ1bmN0aW9uLW92ZXJyaWRlcy5qcyBpbiBDb3B5IFN1cHBvcnQg
U2NyaXB0ICovLAogCQkJCTVEQkIxNTFCMTMxRDBCMzEwMDU2QUQzNiAvKiB0ZXN0YXBpLmpzIGlu
IENvcHkgU3VwcG9ydCBTY3JpcHQgKi8sCiAJCQkpOwpAQCAtMzU1Nyw2ICszNTYyLDkgQEAKIAkJ
NTNCMEJFMzUxRTU2MUIwOTAwQThGQzI5IC8qIFByb3h5YWJsZUFjY2Vzc0Nhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzQjBCRTM3MUU1NjFCMjQwMEE4RkMyOSAv
KiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1M0I2MDFFQjIwMzRCOEM1MDA2QkU2NjcgLyogSlNDYXN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTQ2FzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0Mz
RDVFNDIxRUNFNkNFMDA4N0ZERkMgLyogYmFzaWMuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmph
dmFzY3JpcHQ7IHBhdGggPSBiYXNpYy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTNDNEY2NkEyMUIxQTQwOTAwMkZEMDA5IC8qIEpTQVBJR2xvYmFsT2JqZWN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTQVBJR2xvYmFsT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUzQzRGNjZDMjFCMUE3Q0EwMDJGRDAwOSAvKiBKU0FQSUdsb2JhbE9iamVjdC5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IEpTQVBJR2xvYmFsT2JqZWN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1M0M2RkVFRTFFOEFERkE5MDBCMTg0MjUgLyogV2FzbU9wY29kZU9yaWdpbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtT3Bjb2RlT3JpZ2luLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzQzZGRUYwMUU4QUZFMEMwMEIxODQyNSAvKiBX
YXNtT3Bjb2RlT3JpZ2luLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdhc21PcGNvZGVPcmlnaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0NB
NzMwNzFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJCUVBsYW4uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUJCUVBsYW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMzU2OSw2ICszNTc3LDkgQEAKIAkJNTNFOUUwQTkxRUFFODNERTAwRkVFMjUx
IC8qIFdhc21NYWNoaW5lVGhyZWFkcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXYXNtTWFjaGluZVRocmVhZHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1M0U5RTBBQTFFQUU4M0RFMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21NYWNoaW5lVGhyZWFkcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0U5RTBBRTFFQUVDNDU3MDBGRUUyNTEgLyogV2Fz
bVRpZXJVcENvdW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21UaWVy
VXBDb3VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0VFMDFCNDIxOEY2OTBF
MDBBRDFGOEQgLyogSlNTY3JpcHQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBKU1NjcmlwdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNFRTAx
QjUyMThGNjkwRjAwQUQxRjhEIC8qIEpTU2NyaXB0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTU2NyaXB0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRUUw
MUI3MjE4RjdFRkYwMEFEMUY4RCAvKiBKU1NjcmlwdEludGVybmFsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTU2NyaXB0SW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTNGMTFGNDAyMDkxMzhENzAwRTQxMUE3IC8qIEpTSW1tdXRhYmxlQnV0dGVy
Zmx5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW1tdXRhYmxlQnV0dGVyZmx5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUzRjExRjQyMjA5MTc0OTgwMEU0MTFBNyAvKiBKU0ltbXV0YWJs
ZUJ1dHRlcmZseS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ltbXV0YWJsZUJ1dHRlcmZseS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjI1NkUxMUI4N0UyODAwMEI0Qjc2
OCAvKiBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNTUzOCw2ICs1NTQ5LDcgQEAKIAkJMTQxMjExMDAwQTQ4Nzcy
NjAwNDgwMjU1IC8qIHRlc3RzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQk1M0MzRDVFMzIxRUNFNjhFMDA4N0ZERkMgLyogdGVzdGFwaVNjcmlwdHMgKi8s
CiAJCQkJRkVGMDQwNTAxQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5jcHAg
Ki8sCiAJCQkJRkVGMDQwNTIxQUFFQzRFRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5o
ICovLAogCQkJCUMyOUVDQjAyMTgwNEQwRUQwMEQyQ0JCNCAvKiBDdXJyZW50VGhpc0luc2lkZUJs
b2NrR2V0dGVyVGVzdC5oICovLApAQCAtNTkzNyw2ICs1OTQ5LDggQEAKIAkJCQk1MzUyOUE0QjFD
NDU3Qjc1MDAwQjQ5QzYgLyogQVBJVXRpbHMuaCAqLywKIAkJCQkxQ0FBOEI0QTBEMzJDMzlBMDA0
MUJDRkYgLyogSmF2YVNjcmlwdC5oICovLAogCQkJCTFDQUE4QjRCMEQzMkMzOUEwMDQxQkNGRiAv
KiBKYXZhU2NyaXB0Q29yZS5oICovLAorCQkJCTUzQzRGNjZBMjFCMUE0MDkwMDJGRDAwOSAvKiBK
U0FQSUdsb2JhbE9iamVjdC5oICovLAorCQkJCTUzQzRGNjZDMjFCMUE3Q0EwMDJGRDAwOSAvKiBK
U0FQSUdsb2JhbE9iamVjdC5tbSAqLywKIAkJCQlCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUgLyog
SlNBUElWYWx1ZVdyYXBwZXIuY3BwICovLAogCQkJCUJDMDg5NEQ2MEZBRkJBMkQwMDAwMTg2NSAv
KiBKU0FQSVZhbHVlV3JhcHBlci5oICovLAogCQkJCUMyQ0YzOUMwMTZFMTVBODEwMERENjlCRSAv
KiBKU0FQSVdyYXBwZXJPYmplY3QuaCAqLywKQEAgLTU5NzgsNiArNTk5Miw5IEBACiAJCQkJQTU1
MkMzN0QxQUREQjhGRTAwMTM5NzI2IC8qIEpTUmVtb3RlSW5zcGVjdG9yLmNwcCAqLywKIAkJCQlB
NTUyQzM3RTFBRERCOEZFMDAxMzk3MjYgLyogSlNSZW1vdGVJbnNwZWN0b3IuaCAqLywKIAkJCQk5
NUMxOEQzRTBDOTBFN0VGMDBFNzJGNzMgLyogSlNSZXRhaW5QdHIuaCAqLywKKwkJCQk1M0VFMDFC
NTIxOEY2OTBGMDBBRDFGOEQgLyogSlNTY3JpcHQuaCAqLywKKwkJCQk1M0VFMDFCNDIxOEY2OTBF
MDBBRDFGOEQgLyogSlNTY3JpcHQubW0gKi8sCisJCQkJNTNFRTAxQjcyMThGN0VGRjAwQUQxRjhE
IC8qIEpTU2NyaXB0SW50ZXJuYWwuaCAqLywKIAkJCQlBN0MwQzRBQTE2N0MwOENEMDAxNzAxMUQg
LyogSlNTY3JpcHRSZWYuY3BwICovLAogCQkJCUE3QzBDNEFCMTY3QzA4Q0QwMDE3MDExRCAvKiBK
U1NjcmlwdFJlZlByaXZhdGUuaCAqLywKIAkJCQkxNDgyQjc0QzBBNDMwMzI4MDA1MTdDRkMgLyog
SlNTdHJpbmdSZWYuY3BwICovLApAQCAtNjI3OCw2ICs2Mjk1LDE1IEBACiAJCQlwYXRoID0gInVu
aWZpZWQtc291cmNlcyI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk1M0Mz
RDVFMzIxRUNFNjhFMDA4N0ZERkMgLyogdGVzdGFwaVNjcmlwdHMgKi8gPSB7CisJCQlpc2EgPSBQ
QlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTUzQzNENUU0MjFFQ0U2Q0UwMDg3RkRGQyAv
KiBiYXNpYy5qcyAqLywKKwkJCSk7CisJCQluYW1lID0gdGVzdGFwaVNjcmlwdHM7CisJCQlwYXRo
ID0gQVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
KwkJfTsKIAkJNjUwRkRGOEQwOUQwRkNBNzAwNzY5RTU0IC8qIERlcml2ZWQgU291cmNlcyAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC05MTY2LDYgKzkxOTIs
NyBAQAogCQkJCTBGNUVGOTFGMTY4NzhGN0QwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQzcxMkUzMTdDRDg3OTMwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREMwMTg0MTkxRDEwQzE4
OTAwNTdCMDUzIC8qIEpJVFdvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0M0RjY2QjIx
QjFBNDA5MDAyRkQwMDkgLyogSlNBUElHbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg0MDQ4MDEzMTAyMUExRDkwMDhFN0YwMSAvKiBKU0FQSVZhbHVlV3JhcHBlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzJDRjM5QzIxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTcwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQXJy
YXkuaCBpbiBIZWFkZXJzICovLApAQCAtOTI4Niw4ICs5MzEzLDEwIEBACiAJCQkJQkMxOEM0MjYw
RTE2RjVDRDAwQjM0NDYwIC8qIEpTUmV0YWluUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzQ2
Mzg3MTFFNzBDRjNEMDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0ODc0QUU2MTVFQkRFNEEwMDJFMzU4NyAvKiBKU1Njb3BlLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1M0VFMDFCNjIxOEY2OTE2MDBBRDFGOEQgLyogSlNTY3JpcHQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkwNjQzMzdERDRCMDQwMkJBRjM0QTU5MiAvKiBKU1NjcmlwdEZldGNoZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUzMjAxQzFEMUY4RTgyMzYwMDc2QTAzMiAvKiBKU1NjcmlwdEZldGNo
UGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNFRTAxQjgyMThGN0VGRjAwQUQxRjhE
IC8qIEpTU2NyaXB0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QzBDNEFDMTY4MTAz
MDIwMDE3MDExRCAvKiBKU1NjcmlwdFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
OTE5RDExMTU3RjMzMkMwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjRGODI4ODFFMkZGREUwMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRW
YXJpYWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGFjZjRmZGIwMTZkODg1NzA4YTQzMDA5MDQ4MDlh
Mjk1YzU1MGRhOGUuLmFmNmY5ZWY1ZmMzM2UwMWYxZGVmNjczZjEyNjc5YjFkNzc3NzZiNGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0yMSw3ICsyMSw5IEBACiAv
LyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCiAvLyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKK0FQ
SS9KU0FQSUdsb2JhbE9iamVjdC5tbQogQVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbQorQVBJL0pT
U2NyaXB0Lm1tCiBBUEkvSlNDb250ZXh0Lm1tCiBBUEkvSlNNYW5hZ2VkVmFsdWUubW0KIEFQSS9K
U1JlbW90ZUluc3BlY3Rvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9j
b25maWcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcuaAppbmRleCBlMDIzMmNmNTc4
NmFmMGY0NWQwZDEzMDhiNjc2NjgwNmNhZTRlMDBhLi5lMzY0MzkwZmRkMGY3ZDQ1NzdkY2UxZTQ2
ODgzYjdlMTI3ZWE1YzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvY29uZmln
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbmZpZy5oCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2Vpbmln
QGdtYWlsLmNvbT4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yNCw2ICsyNCw3IEBACiAjZW5kaWYKIAogI2Rl
ZmluZSBKU0NfQVBJX0FWQUlMQUJMRSguLi4pCisjZGVmaW5lIEpTQ19DTEFTU19BVkFJTEFCTEUo
Li4uKSBKU19FWFBPUlQKIC8vIFVzZSB6ZXJvIHNpbmNlIGl0IHdpbGwgYmUgbGVzcyB0aGFuIGFu
eSBwb3NzaWJsZSB2ZXJzaW9uIG51bWJlci4KICNkZWZpbmUgSlNDX01BQ19WRVJTSU9OX1RCQSAw
CiAjZGVmaW5lIEpTQ19JT1NfVkVSU0lPTl9UQkEgMApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Bvc3Rwcm9jZXNzLWhlYWRlcnMuc2ggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cG9zdHByb2Nlc3MtaGVhZGVycy5zaAppbmRleCBmZDI4ODM2ZGM4YmRmMWU1ZjQ5MzlmNDI1OTlh
MWMwN2Y0ZjliZmM5Li4xMDdhZTFiZGFlZDU5NzY2YjE3MGI4NDIxZDcwOGU0YzdiN2Y2NzA5IDEw
MDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcG9zdHByb2Nlc3MtaGVhZGVycy5zaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcG9zdHByb2Nlc3MtaGVhZGVycy5zaApAQCAtNzIs
OCArNzIsOCBAQCBmdW5jdGlvbiByZXdyaXRlX2hlYWRlcnMgKCkgewogICAgICAgICAgICAgLWUg
cy9KU0NfSU9TX1ZFUlNJT05fVEJBLyR7SU9TX1ZFUlNJT05fTlVNQkVSfS9nCiAgICAgICAgICAg
ICAtZSBzL0pTQ19BUElfQVZBSUxBQkxFL0FQSV9BVkFJTEFCTEUvCiAgICAgICAgICAgICAtZSBz
L0pTQ19BUElfREVQUkVDQVRFRC9BUElfREVQUkVDQVRFRC8KLSAgICAgICAgICAgIC1lICJzL15K
U0NfQ0xBU1NfQVZBSUxBQkxFL0pTQ19FWFRFUk4gQVBJX0FWQUlMQUJMRS8iCi0gICAgICAgICAg
ICAtZSAicy9eSlNDX0NMQVNTX0RFUFJFQ0FURUQvSlNDX0VYVEVSTiBBUElfREVQUkVDQVRFRC8i
CisgICAgICAgICAgICAtZSAicy9eSlNDX0NMQVNTX0FWQUlMQUJMRS9KU19FWFBPUlQgQVBJX0FW
QUlMQUJMRS8iCisgICAgICAgICAgICAtZSAicy9eSlNDX0NMQVNTX0RFUFJFQ0FURUQvSlNfRVhQ
T1JUIEFQSV9ERVBSRUNBVEVELyIKICAgICAgICAgKQogICAgIGVsc2UKICAgICAgICAgU0VEX09Q
VElPTlMrPSgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxE
YXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcAppbmRl
eCBjOGQwOGVjZjAyOWI2YTE3YTVmODE3ZWZmNzhmMTAyNGY3OGQ3Y2EwLi4xMzgzYTU0YzZmNjk2
YTZhZGMyZjQ1ZTgxZDM3NjM4MTM0Y2E3YjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ2FsbERhdGEuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzQsMjQgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK0pTVmFsdWUgY2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZnVuY3Rpb25PYmplY3Qs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSkKK3sKKyAgICBy
ZXR1cm4gY2FsbChleGVjLCBmdW5jdGlvbk9iamVjdCwgZnVuY3Rpb25PYmplY3QsIGFyZ3MsIGVy
cm9yTWVzc2FnZSk7Cit9CisKK0pTVmFsdWUgY2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
ZnVuY3Rpb25PYmplY3QsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBj
b25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKHZtLCBmdW5jdGlv
bk9iamVjdCwgY2FsbERhdGEpOworICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkK
KyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBlcnJvck1lc3NhZ2Up
OworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjYWxsKGV4ZWMsIGZ1bmN0aW9uT2Jq
ZWN0LCBjYWxsVHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncykpOworfQorCiBKU1ZhbHVl
IGNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBDYWxsVHlwZSBj
YWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmgKaW5kZXggY2JmOTE2NzYxYTViMTAzMGZlMTVj
YjYyODVhZWFjOTE5ZTA1YmRmYi4uMDhmNzlkZjRkNjc4MDEzNDQ0YTZhNjM5YWI0ZmZhNDlhZTcx
YjVhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQs
NiArNjQsMTAgQEAgZW51bSBjbGFzcyBQcm9maWxpbmdSZWFzb24gewogICAgIE90aGVyCiB9Owog
CisvLyBDb252ZW5pZW5jZSB3cmFwcGVyIHNvIHlvdSBkb24ndCBuZWVkIHRvIGRlYWwgd2l0aCBD
YWxsRGF0YSBhbmQgQ2FsbFR5cGUgdW5sZXNzIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZW0uCitK
U19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5jdGlv
bk9iamVjdCwgY29uc3QgQXJnTGlzdCYsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSk7CitKU19F
WFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5jdGlvbk9i
amVjdCwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmLCBjb25zdCBjaGFyKiBlcnJv
ck1lc3NhZ2UpOworCiBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwg
SlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgQ2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1
ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUg
Y2FsbChFeGVjU3RhdGUqLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBDYWxsVHlwZSwgY29uc3Qg
Q2FsbERhdGEmLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYsIE5ha2VkUHRyPEV4
Y2VwdGlvbj4mIHJldHVybmVkRXhjZXB0aW9uKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21wbGV0aW9uLmNwcAppbmRleCAxMTAyZjY2YzMyMjZkNzQ1Y2FlOGNmYmEyMGY2
YWY0MzM3OWFiZWQ5Li4zZmI0YWI5ZDNhYTJlMzRiYmNkOWFkZmZhNzMwN2U3MDc2YTQ2MWFmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcApAQCAtMSw3
ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTE2MSw2ICsxNjEsMTYgQEAgc3RhdGljIEpTSW50ZXJuYWxQcm9taXNlKiByZWplY3RQcm9taXNl
KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE8KICAgICByZXR1cm4gZGVm
ZXJyZWQtPnByb21pc2UoKTsKIH0KIAorSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRFdmFsdWF0
ZU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMsIFN5bWJvbCogbW9kdWxlSWQsIEpTVmFsdWUgcGFyYW1l
dGVycywgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmF0b21p
Y1N0cmluZ1RhYmxlKCkgPT0gVGhyZWFkOjpjdXJyZW50KCkuYXRvbWljU3RyaW5nVGFibGUoKSk7
CisgICAgUkVMRUFTRV9BU1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeU9uQ3VycmVudFRocmVhZCgp
KTsKKworICAgIHJldHVybiB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpLT5tb2R1bGVMb2Fk
ZXIoKS0+bG9hZEFuZEV2YWx1YXRlTW9kdWxlKGV4ZWMsIG1vZHVsZUlkLCBwYXJhbWV0ZXJzLCBz
Y3JpcHRGZXRjaGVyKTsKK30KKwogSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRFdmFsdWF0ZU1v
ZHVsZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbW9kdWxlTmFtZSwgSlNWYWx1ZSBw
YXJhbWV0ZXJzLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRp
b24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaAppbmRleCBk
ZTQ0OGE0MDg0NzFjNzQyZTZmMjI4OGYxYWE3MjRlMzNmODk3NDk3Li44MjdlNjFmM2M2MWQwY2I3
YmJlNzVhNjEyNzcxMjRmYjBkYTcyYWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21wbGV0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tcGxldGlvbi5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykg
MjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTMzLDYgKzMzLDcgQEAgY2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgSlNPYmplY3Q7
CiBjbGFzcyBQYXJzZXJFcnJvcjsKIGNsYXNzIFNvdXJjZUNvZGU7CitjbGFzcyBTeW1ib2w7CiBj
bGFzcyBWTTsKIGNsYXNzIEpTSW50ZXJuYWxQcm9taXNlOwogCkBAIC01Nyw2ICs1OCw3IEBAIGlu
bGluZSBKU1ZhbHVlIHByb2ZpbGVkRXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9maWxpbmdS
ZWFzb24gcmVhc29uLCBjb25zdCBTCiBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGV2YWx1YXRl
V2l0aFNjb3BlRXh0ZW5zaW9uKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU09iamVj
dCogc2NvcGVFeHRlbnNpb24sIE5ha2VkUHRyPEV4Y2VwdGlvbj4mIHJldHVybmVkRXhjZXB0aW9u
KTsKIAogLy8gTG9hZCB0aGUgbW9kdWxlIHNvdXJjZSBhbmQgZXZhbHVhdGUgaXQuCitKU19FWFBP
UlRfUFJJVkFURSBKU0ludGVybmFsUHJvbWlzZSogbG9hZEFuZEV2YWx1YXRlTW9kdWxlKEV4ZWNT
dGF0ZSosIFN5bWJvbCogbW9kdWxlSWQsIEpTVmFsdWUgcGFyYW1ldGVycywgSlNWYWx1ZSBzY3Jp
cHRGZXRjaGVyKTsKIEpTX0VYUE9SVF9QUklWQVRFIEpTSW50ZXJuYWxQcm9taXNlKiBsb2FkQW5k
RXZhbHVhdGVNb2R1bGUoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiBtb2R1bGVOYW1lLCBKU1Zh
bHVlIHBhcmFtZXRlcnMsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcik7CiBKU19FWFBPUlRfUFJJVkFU
RSBKU0ludGVybmFsUHJvbWlzZSogbG9hZEFuZEV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0ZSosIGNv
bnN0IFNvdXJjZUNvZGUmLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2FzdC5oCmluZGV4IGEzNjlkNDg5NjYyNjJhYTFiNjI5ZjM0M2NiMjRm
MWY3NDYzYWM1ZjcuLjQ5NWM3ZTExZWZmZGY1NTdhOTIyYjQyNjcxN2U4ZTNkNGRiYWNkZTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2NSw0ICsxNjUsMTIgQEAgVG8g
anNEeW5hbWljQ2FzdChWTSYgdm0sIEpTVmFsdWUgZnJvbSkKICAgICByZXR1cm4ganNEeW5hbWlj
Q2FzdDxUbz4odm0sIGZyb20uYXNDZWxsKCkpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUbywg
dHlwZW5hbWUgRnJvbT4KK1RvIGpzU2VjdXJlQ2FzdChWTSYgdm0sIEZyb20gZnJvbSkKK3sKKyAg
ICBhdXRvKiByZXN1bHQgPSBqc0R5bmFtaWNDYXN0PFRvPih2bSwgZnJvbSk7CisgICAgUkVMRUFT
RV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAppbmRleCBlODZlODJjZmM2NjIxYzJhMzQ5MzA3OWJmOGE0MjllNjRmNTg1
MTBkLi5lOWQyZWE1OGZiNDdmYjQzYjY2MWVkZWJhZGM0NGJlNmE5YjVkMTM4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2gg
KGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02Miw2ICs2Miw3
IEBACiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFcnJvckNvbnN0cnVjdG9yLmgiCiAj
aW5jbHVkZSAiRXJyb3JQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNs
dWRlICJGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUu
aCIKICNpbmNsdWRlICJHZW5lcmF0b3JGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCkBAIC0xOTIsNyAr
MTkzLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBzdGF0aWMgSlNWYWx1ZSBjcmVhdGVQ
cm94eVByb3BlcnR5KFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKK3N0YXRpYyBKU1ZhbHVlIGNy
ZWF0ZVByb3h5UHJvcGVydHkoVk0mIHZtLCBKU09iamVjdCogb2JqZWN0KQogewogICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWwgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihvYmplY3QpOwogICAg
IHJldHVybiBQcm94eUNvbnN0cnVjdG9yOjpjcmVhdGUodm0sIFByb3h5Q29uc3RydWN0b3I6OmNy
ZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsLCBnbG9iYWwtPmZ1bmN0aW9uUHJvdG90eXBlKCkpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359054</attachid>
            <date>2019-01-14 11:04:11 -0800</date>
            <delta_ts>2019-01-14 11:34:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191121-20190114110410.patch</filename>
            <type>text/plain</type>
            <size>70785</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5NTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
NDM2OGRjOGIyMDI0NGNlNTNjODQyZTYxNjVkOTk2ZjViYWVhNjEwLi5iNzI4ZGY2NDg3MmYyZjI5
YzYyYmUxMDg2MDIwMWZkZmVhZDJkMWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4OCBAQAorMjAxOS0wMS0xNCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBKU0Mgc2hvdWxkIGhhdmUgYSBtb2R1bGUgbG9hZGVyIEFQSQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMTIxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
ZGRzIGEgbmV3IGRlbGVnYXRlIHRvIEpTQ29udHh0IHRoYXQgaXMgY2FsbGVkIHRvIGZldGNoCisg
ICAgICAgIGFueSByZXNvbHZlZCBtb2R1bGUuIFRoZSByZXNvbHV0aW9uIG9mIGEgbW9kdWxlIGlk
ZW50aWZpZXIgaXMgY29tcHV0ZWQKKyAgICAgICAgYXMgaWYgaXQgd2VyZSBhIFVSTCBvbiB0aGUg
d2ViIHdpdGggdGhlIGNhdmVhdCB0aGF0IGl0IG11c3QgYmUgYSBmaWxlIFVSTC4KKworICAgICAg
ICBBIG5ldyBjbGFzcyBKU1NjcmlwdCBoYXMgYWxzbyBiZWVuIGFkZGVkIHRoYXQgaXMgc2ltaWxh
ciB0byBKU1NjcmlwdFJlZi4KKyAgICAgICAgUmlnaHQgbm93IGFsbCBKU1NjcmlwdHMgYXJlIGNv
cGllZCBpbnRvIG1lbW9yeS4gSW4gdGhlIGZ1dHVyZSB3ZSBzaG91bGQKKyAgICAgICAgbW1hcCB0
aGUgcHJvdmlkZWQgZmlsZSBpbnRvIG1lbW9yeSBzbyB0aGUgT1MgY2FuIGV2aWN0IGl0IHRvIGRp
c2sgdW5kZXIKKyAgICAgICAgcHJlc3N1cmUuIEFkZGl0aW9uYWxseSwgdGhlIEFQSSBkb2VzIG5v
dCBtYWtlIHVzZSBvZiB0aGUgY29kZSBzaWduaW5nIHBhdGgKKyAgICAgICAgbm9yIHRoZSBieXRl
Y29kZSBjYWNoaW5nIHBhdGgsIHdoaWNoIHdlIHdpbGwgYWRkIGluIHN1YnNlcXVlbnQgcGF0Y2hl
cy4KKworICAgICAgICBMYXN0bHksIGEgY291cGxlIG9mIG5ldyBjb252ZW5pZW5jZSBtZXRob2Rz
IGhhdmUgYmVlbiBhZGRlZC4gQyBBUEkKKyAgICAgICAgY29udmVyc2lvbiwgY2FuIG5vdyB0b1Jl
ZiBhIEpTVmFsdWUgd2l0aCBqdXN0IGEgdm0gcmF0aGVyIHRoYW4KKyAgICAgICAgcmVxdWlyaW5n
IGFuIEV4ZWNTdGF0ZS4gU2Vjb25kbHksIHRoZXJlIGlzIG5vdyBhIGNhbGwgd3JhcHBlciB0aGF0
CisgICAgICAgIGRvZXMgbm90IHJlcXVpcmUgQ2FsbERhdGEgYW5kIENhbGxUeXBlIHNpbmNlIG1h
bnkgcGxhY2VzIGRvbid0CisgICAgICAgIGNhcmUgYWJvdXQgdGhpcy4KKworICAgICAgICAqIEFQ
SS9BUElDYXN0Lmg6CisgICAgICAgICh0b1JlZik6CisgICAgICAgICogQVBJL0pTQVBJR2xvYmFs
T2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FQSUdsb2JhbE9iamVjdDo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6SlNBUElHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OkpTQVBJR2xvYmFsT2JqZWN0OjpKU0FQSUdsb2JhbE9iamVjdCk6CisgICAg
ICAgICogQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNB
UElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUpOgorICAgICAgICAoSlNDOjpKU0FQ
SUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVySW1wb3J0TW9kdWxlKToKKyAgICAgICAgKEpTQzo6
SlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckZldGNoKToKKyAgICAgICAgKEpTQzo6SlNB
UElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzKToK
KyAgICAgICAgKiBBUEkvSlNBUElWYWx1ZVdyYXBwZXIuaDoKKyAgICAgICAgKEpTQzo6anNBUElW
YWx1ZVdyYXBwZXIpOiBEZWxldGVkLgorICAgICAgICAqIEFQSS9KU0NvbnRleHQuaDoKKyAgICAg
ICAgKiBBUEkvSlNDb250ZXh0Lm1tOgorICAgICAgICAoLVtKU0NvbnRleHQgbW9kdWxlTG9hZGVy
RGVsZWdhdGVdKToKKyAgICAgICAgKC1bSlNDb250ZXh0IHNldE1vZHVsZUxvYWRlckRlbGVnYXRl
Ol0pOgorICAgICAgICAqIEFQSS9KU0NvbnRleHRJbnRlcm5hbC5oOgorICAgICAgICAqIEFQSS9K
U0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogQVBJL0pTQ29udGV4dFJlZi5jcHA6CisgICAg
ICAgIChKU0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKToKKyAgICAgICAgKiBBUEkvSlNTY3Jp
cHQuaDogQWRkZWQuCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOiBBZGRlZC4KKyAgICAgICAg
KCtbSlNTY3JpcHQgc2NyaXB0V2l0aFNvdXJjZTppblZpcnR1YWxNYWNoaW5lOl0pOgorICAgICAg
ICAoZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZSk6CisgICAgICAgICgrW0pTU2NyaXB0IHNj
cmlwdEZyb21VVEY4RmlsZTppblZpcnR1YWxNYWNoaW5lOndpdGhDb2RlU2lnbmluZzphbmRCeXRl
Y29kZUNhY2hlOl0pOgorICAgICAgICAoZ2V0SlNTY3JpcHRTb3VyY2VDb2RlKToKKyAgICAgICAg
KiBBUEkvSlNTY3JpcHRJbnRlcm5hbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oLgorICAgICAgICAqIEFQSS9KU1ZhbHVl
SW50ZXJuYWwuaDoKKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmg6Cisg
ICAgICAgICogQVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAgICAgICgrW0pTQ29udGV4dEZldGNo
RGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl0pOgorICAgICAgICAoLVtKU0NvbnRl
eHRGZXRjaERlbGVnYXRlIGNvbnRleHQ6ZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyOndpdGhSZXNv
bHZlSGFuZGxlcjphbmRSZWplY3RIYW5kbGVyOl0pOgorICAgICAgICAoY2hlY2tNb2R1bGVDb2Rl
UmFuKToKKyAgICAgICAgKGNoZWNrTW9kdWxlV2FzUmVqZWN0ZWQpOgorICAgICAgICAodGVzdEZl
dGNoKToKKyAgICAgICAgKHRlc3RGZXRjaFdpdGhUd29DeWNsZSk6CisgICAgICAgICh0ZXN0RmV0
Y2hXaXRoVGhyZWVDeWNsZSk6CisgICAgICAgICh0ZXN0TG9hZGVyUmVzb2x2ZXNBYnNvbHV0ZVNj
cmlwdFVSTCk6CisgICAgICAgICh0ZXN0TG9hZGVyUmVqZWN0c05pbFNjcmlwdFVSTCk6CisgICAg
ICAgICh0ZXN0TG9hZGVyUmVqZWN0c0ZhaWxlZEZldGNoKToKKyAgICAgICAgKHRlc3RJbXBvcnRN
b2R1bGVUd2ljZSk6CisgICAgICAgICgrW0pTQ29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0ZSBuZXdD
b250ZXh0XSk6CisgICAgICAgIChyZXNvbHZlUGF0aFRvU2NyaXB0cyk6CisgICAgICAgICgtW0pT
Q29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0ZSBjb250ZXh0OmZldGNoTW9kdWxlRm9ySWRlbnRpZmll
cjp3aXRoUmVzb2x2ZUhhbmRsZXI6YW5kUmVqZWN0SGFuZGxlcjpdKToKKyAgICAgICAgKHRlc3RM
b2FkQmFzaWNGaWxlKToKKyAgICAgICAgKHRlc3RPYmplY3RpdmVDQVBJKToKKyAgICAgICAgKiBB
UEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvYmFzaWMuanM6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmguCisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2Vz
Q29jb2EudHh0OgorICAgICAgICAqIGNvbmZpZy5oOgorICAgICAgICAqIHJ1bnRpbWUvQ2FsbERh
dGEuY3BwOgorICAgICAgICAoSlNDOjpjYWxsKToKKyAgICAgICAgKiBydW50aW1lL0NhbGxEYXRh
Lmg6CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6bG9h
ZEFuZEV2YWx1YXRlTW9kdWxlKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTQ2FzdC5oOgorICAgICAgICAoSlNDOjpqc1NlY3VyZUNhc3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpjcmVh
dGVQcm94eVByb3BlcnR5KToKKwogMjAxOC0xMi0zMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWls
bGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBTb3VyY2VQcm92aWRlcnMgc2hvdWxkIHVzZSBhbiBh
Y3R1YWwgVVJMIGluc3RlYWQgb2YgYSBzdHJpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvQVBJQ2FzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9BUElDYXN0
LmgKaW5kZXggM2I1NTkxMTllMjJhMWU1Njg4MDg4NzI3ZjliYTdkY2IyODI0YWY0ZC4uYWU5YmMw
N2JlYjkzYWIyODgxZGM0YTVhZDU0ZTQ5OWMxY2EzOWQ0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9BUElDYXN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9BUElDYXN0LmgKQEAgLTEyOCwyMSArMTI4LDI2IEBAIGlubGluZSBKU0M6OlZNKiB0b0pTKEpT
Q29udGV4dEdyb3VwUmVmIGcpCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDOjpWTSo+
KGNvbnN0X2Nhc3Q8T3BhcXVlSlNDb250ZXh0R3JvdXAqPihnKSk7CiB9CiAKLWlubGluZSBKU1Zh
bHVlUmVmIHRvUmVmKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdikKK2lubGlu
ZSBKU1ZhbHVlUmVmIHRvUmVmKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdikKIHsKLSAgICBB
U1NFUlQoZXhlYy0+dm0oKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBB
U1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAjaWYgIUNQVShBRERS
RVNTNjQpCiAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIXYuaXNDZWxs
KCkpCi0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTVmFsdWVSZWY+KEpTQzo6anNB
UElWYWx1ZVdyYXBwZXIoZXhlYywgdikuYXNDZWxsKCkpOworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxKU1ZhbHVlUmVmPihKU0M6OkpTQVBJVmFsdWVXcmFwcGVyOjpjcmVhdGUodm0s
IHYpKTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlUmVmPih2LmFzQ2VsbCgp
KTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTSh2bSk7
CiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU1ZhbHVlUmVmPih2KTsKICNlbmRpZgogfQogCitp
bmxpbmUgSlNWYWx1ZVJlZiB0b1JlZihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVl
IHYpCit7CisgICAgcmV0dXJuIHRvUmVmKGV4ZWMtPnZtKCksIHYpOworfQorCiBpbmxpbmUgSlNP
YmplY3RSZWYgdG9SZWYoSlNDOjpKU09iamVjdCogbykKIHsKICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxKU09iamVjdFJlZj4obyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
QVBJR2xvYmFsT2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWQ1ZjEyYzdlYmYyODk5NDJlNjc4NjA3ZjM3
YmFiOWNlNmMzZGQ2OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNBUElHbG9iYWxPYmplY3QuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
SlNHbG9iYWxPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTQVBJR2xvYmFs
T2JqZWN0IDogcHVibGljIEpTR2xvYmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNl
ID0gSlNHbG9iYWxPYmplY3Q7CisKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworICAgIHN0YXRp
YyBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSBzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxl
OworCisgICAgc3RhdGljIEpTQVBJR2xvYmFsT2JqZWN0KiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIGF1dG8qIG9iamVjdCA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEpTQVBJR2xvYmFsT2JqZWN0Pih2bS5oZWFwKSkgSlNBUElHbG9iYWxP
YmplY3Qodm0sIHN0cnVjdHVyZSk7CisgICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0p
OworICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAg
ICAgYXV0byogcmVzdWx0ID0gU3RydWN0dXJlOjpjcmVhdGUodm0sIDAsIHByb3RvdHlwZSwgVHlw
ZUluZm8oR2xvYmFsT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgICAg
ICByZXN1bHQtPnNldFRyYW5zaXRpb25XYXRjaHBvaW50SXNMaWtlbHlUb0JlRmlyZWQodHJ1ZSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEpTSW50ZXJuYWxQ
cm9taXNlKiBtb2R1bGVMb2FkZXJJbXBvcnRNb2R1bGUoSlNHbG9iYWxPYmplY3QqLCBFeGVjU3Rh
dGUqLCBKU01vZHVsZUxvYWRlciosIEpTU3RyaW5nKiBtb2R1bGVOYW1lVmFsdWUsIEpTVmFsdWUg
cGFyYW1ldGVycywgY29uc3QgU291cmNlT3JpZ2luJik7CisgICAgc3RhdGljIElkZW50aWZpZXIg
bW9kdWxlTG9hZGVyUmVzb2x2ZShKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxl
TG9hZGVyKiwgSlNWYWx1ZSBrZXlWYWx1ZSwgSlNWYWx1ZSByZWZlcnJlclZhbHVlLCBKU1ZhbHVl
KTsKKyAgICBzdGF0aWMgSlNJbnRlcm5hbFByb21pc2UqIG1vZHVsZUxvYWRlckZldGNoKEpTR2xv
YmFsT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlLCBKU1ZhbHVl
LCBKU1ZhbHVlKTsKKyAgICBzdGF0aWMgSlNPYmplY3QqIG1vZHVsZUxvYWRlckNyZWF0ZUltcG9y
dE1ldGFQcm9wZXJ0aWVzKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNNb2R1bGVMb2Fk
ZXIqLCBKU1ZhbHVlLCBKU01vZHVsZVJlY29yZCosIEpTVmFsdWUpOworCitwcml2YXRlOgorICAg
IEpTQVBJR2xvYmFsT2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAg
IDogQmFzZSh2bSwgc3RydWN0dXJlLCAmc19nbG9iYWxPYmplY3RNZXRob2RUYWJsZSkKKyAgICB7
IH0KK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElH
bG9iYWxPYmplY3QubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2Jq
ZWN0Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmM0MmY1ZjIzMjE2ZjQ2YWYxYWYwNzM4MmIxODUzYTNlYTVhZTc0
YjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xv
YmFsT2JqZWN0Lm1tCkBAIC0wLDAgKzEsMjEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiSlNBUElH
bG9iYWxPYmplY3QuaCIKKworI2ltcG9ydCAiQVBJQ2FzdC5oIgorI2ltcG9ydCAiQ2F0Y2hTY29w
ZS5oIgorI2ltcG9ydCAiQ29tcGxldGlvbi5oIgorI2ltcG9ydCAiRXJyb3IuaCIKKyNpbXBvcnQg
IkV4Y2VwdGlvbi5oIgorI2ltcG9ydCAiSlNDb250ZXh0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpT
SW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaCIKKyNpbXBvcnQgIkpTTmF0aXZlU3RkRnVuY3Rpb24u
aCIKKyNpbXBvcnQgIkpTU2NyaXB0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTU291cmNlQ29kZS5o
IgorI2ltcG9ydCAiSlNWYWx1ZUludGVybmFsLmgiCisjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5l
SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkphdmFTY3JpcHRDb3JlLmgiCisjaW1wb3J0ICJPYmplY3RD
b25zdHJ1Y3Rvci5oIgorI2ltcG9ydCAiU291cmNlT3JpZ2luLmgiCisKKyNpbXBvcnQgPHd0Zi9V
UkwuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0FQSUdsb2JhbE9i
amVjdDo6c19pbmZvID0geyAiR2xvYmFsT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwg
bnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0FQSUdsb2JhbE9iamVjdCkgfTsKKworY29u
c3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgSlNBUElHbG9iYWxPYmplY3Q6OnNfZ2xvYmFsT2Jq
ZWN0TWV0aG9kVGFibGUgPSB7CisgICAgJnN1cHBvcnRzUmljaFNvdXJjZUluZm8sCisgICAgJnNo
b3VsZEludGVycnVwdFNjcmlwdCwKKyAgICAmamF2YVNjcmlwdFJ1bnRpbWVGbGFncywKKyAgICBu
dWxscHRyLCAvLyBxdWV1ZVRhc2tUb0V2ZW50TG9vcAorICAgICZzaG91bGRJbnRlcnJ1cHRTY3Jp
cHRCZWZvcmVUaW1lb3V0LAorICAgICZtb2R1bGVMb2FkZXJJbXBvcnRNb2R1bGUsIC8vIG1vZHVs
ZUxvYWRlckltcG9ydE1vZHVsZQorICAgICZtb2R1bGVMb2FkZXJSZXNvbHZlLCAvLyBtb2R1bGVM
b2FkZXJSZXNvbHZlCisgICAgJm1vZHVsZUxvYWRlckZldGNoLCAvLyBtb2R1bGVMb2FkZXJGZXRj
aAorICAgICZtb2R1bGVMb2FkZXJDcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcywgLy8gbW9kdWxl
TG9hZGVyQ3JlYXRlSW1wb3J0TWV0YVByb3BlcnRpZXMKKyAgICBudWxscHRyLCAvLyBtb2R1bGVM
b2FkZXJFdmFsdWF0ZQorICAgIG51bGxwdHIsIC8vIHByb21pc2VSZWplY3Rpb25UcmFja2VyCisg
ICAgbnVsbHB0ciwgLy8gZGVmYXVsdExhbmd1YWdlCisgICAgbnVsbHB0ciwgLy8gY29tcGlsZVN0
cmVhbWluZworICAgIG51bGxwdHIsIC8vIGluc3RhbnRpYXRlU3RyZWFtaW5nCit9OworCitJZGVu
dGlmaWVyIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJSZXNvbHZlKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgSlNNb2R1bGVMb2FkZXIqLCBKU1Zh
bHVlIGtleSwgSlNWYWx1ZSByZWZlcnJlciwgSlNWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBB
U1NFUlRfVU5VU0VEKGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0ID09IGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSk7CisgICAgQVNTRVJUKGtleS5pc1N0cmluZygpIHx8IGtleS5pc1N5bWJv
bCgpKTsKKyAgICBTdHJpbmcgbmFtZSA9ICBrZXkudG9XVEZTdHJpbmcoZXhlYyk7CisKKyAgICBV
UkwgcmVmZXJyZXJVUkwoVVJMKCksIGpzQ2FzdDxKU1N0cmluZyo+KHJlZmVycmVyKS0+dHJ5R2V0
VmFsdWUoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVmZXJyZXJVUkwuaXNWYWxpZCgpKTsKKwor
ICAgIFVSTCB1cmwgPSBVUkwocmVmZXJyZXJVUkwsIG5hbWUpOworICAgIGlmICh1cmwuaXNWYWxp
ZCgpKQorICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCB1cmwpOwor
CisgICAgdGhyb3dWTUVycm9yKGV4ZWMsIHNjb3BlLCAiQ291bGQgbm90IGZvcm0gdmFsaWQgVVJM
IGZyb20gaWRlbnRpZmllciBhbmQgYmFzZSJfcyk7CisgICAgcmV0dXJuIHsgfTsKK30KKworSlNJ
bnRlcm5hbFByb21pc2UqIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJJbXBvcnRNb2R1
bGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU01vZHVs
ZUxvYWRlciosIEpTU3RyaW5nKiBzcGVjaWZpZXJWYWx1ZSwgSlNWYWx1ZSwgY29uc3QgU291cmNl
T3JpZ2luJiBzb3VyY2VPcmlnaW4pCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBhdXRvIHJl
amVjdCA9IFsmXSAoSlNWYWx1ZSBleGNlcHRpb24pIC0+IEpTSW50ZXJuYWxQcm9taXNlKiB7Cisg
ICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIGF1dG8qIHByb21pc2UgPSBK
U0ludGVybmFsUHJvbWlzZURlZmVycmVkOjp0cnlDcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsK
KyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIHByb21pc2Ut
PnJlamVjdChleGVjLCBleGNlcHRpb24pOworICAgIH07CisKKyAgICBhdXRvIGltcG9ydCA9IFsm
XSAoVVJMJiB1cmwpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBpbXBvcnRNb2R1bGUoZXhlYywg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIHVybCksIGpzVW5kZWZpbmVkKCksIGpzVW5kZWZp
bmVkKCkpOworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAg
ICAgICAgcmV0dXJuIHJlamVjdChzY29wZS5leGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfTsKKworICAgIGF1dG8gc3BlY2lmaWVyID0gc3BlY2lmaWVyVmFsdWUtPnZh
bHVlKGV4ZWMpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAg
ICAgSlNWYWx1ZSBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUu
Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGNlcHRpb24pOworICAg
IH0KKworICAgIFVSTCBhYnNvbHV0ZVVSTChVUkwoKSwgc3BlY2lmaWVyKTsKKyAgICBpZiAoYWJz
b2x1dGVVUkwuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gaW1wb3J0KGFic29sdXRlVVJMKTsK
KworICAgIGlmICghc3BlY2lmaWVyLnN0YXJ0c1dpdGgoJy8nKSAmJiAhc3BlY2lmaWVyLnN0YXJ0
c1dpdGgoIi4vIikgJiYgIXNwZWNpZmllci5zdGFydHNXaXRoKCIuLi8iKSkKKyAgICAgICAgcmV0
dXJuIHJlamVjdChjcmVhdGVFcnJvcihleGVjLCAiTW9kdWxlIHNwZWNpZmllciBkb2VzIG5vdCBz
dGFydCB3aXRoIFwiL1wiLCBcIi4vXCIsIG9yIFwiLi4vXCIuIl9zKSk7CisKKyAgICBpZiAoc3Bl
Y2lmaWVyLnN0YXJ0c1dpdGgoJy8nKSkgeworICAgICAgICBhYnNvbHV0ZVVSTCA9IFVSTChVUkwo
eyB9LCAiZmlsZTovLyIpLCBzcGVjaWZpZXIpOworICAgICAgICBpZiAoYWJzb2x1dGVVUkwuaXNW
YWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIGltcG9ydChhYnNvbHV0ZVVSTCk7CisgICAgfQor
CisgICAgYXV0byBub0Jhc2VFcnJvck1lc3NhZ2UgPSAiQ291bGQgbm90IGRldGVybWluZSB0aGUg
YmFzZSBVUkwgZm9yIGxvYWRpbmcuIl9zOworICAgIGlmIChzb3VyY2VPcmlnaW4uaXNOdWxsKCkp
CisgICAgICAgIHJldHVybiByZWplY3QoY3JlYXRlRXJyb3IoZXhlYywgbm9CYXNlRXJyb3JNZXNz
YWdlKSk7CisKKyAgICBhdXRvIHJlZmVycmVyID0gc291cmNlT3JpZ2luLnN0cmluZygpOworICAg
IFVSTCBiYXNlVVJMKFVSTCgpLCByZWZlcnJlcik7CisgICAgaWYgKCFiYXNlVVJMLmlzVmFsaWQo
KSkKKyAgICAgICAgcmV0dXJuIHJlamVjdChjcmVhdGVFcnJvcihleGVjLCBub0Jhc2VFcnJvck1l
c3NhZ2UpKTsKKworICAgIFVSTCB1cmwoYmFzZVVSTCwgc3BlY2lmaWVyKTsKKyAgICBpZiAoIXVy
bC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiByZWplY3QoY3JlYXRlRXJyb3IoZXhlYywgImNv
dWxkIG5vdCBkZXRlcm1pbmUgYSB2YWxpZCBVUkwgZm9yIG1vZHVsZSBzcGVjaWZpZXIiX3MpKTsK
KworICAgIHJldHVybiBpbXBvcnQodXJsKTsKK30KKworSlNJbnRlcm5hbFByb21pc2UqIEpTQVBJ
R2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJGZXRjaChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSBrZXksIEpTVmFs
dWUsIEpTVmFsdWUpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgIEFTU0VSVChnbG9iYWxP
YmplY3QgPT0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKKyAgICBKU0NvbnRleHQgKmNv
bnRleHQgPSBbSlNDb250ZXh0IGNvbnRleHRXaXRoSlNHbG9iYWxDb250ZXh0UmVmOnRvR2xvYmFs
UmVmKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKV07CisKKyAgICBKU0ludGVybmFsUHJvbWlz
ZURlZmVycmVkKiBkZWZlcnJlZCA9IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OnRyeUNyZWF0
ZShleGVjLCBnbG9iYWxPYmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51
bGxwdHIpOworCisgICAgSWRlbnRpZmllciBtb2R1bGVLZXkgPSBrZXkudG9Qcm9wZXJ0eUtleShl
eGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgIEpT
VmFsdWUgZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGV4Y2Vw
dGlvbik7CisgICAgfQorCisgICAgaWYgKFVOTElLRUxZKCFbY29udGV4dCBtb2R1bGVMb2FkZXJE
ZWxlZ2F0ZV0pKQorICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBjcmVhdGVF
cnJvcihleGVjLCAiTm8gbW9kdWxlIGxvYWRlciBwcm92aWRlZC4iKSk7CisKKyAgICBhdXRvIGRl
ZmVycmVkUHJvbWlzZSA9IFN0cm9uZzxKU0ludGVybmFsUHJvbWlzZURlZmVycmVkPih2bSwgZGVm
ZXJyZWQpOworICAgIGF1dG8gc3Ryb25nS2V5ID0gU3Ryb25nPEpTU3RyaW5nPih2bSwganNTZWN1
cmVDYXN0PEpTU3RyaW5nKj4odm0sIGtleSkpOworICAgIGF1dG8qIHJlc29sdmUgPSBKU05hdGl2
ZVN0ZEZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgInJlc29sdmUiLCBbPV0g
KEV4ZWNTdGF0ZSogZXhlYykgeworICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAg
ICAvLyBUaGlzIGNhcHR1cmVzIHRoZSBnbG9iYWxPYmplY3QgYnV0IHRoYXQncyBvayBiZWNhdXNl
IG91ciBzdHJ1Y3R1cmUga2VlcHMgaXQgYWxpdmUgYW55d2F5LgorICAgICAgICBKU0NvbnRleHQg
KmNvbnRleHQgPSBbSlNDb250ZXh0IGNvbnRleHRXaXRoSlNHbG9iYWxDb250ZXh0UmVmOnRvR2xv
YmFsUmVmKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKV07CisgICAgICAgIGlkIHNjcmlwdCA9
IHZhbHVlVG9PYmplY3QoY29udGV4dCwgdG9SZWYoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsK
KworICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgICAgICBpZiAoVU5MSUtF
TFkoIVtzY3JpcHQgaXNLaW5kT2ZDbGFzczpbSlNTY3JpcHQgY2xhc3NdXSkpIHsKKyAgICAgICAg
ICAgIGFyZ3MuYXBwZW5kKGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRmlyc3QgYXJndW1lbnQgb2Yg
cmVzb2x1dGlvbiBjYWxsYmFjayBpcyBub3QgYSBKU1NjcmlwdCIpKTsKKyAgICAgICAgICAgIGNh
bGwoZXhlYywgZGVmZXJyZWRQcm9taXNlLT5KU1Byb21pc2VEZWZlcnJlZDo6cmVqZWN0KCksIGFy
Z3MsICJUaGlzIHNob3VsZCBuZXZlciBiZSBzZWVuLi4uIik7CisgICAgICAgICAgICByZXR1cm4g
ZW5jb2RlZEpTVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBTdHJpbmcm
IHNvdXJjZSA9IGdldEpTU2NyaXB0U291cmNlQ29kZShzdGF0aWNfY2FzdDxKU1NjcmlwdCAqPihz
Y3JpcHQpKTsKKyAgICAgICAgYXJncy5hcHBlbmQoSlNTb3VyY2VDb2RlOjpjcmVhdGUodm0sIG1h
a2VTb3VyY2Uoc291cmNlLCBTb3VyY2VPcmlnaW4obW9kdWxlS2V5LnN0cmluZygpKSwgVVJMKHsg
fSwgbW9kdWxlS2V5LnN0cmluZygpKSwgVGV4dFBvc2l0aW9uKCksIEpTQzo6U291cmNlUHJvdmlk
ZXJTb3VyY2VUeXBlOjpNb2R1bGUpKSk7CisgICAgICAgIGNhbGwoZXhlYywgZGVmZXJyZWRQcm9t
aXNlLT5KU1Byb21pc2VEZWZlcnJlZDo6cmVzb2x2ZSgpLCBhcmdzLCAiVGhpcyBzaG91bGQgbmV2
ZXIgYmUgc2Vlbi4uLiIpOworICAgICAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7Cisg
ICAgfSk7CisKKyAgICBhdXRvKiByZWplY3QgPSBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgMSwgInJlamVjdCIsIFs9XSAoRXhlY1N0YXRlKiBleGVjKSB7Cisg
ICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgICAgIGFyZ3MuYXBwZW5kKGV4
ZWMtPmFyZ3VtZW50KDApKTsKKworICAgICAgICBjYWxsKGV4ZWMsIGRlZmVycmVkUHJvbWlzZS0+
SlNQcm9taXNlRGVmZXJyZWQ6OnJlamVjdCgpLCBhcmdzLCAiVGhpcyBzaG91bGQgbmV2ZXIgYmUg
c2Vlbi4uLiIpOworICAgICAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7CisgICAgfSk7
CisKKyAgICBbW2NvbnRleHQgbW9kdWxlTG9hZGVyRGVsZWdhdGVdIGNvbnRleHQ6Y29udGV4dCBm
ZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6Wzo6SlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnRv
UmVmKGV4ZWMsIGtleSkgaW5Db250ZXh0OmNvbnRleHRdIHdpdGhSZXNvbHZlSGFuZGxlcjpbOjpK
U1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6dG9SZWYoZXhlYywgcmVzb2x2ZSkgaW5Db250ZXh0
OmNvbnRleHRdIGFuZFJlamVjdEhhbmRsZXI6Wzo6SlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVm
OnRvUmVmKGV4ZWMsIHJlamVjdCkgaW5Db250ZXh0OmNvbnRleHRdXTsKKyAgICBpZiAoY29udGV4
dC5leGNlcHRpb24pIHsKKyAgICAgICAgZGVmZXJyZWQtPnJlamVjdChleGVjLCB0b0pTKGV4ZWMs
IFtjb250ZXh0LmV4Y2VwdGlvbiBKU1ZhbHVlUmVmXSkpOworICAgICAgICBjb250ZXh0LmV4Y2Vw
dGlvbiA9IG5pbDsKKyAgICB9CisgICAgcmV0dXJuIGRlZmVycmVkLT5wcm9taXNlKCk7Cit9CisK
K0pTT2JqZWN0KiBKU0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyQ3JlYXRlSW1wb3J0TWV0
YVByb3BlcnRpZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUga2V5LCBKU01vZHVsZVJlY29yZCosIEpTVmFsdWUp
Cit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBKU09iamVjdCogbWV0YVByb3BlcnRpZXMgPSBjb25zdHJ1
Y3RFbXB0eU9iamVjdChleGVjLCBnbG9iYWxPYmplY3QtPm51bGxQcm90b3R5cGVPYmplY3RTdHJ1
Y3R1cmUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisKKyAg
ICBtZXRhUHJvcGVydGllcy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgImZpbGVuYW1lIiksIGtleSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVs
bHB0cik7CisKKyAgICByZXR1cm4gbWV0YVByb3BlcnRpZXM7Cit9CisKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElWYWx1ZVdyYXBwZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9BUEkvSlNBUElWYWx1ZVdyYXBwZXIuaAppbmRleCAwNmIzMDcxMDNlZWEy
MzQwNTQ3YjAzMDI5Y2UzZmIwZTZkNzY3NjMzLi5hYTI2MDgyZmYzNWJhZDkwOWMxYmIzYTY0NTky
YjBlMWUxODg3OTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJ
VmFsdWVXcmFwcGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVZhbHVl
V3JhcHBlci5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAw
MSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQ
ZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQ0LDEwICs0NCw5IEBAIHB1YmxpYzoKIAogICAgIERFQ0xB
UkVfRVhQT1JUX0lORk87CiAKLSAgICBzdGF0aWMgSlNBUElWYWx1ZVdyYXBwZXIqIGNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpIAorICAgIHN0YXRpYyBKU0FQSVZhbHVlV3Jh
cHBlciogY3JlYXRlKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7Ci0gICAgICAgIEpTQVBJVmFsdWVXcmFwcGVyKiB3cmFwcGVyID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBUElWYWx1ZVdyYXBwZXI+KHZtLmhlYXApKSBKU0FQ
SVZhbHVlV3JhcHBlcihleGVjKTsKKyAgICAgICAgSlNBUElWYWx1ZVdyYXBwZXIqIHdyYXBwZXIg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FQSVZhbHVlV3JhcHBlcj4odm0uaGVhcCkp
IEpTQVBJVmFsdWVXcmFwcGVyKHZtKTsKICAgICAgICAgd3JhcHBlci0+ZmluaXNoQ3JlYXRpb24o
dm0sIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgfQpAQCAtNjEsMTcgKzYw
LDEyIEBAIHByb3RlY3RlZDoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSlNBUElWYWx1ZVdyYXBw
ZXIoRXhlY1N0YXRlKiBleGVjKQotICAgICAgICA6IEpTQ2VsbChleGVjLT52bSgpLCBleGVjLT52
bSgpLmFwaVdyYXBwZXJTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgSlNBUElWYWx1ZVdyYXBwZXIoVk0m
IHZtKQorICAgICAgICA6IEpTQ2VsbCh2bSwgdm0uYXBpV3JhcHBlclN0cnVjdHVyZS5nZXQoKSkK
ICAgICB7CiAgICAgfQogCiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fdmFsdWU7CiB9Owog
Ci1pbmxpbmUgSlNWYWx1ZSBqc0FQSVZhbHVlV3JhcHBlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQVBJVmFsdWVXcmFwcGVyOjpjcmVhdGUoZXhlYywg
dmFsdWUpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q29udGV4dC5oCmluZGV4IDg5Yzg3ZjllMmUxZmYxYjE3MWIxZWJiYThjNDUyMTU5ZjQ0ZjQ3NWEu
LjE3OTBlNTk3YjQ4YTliODNhOTQ1ZjkzMmIyZWE0ZWJiMzYzZWZjZmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NvbnRleHQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw3ICszMSw3IEBACiAKICNpZiBKU0NfT0JKQ19BUElf
RU5BQkxFRAogCi1AY2xhc3MgSlNWaXJ0dWFsTWFjaGluZSwgSlNWYWx1ZTsKK0BjbGFzcyBKU1Nj
cmlwdCwgSlNWaXJ0dWFsTWFjaGluZSwgSlNWYWx1ZSwgSlNDb250ZXh0OwogCiAvKiEKIEBpbnRl
cmZhY2UKQEAgLTM5LDcgKzM5LDcgQEAKICBKYXZhU2NyaXB0IGV4ZWN1dGlvbiB0YWtlcyBwbGFj
ZSB3aXRoaW4gYSBjb250ZXh0LCBhbmQgYWxsIEphdmFTY3JpcHQgdmFsdWVzCiAgYXJlIHRpZWQg
dG8gYSBjb250ZXh0LgogKi8KLU5TX0NMQVNTX0FWQUlMQUJMRSgxMF85LCA3XzApCitKU0NfQ0xB
U1NfQVZBSUxBQkxFKG1hY29zeCgxMC45KSwgaW9zKDcuMCkpCiBAaW50ZXJmYWNlIEpTQ29udGV4
dCA6IE5TT2JqZWN0CiAKIC8qIQpAQCAtMTc3LDcgKzE3Nyw2IEBAIE5TX0NMQVNTX0FWQUlMQUJM
RSgxMF85LCA3XzApCiBAZGlzY3Vzc2lvbiBOYW1lIG9mIHRoZSBKU0NvbnRleHQuIEV4cG9zZWQg
d2hlbiByZW1vdGUgZGVidWdnaW5nIHRoZSBjb250ZXh0LgogKi8KIEBwcm9wZXJ0eSAoY29weSkg
TlNTdHJpbmcgKm5hbWUgSlNDX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEwKSwgaW9zKDguMCkp
OwotCiBAZW5kCiAKIC8qIQpAQCAtMjMxLDYgKzIzMCw3IEBAIE5TX0NMQVNTX0FWQUlMQUJMRSgx
MF85LCA3XzApCiBAcmVzdWx0IFRoZSBDIEFQSSBlcXVpdmFsZW50IG9mIHRoaXMgSlNDb250ZXh0
LgogKi8KIEBwcm9wZXJ0eSAocmVhZG9ubHkpIEpTR2xvYmFsQ29udGV4dFJlZiBKU0dsb2JhbENv
bnRleHRSZWY7CisKIEBlbmQKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ29udGV4dC5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250
ZXh0Lm1tCmluZGV4IDI3NTY2ZjQxYjk3ZTFiMzliZGRlOWI0OGFhYTU1OWYxNGNiNzM5ZWEuLjNj
Nzc2ZDRkOTAwZWUxNzMzMzYyYWMyOWY2MjRmNDQ0ZDU0NWU3YjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0Lm1tCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDb250ZXh0Lm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDExICsyNiwxNSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogCiAjaW1wb3J0ICJBUElDYXN0LmgiCisjaW1wb3J0ICJDb21wbGV0aW9uLmgiCiAjaW1wb3J0
ICJKU0NJbmxpbmVzLmgiCiAjaW1wb3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgogI2ltcG9ydCAi
SlNDb250ZXh0UHJpdmF0ZS5oIgogI2ltcG9ydCAiSlNDb250ZXh0UmVmSW50ZXJuYWwuaCIKICNp
bXBvcnQgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW1wb3J0ICJKU0ludGVybmFsUHJvbWlzZS5oIgor
I2ltcG9ydCAiSlNNb2R1bGVMb2FkZXIuaCIKKyNpbXBvcnQgIkpTU2NyaXB0SW50ZXJuYWwuaCIK
ICNpbXBvcnQgIkpTVmFsdWVJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNWaXJ0dWFsTWFjaGluZUlu
dGVybmFsLmgiCiAjaW1wb3J0ICJKU1dyYXBwZXJNYXAuaCIKQEAgLTM4LDEyICs0MiwxNSBAQAog
I2ltcG9ydCAiT2JqY1J1bnRpbWVFeHRyYXMuaCIKICNpbXBvcnQgIlN0cm9uZ0lubGluZXMuaCIK
IAorI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+CisKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxF
RAogCiBAaW1wbGVtZW50YXRpb24gSlNDb250ZXh0IHsKICAgICBKU1ZpcnR1YWxNYWNoaW5lICpt
X3ZpcnR1YWxNYWNoaW5lOwogICAgIEpTR2xvYmFsQ29udGV4dFJlZiBtX2NvbnRleHQ7CiAgICAg
SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4gbV9leGNlcHRpb247CisgICAgV2Vha09iakNQdHI8
aWQgPEpTTW9kdWxlTG9hZGVyRGVsZWdhdGU+PiBtX21vZHVsZUxvYWRlckRlbGVnYXRlOwogfQog
CiAtIChKU0dsb2JhbENvbnRleHRSZWYpSlNHbG9iYWxDb250ZXh0UmVmCkBAIC0yMzMsNiArMjQw
LDE2IEBACiAgICAgSlNHbG9iYWxDb250ZXh0U2V0RGVidWdnZXJSdW5Mb29wKG1fY29udGV4dCwg
cnVuTG9vcCk7CiB9CiAKKy0gKGlkPEpTTW9kdWxlTG9hZGVyRGVsZWdhdGU+KW1vZHVsZUxvYWRl
ckRlbGVnYXRlCit7CisgICAgcmV0dXJuIG1fbW9kdWxlTG9hZGVyRGVsZWdhdGUuZ2V0QXV0b3Jl
bGVhc2VkKCk7Cit9CisKKy0gKHZvaWQpc2V0TW9kdWxlTG9hZGVyRGVsZWdhdGU6KGlkPEpTTW9k
dWxlTG9hZGVyRGVsZWdhdGU+KW1vZHVsZUxvYWRlckRlbGVnYXRlCit7CisgICAgbV9tb2R1bGVM
b2FkZXJEZWxlZ2F0ZSA9IG1vZHVsZUxvYWRlckRlbGVnYXRlOworfQorCiBAZW5kCiAKIEBpbXBs
ZW1lbnRhdGlvbiBKU0NvbnRleHQoU3Vic2NyaXB0U3VwcG9ydCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0SW50ZXJuYWwuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNDb250ZXh0SW50ZXJuYWwuaAppbmRleCAyOGY3MDljMWU0OGYxZTFhODAz
ODU2NTBhYWU2ZTQxY2QzNTE1MGZhLi5hYjQ1ODI5ZjAwMjdlNGZhZDZiZmJkMWFmYzQwMmIzYTFi
ZTg1YjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dElu
dGVybmFsLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRJbnRlcm5h
bC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAKLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dC5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlND
b250ZXh0UHJpdmF0ZS5oPgogCiBzdHJ1Y3QgQ2FsbGJhY2tEYXRhIHsKICAgICBDYWxsYmFja0Rh
dGEqIG5leHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4
dFByaXZhdGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UHJpdmF0ZS5o
CmluZGV4IGZmOTYyMmFkZGY2MGI3YzEwMzU3ZGFjY2YxYzZmNDFlY2I4NjFmMWMuLmQ0ZTIwNmIz
MzU3NWU5ZmE2ZDQxODJlOWUxYWQ4OTQwNTY4YTg2NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDb250ZXh0UHJpdmF0ZS5oCkBAIC0zMCw2ICszMCwyNyBAQAogCiAjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHQuaD4KIAorQHByb3RvY29sIEpTTW9kdWxlTG9hZGVy
RGVsZWdhdGUgPE5TT2JqZWN0PgorCitAcmVxdWlyZWQKKworLyohIEBhYnN0cmFjdCBQcm92aWRl
cyBzb3VyY2UgY29kZSBmb3IgYW55IEpTIG1vZHVsZSB0aGF0IGlzIGFjdGl2ZWx5IGltcG9ydGVk
LgorIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IGZvciB3aGljaCB0aGUgbW9kdWxlIGlzIGJl
aW5nIHJlcXVlc3RlZC4KKyBAcGFyYW0gaWRlbnRpZmllciBUaGUgcmVzb2x2ZWQgaWRlbnRpZmll
ciBmb3IgdGhlIHJlcXVlc3RlZCBtb2R1bGUuCisgQHBhcmFtIHJlc29sdmUgQSBKUyBmdW5jdGlv
biB0byBjYWxsIHdpdGggdGhlIGRlc2lyZWQgc2NyaXB0IGZvciBpZGVudGlmaWVyLgorIEBwYXJh
bSByZWplY3QgQSBKUyBmdW5jdGlvbiB0byBjYWxsIHdoZW4gaWRlbnRpZmllciBjYW5ub3QgYmUg
ZmV0Y2hlZC4KKyBAZGlzY3Vzc2lvbiBDdXJyZW50bHksIGlkZW50aWZpZXIgd2lsbCBhbHdheXMg
YmUgYW4gYWJzb2x1dGUgZmlsZSBVUkwgY29tcHV0ZWQgZnJvbSBzcGVjaWZpZXIgb2YgdGhlIHJl
cXVlc3RlZCBtb2R1bGUgcmVsYXRpdmUgdG8gdGhlIFVSTCBvZiB0aGUgcmVxdWVzdGluZyBzY3Jp
cHQuIElmIHRoZSByZXF1ZXN0aW5nIHNjcmlwdCBkb2VzIG5vdCBoYXZlIGEgVVJMIGFuZCB0aGUg
bW9kdWxlIHNwZWNpZmllciBpcyBub3QgYW4gYWJzb2x1dGUgcGF0aCB0aGUgbW9kdWxlIGxvYWRl
ciB3aWxsIGZhaWwgdG8gbG9hZCB0aGUgbW9kdWxlLgorCisgVGhlIGZpcnN0IGFyZ3VtZW50IHRv
IHJlc29sdmUgc2hvbHVkIGFsd2F5cyBiZSBhIEpTU2NyaXB0LCBvdGhlcndpc2UgdGhlIG1vZHVs
ZSBsb2FkZXIgd2lsbCByZWplY3QgdGhlIG1vZHVsZS4KKworIE9uY2UgYW4gaWRlbnRpZmllciBo
YXMgYmVlbiByZXNvbHZlZCBvciByZWplY3RlZCBpbiBhIGdpdmVuIGNvbnRleHQgaXQgd2lsbCBu
ZXZlciBiZSByZXF1ZXN0ZWQgYWdhaW4uIElmIGEgc2NyaXB0IGlzIHN1Y2Nlc3NmdWxseSBldmFs
dWF0ZWQgaXQgd2lsbCBub3QgYmUgcmUtZXZhbHVhdGVkIG9uIGFueSBzdWJzZXF1ZW50IGltcG9y
dC4KKworIFRoZSBWTSB3aWxsIHJldGFpbiBhbGwgZXZhbHVhdGVkIG1vZHVsZXMgZm9yIHRoZSBs
aWZldGltZSBvZiB0aGUgY29udGV4dC4KKyAqLworLSAodm9pZCljb250ZXh0OihKU0NvbnRleHQg
Kiljb250ZXh0IGZldGNoTW9kdWxlRm9ySWRlbnRpZmllcjooSlNWYWx1ZSAqKWlkZW50aWZpZXIg
d2l0aFJlc29sdmVIYW5kbGVyOihKU1ZhbHVlICopcmVzb2x2ZSBhbmRSZWplY3RIYW5kbGVyOihK
U1ZhbHVlICopcmVqZWN0OworCitAZW5kCisKIEBpbnRlcmZhY2UgSlNDb250ZXh0KFByaXZhdGUp
CiAKIC8qIQpAQCAtNTAsNiArNzEsOSBAQAogKi8KIEBwcm9wZXJ0eSAoc2V0dGVyPV9zZXREZWJ1
Z2dlclJ1bkxvb3A6KSBDRlJ1bkxvb3BSZWYgX2RlYnVnZ2VyUnVuTG9vcCBKU0NfQVBJX0FWQUlM
QUJMRShtYWNvc3goMTAuMTApLCBpb3MoOC4wKSk7CiAKKy8qISBAYWJzdHJhY3QgVGhlIGRlbGVn
YXRlIHRoZSBjb250ZXh0IHdpbGwgdXNlIHdoZW4gdHJ5aW5nIHRvIGxvYWQgYSBtb2R1bGUuIE5v
dGUsIHRoaXMgZGVsZWdhdGUgd2lsbCBiZSBpZ25vcmVkIGZvciBjb250ZXh0cyByZXR1cm5lZCBi
eSBVSVdlYlZpZXcuICovCitAcHJvcGVydHkgKG5vbmF0b21pYywgd2VhaykgaWQgPEpTTW9kdWxl
TG9hZGVyRGVsZWdhdGU+IG1vZHVsZUxvYWRlckRlbGVnYXRlIEpTQ19BUElfQVZBSUxBQkxFKG1h
Y29zeChKU0NfTUFDX1RCQSksIGlvcyhKU0NfSU9TX1RCQSkpOworCiBAZW5kCiAKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCmluZGV4IGUxOGRmZDIx
ZmYyODQwMDdkMDAzOWU2NDMyZDllYzNjNGYxZjMxNzcuLjlmNWZkYWZjNzgxOTZmZTQ0OGMxOGQw
NzkxNWUwNGZhMzg2ODRhYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDb250ZXh0UmVmLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4
dFJlZi5jcHAKQEAgLTMwLDkgKzMwLDkgQEAKICNpbmNsdWRlICJBUElDYXN0LmgiCiAjaW5jbHVk
ZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgorI2luY2x1
ZGUgIkpTQVBJR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNDYWxsYmFja09iamVjdC5oIgog
I2luY2x1ZGUgIkpTQ2xhc3NSZWYuaCIKLSNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2lu
Y2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlNv
dXJjZVByb3ZpZGVyLmgiCkBAIC0xMzgsNyArMTM4LDcgQEAgSlNHbG9iYWxDb250ZXh0UmVmIEpT
R2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXAoSlNDb250ZXh0R3JvdXBSZWYgZ3JvdXAsIEpTQ2xh
c3MKICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKHZtLnB0cigpKTsKIAogICAgIGlmICghZ2xvYmFs
T2JqZWN0Q2xhc3MpIHsKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IEpT
R2xvYmFsT2JqZWN0OjpjcmVhdGUodm0uZ2V0KCksIEpTR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1
Y3R1cmUodm0uZ2V0KCksIGpzTnVsbCgpKSk7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBKU0FQSUdsb2JhbE9iamVjdDo6Y3JlYXRlKHZtLmdldCgpLCBKU0FQSUdsb2Jh
bE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLmdldCgpLCBqc051bGwoKSkpOwogI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQogICAgICAgICBpZiAoSlNSZW1vdGVJbnNwZWN0b3JHZXRJbnNw
ZWN0aW9uRW5hYmxlZEJ5RGVmYXVsdCgpKQogICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5zZXRS
ZW1vdGVEZWJ1Z2dpbmdFbmFibGVkKHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1NjcmlwdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Njcmlw
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjkwY2I2MDkwODhlYzgyZjc0NGFhNzJhN2NkN2MxZDhlMTM4NTNjODcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0LmgK
QEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWUuaD4KKworI2lmIEpTQ19PQkpD
X0FQSV9FTkFCTEVECisKK05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisKK09CSkNfQ0xBU1MgSlNW
aXJ0dWFsTWFjaGluZTsKKworSlNDX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goSlNDX01BQ19UQkEp
LCBpb3MoSlNDX0lPU19UQkEpKQorQGludGVyZmFjZSBKU1NjcmlwdCA6IE5TT2JqZWN0CisKKy8q
IQorIEBtZXRob2QKKyBAYWJzdHJhY3QgQ3JlYXRlIGEgSlNTY3JpcHQgZm9yIHRoZSBzcGVjaWZp
ZWQgdmlydHVhbCBtYWNoaW5lLgorIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBjb2RlIHRvIHVz
ZSB3aGVuIHRoZSBzY3JpcHQgaXMgZXZhbHVhdGVkIGJ5IHRoZSBKUyB2bS4KKyBAcGFyYW0gdm0g
VGhlIEpTVmlydHVhbE1hY2hpbmUgdGhlIHNjcmlwdCBjYW4gYmUgZXZhbHVhdGVkIGluLgorIEBy
ZXN1bHQgVGhlIG5ldyBzY3JpcHQuCisgKi8KKysgKG51bGxhYmxlIGluc3RhbmNldHlwZSlzY3Jp
cHRXaXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJjZSBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1
YWxNYWNoaW5lICopdm07CisKKy8qIQorIEBtZXRob2QKKyBAYWJzdHJhY3QgQ3JlYXRlIGEgSlNT
Y3JpcHQgZm9yIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBtYWNoaW5lIHdpdGggYSBwYXRoIHRvIGEg
Y29kZXNpZ25pbmcgYW5kIGJ5dGVjb2RlIGNhY2hpbmcuCisgQHBhcmFtIGZpbGVQYXRoIEEgVVJM
IGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gYSBKUyBzb3VyY2UgY29kZSBmaWxlIG9uIGRpc2suCisg
QHBhcmFtIHZtIFRoZSBKU1ZpcnR1YWxNYWNoaW5lIHRoZSBzY3JpcHQgY2FuIGJlIGV2YWx1YXRl
ZCBpbi4KKyBAcGFyYW0gY29kZVNpZ25pbmdQYXRoIEEgVVJMIGNvbnRhaW5pbmcgdGhlIHBhdGgg
dG8gdGhlIGNvZGVTaWduaW5nIGZpbGUgZm9yIGZpbGVQYXRoIG9uIGRpc2suCisgQHBhcmFtIGNh
Y2hlUGF0aCBBIFVSTCBjb250YWluaW5nIHRoZSBwYXRoIHdoZXJlIHRoZSBWTSBzaG91bGQgY2Fj
aGUgZm9yIGZ1dHVyZSBleGVjdXRpb24uCisgQHJlc3VsdCBUaGUgbmV3IHNjcmlwdC4KKyBAZGlz
Y3Vzc2lvbiB0aGUgZmlsZXMgYXQgZmlsZVBhdGgsIGNvZGVTaWduaW5nUGF0aCwgYW5kIGNhY2hl
UGF0aCBzaG91bGQgbm90IGJlIGV4dGVybmFsbHkgbW9kaWZpZWQgIGZvciB0aGUgbGlmZWN5Y2xl
IG9mIHZtLiBOb3RlIHRoYXQgY29kZVNpZ25pbmdQYXRoIGFuZCBjYWNoZVBhdGggYXJlIG5vdCB1
c2VkIGN1cnJlbnRseSwgYnV0IHRoYXQgd2lsbCBjaGFuZ2UgaW4gdGhlIG5lYXIgZnV0dXJlLgor
ICovCisrIChudWxsYWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0RnJvbVVURjhGaWxlOihOU1VSTCAq
KWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSB3aXRoQ29k
ZVNpZ25pbmc6KG51bGxhYmxlIE5TVVJMICopY29kZVNpZ25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2Fj
aGU6KG51bGxhYmxlIE5TVVJMICopY2FjaGVQYXRoOworCitAZW5kCisKK05TX0FTU1VNRV9OT05O
VUxMX0VORAorCisjZW5kaWYgLy8gSlNDX09CSkNfQVBJX0VOQUJMRUQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTU2NyaXB0Lm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc5NmM0MWVmOWVjYzM5ODQ3MDA2Y2ZiMWI2
NTczYzUzNDlkM2ZkZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTU2NyaXB0Lm1tCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJKU1Nj
cmlwdEludGVybmFsLmgiCisKKyNpbXBvcnQgIkFQSUNhc3QuaCIKKyNpbXBvcnQgIkpTQ29udGV4
dEludGVybmFsLmgiCisjaW1wb3J0ICJKU1ZhbHVlUHJpdmF0ZS5oIgorI2ltcG9ydCAiU3ltYm9s
LmgiCisKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAorCitAaW1wbGVtZW50YXRpb24gSlNTY3Jp
cHQgeworICAgIFN0cmluZyBtX3NvdXJjZTsKK30KKworKyAoaW5zdGFuY2V0eXBlKXNjcmlwdFdp
dGhTb3VyY2U6KE5TU3RyaW5nICopc291cmNlIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1h
Y2hpbmUgKil2bQoreworICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAgSlNTY3JpcHQgKnJlc3Vs
dCA9IFtbSlNTY3JpcHQgYWxsb2NdIGluaXRdOworICAgIHJlc3VsdC0+bV9zb3VyY2UgPSBzb3Vy
Y2U7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yPgor
c3RhdGljIGJvb2wgZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShGSUxFKiBmaWxlLCBWZWN0
b3ImIGJ1ZmZlcikKK3sKKyAgICAvLyBXZSBtaWdodCBoYXZlIGluamVjdGVkICJ1c2Ugc3RyaWN0
IjsgYXQgdGhlIHRvcC4KKyAgICBzaXplX3QgaW5pdGlhbFNpemUgPSBidWZmZXIuc2l6ZSgpOwor
ICAgIGlmIChmc2VlayhmaWxlLCAwLCBTRUVLX0VORCkgPT0gLTEpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBsb25nIGJ1ZmZlckNhcGFjaXR5ID0gZnRlbGwoZmlsZSk7CisgICAgaWYgKGJ1
ZmZlckNhcGFjaXR5ID09IC0xKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGZzZWVr
KGZpbGUsIDAsIFNFRUtfU0VUKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGJ1
ZmZlci5yZXNpemUoYnVmZmVyQ2FwYWNpdHkgKyBpbml0aWFsU2l6ZSk7CisgICAgc2l6ZV90IHJl
YWRTaXplID0gZnJlYWQoYnVmZmVyLmRhdGEoKSArIGluaXRpYWxTaXplLCAxLCBidWZmZXIuc2l6
ZSgpLCBmaWxlKTsKKyAgICByZXR1cm4gcmVhZFNpemUgPT0gYnVmZmVyLnNpemUoKSAtIGluaXRp
YWxTaXplOworfQorCitzdGF0aWMgYm9vbCBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGNv
bnN0IFN0cmluZyYgZmlsZU5hbWUsIFZlY3RvcjxjaGFyPiYgYnVmZmVyKQoreworICAgIEZJTEUq
IGYgPSBmb3BlbihmaWxlTmFtZS51dGY4KCkuZGF0YSgpLCAicmIiKTsKKyAgICBpZiAoIWYpIHsK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3BlbiBmaWxlOiAlc1xuIiwgZmls
ZU5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBib29sIHJlc3VsdCA9IGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoZiwgYnVmZmVyKTsK
KyAgICBmY2xvc2UoZik7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKKysgKGluc3RhbmNl
dHlwZSlzY3JpcHRGcm9tVVRGOEZpbGU6KE5TVVJMICopZmlsZVBhdGggaW5WaXJ0dWFsTWFjaGlu
ZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtIHdpdGhDb2RlU2lnbmluZzooTlNVUkwgKiljb2RlU2ln
bmluZ1BhdGggYW5kQnl0ZWNvZGVDYWNoZTooTlNVUkwgKiljYWNoZVBhdGgKK3sKKyAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgY2hlY2sgY29kZVNpZ25pbmcuCisgICAgVU5VU0VEX1BBUkFNKGNv
ZGVTaWduaW5nUGF0aCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFjdHVhbGx5IGNhY2hl
IGJ5dGVjb2RlLgorICAgIFVOVVNFRF9QQVJBTShjYWNoZVBhdGgpOworICAgIFVOVVNFRF9QQVJB
TSh2bSk7CisgICAgVVJMIGZpbGVQYXRoVVJMKFtmaWxlUGF0aCBhYnNvbHV0ZVVSTF0pOworICAg
IGlmICghZmlsZVBhdGhVUkwuaXNMb2NhbEZpbGUoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbW1hcCB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgaW5z
dGVhZCBvZiBjb3B5aW5nIGl0IGludG8gZGlydHkgbWVtb3J5LgorICAgIFZlY3RvcjxjaGFyPiBi
dWZmZXI7CisgICAgaWYgKCFmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVQYXRoVVJM
LmZpbGVTeXN0ZW1QYXRoKCksIGJ1ZmZlcikpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBK
U1NjcmlwdCAqcmVzdWx0ID0gW1tKU1NjcmlwdCBhbGxvY10gaW5pdF07CisgICAgcmVzdWx0LT5t
X3NvdXJjZSA9IFN0cmluZzo6ZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soYnVmZmVyLmRhdGEo
KSwgYnVmZmVyLnNpemUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworY29uc3QgU3RyaW5n
JiBnZXRKU1NjcmlwdFNvdXJjZUNvZGUoSlNTY3JpcHQgKm1vZHVsZSkgeyByZXR1cm4gbW9kdWxl
LT5tX3NvdXJjZTsgfQorCitAZW5kCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNTY3JpcHRJbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU0ZmRmYWUwMGM3NDZiOTk1ODJi
OTZjODE5MDA3ZWJkZDhiZTVhODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbXBv
cnQgIkpTU2NyaXB0LmgiCisjaW1wb3J0ICJTb3VyY2VDb2RlLmgiCisKKworY29uc3QgU3RyaW5n
JiBnZXRKU1NjcmlwdFNvdXJjZUNvZGUoSlNTY3JpcHQgKik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVJbnRlcm5hbC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1ZhbHVlSW50ZXJuYWwuaAppbmRleCA0ZjFhOGY2OWNiZmNjMjlhZWIyNjc0NzM4
MWQ4ZDVmNWU4MWJhZWFhLi41NGI3NTVlZmZmZTZlZDI0YTVjMzAyMmI3ZDRjM2ExODUwMGIwMWUw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVJbnRlcm5hbC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZUludGVybmFsLmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsOCAr
MjYsNyBAQAogI2lmbmRlZiBKU1ZhbHVlSW50ZXJuYWxfaAogI2RlZmluZSBKU1ZhbHVlSW50ZXJu
YWxfaAogCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgotI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZS5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNW
YWx1ZVByaXZhdGUuaD4KIAogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oCmluZGV4
IDVjYTlhN2Y0YTEwNzA0NGQ2MDliMTEyNzdiZTg5NzZhNDM2N2FhOWIuLjkxMjJlZDQ5YTRlYTFh
YTQ5ZWM2NjdmZWY2NjI3ZmM0M2I3NzcxNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaApAQCAtNDYsOCArNDYsOCBAQCBK
U0NvbnRleHRHcm91cFJlZiBnZXRHcm91cEZyb21WaXJ0dWFsTWFjaGluZShKU1ZpcnR1YWxNYWNo
aW5lICopOwogCiAtIChKU0NvbnRleHQgKiljb250ZXh0Rm9yR2xvYmFsQ29udGV4dFJlZjooSlNH
bG9iYWxDb250ZXh0UmVmKWdsb2JhbENvbnRleHQ7CiAtICh2b2lkKWFkZENvbnRleHQ6KEpTQ29u
dGV4dCAqKXdyYXBwZXIgZm9yR2xvYmFsQ29udGV4dFJlZjooSlNHbG9iYWxDb250ZXh0UmVmKWds
b2JhbENvbnRleHQ7Ci0KIEBlbmQKKwogI2VuZGlmIC8vIGRlZmluZWQoX19PQkpDX18pCiAKIHZv
aWQgc2NhbkV4dGVybmFsT2JqZWN0R3JhcGgoSlNDOjpWTSYsIEpTQzo6U2xvdFZpc2l0b3ImLCB2
b2lkKiByb290KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMv
dGVzdGFwaS5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQpp
bmRleCAzN2UxMzg1YzhjNDg0ZWZhZThhOWMzZjkyZTEzNWNhNzNmOTU5MTkyLi40MzVmZGJiMzZk
MjQ0NmU4NWRiNTMxMzYzM2NkNzY0ZmVmNzk5OGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS90ZXN0cy90ZXN0YXBpLm1tCkBAIC0zMSw3ICszMSw5IEBACiAjaW1wb3J0ICJERkdXb3Jr
bGlzdC5oIgogI2ltcG9ydCAiRGF0ZVRlc3RzLmgiCiAjaW1wb3J0ICJKU0Nhc3QuaCIKKyNpbXBv
cnQgIkpTQ29udGV4dFByaXZhdGUuaCIKICNpbXBvcnQgIkpTRXhwb3J0VGVzdHMuaCIKKyNpbXBv
cnQgIkpTU2NyaXB0LmgiCiAjaW1wb3J0ICJKU1ZhbHVlUHJpdmF0ZS5oIgogI2ltcG9ydCAiSlNW
aXJ0dWFsTWFjaGluZUludGVybmFsLmgiCiAjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5lUHJpdmF0
ZS5oIgpAQCAtMTgxMiwxMiArMTgxNCwyNDggQEAgc3RhdGljIHZvaWQgcGFyYWxsZWxQcm9taXNl
UmVzb2x2ZVRlc3QoKQogICAgIH0KIH0KIAordHlwZWRlZiBKU1ZhbHVlICooXlJlc29sdmVCbG9j
aykoSlNDb250ZXh0ICosIEpTVmFsdWUgKiwgSlNTY3JpcHQgKik7Cit0eXBlZGVmIHZvaWQgKF5G
ZXRjaEJsb2NrKShKU0NvbnRleHQgKiwgSlNWYWx1ZSAqLCBKU1ZhbHVlICosIEpTVmFsdWUgKik7
CisKK0BpbnRlcmZhY2UgSlNDb250ZXh0RmV0Y2hEZWxlZ2F0ZSA6IEpTQ29udGV4dCA8SlNNb2R1
bGVMb2FkZXJEZWxlZ2F0ZT4KKworKyAoaW5zdGFuY2V0eXBlKWNvbnRleHRXaXRoQmxvY2tGb3JG
ZXRjaDooRmV0Y2hCbG9jaylibG9jazsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gSlNDb250
ZXh0RmV0Y2hEZWxlZ2F0ZSB7CisgICAgRmV0Y2hCbG9jayBtX2ZldGNoQmxvY2s7Cit9CisKKysg
KGluc3RhbmNldHlwZSljb250ZXh0V2l0aEJsb2NrRm9yRmV0Y2g6KEZldGNoQmxvY2spYmxvY2sK
K3sKKyAgICBhdXRvICpyZXN1bHQgPSBbW0pTQ29udGV4dEZldGNoRGVsZWdhdGUgYWxsb2NdIGlu
aXRdOworICAgIHJlc3VsdC0+bV9mZXRjaEJsb2NrID0gYmxvY2s7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworLSAodm9pZCljb250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IGZldGNoTW9kdWxl
Rm9ySWRlbnRpZmllcjooSlNWYWx1ZSAqKWlkZW50aWZpZXIgd2l0aFJlc29sdmVIYW5kbGVyOihK
U1ZhbHVlICopcmVzb2x2ZSBhbmRSZWplY3RIYW5kbGVyOihKU1ZhbHVlICopcmVqZWN0Cit7Cisg
ICAgbV9mZXRjaEJsb2NrKGNvbnRleHQsIGlkZW50aWZpZXIsIHJlc29sdmUsIHJlamVjdCk7Cit9
CisKK0BlbmQKKworc3RhdGljIHZvaWQgY2hlY2tNb2R1bGVDb2RlUmFuKEpTQ29udGV4dCAqY29u
dGV4dCwgSlNWYWx1ZSAqcHJvbWlzZSwgSlNWYWx1ZSAqZXhwZWN0ZWQpCit7CisgICAgX19ibG9j
ayBCT09MIHByb21pc2VXYXNSZXNvbHZlZCA9IGZhbHNlOworICAgIFtwcm9taXNlIGludm9rZU1l
dGhvZDpAInRoZW4iIHdpdGhBcmd1bWVudHM6QFteKEpTVmFsdWUgKmV4cG9ydFZhbHVlKSB7Cisg
ICAgICAgIHByb21pc2VXYXNSZXNvbHZlZCA9IHRydWU7CisgICAgICAgIGNoZWNrUmVzdWx0KEAi
bW9kdWxlIGV4cG9ydGVkIHZhbHVlICdleHAnIGlzIG51bGwiLCBbZXhwb3J0VmFsdWVbQCJleHAi
XSBpc0VxdWFsVG9PYmplY3Q6ZXhwZWN0ZWRdKTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJyYW4g
aXMgJUAiLCBbY29udGV4dFtAInJhbiJdIGlzRXF1YWxUb09iamVjdDpleHBlY3RlZF0pOworICAg
IH0sIF4oSlNWYWx1ZSAqZXJyb3IpIHsKKyAgICAgICAgTlNMb2coQCIlQCIsIFtlcnJvciB0b1N0
cmluZ10pOworICAgICAgICBjaGVja1Jlc3VsdChAIm1vZHVsZSBncmFwaCB3YXMgcmVzb2x2ZWQg
YXMgZXhwZWN0ZWQiLCBOTyk7CisgICAgfV1dOworICAgIGNoZWNrUmVzdWx0KEAiUHJvbWlzZSB3
YXMgcmVzb2x2ZWQiLCBwcm9taXNlV2FzUmVzb2x2ZWQpOworfQorCitzdGF0aWMgdm9pZCBjaGVj
a01vZHVsZVdhc1JlamVjdGVkKEpTQ29udGV4dCAqY29udGV4dCwgSlNWYWx1ZSAqcHJvbWlzZSkK
K3sKKyAgICBfX2Jsb2NrIEJPT0wgcHJvbWlzZVdhc1JlamVjdGVkID0gZmFsc2U7CisgICAgW3By
b21pc2UgaW52b2tlTWV0aG9kOkAidGhlbiIgd2l0aEFyZ3VtZW50czpAW14oKSB7CisgICAgICAg
IGNoZWNrUmVzdWx0KEAibW9kdWxlIHdhcyByZWplY3RlZCBhcyBleHBlY3RlZCIsIE5PKTsKKyAg
ICB9LCBeKEpTVmFsdWUgKmVycm9yKSB7CisgICAgICAgIHByb21pc2VXYXNSZWplY3RlZCA9IHRy
dWU7CisgICAgICAgIE5TTG9nKEAiJUAiLCBbZXJyb3IgdG9TdHJpbmddKTsKKyAgICAgICAgY2hl
Y2tSZXN1bHQoQCJtb2R1bGUgZ3JhcGggd2FzIHJlamVjdGVkIHdpdGggZXJyb3IiLCAhW2Vycm9y
IGlzRXF1YWxXaXRoVHlwZUNvZXJjaW9uVG9PYmplY3Q6W0pTVmFsdWUgdmFsdWVXaXRoTnVsbElu
Q29udGV4dDpjb250ZXh0XV0pOworICAgIH1dXTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZldGNo
KCkKK3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgYXV0byAqY29udGV4dCA9IFtK
U0NvbnRleHRGZXRjaERlbGVnYXRlIGNvbnRleHRXaXRoQmxvY2tGb3JGZXRjaDpeKEpTQ29udGV4
dCAqY29udGV4dCwgSlNWYWx1ZSAqaWRlbnRpZmllciwgSlNWYWx1ZSAqcmVzb2x2ZSwgSlNWYWx1
ZSAqcmVqZWN0KSB7CisgICAgICAgICAgICBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0
OkAiZmlsZTovLy9kaXJlY3RvcnkvYmFyLmpzIl0pCisgICAgICAgICAgICAgICAgW3Jlc29sdmUg
Y2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0V2l0aFNvdXJjZTpAImltcG9ydCBc
Ii4uL2Zvby5qc1wiOyBleHBvcnQgbGV0IGV4cCA9IG51bGw7IiBpblZpcnR1YWxNYWNoaW5lOltj
b250ZXh0IHZpcnR1YWxNYWNoaW5lXV1dXTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFtpZGVudGlm
aWVyIGlzRXF1YWxUb09iamVjdDpAImZpbGU6Ly8vZm9vLmpzIl0pCisgICAgICAgICAgICAgICAg
W3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0V2l0aFNvdXJjZTpA
Imdsb2JhbFRoaXMucmFuID0gbnVsbDsiIGluVmlydHVhbE1hY2hpbmU6W2NvbnRleHQgdmlydHVh
bE1hY2hpbmVdXV1dOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFtyZWplY3Qg
Y2FsbFdpdGhBcmd1bWVudHM6QFtbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZyb21NZXNzYWdl
OkAiV2VpcmQgcGF0aCIgaW5Db250ZXh0OmNvbnRleHRdXV07CisgICAgICAgIH1dOworICAgICAg
ICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAgICAgSlNWYWx1
ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0KCcuL2Jhci5qcycp
OyIgd2l0aFNvdXJjZVVSTDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOkAiL2RpcmVjdG9yeSIgaXNE
aXJlY3Rvcnk6WUVTXV07CisgICAgICAgIEpTVmFsdWUgKm51bGwgPSBbSlNWYWx1ZSB2YWx1ZVdp
dGhOdWxsSW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICBjaGVja01vZHVsZUNvZGVSYW4oY29u
dGV4dCwgcHJvbWlzZSwgbnVsbCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB0ZXN0RmV0Y2hX
aXRoVHdvQ3ljbGUoKQoreworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBhdXRvICpj
b250ZXh0ID0gW0pTQ29udGV4dEZldGNoRGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNo
Ol4oSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICppZGVudGlmaWVyLCBKU1ZhbHVlICpyZXNv
bHZlLCBKU1ZhbHVlICpyZWplY3QpIHsKKyAgICAgICAgICAgIGlmIChbaWRlbnRpZmllciBpc0Vx
dWFsVG9PYmplY3Q6QCJmaWxlOi8vL2RpcmVjdG9yeS9iYXIuanMiXSkKKyAgICAgICAgICAgICAg
ICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNl
OkAiaW1wb3J0IHsgbiB9IGZyb20gXCIuLi9mb28uanNcIjsgZXhwb3J0IGxldCBleHAgPSBuOyIg
aW5WaXJ0dWFsTWFjaGluZTpbY29udGV4dCB2aXJ0dWFsTWFjaGluZV1dXV07CisgICAgICAgICAg
ICBlbHNlIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL2Zvby5qcyJd
KQorICAgICAgICAgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0
IHNjcmlwdFdpdGhTb3VyY2U6QCJpbXBvcnQgXCJkaXJlY3RvcnkvYmFyLmpzXCI7IGdsb2JhbFRo
aXMucmFuID0gbnVsbDsgZXhwb3J0IGxldCBuID0gbnVsbDsiIGluVmlydHVhbE1hY2hpbmU6W2Nv
bnRleHQgdmlydHVhbE1hY2hpbmVdXV1dOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIFtyZWplY3QgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdFcnJv
ckZyb21NZXNzYWdlOkAiV2VpcmQgcGF0aCIgaW5Db250ZXh0OmNvbnRleHRdXV07CisgICAgICAg
IH1dOworICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAg
ICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0
KCcuL2Jhci5qcycpOyIgd2l0aFNvdXJjZVVSTDpbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOkAiL2Rp
cmVjdG9yeSIgaXNEaXJlY3Rvcnk6WUVTXV07CisgICAgICAgIEpTVmFsdWUgKm51bGwgPSBbSlNW
YWx1ZSB2YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICBjaGVja01vZHVs
ZUNvZGVSYW4oY29udGV4dCwgcHJvbWlzZSwgbnVsbCk7CisgICAgfQorfQorCisKK3N0YXRpYyB2
b2lkIHRlc3RGZXRjaFdpdGhUaHJlZUN5Y2xlKCkKK3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsK
KyAgICAgICAgYXV0byAqY29udGV4dCA9IFtKU0NvbnRleHRGZXRjaERlbGVnYXRlIGNvbnRleHRX
aXRoQmxvY2tGb3JGZXRjaDpeKEpTQ29udGV4dCAqY29udGV4dCwgSlNWYWx1ZSAqaWRlbnRpZmll
ciwgSlNWYWx1ZSAqcmVzb2x2ZSwgSlNWYWx1ZSAqcmVqZWN0KSB7CisgICAgICAgICAgICBpZiAo
W2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0OkAiZmlsZTovLy9kaXJlY3RvcnkvYmFyLmpzIl0p
CisgICAgICAgICAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQg
c2NyaXB0V2l0aFNvdXJjZTpAImltcG9ydCB7IG4gfSBmcm9tIFwiLi4vZm9vLmpzXCI7IGV4cG9y
dCBsZXQgZm9vID0gbjsiIGluVmlydHVhbE1hY2hpbmU6W2NvbnRleHQgdmlydHVhbE1hY2hpbmVd
XV1dOworICAgICAgICAgICAgZWxzZSBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0OkAi
ZmlsZTovLy9mb28uanMiXSkKKyAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3Vt
ZW50czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNlOkAiaW1wb3J0IFwib3RoZXJEaXJlY3Rv
cnkvYmF6LmpzXCI7IGV4cG9ydCBsZXQgbiA9IG51bGw7IiBpblZpcnR1YWxNYWNoaW5lOltjb250
ZXh0IHZpcnR1YWxNYWNoaW5lXV1dXTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFtpZGVudGlmaWVy
IGlzRXF1YWxUb09iamVjdDpAImZpbGU6Ly8vb3RoZXJEaXJlY3RvcnkvYmF6LmpzIl0pCisgICAg
ICAgICAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0
V2l0aFNvdXJjZTpAImltcG9ydCB7IGZvbyB9IGZyb20gXCIuLi9kaXJlY3RvcnkvYmFyLmpzXCI7
IGdsb2JhbFRoaXMucmFuID0gbnVsbDsgZXhwb3J0IGxldCBleHAgPSBmb287IiBpblZpcnR1YWxN
YWNoaW5lOltjb250ZXh0IHZpcnR1YWxNYWNoaW5lXV1dXTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBbcmVqZWN0IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTVmFsdWUgdmFsdWVX
aXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpAIldlaXJkIHBhdGgiIGluQ29udGV4dDpjb250ZXh0XV1d
OworICAgICAgICB9XTsKKyAgICAgICAgY29udGV4dC5tb2R1bGVMb2FkZXJEZWxlZ2F0ZSA9IGNv
bnRleHQ7CisgICAgICAgIEpTVmFsdWUgKnByb21pc2UgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlw
dDpAImltcG9ydCgnLi4vb3RoZXJEaXJlY3RvcnkvYmF6LmpzJyk7IiB3aXRoU291cmNlVVJMOltO
U1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvZGlyZWN0b3J5IiBpc0RpcmVjdG9yeTpZRVNdXTsKKyAg
ICAgICAgSlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE51bGxJbkNvbnRleHQ6Y29u
dGV4dF07CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCBwcm9taXNlLCBudWxs
KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkZXJSZXNvbHZlc0Fic29sdXRlU2Ny
aXB0VVJMKCkKK3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgYXV0byAqY29udGV4
dCA9IFtKU0NvbnRleHRGZXRjaERlbGVnYXRlIGNvbnRleHRXaXRoQmxvY2tGb3JGZXRjaDpeKEpT
Q29udGV4dCAqY29udGV4dCwgSlNWYWx1ZSAqaWRlbnRpZmllciwgSlNWYWx1ZSAqcmVzb2x2ZSwg
SlNWYWx1ZSAqcmVqZWN0KSB7CisgICAgICAgICAgICBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRv
T2JqZWN0OkAiZmlsZTovLy9kaXJlY3RvcnkvYmFyLmpzIl0pCisgICAgICAgICAgICAgICAgW3Jl
c29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0V2l0aFNvdXJjZTpAImV4
cG9ydCBsZXQgZXhwID0gbnVsbDsgZ2xvYmFsVGhpcy5yYW4gPSBudWxsOyIgaW5WaXJ0dWFsTWFj
aGluZTpbY29udGV4dCB2aXJ0dWFsTWFjaGluZV1dXV07CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgW3JlamVjdCBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1ZhbHVlIHZhbHVlV2l0
aE5ld0Vycm9yRnJvbU1lc3NhZ2U6QCJXZWlyZCBwYXRoIiBpbkNvbnRleHQ6Y29udGV4dF1dXTsK
KyAgICAgICAgfV07CisgICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBjb250
ZXh0OworICAgICAgICBKU1ZhbHVlICpwcm9taXNlID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6
QCJpbXBvcnQoJy9kaXJlY3RvcnkvYmFyLmpzJyk7Il07CisgICAgICAgIEpTVmFsdWUgKm51bGwg
PSBbSlNWYWx1ZSB2YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRleHRdOworICAgICAgICBjaGVj
a01vZHVsZUNvZGVSYW4oY29udGV4dCwgcHJvbWlzZSwgbnVsbCk7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCB0ZXN0TG9hZGVyUmVqZWN0c05pbFNjcmlwdFVSTCgpCit7CisgICAgQGF1dG9yZWxl
YXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0RmV0Y2hEZWxlZ2F0
ZSBjb250ZXh0V2l0aEJsb2NrRm9yRmV0Y2g6XihKU0NvbnRleHQgKiwgSlNWYWx1ZSAqLCBKU1Zh
bHVlICosIEpTVmFsdWUgKikgeworICAgICAgICAgICAgY2hlY2tSZXN1bHQoQCJDb2RlIGlzIG5v
dCBydW4iLCBOTyk7CisgICAgICAgIH1dOworICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRl
bGVnYXRlID0gY29udGV4dDsKKyAgICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2
YWx1YXRlU2NyaXB0OkAiaW1wb3J0KCcuLi9vdGhlckRpcmVjdG9yeS9iYXouanMnKTsiXTsKKyAg
ICAgICAgY2hlY2tNb2R1bGVXYXNSZWplY3RlZChjb250ZXh0LCBwcm9taXNlKTsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkZXJSZWplY3RzRmFpbGVkRmV0Y2goKQoreworICAgIEBh
dXRvcmVsZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZldGNo
RGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl4oSlNDb250ZXh0ICpjb250ZXh0LCBK
U1ZhbHVlICosIEpTVmFsdWUgKiwgSlNWYWx1ZSAqcmVqZWN0KSB7CisgICAgICAgICAgICBbcmVq
ZWN0IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTVmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVz
c2FnZTpAIk5vcGUiIGluQ29udGV4dDpjb250ZXh0XV1dOworICAgICAgICB9XTsKKyAgICAgICAg
Y29udGV4dC5tb2R1bGVMb2FkZXJEZWxlZ2F0ZSA9IGNvbnRleHQ7CisgICAgICAgIEpTVmFsdWUg
KnByb21pc2UgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImltcG9ydCgnL290aGVyRGlyZWN0
b3J5L2Jhei5qcycpOyJdOworICAgICAgICBjaGVja01vZHVsZVdhc1JlamVjdGVkKGNvbnRleHQs
IHByb21pc2UpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGVzdEltcG9ydE1vZHVsZVR3aWNl
KCkKK3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgYXV0byAqY29udGV4dCA9IFtK
U0NvbnRleHRGZXRjaERlbGVnYXRlIGNvbnRleHRXaXRoQmxvY2tGb3JGZXRjaDpeKEpTQ29udGV4
dCAqIGNvbnRleHQsIEpTVmFsdWUgKiwgSlNWYWx1ZSAqcmVzb2x2ZSwgSlNWYWx1ZSAqKSB7Cisg
ICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRX
aXRoU291cmNlOkAicmFuKys7IGV4cG9ydCBsZXQgZXhwID0gMTsiIGluVmlydHVhbE1hY2hpbmU6
W2NvbnRleHQgdmlydHVhbE1hY2hpbmVdXV1dOworICAgICAgICB9XTsKKyAgICAgICAgY29udGV4
dC5tb2R1bGVMb2FkZXJEZWxlZ2F0ZSA9IGNvbnRleHQ7CisgICAgICAgIGNvbnRleHRbQCJyYW4i
XSA9IEAoMCk7CisgICAgICAgIEpTVmFsdWUgKnByb21pc2UgPSBbY29udGV4dCBldmFsdWF0ZVNj
cmlwdDpAImltcG9ydCgnL2Jhei5qcycpOyJdOworICAgICAgICBKU1ZhbHVlICpwcm9taXNlMiA9
IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0KCcvYmF6LmpzJyk7Il07CisgICAgICAg
IEpTVmFsdWUgKm9uZSA9IFtKU1ZhbHVlIHZhbHVlV2l0aEludDMyOjEgaW5Db250ZXh0OmNvbnRl
eHRdOworICAgICAgICBjaGVja01vZHVsZUNvZGVSYW4oY29udGV4dCwgcHJvbWlzZSwgb25lKTsK
KyAgICAgICAgY2hlY2tNb2R1bGVDb2RlUmFuKGNvbnRleHQsIHByb21pc2UyLCBvbmUpOworICAg
IH0KK30KKworQGludGVyZmFjZSBKU0NvbnRleHRGaWxlTG9hZGVyRGVsZWdhdGUgOiBKU0NvbnRl
eHQgPEpTTW9kdWxlTG9hZGVyRGVsZWdhdGU+CisKKysgKGluc3RhbmNldHlwZSluZXdDb250ZXh0
OworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBKU0NvbnRleHRGaWxlTG9hZGVyRGVsZWdhdGUg
eworfQorCisrIChpbnN0YW5jZXR5cGUpbmV3Q29udGV4dAoreworICAgIGF1dG8gKnJlc3VsdCA9
IFtbSlNDb250ZXh0RmlsZUxvYWRlckRlbGVnYXRlIGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitzdGF0aWMgTlNVUkwgKnJlc29sdmVQYXRoVG9TY3JpcHRzKCkKK3sKKyAg
ICBOU1N0cmluZyAqYXJnMCA9IE5TUHJvY2Vzc0luZm8ucHJvY2Vzc0luZm8uYXJndW1lbnRzWzBd
OworICAgIE5TVVJMICpiYXNlOworICAgIGlmIChbYXJnMCBoYXNQcmVmaXg6QCIvIl0pCisgICAg
ICAgIGJhc2UgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOmFyZzAgaXNEaXJlY3Rvcnk6Tk9dOwor
ICAgIGVsc2UgeworICAgICAgICBjb25zdCBzaXplX3QgbWF4TGVuZ3RoID0gMTAwMDA7CisgICAg
ICAgIGNoYXIgY3dkW21heExlbmd0aF07CisgICAgICAgIGlmICghZ2V0Y3dkKGN3ZCwgbWF4TGVu
Z3RoKSkgeworICAgICAgICAgICAgTlNMb2coQCJnZXRjd2QgZXJyb3JlZCB3aXRoIGNvZGU6ICVz
Iiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAg
ICAgICAgTlNVUkwgKmN3ZFVSTCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W05TU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6QCIlcyIsIGN3ZF1dOworICAgICAgICBiYXNlID0gW05TVVJMIGZpbGVV
UkxXaXRoUGF0aDphcmcwIGlzRGlyZWN0b3J5Ok5PIHJlbGF0aXZlVG9VUkw6Y3dkVVJMXTsKKyAg
ICB9CisgICAgcmV0dXJuIFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIuL3Rlc3RhcGlTY3JpcHRz
LyIgaXNEaXJlY3Rvcnk6WUVTIHJlbGF0aXZlVG9VUkw6YmFzZV07Cit9CisKKy0gKHZvaWQpY29u
dGV4dDooSlNDb250ZXh0ICopY29udGV4dCBmZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6KEpTVmFs
dWUgKilpZGVudGlmaWVyIHdpdGhSZXNvbHZlSGFuZGxlcjooSlNWYWx1ZSAqKXJlc29sdmUgYW5k
UmVqZWN0SGFuZGxlcjooSlNWYWx1ZSAqKXJlamVjdAoreworICAgIE5TVVJMICpmaWxlUGF0aCA9
IFtOU1VSTCBVUkxXaXRoU3RyaW5nOltpZGVudGlmaWVyIHRvU3RyaW5nXV07CisgICAgYXV0byAq
c2NyaXB0ID0gW0pTU2NyaXB0IHNjcmlwdEZyb21VVEY4RmlsZTpmaWxlUGF0aCBpblZpcnR1YWxN
YWNoaW5lOltjb250ZXh0IHZpcnR1YWxNYWNoaW5lXSB3aXRoQ29kZVNpZ25pbmc6bmlsIGFuZEJ5
dGVjb2RlQ2FjaGU6bmlsXTsKKyAgICBpZiAoc2NyaXB0KQorICAgICAgICBbcmVzb2x2ZSBjYWxs
V2l0aEFyZ3VtZW50czpAW3NjcmlwdF1dOworICAgIGVsc2UKKyAgICAgICAgW3JlamVjdCBjYWxs
V2l0aEFyZ3VtZW50czpAW1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6QCJV
bmFibGUgdG8gY3JlYXRlIFNjcmlwdCIgaW5Db250ZXh0OmNvbnRleHRdXV07Cit9CisKK0BlbmQK
Kworc3RhdGljIHZvaWQgdGVzdExvYWRCYXNpY0ZpbGUoKQoreworICAgIEBhdXRvcmVsZWFzZXBv
b2wgeworICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0
ZSBuZXdDb250ZXh0XTsKKyAgICAgICAgY29udGV4dC5tb2R1bGVMb2FkZXJEZWxlZ2F0ZSA9IGNv
bnRleHQ7CisgICAgICAgIEpTVmFsdWUgKnByb21pc2UgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlw
dDpAImltcG9ydCgnLi9iYXNpYy5qcycpOyIgd2l0aFNvdXJjZVVSTDpyZXNvbHZlUGF0aFRvU2Ny
aXB0cygpXTsKKyAgICAgICAgSlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE51bGxJ
bkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCBw
cm9taXNlLCBudWxsKTsKKyAgICB9Cit9CisKIHZvaWQgdGVzdE9iamVjdGl2ZUNBUEkoKQogewog
ICAgIE5TTG9nKEAiVGVzdGluZyBPYmplY3RpdmUtQyBBUEkiKTsKKwogICAgIGNoZWNrTmVnYXRp
dmVOU0ludGVnZXJzKCk7CiAgICAgcnVuSklUVGhyZWFkTGltaXRUZXN0cygpOwogCisgICAgdGVz
dExvYWRlclJlc29sdmVzQWJzb2x1dGVTY3JpcHRVUkwoKTsKKyAgICB0ZXN0RmV0Y2goKTsKKyAg
ICB0ZXN0RmV0Y2hXaXRoVHdvQ3ljbGUoKTsKKyAgICB0ZXN0RmV0Y2hXaXRoVGhyZWVDeWNsZSgp
OworICAgIHRlc3RJbXBvcnRNb2R1bGVUd2ljZSgpOworCisgICAgdGVzdExvYWRlclJlamVjdHNO
aWxTY3JpcHRVUkwoKTsKKyAgICB0ZXN0TG9hZGVyUmVqZWN0c0ZhaWxlZEZldGNoKCk7CisKKyAg
ICAvLyBGaWxlIGxvYWRpbmcKKyAgICB0ZXN0TG9hZEJhc2ljRmlsZSgpOworCiAgICAgcHJvbWlz
ZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZXNvbHZlRWFnZXIpOwogICAgIHByb21pc2VXaXRo
RXhlY3V0b3IoUmVzb2x1dGlvbjo6UmVqZWN0RWFnZXIpOwogICAgIHByb21pc2VXaXRoRXhlY3V0
b3IoUmVzb2x1dGlvbjo6UmVzb2x2ZUxhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy9iYXNpYy5qcyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvYmFzaWMuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODUy
OGM0OWNjMmE3NGU2Njk5MjY2YjJjOGEyYzdkMTBkYTc3NzIzOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHMvYmFzaWMuanMK
QEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCitleHBvcnQgbGV0IGV4cCA9IG51bGw7CitnbG9iYWxUaGlzLnJhbiA9IG51bGw7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGYzZWYxYzQyMzgwYjNjZWYyZjAwZmFjNjU4
ZTkyZTlkNmU3OTlmMDMuLmY2Zjk2MDhhZjI4ODhiODY1ZDI1ZjRhNDBmMmQ5ZTUxOWJlOGFkMDQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDU3LDYgKzEwNTcsOCBAQAogCQk1
MzlGQjhCQTFDOTlEQTdDMDA5NDBGQTEgLyogSlNBcnJheUlubGluZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOUZCOEI5MUM5OURBN0MwMDk0MEZB
MSAvKiBKU0FycmF5SW5saW5lcy5oICovOyB9OwogCQk1M0I0QkQxMjFGNjhCMzI1MDBEMkJFQTMg
LyogV2FzbU9wcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTMzQjE1REUxREM3RjQ2MzAwNEQ1MDBBIC8qIFdhc21PcHMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0I2MDFFQzIwMzRCOEM1MDA2QkU2
NjcgLyogSlNDYXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1M0I2MDFFQjIwMzRCOEM1MDA2QkU2NjcgLyogSlNDYXN0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTNDM0Q1RTUyMUVDRTc3MjAwODdG
REZDIC8qIGJhc2ljLmpzIGluIENvcHkgU3VwcG9ydCBTY3JpcHQgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTNDM0Q1RTQyMUVDRTZDRTAwODdGREZDIC8qIGJhc2ljLmpzICov
OyB9OworCQk1M0M0RjY2QjIxQjFBNDA5MDAyRkQwMDkgLyogSlNBUElHbG9iYWxPYmplY3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzQzRGNjZBMjFC
MUE0MDkwMDJGRDAwOSAvKiBKU0FQSUdsb2JhbE9iamVjdC5oICovOyB9OwogCQk1M0M2RkVFRjFF
OEFERkE5MDBCMTg0MjUgLyogV2FzbU9wY29kZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNDNkZFRUUxRThBREZBOTAwQjE4NDI1IC8qIFdh
c21PcGNvZGVPcmlnaW4uaCAqLzsgfTsKIAkJNTNDQTczMEExRUE1MzNEODAwNzYwNDlEIC8qIFdh
c21CQlFQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1M0NBNzMwODFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJCUVBsYW4uaCAqLzsgfTsKIAkJNTNE
NDQ0REMxREFGMDhBQjAwQjkyNzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNENDQ0REIxREFGMDhBQjAwQjky
Nzg0IC8qIEIzV2FzbUFkZHJlc3NWYWx1ZS5oICovOyB9OwpAQCAtMTA2NSw2ICsxMDY3LDggQEAK
IAkJNTNFOUUwQUMxRUFFODNERjAwRkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFkcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFOUUwQUExRUFFODNE
RTAwRkVFMjUxIC8qIFdhc21NYWNoaW5lVGhyZWFkcy5oICovOyB9OwogCQk1M0U5RTBBRjFFQUVD
NDU3MDBGRUUyNTEgLyogV2FzbVRpZXJVcENvdW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0U5RTBBRTFFQUVDNDU3MDBGRUUyNTEgLyogV2FzbVRp
ZXJVcENvdW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNTNFQUZFMkYyMDhERkFCNDAwN0Q1MjRCIC8qIHRlc3RhcGkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxRDRFMTkxRjU5Q0REMjAwRUM4
MzZDIC8qIHRlc3RhcGkuY3BwICovOyB9OworCQk1M0VFMDFCNjIxOEY2OTE2MDBBRDFGOEQgLyog
SlNTY3JpcHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzRUUwMUI1MjE4RjY5MEYwMEFEMUY4RCAvKiBKU1NjcmlwdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUzRUUwMUI4MjE4RjdFRkYwMEFEMUY4
RCAvKiBKU1NjcmlwdEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1M0VFMDFCNzIxOEY3RUZGMDBBRDFGOEQgLyogSlNTY3JpcHRJbnRlcm5h
bC5oICovOyB9OwogCQk1M0YxMUY0MTIwOTEzOEQ3MDBFNDExQTcgLyogSlNJbW11dGFibGVCdXR0
ZXJmbHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
RjExRjQwMjA5MTM4RDcwMEU0MTFBNyAvKiBKU0ltbXV0YWJsZUJ1dHRlcmZseS5oICovOyB9Owog
CQk1M0Y0MEU4NTFENThGOTc3MDA5OUExQjYgLyogV2FzbVNlY3Rpb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU4NDFENThGOTc3MDA5OUEx
QjYgLyogV2FzbVNlY3Rpb25zLmggKi87IH07CiAJCTUzRjQwRThCMUQ1OTAxQkIwMDk5QTFCNiAv
KiBXYXNtRnVuY3Rpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzRjQwRThBMUQ1OTAxQkIwMDk5QTFCNiAvKiBXYXNtRnVuY3Rpb25QYXJz
ZXIuaCAqLzsgfTsKQEAgLTIwMDMsOSArMjAwNywxMCBAQAogCQk1REJCMTUxMTEzMUQwQjEzMDA1
NkFEMzYgLyogQ29weSBTdXBwb3J0IFNjcmlwdCAqLyA9IHsKIAkJCWlzYSA9IFBCWENvcHlGaWxl
c0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAxMjsKLQkJCWRzdFBhdGggPSAiIjsK
KwkJCWRzdFBhdGggPSB0ZXN0YXBpU2NyaXB0czsKIAkJCWRzdFN1YmZvbGRlclNwZWMgPSAxNjsK
IAkJCWZpbGVzID0gKAorCQkJCTUzQzNENUU1MjFFQ0U3NzIwMDg3RkRGQyAvKiBiYXNpYy5qcyBp
biBDb3B5IFN1cHBvcnQgU2NyaXB0ICovLAogCQkJCUZFQ0I4QjJBMUQyNUNCNUEwMDZGMjQ2MyAv
KiB0ZXN0YXBpLWZ1bmN0aW9uLW92ZXJyaWRlcy5qcyBpbiBDb3B5IFN1cHBvcnQgU2NyaXB0ICov
LAogCQkJCTVEQkIxNTFCMTMxRDBCMzEwMDU2QUQzNiAvKiB0ZXN0YXBpLmpzIGluIENvcHkgU3Vw
cG9ydCBTY3JpcHQgKi8sCiAJCQkpOwpAQCAtMzU1Nyw2ICszNTYyLDkgQEAKIAkJNTNCMEJFMzUx
RTU2MUIwOTAwQThGQzI5IC8qIFByb3h5YWJsZUFjY2Vzc0Nhc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzQjBCRTM3MUU1NjFCMjQwMEE4RkMyOSAvKiBJbnRyaW5z
aWNHZXR0ZXJBY2Nlc3NDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1M0I2MDFFQjIwMzRCOEM1MDA2QkU2NjcgLyogSlNDYXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTQ2FzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0MzRDVFNDIxRUNF
NkNFMDA4N0ZERkMgLyogYmFzaWMuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7
IHBhdGggPSBiYXNpYy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNDNEY2NkEy
MUIxQTQwOTAwMkZEMDA5IC8qIEpTQVBJR2xvYmFsT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
QVBJR2xvYmFsT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzQzRGNjZD
MjFCMUE3Q0EwMDJGRDAwOSAvKiBKU0FQSUdsb2JhbE9iamVjdC5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IEpTQVBJR2xvYmFsT2JqZWN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1M0M2RkVFRTFFOEFERkE5MDBCMTg0MjUgLyogV2FzbU9wY29kZU9yaWdpbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtT3Bjb2RlT3JpZ2luLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUzQzZGRUYwMUU4QUZFMEMwMEIxODQyNSAvKiBXYXNtT3Bjb2Rl
T3JpZ2luLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21PcGNv
ZGVPcmlnaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0NBNzMwNzFFQTUz
M0Q4MDA3NjA0OUQgLyogV2FzbUJCUVBsYW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2FzbUJCUVBsYW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMzU2OSw2ICszNTc3LDkgQEAKIAkJNTNFOUUwQTkxRUFFODNERTAwRkVFMjUxIC8qIFdhc21N
YWNoaW5lVGhyZWFkcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
YXNtTWFjaGluZVRocmVhZHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0U5
RTBBQTFFQUU4M0RFMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21NYWNoaW5lVGhyZWFkcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1M0U5RTBBRTFFQUVDNDU3MDBGRUUyNTEgLyogV2FzbVRpZXJVcENv
dW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21UaWVyVXBDb3VudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0VFMDFCNDIxOEY2OTBFMDBBRDFGOEQg
LyogSlNTY3JpcHQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBK
U1NjcmlwdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNFRTAxQjUyMThGNjkw
RjAwQUQxRjhEIC8qIEpTU2NyaXB0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTU2NyaXB0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRUUwMUI3MjE4RjdF
RkYwMEFEMUY4RCAvKiBKU1NjcmlwdEludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTU2NyaXB0SW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTNGMTFGNDAyMDkxMzhENzAwRTQxMUE3IC8qIEpTSW1tdXRhYmxlQnV0dGVyZmx5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTSW1tdXRhYmxlQnV0dGVyZmx5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzRjExRjQyMjA5MTc0OTgwMEU0MTFBNyAvKiBKU0ltbXV0YWJsZUJ1dHRlcmZs
eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjI1NkUxMUI4N0UyODAwMEI0Qjc2OCAvKiBKU1R5
cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNTUzOCw2ICs1NTQ5LDcgQEAKIAkJMTQxMjExMDAwQTQ4NzcyNjAwNDgwMjU1
IC8qIHRlc3RzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJ
CQk1M0MzRDVFMzIxRUNFNjhFMDA4N0ZERkMgLyogdGVzdGFwaVNjcmlwdHMgKi8sCiAJCQkJRkVG
MDQwNTAxQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5jcHAgKi8sCiAJCQkJ
RkVGMDQwNTIxQUFFQzRFRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5oICovLAogCQkJ
CUMyOUVDQjAyMTgwNEQwRUQwMEQyQ0JCNCAvKiBDdXJyZW50VGhpc0luc2lkZUJsb2NrR2V0dGVy
VGVzdC5oICovLApAQCAtNTkzNyw2ICs1OTQ5LDggQEAKIAkJCQk1MzUyOUE0QjFDNDU3Qjc1MDAw
QjQ5QzYgLyogQVBJVXRpbHMuaCAqLywKIAkJCQkxQ0FBOEI0QTBEMzJDMzlBMDA0MUJDRkYgLyog
SmF2YVNjcmlwdC5oICovLAogCQkJCTFDQUE4QjRCMEQzMkMzOUEwMDQxQkNGRiAvKiBKYXZhU2Ny
aXB0Q29yZS5oICovLAorCQkJCTUzQzRGNjZBMjFCMUE0MDkwMDJGRDAwOSAvKiBKU0FQSUdsb2Jh
bE9iamVjdC5oICovLAorCQkJCTUzQzRGNjZDMjFCMUE3Q0EwMDJGRDAwOSAvKiBKU0FQSUdsb2Jh
bE9iamVjdC5tbSAqLywKIAkJCQlCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUgLyogSlNBUElWYWx1
ZVdyYXBwZXIuY3BwICovLAogCQkJCUJDMDg5NEQ2MEZBRkJBMkQwMDAwMTg2NSAvKiBKU0FQSVZh
bHVlV3JhcHBlci5oICovLAogCQkJCUMyQ0YzOUMwMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdy
YXBwZXJPYmplY3QuaCAqLywKQEAgLTU5NzgsNiArNTk5Miw5IEBACiAJCQkJQTU1MkMzN0QxQURE
QjhGRTAwMTM5NzI2IC8qIEpTUmVtb3RlSW5zcGVjdG9yLmNwcCAqLywKIAkJCQlBNTUyQzM3RTFB
RERCOEZFMDAxMzk3MjYgLyogSlNSZW1vdGVJbnNwZWN0b3IuaCAqLywKIAkJCQk5NUMxOEQzRTBD
OTBFN0VGMDBFNzJGNzMgLyogSlNSZXRhaW5QdHIuaCAqLywKKwkJCQk1M0VFMDFCNTIxOEY2OTBG
MDBBRDFGOEQgLyogSlNTY3JpcHQuaCAqLywKKwkJCQk1M0VFMDFCNDIxOEY2OTBFMDBBRDFGOEQg
LyogSlNTY3JpcHQubW0gKi8sCisJCQkJNTNFRTAxQjcyMThGN0VGRjAwQUQxRjhEIC8qIEpTU2Ny
aXB0SW50ZXJuYWwuaCAqLywKIAkJCQlBN0MwQzRBQTE2N0MwOENEMDAxNzAxMUQgLyogSlNTY3Jp
cHRSZWYuY3BwICovLAogCQkJCUE3QzBDNEFCMTY3QzA4Q0QwMDE3MDExRCAvKiBKU1NjcmlwdFJl
ZlByaXZhdGUuaCAqLywKIAkJCQkxNDgyQjc0QzBBNDMwMzI4MDA1MTdDRkMgLyogSlNTdHJpbmdS
ZWYuY3BwICovLApAQCAtNjI3OCw2ICs2Mjk1LDE1IEBACiAJCQlwYXRoID0gInVuaWZpZWQtc291
cmNlcyI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk1M0MzRDVFMzIxRUNF
NjhFMDA4N0ZERkMgLyogdGVzdGFwaVNjcmlwdHMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCTUzQzNENUU0MjFFQ0U2Q0UwMDg3RkRGQyAvKiBiYXNpYy5q
cyAqLywKKwkJCSk7CisJCQluYW1lID0gdGVzdGFwaVNjcmlwdHM7CisJCQlwYXRoID0gQVBJL3Rl
c3RzL3Rlc3RhcGlTY3JpcHRzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJ
NjUwRkRGOEQwOUQwRkNBNzAwNzY5RTU0IC8qIERlcml2ZWQgU291cmNlcyAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC05MTY2LDYgKzkxOTIsNyBAQAogCQkJ
CTBGNUVGOTFGMTY4NzhGN0QwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQzcxMkUzMTdDRDg3OTMwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREMwMTg0MTkxRDEwQzE4OTAwNTdCMDUz
IC8qIEpJVFdvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0M0RjY2QjIxQjFBNDA5MDAy
RkQwMDkgLyogSlNBUElHbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0MDQ4MDEz
MTAyMUExRDkwMDhFN0YwMSAvKiBKU0FQSVZhbHVlV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzJDRjM5QzIxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0MTcwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQXJyYXkuaCBpbiBI
ZWFkZXJzICovLApAQCAtOTI4Niw4ICs5MzEzLDEwIEBACiAJCQkJQkMxOEM0MjYwRTE2RjVDRDAw
QjM0NDYwIC8qIEpTUmV0YWluUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzQ2Mzg3MTFFNzBD
RjNEMDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0ODc0
QUU2MTVFQkRFNEEwMDJFMzU4NyAvKiBKU1Njb3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0VF
MDFCNjIxOEY2OTE2MDBBRDFGOEQgLyogSlNTY3JpcHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkw
NjQzMzdERDRCMDQwMkJBRjM0QTU5MiAvKiBKU1NjcmlwdEZldGNoZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUzMjAxQzFEMUY4RTgyMzYwMDc2QTAzMiAvKiBKU1NjcmlwdEZldGNoUGFyYW1ldGVy
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTNFRTAxQjgyMThGN0VGRjAwQUQxRjhEIC8qIEpTU2Ny
aXB0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QzBDNEFDMTY4MTAzMDIwMDE3MDEx
RCAvKiBKU1NjcmlwdFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTE5RDExMTU3
RjMzMkMwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjRGODI4ODFFMkZGREUwMDA3NTE4NEMgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9i
amVjdEhlYXBDZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzQ29jb2EudHh0CmluZGV4IGFjZjRmZGIwMTZkODg1NzA4YTQzMDA5MDQ4MDlhMjk1YzU1MGRh
OGUuLmFmNmY5ZWY1ZmMzM2UwMWYxZGVmNjczZjEyNjc5YjFkNzc3NzZiNGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0yMSw3ICsyMSw5IEBACiAvLyBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCiAvLyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKK0FQSS9KU0FQSUds
b2JhbE9iamVjdC5tbQogQVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbQorQVBJL0pTU2NyaXB0Lm1t
CiBBUEkvSlNDb250ZXh0Lm1tCiBBUEkvSlNNYW5hZ2VkVmFsdWUubW0KIEFQSS9KU1JlbW90ZUlu
c3BlY3Rvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcuaAppbmRleCBlMDIzMmNmNTc4NmFmMGY0NWQw
ZDEzMDhiNjc2NjgwNmNhZTRlMDBhLi5lMzY0MzkwZmRkMGY3ZDQ1NzdkY2UxZTQ2ODgzYjdlMTI3
ZWE1YzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvY29uZmlnLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2NvbmZpZy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNv
bT4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCkBAIC0yNCw2ICsyNCw3IEBACiAjZW5kaWYKIAogI2RlZmluZSBKU0Nf
QVBJX0FWQUlMQUJMRSguLi4pCisjZGVmaW5lIEpTQ19DTEFTU19BVkFJTEFCTEUoLi4uKSBKU19F
WFBPUlQKIC8vIFVzZSB6ZXJvIHNpbmNlIGl0IHdpbGwgYmUgbGVzcyB0aGFuIGFueSBwb3NzaWJs
ZSB2ZXJzaW9uIG51bWJlci4KICNkZWZpbmUgSlNDX01BQ19WRVJTSU9OX1RCQSAwCiAjZGVmaW5l
IEpTQ19JT1NfVkVSU0lPTl9UQkEgMApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Bvc3Rwcm9jZXNzLWhlYWRlcnMuc2ggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcG9zdHByb2Nl
c3MtaGVhZGVycy5zaAppbmRleCBmZDI4ODM2ZGM4YmRmMWU1ZjQ5MzlmNDI1OTlhMWMwN2Y0Zjli
ZmM5Li4xMDdhZTFiZGFlZDU5NzY2YjE3MGI4NDIxZDcwOGU0YzdiN2Y2NzA5IDEwMDc1NQotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcG9zdHByb2Nlc3MtaGVhZGVycy5zaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcG9zdHByb2Nlc3MtaGVhZGVycy5zaApAQCAtNzIsOCArNzIsOCBA
QCBmdW5jdGlvbiByZXdyaXRlX2hlYWRlcnMgKCkgewogICAgICAgICAgICAgLWUgcy9KU0NfSU9T
X1ZFUlNJT05fVEJBLyR7SU9TX1ZFUlNJT05fTlVNQkVSfS9nCiAgICAgICAgICAgICAtZSBzL0pT
Q19BUElfQVZBSUxBQkxFL0FQSV9BVkFJTEFCTEUvCiAgICAgICAgICAgICAtZSBzL0pTQ19BUElf
REVQUkVDQVRFRC9BUElfREVQUkVDQVRFRC8KLSAgICAgICAgICAgIC1lICJzL15KU0NfQ0xBU1Nf
QVZBSUxBQkxFL0pTQ19FWFRFUk4gQVBJX0FWQUlMQUJMRS8iCi0gICAgICAgICAgICAtZSAicy9e
SlNDX0NMQVNTX0RFUFJFQ0FURUQvSlNDX0VYVEVSTiBBUElfREVQUkVDQVRFRC8iCisgICAgICAg
ICAgICAtZSAicy9eSlNDX0NMQVNTX0FWQUlMQUJMRS9KU19FWFBPUlQgQVBJX0FWQUlMQUJMRS8i
CisgICAgICAgICAgICAtZSAicy9eSlNDX0NMQVNTX0RFUFJFQ0FURUQvSlNfRVhQT1JUIEFQSV9E
RVBSRUNBVEVELyIKICAgICAgICAgKQogICAgIGVsc2UKICAgICAgICAgU0VEX09QVElPTlMrPSgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcAppbmRleCBjOGQwOGVj
ZjAyOWI2YTE3YTVmODE3ZWZmNzhmMTAyNGY3OGQ3Y2EwLi4xMzgzYTU0YzZmNjk2YTZhZGMyZjQ1
ZTgxZDM3NjM4MTM0Y2E3YjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWxsRGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2Fs
bERhdGEuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDE5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzQsNiArMzQsMjQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK0pTVmFs
dWUgY2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSkKK3sKKyAgICByZXR1cm4gY2Fs
bChleGVjLCBmdW5jdGlvbk9iamVjdCwgZnVuY3Rpb25PYmplY3QsIGFyZ3MsIGVycm9yTWVzc2Fn
ZSk7Cit9CisKK0pTVmFsdWUgY2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZnVuY3Rpb25P
YmplY3QsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBjb25zdCBjaGFy
KiBlcnJvck1lc3NhZ2UpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsK
KyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKHZtLCBmdW5jdGlvbk9iamVjdCwg
Y2FsbERhdGEpOworICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkKKyAgICAgICAg
cmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOworCisgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBjYWxsKGV4ZWMsIGZ1bmN0aW9uT2JqZWN0LCBjYWxs
VHlwZSwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncykpOworfQorCiBKU1ZhbHVlIGNhbGwoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBDYWxsVHlwZSBjYWxsVHlwZSwg
Y29uc3QgQ2FsbERhdGEmIGNhbGxEYXRhLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhbGxEYXRhLmgKaW5kZXggY2JmOTE2NzYxYTViMTAzMGZlMTVjYjYyODVhZWFj
OTE5ZTA1YmRmYi4uMDhmNzlkZjRkNjc4MDEzNDQ0YTZhNjM5YWI0ZmZhNDlhZTcxYjVhMCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5oCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNiArNjQsMTAg
QEAgZW51bSBjbGFzcyBQcm9maWxpbmdSZWFzb24gewogICAgIE90aGVyCiB9OwogCisvLyBDb252
ZW5pZW5jZSB3cmFwcGVyIHNvIHlvdSBkb24ndCBuZWVkIHRvIGRlYWwgd2l0aCBDYWxsRGF0YSBh
bmQgQ2FsbFR5cGUgdW5sZXNzIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZW0uCitKU19FWFBPUlRf
UFJJVkFURSBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwg
Y29uc3QgQXJnTGlzdCYsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSk7CitKU19FWFBPUlRfUFJJ
VkFURSBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNW
YWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2Up
OworCiBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBm
dW5jdGlvbk9iamVjdCwgQ2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1ZSB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmKTsKIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgY2FsbChFeGVj
U3RhdGUqLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBDYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEm
LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYsIE5ha2VkUHRyPEV4Y2VwdGlvbj4m
IHJldHVybmVkRXhjZXB0aW9uKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tcGxldGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21wbGV0aW9uLmNwcAppbmRleCAxMTAyZjY2YzMyMjZkNzQ1Y2FlOGNmYmEyMGY2YWY0MzM3OWFi
ZWQ5Li4zZmI0YWI5ZDNhYTJlMzRiYmNkOWFkZmZhNzMwN2U3MDc2YTQ2MWFmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcApAQCAtMSw3ICsxLDcgQEAK
IC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDAzLTIwMTkgQXBwbGUgSW5jLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE2MSw2ICsx
NjEsMTYgQEAgc3RhdGljIEpTSW50ZXJuYWxQcm9taXNlKiByZWplY3RQcm9taXNlKEV4ZWNTdGF0
ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE8KICAgICByZXR1cm4gZGVmZXJyZWQtPnBy
b21pc2UoKTsKIH0KIAorSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRFdmFsdWF0ZU1vZHVsZShF
eGVjU3RhdGUqIGV4ZWMsIFN5bWJvbCogbW9kdWxlSWQsIEpTVmFsdWUgcGFyYW1ldGVycywgSlNW
YWx1ZSBzY3JpcHRGZXRjaGVyKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNM
b2NrSG9sZGVyIGxvY2sodm0pOworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmF0b21pY1N0cmluZ1Rh
YmxlKCkgPT0gVGhyZWFkOjpjdXJyZW50KCkuYXRvbWljU3RyaW5nVGFibGUoKSk7CisgICAgUkVM
RUFTRV9BU1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeU9uQ3VycmVudFRocmVhZCgpKTsKKworICAg
IHJldHVybiB2bS52bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpLT5tb2R1bGVMb2FkZXIoKS0+bG9h
ZEFuZEV2YWx1YXRlTW9kdWxlKGV4ZWMsIG1vZHVsZUlkLCBwYXJhbWV0ZXJzLCBzY3JpcHRGZXRj
aGVyKTsKK30KKwogSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRFdmFsdWF0ZU1vZHVsZShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbW9kdWxlTmFtZSwgSlNWYWx1ZSBwYXJhbWV0ZXJz
LCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaAppbmRleCBkZTQ0OGE0MDg0
NzFjNzQyZTZmMjI4OGYxYWE3MjRlMzNmODk3NDk3Li44MjdlNjFmM2M2MWQwY2I3YmJlNzVhNjEy
NzcxMjRmYjBkYTcyYWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21wbGV0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxl
dGlvbi5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBI
YXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRl
ciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTMzLDYgKzMzLDcgQEAgY2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBQ
YXJzZXJFcnJvcjsKIGNsYXNzIFNvdXJjZUNvZGU7CitjbGFzcyBTeW1ib2w7CiBjbGFzcyBWTTsK
IGNsYXNzIEpTSW50ZXJuYWxQcm9taXNlOwogCkBAIC01Nyw2ICs1OCw3IEBAIGlubGluZSBKU1Zh
bHVlIHByb2ZpbGVkRXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9maWxpbmdSZWFzb24gcmVh
c29uLCBjb25zdCBTCiBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGV2YWx1YXRlV2l0aFNjb3Bl
RXh0ZW5zaW9uKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU09iamVjdCogc2NvcGVF
eHRlbnNpb24sIE5ha2VkUHRyPEV4Y2VwdGlvbj4mIHJldHVybmVkRXhjZXB0aW9uKTsKIAogLy8g
TG9hZCB0aGUgbW9kdWxlIHNvdXJjZSBhbmQgZXZhbHVhdGUgaXQuCitKU19FWFBPUlRfUFJJVkFU
RSBKU0ludGVybmFsUHJvbWlzZSogbG9hZEFuZEV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0ZSosIFN5
bWJvbCogbW9kdWxlSWQsIEpTVmFsdWUgcGFyYW1ldGVycywgSlNWYWx1ZSBzY3JpcHRGZXRjaGVy
KTsKIEpTX0VYUE9SVF9QUklWQVRFIEpTSW50ZXJuYWxQcm9taXNlKiBsb2FkQW5kRXZhbHVhdGVN
b2R1bGUoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiBtb2R1bGVOYW1lLCBKU1ZhbHVlIHBhcmFt
ZXRlcnMsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcik7CiBKU19FWFBPUlRfUFJJVkFURSBKU0ludGVy
bmFsUHJvbWlzZSogbG9hZEFuZEV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJj
ZUNvZGUmLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2FzdC5oCmluZGV4IGEzNjlkNDg5NjYyNjJhYTFiNjI5ZjM0M2NiMjRmMWY3NDYzYWM1
ZjcuLjQ5NWM3ZTExZWZmZGY1NTdhOTIyYjQyNjcxN2U4ZTNkNGRiYWNkZTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2NSw0ICsxNjUsMTIgQEAgVG8ganNEeW5hbWlj
Q2FzdChWTSYgdm0sIEpTVmFsdWUgZnJvbSkKICAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxUbz4o
dm0sIGZyb20uYXNDZWxsKCkpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUbywgdHlwZW5hbWUg
RnJvbT4KK1RvIGpzU2VjdXJlQ2FzdChWTSYgdm0sIEZyb20gZnJvbSkKK3sKKyAgICBhdXRvKiBy
ZXN1bHQgPSBqc0R5bmFtaWNDYXN0PFRvPih2bSwgZnJvbSk7CisgICAgUkVMRUFTRV9BU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcAppbmRleCBlODZlODJjZmM2NjIxYzJhMzQ5MzA3OWJmOGE0MjllNjRmNTg1MTBkLi5lOWQy
ZWE1OGZiNDdmYjQzYjY2MWVkZWJhZGM0NGJlNmE5YjVkMTM4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggKGN3endhcmlj
aEB1d2F0ZXJsb28uY2EpCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02Miw2ICs2Miw3IEBACiAjaW5j
bHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFcnJvckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
RXJyb3JQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJGdW5j
dGlvbkNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNpbmNs
dWRlICJHZW5lcmF0b3JGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCkBAIC0xOTIsNyArMTkzLDcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLSAgICBzdGF0aWMgSlNWYWx1ZSBjcmVhdGVQcm94eVByb3Bl
cnR5KFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCkKK3N0YXRpYyBKU1ZhbHVlIGNyZWF0ZVByb3h5
UHJvcGVydHkoVk0mIHZtLCBKU09iamVjdCogb2JqZWN0KQogewogICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWwgPSBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihvYmplY3QpOwogICAgIHJldHVybiBQ
cm94eUNvbnN0cnVjdG9yOjpjcmVhdGUodm0sIFByb3h5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVj
dHVyZSh2bSwgZ2xvYmFsLCBnbG9iYWwtPmZ1bmN0aW9uUHJvdG90eXBlKCkpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359058</attachid>
            <date>2019-01-14 11:34:23 -0800</date>
            <delta_ts>2019-01-14 11:42:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191121-20190114113422.patch</filename>
            <type>text/plain</type>
            <size>74763</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5NTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
NDM2OGRjOGIyMDI0NGNlNTNjODQyZTYxNjVkOTk2ZjViYWVhNjEwLi45MTE4NGZlNGVlNjNiMjQy
Y2I1ZjI4ZjA0MDRmZjQ4MDY1NDhkNjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNTIgQEAKKzIwMTktMDEtMTQgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBoYXZlIGEgbW9kdWxlIGxvYWRlciBBUEkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTEyMQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
YWRkcyBhIG5ldyBkZWxlZ2F0ZSB0byBKU0NvbnRleHQgdGhhdCBpcyBjYWxsZWQgdG8gZmV0Y2gK
KyAgICAgICAgYW55IHJlc29sdmVkIG1vZHVsZS4gVGhlIHJlc29sdXRpb24gb2YgYSBtb2R1bGUg
aWRlbnRpZmllciBpcyBjb21wdXRlZAorICAgICAgICBhcyBpZiBpdCB3ZXJlIGEgVVJMIG9uIHRo
ZSB3ZWIgd2l0aCB0aGUgY2F2ZWF0IHRoYXQgaXQgbXVzdCBiZSBhIGZpbGUgVVJMLgorCisgICAg
ICAgIEEgbmV3IGNsYXNzIEpTU2NyaXB0IGhhcyBhbHNvIGJlZW4gYWRkZWQgdGhhdCBpcyBzaW1p
bGFyIHRvIEpTU2NyaXB0UmVmLgorICAgICAgICBSaWdodCBub3cgYWxsIEpTU2NyaXB0cyBhcmUg
Y29waWVkIGludG8gbWVtb3J5LiBJbiB0aGUgZnV0dXJlIHdlIHNob3VsZAorICAgICAgICBtbWFw
IHRoZSBwcm92aWRlZCBmaWxlIGludG8gbWVtb3J5IHNvIHRoZSBPUyBjYW4gZXZpY3QgaXQgdG8g
ZGlzayB1bmRlcgorICAgICAgICBwcmVzc3VyZS4gQWRkaXRpb25hbGx5LCB0aGUgQVBJIGRvZXMg
bm90IG1ha2UgdXNlIG9mIHRoZSBjb2RlIHNpZ25pbmcgcGF0aAorICAgICAgICBub3IgdGhlIGJ5
dGVjb2RlIGNhY2hpbmcgcGF0aCwgd2hpY2ggd2Ugd2lsbCBhZGQgaW4gc3Vic2VxdWVudCBwYXRj
aGVzLgorCisgICAgICAgIExhc3RseSwgYSBjb3VwbGUgb2YgbmV3IGNvbnZlbmllbmNlIG1ldGhv
ZHMgaGF2ZSBiZWVuIGFkZGVkLiBDIEFQSQorICAgICAgICBjb252ZXJzaW9uLCBjYW4gbm93IHRv
UmVmIGEgSlNWYWx1ZSB3aXRoIGp1c3QgYSB2bSByYXRoZXIgdGhhbgorICAgICAgICByZXF1aXJp
bmcgYW4gRXhlY1N0YXRlLiBTZWNvbmRseSwgdGhlcmUgaXMgbm93IGEgY2FsbCB3cmFwcGVyIHRo
YXQKKyAgICAgICAgZG9lcyBub3QgcmVxdWlyZSBDYWxsRGF0YSBhbmQgQ2FsbFR5cGUgc2luY2Ug
bWFueSBwbGFjZXMgZG9uJ3QKKyAgICAgICAgY2FyZSBhYm91dCB0aGlzLgorCisgICAgICAgICog
QVBJL0FQSUNhc3QuaDoKKyAgICAgICAgKHRvUmVmKToKKyAgICAgICAgKiBBUEkvSlNBUElHbG9i
YWxPYmplY3QuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTQVBJR2xvYmFsT2JqZWN0OjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpKU0FQSUdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKEpTQzo6SlNBUElHbG9iYWxPYmplY3Q6OkpTQVBJR2xvYmFsT2JqZWN0KToKKyAg
ICAgICAgKiBBUEkvSlNBUElHbG9iYWxPYmplY3QubW06IEFkZGVkLgorICAgICAgICAoSlNDOjpK
U0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyUmVzb2x2ZSk6CisgICAgICAgIChKU0M6OkpT
QVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJJbXBvcnRNb2R1bGUpOgorICAgICAgICAoSlND
OjpKU0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyRmV0Y2gpOgorICAgICAgICAoSlNDOjpK
U0FQSUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyQ3JlYXRlSW1wb3J0TWV0YVByb3BlcnRpZXMp
OgorICAgICAgICAqIEFQSS9KU0FQSVZhbHVlV3JhcHBlci5oOgorICAgICAgICAoSlNDOjpqc0FQ
SVZhbHVlV3JhcHBlcik6IERlbGV0ZWQuCisgICAgICAgICogQVBJL0pTQ29udGV4dC5oOgorICAg
ICAgICAqIEFQSS9KU0NvbnRleHQubW06CisgICAgICAgICgtW0pTQ29udGV4dCBtb2R1bGVMb2Fk
ZXJEZWxlZ2F0ZV0pOgorICAgICAgICAoLVtKU0NvbnRleHQgc2V0TW9kdWxlTG9hZGVyRGVsZWdh
dGU6XSk6CisgICAgICAgICogQVBJL0pTQ29udGV4dEludGVybmFsLmg6CisgICAgICAgICogQVBJ
L0pTQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAgKiBBUEkvSlNDb250ZXh0UmVmLmNwcDoKKyAg
ICAgICAgKEpTR2xvYmFsQ29udGV4dENyZWF0ZUluR3JvdXApOgorICAgICAgICAqIEFQSS9KU1Nj
cmlwdC5oOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvSlNTY3JpcHQubW06IEFkZGVkLgorICAgICAg
ICAoK1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNlOmluVmlydHVhbE1hY2hpbmU6XSk6CisgICAg
ICAgIChmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKToKKyAgICAgICAgKCtbSlNTY3JpcHQg
c2NyaXB0RnJvbVVURjhGaWxlOmluVmlydHVhbE1hY2hpbmU6d2l0aENvZGVTaWduaW5nOmFuZEJ5
dGVjb2RlQ2FjaGU6XSk6CisgICAgICAgIChnZXRKU1NjcmlwdFNvdXJjZUNvZGUpOgorICAgICAg
ICAqIEFQSS9KU1NjcmlwdEludGVybmFsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmguCisgICAgICAgICogQVBJL0pTVmFs
dWVJbnRlcm5hbC5oOgorICAgICAgICAqIEFQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaDoK
KyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5tbToKKyAgICAgICAgKCtbSlNDb250ZXh0RmV0
Y2hEZWxlZ2F0ZSBjb250ZXh0V2l0aEJsb2NrRm9yRmV0Y2g6XSk6CisgICAgICAgICgtW0pTQ29u
dGV4dEZldGNoRGVsZWdhdGUgY29udGV4dDpmZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6d2l0aFJl
c29sdmVIYW5kbGVyOmFuZFJlamVjdEhhbmRsZXI6XSk6CisgICAgICAgIChjaGVja01vZHVsZUNv
ZGVSYW4pOgorICAgICAgICAoY2hlY2tNb2R1bGVXYXNSZWplY3RlZCk6CisgICAgICAgICh0ZXN0
RmV0Y2gpOgorICAgICAgICAodGVzdEZldGNoV2l0aFR3b0N5Y2xlKToKKyAgICAgICAgKHRlc3RG
ZXRjaFdpdGhUaHJlZUN5Y2xlKToKKyAgICAgICAgKHRlc3RMb2FkZXJSZXNvbHZlc0Fic29sdXRl
U2NyaXB0VVJMKToKKyAgICAgICAgKHRlc3RMb2FkZXJSZWplY3RzTmlsU2NyaXB0VVJMKToKKyAg
ICAgICAgKHRlc3RMb2FkZXJSZWplY3RzRmFpbGVkRmV0Y2gpOgorICAgICAgICAodGVzdEltcG9y
dE1vZHVsZVR3aWNlKToKKyAgICAgICAgKCtbSlNDb250ZXh0RmlsZUxvYWRlckRlbGVnYXRlIG5l
d0NvbnRleHRdKToKKyAgICAgICAgKHJlc29sdmVQYXRoVG9TY3JpcHRzKToKKyAgICAgICAgKC1b
SlNDb250ZXh0RmlsZUxvYWRlckRlbGVnYXRlIGNvbnRleHQ6ZmV0Y2hNb2R1bGVGb3JJZGVudGlm
aWVyOndpdGhSZXNvbHZlSGFuZGxlcjphbmRSZWplY3RIYW5kbGVyOl0pOgorICAgICAgICAodGVz
dExvYWRCYXNpY0ZpbGUpOgorICAgICAgICAodGVzdE9iamVjdGl2ZUNBUEkpOgorICAgICAgICAq
IEFQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy9iYXNpYy5qczogQ29waWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaC4KKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJj
ZXNDb2NvYS50eHQ6CisgICAgICAgICogY29uZmlnLmg6CisgICAgICAgICogcnVudGltZS9DYWxs
RGF0YS5jcHA6CisgICAgICAgIChKU0M6OmNhbGwpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FsbERh
dGEuaDoKKyAgICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjps
b2FkQW5kRXZhbHVhdGVNb2R1bGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNDYXN0Lmg6CisgICAgICAgIChKU0M6OmpzU2VjdXJlQ2FzdCk6
CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmNy
ZWF0ZVByb3h5UHJvcGVydHkpOgorCisgICAgICAgICogQVBJL0FQSUNhc3QuaDoKKyAgICAgICAg
KHRvUmVmKToKKyAgICAgICAgKiBBUEkvSlNBUElHbG9iYWxPYmplY3QuaDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkpTQVBJR2xvYmFsT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0FQ
SUdsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNBUElHbG9i
YWxPYmplY3Q6OkpTQVBJR2xvYmFsT2JqZWN0KToKKyAgICAgICAgKiBBUEkvSlNBUElHbG9iYWxP
YmplY3QubW06IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FQSUdsb2JhbE9iamVjdDo6bW9kdWxl
TG9hZGVyUmVzb2x2ZSk6CisgICAgICAgIChKU0M6OkpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVM
b2FkZXJJbXBvcnRNb2R1bGUpOgorICAgICAgICAoSlNDOjpKU0FQSUdsb2JhbE9iamVjdDo6bW9k
dWxlTG9hZGVyRmV0Y2gpOgorICAgICAgICAoSlNDOjpKU0FQSUdsb2JhbE9iamVjdDo6bW9kdWxl
TG9hZGVyQ3JlYXRlSW1wb3J0TWV0YVByb3BlcnRpZXMpOgorICAgICAgICAqIEFQSS9KU0FQSVZh
bHVlV3JhcHBlci5oOgorICAgICAgICAoSlNDOjpqc0FQSVZhbHVlV3JhcHBlcik6IERlbGV0ZWQu
CisgICAgICAgICogQVBJL0pTQ29udGV4dC5oOgorICAgICAgICAqIEFQSS9KU0NvbnRleHQubW06
CisgICAgICAgICgtW0pTQ29udGV4dCBtb2R1bGVMb2FkZXJEZWxlZ2F0ZV0pOgorICAgICAgICAo
LVtKU0NvbnRleHQgc2V0TW9kdWxlTG9hZGVyRGVsZWdhdGU6XSk6CisgICAgICAgICogQVBJL0pT
Q29udGV4dEludGVybmFsLmg6CisgICAgICAgICogQVBJL0pTQ29udGV4dFByaXZhdGUuaDoKKyAg
ICAgICAgKiBBUEkvSlNDb250ZXh0UmVmLmNwcDoKKyAgICAgICAgKEpTR2xvYmFsQ29udGV4dENy
ZWF0ZUluR3JvdXApOgorICAgICAgICAqIEFQSS9KU1NjcmlwdC5oOiBBZGRlZC4KKyAgICAgICAg
KiBBUEkvSlNTY3JpcHQubW06IEFkZGVkLgorICAgICAgICAoK1tKU1NjcmlwdCBzY3JpcHRXaXRo
U291cmNlOmluVmlydHVhbE1hY2hpbmU6XSk6CisgICAgICAgIChmaWxsQnVmZmVyV2l0aENvbnRl
bnRzT2ZGaWxlKToKKyAgICAgICAgKCtbSlNTY3JpcHQgc2NyaXB0RnJvbVVURjhGaWxlOmluVmly
dHVhbE1hY2hpbmU6d2l0aENvZGVTaWduaW5nOmFuZEJ5dGVjb2RlQ2FjaGU6XSk6CisgICAgICAg
IChnZXRKU1NjcmlwdFNvdXJjZUNvZGUpOgorICAgICAgICAqIEFQSS9KU1NjcmlwdEludGVybmFs
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGlu
ZUludGVybmFsLmguCisgICAgICAgICogQVBJL0pTVmFsdWVJbnRlcm5hbC5oOgorICAgICAgICAq
IEFQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaDoKKyAgICAgICAgKiBBUEkvdGVzdHMvdGVz
dGFwaS5tbToKKyAgICAgICAgKCtbSlNDb250ZXh0RmV0Y2hEZWxlZ2F0ZSBjb250ZXh0V2l0aEJs
b2NrRm9yRmV0Y2g6XSk6CisgICAgICAgICgtW0pTQ29udGV4dEZldGNoRGVsZWdhdGUgY29udGV4
dDpmZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6d2l0aFJlc29sdmVIYW5kbGVyOmFuZFJlamVjdEhh
bmRsZXI6XSk6CisgICAgICAgIChjaGVja01vZHVsZUNvZGVSYW4pOgorICAgICAgICAoY2hlY2tN
b2R1bGVXYXNSZWplY3RlZCk6CisgICAgICAgICh0ZXN0RmV0Y2gpOgorICAgICAgICAodGVzdEZl
dGNoV2l0aFR3b0N5Y2xlKToKKyAgICAgICAgKHRlc3RGZXRjaFdpdGhUaHJlZUN5Y2xlKToKKyAg
ICAgICAgKHRlc3RMb2FkZXJSZXNvbHZlc0Fic29sdXRlU2NyaXB0VVJMKToKKyAgICAgICAgKHRl
c3RMb2FkZXJSZWplY3RzTmlsU2NyaXB0VVJMKToKKyAgICAgICAgKHRlc3RMb2FkZXJSZWplY3Rz
RmFpbGVkRmV0Y2gpOgorICAgICAgICAodGVzdEltcG9ydE1vZHVsZVR3aWNlKToKKyAgICAgICAg
KCtbSlNDb250ZXh0RmlsZUxvYWRlckRlbGVnYXRlIG5ld0NvbnRleHRdKToKKyAgICAgICAgKHJl
c29sdmVQYXRoVG9TY3JpcHRzKToKKyAgICAgICAgKC1bSlNDb250ZXh0RmlsZUxvYWRlckRlbGVn
YXRlIGNvbnRleHQ6ZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyOndpdGhSZXNvbHZlSGFuZGxlcjph
bmRSZWplY3RIYW5kbGVyOl0pOgorICAgICAgICAodGVzdExvYWRCYXNpY0ZpbGUpOgorICAgICAg
ICAodGVzdE9iamVjdGl2ZUNBUEkpOgorICAgICAgICAqIEFQSS90ZXN0cy90ZXN0YXBpU2NyaXB0
cy9iYXNpYy5qczogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1
YWxNYWNoaW5lSW50ZXJuYWwuaC4KKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJj
ZXNDb2NvYS50eHQ6CisgICAgICAgICogY29uZmlnLmg6CisgICAgICAgICogcG9zdHByb2Nlc3Mt
aGVhZGVycy5zaDoKKyAgICAgICAgKiBydW50aW1lL0NhbGxEYXRhLmNwcDoKKyAgICAgICAgKEpT
Qzo6Y2FsbCk6CisgICAgICAgICogcnVudGltZS9DYWxsRGF0YS5oOgorICAgICAgICAqIHJ1bnRp
bWUvQ29tcGxldGlvbi5jcHA6CisgICAgICAgIChKU0M6OmxvYWRBbmRFdmFsdWF0ZU1vZHVsZSk6
CisgICAgICAgICogcnVudGltZS9Db21wbGV0aW9uLmg6CisgICAgICAgICogcnVudGltZS9KU0Nh
c3QuaDoKKyAgICAgICAgKEpTQzo6anNTZWN1cmVDYXN0KToKKyAgICAgICAgKiBydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlUHJveHlQcm9wZXJ0eSk6CisK
IDIwMTgtMTItMzEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAg
ICAgICAgU291cmNlUHJvdmlkZXJzIHNob3VsZCB1c2UgYW4gYWN0dWFsIFVSTCBpbnN0ZWFkIG9m
IGEgc3RyaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhc3Qu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJQ2FzdC5oCmluZGV4IDNiNTU5MTE5ZTIy
YTFlNTY4ODA4ODcyN2Y5YmE3ZGNiMjgyNGFmNGQuLmFlOWJjMDdiZWI5M2FiMjg4MWRjNGE1YWQ1
NGU0OTljMWNhMzlkNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJ
Q2FzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvQVBJQ2FzdC5oCkBAIC0xMjgs
MjEgKzEyOCwyNiBAQCBpbmxpbmUgSlNDOjpWTSogdG9KUyhKU0NvbnRleHRHcm91cFJlZiBnKQog
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTQzo6Vk0qPihjb25zdF9jYXN0PE9wYXF1ZUpT
Q29udGV4dEdyb3VwKj4oZykpOwogfQogCi1pbmxpbmUgSlNWYWx1ZVJlZiB0b1JlZihKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHYpCitpbmxpbmUgSlNWYWx1ZVJlZiB0b1JlZihK
U0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHYpCiB7Ci0gICAgQVNTRVJUKGV4ZWMtPnZtKCkuY3Vy
cmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgQVNTRVJUKHZtLmN1cnJlbnRUaHJl
YWRJc0hvbGRpbmdBUElMb2NrKCkpOwogI2lmICFDUFUoQUREUkVTUzY0KQogICAgIGlmICghdikK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCF2LmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlUmVmPihKU0M6OmpzQVBJVmFsdWVXcmFwcGVyKGV4ZWMs
IHYpLmFzQ2VsbCgpKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZVJl
Zj4oSlNDOjpKU0FQSVZhbHVlV3JhcHBlcjo6Y3JlYXRlKHZtLCB2KSk7CiAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZVJlZj4odi5hc0NlbGwoKSk7CiAjZWxzZQotICAgIFVOVVNF
RF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0odm0pOwogICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8SlNWYWx1ZVJlZj4odik7CiAjZW5kaWYKIH0KIAoraW5saW5lIEpTVmFsdWVSZWYgdG9S
ZWYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2KQoreworICAgIHJldHVybiB0
b1JlZihleGVjLT52bSgpLCB2KTsKK30KKwogaW5saW5lIEpTT2JqZWN0UmVmIHRvUmVmKEpTQzo6
SlNPYmplY3QqIG8pCiB7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNPYmplY3RSZWY+
KG8pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9i
amVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjVkNWYxMmM3ZWJmMjg5OTQyZTY3ODYwN2YzN2JhYjljZTZjM2RkNjgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0
LmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0FQSUdsb2JhbE9iamVjdCA6IHB1YmxpYyBKU0ds
b2JhbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTR2xvYmFsT2JqZWN0Owor
CisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKyAgICBzdGF0aWMgY29uc3QgR2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUgc19nbG9iYWxPYmplY3RNZXRob2RUYWJsZTsKKworICAgIHN0YXRpYyBKU0FQ
SUdsb2JhbE9iamVjdCogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAg
eworICAgICAgICBhdXRvKiBvYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0FQ
SUdsb2JhbE9iamVjdD4odm0uaGVhcCkpIEpTQVBJR2xvYmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUp
OworICAgICAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIG9i
amVjdDsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIGF1dG8qIHJlc3VsdCA9IFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCAwLCBwcm90b3R5cGUsIFR5cGVJbmZvKEdsb2JhbE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRUcmFuc2l0
aW9uV2F0Y2hwb2ludElzTGlrZWx5VG9CZUZpcmVkKHRydWUpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIHN0YXRpYyBKU0ludGVybmFsUHJvbWlzZSogbW9kdWxlTG9hZGVy
SW1wb3J0TW9kdWxlKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0YXRlKiwgSlNNb2R1bGVMb2FkZXIq
LCBKU1N0cmluZyogbW9kdWxlTmFtZVZhbHVlLCBKU1ZhbHVlIHBhcmFtZXRlcnMsIGNvbnN0IFNv
dXJjZU9yaWdpbiYpOworICAgIHN0YXRpYyBJZGVudGlmaWVyIG1vZHVsZUxvYWRlclJlc29sdmUo
SlNHbG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUga2V5
VmFsdWUsIEpTVmFsdWUgcmVmZXJyZXJWYWx1ZSwgSlNWYWx1ZSk7CisgICAgc3RhdGljIEpTSW50
ZXJuYWxQcm9taXNlKiBtb2R1bGVMb2FkZXJGZXRjaChKU0dsb2JhbE9iamVjdCosIEV4ZWNTdGF0
ZSosIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSwgSlNWYWx1ZSwgSlNWYWx1ZSk7CisgICAgc3Rh
dGljIEpTT2JqZWN0KiBtb2R1bGVMb2FkZXJDcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcyhKU0ds
b2JhbE9iamVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSwgSlNNb2R1
bGVSZWNvcmQqLCBKU1ZhbHVlKTsKKworcHJpdmF0ZToKKyAgICBKU0FQSUdsb2JhbE9iamVjdChW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVy
ZSwgJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCisgICAgeyB9Cit9OworCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lm1tIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5tbQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
ZjljMGEzYTllMjViY2Y0MTI3YTU5NjNmMmE1MDNkNDI3ZTQ3ZTQyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5tbQpAQCAtMCww
ICsxLDIzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkpTQVBJR2xvYmFsT2JqZWN0LmgiCisKKyNp
bXBvcnQgIkFQSUNhc3QuaCIKKyNpbXBvcnQgIkNhdGNoU2NvcGUuaCIKKyNpbXBvcnQgIkNvbXBs
ZXRpb24uaCIKKyNpbXBvcnQgIkVycm9yLmgiCisjaW1wb3J0ICJFeGNlcHRpb24uaCIKKyNpbXBv
cnQgIkpTQ29udGV4dEludGVybmFsLmgiCisjaW1wb3J0ICJKU0ludGVybmFsUHJvbWlzZURlZmVy
cmVkLmgiCisjaW1wb3J0ICJKU05hdGl2ZVN0ZEZ1bmN0aW9uLmgiCisjaW1wb3J0ICJKU1Njcmlw
dEludGVybmFsLmgiCisjaW1wb3J0ICJKU1NvdXJjZUNvZGUuaCIKKyNpbXBvcnQgIkpTVmFsdWVJ
bnRlcm5hbC5oIgorI2ltcG9ydCAiSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgiCisjaW1wb3J0
ICJKYXZhU2NyaXB0Q29yZS5oIgorI2ltcG9ydCAiT2JqZWN0Q29uc3RydWN0b3IuaCIKKyNpbXBv
cnQgIlNvdXJjZU9yaWdpbi5oIgorCisjaW1wb3J0IDx3dGYvVVJMLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKworY29uc3QgQ2xhc3NJbmZvIEpTQVBJ
R2xvYmFsT2JqZWN0OjpzX2luZm8gPSB7ICJHbG9iYWxPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQVBJR2xvYmFsT2JqZWN0KSB9
OworCitjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSBKU0FQSUdsb2JhbE9iamVjdDo6c19n
bG9iYWxPYmplY3RNZXRob2RUYWJsZSA9IHsKKyAgICAmc3VwcG9ydHNSaWNoU291cmNlSW5mbywK
KyAgICAmc2hvdWxkSW50ZXJydXB0U2NyaXB0LAorICAgICZqYXZhU2NyaXB0UnVudGltZUZsYWdz
LAorICAgIG51bGxwdHIsIC8vIHF1ZXVlVGFza1RvRXZlbnRMb29wCisgICAgJnNob3VsZEludGVy
cnVwdFNjcmlwdEJlZm9yZVRpbWVvdXQsCisgICAgJm1vZHVsZUxvYWRlckltcG9ydE1vZHVsZSwg
Ly8gbW9kdWxlTG9hZGVySW1wb3J0TW9kdWxlCisgICAgJm1vZHVsZUxvYWRlclJlc29sdmUsIC8v
IG1vZHVsZUxvYWRlclJlc29sdmUKKyAgICAmbW9kdWxlTG9hZGVyRmV0Y2gsIC8vIG1vZHVsZUxv
YWRlckZldGNoCisgICAgJm1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzLCAv
LyBtb2R1bGVMb2FkZXJDcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcworICAgIG51bGxwdHIsIC8v
IG1vZHVsZUxvYWRlckV2YWx1YXRlCisgICAgbnVsbHB0ciwgLy8gcHJvbWlzZVJlamVjdGlvblRy
YWNrZXIKKyAgICBudWxscHRyLCAvLyBkZWZhdWx0TGFuZ3VhZ2UKKyAgICBudWxscHRyLCAvLyBj
b21waWxlU3RyZWFtaW5nCisgICAgbnVsbHB0ciwgLy8gaW5zdGFudGlhdGVTdHJlYW1pbmcKK307
CisKK0lkZW50aWZpZXIgSlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU01vZHVsZUxvYWRl
ciosIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHJlZmVycmVyLCBKU1ZhbHVlKQoreworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIEFTU0VSVF9VTlVTRUQoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QgPT0gZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKKyAgICBBU1NFUlQoa2V5LmlzU3RyaW5nKCkgfHwga2V5
LmlzU3ltYm9sKCkpOworICAgIFN0cmluZyBuYW1lID0gIGtleS50b1dURlN0cmluZyhleGVjKTsK
KworICAgIFVSTCByZWZlcnJlclVSTChVUkwoKSwganNDYXN0PEpTU3RyaW5nKj4ocmVmZXJyZXIp
LT50cnlHZXRWYWx1ZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWZlcnJlclVSTC5pc1ZhbGlk
KCkpOworCisgICAgVVJMIHVybCA9IFVSTChyZWZlcnJlclVSTCwgbmFtZSk7CisgICAgaWYgKHVy
bC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMs
IHVybCk7CisKKyAgICB0aHJvd1ZNRXJyb3IoZXhlYywgc2NvcGUsICJDb3VsZCBub3QgZm9ybSB2
YWxpZCBVUkwgZnJvbSBpZGVudGlmaWVyIGFuZCBiYXNlIl9zKTsKKyAgICByZXR1cm4geyB9Owor
fQorCitKU0ludGVybmFsUHJvbWlzZSogSlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlcklt
cG9ydE1vZHVsZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IEpTTW9kdWxlTG9hZGVyKiwgSlNTdHJpbmcqIHNwZWNpZmllclZhbHVlLCBKU1ZhbHVlLCBjb25z
dCBTb3VyY2VPcmlnaW4mIHNvdXJjZU9yaWdpbikKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAg
IGF1dG8gcmVqZWN0ID0gWyZdIChKU1ZhbHVlIGV4Y2VwdGlvbikgLT4gSlNJbnRlcm5hbFByb21p
c2UqIHsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgYXV0byogcHJv
bWlzZSA9IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OnRyeUNyZWF0ZShleGVjLCBnbG9iYWxP
YmplY3QpOworICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4g
cHJvbWlzZS0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgfTsKKworICAgIGF1dG8gaW1w
b3J0ID0gWyZdIChVUkwmIHVybCkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IGltcG9ydE1vZHVs
ZShleGVjLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgdXJsKSwganNVbmRlZmluZWQoKSwg
anNVbmRlZmluZWQoKSk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9OworCisgICAgYXV0byBzcGVjaWZpZXIgPSBzcGVjaWZpZXJW
YWx1ZS0+dmFsdWUoZXhlYyk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkg
eworICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgICAg
ICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gcmVqZWN0KGV4Y2VwdGlv
bik7CisgICAgfQorCisgICAgVVJMIGFic29sdXRlVVJMKFVSTCgpLCBzcGVjaWZpZXIpOworICAg
IGlmIChhYnNvbHV0ZVVSTC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBpbXBvcnQoYWJzb2x1
dGVVUkwpOworCisgICAgaWYgKCFzcGVjaWZpZXIuc3RhcnRzV2l0aCgnLycpICYmICFzcGVjaWZp
ZXIuc3RhcnRzV2l0aCgiLi8iKSAmJiAhc3BlY2lmaWVyLnN0YXJ0c1dpdGgoIi4uLyIpKQorICAg
ICAgICByZXR1cm4gcmVqZWN0KGNyZWF0ZUVycm9yKGV4ZWMsICJNb2R1bGUgc3BlY2lmaWVyIGRv
ZXMgbm90IHN0YXJ0IHdpdGggXCIvXCIsIFwiLi9cIiwgb3IgXCIuLi9cIi4iX3MpKTsKKworICAg
IGlmIChzcGVjaWZpZXIuc3RhcnRzV2l0aCgnLycpKSB7CisgICAgICAgIGFic29sdXRlVVJMID0g
VVJMKFVSTCh7IH0sICJmaWxlOi8vIiksIHNwZWNpZmllcik7CisgICAgICAgIGlmIChhYnNvbHV0
ZVVSTC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gaW1wb3J0KGFic29sdXRlVVJMKTsK
KyAgICB9CisKKyAgICBhdXRvIG5vQmFzZUVycm9yTWVzc2FnZSA9ICJDb3VsZCBub3QgZGV0ZXJt
aW5lIHRoZSBiYXNlIFVSTCBmb3IgbG9hZGluZy4iX3M7CisgICAgaWYgKHNvdXJjZU9yaWdpbi5p
c051bGwoKSkKKyAgICAgICAgcmV0dXJuIHJlamVjdChjcmVhdGVFcnJvcihleGVjLCBub0Jhc2VF
cnJvck1lc3NhZ2UpKTsKKworICAgIGF1dG8gcmVmZXJyZXIgPSBzb3VyY2VPcmlnaW4uc3RyaW5n
KCk7CisgICAgVVJMIGJhc2VVUkwoVVJMKCksIHJlZmVycmVyKTsKKyAgICBpZiAoIWJhc2VVUkwu
aXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gcmVqZWN0KGNyZWF0ZUVycm9yKGV4ZWMsIG5vQmFz
ZUVycm9yTWVzc2FnZSkpOworCisgICAgVVJMIHVybChiYXNlVVJMLCBzcGVjaWZpZXIpOworICAg
IGlmICghdXJsLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHJlamVjdChjcmVhdGVFcnJvcihl
eGVjLCAiY291bGQgbm90IGRldGVybWluZSBhIHZhbGlkIFVSTCBmb3IgbW9kdWxlIHNwZWNpZmll
ciJfcykpOworCisgICAgcmV0dXJuIGltcG9ydCh1cmwpOworfQorCitKU0ludGVybmFsUHJvbWlz
ZSogSlNBUElHbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckZldGNoKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlIGtl
eSwgSlNWYWx1ZSwgSlNWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgQVNTRVJU
KGdsb2JhbE9iamVjdCA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworICAgIEpTQ29u
dGV4dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY29udGV4dFdpdGhKU0dsb2JhbENvbnRleHRSZWY6
dG9HbG9iYWxSZWYoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpXTsKKworICAgIEpTSW50ZXJu
YWxQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0gSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6
dHJ5Q3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CisKKyAgICBJZGVudGlmaWVyIG1vZHVsZUtleSA9IGtleS50b1Byb3Bl
cnR5S2V5KGV4ZWMpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAg
ICAgICAgSlNWYWx1ZSBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgc2Nv
cGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5yZWplY3QoZXhl
YywgZXhjZXB0aW9uKTsKKyAgICB9CisKKyAgICBpZiAoVU5MSUtFTFkoIVtjb250ZXh0IG1vZHVs
ZUxvYWRlckRlbGVnYXRlXSkpCisgICAgICAgIHJldHVybiBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMs
IGNyZWF0ZUVycm9yKGV4ZWMsICJObyBtb2R1bGUgbG9hZGVyIHByb3ZpZGVkLiIpKTsKKworICAg
IGF1dG8gZGVmZXJyZWRQcm9taXNlID0gU3Ryb25nPEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ+
KHZtLCBkZWZlcnJlZCk7CisgICAgYXV0byBzdHJvbmdLZXkgPSBTdHJvbmc8SlNTdHJpbmc+KHZt
LCBqc1NlY3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwga2V5KSk7CisgICAgYXV0byogcmVzb2x2ZSA9
IEpTTmF0aXZlU3RkRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAxLCAicmVzb2x2
ZSIsIFs9XSAoRXhlY1N0YXRlKiBleGVjKSB7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgICAgIC8vIFRoaXMgY2FwdHVyZXMgdGhlIGdsb2JhbE9iamVjdCBidXQgdGhhdCdzIG9r
IGJlY2F1c2Ugb3VyIHN0cnVjdHVyZSBrZWVwcyBpdCBhbGl2ZSBhbnl3YXkuCisgICAgICAgIEpT
Q29udGV4dCAqY29udGV4dCA9IFtKU0NvbnRleHQgY29udGV4dFdpdGhKU0dsb2JhbENvbnRleHRS
ZWY6dG9HbG9iYWxSZWYoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpXTsKKyAgICAgICAgaWQg
c2NyaXB0ID0gdmFsdWVUb09iamVjdChjb250ZXh0LCB0b1JlZihleGVjLCBleGVjLT5hcmd1bWVu
dCgwKSkpOworCisgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgICAgIGlm
IChVTkxJS0VMWSghW3NjcmlwdCBpc0tpbmRPZkNsYXNzOltKU1NjcmlwdCBjbGFzc11dKSkgewor
ICAgICAgICAgICAgYXJncy5hcHBlbmQoY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJGaXJzdCBhcmd1
bWVudCBvZiByZXNvbHV0aW9uIGNhbGxiYWNrIGlzIG5vdCBhIEpTU2NyaXB0IikpOworICAgICAg
ICAgICAgY2FsbChleGVjLCBkZWZlcnJlZFByb21pc2UtPkpTUHJvbWlzZURlZmVycmVkOjpyZWpl
Y3QoKSwgYXJncywgIlRoaXMgc2hvdWxkIG5ldmVyIGJlIHNlZW4uLi4iKTsKKyAgICAgICAgICAg
IHJldHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0
IFN0cmluZyYgc291cmNlID0gZ2V0SlNTY3JpcHRTb3VyY2VDb2RlKHN0YXRpY19jYXN0PEpTU2Ny
aXB0ICo+KHNjcmlwdCkpOworICAgICAgICBhcmdzLmFwcGVuZChKU1NvdXJjZUNvZGU6OmNyZWF0
ZSh2bSwgbWFrZVNvdXJjZShzb3VyY2UsIFNvdXJjZU9yaWdpbihtb2R1bGVLZXkuc3RyaW5nKCkp
LCBVUkwoeyB9LCBtb2R1bGVLZXkuc3RyaW5nKCkpLCBUZXh0UG9zaXRpb24oKSwgSlNDOjpTb3Vy
Y2VQcm92aWRlclNvdXJjZVR5cGU6Ok1vZHVsZSkpKTsKKyAgICAgICAgY2FsbChleGVjLCBkZWZl
cnJlZFByb21pc2UtPkpTUHJvbWlzZURlZmVycmVkOjpyZXNvbHZlKCksIGFyZ3MsICJUaGlzIHNo
b3VsZCBuZXZlciBiZSBzZWVuLi4uIik7CisgICAgICAgIHJldHVybiBlbmNvZGVkSlNVbmRlZmlu
ZWQoKTsKKyAgICB9KTsKKworICAgIGF1dG8qIHJlamVjdCA9IEpTTmF0aXZlU3RkRnVuY3Rpb246
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAxLCAicmVqZWN0IiwgWz1dIChFeGVjU3RhdGUqIGV4
ZWMpIHsKKyAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICAgICAgYXJncy5h
cHBlbmQoZXhlYy0+YXJndW1lbnQoMCkpOworCisgICAgICAgIGNhbGwoZXhlYywgZGVmZXJyZWRQ
cm9taXNlLT5KU1Byb21pc2VEZWZlcnJlZDo6cmVqZWN0KCksIGFyZ3MsICJUaGlzIHNob3VsZCBu
ZXZlciBiZSBzZWVuLi4uIik7CisgICAgICAgIHJldHVybiBlbmNvZGVkSlNVbmRlZmluZWQoKTsK
KyAgICB9KTsKKworICAgIFtbY29udGV4dCBtb2R1bGVMb2FkZXJEZWxlZ2F0ZV0gY29udGV4dDpj
b250ZXh0IGZldGNoTW9kdWxlRm9ySWRlbnRpZmllcjpbOjpKU1ZhbHVlIHZhbHVlV2l0aEpTVmFs
dWVSZWY6dG9SZWYoZXhlYywga2V5KSBpbkNvbnRleHQ6Y29udGV4dF0gd2l0aFJlc29sdmVIYW5k
bGVyOls6OkpTVmFsdWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjp0b1JlZihleGVjLCByZXNvbHZlKSBp
bkNvbnRleHQ6Y29udGV4dF0gYW5kUmVqZWN0SGFuZGxlcjpbOjpKU1ZhbHVlIHZhbHVlV2l0aEpT
VmFsdWVSZWY6dG9SZWYoZXhlYywgcmVqZWN0KSBpbkNvbnRleHQ6Y29udGV4dF1dOworICAgIGlm
IChjb250ZXh0LmV4Y2VwdGlvbikgeworICAgICAgICBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIHRv
SlMoZXhlYywgW2NvbnRleHQuZXhjZXB0aW9uIEpTVmFsdWVSZWZdKSk7CisgICAgICAgIGNvbnRl
eHQuZXhjZXB0aW9uID0gbmlsOworICAgIH0KKyAgICByZXR1cm4gZGVmZXJyZWQtPnByb21pc2Uo
KTsKK30KKworSlNPYmplY3QqIEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJDcmVhdGVJ
bXBvcnRNZXRhUHJvcGVydGllcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFeGVjU3Rh
dGUqIGV4ZWMsIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSBrZXksIEpTTW9kdWxlUmVjb3JkKiwg
SlNWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTT2JqZWN0KiBtZXRhUHJvcGVydGllcyA9
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIGdsb2JhbE9iamVjdC0+bnVsbFByb3RvdHlwZU9i
amVjdFN0cnVjdHVyZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRy
KTsKKworICAgIG1ldGFQcm9wZXJ0aWVzLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCAiZmlsZW5hbWUiKSwga2V5KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKKworICAgIHJldHVybiBtZXRhUHJvcGVydGllczsKK30KKworI2Vsc2UK
K2NvbnN0IENsYXNzSW5mbyBKU0FQSUdsb2JhbE9iamVjdDo6c19pbmZvID0geyAiR2xvYmFsT2Jq
ZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU0FQSUdsb2JhbE9iamVjdCkgfTsKKworY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUg
SlNBUElHbG9iYWxPYmplY3Q6OnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPSB7CisgICAgJnN1
cHBvcnRzUmljaFNvdXJjZUluZm8sCisgICAgJnNob3VsZEludGVycnVwdFNjcmlwdCwKKyAgICAm
amF2YVNjcmlwdFJ1bnRpbWVGbGFncywKKyAgICBudWxscHRyLCAvLyBxdWV1ZVRhc2tUb0V2ZW50
TG9vcAorICAgICZzaG91bGRJbnRlcnJ1cHRTY3JpcHRCZWZvcmVUaW1lb3V0LAorICAgIG51bGxw
dHIsIC8vIG1vZHVsZUxvYWRlckltcG9ydE1vZHVsZQorICAgIG51bGxwdHIsIC8vIG1vZHVsZUxv
YWRlclJlc29sdmUKKyAgICBudWxscHRyLCAvLyBtb2R1bGVMb2FkZXJGZXRjaAorICAgIG51bGxw
dHIsIC8vIG1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzCisgICAgbnVsbHB0
ciwgLy8gbW9kdWxlTG9hZGVyRXZhbHVhdGUKKyAgICBudWxscHRyLCAvLyBwcm9taXNlUmVqZWN0
aW9uVHJhY2tlcgorICAgIG51bGxwdHIsIC8vIGRlZmF1bHRMYW5ndWFnZQorICAgIG51bGxwdHIs
IC8vIGNvbXBpbGVTdHJlYW1pbmcKKyAgICBudWxscHRyLCAvLyBpbnN0YW50aWF0ZVN0cmVhbWlu
ZworfTsKKyNlbmRpZiAvLyBKU0NfT0JKQ19BUElfRU5BQkxFRAorCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJVmFsdWVXcmFwcGVyLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQVBJL0pTQVBJVmFsdWVXcmFwcGVyLmgKaW5kZXggMDZiMzA3MTAzZWVhMjM0
MDU0N2IwMzAyOWNlM2ZiMGU2ZDc2NzYzMy4uYWEyNjA4MmZmMzViYWQ5MDljMWJiM2E2NDU5MmIw
ZTFlMTg4NzkwOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSVZh
bHVlV3JhcHBlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElWYWx1ZVdy
YXBwZXIuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEg
SGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0
ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIw
MDUsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC00NCwxMCArNDQsOSBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJF
X0VYUE9SVF9JTkZPOwogCi0gICAgc3RhdGljIEpTQVBJVmFsdWVXcmFwcGVyKiBjcmVhdGUoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKSAKKyAgICBzdGF0aWMgSlNBUElWYWx1ZVdyYXBw
ZXIqIGNyZWF0ZShWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwotICAgICAgICBKU0FQSVZhbHVlV3JhcHBlciogd3JhcHBlciA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQVBJVmFsdWVXcmFwcGVyPih2bS5oZWFwKSkgSlNBUElW
YWx1ZVdyYXBwZXIoZXhlYyk7CisgICAgICAgIEpTQVBJVmFsdWVXcmFwcGVyKiB3cmFwcGVyID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBUElWYWx1ZVdyYXBwZXI+KHZtLmhlYXApKSBK
U0FQSVZhbHVlV3JhcHBlcih2bSk7CiAgICAgICAgIHdyYXBwZXItPmZpbmlzaENyZWF0aW9uKHZt
LCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIH0KQEAgLTYxLDE3ICs2MCwx
MiBAQCBwcm90ZWN0ZWQ6CiAgICAgfQogCiBwcml2YXRlOgotICAgIEpTQVBJVmFsdWVXcmFwcGVy
KEV4ZWNTdGF0ZSogZXhlYykKLSAgICAgICAgOiBKU0NlbGwoZXhlYy0+dm0oKSwgZXhlYy0+dm0o
KS5hcGlXcmFwcGVyU3RydWN0dXJlLmdldCgpKQorICAgIEpTQVBJVmFsdWVXcmFwcGVyKFZNJiB2
bSkKKyAgICAgICAgOiBKU0NlbGwodm0sIHZtLmFwaVdyYXBwZXJTdHJ1Y3R1cmUuZ2V0KCkpCiAg
ICAgewogICAgIH0KIAogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3ZhbHVlOwogfTsKIAot
aW5saW5lIEpTVmFsdWUganNBUElWYWx1ZVdyYXBwZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHVlKQotewotICAgIHJldHVybiBKU0FQSVZhbHVlV3JhcHBlcjo6Y3JlYXRlKGV4ZWMsIHZh
bHVlKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ29udGV4dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0Nv
bnRleHQuaAppbmRleCA4OWM4N2Y5ZTJlMWZmMWIxNzFiMWViYmE4YzQ1MjE1OWY0NGY0NzVhLi4x
NzkwZTU5N2I0OGE5YjgzYTk0NWY5MzJiMmVhNGViYjM2M2VmY2ZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNDb250ZXh0LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzEsNyBAQAogCiAjaWYgSlNDX09CSkNfQVBJX0VO
QUJMRUQKIAotQGNsYXNzIEpTVmlydHVhbE1hY2hpbmUsIEpTVmFsdWU7CitAY2xhc3MgSlNTY3Jp
cHQsIEpTVmlydHVhbE1hY2hpbmUsIEpTVmFsdWUsIEpTQ29udGV4dDsKIAogLyohCiBAaW50ZXJm
YWNlCkBAIC0zOSw3ICszOSw3IEBACiAgSmF2YVNjcmlwdCBleGVjdXRpb24gdGFrZXMgcGxhY2Ug
d2l0aGluIGEgY29udGV4dCwgYW5kIGFsbCBKYXZhU2NyaXB0IHZhbHVlcwogIGFyZSB0aWVkIHRv
IGEgY29udGV4dC4KICovCi1OU19DTEFTU19BVkFJTEFCTEUoMTBfOSwgN18wKQorSlNDX0NMQVNT
X0FWQUlMQUJMRShtYWNvc3goMTAuOSksIGlvcyg3LjApKQogQGludGVyZmFjZSBKU0NvbnRleHQg
OiBOU09iamVjdAogCiAvKiEKQEAgLTE3Nyw3ICsxNzcsNiBAQCBOU19DTEFTU19BVkFJTEFCTEUo
MTBfOSwgN18wKQogQGRpc2N1c3Npb24gTmFtZSBvZiB0aGUgSlNDb250ZXh0LiBFeHBvc2VkIHdo
ZW4gcmVtb3RlIGRlYnVnZ2luZyB0aGUgY29udGV4dC4KICovCiBAcHJvcGVydHkgKGNvcHkpIE5T
U3RyaW5nICpuYW1lIEpTQ19BUElfQVZBSUxBQkxFKG1hY29zeCgxMC4xMCksIGlvcyg4LjApKTsK
LQogQGVuZAogCiAvKiEKQEAgLTIzMSw2ICsyMzAsNyBAQCBOU19DTEFTU19BVkFJTEFCTEUoMTBf
OSwgN18wKQogQHJlc3VsdCBUaGUgQyBBUEkgZXF1aXZhbGVudCBvZiB0aGlzIEpTQ29udGV4dC4K
ICovCiBAcHJvcGVydHkgKHJlYWRvbmx5KSBKU0dsb2JhbENvbnRleHRSZWYgSlNHbG9iYWxDb250
ZXh0UmVmOworCiBAZW5kCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NvbnRleHQubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4
dC5tbQppbmRleCAyNzU2NmY0MWI5N2UxYjM5YmRkZTliNDhhYWE1NTlmMTRjYjczOWVhLi4zYzc3
NmQ0ZDkwMGVlMTczMzM2MmFjMjlmNjI0ZjQ0NGQ1NDVlN2I0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ29udGV4dC5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNiwxMSArMjYsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
IAogI2ltcG9ydCAiQVBJQ2FzdC5oIgorI2ltcG9ydCAiQ29tcGxldGlvbi5oIgogI2ltcG9ydCAi
SlNDSW5saW5lcy5oIgogI2ltcG9ydCAiSlNDb250ZXh0SW50ZXJuYWwuaCIKICNpbXBvcnQgIkpT
Q29udGV4dFByaXZhdGUuaCIKICNpbXBvcnQgIkpTQ29udGV4dFJlZkludGVybmFsLmgiCiAjaW1w
b3J0ICJKU0dsb2JhbE9iamVjdC5oIgorI2ltcG9ydCAiSlNJbnRlcm5hbFByb21pc2UuaCIKKyNp
bXBvcnQgIkpTTW9kdWxlTG9hZGVyLmgiCisjaW1wb3J0ICJKU1NjcmlwdEludGVybmFsLmgiCiAj
aW1wb3J0ICJKU1ZhbHVlSW50ZXJuYWwuaCIKICNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmVJbnRl
cm5hbC5oIgogI2ltcG9ydCAiSlNXcmFwcGVyTWFwLmgiCkBAIC0zOCwxMiArNDIsMTUgQEAKICNp
bXBvcnQgIk9iamNSdW50aW1lRXh0cmFzLmgiCiAjaW1wb3J0ICJTdHJvbmdJbmxpbmVzLmgiCiAK
KyNpbXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgorCiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQK
IAogQGltcGxlbWVudGF0aW9uIEpTQ29udGV4dCB7CiAgICAgSlNWaXJ0dWFsTWFjaGluZSAqbV92
aXJ0dWFsTWFjaGluZTsKICAgICBKU0dsb2JhbENvbnRleHRSZWYgbV9jb250ZXh0OwogICAgIEpT
Qzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IG1fZXhjZXB0aW9uOworICAgIFdlYWtPYmpDUHRyPGlk
IDxKU01vZHVsZUxvYWRlckRlbGVnYXRlPj4gbV9tb2R1bGVMb2FkZXJEZWxlZ2F0ZTsKIH0KIAog
LSAoSlNHbG9iYWxDb250ZXh0UmVmKUpTR2xvYmFsQ29udGV4dFJlZgpAQCAtMjMzLDYgKzI0MCwx
NiBAQAogICAgIEpTR2xvYmFsQ29udGV4dFNldERlYnVnZ2VyUnVuTG9vcChtX2NvbnRleHQsIHJ1
bkxvb3ApOwogfQogCistIChpZDxKU01vZHVsZUxvYWRlckRlbGVnYXRlPiltb2R1bGVMb2FkZXJE
ZWxlZ2F0ZQoreworICAgIHJldHVybiBtX21vZHVsZUxvYWRlckRlbGVnYXRlLmdldEF1dG9yZWxl
YXNlZCgpOworfQorCistICh2b2lkKXNldE1vZHVsZUxvYWRlckRlbGVnYXRlOihpZDxKU01vZHVs
ZUxvYWRlckRlbGVnYXRlPiltb2R1bGVMb2FkZXJEZWxlZ2F0ZQoreworICAgIG1fbW9kdWxlTG9h
ZGVyRGVsZWdhdGUgPSBtb2R1bGVMb2FkZXJEZWxlZ2F0ZTsKK30KKwogQGVuZAogCiBAaW1wbGVt
ZW50YXRpb24gSlNDb250ZXh0KFN1YnNjcmlwdFN1cHBvcnQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dEludGVybmFsLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ29udGV4dEludGVybmFsLmgKaW5kZXggMjhmNzA5YzFlNDhmMWUxYTgwMzg1
NjUwYWFlNmU0MWNkMzUxNTBmYS4uYWI0NTgyOWYwMDI3ZTRmYWQ2YmZiZDFhZmM0MDJiM2ExYmU4
NWI1OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRJbnRl
cm5hbC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0SW50ZXJuYWwu
aApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNyw3ICsyNyw3IEBACiAKICNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAogCi0jaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9KU0NvbnRleHQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTQ29u
dGV4dFByaXZhdGUuaD4KIAogc3RydWN0IENhbGxiYWNrRGF0YSB7CiAgICAgQ2FsbGJhY2tEYXRh
KiBuZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRQ
cml2YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFByaXZhdGUuaApp
bmRleCBmZjk2MjJhZGRmNjBiN2MxMDM1N2RhY2NmMWM2ZjQxZWNiODYxZjFjLi5kNGUyMDZiMzM1
NzVlOWZhNmQ0MTgyZTllMWFkODk0MDU2OGE4Njc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ29udGV4dFByaXZhdGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ29udGV4dFByaXZhdGUuaApAQCAtMzAsNiArMzAsMjcgQEAKIAogI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0Lmg+CiAKK0Bwcm90b2NvbCBKU01vZHVsZUxvYWRlckRl
bGVnYXRlIDxOU09iamVjdD4KKworQHJlcXVpcmVkCisKKy8qISBAYWJzdHJhY3QgUHJvdmlkZXMg
c291cmNlIGNvZGUgZm9yIGFueSBKUyBtb2R1bGUgdGhhdCBpcyBhY3RpdmVseSBpbXBvcnRlZC4K
KyBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCBmb3Igd2hpY2ggdGhlIG1vZHVsZSBpcyBiZWlu
ZyByZXF1ZXN0ZWQuCisgQHBhcmFtIGlkZW50aWZpZXIgVGhlIHJlc29sdmVkIGlkZW50aWZpZXIg
Zm9yIHRoZSByZXF1ZXN0ZWQgbW9kdWxlLgorIEBwYXJhbSByZXNvbHZlIEEgSlMgZnVuY3Rpb24g
dG8gY2FsbCB3aXRoIHRoZSBkZXNpcmVkIHNjcmlwdCBmb3IgaWRlbnRpZmllci4KKyBAcGFyYW0g
cmVqZWN0IEEgSlMgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGlkZW50aWZpZXIgY2Fubm90IGJlIGZl
dGNoZWQuCisgQGRpc2N1c3Npb24gQ3VycmVudGx5LCBpZGVudGlmaWVyIHdpbGwgYWx3YXlzIGJl
IGFuIGFic29sdXRlIGZpbGUgVVJMIGNvbXB1dGVkIGZyb20gc3BlY2lmaWVyIG9mIHRoZSByZXF1
ZXN0ZWQgbW9kdWxlIHJlbGF0aXZlIHRvIHRoZSBVUkwgb2YgdGhlIHJlcXVlc3Rpbmcgc2NyaXB0
LiBJZiB0aGUgcmVxdWVzdGluZyBzY3JpcHQgZG9lcyBub3QgaGF2ZSBhIFVSTCBhbmQgdGhlIG1v
ZHVsZSBzcGVjaWZpZXIgaXMgbm90IGFuIGFic29sdXRlIHBhdGggdGhlIG1vZHVsZSBsb2FkZXIg
d2lsbCBmYWlsIHRvIGxvYWQgdGhlIG1vZHVsZS4KKworIFRoZSBmaXJzdCBhcmd1bWVudCB0byBy
ZXNvbHZlIHNob2x1ZCBhbHdheXMgYmUgYSBKU1NjcmlwdCwgb3RoZXJ3aXNlIHRoZSBtb2R1bGUg
bG9hZGVyIHdpbGwgcmVqZWN0IHRoZSBtb2R1bGUuCisKKyBPbmNlIGFuIGlkZW50aWZpZXIgaGFz
IGJlZW4gcmVzb2x2ZWQgb3IgcmVqZWN0ZWQgaW4gYSBnaXZlbiBjb250ZXh0IGl0IHdpbGwgbmV2
ZXIgYmUgcmVxdWVzdGVkIGFnYWluLiBJZiBhIHNjcmlwdCBpcyBzdWNjZXNzZnVsbHkgZXZhbHVh
dGVkIGl0IHdpbGwgbm90IGJlIHJlLWV2YWx1YXRlZCBvbiBhbnkgc3Vic2VxdWVudCBpbXBvcnQu
CisKKyBUaGUgVk0gd2lsbCByZXRhaW4gYWxsIGV2YWx1YXRlZCBtb2R1bGVzIGZvciB0aGUgbGlm
ZXRpbWUgb2YgdGhlIGNvbnRleHQuCisgKi8KKy0gKHZvaWQpY29udGV4dDooSlNDb250ZXh0ICop
Y29udGV4dCBmZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6KEpTVmFsdWUgKilpZGVudGlmaWVyIHdp
dGhSZXNvbHZlSGFuZGxlcjooSlNWYWx1ZSAqKXJlc29sdmUgYW5kUmVqZWN0SGFuZGxlcjooSlNW
YWx1ZSAqKXJlamVjdDsKKworQGVuZAorCiBAaW50ZXJmYWNlIEpTQ29udGV4dChQcml2YXRlKQog
CiAvKiEKQEAgLTUwLDYgKzcxLDkgQEAKICovCiBAcHJvcGVydHkgKHNldHRlcj1fc2V0RGVidWdn
ZXJSdW5Mb29wOikgQ0ZSdW5Mb29wUmVmIF9kZWJ1Z2dlclJ1bkxvb3AgSlNDX0FQSV9BVkFJTEFC
TEUobWFjb3N4KDEwLjEwKSwgaW9zKDguMCkpOwogCisvKiEgQGFic3RyYWN0IFRoZSBkZWxlZ2F0
ZSB0aGUgY29udGV4dCB3aWxsIHVzZSB3aGVuIHRyeWluZyB0byBsb2FkIGEgbW9kdWxlLiBOb3Rl
LCB0aGlzIGRlbGVnYXRlIHdpbGwgYmUgaWdub3JlZCBmb3IgY29udGV4dHMgcmV0dXJuZWQgYnkg
VUlXZWJWaWV3LiAqLworQHByb3BlcnR5IChub25hdG9taWMsIHdlYWspIGlkIDxKU01vZHVsZUxv
YWRlckRlbGVnYXRlPiBtb2R1bGVMb2FkZXJEZWxlZ2F0ZSBKU0NfQVBJX0FWQUlMQUJMRShtYWNv
c3goSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEpKTsKKwogQGVuZAogCiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmNwcAppbmRleCBlMThkZmQyMWZm
Mjg0MDA3ZDAwMzllNjQzMmQ5ZWMzYzRmMWYzMTc3Li45ZjVmZGFmYzc4MTk2ZmU0NDhjMThkMDc5
MTVlMDRmYTM4Njg0YWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
Q29udGV4dFJlZi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHRS
ZWYuY3BwCkBAIC0zMCw5ICszMCw5IEBACiAjaW5jbHVkZSAiQVBJQ2FzdC5oIgogI2luY2x1ZGUg
IkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKKyNpbmNsdWRl
ICJKU0FQSUdsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTQ2FsbGJhY2tPYmplY3QuaCIKICNp
bmNsdWRlICJKU0NsYXNzUmVmLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNs
dWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJTb3Vy
Y2VQcm92aWRlci5oIgpAQCAtMTM4LDcgKzEzOCw3IEBAIEpTR2xvYmFsQ29udGV4dFJlZiBKU0ds
b2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKEpTQ29udGV4dEdyb3VwUmVmIGdyb3VwLCBKU0NsYXNz
CiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bS5wdHIoKSk7CiAKICAgICBpZiAoIWdsb2JhbE9i
amVjdENsYXNzKSB7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBKU0ds
b2JhbE9iamVjdDo6Y3JlYXRlKHZtLmdldCgpLCBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlU3RydWN0
dXJlKHZtLmdldCgpLCBqc051bGwoKSkpOworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gSlNBUElHbG9iYWxPYmplY3Q6OmNyZWF0ZSh2bS5nZXQoKSwgSlNBUElHbG9iYWxP
YmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bS5nZXQoKSwganNOdWxsKCkpKTsKICNpZiBFTkFCTEUo
UkVNT1RFX0lOU1BFQ1RPUikKICAgICAgICAgaWYgKEpTUmVtb3RlSW5zcGVjdG9yR2V0SW5zcGVj
dGlvbkVuYWJsZWRCeURlZmF1bHQoKSkKICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+c2V0UmVt
b3RlRGVidWdnaW5nRW5hYmxlZCh0cnVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNTY3JpcHQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45MGNiNjA5MDg4ZWM4MmY3NDRhYTcyYTdjZDdjMWQ4ZTEzODUzYzg3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5oCkBA
IC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlLmg+CisKKyNpZiBKU0NfT0JKQ19B
UElfRU5BQkxFRAorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCitPQkpDX0NMQVNTIEpTVmly
dHVhbE1hY2hpbmU7CisKK0pTQ19DTEFTU19BVkFJTEFCTEUobWFjb3N4KEpTQ19NQUNfVEJBKSwg
aW9zKEpTQ19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgSlNTY3JpcHQgOiBOU09iamVjdAorCisvKiEK
KyBAbWV0aG9kCisgQGFic3RyYWN0IENyZWF0ZSBhIEpTU2NyaXB0IGZvciB0aGUgc3BlY2lmaWVk
IHZpcnR1YWwgbWFjaGluZS4KKyBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2UgY29kZSB0byB1c2Ug
d2hlbiB0aGUgc2NyaXB0IGlzIGV2YWx1YXRlZCBieSB0aGUgSlMgdm0uCisgQHBhcmFtIHZtIFRo
ZSBKU1ZpcnR1YWxNYWNoaW5lIHRoZSBzY3JpcHQgY2FuIGJlIGV2YWx1YXRlZCBpbi4KKyBAcmVz
dWx0IFRoZSBuZXcgc2NyaXB0LgorICovCisrIChudWxsYWJsZSBpbnN0YW5jZXR5cGUpc2NyaXB0
V2l0aFNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2UgaW5WaXJ0dWFsTWFjaGluZTooSlNWaXJ0dWFs
TWFjaGluZSAqKXZtOworCisvKiEKKyBAbWV0aG9kCisgQGFic3RyYWN0IENyZWF0ZSBhIEpTU2Ny
aXB0IGZvciB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgbWFjaGluZSB3aXRoIGEgcGF0aCB0byBhIGNv
ZGVzaWduaW5nIGFuZCBieXRlY29kZSBjYWNoaW5nLgorIEBwYXJhbSBmaWxlUGF0aCBBIFVSTCBj
b250YWluaW5nIHRoZSBwYXRoIHRvIGEgSlMgc291cmNlIGNvZGUgZmlsZSBvbiBkaXNrLgorIEBw
YXJhbSB2bSBUaGUgSlNWaXJ0dWFsTWFjaGluZSB0aGUgc2NyaXB0IGNhbiBiZSBldmFsdWF0ZWQg
aW4uCisgQHBhcmFtIGNvZGVTaWduaW5nUGF0aCBBIFVSTCBjb250YWluaW5nIHRoZSBwYXRoIHRv
IHRoZSBjb2RlU2lnbmluZyBmaWxlIGZvciBmaWxlUGF0aCBvbiBkaXNrLgorIEBwYXJhbSBjYWNo
ZVBhdGggQSBVUkwgY29udGFpbmluZyB0aGUgcGF0aCB3aGVyZSB0aGUgVk0gc2hvdWxkIGNhY2hl
IGZvciBmdXR1cmUgZXhlY3V0aW9uLgorIEByZXN1bHQgVGhlIG5ldyBzY3JpcHQuCisgQGRpc2N1
c3Npb24gdGhlIGZpbGVzIGF0IGZpbGVQYXRoLCBjb2RlU2lnbmluZ1BhdGgsIGFuZCBjYWNoZVBh
dGggc2hvdWxkIG5vdCBiZSBleHRlcm5hbGx5IG1vZGlmaWVkICBmb3IgdGhlIGxpZmVjeWNsZSBv
ZiB2bS4gTm90ZSB0aGF0IGNvZGVTaWduaW5nUGF0aCBhbmQgY2FjaGVQYXRoIGFyZSBub3QgdXNl
ZCBjdXJyZW50bHksIGJ1dCB0aGF0IHdpbGwgY2hhbmdlIGluIHRoZSBuZWFyIGZ1dHVyZS4KKyAq
LworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdEZyb21VVEY4RmlsZTooTlNVUkwgKilm
aWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0gd2l0aENvZGVT
aWduaW5nOihudWxsYWJsZSBOU1VSTCAqKWNvZGVTaWduaW5nUGF0aCBhbmRCeXRlY29kZUNhY2hl
OihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aDsKKworQGVuZAorCitOU19BU1NVTUVfTk9OTlVM
TF9FTkQKKworI2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU1NjcmlwdC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OTZjNDFlZjllY2MzOTg0NzAwNmNmYjFiNjU3
M2M1MzQ5ZDNmZGRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS9KU1NjcmlwdC5tbQpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiSlNTY3Jp
cHRJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJBUElDYXN0LmgiCisjaW1wb3J0ICJKU0NvbnRleHRJ
bnRlcm5hbC5oIgorI2ltcG9ydCAiSlNWYWx1ZVByaXZhdGUuaCIKKyNpbXBvcnQgIlN5bWJvbC5o
IgorCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKworQGltcGxlbWVudGF0aW9uIEpTU2NyaXB0
IHsKKyAgICBTdHJpbmcgbV9zb3VyY2U7Cit9CisKKysgKGluc3RhbmNldHlwZSlzY3JpcHRXaXRo
U291cmNlOihOU1N0cmluZyAqKXNvdXJjZSBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxNYWNo
aW5lICopdm0KK3sKKyAgICBVTlVTRURfUEFSQU0odm0pOworICAgIEpTU2NyaXB0ICpyZXN1bHQg
PSBbW0pTU2NyaXB0IGFsbG9jXSBpbml0XTsKKyAgICByZXN1bHQtPm1fc291cmNlID0gc291cmNl
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZlY3Rvcj4KK3N0
YXRpYyBib29sIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZpbGUoRklMRSogZmlsZSwgVmVjdG9y
JiBidWZmZXIpCit7CisgICAgLy8gV2UgbWlnaHQgaGF2ZSBpbmplY3RlZCAidXNlIHN0cmljdCI7
IGF0IHRoZSB0b3AuCisgICAgc2l6ZV90IGluaXRpYWxTaXplID0gYnVmZmVyLnNpemUoKTsKKyAg
ICBpZiAoZnNlZWsoZmlsZSwgMCwgU0VFS19FTkQpID09IC0xKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgbG9uZyBidWZmZXJDYXBhY2l0eSA9IGZ0ZWxsKGZpbGUpOworICAgIGlmIChidWZm
ZXJDYXBhY2l0eSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChmc2Vlayhm
aWxlLCAwLCBTRUVLX1NFVCkgPT0gLTEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBidWZm
ZXIucmVzaXplKGJ1ZmZlckNhcGFjaXR5ICsgaW5pdGlhbFNpemUpOworICAgIHNpemVfdCByZWFk
U2l6ZSA9IGZyZWFkKGJ1ZmZlci5kYXRhKCkgKyBpbml0aWFsU2l6ZSwgMSwgYnVmZmVyLnNpemUo
KSwgZmlsZSk7CisgICAgcmV0dXJuIHJlYWRTaXplID09IGJ1ZmZlci5zaXplKCkgLSBpbml0aWFs
U2l6ZTsKK30KKworc3RhdGljIGJvb2wgZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShjb25z
dCBTdHJpbmcmIGZpbGVOYW1lLCBWZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBGSUxFKiBm
ID0gZm9wZW4oZmlsZU5hbWUudXRmOCgpLmRhdGEoKSwgInJiIik7CisgICAgaWYgKCFmKSB7Cisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IG9wZW4gZmlsZTogJXNcbiIsIGZpbGVO
YW1lLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Ym9vbCByZXN1bHQgPSBmaWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGYsIGJ1ZmZlcik7Cisg
ICAgZmNsb3NlKGYpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCisrIChpbnN0YW5jZXR5
cGUpc2NyaXB0RnJvbVVURjhGaWxlOihOU1VSTCAqKWZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6
KEpTVmlydHVhbE1hY2hpbmUgKil2bSB3aXRoQ29kZVNpZ25pbmc6KE5TVVJMICopY29kZVNpZ25p
bmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6KE5TVVJMICopY2FjaGVQYXRoCit7CisgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGNoZWNrIGNvZGVTaWduaW5nLgorICAgIFVOVVNFRF9QQVJBTShjb2Rl
U2lnbmluZ1BhdGgpOworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhY3R1YWxseSBjYWNoZSBi
eXRlY29kZS4KKyAgICBVTlVTRURfUEFSQU0oY2FjaGVQYXRoKTsKKyAgICBVTlVTRURfUEFSQU0o
dm0pOworICAgIFVSTCBmaWxlUGF0aFVSTChbZmlsZVBhdGggYWJzb2x1dGVVUkxdKTsKKyAgICBp
ZiAoIWZpbGVQYXRoVVJMLmlzTG9jYWxGaWxlKCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIG1tYXAgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGluc3Rl
YWQgb2YgY29weWluZyBpdCBpbnRvIGRpcnR5IG1lbW9yeS4KKyAgICBWZWN0b3I8Y2hhcj4gYnVm
ZmVyOworICAgIGlmICghZmlsbEJ1ZmZlcldpdGhDb250ZW50c09mRmlsZShmaWxlUGF0aFVSTC5m
aWxlU3lzdGVtUGF0aCgpLCBidWZmZXIpKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgSlNT
Y3JpcHQgKnJlc3VsdCA9IFtbSlNTY3JpcHQgYWxsb2NdIGluaXRdOworICAgIHJlc3VsdC0+bV9z
b3VyY2UgPSBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGJ1ZmZlci5kYXRhKCks
IGJ1ZmZlci5zaXplKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2NvbnN0IFN0cmluZyYg
Z2V0SlNTY3JpcHRTb3VyY2VDb2RlKEpTU2NyaXB0ICptb2R1bGUpIHsgcmV0dXJuIG1vZHVsZS0+
bV9zb3VyY2U7IH0KKworQGVuZAorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTU2NyaXB0SW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOTczZWQxYWQ0YTFmYzVmZGYzNWNm
OTQ4MjMwMTc5NWFlMWYyZWIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW1wb3J0
ICJKU1NjcmlwdC5oIgorI2ltcG9ydCAiU291cmNlQ29kZS5oIgorCitPQkpDX0NMQVNTIEpTU2Ny
aXB0OworCitjb25zdCBTdHJpbmcmIGdldEpTU2NyaXB0U291cmNlQ29kZShKU1NjcmlwdCAqKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZUludGVybmFsLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVJbnRlcm5hbC5oCmluZGV4IDRmMWE4
ZjY5Y2JmY2MyOWFlYjI2NzQ3MzgxZDhkNWY1ZTgxYmFlYWEuLjU0Yjc1NWVmZmZlNmVkMjRhNWMz
MDIyYjdkNGMzYTE4NTAwYjAxZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWYWx1ZUludGVybmFsLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1Zh
bHVlSW50ZXJuYWwuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNiw4ICsyNiw3IEBACiAjaWZuZGVmIEpTVmFsdWVJbnRlcm5hbF9oCiAj
ZGVmaW5lIEpTVmFsdWVJbnRlcm5hbF9oCiAKLSNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlLmg+CisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUHJpdmF0ZS5oPgogCiAjaWYgSlNDX09CSkNfQVBJX0VO
QUJMRUQKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxN
YWNoaW5lSW50ZXJuYWwuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFj
aGluZUludGVybmFsLmgKaW5kZXggNWNhOWE3ZjRhMTA3MDQ0ZDYwOWIxMTI3N2JlODk3NmE0MzY3
YWE5Yi4uOTEyMmVkNDlhNGVhMWFhNDllYzY2N2ZlZjY2MjdmYzQzYjc3NzE2ZCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5o
CkBAIC00Niw4ICs0Niw4IEBAIEpTQ29udGV4dEdyb3VwUmVmIGdldEdyb3VwRnJvbVZpcnR1YWxN
YWNoaW5lKEpTVmlydHVhbE1hY2hpbmUgKik7CiAKIC0gKEpTQ29udGV4dCAqKWNvbnRleHRGb3JH
bG9iYWxDb250ZXh0UmVmOihKU0dsb2JhbENvbnRleHRSZWYpZ2xvYmFsQ29udGV4dDsKIC0gKHZv
aWQpYWRkQ29udGV4dDooSlNDb250ZXh0ICopd3JhcHBlciBmb3JHbG9iYWxDb250ZXh0UmVmOihK
U0dsb2JhbENvbnRleHRSZWYpZ2xvYmFsQ29udGV4dDsKLQogQGVuZAorCiAjZW5kaWYgLy8gZGVm
aW5lZChfX09CSkNfXykKIAogdm9pZCBzY2FuRXh0ZXJuYWxPYmplY3RHcmFwaChKU0M6OlZNJiwg
SlNDOjpTbG90VmlzaXRvciYsIHZvaWQqIHJvb3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQ
SS90ZXN0cy90ZXN0YXBpLm1tCmluZGV4IDM3ZTEzODVjOGM0ODRlZmFlOGE5YzNmOTJlMTM1Y2E3
M2Y5NTkxOTIuLjQzNWZkYmIzNmQyNDQ2ZTg1ZGI1MzEzNjMzY2Q3NjRmZWY3OTk4YjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0KQEAgLTMxLDcgKzMxLDkg
QEAKICNpbXBvcnQgIkRGR1dvcmtsaXN0LmgiCiAjaW1wb3J0ICJEYXRlVGVzdHMuaCIKICNpbXBv
cnQgIkpTQ2FzdC5oIgorI2ltcG9ydCAiSlNDb250ZXh0UHJpdmF0ZS5oIgogI2ltcG9ydCAiSlNF
eHBvcnRUZXN0cy5oIgorI2ltcG9ydCAiSlNTY3JpcHQuaCIKICNpbXBvcnQgIkpTVmFsdWVQcml2
YXRlLmgiCiAjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKICNpbXBvcnQgIkpT
VmlydHVhbE1hY2hpbmVQcml2YXRlLmgiCkBAIC0xODEyLDEyICsxODE0LDI0OCBAQCBzdGF0aWMg
dm9pZCBwYXJhbGxlbFByb21pc2VSZXNvbHZlVGVzdCgpCiAgICAgfQogfQogCit0eXBlZGVmIEpT
VmFsdWUgKiheUmVzb2x2ZUJsb2NrKShKU0NvbnRleHQgKiwgSlNWYWx1ZSAqLCBKU1NjcmlwdCAq
KTsKK3R5cGVkZWYgdm9pZCAoXkZldGNoQmxvY2spKEpTQ29udGV4dCAqLCBKU1ZhbHVlICosIEpT
VmFsdWUgKiwgSlNWYWx1ZSAqKTsKKworQGludGVyZmFjZSBKU0NvbnRleHRGZXRjaERlbGVnYXRl
IDogSlNDb250ZXh0IDxKU01vZHVsZUxvYWRlckRlbGVnYXRlPgorCisrIChpbnN0YW5jZXR5cGUp
Y29udGV4dFdpdGhCbG9ja0ZvckZldGNoOihGZXRjaEJsb2NrKWJsb2NrOworCitAZW5kCisKK0Bp
bXBsZW1lbnRhdGlvbiBKU0NvbnRleHRGZXRjaERlbGVnYXRlIHsKKyAgICBGZXRjaEJsb2NrIG1f
ZmV0Y2hCbG9jazsKK30KKworKyAoaW5zdGFuY2V0eXBlKWNvbnRleHRXaXRoQmxvY2tGb3JGZXRj
aDooRmV0Y2hCbG9jaylibG9jaworeworICAgIGF1dG8gKnJlc3VsdCA9IFtbSlNDb250ZXh0RmV0
Y2hEZWxlZ2F0ZSBhbGxvY10gaW5pdF07CisgICAgcmVzdWx0LT5tX2ZldGNoQmxvY2sgPSBibG9j
azsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCistICh2b2lkKWNvbnRleHQ6KEpTQ29udGV4dCAq
KWNvbnRleHQgZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyOihKU1ZhbHVlICopaWRlbnRpZmllciB3
aXRoUmVzb2x2ZUhhbmRsZXI6KEpTVmFsdWUgKilyZXNvbHZlIGFuZFJlamVjdEhhbmRsZXI6KEpT
VmFsdWUgKilyZWplY3QKK3sKKyAgICBtX2ZldGNoQmxvY2soY29udGV4dCwgaWRlbnRpZmllciwg
cmVzb2x2ZSwgcmVqZWN0KTsKK30KKworQGVuZAorCitzdGF0aWMgdm9pZCBjaGVja01vZHVsZUNv
ZGVSYW4oSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICpwcm9taXNlLCBKU1ZhbHVlICpleHBl
Y3RlZCkKK3sKKyAgICBfX2Jsb2NrIEJPT0wgcHJvbWlzZVdhc1Jlc29sdmVkID0gZmFsc2U7Cisg
ICAgW3Byb21pc2UgaW52b2tlTWV0aG9kOkAidGhlbiIgd2l0aEFyZ3VtZW50czpAW14oSlNWYWx1
ZSAqZXhwb3J0VmFsdWUpIHsKKyAgICAgICAgcHJvbWlzZVdhc1Jlc29sdmVkID0gdHJ1ZTsKKyAg
ICAgICAgY2hlY2tSZXN1bHQoQCJtb2R1bGUgZXhwb3J0ZWQgdmFsdWUgJ2V4cCcgaXMgbnVsbCIs
IFtleHBvcnRWYWx1ZVtAImV4cCJdIGlzRXF1YWxUb09iamVjdDpleHBlY3RlZF0pOworICAgICAg
ICBjaGVja1Jlc3VsdChAInJhbiBpcyAlQCIsIFtjb250ZXh0W0AicmFuIl0gaXNFcXVhbFRvT2Jq
ZWN0OmV4cGVjdGVkXSk7CisgICAgfSwgXihKU1ZhbHVlICplcnJvcikgeworICAgICAgICBOU0xv
ZyhAIiVAIiwgW2Vycm9yIHRvU3RyaW5nXSk7CisgICAgICAgIGNoZWNrUmVzdWx0KEAibW9kdWxl
IGdyYXBoIHdhcyByZXNvbHZlZCBhcyBleHBlY3RlZCIsIE5PKTsKKyAgICB9XV07CisgICAgY2hl
Y2tSZXN1bHQoQCJQcm9taXNlIHdhcyByZXNvbHZlZCIsIHByb21pc2VXYXNSZXNvbHZlZCk7Cit9
CisKK3N0YXRpYyB2b2lkIGNoZWNrTW9kdWxlV2FzUmVqZWN0ZWQoSlNDb250ZXh0ICpjb250ZXh0
LCBKU1ZhbHVlICpwcm9taXNlKQoreworICAgIF9fYmxvY2sgQk9PTCBwcm9taXNlV2FzUmVqZWN0
ZWQgPSBmYWxzZTsKKyAgICBbcHJvbWlzZSBpbnZva2VNZXRob2Q6QCJ0aGVuIiB3aXRoQXJndW1l
bnRzOkBbXigpIHsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJtb2R1bGUgd2FzIHJlamVjdGVkIGFz
IGV4cGVjdGVkIiwgTk8pOworICAgIH0sIF4oSlNWYWx1ZSAqZXJyb3IpIHsKKyAgICAgICAgcHJv
bWlzZVdhc1JlamVjdGVkID0gdHJ1ZTsKKyAgICAgICAgTlNMb2coQCIlQCIsIFtlcnJvciB0b1N0
cmluZ10pOworICAgICAgICBjaGVja1Jlc3VsdChAIm1vZHVsZSBncmFwaCB3YXMgcmVqZWN0ZWQg
d2l0aCBlcnJvciIsICFbZXJyb3IgaXNFcXVhbFdpdGhUeXBlQ29lcmNpb25Ub09iamVjdDpbSlNW
YWx1ZSB2YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRleHRdXSk7CisgICAgfV1dOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0RmV0Y2goKQoreworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAg
ICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZldGNoRGVsZWdhdGUgY29udGV4dFdpdGhCbG9j
a0ZvckZldGNoOl4oSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICppZGVudGlmaWVyLCBKU1Zh
bHVlICpyZXNvbHZlLCBKU1ZhbHVlICpyZWplY3QpIHsKKyAgICAgICAgICAgIGlmIChbaWRlbnRp
ZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL2RpcmVjdG9yeS9iYXIuanMiXSkKKyAgICAg
ICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRX
aXRoU291cmNlOkAiaW1wb3J0IFwiLi4vZm9vLmpzXCI7IGV4cG9ydCBsZXQgZXhwID0gbnVsbDsi
IGluVmlydHVhbE1hY2hpbmU6W2NvbnRleHQgdmlydHVhbE1hY2hpbmVdXV1dOworICAgICAgICAg
ICAgZWxzZSBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0OkAiZmlsZTovLy9mb28uanMi
XSkKKyAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1Njcmlw
dCBzY3JpcHRXaXRoU291cmNlOkAiZ2xvYmFsVGhpcy5yYW4gPSBudWxsOyIgaW5WaXJ0dWFsTWFj
aGluZTpbY29udGV4dCB2aXJ0dWFsTWFjaGluZV1dXV07CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgW3JlamVjdCBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1ZhbHVlIHZhbHVlV2l0
aE5ld0Vycm9yRnJvbU1lc3NhZ2U6QCJXZWlyZCBwYXRoIiBpbkNvbnRleHQ6Y29udGV4dF1dXTsK
KyAgICAgICAgfV07CisgICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBjb250
ZXh0OworICAgICAgICBKU1ZhbHVlICpwcm9taXNlID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6
QCJpbXBvcnQoJy4vYmFyLmpzJyk7IiB3aXRoU291cmNlVVJMOltOU1VSTCBmaWxlVVJMV2l0aFBh
dGg6QCIvZGlyZWN0b3J5IiBpc0RpcmVjdG9yeTpZRVNdXTsKKyAgICAgICAgSlNWYWx1ZSAqbnVs
bCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE51bGxJbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNo
ZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCBwcm9taXNlLCBudWxsKTsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RGZXRjaFdpdGhUd29DeWNsZSgpCit7CisgICAgQGF1dG9yZWxlYXNlcG9v
bCB7CisgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0RmV0Y2hEZWxlZ2F0ZSBjb250
ZXh0V2l0aEJsb2NrRm9yRmV0Y2g6XihKU0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWUgKmlkZW50
aWZpZXIsIEpTVmFsdWUgKnJlc29sdmUsIEpTVmFsdWUgKnJlamVjdCkgeworICAgICAgICAgICAg
aWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZpbGU6Ly8vZGlyZWN0b3J5L2Jhci5q
cyJdKQorICAgICAgICAgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTU2Ny
aXB0IHNjcmlwdFdpdGhTb3VyY2U6QCJpbXBvcnQgeyBuIH0gZnJvbSBcIi4uL2Zvby5qc1wiOyBl
eHBvcnQgbGV0IGV4cCA9IG47IiBpblZpcnR1YWxNYWNoaW5lOltjb250ZXh0IHZpcnR1YWxNYWNo
aW5lXV1dXTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb09iamVj
dDpAImZpbGU6Ly8vZm9vLmpzIl0pCisgICAgICAgICAgICAgICAgW3Jlc29sdmUgY2FsbFdpdGhB
cmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0V2l0aFNvdXJjZTpAImltcG9ydCBcImRpcmVjdG9y
eS9iYXIuanNcIjsgZ2xvYmFsVGhpcy5yYW4gPSBudWxsOyBleHBvcnQgbGV0IG4gPSBudWxsOyIg
aW5WaXJ0dWFsTWFjaGluZTpbY29udGV4dCB2aXJ0dWFsTWFjaGluZV1dXV07CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgW3JlamVjdCBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1Zh
bHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6QCJXZWlyZCBwYXRoIiBpbkNvbnRleHQ6
Y29udGV4dF1dXTsKKyAgICAgICAgfV07CisgICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVyRGVs
ZWdhdGUgPSBjb250ZXh0OworICAgICAgICBKU1ZhbHVlICpwcm9taXNlID0gW2NvbnRleHQgZXZh
bHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy4vYmFyLmpzJyk7IiB3aXRoU291cmNlVVJMOltOU1VSTCBm
aWxlVVJMV2l0aFBhdGg6QCIvZGlyZWN0b3J5IiBpc0RpcmVjdG9yeTpZRVNdXTsKKyAgICAgICAg
SlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE51bGxJbkNvbnRleHQ6Y29udGV4dF07
CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCBwcm9taXNlLCBudWxsKTsKKyAg
ICB9Cit9CisKKworc3RhdGljIHZvaWQgdGVzdEZldGNoV2l0aFRocmVlQ3ljbGUoKQoreworICAg
IEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZl
dGNoRGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl4oSlNDb250ZXh0ICpjb250ZXh0
LCBKU1ZhbHVlICppZGVudGlmaWVyLCBKU1ZhbHVlICpyZXNvbHZlLCBKU1ZhbHVlICpyZWplY3Qp
IHsKKyAgICAgICAgICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8v
L2RpcmVjdG9yeS9iYXIuanMiXSkKKyAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFy
Z3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNlOkAiaW1wb3J0IHsgbiB9IGZyb20g
XCIuLi9mb28uanNcIjsgZXhwb3J0IGxldCBmb28gPSBuOyIgaW5WaXJ0dWFsTWFjaGluZTpbY29u
dGV4dCB2aXJ0dWFsTWFjaGluZV1dXV07CisgICAgICAgICAgICBlbHNlIGlmIChbaWRlbnRpZmll
ciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL2Zvby5qcyJdKQorICAgICAgICAgICAgICAgIFty
ZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlwdFdpdGhTb3VyY2U6QCJp
bXBvcnQgXCJvdGhlckRpcmVjdG9yeS9iYXouanNcIjsgZXhwb3J0IGxldCBuID0gbnVsbDsiIGlu
VmlydHVhbE1hY2hpbmU6W2NvbnRleHQgdmlydHVhbE1hY2hpbmVdXV1dOworICAgICAgICAgICAg
ZWxzZSBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0OkAiZmlsZTovLy9vdGhlckRpcmVj
dG9yeS9iYXouanMiXSkKKyAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50
czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNlOkAiaW1wb3J0IHsgZm9vIH0gZnJvbSBcIi4u
L2RpcmVjdG9yeS9iYXIuanNcIjsgZ2xvYmFsVGhpcy5yYW4gPSBudWxsOyBleHBvcnQgbGV0IGV4
cCA9IGZvbzsiIGluVmlydHVhbE1hY2hpbmU6W2NvbnRleHQgdmlydHVhbE1hY2hpbmVdXV1dOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFtyZWplY3QgY2FsbFdpdGhBcmd1bWVu
dHM6QFtbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZyb21NZXNzYWdlOkAiV2VpcmQgcGF0aCIg
aW5Db250ZXh0OmNvbnRleHRdXV07CisgICAgICAgIH1dOworICAgICAgICBjb250ZXh0Lm1vZHVs
ZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtj
b250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0KCcuLi9vdGhlckRpcmVjdG9yeS9iYXouanMn
KTsiIHdpdGhTb3VyY2VVUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpAIi9kaXJlY3RvcnkiIGlz
RGlyZWN0b3J5OllFU11dOworICAgICAgICBKU1ZhbHVlICpudWxsID0gW0pTVmFsdWUgdmFsdWVX
aXRoTnVsbEluQ29udGV4dDpjb250ZXh0XTsKKyAgICAgICAgY2hlY2tNb2R1bGVDb2RlUmFuKGNv
bnRleHQsIHByb21pc2UsIG51bGwpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGVzdExvYWRl
clJlc29sdmVzQWJzb2x1dGVTY3JpcHRVUkwoKQoreworICAgIEBhdXRvcmVsZWFzZXBvb2wgewor
ICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZldGNoRGVsZWdhdGUgY29udGV4dFdp
dGhCbG9ja0ZvckZldGNoOl4oSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICppZGVudGlmaWVy
LCBKU1ZhbHVlICpyZXNvbHZlLCBKU1ZhbHVlICpyZWplY3QpIHsKKyAgICAgICAgICAgIGlmIChb
aWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL2RpcmVjdG9yeS9iYXIuanMiXSkK
KyAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBz
Y3JpcHRXaXRoU291cmNlOkAiZXhwb3J0IGxldCBleHAgPSBudWxsOyBnbG9iYWxUaGlzLnJhbiA9
IG51bGw7IiBpblZpcnR1YWxNYWNoaW5lOltjb250ZXh0IHZpcnR1YWxNYWNoaW5lXV1dXTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBbcmVqZWN0IGNhbGxXaXRoQXJndW1lbnRz
OkBbW0pTVmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpAIldlaXJkIHBhdGgiIGlu
Q29udGV4dDpjb250ZXh0XV1dOworICAgICAgICB9XTsKKyAgICAgICAgY29udGV4dC5tb2R1bGVM
b2FkZXJEZWxlZ2F0ZSA9IGNvbnRleHQ7CisgICAgICAgIEpTVmFsdWUgKnByb21pc2UgPSBbY29u
dGV4dCBldmFsdWF0ZVNjcmlwdDpAImltcG9ydCgnL2RpcmVjdG9yeS9iYXIuanMnKTsiXTsKKyAg
ICAgICAgSlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE51bGxJbkNvbnRleHQ6Y29u
dGV4dF07CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCBwcm9taXNlLCBudWxs
KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RMb2FkZXJSZWplY3RzTmlsU2NyaXB0VVJM
KCkKK3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgYXV0byAqY29udGV4dCA9IFtK
U0NvbnRleHRGZXRjaERlbGVnYXRlIGNvbnRleHRXaXRoQmxvY2tGb3JGZXRjaDpeKEpTQ29udGV4
dCAqLCBKU1ZhbHVlICosIEpTVmFsdWUgKiwgSlNWYWx1ZSAqKSB7CisgICAgICAgICAgICBjaGVj
a1Jlc3VsdChAIkNvZGUgaXMgbm90IHJ1biIsIE5PKTsKKyAgICAgICAgfV07CisgICAgICAgIGNv
bnRleHQubW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBjb250ZXh0OworICAgICAgICBKU1ZhbHVlICpw
cm9taXNlID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy4uL290aGVyRGlyZWN0
b3J5L2Jhei5qcycpOyJdOworICAgICAgICBjaGVja01vZHVsZVdhc1JlamVjdGVkKGNvbnRleHQs
IHByb21pc2UpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGVzdExvYWRlclJlamVjdHNGYWls
ZWRGZXRjaCgpCit7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRl
eHQgPSBbSlNDb250ZXh0RmV0Y2hEZWxlZ2F0ZSBjb250ZXh0V2l0aEJsb2NrRm9yRmV0Y2g6XihK
U0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWUgKiwgSlNWYWx1ZSAqLCBKU1ZhbHVlICpyZWplY3Qp
IHsKKyAgICAgICAgICAgIFtyZWplY3QgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNWYWx1ZSB2YWx1
ZVdpdGhOZXdFcnJvckZyb21NZXNzYWdlOkAiTm9wZSIgaW5Db250ZXh0OmNvbnRleHRdXV07Cisg
ICAgICAgIH1dOworICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4
dDsKKyAgICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAi
aW1wb3J0KCcvb3RoZXJEaXJlY3RvcnkvYmF6LmpzJyk7Il07CisgICAgICAgIGNoZWNrTW9kdWxl
V2FzUmVqZWN0ZWQoY29udGV4dCwgcHJvbWlzZSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB0
ZXN0SW1wb3J0TW9kdWxlVHdpY2UoKQoreworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAg
ICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZldGNoRGVsZWdhdGUgY29udGV4dFdpdGhCbG9j
a0ZvckZldGNoOl4oSlNDb250ZXh0ICogY29udGV4dCwgSlNWYWx1ZSAqLCBKU1ZhbHVlICpyZXNv
bHZlLCBKU1ZhbHVlICopIHsKKyAgICAgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRz
OkBbW0pTU2NyaXB0IHNjcmlwdFdpdGhTb3VyY2U6QCJyYW4rKzsgZXhwb3J0IGxldCBleHAgPSAx
OyIgaW5WaXJ0dWFsTWFjaGluZTpbY29udGV4dCB2aXJ0dWFsTWFjaGluZV1dXV07CisgICAgICAg
IH1dOworICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAg
ICAgICAgY29udGV4dFtAInJhbiJdID0gQCgwKTsKKyAgICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9
IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0KCcvYmF6LmpzJyk7Il07CisgICAgICAg
IEpTVmFsdWUgKnByb21pc2UyID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy9i
YXouanMnKTsiXTsKKyAgICAgICAgSlNWYWx1ZSAqb25lID0gW0pTVmFsdWUgdmFsdWVXaXRoSW50
MzI6MSBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250
ZXh0LCBwcm9taXNlLCBvbmUpOworICAgICAgICBjaGVja01vZHVsZUNvZGVSYW4oY29udGV4dCwg
cHJvbWlzZTIsIG9uZSk7CisgICAgfQorfQorCitAaW50ZXJmYWNlIEpTQ29udGV4dEZpbGVMb2Fk
ZXJEZWxlZ2F0ZSA6IEpTQ29udGV4dCA8SlNNb2R1bGVMb2FkZXJEZWxlZ2F0ZT4KKworKyAoaW5z
dGFuY2V0eXBlKW5ld0NvbnRleHQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIEpTQ29udGV4
dEZpbGVMb2FkZXJEZWxlZ2F0ZSB7Cit9CisKKysgKGluc3RhbmNldHlwZSluZXdDb250ZXh0Cit7
CisgICAgYXV0byAqcmVzdWx0ID0gW1tKU0NvbnRleHRGaWxlTG9hZGVyRGVsZWdhdGUgYWxsb2Nd
IGluaXRdOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBOU1VSTCAqcmVzb2x2ZVBh
dGhUb1NjcmlwdHMoKQoreworICAgIE5TU3RyaW5nICphcmcwID0gTlNQcm9jZXNzSW5mby5wcm9j
ZXNzSW5mby5hcmd1bWVudHNbMF07CisgICAgTlNVUkwgKmJhc2U7CisgICAgaWYgKFthcmcwIGhh
c1ByZWZpeDpAIi8iXSkKKyAgICAgICAgYmFzZSA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6YXJn
MCBpc0RpcmVjdG9yeTpOT107CisgICAgZWxzZSB7CisgICAgICAgIGNvbnN0IHNpemVfdCBtYXhM
ZW5ndGggPSAxMDAwMDsKKyAgICAgICAgY2hhciBjd2RbbWF4TGVuZ3RoXTsKKyAgICAgICAgaWYg
KCFnZXRjd2QoY3dkLCBtYXhMZW5ndGgpKSB7CisgICAgICAgICAgICBOU0xvZyhAImdldGN3ZCBl
cnJvcmVkIHdpdGggY29kZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgZXhp
dCgxKTsKKyAgICAgICAgfQorICAgICAgICBOU1VSTCAqY3dkVVJMID0gW05TVVJMIGZpbGVVUkxX
aXRoUGF0aDpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVzIiwgY3dkXV07CisgICAgICAg
IGJhc2UgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOmFyZzAgaXNEaXJlY3Rvcnk6Tk8gcmVsYXRp
dmVUb1VSTDpjd2RVUkxdOworICAgIH0KKyAgICByZXR1cm4gW05TVVJMIGZpbGVVUkxXaXRoUGF0
aDpAIi4vdGVzdGFwaVNjcmlwdHMvIiBpc0RpcmVjdG9yeTpZRVMgcmVsYXRpdmVUb1VSTDpiYXNl
XTsKK30KKworLSAodm9pZCljb250ZXh0OihKU0NvbnRleHQgKiljb250ZXh0IGZldGNoTW9kdWxl
Rm9ySWRlbnRpZmllcjooSlNWYWx1ZSAqKWlkZW50aWZpZXIgd2l0aFJlc29sdmVIYW5kbGVyOihK
U1ZhbHVlICopcmVzb2x2ZSBhbmRSZWplY3RIYW5kbGVyOihKU1ZhbHVlICopcmVqZWN0Cit7Cisg
ICAgTlNVUkwgKmZpbGVQYXRoID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W2lkZW50aWZpZXIgdG9T
dHJpbmddXTsKKyAgICBhdXRvICpzY3JpcHQgPSBbSlNTY3JpcHQgc2NyaXB0RnJvbVVURjhGaWxl
OmZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6W2NvbnRleHQgdmlydHVhbE1hY2hpbmVdIHdpdGhD
b2RlU2lnbmluZzpuaWwgYW5kQnl0ZWNvZGVDYWNoZTpuaWxdOworICAgIGlmIChzY3JpcHQpCisg
ICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbc2NyaXB0XV07CisgICAgZWxzZQor
ICAgICAgICBbcmVqZWN0IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTVmFsdWUgdmFsdWVXaXRoTmV3
RXJyb3JGcm9tTWVzc2FnZTpAIlVuYWJsZSB0byBjcmVhdGUgU2NyaXB0IiBpbkNvbnRleHQ6Y29u
dGV4dF1dXTsKK30KKworQGVuZAorCitzdGF0aWMgdm9pZCB0ZXN0TG9hZEJhc2ljRmlsZSgpCit7
CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250
ZXh0RmlsZUxvYWRlckRlbGVnYXRlIG5ld0NvbnRleHRdOworICAgICAgICBjb250ZXh0Lm1vZHVs
ZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtj
b250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0KCcuL2Jhc2ljLmpzJyk7IiB3aXRoU291cmNl
VVJMOnJlc29sdmVQYXRoVG9TY3JpcHRzKCldOworICAgICAgICBKU1ZhbHVlICpudWxsID0gW0pT
VmFsdWUgdmFsdWVXaXRoTnVsbEluQ29udGV4dDpjb250ZXh0XTsKKyAgICAgICAgY2hlY2tNb2R1
bGVDb2RlUmFuKGNvbnRleHQsIHByb21pc2UsIG51bGwpOworICAgIH0KK30KKwogdm9pZCB0ZXN0
T2JqZWN0aXZlQ0FQSSgpCiB7CiAgICAgTlNMb2coQCJUZXN0aW5nIE9iamVjdGl2ZS1DIEFQSSIp
OworCiAgICAgY2hlY2tOZWdhdGl2ZU5TSW50ZWdlcnMoKTsKICAgICBydW5KSVRUaHJlYWRMaW1p
dFRlc3RzKCk7CiAKKyAgICB0ZXN0TG9hZGVyUmVzb2x2ZXNBYnNvbHV0ZVNjcmlwdFVSTCgpOwor
ICAgIHRlc3RGZXRjaCgpOworICAgIHRlc3RGZXRjaFdpdGhUd29DeWNsZSgpOworICAgIHRlc3RG
ZXRjaFdpdGhUaHJlZUN5Y2xlKCk7CisgICAgdGVzdEltcG9ydE1vZHVsZVR3aWNlKCk7CisKKyAg
ICB0ZXN0TG9hZGVyUmVqZWN0c05pbFNjcmlwdFVSTCgpOworICAgIHRlc3RMb2FkZXJSZWplY3Rz
RmFpbGVkRmV0Y2goKTsKKworICAgIC8vIEZpbGUgbG9hZGluZworICAgIHRlc3RMb2FkQmFzaWNG
aWxlKCk7CisKICAgICBwcm9taXNlV2l0aEV4ZWN1dG9yKFJlc29sdXRpb246OlJlc29sdmVFYWdl
cik7CiAgICAgcHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZWplY3RFYWdlcik7CiAg
ICAgcHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpSZXNvbHZlTGF0ZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGlTY3JpcHRzL2Jhc2lj
LmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy9iYXNp
Yy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44NTI4YzQ5Y2MyYTc0ZTY2OTkyNjZiMmM4YTJjN2QxMGRhNzc3MjM4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0
YXBpU2NyaXB0cy9iYXNpYy5qcwpAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK2V4cG9ydCBsZXQgZXhwID0gbnVsbDsKK2dsb2Jh
bFRoaXMucmFuID0gbnVsbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjNlZjFj
NDIzODBiM2NlZjJmMDBmYWM2NThlOTJlOWQ2ZTc5OWYwMy4uZjZmOTYwOGFmMjg4OGI4NjVkMjVm
NGE0MGYyZDllNTE5YmU4YWQwNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEw
NTcsNiArMTA1Nyw4IEBACiAJCTUzOUZCOEJBMUM5OURBN0MwMDk0MEZBMSAvKiBKU0FycmF5SW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM5
RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxpbmVzLmggKi87IH07CiAJCTUzQjRC
RDEyMUY2OEIzMjUwMEQyQkVBMyAvKiBXYXNtT3BzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzNCMTVERTFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9w
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUz
QjYwMUVDMjAzNEI4QzUwMDZCRTY2NyAvKiBKU0Nhc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzQjYwMUVCMjAzNEI4QzUwMDZCRTY2NyAvKiBKU0Nh
c3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1
M0MzRDVFNTIxRUNFNzcyMDA4N0ZERkMgLyogYmFzaWMuanMgaW4gQ29weSBTdXBwb3J0IFNjcmlw
dCAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0MzRDVFNDIxRUNFNkNFMDA4
N0ZERkMgLyogYmFzaWMuanMgKi87IH07CisJCTUzQzRGNjZCMjFCMUE0MDkwMDJGRDAwOSAvKiBK
U0FQSUdsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTNDNEY2NkEyMUIxQTQwOTAwMkZEMDA5IC8qIEpTQVBJR2xvYmFsT2JqZWN0Lmgg
Ki87IH07CiAJCTUzQzZGRUVGMUU4QURGQTkwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3JpZ2luLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0M2RkVFRTFF
OEFERkE5MDBCMTg0MjUgLyogV2FzbU9wY29kZU9yaWdpbi5oICovOyB9OwogCQk1M0NBNzMwQTFF
QTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJCUVBsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzQ0E3MzA4MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJR
UGxhbi5oICovOyB9OwogCQk1M0Q0NDREQzFEQUYwOEFCMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVz
c1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
M0Q0NDREQjFEQUYwOEFCMDBCOTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmggKi87IH07CkBA
IC0xMDY1LDYgKzEwNjcsOCBAQAogCQk1M0U5RTBBQzFFQUU4M0RGMDBGRUUyNTEgLyogV2FzbU1h
Y2hpbmVUaHJlYWRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1M0U5RTBBQTFFQUU4M0RFMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmggKi87
IH07CiAJCTUzRTlFMEFGMUVBRUM0NTcwMEZFRTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRTlFMEFFMUVBRUM0
NTcwMEZFRTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0VBRkUyRjIwOERGQUI0MDA3RDUyNEIgLyogdGVz
dGFwaS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MzFENEUxOTFGNTlDREQyMDBFQzgzNkMgLyogdGVzdGFwaS5jcHAgKi87IH07CisJCTUzRUUwMUI2
MjE4RjY5MTYwMEFEMUY4RCAvKiBKU1NjcmlwdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFRTAxQjUyMThGNjkwRjAwQUQxRjhEIC8qIEpTU2NyaXB0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTNF
RTAxQjgyMThGN0VGRjAwQUQxRjhEIC8qIEpTU2NyaXB0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRUUwMUI3MjE4RjdFRkYwMEFEMUY4
RCAvKiBKU1NjcmlwdEludGVybmFsLmggKi87IH07CiAJCTUzRjExRjQxMjA5MTM4RDcwMEU0MTFB
NyAvKiBKU0ltbXV0YWJsZUJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTNGMTFGNDAyMDkxMzhENzAwRTQxMUE3IC8qIEpTSW1tdXRhYmxl
QnV0dGVyZmx5LmggKi87IH07CiAJCTUzRjQwRTg1MUQ1OEY5NzcwMDk5QTFCNiAvKiBXYXNtU2Vj
dGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
RjQwRTg0MUQ1OEY5NzcwMDk5QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCAqLzsgfTsKIAkJNTNGNDBF
OEIxRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBhcnNlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOEExRDU5MDFCQjAwOTlBMUI2
IC8qIFdhc21GdW5jdGlvblBhcnNlci5oICovOyB9OwpAQCAtMjAwMyw5ICsyMDA3LDEwIEBACiAJ
CTVEQkIxNTExMTMxRDBCMTMwMDU2QUQzNiAvKiBDb3B5IFN1cHBvcnQgU2NyaXB0ICovID0gewog
CQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDEy
OwotCQkJZHN0UGF0aCA9ICIiOworCQkJZHN0UGF0aCA9IHRlc3RhcGlTY3JpcHRzOwogCQkJZHN0
U3ViZm9sZGVyU3BlYyA9IDE2OwogCQkJZmlsZXMgPSAoCisJCQkJNTNDM0Q1RTUyMUVDRTc3MjAw
ODdGREZDIC8qIGJhc2ljLmpzIGluIENvcHkgU3VwcG9ydCBTY3JpcHQgKi8sCiAJCQkJRkVDQjhC
MkExRDI1Q0I1QTAwNkYyNDYzIC8qIHRlc3RhcGktZnVuY3Rpb24tb3ZlcnJpZGVzLmpzIGluIENv
cHkgU3VwcG9ydCBTY3JpcHQgKi8sCiAJCQkJNURCQjE1MUIxMzFEMEIzMTAwNTZBRDM2IC8qIHRl
c3RhcGkuanMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLywKIAkJCSk7CkBAIC0zNTU3LDYgKzM1
NjIsOSBAQAogCQk1M0IwQkUzNTFFNTYxQjA5MDBBOEZDMjkgLyogUHJveHlhYmxlQWNjZXNzQ2Fz
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm94eWFibGVBY2Nl
c3NDYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNCMEJFMzcxRTU2MUIy
NDAwQThGQzI5IC8qIEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzQjYwMUVCMjAzNEI4QzUwMDZCRTY2NyAvKiBK
U0Nhc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUzQzNENUU0MjFFQ0U2Q0UwMDg3RkRGQyAvKiBiYXNpYy5qcyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IGJhc2ljLmpzOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1M0M0RjY2QTIxQjFBNDA5MDAyRkQwMDkgLyogSlNBUElHbG9iYWxPYmplY3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNBUElHbG9iYWxPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTNDNEY2NkMyMUIxQTdDQTAwMkZEMDA5IC8qIEpTQVBJR2xvYmFsT2JqZWN0
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSlNBUElHbG9iYWxPYmplY3QubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzQzZGRUVFMUU4QURGQTkwMEIxODQyNSAvKiBXYXNtT3Bj
b2RlT3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21PcGNvZGVP
cmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNDNkZFRjAxRThBRkUwQzAw
QjE4NDI1IC8qIFdhc21PcGNvZGVPcmlnaW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2FzbU9wY29kZU9yaWdpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUzQ0E3MzA3MUVBNTMzRDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxhbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQkJRUGxhbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNTY5LDYgKzM1NzcsOSBAQAogCQk1M0U5RTBBOTFFQUU4
M0RFMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21NYWNoaW5lVGhyZWFkcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzRTlFMEFBMUVBRTgzREUwMEZFRTI1MSAvKiBXYXNtTWFjaGluZVRo
cmVhZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU1hY2hpbmVUaHJl
YWRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRTlFMEFFMUVBRUM0NTcwMEZF
RTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2FzbVRpZXJVcENvdW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRUUw
MUI0MjE4RjY5MEUwMEFEMUY4RCAvKiBKU1NjcmlwdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IEpTU2NyaXB0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1M0VFMDFCNTIxOEY2OTBGMDBBRDFGOEQgLyogSlNTY3JpcHQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTY3JpcHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTNFRTAxQjcyMThGN0VGRjAwQUQxRjhEIC8qIEpTU2NyaXB0SW50ZXJuYWwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTY3JpcHRJbnRlcm5hbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1M0YxMUY0MDIwOTEzOEQ3MDBFNDExQTcgLyogSlNJbW11
dGFibGVCdXR0ZXJmbHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJbW11dGFibGVCdXR0ZXJmbHkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGMTFGNDIyMDkxNzQ5ODAwRTQxMUE3IC8q
IEpTSW1tdXRhYmxlQnV0dGVyZmx5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSW1tdXRhYmxl
QnV0dGVyZmx5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGMjU2RTExQjg3
RTI4MDAwQjRCNzY4IC8qIEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTM4LDYgKzU1NDksNyBAQAogCQkxNDEy
MTEwMDBBNDg3NzI2MDA0ODAyNTUgLyogdGVzdHMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAorCQkJCTUzQzNENUUzMjFFQ0U2OEUwMDg3RkRGQyAvKiB0ZXN0YXBp
U2NyaXB0cyAqLywKIAkJCQlGRUYwNDA1MDFBQUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3
YXBUZXN0LmNwcCAqLywKIAkJCQlGRUYwNDA1MjFBQUVDNEVEMDBCRDI4QjAgLyogQ29tcGFyZUFu
ZFN3YXBUZXN0LmggKi8sCiAJCQkJQzI5RUNCMDIxODA0RDBFRDAwRDJDQkI0IC8qIEN1cnJlbnRU
aGlzSW5zaWRlQmxvY2tHZXR0ZXJUZXN0LmggKi8sCkBAIC01OTM3LDYgKzU5NDksOCBAQAogCQkJ
CTUzNTI5QTRCMUM0NTdCNzUwMDBCNDlDNiAvKiBBUElVdGlscy5oICovLAogCQkJCTFDQUE4QjRB
MEQzMkMzOUEwMDQxQkNGRiAvKiBKYXZhU2NyaXB0LmggKi8sCiAJCQkJMUNBQThCNEIwRDMyQzM5
QTAwNDFCQ0ZGIC8qIEphdmFTY3JpcHRDb3JlLmggKi8sCisJCQkJNTNDNEY2NkEyMUIxQTQwOTAw
MkZEMDA5IC8qIEpTQVBJR2xvYmFsT2JqZWN0LmggKi8sCisJCQkJNTNDNEY2NkMyMUIxQTdDQTAw
MkZEMDA5IC8qIEpTQVBJR2xvYmFsT2JqZWN0Lm1tICovLAogCQkJCUJDMDg5NEQ1MEZBRkJBMkQw
MDAwMTg2NSAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgKi8sCiAJCQkJQkMwODk0RDYwRkFGQkEy
RDAwMDAxODY1IC8qIEpTQVBJVmFsdWVXcmFwcGVyLmggKi8sCiAJCQkJQzJDRjM5QzAxNkUxNUE4
MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5oICovLApAQCAtNTk3OCw2ICs1OTkyLDkg
QEAKIAkJCQlBNTUyQzM3RDFBRERCOEZFMDAxMzk3MjYgLyogSlNSZW1vdGVJbnNwZWN0b3IuY3Bw
ICovLAogCQkJCUE1NTJDMzdFMUFEREI4RkUwMDEzOTcyNiAvKiBKU1JlbW90ZUluc3BlY3Rvci5o
ICovLAogCQkJCTk1QzE4RDNFMEM5MEU3RUYwMEU3MkY3MyAvKiBKU1JldGFpblB0ci5oICovLAor
CQkJCTUzRUUwMUI1MjE4RjY5MEYwMEFEMUY4RCAvKiBKU1NjcmlwdC5oICovLAorCQkJCTUzRUUw
MUI0MjE4RjY5MEUwMEFEMUY4RCAvKiBKU1NjcmlwdC5tbSAqLywKKwkJCQk1M0VFMDFCNzIxOEY3
RUZGMDBBRDFGOEQgLyogSlNTY3JpcHRJbnRlcm5hbC5oICovLAogCQkJCUE3QzBDNEFBMTY3QzA4
Q0QwMDE3MDExRCAvKiBKU1NjcmlwdFJlZi5jcHAgKi8sCiAJCQkJQTdDMEM0QUIxNjdDMDhDRDAw
MTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0ZS5oICovLAogCQkJCTE0ODJCNzRDMEE0MzAzMjgw
MDUxN0NGQyAvKiBKU1N0cmluZ1JlZi5jcHAgKi8sCkBAIC02Mjc4LDYgKzYyOTUsMTUgQEAKIAkJ
CXBhdGggPSAidW5pZmllZC1zb3VyY2VzIjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJ
CX07CisJCTUzQzNENUUzMjFFQ0U2OEUwMDg3RkRGQyAvKiB0ZXN0YXBpU2NyaXB0cyAqLyA9IHsK
KwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNTNDM0Q1RTQyMUVDRTZD
RTAwODdGREZDIC8qIGJhc2ljLmpzICovLAorCQkJKTsKKwkJCW5hbWUgPSB0ZXN0YXBpU2NyaXB0
czsKKwkJCXBhdGggPSBBUEkvdGVzdHMvdGVzdGFwaVNjcmlwdHM7CisJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOworCQl9OwogCQk2NTBGREY4RDA5RDBGQ0E3MDA3NjlFNTQgLyogRGVyaXZlZCBT
b3VyY2VzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTkx
NjYsNiArOTE5Miw3IEBACiAJCQkJMEY1RUY5MUYxNjg3OEY3RDAwM0U1QzI1IC8qIEpJVFRodW5r
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDNzEyRTMxN0NEODc5MzAwOENDOTNDIC8qIEpJVFRv
REZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlEQzAx
ODQxOTFEMTBDMTg5MDA1N0IwNTMgLyogSklUV29ya2xpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUzQzRGNjZCMjFCMUE0MDkwMDJGRDAwOSAvKiBKU0FQSUdsb2JhbE9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODQwNDgwMTMxMDIxQTFEOTAwOEU3RjAxIC8qIEpTQVBJVmFsdWVXcmFwcGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkNGMzlDMjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElX
cmFwcGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNzBFMTZGNUNEMDBCMzQ0
NjAgLyogSlNBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC05Mjg2LDggKzkzMTMsMTAgQEAKIAkJ
CQlCQzE4QzQyNjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNSZXRhaW5QdHIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUzNDYzODcxMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQ4NzRBRTYxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTUzRUUwMUI2MjE4RjY5MTYwMEFEMUY4RCAvKiBKU1NjcmlwdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTA2NDMzN0RENEIwNDAyQkFGMzRBNTkyIC8qIEpTU2NyaXB0RmV0
Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMyMDFDMUQxRjhFODIzNjAwNzZBMDMyIC8qIEpT
U2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1M0VFMDFCODIxOEY3
RUZGMDBBRDFGOEQgLyogSlNTY3JpcHRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdD
MEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY5MTlEMTExNTdGMzMyQzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNEY4Mjg4MUUyRkZERTAwMDc1MTg0QyAvKiBK
U1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCBjYmE0YzRiYTYwMDRmOTMwZDVjYTg1NjMzMTBh
NjI0M2UzNjQ0OWU1Li5iZGQ2ZjFlOGVlOThlMjcyZmUzZmY4MjQ5NjY1MWEwOGE1MjU5NzNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC00MSw2ICs0MSw4IEBAIEFQSS9KU1dlYWtQ
cml2YXRlLmNwcAogQVBJL0pTV2Vha1ZhbHVlLmNwcAogQVBJL09wYXF1ZUpTU3RyaW5nLmNwcAog
CitBUEkvSlNBUElHbG9iYWxPYmplY3QubW0KKwogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuY3BwCiBhc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKIGFzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzQ29jb2Eu
dHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggYWNmNGZk
YjAxNmQ4ODU3MDhhNDMwMDkwNDgwOWEyOTVjNTUwZGE4ZS4uODBmMTI2ZTA3ZTNmNWI4YmE2ZTdj
YWIwMzQ3NmJkZjhjYjQwNzYxMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Nv
dXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXNDb2NvYS50
eHQKQEAgLTIyLDYgKzIyLDcgQEAKIC8vIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
IAogQVBJL0pTQVBJV3JhcHBlck9iamVjdC5tbQorQVBJL0pTU2NyaXB0Lm1tCiBBUEkvSlNDb250
ZXh0Lm1tCiBBUEkvSlNNYW5hZ2VkVmFsdWUubW0KIEFQSS9KU1JlbW90ZUluc3BlY3Rvci5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9jb25maWcuaAppbmRleCBlMDIzMmNmNTc4NmFmMGY0NWQwZDEzMDhiNjc2Njgw
NmNhZTRlMDBhLi5lMzY0MzkwZmRkMGY3ZDQ1NzdkY2UxZTQ2ODgzYjdlMTI3ZWE1YzBjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvY29uZmlnLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2NvbmZpZy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCkBAIC0yNCw2ICsyNCw3IEBACiAjZW5kaWYKIAogI2RlZmluZSBKU0NfQVBJX0FWQUlMQUJM
RSguLi4pCisjZGVmaW5lIEpTQ19DTEFTU19BVkFJTEFCTEUoLi4uKSBKU19FWFBPUlQKIC8vIFVz
ZSB6ZXJvIHNpbmNlIGl0IHdpbGwgYmUgbGVzcyB0aGFuIGFueSBwb3NzaWJsZSB2ZXJzaW9uIG51
bWJlci4KICNkZWZpbmUgSlNDX01BQ19WRVJTSU9OX1RCQSAwCiAjZGVmaW5lIEpTQ19JT1NfVkVS
U0lPTl9UQkEgMApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bvc3Rwcm9jZXNz
LWhlYWRlcnMuc2ggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcG9zdHByb2Nlc3MtaGVhZGVycy5z
aAppbmRleCBmZDI4ODM2ZGM4YmRmMWU1ZjQ5MzlmNDI1OTlhMWMwN2Y0ZjliZmM5Li4xMDdhZTFi
ZGFlZDU5NzY2YjE3MGI4NDIxZDcwOGU0YzdiN2Y2NzA5IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcG9zdHByb2Nlc3MtaGVhZGVycy5zaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcG9zdHByb2Nlc3MtaGVhZGVycy5zaApAQCAtNzIsOCArNzIsOCBAQCBmdW5jdGlvbiBy
ZXdyaXRlX2hlYWRlcnMgKCkgewogICAgICAgICAgICAgLWUgcy9KU0NfSU9TX1ZFUlNJT05fVEJB
LyR7SU9TX1ZFUlNJT05fTlVNQkVSfS9nCiAgICAgICAgICAgICAtZSBzL0pTQ19BUElfQVZBSUxB
QkxFL0FQSV9BVkFJTEFCTEUvCiAgICAgICAgICAgICAtZSBzL0pTQ19BUElfREVQUkVDQVRFRC9B
UElfREVQUkVDQVRFRC8KLSAgICAgICAgICAgIC1lICJzL15KU0NfQ0xBU1NfQVZBSUxBQkxFL0pT
Q19FWFRFUk4gQVBJX0FWQUlMQUJMRS8iCi0gICAgICAgICAgICAtZSAicy9eSlNDX0NMQVNTX0RF
UFJFQ0FURUQvSlNDX0VYVEVSTiBBUElfREVQUkVDQVRFRC8iCisgICAgICAgICAgICAtZSAicy9e
SlNDX0NMQVNTX0FWQUlMQUJMRS9KU19FWFBPUlQgQVBJX0FWQUlMQUJMRS8iCisgICAgICAgICAg
ICAtZSAicy9eSlNDX0NMQVNTX0RFUFJFQ0FURUQvSlNfRVhQT1JUIEFQSV9ERVBSRUNBVEVELyIK
ICAgICAgICAgKQogICAgIGVsc2UKICAgICAgICAgU0VEX09QVElPTlMrPSgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcAppbmRleCBjOGQwOGVjZjAyOWI2YTE3YTVm
ODE3ZWZmNzhmMTAyNGY3OGQ3Y2EwLi4xMzgzYTU0YzZmNjk2YTZhZGMyZjQ1ZTgxZDM3NjM4MTM0
Y2E3YjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0
YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuY3BwCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzQsNiArMzQsMjQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK0pTVmFsdWUgY2FsbChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Ms
IGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSkKK3sKKyAgICByZXR1cm4gY2FsbChleGVjLCBmdW5j
dGlvbk9iamVjdCwgZnVuY3Rpb25PYmplY3QsIGFyZ3MsIGVycm9yTWVzc2FnZSk7Cit9CisKK0pT
VmFsdWUgY2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTVmFs
dWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBjb25zdCBjaGFyKiBlcnJvck1lc3Nh
Z2UpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlw
ZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKHZtLCBmdW5jdGlvbk9iamVjdCwgY2FsbERhdGEpOwor
ICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZTo6Tm9uZSkKKyAgICAgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOworCisgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBjYWxsKGV4ZWMsIGZ1bmN0aW9uT2JqZWN0LCBjYWxsVHlwZSwgY2FsbERh
dGEsIHRoaXNWYWx1ZSwgYXJncykpOworfQorCiBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBDYWxsVHlwZSBjYWxsVHlwZSwgY29uc3QgQ2FsbERh
dGEmIGNhbGxEYXRhLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FsbERhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
bGxEYXRhLmgKaW5kZXggY2JmOTE2NzYxYTViMTAzMGZlMTVjYjYyODVhZWFjOTE5ZTA1YmRmYi4u
MDhmNzlkZjRkNjc4MDEzNDQ0YTZhNjM5YWI0ZmZhNDlhZTcxYjVhMCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsNiArNjQsMTAgQEAgZW51bSBjbGFz
cyBQcm9maWxpbmdSZWFzb24gewogICAgIE90aGVyCiB9OwogCisvLyBDb252ZW5pZW5jZSB3cmFw
cGVyIHNvIHlvdSBkb24ndCBuZWVkIHRvIGRlYWwgd2l0aCBDYWxsRGF0YSBhbmQgQ2FsbFR5cGUg
dW5sZXNzIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZW0uCitKU19FWFBPUlRfUFJJVkFURSBKU1Zh
bHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgY29uc3QgQXJnTGlz
dCYsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSk7CitKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVl
IGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVjdCwgSlNWYWx1ZSB0aGlzVmFs
dWUsIGNvbnN0IEFyZ0xpc3QmLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpOworCiBKU19FWFBP
UlRfUFJJVkFURSBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVj
dCwgQ2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgY2FsbChFeGVjU3RhdGUqLCBKU1Zh
bHVlIGZ1bmN0aW9uT2JqZWN0LCBDYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmLCBKU1ZhbHVlIHRo
aXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYsIE5ha2VkUHRyPEV4Y2VwdGlvbj4mIHJldHVybmVkRXhj
ZXB0aW9uKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
cGxldGlvbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNw
cAppbmRleCAxMTAyZjY2YzMyMjZkNzQ1Y2FlOGNmYmEyMGY2YWY0MzM3OWFiZWQ5Li4zZmI0YWI5
ZDNhYTJlMzRiYmNkOWFkZmZhNzMwN2U3MDc2YTQ2MWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBD
b3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDMtMjAxOCBBcHBsZSBJbmMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkg
QXBwbGUgSW5jLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE2MSw2ICsxNjEsMTYgQEAgc3Rh
dGljIEpTSW50ZXJuYWxQcm9taXNlKiByZWplY3RQcm9taXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE8KICAgICByZXR1cm4gZGVmZXJyZWQtPnByb21pc2UoKTsKIH0K
IAorSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRFdmFsdWF0ZU1vZHVsZShFeGVjU3RhdGUqIGV4
ZWMsIFN5bWJvbCogbW9kdWxlSWQsIEpTVmFsdWUgcGFyYW1ldGVycywgSlNWYWx1ZSBzY3JpcHRG
ZXRjaGVyKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVyIGxv
Y2sodm0pOworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmF0b21pY1N0cmluZ1RhYmxlKCkgPT0gVGhy
ZWFkOjpjdXJyZW50KCkuYXRvbWljU3RyaW5nVGFibGUoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
IXZtLmlzQ29sbGVjdG9yQnVzeU9uQ3VycmVudFRocmVhZCgpKTsKKworICAgIHJldHVybiB2bS52
bUVudHJ5R2xvYmFsT2JqZWN0KGV4ZWMpLT5tb2R1bGVMb2FkZXIoKS0+bG9hZEFuZEV2YWx1YXRl
TW9kdWxlKGV4ZWMsIG1vZHVsZUlkLCBwYXJhbWV0ZXJzLCBzY3JpcHRGZXRjaGVyKTsKK30KKwog
SlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRFdmFsdWF0ZU1vZHVsZShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFN0cmluZyYgbW9kdWxlTmFtZSwgSlNWYWx1ZSBwYXJhbWV0ZXJzLCBKU1ZhbHVlIHNj
cmlwdEZldGNoZXIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaAppbmRleCBkZTQ0OGE0MDg0NzFjNzQyZTZmMjI4
OGYxYWE3MjRlMzNmODk3NDk3Li44MjdlNjFmM2M2MWQwY2I3YmJlNzVhNjEyNzcxMjRmYjBkYTcy
YWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9u
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5oCkBAIC0x
LDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1r
QHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMzLDYgKzMzLDcg
QEAgY2xhc3MgRXhlY1N0YXRlOwogY2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBQYXJzZXJFcnJvcjsK
IGNsYXNzIFNvdXJjZUNvZGU7CitjbGFzcyBTeW1ib2w7CiBjbGFzcyBWTTsKIGNsYXNzIEpTSW50
ZXJuYWxQcm9taXNlOwogCkBAIC01Nyw2ICs1OCw3IEBAIGlubGluZSBKU1ZhbHVlIHByb2ZpbGVk
RXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9maWxpbmdSZWFzb24gcmVhc29uLCBjb25zdCBT
CiBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uKEV4
ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU09iamVjdCogc2NvcGVFeHRlbnNpb24sIE5h
a2VkUHRyPEV4Y2VwdGlvbj4mIHJldHVybmVkRXhjZXB0aW9uKTsKIAogLy8gTG9hZCB0aGUgbW9k
dWxlIHNvdXJjZSBhbmQgZXZhbHVhdGUgaXQuCitKU19FWFBPUlRfUFJJVkFURSBKU0ludGVybmFs
UHJvbWlzZSogbG9hZEFuZEV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0ZSosIFN5bWJvbCogbW9kdWxl
SWQsIEpTVmFsdWUgcGFyYW1ldGVycywgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKTsKIEpTX0VYUE9S
VF9QUklWQVRFIEpTSW50ZXJuYWxQcm9taXNlKiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoRXhlY1N0
YXRlKiwgY29uc3QgU3RyaW5nJiBtb2R1bGVOYW1lLCBKU1ZhbHVlIHBhcmFtZXRlcnMsIEpTVmFs
dWUgc2NyaXB0RmV0Y2hlcik7CiBKU19FWFBPUlRfUFJJVkFURSBKU0ludGVybmFsUHJvbWlzZSog
bG9hZEFuZEV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1Zh
bHVlIHNjcmlwdEZldGNoZXIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Nhc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5o
CmluZGV4IGEzNjlkNDg5NjYyNjJhYTFiNjI5ZjM0M2NiMjRmMWY3NDYzYWM1ZjcuLjQ5NWM3ZTEx
ZWZmZGY1NTdhOTIyYjQyNjcxN2U4ZTNkNGRiYWNkZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2FzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ2FzdC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTE2NSw0ICsxNjUsMTIgQEAgVG8ganNEeW5hbWljQ2FzdChWTSYgdm0s
IEpTVmFsdWUgZnJvbSkKICAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxUbz4odm0sIGZyb20uYXND
ZWxsKCkpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUbywgdHlwZW5hbWUgRnJvbT4KK1RvIGpz
U2VjdXJlQ2FzdChWTSYgdm0sIEZyb20gZnJvbSkKK3sKKyAgICBhdXRvKiByZXN1bHQgPSBqc0R5
bmFtaWNDYXN0PFRvPih2bSwgZnJvbSk7CisgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCBl
ODZlODJjZmM2NjIxYzJhMzQ5MzA3OWJmOGE0MjllNjRmNTg1MTBkLi5lOWQyZWE1OGZiNDdmYjQz
YjY2MWVkZWJhZGM0NGJlNmE5YjVkMTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJsb28u
Y2EpCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSAiRXJyb3Iu
aCIKICNpbmNsdWRlICJFcnJvckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiRXJyb3JQcm90b3R5
cGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0cnVj
dG9yLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKICNpbmNsdWRlICJHZW5lcmF0
b3JGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCkBAIC0xOTIsNyArMTkzLDcgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLSAgICBzdGF0aWMgSlNWYWx1ZSBjcmVhdGVQcm94eVByb3BlcnR5KFZNJiB2bSwg
SlNPYmplY3QqIG9iamVjdCkKK3N0YXRpYyBKU1ZhbHVlIGNyZWF0ZVByb3h5UHJvcGVydHkoVk0m
IHZtLCBKU09iamVjdCogb2JqZWN0KQogewogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWwgPSBq
c0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihvYmplY3QpOwogICAgIHJldHVybiBQcm94eUNvbnN0cnVj
dG9yOjpjcmVhdGUodm0sIFByb3h5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xv
YmFsLCBnbG9iYWwtPmZ1bmN0aW9uUHJvdG90eXBlKCkpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359060</attachid>
            <date>2019-01-14 11:42:46 -0800</date>
            <delta_ts>2019-01-14 12:45:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191121-20190114114245.patch</filename>
            <type>text/plain</type>
            <size>74290</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5NTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
NDM2OGRjOGIyMDI0NGNlNTNjODQyZTYxNjVkOTk2ZjViYWVhNjEwLi5hYWM2NTIyZGNhM2RlYzBj
YmExMjg1MWYyMWZmN2UwN2RiZmU3NTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5MSBAQAorMjAxOS0wMS0xNCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBKU0Mgc2hvdWxkIGhhdmUgYSBtb2R1bGUgbG9hZGVyIEFQSQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxMTIxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
ZGRzIGEgbmV3IGRlbGVnYXRlIHRvIEpTQ29udGV4dCB0aGF0IGlzIGNhbGxlZCB0byBmZXRjaAor
ICAgICAgICBhbnkgcmVzb2x2ZWQgbW9kdWxlLiBUaGUgcmVzb2x1dGlvbiBvZiBhIG1vZHVsZSBp
ZGVudGlmaWVyIGlzIGNvbXB1dGVkCisgICAgICAgIGFzIGlmIGl0IHdlcmUgYSBVUkwgb24gdGhl
IHdlYiB3aXRoIHRoZSBjYXZlYXQgdGhhdCBpdCBtdXN0IGJlIGEgZmlsZSBVUkwuCisKKyAgICAg
ICAgQSBuZXcgY2xhc3MgSlNTY3JpcHQgaGFzIGFsc28gYmVlbiBhZGRlZCB0aGF0IGlzIHNpbWls
YXIgdG8gSlNTY3JpcHRSZWYuCisgICAgICAgIFJpZ2h0IG5vdyBhbGwgSlNTY3JpcHRzIGFyZSBj
b3BpZWQgaW50byBtZW1vcnkuIEluIHRoZSBmdXR1cmUgd2Ugc2hvdWxkCisgICAgICAgIG1tYXAg
dGhlIHByb3ZpZGVkIGZpbGUgaW50byBtZW1vcnkgc28gdGhlIE9TIGNhbiBldmljdCBpdCB0byBk
aXNrIHVuZGVyCisgICAgICAgIHByZXNzdXJlLiBBZGRpdGlvbmFsbHksIHRoZSBBUEkgZG9lcyBu
b3QgbWFrZSB1c2Ugb2YgdGhlIGNvZGUgc2lnbmluZyBwYXRoCisgICAgICAgIG5vciB0aGUgYnl0
ZWNvZGUgY2FjaGluZyBwYXRoLCB3aGljaCB3ZSB3aWxsIGFkZCBpbiBzdWJzZXF1ZW50IHBhdGNo
ZXMuCisKKyAgICAgICAgTGFzdGx5LCBhIGNvdXBsZSBvZiBuZXcgY29udmVuaWVuY2UgbWV0aG9k
cyBoYXZlIGJlZW4gYWRkZWQuIEMgQVBJCisgICAgICAgIGNvbnZlcnNpb24sIGNhbiBub3cgdG9S
ZWYgYSBKU1ZhbHVlIHdpdGgganVzdCBhIHZtIHJhdGhlciB0aGFuCisgICAgICAgIHJlcXVpcmlu
ZyBhbiBFeGVjU3RhdGUuIFNlY29uZGx5LCB0aGVyZSBpcyBub3cgYSBjYWxsIHdyYXBwZXIgdGhh
dAorICAgICAgICBkb2VzIG5vdCByZXF1aXJlIENhbGxEYXRhIGFuZCBDYWxsVHlwZSBzaW5jZSBt
YW55IHBsYWNlcyBkb24ndAorICAgICAgICBjYXJlIGFib3V0IHRoaXMuCisKKyAgICAgICAgKiBB
UEkvQVBJQ2FzdC5oOgorICAgICAgICAodG9SZWYpOgorICAgICAgICAqIEFQSS9KU0FQSUdsb2Jh
bE9iamVjdC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0
dWFsTWFjaGluZUludGVybmFsLmguCisgICAgICAgICogQVBJL0pTQVBJR2xvYmFsT2JqZWN0Lmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpKU0FQSUdsb2JhbE9iamVjdDo6Y3JlYXRlKToKKyAgICAg
ICAgKEpTQzo6SlNBUElHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChK
U0M6OkpTQVBJR2xvYmFsT2JqZWN0OjpKU0FQSUdsb2JhbE9iamVjdCk6CisgICAgICAgICogQVBJ
L0pTQVBJR2xvYmFsT2JqZWN0Lm1tOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNBUElHbG9iYWxP
YmplY3Q6Om1vZHVsZUxvYWRlclJlc29sdmUpOgorICAgICAgICAoSlNDOjpKU0FQSUdsb2JhbE9i
amVjdDo6bW9kdWxlTG9hZGVySW1wb3J0TW9kdWxlKToKKyAgICAgICAgKEpTQzo6SlNBUElHbG9i
YWxPYmplY3Q6Om1vZHVsZUxvYWRlckZldGNoKToKKyAgICAgICAgKEpTQzo6SlNBUElHbG9iYWxP
YmplY3Q6Om1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzKToKKyAgICAgICAg
KiBBUEkvSlNBUElWYWx1ZVdyYXBwZXIuaDoKKyAgICAgICAgKEpTQzo6anNBUElWYWx1ZVdyYXBw
ZXIpOiBEZWxldGVkLgorICAgICAgICAqIEFQSS9KU0NvbnRleHQuaDoKKyAgICAgICAgKiBBUEkv
SlNDb250ZXh0Lm1tOgorICAgICAgICAoLVtKU0NvbnRleHQgbW9kdWxlTG9hZGVyRGVsZWdhdGVd
KToKKyAgICAgICAgKC1bSlNDb250ZXh0IHNldE1vZHVsZUxvYWRlckRlbGVnYXRlOl0pOgorICAg
ICAgICAqIEFQSS9KU0NvbnRleHRJbnRlcm5hbC5oOgorICAgICAgICAqIEFQSS9KU0NvbnRleHRQ
cml2YXRlLmg6CisgICAgICAgICogQVBJL0pTQ29udGV4dFJlZi5jcHA6CisgICAgICAgIChKU0ds
b2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKToKKyAgICAgICAgKiBBUEkvSlNTY3JpcHQuaDogQWRk
ZWQuCisgICAgICAgICogQVBJL0pTU2NyaXB0Lm1tOiBBZGRlZC4KKyAgICAgICAgKCtbSlNTY3Jp
cHQgc2NyaXB0V2l0aFNvdXJjZTppblZpcnR1YWxNYWNoaW5lOl0pOgorICAgICAgICAoZmlsbEJ1
ZmZlcldpdGhDb250ZW50c09mRmlsZSk6CisgICAgICAgICgrW0pTU2NyaXB0IHNjcmlwdEZyb21V
VEY4RmlsZTppblZpcnR1YWxNYWNoaW5lOndpdGhDb2RlU2lnbmluZzphbmRCeXRlY29kZUNhY2hl
Ol0pOgorICAgICAgICAoZ2V0SlNTY3JpcHRTb3VyY2VDb2RlKToKKyAgICAgICAgKiBBUEkvSlNT
Y3JpcHRJbnRlcm5hbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
VmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oLgorICAgICAgICAqIEFQSS9KU1ZhbHVlSW50ZXJuYWwu
aDoKKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmg6CisgICAgICAgICog
QVBJL3Rlc3RzL3Rlc3RhcGkubW06CisgICAgICAgICgrW0pTQ29udGV4dEZldGNoRGVsZWdhdGUg
Y29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl0pOgorICAgICAgICAoLVtKU0NvbnRleHRGZXRjaERl
bGVnYXRlIGNvbnRleHQ6ZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyOndpdGhSZXNvbHZlSGFuZGxl
cjphbmRSZWplY3RIYW5kbGVyOl0pOgorICAgICAgICAoY2hlY2tNb2R1bGVDb2RlUmFuKToKKyAg
ICAgICAgKGNoZWNrTW9kdWxlV2FzUmVqZWN0ZWQpOgorICAgICAgICAodGVzdEZldGNoKToKKyAg
ICAgICAgKHRlc3RGZXRjaFdpdGhUd29DeWNsZSk6CisgICAgICAgICh0ZXN0RmV0Y2hXaXRoVGhy
ZWVDeWNsZSk6CisgICAgICAgICh0ZXN0TG9hZGVyUmVzb2x2ZXNBYnNvbHV0ZVNjcmlwdFVSTCk6
CisgICAgICAgICh0ZXN0TG9hZGVyUmVqZWN0c05pbFNjcmlwdFVSTCk6CisgICAgICAgICh0ZXN0
TG9hZGVyUmVqZWN0c0ZhaWxlZEZldGNoKToKKyAgICAgICAgKHRlc3RJbXBvcnRNb2R1bGVUd2lj
ZSk6CisgICAgICAgICgrW0pTQ29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0ZSBuZXdDb250ZXh0XSk6
CisgICAgICAgIChyZXNvbHZlUGF0aFRvU2NyaXB0cyk6CisgICAgICAgICgtW0pTQ29udGV4dEZp
bGVMb2FkZXJEZWxlZ2F0ZSBjb250ZXh0OmZldGNoTW9kdWxlRm9ySWRlbnRpZmllcjp3aXRoUmVz
b2x2ZUhhbmRsZXI6YW5kUmVqZWN0SGFuZGxlcjpdKToKKyAgICAgICAgKHRlc3RMb2FkQmFzaWNG
aWxlKToKKyAgICAgICAgKHRlc3RPYmplY3RpdmVDQVBJKToKKyAgICAgICAgKiBBUEkvdGVzdHMv
dGVzdGFwaVNjcmlwdHMvYmFzaWMuanM6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmguCisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIGNvbmZpZy5oOgorICAgICAgICAq
IHBvc3Rwcm9jZXNzLWhlYWRlcnMuc2g6CisgICAgICAgICogcnVudGltZS9DYWxsRGF0YS5jcHA6
CisgICAgICAgIChKU0M6OmNhbGwpOgorICAgICAgICAqIHJ1bnRpbWUvQ2FsbERhdGEuaDoKKyAg
ICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpsb2FkQW5kRXZh
bHVhdGVNb2R1bGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGxldGlvbi5oOgorICAgICAgICAq
IHJ1bnRpbWUvSlNDYXN0Lmg6CisgICAgICAgIChKU0M6OmpzU2VjdXJlQ2FzdCk6CisgICAgICAg
ICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmNyZWF0ZVByb3h5
UHJvcGVydHkpOgorCiAyMDE4LTEyLTMxICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIFNvdXJjZVByb3ZpZGVycyBzaG91bGQgdXNlIGFuIGFjdHVhbCBV
UkwgaW5zdGVhZCBvZiBhIHN0cmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9BUElDYXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNhc3QuaAppbmRl
eCAzYjU1OTExOWUyMmExZTU2ODgwODg3MjdmOWJhN2RjYjI4MjRhZjRkLi5hZTliYzA3YmViOTNh
YjI4ODFkYzRhNWFkNTRlNDk5YzFjYTM5ZDRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0FQSUNhc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0FQSUNh
c3QuaApAQCAtMTI4LDIxICsxMjgsMjYgQEAgaW5saW5lIEpTQzo6Vk0qIHRvSlMoSlNDb250ZXh0
R3JvdXBSZWYgZykKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0M6OlZNKj4oY29uc3Rf
Y2FzdDxPcGFxdWVKU0NvbnRleHRHcm91cCo+KGcpKTsKIH0KIAotaW5saW5lIEpTVmFsdWVSZWYg
dG9SZWYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2KQoraW5saW5lIEpTVmFs
dWVSZWYgdG9SZWYoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2KQogewotICAgIEFTU0VSVChl
eGVjLT52bSgpLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIEFTU0VSVCh2
bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICNpZiAhQ1BVKEFERFJFU1M2NCkK
ICAgICBpZiAoIXYpCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmICghdi5pc0NlbGwoKSkKLSAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZVJlZj4oSlNDOjpqc0FQSVZhbHVl
V3JhcHBlcihleGVjLCB2KS5hc0NlbGwoKSk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PEpTVmFsdWVSZWY+KEpTQzo6SlNBUElWYWx1ZVdyYXBwZXI6OmNyZWF0ZSh2bSwgdikpOwog
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTVmFsdWVSZWY+KHYuYXNDZWxsKCkpOwogI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHZtKTsKICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PEpTVmFsdWVSZWY+KHYpOwogI2VuZGlmCiB9CiAKK2lubGluZSBK
U1ZhbHVlUmVmIHRvUmVmKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdikKK3sK
KyAgICByZXR1cm4gdG9SZWYoZXhlYy0+dm0oKSwgdik7Cit9CisKIGlubGluZSBKU09iamVjdFJl
ZiB0b1JlZihKU0M6OkpTT2JqZWN0KiBvKQogewogICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PEpTT2JqZWN0UmVmPihvKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNBUElHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0FQSUds
b2JhbE9iamVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDc1YzU4ZDQ5OWFjNDcyNTZlYzhkZTdkYTEyNjAx
ZDNjNjBhNjMzOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNBUElHbG9iYWxPYmplY3QuY3BwCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkpTQVBJR2xvYmFsT2JqZWN0LmgiCisKKyNpZiAhSlNDX09CSkNfQVBJX0VOQUJMRUQKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0FQSUdsb2JhbE9iamVjdDo6c19p
bmZvID0geyAiR2xvYmFsT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU0FQSUdsb2JhbE9iamVjdCkgfTsKKworY29uc3QgR2xvYmFs
T2JqZWN0TWV0aG9kVGFibGUgSlNBUElHbG9iYWxPYmplY3Q6OnNfZ2xvYmFsT2JqZWN0TWV0aG9k
VGFibGUgPSB7CisgICAgJnN1cHBvcnRzUmljaFNvdXJjZUluZm8sCisgICAgJnNob3VsZEludGVy
cnVwdFNjcmlwdCwKKyAgICAmamF2YVNjcmlwdFJ1bnRpbWVGbGFncywKKyAgICBudWxscHRyLCAv
LyBxdWV1ZVRhc2tUb0V2ZW50TG9vcAorICAgICZzaG91bGRJbnRlcnJ1cHRTY3JpcHRCZWZvcmVU
aW1lb3V0LAorICAgIG51bGxwdHIsIC8vIG1vZHVsZUxvYWRlckltcG9ydE1vZHVsZQorICAgIG51
bGxwdHIsIC8vIG1vZHVsZUxvYWRlclJlc29sdmUKKyAgICBudWxscHRyLCAvLyBtb2R1bGVMb2Fk
ZXJGZXRjaAorICAgIG51bGxwdHIsIC8vIG1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQcm9w
ZXJ0aWVzCisgICAgbnVsbHB0ciwgLy8gbW9kdWxlTG9hZGVyRXZhbHVhdGUKKyAgICBudWxscHRy
LCAvLyBwcm9taXNlUmVqZWN0aW9uVHJhY2tlcgorICAgIG51bGxwdHIsIC8vIGRlZmF1bHRMYW5n
dWFnZQorICAgIG51bGxwdHIsIC8vIGNvbXBpbGVTdHJlYW1pbmcKKyAgICBudWxscHRyLCAvLyBp
bnN0YW50aWF0ZVN0cmVhbWluZworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNBUElHbG9iYWxPYmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZDVmMTJjN2ViZjI4
OTk0MmU2Nzg2MDdmMzdiYWI5Y2U2YzNkZDY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5oCkBAIC0wLDAgKzEsNjQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgSlNBUElHbG9iYWxPYmplY3QgOiBwdWJsaWMgSlNHbG9iYWxPYmplY3QgeworcHVibGljOgor
ICAgIHVzaW5nIEJhc2UgPSBKU0dsb2JhbE9iamVjdDsKKworICAgIERFQ0xBUkVfRVhQT1JUX0lO
Rk87CisgICAgc3RhdGljIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIHNfZ2xvYmFsT2Jq
ZWN0TWV0aG9kVGFibGU7CisKKyAgICBzdGF0aWMgSlNBUElHbG9iYWxPYmplY3QqIGNyZWF0ZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgYXV0byogb2JqZWN0
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBUElHbG9iYWxPYmplY3Q+KHZtLmhlYXAp
KSBKU0FQSUdsb2JhbE9iamVjdCh2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgb2JqZWN0LT5maW5p
c2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorCisgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNWYWx1ZSBwcm90b3R5cGUp
CisgICAgeworICAgICAgICBhdXRvKiByZXN1bHQgPSBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgMCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhHbG9iYWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7CisgICAgICAgIHJlc3VsdC0+c2V0VHJhbnNpdGlvbldhdGNocG9pbnRJc0xpa2VseVRv
QmVGaXJlZCh0cnVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0
aWMgSlNJbnRlcm5hbFByb21pc2UqIG1vZHVsZUxvYWRlckltcG9ydE1vZHVsZShKU0dsb2JhbE9i
amVjdCosIEV4ZWNTdGF0ZSosIEpTTW9kdWxlTG9hZGVyKiwgSlNTdHJpbmcqIG1vZHVsZU5hbWVW
YWx1ZSwgSlNWYWx1ZSBwYXJhbWV0ZXJzLCBjb25zdCBTb3VyY2VPcmlnaW4mKTsKKyAgICBzdGF0
aWMgSWRlbnRpZmllciBtb2R1bGVMb2FkZXJSZXNvbHZlKEpTR2xvYmFsT2JqZWN0KiwgRXhlY1N0
YXRlKiwgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlIGtleVZhbHVlLCBKU1ZhbHVlIHJlZmVycmVy
VmFsdWUsIEpTVmFsdWUpOworICAgIHN0YXRpYyBKU0ludGVybmFsUHJvbWlzZSogbW9kdWxlTG9h
ZGVyRmV0Y2goSlNHbG9iYWxPYmplY3QqLCBFeGVjU3RhdGUqLCBKU01vZHVsZUxvYWRlciosIEpT
VmFsdWUsIEpTVmFsdWUsIEpTVmFsdWUpOworICAgIHN0YXRpYyBKU09iamVjdCogbW9kdWxlTG9h
ZGVyQ3JlYXRlSW1wb3J0TWV0YVByb3BlcnRpZXMoSlNHbG9iYWxPYmplY3QqLCBFeGVjU3RhdGUq
LCBKU01vZHVsZUxvYWRlciosIEpTVmFsdWUsIEpTTW9kdWxlUmVjb3JkKiwgSlNWYWx1ZSk7CisK
K3ByaXZhdGU6CisgICAgSlNBUElHbG9iYWxPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsICZzX2dsb2JhbE9iamVjdE1ldGhv
ZFRhYmxlKQorICAgIHsgfQorfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0FQSUdsb2JhbE9iamVjdC5tbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNBUElHbG9iYWxPYmplY3QubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2NhNGFiOTI1MWY3MWE1NWVkMjQ4NGFj
MTE3NmMzOTA2ZTk5MmNjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9BUEkvSlNBUElHbG9iYWxPYmplY3QubW0KQEAgLTAsMCArMSwyMTcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisj
aW1wb3J0ICJKU0FQSUdsb2JhbE9iamVjdC5oIgorCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQK
KworI2ltcG9ydCAiQVBJQ2FzdC5oIgorI2ltcG9ydCAiQ2F0Y2hTY29wZS5oIgorI2ltcG9ydCAi
Q29tcGxldGlvbi5oIgorI2ltcG9ydCAiRXJyb3IuaCIKKyNpbXBvcnQgIkV4Y2VwdGlvbi5oIgor
I2ltcG9ydCAiSlNDb250ZXh0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTSW50ZXJuYWxQcm9taXNl
RGVmZXJyZWQuaCIKKyNpbXBvcnQgIkpTTmF0aXZlU3RkRnVuY3Rpb24uaCIKKyNpbXBvcnQgIkpT
U2NyaXB0SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkpTU291cmNlQ29kZS5oIgorI2ltcG9ydCAiSlNW
YWx1ZUludGVybmFsLmgiCisjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKKyNp
bXBvcnQgIkphdmFTY3JpcHRDb3JlLmgiCisjaW1wb3J0ICJPYmplY3RDb25zdHJ1Y3Rvci5oIgor
I2ltcG9ydCAiU291cmNlT3JpZ2luLmgiCisKKyNpbXBvcnQgPHd0Zi9VUkwuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU0FQSUdsb2JhbE9iamVjdDo6c19pbmZvID0g
eyAiR2xvYmFsT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU0FQSUdsb2JhbE9iamVjdCkgfTsKKworY29uc3QgR2xvYmFsT2JqZWN0
TWV0aG9kVGFibGUgSlNBUElHbG9iYWxPYmplY3Q6OnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUg
PSB7CisgICAgJnN1cHBvcnRzUmljaFNvdXJjZUluZm8sCisgICAgJnNob3VsZEludGVycnVwdFNj
cmlwdCwKKyAgICAmamF2YVNjcmlwdFJ1bnRpbWVGbGFncywKKyAgICBudWxscHRyLCAvLyBxdWV1
ZVRhc2tUb0V2ZW50TG9vcAorICAgICZzaG91bGRJbnRlcnJ1cHRTY3JpcHRCZWZvcmVUaW1lb3V0
LAorICAgICZtb2R1bGVMb2FkZXJJbXBvcnRNb2R1bGUsIC8vIG1vZHVsZUxvYWRlckltcG9ydE1v
ZHVsZQorICAgICZtb2R1bGVMb2FkZXJSZXNvbHZlLCAvLyBtb2R1bGVMb2FkZXJSZXNvbHZlCisg
ICAgJm1vZHVsZUxvYWRlckZldGNoLCAvLyBtb2R1bGVMb2FkZXJGZXRjaAorICAgICZtb2R1bGVM
b2FkZXJDcmVhdGVJbXBvcnRNZXRhUHJvcGVydGllcywgLy8gbW9kdWxlTG9hZGVyQ3JlYXRlSW1w
b3J0TWV0YVByb3BlcnRpZXMKKyAgICBudWxscHRyLCAvLyBtb2R1bGVMb2FkZXJFdmFsdWF0ZQor
ICAgIG51bGxwdHIsIC8vIHByb21pc2VSZWplY3Rpb25UcmFja2VyCisgICAgbnVsbHB0ciwgLy8g
ZGVmYXVsdExhbmd1YWdlCisgICAgbnVsbHB0ciwgLy8gY29tcGlsZVN0cmVhbWluZworICAgIG51
bGxwdHIsIC8vIGluc3RhbnRpYXRlU3RyZWFtaW5nCit9OworCitJZGVudGlmaWVyIEpTQVBJR2xv
YmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJSZXNvbHZlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgSlNNb2R1bGVMb2FkZXIqLCBKU1ZhbHVlIGtleSwgSlNWYWx1
ZSByZWZlcnJlciwgSlNWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBBU1NFUlRfVU5VU0VEKGds
b2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0ID09IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7
CisgICAgQVNTRVJUKGtleS5pc1N0cmluZygpIHx8IGtleS5pc1N5bWJvbCgpKTsKKyAgICBTdHJp
bmcgbmFtZSA9ICBrZXkudG9XVEZTdHJpbmcoZXhlYyk7CisKKyAgICBVUkwgcmVmZXJyZXJVUkwo
VVJMKCksIGpzQ2FzdDxKU1N0cmluZyo+KHJlZmVycmVyKS0+dHJ5R2V0VmFsdWUoKSk7CisgICAg
UkVMRUFTRV9BU1NFUlQocmVmZXJyZXJVUkwuaXNWYWxpZCgpKTsKKworICAgIFVSTCB1cmwgPSBV
UkwocmVmZXJyZXJVUkwsIG5hbWUpOworICAgIGlmICh1cmwuaXNWYWxpZCgpKQorICAgICAgICBy
ZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCB1cmwpOworCisgICAgdGhyb3dWTUVy
cm9yKGV4ZWMsIHNjb3BlLCAiQ291bGQgbm90IGZvcm0gdmFsaWQgVVJMIGZyb20gaWRlbnRpZmll
ciBhbmQgYmFzZSJfcyk7CisgICAgcmV0dXJuIHsgfTsKK30KKworSlNJbnRlcm5hbFByb21pc2Uq
IEpTQVBJR2xvYmFsT2JqZWN0Ojptb2R1bGVMb2FkZXJJbXBvcnRNb2R1bGUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU01vZHVsZUxvYWRlciosIEpTU3Ry
aW5nKiBzcGVjaWZpZXJWYWx1ZSwgSlNWYWx1ZSwgY29uc3QgU291cmNlT3JpZ2luJiBzb3VyY2VP
cmlnaW4pCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBhdXRvIHJlamVjdCA9IFsmXSAoSlNW
YWx1ZSBleGNlcHRpb24pIC0+IEpTSW50ZXJuYWxQcm9taXNlKiB7CisgICAgICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIGF1dG8qIHByb21pc2UgPSBKU0ludGVybmFsUHJvbWlz
ZURlZmVycmVkOjp0cnlDcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgc2NvcGUu
Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIHByb21pc2UtPnJlamVjdChleGVjLCBl
eGNlcHRpb24pOworICAgIH07CisKKyAgICBhdXRvIGltcG9ydCA9IFsmXSAoVVJMJiB1cmwpIHsK
KyAgICAgICAgYXV0byByZXN1bHQgPSBpbXBvcnRNb2R1bGUoZXhlYywgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZygmdm0sIHVybCksIGpzVW5kZWZpbmVkKCksIGpzVW5kZWZpbmVkKCkpOworICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJuIHJl
amVjdChzY29wZS5leGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfTsK
KworICAgIGF1dG8gc3BlY2lmaWVyID0gc3BlY2lmaWVyVmFsdWUtPnZhbHVlKGV4ZWMpOworICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgSlNWYWx1ZSBleGNl
cHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24o
KTsKKyAgICAgICAgcmV0dXJuIHJlamVjdChleGNlcHRpb24pOworICAgIH0KKworICAgIFVSTCBh
YnNvbHV0ZVVSTChVUkwoKSwgc3BlY2lmaWVyKTsKKyAgICBpZiAoYWJzb2x1dGVVUkwuaXNWYWxp
ZCgpKQorICAgICAgICByZXR1cm4gaW1wb3J0KGFic29sdXRlVVJMKTsKKworICAgIGlmICghc3Bl
Y2lmaWVyLnN0YXJ0c1dpdGgoJy8nKSAmJiAhc3BlY2lmaWVyLnN0YXJ0c1dpdGgoIi4vIikgJiYg
IXNwZWNpZmllci5zdGFydHNXaXRoKCIuLi8iKSkKKyAgICAgICAgcmV0dXJuIHJlamVjdChjcmVh
dGVFcnJvcihleGVjLCAiTW9kdWxlIHNwZWNpZmllciBkb2VzIG5vdCBzdGFydCB3aXRoIFwiL1wi
LCBcIi4vXCIsIG9yIFwiLi4vXCIuIl9zKSk7CisKKyAgICBpZiAoc3BlY2lmaWVyLnN0YXJ0c1dp
dGgoJy8nKSkgeworICAgICAgICBhYnNvbHV0ZVVSTCA9IFVSTChVUkwoeyB9LCAiZmlsZTovLyIp
LCBzcGVjaWZpZXIpOworICAgICAgICBpZiAoYWJzb2x1dGVVUkwuaXNWYWxpZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGltcG9ydChhYnNvbHV0ZVVSTCk7CisgICAgfQorCisgICAgYXV0byBub0Jh
c2VFcnJvck1lc3NhZ2UgPSAiQ291bGQgbm90IGRldGVybWluZSB0aGUgYmFzZSBVUkwgZm9yIGxv
YWRpbmcuIl9zOworICAgIGlmIChzb3VyY2VPcmlnaW4uaXNOdWxsKCkpCisgICAgICAgIHJldHVy
biByZWplY3QoY3JlYXRlRXJyb3IoZXhlYywgbm9CYXNlRXJyb3JNZXNzYWdlKSk7CisKKyAgICBh
dXRvIHJlZmVycmVyID0gc291cmNlT3JpZ2luLnN0cmluZygpOworICAgIFVSTCBiYXNlVVJMKFVS
TCgpLCByZWZlcnJlcik7CisgICAgaWYgKCFiYXNlVVJMLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0
dXJuIHJlamVjdChjcmVhdGVFcnJvcihleGVjLCBub0Jhc2VFcnJvck1lc3NhZ2UpKTsKKworICAg
IFVSTCB1cmwoYmFzZVVSTCwgc3BlY2lmaWVyKTsKKyAgICBpZiAoIXVybC5pc1ZhbGlkKCkpCisg
ICAgICAgIHJldHVybiByZWplY3QoY3JlYXRlRXJyb3IoZXhlYywgImNvdWxkIG5vdCBkZXRlcm1p
bmUgYSB2YWxpZCBVUkwgZm9yIG1vZHVsZSBzcGVjaWZpZXIiX3MpKTsKKworICAgIHJldHVybiBp
bXBvcnQodXJsKTsKK30KKworSlNJbnRlcm5hbFByb21pc2UqIEpTQVBJR2xvYmFsT2JqZWN0Ojpt
b2R1bGVMb2FkZXJGZXRjaChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIEpTTW9kdWxlTG9hZGVyKiwgSlNWYWx1ZSBrZXksIEpTVmFsdWUsIEpTVmFsdWUpCit7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgIEFTU0VSVChnbG9iYWxPYmplY3QgPT0gZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKKyAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbSlNDb250
ZXh0IGNvbnRleHRXaXRoSlNHbG9iYWxDb250ZXh0UmVmOnRvR2xvYmFsUmVmKGdsb2JhbE9iamVj
dC0+Z2xvYmFsRXhlYygpKV07CisKKyAgICBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkKiBkZWZl
cnJlZCA9IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQ6OnRyeUNyZWF0ZShleGVjLCBnbG9iYWxP
YmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworCisgICAg
SWRlbnRpZmllciBtb2R1bGVLZXkgPSBrZXkudG9Qcm9wZXJ0eUtleShleGVjKTsKKyAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9u
ID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Cisg
ICAgICAgIHJldHVybiBkZWZlcnJlZC0+cmVqZWN0KGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgfQor
CisgICAgaWYgKFVOTElLRUxZKCFbY29udGV4dCBtb2R1bGVMb2FkZXJEZWxlZ2F0ZV0pKQorICAg
ICAgICByZXR1cm4gZGVmZXJyZWQtPnJlamVjdChleGVjLCBjcmVhdGVFcnJvcihleGVjLCAiTm8g
bW9kdWxlIGxvYWRlciBwcm92aWRlZC4iKSk7CisKKyAgICBhdXRvIGRlZmVycmVkUHJvbWlzZSA9
IFN0cm9uZzxKU0ludGVybmFsUHJvbWlzZURlZmVycmVkPih2bSwgZGVmZXJyZWQpOworICAgIGF1
dG8gc3Ryb25nS2V5ID0gU3Ryb25nPEpTU3RyaW5nPih2bSwganNTZWN1cmVDYXN0PEpTU3RyaW5n
Kj4odm0sIGtleSkpOworICAgIGF1dG8qIHJlc29sdmUgPSBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgInJlc29sdmUiLCBbPV0gKEV4ZWNTdGF0ZSogZXhl
YykgeworICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICAvLyBUaGlzIGNhcHR1
cmVzIHRoZSBnbG9iYWxPYmplY3QgYnV0IHRoYXQncyBvayBiZWNhdXNlIG91ciBzdHJ1Y3R1cmUg
a2VlcHMgaXQgYWxpdmUgYW55d2F5LgorICAgICAgICBKU0NvbnRleHQgKmNvbnRleHQgPSBbSlND
b250ZXh0IGNvbnRleHRXaXRoSlNHbG9iYWxDb250ZXh0UmVmOnRvR2xvYmFsUmVmKGdsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpKV07CisgICAgICAgIGlkIHNjcmlwdCA9IHZhbHVlVG9PYmplY3Qo
Y29udGV4dCwgdG9SZWYoZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpKTsKKworICAgICAgICBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgICAgICBpZiAoVU5MSUtFTFkoIVtzY3JpcHQgaXNL
aW5kT2ZDbGFzczpbSlNTY3JpcHQgY2xhc3NdXSkpIHsKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5k
KGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiRmlyc3QgYXJndW1lbnQgb2YgcmVzb2x1dGlvbiBjYWxs
YmFjayBpcyBub3QgYSBKU1NjcmlwdCIpKTsKKyAgICAgICAgICAgIGNhbGwoZXhlYywgZGVmZXJy
ZWRQcm9taXNlLT5KU1Byb21pc2VEZWZlcnJlZDo6cmVqZWN0KCksIGFyZ3MsICJUaGlzIHNob3Vs
ZCBuZXZlciBiZSBzZWVuLi4uIik7CisgICAgICAgICAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZp
bmVkKCk7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJjZSA9IGdldEpT
U2NyaXB0U291cmNlQ29kZShzdGF0aWNfY2FzdDxKU1NjcmlwdCAqPihzY3JpcHQpKTsKKyAgICAg
ICAgYXJncy5hcHBlbmQoSlNTb3VyY2VDb2RlOjpjcmVhdGUodm0sIG1ha2VTb3VyY2Uoc291cmNl
LCBTb3VyY2VPcmlnaW4obW9kdWxlS2V5LnN0cmluZygpKSwgVVJMKHsgfSwgbW9kdWxlS2V5LnN0
cmluZygpKSwgVGV4dFBvc2l0aW9uKCksIEpTQzo6U291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpN
b2R1bGUpKSk7CisgICAgICAgIGNhbGwoZXhlYywgZGVmZXJyZWRQcm9taXNlLT5KU1Byb21pc2VE
ZWZlcnJlZDo6cmVzb2x2ZSgpLCBhcmdzLCAiVGhpcyBzaG91bGQgbmV2ZXIgYmUgc2Vlbi4uLiIp
OworICAgICAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7CisgICAgfSk7CisKKyAgICBh
dXRvKiByZWplY3QgPSBKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgMSwgInJlamVjdCIsIFs9XSAoRXhlY1N0YXRlKiBleGVjKSB7CisgICAgICAgIE1hcmtlZEFy
Z3VtZW50QnVmZmVyIGFyZ3M7CisgICAgICAgIGFyZ3MuYXBwZW5kKGV4ZWMtPmFyZ3VtZW50KDAp
KTsKKworICAgICAgICBjYWxsKGV4ZWMsIGRlZmVycmVkUHJvbWlzZS0+SlNQcm9taXNlRGVmZXJy
ZWQ6OnJlamVjdCgpLCBhcmdzLCAiVGhpcyBzaG91bGQgbmV2ZXIgYmUgc2Vlbi4uLiIpOworICAg
ICAgICByZXR1cm4gZW5jb2RlZEpTVW5kZWZpbmVkKCk7CisgICAgfSk7CisKKyAgICBbW2NvbnRl
eHQgbW9kdWxlTG9hZGVyRGVsZWdhdGVdIGNvbnRleHQ6Y29udGV4dCBmZXRjaE1vZHVsZUZvcklk
ZW50aWZpZXI6Wzo6SlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnRvUmVmKGV4ZWMsIGtleSkg
aW5Db250ZXh0OmNvbnRleHRdIHdpdGhSZXNvbHZlSGFuZGxlcjpbOjpKU1ZhbHVlIHZhbHVlV2l0
aEpTVmFsdWVSZWY6dG9SZWYoZXhlYywgcmVzb2x2ZSkgaW5Db250ZXh0OmNvbnRleHRdIGFuZFJl
amVjdEhhbmRsZXI6Wzo6SlNWYWx1ZSB2YWx1ZVdpdGhKU1ZhbHVlUmVmOnRvUmVmKGV4ZWMsIHJl
amVjdCkgaW5Db250ZXh0OmNvbnRleHRdXTsKKyAgICBpZiAoY29udGV4dC5leGNlcHRpb24pIHsK
KyAgICAgICAgZGVmZXJyZWQtPnJlamVjdChleGVjLCB0b0pTKGV4ZWMsIFtjb250ZXh0LmV4Y2Vw
dGlvbiBKU1ZhbHVlUmVmXSkpOworICAgICAgICBjb250ZXh0LmV4Y2VwdGlvbiA9IG5pbDsKKyAg
ICB9CisgICAgcmV0dXJuIGRlZmVycmVkLT5wcm9taXNlKCk7Cit9CisKK0pTT2JqZWN0KiBKU0FQ
SUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVyQ3JlYXRlSW1wb3J0TWV0YVByb3BlcnRpZXMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBKU01vZHVsZUxvYWRl
ciosIEpTVmFsdWUga2V5LCBKU01vZHVsZVJlY29yZCosIEpTVmFsdWUpCit7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBKU09iamVjdCogbWV0YVByb3BlcnRpZXMgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChl
eGVjLCBnbG9iYWxPYmplY3QtPm51bGxQcm90b3R5cGVPYmplY3RTdHJ1Y3R1cmUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisKKyAgICBtZXRhUHJvcGVydGll
cy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImZpbGVuYW1lIiks
IGtleSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisKKyAgICBy
ZXR1cm4gbWV0YVByb3BlcnRpZXM7Cit9CisKK30KKworI2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9F
TkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJVmFsdWVX
cmFwcGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQVBJVmFsdWVXcmFwcGVyLmgK
aW5kZXggMDZiMzA3MTAzZWVhMjM0MDU0N2IwMzAyOWNlM2ZiMGU2ZDc2NzYzMy4uYWEyNjA4MmZm
MzViYWQ5MDljMWJiM2E2NDU5MmIwZTFlMTg4NzkwOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0FQSS9KU0FQSVZhbHVlV3JhcHBlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNBUElWYWx1ZVdyYXBwZXIuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBD
b3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC00NCwxMCArNDQsOSBAQCBw
dWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAgc3RhdGljIEpTQVBJVmFs
dWVXcmFwcGVyKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKSAKKyAgICBz
dGF0aWMgSlNBUElWYWx1ZVdyYXBwZXIqIGNyZWF0ZShWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCiAg
ICAgewotICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgICAgICBKU0FQSVZhbHVlV3Jh
cHBlciogd3JhcHBlciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTQVBJVmFsdWVXcmFw
cGVyPih2bS5oZWFwKSkgSlNBUElWYWx1ZVdyYXBwZXIoZXhlYyk7CisgICAgICAgIEpTQVBJVmFs
dWVXcmFwcGVyKiB3cmFwcGVyID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNBUElWYWx1
ZVdyYXBwZXI+KHZtLmhlYXApKSBKU0FQSVZhbHVlV3JhcHBlcih2bSk7CiAgICAgICAgIHdyYXBw
ZXItPmZpbmlzaENyZWF0aW9uKHZtLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiB3cmFwcGVyOwog
ICAgIH0KQEAgLTYxLDE3ICs2MCwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIEpTQVBJVmFsdWVXcmFwcGVyKEV4ZWNTdGF0ZSogZXhlYykKLSAgICAgICAgOiBKU0NlbGwo
ZXhlYy0+dm0oKSwgZXhlYy0+dm0oKS5hcGlXcmFwcGVyU3RydWN0dXJlLmdldCgpKQorICAgIEpT
QVBJVmFsdWVXcmFwcGVyKFZNJiB2bSkKKyAgICAgICAgOiBKU0NlbGwodm0sIHZtLmFwaVdyYXBw
ZXJTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgewogICAgIH0KIAogICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiBtX3ZhbHVlOwogfTsKIAotaW5saW5lIEpTVmFsdWUganNBUElWYWx1ZVdyYXBwZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiBKU0FQSVZhbHVlV3Jh
cHBlcjo6Y3JlYXRlKGV4ZWMsIHZhbHVlKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQuaAppbmRleCA4OWM4N2Y5ZTJlMWZmMWIxNzFiMWVi
YmE4YzQ1MjE1OWY0NGY0NzVhLi4xNzkwZTU5N2I0OGE5YjgzYTk0NWY5MzJiMmVhNGViYjM2M2Vm
Y2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0LmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNyArMzEsNyBAQAog
CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIAotQGNsYXNzIEpTVmlydHVhbE1hY2hpbmUsIEpT
VmFsdWU7CitAY2xhc3MgSlNTY3JpcHQsIEpTVmlydHVhbE1hY2hpbmUsIEpTVmFsdWUsIEpTQ29u
dGV4dDsKIAogLyohCiBAaW50ZXJmYWNlCkBAIC0zOSw3ICszOSw3IEBACiAgSmF2YVNjcmlwdCBl
eGVjdXRpb24gdGFrZXMgcGxhY2Ugd2l0aGluIGEgY29udGV4dCwgYW5kIGFsbCBKYXZhU2NyaXB0
IHZhbHVlcwogIGFyZSB0aWVkIHRvIGEgY29udGV4dC4KICovCi1OU19DTEFTU19BVkFJTEFCTEUo
MTBfOSwgN18wKQorSlNDX0NMQVNTX0FWQUlMQUJMRShtYWNvc3goMTAuOSksIGlvcyg3LjApKQog
QGludGVyZmFjZSBKU0NvbnRleHQgOiBOU09iamVjdAogCiAvKiEKQEAgLTE3Nyw3ICsxNzcsNiBA
QCBOU19DTEFTU19BVkFJTEFCTEUoMTBfOSwgN18wKQogQGRpc2N1c3Npb24gTmFtZSBvZiB0aGUg
SlNDb250ZXh0LiBFeHBvc2VkIHdoZW4gcmVtb3RlIGRlYnVnZ2luZyB0aGUgY29udGV4dC4KICov
CiBAcHJvcGVydHkgKGNvcHkpIE5TU3RyaW5nICpuYW1lIEpTQ19BUElfQVZBSUxBQkxFKG1hY29z
eCgxMC4xMCksIGlvcyg4LjApKTsKLQogQGVuZAogCiAvKiEKQEAgLTIzMSw2ICsyMzAsNyBAQCBO
U19DTEFTU19BVkFJTEFCTEUoMTBfOSwgN18wKQogQHJlc3VsdCBUaGUgQyBBUEkgZXF1aXZhbGVu
dCBvZiB0aGlzIEpTQ29udGV4dC4KICovCiBAcHJvcGVydHkgKHJlYWRvbmx5KSBKU0dsb2JhbENv
bnRleHRSZWYgSlNHbG9iYWxDb250ZXh0UmVmOworCiBAZW5kCiAKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NvbnRleHQubW0gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQppbmRleCAyNzU2NmY0MWI5N2UxYjM5YmRkZTliNDhh
YWE1NTlmMTRjYjczOWVhLi4zYzc3NmQ0ZDkwMGVlMTczMzM2MmFjMjlmNjI0ZjQ0NGQ1NDVlN2I0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dC5tbQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxMSArMjYsMTUgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKIAogI2ltcG9ydCAiQVBJQ2FzdC5oIgorI2ltcG9ydCAiQ29t
cGxldGlvbi5oIgogI2ltcG9ydCAiSlNDSW5saW5lcy5oIgogI2ltcG9ydCAiSlNDb250ZXh0SW50
ZXJuYWwuaCIKICNpbXBvcnQgIkpTQ29udGV4dFByaXZhdGUuaCIKICNpbXBvcnQgIkpTQ29udGV4
dFJlZkludGVybmFsLmgiCiAjaW1wb3J0ICJKU0dsb2JhbE9iamVjdC5oIgorI2ltcG9ydCAiSlNJ
bnRlcm5hbFByb21pc2UuaCIKKyNpbXBvcnQgIkpTTW9kdWxlTG9hZGVyLmgiCisjaW1wb3J0ICJK
U1NjcmlwdEludGVybmFsLmgiCiAjaW1wb3J0ICJKU1ZhbHVlSW50ZXJuYWwuaCIKICNpbXBvcnQg
IkpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNXcmFwcGVyTWFwLmgiCkBA
IC0zOCwxMiArNDIsMTUgQEAKICNpbXBvcnQgIk9iamNSdW50aW1lRXh0cmFzLmgiCiAjaW1wb3J0
ICJTdHJvbmdJbmxpbmVzLmgiCiAKKyNpbXBvcnQgPHd0Zi9XZWFrT2JqQ1B0ci5oPgorCiAjaWYg
SlNDX09CSkNfQVBJX0VOQUJMRUQKIAogQGltcGxlbWVudGF0aW9uIEpTQ29udGV4dCB7CiAgICAg
SlNWaXJ0dWFsTWFjaGluZSAqbV92aXJ0dWFsTWFjaGluZTsKICAgICBKU0dsb2JhbENvbnRleHRS
ZWYgbV9jb250ZXh0OwogICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IG1fZXhjZXB0aW9u
OworICAgIFdlYWtPYmpDUHRyPGlkIDxKU01vZHVsZUxvYWRlckRlbGVnYXRlPj4gbV9tb2R1bGVM
b2FkZXJEZWxlZ2F0ZTsKIH0KIAogLSAoSlNHbG9iYWxDb250ZXh0UmVmKUpTR2xvYmFsQ29udGV4
dFJlZgpAQCAtMjMzLDYgKzI0MCwxNiBAQAogICAgIEpTR2xvYmFsQ29udGV4dFNldERlYnVnZ2Vy
UnVuTG9vcChtX2NvbnRleHQsIHJ1bkxvb3ApOwogfQogCistIChpZDxKU01vZHVsZUxvYWRlckRl
bGVnYXRlPiltb2R1bGVMb2FkZXJEZWxlZ2F0ZQoreworICAgIHJldHVybiBtX21vZHVsZUxvYWRl
ckRlbGVnYXRlLmdldEF1dG9yZWxlYXNlZCgpOworfQorCistICh2b2lkKXNldE1vZHVsZUxvYWRl
ckRlbGVnYXRlOihpZDxKU01vZHVsZUxvYWRlckRlbGVnYXRlPiltb2R1bGVMb2FkZXJEZWxlZ2F0
ZQoreworICAgIG1fbW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBtb2R1bGVMb2FkZXJEZWxlZ2F0ZTsK
K30KKwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gSlNDb250ZXh0KFN1YnNjcmlwdFN1cHBvcnQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dEludGVybmFs
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dEludGVybmFsLmgKaW5kZXgg
MjhmNzA5YzFlNDhmMWUxYTgwMzg1NjUwYWFlNmU0MWNkMzUxNTBmYS4uYWI0NTgyOWYwMDI3ZTRm
YWQ2YmZiZDFhZmM0MDJiM2ExYmU4NWI1OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU0NvbnRleHRJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNDb250ZXh0SW50ZXJuYWwuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBKU0NfT0JKQ19BUElf
RU5BQkxFRAogCi0jaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU0NvbnRleHQuaD4KKyNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFByaXZhdGUuaD4KIAogc3RydWN0IENhbGxiYWNrRGF0
YSB7CiAgICAgQ2FsbGJhY2tEYXRhKiBuZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NvbnRleHRQcml2YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTQ29udGV4dFByaXZhdGUuaAppbmRleCBmZjk2MjJhZGRmNjBiN2MxMDM1N2RhY2NmMWM2ZjQx
ZWNiODYxZjFjLi5kNGUyMDZiMzM1NzVlOWZhNmQ0MTgyZTllMWFkODk0MDU2OGE4Njc3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFByaXZhdGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFByaXZhdGUuaApAQCAtMzAsNiAr
MzAsMjcgQEAKIAogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNDb250ZXh0Lmg+CiAKK0Bwcm90
b2NvbCBKU01vZHVsZUxvYWRlckRlbGVnYXRlIDxOU09iamVjdD4KKworQHJlcXVpcmVkCisKKy8q
ISBAYWJzdHJhY3QgUHJvdmlkZXMgc291cmNlIGNvZGUgZm9yIGFueSBKUyBtb2R1bGUgdGhhdCBp
cyBhY3RpdmVseSBpbXBvcnRlZC4KKyBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCBmb3Igd2hp
Y2ggdGhlIG1vZHVsZSBpcyBiZWluZyByZXF1ZXN0ZWQuCisgQHBhcmFtIGlkZW50aWZpZXIgVGhl
IHJlc29sdmVkIGlkZW50aWZpZXIgZm9yIHRoZSByZXF1ZXN0ZWQgbW9kdWxlLgorIEBwYXJhbSBy
ZXNvbHZlIEEgSlMgZnVuY3Rpb24gdG8gY2FsbCB3aXRoIHRoZSBkZXNpcmVkIHNjcmlwdCBmb3Ig
aWRlbnRpZmllci4KKyBAcGFyYW0gcmVqZWN0IEEgSlMgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGlk
ZW50aWZpZXIgY2Fubm90IGJlIGZldGNoZWQuCisgQGRpc2N1c3Npb24gQ3VycmVudGx5LCBpZGVu
dGlmaWVyIHdpbGwgYWx3YXlzIGJlIGFuIGFic29sdXRlIGZpbGUgVVJMIGNvbXB1dGVkIGZyb20g
c3BlY2lmaWVyIG9mIHRoZSByZXF1ZXN0ZWQgbW9kdWxlIHJlbGF0aXZlIHRvIHRoZSBVUkwgb2Yg
dGhlIHJlcXVlc3Rpbmcgc2NyaXB0LiBJZiB0aGUgcmVxdWVzdGluZyBzY3JpcHQgZG9lcyBub3Qg
aGF2ZSBhIFVSTCBhbmQgdGhlIG1vZHVsZSBzcGVjaWZpZXIgaXMgbm90IGFuIGFic29sdXRlIHBh
dGggdGhlIG1vZHVsZSBsb2FkZXIgd2lsbCBmYWlsIHRvIGxvYWQgdGhlIG1vZHVsZS4KKworIFRo
ZSBmaXJzdCBhcmd1bWVudCB0byByZXNvbHZlIHNob2x1ZCBhbHdheXMgYmUgYSBKU1NjcmlwdCwg
b3RoZXJ3aXNlIHRoZSBtb2R1bGUgbG9hZGVyIHdpbGwgcmVqZWN0IHRoZSBtb2R1bGUuCisKKyBP
bmNlIGFuIGlkZW50aWZpZXIgaGFzIGJlZW4gcmVzb2x2ZWQgb3IgcmVqZWN0ZWQgaW4gYSBnaXZl
biBjb250ZXh0IGl0IHdpbGwgbmV2ZXIgYmUgcmVxdWVzdGVkIGFnYWluLiBJZiBhIHNjcmlwdCBp
cyBzdWNjZXNzZnVsbHkgZXZhbHVhdGVkIGl0IHdpbGwgbm90IGJlIHJlLWV2YWx1YXRlZCBvbiBh
bnkgc3Vic2VxdWVudCBpbXBvcnQuCisKKyBUaGUgVk0gd2lsbCByZXRhaW4gYWxsIGV2YWx1YXRl
ZCBtb2R1bGVzIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbnRleHQuCisgKi8KKy0gKHZvaWQp
Y29udGV4dDooSlNDb250ZXh0ICopY29udGV4dCBmZXRjaE1vZHVsZUZvcklkZW50aWZpZXI6KEpT
VmFsdWUgKilpZGVudGlmaWVyIHdpdGhSZXNvbHZlSGFuZGxlcjooSlNWYWx1ZSAqKXJlc29sdmUg
YW5kUmVqZWN0SGFuZGxlcjooSlNWYWx1ZSAqKXJlamVjdDsKKworQGVuZAorCiBAaW50ZXJmYWNl
IEpTQ29udGV4dChQcml2YXRlKQogCiAvKiEKQEAgLTUwLDYgKzcxLDkgQEAKICovCiBAcHJvcGVy
dHkgKHNldHRlcj1fc2V0RGVidWdnZXJSdW5Mb29wOikgQ0ZSdW5Mb29wUmVmIF9kZWJ1Z2dlclJ1
bkxvb3AgSlNDX0FQSV9BVkFJTEFCTEUobWFjb3N4KDEwLjEwKSwgaW9zKDguMCkpOwogCisvKiEg
QGFic3RyYWN0IFRoZSBkZWxlZ2F0ZSB0aGUgY29udGV4dCB3aWxsIHVzZSB3aGVuIHRyeWluZyB0
byBsb2FkIGEgbW9kdWxlLiBOb3RlLCB0aGlzIGRlbGVnYXRlIHdpbGwgYmUgaWdub3JlZCBmb3Ig
Y29udGV4dHMgcmV0dXJuZWQgYnkgVUlXZWJWaWV3LiAqLworQHByb3BlcnR5IChub25hdG9taWMs
IHdlYWspIGlkIDxKU01vZHVsZUxvYWRlckRlbGVnYXRlPiBtb2R1bGVMb2FkZXJEZWxlZ2F0ZSBK
U0NfQVBJX0FWQUlMQUJMRShtYWNvc3goSlNDX01BQ19UQkEpLCBpb3MoSlNDX0lPU19UQkEpKTsK
KwogQGVuZAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkv
SlNDb250ZXh0UmVmLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVm
LmNwcAppbmRleCBlMThkZmQyMWZmMjg0MDA3ZDAwMzllNjQzMmQ5ZWMzYzRmMWYzMTc3Li45ZjVm
ZGFmYzc4MTk2ZmU0NDhjMThkMDc5MTVlMDRmYTM4Njg0YWFhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ29udGV4dFJlZi5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU0NvbnRleHRSZWYuY3BwCkBAIC0zMCw5ICszMCw5IEBACiAjaW5jbHVkZSAi
QVBJQ2FzdC5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkluaXRpYWxpemVU
aHJlYWRpbmcuaCIKKyNpbmNsdWRlICJKU0FQSUdsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpT
Q2FsbGJhY2tPYmplY3QuaCIKICNpbmNsdWRlICJKU0NsYXNzUmVmLmgiCi0jaW5jbHVkZSAiSlNH
bG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJTb3VyY2VQcm92aWRlci5oIgpAQCAtMTM4LDcgKzEzOCw3IEBAIEpT
R2xvYmFsQ29udGV4dFJlZiBKU0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3VwKEpTQ29udGV4dEdy
b3VwUmVmIGdyb3VwLCBKU0NsYXNzCiAgICAgSlNMb2NrSG9sZGVyIGxvY2tlcih2bS5wdHIoKSk7
CiAKICAgICBpZiAoIWdsb2JhbE9iamVjdENsYXNzKSB7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlKHZtLmdldCgpLCBKU0dsb2Jh
bE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKHZtLmdldCgpLCBqc051bGwoKSkpOworICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gSlNBUElHbG9iYWxPYmplY3Q6OmNyZWF0ZSh2
bS5nZXQoKSwgSlNBUElHbG9iYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSh2bS5nZXQoKSwganNO
dWxsKCkpKTsKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKICAgICAgICAgaWYgKEpTUmVt
b3RlSW5zcGVjdG9yR2V0SW5zcGVjdGlvbkVuYWJsZWRCeURlZmF1bHQoKSkKICAgICAgICAgICAg
IGdsb2JhbE9iamVjdC0+c2V0UmVtb3RlRGVidWdnaW5nRW5hYmxlZCh0cnVlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTY3JpcHQuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9BUEkvSlNTY3JpcHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MGNiNjA5MDg4ZWM4MmY3NDRhYTcy
YTdjZDdjMWQ4ZTEzODUzYzg3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0FQSS9KU1NjcmlwdC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVl
Lmg+CisKKyNpZiBKU0NfT0JKQ19BUElfRU5BQkxFRAorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJ
TgorCitPQkpDX0NMQVNTIEpTVmlydHVhbE1hY2hpbmU7CisKK0pTQ19DTEFTU19BVkFJTEFCTEUo
bWFjb3N4KEpTQ19NQUNfVEJBKSwgaW9zKEpTQ19JT1NfVEJBKSkKK0BpbnRlcmZhY2UgSlNTY3Jp
cHQgOiBOU09iamVjdAorCisvKiEKKyBAbWV0aG9kCisgQGFic3RyYWN0IENyZWF0ZSBhIEpTU2Ny
aXB0IGZvciB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgbWFjaGluZS4KKyBAcGFyYW0gc291cmNlIFRo
ZSBzb3VyY2UgY29kZSB0byB1c2Ugd2hlbiB0aGUgc2NyaXB0IGlzIGV2YWx1YXRlZCBieSB0aGUg
SlMgdm0uCisgQHBhcmFtIHZtIFRoZSBKU1ZpcnR1YWxNYWNoaW5lIHRoZSBzY3JpcHQgY2FuIGJl
IGV2YWx1YXRlZCBpbi4KKyBAcmVzdWx0IFRoZSBuZXcgc2NyaXB0LgorICovCisrIChudWxsYWJs
ZSBpbnN0YW5jZXR5cGUpc2NyaXB0V2l0aFNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2UgaW5WaXJ0
dWFsTWFjaGluZTooSlNWaXJ0dWFsTWFjaGluZSAqKXZtOworCisvKiEKKyBAbWV0aG9kCisgQGFi
c3RyYWN0IENyZWF0ZSBhIEpTU2NyaXB0IGZvciB0aGUgc3BlY2lmaWVkIHZpcnR1YWwgbWFjaGlu
ZSB3aXRoIGEgcGF0aCB0byBhIGNvZGVzaWduaW5nIGFuZCBieXRlY29kZSBjYWNoaW5nLgorIEBw
YXJhbSBmaWxlUGF0aCBBIFVSTCBjb250YWluaW5nIHRoZSBwYXRoIHRvIGEgSlMgc291cmNlIGNv
ZGUgZmlsZSBvbiBkaXNrLgorIEBwYXJhbSB2bSBUaGUgSlNWaXJ0dWFsTWFjaGluZSB0aGUgc2Ny
aXB0IGNhbiBiZSBldmFsdWF0ZWQgaW4uCisgQHBhcmFtIGNvZGVTaWduaW5nUGF0aCBBIFVSTCBj
b250YWluaW5nIHRoZSBwYXRoIHRvIHRoZSBjb2RlU2lnbmluZyBmaWxlIGZvciBmaWxlUGF0aCBv
biBkaXNrLgorIEBwYXJhbSBjYWNoZVBhdGggQSBVUkwgY29udGFpbmluZyB0aGUgcGF0aCB3aGVy
ZSB0aGUgVk0gc2hvdWxkIGNhY2hlIGZvciBmdXR1cmUgZXhlY3V0aW9uLgorIEByZXN1bHQgVGhl
IG5ldyBzY3JpcHQuCisgQGRpc2N1c3Npb24gdGhlIGZpbGVzIGF0IGZpbGVQYXRoLCBjb2RlU2ln
bmluZ1BhdGgsIGFuZCBjYWNoZVBhdGggc2hvdWxkIG5vdCBiZSBleHRlcm5hbGx5IG1vZGlmaWVk
ICBmb3IgdGhlIGxpZmVjeWNsZSBvZiB2bS4gTm90ZSB0aGF0IGNvZGVTaWduaW5nUGF0aCBhbmQg
Y2FjaGVQYXRoIGFyZSBub3QgdXNlZCBjdXJyZW50bHksIGJ1dCB0aGF0IHdpbGwgY2hhbmdlIGlu
IHRoZSBuZWFyIGZ1dHVyZS4KKyAqLworKyAobnVsbGFibGUgaW5zdGFuY2V0eXBlKXNjcmlwdEZy
b21VVEY4RmlsZTooTlNVUkwgKilmaWxlUGF0aCBpblZpcnR1YWxNYWNoaW5lOihKU1ZpcnR1YWxN
YWNoaW5lICopdm0gd2l0aENvZGVTaWduaW5nOihudWxsYWJsZSBOU1VSTCAqKWNvZGVTaWduaW5n
UGF0aCBhbmRCeXRlY29kZUNhY2hlOihudWxsYWJsZSBOU1VSTCAqKWNhY2hlUGF0aDsKKworQGVu
ZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKKworI2VuZGlmIC8vIEpTQ19PQkpDX0FQSV9FTkFC
TEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0Lm1tIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OTZjNDFl
ZjllY2MzOTg0NzAwNmNmYjFiNjU3M2M1MzQ5ZDNmZGRkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdC5tbQpAQCAtMCwwICsxLDEwNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiSlNTY3JpcHRJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJBUElDYXN0Lmgi
CisjaW1wb3J0ICJKU0NvbnRleHRJbnRlcm5hbC5oIgorI2ltcG9ydCAiSlNWYWx1ZVByaXZhdGUu
aCIKKyNpbXBvcnQgIlN5bWJvbC5oIgorCisjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKKworQGlt
cGxlbWVudGF0aW9uIEpTU2NyaXB0IHsKKyAgICBTdHJpbmcgbV9zb3VyY2U7Cit9CisKKysgKGlu
c3RhbmNldHlwZSlzY3JpcHRXaXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJjZSBpblZpcnR1YWxN
YWNoaW5lOihKU1ZpcnR1YWxNYWNoaW5lICopdm0KK3sKKyAgICBVTlVTRURfUEFSQU0odm0pOwor
ICAgIEpTU2NyaXB0ICpyZXN1bHQgPSBbW0pTU2NyaXB0IGFsbG9jXSBpbml0XTsKKyAgICByZXN1
bHQtPm1fc291cmNlID0gc291cmNlOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFZlY3Rvcj4KK3N0YXRpYyBib29sIGZpbGxCdWZmZXJXaXRoQ29udGVudHNPZkZp
bGUoRklMRSogZmlsZSwgVmVjdG9yJiBidWZmZXIpCit7CisgICAgLy8gV2UgbWlnaHQgaGF2ZSBp
bmplY3RlZCAidXNlIHN0cmljdCI7IGF0IHRoZSB0b3AuCisgICAgc2l6ZV90IGluaXRpYWxTaXpl
ID0gYnVmZmVyLnNpemUoKTsKKyAgICBpZiAoZnNlZWsoZmlsZSwgMCwgU0VFS19FTkQpID09IC0x
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbG9uZyBidWZmZXJDYXBhY2l0eSA9IGZ0ZWxs
KGZpbGUpOworICAgIGlmIChidWZmZXJDYXBhY2l0eSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChmc2VlayhmaWxlLCAwLCBTRUVLX1NFVCkgPT0gLTEpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBidWZmZXIucmVzaXplKGJ1ZmZlckNhcGFjaXR5ICsgaW5pdGlhbFNp
emUpOworICAgIHNpemVfdCByZWFkU2l6ZSA9IGZyZWFkKGJ1ZmZlci5kYXRhKCkgKyBpbml0aWFs
U2l6ZSwgMSwgYnVmZmVyLnNpemUoKSwgZmlsZSk7CisgICAgcmV0dXJuIHJlYWRTaXplID09IGJ1
ZmZlci5zaXplKCkgLSBpbml0aWFsU2l6ZTsKK30KKworc3RhdGljIGJvb2wgZmlsbEJ1ZmZlcldp
dGhDb250ZW50c09mRmlsZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBWZWN0b3I8Y2hhcj4mIGJ1
ZmZlcikKK3sKKyAgICBGSUxFKiBmID0gZm9wZW4oZmlsZU5hbWUudXRmOCgpLmRhdGEoKSwgInJi
Iik7CisgICAgaWYgKCFmKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IG9w
ZW4gZmlsZTogJXNcbiIsIGZpbGVOYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgYm9vbCByZXN1bHQgPSBmaWxsQnVmZmVyV2l0aENvbnRlbnRz
T2ZGaWxlKGYsIGJ1ZmZlcik7CisgICAgZmNsb3NlKGYpOworCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworCisrIChpbnN0YW5jZXR5cGUpc2NyaXB0RnJvbVVURjhGaWxlOihOU1VSTCAqKWZpbGVQ
YXRoIGluVmlydHVhbE1hY2hpbmU6KEpTVmlydHVhbE1hY2hpbmUgKil2bSB3aXRoQ29kZVNpZ25p
bmc6KE5TVVJMICopY29kZVNpZ25pbmdQYXRoIGFuZEJ5dGVjb2RlQ2FjaGU6KE5TVVJMICopY2Fj
aGVQYXRoCit7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGNoZWNrIGNvZGVTaWduaW5nLgor
ICAgIFVOVVNFRF9QQVJBTShjb2RlU2lnbmluZ1BhdGgpOworICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBhY3R1YWxseSBjYWNoZSBieXRlY29kZS4KKyAgICBVTlVTRURfUEFSQU0oY2FjaGVQYXRo
KTsKKyAgICBVTlVTRURfUEFSQU0odm0pOworICAgIFVSTCBmaWxlUGF0aFVSTChbZmlsZVBhdGgg
YWJzb2x1dGVVUkxdKTsKKyAgICBpZiAoIWZpbGVQYXRoVVJMLmlzTG9jYWxGaWxlKCkpCisgICAg
ICAgIHJldHVybiBuaWw7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG1tYXAgdGhlIGNvbnRl
bnRzIG9mIHRoZSBmaWxlIGluc3RlYWQgb2YgY29weWluZyBpdCBpbnRvIGRpcnR5IG1lbW9yeS4K
KyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOworICAgIGlmICghZmlsbEJ1ZmZlcldpdGhDb250ZW50
c09mRmlsZShmaWxlUGF0aFVSTC5maWxlU3lzdGVtUGF0aCgpLCBidWZmZXIpKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgSlNTY3JpcHQgKnJlc3VsdCA9IFtbSlNTY3JpcHQgYWxsb2NdIGlu
aXRdOworICAgIHJlc3VsdC0+bV9zb3VyY2UgPSBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZh
bGxiYWNrKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2NvbnN0IFN0cmluZyYgZ2V0SlNTY3JpcHRTb3VyY2VDb2RlKEpTU2NyaXB0ICptb2R1
bGUpIHsgcmV0dXJuIG1vZHVsZS0+bV9zb3VyY2U7IH0KKworQGVuZAorCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTU2NyaXB0SW50ZXJuYWwuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
OTczZWQxYWQ0YTFmYzVmZGYzNWNmOTQ4MjMwMTc5NWFlMWYyZWIzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1NjcmlwdEludGVybmFsLmgKQEAgLTAsMCAr
MSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW1wb3J0ICJKU1NjcmlwdC5oIgorI2ltcG9ydCAiU291cmNlQ29kZS5o
IgorCitPQkpDX0NMQVNTIEpTU2NyaXB0OworCitjb25zdCBTdHJpbmcmIGdldEpTU2NyaXB0U291
cmNlQ29kZShKU1NjcmlwdCAqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWYWx1ZUludGVybmFsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVJ
bnRlcm5hbC5oCmluZGV4IDRmMWE4ZjY5Y2JmY2MyOWFlYjI2NzQ3MzgxZDhkNWY1ZTgxYmFlYWEu
LjU0Yjc1NWVmZmZlNmVkMjRhNWMzMDIyYjdkNGMzYTE4NTAwYjAxZTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZUludGVybmFsLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlSW50ZXJuYWwuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw4ICsyNiw3IEBACiAjaWZuZGVm
IEpTVmFsdWVJbnRlcm5hbF9oCiAjZGVmaW5lIEpTVmFsdWVJbnRlcm5hbF9oCiAKLSNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+Ci0jaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9KU1ZhbHVlLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUHJpdmF0ZS5oPgog
CiAjaWYgSlNDX09CSkNfQVBJX0VOQUJMRUQKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmgKaW5kZXggNWNhOWE3ZjRhMTA3MDQ0
ZDYwOWIxMTI3N2JlODk3NmE0MzY3YWE5Yi4uOTEyMmVkNDlhNGVhMWFhNDllYzY2N2ZlZjY2Mjdm
YzQzYjc3NzE2ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1
YWxNYWNoaW5lSW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmly
dHVhbE1hY2hpbmVJbnRlcm5hbC5oCkBAIC00Niw4ICs0Niw4IEBAIEpTQ29udGV4dEdyb3VwUmVm
IGdldEdyb3VwRnJvbVZpcnR1YWxNYWNoaW5lKEpTVmlydHVhbE1hY2hpbmUgKik7CiAKIC0gKEpT
Q29udGV4dCAqKWNvbnRleHRGb3JHbG9iYWxDb250ZXh0UmVmOihKU0dsb2JhbENvbnRleHRSZWYp
Z2xvYmFsQ29udGV4dDsKIC0gKHZvaWQpYWRkQ29udGV4dDooSlNDb250ZXh0ICopd3JhcHBlciBm
b3JHbG9iYWxDb250ZXh0UmVmOihKU0dsb2JhbENvbnRleHRSZWYpZ2xvYmFsQ29udGV4dDsKLQog
QGVuZAorCiAjZW5kaWYgLy8gZGVmaW5lZChfX09CSkNfXykKIAogdm9pZCBzY2FuRXh0ZXJuYWxP
YmplY3RHcmFwaChKU0M6OlZNJiwgSlNDOjpTbG90VmlzaXRvciYsIHZvaWQqIHJvb3QpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpLm1tCmluZGV4IDM3ZTEzODVjOGM0
ODRlZmFlOGE5YzNmOTJlMTM1Y2E3M2Y5NTkxOTIuLjQzNWZkYmIzNmQyNDQ2ZTg1ZGI1MzEzNjMz
Y2Q3NjRmZWY3OTk4YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVz
dHMvdGVzdGFwaS5tbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3Rh
cGkubW0KQEAgLTMxLDcgKzMxLDkgQEAKICNpbXBvcnQgIkRGR1dvcmtsaXN0LmgiCiAjaW1wb3J0
ICJEYXRlVGVzdHMuaCIKICNpbXBvcnQgIkpTQ2FzdC5oIgorI2ltcG9ydCAiSlNDb250ZXh0UHJp
dmF0ZS5oIgogI2ltcG9ydCAiSlNFeHBvcnRUZXN0cy5oIgorI2ltcG9ydCAiSlNTY3JpcHQuaCIK
ICNpbXBvcnQgIkpTVmFsdWVQcml2YXRlLmgiCiAjaW1wb3J0ICJKU1ZpcnR1YWxNYWNoaW5lSW50
ZXJuYWwuaCIKICNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmVQcml2YXRlLmgiCkBAIC0xODEyLDEy
ICsxODE0LDI0OCBAQCBzdGF0aWMgdm9pZCBwYXJhbGxlbFByb21pc2VSZXNvbHZlVGVzdCgpCiAg
ICAgfQogfQogCit0eXBlZGVmIEpTVmFsdWUgKiheUmVzb2x2ZUJsb2NrKShKU0NvbnRleHQgKiwg
SlNWYWx1ZSAqLCBKU1NjcmlwdCAqKTsKK3R5cGVkZWYgdm9pZCAoXkZldGNoQmxvY2spKEpTQ29u
dGV4dCAqLCBKU1ZhbHVlICosIEpTVmFsdWUgKiwgSlNWYWx1ZSAqKTsKKworQGludGVyZmFjZSBK
U0NvbnRleHRGZXRjaERlbGVnYXRlIDogSlNDb250ZXh0IDxKU01vZHVsZUxvYWRlckRlbGVnYXRl
PgorCisrIChpbnN0YW5jZXR5cGUpY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOihGZXRjaEJsb2Nr
KWJsb2NrOworCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBKU0NvbnRleHRGZXRjaERlbGVnYXRl
IHsKKyAgICBGZXRjaEJsb2NrIG1fZmV0Y2hCbG9jazsKK30KKworKyAoaW5zdGFuY2V0eXBlKWNv
bnRleHRXaXRoQmxvY2tGb3JGZXRjaDooRmV0Y2hCbG9jaylibG9jaworeworICAgIGF1dG8gKnJl
c3VsdCA9IFtbSlNDb250ZXh0RmV0Y2hEZWxlZ2F0ZSBhbGxvY10gaW5pdF07CisgICAgcmVzdWx0
LT5tX2ZldGNoQmxvY2sgPSBibG9jazsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCistICh2b2lk
KWNvbnRleHQ6KEpTQ29udGV4dCAqKWNvbnRleHQgZmV0Y2hNb2R1bGVGb3JJZGVudGlmaWVyOihK
U1ZhbHVlICopaWRlbnRpZmllciB3aXRoUmVzb2x2ZUhhbmRsZXI6KEpTVmFsdWUgKilyZXNvbHZl
IGFuZFJlamVjdEhhbmRsZXI6KEpTVmFsdWUgKilyZWplY3QKK3sKKyAgICBtX2ZldGNoQmxvY2so
Y29udGV4dCwgaWRlbnRpZmllciwgcmVzb2x2ZSwgcmVqZWN0KTsKK30KKworQGVuZAorCitzdGF0
aWMgdm9pZCBjaGVja01vZHVsZUNvZGVSYW4oSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICpw
cm9taXNlLCBKU1ZhbHVlICpleHBlY3RlZCkKK3sKKyAgICBfX2Jsb2NrIEJPT0wgcHJvbWlzZVdh
c1Jlc29sdmVkID0gZmFsc2U7CisgICAgW3Byb21pc2UgaW52b2tlTWV0aG9kOkAidGhlbiIgd2l0
aEFyZ3VtZW50czpAW14oSlNWYWx1ZSAqZXhwb3J0VmFsdWUpIHsKKyAgICAgICAgcHJvbWlzZVdh
c1Jlc29sdmVkID0gdHJ1ZTsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJtb2R1bGUgZXhwb3J0ZWQg
dmFsdWUgJ2V4cCcgaXMgbnVsbCIsIFtleHBvcnRWYWx1ZVtAImV4cCJdIGlzRXF1YWxUb09iamVj
dDpleHBlY3RlZF0pOworICAgICAgICBjaGVja1Jlc3VsdChAInJhbiBpcyAlQCIsIFtjb250ZXh0
W0AicmFuIl0gaXNFcXVhbFRvT2JqZWN0OmV4cGVjdGVkXSk7CisgICAgfSwgXihKU1ZhbHVlICpl
cnJvcikgeworICAgICAgICBOU0xvZyhAIiVAIiwgW2Vycm9yIHRvU3RyaW5nXSk7CisgICAgICAg
IGNoZWNrUmVzdWx0KEAibW9kdWxlIGdyYXBoIHdhcyByZXNvbHZlZCBhcyBleHBlY3RlZCIsIE5P
KTsKKyAgICB9XV07CisgICAgY2hlY2tSZXN1bHQoQCJQcm9taXNlIHdhcyByZXNvbHZlZCIsIHBy
b21pc2VXYXNSZXNvbHZlZCk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrTW9kdWxlV2FzUmVqZWN0
ZWQoSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICpwcm9taXNlKQoreworICAgIF9fYmxvY2sg
Qk9PTCBwcm9taXNlV2FzUmVqZWN0ZWQgPSBmYWxzZTsKKyAgICBbcHJvbWlzZSBpbnZva2VNZXRo
b2Q6QCJ0aGVuIiB3aXRoQXJndW1lbnRzOkBbXigpIHsKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJt
b2R1bGUgd2FzIHJlamVjdGVkIGFzIGV4cGVjdGVkIiwgTk8pOworICAgIH0sIF4oSlNWYWx1ZSAq
ZXJyb3IpIHsKKyAgICAgICAgcHJvbWlzZVdhc1JlamVjdGVkID0gdHJ1ZTsKKyAgICAgICAgTlNM
b2coQCIlQCIsIFtlcnJvciB0b1N0cmluZ10pOworICAgICAgICBjaGVja1Jlc3VsdChAIm1vZHVs
ZSBncmFwaCB3YXMgcmVqZWN0ZWQgd2l0aCBlcnJvciIsICFbZXJyb3IgaXNFcXVhbFdpdGhUeXBl
Q29lcmNpb25Ub09iamVjdDpbSlNWYWx1ZSB2YWx1ZVdpdGhOdWxsSW5Db250ZXh0OmNvbnRleHRd
XSk7CisgICAgfV1dOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmV0Y2goKQoreworICAgIEBhdXRv
cmVsZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZldGNoRGVs
ZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl4oSlNDb250ZXh0ICpjb250ZXh0LCBKU1Zh
bHVlICppZGVudGlmaWVyLCBKU1ZhbHVlICpyZXNvbHZlLCBKU1ZhbHVlICpyZWplY3QpIHsKKyAg
ICAgICAgICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL2RpcmVj
dG9yeS9iYXIuanMiXSkKKyAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50
czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNlOkAiaW1wb3J0IFwiLi4vZm9vLmpzXCI7IGV4
cG9ydCBsZXQgZXhwID0gbnVsbDsiIGluVmlydHVhbE1hY2hpbmU6W2NvbnRleHQgdmlydHVhbE1h
Y2hpbmVdXV1dOworICAgICAgICAgICAgZWxzZSBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2Jq
ZWN0OkAiZmlsZTovLy9mb28uanMiXSkKKyAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0
aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNlOkAiZ2xvYmFsVGhpcy5yYW4g
PSBudWxsOyIgaW5WaXJ0dWFsTWFjaGluZTpbY29udGV4dCB2aXJ0dWFsTWFjaGluZV1dXV07Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgW3JlamVjdCBjYWxsV2l0aEFyZ3VtZW50
czpAW1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6QCJXZWlyZCBwYXRoIiBp
bkNvbnRleHQ6Y29udGV4dF1dXTsKKyAgICAgICAgfV07CisgICAgICAgIGNvbnRleHQubW9kdWxl
TG9hZGVyRGVsZWdhdGUgPSBjb250ZXh0OworICAgICAgICBKU1ZhbHVlICpwcm9taXNlID0gW2Nv
bnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy4vYmFyLmpzJyk7IiB3aXRoU291cmNlVVJM
OltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvZGlyZWN0b3J5IiBpc0RpcmVjdG9yeTpZRVNdXTsK
KyAgICAgICAgSlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE51bGxJbkNvbnRleHQ6
Y29udGV4dF07CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCBwcm9taXNlLCBu
dWxsKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGZXRjaFdpdGhUd29DeWNsZSgpCit7
CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250
ZXh0RmV0Y2hEZWxlZ2F0ZSBjb250ZXh0V2l0aEJsb2NrRm9yRmV0Y2g6XihKU0NvbnRleHQgKmNv
bnRleHQsIEpTVmFsdWUgKmlkZW50aWZpZXIsIEpTVmFsdWUgKnJlc29sdmUsIEpTVmFsdWUgKnJl
amVjdCkgeworICAgICAgICAgICAgaWYgKFtpZGVudGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZp
bGU6Ly8vZGlyZWN0b3J5L2Jhci5qcyJdKQorICAgICAgICAgICAgICAgIFtyZXNvbHZlIGNhbGxX
aXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlwdFdpdGhTb3VyY2U6QCJpbXBvcnQgeyBuIH0g
ZnJvbSBcIi4uL2Zvby5qc1wiOyBleHBvcnQgbGV0IGV4cCA9IG47IiBpblZpcnR1YWxNYWNoaW5l
Oltjb250ZXh0IHZpcnR1YWxNYWNoaW5lXV1dXTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFtpZGVu
dGlmaWVyIGlzRXF1YWxUb09iamVjdDpAImZpbGU6Ly8vZm9vLmpzIl0pCisgICAgICAgICAgICAg
ICAgW3Jlc29sdmUgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNTY3JpcHQgc2NyaXB0V2l0aFNvdXJj
ZTpAImltcG9ydCBcImRpcmVjdG9yeS9iYXIuanNcIjsgZ2xvYmFsVGhpcy5yYW4gPSBudWxsOyBl
eHBvcnQgbGV0IG4gPSBudWxsOyIgaW5WaXJ0dWFsTWFjaGluZTpbY29udGV4dCB2aXJ0dWFsTWFj
aGluZV1dXV07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgW3JlamVjdCBjYWxs
V2l0aEFyZ3VtZW50czpAW1tKU1ZhbHVlIHZhbHVlV2l0aE5ld0Vycm9yRnJvbU1lc3NhZ2U6QCJX
ZWlyZCBwYXRoIiBpbkNvbnRleHQ6Y29udGV4dF1dXTsKKyAgICAgICAgfV07CisgICAgICAgIGNv
bnRleHQubW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBjb250ZXh0OworICAgICAgICBKU1ZhbHVlICpw
cm9taXNlID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJpbXBvcnQoJy4vYmFyLmpzJyk7IiB3
aXRoU291cmNlVVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6QCIvZGlyZWN0b3J5IiBpc0RpcmVj
dG9yeTpZRVNdXTsKKyAgICAgICAgSlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVlIHZhbHVlV2l0aE51
bGxJbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0
LCBwcm9taXNlLCBudWxsKTsKKyAgICB9Cit9CisKKworc3RhdGljIHZvaWQgdGVzdEZldGNoV2l0
aFRocmVlQ3ljbGUoKQoreworICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBhdXRvICpj
b250ZXh0ID0gW0pTQ29udGV4dEZldGNoRGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNo
Ol4oSlNDb250ZXh0ICpjb250ZXh0LCBKU1ZhbHVlICppZGVudGlmaWVyLCBKU1ZhbHVlICpyZXNv
bHZlLCBKU1ZhbHVlICpyZWplY3QpIHsKKyAgICAgICAgICAgIGlmIChbaWRlbnRpZmllciBpc0Vx
dWFsVG9PYmplY3Q6QCJmaWxlOi8vL2RpcmVjdG9yeS9iYXIuanMiXSkKKyAgICAgICAgICAgICAg
ICBbcmVzb2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNl
OkAiaW1wb3J0IHsgbiB9IGZyb20gXCIuLi9mb28uanNcIjsgZXhwb3J0IGxldCBmb28gPSBuOyIg
aW5WaXJ0dWFsTWFjaGluZTpbY29udGV4dCB2aXJ0dWFsTWFjaGluZV1dXV07CisgICAgICAgICAg
ICBlbHNlIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8vL2Zvby5qcyJd
KQorICAgICAgICAgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0
IHNjcmlwdFdpdGhTb3VyY2U6QCJpbXBvcnQgXCJvdGhlckRpcmVjdG9yeS9iYXouanNcIjsgZXhw
b3J0IGxldCBuID0gbnVsbDsiIGluVmlydHVhbE1hY2hpbmU6W2NvbnRleHQgdmlydHVhbE1hY2hp
bmVdXV1dOworICAgICAgICAgICAgZWxzZSBpZiAoW2lkZW50aWZpZXIgaXNFcXVhbFRvT2JqZWN0
OkAiZmlsZTovLy9vdGhlckRpcmVjdG9yeS9iYXouanMiXSkKKyAgICAgICAgICAgICAgICBbcmVz
b2x2ZSBjYWxsV2l0aEFyZ3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNlOkAiaW1w
b3J0IHsgZm9vIH0gZnJvbSBcIi4uL2RpcmVjdG9yeS9iYXIuanNcIjsgZ2xvYmFsVGhpcy5yYW4g
PSBudWxsOyBleHBvcnQgbGV0IGV4cCA9IGZvbzsiIGluVmlydHVhbE1hY2hpbmU6W2NvbnRleHQg
dmlydHVhbE1hY2hpbmVdXV1dOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFty
ZWplY3QgY2FsbFdpdGhBcmd1bWVudHM6QFtbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZyb21N
ZXNzYWdlOkAiV2VpcmQgcGF0aCIgaW5Db250ZXh0OmNvbnRleHRdXV07CisgICAgICAgIH1dOwor
ICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAgICAg
SlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0KCcuLi9v
dGhlckRpcmVjdG9yeS9iYXouanMnKTsiIHdpdGhTb3VyY2VVUkw6W05TVVJMIGZpbGVVUkxXaXRo
UGF0aDpAIi9kaXJlY3RvcnkiIGlzRGlyZWN0b3J5OllFU11dOworICAgICAgICBKU1ZhbHVlICpu
dWxsID0gW0pTVmFsdWUgdmFsdWVXaXRoTnVsbEluQ29udGV4dDpjb250ZXh0XTsKKyAgICAgICAg
Y2hlY2tNb2R1bGVDb2RlUmFuKGNvbnRleHQsIHByb21pc2UsIG51bGwpOworICAgIH0KK30KKwor
c3RhdGljIHZvaWQgdGVzdExvYWRlclJlc29sdmVzQWJzb2x1dGVTY3JpcHRVUkwoKQoreworICAg
IEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZl
dGNoRGVsZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl4oSlNDb250ZXh0ICpjb250ZXh0
LCBKU1ZhbHVlICppZGVudGlmaWVyLCBKU1ZhbHVlICpyZXNvbHZlLCBKU1ZhbHVlICpyZWplY3Qp
IHsKKyAgICAgICAgICAgIGlmIChbaWRlbnRpZmllciBpc0VxdWFsVG9PYmplY3Q6QCJmaWxlOi8v
L2RpcmVjdG9yeS9iYXIuanMiXSkKKyAgICAgICAgICAgICAgICBbcmVzb2x2ZSBjYWxsV2l0aEFy
Z3VtZW50czpAW1tKU1NjcmlwdCBzY3JpcHRXaXRoU291cmNlOkAiZXhwb3J0IGxldCBleHAgPSBu
dWxsOyBnbG9iYWxUaGlzLnJhbiA9IG51bGw7IiBpblZpcnR1YWxNYWNoaW5lOltjb250ZXh0IHZp
cnR1YWxNYWNoaW5lXV1dXTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBbcmVq
ZWN0IGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTVmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVz
c2FnZTpAIldlaXJkIHBhdGgiIGluQ29udGV4dDpjb250ZXh0XV1dOworICAgICAgICB9XTsKKyAg
ICAgICAgY29udGV4dC5tb2R1bGVMb2FkZXJEZWxlZ2F0ZSA9IGNvbnRleHQ7CisgICAgICAgIEpT
VmFsdWUgKnByb21pc2UgPSBbY29udGV4dCBldmFsdWF0ZVNjcmlwdDpAImltcG9ydCgnL2RpcmVj
dG9yeS9iYXIuanMnKTsiXTsKKyAgICAgICAgSlNWYWx1ZSAqbnVsbCA9IFtKU1ZhbHVlIHZhbHVl
V2l0aE51bGxJbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNoZWNrTW9kdWxlQ29kZVJhbihj
b250ZXh0LCBwcm9taXNlLCBudWxsKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RMb2Fk
ZXJSZWplY3RzTmlsU2NyaXB0VVJMKCkKK3sKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAg
ICAgYXV0byAqY29udGV4dCA9IFtKU0NvbnRleHRGZXRjaERlbGVnYXRlIGNvbnRleHRXaXRoQmxv
Y2tGb3JGZXRjaDpeKEpTQ29udGV4dCAqLCBKU1ZhbHVlICosIEpTVmFsdWUgKiwgSlNWYWx1ZSAq
KSB7CisgICAgICAgICAgICBjaGVja1Jlc3VsdChAIkNvZGUgaXMgbm90IHJ1biIsIE5PKTsKKyAg
ICAgICAgfV07CisgICAgICAgIGNvbnRleHQubW9kdWxlTG9hZGVyRGVsZWdhdGUgPSBjb250ZXh0
OworICAgICAgICBKU1ZhbHVlICpwcm9taXNlID0gW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6QCJp
bXBvcnQoJy4uL290aGVyRGlyZWN0b3J5L2Jhei5qcycpOyJdOworICAgICAgICBjaGVja01vZHVs
ZVdhc1JlamVjdGVkKGNvbnRleHQsIHByb21pc2UpOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
dGVzdExvYWRlclJlamVjdHNGYWlsZWRGZXRjaCgpCit7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7
CisgICAgICAgIGF1dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0RmV0Y2hEZWxlZ2F0ZSBjb250ZXh0
V2l0aEJsb2NrRm9yRmV0Y2g6XihKU0NvbnRleHQgKmNvbnRleHQsIEpTVmFsdWUgKiwgSlNWYWx1
ZSAqLCBKU1ZhbHVlICpyZWplY3QpIHsKKyAgICAgICAgICAgIFtyZWplY3QgY2FsbFdpdGhBcmd1
bWVudHM6QFtbSlNWYWx1ZSB2YWx1ZVdpdGhOZXdFcnJvckZyb21NZXNzYWdlOkAiTm9wZSIgaW5D
b250ZXh0OmNvbnRleHRdXV07CisgICAgICAgIH1dOworICAgICAgICBjb250ZXh0Lm1vZHVsZUxv
YWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAgICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250
ZXh0IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0KCcvb3RoZXJEaXJlY3RvcnkvYmF6LmpzJyk7Il07
CisgICAgICAgIGNoZWNrTW9kdWxlV2FzUmVqZWN0ZWQoY29udGV4dCwgcHJvbWlzZSk7CisgICAg
fQorfQorCitzdGF0aWMgdm9pZCB0ZXN0SW1wb3J0TW9kdWxlVHdpY2UoKQoreworICAgIEBhdXRv
cmVsZWFzZXBvb2wgeworICAgICAgICBhdXRvICpjb250ZXh0ID0gW0pTQ29udGV4dEZldGNoRGVs
ZWdhdGUgY29udGV4dFdpdGhCbG9ja0ZvckZldGNoOl4oSlNDb250ZXh0ICogY29udGV4dCwgSlNW
YWx1ZSAqLCBKU1ZhbHVlICpyZXNvbHZlLCBKU1ZhbHVlICopIHsKKyAgICAgICAgICAgIFtyZXNv
bHZlIGNhbGxXaXRoQXJndW1lbnRzOkBbW0pTU2NyaXB0IHNjcmlwdFdpdGhTb3VyY2U6QCJyYW4r
KzsgZXhwb3J0IGxldCBleHAgPSAxOyIgaW5WaXJ0dWFsTWFjaGluZTpbY29udGV4dCB2aXJ0dWFs
TWFjaGluZV1dXV07CisgICAgICAgIH1dOworICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRl
bGVnYXRlID0gY29udGV4dDsKKyAgICAgICAgY29udGV4dFtAInJhbiJdID0gQCgwKTsKKyAgICAg
ICAgSlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0KCcv
YmF6LmpzJyk7Il07CisgICAgICAgIEpTVmFsdWUgKnByb21pc2UyID0gW2NvbnRleHQgZXZhbHVh
dGVTY3JpcHQ6QCJpbXBvcnQoJy9iYXouanMnKTsiXTsKKyAgICAgICAgSlNWYWx1ZSAqb25lID0g
W0pTVmFsdWUgdmFsdWVXaXRoSW50MzI6MSBpbkNvbnRleHQ6Y29udGV4dF07CisgICAgICAgIGNo
ZWNrTW9kdWxlQ29kZVJhbihjb250ZXh0LCBwcm9taXNlLCBvbmUpOworICAgICAgICBjaGVja01v
ZHVsZUNvZGVSYW4oY29udGV4dCwgcHJvbWlzZTIsIG9uZSk7CisgICAgfQorfQorCitAaW50ZXJm
YWNlIEpTQ29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0ZSA6IEpTQ29udGV4dCA8SlNNb2R1bGVMb2Fk
ZXJEZWxlZ2F0ZT4KKworKyAoaW5zdGFuY2V0eXBlKW5ld0NvbnRleHQ7CisKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIEpTQ29udGV4dEZpbGVMb2FkZXJEZWxlZ2F0ZSB7Cit9CisKKysgKGluc3Rh
bmNldHlwZSluZXdDb250ZXh0Cit7CisgICAgYXV0byAqcmVzdWx0ID0gW1tKU0NvbnRleHRGaWxl
TG9hZGVyRGVsZWdhdGUgYWxsb2NdIGluaXRdOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0
YXRpYyBOU1VSTCAqcmVzb2x2ZVBhdGhUb1NjcmlwdHMoKQoreworICAgIE5TU3RyaW5nICphcmcw
ID0gTlNQcm9jZXNzSW5mby5wcm9jZXNzSW5mby5hcmd1bWVudHNbMF07CisgICAgTlNVUkwgKmJh
c2U7CisgICAgaWYgKFthcmcwIGhhc1ByZWZpeDpAIi8iXSkKKyAgICAgICAgYmFzZSA9IFtOU1VS
TCBmaWxlVVJMV2l0aFBhdGg6YXJnMCBpc0RpcmVjdG9yeTpOT107CisgICAgZWxzZSB7CisgICAg
ICAgIGNvbnN0IHNpemVfdCBtYXhMZW5ndGggPSAxMDAwMDsKKyAgICAgICAgY2hhciBjd2RbbWF4
TGVuZ3RoXTsKKyAgICAgICAgaWYgKCFnZXRjd2QoY3dkLCBtYXhMZW5ndGgpKSB7CisgICAgICAg
ICAgICBOU0xvZyhAImdldGN3ZCBlcnJvcmVkIHdpdGggY29kZTogJXMiLCBzdHJlcnJvcihlcnJu
bykpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgICBOU1VSTCAqY3dk
VVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
IiVzIiwgY3dkXV07CisgICAgICAgIGJhc2UgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOmFyZzAg
aXNEaXJlY3Rvcnk6Tk8gcmVsYXRpdmVUb1VSTDpjd2RVUkxdOworICAgIH0KKyAgICByZXR1cm4g
W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpAIi4vdGVzdGFwaVNjcmlwdHMvIiBpc0RpcmVjdG9yeTpZ
RVMgcmVsYXRpdmVUb1VSTDpiYXNlXTsKK30KKworLSAodm9pZCljb250ZXh0OihKU0NvbnRleHQg
Kiljb250ZXh0IGZldGNoTW9kdWxlRm9ySWRlbnRpZmllcjooSlNWYWx1ZSAqKWlkZW50aWZpZXIg
d2l0aFJlc29sdmVIYW5kbGVyOihKU1ZhbHVlICopcmVzb2x2ZSBhbmRSZWplY3RIYW5kbGVyOihK
U1ZhbHVlICopcmVqZWN0Cit7CisgICAgTlNVUkwgKmZpbGVQYXRoID0gW05TVVJMIFVSTFdpdGhT
dHJpbmc6W2lkZW50aWZpZXIgdG9TdHJpbmddXTsKKyAgICBhdXRvICpzY3JpcHQgPSBbSlNTY3Jp
cHQgc2NyaXB0RnJvbVVURjhGaWxlOmZpbGVQYXRoIGluVmlydHVhbE1hY2hpbmU6W2NvbnRleHQg
dmlydHVhbE1hY2hpbmVdIHdpdGhDb2RlU2lnbmluZzpuaWwgYW5kQnl0ZWNvZGVDYWNoZTpuaWxd
OworICAgIGlmIChzY3JpcHQpCisgICAgICAgIFtyZXNvbHZlIGNhbGxXaXRoQXJndW1lbnRzOkBb
c2NyaXB0XV07CisgICAgZWxzZQorICAgICAgICBbcmVqZWN0IGNhbGxXaXRoQXJndW1lbnRzOkBb
W0pTVmFsdWUgdmFsdWVXaXRoTmV3RXJyb3JGcm9tTWVzc2FnZTpAIlVuYWJsZSB0byBjcmVhdGUg
U2NyaXB0IiBpbkNvbnRleHQ6Y29udGV4dF1dXTsKK30KKworQGVuZAorCitzdGF0aWMgdm9pZCB0
ZXN0TG9hZEJhc2ljRmlsZSgpCit7CisgICAgQGF1dG9yZWxlYXNlcG9vbCB7CisgICAgICAgIGF1
dG8gKmNvbnRleHQgPSBbSlNDb250ZXh0RmlsZUxvYWRlckRlbGVnYXRlIG5ld0NvbnRleHRdOwor
ICAgICAgICBjb250ZXh0Lm1vZHVsZUxvYWRlckRlbGVnYXRlID0gY29udGV4dDsKKyAgICAgICAg
SlNWYWx1ZSAqcHJvbWlzZSA9IFtjb250ZXh0IGV2YWx1YXRlU2NyaXB0OkAiaW1wb3J0KCcuL2Jh
c2ljLmpzJyk7IiB3aXRoU291cmNlVVJMOnJlc29sdmVQYXRoVG9TY3JpcHRzKCldOworICAgICAg
ICBKU1ZhbHVlICpudWxsID0gW0pTVmFsdWUgdmFsdWVXaXRoTnVsbEluQ29udGV4dDpjb250ZXh0
XTsKKyAgICAgICAgY2hlY2tNb2R1bGVDb2RlUmFuKGNvbnRleHQsIHByb21pc2UsIG51bGwpOwor
ICAgIH0KK30KKwogdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSSgpCiB7CiAgICAgTlNMb2coQCJUZXN0
aW5nIE9iamVjdGl2ZS1DIEFQSSIpOworCiAgICAgY2hlY2tOZWdhdGl2ZU5TSW50ZWdlcnMoKTsK
ICAgICBydW5KSVRUaHJlYWRMaW1pdFRlc3RzKCk7CiAKKyAgICB0ZXN0TG9hZGVyUmVzb2x2ZXNB
YnNvbHV0ZVNjcmlwdFVSTCgpOworICAgIHRlc3RGZXRjaCgpOworICAgIHRlc3RGZXRjaFdpdGhU
d29DeWNsZSgpOworICAgIHRlc3RGZXRjaFdpdGhUaHJlZUN5Y2xlKCk7CisgICAgdGVzdEltcG9y
dE1vZHVsZVR3aWNlKCk7CisKKyAgICB0ZXN0TG9hZGVyUmVqZWN0c05pbFNjcmlwdFVSTCgpOwor
ICAgIHRlc3RMb2FkZXJSZWplY3RzRmFpbGVkRmV0Y2goKTsKKworICAgIC8vIEZpbGUgbG9hZGlu
ZworICAgIHRlc3RMb2FkQmFzaWNGaWxlKCk7CisKICAgICBwcm9taXNlV2l0aEV4ZWN1dG9yKFJl
c29sdXRpb246OlJlc29sdmVFYWdlcik7CiAgICAgcHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0
aW9uOjpSZWplY3RFYWdlcik7CiAgICAgcHJvbWlzZVdpdGhFeGVjdXRvcihSZXNvbHV0aW9uOjpS
ZXNvbHZlTGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3Rz
L3Rlc3RhcGlTY3JpcHRzL2Jhc2ljLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0
cy90ZXN0YXBpU2NyaXB0cy9iYXNpYy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NTI4YzQ5Y2MyYTc0ZTY2OTky
NjZiMmM4YTJjN2QxMGRhNzc3MjM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0FQSS90ZXN0cy90ZXN0YXBpU2NyaXB0cy9iYXNpYy5qcwpAQCAtMCwwICsxLDI3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK2V4cG9ydCBs
ZXQgZXhwID0gbnVsbDsKK2dsb2JhbFRoaXMucmFuID0gbnVsbDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggZjNlZjFjNDIzODBiM2NlZjJmMDBmYWM2NThlOTJlOWQ2ZTc5OWYwMy4u
ZTFjOWIzMGIwZTRlZjkyYzJhZGFmMDMwY2I4NjcyMmJiMGU4MjUyYiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTEwNTcsNiArMTA1Nyw4IEBACiAJCTUzOUZCOEJBMUM5OURBN0Mw
MDk0MEZBMSAvKiBKU0FycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTM5RkI4QjkxQzk5REE3QzAwOTQwRkExIC8qIEpTQXJyYXlJbmxp
bmVzLmggKi87IH07CiAJCTUzQjRCRDEyMUY2OEIzMjUwMEQyQkVBMyAvKiBXYXNtT3BzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzNCMTVERTFEQzdG
NDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUzQjYwMUVDMjAzNEI4QzUwMDZCRTY2NyAvKiBKU0Nhc3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzQjYwMUVCMjAz
NEI4QzUwMDZCRTY2NyAvKiBKU0Nhc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk1M0MzRDVFNTIxRUNFNzcyMDA4N0ZERkMgLyogYmFzaWMuanMg
aW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1M0MzRDVFNDIxRUNFNkNFMDA4N0ZERkMgLyogYmFzaWMuanMgKi87IH07CisJCTUzQzRGNjZC
MjFCMUE0MDkwMDJGRDAwOSAvKiBKU0FQSUdsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNDNEY2NkEyMUIxQTQwOTAwMkZEMDA5IC8q
IEpTQVBJR2xvYmFsT2JqZWN0LmggKi87IH07CiAJCTUzQzZGRUVGMUU4QURGQTkwMEIxODQyNSAv
KiBXYXNtT3Bjb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1M0M2RkVFRTFFOEFERkE5MDBCMTg0MjUgLyogV2FzbU9wY29kZU9yaWdpbi5o
ICovOyB9OwogCQk1M0NBNzMwQTFFQTUzM0Q4MDA3NjA0OUQgLyogV2FzbUJCUVBsYW4uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzQ0E3MzA4MUVBNTMz
RDgwMDc2MDQ5RCAvKiBXYXNtQkJRUGxhbi5oICovOyB9OwogCQk1M0Q0NDREQzFEQUYwOEFCMDBC
OTI3ODQgLyogQjNXYXNtQWRkcmVzc1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Q0NDREQjFEQUYwOEFCMDBCOTI3ODQgLyogQjNXYXNtQWRk
cmVzc1ZhbHVlLmggKi87IH07CkBAIC0xMDY1LDYgKzEwNjcsOCBAQAogCQk1M0U5RTBBQzFFQUU4
M0RGMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0U5RTBBQTFFQUU4M0RFMDBGRUUyNTEgLyogV2Fz
bU1hY2hpbmVUaHJlYWRzLmggKi87IH07CiAJCTUzRTlFMEFGMUVBRUM0NTcwMEZFRTI1MSAvKiBX
YXNtVGllclVwQ291bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzRTlFMEFFMUVBRUM0NTcwMEZFRTI1MSAvKiBXYXNtVGllclVwQ291bnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0VBRkUyRjIw
OERGQUI0MDA3RDUyNEIgLyogdGVzdGFwaS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzFENEUxOTFGNTlDREQyMDBFQzgzNkMgLyogdGVzdGFwaS5j
cHAgKi87IH07CisJCTUzRUUwMUI2MjE4RjY5MTYwMEFEMUY4RCAvKiBKU1NjcmlwdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFRTAxQjUyMThGNjkw
RjAwQUQxRjhEIC8qIEpTU2NyaXB0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNTNFRTAxQjgyMThGN0VGRjAwQUQxRjhEIC8qIEpTU2NyaXB0SW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
RUUwMUI3MjE4RjdFRkYwMEFEMUY4RCAvKiBKU1NjcmlwdEludGVybmFsLmggKi87IH07CiAJCTUz
RjExRjQxMjA5MTM4RDcwMEU0MTFBNyAvKiBKU0ltbXV0YWJsZUJ1dHRlcmZseS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGMTFGNDAyMDkxMzhENzAw
RTQxMUE3IC8qIEpTSW1tdXRhYmxlQnV0dGVyZmx5LmggKi87IH07CiAJCTUzRjQwRTg1MUQ1OEY5
NzcwMDk5QTFCNiAvKiBXYXNtU2VjdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTg0MUQ1OEY5NzcwMDk5QTFCNiAvKiBXYXNtU2VjdGlv
bnMuaCAqLzsgfTsKIAkJNTNGNDBFOEIxRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBh
cnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNG
NDBFOEExRDU5MDFCQjAwOTlBMUI2IC8qIFdhc21GdW5jdGlvblBhcnNlci5oICovOyB9OwpAQCAt
MjAwMyw5ICsyMDA3LDEwIEBACiAJCTVEQkIxNTExMTMxRDBCMTMwMDU2QUQzNiAvKiBDb3B5IFN1
cHBvcnQgU2NyaXB0ICovID0gewogCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKIAkJ
CWJ1aWxkQWN0aW9uTWFzayA9IDEyOwotCQkJZHN0UGF0aCA9ICIiOworCQkJZHN0UGF0aCA9IHRl
c3RhcGlTY3JpcHRzOwogCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDE2OwogCQkJZmlsZXMgPSAoCisJ
CQkJNTNDM0Q1RTUyMUVDRTc3MjAwODdGREZDIC8qIGJhc2ljLmpzIGluIENvcHkgU3VwcG9ydCBT
Y3JpcHQgKi8sCiAJCQkJRkVDQjhCMkExRDI1Q0I1QTAwNkYyNDYzIC8qIHRlc3RhcGktZnVuY3Rp
b24tb3ZlcnJpZGVzLmpzIGluIENvcHkgU3VwcG9ydCBTY3JpcHQgKi8sCiAJCQkJNURCQjE1MUIx
MzFEMEIzMTAwNTZBRDM2IC8qIHRlc3RhcGkuanMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLywK
IAkJCSk7CkBAIC0zNTU3LDYgKzM1NjIsMTAgQEAKIAkJNTNCMEJFMzUxRTU2MUIwOTAwQThGQzI5
IC8qIFByb3h5YWJsZUFjY2Vzc0Nhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUHJveHlhYmxlQWNjZXNzQ2FzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUzQjBCRTM3MUU1NjFCMjQwMEE4RkMyOSAvKiBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3ND
YXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludHJpbnNpY0dl
dHRlckFjY2Vzc0Nhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0I2MDFF
QjIwMzRCOEM1MDA2QkU2NjcgLyogSlNDYXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2FzdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0MzRDVFNDIxRUNFNkNFMDA4N0ZERkMgLyog
YmFzaWMuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBiYXNpYy5q
czsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNDM0Q1RTYyMUVEMUMwNTAwODdGREZD
IC8qIEpTQVBJR2xvYmFsT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQVBJR2xvYmFs
T2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNDNEY2NkEyMUIxQTQw
OTAwMkZEMDA5IC8qIEpTQVBJR2xvYmFsT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQVBJR2xv
YmFsT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzQzRGNjZDMjFCMUE3
Q0EwMDJGRDAwOSAvKiBKU0FQSUdsb2JhbE9iamVjdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IEpTQVBJR2xvYmFsT2JqZWN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0M2
RkVFRTFFOEFERkE5MDBCMTg0MjUgLyogV2FzbU9wY29kZU9yaWdpbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtT3Bjb2RlT3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUzQzZGRUYwMUU4QUZFMEMwMEIxODQyNSAvKiBXYXNtT3Bjb2RlT3JpZ2lu
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21PcGNvZGVPcmln
aW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0NBNzMwNzFFQTUzM0Q4MDA3
NjA0OUQgLyogV2FzbUJCUVBsYW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2FzbUJCUVBsYW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzU2
OSw2ICszNTc4LDkgQEAKIAkJNTNFOUUwQTkxRUFFODNERTAwRkVFMjUxIC8qIFdhc21NYWNoaW5l
VGhyZWFkcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtTWFj
aGluZVRocmVhZHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0U5RTBBQTFF
QUU4M0RFMDBGRUUyNTEgLyogV2FzbU1hY2hpbmVUaHJlYWRzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdhc21NYWNoaW5lVGhyZWFkcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1M0U5RTBBRTFFQUVDNDU3MDBGRUUyNTEgLyogV2FzbVRpZXJVcENvdW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21UaWVyVXBDb3VudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0VFMDFCNDIxOEY2OTBFMDBBRDFGOEQgLyogSlNT
Y3JpcHQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBKU1Njcmlw
dC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTNFRTAxQjUyMThGNjkwRjAwQUQx
RjhEIC8qIEpTU2NyaXB0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU2Ny
aXB0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzRUUwMUI3MjE4RjdFRkYwMEFE
MUY4RCAvKiBKU1NjcmlwdEludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTU2NyaXB0SW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNG
MTFGNDAyMDkxMzhENzAwRTQxMUE3IC8qIEpTSW1tdXRhYmxlQnV0dGVyZmx5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTSW1tdXRhYmxlQnV0dGVyZmx5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUzRjExRjQyMjA5MTc0OTgwMEU0MTFBNyAvKiBKU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0ltbXV0YWJsZUJ1dHRlcmZseS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUzRjI1NkUxMUI4N0UyODAwMEI0Qjc2OCAvKiBKU1R5cGVkQXJy
YXlWaWV3UHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNTUzOCw2ICs1NTUwLDcgQEAKIAkJMTQxMjExMDAwQTQ4NzcyNjAwNDgwMjU1IC8qIHRl
c3RzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1M0Mz
RDVFMzIxRUNFNjhFMDA4N0ZERkMgLyogdGVzdGFwaVNjcmlwdHMgKi8sCiAJCQkJRkVGMDQwNTAx
QUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5jcHAgKi8sCiAJCQkJRkVGMDQw
NTIxQUFFQzRFRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5oICovLAogCQkJCUMyOUVD
QjAyMTgwNEQwRUQwMEQyQ0JCNCAvKiBDdXJyZW50VGhpc0luc2lkZUJsb2NrR2V0dGVyVGVzdC5o
ICovLApAQCAtNTkzNyw2ICs1OTUwLDkgQEAKIAkJCQk1MzUyOUE0QjFDNDU3Qjc1MDAwQjQ5QzYg
LyogQVBJVXRpbHMuaCAqLywKIAkJCQkxQ0FBOEI0QTBEMzJDMzlBMDA0MUJDRkYgLyogSmF2YVNj
cmlwdC5oICovLAogCQkJCTFDQUE4QjRCMEQzMkMzOUEwMDQxQkNGRiAvKiBKYXZhU2NyaXB0Q29y
ZS5oICovLAorCQkJCTUzQzNENUU2MjFFRDFDMDUwMDg3RkRGQyAvKiBKU0FQSUdsb2JhbE9iamVj
dC5jcHAgKi8sCisJCQkJNTNDNEY2NkEyMUIxQTQwOTAwMkZEMDA5IC8qIEpTQVBJR2xvYmFsT2Jq
ZWN0LmggKi8sCisJCQkJNTNDNEY2NkMyMUIxQTdDQTAwMkZEMDA5IC8qIEpTQVBJR2xvYmFsT2Jq
ZWN0Lm1tICovLAogCQkJCUJDMDg5NEQ1MEZBRkJBMkQwMDAwMTg2NSAvKiBKU0FQSVZhbHVlV3Jh
cHBlci5jcHAgKi8sCiAJCQkJQkMwODk0RDYwRkFGQkEyRDAwMDAxODY1IC8qIEpTQVBJVmFsdWVX
cmFwcGVyLmggKi8sCiAJCQkJQzJDRjM5QzAxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBl
ck9iamVjdC5oICovLApAQCAtNTk3OCw2ICs1OTk0LDkgQEAKIAkJCQlBNTUyQzM3RDFBRERCOEZF
MDAxMzk3MjYgLyogSlNSZW1vdGVJbnNwZWN0b3IuY3BwICovLAogCQkJCUE1NTJDMzdFMUFEREI4
RkUwMDEzOTcyNiAvKiBKU1JlbW90ZUluc3BlY3Rvci5oICovLAogCQkJCTk1QzE4RDNFMEM5MEU3
RUYwMEU3MkY3MyAvKiBKU1JldGFpblB0ci5oICovLAorCQkJCTUzRUUwMUI1MjE4RjY5MEYwMEFE
MUY4RCAvKiBKU1NjcmlwdC5oICovLAorCQkJCTUzRUUwMUI0MjE4RjY5MEUwMEFEMUY4RCAvKiBK
U1NjcmlwdC5tbSAqLywKKwkJCQk1M0VFMDFCNzIxOEY3RUZGMDBBRDFGOEQgLyogSlNTY3JpcHRJ
bnRlcm5hbC5oICovLAogCQkJCUE3QzBDNEFBMTY3QzA4Q0QwMDE3MDExRCAvKiBKU1NjcmlwdFJl
Zi5jcHAgKi8sCiAJCQkJQTdDMEM0QUIxNjdDMDhDRDAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJp
dmF0ZS5oICovLAogCQkJCTE0ODJCNzRDMEE0MzAzMjgwMDUxN0NGQyAvKiBKU1N0cmluZ1JlZi5j
cHAgKi8sCkBAIC02Mjc4LDYgKzYyOTcsMTUgQEAKIAkJCXBhdGggPSAidW5pZmllZC1zb3VyY2Vz
IjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTUzQzNENUUzMjFFQ0U2OEUw
MDg3RkRGQyAvKiB0ZXN0YXBpU2NyaXB0cyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJNTNDM0Q1RTQyMUVDRTZDRTAwODdGREZDIC8qIGJhc2ljLmpzICov
LAorCQkJKTsKKwkJCW5hbWUgPSB0ZXN0YXBpU2NyaXB0czsKKwkJCXBhdGggPSBBUEkvdGVzdHMv
dGVzdGFwaVNjcmlwdHM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk2NTBG
REY4RDA5RDBGQ0E3MDA3NjlFNTQgLyogRGVyaXZlZCBTb3VyY2VzICovID0gewogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTkxNjYsNiArOTE5NCw3IEBACiAJCQkJMEY1
RUY5MUYxNjg3OEY3RDAwM0U1QzI1IC8qIEpJVFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZDNzEyRTMxN0NEODc5MzAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlEQzAxODQxOTFEMTBDMTg5MDA1N0IwNTMgLyog
SklUV29ya2xpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzQzRGNjZCMjFCMUE0MDkwMDJGRDAw
OSAvKiBKU0FQSUdsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQwNDgwMTMxMDIx
QTFEOTAwOEU3RjAxIC8qIEpTQVBJVmFsdWVXcmFwcGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
MkNGMzlDMjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzQxNzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNBcnJheS5oIGluIEhlYWRl
cnMgKi8sCkBAIC05Mjg2LDggKzkzMTUsMTAgQEAKIAkJCQlCQzE4QzQyNjBFMTZGNUNEMDBCMzQ0
NjAgLyogSlNSZXRhaW5QdHIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzNDYzODcxMUU3MENGM0Qw
MEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4NzRBRTYx
NUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzRUUwMUI2
MjE4RjY5MTYwMEFEMUY4RCAvKiBKU1NjcmlwdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTA2NDMz
N0RENEIwNDAyQkFGMzRBNTkyIC8qIEpTU2NyaXB0RmV0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTMyMDFDMUQxRjhFODIzNjAwNzZBMDMyIC8qIEpTU2NyaXB0RmV0Y2hQYXJhbWV0ZXJzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk1M0VFMDFCODIxOEY3RUZGMDBBRDFGOEQgLyogSlNTY3JpcHRJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8q
IEpTU2NyaXB0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMTExNTdGMzMy
QzAwNEE0RTdEIC8qIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNEY4Mjg4MUUyRkZERTAwMDc1MTg0QyAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
SGVhcENlbGxUeXBlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApp
bmRleCBjYmE0YzRiYTYwMDRmOTMwZDVjYTg1NjMzMTBhNjI0M2UzNjQ0OWU1Li4wZTg5MzVlNjEz
MDE5ZDJhMWE4N2E1MjNhOTA3MzNmMzRmN2QwOWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0CkBAIC0yMSw2ICsyMSw3IEBACiAvLyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCiAvLyBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAKK0FQSS9KU0FQSUdsb2JhbE9iamVjdC5jcHAKIEFQSS9KU0FQ
SVZhbHVlV3JhcHBlci5jcHAKIEFQSS9KU0Jhc2UuY3BwCiBBUEkvSlNDVGVzdFJ1bm5lclV0aWxz
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXNDb2NvYS50eHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCBhY2Y0ZmRiMDE2
ZDg4NTcwOGE0MzAwOTA0ODA5YTI5NWM1NTBkYThlLi5hZjZmOWVmNWZjMzNlMDFmMWRlZjY3M2Yx
MjY3OWIxZDc3Nzc2YjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNl
c0NvY29hLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlc0NvY29hLnR4dApA
QCAtMjEsNyArMjEsOSBAQAogLy8gQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgogLy8gVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogCitBUEkvSlNBUElHbG9iYWxPYmplY3QubW0KIEFQSS9KU0FQSVdyYXBw
ZXJPYmplY3QubW0KK0FQSS9KU1NjcmlwdC5tbQogQVBJL0pTQ29udGV4dC5tbQogQVBJL0pTTWFu
YWdlZFZhbHVlLm1tCiBBUEkvSlNSZW1vdGVJbnNwZWN0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvY29uZmlnLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvY29uZmln
LmgKaW5kZXggZTAyMzJjZjU3ODZhZjBmNDVkMGQxMzA4YjY3NjY4MDZjYWU0ZTAwYS4uZTM2NDM5
MGZkZDBmN2Q0NTc3ZGNlMWU0Njg4M2I3ZTEyN2VhNWMwYyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2NvbmZpZy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb25maWcu
aApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVs
IFdlaW5pZyA8c2FtLndlaW5pZ0BnbWFpbC5jb20+CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjQsNiArMjQs
NyBAQAogI2VuZGlmCiAKICNkZWZpbmUgSlNDX0FQSV9BVkFJTEFCTEUoLi4uKQorI2RlZmluZSBK
U0NfQ0xBU1NfQVZBSUxBQkxFKC4uLikgSlNfRVhQT1JUCiAvLyBVc2UgemVybyBzaW5jZSBpdCB3
aWxsIGJlIGxlc3MgdGhhbiBhbnkgcG9zc2libGUgdmVyc2lvbiBudW1iZXIuCiAjZGVmaW5lIEpT
Q19NQUNfVkVSU0lPTl9UQkEgMAogI2RlZmluZSBKU0NfSU9TX1ZFUlNJT05fVEJBIDAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wb3N0cHJvY2Vzcy1oZWFkZXJzLnNoIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Bvc3Rwcm9jZXNzLWhlYWRlcnMuc2gKaW5kZXggZmQyODgzNmRj
OGJkZjFlNWY0OTM5ZjQyNTk5YTFjMDdmNGY5YmZjOS4uMTA3YWUxYmRhZWQ1OTc2NmIxNzBiODQy
MWQ3MDhlNGM3YjdmNjcwOSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bvc3Rw
cm9jZXNzLWhlYWRlcnMuc2gKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bvc3Rwcm9jZXNz
LWhlYWRlcnMuc2gKQEAgLTcyLDggKzcyLDggQEAgZnVuY3Rpb24gcmV3cml0ZV9oZWFkZXJzICgp
IHsKICAgICAgICAgICAgIC1lIHMvSlNDX0lPU19WRVJTSU9OX1RCQS8ke0lPU19WRVJTSU9OX05V
TUJFUn0vZwogICAgICAgICAgICAgLWUgcy9KU0NfQVBJX0FWQUlMQUJMRS9BUElfQVZBSUxBQkxF
LwogICAgICAgICAgICAgLWUgcy9KU0NfQVBJX0RFUFJFQ0FURUQvQVBJX0RFUFJFQ0FURUQvCi0g
ICAgICAgICAgICAtZSAicy9eSlNDX0NMQVNTX0FWQUlMQUJMRS9KU0NfRVhURVJOIEFQSV9BVkFJ
TEFCTEUvIgotICAgICAgICAgICAgLWUgInMvXkpTQ19DTEFTU19ERVBSRUNBVEVEL0pTQ19FWFRF
Uk4gQVBJX0RFUFJFQ0FURUQvIgorICAgICAgICAgICAgLWUgInMvXkpTQ19DTEFTU19BVkFJTEFC
TEUvSlNfRVhQT1JUIEFQSV9BVkFJTEFCTEUvIgorICAgICAgICAgICAgLWUgInMvXkpTQ19DTEFT
U19ERVBSRUNBVEVEL0pTX0VYUE9SVCBBUElfREVQUkVDQVRFRC8iCiAgICAgICAgICkKICAgICBl
bHNlCiAgICAgICAgIFNFRF9PUFRJT05TKz0oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWxsRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9DYWxsRGF0YS5jcHAKaW5kZXggYzhkMDhlY2YwMjliNmExN2E1ZjgxN2VmZjc4ZjEwMjRmNzhk
N2NhMC4uMTM4M2E1NGM2ZjY5NmE2YWRjMmY0NWU4MWQzNzYzODEzNGNhN2IyZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FsbERhdGEuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxEYXRhLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDI0IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCitKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGZ1bmN0aW9uT2JqZWN0LCBjb25zdCBBcmdMaXN0JiBhcmdzLCBjb25zdCBjaGFyKiBlcnJv
ck1lc3NhZ2UpCit7CisgICAgcmV0dXJuIGNhbGwoZXhlYywgZnVuY3Rpb25PYmplY3QsIGZ1bmN0
aW9uT2JqZWN0LCBhcmdzLCBlcnJvck1lc3NhZ2UpOworfQorCitKU1ZhbHVlIGNhbGwoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGZ1bmN0aW9uT2JqZWN0LCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYgYXJncywgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKQoreworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRD
YWxsRGF0YSh2bSwgZnVuY3Rpb25PYmplY3QsIGNhbGxEYXRhKTsKKyAgICBpZiAoY2FsbFR5cGUg
PT0gQ2FsbFR5cGU6Ok5vbmUpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBz
Y29wZSwgZXJyb3JNZXNzYWdlKTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgY2Fs
bChleGVjLCBmdW5jdGlvbk9iamVjdCwgY2FsbFR5cGUsIGNhbGxEYXRhLCB0aGlzVmFsdWUsIGFy
Z3MpKTsKK30KKwogSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBmdW5jdGlv
bk9iamVjdCwgQ2FsbFR5cGUgY2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiBjYWxsRGF0YSwgSlNW
YWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhbGxE
YXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWxsRGF0YS5oCmluZGV4IGNi
ZjkxNjc2MWE1YjEwMzBmZTE1Y2I2Mjg1YWVhYzkxOWUwNWJkZmIuLjA4Zjc5ZGY0ZDY3ODAxMzQ0
NGE2YTYzOWFiNGZmYTQ5YWU3MWI1YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NhbGxEYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FsbERhdGEuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTY0LDYgKzY0LDEwIEBAIGVudW0gY2xhc3MgUHJvZmlsaW5nUmVhc29u
IHsKICAgICBPdGhlcgogfTsKIAorLy8gQ29udmVuaWVuY2Ugd3JhcHBlciBzbyB5b3UgZG9uJ3Qg
bmVlZCB0byBkZWFsIHdpdGggQ2FsbERhdGEgYW5kIENhbGxUeXBlIHVubGVzcyB5b3UgYXJlIGdv
aW5nIHRvIHVzZSB0aGVtLgorSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0
ZSosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIGNvbnN0IEFyZ0xpc3QmLCBjb25zdCBjaGFyKiBl
cnJvck1lc3NhZ2UpOworSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjYWxsKEV4ZWNTdGF0ZSos
IEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0
JiwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKTsKKwogSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1
ZSBjYWxsKEV4ZWNTdGF0ZSosIEpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIENhbGxUeXBlLCBjb25z
dCBDYWxsRGF0YSYsIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CiBKU19FWFBP
UlRfUFJJVkFURSBKU1ZhbHVlIGNhbGwoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5jdGlvbk9iamVj
dCwgQ2FsbFR5cGUsIGNvbnN0IENhbGxEYXRhJiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmLCBOYWtlZFB0cjxFeGNlcHRpb24+JiByZXR1cm5lZEV4Y2VwdGlvbik7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKaW5kZXggMTEwMmY2NmMz
MjI2ZDc0NWNhZThjZmJhMjBmNmFmNDMzNzlhYmVkOS4uM2ZiNGFiOWQzYWEyZTM0YmJjZDlhZGZm
YTczMDdlNzA3NmE0NjFhZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tcGxldGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
cGxldGlvbi5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0y
MDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAx
IFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTgg
QXBwbGUgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4KICAqCiAg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0xNjEsNiArMTYxLDE2IEBAIHN0YXRpYyBKU0ludGVybmFsUHJv
bWlzZSogcmVqZWN0UHJvbWlzZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPCiAgICAgcmV0dXJuIGRlZmVycmVkLT5wcm9taXNlKCk7CiB9CiAKK0pTSW50ZXJuYWxQcm9t
aXNlKiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBTeW1ib2wqIG1vZHVs
ZUlkLCBKU1ZhbHVlIHBhcmFtZXRlcnMsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcikKK3sKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBSRUxF
QVNFX0FTU0VSVCh2bS5hdG9taWNTdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0
b21pY1N0cmluZ1RhYmxlKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1
c3lPbkN1cnJlbnRUaHJlYWQoKSk7CisKKyAgICByZXR1cm4gdm0udm1FbnRyeUdsb2JhbE9iamVj
dChleGVjKS0+bW9kdWxlTG9hZGVyKCktPmxvYWRBbmRFdmFsdWF0ZU1vZHVsZShleGVjLCBtb2R1
bGVJZCwgcGFyYW1ldGVycywgc2NyaXB0RmV0Y2hlcik7Cit9CisKIEpTSW50ZXJuYWxQcm9taXNl
KiBsb2FkQW5kRXZhbHVhdGVNb2R1bGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1v
ZHVsZU5hbWUsIEpTVmFsdWUgcGFyYW1ldGVycywgSlNWYWx1ZSBzY3JpcHRGZXRjaGVyKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21wbGV0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21wbGV0aW9uLmgKaW5kZXggZGU0NDhhNDA4NDcxYzc0MmU2ZjIyODhmMWFhNzI0ZTMzZjg5NzQ5
Ny4uODI3ZTYxZjNjNjFkMGNiN2JiZTc1YTYxMjc3MTI0ZmIwZGE3MmFhZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykK
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMyw2ICszMyw3IEBAIGNsYXNzIEV4ZWNTdGF0
ZTsKIGNsYXNzIEpTT2JqZWN0OwogY2xhc3MgUGFyc2VyRXJyb3I7CiBjbGFzcyBTb3VyY2VDb2Rl
OworY2xhc3MgU3ltYm9sOwogY2xhc3MgVk07CiBjbGFzcyBKU0ludGVybmFsUHJvbWlzZTsKIApA
QCAtNTcsNiArNTgsNyBAQCBpbmxpbmUgSlNWYWx1ZSBwcm9maWxlZEV2YWx1YXRlKEV4ZWNTdGF0
ZSogZXhlYywgUHJvZmlsaW5nUmVhc29uIHJlYXNvbiwgY29uc3QgUwogSlNfRVhQT1JUX1BSSVZB
VEUgSlNWYWx1ZSBldmFsdWF0ZVdpdGhTY29wZUV4dGVuc2lvbihFeGVjU3RhdGUqLCBjb25zdCBT
b3VyY2VDb2RlJiwgSlNPYmplY3QqIHNjb3BlRXh0ZW5zaW9uLCBOYWtlZFB0cjxFeGNlcHRpb24+
JiByZXR1cm5lZEV4Y2VwdGlvbik7CiAKIC8vIExvYWQgdGhlIG1vZHVsZSBzb3VyY2UgYW5kIGV2
YWx1YXRlIGl0LgorSlNfRVhQT1JUX1BSSVZBVEUgSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRF
dmFsdWF0ZU1vZHVsZShFeGVjU3RhdGUqLCBTeW1ib2wqIG1vZHVsZUlkLCBKU1ZhbHVlIHBhcmFt
ZXRlcnMsIEpTVmFsdWUgc2NyaXB0RmV0Y2hlcik7CiBKU19FWFBPUlRfUFJJVkFURSBKU0ludGVy
bmFsUHJvbWlzZSogbG9hZEFuZEV2YWx1YXRlTW9kdWxlKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmlu
ZyYgbW9kdWxlTmFtZSwgSlNWYWx1ZSBwYXJhbWV0ZXJzLCBKU1ZhbHVlIHNjcmlwdEZldGNoZXIp
OwogSlNfRVhQT1JUX1BSSVZBVEUgSlNJbnRlcm5hbFByb21pc2UqIGxvYWRBbmRFdmFsdWF0ZU1v
ZHVsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNWYWx1ZSBzY3JpcHRGZXRjaGVy
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDYXN0Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaAppbmRleCBhMzY5ZDQ4OTY2
MjYyYWExYjYyOWYzNDNjYjI0ZjFmNzQ2M2FjNWY3Li40OTVjN2UxMWVmZmRmNTU3YTkyMmI0MjY3
MTdlOGUzZDRkYmFjZGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Nhc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Nhc3QuaApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
NjUsNCArMTY1LDEyIEBAIFRvIGpzRHluYW1pY0Nhc3QoVk0mIHZtLCBKU1ZhbHVlIGZyb20pCiAg
ICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8VG8+KHZtLCBmcm9tLmFzQ2VsbCgpKTsKIH0KIAordGVt
cGxhdGU8dHlwZW5hbWUgVG8sIHR5cGVuYW1lIEZyb20+CitUbyBqc1NlY3VyZUNhc3QoVk0mIHZt
LCBGcm9tIGZyb20pCit7CisgICAgYXV0byogcmVzdWx0ID0ganNEeW5hbWljQ2FzdDxUbz4odm0s
IGZyb20pOworICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocmVz
dWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5kZXggZTg2ZTgyY2ZjNjYyMWMyYTM0
OTMwNzliZjhhNDI5ZTY0ZjU4NTEwZC4uZTlkMmVhNThmYjQ3ZmI0M2I2NjFlZGViYWRjNDRiZTZh
OWI1ZDEzOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDct
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDggQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dApAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXJy
b3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkVycm9yUHJvdG90eXBlLmgiCisjaW5jbHVkZSAi
RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUg
IkZ1bmN0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiR2VuZXJhdG9yRnVuY3Rpb25Db25zdHJ1
Y3Rvci5oIgpAQCAtMTkyLDcgKzE5Myw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgc3Rh
dGljIEpTVmFsdWUgY3JlYXRlUHJveHlQcm9wZXJ0eShWTSYgdm0sIEpTT2JqZWN0KiBvYmplY3Qp
CitzdGF0aWMgSlNWYWx1ZSBjcmVhdGVQcm94eVByb3BlcnR5KFZNJiB2bSwgSlNPYmplY3QqIG9i
amVjdCkKIHsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsID0ganNDYXN0PEpTR2xvYmFsT2Jq
ZWN0Kj4ob2JqZWN0KTsKICAgICByZXR1cm4gUHJveHlDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHZtLCBQ
cm94eUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIGdsb2JhbCwgZ2xvYmFsLT5mdW5j
dGlvblByb3RvdHlwZSgpKSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>