<?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>141871</bug_id>
          
          <creation_ts>2015-02-21 16:45:47 -0800</creation_ts>
          <short_desc>Throwing a frozen object makes it claim to be unfrozen</short_desc>
          <delta_ts>2015-04-09 08:49:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac (Intel)</rep_platform>
          <op_sys>OS X 10.9</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=143542</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark S. Miller">erights</reporter>
          <assigned_to name="Matthew Mirman">mmirman</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>erights</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1071021</commentid>
    <comment_count>0</comment_count>
    <who name="Mark S. Miller">erights</who>
    <bug_when>2015-02-21 16:45:47 -0800</bug_when>
    <thetext>This occurs on Safari 7.0.5 (9537.77.4). Discovered by Kevin Reid.

Test case:

var o = Object.freeze([1, 2]); try { console.log(Object.isFrozen(o)); throw o; } catch (e) { console.log(e.toString(), Object.isFrozen(e), e === o); }

Output in Safari;
[Log] true
[Log] 1,2 false true



Throwing o made the subsequent isFrozen claim that it isn&apos;t. But as far as we can tell so far by attempting to mutate it, it actually is so anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071061</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-02-22 01:27:54 -0800</bug_when>
    <thetext>Does this only occur on 7.0.5, or on current versions too? 7.0.5 is not even the newest major release.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071078</commentid>
    <comment_count>2</comment_count>
    <who name="Mark S. Miller">erights</who>
    <bug_when>2015-02-22 09:37:13 -0800</bug_when>
    <thetext>Just verified that the same symptoms occur on Version 7.1.3 (9537.85.12.18)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081781</commentid>
    <comment_count>3</comment_count>
      <attachid>249851</attachid>
    <who name="Matthew Mirman">mmirman</who>
    <bug_when>2015-03-31 14:30:05 -0700</bug_when>
    <thetext>Created attachment 249851
patch.

Small benchmark on octane looked fine.  running a full benchmark now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081789</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-31 14:45:30 -0700</bug_when>
    <thetext>Can you rebase?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081795</commentid>
    <comment_count>5</comment_count>
      <attachid>249858</attachid>
    <who name="Matthew Mirman">mmirman</who>
    <bug_when>2015-03-31 15:08:53 -0700</bug_when>
    <thetext>Created attachment 249858
patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081811</commentid>
    <comment_count>6</comment_count>
      <attachid>249858</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-03-31 15:49:51 -0700</bug_when>
    <thetext>Comment on attachment 249858
patch.

EWS is failing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082649</commentid>
    <comment_count>7</comment_count>
      <attachid>250093</attachid>
    <who name="Matthew Mirman">mmirman</who>
    <bug_when>2015-04-03 12:54:31 -0700</bug_when>
    <thetext>Created attachment 250093
patch.

patch did not cause any performance regression on my machine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082660</commentid>
    <comment_count>8</comment_count>
      <attachid>250093</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-04-03 13:37:07 -0700</bug_when>
    <thetext>Comment on attachment 250093
patch.

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

Which part of this patch removes error info that we used to add?

You need to add a test for that part of the patch, both with frozen and unfrozen objects, and preferably with various types of objects, including DOM nodes, vanilla objects, arrays, and so on.

&gt; LayoutTests/ChangeLog:3
&gt; +        Source and stack information should get appended only to native error constructors

I think you meant &quot;native errors&quot; and not &quot;native error constructors&quot;. It&apos;s the error that holds the information, not the error&apos;s constructor.

&gt; LayoutTests/ChangeLog:4
&gt; +        Source and stack information should get appended only to native error constructors
&gt; +        and should be added at construction time rather than when thrown.

Why did you make this change? You should explain why this new behavior is preferable to the old behavior.

&gt; LayoutTests/http/tests/w3c/resources/testharness.js:2070
&gt;      function AssertionError(message)
&gt;      {
&gt; +        var e = new Error();
&gt; +        this.stack = e.stack.substring(e.stack.indexOf(&apos;\n&apos;)+1, e.stack.length);
&gt;          this.message = message;
&gt;      }

It looks like this test was imported from the W3C, but it required modification in order to continue passing after your code changes. Doest this mean that the W3C test, when run from source, no longer passes? Does it pass in other browsers?

&gt; LayoutTests/js/dom/stack-trace-expected.txt:359
&gt; -    0   inlineableThrow at stack-trace.js:302:33
&gt; +    0   inlineableThrow at stack-trace.js:302:40

Why did this result change? I think I might know, but I&apos;m not sure. This is the kind of thing you should explain in your ChangeLog.

&gt; LayoutTests/js/exception-properties-expected.txt:6
&gt; -PASS enumerableProperties(error) is []
&gt; +PASS enumerableProperties(error).sort() is [&quot;column&quot;, &quot;line&quot;, &quot;sourceURL&quot;]

Why is it good that these properties are enumerable now?

&gt; Source/JavaScriptCore/ChangeLog:4
&gt; +        Source and stack information should get appended only to native error constructors
&gt; +        and should be added at construction time rather than when thrown.

Same comment from other ChangeLog.

&gt; Source/JavaScriptCore/parser/ParserError.h:97
&gt;              return addErrorInfo(

If we&apos;re only supposed to add error properties during construction, why do we still have an addErroInfo helper function, which adds those properties after construction?

&gt; Source/JavaScriptCore/runtime/ErrorInstance.cpp:40
&gt; +static void appendSourceToError(CallFrame* callFrame, ErrorInstance* exception, unsigned bytecodeOffset)

Did any of this code change, or did you just move it? If you just moved it, why did you move it? This is the kind of thing you should explain in your ChangeLog.

&gt; Source/WebCore/bindings/js/JSDOMBinding.cpp:219
&gt; +    addErrorInfo(exec, asObject(errorObject), true);

Why do we need to do this extra step after error construction? Can the error constructor do this step for us?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082691</commentid>
    <comment_count>9</comment_count>
    <who name="Matthew Mirman">mmirman</who>
    <bug_when>2015-04-03 15:02:26 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 250093 [details]
&gt; patch.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=250093&amp;action=review
&gt; 
&gt; Which part of this patch removes error info that we used to add?

It doesn&apos;t remove the error info entirely, it just now adds it eagerly at error construction for native errors.  The change that removes it from being added to all &quot;throw&quot;  is in VM.cpp

&gt; You need to add a test for that part of the patch, both with frozen and
&gt; unfrozen objects, and preferably with various types of objects, including
&gt; DOM nodes, vanilla objects, arrays, and so on.
&gt; 
sure

&gt; &gt; LayoutTests/ChangeLog:3
&gt; &gt; +        Source and stack information should get appended only to native error constructors
&gt; 
&gt; I think you meant &quot;native errors&quot; and not &quot;native error constructors&quot;. It&apos;s
&gt; the error that holds the information, not the error&apos;s constructor.

yes.
 
&gt; &gt; LayoutTests/ChangeLog:4
&gt; &gt; +        Source and stack information should get appended only to native error constructors
&gt; &gt; +        and should be added at construction time rather than when thrown.
&gt; 
&gt; Why did you make this change? You should explain why this new behavior is
&gt; preferable to the old behavior.
&gt; 
&gt; &gt; LayoutTests/http/tests/w3c/resources/testharness.js:2070
&gt; &gt;      function AssertionError(message)
&gt; &gt;      {
&gt; &gt; +        var e = new Error();
&gt; &gt; +        this.stack = e.stack.substring(e.stack.indexOf(&apos;\n&apos;)+1, e.stack.length);
&gt; &gt;          this.message = message;
&gt; &gt;      }
&gt; 
&gt; It looks like this test was imported from the W3C, but it required
&gt; modification in order to continue passing after your code changes. Doest
&gt; this mean that the W3C test, when run from source, no longer passes? Does it
&gt; pass in other browsers?

the test passes in other browsers, and if our test which used the native W3C test passed, it would also pass, but it doesn&apos;t, and our tests currently expect a failure with a stack trace, which other browsers simply don&apos;t append.

&gt; &gt; LayoutTests/js/dom/stack-trace-expected.txt:359
&gt; &gt; -    0   inlineableThrow at stack-trace.js:302:33
&gt; &gt; +    0   inlineableThrow at stack-trace.js:302:40
&gt; 
&gt; Why did this result change? I think I might know, but I&apos;m not sure. This is
&gt; the kind of thing you should explain in your ChangeLog.

I changed a few things along the lines of &quot;throw {}&quot; to &quot;throw new Error()&quot;  which changed the precise location of the throw.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082695</commentid>
    <comment_count>10</comment_count>
    <who name="Mark S. Miller">erights</who>
    <bug_when>2015-04-03 15:13:42 -0700</bug_when>
    <thetext>Please also check that throwing a frozen Error does not cause a violation of the frozenness contract.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083197</commentid>
    <comment_count>11</comment_count>
      <attachid>250238</attachid>
    <who name="Matthew Mirman">mmirman</who>
    <bug_when>2015-04-06 16:21:14 -0700</bug_when>
    <thetext>Created attachment 250238
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083203</commentid>
    <comment_count>12</comment_count>
    <who name="Matthew Mirman">mmirman</who>
    <bug_when>2015-04-06 16:29:51 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; LayoutTests/js/exception-properties-expected.txt:6
&gt; &gt; -PASS enumerableProperties(error) is []
&gt; &gt; +PASS enumerableProperties(error).sort() is [&quot;column&quot;, &quot;line&quot;, &quot;sourceURL&quot;]
&gt; 
&gt; Why is it good that these properties are enumerable now?

Its not really either good nor bad.  Throw shouldn&apos;t be modifying the object being thrown at all, and native errors were expected to have enumerable properties after being thrown. Now since those properties are added before they are thrown, it is reasonable to assume that those properties should be enumerable before being thrown.

&gt; &gt; Source/JavaScriptCore/ChangeLog:4
&gt; &gt; +        Source and stack information should get appended only to native error constructors
&gt; &gt; +        and should be added at construction time rather than when thrown.
&gt; 
&gt; Same comment from other ChangeLog.

Fixed.

&gt; &gt; Source/JavaScriptCore/parser/ParserError.h:97
&gt; &gt;              return addErrorInfo(
&gt; 
&gt; If we&apos;re only supposed to add error properties during construction, why do
&gt; we still have an addErroInfo helper function, which adds those properties
&gt; after construction?

Because WebCore adds &quot;native&quot; errors which do not inherit from any JSC native error, appending the error properties as a seperate call after construction of the error is required to avoid having to manually truncate the stack and gather local source information due to the stack being extended by a nested call to construct one of the native jsc error.

&gt; &gt; Source/JavaScriptCore/runtime/ErrorInstance.cpp:40
&gt; &gt; +static void appendSourceToError(CallFrame* callFrame, ErrorInstance* exception, unsigned bytecodeOffset)
&gt; 
&gt; Did any of this code change, or did you just move it? If you just moved it,
&gt; why did you move it? This is the kind of thing you should explain in your
&gt; ChangeLog.

nope, it moved since it was needed elsewhere and wasn&apos;t in the global namespace.

&gt; &gt; Source/WebCore/bindings/js/JSDOMBinding.cpp:219
&gt; &gt; +    addErrorInfo(exec, asObject(errorObject), true);
&gt; 
&gt; Why do we need to do this extra step after error construction? Can the error
&gt; constructor do this step for us?

In the JSC native error, yes, we could make this call in the error constructor and in fact we do.  However, WebCore also has its own native error, and making these inherit from JSC&apos;s native errors would make the stack include an extra layer of 
indirection.  Furthermore, there isn&apos;t just one native webcore error, there are quite a few with macro generated constructors.  Calling it once just before the error is thrown in webcore is the simplest way of adding this information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083206</commentid>
    <comment_count>13</comment_count>
    <who name="Matthew Mirman">mmirman</who>
    <bug_when>2015-04-06 16:30:25 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Please also check that throwing a frozen Error does not cause a violation of
&gt; the frozenness contract.

fixed in the current patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083419</commentid>
    <comment_count>14</comment_count>
      <attachid>250238</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-04-07 14:03:46 -0700</bug_when>
    <thetext>Comment on attachment 250238
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083438</commentid>
    <comment_count>15</comment_count>
      <attachid>250238</attachid>
    <who name="Matthew Mirman">mmirman</who>
    <bug_when>2015-04-07 14:36:54 -0700</bug_when>
    <thetext>Comment on attachment 250238
patch

landed: http://trac.webkit.org/changeset/182495</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083439</commentid>
    <comment_count>16</comment_count>
    <who name="Matthew Mirman">mmirman</who>
    <bug_when>2015-04-07 14:37:27 -0700</bug_when>
    <thetext>Landed in: http://trac.webkit.org/changeset/182495
Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083722</commentid>
    <comment_count>17</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-04-08 13:31:11 -0700</bug_when>
    <thetext>*** Bug 141878 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083786</commentid>
    <comment_count>18</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-04-08 17:37:35 -0700</bug_when>
    <thetext>This change might have broken Web Inspector on Windows.

See &lt;https://bugs.webkit.org/show_bug.cgi?id=143542&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249851</attachid>
            <date>2015-03-31 14:30:05 -0700</date>
            <delta_ts>2015-03-31 15:08:53 -0700</delta_ts>
            <desc>patch.</desc>
            <filename>0001-Source-and-stack-information-should-get-appended-onl.patch</filename>
            <type>text/plain</type>
            <size>53721</size>
            <attacher name="Matthew Mirman">mmirman</attacher>
            
              <data encoding="base64">RnJvbSBkMzc1MzQ2MDVmNWQ5MWY0NzUxNDIwYThlNjZjMWI2OThhZjRjZTA1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXR0aGV3IE1pcm1hbiA8bW1pcm1hbkBhcHBsZS5jb20+CkRh
dGU6IFR1ZSwgMzEgTWFyIDIwMTUgMTQ6Mjc6MjAgLTA3MDAKU3ViamVjdDogW1BBVENIXSBTb3Vy
Y2UgYW5kIHN0YWNrIGluZm9ybWF0aW9uIHNob3VsZCBnZXQgYXBwZW5kZWQgb25seSB0bwogbmF0
aXZlIGVycm9yIGNvbnN0cnVjdG9ycyBhbmQgc2hvdWxkIGJlIGFkZGVkIGF0IGNvbnN0cnVjdGlv
biB0aW1lIHJhdGhlcgogdGhhbiB3aGVuIHRocm93bi4gU291cmNlL0phdmFTY3JpcHRDb3JlOgoK
cmRhcjovL3Byb2JsZW0vMTk5MjcyOTMKaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0MTg3MQoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgoqIGludGVycHJldGVy
L0ludGVycHJldGVyLmNwcDoKKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgoqIGludGVycHJl
dGVyL0ludGVycHJldGVyLmg6CiogcGFyc2VyL1BhcnNlckVycm9yLmg6CihKU0M6OlBhcnNlckVy
cm9yOjp0b0Vycm9yT2JqZWN0KToKKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6CiogcnVu
dGltZS9FcnJvci5jcHA6CihKU0M6OmNyZWF0ZUVycm9yKToKKEpTQzo6Y3JlYXRlRXZhbEVycm9y
KToKKEpTQzo6Y3JlYXRlUmFuZ2VFcnJvcik6CihKU0M6OmNyZWF0ZVJlZmVyZW5jZUVycm9yKToK
KEpTQzo6Y3JlYXRlU3ludGF4RXJyb3IpOgooSlNDOjpjcmVhdGVUeXBlRXJyb3IpOgooSlNDOjpj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcik6CihKU0M6OmNyZWF0ZVVSSUVycm9yKToKKEpT
Qzo6Y3JlYXRlT3V0T2ZNZW1vcnlFcnJvcik6CiogcnVudGltZS9FcnJvci5oOgoqIHJ1bnRpbWUv
RXJyb3JDb25zdHJ1Y3Rvci5jcHA6CihKU0M6OkludGVycHJldGVyOjpjb25zdHJ1Y3RXaXRoRXJy
b3JDb25zdHJ1Y3Rvcik6CihKU0M6OkludGVycHJldGVyOjpjYWxsRXJyb3JDb25zdHJ1Y3Rvcik6
CiogcnVudGltZS9FcnJvckluc3RhbmNlLmNwcDoKKEpTQzo6YXBwZW5kU291cmNlVG9FcnJvcik6
CihKU0M6OkZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3I6OkZpbmRGaXJz
dENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3IpOgooSlNDOjpGaW5kRmlyc3RDYWxsZXJG
cmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yOjpvcGVyYXRvcigpKToKKEpTQzo6RmluZEZpcnN0Q2Fs
bGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3Rvcjo6Zm91bmRDYWxsRnJhbWUpOgooSlNDOjpGaW5k
Rmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yOjppbmRleCk6CihKU0M6OkVycm9y
SW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKToKKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuaDoKKEpT
Qzo6RXJyb3JJbnN0YW5jZTo6Y3JlYXRlKToKKiBydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcDoK
KEpTQzo6RXJyb3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKiBydW50aW1lL0V4Y2VwdGlv
bkZ1enouY3BwOgooSlNDOjpkb0V4Y2VwdGlvbkZ1enppbmcpOgoqIHJ1bnRpbWUvRXhjZXB0aW9u
SGVscGVycy5jcHA6CihKU0M6OmNyZWF0ZUVycm9yKToKKEpTQzo6Y3JlYXRlSW52YWxpZEZ1bmN0
aW9uQXBwbHlQYXJhbWV0ZXJFcnJvcik6CihKU0M6OmNyZWF0ZUludmFsaWRJblBhcmFtZXRlckVy
cm9yKToKKEpTQzo6Y3JlYXRlSW52YWxpZEluc3RhbmNlb2ZQYXJhbWV0ZXJFcnJvcik6CihKU0M6
OmNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKToKKEpTQzo6Y3JlYXRlTm90QUZ1bmN0aW9uRXJy
b3IpOgooSlNDOjpjcmVhdGVOb3RBbk9iamVjdEVycm9yKToKKEpTQzo6dGhyb3dPdXRPZk1lbW9y
eUVycm9yKToKKEpTQzo6Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKTogRGVsZXRlZC4KKEpTQzo6
Y3JlYXRlT3V0T2ZNZW1vcnlFcnJvcik6IERlbGV0ZWQuCiogcnVudGltZS9FeGNlcHRpb25IZWxw
ZXJzLmg6CiogcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwOgooSlNDOjpjb25z
dHJ1Y3RBcnJheUJ1ZmZlcik6CiogcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcDoK
KEpTQzo6YXJyYXlCdWZmZXJQcm90b0Z1bmNTbGljZSk6CiogcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0lubGluZXMuaDoKKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OmNyZWF0ZSk6CihKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVh
dGVVbmluaXRpYWxpemVkKToKKiBydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwOgoo
SlNDOjpJbnRlcnByZXRlcjo6Y29uc3RydWN0V2l0aE5hdGl2ZUVycm9yQ29uc3RydWN0b3IpOgoo
SlNDOjpJbnRlcnByZXRlcjo6Y2FsbE5hdGl2ZUVycm9yQ29uc3RydWN0b3IpOgoqIHJ1bnRpbWUv
Vk0uY3BwOgooSlNDOjpWTTo6dGhyb3dFeGNlcHRpb24pOgooSlNDOjphcHBlbmRTb3VyY2VUb0Vy
cm9yKTogRGVsZXRlZC4KKEpTQzo6RmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVu
Y3Rvcjo6RmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3Rvcik6IERlbGV0ZWQu
CihKU0M6OkZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3I6Om9wZXJhdG9y
KCkpOiBEZWxldGVkLgooSlNDOjpGaW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5j
dG9yOjpmb3VuZENhbGxGcmFtZSk6IERlbGV0ZWQuCihKU0M6OkZpbmRGaXJzdENhbGxlckZyYW1l
V2l0aENvZGVibG9ja0Z1bmN0b3I6OmluZGV4KTogRGVsZXRlZC4KCkxheW91dFRlc3RzOgoKaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTg3MQpyZGFyOi8vcHJvYmxl
bS8xOTkyNzI5MwoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpVcGRhdGVzIHNvbWUgb2Yg
dGhlIHRlc3RzIHdoaWNoIHdlcmUgdGhyb3dpbmcgYW4gIkV4Y2VwdGlvbigpIiByYXRoZXIgdGhh
biBhICJuZXcgRXJyb3IoKSIKYW5kIGV4cGVjdGluZyBhIGxpbmUsIHN0YWNrLCBhbmQgY29sdW1u
IGZpZWxkLgoKKiBqcy9kb20vZXhjZXB0aW9uLWxpbmVudW1zLWluLWh0bWwtMS5odG1sOgoqIGpz
L2RvbS9leGNlcHRpb24tbGluZW51bXMtaW4taHRtbC0yLmh0bWw6CioganMvZG9tL2V4Y2VwdGlv
bi1saW5lbnVtcy1pbi1odG1sLTMuaHRtbDoKKiBqcy9leGNlcHRpb24tcHJvcGVydGllcy1leHBl
Y3RlZC50eHQ6CioganMvc2NyaXB0LXRlc3RzL2V4Y2VwdGlvbi1saW5lbnVtcy5qczoKKGV4Y2Vw
dGlvbkluRnVuY3Rpb24pOgooZmlyc3RQcm9wSXNHZXR0ZXIuZ2V0IGdldHRlcik6CihzZWNvbmRQ
cm9wSXNHZXR0ZXIuZ2V0IGdldHRlcik6CihmaXJzdFByb3BJc1NldHRlci5zZXQgc2V0dGVyKToK
KHNlY29uZFByb3BJc1NldHRlci5zZXQgc2V0dGVyKToKKiBqcy9zY3JpcHQtdGVzdHMvZXhjZXB0
aW9uLXByb3BlcnRpZXMuanM6CgpkaWZmIC0tZ2l0IExheW91dFRlc3RzL0NoYW5nZUxvZyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYzE2ZDI3My4uNzVkZmU1MiAxMDA2NDQKLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZworKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcg
QEAKKzIwMTUtMDMtMzEgIE1hdHRoZXcgTWlybWFuICA8bW1pcm1hbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgU291cmNlIGFuZCBzdGFjayBpbmZvcm1hdGlvbiBzaG91bGQgZ2V0IGFwcGVuZGVkIG9u
bHkgdG8gbmF0aXZlIGVycm9yIGNvbnN0cnVjdG9ycworICAgICAgICBhbmQgc2hvdWxkIGJlIGFk
ZGVkIGF0IGNvbnN0cnVjdGlvbiB0aW1lIHJhdGhlciB0aGFuIHdoZW4gdGhyb3duLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxODcxCisgICAgICAg
IHJkYXI6Ly9wcm9ibGVtLzE5OTI3MjkzCisgICAgICAgIAorICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGVzIHNvbWUgb2YgdGhlIHRlc3RzIHdoaWNo
IHdlcmUgdGhyb3dpbmcgYW4gIkV4Y2VwdGlvbigpIiByYXRoZXIgdGhhbiBhICJuZXcgRXJyb3Io
KSIKKyAgICAgICAgYW5kIGV4cGVjdGluZyBhIGxpbmUsIHN0YWNrLCBhbmQgY29sdW1uIGZpZWxk
LgorICAgICAgICAKKyAgICAgICAgKiBqcy9kb20vZXhjZXB0aW9uLWxpbmVudW1zLWluLWh0bWwt
MS5odG1sOgorICAgICAgICAqIGpzL2RvbS9leGNlcHRpb24tbGluZW51bXMtaW4taHRtbC0yLmh0
bWw6CisgICAgICAgICoganMvZG9tL2V4Y2VwdGlvbi1saW5lbnVtcy1pbi1odG1sLTMuaHRtbDoK
KyAgICAgICAgKiBqcy9leGNlcHRpb24tcHJvcGVydGllcy1leHBlY3RlZC50eHQ6CisgICAgICAg
ICoganMvc2NyaXB0LXRlc3RzL2V4Y2VwdGlvbi1saW5lbnVtcy5qczoKKyAgICAgICAgKGV4Y2Vw
dGlvbkluRnVuY3Rpb24pOgorICAgICAgICAoZmlyc3RQcm9wSXNHZXR0ZXIuZ2V0IGdldHRlcik6
CisgICAgICAgIChzZWNvbmRQcm9wSXNHZXR0ZXIuZ2V0IGdldHRlcik6CisgICAgICAgIChmaXJz
dFByb3BJc1NldHRlci5zZXQgc2V0dGVyKToKKyAgICAgICAgKHNlY29uZFByb3BJc1NldHRlci5z
ZXQgc2V0dGVyKToKKyAgICAgICAgKiBqcy9zY3JpcHQtdGVzdHMvZXhjZXB0aW9uLXByb3BlcnRp
ZXMuanM6CisKIDIwMTUtMDMtMzEgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFw
cGxlLmNvbT4KIAogICAgICAgICBib3JkZXItaW1hZ2Ugd2l0aCAnZmlsbCcga2V5d29yZCBkb2Vz
IG5vdCBmaWxsIHRoZSBtaWRkbGUgYXJlYSB1bmxlc3MgdGhlIGJvcmRlciB3aWR0aCBpcyBncmVh
dGVyIHRoYW4gemVyby4KZGlmZiAtLWdpdCBMYXlvdXRUZXN0cy9qcy9kb20vZXhjZXB0aW9uLWxp
bmVudW1zLWluLWh0bWwtMS5odG1sIExheW91dFRlc3RzL2pzL2RvbS9leGNlcHRpb24tbGluZW51
bXMtaW4taHRtbC0xLmh0bWwKaW5kZXggM2I3ZDdjOS4uMDc5YzcyYSAxMDA2NDQKLS0tIExheW91
dFRlc3RzL2pzL2RvbS9leGNlcHRpb24tbGluZW51bXMtaW4taHRtbC0xLmh0bWwKKysrIExheW91
dFRlc3RzL2pzL2RvbS9leGNlcHRpb24tbGluZW51bXMtaW4taHRtbC0xLmh0bWwKQEAgLTgsNyAr
OCw3IEBAIGRlc2NyaXB0aW9uKCdUaGlzIHRlc3QgZXhlcmNpc2VzIHRoZSBzb3VyY2UgVVJMIGFu
ZCBsaW5lIG51bWJlciB0aGF0IGlzIGVtYmVkZGVkCiAKIGZ1bmN0aW9uIGV4Y2VwdGlvbkluRnVu
Y3Rpb24oKQogewotICAgIHRocm93IEV4Y2VwdGlvbigpOworICAgIHRocm93IG5ldyBFcnJvcigp
OwogfQogCiB2YXIgZSA9IHVuZGVmaW5lZDsKZGlmZiAtLWdpdCBMYXlvdXRUZXN0cy9qcy9kb20v
ZXhjZXB0aW9uLWxpbmVudW1zLWluLWh0bWwtMi5odG1sIExheW91dFRlc3RzL2pzL2RvbS9leGNl
cHRpb24tbGluZW51bXMtaW4taHRtbC0yLmh0bWwKaW5kZXggZjVkYjM3OS4uODZmMDgyOSAxMDA2
NDQKLS0tIExheW91dFRlc3RzL2pzL2RvbS9leGNlcHRpb24tbGluZW51bXMtaW4taHRtbC0yLmh0
bWwKKysrIExheW91dFRlc3RzL2pzL2RvbS9leGNlcHRpb24tbGluZW51bXMtaW4taHRtbC0yLmh0
bWwKQEAgLTgsNyArOCw3IEBAIGRlc2NyaXB0aW9uKCdUaGlzIHRlc3QgZXhlcmNpc2VzIHRoZSBz
b3VyY2UgVVJMIGFuZCBsaW5lIG51bWJlciB0aGF0IGlzIGVtYmVkZGVkCiAKIGZ1bmN0aW9uIGV4
Y2VwdGlvbkluRnVuY3Rpb24oKQogewotICAgIHRocm93IEV4Y2VwdGlvbigpOworICAgIHRocm93
IG5ldyBFcnJvcigpOwogfQogCiB2YXIgZSA9IHVuZGVmaW5lZDsKZGlmZiAtLWdpdCBMYXlvdXRU
ZXN0cy9qcy9kb20vZXhjZXB0aW9uLWxpbmVudW1zLWluLWh0bWwtMy5odG1sIExheW91dFRlc3Rz
L2pzL2RvbS9leGNlcHRpb24tbGluZW51bXMtaW4taHRtbC0zLmh0bWwKaW5kZXggN2MxMWY4MS4u
OWZjN2VkZiAxMDA2NDQKLS0tIExheW91dFRlc3RzL2pzL2RvbS9leGNlcHRpb24tbGluZW51bXMt
aW4taHRtbC0zLmh0bWwKKysrIExheW91dFRlc3RzL2pzL2RvbS9leGNlcHRpb24tbGluZW51bXMt
aW4taHRtbC0zLmh0bWwKQEAgLTEwLDcgKzEwLDcgQEAgZGVzY3JpcHRpb24oJ1RoaXMgdGVzdCBl
eGVyY2lzZXMgdGhlIHNvdXJjZSBVUkwgYW5kIGxpbmUgbnVtYmVyIHRoYXQgaXMgZW1iZWRkZWQK
IAogZnVuY3Rpb24gZXhjZXB0aW9uSW5GdW5jdGlvbigpCiB7Ci0gICAgdGhyb3cgRXhjZXB0aW9u
KCk7CisgICAgdGhyb3cgbmV3IEVycm9yKCk7CiB9CiAKIHZhciBlID0gdW5kZWZpbmVkOwpkaWZm
IC0tZ2l0IExheW91dFRlc3RzL2pzL2V4Y2VwdGlvbi1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dCBM
YXlvdXRUZXN0cy9qcy9leGNlcHRpb24tcHJvcGVydGllcy1leHBlY3RlZC50eHQKaW5kZXggZGUw
NTMwYi4uYTA3NTgzYSAxMDA2NDQKLS0tIExheW91dFRlc3RzL2pzL2V4Y2VwdGlvbi1wcm9wZXJ0
aWVzLWV4cGVjdGVkLnR4dAorKysgTGF5b3V0VGVzdHMvanMvZXhjZXB0aW9uLXByb3BlcnRpZXMt
ZXhwZWN0ZWQudHh0CkBAIC0zLDcgKzMsNyBAQCBUZXN0IGZvciBjb3JyZWN0IHByb3BlcnRpZXMg
b24gRXJyb3Igb2JqZWN0cy4KIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1QQVNTIGVu
dW1lcmFibGVQcm9wZXJ0aWVzKGVycm9yKSBpcyBbXQorUEFTUyBlbnVtZXJhYmxlUHJvcGVydGll
cyhlcnJvcikuc29ydCgpIGlzIFsiY29sdW1uIiwgImxpbmUiLCAic291cmNlVVJMIl0KIFBBU1Mg
ZW51bWVyYWJsZVByb3BlcnRpZXMobmF0aXZlRXJyb3IpLnNvcnQoKSBpcyBbImNvbHVtbiIsICJs
aW5lIiwgInNvdXJjZVVSTCJdCiBQQVNTIE9iamVjdC5nZXRQcm90b3R5cGVPZihuYXRpdmVFcnJv
cikubmFtZSBpcyAiUmFuZ2VFcnJvciIKIFBBU1MgT2JqZWN0LmdldFByb3RvdHlwZU9mKG5hdGl2
ZUVycm9yKS5tZXNzYWdlIGlzICIiCmRpZmYgLS1naXQgTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRl
c3RzL2V4Y2VwdGlvbi1saW5lbnVtcy5qcyBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvZXhj
ZXB0aW9uLWxpbmVudW1zLmpzCmluZGV4IGJlOTRlMTkuLjk2Zjg0ZjQgMTAwNjQ0Ci0tLSBMYXlv
dXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvZXhjZXB0aW9uLWxpbmVudW1zLmpzCisrKyBMYXlvdXRU
ZXN0cy9qcy9zY3JpcHQtdGVzdHMvZXhjZXB0aW9uLWxpbmVudW1zLmpzCkBAIC0yLDcgKzIsNyBA
QCBkZXNjcmlwdGlvbignVGhpcyB0ZXN0IGV4ZXJjaXNlcyB0aGUgc291cmNlIFVSTCBhbmQgbGlu
ZSBudW1iZXIgdGhhdCBpcyBlbWJlZGRlZAogCiBmdW5jdGlvbiBleGNlcHRpb25JbkZ1bmN0aW9u
KCkKIHsKLSAgICB0aHJvdyBFeGNlcHRpb24oKTsKKyAgICB0aHJvdyBuZXcgRXJyb3IoKTsKIH0K
IAogdmFyIGUgPSB1bmRlZmluZWQ7CkBAIC03MSwxOCArNzEsMTggQEAgc2hvdWxkQmUoInR5cGVv
ZiBlLnNvdXJjZVVSTCIsICcic3RyaW5nIicpOwogc2hvdWxkQmUoImUubGluZSIsICc2NCcpOwog
CiB2YXIgZmlyc3RQcm9wSXNHZXR0ZXIgPSB7Ci0gICAgZ2V0IGdldHRlcigpIHsgdGhyb3cge30g
fQorICAgIGdldCBnZXR0ZXIoKSB7IHRocm93IG5ldyBFcnJvcigpIH0KIH07CiB2YXIgc2Vjb25k
UHJvcElzR2V0dGVyID0gewogICAgIHByb3A6IDEsCi0gICAgZ2V0IGdldHRlcigpIHsgdGhyb3cg
e30gfQorICAgIGdldCBnZXR0ZXIoKSB7IHRocm93IG5ldyBFcnJvcigpIH0KIH07CiB2YXIgZmly
c3RQcm9wSXNTZXR0ZXIgPSB7Ci0gICAgc2V0IHNldHRlcihhKSB7IHRocm93IHt9IH0KKyAgICBz
ZXQgc2V0dGVyKGEpIHsgdGhyb3cgbmV3IEVycm9yKCkgfQogfTsKIHZhciBzZWNvbmRQcm9wSXNT
ZXR0ZXIgPSB7CiAgICAgcHJvcDogMSwKLSAgICBzZXQgc2V0dGVyKGEpIHsgdGhyb3cge30gfQor
ICAgIHNldCBzZXR0ZXIoYSkgeyB0aHJvdyBuZXcgRXJyb3IoKSB9CiB9OwogCiB0cnkgewpkaWZm
IC0tZ2l0IExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9leGNlcHRpb24tcHJvcGVydGllcy5q
cyBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvZXhjZXB0aW9uLXByb3BlcnRpZXMuanMKaW5k
ZXggNjZiYmQyOC4uYTk5MzZiYyAxMDA2NDQKLS0tIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0
cy9leGNlcHRpb24tcHJvcGVydGllcy5qcworKysgTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3Rz
L2V4Y2VwdGlvbi1wcm9wZXJ0aWVzLmpzCkBAIC0xNSw3ICsxNSw3IEBAIHRyeSB7CiAgICAgdmFy
IG5hdGl2ZUVycm9yID0gcmFuZ2VFcnJvcjsKICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoIm1l
c3NhZ2UiKTsKIAotICAgIHNob3VsZEJlKCdlbnVtZXJhYmxlUHJvcGVydGllcyhlcnJvciknLCAn
W10nKTsKKyAgICBzaG91bGRCZSgnZW51bWVyYWJsZVByb3BlcnRpZXMoZXJyb3IpLnNvcnQoKScs
ICdbImNvbHVtbiIsICJsaW5lIiwgInNvdXJjZVVSTCJdJyk7CiAgICAgc2hvdWxkQmUoJ2VudW1l
cmFibGVQcm9wZXJ0aWVzKG5hdGl2ZUVycm9yKS5zb3J0KCknLCAnWyJjb2x1bW4iLCAibGluZSIs
ICJzb3VyY2VVUkwiXScpOwogCiAgICAgc2hvdWxkQmUoJ09iamVjdC5nZXRQcm90b3R5cGVPZihu
YXRpdmVFcnJvcikubmFtZScsICciUmFuZ2VFcnJvciInKTsKZGlmZiAtLWdpdCBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5k
ZXggZDIxOTZlNy4uMDA0ODc0ZCAxMDA2NDQKLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NSBA
QAorMjAxNS0wMy0zMSAgTWF0dGhldyBNaXJtYW4gIDxtbWlybWFuQGFwcGxlLmNvbT4KKworICAg
ICAgICBTb3VyY2UgYW5kIHN0YWNrIGluZm9ybWF0aW9uIHNob3VsZCBnZXQgYXBwZW5kZWQgb25s
eSB0byBuYXRpdmUgZXJyb3IgY29uc3RydWN0b3JzCisgICAgICAgIGFuZCBzaG91bGQgYmUgYWRk
ZWQgYXQgY29uc3RydWN0aW9uIHRpbWUgcmF0aGVyIHRoYW4gd2hlbiB0aHJvd24uCisgICAgICAg
IHJkYXI6Ly9wcm9ibGVtLzE5OTI3MjkzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDE4NzEKKyAgICAgICAgCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgor
ICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAgICogaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyRXJyb3IuaDoKKyAgICAg
ICAgKEpTQzo6UGFyc2VyRXJyb3I6OnRvRXJyb3JPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUv
Q29tbW9uSWRlbnRpZmllcnMuaDoKKyAgICAgICAgKiBydW50aW1lL0Vycm9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6Y3JlYXRlRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVFdmFsRXJyb3IpOgor
ICAgICAgICAoSlNDOjpjcmVhdGVSYW5nZUVycm9yKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlUmVm
ZXJlbmNlRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVTeW50YXhFcnJvcik6CisgICAgICAg
IChKU0M6OmNyZWF0ZVR5cGVFcnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlVVJJRXJyb3IpOgorICAgICAgICAo
SlNDOjpjcmVhdGVPdXRPZk1lbW9yeUVycm9yKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yLmg6
CisgICAgICAgICogcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6
SW50ZXJwcmV0ZXI6OmNvbnN0cnVjdFdpdGhFcnJvckNvbnN0cnVjdG9yKToKKyAgICAgICAgKEpT
Qzo6SW50ZXJwcmV0ZXI6OmNhbGxFcnJvckNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1l
L0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjphcHBlbmRTb3VyY2VUb0Vycm9yKToK
KyAgICAgICAgKEpTQzo6RmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3Rvcjo6
RmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3Rvcik6CisgICAgICAgIChKU0M6
OkZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3I6Om9wZXJhdG9yKCkpOgor
ICAgICAgICAoSlNDOjpGaW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yOjpm
b3VuZENhbGxGcmFtZSk6CisgICAgICAgIChKU0M6OkZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENv
ZGVibG9ja0Z1bmN0b3I6OmluZGV4KToKKyAgICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JJbnN0YW5jZS5oOgorICAgICAg
ICAoSlNDOjpFcnJvckluc3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpFcnJvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRp
b24pOgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uRnV6ei5jcHA6CisgICAgICAgIChKU0M6
OmRvRXhjZXB0aW9uRnV6emluZyk6CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxwZXJz
LmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVJ
bnZhbGlkRnVuY3Rpb25BcHBseVBhcmFtZXRlckVycm9yKToKKyAgICAgICAgKEpTQzo6Y3JlYXRl
SW52YWxpZEluUGFyYW1ldGVyRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVJbnZhbGlkSW5z
dGFuY2VvZlBhcmFtZXRlckVycm9yKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlTm90QUNvbnN0cnVj
dG9yRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcik6CisgICAg
ICAgIChKU0M6OmNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IpOgorICAgICAgICAoSlNDOjp0aHJvd091
dE9mTWVtb3J5RXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVTdGFja092ZXJmbG93RXJyb3Ip
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpjcmVhdGVPdXRPZk1lbW9yeUVycm9yKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaDoKKyAgICAgICAgKiBydW50
aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVj
dEFycmF5QnVmZmVyKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjphcnJheUJ1ZmZlclByb3RvRnVuY1NsaWNlKToKKyAgICAgICAg
KiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oOgorICAgICAgICAoSlND
OjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKToKKyAgICAgICAgKEpT
Qzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6ZWQp
OgorICAgICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpjb25zdHJ1Y3RXaXRoTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcik6
CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjYWxsTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcik6
CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjp0aHJvd0V4Y2Vw
dGlvbik6CisgICAgICAgIChKU0M6OmFwcGVuZFNvdXJjZVRvRXJyb3IpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpGaW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yOjpGaW5k
Rmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6RmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3Rvcjo6b3BlcmF0b3Io
KSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVi
bG9ja0Z1bmN0b3I6OmZvdW5kQ2FsbEZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rmlu
ZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3Rvcjo6aW5kZXgpOiBEZWxldGVkLgor
CiAyMDE1LTAzLTMxICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAg
ICBMb2dpY2FsbHkgZW1wdHkgV2Vha0Jsb2NrcyBzaG91bGQgbm90IHBpbiBkb3duIHRoZWlyIE1h
cmtlZEJsb2NrcyBpbmRlZmluaXRlbHkuCmRpZmYgLS1naXQgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IGVjZmNlOTEuLjMwOTJmY2IgMTAwNjQ0Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC03NjMsNyAr
NzYzLDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShQcm9ncmFtRXhlY3V0YWJsZSog
cHJvZ3JhbSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEoKICAgICAgICAgICAgICAgICAgICAgICAg
IFByb3BlcnR5U2xvdCBzbG90KGdsb2JhbE9iamVjdCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIWdsb2JhbE9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgSlNPTlBQYXRo
W2ldLm1fcGF0aEVudHJ5TmFtZSwgc2xvdCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoZW50cnkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxs
RnJhbWUtPnZtKCkudGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBjcmVhdGVVbmRlZmluZWRWYXJp
YWJsZUVycm9yKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBKU09OUFBhdGhbaV0ubV9wYXRo
RW50cnlOYW1lKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxs
RnJhbWUtPnZtKCkudGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBjcmVhdGVVbmRlZmluZWRWYXJp
YWJsZUVycm9yKGNhbGxGcmFtZSwgSlNPTlBQYXRoW2ldLm1fcGF0aEVudHJ5TmFtZSkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkSlNPTlA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlT2JqZWN0ID0gc2xvdC5n
ZXRWYWx1ZShjYWxsRnJhbWUsIEpTT05QUGF0aFtpXS5tX3BhdGhFbnRyeU5hbWUpOwpkaWZmIC0t
Z2l0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCmluZGV4IDZiZjg4ZGIu
LmYwMmUxNDMgMTAwNjQ0Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuaAorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmgKQEAgLTI2Nyw2ICsyNjcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGR1bXBDYWxsRnJhbWUoQ2FsbEZyYW1lKik7CiAKKyAgICAgICAg
dm9pZCBnZXRTdGFja1RyYWNlKFZlY3RvcjxTdGFja0ZyYW1lPiYgcmVzdWx0cywgc2l6ZV90IG1h
eFN0YWNrU2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOworCiAgICAg
cHJpdmF0ZToKICAgICAgICAgZW51bSBFeGVjdXRpb25GbGFnIHsgTm9ybWFsLCBJbml0aWFsaXpl
QW5kUmV0dXJuIH07CiAKQEAgLTI3NCw3ICsyNzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICBKU1ZhbHVlIGV4ZWN1dGUoQ2FsbEZyYW1lQ2xvc3VyZSYpOwogCi0gICAgICAgIHZvaWQg
Z2V0U3RhY2tUcmFjZShWZWN0b3I8U3RhY2tGcmFtZT4mIHJlc3VsdHMsIHNpemVfdCBtYXhTdGFj
a1NpemUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKTsKKwogCiAgICAgICAg
IHZvaWQgZHVtcFJlZ2lzdGVycyhDYWxsRnJhbWUqKTsKICAgICAgICAgCmRpZmYgLS1naXQgU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJFcnJvci5oIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvUGFyc2VyRXJyb3IuaAppbmRleCAyYTY5MGNhLi5jZTE0NWQ3IDEwMDY0NAot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJFcnJvci5oCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckVycm9yLmgKQEAgLTg5LDIyICs4OSwyMyBAQCBw
dWJsaWM6CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSwgCiAgICAgICAgIGludCBvdmVycmlkZUxpbmVOdW1iZXIgPSAtMSkKICAg
ICB7CisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygp
OwogICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgICAgICBjYXNlIEVycm9yTm9uZToKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBjYXNlIFN5bnRheEVycm9yOgogICAg
ICAgICAgICAgcmV0dXJuIGFkZEVycm9ySW5mbygKLSAgICAgICAgICAgICAgICBnbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKSwgCi0gICAgICAgICAgICAgICAgY3JlYXRlU3ludGF4RXJyb3IoZ2xv
YmFsT2JqZWN0LCBtX21lc3NhZ2UpLCAKKyAgICAgICAgICAgICAgICBleGVjLCAKKyAgICAgICAg
ICAgICAgICBjcmVhdGVTeW50YXhFcnJvcihleGVjLCBtX21lc3NhZ2UpLCAKICAgICAgICAgICAg
ICAgICBvdmVycmlkZUxpbmVOdW1iZXIgPT0gLTEgPyBtX2xpbmUgOiBvdmVycmlkZUxpbmVOdW1i
ZXIsIHNvdXJjZSk7CiAgICAgICAgIGNhc2UgRXZhbEVycm9yOgotICAgICAgICAgICAgcmV0dXJu
IGNyZWF0ZVN5bnRheEVycm9yKGdsb2JhbE9iamVjdCwgbV9tZXNzYWdlKTsKKyAgICAgICAgICAg
IHJldHVybiBjcmVhdGVTeW50YXhFcnJvcihleGVjLCBtX21lc3NhZ2UpOwogICAgICAgICBjYXNl
IFN0YWNrT3ZlcmZsb3c6IHsKICAgICAgICAgICAgIEVycm9ySGFuZGxpbmdTY29wZSBlcnJvclNj
b3BlKGdsb2JhbE9iamVjdC0+dm0oKSk7Ci0gICAgICAgICAgICByZXR1cm4gY3JlYXRlU3RhY2tP
dmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlU3Rh
Y2tPdmVyZmxvd0Vycm9yKGV4ZWMpOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgT3V0T2ZNZW1v
cnk6Ci0gICAgICAgICAgICByZXR1cm4gY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmpl
Y3QpOworICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYyk7CiAg
ICAgICAgIH0KICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYg
LS1naXQgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaCBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCmluZGV4IDZm
MzRmYTkuLjNkZWVhZWQgMTAwNjQ0Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25JZGVudGlmaWVycy5oCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25JZGVudGlmaWVycy5oCkBAIC04Miw2ICs4Miw3IEBACiAgICAgbWFjcm8oY2xlYXIpIFwKICAg
ICBtYWNybyhjbG9zZSkgXAogICAgIG1hY3JvKGNsb3NlZCkgXAorICAgIG1hY3JvKGNvbHVtbikg
XAogICAgIG1hY3JvKGNvbXBpbGF0aW9uS2luZCkgXAogICAgIG1hY3JvKGNvbXBpbGF0aW9ucykg
XAogICAgIG1hY3JvKGNvbXBpbGUpIFwKQEAgLTEyNyw2ICsxMjgsNyBAQAogICAgIG1hY3JvKGtl
eXMpIFwKICAgICBtYWNybyhsYXN0SW5kZXgpIFwKICAgICBtYWNybyhsZW5ndGgpIFwKKyAgICBt
YWNybyhsaW5lKSBcCiAgICAgbWFjcm8obWVzc2FnZSkgXAogICAgIG1hY3JvKG11bHRpbGluZSkg
XAogICAgIG1hY3JvKG5hbWUpIFwKQEAgLTE1Myw2ICsxNTUsNyBAQAogICAgIG1hY3JvKHNpemUp
IFwKICAgICBtYWNybyhzbGljZSkgXAogICAgIG1hY3JvKHNvdXJjZSkgXAorICAgIG1hY3JvKHNv
dXJjZVVSTCkgXAogICAgIG1hY3JvKHNvdXJjZUNvZGUpIFwKICAgICBtYWNybyhzdGFjaykgXAog
ICAgIG1hY3JvKHN1YmFycmF5KSBcCmRpZmYgLS1naXQgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXJyb3IuY3BwIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcApp
bmRleCA5MzBiNmZhLi4yMzkzNDU0IDEwMDY0NAotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXJyb3IuY3BwCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5j
cHAKQEAgLTQ0LDkxICs0NCw2MyBAQCBuYW1lc3BhY2UgSlNDIHsKIHN0YXRpYyBjb25zdCBjaGFy
KiBsaW5lUHJvcGVydHlOYW1lID0gImxpbmUiOwogc3RhdGljIGNvbnN0IGNoYXIqIHNvdXJjZVVS
TFByb3BlcnR5TmFtZSA9ICJzb3VyY2VVUkwiOwogCi1KU09iamVjdCogY3JlYXRlRXJyb3IoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorSlNPYmpl
Y3QqIGNyZWF0ZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBF
cnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlciBhcHBlbmRlcikKIHsKICAgICBBU1NFUlQoIW1l
c3NhZ2UuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2Jh
bE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlKTsK
KyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpOworICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2Jq
ZWN0LT52bSgpLCBnbG9iYWxPYmplY3QtPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UsIGFwcGVu
ZGVyLCBUeXBlTm90aGluZywgdHJ1ZSk7CiB9CiAKLUpTT2JqZWN0KiBjcmVhdGVFdmFsRXJyb3Io
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorSlNP
YmplY3QqIGNyZWF0ZUV2YWxFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIgYXBwZW5kZXIpCiB7CiAgICAgQVNT
RVJUKCFtZXNzYWdlLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0
ZShnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdC0+ZXZhbEVycm9yQ29uc3RydWN0b3Io
KS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICByZXR1cm4gRXJyb3JJ
bnN0YW5jZTo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5l
dmFsRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlLCBhcHBlbmRl
ciwgVHlwZU5vdGhpbmcsIHRydWUpOwogfQogCi1KU09iamVjdCogY3JlYXRlUmFuZ2VFcnJvcihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCitKU09i
amVjdCogY3JlYXRlUmFuZ2VFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIgYXBwZW5kZXIpCiB7CiAgICAgQVNT
RVJUKCFtZXNzYWdlLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0
ZShnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdC0+cmFuZ2VFcnJvckNvbnN0cnVjdG9y
KCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgcmV0dXJuIEVycm9y
SW5zdGFuY2U6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdC0+
cmFuZ2VFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UsIGFwcGVu
ZGVyLCBUeXBlTm90aGluZywgdHJ1ZSk7CiB9CiAKLUpTT2JqZWN0KiBjcmVhdGVSZWZlcmVuY2VF
cnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
CitKU09iamVjdCogY3JlYXRlUmVmZXJlbmNlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyIGFwcGVuZGVyKQog
ewogICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAgIHJldHVybiBFcnJvckluc3Rh
bmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QtPnJlZmVyZW5jZUVy
cm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAg
ICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdC0+dm0oKSwg
Z2xvYmFsT2JqZWN0LT5yZWZlcmVuY2VFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJl
KCksIG1lc3NhZ2UsIGFwcGVuZGVyLCBUeXBlTm90aGluZywgdHJ1ZSk7CiB9CiAKLUpTT2JqZWN0
KiBjcmVhdGVTeW50YXhFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCitKU09iamVjdCogY3JlYXRlU3ludGF4RXJyb3IoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVy
IGFwcGVuZGVyKQogewogICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAgIHJldHVy
biBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3Qt
PnN5bnRheEVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7Cisg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKTsKKyAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVj
dC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5zeW50YXhFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3Ry
dWN0dXJlKCksIG1lc3NhZ2UsIGFwcGVuZGVyLCBUeXBlTm90aGluZywgdHJ1ZSk7CiB9CiAKLUpT
T2JqZWN0KiBjcmVhdGVUeXBlRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQorSlNPYmplY3QqIGNyZWF0ZVR5cGVFcnJvcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5k
ZXIgYXBwZW5kZXIsIFJ1bnRpbWVUeXBlIHR5cGUpCiB7CiAgICAgQVNTRVJUKCFtZXNzYWdlLmlz
RW1wdHkoKSk7Ci0gICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShnbG9iYWxPYmplY3Qt
PnZtKCksIGdsb2JhbE9iamVjdC0+dHlwZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1
cmUoKSwgbWVzc2FnZSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRl
KGV4ZWMsIGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT50eXBlRXJyb3JDb25zdHJ1
Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlLCBhcHBlbmRlciwgdHlwZSwgdHJ1ZSk7
CiB9CiAKLUpTT2JqZWN0KiBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQorSlNPYmplY3QqIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKEV4ZWNTdGF0ZSogZXhlYywgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIgYXBwZW5k
ZXIpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIEFTQ0lJTGl0
ZXJhbCgiTm90IGVub3VnaCBhcmd1bWVudHMiKSk7CisgICAgcmV0dXJuIGNyZWF0ZVR5cGVFcnJv
cihleGVjLCBBU0NJSUxpdGVyYWwoIk5vdCBlbm91Z2ggYXJndW1lbnRzIiksIGFwcGVuZGVyLCBU
eXBlTm90aGluZyk7CiB9CiAKLUpTT2JqZWN0KiBjcmVhdGVVUklFcnJvcihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCitKU09iamVjdCogY3JlYXRl
VVJJRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEVycm9ySW5z
dGFuY2U6OlNvdXJjZUFwcGVuZGVyIGFwcGVuZGVyKQogewogICAgIEFTU0VSVCghbWVzc2FnZS5p
c0VtcHR5KCkpOwotICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0
LT52bSgpLCBnbG9iYWxPYmplY3QtPlVSSUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1
cmUoKSwgbWVzc2FnZSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRl
KGV4ZWMsIGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5VUklFcnJvckNvbnN0cnVj
dG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UsIGFwcGVuZGVyLCBUeXBlTm90aGluZywg
dHJ1ZSk7CiB9CiAKLUpTT2JqZWN0KiBjcmVhdGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKK0pTT2JqZWN0KiBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKEV4ZWNT
dGF0ZSogZXhlYywgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIgYXBwZW5kZXIpIAogewot
ICAgIHJldHVybiBjcmVhdGVFcnJvcihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIG1lc3Nh
Z2UpOwotfQotCi1KU09iamVjdCogY3JlYXRlRXZhbEVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIHJldHVybiBjcmVhdGVFdmFsRXJyb3IoZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBtZXNzYWdlKTsKLX0KLQotSlNPYmplY3QqIGNyZWF0ZVJh
bmdlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAg
cmV0dXJuIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBtZXNz
YWdlKTsKLX0KLQotSlNPYmplY3QqIGNyZWF0ZVJlZmVyZW5jZUVycm9yKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIHJldHVybiBjcmVhdGVSZWZlcmVuY2VF
cnJvcihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIG1lc3NhZ2UpOwotfQotCi1KU09iamVj
dCogY3JlYXRlU3ludGF4RXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSwgbWVzc2FnZSk7Ci19Ci0KLUpTT2JqZWN0KiBjcmVhdGVUeXBlRXJyb3IoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVR5
cGVFcnJvcihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIG1lc3NhZ2UpOwotfQotCi1KU09i
amVjdCogY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIHJldHVybiBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpOwotfQotCi1KU09iamVjdCogY3JlYXRlVVJJRXJyb3IoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVVSSUVycm9y
KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbWVzc2FnZSk7CisgICAgcmV0dXJuIGNyZWF0
ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiT3V0IG9mIG1lbW9yeSIpLCBhcHBlbmRlcik7CiB9
CiAKIEpTT2JqZWN0KiBhZGRFcnJvckluZm8oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0
KiBlcnJvciwgaW50IGxpbmUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKZGlmZiAtLWdpdCBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5oIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Vycm9yLmgKaW5kZXggNGNjMWNkYS4uZWUwM2NmMDEgMTAwNjQ0Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvci5oCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FcnJvci5oCkBAIC0yMywxMSArMjMsMTMgQEAKICNpZm5kZWYgRXJyb3JfaAog
I2RlZmluZSBFcnJvcl9oCiAKKyNpbmNsdWRlICJFcnJvckluc3RhbmNlLmgiCiAjaW5jbHVkZSAi
SW50ZXJuYWxGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAi
SlNPYmplY3QuaCIKICNpbmNsdWRlIDxzdGRpbnQuaD4KIAorCiBuYW1lc3BhY2UgSlNDIHsKIAog
Y2xhc3MgRXhlY1N0YXRlOwpAQCAtMzcsMjQgKzM5LDE3IEBAIGNsYXNzIEpTT2JqZWN0OwogY2xh
c3MgU291cmNlQ29kZTsKIGNsYXNzIFN0cnVjdHVyZTsKIAotLy8gTWV0aG9kcyB0byBjcmVhdGUg
YSByYW5nZSBvZiBpbnRlcm5hbCBlcnJvcnMuCi1KU09iamVjdCogY3JlYXRlRXJyb3IoSlNHbG9i
YWxPYmplY3QqLCBjb25zdCBTdHJpbmcmKTsKLUpTT2JqZWN0KiBjcmVhdGVFdmFsRXJyb3IoSlNH
bG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmKTsKLUpTT2JqZWN0KiBjcmVhdGVSYW5nZUVycm9y
KEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJik7Ci1KU09iamVjdCogY3JlYXRlUmVmZXJl
bmNlRXJyb3IoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmKTsKLUpTT2JqZWN0KiBjcmVh
dGVTeW50YXhFcnJvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYpOwotSlNPYmplY3Qq
IGNyZWF0ZVR5cGVFcnJvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYpOwotSlNPYmpl
Y3QqIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKEpTR2xvYmFsT2JqZWN0Kik7Ci1KU09i
amVjdCogY3JlYXRlVVJJRXJyb3IoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmKTsKIC8v
IEV4ZWNTdGF0ZSB3cmFwcGVycy4KLUpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjcmVhdGVF
cnJvcihFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKLUpTT2JqZWN0KiBjcmVhdGVFdmFsRXJy
b3IoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7Ci1KU19FWFBPUlRfUFJJVkFURSBKU09iamVj
dCogY3JlYXRlUmFuZ2VFcnJvcihFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKLUpTX0VYUE9S
VF9QUklWQVRFIEpTT2JqZWN0KiBjcmVhdGVSZWZlcmVuY2VFcnJvcihFeGVjU3RhdGUqLCBjb25z
dCBTdHJpbmcmKTsKLUpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjcmVhdGVTeW50YXhFcnJv
cihFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKLUpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0
KiBjcmVhdGVUeXBlRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7Ci1KU19FWFBPUlRf
UFJJVkFURSBKU09iamVjdCogY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoRXhlY1N0YXRl
Kik7Ci1KU09iamVjdCogY3JlYXRlVVJJRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7
CitKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY3JlYXRlRXJyb3IoRXhlY1N0YXRlKiwgY29u
c3QgU3RyaW5nJiwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIgPSBudWxscHRyKTsKK0pT
X0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjcmVhdGVFdmFsRXJyb3IoRXhlY1N0YXRlKiwgY29u
c3QgU3RyaW5nJiwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIgPSBudWxscHRyKTsKK0pT
X0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjcmVhdGVSYW5nZUVycm9yKEV4ZWNTdGF0ZSosIGNv
bnN0IFN0cmluZyYsIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyID0gbnVsbHB0cik7CitK
U19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY3JlYXRlUmVmZXJlbmNlRXJyb3IoRXhlY1N0YXRl
KiwgY29uc3QgU3RyaW5nJiwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIgPSBudWxscHRy
KTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjcmVhdGVTeW50YXhFcnJvcihFeGVjU3Rh
dGUqLCBjb25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlciA9IG51bGxw
dHIpOworSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZVR5cGVFcnJvcihFeGVjU3Rh
dGUqLCBjb25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlciA9IG51bGxw
dHIsIFJ1bnRpbWVUeXBlID0gVHlwZU5vdGhpbmcpOworSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmpl
Y3QqIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKEV4ZWNTdGF0ZSosIEVycm9ySW5zdGFu
Y2U6OlNvdXJjZUFwcGVuZGVyID0gbnVsbHB0cik7CitKU19FWFBPUlRfUFJJVkFURSBKU09iamVj
dCogY3JlYXRlVVJJRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiwgRXJyb3JJbnN0YW5j
ZTo6U291cmNlQXBwZW5kZXIgPSBudWxscHRyKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0
KiBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKEV4ZWNTdGF0ZSosIEVycm9ySW5zdGFuY2U6OlNvdXJj
ZUFwcGVuZGVyID0gbnVsbHB0cik7CisKIAogLy8gTWV0aG9kcyB0byBhZGQgCiBib29sIGhhc0Vy
cm9ySW5mbyhFeGVjU3RhdGUqLCBKU09iamVjdCogZXJyb3IpOwpkaWZmIC0tZ2l0IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwCmluZGV4IDZkYTFhNDIuLjMwYzRm
YWEgMTAwNjQ0Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVj
dG9yLmNwcAorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rv
ci5jcHAKQEAgLTUyLDEwICs1Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50
ZXJwcmV0ZXI6OmNvbnN0cnVjdFdpdGhFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0CiB7CiAgICAg
SlNWYWx1ZSBtZXNzYWdlID0gZXhlYy0+YXJndW1lbnRDb3VudCgpID8gZXhlYy0+YXJndW1lbnQo
MCkgOiBqc1VuZGVmaW5lZCgpOwogICAgIFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1cmUgPSBhc0lu
dGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+ZXJyb3JTdHJ1
Y3R1cmUoKTsKLSAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsKLSAgICBleGVjLT52
bSgpLmludGVycHJldGVyLT5nZXRTdGFja1RyYWNlKHN0YWNrVHJhY2UsIHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCkpOwotICAgIHN0YWNrVHJhY2UucmVtb3ZlKDApOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsIGVycm9yU3Ry
dWN0dXJlLCBtZXNzYWdlLCBzdGFja1RyYWNlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1cmUsIG1lc3NhZ2UsIG51
bGxwdHIsIFR5cGVOb3RoaW5nLCBmYWxzZSkpOwogfQogCiBDb25zdHJ1Y3RUeXBlIEVycm9yQ29u
c3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3Ry
dWN0RGF0YSkKQEAgLTY4LDEwICs2NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
SW50ZXJwcmV0ZXI6OmNhbGxFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBKU1ZhbHVlIG1lc3NhZ2UgPSBleGVjLT5hcmd1bWVudENvdW50KCkgPyBleGVjLT5hcmd1bWVu
dCgwKSA6IGpzVW5kZWZpbmVkKCk7CiAgICAgU3RydWN0dXJlKiBlcnJvclN0cnVjdHVyZSA9IGFz
SW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT5lcnJvclN0
cnVjdHVyZSgpOwotICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlOwotICAgIGV4ZWMt
PnZtKCkuaW50ZXJwcmV0ZXItPmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSwgc3RkOjpudW1lcmlj
X2xpbWl0czxzaXplX3Q+OjptYXgoKSk7Ci0gICAgc3RhY2tUcmFjZS5yZW1vdmUoMCk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXJyb3JT
dHJ1Y3R1cmUsIG1lc3NhZ2UsIHN0YWNrVHJhY2UpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVjdHVyZSwgbWVzc2FnZSwg
bnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZhbHNlKSk7CiB9CiAKIENhbGxUeXBlIEVycm9yQ29uc3Ry
dWN0b3I6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKZGlmZiAtLWdp
dCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcCBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAppbmRleCBhZGQwYjIxLi42
ZjIxNzk5IDEwMDY0NAotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0
YW5jZS5jcHAKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2Uu
Y3BwCkBAIC0yMyw2ICsyMyw4IEBACiAKICNpbmNsdWRlICJKU1Njb3BlLmgiCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgiCisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzUsMTUgKzM3LDE0
NCBAQCBFcnJvckluc3RhbmNlOjpFcnJvckluc3RhbmNlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiB7CiB9CiAKLXZvaWQgRXJyb3JJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlKQor
c3RhdGljIHZvaWQgYXBwZW5kU291cmNlVG9FcnJvcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRXJy
b3JJbnN0YW5jZSogZXhjZXB0aW9uLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKIHsKKyAgICBF
cnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlciBhcHBlbmRlciA9IGV4Y2VwdGlvbi0+c291cmNl
QXBwZW5kZXIoKTsKKyAgICBleGNlcHRpb24tPmNsZWFyU291cmNlQXBwZW5kZXIoKTsKKyAgICBS
dW50aW1lVHlwZSB0eXBlID0gZXhjZXB0aW9uLT5ydW50aW1lVHlwZUZvckNhdXNlKCk7CisgICAg
ZXhjZXB0aW9uLT5jbGVhclJ1bnRpbWVUeXBlRm9yQ2F1c2UoKTsKKworICAgIGlmICghY2FsbEZy
YW1lLT5jb2RlQmxvY2soKS0+aGFzRXhwcmVzc2lvbkluZm8oKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIGludCBzdGFydE9mZnNldCA9IDA7CisgICAgaW50IGVuZE9mZnNldCA9IDA7Cisg
ICAgaW50IGRpdm90UG9pbnQgPSAwOworICAgIHVuc2lnbmVkIGxpbmUgPSAwOworICAgIHVuc2ln
bmVkIGNvbHVtbiA9IDA7CisgICAgCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpOworICAgIGNvZGVCbG9jay0+ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNv
ZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIGRpdm90UG9pbnQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZz
ZXQsIGxpbmUsIGNvbHVtbik7CisgICAgCisgICAgaW50IGV4cHJlc3Npb25TdGFydCA9IGRpdm90
UG9pbnQgLSBzdGFydE9mZnNldDsKKyAgICBpbnQgZXhwcmVzc2lvblN0b3AgPSBkaXZvdFBvaW50
ICsgZW5kT2Zmc2V0OworCisgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcgPSBjb2RlQmxv
Y2stPnNvdXJjZSgpLT5zb3VyY2UoKTsKKyAgICBpZiAoIWV4cHJlc3Npb25TdG9wIHx8IGV4cHJl
c3Npb25TdGFydCA+IHN0YXRpY19jYXN0PGludD4oc291cmNlU3RyaW5nLmxlbmd0aCgpKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIFZNKiB2bSA9ICZjYWxsRnJhbWUtPnZtKCk7CisgICAg
SlNWYWx1ZSBqc01lc3NhZ2UgPSBleGNlcHRpb24tPmdldERpcmVjdCgqdm0sIHZtLT5wcm9wZXJ0
eU5hbWVzLT5tZXNzYWdlKTsKKyAgICBpZiAoIWpzTWVzc2FnZSB8fCAhanNNZXNzYWdlLmlzU3Ry
aW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBTdHJpbmcgbWVzc2FnZSA9IGFzU3Ry
aW5nKGpzTWVzc2FnZSktPnZhbHVlKGNhbGxGcmFtZSk7CisgICAgaWYgKGV4cHJlc3Npb25TdGFy
dCA8IGV4cHJlc3Npb25TdG9wKQorICAgICAgICBtZXNzYWdlID0gYXBwZW5kZXIobWVzc2FnZSwg
Y29kZUJsb2NrLT5zb3VyY2UoKS0+Z2V0UmFuZ2UoZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9u
U3RvcCkgLCB0eXBlLCBFcnJvckluc3RhbmNlOjpGb3VuZEV4YWN0U291cmNlKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgLy8gTm8gcmFuZ2UgaW5mb3JtYXRpb24sIHNvIGdpdmUgYSBmZXcgY2hhcmFj
dGVycyBvZiBjb250ZXh0LgorICAgICAgICBjb25zdCBTdHJpbmdJbXBsKiBkYXRhID0gc291cmNl
U3RyaW5nLmltcGwoKTsKKyAgICAgICAgaW50IGRhdGFMZW5ndGggPSBzb3VyY2VTdHJpbmcubGVu
Z3RoKCk7CisgICAgICAgIGludCBzdGFydCA9IGV4cHJlc3Npb25TdGFydDsKKyAgICAgICAgaW50
IHN0b3AgPSBleHByZXNzaW9uU3RhcnQ7CisgICAgICAgIC8vIEdldCB1cCB0byAyMCBjaGFyYWN0
ZXJzIG9mIGNvbnRleHQgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0IG9mIHRoZSBkaXZvdCwgY2xhbXBp
bmcgdG8gdGhlIGxpbmUuCisgICAgICAgIC8vIFRoZW4gc3RyaXAgd2hpdGVzcGFjZS4KKyAgICAg
ICAgd2hpbGUgKHN0YXJ0ID4gMCAmJiAoZXhwcmVzc2lvblN0YXJ0IC0gc3RhcnQgPCAyMCkgJiYg
KCpkYXRhKVtzdGFydCAtIDFdICE9ICdcbicpCisgICAgICAgICAgICBzdGFydC0tOworICAgICAg
ICB3aGlsZSAoc3RhcnQgPCAoZXhwcmVzc2lvblN0YXJ0IC0gMSkgJiYgaXNTdHJXaGl0ZVNwYWNl
KCgqZGF0YSlbc3RhcnRdKSkKKyAgICAgICAgICAgIHN0YXJ0Kys7CisgICAgICAgIHdoaWxlIChz
dG9wIDwgZGF0YUxlbmd0aCAmJiAoc3RvcCAtIGV4cHJlc3Npb25TdGFydCA8IDIwKSAmJiAoKmRh
dGEpW3N0b3BdICE9ICdcbicpCisgICAgICAgICAgICBzdG9wKys7CisgICAgICAgIHdoaWxlIChz
dG9wID4gZXhwcmVzc2lvblN0YXJ0ICYmIGlzU3RyV2hpdGVTcGFjZSgoKmRhdGEpW3N0b3AgLSAx
XSkpCisgICAgICAgICAgICBzdG9wLS07CisgICAgICAgIG1lc3NhZ2UgPSBhcHBlbmRlcihtZXNz
YWdlLCBjb2RlQmxvY2stPnNvdXJjZSgpLT5nZXRSYW5nZShzdGFydCwgc3RvcCksIHR5cGUsIEVy
cm9ySW5zdGFuY2U6OkZvdW5kQXBwcm94aW1hdGVTb3VyY2UpOworICAgIH0KKyAgICBleGNlcHRp
b24tPnB1dERpcmVjdCgqdm0sIHZtLT5wcm9wZXJ0eU5hbWVzLT5tZXNzYWdlLCBqc1N0cmluZyh2
bSwgbWVzc2FnZSkpOworCit9CisKK2NsYXNzIEZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVi
bG9ja0Z1bmN0b3IgeworcHVibGljOgorICAgIEZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVi
bG9ja0Z1bmN0b3IoQ2FsbEZyYW1lKiBzdGFydENhbGxGcmFtZSkKKyAgICAgICAgOiBtX3N0YXJ0
Q2FsbEZyYW1lKHN0YXJ0Q2FsbEZyYW1lKQorICAgICAgICAsIG1fZm91bmRDYWxsRnJhbWUobnVs
bHB0cikKKyAgICAgICAgLCBtX2ZvdW5kU3RhcnRDYWxsRnJhbWUoZmFsc2UpCisgICAgICAgICwg
bV9pbmRleCgwKQorICAgIHsgfQorCisgICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3Io
KShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpCisgICAgeworICAgICAgICBpZiAoIW1fZm91bmRTdGFy
dENhbGxGcmFtZSAmJiAodmlzaXRvci0+Y2FsbEZyYW1lKCkgPT0gbV9zdGFydENhbGxGcmFtZSkp
CisgICAgICAgICAgICBtX2ZvdW5kU3RhcnRDYWxsRnJhbWUgPSB0cnVlOworCisgICAgICAgIGlm
IChtX2ZvdW5kU3RhcnRDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIGlmICh2aXNpdG9yLT5jYWxs
RnJhbWUoKS0+Y29kZUJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBtX2ZvdW5kQ2FsbEZyYW1l
ID0gdmlzaXRvci0+Y2FsbEZyYW1lKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlz
aXRvcjo6RG9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOworICAgIH0KKwor
ICAgIENhbGxGcmFtZSogZm91bmRDYWxsRnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2ZvdW5kQ2Fs
bEZyYW1lOyB9CisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9
CisKK3ByaXZhdGU6CisgICAgQ2FsbEZyYW1lKiBtX3N0YXJ0Q2FsbEZyYW1lOworICAgIENhbGxG
cmFtZSogbV9mb3VuZENhbGxGcmFtZTsKKyAgICBib29sIG1fZm91bmRTdGFydENhbGxGcmFtZTsK
KyAgICB1bnNpZ25lZCBtX2luZGV4OworfTsKKwordm9pZCBFcnJvckluc3RhbmNlOjpmaW5pc2hD
cmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBi
b29sIHVzZUN1cnJlbnRGcmFtZSkKK3sKKyAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFj
ZSA9IFZlY3RvcjxTdGFja0ZyYW1lPigpOwogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
ICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgaWYgKCFtZXNzYWdlLmlzTnVsbCgp
KQogICAgICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm1lc3NhZ2UsIGpzU3Ry
aW5nKCZ2bSwgbWVzc2FnZSksIERvbnRFbnVtKTsKLSAgICAKLSAgICBpZiAoIXN0YWNrVHJhY2Uu
aXNFbXB0eSgpKQorCisgICAgaWYgKGV4ZWMgJiYgc3RhY2tUcmFjZS5pc0VtcHR5KCkpCisgICAg
ICAgIGV4ZWMtPnZtKCkuaW50ZXJwcmV0ZXItPmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSk7CisK
KyAgICBpZiAoIXN0YWNrVHJhY2UuaXNFbXB0eSgpKSB7CisKKworICAgICAgICBBU1NFUlQoZXhl
YyA9PSB2bS50b3BDYWxsRnJhbWUgfHwgZXhlYyA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKSB8fCBleGVjID09IGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+
Z2xvYmFsRXhlYygpKTsKKworICAgICAgICBTdGFja0ZyYW1lKiBzdGFja0ZyYW1lOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwIDsgaSA8IHN0YWNrVHJhY2Uuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgIHN0YWNrRnJhbWUgPSAmc3RhY2tUcmFjZS5hdChpKTsKKyAgICAgICAgICAgIGlm
IChzdGFja0ZyYW1lLT5ieXRlY29kZU9mZnNldCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICB1bnNpZ25lZCBsaW5lOworICAgICAgICB1bnNpZ25lZCBjb2x1bW47
CisgICAgICAgIHN0YWNrRnJhbWUtPmNvbXB1dGVMaW5lQW5kQ29sdW1uKGxpbmUsIGNvbHVtbik7
CisgICAgICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGluZSwganNOdW1iZXIo
bGluZSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CisgICAgICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+Y29sdW1uLCBqc051bWJlcihjb2x1bW4pLCBSZWFkT25seSB8IERvbnRE
ZWxldGUpOworCisgICAgICAgIGlmICghc3RhY2tGcmFtZS0+c291cmNlVVJMLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+c291cmNlVVJMLCBq
c1N0cmluZygmdm0sIHN0YWNrRnJhbWUtPnNvdXJjZVVSTCksIFJlYWRPbmx5IHwgRG9udERlbGV0
ZSk7CisKKyAgICAgICAgaWYgKGhhc1NvdXJjZUFwcGVuZGVyKCkpIHsKKyAgICAgICAgICAgIEZp
bmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3IgZnVuY3RvcihleGVjKTsKKyAg
ICAgICAgICAgIHZtLnRvcENhbGxGcmFtZS0+aXRlcmF0ZShmdW5jdG9yKTsKKyAgICAgICAgICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gZnVuY3Rvci5mb3VuZENhbGxGcmFtZSgpOworICAgICAg
ICAgICAgdW5zaWduZWQgc3RhY2tJbmRleCA9IGZ1bmN0b3IuaW5kZXgoKTsKKworICAgICAgICAg
ICAgaWYgKGNhbGxGcmFtZSAmJiBjYWxsRnJhbWUtPmNvZGVCbG9jaygpKQorICAgICAgICAgICAg
ICAgIGFwcGVuZFNvdXJjZVRvRXJyb3IoY2FsbEZyYW1lLCB0aGlzLCBzdGFja1RyYWNlLmF0KHN0
YWNrSW5kZXgpLmJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdXNl
Q3VycmVudEZyYW1lKQorICAgICAgICAgICAgc3RhY2tUcmFjZS5yZW1vdmUoMCk7CiAgICAgICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+c3RhY2ssIHZtLmludGVycHJldGVyLT5z
dGFja1RyYWNlQXNTdHJpbmcodm0udG9wQ2FsbEZyYW1lLCBzdGFja1RyYWNlKSwgRG9udEVudW0p
OworCisgICAgfQorCiB9CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmggU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCmluZGV4IGMyZTNiOWMuLjJlNmE3NjIgMTAw
NjQ0Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaApAQCAtMjQsNiAr
MjQsNyBAQAogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiUnVudGltZVR5cGUu
aCIKICNpbmNsdWRlICJTb3VyY2VQcm92aWRlci5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTMxLDYgKzMyLDkgQEAgY2xhc3MgRXJyb3JJbnN0YW5j
ZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTTm9u
RmluYWxPYmplY3QgQmFzZTsKIAorICAgIGVudW0gU291cmNlVGV4dFdoZXJlRXJyb3JPY2N1cnJl
ZCB7IEZvdW5kRXhhY3RTb3VyY2UsIEZvdW5kQXBwcm94aW1hdGVTb3VyY2UgfTsKKyAgICB0eXBl
ZGVmIFN0cmluZyAoKlNvdXJjZUFwcGVuZGVyKSAoY29uc3QgU3RyaW5nJiBvcmlnaW5hbE1lc3Nh
Z2UsIGNvbnN0IFN0cmluZyYgc291cmNlVGV4dCwgUnVudGltZVR5cGUsIFNvdXJjZVRleHRXaGVy
ZUVycm9yT2NjdXJyZWQpOworCiAgICAgREVDTEFSRV9JTkZPOwogCiAgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpCkBAIC0zOCwyMSArNDIsMjAgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhFcnJvckluc3RhbmNlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAg
IH0KIAotICAgIHN0YXRpYyBFcnJvckluc3RhbmNlKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBWZWN0b3I8U3RhY2tGcmFtZT4gc3Rh
Y2tUcmFjZSA9IFZlY3RvcjxTdGFja0ZyYW1lPigpKQorICAgIHN0YXRpYyBFcnJvckluc3RhbmNl
KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIFNvdXJjZUFwcGVuZGVyIGFwcGVuZGVyID0gbnVsbHB0ciwg
UnVudGltZVR5cGUgdHlwZSA9IFR5cGVOb3RoaW5nLCBib29sIHVzZUN1cnJlbnRGcmFtZSA9IHRy
dWUpCiAgICAgewogICAgICAgICBFcnJvckluc3RhbmNlKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEVycm9ySW5zdGFuY2U+KHZtLmhlYXApKSBFcnJvckluc3RhbmNlKHZt
LCBzdHJ1Y3R1cmUpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIG1lc3Nh
Z2UsIHN0YWNrVHJhY2UpOworICAgICAgICBpbnN0YW5jZS0+bV9zb3VyY2VBcHBlbmRlciA9IGFw
cGVuZGVyOworICAgICAgICBpbnN0YW5jZS0+bV9ydW50aW1lVHlwZUZvckNhdXNlID0gdHlwZTsK
KyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIHZtLCBtZXNzYWdlLCB1c2VD
dXJyZW50RnJhbWUpOwogICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCi0gICAgc3Rh
dGljIEVycm9ySW5zdGFuY2UqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU1ZhbHVlIG1lc3NhZ2UsIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlID0g
VmVjdG9yPFN0YWNrRnJhbWU+KCkpCisgICAgc3RhdGljIEVycm9ySW5zdGFuY2UqIGNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1ZhbHVlIG1lc3NhZ2UsIFNv
dXJjZUFwcGVuZGVyIGFwcGVuZGVyID0gbnVsbHB0ciwgUnVudGltZVR5cGUgdHlwZSA9IFR5cGVO
b3RoaW5nLCBib29sIHVzZUN1cnJlbnRGcmFtZSA9IHRydWUpCiAgICAgewotICAgICAgICByZXR1
cm4gY3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgbWVzc2FnZS5pc1VuZGVmaW5lZCgpID8g
U3RyaW5nKCkgOiBtZXNzYWdlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgc3RhY2tUcmFj
ZSk7CisgICAgICAgIHJldHVybiBjcmVhdGUoZXhlYywgZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBt
ZXNzYWdlLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IG1lc3NhZ2UudG9TdHJpbmcoZXhlYykt
PnZhbHVlKGV4ZWMpLCBhcHBlbmRlciwgdHlwZSwgdXNlQ3VycmVudEZyYW1lKTsKICAgICB9CiAK
LSAgICBlbnVtIFNvdXJjZVRleHRXaGVyZUVycm9yT2NjdXJyZWQgeyBGb3VuZEV4YWN0U291cmNl
LCBGb3VuZEFwcHJveGltYXRlU291cmNlIH07Ci0gICAgdHlwZWRlZiBTdHJpbmcgKCpTb3VyY2VB
cHBlbmRlcikgKGNvbnN0IFN0cmluZyYgb3JpZ2luYWxNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNv
dXJjZVRleHQsIFJ1bnRpbWVUeXBlLCBTb3VyY2VUZXh0V2hlcmVFcnJvck9jY3VycmVkKTsKLQog
ICAgIGJvb2wgaGFzU291cmNlQXBwZW5kZXIoKSBjb25zdCB7IHJldHVybiAhIW1fc291cmNlQXBw
ZW5kZXI7IH0KICAgICBTb3VyY2VBcHBlbmRlciBzb3VyY2VBcHBlbmRlcigpIGNvbnN0IHsgcmV0
dXJuIG1fc291cmNlQXBwZW5kZXI7IH0KICAgICB2b2lkIHNldFNvdXJjZUFwcGVuZGVyKFNvdXJj
ZUFwcGVuZGVyIGFwcGVuZGVyKSB7IG1fc291cmNlQXBwZW5kZXIgPSBhcHBlbmRlcjsgfQpAQCAt
NjQsNyArNjcsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgRXJyb3JJbnN0
YW5jZShWTSYsIFN0cnVjdHVyZSopOwogCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIGNv
bnN0IFN0cmluZyYsIFZlY3RvcjxTdGFja0ZyYW1lPiA9IFZlY3RvcjxTdGFja0ZyYW1lPigpKTsK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSosIFZNJiwgY29uc3QgU3RyaW5nJiwg
Ym9vbCB1c2VDdXJyZW50RnJhbWUgPSB0cnVlKTsKIAogICAgIFNvdXJjZUFwcGVuZGVyIG1fc291
cmNlQXBwZW5kZXIgeyBudWxscHRyIH07CiAgICAgUnVudGltZVR5cGUgbV9ydW50aW1lVHlwZUZv
ckNhdXNlIHsgVHlwZU5vdGhpbmcgfTsKZGlmZiAtLWdpdCBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXJyb3JQcm90b3R5cGUuY3BwCmluZGV4IGNmOGZmMmEuLjViYzJlYzMgMTAwNjQ0Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcApAQCAtNTQsOSArNTQsOSBA
QCBFcnJvclByb3RvdHlwZTo6RXJyb3JQcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKIHsKIH0KIAotdm9pZCBFcnJvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCopCit2b2lkIEVycm9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0sICIiKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKSwgdm0sICIiKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJp
bmcoJnZtLCBTdHJpbmcoQVNDSUlMaXRlcmFsKCJFcnJvciIpKSksIERvbnRFbnVtKTsKIH0KZGlm
ZiAtLWdpdCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25GdXp6LmNwcCBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25GdXp6LmNwcAppbmRleCBjODM1
NjA1Li43NDRiMWE2IDEwMDY0NAotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhj
ZXB0aW9uRnV6ei5jcHAKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlv
bkZ1enouY3BwCkBAIC00OCw3ICs0OCw3IEBAIHZvaWQgZG9FeGNlcHRpb25GdXp6aW5nKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgY2hhciogd2hlcmUsIHZvaWQqIHJldHVyblBDKQogICAgIGlmIChm
aXJlVGFyZ2V0ID09IHNfbnVtYmVyT2ZFeGNlcHRpb25GdXp6Q2hlY2tzKSB7CiAgICAgICAgIHBy
aW50ZigiSlNDIEVYQ0VQVElPTiBGVVpaOiBUaHJvd2luZyBmdXp6IGV4Y2VwdGlvbiB3aXRoIGNh
bGwgZnJhbWUgJXAsIHNlZW4gaW4gJXMgYW5kIHJldHVybiBhZGRyZXNzICVwLlxuIiwgZXhlYywg
d2hlcmUsIHJldHVyblBDKTsKICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbigKLSAg
ICAgICAgICAgIGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
QVNDSUlMaXRlcmFsKCJFeGNlcHRpb24gRnV6eiIpKSk7CisgICAgICAgICAgICBleGVjLCBjcmVh
dGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkV4Y2VwdGlvbiBGdXp6IikpKTsKICAgICB9CiB9
CiAKZGlmZiAtLWdpdCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxw
ZXJzLmNwcCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNw
cAppbmRleCBhN2JlMTc0Li5jOGYyODk4IDEwMDY0NAotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCkBAIC03NSwxMSArNzUsNiBAQCBKU09iamVjdCog
Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gY3Jl
YXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIk1heGltdW0gY2FsbCBzdGFjayBzaXpl
IGV4Y2VlZGVkLiIpKTsKIH0KIAotSlNPYmplY3QqIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBjcmVhdGVSYW5nZUVy
cm9yKGdsb2JhbE9iamVjdCwgQVNDSUlMaXRlcmFsKCJNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBl
eGNlZWRlZC4iKSk7Ci19Ci0KIEpTT2JqZWN0KiBjcmVhdGVVbmRlZmluZWRWYXJpYWJsZUVycm9y
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCiB7CiAgICAgCkBAIC0y
NDAsNDggKzIzNSw0NCBAQCBzdGF0aWMgU3RyaW5nIGludmFsaWRQYXJhbWV0ZXJJbnN0YW5jZW9m
U291cmNlQXBwZW5kZXIoY29uc3QgU3RyaW5nJiBvcmlnaW5hbE1lcwogICAgIHJldHVybiBtYWtl
U3RyaW5nKHJpZ2h0SGFuZFNpZGUsICIgaXMgbm90IGEgZnVuY3Rpb24uIChldmFsdWF0aW5nICci
LCBzb3VyY2VUZXh0LCAiJykiKTsKIH0KIAotSlNPYmplY3QqIGNyZWF0ZUVycm9yKEV4ZWNTdGF0
ZSogZXhlYywgRXJyb3JGYWN0b3J5IGVycm9yRmFjdG9yeSwgSlNWYWx1ZSB2YWx1ZSwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlciBhcHBlbmRlcikK
K0pTT2JqZWN0KiBjcmVhdGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIgYXBwZW5k
ZXIpCiB7CiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoZXJyb3JEZXNjcmlw
dGlvbkZvclZhbHVlKGV4ZWMsIHZhbHVlKS0+dmFsdWUoZXhlYyksICcgJywgbWVzc2FnZSk7Ci0g
ICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IGVycm9yRmFjdG9yeShleGVjLCBlcnJvck1lc3NhZ2Up
OworICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoZXhlYywgZXJyb3JN
ZXNzYWdlLCBhcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZSh2YWx1ZSkpOwogICAgIEFTU0VS
VChleGNlcHRpb24tPmlzRXJyb3JJbnN0YW5jZSgpKTsKLSAgICBzdGF0aWNfY2FzdDxFcnJvcklu
c3RhbmNlKj4oZXhjZXB0aW9uKS0+c2V0U291cmNlQXBwZW5kZXIoYXBwZW5kZXIpOwotICAgIHN0
YXRpY19jYXN0PEVycm9ySW5zdGFuY2UqPihleGNlcHRpb24pLT5zZXRSdW50aW1lVHlwZUZvckNh
dXNlKHJ1bnRpbWVUeXBlRm9yVmFsdWUodmFsdWUpKTsKICAgICByZXR1cm4gZXhjZXB0aW9uOwog
fQogCiBKU09iamVjdCogY3JlYXRlSW52YWxpZEZ1bmN0aW9uQXBwbHlQYXJhbWV0ZXJFcnJvcihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgSlNPYmplY3QqIGV4Y2VwdGlv
biA9IGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtYWtlU3RyaW5nKCJzZWNvbmQgYXJndW1lbnQgdG8g
RnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5IG11c3QgYmUgYW4gQXJyYXktbGlrZSBvYmplY3QiKSk7
CisgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtYWtlU3Ry
aW5nKCJzZWNvbmQgYXJndW1lbnQgdG8gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5IG11c3QgYmUg
YW4gQXJyYXktbGlrZSBvYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlw
ZUZvclZhbHVlKHZhbHVlKSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvbi0+aXNFcnJvckluc3RhbmNl
KCkpOwotICAgIHN0YXRpY19jYXN0PEVycm9ySW5zdGFuY2UqPihleGNlcHRpb24pLT5zZXRTb3Vy
Y2VBcHBlbmRlcihkZWZhdWx0U291cmNlQXBwZW5kZXIpOwotICAgIHN0YXRpY19jYXN0PEVycm9y
SW5zdGFuY2UqPihleGNlcHRpb24pLT5zZXRSdW50aW1lVHlwZUZvckNhdXNlKHJ1bnRpbWVUeXBl
Rm9yVmFsdWUodmFsdWUpKTsKICAgICByZXR1cm4gZXhjZXB0aW9uOwogfQogCiBKU09iamVjdCog
Y3JlYXRlSW52YWxpZEluUGFyYW1ldGVyRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZh
bHVlKQogewotICAgIHJldHVybiBjcmVhdGVFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IsIHZh
bHVlLCBtYWtlU3RyaW5nKCJpcyBub3QgYW4gT2JqZWN0LiIpLCBpbnZhbGlkUGFyYW1ldGVySW5T
b3VyY2VBcHBlbmRlcik7CisgICAgcmV0dXJuIGNyZWF0ZUVycm9yKGV4ZWMsIHZhbHVlLCBtYWtl
U3RyaW5nKCJpcyBub3QgYW4gT2JqZWN0LiIpLCBpbnZhbGlkUGFyYW1ldGVySW5Tb3VyY2VBcHBl
bmRlcik7CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVJbnZhbGlkSW5zdGFuY2VvZlBhcmFtZXRlckVy
cm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gY3JlYXRl
RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yLCB2YWx1ZSwgbWFrZVN0cmluZygiaXMgbm90IGEg
ZnVuY3Rpb24uIiksIGludmFsaWRQYXJhbWV0ZXJJbnN0YW5jZW9mU291cmNlQXBwZW5kZXIpOwor
ICAgIHJldHVybiBjcmVhdGVFcnJvcihleGVjLCB2YWx1ZSwgbWFrZVN0cmluZygiaXMgbm90IGEg
ZnVuY3Rpb24uIiksIGludmFsaWRQYXJhbWV0ZXJJbnN0YW5jZW9mU291cmNlQXBwZW5kZXIpOwog
fQogCiBKU09iamVjdCogY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBjcmVhdGVFcnJvcihleGVjLCBjcmVhdGVU
eXBlRXJyb3IsIHZhbHVlLCBBU0NJSUxpdGVyYWwoImlzIG5vdCBhIGNvbnN0cnVjdG9yIiksIGRl
ZmF1bHRTb3VyY2VBcHBlbmRlcik7CisgICAgcmV0dXJuIGNyZWF0ZUVycm9yKGV4ZWMsIHZhbHVl
LCBBU0NJSUxpdGVyYWwoImlzIG5vdCBhIGNvbnN0cnVjdG9yIiksIGRlZmF1bHRTb3VyY2VBcHBl
bmRlcik7CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVycm9yKGV4ZWMsIGNy
ZWF0ZVR5cGVFcnJvciwgdmFsdWUsIEFTQ0lJTGl0ZXJhbCgiaXMgbm90IGEgZnVuY3Rpb24iKSwg
bm90QUZ1bmN0aW9uU291cmNlQXBwZW5kZXIpOworICAgIHJldHVybiBjcmVhdGVFcnJvcihleGVj
LCB2YWx1ZSwgQVNDSUlMaXRlcmFsKCJpcyBub3QgYSBmdW5jdGlvbiIpLCBub3RBRnVuY3Rpb25T
b3VyY2VBcHBlbmRlcik7CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVOb3RBbk9iamVjdEVycm9yKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gY3JlYXRlRXJyb3Io
ZXhlYywgY3JlYXRlVHlwZUVycm9yLCB2YWx1ZSwgQVNDSUlMaXRlcmFsKCJpcyBub3QgYW4gb2Jq
ZWN0IiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlcik7CisgICAgcmV0dXJuIGNyZWF0ZUVycm9yKGV4
ZWMsIHZhbHVlLCBBU0NJSUxpdGVyYWwoImlzIG5vdCBhbiBvYmplY3QiKSwgZGVmYXVsdFNvdXJj
ZUFwcGVuZGVyKTsKIH0KIAogSlNPYmplY3QqIGNyZWF0ZUVycm9yRm9ySW52YWxpZEdsb2JhbEFz
c2lnbm1lbnQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKQEAg
LTI4OSwxNCArMjgwLDkgQEAgSlNPYmplY3QqIGNyZWF0ZUVycm9yRm9ySW52YWxpZEdsb2JhbEFz
c2lnbm1lbnQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHAKICAgICByZXR1cm4gY3Jl
YXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgbWFrZVN0cmluZygiU3RyaWN0IG1vZGUgZm9yYmlkcyBp
bXBsaWNpdCBjcmVhdGlvbiBvZiBnbG9iYWwgcHJvcGVydHkgJyIsIHByb3BlcnR5TmFtZSwgJ1wn
JykpOwogfQogCi1KU09iamVjdCogY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBjcmVhdGVFcnJvcihnbG9iYWxPYmplY3Qs
IEFTQ0lJTGl0ZXJhbCgiT3V0IG9mIG1lbW9yeSIpKTsKLX0KLQogSlNPYmplY3QqIHRocm93T3V0
T2ZNZW1vcnlFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGV4ZWMtPnZtKCku
dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihl
eGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKIH0KIAogSlNPYmplY3QqIHRocm93
U3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0ZSogZXhlYykKZGlmZiAtLWdpdCBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmggU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oCmluZGV4IGJjNWRhZDEuLmQxMGQ5MWYgMTAw
NjQ0Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaApAQCAt
MzQsMTUgKzM0LDEzIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi10eXBlZGVmIEpTT2JqZWN0KiAo
KkVycm9yRmFjdG9yeSkoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7Cit0eXBlZGVmIEpTT2Jq
ZWN0KiAoKkVycm9yRmFjdG9yeSkoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiwgRXJyb3JJbnN0
YW5jZTo6U291cmNlQXBwZW5kZXIpOwogCiBKU09iamVjdCogY3JlYXRlVGVybWluYXRlZEV4ZWN1
dGlvbkV4Y2VwdGlvbihWTSopOwogYm9vbCBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24o
SlNPYmplY3QqKTsKIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNUZXJtaW5hdGVkRXhlY3V0aW9u
RXhjZXB0aW9uKEpTVmFsdWUpOwotSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZUVy
cm9yKEV4ZWNTdGF0ZSosIEVycm9yRmFjdG9yeSwgSlNWYWx1ZSwgY29uc3QgU3RyaW5nJiwgRXJy
b3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIpOworSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3Qq
IGNyZWF0ZUVycm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IFN0cmluZyYsIEVycm9ySW5z
dGFuY2U6OlNvdXJjZUFwcGVuZGVyKTsKIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjcmVh
dGVTdGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRlKik7Ci1KU09iamVjdCogY3JlYXRlU3RhY2tP
dmVyZmxvd0Vycm9yKEpTR2xvYmFsT2JqZWN0Kik7Ci1KU09iamVjdCogY3JlYXRlT3V0T2ZNZW1v
cnlFcnJvcihKU0dsb2JhbE9iamVjdCopOwogSlNPYmplY3QqIGNyZWF0ZVVuZGVmaW5lZFZhcmlh
YmxlRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYpOwogSlNPYmplY3QqIGNyZWF0
ZU5vdEFuT2JqZWN0RXJyb3IoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CiBKU09iamVjdCogY3JlYXRl
SW52YWxpZEZ1bmN0aW9uQXBwbHlQYXJhbWV0ZXJFcnJvcihFeGVjU3RhdGUqLCBKU1ZhbHVlKTsK
ZGlmZiAtLWdpdCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29u
c3RydWN0b3IuY3BwIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJD
b25zdHJ1Y3Rvci5jcHAKaW5kZXggZjU1NDcxZS4uNDFhZmJlMSAxMDA2NDQKLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAK
QEAgLTkyLDcgKzkyLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
c3RydWN0QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVjKQogICAgIAogICAgIFJlZlB0cjxBcnJh
eUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIDEpOwogICAgIGlm
ICghYnVmZmVyKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU91dE9m
TWVtb3J5RXJyb3IoY29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CiAgICAg
CiAgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKAogICAg
ICAgICBleGVjLT52bSgpLCBjb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCktPmFycmF5QnVmZmVy
U3RydWN0dXJlKCksIGJ1ZmZlcik7CmRpZmYgLS1naXQgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAKaW5kZXggOGYzZDY2OS4uZWY2NTBmNiAx
MDA2NDQKLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90
b3R5cGUuY3BwCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVy
UHJvdG90eXBlLmNwcApAQCAtNjAsNyArNjAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheUJ1ZmZlclByb3RvRnVuY1NsaWNlKEV4ZWNTdGF0ZSogZXhlYykKICAg
ICAKICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IG5ld0J1ZmZlciA9IHRoaXNPYmplY3QtPmltcGwo
KS0+c2xpY2UoYmVnaW4sIGVuZCk7CiAgICAgaWYgKCFuZXdCdWZmZXIpCi0gICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihjYWxsZWUtPmdsb2Jh
bE9iamVjdCgpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlT3V0
T2ZNZW1vcnlFcnJvcihleGVjKSk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBj
YWxsZWUtPmdsb2JhbE9iamVjdCgpLT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpOwogICAgIApkaWZm
IC0tZ2l0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3SW5saW5lcy5oIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lcy5oCmluZGV4IDQwMWI4ZGEuLjkzOTQzMWYgMTAwNjQ0Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aAorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdJbmxpbmVzLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCiB7CiAgICAg
Q29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgbGVuZ3Ro
LCBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkpOwogICAgIGlmICghY29udGV4dCkgewot
ICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU91dE9mTWVtb3J5
RXJyb3Ioc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICBleGVjLT52bSgpLnRo
cm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpOwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9
CkBAIC02Nyw3ICs2Nyw3IEBAIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlVW5pbml0CiAgICAgICAgIGV4ZWMt
PnZtKCksIHN0cnVjdHVyZSwgbGVuZ3RoLCBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSks
CiAgICAgICAgIENvbnN0cnVjdGlvbkNvbnRleHQ6OkRvbnRJbml0aWFsaXplKTsKICAgICBpZiAo
IWNvbnRleHQpIHsKLSAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVh
dGVPdXRPZk1lbW9yeUVycm9yKHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAg
ZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3KiByZXN1bHQgPQpkaWZmIC0tZ2l0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05h
dGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05h
dGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwCmluZGV4IDUxMTk5YjIuLjNmYjU4YTMgMTAwNjQ0Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNw
cAorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rv
ci5jcHAKQEAgLTY1LDEwICs2NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50
ZXJwcmV0ZXI6OmNvbnN0cnVjdFdpdGhOYXRpdmVFcnJvckNvbnN0cnVjdG9yKEV4CiAgICAgSlNW
YWx1ZSBtZXNzYWdlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgU3RydWN0dXJlKiBlcnJvclN0
cnVjdHVyZSA9IHN0YXRpY19jYXN0PE5hdGl2ZUVycm9yQ29uc3RydWN0b3IqPihleGVjLT5jYWxs
ZWUoKSktPmVycm9yU3RydWN0dXJlKCk7CiAgICAgQVNTRVJUKGVycm9yU3RydWN0dXJlKTsKLSAg
ICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsKLSAgICBleGVjLT52bSgpLmludGVycHJl
dGVyLT5nZXRTdGFja1RyYWNlKHN0YWNrVHJhY2UsIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90
Pjo6bWF4KCkpOwotICAgIHN0YWNrVHJhY2UucmVtb3ZlKDApOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsIGVycm9yU3RydWN0dXJlLCBtZXNz
YWdlLCBzdGFja1RyYWNlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShFcnJvckluc3Rh
bmNlOjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1cmUsIG1lc3NhZ2UsIG51bGxwdHIsIFR5cGVO
b3RoaW5nLCBmYWxzZSkpOwogfQogCiBDb25zdHJ1Y3RUeXBlIE5hdGl2ZUVycm9yQ29uc3RydWN0
b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0
YSkKQEAgLTgxLDEwICs3OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50ZXJw
cmV0ZXI6OmNhbGxOYXRpdmVFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSoKIHsKICAgICBKU1Zh
bHVlIG1lc3NhZ2UgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBTdHJ1Y3R1cmUqIGVycm9yU3Ry
dWN0dXJlID0gc3RhdGljX2Nhc3Q8TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxl
ZSgpKS0+ZXJyb3JTdHJ1Y3R1cmUoKTsKLSAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFj
ZTsKLSAgICBleGVjLT52bSgpLmludGVycHJldGVyLT5nZXRTdGFja1RyYWNlKHN0YWNrVHJhY2Us
IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOwotICAgIHN0YWNrVHJhY2UucmVt
b3ZlKDApOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoRXJyb3JJbnN0YW5jZTo6Y3JlYXRl
KGV4ZWMsIGVycm9yU3RydWN0dXJlLCBtZXNzYWdlLCBzdGFja1RyYWNlKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1
cmUsIG1lc3NhZ2UsIG51bGxwdHIsIFR5cGVOb3RoaW5nLCBmYWxzZSkpOwogfQogCiBDYWxsVHlw
ZSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYg
Y2FsbERhdGEpCmRpZmYgLS1naXQgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCAzYWY4MTdkLi42MWU0
NTgyIDEwMDY0NAotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTU0MCw5OCArNTQwLDYgQEAg
dm9pZCBWTTo6cmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoKQogICAgIGhlYXAuY29sbGVjdEFsbEdh
cmJhZ2UoKTsKIH0KIAotc3RhdGljIHZvaWQgYXBwZW5kU291cmNlVG9FcnJvcihDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgRXJyb3JJbnN0YW5jZSogZXhjZXB0aW9uLCB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCkKLXsKLSAgICBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlciBhcHBlbmRlciA9IGV4
Y2VwdGlvbi0+c291cmNlQXBwZW5kZXIoKTsKLSAgICBleGNlcHRpb24tPmNsZWFyU291cmNlQXBw
ZW5kZXIoKTsKLSAgICBSdW50aW1lVHlwZSB0eXBlID0gZXhjZXB0aW9uLT5ydW50aW1lVHlwZUZv
ckNhdXNlKCk7Ci0gICAgZXhjZXB0aW9uLT5jbGVhclJ1bnRpbWVUeXBlRm9yQ2F1c2UoKTsKLSAg
ICAKLSAgICBpZiAoIWNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmhhc0V4cHJlc3Npb25JbmZvKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpbnQgc3RhcnRPZmZzZXQgPSAwOwotICAgIGlu
dCBlbmRPZmZzZXQgPSAwOwotICAgIGludCBkaXZvdFBvaW50ID0gMDsKLSAgICB1bnNpZ25lZCBs
aW5lID0gMDsKLSAgICB1bnNpZ25lZCBjb2x1bW4gPSAwOwotICAgIAotICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBjb2RlQmxvY2stPmV4cHJl
c3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCBkaXZvdFBvaW50LCBz
dGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOwotICAgIAotICAgIGludCBleHBy
ZXNzaW9uU3RhcnQgPSBkaXZvdFBvaW50IC0gc3RhcnRPZmZzZXQ7Ci0gICAgaW50IGV4cHJlc3Np
b25TdG9wID0gZGl2b3RQb2ludCArIGVuZE9mZnNldDsKLSAgICAKLSAgICBjb25zdCBTdHJpbmcm
IHNvdXJjZVN0cmluZyA9IGNvZGVCbG9jay0+c291cmNlKCktPnNvdXJjZSgpOwotICAgIGlmICgh
ZXhwcmVzc2lvblN0b3AgfHwgZXhwcmVzc2lvblN0YXJ0ID4gc3RhdGljX2Nhc3Q8aW50Pihzb3Vy
Y2VTdHJpbmcubGVuZ3RoKCkpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgVk0qIHZtID0g
JmNhbGxGcmFtZS0+dm0oKTsKLSAgICBKU1ZhbHVlIGpzTWVzc2FnZSA9IGV4Y2VwdGlvbi0+Z2V0
RGlyZWN0KCp2bSwgdm0tPnByb3BlcnR5TmFtZXMtPm1lc3NhZ2UpOwotICAgIGlmICghanNNZXNz
YWdlIHx8ICFqc01lc3NhZ2UuaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IFN0cmluZyBtZXNzYWdlID0gYXNTdHJpbmcoanNNZXNzYWdlKS0+dmFsdWUoY2FsbEZyYW1lKTsK
LSAgICAKLSAgICBpZiAoZXhwcmVzc2lvblN0YXJ0IDwgZXhwcmVzc2lvblN0b3ApCi0gICAgICAg
IG1lc3NhZ2UgPSBhcHBlbmRlcihtZXNzYWdlLCBjb2RlQmxvY2stPnNvdXJjZSgpLT5nZXRSYW5n
ZShleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25TdG9wKSwgdHlwZSwgRXJyb3JJbnN0YW5jZTo6
Rm91bmRFeGFjdFNvdXJjZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIE5vIHJhbmdlIGluZm9y
bWF0aW9uLCBzbyBnaXZlIGEgZmV3IGNoYXJhY3RlcnMgb2YgY29udGV4dC4KLSAgICAgICAgY29u
c3QgU3RyaW5nSW1wbCogZGF0YSA9IHNvdXJjZVN0cmluZy5pbXBsKCk7Ci0gICAgICAgIGludCBk
YXRhTGVuZ3RoID0gc291cmNlU3RyaW5nLmxlbmd0aCgpOwotICAgICAgICBpbnQgc3RhcnQgPSBl
eHByZXNzaW9uU3RhcnQ7Ci0gICAgICAgIGludCBzdG9wID0gZXhwcmVzc2lvblN0YXJ0OwotICAg
ICAgICAvLyBHZXQgdXAgdG8gMjAgY2hhcmFjdGVycyBvZiBjb250ZXh0IHRvIHRoZSBsZWZ0IGFu
ZCByaWdodCBvZiB0aGUgZGl2b3QsIGNsYW1waW5nIHRvIHRoZSBsaW5lLgotICAgICAgICAvLyBU
aGVuIHN0cmlwIHdoaXRlc3BhY2UuCi0gICAgICAgIHdoaWxlIChzdGFydCA+IDAgJiYgKGV4cHJl
c3Npb25TdGFydCAtIHN0YXJ0IDwgMjApICYmICgqZGF0YSlbc3RhcnQgLSAxXSAhPSAnXG4nKQot
ICAgICAgICAgICAgc3RhcnQtLTsKLSAgICAgICAgd2hpbGUgKHN0YXJ0IDwgKGV4cHJlc3Npb25T
dGFydCAtIDEpICYmIGlzU3RyV2hpdGVTcGFjZSgoKmRhdGEpW3N0YXJ0XSkpCi0gICAgICAgICAg
ICBzdGFydCsrOwotICAgICAgICB3aGlsZSAoc3RvcCA8IGRhdGFMZW5ndGggJiYgKHN0b3AgLSBl
eHByZXNzaW9uU3RhcnQgPCAyMCkgJiYgKCpkYXRhKVtzdG9wXSAhPSAnXG4nKQotICAgICAgICAg
ICAgc3RvcCsrOwotICAgICAgICB3aGlsZSAoc3RvcCA+IGV4cHJlc3Npb25TdGFydCAmJiBpc1N0
cldoaXRlU3BhY2UoKCpkYXRhKVtzdG9wIC0gMV0pKQotICAgICAgICAgICAgc3RvcC0tOwotICAg
ICAgICBtZXNzYWdlID0gYXBwZW5kZXIobWVzc2FnZSwgY29kZUJsb2NrLT5zb3VyY2UoKS0+Z2V0
UmFuZ2Uoc3RhcnQsIHN0b3ApLCB0eXBlLCBFcnJvckluc3RhbmNlOjpGb3VuZEFwcHJveGltYXRl
U291cmNlKTsKLSAgICB9Ci0gICAgCi0gICAgZXhjZXB0aW9uLT5wdXREaXJlY3QoKnZtLCB2bS0+
cHJvcGVydHlOYW1lcy0+bWVzc2FnZSwganNTdHJpbmcodm0sIG1lc3NhZ2UpKTsKLX0KLQotY2xh
c3MgRmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3RvciB7Ci1wdWJsaWM6Ci0g
ICAgRmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3RvcihDYWxsRnJhbWUqIHN0
YXJ0Q2FsbEZyYW1lKQotICAgICAgICA6IG1fc3RhcnRDYWxsRnJhbWUoc3RhcnRDYWxsRnJhbWUp
Ci0gICAgICAgICwgbV9mb3VuZENhbGxGcmFtZShudWxscHRyKQotICAgICAgICAsIG1fZm91bmRT
dGFydENhbGxGcmFtZShmYWxzZSkKLSAgICAgICAgLCBtX2luZGV4KDApCi0gICAgeyB9Ci0KLSAg
ICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikK
LSAgICB7Ci0gICAgICAgIGlmICghbV9mb3VuZFN0YXJ0Q2FsbEZyYW1lICYmICh2aXNpdG9yLT5j
YWxsRnJhbWUoKSA9PSBtX3N0YXJ0Q2FsbEZyYW1lKSkKLSAgICAgICAgICAgIG1fZm91bmRTdGFy
dENhbGxGcmFtZSA9IHRydWU7Ci0KLSAgICAgICAgaWYgKG1fZm91bmRTdGFydENhbGxGcmFtZSkg
ewotICAgICAgICAgICAgaWYgKHZpc2l0b3ItPmNhbGxGcmFtZSgpLT5jb2RlQmxvY2soKSkgewot
ICAgICAgICAgICAgICAgIG1fZm91bmRDYWxsRnJhbWUgPSB2aXNpdG9yLT5jYWxsRnJhbWUoKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgbV9pbmRleCsrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFN0
YWNrVmlzaXRvcjo6Q29udGludWU7Ci0gICAgfQotCi0gICAgQ2FsbEZyYW1lKiBmb3VuZENhbGxG
cmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm91bmRDYWxsRnJhbWU7IH0KLSAgICB1bnNpZ25lZCBp
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KLQotcHJpdmF0ZToKLSAgICBDYWxsRnJh
bWUqIG1fc3RhcnRDYWxsRnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBtX2ZvdW5kQ2FsbEZyYW1lOwot
ICAgIGJvb2wgbV9mb3VuZFN0YXJ0Q2FsbEZyYW1lOwotICAgIHVuc2lnbmVkIG1faW5kZXg7Ci19
OwotCiBKU1ZhbHVlIFZNOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
ZXJyb3IpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmJyZWFrT25UaHJvdygpKSB7CkBAIC02NDUsNDQg
KzU1Myw3IEBAIEpTVmFsdWUgVk06OnRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBlcnJvcikKICAgICBpbnRlcnByZXRlci0+Z2V0U3RhY2tUcmFjZShzdGFja1RyYWNlKTsK
ICAgICBtX2V4Y2VwdGlvblN0YWNrID0gUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+KHN0YWNr
VHJhY2UpOwogICAgIG1fZXhjZXB0aW9uID0gZXJyb3I7Ci0gICAgCi0gICAgaWYgKHN0YWNrVHJh
Y2UuaXNFbXB0eSgpIHx8ICFlcnJvci5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gZXJyb3I7
Ci0gICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IGFzT2JqZWN0KGVycm9yKTsKLSAgICAKLSAgICBT
dGFja0ZyYW1lIHN0YWNrRnJhbWU7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBzdGFj
a1RyYWNlLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHN0YWNrRnJhbWUgPSBzdGFja1RyYWNlLmF0
KGkpOwotICAgICAgICBpZiAoc3RhY2tGcmFtZS5ieXRlY29kZU9mZnNldCkKLSAgICAgICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBpZiAoIWhhc0Vycm9ySW5mbyhleGVjLCBleGNlcHRpb24pKSB7
Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgb25seSByZWFsbHkgYmUgYWRkaW5nIHRoZXNl
IHByb3BlcnRpZXMgdG8gVk0gZ2VuZXJhdGVkIGV4Y2VwdGlvbnMsCi0gICAgICAgIC8vIGJ1dCB0
aGUgaW5zcGVjdG9yIGN1cnJlbnRseSByZXF1aXJlcyB0aGVzZSBmb3IgYWxsIHRocm93biBvYmpl
Y3RzLgotICAgICAgICB1bnNpZ25lZCBsaW5lOwotICAgICAgICB1bnNpZ25lZCBjb2x1bW47Ci0g
ICAgICAgIHN0YWNrRnJhbWUuY29tcHV0ZUxpbmVBbmRDb2x1bW4obGluZSwgY29sdW1uKTsKLSAg
ICAgICAgZXhjZXB0aW9uLT5wdXREaXJlY3QoKnRoaXMsIElkZW50aWZpZXIodGhpcywgImxpbmUi
KSwganNOdW1iZXIobGluZSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7Ci0gICAgICAgIGV4Y2Vw
dGlvbi0+cHV0RGlyZWN0KCp0aGlzLCBJZGVudGlmaWVyKHRoaXMsICJjb2x1bW4iKSwganNOdW1i
ZXIoY29sdW1uKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKLSAgICAgICAgaWYgKCFzdGFja0Zy
YW1lLnNvdXJjZVVSTC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBleGNlcHRpb24tPnB1dERpcmVj
dCgqdGhpcywgSWRlbnRpZmllcih0aGlzLCAic291cmNlVVJMIiksIGpzU3RyaW5nKHRoaXMsIHN0
YWNrRnJhbWUuc291cmNlVVJMKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKLSAgICB9Ci0gICAg
aWYgKGV4Y2VwdGlvbi0+aXNFcnJvckluc3RhbmNlKCkgJiYgc3RhdGljX2Nhc3Q8RXJyb3JJbnN0
YW5jZSo+KGV4Y2VwdGlvbiktPmhhc1NvdXJjZUFwcGVuZGVyKCkpIHsKLSAgICAgICAgRmluZEZp
cnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3RvciBmdW5jdG9yKGV4ZWMpOwotICAgICAg
ICB0b3BDYWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rvcik7Ci0gICAgICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gZnVuY3Rvci5mb3VuZENhbGxGcmFtZSgpOwotICAgICAgICB1bnNpZ25lZCBzdGFj
a0luZGV4ID0gZnVuY3Rvci5pbmRleCgpOwotCi0gICAgICAgIGlmIChjYWxsRnJhbWUgJiYgY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKSkgewotICAgICAgICAgICAgc3RhY2tGcmFtZSA9IHN0YWNrVHJh
Y2UuYXQoc3RhY2tJbmRleCk7Ci0gICAgICAgICAgICBhcHBlbmRTb3VyY2VUb0Vycm9yKGNhbGxG
cmFtZSwgc3RhdGljX2Nhc3Q8RXJyb3JJbnN0YW5jZSo+KGV4Y2VwdGlvbiksIHN0YWNrRnJhbWUu
Ynl0ZWNvZGVPZmZzZXQpOwotICAgICAgICB9Ci0gICAgfQogCi0gICAgaWYgKGV4Y2VwdGlvbi0+
aGFzUHJvcGVydHkoZXhlYywgdGhpcy0+cHJvcGVydHlOYW1lcy0+c3RhY2spKQotICAgICAgICBy
ZXR1cm4gZXJyb3I7Ci0gICAgCi0gICAgZXhjZXB0aW9uLT5wdXREaXJlY3QoKnRoaXMsIHByb3Bl
cnR5TmFtZXMtPnN0YWNrLCBpbnRlcnByZXRlci0+c3RhY2tUcmFjZUFzU3RyaW5nKHRvcENhbGxG
cmFtZSwgc3RhY2tUcmFjZSksIERvbnRFbnVtKTsKICAgICByZXR1cm4gZXJyb3I7CiB9CiAgICAg
Ci0tIAoyLjEuMSAoQXBwbGUgR2l0LTUxKQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249858</attachid>
            <date>2015-03-31 15:08:53 -0700</date>
            <delta_ts>2015-04-03 12:54:31 -0700</delta_ts>
            <desc>patch.</desc>
            <filename>0001-Source-and-stack-information-should-get-appended-onl.patch</filename>
            <type>text/plain</type>
            <size>53727</size>
            <attacher name="Matthew Mirman">mmirman</attacher>
            
              <data encoding="base64">RnJvbSA1YmRjYzc1NWQ5ZTVlNzY1MDI2ZTgxMjc3NmRlMGMwNjA3NTVkMzdlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXR0aGV3IE1pcm1hbiA8bW1pcm1hbkBhcHBsZS5jb20+CkRh
dGU6IFR1ZSwgMzEgTWFyIDIwMTUgMTU6MDc6MjcgLTA3MDAKU3ViamVjdDogW1BBVENIXSBTb3Vy
Y2UgYW5kIHN0YWNrIGluZm9ybWF0aW9uIHNob3VsZCBnZXQgYXBwZW5kZWQgb25seSB0bwogbmF0
aXZlIGVycm9yIGNvbnN0cnVjdG9ycyBhbmQgc2hvdWxkIGJlIGFkZGVkIGF0IGNvbnN0cnVjdGlv
biB0aW1lIHJhdGhlcgogdGhhbiB3aGVuIHRocm93bi4gU291cmNlL0phdmFTY3JpcHRDb3JlOgoK
cmRhcjovL3Byb2JsZW0vMTk5MjcyOTMKaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0MTg3MQoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgoqIGludGVycHJldGVy
L0ludGVycHJldGVyLmNwcDoKKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgoqIGludGVycHJl
dGVyL0ludGVycHJldGVyLmg6CiogcGFyc2VyL1BhcnNlckVycm9yLmg6CihKU0M6OlBhcnNlckVy
cm9yOjp0b0Vycm9yT2JqZWN0KToKKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6CiogcnVu
dGltZS9FcnJvci5jcHA6CihKU0M6OmNyZWF0ZUVycm9yKToKKEpTQzo6Y3JlYXRlRXZhbEVycm9y
KToKKEpTQzo6Y3JlYXRlUmFuZ2VFcnJvcik6CihKU0M6OmNyZWF0ZVJlZmVyZW5jZUVycm9yKToK
KEpTQzo6Y3JlYXRlU3ludGF4RXJyb3IpOgooSlNDOjpjcmVhdGVUeXBlRXJyb3IpOgooSlNDOjpj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcik6CihKU0M6OmNyZWF0ZVVSSUVycm9yKToKKEpT
Qzo6Y3JlYXRlT3V0T2ZNZW1vcnlFcnJvcik6CiogcnVudGltZS9FcnJvci5oOgoqIHJ1bnRpbWUv
RXJyb3JDb25zdHJ1Y3Rvci5jcHA6CihKU0M6OkludGVycHJldGVyOjpjb25zdHJ1Y3RXaXRoRXJy
b3JDb25zdHJ1Y3Rvcik6CihKU0M6OkludGVycHJldGVyOjpjYWxsRXJyb3JDb25zdHJ1Y3Rvcik6
CiogcnVudGltZS9FcnJvckluc3RhbmNlLmNwcDoKKEpTQzo6YXBwZW5kU291cmNlVG9FcnJvcik6
CihKU0M6OkZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3I6OkZpbmRGaXJz
dENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3IpOgooSlNDOjpGaW5kRmlyc3RDYWxsZXJG
cmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yOjpvcGVyYXRvcigpKToKKEpTQzo6RmluZEZpcnN0Q2Fs
bGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3Rvcjo6Zm91bmRDYWxsRnJhbWUpOgooSlNDOjpGaW5k
Rmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yOjppbmRleCk6CihKU0M6OkVycm9y
SW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKToKKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuaDoKKEpT
Qzo6RXJyb3JJbnN0YW5jZTo6Y3JlYXRlKToKKiBydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcDoK
KEpTQzo6RXJyb3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKiBydW50aW1lL0V4Y2VwdGlv
bkZ1enouY3BwOgooSlNDOjpkb0V4Y2VwdGlvbkZ1enppbmcpOgoqIHJ1bnRpbWUvRXhjZXB0aW9u
SGVscGVycy5jcHA6CihKU0M6OmNyZWF0ZUVycm9yKToKKEpTQzo6Y3JlYXRlSW52YWxpZEZ1bmN0
aW9uQXBwbHlQYXJhbWV0ZXJFcnJvcik6CihKU0M6OmNyZWF0ZUludmFsaWRJblBhcmFtZXRlckVy
cm9yKToKKEpTQzo6Y3JlYXRlSW52YWxpZEluc3RhbmNlb2ZQYXJhbWV0ZXJFcnJvcik6CihKU0M6
OmNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKToKKEpTQzo6Y3JlYXRlTm90QUZ1bmN0aW9uRXJy
b3IpOgooSlNDOjpjcmVhdGVOb3RBbk9iamVjdEVycm9yKToKKEpTQzo6dGhyb3dPdXRPZk1lbW9y
eUVycm9yKToKKEpTQzo6Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKTogRGVsZXRlZC4KKEpTQzo6
Y3JlYXRlT3V0T2ZNZW1vcnlFcnJvcik6IERlbGV0ZWQuCiogcnVudGltZS9FeGNlcHRpb25IZWxw
ZXJzLmg6CiogcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwOgooSlNDOjpjb25z
dHJ1Y3RBcnJheUJ1ZmZlcik6CiogcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcDoK
KEpTQzo6YXJyYXlCdWZmZXJQcm90b0Z1bmNTbGljZSk6CiogcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0lubGluZXMuaDoKKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj46OmNyZWF0ZSk6CihKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVh
dGVVbmluaXRpYWxpemVkKToKKiBydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwOgoo
SlNDOjpJbnRlcnByZXRlcjo6Y29uc3RydWN0V2l0aE5hdGl2ZUVycm9yQ29uc3RydWN0b3IpOgoo
SlNDOjpJbnRlcnByZXRlcjo6Y2FsbE5hdGl2ZUVycm9yQ29uc3RydWN0b3IpOgoqIHJ1bnRpbWUv
Vk0uY3BwOgooSlNDOjpWTTo6dGhyb3dFeGNlcHRpb24pOgooSlNDOjphcHBlbmRTb3VyY2VUb0Vy
cm9yKTogRGVsZXRlZC4KKEpTQzo6RmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVu
Y3Rvcjo6RmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3Rvcik6IERlbGV0ZWQu
CihKU0M6OkZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3I6Om9wZXJhdG9y
KCkpOiBEZWxldGVkLgooSlNDOjpGaW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5j
dG9yOjpmb3VuZENhbGxGcmFtZSk6IERlbGV0ZWQuCihKU0M6OkZpbmRGaXJzdENhbGxlckZyYW1l
V2l0aENvZGVibG9ja0Z1bmN0b3I6OmluZGV4KTogRGVsZXRlZC4KCkxheW91dFRlc3RzOgoKaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTg3MQpyZGFyOi8vcHJvYmxl
bS8xOTkyNzI5MwoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpVcGRhdGVzIHNvbWUgb2Yg
dGhlIHRlc3RzIHdoaWNoIHdlcmUgdGhyb3dpbmcgYW4gIkV4Y2VwdGlvbigpIiByYXRoZXIgdGhh
biBhICJuZXcgRXJyb3IoKSIKYW5kIGV4cGVjdGluZyBhIGxpbmUsIHN0YWNrLCBhbmQgY29sdW1u
IGZpZWxkLgoKKiBqcy9kb20vZXhjZXB0aW9uLWxpbmVudW1zLWluLWh0bWwtMS5odG1sOgoqIGpz
L2RvbS9leGNlcHRpb24tbGluZW51bXMtaW4taHRtbC0yLmh0bWw6CioganMvZG9tL2V4Y2VwdGlv
bi1saW5lbnVtcy1pbi1odG1sLTMuaHRtbDoKKiBqcy9leGNlcHRpb24tcHJvcGVydGllcy1leHBl
Y3RlZC50eHQ6CioganMvc2NyaXB0LXRlc3RzL2V4Y2VwdGlvbi1saW5lbnVtcy5qczoKKGV4Y2Vw
dGlvbkluRnVuY3Rpb24pOgooZmlyc3RQcm9wSXNHZXR0ZXIuZ2V0IGdldHRlcik6CihzZWNvbmRQ
cm9wSXNHZXR0ZXIuZ2V0IGdldHRlcik6CihmaXJzdFByb3BJc1NldHRlci5zZXQgc2V0dGVyKToK
KHNlY29uZFByb3BJc1NldHRlci5zZXQgc2V0dGVyKToKKiBqcy9zY3JpcHQtdGVzdHMvZXhjZXB0
aW9uLXByb3BlcnRpZXMuanM6CgpkaWZmIC0tZ2l0IExheW91dFRlc3RzL0NoYW5nZUxvZyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggM2VjOGYxNC4uZWQ0NDIzMCAxMDA2NDQKLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZworKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcg
QEAKKzIwMTUtMDMtMzEgIE1hdHRoZXcgTWlybWFuICA8bW1pcm1hbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgU291cmNlIGFuZCBzdGFjayBpbmZvcm1hdGlvbiBzaG91bGQgZ2V0IGFwcGVuZGVkIG9u
bHkgdG8gbmF0aXZlIGVycm9yIGNvbnN0cnVjdG9ycworICAgICAgICBhbmQgc2hvdWxkIGJlIGFk
ZGVkIGF0IGNvbnN0cnVjdGlvbiB0aW1lIHJhdGhlciB0aGFuIHdoZW4gdGhyb3duLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxODcxCisgICAgICAg
IHJkYXI6Ly9wcm9ibGVtLzE5OTI3MjkzCisgICAgICAgIAorICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGVzIHNvbWUgb2YgdGhlIHRlc3RzIHdoaWNo
IHdlcmUgdGhyb3dpbmcgYW4gIkV4Y2VwdGlvbigpIiByYXRoZXIgdGhhbiBhICJuZXcgRXJyb3Io
KSIKKyAgICAgICAgYW5kIGV4cGVjdGluZyBhIGxpbmUsIHN0YWNrLCBhbmQgY29sdW1uIGZpZWxk
LgorICAgICAgICAKKyAgICAgICAgKiBqcy9kb20vZXhjZXB0aW9uLWxpbmVudW1zLWluLWh0bWwt
MS5odG1sOgorICAgICAgICAqIGpzL2RvbS9leGNlcHRpb24tbGluZW51bXMtaW4taHRtbC0yLmh0
bWw6CisgICAgICAgICoganMvZG9tL2V4Y2VwdGlvbi1saW5lbnVtcy1pbi1odG1sLTMuaHRtbDoK
KyAgICAgICAgKiBqcy9leGNlcHRpb24tcHJvcGVydGllcy1leHBlY3RlZC50eHQ6CisgICAgICAg
ICoganMvc2NyaXB0LXRlc3RzL2V4Y2VwdGlvbi1saW5lbnVtcy5qczoKKyAgICAgICAgKGV4Y2Vw
dGlvbkluRnVuY3Rpb24pOgorICAgICAgICAoZmlyc3RQcm9wSXNHZXR0ZXIuZ2V0IGdldHRlcik6
CisgICAgICAgIChzZWNvbmRQcm9wSXNHZXR0ZXIuZ2V0IGdldHRlcik6CisgICAgICAgIChmaXJz
dFByb3BJc1NldHRlci5zZXQgc2V0dGVyKToKKyAgICAgICAgKHNlY29uZFByb3BJc1NldHRlci5z
ZXQgc2V0dGVyKToKKyAgICAgICAgKiBqcy9zY3JpcHQtdGVzdHMvZXhjZXB0aW9uLXByb3BlcnRp
ZXMuanM6CisKIDIwMTUtMDMtMzEgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAg
ICAgICAgIGFjY2Vzc2liaWxpdHkvYXJpYS1oaWRkZW4taGlkZXMtYWxsLWVsZW1lbnRzLmh0bWwg
ZmFpbHMgb24gV2luZG93cwpkaWZmIC0tZ2l0IExheW91dFRlc3RzL2pzL2RvbS9leGNlcHRpb24t
bGluZW51bXMtaW4taHRtbC0xLmh0bWwgTGF5b3V0VGVzdHMvanMvZG9tL2V4Y2VwdGlvbi1saW5l
bnVtcy1pbi1odG1sLTEuaHRtbAppbmRleCAzYjdkN2M5Li4wNzljNzJhIDEwMDY0NAotLS0gTGF5
b3V0VGVzdHMvanMvZG9tL2V4Y2VwdGlvbi1saW5lbnVtcy1pbi1odG1sLTEuaHRtbAorKysgTGF5
b3V0VGVzdHMvanMvZG9tL2V4Y2VwdGlvbi1saW5lbnVtcy1pbi1odG1sLTEuaHRtbApAQCAtOCw3
ICs4LDcgQEAgZGVzY3JpcHRpb24oJ1RoaXMgdGVzdCBleGVyY2lzZXMgdGhlIHNvdXJjZSBVUkwg
YW5kIGxpbmUgbnVtYmVyIHRoYXQgaXMgZW1iZWRkZWQKIAogZnVuY3Rpb24gZXhjZXB0aW9uSW5G
dW5jdGlvbigpCiB7Ci0gICAgdGhyb3cgRXhjZXB0aW9uKCk7CisgICAgdGhyb3cgbmV3IEVycm9y
KCk7CiB9CiAKIHZhciBlID0gdW5kZWZpbmVkOwpkaWZmIC0tZ2l0IExheW91dFRlc3RzL2pzL2Rv
bS9leGNlcHRpb24tbGluZW51bXMtaW4taHRtbC0yLmh0bWwgTGF5b3V0VGVzdHMvanMvZG9tL2V4
Y2VwdGlvbi1saW5lbnVtcy1pbi1odG1sLTIuaHRtbAppbmRleCBmNWRiMzc5Li44NmYwODI5IDEw
MDY0NAotLS0gTGF5b3V0VGVzdHMvanMvZG9tL2V4Y2VwdGlvbi1saW5lbnVtcy1pbi1odG1sLTIu
aHRtbAorKysgTGF5b3V0VGVzdHMvanMvZG9tL2V4Y2VwdGlvbi1saW5lbnVtcy1pbi1odG1sLTIu
aHRtbApAQCAtOCw3ICs4LDcgQEAgZGVzY3JpcHRpb24oJ1RoaXMgdGVzdCBleGVyY2lzZXMgdGhl
IHNvdXJjZSBVUkwgYW5kIGxpbmUgbnVtYmVyIHRoYXQgaXMgZW1iZWRkZWQKIAogZnVuY3Rpb24g
ZXhjZXB0aW9uSW5GdW5jdGlvbigpCiB7Ci0gICAgdGhyb3cgRXhjZXB0aW9uKCk7CisgICAgdGhy
b3cgbmV3IEVycm9yKCk7CiB9CiAKIHZhciBlID0gdW5kZWZpbmVkOwpkaWZmIC0tZ2l0IExheW91
dFRlc3RzL2pzL2RvbS9leGNlcHRpb24tbGluZW51bXMtaW4taHRtbC0zLmh0bWwgTGF5b3V0VGVz
dHMvanMvZG9tL2V4Y2VwdGlvbi1saW5lbnVtcy1pbi1odG1sLTMuaHRtbAppbmRleCA3YzExZjgx
Li45ZmM3ZWRmIDEwMDY0NAotLS0gTGF5b3V0VGVzdHMvanMvZG9tL2V4Y2VwdGlvbi1saW5lbnVt
cy1pbi1odG1sLTMuaHRtbAorKysgTGF5b3V0VGVzdHMvanMvZG9tL2V4Y2VwdGlvbi1saW5lbnVt
cy1pbi1odG1sLTMuaHRtbApAQCAtMTAsNyArMTAsNyBAQCBkZXNjcmlwdGlvbignVGhpcyB0ZXN0
IGV4ZXJjaXNlcyB0aGUgc291cmNlIFVSTCBhbmQgbGluZSBudW1iZXIgdGhhdCBpcyBlbWJlZGRl
ZAogCiBmdW5jdGlvbiBleGNlcHRpb25JbkZ1bmN0aW9uKCkKIHsKLSAgICB0aHJvdyBFeGNlcHRp
b24oKTsKKyAgICB0aHJvdyBuZXcgRXJyb3IoKTsKIH0KIAogdmFyIGUgPSB1bmRlZmluZWQ7CmRp
ZmYgLS1naXQgTGF5b3V0VGVzdHMvanMvZXhjZXB0aW9uLXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0
IExheW91dFRlc3RzL2pzL2V4Y2VwdGlvbi1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAppbmRleCBk
ZTA1MzBiLi5hMDc1ODNhIDEwMDY0NAotLS0gTGF5b3V0VGVzdHMvanMvZXhjZXB0aW9uLXByb3Bl
cnRpZXMtZXhwZWN0ZWQudHh0CisrKyBMYXlvdXRUZXN0cy9qcy9leGNlcHRpb24tcHJvcGVydGll
cy1leHBlY3RlZC50eHQKQEAgLTMsNyArMyw3IEBAIFRlc3QgZm9yIGNvcnJlY3QgcHJvcGVydGll
cyBvbiBFcnJvciBvYmplY3RzLgogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiAKLVBBU1Mg
ZW51bWVyYWJsZVByb3BlcnRpZXMoZXJyb3IpIGlzIFtdCitQQVNTIGVudW1lcmFibGVQcm9wZXJ0
aWVzKGVycm9yKS5zb3J0KCkgaXMgWyJjb2x1bW4iLCAibGluZSIsICJzb3VyY2VVUkwiXQogUEFT
UyBlbnVtZXJhYmxlUHJvcGVydGllcyhuYXRpdmVFcnJvcikuc29ydCgpIGlzIFsiY29sdW1uIiwg
ImxpbmUiLCAic291cmNlVVJMIl0KIFBBU1MgT2JqZWN0LmdldFByb3RvdHlwZU9mKG5hdGl2ZUVy
cm9yKS5uYW1lIGlzICJSYW5nZUVycm9yIgogUEFTUyBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmF0
aXZlRXJyb3IpLm1lc3NhZ2UgaXMgIiIKZGlmZiAtLWdpdCBMYXlvdXRUZXN0cy9qcy9zY3JpcHQt
dGVzdHMvZXhjZXB0aW9uLWxpbmVudW1zLmpzIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9l
eGNlcHRpb24tbGluZW51bXMuanMKaW5kZXggYmU5NGUxOS4uOTZmODRmNCAxMDA2NDQKLS0tIExh
eW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9leGNlcHRpb24tbGluZW51bXMuanMKKysrIExheW91
dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9leGNlcHRpb24tbGluZW51bXMuanMKQEAgLTIsNyArMiw3
IEBAIGRlc2NyaXB0aW9uKCdUaGlzIHRlc3QgZXhlcmNpc2VzIHRoZSBzb3VyY2UgVVJMIGFuZCBs
aW5lIG51bWJlciB0aGF0IGlzIGVtYmVkZGVkCiAKIGZ1bmN0aW9uIGV4Y2VwdGlvbkluRnVuY3Rp
b24oKQogewotICAgIHRocm93IEV4Y2VwdGlvbigpOworICAgIHRocm93IG5ldyBFcnJvcigpOwog
fQogCiB2YXIgZSA9IHVuZGVmaW5lZDsKQEAgLTcxLDE4ICs3MSwxOCBAQCBzaG91bGRCZSgidHlw
ZW9mIGUuc291cmNlVVJMIiwgJyJzdHJpbmciJyk7CiBzaG91bGRCZSgiZS5saW5lIiwgJzY0Jyk7
CiAKIHZhciBmaXJzdFByb3BJc0dldHRlciA9IHsKLSAgICBnZXQgZ2V0dGVyKCkgeyB0aHJvdyB7
fSB9CisgICAgZ2V0IGdldHRlcigpIHsgdGhyb3cgbmV3IEVycm9yKCkgfQogfTsKIHZhciBzZWNv
bmRQcm9wSXNHZXR0ZXIgPSB7CiAgICAgcHJvcDogMSwKLSAgICBnZXQgZ2V0dGVyKCkgeyB0aHJv
dyB7fSB9CisgICAgZ2V0IGdldHRlcigpIHsgdGhyb3cgbmV3IEVycm9yKCkgfQogfTsKIHZhciBm
aXJzdFByb3BJc1NldHRlciA9IHsKLSAgICBzZXQgc2V0dGVyKGEpIHsgdGhyb3cge30gfQorICAg
IHNldCBzZXR0ZXIoYSkgeyB0aHJvdyBuZXcgRXJyb3IoKSB9CiB9OwogdmFyIHNlY29uZFByb3BJ
c1NldHRlciA9IHsKICAgICBwcm9wOiAxLAotICAgIHNldCBzZXR0ZXIoYSkgeyB0aHJvdyB7fSB9
CisgICAgc2V0IHNldHRlcihhKSB7IHRocm93IG5ldyBFcnJvcigpIH0KIH07CiAKIHRyeSB7CmRp
ZmYgLS1naXQgTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2V4Y2VwdGlvbi1wcm9wZXJ0aWVz
LmpzIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9leGNlcHRpb24tcHJvcGVydGllcy5qcwpp
bmRleCA2NmJiZDI4Li5hOTkzNmJjIDEwMDY0NAotLS0gTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRl
c3RzL2V4Y2VwdGlvbi1wcm9wZXJ0aWVzLmpzCisrKyBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVz
dHMvZXhjZXB0aW9uLXByb3BlcnRpZXMuanMKQEAgLTE1LDcgKzE1LDcgQEAgdHJ5IHsKICAgICB2
YXIgbmF0aXZlRXJyb3IgPSByYW5nZUVycm9yOwogICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcigi
bWVzc2FnZSIpOwogCi0gICAgc2hvdWxkQmUoJ2VudW1lcmFibGVQcm9wZXJ0aWVzKGVycm9yKScs
ICdbXScpOworICAgIHNob3VsZEJlKCdlbnVtZXJhYmxlUHJvcGVydGllcyhlcnJvcikuc29ydCgp
JywgJ1siY29sdW1uIiwgImxpbmUiLCAic291cmNlVVJMIl0nKTsKICAgICBzaG91bGRCZSgnZW51
bWVyYWJsZVByb3BlcnRpZXMobmF0aXZlRXJyb3IpLnNvcnQoKScsICdbImNvbHVtbiIsICJsaW5l
IiwgInNvdXJjZVVSTCJdJyk7CiAKICAgICBzaG91bGRCZSgnT2JqZWN0LmdldFByb3RvdHlwZU9m
KG5hdGl2ZUVycm9yKS5uYW1lJywgJyJSYW5nZUVycm9yIicpOwpkaWZmIC0tZ2l0IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpp
bmRleCAzZmNjM2QxLi4yOTNlOGVmZCAxMDA2NDQKLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3
NSBAQAorMjAxNS0wMy0zMSAgTWF0dGhldyBNaXJtYW4gIDxtbWlybWFuQGFwcGxlLmNvbT4KKwor
ICAgICAgICBTb3VyY2UgYW5kIHN0YWNrIGluZm9ybWF0aW9uIHNob3VsZCBnZXQgYXBwZW5kZWQg
b25seSB0byBuYXRpdmUgZXJyb3IgY29uc3RydWN0b3JzCisgICAgICAgIGFuZCBzaG91bGQgYmUg
YWRkZWQgYXQgY29uc3RydWN0aW9uIHRpbWUgcmF0aGVyIHRoYW4gd2hlbiB0aHJvd24uCisgICAg
ICAgIHJkYXI6Ly9wcm9ibGVtLzE5OTI3MjkzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4NzEKKyAgICAgICAgCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
OgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAgICogaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKiBwYXJzZXIvUGFyc2VyRXJyb3IuaDoKKyAg
ICAgICAgKEpTQzo6UGFyc2VyRXJyb3I6OnRvRXJyb3JPYmplY3QpOgorICAgICAgICAqIHJ1bnRp
bWUvQ29tbW9uSWRlbnRpZmllcnMuaDoKKyAgICAgICAgKiBydW50aW1lL0Vycm9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6Y3JlYXRlRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVFdmFsRXJyb3Ip
OgorICAgICAgICAoSlNDOjpjcmVhdGVSYW5nZUVycm9yKToKKyAgICAgICAgKEpTQzo6Y3JlYXRl
UmVmZXJlbmNlRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVTeW50YXhFcnJvcik6CisgICAg
ICAgIChKU0M6OmNyZWF0ZVR5cGVFcnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlVVJJRXJyb3IpOgorICAgICAg
ICAoSlNDOjpjcmVhdGVPdXRPZk1lbW9yeUVycm9yKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9y
Lmg6CisgICAgICAgICogcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6SW50ZXJwcmV0ZXI6OmNvbnN0cnVjdFdpdGhFcnJvckNvbnN0cnVjdG9yKToKKyAgICAgICAg
KEpTQzo6SW50ZXJwcmV0ZXI6OmNhbGxFcnJvckNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50
aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjphcHBlbmRTb3VyY2VUb0Vycm9y
KToKKyAgICAgICAgKEpTQzo6RmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3Rv
cjo6RmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3Rvcik6CisgICAgICAgIChK
U0M6OkZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3I6Om9wZXJhdG9yKCkp
OgorICAgICAgICAoSlNDOjpGaW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9y
Ojpmb3VuZENhbGxGcmFtZSk6CisgICAgICAgIChKU0M6OkZpbmRGaXJzdENhbGxlckZyYW1lV2l0
aENvZGVibG9ja0Z1bmN0b3I6OmluZGV4KToKKyAgICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JJbnN0YW5jZS5oOgorICAg
ICAgICAoSlNDOjpFcnJvckluc3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXJy
b3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpFcnJvclByb3RvdHlwZTo6ZmluaXNoQ3Jl
YXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uRnV6ei5jcHA6CisgICAgICAgIChK
U0M6OmRvRXhjZXB0aW9uRnV6emluZyk6CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25IZWxw
ZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVh
dGVJbnZhbGlkRnVuY3Rpb25BcHBseVBhcmFtZXRlckVycm9yKToKKyAgICAgICAgKEpTQzo6Y3Jl
YXRlSW52YWxpZEluUGFyYW1ldGVyRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVJbnZhbGlk
SW5zdGFuY2VvZlBhcmFtZXRlckVycm9yKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlTm90QUNvbnN0
cnVjdG9yRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcik6Cisg
ICAgICAgIChKU0M6OmNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IpOgorICAgICAgICAoSlNDOjp0aHJv
d091dE9mTWVtb3J5RXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVTdGFja092ZXJmbG93RXJy
b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpjcmVhdGVPdXRPZk1lbW9yeUVycm9yKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0
cnVjdEFycmF5QnVmZmVyKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5
cGUuY3BwOgorICAgICAgICAoSlNDOjphcnJheUJ1ZmZlclByb3RvRnVuY1NsaWNlKToKKyAgICAg
ICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oOgorICAgICAgICAo
SlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlKToKKyAgICAgICAg
KEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNyZWF0ZVVuaW5pdGlhbGl6
ZWQpOgorICAgICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHA6CisgICAg
ICAgIChKU0M6OkludGVycHJldGVyOjpjb25zdHJ1Y3RXaXRoTmF0aXZlRXJyb3JDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpjYWxsTmF0aXZlRXJyb3JDb25zdHJ1Y3Rv
cik6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjp0aHJvd0V4
Y2VwdGlvbik6CisgICAgICAgIChKU0M6OmFwcGVuZFNvdXJjZVRvRXJyb3IpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpGaW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yOjpG
aW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6RmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3Rvcjo6b3BlcmF0
b3IoKSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENv
ZGVibG9ja0Z1bmN0b3I6OmZvdW5kQ2FsbEZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
RmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3Rvcjo6aW5kZXgpOiBEZWxldGVk
LgorCiAyMDE1LTAzLTMxICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgog
CiAgICAgICAgIENsZWFuIHVwIElkZW50aWZpZXIgZmFjdG9yaWVzIHRvIGNsYXJpZnkgdGhlIG1l
YW5pbmcgb2YgU3RyaW5nSW1wbCoKZGlmZiAtLWdpdCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAKaW5kZXggZWNmY2U5MS4uMzA5MmZjYiAxMDA2NDQKLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKQEAgLTc2Myw3ICs3NjMs
NyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKFByb2dyYW1FeGVjdXRhYmxlKiBwcm9n
cmFtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSgogICAgICAgICAgICAgICAgICAgICAgICAgUHJv
cGVydHlTbG90IHNsb3QoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghZ2xvYmFsT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBKU09OUFBhdGhbaV0u
bV9wYXRoRW50cnlOYW1lLCBzbG90KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChlbnRyeSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxGcmFt
ZS0+dm0oKS50aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxl
RXJyb3IoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIEpTT05QUGF0aFtpXS5tX3BhdGhFbnRy
eU5hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxGcmFt
ZS0+dm0oKS50aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxl
RXJyb3IoY2FsbEZyYW1lLCBKU09OUFBhdGhbaV0ubV9wYXRoRW50cnlOYW1lKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWRKU09OUDsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VPYmplY3QgPSBzbG90LmdldFZh
bHVlKGNhbGxGcmFtZSwgSlNPTlBQYXRoW2ldLm1fcGF0aEVudHJ5TmFtZSk7CmRpZmYgLS1naXQg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmggU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKaW5kZXggNmJmODhkYi4uZjAy
ZTE0MyAxMDA2NDQKLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5oCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
aApAQCAtMjY3LDYgKzI2Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgZHVtcENhbGxGcmFtZShDYWxsRnJhbWUqKTsKIAorICAgICAgICB2b2lk
IGdldFN0YWNrVHJhY2UoVmVjdG9yPFN0YWNrRnJhbWU+JiByZXN1bHRzLCBzaXplX3QgbWF4U3Rh
Y2tTaXplID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSk7CisKICAgICBwcml2
YXRlOgogICAgICAgICBlbnVtIEV4ZWN1dGlvbkZsYWcgeyBOb3JtYWwsIEluaXRpYWxpemVBbmRS
ZXR1cm4gfTsKIApAQCAtMjc0LDcgKzI3Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IEpTVmFsdWUgZXhlY3V0ZShDYWxsRnJhbWVDbG9zdXJlJik7CiAKLSAgICAgICAgdm9pZCBnZXRT
dGFja1RyYWNlKFZlY3RvcjxTdGFja0ZyYW1lPiYgcmVzdWx0cywgc2l6ZV90IG1heFN0YWNrU2l6
ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOworCiAKICAgICAgICAgdm9p
ZCBkdW1wUmVnaXN0ZXJzKENhbGxGcmFtZSopOwogICAgICAgICAKZGlmZiAtLWdpdCBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckVycm9yLmggU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9QYXJzZXJFcnJvci5oCmluZGV4IDJhNjkwY2EuLmNlMTQ1ZDcgMTAwNjQ0Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckVycm9yLmgKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyRXJyb3IuaApAQCAtODksMjIgKzg5LDIzIEBAIHB1Ymxp
YzoKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlLCAKICAgICAgICAgaW50IG92ZXJyaWRlTGluZU51bWJlciA9IC0xKQogICAgIHsK
KyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCk7CiAg
ICAgICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgICAgIGNhc2UgRXJyb3JOb25lOgogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGNhc2UgU3ludGF4RXJyb3I6CiAgICAgICAg
ICAgICByZXR1cm4gYWRkRXJyb3JJbmZvKAotICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpLCAKLSAgICAgICAgICAgICAgICBjcmVhdGVTeW50YXhFcnJvcihnbG9iYWxP
YmplY3QsIG1fbWVzc2FnZSksIAorICAgICAgICAgICAgICAgIGV4ZWMsIAorICAgICAgICAgICAg
ICAgIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsIG1fbWVzc2FnZSksIAogICAgICAgICAgICAgICAg
IG92ZXJyaWRlTGluZU51bWJlciA9PSAtMSA/IG1fbGluZSA6IG92ZXJyaWRlTGluZU51bWJlciwg
c291cmNlKTsKICAgICAgICAgY2FzZSBFdmFsRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gY3Jl
YXRlU3ludGF4RXJyb3IoZ2xvYmFsT2JqZWN0LCBtX21lc3NhZ2UpOworICAgICAgICAgICAgcmV0
dXJuIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsIG1fbWVzc2FnZSk7CiAgICAgICAgIGNhc2UgU3Rh
Y2tPdmVyZmxvdzogewogICAgICAgICAgICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUo
Z2xvYmFsT2JqZWN0LT52bSgpKTsKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVTdGFja092ZXJm
bG93RXJyb3IoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVTdGFja092
ZXJmbG93RXJyb3IoZXhlYyk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBPdXRPZk1lbW9yeToK
LSAgICAgICAgICAgIHJldHVybiBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCk7
CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKICAgICAg
ICAgfQogICAgICAgICBDUkFTSCgpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdp
dCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKaW5kZXggNzk5MGIz
Zi4uMjM0YmI4MSAxMDA2NDQKLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
bklkZW50aWZpZXJzLmgKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklk
ZW50aWZpZXJzLmgKQEAgLTgyLDYgKzgyLDcgQEAKICAgICBtYWNybyhjbGVhcikgXAogICAgIG1h
Y3JvKGNsb3NlKSBcCiAgICAgbWFjcm8oY2xvc2VkKSBcCisgICAgbWFjcm8oY29sdW1uKSBcCiAg
ICAgbWFjcm8oY29tcGlsYXRpb25LaW5kKSBcCiAgICAgbWFjcm8oY29tcGlsYXRpb25zKSBcCiAg
ICAgbWFjcm8oY29tcGlsZSkgXApAQCAtMTI3LDYgKzEyOCw3IEBACiAgICAgbWFjcm8oa2V5cykg
XAogICAgIG1hY3JvKGxhc3RJbmRleCkgXAogICAgIG1hY3JvKGxlbmd0aCkgXAorICAgIG1hY3Jv
KGxpbmUpIFwKICAgICBtYWNybyhtZXNzYWdlKSBcCiAgICAgbWFjcm8obXVsdGlsaW5lKSBcCiAg
ICAgbWFjcm8obmFtZSkgXApAQCAtMTUzLDYgKzE1NSw3IEBACiAgICAgbWFjcm8oc2l6ZSkgXAog
ICAgIG1hY3JvKHNsaWNlKSBcCiAgICAgbWFjcm8oc291cmNlKSBcCisgICAgbWFjcm8oc291cmNl
VVJMKSBcCiAgICAgbWFjcm8oc291cmNlQ29kZSkgXAogICAgIG1hY3JvKHN0YWNrKSBcCiAgICAg
bWFjcm8oc3ViYXJyYXkpIFwKZGlmZiAtLWdpdCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FcnJvci5jcHAgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3BwCmluZGV4
IDM2MTU2YTEuLmNiZjU5YWIgMTAwNjQ0Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FcnJvci5jcHAKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcApA
QCAtNDQsOTEgKzQ0LDYzIEBAIG5hbWVzcGFjZSBKU0Mgewogc3RhdGljIGNvbnN0IGNoYXIqIGxp
bmVQcm9wZXJ0eU5hbWUgPSAibGluZSI7CiBzdGF0aWMgY29uc3QgY2hhciogc291cmNlVVJMUHJv
cGVydHlOYW1lID0gInNvdXJjZVVSTCI7CiAKLUpTT2JqZWN0KiBjcmVhdGVFcnJvcihKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCitKU09iamVjdCog
Y3JlYXRlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEVycm9y
SW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyIGFwcGVuZGVyKQogewogICAgIEFTU0VSVCghbWVzc2Fn
ZS5pc0VtcHR5KCkpOwotICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2Jq
ZWN0LT52bSgpLCBnbG9iYWxPYmplY3QtPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOworICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCk7CisgICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3Qt
PnZtKCksIGdsb2JhbE9iamVjdC0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSwgYXBwZW5kZXIs
IFR5cGVOb3RoaW5nLCB0cnVlKTsKIH0KIAotSlNPYmplY3QqIGNyZWF0ZUV2YWxFcnJvcihKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCitKU09iamVj
dCogY3JlYXRlRXZhbEVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdl
LCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlciBhcHBlbmRlcikKIHsKICAgICBBU1NFUlQo
IW1lc3NhZ2UuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGds
b2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5ldmFsRXJyb3JDb25zdHJ1Y3RvcigpLT5l
cnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIHJldHVybiBFcnJvckluc3Rh
bmNlOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QtPmV2YWxF
cnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UsIGFwcGVuZGVyLCBU
eXBlTm90aGluZywgdHJ1ZSk7CiB9CiAKLUpTT2JqZWN0KiBjcmVhdGVSYW5nZUVycm9yKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK0pTT2JqZWN0
KiBjcmVhdGVSYW5nZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdl
LCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlciBhcHBlbmRlcikKIHsKICAgICBBU1NFUlQo
IW1lc3NhZ2UuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGds
b2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5yYW5nZUVycm9yQ29uc3RydWN0b3IoKS0+
ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICByZXR1cm4gRXJyb3JJbnN0
YW5jZTo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5yYW5n
ZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSwgYXBwZW5kZXIs
IFR5cGVOb3RoaW5nLCB0cnVlKTsKIH0KIAotSlNPYmplY3QqIGNyZWF0ZVJlZmVyZW5jZUVycm9y
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK0pT
T2JqZWN0KiBjcmVhdGVSZWZlcmVuY2VFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIgYXBwZW5kZXIpCiB7CiAg
ICAgQVNTRVJUKCFtZXNzYWdlLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6
OmNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdC0+cmVmZXJlbmNlRXJyb3JD
b25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKKyAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOworICAgIHJl
dHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9i
YWxPYmplY3QtPnJlZmVyZW5jZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwg
bWVzc2FnZSwgYXBwZW5kZXIsIFR5cGVOb3RoaW5nLCB0cnVlKTsKIH0KIAotSlNPYmplY3QqIGNy
ZWF0ZVN5bnRheEVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKK0pTT2JqZWN0KiBjcmVhdGVTeW50YXhFcnJvcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIgYXBw
ZW5kZXIpCiB7CiAgICAgQVNTRVJUKCFtZXNzYWdlLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIEVy
cm9ySW5zdGFuY2U6OmNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdC0+c3lu
dGF4RXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKKyAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
OworICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT52
bSgpLCBnbG9iYWxPYmplY3QtPnN5bnRheEVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1
cmUoKSwgbWVzc2FnZSwgYXBwZW5kZXIsIFR5cGVOb3RoaW5nLCB0cnVlKTsKIH0KIAotSlNPYmpl
Y3QqIGNyZWF0ZVR5cGVFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCitKU09iamVjdCogY3JlYXRlVHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlciBh
cHBlbmRlciwgUnVudGltZVR5cGUgdHlwZSkKIHsKICAgICBBU1NFUlQoIW1lc3NhZ2UuaXNFbXB0
eSgpKTsKLSAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+dm0o
KSwgZ2xvYmFsT2JqZWN0LT50eXBlRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgp
LCBtZXNzYWdlKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpOworICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhl
YywgZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QtPnR5cGVFcnJvckNvbnN0cnVjdG9y
KCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UsIGFwcGVuZGVyLCB0eXBlLCB0cnVlKTsKIH0K
IAotSlNPYmplY3QqIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCitKU09iamVjdCogY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
RXhlY1N0YXRlKiBleGVjLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlciBhcHBlbmRlcikK
IHsKLSAgICByZXR1cm4gY3JlYXRlVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgQVNDSUlMaXRlcmFs
KCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpKTsKKyAgICByZXR1cm4gY3JlYXRlVHlwZUVycm9yKGV4
ZWMsIEFTQ0lJTGl0ZXJhbCgiTm90IGVub3VnaCBhcmd1bWVudHMiKSwgYXBwZW5kZXIsIFR5cGVO
b3RoaW5nKTsKIH0KIAotSlNPYmplY3QqIGNyZWF0ZVVSSUVycm9yKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK0pTT2JqZWN0KiBjcmVhdGVVUklF
cnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXJyb3JJbnN0YW5j
ZTo6U291cmNlQXBwZW5kZXIgYXBwZW5kZXIpCiB7CiAgICAgQVNTRVJUKCFtZXNzYWdlLmlzRW1w
dHkoKSk7Ci0gICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShnbG9iYWxPYmplY3QtPnZt
KCksIGdsb2JhbE9iamVjdC0+VVJJRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgp
LCBtZXNzYWdlKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpOworICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhl
YywgZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QtPlVSSUVycm9yQ29uc3RydWN0b3Io
KS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSwgYXBwZW5kZXIsIFR5cGVOb3RoaW5nLCB0cnVl
KTsKIH0KIAotSlNPYmplY3QqIGNyZWF0ZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQorSlNPYmplY3QqIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoRXhlY1N0YXRl
KiBleGVjLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlciBhcHBlbmRlcikgCiB7Ci0gICAg
cmV0dXJuIGNyZWF0ZUVycm9yKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbWVzc2FnZSk7
Ci19Ci0KLUpTT2JqZWN0KiBjcmVhdGVFdmFsRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZUV2YWxFcnJvcihleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCksIG1lc3NhZ2UpOwotfQotCi1KU09iamVjdCogY3JlYXRlUmFuZ2VF
cnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICByZXR1
cm4gY3JlYXRlUmFuZ2VFcnJvcihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIG1lc3NhZ2Up
OwotfQotCi1KU09iamVjdCogY3JlYXRlUmVmZXJlbmNlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVJlZmVyZW5jZUVycm9y
KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbWVzc2FnZSk7Ci19Ci0KLUpTT2JqZWN0KiBj
cmVhdGVTeW50YXhFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
LXsKLSAgICByZXR1cm4gY3JlYXRlU3ludGF4RXJyb3IoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLCBtZXNzYWdlKTsKLX0KLQotSlNPYmplY3QqIGNyZWF0ZVR5cGVFcnJvcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlVHlwZUVy
cm9yKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbWVzc2FnZSk7Ci19Ci0KLUpTT2JqZWN0
KiBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
cmV0dXJuIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSk7Ci19Ci0KLUpTT2JqZWN0KiBjcmVhdGVVUklFcnJvcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlVVJJRXJyb3IoZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBtZXNzYWdlKTsKKyAgICByZXR1cm4gY3JlYXRlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCJPdXQgb2YgbWVtb3J5IiksIGFwcGVuZGVyKTsKIH0KIAog
SlNPYmplY3QqIGFkZEVycm9ySW5mbyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNPYmplY3QqIGVy
cm9yLCBpbnQgbGluZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQpkaWZmIC0tZ2l0IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmggU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXJyb3IuaAppbmRleCA0Y2MxY2RhLi5lZTAzY2YwMSAxMDA2NDQKLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmgKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Vycm9yLmgKQEAgLTIzLDExICsyMywxMyBAQAogI2lmbmRlZiBFcnJvcl9oCiAjZGVm
aW5lIEVycm9yX2gKIAorI2luY2x1ZGUgIkVycm9ySW5zdGFuY2UuaCIKICNpbmNsdWRlICJJbnRl
cm5hbEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU09i
amVjdC5oIgogI2luY2x1ZGUgPHN0ZGludC5oPgogCisKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFz
cyBFeGVjU3RhdGU7CkBAIC0zNywyNCArMzksMTcgQEAgY2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBT
b3VyY2VDb2RlOwogY2xhc3MgU3RydWN0dXJlOwogCi0vLyBNZXRob2RzIHRvIGNyZWF0ZSBhIHJh
bmdlIG9mIGludGVybmFsIGVycm9ycy4KLUpTT2JqZWN0KiBjcmVhdGVFcnJvcihKU0dsb2JhbE9i
amVjdCosIGNvbnN0IFN0cmluZyYpOwotSlNPYmplY3QqIGNyZWF0ZUV2YWxFcnJvcihKU0dsb2Jh
bE9iamVjdCosIGNvbnN0IFN0cmluZyYpOwotSlNPYmplY3QqIGNyZWF0ZVJhbmdlRXJyb3IoSlNH
bG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmKTsKLUpTT2JqZWN0KiBjcmVhdGVSZWZlcmVuY2VF
cnJvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYpOwotSlNPYmplY3QqIGNyZWF0ZVN5
bnRheEVycm9yKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJik7Ci1KU09iamVjdCogY3Jl
YXRlVHlwZUVycm9yKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJik7Ci1KU09iamVjdCog
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoSlNHbG9iYWxPYmplY3QqKTsKLUpTT2JqZWN0
KiBjcmVhdGVVUklFcnJvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYpOwogLy8gRXhl
Y1N0YXRlIHdyYXBwZXJzLgotSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZUVycm9y
KEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOwotSlNPYmplY3QqIGNyZWF0ZUV2YWxFcnJvcihF
eGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKLUpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBj
cmVhdGVSYW5nZUVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOwotSlNfRVhQT1JUX1BS
SVZBVEUgSlNPYmplY3QqIGNyZWF0ZVJlZmVyZW5jZUVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IFN0
cmluZyYpOwotSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZVN5bnRheEVycm9yKEV4
ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOwotSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNy
ZWF0ZVR5cGVFcnJvcihFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKLUpTX0VYUE9SVF9QUklW
QVRFIEpTT2JqZWN0KiBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihFeGVjU3RhdGUqKTsK
LUpTT2JqZWN0KiBjcmVhdGVVUklFcnJvcihFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKK0pT
X0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjcmVhdGVFcnJvcihFeGVjU3RhdGUqLCBjb25zdCBT
dHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlciA9IG51bGxwdHIpOworSlNfRVhQ
T1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZUV2YWxFcnJvcihFeGVjU3RhdGUqLCBjb25zdCBT
dHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlciA9IG51bGxwdHIpOworSlNfRVhQ
T1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZVJhbmdlRXJyb3IoRXhlY1N0YXRlKiwgY29uc3Qg
U3RyaW5nJiwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIgPSBudWxscHRyKTsKK0pTX0VY
UE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjcmVhdGVSZWZlcmVuY2VFcnJvcihFeGVjU3RhdGUqLCBj
b25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlciA9IG51bGxwdHIpOwor
SlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZVN5bnRheEVycm9yKEV4ZWNTdGF0ZSos
IGNvbnN0IFN0cmluZyYsIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyID0gbnVsbHB0cik7
CitKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY3JlYXRlVHlwZUVycm9yKEV4ZWNTdGF0ZSos
IGNvbnN0IFN0cmluZyYsIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyID0gbnVsbHB0ciwg
UnVudGltZVR5cGUgPSBUeXBlTm90aGluZyk7CitKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCog
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoRXhlY1N0YXRlKiwgRXJyb3JJbnN0YW5jZTo6
U291cmNlQXBwZW5kZXIgPSBudWxscHRyKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBj
cmVhdGVVUklFcnJvcihFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpT
b3VyY2VBcHBlbmRlciA9IG51bGxwdHIpOworSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNy
ZWF0ZU91dE9mTWVtb3J5RXJyb3IoRXhlY1N0YXRlKiwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBw
ZW5kZXIgPSBudWxscHRyKTsKKwogCiAvLyBNZXRob2RzIHRvIGFkZCAKIGJvb2wgaGFzRXJyb3JJ
bmZvKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBlcnJvcik7CmRpZmYgLS1naXQgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHAgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHAKaW5kZXggNmRhMWE0Mi4uMzBjNGZhYSAx
MDA2NDQKLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3Iu
Y3BwCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNw
cApAQCAtNTIsMTAgKzUyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRlcnBy
ZXRlcjo6Y29uc3RydWN0V2l0aEVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXQKIHsKICAgICBKU1Zh
bHVlIG1lc3NhZ2UgPSBleGVjLT5hcmd1bWVudENvdW50KCkgPyBleGVjLT5hcmd1bWVudCgwKSA6
IGpzVW5kZWZpbmVkKCk7CiAgICAgU3RydWN0dXJlKiBlcnJvclN0cnVjdHVyZSA9IGFzSW50ZXJu
YWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT5lcnJvclN0cnVjdHVy
ZSgpOwotICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlOwotICAgIGV4ZWMtPnZtKCku
aW50ZXJwcmV0ZXItPmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSwgc3RkOjpudW1lcmljX2xpbWl0
czxzaXplX3Q+OjptYXgoKSk7Ci0gICAgc3RhY2tUcmFjZS5yZW1vdmUoMCk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1
cmUsIG1lc3NhZ2UsIHN0YWNrVHJhY2UpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEVy
cm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0
ciwgVHlwZU5vdGhpbmcsIGZhbHNlKSk7CiB9CiAKIENvbnN0cnVjdFR5cGUgRXJyb3JDb25zdHJ1
Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3RE
YXRhKQpAQCAtNjgsMTAgKzY1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRl
cnByZXRlcjo6Y2FsbEVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpT
VmFsdWUgbWVzc2FnZSA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA/IGV4ZWMtPmFyZ3VtZW50KDAp
IDoganNVbmRlZmluZWQoKTsKICAgICBTdHJ1Y3R1cmUqIGVycm9yU3RydWN0dXJlID0gYXNJbnRl
cm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPmVycm9yU3RydWN0
dXJlKCk7Ci0gICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJhY2U7Ci0gICAgZXhlYy0+dm0o
KS5pbnRlcnByZXRlci0+Z2V0U3RhY2tUcmFjZShzdGFja1RyYWNlLCBzdGQ6Om51bWVyaWNfbGlt
aXRzPHNpemVfdD46Om1heCgpKTsKLSAgICBzdGFja1RyYWNlLnJlbW92ZSgwKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVj
dHVyZSwgbWVzc2FnZSwgc3RhY2tUcmFjZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
RXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsIGVycm9yU3RydWN0dXJlLCBtZXNzYWdlLCBudWxs
cHRyLCBUeXBlTm90aGluZywgZmFsc2UpKTsKIH0KIAogQ2FsbFR5cGUgRXJyb3JDb25zdHJ1Y3Rv
cjo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQpkaWZmIC0tZ2l0IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCmluZGV4IGFkZDBiMjEuLjZmMjE3
OTkgMTAwNjQ0Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNl
LmNwcAorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAK
QEAgLTIzLDYgKzIzLDggQEAKIAogI2luY2x1ZGUgIkpTU2NvcGUuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zNSwxNSArMzcsMTQ0IEBA
IEVycm9ySW5zdGFuY2U6OkVycm9ySW5zdGFuY2UoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKIHsKIH0KIAotdm9pZCBFcnJvckluc3RhbmNlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJhY2UpCitzdGF0
aWMgdm9pZCBhcHBlbmRTb3VyY2VUb0Vycm9yKENhbGxGcmFtZSogY2FsbEZyYW1lLCBFcnJvcklu
c3RhbmNlKiBleGNlcHRpb24sIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQogeworICAgIEVycm9y
SW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyIGFwcGVuZGVyID0gZXhjZXB0aW9uLT5zb3VyY2VBcHBl
bmRlcigpOworICAgIGV4Y2VwdGlvbi0+Y2xlYXJTb3VyY2VBcHBlbmRlcigpOworICAgIFJ1bnRp
bWVUeXBlIHR5cGUgPSBleGNlcHRpb24tPnJ1bnRpbWVUeXBlRm9yQ2F1c2UoKTsKKyAgICBleGNl
cHRpb24tPmNsZWFyUnVudGltZVR5cGVGb3JDYXVzZSgpOworCisgICAgaWYgKCFjYWxsRnJhbWUt
PmNvZGVCbG9jaygpLT5oYXNFeHByZXNzaW9uSW5mbygpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgaW50IHN0YXJ0T2Zmc2V0ID0gMDsKKyAgICBpbnQgZW5kT2Zmc2V0ID0gMDsKKyAgICBp
bnQgZGl2b3RQb2ludCA9IDA7CisgICAgdW5zaWduZWQgbGluZSA9IDA7CisgICAgdW5zaWduZWQg
Y29sdW1uID0gMDsKKyAgICAKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCk7CisgICAgY29kZUJsb2NrLT5leHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9m
ZnNldChieXRlY29kZU9mZnNldCwgZGl2b3RQb2ludCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwg
bGluZSwgY29sdW1uKTsKKyAgICAKKyAgICBpbnQgZXhwcmVzc2lvblN0YXJ0ID0gZGl2b3RQb2lu
dCAtIHN0YXJ0T2Zmc2V0OworICAgIGludCBleHByZXNzaW9uU3RvcCA9IGRpdm90UG9pbnQgKyBl
bmRPZmZzZXQ7CisKKyAgICBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZyA9IGNvZGVCbG9jay0+
c291cmNlKCktPnNvdXJjZSgpOworICAgIGlmICghZXhwcmVzc2lvblN0b3AgfHwgZXhwcmVzc2lv
blN0YXJ0ID4gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VTdHJpbmcubGVuZ3RoKCkpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgVk0qIHZtID0gJmNhbGxGcmFtZS0+dm0oKTsKKyAgICBKU1Zh
bHVlIGpzTWVzc2FnZSA9IGV4Y2VwdGlvbi0+Z2V0RGlyZWN0KCp2bSwgdm0tPnByb3BlcnR5TmFt
ZXMtPm1lc3NhZ2UpOworICAgIGlmICghanNNZXNzYWdlIHx8ICFqc01lc3NhZ2UuaXNTdHJpbmco
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFN0cmluZyBtZXNzYWdlID0gYXNTdHJpbmco
anNNZXNzYWdlKS0+dmFsdWUoY2FsbEZyYW1lKTsKKyAgICBpZiAoZXhwcmVzc2lvblN0YXJ0IDwg
ZXhwcmVzc2lvblN0b3ApCisgICAgICAgIG1lc3NhZ2UgPSBhcHBlbmRlcihtZXNzYWdlLCBjb2Rl
QmxvY2stPnNvdXJjZSgpLT5nZXRSYW5nZShleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25TdG9w
KSAsIHR5cGUsIEVycm9ySW5zdGFuY2U6OkZvdW5kRXhhY3RTb3VyY2UpOworICAgIGVsc2Ugewor
ICAgICAgICAvLyBObyByYW5nZSBpbmZvcm1hdGlvbiwgc28gZ2l2ZSBhIGZldyBjaGFyYWN0ZXJz
IG9mIGNvbnRleHQuCisgICAgICAgIGNvbnN0IFN0cmluZ0ltcGwqIGRhdGEgPSBzb3VyY2VTdHJp
bmcuaW1wbCgpOworICAgICAgICBpbnQgZGF0YUxlbmd0aCA9IHNvdXJjZVN0cmluZy5sZW5ndGgo
KTsKKyAgICAgICAgaW50IHN0YXJ0ID0gZXhwcmVzc2lvblN0YXJ0OworICAgICAgICBpbnQgc3Rv
cCA9IGV4cHJlc3Npb25TdGFydDsKKyAgICAgICAgLy8gR2V0IHVwIHRvIDIwIGNoYXJhY3RlcnMg
b2YgY29udGV4dCB0byB0aGUgbGVmdCBhbmQgcmlnaHQgb2YgdGhlIGRpdm90LCBjbGFtcGluZyB0
byB0aGUgbGluZS4KKyAgICAgICAgLy8gVGhlbiBzdHJpcCB3aGl0ZXNwYWNlLgorICAgICAgICB3
aGlsZSAoc3RhcnQgPiAwICYmIChleHByZXNzaW9uU3RhcnQgLSBzdGFydCA8IDIwKSAmJiAoKmRh
dGEpW3N0YXJ0IC0gMV0gIT0gJ1xuJykKKyAgICAgICAgICAgIHN0YXJ0LS07CisgICAgICAgIHdo
aWxlIChzdGFydCA8IChleHByZXNzaW9uU3RhcnQgLSAxKSAmJiBpc1N0cldoaXRlU3BhY2UoKCpk
YXRhKVtzdGFydF0pKQorICAgICAgICAgICAgc3RhcnQrKzsKKyAgICAgICAgd2hpbGUgKHN0b3Ag
PCBkYXRhTGVuZ3RoICYmIChzdG9wIC0gZXhwcmVzc2lvblN0YXJ0IDwgMjApICYmICgqZGF0YSlb
c3RvcF0gIT0gJ1xuJykKKyAgICAgICAgICAgIHN0b3ArKzsKKyAgICAgICAgd2hpbGUgKHN0b3Ag
PiBleHByZXNzaW9uU3RhcnQgJiYgaXNTdHJXaGl0ZVNwYWNlKCgqZGF0YSlbc3RvcCAtIDFdKSkK
KyAgICAgICAgICAgIHN0b3AtLTsKKyAgICAgICAgbWVzc2FnZSA9IGFwcGVuZGVyKG1lc3NhZ2Us
IGNvZGVCbG9jay0+c291cmNlKCktPmdldFJhbmdlKHN0YXJ0LCBzdG9wKSwgdHlwZSwgRXJyb3JJ
bnN0YW5jZTo6Rm91bmRBcHByb3hpbWF0ZVNvdXJjZSk7CisgICAgfQorICAgIGV4Y2VwdGlvbi0+
cHV0RGlyZWN0KCp2bSwgdm0tPnByb3BlcnR5TmFtZXMtPm1lc3NhZ2UsIGpzU3RyaW5nKHZtLCBt
ZXNzYWdlKSk7CisKK30KKworY2xhc3MgRmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2Nr
RnVuY3RvciB7CitwdWJsaWM6CisgICAgRmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2Nr
RnVuY3RvcihDYWxsRnJhbWUqIHN0YXJ0Q2FsbEZyYW1lKQorICAgICAgICA6IG1fc3RhcnRDYWxs
RnJhbWUoc3RhcnRDYWxsRnJhbWUpCisgICAgICAgICwgbV9mb3VuZENhbGxGcmFtZShudWxscHRy
KQorICAgICAgICAsIG1fZm91bmRTdGFydENhbGxGcmFtZShmYWxzZSkKKyAgICAgICAgLCBtX2lu
ZGV4KDApCisgICAgeyB9CisKKyAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0
YWNrVmlzaXRvciYgdmlzaXRvcikKKyAgICB7CisgICAgICAgIGlmICghbV9mb3VuZFN0YXJ0Q2Fs
bEZyYW1lICYmICh2aXNpdG9yLT5jYWxsRnJhbWUoKSA9PSBtX3N0YXJ0Q2FsbEZyYW1lKSkKKyAg
ICAgICAgICAgIG1fZm91bmRTdGFydENhbGxGcmFtZSA9IHRydWU7CisKKyAgICAgICAgaWYgKG1f
Zm91bmRTdGFydENhbGxGcmFtZSkgeworICAgICAgICAgICAgaWYgKHZpc2l0b3ItPmNhbGxGcmFt
ZSgpLT5jb2RlQmxvY2soKSkgeworICAgICAgICAgICAgICAgIG1fZm91bmRDYWxsRnJhbWUgPSB2
aXNpdG9yLT5jYWxsRnJhbWUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9y
OjpEb25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CisgICAgfQorCisgICAg
Q2FsbEZyYW1lKiBmb3VuZENhbGxGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm91bmRDYWxsRnJh
bWU7IH0KKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKwor
cHJpdmF0ZToKKyAgICBDYWxsRnJhbWUqIG1fc3RhcnRDYWxsRnJhbWU7CisgICAgQ2FsbEZyYW1l
KiBtX2ZvdW5kQ2FsbEZyYW1lOworICAgIGJvb2wgbV9mb3VuZFN0YXJ0Q2FsbEZyYW1lOworICAg
IHVuc2lnbmVkIG1faW5kZXg7Cit9OworCit2b2lkIEVycm9ySW5zdGFuY2U6OmZpbmlzaENyZWF0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGJvb2wg
dXNlQ3VycmVudEZyYW1lKQoreworICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlID0g
VmVjdG9yPFN0YWNrRnJhbWU+KCk7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAg
IEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICBpZiAoIW1lc3NhZ2UuaXNOdWxsKCkpCiAg
ICAgICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bWVzc2FnZSwganNTdHJpbmco
JnZtLCBtZXNzYWdlKSwgRG9udEVudW0pOwotICAgIAotICAgIGlmICghc3RhY2tUcmFjZS5pc0Vt
cHR5KCkpCisKKyAgICBpZiAoZXhlYyAmJiBzdGFja1RyYWNlLmlzRW1wdHkoKSkKKyAgICAgICAg
ZXhlYy0+dm0oKS5pbnRlcnByZXRlci0+Z2V0U3RhY2tUcmFjZShzdGFja1RyYWNlKTsKKworICAg
IGlmICghc3RhY2tUcmFjZS5pc0VtcHR5KCkpIHsKKworCisgICAgICAgIEFTU0VSVChleGVjID09
IHZtLnRvcENhbGxGcmFtZSB8fCBleGVjID09IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
Z2xvYmFsRXhlYygpIHx8IGV4ZWMgPT0gZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5nbG9i
YWxFeGVjKCkpOworCisgICAgICAgIFN0YWNrRnJhbWUqIHN0YWNrRnJhbWU7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDAgOyBpIDwgc3RhY2tUcmFjZS5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgc3RhY2tGcmFtZSA9ICZzdGFja1RyYWNlLmF0KGkpOworICAgICAgICAgICAgaWYgKHN0
YWNrRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIHVuc2lnbmVkIGxpbmU7CisgICAgICAgIHVuc2lnbmVkIGNvbHVtbjsKKyAg
ICAgICAgc3RhY2tGcmFtZS0+Y29tcHV0ZUxpbmVBbmRDb2x1bW4obGluZSwgY29sdW1uKTsKKyAg
ICAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5saW5lLCBqc051bWJlcihsaW5l
KSwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKKyAgICAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5jb2x1bW4sIGpzTnVtYmVyKGNvbHVtbiksIFJlYWRPbmx5IHwgRG9udERlbGV0
ZSk7CisKKyAgICAgICAgaWYgKCFzdGFja0ZyYW1lLT5zb3VyY2VVUkwuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zb3VyY2VVUkwsIGpzU3Ry
aW5nKCZ2bSwgc3RhY2tGcmFtZS0+c291cmNlVVJMKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsK
KworICAgICAgICBpZiAoaGFzU291cmNlQXBwZW5kZXIoKSkgeworICAgICAgICAgICAgRmluZEZp
cnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3RvciBmdW5jdG9yKGV4ZWMpOworICAgICAg
ICAgICAgdm0udG9wQ2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0b3IpOworICAgICAgICAgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBmdW5jdG9yLmZvdW5kQ2FsbEZyYW1lKCk7CisgICAgICAgICAg
ICB1bnNpZ25lZCBzdGFja0luZGV4ID0gZnVuY3Rvci5pbmRleCgpOworCisgICAgICAgICAgICBp
ZiAoY2FsbEZyYW1lICYmIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkpCisgICAgICAgICAgICAgICAg
YXBwZW5kU291cmNlVG9FcnJvcihjYWxsRnJhbWUsIHRoaXMsIHN0YWNrVHJhY2UuYXQoc3RhY2tJ
bmRleCkuYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1c2VDdXJy
ZW50RnJhbWUpCisgICAgICAgICAgICBzdGFja1RyYWNlLnJlbW92ZSgwKTsKICAgICAgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zdGFjaywgdm0uaW50ZXJwcmV0ZXItPnN0YWNr
VHJhY2VBc1N0cmluZyh2bS50b3BDYWxsRnJhbWUsIHN0YWNrVHJhY2UpLCBEb250RW51bSk7CisK
KyAgICB9CisKIH0KICAgICAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaCBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FcnJvckluc3RhbmNlLmgKaW5kZXggYzJlM2I5Yy4uMmU2YTc2MiAxMDA2NDQK
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCkBAIC0yNCw2ICsyNCw3
IEBACiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJSdW50aW1lVHlwZS5oIgog
I2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKIApAQCAtMzEsNiArMzIsOSBAQCBjbGFzcyBFcnJvckluc3RhbmNlIDog
cHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNOb25GaW5h
bE9iamVjdCBCYXNlOwogCisgICAgZW51bSBTb3VyY2VUZXh0V2hlcmVFcnJvck9jY3VycmVkIHsg
Rm91bmRFeGFjdFNvdXJjZSwgRm91bmRBcHByb3hpbWF0ZVNvdXJjZSB9OworICAgIHR5cGVkZWYg
U3RyaW5nICgqU291cmNlQXBwZW5kZXIpIChjb25zdCBTdHJpbmcmIG9yaWdpbmFsTWVzc2FnZSwg
Y29uc3QgU3RyaW5nJiBzb3VyY2VUZXh0LCBSdW50aW1lVHlwZSwgU291cmNlVGV4dFdoZXJlRXJy
b3JPY2N1cnJlZCk7CisKICAgICBERUNMQVJFX0lORk87CiAKICAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKQEAgLTM4LDIxICs0MiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKEVycm9ySW5zdGFuY2VUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQog
Ci0gICAgc3RhdGljIEVycm9ySW5zdGFuY2UqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1Ry
YWNlID0gVmVjdG9yPFN0YWNrRnJhbWU+KCkpCisgICAgc3RhdGljIEVycm9ySW5zdGFuY2UqIGNy
ZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgU291cmNlQXBwZW5kZXIgYXBwZW5kZXIgPSBudWxscHRyLCBSdW50
aW1lVHlwZSB0eXBlID0gVHlwZU5vdGhpbmcsIGJvb2wgdXNlQ3VycmVudEZyYW1lID0gdHJ1ZSkK
ICAgICB7CiAgICAgICAgIEVycm9ySW5zdGFuY2UqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8RXJyb3JJbnN0YW5jZT4odm0uaGVhcCkpIEVycm9ySW5zdGFuY2Uodm0sIHN0
cnVjdHVyZSk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwgbWVzc2FnZSwg
c3RhY2tUcmFjZSk7CisgICAgICAgIGluc3RhbmNlLT5tX3NvdXJjZUFwcGVuZGVyID0gYXBwZW5k
ZXI7CisgICAgICAgIGluc3RhbmNlLT5tX3J1bnRpbWVUeXBlRm9yQ2F1c2UgPSB0eXBlOworICAg
ICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oZXhlYywgdm0sIG1lc3NhZ2UsIHVzZUN1cnJl
bnRGcmFtZSk7CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKLSAgICBzdGF0aWMg
RXJyb3JJbnN0YW5jZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTVmFsdWUgbWVzc2FnZSwgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJhY2UgPSBWZWN0
b3I8U3RhY2tGcmFtZT4oKSkKKyAgICBzdGF0aWMgRXJyb3JJbnN0YW5jZSogY3JlYXRlKEV4ZWNT
dGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTVmFsdWUgbWVzc2FnZSwgU291cmNl
QXBwZW5kZXIgYXBwZW5kZXIgPSBudWxscHRyLCBSdW50aW1lVHlwZSB0eXBlID0gVHlwZU5vdGhp
bmcsIGJvb2wgdXNlQ3VycmVudEZyYW1lID0gdHJ1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBj
cmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBtZXNzYWdlLmlzVW5kZWZpbmVkKCkgPyBTdHJp
bmcoKSA6IG1lc3NhZ2UudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLCBzdGFja1RyYWNlKTsK
KyAgICAgICAgcmV0dXJuIGNyZWF0ZShleGVjLCBleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIG1lc3Nh
Z2UuaXNVbmRlZmluZWQoKSA/IFN0cmluZygpIDogbWVzc2FnZS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyksIGFwcGVuZGVyLCB0eXBlLCB1c2VDdXJyZW50RnJhbWUpOwogICAgIH0KIAotICAg
IGVudW0gU291cmNlVGV4dFdoZXJlRXJyb3JPY2N1cnJlZCB7IEZvdW5kRXhhY3RTb3VyY2UsIEZv
dW5kQXBwcm94aW1hdGVTb3VyY2UgfTsKLSAgICB0eXBlZGVmIFN0cmluZyAoKlNvdXJjZUFwcGVu
ZGVyKSAoY29uc3QgU3RyaW5nJiBvcmlnaW5hbE1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNl
VGV4dCwgUnVudGltZVR5cGUsIFNvdXJjZVRleHRXaGVyZUVycm9yT2NjdXJyZWQpOwotCiAgICAg
Ym9vbCBoYXNTb3VyY2VBcHBlbmRlcigpIGNvbnN0IHsgcmV0dXJuICEhbV9zb3VyY2VBcHBlbmRl
cjsgfQogICAgIFNvdXJjZUFwcGVuZGVyIHNvdXJjZUFwcGVuZGVyKCkgY29uc3QgeyByZXR1cm4g
bV9zb3VyY2VBcHBlbmRlcjsgfQogICAgIHZvaWQgc2V0U291cmNlQXBwZW5kZXIoU291cmNlQXBw
ZW5kZXIgYXBwZW5kZXIpIHsgbV9zb3VyY2VBcHBlbmRlciA9IGFwcGVuZGVyOyB9CkBAIC02NCw3
ICs2Nyw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBFcnJvckluc3RhbmNl
KFZNJiwgU3RydWN0dXJlKik7CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgY29uc3Qg
U3RyaW5nJiwgVmVjdG9yPFN0YWNrRnJhbWU+ID0gVmVjdG9yPFN0YWNrRnJhbWU+KCkpOworICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiwgVk0mLCBjb25zdCBTdHJpbmcmLCBib29s
IHVzZUN1cnJlbnRGcmFtZSA9IHRydWUpOwogCiAgICAgU291cmNlQXBwZW5kZXIgbV9zb3VyY2VB
cHBlbmRlciB7IG51bGxwdHIgfTsKICAgICBSdW50aW1lVHlwZSBtX3J1bnRpbWVUeXBlRm9yQ2F1
c2UgeyBUeXBlTm90aGluZyB9OwpkaWZmIC0tZ2l0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Vycm9yUHJvdG90eXBlLmNwcCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJv
clByb3RvdHlwZS5jcHAKaW5kZXggY2Y4ZmYyYS4uNWJjMmVjMyAxMDA2NDQKLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCkBAIC01NCw5ICs1NCw5IEBAIEVy
cm9yUHJvdG90eXBlOjpFcnJvclByb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
KQogewogfQogCi12b2lkIEVycm9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KikKK3ZvaWQgRXJyb3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSwgIiIpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpLCB2bSwgIiIpOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZygm
dm0sIFN0cmluZyhBU0NJSUxpdGVyYWwoIkVycm9yIikpKSwgRG9udEVudW0pOwogfQpkaWZmIC0t
Z2l0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkZ1enouY3BwIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkZ1enouY3BwCmluZGV4IGM4MzU2MDUu
Ljc0NGIxYTYgMTAwNjQ0Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRp
b25GdXp6LmNwcAorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRnV6
ei5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAgdm9pZCBkb0V4Y2VwdGlvbkZ1enppbmcoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBjaGFyKiB3aGVyZSwgdm9pZCogcmV0dXJuUEMpCiAgICAgaWYgKGZpcmVU
YXJnZXQgPT0gc19udW1iZXJPZkV4Y2VwdGlvbkZ1enpDaGVja3MpIHsKICAgICAgICAgcHJpbnRm
KCJKU0MgRVhDRVBUSU9OIEZVWlo6IFRocm93aW5nIGZ1enogZXhjZXB0aW9uIHdpdGggY2FsbCBm
cmFtZSAlcCwgc2VlbiBpbiAlcyBhbmQgcmV0dXJuIGFkZHJlc3MgJXAuXG4iLCBleGVjLCB3aGVy
ZSwgcmV0dXJuUEMpOwogICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKAotICAgICAg
ICAgICAgZXhlYywgY3JlYXRlRXJyb3IoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBBU0NJ
SUxpdGVyYWwoIkV4Y2VwdGlvbiBGdXp6IikpKTsKKyAgICAgICAgICAgIGV4ZWMsIGNyZWF0ZUVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiRXhjZXB0aW9uIEZ1enoiKSkpOwogICAgIH0KIH0KIApk
aWZmIC0tZ2l0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMu
Y3BwIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCmlu
ZGV4IDEwZmE5MzAuLjI2YzkzNWQgMTAwNjQ0Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhjZXB0aW9uSGVscGVycy5jcHAKQEAgLTc1LDExICs3NSw2IEBAIEpTT2JqZWN0KiBjcmVh
dGVTdGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBjcmVhdGVS
YW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiTWF4aW11bSBjYWxsIHN0YWNrIHNpemUgZXhj
ZWVkZWQuIikpOwogfQogCi1KU09iamVjdCogY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVJhbmdlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBBU0NJSUxpdGVyYWwoIk1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4Y2Vl
ZGVkLiIpKTsKLX0KLQogSlNPYmplY3QqIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKIHsKICAgICBpZiAoaWRlbnQu
aW1wbCgpLT5pc1N5bWJvbCgpKSB7CkBAIC0yMzksNDggKzIzNCw0NCBAQCBzdGF0aWMgU3RyaW5n
IGludmFsaWRQYXJhbWV0ZXJJbnN0YW5jZW9mU291cmNlQXBwZW5kZXIoY29uc3QgU3RyaW5nJiBv
cmlnaW5hbE1lcwogICAgIHJldHVybiBtYWtlU3RyaW5nKHJpZ2h0SGFuZFNpZGUsICIgaXMgbm90
IGEgZnVuY3Rpb24uIChldmFsdWF0aW5nICciLCBzb3VyY2VUZXh0LCAiJykiKTsKIH0KIAotSlNP
YmplY3QqIGNyZWF0ZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgRXJyb3JGYWN0b3J5IGVycm9yRmFj
dG9yeSwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFcnJvckluc3RhbmNl
OjpTb3VyY2VBcHBlbmRlciBhcHBlbmRlcikKK0pTT2JqZWN0KiBjcmVhdGVFcnJvcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXJyb3JJbnN0
YW5jZTo6U291cmNlQXBwZW5kZXIgYXBwZW5kZXIpCiB7CiAgICAgU3RyaW5nIGVycm9yTWVzc2Fn
ZSA9IG1ha2VTdHJpbmcoZXJyb3JEZXNjcmlwdGlvbkZvclZhbHVlKGV4ZWMsIHZhbHVlKS0+dmFs
dWUoZXhlYyksICcgJywgbWVzc2FnZSk7Ci0gICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IGVycm9y
RmFjdG9yeShleGVjLCBlcnJvck1lc3NhZ2UpOworICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSBj
cmVhdGVUeXBlRXJyb3IoZXhlYywgZXJyb3JNZXNzYWdlLCBhcHBlbmRlciwgcnVudGltZVR5cGVG
b3JWYWx1ZSh2YWx1ZSkpOwogICAgIEFTU0VSVChleGNlcHRpb24tPmlzRXJyb3JJbnN0YW5jZSgp
KTsKLSAgICBzdGF0aWNfY2FzdDxFcnJvckluc3RhbmNlKj4oZXhjZXB0aW9uKS0+c2V0U291cmNl
QXBwZW5kZXIoYXBwZW5kZXIpOwotICAgIHN0YXRpY19jYXN0PEVycm9ySW5zdGFuY2UqPihleGNl
cHRpb24pLT5zZXRSdW50aW1lVHlwZUZvckNhdXNlKHJ1bnRpbWVUeXBlRm9yVmFsdWUodmFsdWUp
KTsKICAgICByZXR1cm4gZXhjZXB0aW9uOwogfQogCiBKU09iamVjdCogY3JlYXRlSW52YWxpZEZ1
bmN0aW9uQXBwbHlQYXJhbWV0ZXJFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUp
CiB7Ci0gICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtYWtl
U3RyaW5nKCJzZWNvbmQgYXJndW1lbnQgdG8gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5IG11c3Qg
YmUgYW4gQXJyYXktbGlrZSBvYmplY3QiKSk7CisgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCBtYWtlU3RyaW5nKCJzZWNvbmQgYXJndW1lbnQgdG8gRnVuY3Rp
b24ucHJvdG90eXBlLmFwcGx5IG11c3QgYmUgYW4gQXJyYXktbGlrZSBvYmplY3QiKSwgZGVmYXVs
dFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVlKHZhbHVlKSk7CiAgICAgQVNTRVJU
KGV4Y2VwdGlvbi0+aXNFcnJvckluc3RhbmNlKCkpOwotICAgIHN0YXRpY19jYXN0PEVycm9ySW5z
dGFuY2UqPihleGNlcHRpb24pLT5zZXRTb3VyY2VBcHBlbmRlcihkZWZhdWx0U291cmNlQXBwZW5k
ZXIpOwotICAgIHN0YXRpY19jYXN0PEVycm9ySW5zdGFuY2UqPihleGNlcHRpb24pLT5zZXRSdW50
aW1lVHlwZUZvckNhdXNlKHJ1bnRpbWVUeXBlRm9yVmFsdWUodmFsdWUpKTsKICAgICByZXR1cm4g
ZXhjZXB0aW9uOwogfQogCiBKU09iamVjdCogY3JlYXRlSW52YWxpZEluUGFyYW1ldGVyRXJyb3Io
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVybiBjcmVhdGVFcnJv
cihleGVjLCBjcmVhdGVUeXBlRXJyb3IsIHZhbHVlLCBtYWtlU3RyaW5nKCJpcyBub3QgYW4gT2Jq
ZWN0LiIpLCBpbnZhbGlkUGFyYW1ldGVySW5Tb3VyY2VBcHBlbmRlcik7CisgICAgcmV0dXJuIGNy
ZWF0ZUVycm9yKGV4ZWMsIHZhbHVlLCBtYWtlU3RyaW5nKCJpcyBub3QgYW4gT2JqZWN0LiIpLCBp
bnZhbGlkUGFyYW1ldGVySW5Tb3VyY2VBcHBlbmRlcik7CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVJ
bnZhbGlkSW5zdGFuY2VvZlBhcmFtZXRlckVycm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2
YWx1ZSkKIHsKLSAgICByZXR1cm4gY3JlYXRlRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yLCB2
YWx1ZSwgbWFrZVN0cmluZygiaXMgbm90IGEgZnVuY3Rpb24uIiksIGludmFsaWRQYXJhbWV0ZXJJ
bnN0YW5jZW9mU291cmNlQXBwZW5kZXIpOworICAgIHJldHVybiBjcmVhdGVFcnJvcihleGVjLCB2
YWx1ZSwgbWFrZVN0cmluZygiaXMgbm90IGEgZnVuY3Rpb24uIiksIGludmFsaWRQYXJhbWV0ZXJJ
bnN0YW5jZW9mU291cmNlQXBwZW5kZXIpOwogfQogCiBKU09iamVjdCogY3JlYXRlTm90QUNvbnN0
cnVjdG9yRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewotICAgIHJldHVy
biBjcmVhdGVFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IsIHZhbHVlLCBBU0NJSUxpdGVyYWwo
ImlzIG5vdCBhIGNvbnN0cnVjdG9yIiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlcik7CisgICAgcmV0
dXJuIGNyZWF0ZUVycm9yKGV4ZWMsIHZhbHVlLCBBU0NJSUxpdGVyYWwoImlzIG5vdCBhIGNvbnN0
cnVjdG9yIiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlcik7CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVO
b3RBRnVuY3Rpb25FcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAg
cmV0dXJuIGNyZWF0ZUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvciwgdmFsdWUsIEFTQ0lJTGl0
ZXJhbCgiaXMgbm90IGEgZnVuY3Rpb24iKSwgbm90QUZ1bmN0aW9uU291cmNlQXBwZW5kZXIpOwor
ICAgIHJldHVybiBjcmVhdGVFcnJvcihleGVjLCB2YWx1ZSwgQVNDSUlMaXRlcmFsKCJpcyBub3Qg
YSBmdW5jdGlvbiIpLCBub3RBRnVuY3Rpb25Tb3VyY2VBcHBlbmRlcik7CiB9CiAKIEpTT2JqZWN0
KiBjcmVhdGVOb3RBbk9iamVjdEVycm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkK
IHsKLSAgICByZXR1cm4gY3JlYXRlRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yLCB2YWx1ZSwg
QVNDSUlMaXRlcmFsKCJpcyBub3QgYW4gb2JqZWN0IiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlcik7
CisgICAgcmV0dXJuIGNyZWF0ZUVycm9yKGV4ZWMsIHZhbHVlLCBBU0NJSUxpdGVyYWwoImlzIG5v
dCBhbiBvYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyKTsKIH0KIAogSlNPYmplY3QqIGNy
ZWF0ZUVycm9yRm9ySW52YWxpZEdsb2JhbEFzc2lnbm1lbnQoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKQEAgLTI4OCwxNCArMjc5LDkgQEAgSlNPYmplY3QqIGNy
ZWF0ZUVycm9yRm9ySW52YWxpZEdsb2JhbEFzc2lnbm1lbnQoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBTdHJpbmcmIHAKICAgICByZXR1cm4gY3JlYXRlUmVmZXJlbmNlRXJyb3IoZXhlYywgbWFrZVN0
cmluZygiU3RyaWN0IG1vZGUgZm9yYmlkcyBpbXBsaWNpdCBjcmVhdGlvbiBvZiBnbG9iYWwgcHJv
cGVydHkgJyIsIHByb3BlcnR5TmFtZSwgJ1wnJykpOwogfQogCi1KU09iamVjdCogY3JlYXRlT3V0
T2ZNZW1vcnlFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVy
biBjcmVhdGVFcnJvcihnbG9iYWxPYmplY3QsIEFTQ0lJTGl0ZXJhbCgiT3V0IG9mIG1lbW9yeSIp
KTsKLX0KLQogSlNPYmplY3QqIHRocm93T3V0T2ZNZW1vcnlFcnJvcihFeGVjU3RhdGUqIGV4ZWMp
CiB7Ci0gICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlT3V0
T2ZNZW1vcnlFcnJvcihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsKKyAgICByZXR1cm4g
ZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4
ZWMpKTsKIH0KIAogSlNPYmplY3QqIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKEV4ZWNTdGF0ZSog
ZXhlYykKZGlmZiAtLWdpdCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25I
ZWxwZXJzLmggU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5o
CmluZGV4IGJjNWRhZDEuLmQxMGQ5MWYgMTAwNjQ0Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaApAQCAtMzQsMTUgKzM0LDEzIEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCi10eXBlZGVmIEpTT2JqZWN0KiAoKkVycm9yRmFjdG9yeSkoRXhlY1N0YXRlKiwgY29u
c3QgU3RyaW5nJik7Cit0eXBlZGVmIEpTT2JqZWN0KiAoKkVycm9yRmFjdG9yeSkoRXhlY1N0YXRl
KiwgY29uc3QgU3RyaW5nJiwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIpOwogCiBKU09i
amVjdCogY3JlYXRlVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihWTSopOwogYm9vbCBpc1Rl
cm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNPYmplY3QqKTsKIEpTX0VYUE9SVF9QUklWQVRF
IGJvb2wgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKEpTVmFsdWUpOwotSlNfRVhQT1JU
X1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZUVycm9yKEV4ZWNTdGF0ZSosIEVycm9yRmFjdG9yeSwg
SlNWYWx1ZSwgY29uc3QgU3RyaW5nJiwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIpOwor
SlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZUVycm9yKEV4ZWNTdGF0ZSosIEpTVmFs
dWUsIGNvbnN0IFN0cmluZyYsIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyKTsKIEpTX0VY
UE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRl
Kik7Ci1KU09iamVjdCogY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKEpTR2xvYmFsT2JqZWN0Kik7
Ci1KU09iamVjdCogY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihKU0dsb2JhbE9iamVjdCopOwogSlNP
YmplY3QqIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYpOwogSlNPYmplY3QqIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoRXhlY1N0YXRlKiwg
SlNWYWx1ZSk7CiBKU09iamVjdCogY3JlYXRlSW52YWxpZEZ1bmN0aW9uQXBwbHlQYXJhbWV0ZXJF
cnJvcihFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKZGlmZiAtLWdpdCBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAKaW5kZXggZjU1NDcxZS4u
NDFhZmJlMSAxMDA2NDQKLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlC
dWZmZXJDb25zdHJ1Y3Rvci5jcHAKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAKQEAgLTkyLDcgKzkyLDcgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBl
eGVjKQogICAgIAogICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQXJyYXlCdWZmZXI6
OmNyZWF0ZShsZW5ndGgsIDEpOwogICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoY29uc3RydWN0b3ItPmdsb2Jh
bE9iamVjdCgpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlT3V0
T2ZNZW1vcnlFcnJvcihleGVjKSk7CiAgICAgCiAgICAgSlNBcnJheUJ1ZmZlciogcmVzdWx0ID0g
SlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKAogICAgICAgICBleGVjLT52bSgpLCBjb25zdHJ1Y3Rvci0+
Z2xvYmFsT2JqZWN0KCktPmFycmF5QnVmZmVyU3RydWN0dXJlKCksIGJ1ZmZlcik7CmRpZmYgLS1n
aXQgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5j
cHAgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5j
cHAKaW5kZXggOGYzZDY2OS4uZWY2NTBmNiAxMDA2NDQKLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcApAQCAtNjAsNyArNjAsNyBA
QCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUJ1ZmZlclByb3RvRnVu
Y1NsaWNlKEV4ZWNTdGF0ZSogZXhlYykKICAgICAKICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IG5l
d0J1ZmZlciA9IHRoaXNPYmplY3QtPmltcGwoKS0+c2xpY2UoYmVnaW4sIGVuZCk7CiAgICAgaWYg
KCFuZXdCdWZmZXIpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlT3V0
T2ZNZW1vcnlFcnJvcihjYWxsZWUtPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CiAgICAgCiAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjYWxsZWUtPmdsb2JhbE9iamVjdCgpLT5hcnJheUJ1
ZmZlclN0cnVjdHVyZSgpOwogICAgIApkaWZmIC0tZ2l0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCmluZGV4IDQwMWI4
ZGEuLjkzOTQzMWYgMTAwNjQ0Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKQEAgLTQ5LDcgKzQ5LDcgQEAg
SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+OjpjcmVhdGUoCiB7CiAgICAgQ29uc3RydWN0aW9uQ29udGV4dCBjb250ZXh0KGV4
ZWMtPnZtKCksIHN0cnVjdHVyZSwgbGVuZ3RoLCBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlw
ZSkpOwogICAgIGlmICghY29udGV4dCkgewotICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0
aW9uKGV4ZWMsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3Ioc3RydWN0dXJlLT5nbG9iYWxPYmplY3Qo
KSkpOworICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU91dE9m
TWVtb3J5RXJyb3IoZXhlYykpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CkBAIC02Nyw3ICs2Nyw3IEBAIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6
Y3JlYXRlVW5pbml0CiAgICAgICAgIGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgbGVuZ3RoLCBzaXpl
b2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSksCiAgICAgICAgIENvbnN0cnVjdGlvbkNvbnRleHQ6
OkRvbnRJbml0aWFsaXplKTsKICAgICBpZiAoIWNvbnRleHQpIHsKLSAgICAgICAgZXhlYy0+dm0o
KS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKHN0cnVjdHVyZS0+
Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVj
LCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiByZXN1bHQgPQpkaWZmIC0tZ2l0IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwCmluZGV4
IDUxMTk5YjIuLjNmYjU4YTMgMTAwNjQ0Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKQEAgLTY1LDEwICs2NSw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50ZXJwcmV0ZXI6OmNvbnN0cnVjdFdpdGhOYXRpdmVF
cnJvckNvbnN0cnVjdG9yKEV4CiAgICAgSlNWYWx1ZSBtZXNzYWdlID0gZXhlYy0+YXJndW1lbnQo
MCk7CiAgICAgU3RydWN0dXJlKiBlcnJvclN0cnVjdHVyZSA9IHN0YXRpY19jYXN0PE5hdGl2ZUVy
cm9yQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSktPmVycm9yU3RydWN0dXJlKCk7CiAgICAg
QVNTRVJUKGVycm9yU3RydWN0dXJlKTsKLSAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFj
ZTsKLSAgICBleGVjLT52bSgpLmludGVycHJldGVyLT5nZXRTdGFja1RyYWNlKHN0YWNrVHJhY2Us
IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOwotICAgIHN0YWNrVHJhY2UucmVt
b3ZlKDApOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoRXJyb3JJbnN0YW5jZTo6Y3JlYXRl
KGV4ZWMsIGVycm9yU3RydWN0dXJlLCBtZXNzYWdlLCBzdGFja1RyYWNlKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1
cmUsIG1lc3NhZ2UsIG51bGxwdHIsIFR5cGVOb3RoaW5nLCBmYWxzZSkpOwogfQogCiBDb25zdHJ1
Y3RUeXBlIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwg
Q29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKQEAgLTgxLDEwICs3OCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50ZXJwcmV0ZXI6OmNhbGxOYXRpdmVFcnJvckNvbnN0cnVj
dG9yKEV4ZWNTdGF0ZSoKIHsKICAgICBKU1ZhbHVlIG1lc3NhZ2UgPSBleGVjLT5hcmd1bWVudCgw
KTsKICAgICBTdHJ1Y3R1cmUqIGVycm9yU3RydWN0dXJlID0gc3RhdGljX2Nhc3Q8TmF0aXZlRXJy
b3JDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKS0+ZXJyb3JTdHJ1Y3R1cmUoKTsKLSAgICBW
ZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsKLSAgICBleGVjLT52bSgpLmludGVycHJldGVy
LT5nZXRTdGFja1RyYWNlKHN0YWNrVHJhY2UsIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6
bWF4KCkpOwotICAgIHN0YWNrVHJhY2UucmVtb3ZlKDApOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsIGVycm9yU3RydWN0dXJlLCBtZXNzYWdl
LCBzdGFja1RyYWNlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShFcnJvckluc3RhbmNl
OjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1cmUsIG1lc3NhZ2UsIG51bGxwdHIsIFR5cGVOb3Ro
aW5nLCBmYWxzZSkpOwogfQogCiBDYWxsVHlwZSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yOjpnZXRD
YWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCmRpZmYgLS1naXQgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAppbmRleCBlNzYzOTQ3Li42MWU0NTgyIDEwMDY0NAotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAKQEAgLTU0MCw5OCArNTQwLDYgQEAgdm9pZCBWTTo6cmVsZWFzZUV4ZWN1dGFibGVNZW1v
cnkoKQogICAgIGhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsKIH0KIAotc3RhdGljIHZvaWQgYXBw
ZW5kU291cmNlVG9FcnJvcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRXJyb3JJbnN0YW5jZSogZXhj
ZXB0aW9uLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKLXsKLSAgICBFcnJvckluc3RhbmNlOjpT
b3VyY2VBcHBlbmRlciBhcHBlbmRlciA9IGV4Y2VwdGlvbi0+c291cmNlQXBwZW5kZXIoKTsKLSAg
ICBleGNlcHRpb24tPmNsZWFyU291cmNlQXBwZW5kZXIoKTsKLSAgICBSdW50aW1lVHlwZSB0eXBl
ID0gZXhjZXB0aW9uLT5ydW50aW1lVHlwZUZvckNhdXNlKCk7Ci0gICAgZXhjZXB0aW9uLT5jbGVh
clJ1bnRpbWVUeXBlRm9yQ2F1c2UoKTsKLSAgICAKLSAgICBpZiAoIWNhbGxGcmFtZS0+Y29kZUJs
b2NrKCktPmhhc0V4cHJlc3Npb25JbmZvKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBp
bnQgc3RhcnRPZmZzZXQgPSAwOwotICAgIGludCBlbmRPZmZzZXQgPSAwOwotICAgIGludCBkaXZv
dFBvaW50ID0gMDsKLSAgICB1bnNpZ25lZCBsaW5lID0gMDsKLSAgICB1bnNpZ25lZCBjb2x1bW4g
PSAwOwotICAgIAotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKTsKLSAgICBjb2RlQmxvY2stPmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5
dGVjb2RlT2Zmc2V0LCBkaXZvdFBvaW50LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBj
b2x1bW4pOwotICAgIAotICAgIGludCBleHByZXNzaW9uU3RhcnQgPSBkaXZvdFBvaW50IC0gc3Rh
cnRPZmZzZXQ7Ci0gICAgaW50IGV4cHJlc3Npb25TdG9wID0gZGl2b3RQb2ludCArIGVuZE9mZnNl
dDsKLSAgICAKLSAgICBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZyA9IGNvZGVCbG9jay0+c291
cmNlKCktPnNvdXJjZSgpOwotICAgIGlmICghZXhwcmVzc2lvblN0b3AgfHwgZXhwcmVzc2lvblN0
YXJ0ID4gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VTdHJpbmcubGVuZ3RoKCkpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgVk0qIHZtID0gJmNhbGxGcmFtZS0+dm0oKTsKLSAgICBKU1ZhbHVl
IGpzTWVzc2FnZSA9IGV4Y2VwdGlvbi0+Z2V0RGlyZWN0KCp2bSwgdm0tPnByb3BlcnR5TmFtZXMt
Pm1lc3NhZ2UpOwotICAgIGlmICghanNNZXNzYWdlIHx8ICFqc01lc3NhZ2UuaXNTdHJpbmcoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFN0cmluZyBtZXNzYWdlID0gYXNTdHJpbmcoanNN
ZXNzYWdlKS0+dmFsdWUoY2FsbEZyYW1lKTsKLSAgICAKLSAgICBpZiAoZXhwcmVzc2lvblN0YXJ0
IDwgZXhwcmVzc2lvblN0b3ApCi0gICAgICAgIG1lc3NhZ2UgPSBhcHBlbmRlcihtZXNzYWdlLCBj
b2RlQmxvY2stPnNvdXJjZSgpLT5nZXRSYW5nZShleHByZXNzaW9uU3RhcnQsIGV4cHJlc3Npb25T
dG9wKSwgdHlwZSwgRXJyb3JJbnN0YW5jZTo6Rm91bmRFeGFjdFNvdXJjZSk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIC8vIE5vIHJhbmdlIGluZm9ybWF0aW9uLCBzbyBnaXZlIGEgZmV3IGNoYXJhY3Rl
cnMgb2YgY29udGV4dC4KLSAgICAgICAgY29uc3QgU3RyaW5nSW1wbCogZGF0YSA9IHNvdXJjZVN0
cmluZy5pbXBsKCk7Ci0gICAgICAgIGludCBkYXRhTGVuZ3RoID0gc291cmNlU3RyaW5nLmxlbmd0
aCgpOwotICAgICAgICBpbnQgc3RhcnQgPSBleHByZXNzaW9uU3RhcnQ7Ci0gICAgICAgIGludCBz
dG9wID0gZXhwcmVzc2lvblN0YXJ0OwotICAgICAgICAvLyBHZXQgdXAgdG8gMjAgY2hhcmFjdGVy
cyBvZiBjb250ZXh0IHRvIHRoZSBsZWZ0IGFuZCByaWdodCBvZiB0aGUgZGl2b3QsIGNsYW1waW5n
IHRvIHRoZSBsaW5lLgotICAgICAgICAvLyBUaGVuIHN0cmlwIHdoaXRlc3BhY2UuCi0gICAgICAg
IHdoaWxlIChzdGFydCA+IDAgJiYgKGV4cHJlc3Npb25TdGFydCAtIHN0YXJ0IDwgMjApICYmICgq
ZGF0YSlbc3RhcnQgLSAxXSAhPSAnXG4nKQotICAgICAgICAgICAgc3RhcnQtLTsKLSAgICAgICAg
d2hpbGUgKHN0YXJ0IDwgKGV4cHJlc3Npb25TdGFydCAtIDEpICYmIGlzU3RyV2hpdGVTcGFjZSgo
KmRhdGEpW3N0YXJ0XSkpCi0gICAgICAgICAgICBzdGFydCsrOwotICAgICAgICB3aGlsZSAoc3Rv
cCA8IGRhdGFMZW5ndGggJiYgKHN0b3AgLSBleHByZXNzaW9uU3RhcnQgPCAyMCkgJiYgKCpkYXRh
KVtzdG9wXSAhPSAnXG4nKQotICAgICAgICAgICAgc3RvcCsrOwotICAgICAgICB3aGlsZSAoc3Rv
cCA+IGV4cHJlc3Npb25TdGFydCAmJiBpc1N0cldoaXRlU3BhY2UoKCpkYXRhKVtzdG9wIC0gMV0p
KQotICAgICAgICAgICAgc3RvcC0tOwotICAgICAgICBtZXNzYWdlID0gYXBwZW5kZXIobWVzc2Fn
ZSwgY29kZUJsb2NrLT5zb3VyY2UoKS0+Z2V0UmFuZ2Uoc3RhcnQsIHN0b3ApLCB0eXBlLCBFcnJv
ckluc3RhbmNlOjpGb3VuZEFwcHJveGltYXRlU291cmNlKTsKLSAgICB9Ci0gICAgCi0gICAgZXhj
ZXB0aW9uLT5wdXREaXJlY3QoKnZtLCB2bS0+cHJvcGVydHlOYW1lcy0+bWVzc2FnZSwganNTdHJp
bmcodm0sIG1lc3NhZ2UpKTsKLX0KLQotY2xhc3MgRmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29k
ZWJsb2NrRnVuY3RvciB7Ci1wdWJsaWM6Ci0gICAgRmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29k
ZWJsb2NrRnVuY3RvcihDYWxsRnJhbWUqIHN0YXJ0Q2FsbEZyYW1lKQotICAgICAgICA6IG1fc3Rh
cnRDYWxsRnJhbWUoc3RhcnRDYWxsRnJhbWUpCi0gICAgICAgICwgbV9mb3VuZENhbGxGcmFtZShu
dWxscHRyKQotICAgICAgICAsIG1fZm91bmRTdGFydENhbGxGcmFtZShmYWxzZSkKLSAgICAgICAg
LCBtX2luZGV4KDApCi0gICAgeyB9Ci0KLSAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRv
cigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIGlmICghbV9mb3VuZFN0
YXJ0Q2FsbEZyYW1lICYmICh2aXNpdG9yLT5jYWxsRnJhbWUoKSA9PSBtX3N0YXJ0Q2FsbEZyYW1l
KSkKLSAgICAgICAgICAgIG1fZm91bmRTdGFydENhbGxGcmFtZSA9IHRydWU7Ci0KLSAgICAgICAg
aWYgKG1fZm91bmRTdGFydENhbGxGcmFtZSkgewotICAgICAgICAgICAgaWYgKHZpc2l0b3ItPmNh
bGxGcmFtZSgpLT5jb2RlQmxvY2soKSkgewotICAgICAgICAgICAgICAgIG1fZm91bmRDYWxsRnJh
bWUgPSB2aXNpdG9yLT5jYWxsRnJhbWUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gU3RhY2tW
aXNpdG9yOjpEb25lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9pbmRleCsrOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7Ci0gICAgfQot
Ci0gICAgQ2FsbEZyYW1lKiBmb3VuZENhbGxGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm91bmRD
YWxsRnJhbWU7IH0KLSAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7
IH0KLQotcHJpdmF0ZToKLSAgICBDYWxsRnJhbWUqIG1fc3RhcnRDYWxsRnJhbWU7Ci0gICAgQ2Fs
bEZyYW1lKiBtX2ZvdW5kQ2FsbEZyYW1lOwotICAgIGJvb2wgbV9mb3VuZFN0YXJ0Q2FsbEZyYW1l
OwotICAgIHVuc2lnbmVkIG1faW5kZXg7Ci19OwotCiBKU1ZhbHVlIFZNOjp0aHJvd0V4Y2VwdGlv
bihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZXJyb3IpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmJy
ZWFrT25UaHJvdygpKSB7CkBAIC02NDUsNDQgKzU1Myw3IEBAIEpTVmFsdWUgVk06OnRocm93RXhj
ZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBlcnJvcikKICAgICBpbnRlcnByZXRlci0+
Z2V0U3RhY2tUcmFjZShzdGFja1RyYWNlKTsKICAgICBtX2V4Y2VwdGlvblN0YWNrID0gUmVmQ291
bnRlZEFycmF5PFN0YWNrRnJhbWU+KHN0YWNrVHJhY2UpOwogICAgIG1fZXhjZXB0aW9uID0gZXJy
b3I7Ci0gICAgCi0gICAgaWYgKHN0YWNrVHJhY2UuaXNFbXB0eSgpIHx8ICFlcnJvci5pc09iamVj
dCgpKQotICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IGFz
T2JqZWN0KGVycm9yKTsKLSAgICAKLSAgICBTdGFja0ZyYW1lIHN0YWNrRnJhbWU7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMCA7IGkgPCBzdGFja1RyYWNlLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IHN0YWNrRnJhbWUgPSBzdGFja1RyYWNlLmF0KGkpOwotICAgICAgICBpZiAoc3RhY2tGcmFtZS5i
eXRlY29kZU9mZnNldCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoIWhhc0Vy
cm9ySW5mbyhleGVjLCBleGNlcHRpb24pKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
b25seSByZWFsbHkgYmUgYWRkaW5nIHRoZXNlIHByb3BlcnRpZXMgdG8gVk0gZ2VuZXJhdGVkIGV4
Y2VwdGlvbnMsCi0gICAgICAgIC8vIGJ1dCB0aGUgaW5zcGVjdG9yIGN1cnJlbnRseSByZXF1aXJl
cyB0aGVzZSBmb3IgYWxsIHRocm93biBvYmplY3RzLgotICAgICAgICB1bnNpZ25lZCBsaW5lOwot
ICAgICAgICB1bnNpZ25lZCBjb2x1bW47Ci0gICAgICAgIHN0YWNrRnJhbWUuY29tcHV0ZUxpbmVB
bmRDb2x1bW4obGluZSwgY29sdW1uKTsKLSAgICAgICAgZXhjZXB0aW9uLT5wdXREaXJlY3QoKnRo
aXMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodGhpcywgImxpbmUiKSwganNOdW1iZXIobGluZSks
IFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7Ci0gICAgICAgIGV4Y2VwdGlvbi0+cHV0RGlyZWN0KCp0
aGlzLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHRoaXMsICJjb2x1bW4iKSwganNOdW1iZXIoY29s
dW1uKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKLSAgICAgICAgaWYgKCFzdGFja0ZyYW1lLnNv
dXJjZVVSTC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBleGNlcHRpb24tPnB1dERpcmVjdCgqdGhp
cywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh0aGlzLCAic291cmNlVVJMIiksIGpzU3RyaW5nKHRo
aXMsIHN0YWNrRnJhbWUuc291cmNlVVJMKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKLSAgICB9
Ci0gICAgaWYgKGV4Y2VwdGlvbi0+aXNFcnJvckluc3RhbmNlKCkgJiYgc3RhdGljX2Nhc3Q8RXJy
b3JJbnN0YW5jZSo+KGV4Y2VwdGlvbiktPmhhc1NvdXJjZUFwcGVuZGVyKCkpIHsKLSAgICAgICAg
RmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3RvciBmdW5jdG9yKGV4ZWMpOwot
ICAgICAgICB0b3BDYWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rvcik7Ci0gICAgICAgIENhbGxGcmFt
ZSogY2FsbEZyYW1lID0gZnVuY3Rvci5mb3VuZENhbGxGcmFtZSgpOwotICAgICAgICB1bnNpZ25l
ZCBzdGFja0luZGV4ID0gZnVuY3Rvci5pbmRleCgpOwotCi0gICAgICAgIGlmIChjYWxsRnJhbWUg
JiYgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSkgewotICAgICAgICAgICAgc3RhY2tGcmFtZSA9IHN0
YWNrVHJhY2UuYXQoc3RhY2tJbmRleCk7Ci0gICAgICAgICAgICBhcHBlbmRTb3VyY2VUb0Vycm9y
KGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8RXJyb3JJbnN0YW5jZSo+KGV4Y2VwdGlvbiksIHN0YWNr
RnJhbWUuYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICB9Ci0gICAgfQogCi0gICAgaWYgKGV4Y2Vw
dGlvbi0+aGFzUHJvcGVydHkoZXhlYywgdGhpcy0+cHJvcGVydHlOYW1lcy0+c3RhY2spKQotICAg
ICAgICByZXR1cm4gZXJyb3I7Ci0gICAgCi0gICAgZXhjZXB0aW9uLT5wdXREaXJlY3QoKnRoaXMs
IHByb3BlcnR5TmFtZXMtPnN0YWNrLCBpbnRlcnByZXRlci0+c3RhY2tUcmFjZUFzU3RyaW5nKHRv
cENhbGxGcmFtZSwgc3RhY2tUcmFjZSksIERvbnRFbnVtKTsKICAgICByZXR1cm4gZXJyb3I7CiB9
CiAgICAgCi0tIAoyLjEuMSAoQXBwbGUgR2l0LTUxKQoK
</data>
<flag name="review"
          id="274698"
          type_id="1"
          status="-"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="274699"
          type_id="3"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250093</attachid>
            <date>2015-04-03 12:54:31 -0700</date>
            <delta_ts>2015-04-06 16:21:14 -0700</delta_ts>
            <desc>patch.</desc>
            <filename>0001-Source-and-stack-information-should-get-appended-onl.patch</filename>
            <type>text/plain</type>
            <size>71483</size>
            <attacher name="Matthew Mirman">mmirman</attacher>
            
              <data encoding="base64">RnJvbSBkZmEyMjVhNzY3ZGZmNTYzMGRkNDQ3MWUxNzZhMGNkZWMyMTYxMjBmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXR0aGV3IE1pcm1hbiA8bW1pcm1hbkBhcHBsZS5jb20+CkRh
dGU6IEZyaSwgMyBBcHIgMjAxNSAxMjo0OTozNyAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIFNvdXJj
ZSBhbmQgc3RhY2sgaW5mb3JtYXRpb24gc2hvdWxkIGdldCBhcHBlbmRlZCBvbmx5IHRvCiBuYXRp
dmUgZXJyb3IgY29uc3RydWN0b3JzIGFuZCBzaG91bGQgYmUgYWRkZWQgYXQgY29uc3RydWN0aW9u
IHRpbWUgcmF0aGVyCiB0aGFuIHdoZW4gdGhyb3duLiByZGFyOi8vcHJvYmxlbS8xOTkyNzI5Mwog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTg3MQoKUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCgpTb3VyY2UvSmF2YVNjcmlwdENvcmU6CgoqIGludGVycHJldGVy
L0ludGVycHJldGVyLmNwcDoKKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgoqIGludGVycHJl
dGVyL0ludGVycHJldGVyLmg6CiogcGFyc2VyL1BhcnNlckVycm9yLmg6CihKU0M6OlBhcnNlckVy
cm9yOjp0b0Vycm9yT2JqZWN0KToKKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmg6CiogcnVu
dGltZS9FcnJvci5jcHA6CihKU0M6OmNyZWF0ZUVycm9yKToKKEpTQzo6Y3JlYXRlRXZhbEVycm9y
KToKKEpTQzo6Y3JlYXRlUmFuZ2VFcnJvcik6CihKU0M6OmNyZWF0ZVJlZmVyZW5jZUVycm9yKToK
KEpTQzo6Y3JlYXRlU3ludGF4RXJyb3IpOgooSlNDOjpjcmVhdGVUeXBlRXJyb3IpOgooSlNDOjpj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcik6CihKU0M6OmNyZWF0ZVVSSUVycm9yKToKKEpT
Qzo6Y3JlYXRlT3V0T2ZNZW1vcnlFcnJvcik6CihKU0M6OkZpbmRGaXJzdENhbGxlckZyYW1lV2l0
aENvZGVibG9ja0Z1bmN0b3I6OkZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0
b3IpOgooSlNDOjpGaW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yOjpvcGVy
YXRvcigpKToKKEpTQzo6RmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3Rvcjo6
Zm91bmRDYWxsRnJhbWUpOgooSlNDOjpGaW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tG
dW5jdG9yOjppbmRleCk6CihKU0M6OmFkZEVycm9ySW5mb0FuZEdldEJ5dGVjb2RlT2Zmc2V0KToK
KEpTQzo6YWRkRXJyb3JJbmZvKToKKiBydW50aW1lL0Vycm9yLmg6CiogcnVudGltZS9FcnJvckNv
bnN0cnVjdG9yLmNwcDoKKEpTQzo6SW50ZXJwcmV0ZXI6OmNvbnN0cnVjdFdpdGhFcnJvckNvbnN0
cnVjdG9yKToKKEpTQzo6SW50ZXJwcmV0ZXI6OmNhbGxFcnJvckNvbnN0cnVjdG9yKToKKiBydW50
aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgooSlNDOjphcHBlbmRTb3VyY2VUb0Vycm9yKToKKEpTQzo6
RmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3Rvcjo6RmluZEZpcnN0Q2FsbGVy
RnJhbWVXaXRoQ29kZWJsb2NrRnVuY3Rvcik6CihKU0M6OkZpbmRGaXJzdENhbGxlckZyYW1lV2l0
aENvZGVibG9ja0Z1bmN0b3I6Om9wZXJhdG9yKCkpOgooSlNDOjpGaW5kRmlyc3RDYWxsZXJGcmFt
ZVdpdGhDb2RlYmxvY2tGdW5jdG9yOjpmb3VuZENhbGxGcmFtZSk6CihKU0M6OkZpbmRGaXJzdENh
bGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3I6OmluZGV4KToKKEpTQzo6YWRkRXJyb3JJbmZv
QW5kR2V0Qnl0ZWNvZGVPZmZzZXQpOgooSlNDOjpFcnJvckluc3RhbmNlOjpmaW5pc2hDcmVhdGlv
bik6CiogcnVudGltZS9FcnJvckluc3RhbmNlLmg6CihKU0M6OkVycm9ySW5zdGFuY2U6OmNyZWF0
ZSk6CiogcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHA6CihKU0M6OkVycm9yUHJvdG90eXBlOjpm
aW5pc2hDcmVhdGlvbik6CiogcnVudGltZS9FeGNlcHRpb25GdXp6LmNwcDoKKEpTQzo6ZG9FeGNl
cHRpb25GdXp6aW5nKToKKiBydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwOgooSlNDOjpjcmVh
dGVFcnJvcik6CihKU0M6OmNyZWF0ZUludmFsaWRGdW5jdGlvbkFwcGx5UGFyYW1ldGVyRXJyb3Ip
OgooSlNDOjpjcmVhdGVJbnZhbGlkSW5QYXJhbWV0ZXJFcnJvcik6CihKU0M6OmNyZWF0ZUludmFs
aWRJbnN0YW5jZW9mUGFyYW1ldGVyRXJyb3IpOgooSlNDOjpjcmVhdGVOb3RBQ29uc3RydWN0b3JF
cnJvcik6CihKU0M6OmNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKToKKEpTQzo6Y3JlYXRlTm90QW5P
YmplY3RFcnJvcik6CihKU0M6OnRocm93T3V0T2ZNZW1vcnlFcnJvcik6CihKU0M6OmNyZWF0ZVN0
YWNrT3ZlcmZsb3dFcnJvcik6IERlbGV0ZWQuCihKU0M6OmNyZWF0ZU91dE9mTWVtb3J5RXJyb3Ip
OiBEZWxldGVkLgoqIHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oOgoqIHJ1bnRpbWUvSlNBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yLmNwcDoKKEpTQzo6Y29uc3RydWN0QXJyYXlCdWZmZXIpOgoqIHJ1
bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHA6CihKU0M6OmFycmF5QnVmZmVyUHJvdG9G
dW5jU2xpY2UpOgoqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmg6CihK
U0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUpOgooSlNDOjpKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlVW5pbml0aWFsaXplZCk6CiogcnVu
dGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcDoKKEpTQzo6SW50ZXJwcmV0ZXI6OmNvbnN0
cnVjdFdpdGhOYXRpdmVFcnJvckNvbnN0cnVjdG9yKToKKEpTQzo6SW50ZXJwcmV0ZXI6OmNhbGxO
YXRpdmVFcnJvckNvbnN0cnVjdG9yKToKKiBydW50aW1lL1ZNLmNwcDoKKEpTQzo6Vk06OnRocm93
RXhjZXB0aW9uKToKKEpTQzo6YXBwZW5kU291cmNlVG9FcnJvcik6IERlbGV0ZWQuCihKU0M6OkZp
bmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3I6OkZpbmRGaXJzdENhbGxlckZy
YW1lV2l0aENvZGVibG9ja0Z1bmN0b3IpOiBEZWxldGVkLgooSlNDOjpGaW5kRmlyc3RDYWxsZXJG
cmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yOjpvcGVyYXRvcigpKTogRGVsZXRlZC4KKEpTQzo6Rmlu
ZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3Rvcjo6Zm91bmRDYWxsRnJhbWUpOiBE
ZWxldGVkLgooSlNDOjpGaW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yOjpp
bmRleCk6IERlbGV0ZWQuCgpTb3VyY2UvV2ViQ29yZToKCkNvdmVyZWQgYnkgZXhpc3RpbmcgdGVz
dHMuCgoqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6CihXZWJDb3JlOjpzZXRET01FeGNl
cHRpb24pOgoKTGF5b3V0VGVzdHM6CgoqIGh0dHAvdGVzdHMvdzNjL3Jlc291cmNlcy90ZXN0aGFy
bmVzcy5qczoKKiBqcy9kb20vZXhjZXB0aW9uLWxpbmVudW1zLWluLWh0bWwtMS5odG1sOgoqIGpz
L2RvbS9leGNlcHRpb24tbGluZW51bXMtaW4taHRtbC0yLmh0bWw6CioganMvZG9tL2V4Y2VwdGlv
bi1saW5lbnVtcy1pbi1odG1sLTMuaHRtbDoKKiBqcy9kb20vc2NyaXB0LXRlc3RzL3N0YWNrLXRy
YWNlLmpzOgoodGhyb3dFcnJvcik6CihoKToKKGlubGluZWFibGVUaHJvdyk6CihkZmdUaGluZy5n
ZXQgd2lsbFRocm93KToKKGRmZ1RoaW5nLndpbGxUaHJvd0Z1bmMpOgoqIGpzL2RvbS9zdGFjay10
cmFjZS1leHBlY3RlZC50eHQ6CioganMvZXhjZXB0aW9uLXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0
OgoqIGpzL3NjcmlwdC10ZXN0cy9leGNlcHRpb24tbGluZW51bXMuanM6CihleGNlcHRpb25JbkZ1
bmN0aW9uKToKKGZpcnN0UHJvcElzR2V0dGVyLmdldCBnZXR0ZXIpOgooc2Vjb25kUHJvcElzR2V0
dGVyLmdldCBnZXR0ZXIpOgooZmlyc3RQcm9wSXNTZXR0ZXIuc2V0IHNldHRlcik6CihzZWNvbmRQ
cm9wSXNTZXR0ZXIuc2V0IHNldHRlcik6CioganMvc2NyaXB0LXRlc3RzL2V4Y2VwdGlvbi1wcm9w
ZXJ0aWVzLmpzOgoqIHBsYXRmb3JtL21hYy9odHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9t
ZWRpYXNvdXJjZS1hZGRzb3VyY2VidWZmZXItZXhwZWN0ZWQudHh0OgoqIHBsYXRmb3JtL21hYy9o
dHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1zb3VyY2VidWZmZXItbW9k
ZS1leHBlY3RlZC50eHQ6CgpkaWZmIC0tZ2l0IExheW91dFRlc3RzL0NoYW5nZUxvZyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggZmQxMzdlZi4uZDc3MTlmYSAxMDA2NDQKLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZworKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAK
KzIwMTUtMDQtMDMgIE1hdHRoZXcgTWlybWFuICA8bW1pcm1hbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgU291cmNlIGFuZCBzdGFjayBpbmZvcm1hdGlvbiBzaG91bGQgZ2V0IGFwcGVuZGVkIG9ubHkg
dG8gbmF0aXZlIGVycm9yIGNvbnN0cnVjdG9ycworICAgICAgICBhbmQgc2hvdWxkIGJlIGFkZGVk
IGF0IGNvbnN0cnVjdGlvbiB0aW1lIHJhdGhlciB0aGFuIHdoZW4gdGhyb3duLgorICAgICAgICBy
ZGFyOi8vcHJvYmxlbS8xOTkyNzI5MworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQxODcxCisgICAgICAgIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0dHAvdGVzdHMvdzNjL3Jlc291cmNlcy90ZXN0aGFy
bmVzcy5qczoKKyAgICAgICAgKiBqcy9kb20vZXhjZXB0aW9uLWxpbmVudW1zLWluLWh0bWwtMS5o
dG1sOgorICAgICAgICAqIGpzL2RvbS9leGNlcHRpb24tbGluZW51bXMtaW4taHRtbC0yLmh0bWw6
CisgICAgICAgICoganMvZG9tL2V4Y2VwdGlvbi1saW5lbnVtcy1pbi1odG1sLTMuaHRtbDoKKyAg
ICAgICAgKiBqcy9kb20vc2NyaXB0LXRlc3RzL3N0YWNrLXRyYWNlLmpzOgorICAgICAgICAodGhy
b3dFcnJvcik6CisgICAgICAgIChoKToKKyAgICAgICAgKGlubGluZWFibGVUaHJvdyk6CisgICAg
ICAgIChkZmdUaGluZy5nZXQgd2lsbFRocm93KToKKyAgICAgICAgKGRmZ1RoaW5nLndpbGxUaHJv
d0Z1bmMpOgorICAgICAgICAqIGpzL2RvbS9zdGFjay10cmFjZS1leHBlY3RlZC50eHQ6CisgICAg
ICAgICoganMvZXhjZXB0aW9uLXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGpz
L3NjcmlwdC10ZXN0cy9leGNlcHRpb24tbGluZW51bXMuanM6CisgICAgICAgIChleGNlcHRpb25J
bkZ1bmN0aW9uKToKKyAgICAgICAgKGZpcnN0UHJvcElzR2V0dGVyLmdldCBnZXR0ZXIpOgorICAg
ICAgICAoc2Vjb25kUHJvcElzR2V0dGVyLmdldCBnZXR0ZXIpOgorICAgICAgICAoZmlyc3RQcm9w
SXNTZXR0ZXIuc2V0IHNldHRlcik6CisgICAgICAgIChzZWNvbmRQcm9wSXNTZXR0ZXIuc2V0IHNl
dHRlcik6CisgICAgICAgICoganMvc2NyaXB0LXRlc3RzL2V4Y2VwdGlvbi1wcm9wZXJ0aWVzLmpz
OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9odHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9t
ZWRpYXNvdXJjZS1hZGRzb3VyY2VidWZmZXItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9odHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1zb3VyY2Vi
dWZmZXItbW9kZS1leHBlY3RlZC50eHQ6CisKIDIwMTUtMDQtMDMgIEFsZXhleSBQcm9za3VyeWFr
b3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUmUtc2tpcCB0ZXN0cyB0aGF0IGdvdCByZWNl
bnRseSBlbmFibGVkLCBidXQgdGltZSBvdXQuCmRpZmYgLS1naXQgTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy93M2MvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
dzNjL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcwppbmRleCA1OGU2NmM5Li4yNzI4ZTIyIDEwMDY0
NAotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93M2MvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpz
CisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3czYy9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMK
QEAgLTIwNjQsNiArMjA2NCw4IEBAIHBvbGljaWVzIGFuZCBjb250cmlidXRpb24gZm9ybXMgWzNd
LgogCiAgICAgZnVuY3Rpb24gQXNzZXJ0aW9uRXJyb3IobWVzc2FnZSkKICAgICB7CisgICAgICAg
IHZhciBlID0gbmV3IEVycm9yKCk7CisgICAgICAgIHRoaXMuc3RhY2sgPSBlLnN0YWNrLnN1YnN0
cmluZyhlLnN0YWNrLmluZGV4T2YoJ1xuJykrMSwgZS5zdGFjay5sZW5ndGgpOwogICAgICAgICB0
aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwogICAgIH0KIApkaWZmIC0tZ2l0IExheW91dFRlc3RzL2pz
L2RvbS9leGNlcHRpb24tbGluZW51bXMtaW4taHRtbC0xLmh0bWwgTGF5b3V0VGVzdHMvanMvZG9t
L2V4Y2VwdGlvbi1saW5lbnVtcy1pbi1odG1sLTEuaHRtbAppbmRleCAzYjdkN2M5Li4wNzljNzJh
IDEwMDY0NAotLS0gTGF5b3V0VGVzdHMvanMvZG9tL2V4Y2VwdGlvbi1saW5lbnVtcy1pbi1odG1s
LTEuaHRtbAorKysgTGF5b3V0VGVzdHMvanMvZG9tL2V4Y2VwdGlvbi1saW5lbnVtcy1pbi1odG1s
LTEuaHRtbApAQCAtOCw3ICs4LDcgQEAgZGVzY3JpcHRpb24oJ1RoaXMgdGVzdCBleGVyY2lzZXMg
dGhlIHNvdXJjZSBVUkwgYW5kIGxpbmUgbnVtYmVyIHRoYXQgaXMgZW1iZWRkZWQKIAogZnVuY3Rp
b24gZXhjZXB0aW9uSW5GdW5jdGlvbigpCiB7Ci0gICAgdGhyb3cgRXhjZXB0aW9uKCk7CisgICAg
dGhyb3cgbmV3IEVycm9yKCk7CiB9CiAKIHZhciBlID0gdW5kZWZpbmVkOwpkaWZmIC0tZ2l0IExh
eW91dFRlc3RzL2pzL2RvbS9leGNlcHRpb24tbGluZW51bXMtaW4taHRtbC0yLmh0bWwgTGF5b3V0
VGVzdHMvanMvZG9tL2V4Y2VwdGlvbi1saW5lbnVtcy1pbi1odG1sLTIuaHRtbAppbmRleCBmNWRi
Mzc5Li44NmYwODI5IDEwMDY0NAotLS0gTGF5b3V0VGVzdHMvanMvZG9tL2V4Y2VwdGlvbi1saW5l
bnVtcy1pbi1odG1sLTIuaHRtbAorKysgTGF5b3V0VGVzdHMvanMvZG9tL2V4Y2VwdGlvbi1saW5l
bnVtcy1pbi1odG1sLTIuaHRtbApAQCAtOCw3ICs4LDcgQEAgZGVzY3JpcHRpb24oJ1RoaXMgdGVz
dCBleGVyY2lzZXMgdGhlIHNvdXJjZSBVUkwgYW5kIGxpbmUgbnVtYmVyIHRoYXQgaXMgZW1iZWRk
ZWQKIAogZnVuY3Rpb24gZXhjZXB0aW9uSW5GdW5jdGlvbigpCiB7Ci0gICAgdGhyb3cgRXhjZXB0
aW9uKCk7CisgICAgdGhyb3cgbmV3IEVycm9yKCk7CiB9CiAKIHZhciBlID0gdW5kZWZpbmVkOwpk
aWZmIC0tZ2l0IExheW91dFRlc3RzL2pzL2RvbS9leGNlcHRpb24tbGluZW51bXMtaW4taHRtbC0z
Lmh0bWwgTGF5b3V0VGVzdHMvanMvZG9tL2V4Y2VwdGlvbi1saW5lbnVtcy1pbi1odG1sLTMuaHRt
bAppbmRleCA3YzExZjgxLi45ZmM3ZWRmIDEwMDY0NAotLS0gTGF5b3V0VGVzdHMvanMvZG9tL2V4
Y2VwdGlvbi1saW5lbnVtcy1pbi1odG1sLTMuaHRtbAorKysgTGF5b3V0VGVzdHMvanMvZG9tL2V4
Y2VwdGlvbi1saW5lbnVtcy1pbi1odG1sLTMuaHRtbApAQCAtMTAsNyArMTAsNyBAQCBkZXNjcmlw
dGlvbignVGhpcyB0ZXN0IGV4ZXJjaXNlcyB0aGUgc291cmNlIFVSTCBhbmQgbGluZSBudW1iZXIg
dGhhdCBpcyBlbWJlZGRlZAogCiBmdW5jdGlvbiBleGNlcHRpb25JbkZ1bmN0aW9uKCkKIHsKLSAg
ICB0aHJvdyBFeGNlcHRpb24oKTsKKyAgICB0aHJvdyBuZXcgRXJyb3IoKTsKIH0KIAogdmFyIGUg
PSB1bmRlZmluZWQ7CmRpZmYgLS1naXQgTGF5b3V0VGVzdHMvanMvZG9tL3NjcmlwdC10ZXN0cy9z
dGFjay10cmFjZS5qcyBMYXlvdXRUZXN0cy9qcy9kb20vc2NyaXB0LXRlc3RzL3N0YWNrLXRyYWNl
LmpzCmluZGV4IDYyMjIzY2QuLjE4MGRhNzMgMTAwNjQ0Ci0tLSBMYXlvdXRUZXN0cy9qcy9kb20v
c2NyaXB0LXRlc3RzL3N0YWNrLXRyYWNlLmpzCisrKyBMYXlvdXRUZXN0cy9qcy9kb20vc2NyaXB0
LXRlc3RzL3N0YWNrLXRyYWNlLmpzCkBAIC0xMzYsNyArMTM2LDcgQEAgdHJ5IHsKIHZhciBjYWxs
Q291bnQgPSAwOwogCiBmdW5jdGlvbiB0aHJvd0Vycm9yKCkgewotICAgIHRocm93IHt9OworICAg
IHRocm93IG5ldyBFcnJvcigpOwogfQogCiB2YXIgb2JqZWN0ID0gewpAQCAtMjEwLDcgKzIxMCw3
IEBAIGZvciAodmFyIGsgPSAwOyBrIDwgNDsgaysrKSB7CiAKIGZ1bmN0aW9uIGgoKSB7CiAgICAg
aWYgKGNhbGxDb3VudCsrID09IDEwMDApCi0gICAgICAgIHRocm93IHt9OworICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoKTsKICAgICBpZiAoY2FsbENvdW50ID4gMTAwMCkgewogICAgICAgICBbXS5t
YXAuYXBwbHkodW5kZWZpbmVkLCB0aHJvd0Vycm9yKTsKICAgICB9CkBAIC0yOTksMTggKzI5OSwx
OCBAQCBmdW5jdGlvbiBkZmdUZXN0KGYpIHsKIH0KIAogZnVuY3Rpb24gaW5saW5lYWJsZVRocm93
KCkgewotICAgIGlmIChkZmdDb3VudCA+IDUwMCkgdGhyb3cge307CisgICAgaWYgKGRmZ0NvdW50
ID4gNTAwKSB0aHJvdyBuZXcgRXJyb3IoKTsKIH0KIAogdmFyIGRmZ1RoaW5nID0gewogICAgIGdl
dCB3aWxsVGhyb3coKSB7CiAgICAgICAgIGlmIChkZmdDb3VudCA+IDUwMCkKLSAgICAgICAgICAg
IHRocm93IHt9OworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7CiAgICAgfSwKICAgICBn
ZXQgd2lsbFRocm93RXZlbnR1YWxseSgpIHsKICAgICAgICAgaW5saW5lYWJsZVRocm93KCk7CiAg
ICAgfSwKLSAgICB3aWxsVGhyb3dGdW5jOiBmdW5jdGlvbiAoKSB7IGlmIChkZmdDb3VudCA+IDUw
MCkgdGhyb3cge307IH0sCisgICAgd2lsbFRocm93RnVuYzogZnVuY3Rpb24gKCkgeyBpZiAoZGZn
Q291bnQgPiA1MDApIHRocm93IG5ldyBFcnJvcigpOyB9LAogICAgIHdpbGxUaHJvd0V2ZW50dWFs
bHlGdW5jOiBmdW5jdGlvbiAoKSB7IGlubGluZWFibGVUaHJvdygpOyB9CiB9CiBkZmdUaGluZy5f
X2RlZmluZUdldHRlcl9fKCJob3N0V2lsbFRocm93IiwgaG9zdFRocm93ZXIpOwpkaWZmIC0tZ2l0
IExheW91dFRlc3RzL2pzL2RvbS9zdGFjay10cmFjZS1leHBlY3RlZC50eHQgTGF5b3V0VGVzdHMv
anMvZG9tL3N0YWNrLXRyYWNlLWV4cGVjdGVkLnR4dAppbmRleCA1YThmNzkxLi4xODIwMWY5IDEw
MDY0NAotLS0gTGF5b3V0VGVzdHMvanMvZG9tL3N0YWNrLXRyYWNlLWV4cGVjdGVkLnR4dAorKysg
TGF5b3V0VGVzdHMvanMvZG9tL3N0YWNrLXRyYWNlLWV4cGVjdGVkLnR4dApAQCAtMjU4LDcgKzI1
OCw3IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFCiAgICAgMiAgIHNlbGZSZWN1cnNpdmUzIGF0
IHN0YWNrLXRyYWNlLmpzCiAKIC0tPiBTdGFjayBUcmFjZToKLSAgICAwICAgdGhyb3dFcnJvciBh
dCBzdGFjay10cmFjZS5qczoxMzk6MTMKKyAgICAwICAgdGhyb3dFcnJvciBhdCBzdGFjay10cmFj
ZS5qczoxMzk6MjAKICAgICAxICAgdmFsdWVPZiBhdCBzdGFjay10cmFjZS5qczoxNDY6MjcKICAg
ICAyICAgZ2V0dGVyMSBhdCBzdGFjay10cmFjZS5qczoxNDk6MTEKICAgICAzICAgbm9uSW5saW5l
YWJsZSBhdCBzdGFjay10cmFjZS5qczoxNzU6MTcKQEAgLTI3MCw3ICsyNzAsNyBAQCBPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURQogICAgIDkgICBnbG9iYWwgY29kZSBhdCBzdGFjay10cmFjZS5qczoy
MDU6MTYKIAogLS0+IFN0YWNrIFRyYWNlOgotICAgIDAgICB0aHJvd0Vycm9yIGF0IHN0YWNrLXRy
YWNlLmpzOjEzOToxMworICAgIDAgICB0aHJvd0Vycm9yIGF0IHN0YWNrLXRyYWNlLmpzOjEzOToy
MAogICAgIDEgICBnZXR0ZXIyIGF0IHN0YWNrLXRyYWNlLmpzOjE1NToxMQogICAgIDIgICBub25J
bmxpbmVhYmxlIGF0IHN0YWNrLXRyYWNlLmpzOjE3NzoxNwogICAgIDMgICBpbmxpbmVhYmxlIGF0
IHN0YWNrLXRyYWNlLmpzOjE4MzoyNwpAQCAtMjgxLDcgKzI4MSw3IEBAIE9uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFCiAgICAgOCAgIGdsb2JhbCBjb2RlIGF0IHN0YWNrLXRyYWNlLmpzOjIwNToxNgog
CiAtLT4gU3RhY2sgVHJhY2U6Ci0gICAgMCAgIHRocm93RXJyb3IgYXQgc3RhY2stdHJhY2UuanM6
MTM5OjEzCisgICAgMCAgIHRocm93RXJyb3IgYXQgc3RhY2stdHJhY2UuanM6MTM5OjIwCiAgICAg
MSAgIGdldHRlcjMgYXQgc3RhY2stdHJhY2UuanM6MTY3OjE2CiAgICAgMiAgIG5vbklubGluZWFi
bGUgYXQgc3RhY2stdHJhY2UuanM6MTc5OjE3CiAgICAgMyAgIGlubGluZWFibGUgYXQgc3RhY2st
dHJhY2UuanM6MTgzOjI3CkBAIC0yOTIsNyArMjkyLDcgQEAgT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUKICAgICA4ICAgZ2xvYmFsIGNvZGUgYXQgc3RhY2stdHJhY2UuanM6MjA1OjE2CiAKIC0tPiBT
dGFjayBUcmFjZToKLSAgICAwICAgdGhyb3dFcnJvciBhdCBzdGFjay10cmFjZS5qczoxMzk6MTMK
KyAgICAwICAgdGhyb3dFcnJvciBhdCBzdGFjay10cmFjZS5qczoxMzk6MjAKICAgICAxICAgdmFs
dWVPZiBhdCBzdGFjay10cmFjZS5qczoxNjM6MjcKICAgICAyICAgZ2V0dGVyMyBhdCBzdGFjay10
cmFjZS5qczoxNjk6MTYKICAgICAzICAgbm9uSW5saW5lYWJsZSBhdCBzdGFjay10cmFjZS5qczox
Nzk6MTcKQEAgLTMwNCw3ICszMDQsNyBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURQogICAgIDkg
ICBnbG9iYWwgY29kZSBhdCBzdGFjay10cmFjZS5qczoyMDU6MTYKIAogLS0+IFN0YWNrIFRyYWNl
OgotICAgIDAgICBoIGF0IHN0YWNrLXRyYWNlLmpzOjIxMzoxNworICAgIDAgICBoIGF0IHN0YWNr
LXRyYWNlLmpzOjIxMzoyNAogICAgIDEgICBtYXAgYXQgW25hdGl2ZSBjb2RlXQogICAgIDIgICBt
YXBUZXN0IGF0IHN0YWNrLXRyYWNlLmpzOjIyMDoxMAogICAgIDMgICBtYXBUZXN0RHJpdmVyIGF0
IHN0YWNrLXRyYWNlLmpzOjIyNjoxNgpAQCAtMzE5LDE5ICszMTksMTkgQEAgT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUKICAgICA1ICAgZ2xvYmFsIGNvZGUgYXQgc3RhY2stdHJhY2UuanM6MjM3OjE4
CiAKIC0tPiBTdGFjayBUcmFjZToKLSAgICAwICAgdGhyb3dFcnJvciBhdCBzdGFjay10cmFjZS5q
czoxMzk6MTMKKyAgICAwICAgdGhyb3dFcnJvciBhdCBzdGFjay10cmFjZS5qczoxMzk6MjAKICAg
ICAxICAgZGZnRnVuY3Rpb24gYXQgc3RhY2stdHJhY2UuanM6MjQ2OjE5CiAgICAgMiAgIG1hcCBh
dCBbbmF0aXZlIGNvZGVdCiAgICAgMyAgIGdsb2JhbCBjb2RlIGF0IHN0YWNrLXRyYWNlLmpzOjI1
NToxOAogCiAtLT4gU3RhY2sgVHJhY2U6Ci0gICAgMCAgIHRocm93RXJyb3IgYXQgc3RhY2stdHJh
Y2UuanM6MTM5OjEzCisgICAgMCAgIHRocm93RXJyb3IgYXQgc3RhY2stdHJhY2UuanM6MTM5OjIw
CiAgICAgMSAgIGRmZ0Z1bmN0aW9uIGF0IHN0YWNrLXRyYWNlLmpzOjI0NjoxOQogICAgIDIgICBm
IGF0IHN0YWNrLXRyYWNlLmpzOjI2NDoxMAogICAgIDMgICBnbG9iYWwgY29kZSBhdCBzdGFjay10
cmFjZS5qczoyNzA6NgogCiAtLT4gU3RhY2sgVHJhY2U6Ci0gICAgMCAgIHdpbGxUaHJvdyBhdCBz
dGFjay10cmFjZS5qczozMDg6MjEKKyAgICAwICAgd2lsbFRocm93IGF0IHN0YWNrLXRyYWNlLmpz
OjMwODoyOAogICAgIDEgICBkZmcxIGF0IHN0YWNrLXRyYWNlLmpzOjMxOToxMwogICAgIDIgICBk
ZmcyIGF0IHN0YWNrLXRyYWNlLmpzOjMyMzo5CiAgICAgMyAgIGRmZzMgYXQgc3RhY2stdHJhY2Uu
anM6MzI3OjkKQEAgLTMzOSw3ICszMzksNyBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURQogICAg
IDUgICBnbG9iYWwgY29kZSBhdCBzdGFjay10cmFjZS5qczozNjY6OAogCiAtLT4gU3RhY2sgVHJh
Y2U6Ci0gICAgMCAgIHdpbGxUaHJvd0Z1bmMgYXQgc3RhY2stdHJhY2UuanM6MzEzOjYyCisgICAg
MCAgIHdpbGxUaHJvd0Z1bmMgYXQgc3RhY2stdHJhY2UuanM6MzEzOjY5CiAgICAgMSAgIGRmZzQg
YXQgc3RhY2stdHJhY2UuanM6MzMxOjI3CiAgICAgMiAgIGRmZzUgYXQgc3RhY2stdHJhY2UuanM6
MzM1OjkKICAgICAzICAgZGZnNiBhdCBzdGFjay10cmFjZS5qczozMzk6OQpAQCAtMzQ3LDcgKzM0
Nyw3IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFCiAgICAgNSAgIGdsb2JhbCBjb2RlIGF0IHN0
YWNrLXRyYWNlLmpzOjM2Nzo4CiAKIC0tPiBTdGFjayBUcmFjZToKLSAgICAwICAgaW5saW5lYWJs
ZVRocm93IGF0IHN0YWNrLXRyYWNlLmpzOjMwMjozMworICAgIDAgICBpbmxpbmVhYmxlVGhyb3cg
YXQgc3RhY2stdHJhY2UuanM6MzAyOjQwCiAgICAgMSAgIHdpbGxUaHJvd0V2ZW50dWFsbHkgYXQg
c3RhY2stdHJhY2UuanM6MzExOjI0CiAgICAgMiAgIGRmZzcgYXQgc3RhY2stdHJhY2UuanM6MzQz
OjEzCiAgICAgMyAgIGRmZzggYXQgc3RhY2stdHJhY2UuanM6MzQ3OjkKQEAgLTM1Niw3ICszNTYs
NyBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURQogICAgIDYgICBnbG9iYWwgY29kZSBhdCBzdGFj
ay10cmFjZS5qczozNjg6OAogCiAtLT4gU3RhY2sgVHJhY2U6Ci0gICAgMCAgIGlubGluZWFibGVU
aHJvdyBhdCBzdGFjay10cmFjZS5qczozMDI6MzMKKyAgICAwICAgaW5saW5lYWJsZVRocm93IGF0
IHN0YWNrLXRyYWNlLmpzOjMwMjo0MAogICAgIDEgICB3aWxsVGhyb3dFdmVudHVhbGx5RnVuYyBh
dCBzdGFjay10cmFjZS5qczozMTQ6NTkKICAgICAyICAgZGZnYSBhdCBzdGFjay10cmFjZS5qczoz
NTU6MzcKICAgICAzICAgZGZnYiBhdCBzdGFjay10cmFjZS5qczozNTk6OQpkaWZmIC0tZ2l0IExh
eW91dFRlc3RzL2pzL2V4Y2VwdGlvbi1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dCBMYXlvdXRUZXN0
cy9qcy9leGNlcHRpb24tcHJvcGVydGllcy1leHBlY3RlZC50eHQKaW5kZXggZGUwNTMwYi4uYTA3
NTgzYSAxMDA2NDQKLS0tIExheW91dFRlc3RzL2pzL2V4Y2VwdGlvbi1wcm9wZXJ0aWVzLWV4cGVj
dGVkLnR4dAorKysgTGF5b3V0VGVzdHMvanMvZXhjZXB0aW9uLXByb3BlcnRpZXMtZXhwZWN0ZWQu
dHh0CkBAIC0zLDcgKzMsNyBAQCBUZXN0IGZvciBjb3JyZWN0IHByb3BlcnRpZXMgb24gRXJyb3Ig
b2JqZWN0cy4KIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1QQVNTIGVudW1lcmFibGVQ
cm9wZXJ0aWVzKGVycm9yKSBpcyBbXQorUEFTUyBlbnVtZXJhYmxlUHJvcGVydGllcyhlcnJvciku
c29ydCgpIGlzIFsiY29sdW1uIiwgImxpbmUiLCAic291cmNlVVJMIl0KIFBBU1MgZW51bWVyYWJs
ZVByb3BlcnRpZXMobmF0aXZlRXJyb3IpLnNvcnQoKSBpcyBbImNvbHVtbiIsICJsaW5lIiwgInNv
dXJjZVVSTCJdCiBQQVNTIE9iamVjdC5nZXRQcm90b3R5cGVPZihuYXRpdmVFcnJvcikubmFtZSBp
cyAiUmFuZ2VFcnJvciIKIFBBU1MgT2JqZWN0LmdldFByb3RvdHlwZU9mKG5hdGl2ZUVycm9yKS5t
ZXNzYWdlIGlzICIiCmRpZmYgLS1naXQgTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2V4Y2Vw
dGlvbi1saW5lbnVtcy5qcyBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvZXhjZXB0aW9uLWxp
bmVudW1zLmpzCmluZGV4IGJlOTRlMTkuLjk2Zjg0ZjQgMTAwNjQ0Ci0tLSBMYXlvdXRUZXN0cy9q
cy9zY3JpcHQtdGVzdHMvZXhjZXB0aW9uLWxpbmVudW1zLmpzCisrKyBMYXlvdXRUZXN0cy9qcy9z
Y3JpcHQtdGVzdHMvZXhjZXB0aW9uLWxpbmVudW1zLmpzCkBAIC0yLDcgKzIsNyBAQCBkZXNjcmlw
dGlvbignVGhpcyB0ZXN0IGV4ZXJjaXNlcyB0aGUgc291cmNlIFVSTCBhbmQgbGluZSBudW1iZXIg
dGhhdCBpcyBlbWJlZGRlZAogCiBmdW5jdGlvbiBleGNlcHRpb25JbkZ1bmN0aW9uKCkKIHsKLSAg
ICB0aHJvdyBFeGNlcHRpb24oKTsKKyAgICB0aHJvdyBuZXcgRXJyb3IoKTsKIH0KIAogdmFyIGUg
PSB1bmRlZmluZWQ7CkBAIC03MSwxOCArNzEsMTggQEAgc2hvdWxkQmUoInR5cGVvZiBlLnNvdXJj
ZVVSTCIsICcic3RyaW5nIicpOwogc2hvdWxkQmUoImUubGluZSIsICc2NCcpOwogCiB2YXIgZmly
c3RQcm9wSXNHZXR0ZXIgPSB7Ci0gICAgZ2V0IGdldHRlcigpIHsgdGhyb3cge30gfQorICAgIGdl
dCBnZXR0ZXIoKSB7IHRocm93IG5ldyBFcnJvcigpIH0KIH07CiB2YXIgc2Vjb25kUHJvcElzR2V0
dGVyID0gewogICAgIHByb3A6IDEsCi0gICAgZ2V0IGdldHRlcigpIHsgdGhyb3cge30gfQorICAg
IGdldCBnZXR0ZXIoKSB7IHRocm93IG5ldyBFcnJvcigpIH0KIH07CiB2YXIgZmlyc3RQcm9wSXNT
ZXR0ZXIgPSB7Ci0gICAgc2V0IHNldHRlcihhKSB7IHRocm93IHt9IH0KKyAgICBzZXQgc2V0dGVy
KGEpIHsgdGhyb3cgbmV3IEVycm9yKCkgfQogfTsKIHZhciBzZWNvbmRQcm9wSXNTZXR0ZXIgPSB7
CiAgICAgcHJvcDogMSwKLSAgICBzZXQgc2V0dGVyKGEpIHsgdGhyb3cge30gfQorICAgIHNldCBz
ZXR0ZXIoYSkgeyB0aHJvdyBuZXcgRXJyb3IoKSB9CiB9OwogCiB0cnkgewpkaWZmIC0tZ2l0IExh
eW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9leGNlcHRpb24tcHJvcGVydGllcy5qcyBMYXlvdXRU
ZXN0cy9qcy9zY3JpcHQtdGVzdHMvZXhjZXB0aW9uLXByb3BlcnRpZXMuanMKaW5kZXggNjZiYmQy
OC4uYTk5MzZiYyAxMDA2NDQKLS0tIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9leGNlcHRp
b24tcHJvcGVydGllcy5qcworKysgTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2V4Y2VwdGlv
bi1wcm9wZXJ0aWVzLmpzCkBAIC0xNSw3ICsxNSw3IEBAIHRyeSB7CiAgICAgdmFyIG5hdGl2ZUVy
cm9yID0gcmFuZ2VFcnJvcjsKICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoIm1lc3NhZ2UiKTsK
IAotICAgIHNob3VsZEJlKCdlbnVtZXJhYmxlUHJvcGVydGllcyhlcnJvciknLCAnW10nKTsKKyAg
ICBzaG91bGRCZSgnZW51bWVyYWJsZVByb3BlcnRpZXMoZXJyb3IpLnNvcnQoKScsICdbImNvbHVt
biIsICJsaW5lIiwgInNvdXJjZVVSTCJdJyk7CiAgICAgc2hvdWxkQmUoJ2VudW1lcmFibGVQcm9w
ZXJ0aWVzKG5hdGl2ZUVycm9yKS5zb3J0KCknLCAnWyJjb2x1bW4iLCAibGluZSIsICJzb3VyY2VV
UkwiXScpOwogCiAgICAgc2hvdWxkQmUoJ09iamVjdC5nZXRQcm90b3R5cGVPZihuYXRpdmVFcnJv
cikubmFtZScsICciUmFuZ2VFcnJvciInKTsKZGlmZiAtLWdpdCBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtYWRkc291cmNl
YnVmZmVyLWV4cGVjdGVkLnR4dCBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvaHR0cC90ZXN0cy9t
ZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtYWRkc291cmNlYnVmZmVyLWV4cGVjdGVkLnR4
dAppbmRleCA0MzI3NWRlLi45MzE1MzgxIDEwMDY0NAotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2h0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWFkZHNvdXJjZWJ1
ZmZlci1leHBlY3RlZC50eHQKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9odHRwL3Rlc3Rz
L21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1hZGRzb3VyY2VidWZmZXItZXhwZWN0ZWQu
dHh0CkBAIC0xLDE0ICsxLDE0IEBACiAgCiBQQVNTIFRlc3QgYWRkU291cmNlQnVmZmVyKCkgd2l0
aCBlbXB0eSB0eXBlIAogUEFTUyBUZXN0IGFkZFNvdXJjZUJ1ZmZlcigpIHdpdGggdW5zdXBwb3J0
ZWQgdHlwZSAKLUZBSUwgVGVzdCBhZGRTb3VyY2VCdWZmZXIoKSB3aXRoIFZvcmJpcyBhbmQgVlA4
IGFzc2VydF90cnVlOiB2aWRlby93ZWJtO2NvZGVjcz0idnA4LHZvcmJpcyIgaXMgc3VwcG9ydGVk
IGV4cGVjdGVkIHRydWUgZ290IGZhbHNlKHN0YWNrOiBhc3NlcnRAaHR0cDovLzEyNy4wLjAuMTo4
MDAwL3czYy9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanM6MjA2MTo3MworRkFJTCBUZXN0IGFkZFNv
dXJjZUJ1ZmZlcigpIHdpdGggVm9yYmlzIGFuZCBWUDggYXNzZXJ0X3RydWU6IHZpZGVvL3dlYm07
Y29kZWNzPSJ2cDgsdm9yYmlzIiBpcyBzdXBwb3J0ZWQgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2Uo
c3RhY2s6IGFzc2VydEBodHRwOi8vMTI3LjAuMC4xOjgwMDAvdzNjL3Jlc291cmNlcy90ZXN0aGFy
bmVzcy5qczoyMDYwOjM3CiBhc3NlcnRfdHJ1ZUBodHRwOi8vMTI3LjAuMC4xOjgwMDAvdzNjL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qczo2NjM6MTUKIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9tZWRp
YS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtYWRkc291cmNlYnVmZmVyLmh0bWw6MzI6MjYKIGh0
dHA6Ly8xMjcuMC4wLjE6ODAwMC9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtdXRpbC5q
czozMzk6MjkKIG9uU291cmNlT3BlbkBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbWVkaWEvbWVkaWEt
c291cmNlL21lZGlhc291cmNlLXV0aWwuanM6MTQ5OjIxCiBzdGVwQGh0dHA6Ly8xMjcuMC4wLjE6
ODAwMC93M2MvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzOjExNjA6MzAKIGh0dHA6Ly8xMjcuMC4w
LjE6ODAwMC93M2MvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzOjExODk6MzMpCi1GQUlMIFRlc3Qg
YWRkU291cmNlQnVmZmVyKCkgd2l0aCBWb3JiaXMgYW5kIFZQOCBpbiBzZXBhcmF0ZSBTb3VyY2VC
dWZmZXJzIGFzc2VydF90cnVlOiB2aWRlby93ZWJtO2NvZGVjcz0idnA4IiBpcyBzdXBwb3J0ZWQg
ZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2Uoc3RhY2s6IGFzc2VydEBodHRwOi8vMTI3LjAuMC4xOjgw
MDAvdzNjL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qczoyMDYxOjczCitGQUlMIFRlc3QgYWRkU291
cmNlQnVmZmVyKCkgd2l0aCBWb3JiaXMgYW5kIFZQOCBpbiBzZXBhcmF0ZSBTb3VyY2VCdWZmZXJz
IGFzc2VydF90cnVlOiB2aWRlby93ZWJtO2NvZGVjcz0idnA4IiBpcyBzdXBwb3J0ZWQgZXhwZWN0
ZWQgdHJ1ZSBnb3QgZmFsc2Uoc3RhY2s6IGFzc2VydEBodHRwOi8vMTI3LjAuMC4xOjgwMDAvdzNj
L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qczoyMDYwOjM3CiBhc3NlcnRfdHJ1ZUBodHRwOi8vMTI3
LjAuMC4xOjgwMDAvdzNjL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qczo2NjM6MTUKIGh0dHA6Ly8x
MjcuMC4wLjE6ODAwMC9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtYWRkc291cmNlYnVm
ZmVyLmh0bWw6NDY6MjYKIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9tZWRpYS9tZWRpYS1zb3VyY2Uv
bWVkaWFzb3VyY2UtdXRpbC5qczozMzk6MjkKZGlmZiAtLWdpdCBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2Utc291cmNlYnVm
ZmVyLW1vZGUtZXhwZWN0ZWQudHh0IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9odHRwL3Rlc3Rz
L21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1zb3VyY2VidWZmZXItbW9kZS1leHBlY3Rl
ZC50eHQKaW5kZXggYjM3MTlmYS4uY2IwN2Q5NCAxMDA2NDQKLS0tIExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9odHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1zb3VyY2Vi
dWZmZXItbW9kZS1leHBlY3RlZC50eHQKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9odHRw
L3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1zb3VyY2VidWZmZXItbW9kZS1l
eHBlY3RlZC50eHQKQEAgLTQsNyArNCw3IEBAIFBBU1MgVGVzdCBzZXR0aW5nIFNvdXJjZUJ1ZmZl
ci5tb2RlCiBQQVNTIFRlc3Qgc2V0dGluZyBhIHJlbW92ZWQgU291cmNlQnVmZmVyJ3MgbW9kZSAK
IFBBU1MgVGVzdCBzZXR0aW5nIFNvdXJjZUJ1ZmZlci5tb2RlIHdoaWxlIHN0aWxsIHVwZGF0aW5n
IAogUEFTUyBUZXN0IHNldHRpbmcgU291cmNlQnVmZmVyLm1vZGUgdHJpZ2dlcnMgcGFyZW50IE1l
ZGlhU291cmNlICdlbmRlZCcgdG8gJ29wZW4nIHRyYW5zaXRpb24uIAotRkFJTCBUZXN0IHNldHRp
bmcgU291cmNlQnVmZmVyLm1vZGUgYW5kIFNvdXJjZUJ1ZmZlci50aW1lc3RhbXBPZmZzZXQgd2hp
bGUgcGFyc2luZyBtZWRpYSBzZWdtZW50LiBhc3NlcnRfdGhyb3dzOiBTZXR0aW5nIHZhbGlkIHNv
dXJjZUJ1ZmZlci5tb2RlIHdoaWxlIHN0aWxsIHBhcnNpbmcgbWVkaWEgc2VnbWVudCB0aHJldyBJ
bnZhbGlkU3RhdGVFcnJvci4gZnVuY3Rpb24gImZ1bmN0aW9uICgpIHsgc291cmNlQnVmZmVyLm1v
ZGUgPSAnc2VnbWVudHMnOyB9IiBkaWQgbm90IHRocm93KHN0YWNrOiBhc3NlcnRAaHR0cDovLzEy
Ny4wLjAuMTo4MDAwL3czYy9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanM6MjA2MTo3MworRkFJTCBU
ZXN0IHNldHRpbmcgU291cmNlQnVmZmVyLm1vZGUgYW5kIFNvdXJjZUJ1ZmZlci50aW1lc3RhbXBP
ZmZzZXQgd2hpbGUgcGFyc2luZyBtZWRpYSBzZWdtZW50LiBhc3NlcnRfdGhyb3dzOiBTZXR0aW5n
IHZhbGlkIHNvdXJjZUJ1ZmZlci5tb2RlIHdoaWxlIHN0aWxsIHBhcnNpbmcgbWVkaWEgc2VnbWVu
dCB0aHJldyBJbnZhbGlkU3RhdGVFcnJvci4gZnVuY3Rpb24gImZ1bmN0aW9uICgpIHsgc291cmNl
QnVmZmVyLm1vZGUgPSAnc2VnbWVudHMnOyB9IiBkaWQgbm90IHRocm93KHN0YWNrOiBhc3NlcnRA
aHR0cDovLzEyNy4wLjAuMTo4MDAwL3czYy9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanM6MjA2MDoz
NwogYXNzZXJ0X3Rocm93c0BodHRwOi8vMTI3LjAuMC4xOjgwMDAvdzNjL3Jlc291cmNlcy90ZXN0
aGFybmVzcy5qczo5NDc6MTkKIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9tZWRpYS9tZWRpYS1zb3Vy
Y2UvbWVkaWFzb3VyY2Utc291cmNlYnVmZmVyLW1vZGUuaHRtbDoxMTQ6MzIKIGhhbmRsZVdhaXRD
YWxsYmFja19AaHR0cDovLzEyNy4wLjAuMTo4MDAwL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNv
dXJjZS11dGlsLmpzOjk3OjE3CmRpZmYgLS1naXQgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGU0YjcwMTEuLjllNDQw
ZjggMTAwNjQ0Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODIgQEAKKzIwMTUtMDQtMDMgIE1h
dHRoZXcgTWlybWFuICA8bW1pcm1hbkBhcHBsZS5jb20+CisKKyAgICAgICAgU291cmNlIGFuZCBz
dGFjayBpbmZvcm1hdGlvbiBzaG91bGQgZ2V0IGFwcGVuZGVkIG9ubHkgdG8gbmF0aXZlIGVycm9y
IGNvbnN0cnVjdG9ycworICAgICAgICBhbmQgc2hvdWxkIGJlIGFkZGVkIGF0IGNvbnN0cnVjdGlv
biB0aW1lIHJhdGhlciB0aGFuIHdoZW4gdGhyb3duLgorICAgICAgICByZGFyOi8vcHJvYmxlbS8x
OTkyNzI5MworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQxODcxCisgICAgICAgIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50
ZXJwcmV0ZXI6OmV4ZWN1dGUpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmg6
CisgICAgICAgICogcGFyc2VyL1BhcnNlckVycm9yLmg6CisgICAgICAgIChKU0M6OlBhcnNlckVy
cm9yOjp0b0Vycm9yT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZpZXJz
Lmg6CisgICAgICAgICogcnVudGltZS9FcnJvci5jcHA6CisgICAgICAgIChKU0M6OmNyZWF0ZUVy
cm9yKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlRXZhbEVycm9yKToKKyAgICAgICAgKEpTQzo6Y3Jl
YXRlUmFuZ2VFcnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZVJlZmVyZW5jZUVycm9yKToKKyAg
ICAgICAgKEpTQzo6Y3JlYXRlU3ludGF4RXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVUeXBl
RXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcik6Cisg
ICAgICAgIChKU0M6OmNyZWF0ZVVSSUVycm9yKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlT3V0T2ZN
ZW1vcnlFcnJvcik6CisgICAgICAgIChKU0M6OkZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVi
bG9ja0Z1bmN0b3I6OkZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3IpOgor
ICAgICAgICAoSlNDOjpGaW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yOjpv
cGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6RmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJs
b2NrRnVuY3Rvcjo6Zm91bmRDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpGaW5kRmlyc3RDYWxs
ZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yOjppbmRleCk6CisgICAgICAgIChKU0M6OmFkZEVy
cm9ySW5mb0FuZEdldEJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6YWRkRXJyb3JJbmZv
KToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yLmg6CisgICAgICAgICogcnVudGltZS9FcnJvckNv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmNvbnN0cnVjdFdpdGhF
cnJvckNvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmNhbGxFcnJvckNv
bnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAg
ICAoSlNDOjphcHBlbmRTb3VyY2VUb0Vycm9yKToKKyAgICAgICAgKEpTQzo6RmluZEZpcnN0Q2Fs
bGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3Rvcjo6RmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29k
ZWJsb2NrRnVuY3Rvcik6CisgICAgICAgIChKU0M6OkZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENv
ZGVibG9ja0Z1bmN0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAoSlNDOjpGaW5kRmlyc3RDYWxs
ZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yOjpmb3VuZENhbGxGcmFtZSk6CisgICAgICAgIChK
U0M6OkZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3I6OmluZGV4KToKKyAg
ICAgICAgKEpTQzo6YWRkRXJyb3JJbmZvQW5kR2V0Qnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAo
SlNDOjpFcnJvckluc3RhbmNlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9F
cnJvckluc3RhbmNlLmg6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OmNyZWF0ZSk6Cisg
ICAgICAgICogcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkVycm9y
UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9FeGNlcHRpb25G
dXp6LmNwcDoKKyAgICAgICAgKEpTQzo6ZG9FeGNlcHRpb25GdXp6aW5nKToKKyAgICAgICAgKiBy
dW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpjcmVhdGVFcnJvcik6
CisgICAgICAgIChKU0M6OmNyZWF0ZUludmFsaWRGdW5jdGlvbkFwcGx5UGFyYW1ldGVyRXJyb3Ip
OgorICAgICAgICAoSlNDOjpjcmVhdGVJbnZhbGlkSW5QYXJhbWV0ZXJFcnJvcik6CisgICAgICAg
IChKU0M6OmNyZWF0ZUludmFsaWRJbnN0YW5jZW9mUGFyYW1ldGVyRXJyb3IpOgorICAgICAgICAo
SlNDOjpjcmVhdGVOb3RBQ29uc3RydWN0b3JFcnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZU5v
dEFGdW5jdGlvbkVycm9yKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlTm90QW5PYmplY3RFcnJvcik6
CisgICAgICAgIChKU0M6OnRocm93T3V0T2ZNZW1vcnlFcnJvcik6CisgICAgICAgIChKU0M6OmNy
ZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmNyZWF0ZU91
dE9mTWVtb3J5RXJyb3IpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uSGVs
cGVycy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Y29uc3RydWN0QXJyYXlCdWZmZXIpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmFycmF5QnVmZmVyUHJv
dG9GdW5jU2xpY2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
Pjo6Y3JlYXRlVW5pbml0aWFsaXplZCk6CisgICAgICAgICogcnVudGltZS9OYXRpdmVFcnJvckNv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmNvbnN0cnVjdFdpdGhO
YXRpdmVFcnJvckNvbnN0cnVjdG9yKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmNhbGxO
YXRpdmVFcnJvckNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAg
ICAgKEpTQzo6Vk06OnRocm93RXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6YXBwZW5kU291cmNl
VG9FcnJvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZpbmRGaXJzdENhbGxlckZyYW1lV2l0
aENvZGVibG9ja0Z1bmN0b3I6OkZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0
b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGaW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2Rl
YmxvY2tGdW5jdG9yOjpvcGVyYXRvcigpKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RmluZEZp
cnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3Rvcjo6Zm91bmRDYWxsRnJhbWUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpGaW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5j
dG9yOjppbmRleCk6IERlbGV0ZWQuCisKIDIwMTUtMDQtMDMgIEdlb2ZmcmV5IEdhcmVuICA8Z2dh
cmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBKYXZhU2NyaXB0Q29yZSBBUEkgc2hvdWxkIHN1cHBv
cnQgdHlwZSBjaGVja2luZyBmb3IgQXJyYXkgYW5kIERhdGUKZGlmZiAtLWdpdCBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggZWNmY2U5MS4uMzA5MmZjYiAx
MDA2NDQKLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAK
QEAgLTc2Myw3ICs3NjMsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKFByb2dyYW1F
eGVjdXRhYmxlKiBwcm9ncmFtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSgogICAgICAgICAgICAg
ICAgICAgICAgICAgUHJvcGVydHlTbG90IHNsb3QoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1l
LCBKU09OUFBhdGhbaV0ubV9wYXRoRW50cnlOYW1lLCBzbG90KSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChlbnRyeSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGNhbGxGcmFtZS0+dm0oKS50aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIGNyZWF0ZVVu
ZGVmaW5lZFZhcmlhYmxlRXJyb3IoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIEpTT05QUGF0
aFtpXS5tX3BhdGhFbnRyeU5hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGNhbGxGcmFtZS0+dm0oKS50aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIGNyZWF0ZVVu
ZGVmaW5lZFZhcmlhYmxlRXJyb3IoY2FsbEZyYW1lLCBKU09OUFBhdGhbaV0ubV9wYXRoRW50cnlO
YW1lKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWRKU09OUDsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VPYmpl
Y3QgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgSlNPTlBQYXRoW2ldLm1fcGF0aEVudHJ5TmFt
ZSk7CmRpZmYgLS1naXQgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmggU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKaW5k
ZXggNmJmODhkYi4uZjAyZTE0MyAxMDA2NDQKLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5oCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuaApAQCAtMjY3LDYgKzI2Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcENhbGxGcmFtZShDYWxsRnJhbWUqKTsK
IAorICAgICAgICB2b2lkIGdldFN0YWNrVHJhY2UoVmVjdG9yPFN0YWNrRnJhbWU+JiByZXN1bHRz
LCBzaXplX3QgbWF4U3RhY2tTaXplID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgo
KSk7CisKICAgICBwcml2YXRlOgogICAgICAgICBlbnVtIEV4ZWN1dGlvbkZsYWcgeyBOb3JtYWws
IEluaXRpYWxpemVBbmRSZXR1cm4gfTsKIApAQCAtMjc0LDcgKzI3Niw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIEpTVmFsdWUgZXhlY3V0ZShDYWxsRnJhbWVDbG9zdXJlJik7CiAKLSAg
ICAgICAgdm9pZCBnZXRTdGFja1RyYWNlKFZlY3RvcjxTdGFja0ZyYW1lPiYgcmVzdWx0cywgc2l6
ZV90IG1heFN0YWNrU2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOwor
CiAKICAgICAgICAgdm9pZCBkdW1wUmVnaXN0ZXJzKENhbGxGcmFtZSopOwogICAgICAgICAKZGlm
ZiAtLWdpdCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckVycm9yLmggU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJFcnJvci5oCmluZGV4IDJhNjkwY2EuLmNlMTQ1
ZDcgMTAwNjQ0Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckVycm9yLmgK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyRXJyb3IuaApAQCAtODksMjIg
Kzg5LDIzIEBAIHB1YmxpYzoKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlLCAKICAgICAgICAgaW50IG92ZXJyaWRlTGluZU51bWJl
ciA9IC0xKQogICAgIHsKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCk7CiAgICAgICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgICAgIGNhc2UgRXJy
b3JOb25lOgogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGNhc2UgU3ludGF4
RXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gYWRkRXJyb3JJbmZvKAotICAgICAgICAgICAgICAg
IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCAKLSAgICAgICAgICAgICAgICBjcmVhdGVTeW50
YXhFcnJvcihnbG9iYWxPYmplY3QsIG1fbWVzc2FnZSksIAorICAgICAgICAgICAgICAgIGV4ZWMs
IAorICAgICAgICAgICAgICAgIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsIG1fbWVzc2FnZSksIAog
ICAgICAgICAgICAgICAgIG92ZXJyaWRlTGluZU51bWJlciA9PSAtMSA/IG1fbGluZSA6IG92ZXJy
aWRlTGluZU51bWJlciwgc291cmNlKTsKICAgICAgICAgY2FzZSBFdmFsRXJyb3I6Ci0gICAgICAg
ICAgICByZXR1cm4gY3JlYXRlU3ludGF4RXJyb3IoZ2xvYmFsT2JqZWN0LCBtX21lc3NhZ2UpOwor
ICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsIG1fbWVzc2FnZSk7CiAg
ICAgICAgIGNhc2UgU3RhY2tPdmVyZmxvdzogewogICAgICAgICAgICAgRXJyb3JIYW5kbGluZ1Nj
b3BlIGVycm9yU2NvcGUoZ2xvYmFsT2JqZWN0LT52bSgpKTsKLSAgICAgICAgICAgIHJldHVybiBj
cmVhdGVTdGFja092ZXJmbG93RXJyb3IoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIHJldHVy
biBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYyk7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBPdXRPZk1lbW9yeToKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVPdXRPZk1lbW9yeUVycm9y
KGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlT3V0T2ZNZW1vcnlFcnJv
cihleGVjKTsKICAgICAgICAgfQogICAgICAgICBDUkFTSCgpOwogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKZGlmZiAtLWdpdCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVu
dGlmaWVycy5oIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJz
LmgKaW5kZXggMzliZGU1NS4uZTcxODE2MyAxMDA2NDQKLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKQEAgLTgyLDYgKzgyLDcgQEAKICAgICBtYWNybyhj
bGVhcikgXAogICAgIG1hY3JvKGNsb3NlKSBcCiAgICAgbWFjcm8oY2xvc2VkKSBcCisgICAgbWFj
cm8oY29sdW1uKSBcCiAgICAgbWFjcm8oY29tcGlsYXRpb25LaW5kKSBcCiAgICAgbWFjcm8oY29t
cGlsYXRpb25zKSBcCiAgICAgbWFjcm8oY29tcGlsZSkgXApAQCAtMTI3LDYgKzEyOCw3IEBACiAg
ICAgbWFjcm8oa2V5cykgXAogICAgIG1hY3JvKGxhc3RJbmRleCkgXAogICAgIG1hY3JvKGxlbmd0
aCkgXAorICAgIG1hY3JvKGxpbmUpIFwKICAgICBtYWNybyhtZXNzYWdlKSBcCiAgICAgbWFjcm8o
bXVsdGlsaW5lKSBcCiAgICAgbWFjcm8obmFtZSkgXApAQCAtMTUzLDYgKzE1NSw3IEBACiAgICAg
bWFjcm8oc2l6ZSkgXAogICAgIG1hY3JvKHNsaWNlKSBcCiAgICAgbWFjcm8oc291cmNlKSBcCisg
ICAgbWFjcm8oc291cmNlVVJMKSBcCiAgICAgbWFjcm8oc291cmNlQ29kZSkgXAogICAgIG1hY3Jv
KHN0YWNrKSBcCiAgICAgbWFjcm8oc3ViYXJyYXkpIFwKZGlmZiAtLWdpdCBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvci5jcHAgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXJyb3IuY3BwCmluZGV4IDM2MTU2YTEuLmFhODBhY2QgMTAwNjQ0Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvci5jcHAKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Vycm9yLmNwcApAQCAtNDQsOTEgKzQ0LDE1MCBAQCBuYW1lc3BhY2UgSlNDIHsKIHN0YXRp
YyBjb25zdCBjaGFyKiBsaW5lUHJvcGVydHlOYW1lID0gImxpbmUiOwogc3RhdGljIGNvbnN0IGNo
YXIqIHNvdXJjZVVSTFByb3BlcnR5TmFtZSA9ICJzb3VyY2VVUkwiOwogCi1KU09iamVjdCogY3Jl
YXRlRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQorSlNPYmplY3QqIGNyZWF0ZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlciBhcHBlbmRlcikKIHsKICAg
ICBBU1NFUlQoIW1lc3NhZ2UuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6
Y3JlYXRlKGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5lcnJvclN0cnVjdHVyZSgp
LCBtZXNzYWdlKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpOworICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhl
YywgZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QtPmVycm9yU3RydWN0dXJlKCksIG1l
c3NhZ2UsIGFwcGVuZGVyLCBUeXBlTm90aGluZywgdHJ1ZSk7CiB9CiAKLUpTT2JqZWN0KiBjcmVh
dGVFdmFsRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQorSlNPYmplY3QqIGNyZWF0ZUV2YWxFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIgYXBwZW5kZXIp
CiB7CiAgICAgQVNTRVJUKCFtZXNzYWdlLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIEVycm9ySW5z
dGFuY2U6OmNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdC0+ZXZhbEVycm9y
Q29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICBy
ZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xv
YmFsT2JqZWN0LT5ldmFsRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBtZXNz
YWdlLCBhcHBlbmRlciwgVHlwZU5vdGhpbmcsIHRydWUpOwogfQogCi1KU09iamVjdCogY3JlYXRl
UmFuZ2VFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCitKU09iamVjdCogY3JlYXRlUmFuZ2VFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIgYXBwZW5kZXIp
CiB7CiAgICAgQVNTRVJUKCFtZXNzYWdlLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIEVycm9ySW5z
dGFuY2U6OmNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdC0+cmFuZ2VFcnJv
ckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOworICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAg
cmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QtPnZtKCksIGds
b2JhbE9iamVjdC0+cmFuZ2VFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1l
c3NhZ2UsIGFwcGVuZGVyLCBUeXBlTm90aGluZywgdHJ1ZSk7CiB9CiAKLUpTT2JqZWN0KiBjcmVh
dGVSZWZlcmVuY2VFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCitKU09iamVjdCogY3JlYXRlUmVmZXJlbmNlRXJyb3IoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVy
IGFwcGVuZGVyKQogewogICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAgIHJldHVy
biBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3Qt
PnJlZmVyZW5jZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7
CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKTsKKyAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9i
amVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5yZWZlcmVuY2VFcnJvckNvbnN0cnVjdG9yKCktPmVy
cm9yU3RydWN0dXJlKCksIG1lc3NhZ2UsIGFwcGVuZGVyLCBUeXBlTm90aGluZywgdHJ1ZSk7CiB9
CiAKLUpTT2JqZWN0KiBjcmVhdGVTeW50YXhFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCitKU09iamVjdCogY3JlYXRlU3ludGF4RXJyb3Io
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEVycm9ySW5zdGFuY2U6OlNv
dXJjZUFwcGVuZGVyIGFwcGVuZGVyKQogewogICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5KCkp
OwotICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBn
bG9iYWxPYmplY3QtPnN5bnRheEVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwg
bWVzc2FnZSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKTsKKyAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMs
IGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5zeW50YXhFcnJvckNvbnN0cnVjdG9y
KCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UsIGFwcGVuZGVyLCBUeXBlTm90aGluZywgdHJ1
ZSk7CiB9CiAKLUpTT2JqZWN0KiBjcmVhdGVUeXBlRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorSlNPYmplY3QqIGNyZWF0ZVR5cGVFcnJv
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXJyb3JJbnN0YW5jZTo6
U291cmNlQXBwZW5kZXIgYXBwZW5kZXIsIFJ1bnRpbWVUeXBlIHR5cGUpCiB7CiAgICAgQVNTRVJU
KCFtZXNzYWdlLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShn
bG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdC0+dHlwZUVycm9yQ29uc3RydWN0b3IoKS0+
ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICByZXR1cm4gRXJyb3JJbnN0
YW5jZTo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT50eXBl
RXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlLCBhcHBlbmRlciwg
dHlwZSwgdHJ1ZSk7CiB9CiAKLUpTT2JqZWN0KiBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorSlNPYmplY3QqIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKEV4ZWNTdGF0ZSogZXhlYywgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBw
ZW5kZXIgYXBwZW5kZXIpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZVR5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIEFTQ0lJTGl0ZXJhbCgiTm90IGVub3VnaCBhcmd1bWVudHMiKSk7CisgICAgcmV0dXJuIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIk5vdCBlbm91Z2ggYXJndW1lbnRzIiks
IGFwcGVuZGVyLCBUeXBlTm90aGluZyk7CiB9CiAKLUpTT2JqZWN0KiBjcmVhdGVVUklFcnJvcihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCitKU09i
amVjdCogY3JlYXRlVVJJRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyIGFwcGVuZGVyKQogewogICAgIEFTU0VS
VCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUo
Z2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QtPlVSSUVycm9yQ29uc3RydWN0b3IoKS0+
ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICByZXR1cm4gRXJyb3JJbnN0
YW5jZTo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5VUklF
cnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UsIGFwcGVuZGVyLCBU
eXBlTm90aGluZywgdHJ1ZSk7CiB9CiAKLUpTT2JqZWN0KiBjcmVhdGVFcnJvcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK0pTT2JqZWN0KiBjcmVhdGVPdXRPZk1lbW9y
eUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIgYXBw
ZW5kZXIpIAogewotICAgIHJldHVybiBjcmVhdGVFcnJvcihleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIG1lc3NhZ2UpOworICAgIHJldHVybiBjcmVhdGVFcnJvcihleGVjLCBBU0NJSUxpdGVy
YWwoIk91dCBvZiBtZW1vcnkiKSwgYXBwZW5kZXIpOwogfQogCi1KU09iamVjdCogY3JlYXRlRXZh
bEVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIHJl
dHVybiBjcmVhdGVFdmFsRXJyb3IoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBtZXNzYWdl
KTsKLX0KIAotSlNPYmplY3QqIGNyZWF0ZVJhbmdlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBtZXNzYWdlKTsKLX0KK2NsYXNzIEZpbmRGaXJzdENhbGxl
ckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3IgeworcHVibGljOgorICAgIEZpbmRGaXJzdENhbGxl
ckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3IoQ2FsbEZyYW1lKiBzdGFydENhbGxGcmFtZSkKKyAg
ICAgICAgOiBtX3N0YXJ0Q2FsbEZyYW1lKHN0YXJ0Q2FsbEZyYW1lKQorICAgICAgICAsIG1fZm91
bmRDYWxsRnJhbWUobnVsbHB0cikKKyAgICAgICAgLCBtX2ZvdW5kU3RhcnRDYWxsRnJhbWUoZmFs
c2UpCisgICAgICAgICwgbV9pbmRleCgwKQorICAgIHsgfQogCi1KU09iamVjdCogY3JlYXRlUmVm
ZXJlbmNlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0g
ICAgcmV0dXJuIGNyZWF0ZVJlZmVyZW5jZUVycm9yKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwgbWVzc2FnZSk7Ci19CisgICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFj
a1Zpc2l0b3ImIHZpc2l0b3IpCisgICAgeworICAgICAgICBpZiAoIW1fZm91bmRTdGFydENhbGxG
cmFtZSAmJiAodmlzaXRvci0+Y2FsbEZyYW1lKCkgPT0gbV9zdGFydENhbGxGcmFtZSkpCisgICAg
ICAgICAgICBtX2ZvdW5kU3RhcnRDYWxsRnJhbWUgPSB0cnVlOwogCi1KU09iamVjdCogY3JlYXRl
U3ludGF4RXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0g
ICAgcmV0dXJuIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwg
bWVzc2FnZSk7Ci19CisgICAgICAgIGlmIChtX2ZvdW5kU3RhcnRDYWxsRnJhbWUpIHsKKyAgICAg
ICAgICAgIGlmICh2aXNpdG9yLT5jYWxsRnJhbWUoKS0+Y29kZUJsb2NrKCkpIHsKKyAgICAgICAg
ICAgICAgICBtX2ZvdW5kQ2FsbEZyYW1lID0gdmlzaXRvci0+Y2FsbEZyYW1lKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgfQogCi1KU09iamVjdCogY3JlYXRlVHlwZUVycm9y
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIHJldHVybiBj
cmVhdGVUeXBlRXJyb3IoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBtZXNzYWdlKTsKLX0K
KyAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CisgICAgfQogCi1KU09iamVj
dCogY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoRXhlY1N0YXRlKiBleGVjKQorICAgIENh
bGxGcmFtZSogZm91bmRDYWxsRnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2ZvdW5kQ2FsbEZyYW1l
OyB9CisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisKK3By
aXZhdGU6CisgICAgQ2FsbEZyYW1lKiBtX3N0YXJ0Q2FsbEZyYW1lOworICAgIENhbGxGcmFtZSog
bV9mb3VuZENhbGxGcmFtZTsKKyAgICBib29sIG1fZm91bmRTdGFydENhbGxGcmFtZTsKKyAgICB1
bnNpZ25lZCBtX2luZGV4OworfTsKKworYm9vbCBhZGRFcnJvckluZm9BbmRHZXRCeXRlY29kZU9m
ZnNldChFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNPYmplY3QqIG9iaiwgYm9vbCB1c2VDdXJy
ZW50RnJhbWUsIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgdW5zaWduZWQgJmJ5dGVjb2RlT2Zmc2V0
KSAKIHsKLSAgICByZXR1cm4gY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKTsKKyAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZSA9
IFZlY3RvcjxTdGFja0ZyYW1lPigpOworCisgICAgaWYgKGV4ZWMgJiYgc3RhY2tUcmFjZS5pc0Vt
cHR5KCkpCisgICAgICAgIHZtLmludGVycHJldGVyLT5nZXRTdGFja1RyYWNlKHN0YWNrVHJhY2Up
OworCisgICAgaWYgKCFzdGFja1RyYWNlLmlzRW1wdHkoKSkgeworCisgICAgICAgIEFTU0VSVChl
eGVjID09IHZtLnRvcENhbGxGcmFtZSB8fCBleGVjID09IGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpIHx8IGV4ZWMgPT0gZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCkpOworCisgICAgICAgIFN0YWNrRnJhbWUqIHN0YWNrRnJhbWU7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDAgOyBpIDwgc3RhY2tUcmFjZS5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgc3RhY2tGcmFtZSA9ICZzdGFja1RyYWNlLmF0KGkpOworICAgICAgICAgICAg
aWYgKHN0YWNrRnJhbWUtPmJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGJ5dGVjb2RlT2Zmc2V0KSB7CisgICAgICAgICAgICBG
aW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yIGZ1bmN0b3IoZXhlYyk7Cisg
ICAgICAgICAgICB2bS50b3BDYWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rvcik7CisgICAgICAgICAg
ICBjYWxsRnJhbWUgPSBmdW5jdG9yLmZvdW5kQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICB1bnNp
Z25lZCBzdGFja0luZGV4ID0gZnVuY3Rvci5pbmRleCgpOworICAgICAgICAgICAgYnl0ZWNvZGVP
ZmZzZXQgPSBzdGFja1RyYWNlLmF0KHN0YWNrSW5kZXgpLmJ5dGVjb2RlT2Zmc2V0OworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBsaW5lOworICAgICAgICB1bnNpZ25lZCBj
b2x1bW47CisgICAgICAgIHN0YWNrRnJhbWUtPmNvbXB1dGVMaW5lQW5kQ29sdW1uKGxpbmUsIGNv
bHVtbik7CisgICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5saW5l
LCBqc051bWJlcihsaW5lKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKKyAgICAgICAgb2JqLT5w
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbHVtbiwganNOdW1iZXIoY29sdW1uKSwg
UmVhZE9ubHkgfCBEb250RGVsZXRlKTsKKworICAgICAgICBpZiAoIXN0YWNrRnJhbWUtPnNvdXJj
ZVVSTC5pc0VtcHR5KCkpCisgICAgICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+c291cmNlVVJMLCBqc1N0cmluZygmdm0sIHN0YWNrRnJhbWUtPnNvdXJjZVVSTCks
IFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CisgICAgCisgICAgICAgIGlmICghdXNlQ3VycmVudEZy
YW1lKQorICAgICAgICAgICAgc3RhY2tUcmFjZS5yZW1vdmUoMCk7CisgICAgICAgIG9iai0+cHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zdGFjaywgdm0uaW50ZXJwcmV0ZXItPnN0YWNr
VHJhY2VBc1N0cmluZyh2bS50b3BDYWxsRnJhbWUsIHN0YWNrVHJhY2UpLCBEb250RW51bSk7CisK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAotSlNP
YmplY3QqIGNyZWF0ZVVSSUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQordm9pZCBhZGRFcnJvckluZm8oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogb2JqLCBi
b29sIHVzZUN1cnJlbnRGcmFtZSkKIHsKLSAgICByZXR1cm4gY3JlYXRlVVJJRXJyb3IoZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBtZXNzYWdlKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSA9IG51bGxwdHI7CisgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSAwOworICAgIGFkZEVy
cm9ySW5mb0FuZEdldEJ5dGVjb2RlT2Zmc2V0KGV4ZWMsIGV4ZWMtPnZtKCksIG9iaiwgdXNlQ3Vy
cmVudEZyYW1lLCBjYWxsRnJhbWUsIGJ5dGVjb2RlT2Zmc2V0KTsKIH0KIAogSlNPYmplY3QqIGFk
ZEVycm9ySW5mbyhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNPYmplY3QqIGVycm9yLCBpbnQgbGlu
ZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlKQpAQCAtMTYwLDYgKzIxOSw1MyBAQCBKU09iamVj
dCogdGhyb3dTeW50YXhFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIGV4ZWMtPnZt
KCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCJTeW50YXggZXJyb3IiKSkpOwogfQogCisKK0pTT2JqZWN0KiBjcmVhdGVFcnJvcihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICByZXR1cm4gY3JlYXRl
RXJyb3IoZXhlYywgbWVzc2FnZSwgbnVsbHB0cik7Cit9CisKK0pTT2JqZWN0KiBjcmVhdGVFdmFs
RXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgcmV0
dXJuIGNyZWF0ZUV2YWxFcnJvcihleGVjLCBtZXNzYWdlLCBudWxscHRyKTsKK30KKworSlNPYmpl
Y3QqIGNyZWF0ZVJhbmdlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCit7CisgICAgcmV0dXJuIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgbWVzc2FnZSwgbnVsbHB0
cik7Cit9CisKK0pTT2JqZWN0KiBjcmVhdGVSZWZlcmVuY2VFcnJvcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlUmVmZXJlbmNlRXJy
b3IoZXhlYywgbWVzc2FnZSwgbnVsbHB0cik7Cit9CisKK0pTT2JqZWN0KiBjcmVhdGVTeW50YXhF
cnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICByZXR1
cm4gY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgbWVzc2FnZSwgbnVsbHB0cik7Cit9CisKK0pTT2Jq
ZWN0KiBjcmVhdGVUeXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCit7CisgICAgcmV0dXJuIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtZXNzYWdlLCBudWxscHRy
LCBUeXBlTm90aGluZyk7Cit9CisKK0pTT2JqZWN0KiBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGNyZWF0ZU5vdEVub3VnaEFyZ3Vt
ZW50c0Vycm9yKGV4ZWMsIG51bGxwdHIpOworfQorCitKU09iamVjdCogY3JlYXRlVVJJRXJyb3Io
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgcmV0dXJuIGNy
ZWF0ZVVSSUVycm9yKGV4ZWMsIG1lc3NhZ2UsIG51bGxwdHIpOworfQorCitKU09iamVjdCogY3Jl
YXRlT3V0T2ZNZW1vcnlFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGNyZWF0
ZU91dE9mTWVtb3J5RXJyb3IoZXhlYywgbnVsbHB0cik7Cit9CisKKwogY29uc3QgQ2xhc3NJbmZv
IFN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbjo6c19pbmZvID0geyAiRnVuY3Rpb24iLCAmQmFz
ZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFN0cmljdE1vZGVUeXBlRXJyb3JGdW5j
dGlvbikgfTsKIAogdm9pZCBTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb246OmRlc3Ryb3koSlND
ZWxsKiBjZWxsKQpkaWZmIC0tZ2l0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9y
LmggU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuaAppbmRleCA0Y2MxY2RhLi44
MjE2NmVmIDEwMDY0NAotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuaAor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuaApAQCAtMjMsMTEgKzIzLDEz
IEBACiAjaWZuZGVmIEVycm9yX2gKICNkZWZpbmUgRXJyb3JfaAogCisjaW5jbHVkZSAiRXJyb3JJ
bnN0YW5jZS5oIgogI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKICNpbmNsdWRlICJJbnRl
cnByZXRlci5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAK
KwogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEV4ZWNTdGF0ZTsKQEAgLTM3LDI4ICszOSwzMyBA
QCBjbGFzcyBKU09iamVjdDsKIGNsYXNzIFNvdXJjZUNvZGU7CiBjbGFzcyBTdHJ1Y3R1cmU7CiAK
LS8vIE1ldGhvZHMgdG8gY3JlYXRlIGEgcmFuZ2Ugb2YgaW50ZXJuYWwgZXJyb3JzLgotSlNPYmpl
Y3QqIGNyZWF0ZUVycm9yKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJik7Ci1KU09iamVj
dCogY3JlYXRlRXZhbEVycm9yKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJik7Ci1KU09i
amVjdCogY3JlYXRlUmFuZ2VFcnJvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYpOwot
SlNPYmplY3QqIGNyZWF0ZVJlZmVyZW5jZUVycm9yKEpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3Ry
aW5nJik7Ci1KU09iamVjdCogY3JlYXRlU3ludGF4RXJyb3IoSlNHbG9iYWxPYmplY3QqLCBjb25z
dCBTdHJpbmcmKTsKLUpTT2JqZWN0KiBjcmVhdGVUeXBlRXJyb3IoSlNHbG9iYWxPYmplY3QqLCBj
b25zdCBTdHJpbmcmKTsKLUpTT2JqZWN0KiBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihK
U0dsb2JhbE9iamVjdCopOwotSlNPYmplY3QqIGNyZWF0ZVVSSUVycm9yKEpTR2xvYmFsT2JqZWN0
KiwgY29uc3QgU3RyaW5nJik7CiAvLyBFeGVjU3RhdGUgd3JhcHBlcnMuCitKU09iamVjdCogY3Jl
YXRlRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiwgRXJyb3JJbnN0YW5jZTo6U291cmNl
QXBwZW5kZXIpOworSlNPYmplY3QqIGNyZWF0ZUV2YWxFcnJvcihFeGVjU3RhdGUqLCBjb25zdCBT
dHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlcik7CitKU09iamVjdCogY3JlYXRl
UmFuZ2VFcnJvcihFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3Vy
Y2VBcHBlbmRlcik7CitKU09iamVjdCogY3JlYXRlUmVmZXJlbmNlRXJyb3IoRXhlY1N0YXRlKiwg
Y29uc3QgU3RyaW5nJiwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIpOworSlNPYmplY3Qq
IGNyZWF0ZVN5bnRheEVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYsIEVycm9ySW5zdGFu
Y2U6OlNvdXJjZUFwcGVuZGVyKTsKK0pTT2JqZWN0KiBjcmVhdGVUeXBlRXJyb3IoRXhlY1N0YXRl
KiwgY29uc3QgU3RyaW5nJiwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIsIFJ1bnRpbWVU
eXBlKTsKK0pTT2JqZWN0KiBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihFeGVjU3RhdGUq
LCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlcik7CitKU09iamVjdCogY3JlYXRlVVJJRXJy
b3IoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5k
ZXIpOworSlNPYmplY3QqIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoRXhlY1N0YXRlKiwgRXJyb3JJ
bnN0YW5jZTo6U291cmNlQXBwZW5kZXIpOworCisKIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0
KiBjcmVhdGVFcnJvcihFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKLUpTT2JqZWN0KiBjcmVh
dGVFdmFsRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7CitKU19FWFBPUlRfUFJJVkFU
RSBKU09iamVjdCogY3JlYXRlRXZhbEVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOwog
SlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZVJhbmdlRXJyb3IoRXhlY1N0YXRlKiwg
Y29uc3QgU3RyaW5nJik7CiBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY3JlYXRlUmVmZXJl
bmNlRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7CiBKU19FWFBPUlRfUFJJVkFURSBK
U09iamVjdCogY3JlYXRlU3ludGF4RXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7CiBK
U19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY3JlYXRlVHlwZUVycm9yKEV4ZWNTdGF0ZSosIGNv
bnN0IFN0cmluZyYpOwogSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKEV4ZWNTdGF0ZSopOwotSlNPYmplY3QqIGNyZWF0ZVVSSUVycm9yKEV4
ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOworSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNy
ZWF0ZVVSSUVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOworSlNfRVhQT1JUX1BSSVZB
VEUgSlNPYmplY3QqIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoRXhlY1N0YXRlKik7CisKKworYm9v
bCBhZGRFcnJvckluZm9BbmRHZXRCeXRlY29kZU9mZnNldChFeGVjU3RhdGUqLCBWTSYsIEpTT2Jq
ZWN0KiwgYm9vbCwgQ2FsbEZyYW1lKiYsIHVuc2lnbmVkJik7CiAKLS8vIE1ldGhvZHMgdG8gYWRk
IAogYm9vbCBoYXNFcnJvckluZm8oRXhlY1N0YXRlKiwgSlNPYmplY3QqIGVycm9yKTsKLS8vIEV4
ZWNTdGF0ZSB3cmFwcGVycy4KK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkRXJyb3JJbmZvKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgYm9vbCk7IAogSlNPYmplY3QqIGFkZEVycm9ySW5mbyhFeGVj
U3RhdGUqLCBKU09iamVjdCogZXJyb3IsIGludCBsaW5lLCBjb25zdCBTb3VyY2VDb2RlJik7CiAK
IC8vIE1ldGhvZHMgdG8gdGhyb3cgRXJyb3JzLgpkaWZmIC0tZ2l0IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3BwCmluZGV4IDZkYTFhNDIuLjMwYzRmYWEgMTAwNjQ0
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNwcAor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5jcHAKQEAg
LTUyLDEwICs1Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50ZXJwcmV0ZXI6
OmNvbnN0cnVjdFdpdGhFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0CiB7CiAgICAgSlNWYWx1ZSBt
ZXNzYWdlID0gZXhlYy0+YXJndW1lbnRDb3VudCgpID8gZXhlYy0+YXJndW1lbnQoMCkgOiBqc1Vu
ZGVmaW5lZCgpOwogICAgIFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1cmUgPSBhc0ludGVybmFsRnVu
Y3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+ZXJyb3JTdHJ1Y3R1cmUoKTsK
LSAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsKLSAgICBleGVjLT52bSgpLmludGVy
cHJldGVyLT5nZXRTdGFja1RyYWNlKHN0YWNrVHJhY2UsIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6
ZV90Pjo6bWF4KCkpOwotICAgIHN0YWNrVHJhY2UucmVtb3ZlKDApOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsIGVycm9yU3RydWN0dXJlLCBt
ZXNzYWdlLCBzdGFja1RyYWNlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShFcnJvcklu
c3RhbmNlOjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1cmUsIG1lc3NhZ2UsIG51bGxwdHIsIFR5
cGVOb3RoaW5nLCBmYWxzZSkpOwogfQogCiBDb25zdHJ1Y3RUeXBlIEVycm9yQ29uc3RydWN0b3I6
OmdldENvbnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkK
QEAgLTY4LDEwICs2NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50ZXJwcmV0
ZXI6OmNhbGxFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVl
IG1lc3NhZ2UgPSBleGVjLT5hcmd1bWVudENvdW50KCkgPyBleGVjLT5hcmd1bWVudCgwKSA6IGpz
VW5kZWZpbmVkKCk7CiAgICAgU3RydWN0dXJlKiBlcnJvclN0cnVjdHVyZSA9IGFzSW50ZXJuYWxG
dW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpLT5lcnJvclN0cnVjdHVyZSgp
OwotICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlOwotICAgIGV4ZWMtPnZtKCkuaW50
ZXJwcmV0ZXItPmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSwgc3RkOjpudW1lcmljX2xpbWl0czxz
aXplX3Q+OjptYXgoKSk7Ci0gICAgc3RhY2tUcmFjZS5yZW1vdmUoMCk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1cmUs
IG1lc3NhZ2UsIHN0YWNrVHJhY2UpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEVycm9y
SW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwg
VHlwZU5vdGhpbmcsIGZhbHNlKSk7CiB9CiAKIENhbGxUeXBlIEVycm9yQ29uc3RydWN0b3I6Omdl
dENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKZGlmZiAtLWdpdCBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcCBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAppbmRleCBhZGQwYjIxLi4yYmYxNDkzIDEw
MDY0NAotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCkBAIC0y
Myw2ICsyMyw4IEBACiAKICNpbmNsdWRlICJKU1Njb3BlLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgiCisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzUsMTUgKzM3LDE1NiBAQCBFcnJv
ckluc3RhbmNlOjpFcnJvckluc3RhbmNlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7
CiB9CiAKLXZvaWQgRXJyb3JJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlKQorc3RhdGljIHZv
aWQgYXBwZW5kU291cmNlVG9FcnJvcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRXJyb3JJbnN0YW5j
ZSogZXhjZXB0aW9uLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK3sKKyAgICBFcnJvckluc3Rh
bmNlOjpTb3VyY2VBcHBlbmRlciBhcHBlbmRlciA9IGV4Y2VwdGlvbi0+c291cmNlQXBwZW5kZXIo
KTsKKyAgICBleGNlcHRpb24tPmNsZWFyU291cmNlQXBwZW5kZXIoKTsKKyAgICBSdW50aW1lVHlw
ZSB0eXBlID0gZXhjZXB0aW9uLT5ydW50aW1lVHlwZUZvckNhdXNlKCk7CisgICAgZXhjZXB0aW9u
LT5jbGVhclJ1bnRpbWVUeXBlRm9yQ2F1c2UoKTsKKworICAgIGlmICghY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKS0+aGFzRXhwcmVzc2lvbkluZm8oKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IGludCBzdGFydE9mZnNldCA9IDA7CisgICAgaW50IGVuZE9mZnNldCA9IDA7CisgICAgaW50IGRp
dm90UG9pbnQgPSAwOworICAgIHVuc2lnbmVkIGxpbmUgPSAwOworICAgIHVuc2lnbmVkIGNvbHVt
biA9IDA7CisgICAgCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpOworICAgIGNvZGVCbG9jay0+ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQo
Ynl0ZWNvZGVPZmZzZXQsIGRpdm90UG9pbnQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUs
IGNvbHVtbik7CisgICAgCisgICAgaW50IGV4cHJlc3Npb25TdGFydCA9IGRpdm90UG9pbnQgLSBz
dGFydE9mZnNldDsKKyAgICBpbnQgZXhwcmVzc2lvblN0b3AgPSBkaXZvdFBvaW50ICsgZW5kT2Zm
c2V0OworCisgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcgPSBjb2RlQmxvY2stPnNvdXJj
ZSgpLT5zb3VyY2UoKTsKKyAgICBpZiAoIWV4cHJlc3Npb25TdG9wIHx8IGV4cHJlc3Npb25TdGFy
dCA+IHN0YXRpY19jYXN0PGludD4oc291cmNlU3RyaW5nLmxlbmd0aCgpKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIFZNKiB2bSA9ICZjYWxsRnJhbWUtPnZtKCk7CisgICAgSlNWYWx1ZSBq
c01lc3NhZ2UgPSBleGNlcHRpb24tPmdldERpcmVjdCgqdm0sIHZtLT5wcm9wZXJ0eU5hbWVzLT5t
ZXNzYWdlKTsKKyAgICBpZiAoIWpzTWVzc2FnZSB8fCAhanNNZXNzYWdlLmlzU3RyaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBTdHJpbmcgbWVzc2FnZSA9IGFzU3RyaW5nKGpzTWVz
c2FnZSktPnZhbHVlKGNhbGxGcmFtZSk7CisgICAgaWYgKGV4cHJlc3Npb25TdGFydCA8IGV4cHJl
c3Npb25TdG9wKQorICAgICAgICBtZXNzYWdlID0gYXBwZW5kZXIobWVzc2FnZSwgY29kZUJsb2Nr
LT5zb3VyY2UoKS0+Z2V0UmFuZ2UoZXhwcmVzc2lvblN0YXJ0LCBleHByZXNzaW9uU3RvcCkgLCB0
eXBlLCBFcnJvckluc3RhbmNlOjpGb3VuZEV4YWN0U291cmNlKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgLy8gTm8gcmFuZ2UgaW5mb3JtYXRpb24sIHNvIGdpdmUgYSBmZXcgY2hhcmFjdGVycyBvZiBj
b250ZXh0LgorICAgICAgICBjb25zdCBTdHJpbmdJbXBsKiBkYXRhID0gc291cmNlU3RyaW5nLmlt
cGwoKTsKKyAgICAgICAgaW50IGRhdGFMZW5ndGggPSBzb3VyY2VTdHJpbmcubGVuZ3RoKCk7Cisg
ICAgICAgIGludCBzdGFydCA9IGV4cHJlc3Npb25TdGFydDsKKyAgICAgICAgaW50IHN0b3AgPSBl
eHByZXNzaW9uU3RhcnQ7CisgICAgICAgIC8vIEdldCB1cCB0byAyMCBjaGFyYWN0ZXJzIG9mIGNv
bnRleHQgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0IG9mIHRoZSBkaXZvdCwgY2xhbXBpbmcgdG8gdGhl
IGxpbmUuCisgICAgICAgIC8vIFRoZW4gc3RyaXAgd2hpdGVzcGFjZS4KKyAgICAgICAgd2hpbGUg
KHN0YXJ0ID4gMCAmJiAoZXhwcmVzc2lvblN0YXJ0IC0gc3RhcnQgPCAyMCkgJiYgKCpkYXRhKVtz
dGFydCAtIDFdICE9ICdcbicpCisgICAgICAgICAgICBzdGFydC0tOworICAgICAgICB3aGlsZSAo
c3RhcnQgPCAoZXhwcmVzc2lvblN0YXJ0IC0gMSkgJiYgaXNTdHJXaGl0ZVNwYWNlKCgqZGF0YSlb
c3RhcnRdKSkKKyAgICAgICAgICAgIHN0YXJ0Kys7CisgICAgICAgIHdoaWxlIChzdG9wIDwgZGF0
YUxlbmd0aCAmJiAoc3RvcCAtIGV4cHJlc3Npb25TdGFydCA8IDIwKSAmJiAoKmRhdGEpW3N0b3Bd
ICE9ICdcbicpCisgICAgICAgICAgICBzdG9wKys7CisgICAgICAgIHdoaWxlIChzdG9wID4gZXhw
cmVzc2lvblN0YXJ0ICYmIGlzU3RyV2hpdGVTcGFjZSgoKmRhdGEpW3N0b3AgLSAxXSkpCisgICAg
ICAgICAgICBzdG9wLS07CisgICAgICAgIG1lc3NhZ2UgPSBhcHBlbmRlcihtZXNzYWdlLCBjb2Rl
QmxvY2stPnNvdXJjZSgpLT5nZXRSYW5nZShzdGFydCwgc3RvcCksIHR5cGUsIEVycm9ySW5zdGFu
Y2U6OkZvdW5kQXBwcm94aW1hdGVTb3VyY2UpOworICAgIH0KKyAgICBleGNlcHRpb24tPnB1dERp
cmVjdCgqdm0sIHZtLT5wcm9wZXJ0eU5hbWVzLT5tZXNzYWdlLCBqc1N0cmluZyh2bSwgbWVzc2Fn
ZSkpOworCit9CisKK2NsYXNzIEZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0
b3IgeworcHVibGljOgorICAgIEZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0
b3IoQ2FsbEZyYW1lKiBzdGFydENhbGxGcmFtZSkKKyAgICAgICAgOiBtX3N0YXJ0Q2FsbEZyYW1l
KHN0YXJ0Q2FsbEZyYW1lKQorICAgICAgICAsIG1fZm91bmRDYWxsRnJhbWUobnVsbHB0cikKKyAg
ICAgICAgLCBtX2ZvdW5kU3RhcnRDYWxsRnJhbWUoZmFsc2UpCisgICAgICAgICwgbV9pbmRleCgw
KQorICAgIHsgfQorCisgICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFja1Zp
c2l0b3ImIHZpc2l0b3IpCisgICAgeworICAgICAgICBpZiAoIW1fZm91bmRTdGFydENhbGxGcmFt
ZSAmJiAodmlzaXRvci0+Y2FsbEZyYW1lKCkgPT0gbV9zdGFydENhbGxGcmFtZSkpCisgICAgICAg
ICAgICBtX2ZvdW5kU3RhcnRDYWxsRnJhbWUgPSB0cnVlOworCisgICAgICAgIGlmIChtX2ZvdW5k
U3RhcnRDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIGlmICh2aXNpdG9yLT5jYWxsRnJhbWUoKS0+
Y29kZUJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBtX2ZvdW5kQ2FsbEZyYW1lID0gdmlzaXRv
ci0+Y2FsbEZyYW1lKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9u
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOworICAgIH0KKworICAgIENhbGxG
cmFtZSogZm91bmRDYWxsRnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2ZvdW5kQ2FsbEZyYW1lOyB9
CisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisKK3ByaXZh
dGU6CisgICAgQ2FsbEZyYW1lKiBtX3N0YXJ0Q2FsbEZyYW1lOworICAgIENhbGxGcmFtZSogbV9m
b3VuZENhbGxGcmFtZTsKKyAgICBib29sIG1fZm91bmRTdGFydENhbGxGcmFtZTsKKyAgICB1bnNp
Z25lZCBtX2luZGV4OworfTsKKworc3RhdGljIGJvb2wgYWRkRXJyb3JJbmZvQW5kR2V0Qnl0ZWNv
ZGVPZmZzZXQoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIEpTT2JqZWN0KiBvYmosIGJvb2wgdXNl
Q3VycmVudEZyYW1lLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIHVuc2lnbmVkICZieXRlY29kZU9m
ZnNldCkKK3sKKyAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZSA9IFZlY3RvcjxTdGFj
a0ZyYW1lPigpOworCisgICAgaWYgKGV4ZWMgJiYgc3RhY2tUcmFjZS5pc0VtcHR5KCkpCisgICAg
ICAgIHZtLmludGVycHJldGVyLT5nZXRTdGFja1RyYWNlKHN0YWNrVHJhY2UpOworCisgICAgaWYg
KCFzdGFja1RyYWNlLmlzRW1wdHkoKSkgeworCisgICAgICAgIEFTU0VSVChleGVjID09IHZtLnRv
cENhbGxGcmFtZSB8fCBleGVjID09IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpIHx8IGV4ZWMgPT0gZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVj
KCkpOworCisgICAgICAgIFN0YWNrRnJhbWUqIHN0YWNrRnJhbWU7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDAgOyBpIDwgc3RhY2tUcmFjZS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
c3RhY2tGcmFtZSA9ICZzdGFja1RyYWNlLmF0KGkpOworICAgICAgICAgICAgaWYgKHN0YWNrRnJh
bWUtPmJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGJ5dGVjb2RlT2Zmc2V0KSB7CisgICAgICAgICAgICBGaW5kRmlyc3RDYWxs
ZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yIGZ1bmN0b3IoZXhlYyk7CisgICAgICAgICAgICB2
bS50b3BDYWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rvcik7CisgICAgICAgICAgICBjYWxsRnJhbWUg
PSBmdW5jdG9yLmZvdW5kQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBzdGFja0lu
ZGV4ID0gZnVuY3Rvci5pbmRleCgpOworICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXQgPSBzdGFj
a1RyYWNlLmF0KHN0YWNrSW5kZXgpLmJ5dGVjb2RlT2Zmc2V0OworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICB1bnNpZ25lZCBsaW5lOworICAgICAgICB1bnNpZ25lZCBjb2x1bW47CisgICAg
ICAgIHN0YWNrRnJhbWUtPmNvbXB1dGVMaW5lQW5kQ29sdW1uKGxpbmUsIGNvbHVtbik7CisgICAg
ICAgIG9iai0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5saW5lLCBqc051bWJlcihs
aW5lKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKKyAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPmNvbHVtbiwganNOdW1iZXIoY29sdW1uKSwgUmVhZE9ubHkgfCBE
b250RGVsZXRlKTsKKworICAgICAgICBpZiAoIXN0YWNrRnJhbWUtPnNvdXJjZVVSTC5pc0VtcHR5
KCkpCisgICAgICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+c291
cmNlVVJMLCBqc1N0cmluZygmdm0sIHN0YWNrRnJhbWUtPnNvdXJjZVVSTCksIFJlYWRPbmx5IHwg
RG9udERlbGV0ZSk7CisgICAgCisgICAgICAgIGlmICghdXNlQ3VycmVudEZyYW1lKQorICAgICAg
ICAgICAgc3RhY2tUcmFjZS5yZW1vdmUoMCk7CisgICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5zdGFjaywgdm0uaW50ZXJwcmV0ZXItPnN0YWNrVHJhY2VBc1N0cmlu
Zyh2bS50b3BDYWxsRnJhbWUsIHN0YWNrVHJhY2UpLCBEb250RW51bSk7CisKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBFcnJvckluc3Rh
bmNlOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBib29sIHVzZUN1cnJlbnRGcmFtZSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIGlmICghbWVzc2Fn
ZS5pc051bGwoKSkKICAgICAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5tZXNz
YWdlLCBqc1N0cmluZygmdm0sIG1lc3NhZ2UpLCBEb250RW51bSk7Ci0gICAgCi0gICAgaWYgKCFz
dGFja1RyYWNlLmlzRW1wdHkoKSkKLSAgICAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5zdGFjaywgdm0uaW50ZXJwcmV0ZXItPnN0YWNrVHJhY2VBc1N0cmluZyh2bS50b3BDYWxs
RnJhbWUsIHN0YWNrVHJhY2UpLCBEb250RW51bSk7CisKKyAgICB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCA9IGhhc1NvdXJjZUFwcGVuZGVyKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBu
dWxscHRyOworICAgIGJvb2wgaGFzVHJhY2UgPSBhZGRFcnJvckluZm9BbmRHZXRCeXRlY29kZU9m
ZnNldChleGVjLCB2bSwgdGhpcywgdXNlQ3VycmVudEZyYW1lLCBjYWxsRnJhbWUsIGJ5dGVjb2Rl
T2Zmc2V0KTsKKworICAgIGlmIChoYXNUcmFjZSAmJiBjYWxsRnJhbWUgJiYgaGFzU291cmNlQXBw
ZW5kZXIoKSkgeworICAgICAgICBpZiAoY2FsbEZyYW1lICYmIGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCkpIAorICAgICAgICAgICAgYXBwZW5kU291cmNlVG9FcnJvcihjYWxsRnJhbWUsIHRoaXMsIGJ5
dGVjb2RlT2Zmc2V0KTsKKyAgICB9CiB9CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmggU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oCmluZGV4IGMyZTNiOWMuLjNm
NTg0YTkgMTAwNjQ0Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3Rh
bmNlLmgKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaApA
QCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiUnVu
dGltZVR5cGUuaCIKICNpbmNsdWRlICJTb3VyY2VQcm92aWRlci5oIgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTMxLDYgKzMyLDkgQEAgY2xhc3MgRXJy
b3JJbnN0YW5jZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBl
ZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKIAorICAgIGVudW0gU291cmNlVGV4dFdoZXJlRXJy
b3JPY2N1cnJlZCB7IEZvdW5kRXhhY3RTb3VyY2UsIEZvdW5kQXBwcm94aW1hdGVTb3VyY2UgfTsK
KyAgICB0eXBlZGVmIFN0cmluZyAoKlNvdXJjZUFwcGVuZGVyKSAoY29uc3QgU3RyaW5nJiBvcmln
aW5hbE1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVGV4dCwgUnVudGltZVR5cGUsIFNvdXJj
ZVRleHRXaGVyZUVycm9yT2NjdXJyZWQpOworCiAgICAgREVDTEFSRV9JTkZPOwogCiAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCkBAIC0zOCwyMCArNDIsMjEgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhFcnJvckluc3RhbmNlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBFcnJvckluc3RhbmNlKiBjcmVhdGUoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBWZWN0b3I8U3RhY2tG
cmFtZT4gc3RhY2tUcmFjZSA9IFZlY3RvcjxTdGFja0ZyYW1lPigpKQorICAgIHN0YXRpYyBFcnJv
ckluc3RhbmNlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFNvdXJjZUFwcGVuZGVyIGFwcGVuZGVyID0g
bnVsbHB0ciwgUnVudGltZVR5cGUgdHlwZSA9IFR5cGVOb3RoaW5nLCBib29sIHVzZUN1cnJlbnRG
cmFtZSA9IHRydWUpCiAgICAgewogICAgICAgICBFcnJvckluc3RhbmNlKiBpbnN0YW5jZSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEVycm9ySW5zdGFuY2U+KHZtLmhlYXApKSBFcnJvcklu
c3RhbmNlKHZtLCBzdHJ1Y3R1cmUpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24o
dm0sIG1lc3NhZ2UsIHN0YWNrVHJhY2UpOworICAgICAgICBpbnN0YW5jZS0+bV9zb3VyY2VBcHBl
bmRlciA9IGFwcGVuZGVyOworICAgICAgICBpbnN0YW5jZS0+bV9ydW50aW1lVHlwZUZvckNhdXNl
ID0gdHlwZTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIHZtLCBtZXNz
YWdlLCB1c2VDdXJyZW50RnJhbWUpOwogICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQog
Ci0gICAgc3RhdGljIEVycm9ySW5zdGFuY2UqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU1ZhbHVlIG1lc3NhZ2UsIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFj
a1RyYWNlID0gVmVjdG9yPFN0YWNrRnJhbWU+KCkpCisgICAgc3RhdGljIEVycm9ySW5zdGFuY2Uq
IGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1ZhbHVlIG1l
c3NhZ2UsIFNvdXJjZUFwcGVuZGVyIGFwcGVuZGVyID0gbnVsbHB0ciwgUnVudGltZVR5cGUgdHlw
ZSA9IFR5cGVOb3RoaW5nLCBib29sIHVzZUN1cnJlbnRGcmFtZSA9IHRydWUpCiAgICAgewotICAg
ICAgICByZXR1cm4gY3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgbWVzc2FnZS5pc1VuZGVm
aW5lZCgpID8gU3RyaW5nKCkgOiBtZXNzYWdlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwg
c3RhY2tUcmFjZSk7CisgICAgICAgIHJldHVybiBjcmVhdGUoZXhlYywgZXhlYy0+dm0oKSwgc3Ry
dWN0dXJlLCBtZXNzYWdlLmlzVW5kZWZpbmVkKCkgPyBTdHJpbmcoKSA6IG1lc3NhZ2UudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpLCBhcHBlbmRlciwgdHlwZSwgdXNlQ3VycmVudEZyYW1lKTsK
ICAgICB9CiAKLSAgICBlbnVtIFNvdXJjZVRleHRXaGVyZUVycm9yT2NjdXJyZWQgeyBGb3VuZEV4
YWN0U291cmNlLCBGb3VuZEFwcHJveGltYXRlU291cmNlIH07Ci0gICAgdHlwZWRlZiBTdHJpbmcg
KCpTb3VyY2VBcHBlbmRlcikgKGNvbnN0IFN0cmluZyYgb3JpZ2luYWxNZXNzYWdlLCBjb25zdCBT
dHJpbmcmIHNvdXJjZVRleHQsIFJ1bnRpbWVUeXBlLCBTb3VyY2VUZXh0V2hlcmVFcnJvck9jY3Vy
cmVkKTsKKyAgICBzdGF0aWMgdm9pZCBhZGRFcnJvckluZm8oRXhlY1N0YXRlKiwgVk0mLCBKU09i
amVjdCosIGJvb2wgPSB0cnVlKTsKIAogICAgIGJvb2wgaGFzU291cmNlQXBwZW5kZXIoKSBjb25z
dCB7IHJldHVybiAhIW1fc291cmNlQXBwZW5kZXI7IH0KICAgICBTb3VyY2VBcHBlbmRlciBzb3Vy
Y2VBcHBlbmRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlQXBwZW5kZXI7IH0KQEAgLTY0LDcg
KzY5LDcgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IEVycm9ySW5zdGFuY2Uo
Vk0mLCBTdHJ1Y3R1cmUqKTsKIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBjb25zdCBT
dHJpbmcmLCBWZWN0b3I8U3RhY2tGcmFtZT4gPSBWZWN0b3I8U3RhY2tGcmFtZT4oKSk7CisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqLCBWTSYsIGNvbnN0IFN0cmluZyYsIGJvb2wg
dXNlQ3VycmVudEZyYW1lID0gdHJ1ZSk7CiAKICAgICBTb3VyY2VBcHBlbmRlciBtX3NvdXJjZUFw
cGVuZGVyIHsgbnVsbHB0ciB9OwogICAgIFJ1bnRpbWVUeXBlIG1fcnVudGltZVR5cGVGb3JDYXVz
ZSB7IFR5cGVOb3RoaW5nIH07CmRpZmYgLS1naXQgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXJyb3JQcm90b3R5cGUuY3BwIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9y
UHJvdG90eXBlLmNwcAppbmRleCBjZjhmZjJhLi41YmMyZWMzIDEwMDY0NAotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKQEAgLTU0LDkgKzU0LDkgQEAgRXJy
b3JQcm90b3R5cGU6OkVycm9yUHJvdG90eXBlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CiB7CiB9CiAKLXZvaWQgRXJyb3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqKQordm9pZCBFcnJvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtLCAiIik7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCksIHZtLCAiIik7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKCZ2
bSwgU3RyaW5nKEFTQ0lJTGl0ZXJhbCgiRXJyb3IiKSkpLCBEb250RW51bSk7CiB9CmRpZmYgLS1n
aXQgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRnV6ei5jcHAgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uRnV6ei5jcHAKaW5kZXggYzgzNTYwNS4u
NzQ0YjFhNiAxMDA2NDQKLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlv
bkZ1enouY3BwCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25GdXp6
LmNwcApAQCAtNDgsNyArNDgsNyBAQCB2b2lkIGRvRXhjZXB0aW9uRnV6emluZyhFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IGNoYXIqIHdoZXJlLCB2b2lkKiByZXR1cm5QQykKICAgICBpZiAoZmlyZVRh
cmdldCA9PSBzX251bWJlck9mRXhjZXB0aW9uRnV6ekNoZWNrcykgewogICAgICAgICBwcmludGYo
IkpTQyBFWENFUFRJT04gRlVaWjogVGhyb3dpbmcgZnV6eiBleGNlcHRpb24gd2l0aCBjYWxsIGZy
YW1lICVwLCBzZWVuIGluICVzIGFuZCByZXR1cm4gYWRkcmVzcyAlcC5cbiIsIGV4ZWMsIHdoZXJl
LCByZXR1cm5QQyk7CiAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oCi0gICAgICAg
ICAgICBleGVjLCBjcmVhdGVFcnJvcihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIEFTQ0lJ
TGl0ZXJhbCgiRXhjZXB0aW9uIEZ1enoiKSkpOworICAgICAgICAgICAgZXhlYywgY3JlYXRlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCJFeGNlcHRpb24gRnV6eiIpKSk7CiAgICAgfQogfQogCmRp
ZmYgLS1naXQgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5j
cHAgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKaW5k
ZXggMTBmYTkzMC4uMjZjOTM1ZCAxMDA2NDQKLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGNlcHRpb25IZWxwZXJzLmNwcApAQCAtNzUsMTEgKzc1LDYgQEAgSlNPYmplY3QqIGNyZWF0
ZVN0YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIGNyZWF0ZVJh
bmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBleGNl
ZWRlZC4iKSk7CiB9CiAKLUpTT2JqZWN0KiBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gY3JlYXRlUmFuZ2VFcnJvcihn
bG9iYWxPYmplY3QsIEFTQ0lJTGl0ZXJhbCgiTWF4aW11bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVk
ZWQuIikpOwotfQotCiBKU09iamVjdCogY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQogewogICAgIGlmIChpZGVudC5p
bXBsKCktPmlzU3ltYm9sKCkpIHsKQEAgLTIzOSw0OCArMjM0LDQ0IEBAIHN0YXRpYyBTdHJpbmcg
aW52YWxpZFBhcmFtZXRlckluc3RhbmNlb2ZTb3VyY2VBcHBlbmRlcihjb25zdCBTdHJpbmcmIG9y
aWdpbmFsTWVzCiAgICAgcmV0dXJuIG1ha2VTdHJpbmcocmlnaHRIYW5kU2lkZSwgIiBpcyBub3Qg
YSBmdW5jdGlvbi4gKGV2YWx1YXRpbmcgJyIsIHNvdXJjZVRleHQsICInKSIpOwogfQogCi1KU09i
amVjdCogY3JlYXRlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBFcnJvckZhY3RvcnkgZXJyb3JGYWN0
b3J5LCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEVycm9ySW5zdGFuY2U6
OlNvdXJjZUFwcGVuZGVyIGFwcGVuZGVyKQorSlNPYmplY3QqIGNyZWF0ZUVycm9yKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFcnJvckluc3Rh
bmNlOjpTb3VyY2VBcHBlbmRlciBhcHBlbmRlcikKIHsKICAgICBTdHJpbmcgZXJyb3JNZXNzYWdl
ID0gbWFrZVN0cmluZyhlcnJvckRlc2NyaXB0aW9uRm9yVmFsdWUoZXhlYywgdmFsdWUpLT52YWx1
ZShleGVjKSwgJyAnLCBtZXNzYWdlKTsKLSAgICBKU09iamVjdCogZXhjZXB0aW9uID0gZXJyb3JG
YWN0b3J5KGV4ZWMsIGVycm9yTWVzc2FnZSk7CisgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCBlcnJvck1lc3NhZ2UsIGFwcGVuZGVyLCBydW50aW1lVHlwZUZv
clZhbHVlKHZhbHVlKSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvbi0+aXNFcnJvckluc3RhbmNlKCkp
OwotICAgIHN0YXRpY19jYXN0PEVycm9ySW5zdGFuY2UqPihleGNlcHRpb24pLT5zZXRTb3VyY2VB
cHBlbmRlcihhcHBlbmRlcik7Ci0gICAgc3RhdGljX2Nhc3Q8RXJyb3JJbnN0YW5jZSo+KGV4Y2Vw
dGlvbiktPnNldFJ1bnRpbWVUeXBlRm9yQ2F1c2UocnVudGltZVR5cGVGb3JWYWx1ZSh2YWx1ZSkp
OwogICAgIHJldHVybiBleGNlcHRpb247CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVJbnZhbGlkRnVu
Y3Rpb25BcHBseVBhcmFtZXRlckVycm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkK
IHsKLSAgICBKU09iamVjdCogZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1ha2VT
dHJpbmcoInNlY29uZCBhcmd1bWVudCB0byBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkgbXVzdCBi
ZSBhbiBBcnJheS1saWtlIG9iamVjdCIpKTsKKyAgICBKU09iamVjdCogZXhjZXB0aW9uID0gY3Jl
YXRlVHlwZUVycm9yKGV4ZWMsIG1ha2VTdHJpbmcoInNlY29uZCBhcmd1bWVudCB0byBGdW5jdGlv
bi5wcm90b3R5cGUuYXBwbHkgbXVzdCBiZSBhbiBBcnJheS1saWtlIG9iamVjdCIpLCBkZWZhdWx0
U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUodmFsdWUpKTsKICAgICBBU1NFUlQo
ZXhjZXB0aW9uLT5pc0Vycm9ySW5zdGFuY2UoKSk7Ci0gICAgc3RhdGljX2Nhc3Q8RXJyb3JJbnN0
YW5jZSo+KGV4Y2VwdGlvbiktPnNldFNvdXJjZUFwcGVuZGVyKGRlZmF1bHRTb3VyY2VBcHBlbmRl
cik7Ci0gICAgc3RhdGljX2Nhc3Q8RXJyb3JJbnN0YW5jZSo+KGV4Y2VwdGlvbiktPnNldFJ1bnRp
bWVUeXBlRm9yQ2F1c2UocnVudGltZVR5cGVGb3JWYWx1ZSh2YWx1ZSkpOwogICAgIHJldHVybiBl
eGNlcHRpb247CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVJbnZhbGlkSW5QYXJhbWV0ZXJFcnJvcihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVycm9y
KGV4ZWMsIGNyZWF0ZVR5cGVFcnJvciwgdmFsdWUsIG1ha2VTdHJpbmcoImlzIG5vdCBhbiBPYmpl
Y3QuIiksIGludmFsaWRQYXJhbWV0ZXJJblNvdXJjZUFwcGVuZGVyKTsKKyAgICByZXR1cm4gY3Jl
YXRlRXJyb3IoZXhlYywgdmFsdWUsIG1ha2VTdHJpbmcoImlzIG5vdCBhbiBPYmplY3QuIiksIGlu
dmFsaWRQYXJhbWV0ZXJJblNvdXJjZUFwcGVuZGVyKTsKIH0KIAogSlNPYmplY3QqIGNyZWF0ZUlu
dmFsaWRJbnN0YW5jZW9mUGFyYW1ldGVyRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZh
bHVlKQogewotICAgIHJldHVybiBjcmVhdGVFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IsIHZh
bHVlLCBtYWtlU3RyaW5nKCJpcyBub3QgYSBmdW5jdGlvbi4iKSwgaW52YWxpZFBhcmFtZXRlcklu
c3RhbmNlb2ZTb3VyY2VBcHBlbmRlcik7CisgICAgcmV0dXJuIGNyZWF0ZUVycm9yKGV4ZWMsIHZh
bHVlLCBtYWtlU3RyaW5nKCJpcyBub3QgYSBmdW5jdGlvbi4iKSwgaW52YWxpZFBhcmFtZXRlcklu
c3RhbmNlb2ZTb3VyY2VBcHBlbmRlcik7CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVOb3RBQ29uc3Ry
dWN0b3JFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJu
IGNyZWF0ZUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvciwgdmFsdWUsIEFTQ0lJTGl0ZXJhbCgi
aXMgbm90IGEgY29uc3RydWN0b3IiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyKTsKKyAgICByZXR1
cm4gY3JlYXRlRXJyb3IoZXhlYywgdmFsdWUsIEFTQ0lJTGl0ZXJhbCgiaXMgbm90IGEgY29uc3Ry
dWN0b3IiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyKTsKIH0KIAogSlNPYmplY3QqIGNyZWF0ZU5v
dEFGdW5jdGlvbkVycm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBy
ZXR1cm4gY3JlYXRlRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yLCB2YWx1ZSwgQVNDSUlMaXRl
cmFsKCJpcyBub3QgYSBmdW5jdGlvbiIpLCBub3RBRnVuY3Rpb25Tb3VyY2VBcHBlbmRlcik7Cisg
ICAgcmV0dXJuIGNyZWF0ZUVycm9yKGV4ZWMsIHZhbHVlLCBBU0NJSUxpdGVyYWwoImlzIG5vdCBh
IGZ1bmN0aW9uIiksIG5vdEFGdW5jdGlvblNvdXJjZUFwcGVuZGVyKTsKIH0KIAogSlNPYmplY3Qq
IGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQog
ewotICAgIHJldHVybiBjcmVhdGVFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IsIHZhbHVlLCBB
U0NJSUxpdGVyYWwoImlzIG5vdCBhbiBvYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyKTsK
KyAgICByZXR1cm4gY3JlYXRlRXJyb3IoZXhlYywgdmFsdWUsIEFTQ0lJTGl0ZXJhbCgiaXMgbm90
IGFuIG9iamVjdCIpLCBkZWZhdWx0U291cmNlQXBwZW5kZXIpOwogfQogCiBKU09iamVjdCogY3Jl
YXRlRXJyb3JGb3JJbnZhbGlkR2xvYmFsQXNzaWdubWVudChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lKQpAQCAtMjg4LDE0ICsyNzksOSBAQCBKU09iamVjdCogY3Jl
YXRlRXJyb3JGb3JJbnZhbGlkR2xvYmFsQXNzaWdubWVudChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IFN0cmluZyYgcAogICAgIHJldHVybiBjcmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLCBtYWtlU3Ry
aW5nKCJTdHJpY3QgbW9kZSBmb3JiaWRzIGltcGxpY2l0IGNyZWF0aW9uIG9mIGdsb2JhbCBwcm9w
ZXJ0eSAnIiwgcHJvcGVydHlOYW1lLCAnXCcnKSk7CiB9CiAKLUpTT2JqZWN0KiBjcmVhdGVPdXRP
Zk1lbW9yeUVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJu
IGNyZWF0ZUVycm9yKGdsb2JhbE9iamVjdCwgQVNDSUlMaXRlcmFsKCJPdXQgb2YgbWVtb3J5Iikp
OwotfQotCiBKU09iamVjdCogdGhyb3dPdXRPZk1lbW9yeUVycm9yKEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSkpOworICAgIHJldHVybiBl
eGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhl
YykpOwogfQogCiBKU09iamVjdCogdGhyb3dTdGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRlKiBl
eGVjKQpkaWZmIC0tZ2l0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhl
bHBlcnMuaCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgK
aW5kZXggYmM1ZGFkMS4uZDEwZDkxZiAxMDA2NDQKLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaAorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhjZXB0aW9uSGVscGVycy5oCkBAIC0zNCwxNSArMzQsMTMgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLXR5cGVkZWYgSlNPYmplY3QqICgqRXJyb3JGYWN0b3J5KShFeGVjU3RhdGUqLCBjb25z
dCBTdHJpbmcmKTsKK3R5cGVkZWYgSlNPYmplY3QqICgqRXJyb3JGYWN0b3J5KShFeGVjU3RhdGUq
LCBjb25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlcik7CiAKIEpTT2Jq
ZWN0KiBjcmVhdGVUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKFZNKik7CiBib29sIGlzVGVy
bWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihKU09iamVjdCopOwogSlNfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNWYWx1ZSk7Ci1KU19FWFBPUlRf
UFJJVkFURSBKU09iamVjdCogY3JlYXRlRXJyb3IoRXhlY1N0YXRlKiwgRXJyb3JGYWN0b3J5LCBK
U1ZhbHVlLCBjb25zdCBTdHJpbmcmLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlcik7CitK
U19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogY3JlYXRlRXJyb3IoRXhlY1N0YXRlKiwgSlNWYWx1
ZSwgY29uc3QgU3RyaW5nJiwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIpOwogSlNfRVhQ
T1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihFeGVjU3RhdGUq
KTsKLUpTT2JqZWN0KiBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoSlNHbG9iYWxPYmplY3QqKTsK
LUpTT2JqZWN0KiBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKEpTR2xvYmFsT2JqZWN0Kik7CiBKU09i
amVjdCogY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJik7CiBKU09iamVjdCogY3JlYXRlTm90QW5PYmplY3RFcnJvcihFeGVjU3RhdGUqLCBK
U1ZhbHVlKTsKIEpTT2JqZWN0KiBjcmVhdGVJbnZhbGlkRnVuY3Rpb25BcHBseVBhcmFtZXRlckVy
cm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwpkaWZmIC0tZ2l0IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAppbmRleCBmNTU0NzFlLi40
MWFmYmUxIDEwMDY0NAotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yLmNwcAorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcApAQCAtOTIsNyArOTIsNyBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RBcnJheUJ1ZmZlcihFeGVjU3RhdGUqIGV4
ZWMpCiAgICAgCiAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6
Y3JlYXRlKGxlbmd0aCwgMSk7CiAgICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihjb25zdHJ1Y3Rvci0+Z2xvYmFs
T2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVPdXRP
Zk1lbW9yeUVycm9yKGV4ZWMpKTsKICAgICAKICAgICBKU0FycmF5QnVmZmVyKiByZXN1bHQgPSBK
U0FycmF5QnVmZmVyOjpjcmVhdGUoCiAgICAgICAgIGV4ZWMtPnZtKCksIGNvbnN0cnVjdG9yLT5n
bG9iYWxPYmplY3QoKS0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoKSwgYnVmZmVyKTsKZGlmZiAtLWdp
dCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNw
cCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNw
cAppbmRleCA4ZjNkNjY5Li5lZjY1MGY2IDEwMDY0NAotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwCkBAIC02MCw3ICs2MCw3IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5QnVmZmVyUHJvdG9GdW5j
U2xpY2UoRXhlY1N0YXRlKiBleGVjKQogICAgIAogICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbmV3
QnVmZmVyID0gdGhpc09iamVjdC0+aW1wbCgpLT5zbGljZShiZWdpbiwgZW5kKTsKICAgICBpZiAo
IW5ld0J1ZmZlcikKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVPdXRP
Zk1lbW9yeUVycm9yKGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKICAgICAKICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNhbGxlZS0+Z2xvYmFsT2JqZWN0KCktPmFycmF5QnVm
ZmVyU3RydWN0dXJlKCk7CiAgICAgCmRpZmYgLS1naXQgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKaW5kZXggMjBkOTVh
Yy4uZTljOGE2OSAxMDA2NDQKLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaApAQCAtNDksNyArNDksNyBAQCBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPiogSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj46OmNyZWF0ZSgKIHsKICAgICBDb25zdHJ1Y3Rpb25Db250ZXh0IGNvbnRleHQoZXhl
Yy0+dm0oKSwgc3RydWN0dXJlLCBsZW5ndGgsIHNpemVvZih0eXBlbmFtZSBBZGFwdG9yOjpUeXBl
KSk7CiAgICAgaWYgKCFjb250ZXh0KSB7Ci0gICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRp
b24oZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgp
KSk7CisgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlT3V0T2ZN
ZW1vcnlFcnJvcihleGVjKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBKU0dlbmVy
aWNUeXBlZEFycmF5VmlldyogcmVzdWx0ID0KQEAgLTY3LDcgKzY3LDcgQEAgSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojpj
cmVhdGVVbmluaXQKICAgICAgICAgZXhlYy0+dm0oKSwgc3RydWN0dXJlLCBsZW5ndGgsIHNpemVv
Zih0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKSwKICAgICAgICAgQ29uc3RydWN0aW9uQ29udGV4dDo6
RG9udEluaXRpYWxpemUpOwogICAgIGlmICghY29udGV4dCkgewotICAgICAgICBleGVjLT52bSgp
LnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3Ioc3RydWN0dXJlLT5n
bG9iYWxPYmplY3QoKSkpOworICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMs
IGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CmRpZmYgLS1naXQgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKaW5kZXgg
NTExOTliMi4uM2ZiNThhMyAxMDA2NDQKLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcApAQCAtNjUsMTAgKzY1LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRlcnByZXRlcjo6Y29uc3RydWN0V2l0aE5hdGl2ZUVy
cm9yQ29uc3RydWN0b3IoRXgKICAgICBKU1ZhbHVlIG1lc3NhZ2UgPSBleGVjLT5hcmd1bWVudCgw
KTsKICAgICBTdHJ1Y3R1cmUqIGVycm9yU3RydWN0dXJlID0gc3RhdGljX2Nhc3Q8TmF0aXZlRXJy
b3JDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKS0+ZXJyb3JTdHJ1Y3R1cmUoKTsKICAgICBB
U1NFUlQoZXJyb3JTdHJ1Y3R1cmUpOwotICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNl
OwotICAgIGV4ZWMtPnZtKCkuaW50ZXJwcmV0ZXItPmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSwg
c3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSk7Ci0gICAgc3RhY2tUcmFjZS5yZW1v
dmUoMCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUo
ZXhlYywgZXJyb3JTdHJ1Y3R1cmUsIG1lc3NhZ2UsIHN0YWNrVHJhY2UpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVjdHVy
ZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhpbmcsIGZhbHNlKSk7CiB9CiAKIENvbnN0cnVj
dFR5cGUgTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0NlbGwqLCBD
b25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQpAQCAtODEsMTAgKzc4LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBJbnRlcnByZXRlcjo6Y2FsbE5hdGl2ZUVycm9yQ29uc3RydWN0
b3IoRXhlY1N0YXRlKgogewogICAgIEpTVmFsdWUgbWVzc2FnZSA9IGV4ZWMtPmFyZ3VtZW50KDAp
OwogICAgIFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1cmUgPSBzdGF0aWNfY2FzdDxOYXRpdmVFcnJv
ckNvbnN0cnVjdG9yKj4oZXhlYy0+Y2FsbGVlKCkpLT5lcnJvclN0cnVjdHVyZSgpOwotICAgIFZl
Y3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlOwotICAgIGV4ZWMtPnZtKCkuaW50ZXJwcmV0ZXIt
PmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSwgc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+Ojpt
YXgoKSk7Ci0gICAgc3RhY2tUcmFjZS5yZW1vdmUoMCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1cmUsIG1lc3NhZ2Us
IHN0YWNrVHJhY2UpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEVycm9ySW5zdGFuY2U6
OmNyZWF0ZShleGVjLCBlcnJvclN0cnVjdHVyZSwgbWVzc2FnZSwgbnVsbHB0ciwgVHlwZU5vdGhp
bmcsIGZhbHNlKSk7CiB9CiAKIENhbGxUeXBlIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmdldENh
bGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKZGlmZiAtLWdpdCBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCmluZGV4IGU3NjM5NDcuLjYxZTQ1ODIgMTAwNjQ0Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcApAQCAtNTQwLDk4ICs1NDAsNiBAQCB2b2lkIFZNOjpyZWxlYXNlRXhlY3V0YWJsZU1lbW9y
eSgpCiAgICAgaGVhcC5jb2xsZWN0QWxsR2FyYmFnZSgpOwogfQogCi1zdGF0aWMgdm9pZCBhcHBl
bmRTb3VyY2VUb0Vycm9yKENhbGxGcmFtZSogY2FsbEZyYW1lLCBFcnJvckluc3RhbmNlKiBleGNl
cHRpb24sIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQotewotICAgIEVycm9ySW5zdGFuY2U6OlNv
dXJjZUFwcGVuZGVyIGFwcGVuZGVyID0gZXhjZXB0aW9uLT5zb3VyY2VBcHBlbmRlcigpOwotICAg
IGV4Y2VwdGlvbi0+Y2xlYXJTb3VyY2VBcHBlbmRlcigpOwotICAgIFJ1bnRpbWVUeXBlIHR5cGUg
PSBleGNlcHRpb24tPnJ1bnRpbWVUeXBlRm9yQ2F1c2UoKTsKLSAgICBleGNlcHRpb24tPmNsZWFy
UnVudGltZVR5cGVGb3JDYXVzZSgpOwotICAgIAotICAgIGlmICghY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+aGFzRXhwcmVzc2lvbkluZm8oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlu
dCBzdGFydE9mZnNldCA9IDA7Ci0gICAgaW50IGVuZE9mZnNldCA9IDA7Ci0gICAgaW50IGRpdm90
UG9pbnQgPSAwOwotICAgIHVuc2lnbmVkIGxpbmUgPSAwOwotICAgIHVuc2lnbmVkIGNvbHVtbiA9
IDA7Ci0gICAgCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpOwotICAgIGNvZGVCbG9jay0+ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0
ZWNvZGVPZmZzZXQsIGRpdm90UG9pbnQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNv
bHVtbik7Ci0gICAgCi0gICAgaW50IGV4cHJlc3Npb25TdGFydCA9IGRpdm90UG9pbnQgLSBzdGFy
dE9mZnNldDsKLSAgICBpbnQgZXhwcmVzc2lvblN0b3AgPSBkaXZvdFBvaW50ICsgZW5kT2Zmc2V0
OwotICAgIAotICAgIGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nID0gY29kZUJsb2NrLT5zb3Vy
Y2UoKS0+c291cmNlKCk7Ci0gICAgaWYgKCFleHByZXNzaW9uU3RvcCB8fCBleHByZXNzaW9uU3Rh
cnQgPiBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZVN0cmluZy5sZW5ndGgoKSkpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBWTSogdm0gPSAmY2FsbEZyYW1lLT52bSgpOwotICAgIEpTVmFsdWUg
anNNZXNzYWdlID0gZXhjZXB0aW9uLT5nZXREaXJlY3QoKnZtLCB2bS0+cHJvcGVydHlOYW1lcy0+
bWVzc2FnZSk7Ci0gICAgaWYgKCFqc01lc3NhZ2UgfHwgIWpzTWVzc2FnZS5pc1N0cmluZygpKQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgU3RyaW5nIG1lc3NhZ2UgPSBhc1N0cmluZyhqc01l
c3NhZ2UpLT52YWx1ZShjYWxsRnJhbWUpOwotICAgIAotICAgIGlmIChleHByZXNzaW9uU3RhcnQg
PCBleHByZXNzaW9uU3RvcCkKLSAgICAgICAgbWVzc2FnZSA9IGFwcGVuZGVyKG1lc3NhZ2UsIGNv
ZGVCbG9jay0+c291cmNlKCktPmdldFJhbmdlKGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvblN0
b3ApLCB0eXBlLCBFcnJvckluc3RhbmNlOjpGb3VuZEV4YWN0U291cmNlKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgLy8gTm8gcmFuZ2UgaW5mb3JtYXRpb24sIHNvIGdpdmUgYSBmZXcgY2hhcmFjdGVy
cyBvZiBjb250ZXh0LgotICAgICAgICBjb25zdCBTdHJpbmdJbXBsKiBkYXRhID0gc291cmNlU3Ry
aW5nLmltcGwoKTsKLSAgICAgICAgaW50IGRhdGFMZW5ndGggPSBzb3VyY2VTdHJpbmcubGVuZ3Ro
KCk7Ci0gICAgICAgIGludCBzdGFydCA9IGV4cHJlc3Npb25TdGFydDsKLSAgICAgICAgaW50IHN0
b3AgPSBleHByZXNzaW9uU3RhcnQ7Ci0gICAgICAgIC8vIEdldCB1cCB0byAyMCBjaGFyYWN0ZXJz
IG9mIGNvbnRleHQgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0IG9mIHRoZSBkaXZvdCwgY2xhbXBpbmcg
dG8gdGhlIGxpbmUuCi0gICAgICAgIC8vIFRoZW4gc3RyaXAgd2hpdGVzcGFjZS4KLSAgICAgICAg
d2hpbGUgKHN0YXJ0ID4gMCAmJiAoZXhwcmVzc2lvblN0YXJ0IC0gc3RhcnQgPCAyMCkgJiYgKCpk
YXRhKVtzdGFydCAtIDFdICE9ICdcbicpCi0gICAgICAgICAgICBzdGFydC0tOwotICAgICAgICB3
aGlsZSAoc3RhcnQgPCAoZXhwcmVzc2lvblN0YXJ0IC0gMSkgJiYgaXNTdHJXaGl0ZVNwYWNlKCgq
ZGF0YSlbc3RhcnRdKSkKLSAgICAgICAgICAgIHN0YXJ0Kys7Ci0gICAgICAgIHdoaWxlIChzdG9w
IDwgZGF0YUxlbmd0aCAmJiAoc3RvcCAtIGV4cHJlc3Npb25TdGFydCA8IDIwKSAmJiAoKmRhdGEp
W3N0b3BdICE9ICdcbicpCi0gICAgICAgICAgICBzdG9wKys7Ci0gICAgICAgIHdoaWxlIChzdG9w
ID4gZXhwcmVzc2lvblN0YXJ0ICYmIGlzU3RyV2hpdGVTcGFjZSgoKmRhdGEpW3N0b3AgLSAxXSkp
Ci0gICAgICAgICAgICBzdG9wLS07Ci0gICAgICAgIG1lc3NhZ2UgPSBhcHBlbmRlcihtZXNzYWdl
LCBjb2RlQmxvY2stPnNvdXJjZSgpLT5nZXRSYW5nZShzdGFydCwgc3RvcCksIHR5cGUsIEVycm9y
SW5zdGFuY2U6OkZvdW5kQXBwcm94aW1hdGVTb3VyY2UpOwotICAgIH0KLSAgICAKLSAgICBleGNl
cHRpb24tPnB1dERpcmVjdCgqdm0sIHZtLT5wcm9wZXJ0eU5hbWVzLT5tZXNzYWdlLCBqc1N0cmlu
Zyh2bSwgbWVzc2FnZSkpOwotfQotCi1jbGFzcyBGaW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2Rl
YmxvY2tGdW5jdG9yIHsKLXB1YmxpYzoKLSAgICBGaW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2Rl
YmxvY2tGdW5jdG9yKENhbGxGcmFtZSogc3RhcnRDYWxsRnJhbWUpCi0gICAgICAgIDogbV9zdGFy
dENhbGxGcmFtZShzdGFydENhbGxGcmFtZSkKLSAgICAgICAgLCBtX2ZvdW5kQ2FsbEZyYW1lKG51
bGxwdHIpCi0gICAgICAgICwgbV9mb3VuZFN0YXJ0Q2FsbEZyYW1lKGZhbHNlKQotICAgICAgICAs
IG1faW5kZXgoMCkKLSAgICB7IH0KLQotICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9y
KCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2ZvdW5kU3Rh
cnRDYWxsRnJhbWUgJiYgKHZpc2l0b3ItPmNhbGxGcmFtZSgpID09IG1fc3RhcnRDYWxsRnJhbWUp
KQotICAgICAgICAgICAgbV9mb3VuZFN0YXJ0Q2FsbEZyYW1lID0gdHJ1ZTsKLQotICAgICAgICBp
ZiAobV9mb3VuZFN0YXJ0Q2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICBpZiAodmlzaXRvci0+Y2Fs
bEZyYW1lKCktPmNvZGVCbG9jaygpKSB7Ci0gICAgICAgICAgICAgICAgbV9mb3VuZENhbGxGcmFt
ZSA9IHZpc2l0b3ItPmNhbGxGcmFtZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiBTdGFja1Zp
c2l0b3I6OkRvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2luZGV4Kys7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKLSAgICB9Ci0K
LSAgICBDYWxsRnJhbWUqIGZvdW5kQ2FsbEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mb3VuZENh
bGxGcmFtZTsgfQotICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsg
fQotCi1wcml2YXRlOgotICAgIENhbGxGcmFtZSogbV9zdGFydENhbGxGcmFtZTsKLSAgICBDYWxs
RnJhbWUqIG1fZm91bmRDYWxsRnJhbWU7Ci0gICAgYm9vbCBtX2ZvdW5kU3RhcnRDYWxsRnJhbWU7
Ci0gICAgdW5zaWduZWQgbV9pbmRleDsKLX07Ci0KIEpTVmFsdWUgVk06OnRocm93RXhjZXB0aW9u
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBlcnJvcikKIHsKICAgICBpZiAoT3B0aW9uczo6YnJl
YWtPblRocm93KCkpIHsKQEAgLTY0NSw0NCArNTUzLDcgQEAgSlNWYWx1ZSBWTTo6dGhyb3dFeGNl
cHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGVycm9yKQogICAgIGludGVycHJldGVyLT5n
ZXRTdGFja1RyYWNlKHN0YWNrVHJhY2UpOwogICAgIG1fZXhjZXB0aW9uU3RhY2sgPSBSZWZDb3Vu
dGVkQXJyYXk8U3RhY2tGcmFtZT4oc3RhY2tUcmFjZSk7CiAgICAgbV9leGNlcHRpb24gPSBlcnJv
cjsKLSAgICAKLSAgICBpZiAoc3RhY2tUcmFjZS5pc0VtcHR5KCkgfHwgIWVycm9yLmlzT2JqZWN0
KCkpCi0gICAgICAgIHJldHVybiBlcnJvcjsKLSAgICBKU09iamVjdCogZXhjZXB0aW9uID0gYXNP
YmplY3QoZXJyb3IpOwotICAgIAotICAgIFN0YWNrRnJhbWUgc3RhY2tGcmFtZTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwIDsgaSA8IHN0YWNrVHJhY2Uuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
c3RhY2tGcmFtZSA9IHN0YWNrVHJhY2UuYXQoaSk7Ci0gICAgICAgIGlmIChzdGFja0ZyYW1lLmJ5
dGVjb2RlT2Zmc2V0KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmICghaGFzRXJy
b3JJbmZvKGV4ZWMsIGV4Y2VwdGlvbikpIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBv
bmx5IHJlYWxseSBiZSBhZGRpbmcgdGhlc2UgcHJvcGVydGllcyB0byBWTSBnZW5lcmF0ZWQgZXhj
ZXB0aW9ucywKLSAgICAgICAgLy8gYnV0IHRoZSBpbnNwZWN0b3IgY3VycmVudGx5IHJlcXVpcmVz
IHRoZXNlIGZvciBhbGwgdGhyb3duIG9iamVjdHMuCi0gICAgICAgIHVuc2lnbmVkIGxpbmU7Ci0g
ICAgICAgIHVuc2lnbmVkIGNvbHVtbjsKLSAgICAgICAgc3RhY2tGcmFtZS5jb21wdXRlTGluZUFu
ZENvbHVtbihsaW5lLCBjb2x1bW4pOwotICAgICAgICBleGNlcHRpb24tPnB1dERpcmVjdCgqdGhp
cywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh0aGlzLCAibGluZSIpLCBqc051bWJlcihsaW5lKSwg
UmVhZE9ubHkgfCBEb250RGVsZXRlKTsKLSAgICAgICAgZXhjZXB0aW9uLT5wdXREaXJlY3QoKnRo
aXMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodGhpcywgImNvbHVtbiIpLCBqc051bWJlcihjb2x1
bW4pLCBSZWFkT25seSB8IERvbnREZWxldGUpOwotICAgICAgICBpZiAoIXN0YWNrRnJhbWUuc291
cmNlVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGV4Y2VwdGlvbi0+cHV0RGlyZWN0KCp0aGlz
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHRoaXMsICJzb3VyY2VVUkwiKSwganNTdHJpbmcodGhp
cywgc3RhY2tGcmFtZS5zb3VyY2VVUkwpLCBSZWFkT25seSB8IERvbnREZWxldGUpOwotICAgIH0K
LSAgICBpZiAoZXhjZXB0aW9uLT5pc0Vycm9ySW5zdGFuY2UoKSAmJiBzdGF0aWNfY2FzdDxFcnJv
ckluc3RhbmNlKj4oZXhjZXB0aW9uKS0+aGFzU291cmNlQXBwZW5kZXIoKSkgewotICAgICAgICBG
aW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yIGZ1bmN0b3IoZXhlYyk7Ci0g
ICAgICAgIHRvcENhbGxGcmFtZS0+aXRlcmF0ZShmdW5jdG9yKTsKLSAgICAgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBmdW5jdG9yLmZvdW5kQ2FsbEZyYW1lKCk7Ci0gICAgICAgIHVuc2lnbmVk
IHN0YWNrSW5kZXggPSBmdW5jdG9yLmluZGV4KCk7Ci0KLSAgICAgICAgaWYgKGNhbGxGcmFtZSAm
JiBjYWxsRnJhbWUtPmNvZGVCbG9jaygpKSB7Ci0gICAgICAgICAgICBzdGFja0ZyYW1lID0gc3Rh
Y2tUcmFjZS5hdChzdGFja0luZGV4KTsKLSAgICAgICAgICAgIGFwcGVuZFNvdXJjZVRvRXJyb3Io
Y2FsbEZyYW1lLCBzdGF0aWNfY2FzdDxFcnJvckluc3RhbmNlKj4oZXhjZXB0aW9uKSwgc3RhY2tG
cmFtZS5ieXRlY29kZU9mZnNldCk7Ci0gICAgICAgIH0KLSAgICB9CiAKLSAgICBpZiAoZXhjZXB0
aW9uLT5oYXNQcm9wZXJ0eShleGVjLCB0aGlzLT5wcm9wZXJ0eU5hbWVzLT5zdGFjaykpCi0gICAg
ICAgIHJldHVybiBlcnJvcjsKLSAgICAKLSAgICBleGNlcHRpb24tPnB1dERpcmVjdCgqdGhpcywg
cHJvcGVydHlOYW1lcy0+c3RhY2ssIGludGVycHJldGVyLT5zdGFja1RyYWNlQXNTdHJpbmcodG9w
Q2FsbEZyYW1lLCBzdGFja1RyYWNlKSwgRG9udEVudW0pOwogICAgIHJldHVybiBlcnJvcjsKIH0K
ICAgICAKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IGU2ZTVkNjUuLjIyZTY5YWMgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBA
CisyMDE1LTA0LTAzICBNYXR0aGV3IE1pcm1hbiAgPG1taXJtYW5AYXBwbGUuY29tPgorCisgICAg
ICAgIFNvdXJjZSBhbmQgc3RhY2sgaW5mb3JtYXRpb24gc2hvdWxkIGdldCBhcHBlbmRlZCBvbmx5
IHRvIG5hdGl2ZSBlcnJvciBjb25zdHJ1Y3RvcnMKKyAgICAgICAgYW5kIHNob3VsZCBiZSBhZGRl
ZCBhdCBjb25zdHJ1Y3Rpb24gdGltZSByYXRoZXIgdGhhbiB3aGVuIHRocm93bi4KKyAgICAgICAg
cmRhcjovL3Byb2JsZW0vMTk5MjcyOTMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0MTg3MQorICAgICAgICAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKyAgICAg
ICAgCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnNldERPTUV4Y2VwdGlvbik6CisKIDIwMTUtMDQtMDMgIFphbGFuIEJ1anRhcyAgPHph
bGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBTaW1wbGUgbGluZSBsYXlvdXQ6IFVzZSBwcmUtY29t
cHV0ZWQgc2ltcGxlIGxpbmUgcnVucyB0byBwcm9kdWNlIGlubmVyVGV4dCBjb250ZW50LgpkaWZm
IC0tZ2l0IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAppbmRleCAzNmQxYTAwLi44ODYz
YzlmIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNw
cAorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcApAQCAtMjE0
LDggKzIxNCw5IEBAIHZvaWQgc2V0RE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0
aW9uQ29kZSBlYykKICAgICBzd2l0Y2ggKGRlc2NyaXB0aW9uLnR5cGUpIHsKICAgICAgICAgRE9N
X0VYQ0VQVElPTl9JTlRFUkZBQ0VTX0ZPUl9FQUNIKFRSWV9UT19DUkVBVEVfRVhDRVBUSU9OKQog
ICAgIH0KLQorICAgIAogICAgIEFTU0VSVChlcnJvck9iamVjdCk7CisgICAgYWRkRXJyb3JJbmZv
KGV4ZWMsIGFzT2JqZWN0KGVycm9yT2JqZWN0KSwgdHJ1ZSk7CiAgICAgZXhlYy0+dm0oKS50aHJv
d0V4Y2VwdGlvbihleGVjLCBlcnJvck9iamVjdCk7CiB9CiAKLS0gCjIuMi4xIChBcHBsZSBHaXQt
NTMpCgo=
</data>
<flag name="review"
          id="274918"
          type_id="1"
          status="-"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="274919"
          type_id="3"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250238</attachid>
            <date>2015-04-06 16:21:14 -0700</date>
            <delta_ts>2015-04-07 14:36:54 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-Source-and-stack-information-should-get-appended-onl.patch</filename>
            <type>text/plain</type>
            <size>77850</size>
            <attacher name="Matthew Mirman">mmirman</attacher>
            
              <data encoding="base64">RnJvbSA5Njg5NjQwYmJlZTg1OTViMWQxMTllN2M3Njk2YWU4ZGVhNmVjNjgwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXR0aGV3IE1pcm1hbiA8bW1pcm1hbkBhcHBsZS5jb20+CkRh
dGU6IE1vbiwgNiBBcHIgMjAxNSAxNjoxODo1NCAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIFNvdXJj
ZSBhbmQgc3RhY2sgaW5mb3JtYXRpb24gc2hvdWxkIGdldCBhcHBlbmRlZCBvbmx5IHRvCiBuYXRp
dmUgZXJyb3JzIFNvdXJjZS9KYXZhU2NyaXB0Q29yZToKCmFuZCBzaG91bGQgYmUgYWRkZWQgZGly
ZWN0bHkgYWZ0ZXIgY29uc3RydWN0aW9uIHJhdGhlciB0aGFuIHdoZW4gdGhyb3duLgpUaGlzIGZp
eGVzIGZyb3plbiBvYmplY3RzIGJlaW5nIHVuZnJvemVuIHdoZW4gdGhyb3duIHdoaWxlIGNvbmZv
cm1pbmcgdG8KZWNtYSBzY3JpcHQgc3RhbmRhcmQgYW5kIG90aGVyIGJyb3dzZXIgYmVoYXZpb3Iu
CnJkYXI6Ly9wcm9ibGVtLzE5OTI3MjkzCmh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDE4NzEKClJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKQXBwZW5kaW5nIHN0
YWNrLCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gdG8gYW4gb2JqZWN0IHdo
ZW5ldmVyIHRoYXQgb2JqZWN0IGlzIHRocm93bgppcyBpbmNvcnJlY3QgYmVjYXVzZSBpdCB2aW9s
YXRlcyB0aGUgZWNtYSBzY3JpcHQgc3RhbmRhcmQgZm9yIHRoZSBiZWhhdmlvciBvZiB0aHJvdy4g
IFN1cHBvc2UgZm9yIGV4YW1wbGUKdGhhdCB0aGUgb2JqZWN0IGJlaW5nIHRocm93biBhbHJlYWR5
IGhhcyBvbmUgb2YgdGhlc2UgcHJvcGVydGllcyBvciBpcyBmcm96ZW4uICBBZGRpbmcgdGhlIHBy
b3BlcnRpZXMKd291bGQgdGhlbiB2aW9sYXRlIHRoZSBmcm96ZW4gY29udHJhY3Qgb3Igb3Zlcndy
aXRlIHRob3NlIHByb3BlcnRpZXMuICBPdGhlciBicm93c2VycyBkbyBub3QgZG8gdGhpcywKYW5k
IGRvaW5nIHRoaXMgY2F1c2VzIHVubmVjZXNzYXJ5IHBlcmZvcm1hbmNlIGhpdHMgaW4gY29kZSB3
aXRoIGhlYXZ5IHVzZSBvZiB0aGUgdGhyb3cgY29uc3RydWN0IGFzCmEgY29udHJvbCBmbG93IGNv
bnN0cnVjdCByYXRoZXIgdGhhbiBqdXN0IGFuIGVycm9yIHJlcG9ydGluZyBtZWNoYW5pc20uCgpC
ZWNhdXNlIFdlYkNvcmUgYWRkcyAibmF0aXZlIiBlcnJvcnMgd2hpY2ggZG8gbm90IGluaGVyaXQg
ZnJvbSBhbnkgSlNDIG5hdGl2ZSBlcnJvciwKYXBwZW5kaW5nIHRoZSBlcnJvciBwcm9wZXJ0aWVz
IGFzIGEgc2VwZXJhdGUgY2FsbCBhZnRlciBjb25zdHJ1Y3Rpb24gb2YgdGhlIGVycm9yIGlzIHJl
cXVpcmVkCnRvIGF2b2lkIGhhdmluZyB0byBtYW51YWxseSB0cnVuY2F0ZSB0aGUgc3RhY2sgYW5k
IGdhdGhlciBsb2NhbCBzb3VyY2UgaW5mb3JtYXRpb24gZHVlIHRvCnRoZSBzdGFjayBiZWluZyBl
eHRlbmRlZCBieSBhIG5lc3RlZCBjYWxsIHRvIGNvbnN0cnVjdCBvbmUgb2YgdGhlIG5hdGl2ZSBq
c2MgZXJyb3IuCgoqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKEpTQzo6SW50ZXJwcmV0
ZXI6OmV4ZWN1dGUpOgoqIGludGVycHJldGVyL0ludGVycHJldGVyLmg6CiogcGFyc2VyL1BhcnNl
ckVycm9yLmg6CihKU0M6OlBhcnNlckVycm9yOjp0b0Vycm9yT2JqZWN0KToKKiBydW50aW1lL0Nv
bW1vbklkZW50aWZpZXJzLmg6CiogcnVudGltZS9FcnJvci5jcHA6CihKU0M6OmNyZWF0ZUVycm9y
KToKKEpTQzo6Y3JlYXRlRXZhbEVycm9yKToKKEpTQzo6Y3JlYXRlUmFuZ2VFcnJvcik6CihKU0M6
OmNyZWF0ZVJlZmVyZW5jZUVycm9yKToKKEpTQzo6Y3JlYXRlU3ludGF4RXJyb3IpOgooSlNDOjpj
cmVhdGVUeXBlRXJyb3IpOgooSlNDOjpjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcik6CihK
U0M6OmNyZWF0ZVVSSUVycm9yKToKKEpTQzo6Y3JlYXRlT3V0T2ZNZW1vcnlFcnJvcik6CihKU0M6
OkZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3I6OkZpbmRGaXJzdENhbGxl
ckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3IpOgooSlNDOjpGaW5kRmlyc3RDYWxsZXJGcmFtZVdp
dGhDb2RlYmxvY2tGdW5jdG9yOjpvcGVyYXRvcigpKToKKEpTQzo6RmluZEZpcnN0Q2FsbGVyRnJh
bWVXaXRoQ29kZWJsb2NrRnVuY3Rvcjo6Zm91bmRDYWxsRnJhbWUpOgooSlNDOjpGaW5kRmlyc3RD
YWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yOjppbmRleCk6CihKU0M6OmFkZEVycm9ySW5m
b0FuZEdldEJ5dGVjb2RlT2Zmc2V0KTogIEFkZGVkLgooSlNDOjphZGRFcnJvckluZm8pOiBBZGRl
ZCBzcGVjaWFsIGNhc2UgZm9yIGFwcGVuZGluZyBjb21wbGV0ZSBlcnJvciBpbmZvCnRvIGEgbmV3
bHkgY29uc3RydWN0ZWQgZXJyb3Igb2JqZWN0LgoqIHJ1bnRpbWUvRXJyb3IuaDoKKiBydW50aW1l
L0Vycm9yQ29uc3RydWN0b3IuY3BwOgooSlNDOjpJbnRlcnByZXRlcjo6Y29uc3RydWN0V2l0aEVy
cm9yQ29uc3RydWN0b3IpOgooSlNDOjpJbnRlcnByZXRlcjo6Y2FsbEVycm9yQ29uc3RydWN0b3Ip
OgoqIHJ1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHA6CihKU0M6OmFwcGVuZFNvdXJjZVRvRXJyb3Ip
OiBNb3ZlZCBmcm9tIFZNLmNwcAooSlNDOjpGaW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxv
Y2tGdW5jdG9yOjpGaW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yKToKKEpT
Qzo6RmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3Rvcjo6b3BlcmF0b3IoKSk6
CihKU0M6OkZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3I6OmZvdW5kQ2Fs
bEZyYW1lKToKKEpTQzo6RmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3Rvcjo6
aW5kZXgpOgooSlNDOjphZGRFcnJvckluZm9BbmRHZXRCeXRlY29kZU9mZnNldCk6CihKU0M6OkVy
cm9ySW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKToKKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuaDoK
KEpTQzo6RXJyb3JJbnN0YW5jZTo6Y3JlYXRlKToKKiBydW50aW1lL0Vycm9yUHJvdG90eXBlLmNw
cDoKKEpTQzo6RXJyb3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKiBydW50aW1lL0V4Y2Vw
dGlvbkZ1enouY3BwOgooSlNDOjpkb0V4Y2VwdGlvbkZ1enppbmcpOgoqIHJ1bnRpbWUvRXhjZXB0
aW9uSGVscGVycy5jcHA6CihKU0M6OmNyZWF0ZUVycm9yKToKKEpTQzo6Y3JlYXRlSW52YWxpZEZ1
bmN0aW9uQXBwbHlQYXJhbWV0ZXJFcnJvcik6CihKU0M6OmNyZWF0ZUludmFsaWRJblBhcmFtZXRl
ckVycm9yKToKKEpTQzo6Y3JlYXRlSW52YWxpZEluc3RhbmNlb2ZQYXJhbWV0ZXJFcnJvcik6CihK
U0M6OmNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKToKKEpTQzo6Y3JlYXRlTm90QUZ1bmN0aW9u
RXJyb3IpOgooSlNDOjpjcmVhdGVOb3RBbk9iamVjdEVycm9yKToKKEpTQzo6dGhyb3dPdXRPZk1l
bW9yeUVycm9yKToKKEpTQzo6Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKTogRGVsZXRlZC4KKEpT
Qzo6Y3JlYXRlT3V0T2ZNZW1vcnlFcnJvcik6IERlbGV0ZWQuCiogcnVudGltZS9FeGNlcHRpb25I
ZWxwZXJzLmg6CiogcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwOgooSlNDOjpj
b25zdHJ1Y3RBcnJheUJ1ZmZlcik6CiogcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNw
cDoKKEpTQzo6YXJyYXlCdWZmZXJQcm90b0Z1bmNTbGljZSk6CiogcnVudGltZS9KU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0lubGluZXMuaDoKKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj46OmNyZWF0ZSk6CihKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Ojpj
cmVhdGVVbmluaXRpYWxpemVkKToKKiBydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3Bw
OgooSlNDOjpJbnRlcnByZXRlcjo6Y29uc3RydWN0V2l0aE5hdGl2ZUVycm9yQ29uc3RydWN0b3Ip
OgooSlNDOjpJbnRlcnByZXRlcjo6Y2FsbE5hdGl2ZUVycm9yQ29uc3RydWN0b3IpOgoqIHJ1bnRp
bWUvVk0uY3BwOgooSlNDOjpWTTo6dGhyb3dFeGNlcHRpb24pOgooSlNDOjphcHBlbmRTb3VyY2VU
b0Vycm9yKTogTW92ZWQgdG8gRXJyb3IuY3BwCihKU0M6OkZpbmRGaXJzdENhbGxlckZyYW1lV2l0
aENvZGVibG9ja0Z1bmN0b3I6OkZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0
b3IpOiBEZWxldGVkLgooSlNDOjpGaW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5j
dG9yOjpvcGVyYXRvcigpKTogRGVsZXRlZC4KKEpTQzo6RmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRo
Q29kZWJsb2NrRnVuY3Rvcjo6Zm91bmRDYWxsRnJhbWUpOiBEZWxldGVkLgooSlNDOjpGaW5kRmly
c3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yOjppbmRleCk6IERlbGV0ZWQuCiogdGVz
dHMvc3RyZXNzL2ZyZWV6ZV9sZWVrLmpzOiBBZGRlZC4KClNvdXJjZS9XZWJDb3JlOgoKYW5kIHNo
b3VsZCBiZSBhZGRlZCBkaXJlY3RseSBhZnRlciBjb25zdHJ1Y3Rpb24gcmF0aGVyIHRoYW4gd2hl
biB0aHJvd24uClRoaXMgZml4ZXMgZnJvemVuIG9iamVjdHMgYmVpbmcgdW5mcm96ZW4gd2hlbiB0
aHJvd24gd2hpbGUgY29uZm9ybWluZyB0bwplY21hIHNjcmlwdCBzdGFuZGFyZCBhbmQgb3RoZXIg
YnJvd3NlciBiZWhhdmlvci4KcmRhcjovL3Byb2JsZW0vMTk5MjcyOTMKaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTg3MQoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCgpDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgoKU2V0cyBsaW5lLCBjb2x1bW4sIHNvdXJj
ZSBhbmQgc3RhY2sgaW5mb3JtYXRpb24gZm9yIERPTUV4Y2VwdGlvbnMgYXMKZXhwZWN0ZWQgYnkg
dGhlIHdlYmluc3BlY3RvciBmb3IgbmF0aXZlIGVycm9ycy4KCiogYmluZGluZ3MvanMvSlNET01C
aW5kaW5nLmNwcDoKKFdlYkNvcmU6OnNldERPTUV4Y2VwdGlvbik6CgpMYXlvdXRUZXN0czoKCmFu
ZCBzaG91bGQgYmUgYWRkZWQgYWZ0ZXIgY29uc3RydWN0aW9uIHJhdGhlciB0aGFuIHdoZW4gdGhy
b3duLgpUaGlzIGZpeGVzIGZyb3plbiBvYmplY3RzIGJlaW5nIHVuZnJvemVuIHdoZW4gdGhyb3du
IHdoaWxlIGNvbmZvcm1pbmcgdG8KZWNtYSBzY3JpcHQgc3RhbmRhcmQgYW5kIG90aGVyIGJyb3dz
ZXIgYmVoYXZpb3IuCnJkYXI6Ly9wcm9ibGVtLzE5OTI3MjkzCmh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4NzEKClJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoK
Rml4ZXMgdGVzdHMgdG8gdGhyb3cgbmV3IEVycm9ycyBzdWNoIHRoYXQgdGhleSB3aWxsIGNvbnRh
aW4gbGluZSwgY29sdW1uLCBhbmQgc3RhY2sgaW5mb3JtYXRpb24KYXMgZXhwZWN0ZWQsIGFuZCBm
aXhlcyB0aGUgY29sdW1uIGluIHRoZSBlcnJvciBpbiB0aGUgZXhwZWN0ZWQgb3V0cHV0LgoKKiBo
dHRwL3Rlc3RzL3czYy9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanM6ICBPdGhlciBicm93c2VycyBk
b24ndCBleHBlY3Qgc3RhY2sgaW5mb3JtYXRpb24Kd2l0aCB0aGlzIHRlc3QsIGJ1dCB3ZSBkbywg
YW5kIHNvIHRoZSBBc3NlcnRpb25FcnJvciBzaG91bGQgaW5jbHVkZSBzdGFjayBpbmZvcm1hdGlv
biBnYXRoZXJlZCBmcm9tIEVycm9yLgpUaGlzIGNvdWxkIGFsc28gaGF2ZSBiZWVuIGZpeGVkIGJ5
IGNoYW5naW5nIGV4cGVjdGF0aW9ucywgYnV0IGl0cyBhIGdvb2QgaWRlYSB0byBjaGVjayB0aGUg
c3RhY2sgYW55d2F5LgoqIGpzL2RvbS9leGNlcHRpb24tbGluZW51bXMtaW4taHRtbC0xLmh0bWw6
IFRocm93ICJuZXcgRXJyb3IoKSIgcmF0aGVyIHRoYW4gInt9Ii4KKiBqcy9kb20vZXhjZXB0aW9u
LWxpbmVudW1zLWluLWh0bWwtMi5odG1sOiBkaXR0by4KKiBqcy9kb20vZXhjZXB0aW9uLWxpbmVu
dW1zLWluLWh0bWwtMy5odG1sOiBkaXR0by4KKiBqcy9kb20vc2NyaXB0LXRlc3RzL3N0YWNrLXRy
YWNlLmpzOiBkaXR0by4KKHRocm93RXJyb3IpOiBkaXR0by4KKGgpOiBkaXR0by4KKGlubGluZWFi
bGVUaHJvdyk6IGRpdHRvLgooZGZnVGhpbmcuZ2V0IHdpbGxUaHJvdyk6IGRpdHRvLgooZGZnVGhp
bmcud2lsbFRocm93RnVuYyk6IGRpdHRvLgoqIGpzL2RvbS9zdGFjay10cmFjZS1leHBlY3RlZC50
eHQ6IGZpeGVkIGVycm9yIGNvbHVtbiBleHBlY3RhdGlvbi4KKiBqcy9leGNlcHRpb24tcHJvcGVy
dGllcy1leHBlY3RlZC50eHQ6IGRpdHRvLgoqIGpzL3NjcmlwdC10ZXN0cy9leGNlcHRpb24tbGlu
ZW51bXMuanM6CihleGNlcHRpb25JbkZ1bmN0aW9uKTogdGhyb3cgIm5ldyBFcnJvcigpIiByYXRo
ZXIgdGhhbiAie30iLgooZmlyc3RQcm9wSXNHZXR0ZXIuZ2V0IGdldHRlcik6IGRpdHRvCihzZWNv
bmRQcm9wSXNHZXR0ZXIuZ2V0IGdldHRlcik6IGRpdHRvCihmaXJzdFByb3BJc1NldHRlci5zZXQg
c2V0dGVyKTogZGl0dG8KKHNlY29uZFByb3BJc1NldHRlci5zZXQgc2V0dGVyKTogZGl0dG8KKiBq
cy9zY3JpcHQtdGVzdHMvZXhjZXB0aW9uLXByb3BlcnRpZXMuanM6IG5vdyBjaGVja2luZyB0aGF0
IGNvbHVtbiwgbGluZSwgYW5kIHNvdXJjZVVSTCBhcmUgZXhpc3RhbnQgb24gYSAibmV3IEVycm9y
IgpzaW5jZSB3ZSBub3cgYWRkIHRoZXNlIGF0IGVycm9yIGNvbnN0cnVjdGlvbiByYXRoZXIgdGhh
biBhdCBlcnJvciB0aHJvd2luZy4KKiBwbGF0Zm9ybS9tYWMvaHR0cC90ZXN0cy9tZWRpYS9tZWRp
YS1zb3VyY2UvbWVkaWFzb3VyY2UtYWRkc291cmNlYnVmZmVyLWV4cGVjdGVkLnR4dDogZml4ZWQg
ZXhwZWN0YXRpb24gdG8gbWF0Y2guCiogcGxhdGZvcm0vbWFjL2h0dHAvdGVzdHMvbWVkaWEvbWVk
aWEtc291cmNlL21lZGlhc291cmNlLXNvdXJjZWJ1ZmZlci1tb2RlLWV4cGVjdGVkLnR4dDogZGl0
dG8uCgpkaWZmIC0tZ2l0IExheW91dFRlc3RzL0NoYW5nZUxvZyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggOThmZGU0MC4uNzI2NGJhMiAxMDA2NDQKLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZworKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTUtMDQtMDYg
IE1hdHRoZXcgTWlybWFuICA8bW1pcm1hbkBhcHBsZS5jb20+CisKKyAgICAgICAgU291cmNlIGFu
ZCBzdGFjayBpbmZvcm1hdGlvbiBzaG91bGQgZ2V0IGFwcGVuZGVkIG9ubHkgdG8gbmF0aXZlIGVy
cm9ycworICAgICAgICBhbmQgc2hvdWxkIGJlIGFkZGVkIGFmdGVyIGNvbnN0cnVjdGlvbiByYXRo
ZXIgdGhhbiB3aGVuIHRocm93bi4KKyAgICAgICAgVGhpcyBmaXhlcyBmcm96ZW4gb2JqZWN0cyBi
ZWluZyB1bmZyb3plbiB3aGVuIHRocm93biB3aGlsZSBjb25mb3JtaW5nIHRvIAorICAgICAgICBl
Y21hIHNjcmlwdCBzdGFuZGFyZCBhbmQgb3RoZXIgYnJvd3NlciBiZWhhdmlvci4KKyAgICAgICAg
cmRhcjovL3Byb2JsZW0vMTk5MjcyOTMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0MTg3MQorICAgICAgICAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRml4ZXMgdGVzdHMgdG8gdGhyb3cgbmV3IEVycm9ycyBz
dWNoIHRoYXQgdGhleSB3aWxsIGNvbnRhaW4gbGluZSwgY29sdW1uLCBhbmQgc3RhY2sgaW5mb3Jt
YXRpb24gCisgICAgICAgIGFzIGV4cGVjdGVkLCBhbmQgZml4ZXMgdGhlIGNvbHVtbiBpbiB0aGUg
ZXJyb3IgaW4gdGhlIGV4cGVjdGVkIG91dHB1dC4KKyAgICAgICAgCisgICAgICAgICogaHR0cC90
ZXN0cy93M2MvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzOiAgT3RoZXIgYnJvd3NlcnMgZG9uJ3Qg
ZXhwZWN0IHN0YWNrIGluZm9ybWF0aW9uCisgICAgICAgIHdpdGggdGhpcyB0ZXN0LCBidXQgd2Ug
ZG8sIGFuZCBzbyB0aGUgQXNzZXJ0aW9uRXJyb3Igc2hvdWxkIGluY2x1ZGUgc3RhY2sgaW5mb3Jt
YXRpb24gZ2F0aGVyZWQgZnJvbSBFcnJvci4gCisgICAgICAgIFRoaXMgY291bGQgYWxzbyBoYXZl
IGJlZW4gZml4ZWQgYnkgY2hhbmdpbmcgZXhwZWN0YXRpb25zLCBidXQgaXRzIGEgZ29vZCBpZGVh
IHRvIGNoZWNrIHRoZSBzdGFjayBhbnl3YXkuCisgICAgICAgICoganMvZG9tL2V4Y2VwdGlvbi1s
aW5lbnVtcy1pbi1odG1sLTEuaHRtbDogVGhyb3cgIm5ldyBFcnJvcigpIiByYXRoZXIgdGhhbiAi
e30iLgorICAgICAgICAqIGpzL2RvbS9leGNlcHRpb24tbGluZW51bXMtaW4taHRtbC0yLmh0bWw6
IGRpdHRvLgorICAgICAgICAqIGpzL2RvbS9leGNlcHRpb24tbGluZW51bXMtaW4taHRtbC0zLmh0
bWw6IGRpdHRvLgorICAgICAgICAqIGpzL2RvbS9zY3JpcHQtdGVzdHMvc3RhY2stdHJhY2UuanM6
IGRpdHRvLgorICAgICAgICAodGhyb3dFcnJvcik6IGRpdHRvLgorICAgICAgICAoaCk6IGRpdHRv
LgorICAgICAgICAoaW5saW5lYWJsZVRocm93KTogZGl0dG8uCisgICAgICAgIChkZmdUaGluZy5n
ZXQgd2lsbFRocm93KTogZGl0dG8uCisgICAgICAgIChkZmdUaGluZy53aWxsVGhyb3dGdW5jKTog
ZGl0dG8uCisgICAgICAgICoganMvZG9tL3N0YWNrLXRyYWNlLWV4cGVjdGVkLnR4dDogZml4ZWQg
ZXJyb3IgY29sdW1uIGV4cGVjdGF0aW9uLiAKKyAgICAgICAgKiBqcy9leGNlcHRpb24tcHJvcGVy
dGllcy1leHBlY3RlZC50eHQ6IGRpdHRvLgorICAgICAgICAqIGpzL3NjcmlwdC10ZXN0cy9leGNl
cHRpb24tbGluZW51bXMuanM6CisgICAgICAgIChleGNlcHRpb25JbkZ1bmN0aW9uKTogdGhyb3cg
Im5ldyBFcnJvcigpIiByYXRoZXIgdGhhbiAie30iLgorICAgICAgICAoZmlyc3RQcm9wSXNHZXR0
ZXIuZ2V0IGdldHRlcik6IGRpdHRvCisgICAgICAgIChzZWNvbmRQcm9wSXNHZXR0ZXIuZ2V0IGdl
dHRlcik6IGRpdHRvCisgICAgICAgIChmaXJzdFByb3BJc1NldHRlci5zZXQgc2V0dGVyKTogZGl0
dG8KKyAgICAgICAgKHNlY29uZFByb3BJc1NldHRlci5zZXQgc2V0dGVyKTogZGl0dG8KKyAgICAg
ICAgKiBqcy9zY3JpcHQtdGVzdHMvZXhjZXB0aW9uLXByb3BlcnRpZXMuanM6IG5vdyBjaGVja2lu
ZyB0aGF0IGNvbHVtbiwgbGluZSwgYW5kIHNvdXJjZVVSTCBhcmUgZXhpc3RhbnQgb24gYSAibmV3
IEVycm9yIgorICAgICAgICBzaW5jZSB3ZSBub3cgYWRkIHRoZXNlIGF0IGVycm9yIGNvbnN0cnVj
dGlvbiByYXRoZXIgdGhhbiBhdCBlcnJvciB0aHJvd2luZy4KKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtYWRkc291cmNlYnVm
ZmVyLWV4cGVjdGVkLnR4dDogZml4ZWQgZXhwZWN0YXRpb24gdG8gbWF0Y2guIAorICAgICAgICAq
IHBsYXRmb3JtL21hYy9odHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1z
b3VyY2VidWZmZXItbW9kZS1leHBlY3RlZC50eHQ6IGRpdHRvLgorCiAyMDE1LTA0LTAzICBBbGV4
ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZHVjZSB0aGUgZGVw
ZW5kZW5jeSBvbiBGbGFzaCBpbiByZWdyZXNzaW9uIHRlc3RzCmRpZmYgLS1naXQgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy93M2MvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvdzNjL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcwppbmRleCA1OGU2NmM5Li4yNzI4
ZTIyIDEwMDY0NAotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93M2MvcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzLmpzCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3czYy9yZXNvdXJjZXMvdGVzdGhh
cm5lc3MuanMKQEAgLTIwNjQsNiArMjA2NCw4IEBAIHBvbGljaWVzIGFuZCBjb250cmlidXRpb24g
Zm9ybXMgWzNdLgogCiAgICAgZnVuY3Rpb24gQXNzZXJ0aW9uRXJyb3IobWVzc2FnZSkKICAgICB7
CisgICAgICAgIHZhciBlID0gbmV3IEVycm9yKCk7CisgICAgICAgIHRoaXMuc3RhY2sgPSBlLnN0
YWNrLnN1YnN0cmluZyhlLnN0YWNrLmluZGV4T2YoJ1xuJykrMSwgZS5zdGFjay5sZW5ndGgpOwog
ICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwogICAgIH0KIApkaWZmIC0tZ2l0IExheW91
dFRlc3RzL2pzL2RvbS9leGNlcHRpb24tbGluZW51bXMtaW4taHRtbC0xLmh0bWwgTGF5b3V0VGVz
dHMvanMvZG9tL2V4Y2VwdGlvbi1saW5lbnVtcy1pbi1odG1sLTEuaHRtbAppbmRleCAzYjdkN2M5
Li4wNzljNzJhIDEwMDY0NAotLS0gTGF5b3V0VGVzdHMvanMvZG9tL2V4Y2VwdGlvbi1saW5lbnVt
cy1pbi1odG1sLTEuaHRtbAorKysgTGF5b3V0VGVzdHMvanMvZG9tL2V4Y2VwdGlvbi1saW5lbnVt
cy1pbi1odG1sLTEuaHRtbApAQCAtOCw3ICs4LDcgQEAgZGVzY3JpcHRpb24oJ1RoaXMgdGVzdCBl
eGVyY2lzZXMgdGhlIHNvdXJjZSBVUkwgYW5kIGxpbmUgbnVtYmVyIHRoYXQgaXMgZW1iZWRkZWQK
IAogZnVuY3Rpb24gZXhjZXB0aW9uSW5GdW5jdGlvbigpCiB7Ci0gICAgdGhyb3cgRXhjZXB0aW9u
KCk7CisgICAgdGhyb3cgbmV3IEVycm9yKCk7CiB9CiAKIHZhciBlID0gdW5kZWZpbmVkOwpkaWZm
IC0tZ2l0IExheW91dFRlc3RzL2pzL2RvbS9leGNlcHRpb24tbGluZW51bXMtaW4taHRtbC0yLmh0
bWwgTGF5b3V0VGVzdHMvanMvZG9tL2V4Y2VwdGlvbi1saW5lbnVtcy1pbi1odG1sLTIuaHRtbApp
bmRleCBmNWRiMzc5Li44NmYwODI5IDEwMDY0NAotLS0gTGF5b3V0VGVzdHMvanMvZG9tL2V4Y2Vw
dGlvbi1saW5lbnVtcy1pbi1odG1sLTIuaHRtbAorKysgTGF5b3V0VGVzdHMvanMvZG9tL2V4Y2Vw
dGlvbi1saW5lbnVtcy1pbi1odG1sLTIuaHRtbApAQCAtOCw3ICs4LDcgQEAgZGVzY3JpcHRpb24o
J1RoaXMgdGVzdCBleGVyY2lzZXMgdGhlIHNvdXJjZSBVUkwgYW5kIGxpbmUgbnVtYmVyIHRoYXQg
aXMgZW1iZWRkZWQKIAogZnVuY3Rpb24gZXhjZXB0aW9uSW5GdW5jdGlvbigpCiB7Ci0gICAgdGhy
b3cgRXhjZXB0aW9uKCk7CisgICAgdGhyb3cgbmV3IEVycm9yKCk7CiB9CiAKIHZhciBlID0gdW5k
ZWZpbmVkOwpkaWZmIC0tZ2l0IExheW91dFRlc3RzL2pzL2RvbS9leGNlcHRpb24tbGluZW51bXMt
aW4taHRtbC0zLmh0bWwgTGF5b3V0VGVzdHMvanMvZG9tL2V4Y2VwdGlvbi1saW5lbnVtcy1pbi1o
dG1sLTMuaHRtbAppbmRleCA3YzExZjgxLi45ZmM3ZWRmIDEwMDY0NAotLS0gTGF5b3V0VGVzdHMv
anMvZG9tL2V4Y2VwdGlvbi1saW5lbnVtcy1pbi1odG1sLTMuaHRtbAorKysgTGF5b3V0VGVzdHMv
anMvZG9tL2V4Y2VwdGlvbi1saW5lbnVtcy1pbi1odG1sLTMuaHRtbApAQCAtMTAsNyArMTAsNyBA
QCBkZXNjcmlwdGlvbignVGhpcyB0ZXN0IGV4ZXJjaXNlcyB0aGUgc291cmNlIFVSTCBhbmQgbGlu
ZSBudW1iZXIgdGhhdCBpcyBlbWJlZGRlZAogCiBmdW5jdGlvbiBleGNlcHRpb25JbkZ1bmN0aW9u
KCkKIHsKLSAgICB0aHJvdyBFeGNlcHRpb24oKTsKKyAgICB0aHJvdyBuZXcgRXJyb3IoKTsKIH0K
IAogdmFyIGUgPSB1bmRlZmluZWQ7CmRpZmYgLS1naXQgTGF5b3V0VGVzdHMvanMvZG9tL3Njcmlw
dC10ZXN0cy9zdGFjay10cmFjZS5qcyBMYXlvdXRUZXN0cy9qcy9kb20vc2NyaXB0LXRlc3RzL3N0
YWNrLXRyYWNlLmpzCmluZGV4IDYyMjIzY2QuLjE4MGRhNzMgMTAwNjQ0Ci0tLSBMYXlvdXRUZXN0
cy9qcy9kb20vc2NyaXB0LXRlc3RzL3N0YWNrLXRyYWNlLmpzCisrKyBMYXlvdXRUZXN0cy9qcy9k
b20vc2NyaXB0LXRlc3RzL3N0YWNrLXRyYWNlLmpzCkBAIC0xMzYsNyArMTM2LDcgQEAgdHJ5IHsK
IHZhciBjYWxsQ291bnQgPSAwOwogCiBmdW5jdGlvbiB0aHJvd0Vycm9yKCkgewotICAgIHRocm93
IHt9OworICAgIHRocm93IG5ldyBFcnJvcigpOwogfQogCiB2YXIgb2JqZWN0ID0gewpAQCAtMjEw
LDcgKzIxMCw3IEBAIGZvciAodmFyIGsgPSAwOyBrIDwgNDsgaysrKSB7CiAKIGZ1bmN0aW9uIGgo
KSB7CiAgICAgaWYgKGNhbGxDb3VudCsrID09IDEwMDApCi0gICAgICAgIHRocm93IHt9OworICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKICAgICBpZiAoY2FsbENvdW50ID4gMTAwMCkgewogICAg
ICAgICBbXS5tYXAuYXBwbHkodW5kZWZpbmVkLCB0aHJvd0Vycm9yKTsKICAgICB9CkBAIC0yOTks
MTggKzI5OSwxOCBAQCBmdW5jdGlvbiBkZmdUZXN0KGYpIHsKIH0KIAogZnVuY3Rpb24gaW5saW5l
YWJsZVRocm93KCkgewotICAgIGlmIChkZmdDb3VudCA+IDUwMCkgdGhyb3cge307CisgICAgaWYg
KGRmZ0NvdW50ID4gNTAwKSB0aHJvdyBuZXcgRXJyb3IoKTsKIH0KIAogdmFyIGRmZ1RoaW5nID0g
ewogICAgIGdldCB3aWxsVGhyb3coKSB7CiAgICAgICAgIGlmIChkZmdDb3VudCA+IDUwMCkKLSAg
ICAgICAgICAgIHRocm93IHt9OworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7CiAgICAg
fSwKICAgICBnZXQgd2lsbFRocm93RXZlbnR1YWxseSgpIHsKICAgICAgICAgaW5saW5lYWJsZVRo
cm93KCk7CiAgICAgfSwKLSAgICB3aWxsVGhyb3dGdW5jOiBmdW5jdGlvbiAoKSB7IGlmIChkZmdD
b3VudCA+IDUwMCkgdGhyb3cge307IH0sCisgICAgd2lsbFRocm93RnVuYzogZnVuY3Rpb24gKCkg
eyBpZiAoZGZnQ291bnQgPiA1MDApIHRocm93IG5ldyBFcnJvcigpOyB9LAogICAgIHdpbGxUaHJv
d0V2ZW50dWFsbHlGdW5jOiBmdW5jdGlvbiAoKSB7IGlubGluZWFibGVUaHJvdygpOyB9CiB9CiBk
ZmdUaGluZy5fX2RlZmluZUdldHRlcl9fKCJob3N0V2lsbFRocm93IiwgaG9zdFRocm93ZXIpOwpk
aWZmIC0tZ2l0IExheW91dFRlc3RzL2pzL2RvbS9zdGFjay10cmFjZS1leHBlY3RlZC50eHQgTGF5
b3V0VGVzdHMvanMvZG9tL3N0YWNrLXRyYWNlLWV4cGVjdGVkLnR4dAppbmRleCA1YThmNzkxLi4x
ODIwMWY5IDEwMDY0NAotLS0gTGF5b3V0VGVzdHMvanMvZG9tL3N0YWNrLXRyYWNlLWV4cGVjdGVk
LnR4dAorKysgTGF5b3V0VGVzdHMvanMvZG9tL3N0YWNrLXRyYWNlLWV4cGVjdGVkLnR4dApAQCAt
MjU4LDcgKzI1OCw3IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFCiAgICAgMiAgIHNlbGZSZWN1
cnNpdmUzIGF0IHN0YWNrLXRyYWNlLmpzCiAKIC0tPiBTdGFjayBUcmFjZToKLSAgICAwICAgdGhy
b3dFcnJvciBhdCBzdGFjay10cmFjZS5qczoxMzk6MTMKKyAgICAwICAgdGhyb3dFcnJvciBhdCBz
dGFjay10cmFjZS5qczoxMzk6MjAKICAgICAxICAgdmFsdWVPZiBhdCBzdGFjay10cmFjZS5qczox
NDY6MjcKICAgICAyICAgZ2V0dGVyMSBhdCBzdGFjay10cmFjZS5qczoxNDk6MTEKICAgICAzICAg
bm9uSW5saW5lYWJsZSBhdCBzdGFjay10cmFjZS5qczoxNzU6MTcKQEAgLTI3MCw3ICsyNzAsNyBA
QCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURQogICAgIDkgICBnbG9iYWwgY29kZSBhdCBzdGFjay10
cmFjZS5qczoyMDU6MTYKIAogLS0+IFN0YWNrIFRyYWNlOgotICAgIDAgICB0aHJvd0Vycm9yIGF0
IHN0YWNrLXRyYWNlLmpzOjEzOToxMworICAgIDAgICB0aHJvd0Vycm9yIGF0IHN0YWNrLXRyYWNl
LmpzOjEzOToyMAogICAgIDEgICBnZXR0ZXIyIGF0IHN0YWNrLXRyYWNlLmpzOjE1NToxMQogICAg
IDIgICBub25JbmxpbmVhYmxlIGF0IHN0YWNrLXRyYWNlLmpzOjE3NzoxNwogICAgIDMgICBpbmxp
bmVhYmxlIGF0IHN0YWNrLXRyYWNlLmpzOjE4MzoyNwpAQCAtMjgxLDcgKzI4MSw3IEBAIE9uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFCiAgICAgOCAgIGdsb2JhbCBjb2RlIGF0IHN0YWNrLXRyYWNlLmpz
OjIwNToxNgogCiAtLT4gU3RhY2sgVHJhY2U6Ci0gICAgMCAgIHRocm93RXJyb3IgYXQgc3RhY2st
dHJhY2UuanM6MTM5OjEzCisgICAgMCAgIHRocm93RXJyb3IgYXQgc3RhY2stdHJhY2UuanM6MTM5
OjIwCiAgICAgMSAgIGdldHRlcjMgYXQgc3RhY2stdHJhY2UuanM6MTY3OjE2CiAgICAgMiAgIG5v
bklubGluZWFibGUgYXQgc3RhY2stdHJhY2UuanM6MTc5OjE3CiAgICAgMyAgIGlubGluZWFibGUg
YXQgc3RhY2stdHJhY2UuanM6MTgzOjI3CkBAIC0yOTIsNyArMjkyLDcgQEAgT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUKICAgICA4ICAgZ2xvYmFsIGNvZGUgYXQgc3RhY2stdHJhY2UuanM6MjA1OjE2
CiAKIC0tPiBTdGFjayBUcmFjZToKLSAgICAwICAgdGhyb3dFcnJvciBhdCBzdGFjay10cmFjZS5q
czoxMzk6MTMKKyAgICAwICAgdGhyb3dFcnJvciBhdCBzdGFjay10cmFjZS5qczoxMzk6MjAKICAg
ICAxICAgdmFsdWVPZiBhdCBzdGFjay10cmFjZS5qczoxNjM6MjcKICAgICAyICAgZ2V0dGVyMyBh
dCBzdGFjay10cmFjZS5qczoxNjk6MTYKICAgICAzICAgbm9uSW5saW5lYWJsZSBhdCBzdGFjay10
cmFjZS5qczoxNzk6MTcKQEAgLTMwNCw3ICszMDQsNyBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RQogICAgIDkgICBnbG9iYWwgY29kZSBhdCBzdGFjay10cmFjZS5qczoyMDU6MTYKIAogLS0+IFN0
YWNrIFRyYWNlOgotICAgIDAgICBoIGF0IHN0YWNrLXRyYWNlLmpzOjIxMzoxNworICAgIDAgICBo
IGF0IHN0YWNrLXRyYWNlLmpzOjIxMzoyNAogICAgIDEgICBtYXAgYXQgW25hdGl2ZSBjb2RlXQog
ICAgIDIgICBtYXBUZXN0IGF0IHN0YWNrLXRyYWNlLmpzOjIyMDoxMAogICAgIDMgICBtYXBUZXN0
RHJpdmVyIGF0IHN0YWNrLXRyYWNlLmpzOjIyNjoxNgpAQCAtMzE5LDE5ICszMTksMTkgQEAgT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUKICAgICA1ICAgZ2xvYmFsIGNvZGUgYXQgc3RhY2stdHJhY2Uu
anM6MjM3OjE4CiAKIC0tPiBTdGFjayBUcmFjZToKLSAgICAwICAgdGhyb3dFcnJvciBhdCBzdGFj
ay10cmFjZS5qczoxMzk6MTMKKyAgICAwICAgdGhyb3dFcnJvciBhdCBzdGFjay10cmFjZS5qczox
Mzk6MjAKICAgICAxICAgZGZnRnVuY3Rpb24gYXQgc3RhY2stdHJhY2UuanM6MjQ2OjE5CiAgICAg
MiAgIG1hcCBhdCBbbmF0aXZlIGNvZGVdCiAgICAgMyAgIGdsb2JhbCBjb2RlIGF0IHN0YWNrLXRy
YWNlLmpzOjI1NToxOAogCiAtLT4gU3RhY2sgVHJhY2U6Ci0gICAgMCAgIHRocm93RXJyb3IgYXQg
c3RhY2stdHJhY2UuanM6MTM5OjEzCisgICAgMCAgIHRocm93RXJyb3IgYXQgc3RhY2stdHJhY2Uu
anM6MTM5OjIwCiAgICAgMSAgIGRmZ0Z1bmN0aW9uIGF0IHN0YWNrLXRyYWNlLmpzOjI0NjoxOQog
ICAgIDIgICBmIGF0IHN0YWNrLXRyYWNlLmpzOjI2NDoxMAogICAgIDMgICBnbG9iYWwgY29kZSBh
dCBzdGFjay10cmFjZS5qczoyNzA6NgogCiAtLT4gU3RhY2sgVHJhY2U6Ci0gICAgMCAgIHdpbGxU
aHJvdyBhdCBzdGFjay10cmFjZS5qczozMDg6MjEKKyAgICAwICAgd2lsbFRocm93IGF0IHN0YWNr
LXRyYWNlLmpzOjMwODoyOAogICAgIDEgICBkZmcxIGF0IHN0YWNrLXRyYWNlLmpzOjMxOToxMwog
ICAgIDIgICBkZmcyIGF0IHN0YWNrLXRyYWNlLmpzOjMyMzo5CiAgICAgMyAgIGRmZzMgYXQgc3Rh
Y2stdHJhY2UuanM6MzI3OjkKQEAgLTMzOSw3ICszMzksNyBAQCBPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURQogICAgIDUgICBnbG9iYWwgY29kZSBhdCBzdGFjay10cmFjZS5qczozNjY6OAogCiAtLT4g
U3RhY2sgVHJhY2U6Ci0gICAgMCAgIHdpbGxUaHJvd0Z1bmMgYXQgc3RhY2stdHJhY2UuanM6MzEz
OjYyCisgICAgMCAgIHdpbGxUaHJvd0Z1bmMgYXQgc3RhY2stdHJhY2UuanM6MzEzOjY5CiAgICAg
MSAgIGRmZzQgYXQgc3RhY2stdHJhY2UuanM6MzMxOjI3CiAgICAgMiAgIGRmZzUgYXQgc3RhY2st
dHJhY2UuanM6MzM1OjkKICAgICAzICAgZGZnNiBhdCBzdGFjay10cmFjZS5qczozMzk6OQpAQCAt
MzQ3LDcgKzM0Nyw3IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFCiAgICAgNSAgIGdsb2JhbCBj
b2RlIGF0IHN0YWNrLXRyYWNlLmpzOjM2Nzo4CiAKIC0tPiBTdGFjayBUcmFjZToKLSAgICAwICAg
aW5saW5lYWJsZVRocm93IGF0IHN0YWNrLXRyYWNlLmpzOjMwMjozMworICAgIDAgICBpbmxpbmVh
YmxlVGhyb3cgYXQgc3RhY2stdHJhY2UuanM6MzAyOjQwCiAgICAgMSAgIHdpbGxUaHJvd0V2ZW50
dWFsbHkgYXQgc3RhY2stdHJhY2UuanM6MzExOjI0CiAgICAgMiAgIGRmZzcgYXQgc3RhY2stdHJh
Y2UuanM6MzQzOjEzCiAgICAgMyAgIGRmZzggYXQgc3RhY2stdHJhY2UuanM6MzQ3OjkKQEAgLTM1
Niw3ICszNTYsNyBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURQogICAgIDYgICBnbG9iYWwgY29k
ZSBhdCBzdGFjay10cmFjZS5qczozNjg6OAogCiAtLT4gU3RhY2sgVHJhY2U6Ci0gICAgMCAgIGlu
bGluZWFibGVUaHJvdyBhdCBzdGFjay10cmFjZS5qczozMDI6MzMKKyAgICAwICAgaW5saW5lYWJs
ZVRocm93IGF0IHN0YWNrLXRyYWNlLmpzOjMwMjo0MAogICAgIDEgICB3aWxsVGhyb3dFdmVudHVh
bGx5RnVuYyBhdCBzdGFjay10cmFjZS5qczozMTQ6NTkKICAgICAyICAgZGZnYSBhdCBzdGFjay10
cmFjZS5qczozNTU6MzcKICAgICAzICAgZGZnYiBhdCBzdGFjay10cmFjZS5qczozNTk6OQpkaWZm
IC0tZ2l0IExheW91dFRlc3RzL2pzL2V4Y2VwdGlvbi1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dCBM
YXlvdXRUZXN0cy9qcy9leGNlcHRpb24tcHJvcGVydGllcy1leHBlY3RlZC50eHQKaW5kZXggZGUw
NTMwYi4uYTA3NTgzYSAxMDA2NDQKLS0tIExheW91dFRlc3RzL2pzL2V4Y2VwdGlvbi1wcm9wZXJ0
aWVzLWV4cGVjdGVkLnR4dAorKysgTGF5b3V0VGVzdHMvanMvZXhjZXB0aW9uLXByb3BlcnRpZXMt
ZXhwZWN0ZWQudHh0CkBAIC0zLDcgKzMsNyBAQCBUZXN0IGZvciBjb3JyZWN0IHByb3BlcnRpZXMg
b24gRXJyb3Igb2JqZWN0cy4KIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAogCi1QQVNTIGVu
dW1lcmFibGVQcm9wZXJ0aWVzKGVycm9yKSBpcyBbXQorUEFTUyBlbnVtZXJhYmxlUHJvcGVydGll
cyhlcnJvcikuc29ydCgpIGlzIFsiY29sdW1uIiwgImxpbmUiLCAic291cmNlVVJMIl0KIFBBU1Mg
ZW51bWVyYWJsZVByb3BlcnRpZXMobmF0aXZlRXJyb3IpLnNvcnQoKSBpcyBbImNvbHVtbiIsICJs
aW5lIiwgInNvdXJjZVVSTCJdCiBQQVNTIE9iamVjdC5nZXRQcm90b3R5cGVPZihuYXRpdmVFcnJv
cikubmFtZSBpcyAiUmFuZ2VFcnJvciIKIFBBU1MgT2JqZWN0LmdldFByb3RvdHlwZU9mKG5hdGl2
ZUVycm9yKS5tZXNzYWdlIGlzICIiCmRpZmYgLS1naXQgTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRl
c3RzL2V4Y2VwdGlvbi1saW5lbnVtcy5qcyBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvZXhj
ZXB0aW9uLWxpbmVudW1zLmpzCmluZGV4IGJlOTRlMTkuLjk2Zjg0ZjQgMTAwNjQ0Ci0tLSBMYXlv
dXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvZXhjZXB0aW9uLWxpbmVudW1zLmpzCisrKyBMYXlvdXRU
ZXN0cy9qcy9zY3JpcHQtdGVzdHMvZXhjZXB0aW9uLWxpbmVudW1zLmpzCkBAIC0yLDcgKzIsNyBA
QCBkZXNjcmlwdGlvbignVGhpcyB0ZXN0IGV4ZXJjaXNlcyB0aGUgc291cmNlIFVSTCBhbmQgbGlu
ZSBudW1iZXIgdGhhdCBpcyBlbWJlZGRlZAogCiBmdW5jdGlvbiBleGNlcHRpb25JbkZ1bmN0aW9u
KCkKIHsKLSAgICB0aHJvdyBFeGNlcHRpb24oKTsKKyAgICB0aHJvdyBuZXcgRXJyb3IoKTsKIH0K
IAogdmFyIGUgPSB1bmRlZmluZWQ7CkBAIC03MSwxOCArNzEsMTggQEAgc2hvdWxkQmUoInR5cGVv
ZiBlLnNvdXJjZVVSTCIsICcic3RyaW5nIicpOwogc2hvdWxkQmUoImUubGluZSIsICc2NCcpOwog
CiB2YXIgZmlyc3RQcm9wSXNHZXR0ZXIgPSB7Ci0gICAgZ2V0IGdldHRlcigpIHsgdGhyb3cge30g
fQorICAgIGdldCBnZXR0ZXIoKSB7IHRocm93IG5ldyBFcnJvcigpIH0KIH07CiB2YXIgc2Vjb25k
UHJvcElzR2V0dGVyID0gewogICAgIHByb3A6IDEsCi0gICAgZ2V0IGdldHRlcigpIHsgdGhyb3cg
e30gfQorICAgIGdldCBnZXR0ZXIoKSB7IHRocm93IG5ldyBFcnJvcigpIH0KIH07CiB2YXIgZmly
c3RQcm9wSXNTZXR0ZXIgPSB7Ci0gICAgc2V0IHNldHRlcihhKSB7IHRocm93IHt9IH0KKyAgICBz
ZXQgc2V0dGVyKGEpIHsgdGhyb3cgbmV3IEVycm9yKCkgfQogfTsKIHZhciBzZWNvbmRQcm9wSXNT
ZXR0ZXIgPSB7CiAgICAgcHJvcDogMSwKLSAgICBzZXQgc2V0dGVyKGEpIHsgdGhyb3cge30gfQor
ICAgIHNldCBzZXR0ZXIoYSkgeyB0aHJvdyBuZXcgRXJyb3IoKSB9CiB9OwogCiB0cnkgewpkaWZm
IC0tZ2l0IExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9leGNlcHRpb24tcHJvcGVydGllcy5q
cyBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvZXhjZXB0aW9uLXByb3BlcnRpZXMuanMKaW5k
ZXggNjZiYmQyOC4uYTk5MzZiYyAxMDA2NDQKLS0tIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0
cy9leGNlcHRpb24tcHJvcGVydGllcy5qcworKysgTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3Rz
L2V4Y2VwdGlvbi1wcm9wZXJ0aWVzLmpzCkBAIC0xNSw3ICsxNSw3IEBAIHRyeSB7CiAgICAgdmFy
IG5hdGl2ZUVycm9yID0gcmFuZ2VFcnJvcjsKICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoIm1l
c3NhZ2UiKTsKIAotICAgIHNob3VsZEJlKCdlbnVtZXJhYmxlUHJvcGVydGllcyhlcnJvciknLCAn
W10nKTsKKyAgICBzaG91bGRCZSgnZW51bWVyYWJsZVByb3BlcnRpZXMoZXJyb3IpLnNvcnQoKScs
ICdbImNvbHVtbiIsICJsaW5lIiwgInNvdXJjZVVSTCJdJyk7CiAgICAgc2hvdWxkQmUoJ2VudW1l
cmFibGVQcm9wZXJ0aWVzKG5hdGl2ZUVycm9yKS5zb3J0KCknLCAnWyJjb2x1bW4iLCAibGluZSIs
ICJzb3VyY2VVUkwiXScpOwogCiAgICAgc2hvdWxkQmUoJ09iamVjdC5nZXRQcm90b3R5cGVPZihu
YXRpdmVFcnJvcikubmFtZScsICciUmFuZ2VFcnJvciInKTsKZGlmZiAtLWdpdCBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2Ut
YWRkc291cmNlYnVmZmVyLWV4cGVjdGVkLnR4dCBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvaHR0
cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtYWRkc291cmNlYnVmZmVyLWV4
cGVjdGVkLnR4dAppbmRleCA0MzI3NWRlLi45MzE1MzgxIDEwMDY0NAotLS0gTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL2h0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWFk
ZHNvdXJjZWJ1ZmZlci1leHBlY3RlZC50eHQKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9o
dHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1hZGRzb3VyY2VidWZmZXIt
ZXhwZWN0ZWQudHh0CkBAIC0xLDE0ICsxLDE0IEBACiAgCiBQQVNTIFRlc3QgYWRkU291cmNlQnVm
ZmVyKCkgd2l0aCBlbXB0eSB0eXBlIAogUEFTUyBUZXN0IGFkZFNvdXJjZUJ1ZmZlcigpIHdpdGgg
dW5zdXBwb3J0ZWQgdHlwZSAKLUZBSUwgVGVzdCBhZGRTb3VyY2VCdWZmZXIoKSB3aXRoIFZvcmJp
cyBhbmQgVlA4IGFzc2VydF90cnVlOiB2aWRlby93ZWJtO2NvZGVjcz0idnA4LHZvcmJpcyIgaXMg
c3VwcG9ydGVkIGV4cGVjdGVkIHRydWUgZ290IGZhbHNlKHN0YWNrOiBhc3NlcnRAaHR0cDovLzEy
Ny4wLjAuMTo4MDAwL3czYy9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanM6MjA2MTo3MworRkFJTCBU
ZXN0IGFkZFNvdXJjZUJ1ZmZlcigpIHdpdGggVm9yYmlzIGFuZCBWUDggYXNzZXJ0X3RydWU6IHZp
ZGVvL3dlYm07Y29kZWNzPSJ2cDgsdm9yYmlzIiBpcyBzdXBwb3J0ZWQgZXhwZWN0ZWQgdHJ1ZSBn
b3QgZmFsc2Uoc3RhY2s6IGFzc2VydEBodHRwOi8vMTI3LjAuMC4xOjgwMDAvdzNjL3Jlc291cmNl
cy90ZXN0aGFybmVzcy5qczoyMDYwOjM3CiBhc3NlcnRfdHJ1ZUBodHRwOi8vMTI3LjAuMC4xOjgw
MDAvdzNjL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qczo2NjM6MTUKIGh0dHA6Ly8xMjcuMC4wLjE6
ODAwMC9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtYWRkc291cmNlYnVmZmVyLmh0bWw6
MzI6MjYKIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3Vy
Y2UtdXRpbC5qczozMzk6MjkKIG9uU291cmNlT3BlbkBodHRwOi8vMTI3LjAuMC4xOjgwMDAvbWVk
aWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLXV0aWwuanM6MTQ5OjIxCiBzdGVwQGh0dHA6Ly8x
MjcuMC4wLjE6ODAwMC93M2MvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzOjExNjA6MzAKIGh0dHA6
Ly8xMjcuMC4wLjE6ODAwMC93M2MvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzOjExODk6MzMpCi1G
QUlMIFRlc3QgYWRkU291cmNlQnVmZmVyKCkgd2l0aCBWb3JiaXMgYW5kIFZQOCBpbiBzZXBhcmF0
ZSBTb3VyY2VCdWZmZXJzIGFzc2VydF90cnVlOiB2aWRlby93ZWJtO2NvZGVjcz0idnA4IiBpcyBz
dXBwb3J0ZWQgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2Uoc3RhY2s6IGFzc2VydEBodHRwOi8vMTI3
LjAuMC4xOjgwMDAvdzNjL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qczoyMDYxOjczCitGQUlMIFRl
c3QgYWRkU291cmNlQnVmZmVyKCkgd2l0aCBWb3JiaXMgYW5kIFZQOCBpbiBzZXBhcmF0ZSBTb3Vy
Y2VCdWZmZXJzIGFzc2VydF90cnVlOiB2aWRlby93ZWJtO2NvZGVjcz0idnA4IiBpcyBzdXBwb3J0
ZWQgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2Uoc3RhY2s6IGFzc2VydEBodHRwOi8vMTI3LjAuMC4x
OjgwMDAvdzNjL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qczoyMDYwOjM3CiBhc3NlcnRfdHJ1ZUBo
dHRwOi8vMTI3LjAuMC4xOjgwMDAvdzNjL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qczo2NjM6MTUK
IGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtYWRk
c291cmNlYnVmZmVyLmh0bWw6NDY6MjYKIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9tZWRpYS9tZWRp
YS1zb3VyY2UvbWVkaWFzb3VyY2UtdXRpbC5qczozMzk6MjkKZGlmZiAtLWdpdCBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2Ut
c291cmNlYnVmZmVyLW1vZGUtZXhwZWN0ZWQudHh0IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9o
dHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1zb3VyY2VidWZmZXItbW9k
ZS1leHBlY3RlZC50eHQKaW5kZXggYjM3MTlmYS4uY2IwN2Q5NCAxMDA2NDQKLS0tIExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9odHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJj
ZS1zb3VyY2VidWZmZXItbW9kZS1leHBlY3RlZC50eHQKKysrIExheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9odHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1zb3VyY2VidWZm
ZXItbW9kZS1leHBlY3RlZC50eHQKQEAgLTQsNyArNCw3IEBAIFBBU1MgVGVzdCBzZXR0aW5nIFNv
dXJjZUJ1ZmZlci5tb2RlCiBQQVNTIFRlc3Qgc2V0dGluZyBhIHJlbW92ZWQgU291cmNlQnVmZmVy
J3MgbW9kZSAKIFBBU1MgVGVzdCBzZXR0aW5nIFNvdXJjZUJ1ZmZlci5tb2RlIHdoaWxlIHN0aWxs
IHVwZGF0aW5nIAogUEFTUyBUZXN0IHNldHRpbmcgU291cmNlQnVmZmVyLm1vZGUgdHJpZ2dlcnMg
cGFyZW50IE1lZGlhU291cmNlICdlbmRlZCcgdG8gJ29wZW4nIHRyYW5zaXRpb24uIAotRkFJTCBU
ZXN0IHNldHRpbmcgU291cmNlQnVmZmVyLm1vZGUgYW5kIFNvdXJjZUJ1ZmZlci50aW1lc3RhbXBP
ZmZzZXQgd2hpbGUgcGFyc2luZyBtZWRpYSBzZWdtZW50LiBhc3NlcnRfdGhyb3dzOiBTZXR0aW5n
IHZhbGlkIHNvdXJjZUJ1ZmZlci5tb2RlIHdoaWxlIHN0aWxsIHBhcnNpbmcgbWVkaWEgc2VnbWVu
dCB0aHJldyBJbnZhbGlkU3RhdGVFcnJvci4gZnVuY3Rpb24gImZ1bmN0aW9uICgpIHsgc291cmNl
QnVmZmVyLm1vZGUgPSAnc2VnbWVudHMnOyB9IiBkaWQgbm90IHRocm93KHN0YWNrOiBhc3NlcnRA
aHR0cDovLzEyNy4wLjAuMTo4MDAwL3czYy9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanM6MjA2MTo3
MworRkFJTCBUZXN0IHNldHRpbmcgU291cmNlQnVmZmVyLm1vZGUgYW5kIFNvdXJjZUJ1ZmZlci50
aW1lc3RhbXBPZmZzZXQgd2hpbGUgcGFyc2luZyBtZWRpYSBzZWdtZW50LiBhc3NlcnRfdGhyb3dz
OiBTZXR0aW5nIHZhbGlkIHNvdXJjZUJ1ZmZlci5tb2RlIHdoaWxlIHN0aWxsIHBhcnNpbmcgbWVk
aWEgc2VnbWVudCB0aHJldyBJbnZhbGlkU3RhdGVFcnJvci4gZnVuY3Rpb24gImZ1bmN0aW9uICgp
IHsgc291cmNlQnVmZmVyLm1vZGUgPSAnc2VnbWVudHMnOyB9IiBkaWQgbm90IHRocm93KHN0YWNr
OiBhc3NlcnRAaHR0cDovLzEyNy4wLjAuMTo4MDAwL3czYy9yZXNvdXJjZXMvdGVzdGhhcm5lc3Mu
anM6MjA2MDozNwogYXNzZXJ0X3Rocm93c0BodHRwOi8vMTI3LjAuMC4xOjgwMDAvdzNjL3Jlc291
cmNlcy90ZXN0aGFybmVzcy5qczo5NDc6MTkKIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9tZWRpYS9t
ZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2Utc291cmNlYnVmZmVyLW1vZGUuaHRtbDoxMTQ6MzIKIGhh
bmRsZVdhaXRDYWxsYmFja19AaHR0cDovLzEyNy4wLjAuMTo4MDAwL21lZGlhL21lZGlhLXNvdXJj
ZS9tZWRpYXNvdXJjZS11dGlsLmpzOjk3OjE3CmRpZmYgLS1naXQgU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDhlOGRl
NWUuLjAwZDdkOTQgMTAwNjQ0Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTggQEAKKzIwMTUt
MDQtMDYgIE1hdHRoZXcgTWlybWFuICA8bW1pcm1hbkBhcHBsZS5jb20+CisKKyAgICAgICAgU291
cmNlIGFuZCBzdGFjayBpbmZvcm1hdGlvbiBzaG91bGQgZ2V0IGFwcGVuZGVkIG9ubHkgdG8gbmF0
aXZlIGVycm9ycworICAgICAgICBhbmQgc2hvdWxkIGJlIGFkZGVkIGRpcmVjdGx5IGFmdGVyIGNv
bnN0cnVjdGlvbiByYXRoZXIgdGhhbiB3aGVuIHRocm93bi4gCisgICAgICAgIFRoaXMgZml4ZXMg
ZnJvemVuIG9iamVjdHMgYmVpbmcgdW5mcm96ZW4gd2hlbiB0aHJvd24gd2hpbGUgY29uZm9ybWlu
ZyB0byAKKyAgICAgICAgZWNtYSBzY3JpcHQgc3RhbmRhcmQgYW5kIG90aGVyIGJyb3dzZXIgYmVo
YXZpb3IuCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzE5OTI3MjkzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4NzEKKyAgICAgICAgCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFwcGVuZGluZyBzdGFjaywg
c291cmNlLCBsaW5lLCBhbmQgY29sdW1uIGluZm9ybWF0aW9uIHRvIGFuIG9iamVjdCB3aGVuZXZl
ciB0aGF0IG9iamVjdCBpcyB0aHJvd24gCisgICAgICAgIGlzIGluY29ycmVjdCBiZWNhdXNlIGl0
IHZpb2xhdGVzIHRoZSBlY21hIHNjcmlwdCBzdGFuZGFyZCBmb3IgdGhlIGJlaGF2aW9yIG9mIHRo
cm93LiAgU3VwcG9zZSBmb3IgZXhhbXBsZQorICAgICAgICB0aGF0IHRoZSBvYmplY3QgYmVpbmcg
dGhyb3duIGFscmVhZHkgaGFzIG9uZSBvZiB0aGVzZSBwcm9wZXJ0aWVzIG9yIGlzIGZyb3plbi4g
IEFkZGluZyB0aGUgcHJvcGVydGllcyAKKyAgICAgICAgd291bGQgdGhlbiB2aW9sYXRlIHRoZSBm
cm96ZW4gY29udHJhY3Qgb3Igb3ZlcndyaXRlIHRob3NlIHByb3BlcnRpZXMuICBPdGhlciBicm93
c2VycyBkbyBub3QgZG8gdGhpcywKKyAgICAgICAgYW5kIGRvaW5nIHRoaXMgY2F1c2VzIHVubmVj
ZXNzYXJ5IHBlcmZvcm1hbmNlIGhpdHMgaW4gY29kZSB3aXRoIGhlYXZ5IHVzZSBvZiB0aGUgdGhy
b3cgY29uc3RydWN0IGFzCisgICAgICAgIGEgY29udHJvbCBmbG93IGNvbnN0cnVjdCByYXRoZXIg
dGhhbiBqdXN0IGFuIGVycm9yIHJlcG9ydGluZyBtZWNoYW5pc20uICAKKyAgICAgICAgCisgICAg
ICAgIEJlY2F1c2UgV2ViQ29yZSBhZGRzICJuYXRpdmUiIGVycm9ycyB3aGljaCBkbyBub3QgaW5o
ZXJpdCBmcm9tIGFueSBKU0MgbmF0aXZlIGVycm9yLCAKKyAgICAgICAgYXBwZW5kaW5nIHRoZSBl
cnJvciBwcm9wZXJ0aWVzIGFzIGEgc2VwZXJhdGUgY2FsbCBhZnRlciBjb25zdHJ1Y3Rpb24gb2Yg
dGhlIGVycm9yIGlzIHJlcXVpcmVkIAorICAgICAgICB0byBhdm9pZCBoYXZpbmcgdG8gbWFudWFs
bHkgdHJ1bmNhdGUgdGhlIHN0YWNrIGFuZCBnYXRoZXIgbG9jYWwgc291cmNlIGluZm9ybWF0aW9u
IGR1ZSB0byAKKyAgICAgICAgdGhlIHN0YWNrIGJlaW5nIGV4dGVuZGVkIGJ5IGEgbmVzdGVkIGNh
bGwgdG8gY29uc3RydWN0IG9uZSBvZiB0aGUgbmF0aXZlIGpzYyBlcnJvci4KKyAgICAgICAgCisg
ICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRl
cnByZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaDoK
KyAgICAgICAgKiBwYXJzZXIvUGFyc2VyRXJyb3IuaDoKKyAgICAgICAgKEpTQzo6UGFyc2VyRXJy
b3I6OnRvRXJyb3JPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMu
aDoKKyAgICAgICAgKiBydW50aW1lL0Vycm9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlRXJy
b3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVFdmFsRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVh
dGVSYW5nZUVycm9yKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlUmVmZXJlbmNlRXJyb3IpOgorICAg
ICAgICAoSlNDOjpjcmVhdGVTeW50YXhFcnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZVR5cGVF
cnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKToKKyAg
ICAgICAgKEpTQzo6Y3JlYXRlVVJJRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVPdXRPZk1l
bW9yeUVycm9yKToKKyAgICAgICAgKEpTQzo6RmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJs
b2NrRnVuY3Rvcjo6RmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3Rvcik6Cisg
ICAgICAgIChKU0M6OkZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3I6Om9w
ZXJhdG9yKCkpOgorICAgICAgICAoSlNDOjpGaW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxv
Y2tGdW5jdG9yOjpmb3VuZENhbGxGcmFtZSk6CisgICAgICAgIChKU0M6OkZpbmRGaXJzdENhbGxl
ckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3I6OmluZGV4KToKKyAgICAgICAgKEpTQzo6YWRkRXJy
b3JJbmZvQW5kR2V0Qnl0ZWNvZGVPZmZzZXQpOiAgQWRkZWQuCisgICAgICAgIChKU0M6OmFkZEVy
cm9ySW5mbyk6IEFkZGVkIHNwZWNpYWwgY2FzZSBmb3IgYXBwZW5kaW5nIGNvbXBsZXRlIGVycm9y
IGluZm8gCisgICAgICAgIHRvIGEgbmV3bHkgY29uc3RydWN0ZWQgZXJyb3Igb2JqZWN0LgorICAg
ICAgICAqIHJ1bnRpbWUvRXJyb3IuaDoKKyAgICAgICAgKiBydW50aW1lL0Vycm9yQ29uc3RydWN0
b3IuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y29uc3RydWN0V2l0aEVycm9yQ29u
c3RydWN0b3IpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y2FsbEVycm9yQ29uc3RydWN0
b3IpOgorICAgICAgICAqIHJ1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6
OmFwcGVuZFNvdXJjZVRvRXJyb3IpOiBNb3ZlZCBmcm9tIFZNLmNwcAorICAgICAgICAoSlNDOjpG
aW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yOjpGaW5kRmlyc3RDYWxsZXJG
cmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yKToKKyAgICAgICAgKEpTQzo6RmluZEZpcnN0Q2FsbGVy
RnJhbWVXaXRoQ29kZWJsb2NrRnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkZp
bmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3I6OmZvdW5kQ2FsbEZyYW1lKToK
KyAgICAgICAgKEpTQzo6RmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3Rvcjo6
aW5kZXgpOgorICAgICAgICAoSlNDOjphZGRFcnJvckluZm9BbmRHZXRCeXRlY29kZU9mZnNldCk6
CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAg
KiBydW50aW1lL0Vycm9ySW5zdGFuY2UuaDoKKyAgICAgICAgKEpTQzo6RXJyb3JJbnN0YW5jZTo6
Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAg
KEpTQzo6RXJyb3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1l
L0V4Y2VwdGlvbkZ1enouY3BwOgorICAgICAgICAoSlNDOjpkb0V4Y2VwdGlvbkZ1enppbmcpOgor
ICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OmNy
ZWF0ZUVycm9yKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlSW52YWxpZEZ1bmN0aW9uQXBwbHlQYXJh
bWV0ZXJFcnJvcik6CisgICAgICAgIChKU0M6OmNyZWF0ZUludmFsaWRJblBhcmFtZXRlckVycm9y
KToKKyAgICAgICAgKEpTQzo6Y3JlYXRlSW52YWxpZEluc3RhbmNlb2ZQYXJhbWV0ZXJFcnJvcik6
CisgICAgICAgIChKU0M6OmNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKToKKyAgICAgICAgKEpT
Qzo6Y3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IpOgorICAgICAgICAoSlNDOjpjcmVhdGVOb3RBbk9i
amVjdEVycm9yKToKKyAgICAgICAgKEpTQzo6dGhyb3dPdXRPZk1lbW9yeUVycm9yKToKKyAgICAg
ICAgKEpTQzo6Y3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Y3JlYXRlT3V0T2ZNZW1vcnlFcnJvcik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9F
eGNlcHRpb25IZWxwZXJzLmg6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RBcnJheUJ1ZmZlcik6CisgICAgICAg
ICogcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6YXJy
YXlCdWZmZXJQcm90b0Z1bmNTbGljZSk6CisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj46OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+OjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKiBydW50aW1lL05h
dGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6Y29u
c3RydWN0V2l0aE5hdGl2ZUVycm9yQ29uc3RydWN0b3IpOgorICAgICAgICAoSlNDOjpJbnRlcnBy
ZXRlcjo6Y2FsbE5hdGl2ZUVycm9yQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvVk0u
Y3BwOgorICAgICAgICAoSlNDOjpWTTo6dGhyb3dFeGNlcHRpb24pOgorICAgICAgICAoSlNDOjph
cHBlbmRTb3VyY2VUb0Vycm9yKTogTW92ZWQgdG8gRXJyb3IuY3BwCisgICAgICAgIChKU0M6OkZp
bmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3I6OkZpbmRGaXJzdENhbGxlckZy
YW1lV2l0aENvZGVibG9ja0Z1bmN0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGaW5kRmly
c3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yOjpvcGVyYXRvcigpKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6RmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3Rvcjo6
Zm91bmRDYWxsRnJhbWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGaW5kRmlyc3RDYWxsZXJG
cmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yOjppbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogdGVz
dHMvc3RyZXNzL2ZyZWV6ZV9sZWVrLmpzOiBBZGRlZC4KKwogMjAxNS0wNC0wNiAgWXVzdWtlIFN1
enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbRVM2XSBERkcgYW5kIEZU
TCBzaG91bGQgYmUgYXdhcmUgb2YgdGhhdCBTdHJpbmdDb25zdHJ1Y3RvciBiZWhhdmlvciBmb3Ig
c3ltYm9scyBiZWNvbWVzIGRpZmZlcmVudCBmcm9tIFRvU3RyaW5nCmRpZmYgLS1naXQgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IGVjZmNlOTEuLjMwOTJm
Y2IgMTAwNjQ0Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCkBAIC03NjMsNyArNzYzLDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShQcm9n
cmFtRXhlY3V0YWJsZSogcHJvZ3JhbSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEoKICAgICAgICAg
ICAgICAgICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KGdsb2JhbE9iamVjdCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIWdsb2JhbE9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGNhbGxG
cmFtZSwgSlNPTlBQYXRoW2ldLm1fcGF0aEVudHJ5TmFtZSwgc2xvdCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoZW50cnkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjYWxsRnJhbWUtPnZtKCkudGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBjcmVh
dGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBKU09O
UFBhdGhbaV0ubV9wYXRoRW50cnlOYW1lKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjYWxsRnJhbWUtPnZtKCkudGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBjcmVh
dGVVbmRlZmluZWRWYXJpYWJsZUVycm9yKGNhbGxGcmFtZSwgSlNPTlBQYXRoW2ldLm1fcGF0aEVu
dHJ5TmFtZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkSlNPTlA7
CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNl
T2JqZWN0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIEpTT05QUGF0aFtpXS5tX3BhdGhFbnRy
eU5hbWUpOwpkaWZmIC0tZ2l0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5oIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5o
CmluZGV4IDZiZjg4ZGIuLmYwMmUxNDMgMTAwNjQ0Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmgKQEAgLTI2Nyw2ICsyNjcsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXBDYWxsRnJhbWUoQ2FsbEZyYW1l
Kik7CiAKKyAgICAgICAgdm9pZCBnZXRTdGFja1RyYWNlKFZlY3RvcjxTdGFja0ZyYW1lPiYgcmVz
dWx0cywgc2l6ZV90IG1heFN0YWNrU2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6
bWF4KCkpOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgZW51bSBFeGVjdXRpb25GbGFnIHsgTm9y
bWFsLCBJbml0aWFsaXplQW5kUmV0dXJuIH07CiAKQEAgLTI3NCw3ICsyNzYsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICBKU1ZhbHVlIGV4ZWN1dGUoQ2FsbEZyYW1lQ2xvc3VyZSYpOwog
Ci0gICAgICAgIHZvaWQgZ2V0U3RhY2tUcmFjZShWZWN0b3I8U3RhY2tGcmFtZT4mIHJlc3VsdHMs
IHNpemVfdCBtYXhTdGFja1NpemUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgp
KTsKKwogCiAgICAgICAgIHZvaWQgZHVtcFJlZ2lzdGVycyhDYWxsRnJhbWUqKTsKICAgICAgICAg
CmRpZmYgLS1naXQgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJFcnJvci5oIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyRXJyb3IuaAppbmRleCAyYTY5MGNhLi5j
ZTE0NWQ3IDEwMDY0NAotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJFcnJv
ci5oCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckVycm9yLmgKQEAgLTg5
LDIyICs4OSwyMyBAQCBwdWJsaWM6CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgCiAgICAgICAgIGludCBvdmVycmlkZUxpbmVO
dW1iZXIgPSAtMSkKICAgICB7CisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVj
dC0+Z2xvYmFsRXhlYygpOwogICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgICAgICBjYXNl
IEVycm9yTm9uZToKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBjYXNlIFN5
bnRheEVycm9yOgogICAgICAgICAgICAgcmV0dXJuIGFkZEVycm9ySW5mbygKLSAgICAgICAgICAg
ICAgICBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgCi0gICAgICAgICAgICAgICAgY3JlYXRl
U3ludGF4RXJyb3IoZ2xvYmFsT2JqZWN0LCBtX21lc3NhZ2UpLCAKKyAgICAgICAgICAgICAgICBl
eGVjLCAKKyAgICAgICAgICAgICAgICBjcmVhdGVTeW50YXhFcnJvcihleGVjLCBtX21lc3NhZ2Up
LCAKICAgICAgICAgICAgICAgICBvdmVycmlkZUxpbmVOdW1iZXIgPT0gLTEgPyBtX2xpbmUgOiBv
dmVycmlkZUxpbmVOdW1iZXIsIHNvdXJjZSk7CiAgICAgICAgIGNhc2UgRXZhbEVycm9yOgotICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZVN5bnRheEVycm9yKGdsb2JhbE9iamVjdCwgbV9tZXNzYWdl
KTsKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVTeW50YXhFcnJvcihleGVjLCBtX21lc3NhZ2Up
OwogICAgICAgICBjYXNlIFN0YWNrT3ZlcmZsb3c6IHsKICAgICAgICAgICAgIEVycm9ySGFuZGxp
bmdTY29wZSBlcnJvclNjb3BlKGdsb2JhbE9iamVjdC0+dm0oKSk7Ci0gICAgICAgICAgICByZXR1
cm4gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgT3V0T2ZNZW1vcnk6Ci0gICAgICAgICAgICByZXR1cm4gY3JlYXRlT3V0T2ZNZW1vcnlF
cnJvcihnbG9iYWxPYmplY3QpOworICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZU91dE9mTWVtb3J5
RXJyb3IoZXhlYyk7CiAgICAgICAgIH0KICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CmRpZmYgLS1naXQgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
SWRlbnRpZmllcnMuaCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlm
aWVycy5oCmluZGV4IDJkZDU4MmEuLjk1MjA4NjkgMTAwNjQ0Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCkBAIC04Miw2ICs4Miw3IEBACiAgICAgbWFj
cm8oY2xlYXIpIFwKICAgICBtYWNybyhjbG9zZSkgXAogICAgIG1hY3JvKGNsb3NlZCkgXAorICAg
IG1hY3JvKGNvbHVtbikgXAogICAgIG1hY3JvKGNvbXBpbGF0aW9uS2luZCkgXAogICAgIG1hY3Jv
KGNvbXBpbGF0aW9ucykgXAogICAgIG1hY3JvKGNvbXBpbGUpIFwKQEAgLTEyNyw2ICsxMjgsNyBA
QAogICAgIG1hY3JvKGtleXMpIFwKICAgICBtYWNybyhsYXN0SW5kZXgpIFwKICAgICBtYWNybyhs
ZW5ndGgpIFwKKyAgICBtYWNybyhsaW5lKSBcCiAgICAgbWFjcm8obWVzc2FnZSkgXAogICAgIG1h
Y3JvKG11bHRpbGluZSkgXAogICAgIG1hY3JvKG5hbWUpIFwKQEAgLTE1Myw2ICsxNTUsNyBAQAog
ICAgIG1hY3JvKHNpemUpIFwKICAgICBtYWNybyhzbGljZSkgXAogICAgIG1hY3JvKHNvdXJjZSkg
XAorICAgIG1hY3JvKHNvdXJjZVVSTCkgXAogICAgIG1hY3JvKHNvdXJjZUNvZGUpIFwKICAgICBt
YWNybyhzdGFjaykgXAogICAgIG1hY3JvKHN1YmFycmF5KSBcCmRpZmYgLS1naXQgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3BwIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Vycm9yLmNwcAppbmRleCAzNjE1NmExLi5hYTgwYWNkIDEwMDY0NAotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3BwCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FcnJvci5jcHAKQEAgLTQ0LDkxICs0NCwxNTAgQEAgbmFtZXNwYWNlIEpTQyB7CiBz
dGF0aWMgY29uc3QgY2hhciogbGluZVByb3BlcnR5TmFtZSA9ICJsaW5lIjsKIHN0YXRpYyBjb25z
dCBjaGFyKiBzb3VyY2VVUkxQcm9wZXJ0eU5hbWUgPSAic291cmNlVVJMIjsKIAotSlNPYmplY3Qq
IGNyZWF0ZUVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKK0pTT2JqZWN0KiBjcmVhdGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIgYXBwZW5kZXIpCiB7
CiAgICAgQVNTRVJUKCFtZXNzYWdlLmlzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIEVycm9ySW5zdGFu
Y2U6OmNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdC0+ZXJyb3JTdHJ1Y3R1
cmUoKSwgbWVzc2FnZSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKTsKKyAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRl
KGV4ZWMsIGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5lcnJvclN0cnVjdHVyZSgp
LCBtZXNzYWdlLCBhcHBlbmRlciwgVHlwZU5vdGhpbmcsIHRydWUpOwogfQogCi1KU09iamVjdCog
Y3JlYXRlRXZhbEVycm9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKK0pTT2JqZWN0KiBjcmVhdGVFdmFsRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyIGFwcGVu
ZGVyKQogewogICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAgIHJldHVybiBFcnJv
ckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QtPmV2YWxF
cnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOworICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Cisg
ICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QtPnZtKCks
IGdsb2JhbE9iamVjdC0+ZXZhbEVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwg
bWVzc2FnZSwgYXBwZW5kZXIsIFR5cGVOb3RoaW5nLCB0cnVlKTsKIH0KIAotSlNPYmplY3QqIGNy
ZWF0ZVJhbmdlRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQorSlNPYmplY3QqIGNyZWF0ZVJhbmdlRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyIGFwcGVu
ZGVyKQogewogICAgIEFTU0VSVCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAgIHJldHVybiBFcnJv
ckluc3RhbmNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QtPnJhbmdl
RXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlKTsKKyAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwor
ICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZ2xvYmFsT2JqZWN0LT52bSgp
LCBnbG9iYWxPYmplY3QtPnJhbmdlRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgp
LCBtZXNzYWdlLCBhcHBlbmRlciwgVHlwZU5vdGhpbmcsIHRydWUpOwogfQogCi1KU09iamVjdCog
Y3JlYXRlUmVmZXJlbmNlRXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQorSlNPYmplY3QqIGNyZWF0ZVJlZmVyZW5jZUVycm9yKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBl
bmRlciBhcHBlbmRlcikKIHsKICAgICBBU1NFUlQoIW1lc3NhZ2UuaXNFbXB0eSgpKTsKLSAgICBy
ZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2Jq
ZWN0LT5yZWZlcmVuY2VFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJlKCksIG1lc3Nh
Z2UpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCk7CisgICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBnbG9i
YWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdC0+cmVmZXJlbmNlRXJyb3JDb25zdHJ1Y3Rvcigp
LT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlLCBhcHBlbmRlciwgVHlwZU5vdGhpbmcsIHRydWUp
OwogfQogCi1KU09iamVjdCogY3JlYXRlU3ludGF4RXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorSlNPYmplY3QqIGNyZWF0ZVN5bnRheEVy
cm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFcnJvckluc3RhbmNl
OjpTb3VyY2VBcHBlbmRlciBhcHBlbmRlcikKIHsKICAgICBBU1NFUlQoIW1lc3NhZ2UuaXNFbXB0
eSgpKTsKLSAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+dm0o
KSwgZ2xvYmFsT2JqZWN0LT5zeW50YXhFcnJvckNvbnN0cnVjdG9yKCktPmVycm9yU3RydWN0dXJl
KCksIG1lc3NhZ2UpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgcmV0dXJuIEVycm9ySW5zdGFuY2U6OmNyZWF0ZShl
eGVjLCBnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdC0+c3ludGF4RXJyb3JDb25zdHJ1
Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlLCBhcHBlbmRlciwgVHlwZU5vdGhpbmcs
IHRydWUpOwogfQogCi1KU09iamVjdCogY3JlYXRlVHlwZUVycm9yKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK0pTT2JqZWN0KiBjcmVhdGVUeXBl
RXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEVycm9ySW5zdGFu
Y2U6OlNvdXJjZUFwcGVuZGVyIGFwcGVuZGVyLCBSdW50aW1lVHlwZSB0eXBlKQogewogICAgIEFT
U0VSVCghbWVzc2FnZS5pc0VtcHR5KCkpOwotICAgIHJldHVybiBFcnJvckluc3RhbmNlOjpjcmVh
dGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QtPnR5cGVFcnJvckNvbnN0cnVjdG9y
KCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgcmV0dXJuIEVycm9y
SW5zdGFuY2U6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdC0+
dHlwZUVycm9yQ29uc3RydWN0b3IoKS0+ZXJyb3JTdHJ1Y3R1cmUoKSwgbWVzc2FnZSwgYXBwZW5k
ZXIsIHR5cGUsIHRydWUpOwogfQogCi1KU09iamVjdCogY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK0pTT2JqZWN0KiBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEVycm9ySW5zdGFuY2U6OlNvdXJj
ZUFwcGVuZGVyIGFwcGVuZGVyKQogewotICAgIHJldHVybiBjcmVhdGVUeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBBU0NJSUxpdGVyYWwoIk5vdCBlbm91Z2ggYXJndW1lbnRzIikpOworICAgIHJldHVy
biBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJOb3QgZW5vdWdoIGFyZ3VtZW50
cyIpLCBhcHBlbmRlciwgVHlwZU5vdGhpbmcpOwogfQogCi1KU09iamVjdCogY3JlYXRlVVJJRXJy
b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQor
SlNPYmplY3QqIGNyZWF0ZVVSSUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlciBhcHBlbmRlcikKIHsKICAgICBB
U1NFUlQoIW1lc3NhZ2UuaXNFbXB0eSgpKTsKLSAgICByZXR1cm4gRXJyb3JJbnN0YW5jZTo6Y3Jl
YXRlKGdsb2JhbE9iamVjdC0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5VUklFcnJvckNvbnN0cnVjdG9y
KCktPmVycm9yU3RydWN0dXJlKCksIG1lc3NhZ2UpOworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7CisgICAgcmV0dXJuIEVycm9y
SW5zdGFuY2U6OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QtPnZtKCksIGdsb2JhbE9iamVjdC0+
VVJJRXJyb3JDb25zdHJ1Y3RvcigpLT5lcnJvclN0cnVjdHVyZSgpLCBtZXNzYWdlLCBhcHBlbmRl
ciwgVHlwZU5vdGhpbmcsIHRydWUpOwogfQogCi1KU09iamVjdCogY3JlYXRlRXJyb3IoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCitKU09iamVjdCogY3JlYXRlT3V0T2ZN
ZW1vcnlFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVy
IGFwcGVuZGVyKSAKIHsKLSAgICByZXR1cm4gY3JlYXRlRXJyb3IoZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLCBtZXNzYWdlKTsKKyAgICByZXR1cm4gY3JlYXRlRXJyb3IoZXhlYywgQVNDSUlM
aXRlcmFsKCJPdXQgb2YgbWVtb3J5IiksIGFwcGVuZGVyKTsKIH0KIAotSlNPYmplY3QqIGNyZWF0
ZUV2YWxFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAg
ICByZXR1cm4gY3JlYXRlRXZhbEVycm9yKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbWVz
c2FnZSk7Ci19CiAKLUpTT2JqZWN0KiBjcmVhdGVSYW5nZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIHJldHVybiBjcmVhdGVSYW5nZUVycm9yKGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbWVzc2FnZSk7Ci19CitjbGFzcyBGaW5kRmlyc3RD
YWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yIHsKK3B1YmxpYzoKKyAgICBGaW5kRmlyc3RD
YWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tGdW5jdG9yKENhbGxGcmFtZSogc3RhcnRDYWxsRnJhbWUp
CisgICAgICAgIDogbV9zdGFydENhbGxGcmFtZShzdGFydENhbGxGcmFtZSkKKyAgICAgICAgLCBt
X2ZvdW5kQ2FsbEZyYW1lKG51bGxwdHIpCisgICAgICAgICwgbV9mb3VuZFN0YXJ0Q2FsbEZyYW1l
KGZhbHNlKQorICAgICAgICAsIG1faW5kZXgoMCkKKyAgICB7IH0KIAotSlNPYmplY3QqIGNyZWF0
ZVJlZmVyZW5jZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQot
ewotICAgIHJldHVybiBjcmVhdGVSZWZlcmVuY2VFcnJvcihleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIG1lc3NhZ2UpOwotfQorICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCko
U3RhY2tWaXNpdG9yJiB2aXNpdG9yKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2ZvdW5kU3RhcnRD
YWxsRnJhbWUgJiYgKHZpc2l0b3ItPmNhbGxGcmFtZSgpID09IG1fc3RhcnRDYWxsRnJhbWUpKQor
ICAgICAgICAgICAgbV9mb3VuZFN0YXJ0Q2FsbEZyYW1lID0gdHJ1ZTsKIAotSlNPYmplY3QqIGNy
ZWF0ZVN5bnRheEVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQot
ewotICAgIHJldHVybiBjcmVhdGVTeW50YXhFcnJvcihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCksIG1lc3NhZ2UpOwotfQorICAgICAgICBpZiAobV9mb3VuZFN0YXJ0Q2FsbEZyYW1lKSB7Cisg
ICAgICAgICAgICBpZiAodmlzaXRvci0+Y2FsbEZyYW1lKCktPmNvZGVCbG9jaygpKSB7CisgICAg
ICAgICAgICAgICAgbV9mb3VuZENhbGxGcmFtZSA9IHZpc2l0b3ItPmNhbGxGcmFtZSgpOworICAg
ICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgIH0KIAotSlNPYmplY3QqIGNyZWF0ZVR5cGVF
cnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICByZXR1
cm4gY3JlYXRlVHlwZUVycm9yKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbWVzc2FnZSk7
Ci19CisgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOworICAgIH0KIAotSlNP
YmplY3QqIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKEV4ZWNTdGF0ZSogZXhlYykKKyAg
ICBDYWxsRnJhbWUqIGZvdW5kQ2FsbEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mb3VuZENhbGxG
cmFtZTsgfQorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQor
Citwcml2YXRlOgorICAgIENhbGxGcmFtZSogbV9zdGFydENhbGxGcmFtZTsKKyAgICBDYWxsRnJh
bWUqIG1fZm91bmRDYWxsRnJhbWU7CisgICAgYm9vbCBtX2ZvdW5kU3RhcnRDYWxsRnJhbWU7Cisg
ICAgdW5zaWduZWQgbV9pbmRleDsKK307CisKK2Jvb2wgYWRkRXJyb3JJbmZvQW5kR2V0Qnl0ZWNv
ZGVPZmZzZXQoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIEpTT2JqZWN0KiBvYmosIGJvb2wgdXNl
Q3VycmVudEZyYW1lLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIHVuc2lnbmVkICZieXRlY29kZU9m
ZnNldCkgCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJh
Y2UgPSBWZWN0b3I8U3RhY2tGcmFtZT4oKTsKKworICAgIGlmIChleGVjICYmIHN0YWNrVHJhY2Uu
aXNFbXB0eSgpKQorICAgICAgICB2bS5pbnRlcnByZXRlci0+Z2V0U3RhY2tUcmFjZShzdGFja1Ry
YWNlKTsKKworICAgIGlmICghc3RhY2tUcmFjZS5pc0VtcHR5KCkpIHsKKworICAgICAgICBBU1NF
UlQoZXhlYyA9PSB2bS50b3BDYWxsRnJhbWUgfHwgZXhlYyA9PSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKSB8fCBleGVjID09IGV4ZWMtPnZtRW50cnlHbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpKTsKKworICAgICAgICBTdGFja0ZyYW1lKiBzdGFja0ZyYW1lOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwIDsgaSA8IHN0YWNrVHJhY2Uuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIHN0YWNrRnJhbWUgPSAmc3RhY2tUcmFjZS5hdChpKTsKKyAgICAgICAg
ICAgIGlmIChzdGFja0ZyYW1lLT5ieXRlY29kZU9mZnNldCkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChieXRlY29kZU9mZnNldCkgeworICAgICAgICAg
ICAgRmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3RvciBmdW5jdG9yKGV4ZWMp
OworICAgICAgICAgICAgdm0udG9wQ2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0b3IpOworICAgICAg
ICAgICAgY2FsbEZyYW1lID0gZnVuY3Rvci5mb3VuZENhbGxGcmFtZSgpOworICAgICAgICAgICAg
dW5zaWduZWQgc3RhY2tJbmRleCA9IGZ1bmN0b3IuaW5kZXgoKTsKKyAgICAgICAgICAgIGJ5dGVj
b2RlT2Zmc2V0ID0gc3RhY2tUcmFjZS5hdChzdGFja0luZGV4KS5ieXRlY29kZU9mZnNldDsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbGluZTsKKyAgICAgICAgdW5zaWdu
ZWQgY29sdW1uOworICAgICAgICBzdGFja0ZyYW1lLT5jb21wdXRlTGluZUFuZENvbHVtbihsaW5l
LCBjb2x1bW4pOworICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bGluZSwganNOdW1iZXIobGluZSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CisgICAgICAgIG9i
ai0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb2x1bW4sIGpzTnVtYmVyKGNvbHVt
biksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CisKKyAgICAgICAgaWYgKCFzdGFja0ZyYW1lLT5z
b3VyY2VVUkwuaXNFbXB0eSgpKQorICAgICAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPnNvdXJjZVVSTCwganNTdHJpbmcoJnZtLCBzdGFja0ZyYW1lLT5zb3VyY2VV
UkwpLCBSZWFkT25seSB8IERvbnREZWxldGUpOworICAgIAorICAgICAgICBpZiAoIXVzZUN1cnJl
bnRGcmFtZSkKKyAgICAgICAgICAgIHN0YWNrVHJhY2UucmVtb3ZlKDApOworICAgICAgICBvYmot
PnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+c3RhY2ssIHZtLmludGVycHJldGVyLT5z
dGFja1RyYWNlQXNTdHJpbmcodm0udG9wQ2FsbEZyYW1lLCBzdGFja1RyYWNlKSwgRG9udEVudW0p
OworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LUpTT2JqZWN0KiBjcmVhdGVVUklFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKK3ZvaWQgYWRkRXJyb3JJbmZvKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9i
aiwgYm9vbCB1c2VDdXJyZW50RnJhbWUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZVVSSUVycm9yKGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbWVzc2FnZSk7CisgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBudWxscHRyOworICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gMDsKKyAgICBh
ZGRFcnJvckluZm9BbmRHZXRCeXRlY29kZU9mZnNldChleGVjLCBleGVjLT52bSgpLCBvYmosIHVz
ZUN1cnJlbnRGcmFtZSwgY2FsbEZyYW1lLCBieXRlY29kZU9mZnNldCk7CiB9CiAKIEpTT2JqZWN0
KiBhZGRFcnJvckluZm8oQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiBlcnJvciwgaW50
IGxpbmUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKQEAgLTE2MCw2ICsyMTksNTMgQEAgSlNP
YmplY3QqIHRocm93U3ludGF4RXJyb3IoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBleGVj
LT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsIEFTQ0lJ
TGl0ZXJhbCgiU3ludGF4IGVycm9yIikpKTsKIH0KIAorCitKU09iamVjdCogY3JlYXRlRXJyb3Io
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgcmV0dXJuIGNy
ZWF0ZUVycm9yKGV4ZWMsIG1lc3NhZ2UsIG51bGxwdHIpOworfQorCitKU09iamVjdCogY3JlYXRl
RXZhbEVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAg
IHJldHVybiBjcmVhdGVFdmFsRXJyb3IoZXhlYywgbWVzc2FnZSwgbnVsbHB0cik7Cit9CisKK0pT
T2JqZWN0KiBjcmVhdGVSYW5nZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQoreworICAgIHJldHVybiBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIG1lc3NhZ2UsIG51
bGxwdHIpOworfQorCitKU09iamVjdCogY3JlYXRlUmVmZXJlbmNlRXJyb3IoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgcmV0dXJuIGNyZWF0ZVJlZmVyZW5j
ZUVycm9yKGV4ZWMsIG1lc3NhZ2UsIG51bGxwdHIpOworfQorCitKU09iamVjdCogY3JlYXRlU3lu
dGF4RXJyb3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAg
cmV0dXJuIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsIG1lc3NhZ2UsIG51bGxwdHIpOworfQorCitK
U09iamVjdCogY3JlYXRlVHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQoreworICAgIHJldHVybiBjcmVhdGVUeXBlRXJyb3IoZXhlYywgbWVzc2FnZSwgbnVs
bHB0ciwgVHlwZU5vdGhpbmcpOworfQorCitKU09iamVjdCogY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihleGVjLCBudWxscHRyKTsKK30KKworSlNPYmplY3QqIGNyZWF0ZVVSSUVy
cm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIHJldHVy
biBjcmVhdGVVUklFcnJvcihleGVjLCBtZXNzYWdlLCBudWxscHRyKTsKK30KKworSlNPYmplY3Qq
IGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBj
cmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIG51bGxwdHIpOworfQorCisKIGNvbnN0IENsYXNz
SW5mbyBTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb246OnNfaW5mbyA9IHsgIkZ1bmN0aW9uIiwg
JkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShTdHJpY3RNb2RlVHlwZUVycm9y
RnVuY3Rpb24pIH07CiAKIHZvaWQgU3RyaWN0TW9kZVR5cGVFcnJvckZ1bmN0aW9uOjpkZXN0cm95
KEpTQ2VsbCogY2VsbCkKZGlmZiAtLWdpdCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
cnJvci5oIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmgKaW5kZXggNGNjMWNk
YS4uODIxNjZlZiAxMDA2NDQKLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9y
LmgKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmgKQEAgLTIzLDExICsy
MywxMyBAQAogI2lmbmRlZiBFcnJvcl9oCiAjZGVmaW5lIEVycm9yX2gKIAorI2luY2x1ZGUgIkVy
cm9ySW5zdGFuY2UuaCIKICNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAi
SW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgPHN0ZGludC5o
PgogCisKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBFeGVjU3RhdGU7CkBAIC0zNywyOCArMzks
MzMgQEAgY2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBTb3VyY2VDb2RlOwogY2xhc3MgU3RydWN0dXJl
OwogCi0vLyBNZXRob2RzIHRvIGNyZWF0ZSBhIHJhbmdlIG9mIGludGVybmFsIGVycm9ycy4KLUpT
T2JqZWN0KiBjcmVhdGVFcnJvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYpOwotSlNP
YmplY3QqIGNyZWF0ZUV2YWxFcnJvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYpOwot
SlNPYmplY3QqIGNyZWF0ZVJhbmdlRXJyb3IoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcm
KTsKLUpTT2JqZWN0KiBjcmVhdGVSZWZlcmVuY2VFcnJvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0
IFN0cmluZyYpOwotSlNPYmplY3QqIGNyZWF0ZVN5bnRheEVycm9yKEpTR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgU3RyaW5nJik7Ci1KU09iamVjdCogY3JlYXRlVHlwZUVycm9yKEpTR2xvYmFsT2JqZWN0
KiwgY29uc3QgU3RyaW5nJik7Ci1KU09iamVjdCogY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoSlNHbG9iYWxPYmplY3QqKTsKLUpTT2JqZWN0KiBjcmVhdGVVUklFcnJvcihKU0dsb2JhbE9i
amVjdCosIGNvbnN0IFN0cmluZyYpOwogLy8gRXhlY1N0YXRlIHdyYXBwZXJzLgorSlNPYmplY3Qq
IGNyZWF0ZUVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYsIEVycm9ySW5zdGFuY2U6OlNv
dXJjZUFwcGVuZGVyKTsKK0pTT2JqZWN0KiBjcmVhdGVFdmFsRXJyb3IoRXhlY1N0YXRlKiwgY29u
c3QgU3RyaW5nJiwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIpOworSlNPYmplY3QqIGNy
ZWF0ZVJhbmdlRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiwgRXJyb3JJbnN0YW5jZTo6
U291cmNlQXBwZW5kZXIpOworSlNPYmplY3QqIGNyZWF0ZVJlZmVyZW5jZUVycm9yKEV4ZWNTdGF0
ZSosIGNvbnN0IFN0cmluZyYsIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyKTsKK0pTT2Jq
ZWN0KiBjcmVhdGVTeW50YXhFcnJvcihFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmLCBFcnJvcklu
c3RhbmNlOjpTb3VyY2VBcHBlbmRlcik7CitKU09iamVjdCogY3JlYXRlVHlwZUVycm9yKEV4ZWNT
dGF0ZSosIGNvbnN0IFN0cmluZyYsIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyLCBSdW50
aW1lVHlwZSk7CitKU09iamVjdCogY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoRXhlY1N0
YXRlKiwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIpOworSlNPYmplY3QqIGNyZWF0ZVVS
SUVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYsIEVycm9ySW5zdGFuY2U6OlNvdXJjZUFw
cGVuZGVyKTsKK0pTT2JqZWN0KiBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKEV4ZWNTdGF0ZSosIEVy
cm9ySW5zdGFuY2U6OlNvdXJjZUFwcGVuZGVyKTsKKworCiBKU19FWFBPUlRfUFJJVkFURSBKU09i
amVjdCogY3JlYXRlRXJyb3IoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7Ci1KU09iamVjdCog
Y3JlYXRlRXZhbEVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOworSlNfRVhQT1JUX1BS
SVZBVEUgSlNPYmplY3QqIGNyZWF0ZUV2YWxFcnJvcihFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcm
KTsKIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjcmVhdGVSYW5nZUVycm9yKEV4ZWNTdGF0
ZSosIGNvbnN0IFN0cmluZyYpOwogSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZVJl
ZmVyZW5jZUVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOwogSlNfRVhQT1JUX1BSSVZB
VEUgSlNPYmplY3QqIGNyZWF0ZVN5bnRheEVycm9yKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYp
OwogSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZVR5cGVFcnJvcihFeGVjU3RhdGUq
LCBjb25zdCBTdHJpbmcmKTsKIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjcmVhdGVOb3RF
bm91Z2hBcmd1bWVudHNFcnJvcihFeGVjU3RhdGUqKTsKLUpTT2JqZWN0KiBjcmVhdGVVUklFcnJv
cihFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKK0pTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0
KiBjcmVhdGVVUklFcnJvcihFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKK0pTX0VYUE9SVF9Q
UklWQVRFIEpTT2JqZWN0KiBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKEV4ZWNTdGF0ZSopOworCisK
K2Jvb2wgYWRkRXJyb3JJbmZvQW5kR2V0Qnl0ZWNvZGVPZmZzZXQoRXhlY1N0YXRlKiwgVk0mLCBK
U09iamVjdCosIGJvb2wsIENhbGxGcmFtZSomLCB1bnNpZ25lZCYpOwogCi0vLyBNZXRob2RzIHRv
IGFkZCAKIGJvb2wgaGFzRXJyb3JJbmZvKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiBlcnJvcik7Ci0v
LyBFeGVjU3RhdGUgd3JhcHBlcnMuCitKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZEVycm9ySW5m
byhFeGVjU3RhdGUqLCBKU09iamVjdCosIGJvb2wpOyAKIEpTT2JqZWN0KiBhZGRFcnJvckluZm8o
RXhlY1N0YXRlKiwgSlNPYmplY3QqIGVycm9yLCBpbnQgbGluZSwgY29uc3QgU291cmNlQ29kZSYp
OwogCiAvLyBNZXRob2RzIHRvIHRocm93IEVycm9ycy4KZGlmZiAtLWdpdCBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNwcCBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FcnJvckNvbnN0cnVjdG9yLmNwcAppbmRleCA2ZGExYTQyLi4zMGM0ZmFhIDEw
MDY0NAotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JDb25zdHJ1Y3Rvci5j
cHAKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yQ29uc3RydWN0b3IuY3Bw
CkBAIC01MiwxMCArNTIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGVycHJl
dGVyOjpjb25zdHJ1Y3RXaXRoRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdAogewogICAgIEpTVmFs
dWUgbWVzc2FnZSA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA/IGV4ZWMtPmFyZ3VtZW50KDApIDog
anNVbmRlZmluZWQoKTsKICAgICBTdHJ1Y3R1cmUqIGVycm9yU3RydWN0dXJlID0gYXNJbnRlcm5h
bEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPmVycm9yU3RydWN0dXJl
KCk7Ci0gICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJhY2U7Ci0gICAgZXhlYy0+dm0oKS5p
bnRlcnByZXRlci0+Z2V0U3RhY2tUcmFjZShzdGFja1RyYWNlLCBzdGQ6Om51bWVyaWNfbGltaXRz
PHNpemVfdD46Om1heCgpKTsKLSAgICBzdGFja1RyYWNlLnJlbW92ZSgwKTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEVycm9ySW5zdGFuY2U6OmNyZWF0ZShleGVjLCBlcnJvclN0cnVjdHVy
ZSwgbWVzc2FnZSwgc3RhY2tUcmFjZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoRXJy
b3JJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsIGVycm9yU3RydWN0dXJlLCBtZXNzYWdlLCBudWxscHRy
LCBUeXBlTm90aGluZywgZmFsc2UpKTsKIH0KIAogQ29uc3RydWN0VHlwZSBFcnJvckNvbnN0cnVj
dG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERh
dGEpCkBAIC02OCwxMCArNjUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEludGVy
cHJldGVyOjpjYWxsRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNW
YWx1ZSBtZXNzYWdlID0gZXhlYy0+YXJndW1lbnRDb3VudCgpID8gZXhlYy0+YXJndW1lbnQoMCkg
OiBqc1VuZGVmaW5lZCgpOwogICAgIFN0cnVjdHVyZSogZXJyb3JTdHJ1Y3R1cmUgPSBhc0ludGVy
bmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKS0+ZXJyb3JTdHJ1Y3R1
cmUoKTsKLSAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsKLSAgICBleGVjLT52bSgp
LmludGVycHJldGVyLT5nZXRTdGFja1RyYWNlKHN0YWNrVHJhY2UsIHN0ZDo6bnVtZXJpY19saW1p
dHM8c2l6ZV90Pjo6bWF4KCkpOwotICAgIHN0YWNrVHJhY2UucmVtb3ZlKDApOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsIGVycm9yU3RydWN0
dXJlLCBtZXNzYWdlLCBzdGFja1RyYWNlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShF
cnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1cmUsIG1lc3NhZ2UsIG51bGxw
dHIsIFR5cGVOb3RoaW5nLCBmYWxzZSkpOwogfQogCiBDYWxsVHlwZSBFcnJvckNvbnN0cnVjdG9y
OjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCmRpZmYgLS1naXQgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKaW5kZXggYWRkMGIyMS4uMmJmMTQ5
MyAxMDA2NDQKLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2Uu
Y3BwCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcApA
QCAtMjMsNiArMjMsOCBAQAogCiAjaW5jbHVkZSAiSlNTY29wZS5oIgogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM1LDE1ICszNywxNTYgQEAg
RXJyb3JJbnN0YW5jZTo6RXJyb3JJbnN0YW5jZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
KQogewogfQogCi12b2lkIEVycm9ySW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZSkKK3N0YXRp
YyB2b2lkIGFwcGVuZFNvdXJjZVRvRXJyb3IoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEVycm9ySW5z
dGFuY2UqIGV4Y2VwdGlvbiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAgRXJyb3JJ
bnN0YW5jZTo6U291cmNlQXBwZW5kZXIgYXBwZW5kZXIgPSBleGNlcHRpb24tPnNvdXJjZUFwcGVu
ZGVyKCk7CisgICAgZXhjZXB0aW9uLT5jbGVhclNvdXJjZUFwcGVuZGVyKCk7CisgICAgUnVudGlt
ZVR5cGUgdHlwZSA9IGV4Y2VwdGlvbi0+cnVudGltZVR5cGVGb3JDYXVzZSgpOworICAgIGV4Y2Vw
dGlvbi0+Y2xlYXJSdW50aW1lVHlwZUZvckNhdXNlKCk7CisKKyAgICBpZiAoIWNhbGxGcmFtZS0+
Y29kZUJsb2NrKCktPmhhc0V4cHJlc3Npb25JbmZvKCkpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBpbnQgc3RhcnRPZmZzZXQgPSAwOworICAgIGludCBlbmRPZmZzZXQgPSAwOworICAgIGlu
dCBkaXZvdFBvaW50ID0gMDsKKyAgICB1bnNpZ25lZCBsaW5lID0gMDsKKyAgICB1bnNpZ25lZCBj
b2x1bW4gPSAwOworICAgIAorICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5j
b2RlQmxvY2soKTsKKyAgICBjb2RlQmxvY2stPmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zm
c2V0KGJ5dGVjb2RlT2Zmc2V0LCBkaXZvdFBvaW50LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBs
aW5lLCBjb2x1bW4pOworICAgIAorICAgIGludCBleHByZXNzaW9uU3RhcnQgPSBkaXZvdFBvaW50
IC0gc3RhcnRPZmZzZXQ7CisgICAgaW50IGV4cHJlc3Npb25TdG9wID0gZGl2b3RQb2ludCArIGVu
ZE9mZnNldDsKKworICAgIGNvbnN0IFN0cmluZyYgc291cmNlU3RyaW5nID0gY29kZUJsb2NrLT5z
b3VyY2UoKS0+c291cmNlKCk7CisgICAgaWYgKCFleHByZXNzaW9uU3RvcCB8fCBleHByZXNzaW9u
U3RhcnQgPiBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZVN0cmluZy5sZW5ndGgoKSkpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBWTSogdm0gPSAmY2FsbEZyYW1lLT52bSgpOworICAgIEpTVmFs
dWUganNNZXNzYWdlID0gZXhjZXB0aW9uLT5nZXREaXJlY3QoKnZtLCB2bS0+cHJvcGVydHlOYW1l
cy0+bWVzc2FnZSk7CisgICAgaWYgKCFqc01lc3NhZ2UgfHwgIWpzTWVzc2FnZS5pc1N0cmluZygp
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgU3RyaW5nIG1lc3NhZ2UgPSBhc1N0cmluZyhq
c01lc3NhZ2UpLT52YWx1ZShjYWxsRnJhbWUpOworICAgIGlmIChleHByZXNzaW9uU3RhcnQgPCBl
eHByZXNzaW9uU3RvcCkKKyAgICAgICAgbWVzc2FnZSA9IGFwcGVuZGVyKG1lc3NhZ2UsIGNvZGVC
bG9jay0+c291cmNlKCktPmdldFJhbmdlKGV4cHJlc3Npb25TdGFydCwgZXhwcmVzc2lvblN0b3Ap
ICwgdHlwZSwgRXJyb3JJbnN0YW5jZTo6Rm91bmRFeGFjdFNvdXJjZSk7CisgICAgZWxzZSB7Cisg
ICAgICAgIC8vIE5vIHJhbmdlIGluZm9ybWF0aW9uLCBzbyBnaXZlIGEgZmV3IGNoYXJhY3RlcnMg
b2YgY29udGV4dC4KKyAgICAgICAgY29uc3QgU3RyaW5nSW1wbCogZGF0YSA9IHNvdXJjZVN0cmlu
Zy5pbXBsKCk7CisgICAgICAgIGludCBkYXRhTGVuZ3RoID0gc291cmNlU3RyaW5nLmxlbmd0aCgp
OworICAgICAgICBpbnQgc3RhcnQgPSBleHByZXNzaW9uU3RhcnQ7CisgICAgICAgIGludCBzdG9w
ID0gZXhwcmVzc2lvblN0YXJ0OworICAgICAgICAvLyBHZXQgdXAgdG8gMjAgY2hhcmFjdGVycyBv
ZiBjb250ZXh0IHRvIHRoZSBsZWZ0IGFuZCByaWdodCBvZiB0aGUgZGl2b3QsIGNsYW1waW5nIHRv
IHRoZSBsaW5lLgorICAgICAgICAvLyBUaGVuIHN0cmlwIHdoaXRlc3BhY2UuCisgICAgICAgIHdo
aWxlIChzdGFydCA+IDAgJiYgKGV4cHJlc3Npb25TdGFydCAtIHN0YXJ0IDwgMjApICYmICgqZGF0
YSlbc3RhcnQgLSAxXSAhPSAnXG4nKQorICAgICAgICAgICAgc3RhcnQtLTsKKyAgICAgICAgd2hp
bGUgKHN0YXJ0IDwgKGV4cHJlc3Npb25TdGFydCAtIDEpICYmIGlzU3RyV2hpdGVTcGFjZSgoKmRh
dGEpW3N0YXJ0XSkpCisgICAgICAgICAgICBzdGFydCsrOworICAgICAgICB3aGlsZSAoc3RvcCA8
IGRhdGFMZW5ndGggJiYgKHN0b3AgLSBleHByZXNzaW9uU3RhcnQgPCAyMCkgJiYgKCpkYXRhKVtz
dG9wXSAhPSAnXG4nKQorICAgICAgICAgICAgc3RvcCsrOworICAgICAgICB3aGlsZSAoc3RvcCA+
IGV4cHJlc3Npb25TdGFydCAmJiBpc1N0cldoaXRlU3BhY2UoKCpkYXRhKVtzdG9wIC0gMV0pKQor
ICAgICAgICAgICAgc3RvcC0tOworICAgICAgICBtZXNzYWdlID0gYXBwZW5kZXIobWVzc2FnZSwg
Y29kZUJsb2NrLT5zb3VyY2UoKS0+Z2V0UmFuZ2Uoc3RhcnQsIHN0b3ApLCB0eXBlLCBFcnJvcklu
c3RhbmNlOjpGb3VuZEFwcHJveGltYXRlU291cmNlKTsKKyAgICB9CisgICAgZXhjZXB0aW9uLT5w
dXREaXJlY3QoKnZtLCB2bS0+cHJvcGVydHlOYW1lcy0+bWVzc2FnZSwganNTdHJpbmcodm0sIG1l
c3NhZ2UpKTsKKworfQorCitjbGFzcyBGaW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tG
dW5jdG9yIHsKK3B1YmxpYzoKKyAgICBGaW5kRmlyc3RDYWxsZXJGcmFtZVdpdGhDb2RlYmxvY2tG
dW5jdG9yKENhbGxGcmFtZSogc3RhcnRDYWxsRnJhbWUpCisgICAgICAgIDogbV9zdGFydENhbGxG
cmFtZShzdGFydENhbGxGcmFtZSkKKyAgICAgICAgLCBtX2ZvdW5kQ2FsbEZyYW1lKG51bGxwdHIp
CisgICAgICAgICwgbV9mb3VuZFN0YXJ0Q2FsbEZyYW1lKGZhbHNlKQorICAgICAgICAsIG1faW5k
ZXgoMCkKKyAgICB7IH0KKworICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3Rh
Y2tWaXNpdG9yJiB2aXNpdG9yKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2ZvdW5kU3RhcnRDYWxs
RnJhbWUgJiYgKHZpc2l0b3ItPmNhbGxGcmFtZSgpID09IG1fc3RhcnRDYWxsRnJhbWUpKQorICAg
ICAgICAgICAgbV9mb3VuZFN0YXJ0Q2FsbEZyYW1lID0gdHJ1ZTsKKworICAgICAgICBpZiAobV9m
b3VuZFN0YXJ0Q2FsbEZyYW1lKSB7CisgICAgICAgICAgICBpZiAodmlzaXRvci0+Y2FsbEZyYW1l
KCktPmNvZGVCbG9jaygpKSB7CisgICAgICAgICAgICAgICAgbV9mb3VuZENhbGxGcmFtZSA9IHZp
c2l0b3ItPmNhbGxGcmFtZSgpOworICAgICAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6
OkRvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKKyAgICB9CisKKyAgICBD
YWxsRnJhbWUqIGZvdW5kQ2FsbEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mb3VuZENhbGxGcmFt
ZTsgfQorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorCitw
cml2YXRlOgorICAgIENhbGxGcmFtZSogbV9zdGFydENhbGxGcmFtZTsKKyAgICBDYWxsRnJhbWUq
IG1fZm91bmRDYWxsRnJhbWU7CisgICAgYm9vbCBtX2ZvdW5kU3RhcnRDYWxsRnJhbWU7CisgICAg
dW5zaWduZWQgbV9pbmRleDsKK307CisKK3N0YXRpYyBib29sIGFkZEVycm9ySW5mb0FuZEdldEJ5
dGVjb2RlT2Zmc2V0KEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBKU09iamVjdCogb2JqLCBib29s
IHVzZUN1cnJlbnRGcmFtZSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCB1bnNpZ25lZCAmYnl0ZWNv
ZGVPZmZzZXQpCit7CisgICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJhY2UgPSBWZWN0b3I8
U3RhY2tGcmFtZT4oKTsKKworICAgIGlmIChleGVjICYmIHN0YWNrVHJhY2UuaXNFbXB0eSgpKQor
ICAgICAgICB2bS5pbnRlcnByZXRlci0+Z2V0U3RhY2tUcmFjZShzdGFja1RyYWNlKTsKKworICAg
IGlmICghc3RhY2tUcmFjZS5pc0VtcHR5KCkpIHsKKworICAgICAgICBBU1NFUlQoZXhlYyA9PSB2
bS50b3BDYWxsRnJhbWUgfHwgZXhlYyA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmds
b2JhbEV4ZWMoKSB8fCBleGVjID09IGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpKTsKKworICAgICAgICBTdGFja0ZyYW1lKiBzdGFja0ZyYW1lOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwIDsgaSA8IHN0YWNrVHJhY2Uuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIHN0YWNrRnJhbWUgPSAmc3RhY2tUcmFjZS5hdChpKTsKKyAgICAgICAgICAgIGlmIChzdGFj
a0ZyYW1lLT5ieXRlY29kZU9mZnNldCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChieXRlY29kZU9mZnNldCkgeworICAgICAgICAgICAgRmluZEZpcnN0
Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3RvciBmdW5jdG9yKGV4ZWMpOworICAgICAgICAg
ICAgdm0udG9wQ2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0b3IpOworICAgICAgICAgICAgY2FsbEZy
YW1lID0gZnVuY3Rvci5mb3VuZENhbGxGcmFtZSgpOworICAgICAgICAgICAgdW5zaWduZWQgc3Rh
Y2tJbmRleCA9IGZ1bmN0b3IuaW5kZXgoKTsKKyAgICAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0ID0g
c3RhY2tUcmFjZS5hdChzdGFja0luZGV4KS5ieXRlY29kZU9mZnNldDsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdW5zaWduZWQgbGluZTsKKyAgICAgICAgdW5zaWduZWQgY29sdW1uOwor
ICAgICAgICBzdGFja0ZyYW1lLT5jb21wdXRlTGluZUFuZENvbHVtbihsaW5lLCBjb2x1bW4pOwor
ICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGluZSwganNOdW1i
ZXIobGluZSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7CisgICAgICAgIG9iai0+cHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb2x1bW4sIGpzTnVtYmVyKGNvbHVtbiksIFJlYWRPbmx5
IHwgRG9udERlbGV0ZSk7CisKKyAgICAgICAgaWYgKCFzdGFja0ZyYW1lLT5zb3VyY2VVUkwuaXNF
bXB0eSgpKQorICAgICAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnNvdXJjZVVSTCwganNTdHJpbmcoJnZtLCBzdGFja0ZyYW1lLT5zb3VyY2VVUkwpLCBSZWFkT25s
eSB8IERvbnREZWxldGUpOworICAgIAorICAgICAgICBpZiAoIXVzZUN1cnJlbnRGcmFtZSkKKyAg
ICAgICAgICAgIHN0YWNrVHJhY2UucmVtb3ZlKDApOworICAgICAgICBvYmotPnB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+c3RhY2ssIHZtLmludGVycHJldGVyLT5zdGFja1RyYWNlQXNT
dHJpbmcodm0udG9wQ2FsbEZyYW1lLCBzdGFja1RyYWNlKSwgRG9udEVudW0pOworCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRXJyb3JJ
bnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSwgYm9vbCB1c2VDdXJyZW50RnJhbWUpCiB7CiAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICBpZiAoIW1l
c3NhZ2UuaXNOdWxsKCkpCiAgICAgICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bWVzc2FnZSwganNTdHJpbmcoJnZtLCBtZXNzYWdlKSwgRG9udEVudW0pOwotICAgIAotICAgIGlm
ICghc3RhY2tUcmFjZS5pc0VtcHR5KCkpCi0gICAgICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+c3RhY2ssIHZtLmludGVycHJldGVyLT5zdGFja1RyYWNlQXNTdHJpbmcodm0udG9w
Q2FsbEZyYW1lLCBzdGFja1RyYWNlKSwgRG9udEVudW0pOworCisgICAgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQgPSBoYXNTb3VyY2VBcHBlbmRlcigpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gbnVsbHB0cjsKKyAgICBib29sIGhhc1RyYWNlID0gYWRkRXJyb3JJbmZvQW5kR2V0Qnl0ZWNv
ZGVPZmZzZXQoZXhlYywgdm0sIHRoaXMsIHVzZUN1cnJlbnRGcmFtZSwgY2FsbEZyYW1lLCBieXRl
Y29kZU9mZnNldCk7CisKKyAgICBpZiAoaGFzVHJhY2UgJiYgY2FsbEZyYW1lICYmIGhhc1NvdXJj
ZUFwcGVuZGVyKCkpIHsKKyAgICAgICAgaWYgKGNhbGxGcmFtZSAmJiBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpKSAKKyAgICAgICAgICAgIGFwcGVuZFNvdXJjZVRvRXJyb3IoY2FsbEZyYW1lLCB0aGlz
LCBieXRlY29kZU9mZnNldCk7CisgICAgfQogfQogICAgIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5oIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuaAppbmRleCBjMmUzYjlj
Li4zZjU4NGE5IDEwMDY0NAotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJ
bnN0YW5jZS5oCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNl
LmgKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUg
IlJ1bnRpbWVUeXBlLmgiCiAjaW5jbHVkZSAiU291cmNlUHJvdmlkZXIuaCIKKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zMSw2ICszMiw5IEBAIGNsYXNz
IEVycm9ySW5zdGFuY2UgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAg
dHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKKyAgICBlbnVtIFNvdXJjZVRleHRXaGVy
ZUVycm9yT2NjdXJyZWQgeyBGb3VuZEV4YWN0U291cmNlLCBGb3VuZEFwcHJveGltYXRlU291cmNl
IH07CisgICAgdHlwZWRlZiBTdHJpbmcgKCpTb3VyY2VBcHBlbmRlcikgKGNvbnN0IFN0cmluZyYg
b3JpZ2luYWxNZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVRleHQsIFJ1bnRpbWVUeXBlLCBT
b3VyY2VUZXh0V2hlcmVFcnJvck9jY3VycmVkKTsKKwogICAgIERFQ0xBUkVfSU5GTzsKIAogICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQpAQCAtMzgsMjAgKzQyLDIxIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oRXJyb3JJbnN0YW5jZVR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgRXJyb3JJbnN0YW5jZSogY3JlYXRlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgVmVjdG9yPFN0
YWNrRnJhbWU+IHN0YWNrVHJhY2UgPSBWZWN0b3I8U3RhY2tGcmFtZT4oKSkKKyAgICBzdGF0aWMg
RXJyb3JJbnN0YW5jZSogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBTb3VyY2VBcHBlbmRlciBhcHBlbmRl
ciA9IG51bGxwdHIsIFJ1bnRpbWVUeXBlIHR5cGUgPSBUeXBlTm90aGluZywgYm9vbCB1c2VDdXJy
ZW50RnJhbWUgPSB0cnVlKQogICAgIHsKICAgICAgICAgRXJyb3JJbnN0YW5jZSogaW5zdGFuY2Ug
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxFcnJvckluc3RhbmNlPih2bS5oZWFwKSkgRXJy
b3JJbnN0YW5jZSh2bSwgc3RydWN0dXJlKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0
aW9uKHZtLCBtZXNzYWdlLCBzdGFja1RyYWNlKTsKKyAgICAgICAgaW5zdGFuY2UtPm1fc291cmNl
QXBwZW5kZXIgPSBhcHBlbmRlcjsKKyAgICAgICAgaW5zdGFuY2UtPm1fcnVudGltZVR5cGVGb3JD
YXVzZSA9IHR5cGU7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbihleGVjLCB2bSwg
bWVzc2FnZSwgdXNlQ3VycmVudEZyYW1lKTsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAg
IH0KIAotICAgIHN0YXRpYyBFcnJvckluc3RhbmNlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNWYWx1ZSBtZXNzYWdlLCBWZWN0b3I8U3RhY2tGcmFtZT4g
c3RhY2tUcmFjZSA9IFZlY3RvcjxTdGFja0ZyYW1lPigpKQorICAgIHN0YXRpYyBFcnJvckluc3Rh
bmNlKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNWYWx1
ZSBtZXNzYWdlLCBTb3VyY2VBcHBlbmRlciBhcHBlbmRlciA9IG51bGxwdHIsIFJ1bnRpbWVUeXBl
IHR5cGUgPSBUeXBlTm90aGluZywgYm9vbCB1c2VDdXJyZW50RnJhbWUgPSB0cnVlKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUsIG1lc3NhZ2UuaXNV
bmRlZmluZWQoKSA/IFN0cmluZygpIDogbWVzc2FnZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhl
YyksIHN0YWNrVHJhY2UpOworICAgICAgICByZXR1cm4gY3JlYXRlKGV4ZWMsIGV4ZWMtPnZtKCks
IHN0cnVjdHVyZSwgbWVzc2FnZS5pc1VuZGVmaW5lZCgpID8gU3RyaW5nKCkgOiBtZXNzYWdlLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSwgYXBwZW5kZXIsIHR5cGUsIHVzZUN1cnJlbnRGcmFt
ZSk7CiAgICAgfQogCi0gICAgZW51bSBTb3VyY2VUZXh0V2hlcmVFcnJvck9jY3VycmVkIHsgRm91
bmRFeGFjdFNvdXJjZSwgRm91bmRBcHByb3hpbWF0ZVNvdXJjZSB9OwotICAgIHR5cGVkZWYgU3Ry
aW5nICgqU291cmNlQXBwZW5kZXIpIChjb25zdCBTdHJpbmcmIG9yaWdpbmFsTWVzc2FnZSwgY29u
c3QgU3RyaW5nJiBzb3VyY2VUZXh0LCBSdW50aW1lVHlwZSwgU291cmNlVGV4dFdoZXJlRXJyb3JP
Y2N1cnJlZCk7CisgICAgc3RhdGljIHZvaWQgYWRkRXJyb3JJbmZvKEV4ZWNTdGF0ZSosIFZNJiwg
SlNPYmplY3QqLCBib29sID0gdHJ1ZSk7CiAKICAgICBib29sIGhhc1NvdXJjZUFwcGVuZGVyKCkg
Y29uc3QgeyByZXR1cm4gISFtX3NvdXJjZUFwcGVuZGVyOyB9CiAgICAgU291cmNlQXBwZW5kZXIg
c291cmNlQXBwZW5kZXIoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUFwcGVuZGVyOyB9CkBAIC02
NCw3ICs2OSw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBFcnJvckluc3Rh
bmNlKFZNJiwgU3RydWN0dXJlKik7CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgY29u
c3QgU3RyaW5nJiwgVmVjdG9yPFN0YWNrRnJhbWU+ID0gVmVjdG9yPFN0YWNrRnJhbWU+KCkpOwor
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiwgVk0mLCBjb25zdCBTdHJpbmcmLCBi
b29sIHVzZUN1cnJlbnRGcmFtZSA9IHRydWUpOwogCiAgICAgU291cmNlQXBwZW5kZXIgbV9zb3Vy
Y2VBcHBlbmRlciB7IG51bGxwdHIgfTsKICAgICBSdW50aW1lVHlwZSBtX3J1bnRpbWVUeXBlRm9y
Q2F1c2UgeyBUeXBlTm90aGluZyB9OwpkaWZmIC0tZ2l0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
cnJvclByb3RvdHlwZS5jcHAKaW5kZXggY2Y4ZmYyYS4uNWJjMmVjMyAxMDA2NDQKLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCkBAIC01NCw5ICs1NCw5IEBA
IEVycm9yUHJvdG90eXBlOjpFcnJvclByb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQogewogfQogCi12b2lkIEVycm9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KikKK3ZvaWQgRXJyb3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSwgIiIpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpLCB2bSwgIiIpOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmlu
Zygmdm0sIFN0cmluZyhBU0NJSUxpdGVyYWwoIkVycm9yIikpKSwgRG9udEVudW0pOwogfQpkaWZm
IC0tZ2l0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkZ1enouY3BwIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkZ1enouY3BwCmluZGV4IGM4MzU2
MDUuLjc0NGIxYTYgMTAwNjQ0Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNl
cHRpb25GdXp6LmNwcAorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9u
RnV6ei5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAgdm9pZCBkb0V4Y2VwdGlvbkZ1enppbmcoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBjaGFyKiB3aGVyZSwgdm9pZCogcmV0dXJuUEMpCiAgICAgaWYgKGZp
cmVUYXJnZXQgPT0gc19udW1iZXJPZkV4Y2VwdGlvbkZ1enpDaGVja3MpIHsKICAgICAgICAgcHJp
bnRmKCJKU0MgRVhDRVBUSU9OIEZVWlo6IFRocm93aW5nIGZ1enogZXhjZXB0aW9uIHdpdGggY2Fs
bCBmcmFtZSAlcCwgc2VlbiBpbiAlcyBhbmQgcmV0dXJuIGFkZHJlc3MgJXAuXG4iLCBleGVjLCB3
aGVyZSwgcmV0dXJuUEMpOwogICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKAotICAg
ICAgICAgICAgZXhlYywgY3JlYXRlRXJyb3IoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBB
U0NJSUxpdGVyYWwoIkV4Y2VwdGlvbiBGdXp6IikpKTsKKyAgICAgICAgICAgIGV4ZWMsIGNyZWF0
ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiRXhjZXB0aW9uIEZ1enoiKSkpOwogICAgIH0KIH0K
IApkaWZmIC0tZ2l0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBl
cnMuY3BwIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3Bw
CmluZGV4IDNmMDJjMmYuLmM1ZGQ5N2IgMTAwNjQ0Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKQEAgLTc1LDExICs3NSw2IEBAIEpTT2JqZWN0KiBj
cmVhdGVTdGFja092ZXJmbG93RXJyb3IoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBjcmVh
dGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiTWF4aW11bSBjYWxsIHN0YWNrIHNpemUg
ZXhjZWVkZWQuIikpOwogfQogCi1KU09iamVjdCogY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVJhbmdlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBBU0NJSUxpdGVyYWwoIk1heGltdW0gY2FsbCBzdGFjayBzaXplIGV4
Y2VlZGVkLiIpKTsKLX0KLQogSlNPYmplY3QqIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3Io
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKIHsKICAgICBpZiAoZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmlzUHJpdmF0ZU5hbWUoaWRlbnQpKSB7CkBAIC0yMzksNDggKzIz
NCw0NCBAQCBzdGF0aWMgU3RyaW5nIGludmFsaWRQYXJhbWV0ZXJJbnN0YW5jZW9mU291cmNlQXBw
ZW5kZXIoY29uc3QgU3RyaW5nJiBvcmlnaW5hbE1lcwogICAgIHJldHVybiBtYWtlU3RyaW5nKHJp
Z2h0SGFuZFNpZGUsICIgaXMgbm90IGEgZnVuY3Rpb24uIChldmFsdWF0aW5nICciLCBzb3VyY2VU
ZXh0LCAiJykiKTsKIH0KIAotSlNPYmplY3QqIGNyZWF0ZUVycm9yKEV4ZWNTdGF0ZSogZXhlYywg
RXJyb3JGYWN0b3J5IGVycm9yRmFjdG9yeSwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlciBhcHBlbmRlcikKK0pTT2JqZWN0
KiBjcmVhdGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSwgRXJyb3JJbnN0YW5jZTo6U291cmNlQXBwZW5kZXIgYXBwZW5kZXIpCiB7CiAg
ICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoZXJyb3JEZXNjcmlwdGlvbkZvclZh
bHVlKGV4ZWMsIHZhbHVlKS0+dmFsdWUoZXhlYyksICcgJywgbWVzc2FnZSk7Ci0gICAgSlNPYmpl
Y3QqIGV4Y2VwdGlvbiA9IGVycm9yRmFjdG9yeShleGVjLCBlcnJvck1lc3NhZ2UpOworICAgIEpT
T2JqZWN0KiBleGNlcHRpb24gPSBjcmVhdGVUeXBlRXJyb3IoZXhlYywgZXJyb3JNZXNzYWdlLCBh
cHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZSh2YWx1ZSkpOwogICAgIEFTU0VSVChleGNlcHRp
b24tPmlzRXJyb3JJbnN0YW5jZSgpKTsKLSAgICBzdGF0aWNfY2FzdDxFcnJvckluc3RhbmNlKj4o
ZXhjZXB0aW9uKS0+c2V0U291cmNlQXBwZW5kZXIoYXBwZW5kZXIpOwotICAgIHN0YXRpY19jYXN0
PEVycm9ySW5zdGFuY2UqPihleGNlcHRpb24pLT5zZXRSdW50aW1lVHlwZUZvckNhdXNlKHJ1bnRp
bWVUeXBlRm9yVmFsdWUodmFsdWUpKTsKICAgICByZXR1cm4gZXhjZXB0aW9uOwogfQogCiBKU09i
amVjdCogY3JlYXRlSW52YWxpZEZ1bmN0aW9uQXBwbHlQYXJhbWV0ZXJFcnJvcihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IGNyZWF0
ZVR5cGVFcnJvcihleGVjLCBtYWtlU3RyaW5nKCJzZWNvbmQgYXJndW1lbnQgdG8gRnVuY3Rpb24u
cHJvdG90eXBlLmFwcGx5IG11c3QgYmUgYW4gQXJyYXktbGlrZSBvYmplY3QiKSk7CisgICAgSlNP
YmplY3QqIGV4Y2VwdGlvbiA9IGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtYWtlU3RyaW5nKCJzZWNv
bmQgYXJndW1lbnQgdG8gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5IG11c3QgYmUgYW4gQXJyYXkt
bGlrZSBvYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVyLCBydW50aW1lVHlwZUZvclZhbHVl
KHZhbHVlKSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvbi0+aXNFcnJvckluc3RhbmNlKCkpOwotICAg
IHN0YXRpY19jYXN0PEVycm9ySW5zdGFuY2UqPihleGNlcHRpb24pLT5zZXRTb3VyY2VBcHBlbmRl
cihkZWZhdWx0U291cmNlQXBwZW5kZXIpOwotICAgIHN0YXRpY19jYXN0PEVycm9ySW5zdGFuY2Uq
PihleGNlcHRpb24pLT5zZXRSdW50aW1lVHlwZUZvckNhdXNlKHJ1bnRpbWVUeXBlRm9yVmFsdWUo
dmFsdWUpKTsKICAgICByZXR1cm4gZXhjZXB0aW9uOwogfQogCiBKU09iamVjdCogY3JlYXRlSW52
YWxpZEluUGFyYW1ldGVyRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewot
ICAgIHJldHVybiBjcmVhdGVFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IsIHZhbHVlLCBtYWtl
U3RyaW5nKCJpcyBub3QgYW4gT2JqZWN0LiIpLCBpbnZhbGlkUGFyYW1ldGVySW5Tb3VyY2VBcHBl
bmRlcik7CisgICAgcmV0dXJuIGNyZWF0ZUVycm9yKGV4ZWMsIHZhbHVlLCBtYWtlU3RyaW5nKCJp
cyBub3QgYW4gT2JqZWN0LiIpLCBpbnZhbGlkUGFyYW1ldGVySW5Tb3VyY2VBcHBlbmRlcik7CiB9
CiAKIEpTT2JqZWN0KiBjcmVhdGVJbnZhbGlkSW5zdGFuY2VvZlBhcmFtZXRlckVycm9yKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gY3JlYXRlRXJyb3IoZXhl
YywgY3JlYXRlVHlwZUVycm9yLCB2YWx1ZSwgbWFrZVN0cmluZygiaXMgbm90IGEgZnVuY3Rpb24u
IiksIGludmFsaWRQYXJhbWV0ZXJJbnN0YW5jZW9mU291cmNlQXBwZW5kZXIpOworICAgIHJldHVy
biBjcmVhdGVFcnJvcihleGVjLCB2YWx1ZSwgbWFrZVN0cmluZygiaXMgbm90IGEgZnVuY3Rpb24u
IiksIGludmFsaWRQYXJhbWV0ZXJJbnN0YW5jZW9mU291cmNlQXBwZW5kZXIpOwogfQogCiBKU09i
amVjdCogY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHVlKQogewotICAgIHJldHVybiBjcmVhdGVFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3Is
IHZhbHVlLCBBU0NJSUxpdGVyYWwoImlzIG5vdCBhIGNvbnN0cnVjdG9yIiksIGRlZmF1bHRTb3Vy
Y2VBcHBlbmRlcik7CisgICAgcmV0dXJuIGNyZWF0ZUVycm9yKGV4ZWMsIHZhbHVlLCBBU0NJSUxp
dGVyYWwoImlzIG5vdCBhIGNvbnN0cnVjdG9yIiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlcik7CiB9
CiAKIEpTT2JqZWN0KiBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVF
cnJvciwgdmFsdWUsIEFTQ0lJTGl0ZXJhbCgiaXMgbm90IGEgZnVuY3Rpb24iKSwgbm90QUZ1bmN0
aW9uU291cmNlQXBwZW5kZXIpOworICAgIHJldHVybiBjcmVhdGVFcnJvcihleGVjLCB2YWx1ZSwg
QVNDSUlMaXRlcmFsKCJpcyBub3QgYSBmdW5jdGlvbiIpLCBub3RBRnVuY3Rpb25Tb3VyY2VBcHBl
bmRlcik7CiB9CiAKIEpTT2JqZWN0KiBjcmVhdGVOb3RBbk9iamVjdEVycm9yKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gY3JlYXRlRXJyb3IoZXhlYywgY3Jl
YXRlVHlwZUVycm9yLCB2YWx1ZSwgQVNDSUlMaXRlcmFsKCJpcyBub3QgYW4gb2JqZWN0IiksIGRl
ZmF1bHRTb3VyY2VBcHBlbmRlcik7CisgICAgcmV0dXJuIGNyZWF0ZUVycm9yKGV4ZWMsIHZhbHVl
LCBBU0NJSUxpdGVyYWwoImlzIG5vdCBhbiBvYmplY3QiKSwgZGVmYXVsdFNvdXJjZUFwcGVuZGVy
KTsKIH0KIAogSlNPYmplY3QqIGNyZWF0ZUVycm9yRm9ySW52YWxpZEdsb2JhbEFzc2lnbm1lbnQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKQEAgLTI4OCwxNCAr
Mjc5LDkgQEAgSlNPYmplY3QqIGNyZWF0ZUVycm9yRm9ySW52YWxpZEdsb2JhbEFzc2lnbm1lbnQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHAKICAgICByZXR1cm4gY3JlYXRlUmVmZXJl
bmNlRXJyb3IoZXhlYywgbWFrZVN0cmluZygiU3RyaWN0IG1vZGUgZm9yYmlkcyBpbXBsaWNpdCBj
cmVhdGlvbiBvZiBnbG9iYWwgcHJvcGVydHkgJyIsIHByb3BlcnR5TmFtZSwgJ1wnJykpOwogfQog
Ci1KU09iamVjdCogY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQotewotICAgIHJldHVybiBjcmVhdGVFcnJvcihnbG9iYWxPYmplY3QsIEFTQ0lJTGl0
ZXJhbCgiT3V0IG9mIG1lbW9yeSIpKTsKLX0KLQogSlNPYmplY3QqIHRocm93T3V0T2ZNZW1vcnlF
cnJvcihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNl
cHRpb24oZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpKTsKKyAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVh
dGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKIH0KIAogSlNPYmplY3QqIHRocm93U3RhY2tPdmVy
Zmxvd0Vycm9yKEV4ZWNTdGF0ZSogZXhlYykKZGlmZiAtLWdpdCBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmggU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhjZXB0aW9uSGVscGVycy5oCmluZGV4IGJjNWRhZDEuLmQxMGQ5MWYgMTAwNjQ0Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmgKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaApAQCAtMzQsMTUgKzM0
LDEzIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi10eXBlZGVmIEpTT2JqZWN0KiAoKkVycm9yRmFj
dG9yeSkoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7Cit0eXBlZGVmIEpTT2JqZWN0KiAoKkVy
cm9yRmFjdG9yeSkoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJiwgRXJyb3JJbnN0YW5jZTo6U291
cmNlQXBwZW5kZXIpOwogCiBKU09iamVjdCogY3JlYXRlVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2Vw
dGlvbihWTSopOwogYm9vbCBpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24oSlNPYmplY3Qq
KTsKIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9u
KEpTVmFsdWUpOwotSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZUVycm9yKEV4ZWNT
dGF0ZSosIEVycm9yRmFjdG9yeSwgSlNWYWx1ZSwgY29uc3QgU3RyaW5nJiwgRXJyb3JJbnN0YW5j
ZTo6U291cmNlQXBwZW5kZXIpOworSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNyZWF0ZUVy
cm9yKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IFN0cmluZyYsIEVycm9ySW5zdGFuY2U6OlNv
dXJjZUFwcGVuZGVyKTsKIEpTX0VYUE9SVF9QUklWQVRFIEpTT2JqZWN0KiBjcmVhdGVTdGFja092
ZXJmbG93RXJyb3IoRXhlY1N0YXRlKik7Ci1KU09iamVjdCogY3JlYXRlU3RhY2tPdmVyZmxvd0Vy
cm9yKEpTR2xvYmFsT2JqZWN0Kik7Ci1KU09iamVjdCogY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihK
U0dsb2JhbE9iamVjdCopOwogSlNPYmplY3QqIGNyZWF0ZVVuZGVmaW5lZFZhcmlhYmxlRXJyb3Io
RXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYpOwogSlNPYmplY3QqIGNyZWF0ZU5vdEFuT2Jq
ZWN0RXJyb3IoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CiBKU09iamVjdCogY3JlYXRlSW52YWxpZEZ1
bmN0aW9uQXBwbHlQYXJhbWV0ZXJFcnJvcihFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKZGlmZiAtLWdp
dCBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyQ29uc3RydWN0b3Iu
Y3BwIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
ci5jcHAKaW5kZXggZjU1NDcxZS4uNDFhZmJlMSAxMDA2NDQKLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAKQEAgLTkyLDcg
KzkyLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0QXJy
YXlCdWZmZXIoRXhlY1N0YXRlKiBleGVjKQogICAgIAogICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4g
YnVmZmVyID0gQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgsIDEpOwogICAgIGlmICghYnVmZmVy
KQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZU91dE9mTWVtb3J5RXJy
b3IoY29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihleGVjKSk7CiAgICAgCiAgICAgSlNB
cnJheUJ1ZmZlciogcmVzdWx0ID0gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKAogICAgICAgICBleGVj
LT52bSgpLCBjb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCktPmFycmF5QnVmZmVyU3RydWN0dXJl
KCksIGJ1ZmZlcik7CmRpZmYgLS1naXQgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUJ1ZmZlclByb3RvdHlwZS5jcHAgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheUJ1ZmZlclByb3RvdHlwZS5jcHAKaW5kZXggOGYzZDY2OS4uZWY2NTBmNiAxMDA2NDQKLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3Bw
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyUHJvdG90eXBl
LmNwcApAQCAtNjAsNyArNjAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheUJ1ZmZlclByb3RvRnVuY1NsaWNlKEV4ZWNTdGF0ZSogZXhlYykKICAgICAKICAgICBS
ZWZQdHI8QXJyYXlCdWZmZXI+IG5ld0J1ZmZlciA9IHRoaXNPYmplY3QtPmltcGwoKS0+c2xpY2Uo
YmVnaW4sIGVuZCk7CiAgICAgaWYgKCFuZXdCdWZmZXIpCi0gICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlFcnJvcihjYWxsZWUtPmdsb2JhbE9iamVjdCgp
KSk7CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlT3V0T2ZNZW1vcnlF
cnJvcihleGVjKSk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjYWxsZWUtPmds
b2JhbE9iamVjdCgpLT5hcnJheUJ1ZmZlclN0cnVjdHVyZSgpOwogICAgIApkaWZmIC0tZ2l0IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5l
cy5oIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lcy5oCmluZGV4IGI3YTBhNjAuLmVjNjUzZGMgMTAwNjQ0Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaAorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVz
LmgKQEAgLTQ5LDcgKzQ5LDcgQEAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4qIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OjpjcmVhdGUoCiB7CiAgICAgQ29uc3RydWN0
aW9uQ29udGV4dCBjb250ZXh0KGV4ZWMtPnZtKCksIHN0cnVjdHVyZSwgbGVuZ3RoLCBzaXplb2Yo
dHlwZW5hbWUgQWRhcHRvcjo6VHlwZSkpOwogICAgIGlmICghY29udGV4dCkgewotICAgICAgICBl
eGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3Ioc3Ry
dWN0dXJlLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0
aW9uKGV4ZWMsIGNyZWF0ZU91dE9mTWVtb3J5RXJyb3IoZXhlYykpOwogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAgICAgSlNHZW5lcmljVHlwZWRBcnJheVZpZXcqIHJlc3VsdCA9CkBAIC02Nyw3
ICs2Nyw3IEBAIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+KiBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPjo6Y3JlYXRlVW5pbml0CiAgICAgICAgIGV4ZWMtPnZtKCksIHN0
cnVjdHVyZSwgbGVuZ3RoLCBzaXplb2YodHlwZW5hbWUgQWRhcHRvcjo6VHlwZSksCiAgICAgICAg
IENvbnN0cnVjdGlvbkNvbnRleHQ6OkRvbnRJbml0aWFsaXplKTsKICAgICBpZiAoIWNvbnRleHQp
IHsKLSAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVPdXRPZk1l
bW9yeUVycm9yKHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpKTsKKyAgICAgICAgZXhlYy0+dm0o
KS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVPdXRPZk1lbW9yeUVycm9yKGV4ZWMpKTsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3KiByZXN1
bHQgPQpkaWZmIC0tZ2l0IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9y
Q29uc3RydWN0b3IuY3BwIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9y
Q29uc3RydWN0b3IuY3BwCmluZGV4IDUxMTk5YjIuLjNmYjU4YTMgMTAwNjQ0Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKQEAg
LTY1LDEwICs2NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50ZXJwcmV0ZXI6
OmNvbnN0cnVjdFdpdGhOYXRpdmVFcnJvckNvbnN0cnVjdG9yKEV4CiAgICAgSlNWYWx1ZSBtZXNz
YWdlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgU3RydWN0dXJlKiBlcnJvclN0cnVjdHVyZSA9
IHN0YXRpY19jYXN0PE5hdGl2ZUVycm9yQ29uc3RydWN0b3IqPihleGVjLT5jYWxsZWUoKSktPmVy
cm9yU3RydWN0dXJlKCk7CiAgICAgQVNTRVJUKGVycm9yU3RydWN0dXJlKTsKLSAgICBWZWN0b3I8
U3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsKLSAgICBleGVjLT52bSgpLmludGVycHJldGVyLT5nZXRT
dGFja1RyYWNlKHN0YWNrVHJhY2UsIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkp
OwotICAgIHN0YWNrVHJhY2UucmVtb3ZlKDApOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
RXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsIGVycm9yU3RydWN0dXJlLCBtZXNzYWdlLCBzdGFj
a1RyYWNlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVh
dGUoZXhlYywgZXJyb3JTdHJ1Y3R1cmUsIG1lc3NhZ2UsIG51bGxwdHIsIFR5cGVOb3RoaW5nLCBm
YWxzZSkpOwogfQogCiBDb25zdHJ1Y3RUeXBlIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6OmdldENv
bnN0cnVjdERhdGEoSlNDZWxsKiwgQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKQEAgLTgx
LDEwICs3OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSW50ZXJwcmV0ZXI6OmNh
bGxOYXRpdmVFcnJvckNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSoKIHsKICAgICBKU1ZhbHVlIG1lc3Nh
Z2UgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBTdHJ1Y3R1cmUqIGVycm9yU3RydWN0dXJlID0g
c3RhdGljX2Nhc3Q8TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcio+KGV4ZWMtPmNhbGxlZSgpKS0+ZXJy
b3JTdHJ1Y3R1cmUoKTsKLSAgICBWZWN0b3I8U3RhY2tGcmFtZT4gc3RhY2tUcmFjZTsKLSAgICBl
eGVjLT52bSgpLmludGVycHJldGVyLT5nZXRTdGFja1RyYWNlKHN0YWNrVHJhY2UsIHN0ZDo6bnVt
ZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkpOwotICAgIHN0YWNrVHJhY2UucmVtb3ZlKDApOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoRXJyb3JJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsIGVy
cm9yU3RydWN0dXJlLCBtZXNzYWdlLCBzdGFja1RyYWNlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShFcnJvckluc3RhbmNlOjpjcmVhdGUoZXhlYywgZXJyb3JTdHJ1Y3R1cmUsIG1lc3Nh
Z2UsIG51bGxwdHIsIFR5cGVOb3RoaW5nLCBmYWxzZSkpOwogfQogCiBDYWxsVHlwZSBOYXRpdmVF
cnJvckNvbnN0cnVjdG9yOjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEp
CmRpZmYgLS1naXQgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCBlNzYzOTQ3Li42MWU0NTgyIDEwMDY0
NAotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTU0MCw5OCArNTQwLDYgQEAgdm9pZCBWTTo6
cmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoKQogICAgIGhlYXAuY29sbGVjdEFsbEdhcmJhZ2UoKTsK
IH0KIAotc3RhdGljIHZvaWQgYXBwZW5kU291cmNlVG9FcnJvcihDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgRXJyb3JJbnN0YW5jZSogZXhjZXB0aW9uLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKLXsK
LSAgICBFcnJvckluc3RhbmNlOjpTb3VyY2VBcHBlbmRlciBhcHBlbmRlciA9IGV4Y2VwdGlvbi0+
c291cmNlQXBwZW5kZXIoKTsKLSAgICBleGNlcHRpb24tPmNsZWFyU291cmNlQXBwZW5kZXIoKTsK
LSAgICBSdW50aW1lVHlwZSB0eXBlID0gZXhjZXB0aW9uLT5ydW50aW1lVHlwZUZvckNhdXNlKCk7
Ci0gICAgZXhjZXB0aW9uLT5jbGVhclJ1bnRpbWVUeXBlRm9yQ2F1c2UoKTsKLSAgICAKLSAgICBp
ZiAoIWNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmhhc0V4cHJlc3Npb25JbmZvKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBpbnQgc3RhcnRPZmZzZXQgPSAwOwotICAgIGludCBlbmRPZmZz
ZXQgPSAwOwotICAgIGludCBkaXZvdFBvaW50ID0gMDsKLSAgICB1bnNpZ25lZCBsaW5lID0gMDsK
LSAgICB1bnNpZ25lZCBjb2x1bW4gPSAwOwotICAgIAotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAgICBjb2RlQmxvY2stPmV4cHJlc3Npb25SYW5n
ZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCBkaXZvdFBvaW50LCBzdGFydE9mZnNl
dCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4pOwotICAgIAotICAgIGludCBleHByZXNzaW9uU3Rh
cnQgPSBkaXZvdFBvaW50IC0gc3RhcnRPZmZzZXQ7Ci0gICAgaW50IGV4cHJlc3Npb25TdG9wID0g
ZGl2b3RQb2ludCArIGVuZE9mZnNldDsKLSAgICAKLSAgICBjb25zdCBTdHJpbmcmIHNvdXJjZVN0
cmluZyA9IGNvZGVCbG9jay0+c291cmNlKCktPnNvdXJjZSgpOwotICAgIGlmICghZXhwcmVzc2lv
blN0b3AgfHwgZXhwcmVzc2lvblN0YXJ0ID4gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VTdHJpbmcu
bGVuZ3RoKCkpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgVk0qIHZtID0gJmNhbGxGcmFt
ZS0+dm0oKTsKLSAgICBKU1ZhbHVlIGpzTWVzc2FnZSA9IGV4Y2VwdGlvbi0+Z2V0RGlyZWN0KCp2
bSwgdm0tPnByb3BlcnR5TmFtZXMtPm1lc3NhZ2UpOwotICAgIGlmICghanNNZXNzYWdlIHx8ICFq
c01lc3NhZ2UuaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFN0cmluZyBt
ZXNzYWdlID0gYXNTdHJpbmcoanNNZXNzYWdlKS0+dmFsdWUoY2FsbEZyYW1lKTsKLSAgICAKLSAg
ICBpZiAoZXhwcmVzc2lvblN0YXJ0IDwgZXhwcmVzc2lvblN0b3ApCi0gICAgICAgIG1lc3NhZ2Ug
PSBhcHBlbmRlcihtZXNzYWdlLCBjb2RlQmxvY2stPnNvdXJjZSgpLT5nZXRSYW5nZShleHByZXNz
aW9uU3RhcnQsIGV4cHJlc3Npb25TdG9wKSwgdHlwZSwgRXJyb3JJbnN0YW5jZTo6Rm91bmRFeGFj
dFNvdXJjZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIE5vIHJhbmdlIGluZm9ybWF0aW9uLCBz
byBnaXZlIGEgZmV3IGNoYXJhY3RlcnMgb2YgY29udGV4dC4KLSAgICAgICAgY29uc3QgU3RyaW5n
SW1wbCogZGF0YSA9IHNvdXJjZVN0cmluZy5pbXBsKCk7Ci0gICAgICAgIGludCBkYXRhTGVuZ3Ro
ID0gc291cmNlU3RyaW5nLmxlbmd0aCgpOwotICAgICAgICBpbnQgc3RhcnQgPSBleHByZXNzaW9u
U3RhcnQ7Ci0gICAgICAgIGludCBzdG9wID0gZXhwcmVzc2lvblN0YXJ0OwotICAgICAgICAvLyBH
ZXQgdXAgdG8gMjAgY2hhcmFjdGVycyBvZiBjb250ZXh0IHRvIHRoZSBsZWZ0IGFuZCByaWdodCBv
ZiB0aGUgZGl2b3QsIGNsYW1waW5nIHRvIHRoZSBsaW5lLgotICAgICAgICAvLyBUaGVuIHN0cmlw
IHdoaXRlc3BhY2UuCi0gICAgICAgIHdoaWxlIChzdGFydCA+IDAgJiYgKGV4cHJlc3Npb25TdGFy
dCAtIHN0YXJ0IDwgMjApICYmICgqZGF0YSlbc3RhcnQgLSAxXSAhPSAnXG4nKQotICAgICAgICAg
ICAgc3RhcnQtLTsKLSAgICAgICAgd2hpbGUgKHN0YXJ0IDwgKGV4cHJlc3Npb25TdGFydCAtIDEp
ICYmIGlzU3RyV2hpdGVTcGFjZSgoKmRhdGEpW3N0YXJ0XSkpCi0gICAgICAgICAgICBzdGFydCsr
OwotICAgICAgICB3aGlsZSAoc3RvcCA8IGRhdGFMZW5ndGggJiYgKHN0b3AgLSBleHByZXNzaW9u
U3RhcnQgPCAyMCkgJiYgKCpkYXRhKVtzdG9wXSAhPSAnXG4nKQotICAgICAgICAgICAgc3RvcCsr
OwotICAgICAgICB3aGlsZSAoc3RvcCA+IGV4cHJlc3Npb25TdGFydCAmJiBpc1N0cldoaXRlU3Bh
Y2UoKCpkYXRhKVtzdG9wIC0gMV0pKQotICAgICAgICAgICAgc3RvcC0tOwotICAgICAgICBtZXNz
YWdlID0gYXBwZW5kZXIobWVzc2FnZSwgY29kZUJsb2NrLT5zb3VyY2UoKS0+Z2V0UmFuZ2Uoc3Rh
cnQsIHN0b3ApLCB0eXBlLCBFcnJvckluc3RhbmNlOjpGb3VuZEFwcHJveGltYXRlU291cmNlKTsK
LSAgICB9Ci0gICAgCi0gICAgZXhjZXB0aW9uLT5wdXREaXJlY3QoKnZtLCB2bS0+cHJvcGVydHlO
YW1lcy0+bWVzc2FnZSwganNTdHJpbmcodm0sIG1lc3NhZ2UpKTsKLX0KLQotY2xhc3MgRmluZEZp
cnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3RvciB7Ci1wdWJsaWM6Ci0gICAgRmluZEZp
cnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3RvcihDYWxsRnJhbWUqIHN0YXJ0Q2FsbEZy
YW1lKQotICAgICAgICA6IG1fc3RhcnRDYWxsRnJhbWUoc3RhcnRDYWxsRnJhbWUpCi0gICAgICAg
ICwgbV9mb3VuZENhbGxGcmFtZShudWxscHRyKQotICAgICAgICAsIG1fZm91bmRTdGFydENhbGxG
cmFtZShmYWxzZSkKLSAgICAgICAgLCBtX2luZGV4KDApCi0gICAgeyB9Ci0KLSAgICBTdGFja1Zp
c2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0g
ICAgICAgIGlmICghbV9mb3VuZFN0YXJ0Q2FsbEZyYW1lICYmICh2aXNpdG9yLT5jYWxsRnJhbWUo
KSA9PSBtX3N0YXJ0Q2FsbEZyYW1lKSkKLSAgICAgICAgICAgIG1fZm91bmRTdGFydENhbGxGcmFt
ZSA9IHRydWU7Ci0KLSAgICAgICAgaWYgKG1fZm91bmRTdGFydENhbGxGcmFtZSkgewotICAgICAg
ICAgICAgaWYgKHZpc2l0b3ItPmNhbGxGcmFtZSgpLT5jb2RlQmxvY2soKSkgewotICAgICAgICAg
ICAgICAgIG1fZm91bmRDYWxsRnJhbWUgPSB2aXNpdG9yLT5jYWxsRnJhbWUoKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbV9pbmRleCsrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRv
cjo6Q29udGludWU7Ci0gICAgfQotCi0gICAgQ2FsbEZyYW1lKiBmb3VuZENhbGxGcmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZm91bmRDYWxsRnJhbWU7IH0KLSAgICB1bnNpZ25lZCBpbmRleCgpIGNv
bnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KLQotcHJpdmF0ZToKLSAgICBDYWxsRnJhbWUqIG1fc3Rh
cnRDYWxsRnJhbWU7Ci0gICAgQ2FsbEZyYW1lKiBtX2ZvdW5kQ2FsbEZyYW1lOwotICAgIGJvb2wg
bV9mb3VuZFN0YXJ0Q2FsbEZyYW1lOwotICAgIHVuc2lnbmVkIG1faW5kZXg7Ci19OwotCiBKU1Zh
bHVlIFZNOjp0aHJvd0V4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZXJyb3IpCiB7
CiAgICAgaWYgKE9wdGlvbnM6OmJyZWFrT25UaHJvdygpKSB7CkBAIC02NDUsNDQgKzU1Myw3IEBA
IEpTVmFsdWUgVk06OnRocm93RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBlcnJv
cikKICAgICBpbnRlcnByZXRlci0+Z2V0U3RhY2tUcmFjZShzdGFja1RyYWNlKTsKICAgICBtX2V4
Y2VwdGlvblN0YWNrID0gUmVmQ291bnRlZEFycmF5PFN0YWNrRnJhbWU+KHN0YWNrVHJhY2UpOwog
ICAgIG1fZXhjZXB0aW9uID0gZXJyb3I7Ci0gICAgCi0gICAgaWYgKHN0YWNrVHJhY2UuaXNFbXB0
eSgpIHx8ICFlcnJvci5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgSlNP
YmplY3QqIGV4Y2VwdGlvbiA9IGFzT2JqZWN0KGVycm9yKTsKLSAgICAKLSAgICBTdGFja0ZyYW1l
IHN0YWNrRnJhbWU7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBzdGFja1RyYWNlLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIHN0YWNrRnJhbWUgPSBzdGFja1RyYWNlLmF0KGkpOwotICAg
ICAgICBpZiAoc3RhY2tGcmFtZS5ieXRlY29kZU9mZnNldCkKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBpZiAoIWhhc0Vycm9ySW5mbyhleGVjLCBleGNlcHRpb24pKSB7Ci0gICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgb25seSByZWFsbHkgYmUgYWRkaW5nIHRoZXNlIHByb3BlcnRp
ZXMgdG8gVk0gZ2VuZXJhdGVkIGV4Y2VwdGlvbnMsCi0gICAgICAgIC8vIGJ1dCB0aGUgaW5zcGVj
dG9yIGN1cnJlbnRseSByZXF1aXJlcyB0aGVzZSBmb3IgYWxsIHRocm93biBvYmplY3RzLgotICAg
ICAgICB1bnNpZ25lZCBsaW5lOwotICAgICAgICB1bnNpZ25lZCBjb2x1bW47Ci0gICAgICAgIHN0
YWNrRnJhbWUuY29tcHV0ZUxpbmVBbmRDb2x1bW4obGluZSwgY29sdW1uKTsKLSAgICAgICAgZXhj
ZXB0aW9uLT5wdXREaXJlY3QoKnRoaXMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcodGhpcywgImxp
bmUiKSwganNOdW1iZXIobGluZSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7Ci0gICAgICAgIGV4
Y2VwdGlvbi0+cHV0RGlyZWN0KCp0aGlzLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHRoaXMsICJj
b2x1bW4iKSwganNOdW1iZXIoY29sdW1uKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKLSAgICAg
ICAgaWYgKCFzdGFja0ZyYW1lLnNvdXJjZVVSTC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBleGNl
cHRpb24tPnB1dERpcmVjdCgqdGhpcywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh0aGlzLCAic291
cmNlVVJMIiksIGpzU3RyaW5nKHRoaXMsIHN0YWNrRnJhbWUuc291cmNlVVJMKSwgUmVhZE9ubHkg
fCBEb250RGVsZXRlKTsKLSAgICB9Ci0gICAgaWYgKGV4Y2VwdGlvbi0+aXNFcnJvckluc3RhbmNl
KCkgJiYgc3RhdGljX2Nhc3Q8RXJyb3JJbnN0YW5jZSo+KGV4Y2VwdGlvbiktPmhhc1NvdXJjZUFw
cGVuZGVyKCkpIHsKLSAgICAgICAgRmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVu
Y3RvciBmdW5jdG9yKGV4ZWMpOwotICAgICAgICB0b3BDYWxsRnJhbWUtPml0ZXJhdGUoZnVuY3Rv
cik7Ci0gICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gZnVuY3Rvci5mb3VuZENhbGxGcmFt
ZSgpOwotICAgICAgICB1bnNpZ25lZCBzdGFja0luZGV4ID0gZnVuY3Rvci5pbmRleCgpOwotCi0g
ICAgICAgIGlmIChjYWxsRnJhbWUgJiYgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSkgewotICAgICAg
ICAgICAgc3RhY2tGcmFtZSA9IHN0YWNrVHJhY2UuYXQoc3RhY2tJbmRleCk7Ci0gICAgICAgICAg
ICBhcHBlbmRTb3VyY2VUb0Vycm9yKGNhbGxGcmFtZSwgc3RhdGljX2Nhc3Q8RXJyb3JJbnN0YW5j
ZSo+KGV4Y2VwdGlvbiksIHN0YWNrRnJhbWUuYnl0ZWNvZGVPZmZzZXQpOwotICAgICAgICB9Ci0g
ICAgfQogCi0gICAgaWYgKGV4Y2VwdGlvbi0+aGFzUHJvcGVydHkoZXhlYywgdGhpcy0+cHJvcGVy
dHlOYW1lcy0+c3RhY2spKQotICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgCi0gICAgZXhjZXB0
aW9uLT5wdXREaXJlY3QoKnRoaXMsIHByb3BlcnR5TmFtZXMtPnN0YWNrLCBpbnRlcnByZXRlci0+
c3RhY2tUcmFjZUFzU3RyaW5nKHRvcENhbGxGcmFtZSwgc3RhY2tUcmFjZSksIERvbnRFbnVtKTsK
ICAgICByZXR1cm4gZXJyb3I7CiB9CiAgICAgCmRpZmYgLS1naXQgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9mcmVlemVfbGVlay5qcyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL2ZyZWV6ZV9sZWVrLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmExNzFlNDkKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9mcmVlemVfbGVlay5qcwpAQCAtMCwwICsxLDQxIEBACit2YXIgbyA9IE9iamVjdC5m
cmVlemUoW10pLAorICAgIGxlYWsgPSB7fTsKKwordHJ5IHsgCisgIHRocm93IG87IAorfSBjYXRj
aCAoZXgpIHt9CisKK2lmKG8uc3RhY2sgIT09IHVuZGVmaW5lZCkKKyAgICB0aHJvdyBuZXcgRXJy
b3IoInRoZSBzdGFjayB3YXMgbGVha2VkLiIpOworCitvLnN0YWNrID0gbGVhazsKKworaWYoby5z
dGFjayA9PT0gbGVhaykKKyAgICB0aHJvdyBuZXcgRXJyb3IoInRoZSBvYmplY3Qgd2Fzbid0IGZy
b3plbi4iKTsKKworby5vdGhlciA9ICJ3cm9uZyI7CisKK2lmKG8ub3RoZXIgPT09ICJ3cm9uZyIp
CisgICAgdGhyb3cgbmV3IEVycm9yKCJ0aGUgb2JqZWN0IHdhc24ndCBmcm96ZW4uIik7CisKKwor
byA9IE9iamVjdC5mcmVlemUoeyJoaSI6ICJvdGhlciJ9KTsKKwordHJ5IHsgCisgIHRocm93IG87
IAorfSBjYXRjaCAoZXgpIHt9CitvLnN0YWNrID0gbGVhazsKKworCitpZihvLnN0YWNrICE9PSB1
bmRlZmluZWQpCisgICAgdGhyb3cgbmV3IEVycm9yKCJ0aGUgc3RhY2sgd2FzIGxlYWtlZC4iKTsK
Kworby5zdGFjayA9IGxlYWs7CisKK2lmKG8uc3RhY2sgPT09IGxlYWspCisgICAgdGhyb3cgbmV3
IEVycm9yKCJ0aGUgb2JqZWN0IHdhc24ndCBmcm96ZW4uIik7CisKK28ub3RoZXIgPSAid3Jvbmci
OworCitpZihvLm90aGVyID09PSAid3JvbmciKQorICAgIHRocm93IG5ldyBFcnJvcigidGhlIG9i
amVjdCB3YXNuJ3QgZnJvemVuLiIpOwpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjg2ODBhYy4uYTc0OWI4YiAxMDA2NDQK
LS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjIgQEAKKzIwMTUtMDQtMDYgIE1hdHRoZXcgTWlybWFuICA8bW1pcm1hbkBh
cHBsZS5jb20+CisKKyAgICAgICAgU291cmNlIGFuZCBzdGFjayBpbmZvcm1hdGlvbiBzaG91bGQg
Z2V0IGFwcGVuZGVkIG9ubHkgdG8gbmF0aXZlIGVycm9ycworICAgICAgICBhbmQgc2hvdWxkIGJl
IGFkZGVkIGRpcmVjdGx5IGFmdGVyIGNvbnN0cnVjdGlvbiByYXRoZXIgdGhhbiB3aGVuIHRocm93
bi4KKyAgICAgICAgVGhpcyBmaXhlcyBmcm96ZW4gb2JqZWN0cyBiZWluZyB1bmZyb3plbiB3aGVu
IHRocm93biB3aGlsZSBjb25mb3JtaW5nIHRvIAorICAgICAgICBlY21hIHNjcmlwdCBzdGFuZGFy
ZCBhbmQgb3RoZXIgYnJvd3NlciBiZWhhdmlvci4KKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMTk5
MjcyOTMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
MTg3MQorICAgICAgICAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKyAgICAgICAgCisgICAgICAgIFNldHMg
bGluZSwgY29sdW1uLCBzb3VyY2UgYW5kIHN0YWNrIGluZm9ybWF0aW9uIGZvciBET01FeGNlcHRp
b25zIGFzIAorICAgICAgICBleHBlY3RlZCBieSB0aGUgd2ViaW5zcGVjdG9yIGZvciBuYXRpdmUg
ZXJyb3JzLgorICAgICAgICAKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c2V0RE9NRXhjZXB0aW9uKToKKwogMjAxNS0wNC0wNiAgSmVy
IE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBTeW5jaHJvbml6ZSBmdWxs
c2NyZWVuIGFuaW1hdGlvbiBiZXR3ZWVuIHByb2Nlc3Nlcy4KZGlmZiAtLWdpdCBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQmluZGluZy5jcHAKaW5kZXggMzZkMWEwMC4uODg2M2M5ZiAxMDA2NDQKLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKQEAgLTIxNCw4ICsyMTQsOSBAQCB2b2lk
IHNldERPTUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUgZWMpCiAgICAg
c3dpdGNoIChkZXNjcmlwdGlvbi50eXBlKSB7CiAgICAgICAgIERPTV9FWENFUFRJT05fSU5URVJG
QUNFU19GT1JfRUFDSChUUllfVE9fQ1JFQVRFX0VYQ0VQVElPTikKICAgICB9Ci0KKyAgICAKICAg
ICBBU1NFUlQoZXJyb3JPYmplY3QpOworICAgIGFkZEVycm9ySW5mbyhleGVjLCBhc09iamVjdChl
cnJvck9iamVjdCksIHRydWUpOwogICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywg
ZXJyb3JPYmplY3QpOwogfQogCi0tIAoyLjIuMSAoQXBwbGUgR2l0LTUzKQoK
</data>
<flag name="review"
          id="275062"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>