<?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>154323</bug_id>
          
          <creation_ts>2016-02-16 20:15:07 -0800</creation_ts>
          <short_desc>Remove LLVM dependencies from WebKit</short_desc>
          <delta_ts>2016-02-17 16:11:57 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>ossy</cc>
    
    <cc>yoon</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1165480</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-16 20:15:07 -0800</bug_when>
    <thetext>We don&apos;t need LLVM anymore, since we have B3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165565</commentid>
    <comment_count>1</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-02-17 06:03:28 -0800</bug_when>
    <thetext>GTK and EFL already switched to B3 and removed LLVM dependency
from the cmake build system: http://trac.webkit.org/changeset/196077

Feel free to remove all LLVM-FTL related code path. ;)

But it would be great if we can leave LLVM disassebmler in the trunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165567</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-17 06:26:49 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; GTK and EFL already switched to B3 and removed LLVM dependency
&gt; from the cmake build system: http://trac.webkit.org/changeset/196077
&gt; 
&gt; Feel free to remove all LLVM-FTL related code path. ;)
&gt; 
&gt; But it would be great if we can leave LLVM disassebmler in the trunk.

I plan to remove it as well because of how hard it is to link to LLVM and how often they break API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165569</commentid>
    <comment_count>3</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-02-17 06:29:07 -0800</bug_when>
    <thetext>(In reply to comment #2)

&gt; &gt; But it would be great if we can leave LLVM disassebmler in the trunk.
&gt; 
&gt; I plan to remove it as well because of how hard it is to link to LLVM and
&gt; how often they break API.

Is the existance of the LLVM disassembler blocker for anything?

I haven&apos;t found any issue related to it in the past years ever.
But removing it would make impossible to debug ARM traditional bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165572</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-17 06:34:53 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; 
&gt; &gt; &gt; But it would be great if we can leave LLVM disassebmler in the trunk.
&gt; &gt; 
&gt; &gt; I plan to remove it as well because of how hard it is to link to LLVM and
&gt; &gt; how often they break API.
&gt; 
&gt; Is the existance of the LLVM disassembler blocker for anything?
&gt; 
&gt; I haven&apos;t found any issue related to it in the past years ever.
&gt; But removing it would make impossible to debug ARM traditional bugs.

It would be a lot better to just write our own arm disassembler.

The issue with the llvm one is that it goes through the same soft linking nonsense that we do for the rest of llvm. So, I&apos;m not sure how you&apos;re proposing to keep it of gtk/efl removed the dependency from the build system.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165584</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-02-17 08:25:34 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; The issue with the llvm one is that it goes through the same soft linking
&gt; nonsense that we do for the rest of llvm. So, I&apos;m not sure how you&apos;re
&gt; proposing to keep it of gtk/efl removed the dependency from the build system.

We depend on LLVM only if USE_LLVM_DISASSEMBLER is set, which is off by default and which we do not expose as a public build option.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165585</commentid>
    <comment_count>6</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-02-17 08:31:38 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; It would be a lot better to just write our own arm disassembler.

It can&apos;t be serious that writing a brand new disassembler
is better choice than using a working one. 
 
&gt; The issue with the llvm one is that it goes through the same soft linking
&gt; nonsense that we do for the rest of llvm. 

It&apos;s not the most beautiful think I&apos;ve ever seen, but it works.
But I still don&apos;t understand why its existence is an issue?

Do you have a political reason that everything related
to LLVM should be removed from the trunk immediately?
I can understand that Apple don&apos;t want to use it,
in this case just remove it from your build system
and set USE_LLVM_DISASSEMBLER to 0 on your platform.

But I don&apos;t understand why do you want to force Linux 
users to drop a working debugging possibility?

&gt; So, I&apos;m not sure how you&apos;re proposing to keep it of gtk/efl 
&gt; removed the dependency from the build system.
We only removed LLVM based FTL JIT support from the build system.

LLVM disassembler is optional and still can be enabled explicitly:
build-jsc --cmakeargs=&quot;-DUSE_LLVM_DISASSEMBLER=1&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165604</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-17 09:36:58 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; It would be a lot better to just write our own arm disassembler.
&gt; 
&gt; It can&apos;t be serious that writing a brand new disassembler
&gt; is better choice than using a working one. 
&gt;  
&gt; &gt; The issue with the llvm one is that it goes through the same soft linking
&gt; &gt; nonsense that we do for the rest of llvm. 
&gt; 
&gt; It&apos;s not the most beautiful think I&apos;ve ever seen, but it works.
&gt; But I still don&apos;t understand why its existence is an issue?
&gt; 
&gt; Do you have a political reason that everything related
&gt; to LLVM should be removed from the trunk immediately?
&gt; I can understand that Apple don&apos;t want to use it,
&gt; in this case just remove it from your build system
&gt; and set USE_LLVM_DISASSEMBLER to 0 on your platform.
&gt; 
&gt; But I don&apos;t understand why do you want to force Linux 
&gt; users to drop a working debugging possibility?
&gt; 
&gt; &gt; So, I&apos;m not sure how you&apos;re proposing to keep it of gtk/efl 
&gt; &gt; removed the dependency from the build system.
&gt; We only removed LLVM based FTL JIT support from the build system.
&gt; 
&gt; LLVM disassembler is optional and still can be enabled explicitly:
&gt; build-jsc --cmakeargs=&quot;-DUSE_LLVM_DISASSEMBLER=1&quot;

Wow first of all, politics has nothing to do with this. I&apos;m trying to determine if we will need to keep the llvm soft linking madness or not. That is how we currently use llvm API. You would have to change the llvm disassembler if you wanted it to no longer depend on the soft linking. 

Second, I have no idea how you think the llvm disassembler helps you on arm traditional. If you look in LLVMDisassembler.cpp you will see that it doesn&apos;t have support for arm traditional - only arm64 and x86. 

Also, any support for using the llvm disassembler on x86 should be deleted, regardless of the arm traditonal situation. 

Can you provide some technical assistance instead of acting up?  I&apos;m arguing for the deletion of llvm dependencies on technical grounds based on considering the details of how it&apos;s used, and you&apos;re coming at me with imaginary hypotheticals like arm traditional.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165674</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-17 12:26:54 -0800</bug_when>
    <thetext>I&apos;ve confirmed that the LLVM disassembler is only used when the FTL is used. For example:

#if !defined(USE_LLVM_DISASSEMBLER) &amp;&amp; HAVE(LLVM) &amp;&amp; (CPU(X86_64) || CPU(X86) || CPU(ARM64))
#define USE_LLVM_DISASSEMBLER 1
#endif

Notice that it&apos;s only enabled on platforms where we also have our own disassembler, and we will use our own disassembler on those platforms except for code generated by LLVM.

Also this:

    const char* triple;
#if CPU(X86_64)
    triple = &quot;x86_64-apple-darwin&quot;;
#elif CPU(X86)
    triple = &quot;x86-apple-darwin&quot;;
#elif CPU(ARM64)
    triple = &quot;arm64-apple-darwin&quot;;
#else
#error &quot;LLVM disassembler currently not supported on this CPU.&quot;
#endif

Clearly, if you tried to use the LLVM disassembler on any platform other than the ones where we also have our own disassemblers, you&apos;d get a compile-time error.

Because of this, it&apos;s clear that the LLVM disassembler is dead code on every platform, including ARM traditional.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165699</commentid>
    <comment_count>9</comment_count>
      <attachid>271581</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-17 12:59:50 -0800</bug_when>
    <thetext>Created attachment 271581
so far

Still more things to delete!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165702</commentid>
    <comment_count>10</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-02-17 13:08:35 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Wow first of all, politics has nothing to do with this. I&apos;m trying to
&gt; determine if we will need to keep the llvm soft linking madness or not. That
&gt; is how we currently use llvm API. You would have to change the llvm
&gt; disassembler if you wanted it to no longer depend on the soft linking. 

I don&apos;t need soft linking, but I don&apos;t have time 
and don&apos;t want to fix something works.
 
&gt; Second, I have no idea how you think the llvm disassembler helps you on arm
&gt; traditional. If you look in LLVMDisassembler.cpp you will see that it
&gt; doesn&apos;t have support for arm traditional - only arm64 and x86. 

I used it not so long ago (~months ago) to debug an ARM traditional bug.
It isn&apos;t supported in trunk, but managed to make it work super easily.
(But forgot to upstream the ARM traditional LLVM disassembler support.)
 
&gt; Also, any support for using the llvm disassembler on x86 should be deleted,
&gt; regardless of the arm traditonal situation. 

I don&apos;t care about x86, feel free to do it whatever you want.

&gt; Can you provide some technical assistance instead of acting up?  I&apos;m arguing
&gt; for the deletion of llvm dependencies on technical grounds based on
&gt; considering the details of how it&apos;s used, and you&apos;re coming at me with
&gt; imaginary hypotheticals like arm traditional.

No it isn&apos;t hypotetical, ARM traditional backend is still 
supported and a disassembler is really helpful to debug bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165703</commentid>
    <comment_count>11</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-02-17 13:10:06 -0800</bug_when>
    <thetext>To make it clear, I have strongly against 
removing LLVM disassembler. Please don&apos;t do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165706</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-17 13:12:09 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #7)
&gt; &gt; Wow first of all, politics has nothing to do with this. I&apos;m trying to
&gt; &gt; determine if we will need to keep the llvm soft linking madness or not. That
&gt; &gt; is how we currently use llvm API. You would have to change the llvm
&gt; &gt; disassembler if you wanted it to no longer depend on the soft linking. 
&gt; 
&gt; I don&apos;t need soft linking, but I don&apos;t have time 
&gt; and don&apos;t want to fix something works.
&gt;  
&gt; &gt; Second, I have no idea how you think the llvm disassembler helps you on arm
&gt; &gt; traditional. If you look in LLVMDisassembler.cpp you will see that it
&gt; &gt; doesn&apos;t have support for arm traditional - only arm64 and x86. 
&gt; 
&gt; I used it not so long ago (~months ago) to debug an ARM traditional bug.
&gt; It isn&apos;t supported in trunk, but managed to make it work super easily.
&gt; (But forgot to upstream the ARM traditional LLVM disassembler support.)
&gt;  
&gt; &gt; Also, any support for using the llvm disassembler on x86 should be deleted,
&gt; &gt; regardless of the arm traditonal situation. 
&gt; 
&gt; I don&apos;t care about x86, feel free to do it whatever you want.
&gt; 
&gt; &gt; Can you provide some technical assistance instead of acting up?  I&apos;m arguing
&gt; &gt; for the deletion of llvm dependencies on technical grounds based on
&gt; &gt; considering the details of how it&apos;s used, and you&apos;re coming at me with
&gt; &gt; imaginary hypotheticals like arm traditional.
&gt; 
&gt; No it isn&apos;t hypotetical, ARM traditional backend is still 
&gt; supported and a disassembler is really helpful to debug bugs.

Using the LLVM disassembler for ARM traditional is purely hypothetical as far as I can tell.  We&apos;re not going to maintain this dependency because of something that isn&apos;t even in the tree.

If you have an out-of-tree patch to make the LLVM disassembler work for ARM traditional, then it should be easy for you to make this out-of-tree patch include the current contents of LLVMDisassembler.cpp.

Let me put it this way: if at some point (either before this patch lands or after), you provided a patch that made the LLVM disassembler work for ARM traditional without the use of soft linking or any of the garbage in JavaScriptCore/llvm (like using the LLVM API via llvm-&gt;Foo() instead of LLVMFoo()), then I&apos;d be happy to review this patch and I&apos;d have no objection to it.

What I&apos;m objecting to is maintaining the current very sophisticated LLVM soft linking code, which the current LLVM disassembler depends on.  I&apos;m also objecting to maintaining it for something that isn&apos;t even in the tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165707</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-17 13:12:50 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; To make it clear, I have strongly against 
&gt; removing LLVM disassembler. Please don&apos;t do it.

It&apos;s 100% dead code.  There is strong precedent in the WebKit project to remove dead code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165712</commentid>
    <comment_count>14</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-02-17 13:33:02 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Using the LLVM disassembler for ARM traditional is purely hypothetical as
&gt; far as I can tell.  We&apos;re not going to maintain this dependency because of
&gt; something that isn&apos;t even in the tree.
There are many unused code in WebKit tree, which is used by Apple
only for internal purposes. Should we remove these code too? ( bug142043)

As I mentioned, I used it, but forgot to upstream. But will do it soon.

&gt; If you have an out-of-tree patch to make the LLVM disassembler work for ARM
&gt; traditional, then it should be easy for you to make this out-of-tree patch
&gt; include the current contents of LLVMDisassembler.cpp.
&gt; 
&gt; Let me put it this way: if at some point (either before this patch lands or
&gt; after), you provided a patch that made the LLVM disassembler work for ARM
&gt; traditional without the use of soft linking or any of the garbage in
&gt; JavaScriptCore/llvm (like using the LLVM API via llvm-&gt;Foo() instead of
&gt; LLVMFoo()), then I&apos;d be happy to review this patch and I&apos;d have no objection
&gt; to it.

No, I don&apos;t have time for any refactoring and won&apos;t do it 
just because you don&apos;t like the code you added previously.
 
&gt; What I&apos;m objecting to is maintaining the current very sophisticated LLVM
&gt; soft linking code, which the current LLVM disassembler depends on.  I&apos;m also
&gt; objecting to maintaining it for something that isn&apos;t even in the tree.

You won&apos;t use it, you don&apos;t need to maintain it. I don&apos;t understand
why are you worrying about it. I&apos;ll upstream the ARM traditional
disassembler soon and will maintain this code path if it is necessary.
Maybe I will do the refactoring you want in the future once I have
more time.

(In reply to comment #13)
&gt; (In reply to comment #11)
&gt; &gt; To make it clear, I have strongly against 
&gt; &gt; removing LLVM disassembler. Please don&apos;t do it.
&gt; 
&gt; It&apos;s 100% dead code.  There is strong precedent in the WebKit project to
&gt; remove dead code.

I haven&apos;t heard about any rule that a theoretically dead code should
be removed immediately. After I said I need it and will used soon
(this week) it isn&apos;t dead code.

My strong opinion means r- for removing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165717</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-17 13:34:53 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #12)
&gt; &gt; Using the LLVM disassembler for ARM traditional is purely hypothetical as
&gt; &gt; far as I can tell.  We&apos;re not going to maintain this dependency because of
&gt; &gt; something that isn&apos;t even in the tree.
&gt; There are many unused code in WebKit tree, which is used by Apple
&gt; only for internal purposes. Should we remove these code too? ( bug142043)
&gt; 
&gt; As I mentioned, I used it, but forgot to upstream. But will do it soon.

When you do that, you can take the contents of LLVMDisassembler.cpp and resubmit it but this time without dependence on soft linking.

&gt; 
&gt; &gt; If you have an out-of-tree patch to make the LLVM disassembler work for ARM
&gt; &gt; traditional, then it should be easy for you to make this out-of-tree patch
&gt; &gt; include the current contents of LLVMDisassembler.cpp.
&gt; &gt; 
&gt; &gt; Let me put it this way: if at some point (either before this patch lands or
&gt; &gt; after), you provided a patch that made the LLVM disassembler work for ARM
&gt; &gt; traditional without the use of soft linking or any of the garbage in
&gt; &gt; JavaScriptCore/llvm (like using the LLVM API via llvm-&gt;Foo() instead of
&gt; &gt; LLVMFoo()), then I&apos;d be happy to review this patch and I&apos;d have no objection
&gt; &gt; to it.
&gt; 
&gt; No, I don&apos;t have time for any refactoring and won&apos;t do it 
&gt; just because you don&apos;t like the code you added previously.

I don&apos;t have time to maintain your code.  WebKit isn&apos;t going to keep code around that is only meant to support your out-of-tree use case.

&gt;  
&gt; &gt; What I&apos;m objecting to is maintaining the current very sophisticated LLVM
&gt; &gt; soft linking code, which the current LLVM disassembler depends on.  I&apos;m also
&gt; &gt; objecting to maintaining it for something that isn&apos;t even in the tree.
&gt; 
&gt; You won&apos;t use it, you don&apos;t need to maintain it. I don&apos;t understand
&gt; why are you worrying about it. I&apos;ll upstream the ARM traditional
&gt; disassembler soon and will maintain this code path if it is necessary.
&gt; Maybe I will do the refactoring you want in the future once I have
&gt; more time.

This is about removing dead code.

&gt; 
&gt; (In reply to comment #13)
&gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; To make it clear, I have strongly against 
&gt; &gt; &gt; removing LLVM disassembler. Please don&apos;t do it.
&gt; &gt; 
&gt; &gt; It&apos;s 100% dead code.  There is strong precedent in the WebKit project to
&gt; &gt; remove dead code.
&gt; 
&gt; I haven&apos;t heard about any rule that a theoretically dead code should
&gt; be removed immediately. After I said I need it and will used soon
&gt; (this week) it isn&apos;t dead code.
&gt; 
&gt; My strong opinion means r- for removing it.

You&apos;re being unreasonable.  Do you propose introducing a WebKit policy that we should have dead code to support any reviewer&apos;s out-of-tree use case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165723</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-17 13:53:46 -0800</bug_when>
    <thetext>Let me be clear on my view here: an R- is not a valid reason to keep around dead code.  I will ignore your R- if it is only about keeping the LLVM disassembler for ARM traditional since in trunk it is not possible to use the LLVM disassembler for ARM traditional.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165724</commentid>
    <comment_count>17</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-02-17 13:55:03 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; Using the LLVM disassembler for ARM traditional is purely hypothetical as
&gt; &gt; &gt; far as I can tell.  We&apos;re not going to maintain this dependency because of
&gt; &gt; &gt; something that isn&apos;t even in the tree.
&gt; &gt; There are many unused code in WebKit tree, which is used by Apple
&gt; &gt; only for internal purposes. Should we remove these code too? ( bug142043)
&gt; &gt; 
&gt; &gt; As I mentioned, I used it, but forgot to upstream. But will do it soon.
&gt; 
&gt; When you do that, you can take the contents of LLVMDisassembler.cpp and
&gt; resubmit it but this time without dependence on soft linking.

No, I won&apos;t play this game. You want to remove your own code you don&apos;t like
and then only let it back only if I refactor it to be more comfortable for you.

&gt; &gt; &gt; If you have an out-of-tree patch to make the LLVM disassembler work for ARM
&gt; &gt; &gt; traditional, then it should be easy for you to make this out-of-tree patch
&gt; &gt; &gt; include the current contents of LLVMDisassembler.cpp.
&gt; &gt; &gt; 
&gt; &gt; &gt; Let me put it this way: if at some point (either before this patch lands or
&gt; &gt; &gt; after), you provided a patch that made the LLVM disassembler work for ARM
&gt; &gt; &gt; traditional without the use of soft linking or any of the garbage in
&gt; &gt; &gt; JavaScriptCore/llvm (like using the LLVM API via llvm-&gt;Foo() instead of
&gt; &gt; &gt; LLVMFoo()), then I&apos;d be happy to review this patch and I&apos;d have no objection
&gt; &gt; &gt; to it.
&gt; &gt; 
&gt; &gt; No, I don&apos;t have time for any refactoring and won&apos;t do it 
&gt; &gt; just because you don&apos;t like the code you added previously.
&gt; 
&gt; I don&apos;t have time to maintain your code.  WebKit isn&apos;t going to keep code
&gt; around that is only meant to support your out-of-tree use case.

Don&apos;t have time to maintain what? What are you talking about? You wasting 
your time to try to convince me that you have to remove the code I need. 
If you don&apos;t need, just remove it from xcode build system and don&apos;t define
LLVM_DISASSEMBLER. That&apos;s all.

To be more practical, LLVM disassembler is still in cmake build system,
it builds and works fine. (now on x86 an ARM64) This isn&apos;t dead code at all.

[snip]
 
&gt; &gt; My strong opinion means r- for removing it.
&gt; 
&gt; You&apos;re being unreasonable.  Do you propose introducing a WebKit policy that
&gt; we should have dead code to support any reviewer&apos;s out-of-tree use case?

I don&apos;t propose any policy change. I _said_ I _will_ submit a patch _soon_
to support ARM traditional disassembler with the existing code base. But
you decided that you want to remove the basic of this patch and make my
work harder with stating that you will let it in only if I do the refactoring
what you want. That&apos;s not fair and I still have strong objection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165726</commentid>
    <comment_count>18</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-17 13:56:31 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #15)
&gt; &gt; (In reply to comment #14)
&gt; &gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; &gt; Using the LLVM disassembler for ARM traditional is purely hypothetical as
&gt; &gt; &gt; &gt; far as I can tell.  We&apos;re not going to maintain this dependency because of
&gt; &gt; &gt; &gt; something that isn&apos;t even in the tree.
&gt; &gt; &gt; There are many unused code in WebKit tree, which is used by Apple
&gt; &gt; &gt; only for internal purposes. Should we remove these code too? ( bug142043)
&gt; &gt; &gt; 
&gt; &gt; &gt; As I mentioned, I used it, but forgot to upstream. But will do it soon.
&gt; &gt; 
&gt; &gt; When you do that, you can take the contents of LLVMDisassembler.cpp and
&gt; &gt; resubmit it but this time without dependence on soft linking.
&gt; 
&gt; No, I won&apos;t play this game. You want to remove your own code you don&apos;t like
&gt; and then only let it back only if I refactor it to be more comfortable for
&gt; you.
&gt; 
&gt; &gt; &gt; &gt; If you have an out-of-tree patch to make the LLVM disassembler work for ARM
&gt; &gt; &gt; &gt; traditional, then it should be easy for you to make this out-of-tree patch
&gt; &gt; &gt; &gt; include the current contents of LLVMDisassembler.cpp.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Let me put it this way: if at some point (either before this patch lands or
&gt; &gt; &gt; &gt; after), you provided a patch that made the LLVM disassembler work for ARM
&gt; &gt; &gt; &gt; traditional without the use of soft linking or any of the garbage in
&gt; &gt; &gt; &gt; JavaScriptCore/llvm (like using the LLVM API via llvm-&gt;Foo() instead of
&gt; &gt; &gt; &gt; LLVMFoo()), then I&apos;d be happy to review this patch and I&apos;d have no objection
&gt; &gt; &gt; &gt; to it.
&gt; &gt; &gt; 
&gt; &gt; &gt; No, I don&apos;t have time for any refactoring and won&apos;t do it 
&gt; &gt; &gt; just because you don&apos;t like the code you added previously.
&gt; &gt; 
&gt; &gt; I don&apos;t have time to maintain your code.  WebKit isn&apos;t going to keep code
&gt; &gt; around that is only meant to support your out-of-tree use case.
&gt; 
&gt; Don&apos;t have time to maintain what? What are you talking about? You wasting 
&gt; your time to try to convince me that you have to remove the code I need. 
&gt; If you don&apos;t need, just remove it from xcode build system and don&apos;t define
&gt; LLVM_DISASSEMBLER. That&apos;s all.
&gt; 
&gt; To be more practical, LLVM disassembler is still in cmake build system,
&gt; it builds and works fine. (now on x86 an ARM64) This isn&apos;t dead code at all.
&gt; 
&gt; [snip]
&gt;  
&gt; &gt; &gt; My strong opinion means r- for removing it.
&gt; &gt; 
&gt; &gt; You&apos;re being unreasonable.  Do you propose introducing a WebKit policy that
&gt; &gt; we should have dead code to support any reviewer&apos;s out-of-tree use case?
&gt; 
&gt; I don&apos;t propose any policy change. I _said_ I _will_ submit a patch _soon_
&gt; to support ARM traditional disassembler with the existing code base. But
&gt; you decided that you want to remove the basic of this patch and make my
&gt; work harder with stating that you will let it in only if I do the refactoring
&gt; what you want. That&apos;s not fair and I still have strong objection.

When you submit that patch, you are more than welcome to include any amount of removed code in that patch.

Your future plans are just not a valid reason to block removal of dead code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165730</commentid>
    <comment_count>19</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-02-17 13:58:56 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Let me be clear on my view here: an R- is not a valid reason to keep around
&gt; dead code.  I will ignore your R- if it is only about keeping the LLVM
&gt; disassembler for ARM traditional since in trunk it is not possible to use
&gt; the LLVM disassembler for ARM traditional.

no comment .... I stopped arguing with you at this point ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165731</commentid>
    <comment_count>20</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-17 14:00:45 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #16)
&gt; &gt; Let me be clear on my view here: an R- is not a valid reason to keep around
&gt; &gt; dead code.  I will ignore your R- if it is only about keeping the LLVM
&gt; &gt; disassembler for ARM traditional since in trunk it is not possible to use
&gt; &gt; the LLVM disassembler for ARM traditional.
&gt; 
&gt; no comment .... I stopped arguing with you at this point ...

Like I said, you are welcome to take any amount of the removal patch and include it in your patch to enable the LLVM disassembler for ARM traditional.  Nobody will argue against that.

The issue here is dead code.  Plain and simple.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165740</commentid>
    <comment_count>21</comment_count>
      <attachid>271587</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-17 14:09:32 -0800</bug_when>
    <thetext>Created attachment 271587
the patch

Note: the actual patch I will land also includes removal of the LLVM drops, but I didn&apos;t include it in this patch file because that would bloat it to &gt;20MB.  That part is just deleting binary files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165742</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-17 14:11:48 -0800</bug_when>
    <thetext>Attachment 271587 did not pass style-queue:


ERROR: Source/JavaScriptCore/disassembler/UDis86Disassembler.h:35:  The parameter name &quot;codePtr&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/disassembler/UDis86Disassembler.h:35:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 32 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165745</commentid>
    <comment_count>23</comment_count>
      <attachid>271589</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-17 14:13:43 -0800</bug_when>
    <thetext>Created attachment 271589
the patch

Fix CMake build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165746</commentid>
    <comment_count>24</comment_count>
      <attachid>271589</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-02-17 14:14:17 -0800</bug_when>
    <thetext>Comment on attachment 271589
the patch

TL;DR</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165747</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-17 14:16:58 -0800</bug_when>
    <thetext>Attachment 271589 did not pass style-queue:


ERROR: Source/JavaScriptCore/disassembler/UDis86Disassembler.h:35:  The parameter name &quot;codePtr&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/disassembler/UDis86Disassembler.h:35:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 32 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165749</commentid>
    <comment_count>26</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-17 14:20:34 -0800</bug_when>
    <thetext>&gt; I&apos;ll upstream the ARM traditional
&gt; disassembler soon and will maintain this code path if it is necessary.

Caaba, thank you for your offer to be the maintainer for the ARM traditional disassembler.

We&apos;re moving forward with a design change not to soft-link LLVM anymore. How soon do you think you can get the ARM traditional disassembler up to speed with this change?

You said:

&gt; No, I don&apos;t have time for any refactoring and won&apos;t do it 

Strange. Usually, being a maintainer means putting in the time to, you know, maintain the code.

Maintaining a CPU port of a first-rate JIT compiler is indeed a time-consuming job, and if you don&apos;t have the time for it, I understand. But I&apos;ll be happy to review your patches if you do find the time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165785</commentid>
    <comment_count>27</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-17 16:11:57 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/196729</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271581</attachid>
            <date>2016-02-17 12:59:50 -0800</date>
            <delta_ts>2016-02-17 14:09:32 -0800</delta_ts>
            <desc>so far</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>433519</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5NjY4NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNyArMjcsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwog
ICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW50ZXJwcmV0ZXIiCiAgICAgIiR7SkFWQVNDUklQ
VENPUkVfRElSfS9qaXQiCiAgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS9sbGludCIKLSAgICAi
JHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2xsdm0iCiAgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS9w
YXJzZXIiCiAgICAgIiR7SkFWQVNDUklQVENPUkVfRElSfS9wcm9maWxlciIKICAgICAiJHtKQVZB
U0NSSVBUQ09SRV9ESVJ9L3JlcGxheSIKQEAgLTM3OCw3ICszNzcsNiBAQCBzZXQoSmF2YVNjcmlw
dENvcmVfU09VUkNFUwogICAgIGRpc2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5jcHAKICAg
ICBkaXNhc3NlbWJsZXIvQVJNdjdEaXNhc3NlbWJsZXIuY3BwCiAgICAgZGlzYXNzZW1ibGVyL0Rp
c2Fzc2VtYmxlci5jcHAKLSAgICBkaXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5jcHAKICAg
ICBkaXNhc3NlbWJsZXIvVURpczg2RGlzYXNzZW1ibGVyLmNwcAogICAgIGRpc2Fzc2VtYmxlci9Y
ODZEaXNhc3NlbWJsZXIuY3BwCiAKQEAgLTEwNTAsNDAgKzEwNDgsNiBAQCBpZiAoRU5BQkxFX0ZU
TF9KSVQpCiAgICAgKQogZW5kaWYgKCkKIAotaWYgKFVTRV9MTFZNX0RJU0FTU0VNQkxFUikKLSAg
ICAjIENvbmZpZ3VyZSBsbHZtRm9ySlNDLnNvCi0gICAgc2V0KGxsdm1Gb3JKU0NfU09VUkNFUwot
ICAgICAgICBsbHZtL2xpYnJhcnkvTExWTUFuY2hvci5jcHAKLSAgICAgICAgbGx2bS9saWJyYXJ5
L0xMVk1FeHBvcnRzLmNwcAotICAgICAgICBsbHZtL2xpYnJhcnkvTExWTU92ZXJyaWRlcy5jcHAK
LSAgICApCi0gICAgc2V0KGxsdm1Gb3JKU0NfSU5DTFVERV9ESVJFQ1RPUklFUwotICAgICAgICAk
e0xMVk1fSU5DTFVERV9ESVJTfQotICAgICAgICAiJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQ
VENPUkVfRElSfSIKLSAgICApCi0KLSAgICBhZGRfY3VzdG9tX2NvbW1hbmQoCi0gICAgICAgIE9V
VFBVVCAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L1dlYktpdExMVk1MaWJy
YXJ5VG9rZW4uaAotICAgICAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0gLUUgdG91Y2ggJHtE
RVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9XZWJLaXRMTFZNTGlicmFyeVRva2Vu
LmgKLSAgICAgICAgVkVSQkFUSU0pCi0KLSAgICAjIEFkZGVkIGV4dHJhIGl0ZW1zIGZvciBKYXZh
U2NyaXB0Q29yZQotICAgIGxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX1NZU1RFTV9JTkNMVURF
X0RJUkVDVE9SSUVTCi0gICAgICAgICR7TExWTV9JTkNMVURFX0RJUlN9Ci0gICAgKQotCi0gICAg
bGlzdChBUFBFTkQgSmF2YVNjcmlwdENvcmVfU09VUkNFUwotICAgICAgICBsbHZtL0luaXRpYWxp
emVMTFZNLmNwcAotICAgICAgICBsbHZtL0xMVk1BUEkuY3BwCi0gICAgKQotICAgIGlmIChOT1Qg
V0lOMzIpCi0gICAgICAgIGxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKLSAgICAg
ICAgICAgIGxsdm0vSW5pdGlhbGl6ZUxMVk1MaW51eC5jcHAKLSAgICAgICAgICAgIGxsdm0vSW5p
dGlhbGl6ZUxMVk1QT1NJWC5jcHAKLSAgICAgICAgKQotICAgIGVuZGlmICgpCi1lbmRpZiAoKQot
CiBzZXQoSEFTSF9MVVRfR0VORVJBVE9SICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9jcmVh
dGVfaGFzaF90YWJsZSkKIG1hY3JvKEdFTkVSQVRFX0hBU0hfTFVUIF9pbnB1dCBfb3V0cHV0KQog
ICAgIGFkZF9jdXN0b21fY29tbWFuZCgKQEAgLTEzNjcsMjUgKzEzMzEsNiBAQCBlbmRpZiAoKQog
CiBXRUJLSVRfSU5DTFVERV9DT05GSUdfRklMRVNfSUZfRVhJU1RTKCkKIAotaWYgKFVTRV9MTFZN
X0RJU0FTU0VNQkxFUiBBTkQgTk9UIFdJTjMyKQotICAgIGlmIChOT1QgbGx2bUZvckpTQ19MSUJS
QVJJRVMpCi0gICAgICAgIHNldChsbHZtRm9ySlNDX0xJQlJBUklFUyAke0xMVk1fU1RBVElDX0xJ
QlJBUklFU30pCi0gICAgZW5kaWYgKCkKLSAgICBpZiAoTk9UIGxsdm1Gb3JKU0NfTElCUkFSSUVT
KQotICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJObyBMTFZNIGxpYnMgZm91bmQsIGJ1dCBM
TFZNIGRpc2Fzc2VtYmxlciBpcyBlbmFibGVkLiBTdG9wcGluZyBidWlsZC4iKQotICAgIGVuZGlm
ICgpCi0KLSAgICBXRUJLSVRfV1JBUF9TT1VSQ0VMSVNUKCR7bGx2bUZvckpTQ19TT1VSQ0VTfSkK
LSAgICBhZGRfbGlicmFyeShsbHZtRm9ySlNDIFNIQVJFRCAke2xsdm1Gb3JKU0NfU09VUkNFU30g
JHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9XZWJLaXRMTFZNTGlicmFyeVRv
a2VuLmgpCi0gICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGxsdm1Gb3JKU0MgJHtsbHZtRm9ySlND
X0xJQlJBUklFU30gJHtMTFZNX1NZU1RFTV9MSUJSQVJJRVN9KQotICAgIGlmIChOT1QgQ01BS0Vf
U1lTVEVNX05BTUUgTUFUQ0hFUyAiRGFyd2luIikKLSAgICAgICAgQUREX1RBUkdFVF9QUk9QRVJU
SUVTKGxsdm1Gb3JKU0MgTElOS19GTEFHUyAiLVdsLC0tdmVyc2lvbi1zY3JpcHQ9JHtKQVZBU0NS
SVBUQ09SRV9ESVJ9L2xsdm0vbGlicmFyeS9saWJsbHZtRm9ySlNDLnZlcnNpb24iKQotICAgIGVu
ZGlmICgpCi0gICAgaWYgKGxsdm1Gb3JKU0NfSU5TVEFMTF9ESVIpCi0gICAgICAgIGluc3RhbGwo
VEFSR0VUUyBsbHZtRm9ySlNDIERFU1RJTkFUSU9OICIke2xsdm1Gb3JKU0NfSU5TVEFMTF9ESVJ9
IikKLSAgICBlbmRpZiAoKQotZW5kaWYgKCkKLQogV0VCS0lUX0NSRUFURV9GT1JXQVJESU5HX0hF
QURFUlMoSmF2YVNjcmlwdENvcmUgRElSRUNUT1JJRVMgJHtKYXZhU2NyaXB0Q29yZV9GT1JXQVJE
SU5HX0hFQURFUlNfRElSRUNUT1JJRVN9IEZJTEVTICR7SmF2YVNjcmlwdENvcmVfRk9SV0FSRElO
R19IRUFERVJTX0ZJTEVTfSkKIAogCkBAIC0xNDE3LDEwICsxMzYyLDYgQEAgaWYgKCR7SmF2YVNj
cmlwdENvcmVfTElCUkFSWV9UWVBFfSBTVFJFUQogICAgIGluc3RhbGwoVEFSR0VUUyBKYXZhU2Ny
aXB0Q29yZSBERVNUSU5BVElPTiAiJHtMSUJfSU5TVEFMTF9ESVJ9IikKIGVuZGlmICgpCiAKLWlm
IChVU0VfTExWTV9ESVNBU1NFTUJMRVIpCi0gICAgYWRkX2RlcGVuZGVuY2llcyhKYXZhU2NyaXB0
Q29yZSBsbHZtRm9ySlNDKQotZW5kaWYgKCkKLQogIyBGb3JjZSBzdGFnaW5nIG9mIHNoYXJlZCBz
Y3JpcHRzLCBldmVuIGlmIHRoZXkgYXJlbid0IGRpcmVjdGx5IHVzZWQgdG8gYnVpbGQgSmF2YVNj
cmlwdENvcmUuCiAKIGFkZF9jdXN0b21fdGFyZ2V0KHN0YWdlU2hhcmVkU2NyaXB0cyBERVBFTkRT
ICR7SmF2YVNjcmlwdENvcmVfU0NSSVBUU30pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw5
ICsxNjYsNiBAQAogCQkwRjI0RTU1NjE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1l
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0
RTU1NDE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNEU1NTgxN0Y3NEVEQjAw
QUJCMjE3IC8qIFZhbHVlUmVjb3ZlcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NTcxN0Y3NEVEQjAwQUJCMjE3IC8qIFZhbHVlUmVjb3Zl
cnkuY3BwICovOyB9OwogCQkwRjI1NkMzNjE2MjdCMEFEMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5
QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJy
YXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oICovOyB9OwotCQkwRjI1RjFBRTE4MTYzNUYz
MDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBNzE4MTYzNUYzMDA1MjJGMzkgLyog
RlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYyNUYxQUYxODE2MzVGMzAwNTIyRjM5IC8qIEZUTElubGlu
ZUNhY2hlU2l6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjI1RjFBODE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmNwcCAq
LzsgfTsKLQkJMEYyNUYxQjAxODE2MzVGMzAwNTIyRjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQTkx
ODE2MzVGMzAwNTIyRjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjVGMUIxMTgxNjM1RjMwMDUyMkYz
OSAvKiBGVExTbG93UGF0aENhbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyNUYxQUExODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2Fs
bC5jcHAgKi87IH07CiAJCTBGMjVGMUIyMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENh
bGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjVG
MUFCMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjI1RjFCMzE4MTYzNUYzMDA1MjJG
MzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjVGMUFDMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0
aENhbGxLZXkuY3BwICovOyB9OwpAQCAtNDUyLDExICs0NDksNyBAQAogCQkwRjY4MkZCMzE5QkNC
MzY0MDBGQTNCQUQgLyogREZHU1NBQ2FsY3VsYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2ODJGQjExOUJDQjM2NDAwRkEzQkFEIC8qIERGR1NT
QUNhbGN1bGF0b3IuaCAqLzsgfTsKIAkJMEY2OUNDODgxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zy
b3plblZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNjlDQzg2MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5jcHAgKi87IH07
CiAJCTBGNjlDQzg5MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2OUNDODcxOTNBQzYwQTAw
NDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggKi87IH07Ci0JCTBGNkIxQ0I1MTg1RkM5RTkwMDg0
NUQ5NyAvKiBGVExKU0NhbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2QjFDQjMxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAgKi87
IH07Ci0JCTBGNkIxQ0I2MTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0I0MTg1RkM5RTkwMDg0
NUQ5NyAvKiBGVExKU0NhbGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjZCMUNCOTE4NjEyNDRDMDA4NDVEOTcgLyogQXJpdHlDaGVja01vZGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0I3
MTg2MTI0NEMwMDg0NUQ5NyAvKiBBcml0eUNoZWNrTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGNkIxQ0M1MTg2MkM0NzgwMDg0NUQ5NyAv
KiBGVExVbndpbmRJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNkIxQ0MxMTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZvLmNwcCAq
LzsgfTsKLQkJMEY2QjFDQzYxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0MyMTg2MkM0
NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2QjhBRDgxQzRFRERBMjAwOTY5MDUyIC8qIEIzRHVw
bGljYXRlVGFpbHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY2QjhBRDYxQzRFRERBMjAwOTY5MDUyIC8qIEIzRHVwbGljYXRlVGFpbHMuY3BwICov
OyB9OwogCQkwRjZCOEFEOTFDNEVEREEyMDA5NjkwNTIgLyogQjNEdXBsaWNhdGVUYWlscy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjhBRDcxQzRF
RERBMjAwOTY5MDUyIC8qIEIzRHVwbGljYXRlVGFpbHMuaCAqLzsgfTsKIAkJMEY2QjhBREMxQzRF
RkFDMzAwOTY5MDUyIC8qIEIzU1NBQ2FsY3VsYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCOEFEQTFDNEVGQUMzMDA5NjkwNTIgLyogQjNT
U0FDYWxjdWxhdG9yLmNwcCAqLzsgfTsKQEAgLTU1MywxMyArNTQ2LDkgQEAKIAkJMEY5QjFEQjQx
QzBFNDJBNTAwRTVCRkQyIC8qIEZUTEIzT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUIxREIzMUMwRTQyQTUwMEU1QkZEMiAvKiBGVExC
M091dHB1dC5jcHAgKi87IH07CiAJCTBGOUIxREI3MUMwRTQyQkQwMEU1QkZEMiAvKiBGVExPU1JF
eGl0SGFuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOUIxREI1MUMwRTQyQkQwMEU1QkZEMiAvKiBGVExPU1JFeGl0SGFuZGxlLmNwcCAqLzsg
fTsKIAkJMEY5QjFEQjgxQzBFNDJCRDAwRTVCRkQyIC8qIEZUTE9TUkV4aXRIYW5kbGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUIxREI2MUMwRTQy
QkQwMEU1QkZEMiAvKiBGVExPU1JFeGl0SGFuZGxlLmggKi87IH07Ci0JCTBGOUM1RTVFMThFMzVG
NUUwMEQ0MzFDMyAvKiBGVExEV0FSRlJlZ2lzdGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUM1RTVDMThFMzVGNUUwMEQ0MzFDMyAvKiBGVExE
V0FSRlJlZ2lzdGVyLmNwcCAqLzsgfTsKLQkJMEY5QzVFNUYxOEUzNUY1RTAwRDQzMUMzIC8qIEZU
TERXQVJGUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGOUM1RTVEMThFMzVGNUUwMEQ0MzFDMyAvKiBGVExEV0FSRlJlZ2lzdGVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5RDMzNzAx
NjVEQkI5MDAwNUFEMzg3IC8qIERpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzM2RTE2NURCQjhEMDA1QUQzODcgLyogRGlz
YXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEY5RDMzOTYxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0Zs
dXNoZWRBdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjlEMzM5NDE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmNwcCAqLzsgfTsKIAkJ
MEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDMzOTUxN0ZGQzRFNjAwNzNDMkJD
IC8qIERGR0ZsdXNoZWRBdC5oICovOyB9OwotCQkwRjlEMzM5QTE4MDNBREI3MDA3M0MyQkMgLyog
RlRMU3RhY2tNYXBzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGOUQzMzk4MTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuY3BwICovOyB9
OwotCQkwRjlEMzM5QjE4MDNBREI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzM5OTE4MDNBREI3MDA3
M0MyQkMgLyogRlRMU3RhY2tNYXBzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY5RDM2OTQxQUU5Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQ
aGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjlEMzY5MjFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmNwcCAqLzsgfTsKIAkJ
MEY5RDM2OTUxQUU5Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQaGFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDM2OTMxQUU5Q0MzMzAwMEQ0
REZCIC8qIERGR0NsZWFuVXBQaGFzZS5oICovOyB9OwogCQkwRjlENEMwQzFDM0UxQzExMDA2Q0Q5
ODQgLyogRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQ0QzBBMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRp
b25UYXJnZXQuY3BwICovOyB9OwpAQCAtNjY4LDI2ICs2NTcsOCBAQAogCQkwRkNDQUU0NTE2RDBD
Rjc0MDBEMEM2NUIgLyogUGFyc2VyRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0NBRTQzMTZEMENGNkUwMEQwQzY1QiAvKiBQYXJzZXJFcnJv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
Q0VGQUFCMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFBOTE4MDRDMTNFMDA0NzJD
RTQgLyogRlRMU2F2ZVJlc3RvcmUuY3BwICovOyB9OwogCQkwRkNFRkFBQzE4MDRDMTNFMDA0NzJD
RTQgLyogRlRMU2F2ZVJlc3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQ0VGQUFBMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGQ0VG
QUIwMTgwNUNBNkQwMDQ3MkNFNCAvKiBJbml0aWFsaXplTExWTS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBQUUxODA1Q0E2RDAwNDcyQ0U0IC8q
IEluaXRpYWxpemVMTFZNLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJMEZDRUZBQzExODA1RDk0RTAwNDcyQ0U0IC8qIExMVk1PdmVycmlkZXMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBQzAx
ODA1RDk0MTAwNDcyQ0U0IC8qIExMVk1PdmVycmlkZXMuY3BwICovOyB9OwotCQkwRkNFRkFDMzE4
MDVFNzQwMDA0NzJDRTQgLyogTExWTUV4cG9ydHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBQzIxODA1RTc0MDAwNDcyQ0U0IC8qIExMVk1F
eHBvcnRzLmNwcCAqLzsgfTsKLQkJMEZDRUZBQ0ExODA1RTc1NTAwNDcyQ0U0IC8qIEluaXRpYWxp
emVMTFZNLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQ0VGQUM0MTgwNUU3NTUwMDQ3MkNFNCAvKiBJbml0aWFsaXplTExWTS5jcHAgKi87IH07Ci0J
CTBGQ0VGQUNDMTgwNUU3NTUwMDQ3MkNFNCAvKiBJbml0aWFsaXplTExWTVBPU0lYLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFDNjE4MDVFNzU1
MDA0NzJDRTQgLyogSW5pdGlhbGl6ZUxMVk1QT1NJWC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGQ0VGQUNEMTgwNUU3NTUwMDQ3MkNFNCAvKiBM
TFZNQVBJLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQ0VGQUM3MTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJLmNwcCAqLzsgfTsKLQkJMEZDRUZB
Q0UxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUM4MTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJ
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZD
RUZBQ0YxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUElGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUM5MTgwNUU3NTUwMDQ3MkNF
NCAvKiBMTFZNQVBJRnVuY3Rpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJMEZDRUZBRDExODA1RTc3OTAwNDcyQ0U0IC8qIExMVk1BUElGdW5j
dGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
Q0VGQUM5MTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJRnVuY3Rpb25zLmggKi87IH07Ci0JCTBG
Q0VGQUQzMTgwNUVEQ0MwMDQ3MkNFNCAvKiBMTFZNSGVhZGVycy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBRDIxODA1RURDQzAwNDcyQ0U0IC8q
IExMVk1IZWFkZXJzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJMEZDRUZBRDQxODA1RURDQzAwNDcyQ0U0IC8qIExMVk1IZWFkZXJzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFEMjE4MDVFREND
MDA0NzJDRTQgLyogTExWTUhlYWRlcnMuaCAqLzsgfTsKLQkJMEZDRUZBRDcxODA2MTc0NjAwNDcy
Q0U0IC8qIExMVk1BbmNob3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZDRUZBRDYxODA2MTc0NjAwNDcyQ0U0IC8qIExMVk1BbmNob3IuY3BwICov
OyB9OwotCQkwRkNFRkFEQTE4MDYyMERBMDA0NzJDRTQgLyogTExWTUFQSS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBQzgxODA1RTc1NTAwNDcy
Q0U0IC8qIExMVk1BUEkuaCAqLzsgfTsKLQkJMEZDRUZBREMxODA2NEExNDAwNDcyQ0U0IC8qIGNv
bmZpZ19sbHZtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkNFRkFEQjE4MDY0QTE0MDA0NzJDRTQgLyogY29uZmlnX2xsdm0uaCAqLzsgfTsKIAkJMEZD
RUZBREYxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUREMTgwNzM4QzAwMDQ3MkNFNCAv
KiBGVExMb2NhdGlvbi5jcHAgKi87IH07CiAJCTBGQ0VGQUUwMTgwNzM4QzAwMDQ3MkNFNCAvKiBG
VExMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZDRUZBREUxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZEMTIwMkYxQThBRUQxMjAw
MEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZEMTIwMkQxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJh
c2UuY3BwICovOyB9OwotCQkwRkQxMjAzMDFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMTIw
MkUxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRkQxMjAzMzFBOEM4NUJEMDAwRjUyODAg
LyogRlRMSlNDYWxsVmFyYXJncy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkQxMjAzMTFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJn
cy5jcHAgKi87IH07Ci0JCTBGRDEyMDM0MUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxWYXJh
cmdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQx
MjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3
ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5s
aW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNC
IC8qIERGR0RyaXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBE
RkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKQEAgLTc1OSwx
MiArNzMwLDggQEAKIAkJMEZFODM0MTgxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2Fs
bFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkU4MzQxNjFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRp
bmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkU4NTM0QjE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzQ5MTcyM0NE
QTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwICovOyB9OwogCQkwRkU4NTM0
QzE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU4NTM0QTE3MjNDREE1MDBCNjE4
RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmggKi87IH07Ci0JCTBGRTk1Rjc5MThCNTY5NDcw
MEI1MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU5NUY3NzE4QjU2OTQ3MDBCNTMxRkIgLyogRlRMRGF0YVNl
Y3Rpb24uY3BwICovOyB9OwotCQkwRkU5NUY3QTE4QjU2OTQ3MDBCNTMxRkIgLyogRlRMRGF0YVNl
Y3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RTk1Rjc4MThCNTY5NDcwMEI1MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGRUEwQTA4MTcwNTEzREIwMEJC
NzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVBMDlGRDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQWJicmV2aWF0
aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGRUEwQTA5MTcwNTEzREIwMEJCNzIyQyAvKiBGVExDYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTA5RkUxNzA1MTNEQjAw
QkI3MjJDIC8qIEZUTENhcGFiaWxpdGllcy5jcHAgKi87IH07CiAJCTBGRUEwQTBBMTcwNTEzREIw
MEJCNzIyQyAvKiBGVExDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwOUZGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDYXBhYmls
aXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQkwRkVBMEEwQjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEwMDE3MDUxM0RCMDBCQjcy
MkMgLyogRlRMQ29tcGlsZS5jcHAgKi87IH07CiAJCTBGRUEwQTBDMTcwNTEzREIwMEJCNzIyQyAv
KiBGVExDb21waWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVBMEEwMTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEwQTBEMTcwNTEzREIw
MEJCNzIyQyAvKiBGVExKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUEwQTAyMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmNw
cCAqLzsgfTsKIAkJMEZFQTBBMEUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTAzMTcwNTEz
REIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExNzcsOCArMTE0NCw2IEBACiAJCTJBQUJDREU3MThFRjI5
NDIwMDAwMjA5NiAvKiBHQ0xvZ2dpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJBQUJDREU2MThFRjI5NDIwMDAwMjA5NiAvKiBHQ0xvZ2dpbmcuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyQUFDRTYz
QzE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBQUNFNjNBMThDQTVBMDMwMEVEMDE5
MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwICovOyB9OwogCQkyQUFDRTYzRDE4Q0E1QTAzMDBF
RDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyQUFDRTYzQjE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0
eUNhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKLQkJMkFDOTIyQkIxOEExNjE4MjAwM0NFMEZCIC8qIEZUTERXQVJGRGVidWdMaW5lSW5mby5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUM5MjJC
OTE4QTE2MTgyMDAzQ0UwRkIgLyogRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmNwcCAqLzsgfTsKLQkJ
MkFDOTIyQkMxOEExNjE4MjAwM0NFMEZCIC8qIEZUTERXQVJGRGVidWdMaW5lSW5mby5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFDOTIyQkExOEExNjE4
MjAwM0NFMEZCIC8qIEZUTERXQVJGRGVidWdMaW5lSW5mby5oICovOyB9OwogCQkyQUQyRURGQjE5
Nzk5RTM4MDA0RDY0NzggLyogRW51bWVyYXRpb25Nb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUQyRURGQTE5Nzk5RTM4MDA0RDY0NzggLyogRW51
bWVyYXRpb25Nb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMkFEODkzMkIxN0UzODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29wZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFEODkzMjkx
N0UzODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29wZS5oICovOyB9OwogCQkyQURGQTI2
MzE4RUYzNTQwMDA0RjlGQ0MgLyogR0NMb2dnaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBREZBMjYyMThFRjM1NDAwMDRGOUZDQyAvKiBHQ0xv
Z2dpbmcuY3BwICovOyB9OwpAQCAtMTIzMCw4ICsxMTk1LDYgQEAKIAkJNjIzQTM3RUMxQjg3QTdD
MDAwNzU0MjA5IC8qIFJlZ2lzdGVyTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2MjNBMzdFQjFCODdBN0JEMDA3NTQyMDkgLyogUmVnaXN0ZXJNYXAu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2Mjc2
NzMyMzFCNjgwQzFFMDBGRDlGMkUgLyogQ2FsbE1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjI3NjczMjExQjY4MEMxRTAwRkQ5RjJFIC8qIENh
bGxNb2RlLmNwcCAqLzsgfTsKIAkJNjI3NjczMjQxQjY4MEMxRTAwRkQ5RjJFIC8qIENhbGxNb2Rl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2Mjc2NzMy
MjFCNjgwQzFFMDBGRDlGMkUgLyogQ2FsbE1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk2Mjc3NERBQTFCOEQ0QjE5MDAwNkYwNUEgLyogRlRM
SlNUYWlsQ2FsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2Mjc3NERBODFCOEQ0QjE5MDAwNkYwNUEgLyogRlRMSlNUYWlsQ2FsbC5jcHAgKi87IH07
Ci0JCTYyNzc0REFCMUI4RDRCMTkwMDA2RjA1QSAvKiBGVExKU1RhaWxDYWxsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2Mjc3NERBOTFCOEQ0QjE5MDAw
NkYwNUEgLyogRlRMSlNUYWlsQ2FsbC5oICovOyB9OwogCQk2MkQyRDM4RjFBREYxMDNGMDAwMjA2
QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2MkQyRDM4RDFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJl
RGF0YS5jcHAgKi87IH07CiAJCTYyRDJEMzkwMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJh
cmVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
MkQyRDM4RTFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTYyRDc1NUQ0MUI4NEZCM0Qw
MDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlcjY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyRDc1NUQzMUI4NEZCMzkwMDE4MDFGQSAvKiBDYWxs
RnJhbWVTaHVmZmxlcjY0LmNwcCAqLzsgfTsKQEAgLTEzMjMsOCArMTI4Niw2IEBACiAJCTc5Q0ZD
NkYwMUMzM0IxMDAwMEM3NjhFQSAvKiBMTEludFBDUmFuZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUNGQzZFRjFDMzNCMTAwMDBDNzY4RUEgLyog
TExJbnRQQ1Jhbmdlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTc5RDVDRDVBMUMxMTA2QTkwMENFQ0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RDVDRDU4
MUMxMTA2QTkwMENFQ0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVyLmNwcCAqLzsgfTsKIAkJNzlENUNE
NUIxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RDVDRDU5MUMxMTA2QTkwMENFQ0EwNyAv
KiBTYW1wbGluZ1Byb2ZpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJNzlERjY2QjAxQkYyNkE1NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhh
bmRsZXJNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc5REY2NkFFMUJGMjZBNTcwMDAxQ0YxMSAvKiBGVExFeGNlcHRpb25IYW5kbGVyTWFu
YWdlci5jcHAgKi87IH07Ci0JCTc5REY2NkIxMUJGMjZBNTcwMDAxQ0YxMSAvKiBGVExFeGNlcHRp
b25IYW5kbGVyTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzlERjY2QUYxQkYyNkE1NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRsZXJN
YW5hZ2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNzlFRTBCRkYxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlFRTBCRkQxQjRB
RkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuY3BwICovOyB9OwogCQk3OUVFMEMw
MDFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlFRTBCRkUxQjRBRkI4NTAwMDM4NUM5
IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3OUY4RkMxRTFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1h
bEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzlGOEZDMUMxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01heGltYWxGbHVz
aEluc2VydGlvblBoYXNlLmNwcCAqLzsgfTsKQEAgLTE1MjYsMTAgKzE0ODcsOCBAQAogCQk5OUYx
QTZGRTFCOEU2RDk0MDA0NjNCMjYgLyogSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTlGMUE2RkMxQjhFNkQ5
NDAwNDYzQjI2IC8qIEluc3BlY3RvckZyb250ZW5kUm91dGVyLmNwcCAqLzsgfTsKIAkJOTlGMUE3
MDExQjk4RkJFQzAwNDYzQjI2IC8qIEluc3BlY3RvckZyb250ZW5kUm91dGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OUYxQTcwMDFCOThGQkVDMDA0
NjNCMjYgLyogSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5RTcyOTQwNzE5MEYwMUE1MDAxQTkxQjUgLyog
SW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFMTc4NjM2QzBEOUJFRUMzMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRocmVh
ZGluZy5jcHAgKi87IH07Ci0JCTlFNzI5NDA4MTkwRjAyMUUwMDFBOTFCNSAvKiBJbml0aWFsaXpl
TExWTVBPU0lYLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQ0VGQUM1MTgwNUU3NTUwMDQ3MkNFNCAvKiBJbml0aWFsaXplTExWTVBPU0lYLmNwcCAq
LzsgfTsKIAkJOUU3Mjk0MEIxOTBGMDUxNDAwMUE5MUI1IC8qIEJ1bmRsZVBhdGguaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlFNzI5NDBBMTkwRjA1MTQw
MDFBOTFCNSAvKiBCdW5kbGVQYXRoLmggKi87IH07CiAJCTlFQTVDN0ExMTkwRjA4NDIwMDUwOEVC
RSAvKiBCdW5kbGVQYXRoLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOUU3Mjk0MDkxOTBGMDMwNjAwMUE5MUI1IC8qIEJ1bmRsZVBhdGgubW0gKi87IH07
Ci0JCTlFQTVDN0EyMTkwRjA4ODcwMDUwOEVCRSAvKiBJbml0aWFsaXplTExWTU1hYy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5RUE1QzdBMDE5MEYw
NUQyMDA1MDhFQkUgLyogSW5pdGlhbGl6ZUxMVk1NYWMuY3BwICovOyB9OwogCQlBMTI1ODQ2RTFC
NDVBMzYwMDBDQzdGNkMgLyogSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmx1dC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEyNTg0NkMxQjQ1QTM2
MDAwQ0M3RjZDIC8qIEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5sdXQuaCAqLzsgfTsKIAkJ
QTEyNTg0NkYxQjQ1QTM2MDAwQ0M3RjZDIC8qIEludGxOdW1iZXJGb3JtYXRQcm90b3R5cGUubHV0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTI1ODQ2
RDFCNDVBMzYwMDBDQzdGNkMgLyogSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5sdXQuaCAqLzsg
fTsKIAkJQTEyQkJGRjIxQjA0NEE4QjAwNjY0QjY5IC8qIEludGxPYmplY3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMkJCRkYxMUIwNDRBOEIwMDY2
NEI2OSAvKiBJbnRsT2JqZWN0LmggKi87IH07CkBAIC0xODUxLDggKzE4MTAsNiBAQAogCQlBN0Uy
RUE2QzBGQjQ2MENGMDA2MDFGMDYgLyogTGl0ZXJhbFBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0UyRUE2QTBGQjQ2MENGMDA2MDFGMDYg
LyogTGl0ZXJhbFBhcnNlci5jcHAgKi87IH07CiAJCUE3RTVBM0E3MTc5NzQzMkQwMEU4OTNDMCAv
KiBDb21waWxhdGlvblJlc3VsdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0U1QTNBNTE3OTc0MzJEMDBFODkzQzAgLyogQ29tcGlsYXRpb25SZXN1
bHQuY3BwICovOyB9OwogCQlBN0U1QTNBODE3OTc0MzJEMDBFODkzQzAgLyogQ29tcGlsYXRpb25S
ZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3
RTVBM0E2MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE3RTVBQjM3MTc5OUU0QjIw
MEQyODMzRCAvKiBMTFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RTVBQjMzMTc5OUU0QjIwMEQyODMzRCAvKiBMTFZNRGlz
YXNzZW1ibGVyLmNwcCAqLzsgfTsKLQkJQTdFNUFCMzgxNzk5RTRCMjAwRDI4MzNEIC8qIExMVk1E
aXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE3RTVBQjM0MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZNRGlzYXNzZW1ibGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdFNUFCMzkxNzk5
RTRCMjAwRDI4MzNEIC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdFNUFCMzUxNzk5RTRCMjAwRDI4MzNEIC8qIFVE
aXM4NkRpc2Fzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUE3RTVBQjNBMTc5OUU0QjIwMEQyODMzRCAvKiBYODZEaXNhc3NlbWJsZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdFNUFC
MzYxNzk5RTRCMjAwRDI4MzNEIC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgKi87IH07CiAJCUE3RjI5
OTZCMTdBMEJCNjcwMDEwNDE3QSAvKiBGVExGYWlsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RjI5OTY5MTdBMEJCNjcwMDEwNDE3QSAvKiBGVExG
YWlsLmNwcCAqLzsgfTsKQEAgLTIwNzYsOCArMjAzMyw2IEBACiAJCUZFMTg3QTBEMUMwMzBENUMw
MDM4QkJDQSAvKiBKSVREaXZHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZFMTg3QTBCMUMwMjI5MjMwMDM4QkJDQSAvKiBKSVREaXZHZW5l
cmF0b3IuaCAqLzsgfTsKIAkJRkUxODdBMEUxQzAzMEQ2NDAwMzhCQkNBIC8qIEpJVERpdkdlbmVy
YXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTE4N0EwQTFDMDIyOTIzMDAzOEJCQ0EgLyogSklURGl2R2VuZXJhdG9yLmNwcCAqLzsgfTsKIAkJ
RkUxODdBMEYxQzAzMEQ2QzAwMzhCQkNBIC8qIFNuaXBwZXRPcGVyYW5kLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTE4N0EwQzFDMDJFQkE3MDAzOEJC
Q0EgLyogU25pcHBldE9wZXJhbmQuaCAqLzsgfTsKLQkJRkUxODdBMTkxQzBFMTNFMzAwMzhCQkNB
IC8qIEZUTENvbXBpbGVCaW5hcnlPcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRTE4N0ExNTFDMEUxM0M2MDAzOEJCQ0EgLyogRlRMQ29tcGlsZUJp
bmFyeU9wLmNwcCAqLzsgfTsKLQkJRkUxODdBMUExQzBFMTNFNjAwMzhCQkNBIC8qIEZUTENvbXBp
bGVCaW5hcnlPcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkUxODdBMTYxQzBFMTNDNjAwMzhCQkNBIC8qIEZUTENvbXBpbGVCaW5hcnlPcC5oICovOyB9
OwogCQlGRTFDMEZGRDFCMTkzRTk4MDBCNTNGQ0EgLyogRXhjZXB0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTFDMEZGQzFCMTkzRTk4MDBCNTNG
Q0EgLyogRXhjZXB0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRkUxQzBGRkYxQjE5NEZEMTAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTFDMEZGRTFCMTk0
RkQxMDBCNTNGQ0EgLyogRXhjZXB0aW9uLmNwcCAqLzsgfTsKIAkJRkUyMENFOUQxNUYwNEE5NTAw
REYzNDMwIC8qIExMSW50Q0xvb3AuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRkUyMENFOUIxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3Bw
ICovOyB9OwpAQCAtMjE0MywxMyArMjA5OCw2IEBACiAJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9
IDBGOTMyNzRFMUMyMEJDQkEwMENGNjU2NDsKIAkJCXJlbW90ZUluZm8gPSBkeW5iZW5jaDsKIAkJ
fTsKLQkJMEZDRUZBQkMxODA1RDY2MzAwNDcyQ0U0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAq
LyA9IHsKLQkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKLQkJCWNvbnRhaW5lclBvcnRh
bCA9IDA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKLQkJCXBy
b3h5VHlwZSA9IDE7Ci0JCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDBGQ0VGQUI1MTgwNUQ2MTYw
MDQ3MkNFNDsKLQkJCXJlbW90ZUluZm8gPSBsbHZtRm9ySlNDOwotCQl9OwogCQkwRkVDODVCMDFC
REI1RDhGMDA4MEZGNzQgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0gewogCQkJaXNhID0g
UEJYQ29udGFpbmVySXRlbVByb3h5OwogCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0
MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOwpAQCAtMjM2NSw5ICsyMzEzLDYgQEAK
IAkJMEYyNEU1NTQxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVDYWxsRnJhbWVTZXQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNEU1NTcxN0Y3NEVEQjAwQUJCMjE3IC8qIFZhbHVl
UmVjb3ZlcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFsdWVS
ZWNvdmVyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjU2QzM0MTYyN0Iw
QUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93
UGF0aEdlbmVyYXRvci5oOyBwYXRoID0gZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRo
R2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMjVGMUE3MTgxNjM1
RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmg7IHBhdGggPSBmdGwv
RlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTBGMjVGMUE4MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZVNpemUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMSW5saW5lQ2FjaGVTaXplLmNwcDsg
cGF0aCA9IGZ0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwRjI1RjFBOTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTElubGluZUNhY2hlU2l6ZS5oOyBw
YXRoID0gZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjI1RjFBQTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFNsb3dQYXRoQ2FsbC5jcHA7IHBh
dGggPSBmdGwvRlRMU2xvd1BhdGhDYWxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyNUYxQUIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTbG93UGF0aENhbGwuaDsgcGF0aCA9IGZ0bC9G
VExTbG93UGF0aENhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNUYxQUMx
ODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExTbG93UGF0aENhbGxLZXkuY3BwOyBwYXRoID0gZnRs
L0ZUTFNsb3dQYXRoQ2FsbEtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
NjQ5LDExICsyNTk0LDcgQEAKIAkJMEY2ODJGQjExOUJDQjM2NDAwRkEzQkFEIC8qIERGR1NTQUNh
bGN1bGF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU1NBQ2FsY3Vs
YXRvci5oOyBwYXRoID0gZGZnL0RGR1NTQUNhbGN1bGF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY2OUNDODYxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Zyb3plblZhbHVlLmNw
cDsgcGF0aCA9IGRmZy9ERkdGcm96ZW5WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNjlDQzg3MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGcm96ZW5WYWx1ZS5oOyBwYXRoID0gZGZn
L0RGR0Zyb3plblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNkIxQ0Iz
MTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gRlRMSlNDYWxsLmNwcDsgcGF0aCA9IGZ0bC9GVExKU0NhbGwuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjZCMUNCNDE4NUZDOUU5MDA4NDVEOTcgLyog
RlRMSlNDYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEpTQ2FsbC5o
OyBwYXRoID0gZnRsL0ZUTEpTQ2FsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjZCMUNCNzE4NjEyNDRDMDA4NDVEOTcgLyogQXJpdHlDaGVja01vZGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQXJpdHlDaGVja01vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMEY2QjFDQzExODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMVW53aW5kSW5mby5jcHA7
IHBhdGggPSBmdGwvRlRMVW53aW5kSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGNkIxQ0MyMTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZvLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFVud2luZEluZm8uaDsgcGF0aCA9IGZ0bC9GVExV
bndpbmRJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNkI4QUQ2MUM0RURE
QTIwMDk2OTA1MiAvKiBCM0R1cGxpY2F0ZVRhaWxzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEIzRHVwbGljYXRlVGFpbHMuY3BwOyBwYXRoID0gYjMvQjNEdXBsaWNh
dGVUYWlscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNkI4QUQ3MUM0RURE
QTIwMDk2OTA1MiAvKiBCM0R1cGxpY2F0ZVRhaWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzRHVwbGljYXRlVGFpbHMuaDsgcGF0aCA9IGIzL0IzRHVwbGljYXRlVGFpbHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2QjhBREExQzRFRkFDMzAwOTY5MDUy
IC8qIEIzU1NBQ2FsY3VsYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM1NTQUNhbGN1bGF0b3IuY3BwOyBwYXRoID0gYjMvQjNTU0FDYWxjdWxhdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3NDcsMTMgKzI2ODgsOSBAQAogCQkwRjlC
MURCMzFDMEU0MkE1MDBFNUJGRDIgLyogRlRMQjNPdXRwdXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gRlRMQjNPdXRwdXQuY3BwOyBwYXRoID0gZnRsL0ZUTEIzT3V0
cHV0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5QjFEQjUxQzBFNDJCRDAw
RTVCRkQyIC8qIEZUTE9TUkV4aXRIYW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gRlRMT1NSRXhpdEhhbmRsZS5jcHA7IHBhdGggPSBmdGwvRlRMT1NSRXhpdEhh
bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUIxREI2MUMwRTQyQkQw
MEU1QkZEMiAvKiBGVExPU1JFeGl0SGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZUTE9TUkV4aXRIYW5kbGUuaDsgcGF0aCA9IGZ0bC9GVExPU1JFeGl0SGFuZGxlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOUM1RTVDMThFMzVGNUUwMEQ0MzFDMyAv
KiBGVExEV0FSRlJlZ2lzdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEZUTERXQVJGUmVnaXN0ZXIuY3BwOyBwYXRoID0gZnRsL0ZUTERXQVJGUmVnaXN0ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjlDNUU1RDE4RTM1RjVFMDBENDMxQzMg
LyogRlRMRFdBUkZSZWdpc3Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBG
VExEV0FSRlJlZ2lzdGVyLmg7IHBhdGggPSBmdGwvRlRMRFdBUkZSZWdpc3Rlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM2RTE2NURCQjhEMDA1QUQzODcgLyogRGlzYXNz
ZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERpc2Fzc2Vt
Ymxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDMzOTQxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNo
ZWRBdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGbHVzaGVk
QXQuY3BwOyBwYXRoID0gZGZnL0RGR0ZsdXNoZWRBdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGOUQzMzk1MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRmx1c2hlZEF0Lmg7IHBhdGggPSBkZmcv
REZHRmx1c2hlZEF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOUQzMzk4MTgw
M0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gRlRMU3RhY2tNYXBzLmNwcDsgcGF0aCA9IGZ0bC9GVExTdGFja01hcHMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjlEMzM5OTE4MDNBREI3MDA3M0My
QkMgLyogRlRMU3RhY2tNYXBzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZU
TFN0YWNrTWFwcy5oOyBwYXRoID0gZnRsL0ZUTFN0YWNrTWFwcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjlEMzY5MjFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5VcFBoYXNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NsZWFuVXBQaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHQ2xlYW5VcFBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY5RDM2OTMxQUU5Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQaGFzZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDbGVhblVwUGhhc2UuaDsgcGF0
aCA9IGRmZy9ERkdDbGVhblVwUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY5RDRDMEExQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExFeGNlcHRpb25UYXJnZXQuY3BwOyBw
YXRoID0gZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yODc0LDI2ICsyODExLDkgQEAKIAkJMEZDQ0FFNDMxNkQwQ0Y2RTAwRDBDNjVCIC8q
IFBhcnNlckVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlckVy
cm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0VGQUE5MTgwNEMxM0UwMDQ3
MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBGVExTYXZlUmVzdG9yZS5jcHA7IHBhdGggPSBmdGwvRlRMU2F2ZVJlc3RvcmUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNFRkFBQTE4MDRDMTNFMDA0NzJDRTQg
LyogRlRMU2F2ZVJlc3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRM
U2F2ZVJlc3RvcmUuaDsgcGF0aCA9IGZ0bC9GVExTYXZlUmVzdG9yZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwRkNFRkFBRTE4MDVDQTZEMDA0NzJDRTQgLyogSW5pdGlhbGl6ZUxM
Vk0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSW5pdGlhbGl6ZUxMVk0uaDsg
cGF0aCA9IGxsdm0vSW5pdGlhbGl6ZUxMVk0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMEZDRUZBQjYxODA1RDYxNjAwNDcyQ0U0IC8qIGxpYmxsdm1Gb3JKU0MuZHlsaWIgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNo
LW8uZHlsaWIiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJsbHZtRm9ySlNDLmR5bGli
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkwRkNFRkFCRTE4MDVEODY5
MDA0NzJDRTQgLyogTExWTUZvckpTQy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBMTFZNRm9ySlND
LnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkNFRkFDMDE4MDVEOTQx
MDA0NzJDRTQgLyogTExWTU92ZXJyaWRlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMTFZNT3Zl
cnJpZGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDRUZBQzIxODA1RTc0
MDAwNDcyQ0U0IC8qIExMVk1FeHBvcnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IExMVk1FeHBvcnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MEZDRUZBQzQxODA1RTc1NTAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZNLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEluaXRpYWxpemVMTFZNLmNwcDsgcGF0aCA9IGxs
dm0vSW5pdGlhbGl6ZUxMVk0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkNF
RkFDNTE4MDVFNzU1MDA0NzJDRTQgLyogSW5pdGlhbGl6ZUxMVk1QT1NJWC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJbml0aWFsaXplTExWTVBPU0lYLmNwcDsgcGF0
aCA9IGxsdm0vSW5pdGlhbGl6ZUxMVk1QT1NJWC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTBGQ0VGQUM2MTgwNUU3NTUwMDQ3MkNFNCAvKiBJbml0aWFsaXplTExWTVBPU0lYLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEluaXRpYWxpemVMTFZNUE9TSVguaDsg
cGF0aCA9IGxsdm0vSW5pdGlhbGl6ZUxMVk1QT1NJWC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwRkNFRkFDNzE4MDVFNzU1MDA0NzJDRTQgLyogTExWTUFQSS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMTFZNQVBJLmNwcDsgcGF0aCA9IGxsdm0vTExW
TUFQSS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQ0VGQUM4MTgwNUU3NTUw
MDQ3MkNFNCAvKiBMTFZNQVBJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExM
Vk1BUEkuaDsgcGF0aCA9IGxsdm0vTExWTUFQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRkNFRkFDOTE4MDVFNzU1MDA0NzJDRTQgLyogTExWTUFQSUZ1bmN0aW9ucy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTFZNQVBJRnVuY3Rpb25zLmg7IHBhdGggPSBs
bHZtL0xMVk1BUElGdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZD
RUZBRDIxODA1RURDQzAwNDcyQ0U0IC8qIExMVk1IZWFkZXJzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IExMVk1IZWFkZXJzLmg7IHBhdGggPSBsbHZtL0xMVk1IZWFkZXJzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQ0VGQUQ2MTgwNjE3NDYwMDQ3MkNFNCAv
KiBMTFZNQW5jaG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExM
Vk1BbmNob3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkNFRkFEQjE4MDY0
QTE0MDA0NzJDRTQgLyogY29uZmlnX2xsdm0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gY29uZmlnX2xsdm0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDRUZB
REQxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEZUTExvY2F0aW9uLmNwcDsgcGF0aCA9IGZ0bC9GVExMb2NhdGlv
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0VGQURFMTgwNzM4QzAwMDQ3
MkNFNCAvKiBGVExMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBG
VExMb2NhdGlvbi5oOyBwYXRoID0gZnRsL0ZUTExvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGRDEyMDJEMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2FsbEJhc2UuY3Bw
OyBwYXRoID0gZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0NhbGxCYXNlLmg7IHBhdGggPSBmdGwvRlRM
SlNDYWxsQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkQxMjAzMTFBOEM4
NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBGVExKU0NhbGxWYXJhcmdzLmNwcDsgcGF0aCA9IGZ0bC9GVExKU0Nh
bGxWYXJhcmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZEMTIwMzIxQThD
ODVCRDAwMEY1MjgwIC8qIEZUTEpTQ2FsbFZhcmFyZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gRlRMSlNDYWxsVmFyYXJncy5oOyBwYXRoID0gZnRsL0ZUTEpTQ2FsbFZhcmFy
Z3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEMkM5MjMxNkQwMUVFOTAwQzc4
MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3RydWN0dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQz
QzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBkZmcvREZHRHJpdmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNC
IC8qIERGR0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEcml2
ZXIuaDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTI5NjcsMTIgKzI4ODcsOCBAQAogCQkwRkU4MzQxNjFBNkVGOTdCMDBEMDQ4NDcgLyogUG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVz
aXJlZFdhdGNocG9pbnRzLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRTk1Rjc3MThCNTY5NDcwMEI1MzFGQiAvKiBG
VExEYXRhU2VjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBG
VExEYXRhU2VjdGlvbi5jcHA7IHBhdGggPSBmdGwvRlRMRGF0YVNlY3Rpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkwRkU5NUY3ODE4QjU2OTQ3MDBCNTMxRkIgLyogRlRMRGF0
YVNlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMRGF0YVNlY3Rp
b24uaDsgcGF0aCA9IGZ0bC9GVExEYXRhU2VjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwRkVBMDlGRDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExBYmJyZXZpYXRpb25zLmg7IHBhdGgg
PSBmdGwvRlRMQWJicmV2aWF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkVBMDlGRTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ2FwYWJpbGl0aWVzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTENhcGFiaWxpdGllcy5jcHA7IHBhdGggPSBm
dGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZF
QTA5RkYxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENhcGFiaWxpdGllcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBGVExDYXBhYmlsaXRpZXMuaDsgcGF0aCA9IGZ0bC9GVExDYXBh
YmlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZFQTBBMDAxNzA1MTNE
QjAwQkI3MjJDIC8qIEZUTENvbXBpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gRlRMQ29tcGlsZS5jcHA7IHBhdGggPSBmdGwvRlRMQ29tcGlsZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTAxMTcwNTEzREIwMEJCNzIyQyAvKiBGVExD
b21waWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTENvbXBpbGUuaDsg
cGF0aCA9IGZ0bC9GVExDb21waWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RUEwQTAyMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpJVENvZGUuY3BwOyBwYXRoID0gZnRsL0ZUTEpJVENv
ZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEwMzE3MDUxM0RCMDBC
QjcyMkMgLyogRlRMSklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBG
VExKSVRDb2RlLmg7IHBhdGggPSBmdGwvRlRMSklUQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMzM0MSw4ICszMjU3LDYgQEAKIAkJMkFBQkNERTYxOEVGMjk0MjAwMDAyMDk2
IC8qIEdDTG9nZ2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0xvZ2dp
bmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkFBQ0U2M0ExOENBNUEwMzAwRUQw
MTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkyQUFDRTYzQjE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDQWN0aXZpdHlDYWxsYmFjay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyQUM5MjJCOTE4QTE2MTgyMDAzQ0UwRkIgLyog
RlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEZUTERXQVJGRGVidWdMaW5lSW5mby5jcHA7IHBhdGggPSBmdGwvRlRMRFdBUkZEZWJ1
Z0xpbmVJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkFDOTIyQkExOEEx
NjE4MjAwM0NFMEZCIC8qIEZUTERXQVJGRGVidWdMaW5lSW5mby5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBGVExEV0FSRkRlYnVnTGluZUluZm8uaDsgcGF0aCA9IGZ0bC9GVExE
V0FSRkRlYnVnTGluZUluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkFEMkVE
RkExOTc5OUUzODAwNEQ2NDc4IC8qIEVudW1lcmF0aW9uTW9kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBFbnVtZXJhdGlvbk1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMkFEODkzMjkxN0UzODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29wZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwSXRlcmF0aW9uU2NvcGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkFERkEyNjIxOEVGMzU0MDAwNEY5RkNDIC8q
IEdDTG9nZ2luZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHQ0xv
Z2dpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzQwNCw4ICszMzE4LDYg
QEAKIAkJNjIzQTM3RUIxQjg3QTdCRDAwNzU0MjA5IC8qIFJlZ2lzdGVyTWFwLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZ2lzdGVyTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTYyNzY3MzIxMUI2ODBDMUUwMEZEOUYyRSAvKiBDYWxsTW9kZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsTW9kZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTYyNzY3MzIyMUI2ODBDMUUwMEZEOUYyRSAvKiBDYWxsTW9k
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsTW9kZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk2Mjc3NERBODFCOEQ0QjE5MDAwNkYwNUEgLyogRlRMSlNU
YWlsQ2FsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExKU1Rh
aWxDYWxsLmNwcDsgcGF0aCA9IGZ0bC9GVExKU1RhaWxDYWxsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNjI3NzREQTkxQjhENEIxOTAwMDZGMDVBIC8qIEZUTEpTVGFpbENhbGwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMSlNUYWlsQ2FsbC5oOyBwYXRo
ID0gZnRsL0ZUTEpTVGFpbENhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjJB
OUEyOUUxQjBCRUQ0ODAwQkQ1NENBIC8qIERGR0xhenlOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0xhenlOb2RlLmNwcDsgcGF0aCA9IGRmZy9ERkdMYXp5
Tm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTYyQTlBMjlGMUIwQkVENDgw
MEJENTRDQSAvKiBERkdMYXp5Tm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdMYXp5Tm9kZS5oOyBwYXRoID0gZGZnL0RGR0xhenlOb2RlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTYyRDJEMzhEMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVE
YXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0aW9uUmFy
ZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzUzMCw4ICszNDQyLDYg
QEAKIAkJNzlDRkM2RUYxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENSYW5nZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRQQ1Jhbmdlcy5oOyBwYXRoID0gbGxpbnQv
TExJbnRQQ1Jhbmdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUQ1Q0Q1ODFD
MTEwNkE5MDBDRUNBMDcgLyogU2FtcGxpbmdQcm9maWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ1Byb2ZpbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzlENUNENTkxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmls
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2FtcGxpbmdQcm9maWxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3OURGNjZBRTFCRjI2QTU3MDAwMUNGMTEg
LyogRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuY3BwOyBwYXRoID0gZnRs
L0ZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNzlERjY2QUYxQkYyNkE1NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5h
Z2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEV4Y2VwdGlvbkhhbmRs
ZXJNYW5hZ2VyLmg7IHBhdGggPSBmdGwvRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlFRTBCRkQxQjRBRkI4NTAwMDM4NUM5IC8qIFZh
cmlhYmxlRW52aXJvbm1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVmFyaWFibGVFbnZpcm9ubWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTc5RUUwQkZFMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhcmlhYmxlRW52aXJvbm1lbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlGOEZDMUMxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01h
eGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9E
RkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0zNzc1LDcgKzM2ODUsNiBAQAogCQk5QjQ5NTRFODFBNjY0MERCMDAyODE1QTYgLyog
UGFyc2VyRnVuY3Rpb25JbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlckZ1bmN0aW9uSW5mby5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5RTcyOTQwOTE5MEYwMzA2MDAxQTkxQjUg
LyogQnVuZGxlUGF0aC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IEJ1bmRsZVBhdGgubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlFNzI5NDBBMTkw
RjA1MTQwMDFBOTFCNSAvKiBCdW5kbGVQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEJ1bmRsZVBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOUVBNUM3
QTAxOTBGMDVEMjAwNTA4RUJFIC8qIEluaXRpYWxpemVMTFZNTWFjLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEluaXRpYWxpemVMTFZNTWFjLmNwcDsgcGF0aCA9IGxs
dm0vSW5pdGlhbGl6ZUxMVk1NYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
MTI1ODQ2QzFCNDVBMzYwMDBDQzdGNkMgLyogSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmx1
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRsTnVtYmVyRm9ybWF0Q29u
c3RydWN0b3IubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMjU4NDZEMUI0
NUEzNjAwMENDN0Y2QyAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmx1dC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmx1dC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTJCQkZGMTFCMDQ0QThCMDA2NjRCNjkg
LyogSW50bE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRsT2Jq
ZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00MDk4LDggKzQwMDcsNiBAQAog
CQlBN0UyRUE2QTBGQjQ2MENGMDA2MDFGMDYgLyogTGl0ZXJhbFBhcnNlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaXRlcmFsUGFyc2VyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdFNUEzQTUxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0
aW9uUmVzdWx0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBp
bGF0aW9uUmVzdWx0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdFNUEzQTYx
Nzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvbXBpbGF0aW9uUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUE3RTVBQjMzMTc5OUU0QjIwMEQyODMzRCAvKiBMTFZNRGlzYXNzZW1ibGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIu
Y3BwOyBwYXRoID0gZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlBN0U1QUIzNDE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fz
c2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTFZNRGlzYXNzZW1i
bGVyLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBN0U1QUIzNTE3OTlFNEIyMDBEMjgzM0QgLyogVURpczg2RGlz
YXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFVEaXM4NkRpc2Fz
c2VtYmxlci5oOyBwYXRoID0gZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0U1QUIzNjE3OTlFNEIyMDBEMjgzM0QgLyogWDg2
RGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFg4
NkRpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdGMjk5NjkxN0EwQkI2NzAwMTA0MTdB
IC8qIEZUTEZhaWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRM
RmFpbC5jcHA7IHBhdGggPSBmdGwvRlRMRmFpbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC00MzU0LDggKzQyNjEsNiBAQAogCQlGRTE4N0EwQTFDMDIyOTIzMDAzOEJCQ0EgLyog
SklURGl2R2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpJVERpdkdlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTg3
QTBCMUMwMjI5MjMwMDM4QkJDQSAvKiBKSVREaXZHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSklURGl2R2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFMTg3QTBDMUMwMkVCQTcwMDM4QkJDQSAvKiBTbmlwcGV0T3BlcmFuZC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbmlwcGV0T3BlcmFuZC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlGRTE4N0ExNTFDMEUxM0M2MDAzOEJCQ0EgLyogRlRMQ29t
cGlsZUJpbmFyeU9wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZU
TENvbXBpbGVCaW5hcnlPcC5jcHA7IHBhdGggPSBmdGwvRlRMQ29tcGlsZUJpbmFyeU9wLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkUxODdBMTYxQzBFMTNDNjAwMzhCQkNBIC8q
IEZUTENvbXBpbGVCaW5hcnlPcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBG
VExDb21waWxlQmluYXJ5T3AuaDsgcGF0aCA9IGZ0bC9GVExDb21waWxlQmluYXJ5T3AuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4
Y2VwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNlcHRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUxQzBGRkUxQjE5NEZEMTAwQjUzRkNBIC8q
IEV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNl
cHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QjE1RjA0QTk1
MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBMTEludENMb29wLmNwcDsgcGF0aCA9IGxsaW50L0xMSW50Q0xvb3AuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDQzMCwxMyArNDMzNSw2IEBACiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Ci0JCTBGQ0VGQUIz
MTgwNUQ2MTYwMDQ3MkNFNCAvKiBGcmFtZXdvcmtzICovID0gewotCQkJaXNhID0gUEJYRnJhbWV3
b3Jrc0J1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmls
ZXMgPSAoCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
Ci0JCX07CiAJCTBGRUM4NUEyMUJEQjVDRjEwMDgwRkY3NCAvKiBGcmFtZXdvcmtzICovID0gewog
CQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAy
MTQ3NDgzNjQ3OwpAQCAtNDUxMiw3ICs0NDEwLDYgQEAKIAkJCQk5MzJGNUJEOTA4MjJBMUM3MDA3
MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovLAogCQkJCTkzMkY1QkUxMDgyMkEx
QzcwMDczNjk3NSAvKiBqc2MgKi8sCiAJCQkJMEZGOTIyQ0YxNEY0NkIxMzAwNDFBMjRFIC8qIEpT
Q0xMSW50T2Zmc2V0c0V4dHJhY3RvciAqLywKLQkJCQkwRkNFRkFCNjE4MDVENjE2MDA0NzJDRTQg
LyogbGlibGx2bUZvckpTQy5keWxpYiAqLywKIAkJCQkxNDEyMTEyMDBBNDg3OTNDMDA0ODAyNTUg
LyogbWluaWRvbSAqLywKIAkJCQkxNEJENTlCRjBBM0U4RjkwMDBCQUY1OUMgLyogdGVzdGFwaSAq
LywKIAkJCQkwRkVDODVBRDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovLApAQCAtNDU1Nyw3
ICs0NDU0LDYgQEAKIAkJCQkxNDI5RDc3QTBFRDIwRDczMDBCODk2MTkgLyogaW50ZXJwcmV0ZXIg
Ki8sCiAJCQkJMTQyOUQ5MkMwRUQyMkQ3MDAwQjg5NjE5IC8qIGppdCAqLywKIAkJCQkwRjQ2ODA5
QzE0QkE3RjREMDBCRkUyNzIgLyogbGxpbnQgKi8sCi0JCQkJMEZDRUZBQUQxODA1Q0E0NDAwNDcy
Q0U0IC8qIGxsdm0gKi8sCiAJCQkJN0UzOUQ4MzcwRUMzQTM4ODAwM0FGMTFBIC8qIHBhcnNlciAq
LywKIAkJCQkwMzQ3NjhERkZGMzhBNTA0MTFEQjlDOEIgLyogUHJvZHVjdHMgKi8sCiAJCQkJOTVB
QjgzMUEwREE0MkM2OTAwQkM4M0YzIC8qIHByb2ZpbGVyICovLApAQCAtNDYyMCw0MCArNDUxNiwx
MCBAQAogCQkJbmFtZSA9IGxsaW50OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsK
LQkJMEZDRUZBQUQxODA1Q0E0NDAwNDcyQ0U0IC8qIGxsdm0gKi8gPSB7Ci0JCQlpc2EgPSBQQlhH
cm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTBGQ0VGQUJGMTgwNUQ5NDEwMDQ3MkNFNCAvKiBs
aWJyYXJ5ICovLAotCQkJCTBGQ0VGQUM0MTgwNUU3NTUwMDQ3MkNFNCAvKiBJbml0aWFsaXplTExW
TS5jcHAgKi8sCi0JCQkJMEZDRUZBQUUxODA1Q0E2RDAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZN
LmggKi8sCi0JCQkJOUVBNUM3QTAxOTBGMDVEMjAwNTA4RUJFIC8qIEluaXRpYWxpemVMTFZNTWFj
LmNwcCAqLywKLQkJCQkwRkNFRkFDNTE4MDVFNzU1MDA0NzJDRTQgLyogSW5pdGlhbGl6ZUxMVk1Q
T1NJWC5jcHAgKi8sCi0JCQkJMEZDRUZBQzYxODA1RTc1NTAwNDcyQ0U0IC8qIEluaXRpYWxpemVM
TFZNUE9TSVguaCAqLywKLQkJCQkwRkNFRkFDNzE4MDVFNzU1MDA0NzJDRTQgLyogTExWTUFQSS5j
cHAgKi8sCi0JCQkJMEZDRUZBQzgxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuaCAqLywKLQkJ
CQkwRkNFRkFDOTE4MDVFNzU1MDA0NzJDRTQgLyogTExWTUFQSUZ1bmN0aW9ucy5oICovLAotCQkJ
CTBGQ0VGQUQyMTgwNUVEQ0MwMDQ3MkNFNCAvKiBMTFZNSGVhZGVycy5oICovLAotCQkJKTsKLQkJ
CW5hbWUgPSBsbHZtOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJMEZDRUZB
QkYxODA1RDk0MTAwNDcyQ0U0IC8qIGxpYnJhcnkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsK
LQkJCWNoaWxkcmVuID0gKAotCQkJCTBGQ0VGQURCMTgwNjRBMTQwMDQ3MkNFNCAvKiBjb25maWdf
bGx2bS5oICovLAotCQkJCTBGQ0VGQUQ2MTgwNjE3NDYwMDQ3MkNFNCAvKiBMTFZNQW5jaG9yLmNw
cCAqLywKLQkJCQkwRkNFRkFDMjE4MDVFNzQwMDA0NzJDRTQgLyogTExWTUV4cG9ydHMuY3BwICov
LAotCQkJCTBGQ0VGQUMwMTgwNUQ5NDEwMDQ3MkNFNCAvKiBMTFZNT3ZlcnJpZGVzLmNwcCAqLywK
LQkJCSk7Ci0JCQluYW1lID0gbGlicmFyeTsKLQkJCXBhdGggPSBsbHZtL2xpYnJhcnk7Ci0JCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQkwRkVBMDlGQzE3MDUxMzdGMDBCQjcyMkMg
LyogZnRsICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkw
RkRCMkNDNzE3M0RBNTFFMDA3QjNDMUIgLyogRlRMQWJicmV2aWF0ZWRUeXBlcy5oICovLAotCQkJ
CTBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmggKi8sCiAJCQkJ
MEZFQTBBMTcxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5jcHAgKi8sCiAJCQkJ
MEZFQTBBMTgxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5oICovLAogCQkJCTBG
RUEwQTE5MTcwOEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcCAq
LywKQEAgLTQ2NjcsMTggKzQ1MzMsNyBAQAogCQkJCTBGRUEwOUZGMTcwNTEzREIwMEJCNzIyQyAv
KiBGVExDYXBhYmlsaXRpZXMuaCAqLywKIAkJCQkwRkVBMEEyNTE3MDk2MjNCMDBCQjcyMkMgLyog
RlRMQ29tbW9uVmFsdWVzLmNwcCAqLywKIAkJCQkwRkVBMEEyMTE3MDk2MDY5MDBCQjcyMkMgLyog
RlRMQ29tbW9uVmFsdWVzLmggKi8sCi0JCQkJMEZFQTBBMDAxNzA1MTNEQjAwQkI3MjJDIC8qIEZU
TENvbXBpbGUuY3BwICovLAogCQkJCTBGRUEwQTAxMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDb21w
aWxlLmggKi8sCi0JCQkJRkUxODdBMTUxQzBFMTNDNjAwMzhCQkNBIC8qIEZUTENvbXBpbGVCaW5h
cnlPcC5jcHAgKi8sCi0JCQkJRkUxODdBMTYxQzBFMTNDNjAwMzhCQkNBIC8qIEZUTENvbXBpbGVC
aW5hcnlPcC5oICovLAotCQkJCTBGRTk1Rjc3MThCNTY5NDcwMEI1MzFGQiAvKiBGVExEYXRhU2Vj
dGlvbi5jcHAgKi8sCi0JCQkJMEZFOTVGNzgxOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0
aW9uLmggKi8sCi0JCQkJMkFDOTIyQjkxOEExNjE4MjAwM0NFMEZCIC8qIEZUTERXQVJGRGVidWdM
aW5lSW5mby5jcHAgKi8sCi0JCQkJMkFDOTIyQkExOEExNjE4MjAwM0NFMEZCIC8qIEZUTERXQVJG
RGVidWdMaW5lSW5mby5oICovLAotCQkJCTBGOUM1RTVDMThFMzVGNUUwMEQ0MzFDMyAvKiBGVExE
V0FSRlJlZ2lzdGVyLmNwcCAqLywKLQkJCQkwRjlDNUU1RDE4RTM1RjVFMDBENDMxQzMgLyogRlRM
RFdBUkZSZWdpc3Rlci5oICovLAotCQkJCTc5REY2NkFFMUJGMjZBNTcwMDAxQ0YxMSAvKiBGVExF
eGNlcHRpb25IYW5kbGVyTWFuYWdlci5jcHAgKi8sCi0JCQkJNzlERjY2QUYxQkYyNkE1NzAwMDFD
RjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmggKi8sCiAJCQkJMEY5RDRDMEExQzNF
MUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5jcHAgKi8sCiAJCQkJMEY5RDRDMEIx
QzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2VwdGlvblRhcmdldC5oICovLAogCQkJCTBGMjM1QkJE
MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnQuY3BwICovLApAQCAtNDY5OSwyMyAr
NDU1NCwxMiBAQAogCQkJCTBGRDhBMzE1MTdENTFGMjIwMENBMkM0MCAvKiBGVExGb3JPU1JFbnRy
eUpJVENvZGUuY3BwICovLAogCQkJCTBGRDhBMzE2MTdENTFGMjIwMENBMkM0MCAvKiBGVExGb3JP
U1JFbnRyeUpJVENvZGUuaCAqLywKIAkJCQlBNzhBOTc3QzE3OTczOEQ1MDA5REY3NDQgLyogRlRM
R2VuZXJhdGVkRnVuY3Rpb24uaCAqLywKLQkJCQkwRjI1RjFBNzE4MTYzNUYzMDA1MjJGMzkgLyog
RlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmggKi8sCi0JCQkJMEYyNUYxQTgxODE2MzVGMzAwNTIy
RjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5jcHAgKi8sCi0JCQkJMEYyNUYxQTkxODE2MzVGMzAw
NTIyRjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5oICovLAogCQkJCTBGRUEwQTI2MTcwOTYyM0Iw
MEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmNwcCAqLywKIAkJCQkwRkVBMEEyMjE3
MDk2MDY5MDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oICovLAogCQkJCTBGRUEw
QTAyMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmNwcCAqLywKIAkJCQkwRkVBMEEwMzE3
MDUxM0RCMDBCQjcyMkMgLyogRlRMSklUQ29kZS5oICovLAogCQkJCUE3OEE5NzdEMTc5NzM4RDUw
MDlERjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIuY3BwICovLAogCQkJCUE3OEE5NzdFMTc5NzM4RDUw
MDlERjc0NCAvKiBGVExKSVRGaW5hbGl6ZXIuaCAqLywKLQkJCQkwRjZCMUNCMzE4NUZDOUU5MDA4
NDVEOTcgLyogRlRMSlNDYWxsLmNwcCAqLywKLQkJCQkwRjZCMUNCNDE4NUZDOUU5MDA4NDVEOTcg
LyogRlRMSlNDYWxsLmggKi8sCi0JCQkJMEZEMTIwMkQxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpT
Q2FsbEJhc2UuY3BwICovLAotCQkJCTBGRDEyMDJFMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0Nh
bGxCYXNlLmggKi8sCi0JCQkJMEZEMTIwMzExQThDODVCRDAwMEY1MjgwIC8qIEZUTEpTQ2FsbFZh
cmFyZ3MuY3BwICovLAotCQkJCTBGRDEyMDMyMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxW
YXJhcmdzLmggKi8sCi0JCQkJNjI3NzREQTgxQjhENEIxOTAwMDZGMDVBIC8qIEZUTEpTVGFpbENh
bGwuY3BwICovLAotCQkJCTYyNzc0REE5MUI4RDRCMTkwMDA2RjA1QSAvKiBGVExKU1RhaWxDYWxs
LmggKi8sCiAJCQkJMEZCNEZCNzAxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5j
cHAgKi8sCiAJCQkJMEZCNEZCNzExQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5o
ICovLAogCQkJCTBGQjRGQjcyMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGhDYWxs
LmggKi8sCkBAIC00NzUwLDE2ICs0NTk0LDEyIEBACiAJCQkJMEYyNUYxQUMxODE2MzVGMzAwNTIy
RjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgKi8sCiAJCQkJMEYyNUYxQUQxODE2MzVGMzAw
NTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5oICovLAogCQkJCTBGMjM1QkMxMTcxNzhFMUMw
MDY5MEM3RiAvKiBGVExTdGFja21hcEFyZ3VtZW50TGlzdC5oICovLAotCQkJCTBGOUQzMzk4MTgw
M0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuY3BwICovLAotCQkJCTBGOUQzMzk5MTgwM0FE
QjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuaCAqLywKIAkJCQkwRkVBMEExNTE3MDZCQjkwMDBC
QjcyMkMgLyogRlRMU3RhdGUuY3BwICovLAogCQkJCTBGRUEwQTA3MTcwNTEzREIwMEJCNzIyQyAv
KiBGVExTdGF0ZS5oICovLAogCQkJCUE3RkNDMjZDMTdBMEI2QUEwMDc4NkQxQSAvKiBGVExTd2l0
Y2hDYXNlLmggKi8sCiAJCQkJMEYyMzVCQ0IxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFRodW5rcy5j
cHAgKi8sCiAJCQkJMEYyMzVCQ0MxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFRodW5rcy5oICovLAog
CQkJCTBGRUEwQTFCMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExUeXBlZFBvaW50ZXIuaCAqLywKLQkJ
CQkwRjZCMUNDMTE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5jcHAgKi8sCi0JCQkJ
MEY2QjFDQzIxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8uaCAqLywKIAkJCQkwRkRC
MkNDODE3M0RBNTFFMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCAqLywKIAkJCQkwRjVB
NjI4MTE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5jcHAgKi8sCiAJCQkJMEY1QTYy
ODIxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCAqLywKQEAgLTUwMTMsOCArNDg1
Myw2IEBACiAJCQkJNjVDMDI4NEYxNzE3OTVFMjAwMzUxRTM1IC8qIEFSTXY3RGlzYXNzZW1ibGVy
LmNwcCAqLywKIAkJCQkwRjlEMzM2RTE2NURCQjhEMDA1QUQzODcgLyogRGlzYXNzZW1ibGVyLmNw
cCAqLywKIAkJCQkwRkY0MjcyRjE1OEVCRDQ0MDA0Q0I5RkYgLyogRGlzYXNzZW1ibGVyLmggKi8s
Ci0JCQkJQTdFNUFCMzMxNzk5RTRCMjAwRDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuY3BwICov
LAotCQkJCUE3RTVBQjM0MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZNRGlzYXNzZW1ibGVyLmggKi8s
CiAJCQkJMEZGNDI3MzAxNThFQkQ0NDAwNENCOUZGIC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5jcHAg
Ki8sCiAJCQkJQTdFNUFCMzUxNzk5RTRCMjAwRDI4MzNEIC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5o
ICovLAogCQkJCUE3RTVBQjM2MTc5OUU0QjIwMEQyODMzRCAvKiBYODZEaXNhc3NlbWJsZXIuY3Bw
ICovLApAQCAtNzAyMCwxNyArNjg1OCw2IEBACiAvKiBFbmQgUEJYR3JvdXAgc2VjdGlvbiAqLwog
CiAvKiBCZWdpbiBQQlhIZWFkZXJzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTBGQ0VGQUI0MTgw
NUQ2MTYwMDQ3MkNFNCAvKiBIZWFkZXJzICovID0gewotCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxk
UGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0J
CQkJMEZDRUZBREMxODA2NEExNDAwNDcyQ0U0IC8qIGNvbmZpZ19sbHZtLmggaW4gSGVhZGVycyAq
LywKLQkJCQkwRkNFRkFEQTE4MDYyMERBMDA0NzJDRTQgLyogTExWTUFQSS5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMEZDRUZBRDExODA1RTc3OTAwNDcyQ0U0IC8qIExMVk1BUElGdW5jdGlvbnMuaCBp
biBIZWFkZXJzICovLAotCQkJCTBGQ0VGQUQ0MTgwNUVEQ0MwMDQ3MkNFNCAvKiBMTFZNSGVhZGVy
cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7Ci0JCX07CiAJCTE0NDAwNUM3MEE1MzM4QzYwMDA1RjA2MSAvKiBIZWFkZXJz
ICovID0gewogCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1h
c2sgPSAyMTQ3NDgzNjQ3OwpAQCAtNzA0OSw3ICs2ODc2LDYgQEAKIAkJCWZpbGVzID0gKAogCQkJ
CTBGRkE1NDk4MTZCODgzNTMwMEIzQTk4MiAvKiBBNjRET3Bjb2RlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjFGRTUxQzE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFzb24uaCBpbiBIZWFkZXJz
ICovLAotCQkJCUZFMTg3QTFBMUMwRTEzRTYwMDM4QkJDQSAvKiBGVExDb21waWxlQmluYXJ5T3Au
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUUzMEYzQTgzQzEwMEY4NDcxMCAvKiBBYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1RjBGNTE0RDEwNjNDMDBB
Qzc2NDkgLyogQWJzdHJhY3RQQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1NkUxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suaCBpbiBIZWFkZXJzICovLApAQCAtNzA2OCw3
ICs2ODk0LDYgQEAKIAkJCQkwRjYxODMzMTFDNDVCRjA3MDA3MjQ1MEIgLyogQWlyTG93ZXJNYWNy
b3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJG
cmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc5MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzlERjY2QjExQkYyNkE1
NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkVDODU3QTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRUM4NTdDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVD
YWxsZWVTYXZlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1N0UxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckluc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCkBAIC03NTExLDcgKzczMzYsNiBA
QAogCQkJCUE3QThBRjM5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDY0QXJyYXkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMjRFNTQzMTdFQTlGNTkwMEFCQjIxNyAvKiBGUFJJbmZvLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkRCMkNDOTE3M0RBNTIwMDA3QjNDMUIgLyogRlRMQWJicmV2aWF0ZWRU
eXBlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEZFQTBBMDgxNzA1MTNEQjAwQkI3MjJDIC8qIEZU
TEFiYnJldmlhdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTFEMTcwOEIwMDcwMEJC
NzIyQyAvKiBGVExBYnN0cmFjdEhlYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTFGMTcw
OEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjQ4NTMyODE4N0RGREVDMDA4M0I2ODcgLyogRlRMQXZhaWxhYmxlUmVjb3Zlcnku
aCBpbiBIZWFkZXJzICovLApAQCAtNzUxOSw5ICs3MzQzLDYgQEAKIAkJCQkwRkVBMEEwQTE3MDUx
M0RCMDBCQjcyMkMgLyogRlRMQ2FwYWJpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVB
MEEyMzE3MDk2MDY5MDBCQjcyMkMgLyogRlRMQ29tbW9uVmFsdWVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkVBMEEwQzE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMEZFOTVGN0ExOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0aW9uLmggaW4g
SGVhZGVycyAqLywKLQkJCQkyQUM5MjJCQzE4QTE2MTgyMDAzQ0UwRkIgLyogRlRMRFdBUkZEZWJ1
Z0xpbmVJbmZvLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjlDNUU1RjE4RTM1RjVFMDBENDMxQzMg
LyogRlRMRFdBUkZSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRDQxNzE3OEUx
QzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhF
MEMxQkYwMjc2QzAwMTNDODhGIC8qIEIzQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMjM1QkQ2MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmgg
aW4gSGVhZGVycyAqLywKQEAgLTc1MzUsMTUgKzczNTYsOSBAQAogCQkJCTBGRUEwQTJDMTcwQjY2
MTkwMEJCNzIyQyAvKiBGVExGb3JtYXR0ZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZE
OEEzMUExN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5SklUQ29kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTc4QTk3N0YxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEdlbmVyYXRlZEZ1bmN0
aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjI1RjFBRTE4MTYzNUYzMDA1MjJGMzkgLyogRlRM
SW5saW5lQ2FjaGVEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjI1RjFCMDE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVBMEEyNDE3MDk2MDY5MDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFQTBBMEUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3OEE5NzgxMTc5NzM4RDUwMDlERjc0NCAvKiBGVExKSVRGaW5h
bGl6ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGNkIxQ0I2MTg1RkM5RTkwMDg0NUQ5NyAvKiBG
VExKU0NhbGwuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGRDEyMDMwMUE4QUVEMTIwMDBGNTI4MCAv
KiBGVExKU0NhbGxCYXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkQxMjAzNDFBOEM4NUJEMDAw
RjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNjI3NzREQUIx
QjhENEIxOTAwMDZGMDVBIC8qIEZUTEpTVGFpbENhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QjRGQjc0MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGguaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQjRGQjc1MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGhDYWxsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMkI5NjE3MkUwNEEzMDA3REJEQTUgLyogRlRMTGluay5o
IGluIEhlYWRlcnMgKi8sCkBAIC03NTYxLDEyICs3Mzc2LDEwIEBACiAJCQkJMEZDRUZBQUMxODA0
QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI1
RjFCMjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjI1RjFCNDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmggaW4g
SGVhZGVycyAqLywKLQkJCQkwRjlEMzM5QjE4MDNBREI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEExMjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMU3Rh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RkNDMjZEMTdBMEI2QUEwMDc4NkQxQSAvKiBGVExT
d2l0Y2hDYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFMjE3MTc4RTFDMDA2OTBDN0Yg
LyogRlRMVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEyMDE3MDhCMDA3MDBCQjcy
MkMgLyogRlRMVHlwZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjZCMUNDNjE4NjJD
NDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJD
Q0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYwMzMyQzYxOEI1M0ZBOTAwNUY5NzlBIC8qIEZUTFdlaWdodC5oIGluIEhl
YWRlcnMgKi8sCkBAIC03NjU0LDggKzc0NjcsNiBAQAogCQkJCTBGMEE3NTIzMUI5NEJGQTkwMDEx
MDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkM5MjEyMUI5NEQ0
REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZG
OEJERUIxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuaCBpbiBIZWFkZXJzICovLAot
CQkJCTBGQ0VGQUIwMTgwNUNBNkQwMDQ3MkNFNCAvKiBJbml0aWFsaXplTExWTS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMEZDRUZBQ0MxODA1RTc1NTAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZNUE9T
SVguaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDEwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBJbml0
aWFsaXplVGhyZWFkaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTEzRTVCODE4NUI4QkQzMDA3
RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MTRCMkMzMTg1
QTY4NDQwMEYzQzdDQiAvKiBJbmplY3RlZFNjcmlwdEJhc2UuaCBpbiBIZWFkZXJzICovLApAQCAt
NzkxOSwxMCArNzczMCw2IEBACiAJCQkJRkVEMjg3QjIxNUVDOUE1NzAwREE4MTYxIC8qIExMSW50
T3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBBNTE0QkE3RjhEMDBCRkUyNzIgLyog
TExJbnRTbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4MzlEMTRCQ0Y0NjYwMDg4
NUI0RiAvKiBMTEludFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEZDRUZBQ0UxODA1RTc1
NTAwNDcyQ0U0IC8qIExMVk1BUEkuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGQ0VGQUNGMTgwNUU3
NTUwMDQ3MkNFNCAvKiBMTFZNQVBJRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKLQkJCQlBN0U1
QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMEZDRUZBRDMxODA1RURDQzAwNDcyQ0U0IC8qIExMVk1IZWFkZXJzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDJFMzEzOTEzNEZGMEE2MDBBRkFEQjUgLyogTG9jYWwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0MkUzMTNBMTM0RkYwQTYwMEFGQURCNSAvKiBMb2NhbFNjb3BlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQzNzBFMTZGNUNEMDBCMzQ0NjAgLyogTG9va3VwLmggaW4gSGVh
ZGVycyAqLywKQEAgLTgyNzEsMjMgKzgwNzgsNiBAQAogCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDBG
OTMyNzU5MUMyMEJDQkEwMENGNjU2NCAvKiBkeW5iZW5jaCAqLzsKIAkJCXByb2R1Y3RUeXBlID0g
ImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUudG9vbCI7CiAJCX07Ci0JCTBGQ0VGQUI1MTgwNUQ2MTYw
MDQ3MkNFNCAvKiBsbHZtRm9ySlNDICovID0gewotCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0Owot
CQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDBGQ0VGQUI3MTgwNUQ2MTYwMDQ3MkNFNCAvKiBC
dWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAibGx2bUZvckpTQyIg
Ki87Ci0JCQlidWlsZFBoYXNlcyA9ICgKLQkJCQkwRkNFRkFCMjE4MDVENjE2MDA0NzJDRTQgLyog
U291cmNlcyAqLywKLQkJCQkwRkNFRkFCMzE4MDVENjE2MDA0NzJDRTQgLyogRnJhbWV3b3JrcyAq
LywKLQkJCQkwRkNFRkFCNDE4MDVENjE2MDA0NzJDRTQgLyogSGVhZGVycyAqLywKLQkJCSk7Ci0J
CQlidWlsZFJ1bGVzID0gKAotCQkJKTsKLQkJCWRlcGVuZGVuY2llcyA9ICgKLQkJCSk7Ci0JCQlu
YW1lID0gbGx2bUZvckpTQzsKLQkJCXByb2R1Y3ROYW1lID0gbGx2bUZvckpTQzsKLQkJCXByb2R1
Y3RSZWZlcmVuY2UgPSAwRkNFRkFCNjE4MDVENjE2MDA0NzJDRTQgLyogbGlibGx2bUZvckpTQy5k
eWxpYiAqLzsKLQkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFy
eS5keW5hbWljIjsKLQkJfTsKIAkJMEZFQzg1OTQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAq
LyA9IHsKIAkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxp
c3QgPSAwRkVDODVBODFCREI1Q0YxMDA4MEZGNzQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0
IGZvciBQQlhOYXRpdmVUYXJnZXQgInRlc3RiMyIgKi87CkBAIC04Mzg2LDcgKzgxNzYsNiBAQAog
CQkJCTM3MzI4MTFBMTdGQ0QyMzUwMDRBRDUxOSAvKiBQb3N0cHJvY2VzcyBIZWFkZXJzICovLAog
CQkJCTkzMkY1QjkxMDgyMkExQzcwMDczNjk3NSAvKiBTb3VyY2VzICovLAogCQkJCTkzMkY1QkQy
MDgyMkExQzcwMDczNjk3NSAvKiBGcmFtZXdvcmtzICovLAotCQkJCTBGQ0VGQUQ5MTgwNjE5MTgw
MDQ3MkNFNCAvKiBDb3B5IExMVk0gTGlicmFyeSBJbnRvIEZyYW1ld29yayAqLywKIAkJCQk1RDI5
RDhCRTBFOTg2MEI0MDBDM0QyRDAgLyogQ2hlY2sgRm9yIFdlYWsgVlRhYmxlcyBhbmQgRXh0ZXJu
YWxzICovLAogCQkJCTM3MTNGMDE0MTQyOTA1MjQwMDM2Mzg3RiAvKiBDaGVjayBGb3IgSW5hcHBy
b3ByaWF0ZSBPYmplY3RpdmUtQyBDbGFzcyBOYW1lcyAqLywKIAkJCQlBNTVERUFBNDE2NzAzREY3
MDAzREI4NDEgLyogQ2hlY2sgRm9yIEluYXBwcm9wcmlhdGUgTWFjcm9zIGluIEV4dGVybmFsIEhl
YWRlcnMgKi8sCkBAIC04Mzk1LDcgKzgxODQsNiBAQAogCQkJYnVpbGRSdWxlcyA9ICgKIAkJCSk7
CiAJCQlkZXBlbmRlbmNpZXMgPSAoCi0JCQkJMEZDRUZBQkQxODA1RDY2MzAwNDcyQ0U0IC8qIFBC
WFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJNjU3ODhBQUQxOEI0MEE3QjAwQzE4OUZGIC8qIFBC
WFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJNjVGQjNGN0UwOUQxMUVGMzAwRjQ5REVCIC8qIFBC
WFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkpOwpAQCAtODQ1MCw3ICs4MjM4LDYgQEAKIAkJCXRh
cmdldHMgPSAoCiAJCQkJOTMyRjVCRTMwODIyQTFDNzAwNzM2OTc1IC8qIEFsbCAqLywKIAkJCQk5
MzJGNUIzRTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUgKi8sCi0JCQkJMEZDRUZB
QjUxODA1RDYxNjAwNDcyQ0U0IC8qIGxsdm1Gb3JKU0MgKi8sCiAJCQkJMEY0NjgwQTkxNEJBN0ZE
OTAwQkZFMjcyIC8qIExMSW50IE9mZnNldHMgKi8sCiAJCQkJNjVGQjNGNjYwOUQxMUU5MTAwRjQ5
REVCIC8qIERlcml2ZWQgU291cmNlcyAqLywKIAkJCQkwRkY5MjJDMzE0RjQ2QjEzMDA0MUEyNEUg
LyogSlNDTExJbnRPZmZzZXRzRXh0cmFjdG9yICovLApAQCAtODQ5NCwyMSArODI4MSw2IEBACiAJ
CQlzaGVsbFBhdGggPSAvYmluL3NoOwogCQkJc2hlbGxTY3JpcHQgPSAic2V0IC1lXG5cbm1rZGly
IC1wIFwiJHtCVUlMVF9QUk9EVUNUU19ESVJ9L0xMSW50T2Zmc2V0cy9cIlxuXG4vdXNyL2Jpbi9l
bnYgcnVieSBcIiR7U1JDUk9PVH0vb2ZmbGluZWFzbS9nZW5lcmF0ZV9vZmZzZXRfZXh0cmFjdG9y
LnJiXCIgXCItSSR7QlVJTFRfUFJPRFVDVFNfRElSfS9EZXJpdmVkU291cmNlcy9KYXZhU2NyaXB0
Q29yZVwiIFwiJHtTUkNST09UfS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbVwiIFwiJHtC
VUlMVF9QUk9EVUNUU19ESVJ9L0xMSW50T2Zmc2V0cy9MTEludERlc2lyZWRPZmZzZXRzLmhcIiBc
Ilg4NixYODZfNjQsQVJNdjcsQVJNdjdzLEFSTTY0LENfTE9PUFwiXG4iOwogCQl9OwotCQkwRkNF
RkFEOTE4MDYxOTE4MDA0NzJDRTQgLyogQ29weSBMTFZNIExpYnJhcnkgSW50byBGcmFtZXdvcmsg
Ki8gPSB7Ci0JCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlv
bk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJaW5wdXRQYXRocyA9
ICgKLQkJCQkiJChCVUlMVF9QUk9EVUNUU19ESVIpL2xpYmxsdm1Gb3JKU0MuZHlsaWIiLAotCQkJ
KTsKLQkJCW5hbWUgPSAiQ29weSBMTFZNIExpYnJhcnkgSW50byBGcmFtZXdvcmsiOwotCQkJb3V0
cHV0UGF0aHMgPSAoCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7Ci0JCQlzaGVsbFBhdGggPSAvYmluL3NoOwotCQkJc2hlbGxTY3JpcHQgPSAic2V0IC1l
XG5cbmlmIFtbICRFTkFCTEVfRlRMX0pJVCAhPSBcIkVOQUJMRV9GVExfSklUXCIgXV1cbnRoZW5c
biAgICBleGl0IDBcbmZpXG5cbmlmIFtbICR7Q09ORklHVVJBVElPTjo9RGVidWd9ICE9IFwiUHJv
ZHVjdGlvblwiIF1dXG50aGVuXG4gICAgIyBDb3B5IHRoZSBsbHZtRm9ySlNDIGxpYnJhcnkgaW50
byB0aGUgZnJhbWV3b3JrLlxuICAgIGRpdHRvIFwiJHtCVUlMVF9QUk9EVUNUU19ESVJ9L2xpYmxs
dm1Gb3JKU0MuZHlsaWJcIiBcIiR7QlVJTFRfUFJPRFVDVFNfRElSfS8ke0NPTlRFTlRTX0ZPTERF
Ul9QQVRIfS9MaWJyYXJpZXMvbGlibGx2bUZvckpTQy5keWxpYlwiXG5maVxuXG5pZiBbWyAkUExB
VEZPUk1fTkFNRSAhPSBcIm1hY29zeFwiIF1dXG50aGVuXG4gICAgZXhpdCAwXG5maVxuXG5pZiBb
ICEgLWUgXCIke0JVSUxUX1BST0RVQ1RTX0RJUn0vJHtXUkFQUEVSX05BTUV9L0xpYnJhcmllc1wi
IF1cbnRoZW5cbiAgICBsbiAtZnMgXCJWZXJzaW9ucy9DdXJyZW50L0xpYnJhcmllc1wiIFwiJHtC
VUlMVF9QUk9EVUNUU19ESVJ9LyR7V1JBUFBFUl9OQU1FfS9MaWJyYXJpZXNcIlxuZmkiOwotCQl9
OwogCQkxQTAyRDlBODFCMzRBODgyMDAwRDE1MjIgLyogQWRkIFN5bWxpbmsgaW4gL1N5c3RlbS9M
aWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0gUEJYU2hlbGxTY3JpcHRC
dWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gODsKQEAgLTg3MTUsMTYgKzg0ODcsNiBA
QAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwotCQkwRkNFRkFCMjE4MDVENjE2MDA0NzJDRTQgLyogU291cmNlcyAqLyA9IHsKLQkJCWlzYSA9
IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsK
LQkJCWZpbGVzID0gKAotCQkJCTBGQ0VGQUQ3MTgwNjE3NDYwMDQ3MkNFNCAvKiBMTFZNQW5jaG9y
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGQ0VGQUMzMTgwNUU3NDAwMDQ3MkNFNCAvKiBMTFZN
RXhwb3J0cy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRkNFRkFDMTE4MDVEOTRFMDA0NzJDRTQg
LyogTExWTU92ZXJyaWRlcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKIAkJMEZFQzg1OTUxQkRCNUNGMTAw
ODBGRjc0IC8qIFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsK
IAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC05MDQ4LDcgKzg4MTAsNiBAQAog
CQkJCTBGQjE3NjYyMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYzQTFCRjkxQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2lu
Z1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDQ0ZCMThBNjAwNzAwMDFBMjdGOCAv
KiBERkdTYWZlcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkUxODdBMTkxQzBFMTNFMzAw
MzhCQkNBIC8qIEZUTENvbXBpbGVCaW5hcnlPcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVD
OUREMjEzMjhERjgyMDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODY4ODBGMUYxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4ODBGNEQxNDM1M0IyMTAwQjA4RDQyIC8qIERG
R1NwZWN1bGF0aXZlSklUNjQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MTEzLDEwICs4ODc0LDYg
QEAKIAkJCQkwRkVBMEEwOTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ2FwYWJpbGl0aWVzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGMzM4RTFCMUJGMjg2RUEwMDEzQzg4RiAvKiBCM0Jsb2NrSW5z
ZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTI3MTcwOTYyM0IwMEJCNzIy
QyAvKiBGVExDb21tb25WYWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEZFQTBBMEIxNzA1
MTNEQjAwQkI3MjJDIC8qIEZUTENvbXBpbGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEZFOTVG
NzkxOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTJBQzkyMkJCMThBMTYxODIwMDNDRTBGQiAvKiBGVExEV0FSRkRlYnVnTGluZUluZm8uY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJMEY5QzVFNUUxOEUzNUY1RTAwRDQzMUMzIC8qIEZUTERXQVJG
UmVnaXN0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRDMxNzE3OEUxQzAwNjkwQzdG
IC8qIEZUTEV4aXRBcmd1bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJENTE3MTc4
RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjJCOUNGNDE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MTI1LDE2ICs4ODgyLDExIEBACiAJCQkJMEYyMzVCREEx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
N0YyOTk2QjE3QTBCQjY3MDAxMDQxN0EgLyogRlRMRmFpbC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkQ4QTMxOTE3RDUxRjIyMDBDQTJDNDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTBGMjVGMUFGMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVD
YWNoZVNpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMjgxNzA5NjIzQjAwQkI3MjJD
IC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBB
MEQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY2QjhBRTIxQzRFRkUxNzAwOTY5MDUyIC8qIEIzQnJlYWtDcml0aWNhbEVkZ2VzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3OEE5NzgwMTc5NzM4RDUwMDlERjc0NCAvKiBGVExKSVRGaW5hbGl6
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEY2QjFDQjUxODVGQzlFOTAwODQ1RDk3IC8qIEZU
TEpTQ2FsbC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRkQxMjAyRjFBOEFFRDEyMDAwRjUyODAg
LyogRlRMSlNDYWxsQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjcyNUNBRjFDNTA2RDNC
MDBBRDk0M0EgLyogQjNGb2xkUGF0aENvbnN0YW50cy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkw
RkQxMjAzMzFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk2Mjc3NERBQTFCOEQ0QjE5MDAwNkYwNUEgLyogRlRMSlNUYWlsQ2FsbC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGRTE4N0EwRTFDMDMwRDY0MDAzOEJCQ0EgLyogSklURGl2R2Vu
ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjRGQjczMUJDODQzMTQwMDI1Q0E1QSAv
KiBGVExMYXp5U2xvd1BhdGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjJCOTUxNzJFMDRB
MDAwN0RCREE1IC8qIEZUTExpbmsuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MTUxLDExICs4OTAz
LDkgQEAKIAkJCQkwRjI1RjFCMTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzM4REYxMUJFOTNBRDEwMDEzQzg4RiAvKiBCM1N0YWNr
bWFwVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjlEMzM5QTE4
MDNBREI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQz
MTlEQTAzMUMxQkU0MEEwMDFEMjYwQiAvKiBCM0xvd2VyTWFjcm9zQWZ0ZXJPcHRpbWl6YXRpb25z
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTE2MTcwNkJCOTAwMEJCNzIyQyAvKiBGVExT
dGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJFMTE3MTc4RTFDMDA2OTBDN0YgLyog
RlRMVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGNkIxQ0M1MTg2MkM0NzgwMDg0NUQ5
NyAvKiBGVExVbndpbmRJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNUE2MjgzMTg4Qzk4
RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBODM2
Mzg5MThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0N0YzOUNCMTA3RUMzNzYwMDQyN0E0OCAvKiBGdW5jdGlvbkNvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTE4Niw5ICs4OTM2LDYgQEAKIAkJCQkwRjBBNzUy
MjFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRkM5MjExMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQkwRkNFRkFDQTE4MDVFNzU1MDA0NzJDRTQgLyogSW5pdGlh
bGl6ZUxMVk0uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOUVBNUM3QTIxOTBGMDg4NzAwNTA4RUJF
IC8qIEluaXRpYWxpemVMTFZNTWFjLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTlFNzI5NDA4MTkw
RjAyMUUwMDFBOTFCNSAvKiBJbml0aWFsaXplTExWTVBPU0lYLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTlFNzI5NDA3MTkwRjAxQTUwMDFBOTFCNSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE1MTNFNUI3MTg1QjhCRDMwMDdFOTVBRCAvKiBJbmplY3RlZFNj
cmlwdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTE0QjJDMjE4NUE2ODQ0MDBGM0M3Q0IgLyog
SW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTM0Niw3ICs5MDkzLDYg
QEAKIAkJCQkwRjJCNjZGRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MzRDNDU3RTFCQzcyNTQ5MDA3NDc2QTcgLyogSlNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCURFQTdFMjQ0MUJCQzY3NzIw
MEQ3ODQ0MCAvKiBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTc5REY2NkIwMUJGMjZBNTcwMDAxQ0YxMSAvKiBGVExFeGNlcHRpb25IYW5kbGVyTWFuYWdl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxQTE2N0JBQkVFMDA2RDc2MEEgLyogSlNW
YWx1ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0QkQ1QTMyMEEzRTkxRjYwMEJBRjU5QyAvKiBK
U1ZhbHVlUmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RTNDNjFDMTY3QkFCRUUwMDZENzYw
QSAvKiBKU1ZpcnR1YWxNYWNoaW5lLm1tIGluIFNvdXJjZXMgKi8sCkBAIC05MzcxLDggKzkxMTcs
NiBAQAogCQkJCTBGNDY4MEE4MTRCQTdGQUIwMEJGRTI3MiAvKiBMTEludEV4Y2VwdGlvbnMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwQTQxNEJBN0Y4RDAwQkZFMjcyIC8qIExMSW50U2xv
d1BhdGhzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMEI4MzlDMTRCQ0Y0NjMwMDg4NUI0RiAv
KiBMTEludFRodW5rcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRkNFRkFDRDE4MDVFNzU1MDA0
NzJDRTQgLyogTExWTUFQSS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBN0U1QUIzNzE3OTlFNEIy
MDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2
OURERTEwN0VDN0U3MDA2NTA0NDYgLyogTG9va3VwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
NDY4MENDMTRCQkIxN0EwMEJGRTI3MiAvKiBMb3dMZXZlbEludGVycHJldGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1QUI0OURDMUJFQzgwODIwMDcwMjBGQiAvKiBQZXJHbG9iYWxPYmplY3RX
cmFwcGVyV29ybGQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05NjExLDExICs5MzU1LDYgQEAKIAkJ
CXRhcmdldCA9IDBGOTMyNzRFMUMyMEJDQkEwMENGNjU2NCAvKiBkeW5iZW5jaCAqLzsKIAkJCXRh
cmdldFByb3h5ID0gMEY5MzI3NUMxQzIwQkYzQTAwQ0Y2NTY0IC8qIFBCWENvbnRhaW5lckl0ZW1Q
cm94eSAqLzsKIAkJfTsKLQkJMEZDRUZBQkQxODA1RDY2MzAwNDcyQ0U0IC8qIFBCWFRhcmdldERl
cGVuZGVuY3kgKi8gPSB7Ci0JCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwotCQkJdGFyZ2V0
ID0gMEZDRUZBQjUxODA1RDYxNjAwNDcyQ0U0IC8qIGxsdm1Gb3JKU0MgKi87Ci0JCQl0YXJnZXRQ
cm94eSA9IDBGQ0VGQUJDMTgwNUQ2NjMwMDQ3MkNFNCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkg
Ki87Ci0JCX07CiAJCTBGRUM4NUIxMUJEQjVEOEYwMDgwRkY3NCAvKiBQQlhUYXJnZXREZXBlbmRl
bmN5ICovID0gewogCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKIAkJCXRhcmdldCA9IDBG
RUM4NTk0MUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi87CkBAIC05NzgxLDM0ICs5NTIwLDYg
QEAKIAkJCX07CiAJCQluYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsKLQkJMEZDRUZBQjgxODA1RDYx
NjAwNDcyQ0U0IC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247
Ci0JCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDBGQ0VGQUJFMTgwNUQ4NjkwMDQ3MkNF
NCAvKiBMTFZNRm9ySlNDLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCX07
Ci0JCQluYW1lID0gRGVidWc7Ci0JCX07Ci0JCTBGQ0VGQUI5MTgwNUQ2MTYwMDQ3MkNFNCAvKiBS
ZWxlYXNlICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29u
ZmlndXJhdGlvblJlZmVyZW5jZSA9IDBGQ0VGQUJFMTgwNUQ4NjkwMDQ3MkNFNCAvKiBMTFZNRm9y
SlNDLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCX07Ci0JCQluYW1lID0g
UmVsZWFzZTsKLQkJfTsKLQkJMEZDRUZBQkExODA1RDYxNjAwNDcyQ0U0IC8qIFByb2ZpbGluZyAq
LyA9IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRp
b25SZWZlcmVuY2UgPSAwRkNFRkFCRTE4MDVEODY5MDA0NzJDRTQgLyogTExWTUZvckpTQy54Y2Nv
bmZpZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9IFByb2ZpbGlu
ZzsKLQkJfTsKLQkJMEZDRUZBQkIxODA1RDYxNjAwNDcyQ0U0IC8qIFByb2R1Y3Rpb24gKi8gPSB7
Ci0JCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVm
ZXJlbmNlID0gMEZDRUZBQkUxODA1RDg2OTAwNDcyQ0U0IC8qIExMVk1Gb3JKU0MueGNjb25maWcg
Ki87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJfTsKLQkJCW5hbWUgPSBQcm9kdWN0aW9uOwot
CQl9OwogCQkwRkVDODVBOTFCREI1Q0YxMDA4MEZGNzQgLyogRGVidWcgKi8gPSB7CiAJCQlpc2Eg
PSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0g
QkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOwpA
QCAtMTAyMDQsMTcgKzk5MTUsNiBAQAogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUg
PSAwOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsKLQkJ
MEZDRUZBQjcxODA1RDYxNjAwNDcyQ0U0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3Ig
UEJYTmF0aXZlVGFyZ2V0ICJsbHZtRm9ySlNDIiAqLyA9IHsKLQkJCWlzYSA9IFhDQ29uZmlndXJh
dGlvbkxpc3Q7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAotCQkJCTBGQ0VGQUI4MTgwNUQ2
MTYwMDQ3MkNFNCAvKiBEZWJ1ZyAqLywKLQkJCQkwRkNFRkFCOTE4MDVENjE2MDA0NzJDRTQgLyog
UmVsZWFzZSAqLywKLQkJCQkwRkNFRkFCQTE4MDVENjE2MDA0NzJDRTQgLyogUHJvZmlsaW5nICov
LAotCQkJCTBGQ0VGQUJCMTgwNUQ2MTYwMDQ3MkNFNCAvKiBQcm9kdWN0aW9uICovLAotCQkJKTsK
LQkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKLQkJCWRlZmF1bHRDb25maWd1
cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247Ci0JCX07CiAJCTBGRUM4NUE4MUJEQjVDRjEwMDgwRkY3
NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidGVzdGIz
IiAqLyA9IHsKIAkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CiAJCQlidWlsZENvbmZpZ3Vy
YXRpb25zID0gKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZp
c2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OSw3ICs4OSw2IEBACiAjaW5jbHVkZSAiRlRMTGluay5oIgogI2lu
Y2x1ZGUgIkZUTExvd2VyREZHVG9MTFZNLmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKLSNpbmNs
dWRlICJJbml0aWFsaXplTExWTS5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKQEAgLTIyNSw3ICsyMjQsNyBAQCB2b2lkIFBsYW46OmNvbXBpbGVJblRocmVhZChM
b25nTGl2ZWRTdGF0CiAgICAgICAgIH0KICAgICAgICAgZGF0YUxvZygiT3B0aW1pemVkICIsIGNv
ZGVCbG9ja05hbWUsICIgdXNpbmcgIiwgbW9kZSwgIiB3aXRoICIsIHBhdGhOYW1lLCAiIGludG8g
IiwgZmluYWxpemVyID8gZmluYWxpemVyLT5jb2RlU2l6ZSgpIDogMCwgIiBieXRlcyBpbiAiLCBh
ZnRlciAtIGJlZm9yZSwgIiBtcyIpOwogICAgICAgICBpZiAocGF0aCA9PSBGVExQYXRoKQotICAg
ICAgICAgICAgZGF0YUxvZygiIChERkc6ICIsIG1fdGltZUJlZm9yZUZUTCAtIGJlZm9yZSwgIiwg
TExWTTogIiwgYWZ0ZXIgLSBtX3RpbWVCZWZvcmVGVEwsICIpIik7CisgICAgICAgICAgICBkYXRh
TG9nKCIgKERGRzogIiwgbV90aW1lQmVmb3JlRlRMIC0gYmVmb3JlLCAiLCBCMzogIiwgYWZ0ZXIg
LSBtX3RpbWVCZWZvcmVGVEwsICIpIik7CiAgICAgICAgIGRhdGFMb2coIi5cbiIpOwogICAgIH0K
IH0KQEAgLTQ0MCw3ICs0MzksNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGls
ZUluVGhyCiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VNb3ZIaW50UmVtb3ZhbCgpKQogICAgICAg
ICAgICAgcGVyZm9ybU1vdkhpbnRSZW1vdmFsKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DbGVhblVw
KGRmZyk7Ci0gICAgICAgIHBlcmZvcm1EQ0UoZGZnKTsgLy8gV2UgcmVseSBvbiB0aGlzIHRvIGtp
bGwgZGVhZCBjb2RlIHRoYXQgd29uJ3QgYmUgcmVjb2duaXplZCBhcyBkZWFkIGJ5IExMVk0uCisg
ICAgICAgIHBlcmZvcm1EQ0UoZGZnKTsgLy8gV2UgcmVseSBvbiB0aGlzIHRvIGtpbGwgZGVhZCBj
b2RlIHRoYXQgd29uJ3QgYmUgcmVjb2duaXplZCBhcyBkZWFkIGJ5IEIzLgogICAgICAgICBpZiAo
T3B0aW9uczo6dXNlQ29weUJhcnJpZXJPcHRpbWl6YXRpb24oKSkKICAgICAgICAgICAgIHBlcmZv
cm1Db3B5QmFycmllck9wdGltaXphdGlvbihkZmcpOwogICAgICAgICBwZXJmb3JtU3RhY2tMYXlv
dXQoZGZnKTsKQEAgLTQ1NCwzMSArNDUzLDE1IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFu
Ojpjb21waWxlSW5UaHIKICAgICAgICAgfQogCiAgICAgICAgIGR1bXBBbmRWZXJpZnlHcmFwaChk
ZmcsICJHcmFwaCBqdXN0IGJlZm9yZSBGVEwgbG93ZXJpbmc6Iiwgc2hvdWxkRHVtcERpc2Fzc2Vt
Ymx5KG1vZGUpKTsKLSAgICAgICAgCi0jaWYgSEFWRShMTFZNKSAmJiAhRlRMX1VTRVNfQjMKLSAg
ICAgICAgYm9vbCBoYXZlTExWTTsKLSNlbmRpZgorCisgICAgICAgIC8vIEZsYXNoIGEgc2FmZXBv
aW50IGluIGNhc2UgdGhlIEdDIHdhbnRzIHNvbWUgYWN0aW9uLgogICAgICAgICBTYWZlcG9pbnQ6
OlJlc3VsdCBzYWZlcG9pbnRSZXN1bHQ7CiAgICAgICAgIHsKICAgICAgICAgICAgIEdyYXBoU2Fm
ZXBvaW50IHNhZmVwb2ludChkZmcsIHNhZmVwb2ludFJlc3VsdCk7Ci0jaWYgSEFWRShMTFZNKSAm
JiAhRlRMX1VTRVNfQjMKLSAgICAgICAgICAgIGhhdmVMTFZNID0gaW5pdGlhbGl6ZUxMVk0oKTsK
LSNlbmRpZgogICAgICAgICB9CiAgICAgICAgIGlmIChzYWZlcG9pbnRSZXN1bHQuZGlkR2V0Q2Fu
Y2VsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gQ2FuY2VsUGF0aDsKIAotI2lmIEhBVkUoTExW
TSkgJiYgIUZUTF9VU0VTX0IzCi0gICAgICAgIGlmICghaGF2ZUxMVk0pIHsKLSAgICAgICAgICAg
IGlmIChPcHRpb25zOjpmdGxDcmFzaGVzSWZDYW50SW5pdGlhbGl6ZUxMVk0oKSkgewotICAgICAg
ICAgICAgICAgIGRhdGFMb2coIkxMVk0gY2FuJ3QgYmUgaW5pdGlhbGl6ZWQuXG4iKTsKLSAgICAg
ICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmluYWxpemVy
ID0gc3RkOjptYWtlX3VuaXF1ZTxGYWlsZWRGaW5hbGl6ZXI+KCp0aGlzKTsKLSAgICAgICAgICAg
IHJldHVybiBGYWlsUGF0aDsKLSAgICAgICAgfQotI2VuZGlmCi0KICAgICAgICAgRlRMOjpTdGF0
ZSBzdGF0ZShkZmcpOwogICAgICAgICBGVEw6Omxvd2VyREZHVG9MTFZNKHN0YXRlKTsKICAgICAg
ICAgCkBAIC01MDQsMTMgKzQ4Nyw2IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21w
aWxlSW5UaHIKICAgICAgICAgICAgIHJldHVybiBGVExQYXRoOwogICAgICAgICB9CiAKLSNpZiAh
RlRMX1VTRVNfQjMKLSAgICAgICAgaWYgKHN0YXRlLmppdENvZGUtPnN0YWNrbWFwcy5zdGFja1Np
emUoKSA+IE9wdGlvbnM6Omxsdm1NYXhTdGFja1NpemUoKSkgewotICAgICAgICAgICAgRlRMOjpm
YWlsKHN0YXRlKTsKLSAgICAgICAgICAgIHJldHVybiBGVExQYXRoOwotICAgICAgICB9Ci0jZW5k
aWYKLQogICAgICAgICBGVEw6Omxpbmsoc3RhdGUpOwogICAgICAgICAKICAgICAgICAgaWYgKHN0
YXRlLmFsbG9jYXRpb25GYWlsZWQpIHsKQEAgLTY5MCw3ICs2NjYsNyBAQCBIYXNoTWFwPENTdHJp
bmcsIGRvdWJsZT4gUGxhbjo6Y29tcGlsZVRpCiAgICAgICAgIHJlc3VsdC5hZGQoIkRGRyBDb21w
aWxlIFRpbWUiLCB0b3RhbERGR0NvbXBpbGVUaW1lKTsKICAgICAgICAgcmVzdWx0LmFkZCgiRlRM
IENvbXBpbGUgVGltZSIsIHRvdGFsRlRMQ29tcGlsZVRpbWUpOwogICAgICAgICByZXN1bHQuYWRk
KCJGVEwgKERGRykgQ29tcGlsZSBUaW1lIiwgdG90YWxGVExERkdDb21waWxlVGltZSk7Ci0gICAg
ICAgIHJlc3VsdC5hZGQoIkZUTCAoTExWTSkgQ29tcGlsZSBUaW1lIiwgdG90YWxGVExMTFZNQ29t
cGlsZVRpbWUpOworICAgICAgICByZXN1bHQuYWRkKCJGVEwgKEIzKSBDb21waWxlIFRpbWUiLCB0
b3RhbEZUTExMVk1Db21waWxlVGltZSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTTY0RGlzYXNzZW1ibGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FS
TTY0RGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWJvb2wgdHJ5VG9EaXNhc3Nl
bWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGNvZGVQdHIsIHNpemVfdCBzaXplLCBj
b25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQsIEluc3RydWN0aW9uU3Vic2V0SGlu
dCkKK2Jvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGNv
ZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQp
CiB7CiAgICAgQTY0RE9wY29kZSBhcm02NE9wY29kZTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk12N0Rpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk12N0Rpc2Fzc2VtYmxlci5jcHAJ
KHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIv
QVJNdjdEaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCi1ib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQ
cmludFN0cmVhbSYgb3V0LCBJbnN0cnVjdGlvblN1YnNldEhpbnQpCitib29sIHRyeVRvRGlzYXNz
ZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwg
Y29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQogewogICAgIEFSTXY3RE9wY29k
ZSBhcm1PcGNvZGU7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIv
RGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlz
YXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzcsOSArMzcsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBkaXNhc3NlbWJs
ZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25z
dCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQsIEluc3RydWN0aW9uU3Vic2V0SGludCBz
dWJzZXRIaW50KQordm9pZCBkaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIm
IGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBv
dXQpCiB7Ci0gICAgaWYgKHRyeVRvRGlzYXNzZW1ibGUoY29kZVB0ciwgc2l6ZSwgcHJlZml4LCBv
dXQsIHN1YnNldEhpbnQpKQorICAgIGlmICh0cnlUb0Rpc2Fzc2VtYmxlKGNvZGVQdHIsIHNpemUs
IHByZWZpeCwgb3V0KSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIG91dC5wcmludGYoIiVz
ZGlzYXNzZW1ibHkgbm90IGF2YWlsYWJsZSBmb3IgcmFuZ2UgJXAuLi4lcFxuIiwgcHJlZml4LCBj
b2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHN0YXRpY19jYXN0PGNoYXIqPihjb2RlUHRyLmV4
ZWN1dGFibGVBZGRyZXNzKCkpICsgc2l6ZSk7CkBAIC02Nyw3ICs2Nyw2IEBAIHB1YmxpYzoKICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZjsKICAgICBzaXplX3Qgc2l6ZSB7IDAgfTsK
ICAgICBjb25zdCBjaGFyKiBwcmVmaXggeyBudWxscHRyIH07Ci0gICAgSW5zdHJ1Y3Rpb25TdWJz
ZXRIaW50IHN1YnNldEhpbnQgeyBNYWNyb0Fzc2VtYmxlclN1YnNldCB9OwogfTsKIAogY2xhc3Mg
QXN5bmNocm9ub3VzRGlzYXNzZW1ibGVyIHsKQEAgLTEzMSwxNSArMTMwLDEzIEBAIEFzeW5jaHJv
bm91c0Rpc2Fzc2VtYmxlciYgYXN5bmNocm9ub3VzRGkKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFj
ZQogCiB2b2lkIGRpc2Fzc2VtYmxlQXN5bmNocm9ub3VzbHkoCi0gICAgY29uc3QgQ1N0cmluZyYg
aGVhZGVyLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGVSZWYsIHNpemVfdCBzaXpl
LCBjb25zdCBjaGFyKiBwcmVmaXgsCi0gICAgSW5zdHJ1Y3Rpb25TdWJzZXRIaW50IHN1YnNldEhp
bnQpCisgICAgY29uc3QgQ1N0cmluZyYgaGVhZGVyLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYmIGNvZGVSZWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgpCiB7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPERpc2Fzc2VtYmx5VGFzaz4gdGFzayA9IHN0ZDo6bWFrZV91bmlxdWU8RGlz
YXNzZW1ibHlUYXNrPigpOwogICAgIHRhc2stPmhlYWRlciA9IHN0cmR1cChoZWFkZXIuZGF0YSgp
KTsgLy8gWXVjayEgV2UgbmVlZCB0aGlzIGJlY2F1c2UgQ1N0cmluZyBkb2VzIHJhY3kgcmVmY291
bnRpbmcuCiAgICAgdGFzay0+Y29kZVJlZiA9IGNvZGVSZWY7CiAgICAgdGFzay0+c2l6ZSA9IHNp
emU7CiAgICAgdGFzay0+cHJlZml4ID0gcHJlZml4OwotICAgIHRhc2stPnN1YnNldEhpbnQgPSBz
dWJzZXRIaW50OwogICAgIAogICAgIGFzeW5jaHJvbm91c0Rpc2Fzc2VtYmxlcigpLmVucXVldWUo
V1RGTW92ZSh0YXNrKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1i
bGVyL0Rpc2Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
aXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmgJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDEyICszNiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjsKIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKIAotZW51bSBJbnN0cnVjdGlv
blN1YnNldEhpbnQgeyBNYWNyb0Fzc2VtYmxlclN1YnNldCwgTExWTVN1YnNldCB9OwotCiAjaWYg
RU5BQkxFKERJU0FTU0VNQkxFUikKLWJvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHImLCBzaXplX3QsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0m
LCBJbnN0cnVjdGlvblN1YnNldEhpbnQgPSBNYWNyb0Fzc2VtYmxlclN1YnNldCk7Citib29sIHRy
eVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiwgc2l6ZV90LCBjb25z
dCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJik7CiAjZWxzZQotaW5saW5lIGJvb2wgdHJ5VG9E
aXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImLCBzaXplX3QsIGNvbnN0IGNo
YXIqLCBQcmludFN0cmVhbSYsIEluc3RydWN0aW9uU3Vic2V0SGludCA9IE1hY3JvQXNzZW1ibGVy
U3Vic2V0KQoraW5saW5lIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHImLCBzaXplX3QsIGNvbnN0IGNoYXIqLCBQcmludFN0cmVhbSYpCiB7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQpAQCAtNDksMTMgKzQ3LDEyIEBAIGlubGluZSBib29sIHRyeVRvRGlzYXNz
ZW1ibGUoY29uc3QgTWFjcm8KIAogLy8gUHJpbnRzIGVpdGhlciB0aGUgZGlzYXNzZW1ibHksIG9y
IGEgbGluZSBvZiB0ZXh0IGluZGljYXRpbmcgdGhhdCBkaXNhc3NlbWJseSBmYWlsZWQgYW5kCiAv
LyB0aGUgcmFuZ2Ugb2YgbWFjaGluZSBjb2RlIGFkZHJlc3Nlcy4KLXZvaWQgZGlzYXNzZW1ibGUo
Y29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiwgc2l6ZV90LCBjb25zdCBjaGFyKiBwcmVmaXgs
IFByaW50U3RyZWFtJiBvdXQsIEluc3RydWN0aW9uU3Vic2V0SGludCA9IE1hY3JvQXNzZW1ibGVy
U3Vic2V0KTsKK3ZvaWQgZGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiwg
c2l6ZV90LCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpOwogCiAvLyBBc3lu
Y2hyb25vdXMgZGlzYXNzZW1ibHkuIFRoaXMgaGFwcGVucyBvbiBhbm90aGVyIHRocmVhZCwgYW5k
IGNhbGxzIHRoZSBwcm92aWRlZAogLy8gY2FsbGJhY2sgd2hlbiB0aGUgZGlzYXNzZW1ibHkgaXMg
ZG9uZS4KIHZvaWQgZGlzYXNzZW1ibGVBc3luY2hyb25vdXNseSgKLSAgICBjb25zdCBDU3RyaW5n
JiBoZWFkZXIsIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIHNpemVfdCwgY29uc3QgY2hh
ciogcHJlZml4LAotICAgIEluc3RydWN0aW9uU3Vic2V0SGludCA9IE1hY3JvQXNzZW1ibGVyU3Vi
c2V0KTsKKyAgICBjb25zdCBDU3RyaW5nJiBoZWFkZXIsIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiYsIHNpemVfdCwgY29uc3QgY2hhciogcHJlZml4KTsKIAogSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCB3YWl0Rm9yQXN5bmNocm9ub3VzRGlzYXNzZW1ibHkoKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9MTFZNRGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIu
Y3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1i
bGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzMyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJMTFZNRGlzYXNzZW1ibGVyLmgiCi0KLSNpZiBVU0UoTExW
TV9ESVNBU1NFTUJMRVIpCi0KLSNpbmNsdWRlICJJbml0aWFsaXplTExWTS5oIgotI2luY2x1ZGUg
IkxMVk1BUEkuaCIKLSNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKLQotbmFtZXNw
YWNlIEpTQyB7Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzeW1ib2xTdHJpbmdTaXplID0gNDA7
Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpzeW1ib2xMb29rdXBDYWxsYmFjaygKLSAgICB2b2lkKiBv
cGFxdWUsIHVpbnQ2NF90IHJlZmVyZW5jZVZhbHVlLCB1aW50NjRfdCogcmVmZXJlbmNlVHlwZSwg
dWludDY0X3QgcmVmZXJlbmNlUEMsCi0gICAgY29uc3QgY2hhcioqIHJlZmVyZW5jZU5hbWUpCi17
Ci0gICAgLy8gU2V0IHRoaXMgaWYgeW91IHdhbnQgdG8gZGVidWcgYW4gdW5leHBlY3RlZCByZWZl
cmVuY2UgdHlwZS4gQ3VycmVudGx5IHdlIG9ubHkgZW5jb3VudGVyIHRoZXNlCi0gICAgLy8gaWYg
d2UgdHJ5IHRvIGRpc2Fzc2VtYmxlIGdhcmJhZ2UsIHNpbmNlIG91ciBjb2RlIGdlbmVyYXRvciBu
ZXZlciB1c2VzIHRoZW0uIFRoZXNlIGluY2x1ZGUgdGhpbmdzCi0gICAgLy8gbGlrZSBQQy1yZWxh
dGl2ZSByZWZlcmVuY2VzLgotICAgIHN0YXRpYyBjb25zdCBib29sIGNyYXNoT25VbmV4cGVjdGVk
ID0gZmFsc2U7Ci0gICAgCi0gICAgY2hhciogc3ltYm9sU3RyaW5nID0gc3RhdGljX2Nhc3Q8Y2hh
cio+KG9wYXF1ZSk7Ci0gICAgCi0gICAgc3dpdGNoICgqcmVmZXJlbmNlVHlwZSkgewotICAgIGNh
c2UgTExWTURpc2Fzc2VtYmxlcl9SZWZlcmVuY2VUeXBlX0luT3V0X05vbmU6Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIGNhc2UgTExWTURpc2Fzc2VtYmxlcl9SZWZlcmVuY2VUeXBlX0luX0JyYW5j
aDoKLSAgICAgICAgKnJlZmVyZW5jZU5hbWUgPSAwOwotICAgICAgICAqcmVmZXJlbmNlVHlwZSA9
IExMVk1EaXNhc3NlbWJsZXJfUmVmZXJlbmNlVHlwZV9Jbk91dF9Ob25lOwotICAgICAgICBzbnBy
aW50ZigKLSAgICAgICAgICAgIHN5bWJvbFN0cmluZywgc3ltYm9sU3RyaW5nU2l6ZSwgIjB4JWx4
IiwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KHJlZmVyZW5jZVZhbHVl
KSk7Ci0gICAgICAgIHJldHVybiBzeW1ib2xTdHJpbmc7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
aWYgKGNyYXNoT25VbmV4cGVjdGVkKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCJyZWZlcmVuY2VW
YWx1ZSA9ICIsIHJlZmVyZW5jZVZhbHVlLCAiXG4iKTsKLSAgICAgICAgICAgIGRhdGFMb2coInJl
ZmVyZW5jZVR5cGUgPSAiLCBSYXdQb2ludGVyKHJlZmVyZW5jZVR5cGUpLCAiLCAqcmVmZXJlbmNl
VHlwZSA9ICIsICpyZWZlcmVuY2VUeXBlLCAiXG4iKTsKLSAgICAgICAgICAgIGRhdGFMb2coInJl
ZmVyZW5jZVBDID0gIiwgcmVmZXJlbmNlUEMsICJcbiIpOwotICAgICAgICAgICAgZGF0YUxvZygi
cmVmZXJlbmNlTmFtZSA9ICIsIFJhd1BvaW50ZXIocmVmZXJlbmNlTmFtZSksICJcbiIpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICAqcmVmZXJlbmNlTmFtZSA9ICJ1bmltcGxlbWVudGVk
IHJlZmVyZW5jZSB0eXBlISI7Ci0gICAgICAgICpyZWZlcmVuY2VUeXBlID0gTExWTURpc2Fzc2Vt
Ymxlcl9SZWZlcmVuY2VUeXBlX0luT3V0X05vbmU7Ci0gICAgICAgIHNucHJpbnRmKAotICAgICAg
ICAgICAgc3ltYm9sU3RyaW5nLCBzeW1ib2xTdHJpbmdTaXplLCAidW5pbXBsZW1lbnRlZDoweCVs
eCIsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihyZWZlcmVuY2VWYWx1
ZSkpOwotICAgICAgICByZXR1cm4gc3ltYm9sU3RyaW5nOwotICAgIH0KLX0KLQotYm9vbCB0cnlU
b0Rpc2Fzc2VtYmxlV2l0aExMVk0oCi0gICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBj
b2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0
LAotICAgIEluc3RydWN0aW9uU3Vic2V0SGludCkKLXsKLSAgICBpbml0aWFsaXplTExWTSgpOwot
ICAgIAotICAgIGNvbnN0IGNoYXIqIHRyaXBsZTsKLSNpZiBDUFUoWDg2XzY0KQotICAgIHRyaXBs
ZSA9ICJ4ODZfNjQtYXBwbGUtZGFyd2luIjsKLSNlbGlmIENQVShYODYpCi0gICAgdHJpcGxlID0g
Ing4Ni1hcHBsZS1kYXJ3aW4iOwotI2VsaWYgQ1BVKEFSTTY0KQotICAgIHRyaXBsZSA9ICJhcm02
NC1hcHBsZS1kYXJ3aW4iOwotI2Vsc2UKLSNlcnJvciAiTExWTSBkaXNhc3NlbWJsZXIgY3VycmVu
dGx5IG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBDUFUuIgotI2VuZGlmCi0KLSAgICBjaGFyIHN5bWJv
bFN0cmluZ1tzeW1ib2xTdHJpbmdTaXplXTsKLSAgICAKLSAgICBMTFZNRGlzYXNtQ29udGV4dFJl
ZiBkaXNhc3NlbWJseUNvbnRleHQgPQotICAgICAgICBsbHZtLT5DcmVhdGVEaXNhc20odHJpcGxl
LCBzeW1ib2xTdHJpbmcsIDAsIDAsIHN5bWJvbExvb2t1cENhbGxiYWNrKTsKLSAgICBSRUxFQVNF
X0FTU0VSVChkaXNhc3NlbWJseUNvbnRleHQpOwotICAgIAotICAgIGNoYXIgcGNTdHJpbmdbMjBd
OwotICAgIGNoYXIgaW5zdHJ1Y3Rpb25TdHJpbmdbMTAwMF07Ci0gICAgCi0gICAgdWludDhfdCog
cGMgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKTsK
LSAgICB1aW50OF90KiBlbmQgPSBwYyArIHNpemU7Ci0gICAgCi0gICAgd2hpbGUgKHBjIDwgZW5k
KSB7Ci0gICAgICAgIHNucHJpbnRmKAotICAgICAgICAgICAgcGNTdHJpbmcsIHNpemVvZihwY1N0
cmluZyksICIweCVseCIsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihi
aXR3aXNlX2Nhc3Q8dWludHB0cl90PihwYykpKTsKLQotICAgICAgICBzaXplX3QgaW5zdHJ1Y3Rp
b25TaXplID0gbGx2bS0+RGlzYXNtSW5zdHJ1Y3Rpb24oCi0gICAgICAgICAgICBkaXNhc3NlbWJs
eUNvbnRleHQsIHBjLCBlbmQgLSBwYywgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocGMpLAotICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb25TdHJpbmcsIHNpemVvZihpbnN0cnVjdGlvblN0cmluZykpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKCFpbnN0cnVjdGlvblNpemUpCi0gICAgICAgICAgICBzbnBy
aW50ZihpbnN0cnVjdGlvblN0cmluZywgc2l6ZW9mKGluc3RydWN0aW9uU3RyaW5nKSwgIi5ieXRl
IDB4JTAyeCIsICpwYysrKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcGMgKz0gaW5zdHJ1
Y3Rpb25TaXplOwotICAgICAgICAKLSAgICAgICAgb3V0LnByaW50ZigiJXMlMTZzOiAlc1xuIiwg
cHJlZml4LCBwY1N0cmluZywgaW5zdHJ1Y3Rpb25TdHJpbmcpOwotICAgIH0KLSAgICAKLSAgICBs
bHZtLT5EaXNhc21EaXNwb3NlKGRpc2Fzc2VtYmx5Q29udGV4dCk7Ci0gICAgCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gVVNFKExMVk1fRElT
QVNTRU1CTEVSKQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0xM
Vk1EaXNhc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlz
YXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuaAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9MTFZNRGlzYXNzZW1ibGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaWZuZGVmIExMVk1EaXNhc3NlbWJsZXJfaAotI2RlZmluZSBMTFZNRGlz
YXNzZW1ibGVyX2gKLQotI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgotCi1uYW1lc3BhY2UgSlND
IHsKLQotI2lmIFVTRShMTFZNX0RJU0FTU0VNQkxFUikKLQotYm9vbCB0cnlUb0Rpc2Fzc2VtYmxl
V2l0aExMVk0oY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6
ZSwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0LCBJbnN0cnVjdGlvblN1YnNl
dEhpbnQpOwotCi0jZWxzZSAvLyBVU0UoTExWTV9ESVNBU1NFTUJMRVIpCi0KLWlubGluZSBib29s
IHRyeVRvRGlzYXNzZW1ibGVXaXRoTExWTShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImLCBz
aXplX3QsIGNvbnN0IGNoYXIqLCBQcmludFN0cmVhbSYsIEluc3RydWN0aW9uU3Vic2V0SGludCkg
eyByZXR1cm4gZmFsc2U7IH0KLQotI2VuZGlmIC8vIFVTRShMTFZNX0RJU0FTU0VNQkxFUikKLQot
fSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBMTFZNRGlzYXNzZW1ibGVyX2gKLQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9VRGlzODZEaXNhc3NlbWJsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvVURp
czg2RGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Rpc2Fzc2VtYmxlci9VRGlzODZEaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMyw3ICszMyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1ib29sIHRy
eVRvRGlzYXNzZW1ibGVXaXRoVURpczg2KGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgY29k
ZVB0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCwg
SW5zdHJ1Y3Rpb25TdWJzZXRIaW50KQorYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlV2l0aFVEaXM4Nihj
b25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBj
aGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCiB7CiAgICAgdWRfdCBkaXNhc3NlbWJsZXI7
CiAgICAgdWRfaW5pdCgmZGlzYXNzZW1ibGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kaXNhc3NlbWJsZXIvVURpczg2RGlzYXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9VRGlzODZEaXNhc3NlbWJsZXIuaAkocmV2aXNp
b24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9VRGlzODZE
aXNhc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTEgKzMyLDExIEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAjaWYgVVNFKFVESVM4NikKIAotYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlV2l0aFVE
aXM4Nihjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGNvZGVQdHIsIHNpemVfdCBzaXplLCBj
b25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQsIEluc3RydWN0aW9uU3Vic2V0SGlu
dCk7Citib29sIHRyeVRvRGlzYXNzZW1ibGVXaXRoVURpczg2KGNvbnN0IE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciYgY29kZVB0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRT
dHJlYW0mIG91dCk7CiAKICNlbHNlIC8vIFVTRShVRElTODYpCiAKLWlubGluZSBib29sIHRyeVRv
RGlzYXNzZW1ibGVXaXRoVURpczg2KGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYsIHNpemVf
dCwgY29uc3QgY2hhciosIFByaW50U3RyZWFtJiwgSW5zdHJ1Y3Rpb25TdWJzZXRIaW50KSB7IHJl
dHVybiBmYWxzZTsgfQoraW5saW5lIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZVdpdGhVRGlzODYoY29u
c3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiwgc2l6ZV90LCBjb25zdCBjaGFyKiwgUHJpbnRTdHJl
YW0mKSB7IHJldHVybiBmYWxzZTsgfQogCiAjZW5kaWYgLy8gVVNFKFVESVM4NikKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9YODZEaXNhc3NlbWJsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvWDg2RGlzYXNz
ZW1ibGVyLmNwcAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rp
c2Fzc2VtYmxlci9YODZEaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywyOSAr
NDMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIC8vIHdoZXRoZXIgaGUncyB1c2luZyB0aGUgc3Vic2V0
IG9mIHRoZSBhcmNoaXRlY3R1cmUgdGhhdCBvdXIgTWFjcm9Bc3NlbWJsZXIKIC8vIHN1cHBvcnRz
IChpbiB3aGljaCBjYXNlIHdlIGdvIHdpdGggVURpczg2KSBvciBpZiBoZSdzIHVzaW5nIHRoZSBM
TFZNIHN1YnNldC4KIAotYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciYgY29kZVB0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRT
dHJlYW0mIG91dCwgSW5zdHJ1Y3Rpb25TdWJzZXRIaW50IHN1YnNldEhpbnQpCitib29sIHRyeVRv
RGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qg
c2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQogewotICAgIGlmIChP
cHRpb25zOjpmb3JjZVVEaXM4NkRpc2Fzc2VtYmxlcigpKQotICAgICAgICByZXR1cm4gdHJ5VG9E
aXNhc3NlbWJsZVdpdGhVRGlzODYoY29kZVB0ciwgc2l6ZSwgcHJlZml4LCBvdXQsIHN1YnNldEhp
bnQpOwotCi0gICAgaWYgKE9wdGlvbnM6OmZvcmNlTExWTURpc2Fzc2VtYmxlcigpKQotICAgICAg
ICByZXR1cm4gdHJ5VG9EaXNhc3NlbWJsZVdpdGhMTFZNKGNvZGVQdHIsIHNpemUsIHByZWZpeCwg
b3V0LCBzdWJzZXRIaW50KTsKLSAgICAKLSAgICBpZiAoc3Vic2V0SGludCA9PSBNYWNyb0Fzc2Vt
YmxlclN1YnNldAotICAgICAgICAmJiB0cnlUb0Rpc2Fzc2VtYmxlV2l0aFVEaXM4Nihjb2RlUHRy
LCBzaXplLCBwcmVmaXgsIG91dCwgTWFjcm9Bc3NlbWJsZXJTdWJzZXQpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIGlmIChzdWJzZXRIaW50ID09IExMVk1TdWJzZXQKLSAgICAgICAgJiYg
dHJ5VG9EaXNhc3NlbWJsZVdpdGhMTFZNKGNvZGVQdHIsIHNpemUsIHByZWZpeCwgb3V0LCBMTFZN
U3Vic2V0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgaWYgKHRyeVRvRGlzYXNz
ZW1ibGVXaXRoVURpczg2KGNvZGVQdHIsIHNpemUsIHByZWZpeCwgb3V0LCBzdWJzZXRIaW50KSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHRyeVRvRGlzYXNzZW1ibGVXaXRoTExWTShj
b2RlUHRyLCBzaXplLCBwcmVmaXgsIG91dCwgc3Vic2V0SGludCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiB0cnlUb0Rpc2Fzc2VtYmxlV2l0aFVEaXM4Nihjb2RlUHRyLCBz
aXplLCBwcmVmaXgsIG91dCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRlZFR5cGVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRlZFR5cGVzLmgJKHJldmlzaW9u
IDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0ZWRUeXBl
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQp
CiAKICNpbmNsdWRlICJERkdDb21tb24uaCIKLSNpbmNsdWRlICJMTFZNSGVhZGVycy5oIgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIGNsYXNzIEJhc2ljQmxvY2s7CkBAIC00Mywx
NiArNDIsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiB0eXBlZGVmIEIzOjpC
YXNpY0Jsb2NrKiBMQmFzaWNCbG9jazsKIHR5cGVkZWYgQjM6OlR5cGUgTFR5cGU7CiB0eXBlZGVm
IEIzOjpWYWx1ZSogTFZhbHVlOwotCi10eXBlZGVmIHZvaWQqIExBdG9taWNPcmRlcmluZzsKLXR5
cGVkZWYgdm9pZCogTEJ1aWxkZXI7Ci10eXBlZGVmIHZvaWQqIExDYWxsQ29udjsKLXR5cGVkZWYg
dm9pZCogTENvbnRleHQ7Ci10eXBlZGVmIHZvaWQqIExJbnRQcmVkaWNhdGU7Ci10eXBlZGVmIHZv
aWQqIExMaW5rYWdlOwotdHlwZWRlZiB2b2lkKiBMTW9kdWxlOwotdHlwZWRlZiB2b2lkKiBMUmVh
bFByZWRpY2F0ZTsKLXR5cGVkZWYgdm9pZCogTE1lbW9yeUJ1ZmZlcjsKICNlbHNlCiB0eXBlZGVm
IExMVk1CYXNpY0Jsb2NrUmVmIExCYXNpY0Jsb2NrOwogdHlwZWRlZiBMTFZNVHlwZVJlZiBMVHlw
ZTsKQEAgLTY5LDggKzU4LDYgQEAgdHlwZWRlZiBMTFZNUmVhbFByZWRpY2F0ZSBMUmVhbFByZWRp
Y2F0ZQogdHlwZWRlZiBMTFZNTWVtb3J5QnVmZmVyUmVmIExNZW1vcnlCdWZmZXI7CiAjZW5kaWYK
IAotZW51bSBTeW5jaHJvbml6YXRpb25TY29wZSB7IFNpbmdsZVRocmVhZCwgQ3Jvc3NUaHJlYWQg
fTsKLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMu
aAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJy
ZXZpYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMzEzICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBGVExBYmJy
ZXZpYXRpb25zX2gKLSNkZWZpbmUgRlRMQWJicmV2aWF0aW9uc19oCi0KLSNpZiBFTkFCTEUoRlRM
X0pJVCkKLQotI2luY2x1ZGUgIkZUTEFiYnJldmlhdGVkVHlwZXMuaCIKLSNpbmNsdWRlICJGVExW
YWx1ZUZyb21CbG9jay5oIgotI2luY2x1ZGUgIkxMVk1BUEkuaCIKLSNpbmNsdWRlIDxjc3RyaW5n
PgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLSNpZiAhRlRMX1VTRVNfQjMK
LQotLy8gVGhpcyBmaWxlIGNvbnRhaW5zIHNob3J0LWZvcm0gY2FsbHMgaW50byB0aGUgTExWTSBD
IEFQSS4gSXQgaXMgbWVhbnQgdG8KLS8vIHNhdmUgdHlwaW5nIGFuZCBtYWtlIHRoZSBsb3dlcmlu
ZyBjb2RlIGNsZWFyZXIuIElmIHdlIGV2ZXIgY2FsbCBhbiBMTFZNIEMgQVBJCi0vLyBmdW5jdGlv
biBtb3JlIHRoYW4gb25jZSBpbiB0aGUgRlRMIGxvd2VyaW5nIGNvZGUsIHdlIHNob3VsZCBhZGQg
YSBzaG9ydGN1dCBmb3IKLS8vIGl0IGhlcmUuCi0KLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotI2Vy
cm9yICJUaGUgRlRMIGJhY2tlbmQgYXNzdW1lcyB0aGF0IHBvaW50ZXJzIGFyZSA2NC1iaXQuIgot
I2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgTFR5cGUgdm9pZFR5cGUoTENvbnRleHQgY29udGV4dCkg
eyByZXR1cm4gbGx2bS0+Vm9pZFR5cGVJbkNvbnRleHQoY29udGV4dCk7IH0KLXN0YXRpYyBpbmxp
bmUgTFR5cGUgaW50MVR5cGUoTENvbnRleHQgY29udGV4dCkgeyByZXR1cm4gbGx2bS0+SW50MVR5
cGVJbkNvbnRleHQoY29udGV4dCk7IH0KLXN0YXRpYyBpbmxpbmUgTFR5cGUgaW50OFR5cGUoTENv
bnRleHQgY29udGV4dCkgeyByZXR1cm4gbGx2bS0+SW50OFR5cGVJbkNvbnRleHQoY29udGV4dCk7
IH0KLXN0YXRpYyBpbmxpbmUgTFR5cGUgaW50MTZUeXBlKExDb250ZXh0IGNvbnRleHQpIHsgcmV0
dXJuIGxsdm0tPkludDE2VHlwZUluQ29udGV4dChjb250ZXh0KTsgfQotc3RhdGljIGlubGluZSBM
VHlwZSBpbnQzMlR5cGUoTENvbnRleHQgY29udGV4dCkgeyByZXR1cm4gbGx2bS0+SW50MzJUeXBl
SW5Db250ZXh0KGNvbnRleHQpOyB9Ci1zdGF0aWMgaW5saW5lIExUeXBlIGludDY0VHlwZShMQ29u
dGV4dCBjb250ZXh0KSB7IHJldHVybiBsbHZtLT5JbnQ2NFR5cGVJbkNvbnRleHQoY29udGV4dCk7
IH0KLXN0YXRpYyBpbmxpbmUgTFR5cGUgaW50UHRyVHlwZShMQ29udGV4dCBjb250ZXh0KSB7IHJl
dHVybiBsbHZtLT5JbnQ2NFR5cGVJbkNvbnRleHQoY29udGV4dCk7IH0KLXN0YXRpYyBpbmxpbmUg
TFR5cGUgZmxvYXRUeXBlKExDb250ZXh0IGNvbnRleHQpIHsgcmV0dXJuIGxsdm0tPkZsb2F0VHlw
ZUluQ29udGV4dChjb250ZXh0KTsgfQotc3RhdGljIGlubGluZSBMVHlwZSBkb3VibGVUeXBlKExD
b250ZXh0IGNvbnRleHQpIHsgcmV0dXJuIGxsdm0tPkRvdWJsZVR5cGVJbkNvbnRleHQoY29udGV4
dCk7IH0KLQotc3RhdGljIGlubGluZSBMVHlwZSBwb2ludGVyVHlwZShMVHlwZSB0eXBlKSB7IHJl
dHVybiBsbHZtLT5Qb2ludGVyVHlwZSh0eXBlLCAwKTsgfQotc3RhdGljIGlubGluZSBMVHlwZSBh
cnJheVR5cGUoTFR5cGUgdHlwZSwgdW5zaWduZWQgY291bnQpIHsgcmV0dXJuIGxsdm0tPkFycmF5
VHlwZSh0eXBlLCBjb3VudCk7IH0KLXN0YXRpYyBpbmxpbmUgTFR5cGUgdmVjdG9yVHlwZShMVHlw
ZSB0eXBlLCB1bnNpZ25lZCBjb3VudCkgeyByZXR1cm4gbGx2bS0+VmVjdG9yVHlwZSh0eXBlLCBj
b3VudCk7IH0KLQotZW51bSBQYWNraW5nTW9kZSB7IE5vdFBhY2tlZCwgUGFja2VkIH07Ci1zdGF0
aWMgaW5saW5lIExUeXBlIHN0cnVjdFR5cGUoTENvbnRleHQgY29udGV4dCwgTFR5cGUqIGVsZW1l
bnRUeXBlcywgdW5zaWduZWQgZWxlbWVudENvdW50LCBQYWNraW5nTW9kZSBwYWNraW5nID0gTm90
UGFja2VkKQotewotICAgIHJldHVybiBsbHZtLT5TdHJ1Y3RUeXBlSW5Db250ZXh0KGNvbnRleHQs
IGVsZW1lbnRUeXBlcywgZWxlbWVudENvdW50LCBwYWNraW5nID09IFBhY2tlZCk7Ci19Ci1zdGF0
aWMgaW5saW5lIExUeXBlIHN0cnVjdFR5cGUoTENvbnRleHQgY29udGV4dCwgUGFja2luZ01vZGUg
cGFja2luZyA9IE5vdFBhY2tlZCkKLXsKLSAgICByZXR1cm4gc3RydWN0VHlwZShjb250ZXh0LCAw
LCAwLCBwYWNraW5nKTsKLX0KLXN0YXRpYyBpbmxpbmUgTFR5cGUgc3RydWN0VHlwZShMQ29udGV4
dCBjb250ZXh0LCBMVHlwZSBlbGVtZW50MSwgUGFja2luZ01vZGUgcGFja2luZyA9IE5vdFBhY2tl
ZCkKLXsKLSAgICByZXR1cm4gc3RydWN0VHlwZShjb250ZXh0LCAmZWxlbWVudDEsIDEsIHBhY2tp
bmcpOwotfQotc3RhdGljIGlubGluZSBMVHlwZSBzdHJ1Y3RUeXBlKExDb250ZXh0IGNvbnRleHQs
IExUeXBlIGVsZW1lbnQxLCBMVHlwZSBlbGVtZW50MiwgUGFja2luZ01vZGUgcGFja2luZyA9IE5v
dFBhY2tlZCkKLXsKLSAgICBMVHlwZSBlbGVtZW50c1tdID0geyBlbGVtZW50MSwgZWxlbWVudDIg
fTsKLSAgICByZXR1cm4gc3RydWN0VHlwZShjb250ZXh0LCBlbGVtZW50cywgMiwgcGFja2luZyk7
Ci19Ci0KLS8vIEZJWE1FOiBNYWtlIHRoZSBWYXJpYWRpY2l0eSBhcmd1bWVudCBub3QgYmUgdGhl
IGxhc3QgYXJndW1lbnQgdG8gZnVuY3Rpb25UeXBlKCkgc28gdGhhdCB0aGlzIGZ1bmN0aW9uCi0v
LyBjYW4gdXNlIEMrKzExIHZhcmlhZGljIHRlbXBsYXRlcwotLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTU3NQotZW51bSBWYXJpYWRpY2l0eSB7IE5vdFZhcmlh
ZGljLCBWYXJpYWRpYyB9Owotc3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUg
cmV0dXJuVHlwZSwgY29uc3QgTFR5cGUqIHBhcmFtVHlwZXMsIHVuc2lnbmVkIHBhcmFtQ291bnQs
IFZhcmlhZGljaXR5IHZhcmlhZGljaXR5KQotewotICAgIHJldHVybiBsbHZtLT5GdW5jdGlvblR5
cGUocmV0dXJuVHlwZSwgY29uc3RfY2FzdDxMVHlwZSo+KHBhcmFtVHlwZXMpLCBwYXJhbUNvdW50
LCB2YXJpYWRpY2l0eSA9PSBWYXJpYWRpYyk7Ci19Ci10ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JU
eXBlPgotaW5saW5lIExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByZXR1cm5UeXBlLCBjb25zdCBW
ZWN0b3JUeXBlJiB2ZWN0b3IsIFZhcmlhZGljaXR5IHZhcmlhZGljaXR5ID0gTm90VmFyaWFkaWMp
Ci17Ci0gICAgcmV0dXJuIGZ1bmN0aW9uVHlwZShyZXR1cm5UeXBlLCB2ZWN0b3IuYmVnaW4oKSwg
dmVjdG9yLnNpemUoKSwgdmFyaWFkaWNpdHkpOwotfQotc3RhdGljIGlubGluZSBMVHlwZSBmdW5j
dGlvblR5cGUoTFR5cGUgcmV0dXJuVHlwZSwgVmFyaWFkaWNpdHkgdmFyaWFkaWNpdHkgPSBOb3RW
YXJpYWRpYykKLXsKLSAgICByZXR1cm4gZnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIDAsIDAsIHZh
cmlhZGljaXR5KTsKLX0KLXN0YXRpYyBpbmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBlKExUeXBlIHJl
dHVyblR5cGUsIExUeXBlIHBhcmFtMSwgVmFyaWFkaWNpdHkgdmFyaWFkaWNpdHkgPSBOb3RWYXJp
YWRpYykKLXsKLSAgICByZXR1cm4gZnVuY3Rpb25UeXBlKHJldHVyblR5cGUsICZwYXJhbTEsIDEs
IHZhcmlhZGljaXR5KTsKLX0KLXN0YXRpYyBpbmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBlKExUeXBl
IHJldHVyblR5cGUsIExUeXBlIHBhcmFtMSwgTFR5cGUgcGFyYW0yLCBWYXJpYWRpY2l0eSB2YXJp
YWRpY2l0eSA9IE5vdFZhcmlhZGljKQotewotICAgIExUeXBlIHBhcmFtVHlwZXNbXSA9IHsgcGFy
YW0xLCBwYXJhbTIgfTsKLSAgICByZXR1cm4gZnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHBhcmFt
VHlwZXMsIDIsIHZhcmlhZGljaXR5KTsKLX0KLXN0YXRpYyBpbmxpbmUgTFR5cGUgZnVuY3Rpb25U
eXBlKExUeXBlIHJldHVyblR5cGUsIExUeXBlIHBhcmFtMSwgTFR5cGUgcGFyYW0yLCBMVHlwZSBw
YXJhbTMsIFZhcmlhZGljaXR5IHZhcmlhZGljaXR5ID0gTm90VmFyaWFkaWMpCi17Ci0gICAgTFR5
cGUgcGFyYW1UeXBlc1tdID0geyBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zIH07Ci0gICAgcmV0dXJu
IGZ1bmN0aW9uVHlwZShyZXR1cm5UeXBlLCBwYXJhbVR5cGVzLCAzLCB2YXJpYWRpY2l0eSk7Ci19
Ci1zdGF0aWMgaW5saW5lIExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByZXR1cm5UeXBlLCBMVHlw
ZSBwYXJhbTEsIExUeXBlIHBhcmFtMiwgTFR5cGUgcGFyYW0zLCBMVHlwZSBwYXJhbTQsIFZhcmlh
ZGljaXR5IHZhcmlhZGljaXR5ID0gTm90VmFyaWFkaWMpCi17Ci0gICAgTFR5cGUgcGFyYW1UeXBl
c1tdID0geyBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQgfTsKLSAgICByZXR1cm4gZnVu
Y3Rpb25UeXBlKHJldHVyblR5cGUsIHBhcmFtVHlwZXMsIDQsIHZhcmlhZGljaXR5KTsKLX0KLXN0
YXRpYyBpbmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBlKExUeXBlIHJldHVyblR5cGUsIExUeXBlIHBh
cmFtMSwgTFR5cGUgcGFyYW0yLCBMVHlwZSBwYXJhbTMsIExUeXBlIHBhcmFtNCwgTFR5cGUgcGFy
YW01LCBWYXJpYWRpY2l0eSB2YXJpYWRpY2l0eSA9IE5vdFZhcmlhZGljKQotewotICAgIExUeXBl
IHBhcmFtVHlwZXNbXSA9IHsgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgcGFyYW00LCBwYXJhbTUg
fTsKLSAgICByZXR1cm4gZnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHBhcmFtVHlwZXMsIDUsIHZh
cmlhZGljaXR5KTsKLX0KLXN0YXRpYyBpbmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBlKExUeXBlIHJl
dHVyblR5cGUsIExUeXBlIHBhcmFtMSwgTFR5cGUgcGFyYW0yLCBMVHlwZSBwYXJhbTMsIExUeXBl
IHBhcmFtNCwgTFR5cGUgcGFyYW01LCBMVHlwZSBwYXJhbTYsIFZhcmlhZGljaXR5IHZhcmlhZGlj
aXR5ID0gTm90VmFyaWFkaWMpCi17Ci0gICAgTFR5cGUgcGFyYW1UeXBlc1tdID0geyBwYXJhbTEs
IHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQsIHBhcmFtNSwgcGFyYW02IH07Ci0gICAgcmV0dXJuIGZ1
bmN0aW9uVHlwZShyZXR1cm5UeXBlLCBwYXJhbVR5cGVzLCA2LCB2YXJpYWRpY2l0eSk7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbWRLaW5kSUQoTENvbnRleHQgY29udGV4dCwgY29uc3Qg
Y2hhciogc3RyaW5nKSB7IHJldHVybiBsbHZtLT5HZXRNREtpbmRJREluQ29udGV4dChjb250ZXh0
LCBzdHJpbmcsIHN0ZDo6c3RybGVuKHN0cmluZykpOyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBt
ZFN0cmluZyhMQ29udGV4dCBjb250ZXh0LCBjb25zdCBjaGFyKiBzdHJpbmcsIHVuc2lnbmVkIGxl
bmd0aCkgeyByZXR1cm4gbGx2bS0+TURTdHJpbmdJbkNvbnRleHQoY29udGV4dCwgc3RyaW5nLCBs
ZW5ndGgpOyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBtZFN0cmluZyhMQ29udGV4dCBjb250ZXh0
LCBjb25zdCBjaGFyKiBzdHJpbmcpIHsgcmV0dXJuIG1kU3RyaW5nKGNvbnRleHQsIHN0cmluZywg
c3RkOjpzdHJsZW4oc3RyaW5nKSk7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kTm9kZShMQ29u
dGV4dCBjb250ZXh0LCBMVmFsdWUqIGFyZ3MsIHVuc2lnbmVkIG51bUFyZ3MpIHsgcmV0dXJuIGxs
dm0tPk1ETm9kZUluQ29udGV4dChjb250ZXh0LCBhcmdzLCBudW1BcmdzKTsgfQotdGVtcGxhdGU8
dHlwZW5hbWUgVmVjdG9yVHlwZT4KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kTm9kZShMQ29udGV4
dCBjb250ZXh0LCBjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpIHsgcmV0dXJuIG1kTm9kZShjb250
ZXh0LCBjb25zdF9jYXN0PExWYWx1ZSo+KHZlY3Rvci5iZWdpbigpKSwgdmVjdG9yLnNpemUoKSk7
IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kTm9kZShMQ29udGV4dCBjb250ZXh0KSB7IHJldHVy
biBtZE5vZGUoY29udGV4dCwgMCwgMCk7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kTm9kZShM
Q29udGV4dCBjb250ZXh0LCBMVmFsdWUgYXJnMSkgeyByZXR1cm4gbWROb2RlKGNvbnRleHQsICZh
cmcxLCAxKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQs
IExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMikKLXsKLSAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcx
LCBhcmcyIH07Ci0gICAgcmV0dXJuIG1kTm9kZShjb250ZXh0LCBhcmdzLCAyKTsKLX0KLXN0YXRp
YyBpbmxpbmUgTFZhbHVlIG1kTm9kZShMQ29udGV4dCBjb250ZXh0LCBMVmFsdWUgYXJnMSwgTFZh
bHVlIGFyZzIsIExWYWx1ZSBhcmczKQotewotICAgIExWYWx1ZSBhcmdzW10gPSB7IGFyZzEsIGFy
ZzIsIGFyZzMgfTsKLSAgICByZXR1cm4gbWROb2RlKGNvbnRleHQsIGFyZ3MsIDMpOwotfQotCi1z
dGF0aWMgaW5saW5lIHZvaWQgc2V0TWV0YWRhdGEoTFZhbHVlIGluc3RydWN0aW9uLCB1bnNpZ25l
ZCBraW5kLCBMVmFsdWUgbWV0YWRhdGEpIHsgbGx2bS0+U2V0TWV0YWRhdGEoaW5zdHJ1Y3Rpb24s
IGtpbmQsIG1ldGFkYXRhKTsgfQotCi1zdGF0aWMgaW5saW5lIExWYWx1ZSBhZGRGdW5jdGlvbihM
TW9kdWxlIG1vZHVsZSwgY29uc3QgY2hhciogbmFtZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gbGx2
bS0+QWRkRnVuY3Rpb24obW9kdWxlLCBuYW1lLCB0eXBlKTsgfQotc3RhdGljIGlubGluZSBMVmFs
dWUgZ2V0Rmlyc3RGdW5jdGlvbihMTW9kdWxlIG1vZHVsZSkgeyByZXR1cm4gbGx2bS0+R2V0Rmly
c3RGdW5jdGlvbihtb2R1bGUpOyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBnZXROZXh0RnVuY3Rp
b24oTFZhbHVlIGZ1bmN0aW9uKSB7IHJldHVybiBsbHZtLT5HZXROZXh0RnVuY3Rpb24oZnVuY3Rp
b24pOyB9Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRGdW5jdGlvbkNhbGxpbmdDb252KExWYWx1
ZSBmdW5jdGlvbiwgTENhbGxDb252IGNvbnZlbnRpb24pIHsgbGx2bS0+U2V0RnVuY3Rpb25DYWxs
Q29udihmdW5jdGlvbiwgY29udmVudGlvbik7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRUYXJn
ZXREZXBlbmRlbnRGdW5jdGlvbkF0dHIoTFZhbHVlIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBrZXks
IGNvbnN0IGNoYXIqIHZhbHVlKSB7IGxsdm0tPkFkZFRhcmdldERlcGVuZGVudEZ1bmN0aW9uQXR0
cihmdW5jdGlvbiwga2V5LCB2YWx1ZSk7IH0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldExpbmth
Z2UoTFZhbHVlIGdsb2JhbCwgTExWTUxpbmthZ2UgbGlua2FnZSkgeyBsbHZtLT5TZXRMaW5rYWdl
KGdsb2JhbCwgbGlua2FnZSk7IH0KLQotc3RhdGljIGlubGluZSBMVmFsdWUgYWRkRXh0ZXJuRnVu
Y3Rpb24oTE1vZHVsZSBtb2R1bGUsIGNvbnN0IGNoYXIqIG5hbWUsIExUeXBlIHR5cGUpCi17Ci0g
ICAgTFZhbHVlIHJlc3VsdCA9IGFkZEZ1bmN0aW9uKG1vZHVsZSwgbmFtZSwgdHlwZSk7Ci0gICAg
c2V0TGlua2FnZShyZXN1bHQsIExMVk1FeHRlcm5hbExpbmthZ2UpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgTE1vZHVsZSBtb2R1bGVDcmVhdGVXaXRoTmFtZUluQ29u
dGV4dChjb25zdCBjaGFyKiBtb2R1bGVJRCwgTENvbnRleHQgY29udGV4dCl7IHJldHVybiBsbHZt
LT5Nb2R1bGVDcmVhdGVXaXRoTmFtZUluQ29udGV4dChtb2R1bGVJRCwgY29udGV4dCk7IH0KLXN0
YXRpYyBpbmxpbmUgdm9pZCBkaXNwb3NlTW9kdWxlKExNb2R1bGUgbSl7IGxsdm0tPkRpc3Bvc2VN
b2R1bGUobSk7IH0KLQotc3RhdGljIGlubGluZSB2b2lkIGRpc3Bvc2VNZXNzYWdlKGNoYXIqIG91
dE1zZykgeyBsbHZtLT5EaXNwb3NlTWVzc2FnZShvdXRNc2cpOyB9Ci0KLXN0YXRpYyBpbmxpbmUg
TFZhbHVlIGdldFBhcmFtKExWYWx1ZSBmdW5jdGlvbiwgdW5zaWduZWQgaW5kZXgpIHsgcmV0dXJu
IGxsdm0tPkdldFBhcmFtKGZ1bmN0aW9uLCBpbmRleCk7IH0KLQotc3RhdGljIGlubGluZSBMVmFs
dWUgZ2V0VW5kZWYoTFR5cGUgdHlwZSkgeyByZXR1cm4gbGx2bS0+R2V0VW5kZWYodHlwZSk7IH0K
LQotZW51bSBCaXRFeHRlbnNpb24geyBaZXJvRXh0ZW5kLCBTaWduRXh0ZW5kIH07Ci1zdGF0aWMg
aW5saW5lIExWYWx1ZSBjb25zdEludChMVHlwZSB0eXBlLCB1bnNpZ25lZCBsb25nIGxvbmcgdmFs
dWUsIEJpdEV4dGVuc2lvbiBleHRlbnNpb24gPSBaZXJvRXh0ZW5kKSB7IHJldHVybiBsbHZtLT5D
b25zdEludCh0eXBlLCB2YWx1ZSwgZXh0ZW5zaW9uID09IFNpZ25FeHRlbmQpOyB9Ci1zdGF0aWMg
aW5saW5lIExWYWx1ZSBjb25zdFJlYWwoTFR5cGUgdHlwZSwgZG91YmxlIHZhbHVlKSB7IHJldHVy
biBsbHZtLT5Db25zdFJlYWwodHlwZSwgdmFsdWUpOyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBj
b25zdE51bGwoTFR5cGUgdHlwZSkgeyByZXR1cm4gbGx2bS0+Q29uc3ROdWxsKHR5cGUpOyB9Ci0K
LXN0YXRpYyBpbmxpbmUgTEJhc2ljQmxvY2sgYXBwZW5kQmFzaWNCbG9jayhMQ29udGV4dCBjb250
ZXh0LCBMVmFsdWUgZnVuY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUgPSAiIikgeyByZXR1cm4gbGx2
bS0+QXBwZW5kQmFzaWNCbG9ja0luQ29udGV4dChjb250ZXh0LCBmdW5jdGlvbiwgbmFtZSk7IH0K
LXN0YXRpYyBpbmxpbmUgTEJhc2ljQmxvY2sgaW5zZXJ0QmFzaWNCbG9jayhMQ29udGV4dCBjb250
ZXh0LCBMQmFzaWNCbG9jayBiZWZvcmVCYXNpY0Jsb2NrLCBjb25zdCBjaGFyKiBuYW1lID0gIiIp
IHsgcmV0dXJuIGxsdm0tPkluc2VydEJhc2ljQmxvY2tJbkNvbnRleHQoY29udGV4dCwgYmVmb3Jl
QmFzaWNCbG9jaywgbmFtZSk7IH0KLQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRQaGkoTEJ1
aWxkZXIgYnVpbGRlciwgTFR5cGUgdHlwZSkgeyByZXR1cm4gbGx2bS0+QnVpbGRQaGkoYnVpbGRl
ciwgdHlwZSwgIiIpOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgYWRkSW5jb21pbmcoTFZhbHVlIHBo
aSwgY29uc3QgTFZhbHVlKiB2YWx1ZXMsIGNvbnN0IExCYXNpY0Jsb2NrKiBibG9ja3MsIHVuc2ln
bmVkIG51bVByZWRlY2Vzc29ycykKLXsKLSAgICBsbHZtLT5BZGRJbmNvbWluZyhwaGksIGNvbnN0
X2Nhc3Q8TFZhbHVlKj4odmFsdWVzKSwgY29uc3RfY2FzdDxMQmFzaWNCbG9jayo+KGJsb2Nrcyks
IG51bVByZWRlY2Vzc29ycyk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgYWRkSW5jb21pbmcoTFZh
bHVlIHBoaSwgVmFsdWVGcm9tQmxvY2sgdmFsdWUxKQotewotICAgIExWYWx1ZSB2YWx1ZSA9IHZh
bHVlMS52YWx1ZSgpOwotICAgIExCYXNpY0Jsb2NrIGJsb2NrID0gdmFsdWUxLmJsb2NrKCk7Ci0g
ICAgYWRkSW5jb21pbmcocGhpLCAmdmFsdWUsICZibG9jaywgMSk7Ci19Ci1zdGF0aWMgaW5saW5l
IHZvaWQgYWRkSW5jb21pbmcoTFZhbHVlIHBoaSwgVmFsdWVGcm9tQmxvY2sgdmFsdWUxLCBWYWx1
ZUZyb21CbG9jayB2YWx1ZTIpCi17Ci0gICAgTFZhbHVlIHZhbHVlc1tdID0geyB2YWx1ZTEudmFs
dWUoKSwgdmFsdWUyLnZhbHVlKCkgfTsKLSAgICBMQmFzaWNCbG9jayBibG9ja3NbXSA9IHsgdmFs
dWUxLmJsb2NrKCksIHZhbHVlMi5ibG9jaygpIH07Ci0gICAgYWRkSW5jb21pbmcocGhpLCB2YWx1
ZXMsIGJsb2NrcywgMik7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZFBoaShMQnVpbGRl
ciBidWlsZGVyLCBMVHlwZSB0eXBlLCBWYWx1ZUZyb21CbG9jayB2YWx1ZTEpCi17Ci0gICAgTFZh
bHVlIHJlc3VsdCA9IGJ1aWxkUGhpKGJ1aWxkZXIsIHR5cGUpOwotICAgIGFkZEluY29taW5nKHJl
c3VsdCwgdmFsdWUxKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotc3RhdGljIGlubGluZSBMVmFs
dWUgYnVpbGRQaGkoCi0gICAgTEJ1aWxkZXIgYnVpbGRlciwgTFR5cGUgdHlwZSwgVmFsdWVGcm9t
QmxvY2sgdmFsdWUxLCBWYWx1ZUZyb21CbG9jayB2YWx1ZTIpCi17Ci0gICAgTFZhbHVlIHJlc3Vs
dCA9IGJ1aWxkUGhpKGJ1aWxkZXIsIHR5cGUpOwotICAgIGFkZEluY29taW5nKHJlc3VsdCwgdmFs
dWUxLCB2YWx1ZTIpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgTFZh
bHVlIGJ1aWxkQWxsb2NhKExCdWlsZGVyIGJ1aWxkZXIsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGxs
dm0tPkJ1aWxkQWxsb2NhKGJ1aWxkZXIsIHR5cGUsICIiKTsgfQotc3RhdGljIGlubGluZSBMVmFs
dWUgYnVpbGRBZGQoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkg
eyByZXR1cm4gbGx2bS0+QnVpbGRBZGQoYnVpbGRlciwgbGVmdCwgcmlnaHQsICIiKTsgfQotc3Rh
dGljIGlubGluZSBMVmFsdWUgYnVpbGRTdWIoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGxlZnQs
IExWYWx1ZSByaWdodCkgeyByZXR1cm4gbGx2bS0+QnVpbGRTdWIoYnVpbGRlciwgbGVmdCwgcmln
aHQsICIiKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRNdWwoTEJ1aWxkZXIgYnVpbGRl
ciwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbGx2bS0+QnVpbGRNdWwoYnVp
bGRlciwgbGVmdCwgcmlnaHQsICIiKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGREaXYo
TEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbGx2
bS0+QnVpbGRTRGl2KGJ1aWxkZXIsIGxlZnQsIHJpZ2h0LCAiIik7IH0KLXN0YXRpYyBpbmxpbmUg
TFZhbHVlIGJ1aWxkUmVtKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmln
aHQpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkU1JlbShidWlsZGVyLCBsZWZ0LCByaWdodCwgIiIpOyB9
Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZE5lZyhMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUg
dmFsdWUpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkTmVnKGJ1aWxkZXIsIHZhbHVlLCAiIik7IH0KLXN0
YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkRkFkZChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgbGVm
dCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBsbHZtLT5CdWlsZEZBZGQoYnVpbGRlciwgbGVmdCwg
cmlnaHQsICIiKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRGU3ViKExCdWlsZGVyIGJ1
aWxkZXIsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkRlN1
YihidWlsZGVyLCBsZWZ0LCByaWdodCwgIiIpOyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWls
ZEZNdWwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1
cm4gbGx2bS0+QnVpbGRGTXVsKGJ1aWxkZXIsIGxlZnQsIHJpZ2h0LCAiIik7IH0KLXN0YXRpYyBp
bmxpbmUgTFZhbHVlIGJ1aWxkRkRpdihMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgbGVmdCwgTFZh
bHVlIHJpZ2h0KSB7IHJldHVybiBsbHZtLT5CdWlsZEZEaXYoYnVpbGRlciwgbGVmdCwgcmlnaHQs
ICIiKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRGUmVtKExCdWlsZGVyIGJ1aWxkZXIs
IExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkRlJlbShidWls
ZGVyLCBsZWZ0LCByaWdodCwgIiIpOyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEZOZWco
TEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIHZhbHVlKSB7IHJldHVybiBsbHZtLT5CdWlsZEZOZWco
YnVpbGRlciwgdmFsdWUsICIiKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRBbmQoTEJ1
aWxkZXIgYnVpbGRlciwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbGx2bS0+
QnVpbGRBbmQoYnVpbGRlciwgbGVmdCwgcmlnaHQsICIiKTsgfQotc3RhdGljIGlubGluZSBMVmFs
dWUgYnVpbGRPcihMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7
IHJldHVybiBsbHZtLT5CdWlsZE9yKGJ1aWxkZXIsIGxlZnQsIHJpZ2h0LCAiIik7IH0KLXN0YXRp
YyBpbmxpbmUgTFZhbHVlIGJ1aWxkWG9yKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBsZWZ0LCBM
VmFsdWUgcmlnaHQpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkWG9yKGJ1aWxkZXIsIGxlZnQsIHJpZ2h0
LCAiIik7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkU2hsKExCdWlsZGVyIGJ1aWxkZXIs
IExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkU2hsKGJ1aWxk
ZXIsIGxlZnQsIHJpZ2h0LCAiIik7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQVNocihM
QnVpbGRlciBidWlsZGVyLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBsbHZt
LT5CdWlsZEFTaHIoYnVpbGRlciwgbGVmdCwgcmlnaHQsICIiKTsgfQotc3RhdGljIGlubGluZSBM
VmFsdWUgYnVpbGRMU2hyKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmln
aHQpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkTFNocihidWlsZGVyLCBsZWZ0LCByaWdodCwgIiIpOyB9
Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZE5vdChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUg
dmFsdWUpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkTm90KGJ1aWxkZXIsIHZhbHVlLCAiIik7IH0KLXN0
YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkTG9hZChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgcG9p
bnRlcikgeyByZXR1cm4gbGx2bS0+QnVpbGRMb2FkKGJ1aWxkZXIsIHBvaW50ZXIsICIiKTsgfQot
c3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRTdG9yZShMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUg
dmFsdWUsIExWYWx1ZSBwb2ludGVyKSB7IHJldHVybiBsbHZtLT5CdWlsZFN0b3JlKGJ1aWxkZXIs
IHZhbHVlLCBwb2ludGVyKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRTRXh0KExCdWls
ZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gbGx2bS0+QnVp
bGRTRXh0KGJ1aWxkZXIsIHZhbHVlLCB0eXBlLCAiIik7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVl
IGJ1aWxkWkV4dChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsg
cmV0dXJuIGxsdm0tPkJ1aWxkWkV4dChidWlsZGVyLCB2YWx1ZSwgdHlwZSwgIiIpOyB9Ci1zdGF0
aWMgaW5saW5lIExWYWx1ZSBidWlsZEZQVG9TSShMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgdmFs
dWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkRlBUb1NJKGJ1aWxkZXIsIHZhbHVl
LCB0eXBlLCAiIik7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkRlBUb1VJKExCdWlsZGVy
IGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gbGx2bS0+QnVpbGRG
UFRvVUkoYnVpbGRlciwgdmFsdWUsIHR5cGUsICIiKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUg
YnVpbGRTSVRvRlAoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7
IHJldHVybiBsbHZtLT5CdWlsZFNJVG9GUChidWlsZGVyLCB2YWx1ZSwgdHlwZSwgIiIpOyB9Ci1z
dGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZFVJVG9GUChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUg
dmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkVUlUb0ZQKGJ1aWxkZXIsIHZh
bHVlLCB0eXBlLCAiIik7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkSW50Q2FzdChMQnVp
bGRlciBidWlsZGVyLCBMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGxsdm0tPkJ1
aWxkSW50Q2FzdChidWlsZGVyLCB2YWx1ZSwgdHlwZSwgIiIpOyB9Ci1zdGF0aWMgaW5saW5lIExW
YWx1ZSBidWlsZEZQQ2FzdChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgdmFsdWUsIExUeXBlIHR5
cGUpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkRlBDYXN0KGJ1aWxkZXIsIHZhbHVlLCB0eXBlLCAiIik7
IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkSW50VG9QdHIoTEJ1aWxkZXIgYnVpbGRlciwg
TFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJldHVybiBsbHZtLT5CdWlsZEludFRvUHRyKGJ1
aWxkZXIsIHZhbHVlLCB0eXBlLCAiIik7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkUHRy
VG9JbnQoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJldHVy
biBsbHZtLT5CdWlsZFB0clRvSW50KGJ1aWxkZXIsIHZhbHVlLCB0eXBlLCAiIik7IH0KLXN0YXRp
YyBpbmxpbmUgTFZhbHVlIGJ1aWxkQml0Q2FzdChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgdmFs
dWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkQml0Q2FzdChidWlsZGVyLCB2YWx1
ZSwgdHlwZSwgIiIpOyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZElDbXAoTEJ1aWxkZXIg
YnVpbGRlciwgTEludFByZWRpY2F0ZSBjb25kLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7
IHJldHVybiBsbHZtLT5CdWlsZElDbXAoYnVpbGRlciwgY29uZCwgbGVmdCwgcmlnaHQsICIiKTsg
fQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRGQ21wKExCdWlsZGVyIGJ1aWxkZXIsIExSZWFs
UHJlZGljYXRlIGNvbmQsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGxsdm0t
PkJ1aWxkRkNtcChidWlsZGVyLCBjb25kLCBsZWZ0LCByaWdodCwgIiIpOyB9Ci1zdGF0aWMgaW5s
aW5lIExWYWx1ZSBidWlsZEluc2VydEVsZW1lbnQoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIHZl
Y3RvciwgTFZhbHVlIGVsZW1lbnQsIExWYWx1ZSBpbmRleCkgeyByZXR1cm4gbGx2bS0+QnVpbGRJ
bnNlcnRFbGVtZW50KGJ1aWxkZXIsIHZlY3RvciwgZWxlbWVudCwgaW5kZXgsICIiKTsgfQotCi1z
dGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEZlbmNlKExCdWlsZGVyIGJ1aWxkZXIsIExBdG9taWNP
cmRlcmluZyBvcmRlcmluZywgU3luY2hyb25pemF0aW9uU2NvcGUgc2NvcGUgPSBDcm9zc1RocmVh
ZCkKLXsKLSAgICByZXR1cm4gbGx2bS0+QnVpbGRGZW5jZShidWlsZGVyLCBvcmRlcmluZywgc2Nv
cGUgPT0gU2luZ2xlVGhyZWFkLCAiIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxk
Q2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIGNvbnN0IExWYWx1ZSogYXJn
cywgdW5zaWduZWQgbnVtQXJncykKLXsKLSAgICByZXR1cm4gbGx2bS0+QnVpbGRDYWxsKGJ1aWxk
ZXIsIGZ1bmN0aW9uLCBjb25zdF9jYXN0PExWYWx1ZSo+KGFyZ3MpLCBudW1BcmdzLCAiIik7Ci19
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlPgotaW5saW5lIExWYWx1ZSBidWlsZENhbGwo
TEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBjb25zdCBWZWN0b3JUeXBlJiB2ZWN0
b3IpCi17Ci0gICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgdmVjdG9yLmJl
Z2luKCksIHZlY3Rvci5zaXplKCkpOwotfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxs
KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbikKLXsKLSAgICByZXR1cm4gYnVpbGRD
YWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCAwLCAwKTsKLX0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1
aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxKQot
ewotICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sICZhcmcxLCAxKTsKLX0K
LXRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+Ci1MVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1
aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIEFyZ3MuLi4gYXJncykKLXsKLSAg
ICBMVmFsdWUgYXJnc0FycmF5W10gPSB7IGFyZzEsIGFyZ3MuLi4gfTsKLSAgICByZXR1cm4gYnVp
bGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdzQXJyYXksIHNpemVvZihhcmdzQXJyYXkpIC8g
c2l6ZW9mKExWYWx1ZSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0SW5zdHJ1Y3Rpb25D
YWxsaW5nQ29udmVudGlvbihMVmFsdWUgaW5zdHJ1Y3Rpb24sIExDYWxsQ29udiBjYWxsaW5nQ29u
dmVudGlvbikgeyBsbHZtLT5TZXRJbnN0cnVjdGlvbkNhbGxDb252KGluc3RydWN0aW9uLCBjYWxs
aW5nQ29udmVudGlvbik7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkRXh0cmFjdFZhbHVl
KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBhZ2dWYWwsIHVuc2lnbmVkIGluZGV4KSB7IHJldHVy
biBsbHZtLT5CdWlsZEV4dHJhY3RWYWx1ZShidWlsZGVyLCBhZ2dWYWwsIGluZGV4LCAiIik7IH0K
LXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkU2VsZWN0KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1
ZSBjb25kaXRpb24sIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuKSB7IHJldHVybiBsbHZt
LT5CdWlsZFNlbGVjdChidWlsZGVyLCBjb25kaXRpb24sIHRha2VuLCBub3RUYWtlbiwgIiIpOyB9
Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEJyKExCdWlsZGVyIGJ1aWxkZXIsIExCYXNpY0Js
b2NrIGRlc3RpbmF0aW9uKSB7IHJldHVybiBsbHZtLT5CdWlsZEJyKGJ1aWxkZXIsIGRlc3RpbmF0
aW9uKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDb25kQnIoTEJ1aWxkZXIgYnVpbGRl
ciwgTFZhbHVlIGNvbmRpdGlvbiwgTEJhc2ljQmxvY2sgdGFrZW4sIExCYXNpY0Jsb2NrIG5vdFRh
a2VuKSB7IHJldHVybiBsbHZtLT5CdWlsZENvbmRCcihidWlsZGVyLCBjb25kaXRpb24sIHRha2Vu
LCBub3RUYWtlbik7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkU3dpdGNoKExCdWlsZGVy
IGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSwgTEJhc2ljQmxvY2sgZmFsbFRocm91Z2gsIHVuc2lnbmVk
IG51bUNhc2VzKSB7IHJldHVybiBsbHZtLT5CdWlsZFN3aXRjaChidWlsZGVyLCB2YWx1ZSwgZmFs
bFRocm91Z2gsIG51bUNhc2VzKTsgfQotc3RhdGljIGlubGluZSB2b2lkIGFkZENhc2UoTFZhbHVl
IHN3aXRjaEluc3QsIExWYWx1ZSB2YWx1ZSwgTEJhc2ljQmxvY2sgdGFyZ2V0KSB7IGxsdm0tPkFk
ZENhc2Uoc3dpdGNoSW5zdCwgdmFsdWUsIHRhcmdldCk7IH0KLXRlbXBsYXRlPHR5cGVuYW1lIFZl
Y3RvclR5cGU+Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZFN3aXRjaChMQnVpbGRlciBidWls
ZGVyLCBMVmFsdWUgdmFsdWUsIGNvbnN0IFZlY3RvclR5cGUmIGNhc2VzLCBMQmFzaWNCbG9jayBm
YWxsVGhyb3VnaCkKLXsKLSAgICBMVmFsdWUgcmVzdWx0ID0gYnVpbGRTd2l0Y2goYnVpbGRlciwg
dmFsdWUsIGZhbGxUaHJvdWdoLCBjYXNlcy5zaXplKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjYXNlcy5zaXplKCk7ICsraSkKLSAgICAgICAgYWRkQ2FzZShyZXN1bHQsIGNhc2Vz
W2ldLnZhbHVlKCksIGNhc2VzW2ldLnRhcmdldCgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
c3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRSZXQoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIHZh
bHVlKSB7IHJldHVybiBsbHZtLT5CdWlsZFJldChidWlsZGVyLCB2YWx1ZSk7IH0KLXN0YXRpYyBp
bmxpbmUgTFZhbHVlIGJ1aWxkVW5yZWFjaGFibGUoTEJ1aWxkZXIgYnVpbGRlcikgeyByZXR1cm4g
bGx2bS0+QnVpbGRVbnJlYWNoYWJsZShidWlsZGVyKTsgfQotCi1zdGF0aWMgaW5saW5lIHZvaWQg
ZHVtcE1vZHVsZShMTW9kdWxlIG1vZHVsZSkgeyBsbHZtLT5EdW1wTW9kdWxlKG1vZHVsZSk7IH0K
LXN0YXRpYyBpbmxpbmUgdm9pZCB2ZXJpZnlNb2R1bGUoTE1vZHVsZSBtb2R1bGUpCi17Ci0gICAg
Y2hhciogZXJyb3IgPSAwOwotICAgIGxsdm0tPlZlcmlmeU1vZHVsZShtb2R1bGUsIExMVk1BYm9y
dFByb2Nlc3NBY3Rpb24sICZlcnJvcik7Ci0gICAgbGx2bS0+RGlzcG9zZU1lc3NhZ2UoZXJyb3Ip
OwotfQotCi0jZW5kaWYgLy8gIUZUTF9VU0VTX0IzCi0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKLQotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotCi0jZW5kaWYgLy8gRlRMQWJicmV2aWF0
aW9uc19oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAko
cmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjE5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcwotICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgU3plZ2VkCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRlRMQ29tcGlsZS5oIgotCi0j
aWYgRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwotCi0jaW5jbHVkZSAiQ29kZUJsb2Nr
V2l0aEpJVFR5cGUuaCIKLSNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLSNpbmNsdWRlICJERkdD
b21tb24uaCIKLSNpbmNsdWRlICJERkdHcmFwaFNhZmVwb2ludC5oIgotI2luY2x1ZGUgIkRGR09w
ZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJEYXRhVmlldy5oIgotI2luY2x1ZGUgIkRpc2Fzc2VtYmxl
ci5oIgotI2luY2x1ZGUgIkZUTENvbXBpbGVCaW5hcnlPcC5oIgotI2luY2x1ZGUgIkZUTEV4Y2Vw
dGlvbkhhbmRsZXJNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgi
Ci0jaW5jbHVkZSAiRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgiCi0jaW5jbHVkZSAiRlRMSW5s
aW5lQ2FjaGVTaXplLmgiCi0jaW5jbHVkZSAiRlRMSklUQ29kZS5oIgotI2luY2x1ZGUgIkZUTFRo
dW5rcy5oIgotI2luY2x1ZGUgIkZUTFVud2luZEluZm8uaCIKLSNpbmNsdWRlICJMTFZNQVBJLmgi
Ci0jaW5jbHVkZSAiTGlua0J1ZmZlci5oIgotI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvci5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLXVzaW5nIG5hbWVz
cGFjZSBERkc7Ci0KLXN0YXRpYyBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzRm9yKGNvbnN0IFN0
YWNrTWFwczo6UmVjb3JkJik7Ci0KLXN0YXRpYyB1aW50OF90KiBtbUFsbG9jYXRlQ29kZVNlY3Rp
b24oCi0gICAgdm9pZCogb3BhcXVlU3RhdGUsIHVpbnRwdHJfdCBzaXplLCB1bnNpZ25lZCBhbGln
bm1lbnQsIHVuc2lnbmVkLCBjb25zdCBjaGFyKiBzZWN0aW9uTmFtZSkKLXsKLSAgICBTdGF0ZSYg
c3RhdGUgPSAqc3RhdGljX2Nhc3Q8U3RhdGUqPihvcGFxdWVTdGF0ZSk7Ci0gICAgCi0gICAgUkVM
RUFTRV9BU1NFUlQoYWxpZ25tZW50IDw9IGppdEFsbG9jYXRpb25HcmFudWxlKTsKLSAgICAKLSAg
ICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0KLSAgICAgICAgc3RhdGUu
Z3JhcGgubV92bS5leGVjdXRhYmxlQWxsb2NhdG9yLmFsbG9jYXRlKAotICAgICAgICAgICAgc3Rh
dGUuZ3JhcGgubV92bSwgc2l6ZSwgc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0
aW9uQ2FuRmFpbCk7Ci0gICAgCi0gICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgLy8gU2lnbmFs
IGZhaWx1cmUuIFRoaXMgY29tcGlsYXRpb24gd2lsbCBnZXQgdG9zc2VkLgotICAgICAgICBzdGF0
ZS5hbGxvY2F0aW9uRmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZha2UgYW4g
YWxsb2NhdGlvbiwgc2luY2UgTExWTSBjYW5ub3QgaGFuZGxlIGZhaWx1cmVzIGluIHRoZSBtZW1v
cnkgbWFuYWdlci4KLSAgICAgICAgUmVmUHRyPERhdGFTZWN0aW9uPiBmYWtlU2VjdGlvbiA9IGFk
b3B0UmVmKG5ldyBEYXRhU2VjdGlvbihzaXplLCBqaXRBbGxvY2F0aW9uR3JhbnVsZSkpOwotICAg
ICAgICBzdGF0ZS5qaXRDb2RlLT5hZGREYXRhU2VjdGlvbihmYWtlU2VjdGlvbik7Ci0gICAgICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KGZha2VTZWN0aW9uLT5iYXNlKCkpOwotICAg
IH0KLSAgICAKLSAgICAvLyBMTFZNIHVzZWQgdG8gcHV0IF9fY29tcGFjdF91bndpbmQgaW4gYSBj
b2RlIHNlY3Rpb24uIFdlIGtlZXAgdGhpcyBoZXJlIGRlZmVuc2l2ZWx5LAotICAgIC8vIGZvciBj
bGllbnRzIHRoYXQgdXNlIG9sZGVyIExMVk1zLgotICAgIGlmICghc3RyY21wKHNlY3Rpb25OYW1l
LCBTRUNUSU9OX05BTUUoImNvbXBhY3RfdW53aW5kIikpKSB7Ci0gICAgICAgIHN0YXRlLnVud2lu
ZERhdGFTZWN0aW9uID0gcmVzdWx0LT5zdGFydCgpOwotICAgICAgICBzdGF0ZS51bndpbmREYXRh
U2VjdGlvblNpemUgPSByZXN1bHQtPnNpemVJbkJ5dGVzKCk7Ci0gICAgfQotICAgIAotICAgIHN0
YXRlLmppdENvZGUtPmFkZEhhbmRsZShyZXN1bHQpOwotICAgIHN0YXRlLmNvZGVTZWN0aW9uTmFt
ZXMuYXBwZW5kKHNlY3Rpb25OYW1lKTsKLSAgICAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWlu
dDhfdCo+KHJlc3VsdC0+c3RhcnQoKSk7Ci19Ci0KLXN0YXRpYyB1aW50OF90KiBtbUFsbG9jYXRl
RGF0YVNlY3Rpb24oCi0gICAgdm9pZCogb3BhcXVlU3RhdGUsIHVpbnRwdHJfdCBzaXplLCB1bnNp
Z25lZCBhbGlnbm1lbnQsIHVuc2lnbmVkIHNlY3Rpb25JRCwKLSAgICBjb25zdCBjaGFyKiBzZWN0
aW9uTmFtZSwgTExWTUJvb2wgaXNSZWFkT25seSkKLXsKLSAgICBVTlVTRURfUEFSQU0oc2VjdGlv
bklEKTsKLSAgICBVTlVTRURfUEFSQU0oaXNSZWFkT25seSk7Ci0KLSAgICAvLyBBbGxvY2F0ZSB0
aGUgR09UIGluIHRoZSBjb2RlIHNlY3Rpb24gdG8gbWFrZSBpdCByZWFjaGFibGUgZm9yIGFsbCBj
b2RlLgotICAgIGlmICghc3RyY21wKHNlY3Rpb25OYW1lLCBTRUNUSU9OX05BTUUoImdvdCIpKSkK
LSAgICAgICAgcmV0dXJuIG1tQWxsb2NhdGVDb2RlU2VjdGlvbihvcGFxdWVTdGF0ZSwgc2l6ZSwg
YWxpZ25tZW50LCBzZWN0aW9uSUQsIHNlY3Rpb25OYW1lKTsKLQotICAgIFN0YXRlJiBzdGF0ZSA9
ICpzdGF0aWNfY2FzdDxTdGF0ZSo+KG9wYXF1ZVN0YXRlKTsKLQotICAgIFJlZlB0cjxEYXRhU2Vj
dGlvbj4gc2VjdGlvbiA9IGFkb3B0UmVmKG5ldyBEYXRhU2VjdGlvbihzaXplLCBhbGlnbm1lbnQp
KTsKLQotICAgIGlmICghc3RyY21wKHNlY3Rpb25OYW1lLCBTRUNUSU9OX05BTUUoImxsdm1fc3Rh
Y2ttYXBzIikpKQotICAgICAgICBzdGF0ZS5zdGFja21hcHNTZWN0aW9uID0gc2VjdGlvbjsKLSAg
ICBlbHNlIHsKLSAgICAgICAgc3RhdGUuaml0Q29kZS0+YWRkRGF0YVNlY3Rpb24oc2VjdGlvbik7
Ci0gICAgICAgIHN0YXRlLmRhdGFTZWN0aW9uTmFtZXMuYXBwZW5kKHNlY3Rpb25OYW1lKTsKLSNp
ZiBPUyhEQVJXSU4pCi0gICAgICAgIGlmICghc3RyY21wKHNlY3Rpb25OYW1lLCBTRUNUSU9OX05B
TUUoImNvbXBhY3RfdW53aW5kIikpKSB7Ci0jZWxpZiBPUyhMSU5VWCkKLSAgICAgICAgaWYgKCFz
dHJjbXAoc2VjdGlvbk5hbWUsIFNFQ1RJT05fTkFNRSgiZWhfZnJhbWUiKSkpIHsKLSNlbHNlCi0j
ZXJyb3IgIlVucmVjb2duaXplZCBPUyIKLSNlbmRpZgotICAgICAgICAgICAgc3RhdGUudW53aW5k
RGF0YVNlY3Rpb24gPSBzZWN0aW9uLT5iYXNlKCk7Ci0gICAgICAgICAgICBzdGF0ZS51bndpbmRE
YXRhU2VjdGlvblNpemUgPSBzaXplOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDx1aW50OF90Kj4oc2VjdGlvbi0+YmFzZSgpKTsKLX0KLQotc3RhdGljIExMVk1C
b29sIG1tQXBwbHlQZXJtaXNzaW9ucyh2b2lkKiwgY2hhcioqKQotewotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotc3RhdGljIHZvaWQgbW1EZXN0cm95KHZvaWQqKQotewotfQotCi1zdGF0aWMgdm9p
ZCBkdW1wRGF0YVNlY3Rpb24oRGF0YVNlY3Rpb24qIHNlY3Rpb24sIGNvbnN0IGNoYXIqIHByZWZp
eCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc2VjdGlvbi0+c2l6ZSgpIC8gc2l6
ZW9mKGludDY0X3QpOyArK2opIHsKLSAgICAgICAgY2hhciBidWZbMzJdOwotICAgICAgICBpbnQ2
NF90KiB3b3JkUG9pbnRlciA9IHN0YXRpY19jYXN0PGludDY0X3QqPihzZWN0aW9uLT5iYXNlKCkp
ICsgajsKLSAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIjB4JWx4Iiwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZz4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4od29yZFBvaW50ZXIp
KSk7Ci0gICAgICAgIGRhdGFMb2dGKCIlcyUxNnM6IDB4JTAxNmxseFxuIiwgcHJlZml4LCBidWYs
IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oKndvcmRQb2ludGVyKSk7Ci0gICAgfQotfQotCi1zdGF0
aWMgaW50IG9mZnNldE9mU3RhY2tSZWdpb24oU3RhY2tNYXBzOjpSZWNvcmRNYXAmIHJlY29yZE1h
cCwgdWludDMyX3Qgc3RhY2ttYXBJRCkKLXsKLSAgICBpZiAoc3RhY2ttYXBJRCA9PSBVSU5UX01B
WCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0
ZXJhdG9yIGl0ZXIgPSByZWNvcmRNYXAuZmluZChzdGFja21hcElEKTsKLSAgICBSRUxFQVNFX0FT
U0VSVChpdGVyICE9IHJlY29yZE1hcC5lbmQoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXRlci0+
dmFsdWUuc2l6ZSgpID09IDEpOwotICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXItPnZhbHVlWzBdLnJl
Y29yZC5sb2NhdGlvbnMuc2l6ZSgpID09IDEpOwotICAgIExvY2F0aW9uIGNhcHR1cmVkTG9jYXRp
b24gPQotICAgICAgICBMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKG51bGxwdHIsIGl0ZXItPnZhbHVl
WzBdLnJlY29yZC5sb2NhdGlvbnNbMF0pOwotICAgIFJFTEVBU0VfQVNTRVJUKGNhcHR1cmVkTG9j
YXRpb24ua2luZCgpID09IExvY2F0aW9uOjpSZWdpc3Rlcik7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
Y2FwdHVyZWRMb2NhdGlvbi5ncHIoKSA9PSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoIShjYXB0dXJlZExvY2F0aW9uLmFkZGVuZCgpICUgc2l6ZW9mKFJl
Z2lzdGVyKSkpOwotICAgIHJldHVybiBjYXB0dXJlZExvY2F0aW9uLmFkZGVuZCgpIC8gc2l6ZW9m
KFJlZ2lzdGVyKTsKLX0KLQotc3RhdGljIHZvaWQgZ2VuZXJhdGVJbmxpbmVJZlBvc3NpYmxlT3V0
T2ZMaW5lSWZOb3QoU3RhdGUmIHN0YXRlLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBD
Q2FsbEhlbHBlcnMmIGNvZGUsIGNoYXIqIHN0YXJ0T2ZJbmxpbmVDb2RlLCBzaXplX3Qgc2l6ZU9m
SW5saW5lQ29kZSwgY29uc3QgY2hhciogY29kZURlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoTGlua0J1ZmZlciYsIENDYWxsSGVscGVycyYsIGJvb2wgd2FzQ29tcGlsZWRJbmxp
bmUpPiYgY2FsbGJhY2spCi17Ci0gICAgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+IGNvZGVM
aW5rQnVmZmVyOwotICAgIHNpemVfdCBhY3R1YWxDb2RlU2l6ZSA9IGNvZGUubV9hc3NlbWJsZXIu
YnVmZmVyKCkuY29kZVNpemUoKTsKLQotICAgIGlmIChhY3R1YWxDb2RlU2l6ZSA8PSBzaXplT2ZJ
bmxpbmVDb2RlKSB7Ci0gICAgICAgIExpbmtCdWZmZXIgY29kZUxpbmtCdWZmZXIodm0sIGNvZGUs
IHN0YXJ0T2ZJbmxpbmVDb2RlLCBzaXplT2ZJbmxpbmVDb2RlKTsKLQotICAgICAgICAvLyBGaWxs
IHRoZSByZW1haW5kZXIgb2YgdGhlIGlubGluZSBzcGFjZSB3aXRoIG5vcHMgdG8gYXZvaWQgY29u
ZnVzaW5nIHRoZSBkaXNhc3NlbWJsZXIuCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBc3NlbWJs
ZXJUeXBlX1Q6OmZpbGxOb3BzKGJpdHdpc2VfY2FzdDxjaGFyKj4oc3RhcnRPZklubGluZUNvZGUp
ICsgYWN0dWFsQ29kZVNpemUsIHNpemVPZklubGluZUNvZGUgLSBhY3R1YWxDb2RlU2l6ZSk7Ci0K
LSAgICAgICAgY2FsbGJhY2soY29kZUxpbmtCdWZmZXIsIGNvZGUsIHRydWUpOwotCi0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoT3B0aW9uczo6YXNzZXJ0SUNTaXppbmcoKSB8fCBP
cHRpb25zOjpkdW1wRmFpbGVkSUNTaXppbmcoKSkgewotICAgICAgICBzdGF0aWMgc2l6ZV90IG1h
eFNpemUgPSAwOwotICAgICAgICBpZiAobWF4U2l6ZSA8IGFjdHVhbENvZGVTaXplKQotICAgICAg
ICAgICAgbWF4U2l6ZSA9IGFjdHVhbENvZGVTaXplOwotICAgICAgICBkYXRhTG9nRigiQUxFUlQ6
IFVuZGVyLWVzdGltYXRlZCBGVEwgSW5saW5lIENhY2hlIFNpemUgZm9yICVzOiBlc3RpbWF0ZWQg
JXp1LCBhY3R1YWwgJXp1LCBtYXggJXp1XG4iLCBjb2RlRGVzY3JpcHRpb24sIHNpemVPZklubGlu
ZUNvZGUsIGFjdHVhbENvZGVTaXplLCBtYXhTaXplKTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OmFz
c2VydElDU2l6aW5nKCkpCi0gICAgICAgICAgICBDUkFTSCgpOwotICAgIH0KLQotICAgIC8vIElm
IHRoZXJlIGlzbid0IGVub3VnaCBzcGFjZSBpbiB0aGUgcHJvdmlkZWQgaW5saW5lIGNvZGUgYXJl
YSwgYWxsb2NhdGUgb3V0IG9mIGxpbmUKLSAgICAvLyBleGVjdXRhYmxlIG1lbW9yeSB0byBsaW5r
IHRoZSBwcm92aWRlZCBjb2RlLiBQbGFjZSBhIGp1bXAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUK
LSAgICAvLyBpbmxpbmUgYXJlYSBhbmQganVtcCB0byB0aGUgb3V0IG9mIGxpbmUgY29kZS4gU2lt
aWxhcmx5IHJldHVybiBieSBhcHBlbmRpbmcgYSBqdW1wCi0gICAgLy8gdG8gdGhlIHByb3ZpZGVk
IGNvZGUgdGhhdCBnb2VzIHRvIHRoZSBpbnN0cnVjdGlvbiBhZnRlciB0aGUgaW5saW5lIGNvZGUu
Ci0gICAgLy8gRmlsbCB0aGUgbWlkZGxlIHdpdGggbm9wJ3MuCi0gICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgcmV0dXJuVG9NYWlubGluZSA9IGNvZGUuanVtcCgpOwotCi0gICAgLy8gQWxsb2NhdGUg
b3V0IG9mIGxpbmUgZXhlY3V0YWJsZSBtZW1vcnkgYW5kIGxpbmsgdGhlIHByb3ZpZGVkIGNvZGUg
dGhlcmUuCi0gICAgY29kZUxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtCdWZmZXI+
KHZtLCBjb2RlLCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOwotCi0gICAg
Ly8gUGxhbnQgYSBqbXAgaW4gdGhlIGlubGluZSBidWZmZXIgdG8gdGhlIG91dCBvZiBsaW5lIGNv
ZGUuCi0gICAgTWFjcm9Bc3NlbWJsZXIgY2FsbFRvT3V0T2ZMaW5lQ29kZTsKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBqdW1wVG9PdXRPZkxpbmUgPSBjYWxsVG9PdXRPZkxpbmVDb2RlLmp1bXAo
KTsKLSAgICBMaW5rQnVmZmVyIGlubGluZUJ1ZmZlcih2bSwgY2FsbFRvT3V0T2ZMaW5lQ29kZSwg
c3RhcnRPZklubGluZUNvZGUsIHNpemVPZklubGluZUNvZGUpOwotICAgIGlubGluZUJ1ZmZlci5s
aW5rKGp1bXBUb091dE9mTGluZSwgY29kZUxpbmtCdWZmZXItPmVudHJ5cG9pbnQoKSk7Ci0KLSAg
ICAvLyBGaWxsIHRoZSByZW1haW5kZXIgb2YgdGhlIGlubGluZSBzcGFjZSB3aXRoIG5vcHMgdG8g
YXZvaWQgY29uZnVzaW5nIHRoZSBkaXNhc3NlbWJsZXIuCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkFz
c2VtYmxlclR5cGVfVDo6ZmlsbE5vcHMoYml0d2lzZV9jYXN0PGNoYXIqPihzdGFydE9mSW5saW5l
Q29kZSkgKyBpbmxpbmVCdWZmZXIuc2l6ZSgpLCBzaXplT2ZJbmxpbmVDb2RlIC0gaW5saW5lQnVm
ZmVyLnNpemUoKSk7Ci0KLSAgICAvLyBMaW5rIHRoZSBlbmQgb2YgdGhlIG91dCBvZiBsaW5lIGNv
ZGUgdG8gcmlnaHQgYWZ0ZXIgdGhlIGlubGluZSBhcmVhLgotICAgIGNvZGVMaW5rQnVmZmVyLT5s
aW5rKHJldHVyblRvTWFpbmxpbmUsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHN0YXJ0T2ZJbmxpbmVDb2RlKSkubGFi
ZWxBdE9mZnNldChzaXplT2ZJbmxpbmVDb2RlKSk7Ci0KLSAgICBjYWxsYmFjaygqY29kZUxpbmtC
dWZmZXIuZ2V0KCksIGNvZGUsIGZhbHNlKTsKLQotICAgIHN0YXRlLmZpbmFsaXplci0+b3V0T2ZM
aW5lQ29kZUluZm9zLmFwcGVuZChPdXRPZkxpbmVDb2RlSW5mbyhXVEZNb3ZlKGNvZGVMaW5rQnVm
ZmVyKSwgY29kZURlc2NyaXB0aW9uKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIERlc2NyaXB0
b3JUeXBlPgotdm9pZCBnZW5lcmF0ZUlDRmFzdFBhdGgoCi0gICAgU3RhdGUmIHN0YXRlLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgR2VuZXJhdGVkRnVuY3Rpb24gZ2VuZXJhdGVkRnVuY3Rpb24sCi0g
ICAgU3RhY2tNYXBzOjpSZWNvcmRNYXAmIHJlY29yZE1hcCwgRGVzY3JpcHRvclR5cGUmIGljLCBz
aXplX3Qgc2l6ZU9mSUMsIGNvbnN0IGNoYXIqIGljTmFtZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0
ZS5ncmFwaC5tX3ZtOwotCi0gICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIg
PSByZWNvcmRNYXAuZmluZChpYy5zdGFja21hcElEKCkpOwotICAgIGlmIChpdGVyID09IHJlY29y
ZE1hcC5lbmQoKSkgewotICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBWZWN0b3I8U3RhY2tNYXBzOjpSZWNvcmRBbmRJbmRl
eD4mIHJlY29yZHMgPSBpdGVyLT52YWx1ZTsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChyZWNv
cmRzLnNpemUoKSA9PSBpYy5tX2dlbmVyYXRvcnMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSByZWNvcmRzLnNpemUoKTsgaS0tOykgewotICAgICAgICBTdGFja01hcHM6OlJl
Y29yZCYgcmVjb3JkID0gcmVjb3Jkc1tpXS5yZWNvcmQ7Ci0gICAgICAgIGF1dG8gZ2VuZXJhdG9y
ID0gaWMubV9nZW5lcmF0b3JzW2ldOwotCi0gICAgICAgIENDYWxsSGVscGVycyBmYXN0UGF0aEpJ
VCgmdm0sIGNvZGVCbG9jayk7Ci0gICAgICAgIGdlbmVyYXRvci5nZW5lcmF0ZUZhc3RQYXRoKGZh
c3RQYXRoSklUKTsKLSAgICAgICAgCi0gICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9Ci0gICAgICAg
ICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIHJlY29yZC5pbnN0
cnVjdGlvbk9mZnNldDsKLQotICAgICAgICBnZW5lcmF0ZUlubGluZUlmUG9zc2libGVPdXRPZkxp
bmVJZk5vdChzdGF0ZSwgdm0sIGNvZGVCbG9jaywgZmFzdFBhdGhKSVQsIHN0YXJ0T2ZJQywgc2l6
ZU9mSUMsIGljTmFtZSwgWyZdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBDQ2FsbEhlbHBlcnMm
LCBib29sKSB7Ci0gICAgICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPnNpZGVDb2RlTGlua0J1ZmZl
ci0+bGluayhpYy5tX3Nsb3dQYXRoRG9uZVtpXSwKLSAgICAgICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbChzdGFydE9mSUMgKyBzaXplT2ZJQykpOwotCi0gICAgICAgICAgICBsaW5rQnVmZmVy
LmxpbmsoZ2VuZXJhdG9yLnNsb3dQYXRoSnVtcCgpLAotICAgICAgICAgICAgICAgIHN0YXRlLmZp
bmFsaXplci0+c2lkZUNvZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGdlbmVyYXRvci5zbG93UGF0
aEJlZ2luKCkpKTsKLQotICAgICAgICAgICAgZ2VuZXJhdG9yLmZpbmFsaXplKGxpbmtCdWZmZXIs
ICpzdGF0ZS5maW5hbGl6ZXItPnNpZGVDb2RlTGlua0J1ZmZlcik7Ci0gICAgICAgIH0pOwotICAg
IH0KLX0KLQotc3RhdGljIHZvaWQgZ2VuZXJhdGVDaGVja0luSUNGYXN0UGF0aCgKLSAgICBTdGF0
ZSYgc3RhdGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBHZW5lcmF0ZWRGdW5jdGlvbiBnZW5lcmF0
ZWRGdW5jdGlvbiwKLSAgICBTdGFja01hcHM6OlJlY29yZE1hcCYgcmVjb3JkTWFwLCBDaGVja0lu
RGVzY3JpcHRvciYgaWMsIHNpemVfdCBzaXplT2ZJQykKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS5n
cmFwaC5tX3ZtOwotCi0gICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBy
ZWNvcmRNYXAuZmluZChpYy5zdGFja21hcElEKCkpOwotICAgIGlmIChpdGVyID09IHJlY29yZE1h
cC5lbmQoKSkgewotICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAKLSAgICBWZWN0b3I8U3RhY2tNYXBzOjpSZWNvcmRBbmRJbmRleD4m
IHJlY29yZHMgPSBpdGVyLT52YWx1ZTsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChyZWNvcmRz
LnNpemUoKSA9PSBpYy5tX2dlbmVyYXRvcnMuc2l6ZSgpKTsKLQotICAgIGZvciAodW5zaWduZWQg
aSA9IHJlY29yZHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiBy
ZWNvcmQgPSByZWNvcmRzW2ldLnJlY29yZDsKLSAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBpYy5t
X2dlbmVyYXRvcnNbaV07Ci0KLSAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0g
KmdlbmVyYXRvci5tX3N0dWI7Ci0gICAgICAgIGF1dG8gY2FsbCA9IGdlbmVyYXRvci5tX3Nsb3dD
YWxsOwotICAgICAgICBhdXRvIHNsb3dQYXRoQmVnaW4gPSBnZW5lcmF0b3IubV9iZWdpbkxhYmVs
OwotCi0gICAgICAgIENDYWxsSGVscGVycyBmYXN0UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7Ci0g
ICAgICAgIAotICAgICAgICBhdXRvIGp1bXAgPSBmYXN0UGF0aEpJVC5wYXRjaGFibGVKdW1wKCk7
Ci0gICAgICAgIGF1dG8gZG9uZSA9IGZhc3RQYXRoSklULmxhYmVsKCk7Ci0KLSAgICAgICAgY2hh
ciogc3RhcnRPZklDID0KLSAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVk
RnVuY3Rpb24pICsgcmVjb3JkLmluc3RydWN0aW9uT2Zmc2V0OwotCi0gICAgICAgIGF1dG8gcG9z
dExpbmsgPSBbJl0gKExpbmtCdWZmZXImIGZhc3RQYXRoLCBDQ2FsbEhlbHBlcnMmLCBib29sKSB7
Ci0gICAgICAgICAgICBMaW5rQnVmZmVyJiBzbG93UGF0aCA9ICpzdGF0ZS5maW5hbGl6ZXItPnNp
ZGVDb2RlTGlua0J1ZmZlcjsKLQotICAgICAgICAgICAgc3RhdGUuZmluYWxpemVyLT5zaWRlQ29k
ZUxpbmtCdWZmZXItPmxpbmsoCi0gICAgICAgICAgICAgICAgaWMubV9zbG93UGF0aERvbmVbaV0s
IENvZGVMb2NhdGlvbkxhYmVsKHN0YXJ0T2ZJQyArIHNpemVPZklDKSk7Ci0KLSAgICAgICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsIHNsb3dQYXRoQmVnaW5Mb2MgPSBzbG93UGF0aC5sb2NhdGlvbk9m
KHNsb3dQYXRoQmVnaW4pOwotICAgICAgICAgICAgZmFzdFBhdGgubGluayhqdW1wLCBzbG93UGF0
aEJlZ2luTG9jKTsKLQotICAgICAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9j
YXRpb24gPSBzbG93UGF0aC5sb2NhdGlvbk9mKGNhbGwpOwotCi0gICAgICAgICAgICBzdHViSW5m
by5wYXRjaC5kZWx0YUNhbGxUb0RvbmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdl
ZW5Db2RlUHRyKAotICAgICAgICAgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgu
bG9jYXRpb25PZihkb25lKSk7Ci0KLSAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2Fs
bFRvSnVtcCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAg
ICAgICAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBmYXN0UGF0aC5sb2NhdGlvbk9mKGp1bXAp
KTsKLSAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGxSZXR1cm5M
b2NhdGlvbjsKLSAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2Ug
PSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICAgICAg
ICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgc2xvd1BhdGhCZWdpbkxvYyk7Ci0gICAgICAgIH07Ci0K
LSAgICAgICAgZ2VuZXJhdGVJbmxpbmVJZlBvc3NpYmxlT3V0T2ZMaW5lSWZOb3Qoc3RhdGUsIHZt
LCBjb2RlQmxvY2ssIGZhc3RQYXRoSklULCBzdGFydE9mSUMsIHNpemVPZklDLCAiQ2hlY2tJbiIs
IHBvc3RMaW5rKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGdlbmVyYXRlQmluYXJ5T3BJQ0Zh
c3RQYXRoKAotICAgIFN0YXRlJiBzdGF0ZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEdlbmVyYXRl
ZEZ1bmN0aW9uIGdlbmVyYXRlZEZ1bmN0aW9uLAotICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwJiBy
ZWNvcmRNYXAsIEJpbmFyeU9wRGVzY3JpcHRvciYgaWMpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUu
Z3JhcGgubV92bTsKLSAgICBzaXplX3Qgc2l6ZU9mSUMgPSBpYy5zaXplKCk7Ci0KLSAgICBTdGFj
a01hcHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKGljLnN0YWNr
bWFwSUQoKSk7Ci0gICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKQotICAgICAgICByZXR1
cm47IC8vIEl0IHdhcyBvcHRpbWl6ZWQgb3V0LgotCi0gICAgVmVjdG9yPFN0YWNrTWFwczo6UmVj
b3JkQW5kSW5kZXg+JiByZWNvcmRzID0gaXRlci0+dmFsdWU7Ci0KLSAgICBSRUxFQVNFX0FTU0VS
VChyZWNvcmRzLnNpemUoKSA9PSBpYy5tX3Nsb3dQYXRoU3RhcnRzLnNpemUoKSk7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSByZWNvcmRzLnNpemUoKTsgaS0tOykgewotICAgICAgICBTdGFja01h
cHM6OlJlY29yZCYgcmVjb3JkID0gcmVjb3Jkc1tpXS5yZWNvcmQ7Ci0KLSAgICAgICAgQ0NhbGxI
ZWxwZXJzIGZhc3RQYXRoSklUKCZ2bSwgY29kZUJsb2NrKTsKLQotICAgICAgICBHUFJSZWcgcmVz
dWx0ID0gcmVjb3JkLmxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKTsKLSAgICAgICAgR1BSUmVnIGxl
ZnQgPSByZWNvcmQubG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwotICAgICAgICBHUFJSZWcgcmln
aHQgPSByZWNvcmQubG9jYXRpb25zWzJdLmRpcmVjdEdQUigpOwotICAgICAgICBSZWdpc3RlclNl
dCB1c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVyc0ZvcihyZWNvcmQpOwotCi0gICAgICAgIEND
YWxsSGVscGVyczo6SnVtcCBkb25lOwotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1Bh
dGhTdGFydDsKLQotICAgICAgICBnZW5lcmF0ZUJpbmFyeU9wRmFzdFBhdGgoaWMsIGZhc3RQYXRo
SklULCByZXN1bHQsIGxlZnQsIHJpZ2h0LCB1c2VkUmVnaXN0ZXJzLCBkb25lLCBzbG93UGF0aFN0
YXJ0KTsKLQotICAgICAgICBjaGFyKiBzdGFydE9mSUMgPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdl
bmVyYXRlZEZ1bmN0aW9uKSArIHJlY29yZC5pbnN0cnVjdGlvbk9mZnNldDsKLSAgICAgICAgZ2Vu
ZXJhdGVJbmxpbmVJZlBvc3NpYmxlT3V0T2ZMaW5lSWZOb3Qoc3RhdGUsIHZtLCBjb2RlQmxvY2ss
IGZhc3RQYXRoSklULCBzdGFydE9mSUMsIHNpemVPZklDLCBpYy5uYW1lKCksIFsmXSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlciwgQ0NhbGxIZWxwZXJzJiwgYm9vbCkgewotICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKGRvbmUsIENvZGVMb2NhdGlvbkxhYmVsKHN0YXJ0T2ZJQyArIHNpemVPZklD
KSk7Ci0gICAgICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPnNpZGVDb2RlTGlua0J1ZmZlci0+bGlu
ayhpYy5tX3Nsb3dQYXRoRG9uZVtpXSwgQ29kZUxvY2F0aW9uTGFiZWwoc3RhcnRPZklDICsgc2l6
ZU9mSUMpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dQ
YXRoU3RhcnQsIHN0YXRlLmZpbmFsaXplci0+c2lkZUNvZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9m
KGljLm1fc2xvd1BhdGhTdGFydHNbaV0pKTsKLSAgICAgICAgfSk7Ci0gICAgfQotfQotCi0jaWYg
RU5BQkxFKE1BU01fUFJPQkUpCi0KLXN0YXRpYyB2b2lkIGdlbmVyYXRlUHJvYmUoCi0gICAgU3Rh
dGUmIHN0YXRlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgR2VuZXJhdGVkRnVuY3Rpb24gZ2VuZXJh
dGVkRnVuY3Rpb24sCi0gICAgU3RhY2tNYXBzOjpSZWNvcmRNYXAmIHJlY29yZE1hcCwgUHJvYmVE
ZXNjcmlwdG9yJiBpYykKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS5ncmFwaC5tX3ZtOwotICAgIHNp
emVfdCBzaXplT2ZJQyA9IHNpemVPZlByb2JlKCk7Ci0KLSAgICBTdGFja01hcHM6OlJlY29yZE1h
cDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKGljLnN0YWNrbWFwSUQoKSk7Ci0gICAg
aWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKQotICAgICAgICByZXR1cm47IC8vIEl0IHdhcyBv
cHRpbWl6ZWQgb3V0LgotCi0gICAgQ0NhbGxIZWxwZXJzIGZhc3RQYXRoSklUKCZ2bSwgY29kZUJs
b2NrKTsKLSAgICBWZWN0b3I8U3RhY2tNYXBzOjpSZWNvcmRBbmRJbmRleD4mIHJlY29yZHMgPSBp
dGVyLT52YWx1ZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSByZWNvcmRzLnNpemUoKTsgaS0tOykg
ewotICAgICAgICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gcmVjb3Jkc1tpXS5yZWNvcmQ7
Ci0KLSAgICAgICAgZmFzdFBhdGhKSVQucHJvYmUoaWMucHJvYmVGdW5jdGlvbigpKTsKLSAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmUgPSBmYXN0UGF0aEpJVC5qdW1wKCk7Ci0KLSAgICAg
ICAgY2hhciogc3RhcnRPZklDID0gYml0d2lzZV9jYXN0PGNoYXIqPihnZW5lcmF0ZWRGdW5jdGlv
bikgKyByZWNvcmQuaW5zdHJ1Y3Rpb25PZmZzZXQ7Ci0gICAgICAgIGdlbmVyYXRlSW5saW5lSWZQ
b3NzaWJsZU91dE9mTGluZUlmTm90KHN0YXRlLCB2bSwgY29kZUJsb2NrLCBmYXN0UGF0aEpJVCwg
c3RhcnRPZklDLCBzaXplT2ZJQywgIlByb2JlIiwgWyZdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
LCBDQ2FsbEhlbHBlcnMmLCBib29sKSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZG9u
ZSwgQ29kZUxvY2F0aW9uTGFiZWwoc3RhcnRPZklDICsgc2l6ZU9mSUMpKTsKLSAgICAgICAgfSk7
Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKE1BU01fUFJPQkUpCi0KLXN0YXRpYyBSZWdp
c3RlclNldCB1c2VkUmVnaXN0ZXJzRm9yKGNvbnN0IFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQp
Ci17Ci0gICAgaWYgKE9wdGlvbnM6OmFzc3VtZUFsbFJlZ3NJbkZUTElDQXJlTGl2ZSgpKQotICAg
ICAgICByZXR1cm4gUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpOwotICAgIHJldHVybiBSZWdp
c3RlclNldChyZWNvcmQudXNlZFJlZ2lzdGVyU2V0KCksIFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZl
UmVnaXN0ZXJzKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsVHlwZT4KLXZvaWQgYWRq
dXN0Q2FsbElDc0ZvclN0YWNrbWFwcyhWZWN0b3I8Q2FsbFR5cGU+JiBjYWxscywgU3RhY2tNYXBz
OjpSZWNvcmRNYXAmIHJlY29yZE1hcCwgRXhjZXB0aW9uSGFuZGxlck1hbmFnZXImIGV4Y2VwdGlv
bkhhbmRsZXJNYW5hZ2VyKQotewotICAgIC8vIEhhbmRsaW5nIEpTIGNhbGxzIGlzIHdlaXJkOiB3
ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIHNvcnQgdGhlbSBieSB0aGUgUEMgaW4gTExWTQotICAg
IC8vIGdlbmVyYXRlZCBjb2RlLiBUaGF0IGltcGxpZXMgZmlyc3QgcHJ1bmluZyB0aGUgb25lcyB0
aGF0IExMVk0gZGlkbid0IGdlbmVyYXRlLgotCi0gICAgVmVjdG9yPENhbGxUeXBlPiBvbGRDYWxs
czsKLSAgICBvbGRDYWxscy5zd2FwKGNhbGxzKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgb2xkQ2FsbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQ2FsbFR5cGUmIGNhbGwg
PSBvbGRDYWxsc1tpXTsKLSAgICAgICAgCi0gICAgICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwOjpp
dGVyYXRvciBpdGVyID0gcmVjb3JkTWFwLmZpbmQoY2FsbC5zdGFja21hcElEKCkpOwotICAgICAg
ICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBpdGVyLT52YWx1ZS5zaXpl
KCk7ICsraikgewotICAgICAgICAgICAgQ2FsbFR5cGUgY29weSA9IGNhbGw7Ci0gICAgICAgICAg
ICBjb3B5Lm1faW5zdHJ1Y3Rpb25PZmZzZXQgPSBpdGVyLT52YWx1ZVtqXS5yZWNvcmQuaW5zdHJ1
Y3Rpb25PZmZzZXQ7Ci0gICAgICAgICAgICBjb3B5LnNldENhbGxTaXRlSW5kZXgoZXhjZXB0aW9u
SGFuZGxlck1hbmFnZXIucHJvY3VyZUNhbGxTaXRlSW5kZXgoaXRlci0+dmFsdWVbal0uaW5kZXgs
IGNvcHkpKTsKLSAgICAgICAgICAgIGNvcHkuc2V0Q29ycmVzcG9uZGluZ0dlbmVyaWNVbndpbmRP
U1JFeGl0KGV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmdldENhbGxPU1JFeGl0KGl0ZXItPnZhbHVl
W2pdLmluZGV4LCBjb3B5KSk7Ci0KLSAgICAgICAgICAgIGNhbGxzLmFwcGVuZChjb3B5KTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHN0ZDo6c29ydChjYWxscy5iZWdpbigpLCBjYWxscy5lbmQo
KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKLSAgICBT
dGF0ZSYgc3RhdGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlKiBqaXRDb2RlLCBHZW5l
cmF0ZWRGdW5jdGlvbiBnZW5lcmF0ZWRGdW5jdGlvbiwKLSAgICBTdGFja01hcHM6OlJlY29yZE1h
cCYgcmVjb3JkTWFwKQotewotICAgIEdyYXBoJiBncmFwaCA9IHN0YXRlLmdyYXBoOwotICAgIFZN
JiB2bSA9IGdyYXBoLm1fdm07Ci0gICAgU3RhY2tNYXBzJiBzdGFja21hcHMgPSBqaXRDb2RlLT5z
dGFja21hcHM7Ci0KLSAgICBFeGNlcHRpb25IYW5kbGVyTWFuYWdlciBleGNlcHRpb25IYW5kbGVy
TWFuYWdlcihzdGF0ZSk7Ci0gICAgCi0gICAgaW50IGxvY2Fsc09mZnNldCA9IG9mZnNldE9mU3Rh
Y2tSZWdpb24ocmVjb3JkTWFwLCBzdGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQpICsgZ3JhcGgubV9u
ZXh0TWFjaGluZUxvY2FsOwotICAgIGludCB2YXJhcmdzU3BpbGxTbG90c09mZnNldCA9IG9mZnNl
dE9mU3RhY2tSZWdpb24ocmVjb3JkTWFwLCBzdGF0ZS52YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFw
SUQpOwotICAgIGludCBvc3JFeGl0RnJvbUdlbmVyaWNVbndpbmRTdGFja1NwaWxsU2xvdCAgPSBv
ZmZzZXRPZlN0YWNrUmVnaW9uKHJlY29yZE1hcCwgc3RhdGUuZXhjZXB0aW9uSGFuZGxpbmdTcGls
bFNsb3RTdGFja21hcElEKTsKLSAgICBqaXRDb2RlLT5vc3JFeGl0RnJvbUdlbmVyaWNVbndpbmRT
dGFja1NwaWxsU2xvdCA9IG9zckV4aXRGcm9tR2VuZXJpY1Vud2luZFN0YWNrU3BpbGxTbG90Owot
ICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IGdyYXBoLm1faW5saW5lVmFyaWFibGVEYXRhLnNp
emUoKTsgaS0tOykgewotICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9
IGdyYXBoLm1faW5saW5lVmFyaWFibGVEYXRhW2ldLmlubGluZUNhbGxGcmFtZTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1Zh
bGlkKCkpCi0gICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rl
ciArPSBsb2NhbHNPZmZzZXQ7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3Vt
ZW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOyBhcmd1bWVudC0tID4gMTsp
IHsKLSAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzW2FyZ3VtZW50XSA9Ci0g
ICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNbYXJndW1lbnRdLndpdGhM
b2NhbHNPZmZzZXQobG9jYWxzT2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
aWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewotICAgICAgICAgICAgaW5saW5l
Q2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeSA9Ci0gICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZy
YW1lLT5jYWxsZWVSZWNvdmVyeS53aXRoTG9jYWxzT2Zmc2V0KGxvY2Fsc09mZnNldCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoZ3JhcGguaGFzRGVidWdnZXJFbmFibGVkKCkpCi0gICAgICAg
ICAgICBjb2RlQmxvY2stPnNldFNjb3BlUmVnaXN0ZXIoY29kZUJsb2NrLT5zY29wZVJlZ2lzdGVy
KCkgKyBsb2NhbHNPZmZzZXQpOwotICAgIH0KLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgc3RhY2tPdmVyZmxvd0V4Y2VwdGlvbjsKLQotICAgIHsKLSAgICAgICAgQ0NhbGxIZWxwZXJz
IGNoZWNrSklUKCZ2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEF0IHRoaXMg
cG9pbnQgaXQncyBwZXJmZWN0bHkgZmFpciB0byBqdXN0IGJsb3cgYXdheSBhbGwgc3RhdGUgYW5k
IHJlc3RvcmUgdGhlCi0gICAgICAgIC8vIEpTIEpJVCB2aWV3IG9mIHRoZSB1bml2ZXJzZS4KLSAg
ICAgICAgY2hlY2tKSVQuY29weUNhbGxlZVNhdmVzVG9WTUNhbGxlZVNhdmVzQnVmZmVyKCk7Ci0g
ICAgICAgIGNoZWNrSklULm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJnZtKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgY2hlY2tKSVQubW92ZShHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbExvb2t1cEV4Y2VwdGlvbkhhbmRsZXIgPSBjaGVja0pJVC5jYWxs
KCk7Ci0gICAgICAgIGNoZWNrSklULmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKLQotICAgICAg
ICBzdGFja092ZXJmbG93RXhjZXB0aW9uID0gY2hlY2tKSVQubGFiZWwoKTsKLSAgICAgICAgY2hl
Y2tKSVQuY29weUNhbGxlZVNhdmVzVG9WTUNhbGxlZVNhdmVzQnVmZmVyKCk7Ci0gICAgICAgIGNo
ZWNrSklULm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKLSAgICAgICAgY2hlY2tKSVQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgY2FsbExvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgPSBjaGVja0pJ
VC5jYWxsKCk7Ci0gICAgICAgIGNoZWNrSklULmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKLQot
ICAgICAgICBhdXRvIGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtCdWZmZXI+KAot
ICAgICAgICAgICAgdm0sIGNoZWNrSklULCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFp
bCk7Ci0gICAgICAgIGlmIChsaW5rQnVmZmVyLT5kaWRGYWlsVG9BbGxvY2F0ZSgpKSB7Ci0gICAg
ICAgICAgICBzdGF0ZS5hbGxvY2F0aW9uRmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxMb29rdXBFeGNlcHRp
b25IYW5kbGVyLCBGdW5jdGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSk7Ci0gICAgICAg
IGxpbmtCdWZmZXItPmxpbmsoY2FsbExvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJh
bWUsIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUpKTsK
LQotICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPmhhbmRsZUV4Y2VwdGlvbnNMaW5rQnVmZmVyID0g
V1RGTW92ZShsaW5rQnVmZmVyKTsKLSAgICB9Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5q
aXRDb2RlLT5vc3JFeGl0LnNpemUoKSA9PSAwKTsKLSAgICBIYXNoTWFwPE9TUkV4aXREZXNjcmlw
dG9yKiwgT1NSRXhpdERlc2NyaXB0b3JJbXBsKj4gZ2VuZXJpY1Vud2luZE9TUkV4aXREZXNjcmlw
dG9yczsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUuaml0Q29kZS0+b3NyRXhp
dERlc2NyaXB0b3JzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIE9TUkV4aXREZXNjcmlwdG9yKiBl
eGl0RGVzY3JpcHRvciA9ICZzdGF0ZS5qaXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRvcnNbaV07Ci0g
ICAgICAgIGF1dG8gaXRlciA9IHJlY29yZE1hcC5maW5kKGV4aXREZXNjcmlwdG9yLT5tX3N0YWNr
bWFwSUQpOwotICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpIHsKLSAgICAgICAg
ICAgIC8vIEl0IHdhcyBvcHRpbWl6ZWQgb3V0LgotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBPU1JFeGl0RGVzY3JpcHRvckltcGwmIGV4aXREZXNjcmlwdG9ySW1w
bCA9IHN0YXRlLm9zckV4aXREZXNjcmlwdG9ySW1wbHNbaV07Ci0gICAgICAgIGlmIChleGl0RGVz
Y3JpcHRvckltcGwubV9raW5kID09IEdlbmVyaWNVbndpbmQpCi0gICAgICAgICAgICBnZW5lcmlj
VW53aW5kT1NSRXhpdERlc2NyaXB0b3JzLmFkZChleGl0RGVzY3JpcHRvciwgJmV4aXREZXNjcmlw
dG9ySW1wbCk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gZXhpdERlc2NyaXB0b3ItPm1f
dmFsdWVzLnNpemUoKTsgai0tOykKLSAgICAgICAgICAgIGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVl
c1tqXSA9IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlc1tqXS53aXRoTG9jYWxzT2Zmc2V0KGxvY2Fs
c09mZnNldCk7Ci0gICAgICAgIGZvciAoRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG1h
dGVyaWFsaXphdGlvbiA6IGV4aXREZXNjcmlwdG9yLT5tX21hdGVyaWFsaXphdGlvbnMpCi0gICAg
ICAgICAgICBtYXRlcmlhbGl6YXRpb24tPmFjY291bnRGb3JMb2NhbHNPZmZzZXQobG9jYWxzT2Zm
c2V0KTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgaXRlci0+dmFsdWUuc2l6
ZSgpOyBqKyspIHsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1aW50MzJfdCBzdGFj
a21hcFJlY29yZEluZGV4ID0gaXRlci0+dmFsdWVbal0uaW5kZXg7Ci0gICAgICAgICAgICAgICAg
T1NSRXhpdCBleGl0KGV4aXREZXNjcmlwdG9yLCBleGl0RGVzY3JpcHRvckltcGwubV9raW5kLCBl
eGl0RGVzY3JpcHRvckltcGwsIHN0YWNrbWFwUmVjb3JkSW5kZXgpOwotICAgICAgICAgICAgICAg
IHN0YXRlLmppdENvZGUtPm9zckV4aXQuYXBwZW5kKGV4aXQpOwotICAgICAgICAgICAgICAgIHN0
YXRlLmZpbmFsaXplci0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IHN0YXRlLmppdENv
ZGUtPm9zckV4aXQubGFzdCgpOwotICAgICAgICAgICAgaWYgKGV4aXQud2lsbEFycml2ZUF0RXhp
dEZyb21JbmRpcmVjdEV4Y2VwdGlvbkNoZWNrKCkpIHsKLSAgICAgICAgICAgICAgICBTdGFja01h
cHM6OlJlY29yZCYgcmVjb3JkID0gaXRlci0+dmFsdWVbal0ucmVjb3JkOwotICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGV4aXREZXNjcmlwdG9ySW1wbC5tX3NlbWFudGljQ29kZU9yaWdp
bkZvckNhbGxGcmFtZUhlYWRlci5pc1NldCgpKTsKLSAgICAgICAgICAgICAgICBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXggPSBzdGF0ZS5qaXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNp
dGVJbmRleChleGl0RGVzY3JpcHRvckltcGwubV9zZW1hbnRpY0NvZGVPcmlnaW5Gb3JDYWxsRnJh
bWVIZWFkZXIpOwotICAgICAgICAgICAgICAgIGV4aXQubV9leGNlcHRpb25IYW5kbGVyQ2FsbFNp
dGVJbmRleCA9IGNhbGxTaXRlSW5kZXg7Ci0KLSAgICAgICAgICAgICAgICBPU1JFeGl0KiBjYWxs
T3BlcmF0aW9uRXhpdCA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgaWYgKGV4aXREZXNjcmlw
dG9ySW1wbC5tX2V4Y2VwdGlvblR5cGUgPT0gRXhjZXB0aW9uVHlwZTo6QmluYXJ5T3BHZW5lcmF0
b3IpIHsKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuYWRkTmV3
Q2FsbE9wZXJhdGlvbkV4aXQoaXRlci0+dmFsdWVbal0uaW5kZXgsIHN0YXRlLmppdENvZGUtPm9z
ckV4aXQuc2l6ZSgpIC0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25FeGl0
ID0gJmV4aXQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGV4
Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmFkZE5ld0V4aXQoaXRlci0+dmFsdWVbal0uaW5kZXgsIHN0
YXRlLmppdENvZGUtPm9zckV4aXQuc2l6ZSgpIC0gMSk7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgaWYgKGV4aXREZXNjcmlwdG9ySW1wbC5tX2V4Y2VwdGlvblR5cGUgPT0gRXhj
ZXB0aW9uVHlwZTo6R2V0QnlJZCB8fCBleGl0RGVzY3JpcHRvckltcGwubV9leGNlcHRpb25UeXBl
ID09IEV4Y2VwdGlvblR5cGU6OlB1dEJ5SWQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2Ug
Y3JlYXRlIHR3byBkaWZmZXJlbnQgT1NSRXhpdHMgZm9yIEdldEJ5SWQgYW5kIFB1dEJ5SWQuCi0g
ICAgICAgICAgICAgICAgICAgIC8vIE9uZSBleGl0IHRoYXQgd2lsbCBiZSBhcnJpdmVkIGF0IGZy
b20gdGhlIGdlbmVyaWNVbndpbmQgZXhjZXB0aW9uIGhhbmRsZXIgcGF0aCwKLSAgICAgICAgICAg
ICAgICAgICAgLy8gYW5kIHRoZSBvdGhlciB0aGF0IHdpbGwgYmUgYXJyaXZlZCBhdCBmcm9tIHRo
ZSBjYWxsT3BlcmF0aW9uIGV4Y2VwdGlvbiBoYW5kbGVyIHBhdGguCi0gICAgICAgICAgICAgICAg
ICAgIC8vIFRoaXMgY29kZSBoZXJlIGdlbmVyYXRlcyB0aGUgc2Vjb25kIGNhbGxPcGVyYXRpb24g
dmFyaWFudC4KLSAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRl
eCA9IGl0ZXItPnZhbHVlW2pdLmluZGV4OwotICAgICAgICAgICAgICAgICAgICBPU1JFeGl0IGV4
aXQoZXhpdERlc2NyaXB0b3IsIEV4Y2VwdGlvbkNoZWNrLCBleGl0RGVzY3JpcHRvckltcGwsIHN0
YWNrbWFwUmVjb3JkSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZXhpdERlc2NyaXB0
b3JJbXBsLm1fZXhjZXB0aW9uVHlwZSA9PSBFeGNlcHRpb25UeXBlOjpHZXRCeUlkKQotICAgICAg
ICAgICAgICAgICAgICAgICAgZXhpdC5tX2V4Y2VwdGlvblR5cGUgPSBFeGNlcHRpb25UeXBlOjpH
ZXRCeUlkQ2FsbE9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICAgICAgZXhpdC5tX2V4Y2VwdGlvblR5cGUgPSBFeGNlcHRpb25UeXBlOjpQdXRC
eUlkQ2FsbE9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZUluZGV4ID0gc3RhdGUuaml0Q29kZS0+Y29tbW9uLmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgo
ZXhpdERlc2NyaXB0b3JJbXBsLm1fc2VtYW50aWNDb2RlT3JpZ2luRm9yQ2FsbEZyYW1lSGVhZGVy
KTsKLSAgICAgICAgICAgICAgICAgICAgZXhpdC5tX2V4Y2VwdGlvbkhhbmRsZXJDYWxsU2l0ZUlu
ZGV4ID0gY2FsbFNpdGVJbmRleDsKLQotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5qaXRDb2Rl
LT5vc3JFeGl0LmFwcGVuZChleGl0KTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuZmluYWxp
emVyLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwotCi0gICAgICAg
ICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmFkZE5ld0NhbGxPcGVyYXRpb25F
eGl0KGl0ZXItPnZhbHVlW2pdLmluZGV4LCBzdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSAt
IDEpOwotICAgICAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uRXhpdCA9ICZzdGF0ZS5qaXRD
b2RlLT5vc3JFeGl0Lmxhc3QoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAvLyBCaW5hcnlPcHMgYW5kIEdldEJ5SWRzIGhhdmUgYW4gaW50ZXJlc3RpbmcgcmVnaXN0ZXIg
cHJlc2VydmF0aW9uIHN0b3J5LAotICAgICAgICAgICAgICAgIC8vIHNlZSBjb21tZW50IGJlbG93
IGF0IEdldEJ5SWQgdG8gcmVhZCBhYm91dCBpdC4KLSAgICAgICAgICAgICAgICAvLwotICAgICAg
ICAgICAgICAgIC8vIFdlIHNldCB0aGUgcmVnaXN0ZXJzIG5lZWRpbmcgc3BpbGxhZ2UgaGVyZSBi
ZWNhdXNlIHRoZXkgbmVlZCB0byBiZSBzZXQKLSAgICAgICAgICAgICAgICAvLyBiZWZvcmUgd2Ug
Z2VuZXJhdGUgT1NSIGV4aXRzIHNvIHRoZSBleGl0IGtub3dzIHRvIGRvIHRoZSBwcm9wZXIgcmVj
b3ZlcnkuCi0gICAgICAgICAgICAgICAgaWYgKGV4aXREZXNjcmlwdG9ySW1wbC5tX2V4Y2VwdGlv
blR5cGUgPT0gRXhjZXB0aW9uVHlwZTo6SlNDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IENhbGwgcGF0Y2hwb2ludHMgbWlnaHQgaGF2ZSB2YWx1ZXMgd2Ugd2FudCB0byBkbyB2YWx1ZSBy
ZWNvdmVyeQotICAgICAgICAgICAgICAgICAgICAvLyBvbiBpbnNpZGUgdm9sYXRpbGUgcmVnaXN0
ZXJzLiBXZSBuZWVkIHRvIGNvbGxlY3QgdGhlIHZvbGF0aWxlCi0gICAgICAgICAgICAgICAgICAg
IC8vIHJlZ2lzdGVycyB3ZSB3YW50IHRvIGRvIHZhbHVlIHJlY292ZXJ5IG9uIGhlcmUgYmVjYXVz
ZSB0aGV5IG11c3QKLSAgICAgICAgICAgICAgICAgICAgLy8gYmUgcHJlc2VydmVkIHRvIHRoZSBz
dGFjayBiZWZvcmUgdGhlIGNhbGwsIHRoYXQgd2F5IHRoZSBPU1IgZXhpdAotICAgICAgICAgICAg
ICAgICAgICAvLyBleGNlcHRpb24gaGFuZGxlciBjYW4gcmVjb3ZlciB0aGVtIGludG8gdGhlIHBy
b3BlciByZWdpc3RlcnMuCi0gICAgICAgICAgICAgICAgICAgIGV4aXQuZ2F0aGVyUmVnaXN0ZXJz
VG9TcGlsbEZvckNhbGxJZkV4Y2VwdGlvbihzdGFja21hcHMsIHJlY29yZCk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChleGl0RGVzY3JpcHRvckltcGwubV9leGNlcHRpb25UeXBlID09IEV4
Y2VwdGlvblR5cGU6OkdldEJ5SWQgfHwgZXhpdERlc2NyaXB0b3JJbXBsLm1fZXhjZXB0aW9uVHlw
ZSA9PSBFeGNlcHRpb25UeXBlOjpCaW5hcnlPcEdlbmVyYXRvcikgewotICAgICAgICAgICAgICAg
ICAgICBHUFJSZWcgcmVzdWx0ID0gcmVjb3JkLmxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKTsKLSAg
ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcmVnaXN0ZXJzTmVlZGVkRm9yT1NSRXhpdCA9
IHJlY29yZC51c2VkUmVnaXN0ZXJTZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlZ2lz
dGVyc05lZWRlZEZvck9TUkV4aXQuZ2V0KHJlc3VsdCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uRXhpdC0+cmVnaXN0ZXJzVG9QcmVzZXJ2ZUZvckNhbGxUaGF0TWlnaHRU
aHJvdy5zZXQocmVzdWx0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgRXhpdFRodW5rR2VuZXJhdG9yIGV4aXRUaHVua0dlbmVyYXRvcihz
dGF0ZSk7Ci0gICAgZXhpdFRodW5rR2VuZXJhdG9yLmVtaXRUaHVua3MoKTsKLSAgICBpZiAoZXhp
dFRodW5rR2VuZXJhdG9yLmRpZFRoaW5ncygpKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0
YXRlLmZpbmFsaXplci0+b3NyRXhpdC5zaXplKCkpOwotICAgICAgICAKLSAgICAgICAgYXV0byBs
aW5rQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPigKLSAgICAgICAgICAgIHZt
LCBleGl0VGh1bmtHZW5lcmF0b3IsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsK
LSAgICAgICAgaWYgKGxpbmtCdWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKLSAgICAgICAg
ICAgIHN0YXRlLmFsbG9jYXRpb25GYWlsZWQgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5maW5hbGl6
ZXItPm9zckV4aXQuc2l6ZSgpID09IHN0YXRlLmppdENvZGUtPm9zckV4aXQuc2l6ZSgpKTsKLSAg
ICAgICAgCi0gICAgICAgIGNvZGVCbG9jay0+Y2xlYXJFeGNlcHRpb25IYW5kbGVycygpOwotCi0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0g
c3RhdGUuZmluYWxpemVyLT5vc3JFeGl0W2ldOwotICAgICAgICAgICAgT1NSRXhpdCYgZXhpdCA9
IHN0YXRlLmppdENvZGUtPm9zckV4aXRbaV07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
ICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygi
SGFuZGxpbmcgT1NSIHN0YWNrbWFwICMiLCBleGl0Lm1fZGVzY3JpcHRvci0+bV9zdGFja21hcElE
LCAiIGZvciAiLCBleGl0Lm1fY29kZU9yaWdpbiwgIlxuIik7Ci0KLSAgICAgICAgICAgIGluZm8u
bV90aHVua0FkZHJlc3MgPSBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGluZm8ubV90aHVua0xhYmVs
KTsKLSAgICAgICAgICAgIGV4aXQubV9wYXRjaGFibGVDb2RlT2Zmc2V0ID0gbGlua0J1ZmZlci0+
b2Zmc2V0T2YoaW5mby5tX3RodW5rSnVtcCk7Ci0KLSAgICAgICAgICAgIGlmIChleGl0LmlzR2Vu
ZXJpY1Vud2luZEhhbmRsZXIoKSkgewotICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvIG5ld0hh
bmRsZXIgPSBnZW5lcmljVW53aW5kT1NSRXhpdERlc2NyaXB0b3JzLmdldChleGl0Lm1fZGVzY3Jp
cHRvciktPm1fYmFzZWxpbmVFeGNlcHRpb25IYW5kbGVyOwotICAgICAgICAgICAgICAgIG5ld0hh
bmRsZXIuc3RhcnQgPSBleGl0Lm1fZXhjZXB0aW9uSGFuZGxlckNhbGxTaXRlSW5kZXguYml0cygp
OwotICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIuZW5kID0gZXhpdC5tX2V4Y2VwdGlvbkhhbmRs
ZXJDYWxsU2l0ZUluZGV4LmJpdHMoKSArIDE7Ci0gICAgICAgICAgICAgICAgbmV3SGFuZGxlci5u
YXRpdmVDb2RlID0gaW5mby5tX3RodW5rQWRkcmVzczsKLSAgICAgICAgICAgICAgICBjb2RlQmxv
Y2stPmFwcGVuZEV4Y2VwdGlvbkhhbmRsZXIobmV3SGFuZGxlcik7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAg
ICAgICAgICBEdW1wQ29udGV4dCBjb250ZXh0OwotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICBFeGl0IHZhbHVlczogIiwgaW5Db250ZXh0KGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcywg
JmNvbnRleHQpLCAiXG4iKTsKLSAgICAgICAgICAgICAgICBpZiAoIWV4aXQubV9kZXNjcmlwdG9y
LT5tX21hdGVyaWFsaXphdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICBNYXRlcmlhbGl6YXRpb25zOiBcbiIpOwotICAgICAgICAgICAgICAgICAgICBm
b3IgKEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiBleGl0
Lm1fZGVzY3JpcHRvci0+bV9tYXRlcmlhbGl6YXRpb25zKQotICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgICAgICBNYXRlcmlhbGl6ZSgiLCBwb2ludGVyRHVtcChtYXRlcmlhbGl6
YXRpb24pLCAiKVxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPmV4aXRUaHVua3NMaW5rQnVm
ZmVyID0gV1RGTW92ZShsaW5rQnVmZmVyKTsKLSAgICB9Ci0KLSAgICBpZiAoIXN0YXRlLmdldEJ5
SWRzLmlzRW1wdHkoKQotICAgICAgICB8fCAhc3RhdGUucHV0QnlJZHMuaXNFbXB0eSgpCi0gICAg
ICAgIHx8ICFzdGF0ZS5jaGVja0lucy5pc0VtcHR5KCkKLSAgICAgICAgfHwgIXN0YXRlLmJpbmFy
eU9wcy5pc0VtcHR5KCkKLSAgICAgICAgfHwgIXN0YXRlLmxhenlTbG93UGF0aHMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIENDYWxsSGVscGVycyBzbG93UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7Ci0g
ICAgICAgIAotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvblRhcmdldDsK
LQotICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPENDYWxsSGVscGVyczo6SnVtcExpc3QsIENvZGVM
b2NhdGlvbkxhYmVsPj4gZXhjZXB0aW9uSnVtcHNUb0xpbms7Ci0gICAgICAgIGF1dG8gYWRkTmV3
RXhjZXB0aW9uSnVtcElmTmVjZXNzYXJ5ID0gWyZdICh1aW50MzJfdCByZWNvcmRJbmRleCkgewot
ICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uVGFyZ2V0ID0gZXhjZXB0aW9u
SGFuZGxlck1hbmFnZXIuY2FsbE9wZXJhdGlvbkV4Y2VwdGlvblRhcmdldChyZWNvcmRJbmRleCk7
Ci0gICAgICAgICAgICBpZiAoIWV4Y2VwdGlvblRhcmdldCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICBleGNlcHRpb25KdW1wc1RvTGluay5hcHBlbmQoCi0gICAg
ICAgICAgICAgICAgc3RkOjptYWtlX3BhaXIoQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCgpLCBleGNl
cHRpb25UYXJnZXQpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9OwotICAg
ICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUuZ2V0QnlJZHMuc2l6ZSgpOyBp
LS07KSB7Ci0gICAgICAgICAgICBHZXRCeUlkRGVzY3JpcHRvciYgZ2V0QnlJZCA9IHN0YXRlLmdl
dEJ5SWRzW2ldOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0
aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIkhhbmRsaW5nIEdldEJ5SWQg
c3RhY2ttYXAgIyIsIGdldEJ5SWQuc3RhY2ttYXBJRCgpLCAiXG4iKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgYXV0byBpdGVyID0gcmVjb3JkTWFwLmZpbmQoZ2V0QnlJZC5zdGFja21hcElE
KCkpOwotICAgICAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gSXQgd2FzIG9wdGltaXplZCBvdXQuCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiA9IGdldEJ5SWQuY29kZU9yaWdpbigpOwotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGl0ZXItPnZhbHVlLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCA9IGl0ZXItPnZhbHVlW2ldLnJlY29yZDsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1
c2VkUmVnaXN0ZXJzRm9yKHJlY29yZCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgR1BSUmVnIHJlc3VsdCA9IHJlY29yZC5sb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCk7Ci0gICAg
ICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWNvcmQubG9jYXRpb25zWzFdLmRpcmVjdEdQUigp
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGV4Y2VwdGlv
bkhhbmRsZXJNYW5hZ2VyLnByb2N1cmVDYWxsU2l0ZUluZGV4KGl0ZXItPnZhbHVlW2ldLmluZGV4
LCBjb2RlT3JpZ2luKSwgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MoYmFzZSksCi0gICAgICAg
ICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdCkpOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGJvb2wgYWRkZWRVbmlxdWVFeGNlcHRpb25KdW1wID0gYWRkTmV3RXhjZXB0
aW9uSnVtcElmTmVjZXNzYXJ5KGl0ZXItPnZhbHVlW2ldLmluZGV4KTsKLSAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgYmVnaW4gPSBzbG93UGF0aEpJVC5sYWJlbCgpOwotICAg
ICAgICAgICAgICAgIC8vIFdlIHRha2UgY2FyZSB0byBhbHdheXMgc3BpbGwgdGhlIHJlc3VsdCB3
aGVuZXZlciB3ZSBuZWVkIHRvIGRvIHZhbHVlIHJlY292ZXJ5Ci0gICAgICAgICAgICAgICAgLy8g
b24gaXQgaW4gdGhlIE9TUiBleGl0LiBUaGlzIGlzIGJlY2F1c2UgdGhlIGNhbGxPcGVyYXRpb24o
LikgbWFjaGluZXJ5IGRvZXNuJ3QKLSAgICAgICAgICAgICAgICAvLyBldmVyIHNwaWxsIHRoZSBy
ZXN1bHQgdmFsdWUuIEl0IGFjdHVhbGx5IHRha2VzIGNhcmUgdG8gbmV2ZXIgc3BpbGwgdGhlIHJl
c3VsdAotICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgaXQgb3ZlcndyaXRlcyBpdCB3aXRoIHRo
ZSByZXN1bHQgb2YgdGhlIGNhbGwuIEJ1dCwgd2l0aCBleGNlcHRpb25zIGFuZAotICAgICAgICAg
ICAgICAgIC8vIE9TUiBleGl0cywgd2UgbWF5IG5lZWQgdGhlIHJlc3VsdCB2YWx1ZSBwcmlvciB0
byB0aGUgY2FsbCBkdXJpbmcgT1NSIGV4aXQuCi0gICAgICAgICAgICAgICAgLy8gV2UgdGFrZSBj
YXJlIHRvIG1hcmsgaXQgZm9yIHNwaWxsYWdlIG5vdy4KLSAgICAgICAgICAgICAgICAvLwotICAg
ICAgICAgICAgICAgIC8vIFRoaXMgYWxzbyBoYW5kbGVzIGFub3RoZXIgcmVhbGx5IGludGVyZXN0
aW5nIHJlZ2lzdGVyIHByZXNlcnZhdGlvbiBzdG9yeTogCi0gICAgICAgICAgICAgICAgLy8gV2Ug
bWF5IGhhdmUgYSBHZXRCeUlkL1NuaXBwZXQgaW5zaWRlIGEgdHJ5IGJsb2NrIHdoZXJlIExMVk0g
YXNzaWducyB0aGUgcmVzdWx0Ci0gICAgICAgICAgICAgICAgLy8gYW5kIHRoZSBiYXNlIHRvIHRo
ZSBzYW1lIHJlZ2lzdGVyLiBUaGUgaW5saW5lIGNhY2hlIG1heSBtaXNzIGFuZCB3ZSBtYXkgZW5k
IHVwCi0gICAgICAgICAgICAgICAgLy8gYXQgdGhpcyBzbG93IHBhdGggY2FsbE9wZXJhdGlvbi4g
VGhlbiwgYmVjYXVzZSB0aGUgYmFzZSBhbmQgdGhlIHJlc3VsdCBhcmUgYm90aAotICAgICAgICAg
ICAgICAgIC8vIHRoZSBzYW1lIHJlZ2lzdGVyLCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBDIGNh
bGwgZ2V0cyBzdG9yZWQgaW50byB0aGUgb3JpZ2luYWwKLSAgICAgICAgICAgICAgICAvLyBiYXNl
IHJlZ2lzdGVyLiBJZiB0aGUgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplIHRocm93cywgaXQgd2ls
bCByZXR1cm4gInVuZGVmaW5lZCIKLSAgICAgICAgICAgICAgICAvLyBhbmQgd2Ugd2lsbCBiZSBz
dHVjayB3aXRoICJ1bmRlZmluZWQiIGluIHRoZSBiYXNlIHJlZ2lzdGVyIHRoYXQgd2Ugd291bGQg
bGlrZSB0byAKLSAgICAgICAgICAgICAgICAvLyBkbyB2YWx1ZSByZWNvdmVyeSBvbi4gV2UgY29t
YmF0IHRoaXMgc2l0dWF0aW9uIGZyb20gZXZlciB0YWtpbmcgcGxhY2UgYnkgZW5zdXJpbmcKLSAg
ICAgICAgICAgICAgICAvLyB3ZSBzcGlsbCB0aGUgb3JpZ2luYWwgYmFzZSB2YWx1ZSAoaS5lIHRo
ZSByZXN1bHQgcmVnaXN0ZXIpLgotICAgICAgICAgICAgICAgIGlmIChPU1JFeGl0KiBleGl0ID0g
ZXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuY2FsbE9wZXJhdGlvbk9TUkV4aXQoaXRlci0+dmFsdWVb
aV0uaW5kZXgpKQotICAgICAgICAgICAgICAgICAgICBleGl0LT5zcGlsbFJlZ2lzdGVyc1RvU3Bp
bGxTbG90KHNsb3dQYXRoSklULCBvc3JFeGl0RnJvbUdlbmVyaWNVbndpbmRTdGFja1NwaWxsU2xv
dCk7Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24oCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBzbG93UGF0
aEpJVCwgY29kZU9yaWdpbiwgYWRkZWRVbmlxdWVFeGNlcHRpb25KdW1wID8gJmV4Y2VwdGlvbkp1
bXBzVG9MaW5rLmxhc3QoKS5maXJzdCA6ICZleGNlcHRpb25UYXJnZXQsCi0gICAgICAgICAgICAg
ICAgICAgIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLAotICAgICAgICAgICAgICAgICAgICBiYXNlLCBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2V0QnlJZC51aWQoKSkpLmNhbGwoKTsKLQotICAg
ICAgICAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoYmVnaW4sIGNhbGwpOwotCi0gICAg
ICAgICAgICAgICAgZ2V0QnlJZC5tX3Nsb3dQYXRoRG9uZS5hcHBlbmQoc2xvd1BhdGhKSVQuanVt
cCgpKTsKLSAgICAgICAgICAgICAgICBnZXRCeUlkLm1fZ2VuZXJhdG9ycy5hcHBlbmQoZ2VuKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gc3RhdGUucHV0QnlJZHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBQdXRCeUlk
RGVzY3JpcHRvciYgcHV0QnlJZCA9IHN0YXRlLnB1dEJ5SWRzW2ldOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkhhbmRsaW5nIFB1dEJ5SWQgc3RhY2ttYXAgIyIsIHB1dEJ5SWQuc3RhY2tt
YXBJRCgpLCAiXG4iKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXV0byBpdGVyID0gcmVj
b3JkTWFwLmZpbmQocHV0QnlJZC5zdGFja21hcElEKCkpOwotICAgICAgICAgICAgaWYgKGl0ZXIg
PT0gcmVjb3JkTWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gSXQgd2FzIG9wdGltaXpl
ZCBvdXQuCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IHB1dEJ5SWQuY29kZU9y
aWdpbigpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZXItPnZhbHVl
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29y
ZCA9IGl0ZXItPnZhbHVlW2ldLnJlY29yZDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVyc0ZvcihyZWNvcmQp
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVjb3Jk
LmxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgdmFsdWUg
PSByZWNvcmQubG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgICAgICAg
ICBjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLnByb2N1cmVD
YWxsU2l0ZUluZGV4KGl0ZXItPnZhbHVlW2ldLmluZGV4LCBjb2RlT3JpZ2luKSwgdXNlZFJlZ2lz
dGVycywgSlNWYWx1ZVJlZ3MoYmFzZSksCi0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdz
KHZhbHVlKSwgR1BSSW5mbzo6cGF0Y2hwb2ludFNjcmF0Y2hSZWdpc3RlciwgcHV0QnlJZC5lY21h
TW9kZSgpLCBwdXRCeUlkLnB1dEtpbmQoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgYm9vbCBhZGRlZFVuaXF1ZUV4Y2VwdGlvbkp1bXAgPSBhZGROZXdFeGNlcHRpb25KdW1w
SWZOZWNlc3NhcnkoaXRlci0+dmFsdWVbaV0uaW5kZXgpOwotCi0gICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIGJlZ2luID0gc2xvd1BhdGhKSVQubGFiZWwoKTsKLQotICAgICAg
ICAgICAgICAgIGlmIChPU1JFeGl0KiBleGl0ID0gZXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuY2Fs
bE9wZXJhdGlvbk9TUkV4aXQoaXRlci0+dmFsdWVbaV0uaW5kZXgpKQotICAgICAgICAgICAgICAg
ICAgICBleGl0LT5zcGlsbFJlZ2lzdGVyc1RvU3BpbGxTbG90KHNsb3dQYXRoSklULCBvc3JFeGl0
RnJvbUdlbmVyaWNVbndpbmRTdGFja1NwaWxsU2xvdCk7Ci0KLSAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbigKLSAgICAgICAgICAgICAgICAg
ICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBjb2RlT3JpZ2luLCBhZGRlZFVu
aXF1ZUV4Y2VwdGlvbkp1bXAgPyAmZXhjZXB0aW9uSnVtcHNUb0xpbmsubGFzdCgpLmZpcnN0IDog
JmV4Y2VwdGlvblRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgZ2VuLnNsb3dQYXRoRnVuY3Rp
b24oKSwgSW52YWxpZEdQUlJlZywKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgdmFsdWUsIGJhc2UsCi0gICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihwdXRCeUlkLnVpZCgpKSkuY2FsbCgp
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoYmVnaW4sIGNhbGwpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHB1dEJ5
SWQubV9zbG93UGF0aERvbmUuYXBwZW5kKHNsb3dQYXRoSklULmp1bXAoKSk7Ci0gICAgICAgICAg
ICAgICAgcHV0QnlJZC5tX2dlbmVyYXRvcnMuYXBwZW5kKGdlbik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5jaGVja0lucy5zaXpl
KCk7IGktLTspIHsKLSAgICAgICAgICAgIENoZWNrSW5EZXNjcmlwdG9yJiBjaGVja0luID0gc3Rh
dGUuY2hlY2tJbnNbaV07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2ZXJib3NlQ29t
cGlsYXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcgY2hl
Y2tJbiBzdGFja21hcCAjIiwgY2hlY2tJbi5zdGFja21hcElEKCksICJcbiIpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmluZChjaGVja0luLnN0YWNr
bWFwSUQoKSk7Ci0gICAgICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpIHsKLSAg
ICAgICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luID0gY2hlY2tJbi5jb2RlT3JpZ2luKCk7Ci0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gaXRlci0+dmFsdWVbaV0ucmVjb3Jk
OwotICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0
ZXJzRm9yKHJlY29yZCk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHJlY29yZC5s
b2NhdGlvbnNbMF0uZGlyZWN0R1BSKCk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIG9iaiA9IHJl
Y29yZC5sb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCk7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvID0gY29kZUJsb2NrLT5hZGRTdHViSW5mbyhBY2Nlc3NUeXBlOjpJ
bik7IAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5jb2RlT3JpZ2luID0gY29kZU9yaWdpbjsK
LSAgICAgICAgICAgICAgICBzdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IHN0YXRlLmppdENvZGUt
PmNvbW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4pOwotICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlR1BSID0gc3RhdGljX2Nhc3Q8aW50OF90PihvYmopOwot
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC52YWx1ZUdQUiA9IHN0YXRpY19jYXN0PGlu
dDhfdD4ocmVzdWx0KTsKLSAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2gudXNlZFJlZ2lz
dGVycyA9IHVzZWRSZWdpc3RlcnM7Ci0KLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgYmVnaW4gPSBzbG93UGF0aEpJVC5sYWJlbCgpOwotCi0gICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgc2xvd0NhbGwgPSBjYWxsT3BlcmF0aW9uKAotICAgICAgICAgICAg
ICAgICAgICBzdGF0ZSwgdXNlZFJlZ2lzdGVycywgc2xvd1BhdGhKSVQsIGNvZGVPcmlnaW4sICZl
eGNlcHRpb25UYXJnZXQsCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkluT3B0aW1pemUs
IHJlc3VsdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0dWJJbmZvKSwgb2JqLAotICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2hlY2tJbi51aWQo
KSkpLmNhbGwoKTsKLQotICAgICAgICAgICAgICAgIGNoZWNrSW4ubV9zbG93UGF0aERvbmUuYXBw
ZW5kKHNsb3dQYXRoSklULmp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgY2hlY2tJbi5tX2dlbmVyYXRvcnMuYXBwZW5kKENoZWNrSW5HZW5lcmF0b3Ioc3R1YkluZm8s
IHNsb3dDYWxsLCBiZWdpbikpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IHN0YXRlLmJpbmFyeU9wcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAg
ICAgIEJpbmFyeU9wRGVzY3JpcHRvciYgYmluYXJ5T3AgPSBzdGF0ZS5iaW5hcnlPcHNbaV07Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkp
Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcgIiwgYmluYXJ5T3AubmFtZSgpLCAi
IHN0YWNrbWFwICMiLCBiaW5hcnlPcC5zdGFja21hcElEKCksICJcbiIpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmluZChiaW5hcnlPcC5zdGFja21h
cElEKCkpOwotICAgICAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOyAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gYmluYXJ5T3AuY29kZU9yaWdp
bigpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZXItPnZhbHVlLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCA9
IGl0ZXItPnZhbHVlW2ldLnJlY29yZDsKLSAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2Vk
UmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVyc0ZvcihyZWNvcmQpOwotCi0gICAgICAgICAgICAgICAg
R1BSUmVnIHJlc3VsdCA9IHJlY29yZC5sb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCk7Ci0gICAgICAg
ICAgICAgICAgR1BSUmVnIGxlZnQgPSByZWNvcmQubG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwot
ICAgICAgICAgICAgICAgIEdQUlJlZyByaWdodCA9IHJlY29yZC5sb2NhdGlvbnNbMl0uZGlyZWN0
R1BSKCk7Ci0KLSAgICAgICAgICAgICAgICBiaW5hcnlPcC5tX3Nsb3dQYXRoU3RhcnRzLmFwcGVu
ZChzbG93UGF0aEpJVC5sYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBib29sIGFkZGVkVW5pcXVl
RXhjZXB0aW9uSnVtcCA9IGFkZE5ld0V4Y2VwdGlvbkp1bXBJZk5lY2Vzc2FyeShpdGVyLT52YWx1
ZVtpXS5pbmRleCk7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBzaXR1YXRpb24gaGFzIGEgcmVh
bGx5IGludGVyZXN0aW5nIHJlZ2lzdGVyIHByZXNlcnZhdGlvbiBzdG9yeS4KLSAgICAgICAgICAg
ICAgICAvLyBTZWUgY29tbWVudCBhYm92ZSBmb3IgR2V0QnlJZHMuCi0gICAgICAgICAgICAgICAg
aWYgKE9TUkV4aXQqIGV4aXQgPSBleGNlcHRpb25IYW5kbGVyTWFuYWdlci5jYWxsT3BlcmF0aW9u
T1NSRXhpdChpdGVyLT52YWx1ZVtpXS5pbmRleCkpCi0gICAgICAgICAgICAgICAgICAgIGV4aXQt
PnNwaWxsUmVnaXN0ZXJzVG9TcGlsbFNsb3Qoc2xvd1BhdGhKSVQsIG9zckV4aXRGcm9tR2VuZXJp
Y1Vud2luZFN0YWNrU3BpbGxTbG90KTsKLQotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24o
c3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBjb2RlT3JpZ2luLCBhZGRlZFVuaXF1
ZUV4Y2VwdGlvbkp1bXAgPyAmZXhjZXB0aW9uSnVtcHNUb0xpbmsubGFzdCgpLmZpcnN0IDogJmV4
Y2VwdGlvblRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgYmluYXJ5T3Auc2xvd1BhdGhGdW5j
dGlvbigpLCByZXN1bHQsIGxlZnQsIHJpZ2h0KS5jYWxsKCk7Ci0KLSAgICAgICAgICAgICAgICBi
aW5hcnlPcC5tX3Nsb3dQYXRoRG9uZS5hcHBlbmQoc2xvd1BhdGhKSVQuanVtcCgpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmxh
enlTbG93UGF0aHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBMYXp5U2xvd1BhdGhEZXNj
cmlwdG9yJiBkZXNjcmlwdG9yID0gc3RhdGUubGF6eVNsb3dQYXRoc1tpXTsKLQotICAgICAgICAg
ICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgICAgICAgICBkYXRh
TG9nKCJIYW5kbGluZyBsYXp5U2xvd1BhdGggc3RhY2ttYXAgIyIsIGRlc2NyaXB0b3Iuc3RhY2tt
YXBJRCgpLCAiXG4iKTsKLQotICAgICAgICAgICAgYXV0byBpdGVyID0gcmVjb3JkTWFwLmZpbmQo
ZGVzY3JpcHRvci5zdGFja21hcElEKCkpOwotICAgICAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3Jk
TWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gSXQgd2FzIG9wdGltaXplZCBvdXQuCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4gPSBkZXNjcmlwdG9yLmNvZGVPcmlnaW4oKTsKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVyLT52YWx1ZS5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBpdGVyLT52YWx1ZVtpXS5y
ZWNvcmQ7Ci0gICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVzZWRS
ZWdpc3RlcnNGb3IocmVjb3JkKTsKLSAgICAgICAgICAgICAgICBjaGFyKiBzdGFydE9mSUMgPQot
ICAgICAgICAgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9u
KSArIHJlY29yZC5pbnN0cnVjdGlvbk9mZnNldDsKLSAgICAgICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbCBwYXRjaHBvaW50KChNYWNyb0Fzc2VtYmxlckNvZGVQdHIoc3RhcnRPZklDKSkpOwot
ICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvblRhcmdldCA9IGV4Y2Vw
dGlvbkhhbmRsZXJNYW5hZ2VyLmxhenlTbG93UGF0aEV4Y2VwdGlvblRhcmdldChpdGVyLT52YWx1
ZVtpXS5pbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFleGNlcHRpb25UYXJnZXQpCi0gICAg
ICAgICAgICAgICAgICAgIGV4Y2VwdGlvblRhcmdldCA9IHN0YXRlLmZpbmFsaXplci0+aGFuZGxl
RXhjZXB0aW9uc0xpbmtCdWZmZXItPmVudHJ5cG9pbnQoKTsKLQotICAgICAgICAgICAgICAgIFNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvciBzY3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOwot
ICAgICAgICAgICAgICAgIEdQUlJlZyBuZXdaZXJvID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAg
ICAgICAgICBWZWN0b3I8TG9jYXRpb24+IGxvY2F0aW9uczsKLSAgICAgICAgICAgICAgICBmb3Ig
KGF1dG8gc3RhY2ttYXBMb2NhdGlvbiA6IHJlY29yZC5sb2NhdGlvbnMpIHsKLSAgICAgICAgICAg
ICAgICAgICAgRlRMOjpMb2NhdGlvbiBsb2NhdGlvbiA9IExvY2F0aW9uOjpmb3JTdGFja21hcHMo
JnN0YWNrbWFwcywgc3RhY2ttYXBMb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChp
c0FSTTY0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIExMVk0gcHJvdmVzIHRo
YXQgc29tZXRoaW5nIGlzIHplcm8sIGl0IG1heSBwYXNzIHVzIHRoZSB6ZXJvIHJlZ2lzdGVyIChh
a2EsIHRoZSBzdGFjayBwb2ludGVyKS4gT3VyIGFzc2VtYmxlcgotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gaXNuJ3QgcHJlcGFyZWQgdG8gaGFuZGxlIHRoaXMgd2VsbC4gV2UgbmVlZCB0byBt
b3ZlIGl0IGludG8gYSBkaWZmZXJlbnQgcmVnaXN0ZXIgaWYgc3VjaCBhIGNhc2UgYXJpc2VzLgot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uLmlzR1BSKCkgJiYgbG9jYXRpb24u
Z3ByKCkgPT0gTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1plcm8gPT0gSW52YWxpZEdQUlJlZykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdaZXJvID0gc2NyYXRjaEFsbG9jYXRvci5h
bGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNl
ZFJlZ2lzdGVycy5zZXQobmV3WmVybyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gRlRMOjpMb2NhdGlvbjo6Zm9y
UmVnaXN0ZXIoRFdBUkZSZWdpc3RlcihzdGF0aWNfY2FzdDx1aW50MTZfdD4obmV3WmVybykpLCAw
KTsgLy8gRFdBUkYgR1BScyBmb3IgYXJtNjQgYXJlIHNlbnNpYmx5IG51bWJlcmVkLgotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGxvY2F0aW9ucy5hcHBlbmQobG9jYXRpb24pOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxMYXp5U2xvd1BhdGg+IGxhenlTbG93UGF0
aCA9IHN0ZDo6bWFrZV91bmlxdWU8TGF6eVNsb3dQYXRoPigKLSAgICAgICAgICAgICAgICAgICAg
cGF0Y2hwb2ludCwgZXhjZXB0aW9uVGFyZ2V0LCB1c2VkUmVnaXN0ZXJzLCBleGNlcHRpb25IYW5k
bGVyTWFuYWdlci5wcm9jdXJlQ2FsbFNpdGVJbmRleChpdGVyLT52YWx1ZVtpXS5pbmRleCwgY29k
ZU9yaWdpbiksCi0gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IubV9saW5rZXItPnJ1bihs
b2NhdGlvbnMpLCBuZXdaZXJvLCBzY3JhdGNoQWxsb2NhdG9yKTsKLQotICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6TGFiZWwgYmVnaW4gPSBzbG93UGF0aEpJVC5sYWJlbCgpOwotCi0gICAg
ICAgICAgICAgICAgc2xvd1BhdGhKSVQucHVzaFRvU2F2ZUltbWVkaWF0ZVdpdGhvdXRUb3VjaGlu
Z1JlZ2lzdGVycygKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoc3RhdGUuaml0Q29kZS0+bGF6eVNsb3dQYXRocy5zaXplKCkpKTsKLSAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdG9ySnVtcCA9IHNsb3dQYXRoSklULmp1bXAoKTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLm1fZ2VuZXJhdG9y
cy5hcHBlbmQoc3RkOjptYWtlX3R1cGxlKGxhenlTbG93UGF0aC5nZXQoKSwgYmVnaW4pKTsKLQot
ICAgICAgICAgICAgICAgIHN0YXRlLmppdENvZGUtPmxhenlTbG93UGF0aHMuYXBwZW5kKFdURk1v
dmUobGF6eVNsb3dQYXRoKSk7Ci0gICAgICAgICAgICAgICAgc3RhdGUuZmluYWxpemVyLT5sYXp5
U2xvd1BhdGhHZW5lcmF0b3JKdW1wcy5hcHBlbmQoZ2VuZXJhdG9ySnVtcCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGV4Y2VwdGlvblRhcmdldC5saW5rKCZz
bG93UGF0aEpJVCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGV4Y2VwdGlvbkp1bXAg
PSBzbG93UGF0aEpJVC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAgICBzdGF0ZS5maW5hbGl6ZXIt
PnNpZGVDb2RlTGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8TGlua0J1ZmZlcj4odm0sIHNs
b3dQYXRoSklULCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgICAgIGlm
IChzdGF0ZS5maW5hbGl6ZXItPnNpZGVDb2RlTGlua0J1ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUo
KSkgewotICAgICAgICAgICAgc3RhdGUuYWxsb2NhdGlvbkZhaWxlZCA9IHRydWU7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGUuZmluYWxpemVyLT5zaWRlQ29k
ZUxpbmtCdWZmZXItPmxpbmsoCi0gICAgICAgICAgICBleGNlcHRpb25KdW1wLCBzdGF0ZS5maW5h
bGl6ZXItPmhhbmRsZUV4Y2VwdGlvbnNMaW5rQnVmZmVyLT5lbnRyeXBvaW50KCkpOwotICAgICAg
ICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUuZ2V0QnlJZHMuc2l6ZSgpOyBpLS07
KSB7Ci0gICAgICAgICAgICBnZW5lcmF0ZUlDRmFzdFBhdGgoCi0gICAgICAgICAgICAgICAgc3Rh
dGUsIGNvZGVCbG9jaywgZ2VuZXJhdGVkRnVuY3Rpb24sIHJlY29yZE1hcCwgc3RhdGUuZ2V0QnlJ
ZHNbaV0sCi0gICAgICAgICAgICAgICAgc2l6ZU9mR2V0QnlJZCgpLCAiR2V0QnlJZCIpOwotICAg
ICAgICB9Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLnB1dEJ5SWRzLnNpemUoKTsg
aS0tOykgewotICAgICAgICAgICAgZ2VuZXJhdGVJQ0Zhc3RQYXRoKAotICAgICAgICAgICAgICAg
IHN0YXRlLCBjb2RlQmxvY2ssIGdlbmVyYXRlZEZ1bmN0aW9uLCByZWNvcmRNYXAsIHN0YXRlLnB1
dEJ5SWRzW2ldLAotICAgICAgICAgICAgICAgIHNpemVPZlB1dEJ5SWQoKSwgIlB1dEJ5SWQiKTsK
LSAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5jaGVja0lucy5zaXpl
KCk7IGktLTspIHsKLSAgICAgICAgICAgIGdlbmVyYXRlQ2hlY2tJbklDRmFzdFBhdGgoCi0gICAg
ICAgICAgICAgICAgc3RhdGUsIGNvZGVCbG9jaywgZ2VuZXJhdGVkRnVuY3Rpb24sIHJlY29yZE1h
cCwgc3RhdGUuY2hlY2tJbnNbaV0sCi0gICAgICAgICAgICAgICAgc2l6ZU9mSW4oKSk7IAotICAg
ICAgICB9Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmJpbmFyeU9wcy5zaXplKCk7
IGktLTspIHsKLSAgICAgICAgICAgIEJpbmFyeU9wRGVzY3JpcHRvciYgYmluYXJ5T3AgPSBzdGF0
ZS5iaW5hcnlPcHNbaV07Ci0gICAgICAgICAgICBnZW5lcmF0ZUJpbmFyeU9wSUNGYXN0UGF0aChz
dGF0ZSwgY29kZUJsb2NrLCBnZW5lcmF0ZWRGdW5jdGlvbiwgcmVjb3JkTWFwLCBiaW5hcnlPcCk7
Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUubGF6eVNsb3dQYXRo
cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIExhenlTbG93UGF0aERlc2NyaXB0b3ImIGxh
enlTbG93UGF0aCA9IHN0YXRlLmxhenlTbG93UGF0aHNbaV07Ci0gICAgICAgICAgICBmb3IgKGF1
dG8mIHR1cGxlIDogbGF6eVNsb3dQYXRoLm1fZ2VuZXJhdG9ycykgewotICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAoCi0gICAgICAgICAgICAgICAgICAgIHN0
ZDo6Z2V0PDA+KHR1cGxlKS0+cGF0Y2hwb2ludCgpLAotICAgICAgICAgICAgICAgICAgICBzdGF0
ZS5maW5hbGl6ZXItPnNpZGVDb2RlTGlua0J1ZmZlci0+bG9jYXRpb25PZihzdGQ6OmdldDwxPih0
dXBsZSkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2lmIEVOQUJMRShNQVNNX1BST0JF
KQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5wcm9iZXMuc2l6ZSgpOyBpLS07KSB7
Ci0gICAgICAgICAgICBQcm9iZURlc2NyaXB0b3ImIHByb2JlID0gc3RhdGUucHJvYmVzW2ldOwot
ICAgICAgICAgICAgZ2VuZXJhdGVQcm9iZShzdGF0ZSwgY29kZUJsb2NrLCBnZW5lcmF0ZWRGdW5j
dGlvbiwgcmVjb3JkTWFwLCBwcm9iZSk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBmb3Ig
KGF1dG8mIHBhaXIgOiBleGNlcHRpb25KdW1wc1RvTGluaykKLSAgICAgICAgICAgIHN0YXRlLmZp
bmFsaXplci0+c2lkZUNvZGVMaW5rQnVmZmVyLT5saW5rKHBhaXIuZmlyc3QsIHBhaXIuc2Vjb25k
KTsKLSAgICB9Ci0gICAgCi0gICAgYWRqdXN0Q2FsbElDc0ZvclN0YWNrbWFwcyhzdGF0ZS5qc0Nh
bGxzLCByZWNvcmRNYXAsIGV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyKTsKLSAgICAKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzdGF0ZS5qc0NhbGxzLnNpemUoKTsgaS0tOykgewotICAgICAgICBKU0Nh
bGwmIGNhbGwgPSBzdGF0ZS5qc0NhbGxzW2ldOwotCi0gICAgICAgIENDYWxsSGVscGVycyBmYXN0
UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7Ci0gICAgICAgIGNhbGwuZW1pdChmYXN0UGF0aEpJVCwg
c3RhdGUsIG9zckV4aXRGcm9tR2VuZXJpY1Vud2luZFN0YWNrU3BpbGxTbG90KTsKLQotICAgICAg
ICBjaGFyKiBzdGFydE9mSUMgPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9u
KSArIGNhbGwubV9pbnN0cnVjdGlvbk9mZnNldDsKLQotICAgICAgICBnZW5lcmF0ZUlubGluZUlm
UG9zc2libGVPdXRPZkxpbmVJZk5vdChzdGF0ZSwgdm0sIGNvZGVCbG9jaywgZmFzdFBhdGhKSVQs
IHN0YXJ0T2ZJQywgc2l6ZU9mQ2FsbCgpLCAiSlNDYWxsIiwgWyZdIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyLCBDQ2FsbEhlbHBlcnMmLCBib29sKSB7Ci0gICAgICAgICAgICBjYWxsLmxpbmsodm0s
IGxpbmtCdWZmZXIpOwotICAgICAgICB9KTsKLSAgICB9Ci0gICAgCi0gICAgYWRqdXN0Q2FsbElD
c0ZvclN0YWNrbWFwcyhzdGF0ZS5qc0NhbGxWYXJhcmdzZXMsIHJlY29yZE1hcCwgZXhjZXB0aW9u
SGFuZGxlck1hbmFnZXIpOwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmpzQ2Fs
bFZhcmFyZ3Nlcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgSlNDYWxsVmFyYXJncyYgY2FsbCA9
IHN0YXRlLmpzQ2FsbFZhcmFyZ3Nlc1tpXTsKLSAgICAgICAgCi0gICAgICAgIENDYWxsSGVscGVy
cyBmYXN0UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7Ci0gICAgICAgIGNhbGwuZW1pdChmYXN0UGF0
aEpJVCwgc3RhdGUsIHZhcmFyZ3NTcGlsbFNsb3RzT2Zmc2V0LCBvc3JFeGl0RnJvbUdlbmVyaWNV
bndpbmRTdGFja1NwaWxsU2xvdCk7Ci0KLSAgICAgICAgY2hhciogc3RhcnRPZklDID0gYml0d2lz
ZV9jYXN0PGNoYXIqPihnZW5lcmF0ZWRGdW5jdGlvbikgKyBjYWxsLm1faW5zdHJ1Y3Rpb25PZmZz
ZXQ7Ci0gICAgICAgIHNpemVfdCBzaXplT2ZJQyA9IHNpemVPZklDRm9yKGNhbGwubm9kZSgpKTsK
LQotICAgICAgICBnZW5lcmF0ZUlubGluZUlmUG9zc2libGVPdXRPZkxpbmVJZk5vdChzdGF0ZSwg
dm0sIGNvZGVCbG9jaywgZmFzdFBhdGhKSVQsIHN0YXJ0T2ZJQywgc2l6ZU9mSUMsICJ2YXJhcmdz
IGNhbGwiLCBbJl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIENDYWxsSGVscGVycyYsIGJvb2wp
IHsKLSAgICAgICAgICAgIGNhbGwubGluayh2bSwgbGlua0J1ZmZlciwgc3RhdGUuZmluYWxpemVy
LT5oYW5kbGVFeGNlcHRpb25zTGlua0J1ZmZlci0+ZW50cnlwb2ludCgpKTsKLSAgICAgICAgfSk7
Ci0gICAgfQotCi0gICAgYWRqdXN0Q2FsbElDc0ZvclN0YWNrbWFwcyhzdGF0ZS5qc1RhaWxDYWxs
cywgcmVjb3JkTWFwLCBleGNlcHRpb25IYW5kbGVyTWFuYWdlcik7Ci0KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSBzdGF0ZS5qc1RhaWxDYWxscy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgSlNUYWls
Q2FsbCYgY2FsbCA9IHN0YXRlLmpzVGFpbENhbGxzW2ldOwotCi0gICAgICAgIENDYWxsSGVscGVy
cyBmYXN0UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7Ci0gICAgICAgIGNhbGwuZW1pdCgqc3RhdGUu
aml0Q29kZS5nZXQoKSwgZmFzdFBhdGhKSVQpOwotCi0gICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9
IGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24pICsgY2FsbC5tX2luc3RydWN0
aW9uT2Zmc2V0OwotICAgICAgICBzaXplX3Qgc2l6ZU9mSUMgPSBjYWxsLmVzdGltYXRlZFNpemUo
KTsKLQotICAgICAgICBnZW5lcmF0ZUlubGluZUlmUG9zc2libGVPdXRPZkxpbmVJZk5vdChzdGF0
ZSwgdm0sIGNvZGVCbG9jaywgZmFzdFBhdGhKSVQsIHN0YXJ0T2ZJQywgc2l6ZU9mSUMsICJ0YWls
IGNhbGwiLCBbJl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIENDYWxsSGVscGVycyYsIGJvb2wp
IHsKLSAgICAgICAgICAgIGNhbGwubGluayh2bSwgbGlua0J1ZmZlcik7Ci0gICAgICAgIH0pOwot
ICAgIH0KLSAgICAKLSAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmluZChzdGF0ZS5oYW5kbGVT
dGFja092ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJRCk7Ci0gICAgLy8gSXQncyBzb3J0IG9mIHJl
bW90ZWx5IHBvc3NpYmxlIHRoYXQgd2Ugd29uJ3QgaGF2ZSBhbiBpbi1iYW5kIGV4Y2VwdGlvbiBo
YW5kbGluZwotICAgIC8vIHBhdGgsIGZvciBzb21lIGtpbmRzIG9mIGZ1bmN0aW9ucy4KLSAgICBp
ZiAoaXRlciAhPSByZWNvcmRNYXAuZW5kKCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
aXRlci0+dmFsdWUuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBTdGFja01hcHM6OlJlY29y
ZCYgcmVjb3JkID0gaXRlci0+dmFsdWVbaV0ucmVjb3JkOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbCBzb3VyY2UgPSBDb2RlTG9jYXRpb25MYWJlbCgKLSAgICAg
ICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIHJlY29y
ZC5pbnN0cnVjdGlvbk9mZnNldCk7Ci0KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YWNr
T3ZlcmZsb3dFeGNlcHRpb24uaXNTZXQoKSk7Ci0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBsYWNlV2l0aEp1bXAoc291cmNlLCBzdGF0ZS5maW5hbGl6ZXItPmhhbmRsZUV4Y2VwdGlv
bnNMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKHN0YWNrT3ZlcmZsb3dFeGNlcHRpb24pKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICAKLSAgICBpdGVyID0gcmVjb3JkTWFwLmZpbmQoc3RhdGUuaGFuZGxl
RXhjZXB0aW9uU3RhY2ttYXBJRCk7Ci0gICAgLy8gSXQncyBzb3J0IG9mIHJlbW90ZWx5IHBvc3Np
YmxlIHRoYXQgd2Ugd29uJ3QgaGF2ZSBhbiBpbi1iYW5kIGV4Y2VwdGlvbiBoYW5kbGluZwotICAg
IC8vIHBhdGgsIGZvciBzb21lIGtpbmRzIG9mIGZ1bmN0aW9ucy4KLSAgICBpZiAoaXRlciAhPSBy
ZWNvcmRNYXAuZW5kKCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaXRlci0+dmFsdWUu
c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0g
aXRlci0+dmFsdWVbaV0ucmVjb3JkOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCBzb3VyY2UgPSBDb2RlTG9jYXRpb25MYWJlbCgKLSAgICAgICAgICAgICAgICBi
aXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIHJlY29yZC5pbnN0cnVjdGlv
bk9mZnNldCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBs
YWNlV2l0aEp1bXAoc291cmNlLCBzdGF0ZS5maW5hbGl6ZXItPmhhbmRsZUV4Y2VwdGlvbnNMaW5r
QnVmZmVyLT5lbnRyeXBvaW50KCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGZvciAo
dW5zaWduZWQgZXhpdEluZGV4ID0gMDsgZXhpdEluZGV4IDwgaml0Q29kZS0+b3NyRXhpdC5zaXpl
KCk7ICsrZXhpdEluZGV4KSB7Ci0gICAgICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8g
PSBzdGF0ZS5maW5hbGl6ZXItPm9zckV4aXRbZXhpdEluZGV4XTsKLSAgICAgICAgT1NSRXhpdCYg
ZXhpdCA9IGppdENvZGUtPm9zckV4aXRbZXhpdEluZGV4XTsKLSAgICAgICAgVmVjdG9yPGNvbnN0
IHZvaWQqPiBjb2RlQWRkcmVzc2VzOwotCi0gICAgICAgIGlmIChleGl0LndpbGxBcnJpdmVBdEV4
aXRGcm9tSW5kaXJlY3RFeGNlcHRpb25DaGVjaygpKSAvLyBUaGlzIGp1bXAgZG9lc24ndCBoYXBw
ZW4gZGlyZWN0bHkgZnJvbSBhIHBhdGNocG9pbnQvc3RhY2ttYXAgd2UgY29tcGlsZS4gSXQgaGFw
cGVucyBpbmRpcmVjdGx5IHRocm91Z2ggYW4gZXhjZXB0aW9uIGNoZWNrIHNvbWV3aGVyZS4KLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmQm
IHJlY29yZCA9IGppdENvZGUtPnN0YWNrbWFwcy5yZWNvcmRzW2V4aXQubV9zdGFja21hcFJlY29y
ZEluZGV4XTsKLSAgICAgICAgCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHNvdXJjZSA9IENv
ZGVMb2NhdGlvbkxhYmVsKAotICAgICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPihnZW5lcmF0
ZWRGdW5jdGlvbikgKyByZWNvcmQuaW5zdHJ1Y3Rpb25PZmZzZXQpOwotICAgICAgICAKLSAgICAg
ICAgY29kZUFkZHJlc3Nlcy5hcHBlbmQoYml0d2lzZV9jYXN0PGNoYXIqPihnZW5lcmF0ZWRGdW5j
dGlvbikgKyByZWNvcmQuaW5zdHJ1Y3Rpb25PZmZzZXQgKyBNYWNyb0Fzc2VtYmxlcjo6bWF4SnVt
cFJlcGxhY2VtZW50U2l6ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChleGl0Lm1fZGVzY3Jp
cHRvci0+bV9pc0ludmFsaWRhdGlvblBvaW50KQotICAgICAgICAgICAgaml0Q29kZS0+Y29tbW9u
Lmp1bXBSZXBsYWNlbWVudHMuYXBwZW5kKEp1bXBSZXBsYWNlbWVudChzb3VyY2UsIGluZm8ubV90
aHVua0FkZHJlc3MpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGxhY2VXaXRoSnVtcChzb3VyY2UsIGluZm8ubV90aHVua0FkZHJlc3MpOwotICAgICAgICAK
LSAgICAgICAgaWYgKGdyYXBoLmNvbXBpbGF0aW9uKCkpCi0gICAgICAgICAgICBncmFwaC5jb21w
aWxhdGlvbigpLT5hZGRPU1JFeGl0U2l0ZShjb2RlQWRkcmVzc2VzKTsKLSAgICB9Ci19Ci0KLXZv
aWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmVzdWx0JiBzYWZlcG9pbnRSZXN1
bHQpCi17Ci0gICAgY2hhciogZXJyb3IgPSAwOwotICAgIAotICAgIHsKLSAgICAgICAgR3JhcGhT
YWZlcG9pbnQgc2FmZXBvaW50KHN0YXRlLmdyYXBoLCBzYWZlcG9pbnRSZXN1bHQpOwotICAgICAg
ICAKLSAgICAgICAgTExWTU1DSklUQ29tcGlsZXJPcHRpb25zIG9wdGlvbnM7Ci0gICAgICAgIGxs
dm0tPkluaXRpYWxpemVNQ0pJVENvbXBpbGVyT3B0aW9ucygmb3B0aW9ucywgc2l6ZW9mKG9wdGlv
bnMpKTsKLSAgICAgICAgb3B0aW9ucy5PcHRMZXZlbCA9IE9wdGlvbnM6Omxsdm1CYWNrZW5kT3B0
aW1pemF0aW9uTGV2ZWwoKTsKLSAgICAgICAgb3B0aW9ucy5Ob0ZyYW1lUG9pbnRlckVsaW0gPSB0
cnVlOwotICAgICAgICBpZiAoT3B0aW9uczo6dXNlTExWTVNtYWxsQ29kZU1vZGVsKCkpCi0gICAg
ICAgICAgICBvcHRpb25zLkNvZGVNb2RlbCA9IExMVk1Db2RlTW9kZWxTbWFsbDsKLSAgICAgICAg
b3B0aW9ucy5FbmFibGVGYXN0SVNlbCA9IGVuYWJsZUxMVk1GYXN0SVNlbDsKLSAgICAgICAgb3B0
aW9ucy5NQ0pNTSA9IGxsdm0tPkNyZWF0ZVNpbXBsZU1DSklUTWVtb3J5TWFuYWdlcigKLSAgICAg
ICAgICAgICZzdGF0ZSwgbW1BbGxvY2F0ZUNvZGVTZWN0aW9uLCBtbUFsbG9jYXRlRGF0YVNlY3Rp
b24sIG1tQXBwbHlQZXJtaXNzaW9ucywgbW1EZXN0cm95KTsKLSAgICAKLSAgICAgICAgTExWTUV4
ZWN1dGlvbkVuZ2luZVJlZiBlbmdpbmU7Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNBUk02NCgp
KSB7Ci0jaWYgT1MoREFSV0lOKQotICAgICAgICAgICAgbGx2bS0+U2V0VGFyZ2V0KHN0YXRlLm1v
ZHVsZSwgImFybTY0LWFwcGxlLWlvcyIpOwotI2VsaWYgT1MoTElOVVgpCi0gICAgICAgICAgICBs
bHZtLT5TZXRUYXJnZXQoc3RhdGUubW9kdWxlLCAiYWFyY2g2NC1saW51eC1nbnUiKTsKLSNlbHNl
Ci0jZXJyb3IgIlVucmVjb2duaXplZCBPUyIKLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKGxsdm0tPkNyZWF0ZU1DSklUQ29tcGlsZXJGb3JNb2R1bGUoJmVuZ2luZSwgc3RhdGUubW9k
dWxlLCAmb3B0aW9ucywgc2l6ZW9mKG9wdGlvbnMpLCAmZXJyb3IpKSB7Ci0gICAgICAgICAgICBk
YXRhTG9nKCJGQVRBTDogQ291bGQgbm90IGNyZWF0ZSBMTFZNIGV4ZWN1dGlvbiBlbmdpbmU6ICIs
IGVycm9yLCAiXG4iKTsKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Ugbm8gbG9uZ2VyIG93biB0aGUgbW9kdWxlLgot
ICAgICAgICBMTW9kdWxlIG1vZHVsZSA9IHN0YXRlLm1vZHVsZTsKLSAgICAgICAgc3RhdGUubW9k
dWxlID0gbnVsbHB0cjsKLQotICAgICAgICAvLyBUaGUgZGF0YSBsYXlvdXQgYWxzbyBoYXMgdG8g
YmUgc2V0IGluIHRoZSBtb2R1bGUuIEdldCB0aGUgZGF0YSBsYXlvdXQgZnJvbSB0aGUgTUNKSVQg
YW5kIGFwcGx5Ci0gICAgICAgIC8vIGl0IHRvIHRoZSBtb2R1bGUuCi0gICAgICAgIExMVk1UYXJn
ZXRNYWNoaW5lUmVmIHRhcmdldE1hY2hpbmUgPSBsbHZtLT5HZXRFeGVjdXRpb25FbmdpbmVUYXJn
ZXRNYWNoaW5lKGVuZ2luZSk7Ci0gICAgICAgIExMVk1UYXJnZXREYXRhUmVmIHRhcmdldERhdGEg
PSBsbHZtLT5HZXRFeGVjdXRpb25FbmdpbmVUYXJnZXREYXRhKGVuZ2luZSk7Ci0gICAgICAgIGNo
YXIqIHN0cmluZ1JlcE9mVGFyZ2V0RGF0YSA9IGxsdm0tPkNvcHlTdHJpbmdSZXBPZlRhcmdldERh
dGEodGFyZ2V0RGF0YSk7Ci0gICAgICAgIGxsdm0tPlNldERhdGFMYXlvdXQobW9kdWxlLCBzdHJp
bmdSZXBPZlRhcmdldERhdGEpOwotICAgICAgICBmcmVlKHN0cmluZ1JlcE9mVGFyZ2V0RGF0YSk7
Ci0KLSAgICAgICAgTExWTVBhc3NNYW5hZ2VyUmVmIGZ1bmN0aW9uUGFzc2VzID0gMDsKLSAgICAg
ICAgTExWTVBhc3NNYW5hZ2VyUmVmIG1vZHVsZVBhc3NlczsKLQotICAgICAgICBpZiAoT3B0aW9u
czo6bGx2bVNpbXBsZU9wdCgpKSB7Ci0gICAgICAgICAgICBtb2R1bGVQYXNzZXMgPSBsbHZtLT5D
cmVhdGVQYXNzTWFuYWdlcigpOwotICAgICAgICAgICAgbGx2bS0+QWRkVGFyZ2V0RGF0YSh0YXJn
ZXREYXRhLCBtb2R1bGVQYXNzZXMpOwotICAgICAgICAgICAgbGx2bS0+QWRkQW5hbHlzaXNQYXNz
ZXModGFyZ2V0TWFjaGluZSwgbW9kdWxlUGFzc2VzKTsKLSAgICAgICAgICAgIGxsdm0tPkFkZFBy
b21vdGVNZW1vcnlUb1JlZ2lzdGVyUGFzcyhtb2R1bGVQYXNzZXMpOwotICAgICAgICAgICAgbGx2
bS0+QWRkR2xvYmFsT3B0aW1pemVyUGFzcyhtb2R1bGVQYXNzZXMpOwotICAgICAgICAgICAgbGx2
bS0+QWRkRnVuY3Rpb25JbmxpbmluZ1Bhc3MobW9kdWxlUGFzc2VzKTsKLSAgICAgICAgICAgIGxs
dm0tPkFkZFBydW5lRUhQYXNzKG1vZHVsZVBhc3Nlcyk7Ci0gICAgICAgICAgICBsbHZtLT5BZGRH
bG9iYWxEQ0VQYXNzKG1vZHVsZVBhc3Nlcyk7Ci0gICAgICAgICAgICBsbHZtLT5BZGRDb25zdGFu
dFByb3BhZ2F0aW9uUGFzcyhtb2R1bGVQYXNzZXMpOwotICAgICAgICAgICAgbGx2bS0+QWRkQWdn
cmVzc2l2ZURDRVBhc3MobW9kdWxlUGFzc2VzKTsKLSAgICAgICAgICAgIGxsdm0tPkFkZEluc3Ry
dWN0aW9uQ29tYmluaW5nUGFzcyhtb2R1bGVQYXNzZXMpOwotICAgICAgICAgICAgLy8gQkVHSU4g
LSBETyBOT1QgQ0hBTkdFIFRIRSBPUkRFUiBPRiBUSEUgQUxJQVMgQU5BTFlTSVMgUEFTU0VTCi0g
ICAgICAgICAgICBsbHZtLT5BZGRUeXBlQmFzZWRBbGlhc0FuYWx5c2lzUGFzcyhtb2R1bGVQYXNz
ZXMpOwotICAgICAgICAgICAgbGx2bS0+QWRkQmFzaWNBbGlhc0FuYWx5c2lzUGFzcyhtb2R1bGVQ
YXNzZXMpOwotICAgICAgICAgICAgLy8gRU5EIC0gRE8gTk9UIENIQU5HRSBUSEUgT1JERVIgT0Yg
VEhFIEFMSUFTIEFOQUxZU0lTIFBBU1NFUwotICAgICAgICAgICAgbGx2bS0+QWRkR1ZOUGFzcyht
b2R1bGVQYXNzZXMpOwotICAgICAgICAgICAgbGx2bS0+QWRkQ0ZHU2ltcGxpZmljYXRpb25QYXNz
KG1vZHVsZVBhc3Nlcyk7Ci0gICAgICAgICAgICBsbHZtLT5BZGREZWFkU3RvcmVFbGltaW5hdGlv
blBhc3MobW9kdWxlUGFzc2VzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGVuYWJs
ZUxMVk1GYXN0SVNlbCkKLSAgICAgICAgICAgICAgICBsbHZtLT5BZGRMb3dlclN3aXRjaFBhc3Mo
bW9kdWxlUGFzc2VzKTsKLQotICAgICAgICAgICAgbGx2bS0+UnVuUGFzc01hbmFnZXIobW9kdWxl
UGFzc2VzLCBtb2R1bGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTExWTVBhc3NN
YW5hZ2VyQnVpbGRlclJlZiBwYXNzQnVpbGRlciA9IGxsdm0tPlBhc3NNYW5hZ2VyQnVpbGRlckNy
ZWF0ZSgpOwotICAgICAgICAgICAgbGx2bS0+UGFzc01hbmFnZXJCdWlsZGVyU2V0T3B0TGV2ZWwo
cGFzc0J1aWxkZXIsIE9wdGlvbnM6Omxsdm1PcHRpbWl6YXRpb25MZXZlbCgpKTsKLSAgICAgICAg
ICAgIGxsdm0tPlBhc3NNYW5hZ2VyQnVpbGRlclVzZUlubGluZXJXaXRoVGhyZXNob2xkKHBhc3NC
dWlsZGVyLCAyNzUpOwotICAgICAgICAgICAgbGx2bS0+UGFzc01hbmFnZXJCdWlsZGVyU2V0U2l6
ZUxldmVsKHBhc3NCdWlsZGVyLCBPcHRpb25zOjpsbHZtU2l6ZUxldmVsKCkpOwotICAgICAgICAK
LSAgICAgICAgICAgIGZ1bmN0aW9uUGFzc2VzID0gbGx2bS0+Q3JlYXRlRnVuY3Rpb25QYXNzTWFu
YWdlckZvck1vZHVsZShtb2R1bGUpOwotICAgICAgICAgICAgbW9kdWxlUGFzc2VzID0gbGx2bS0+
Q3JlYXRlUGFzc01hbmFnZXIoKTsKLSAgICAgICAgCi0gICAgICAgICAgICBsbHZtLT5BZGRUYXJn
ZXREYXRhKGxsdm0tPkdldEV4ZWN1dGlvbkVuZ2luZVRhcmdldERhdGEoZW5naW5lKSwgbW9kdWxl
UGFzc2VzKTsKLSAgICAgICAgCi0gICAgICAgICAgICBsbHZtLT5QYXNzTWFuYWdlckJ1aWxkZXJQ
b3B1bGF0ZUZ1bmN0aW9uUGFzc01hbmFnZXIocGFzc0J1aWxkZXIsIGZ1bmN0aW9uUGFzc2VzKTsK
LSAgICAgICAgICAgIGxsdm0tPlBhc3NNYW5hZ2VyQnVpbGRlclBvcHVsYXRlTW9kdWxlUGFzc01h
bmFnZXIocGFzc0J1aWxkZXIsIG1vZHVsZVBhc3Nlcyk7Ci0gICAgICAgIAotICAgICAgICAgICAg
bGx2bS0+UGFzc01hbmFnZXJCdWlsZGVyRGlzcG9zZShwYXNzQnVpbGRlcik7Ci0gICAgICAgIAot
ICAgICAgICAgICAgbGx2bS0+SW5pdGlhbGl6ZUZ1bmN0aW9uUGFzc01hbmFnZXIoZnVuY3Rpb25Q
YXNzZXMpOwotICAgICAgICAgICAgZm9yIChMVmFsdWUgZnVuY3Rpb24gPSBsbHZtLT5HZXRGaXJz
dEZ1bmN0aW9uKG1vZHVsZSk7IGZ1bmN0aW9uOyBmdW5jdGlvbiA9IGxsdm0tPkdldE5leHRGdW5j
dGlvbihmdW5jdGlvbikpCi0gICAgICAgICAgICAgICAgbGx2bS0+UnVuRnVuY3Rpb25QYXNzTWFu
YWdlcihmdW5jdGlvblBhc3NlcywgZnVuY3Rpb24pOwotICAgICAgICAgICAgbGx2bS0+RmluYWxp
emVGdW5jdGlvblBhc3NNYW5hZ2VyKGZ1bmN0aW9uUGFzc2VzKTsKLSAgICAgICAgCi0gICAgICAg
ICAgICBsbHZtLT5SdW5QYXNzTWFuYWdlcihtb2R1bGVQYXNzZXMsIG1vZHVsZSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgdmVyYm9zZUNvbXBp
bGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgc3RhdGUuZHVtcFN0YXRlKG1vZHVsZSwgImFm
dGVyIG9wdGltaXphdGlvbiIpOwotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8g
YWRkIHN1cHBvcnQgZm9yIHRoZSBjYXNlIHdoZXJlIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiBmYWls
ZWQuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTM2MjAKLSAgICAgICAgc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0
PEdlbmVyYXRlZEZ1bmN0aW9uPihsbHZtLT5HZXRQb2ludGVyVG9HbG9iYWwoZW5naW5lLCBzdGF0
ZS5mdW5jdGlvbikpOwotICAgICAgICBpZiAoZnVuY3Rpb25QYXNzZXMpCi0gICAgICAgICAgICBs
bHZtLT5EaXNwb3NlUGFzc01hbmFnZXIoZnVuY3Rpb25QYXNzZXMpOwotICAgICAgICBsbHZtLT5E
aXNwb3NlUGFzc01hbmFnZXIobW9kdWxlUGFzc2VzKTsKLSAgICAgICAgbGx2bS0+RGlzcG9zZUV4
ZWN1dGlvbkVuZ2luZShlbmdpbmUpOwotICAgIH0KLQotICAgIGlmIChzYWZlcG9pbnRSZXN1bHQu
ZGlkR2V0Q2FuY2VsbGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBSRUxFQVNFX0FTU0VSVCgh
c3RhdGUuZ3JhcGgubV92bS5oZWFwLmlzQ29sbGVjdGluZygpKTsKLSAgICAKLSAgICBpZiAoc3Rh
dGUuYWxsb2NhdGlvbkZhaWxlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChzaG91
bGREdW1wRGlzYXNzZW1ibHkoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c3RhdGUuaml0Q29kZS0+aGFuZGxlcygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBFeGVj
dXRhYmxlTWVtb3J5SGFuZGxlKiBoYW5kbGUgPSBzdGF0ZS5qaXRDb2RlLT5oYW5kbGVzKClbaV0u
Z2V0KCk7Ci0gICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgICAgICJHZW5lcmF0ZWQg
TExWTSBjb2RlIGZvciAiLAotICAgICAgICAgICAgICAgIENvZGVCbG9ja1dpdGhKSVRUeXBlKHN0
YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpLAotICAgICAgICAgICAgICAg
ICIgIyIsIGksICIsICIsIHN0YXRlLmNvZGVTZWN0aW9uTmFtZXNbaV0sICI6XG4iKTsKLSAgICAg
ICAgICAgIGRpc2Fzc2VtYmxlKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cihoYW5kbGUtPnN0YXJ0KCkpLCBoYW5kbGUtPnNpemVJbkJ5dGVzKCksCi0gICAgICAgICAgICAg
ICAgIiAgICAiLCBXVEY6OmRhdGFGaWxlKCksIExMVk1TdWJzZXQpOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUuaml0Q29kZS0+ZGF0
YVNlY3Rpb25zKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIERhdGFTZWN0aW9uKiBzZWN0
aW9uID0gc3RhdGUuaml0Q29kZS0+ZGF0YVNlY3Rpb25zKClbaV0uZ2V0KCk7Ci0gICAgICAgICAg
ICBkYXRhTG9nKAotICAgICAgICAgICAgICAgICJHZW5lcmF0ZWQgTExWTSBkYXRhIHNlY3Rpb24g
Zm9yICIsCi0gICAgICAgICAgICAgICAgQ29kZUJsb2NrV2l0aEpJVFR5cGUoc3RhdGUuZ3JhcGgu
bV9jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCksCi0gICAgICAgICAgICAgICAgIiAjIiwgaSwg
IiwgIiwgc3RhdGUuZGF0YVNlY3Rpb25OYW1lc1tpXSwgIjpcbiIpOwotICAgICAgICAgICAgZHVt
cERhdGFTZWN0aW9uKHNlY3Rpb24sICIgICAgIik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PiByZWdpc3Rlck9mZnNldHMg
PSBwYXJzZVVud2luZEluZm8oCi0gICAgICAgIHN0YXRlLnVud2luZERhdGFTZWN0aW9uLCBzdGF0
ZS51bndpbmREYXRhU2VjdGlvblNpemUsCi0gICAgICAgIHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9u
KTsKLSAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpIHsKLSAgICAgICAgZGF0YUxvZygi
VW53aW5kIGluZm8gZm9yICIsIENvZGVCbG9ja1dpdGhKSVRUeXBlKHN0YXRlLmdyYXBoLm1fY29k
ZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpLCAiOlxuIik7Ci0gICAgICAgIGRhdGFMb2coIiAgICAi
LCAqcmVnaXN0ZXJPZmZzZXRzLCAiXG4iKTsKLSAgICB9Ci0gICAgc3RhdGUuZ3JhcGgubV9jb2Rl
QmxvY2stPnNldENhbGxlZVNhdmVSZWdpc3RlcnMoV1RGTW92ZShyZWdpc3Rlck9mZnNldHMpKTsK
LSAgICAKLSAgICBpZiAoc3RhdGUuc3RhY2ttYXBzU2VjdGlvbiAmJiBzdGF0ZS5zdGFja21hcHNT
ZWN0aW9uLT5zaXplKCkpIHsKLSAgICAgICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJseSgpKSB7
Ci0gICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgICAgICJHZW5lcmF0ZWQgTExWTSBz
dGFja21hcHMgc2VjdGlvbiBmb3IgIiwKLSAgICAgICAgICAgICAgICBDb2RlQmxvY2tXaXRoSklU
VHlwZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSwgIjpcbiIpOwot
ICAgICAgICAgICAgZGF0YUxvZygiICAgIFJhdyBkYXRhOlxuIik7Ci0gICAgICAgICAgICBkdW1w
RGF0YVNlY3Rpb24oc3RhdGUuc3RhY2ttYXBzU2VjdGlvbi5nZXQoKSwgIiAgICAiKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgUmVmUHRyPERhdGFWaWV3PiBzdGFja21hcHNEYXRhID0g
RGF0YVZpZXc6OmNyZWF0ZSgKLSAgICAgICAgICAgIEFycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGUu
c3RhY2ttYXBzU2VjdGlvbi0+YmFzZSgpLCBzdGF0ZS5zdGFja21hcHNTZWN0aW9uLT5zaXplKCkp
KTsKLSAgICAgICAgc3RhdGUuaml0Q29kZS0+c3RhY2ttYXBzLnBhcnNlKHN0YWNrbWFwc0RhdGEu
Z2V0KCkpOwotICAgIAotICAgICAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpIHsKLSAg
ICAgICAgICAgIGRhdGFMb2coIiAgICBTdHJ1Y3R1cmVkIGRhdGE6XG4iKTsKLSAgICAgICAgICAg
IHN0YXRlLmppdENvZGUtPnN0YWNrbWFwcy5kdW1wTXVsdGlsaW5lKFdURjo6ZGF0YUZpbGUoKSwg
IiAgICAgICAgIik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFN0YWNrTWFwczo6UmVj
b3JkTWFwIHJlY29yZE1hcCA9IHN0YXRlLmppdENvZGUtPnN0YWNrbWFwcy5jb21wdXRlUmVjb3Jk
TWFwKCk7Ci0gICAgICAgIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKLSAgICAgICAgICAg
IHN0YXRlLCBzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgc3RhdGUuaml0Q29kZS5nZXQoKSwgc3Rh
dGUuZ2VuZXJhdGVkRnVuY3Rpb24sCi0gICAgICAgICAgICByZWNvcmRNYXApOwotICAgICAgICBp
ZiAoc3RhdGUuYWxsb2NhdGlvbkZhaWxlZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjphc3luY0Rp
c2Fzc2VtYmx5KCkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0
ZS5qaXRDb2RlLT5oYW5kbGVzKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAo
c3RhdGUuY29kZVNlY3Rpb25OYW1lc1tpXSAhPSBTRUNUSU9OX05BTUUoInRleHQiKSkKLSAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogaGFuZGxlID0gc3RhdGUuaml0Q29kZS0+aGFuZGxl
cygpW2ldLmdldCgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENTdHJpbmcg
aGVhZGVyID0gdG9DU3RyaW5nKAotICAgICAgICAgICAgICAgICAgICAiR2VuZXJhdGVkIExMVk0g
Y29kZSBhZnRlciBzdGFja21hcC1iYXNlZCBmaXgtdXAgZm9yICIsCi0gICAgICAgICAgICAgICAg
ICAgIENvZGVCbG9ja1dpdGhKSVRUeXBlKHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb2Rl
OjpGVExKSVQpLAotICAgICAgICAgICAgICAgICAgICAiIGluICIsIHN0YXRlLmdyYXBoLm1fcGxh
bi5tb2RlLCAiICMiLCBpLCAiLCAiLAotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jb2RlU2Vj
dGlvbk5hbWVzW2ldLCAiOlxuIik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
aWYgKE9wdGlvbnM6OmFzeW5jRGlzYXNzZW1ibHkoKSkgewotICAgICAgICAgICAgICAgICAgICBk
aXNhc3NlbWJsZUFzeW5jaHJvbm91c2x5KAotICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVy
LCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoaGFuZGxlKSwgaGFuZGxlLT5zaXplSW5CeXRlcygpLCAi
ICAgICIsCi0gICAgICAgICAgICAgICAgICAgICAgICBMTFZNU3Vic2V0KTsKLSAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGRhdGFMb2coaGVhZGVyKTsKLSAgICAgICAgICAgICAgICBkaXNhc3Nl
bWJsZSgKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGhhbmRsZS0+
c3RhcnQoKSksIGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwKLSAgICAgICAgICAgICAgICAgICAgIiAg
ICAiLCBXVEY6OmRhdGFGaWxlKCksIExMVk1TdWJzZXQpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCi0KLSNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkgJiYgRlRMX1VTRVNfQjMKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlQmluYXJ5T3AuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZUJpbmFyeU9wLmNwcAkocmV2aXNpb24gMTk2Njg1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlQmluYXJ5T3AuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMxMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZUTENvbXBp
bGVCaW5hcnlPcC5oIgotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0KLSNpbmNsdWRlICJERkdOb2Rl
VHlwZS5oIgotI2luY2x1ZGUgIkZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oIgotI2luY2x1ZGUg
IkdQUkluZm8uaCIKLSNpbmNsdWRlICJKSVRBZGRHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJKSVRC
aXRBbmRHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJKSVRCaXRPckdlbmVyYXRvci5oIgotI2luY2x1
ZGUgIkpJVEJpdFhvckdlbmVyYXRvci5oIgotI2luY2x1ZGUgIkpJVERpdkdlbmVyYXRvci5oIgot
I2luY2x1ZGUgIkpJVExlZnRTaGlmdEdlbmVyYXRvci5oIgotI2luY2x1ZGUgIkpJVE11bEdlbmVy
YXRvci5oIgotI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJK
SVRTdWJHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIK
LQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewotCi11c2luZyBuYW1lc3BhY2UgREZH
OwotCi1jbGFzcyBCaW5hcnlTbmlwcGV0UmVnaXN0ZXJDb250ZXh0IHsKLSAgICAvLyBUaGUgcHVy
cG9zZSBvZiB0aGlzIGNsYXNzIGlzIHRvIHNodWZmbGUgcmVnaXN0ZXJzIHRvIGdldCB0aGVtIGlu
dG8gdGhlIHN0YXRlCi0gICAgLy8gdGhhdCBiYXNlbGluZSBjb2RlIGV4cGVjdHMgc28gdGhhdCB3
ZSBjYW4gdXNlIHRoZSBiYXNlbGluZSBzbmlwcGV0IGdlbmVyYXRvcnMgaS5lLgotICAgIC8vICAg
IDEuIEVuc3VyZSB0aGF0IHRoZSBpbnB1dHMgYW5kIG91dHB1dCBhcmUgbm90IGluIHJlc2VydmVk
IHJlZ2lzdGVycyAod2hpY2gKLSAgICAvLyAgICAgICBpbmNsdWRlIHRoZSB0YWcgcmVnaXN0ZXJz
KS4gVGhlIHNuaXBwZXQgd2lsbCB1c2UgdGhlc2UgcmVzZXJ2ZWQgcmVnaXN0ZXJzLgotICAgIC8v
ICAgICAgIEhlbmNlLCB3ZSBuZWVkIHRvIHB1dCB0aGUgaW5wdXRzIGFuZCBvdXRwdXQgaW4gb3Ro
ZXIgc2NyYXRjaCByZWdpc3RlcnMuCi0gICAgLy8gICAgMi4gVGFnIHJlZ2lzdGVycyBhcmUgbG9h
ZGVkIHdpdGggdGhlIGV4cGVjdGVkIHZhbHVlcy4KLSAgICAvLwotICAgIC8vIFdoZW4gdGhlIHNu
aXBwZXQgaXMgZG9uZToKLSAgICAvLyAgICAxLiBJZiB3ZSBoYWQgcmUtYXNzaWduZWQgdGhlIHJl
c3VsdCByZWdpc3RlciB0byBhIHNjcmF0Y2gsIHdlIG5lZWQgdG8gY29weSB0aGUKLSAgICAvLyAg
ICAgICByZXN1bHQgYmFjayBmcm9tIHRoZSBzY3JhdGNoLgotICAgIC8vICAgIDIuIFJlc3RvcmUg
dGhlIGlucHV0IGFuZCB0YWcgcmVnaXN0ZXJzIHRvIHRoZSB2YWx1ZXMgdGhhdCBMTFZNIHB1dCB0
aGVyZSBvcmlnaW5hbGx5LgotICAgIC8vICAgICAgIFRoYXQgaXMgdW5sZXNzIHdoZW4gb25lIG9m
IHRoZW0gaXMgYWxzbyB0aGUgcmVzdWx0IHJlZ2lzdGVyLiBJbiB0aGF0IGNhc2UsIHdlCi0gICAg
Ly8gICAgICAgZG9uJ3Qgd2FudCB0byB0cmFzaCB0aGUgcmVzdWx0LCBhbmQgaGVuY2UsIHNob3Vs
ZCBub3QgcmVzdG9yZSBpbnRvIGl0LgotCi1wdWJsaWM6Ci0gICAgQmluYXJ5U25pcHBldFJlZ2lz
dGVyQ29udGV4dChTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3ImIGFsbG9jYXRvciwgR1BSUmVnJiBy
ZXN1bHQsIEdQUlJlZyYgbGVmdCwgR1BSUmVnJiByaWdodCkKLSAgICAgICAgOiBtX2FsbG9jYXRv
cihhbGxvY2F0b3IpCi0gICAgICAgICwgbV9yZXN1bHQocmVzdWx0KQotICAgICAgICAsIG1fbGVm
dChsZWZ0KQotICAgICAgICAsIG1fcmlnaHQocmlnaHQpCi0gICAgICAgICwgbV9vcmlnUmVzdWx0
KHJlc3VsdCkKLSAgICAgICAgLCBtX29yaWdMZWZ0KGxlZnQpCi0gICAgICAgICwgbV9vcmlnUmln
aHQocmlnaHQpCi0gICAgewotICAgICAgICBtX2FsbG9jYXRvci5sb2NrKG1fcmVzdWx0KTsKLSAg
ICAgICAgbV9hbGxvY2F0b3IubG9jayhtX2xlZnQpOwotICAgICAgICBtX2FsbG9jYXRvci5sb2Nr
KG1fcmlnaHQpOwotCi0gICAgICAgIFJlZ2lzdGVyU2V0IGlucHV0QW5kT3V0cHV0UmVnaXN0ZXJz
ID0gUmVnaXN0ZXJTZXQobV9sZWZ0LCBtX3JpZ2h0LCBtX3Jlc3VsdCk7Ci0gICAgICAgIFJlZ2lz
dGVyU2V0IHJlc2VydmVkUmVnaXN0ZXJzOwotICAgICAgICBmb3IgKEdQUlJlZyByZWcgOiBHUFJJ
bmZvOjpyZXNlcnZlZFJlZ2lzdGVycygpKQotICAgICAgICAgICAgcmVzZXJ2ZWRSZWdpc3RlcnMu
c2V0KHJlZyk7Ci0KLSAgICAgICAgaWYgKHJlc2VydmVkUmVnaXN0ZXJzLmdldChtX2xlZnQpKQot
ICAgICAgICAgICAgbV9sZWZ0ID0gbV9hbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0g
ICAgICAgIGlmIChyZXNlcnZlZFJlZ2lzdGVycy5nZXQobV9yaWdodCkpIHsKLSAgICAgICAgICAg
IGlmIChtX29yaWdSaWdodCA9PSBtX29yaWdMZWZ0KQotICAgICAgICAgICAgICAgIG1fcmlnaHQg
PSBtX2xlZnQ7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9yaWdodCA9IG1f
YWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChy
ZXNlcnZlZFJlZ2lzdGVycy5nZXQobV9yZXN1bHQpKSB7Ci0gICAgICAgICAgICBpZiAobV9vcmln
UmVzdWx0ID09IG1fb3JpZ0xlZnQpCi0gICAgICAgICAgICAgICAgbV9yZXN1bHQgPSBtX2xlZnQ7
Ci0gICAgICAgICAgICBlbHNlIGlmIChtX29yaWdSZXN1bHQgPT0gbV9vcmlnUmlnaHQpCi0gICAg
ICAgICAgICAgICAgbV9yZXN1bHQgPSBtX3JpZ2h0OwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIG1fcmVzdWx0ID0gbV9hbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoIWlucHV0QW5kT3V0cHV0UmVnaXN0ZXJzLmdldChHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpKQotICAgICAgICAgICAgbV9zYXZlZFRhZ01hc2tSZWdpc3Rl
ciA9IG1fYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgICAgICBpZiAoIWlucHV0
QW5kT3V0cHV0UmVnaXN0ZXJzLmdldChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKQot
ICAgICAgICAgICAgbV9zYXZlZFRhZ1R5cGVOdW1iZXJSZWdpc3RlciA9IG1fYWxsb2NhdG9yLmFs
bG9jYXRlU2NyYXRjaEdQUigpOwotICAgIH0KLQotICAgIHZvaWQgaW5pdGlhbGl6ZVJlZ2lzdGVy
cyhDQ2FsbEhlbHBlcnMmIGppdCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2xlZnQgIT0gbV9vcmln
TGVmdCkKLSAgICAgICAgICAgIGppdC5tb3ZlKG1fb3JpZ0xlZnQsIG1fbGVmdCk7Ci0gICAgICAg
IGlmIChtX3JpZ2h0ICE9IG1fb3JpZ1JpZ2h0ICYmIG1fb3JpZ1JpZ2h0ICE9IG1fb3JpZ0xlZnQp
Ci0gICAgICAgICAgICBqaXQubW92ZShtX29yaWdSaWdodCwgbV9yaWdodCk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAobV9zYXZlZFRhZ01hc2tSZWdpc3RlciAhPSBJbnZhbGlkR1BSUmVnKQotICAg
ICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyLCBtX3NhdmVkVGFnTWFz
a1JlZ2lzdGVyKTsKLSAgICAgICAgaWYgKG1fc2F2ZWRUYWdUeXBlTnVtYmVyUmVnaXN0ZXIgIT0g
SW52YWxpZEdQUlJlZykKLSAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3RlciwgbV9zYXZlZFRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0KLSAgICAgICAgaml0
LmVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7Ci0gICAgfQotCi0gICAgdm9pZCBy
ZXN0b3JlUmVnaXN0ZXJzKENDYWxsSGVscGVycyYgaml0KQotICAgIHsKLSAgICAgICAgaWYgKG1f
b3JpZ1Jlc3VsdCAhPSBtX3Jlc3VsdCkKLSAgICAgICAgICAgIGppdC5tb3ZlKG1fcmVzdWx0LCBt
X29yaWdSZXN1bHQpOwotICAgICAgICBpZiAobV9vcmlnTGVmdCAhPSBtX2xlZnQgJiYgbV9vcmln
TGVmdCAhPSBtX29yaWdSZXN1bHQpCi0gICAgICAgICAgICBqaXQubW92ZShtX2xlZnQsIG1fb3Jp
Z0xlZnQpOwotICAgICAgICBpZiAobV9vcmlnUmlnaHQgIT0gbV9yaWdodCAmJiBtX29yaWdSaWdo
dCAhPSBtX29yaWdSZXN1bHQgJiYgbV9vcmlnUmlnaHQgIT0gbV9vcmlnTGVmdCkKLSAgICAgICAg
ICAgIGppdC5tb3ZlKG1fcmlnaHQsIG1fb3JpZ1JpZ2h0KTsKLQotICAgICAgICAvLyBXZSBhcmUg
Z3VhcmFudGVlZCB0aGF0IHRoZSB0YWcgcmVnaXN0ZXJzIGFyZSBub3QgdGhlIHNhbWUgYXMgdGhl
IG9yaWdpbmFsIGlucHV0Ci0gICAgICAgIC8vIG9yIG91dHB1dCByZWdpc3RlcnMuIE90aGVyd2lz
ZSwgd2Ugd291bGQgbm90IGhhdmUgYWxsb2NhdGVkIGEgc2NyYXRjaCBmb3IgdGhlbS4KLSAgICAg
ICAgLy8gSGVuY2UsIHdlIGRvbid0IG5lZWQgdG8gbmVlZCB0byBjaGVjayBmb3Igb3ZlcmxhcCBs
aWtlIHdlIGRvIGZvciB0aGUgaW5wdXQgcmVnaXN0ZXJzLgotICAgICAgICBpZiAobV9zYXZlZFRh
Z01hc2tSZWdpc3RlciAhPSBJbnZhbGlkR1BSUmVnKSB7Ci0gICAgICAgICAgICBBU1NFUlQoR1BS
SW5mbzo6dGFnTWFza1JlZ2lzdGVyICE9IG1fb3JpZ0xlZnQpOwotICAgICAgICAgICAgQVNTRVJU
KEdQUkluZm86OnRhZ01hc2tSZWdpc3RlciAhPSBtX29yaWdSaWdodCk7Ci0gICAgICAgICAgICBB
U1NFUlQoR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyICE9IG1fb3JpZ1Jlc3VsdCk7Ci0gICAgICAg
ICAgICBqaXQubW92ZShtX3NhdmVkVGFnTWFza1JlZ2lzdGVyLCBHUFJJbmZvOjp0YWdNYXNrUmVn
aXN0ZXIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX3NhdmVkVGFnVHlwZU51bWJlclJlZ2lz
dGVyICE9IEludmFsaWRHUFJSZWcpIHsKLSAgICAgICAgICAgIEFTU0VSVChHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIgIT0gbV9vcmlnTGVmdCk7Ci0gICAgICAgICAgICBBU1NFUlQoR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyICE9IG1fb3JpZ1JpZ2h0KTsKLSAgICAgICAgICAg
IEFTU0VSVChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIgIT0gbV9vcmlnUmVzdWx0KTsK
LSAgICAgICAgICAgIGppdC5tb3ZlKG1fc2F2ZWRUYWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsKLQotICAgIEdQUlJl
ZyYgbV9yZXN1bHQ7Ci0gICAgR1BSUmVnJiBtX2xlZnQ7Ci0gICAgR1BSUmVnJiBtX3JpZ2h0Owot
Ci0gICAgR1BSUmVnIG1fb3JpZ1Jlc3VsdDsKLSAgICBHUFJSZWcgbV9vcmlnTGVmdDsKLSAgICBH
UFJSZWcgbV9vcmlnUmlnaHQ7Ci0KLSAgICBHUFJSZWcgbV9zYXZlZFRhZ01hc2tSZWdpc3RlciB7
IEludmFsaWRHUFJSZWcgfTsKLSAgICBHUFJSZWcgbV9zYXZlZFRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciB7IEludmFsaWRHUFJSZWcgfTsKLX07Ci0KLWVudW0gU2NyYXRjaEZQUlVzYWdlIHsKLSAgICBE
b250TmVlZFNjcmF0Y2hGUFIsCi0gICAgTmVlZFNjcmF0Y2hGUFIKLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFNuaXBwZXRHZW5lcmF0b3I+Ci12b2lkIGdlbmVyYXRlQmluYXJ5Qml0T3BGYXN0UGF0
aChCaW5hcnlPcERlc2NyaXB0b3ImIGljLCBDQ2FsbEhlbHBlcnMmIGppdCwKLSAgICBHUFJSZWcg
cmVzdWx0LCBHUFJSZWcgbGVmdCwgR1BSUmVnIHJpZ2h0LCBSZWdpc3RlclNldCB1c2VkUmVnaXN0
ZXJzLAotICAgIENDYWxsSGVscGVyczo6SnVtcCYgZG9uZSwgQ0NhbGxIZWxwZXJzOjpKdW1wJiBz
bG93UGF0aFN0YXJ0KQotewotICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Io
dXNlZFJlZ2lzdGVycyk7Ci0KLSAgICBCaW5hcnlTbmlwcGV0UmVnaXN0ZXJDb250ZXh0IGNvbnRl
eHQoYWxsb2NhdG9yLCByZXN1bHQsIGxlZnQsIHJpZ2h0KTsKLQotICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotCi0gICAgU25pcHBldEdlbmVy
YXRvciBnZW4oaWMubGVmdE9wZXJhbmQoKSwgaWMucmlnaHRPcGVyYW5kKCksIEpTVmFsdWVSZWdz
KHJlc3VsdCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGxlZnQpLCBKU1ZhbHVlUmVncyhyaWdodCks
IHNjcmF0Y2hHUFIpOwotCi0gICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRT
dGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0gICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJl
Z2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFj
a1NwYWNlOjpOb0V4dHJhU3BhY2UpOwotCi0gICAgY29udGV4dC5pbml0aWFsaXplUmVnaXN0ZXJz
KGppdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoaml0KTsKLQotICAgIEFTU0VSVChnZW4u
ZGlkRW1pdEZhc3RQYXRoKCkpOwotICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsoJmppdCk7Ci0K
LSAgICBjb250ZXh0LnJlc3RvcmVSZWdpc3RlcnMoaml0KTsKLSAgICBhbGxvY2F0b3IucmVzdG9y
ZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKLSAgICBkb25l
ID0gaml0Lmp1bXAoKTsKLQotICAgIGdlbi5zbG93UGF0aEp1bXBMaXN0KCkubGluaygmaml0KTsK
LSAgICBjb250ZXh0LnJlc3RvcmVSZWdpc3RlcnMoaml0KTsKLSAgICBhbGxvY2F0b3IucmVzdG9y
ZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKLSAgICBzbG93
UGF0aFN0YXJ0ID0gaml0Lmp1bXAoKTsKLX0KLQotc3RhdGljIHZvaWQgZ2VuZXJhdGVSaWdodFNo
aWZ0RmFzdFBhdGgoQmluYXJ5T3BEZXNjcmlwdG9yJiBpYywgQ0NhbGxIZWxwZXJzJiBqaXQsCi0g
ICAgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGxlZnQsIEdQUlJlZyByaWdodCwgUmVnaXN0ZXJTZXQg
dXNlZFJlZ2lzdGVycywKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAmIGRvbmUsIENDYWxsSGVscGVy
czo6SnVtcCYgc2xvd1BhdGhTdGFydCwKLSAgICBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yOjpTaGlm
dFR5cGUgc2hpZnRUeXBlKQotewotICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0
b3IodXNlZFJlZ2lzdGVycyk7Ci0KLSAgICBCaW5hcnlTbmlwcGV0UmVnaXN0ZXJDb250ZXh0IGNv
bnRleHQoYWxsb2NhdG9yLCByZXN1bHQsIGxlZnQsIHJpZ2h0KTsKLQotICAgIEZQUlJlZyBsZWZ0
RlBSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEZQUigpOwotICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotCi0gICAgSklUUmlnaHRTaGlm
dEdlbmVyYXRvciBnZW4oaWMubGVmdE9wZXJhbmQoKSwgaWMucmlnaHRPcGVyYW5kKCksIEpTVmFs
dWVSZWdzKHJlc3VsdCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGxlZnQpLCBKU1ZhbHVlUmVncyhy
aWdodCksIGxlZnRGUFIsIHNjcmF0Y2hHUFIsIEludmFsaWRGUFJSZWcsIHNoaWZ0VHlwZSk7Ci0K
LSAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0
YXRlID0KLSAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5n
KGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6Ok5vRXh0cmFT
cGFjZSk7Ci0KLSAgICBjb250ZXh0LmluaXRpYWxpemVSZWdpc3RlcnMoaml0KTsKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aChqaXQpOwotCi0gICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgo
KSk7Ci0gICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluaygmaml0KTsKLSAgICBjb250ZXh0LnJlc3Rv
cmVSZWdpc3RlcnMoaml0KTsKLSAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5
UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKLSAgICBkb25lID0gaml0Lmp1bXAoKTsKLQot
ICAgIGdlbi5zbG93UGF0aEp1bXBMaXN0KCkubGluaygmaml0KTsKLSAgICBjb250ZXh0LnJlc3Rv
cmVSZWdpc3RlcnMoaml0KTsKLSAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5
UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKLSAgICBzbG93UGF0aFN0YXJ0ID0gaml0Lmp1
bXAoKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5QXJpdGhPcEdlbmVyYXRvciwgU2Ny
YXRjaEZQUlVzYWdlIHNjcmF0Y2hGUFJVc2FnZSA9IERvbnROZWVkU2NyYXRjaEZQUj4KLXZvaWQg
Z2VuZXJhdGVCaW5hcnlBcml0aE9wRmFzdFBhdGgoQmluYXJ5T3BEZXNjcmlwdG9yJiBpYywgQ0Nh
bGxIZWxwZXJzJiBqaXQsCi0gICAgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGxlZnQsIEdQUlJlZyBy
aWdodCwgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycywKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAm
IGRvbmUsIENDYWxsSGVscGVyczo6SnVtcCYgc2xvd1BhdGhTdGFydCkKLXsKLSAgICBTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOwotCi0gICAgQmluYXJ5
U25pcHBldFJlZ2lzdGVyQ29udGV4dCBjb250ZXh0KGFsbG9jYXRvciwgcmVzdWx0LCBsZWZ0LCBy
aWdodCk7Ci0KLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0
Y2hHUFIoKTsKLSAgICBGUFJSZWcgbGVmdEZQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hG
UFIoKTsKLSAgICBGUFJSZWcgcmlnaHRGUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoRlBS
KCk7Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBJbnZhbGlkRlBSUmVnOwotICAgIGlmIChzY3Jh
dGNoRlBSVXNhZ2UgPT0gTmVlZFNjcmF0Y2hGUFIpCi0gICAgICAgIHNjcmF0Y2hGUFIgPSBhbGxv
Y2F0b3IuYWxsb2NhdGVTY3JhdGNoRlBSKCk7Ci0KLSAgICBCaW5hcnlBcml0aE9wR2VuZXJhdG9y
IGdlbihpYy5sZWZ0T3BlcmFuZCgpLCBpYy5yaWdodE9wZXJhbmQoKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MobGVmdCksIEpTVmFsdWVSZWdzKHJpZ2h0KSwgbGVm
dEZQUiwgcmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIpOwotCi0gICAgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0gICAgICAg
IGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4dHJhU3BhY2UpOwotCi0gICAg
Y29udGV4dC5pbml0aWFsaXplUmVnaXN0ZXJzKGppdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoaml0KTsKLQotICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwotICAgIGdlbi5l
bmRKdW1wTGlzdCgpLmxpbmsoJmppdCk7Ci0gICAgY29udGV4dC5yZXN0b3JlUmVnaXN0ZXJzKGpp
dCk7Ci0gICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBw
cmVzZXJ2ZWRTdGF0ZSk7Ci0gICAgZG9uZSA9IGppdC5qdW1wKCk7Ci0KLSAgICBnZW4uc2xvd1Bh
dGhKdW1wTGlzdCgpLmxpbmsoJmppdCk7Ci0gICAgY29udGV4dC5yZXN0b3JlUmVnaXN0ZXJzKGpp
dCk7Ci0gICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBw
cmVzZXJ2ZWRTdGF0ZSk7Ci0gICAgc2xvd1BhdGhTdGFydCA9IGppdC5qdW1wKCk7Ci19Ci0KLXZv
aWQgZ2VuZXJhdGVCaW5hcnlPcEZhc3RQYXRoKEJpbmFyeU9wRGVzY3JpcHRvciYgaWMsIENDYWxs
SGVscGVycyYgaml0LAotICAgIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBsZWZ0LCBHUFJSZWcgcmln
aHQsIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMsCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wJiBk
b25lLCBDQ2FsbEhlbHBlcnM6Okp1bXAmIHNsb3dQYXRoU3RhcnQpCi17Ci0gICAgc3dpdGNoIChp
Yy5ub2RlVHlwZSgpKSB7Ci0gICAgY2FzZSBCaXRBbmQ6Ci0gICAgICAgIGdlbmVyYXRlQmluYXJ5
Qml0T3BGYXN0UGF0aDxKSVRCaXRBbmRHZW5lcmF0b3I+KGljLCBqaXQsIHJlc3VsdCwgbGVmdCwg
cmlnaHQsIHVzZWRSZWdpc3RlcnMsIGRvbmUsIHNsb3dQYXRoU3RhcnQpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEJpdE9yOgotICAgICAgICBnZW5lcmF0ZUJpbmFyeUJpdE9wRmFzdFBhdGg8
SklUQml0T3JHZW5lcmF0b3I+KGljLCBqaXQsIHJlc3VsdCwgbGVmdCwgcmlnaHQsIHVzZWRSZWdp
c3RlcnMsIGRvbmUsIHNsb3dQYXRoU3RhcnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJp
dFhvcjoKLSAgICAgICAgZ2VuZXJhdGVCaW5hcnlCaXRPcEZhc3RQYXRoPEpJVEJpdFhvckdlbmVy
YXRvcj4oaWMsIGppdCwgcmVzdWx0LCBsZWZ0LCByaWdodCwgdXNlZFJlZ2lzdGVycywgZG9uZSwg
c2xvd1BhdGhTdGFydCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQml0TFNoaWZ0OgotICAg
ICAgICBnZW5lcmF0ZUJpbmFyeUJpdE9wRmFzdFBhdGg8SklUTGVmdFNoaWZ0R2VuZXJhdG9yPihp
Yywgaml0LCByZXN1bHQsIGxlZnQsIHJpZ2h0LCB1c2VkUmVnaXN0ZXJzLCBkb25lLCBzbG93UGF0
aFN0YXJ0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCaXRSU2hpZnQ6Ci0gICAgICAgIGdl
bmVyYXRlUmlnaHRTaGlmdEZhc3RQYXRoKGljLCBqaXQsIHJlc3VsdCwgbGVmdCwgcmlnaHQsIHVz
ZWRSZWdpc3RlcnMsIGRvbmUsIHNsb3dQYXRoU3RhcnQsIEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3I6
OlNpZ25lZFNoaWZ0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCaXRVUlNoaWZ0OgotICAg
ICAgICBnZW5lcmF0ZVJpZ2h0U2hpZnRGYXN0UGF0aChpYywgaml0LCByZXN1bHQsIGxlZnQsIHJp
Z2h0LCB1c2VkUmVnaXN0ZXJzLCBkb25lLCBzbG93UGF0aFN0YXJ0LCBKSVRSaWdodFNoaWZ0R2Vu
ZXJhdG9yOjpVbnNpZ25lZFNoaWZ0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcml0aERp
djoKLSAgICAgICAgZ2VuZXJhdGVCaW5hcnlBcml0aE9wRmFzdFBhdGg8SklURGl2R2VuZXJhdG9y
LCBOZWVkU2NyYXRjaEZQUj4oaWMsIGppdCwgcmVzdWx0LCBsZWZ0LCByaWdodCwgdXNlZFJlZ2lz
dGVycywgZG9uZSwgc2xvd1BhdGhTdGFydCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJp
dGhNdWw6Ci0gICAgICAgIGdlbmVyYXRlQmluYXJ5QXJpdGhPcEZhc3RQYXRoPEpJVE11bEdlbmVy
YXRvcj4oaWMsIGppdCwgcmVzdWx0LCBsZWZ0LCByaWdodCwgdXNlZFJlZ2lzdGVycywgZG9uZSwg
c2xvd1BhdGhTdGFydCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJpdGhTdWI6Ci0gICAg
ICAgIGdlbmVyYXRlQmluYXJ5QXJpdGhPcEZhc3RQYXRoPEpJVFN1YkdlbmVyYXRvcj4oaWMsIGpp
dCwgcmVzdWx0LCBsZWZ0LCByaWdodCwgdXNlZFJlZ2lzdGVycywgZG9uZSwgc2xvd1BhdGhTdGFy
dCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVmFsdWVBZGQ6Ci0gICAgICAgIGdlbmVyYXRl
QmluYXJ5QXJpdGhPcEZhc3RQYXRoPEpJVEFkZEdlbmVyYXRvcj4oaWMsIGppdCwgcmVzdWx0LCBs
ZWZ0LCByaWdodCwgdXNlZFJlZ2lzdGVycywgZG9uZSwgc2xvd1BhdGhTdGFydCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgfQotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCi0KLSNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGls
ZUJpbmFyeU9wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
b21waWxlQmluYXJ5T3AuaAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlQmluYXJ5T3AuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0NyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBGVExDb21waWxlQmluYXJ5T3BfaAotI2RlZmluZSBGVExDb21waWxlQmluYXJ5T3BfaAotCi0j
aWYgRU5BQkxFKEZUTF9KSVQpCi0KLSNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLQotbmFtZXNw
YWNlIEpTQyB7Ci1uYW1lc3BhY2UgRlRMIHsKLQotY2xhc3MgQmluYXJ5T3BEZXNjcmlwdG9yOwot
Ci12b2lkIGdlbmVyYXRlQmluYXJ5T3BGYXN0UGF0aChCaW5hcnlPcERlc2NyaXB0b3ImLCBDQ2Fs
bEhlbHBlcnMmLAotICAgIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBsZWZ0LCBHUFJSZWcgcmlnaHQs
IFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMsCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wJiBkb25l
LCBDQ2FsbEhlbHBlcnM6Okp1bXAmIHNsb3dQYXRoU3RhcnQpOwotCi19IC8vIG5hbWVzcGFjZSBG
VEwKLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0KLSNl
bmRpZiAvLyBGVExDb21waWxlQmluYXJ5T3BfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExEV0FSRkRlYnVnTGluZUluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmNwcAkocmV2aXNpb24gMTk2Njg1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExEV0FSRkRlYnVnTGluZUluZm8uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkZUTERXQVJGRGVidWdMaW5lSW5mby5oIgotCi0jaWYgRU5B
QkxFKEZUTF9KSVQpCi0KLSNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgotCi1uYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7Ci0KLURlYnVnTGluZUludGVycHJldGVyOjpEZWJ1Z0xpbmVJbnRl
cnByZXRlcihjb25zdCBjaGFyKiBwcm9ncmFtKQotICAgIDogbV9wcm9ncmFtKHByb2dyYW0pCi0g
ICAgLCBtX2xvZ1Jlc3VsdHMoZmFsc2UpCi17Ci0gICAgcmVzZXRJbnRlcnByZXRlclN0YXRlKCk7
Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCByZWFkKGNvbnN0IGNoYXIqJiBw
cm9ncmFtKQotewotICAgIFQgcmVzdWx0ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHBy
b2dyYW0pOwotICAgIHByb2dyYW0gKz0gc2l6ZW9mKFQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLXVpbnQzMl90IERlYnVnTGluZUludGVycHJldGVyOjpwYXJzZVVMRUIxMjgoY29uc3QgY2hh
ciomIG9mZnNldCkKLXsKLSAgICB1aW50MzJfdCByZXN1bHQgPSAwOwotICAgIHVpbnQ4X3QgYnl0
ZTsKLSAgICB1bnNpZ25lZCBzaGlmdEFtb3VudCA9IDA7Ci0gICAgZG8gewotICAgICAgICBieXRl
ID0gcmVhZDx1aW50OF90PihvZmZzZXQpOwotICAgICAgICByZXN1bHQgfD0gKGJ5dGUgJiB+MHg4
MCkgPDwgc2hpZnRBbW91bnQ7Ci0gICAgICAgIHNoaWZ0QW1vdW50ICs9IDc7Ci0gICAgfSB3aGls
ZSAoYnl0ZSAmIDB4ODApOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWludDMyX3QgRGVidWdM
aW5lSW50ZXJwcmV0ZXI6OnBhcnNlU0xFQjEyOChjb25zdCBjaGFyKiYgb2Zmc2V0KQotewotICAg
IGludDMyX3QgcmVzdWx0ID0gMDsKLSAgICB1aW50OF90IGJ5dGU7Ci0gICAgdW5zaWduZWQgc2hp
ZnRBbW91bnQgPSAwOwotICAgIGRvIHsKLSAgICAgICAgYnl0ZSA9IHJlYWQ8dWludDhfdD4ob2Zm
c2V0KTsKLSAgICAgICAgcmVzdWx0IHw9IChieXRlICYgfjB4ODApIDw8IHNoaWZ0QW1vdW50Owot
ICAgICAgICBzaGlmdEFtb3VudCArPSA3OwotICAgIH0gd2hpbGUgKGJ5dGUgJiAweDgwKTsKLSAg
ICAKLSAgICAvLyBJZiB0aGUgc2lnbiBiaXQgKGluIHRoaXMgY2FzZSwgdGhlIHNlY29uZCBNU0Ip
IG9uIHRoZSBsYXN0IGJ5dGUgaXMgc2V0IHdlIG5lZWQgdG8gemVybyBleHRlbmQuCi0gICAgaWYg
KGJ5dGUgJiAweDQwKQotICAgICAgICByZXN1bHQgfD0gLSgxIDw8IHNoaWZ0QW1vdW50KTsKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIERlYnVnTGluZUludGVycHJldGVyOjpydW4oKQot
ewotICAgIHBhcnNlUHJvbG9ndWUoKTsKLSAgICBpbnRlcnByZXRTdGF0ZW1lbnRQcm9ncmFtKCk7
Ci0gICAgaWYgKG1fbG9nUmVzdWx0cykKLSAgICAgICAgcHJpbnRMaW5lSW5mbygpOwotfQotCi12
b2lkIERlYnVnTGluZUludGVycHJldGVyOjpwYXJzZVByb2xvZ3VlKCkKLXsKLSAgICBjb25zdCBj
aGFyKiBjdXJyZW50UHJvZ3JhbU9mZnNldCA9IG1fcHJvZ3JhbTsKLSAgICBtX3Byb2xvZ3VlLnRv
dGFsTGVuZ3RoID0gcmVhZDx1aW50MzJfdD4oY3VycmVudFByb2dyYW1PZmZzZXQpOwotICAgIGlm
IChtX3Byb2xvZ3VlLnRvdGFsTGVuZ3RoID09IDB4ZmZmZmZmZmYpIHsKLSAgICAgICAgLy8gVGhp
cyBpcyA2NC1iaXQgRFdBUkYgZm9ybWF0LgotICAgICAgICBtX3Byb2xvZ3VlLmZvcm1hdCA9IFNp
eHR5Rm91ckJpdDsKLSAgICAgICAgbV9wcm9sb2d1ZS50b3RhbExlbmd0aCA9IHJlYWQ8dWludDY0
X3Q+KGN1cnJlbnRQcm9ncmFtT2Zmc2V0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9wcm9sb2d1
ZS5mb3JtYXQgPSBUaGlydHlUd29CaXQ7Ci0gICAgbV9wcm9sb2d1ZS52ZXJzaW9uID0gcmVhZDx1
aW50MTZfdD4oY3VycmVudFByb2dyYW1PZmZzZXQpOwotICAgIAotICAgIGlmIChtX3Byb2xvZ3Vl
LmZvcm1hdCA9PSBUaGlydHlUd29CaXQpCi0gICAgICAgIG1fcHJvbG9ndWUucHJvbG9ndWVMZW5n
dGggPSByZWFkPHVpbnQzMl90PihjdXJyZW50UHJvZ3JhbU9mZnNldCk7Ci0gICAgZWxzZQotICAg
ICAgICBtX3Byb2xvZ3VlLnByb2xvZ3VlTGVuZ3RoID0gcmVhZDx1aW50NjRfdD4oY3VycmVudFBy
b2dyYW1PZmZzZXQpOwotICAgIGNvbnN0IGNoYXIqIGFmdGVyTGVuZ3RoT2Zmc2V0ID0gY3VycmVu
dFByb2dyYW1PZmZzZXQ7Ci0gICAgCi0gICAgbV9wcm9sb2d1ZS5taW5pbXVtSW5zdHJ1Y3Rpb25M
ZW5ndGggPSByZWFkPHVpbnQ4X3Q+KGN1cnJlbnRQcm9ncmFtT2Zmc2V0KTsKLSAgICBtX3Byb2xv
Z3VlLmRlZmF1bHRJc1N0YXRlbWVudCA9IHJlYWQ8dWludDhfdD4oY3VycmVudFByb2dyYW1PZmZz
ZXQpOwotICAgIG1fcHJvbG9ndWUubGluZUJhc2UgPSByZWFkPGludDhfdD4oY3VycmVudFByb2dy
YW1PZmZzZXQpOwotICAgIG1fcHJvbG9ndWUubGluZVJhbmdlID0gcmVhZDx1aW50OF90PihjdXJy
ZW50UHJvZ3JhbU9mZnNldCk7Ci0gICAgbV9wcm9sb2d1ZS5vcGNvZGVCYXNlID0gcmVhZDx1aW50
OF90PihjdXJyZW50UHJvZ3JhbU9mZnNldCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8
IG1fcHJvbG9ndWUub3Bjb2RlQmFzZTsgKytpKQotICAgICAgICBtX3Byb2xvZ3VlLnN0YW5kYXJk
T3Bjb2RlTGVuZ3Rocy5hcHBlbmQocmVhZDx1aW50OF90PihjdXJyZW50UHJvZ3JhbU9mZnNldCkp
OwotICAgIHBhcnNlSW5jbHVkZURpcmVjdG9yaWVzKGN1cnJlbnRQcm9ncmFtT2Zmc2V0KTsKLSAg
ICBwYXJzZUZpbGVFbnRyaWVzKGN1cnJlbnRQcm9ncmFtT2Zmc2V0KTsKLSAgICAKLSAgICBtX3By
b2dyYW0gPSBhZnRlckxlbmd0aE9mZnNldCArIG1fcHJvbG9ndWUucHJvbG9ndWVMZW5ndGg7Ci0K
LSAgICBpZiAoIW1fbG9nUmVzdWx0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGF0YUxvZygi
XG5Qcm9sb2d1ZTpcbiIpOwotICAgIGRhdGFMb2coInRvdGFsTGVuZ3RoID0gIiwgbV9wcm9sb2d1
ZS50b3RhbExlbmd0aCwgIlxuIik7Ci0gICAgZGF0YUxvZygidmVyc2lvbiA9ICIsIG1fcHJvbG9n
dWUudmVyc2lvbiwgIlxuIik7Ci0gICAgZGF0YUxvZygicHJvbG9ndWVMZW5ndGggPSAiLCBtX3By
b2xvZ3VlLnByb2xvZ3VlTGVuZ3RoLCAiXG4iKTsKLSAgICBkYXRhTG9nKCJtaW5pbXVtSW5zdHJ1
Y3Rpb25MZW5ndGggPSAiLCBtX3Byb2xvZ3VlLm1pbmltdW1JbnN0cnVjdGlvbkxlbmd0aCwgIlxu
Iik7Ci0gICAgZGF0YUxvZygiZGVmYXVsdElzU3RhdGVtZW50ID0gIiwgbV9wcm9sb2d1ZS5kZWZh
dWx0SXNTdGF0ZW1lbnQsICJcbiIpOwotICAgIGRhdGFMb2coImxpbmVCYXNlID0gIiwgbV9wcm9s
b2d1ZS5saW5lQmFzZSwgIlxuIik7Ci0gICAgZGF0YUxvZygibGluZVJhbmdlID0gIiwgbV9wcm9s
b2d1ZS5saW5lUmFuZ2UsICJcbiIpOwotICAgIGRhdGFMb2coIm9wY29kZUJhc2UgPSAiLCBtX3By
b2xvZ3VlLm9wY29kZUJhc2UsICJcbiIpOwotICAgIAotICAgIGRhdGFMb2coIlxuU3RhbmRhcmQg
T3Bjb2RlIExlbmd0aHM6XG4iKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9wcm9s
b2d1ZS5vcGNvZGVCYXNlOyArK2kpCi0gICAgICAgIGRhdGFMb2coInN0YW5kYXJkT3Bjb2RlTGVu
Z3Roc1siLCBpIC0gMSwgIl0gPSAiLCBtX3Byb2xvZ3VlLnN0YW5kYXJkT3Bjb2RlTGVuZ3Roc1tp
IC0gMV0sICJcbiIpOwotICAgIAotICAgIGRhdGFMb2coIlxuSW5jbHVkZSBEaXJlY3Rvcmllczpc
biIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb2xvZ3VlLmluY2x1ZGVEaXJl
Y3Rvcmllcy5zaXplKCk7ICsraSkKLSAgICAgICAgZGF0YUxvZygiaW5jbHVkZURpcmVjdG9yaWVz
WyIsIGksICJdID0gIiwgbV9wcm9sb2d1ZS5pbmNsdWRlRGlyZWN0b3JpZXNbaV0sICJcbiIpOwot
ICAgIAotICAgIGRhdGFMb2coIlxuRmlsZXM6XG4iKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9wcm9sb2d1ZS5maWxlRW50cmllcy5zaXplKCk7ICsraSkgewotICAgICAgICBGaWxl
RW50cnkmIGVudHJ5ID0gbV9wcm9sb2d1ZS5maWxlRW50cmllc1tpXTsKLSAgICAgICAgZGF0YUxv
ZygiZmlsZUVudHJpZXNbIiwgaSwgIl0gPSB7bmFtZTogXCIiLCBlbnRyeS5uYW1lLCAiXCIsIGRp
cl9pbmRleDogIiwgZW50cnkuZGlyZWN0b3J5SW5kZXgsICIsIGxhc3RfbW9kaWZpZWQ6ICIsIGVu
dHJ5Lmxhc3RNb2RpZmllZCwgIiwgc2l6ZTogIiwgZW50cnkuc2l6ZSwgIn1cbiIpOwotICAgIH0K
LX0KLQotdm9pZCBEZWJ1Z0xpbmVJbnRlcnByZXRlcjo6cGFyc2VJbmNsdWRlRGlyZWN0b3JpZXMo
Y29uc3QgY2hhciomIG9mZnNldCkKLXsKLSAgICBzaXplX3QgbGVuZ3RoID0gMDsKLSAgICB3aGls
ZSAoKGxlbmd0aCA9IHN0cmxlbihvZmZzZXQpKSkgewotICAgICAgICBtX3Byb2xvZ3VlLmluY2x1
ZGVEaXJlY3Rvcmllcy5hcHBlbmQob2Zmc2V0KTsKLSAgICAgICAgb2Zmc2V0ICs9IGxlbmd0aCAr
IDE7Ci0gICAgfQotICAgIAotICAgIC8vIEV4dHJhIGluY3JlbWVudCB0byBnZXQgcGFzdCB0aGUg
bGFzdCBudWxsIGJ5dGUuCi0gICAgb2Zmc2V0ICs9IDE7Ci19Ci0KLXZvaWQgRGVidWdMaW5lSW50
ZXJwcmV0ZXI6OnBhcnNlRmlsZUVudHJpZXMoY29uc3QgY2hhciomIG9mZnNldCkKLXsKLSAgICB3
aGlsZSAodHJ1ZSkgewotICAgICAgICBEZWJ1Z0xpbmVJbnRlcnByZXRlcjo6RmlsZUVudHJ5IG5l
eHRFbnRyeTsKLSAgICAgICAgaWYgKCFwYXJzZUZpbGVFbnRyeShvZmZzZXQsIG5leHRFbnRyeSkp
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgbV9wcm9sb2d1ZS5maWxlRW50cmllcy5hcHBl
bmQobmV4dEVudHJ5KTsKLSAgICB9Ci19Ci0KLWJvb2wgRGVidWdMaW5lSW50ZXJwcmV0ZXI6OnBh
cnNlRmlsZUVudHJ5KGNvbnN0IGNoYXIqJiBvZmZzZXQsIEZpbGVFbnRyeSYgZW50cnkpCi17Ci0g
ICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihvZmZzZXQpOwotICAgIGlmICghbGVuZ3RoKSB7Ci0g
ICAgICAgIG9mZnNldCArPSAxOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGVu
dHJ5Lm5hbWUgPSBvZmZzZXQ7Ci0gICAgb2Zmc2V0ICs9IGxlbmd0aCArIDE7Ci0gICAgZW50cnku
ZGlyZWN0b3J5SW5kZXggPSBwYXJzZVVMRUIxMjgob2Zmc2V0KTsKLSAgICBlbnRyeS5sYXN0TW9k
aWZpZWQgPSBwYXJzZVVMRUIxMjgob2Zmc2V0KTsKLSAgICBlbnRyeS5zaXplID0gcGFyc2VVTEVC
MTI4KG9mZnNldCk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRGVidWdMaW5l
SW50ZXJwcmV0ZXI6OmludGVycHJldFN0YXRlbWVudFByb2dyYW0oKQotewotICAgIGNvbnN0IGNo
YXIqIGN1cnJlbnRQcm9ncmFtT2Zmc2V0ID0gbV9wcm9ncmFtOwotICAgIGJvb2wga2VlcEdvaW5n
ID0gdHJ1ZTsKLSAgICBkbyB7Ci0gICAgICAgIGtlZXBHb2luZyA9IGludGVycHJldE9wY29kZShj
dXJyZW50UHJvZ3JhbU9mZnNldCk7Ci0gICAgfSB3aGlsZSAoa2VlcEdvaW5nKTsKLX0KLQotYm9v
bCBEZWJ1Z0xpbmVJbnRlcnByZXRlcjo6aW50ZXJwcmV0T3Bjb2RlKGNvbnN0IGNoYXIqJiBvZmZz
ZXQpCi17Ci0gICAgdWludDhfdCBuZXh0T3Bjb2RlID0gcmVhZDx1aW50OF90PihvZmZzZXQpOwot
ICAgIHN3aXRjaCAobmV4dE9wY29kZSkgewotICAgIGNhc2UgRXh0ZW5kZWRPcGNvZGVzOiB7Ci0g
ICAgICAgIHVpbnQzMl90IGxlbmd0aCA9IHBhcnNlVUxFQjEyOChvZmZzZXQpOwotICAgICAgICBp
ZiAoIWxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdWludDhfdCBl
eHRlbmRlZE9wY29kZSA9IHJlYWQ8dWludDhfdD4ob2Zmc2V0KTsKLSAgICAgICAgc3dpdGNoIChl
eHRlbmRlZE9wY29kZSkgewotICAgICAgICBjYXNlIERXX0xORV9lbmRfc2VxdWVuY2U6IHsKLSAg
ICAgICAgICAgIG1fY3VycmVudFN0YXRlLmVuZFNlcXVlbmNlID0gdHJ1ZTsKLSAgICAgICAgICAg
IG1fbGluZUluZm9NYXRyaXguYXBwZW5kKG1fY3VycmVudFN0YXRlKTsKLSAgICAgICAgICAgIHJl
c2V0SW50ZXJwcmV0ZXJTdGF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBEV19MTkVfc2V0X2FkZHJlc3M6IHsKLSAgICAgICAgICAgIG1fY3VycmVudFN0
YXRlLmFkZHJlc3MgPSByZWFkPHNpemVfdD4ob2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgRFdfTE5FX2RlZmluZV9maWxlOiB7Ci0gICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIlVuaW1wbGVtZW50ZWQgZXh0ZW5kZWQgb3Bjb2RlIERXX0xORV9k
ZWZpbmVfZmlsZS5cbiIpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6IHsKLSAg
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBleHRlbmRlZCBvcGNvZGUuXG4iKTsK
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAg
ICAgLyogU3RhbmRhcmQgb3Bjb2RlcyAqLwotICAgIGNhc2UgRFdfTE5TX2NvcHk6IHsKLSAgICAg
ICAgbV9saW5lSW5mb01hdHJpeC5hcHBlbmQobV9jdXJyZW50U3RhdGUpOwotICAgICAgICBtX2N1
cnJlbnRTdGF0ZS5pc0Jhc2ljQmxvY2sgPSBmYWxzZTsKLSAgICAgICAgbV9jdXJyZW50U3RhdGUu
cHJvbG9ndWVFbmQgPSBmYWxzZTsKLSAgICAgICAgbV9jdXJyZW50U3RhdGUuZXBpbG9ndWVCZWdp
biA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBEV19MTlNfYWR2YW5j
ZV9wYzogewotICAgICAgICB1aW50MzJfdCBhZHZhbmNlID0gcGFyc2VVTEVCMTI4KG9mZnNldCk7
Ci0gICAgICAgIG1fY3VycmVudFN0YXRlLmFkZHJlc3MgKz0gYWR2YW5jZSAqIG1fcHJvbG9ndWUu
bWluaW11bUluc3RydWN0aW9uTGVuZ3RoOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBEV19MTlNfYWR2YW5jZV9saW5lOiB7Ci0gICAgICAgIGludDMyX3QgYWR2YW5jZSA9IHBhcnNl
U0xFQjEyOChvZmZzZXQpOwotICAgICAgICBtX2N1cnJlbnRTdGF0ZS5saW5lICs9IGFkdmFuY2U7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIERXX0xOU19zZXRfZmlsZTogewotICAg
ICAgICB1aW50MzJfdCBmaWxlSW5kZXggPSBwYXJzZVVMRUIxMjgob2Zmc2V0KTsKLSAgICAgICAg
bV9jdXJyZW50U3RhdGUuZmlsZSA9IGZpbGVJbmRleDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGNhc2UgRFdfTE5TX3NldF9jb2x1bW46IHsKLSAgICAgICAgbV9jdXJyZW50U3RhdGUuY29s
dW1uID0gcGFyc2VVTEVCMTI4KG9mZnNldCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBj
YXNlIERXX0xOU19uZWdhdGVfc3RtdDogewotICAgICAgICBtX2N1cnJlbnRTdGF0ZS5pc1N0YXRl
bWVudCA9ICFtX2N1cnJlbnRTdGF0ZS5pc1N0YXRlbWVudDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgRFdfTE5TX3NldF9iYXNpY19ibG9jazogewotICAgICAgICBtX2N1cnJlbnRT
dGF0ZS5pc0Jhc2ljQmxvY2sgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBEV19MTlNfY29uc3RfYWRkX3BjOiB7Ci0gICAgICAgIHVpbnQ4X3QgYWRqdXN0ZWRPcGNvZGUg
PSBuZXh0T3Bjb2RlIC0gbV9wcm9sb2d1ZS5vcGNvZGVCYXNlOwotICAgICAgICB1aW50MzJfdCBh
ZGRyZXNzSW5jcmVtZW50ID0gKGFkanVzdGVkT3Bjb2RlIC8gbV9wcm9sb2d1ZS5saW5lUmFuZ2Up
ICogbV9wcm9sb2d1ZS5taW5pbXVtSW5zdHJ1Y3Rpb25MZW5ndGg7Ci0gICAgICAgIG1fY3VycmVu
dFN0YXRlLmFkZHJlc3MgKz0gYWRkcmVzc0luY3JlbWVudDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgRFdfTE5TX2ZpeGVkX2FkdmFuY2VfcGM6IHsKLSAgICAgICAgdWludDE2X3Qg
YWR2YW5jZSA9IHJlYWQ8dWludDE2X3Q+KG9mZnNldCk7Ci0gICAgICAgIG1fY3VycmVudFN0YXRl
LmFkZHJlc3MgKz0gYWR2YW5jZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRFdf
TE5TX3NldF9wcm9sb2d1ZV9lbmQ6IHsKLSAgICAgICAgbV9jdXJyZW50U3RhdGUucHJvbG9ndWVF
bmQgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBEV19MTlNfc2V0X2Vw
aWxvZ3VlX2JlZ2luOiB7Ci0gICAgICAgIG1fY3VycmVudFN0YXRlLmVwaWxvZ3VlQmVnaW4gPSB0
cnVlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBEV19MTlNfc2V0X2lzYTogewot
ICAgICAgICBtX2N1cnJlbnRTdGF0ZS5pc2EgPSBwYXJzZVVMRUIxMjgob2Zmc2V0KTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAvKiBTcGVjaWFsIG9wY29kZXMgKi8KLSAgICBkZWZh
dWx0OiB7Ci0gICAgICAgIHVpbnQ4X3QgYWRqdXN0ZWRPcGNvZGUgPSBuZXh0T3Bjb2RlIC0gbV9w
cm9sb2d1ZS5vcGNvZGVCYXNlOwotICAgICAgICB1aW50MzJfdCBhZGRyZXNzSW5jcmVtZW50ID0g
KGFkanVzdGVkT3Bjb2RlIC8gbV9wcm9sb2d1ZS5saW5lUmFuZ2UpICogbV9wcm9sb2d1ZS5taW5p
bXVtSW5zdHJ1Y3Rpb25MZW5ndGg7Ci0gICAgICAgIGludDMyX3QgbGluZUluY3JlbWVudCA9IG1f
cHJvbG9ndWUubGluZUJhc2UgKyAoYWRqdXN0ZWRPcGNvZGUgJSBtX3Byb2xvZ3VlLmxpbmVSYW5n
ZSk7Ci0gICAgICAgIG1fY3VycmVudFN0YXRlLmFkZHJlc3MgKz0gYWRkcmVzc0luY3JlbWVudDsK
LSAgICAgICAgbV9jdXJyZW50U3RhdGUubGluZSArPSBsaW5lSW5jcmVtZW50OwotICAgICAgICBt
X2xpbmVJbmZvTWF0cml4LmFwcGVuZChtX2N1cnJlbnRTdGF0ZSk7Ci0gICAgICAgIG1fY3VycmVu
dFN0YXRlLmlzQmFzaWNCbG9jayA9IGZhbHNlOwotICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm9s
b2d1ZUVuZCA9IGZhbHNlOwotICAgICAgICBtX2N1cnJlbnRTdGF0ZS5lcGlsb2d1ZUJlZ2luID0g
ZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgRGVidWdMaW5lSW50ZXJwcmV0ZXI6OnByaW50TGluZUluZm8oKQotewotICAgIGRh
dGFMb2coIlxuTGluZSBJbmZvIE1hdHJpeDpcbiIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2xpbmVJbmZvTWF0cml4LnNpemUoKTsgKytpKQotICAgICAgICBwcmludExpbmVJbmZv
KG1fbGluZUluZm9NYXRyaXhbaV0pOwotICAgIGRhdGFMb2coIlxuIik7Ci19Ci0KLXZvaWQgRGVi
dWdMaW5lSW50ZXJwcmV0ZXI6OnByaW50TGluZUluZm8oTGluZUluZm8mIGluZm8pCi17Ci0gICAg
ZGF0YUxvZ0YoImFkZHJlc3M6ICVwIiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaW5mby5hZGRy
ZXNzKSk7Ci0gICAgZGF0YUxvZygiICBmaWxlOiAiLCBpbmZvLmZpbGUsICIgIGxpbmU6ICIsIGlu
Zm8ubGluZSwgIiAgY29sdW1uOiAiLCBpbmZvLmNvbHVtbiwgIiAgaXNhOiAiLCBpbmZvLmlzYSwg
IiAgIik7Ci0gICAgZGF0YUxvZygiICBzdGF0ZW1lbnQ/OiAiLCBpbmZvLmlzU3RhdGVtZW50KTsK
LSAgICBkYXRhTG9nKCIgIGJhc2ljIGJsb2NrPzogIiwgaW5mby5pc0Jhc2ljQmxvY2spOwotICAg
IGRhdGFMb2coIiAgZW5kIHNlcXVlbmNlPzogIiwgaW5mby5lbmRTZXF1ZW5jZSk7Ci0gICAgZGF0
YUxvZygiICBwcm9sb2d1ZSBlbmQ/OiAiLCBpbmZvLnByb2xvZ3VlRW5kKTsKLSAgICBkYXRhTG9n
KCIgIGVwaWxvZ3VlIGJlZ2luPzogIiwgaW5mby5lcGlsb2d1ZUJlZ2luKTsKLSAgICBkYXRhTG9n
KCJcbiIpOwotfQotCi12b2lkIERlYnVnTGluZUludGVycHJldGVyOjpyZXNldEludGVycHJldGVy
U3RhdGUoKQotewotICAgIG1fY3VycmVudFN0YXRlLmFkZHJlc3MgPSAwOwotICAgIG1fY3VycmVu
dFN0YXRlLmZpbGUgPSAxOwotICAgIG1fY3VycmVudFN0YXRlLmxpbmUgPSAxOwotICAgIG1fY3Vy
cmVudFN0YXRlLmNvbHVtbiA9IDA7Ci0gICAgbV9jdXJyZW50U3RhdGUuaXNhID0gMDsKLSAgICBt
X2N1cnJlbnRTdGF0ZS5pc1N0YXRlbWVudCA9IGZhbHNlOwotICAgIG1fY3VycmVudFN0YXRlLmlz
QmFzaWNCbG9jayA9IGZhbHNlOwotICAgIG1fY3VycmVudFN0YXRlLmVuZFNlcXVlbmNlID0gZmFs
c2U7Ci0gICAgbV9jdXJyZW50U3RhdGUucHJvbG9ndWVFbmQgPSBmYWxzZTsKLSAgICBtX2N1cnJl
bnRTdGF0ZS5lcGlsb2d1ZUJlZ2luID0gZmFsc2U7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKLQotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTERXQVJGRGVidWdMaW5lSW5mby5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmgJKHJldmlzaW9uIDE5
NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRFdBUkZEZWJ1Z0xpbmVJbmZv
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IEZUTERXQVJGRGVidWdMaW5lSW5mb19oCi0jZGVmaW5lIEZUTERXQVJGRGVidWdMaW5lSW5mb19o
Ci0KLSNpZiBFTkFCTEUoRlRMX0pJVCkKLQotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgewotCi1jbGFzcyBEZWJ1Z0xpbmVJbnRlcnByZXRlciB7Ci1wdWJsaWM6Ci0gICAgRGVidWdM
aW5lSW50ZXJwcmV0ZXIoY29uc3QgY2hhciogcHJvZ3JhbSk7Ci0KLSAgICB2b2lkIHJ1bigpOwot
Ci1wcml2YXRlOgotICAgIHN0cnVjdCBGaWxlRW50cnkgewotICAgICAgICBTdHJpbmcgbmFtZTsK
LSAgICAgICAgdWludDMyX3QgZGlyZWN0b3J5SW5kZXg7Ci0gICAgICAgIHVpbnQzMl90IGxhc3RN
b2RpZmllZDsKLSAgICAgICAgdWludDMyX3Qgc2l6ZTsKLSAgICB9OwotCi0gICAgdm9pZCByZXNl
dEludGVycHJldGVyU3RhdGUoKTsKLSAgICB2b2lkIGludGVycHJldFN0YXRlbWVudFByb2dyYW0o
KTsKLSAgICBib29sIGludGVycHJldE9wY29kZShjb25zdCBjaGFyKiYpOwotICAgIHZvaWQgcGFy
c2VQcm9sb2d1ZSgpOwotICAgIHZvaWQgcGFyc2VJbmNsdWRlRGlyZWN0b3JpZXMoY29uc3QgY2hh
ciomKTsKLSAgICB2b2lkIHBhcnNlRmlsZUVudHJpZXMoY29uc3QgY2hhciomKTsKLSAgICBib29s
IHBhcnNlRmlsZUVudHJ5KGNvbnN0IGNoYXIqJiwgRGVidWdMaW5lSW50ZXJwcmV0ZXI6OkZpbGVF
bnRyeSYpOwotICAgIHVpbnQzMl90IHBhcnNlVUxFQjEyOChjb25zdCBjaGFyKiYpOwotICAgIGlu
dDMyX3QgcGFyc2VTTEVCMTI4KGNvbnN0IGNoYXIqJik7Ci0KLSAgICBjb25zdCBjaGFyKiBtX3By
b2dyYW07Ci0gICAgYm9vbCBtX2xvZ1Jlc3VsdHM7Ci0KLSAgICBzdHJ1Y3QgTGluZUluZm8gewot
ICAgICAgICBzaXplX3QgYWRkcmVzczsKLSAgICAgICAgdWludDMyX3QgZmlsZTsKLSAgICAgICAg
dWludDMyX3QgbGluZTsKLSAgICAgICAgdWludDMyX3QgY29sdW1uOwotICAgICAgICB1aW50MzJf
dCBpc2E7Ci0gICAgICAgIGJvb2wgaXNTdGF0ZW1lbnQ7Ci0gICAgICAgIGJvb2wgaXNCYXNpY0Js
b2NrOwotICAgICAgICBib29sIGVuZFNlcXVlbmNlOwotICAgICAgICBib29sIHByb2xvZ3VlRW5k
OwotICAgICAgICBib29sIGVwaWxvZ3VlQmVnaW47Ci0gICAgfTsKLSAgICAKLSAgICB2b2lkIHBy
aW50TGluZUluZm8oTGluZUluZm8mKTsKLSAgICB2b2lkIHByaW50TGluZUluZm8oKTsKLQotICAg
IExpbmVJbmZvIG1fY3VycmVudFN0YXRlOwotICAgIFZlY3RvcjxMaW5lSW5mbz4gbV9saW5lSW5m
b01hdHJpeDsKLQotICAgIGVudW0gRHdhcmZGb3JtYXQgewotICAgICAgICBTaXh0eUZvdXJCaXQs
Ci0gICAgICAgIFRoaXJ0eVR3b0JpdAotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUHJvbG9ndWUgewot
ICAgICAgICBQcm9sb2d1ZSgpCi0gICAgICAgICAgICA6IHRvdGFsTGVuZ3RoKDApCi0gICAgICAg
ICAgICAsIGZvcm1hdChUaGlydHlUd29CaXQpCi0gICAgICAgICAgICAsIHZlcnNpb24oMCkKLSAg
ICAgICAgICAgICwgcHJvbG9ndWVMZW5ndGgoMCkKLSAgICAgICAgICAgICwgbWluaW11bUluc3Ry
dWN0aW9uTGVuZ3RoKDApCi0gICAgICAgICAgICAsIGRlZmF1bHRJc1N0YXRlbWVudCgwKQotICAg
ICAgICAgICAgLCBsaW5lQmFzZSgwKQotICAgICAgICAgICAgLCBsaW5lUmFuZ2UoMCkKLSAgICAg
ICAgICAgICwgb3Bjb2RlQmFzZSgwKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB1
aW50NjRfdCB0b3RhbExlbmd0aDsKLSAgICAgICAgRHdhcmZGb3JtYXQgZm9ybWF0OwotICAgICAg
ICB1aW50MTZfdCB2ZXJzaW9uOwotICAgICAgICB1aW50NjRfdCBwcm9sb2d1ZUxlbmd0aDsKLSAg
ICAgICAgdWludDhfdCBtaW5pbXVtSW5zdHJ1Y3Rpb25MZW5ndGg7Ci0gICAgICAgIHVpbnQ4X3Qg
ZGVmYXVsdElzU3RhdGVtZW50OwotICAgICAgICBpbnQ4X3QgbGluZUJhc2U7Ci0gICAgICAgIHVp
bnQ4X3QgbGluZVJhbmdlOwotICAgICAgICB1aW50OF90IG9wY29kZUJhc2U7Ci0gICAgICAgIFZl
Y3Rvcjx1aW50OF90PiBzdGFuZGFyZE9wY29kZUxlbmd0aHM7Ci0gICAgICAgIFZlY3RvcjxTdHJp
bmc+IGluY2x1ZGVEaXJlY3RvcmllczsKLSAgICAgICAgVmVjdG9yPEZpbGVFbnRyeT4gZmlsZUVu
dHJpZXM7Ci0gICAgfSBtX3Byb2xvZ3VlOwotCi0gICAgZW51bSBFeHRlbmRlZE9wY29kZSB7Ci0g
ICAgICAgIERXX0xORV9lbmRfc2VxdWVuY2UgPSAweDEsCi0gICAgICAgIERXX0xORV9zZXRfYWRk
cmVzcyAgPSAweDIsCi0gICAgICAgIERXX0xORV9kZWZpbmVfZmlsZSAgPSAweDMKLSAgICB9Owot
Ci0gICAgZW51bSBTdGFuZGFyZE9wY29kZSB7Ci0gICAgICAgIEV4dGVuZGVkT3Bjb2RlcyAgICAg
ICAgICAgICA9IDB4MCwKLSAgICAgICAgRFdfTE5TX2NvcHkgICAgICAgICAgICAgICAgID0gMHgx
LAotICAgICAgICBEV19MTlNfYWR2YW5jZV9wYyAgICAgICAgICAgPSAweDIsCi0gICAgICAgIERX
X0xOU19hZHZhbmNlX2xpbmUgICAgICAgICA9IDB4MywKLSAgICAgICAgRFdfTE5TX3NldF9maWxl
ICAgICAgICAgICAgID0gMHg0LAotICAgICAgICBEV19MTlNfc2V0X2NvbHVtbiAgICAgICAgICAg
PSAweDUsCi0gICAgICAgIERXX0xOU19uZWdhdGVfc3RtdCAgICAgICAgICA9IDB4NiwKLSAgICAg
ICAgRFdfTE5TX3NldF9iYXNpY19ibG9jayAgICAgID0gMHg3LAotICAgICAgICBEV19MTlNfY29u
c3RfYWRkX3BjICAgICAgICAgPSAweDgsCi0gICAgICAgIERXX0xOU19maXhlZF9hZHZhbmNlX3Bj
ICAgICA9IDB4OSwKLSAgICAgICAgRFdfTE5TX3NldF9wcm9sb2d1ZV9lbmQgICAgID0gMHhhLAot
ICAgICAgICBEV19MTlNfc2V0X2VwaWxvZ3VlX2JlZ2luICAgPSAweGIsCi0gICAgICAgIERXX0xO
U19zZXRfaXNhICAgICAgICAgICAgICA9IDB4YwotICAgIH07Ci19OwotCi19IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCi0gICAgCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0KLSNlbmRpZiAv
LyBGVExEV0FSRkRlYnVnTGluZUluZm9faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExEV0FSRlJlZ2lzdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTERXQVJGUmVnaXN0ZXIuY3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTERXQVJGUmVnaXN0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZUTERXQVJGUmVnaXN0ZXIuaCIK
LQotI2lmIEVOQUJMRShGVExfSklUKQotCi0jaW5jbHVkZSAiRlBSSW5mby5oIgotI2luY2x1ZGUg
IkdQUkluZm8uaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewotCi1SZWcgRFdB
UkZSZWdpc3Rlcjo6cmVnKCkgY29uc3QKLXsKLSNpZiBDUFUoWDg2XzY0KQotICAgIGlmIChtX2R3
YXJmUmVnTnVtID49IDAgJiYgbV9kd2FyZlJlZ051bSA8IDE2KSB7Ci0gICAgICAgIHN3aXRjaCAo
ZHdhcmZSZWdOdW0oKSkgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICByZXR1cm4gWDg2
UmVnaXN0ZXJzOjplYXg7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHJldHVybiBYODZS
ZWdpc3RlcnM6OmVkeDsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgcmV0dXJuIFg4NlJl
Z2lzdGVyczo6ZWN4OwotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICByZXR1cm4gWDg2UmVn
aXN0ZXJzOjplYng7Ci0gICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgIHJldHVybiBYODZSZWdp
c3RlcnM6OmVzaTsKLSAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgcmV0dXJuIFg4NlJlZ2lz
dGVyczo6ZWRpOwotICAgICAgICBjYXNlIDY6Ci0gICAgICAgICAgICByZXR1cm4gWDg2UmVnaXN0
ZXJzOjplYnA7Ci0gICAgICAgIGNhc2UgNzoKLSAgICAgICAgICAgIHJldHVybiBYODZSZWdpc3Rl
cnM6OmVzcDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8vIFJlZ2lzdGVycyByOC4u
cjE1IGFyZSBudW1iZXJlZCBzZW5zaWJseS4KLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxHUFJSZWc+KG1fZHdhcmZSZWdOdW0pOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChtX2R3
YXJmUmVnTnVtID49IDE3ICYmIG1fZHdhcmZSZWdOdW0gPD0gMzIpCi0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxGUFJSZWc+KG1fZHdhcmZSZWdOdW0gLSAxNyk7Ci0jZWxpZiBDUFUoQVJNNjQp
Ci0gICAgaWYgKG1fZHdhcmZSZWdOdW0gPj0gMCAmJiBtX2R3YXJmUmVnTnVtIDw9IDMxKQotICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R1BSUmVnPihtX2R3YXJmUmVnTnVtKTsKLSAgICBpZiAo
bV9kd2FyZlJlZ051bSA+PSA2NCAmJiBtX2R3YXJmUmVnTnVtIDw9IDk1KQotICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8RlBSUmVnPihtX2R3YXJmUmVnTnVtIC0gNjQpOwotI2VuZGlmCi0gICAg
cmV0dXJuIFJlZygpOwotfQotCi12b2lkIERXQVJGUmVnaXN0ZXI6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKLXsKLSAgICBSZWcgcmVnID0gdGhpcy0+cmVnKCk7Ci0gICAgaWYgKCEhcmVn
KQotICAgICAgICBvdXQucHJpbnQocmVnKTsKLSAgICBlbHNlCi0gICAgICAgIG91dC5wcmludCgi
PHVua25vd246IiwgbV9kd2FyZlJlZ051bSwgIj4iKTsKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMRFdBUkZSZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRFdBUkZSZWdpc3Rlci5oCShyZXZpc2lvbiAxOTY2ODUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTERXQVJGUmVnaXN0ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpZm5kZWYgRlRMRFdBUkZSZWdpc3Rlcl9oCi0jZGVmaW5lIEZUTERXQVJG
UmVnaXN0ZXJfaAotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0KLSNpbmNsdWRlICJSZWcuaCIKLSNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgewotCi1jbGFzcyBEV0FSRlJlZ2lzdGVyIHsKLXB1YmxpYzoKLSAgICBEV0FSRlJlZ2lzdGVy
KCkKLSAgICAgICAgOiBtX2R3YXJmUmVnTnVtKC0xKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAg
ZXhwbGljaXQgRFdBUkZSZWdpc3RlcihpbnQxNl90IGR3YXJmUmVnTnVtKQotICAgICAgICA6IG1f
ZHdhcmZSZWdOdW0oZHdhcmZSZWdOdW0pCi0gICAgewotICAgIH0KLSAgICAKLSAgICBpbnQxNl90
IGR3YXJmUmVnTnVtKCkgY29uc3QgeyByZXR1cm4gbV9kd2FyZlJlZ051bTsgfQotICAgIAotICAg
IFJlZyByZWcoKSBjb25zdDsgLy8gVGhpcyBtYXkgcmV0dXJuIFJlZygpIGlmIGl0IGNhbid0IHBh
cnNlIHRoZSBEd2FyZiByZWdpc3RlciBudW1iZXIuCi0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotICAgIGludDE2X3QgbV9kd2FyZlJlZ051
bTsKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKLQotI2VuZGlmIC8vIEVOQUJMRShG
VExfSklUKQotCi0jZW5kaWYgLy8gRlRMRFdBUkZSZWdpc3Rlcl9oCi0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRGF0YVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRGF0YVNlY3Rpb24uY3BwCShyZXZpc2lvbiAxOTY2ODUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTERhdGFTZWN0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGVExEYXRhU2Vj
dGlvbi5oIgotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgotI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+Ci0jaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2Mu
aD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewotCi1EYXRhU2VjdGlvbjo6RGF0
YVNlY3Rpb24oc2l6ZV90IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCkKLSAgICA6IG1fc2l6ZShz
aXplKQotewotICAgIFJFTEVBU0VfQVNTRVJUKFdURjo6Yml0Q291bnQoYWxpZ25tZW50KSA9PSAx
KTsKLSAgICAKLSAgICBjb25zdCB1bnNpZ25lZCBuYXRpdmVBbGlnbm1lbnQgPSA4OwotICAgIAot
ICAgIGFsaWdubWVudCA9IHN0ZDo6bWF4KG5hdGl2ZUFsaWdubWVudCwgYWxpZ25tZW50KTsKLSAg
ICAKLSAgICBzaXplX3QgYWxsb2NhdGVkU2l6ZSA9IHNpemUgKyBhbGlnbm1lbnQgLSBuYXRpdmVB
bGlnbm1lbnQ7Ci0gICAgbV9hbGxvY2F0aW9uQmFzZSA9IGZhc3RNYWxsb2MoYWxsb2NhdGVkU2l6
ZSk7Ci0gICAgCi0gICAgbV9iYXNlID0gYml0d2lzZV9jYXN0PHZvaWQqPigKLSAgICAgICAgKGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fYWxsb2NhdGlvbkJhc2UpICsgYWxpZ25tZW50IC0gMSkg
JiB+c3RhdGljX2Nhc3Q8dWludHB0cl90PihhbGlnbm1lbnQgLSAxKSk7Ci0gICAgCi0gICAgUkVM
RUFTRV9BU1NFUlQoIShiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX2Jhc2UpICYgKGFsaWdubWVu
dCAtIDEpKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9i
YXNlKSArIHNpemUgPD0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9hbGxvY2F0aW9uQmFzZSkg
KyBhbGxvY2F0ZWRTaXplKTsKLX0KLQotRGF0YVNlY3Rpb246On5EYXRhU2VjdGlvbigpCi17Ci0g
ICAgZmFzdEZyZWUobV9hbGxvY2F0aW9uQmFzZSk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKLQotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTERhdGFTZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExEYXRhU2VjdGlvbi5oCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTERhdGFTZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaWZuZGVmIEZUTERhdGFTZWN0aW9uX2gKLSNkZWZpbmUgRlRMRGF0YVNlY3Rpb25faAot
Ci0jaWYgRU5BQkxFKEZUTF9KSVQpCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRl
ICJWTS5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKLQotY2xhc3MgRGF0YVNlY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxE
YXRhU2VjdGlvbj4gewotcHVibGljOgotICAgIERhdGFTZWN0aW9uKHNpemVfdCwgdW5zaWduZWQg
YWxpZ25tZW50KTsKLSAgICB+RGF0YVNlY3Rpb24oKTsKLSAgICAKLSAgICB2b2lkKiBiYXNlKCkg
eyByZXR1cm4gbV9iYXNlOyB9Ci0gICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgdm9pZCogbV9hbGxvY2F0aW9uQmFzZTsKLSAgICB2
b2lkKiBtX2Jhc2U7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKLQotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotCi0jZW5kaWYgLy8gRlRMRGF0
YVNlY3Rpb25faAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlv
bkhhbmRsZXJNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTk2Njg1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZU
TEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmgiCi0KLSNpZiBFTkFCTEUoRlRMX0pJVCkgJiYgIUZU
TF9VU0VTX0IzCi0KLSNpbmNsdWRlICJGVExTdGF0ZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7Ci0KLUV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjpFeGNlcHRpb25IYW5kbGVy
TWFuYWdlcihTdGF0ZSYgc3RhdGUpCi0gICAgOiBtX3N0YXRlKHN0YXRlKQotewotfQotCi12b2lk
IEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjphZGROZXdFeGl0KHVpbnQzMl90IHN0YWNrbWFwUmVj
b3JkSW5kZXgsIHNpemVfdCBvc3JFeGl0SW5kZXgpCi17Ci0gICAgbV9tYXAuYWRkKHN0YWNrbWFw
UmVjb3JkSW5kZXgsIG9zckV4aXRJbmRleCk7Ci0gICAgT1NSRXhpdCYgZXhpdCA9IG1fc3RhdGUu
aml0Q29kZS0+b3NyRXhpdFtvc3JFeGl0SW5kZXhdOwotICAgIFJFTEVBU0VfQVNTRVJUKGV4aXQu
d2lsbEFycml2ZUF0RXhpdEZyb21JbmRpcmVjdEV4Y2VwdGlvbkNoZWNrKCkpOwotfQotCi12b2lk
IEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjphZGROZXdDYWxsT3BlcmF0aW9uRXhpdCh1aW50MzJf
dCBzdGFja21hcFJlY29yZEluZGV4LCBzaXplX3Qgb3NyRXhpdEluZGV4KQotewotICAgIG1fY2Fs
bE9wZXJhdGlvbk1hcC5hZGQoc3RhY2ttYXBSZWNvcmRJbmRleCwgb3NyRXhpdEluZGV4KTsKLSAg
ICBPU1JFeGl0JiBleGl0ID0gbV9zdGF0ZS5qaXRDb2RlLT5vc3JFeGl0W29zckV4aXRJbmRleF07
Ci0gICAgUkVMRUFTRV9BU1NFUlQoZXhpdC53aWxsQXJyaXZlQXRFeGl0RnJvbUluZGlyZWN0RXhj
ZXB0aW9uQ2hlY2soKSk7Ci19Ci0KLUNvZGVMb2NhdGlvbkxhYmVsIEV4Y2VwdGlvbkhhbmRsZXJN
YW5hZ2VyOjpjYWxsT3BlcmF0aW9uRXhjZXB0aW9uVGFyZ2V0KHVpbnQzMl90IHN0YWNrbWFwUmVj
b3JkSW5kZXgpCi17Ci0jaWYgRlRMX1VTRVNfQjMKLSAgICBVTlVTRURfUEFSQU0oc3RhY2ttYXBS
ZWNvcmRJbmRleCk7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gQ29kZUxvY2F0aW9uTGFiZWwoKTsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAgYXV0byBm
aW5kUmVzdWx0ID0gbV9jYWxsT3BlcmF0aW9uTWFwLmZpbmQoc3RhY2ttYXBSZWNvcmRJbmRleCk7
Ci0gICAgaWYgKGZpbmRSZXN1bHQgPT0gbV9jYWxsT3BlcmF0aW9uTWFwLmVuZCgpKQotICAgICAg
ICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwoKTsKLQotICAgIHNpemVfdCBvc3JFeGl0SW5kZXgg
PSBmaW5kUmVzdWx0LT52YWx1ZTsKLSAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlLmppdENvZGUt
Pm9zckV4aXRbb3NyRXhpdEluZGV4XS53aWxsQXJyaXZlQXRPU1JFeGl0RnJvbUNhbGxPcGVyYXRp
b24oKSk7Ci0gICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fc3RhdGUuZmluYWxp
emVyLT5vc3JFeGl0W29zckV4aXRJbmRleF07Ci0gICAgUkVMRUFTRV9BU1NFUlQoaW5mby5tX3Ro
dW5rTGFiZWwuaXNTZXQoKSk7Ci0gICAgcmV0dXJuIG1fc3RhdGUuZmluYWxpemVyLT5leGl0VGh1
bmtzTGlua0J1ZmZlci0+bG9jYXRpb25PZihpbmZvLm1fdGh1bmtMYWJlbCk7Ci0jZW5kaWYgLy8g
RlRMX1VTRVNfQjMKLX0KLQotQ29kZUxvY2F0aW9uTGFiZWwgRXhjZXB0aW9uSGFuZGxlck1hbmFn
ZXI6OmxhenlTbG93UGF0aEV4Y2VwdGlvblRhcmdldCh1aW50MzJfdCBzdGFja21hcFJlY29yZElu
ZGV4KQotewotI2lmIEZUTF9VU0VTX0IzCi0gICAgVU5VU0VEX1BBUkFNKHN0YWNrbWFwUmVjb3Jk
SW5kZXgpOwotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIENv
ZGVMb2NhdGlvbkxhYmVsKCk7Ci0jZWxzZSAvLyBGVExfVVNFU19CMwotICAgIGF1dG8gZmluZFJl
c3VsdCA9IG1fbWFwLmZpbmQoc3RhY2ttYXBSZWNvcmRJbmRleCk7Ci0gICAgaWYgKGZpbmRSZXN1
bHQgPT0gbV9tYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbCgpOwot
Ci0gICAgc2l6ZV90IG9zckV4aXRJbmRleCA9IGZpbmRSZXN1bHQtPnZhbHVlOwotICAgIFJFTEVB
U0VfQVNTRVJUKG1fc3RhdGUuaml0Q29kZS0+b3NyRXhpdFtvc3JFeGl0SW5kZXhdLm1fZXhjZXB0
aW9uVHlwZSA9PSBFeGNlcHRpb25UeXBlOjpMYXp5U2xvd1BhdGgpOwotICAgIE9TUkV4aXRDb21w
aWxhdGlvbkluZm8mIGluZm8gPSBtX3N0YXRlLmZpbmFsaXplci0+b3NyRXhpdFtvc3JFeGl0SW5k
ZXhdOwotICAgIFJFTEVBU0VfQVNTRVJUKGluZm8ubV90aHVua0xhYmVsLmlzU2V0KCkpOwotICAg
IHJldHVybiBtX3N0YXRlLmZpbmFsaXplci0+ZXhpdFRodW5rc0xpbmtCdWZmZXItPmxvY2F0aW9u
T2YoaW5mby5tX3RodW5rTGFiZWwpOwotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCi19Ci0KLU9TUkV4
aXQqIEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjpjYWxsT3BlcmF0aW9uT1NSRXhpdCh1aW50MzJf
dCBzdGFja21hcFJlY29yZEluZGV4KQotewotICAgIGF1dG8gZmluZFJlc3VsdCA9IG1fY2FsbE9w
ZXJhdGlvbk1hcC5maW5kKHN0YWNrbWFwUmVjb3JkSW5kZXgpOwotICAgIGlmIChmaW5kUmVzdWx0
ID09IG1fY2FsbE9wZXJhdGlvbk1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgc2l6ZV90IG9zckV4aXRJbmRleCA9IGZpbmRSZXN1bHQtPnZhbHVlOwotICAgIE9TUkV4aXQq
IGV4aXQgPSAmbV9zdGF0ZS5qaXRDb2RlLT5vc3JFeGl0W29zckV4aXRJbmRleF07Ci0gICAgLy8g
V2UgbWF5IGhhdmUgbW9yZSB0aGFuIG9uZSBleGl0IGZvciB0aGUgc2FtZSBzdGFja21hcCByZWNv
cmQgaW5kZXggKGkuZSwgZm9yIEdldEJ5SWRzIGFuZCBQdXRCeUlkcykuCi0gICAgLy8gVGhlcmVm
b3JlIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZXhpdCByZWFsbHkgaXMgYSBjYWxsT3BlcmF0
aW9uIE9TUiBleGl0LgotICAgIFJFTEVBU0VfQVNTRVJUKGV4aXQtPndpbGxBcnJpdmVBdE9TUkV4
aXRGcm9tQ2FsbE9wZXJhdGlvbigpKTsKLSAgICByZXR1cm4gZXhpdDsgCi19Ci0KLU9TUkV4aXQq
IEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjpnZXRDYWxsT1NSRXhpdENvbW1vbih1aW50MzJfdCBz
dGFja21hcFJlY29yZEluZGV4KQotewotICAgIGF1dG8gZmluZFJlc3VsdCA9IG1fbWFwLmZpbmQo
c3RhY2ttYXBSZWNvcmRJbmRleCk7Ci0gICAgaWYgKGZpbmRSZXN1bHQgPT0gbV9tYXAuZW5kKCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHNpemVfdCBvc3JFeGl0SW5kZXggPSBmaW5k
UmVzdWx0LT52YWx1ZTsKLSAgICBPU1JFeGl0KiBleGl0ID0gJm1fc3RhdGUuaml0Q29kZS0+b3Ny
RXhpdFtvc3JFeGl0SW5kZXhdOwotICAgIFJFTEVBU0VfQVNTRVJUKGV4aXQtPm1fZXhjZXB0aW9u
VHlwZSA9PSBFeGNlcHRpb25UeXBlOjpKU0NhbGwpOwotICAgIHJldHVybiBleGl0OyAKLX0KLQot
T1NSRXhpdCogRXhjZXB0aW9uSGFuZGxlck1hbmFnZXI6OmdldENhbGxPU1JFeGl0KHVpbnQzMl90
IHN0YWNrbWFwUmVjb3JkSW5kZXgsIGNvbnN0IEpTQ2FsbCYpCi17Ci0gICAgcmV0dXJuIGdldENh
bGxPU1JFeGl0Q29tbW9uKHN0YWNrbWFwUmVjb3JkSW5kZXgpOwotfQotCi1PU1JFeGl0KiBFeGNl
cHRpb25IYW5kbGVyTWFuYWdlcjo6Z2V0Q2FsbE9TUkV4aXQodWludDMyX3Qgc3RhY2ttYXBSZWNv
cmRJbmRleCwgY29uc3QgSlNDYWxsVmFyYXJncyYpCi17Ci0gICAgcmV0dXJuIGdldENhbGxPU1JF
eGl0Q29tbW9uKHN0YWNrbWFwUmVjb3JkSW5kZXgpOwotfQotCi1PU1JFeGl0KiBFeGNlcHRpb25I
YW5kbGVyTWFuYWdlcjo6Z2V0Q2FsbE9TUkV4aXQodWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRl
eCwgY29uc3QgSlNUYWlsQ2FsbCYgY2FsbCkKLXsKLSAgICBVTlVTRURfUEFSQU0oc3RhY2ttYXBS
ZWNvcmRJbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGwpOwotICAgIC8vIEEgY2FsbCBjYW4n
dCBiZSBpbiB0YWlsIHBvc2l0aW9uIGluc2lkZSBhIHRyeSBibG9jay4KLSAgICBBU1NFUlQobV9t
YXAuZmluZChzdGFja21hcFJlY29yZEluZGV4KSA9PSBtX21hcC5lbmQoKSk7Ci0gICAgcmV0dXJu
IG51bGxwdHI7Ci19Ci0KLUNhbGxTaXRlSW5kZXggRXhjZXB0aW9uSGFuZGxlck1hbmFnZXI6OnBy
b2N1cmVDYWxsU2l0ZUluZGV4KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgsIENvZGVPcmln
aW4gb3JpZ2luKQotewotICAgIGF1dG8gZmluZFJlc3VsdCA9IG1fbWFwLmZpbmQoc3RhY2ttYXBS
ZWNvcmRJbmRleCk7Ci0gICAgaWYgKGZpbmRSZXN1bHQgPT0gbV9tYXAuZW5kKCkpCi0gICAgICAg
IHJldHVybiBtX3N0YXRlLmppdENvZGUtPmNvbW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KG9y
aWdpbik7Ci0gICAgc2l6ZV90IG9zckV4aXRJbmRleCA9IGZpbmRSZXN1bHQtPnZhbHVlOwotICAg
IE9TUkV4aXQmIGV4aXQgPSBtX3N0YXRlLmppdENvZGUtPm9zckV4aXRbb3NyRXhpdEluZGV4XTsK
LSAgICBSRUxFQVNFX0FTU0VSVChleGl0Lm1fZXhjZXB0aW9uSGFuZGxlckNhbGxTaXRlSW5kZXgp
OwotICAgIHJldHVybiBleGl0Lm1fZXhjZXB0aW9uSGFuZGxlckNhbGxTaXRlSW5kZXg7Ci19Ci0K
LUNhbGxTaXRlSW5kZXggRXhjZXB0aW9uSGFuZGxlck1hbmFnZXI6OnByb2N1cmVDYWxsU2l0ZUlu
ZGV4KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgsIGNvbnN0IEpTQ2FsbCYgY2FsbCkKLXsK
LSAgICByZXR1cm4gcHJvY3VyZUNhbGxTaXRlSW5kZXgoc3RhY2ttYXBSZWNvcmRJbmRleCwgY2Fs
bC5jYWxsU2l0ZURlc2NyaXB0aW9uT3JpZ2luKCkpOwotfQotCi1DYWxsU2l0ZUluZGV4IEV4Y2Vw
dGlvbkhhbmRsZXJNYW5hZ2VyOjpwcm9jdXJlQ2FsbFNpdGVJbmRleCh1aW50MzJfdCBzdGFja21h
cFJlY29yZEluZGV4LCBjb25zdCBKU0NhbGxWYXJhcmdzJiBjYWxsKQotewotICAgIHJldHVybiBw
cm9jdXJlQ2FsbFNpdGVJbmRleChzdGFja21hcFJlY29yZEluZGV4LCBjYWxsLmNhbGxTaXRlRGVz
Y3JpcHRpb25PcmlnaW4oKSk7Ci19Ci0KLUNhbGxTaXRlSW5kZXggRXhjZXB0aW9uSGFuZGxlck1h
bmFnZXI6OnByb2N1cmVDYWxsU2l0ZUluZGV4KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgs
IGNvbnN0IEpTVGFpbENhbGwmIGNhbGwpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHN0YWNrbWFwUmVj
b3JkSW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTShjYWxsKTsKLSAgICAvLyBXZSBkb24ndCBuZWVk
IHRvIGdlbmVyYXRlIGEgY2FsbCBzaXRlIGluZGV4IGZvciB0YWlsIGNhbGxzCi0gICAgLy8gYmVj
YXVzZSB0aGV5IGRvbid0IHN0b3JlIGEgQ2FsbFNpdGVJbmRleCBvbiB0aGUgY2FsbCBmcmFtZS4K
LSAgICByZXR1cm4gQ2FsbFNpdGVJbmRleCgpOwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6
RlRMCi0KLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkgJiYgIUZUTF9VU0VTX0IzCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25IYW5kbGVy
TWFuYWdlci5oCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOTAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZu
ZGVmIEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyX2gKLSNkZWZpbmUgRlRMRXhjZXB0aW9uSGFu
ZGxlck1hbmFnZXJfaAotCi0jaW5jbHVkZSAiREZHQ29tbW9uLmgiCi0KLSNpZiBFTkFCTEUoRlRM
X0pJVCkgJiYgIUZUTF9VU0VTX0IzCi0KLSNpbmNsdWRlICJDYWxsRnJhbWUuaCIKLSNpbmNsdWRl
ICJGVExKU0NhbGwuaCIKLSNpbmNsdWRlICJGVExKU0NhbGxWYXJhcmdzLmgiCi0jaW5jbHVkZSAi
RlRMSlNUYWlsQ2FsbC5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLS8v
IFRoaXMgY2xhc3MgaXMgaW50ZW50ZWQgdG8gYmUgdXNlZCBkdXJpbmcgRlRMQ29tcGlsZSB0byBt
YW5hZ2Ugc29tZSBjb21tb24gdGFza3MKLS8vIG5lZWRlZCB0byBxdWVyeSB0aGUgY29ycmVzcG9u
ZGVuY2UgYmV0d2VlbiBzdGFja21hcCByZWNvcmRzIGFuZCBPU1IgZXhpdHMgdGhhdCBhcmUKLS8v
IGV4Y2VwdGlvbiBoYW5kbGVycy4gVGhlIG9ubHkga2luZCBvZiBPU1IgZXhpdHMgd2Uga2VlcCBh
cmUgdGhvc2UgT1NSIGV4aXRzIHRoYXQKLS8vIGNvcnJlc3BvbmQgdG8gZXhjZXB0aW9ucyBmcm9t
IHBhdGNocG9pbnRzLiBUaGF0IG1lYW5zIGV4aXRzIGZyb20gbGF6eSBzbG93IHBhdGhzLAotLy8g
SlMgY2FsbHMsIEdldC9QdXQgQnlJZCwgZXRjLiBOb3RlOiB0aGlzIG1lYW5zIHdlIGRvbid0IGtl
ZXAgdHJhY2sgb2YgZXhjZXB0aW9uIGNoZWNrcwotLy8gYWZ0ZXIgQyBjYWxscyBiZWNhdXNlIHRo
b3NlIGFyZSBtb2RlbGVkIGV4cGxpY3RseSBpbiBMTFZNIElSIGFzIGEgYnJhbmNoIHRvIGEgc3Rh
Y2ttYXAKLS8vIGludHJpbnNpYy4gVGhlc2UgcGF0Y2hwb2ludCBPU1IgZXhpdHMgdGhhdCB0aGlz
IGNsYXNzIGtlZXBzIHRyYWNrIG9mIGFyZSBub3QgYnJhbmNoZWQgdG8KLS8vIGRpcmVjdGx5IHdp
dGhpbiBMTFZNIElSLiAgV2UganVtcCB0byB0aGVzZSBPU1IgZXhpdHMgZnJvbSBnZW5lcmF0ZWQg
cGF0Y2hwb2ludCBjb2RlLAotLy8gZnJvbSBnZW5lcmljVW53aW5kKCksIG9yIGZyb20gRlRMOjpj
YWxsT3BlcmF0aW9uKCkuCi0gICAgCi1jbGFzcyBTdGF0ZTsKLQotY2xhc3MgRXhjZXB0aW9uSGFu
ZGxlck1hbmFnZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEV4Y2VwdGlvbkhhbmRsZXJN
YW5hZ2VyKTsKLQotcHVibGljOgotICAgIEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyKFN0YXRlJiBz
dGF0ZSk7Ci0KLSAgICB2b2lkIGFkZE5ld0V4aXQodWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRl
eCwgc2l6ZV90IG9zckV4aXRJbmRleCk7Ci0gICAgdm9pZCBhZGROZXdDYWxsT3BlcmF0aW9uRXhp
dCh1aW50MzJfdCBzdGFja21hcFJlY29yZEluZGV4LCBzaXplX3Qgb3NyRXhpdEluZGV4KTsKLQot
ICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBvbmx5IG1ha2Ugc2Vuc2UgdG8gYmUgY2FsbGVkIGFmdGVy
IHdlJ3ZlIGdlbmVyYXRlZCB0aGUgT1NSCi0gICAgLy8gZXhpdCB0aHVua3MgYW5kIGFsbG9jYXRl
ZCB0aGUgT1NSIGV4aXQgdGh1bmtzJyBsaW5rIGJ1ZmZlci4KLSAgICBDb2RlTG9jYXRpb25MYWJl
bCBjYWxsT3BlcmF0aW9uRXhjZXB0aW9uVGFyZ2V0KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5k
ZXgpOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhenlTbG93UGF0aEV4Y2VwdGlvblRhcmdldCh1
aW50MzJfdCBzdGFja21hcFJlY29yZEluZGV4KTsKLQotICAgIE9TUkV4aXQqIGNhbGxPcGVyYXRp
b25PU1JFeGl0KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgpOwotICAgIE9TUkV4aXQqIGdl
dENhbGxPU1JFeGl0KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgsIGNvbnN0IEpTQ2FsbCYp
OwotICAgIE9TUkV4aXQqIGdldENhbGxPU1JFeGl0KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5k
ZXgsIGNvbnN0IEpTVGFpbENhbGwmKTsKLSAgICBPU1JFeGl0KiBnZXRDYWxsT1NSRXhpdCh1aW50
MzJfdCBzdGFja21hcFJlY29yZEluZGV4LCBjb25zdCBKU0NhbGxWYXJhcmdzJik7Ci0KLSAgICBD
YWxsU2l0ZUluZGV4IHByb2N1cmVDYWxsU2l0ZUluZGV4KHVpbnQzMl90IHN0YWNrbWFwUmVjb3Jk
SW5kZXgsIENvZGVPcmlnaW4pOwotICAgIENhbGxTaXRlSW5kZXggcHJvY3VyZUNhbGxTaXRlSW5k
ZXgodWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleCwgY29uc3QgSlNDYWxsJik7Ci0gICAgQ2Fs
bFNpdGVJbmRleCBwcm9jdXJlQ2FsbFNpdGVJbmRleCh1aW50MzJfdCBzdGFja21hcFJlY29yZElu
ZGV4LCBjb25zdCBKU1RhaWxDYWxsJik7Ci0gICAgQ2FsbFNpdGVJbmRleCBwcm9jdXJlQ2FsbFNp
dGVJbmRleCh1aW50MzJfdCBzdGFja21hcFJlY29yZEluZGV4LCBjb25zdCBKU0NhbGxWYXJhcmdz
Jik7Ci0gICAgT1NSRXhpdCoganNDYWxsT1NSRXhpdCh1aW50MzJfdCBzdGFja21hcFJlY29yZElu
ZGV4KTsKLQotcHJpdmF0ZToKLSAgICBPU1JFeGl0KiBnZXRDYWxsT1NSRXhpdENvbW1vbih1aW50
MzJfdCBzdGFja21hcFJlY29yZEluZGV4KTsKLQotICAgIFN0YXRlJiBtX3N0YXRlOwotICAgIHR5
cGVkZWYgSGFzaE1hcDx1aW50MzJfdCwgc2l6ZV90LCBXVEY6OkludEhhc2g8dWludDMyX3Q+LCBX
VEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gUmVjb3JkSW5kZXhU
b09TUkV4aXRJbmRleE1hcDsKLSAgICBSZWNvcmRJbmRleFRvT1NSRXhpdEluZGV4TWFwIG1fbWFw
OwotICAgIFJlY29yZEluZGV4VG9PU1JFeGl0SW5kZXhNYXAgbV9jYWxsT3BlcmF0aW9uTWFwOwot
fTsKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpICYmICFGVExfVVNFU19CMwotCi0jZW5kaWYgLy8gRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFn
ZXJfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZURlc2Ny
aXB0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGlu
ZUNhY2hlRGVzY3JpcHRvci5oCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDM1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2lmbmRlZiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3JfaAotI2RlZmluZSBGVExJ
bmxpbmVDYWNoZURlc2NyaXB0b3JfaAotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0KLSNpbmNsdWRl
ICJDb2RlT3JpZ2luLmgiCi0jaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgotI2luY2x1ZGUg
IkRGR09wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJGVExJbmxpbmVDYWNoZVNpemUuaCIKLSNpbmNs
dWRlICJGVExMYXp5U2xvd1BhdGguaCIKLSNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRv
ci5oIgotI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCi0jaW5jbHVkZSAiU25pcHBldE9wZXJh
bmQuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9VbmlxdWVkU3RyaW5nSW1wbC5oPgotCi1uYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLWNsYXNzIExvY2F0aW9uOwotCi1jbGFzcyBJbmxp
bmVDYWNoZURlc2NyaXB0b3IgewotcHVibGljOgotICAgIElubGluZUNhY2hlRGVzY3JpcHRvcigp
IAotICAgIHsgfQotICAgIAotICAgIElubGluZUNhY2hlRGVzY3JpcHRvcih1bnNpZ25lZCBzdGFj
a21hcElELCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi0g
ICAgICAgIDogbV9zdGFja21hcElEKHN0YWNrbWFwSUQpCi0gICAgICAgICwgbV9jb2RlT3JpZ2lu
KGNvZGVPcmlnaW4pCi0gICAgICAgICwgbV91aWQodWlkKQotICAgIHsKLSAgICB9Ci0gICAgCi0g
ICAgdW5zaWduZWQgc3RhY2ttYXBJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBJRDsgfQot
ICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fY29kZU9yaWdpbjsg
fQotICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQoKSBjb25zdCB7IHJldHVybiBtX3VpZDsgfQot
ICAgIAotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX3N0YWNrbWFwSUQ7Ci0gICAgQ29kZU9yaWdp
biBtX2NvZGVPcmlnaW47Ci0gICAgVW5pcXVlZFN0cmluZ0ltcGwqIG1fdWlkOwotICAgIAotcHVi
bGljOgotICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcD4gbV9zbG93UGF0aERvbmU7Ci19
OwotCi1jbGFzcyBHZXRCeUlkRGVzY3JpcHRvciA6IHB1YmxpYyBJbmxpbmVDYWNoZURlc2NyaXB0
b3IgewotcHVibGljOgotICAgIEdldEJ5SWREZXNjcmlwdG9yKCkgeyB9Ci0gICAgCi0gICAgR2V0
QnlJZERlc2NyaXB0b3IodW5zaWduZWQgc3RhY2ttYXBJRCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotICAgICAgICA6IElubGluZUNhY2hlRGVzY3JpcHRv
cihzdGFja21hcElELCBjb2RlT3JpZ2luLCB1aWQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBW
ZWN0b3I8SklUR2V0QnlJZEdlbmVyYXRvcj4gbV9nZW5lcmF0b3JzOwotfTsKLQotY2xhc3MgUHV0
QnlJZERlc2NyaXB0b3IgOiBwdWJsaWMgSW5saW5lQ2FjaGVEZXNjcmlwdG9yIHsKLXB1YmxpYzoK
LSAgICBQdXRCeUlkRGVzY3JpcHRvcigpIHsgfQotICAgIAotICAgIFB1dEJ5SWREZXNjcmlwdG9y
KAotICAgICAgICB1bnNpZ25lZCBzdGFja21hcElELCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQsCi0gICAgICAgIEVDTUFNb2RlIGVjbWFNb2RlLCBQdXRLaW5k
IHB1dEtpbmQpCi0gICAgICAgIDogSW5saW5lQ2FjaGVEZXNjcmlwdG9yKHN0YWNrbWFwSUQsIGNv
ZGVPcmlnaW4sIHVpZCkKLSAgICAgICAgLCBtX2VjbWFNb2RlKGVjbWFNb2RlKQotICAgICAgICAs
IG1fcHV0S2luZChwdXRLaW5kKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgVmVjdG9yPEpJVFB1
dEJ5SWRHZW5lcmF0b3I+IG1fZ2VuZXJhdG9yczsKLSAgICAKLSAgICBFQ01BTW9kZSBlY21hTW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWNtYU1vZGU7IH0KLSAgICBQdXRLaW5kIHB1dEtpbmQoKSBj
b25zdCB7IHJldHVybiBtX3B1dEtpbmQ7IH0KLQotcHJpdmF0ZToKLSAgICBFQ01BTW9kZSBtX2Vj
bWFNb2RlOwotICAgIFB1dEtpbmQgbV9wdXRLaW5kOwotfTsKLQotc3RydWN0IENoZWNrSW5HZW5l
cmF0b3IgewotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBtX3N0dWI7Ci0gICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgbV9zbG93Q2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbV9iZWdpbkxh
YmVsOwotCi0gICAgQ2hlY2tJbkdlbmVyYXRvcihTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YiwgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgc2xvd0NhbGwsIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBiZWdpbkxh
YmVsKQotICAgICAgICA6IG1fc3R1YihzdHViKSAKLSAgICAgICAgLCBtX3Nsb3dDYWxsKHNsb3dD
YWxsKQotICAgICAgICAsIG1fYmVnaW5MYWJlbChiZWdpbkxhYmVsKQotICAgIHsKLSAgICB9Ci19
OwotCi1jbGFzcyBDaGVja0luRGVzY3JpcHRvciA6IHB1YmxpYyBJbmxpbmVDYWNoZURlc2NyaXB0
b3IgewotcHVibGljOgotICAgIENoZWNrSW5EZXNjcmlwdG9yKCkgeyB9Ci0gICAgCi0gICAgQ2hl
Y2tJbkRlc2NyaXB0b3IodW5zaWduZWQgc3RhY2ttYXBJRCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotICAgICAgICA6IElubGluZUNhY2hlRGVzY3JpcHRv
cihzdGFja21hcElELCBjb2RlT3JpZ2luLCB1aWQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBW
ZWN0b3I8Q2hlY2tJbkdlbmVyYXRvcj4gbV9nZW5lcmF0b3JzOwotfTsKLQotY2xhc3MgQmluYXJ5
T3BEZXNjcmlwdG9yIDogcHVibGljIElubGluZUNhY2hlRGVzY3JpcHRvciB7Ci1wdWJsaWM6Ci0g
ICAgdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoKlNsb3dQYXRoRnVuY3Rpb24pKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpOwot
Ci0gICAgdW5zaWduZWQgbm9kZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX25vZGVUeXBlOyB9Ci0g
ICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICBjb25zdCBjaGFy
KiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgU2xvd1BhdGhGdW5jdGlvbiBz
bG93UGF0aEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zbG93UGF0aEZ1bmN0aW9uOyB9Ci0K
LSAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZCgpIHsgcmV0dXJuIG1fbGVmdE9wZXJhbmQ7
IH0KLSAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoKSB7IHJldHVybiBtX3JpZ2h0T3Bl
cmFuZDsgfQotCi0gICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpMYWJlbD4gbV9zbG93UGF0aFN0
YXJ0czsKLQotcHJvdGVjdGVkOgotICAgIEJpbmFyeU9wRGVzY3JpcHRvcih1bnNpZ25lZCBub2Rl
VHlwZSwgdW5zaWduZWQgc3RhY2ttYXBJRCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLAotICAgICAg
ICBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogbmFtZSwgU2xvd1BhdGhGdW5jdGlvbiBzbG93UGF0
aEZ1bmN0aW9uLAotICAgICAgICBjb25zdCBTbmlwcGV0T3BlcmFuZCYgbGVmdE9wZXJhbmQsIGNv
bnN0IFNuaXBwZXRPcGVyYW5kJiByaWdodE9wZXJhbmQpCi0gICAgICAgIDogSW5saW5lQ2FjaGVE
ZXNjcmlwdG9yKHN0YWNrbWFwSUQsIGNvZGVPcmlnaW4sIG51bGxwdHIpCi0gICAgICAgICwgbV9u
b2RlVHlwZShub2RlVHlwZSkKLSAgICAgICAgLCBtX3NpemUoc2l6ZSkKLSAgICAgICAgLCBtX25h
bWUobmFtZSkKLSAgICAgICAgLCBtX3Nsb3dQYXRoRnVuY3Rpb24oc2xvd1BhdGhGdW5jdGlvbikK
LSAgICAgICAgLCBtX2xlZnRPcGVyYW5kKGxlZnRPcGVyYW5kKQotICAgICAgICAsIG1fcmlnaHRP
cGVyYW5kKHJpZ2h0T3BlcmFuZCkKLSAgICB7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbV9ub2Rl
VHlwZTsKLSAgICBzaXplX3QgbV9zaXplOwotICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsKLSAgICBT
bG93UGF0aEZ1bmN0aW9uIG1fc2xvd1BhdGhGdW5jdGlvbjsKLQotICAgIFNuaXBwZXRPcGVyYW5k
IG1fbGVmdE9wZXJhbmQ7Ci0gICAgU25pcHBldE9wZXJhbmQgbV9yaWdodE9wZXJhbmQ7Ci19Owot
Ci1jbGFzcyBCaXRBbmREZXNjcmlwdG9yIDogcHVibGljIEJpbmFyeU9wRGVzY3JpcHRvciB7Ci1w
dWJsaWM6Ci0gICAgQml0QW5kRGVzY3JpcHRvcih1bnNpZ25lZCBzdGFja21hcElELCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIGNvbnN0IFNuaXBwZXRPcGVyYW5kJiBsZWZ0T3BlcmFuZCwgY29uc3Qg
U25pcHBldE9wZXJhbmQmIHJpZ2h0T3BlcmFuZCkKLSAgICAgICAgOiBCaW5hcnlPcERlc2NyaXB0
b3Iobm9kZVR5cGUoKSwgc3RhY2ttYXBJRCwgY29kZU9yaWdpbiwgaWNTaXplKCksIG9wTmFtZSgp
LCBzbG93UGF0aEZ1bmN0aW9uKCksIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpCi0gICAgeyB9
Ci0KLSAgICBzdGF0aWMgc2l6ZV90IGljU2l6ZSgpIHsgcmV0dXJuIHNpemVPZkJpdEFuZCgpOyB9
Ci0gICAgc3RhdGljIHVuc2lnbmVkIG5vZGVUeXBlKCkgeyByZXR1cm4gREZHOjpCaXRBbmQ7IH0K
LSAgICBzdGF0aWMgY29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gIkJpdEFuZCI7IH0KLSAg
ICBzdGF0aWMgSl9KSVRPcGVyYXRpb25fRUpKIHNsb3dQYXRoRnVuY3Rpb24oKSB7IHJldHVybiBE
Rkc6Om9wZXJhdGlvblZhbHVlQml0QW5kOyB9Ci0gICAgc3RhdGljIEpfSklUT3BlcmF0aW9uX0VK
SiBub25OdW1iZXJTbG93UGF0aEZ1bmN0aW9uKCkgeyByZXR1cm4gc2xvd1BhdGhGdW5jdGlvbigp
OyB9Ci19OwotCi1jbGFzcyBCaXRPckRlc2NyaXB0b3IgOiBwdWJsaWMgQmluYXJ5T3BEZXNjcmlw
dG9yIHsKLXB1YmxpYzoKLSAgICBCaXRPckRlc2NyaXB0b3IodW5zaWduZWQgc3RhY2ttYXBJRCwg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBTbmlwcGV0T3BlcmFuZCYgbGVmdE9wZXJhbmQs
IGNvbnN0IFNuaXBwZXRPcGVyYW5kJiByaWdodE9wZXJhbmQpCi0gICAgICAgIDogQmluYXJ5T3BE
ZXNjcmlwdG9yKG5vZGVUeXBlKCksIHN0YWNrbWFwSUQsIGNvZGVPcmlnaW4sIGljU2l6ZSgpLCBv
cE5hbWUoKSwgc2xvd1BhdGhGdW5jdGlvbigpLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKQot
ICAgIHsgfQotCi0gICAgc3RhdGljIHNpemVfdCBpY1NpemUoKSB7IHJldHVybiBzaXplT2ZCaXRP
cigpOyB9Ci0gICAgc3RhdGljIHVuc2lnbmVkIG5vZGVUeXBlKCkgeyByZXR1cm4gREZHOjpCaXRP
cjsgfQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBvcE5hbWUoKSB7IHJldHVybiAiQml0T3IiOyB9
Ci0gICAgc3RhdGljIEpfSklUT3BlcmF0aW9uX0VKSiBzbG93UGF0aEZ1bmN0aW9uKCkgeyByZXR1
cm4gREZHOjpvcGVyYXRpb25WYWx1ZUJpdE9yOyB9Ci0gICAgc3RhdGljIEpfSklUT3BlcmF0aW9u
X0VKSiBub25OdW1iZXJTbG93UGF0aEZ1bmN0aW9uKCkgeyByZXR1cm4gc2xvd1BhdGhGdW5jdGlv
bigpOyB9Ci19OwotCi1jbGFzcyBCaXRYb3JEZXNjcmlwdG9yIDogcHVibGljIEJpbmFyeU9wRGVz
Y3JpcHRvciB7Ci1wdWJsaWM6Ci0gICAgQml0WG9yRGVzY3JpcHRvcih1bnNpZ25lZCBzdGFja21h
cElELCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IFNuaXBwZXRPcGVyYW5kJiBsZWZ0T3Bl
cmFuZCwgY29uc3QgU25pcHBldE9wZXJhbmQmIHJpZ2h0T3BlcmFuZCkKLSAgICAgICAgOiBCaW5h
cnlPcERlc2NyaXB0b3Iobm9kZVR5cGUoKSwgc3RhY2ttYXBJRCwgY29kZU9yaWdpbiwgaWNTaXpl
KCksIG9wTmFtZSgpLCBzbG93UGF0aEZ1bmN0aW9uKCksIGxlZnRPcGVyYW5kLCByaWdodE9wZXJh
bmQpCi0gICAgeyB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IGljU2l6ZSgpIHsgcmV0dXJuIHNpemVP
ZkJpdFhvcigpOyB9Ci0gICAgc3RhdGljIHVuc2lnbmVkIG5vZGVUeXBlKCkgeyByZXR1cm4gREZH
OjpCaXRYb3I7IH0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gIkJp
dFhvciI7IH0KLSAgICBzdGF0aWMgSl9KSVRPcGVyYXRpb25fRUpKIHNsb3dQYXRoRnVuY3Rpb24o
KSB7IHJldHVybiBERkc6Om9wZXJhdGlvblZhbHVlQml0WG9yOyB9Ci0gICAgc3RhdGljIEpfSklU
T3BlcmF0aW9uX0VKSiBub25OdW1iZXJTbG93UGF0aEZ1bmN0aW9uKCkgeyByZXR1cm4gc2xvd1Bh
dGhGdW5jdGlvbigpOyB9Ci19OwotCi1jbGFzcyBCaXRMU2hpZnREZXNjcmlwdG9yIDogcHVibGlj
IEJpbmFyeU9wRGVzY3JpcHRvciB7Ci1wdWJsaWM6Ci0gICAgQml0TFNoaWZ0RGVzY3JpcHRvcih1
bnNpZ25lZCBzdGFja21hcElELCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IFNuaXBwZXRP
cGVyYW5kJiBsZWZ0T3BlcmFuZCwgY29uc3QgU25pcHBldE9wZXJhbmQmIHJpZ2h0T3BlcmFuZCkK
LSAgICAgICAgOiBCaW5hcnlPcERlc2NyaXB0b3Iobm9kZVR5cGUoKSwgc3RhY2ttYXBJRCwgY29k
ZU9yaWdpbiwgaWNTaXplKCksIG9wTmFtZSgpLCBzbG93UGF0aEZ1bmN0aW9uKCksIGxlZnRPcGVy
YW5kLCByaWdodE9wZXJhbmQpCi0gICAgeyB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IGljU2l6ZSgp
IHsgcmV0dXJuIHNpemVPZkJpdExTaGlmdCgpOyB9Ci0gICAgc3RhdGljIHVuc2lnbmVkIG5vZGVU
eXBlKCkgeyByZXR1cm4gREZHOjpCaXRMU2hpZnQ7IH0KLSAgICBzdGF0aWMgY29uc3QgY2hhciog
b3BOYW1lKCkgeyByZXR1cm4gIkJpdExTaGlmdCI7IH0KLSAgICBzdGF0aWMgSl9KSVRPcGVyYXRp
b25fRUpKIHNsb3dQYXRoRnVuY3Rpb24oKSB7IHJldHVybiBERkc6Om9wZXJhdGlvblZhbHVlQml0
TFNoaWZ0OyB9Ci0gICAgc3RhdGljIEpfSklUT3BlcmF0aW9uX0VKSiBub25OdW1iZXJTbG93UGF0
aEZ1bmN0aW9uKCkgeyByZXR1cm4gc2xvd1BhdGhGdW5jdGlvbigpOyB9Ci19OwotCi1jbGFzcyBC
aXRSU2hpZnREZXNjcmlwdG9yIDogcHVibGljIEJpbmFyeU9wRGVzY3JpcHRvciB7Ci1wdWJsaWM6
Ci0gICAgQml0UlNoaWZ0RGVzY3JpcHRvcih1bnNpZ25lZCBzdGFja21hcElELCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIGNvbnN0IFNuaXBwZXRPcGVyYW5kJiBsZWZ0T3BlcmFuZCwgY29uc3QgU25p
cHBldE9wZXJhbmQmIHJpZ2h0T3BlcmFuZCkKLSAgICAgICAgOiBCaW5hcnlPcERlc2NyaXB0b3Io
bm9kZVR5cGUoKSwgc3RhY2ttYXBJRCwgY29kZU9yaWdpbiwgaWNTaXplKCksIG9wTmFtZSgpLCBz
bG93UGF0aEZ1bmN0aW9uKCksIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpCi0gICAgeyB9Ci0K
LSAgICBzdGF0aWMgc2l6ZV90IGljU2l6ZSgpIHsgcmV0dXJuIHNpemVPZkJpdFJTaGlmdCgpOyB9
Ci0gICAgc3RhdGljIHVuc2lnbmVkIG5vZGVUeXBlKCkgeyByZXR1cm4gREZHOjpCaXRSU2hpZnQ7
IH0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gIkJpdFJTaGlmdCI7
IH0KLSAgICBzdGF0aWMgSl9KSVRPcGVyYXRpb25fRUpKIHNsb3dQYXRoRnVuY3Rpb24oKSB7IHJl
dHVybiBERkc6Om9wZXJhdGlvblZhbHVlQml0UlNoaWZ0OyB9Ci0gICAgc3RhdGljIEpfSklUT3Bl
cmF0aW9uX0VKSiBub25OdW1iZXJTbG93UGF0aEZ1bmN0aW9uKCkgeyByZXR1cm4gc2xvd1BhdGhG
dW5jdGlvbigpOyB9Ci19OwotCi1jbGFzcyBCaXRVUlNoaWZ0RGVzY3JpcHRvciA6IHB1YmxpYyBC
aW5hcnlPcERlc2NyaXB0b3IgewotcHVibGljOgotICAgIEJpdFVSU2hpZnREZXNjcmlwdG9yKHVu
c2lnbmVkIHN0YWNrbWFwSUQsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3QgU25pcHBldE9w
ZXJhbmQmIGxlZnRPcGVyYW5kLCBjb25zdCBTbmlwcGV0T3BlcmFuZCYgcmlnaHRPcGVyYW5kKQot
ICAgICAgICA6IEJpbmFyeU9wRGVzY3JpcHRvcihub2RlVHlwZSgpLCBzdGFja21hcElELCBjb2Rl
T3JpZ2luLCBpY1NpemUoKSwgb3BOYW1lKCksIHNsb3dQYXRoRnVuY3Rpb24oKSwgbGVmdE9wZXJh
bmQsIHJpZ2h0T3BlcmFuZCkKLSAgICB7IH0KLQotICAgIHN0YXRpYyBzaXplX3QgaWNTaXplKCkg
eyByZXR1cm4gc2l6ZU9mQml0VVJTaGlmdCgpOyB9Ci0gICAgc3RhdGljIHVuc2lnbmVkIG5vZGVU
eXBlKCkgeyByZXR1cm4gREZHOjpCaXRVUlNoaWZ0OyB9Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIq
IG9wTmFtZSgpIHsgcmV0dXJuICJCaXRVUlNoaWZ0IjsgfQotICAgIHN0YXRpYyBKX0pJVE9wZXJh
dGlvbl9FSkogc2xvd1BhdGhGdW5jdGlvbigpIHsgcmV0dXJuIERGRzo6b3BlcmF0aW9uVmFsdWVC
aXRVUlNoaWZ0OyB9Ci0gICAgc3RhdGljIEpfSklUT3BlcmF0aW9uX0VKSiBub25OdW1iZXJTbG93
UGF0aEZ1bmN0aW9uKCkgeyByZXR1cm4gc2xvd1BhdGhGdW5jdGlvbigpOyB9Ci19OwotCi1jbGFz
cyBBcml0aERpdkRlc2NyaXB0b3IgOiBwdWJsaWMgQmluYXJ5T3BEZXNjcmlwdG9yIHsKLXB1Ymxp
YzoKLSAgICBBcml0aERpdkRlc2NyaXB0b3IodW5zaWduZWQgc3RhY2ttYXBJRCwgQ29kZU9yaWdp
biBjb2RlT3JpZ2luLCBjb25zdCBTbmlwcGV0T3BlcmFuZCYgbGVmdE9wZXJhbmQsIGNvbnN0IFNu
aXBwZXRPcGVyYW5kJiByaWdodE9wZXJhbmQpCi0gICAgICAgIDogQmluYXJ5T3BEZXNjcmlwdG9y
KG5vZGVUeXBlKCksIHN0YWNrbWFwSUQsIGNvZGVPcmlnaW4sIGljU2l6ZSgpLCBvcE5hbWUoKSwg
c2xvd1BhdGhGdW5jdGlvbigpLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKQotICAgIHsgfQot
Ci0gICAgc3RhdGljIHNpemVfdCBpY1NpemUoKSB7IHJldHVybiBzaXplT2ZBcml0aERpdigpOyB9
Ci0gICAgc3RhdGljIHVuc2lnbmVkIG5vZGVUeXBlKCkgeyByZXR1cm4gREZHOjpBcml0aERpdjsg
fQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBvcE5hbWUoKSB7IHJldHVybiAiQXJpdGhEaXYiOyB9
Ci0gICAgc3RhdGljIEpfSklUT3BlcmF0aW9uX0VKSiBzbG93UGF0aEZ1bmN0aW9uKCkgeyByZXR1
cm4gREZHOjpvcGVyYXRpb25WYWx1ZURpdjsgfQotICAgIHN0YXRpYyBKX0pJVE9wZXJhdGlvbl9F
Skogbm9uTnVtYmVyU2xvd1BhdGhGdW5jdGlvbigpIHsgcmV0dXJuIHNsb3dQYXRoRnVuY3Rpb24o
KTsgfQotfTsKLQotY2xhc3MgQXJpdGhNdWxEZXNjcmlwdG9yIDogcHVibGljIEJpbmFyeU9wRGVz
Y3JpcHRvciB7Ci1wdWJsaWM6Ci0gICAgQXJpdGhNdWxEZXNjcmlwdG9yKHVuc2lnbmVkIHN0YWNr
bWFwSUQsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3QgU25pcHBldE9wZXJhbmQmIGxlZnRP
cGVyYW5kLCBjb25zdCBTbmlwcGV0T3BlcmFuZCYgcmlnaHRPcGVyYW5kKQotICAgICAgICA6IEJp
bmFyeU9wRGVzY3JpcHRvcihub2RlVHlwZSgpLCBzdGFja21hcElELCBjb2RlT3JpZ2luLCBpY1Np
emUoKSwgb3BOYW1lKCksIHNsb3dQYXRoRnVuY3Rpb24oKSwgbGVmdE9wZXJhbmQsIHJpZ2h0T3Bl
cmFuZCkKLSAgICB7IH0KLQotICAgIHN0YXRpYyBzaXplX3QgaWNTaXplKCkgeyByZXR1cm4gc2l6
ZU9mQXJpdGhNdWwoKTsgfQotICAgIHN0YXRpYyB1bnNpZ25lZCBub2RlVHlwZSgpIHsgcmV0dXJu
IERGRzo6QXJpdGhNdWw7IH0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1
cm4gIkFyaXRoTXVsIjsgfQotICAgIHN0YXRpYyBKX0pJVE9wZXJhdGlvbl9FSkogc2xvd1BhdGhG
dW5jdGlvbigpIHsgcmV0dXJuIERGRzo6b3BlcmF0aW9uVmFsdWVNdWw7IH0KLSAgICBzdGF0aWMg
Sl9KSVRPcGVyYXRpb25fRUpKIG5vbk51bWJlclNsb3dQYXRoRnVuY3Rpb24oKSB7IHJldHVybiBz
bG93UGF0aEZ1bmN0aW9uKCk7IH0KLX07Ci0KLWNsYXNzIEFyaXRoU3ViRGVzY3JpcHRvciA6IHB1
YmxpYyBCaW5hcnlPcERlc2NyaXB0b3IgewotcHVibGljOgotICAgIEFyaXRoU3ViRGVzY3JpcHRv
cih1bnNpZ25lZCBzdGFja21hcElELCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IFNuaXBw
ZXRPcGVyYW5kJiBsZWZ0T3BlcmFuZCwgY29uc3QgU25pcHBldE9wZXJhbmQmIHJpZ2h0T3BlcmFu
ZCkKLSAgICAgICAgOiBCaW5hcnlPcERlc2NyaXB0b3Iobm9kZVR5cGUoKSwgc3RhY2ttYXBJRCwg
Y29kZU9yaWdpbiwgaWNTaXplKCksIG9wTmFtZSgpLCBzbG93UGF0aEZ1bmN0aW9uKCksIGxlZnRP
cGVyYW5kLCByaWdodE9wZXJhbmQpCi0gICAgeyB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IGljU2l6
ZSgpIHsgcmV0dXJuIHNpemVPZkFyaXRoU3ViKCk7IH0KLSAgICBzdGF0aWMgdW5zaWduZWQgbm9k
ZVR5cGUoKSB7IHJldHVybiBERkc6OkFyaXRoU3ViOyB9Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIq
IG9wTmFtZSgpIHsgcmV0dXJuICJBcml0aFN1YiI7IH0KLSAgICBzdGF0aWMgSl9KSVRPcGVyYXRp
b25fRUpKIHNsb3dQYXRoRnVuY3Rpb24oKSB7IHJldHVybiBERkc6Om9wZXJhdGlvblZhbHVlU3Vi
OyB9Ci0gICAgc3RhdGljIEpfSklUT3BlcmF0aW9uX0VKSiBub25OdW1iZXJTbG93UGF0aEZ1bmN0
aW9uKCkgeyByZXR1cm4gc2xvd1BhdGhGdW5jdGlvbigpOyB9Ci19OwotCi1jbGFzcyBWYWx1ZUFk
ZERlc2NyaXB0b3IgOiBwdWJsaWMgQmluYXJ5T3BEZXNjcmlwdG9yIHsKLXB1YmxpYzoKLSAgICBW
YWx1ZUFkZERlc2NyaXB0b3IodW5zaWduZWQgc3RhY2ttYXBJRCwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBjb25zdCBTbmlwcGV0T3BlcmFuZCYgbGVmdE9wZXJhbmQsIGNvbnN0IFNuaXBwZXRPcGVy
YW5kJiByaWdodE9wZXJhbmQpCi0gICAgICAgIDogQmluYXJ5T3BEZXNjcmlwdG9yKG5vZGVUeXBl
KCksIHN0YWNrbWFwSUQsIGNvZGVPcmlnaW4sIGljU2l6ZSgpLCBvcE5hbWUoKSwgc2xvd1BhdGhG
dW5jdGlvbigpLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKQotICAgIHsgfQotCi0gICAgc3Rh
dGljIHNpemVfdCBpY1NpemUoKSB7IHJldHVybiBzaXplT2ZWYWx1ZUFkZCgpOyB9Ci0gICAgc3Rh
dGljIHVuc2lnbmVkIG5vZGVUeXBlKCkgeyByZXR1cm4gREZHOjpWYWx1ZUFkZDsgfQotICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBvcE5hbWUoKSB7IHJldHVybiAiVmFsdWVBZGQiOyB9Ci0gICAgc3Rh
dGljIEpfSklUT3BlcmF0aW9uX0VKSiBzbG93UGF0aEZ1bmN0aW9uKCkgeyByZXR1cm4gREZHOjpv
cGVyYXRpb25WYWx1ZUFkZDsgfQotICAgIHN0YXRpYyBKX0pJVE9wZXJhdGlvbl9FSkogbm9uTnVt
YmVyU2xvd1BhdGhGdW5jdGlvbigpIHsgcmV0dXJuIERGRzo6b3BlcmF0aW9uVmFsdWVBZGROb3RO
dW1iZXI7IH0KLX07Ci0KLS8vIFlvdSBjYW4gY3JlYXRlIGEgbGF6eSBzbG93IHBhdGggY2FsbCBp
biBsb3dlckRGR1RvTExWTSBieSBkb2luZzoKLS8vIG1fZnRsU3RhdGUubGF6eVNsb3dQYXRocy5h
cHBlbmQoCi0vLyAgICAgTGF6eVNsb3dQYXRoRGVzY3JpcHRvcigKLS8vICAgICAgICAgc3RhY2tt
YXBJRCwgY2FsbFNpdGVJbmRleCwKLS8vICAgICAgICAgY3JlYXRlU2hhcmVkVGFzazxSZWZQdHI8
TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+KGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mKT4oCi0vLyAg
ICAgICAgICAgICBbXSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQ
dHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLS8vICAgICAgICAgICAgICAgICAvLyBUaGlz
IGxhbWJkYSBzaG91bGQganVzdCByZWNvcmQgdGhlIHJlZ2lzdGVycyB0aGF0IHdlIHdpbGwgYmUg
dXNpbmcsIGFuZCByZXR1cm4KLS8vICAgICAgICAgICAgICAgICAvLyBhIFNoYXJlZFRhc2sgdGhh
dCB3aWxsIGFjdHVhbGx5IGdlbmVyYXRlIHRoZSBzbG93IHBhdGguCi0vLyAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAotLy8gICAgICAgICAgICAgICAgICAg
ICBmdW5jdGlvbiwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0
R1BSKCkpOwotLy8gICAgICAgICAgICAgfSkpKTsKLS8vCi0vLyBVc3VhbGx5LCB5b3UgY2FuIHVz
ZSB0aGUgTG93ZXJERkdUb0xMVk06OmxhenlTbG93UGF0aCgpIGhlbHBlciwgd2hpY2ggdGFrZXMg
Y2FyZSBvZiB0aGUgZGVzY3JpcHRvcgotLy8gZm9yIHlvdSBhbmQgYWxzbyBjcmVhdGVzIHRoZSBw
YXRjaHBvaW50LgotdHlwZWRlZiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IExhenlT
bG93UGF0aExpbmtlckZ1bmN0aW9uKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mKTsKLXR5cGVkZWYg
U2hhcmVkVGFzazxMYXp5U2xvd1BhdGhMaW5rZXJGdW5jdGlvbj4gTGF6eVNsb3dQYXRoTGlua2Vy
VGFzazsKLWNsYXNzIExhenlTbG93UGF0aERlc2NyaXB0b3IgOiBwdWJsaWMgSW5saW5lQ2FjaGVE
ZXNjcmlwdG9yIHsKLXB1YmxpYzoKLSAgICBMYXp5U2xvd1BhdGhEZXNjcmlwdG9yKCkgeyB9Ci0K
LSAgICBMYXp5U2xvd1BhdGhEZXNjcmlwdG9yKAotICAgICAgICB1bnNpZ25lZCBzdGFja21hcElE
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sCi0gICAgICAgIFJlZlB0cjxMYXp5U2xvd1BhdGhMaW5r
ZXJUYXNrPiBsaW5rZXIpCi0gICAgICAgIDogSW5saW5lQ2FjaGVEZXNjcmlwdG9yKHN0YWNrbWFw
SUQsIGNvZGVPcmlnaW4sIG51bGxwdHIpCi0gICAgICAgICwgbV9saW5rZXIobGlua2VyKQotICAg
IHsKLSAgICB9Ci0KLSAgICBWZWN0b3I8c3RkOjp0dXBsZTxMYXp5U2xvd1BhdGgqLCBDQ2FsbEhl
bHBlcnM6OkxhYmVsPj4gbV9nZW5lcmF0b3JzOwotCi0gICAgUmVmUHRyPExhenlTbG93UGF0aExp
bmtlclRhc2s+IG1fbGlua2VyOwotfTsKLQotI2lmIEVOQUJMRShNQVNNX1BST0JFKQotY2xhc3Mg
UHJvYmVEZXNjcmlwdG9yIDogcHVibGljIElubGluZUNhY2hlRGVzY3JpcHRvciB7Ci1wdWJsaWM6
Ci0gICAgUHJvYmVEZXNjcmlwdG9yKHVuc2lnbmVkIHN0YWNrbWFwSUQsIHN0ZDo6ZnVuY3Rpb248
dm9pZCAoQ0NhbGxIZWxwZXJzOjpQcm9iZUNvbnRleHQqKT4gcHJvYmVGdW5jdGlvbikKLSAgICAg
ICAgOiBJbmxpbmVDYWNoZURlc2NyaXB0b3Ioc3RhY2ttYXBJRCwgY29kZU9yaWdpbigpLCBudWxs
cHRyKQotICAgICAgICAsIG1fcHJvYmVGdW5jdGlvbihwcm9iZUZ1bmN0aW9uKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKENDYWxsSGVscGVyczo6UHJvYmVDb250ZXh0
Kik+JiBwcm9iZUZ1bmN0aW9uKCkgeyByZXR1cm4gbV9wcm9iZUZ1bmN0aW9uOyB9Ci0KLXByaXZh
dGU6Ci0gICAgc3RkOjpmdW5jdGlvbjx2b2lkIChDQ2FsbEhlbHBlcnM6OlByb2JlQ29udGV4dCop
PiBtX3Byb2JlRnVuY3Rpb247Ci19OwotI2VuZGlmIC8vIEVOQUJMRShNQVNNX1BST0JFKQotCi19
IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCi0KLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLQot
I2VuZGlmIC8vIEZUTElubGluZUNhY2hlRGVzY3JpcHRvcl9oCi0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAJKHJldmlzaW9uIDE5
NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSwzNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJGVExJbmxpbmVDYWNoZVNpemUuaCIKLQotI2lmIEVOQUJMRShGVExfSklUKQotCi0jaW5j
bHVkZSAiREZHTm9kZS5oIgotI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCi0j
aW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgewotCi11c2luZyBuYW1lc3BhY2UgREZHOwotCi0vLyBUaGUgZGVmYXVsdCBzaXplcyBhcmUg
eDg2LTY0LXNwZWNpZmljLCBhbmQgd2VyZSBmb3VuZCBlbXBpcmljYWxseS4gVGhleSBoYXZlIHRv
IGNvdmVyIHRoZSB3b3JzdAotLy8gcG9zc2libGUgY29tYmluYXRpb24gb2YgcmVnaXN0ZXJzIGxl
YWRpbmcgdG8gdGhlIGxhcmdlc3QgcG9zc2libGUgZW5jb2Rpbmcgb2YgZWFjaCBpbnN0cnVjdGlv
biBpbgotLy8gdGhlIElDLgotLy8KLS8vIEZJWE1FOiBUaGUgQVJNNjQgc2l6ZXMgYXJlIG92ZXJl
c3RpbWF0ZXM7IGlmIHRoZXJlIGlzIGFueSBicmFuY2ggY29tcGFjdGlvbiB0aGVuIHdlIHNob3Vs
ZCBiZSBhYmxlCi0vLyB0byBnZXQgYXdheSB3aXRoIGxlc3MuIFRoZSBicmFuY2ggY29tcGFjdGlv
biBjb2RlIGN1cnJlbnRseSB2YWxpZGF0ZXMgdGhlIHNpemUgb2YgdGhlIElDIGJlZm9yZQotLy8g
ZG9pbmcgYW55IGNvbXBhY3Rpb24sIHNvIHdlIG5lZWQgdG8gb3ZlcmVzdGltYXRlIGFuZCBnaXZl
IHRoZSB1bmNvbXBhY3RlZCBzaXplLiBUaGlzIHdvdWxkIGJlCi0vLyByZWxhdGl2ZWx5IGVhc3kg
dG8gZml4LgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTMz
NQotCi1zaXplX3Qgc2l6ZU9mR2V0QnlJZCgpCi17Ci0jaWYgQ1BVKEFSTTY0KQotICAgIHJldHVy
biAzMjsKLSNlbHNlCi0gICAgcmV0dXJuIDI3OwotI2VuZGlmCi19Ci0KLXNpemVfdCBzaXplT2ZQ
dXRCeUlkKCkKLXsKLSNpZiBDUFUoQVJNNjQpCi0gICAgcmV0dXJuIDQwOwotI2Vsc2UKLSAgICBy
ZXR1cm4gMjk7Ci0jZW5kaWYKLX0KLQotc2l6ZV90IHNpemVPZkNhbGwoKQotewotI2lmIENQVShB
Uk02NCkKLSAgICByZXR1cm4gNjA7Ci0jZWxzZQotICAgIHJldHVybiA2MDsKLSNlbmRpZgotfQot
Ci1zaXplX3Qgc2l6ZU9mQ2FsbFZhcmFyZ3MoKQotewotI2lmIENQVShBUk02NCkKLSAgICByZXR1
cm4gMzMyOwotI2Vsc2UKLSAgICByZXR1cm4gMjc1OwotI2VuZGlmCi19Ci0KLXNpemVfdCBzaXpl
T2ZUYWlsQ2FsbFZhcmFyZ3MoKQotewotI2lmIENQVShBUk02NCkKLSAgICByZXR1cm4gMTg4ICsg
c2l6ZU9mQ2FsbFZhcmFyZ3MoKTsKLSNlbHNlCi0gICAgcmV0dXJuIDE1MSArIHNpemVPZkNhbGxW
YXJhcmdzKCk7Ci0jZW5kaWYKLX0KLQotc2l6ZV90IHNpemVPZkNhbGxGb3J3YXJkVmFyYXJncygp
Ci17Ci0jaWYgQ1BVKEFSTTY0KQotICAgIHJldHVybiAzMTI7Ci0jZWxzZQotICAgIHJldHVybiAy
NjI7Ci0jZW5kaWYKLX0KLQotc2l6ZV90IHNpemVPZlRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MoKQot
ewotI2lmIENQVShBUk02NCkKLSAgICByZXR1cm4gMTg4ICsgc2l6ZU9mQ2FsbEZvcndhcmRWYXJh
cmdzKCk7Ci0jZWxzZQotICAgIHJldHVybiAxNTEgKyBzaXplT2ZDYWxsRm9yd2FyZFZhcmFyZ3Mo
KTsKLSNlbmRpZgotfQotCi1zaXplX3Qgc2l6ZU9mQ29uc3RydWN0VmFyYXJncygpCi17Ci0gICAg
cmV0dXJuIHNpemVPZkNhbGxWYXJhcmdzKCk7IC8vIFNob3VsZCBiZSB0aGUgc2FtZSBzaXplLgot
fQotCi1zaXplX3Qgc2l6ZU9mQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3MoKQotewotICAgIHJldHVy
biBzaXplT2ZDYWxsRm9yd2FyZFZhcmFyZ3MoKTsgLy8gU2hvdWxkIGJlIHRoZSBzYW1lIHNpemUu
Ci19Ci0KLXNpemVfdCBzaXplT2ZJbigpCi17Ci0jaWYgQ1BVKEFSTTY0KQotICAgIHJldHVybiA0
OwotI2Vsc2UKLSAgICByZXR1cm4gNTsgCi0jZW5kaWYKLX0KLQotc2l6ZV90IHNpemVPZkJpdEFu
ZCgpCi17Ci0jaWYgQ1BVKEFSTTY0KQotI2lmZGVmIE5ERUJVRwotcmV0dXJuIDE4MDsgLy8gQVJN
NjQgcmVsZWFzZS4KLSNlbHNlCi1yZXR1cm4gMjc2OyAvLyBBUk02NCBkZWJ1Zy4KLSNlbmRpZgot
I2Vsc2UgLy8gQ1BVKFg4Nl82NCkKLSNpZmRlZiBOREVCVUcKLXJldHVybiAxOTk7IC8vIFg4Nl82
NCByZWxlYXNlLgotI2Vsc2UKLXJldHVybiAyODY7IC8vIFg4Nl82NCBkZWJ1Zy4KLSNlbmRpZgot
I2VuZGlmCi19Ci0KLXNpemVfdCBzaXplT2ZCaXRPcigpCi17Ci0jaWYgQ1BVKEFSTTY0KQotI2lm
ZGVmIE5ERUJVRwotICAgIHJldHVybiAxODA7IC8vIEFSTTY0IHJlbGVhc2UuCi0jZWxzZQotICAg
IHJldHVybiAyNzY7IC8vIEFSTTY0IGRlYnVnLgotI2VuZGlmCi0jZWxzZSAvLyBDUFUoWDg2XzY0
KQotI2lmZGVmIE5ERUJVRwotICAgIHJldHVybiAxOTk7IC8vIFg4Nl82NCByZWxlYXNlLgotI2Vs
c2UKLSAgICByZXR1cm4gMjg2OyAvLyBYODZfNjQgZGVidWcuCi0jZW5kaWYKLSNlbmRpZgotfQot
Ci1zaXplX3Qgc2l6ZU9mQml0WG9yKCkKLXsKLSNpZiBDUFUoQVJNNjQpCi0jaWZkZWYgTkRFQlVH
Ci0gICAgcmV0dXJuIDE4MDsgLy8gQVJNNjQgcmVsZWFzZS4KLSNlbHNlCi0gICAgcmV0dXJuIDI3
NjsgLy8gQVJNNjQgZGVidWcuCi0jZW5kaWYKLSNlbHNlIC8vIENQVShYODZfNjQpCi0jaWZkZWYg
TkRFQlVHCi0gICAgcmV0dXJuIDE5OTsgLy8gWDg2XzY0IHJlbGVhc2UuCi0jZWxzZQotICAgIHJl
dHVybiAyODY7IC8vIFg4Nl82NCBkZWJ1Zy4KLSNlbmRpZgotI2VuZGlmCi19Ci0KLXNpemVfdCBz
aXplT2ZCaXRMU2hpZnQoKQotewotI2lmIENQVShBUk02NCkKLSNpZmRlZiBOREVCVUcKLSAgICBy
ZXR1cm4gMTgwOyAvLyBBUk02NCByZWxlYXNlLgotI2Vsc2UKLSAgICByZXR1cm4gMjc2OyAvLyBB
Uk02NCBkZWJ1Zy4KLSNlbmRpZgotI2Vsc2UgLy8gQ1BVKFg4Nl82NCkKLSNpZmRlZiBOREVCVUcK
LSAgICByZXR1cm4gMTk5OyAvLyBYODZfNjQgcmVsZWFzZS4KLSNlbHNlCi0gICAgcmV0dXJuIDI4
NjsgLy8gWDg2XzY0IGRlYnVnLgotI2VuZGlmCi0jZW5kaWYKLX0KLQotc2l6ZV90IHNpemVPZkJp
dFJTaGlmdCgpCi17Ci0jaWYgQ1BVKEFSTTY0KQotI2lmZGVmIE5ERUJVRwotICAgIHJldHVybiAx
ODA7IC8vIEFSTTY0IHJlbGVhc2UuCi0jZWxzZQotICAgIHJldHVybiAyNzY7IC8vIEFSTTY0IGRl
YnVnLgotI2VuZGlmCi0jZWxzZSAvLyBDUFUoWDg2XzY0KQotI2lmZGVmIE5ERUJVRwotICAgIHJl
dHVybiAxOTk7IC8vIFg4Nl82NCByZWxlYXNlLgotI2Vsc2UKLSAgICByZXR1cm4gMjg2OyAvLyBY
ODZfNjQgZGVidWcuCi0jZW5kaWYKLSNlbmRpZgotfQotCi1zaXplX3Qgc2l6ZU9mQml0VVJTaGlm
dCgpCi17Ci0jaWYgQ1BVKEFSTTY0KQotI2lmZGVmIE5ERUJVRwotICAgIHJldHVybiAxODA7IC8v
IEFSTTY0IHJlbGVhc2UuCi0jZWxzZQotICAgIHJldHVybiAyNzY7IC8vIEFSTTY0IGRlYnVnLgot
I2VuZGlmCi0jZWxzZSAvLyBDUFUoWDg2XzY0KQotI2lmZGVmIE5ERUJVRwotICAgIHJldHVybiAx
OTk7IC8vIFg4Nl82NCByZWxlYXNlLgotI2Vsc2UKLSAgICByZXR1cm4gMjg2OyAvLyBYODZfNjQg
ZGVidWcuCi0jZW5kaWYKLSNlbmRpZgotfQotCi1zaXplX3Qgc2l6ZU9mQXJpdGhEaXYoKQotewot
I2lmIENQVShBUk02NCkKLSNpZmRlZiBOREVCVUcKLSAgICByZXR1cm4gMTgwOyAvLyBBUk02NCBy
ZWxlYXNlLgotI2Vsc2UKLSAgICByZXR1cm4gMjc2OyAvLyBBUk02NCBkZWJ1Zy4KLSNlbmRpZgot
I2Vsc2UgLy8gQ1BVKFg4Nl82NCkKLSNpZmRlZiBOREVCVUcKLSAgICByZXR1cm4gMTk5OyAvLyBY
ODZfNjQgcmVsZWFzZS4KLSNlbHNlCi0gICAgcmV0dXJuIDI4NjsgLy8gWDg2XzY0IGRlYnVnLgot
I2VuZGlmCi0jZW5kaWYKLX0KLQotc2l6ZV90IHNpemVPZkFyaXRoTXVsKCkKLXsKLSNpZiBDUFUo
QVJNNjQpCi0jaWZkZWYgTkRFQlVHCi0gICAgcmV0dXJuIDE4MDsgLy8gQVJNNjQgcmVsZWFzZS4K
LSNlbHNlCi0gICAgcmV0dXJuIDI3NjsgLy8gQVJNNjQgZGVidWcuCi0jZW5kaWYKLSNlbHNlIC8v
IENQVShYODZfNjQpCi0jaWZkZWYgTkRFQlVHCi0gICAgcmV0dXJuIDE5OTsgLy8gWDg2XzY0IHJl
bGVhc2UuCi0jZWxzZQotICAgIHJldHVybiAyODY7IC8vIFg4Nl82NCBkZWJ1Zy4KLSNlbmRpZgot
I2VuZGlmCi19Ci0KLXNpemVfdCBzaXplT2ZBcml0aFN1YigpCi17Ci0jaWYgQ1BVKEFSTTY0KQot
I2lmZGVmIE5ERUJVRwotICAgIHJldHVybiAyMTY7IC8vIEFSTTY0IHJlbGVhc2UuCi0jZWxzZQot
ICAgIHJldHVybiAzMTI7IC8vIEFSTTY0IGRlYnVnLgotI2VuZGlmCi0jZWxzZSAvLyBDUFUoWDg2
XzY0KQotI2lmZGVmIE5ERUJVRwotICAgIHJldHVybiAyMjM7IC8vIFg4Nl82NCByZWxlYXNlLgot
I2Vsc2UKLSAgICByZXR1cm4gMjk4OyAvLyBYODZfNjQgZGVidWcuCi0jZW5kaWYKLSNlbmRpZgot
fQotCi1zaXplX3Qgc2l6ZU9mVmFsdWVBZGQoKQotewotI2lmIENQVShBUk02NCkKLSNpZmRlZiBO
REVCVUcKLSAgICByZXR1cm4gMTgwOyAvLyBBUk02NCByZWxlYXNlLgotI2Vsc2UKLSAgICByZXR1
cm4gMjc2OyAvLyBBUk02NCBkZWJ1Zy4KLSNlbmRpZgotI2Vsc2UgLy8gQ1BVKFg4Nl82NCkKLSNp
ZmRlZiBOREVCVUcKLSAgICByZXR1cm4gMTk5OyAvLyBYODZfNjQgcmVsZWFzZS4KLSNlbHNlCi0g
ICAgcmV0dXJuIDI4NjsgLy8gWDg2XzY0IGRlYnVnLgotI2VuZGlmCi0jZW5kaWYKLX0KLQotI2lm
IEVOQUJMRShNQVNNX1BST0JFKQotc2l6ZV90IHNpemVPZlByb2JlKCkKLXsKLSAgICByZXR1cm4g
MTMyOyAvLyBCYXNlZCBvbiBBUk02NC4KLX0KLSNlbmRpZgotCi1zaXplX3Qgc2l6ZU9mSUNGb3Io
Tm9kZSogbm9kZSkKLXsKLSAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICBjYXNlIEdldEJ5
SWQ6Ci0gICAgICAgIHJldHVybiBzaXplT2ZHZXRCeUlkKCk7Ci0gICAgY2FzZSBQdXRCeUlkOgot
ICAgICAgICByZXR1cm4gc2l6ZU9mUHV0QnlJZCgpOwotICAgIGNhc2UgQ2FsbDoKLSAgICBjYXNl
IENvbnN0cnVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVPZkNhbGwoKTsKLSAgICBjYXNlIENhbGxW
YXJhcmdzOgotICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKLSAgICAgICAg
cmV0dXJuIHNpemVPZkNhbGxWYXJhcmdzKCk7Ci0gICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6Ci0g
ICAgICAgIHJldHVybiBzaXplT2ZUYWlsQ2FsbFZhcmFyZ3MoKTsKLSAgICBjYXNlIENhbGxGb3J3
YXJkVmFyYXJnczoKLSAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVy
OgotICAgICAgICByZXR1cm4gc2l6ZU9mQ2FsbEZvcndhcmRWYXJhcmdzKCk7Ci0gICAgY2FzZSBU
YWlsQ2FsbEZvcndhcmRWYXJhcmdzOgotICAgICAgICByZXR1cm4gc2l6ZU9mVGFpbENhbGxGb3J3
YXJkVmFyYXJncygpOwotICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKLSAgICAgICAgcmV0dXJu
IHNpemVPZkNvbnN0cnVjdFZhcmFyZ3MoKTsKLSAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJh
cmdzOgotICAgICAgICByZXR1cm4gc2l6ZU9mQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3MoKTsKLSAg
ICBjYXNlIEluOgotICAgICAgICByZXR1cm4gc2l6ZU9mSW4oKTsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAkocmV2aXNp
b24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNp
emUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgRlRMSW5saW5lQ2FjaGVT
aXplX2gKLSNkZWZpbmUgRlRMSW5saW5lQ2FjaGVTaXplX2gKLQotI2lmIEVOQUJMRShGVExfSklU
KQotCi1uYW1lc3BhY2UgSlNDIHsKLQotbmFtZXNwYWNlIERGRyB7Ci1zdHJ1Y3QgTm9kZTsKLX0K
LQotbmFtZXNwYWNlIEZUTCB7Ci0KLXNpemVfdCBzaXplT2ZHZXRCeUlkKCk7Ci1zaXplX3Qgc2l6
ZU9mUHV0QnlJZCgpOwotc2l6ZV90IHNpemVPZkNhbGwoKTsKLXNpemVfdCBzaXplT2ZDYWxsVmFy
YXJncygpOwotc2l6ZV90IHNpemVPZlRhaWxDYWxsVmFyYXJncygpOwotc2l6ZV90IHNpemVPZkNh
bGxGb3J3YXJkVmFyYXJncygpOwotc2l6ZV90IHNpemVPZlRhaWxDYWxsRm9yd2FyZFZhcmFyZ3Mo
KTsKLXNpemVfdCBzaXplT2ZDb25zdHJ1Y3RWYXJhcmdzKCk7Ci1zaXplX3Qgc2l6ZU9mQ29uc3Ry
dWN0Rm9yd2FyZFZhcmFyZ3MoKTsKLXNpemVfdCBzaXplT2ZJbigpOwotc2l6ZV90IHNpemVPZkJp
dEFuZCgpOwotc2l6ZV90IHNpemVPZkJpdE9yKCk7Ci1zaXplX3Qgc2l6ZU9mQml0WG9yKCk7Ci1z
aXplX3Qgc2l6ZU9mQml0TFNoaWZ0KCk7Ci1zaXplX3Qgc2l6ZU9mQml0UlNoaWZ0KCk7Ci1zaXpl
X3Qgc2l6ZU9mQml0VVJTaGlmdCgpOwotc2l6ZV90IHNpemVPZkFyaXRoRGl2KCk7Ci1zaXplX3Qg
c2l6ZU9mQXJpdGhNdWwoKTsKLXNpemVfdCBzaXplT2ZBcml0aFN1YigpOwotc2l6ZV90IHNpemVP
ZlZhbHVlQWRkKCk7Ci0jaWYgRU5BQkxFKE1BU01fUFJPQkUpCi1zaXplX3Qgc2l6ZU9mUHJvYmUo
KTsKLSNlbmRpZgotCi1zaXplX3Qgc2l6ZU9mSUNGb3IoREZHOjpOb2RlKik7Ci0KLX0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpGVEwKLQotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotCi0jZW5kaWYg
Ly8gRlRMSW5saW5lQ2FjaGVTaXplX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpJVENvZGUuY3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwyMCArNDQsMTEgQEAg
SklUQ29kZTo6fkpJVENvZGUoKQogICAgIGlmIChGVEw6OnNob3VsZER1bXBEaXNhc3NlbWJseSgp
KSB7CiAgICAgICAgIGRhdGFMb2coIkRlc3Ryb3lpbmcgRlRMIEpJVCBjb2RlIGF0ICIpOwogICAg
ICAgICBDb21tYVByaW50ZXIgY29tbWE7Ci0jaWYgRlRMX1VTRVNfQjMKICAgICAgICAgZGF0YUxv
Zyhjb21tYSwgbV9iM0NvZGUpOwogICAgICAgICBkYXRhTG9nKGNvbW1hLCBtX2FyaXR5Q2hlY2tF
bnRyeXBvaW50KTsKLSNlbHNlCi0gICAgICAgIGZvciAoYXV0byYgaGFuZGxlIDogbV9oYW5kbGVz
KQotICAgICAgICAgICAgZGF0YUxvZyhjb21tYSwgcG9pbnRlckR1bXAoaGFuZGxlLmdldCgpKSk7
Ci0gICAgICAgIGRhdGFMb2coY29tbWEsIHBvaW50ZXJEdW1wKG1fYXJpdHlDaGVja0VudHJ5cG9p
bnQuZXhlY3V0YWJsZU1lbW9yeSgpKSk7Ci0gICAgICAgIGRhdGFMb2coY29tbWEsIHBvaW50ZXJE
dW1wKG1fZXhpdFRodW5rcy5leGVjdXRhYmxlTWVtb3J5KCkpKTsKLSAgICAgICAgZGF0YUxvZygi
XG4iKTsKLSNlbmRpZgogICAgIH0KIH0KIAotI2lmIEZUTF9VU0VTX0IzCiB2b2lkIEpJVENvZGU6
OmluaXRpYWxpemVCM0NvZGUoQ29kZVJlZiBiM0NvZGUpCiB7CiAgICAgbV9iM0NvZGUgPSBiM0Nv
ZGU7CkBAIC02NywyMiArNTgsNiBAQCB2b2lkIEpJVENvZGU6OmluaXRpYWxpemVCM0J5cHJvZHVj
dHMoc3RkCiB7CiAgICAgbV9iM0J5cHJvZHVjdHMgPSBXVEZNb3ZlKGJ5cHJvZHVjdHMpOwogfQot
I2Vsc2UgLy8gRlRMX1VTRVNfQjMKLXZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUV4aXRUaHVua3Mo
Q29kZVJlZiBleGl0VGh1bmtzKQotewotICAgIG1fZXhpdFRodW5rcyA9IGV4aXRUaHVua3M7Ci19
Ci0KLXZvaWQgSklUQ29kZTo6YWRkSGFuZGxlKFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhh
bmRsZT4gaGFuZGxlKQotewotICAgIG1faGFuZGxlcy5hcHBlbmQoaGFuZGxlKTsKLX0KLQotdm9p
ZCBKSVRDb2RlOjphZGREYXRhU2VjdGlvbihQYXNzUmVmUHRyPERhdGFTZWN0aW9uPiBkYXRhU2Vj
dGlvbikKLXsKLSAgICBtX2RhdGFTZWN0aW9ucy5hcHBlbmQoZGF0YVNlY3Rpb24pOwotfQotI2Vu
ZGlmIC8vIEZUTF9VU0VTX0IzCiAKIHZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUFkZHJlc3NGb3JD
YWxsKENvZGVQdHIgYWRkcmVzcykKIHsKQEAgLTE0MCwxMyArMTE1LDYgQEAgYm9vbCBKSVRDb2Rl
Ojpjb250YWlucyh2b2lkKikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLSNpZiAhRlRMX1VTRVNf
QjMKLUpJVENvZGU6OkNvZGVQdHIgSklUQ29kZTo6ZXhpdFRodW5rcygpCi17Ci0gICAgcmV0dXJu
IG1fZXhpdFRodW5rcy5jb2RlKCk7Ci19Ci0jZW5kaWYKLQogSklUQ29kZSogSklUQ29kZTo6ZnRs
KCkKIHsKICAgICByZXR1cm4gdGhpczsKQEAgLTE2Nyw3ICsxMzUsNiBAQCB2b2lkIEpJVENvZGU6
OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUCiAKIFJlZ2lzdGVyU2V0IEpJVENvZGU6OmxpdmVS
ZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlKENvZGVCbG9jayos
IENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkKIHsKLSNpZiBGVExfVVNFU19CMwogICAgIGZv
ciAoT1NSRXhpdCYgZXhpdCA6IG9zckV4aXQpIHsKICAgICAgICAgaWYgKGV4aXQubV9leGNlcHRp
b25IYW5kbGVyQ2FsbFNpdGVJbmRleC5iaXRzKCkgPT0gY2FsbFNpdGVJbmRleC5iaXRzKCkpIHsK
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpOwpA
QCAtMTc1LDE0ICsxNDIsNiBAQCBSZWdpc3RlclNldCBKSVRDb2RlOjpsaXZlUmVnaXN0ZXJzVG9Q
cmVzCiAgICAgICAgICAgICByZXR1cm4gVmFsdWVSZXA6OnVzZWRSZWdpc3RlcnMoZXhpdC5tX3Zh
bHVlUmVwcyk7CiAgICAgICAgIH0KICAgICB9Ci0jZWxzZSAvLyBGVExfVVNFU19CMwotICAgIGZv
ciAoT1NSRXhpdCYgZXhpdCA6IG9zckV4aXQpIHsKLSAgICAgICAgaWYgKGV4aXQubV9leGNlcHRp
b25IYW5kbGVyQ2FsbFNpdGVJbmRleC5iaXRzKCkgPT0gY2FsbFNpdGVJbmRleC5iaXRzKCkpIHsK
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpOwot
ICAgICAgICAgICAgcmV0dXJuIHN0YWNrbWFwcy5yZWNvcmRzW2V4aXQubV9zdGFja21hcFJlY29y
ZEluZGV4XS51c2VkUmVnaXN0ZXJTZXQoKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvLyBG
VExfVVNFU19CMwogICAgIHJldHVybiBSZWdpc3RlclNldCgpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDI3
ICszMCwxMSBAQAogCiAjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1Y3RzLmgiCiAjaW5jbHVkZSAi
REZHQ29tbW9uRGF0YS5oIgotI2luY2x1ZGUgIkZUTERhdGFTZWN0aW9uLmgiCiAjaW5jbHVkZSAi
RlRMTGF6eVNsb3dQYXRoLmgiCiAjaW5jbHVkZSAiRlRMT1NSRXhpdC5oIgotI2luY2x1ZGUgIkZU
TFN0YWNrTWFwcy5oIgotI2luY2x1ZGUgIkZUTFVud2luZEluZm8uaCIKICNpbmNsdWRlICJKSVRD
b2RlLmgiCi0jaW5jbHVkZSAiTExWTUFQSS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkQXJy
YXkuaD4KIAotI2lmICFGVExfVVNFU19CMwotI2lmIE9TKERBUldJTikKLSNkZWZpbmUgU0VDVElP
Tl9OQU1FX1BSRUZJWCAiX18iCi0jZWxpZiBPUyhMSU5VWCkKLSNkZWZpbmUgU0VDVElPTl9OQU1F
X1BSRUZJWCAiLiIKLSNlbHNlCi0jZXJyb3IgIlVuc3VwcG9ydGVkIHBsYXRmb3JtIgotI2VuZGlm
Ci0KLSNkZWZpbmUgU0VDVElPTl9OQU1FKE5BTUUpIChTRUNUSU9OX05BTUVfUFJFRklYIE5BTUUp
Ci0jZW5kaWYgLy8gIUZUTF9VU0VTX0IzCi0KIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBUcmFj
a2VkUmVmZXJlbmNlczsKQEAgLTY5LDE0ICs1Myw4IEBAIHB1YmxpYzoKICAgICBzaXplX3Qgc2l6
ZSgpIG92ZXJyaWRlOwogICAgIGJvb2wgY29udGFpbnModm9pZCopIG92ZXJyaWRlOwogCi0jaWYg
RlRMX1VTRVNfQjMKICAgICB2b2lkIGluaXRpYWxpemVCM0NvZGUoQ29kZVJlZik7CiAgICAgdm9p
ZCBpbml0aWFsaXplQjNCeXByb2R1Y3RzKHN0ZDo6dW5pcXVlX3B0cjxCMzo6T3BhcXVlQnlwcm9k
dWN0cz4pOwotI2Vsc2UKLSAgICB2b2lkIGluaXRpYWxpemVFeGl0VGh1bmtzKENvZGVSZWYpOwot
ICAgIHZvaWQgYWRkSGFuZGxlKFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4pOwot
ICAgIHZvaWQgYWRkRGF0YVNlY3Rpb24oUGFzc1JlZlB0cjxEYXRhU2VjdGlvbj4pOwotI2VuZGlm
CiAgICAgdm9pZCBpbml0aWFsaXplQWRkcmVzc0ZvckNhbGwoQ29kZVB0cik7CiAgICAgdm9pZCBp
bml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQoQ29kZVJlZik7CiAgICAgCkBAIC04NiwxNCAr
NjQsNyBAQCBwdWJsaWM6CiAKICAgICBPcHRpb25hbDxDb2RlT3JpZ2luPiBmaW5kUEMoQ29kZUJs
b2NrKiwgdm9pZCogcGMpIG92ZXJyaWRlOwogCi0jaWYgRlRMX1VTRVNfQjMKICAgICBDb2RlUmVm
IGIzQ29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYjNDb2RlOyB9Ci0jZWxzZQotICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4+JiBoYW5kbGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYW5kbGVzOyB9Ci0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxEYXRhU2VjdGlvbj4+
JiBkYXRhU2VjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2RhdGFTZWN0aW9uczsgfQotICAgIAot
ICAgIENvZGVQdHIgZXhpdFRodW5rcygpOwotI2VuZGlmCiAgICAgCiAgICAgSklUQ29kZSogZnRs
KCkgb3ZlcnJpZGU7CiAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24oKSBvdmVycmlkZTsK
QEAgLTEwMiwyNSArNzMsMTMgQEAgcHVibGljOgogICAgIERGRzo6Q29tbW9uRGF0YSBjb21tb247
CiAgICAgU2VnbWVudGVkVmVjdG9yPE9TUkV4aXQsIDg+IG9zckV4aXQ7CiAgICAgU2VnbWVudGVk
VmVjdG9yPE9TUkV4aXREZXNjcmlwdG9yLCA4PiBvc3JFeGl0RGVzY3JpcHRvcnM7Ci0jaWYgIUZU
TF9VU0VTX0IzCi0gICAgU3RhY2tNYXBzIHN0YWNrbWFwczsKLSNlbmRpZiAvLyAhRlRMX1VTRVNf
QjMKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPExhenlTbG93UGF0aD4+IGxhenlTbG93UGF0
aHM7Ci0gICAgaW50MzJfdCBvc3JFeGl0RnJvbUdlbmVyaWNVbndpbmRTdGFja1NwaWxsU2xvdDsK
ICAgICAKIHByaXZhdGU6CiAgICAgQ29kZVB0ciBtX2FkZHJlc3NGb3JDYWxsOwotI2lmIEZUTF9V
U0VTX0IzCiAgICAgQ29kZVJlZiBtX2IzQ29kZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6Ok9w
YXF1ZUJ5cHJvZHVjdHM+IG1fYjNCeXByb2R1Y3RzOwotI2Vsc2UKLSAgICBWZWN0b3I8UmVmUHRy
PERhdGFTZWN0aW9uPj4gbV9kYXRhU2VjdGlvbnM7Ci0gICAgVmVjdG9yPFJlZlB0cjxFeGVjdXRh
YmxlTWVtb3J5SGFuZGxlPj4gbV9oYW5kbGVzOwotI2VuZGlmCiAgICAgQ29kZVJlZiBtX2FyaXR5
Q2hlY2tFbnRyeXBvaW50OwotI2lmICFGVExfVVNFU19CMwotICAgIENvZGVSZWYgbV9leGl0VGh1
bmtzOwotI2VuZGlmCiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgJKHJldmlzaW9uIDE5NjY4
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5j
bHVkZSAiRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIgogI2luY2x1ZGUgIkZUTFNsb3dQYXRo
Q2FsbC5oIgotI2luY2x1ZGUgIkxMVk1BUEkuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAj
aW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKIApAQCAtNjAsMjIgKzU5LDExIEBAIHB1YmxpYzoK
ICAgICBib29sIGZpbmFsaXplKCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBmaW5hbGl6ZUZ1bmN0aW9u
KCkgb3ZlcnJpZGU7CiAKLSNpZiBGVExfVVNFU19CMwogICAgIHN0ZDo6dW5pcXVlX3B0cjxMaW5r
QnVmZmVyPiBiM0NvZGVMaW5rQnVmZmVyOwotI2VuZGlmCiAKICAgICAvLyBFdmVudHVhbGx5LCB3
ZSBjYW4gZ2V0IHJpZCBvZiB0aGlzIHdpdGggQjMuCiAgICAgc3RkOjp1bmlxdWVfcHRyPExpbmtC
dWZmZXI+IGVudHJ5cG9pbnRMaW5rQnVmZmVyOwogICAgIAotI2lmICFGVExfVVNFU19CMwotICAg
IC8vIEluIEIzLCB3ZSBjYW4gZG8gYWxsIG9mIHRoaXMgZGlyZWN0bHkgaW4gdGhlIEIzIGNvZGUu
IFRoYXQgaW5jbHVkZXMgc2xvdyBwYXRocyBhbmQgZXhjZXB0aW9uIGhhbmRsZXJzLgotICAgIHN0
ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPiBleGl0VGh1bmtzTGlua0J1ZmZlcjsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4gc2lkZUNvZGVMaW5rQnVmZmVyOwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxMaW5rQnVmZmVyPiBoYW5kbGVFeGNlcHRpb25zTGlua0J1ZmZlcjsKLSAgICBWZWN0
b3I8T3V0T2ZMaW5lQ29kZUluZm8+IG91dE9mTGluZUNvZGVJbmZvczsKLSAgICBWZWN0b3I8T1NS
RXhpdENvbXBpbGF0aW9uSW5mbz4gb3NyRXhpdDsKLSNlbmRpZgotCiAgICAgVmVjdG9yPENDYWxs
SGVscGVyczo6SnVtcD4gbGF6eVNsb3dQYXRoR2VuZXJhdG9ySnVtcHM7CiAgICAgR2VuZXJhdGVk
RnVuY3Rpb24gZnVuY3Rpb247CiAgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuY3BwCShyZXZpc2lvbiAxOTY2ODUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGVExKU0NhbGwuaCIK
LQotI2lmIEVOQUJMRShGVExfSklUKSAmJiAhRlRMX1VTRVNfQjMKLQotI2luY2x1ZGUgIkRGR05v
ZGUuaCIKLSNpbmNsdWRlICJGVExTdGF0ZS5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLQot
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewotCi11c2luZyBuYW1lc3BhY2UgREZHOwot
Ci1KU0NhbGw6OkpTQ2FsbCgpCi0gICAgOiBtX3N0YWNrbWFwSUQoVUlOVF9NQVgpCi0gICAgLCBt
X2luc3RydWN0aW9uT2Zmc2V0KFVJTlRfTUFYKQotewotfQotCi1KU0NhbGw6OkpTQ2FsbCh1bnNp
Z25lZCBzdGFja21hcElELCBOb2RlKiBub2RlLCBDb2RlT3JpZ2luIGNhbGxTaXRlRGVzY3JpcHRp
b25PcmlnaW4pCi0gICAgOiBKU0NhbGxCYXNlKG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0ID8gQ2Fs
bExpbmtJbmZvOjpDb25zdHJ1Y3QgOiBDYWxsTGlua0luZm86OkNhbGwsIG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYywgY2FsbFNpdGVEZXNjcmlwdGlvbk9yaWdpbikKLSAgICAsIG1fc3RhY2ttYXBJRChz
dGFja21hcElEKQotICAgICwgbV9pbnN0cnVjdGlvbk9mZnNldCgwKQotewotICAgIEFTU0VSVChu
b2RlLT5vcCgpID09IENhbGwgfHwgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3QgfHwgbm9kZS0+b3Ao
KSA9PSBUYWlsQ2FsbElubGluZWRDYWxsZXIpOwotfQotCi12b2lkIEpTQ2FsbDo6ZW1pdChDQ2Fs
bEhlbHBlcnMmIGppdCwgU3RhdGUmIHN0YXRlLCBpbnQzMl90IG9zckV4aXRGcm9tR2VuZXJpY1Vu
d2luZFNwaWxsU2xvdHMpCi17Ci0gICAgSlNDYWxsQmFzZTo6ZW1pdChqaXQsIHN0YXRlLCBvc3JF
eGl0RnJvbUdlbmVyaWNVbndpbmRTcGlsbFNsb3RzKTsKLQotI2lmIEZUTF9VU0VTX0IzCi0gICAg
aml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtIHN0YXRpY19jYXN0PGludDY0
X3Q+KHN0YXRlLmppdENvZGUtPmNvbW1vbi5mcmFtZVJlZ2lzdGVyQ291bnQgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKSksIENDYWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxs
SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotI2Vsc2UgLy8gRlRMX1VTRVNfQjMKLSAg
ICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC0gc3RhdGljX2Nhc3Q8aW50
NjRfdD4oc3RhdGUuaml0Q29kZS0+c3RhY2ttYXBzLnN0YWNrU2l6ZUZvckxvY2FscygpKSksIEND
YWxsSGVscGVyczo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCi19Ci0KLX0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpGVEwKLQotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKSAmJiAhRlRMX1VTRVNfQjMK
LQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCShyZXZpc2lvbiAxOTY2
ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEZUTEpTQ2FsbF9oCi0jZGVmaW5lIEZUTEpTQ2FsbF9o
Ci0KLSNpbmNsdWRlICJERkdDb21tb24uaCIKLQotI2lmIEVOQUJMRShGVExfSklUKSAmJiAhRlRM
X1VTRVNfQjMKLQotI2luY2x1ZGUgIkZUTEpTQ2FsbEJhc2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7
Ci0KLW5hbWVzcGFjZSBERkcgewotc3RydWN0IE5vZGU7Ci19Ci0KLW5hbWVzcGFjZSBGVEwgewot
Ci1jbGFzcyBKU0NhbGwgOiBwdWJsaWMgSlNDYWxsQmFzZSB7Ci1wdWJsaWM6Ci0gICAgSlNDYWxs
KCk7Ci0gICAgSlNDYWxsKHVuc2lnbmVkIHN0YWNrbWFwSUQsIERGRzo6Tm9kZSosIENvZGVPcmln
aW4gY2FsbFNpdGVEZXNjcmlwdGlvbk9yaWdpbik7Ci0KLSAgICB2b2lkIGVtaXQoQ0NhbGxIZWxw
ZXJzJiwgU3RhdGUmLCBpbnQzMl90IG9zckV4aXRGcm9tR2VuZXJpY1Vud2luZFNwaWxsU2xvdHMp
OwotICAgIAotICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQoKSBjb25zdCB7IHJldHVybiBtX3N0YWNr
bWFwSUQ7IH0KLSAgICAKLSAgICBib29sIG9wZXJhdG9yPChjb25zdCBKU0NhbGwmIG90aGVyKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW5zdHJ1Y3Rpb25PZmZzZXQgPCBvdGhlci5t
X2luc3RydWN0aW9uT2Zmc2V0OwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgdW5zaWduZWQg
bV9zdGFja21hcElEOwotCi1wdWJsaWM6Ci0gICAgdWludDMyX3QgbV9pbnN0cnVjdGlvbk9mZnNl
dDsKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKLQotI2VuZGlmIC8vIEVOQUJMRShG
VExfSklUKSAmJiAhRlRMX1VTRVNfQjMKLQotI2VuZGlmIC8vIEZUTEpTQ2FsbF9oCi0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmNwcAkocmV2aXNpb24g
MTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRlRM
SlNDYWxsQmFzZS5oIgotCi0jaWYgRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwotCi0j
aW5jbHVkZSAiREZHTm9kZS5oIgotI2luY2x1ZGUgIkZUTFN0YXRlLmgiCi0jaW5jbHVkZSAiTGlu
a0J1ZmZlci5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLXVzaW5nIG5h
bWVzcGFjZSBERkc7Ci0KLUpTQ2FsbEJhc2U6OkpTQ2FsbEJhc2UoKQotICAgIDogbV90eXBlKENh
bGxMaW5rSW5mbzo6Tm9uZSkKLSAgICAsIG1fY2FsbExpbmtJbmZvKG51bGxwdHIpCi0gICAgLCBt
X2NvcnJlc3BvbmRpbmdHZW5lcmljVW53aW5kT1NSRXhpdChudWxscHRyKQotewotfQotCi1KU0Nh
bGxCYXNlOjpKU0NhbGxCYXNlKENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgdHlwZSwgQ29kZU9yaWdp
biBzZW1hbnRpYywgQ29kZU9yaWdpbiBjYWxsU2l0ZURlc2NyaXB0aW9uKQotICAgIDogbV90eXBl
KHR5cGUpCi0gICAgLCBtX3NlbWFudGljZU9yaWdpbihzZW1hbnRpYykKLSAgICAsIG1fY2FsbFNp
dGVEZXNjcmlwdGlvbk9yaWdpbihjYWxsU2l0ZURlc2NyaXB0aW9uKQotICAgICwgbV9jYWxsTGlu
a0luZm8obnVsbHB0cikKLXsKLX0KLQotdm9pZCBKU0NhbGxCYXNlOjplbWl0KENDYWxsSGVscGVy
cyYgaml0LCBTdGF0ZSYgLypzdGF0ZSovLCBpbnQzMl90IG9zckV4aXRGcm9tR2VuZXJpY1Vud2lu
ZFN0YWNrU3BpbGxTbG90KQotewotICAgIFJFTEVBU0VfQVNTRVJUKCEhbV9jYWxsU2l0ZUluZGV4
KTsKLQotICAgIGlmIChtX2NvcnJlc3BvbmRpbmdHZW5lcmljVW53aW5kT1NSRXhpdCkKLSAgICAg
ICAgbV9jb3JyZXNwb25kaW5nR2VuZXJpY1Vud2luZE9TUkV4aXQtPnNwaWxsUmVnaXN0ZXJzVG9T
cGlsbFNsb3Qoaml0LCBvc3JFeGl0RnJvbUdlbmVyaWNVbndpbmRTdGFja1NwaWxsU2xvdCk7Ci0K
LSAgICBqaXQuc3RvcmUzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtX2NhbGxTaXRlSW5k
ZXguYml0cygpKSwgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lz
dGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwotCi0gICAgbV9jYWxsTGlua0luZm8gPSBq
aXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbygpOwotICAgIAotICAgIGlmIChDYWxsTGlu
a0luZm86OmNhbGxNb2RlRm9yKG1fdHlwZSkgPT0gQ2FsbE1vZGU6OlRhaWwpCi0gICAgICAgIGpp
dC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0KLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xv
d1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAotICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgbV90YXJnZXRUb0NoZWNrLAotICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoMCkpOwotCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7
Ci0KLSAgICBpZiAoQ2FsbExpbmtJbmZvOjpjYWxsTW9kZUZvcihtX3R5cGUpID09IENhbGxNb2Rl
OjpUYWlsKSB7Ci0gICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7Ci0gICAgICAg
IG1fZmFzdENhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
bV9mYXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwotICAgICAgICBkb25lID0gaml0Lmp1bXAoKTsK
LSAgICB9Ci0KLSAgICBzbG93UGF0aC5saW5rKCZqaXQpOwotCi0gICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwot
ICAgIG1fc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKLQotICAgIGlmIChDYWxsTGlua0luZm86
OmNhbGxNb2RlRm9yKG1fdHlwZSkgPT0gQ2FsbE1vZGU6OlRhaWwpCi0gICAgICAgIGppdC5hYm9y
dFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKLSAgICBlbHNlCi0gICAgICAg
IGRvbmUubGluaygmaml0KTsKLQotICAgIG1fY2FsbExpbmtJbmZvLT5zZXRVcENhbGwobV90eXBl
LCBtX3NlbWFudGljZU9yaWdpbiwgR1BSSW5mbzo6cmVnVDApOwotfQotCi12b2lkIEpTQ2FsbEJh
c2U6OmxpbmsoVk0mIHZtLCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQotewotICAgIGxpbmtCdWZm
ZXIubGluaygKLSAgICAgICAgbV9zbG93Q2FsbCwgRnVuY3Rpb25QdHIodm0uZ2V0Q1RJU3R1Yihs
aW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotCi0g
ICAgbV9jYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMobGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGwobV9zbG93Q2FsbCksCi0gICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Rh
cmdldFRvQ2hlY2spLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2Zhc3RDYWxsKSk7
Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKLQotI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKSAmJiAhRlRMX1VTRVNfQjMKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExKU0NhbGxCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExKU0NhbGxCYXNlLmgJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSlNDYWxsQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgxICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBGVExK
U0NhbGxCYXNlX2gKLSNkZWZpbmUgRlRMSlNDYWxsQmFzZV9oCi0KLSNpbmNsdWRlICJERkdDb21t
b24uaCIKLQotI2lmIEVOQUJMRShGVExfSklUKSAmJiAhRlRMX1VTRVNfQjMKLQotI2luY2x1ZGUg
IkNDYWxsSGVscGVycy5oIgotI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgotI2luY2x1ZGUgIkNv
ZGVPcmlnaW4uaCIKLSNpbmNsdWRlICJGVExPU1JFeGl0LmgiCi0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1jbGFzcyBMaW5rQnVmZmVyOwotCi1uYW1lc3BhY2UgREZHIHsKLXN0cnVjdCBOb2RlOwotfQot
Ci1uYW1lc3BhY2UgRlRMIHsKLQotY2xhc3MgU3RhdGU7Ci0KLWNsYXNzIEpTQ2FsbEJhc2Ugewot
cHVibGljOgotICAgIEpTQ2FsbEJhc2UoKTsKLSAgICBKU0NhbGxCYXNlKENhbGxMaW5rSW5mbzo6
Q2FsbFR5cGUsIENvZGVPcmlnaW4gc2VtYW50aWMsIENvZGVPcmlnaW4gY2FsbFNpdGVEZXNjcmlw
dGlvbik7Ci0gICAgCi0gICAgdm9pZCBlbWl0KENDYWxsSGVscGVycyYsIFN0YXRlJiwgaW50MzJf
dCBvc3JFeGl0RnJvbUdlbmVyaWNVbndpbmRTcGlsbFNsb3RzKTsKLSAgICB2b2lkIGxpbmsoVk0m
LCBMaW5rQnVmZmVyJik7Ci0KLSAgICB2b2lkIHNldENhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZUluZGV4KSB7IG1fY2FsbFNpdGVJbmRleCA9IGNhbGxTaXRlSW5kZXg7IH0KLSAg
ICBDb2RlT3JpZ2luIGNhbGxTaXRlRGVzY3JpcHRpb25PcmlnaW4oKSBjb25zdCB7IHJldHVybiBt
X2NhbGxTaXRlRGVzY3JpcHRpb25PcmlnaW47IH0KLQotICAgIHZvaWQgc2V0Q29ycmVzcG9uZGlu
Z0dlbmVyaWNVbndpbmRPU1JFeGl0KE9TUkV4aXQqIGV4aXQpIHsgbV9jb3JyZXNwb25kaW5nR2Vu
ZXJpY1Vud2luZE9TUkV4aXQgPSBleGl0OyB9Ci0gICAgCi1wcm90ZWN0ZWQ6Ci0gICAgQ2FsbExp
bmtJbmZvOjpDYWxsVHlwZSBtX3R5cGU7Ci0gICAgQ29kZU9yaWdpbiBtX3NlbWFudGljZU9yaWdp
bjsKLSAgICBDb2RlT3JpZ2luIG1fY2FsbFNpdGVEZXNjcmlwdGlvbk9yaWdpbjsgLy8gVGhlc2Ug
dHdvIGNvZGUgb3JpZ2lucyBtYXkgYmUgZGlmZmVyZW50IHdpdGggdGFpbCBjYWxscyB1bmRlciBz
b21lIGNpcmN1bXN0YW5jZXMgb2YgaW5saW5pbmcuIFNlZSByZWxldmFudCBjb21tZW50IGluIExv
d2VyREZHVG9MTFZNLgotICAgIENhbGxTaXRlSW5kZXggbV9jYWxsU2l0ZUluZGV4OwotICAgIEND
YWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIG1fdGFyZ2V0VG9DaGVjazsKLSAgICBDQ2FsbEhlbHBl
cnM6OkNhbGwgbV9mYXN0Q2FsbDsKLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgbV9zbG93Q2FsbDsK
LSAgICBDYWxsTGlua0luZm8qIG1fY2FsbExpbmtJbmZvOwotcHVibGljOgotICAgIE9TUkV4aXQq
IG1fY29ycmVzcG9uZGluZ0dlbmVyaWNVbndpbmRPU1JFeGl0OwotfTsKLQotfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19C
MwotCi0jZW5kaWYgLy8gRlRMSlNDYWxsQmFzZV9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdzLmNwcAkocmV2aXNpb24gMTk2Njg1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSwyMjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRlRMSlNDYWxsVmFy
YXJncy5oIgotCi0jaWYgRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwotCi0jaW5jbHVk
ZSAiREZHTm9kZS5oIgotI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJGVExT
dGF0ZS5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJMaW5rQnVmZmVyLmgi
Ci0jaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCi0jaW5jbHVkZSAiU2V0dXBW
YXJhcmdzRnJhbWUuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewotCi11c2lu
ZyBuYW1lc3BhY2UgREZHOwotCi1KU0NhbGxWYXJhcmdzOjpKU0NhbGxWYXJhcmdzKCkKLSAgICA6
IG1fc3RhY2ttYXBJRChVSU5UX01BWCkKLSAgICAsIG1fbm9kZShudWxscHRyKQotICAgICwgbV9p
bnN0cnVjdGlvbk9mZnNldChVSU5UX01BWCkKLXsKLX0KLQotSlNDYWxsVmFyYXJnczo6SlNDYWxs
VmFyYXJncyh1bnNpZ25lZCBzdGFja21hcElELCBOb2RlKiBub2RlLCBDb2RlT3JpZ2luIGNhbGxT
aXRlRGVzY3JpcHRpb25PcmlnaW4pCi0gICAgOiBtX3N0YWNrbWFwSUQoc3RhY2ttYXBJRCkKLSAg
ICAsIG1fbm9kZShub2RlKQotICAgICwgbV9jYWxsQmFzZSgKLSAgICAgICAgKG5vZGUtPm9wKCkg
PT0gQ29uc3RydWN0VmFyYXJncyB8fCBub2RlLT5vcCgpID09IENvbnN0cnVjdEZvcndhcmRWYXJh
cmdzKQotICAgICAgICA/IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0VmFyYXJncyA6IChub2RlLT5v
cCgpID09IFRhaWxDYWxsVmFyYXJncyB8fCBub2RlLT5vcCgpID09IFRhaWxDYWxsRm9yd2FyZFZh
cmFyZ3MpCi0gICAgICAgID8gQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbFZhcmFyZ3MgOiBDYWxsTGlu
a0luZm86OkNhbGxWYXJhcmdzLAotICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNhbGxT
aXRlRGVzY3JpcHRpb25PcmlnaW4pCi0gICAgLCBtX2luc3RydWN0aW9uT2Zmc2V0KDApCi17Ci0g
ICAgQVNTRVJUKAotICAgICAgICBub2RlLT5vcCgpID09IENhbGxWYXJhcmdzIHx8IG5vZGUtPm9w
KCkgPT0gQ2FsbEZvcndhcmRWYXJhcmdzCi0gICAgICAgIHx8IG5vZGUtPm9wKCkgPT0gVGFpbENh
bGxWYXJhcmdzSW5saW5lZENhbGxlciB8fCBub2RlLT5vcCgpID09IFRhaWxDYWxsRm9yd2FyZFZh
cmFyZ3NJbmxpbmVkQ2FsbGVyCi0gICAgICAgIHx8IG5vZGUtPm9wKCkgPT0gVGFpbENhbGxWYXJh
cmdzIHx8IG5vZGUtPm9wKCkgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncwotICAgICAgICB8fCBu
b2RlLT5vcCgpID09IENvbnN0cnVjdFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3RG
b3J3YXJkVmFyYXJncyk7Ci19Ci0KLXVuc2lnbmVkIEpTQ2FsbFZhcmFyZ3M6Om51bVNwaWxsU2xv
dHNOZWVkZWQoKQotewotICAgIHJldHVybiA0OwotfQotCi12b2lkIEpTQ2FsbFZhcmFyZ3M6OmVt
aXQoQ0NhbGxIZWxwZXJzJiBqaXQsIFN0YXRlJiBzdGF0ZSwgaW50MzJfdCBzcGlsbFNsb3RzT2Zm
c2V0LCBpbnQzMl90IG9zckV4aXRGcm9tR2VuZXJpY1Vud2luZFNwaWxsU2xvdHMpCi17Ci0gICAg
Ly8gV2UgYXJlIHBhc3NlZCB0aHJlZSBwaWVjZXMgb2YgaW5mb3JtYXRpb246Ci0gICAgLy8gLSBU
aGUgY2FsbGVlLgotICAgIC8vIC0gVGhlIGFyZ3VtZW50cyBvYmplY3QsIGlmIGl0J3Mgbm90IGEg
Zm9yd2FyZGluZyBjYWxsLgotICAgIC8vIC0gVGhlICJ0aGlzIiB2YWx1ZSwgaWYgaXQncyBhIGNv
bnN0cnVjdG9yIGNhbGwuCi0KLSAgICBDYWxsVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmNh
bGxWYXJhcmdzRGF0YSgpOwotICAgIAotICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBHUFJJbmZvOjph
cmd1bWVudEdQUjA7Ci0gICAgCi0gICAgR1BSUmVnIGFyZ3VtZW50c0dQUiA9IEludmFsaWRHUFJS
ZWc7Ci0gICAgR1BSUmVnIHRoaXNHUFIgPSBJbnZhbGlkR1BSUmVnOwotICAgIAotICAgIGJvb2wg
Zm9yd2FyZGluZyA9IGZhbHNlOwotICAgIAotICAgIHN3aXRjaCAobV9ub2RlLT5vcCgpKSB7Ci0g
ICAgY2FzZSBDYWxsVmFyYXJnczoKLSAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKLSAgICBjYXNl
IFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6Ci0gICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdz
OgotICAgICAgICBhcmd1bWVudHNHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7Ci0gICAgICAg
IHRoaXNHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ2FsbEZvcndhcmRWYXJhcmdzOgotICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoK
LSAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgotICAgIGNhc2Ug
Q29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgIHRoaXNHUFIgPSBHUFJJbmZvOjphcmd1
bWVudEdQUjE7Ci0gICAgICAgIGZvcndhcmRpbmcgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgY29uc3QgdW5zaWduZWQgY2FsbGVlU3BpbGxTbG90
ID0gMDsKLSAgICBjb25zdCB1bnNpZ25lZCBhcmd1bWVudHNTcGlsbFNsb3QgPSAxOwotICAgIGNv
bnN0IHVuc2lnbmVkIHRoaXNTcGlsbFNsb3QgPSAyOwotICAgIGNvbnN0IHVuc2lnbmVkIHN0YWNr
UG9pbnRlclNwaWxsU2xvdCA9IDM7Ci0gICAgCi0gICAgLy8gR2V0IHNvbWUgc2NyYXRjaCByZWdp
c3RlcnMuCi0gICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKLSAgICB1c2VkUmVnaXN0ZXJz
Lm1lcmdlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKLSAgICB1c2VkUmVnaXN0ZXJz
Lm1lcmdlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkpOwotICAgIHVz
ZWRSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0g
ICAgdXNlZFJlZ2lzdGVycy5zZXQoY2FsbGVlR1BSKTsKLSAgICBpZiAoYXJndW1lbnRzR1BSICE9
IEludmFsaWRHUFJSZWcpCi0gICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KGFyZ3VtZW50c0dQUik7
Ci0gICAgQVNTRVJUKHRoaXNHUFIpOwotICAgIHVzZWRSZWdpc3RlcnMuc2V0KHRoaXNHUFIpOwot
ICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwot
ICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsK
LSAgICBHUFJSZWcgc2NyYXRjaEdQUjMgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7
Ci0KLSAgICBSRUxFQVNFX0FTU0VSVCghYWxsb2NhdG9yLm51bWJlck9mUmV1c2VkUmVnaXN0ZXJz
KCkpOwotICAgIAotICAgIGF1dG8gY29tcHV0ZVVzZWRTdGFjayA9IFsmXSAoR1BSUmVnIHRhcmdl
dEdQUiwgdW5zaWduZWQgZXh0cmEpIHsKLSAgICAgICAgaWYgKGlzQVJNNjQoKSkgewotICAgICAg
ICAgICAgLy8gSGF2ZSB0byBkbyB0aGlzIHRoZSB3ZWlyZCB3YXkgYmVjYXVzZSAkc3Agb24gQVJN
NjQgbWVhbnMgemVybyB3aGVuIHVzZWQgaW4gYSBzdWJ0cmFjdGlvbi4KLSAgICAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHRhcmdldEdQUik7Ci0g
ICAgICAgICAgICBqaXQubmVnUHRyKHRhcmdldEdQUik7Ci0gICAgICAgICAgICBqaXQuYWRkUHRy
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCB0YXJnZXRHUFIpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHRhcmdl
dEdQUik7Ci0gICAgICAgICAgICBqaXQuc3ViUHRyKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIsIHRhcmdldEdQUik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4dHJhKQotICAg
ICAgICAgICAgaml0LnN1YlB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihleHRyYSksIHRh
cmdldEdQUik7Ci0gICAgICAgIGppdC51cnNoaWZ0UHRyKENDYWxsSGVscGVyczo6SW1tMzIoMyks
IHRhcmdldEdQUik7Ci0gICAgfTsKLSAgICAKLSAgICBhdXRvIGNhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2sgPSBbJl0gKHZvaWQqIGNhbGxlZSkgewotICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoY2FsbGVlKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRH
UFIpOwotICAgICAgICBqaXQuY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQ
Uik7Ci0gICAgICAgIG1fZXhjZXB0aW9ucy5hcHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjayhB
c3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBBc3NlbWJseUhlbHBlcnM6OkZh
ckp1bXBXaWR0aCkpOwotICAgIH07Ci0gICAgCi0gICAgaWYgKGlzQVJNNjQoKSkgewotICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzY3JhdGNoR1BS
MSk7Ci0gICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgQ0NhbGxIZWxwZXJzOjphZGRy
ZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBzdGFja1BvaW50ZXJTcGlsbFNsb3QpKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIsIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0ICsgc3RhY2tQ
b2ludGVyU3BpbGxTbG90KSk7Ci0KLSAgICB1bnNpZ25lZCBleHRyYVN0YWNrID0gc2l6ZW9mKENh
bGxlckZyYW1lQW5kUEMpICsKLSAgICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNr
QWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lkKikpOwotCi0gICAgaWYgKGZvcndhcmRp
bmcpIHsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93Q2FzZTsKLSAgICAgICAg
Y29tcHV0ZVVzZWRTdGFjayhzY3JhdGNoR1BSMiwgMCk7Ci0gICAgICAgIGVtaXRTZXR1cFZhcmFy
Z3NGcmFtZUZhc3RDYXNlKGppdCwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BS
Miwgc2NyYXRjaEdQUjMsIG1fbm9kZS0+Y2hpbGQyKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVD
YWxsRnJhbWUsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7Ci0gICAgICAgIAot
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZSA9IGppdC5qdW1wKCk7Ci0gICAgICAgIHNs
b3dDYXNlLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoZXh0cmFTdGFjayksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwotICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKLSAgICAgICAgY2FsbFdp
dGhFeGNlcHRpb25DaGVjayhiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvblRocm93U3RhY2tP
dmVyZmxvd0ZvclZhcmFyZ3MpKTsKLSAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihERkdWYXJh
cmdzVGhyb3dpbmdQYXRoRGlkTm90VGhyb3cpOwotICAgICAgICAKLSAgICAgICAgZG9uZS5saW5r
KCZqaXQpOwotICAgICAgICBqaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICAvLyBHb3R0YSBzcGlsbCB0aGUgY2FsbGVlLCBhcmd1bWVudHMs
IGFuZCB0aGlzIGJlY2F1c2Ugd2Ugd2lsbCBuZWVkIHRoZW0gbGF0ZXIgYW5kIHdlIHdpbGwgaGF2
ZSBzb21lCi0gICAgICAgIC8vIGNhbGxzIHRoYXQgY2xvYmJlciB0aGVtLgotICAgICAgICBqaXQu
c3RvcmU2NChjYWxsZWVHUFIsIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zm
c2V0ICsgY2FsbGVlU3BpbGxTbG90KSk7Ci0gICAgICAgIGppdC5zdG9yZTY0KGFyZ3VtZW50c0dQ
UiwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBhcmd1bWVudHNT
cGlsbFNsb3QpKTsKLSAgICAgICAgaml0LnN0b3JlNjQodGhpc0dQUiwgQ0NhbGxIZWxwZXJzOjph
ZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyB0aGlzU3BpbGxTbG90KSk7Ci0gICAgCi0gICAg
ICAgIGNvbXB1dGVVc2VkU3RhY2soc2NyYXRjaEdQUjEsIDApOwotICAgICAgICBqaXQuc3ViUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGV4dHJhU3RhY2spLCBDQ2FsbEhlbHBlcnM6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmd1bWVudHNHUFIsIHNjcmF0Y2hHUFIxLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihkYXRhLT5maXJzdFZhckFyZ09mZnNldCkpOwotICAgICAgICBjYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJncykpOwot
ICAgIAotICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgc2NyYXRjaEdQ
UjEpOwotICAgICAgICBjb21wdXRlVXNlZFN0YWNrKHNjcmF0Y2hHUFIyLCBleHRyYVN0YWNrKTsK
LSAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09m
ZnNldCArIGFyZ3VtZW50c1NwaWxsU2xvdCksIGFyZ3VtZW50c0dQUik7Ci0gICAgICAgIGVtaXRT
ZXRWYXJhcmdzRnJhbWUoaml0LCBzY3JhdGNoR1BSMSwgZmFsc2UsIHNjcmF0Y2hHUFIyLCBzY3Jh
dGNoR1BSMik7Ci0gICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
LWV4dHJhU3RhY2spLCBzY3JhdGNoR1BSMiwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7Ci0gICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoc2NyYXRjaEdQ
UjIsIGFyZ3VtZW50c0dQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZGF0YS0+Zmlyc3RW
YXJBcmdPZmZzZXQpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIGNhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soYml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZSkpOwotICAg
IAotICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgc2NyYXRjaEdQUjIp
OwotCi0gICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xv
dHNPZmZzZXQgKyB0aGlzU3BpbGxTbG90KSwgdGhpc0dQUik7Ci0gICAgICAgIGppdC5sb2FkNjQo
Q0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBjYWxsZWVTcGlsbFNs
b3QpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgfQotICAgIAotICAgIGppdC5hZGRQdHIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgc2NyYXRjaEdQ
UjIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotCi0gICAgaml0LnN0b3Jl
NjQodGhpc0dQUiwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVBcmd1bWVudFNsb3QoMCkpOwotICAgIAot
ICAgIC8vIEhlbmNlZm9ydGggd2UgbWFrZSB0aGUgY2FsbC4gVGhlIGJhc2UgRlRMIGNhbGwgbWFj
aGluZXJ5IGV4cGVjdHMgdGhlIGNhbGxlZSBpbiByZWdUMCBhbmQgZm9yIHRoZQotICAgIC8vIHN0
YWNrIGZyYW1lIHRvIGFscmVhZHkgYmUgc2V0IHVwLCB3aGljaCBpdCBpcy4KLSAgICBqaXQuc3Rv
cmU2NChHUFJJbmZvOjpyZWdUMCwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QoSlNTdGFj
azo6Q2FsbGVlKSk7Ci0KLSAgICBtX2NhbGxCYXNlLmVtaXQoaml0LCBzdGF0ZSwgb3NyRXhpdEZy
b21HZW5lcmljVW53aW5kU3BpbGxTbG90cyk7Ci0KLSAgICAKLSAgICAvLyBVbmRvIHRoZSBkYW1h
Z2Ugd2UndmUgZG9uZS4KLSAgICBpZiAoaXNBUk02NCgpKSB7Ci0gICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSQXRSZXR1cm4gPSBDQ2FsbEhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OmFkZHJl
c3NGb3Ioc3BpbGxTbG90c09mZnNldCArIHN0YWNrUG9pbnRlclNwaWxsU2xvdCksIHNjcmF0Y2hH
UFJBdFJldHVybik7Ci0gICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFJBdFJldHVybiwgQ0NhbGxI
ZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgfSBlbHNlCi0gICAgICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0ICsgc3RhY2tQ
b2ludGVyU3BpbGxTbG90KSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci19
Ci0KLXZvaWQgSlNDYWxsVmFyYXJnczo6bGluayhWTSYgdm0sIExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIsIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvbkhhbmRsZXIpCi17Ci0gICAgbV9jYWxsQmFz
ZS5saW5rKHZtLCBsaW5rQnVmZmVyKTsKLSAgICBsaW5rQnVmZmVyLmxpbmsobV9leGNlcHRpb25z
LCBleGNlcHRpb25IYW5kbGVyKTsKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAotCi0j
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwotCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaAkocmV2aXNpb24gMTk2Njg1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEZUTEpTQ2FsbFZhcmFyZ3NfaAotI2RlZmluZSBGVExK
U0NhbGxWYXJhcmdzX2gKLQotI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgotCi0jaWYgRU5BQkxFKEZU
TF9KSVQpICYmICFGVExfVVNFU19CMwotCi0jaW5jbHVkZSAiRlRMSlNDYWxsQmFzZS5oIgotCi1u
YW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgTGlua0J1ZmZlcjsKLQotbmFtZXNwYWNlIERGRyB7Ci1z
dHJ1Y3QgTm9kZTsKLX0KLQotbmFtZXNwYWNlIEZUTCB7Ci0KLWNsYXNzIEpTQ2FsbFZhcmFyZ3Mg
ewotcHVibGljOgotICAgIEpTQ2FsbFZhcmFyZ3MoKTsKLSAgICBKU0NhbGxWYXJhcmdzKHVuc2ln
bmVkIHN0YWNrbWFwSUQsIERGRzo6Tm9kZSosIENvZGVPcmlnaW4gY2FsbFNpdGVEZXNjcmlwdGlv
bk9yaWdpbik7Ci0gICAgCi0gICAgREZHOjpOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gbV9u
b2RlOyB9Ci0gICAgCi0gICAgc3RhdGljIHVuc2lnbmVkIG51bVNwaWxsU2xvdHNOZWVkZWQoKTsK
LSAgICAKLSAgICB2b2lkIGVtaXQoQ0NhbGxIZWxwZXJzJiwgU3RhdGUmLCBpbnQzMl90IHNwaWxs
U2xvdHNPZmZzZXQsIGludDMyX3Qgb3NyRXhpdEZyb21HZW5lcmljVW53aW5kU3BpbGxTbG90cyk7
Ci0gICAgdm9pZCBsaW5rKFZNJiwgTGlua0J1ZmZlciYsIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2Vw
dGlvbkhhbmRsZXIpOwotICAgIAotICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQoKSBjb25zdCB7IHJl
dHVybiBtX3N0YWNrbWFwSUQ7IH0KLSAgICAKLSAgICBib29sIG9wZXJhdG9yPChjb25zdCBKU0Nh
bGxWYXJhcmdzJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2luc3RydWN0
aW9uT2Zmc2V0IDwgb3RoZXIubV9pbnN0cnVjdGlvbk9mZnNldDsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCBzZXRDYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCkgeyBtX2Nh
bGxCYXNlLnNldENhbGxTaXRlSW5kZXgoY2FsbFNpdGVJbmRleCk7IH0KLSAgICBDb2RlT3JpZ2lu
IGNhbGxTaXRlRGVzY3JpcHRpb25PcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX2NhbGxCYXNlLmNh
bGxTaXRlRGVzY3JpcHRpb25PcmlnaW4oKTsgfQotICAgIHZvaWQgc2V0Q29ycmVzcG9uZGluZ0dl
bmVyaWNVbndpbmRPU1JFeGl0KE9TUkV4aXQqIGV4aXQpIHsgbV9jYWxsQmFzZS5zZXRDb3JyZXNw
b25kaW5nR2VuZXJpY1Vud2luZE9TUkV4aXQoZXhpdCk7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAg
dW5zaWduZWQgbV9zdGFja21hcElEOwotICAgIERGRzo6Tm9kZSogbV9ub2RlOwotICAgIEpTQ2Fs
bEJhc2UgbV9jYWxsQmFzZTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IG1fZXhjZXB0aW9u
czsKLQotcHVibGljOgotICAgIHVpbnQzMl90IG1faW5zdHJ1Y3Rpb25PZmZzZXQ7Ci19OwotCi19
IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCi0KLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkgJiYg
IUZUTF9VU0VTX0IzCi0KLSNlbmRpZiAvLyBGVExKU0NhbGxWYXJhcmdzX2gKLQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU1RhaWxDYWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTVGFpbENhbGwuY3BwCShyZXZpc2lvbiAxOTY2
ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTVGFpbENhbGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZU
TEpTVGFpbENhbGwuaCIKLQotI2lmIEVOQUJMRShGVExfSklUKSAmJiAhRlRMX1VTRVNfQjMKLQot
I2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCi0jaW5jbHVkZSAiREZHTm9kZS5oIgotI2lu
Y2x1ZGUgIkZUTEpJVENvZGUuaCIKLSNpbmNsdWRlICJGVExMb2NhdGlvbi5oIgotI2luY2x1ZGUg
IkZUTFN0YWNrTWFwcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLXVz
aW5nIG5hbWVzcGFjZSBERkc7Ci0KLW5hbWVzcGFjZSB7Ci0KLUZUTDo6TG9jYXRpb24gZ2V0UmVn
aXN0ZXJXaXRoQWRkZW5kKGNvbnN0IEV4aXRWYWx1ZSYgdmFsdWUsIFN0YWNrTWFwczo6UmVjb3Jk
JiByZWNvcmQsIFN0YWNrTWFwcyYgc3RhY2ttYXBzKQotewotICAgIGlmICh2YWx1ZS5raW5kKCkg
IT0gRXhpdFZhbHVlQXJndW1lbnQpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBhdXRvIGxv
Y2F0aW9uID0KLSAgICAgICAgRlRMOjpMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKCZzdGFja21hcHMs
IHJlY29yZC5sb2NhdGlvbnNbdmFsdWUuZXhpdEFyZ3VtZW50KCkuYXJndW1lbnQoKV0pOwotCi0g
ICAgaWYgKGxvY2F0aW9uLmtpbmQoKSAhPSBMb2NhdGlvbjo6UmVnaXN0ZXIgfHwgIWxvY2F0aW9u
LmFkZGVuZCgpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgUkVMRUFTRV9BU1NFUlQobG9j
YXRpb24uaXNHUFIoKSk7Ci0gICAgcmV0dXJuIGxvY2F0aW9uOwotfQotCi1WYWx1ZVJlY292ZXJ5
IHJlY292ZXJ5Rm9yKGNvbnN0IEV4aXRWYWx1ZSYgdmFsdWUsIFN0YWNrTWFwczo6UmVjb3JkJiBy
ZWNvcmQsIFN0YWNrTWFwcyYgc3RhY2ttYXBzKQotewotICAgIHN3aXRjaCAodmFsdWUua2luZCgp
KSB7Ci0gICAgY2FzZSBFeGl0VmFsdWVDb25zdGFudDoKLSAgICAgICAgcmV0dXJuIFZhbHVlUmVj
b3Zlcnk6OmNvbnN0YW50KHZhbHVlLmNvbnN0YW50KCkpOwotCi0gICAgY2FzZSBFeGl0VmFsdWVB
cmd1bWVudDogewotICAgICAgICBhdXRvIGxvY2F0aW9uID0KLSAgICAgICAgICAgIEZUTDo6TG9j
YXRpb246OmZvclN0YWNrbWFwcygmc3RhY2ttYXBzLCByZWNvcmQubG9jYXRpb25zW3ZhbHVlLmV4
aXRBcmd1bWVudCgpLmFyZ3VtZW50KCldKTsKLSAgICAgICAgYXV0byBmb3JtYXQgPSB2YWx1ZS5l
eGl0QXJndW1lbnQoKS5mb3JtYXQoKTsKLQotICAgICAgICBzd2l0Y2ggKGxvY2F0aW9uLmtpbmQo
KSkgewotICAgICAgICBjYXNlIExvY2F0aW9uOjpSZWdpc3RlcjoKLSAgICAgICAgICAgIC8vIFdl
IGhhbmRsZSB0aGUgYWRkZW5kIG91dHNpZGUKLSAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292
ZXJ5OjppblJlZ2lzdGVyKGxvY2F0aW9uLnJlZygpLCBmb3JtYXQpOwotCi0gICAgICAgIGNhc2Ug
TG9jYXRpb246OkluZGlyZWN0OgotICAgICAgICAgICAgLy8gT2ggTExWTSwgeW91IGNyYXp5Li4u
Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChsb2NhdGlvbi5yZWcoKSA9PSBSZWcoTWFjcm9B
c3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCghKGxvY2F0aW9uLm9mZnNldCgpICUgc2l6ZW9mKHZvaWQqKSkpOwotICAgICAgICAgICAg
Ly8gRGF0YUZvcm1hdEludDMyIGFuZCBEYXRhRm9ybWF0Qm9vbGVhbiBzaG91bGQgYmUgYWxyZWFk
eSBiZSBib3hlZC4KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZvcm1hdCAhPSBEYXRhRm9y
bWF0SW50MzIgJiYgZm9ybWF0ICE9IERhdGFGb3JtYXRCb29sZWFuKTsKLSAgICAgICAgICAgIHJl
dHVybiBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soVmlydHVhbFJlZ2lzdGVyIHsg
c3RhdGljX2Nhc3Q8aW50Pihsb2NhdGlvbi5vZmZzZXQoKSAvIHNpemVvZih2b2lkKikpIH0sIGZv
cm1hdCk7Ci0KLSAgICAgICAgY2FzZSBMb2NhdGlvbjo6Q29uc3RhbnQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoSlNWYWx1ZTo6ZGVjb2RlKGxvY2F0aW9uLmNv
bnN0YW50KCkpKTsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNhc2UgRXhpdFZhbHVl
SW5KU1N0YWNrOgotICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0
YWNrKHZhbHVlLnZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0SlMpOwotCi0gICAgY2FzZSBF
eGl0VmFsdWVJbkpTU3RhY2tBc0ludDMyOgotICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6
ZGlzcGxhY2VkSW5KU1N0YWNrKHZhbHVlLnZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0SW50
MzIpOwotCi0gICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDUyOgotICAgICAgICByZXR1
cm4gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKHZhbHVlLnZpcnR1YWxSZWdpc3Rl
cigpLCBEYXRhRm9ybWF0SW50NTIpOwotCi0gICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0Rv
dWJsZToKLSAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayh2
YWx1ZS52aXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERvdWJsZSk7Ci0KLSAgICBkZWZhdWx0
OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotLy8g
VGhpcyBjb21wdXRlcyBhbiBlc3RpbWF0ZWQgc2l6ZSAoaW4gYml0cykgZm9yIHRoZSBzZXF1ZW5j
ZSBvZgotLy8gaW5zdHJ1Y3Rpb25zIHJlcXVpcmVkIHRvIGxvYWQsIGJveCwgYW5kIHN0b3JlIGEg
dmFsdWUgb2YgYSBnaXZlbgotLy8gdHlwZSwgYXNzdW1pbmcgbm8gc3BpbGxpbmcgaXMgcmVxdWly
ZWQuCi11aW50MzJfdCBzaXplRm9yKERhdGFGb3JtYXQgZm9ybWF0KQotewotICAgIHN3aXRjaCAo
Zm9ybWF0KSB7Ci0gICAgY2FzZSBEYXRhRm9ybWF0SW50MzI6Ci0gICAgICAgIC8vIEJveGluZyBp
cyB6ZXJvLWV4dGVuZGluZyBhbmQgdGFnZ2luZwotI2lmIENQVShYODZfNjQpCi0gICAgICAgIHJl
dHVybiA2ICsgc2l6ZUZvcihEYXRhRm9ybWF0SlMpOwotI2VsaWYgQ1BVKEFSTTY0KQotICAgICAg
ICByZXR1cm4gOCArIHNpemVGb3IoRGF0YUZvcm1hdEpTKTsKLSNlbHNlCi0gICAgICAgIHJldHVy
biBzaXplT2ZaZXJvRXh0ZW5kMzIgKyBzaXplT2ZPckltbTY0ICsgc2l6ZUZvcihEYXRhRm9ybWF0
SlMpOwotI2VuZGlmCi0KLSAgICBjYXNlIERhdGFGb3JtYXRJbnQ1MjoKLSAgICAgICAgLy8gQm94
aW5nIGlzIGZpcnN0IGEgY29udmVyc2lvbiB0byBTdHJpY3RJbnQ1MiwgdGhlbgotICAgICAgICAv
LyBTdHJpY3RJbnQ1MiBib3hpbmcKLSNpZiBDUFUoWDg2XzY0KQotICAgICAgICByZXR1cm4gNCAr
IHNpemVGb3IoRGF0YUZvcm1hdFN0cmljdEludDUyKTsKLSNlbGlmIENQVShBUk02NCkKLSAgICAg
ICAgcmV0dXJuIDQgKyBzaXplRm9yKERhdGFGb3JtYXRTdHJpY3RJbnQ1Mik7Ci0jZWxzZQotICAg
ICAgICByZXR1cm4gc2l6ZU9mU2hpZnRJbW0zMiArIHNpemVGb3IoRGF0YUZvcm1hdFN0cmljdElu
dDUyKTsKLSNlbmRpZgotCi0gICAgY2FzZSBEYXRhRm9ybWF0U3RyaWN0SW50NTI6Ci0gICAgICAg
IC8vIEJveGluZyBpcyBmaXJzdCBhIGNvbnZlcnNpb24gdG8gZG91YmxlLCB0aGVuIGRvdWJsZSBi
b3hpbmcKLSNpZiBDUFUoWDg2XzY0KQotICAgICAgICByZXR1cm4gOCArIHNpemVGb3IoRGF0YUZv
cm1hdERvdWJsZSk7Ci0jZWxpZiBDUFUoQVJNNjQpCi0gICAgICAgIHJldHVybiA0ICsgc2l6ZUZv
cihEYXRhRm9ybWF0RG91YmxlKTsKLSNlbHNlCi0gICAgICAgIHJldHVybiBzaXplT2ZDb252ZXJ0
SW50NjRUb0RvdWJsZSArIHNpemVGb3IoRGF0YUZvcm1hdERvdWJsZSk7Ci0jZW5kaWYKLQotICAg
IGNhc2UgRGF0YUZvcm1hdERvdWJsZToKLSAgICAgICAgLy8gQm94aW5nIGlzIHB1cmlmeWluZywg
bW92aW5nIHRvIGEgR1BSLCBhbmQgdGFnZ2luZwotI2lmIENQVShYODZfNjQpCi0gICAgICAgIHJl
dHVybiAzOCArIHNpemVGb3IoRGF0YUZvcm1hdEpTKTsKLSNlbGlmIENQVShBUk02NCkKLSAgICAg
ICAgcmV0dXJuIDI4ICsgc2l6ZUZvcihEYXRhRm9ybWF0SlMpOwotI2Vsc2UKLSAgICAgICAgcmV0
dXJuIHNpemVPZlB1cmlmeU5hTiArIHNpemVPZlN1YkltbTY0ICsgc2l6ZU9mTW92ZURvdWJsZVRv
NjQgKyBzaXplRm9yKERhdGFGb3JtYXRKUyk7Ci0jZW5kaWYKLQotICAgIGNhc2UgRGF0YUZvcm1h
dEJvb2xlYW46Ci0gICAgICAgIC8vIEJveGluZyBpcyBhZGRpbmcgVmFsdWVGYWxzZQotI2lmIENQ
VShYODZfNjQpCi0gICAgICAgIHJldHVybiA0ICsgc2l6ZUZvcihEYXRhRm9ybWF0SlMpOwotI2Vs
aWYgQ1BVKEFSTTY0KQotICAgICAgICByZXR1cm4gNCArIHNpemVGb3IoRGF0YUZvcm1hdEpTKTsK
LSNlbHNlCi0gICAgICAgIHJldHVybiBzaXplT2ZBZGRJbW0zMiArIHNpemVGb3IoRGF0YUZvcm1h
dEpTKTsKLSNlbmRpZgotCi0gICAgY2FzZSBEYXRhRm9ybWF0SlM6Ci0gICAgICAgIC8vIFdlIHdp
bGwgbG9hZCAoaW4gYSBHUFIgb3IgRlBSKSB0aGVuIHN0b3JlIHRoZSB2YWx1ZQotI2lmIENQVShY
ODZfNjQpCi0gICAgICAgIHJldHVybiA4OwotI2VsaWYgQ1BVKEFSTTY0KQotICAgICAgICByZXR1
cm4gODsKLSNlbHNlCi0gICAgICAgIHJldHVybiBzaXplT2ZMb2FkICsgc2l6ZU9mU3RvcmU7Ci0j
ZW5kaWYKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgfQotfQotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotSlNUYWlsQ2FsbDo6
SlNUYWlsQ2FsbCh1bnNpZ25lZCBzdGFja21hcElELCBOb2RlKiBub2RlLCBjb25zdCBWZWN0b3I8
RXhpdFZhbHVlPiYgYXJndW1lbnRzKQotICAgIDogSlNDYWxsQmFzZShDYWxsTGlua0luZm86OlRh
aWxDYWxsLCBub2RlLT5vcmlnaW4uc2VtYW50aWMsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYykKLSAg
ICAsIG1fc3RhY2ttYXBJRChzdGFja21hcElEKQotICAgICwgbV9hcmd1bWVudHMoYXJndW1lbnRz
KQotICAgICwgbV9pbnN0cnVjdGlvbk9mZnNldCgwKQotewotICAgIEFTU0VSVChub2RlLT5vcCgp
ID09IFRhaWxDYWxsKTsKLSAgICBBU1NFUlQobnVtQXJndW1lbnRzKCkgPT0gbm9kZS0+bnVtQ2hp
bGRyZW4oKSAtIDEpOwotCi0gICAgLy8gRXN0aW1hdGUgdGhlIHNpemUgb2YgdGhlIGlubGluZSBj
YWNoZSwgYXNzdW1pbmcgdGhhdCBldmVyeQotICAgIC8vIHZhbHVlIGdvZXMgZnJvbSB0aGUgc3Rh
Y2sgdG8gdGhlIHN0YWNrIChpbiBwcmFjdGljZSwgdGhpcyB3aWxsCi0gICAgLy8gc2VsZG9tIGJl
IHRydWUsIGdpdmluZyB1cyBzb21lIGFtb3VudCBvZiBsZWV3YXkpIGFuZCB0aGF0IG5vCi0gICAg
Ly8gc3BpbGxpbmcgd2lsbCBvY2N1ciAoaW4gcHJhY3RpY2UsIHRoaXMgd2lsbCBhbG1vc3QgYWx3
YXlzIGJlCi0gICAgLy8gdHJ1ZSkuCi0KLSAgICAvLyBXZSBmaXJzdCBjb21wdXRlIHRoZSBuZXcg
ZnJhbWUgYmFzZSBhbmQgbG9hZCB0aGUgZnAvbHIKLSAgICAvLyByZWdpc3RlcnMgZmluYWwgdmFs
dWVzLiBPbiBkZWJ1ZyBidWlsZHMsIHdlIGFsc28gbmVlZCB0bwotICAgIC8vIGFjY291bnQgZm9y
IHRoZSBmcC1zcCBkZWx0YSBjaGVjayAodHdpY2U6IGZhc3QgYW5kIHNsb3cgcGF0aCkuCi0jaWYg
Q1BVKFg4Nl82NCkKLSAgICBtX2VzdGltYXRlZFNpemUgPSA1NjsKLSNpZiAhQVNTRVJUX0RJU0FC
TEVECi0gICAgbV9lc3RpbWF0ZWRTaXplICs9IDI2OwotIyAgZW5kaWYKLSNlbGlmIENQVShBUk02
NCkKLSAgICBtX2VzdGltYXRlZFNpemUgPSA0NDsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAg
bV9lc3RpbWF0ZWRTaXplICs9IDI0OwotIyAgZW5kaWYKLSNlbHNlCi0gICAgVU5SRUFDSEFCTEVf
Rk9SX1BMQVRGT1JNKCk7Ci0jZW5kaWYKLQotICAgIC8vIEFyZ3VtZW50cyB3aWxsIHByb2JhYmx5
IGJlIGxvYWRlZCAmIHN0b3JlZCB0d2ljZSAoZmFzdCAmIHNsb3cpCi0gICAgZm9yIChFeGl0VmFs
dWUmIGFyZyA6IG1fYXJndW1lbnRzKQotICAgICAgICBtX2VzdGltYXRlZFNpemUgKz0gMiAqIHNp
emVGb3IoYXJnLmRhdGFGb3JtYXQoKSk7Ci0KLSAgICAvLyBXZSBhbHNvIGhhdmUgdGhlIHNsb3cg
cGF0aCBjaGVjaywgdGhlIHR3byBjYWxscywgYW5kIHRoZQotICAgIC8vIENhbGxMaW5rSW5mbyBs
b2FkIGZvciB0aGUgc2xvdyBwYXRoCi0jaWYgQ1BVKFg4Nl82NCkKLSAgICBtX2VzdGltYXRlZFNp
emUgKz0gNTU7Ci0jZWxpZiBDUFUoQVJNNjQpCi0gICAgbV9lc3RpbWF0ZWRTaXplICs9IDQ0Owot
I2Vsc2UKLSAgICBtX2VzdGltYXRlZFNpemUgKz0gc2l6ZU9mQ2FsbCArIHNpemVPZkp1bXAgKyBz
aXplT2ZMb2FkICsgc2l6ZU9mU2xvd1BhdGhDaGVjazsKLSNlbmRpZgotfQotCi12b2lkIEpTVGFp
bENhbGw6OmVtaXQoSklUQ29kZSYgaml0Q29kZSwgQ0NhbGxIZWxwZXJzJiBqaXQpCi17Ci0gICAg
U3RhY2tNYXBzOjpSZWNvcmQqIHJlY29yZCB7IG51bGxwdHIgfTsKLSAgICAKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSBqaXRDb2RlLnN0YWNrbWFwcy5yZWNvcmRzLnNpemUoKTsgaS0tOykgewotICAg
ICAgICByZWNvcmQgPSAmaml0Q29kZS5zdGFja21hcHMucmVjb3Jkc1tpXTsKLSAgICAgICAgaWYg
KHJlY29yZC0+cGF0Y2hwb2ludElEID09IG1fc3RhY2ttYXBJRCkKLSAgICAgICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIFJFTEVBU0VfQVNTRVJUKHJlY29yZC0+cGF0Y2hwb2ludElEID09IG1f
c3RhY2ttYXBJRCk7Ci0KLSAgICBtX2NhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRk
Q2FsbExpbmtJbmZvKCk7Ci0KLSAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsK
LQotICAgIC8vIFRoZSBjYWxsZWUgd2FzIHRoZSBmaXJzdCBwYXNzZWQgYXJndW1lbnQsIGFuZCBt
dXN0IGJlIGluIGEgR1BSIGJlY2F1c2UKLSAgICAvLyB3ZSB1c2VkIHRoZSAiYW55cmVnY2MiIGNh
bGxpbmcgY29udmVudGlvbgotICAgIGF1dG8gY2FsbGVlTG9jYXRpb24gPQotICAgICAgICBGVEw6
OkxvY2F0aW9uOjpmb3JTdGFja21hcHMobnVsbHB0ciwgcmVjb3JkLT5sb2NhdGlvbnNbMF0pOwot
ICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBjYWxsZWVMb2NhdGlvbi5kaXJlY3RHUFIoKTsKLSAgICBz
aHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVHUFIsIERhdGFG
b3JtYXRKUyk7Ci0KLSAgICAvLyBUaGUgdGFnIHR5cGUgbnVtYmVyIHdhcyB0aGUgc2Vjb25kIGFy
Z3VtZW50LCBpZiB0aGVyZSB3YXMgb25lCi0gICAgYXV0byB0YWdUeXBlTnVtYmVyTG9jYXRpb24g
PQotICAgICAgICBGVEw6OkxvY2F0aW9uOjpmb3JTdGFja21hcHMoJmppdENvZGUuc3RhY2ttYXBz
LCByZWNvcmQtPmxvY2F0aW9uc1sxXSk7Ci0gICAgaWYgKHRhZ1R5cGVOdW1iZXJMb2NhdGlvbi5p
c0dQUigpICYmICF0YWdUeXBlTnVtYmVyTG9jYXRpb24uYWRkZW5kKCkpCi0gICAgICAgIHNodWZm
bGVEYXRhLnRhZ1R5cGVOdW1iZXIgPSB0YWdUeXBlTnVtYmVyTG9jYXRpb24uZGlyZWN0R1BSKCk7
Ci0KLSAgICBzaHVmZmxlRGF0YS5hcmdzLmdyb3cobnVtQXJndW1lbnRzKCkpOwotICAgIEhhc2hN
YXA8UmVnLCBWZWN0b3I8c3RkOjpwYWlyPFZhbHVlUmVjb3ZlcnkqLCBpbnQzMl90Pj4+IHdpdGhB
ZGRlbmQ7Ci0gICAgc2l6ZV90IG51bUFkZGVuZHMgeyAwIH07Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBudW1Bcmd1bWVudHMoKTsgKytpKSB7Ci0gICAgICAgIHNodWZmbGVEYXRhLmFyZ3Nb
aV0gPSByZWNvdmVyeUZvcihtX2FyZ3VtZW50c1tpXSwgKnJlY29yZCwgaml0Q29kZS5zdGFja21h
cHMpOwotICAgICAgICBpZiAoRlRMOjpMb2NhdGlvbiBhZGRlbmQgPSBnZXRSZWdpc3RlcldpdGhB
ZGRlbmQobV9hcmd1bWVudHNbaV0sICpyZWNvcmQsIGppdENvZGUuc3RhY2ttYXBzKSkgewotICAg
ICAgICAgICAgd2l0aEFkZGVuZC5hZGQoCi0gICAgICAgICAgICAgICAgYWRkZW5kLnJlZygpLAot
ICAgICAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8VmFsdWVSZWNvdmVyeSosIGludDMyX3Q+
PigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICBzdGQ6Om1h
a2VfcGFpcigmc2h1ZmZsZURhdGEuYXJnc1tpXSwgYWRkZW5kLmFkZGVuZCgpKSk7Ci0gICAgICAg
ICAgICBudW1BZGRlbmRzKys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBudW1BZGRlbmRzID0g
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIG51bUFk
ZGVuZHMpOwotCi0gICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0gc3RhdGljX2Nhc3Q8aW50NjRf
dD4oaml0Q29kZS5zdGFja21hcHMuc3RhY2tTaXplRm9yTG9jYWxzKCkpIC8gc2l6ZW9mKHZvaWQq
KSArIG51bUFkZGVuZHM7Ci0KLSAgICBBU1NFUlQoIW51bUFkZGVuZHMgPT0gd2l0aEFkZGVuZC5p
c0VtcHR5KCkpOwotCi0gICAgaWYgKCF3aXRoQWRkZW5kLmlzRW1wdHkoKSkgewotICAgICAgICBq
aXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtQWRkZW5kcyAqIHNpemVv
Zih2b2lkKikpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxCYXNlIHsgMSAtIHN0YXRpY19jYXN0PGludD4oc2h1ZmZs
ZURhdGEubnVtTG9jYWxzKSB9OwotICAgICAgICBmb3IgKGF1dG8gZW50cnkgOiB3aXRoQWRkZW5k
KSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8gcGFpciA6IGVudHJ5LnZhbHVlKSB7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKG51bUFkZGVuZHMgPiAwKTsKLSAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3BpbGxTbG90IHsgc3BpbGxCYXNlICsgLS1udW1BZGRlbmRzIH07Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKGVudHJ5LmtleS5pc0dQUigpKTsKLSAgICAgICAgICAgICAgICBqaXQu
YWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIocGFpci5zZWNvbmQpLCBlbnRyeS5r
ZXkuZ3ByKCkpOwotICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihlbnRyeS5rZXkuZ3ByKCks
IENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3QpKTsKLSAgICAgICAgICAgICAgICBq
aXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIocGFpci5zZWNvbmQpLCBlbnRy
eS5rZXkuZ3ByKCkpOwotICAgICAgICAgICAgICAgICpwYWlyLmZpcnN0ID0gVmFsdWVSZWNvdmVy
eTo6ZGlzcGxhY2VkSW5KU1N0YWNrKHNwaWxsU2xvdCwgcGFpci5maXJzdC0+ZGF0YUZvcm1hdCgp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBBU1NFUlQobnVtQWRkZW5kcyA8
IHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpOwotICAgIH0KLQotICAgIHNodWZmbGVEYXRhLmFy
Z3MucmVzaXplKG51bUFyZ3VtZW50cygpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bUFyZ3VtZW50cygpOyArK2kpCi0gICAgICAgIHNodWZmbGVEYXRhLmFyZ3NbaV0gPSByZWNvdmVy
eUZvcihtX2FyZ3VtZW50c1tpXSwgKnJlY29yZCwgaml0Q29kZS5zdGFja21hcHMpOwotCi0gICAg
c2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5jb2RlQmxvY2soKSk7Ci0K
LSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNo
KAotICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIG1fdGFyZ2V0VG9D
aGVjaywKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApKTsKLQotICAgIG1f
Y2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKLSAgICBDYWxs
RnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLQot
ICAgIG1fZmFzdENhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7Ci0KLSAgICBzbG93UGF0aC5saW5r
KCZqaXQpOwotCi0gICAgQ2FsbEZyYW1lU2h1ZmZsZXIgc2xvd1BhdGhTaHVmZmxlcihqaXQsIHNo
dWZmbGVEYXRhKTsKLSAgICBzbG93UGF0aFNodWZmbGVyLnNldENhbGxlZUpTVmFsdWVSZWdzKEpT
VmFsdWVSZWdzIHsgR1BSSW5mbzo6cmVnVDAgfSk7Ci0gICAgc2xvd1BhdGhTaHVmZmxlci5wcmVw
YXJlRm9yU2xvd1BhdGgoKTsKLQotICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihtX2NhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKLQotICAgIG1fc2xvd0NhbGwg
PSBqaXQubmVhckNhbGwoKTsKLQotICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJu
RnJvbVRhaWxDYWxsKTsKLQotICAgIG1fY2FsbExpbmtJbmZvLT5zZXRVcENhbGwobV90eXBlLCBt
X3NlbWFudGljZU9yaWdpbiwgY2FsbGVlR1BSKTsKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU1RhaWxDYWxsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU1RhaWxDYWxsLmgJKHJldmlzaW9uIDE5NjY4
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNUYWlsQ2FsbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDgwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEZUTEpTVGFpbENhbGxfaAotI2RlZmluZSBGVExK
U1RhaWxDYWxsX2gKLQotI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgotCi0jaWYgRU5BQkxFKEZUTF9K
SVQpICYmICFGVExfVVNFU19CMwotCi0jaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIKLSNp
bmNsdWRlICJERkdDb21tb24uaCIKLSNpbmNsdWRlICJGVExFeGl0VmFsdWUuaCIKLSNpbmNsdWRl
ICJGVExKU0NhbGxCYXNlLmgiCi0jaW5jbHVkZSAiRlRMU3RhY2ttYXBBcmd1bWVudExpc3QuaCIK
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLW5hbWVzcGFjZSBERkcgewotc3RydWN0IE5vZGU7Ci19Ci0K
LW5hbWVzcGFjZSBGVEwgewotCi1jbGFzcyBKU1RhaWxDYWxsIDogcHVibGljIEpTQ2FsbEJhc2Ug
ewotcHVibGljOgotICAgIEpTVGFpbENhbGwoCi0gICAgICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQs
Ci0gICAgICAgIERGRzo6Tm9kZSosIGNvbnN0IFZlY3RvcjxFeGl0VmFsdWU+JiBhcmd1bWVudHMp
OwotCi0gICAgdm9pZCBlbWl0KEpJVENvZGUmLCBDQ2FsbEhlbHBlcnMmKTsKLQotICAgIHVuc2ln
bmVkIHN0YWNrbWFwSUQoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrbWFwSUQ7IH0KLQotICAgIHVu
c2lnbmVkIGVzdGltYXRlZFNpemUoKSBjb25zdCB7IHJldHVybiBtX2VzdGltYXRlZFNpemU7IH0K
LQotICAgIHVuc2lnbmVkIG51bUFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRz
LnNpemUoKTsgfQotCi0gICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgSlNUYWlsQ2FsbCYgb3RoZXIp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9pbnN0cnVjdGlvbk9mZnNldCA8IG90aGVy
Lm1faW5zdHJ1Y3Rpb25PZmZzZXQ7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICB1bnNpZ25l
ZCBtX3N0YWNrbWFwSUQ7Ci0gICAgVmVjdG9yPEV4aXRWYWx1ZT4gbV9hcmd1bWVudHM7Ci0gICAg
dW5zaWduZWQgbV9lc3RpbWF0ZWRTaXplOwotCi1wdWJsaWM6Ci0gICAgdWludDMyX3QgbV9pbnN0
cnVjdGlvbk9mZnNldDsKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKLQotI2VuZGlm
IC8vIEVOQUJMRShGVExfSklUKSAmJiAhRlRMX1VTRVNfQjMKLQotI2VuZGlmIC8vIEZUTEpTVGFp
bENhbGxfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkocmV2
aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlICJGVExFeGl0VmFsdWUu
aCIKICNpbmNsdWRlICJGVExGb3JtYXR0ZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkZUTE9TUkV4aXRI
YW5kbGUuaCIKLSNpbmNsdWRlICJGVExTdGFja01hcHMuaCIKICNpbmNsdWRlICJGVExTdGFja21h
cEFyZ3VtZW50TGlzdC5oIgogI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgiCiAjaW5jbHVkZSAiTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpAQCAtNjgsMjAgKzY3LDYgQEAgY2xhc3MgU3Rh
dGU7CiBzdHJ1Y3QgT1NSRXhpdERlc2NyaXB0b3JJbXBsOwogc3RydWN0IE9TUkV4aXRIYW5kbGU7
CiAKLSNpZiAhRlRMX1VTRVNfQjMKLWVudW0gY2xhc3MgRXhjZXB0aW9uVHlwZSA6IHVpbnQ4X3Qg
ewotICAgIE5vbmUsCi0gICAgQ0NhbGxFeGNlcHRpb24sCi0gICAgSlNDYWxsLAotICAgIEdldEJ5
SWQsCi0gICAgR2V0QnlJZENhbGxPcGVyYXRpb24sCi0gICAgUHV0QnlJZCwKLSAgICBQdXRCeUlk
Q2FsbE9wZXJhdGlvbiwKLSAgICBMYXp5U2xvd1BhdGgsCi0gICAgQmluYXJ5T3BHZW5lcmF0b3Is
Ci19OwotI2VuZGlmIC8vICFGVExfVVNFU19CMwotCiBzdHJ1Y3QgT1NSRXhpdERlc2NyaXB0b3Ig
ewogICAgIE9TUkV4aXREZXNjcmlwdG9yKAogICAgICAgICBEYXRhRm9ybWF0IHByb2ZpbGVEYXRh
Rm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLApAQCAtOTgsMTQgKzgzLDggQEAg
c3RydWN0IE9TUkV4aXREZXNjcmlwdG9yIHsKICAgICBPcGVyYW5kczxFeGl0VmFsdWU+IG1fdmFs
dWVzOwogICAgIEJhZzxFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbj4gbV9tYXRlcmlhbGl6
YXRpb25zOwogCi0jaWYgIUZUTF9VU0VTX0IzCi0gICAgdWludDMyX3QgbV9zdGFja21hcElEOwot
ICAgIGJvb2wgbV9pc0ludmFsaWRhdGlvblBvaW50OwotI2VuZGlmIC8vICFGVExfVVNFU19CMwot
ICAgIAogICAgIHZvaWQgdmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2Vz
Jik7CiAKLSNpZiBGVExfVVNFU19CMwogICAgIC8vIENhbGwgdGhpcyBvbmNlIHdlIGhhdmUgYSBw
bGFjZSB0byBlbWl0IHRoZSBPU1IgZXhpdCBqdW1wIGFuZCB3ZSBoYXZlIGRhdGEgYWJvdXQgaG93
IHRoZSBzdGF0ZQogICAgIC8vIHNob3VsZCBiZSByZWNvdmVyZWQuIFRoaXMgZWZmZWN0aXZlbHkg
ZW1pdHMgY29kZSB0aGF0IGRvZXMgdGhlIGV4aXQsIHRob3VnaCB0aGUgY29kZSBpcyByZWFsbHkg
YQogICAgIC8vIHBhdGNoYWJsZSBqdW1wIGFuZCB3ZSBlbWl0IHRoZSByZWFsIGNvZGUgbGF6aWx5
LiBUaGUgZGVzY3JpcHRpb24gb2YgaG93IHRvIGVtaXQgdGhlIHJlYWwgY29kZSBpcwpAQCAtMTM1
LDcxICsxMTQsMjcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gcHJlcGFy
ZU9TUkV4aXRIYW5kbGUoCiAgICAgICAgIFN0YXRlJiwgRXhpdEtpbmQsIGNvbnN0IERGRzo6Tm9k
ZU9yaWdpbiYsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmLAogICAgICAgICB1
bnNpZ25lZCBvZmZzZXQgPSAwKTsKLSNlbmRpZiAvLyBGVExfVVNFU19CMwotfTsKLQotI2lmICFG
VExfVVNFU19CMwotc3RydWN0IE9TUkV4aXREZXNjcmlwdG9ySW1wbCB7Ci0gICAgT1NSRXhpdERl
c2NyaXB0b3JJbXBsKEV4aXRLaW5kIGtpbmQsIENvZGVPcmlnaW4gZXhpdE9yaWdpbiwgQ29kZU9y
aWdpbiBmb3JFeGl0UHJvZmlsZSwgRXhjZXB0aW9uVHlwZSBleGNlcHRpb25UeXBlKQotICAgICAg
ICA6IG1fa2luZChraW5kKQotICAgICAgICAsIG1fY29kZU9yaWdpbihleGl0T3JpZ2luKQotICAg
ICAgICAsIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlKGZvckV4aXRQcm9maWxlKQotICAgICAg
ICAsIG1fZXhjZXB0aW9uVHlwZShleGNlcHRpb25UeXBlKQotICAgIHsKLSAgICB9Ci0KLSAgICBF
eGl0S2luZCBtX2tpbmQ7Ci0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47Ci0gICAgQ29kZU9y
aWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKLSAgICBFeGNlcHRpb25UeXBlIG1fZXhj
ZXB0aW9uVHlwZTsKLSAgICBDb2RlT3JpZ2luIG1fc2VtYW50aWNDb2RlT3JpZ2luRm9yQ2FsbEZy
YW1lSGVhZGVyOwotICAgIEhhbmRsZXJJbmZvIG1fYmFzZWxpbmVFeGNlcHRpb25IYW5kbGVyOwog
fTsKLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKIAogc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgREZH
OjpPU1JFeGl0QmFzZSB7CiAgICAgT1NSRXhpdCgKICAgICAgICAgT1NSRXhpdERlc2NyaXB0b3Iq
LCBFeGl0S2luZCwKLSNpZiBGVExfVVNFU19CMwogICAgICAgICBDb2RlT3JpZ2luLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZQotI2Vsc2UgLy8gRlRMX1VTRVNfQjMKLSAgICAg
ICAgT1NSRXhpdERlc2NyaXB0b3JJbXBsJiwgdWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleAot
I2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgICAgICk7CiAKICAgICBPU1JFeGl0RGVzY3JpcHRv
ciogbV9kZXNjcmlwdG9yOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX2NvZGU7Ci0jaWYg
RlRMX1VTRVNfQjMKICAgICAvLyBUaGlzIHRlbGxzIHVzIHdoZXJlIHRvIHBsYWNlIGEganVtcC4K
ICAgICBDb2RlTG9jYXRpb25KdW1wIG1fcGF0Y2hhYmxlSnVtcDsKICAgICBWZWN0b3I8QjM6OlZh
bHVlUmVwPiBtX3ZhbHVlUmVwczsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAgLy8gT2Zmc2V0
IHdpdGhpbiB0aGUgZXhpdCBzdHVicyBvZiB0aGUgc3R1YiBmb3IgdGhpcyBleGl0LgotICAgIHVu
c2lnbmVkIG1fcGF0Y2hhYmxlQ29kZU9mZnNldDsKLSAgICAvLyBPZmZzZXQgd2l0aGluIFN0YWNr
bWFwOjpyZWNvcmRzCi0gICAgdWludDMyX3QgbV9zdGFja21hcFJlY29yZEluZGV4OwotICAgIEV4
Y2VwdGlvblR5cGUgbV9leGNlcHRpb25UeXBlOwotICAgIFJlZ2lzdGVyU2V0IHJlZ2lzdGVyc1Rv
UHJlc2VydmVGb3JDYWxsVGhhdE1pZ2h0VGhyb3c7Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKIAog
ICAgIENvZGVMb2NhdGlvbkp1bXAgY29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGZ0
bENvZGVCbG9jaykgY29uc3Q7CiAgICAgdm9pZCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0
U2l0ZShDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKQogICAgIHsKICAgICAgICAgT1NSRXhp
dEJhc2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKHByb2ZpbGVkQ29kZUJsb2Nr
LCBFeGl0RnJvbUZUTCk7CiAgICAgfQotCi0jaWYgIUZUTF9VU0VTX0IzCi0gICAgdm9pZCBnYXRo
ZXJSZWdpc3RlcnNUb1NwaWxsRm9yQ2FsbElmRXhjZXB0aW9uKFN0YWNrTWFwcyYsIFN0YWNrTWFw
czo6UmVjb3JkJik7Ci0gICAgdm9pZCBzcGlsbFJlZ2lzdGVyc1RvU3BpbGxTbG90KENDYWxsSGVs
cGVycyYsIGludDMyX3Qgc3RhY2tTcGlsbFNsb3QpOwotICAgIHZvaWQgcmVjb3ZlclJlZ2lzdGVy
c0Zyb21TcGlsbFNsb3QoQ0NhbGxIZWxwZXJzJiBqaXQsIGludDMyX3Qgc3RhY2tTcGlsbFNsb3Qp
OwotCi0gICAgYm9vbCB3aWxsQXJyaXZlQXRFeGl0RnJvbUluZGlyZWN0RXhjZXB0aW9uQ2hlY2so
KSBjb25zdDsKLSAgICBib29sIHdpbGxBcnJpdmVBdE9TUkV4aXRGcm9tQ2FsbE9wZXJhdGlvbigp
IGNvbnN0OwotICAgIGJvb2wgbmVlZHNSZWdpc3RlclJlY292ZXJ5T25HZW5lcmljVW53aW5kT1NS
RXhpdFBhdGgoKSBjb25zdDsKLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKIH07CiAKLQogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShy
ZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRD
b21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDExICs5OSw3IEBAIHN0YXRpYyB2b2lk
IHJlYm94QWNjb3JkaW5nVG9Gb3JtYXQoCiAKIHN0YXRpYyB2b2lkIGNvbXBpbGVSZWNvdmVyeSgK
ICAgICBDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgRXhpdFZhbHVlJiB2YWx1ZSwKLSNpZiBGVExf
VVNFU19CMwogICAgIFZlY3RvcjxCMzo6VmFsdWVSZXA+JiB2YWx1ZVJlcHMsCi0jZWxzZSAvLyBG
VExfVVNFU19CMwotICAgIFN0YWNrTWFwczo6UmVjb3JkKiByZWNvcmQsIFN0YWNrTWFwcyYgc3Rh
Y2ttYXBzLAotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgY2hhciogcmVnaXN0ZXJTY3JhdGNo
LAogICAgIGNvbnN0IEhhc2hNYXA8RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qLCBFbmNv
ZGVkSlNWYWx1ZSo+JiBtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIpCiB7CkBAIC0xMTcsMTMgKzEx
Myw4IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVSZWNvdmVyeSgKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50OgotI2lmIEZUTF9VU0VTX0IzCiAg
ICAgICAgIExvY2F0aW9uOjpmb3JWYWx1ZVJlcCh2YWx1ZVJlcHNbdmFsdWUuZXhpdEFyZ3VtZW50
KCkuYXJndW1lbnQoKV0pLnJlc3RvcmVJbnRvKAogICAgICAgICAgICAgaml0LCByZWdpc3RlclNj
cmF0Y2gsIEdQUkluZm86OnJlZ1QwKTsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAgICAgIHJl
Y29yZC0+bG9jYXRpb25zW3ZhbHVlLmV4aXRBcmd1bWVudCgpLmFyZ3VtZW50KCldLnJlc3RvcmVJ
bnRvKAotICAgICAgICAgICAgaml0LCBzdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5m
bzo6cmVnVDApOwotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6CkBAIC0xMzQsMTcgKzEyNSwxMCBA
QCBzdGF0aWMgdm9pZCBjb21waWxlUmVjb3ZlcnkoCiAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCiAgICAgY2FzZSBFeGl0VmFsdWVSZWNvdmVyeToKLSNpZiBGVExfVVNFU19CMwogICAgICAg
ICBMb2NhdGlvbjo6Zm9yVmFsdWVSZXAodmFsdWVSZXBzW3ZhbHVlLnJpZ2h0UmVjb3ZlcnlBcmd1
bWVudCgpXSkucmVzdG9yZUludG8oCiAgICAgICAgICAgICBqaXQsIHJlZ2lzdGVyU2NyYXRjaCwg
R1BSSW5mbzo6cmVnVDEpOwogICAgICAgICBMb2NhdGlvbjo6Zm9yVmFsdWVSZXAodmFsdWVSZXBz
W3ZhbHVlLmxlZnRSZWNvdmVyeUFyZ3VtZW50KCldKS5yZXN0b3JlSW50bygKICAgICAgICAgICAg
IGppdCwgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMCk7Ci0jZWxzZSAvLyBGVExfVVNF
U19CMwotICAgICAgICByZWNvcmQtPmxvY2F0aW9uc1t2YWx1ZS5yaWdodFJlY292ZXJ5QXJndW1l
bnQoKV0ucmVzdG9yZUludG8oCi0gICAgICAgICAgICBqaXQsIHN0YWNrbWFwcywgcmVnaXN0ZXJT
Y3JhdGNoLCBHUFJJbmZvOjpyZWdUMSk7Ci0gICAgICAgIHJlY29yZC0+bG9jYXRpb25zW3ZhbHVl
LmxlZnRSZWNvdmVyeUFyZ3VtZW50KCldLnJlc3RvcmVJbnRvKAotICAgICAgICAgICAgaml0LCBz
dGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDApOwotI2VuZGlmIC8vIEZU
TF9VU0VTX0IzCiAgICAgICAgIHN3aXRjaCAodmFsdWUucmVjb3ZlcnlPcGNvZGUoKSkgewogICAg
ICAgICBjYXNlIEFkZFJlY292ZXJ5OgogICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVy
eUZvcm1hdCgpKSB7CkBAIC0xOTQsMTMgKzE3OCw2IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVSZWNv
dmVyeSgKIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgIHVuc2lnbmVkIGV4aXRJRCwgSklU
Q29kZSogaml0Q29kZSwgT1NSRXhpdCYgZXhpdCwgVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aykKIHsKLSNpZiBGVExfVVNFU19CMwotICAgIFVOVVNFRF9QQVJBTShqaXRDb2RlKTsKLSNlbHNl
IC8vIEZUTF9VU0VTX0IzCi0gICAgU3RhY2tNYXBzOjpSZWNvcmQqIHJlY29yZCA9ICZqaXRDb2Rl
LT5zdGFja21hcHMucmVjb3Jkc1tleGl0Lm1fc3RhY2ttYXBSZWNvcmRJbmRleF07Ci0gICAgUkVM
RUFTRV9BU1NFUlQocmVjb3JkLT5wYXRjaHBvaW50SUQgPT0gZXhpdC5tX2Rlc2NyaXB0b3ItPm1f
c3RhY2ttYXBJRCk7Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKLQogICAgIC8vIFRoaXMgY29kZSBy
ZXF1aXJlcyBmcmFtZVBvaW50ZXJSZWdpc3RlciBpcyB0aGUgc2FtZSBhcyBjYWxsRnJhbWVSZWdp
c3RlcgogICAgIHN0YXRpY19hc3NlcnQoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lz
dGVyID09IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAiTWFjcm9Bc3NlbWJsZXI6OmZyYW1l
UG9pbnRlclJlZ2lzdGVyIGFuZCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciBtdXN0IGJlIHRo
ZSBzYW1lIik7CiAKQEAgLTIxNCwyMiArMTkxLDEyIEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHVi
KAogICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNvZGVCbG9j
ay0+c3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwKICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CiAKLSNpZiAhRlRMX1VTRVNfQjMKLSAgICAgICAgaWYgKGV4aXQu
bmVlZHNSZWdpc3RlclJlY292ZXJ5T25HZW5lcmljVW53aW5kT1NSRXhpdFBhdGgoKSkKLSAgICAg
ICAgICAgIGV4aXQucmVjb3ZlclJlZ2lzdGVyc0Zyb21TcGlsbFNsb3Qoaml0LCBqaXRDb2RlLT5v
c3JFeGl0RnJvbUdlbmVyaWNVbndpbmRTdGFja1NwaWxsU2xvdCk7Ci0jZW5kaWYgLy8gIUZUTF9V
U0VTX0IzCi0KICAgICAgICAgLy8gRG8gYSBwdXNoVG9TYXZlIGJlY2F1c2UgdGhhdCdzIHdoYXQg
dGhlIGV4aXQgY29tcGlsZXIgYmVsb3cgZXhwZWN0cyB0aGUgc3RhY2sKICAgICAgICAgLy8gdG8g
bG9vayBsaWtlIGJlY2F1c2UgdGhhdCdzIHRoZSBsYXN0IHRoaW5nIHRoZSBFeGl0VGh1bmtHZW5l
cmF0b3IgZG9lcy4gVGhlIGNvZGUKICAgICAgICAgLy8gYmVsb3cgZG9lc24ndCBhY3R1YWxseSB1
c2UgdGhlIHZhbHVlIHRoYXQgd2FzIHB1c2hlZCwgYnV0IGl0IGRvZXMgcmVseSBvbiB0aGUKICAg
ICAgICAgLy8gZ2VuZXJhbCBzaGFwZSBvZiB0aGUgc3RhY2sgYmVpbmcgYXMgaXQgaXMgaW4gdGhl
IG5vbi1leGNlcHRpb24gT1NSIGNhc2UuCiAgICAgICAgIGppdC5wdXNoVG9TYXZlSW1tZWRpYXRl
V2l0aG91dFRvdWNoaW5nUmVnaXN0ZXJzKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4YmFk
YmVlZikpOwogICAgIH0KLSNpZiAhRlRMX1VTRVNfQjMKLSAgICBpZiAoZXhpdC53aWxsQXJyaXZl
QXRPU1JFeGl0RnJvbUNhbGxPcGVyYXRpb24oKSkKLSAgICAgICAgZXhpdC5yZWNvdmVyUmVnaXN0
ZXJzRnJvbVNwaWxsU2xvdChqaXQsIGppdENvZGUtPm9zckV4aXRGcm9tR2VuZXJpY1Vud2luZFN0
YWNrU3BpbGxTbG90KTsKLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKLSAgICAKIAogICAgIC8vIFdl
IG5lZWQgc2NyYXRjaCBzcGFjZSB0byBzYXZlIGFsbCByZWdpc3RlcnMsIHRvIGJ1aWxkIHVwIHRo
ZSBKUyBzdGFjaywgdG8gZGVhbCB3aXRoIHVud2luZAogICAgIC8vIGZpeHVwLCBwb2ludGVycyB0
byBhbGwgb2YgdGhlIG9iamVjdHMgd2UgbWF0ZXJpYWxpemUsIGFuZCB0aGUgZWxlbWVudHMgaW5z
aWRlIHRob3NlIG9iamVjdHMKQEAgLTI2NywxMSArMjM0LDcgQEAgc3RhdGljIHZvaWQgY29tcGls
ZVN0dWIoCiAgICAgYXV0byByZWNvdmVyVmFsdWUgPSBbJl0gKGNvbnN0IEV4aXRWYWx1ZSYgdmFs
dWUpIHsKICAgICAgICAgY29tcGlsZVJlY292ZXJ5KAogICAgICAgICAgICAgaml0LCB2YWx1ZSwK
LSNpZiBGVExfVVNFU19CMwogICAgICAgICAgICAgZXhpdC5tX3ZhbHVlUmVwcywKLSNlbHNlIC8v
IEZUTF9VU0VTX0IzCi0gICAgICAgICAgICByZWNvcmQsIGppdENvZGUtPnN0YWNrbWFwcywKLSNl
bmRpZiAvLyBGVExfVVNFU19CMwogICAgICAgICAgICAgcmVnaXN0ZXJTY3JhdGNoLCBtYXRlcmlh
bGl6YXRpb25Ub1BvaW50ZXIpOwogICAgIH07CiAgICAgCkBAIC0yODUsOSArMjQ4LDkgQEAgc3Rh
dGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgaml0LnBvcFRvUmVzdG9yZShHUFJJbmZvOjpyZWdU
MCk7CiAgICAgaml0LmNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgCi0gICAgaWYg
KHZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXIgJiYgY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0Nv
bW1vbigpLT5jb21waWxhdGlvbikgeworICAgIGlmICh2bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVy
ICYmIGppdENvZGUtPmRmZ0NvbW1vbigpLT5jb21waWxhdGlvbikgewogICAgICAgICBQcm9maWxl
cjo6RGF0YWJhc2UmIGRhdGFiYXNlID0gKnZtLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXI7Ci0gICAg
ICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBjb2RlQmxvY2stPmppdENv
ZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgpOworICAgICAgICBQcm9maWxlcjo6
Q29tcGlsYXRpb24qIGNvbXBpbGF0aW9uID0gaml0Q29kZS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0
aW9uLmdldCgpOwogICAgICAgICAKICAgICAgICAgUHJvZmlsZXI6Ok9TUkV4aXQqIHByb2ZpbGVy
RXhpdCA9IGNvbXBpbGF0aW9uLT5hZGRPU1JFeGl0KAogICAgICAgICAgICAgZXhpdElELCBQcm9m
aWxlcjo6T3JpZ2luU3RhY2soZGF0YWJhc2UsIGNvZGVCbG9jaywgZXhpdC5tX2NvZGVPcmlnaW4p
LApAQCAtMzA1LDExICsyNjgsNyBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICAKICAg
ICAvLyBEbyBzb21lIHZhbHVlIHByb2ZpbGluZy4KICAgICBpZiAoZXhpdC5tX2Rlc2NyaXB0b3It
Pm1fcHJvZmlsZURhdGFGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpIHsKLSNpZiBGVExfVVNFU19C
MwogICAgICAgICBMb2NhdGlvbjo6Zm9yVmFsdWVSZXAoZXhpdC5tX3ZhbHVlUmVwc1swXSkucmVz
dG9yZUludG8oaml0LCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1QwKTsKLSNlbHNlIC8v
IEZUTF9VU0VTX0IzCi0gICAgICAgIHJlY29yZC0+bG9jYXRpb25zWzBdLnJlc3RvcmVJbnRvKGpp
dCwgaml0Q29kZS0+c3RhY2ttYXBzLCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1QwKTsK
LSNlbmRpZiAvLyBGVExfVVNFU19CMwogICAgICAgICByZWJveEFjY29yZGluZ1RvRm9ybWF0KAog
ICAgICAgICAgICAgZXhpdC5tX2Rlc2NyaXB0b3ItPm1fcHJvZmlsZURhdGFGb3JtYXQsIGppdCwg
R1BSSW5mbzo6cmVnVDAsIEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgICAg
IApAQCAtNTYxLDcgKzUyMCw2IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgIGFkanVz
dEFuZEp1bXBUb1RhcmdldChqaXQsIGV4aXQpOwogICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKnZtLCBqaXQsIGNvZGVCbG9jayk7Ci0jaWYgRlRMX1VTRVNfQjMKICAgICBleGl0Lm1f
Y29kZSA9IEZJTkFMSVpFX0NPREVfSUYoCiAgICAgICAgIHNob3VsZER1bXBEaXNhc3NlbWJseSgp
IHx8IE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8fCBPcHRpb25zOjp2ZXJib3NlRlRMT1NSRXhpdCgp
LAogICAgICAgICBwYXRjaEJ1ZmZlciwKQEAgLTU3MCwxNyArNTI4LDYgQEAgc3RhdGljIHZvaWQg
Y29tcGlsZVN0dWIoCiAgICAgICAgICAgICBleGl0S2luZFRvU3RyaW5nKGV4aXQubV9raW5kKSwg
dG9DU3RyaW5nKCpjb2RlQmxvY2spLmRhdGEoKSwKICAgICAgICAgICAgIHRvQ1N0cmluZyhpZ25v
cmluZ0NvbnRleHQ8RHVtcENvbnRleHQ+KGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcykpLmRh
dGEoKSkKICAgICAgICAgKTsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAgZXhpdC5tX2NvZGUg
PSBGSU5BTElaRV9DT0RFX0lGKAotICAgICAgICBzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBP
cHRpb25zOjp2ZXJib3NlT1NSKCkgfHwgT3B0aW9uczo6dmVyYm9zZUZUTE9TUkV4aXQoKSwKLSAg
ICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICgiRlRMIE9TUiBleGl0ICMldSAoJXMsICVzKSBm
cm9tICVzLCB3aXRoIG9wZXJhbmRzID0gJXMsIGFuZCByZWNvcmQgPSAlcyIsCi0gICAgICAgICAg
ICBleGl0SUQsIHRvQ1N0cmluZyhleGl0Lm1fY29kZU9yaWdpbikuZGF0YSgpLAotICAgICAgICAg
ICAgZXhpdEtpbmRUb1N0cmluZyhleGl0Lm1fa2luZCksIHRvQ1N0cmluZygqY29kZUJsb2NrKS5k
YXRhKCksCi0gICAgICAgICAgICB0b0NTdHJpbmcoaWdub3JpbmdDb250ZXh0PER1bXBDb250ZXh0
PihleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1ZXMpKS5kYXRhKCksCi0gICAgICAgICAgICB0b0NT
dHJpbmcoKnJlY29yZCkuZGF0YSgpKQotICAgICAgICApOwotI2VuZGlmIC8vIEZUTF9VU0VTX0Iz
CiB9CiAKIGV4dGVybiAiQyIgdm9pZCogY29tcGlsZUZUTE9TUkV4aXQoRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBleGl0SUQpCkBAIC02MTIsMTkgKzU1OSwxMSBAQCBleHRlcm4gIkMiIHZvaWQq
IGNvbXBpbGVGVExPU1JFeGl0KEV4ZWNTCiAgICAgICAgIGRhdGFMb2coIiAgICBPcmlnaW46ICIs
IGV4aXQubV9jb2RlT3JpZ2luLCAiXG4iKTsKICAgICAgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2lu
Rm9yRXhpdFByb2ZpbGUgIT0gZXhpdC5tX2NvZGVPcmlnaW4pCiAgICAgICAgICAgICBkYXRhTG9n
KCIgICAgT3JpZ2luIGZvciBleGl0IHByb2ZpbGU6ICIsIGV4aXQubV9jb2RlT3JpZ2luRm9yRXhp
dFByb2ZpbGUsICJcbiIpOwotI2lmICFGVExfVVNFU19CMwotICAgICAgICBkYXRhTG9nKCIgICAg
RXhpdCBzdGFja21hcCBJRDogIiwgZXhpdC5tX2Rlc2NyaXB0b3ItPm1fc3RhY2ttYXBJRCwgIlxu
Iik7Ci0jZW5kaWYgLy8gIUZUTF9VU0VTX0IzCiAgICAgICAgIGRhdGFMb2coIiAgICBDdXJyZW50
IGNhbGwgc2l0ZSBpbmRleDogIiwgZXhlYy0+Y2FsbFNpdGVJbmRleCgpLmJpdHMoKSwgIlxuIik7
CiAgICAgICAgIGRhdGFMb2coIiAgICBFeGl0IGlzIGV4Y2VwdGlvbiBoYW5kbGVyOiAiLCBleGl0
LmlzRXhjZXB0aW9uSGFuZGxlcigpLCAiXG4iKTsKICAgICAgICAgZGF0YUxvZygiICAgIElzIHVu
d2luZCBoYW5kbGVyOiAiLCBleGl0LmlzR2VuZXJpY1Vud2luZEhhbmRsZXIoKSwgIlxuIik7Ci0j
aWYgIUZUTF9VU0VTX0IzCi0gICAgICAgIGRhdGFMb2coIiAgICBXaWxsIGFycml2ZSBhdCBleGl0
IGZyb20gbGF6eSBzbG93IHBhdGg6ICIsIGV4aXQubV9leGNlcHRpb25UeXBlID09IEV4Y2VwdGlv
blR5cGU6OkxhenlTbG93UGF0aCwgIlxuIik7Ci0jZW5kaWYgLy8gIUZUTF9VU0VTX0IzCiAgICAg
ICAgIGRhdGFMb2coIiAgICBFeGl0IHZhbHVlczogIiwgZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFs
dWVzLCAiXG4iKTsKLSNpZiBGVExfVVNFU19CMwogICAgICAgICBkYXRhTG9nKCIgICAgVmFsdWUg
cmVwczogIiwgbGlzdER1bXAoZXhpdC5tX3ZhbHVlUmVwcyksICJcbiIpOwotI2VuZGlmIC8vIEZU
TF9VU0VTX0IzCiAgICAgICAgIGlmICghZXhpdC5tX2Rlc2NyaXB0b3ItPm1fbWF0ZXJpYWxpemF0
aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBNYXRlcmlhbGl6YXRp
b25zOlxuIik7CiAgICAgICAgICAgICBmb3IgKEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9u
KiBtYXRlcmlhbGl6YXRpb24gOiBleGl0Lm1fZGVzY3JpcHRvci0+bV9tYXRlcmlhbGl6YXRpb25z
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmNwcAkocmV2
aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJGVExTdGFja01hcHMuaCIKLQotI2lmIEVOQUJMRShGVExfSklUKQotCi0jaW5jbHVk
ZSAiRlRMTG9jYXRpb24uaCIKLSNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL0RhdGFMb2cuaD4KLSNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KLQotbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotVCByZWFkT2Jq
ZWN0KFN0YWNrTWFwczo6UGFyc2VDb250ZXh0JiBjb250ZXh0KQotewotICAgIFQgcmVzdWx0Owot
ICAgIHJlc3VsdC5wYXJzZShjb250ZXh0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lk
IFN0YWNrTWFwczo6Q29uc3RhbnQ6OnBhcnNlKFN0YWNrTWFwczo6UGFyc2VDb250ZXh0JiBjb250
ZXh0KQotewotICAgIGludGVnZXIgPSBjb250ZXh0LnZpZXctPnJlYWQ8aW50NjRfdD4oY29udGV4
dC5vZmZzZXQsIHRydWUpOwotfQotCi12b2lkIFN0YWNrTWFwczo6Q29uc3RhbnQ6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBvdXQucHJpbnRmKCIweCUwMTZsbHgiLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGludGVnZXIpKTsKLX0KLQotdm9pZCBTdGFja01h
cHM6OlN0YWNrU2l6ZTo6cGFyc2UoU3RhY2tNYXBzOjpQYXJzZUNvbnRleHQmIGNvbnRleHQpCi17
Ci0gICAgc3dpdGNoIChjb250ZXh0LnZlcnNpb24pIHsKLSAgICBjYXNlIDA6Ci0gICAgICAgIGZ1
bmN0aW9uT2Zmc2V0ID0gY29udGV4dC52aWV3LT5yZWFkPHVpbnQzMl90Pihjb250ZXh0Lm9mZnNl
dCwgdHJ1ZSk7Ci0gICAgICAgIHNpemUgPSBjb250ZXh0LnZpZXctPnJlYWQ8dWludDMyX3Q+KGNv
bnRleHQub2Zmc2V0LCB0cnVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIGZ1bmN0aW9uT2Zmc2V0ID0gY29udGV4dC52aWV3LT5yZWFkPHVpbnQ2NF90
Pihjb250ZXh0Lm9mZnNldCwgdHJ1ZSk7Ci0gICAgICAgIHNpemUgPSBjb250ZXh0LnZpZXctPnJl
YWQ8dWludDY0X3Q+KGNvbnRleHQub2Zmc2V0LCB0cnVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotfQotCi12b2lkIFN0YWNrTWFwczo6U3RhY2tTaXplOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Ci17Ci0gICAgb3V0LnByaW50KCIob2ZmOiIsIGZ1bmN0aW9uT2Zmc2V0LCAiLCBzaXpl
OiIsIHNpemUsICIpIik7Ci19Ci0KLXZvaWQgU3RhY2tNYXBzOjpMb2NhdGlvbjo6cGFyc2UoU3Rh
Y2tNYXBzOjpQYXJzZUNvbnRleHQmIGNvbnRleHQpCi17Ci0gICAga2luZCA9IHN0YXRpY19jYXN0
PEtpbmQ+KGNvbnRleHQudmlldy0+cmVhZDx1aW50OF90Pihjb250ZXh0Lm9mZnNldCwgdHJ1ZSkp
OwotICAgIHNpemUgPSBjb250ZXh0LnZpZXctPnJlYWQ8dWludDhfdD4oY29udGV4dC5vZmZzZXQs
IHRydWUpOwotICAgIGR3YXJmUmVnID0gRFdBUkZSZWdpc3Rlcihjb250ZXh0LnZpZXctPnJlYWQ8
dWludDE2X3Q+KGNvbnRleHQub2Zmc2V0LCB0cnVlKSk7Ci0gICAgdGhpcy0+b2Zmc2V0ID0gY29u
dGV4dC52aWV3LT5yZWFkPGludDMyX3Q+KGNvbnRleHQub2Zmc2V0LCB0cnVlKTsKLX0KLQotdm9p
ZCBTdGFja01hcHM6OkxvY2F0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0g
ICAgb3V0LnByaW50KCIoIiwga2luZCwgIiwgIiwgZHdhcmZSZWcsICIsIG9mZjoiLCBvZmZzZXQs
ICIsIHNpemU6Iiwgc2l6ZSwgIikiKTsKLX0KLQotR1BSUmVnIFN0YWNrTWFwczo6TG9jYXRpb246
OmRpcmVjdEdQUigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEZUTDo6TG9jYXRpb246OmZvclN0YWNr
bWFwcyhudWxscHRyLCAqdGhpcykuZGlyZWN0R1BSKCk7Ci19Ci0KLXZvaWQgU3RhY2tNYXBzOjpM
b2NhdGlvbjo6cmVzdG9yZUludG8oCi0gICAgTWFjcm9Bc3NlbWJsZXImIGppdCwgU3RhY2tNYXBz
JiBzdGFja21hcHMsIGNoYXIqIHNhdmVkUmVnaXN0ZXJzLCBHUFJSZWcgcmVzdWx0KSBjb25zdAot
ewotICAgIEZUTDo6TG9jYXRpb246OmZvclN0YWNrbWFwcygmc3RhY2ttYXBzLCAqdGhpcykucmVz
dG9yZUludG8oaml0LCBzYXZlZFJlZ2lzdGVycywgcmVzdWx0KTsKLX0KLQotdm9pZCBTdGFja01h
cHM6OkxpdmVPdXQ6OnBhcnNlKFN0YWNrTWFwczo6UGFyc2VDb250ZXh0JiBjb250ZXh0KQotewot
ICAgIGR3YXJmUmVnID0gRFdBUkZSZWdpc3Rlcihjb250ZXh0LnZpZXctPnJlYWQ8dWludDE2X3Q+
KGNvbnRleHQub2Zmc2V0LCB0cnVlKSk7IC8vIHJlZ251bQotICAgIGNvbnRleHQudmlldy0+cmVh
ZDx1aW50OF90Pihjb250ZXh0Lm9mZnNldCwgdHJ1ZSk7IC8vIHJlc2VydmVkCi0gICAgc2l6ZSA9
IGNvbnRleHQudmlldy0+cmVhZDx1aW50OF90Pihjb250ZXh0Lm9mZnNldCwgdHJ1ZSk7IC8vIHNp
emUgaW4gYnl0ZXMKLX0KLQotdm9pZCBTdGFja01hcHM6OkxpdmVPdXQ6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKLXsKLSAgICBvdXQucHJpbnQoIigiLCBkd2FyZlJlZywgIiwgIiwgc2l6
ZSwgIikiKTsKLX0KLQotYm9vbCBTdGFja01hcHM6OlJlY29yZDo6cGFyc2UoU3RhY2tNYXBzOjpQ
YXJzZUNvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaW50NjRfdCBpZCA9IGNvbnRleHQudmlldy0+
cmVhZDxpbnQ2NF90Pihjb250ZXh0Lm9mZnNldCwgdHJ1ZSk7Ci0gICAgQVNTRVJUKHN0YXRpY19j
YXN0PGludDMyX3Q+KGlkKSA9PSBpZCk7Ci0gICAgcGF0Y2hwb2ludElEID0gc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KGlkKTsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8aW50MzJfdD4ocGF0Y2hwb2ludElE
KSA8IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpbnN0cnVjdGlvbk9mZnNl
dCA9IGNvbnRleHQudmlldy0+cmVhZDx1aW50MzJfdD4oY29udGV4dC5vZmZzZXQsIHRydWUpOwot
ICAgIGZsYWdzID0gY29udGV4dC52aWV3LT5yZWFkPHVpbnQxNl90Pihjb250ZXh0Lm9mZnNldCwg
dHJ1ZSk7Ci0gICAgCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gY29udGV4dC52aWV3LT5yZWFkPHVp
bnQxNl90Pihjb250ZXh0Lm9mZnNldCwgdHJ1ZSk7Ci0gICAgd2hpbGUgKGxlbmd0aC0tKQotICAg
ICAgICBsb2NhdGlvbnMuYXBwZW5kKHJlYWRPYmplY3Q8TG9jYXRpb24+KGNvbnRleHQpKTsKLSAg
ICAKLSAgICBpZiAoY29udGV4dC52ZXJzaW9uID49IDEpCi0gICAgICAgIGNvbnRleHQudmlldy0+
cmVhZDx1aW50MTZfdD4oY29udGV4dC5vZmZzZXQsIHRydWUpOyAvLyBwYWRkaW5nCi0KLSAgICB1
bnNpZ25lZCBudW1MaXZlT3V0cyA9IGNvbnRleHQudmlldy0+cmVhZDx1aW50MTZfdD4oY29udGV4
dC5vZmZzZXQsIHRydWUpOwotICAgIHdoaWxlIChudW1MaXZlT3V0cy0tKQotICAgICAgICBsaXZl
T3V0cy5hcHBlbmQocmVhZE9iamVjdDxMaXZlT3V0Pihjb250ZXh0KSk7Ci0KLSAgICBpZiAoY29u
dGV4dC52ZXJzaW9uID49IDEpIHsKLSAgICAgICAgaWYgKGNvbnRleHQub2Zmc2V0ICYgNykgewot
ICAgICAgICAgICAgQVNTRVJUKCEoY29udGV4dC5vZmZzZXQgJiAzKSk7Ci0gICAgICAgICAgICBj
b250ZXh0LnZpZXctPnJlYWQ8dWludDMyX3Q+KGNvbnRleHQub2Zmc2V0LCB0cnVlKTsgLy8gcGFk
ZGluZwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IFN0YWNrTWFwczo6UmVjb3JkOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAg
b3V0LnByaW50KAotICAgICAgICAiKCMiLCBwYXRjaHBvaW50SUQsICIsIG9mZnNldCA9ICIsIGlu
c3RydWN0aW9uT2Zmc2V0LCAiLCBmbGFncyA9ICIsIGZsYWdzLAotICAgICAgICAiLCBsb2NhdGlv
bnMgPSBbIiwgbGlzdER1bXAobG9jYXRpb25zKSwgIl0sIGxpdmVPdXRzID0gWyIsCi0gICAgICAg
IGxpc3REdW1wKGxpdmVPdXRzKSwgIl0pIik7Ci19Ci0KLVJlZ2lzdGVyU2V0IFN0YWNrTWFwczo6
UmVjb3JkOjpsb2NhdGlvblNldCgpIGNvbnN0Ci17Ci0gICAgUmVnaXN0ZXJTZXQgcmVzdWx0Owot
ICAgIGZvciAodW5zaWduZWQgaSA9IGxvY2F0aW9ucy5zaXplKCk7IGktLTspIHsKLSAgICAgICAg
UmVnIHJlZyA9IGxvY2F0aW9uc1tpXS5kd2FyZlJlZy5yZWcoKTsKLSAgICAgICAgaWYgKCFyZWcp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmVzdWx0LnNldChyZWcpOwotICAgIH0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1SZWdpc3RlclNldCBTdGFja01hcHM6OlJlY29yZDo6
bGl2ZU91dHNTZXQoKSBjb25zdAotewotICAgIFJlZ2lzdGVyU2V0IHJlc3VsdDsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBsaXZlT3V0cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgTGl2ZU91dCBs
aXZlT3V0ID0gbGl2ZU91dHNbaV07Ci0gICAgICAgIFJlZyByZWcgPSBsaXZlT3V0LmR3YXJmUmVn
LnJlZygpOwotICAgICAgICAvLyBGSVhNRTogRWl0aGVyIGFzc2VydCB0aGF0IHNpemUgaXMgbm90
IGdyZWF0ZXIgdGhhbiBzaXplb2YocG9pbnRlciksIG9yIGFjdHVhbGx5Ci0gICAgICAgIC8vIHNh
dmUgdGhlIGhpZ2ggYml0cyBvZiByZWdpc3RlcnMuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzA4ODUKLSAgICAgICAgaWYgKCFyZWcpIHsKLSAg
ICAgICAgICAgIGRhdGFMb2coIkludmFsaWQgbGl2ZU91dHMgZW50cnkgaW46ICIsICp0aGlzLCAi
XG4iKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmVzdWx0LnNldChyZWcpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1SZWdpc3RlclNldCBTdGFja01hcHM6OlJlY29yZDo6dXNlZFJlZ2lzdGVyU2V0KCkgY29u
c3QKLXsKLSAgICBSZWdpc3RlclNldCByZXN1bHQ7Ci0gICAgcmVzdWx0Lm1lcmdlKGxvY2F0aW9u
U2V0KCkpOwotICAgIHJlc3VsdC5tZXJnZShsaXZlT3V0c1NldCgpKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1ib29sIFN0YWNrTWFwczo6cGFyc2UoRGF0YVZpZXcqIHZpZXcpCi17Ci0gICAg
UGFyc2VDb250ZXh0IGNvbnRleHQ7Ci0gICAgY29udGV4dC5vZmZzZXQgPSAwOwotICAgIGNvbnRl
eHQudmlldyA9IHZpZXc7Ci0gICAgCi0gICAgdmVyc2lvbiA9IGNvbnRleHQudmVyc2lvbiA9IGNv
bnRleHQudmlldy0+cmVhZDx1aW50OF90Pihjb250ZXh0Lm9mZnNldCwgdHJ1ZSk7Ci0KLSAgICBj
b250ZXh0LnZpZXctPnJlYWQ8dWludDhfdD4oY29udGV4dC5vZmZzZXQsIHRydWUpOyAvLyBSZXNl
cnZlZAotICAgIGNvbnRleHQudmlldy0+cmVhZDx1aW50OF90Pihjb250ZXh0Lm9mZnNldCwgdHJ1
ZSk7IC8vIFJlc2VydmVkCi0gICAgY29udGV4dC52aWV3LT5yZWFkPHVpbnQ4X3Q+KGNvbnRleHQu
b2Zmc2V0LCB0cnVlKTsgLy8gUmVzZXJ2ZWQKLQotICAgIHVpbnQzMl90IG51bUZ1bmN0aW9uczsK
LSAgICB1aW50MzJfdCBudW1Db25zdGFudHM7Ci0gICAgdWludDMyX3QgbnVtUmVjb3JkczsKLSAg
ICAKLSAgICBudW1GdW5jdGlvbnMgPSBjb250ZXh0LnZpZXctPnJlYWQ8dWludDMyX3Q+KGNvbnRl
eHQub2Zmc2V0LCB0cnVlKTsKLSAgICBpZiAoY29udGV4dC52ZXJzaW9uID49IDEpIHsKLSAgICAg
ICAgbnVtQ29uc3RhbnRzID0gY29udGV4dC52aWV3LT5yZWFkPHVpbnQzMl90Pihjb250ZXh0Lm9m
ZnNldCwgdHJ1ZSk7Ci0gICAgICAgIG51bVJlY29yZHMgPSBjb250ZXh0LnZpZXctPnJlYWQ8dWlu
dDMyX3Q+KGNvbnRleHQub2Zmc2V0LCB0cnVlKTsKLSAgICB9Ci0gICAgd2hpbGUgKG51bUZ1bmN0
aW9ucy0tKQotICAgICAgICBzdGFja1NpemVzLmFwcGVuZChyZWFkT2JqZWN0PFN0YWNrU2l6ZT4o
Y29udGV4dCkpOwotICAgIAotICAgIGlmICghY29udGV4dC52ZXJzaW9uKQotICAgICAgICBudW1D
b25zdGFudHMgPSBjb250ZXh0LnZpZXctPnJlYWQ8dWludDMyX3Q+KGNvbnRleHQub2Zmc2V0LCB0
cnVlKTsKLSAgICB3aGlsZSAobnVtQ29uc3RhbnRzLS0pCi0gICAgICAgIGNvbnN0YW50cy5hcHBl
bmQocmVhZE9iamVjdDxDb25zdGFudD4oY29udGV4dCkpOwotICAgIAotICAgIGlmICghY29udGV4
dC52ZXJzaW9uKQotICAgICAgICBudW1SZWNvcmRzID0gY29udGV4dC52aWV3LT5yZWFkPHVpbnQz
Ml90Pihjb250ZXh0Lm9mZnNldCwgdHJ1ZSk7Ci0gICAgd2hpbGUgKG51bVJlY29yZHMtLSkgewot
ICAgICAgICBSZWNvcmQgcmVjb3JkOwotICAgICAgICBpZiAoIXJlY29yZC5wYXJzZShjb250ZXh0
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmVjb3Jkcy5hcHBlbmQocmVj
b3JkKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU3RhY2tNYXBz
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgb3V0LnByaW50KCJWZXJzaW9u
OiIsIHZlcnNpb24sICIsIFN0YWNrU2l6ZXNbIiwgbGlzdER1bXAoc3RhY2tTaXplcyksICJdLCBD
b25zdGFudHM6WyIsIGxpc3REdW1wKGNvbnN0YW50cyksICJdLCBSZWNvcmRzOlsiLCBsaXN0RHVt
cChyZWNvcmRzKSwgIl0iKTsKLX0KLQotdm9pZCBTdGFja01hcHM6OmR1bXBNdWx0aWxpbmUoUHJp
bnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4KSBjb25zdAotewotICAgIG91dC5wcmlu
dChwcmVmaXgsICJWZXJzaW9uOiAiLCB2ZXJzaW9uLCAiXG4iKTsKLSAgICBvdXQucHJpbnQocHJl
Zml4LCAiU3RhY2tTaXplczpcbiIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGFj
a1NpemVzLnNpemUoKTsgKytpKQotICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICAgICIsIHN0
YWNrU2l6ZXNbaV0sICJcbiIpOwotICAgIG91dC5wcmludChwcmVmaXgsICJDb25zdGFudHM6XG4i
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29uc3RhbnRzLnNpemUoKTsgKytpKQot
ICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICAgICIsIGNvbnN0YW50c1tpXSwgIlxuIik7Ci0g
ICAgb3V0LnByaW50KHByZWZpeCwgIlJlY29yZHM6XG4iKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcmVjb3Jkcy5zaXplKCk7ICsraSkKLSAgICAgICAgb3V0LnByaW50KHByZWZpeCwg
IiAgICAiLCByZWNvcmRzW2ldLCAiXG4iKTsKLX0KLQotU3RhY2tNYXBzOjpSZWNvcmRNYXAgU3Rh
Y2tNYXBzOjpjb21wdXRlUmVjb3JkTWFwKCkgY29uc3QKLXsKLSAgICBSZWNvcmRNYXAgcmVzdWx0
OwotICAgIGZvciAodW5zaWduZWQgaSA9IHJlY29yZHMuc2l6ZSgpOyBpLS07KQotICAgICAgICBy
ZXN1bHQuYWRkKHJlY29yZHNbaV0ucGF0Y2hwb2ludElELCBWZWN0b3I8UmVjb3JkQW5kSW5kZXg+
KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoUmVjb3JkQW5kSW5kZXh7IHJlY29yZHNbaV0sIGkg
fSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdW5zaWduZWQgU3RhY2tNYXBzOjpzdGFja1Np
emUoKSBjb25zdAotewotICAgIFJFTEVBU0VfQVNTRVJUKHN0YWNrU2l6ZXMuc2l6ZSgpID09IDEp
OwotCi0gICAgcmV0dXJuIHN0YWNrU2l6ZXNbMF0uc2l6ZTsKLX0KLQotfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkZUTAotCi1uYW1lc3BhY2UgV1RGIHsKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzo6RlRM
OwotCi12b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgU3RhY2tNYXBzOjpMb2Nh
dGlvbjo6S2luZCBraW5kKQotewotICAgIHN3aXRjaCAoa2luZCkgewotICAgIGNhc2UgU3RhY2tN
YXBzOjpMb2NhdGlvbjo6VW5wcm9jZXNzZWQ6Ci0gICAgICAgIG91dC5wcmludCgiVW5wcm9jZXNz
ZWQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgU3RhY2tNYXBzOjpMb2NhdGlvbjo6UmVn
aXN0ZXI6Ci0gICAgICAgIG91dC5wcmludCgiUmVnaXN0ZXIiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgU3RhY2tNYXBzOjpMb2NhdGlvbjo6RGlyZWN0OgotICAgICAgICBvdXQucHJpbnQo
IkRpcmVjdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBTdGFja01hcHM6OkxvY2F0aW9u
OjpJbmRpcmVjdDoKLSAgICAgICAgb3V0LnByaW50KCJJbmRpcmVjdCIpOwotICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBTdGFja01hcHM6OkxvY2F0aW9uOjpDb25zdGFudDoKLSAgICAgICAgb3V0
LnByaW50KCJDb25zdGFudCIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBTdGFja01hcHM6
OkxvY2F0aW9uOjpDb25zdGFudEluZGV4OgotICAgICAgICBvdXQucHJpbnQoIkNvbnN0YW50SW5k
ZXgiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBkYXRhTG9nKCJVbnJlY29nbml6ZWQg
a2luZDogIiwgc3RhdGljX2Nhc3Q8aW50PihraW5kKSwgIlxuIik7Ci0gICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFj
a01hcHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNr
TWFwcy5oCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFN0YWNrTWFwcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2MCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgRlRMU3Rh
Y2tNYXBzX2gKLSNkZWZpbmUgRlRMU3RhY2tNYXBzX2gKLQotI2lmIEVOQUJMRShGVExfSklUKQot
Ci0jaW5jbHVkZSAiRGF0YVZpZXcuaCIKLSNpbmNsdWRlICJGVExEV0FSRlJlZ2lzdGVyLmgiCi0j
aW5jbHVkZSAiR1BSSW5mby5oIgotI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCi0jaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIE1hY3JvQXNzZW1ibGVy
OwotCi1uYW1lc3BhY2UgRlRMIHsKLQotc3RydWN0IFN0YWNrTWFwcyB7Ci0gICAgc3RydWN0IFBh
cnNlQ29udGV4dCB7Ci0gICAgICAgIHVuc2lnbmVkIHZlcnNpb247Ci0gICAgICAgIERhdGFWaWV3
KiB2aWV3OwotICAgICAgICB1bnNpZ25lZCBvZmZzZXQ7Ci0gICAgfTsKLSAgICAKLSAgICBzdHJ1
Y3QgQ29uc3RhbnQgewotICAgICAgICBpbnQ2NF90IGludGVnZXI7Ci0gICAgICAgIAotICAgICAg
ICB2b2lkIHBhcnNlKFBhcnNlQ29udGV4dCYpOwotICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3Q7Ci0gICAgfTsKLQotICAgIHN0cnVjdCBTdGFja1NpemUgewotICAgICAg
ICB1aW50NjRfdCBmdW5jdGlvbk9mZnNldDsKLSAgICAgICAgdWludDY0X3Qgc2l6ZTsKLQotICAg
ICAgICB2b2lkIHBhcnNlKFBhcnNlQ29udGV4dCYpOwotICAgICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKLSAgICB9OwotCi0gICAgc3RydWN0IExvY2F0aW9uIHsKLSAgICAgICAg
ZW51bSBLaW5kIDogaW50OF90IHsKLSAgICAgICAgICAgIFVucHJvY2Vzc2VkLAotICAgICAgICAg
ICAgUmVnaXN0ZXIsCi0gICAgICAgICAgICBEaXJlY3QsCi0gICAgICAgICAgICBJbmRpcmVjdCwK
LSAgICAgICAgICAgIENvbnN0YW50LAotICAgICAgICAgICAgQ29uc3RhbnRJbmRleAotICAgICAg
ICB9OwotICAgICAgICAKLSAgICAgICAgRFdBUkZSZWdpc3RlciBkd2FyZlJlZzsKLSAgICAgICAg
dWludDhfdCBzaXplOwotICAgICAgICBLaW5kIGtpbmQ7Ci0gICAgICAgIGludDMyX3Qgb2Zmc2V0
OwotICAgICAgICAKLSAgICAgICAgdm9pZCBwYXJzZShQYXJzZUNvbnRleHQmKTsKLSAgICAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwotICAgICAgICAKLSAgICAgICAgR1BS
UmVnIGRpcmVjdEdQUigpIGNvbnN0OwotICAgICAgICB2b2lkIHJlc3RvcmVJbnRvKE1hY3JvQXNz
ZW1ibGVyJiwgU3RhY2tNYXBzJiwgY2hhciogc2F2ZWRSZWdpc3RlcnMsIEdQUlJlZyByZXN1bHQp
IGNvbnN0OwotICAgIH07Ci0gICAgCi0gICAgLy8gRklYTUU6IEludmVzdGlnYXRlIGhvdyBtdWNo
IG1lbW9yeSB0aGlzIHRha2VzIGFuZCBwb3NzaWJseSBwcnVuZSBpdCBmcm9tIHRoZQotICAgIC8v
IGZvcm1hdCB3ZSBrZWVwIGFyb3VuZCBpbiBGVEw6OkpJVENvZGUuIEkgc3VzcGVjdCB0aGF0IGl0
IHdvdWxkIGJlIG1vc3QgYXdlc29tZSB0bwotICAgIC8vIGhhdmUgYSBDb21wYWN0U3RhY2tNYXBz
IHN0cnVjdCB0aGF0IGxvc3NpbHkgc3RvcmVzIG9ubHkgdGhhdCBzdWJzZXQgb2YgU3RhY2tNYXBz
Ci0gICAgLy8gYW5kIFJlY29yZCB0aGF0IHdlIGFjdHVhbGx5IG5lZWQgZm9yIE9TUiBleGl0Lgot
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzA4MDIKLSAg
ICBzdHJ1Y3QgTGl2ZU91dCB7Ci0gICAgICAgIERXQVJGUmVnaXN0ZXIgZHdhcmZSZWc7Ci0gICAg
ICAgIHVpbnQ4X3Qgc2l6ZTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgcGFyc2UoUGFyc2VDb250
ZXh0Jik7Ci0gICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKLSAgICB9
OwotICAgIAotICAgIHN0cnVjdCBSZWNvcmQgewotICAgICAgICB1aW50MzJfdCBwYXRjaHBvaW50
SUQ7Ci0gICAgICAgIHVpbnQzMl90IGluc3RydWN0aW9uT2Zmc2V0OwotICAgICAgICB1aW50MTZf
dCBmbGFnczsKLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxMb2NhdGlvbj4gbG9jYXRpb25zOwot
ICAgICAgICBWZWN0b3I8TGl2ZU91dD4gbGl2ZU91dHM7Ci0gICAgICAgIAotICAgICAgICBib29s
IHBhcnNlKFBhcnNlQ29udGV4dCYpOwotICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKLSAgICAgICAgCi0gICAgICAgIFJlZ2lzdGVyU2V0IGxpdmVPdXRzU2V0KCkgY29uc3Q7
Ci0gICAgICAgIFJlZ2lzdGVyU2V0IGxvY2F0aW9uU2V0KCkgY29uc3Q7Ci0gICAgICAgIFJlZ2lz
dGVyU2V0IHVzZWRSZWdpc3RlclNldCgpIGNvbnN0OwotICAgIH07Ci0KLSAgICB1bnNpZ25lZCB2
ZXJzaW9uOwotICAgIFZlY3RvcjxTdGFja1NpemU+IHN0YWNrU2l6ZXM7Ci0gICAgVmVjdG9yPENv
bnN0YW50PiBjb25zdGFudHM7Ci0gICAgVmVjdG9yPFJlY29yZD4gcmVjb3JkczsKLSAgICAKLSAg
ICBib29sIHBhcnNlKERhdGFWaWV3Kik7IC8vIFJldHVybnMgdHJ1ZSBvbiBwYXJzZSBzdWNjZXNz
LCBmYWxzZSBvbiBmYWlsdXJlLiBGYWlsdXJlIG1lYW5zIHRoYXQgTExWTSBpcyBzaWduYWxpbmcg
Y29tcGlsZSBmYWlsdXJlIHRvIHVzLgotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OwotICAgIHZvaWQgZHVtcE11bHRpbGluZShQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZp
eCkgY29uc3Q7Ci0gICAgCi0gICAgc3RydWN0IFJlY29yZEFuZEluZGV4IHsKLSAgICAgICAgUmVj
b3JkIHJlY29yZDsKLSAgICAgICAgdWludDMyX3QgaW5kZXg7Ci0gICAgfTsKLSAgICB0eXBlZGVm
IEhhc2hNYXA8dWludDMyX3QsIFZlY3RvcjxSZWNvcmRBbmRJbmRleD4sIFdURjo6SW50SGFzaDx1
aW50MzJfdD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBS
ZWNvcmRNYXA7Ci0gICAgCi0gICAgUmVjb3JkTWFwIGNvbXB1dGVSZWNvcmRNYXAoKSBjb25zdDsK
LQotICAgIHVuc2lnbmVkIHN0YWNrU2l6ZSgpIGNvbnN0OwotCi0gICAgdW5zaWduZWQgc3RhY2tT
aXplRm9yTG9jYWxzKCkgY29uc3QKLSAgICB7Ci0jaWYgQ1BVKFg4Nl82NCkKLSAgICAgICAgLy8g
TExWTSB3aWxsIHN0b3JlIGZwIGluIHRoZSBjYWxsIGZyYW1lCi0gICAgICAgIHJldHVybiBzdGFj
a1NpemUoKSAtIHNpemVvZih2b2lkKik7Ci0jZWxpZiBDUFUoQVJNNjQpCi0gICAgICAgIC8vIExM
Vk0gd2lsbCBzdG9yZSBmcCAmIGxyIGluIHRoZSBjYWxsIGZyYW1lCi0gICAgICAgIHJldHVybiBz
dGFja1NpemUoKSAtIDIgKiBzaXplb2Yodm9pZCopOwotI2Vsc2UKLSAgICAgICAgVU5SRUFDSEFC
TEVfRk9SX1BMQVRGT1JNKCk7Ci0jZW5kaWYKLSAgICB9Ci19OwotCi19IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCi0KLW5hbWVzcGFjZSBXVEYgewotCi12b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mLCBKU0M6OkZUTDo6U3RhY2tNYXBzOjpMb2NhdGlvbjo6S2luZCk7Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0KLSNlbmRpZiAvLyBGVExT
dGFja01hcHNfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcAko
cmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDIzICs5NCw2IEBAIFN0YXRlOjp+U3RhdGUoKQogI2Vu
ZGlmCiB9CiAKLXZvaWQgU3RhdGU6OmR1bXBTdGF0ZShjb25zdCBjaGFyKiB3aGVuKQotewotICAg
IGR1bXBTdGF0ZShtb2R1bGUsIHdoZW4pOwotfQotCi12b2lkIFN0YXRlOjpkdW1wU3RhdGUoTE1v
ZHVsZSBtb2R1bGUsIGNvbnN0IGNoYXIqIHdoZW4pCi17Ci0jaWYgRlRMX1VTRVNfQjMKLSAgICBV
TlVTRURfUEFSQU0obW9kdWxlKTsKLSAgICBpZiAoIXdoZW4gfHwgISF3aGVuKQotICAgICAgICBD
UkFTSCgpOwotI2Vsc2UKLSAgICBkYXRhTG9nKCJMTFZNIElSIGZvciAiLCBDb2RlQmxvY2tXaXRo
SklUVHlwZShncmFwaC5tX2NvZGVCbG9jaywgRlRMOjpKSVRDb2RlOjpGVExKSVQpLCAiICIsIHdo
ZW4sICI6XG4iKTsKLSAgICBkdW1wTW9kdWxlKG1vZHVsZSk7Ci0jZW5kaWYKLX0KLQogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEz
ICszMywxMSBAQAogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiRlRMQWJicmV2aWF0
ZWRUeXBlcy5oIgogI2luY2x1ZGUgIkZUTEdlbmVyYXRlZEZ1bmN0aW9uLmgiCi0jaW5jbHVkZSAi
RlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgogI2lu
Y2x1ZGUgIkZUTEpJVEZpbmFsaXplci5oIgogI2luY2x1ZGUgIkZUTEpTQ2FsbC5oIgogI2luY2x1
ZGUgIkZUTEpTQ2FsbFZhcmFyZ3MuaCIKICNpbmNsdWRlICJGVExKU1RhaWxDYWxsLmgiCi0jaW5j
bHVkZSAiRlRMU3RhY2tNYXBzLmgiCiAjaW5jbHVkZSA8d3RmL0JveC5oPgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgogCkBAIC03NCw1MyArNzIsMTYgQEAgcHVibGljOgogICAgIC8vIE5v
bmUgb2YgdGhlc2UgdGhpbmdzIGlzIG93bmVkIGJ5IFN0YXRlLiBJdCBpcyB0aGUgcmVzcG9uc2li
aWxpdHkgb2YKICAgICAvLyBGVEwgcGhhc2VzIHRvIHByb3Blcmx5IG1hbmFnZSB0aGUgbGlmZWN5
Y2xlIG9mIHRoZSBtb2R1bGUgYW5kIGZ1bmN0aW9uLgogICAgIERGRzo6R3JhcGgmIGdyYXBoOwot
I2lmIEZUTF9VU0VTX0IzCiAgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpQcm9jZWR1cmU+IHByb2M7
Ci0jZW5kaWYKLSAgICBMQ29udGV4dCBjb250ZXh0OwotICAgIExNb2R1bGUgbW9kdWxlOwotICAg
IExWYWx1ZSBmdW5jdGlvbjsKLSAgICBib29sIGFsbG9jYXRpb25GYWlsZWQgeyBmYWxzZSB9OyAv
LyBUaHJvdyBvdXQgdGhlIGNvbXBpbGF0aW9uIG9uY2UgTExWTSByZXR1cm5zLgorICAgIGJvb2wg
YWxsb2NhdGlvbkZhaWxlZCB7IGZhbHNlIH07IC8vIFRocm93IG91dCB0aGUgY29tcGlsYXRpb24g
b25jZSBCMyByZXR1cm5zLgogICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRDb2RlOwogICAgIEdlbmVy
YXRlZEZ1bmN0aW9uIGdlbmVyYXRlZEZ1bmN0aW9uOwogICAgIEpJVEZpbmFsaXplciogZmluYWxp
emVyOwotI2lmIEZUTF9VU0VTX0IzCiAgICAgLy8gVG9wLWxldmVsIGV4Y2VwdGlvbiBoYW5kbGVy
LiBKdW1wIGhlcmUgaWYgeW91IGtub3cgdGhhdCB5b3UgaGF2ZSB0byBnZW5lcmljVW53aW5kKCkg
YW5kIHRoZXJlCiAgICAgLy8gYXJlIG5vIGFwcGxpY2FibGUgY2F0Y2ggYmxvY2tzIGFueXdoZXJl
IGluIHRoZSBHcmFwaC4KICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZGVm
YXVsdEV4Y2VwdGlvbkhhbmRsZTsKICAgICBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD4gZXhjZXB0
aW9uSGFuZGxlciB7IEJveDxDQ2FsbEhlbHBlcnM6OkxhYmVsPjo6Y3JlYXRlKCkgfTsKICAgICBC
Mzo6U3RhY2tTbG90KiBjYXB0dXJlZFZhbHVlIHsgbnVsbHB0ciB9OwotI2Vsc2UgLy8gRlRMX1VT
RVNfQjMKLSAgICB1bnNpZ25lZCBoYW5kbGVTdGFja092ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJ
RCB7IFVJTlRfTUFYIH07Ci0gICAgdW5zaWduZWQgaGFuZGxlRXhjZXB0aW9uU3RhY2ttYXBJRCB7
IFVJTlRfTUFYIH07Ci0gICAgdW5zaWduZWQgY2FwdHVyZWRTdGFja21hcElEIHsgVUlOVF9NQVgg
fTsKLSAgICB1bnNpZ25lZCB2YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQgeyBVSU5UX01BWCB9
OwotICAgIHVuc2lnbmVkIGV4Y2VwdGlvbkhhbmRsaW5nU3BpbGxTbG90U3RhY2ttYXBJRCB7IFVJ
TlRfTUFYIH07Ci0jZW5kaWYgLy8gRlRMX1VTRV9CMwotICAgIFNlZ21lbnRlZFZlY3RvcjxHZXRC
eUlkRGVzY3JpcHRvcj4gZ2V0QnlJZHM7Ci0gICAgU2VnbWVudGVkVmVjdG9yPFB1dEJ5SWREZXNj
cmlwdG9yPiBwdXRCeUlkczsKLSAgICBTZWdtZW50ZWRWZWN0b3I8Q2hlY2tJbkRlc2NyaXB0b3I+
IGNoZWNrSW5zOwotICAgIFNlZ21lbnRlZFZlY3RvcjxCaW5hcnlPcERlc2NyaXB0b3I+IGJpbmFy
eU9wczsKLSAgICBTZWdtZW50ZWRWZWN0b3I8TGF6eVNsb3dQYXRoRGVzY3JpcHRvcj4gbGF6eVNs
b3dQYXRoczsKLSNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKLSAgICBTZWdtZW50ZWRWZWN0b3I8UHJv
YmVEZXNjcmlwdG9yPiBwcm9iZXM7Ci0jZW5kaWYKLSNpZiAhRlRMX1VTRVNfQjMKLSAgICBWZWN0
b3I8SlNDYWxsPiBqc0NhbGxzOwotICAgIFZlY3RvcjxKU0NhbGxWYXJhcmdzPiBqc0NhbGxWYXJh
cmdzZXM7Ci0gICAgVmVjdG9yPEpTVGFpbENhbGw+IGpzVGFpbENhbGxzOwotICAgIFZlY3RvcjxD
U3RyaW5nPiBjb2RlU2VjdGlvbk5hbWVzOwotICAgIFZlY3RvcjxDU3RyaW5nPiBkYXRhU2VjdGlv
bk5hbWVzOwotICAgIFNlZ21lbnRlZFZlY3RvcjxPU1JFeGl0RGVzY3JpcHRvckltcGw+IG9zckV4
aXREZXNjcmlwdG9ySW1wbHM7Ci0jZW5kaWYgLy8gIUZUTF9VU0VTX0IzCi0gICAgdm9pZCogdW53
aW5kRGF0YVNlY3Rpb247Ci0gICAgc2l6ZV90IHVud2luZERhdGFTZWN0aW9uU2l6ZTsKLSAgICBS
ZWZQdHI8RGF0YVNlY3Rpb24+IHN0YWNrbWFwc1NlY3Rpb247Ci0gICAgCi0gICAgdm9pZCBkdW1w
U3RhdGUoY29uc3QgY2hhciogd2hlbik7Ci0gICAgdm9pZCBkdW1wU3RhdGUoTE1vZHVsZSwgY29u
c3QgY2hhciogd2hlbik7Ci0KLSAgICBIYXNoU2V0PENTdHJpbmc+IG5hdGl2ZUxvYWRlZExpYnJh
cmllczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMVW53aW5kSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExVbndpbmRJbmZvLmNwcAkocmV2aXNpb24gMTk2Njg1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExVbndpbmRJbmZvLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwxMDI1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1
bmcgRWxlY3Ryb25pY3MKLSAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFN6ZWdl
ZAotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLSAqCi0gKiBVbml2ZXJzaXR5IG9mIElsbGlub2lzL05DU0EKLSAqIE9wZW4g
U291cmNlIExpY2Vuc2UKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxNCBieSB0aGUgY29u
dHJpYnV0b3JzIG9mIExMVk0vbGliYysrYWJpIHByb2plY3QuCi0gKgotICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYnk6Ci0gKgotICogICAgTExWTSBUZWFtCi0gKgot
ICogICAgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduCi0gKgotICog
ICAgaHR0cDovL2xsdm0ub3JnCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg
ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgotICogdGhp
cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3
YXJlIiksIHRvIGRlYWwgd2l0aAotICogdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s
IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwotICogdXNlLCBjb3B5
LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Ig
c2VsbCBjb3BpZXMKLSAqIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv
IHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwotICogc28sIHN1YmplY3QgdG8g
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICog
ICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
cy4KLSAqCi0gKiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAqICAgICAgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMgaW4gdGhlCi0gKiAgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogICAgKiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgTExWTSBUZWFt
LCBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0Ci0gKiAgICAgIFVyYmFuYS1DaGFtcGFpZ24sIG5v
ciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0bwotICogICAgICBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYwotICogICAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z
IEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg
VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTCi0gKiBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM
IFRIRQotICogQ09OVFJJQlVUT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1Ig
QU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g
QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICog
T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBP
VEhFUiBERUFMSU5HUyBXSVRIIFRIRQotICogU09GVFdBUkUuCi0gKgotICogPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0gKgotICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTQgYnkgdGhlIGNvbnRyaWJ1
dG9ycyBvZiBMTFZNL2xpYmMrK2FiaSBwcm9qZWN0LgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVy
ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNv
cHkKLSAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl
cyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi0gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCBy
ZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi0gKiB0
byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu
c2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0
IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSAqIGZ1cm5pc2hlZCB0byBkbyBzbywg
c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNv
cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVk
ZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3
YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB
UlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVU
IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRQotICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC
TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVS
IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJP
TSwKLSAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV
U0UgT1IgT1RIRVIgREVBTElOR1MgSU4KLSAqIFRIRSBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRlRMVW53aW5kSW5mby5oIgotCi0jaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCi0jaW5jbHVkZSAiUmVnaXN0ZXJBdE9mZnNldExpc3QuaCIKLQotI2lmIEVOQUJM
RShGVExfSklUKQotCi0jaWYgT1MoREFSV0lOKQotI2luY2x1ZGUgPG1hY2gtby9jb21wYWN0X3Vu
d2luZF9lbmNvZGluZy5oPgotI2VuZGlmCi0jaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+Ci0KLW5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKLQotbmFtZXNwYWNlIHsKLSNpZiBPUyhEQVJX
SU4pCi1zdHJ1Y3QgQ29tcGFjdFVud2luZCB7Ci0gICAgdm9pZCogZnVuY3Rpb247Ci0gICAgdWlu
dDMyX3Qgc2l6ZTsKLSAgICBjb21wYWN0X3Vud2luZF9lbmNvZGluZ190IGVuY29kaW5nOwotICAg
IHZvaWQqIHBlcnNvbmFsaXR5OwotICAgIHZvaWQqIGxzZGE7Ci19OwotI2VsaWYgT1MoTElOVVgp
Ci0vLyBEV0FSRiB1bndpbmQgaW5zdHJ1Y3Rpb25zCi1lbnVtIHsKLSAgICBEV19DRkFfbm9wICAg
ICAgICAgICAgICAgICA9IDB4MCwKLSAgICBEV19DRkFfc2V0X2xvYyAgICAgICAgICAgICA9IDB4
MSwKLSAgICBEV19DRkFfYWR2YW5jZV9sb2MxICAgICAgICA9IDB4MiwKLSAgICBEV19DRkFfYWR2
YW5jZV9sb2MyICAgICAgICA9IDB4MywKLSAgICBEV19DRkFfYWR2YW5jZV9sb2M0ICAgICAgICA9
IDB4NCwKLSAgICBEV19DRkFfb2Zmc2V0X2V4dGVuZGVkICAgICA9IDB4NSwKLSAgICBEV19DRkFf
ZGVmX2NmYSAgICAgICAgICAgICA9IDB4QywKLSAgICBEV19DRkFfZGVmX2NmYV9yZWdpc3RlciAg
ICA9IDB4RCwKLSAgICBEV19DRkFfZGVmX2NmYV9vZmZzZXQgICAgICA9IDB4RSwKLSAgICBEV19D
RkFfb2Zmc2V0X2V4dGVuZGVkX3NmID0gMHgxMSwKLSAgICBEV19DRkFfZGVmX2NmYV9zZiAgICAg
ICAgID0gMHgxMiwKLSAgICBEV19DRkFfZGVmX2NmYV9vZmZzZXRfc2YgID0gMHgxMywKLSAgICAv
LyBoaWdoIDIgYml0cyBhcmUgMHgxLCBsb3dlciA2IGJpdHMgYXJlIGRlbHRhCi0gICAgRFdfQ0ZB
X2FkdmFuY2VfbG9jICAgICAgICA9IDB4NDAsCi0gICAgLy8gaGlnaCAyIGJpdHMgYXJlIDB4Miwg
bG93ZXIgNiBiaXRzIGFyZSByZWdpc3RlcgotICAgIERXX0NGQV9vZmZzZXQgICAgICAgICAgICAg
PSAweDgwCi19OwotCi1lbnVtIHsKLSAgICBEV19DRkFfb3BlcmFuZF9tYXNrID0gMHgzRiAvLyBs
b3cgNiBiaXRzIG1hc2sgZm9yIG9wY29kZS1lbmNvZGVkIG9wZXJhbmRzIGluIERXX0NGQV9hZHZh
bmNlX2xvYyBhbmQgRFdfQ0ZBX29mZnNldAotfTsKLQotLy8gRlNGIGV4Y2VwdGlvbiBoYW5kbGlu
ZyBQb2ludGVyLUVuY29kaW5nIGNvbnN0YW50cwotZW51bSB7Ci0gICAgRFdfRUhfUEVfcHRyICAg
ICAgID0gMHgwMCwKLSAgICBEV19FSF9QRV91bGViMTI4ICAgPSAweDAxLAotICAgIERXX0VIX1BF
X3VkYXRhMiAgICA9IDB4MDIsCi0gICAgRFdfRUhfUEVfdWRhdGE0ICAgID0gMHgwMywKLSAgICBE
V19FSF9QRV91ZGF0YTggICAgPSAweDA0LAotICAgIERXX0VIX1BFX3NsZWIxMjggICA9IDB4MDks
Ci0gICAgRFdfRUhfUEVfc2RhdGEyICAgID0gMHgwQSwKLSAgICBEV19FSF9QRV9zZGF0YTQgICAg
PSAweDBCLAotICAgIERXX0VIX1BFX3NkYXRhOCAgICA9IDB4MEMsCi0gICAgRFdfRUhfUEVfYWJz
cHRyICAgID0gMHgwMCwKLSAgICBEV19FSF9QRV9wY3JlbCAgICAgPSAweDEwLAotICAgIERXX0VI
X1BFX2luZGlyZWN0ICA9IDB4ODAKLX07Ci0KLWVudW0gewotICAgIERXX0VIX1BFX3JlbGF0aXZl
X21hc2sgPSAweDcwCi19OwotCi0vLyA2NC1iaXQgeDg2XzY0IHJlZ2lzdGVycwotZW51bSB7Ci0g
ICAgVU5XX1g4Nl82NF9yYnggPSAgMywKLSAgICBVTldfWDg2XzY0X3JicCA9ICA2LAotICAgIFVO
V19YODZfNjRfcjEyID0gMTIsCi0gICAgVU5XX1g4Nl82NF9yMTMgPSAxMywKLSAgICBVTldfWDg2
XzY0X3IxNCA9IDE0LAotICAgIFVOV19YODZfNjRfcjE1ID0gMTUKLX07Ci0KLWVudW0gewotICAg
IERXX1g4Nl82NF9SRVRfYWRkciA9IDE2Ci19OwotCi1lbnVtIHsKLSAgICBVTldfQVJNNjRfeDAg
PSAwLAotICAgIFVOV19BUk02NF94MSA9IDEsCi0gICAgVU5XX0FSTTY0X3gyID0gMiwKLSAgICBV
TldfQVJNNjRfeDMgPSAzLAotICAgIFVOV19BUk02NF94NCA9IDQsCi0gICAgVU5XX0FSTTY0X3g1
ID0gNSwKLSAgICBVTldfQVJNNjRfeDYgPSA2LAotICAgIFVOV19BUk02NF94NyA9IDcsCi0gICAg
VU5XX0FSTTY0X3g4ID0gOCwKLSAgICBVTldfQVJNNjRfeDkgPSA5LAotICAgIFVOV19BUk02NF94
MTAgPSAxMCwKLSAgICBVTldfQVJNNjRfeDExID0gMTEsCi0gICAgVU5XX0FSTTY0X3gxMiA9IDEy
LAotICAgIFVOV19BUk02NF94MTMgPSAxMywKLSAgICBVTldfQVJNNjRfeDE0ID0gMTQsCi0gICAg
VU5XX0FSTTY0X3gxNSA9IDE1LAotICAgIFVOV19BUk02NF94MTYgPSAxNiwKLSAgICBVTldfQVJN
NjRfeDE3ID0gMTcsCi0gICAgVU5XX0FSTTY0X3gxOCA9IDE4LAotICAgIFVOV19BUk02NF94MTkg
PSAxOSwKLSAgICBVTldfQVJNNjRfeDIwID0gMjAsCi0gICAgVU5XX0FSTTY0X3gyMSA9IDIxLAot
ICAgIFVOV19BUk02NF94MjIgPSAyMiwKLSAgICBVTldfQVJNNjRfeDIzID0gMjMsCi0gICAgVU5X
X0FSTTY0X3gyNCA9IDI0LAotICAgIFVOV19BUk02NF94MjUgPSAyNSwKLSAgICBVTldfQVJNNjRf
eDI2ID0gMjYsCi0gICAgVU5XX0FSTTY0X3gyNyA9IDI3LAotICAgIFVOV19BUk02NF94MjggPSAy
OCwKLSAgICBVTldfQVJNNjRfZnAgPSAyOSwKLSAgICBVTldfQVJNNjRfeDMwID0gMzAsCi0gICAg
VU5XX0FSTTY0X3NwID0gMzEsCi0gICAgVU5XX0FSTTY0X3YwID0gNjQsCi0gICAgVU5XX0FSTTY0
X3YxID0gNjUsCi0gICAgVU5XX0FSTTY0X3YyID0gNjYsCi0gICAgVU5XX0FSTTY0X3YzID0gNjcs
Ci0gICAgVU5XX0FSTTY0X3Y0ID0gNjgsCi0gICAgVU5XX0FSTTY0X3Y1ID0gNjksCi0gICAgVU5X
X0FSTTY0X3Y2ID0gNzAsCi0gICAgVU5XX0FSTTY0X3Y3ID0gNzEsCi0gICAgVU5XX0FSTTY0X3Y4
ID0gNzIsCi0gICAgVU5XX0FSTTY0X3Y5ID0gNzMsCi0gICAgVU5XX0FSTTY0X3YxMCA9IDc0LAot
ICAgIFVOV19BUk02NF92MTEgPSA3NSwKLSAgICBVTldfQVJNNjRfdjEyID0gNzYsCi0gICAgVU5X
X0FSTTY0X3YxMyA9IDc3LAotICAgIFVOV19BUk02NF92MTQgPSA3OCwKLSAgICBVTldfQVJNNjRf
djE1ID0gNzksCi0gICAgVU5XX0FSTTY0X3YxNiA9IDgwLAotICAgIFVOV19BUk02NF92MTcgPSA4
MSwKLSAgICBVTldfQVJNNjRfdjE4ID0gODIsCi0gICAgVU5XX0FSTTY0X3YxOSA9IDgzLAotICAg
IFVOV19BUk02NF92MjAgPSA4NCwKLSAgICBVTldfQVJNNjRfdjIxID0gODUsCi0gICAgVU5XX0FS
TTY0X3YyMiA9IDg2LAotICAgIFVOV19BUk02NF92MjMgPSA4NywKLSAgICBVTldfQVJNNjRfdjI0
ID0gODgsCi0gICAgVU5XX0FSTTY0X3YyNSA9IDg5LAotICAgIFVOV19BUk02NF92MjYgPSA5MCwK
LSAgICBVTldfQVJNNjRfdjI3ID0gOTEsCi0gICAgVU5XX0FSTTY0X3YyOCA9IDkyLAotICAgIFVO
V19BUk02NF92MjkgPSA5MywKLSAgICBVTldfQVJNNjRfdjMwID0gOTQsCi0gICAgVU5XX0FSTTY0
X3YzMSA9IDk1Ci19OwotCi1zdGF0aWMgdWludDhfdCBnZXQ4KHVpbnRwdHJfdCBhZGRyKSAgICB7
IHJldHVybiAqKCh1aW50OF90KilhZGRyKTsgfQotc3RhdGljIHVpbnQxNl90IGdldDE2KHVpbnRw
dHJfdCBhZGRyKSAgeyByZXR1cm4gKigodWludDE2X3QqKWFkZHIpOyB9Ci1zdGF0aWMgdWludDMy
X3QgZ2V0MzIodWludHB0cl90IGFkZHIpICB7IHJldHVybiAqKCh1aW50MzJfdCopYWRkcik7IH0K
LXN0YXRpYyB1aW50NjRfdCBnZXQ2NCh1aW50cHRyX3QgYWRkcikgIHsgcmV0dXJuICooKHVpbnQ2
NF90KilhZGRyKTsgfQotCi1zdGF0aWMgdWludHB0cl90IGdldFAodWludHB0cl90IGFkZHIpCi17
Ci0gICAgLy8gRklYTUU6IGFkZCBzdXBwb3J0IGZvciAzMiBiaXQgcG9pbnRlcnMgb24gMzIgYml0
IGFyY2hpdGVjdHVyZXMKLSAgICByZXR1cm4gZ2V0NjQoYWRkcik7Ci19Ci0KLXN0YXRpYyB1aW50
NjRfdCBnZXRVTEVCMTI4KHVpbnRwdHJfdCYgYWRkciwgdWludHB0cl90IGVuZCkKLXsKLSAgICBj
b25zdCB1aW50OF90KiBwID0gKHVpbnQ4X3QqKWFkZHI7Ci0gICAgY29uc3QgdWludDhfdCogcGVu
ZCA9ICh1aW50OF90KillbmQ7Ci0gICAgdWludDY0X3QgcmVzdWx0ID0gMDsKLSAgICBpbnQgYml0
ID0gMDsKLSAgICBkbyAgewotICAgICAgICB1aW50NjRfdCBiOwotCi0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHAgIT0gcGVuZCk7IC8vIHRydW5jYXRlZCB1bGViMTI4IGV4cHJlc3Npb24KLQotICAg
ICAgICBiID0gKnAgJiAweDdmOwotCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCEoYml0ID49IDY0
IHx8IGIgPDwgYml0ID4+IGJpdCAhPSBiKSk7IC8vIG1hbGZvcm1lZCB1bGViMTI4IGV4cHJlc3Np
b24KLQotICAgICAgICByZXN1bHQgfD0gYiA8PCBiaXQ7Ci0gICAgICAgIGJpdCArPSA3OwotICAg
IH0gd2hpbGUgKCpwKysgPj0gMHg4MCk7Ci0gICAgYWRkciA9ICh1aW50cHRyX3QpcDsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW50NjRfdCBnZXRTTEVCMTI4KHVpbnRwdHJfdCYg
YWRkciwgdWludHB0cl90IGVuZCkKLXsKLSAgICBjb25zdCB1aW50OF90KiBwID0gKHVpbnQ4X3Qq
KWFkZHI7Ci0gICAgY29uc3QgdWludDhfdCogcGVuZCA9ICh1aW50OF90KillbmQ7Ci0KLSAgICBp
bnQ2NF90IHJlc3VsdCA9IDA7Ci0gICAgaW50IGJpdCA9IDA7Ci0gICAgdWludDhfdCBieXRlOwot
ICAgIGRvIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQocCAhPSBwZW5kKTsgLy8gdHJ1bmNhdGVk
IHNsZWIxMjggZXhwcmVzc2lvbgotCi0gICAgICAgIGJ5dGUgPSAqcCsrOwotICAgICAgICByZXN1
bHQgfD0gKChieXRlICYgMHg3ZikgPDwgYml0KTsKLSAgICAgICAgYml0ICs9IDc7Ci0gICAgfSB3
aGlsZSAoYnl0ZSAmIDB4ODApOwotICAgIC8vIHNpZ24gZXh0ZW5kIG5lZ2F0aXZlIG51bWJlcnMK
LSAgICBpZiAoKGJ5dGUgJiAweDQwKSkKLSAgICAgICAgcmVzdWx0IHw9ICgtMUxMKSA8PCBiaXQ7
Ci0gICAgYWRkciA9ICh1aW50cHRyX3QpcDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0
aWMgdWludHB0cl90IGdldEVuY29kZWRQKHVpbnRwdHJfdCYgYWRkciwgdWludHB0cl90IGVuZCwg
dWludDhfdCBlbmNvZGluZykKLXsKLSAgICB1aW50cHRyX3Qgc3RhcnRBZGRyID0gYWRkcjsKLSAg
ICBjb25zdCB1aW50OF90KiBwID0gKHVpbnQ4X3QqKWFkZHI7Ci0gICAgdWludHB0cl90IHJlc3Vs
dDsKLQotICAgIC8vIGZpcnN0IGdldCB2YWx1ZQotICAgIHN3aXRjaCAoZW5jb2RpbmcgJiAweDBG
KSB7Ci0gICAgY2FzZSBEV19FSF9QRV9wdHI6Ci0gICAgICAgIHJlc3VsdCA9IGdldFAoYWRkcik7
Ci0gICAgICAgIHAgKz0gc2l6ZW9mKHVpbnRwdHJfdCk7Ci0gICAgICAgIGFkZHIgPSAodWludHB0
cl90KXA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRFdfRUhfUEVfdWxlYjEyODoKLSAgICAg
ICAgcmVzdWx0ID0gZ2V0VUxFQjEyOChhZGRyLCBlbmQpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIERXX0VIX1BFX3VkYXRhMjoKLSAgICAgICAgcmVzdWx0ID0gZ2V0MTYoYWRkcik7Ci0gICAg
ICAgIHAgKz0gMjsKLSAgICAgICAgYWRkciA9ICh1aW50cHRyX3QpcDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBEV19FSF9QRV91ZGF0YTQ6Ci0gICAgICAgIHJlc3VsdCA9IGdldDMyKGFkZHIp
OwotICAgICAgICBwICs9IDQ7Ci0gICAgICAgIGFkZHIgPSAodWludHB0cl90KXA7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRFdfRUhfUEVfdWRhdGE4OgotICAgICAgICByZXN1bHQgPSBnZXQ2
NChhZGRyKTsKLSAgICAgICAgcCArPSA4OwotICAgICAgICBhZGRyID0gKHVpbnRwdHJfdClwOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIERXX0VIX1BFX3NsZWIxMjg6Ci0gICAgICAgIHJlc3Vs
dCA9IGdldFNMRUIxMjgoYWRkciwgZW5kKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEV19F
SF9QRV9zZGF0YTI6Ci0gICAgICAgIHJlc3VsdCA9IChpbnQxNl90KWdldDE2KGFkZHIpOwotICAg
ICAgICBwICs9IDI7Ci0gICAgICAgIGFkZHIgPSAodWludHB0cl90KXA7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRFdfRUhfUEVfc2RhdGE0OgotICAgICAgICByZXN1bHQgPSAoaW50MzJfdCln
ZXQzMihhZGRyKTsKLSAgICAgICAgcCArPSA0OwotICAgICAgICBhZGRyID0gKHVpbnRwdHJfdClw
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERXX0VIX1BFX3NkYXRhODoKLSAgICAgICAgcmVz
dWx0ID0gZ2V0NjQoYWRkcik7Ci0gICAgICAgIHAgKz0gODsKLSAgICAgICAgYWRkciA9ICh1aW50
cHRyX3QpcDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gdW5rbm93biBwb2ludGVyIGVuY29kaW5nCi0gICAgfQot
Ci0gICAgLy8gdGhlbiBhZGQgcmVsYXRpdmUgb2Zmc2V0Ci0gICAgc3dpdGNoIChlbmNvZGluZyAm
IERXX0VIX1BFX3JlbGF0aXZlX21hc2spIHsKLSAgICBjYXNlIERXX0VIX1BFX2Fic3B0cjoKLSAg
ICAgICAgLy8gZG8gbm90aGluZwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERXX0VIX1BFX3Bj
cmVsOgotICAgICAgICByZXN1bHQgKz0gc3RhcnRBZGRyOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyB1bnN1cHBv
cnRlZCBvciB1bmtub3duIHBvaW50ZXIgZW5jb2RpbmcKLSAgICB9Ci0KLSAgICBpZiAoZW5jb2Rp
bmcgJiBEV19FSF9QRV9pbmRpcmVjdCkKLSAgICAgICAgcmVzdWx0ID0gZ2V0UChyZXN1bHQpOwot
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gSW5mb3JtYXRpb24gZW5jb2RlZCBpbiBhIENJ
RSAoQ29tbW9uIEluZm9ybWF0aW9uIEVudHJ5KQotc3RydWN0IENJRV9JbmZvIHsKLSAgICB1aW50
cHRyX3QgY2llU3RhcnQ7Ci0gICAgdWludHB0cl90IGNpZUxlbmd0aDsKLSAgICB1aW50cHRyX3Qg
Y2llSW5zdHJ1Y3Rpb25zOwotICAgIHVpbnQ4X3QgcG9pbnRlckVuY29kaW5nOwotICAgIHVpbnQ4
X3QgbHNkYUVuY29kaW5nOwotICAgIHVpbnQ4X3QgcGVyc29uYWxpdHlFbmNvZGluZzsKLSAgICB1
aW50OF90IHBlcnNvbmFsaXR5T2Zmc2V0SW5DSUU7Ci0gICAgdWludHB0cl90IHBlcnNvbmFsaXR5
OwotICAgIGludCBkYXRhQWxpZ25GYWN0b3I7Ci0gICAgYm9vbCBmZGVzSGF2ZUF1Z21lbnRhdGlv
bkRhdGE7Ci19OwotCi0vLyBJbmZvcm1hdGlvbiBhYm91dCBhbiBGREUgKEZyYW1lIERlc2NyaXB0
aW9uIEVudHJ5KQotc3RydWN0IEZERV9JbmZvIHsKLSAgICB1aW50cHRyX3QgZmRlU3RhcnQ7Ci0g
ICAgdWludHB0cl90IGZkZUxlbmd0aDsKLSAgICB1aW50cHRyX3QgZmRlSW5zdHJ1Y3Rpb25zOwot
ICAgIHVpbnRwdHJfdCBsc2RhOwotfTsKLQotLy8gSW5mb3JtYXRpb24gYWJvdXQgYSBmcmFtZSBs
YXlvdXQgYW5kIHJlZ2lzdGVycyBzYXZlZCBkZXRlcm1pbmVkCi0vLyBieSAicnVubmluZyIgdGhl
IGR3YXJmIEZERSAiaW5zdHJ1Y3Rpb25zIgotI2lmIENQVShBUk02NCkKLWVudW0geyBNYXhSZWdp
c3Rlck51bWJlciA9IDEyMCB9OwotI2VsaWYgQ1BVKFg4Nl82NCkKLWVudW0geyBNYXhSZWdpc3Rl
ck51bWJlciA9IDE3IH07Ci0jZWxzZQotI2Vycm9yICJVbnJlY29nbml6ZWQgYXJjaGl0ZWN0dXJl
IgotI2VuZGlmCi0KLXN0cnVjdCBSZWdpc3RlckxvY2F0aW9uIHsKLSAgICBib29sIHNhdmVkOwot
ICAgIGludDY0X3Qgb2Zmc2V0OwotfTsKLQotc3RydWN0IFByb2xvZ0luZm8gewotICAgIHVpbnQz
Ml90IGNmYVJlZ2lzdGVyOwotICAgIGludDMyX3QgY2ZhUmVnaXN0ZXJPZmZzZXQ7IC8vIENGQSA9
IChjZmFSZWdpc3RlcikrY2ZhUmVnaXN0ZXJPZmZzZXQKLSAgICBSZWdpc3RlckxvY2F0aW9uIHNh
dmVkUmVnaXN0ZXJzW01heFJlZ2lzdGVyTnVtYmVyXTsgLy8gZnJvbSB3aGVyZSB0byByZXN0b3Jl
IHJlZ2lzdGVycwotfTsKLQotc3RhdGljIHZvaWQgcGFyc2VDSUUodWludHB0cl90IGNpZSwgQ0lF
X0luZm8qIGNpZUluZm8pCi17Ci0gICAgY2llSW5mby0+cG9pbnRlckVuY29kaW5nID0gMDsKLSAg
ICBjaWVJbmZvLT5sc2RhRW5jb2RpbmcgPSAwOwotICAgIGNpZUluZm8tPnBlcnNvbmFsaXR5RW5j
b2RpbmcgPSAwOwotICAgIGNpZUluZm8tPnBlcnNvbmFsaXR5T2Zmc2V0SW5DSUUgPSAwOwotICAg
IGNpZUluZm8tPnBlcnNvbmFsaXR5ID0gMDsKLSAgICBjaWVJbmZvLT5kYXRhQWxpZ25GYWN0b3Ig
PSAwOwotICAgIGNpZUluZm8tPmZkZXNIYXZlQXVnbWVudGF0aW9uRGF0YSA9IGZhbHNlOwotICAg
IGNpZUluZm8tPmNpZVN0YXJ0ID0gY2llOwotCi0gICAgdWludHB0cl90IHAgPSBjaWU7Ci0gICAg
dWludDY0X3QgY2llTGVuZ3RoID0gZ2V0MzIocCk7Ci0gICAgcCArPSA0OwotICAgIHVpbnRwdHJf
dCBjaWVDb250ZW50RW5kID0gcCArIGNpZUxlbmd0aDsKLSAgICBpZiAoY2llTGVuZ3RoID09IDB4
ZmZmZmZmZmYpIHsKLSAgICAgICAgLy8gMHhmZmZmZmZmZiBtZWFucyBsZW5ndGggaXMgcmVhbGx5
IG5leHQgOCBieXRlcwotICAgICAgICBjaWVMZW5ndGggPSBnZXQ2NChwKTsKLSAgICAgICAgcCAr
PSA4OwotICAgICAgICBjaWVDb250ZW50RW5kID0gcCArIGNpZUxlbmd0aDsKLSAgICB9Ci0KLSAg
ICBSRUxFQVNFX0FTU0VSVChjaWVMZW5ndGgpOwotCi0gICAgLy8gQ0lFIElEIGlzIGFsd2F5cyAw
Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWdldDMyKHApKTsgLy8gQ0lFIElEIGlzIG5vdCB6ZXJvCi0g
ICAgcCArPSA0OwotICAgIC8vIFZlcnNpb24gaXMgYWx3YXlzIDEgb3IgMwotICAgIHVpbnQ4X3Qg
dmVyc2lvbiA9IGdldDgocCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoKHZlcnNpb24gPT0gMSkgfHwg
KHZlcnNpb24gPT0gMykpOyAvLyBDSUUgdmVyc2lvbiBpcyBub3QgMSBvciAzCi0KLSAgICArK3A7
Ci0gICAgLy8gc2F2ZSBzdGFydCBvZiBhdWdtZW50YXRpb24gc3RyaW5nIGFuZCBmaW5kIGVuZAot
ICAgIHVpbnRwdHJfdCBzdHJTdGFydCA9IHA7Ci0gICAgd2hpbGUgKGdldDgocCkpCi0gICAgICAg
ICsrcDsKLSAgICArK3A7Ci0gICAgLy8gcGFyc2UgY29kZSBhbGlnbWVudCBmYWN0b3IKLSAgICBn
ZXRVTEVCMTI4KHAsIGNpZUNvbnRlbnRFbmQpOwotICAgIC8vIHBhcnNlIGRhdGEgYWxpZ25tZW50
IGZhY3RvcgotICAgIGNpZUluZm8tPmRhdGFBbGlnbkZhY3RvciA9IGdldFNMRUIxMjgocCwgY2ll
Q29udGVudEVuZCk7Ci0gICAgLy8gcGFyc2UgcmV0dXJuIGFkZHJlc3MgcmVnaXN0ZXIKLSAgICBn
ZXRVTEVCMTI4KHAsIGNpZUNvbnRlbnRFbmQpOwotICAgIC8vIHBhcnNlIGF1Z21lbnRhdGlvbiBk
YXRhIGJhc2VkIG9uIGF1Z21lbnRhdGlvbiBzdHJpbmcKLSAgICBpZiAoZ2V0OChzdHJTdGFydCkg
PT0gJ3onKSB7Ci0gICAgICAgIC8vIHBhcnNlIGF1Z21lbnRhdGlvbiBkYXRhIGxlbmd0aAotICAg
ICAgICBnZXRVTEVCMTI4KHAsIGNpZUNvbnRlbnRFbmQpOwotICAgICAgICBmb3IgKHVpbnRwdHJf
dCBzID0gc3RyU3RhcnQ7IGdldDgocykgIT0gJ1wwJzsgKytzKSB7Ci0gICAgICAgICAgICBzd2l0
Y2ggKGdldDgocykpIHsKLSAgICAgICAgICAgIGNhc2UgJ3onOgotICAgICAgICAgICAgICAgIGNp
ZUluZm8tPmZkZXNIYXZlQXVnbWVudGF0aW9uRGF0YSA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdQJzogLy8gRklYTUU6IHNob3VsZCBhc3NlcnQgb24g
cGVyc29uYWxpdHkgKGp1c3QgdG8ga2VlcCBpbiBzeW5jIHdpdGggdGhlIENVIGJlaGF2aW91cikK
LSAgICAgICAgICAgICAgICBjaWVJbmZvLT5wZXJzb25hbGl0eUVuY29kaW5nID0gZ2V0OChwKTsK
LSAgICAgICAgICAgICAgICArK3A7Ci0gICAgICAgICAgICAgICAgY2llSW5mby0+cGVyc29uYWxp
dHlPZmZzZXRJbkNJRSA9IHAgLSBjaWU7Ci0gICAgICAgICAgICAgICAgY2llSW5mby0+cGVyc29u
YWxpdHkgPSBnZXRFbmNvZGVkUChwLCBjaWVDb250ZW50RW5kLCBjaWVJbmZvLT5wZXJzb25hbGl0
eUVuY29kaW5nKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ0wn
OiAvLyBGSVhNRTogc2hvdWxkIGFzc2VydCBvbiBMU0RBIChqdXN0IHRvIGtlZXAgaW4gc3luYyB3
aXRoIHRoZSBDVSBiZWhhdmlvdXIpCi0gICAgICAgICAgICAgICAgY2llSW5mby0+bHNkYUVuY29k
aW5nID0gZ2V0OChwKTsKLSAgICAgICAgICAgICAgICArK3A7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlICdSJzoKLSAgICAgICAgICAgICAgICBjaWVJbmZvLT5wb2lu
dGVyRW5jb2RpbmcgPSBnZXQ4KHApOwotICAgICAgICAgICAgICAgICsrcDsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgLy8gaWdu
b3JlIHVua25vd24gbGV0dGVycwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotICAgIGNpZUluZm8tPmNpZUxlbmd0aCA9IGNpZUNvbnRlbnRF
bmQgLSBjaWVJbmZvLT5jaWVTdGFydDsKLSAgICBjaWVJbmZvLT5jaWVJbnN0cnVjdGlvbnMgPSBw
OwotfQotCi1zdGF0aWMgdm9pZCBmaW5kRkRFKHVpbnRwdHJfdCBwYywgdWludHB0cl90IGVoU2Vj
dGlvblN0YXJ0LCB1aW50MzJfdCBzZWN0aW9uTGVuZ3RoLCBGREVfSW5mbyogZmRlSW5mbywgQ0lF
X0luZm8qIGNpZUluZm8pCi17Ci0gICAgdWludHB0cl90IHAgPSBlaFNlY3Rpb25TdGFydDsKLSAg
ICBjb25zdCB1aW50cHRyX3QgZWhTZWN0aW9uRW5kID0gcCArIHNlY3Rpb25MZW5ndGg7Ci0gICAg
d2hpbGUgKHAgPCBlaFNlY3Rpb25FbmQpIHsKLSAgICAgICAgdWludHB0cl90IGN1cnJlbnRDRkkg
PSBwOwotICAgICAgICB1aW50NjRfdCBjZmlMZW5ndGggPSBnZXQzMihwKTsKLSAgICAgICAgcCAr
PSA0OwotICAgICAgICBpZiAoY2ZpTGVuZ3RoID09IDB4ZmZmZmZmZmYpIHsKLSAgICAgICAgICAg
IC8vIDB4ZmZmZmZmZmYgbWVhbnMgbGVuZ3RoIGlzIHJlYWxseSBuZXh0IDggYnl0ZXMKLSAgICAg
ICAgICAgIGNmaUxlbmd0aCA9IGdldDY0KHApOwotICAgICAgICAgICAgcCArPSA4OwotICAgICAg
ICB9Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGNmaUxlbmd0aCk7IC8vIGVuZCBtYXJrZXIgcmVh
Y2hlZCBiZWZvcmUgZmluZGluZyBGREUgZm9yIHBjCi0KLSAgICAgICAgdWludDMyX3QgaWQgPSBn
ZXQzMihwKTsKLSAgICAgICAgaWYgKCFpZCkgewotICAgICAgICAgICAgLy8gc2tpcCBvdmVyIENJ
RXMKLSAgICAgICAgICAgIHAgKz0gY2ZpTGVuZ3RoOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgLy8gcHJvY2VzcyBGREUgdG8gc2VlIGlmIGl0IGNvdmVycyBwYwotICAgICAgICAgICAg
dWludHB0cl90IG5leHRDRkkgPSBwICsgY2ZpTGVuZ3RoOwotICAgICAgICAgICAgdWludDMyX3Qg
Y2llUG9pbnRlciA9IGdldDMyKHApOwotICAgICAgICAgICAgdWludHB0cl90IGNpZVN0YXJ0ID0g
cCAtIGNpZVBvaW50ZXI7Ci0gICAgICAgICAgICAvLyB2YWxpZGF0ZSBwb2ludGVyIHRvIENJRSBp
cyB3aXRoaW4gc2VjdGlvbgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoKGVoU2VjdGlvblN0
YXJ0IDw9IGNpZVN0YXJ0KSAmJiAoY2llU3RhcnQgPCBlaFNlY3Rpb25FbmQpKTsgLy8gbWFsZm9y
bWVkIEZERS4gQ0lFIGlzIGJhZAotCi0gICAgICAgICAgICBwYXJzZUNJRShjaWVTdGFydCwgY2ll
SW5mbyk7Ci0KLSAgICAgICAgICAgIHAgKz0gNDsKLSAgICAgICAgICAgIC8vIHBhcnNlIHBjIGJl
Z2luIGFuZCByYW5nZQotICAgICAgICAgICAgdWludHB0cl90IHBjU3RhcnQgPSBnZXRFbmNvZGVk
UChwLCBuZXh0Q0ZJLCBjaWVJbmZvLT5wb2ludGVyRW5jb2RpbmcpOwotICAgICAgICAgICAgdWlu
dHB0cl90IHBjUmFuZ2UgPSBnZXRFbmNvZGVkUChwLCBuZXh0Q0ZJLCBjaWVJbmZvLT5wb2ludGVy
RW5jb2RpbmcgJiAweDBGKTsKLQotICAgICAgICAgICAgLy8gdGVzdCBpZiBwYyBpcyB3aXRoaW4g
dGhlIGZ1bmN0aW9uIHRoaXMgRkRFIGNvdmVycwotICAgICAgICAgICAgLy8gaWYgcGMgaXMgbm90
IGluIGJlZ2luL3JhbmdlLCBza2lwIHRoaXMgRkRFCi0gICAgICAgICAgICBpZiAoKHBjU3RhcnQg
PD0gcGMpICYmIChwYyA8IHBjU3RhcnQrcGNSYW5nZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBw
YXJzZSByZXN0IG9mIGluZm8KLSAgICAgICAgICAgICAgICBmZGVJbmZvLT5sc2RhID0gMDsKLSAg
ICAgICAgICAgICAgICAvLyBjaGVjayBmb3IgYXVnbWVudGF0aW9uIGxlbmd0aAotICAgICAgICAg
ICAgICAgIGlmIChjaWVJbmZvLT5mZGVzSGF2ZUF1Z21lbnRhdGlvbkRhdGEpIHsKLSAgICAgICAg
ICAgICAgICAgICAgdWludHB0cl90IGF1Z0xlbiA9IGdldFVMRUIxMjgocCwgbmV4dENGSSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHVpbnRwdHJfdCBlbmRPZkF1ZyA9IHAgKyBhdWdMZW47Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChjaWVJbmZvLT5sc2RhRW5jb2RpbmcpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHBlZWsgYXQgdmFsdWUgKHdpdGhvdXQgaW5kaXJlY3Rpb24pLiBaZXJv
IG1lYW5zIG5vIGxzZGEKLSAgICAgICAgICAgICAgICAgICAgICAgIHVpbnRwdHJfdCBsc2RhU3Rh
cnQgPSBwOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdldEVuY29kZWRQKHAsIG5leHRD
RkksIGNpZUluZm8tPmxzZGFFbmNvZGluZyAmIDB4MEYpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gcmVzZXQgcG9pbnRlciBhbmQgcmUtcGFyc2UgbHNkYSBhZGRyZXNzCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcCA9IGxzZGFTdGFydDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmZGVJbmZvLT5sc2RhID0gZ2V0RW5jb2RlZFAocCwgbmV4dENGSSwgY2llSW5m
by0+bHNkYUVuY29kaW5nKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBwID0gZW5kT2ZBdWc7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGZkZUluZm8tPmZkZVN0YXJ0ID0gY3VycmVudENGSTsK
LSAgICAgICAgICAgICAgICBmZGVJbmZvLT5mZGVMZW5ndGggPSBuZXh0Q0ZJIC0gY3VycmVudENG
STsKLSAgICAgICAgICAgICAgICBmZGVJbmZvLT5mZGVJbnN0cnVjdGlvbnMgPSBwOwotCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOyAvLyBGREUgZm91bmQKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgcCA9IG5leHRDRkk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOyAvLyBubyBGREUgZm91bmQgZm9yIHBjCi19Ci0KLXN0YXRpYyB2b2lk
IGV4ZWN1dGVEZWZDRkFSZWdpc3Rlcih1aW50NjRfdCByZWcsIFByb2xvZ0luZm8qIHJlc3VsdHMp
Ci17Ci0gICAgUkVMRUFTRV9BU1NFUlQocmVnIDw9IE1heFJlZ2lzdGVyTnVtYmVyKTsgLy8gcmVn
IHRvbyBiaWcKLSAgICByZXN1bHRzLT5jZmFSZWdpc3RlciA9IHJlZzsKLX0KLQotc3RhdGljIHZv
aWQgZXhlY3V0ZURlZkNGQU9mZnNldChpbnQ2NF90IG9mZnNldCwgUHJvbG9nSW5mbyogcmVzdWx0
cykKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChvZmZzZXQgPD0gMHg4MDAwMDAwMCk7IC8vIGNmYSBo
YXMgbmVnYXRpdmUgb2Zmc2V0IChkd2FyZiBtaWdodCBjb250YWluIGVwaWxvZykKLSAgICByZXN1
bHRzLT5jZmFSZWdpc3Rlck9mZnNldCA9IG9mZnNldDsKLX0KLQotc3RhdGljIHZvaWQgZXhlY3V0
ZU9mZnNldCh1aW50NjRfdCByZWcsIGludDY0X3Qgb2Zmc2V0LCBQcm9sb2dJbmZvICpyZXN1bHRz
KQotewotICAgIGlmIChyZWcgPiBNYXhSZWdpc3Rlck51bWJlcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdHMtPnNhdmVkUmVnaXN0ZXJzW3JlZ10uc2F2ZWQp
OwotICAgIHJlc3VsdHMtPnNhdmVkUmVnaXN0ZXJzW3JlZ10uc2F2ZWQgPSB0cnVlOwotICAgIHJl
c3VsdHMtPnNhdmVkUmVnaXN0ZXJzW3JlZ10ub2Zmc2V0ID0gb2Zmc2V0OwotfQotCi1zdGF0aWMg
dm9pZCBwYXJzZUluc3RydWN0aW9ucyh1aW50cHRyX3QgaW5zdHJ1Y3Rpb25zLCB1aW50cHRyX3Qg
aW5zdHJ1Y3Rpb25zRW5kLCBjb25zdCBDSUVfSW5mbyYgY2llSW5mbywgUHJvbG9nSW5mbyogcmVz
dWx0cykKLXsKLSAgICB1aW50cHRyX3QgcCA9IGluc3RydWN0aW9uczsKLQotICAgIC8vIHNlZSBE
d2FyZiBTcGVjLCBzZWN0aW9uIDYuNC4yIGZvciBkZXRhaWxzIG9uIHVud2luZCBvcGNvZGVzCi0g
ICAgd2hpbGUgKChwIDwgaW5zdHJ1Y3Rpb25zRW5kKSkgewotICAgICAgICB1aW50NjRfdCByZWc7
Ci0gICAgICAgIHVpbnQ4X3Qgb3Bjb2RlID0gZ2V0OChwKTsKLSAgICAgICAgdWludDhfdCBvcGVy
YW5kOwotICAgICAgICArK3A7Ci0gICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7Ci0gICAgICAgIGNh
c2UgRFdfQ0ZBX25vcDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERXX0NGQV9z
ZXRfbG9jOgotICAgICAgICAgICAgZ2V0RW5jb2RlZFAocCwgaW5zdHJ1Y3Rpb25zRW5kLCBjaWVJ
bmZvLnBvaW50ZXJFbmNvZGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBE
V19DRkFfYWR2YW5jZV9sb2MxOgotICAgICAgICAgICAgcCArPSAxOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRFdfQ0ZBX2FkdmFuY2VfbG9jMjoKLSAgICAgICAgICAgIHAgKz0g
MjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERXX0NGQV9hZHZhbmNlX2xvYzQ6
Ci0gICAgICAgICAgICBwICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBE
V19DRkFfZGVmX2NmYToKLSAgICAgICAgICAgIGV4ZWN1dGVEZWZDRkFSZWdpc3RlcihnZXRVTEVC
MTI4KHAsIGluc3RydWN0aW9uc0VuZCksIHJlc3VsdHMpOwotICAgICAgICAgICAgZXhlY3V0ZURl
ZkNGQU9mZnNldChnZXRVTEVCMTI4KHAsIGluc3RydWN0aW9uc0VuZCksIHJlc3VsdHMpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRFdfQ0ZBX2RlZl9jZmFfc2Y6Ci0gICAgICAg
ICAgICBleGVjdXRlRGVmQ0ZBUmVnaXN0ZXIoZ2V0VUxFQjEyOChwLCBpbnN0cnVjdGlvbnNFbmQp
LCByZXN1bHRzKTsKLSAgICAgICAgICAgIGV4ZWN1dGVEZWZDRkFPZmZzZXQoZ2V0U0xFQjEyOChw
LCBpbnN0cnVjdGlvbnNFbmQpICogY2llSW5mby5kYXRhQWxpZ25GYWN0b3IsIHJlc3VsdHMpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRFdfQ0ZBX2RlZl9jZmFfcmVnaXN0ZXI6
Ci0gICAgICAgICAgICBleGVjdXRlRGVmQ0ZBUmVnaXN0ZXIoZ2V0VUxFQjEyOChwLCBpbnN0cnVj
dGlvbnNFbmQpLCByZXN1bHRzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERX
X0NGQV9kZWZfY2ZhX29mZnNldDoKLSAgICAgICAgICAgIGV4ZWN1dGVEZWZDRkFPZmZzZXQoZ2V0
VUxFQjEyOChwLCBpbnN0cnVjdGlvbnNFbmQpLCByZXN1bHRzKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIERXX0NGQV9kZWZfY2ZhX29mZnNldF9zZjoKLSAgICAgICAgICAgIGV4
ZWN1dGVEZWZDRkFPZmZzZXQoZ2V0U0xFQjEyOChwLCBpbnN0cnVjdGlvbnNFbmQpICogY2llSW5m
by5kYXRhQWxpZ25GYWN0b3IsIHJlc3VsdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRFdfQ0ZBX29mZnNldF9leHRlbmRlZDoKLSAgICAgICAgICAgIHJlZyA9IGdldFVMRUIx
MjgocCwgaW5zdHJ1Y3Rpb25zRW5kKTsKLSAgICAgICAgICAgIGV4ZWN1dGVPZmZzZXQocmVnLCBn
ZXRVTEVCMTI4KHAsIGluc3RydWN0aW9uc0VuZCkgKiBjaWVJbmZvLmRhdGFBbGlnbkZhY3Rvciwg
cmVzdWx0cyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEV19DRkFfb2Zmc2V0
X2V4dGVuZGVkX3NmOgotICAgICAgICAgICAgcmVnID0gZ2V0VUxFQjEyOChwLCBpbnN0cnVjdGlv
bnNFbmQpOwotICAgICAgICAgICAgZXhlY3V0ZU9mZnNldChyZWcsIGdldFNMRUIxMjgocCwgaW5z
dHJ1Y3Rpb25zRW5kKSAqIGNpZUluZm8uZGF0YUFsaWduRmFjdG9yLCByZXN1bHRzKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgb3BlcmFuZCA9IG9w
Y29kZSAmIERXX0NGQV9vcGVyYW5kX21hc2s7Ci0gICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSAm
IH5EV19DRkFfb3BlcmFuZF9tYXNrKSB7Ci0gICAgICAgICAgICBjYXNlIERXX0NGQV9vZmZzZXQ6
Ci0gICAgICAgICAgICAgICAgZXhlY3V0ZU9mZnNldChvcGVyYW5kLCBnZXRVTEVCMTI4KHAsIGlu
c3RydWN0aW9uc0VuZCkgKiBjaWVJbmZvLmRhdGFBbGlnbkZhY3RvciwgcmVzdWx0cyk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERXX0NGQV9hZHZhbmNlX2xvYzoK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gdW5rbm93biBvciB1bnN1cHBv
cnRlZCBDRkEgb3Bjb2RlCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXN0
YXRpYyB2b2lkIHBhcnNlRkRFSW5zdHJ1Y3Rpb25zKGNvbnN0IEZERV9JbmZvJiBmZGVJbmZvLCBj
b25zdCBDSUVfSW5mbyYgY2llSW5mbywgUHJvbG9nSW5mbyogcmVzdWx0cykKLXsKLSAgICAvLyBj
bGVhciByZXN1bHRzCi0gICAgYnplcm8ocmVzdWx0cywgc2l6ZW9mKFByb2xvZ0luZm8pKTsKLQot
ICAgIC8vIHBhcnNlIENJRSB0aGVuIEZERSBpbnN0cnVjdGlvbnMKLSAgICBwYXJzZUluc3RydWN0
aW9ucyhjaWVJbmZvLmNpZUluc3RydWN0aW9ucywgY2llSW5mby5jaWVTdGFydCArIGNpZUluZm8u
Y2llTGVuZ3RoLCBjaWVJbmZvLCByZXN1bHRzKTsKLSAgICBwYXJzZUluc3RydWN0aW9ucyhmZGVJ
bmZvLmZkZUluc3RydWN0aW9ucywgZmRlSW5mby5mZGVTdGFydCArIGZkZUluZm8uZmRlTGVuZ3Ro
LCBjaWVJbmZvLCByZXN1bHRzKTsKLX0KLSNlbmRpZgotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNl
Ci0KLXN0ZDo6dW5pcXVlX3B0cjxSZWdpc3RlckF0T2Zmc2V0TGlzdD4gcGFyc2VVbndpbmRJbmZv
KHZvaWQqIHNlY3Rpb24sIHNpemVfdCBzaXplLCBHZW5lcmF0ZWRGdW5jdGlvbiBnZW5lcmF0ZWRG
dW5jdGlvbikKLXsKLSAgICBSRUxFQVNFX0FTU0VSVCghIXNlY3Rpb24pOwotCi0gICAgc3RkOjp1
bmlxdWVfcHRyPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PiByZWdpc3Rlck9mZnNldHMgPSBzdGQ6Om1h
a2VfdW5pcXVlPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PigpOwotCi0jaWYgT1MoREFSV0lOKQotICAg
IFJFTEVBU0VfQVNTRVJUKHNpemUgPj0gc2l6ZW9mKENvbXBhY3RVbndpbmQpKTsKLSAgICAKLSAg
ICBDb21wYWN0VW53aW5kKiBkYXRhID0gYml0d2lzZV9jYXN0PENvbXBhY3RVbndpbmQqPihzZWN0
aW9uKTsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVCghZGF0YS0+cGVyc29uYWxpdHkpOyAvLyBX
ZSBkb24ndCBrbm93IGhvdyB0byBoYW5kbGUgdGhpcy4KLSAgICBSRUxFQVNFX0FTU0VSVCghZGF0
YS0+bHNkYSk7IC8vIFdlIGRvbid0IGtub3cgaG93IHRvIGhhbmRsZSB0aGlzLgotICAgIFJFTEVB
U0VfQVNTRVJUKGRhdGEtPmZ1bmN0aW9uID09IGdlbmVyYXRlZEZ1bmN0aW9uKTsgLy8gVGhlIHVu
d2luZCBkYXRhIGJldHRlciBiZSBmb3Igb3VyIGZ1bmN0aW9uLgotICAgIAotICAgIGNvbXBhY3Rf
dW53aW5kX2VuY29kaW5nX3QgZW5jb2RpbmcgPSBkYXRhLT5lbmNvZGluZzsKLSAgICBSRUxFQVNF
X0FTU0VSVCghKGVuY29kaW5nICYgVU5XSU5EX0lTX05PVF9GVU5DVElPTl9TVEFSVCkpOwotICAg
IFJFTEVBU0VfQVNTRVJUKCEoZW5jb2RpbmcgJiBVTldJTkRfSEFTX0xTREEpKTsKLSAgICBSRUxF
QVNFX0FTU0VSVCghKGVuY29kaW5nICYgVU5XSU5EX1BFUlNPTkFMSVRZX01BU0spKTsKLQotI2lm
IENQVShYODZfNjQpCi0gICAgUkVMRUFTRV9BU1NFUlQoKGVuY29kaW5nICYgVU5XSU5EX1g4Nl82
NF9NT0RFX01BU0spID09IFVOV0lORF9YODZfNjRfTU9ERV9SQlBfRlJBTUUpOwotICAgIAotICAg
IGludDMyX3Qgb2Zmc2V0ID0gLSgoZW5jb2RpbmcgJiBVTldJTkRfWDg2XzY0X1JCUF9GUkFNRV9P
RkZTRVQpID4+IDE2KSAqIDg7Ci0gICAgdWludDMyX3QgbmV4dFJlZ2lzdGVycyA9IGVuY29kaW5n
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDU7IGktLTspIHsKLSAgICAgICAgdWludDMyX3QgY3Vy
cmVudFJlZ2lzdGVyID0gbmV4dFJlZ2lzdGVycyAmIDc7Ci0gICAgICAgIG5leHRSZWdpc3RlcnMg
Pj49IDM7Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKGN1cnJlbnRSZWdpc3RlcikgewotICAg
ICAgICBjYXNlIFVOV0lORF9YODZfNjRfUkVHX05PTkU6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIFVOV0lORF9YODZfNjRfUkVHX1JCWDoKLSAgICAgICAg
ICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoWDg2UmVnaXN0ZXJz
OjplYngsIG9mZnNldCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBVTldJTkRfWDg2XzY0X1JFR19SMTI6Ci0gICAgICAgICAgICByZWdpc3Rlck9mZnNl
dHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KFg4NlJlZ2lzdGVyczo6cjEyLCBvZmZzZXQpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVU5XSU5EX1g4
Nl82NF9SRUdfUjEzOgotICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0
ZXJBdE9mZnNldChYODZSZWdpc3RlcnM6OnIxMywgb2Zmc2V0KSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFVOV0lORF9YODZfNjRfUkVHX1IxNDoKLSAg
ICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoWDg2UmVn
aXN0ZXJzOjpyMTQsIG9mZnNldCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBVTldJTkRfWDg2XzY0X1JFR19SMTU6Ci0gICAgICAgICAgICByZWdpc3Rl
ck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KFg4NlJlZ2lzdGVyczo6cjE1LCBvZmZz
ZXQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVU5X
SU5EX1g4Nl82NF9SRUdfUkJQOgotICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQo
UmVnaXN0ZXJBdE9mZnNldChYODZSZWdpc3RlcnM6OmVicCwgb2Zmc2V0KSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
b2Zmc2V0ICs9IDg7Ci0gICAgfQotI2VsaWYgQ1BVKEFSTTY0KQotICAgIFJFTEVBU0VfQVNTRVJU
KChlbmNvZGluZyAmIFVOV0lORF9BUk02NF9NT0RFX01BU0spID09IFVOV0lORF9BUk02NF9NT0RF
X0ZSQU1FKTsKLSAgICAKLSAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zm
c2V0KEFSTTY0UmVnaXN0ZXJzOjpmcCwgMCkpOwotICAgIAotICAgIGludDMyX3Qgb2Zmc2V0ID0g
MDsKLSAgICBpZiAoZW5jb2RpbmcgJiBVTldJTkRfQVJNNjRfRlJBTUVfWDE5X1gyMF9QQUlSKSB7
Ci0gICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRS
ZWdpc3RlcnM6OngxOSwgb2Zmc2V0IC09IDgpKTsKLSAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5h
cHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDIwLCBvZmZzZXQgLT0gOCkp
OwotICAgIH0KLSAgICBpZiAoZW5jb2RpbmcgJiBVTldJTkRfQVJNNjRfRlJBTUVfWDIxX1gyMl9Q
QUlSKSB7Ci0gICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQo
QVJNNjRSZWdpc3RlcnM6OngyMSwgb2Zmc2V0IC09IDgpKTsKLSAgICAgICAgcmVnaXN0ZXJPZmZz
ZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDIyLCBvZmZzZXQg
LT0gOCkpOwotICAgIH0KLSAgICBpZiAoZW5jb2RpbmcgJiBVTldJTkRfQVJNNjRfRlJBTUVfWDIz
X1gyNF9QQUlSKSB7Ci0gICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRP
ZmZzZXQoQVJNNjRSZWdpc3RlcnM6OngyMywgb2Zmc2V0IC09IDgpKTsKLSAgICAgICAgcmVnaXN0
ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDI0LCBv
ZmZzZXQgLT0gOCkpOwotICAgIH0KLSAgICBpZiAoZW5jb2RpbmcgJiBVTldJTkRfQVJNNjRfRlJB
TUVfWDI1X1gyNl9QQUlSKSB7Ci0gICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lz
dGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OngyNSwgb2Zmc2V0IC09IDgpKTsKLSAgICAgICAg
cmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6
eDI2LCBvZmZzZXQgLT0gOCkpOwotICAgIH0KLSAgICBpZiAoZW5jb2RpbmcgJiBVTldJTkRfQVJN
NjRfRlJBTUVfWDI3X1gyOF9QQUlSKSB7Ci0gICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5k
KFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OngyNywgb2Zmc2V0IC09IDgpKTsKLSAg
ICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lz
dGVyczo6eDI4LCBvZmZzZXQgLT0gOCkpOwotICAgIH0KLSAgICBpZiAoZW5jb2RpbmcgJiBVTldJ
TkRfQVJNNjRfRlJBTUVfRDhfRDlfUEFJUikgewotICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFw
cGVuZChSZWdpc3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjpxOCwgb2Zmc2V0IC09IDgpKTsK
LSAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJl
Z2lzdGVyczo6cTksIG9mZnNldCAtPSA4KSk7Ci0gICAgfQotICAgIGlmIChlbmNvZGluZyAmIFVO
V0lORF9BUk02NF9GUkFNRV9EMTBfRDExX1BBSVIpIHsKLSAgICAgICAgcmVnaXN0ZXJPZmZzZXRz
LT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTEwLCBvZmZzZXQgLT0g
OCkpOwotICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KEFS
TTY0UmVnaXN0ZXJzOjpxMTEsIG9mZnNldCAtPSA4KSk7Ci0gICAgfQotICAgIGlmIChlbmNvZGlu
ZyAmIFVOV0lORF9BUk02NF9GUkFNRV9EMTJfRDEzX1BBSVIpIHsKLSAgICAgICAgcmVnaXN0ZXJP
ZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTEyLCBvZmZz
ZXQgLT0gOCkpOwotICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zm
c2V0KEFSTTY0UmVnaXN0ZXJzOjpxMTMsIG9mZnNldCAtPSA4KSk7Ci0gICAgfQotICAgIGlmIChl
bmNvZGluZyAmIFVOV0lORF9BUk02NF9GUkFNRV9EMTRfRDE1X1BBSVIpIHsKLSAgICAgICAgcmVn
aXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTE0
LCBvZmZzZXQgLT0gOCkpOwotICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3Rl
ckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjpxMTUsIG9mZnNldCAtPSA4KSk7Ci0gICAgfQotI2Vs
c2UKLSNlcnJvciAiVW5yZWNvZ25pemVkIGFyY2hpdGVjdHVyZSIKLSNlbmRpZgotCi0jZWxpZiBP
UyhMSU5VWCkKLSAgICBGREVfSW5mbyBmZGVJbmZvOwotICAgIENJRV9JbmZvIGNpZUluZm87Ci0g
ICAgUHJvbG9nSW5mbyBwcm9sb2c7Ci0KLSAgICBmaW5kRkRFKCh1aW50cHRyX3QpZ2VuZXJhdGVk
RnVuY3Rpb24sICh1aW50cHRyX3Qpc2VjdGlvbiwgc2l6ZSwgJmZkZUluZm8sICZjaWVJbmZvKTsK
LSAgICBwYXJzZUZERUluc3RydWN0aW9ucyhmZGVJbmZvLCBjaWVJbmZvLCAmcHJvbG9nKTsKLQot
I2lmIENQVShYODZfNjQpCi0gICAgUkVMRUFTRV9BU1NFUlQocHJvbG9nLmNmYVJlZ2lzdGVyID09
IFVOV19YODZfNjRfcmJwKTsKLSAgICBSRUxFQVNFX0FTU0VSVChwcm9sb2cuY2ZhUmVnaXN0ZXJP
ZmZzZXQgPT0gMTYpOwotICAgIFJFTEVBU0VfQVNTRVJUKHByb2xvZy5zYXZlZFJlZ2lzdGVyc1tV
TldfWDg2XzY0X3JicF0uc2F2ZWQpOwotICAgIFJFTEVBU0VfQVNTRVJUKHByb2xvZy5zYXZlZFJl
Z2lzdGVyc1tVTldfWDg2XzY0X3JicF0ub2Zmc2V0ID09IC1wcm9sb2cuY2ZhUmVnaXN0ZXJPZmZz
ZXQpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNYXhSZWdpc3Rlck51bWJlcjsgKytpKSB7
Ci0gICAgICAgIGlmIChwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0uc2F2ZWQpIHsKLSAgICAgICAg
ICAgIHN3aXRjaCAoaSkgewotICAgICAgICAgICAgY2FzZSBVTldfWDg2XzY0X3JieDoKLSAgICAg
ICAgICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KFg4NlJl
Z2lzdGVyczo6ZWJ4LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNm
YVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIFVOV19YODZfNjRfcjEyOgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBw
ZW5kKFJlZ2lzdGVyQXRPZmZzZXQoWDg2UmVnaXN0ZXJzOjpyMTIsIHByb2xvZy5zYXZlZFJlZ2lz
dGVyc1tpXS5vZmZzZXQgKyBwcm9sb2cuY2ZhUmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVU5XX1g4Nl82NF9yMTM6Ci0gICAgICAgICAg
ICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChYODZSZWdpc3Rl
cnM6OnIxMywgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdp
c3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBV
TldfWDg2XzY0X3IxNDoKLSAgICAgICAgICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChS
ZWdpc3RlckF0T2Zmc2V0KFg4NlJlZ2lzdGVyczo6cjE0LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNb
aV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19YODZfNjRfcjE1OgotICAgICAgICAgICAgICAg
IHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoWDg2UmVnaXN0ZXJzOjpy
MTUsIHByb2xvZy5zYXZlZFJlZ2lzdGVyc1tpXS5vZmZzZXQgKyBwcm9sb2cuY2ZhUmVnaXN0ZXJP
ZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVU5XX1g4
Nl82NF9yYnA6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0
ZXJBdE9mZnNldChYODZSZWdpc3RlcnM6OmVicCwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9m
ZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBEV19YODZfNjRfUkVUX2FkZHI6Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7IC8vIG5vbi1zdGFuZGFyZCByZWdpc3RlciBiZWluZyBzYXZlZCBp
biBwcm9sb2cKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSNlbGlmIENQVShBUk02
NCkKLSAgICBSRUxFQVNFX0FTU0VSVChwcm9sb2cuY2ZhUmVnaXN0ZXIgPT0gVU5XX0FSTTY0X2Zw
KTsKLSAgICBSRUxFQVNFX0FTU0VSVChwcm9sb2cuY2ZhUmVnaXN0ZXJPZmZzZXQgPT0gMTYpOwot
ICAgIFJFTEVBU0VfQVNTRVJUKHByb2xvZy5zYXZlZFJlZ2lzdGVyc1tVTldfQVJNNjRfZnBdLnNh
dmVkKTsKLSAgICBSRUxFQVNFX0FTU0VSVChwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbVU5XX0FSTTY0
X2ZwXS5vZmZzZXQgPT0gLXByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCk7Ci0KLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IE1heFJlZ2lzdGVyTnVtYmVyOyArK2kpIHsKLSAgICAgICAgaWYgKHByb2xv
Zy5zYXZlZFJlZ2lzdGVyc1tpXS5zYXZlZCkgewotICAgICAgICAgICAgc3dpdGNoIChpKSB7Ci0g
ICAgICAgICAgICBjYXNlIFVOV19BUk02NF94MDoKLSAgICAgICAgICAgICAgICByZWdpc3Rlck9m
ZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjp4MCwgcHJvbG9n
LnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfeDE6Ci0g
ICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChB
Uk02NFJlZ2lzdGVyczo6eDEsIHByb2xvZy5zYXZlZFJlZ2lzdGVyc1tpXS5vZmZzZXQgKyBwcm9s
b2cuY2ZhUmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgVU5XX0FSTTY0X3gyOgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+
YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OngyLCBwcm9sb2cuc2F2ZWRS
ZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF94MzoKLSAgICAgICAg
ICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KEFSTTY0UmVn
aXN0ZXJzOjp4MywgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFS
ZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBVTldfQVJNNjRfeDQ6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQo
UmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDQsIHByb2xvZy5zYXZlZFJlZ2lzdGVy
c1tpXS5vZmZzZXQgKyBwcm9sb2cuY2ZhUmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVU5XX0FSTTY0X3g1OgotICAgICAgICAgICAgICAg
IHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6
Ong1LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVy
T2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19B
Uk02NF94NjoKLSAgICAgICAgICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3Rl
ckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjp4NiwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9m
ZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfeDc6Ci0gICAgICAgICAgICAgICAgcmVnaXN0
ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDcsIHBy
b2xvZy5zYXZlZFJlZ2lzdGVyc1tpXS5vZmZzZXQgKyBwcm9sb2cuY2ZhUmVnaXN0ZXJPZmZzZXQp
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVU5XX0FSTTY0X3g4
OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZz
ZXQoQVJNNjRSZWdpc3RlcnM6Ong4LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsg
cHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIFVOV19BUk02NF94OToKLSAgICAgICAgICAgICAgICByZWdpc3Rlck9mZnNl
dHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjp4OSwgcHJvbG9nLnNh
dmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfeDEwOgotICAg
ICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJN
NjRSZWdpc3RlcnM6OngxMCwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xv
Zy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBVTldfQVJNNjRfeDExOgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+
YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OngxMSwgcHJvbG9nLnNhdmVk
UmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfeDEyOgotICAgICAg
ICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRS
ZWdpc3RlcnM6OngxMiwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5j
ZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBVTldfQVJNNjRfeDEzOgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBw
ZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OngxMywgcHJvbG9nLnNhdmVkUmVn
aXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfeDE0OgotICAgICAgICAg
ICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdp
c3RlcnM6OngxNCwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFS
ZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBVTldfQVJNNjRfeDE1OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5k
KFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OngxNSwgcHJvbG9nLnNhdmVkUmVnaXN0
ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfeDE2OgotICAgICAgICAgICAg
ICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3Rl
cnM6OngxNiwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdp
c3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBV
TldfQVJNNjRfeDE3OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJl
Z2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OngxNywgcHJvbG9nLnNhdmVkUmVnaXN0ZXJz
W2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfeDE4OgotICAgICAgICAgICAgICAg
IHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6
OngxOCwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rl
ck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldf
QVJNNjRfeDE5OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lz
dGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OngxOSwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ld
Lm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfeDIwOgotICAgICAgICAgICAgICAgIHJl
Z2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6Ongy
MCwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9m
ZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJN
NjRfeDIxOgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVy
QXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OngyMSwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9m
ZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfeDIyOgotICAgICAgICAgICAgICAgIHJlZ2lz
dGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OngyMiwg
cHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNl
dCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRf
eDIzOgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRP
ZmZzZXQoQVJNNjRSZWdpc3RlcnM6OngyMywgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNl
dCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfeDI0OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVy
T2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OngyNCwgcHJv
bG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfeDI1
OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZz
ZXQoQVJNNjRSZWdpc3RlcnM6OngyNSwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCAr
IHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBVTldfQVJNNjRfeDI2OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zm
c2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OngyNiwgcHJvbG9n
LnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfeDI3Ogot
ICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQo
QVJNNjRSZWdpc3RlcnM6OngyNywgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHBy
b2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBVTldfQVJNNjRfeDI4OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0
cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OngyOCwgcHJvbG9nLnNh
dmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfZnA6Ci0gICAg
ICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02
NFJlZ2lzdGVyczo6ZnAsIHByb2xvZy5zYXZlZFJlZ2lzdGVyc1tpXS5vZmZzZXQgKyBwcm9sb2cu
Y2ZhUmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgVU5XX0FSTTY0X3gzMDoKLSAgICAgICAgICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFw
cGVuZChSZWdpc3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjp4MzAsIHByb2xvZy5zYXZlZFJl
Z2lzdGVyc1tpXS5vZmZzZXQgKyBwcm9sb2cuY2ZhUmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVU5XX0FSTTY0X3NwOgotICAgICAgICAg
ICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdp
c3RlcnM6OnNwLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJl
Z2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IFVOV19BUk02NF92MDoKLSAgICAgICAgICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChS
ZWdpc3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjpxMCwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJz
W2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfdjE6Ci0gICAgICAgICAgICAgICAg
cmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6
cTEsIHByb2xvZy5zYXZlZFJlZ2lzdGVyc1tpXS5vZmZzZXQgKyBwcm9sb2cuY2ZhUmVnaXN0ZXJP
ZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVU5XX0FS
TTY0X3YyOgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVy
QXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OnEyLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zm
c2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92MzoKLSAgICAgICAgICAgICAgICByZWdpc3Rl
ck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjpxMywgcHJv
bG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfdjQ6
Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNl
dChBUk02NFJlZ2lzdGVyczo6cTQsIHByb2xvZy5zYXZlZFJlZ2lzdGVyc1tpXS5vZmZzZXQgKyBw
cm9sb2cuY2ZhUmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgVU5XX0FSTTY0X3Y1OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0
cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OnE1LCBwcm9sb2cuc2F2
ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92NjoKLSAgICAg
ICAgICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KEFSTTY0
UmVnaXN0ZXJzOjpxNiwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5j
ZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBVTldfQVJNNjRfdjc6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBl
bmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTcsIHByb2xvZy5zYXZlZFJlZ2lz
dGVyc1tpXS5vZmZzZXQgKyBwcm9sb2cuY2ZhUmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVU5XX0FSTTY0X3Y4OgotICAgICAgICAgICAg
ICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3Rl
cnM6OnE4LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lz
dGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVO
V19BUk02NF92OToKLSAgICAgICAgICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdp
c3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjpxOSwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ld
Lm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfdjEwOgotICAgICAgICAgICAgICAgIHJl
Z2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OnEx
MCwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9m
ZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJN
NjRfdjExOgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVy
QXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OnExMSwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9m
ZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfdjEyOgotICAgICAgICAgICAgICAgIHJlZ2lz
dGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OnExMiwg
cHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNl
dCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRf
djEzOgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRP
ZmZzZXQoQVJNNjRSZWdpc3RlcnM6OnExMywgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNl
dCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfdjE0OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVy
T2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OnExNCwgcHJv
bG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfdjE1
OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZz
ZXQoQVJNNjRSZWdpc3RlcnM6OnExNSwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCAr
IHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBVTldfQVJNNjRfdjE2OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zm
c2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OnExNiwgcHJvbG9n
LnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfdjE3Ogot
ICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQo
QVJNNjRSZWdpc3RlcnM6OnExNywgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHBy
b2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBVTldfQVJNNjRfdjE4OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0
cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OnExOCwgcHJvbG9nLnNh
dmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfdjE5OgotICAg
ICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJN
NjRSZWdpc3RlcnM6OnExOSwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xv
Zy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBVTldfQVJNNjRfdjIwOgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+
YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OnEyMCwgcHJvbG9nLnNhdmVk
UmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfdjIxOgotICAgICAg
ICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRS
ZWdpc3RlcnM6OnEyMSwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5j
ZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBVTldfQVJNNjRfdjIyOgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBw
ZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OnEyMiwgcHJvbG9nLnNhdmVkUmVn
aXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfdjIzOgotICAgICAgICAg
ICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdp
c3RlcnM6OnEyMywgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFS
ZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBVTldfQVJNNjRfdjI0OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5k
KFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OnEyNCwgcHJvbG9nLnNhdmVkUmVnaXN0
ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfdjI1OgotICAgICAgICAgICAg
ICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3Rl
cnM6OnEyNSwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdp
c3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBV
TldfQVJNNjRfdjI2OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJl
Z2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OnEyNiwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJz
W2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfdjI3OgotICAgICAgICAgICAgICAg
IHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6
OnEyNywgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rl
ck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldf
QVJNNjRfdjI4OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lz
dGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OnEyOCwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ld
Lm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfdjI5OgotICAgICAgICAgICAgICAgIHJl
Z2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OnEy
OSwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9m
ZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJN
NjRfdjMwOgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVy
QXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OnEzMCwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9m
ZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfdjMxOgotICAgICAgICAgICAgICAgIHJlZ2lz
dGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OnEzMSwg
cHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNl
dCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBub24tc3RhbmRhcmQg
cmVnaXN0ZXIgYmVpbmcgc2F2ZWQgaW4gcHJvbG9nCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0jZWxzZQotI2Vycm9yICJVbnJlY29nbml6ZWQgYXJjaGl0ZWN0dXJlIgotI2VuZGlm
Ci0KLSNlbmRpZgotICAgIHJlZ2lzdGVyT2Zmc2V0cy0+c29ydCgpOwotICAgIHJldHVybiByZWdp
c3Rlck9mZnNldHM7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKLQotI2VuZGlmIC8v
IEVOQUJMRShGVExfSklUKQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFVu
d2luZEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFVu
d2luZEluZm8uaAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExVbndpbmRJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcwotICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEZUTFVud2luZEluZm9faAotI2RlZmluZSBGVExV
bndpbmRJbmZvX2gKLQotI2lmIEVOQUJMRShGVExfSklUKQotCi0jaW5jbHVkZSAiRlRMR2VuZXJh
dGVkRnVuY3Rpb24uaCIKLWNsYXNzIFJlZ2lzdGVyQXRPZmZzZXRMaXN0OwotCi1uYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxSZWdpc3RlckF0T2Zmc2V0
TGlzdD4gIHBhcnNlVW53aW5kSW5mbyh2b2lkKiwgc2l6ZV90LCBHZW5lcmF0ZWRGdW5jdGlvbik7
Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKLQotI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KQotCi0jZW5kaWYgLy8gRlRMVW53aW5kSW5mb19oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGx2bS9Jbml0aWFsaXplTExWTS5jcHAJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw3NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkluaXRpYWxpemVM
TFZNLmgiCi0KLSNpZiBIQVZFKExMVk0pCi0KLSNpbmNsdWRlICJMTFZNQVBJLmgiCi0jaW5jbHVk
ZSAiT3B0aW9ucy5oIgotI2luY2x1ZGUgPG11dGV4PgotI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+
Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1zdGF0aWMgdm9pZCBpbml0aWFsaXplTExWTUltcGwoKQot
ewotICAgIGNvbnN0IGJvb2wgdmVyYm9zZSA9Ci0gICAgICAgIE9wdGlvbnM6OnZlcmJvc2VGVExD
b21waWxhdGlvbigpCi0gICAgICAgIHx8IE9wdGlvbnM6OmR1bXBGVExEaXNhc3NlbWJseSgpCi0g
ICAgICAgIHx8IE9wdGlvbnM6OnZlcmJvc2VGVExGYWlsdXJlKCkKLSAgICAgICAgfHwgT3B0aW9u
czo6dmVyYm9zZUNvbXBpbGF0aW9uKCkKLSAgICAgICAgfHwgT3B0aW9uczo6ZHVtcERGR0Rpc2Fz
c2VtYmx5KCkKLSAgICAgICAgfHwgT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCk7Ci0gICAgCi0g
ICAgTExWTUluaXRpYWxpemVyRnVuY3Rpb24gaW5pdGlhbGl6ZXIgPSBnZXRMTFZNSW5pdGlhbGl6
ZXJGdW5jdGlvbih2ZXJib3NlKTsKLSAgICBpZiAoIWluaXRpYWxpemVyKQotICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgYm9vbCBlbmFibGVGYXN0SVNlbCA9IE9wdGlvbnM6OnVzZUxMVk1GYXN0
SVNlbCgpOwotICAgIGxsdm0gPSBpbml0aWFsaXplcihXVEZMb2dBbHdheXNBbmRDcmFzaCwgJmVu
YWJsZUZhc3RJU2VsKTsKLSAgICBpZiAoIWxsdm0pIHsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0g
ICAgICAgICAgICBkYXRhTG9nKCJMTFZNIGluaXRpbGl6YXRpb24gZmFpbGVkLlxuIik7Ci0gICAg
fQotICAgIGlmIChPcHRpb25zOjp1c2VMTFZNRmFzdElTZWwoKSAmJiAhZW5hYmxlRmFzdElTZWwp
IHsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJGYXN0IElTZWwg
cmVxdWVzdGVkIGJ1dCBMTFZNIG5vdCBuZXcgZW5vdWdoLlxuIik7Ci0gICAgfQotICAgIAotICAg
IGVuYWJsZUxMVk1GYXN0SVNlbCA9IGVuYWJsZUZhc3RJU2VsOwotfQotCi1ib29sIGluaXRpYWxp
emVMTFZNKCkKLXsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZUxMVk1PbmNl
S2V5OwotCi0gICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZUxMVk1PbmNlS2V5LCBpbml0aWFs
aXplTExWTUltcGwpOwotICAgIHJldHVybiAhIWxsdm07Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpT
QwotCi0jZW5kaWYgLy8gSEFWRShMTFZNKQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGx2bS9Jbml0aWFsaXplTExWTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbHZtL0luaXRpYWxpemVMTFZNLmgJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgSW5pdGlhbGl6ZUxMVk1faAotI2RlZmluZSBJbml0aWFsaXplTExWTV9oCi0K
LSNpZiBIQVZFKExMVk0pCi0KLSNpbmNsdWRlICJMTFZNQVBJLmgiCi0jaW5jbHVkZSA8c3RyaW5n
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXR5
cGVkZWYgdm9pZCAoKkxvZ2dlckZ1bmN0aW9uKShjb25zdCBjaGFyKiwgLi4uKSBXVEZfQVRUUklC
VVRFX1BSSU5URigxLCAyKTsKLXR5cGVkZWYgTExWTUFQSSogKCpMTFZNSW5pdGlhbGl6ZXJGdW5j
dGlvbikoTG9nZ2VyRnVuY3Rpb24sIGJvb2wqIGVuYWJsZUZhc3RJU2VsKTsKLQotTExWTUluaXRp
YWxpemVyRnVuY3Rpb24gZ2V0TExWTUluaXRpYWxpemVyRnVuY3Rpb24oYm9vbCB2ZXJib3NlKTsK
LQotZXh0ZXJuIGNvbnN0IENTdHJpbmcqIGxsdm1CaXRjb2RlTGlicmFyeUZvcklubGluaW5nUGF0
aDsKLQotLy8gWW91IG11c3QgY2FsbCB0aGlzIGJlZm9yZSB1c2luZyBKU0M6Omxsdm0uIEl0J3Mg
c2FmZSB0byBjYWxsIHRoaXMgbXVsdGlwbGUgdGltZXMuCi0vLyBSZXR1cm5zIHRydWUgaWYgd2Ug
c3VjY2Vzc2Z1bGx5IGxvYWRlZCBMTFZNLiBSZXR1cm5zIGZhbHNlIGlmIHdlIGRpZG4ndC4KLWJv
b2wgaW5pdGlhbGl6ZUxMVk0oKTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBI
QVZFKExMVk0pCi0KLSNlbmRpZiAvLyBJbml0aWFsaXplTExWTV9oCi0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNTWFjLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9Jbml0aWFsaXplTExWTU1hYy5jcHAJKHJldmlzaW9u
IDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNTWFj
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJJbml0aWFsaXplTExWTS5oIgotCi0jaWYgSEFWRShMTFZNKQotCi0jaW5jbHVkZSAi
QnVuZGxlUGF0aC5oIgotI2luY2x1ZGUgIkluaXRpYWxpemVMTFZNUE9TSVguaCIKLSNpbmNsdWRl
IDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLUxMVk1Jbml0
aWFsaXplckZ1bmN0aW9uIGdldExMVk1Jbml0aWFsaXplckZ1bmN0aW9uKGJvb2wgdmVyYm9zZSkK
LXsKLSAgICByZXR1cm4gZ2V0TExWTUluaXRpYWxpemVyRnVuY3Rpb25QT1NJWCh0b0NTdHJpbmco
YnVuZGxlUGF0aCgpLmRhdGEoKSwgIi9MaWJyYXJpZXMvbGlibGx2bUZvckpTQy5keWxpYiIpLmRh
dGEoKSwgdmVyYm9zZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gSEFW
RShMTFZNKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vSW5pdGlhbGl6ZUxMVk1Q
T1NJWC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vSW5pdGlh
bGl6ZUxMVk1QT1NJWC5jcHAJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNUE9TSVguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcz
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5pdGlhbGl6ZUxMVk1QT1NJWC5o
IgotCi0jaWYgSEFWRShMTFZNKQotCi0jaW5jbHVkZSAiTExWTUFQSS5oIgotI2luY2x1ZGUgIk9w
dGlvbnMuaCIKLSNpbmNsdWRlIDxkbGZjbi5oPgotI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+Ci0K
LW5hbWVzcGFjZSBKU0MgewotCi1MTFZNSW5pdGlhbGl6ZXJGdW5jdGlvbiBnZXRMTFZNSW5pdGlh
bGl6ZXJGdW5jdGlvblBPU0lYKGNvbnN0IGNoYXIqIGxpYnJhcnlOYW1lLCBib29sIHZlcmJvc2Up
Ci17Ci0gICAgaW50IGZsYWdzID0gUlRMRF9OT1c7Ci0gICAgCi0jaWYgT1MoTElOVVgpCi0gICAg
Ly8gV2UgbmVlZCB0aGlzIHRvIGNhdXNlIG91ciBvdmVycmlkZXMgKGxpa2UgX19jeGFfYXRleGl0
KSB0byB0YWtlIHByZWNlZGVudCBvdmVyIHRoZSBfX2N4YV9hdGV4aXQgdGhhdCBpcyBhbHJlYWR5
Ci0gICAgLy8gZ2xvYmFsbHkgZXhwb3J0ZWQuIFRob3NlIG92ZXJyaWRlcyBhcmUgbmVjZXNzYXJ5
IHRvIHByZXZlbnQgY3Jhc2hlcyAob3VyIF9fY3hhX2F0ZXhpdCB0dXJucyBvZmYgTExWTSdzIGV4
aXQtdGltZQotICAgIC8vIGRlc3RydWN0aW9uLCB3aGljaCBjYXVzZXMgZXhpdC10aW1lIGNyYXNo
ZXMgaWYgdGhlIGNvbmN1cnJlbnQgSklUIGlzIHN0aWxsIHJ1bm5pbmcpIGFuZCB0byBtYWtlIExM
Vk0gYXNzZXJ0aW9uCi0gICAgLy8gZmFpbHVyZXMgZnVubmVsIHRocm91Z2ggV2ViS2l0J3MgbWVj
aGFuaXNtcy4gVGhpcyBmbGFnIGluZHVjZXMgYmVoYXZpb3IgdGhhdCBpcyB0aGUgZGVmYXVsdCBv
biBEYXJ3aW4uIE90aGVyIE9TZXMKLSAgICAvLyBtYXkgbmVlZCB0aGVpciBvd24gZmxhZ3MgaW4g
cGxhY2Ugb2YgdGhpcy4KLSAgICBmbGFncyB8PSBSVExEX0RFRVBCSU5EOwotI2VuZGlmCi0gICAg
Ci0gICAgdm9pZCogbGlicmFyeSA9IGRsb3BlbihsaWJyYXJ5TmFtZSwgZmxhZ3MpOwotICAgIGlm
ICghbGlicmFyeSkgewotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2co
IkZhaWxlZCB0byBsb2FkIExMVk0gbGlicmFyeSBhdCAiLCBsaWJyYXJ5TmFtZSwgIjogIiwgZGxl
cnJvcigpLCAiXG4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIAotICAg
IGNvbnN0IGNoYXIqIHN5bWJvbE5hbWUgPSAiaW5pdGlhbGl6ZUFuZEdldEpTQ0xMVk1BUEkiOwot
ICAgIExMVk1Jbml0aWFsaXplckZ1bmN0aW9uIGluaXRpYWxpemVyID0gYml0d2lzZV9jYXN0PExM
Vk1Jbml0aWFsaXplckZ1bmN0aW9uPigKLSAgICAgICAgZGxzeW0obGlicmFyeSwgc3ltYm9sTmFt
ZSkpOwotICAgIGlmICghaW5pdGlhbGl6ZXIpIHsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAg
ICAgICAgICBkYXRhTG9nKCJGYWlsZWQgdG8gZmluZCAiLCBzeW1ib2xOYW1lLCAiIGluICIsIGxp
YnJhcnlOYW1lLCAiOiAiLCBkbGVycm9yKCkpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIGluaXRpYWxpemVyOwotfQotCi19IC8vIG5hbWVzcGFjZSBK
U0MKLQotI2VuZGlmIC8vIEhBVkUoTExWTSkKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsdm0vSW5pdGlhbGl6ZUxMVk1QT1NJWC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNUE9TSVguaAkocmV2aXNpb24gMTk2Njg1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vSW5pdGlhbGl6ZUxMVk1QT1NJWC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBJbml0aWFsaXplTExWTVBPU0lYX2gKLSNkZWZp
bmUgSW5pdGlhbGl6ZUxMVk1QT1NJWF9oCi0KLSNpZiBIQVZFKExMVk0pCi0KLSNpbmNsdWRlICJJ
bml0aWFsaXplTExWTS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotTExWTUluaXRpYWxpemVyRnVu
Y3Rpb24gZ2V0TExWTUluaXRpYWxpemVyRnVuY3Rpb25QT1NJWChjb25zdCBjaGFyKiBsaWJyYXJ5
TmFtZSwgYm9vbCB2ZXJib3NlKTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBI
QVZFKExMVk0pCi0KLSNlbmRpZiAvLyBJbml0aWFsaXplTExWTVBPU0lYX2gKLQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vTExWTUFQSS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsdm0vTExWTUFQSS5jcHAJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0xMVk1BUEkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxMVk1BUEkuaCIKLQotI2lm
IEhBVkUoTExWTSkKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLUxMVk1BUEkqIGxsdm07Ci1ib29sIGVu
YWJsZUxMVk1GYXN0SVNlbDsKLQotfQotCi0jZW5kaWYgLy8gSEFWRShMTFZNKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vTExWTUFQSS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbHZtL0xMVk1BUEkuaAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsdm0vTExWTUFQSS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU0ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2lmbmRlZiBMTFZNQVBJX2gKLSNkZWZpbmUgTExWTUFQSV9oCi0KLSNpZiBIQVZFKExMVk0p
Ci0KLSNpbmNsdWRlICJMTFZNQVBJRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiTExWTUhlYWRlcnMu
aCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXN0cnVjdCBMTFZNQVBJIHsKLSNkZWZpbmUgTExWTV9B
UElfRlVOQ1RJT05fREVDTEFSQVRJT04ocmV0dXJuVHlwZSwgbmFtZSwgc2lnbmF0dXJlKSBcCi0g
ICAgcmV0dXJuVHlwZSAoKm5hbWUpIHNpZ25hdHVyZTsKLSAgICBGT1JfRUFDSF9MTFZNX0FQSV9G
VU5DVElPTihMTFZNX0FQSV9GVU5DVElPTl9ERUNMQVJBVElPTikKLSN1bmRlZiBMTFZNX0FQSV9G
VU5DVElPTl9ERUNMQVJBVElPTgotICAgIAotICAgIC8vIEZ1bmN0aW9ucyB0aGF0IHdlIGFkZCBj
b25kaXRpb25hbGx5LgotICAgIHZvaWQgKCpBZGRMb3dlclN3aXRjaFBhc3MpKExMVk1QYXNzTWFu
YWdlclJlZiBQTSk7Ci19OwotCi1leHRlcm4gTExWTUFQSSogbGx2bTsKLWV4dGVybiBib29sIGVu
YWJsZUxMVk1GYXN0SVNlbDsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBIQVZF
KExMVk0pCi0KLSNlbmRpZiAvLyBMTFZNQVBJX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsdm0vTExWTUFQSUZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbHZtL0xMVk1BUElGdW5jdGlvbnMuaAkocmV2aXNpb24gMTk2Njg1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vTExWTUFQSUZ1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDE3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpZm5kZWYgTExWTUFQSUZ1bmN0aW9uc19oCi0jZGVmaW5lIExMVk1BUElGdW5j
dGlvbnNfaAotCi0jaW5jbHVkZSAiTExWTUhlYWRlcnMuaCIKLQotI2RlZmluZSBGT1JfRUFDSF9M
TFZNX0FQSV9GVU5DVElPTihtYWNybykgXAotICAgIG1hY3JvKHZvaWQsIERpc3Bvc2VNZXNzYWdl
LCAoY2hhciAqTWVzc2FnZSkpIFwKLSAgICBtYWNybyh2b2lkLCBJbnN0YWxsRmF0YWxFcnJvckhh
bmRsZXIsIChMTFZNRmF0YWxFcnJvckhhbmRsZXIgSGFuZGxlcikpIFwKLSAgICBtYWNybyhMTFZN
Q29udGV4dFJlZiwgQ29udGV4dENyZWF0ZSwgKHZvaWQpKSBcCi0gICAgbWFjcm8odm9pZCwgQ29u
dGV4dERpc3Bvc2UsIChMTFZNQ29udGV4dFJlZiBDKSkgXAotICAgIG1hY3JvKHVuc2lnbmVkLCBH
ZXRNREtpbmRJREluQ29udGV4dCwgKExMVk1Db250ZXh0UmVmIEMsIGNvbnN0IGNoYXIqIE5hbWUs
IHVuc2lnbmVkIFNMZW4pKSBcCi0gICAgbWFjcm8oTExWTU1vZHVsZVJlZiwgTW9kdWxlQ3JlYXRl
V2l0aE5hbWVJbkNvbnRleHQsIChjb25zdCBjaGFyICpNb2R1bGVJRCwgTExWTUNvbnRleHRSZWYg
QykpIFwKLSAgICBtYWNybyh2b2lkLCBEaXNwb3NlTW9kdWxlLCAoTExWTU1vZHVsZVJlZiBNKSkg
XAotICAgIG1hY3JvKHZvaWQsIFNldERhdGFMYXlvdXQsIChMTFZNTW9kdWxlUmVmIE0sIGNvbnN0
IGNoYXIgKlRyaXBsZSkpIFwKLSAgICBtYWNybyh2b2lkLCBTZXRUYXJnZXQsIChMTFZNTW9kdWxl
UmVmIE0sIGNvbnN0IGNoYXIgKlRyaXBsZSkpIFwKLSAgICBtYWNybyh2b2lkLCBEdW1wTW9kdWxl
LCAoTExWTU1vZHVsZVJlZiBNKSkgXAotICAgIG1hY3JvKExMVk1Db250ZXh0UmVmLCBHZXRNb2R1
bGVDb250ZXh0LCAoTExWTU1vZHVsZVJlZiBNKSkgXAotICAgIG1hY3JvKExMVk1UeXBlUmVmLCBH
ZXRUeXBlQnlOYW1lLCAoTExWTU1vZHVsZVJlZiBNLCBjb25zdCBjaGFyICpOYW1lKSkgXAotICAg
IG1hY3JvKHZvaWQsIER1bXBUeXBlLCAoTExWTVR5cGVSZWYgVmFsKSkgXAotICAgIG1hY3JvKExM
Vk1WYWx1ZVJlZiwgQWRkRnVuY3Rpb24sIChMTFZNTW9kdWxlUmVmIE0sIGNvbnN0IGNoYXIgKk5h
bWUsIExMVk1UeXBlUmVmIEZ1bmN0aW9uVHkpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBH
ZXRGaXJzdEZ1bmN0aW9uLCAoTExWTU1vZHVsZVJlZiBNKSkgXAotICAgIG1hY3JvKExMVk1WYWx1
ZVJlZiwgR2V0TmV4dEZ1bmN0aW9uLCAoTExWTVZhbHVlUmVmIEZuKSkgXAotICAgIG1hY3JvKExM
Vk1UeXBlUmVmLCBJbnQxVHlwZUluQ29udGV4dCwgKExMVk1Db250ZXh0UmVmIEMpKSBcCi0gICAg
bWFjcm8oTExWTVR5cGVSZWYsIEludDhUeXBlSW5Db250ZXh0LCAoTExWTUNvbnRleHRSZWYgQykp
IFwKLSAgICBtYWNybyhMTFZNVHlwZVJlZiwgSW50MTZUeXBlSW5Db250ZXh0LCAoTExWTUNvbnRl
eHRSZWYgQykpIFwKLSAgICBtYWNybyhMTFZNVHlwZVJlZiwgSW50MzJUeXBlSW5Db250ZXh0LCAo
TExWTUNvbnRleHRSZWYgQykpIFwKLSAgICBtYWNybyhMTFZNVHlwZVJlZiwgSW50NjRUeXBlSW5D
b250ZXh0LCAoTExWTUNvbnRleHRSZWYgQykpIFwKLSAgICBtYWNybyhMTFZNVHlwZVJlZiwgSW50
VHlwZUluQ29udGV4dCwgKExMVk1Db250ZXh0UmVmIEMsIHVuc2lnbmVkIE51bUJpdHMpKSBcCi0g
ICAgbWFjcm8oTExWTVR5cGVSZWYsIEZsb2F0VHlwZUluQ29udGV4dCwgKExMVk1Db250ZXh0UmVm
IEMpKSBcCi0gICAgbWFjcm8oTExWTVR5cGVSZWYsIERvdWJsZVR5cGVJbkNvbnRleHQsIChMTFZN
Q29udGV4dFJlZiBDKSkgXAotICAgIG1hY3JvKExMVk1UeXBlUmVmLCBGdW5jdGlvblR5cGUsIChM
TFZNVHlwZVJlZiBSZXR1cm5UeXBlLCBMTFZNVHlwZVJlZiAqUGFyYW1UeXBlcywgdW5zaWduZWQg
UGFyYW1Db3VudCwgTExWTUJvb2wgSXNWYXJBcmcpKSBcCi0gICAgbWFjcm8oTExWTVR5cGVSZWYs
IFN0cnVjdFR5cGVJbkNvbnRleHQsIChMTFZNQ29udGV4dFJlZiBDLCBMTFZNVHlwZVJlZiAqRWxl
bWVudFR5cGVzLCB1bnNpZ25lZCBFbGVtZW50Q291bnQsIExMVk1Cb29sIFBhY2tlZCkpIFwKLSAg
ICBtYWNybyhMTFZNVHlwZVJlZiwgQXJyYXlUeXBlLCAoTExWTVR5cGVSZWYgRWxlbWVudFR5cGUs
IHVuc2lnbmVkIEVsZW1lbnRDb3VudCkpIFwKLSAgICBtYWNybyhMTFZNVHlwZVJlZiwgUG9pbnRl
clR5cGUsIChMTFZNVHlwZVJlZiBFbGVtZW50VHlwZSwgdW5zaWduZWQgQWRkcmVzc1NwYWNlKSkg
XAotICAgIG1hY3JvKExMVk1UeXBlUmVmLCBWZWN0b3JUeXBlLCAoTExWTVR5cGVSZWYgRWxlbWVu
dFR5cGUsIHVuc2lnbmVkIEVsZW1lbnRDb3VudCkpIFwKLSAgICBtYWNybyhMTFZNVHlwZVJlZiwg
Vm9pZFR5cGVJbkNvbnRleHQsIChMTFZNQ29udGV4dFJlZiBDKSkgXAotICAgIG1hY3JvKExMVk1W
YWx1ZVJlZiwgQ29uc3ROdWxsLCAoTExWTVR5cGVSZWYgVHkpKSBcCi0gICAgbWFjcm8oTExWTVZh
bHVlUmVmLCBHZXRVbmRlZiwgKExMVk1UeXBlUmVmIFR5KSkgXAotICAgIG1hY3JvKExMVk1WYWx1
ZVJlZiwgQ29uc3RJbnQsIChMTFZNVHlwZVJlZiBJbnRUeSwgdW5zaWduZWQgbG9uZyBsb25nIE4s
IExMVk1Cb29sIFNpZ25FeHRlbmQpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBDb25zdFJl
YWwsIChMTFZNVHlwZVJlZiBSZWFsVHksIGRvdWJsZSBOKSkgXAotICAgIG1hY3JvKHZvaWQsIFNl
dExpbmthZ2UsIChMTFZNVmFsdWVSZWYgR2xvYmFsLCBMTFZNTGlua2FnZSBMaW5rYWdlKSkgXAot
ICAgIG1hY3JvKHZvaWQsIFNldEZ1bmN0aW9uQ2FsbENvbnYsIChMTFZNVmFsdWVSZWYgRm4sIHVu
c2lnbmVkIENDKSkgXAotICAgIG1hY3JvKHZvaWQsIEFkZFRhcmdldERlcGVuZGVudEZ1bmN0aW9u
QXR0ciwgKExMVk1WYWx1ZVJlZiBGbiwgY29uc3QgY2hhciAqQSwgY29uc3QgY2hhciAqVikpIFwK
LSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEdldFBhcmFtLCAoTExWTVZhbHVlUmVmIEZuLCB1bnNp
Z25lZCBJbmRleCkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIE1EU3RyaW5nSW5Db250ZXh0
LCAoTExWTUNvbnRleHRSZWYgQywgY29uc3QgY2hhciAqU3RyLCB1bnNpZ25lZCBTTGVuKSkgXAot
ICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgTURTdHJpbmcsIChjb25zdCBjaGFyICpTdHIsIHVuc2ln
bmVkIFNMZW4pKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBNRE5vZGVJbkNvbnRleHQsIChM
TFZNQ29udGV4dFJlZiBDLCBMTFZNVmFsdWVSZWYgKlZhbHMsIHVuc2lnbmVkIENvdW50KSkgXAot
ICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgTUROb2RlLCAoTExWTVZhbHVlUmVmICpWYWxzLCB1bnNp
Z25lZCBDb3VudCkpIFwKLSAgICBtYWNybyhMTFZNQmFzaWNCbG9ja1JlZiwgQXBwZW5kQmFzaWNC
bG9ja0luQ29udGV4dCwgKExMVk1Db250ZXh0UmVmIEMsIExMVk1WYWx1ZVJlZiBGbiwgY29uc3Qg
Y2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyhMTFZNQmFzaWNCbG9ja1JlZiwgSW5zZXJ0QmFzaWNC
bG9ja0luQ29udGV4dCwgKExMVk1Db250ZXh0UmVmIEMsIExMVk1CYXNpY0Jsb2NrUmVmIEJCLCBj
b25zdCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3JvKHZvaWQsIFNldE1ldGFkYXRhLCAoTExWTVZh
bHVlUmVmIFZhbCwgdW5zaWduZWQgS2luZElELCBMTFZNVmFsdWVSZWYgTm9kZSkpIFwKLSAgICBt
YWNybyh2b2lkLCBTZXRJbnN0cnVjdGlvbkNhbGxDb252LCAoTExWTVZhbHVlUmVmIEluc3RyLCB1
bnNpZ25lZCBDQykpIFwKLSAgICBtYWNybyh2b2lkLCBBZGRJbmNvbWluZywgKExMVk1WYWx1ZVJl
ZiBQaGlOb2RlLCBMTFZNVmFsdWVSZWYgKkluY29taW5nVmFsdWVzLCBMTFZNQmFzaWNCbG9ja1Jl
ZiAqSW5jb21pbmdCbG9ja3MsIHVuc2lnbmVkIENvdW50KSkgXAotICAgIG1hY3JvKExMVk1CdWls
ZGVyUmVmLCBDcmVhdGVCdWlsZGVySW5Db250ZXh0LCAoTExWTUNvbnRleHRSZWYgQykpIFwKLSAg
ICBtYWNybyh2b2lkLCBQb3NpdGlvbkJ1aWxkZXJBdEVuZCwgKExMVk1CdWlsZGVyUmVmIEJ1aWxk
ZXIsIExMVk1CYXNpY0Jsb2NrUmVmIEJsb2NrKSkgXAotICAgIG1hY3JvKHZvaWQsIERpc3Bvc2VC
dWlsZGVyLCAoTExWTUJ1aWxkZXJSZWYgQnVpbGRlcikpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVS
ZWYsIEJ1aWxkUmV0LCAoTExWTUJ1aWxkZXJSZWYsIExMVk1WYWx1ZVJlZiBWKSkgXAotICAgIG1h
Y3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRCciwgKExMVk1CdWlsZGVyUmVmLCBMTFZNQmFzaWNCbG9j
a1JlZiBEZXN0KSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRDb25kQnIsIChMTFZN
QnVpbGRlclJlZiwgTExWTVZhbHVlUmVmIElmLCBMTFZNQmFzaWNCbG9ja1JlZiBUaGVuLCBMTFZN
QmFzaWNCbG9ja1JlZiBFbHNlKSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRTd2l0
Y2gsIChMTFZNQnVpbGRlclJlZiwgTExWTVZhbHVlUmVmIFYsIExMVk1CYXNpY0Jsb2NrUmVmIEVs
c2UsIHVuc2lnbmVkIE51bUNhc2VzKSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRV
bnJlYWNoYWJsZSwgKExMVk1CdWlsZGVyUmVmKSkgXAotICAgIG1hY3JvKHZvaWQsIEFkZENhc2Us
IChMTFZNVmFsdWVSZWYgU3dpdGNoLCBMTFZNVmFsdWVSZWYgT25WYWwsIExMVk1CYXNpY0Jsb2Nr
UmVmIERlc3QpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZEFkZCwgKExMVk1CdWls
ZGVyUmVmLCBMTFZNVmFsdWVSZWYgTEhTLCBMTFZNVmFsdWVSZWYgUkhTLCBjb25zdCBjaGFyICpO
YW1lKSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRGQWRkLCAoTExWTUJ1aWxkZXJS
ZWYsIExMVk1WYWx1ZVJlZiBMSFMsIExMVk1WYWx1ZVJlZiBSSFMsIGNvbnN0IGNoYXIgKk5hbWUp
KSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZFN1YiwgKExMVk1CdWlsZGVyUmVmLCBM
TFZNVmFsdWVSZWYgTEhTLCBMTFZNVmFsdWVSZWYgUkhTLCBjb25zdCBjaGFyICpOYW1lKSkgXAot
ICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRGU3ViLCAoTExWTUJ1aWxkZXJSZWYsIExMVk1W
YWx1ZVJlZiBMSFMsIExMVk1WYWx1ZVJlZiBSSFMsIGNvbnN0IGNoYXIgKk5hbWUpKSBcCi0gICAg
bWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZE11bCwgKExMVk1CdWlsZGVyUmVmLCBMTFZNVmFsdWVS
ZWYgTEhTLCBMTFZNVmFsdWVSZWYgUkhTLCBjb25zdCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3Jv
KExMVk1WYWx1ZVJlZiwgQnVpbGRGTXVsLCAoTExWTUJ1aWxkZXJSZWYsIExMVk1WYWx1ZVJlZiBM
SFMsIExMVk1WYWx1ZVJlZiBSSFMsIGNvbnN0IGNoYXIgKk5hbWUpKSBcCi0gICAgbWFjcm8oTExW
TVZhbHVlUmVmLCBCdWlsZFNEaXYsIChMTFZNQnVpbGRlclJlZiwgTExWTVZhbHVlUmVmIExIUywg
TExWTVZhbHVlUmVmIFJIUywgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFs
dWVSZWYsIEJ1aWxkRkRpdiwgKExMVk1CdWlsZGVyUmVmLCBMTFZNVmFsdWVSZWYgTEhTLCBMTFZN
VmFsdWVSZWYgUkhTLCBjb25zdCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJl
ZiwgQnVpbGRTUmVtLCAoTExWTUJ1aWxkZXJSZWYsIExMVk1WYWx1ZVJlZiBMSFMsIExMVk1WYWx1
ZVJlZiBSSFMsIGNvbnN0IGNoYXIgKk5hbWUpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBC
dWlsZEZSZW0sIChMTFZNQnVpbGRlclJlZiwgTExWTVZhbHVlUmVmIExIUywgTExWTVZhbHVlUmVm
IFJIUywgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxk
U2hsLCAoTExWTUJ1aWxkZXJSZWYsIExMVk1WYWx1ZVJlZiBMSFMsIExMVk1WYWx1ZVJlZiBSSFMs
IGNvbnN0IGNoYXIgKk5hbWUpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZExTaHIs
IChMTFZNQnVpbGRlclJlZiwgTExWTVZhbHVlUmVmIExIUywgTExWTVZhbHVlUmVmIFJIUywgY29u
c3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkQVNociwgKExM
Vk1CdWlsZGVyUmVmLCBMTFZNVmFsdWVSZWYgTEhTLCBMTFZNVmFsdWVSZWYgUkhTLCBjb25zdCBj
aGFyICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRBbmQsIChMTFZNQnVp
bGRlclJlZiwgTExWTVZhbHVlUmVmIExIUywgTExWTVZhbHVlUmVmIFJIUywgY29uc3QgY2hhciAq
TmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkT3IsIChMTFZNQnVpbGRlclJl
ZiwgTExWTVZhbHVlUmVmIExIUywgTExWTVZhbHVlUmVmIFJIUywgY29uc3QgY2hhciAqTmFtZSkp
IFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkWG9yLCAoTExWTUJ1aWxkZXJSZWYsIExM
Vk1WYWx1ZVJlZiBMSFMsIExMVk1WYWx1ZVJlZiBSSFMsIGNvbnN0IGNoYXIgKk5hbWUpKSBcCi0g
ICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZE5lZywgKExMVk1CdWlsZGVyUmVmLCBMTFZNVmFs
dWVSZWYgViwgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1
aWxkRk5lZywgKExMVk1CdWlsZGVyUmVmLCBMTFZNVmFsdWVSZWYgViwgY29uc3QgY2hhciAqTmFt
ZSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkTm90LCAoTExWTUJ1aWxkZXJSZWYs
IExMVk1WYWx1ZVJlZiBWLCBjb25zdCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1WYWx1
ZVJlZiwgQnVpbGRBbGxvY2EsIChMTFZNQnVpbGRlclJlZiwgTExWTVR5cGVSZWYgVHksIGNvbnN0
IGNoYXIgKk5hbWUpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZExvYWQsIChMTFZN
QnVpbGRlclJlZiwgTExWTVZhbHVlUmVmIFBvaW50ZXJWYWwsIGNvbnN0IGNoYXIgKk5hbWUpKSBc
Ci0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZFN0b3JlLCAoTExWTUJ1aWxkZXJSZWYsIExM
Vk1WYWx1ZVJlZiBWYWwsIExMVk1WYWx1ZVJlZiBQdHIpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVl
UmVmLCBCdWlsZFpFeHQsIChMTFZNQnVpbGRlclJlZiwgTExWTVZhbHVlUmVmIFZhbCwgTExWTVR5
cGVSZWYgRGVzdFR5LCBjb25zdCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJl
ZiwgQnVpbGRTRXh0LCAoTExWTUJ1aWxkZXJSZWYsIExMVk1WYWx1ZVJlZiBWYWwsIExMVk1UeXBl
UmVmIERlc3RUeSwgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYs
IEJ1aWxkRlBUb1VJLCAoTExWTUJ1aWxkZXJSZWYsIExMVk1WYWx1ZVJlZiBWYWwsIExMVk1UeXBl
UmVmIERlc3RUeSwgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYs
IEJ1aWxkRlBUb1NJLCAoTExWTUJ1aWxkZXJSZWYsIExMVk1WYWx1ZVJlZiBWYWwsIExMVk1UeXBl
UmVmIERlc3RUeSwgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYs
IEJ1aWxkVUlUb0ZQLCAoTExWTUJ1aWxkZXJSZWYsIExMVk1WYWx1ZVJlZiBWYWwsIExMVk1UeXBl
UmVmIERlc3RUeSwgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYs
IEJ1aWxkU0lUb0ZQLCAoTExWTUJ1aWxkZXJSZWYsIExMVk1WYWx1ZVJlZiBWYWwsIExMVk1UeXBl
UmVmIERlc3RUeSwgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYs
IEJ1aWxkUHRyVG9JbnQsIChMTFZNQnVpbGRlclJlZiwgTExWTVZhbHVlUmVmIFZhbCwgTExWTVR5
cGVSZWYgRGVzdFR5LCBjb25zdCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJl
ZiwgQnVpbGRJbnRUb1B0ciwgKExMVk1CdWlsZGVyUmVmLCBMTFZNVmFsdWVSZWYgVmFsLCBMTFZN
VHlwZVJlZiBEZXN0VHksIGNvbnN0IGNoYXIgKk5hbWUpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVl
UmVmLCBCdWlsZEJpdENhc3QsIChMTFZNQnVpbGRlclJlZiwgTExWTVZhbHVlUmVmIFZhbCwgTExW
TVR5cGVSZWYgRGVzdFR5LCBjb25zdCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1WYWx1
ZVJlZiwgQnVpbGRJbnRDYXN0LCAoTExWTUJ1aWxkZXJSZWYsIExMVk1WYWx1ZVJlZiBWYWwsIExM
Vk1UeXBlUmVmIERlc3RUeSwgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFs
dWVSZWYsIEJ1aWxkRlBDYXN0LCAoTExWTUJ1aWxkZXJSZWYsIExMVk1WYWx1ZVJlZiBWYWwsIExM
Vk1UeXBlUmVmIERlc3RUeSwgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFs
dWVSZWYsIEJ1aWxkSUNtcCwgKExMVk1CdWlsZGVyUmVmLCBMTFZNSW50UHJlZGljYXRlIE9wLCBM
TFZNVmFsdWVSZWYgTEhTLCBMTFZNVmFsdWVSZWYgUkhTLCBjb25zdCBjaGFyICpOYW1lKSkgXAot
ICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRGQ21wLCAoTExWTUJ1aWxkZXJSZWYsIExMVk1S
ZWFsUHJlZGljYXRlIE9wLCBMTFZNVmFsdWVSZWYgTEhTLCBMTFZNVmFsdWVSZWYgUkhTLCBjb25z
dCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRQaGksIChMTFZN
QnVpbGRlclJlZiwgTExWTVR5cGVSZWYgVHksIGNvbnN0IGNoYXIgKk5hbWUpKSBcCi0gICAgbWFj
cm8oTExWTVZhbHVlUmVmLCBCdWlsZENhbGwsIChMTFZNQnVpbGRlclJlZiwgTExWTVZhbHVlUmVm
IEZuLCBMTFZNVmFsdWVSZWYgKkFyZ3MsIHVuc2lnbmVkIE51bUFyZ3MsIGNvbnN0IGNoYXIgKk5h
bWUpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZFNlbGVjdCwgKExMVk1CdWlsZGVy
UmVmLCBMTFZNVmFsdWVSZWYgSWYsIExMVk1WYWx1ZVJlZiBUaGVuLCBMTFZNVmFsdWVSZWYgRWxz
ZSwgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkSW5z
ZXJ0RWxlbWVudCwgKExMVk1CdWlsZGVyUmVmLCBMTFZNVmFsdWVSZWYgVmVjVmFsLCBMTFZNVmFs
dWVSZWYgRWx0VmFsLCBMTFZNVmFsdWVSZWYgSW5kZXgsIGNvbnN0IGNoYXIgKk5hbWUpKSBcCi0g
ICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZEV4dHJhY3RWYWx1ZSwgKExMVk1CdWlsZGVyUmVm
LCBMTFZNVmFsdWVSZWYgQWdnVmFsLCB1bnNpZ25lZCBJbmRleCwgY29uc3QgY2hhciAqTmFtZSkp
IFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkRmVuY2UsIChMTFZNQnVpbGRlclJlZiBC
LCBMTFZNQXRvbWljT3JkZXJpbmcgT3JkZXJpbmcsIExMVk1Cb29sIGlzU2luZ2xlVGhyZWFkLCBj
b25zdCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1QYXNzTWFuYWdlclJlZiwgQ3JlYXRl
UGFzc01hbmFnZXIsICh2b2lkKSkgXAotICAgIG1hY3JvKExMVk1QYXNzTWFuYWdlclJlZiwgQ3Jl
YXRlRnVuY3Rpb25QYXNzTWFuYWdlckZvck1vZHVsZSwgKExMVk1Nb2R1bGVSZWYgTSkpIFwKLSAg
ICBtYWNybyhMTFZNUGFzc01hbmFnZXJSZWYsIENyZWF0ZUZ1bmN0aW9uUGFzc01hbmFnZXIsIChM
TFZNTW9kdWxlUHJvdmlkZXJSZWYgTVApKSBcCi0gICAgbWFjcm8oTExWTUJvb2wsIFJ1blBhc3NN
YW5hZ2VyLCAoTExWTVBhc3NNYW5hZ2VyUmVmIFBNLCBMTFZNTW9kdWxlUmVmIE0pKSBcCi0gICAg
bWFjcm8oTExWTUJvb2wsIEluaXRpYWxpemVGdW5jdGlvblBhc3NNYW5hZ2VyLCAoTExWTVBhc3NN
YW5hZ2VyUmVmIEZQTSkpIFwKLSAgICBtYWNybyhMTFZNQm9vbCwgUnVuRnVuY3Rpb25QYXNzTWFu
YWdlciwgKExMVk1QYXNzTWFuYWdlclJlZiBGUE0sIExMVk1WYWx1ZVJlZiBGKSkgXAotICAgIG1h
Y3JvKExMVk1Cb29sLCBGaW5hbGl6ZUZ1bmN0aW9uUGFzc01hbmFnZXIsIChMTFZNUGFzc01hbmFn
ZXJSZWYgRlBNKSkgXAotICAgIG1hY3JvKHZvaWQsIERpc3Bvc2VQYXNzTWFuYWdlciwgKExMVk1Q
YXNzTWFuYWdlclJlZiBQTSkpIFwKLSAgICBtYWNybyhMTFZNQm9vbCwgU3RhcnRNdWx0aXRocmVh
ZGVkLCAoKSkgXAotICAgIG1hY3JvKHZvaWQsIEFkZFRhcmdldERhdGEsIChMTFZNVGFyZ2V0RGF0
YVJlZiwgTExWTVBhc3NNYW5hZ2VyUmVmKSkgXAotICAgIG1hY3JvKGNoYXIgKiwgQ29weVN0cmlu
Z1JlcE9mVGFyZ2V0RGF0YSwgKExMVk1UYXJnZXREYXRhUmVmKSkgXAotICAgIG1hY3JvKExMVk1U
eXBlUmVmLCBJbnRQdHJUeXBlLCAoTExWTVRhcmdldERhdGFSZWYpKSBcCi0gICAgbWFjcm8odm9p
ZCwgTGlua0luTUNKSVQsICh2b2lkKSkgXAotICAgIG1hY3JvKHZvaWQsIEluaXRpYWxpemVNQ0pJ
VENvbXBpbGVyT3B0aW9ucywgKHN0cnVjdCBMTFZNTUNKSVRDb21waWxlck9wdGlvbnMgKk9wdGlv
bnMsIHNpemVfdCBTaXplT2ZPcHRpb25zKSkgXAotICAgIG1hY3JvKExMVk1Cb29sLCBDcmVhdGVN
Q0pJVENvbXBpbGVyRm9yTW9kdWxlLCAoTExWTUV4ZWN1dGlvbkVuZ2luZVJlZiAqT3V0SklULCBM
TFZNTW9kdWxlUmVmIE0sIHN0cnVjdCBMTFZNTUNKSVRDb21waWxlck9wdGlvbnMgKk9wdGlvbnMs
IHNpemVfdCBTaXplT2ZPcHRpb25zLCBjaGFyICoqT3V0RXJyb3IpKSBcCi0gICAgbWFjcm8odm9p
ZCwgRGlzcG9zZUV4ZWN1dGlvbkVuZ2luZSwgKExMVk1FeGVjdXRpb25FbmdpbmVSZWYgRUUpKSBc
Ci0gICAgbWFjcm8oTExWTVRhcmdldERhdGFSZWYsIEdldEV4ZWN1dGlvbkVuZ2luZVRhcmdldERh
dGEsIChMTFZNRXhlY3V0aW9uRW5naW5lUmVmIEVFKSkgXAotICAgIG1hY3JvKExMVk1UYXJnZXRN
YWNoaW5lUmVmLCBHZXRFeGVjdXRpb25FbmdpbmVUYXJnZXRNYWNoaW5lLCAoTExWTUV4ZWN1dGlv
bkVuZ2luZVJlZiBFRSkpIFwKLSAgICBtYWNybyh2b2lkICosIEdldFBvaW50ZXJUb0dsb2JhbCwg
KExMVk1FeGVjdXRpb25FbmdpbmVSZWYgRUUsIExMVk1WYWx1ZVJlZiBHbG9iYWwpKSBcCi0gICAg
bWFjcm8oTExWTU1DSklUTWVtb3J5TWFuYWdlclJlZiwgQ3JlYXRlU2ltcGxlTUNKSVRNZW1vcnlN
YW5hZ2VyLCAodm9pZCAqT3BhcXVlLCBMTFZNTWVtb3J5TWFuYWdlckFsbG9jYXRlQ29kZVNlY3Rp
b25DYWxsYmFjayBBbGxvY2F0ZUNvZGVTZWN0aW9uLCBMTFZNTWVtb3J5TWFuYWdlckFsbG9jYXRl
RGF0YVNlY3Rpb25DYWxsYmFjayBBbGxvY2F0ZURhdGFTZWN0aW9uLCBMTFZNTWVtb3J5TWFuYWdl
ckZpbmFsaXplTWVtb3J5Q2FsbGJhY2sgRmluYWxpemVNZW1vcnksIExMVk1NZW1vcnlNYW5hZ2Vy
RGVzdHJveUNhbGxiYWNrIERlc3RvcnkpKSBcCi0gICAgbWFjcm8oTExWTUJvb2wsIFZlcmlmeU1v
ZHVsZSwgKExMVk1Nb2R1bGVSZWYgTSwgTExWTVZlcmlmaWVyRmFpbHVyZUFjdGlvbiBBY3Rpb24s
IGNoYXIgKipPdXRNZXNzYWdlKSkgXAotICAgIG1hY3JvKExMVk1EaXNhc21Db250ZXh0UmVmLCBD
cmVhdGVEaXNhc20sIChjb25zdCBjaGFyICpUcmlwbGVOYW1lLCB2b2lkICpEaXNJbmZvLCBpbnQg
VGFnVHlwZSwgTExWTU9wSW5mb0NhbGxiYWNrIEdldE9wSW5mbywgTExWTVN5bWJvbExvb2t1cENh
bGxiYWNrIFN5bWJvbExvb2tVcCkpIFwKLSAgICBtYWNybyh2b2lkLCBEaXNhc21EaXNwb3NlLCAo
TExWTURpc2FzbUNvbnRleHRSZWYgREMpKSBcCi0gICAgbWFjcm8oc2l6ZV90LCBEaXNhc21JbnN0
cnVjdGlvbiwgKExMVk1EaXNhc21Db250ZXh0UmVmIERDLCB1aW50OF90ICpCeXRlcywgdWludDY0
X3QgQnl0ZXNTaXplLCB1aW50NjRfdCBQQywgY2hhciAqT3V0U3RyaW5nLCBzaXplX3QgT3V0U3Ry
aW5nU2l6ZSkpIFwKLSAgICBtYWNybyhMTFZNUGFzc01hbmFnZXJCdWlsZGVyUmVmLCBQYXNzTWFu
YWdlckJ1aWxkZXJDcmVhdGUsICh2b2lkKSkgXAotICAgIG1hY3JvKHZvaWQsIFBhc3NNYW5hZ2Vy
QnVpbGRlckRpc3Bvc2UsIChMTFZNUGFzc01hbmFnZXJCdWlsZGVyUmVmIFBNQikpIFwKLSAgICBt
YWNybyh2b2lkLCBQYXNzTWFuYWdlckJ1aWxkZXJTZXRPcHRMZXZlbCwgKExMVk1QYXNzTWFuYWdl
ckJ1aWxkZXJSZWYgUE1CLCB1bnNpZ25lZCBPcHRMZXZlbCkpIFwKLSAgICBtYWNybyh2b2lkLCBQ
YXNzTWFuYWdlckJ1aWxkZXJTZXRTaXplTGV2ZWwsIChMTFZNUGFzc01hbmFnZXJCdWlsZGVyUmVm
IFBNQiwgdW5zaWduZWQgU2l6ZUxldmVsKSkgXAotICAgIG1hY3JvKHZvaWQsIFBhc3NNYW5hZ2Vy
QnVpbGRlclVzZUlubGluZXJXaXRoVGhyZXNob2xkLCAoTExWTVBhc3NNYW5hZ2VyQnVpbGRlclJl
ZiBQTUIsIHVuc2lnbmVkIFRocmVzaG9sZCkpIFwKLSAgICBtYWNybyh2b2lkLCBQYXNzTWFuYWdl
ckJ1aWxkZXJQb3B1bGF0ZUZ1bmN0aW9uUGFzc01hbmFnZXIsIChMTFZNUGFzc01hbmFnZXJCdWls
ZGVyUmVmIFBNQiwgTExWTVBhc3NNYW5hZ2VyUmVmIFBNKSkgXAotICAgIG1hY3JvKHZvaWQsIFBh
c3NNYW5hZ2VyQnVpbGRlclBvcHVsYXRlTW9kdWxlUGFzc01hbmFnZXIsIChMTFZNUGFzc01hbmFn
ZXJCdWlsZGVyUmVmIFBNQiwgTExWTVBhc3NNYW5hZ2VyUmVmIFBNKSkgXAotICAgIG1hY3JvKHZv
aWQsIEFkZEFuYWx5c2lzUGFzc2VzLCAoTExWTVRhcmdldE1hY2hpbmVSZWYgVCwgTExWTVBhc3NN
YW5hZ2VyUmVmIFBNKSkgXAotICAgIG1hY3JvKHZvaWQsIEFkZEFnZ3Jlc3NpdmVEQ0VQYXNzLCAo
TExWTVBhc3NNYW5hZ2VyUmVmIFBNKSkgXAotICAgIG1hY3JvKHZvaWQsIEFkZENGR1NpbXBsaWZp
Y2F0aW9uUGFzcywgKExMVk1QYXNzTWFuYWdlclJlZiBQTSkpIFwKLSAgICBtYWNybyh2b2lkLCBB
ZGREZWFkU3RvcmVFbGltaW5hdGlvblBhc3MsIChMTFZNUGFzc01hbmFnZXJSZWYgUE0pKSBcCi0g
ICAgbWFjcm8odm9pZCwgQWRkRnVuY3Rpb25JbmxpbmluZ1Bhc3MsIChMTFZNUGFzc01hbmFnZXJS
ZWYgUE0pKSBcCi0gICAgbWFjcm8odm9pZCwgQWRkR2xvYmFsRENFUGFzcywgKExMVk1QYXNzTWFu
YWdlclJlZiBQTSkpIFwKLSAgICBtYWNybyh2b2lkLCBBZGRQcnVuZUVIUGFzcywgKExMVk1QYXNz
TWFuYWdlclJlZiBQTSkpIFwKLSAgICBtYWNybyh2b2lkLCBBZGRHbG9iYWxPcHRpbWl6ZXJQYXNz
LCAoTExWTVBhc3NNYW5hZ2VyUmVmIFBNKSkgXAotICAgIG1hY3JvKHZvaWQsIEFkZEdWTlBhc3Ms
IChMTFZNUGFzc01hbmFnZXJSZWYgUE0pKSBcCi0gICAgbWFjcm8odm9pZCwgQWRkSW5zdHJ1Y3Rp
b25Db21iaW5pbmdQYXNzLCAoTExWTVBhc3NNYW5hZ2VyUmVmIFBNKSkgXAotICAgIG1hY3JvKHZv
aWQsIEFkZFByb21vdGVNZW1vcnlUb1JlZ2lzdGVyUGFzcywgKExMVk1QYXNzTWFuYWdlclJlZiBQ
TSkpIFwKLSAgICBtYWNybyh2b2lkLCBBZGRDb25zdGFudFByb3BhZ2F0aW9uUGFzcywgKExMVk1Q
YXNzTWFuYWdlclJlZiBQTSkpIFwKLSAgICBtYWNybyh2b2lkLCBBZGRUeXBlQmFzZWRBbGlhc0Fu
YWx5c2lzUGFzcywgKExMVk1QYXNzTWFuYWdlclJlZiBQTSkpIFwKLSAgICBtYWNybyh2b2lkLCBB
ZGRCYXNpY0FsaWFzQW5hbHlzaXNQYXNzLCAoTExWTVBhc3NNYW5hZ2VyUmVmIFBNKSkKLQotI2Vu
ZGlmIC8vIExMVk1BUElGdW5jdGlvbnNfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGx2bS9MTFZNSGVhZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bHZtL0xMVk1IZWFkZXJzLmgJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbHZtL0xMVk1IZWFkZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZu
ZGVmIExMVk1IZWFkZXJzX2gKLSNkZWZpbmUgTExWTUhlYWRlcnNfaAotCi0jaWYgSEFWRShMTFZN
KQotCi0vLyBJdCBpcyBuZWNlc3NhcnkgdG8gaW5jbHVkZSBMTFZNIGhlYWRlcnMgdmlhIHRoaXMg
ZmlsZSwgYmVjYXVzZToKLS8vIC0gTExWTSByZXF1aXJlcyBkZWZpbmluZyB0aGluZ3MgdGhhdCB3
ZSBkb24ndCBub3JtYWxseSBkZWZpbmUsIGFuZAotLy8gLSBMTFZNIGluY2x1ZGVzIGl0cyBDKysg
aGVhZGVycyBmcm9tIGl0cyBDIGhlYWRlcnMsIGFuZCBpdHMgQysrCi0vLyAgIGhlYWRlcnMgZG9u
J3QgY29tcGlsZSBjbGVhbmx5IHdpdGggb3VyIHdhcm5pbmdzLgotCi0jZGVmaW5lIF9fU1REQ19M
SU1JVF9NQUNST1MKLSNkZWZpbmUgX19TVERDX0NPTlNUQU5UX01BQ1JPUwotCi0jaWYgQ09NUElM
RVIoQ0xBTkcpCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBk
aWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1ub3JldHVybiIKLSNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1wYXJhbWV0ZXIiCi0jcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgaWdub3JlZCAiLVdub24tdmlydHVhbC1kdG9yIgotI2VuZGlmIC8vIENPTVBJTEVSKENM
QU5HKQotCi0jaW5jbHVkZSA8bGx2bS1jL0FuYWx5c2lzLmg+Ci0jaW5jbHVkZSA8bGx2bS1jL0Jp
dFJlYWRlci5oPgotI2luY2x1ZGUgPGxsdm0tYy9Db3JlLmg+Ci0jaW5jbHVkZSA8bGx2bS1jL0Rp
c2Fzc2VtYmxlci5oPgotI2luY2x1ZGUgPGxsdm0tYy9FeGVjdXRpb25FbmdpbmUuaD4KLSNpbmNs
dWRlIDxsbHZtLWMvSW5pdGlhbGl6YXRpb24uaD4KLSNpbmNsdWRlIDxsbHZtLWMvTGlua2VyLmg+
Ci0jaW5jbHVkZSA8bGx2bS1jL1RhcmdldC5oPgotI2luY2x1ZGUgPGxsdm0tYy9UYXJnZXRNYWNo
aW5lLmg+Ci0jaW5jbHVkZSA8bGx2bS1jL1RyYW5zZm9ybXMvSVBPLmg+Ci0jaW5jbHVkZSA8bGx2
bS1jL1RyYW5zZm9ybXMvUGFzc01hbmFnZXJCdWlsZGVyLmg+Ci0jaW5jbHVkZSA8bGx2bS1jL1Ry
YW5zZm9ybXMvU2NhbGFyLmg+Ci0KLSNpZiBDT01QSUxFUihDTEFORykKLSNwcmFnbWEgY2xhbmcg
ZGlhZ25vc3RpYyBwb3AKLSNlbmRpZiAvLyBDT01QSUxFUihDTEFORykKLQotI3VuZGVmIF9fU1RE
Q19MSU1JVF9NQUNST1MKLSN1bmRlZiBfX1NURENfQ09OU1RBTlRfTUFDUk9TCi0KLSNlbmRpZiAv
LyBIQVZFKExMVk0pCi0KLSNlbmRpZiAvLyBMTFZNSGVhZGVyc19oCi0KLQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsdm0vbGlicmFyeS9MTFZNQW5jaG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9saWJyYXJ5L0xMVk1BbmNob3IuY3BwCShyZXZp
c2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9saWJyYXJ5L0xMVk1B
bmNob3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotLy8gVGhpcyBpcyBhIGhhY2sg
Zm9yIGVuc3VyaW5nIHRoYXQgdGhlIGJ1aWxkIHN5c3RlbSByZWxpbmtzIEphdmFTY3JpcHRDb3Jl
IGlmIGFueQotLy8gb2YgdGhlIExMVk0gbGlicmFyaWVzIGFyZSBrbm93biB0byBoYXZlIGNoYW5n
ZWQuIFRocyBmaWxlIHdpbGwgZ2V0IHRvdWNoZWQgYnkgb3VyCi0vLyBwZXJsIHNjcmlwdHMgdG8g
dHJpZ2dlciBhIHJlYnVpbGQgaWYgYSBjaGFuZ2UgaW4gTExWTSB3YXMgZGV0ZWN0ZWQuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9saWJyYXJ5L0xMVk1FeHBvcnRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9saWJyYXJ5L0xMVk1FeHBvcnRz
LmNwcAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vbGli
cmFyeS9MTFZNRXhwb3J0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQ5ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnX2xsdm0uaCIKLQotI2lmIEhBVkUoTExWTSkKLQotI2luY2x1ZGUgIkxMVk1BUEku
aCIKLSNpbmNsdWRlICJMTFZNVHJhcENhbGxiYWNrLmgiCi0KLS8vIEluY2x1ZGUgc29tZSBleHRy
YSBMTFZNIEMrKyBoZWFkZXJzLiBUaGlzIGlzIHRoZSBvbmx5IHBsYWNlIHdoZXJlIGluY2x1ZGlu
ZyBMTFZNIEMrKwotLy8gaGVhZGVycyBpcyBPSywgc2luY2UgdGhpcyBtb2R1bGUgbGl2ZXMgaW5z
aWRlIG9mIHRoZSBMTFZNIGR5bGliIHdlIG1ha2UgYW5kIHNvIGNhbiBzZWUKLS8vIG90aGVyd2lz
ZSBwcml2YXRlIHRoaW5ncy4gQnV0IHRvIGluY2x1ZGUgdGhvc2UgaGVhZGVycywgd2UgbmVlZCB0
byBkbyBzb21lIHdlaXJkIHRoaW5ncwotLy8gZmlyc3QuIEFueXdheSwgd2Ugc2hvdWxkIGtlZXAg
TExWTSBDKysgaW5jbHVkZXMgdG8gYSBtaW5pbXVtIGlmIHBvc3NpYmxlLgotCi0jZGVmaW5lIF9f
U1REQ19MSU1JVF9NQUNST1MKLSNkZWZpbmUgX19TVERDX0NPTlNUQU5UX01BQ1JPUwotCi0jaWYg
Q09NUElMRVIoQ0xBTkcpCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAotI3ByYWdtYSBj
bGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1ub3JldHVybiIKLSNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1wYXJhbWV0ZXIiCi0jcHJhZ21hIGNsYW5n
IGRpYWdub3N0aWMgaWdub3JlZCAiLVdub24tdmlydHVhbC1kdG9yIgotI2VuZGlmIC8vIENPTVBJ
TEVSKENMQU5HKQotCi0jaW5jbHVkZSA8bGx2bS9TdXBwb3J0L0NvbW1hbmRMaW5lLmg+Ci0KLSNp
ZiBDT01QSUxFUihDTEFORykKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLSNlbmRpZiAv
LyBDT01QSUxFUihDTEFORykKLQotI3VuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKLSN1bmRlZiBf
X1NURENfQ09OU1RBTlRfTUFDUk9TCi0KLXN0YXRpYyB2b2lkIGxsdm1DcmFzaChjb25zdCBjaGFy
KikgTk9fUkVUVVJOOwotZXh0ZXJuICJDIiBXVEZfRVhQT1JUX1BSSVZBVEUgSlNDOjpMTFZNQVBJ
KiBpbml0aWFsaXplQW5kR2V0SlNDTExWTUFQSSgKLSAgICB2b2lkICgqKShjb25zdCBjaGFyKiwg
Li4uKSBOT19SRVRVUk4sIGJvb2wqIGVuYWJsZUZhc3RJU2VsKTsKLQotc3RhdGljIHZvaWQgbGx2
bUNyYXNoKGNvbnN0IGNoYXIqIHJlYXNvbikKLXsKLSAgICBnX2xsdm1UcmFwQ2FsbGJhY2soIkxM
Vk0gZmF0YWwgZXJyb3I6ICVzIiwgcmVhc29uKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJncz4KLXZvaWQgaW5pdENvbW1hbmRMaW5lKEFyZ3MuLi4gYXJncykKLXsKLSAgICBjb25zdCBj
aGFyKiB0aGVBcmdzW10gPSB7IGFyZ3MuLi4gfTsKLSAgICBsbHZtOjpjbDo6UGFyc2VDb21tYW5k
TGluZU9wdGlvbnMoc2l6ZW9mKHRoZUFyZ3MpIC8gc2l6ZW9mKGNvbnN0IGNoYXIqKSwgdGhlQXJn
cyk7Ci19Ci0KLWV4dGVybiAiQyIgSlNDOjpMTFZNQVBJKiBpbml0aWFsaXplQW5kR2V0SlNDTExW
TUFQSSgKLSAgICB2b2lkICgqY2FsbGJhY2spKGNvbnN0IGNoYXIqLCAuLi4pIE5PX1JFVFVSTiwK
LSAgICBib29sKiBlbmFibGVGYXN0SVNlbCkKLXsKLSAgICBnX2xsdm1UcmFwQ2FsbGJhY2sgPSBj
YWxsYmFjazsKLSAgICAKLSAgICBMTFZNSW5zdGFsbEZhdGFsRXJyb3JIYW5kbGVyKGxsdm1DcmFz
aCk7Ci0KLSAgICBpZiAoIUxMVk1TdGFydE11bHRpdGhyZWFkZWQoKSkKLSAgICAgICAgY2FsbGJh
Y2soIkNvdWxkIG5vdCBzdGFydCBMTFZNIG11bHRpdGhyZWFkaW5nIik7Ci0gICAgCi0gICAgTExW
TUxpbmtJbk1DSklUKCk7Ci0gICAgCi0gICAgLy8gWW91IHRoaW5rIHlvdSB3YW50IHRvIGNhbGwg
TExWTUluaXRpYWxpemVOYXRpdmVUYXJnZXQoKT8gVGhpbmsgYWdhaW4uIFRoaXMgcHJlc3VtZXMg
dGhhdAotICAgIC8vIExMVk0gd2FzIC4vY29uZmlndXJlZCBjb3JyZWN0bHksIHdoaWNoIHdvbid0
IGJlIHRoZSBjYXNlIGluIGNyb3NzLWNvbXBpbGF0aW9uIHNpdHVhdGlvbnMuCi0gICAgCi0jaWYg
Q1BVKFg4Nl82NCkKLSAgICBMTFZNSW5pdGlhbGl6ZVg4NlRhcmdldEluZm8oKTsKLSAgICBMTFZN
SW5pdGlhbGl6ZVg4NlRhcmdldCgpOwotICAgIExMVk1Jbml0aWFsaXplWDg2VGFyZ2V0TUMoKTsK
LSAgICBMTFZNSW5pdGlhbGl6ZVg4NkFzbVByaW50ZXIoKTsKLSAgICBMTFZNSW5pdGlhbGl6ZVg4
NkRpc2Fzc2VtYmxlcigpOwotI2VsaWYgQ1BVKEFSTTY0KQotI2lmIFBMQVRGT1JNKElPUykgfHwg
T1MoTElOVVgpCi0gICAgTExWTUluaXRpYWxpemVBQXJjaDY0VGFyZ2V0SW5mbygpOwotICAgIExM
Vk1Jbml0aWFsaXplQUFyY2g2NFRhcmdldCgpOwotICAgIExMVk1Jbml0aWFsaXplQUFyY2g2NFRh
cmdldE1DKCk7Ci0gICAgTExWTUluaXRpYWxpemVBQXJjaDY0QXNtUHJpbnRlcigpOwotICAgIExM
Vk1Jbml0aWFsaXplQUFyY2g2NERpc2Fzc2VtYmxlcigpOwotI2Vsc2UKLSAgICBMTFZNSW5pdGlh
bGl6ZUFSTTY0VGFyZ2V0SW5mbygpOwotICAgIExMVk1Jbml0aWFsaXplQVJNNjRUYXJnZXQoKTsK
LSAgICBMTFZNSW5pdGlhbGl6ZUFSTTY0VGFyZ2V0TUMoKTsKLSAgICBMTFZNSW5pdGlhbGl6ZUFS
TTY0QXNtUHJpbnRlcigpOwotICAgIExMVk1Jbml0aWFsaXplQVJNNjREaXNhc3NlbWJsZXIoKTsK
LSNlbmRpZgotI2Vsc2UKLSAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKLSNlbmRpZgot
ICAgIAotI2lmIExMVk1fVkVSU0lPTl9NQUpPUiA+PSA0IHx8IChMTFZNX1ZFUlNJT05fTUFKT1Ig
PT0gMyAmJiBMTFZNX1ZFUlNJT05fTUlOT1IgPj0gNikKLSAgICAvLyBJdCdzIE9LIHRvIGhhdmUg
ZmFzdCBJU2VsLCBpZiBpdCB3YXMgcmVxdWVzdGVkLgotI2Vsc2UKLSAgICAvLyBXZSBkb24ndCBo
YXZlIGVub3VnaCBzdXBwb3J0IGZvciBmYXN0IElTZWwuIERpc2FibGUgaXQuCi0gICAgKmVuYWJs
ZUZhc3RJU2VsID0gZmFsc2U7Ci0jZW5kaWYKLQotICAgIGlmICgqZW5hYmxlRmFzdElTZWwpCi0g
ICAgICAgIGluaXRDb21tYW5kTGluZSgibGx2bUZvckpTQy5keWxpYiIsICItZW5hYmxlLW1pc2No
ZWQ9ZmFsc2UiLCAiLXJlZ2FsbG9jPWJhc2ljIik7Ci0gICAgZWxzZQotICAgICAgICBpbml0Q29t
bWFuZExpbmUoImxsdm1Gb3JKU0MuZHlsaWIiLCAiLWVuYWJsZS1wYXRjaHBvaW50LWxpdmVuZXNz
PXRydWUiKTsKLSAgICAKLSAgICBKU0M6OkxMVk1BUEkqIHJlc3VsdCA9IG5ldyBKU0M6OkxMVk1B
UEk7Ci0gICAgCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgd2hvbGUgdGhpbmcgdG8gbnVsbC4KLSAg
ICBtZW1zZXQocmVzdWx0LCAwLCBzaXplb2YoKnJlc3VsdCkpOwotICAgIAotI2RlZmluZSBMTFZN
X0FQSV9GVU5DVElPTl9BU1NJR05NRU5UKHJldHVyblR5cGUsIG5hbWUsIHNpZ25hdHVyZSkgXAot
ICAgIHJlc3VsdC0+bmFtZSA9IExMVk0jI25hbWU7Ci0gICAgRk9SX0VBQ0hfTExWTV9BUElfRlVO
Q1RJT04oTExWTV9BUElfRlVOQ1RJT05fQVNTSUdOTUVOVCk7Ci0jdW5kZWYgTExWTV9BUElfRlVO
Q1RJT05fQVNTSUdOTUVOVAotICAgIAotICAgIC8vIEhhbmRsZSBjb25kaXRpb25hbGx5IGF2YWls
YWJsZSBmdW5jdGlvbnMuCi0jaWYgTExWTV9WRVJTSU9OX01BSk9SID49IDQgfHwgKExMVk1fVkVS
U0lPTl9NQUpPUiA9PSAzICYmIExMVk1fVkVSU0lPTl9NSU5PUiA+PSA2KQotICAgIHJlc3VsdC0+
QWRkTG93ZXJTd2l0Y2hQYXNzID0gTExWTUFkZExvd2VyU3dpdGNoUGFzczsKLSNlbmRpZgotICAg
IAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLSNlbHNlCi0KLS8vIENyZWF0ZSBhIGR1bW15IGlu
aXRpYWxpemVBbmRHZXRKU0NMTFZNQVBJIHRvIHBsYWNhdGUgdGhlIGJ1aWxkIHN5c3RlbS4KLWV4
dGVybiAiQyIgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZUFuZEdldEpTQ0xMVk1B
UEkoKTsKLWV4dGVybiAiQyIgdm9pZCBpbml0aWFsaXplQW5kR2V0SlNDTExWTUFQSSgpIHsgfQot
Ci0jZW5kaWYgLy8gSEFWRShMTFZNKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0v
bGlicmFyeS9MTFZNT3ZlcnJpZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGx2bS9saWJyYXJ5L0xMVk1PdmVycmlkZXMuY3BwCShyZXZpc2lvbiAxOTY2ODUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9saWJyYXJ5L0xMVk1PdmVycmlkZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZ19sbHZtLmgiCi0KLSNpbmNsdWRl
ICJMTFZNVHJhcENhbGxiYWNrLmgiCi0KLSNpZiBIQVZFKExMVk0pCi0KLWV4dGVybiAiQyIgaW50
IF9fY3hhX2F0ZXhpdCgpOwotZXh0ZXJuICJDIiBpbnQgX19jeGFfYXRleGl0KCkgeyByZXR1cm4g
MDsgfQotCi12b2lkICgqZ19sbHZtVHJhcENhbGxiYWNrKShjb25zdCBjaGFyKiBtZXNzYWdlLCAu
Li4pIE5PX1JFVFVSTjsKLQotLy8gSWYgTExWTSB0cmllcyB0byByYWlzZSBzaWduYWxzLCBhYm9y
dCwgb3IgZmFpbCBhbiBhc3NlcnRpb24sIHRoZW4gbGV0Ci0vLyBXZWJLaXQgaGFuZGxlIGl0IGlu
c3RlYWQgb2YgdHJhcHBpbmcuCi1leHRlcm4gIkMiIGludCByYWlzZShpbnQgc2lnbmFsKTsKLWV4
dGVybiAiQyIgdm9pZCBfX2Fzc2VydF9ydG4oY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNo
YXIqIGZpbGVuYW1lLCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciogZXhwcmVzc2lvbikgTk9f
UkVUVVJOOwotZXh0ZXJuICJDIiB2b2lkIGFib3J0KHZvaWQpIE5PX1JFVFVSTjsKLQotZXh0ZXJu
ICJDIiBpbnQgcmFpc2UoaW50IHNpZ25hbCkKLXsKLSAgICBnX2xsdm1UcmFwQ2FsbGJhY2soInJh
aXNlKCVkKSBjYWxsZWQuIiwgc2lnbmFsKTsKLSAgICByZXR1cm4gMDsKLX0KLWV4dGVybiAiQyIg
dm9pZCBfX2Fzc2VydF9ydG4oY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIGZpbGVu
YW1lLCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciogZXhwcmVzc2lvbikKLXsKLSAgICBpZiAo
ZnVuY3Rpb24pCi0gICAgICAgIGdfbGx2bVRyYXBDYWxsYmFjaygiQXNzZXJ0aW9uIGZhaWxlZDog
KCVzKSwgZnVuY3Rpb24gJXMsIGZpbGUgJXMsIGxpbmUgJWQuIiwgZXhwcmVzc2lvbiwgZnVuY3Rp
b24sIGZpbGVuYW1lLCBsaW5lTnVtYmVyKTsKLSAgICBnX2xsdm1UcmFwQ2FsbGJhY2soIkFzc2Vy
dGlvbiBmYWlsZWQ6ICglcyksIGZpbGUgJXMsIGxpbmUgJWQuIiwgZXhwcmVzc2lvbiwgZmlsZW5h
bWUsIGxpbmVOdW1iZXIpOwotfQotZXh0ZXJuICJDIiB2b2lkIGFib3J0KHZvaWQpCi17Ci0gICAg
Z19sbHZtVHJhcENhbGxiYWNrKCJhYm9ydCgpIGNhbGxlZC4iKTsKLX0KLQotI2VuZGlmIC8vIEhB
VkUoTExWTSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL2xpYnJhcnkvY29uZmln
X2xsdm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9saWJyYXJ5
L2NvbmZpZ19sbHZtLmgJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbHZtL2xpYnJhcnkvY29uZmlnX2xsdm0uaAkod29ya2luZyBjb3B5KQpAQCAtMSwzMyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZiBk
ZWZpbmVkKEhBVkVfQ09ORklHX0gpICYmIEhBVkVfQ09ORklHX0gKLSNpZmRlZiBCVUlMRElOR19X
SVRIX0NNQUtFCi0jaW5jbHVkZSAiY21ha2Vjb25maWcuaCIKLSNlbmRpZgotI2VuZGlmCi0jaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8d3RmL0V4cG9ydE1hY3Jvcy5oPgotCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDE5NjY4NikKKysrIFNvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxMSwxMSArNzExLDYgQEAKICNkZWZpbmUgRU5BQkxF
X0pJVCAxCiAjZW5kaWYKIAotLyogRG8gd2UgaGF2ZSBMTFZNPyAqLwotI2lmICFkZWZpbmVkKEhB
VkVfTExWTSkgJiYgT1MoREFSV0lOKSAmJiAhUExBVEZPUk0oRUZMKSAmJiAhUExBVEZPUk0oR1RL
KSAmJiBFTkFCTEUoRlRMX0pJVCkgJiYgKENQVShYODZfNjQpIHx8IENQVShBUk02NCkpCi0jZGVm
aW5lIEhBVkVfTExWTSAxCi0jZW5kaWYKLQogLyogVGhlIEZUTCAqZG9lcyBub3QqIHdvcmsgb24g
MzItYml0IHBsYXRmb3Jtcy4gRGlzYWJsZSBpdCBldmVuIGlmIHNvbWVvbmUgYXNrZWQgdXMgdG8g
ZW5hYmxlIGl0LiAqLwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAjdW5kZWYgRU5BQkxFX0ZUTF9K
SVQKQEAgLTcyOCwxMiArNzIzLDYgQEAKICNkZWZpbmUgRU5BQkxFX0ZUTF9KSVQgMAogI2VuZGlm
CiAKLS8qIElmIHBvc3NpYmxlLCB0cnkgdG8gZW5hYmxlIHRoZSBMTFZNIGRpc2Fzc2VtYmxlci4g
VGhpcyBpcyBvcHRpb25hbCBhbmQgd2UgY2FuCi0gICBmYWxsIGJhY2sgb24gVURpczg2IGlmIG5l
Y2Vzc2FyeS4gKi8KLSNpZiAhZGVmaW5lZChVU0VfTExWTV9ESVNBU1NFTUJMRVIpICYmIEhBVkUo
TExWTSkgJiYgKENQVShYODZfNjQpIHx8IENQVShYODYpIHx8IENQVShBUk02NCkpCi0jZGVmaW5l
IFVTRV9MTFZNX0RJU0FTU0VNQkxFUiAxCi0jZW5kaWYKLQogLyogSWYgcG9zc2libGUsIHRyeSB0
byBlbmFibGUgYSBkaXNhc3NlbWJsZXIuIFRoaXMgaXMgb3B0aW9uYWwuIFdlIHByb2NlZWQgaW4g
dHdvCiAgICBzdGVwczogZmlyc3Qgd2UgdHJ5IHRvIGZpbmQgc29tZSBkaXNhc3NlbWJsZXIgdGhh
dCB3ZSBjYW4gdXNlLCBhbmQgdGhlbiB3ZQogICAgZGVjaWRlIGlmIHRoZSBoaWdoLWxldmVsIGRp
c2Fzc2VtYmxlciBBUEkgY2FuIGJlIGVuYWJsZWQuICovCkBAIC03NDIsMTEgKzczMSwxMSBAQAog
I2RlZmluZSBVU0VfVURJUzg2IDEKICNlbmRpZgogCi0jaWYgIWRlZmluZWQoRU5BQkxFX0RJU0FT
U0VNQkxFUikgJiYgKFVTRShVRElTODYpIHx8IFVTRShMTFZNX0RJU0FTU0VNQkxFUikpCisjaWYg
IWRlZmluZWQoRU5BQkxFX0RJU0FTU0VNQkxFUikgJiYgVVNFKFVESVM4NikKICNkZWZpbmUgRU5B
QkxFX0RJU0FTU0VNQkxFUiAxCiAjZW5kaWYKIAotI2lmICFkZWZpbmVkKFVTRV9BUk02NF9ESVNB
U1NFTUJMRVIpICYmIEVOQUJMRShKSVQpICYmIENQVShBUk02NCkgJiYgIVVTRShMTFZNX0RJU0FT
U0VNQkxFUikKKyNpZiAhZGVmaW5lZChVU0VfQVJNNjRfRElTQVNTRU1CTEVSKSAmJiBFTkFCTEUo
SklUKSAmJiBDUFUoQVJNNjQpCiAjZGVmaW5lIFVTRV9BUk02NF9ESVNBU1NFTUJMRVIgMQogI2Vu
ZGlmCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvY29weS13ZWJraXRsaWJyYXJpZXMtdG8tcHJvZHVj
dC1kaXJlY3RvcnkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9jb3B5LXdlYmtpdGxpYnJh
cmllcy10by1wcm9kdWN0LWRpcmVjdG9yeQkocmV2aXNpb24gMTk2Njg1KQorKysgVG9vbHMvU2Ny
aXB0cy9jb3B5LXdlYmtpdGxpYnJhcmllcy10by1wcm9kdWN0LWRpcmVjdG9yeQkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4vcGVybCAtdwogCi0jIENvcHlyaWdodCAo
QykgMjAwNSwgMjAwOCwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAwNSwgMjAwOCwgMjAxMCwgMjAx
MSwgMjAxMiwgMjAxMywgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDkgKzMwLDYgQEAgdXNlIEdldG9w
dDo6TG9uZyBxdyg6Y29uZmlnIHBhc3NfdGhyb3VnaAogdXNlIGxpYiAkRmluZEJpbjo6QmluOwog
dXNlIHdlYmtpdGRpcnM7CiAKLXN1YiBidWlsZExMVk0oJCk7Ci1zdWIgc3ltbGlua0xMVk1MaWJy
YXJpZXNJZk5lZWRlZCgkJCk7Ci0KIG15ICRzaG93SGVscCA9IDA7CiBteSAkbGx2bSA9IDA7CiBt
eSAkd2tzaSA9IDA7CkBAIC01MCwxNSArNDcsOSBAQCBteSAkcHJvZ3JhbU5hbWUgPSBiYXNlbmFt
ZSgkMCk7CiBteSAkdXNhZ2UgPSA8PEVPRjsKIFVzYWdlOiAkcHJvZ3JhbU5hbWUgW29wdGlvbnNd
CiAgIC0taGVscCAgICAgICAgICAgICAgICAgICAgICAgIFNob3cgdGhpcyBoZWxwIG1lc3NhZ2UK
LSAgLS1bbm8tXWxsdm0gICAgICAgICAgICAgICAgICAgVG9nZ2xlIGNvcHlpbmcgTExWTSBkcm9w
cyAoZGVmYXVsdDogJGxsdm0pCiAgIC0tW25vLV13a3NpICAgICAgICAgICAgICAgICAgIFRvZ2ds
ZSBjb3B5aW5nIFdlYktpdFN5c3RlbUludGVyZmFjZSBkcm9wcyAoZGVmYXVsdDogJHdrc2kpCiAg
IC0tY2xlYW4gICAgICAgICAgICAgICAgICAgICAgIENsZWFuIHRoZSBsaWJyYXJpZXMgKGRlZmF1
bHQ6ICRjbGVhbikKLSAgLS11c2UtbGx2bS1pbmNsdWRlcz08cGF0aD4gICAgR2V0IHRoZSBMTFZN
IGlubHVkZXMgcGFja2FnZSBmcm9tIDxwYXRoPgotICAtLXVzZS1sbHZtLWxpYnJhcmllcz08cGF0
aD4gICBHZXQgdGhlIExMVk0gbGlicmFyaWVzIHBhY2thZ2UgZnJvbSA8cGF0aD4KICAgLS1bbm8t
XXVzZS1mdWxsLWxpYi1wYXRocyAgICAgVG9nZ2xlIHVzaW5nIGZ1bGwgbGlicmFyeSBwYXRocwot
ICAtLVtuby1dcHJlZmVyLXN5c3RlbS1sbHZtICAgICBUb2dnbGUgcHJlZmVycmluZyB0aGUgc3lz
dGVtIExMVk0gb3ZlciB0aGUgYmluYXJ5IGRyb3BzIChkZWZhdWx0OiAkcHJlZmVyU3lzdGVtTExW
TU92ZXJEcm9wcykKLSAgLS1sbHZtLXN1YmRpcmVjdG9yeT08bmFtZT4gICAgU2V0IHRoZSBuYW1l
IG9mIHRoZSBMTFZNIHN1YmRpcmVjdG9yeSB0byBzZWFyY2ggZm9yIChkZWZhdWx0OiAkbGx2bVN1
YmRpcmVjdG9yeU5hbWUpCi0gIC0tbGx2bS1wcmVmaXg9PHBhdGg+ICAgICAgICAgIFNldCB0aGUg
cHJlZml4IGludG8gd2hpY2ggTExWTSBpcyBpbnN0YWxsZWQgKGRlZmF1bHQ6ICRsbHZtUHJlZml4
KQogICAtLXNkaz08c2RrPiAgICAgICAgICAgICAgICAgICBVc2UgYSBzcGVjaWZpYyBYY29kZSBT
REsKICAgLS1kZXZpY2UgICAgICAgICAgICAgICAgICAgICAgVXNlIHRoZSBjdXJyZW50IGlwaG9u
ZW9zLmludGVybmFsIFNESyAoaU9TIG9ubHkpCiAgIC0tc2ltdWxhdG9yICAgICAgICAgICAgICAg
ICAgIFVzZSB0aGUgY3VycmVudCBpcGhvbmVzaW11bGF0b3IgU0RLIChpT1Mgb25seSkKQEAgLTE0
MCwxMCArMTMxLDggQEAgc3ViIGRpdHRvSGVhZGVycwogaWYgKCRjbGVhbikgewogICAgIHByaW50
ICJDbGVhbmluZy5cbiI7ICAgIAogICAgIChzeXN0ZW0oInJtIiwgIi1yZiIsIEZpbGU6OlNwZWMt
PmNhdGZpbGUoJHByb2R1Y3REaXIsICJ1c3IiLCAibG9jYWwiLCAiaW5jbHVkZSIsICJXZWJLaXRT
eXN0ZW1JbnRlcmZhY2UuaCIpKSA9PSAwKSBvciBkaWU7Ci0gICAgKHN5c3RlbSgicm0iLCAiLXJm
IiwgIiRwcm9kdWN0RGlyJGxsdm1QcmVmaXgiKSA9PSAwKSBvciBkaWU7CiAgICAgdW5saW5rIGds
b2IgIiRwcm9kdWN0RGlyL2xpYldlYktpdFN5c3RlbUludGVyZmFjZSoiIG9yIGRpZSBpZiBnbG9i
ICIkcHJvZHVjdERpci9saWJXZWJLaXRTeXN0ZW1JbnRlcmZhY2UqIjsKICAgICB1bmxpbmsgZ2xv
YiAiJHByb2R1Y3REaXIvdXNyL2xvY2FsL2xpYi9saWJXZWJLaXRTeXN0ZW1JbnRlcmZhY2UqIiBv
ciBkaWUgaWYgZ2xvYiAiJHByb2R1Y3REaXIvdXNyL2xvY2FsL2xpYi9saWJXZWJLaXRTeXN0ZW1J
bnRlcmZhY2UqIjsKLSAgICB1bmxpbmsgZ2xvYiAiJHByb2R1Y3REaXIvbGliTExWTSoiIG9yIGRp
ZSBpZiBnbG9iICIkcHJvZHVjdERpci9saWJMTFZNKiI7CiAgICAgdW5saW5rIGdsb2IgIiRwcm9k
dWN0RGlyL2xpYkxUTyoiIG9yIGRpZSBpZiBnbG9iICIkcHJvZHVjdERpci9saWJMVE8qIjsKIH0K
IApAQCAtMTgyLDc4ICsxNzEsMTAgQEAgaWYgKCR3a3NpKSB7CiB9CiAKIGlmICgkbGx2bSkgewot
ICAgIChzeXN0ZW0oIm1rZGlyIiwgIi1wIiwgIiRwcm9kdWN0RGlyJGxsdm1QcmVmaXgvaW5jbHVk
ZSIpID09IDApIG9yIGRpZTsKLQotICAgIG15ICRsaWJyYXJ5RGlyID0gJHVzZUZ1bGxMaWJQYXRo
cyA/ICIkcHJvZHVjdERpciRsbHZtUHJlZml4L2xpYiIgOiAkcHJvZHVjdERpcjsKLSAgICAjIEFs
d2F5cyBjcmVhdGUgYSBkaXJlY3RvcnkgYXQgdGhlIGZ1bGwgbGlicmFyeSBwYXRoLCBiZWNhdXNl
IHRoZSBKYXZhU2NyaXB0Q29yZSBidWlsZCBlbWl0cyBhIHdhcm5pbmcgaWYgaXQncyBub3QgdGhl
cmUuCi0gICAgKHN5c3RlbSgibWtkaXIiLCAiLXAiLCAiJHByb2R1Y3REaXIkbGx2bVByZWZpeC9s
aWIiKSA9PSAwKSBvciBkaWU7Ci0KLSAgICAoc3lzdGVtKCJybSIsICItZiIsIEZpbGU6OlNwZWMt
PmNhdGZpbGUoJHByb2R1Y3REaXIsICJFeHRyYUluY2x1ZGVzRm9yTG9jYWxMTFZNQnVpbGQiKSkg
PT0gMCkgb3IgZGllOwotCi0gICAgaWYgKCRwcmVmZXJTeXN0ZW1MTFZNT3ZlckRyb3BzKSB7Ci0g
ICAgICAgIHByaW50ICJVc2luZyBzeXN0ZW0gTExWTS5cbiI7Ci0gICAgICAgIGV4aXQgMDsKLSAg
ICB9Ci0KLSAgICBteSAkbGx2bVNvdXJjZURpcmVjdG9yeSA9ICRFTlZ7TExWTV9TT1VSQ0VfUEFU
SH07Ci0gICAgJGxsdm1Tb3VyY2VEaXJlY3RvcnkgPSBGaWxlOjpTcGVjLT5jYXRkaXIoc291cmNl
RGlyKCksICRsbHZtU3ViZGlyZWN0b3J5TmFtZSkgdW5sZXNzICRsbHZtU291cmNlRGlyZWN0b3J5
OwotICAgIGlmICgtZCAkbGx2bVNvdXJjZURpcmVjdG9yeSkgewotICAgICAgICBteSAkbGx2bUJ1
aWxkRmlsZSA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJGxsdm1Tb3VyY2VEaXJlY3RvcnksICJMTFZN
QnVpbGQudHh0Iik7Ci0gICAgICAgIGlmICgtZiAkbGx2bUJ1aWxkRmlsZSkgewotICAgICAgICAg
ICAgcHJpbnQgIlVzaW5nIExMVk0gc291cmNlIGZyb20gJGxsdm1Tb3VyY2VEaXJlY3RvcnkuXG4i
OwotICAgICAgICAgICAgYnVpbGRMTFZNKCRsbHZtU291cmNlRGlyZWN0b3J5KTsKLSAgICAgICAg
ICAgIGlmIChzeW1saW5rTExWTUxpYnJhcmllc0lmTmVlZGVkKCRsbHZtU291cmNlRGlyZWN0b3J5
LCAkbGlicmFyeURpcikpIHsKLSAgICAgICAgICAgICAgICAjIExMVk0gbGlicmFyaWVzIGNoYW5n
ZWQ7IG1ha2UgSmF2YVNjcmlwdENvcmUgcmVsaW5rIGFnYWluc3QgdGhlIG5ldyBMTFZNIHRoZSBu
ZXh0IHRpbWUgaXQgaXMgYnVpbHQuCi0gICAgICAgICAgICAgICAgKHN5c3RlbSgidG91Y2giLCAi
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vbGlicmFyeS9MTFZNQW5jaG9yLmNwcCIpID09IDAp
IG9yIGRpZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGV4aXQgMDsKLSAgICAgICAgfQot
ICAgICAgICBwcmludCBTVERFUlIgIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKipcbiI7Ci0gICAgICAgIHByaW50IFNUREVSUiAiQ2Fu
bm90IGZpbmQgZmlsZSAnJGxsdm1CdWlsZEZpbGUnLlxuIjsKLSAgICAgICAgcHJpbnQgU1RERVJS
ICJQbGVhc2UgZW5zdXJlIHRoYXQgeW91IGhhdmUgYSBjb21wbGV0ZSBMTFZNIGRpc3RyaWJ1dGlv
bi5cbiI7Ci0gICAgICAgIHByaW50IFNUREVSUiAiWW91IGNhbiBjaGVjayBvdXQgTExWTSB0cnVu
ayBpbnRvIHRoZSBXZWJLaXQgZGlyZWN0b3J5IGJ5IHJ1bm5pbmc6XG4iOwotICAgICAgICBwcmlu
dCBTVERFUlIgInN2biBjbyBodHRwOi8vbGx2bS5vcmcvc3ZuL2xsdm0tcHJvamVjdC9sbHZtL3Ry
dW5rIGxsdm1cbiI7Ci0gICAgICAgIHByaW50IFNUREVSUiAiKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIjsKLSAgICAgICAgZXhp
dCAxOwotICAgIH0KLQotICAgICRsbHZtSW5jbHVkZVBhY2thZ2UgPSAkRU5We0xMVk1fTElCUkFS
WV9QQUNLQUdFfSB1bmxlc3MgJGxsdm1JbmNsdWRlUGFja2FnZTsKLSAgICAkbGx2bUluY2x1ZGVQ
YWNrYWdlID0gJEVOVntMTFZNX0lOQ0xVREVfUEFDS0FHRX0gdW5sZXNzICRsbHZtSW5jbHVkZVBh
Y2thZ2U7Ci0gICAgaWYgKCEkbGx2bUxpYnJhcnlQYWNrYWdlIHx8ICEkbGx2bUluY2x1ZGVQYWNr
YWdlKSB7Ci0gICAgICAgIGlmIChpc0lPU1dlYktpdCgpKSB7Ci0gICAgICAgICAgICBteSAkbWFq
b3JTREtWZXJzaW9uID0gaW9zVmVyc2lvbigpLT57Im1ham9yIn07Ci0gICAgICAgICAgICAkbGx2
bUxpYnJhcnlQYWNrYWdlID0gIldlYktpdExpYnJhcmllcy9MTFZNTGlicmFyaWVzSU9TJG1ham9y
U0RLVmVyc2lvbi50YXIuYnoyIjsKLSAgICAgICAgICAgICRsbHZtSW5jbHVkZVBhY2thZ2UgPSAi
V2ViS2l0TGlicmFyaWVzL0xMVk1JbmNsdWRlc0lPUyRtYWpvclNES1ZlcnNpb24udGFyLmJ6MiI7
Ci0gICAgICAgIH0gZWxzaWYgKGlzQXBwbGVNYWNXZWJLaXQoKSkgewotICAgICAgICAgICAgaWYg
KCRvc3hWZXJzaW9uIGVxICIxMC4xMCIpIHsKLSAgICAgICAgICAgICAgICAkbGx2bUxpYnJhcnlQ
YWNrYWdlID0gIldlYktpdExpYnJhcmllcy9MTFZNTGlicmFyaWVzWW9zZW1pdGUudGFyLmJ6MiI7
Ci0gICAgICAgICAgICAgICAgJGxsdm1JbmNsdWRlUGFja2FnZSA9ICJXZWJLaXRMaWJyYXJpZXMv
TExWTUluY2x1ZGVzWW9zZW1pdGUudGFyLmJ6MiI7Ci0gICAgICAgICAgICB9IGVsc2lmICgkb3N4
VmVyc2lvbiBlcSAiMTAuMTEiKSB7Ci0gICAgICAgICAgICAgICAgJGxsdm1MaWJyYXJ5UGFja2Fn
ZSA9ICJXZWJLaXRMaWJyYXJpZXMvTExWTUxpYnJhcmllc0VsQ2FwaXRhbi50YXIuYnoyIjsKLSAg
ICAgICAgICAgICAgICAkbGx2bUluY2x1ZGVQYWNrYWdlID0gIldlYktpdExpYnJhcmllcy9MTFZN
SW5jbHVkZXNFbENhcGl0YW4udGFyLmJ6MiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgaWYgKCRsbHZtTGlicmFyeVBhY2thZ2UgJiYgJGxsdm1JbmNsdWRlUGFja2FnZSkg
ewotICAgICAgICBwcmludCAiVXNpbmcgTExWTSBiaW5hcnkgZHJvcHMgJGxsdm1MaWJyYXJ5UGFj
a2FnZSBhbmQgJGxsdm1JbmNsdWRlUGFja2FnZS5cbiI7Ci0gICAgICAgIGlmICh1bnBhY2tJZk5l
Y2Vzc2FyeSgkbGlicmFyeURpciwgIiRsaWJyYXJ5RGlyL2xpYkxMVk1Db3JlLmEiLCAkbGx2bUxp
YnJhcnlQYWNrYWdlLCAxKSkgewotICAgICAgICAgICAgIyBMTFZNIGxpYnJhcmllcyBjaGFuZ2Vk
OyBtYWtlIEphdmFTY3JpcHRDb3JlIHJlbGluayBhZ2FpbnN0IHRoZSBuZXcgTExWTSB0aGUgbmV4
dCB0aW1lIGl0IGlzIGJ1aWx0LgotICAgICAgICAgICAgKHN5c3RlbSgidG91Y2giLCAiU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsdm0vbGlicmFyeS9MTFZNQW5jaG9yLmNwcCIpID09IDApIG9yIGRp
ZTsKLSAgICAgICAgfQotICAgICAgICB1bnBhY2tJZk5lY2Vzc2FyeShGaWxlOjpTcGVjLT5jYXRk
aXIoIiRwcm9kdWN0RGlyJGxsdm1QcmVmaXgiLCAiaW5jbHVkZSIpLCBGaWxlOjpTcGVjLT5jYXRm
aWxlKCIkcHJvZHVjdERpciRsbHZtUHJlZml4IiwgImluY2x1ZGUiLCAibGx2bS1jIiwgIkNvcmUu
aCIpLCAkbGx2bUluY2x1ZGVQYWNrYWdlLCAwKTsKLSAgICAgICAgZXhpdCAwOwotICAgIH0KLQot
ICAgIHByaW50IFNUREVSUiAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKlxuIjsKLSAgICBwcmludCBTVERFUlIgIkRvbid0IGtub3cg
d2hlcmUgdG8gZmluZCBMTFZNIVxuIjsKLSAgICBwcmludCBTVERFUlIgIlxuIjsKLSAgICBwcmlu
dCBTVERFUlIgIlRyeSBkZWZpbmluZyBMTFZNX0xJQlJBUllfUEFDS0FHRSBhbmQgTExWTV9JTkNM
VURFX1BBQ0tBR0Ugb3Igc2V0dGluZyB0aGVcbiI7Ci0gICAgcHJpbnQgU1RERVJSICItLXVzZS1s
bHZtLWluY2x1ZGVzIGFuZCAtLXVzZS1sbHZtLWxpYnJhcmllcyBvcHRpb25zLlxuIjsKLSAgICBw
cmludCBTVERFUlIgIlxuIjsKLSAgICBwcmludCBTVERFUlIgIkFsdGVybmF0aXZlbHksIHlvdSBj
YW4gY2hlY2sgb3V0IGxsdm0gdHJ1bmsgaW50byB0aGUgV2ViS2l0IGRpcmVjdG9yeTpcbiI7Ci0g
ICAgcHJpbnQgU1RERVJSICJzdm4gY28gaHR0cDovL2xsdm0ub3JnL3N2bi9sbHZtLXByb2plY3Qv
bGx2bS90cnVuayBsbHZtXG4iOwotICAgIHByaW50IFNUREVSUiAiKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIjsKLSAgICBleGl0
IDE7CisgICAgIyBXZSBoYXZlIHZhcmlvdXMgc2NyaXB0cyB0aGF0IGNhbGwgdGhpcyBzY3JpcHQg
YW5kIHBhc3MgTExWTS1yZWxhdGVkIG9wdGlvbnMuIFNvLCB3ZSBzb3J0IG9mCisgICAgIyBzaWxl
bnRseSBpZ25vcmUgdGhlbSBmb3Igbm93LiBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgb25jZSB3ZSBj
b25maXJtIHRoYXQgd2UndmUgYXhlZCBhbGwgb2YgdGhlCisgICAgIyBMTFZNIHN1cHBvcnQgZXZl
cnl3aGVyZS4KKyAgICBwcmludCAiV2FybmluZzogd2Ugbm8gbG9uZ2VyIGRlcGVuZCBvbiBMTFZN
IHNvIHRoaXMgc2NyaXB0IGRvZXMgbm90aGluZyBmb3IgTExWTS4gTExWTS1yZWxhdGVkIG9wdGlv
bnMgd2lsbCBiZSByZW1vdmVkIHNvb24uXG4iOwogfQogCiBzdWIgZmlsZUNvbnRhaW5zCkBAIC0y
NzUsMTExICsxOTYsMyBAQCBzdWIgaXNDb250ZW50T2ZGaWxlRXF1YWxUb1N0cmluZygkJCkKICAg
ICByZXR1cm4gJGNvbnRlbnRzIGVxICRzdHJpbmc7CiB9CiAKLXN1YiBidWlsZExMVk0oJCkKLXsK
LSAgICBteSAoJGxsdm1Tb3VyY2VEaXJlY3RvcnkpID0gQF87Ci0KLSAgICBteSAkc2F2ZWRXb3Jr
aW5nRGlyZWN0b3J5ID0gZ2V0Y3dkKCk7Ci0gICAgY2hvbXAobXkgJHNka1Jvb3RFbnZpcm9ubWVu
dFZhcmlhYmxlID0gYHhjcnVuIEB7W3hjb2RlU0RLKCkgPyAiLS1zZGsgIiAuIHhjb2RlU0RLKCkg
OiAiIl19IC0tc2hvdy1zZGstcGF0aGApOwotICAgICRzZGtSb290RW52aXJvbm1lbnRWYXJpYWJs
ZSA9ICJTREtST09UPSRzZGtSb290RW52aXJvbm1lbnRWYXJpYWJsZSI7Ci0KLSAgICBteSAkbGx2
bUJhc2VQcm9kdWN0RGlyZWN0b3J5ID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKCRsbHZtU291cmNlRGly
ZWN0b3J5LCAid2tMTFZNQnVpbGQiKTsKLSAgICBpZiAoIS1lIEZpbGU6OlNwZWMtPmNhdGZpbGUo
JGxsdm1CYXNlUHJvZHVjdERpcmVjdG9yeSwgIk1ha2VmaWxlLmNvbmZpZyIpKSB7Ci0gICAgICAg
IHN5c3RlbSgibWtkaXIiLCAiLXAiLCAkbGx2bUJhc2VQcm9kdWN0RGlyZWN0b3J5KTsKLSAgICAg
ICAgY2hkaXIoJGxsdm1CYXNlUHJvZHVjdERpcmVjdG9yeSkgb3IgZGllOwotICAgICAgICBteSBA
YXJncyA9IHF3KAotICAgICAgICAgICAgLS1lbmFibGUtb3B0aW1pemVkPXllcwotICAgICAgICAg
ICAgLS1lbmFibGUtYmFja3RyYWNlcz1ubwotICAgICAgICAgICAgLS1lbmFibGUtbGliY3BwPXll
cwotICAgICAgICAgICAgLS1lbmFibGUtemxpYj1ubwotICAgICAgICAgICAgLS1lbmFibGUtdGVy
bWluZm89bm8KLSAgICAgICAgICAgIC0tZW5hYmxlLWNyYXNoLW92ZXJyaWRlcz1ubwotICAgICAg
ICApOwotICAgICAgICBteSAkdGFyZ2V0QXJjaGl0ZWN0dXJlOwotICAgICAgICBpZiAoaXNJT1NX
ZWJLaXQoKSkgewotICAgICAgICAgICAgJHRhcmdldEFyY2hpdGVjdHVyZSA9ICJhcm02NCI7Ci0g
ICAgICAgICAgICBwdXNoIEBhcmdzLCAiLS1ob3N0PWFybS1hcHBsZS1kYXJ3aW4iOwotICAgICAg
ICAgICAgcHVzaCBAYXJncywgIi0tZW5hYmxlLXRhcmdldHM9JHRhcmdldEFyY2hpdGVjdHVyZSI7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAkdGFyZ2V0QXJjaGl0ZWN0dXJlID0gIng4
Nl82NCI7Ci0gICAgICAgICAgICBwdXNoIEBhcmdzLCAiLS1lbmFibGUtdGFyZ2V0cz0kdGFyZ2V0
QXJjaGl0ZWN0dXJlIjsKLSAgICAgICAgfQotCi0gICAgICAgICMgRW52aXJvbm1lbnQgdmFyaWFi
bGVzIGFyZSBleHBsaWNpdGx5IGFwcGVuZGVkIGFmdGVyIGNvbW1hbmQgbGluZSBvcHRpb25zIHNv
IHRoYXQKLSAgICAgICAgIyB0aGUgc2NyaXB0IGNvbmZpZ3VyZSBjYWNoZXMgdGhlbSBpbiBmaWxl
IGNvbmZpZy5zdGF0dXMgZm9yIGF1dG9tYXRpYyByZWNvbmZpZ3VyYXRpb24uCi0gICAgICAgIGlm
IChpc0lPU1dlYktpdCgpKSB7Ci0gICAgICAgICAgICAjIFdlIG11c3QgZXhwbGljaXRseSBzcGVj
aWZ5IHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIHRvIHRoZSBjb21waWxlci9wcmVwcm9jZXNzb3IK
LSAgICAgICAgICAgICMgc2luY2Ugd2UgYXJlIGNyb3NzLWNvbXBpbGluZyBMTFZNLgotICAgICAg
ICAgICAgZm9yIG15ICRlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSAocXcoQ0ZMQUdTIENYWEZMQUdT
IENQUEZMQUdTKSkgewotICAgICAgICAgICAgICAgIHB1c2ggQGFyZ3MsICIkZW52aXJvbm1lbnRW
YXJpYWJsZU5hbWU9LWFyY2ggJHRhcmdldEFyY2hpdGVjdHVyZSI7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgcHVzaCBAYXJncywgJHNka1Jvb3RFbnZpcm9ubWVudFZhcmlhYmxl
OwotICAgICAgICAoc3lzdGVtKCIuLi9jb25maWd1cmUiLCBAYXJncykgPT0gMCkgb3IgZGllOwot
ICAgIH0KLQotICAgIGNoZGlyKCRsbHZtQmFzZVByb2R1Y3REaXJlY3RvcnkpIG9yIGRpZTsKLSAg
ICBteSAkc2F2ZWRQYXRoID0gJEVOVnsiUEFUSCJ9OwotCi0gICAgbXkgJGJpbmFyaWVzRGlyZWN0
b3J5ID0gImJpbmFyaWVzRm9yTExWTUJ1aWxkIjsKLSAgICBteSAkcGF0aEVudmlyb25tZW50VmFy
aWFibGUgPSAiIjsKLSAgICBpZiAoLWUgJGJpbmFyaWVzRGlyZWN0b3J5KSB7Ci0gICAgICAgIG15
ICRiaW5hcmllc1BhdGggPSBGaWxlOjpTcGVjLT5yZWwyYWJzKCRiaW5hcmllc0RpcmVjdG9yeSk7
Ci0gICAgICAgICRwYXRoRW52aXJvbm1lbnRWYXJpYWJsZSA9ICJQQVRIPSIgLiBqb2luKCI6Iiwg
JGJpbmFyaWVzUGF0aCwgJyRQQVRIJyk7Ci0gICAgfQotICAgIG15ICRtYWtlQ29tbWFuZCA9ICJl
bnYgLWkgYmFzaCAtbCAtYyBcIiRwYXRoRW52aXJvbm1lbnRWYXJpYWJsZSAkc2RrUm9vdEVudmly
b25tZW50VmFyaWFibGUgbWFrZSAtaiBgc3lzY3RsIC1uIGh3LmFjdGl2ZWNwdWBcIiI7Ci0gICAg
cHJpbnQgJG1ha2VDb21tYW5kIC4gIlxuIjsKLSAgICAoc3lzdGVtKCRtYWtlQ29tbWFuZCkgPT0g
MCkgb3IgZGllOwotCi0gICAgJEVOVnsiUEFUSCJ9ID0gJHNhdmVkUGF0aDsKLSAgICBjaGRpcigk
c2F2ZWRXb3JraW5nRGlyZWN0b3J5KTsKLX0KLQotc3ViIHN5bWxpbmtMTFZNTGlicmFyaWVzSWZO
ZWVkZWQoJCQpCi17Ci0gICAgbXkgKCRsbHZtU291cmNlRGlyZWN0b3J5LCAkbGlicmFyeVRhcmdl
dERpcmVjdG9yeSkgPSBAXzsKLQotICAgIG15ICRsbHZtTWFrZWZpbGVDb25maWcgPSBGaWxlOjpT
cGVjLT5jYXRmaWxlKCRsbHZtU291cmNlRGlyZWN0b3J5LCAid2tMTFZNQnVpbGQiLCAiTWFrZWZp
bGUuY29uZmlnIik7Ci0gICAgbXkgJGNvbmZpZ3VyYXRpb25EaXJlY3RvcnlOYW1lID0gIiI7Ci0g
ICAgaWYgKGZpbGVDb250YWlucygkbGx2bU1ha2VmaWxlQ29uZmlnLCAiRU5BQkxFX09QVElNSVpF
RD0xIikpIHsKLSAgICAgICAgJGNvbmZpZ3VyYXRpb25EaXJlY3RvcnlOYW1lIC49ICJSZWxlYXNl
IjsKLSAgICB9IGVsc2UgewotICAgICAgICAkY29uZmlndXJhdGlvbkRpcmVjdG9yeU5hbWUgLj0g
IkRlYnVnIjsKLSAgICB9Ci0gICAgJGNvbmZpZ3VyYXRpb25EaXJlY3RvcnlOYW1lIC49ICIrQXNz
ZXJ0cyIgdW5sZXNzIGZpbGVDb250YWlucygkbGx2bU1ha2VmaWxlQ29uZmlnLCAiRElTQUJMRV9B
U1NFUlRJT05TPTEiKTsKLSAgICBteSAkbGlicmFyeVNvdXJjZURpcmVjdG9yeSA9IEZpbGU6OlNw
ZWMtPmNhdGRpcigkbGx2bVNvdXJjZURpcmVjdG9yeSwgIndrTExWTUJ1aWxkIiwgJGNvbmZpZ3Vy
YXRpb25EaXJlY3RvcnlOYW1lLCAibGliIik7Ci0KLSAgICBteSAkc2hvdWxkVXBkYXRlTExWTUxp
YnJhcnlUb2tlbiA9IDA7Ci0gICAgcHJpbnQoIlN5bWxpbmtpbmcgbGlicmFyaWVzIGZyb20gJGxp
YnJhcnlTb3VyY2VEaXJlY3RvcnkgdG8gJGxpYnJhcnlUYXJnZXREaXJlY3RvcnlcbiIpOwotICAg
IG9wZW5kaXIobXkgJGRpckhhbmRsZSwgJGxpYnJhcnlTb3VyY2VEaXJlY3RvcnkpOwotICAgIHdo
aWxlIChteSAkZmlsZW5hbWUgPSByZWFkZGlyKCRkaXJIYW5kbGUpKSB7Ci0gICAgICAgIG5leHQg
aWYgJGZpbGVuYW1lICF+IC9cLmEkLzsKLSAgICAgICAgbmV4dCBpZiAkZmlsZW5hbWUgPX4gL2xp
Ymd0ZXN0LzsKLQotICAgICAgICBwcmludCAiICAgU3ltbGluayAkZmlsZW5hbWVcbiI7Ci0gICAg
ICAgIG15ICRzb3VyY2VMaWJyYXJ5ID0gRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkbGlicmFyeVNvdXJj
ZURpcmVjdG9yeSwgJGZpbGVuYW1lKTsKLSAgICAgICAgbXkgJHRhcmdldExpYnJhcnkgPSBGaWxl
OjpTcGVjLT5jYXRmaWxlKCRsaWJyYXJ5VGFyZ2V0RGlyZWN0b3J5LCAkZmlsZW5hbWUpOwotICAg
ICAgICBteSAkcmFubGliVG9rZW4gPSBGaWxlOjpTcGVjLT5jYXRmaWxlKCRsaWJyYXJ5VGFyZ2V0
RGlyZWN0b3J5LCAiLnJhbmxpYlRva2VuLSRmaWxlbmFtZSIpOwotICAgICAgICB1bmxpbmsoJHRh
cmdldExpYnJhcnkpOwotICAgICAgICBzeW1saW5rKCRzb3VyY2VMaWJyYXJ5LCAkdGFyZ2V0TGli
cmFyeSk7Ci0gICAgICAgIGlmICgkZm9yY2UgfHwgIS1lICRyYW5saWJUb2tlbiB8fCAhaXNDb250
ZW50T2ZGaWxlRXF1YWxUb1N0cmluZygkcmFubGliVG9rZW4sICRzb3VyY2VMaWJyYXJ5KSB8fCAt
TSAkcmFubGliVG9rZW4gPiAtTSAkc291cmNlTGlicmFyeSkgewotICAgICAgICAgICAgcHJpbnQg
IiAgIFJhbmxpYiAkZmlsZW5hbWVcbiI7Ci0gICAgICAgICAgICBleGVjdXRlUmFubGliKCR0YXJn
ZXRMaWJyYXJ5KTsKLSAgICAgICAgICAgIG9wZW4oUkFOTElCX1RPS0VOLCAiPiIsICRyYW5saWJU
b2tlbikgb3IgZGllICJGYWlsZWQgdG8gb3BlbiAkcmFubGliVG9rZW46ICQhIjsKLSAgICAgICAg
ICAgIHByaW50IFJBTkxJQl9UT0tFTiAkc291cmNlTGlicmFyeTsKLSAgICAgICAgICAgIGNsb3Nl
KFJBTkxJQl9UT0tFTik7Ci0gICAgICAgICAgICAkc2hvdWxkVXBkYXRlTExWTUxpYnJhcnlUb2tl
biA9IDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2xvc2VkaXIoJGRpckhhbmRsZSk7Ci0KLSAg
ICBteSAkdGFyZ2V0SW5jbHVkZUxMVk1EaXJlY3RvcnkgPSBGaWxlOjpTcGVjLT5jYXRkaXIoIiRw
cm9kdWN0RGlyJGxsdm1QcmVmaXgiLCAiaW5jbHVkZSIsICJsbHZtIik7Ci0gICAgbXkgJHRhcmdl
dEluY2x1ZGVMTFZNQ0RpcmVjdG9yeSA9IEZpbGU6OlNwZWMtPmNhdGRpcigiJHByb2R1Y3REaXIk
bGx2bVByZWZpeCIsICJpbmNsdWRlIiwgImxsdm0tYyIpOwotICAgIChzeXN0ZW0oInJtIiwgIi1y
ZiIsICR0YXJnZXRJbmNsdWRlTExWTURpcmVjdG9yeSkgPT0gMCkgb3IgZGllOwotICAgIChzeXN0
ZW0oInJtIiwgIi1yZiIsICR0YXJnZXRJbmNsdWRlTExWTUNEaXJlY3RvcnkpID09IDApIG9yIGRp
ZTsKLSAgICBzeW1saW5rKEZpbGU6OlNwZWMtPmNhdGRpcigkbGx2bVNvdXJjZURpcmVjdG9yeSwg
ImluY2x1ZGUiLCAibGx2bSIpLCAkdGFyZ2V0SW5jbHVkZUxMVk1EaXJlY3RvcnkpIG9yIGRpZTsK
LSAgICBzeW1saW5rKEZpbGU6OlNwZWMtPmNhdGRpcigkbGx2bVNvdXJjZURpcmVjdG9yeSwgImlu
Y2x1ZGUiLCAibGx2bS1jIiksICR0YXJnZXRJbmNsdWRlTExWTUNEaXJlY3RvcnkpIG9yIGRpZTsK
LSAgICBzeW1saW5rKEZpbGU6OlNwZWMtPmNhdGRpcigkbGx2bVNvdXJjZURpcmVjdG9yeSwgIndr
TExWTUJ1aWxkIiwgImluY2x1ZGUiKSwgRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkcHJvZHVjdERpciwg
IkV4dHJhSW5jbHVkZXNGb3JMb2NhbExMVk1CdWlsZCIpKSBvciBkaWU7Ci0KLSAgICByZXR1cm4g
JHNob3VsZFVwZGF0ZUxMVk1MaWJyYXJ5VG9rZW47Ci19Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271587</attachid>
            <date>2016-02-17 14:09:32 -0800</date>
            <delta_ts>2016-02-17 14:13:43 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>619328</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2Njg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1NSBA
QAorMjAxNi0wMi0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFJlbW92ZSBMTFZNIGRlcGVuZGVuY2llcyBmcm9tIFdlYktpdAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0MzIzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRm
Zy9ERkdDb21tb24uaDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpj
b21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21waWxlVGlt
ZVN0YXRzKToKKyAgICAgICAgKiBkaXNhc3NlbWJsZXIvQVJNNjREaXNhc3NlbWJsZXIuY3BwOgor
ICAgICAgICAoSlNDOjp0cnlUb0Rpc2Fzc2VtYmxlKToKKyAgICAgICAgKiBkaXNhc3NlbWJsZXIv
QVJNdjdEaXNhc3NlbWJsZXIuY3BwOgorICAgICAgICAoSlNDOjp0cnlUb0Rpc2Fzc2VtYmxlKToK
KyAgICAgICAgKiBkaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
ZGlzYXNzZW1ibGUpOgorICAgICAgICAoSlNDOjpkaXNhc3NlbWJsZUFzeW5jaHJvbm91c2x5KToK
KyAgICAgICAgKiBkaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6OnRy
eVRvRGlzYXNzZW1ibGUpOgorICAgICAgICAqIGRpc2Fzc2VtYmxlci9MTFZNRGlzYXNzZW1ibGVy
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBkaXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5o
OiBSZW1vdmVkLgorICAgICAgICAqIGRpc2Fzc2VtYmxlci9VRGlzODZEaXNhc3NlbWJsZXIuY3Bw
OgorICAgICAgICAoSlNDOjp0cnlUb0Rpc2Fzc2VtYmxlV2l0aFVEaXM4Nik6CisgICAgICAgICog
ZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjp0cnlUb0Rp
c2Fzc2VtYmxlV2l0aFVEaXM4Nik6CisgICAgICAgICogZGlzYXNzZW1ibGVyL1g4NkRpc2Fzc2Vt
Ymxlci5jcHA6CisgICAgICAgIChKU0M6OnRyeVRvRGlzYXNzZW1ibGUpOgorICAgICAgICAqIGZ0
bC9GVExBYmJyZXZpYXRlZFR5cGVzLmg6CisgICAgICAgICogZnRsL0ZUTEFiYnJldmlhdGlvbnMu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpBYnN0cmFjdEhlYXA6OmRlY29yYXRlSW5zdHJ1Y3Rpb24pOgorICAgICAgICAo
SlNDOjpGVEw6OkFic3RyYWN0SGVhcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJh
Y3RGaWVsZDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkZUTDo6SW5kZXhlZEFic3RyYWN0SGVhcDo6
SW5kZXhlZEFic3RyYWN0SGVhcCk6CisgICAgICAgIChKU0M6OkZUTDo6SW5kZXhlZEFic3RyYWN0
SGVhcDo6fkluZGV4ZWRBYnN0cmFjdEhlYXApOgorICAgICAgICAoSlNDOjpGVEw6OkluZGV4ZWRB
YnN0cmFjdEhlYXA6OmJhc2VJbmRleCk6CisgICAgICAgIChKU0M6OkZUTDo6SW5kZXhlZEFic3Ry
YWN0SGVhcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkZUTDo6TnVtYmVyZWRBYnN0cmFjdEhlYXA6
Ok51bWJlcmVkQWJzdHJhY3RIZWFwKToKKyAgICAgICAgKEpTQzo6RlRMOjpOdW1iZXJlZEFic3Ry
YWN0SGVhcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzb2x1dGVBYnN0cmFjdEhlYXA6
OkFic29sdXRlQWJzdHJhY3RIZWFwKToKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXA6
OnRiYWFNZXRhZGF0YVNsb3cpOiBEZWxldGVkLgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhl
YXAuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXA6OkFic3RyYWN0SGVhcCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwOjpoZWFwTmFtZSk6CisgICAgICAgIChKU0M6
OkZUTDo6SW5kZXhlZEFic3RyYWN0SGVhcDo6YXRBbnlJbmRleCk6CisgICAgICAgIChKU0M6OkZU
TDo6TnVtYmVyZWRBYnN0cmFjdEhlYXA6OmF0QW55TnVtYmVyKToKKyAgICAgICAgKEpTQzo6RlRM
OjpBYnNvbHV0ZUFic3RyYWN0SGVhcDo6YXRBbnlBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6RlRM
OjpBYnN0cmFjdEhlYXA6OnRiYWFNZXRhZGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogZnRsL0ZU
TEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkFic3RyYWN0
SGVhcFJlcG9zaXRvcnk6OkFic3RyYWN0SGVhcFJlcG9zaXRvcnkpOgorICAgICAgICAqIGZ0bC9G
VExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTEIzQ29tcGlsZS5j
cHA6CisgICAgICAgICogZnRsL0ZUTEIzT3V0cHV0LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpP
dXRwdXQ6Ok91dHB1dCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpjaGVjayk6CisgICAg
ICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpsb2FkKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6
OnN0b3JlKToKKyAgICAgICAgKiBmdGwvRlRMQjNPdXRwdXQuaDoKKyAgICAgICAgKiBmdGwvRlRM
Q29tbW9uVmFsdWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpDb21tb25WYWx1ZXM6OkNvbW1v
blZhbHVlcyk6CisgICAgICAgIChKU0M6OkZUTDo6Q29tbW9uVmFsdWVzOjppbml0aWFsaXplQ29u
c3RhbnRzKToKKyAgICAgICAgKiBmdGwvRlRMQ29tbW9uVmFsdWVzLmg6CisgICAgICAgIChKU0M6
OkZUTDo6Q29tbW9uVmFsdWVzOjppbml0aWFsaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBmdGwv
RlRMQ29tcGlsZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZnRsL0ZUTENvbXBpbGVCaW5hcnlP
cC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZnRsL0ZUTENvbXBpbGVCaW5hcnlPcC5oOiBSZW1v
dmVkLgorICAgICAgICAqIGZ0bC9GVExEV0FSRkRlYnVnTGluZUluZm8uY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIGZ0bC9GVExEV0FSRkRlYnVnTGluZUluZm8uaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBmdGwvRlRMRFdBUkZSZWdpc3Rlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZnRsL0ZUTERX
QVJGUmVnaXN0ZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBmdGwvRlRMRGF0YVNlY3Rpb24uY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIGZ0bC9GVExEYXRhU2VjdGlvbi5oOiBSZW1vdmVkLgorICAg
ICAgICAqIGZ0bC9GVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlci5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogZnRsL0ZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmg6IFJlbW92ZWQuCisgICAgICAg
ICogZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5jcHA6CisgICAgICAgICogZnRsL0ZUTEV4Y2VwdGlv
blRhcmdldC5oOgorICAgICAgICAqIGZ0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIGZ0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBmdGwvRlRMRmFpbC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6ZmFpbCk6CisgICAg
ICAgICogZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oOiBSZW1vdmVkLgorICAgICAgICAq
IGZ0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGZ0bC9GVExJ
bmxpbmVDYWNoZVNpemUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBmdGwvRlRMSW50cmluc2ljUmVw
b3NpdG9yeS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRv
cnkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6SklUQ29kZTo6fkpJVENvZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6
OmluaXRpYWxpemVCM0NvZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmluaXRpYWxp
emVCM0J5cHJvZHVjdHMpOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmluaXRpYWxpemVB
ZGRyZXNzRm9yQ2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6Y29udGFpbnMpOgor
ICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmZ0bCk6CisgICAgICAgIChKU0M6OkZUTDo6SklU
Q29kZTo6bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUp
OgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmluaXRpYWxpemVFeGl0VGh1bmtzKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjphZGRIYW5kbGUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmFkZERhdGFTZWN0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjpleGl0VGh1bmtzKTogRGVsZXRlZC4KKyAgICAgICAg
KiBmdGwvRlRMSklUQ29kZS5oOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmIzQ29kZSk6
CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6aGFuZGxlcyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkZUTDo6SklUQ29kZTo6ZGF0YVNlY3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBm
dGwvRlRMSklURmluYWxpemVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRGaW5hbGl6ZXI6
OmNvZGVTaXplKToKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVu
Y3Rpb24pOgorICAgICAgICAqIGZ0bC9GVExKSVRGaW5hbGl6ZXIuaDoKKyAgICAgICAgKiBmdGwv
RlRMSlNDYWxsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBmdGwvRlRMSlNDYWxsLmg6IFJlbW92
ZWQuCisgICAgICAgICogZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IGZ0bC9GVExKU0NhbGxCYXNlLmg6IFJlbW92ZWQuCisgICAgICAgICogZnRsL0ZUTEpTQ2FsbFZh
cmFyZ3MuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGZ0bC9GVExKU0NhbGxWYXJhcmdzLmg6IFJl
bW92ZWQuCisgICAgICAgICogZnRsL0ZUTEpTVGFpbENhbGwuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIGZ0bC9GVExKU1RhaWxDYWxsLmg6IFJlbW92ZWQuCisgICAgICAgICogZnRsL0ZUTExhenlT
bG93UGF0aC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TGF6eVNsb3dQYXRoOjpMYXp5U2xvd1Bh
dGgpOgorICAgICAgICAoSlNDOjpGVEw6OkxhenlTbG93UGF0aDo6Z2VuZXJhdGUpOgorICAgICAg
ICAqIGZ0bC9GVExMYXp5U2xvd1BhdGguaDoKKyAgICAgICAgKEpTQzo6RlRMOjpMYXp5U2xvd1Bh
dGg6OmNyZWF0ZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkZUTDo6TGF6eVNsb3dQYXRoOjpw
YXRjaGFibGVKdW1wKToKKyAgICAgICAgKEpTQzo6RlRMOjpMYXp5U2xvd1BhdGg6OmRvbmUpOgor
ICAgICAgICAoSlNDOjpGVEw6OkxhenlTbG93UGF0aDo6dXNlZFJlZ2lzdGVycyk6CisgICAgICAg
IChKU0M6OkZUTDo6TGF6eVNsb3dQYXRoOjpjYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpTQzo6
RlRMOjpMYXp5U2xvd1BhdGg6OnN0dWIpOgorICAgICAgICAoSlNDOjpGVEw6OkxhenlTbG93UGF0
aDo6cGF0Y2hwb2ludCk6IERlbGV0ZWQuCisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAg
ICAgICAoSlNDOjpGVEw6OmxpbmspOgorICAgICAgICAqIGZ0bC9GVExMb2NhdGlvbi5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG9jYXRpb246OmZvclZhbHVlUmVwKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb2NhdGlvbjo6ZHVtcCk6CisgICAgICAgIChKU0M6OkZUTDo6TG9jYXRpb246OmZvclN0
YWNrbWFwcyk6IERlbGV0ZWQuCisgICAgICAgICogZnRsL0ZUTExvY2F0aW9uLmg6CisgICAgICAg
IChKU0M6OkZUTDo6TG9jYXRpb246OmZvclJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b2NhdGlvbjo6Zm9ySW5kaXJlY3QpOgorICAgICAgICAoSlNDOjpGVEw6OkxvY2F0aW9uOjpmb3JD
b25zdGFudCk6CisgICAgICAgIChKU0M6OkZUTDo6TG9jYXRpb246OmtpbmQpOgorICAgICAgICAo
SlNDOjpGVEw6OkxvY2F0aW9uOjpoYXNSZWcpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6TG93ZXJE
RkdUb0xMVk0pOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06Omxvd2Vy
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjcmVhdGVQaGlWYXJp
YWJsZXMpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVO
b2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlVXBz
aWxvbik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVBo
aSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZURvdWJs
ZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21w
aWxlVmFsdWVBZGQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNv
bXBpbGVTdHJDYXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNv
bXBpbGVBcml0aEFkZE9yU3ViKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9M
TFZNOjpjb21waWxlQXJpdGhNdWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0xMVk06OmNvbXBpbGVBcml0aERpdik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvTExWTTo6Y29tcGlsZUFyaXRoTmVnYXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlQml0QW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlQml0T3IpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0xMVk06OmNvbXBpbGVCaXRYb3IpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0xMVk06OmNvbXBpbGVCaXRSU2hpZnQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0xMVk06OmNvbXBpbGVCaXRMU2hpZnQpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVCaXRVUlNoaWZ0KToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlUHV0QnlJZCk6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldEJ1dHRlcmZseSk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU1ha2VSb3BlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ2FsbE9yQ29uc3RydWN0KToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlVGFpbENhbGwp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDYWxsT3JD
b25zdHJ1Y3RWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0xMVk06OmNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUlzVW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlSW4pOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0xMVk06OmdldEJ5SWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0xMVk06OmxvYWRCdXR0ZXJmbHlXaXRoQmFycmllcik6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvTExWTTo6c3RyaW5nc0VxdWFsKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9MTFZNOjplbWl0UmlnaHRTaGlmdFNuaXBwZXQpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmFsbG9jYXRlQ2VsbCk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6bGF6eVNsb3dQYXRoKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGUpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNhbGxDaGVjayk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvTExWTTo6cHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpsb3dCbG9jayk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6YXBwZW5kT1NSRXhpdERlc2NyaXB0b3Ip
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmFwcGVuZE9TUkV4aXQp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmJsZXNzU3BlY3VsYXRp
b24pOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmJ1aWxkRXhpdEFy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6ZXhpdFZh
bHVlRm9yQXZhaWxhYmlsaXR5KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9M
TFZNOjpleGl0VmFsdWVGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9MTFZNOjpwcm9iZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6
Y3Jhc2gpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVV
bnR5cGVkQmluYXJ5T3ApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0xMVk06OmFwcGVuZE9TUkV4aXRBcmd1bWVudHNGb3JQYXRjaHBvaW50SWZXaWxsQ2F0Y2hF
eGNlcHRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xM
Vk06OmVtaXRPU1JFeGl0Q2FsbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvTExWTTo6Y2FsbFN0YWNrbWFwKTogRGVsZXRlZC4KKyAgICAgICAgKiBmdGwvRlRM
T1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdERlc2NyaXB0b3I6Ok9TUkV4
aXREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0RGVzY3JpcHRvcjo6dmFs
aWRhdGVSZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0RGVzY3JpcHRvcjo6
ZW1pdE9TUkV4aXQpOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXREZXNjcmlwdG9yOjpwcmVw
YXJlT1NSRXhpdEhhbmRsZSk6CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdDo6T1NSRXhpdCk6
CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdDo6Z2F0aGVyUmVnaXN0ZXJzVG9TcGlsbEZvckNhbGxJ
ZkV4Y2VwdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdDo6c3BpbGxS
ZWdpc3RlcnNUb1NwaWxsU2xvdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhp
dDo6cmVjb3ZlclJlZ2lzdGVyc0Zyb21TcGlsbFNsb3QpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpGVEw6Ok9TUkV4aXQ6OndpbGxBcnJpdmVBdEV4aXRGcm9tSW5kaXJlY3RFeGNlcHRpb25DaGVj
ayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdDo6d2lsbEFycml2ZUF0T1NS
RXhpdEZyb21DYWxsT3BlcmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpPU1JF
eGl0OjpuZWVkc1JlZ2lzdGVyUmVjb3ZlcnlPbkdlbmVyaWNVbndpbmRPU1JFeGl0UGF0aCk6IERl
bGV0ZWQuCisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpP
U1JFeGl0Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZSk6CisgICAgICAgIChKU0M6
OkZUTDo6T1NSRXhpdERlc2NyaXB0b3JJbXBsOjpPU1JFeGl0RGVzY3JpcHRvckltcGwpOiBEZWxl
dGVkLgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmg6IFJlbW92ZWQu
CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6Y29tcGlsZVJlY292ZXJ5KToKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZUZUTE9TUkV4aXQpOgorICAgICAgICAqIGZ0bC9GVExP
U1JFeGl0SGFuZGxlLmNwcDoKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdEhhbmRsZS5oOgorICAg
ICAgICAqIGZ0bC9GVExPdXRwdXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGZ0bC9GVExPdXRw
dXQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBmdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRs
ZS5jcHA6CisgICAgICAgICogZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaDoKKyAg
ICAgICAgKiBmdGwvRlRMU3RhY2tNYXBzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBmdGwvRlRM
U3RhY2tNYXBzLmg6IFJlbW92ZWQuCisgICAgICAgICogZnRsL0ZUTFN0YXRlLmNwcDoKKyAgICAg
ICAgKEpTQzo6RlRMOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoSlNDOjpGVEw6OlN0YXRlOjp+
U3RhdGUpOgorICAgICAgICAoSlNDOjpGVEw6OlN0YXRlOjpkdW1wU3RhdGUpOiBEZWxldGVkLgor
ICAgICAgICAqIGZ0bC9GVExTdGF0ZS5oOgorICAgICAgICAqIGZ0bC9GVExVbndpbmRJbmZvLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBmdGwvRlRMVW53aW5kSW5mby5oOiBSZW1vdmVkLgorICAg
ICAgICAqIGZ0bC9GVExWYWx1ZVJhbmdlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVJh
bmdlOjpkZWNvcmF0ZUluc3RydWN0aW9uKToKKyAgICAgICAgKiBmdGwvRlRMVmFsdWVSYW5nZS5o
OgorICAgICAgICAoSlNDOjpGVEw6OlZhbHVlUmFuZ2U6OlZhbHVlUmFuZ2UpOgorICAgICAgICAo
SlNDOjpGVEw6OlZhbHVlUmFuZ2U6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVJh
bmdlOjplbmQpOgorICAgICAgICAqIGZ0bC9GVExXZWlnaHQuaDoKKyAgICAgICAgKEpTQzo6RlRM
OjpXZWlnaHQ6OnZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpXZWlnaHQ6OmZyZXF1ZW5jeUNs
YXNzKToKKyAgICAgICAgKEpTQzo6RlRMOjpXZWlnaHQ6OnNjYWxlVG9Ub3RhbCk6CisgICAgICAg
ICogbGx2bS9Jbml0aWFsaXplTExWTS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogbGx2bS9Jbml0
aWFsaXplTExWTS5oOiBSZW1vdmVkLgorICAgICAgICAqIGxsdm0vSW5pdGlhbGl6ZUxMVk1NYWMu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIGxsdm0vSW5pdGlhbGl6ZUxMVk1QT1NJWC5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogbGx2bS9Jbml0aWFsaXplTExWTVBPU0lYLmg6IFJlbW92ZWQuCisg
ICAgICAgICogbGx2bS9MTFZNQVBJLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBsbHZtL0xMVk1B
UEkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBsbHZtL0xMVk1BUElGdW5jdGlvbnMuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBsbHZtL0xMVk1IZWFkZXJzLmg6IFJlbW92ZWQuCisgICAgICAgICogbGx2
bS9saWJyYXJ5L0xMVk1BbmNob3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGxsdm0vbGlicmFy
eS9MTFZNRXhwb3J0cy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogbGx2bS9saWJyYXJ5L0xMVk1P
dmVycmlkZXMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGxsdm0vbGlicmFyeS9jb25maWdfbGx2
bS5oOiBSZW1vdmVkLgorCiAyMDE2LTAyLTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CiAKICAgICAgICAgRlRMX1VTRVNfQjMgc2hvdWxkIGJlIHVuY29uZGl0aW9uYWxseSB0cnVl
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxOTY2ODUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDcgKzI3LDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMK
ICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2ludGVycHJldGVyIgogICAgICIke0pBVkFTQ1JJ
UFRDT1JFX0RJUn0vaml0IgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vbGxpbnQiCi0gICAg
IiR7SkFWQVNDUklQVENPUkVfRElSfS9sbHZtIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0v
cGFyc2VyIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vcHJvZmlsZXIiCiAgICAgIiR7SkFW
QVNDUklQVENPUkVfRElSfS9yZXBsYXkiCkBAIC0zNzgsNyArMzc3LDYgQEAgc2V0KEphdmFTY3Jp
cHRDb3JlX1NPVVJDRVMKICAgICBkaXNhc3NlbWJsZXIvQVJNNjREaXNhc3NlbWJsZXIuY3BwCiAg
ICAgZGlzYXNzZW1ibGVyL0FSTXY3RGlzYXNzZW1ibGVyLmNwcAogICAgIGRpc2Fzc2VtYmxlci9E
aXNhc3NlbWJsZXIuY3BwCi0gICAgZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwCiAg
ICAgZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5jcHAKICAgICBkaXNhc3NlbWJsZXIv
WDg2RGlzYXNzZW1ibGVyLmNwcAogCkBAIC0xMDUwLDQwICsxMDQ4LDYgQEAgaWYgKEVOQUJMRV9G
VExfSklUKQogICAgICkKIGVuZGlmICgpCiAKLWlmIChVU0VfTExWTV9ESVNBU1NFTUJMRVIpCi0g
ICAgIyBDb25maWd1cmUgbGx2bUZvckpTQy5zbwotICAgIHNldChsbHZtRm9ySlNDX1NPVVJDRVMK
LSAgICAgICAgbGx2bS9saWJyYXJ5L0xMVk1BbmNob3IuY3BwCi0gICAgICAgIGxsdm0vbGlicmFy
eS9MTFZNRXhwb3J0cy5jcHAKLSAgICAgICAgbGx2bS9saWJyYXJ5L0xMVk1PdmVycmlkZXMuY3Bw
Ci0gICAgKQotICAgIHNldChsbHZtRm9ySlNDX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAgICAg
JHtMTFZNX0lOQ0xVREVfRElSU30KLSAgICAgICAgIiR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJ
UFRDT1JFX0RJUn0iCi0gICAgKQotCi0gICAgYWRkX2N1c3RvbV9jb21tYW5kKAotICAgICAgICBP
VVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9XZWJLaXRMTFZNTGli
cmFyeVRva2VuLmgKLSAgICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHRvdWNoICR7
REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vV2ViS2l0TExWTUxpYnJhcnlUb2tl
bi5oCi0gICAgICAgIFZFUkJBVElNKQotCi0gICAgIyBBZGRlZCBleHRyYSBpdGVtcyBmb3IgSmF2
YVNjcmlwdENvcmUKLSAgICBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9TWVNURU1fSU5DTFVE
RV9ESVJFQ1RPUklFUwotICAgICAgICAke0xMVk1fSU5DTFVERV9ESVJTfQotICAgICkKLQotICAg
IGxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKLSAgICAgICAgbGx2bS9Jbml0aWFs
aXplTExWTS5jcHAKLSAgICAgICAgbGx2bS9MTFZNQVBJLmNwcAotICAgICkKLSAgICBpZiAoTk9U
IFdJTjMyKQotICAgICAgICBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCi0gICAg
ICAgICAgICBsbHZtL0luaXRpYWxpemVMTFZNTGludXguY3BwCi0gICAgICAgICAgICBsbHZtL0lu
aXRpYWxpemVMTFZNUE9TSVguY3BwCi0gICAgICAgICkKLSAgICBlbmRpZiAoKQotZW5kaWYgKCkK
LQogc2V0KEhBU0hfTFVUX0dFTkVSQVRPUiAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vY3Jl
YXRlX2hhc2hfdGFibGUpCiBtYWNybyhHRU5FUkFURV9IQVNIX0xVVCBfaW5wdXQgX291dHB1dCkK
ICAgICBhZGRfY3VzdG9tX2NvbW1hbmQoCkBAIC0xMzY3LDI1ICsxMzMxLDYgQEAgZW5kaWYgKCkK
IAogV0VCS0lUX0lOQ0xVREVfQ09ORklHX0ZJTEVTX0lGX0VYSVNUUygpCiAKLWlmIChVU0VfTExW
TV9ESVNBU1NFTUJMRVIgQU5EIE5PVCBXSU4zMikKLSAgICBpZiAoTk9UIGxsdm1Gb3JKU0NfTElC
UkFSSUVTKQotICAgICAgICBzZXQobGx2bUZvckpTQ19MSUJSQVJJRVMgJHtMTFZNX1NUQVRJQ19M
SUJSQVJJRVN9KQotICAgIGVuZGlmICgpCi0gICAgaWYgKE5PVCBsbHZtRm9ySlNDX0xJQlJBUklF
UykKLSAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiTm8gTExWTSBsaWJzIGZvdW5kLCBidXQg
TExWTSBkaXNhc3NlbWJsZXIgaXMgZW5hYmxlZC4gU3RvcHBpbmcgYnVpbGQuIikKLSAgICBlbmRp
ZiAoKQotCi0gICAgV0VCS0lUX1dSQVBfU09VUkNFTElTVCgke2xsdm1Gb3JKU0NfU09VUkNFU30p
Ci0gICAgYWRkX2xpYnJhcnkobGx2bUZvckpTQyBTSEFSRUQgJHtsbHZtRm9ySlNDX1NPVVJDRVN9
ICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vV2ViS2l0TExWTUxpYnJhcnlU
b2tlbi5oKQotICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhsbHZtRm9ySlNDICR7bGx2bUZvckpT
Q19MSUJSQVJJRVN9ICR7TExWTV9TWVNURU1fTElCUkFSSUVTfSkKLSAgICBpZiAoTk9UIENNQUtF
X1NZU1RFTV9OQU1FIE1BVENIRVMgIkRhcndpbiIpCi0gICAgICAgIEFERF9UQVJHRVRfUFJPUEVS
VElFUyhsbHZtRm9ySlNDIExJTktfRkxBR1MgIi1XbCwtLXZlcnNpb24tc2NyaXB0PSR7SkFWQVND
UklQVENPUkVfRElSfS9sbHZtL2xpYnJhcnkvbGlibGx2bUZvckpTQy52ZXJzaW9uIikKLSAgICBl
bmRpZiAoKQotICAgIGlmIChsbHZtRm9ySlNDX0lOU1RBTExfRElSKQotICAgICAgICBpbnN0YWxs
KFRBUkdFVFMgbGx2bUZvckpTQyBERVNUSU5BVElPTiAiJHtsbHZtRm9ySlNDX0lOU1RBTExfRElS
fSIpCi0gICAgZW5kaWYgKCkKLWVuZGlmICgpCi0KIFdFQktJVF9DUkVBVEVfRk9SV0FSRElOR19I
RUFERVJTKEphdmFTY3JpcHRDb3JlIERJUkVDVE9SSUVTICR7SmF2YVNjcmlwdENvcmVfRk9SV0FS
RElOR19IRUFERVJTX0RJUkVDVE9SSUVTfSBGSUxFUyAke0phdmFTY3JpcHRDb3JlX0ZPUldBUkRJ
TkdfSEVBREVSU19GSUxFU30pCiAKIApAQCAtMTQxNywxMCArMTM2Miw2IEBAIGlmICgke0phdmFT
Y3JpcHRDb3JlX0xJQlJBUllfVFlQRX0gU1RSRVEKICAgICBpbnN0YWxsKFRBUkdFVFMgSmF2YVNj
cmlwdENvcmUgREVTVElOQVRJT04gIiR7TElCX0lOU1RBTExfRElSfSIpCiBlbmRpZiAoKQogCi1p
ZiAoVVNFX0xMVk1fRElTQVNTRU1CTEVSKQotICAgIGFkZF9kZXBlbmRlbmNpZXMoSmF2YVNjcmlw
dENvcmUgbGx2bUZvckpTQykKLWVuZGlmICgpCi0KICMgRm9yY2Ugc3RhZ2luZyBvZiBzaGFyZWQg
c2NyaXB0cywgZXZlbiBpZiB0aGV5IGFyZW4ndCBkaXJlY3RseSB1c2VkIHRvIGJ1aWxkIEphdmFT
Y3JpcHRDb3JlLgogCiBhZGRfY3VzdG9tX3RhcmdldChzdGFnZVNoYXJlZFNjcmlwdHMgREVQRU5E
UyAke0phdmFTY3JpcHRDb3JlX1NDUklQVFN9KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUs
MTMgKzEzNSwxMCBAQAogCQkwRjIzNUJENTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3Vt
ZW50Rm9yT3BlcmFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjIzNUJCRjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50Rm9yT3Bl
cmFuZC5jcHAgKi87IH07CiAJCTBGMjM1QkQ2MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJn
dW1lbnRGb3JPcGVyYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjIzNUJDMDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50Rm9yT3Bl
cmFuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGMjM1QkQ3MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExTdGFja21hcEFyZ3VtZW50TGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCQzExNzE3
OEUxQzAwNjkwQzdGIC8qIEZUTFN0YWNrbWFwQXJndW1lbnRMaXN0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYyMzVCRDgxNzE3OEUxQzAwNjkw
QzdGIC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJDMjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhp
dFRodW5rR2VuZXJhdG9yLmNwcCAqLzsgfTsKLQkJMEYyMzVCRDkxNzE3OEUxQzAwNjkwQzdGIC8q
IEZUTEV4aXRUaHVua0dlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyMzVCQzMxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRUaHVua0dl
bmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGMjM1QkRBMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCQzQxNzE3OEUxQzAw
NjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5jcHAgKi87IH07CiAJCTBGMjM1QkRCMTcxNzhFMUMwMDY5
MEM3RiAvKiBGVExFeGl0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMjM1QkM1MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjIzNUJE
QzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJDNjE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
T1NSRXhpdC5jcHAgKi87IH07CiAJCTBGMjM1QkREMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JF
eGl0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIz
NUJDNzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGMjM1QkRFMTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJDODE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhp
dENvbXBpbGF0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGMjM1QkRGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29tcGls
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
MzVCQzkxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXRDb21waWxlci5jcHAgKi87IH07CiAJ
CTBGMjM1QkUwMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29tcGlsZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkNBMTcxNzhFMUMw
MDY5MEM3RiAvKiBGVExPU1JFeGl0Q29tcGlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjIzNUJFMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
VGh1bmtzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMjM1QkNCMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExUaHVua3MuY3BwICovOyB9OwpAQCAtMTY2
LDkgKzE2Myw2IEBACiAJCTBGMjRFNTU2MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJh
bWVTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MjRFNTU0MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjI0RTU1ODE3Rjc0RURC
MDBBQkIyMTcgLyogVmFsdWVSZWNvdmVyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU1NzE3Rjc0RURCMDBBQkIyMTcgLyogVmFsdWVSZWNv
dmVyeS5jcHAgKi87IH07CiAJCTBGMjU2QzM2MTYyN0IwQUQwMDdGMjc4MyAvKiBERkdDYWxsQXJy
YXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxB
cnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi87IH07Ci0JCTBGMjVGMUFFMTgxNjM1
RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjVGMUE3MTgxNjM1RjMwMDUyMkYzOSAv
KiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjI1RjFBRjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5s
aW5lQ2FjaGVTaXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMjVGMUE4MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZVNpemUuY3Bw
ICovOyB9OwotCQkwRjI1RjFCMDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXpl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFB
OTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNUYxQjExODE2MzVGMzAwNTIy
RjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhD
YWxsLmNwcCAqLzsgfTsKIAkJMEYyNUYxQjIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRo
Q2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
NUYxQUIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjVGMUIzMTgxNjM1RjMwMDUy
MkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQ
YXRoQ2FsbEtleS5jcHAgKi87IH07CkBAIC00NTIsMTEgKzQ0Niw3IEBACiAJCTBGNjgyRkIzMTlC
Q0IzNjQwMEZBM0JBRCAvKiBERkdTU0FDYWxjdWxhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY4MkZCMTE5QkNCMzY0MDBGQTNCQUQgLyogREZH
U1NBQ2FsY3VsYXRvci5oICovOyB9OwogCQkwRjY5Q0M4ODE5M0FDNjBBMDA0NTc1OUUgLyogREZH
RnJvemVuVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY2OUNDODYxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmNwcCAqLzsg
fTsKIAkJMEY2OUNDODkxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY5Q0M4NzE5M0FDNjBB
MDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuaCAqLzsgfTsKLQkJMEY2QjFDQjUxODVGQzlFOTAw
ODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjZCMUNCMzE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCAq
LzsgfTsKLQkJMEY2QjFDQjYxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQjQxODVGQzlFOTAw
ODQ1RDk3IC8qIEZUTEpTQ2FsbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGNkIxQ0I5MTg2MTI0NEMwMDg0NUQ5NyAvKiBBcml0eUNoZWNrTW9k
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFD
QjcxODYxMjQ0QzAwODQ1RDk3IC8qIEFyaXR5Q2hlY2tNb2RlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY2QjFDQzUxODYyQzQ3ODAwODQ1RDk3
IC8qIEZUTFVud2luZEluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2QjFDQzExODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8uY3Bw
ICovOyB9OwotCQkwRjZCMUNDNjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQzIxODYy
QzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjZCOEFEODFDNEVEREEyMDA5NjkwNTIgLyogQjNE
dXBsaWNhdGVUYWlscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjZCOEFENjFDNEVEREEyMDA5NjkwNTIgLyogQjNEdXBsaWNhdGVUYWlscy5jcHAg
Ki87IH07CiAJCTBGNkI4QUQ5MUM0RUREQTIwMDk2OTA1MiAvKiBCM0R1cGxpY2F0ZVRhaWxzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCOEFENzFD
NEVEREEyMDA5NjkwNTIgLyogQjNEdXBsaWNhdGVUYWlscy5oICovOyB9OwogCQkwRjZCOEFEQzFD
NEVGQUMzMDA5NjkwNTIgLyogQjNTU0FDYWxjdWxhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkI4QURBMUM0RUZBQzMwMDk2OTA1MiAvKiBC
M1NTQUNhbGN1bGF0b3IuY3BwICovOyB9OwpAQCAtNTUzLDEzICs1NDMsOSBAQAogCQkwRjlCMURC
NDFDMEU0MkE1MDBFNUJGRDIgLyogRlRMQjNPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5QjFEQjMxQzBFNDJBNTAwRTVCRkQyIC8qIEZU
TEIzT3V0cHV0LmNwcCAqLzsgfTsKIAkJMEY5QjFEQjcxQzBFNDJCRDAwRTVCRkQyIC8qIEZUTE9T
UkV4aXRIYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY5QjFEQjUxQzBFNDJCRDAwRTVCRkQyIC8qIEZUTE9TUkV4aXRIYW5kbGUuY3BwICov
OyB9OwogCQkwRjlCMURCODFDMEU0MkJEMDBFNUJGRDIgLyogRlRMT1NSRXhpdEhhbmRsZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5QjFEQjYxQzBF
NDJCRDAwRTVCRkQyIC8qIEZUTE9TUkV4aXRIYW5kbGUuaCAqLzsgfTsKLQkJMEY5QzVFNUUxOEUz
NUY1RTAwRDQzMUMzIC8qIEZUTERXQVJGUmVnaXN0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5QzVFNUMxOEUzNUY1RTAwRDQzMUMzIC8qIEZU
TERXQVJGUmVnaXN0ZXIuY3BwICovOyB9OwotCQkwRjlDNUU1RjE4RTM1RjVFMDBENDMxQzMgLyog
RlRMRFdBUkZSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5QzVFNUQxOEUzNUY1RTAwRDQzMUMzIC8qIEZUTERXQVJGUmVnaXN0ZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjlEMzM3
MDE2NURCQjkwMDA1QUQzODcgLyogRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzMzZFMTY1REJCOEQwMDVBRDM4NyAvKiBE
aXNhc3NlbWJsZXIuY3BwICovOyB9OwogCQkwRjlEMzM5NjE3RkZDNEU2MDA3M0MyQkMgLyogREZH
Rmx1c2hlZEF0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOUQzMzk0MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3BwICovOyB9Owog
CQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzM5NTE3RkZDNEU2MDA3M0My
QkMgLyogREZHRmx1c2hlZEF0LmggKi87IH07Ci0JCTBGOUQzMzlBMTgwM0FEQjcwMDczQzJCQyAv
KiBGVExTdGFja01hcHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5RDMzOTgxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5jcHAgKi87
IH07Ci0JCTBGOUQzMzlCMTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzMzk5MTgwM0FEQjcw
MDczQzJCQyAvKiBGVExTdGFja01hcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjlEMzY5NDFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5V
cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOUQzNjkyMUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuY3BwICovOyB9Owog
CQkwRjlEMzY5NTFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzY5MzFBRTlDQzMzMDAw
RDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmggKi87IH07CiAJCTBGOUQ0QzBDMUMzRTFDMTEwMDZD
RDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDRDMEExQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2Vw
dGlvblRhcmdldC5jcHAgKi87IH07CkBAIC02NjgsMjYgKzY1NCw4IEBACiAJCTBGQ0NBRTQ1MTZE
MENGNzQwMEQwQzY1QiAvKiBQYXJzZXJFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQ0FFNDMxNkQwQ0Y2RTAwRDBDNjVCIC8qIFBhcnNlckVy
cm9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZDRUZBQUIxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUE5MTgwNEMxM0UwMDQ3
MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgKi87IH07CiAJCTBGQ0VGQUFDMTgwNEMxM0UwMDQ3
MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZDRUZBQUExODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3Jl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZD
RUZBQjAxODA1Q0E2RDAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZNLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFBRTE4MDVDQTZEMDA0NzJDRTQg
LyogSW5pdGlhbGl6ZUxMVk0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkwRkNFRkFDMTE4MDVEOTRFMDA0NzJDRTQgLyogTExWTU92ZXJyaWRlcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFD
MDE4MDVEOTQxMDA0NzJDRTQgLyogTExWTU92ZXJyaWRlcy5jcHAgKi87IH07Ci0JCTBGQ0VGQUMz
MTgwNUU3NDAwMDQ3MkNFNCAvKiBMTFZNRXhwb3J0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFDMjE4MDVFNzQwMDA0NzJDRTQgLyogTExW
TUV4cG9ydHMuY3BwICovOyB9OwotCQkwRkNFRkFDQTE4MDVFNzU1MDA0NzJDRTQgLyogSW5pdGlh
bGl6ZUxMVk0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZDRUZBQzQxODA1RTc1NTAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZNLmNwcCAqLzsgfTsK
LQkJMEZDRUZBQ0MxODA1RTc1NTAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZNUE9TSVguaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUM2MTgwNUU3
NTUwMDQ3MkNFNCAvKiBJbml0aWFsaXplTExWTVBPU0lYLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZDRUZBQ0QxODA1RTc1NTAwNDcyQ0U0IC8q
IExMVk1BUEkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZDRUZBQzcxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuY3BwICovOyB9OwotCQkwRkNF
RkFDRTE4MDVFNzU1MDA0NzJDRTQgLyogTExWTUFQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBQzgxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1B
UEkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkw
RkNFRkFDRjE4MDVFNzU1MDA0NzJDRTQgLyogTExWTUFQSUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBQzkxODA1RTc1NTAwNDcy
Q0U0IC8qIExMVk1BUElGdW5jdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQkwRkNFRkFEMTE4MDVFNzc5MDA0NzJDRTQgLyogTExWTUFQSUZ1
bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZDRUZBQzkxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUElGdW5jdGlvbnMuaCAqLzsgfTsKLQkJ
MEZDRUZBRDMxODA1RURDQzAwNDcyQ0U0IC8qIExMVk1IZWFkZXJzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFEMjE4MDVFRENDMDA0NzJDRTQg
LyogTExWTUhlYWRlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQkwRkNFRkFENDE4MDVFRENDMDA0NzJDRTQgLyogTExWTUhlYWRlcnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUQyMTgwNUVE
Q0MwMDQ3MkNFNCAvKiBMTFZNSGVhZGVycy5oICovOyB9OwotCQkwRkNFRkFENzE4MDYxNzQ2MDA0
NzJDRTQgLyogTExWTUFuY2hvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkNFRkFENjE4MDYxNzQ2MDA0NzJDRTQgLyogTExWTUFuY2hvci5jcHAg
Ki87IH07Ci0JCTBGQ0VGQURBMTgwNjIwREEwMDQ3MkNFNCAvKiBMTFZNQVBJLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFDODE4MDVFNzU1MDA0
NzJDRTQgLyogTExWTUFQSS5oICovOyB9OwotCQkwRkNFRkFEQzE4MDY0QTE0MDA0NzJDRTQgLyog
Y29uZmlnX2xsdm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQ0VGQURCMTgwNjRBMTQwMDQ3MkNFNCAvKiBjb25maWdfbGx2bS5oICovOyB9OwogCQkw
RkNFRkFERjE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBREQxODA3MzhDMDAwNDcyQ0U0
IC8qIEZUTExvY2F0aW9uLmNwcCAqLzsgfTsKIAkJMEZDRUZBRTAxODA3MzhDMDAwNDcyQ0U0IC8q
IEZUTExvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkNFRkFERTE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRkQxMjAyRjFBOEFFRDEy
MDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQxMjAyRDFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxs
QmFzZS5jcHAgKi87IH07Ci0JCTBGRDEyMDMwMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxC
YXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQx
MjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGRDEyMDMzMUE4Qzg1QkQwMDBGNTI4
MCAvKiBGVExKU0NhbGxWYXJhcmdzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDEyMDMxMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxWYXJh
cmdzLmNwcCAqLzsgfTsKLQkJMEZEMTIwMzQxQThDODVCRDAwMEY1MjgwIC8qIEZUTEpTQ2FsbFZh
cmFyZ3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RDEyMDMyMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEMkM5MjQxNkQwMUVFOTAw
Qzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJ
bmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgx
Q0IgLyogREZHRHJpdmVyLmNwcCAqLzsgfTsKIAkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8q
IERGR0RyaXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovOyB9OwpAQCAtNzU5
LDE4ICs3MjcsMTMgQEAKIAkJMEZFODM0MTgxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkU4MzQxNjFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkU4NTM0QjE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzQ5MTcy
M0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwICovOyB9OwogCQkwRkU4
NTM0QzE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU4NTM0QTE3MjNDREE1MDBC
NjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmggKi87IH07Ci0JCTBGRTk1Rjc5MThCNTY5
NDcwMEI1MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU5NUY3NzE4QjU2OTQ3MDBCNTMxRkIgLyogRlRMRGF0
YVNlY3Rpb24uY3BwICovOyB9OwotCQkwRkU5NUY3QTE4QjU2OTQ3MDBCNTMxRkIgLyogRlRMRGF0
YVNlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRTk1Rjc4MThCNTY5NDcwMEI1MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGRUEwQTA4MTcwNTEzREIw
MEJCNzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMDlGRDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQWJicmV2
aWF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGRUEwQTA5MTcwNTEzREIwMEJCNzIyQyAvKiBGVExDYXBhYmlsaXRpZXMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTA5RkUxNzA1MTNE
QjAwQkI3MjJDIC8qIEZUTENhcGFiaWxpdGllcy5jcHAgKi87IH07CiAJCTBGRUEwQTBBMTcwNTEz
REIwMEJCNzIyQyAvKiBGVExDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwOUZGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDYXBh
YmlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQkwRkVBMEEwQjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEwMDE3MDUxM0RCMDBC
QjcyMkMgLyogRlRMQ29tcGlsZS5jcHAgKi87IH07CiAJCTBGRUEwQTBDMTcwNTEzREIwMEJCNzIy
QyAvKiBGVExDb21waWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVBMEEwMTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEwQTBEMTcwNTEz
REIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTAyMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2Rl
LmNwcCAqLzsgfTsKIAkJMEZFQTBBMEUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTAzMTcw
NTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFQTBBMEYxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExv
d2VyREZHVG9MTFZNLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUEwQTA0MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5jcHAg
Ki87IH07CiAJCTBGRUEwQTEwMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTBBMDUx
NzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9MTFZNLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZFQTBBMTExNzA1MTNEQjAwQkI3MjJD
IC8qIEZUTE91dHB1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQTBBMDYxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTE91dHB1dC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEwQTEyMTcwNTEzREIw
MEJCNzIyQyAvKiBGVExTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQTBBMDcxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTFN0YXRlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFQTBBMTYxNzA2
QkI5MDAwQkI3MjJDIC8qIEZUTFN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTE1MTcwNkJCOTAwMEJCNzIyQyAvKiBGVExTdGF0ZS5j
cHAgKi87IH07CiAJCTBGRUEwQTFDMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0cmFjdEhlYXAu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTBB
MTcxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5jcHAgKi87IH07CkBAIC03Nzks
MTAgKzc0Miw3IEBACiAJCTBGRUEwQTFGMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0cmFjdEhl
YXBSZXBvc2l0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVBMEExQTE3MDhCMDA3MDBCQjcyMkMgLyogRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9y
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
RUEwQTIwMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExUeXBlZFBvaW50ZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTFCMTcwOEIwMDcwMEJCNzIy
QyAvKiBGVExUeXBlZFBvaW50ZXIuaCAqLzsgfTsKIAkJMEZFQTBBMjMxNzA5NjA2OTAwQkI3MjJD
IC8qIEZUTENvbW1vblZhbHVlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQTBBMjExNzA5NjA2OTAwQkI3MjJDIC8qIEZUTENvbW1vblZhbHVlcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGRUEw
QTI0MTcwOTYwNjkwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEyMjE3MDk2MDY5MDBC
QjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEwQTI3MTcwOTYyM0IwMEJCNzIyQyAvKiBG
VExDb21tb25WYWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQTBBMjUxNzA5NjIzQjAwQkI3MjJDIC8qIEZUTENvbW1vblZhbHVlcy5jcHAg
Ki87IH07Ci0JCTBGRUEwQTI4MTcwOTYyM0IwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0
b3J5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUEwQTI2MTcwOTYyM0IwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmNwcCAqLzsg
fTsKLQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3MjJDIC8qIEZUTE91dHB1dC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEyOTE3MDk2Mjk2MDBC
QjcyMkMgLyogRlRMT3V0cHV0LmNwcCAqLzsgfTsKIAkJMEZFQTBBMkMxNzBCNjYxOTAwQkI3MjJD
IC8qIEZUTEZvcm1hdHRlZFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVBMEEyQjE3MEI2NjE5MDBCQjcyMkMgLyogRlRMRm9ybWF0dGVkVmFs
dWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkVBMEEzMTE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEyRDE3MEQ0MEJGMDBCQjcy
MkMgLyogREZHQ29tbW9uRGF0YS5jcHAgKi87IH07CiAJCTBGRUEwQTMyMTcwRDQwQkYwMEJCNzIy
QyAvKiBERkdDb21tb25EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVBMEEyRTE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5oICov
OyB9OwpAQCAtMTE3Nyw4ICsxMTM3LDYgQEAKIAkJMkFBQkNERTcxOEVGMjk0MjAwMDAyMDk2IC8q
IEdDTG9nZ2luZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkFBQkNERTYxOEVGMjk0MjAwMDAyMDk2IC8qIEdDTG9nZ2luZy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJBQUNFNjNDMThDQTVBMDMwMEVE
MDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkFBQ0U2M0ExOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZp
dHlDYWxsYmFjay5jcHAgKi87IH07CiAJCTJBQUNFNjNEMThDQTVBMDMwMEVEMDE5MSAvKiBHQ0Fj
dGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJBQUNFNjNCMThDQTVBMDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyQUM5MjJC
QjE4QTE2MTgyMDAzQ0UwRkIgLyogRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBQzkyMkI5MThBMTYxODIwMDND
RTBGQiAvKiBGVExEV0FSRkRlYnVnTGluZUluZm8uY3BwICovOyB9OwotCQkyQUM5MjJCQzE4QTE2
MTgyMDAzQ0UwRkIgLyogRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUM5MjJCQTE4QTE2MTgyMDAzQ0UwRkIgLyog
RlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmggKi87IH07CiAJCTJBRDJFREZCMTk3OTlFMzgwMDRENjQ3
OCAvKiBFbnVtZXJhdGlvbk1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJBRDJFREZBMTk3OTlFMzgwMDRENjQ3OCAvKiBFbnVtZXJhdGlvbk1vZGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyQUQ4
OTMyQjE3RTM4NjhGMDA2NjgyNzYgLyogSGVhcEl0ZXJhdGlvblNjb3BlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUQ4OTMyOTE3RTM4NjhGMDA2Njgy
NzYgLyogSGVhcEl0ZXJhdGlvblNjb3BlLmggKi87IH07CiAJCTJBREZBMjYzMThFRjM1NDAwMDRG
OUZDQyAvKiBHQ0xvZ2dpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkFERkEyNjIxOEVGMzU0MDAwNEY5RkNDIC8qIEdDTG9nZ2luZy5jcHAgKi87
IH07CkBAIC0xMjMwLDggKzExODgsNiBAQAogCQk2MjNBMzdFQzFCODdBN0MwMDA3NTQyMDkgLyog
UmVnaXN0ZXJNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDYyM0EzN0VCMUI4N0E3QkQwMDc1NDIwOSAvKiBSZWdpc3Rlck1hcC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTYyNzY3MzIzMUI2ODBDMUUw
MEZEOUYyRSAvKiBDYWxsTW9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2Mjc2NzMyMTFCNjgwQzFFMDBGRDlGMkUgLyogQ2FsbE1vZGUuY3BwICov
OyB9OwogCQk2Mjc2NzMyNDFCNjgwQzFFMDBGRDlGMkUgLyogQ2FsbE1vZGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyNzY3MzIyMUI2ODBDMUUwMEZE
OUYyRSAvKiBDYWxsTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTYyNzc0REFBMUI4RDRCMTkwMDA2RjA1QSAvKiBGVExKU1RhaWxDYWxsLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyNzc0REE4
MUI4RDRCMTkwMDA2RjA1QSAvKiBGVExKU1RhaWxDYWxsLmNwcCAqLzsgfTsKLQkJNjI3NzREQUIx
QjhENEIxOTAwMDZGMDVBIC8qIEZUTEpTVGFpbENhbGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyNzc0REE5MUI4RDRCMTkwMDA2RjA1QSAvKiBGVExK
U1RhaWxDYWxsLmggKi87IH07CiAJCTYyRDJEMzhGMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlv
blJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDYyRDJEMzhEMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmNwcCAqLzsg
fTsKIAkJNjJEMkQzOTAxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyRDJEMzhFMUFERjEw
M0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjJENzU1RDQxQjg0RkIzRDAwMTgwMUZBIC8qIENh
bGxGcmFtZVNodWZmbGVyNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjJENzU1RDMxQjg0RkIzOTAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVy
NjQuY3BwICovOyB9OwpAQCAtMTMyMyw4ICsxMjc5LDYgQEAKIAkJNzlDRkM2RjAxQzMzQjEwMDAw
Qzc2OEVBIC8qIExMSW50UENSYW5nZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc5Q0ZDNkVGMUMzM0IxMDAwMEM3NjhFQSAvKiBMTEludFBDUmFuZ2Vz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlE
NUNENUExQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlENUNENTgxQzExMDZBOTAwQ0VD
QTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuY3BwICovOyB9OwogCQk3OUQ1Q0Q1QjFDMTEwNkE5MDBD
RUNBMDcgLyogU2FtcGxpbmdQcm9maWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzlENUNENTkxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJv
ZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQk3OURGNjZCMDFCRjI2QTU3MDAwMUNGMTEgLyogRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlERjY2
QUUxQkYyNkE1NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmNwcCAqLzsg
fTsKLQkJNzlERjY2QjExQkYyNkE1NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5h
Z2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OURG
NjZBRjFCRjI2QTU3MDAwMUNGMTEgLyogRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUVFMEJGRjFC
NEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUVFMEJGRDFCNEFGQjg1MDAwMzg1Qzkg
LyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAgKi87IH07CiAJCTc5RUUwQzAwMUI0QUZCODUwMDAz
ODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OUVFMEJGRTFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVF
bnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTc5RjhGQzFFMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRp
b25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3OUY4RkMxQzFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhh
c2UuY3BwICovOyB9OwpAQCAtMTUyNiwxMCArMTQ4MCw4IEBACiAJCTk5RjFBNkZFMUI4RTZEOTQw
MDQ2M0IyNiAvKiBJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OUYxQTZGQzFCOEU2RDk0MDA0NjNCMjYgLyog
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuY3BwICovOyB9OwogCQk5OUYxQTcwMTFCOThGQkVDMDA0
NjNCMjYgLyogSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5RjFBNzAwMUI5OEZCRUMwMDQ2M0IyNiAvKiBJbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTlFNzI5NDA3MTkwRjAxQTUwMDFBOTFCNSAvKiBJbml0aWFsaXplVGhy
ZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxNzg2MzZDMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCAqLzsg
fTsKLQkJOUU3Mjk0MDgxOTBGMDIxRTAwMUE5MUI1IC8qIEluaXRpYWxpemVMTFZNUE9TSVguY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBQzUx
ODA1RTc1NTAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZNUE9TSVguY3BwICovOyB9OwogCQk5RTcy
OTQwQjE5MEYwNTE0MDAxQTkxQjUgLyogQnVuZGxlUGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUU3Mjk0MEExOTBGMDUxNDAwMUE5MUI1IC8qIEJ1
bmRsZVBhdGguaCAqLzsgfTsKIAkJOUVBNUM3QTExOTBGMDg0MjAwNTA4RUJFIC8qIEJ1bmRsZVBh
dGgubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5RTcy
OTQwOTE5MEYwMzA2MDAxQTkxQjUgLyogQnVuZGxlUGF0aC5tbSAqLzsgfTsKLQkJOUVBNUM3QTIx
OTBGMDg4NzAwNTA4RUJFIC8qIEluaXRpYWxpemVMTFZNTWFjLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlFQTVDN0EwMTkwRjA1RDIwMDUwOEVCRSAv
KiBJbml0aWFsaXplTExWTU1hYy5jcHAgKi87IH07CiAJCUExMjU4NDZFMUI0NUEzNjAwMENDN0Y2
QyAvKiBJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTI1ODQ2QzFCNDVBMzYwMDBDQzdGNkMgLyog
SW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmx1dC5oICovOyB9OwogCQlBMTI1ODQ2RjFCNDVB
MzYwMDBDQzdGNkMgLyogSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMjU4NDZEMUI0NUEzNjAwMEND
N0Y2QyAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmx1dC5oICovOyB9OwogCQlBMTJCQkZG
MjFCMDQ0QThCMDA2NjRCNjkgLyogSW50bE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEyQkJGRjExQjA0NEE4QjAwNjY0QjY5IC8qIEludGxP
YmplY3QuaCAqLzsgfTsKQEAgLTE4NTEsOCArMTgwMyw2IEBACiAJCUE3RTJFQTZDMEZCNDYwQ0Yw
MDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3RTJFQTZBMEZCNDYwQ0YwMDYwMUYwNiAvKiBMaXRlcmFsUGFy
c2VyLmNwcCAqLzsgfTsKIAkJQTdFNUEzQTcxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9u
UmVzdWx0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE3RTVBM0E1MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5jcHAgKi87IH07
CiAJCUE3RTVBM0E4MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdFNUEzQTYxNzk3NDMy
RDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTdFNUFCMzcxNzk5RTRCMjAwRDI4MzNEIC8qIExM
Vk1EaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTdFNUFCMzMxNzk5RTRCMjAwRDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuY3Bw
ICovOyB9OwotCQlBN0U1QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdFNUFCMzQx
Nzk5RTRCMjAwRDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0U1QUIzOTE3OTlFNEIyMDBEMjgzM0Qg
LyogVURpczg2RGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0U1QUIzNTE3OTlFNEIyMDBEMjgzM0QgLyogVURpczg2RGlzYXNzZW1i
bGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QTdFNUFCM0ExNzk5RTRCMjAwRDI4MzNEIC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0U1QUIzNjE3OTlFNEIyMDBE
MjgzM0QgLyogWDg2RGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJQTdGMjk5NkIxN0EwQkI2NzAw
MTA0MTdBIC8qIEZUTEZhaWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTdGMjk5NjkxN0EwQkI2NzAwMTA0MTdBIC8qIEZUTEZhaWwuY3BwICovOyB9
OwpAQCAtMjA3Niw4ICsyMDI2LDYgQEAKIAkJRkUxODdBMEQxQzAzMEQ1QzAwMzhCQkNBIC8qIEpJ
VERpdkdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkUxODdBMEIxQzAyMjkyMzAwMzhCQkNBIC8qIEpJVERpdkdlbmVyYXRvci5oICovOyB9
OwogCQlGRTE4N0EwRTFDMDMwRDY0MDAzOEJCQ0EgLyogSklURGl2R2VuZXJhdG9yLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMTg3QTBBMUMwMjI5
MjMwMDM4QkJDQSAvKiBKSVREaXZHZW5lcmF0b3IuY3BwICovOyB9OwogCQlGRTE4N0EwRjFDMDMw
RDZDMDAzOEJCQ0EgLyogU25pcHBldE9wZXJhbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMTg3QTBDMUMwMkVCQTcwMDM4QkJDQSAvKiBTbmlwcGV0
T3BlcmFuZC5oICovOyB9OwotCQlGRTE4N0ExOTFDMEUxM0UzMDAzOEJCQ0EgLyogRlRMQ29tcGls
ZUJpbmFyeU9wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFMTg3QTE1MUMwRTEzQzYwMDM4QkJDQSAvKiBGVExDb21waWxlQmluYXJ5T3AuY3BwICov
OyB9OwotCQlGRTE4N0ExQTFDMEUxM0U2MDAzOEJCQ0EgLyogRlRMQ29tcGlsZUJpbmFyeU9wLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTE4N0ExNjFD
MEUxM0M2MDAzOEJCQ0EgLyogRlRMQ29tcGlsZUJpbmFyeU9wLmggKi87IH07CiAJCUZFMUMwRkZE
MUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMUMwRkZDMUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRp
b24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlG
RTFDMEZGRjFCMTk0RkQxMDBCNTNGQ0EgLyogRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMUMwRkZFMUIxOTRGRDEwMEI1M0ZDQSAv
KiBFeGNlcHRpb24uY3BwICovOyB9OwogCQlGRTIwQ0U5RDE1RjA0QTk1MDBERjM0MzAgLyogTExJ
bnRDTG9vcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTIwQ0U5QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgKi87IH07CkBAIC0y
MTQzLDEzICsyMDkxLDYgQEAKIAkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEY5MzI3NEUxQzIw
QkNCQTAwQ0Y2NTY0OwogCQkJcmVtb3RlSW5mbyA9IGR5bmJlbmNoOwogCQl9OwotCQkwRkNFRkFC
QzE4MDVENjYzMDA0NzJDRTQgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0gewotCQkJaXNh
ID0gUEJYQ29udGFpbmVySXRlbVByb3h5OwotCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBG
RTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOwotCQkJcHJveHlUeXBlID0gMTsK
LQkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEZDRUZBQjUxODA1RDYxNjAwNDcyQ0U0OwotCQkJ
cmVtb3RlSW5mbyA9IGxsdm1Gb3JKU0M7Ci0JCX07CiAJCTBGRUM4NUIwMUJEQjVEOEYwMDgwRkY3
NCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb250YWluZXJJ
dGVtUHJveHk7CiAJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcg
LyogUHJvamVjdCBvYmplY3QgKi87CkBAIC0yMzM0LDEzICsyMjc1LDEwIEBACiAJCTBGMjM1QkJG
MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQu
Y3BwOyBwYXRoID0gZnRsL0ZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjIzNUJDMDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFy
Z3VtZW50Rm9yT3BlcmFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExF
eGl0QXJndW1lbnRGb3JPcGVyYW5kLmg7IHBhdGggPSBmdGwvRlRMRXhpdEFyZ3VtZW50Rm9yT3Bl
cmFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIzNUJDMTE3MTc4RTFDMDA2
OTBDN0YgLyogRlRMU3RhY2ttYXBBcmd1bWVudExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gRlRMU3RhY2ttYXBBcmd1bWVudExpc3QuaDsgcGF0aCA9IGZ0bC9GVExTdGFj
a21hcEFyZ3VtZW50TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjIzNUJD
MjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHA7IHBh
dGggPSBmdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMEYyMzVCQzMxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRUaHVua0dlbmVyYXRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExFeGl0VGh1bmtHZW5lcmF0
b3IuaDsgcGF0aCA9IGZ0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYyMzVCQzQxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExFeGl0VmFsdWUuY3Bw
OyBwYXRoID0gZnRsL0ZUTEV4aXRWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMjM1QkM1MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMRXhpdFZhbHVlLmg7IHBhdGggPSBmdGwvRlRMRXhp
dFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjM1QkM2MTcxNzhFMUMw
MDY5MEM3RiAvKiBGVExPU1JFeGl0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEZUTE9TUkV4aXQuY3BwOyBwYXRoID0gZnRsL0ZUTE9TUkV4aXQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIzNUJDNzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NS
RXhpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExPU1JFeGl0Lmg7IHBh
dGggPSBmdGwvRlRMT1NSRXhpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjIz
NUJDODE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmg7
IHBhdGggPSBmdGwvRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjIzNUJDOTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBp
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTE9TUkV4aXRD
b21waWxlci5jcHA7IHBhdGggPSBmdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMzVCQ0ExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4
aXRDb21waWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExPU1JFeGl0
Q29tcGlsZXIuaDsgcGF0aCA9IGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMzVCQ0IxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFRodW5rcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExUaHVua3MuY3BwOyBw
YXRoID0gZnRsL0ZUTFRodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
MzY1LDkgKzIzMDMsNiBAQAogCQkwRjI0RTU1NDE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2Fs
bEZyYW1lU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUNhbGxG
cmFtZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU1NzE3Rjc0RURC
MDBBQkIyMTcgLyogVmFsdWVSZWNvdmVyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBWYWx1ZVJlY292ZXJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQ
YXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NhbGxB
cnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQ2FsbEFycmF5
QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMEYyNUYxQTcxODE2MzVGMzAwNTIyRjM5IC8qIEZUTElubGluZUNhY2hlRGVzY3JpcHRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExJbmxpbmVDYWNoZURlc2NyaXB0
b3IuaDsgcGF0aCA9IGZ0bC9GVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMEYyNUYxQTgxODE2MzVGMzAwNTIyRjM5IC8qIEZUTElubGluZUNh
Y2hlU2l6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExJbmxp
bmVDYWNoZVNpemUuY3BwOyBwYXRoID0gZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMjVGMUE5MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJ
bmxpbmVDYWNoZVNpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMSW5s
aW5lQ2FjaGVTaXplLmg7IHBhdGggPSBmdGwvRlRMSW5saW5lQ2FjaGVTaXplLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjVGMUFBMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93
UGF0aENhbGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMU2xv
d1BhdGhDYWxsLmNwcDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGwuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjI1RjFBQjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1Bh
dGhDYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFNsb3dQYXRoQ2Fs
bC5oOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjI1RjFBQzE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFNsb3dQYXRoQ2FsbEtl
eS5jcHA7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTI2NDksMTEgKzI1ODQsNyBAQAogCQkwRjY4MkZCMTE5QkNCMzY0MDBG
QTNCQUQgLyogREZHU1NBQ2FsY3VsYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdTU0FDYWxjdWxhdG9yLmg7IHBhdGggPSBkZmcvREZHU1NBQ2FsY3VsYXRvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY5Q0M4NjE5M0FDNjBBMDA0NTc1OUUgLyog
REZHRnJvemVuVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHRnJvemVuVmFsdWUuY3BwOyBwYXRoID0gZGZnL0RGR0Zyb3plblZhbHVlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2OUNDODcxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zy
b3plblZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Zyb3plblZh
bHVlLmg7IHBhdGggPSBkZmcvREZHRnJvemVuVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMEY2QjFDQjMxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExKU0NhbGwuY3BwOyBwYXRoID0gZnRs
L0ZUTEpTQ2FsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNkIxQ0I0MTg1
RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRlRMSlNDYWxsLmg7IHBhdGggPSBmdGwvRlRMSlNDYWxsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNkIxQ0I3MTg2MTI0NEMwMDg0NUQ5NyAvKiBBcml0eUNoZWNrTW9k
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcml0eUNoZWNrTW9kZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjZCMUNDMTE4NjJDNDc4MDA4NDVEOTcgLyog
RlRMVW53aW5kSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBG
VExVbndpbmRJbmZvLmNwcDsgcGF0aCA9IGZ0bC9GVExVbndpbmRJbmZvLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY2QjFDQzIxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2lu
ZEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMVW53aW5kSW5mby5o
OyBwYXRoID0gZnRsL0ZUTFVud2luZEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY2QjhBRDYxQzRFRERBMjAwOTY5MDUyIC8qIEIzRHVwbGljYXRlVGFpbHMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNEdXBsaWNhdGVUYWlscy5jcHA7IHBh
dGggPSBiMy9CM0R1cGxpY2F0ZVRhaWxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY2QjhBRDcxQzRFRERBMjAwOTY5MDUyIC8qIEIzRHVwbGljYXRlVGFpbHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNEdXBsaWNhdGVUYWlscy5oOyBwYXRoID0gYjMv
QjNEdXBsaWNhdGVUYWlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjZCOEFE
QTFDNEVGQUMzMDA5NjkwNTIgLyogQjNTU0FDYWxjdWxhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU1NBQ2FsY3VsYXRvci5jcHA7IHBhdGggPSBiMy9CM1NT
QUNhbGN1bGF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjc0NywxMyAr
MjY3OCw5IEBACiAJCTBGOUIxREIzMUMwRTQyQTUwMEU1QkZEMiAvKiBGVExCM091dHB1dC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExCM091dHB1dC5jcHA7IHBh
dGggPSBmdGwvRlRMQjNPdXRwdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjlCMURCNTFDMEU0MkJEMDBFNUJGRDIgLyogRlRMT1NSRXhpdEhhbmRsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExPU1JFeGl0SGFuZGxlLmNwcDsgcGF0aCA9
IGZ0bC9GVExPU1JFeGl0SGFuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY5QjFEQjYxQzBFNDJCRDAwRTVCRkQyIC8qIEZUTE9TUkV4aXRIYW5kbGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMT1NSRXhpdEhhbmRsZS5oOyBwYXRoID0gZnRsL0ZU
TE9TUkV4aXRIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5QzVFNUMx
OEUzNUY1RTAwRDQzMUMzIC8qIEZUTERXQVJGUmVnaXN0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gRlRMRFdBUkZSZWdpc3Rlci5jcHA7IHBhdGggPSBmdGwvRlRM
RFdBUkZSZWdpc3Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOUM1RTVE
MThFMzVGNUUwMEQ0MzFDMyAvKiBGVExEV0FSRlJlZ2lzdGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEZUTERXQVJGUmVnaXN0ZXIuaDsgcGF0aCA9IGZ0bC9GVExEV0FSRlJl
Z2lzdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQzMzZFMTY1REJCOEQw
MDVBRDM4NyAvKiBEaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gRGlzYXNzZW1ibGVyLmNwcDsgcGF0aCA9IGRpc2Fzc2VtYmxlci9EaXNhc3NlbWJs
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM5NDE3RkZDNEU2MDA3
M0MyQkMgLyogREZHRmx1c2hlZEF0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0ZsdXNoZWRBdC5jcHA7IHBhdGggPSBkZmcvREZHRmx1c2hlZEF0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDMzOTUxN0ZGQzRFNjAwNzNDMkJDIC8qIERG
R0ZsdXNoZWRBdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGbHVzaGVk
QXQuaDsgcGF0aCA9IGRmZy9ERkdGbHVzaGVkQXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMEY5RDMzOTgxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExTdGFja01hcHMuY3BwOyBwYXRoID0g
ZnRsL0ZUTFN0YWNrTWFwcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOUQz
Mzk5MTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gRlRMU3RhY2tNYXBzLmg7IHBhdGggPSBmdGwvRlRMU3RhY2tNYXBzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQzNjkyMUFFOUNDMzMwMDBENERGQiAv
KiBERkdDbGVhblVwUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHQ2xlYW5VcFBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDbGVhblVwUGhhc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzY5MzFBRTlDQzMzMDAwRDRERkIgLyog
REZHQ2xlYW5VcFBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Ns
ZWFuVXBQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0NsZWFuVXBQaGFzZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjlENEMwQTFDM0UxQzExMDA2Q0Q5ODQgLyogRlRMRXhjZXB0aW9u
VGFyZ2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEV4Y2Vw
dGlvblRhcmdldC5jcHA7IHBhdGggPSBmdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4NzQsMjYgKzI4MDEsOSBAQAogCQkwRkNDQUU0MzE2
RDBDRjZFMDBEMEM2NUIgLyogUGFyc2VyRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGFyc2VyRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZD
RUZBQTkxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFNhdmVSZXN0b3JlLmNwcDsgcGF0aCA9IGZ0bC9G
VExTYXZlUmVzdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0VGQUFB
MTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBGVExTYXZlUmVzdG9yZS5oOyBwYXRoID0gZnRsL0ZUTFNhdmVSZXN0b3Jl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQ0VGQUFFMTgwNUNBNkQwMDQ3MkNF
NCAvKiBJbml0aWFsaXplTExWTS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJ
bml0aWFsaXplTExWTS5oOyBwYXRoID0gbGx2bS9Jbml0aWFsaXplTExWTS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRkNFRkFCNjE4MDVENjE2MDA0NzJDRTQgLyogbGlibGx2bUZv
ckpTQy5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBl
ID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxp
Ymxsdm1Gb3JKU0MuZHlsaWI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJ
CTBGQ0VGQUJFMTgwNUQ4NjkwMDQ3MkNFNCAvKiBMTFZNRm9ySlNDLnhjY29uZmlnICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsg
cGF0aCA9IExMVk1Gb3JKU0MueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTBGQ0VGQUMwMTgwNUQ5NDEwMDQ3MkNFNCAvKiBMTFZNT3ZlcnJpZGVzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IExMVk1PdmVycmlkZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkwRkNFRkFDMjE4MDVFNzQwMDA0NzJDRTQgLyogTExWTUV4cG9ydHMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTExWTUV4cG9ydHMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwRkNFRkFDNDE4MDVFNzU1MDA0NzJDRTQgLyogSW5pdGlhbGl6ZUxM
Vk0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSW5pdGlhbGl6ZUxM
Vk0uY3BwOyBwYXRoID0gbGx2bS9Jbml0aWFsaXplTExWTS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGQ0VGQUM1MTgwNUU3NTUwMDQ3MkNFNCAvKiBJbml0aWFsaXplTExWTVBP
U0lYLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEluaXRpYWxpemVM
TFZNUE9TSVguY3BwOyBwYXRoID0gbGx2bS9Jbml0aWFsaXplTExWTVBPU0lYLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDRUZBQzYxODA1RTc1NTAwNDcyQ0U0IC8qIEluaXRp
YWxpemVMTFZNUE9TSVguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSW5pdGlh
bGl6ZUxMVk1QT1NJWC5oOyBwYXRoID0gbGx2bS9Jbml0aWFsaXplTExWTVBPU0lYLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQ0VGQUM3MTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZN
QVBJLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMVk1BUEkuY3Bw
OyBwYXRoID0gbGx2bS9MTFZNQVBJLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MEZDRUZBQzgxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gTExWTUFQSS5oOyBwYXRoID0gbGx2bS9MTFZNQVBJLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQ0VGQUM5MTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJ
RnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExMVk1BUElGdW5j
dGlvbnMuaDsgcGF0aCA9IGxsdm0vTExWTUFQSUZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwRkNFRkFEMjE4MDVFRENDMDA0NzJDRTQgLyogTExWTUhlYWRlcnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExWTUhlYWRlcnMuaDsgcGF0aCA9IGxs
dm0vTExWTUhlYWRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDRUZBRDYx
ODA2MTc0NjAwNDcyQ0U0IC8qIExMVk1BbmNob3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTExWTUFuY2hvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGQ0VGQURCMTgwNjRBMTQwMDQ3MkNFNCAvKiBjb25maWdfbGx2bS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBjb25maWdfbGx2bS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkNFRkFERDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMTG9jYXRpb24uY3BwOyBwYXRo
ID0gZnRsL0ZUTExvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZD
RUZBREUxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEZUTExvY2F0aW9uLmg7IHBhdGggPSBmdGwvRlRMTG9jYXRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZEMTIwMkQxQThBRUQxMjAwMEY1MjgwIC8q
IEZUTEpTQ2FsbEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
RlRMSlNDYWxsQmFzZS5jcHA7IHBhdGggPSBmdGwvRlRMSlNDYWxsQmFzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRDEyMDJFMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0Nh
bGxCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEpTQ2FsbEJhc2Uu
aDsgcGF0aCA9IGZ0bC9GVExKU0NhbGxCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGRDEyMDMxMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2FsbFZhcmFyZ3MuY3BwOyBw
YXRoID0gZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0NhbGxWYXJhcmdzLmg7IHBhdGggPSBm
dGwvRlRMSlNDYWxsVmFyYXJncy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQy
QzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGRDNDODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRHJpdmVyLmNwcDsgcGF0aCA9
IGRmZy9ERkdEcml2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgy
MjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0RyaXZlci5oOyBwYXRoID0gZGZnL0RGR0RyaXZlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjk2NywxOCArMjg3NywxMyBAQAogCQkwRkU4MzQxNjFBNkVG
OTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rl
c2lyZWRXYXRjaHBvaW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBv
aW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzRBMTcyM0NEQTUw
MEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHBhdGggPSBkZmcvREZHRGVzaXJl
ZFdhdGNocG9pbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRTk1Rjc3MThC
NTY5NDcwMEI1MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBGVExEYXRhU2VjdGlvbi5jcHA7IHBhdGggPSBmdGwvRlRMRGF0YVNl
Y3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkU5NUY3ODE4QjU2OTQ3
MDBCNTMxRkIgLyogRlRMRGF0YVNlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gRlRMRGF0YVNlY3Rpb24uaDsgcGF0aCA9IGZ0bC9GVExEYXRhU2VjdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkVBMDlGRDE3MDUxM0RCMDBCQjcyMkMgLyogRlRM
QWJicmV2aWF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExBYmJy
ZXZpYXRpb25zLmg7IHBhdGggPSBmdGwvRlRMQWJicmV2aWF0aW9ucy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkVBMDlGRTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ2FwYWJpbGl0
aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTENhcGFiaWxp
dGllcy5jcHA7IHBhdGggPSBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFQTA5RkYxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENhcGFiaWxpdGll
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExDYXBhYmlsaXRpZXMuaDsg
cGF0aCA9IGZ0bC9GVExDYXBhYmlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMEZFQTBBMDAxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENvbXBpbGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMQ29tcGlsZS5jcHA7IHBhdGggPSBmdGwvRlRM
Q29tcGlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTAxMTcwNTEz
REIwMEJCNzIyQyAvKiBGVExDb21waWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEZUTENvbXBpbGUuaDsgcGF0aCA9IGZ0bC9GVExDb21waWxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRUEwQTAyMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpJVENvZGUuY3BwOyBw
YXRoID0gZnRsL0ZUTEpJVENvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkVBMEEwMzE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBGVExKSVRDb2RlLmg7IHBhdGggPSBmdGwvRlRMSklUQ29kZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEwNDE3MDUxM0RCMDBCQjcyMkMgLyog
RlRMTG93ZXJERkdUb0xMVk0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gRlRMTG93ZXJERkdUb0xMVk0uY3BwOyBwYXRoID0gZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTBBMDUxNzA1MTNEQjAwQkI3MjJD
IC8qIEZUTExvd2VyREZHVG9MTFZNLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEZUTExvd2VyREZHVG9MTFZNLmg7IHBhdGggPSBmdGwvRlRMTG93ZXJERkdUb0xMVk0uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZFQTBBMDYxNzA1MTNEQjAwQkI3MjJDIC8qIEZU
TE91dHB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExPdXRwdXQuaDsg
cGF0aCA9IGZ0bC9GVExPdXRwdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZF
QTBBMDcxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEZUTFN0YXRlLmg7IHBhdGggPSBmdGwvRlRMU3RhdGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTBBMTUxNzA2QkI5MDAwQkI3MjJDIC8qIEZUTFN0YXRl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFN0YXRlLmNwcDsg
cGF0aCA9IGZ0bC9GVExTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RUEwQTE3MTcwOEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0cmFjdEhlYXAuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMQWJzdHJhY3RIZWFwLmNwcDsgcGF0aCA9IGZ0
bC9GVExBYnN0cmFjdEhlYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjk4
NywxMCArMjg5Miw3IEBACiAJCTBGRUEwQTFBMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkuaDsgcGF0aCA9IGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTFCMTcwOEIwMDcwMEJC
NzIyQyAvKiBGVExUeXBlZFBvaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRlRMVHlwZWRQb2ludGVyLmg7IHBhdGggPSBmdGwvRlRMVHlwZWRQb2ludGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTIxMTcwOTYwNjkwMEJCNzIyQyAvKiBGVExD
b21tb25WYWx1ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMQ29tbW9u
VmFsdWVzLmg7IHBhdGggPSBmdGwvRlRMQ29tbW9uVmFsdWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGRUEwQTIyMTcwOTYwNjkwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBv
c2l0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEludHJpbnNpY1Jl
cG9zaXRvcnkuaDsgcGF0aCA9IGZ0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTI1MTcwOTYyM0IwMEJCNzIyQyAvKiBGVExDb21t
b25WYWx1ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMQ29t
bW9uVmFsdWVzLmNwcDsgcGF0aCA9IGZ0bC9GVExDb21tb25WYWx1ZXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRkVBMEEyNjE3MDk2MjNCMDBCQjcyMkMgLyogRlRMSW50cmlu
c2ljUmVwb3NpdG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBG
VExJbnRyaW5zaWNSZXBvc2l0b3J5LmNwcDsgcGF0aCA9IGZ0bC9GVExJbnRyaW5zaWNSZXBvc2l0
b3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZFQTBBMjkxNzA5NjI5NjAw
QkI3MjJDIC8qIEZUTE91dHB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBGVExPdXRwdXQuY3BwOyBwYXRoID0gZnRsL0ZUTE91dHB1dC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTJCMTcwQjY2MTkwMEJCNzIyQyAvKiBGVExGb3JtYXR0
ZWRWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExGb3JtYXR0ZWRW
YWx1ZS5oOyBwYXRoID0gZnRsL0ZUTEZvcm1hdHRlZFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGRUEwQTJEMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbW1vbkRhdGEuY3Bw
OyBwYXRoID0gZGZnL0RGR0NvbW1vbkRhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkVBMEEyRTE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21tb25EYXRhLmg7IHBhdGggPSBkZmcvREZH
Q29tbW9uRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzM0MSw4ICszMjQz
LDYgQEAKIAkJMkFBQkNERTYxOEVGMjk0MjAwMDAyMDk2IC8qIEdDTG9nZ2luZy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0xvZ2dpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMkFBQ0U2M0ExOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFj
ay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHQ0FjdGl2aXR5Q2Fs
bGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQUFDRTYzQjE4Q0E1QTAz
MDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdDQWN0aXZpdHlDYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkyQUM5MjJCOTE4QTE2MTgyMDAzQ0UwRkIgLyogRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTERXQVJGRGVidWdMaW5l
SW5mby5jcHA7IHBhdGggPSBmdGwvRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkFDOTIyQkExOEExNjE4MjAwM0NFMEZCIC8qIEZUTERXQVJG
RGVidWdMaW5lSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExEV0FS
RkRlYnVnTGluZUluZm8uaDsgcGF0aCA9IGZ0bC9GVExEV0FSRkRlYnVnTGluZUluZm8uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkFEMkVERkExOTc5OUUzODAwNEQ2NDc4IC8qIEVu
dW1lcmF0aW9uTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbnVtZXJh
dGlvbk1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkFEODkzMjkxN0UzODY4
RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIZWFwSXRlcmF0aW9uU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMkFERkEyNjIxOEVGMzU0MDAwNEY5RkNDIC8qIEdDTG9nZ2luZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHQ0xvZ2dpbmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMzQwNCw4ICszMzA0LDYgQEAKIAkJNjIzQTM3RUIxQjg3QTdCRDAw
NzU0MjA5IC8qIFJlZ2lzdGVyTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlZ2lzdGVyTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTYyNzY3MzIxMUI2
ODBDMUUwMEZEOUYyRSAvKiBDYWxsTW9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDYWxsTW9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTYy
NzY3MzIyMUI2ODBDMUUwMEZEOUYyRSAvKiBDYWxsTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDYWxsTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2
Mjc3NERBODFCOEQ0QjE5MDAwNkYwNUEgLyogRlRMSlNUYWlsQ2FsbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExKU1RhaWxDYWxsLmNwcDsgcGF0aCA9IGZ0bC9G
VExKU1RhaWxDYWxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNjI3NzREQTkx
QjhENEIxOTAwMDZGMDVBIC8qIEZUTEpTVGFpbENhbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gRlRMSlNUYWlsQ2FsbC5oOyBwYXRoID0gZnRsL0ZUTEpTVGFpbENhbGwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjJBOUEyOUUxQjBCRUQ0ODAwQkQ1NENBIC8q
IERGR0xhenlOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0xhenlOb2RlLmNwcDsgcGF0aCA9IGRmZy9ERkdMYXp5Tm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTYyQTlBMjlGMUIwQkVENDgwMEJENTRDQSAvKiBERkdMYXp5Tm9kZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdMYXp5Tm9kZS5oOyBwYXRoID0g
ZGZnL0RGR0xhenlOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTYyRDJEMzhE
MUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0aW9uUmFyZURhdGEuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMzUzMCw4ICszNDI4LDYgQEAKIAkJNzlDRkM2RUYxQzMzQjEwMDAw
Qzc2OEVBIC8qIExMSW50UENSYW5nZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gTExJbnRQQ1Jhbmdlcy5oOyBwYXRoID0gbGxpbnQvTExJbnRQQ1Jhbmdlcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3OUQ1Q0Q1ODFDMTEwNkE5MDBDRUNBMDcgLyogU2FtcGxp
bmdQcm9maWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1w
bGluZ1Byb2ZpbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlENUNENTkx
QzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2FtcGxpbmdQcm9maWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk3OURGNjZBRTFCRjI2QTU3MDAwMUNGMTEgLyogRlRMRXhjZXB0aW9uSGFuZGxlck1h
bmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMRXhjZXB0
aW9uSGFuZGxlck1hbmFnZXIuY3BwOyBwYXRoID0gZnRsL0ZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5h
Z2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzlERjY2QUYxQkYyNkE1NzAw
MDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmg7IHBhdGggPSBmdGwv
RlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzlFRTBCRkQxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFibGVFbnZpcm9ubWVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5RUUwQkZFMUI0QUZCODUwMDAzODVD
OSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFZhcmlhYmxlRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzlGOEZDMUMxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01heGltYWxGbHVz
aEluc2VydGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25Q
aGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzc1LDcgKzM2NzEsNiBA
QAogCQk5QjQ5NTRFODFBNjY0MERCMDAyODE1QTYgLyogUGFyc2VyRnVuY3Rpb25JbmZvLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBhcnNlckZ1bmN0aW9uSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5RTcyOTQwOTE5MEYwMzA2MDAxQTkxQjUgLyogQnVuZGxlUGF0aC5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEJ1bmRsZVBhdGgubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlFNzI5NDBBMTkwRjA1MTQwMDFBOTFCNSAvKiBCdW5kbGVQ
YXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1bmRsZVBhdGguaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOUVBNUM3QTAxOTBGMDVEMjAwNTA4RUJFIC8qIElu
aXRpYWxpemVMTFZNTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEluaXRpYWxpemVMTFZNTWFjLmNwcDsgcGF0aCA9IGxsdm0vSW5pdGlhbGl6ZUxMVk1NYWMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTI1ODQ2QzFCNDVBMzYwMDBDQzdGNkMg
LyogSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmx1dC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IubHV0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMjU4NDZEMUI0NUEzNjAwMENDN0Y2QyAvKiBJbnRsTnVt
YmVyRm9ybWF0UHJvdG90eXBlLmx1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBMTJCQkZGMTFCMDQ0QThCMDA2NjRCNjkgLyogSW50bE9iamVjdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRsT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC00MDk4LDggKzM5OTMsNiBAQAogCQlBN0UyRUE2QTBGQjQ2MENGMDA2MDFG
MDYgLyogTGl0ZXJhbFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBMaXRlcmFsUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdF
NUEzQTUxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBpbGF0aW9uUmVzdWx0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdFNUEzQTYxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBp
bGF0aW9uUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBpbGF0
aW9uUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3RTVBQjMzMTc5OUU0
QjIwMEQyODMzRCAvKiBMTFZNRGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIuY3BwOyBwYXRoID0gZGlzYXNzZW1ibGVy
L0xMVk1EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBN0U1
QUIzNDE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBMTFZNRGlzYXNzZW1ibGVyLmg7IHBhdGggPSBkaXNhc3NlbWJs
ZXIvTExWTURpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0U1
QUIzNTE3OTlFNEIyMDBEMjgzM0QgLyogVURpczg2RGlzYXNzZW1ibGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFVEaXM4NkRpc2Fzc2VtYmxlci5oOyBwYXRoID0gZGlzYXNz
ZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBN0U1QUIzNjE3OTlFNEIyMDBEMjgzM0QgLyogWDg2RGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFg4NkRpc2Fzc2VtYmxlci5jcHA7IHBhdGgg
PSBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTdGMjk5NjkxN0EwQkI2NzAwMTA0MTdBIC8qIEZUTEZhaWwuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMRmFpbC5jcHA7IHBhdGggPSBmdGwvRlRM
RmFpbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00MzU0LDggKzQyNDcsNiBA
QAogCQlGRTE4N0EwQTFDMDIyOTIzMDAzOEJCQ0EgLyogSklURGl2R2VuZXJhdG9yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVERpdkdlbmVyYXRvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTg3QTBCMUMwMjI5MjMwMDM4QkJDQSAvKiBK
SVREaXZHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklURGl2
R2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTg3QTBDMUMwMkVC
QTcwMDM4QkJDQSAvKiBTbmlwcGV0T3BlcmFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTbmlwcGV0T3BlcmFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
RTE4N0ExNTFDMEUxM0M2MDAzOEJCQ0EgLyogRlRMQ29tcGlsZUJpbmFyeU9wLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTENvbXBpbGVCaW5hcnlPcC5jcHA7IHBh
dGggPSBmdGwvRlRMQ29tcGlsZUJpbmFyeU9wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRkUxODdBMTYxQzBFMTNDNjAwMzhCQkNBIC8qIEZUTENvbXBpbGVCaW5hcnlPcC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExDb21waWxlQmluYXJ5T3AuaDsgcGF0
aCA9IGZ0bC9GVExDb21waWxlQmluYXJ5T3AuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRkUxQzBGRkUxQjE5NEZEMTAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNlcHRpb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlGRTIwQ0U5QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMTEludENMb29wLmNwcDsg
cGF0aCA9IGxsaW50L0xMSW50Q0xvb3AuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNDQzMCwxMyArNDMyMSw2IEBACiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07Ci0JCTBGQ0VGQUIzMTgwNUQ2MTYwMDQ3MkNFNCAvKiBGcmFt
ZXdvcmtzICovID0gewotCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7Ci0JCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07CiAJCTBGRUM4NUEyMUJEQjVD
RjEwMDgwRkY3NCAvKiBGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1
aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAtNDUxMiw3ICs0
Mzk2LDYgQEAKIAkJCQk5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUu
ZnJhbWV3b3JrICovLAogCQkJCTkzMkY1QkUxMDgyMkExQzcwMDczNjk3NSAvKiBqc2MgKi8sCiAJ
CQkJMEZGOTIyQ0YxNEY0NkIxMzAwNDFBMjRFIC8qIEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3RvciAq
LywKLQkJCQkwRkNFRkFCNjE4MDVENjE2MDA0NzJDRTQgLyogbGlibGx2bUZvckpTQy5keWxpYiAq
LywKIAkJCQkxNDEyMTEyMDBBNDg3OTNDMDA0ODAyNTUgLyogbWluaWRvbSAqLywKIAkJCQkxNEJE
NTlCRjBBM0U4RjkwMDBCQUY1OUMgLyogdGVzdGFwaSAqLywKIAkJCQkwRkVDODVBRDFCREI1Q0Yx
MDA4MEZGNzQgLyogdGVzdGIzICovLApAQCAtNDU1Nyw3ICs0NDQwLDYgQEAKIAkJCQkxNDI5RDc3
QTBFRDIwRDczMDBCODk2MTkgLyogaW50ZXJwcmV0ZXIgKi8sCiAJCQkJMTQyOUQ5MkMwRUQyMkQ3
MDAwQjg5NjE5IC8qIGppdCAqLywKIAkJCQkwRjQ2ODA5QzE0QkE3RjREMDBCRkUyNzIgLyogbGxp
bnQgKi8sCi0JCQkJMEZDRUZBQUQxODA1Q0E0NDAwNDcyQ0U0IC8qIGxsdm0gKi8sCiAJCQkJN0Uz
OUQ4MzcwRUMzQTM4ODAwM0FGMTFBIC8qIHBhcnNlciAqLywKIAkJCQkwMzQ3NjhERkZGMzhBNTA0
MTFEQjlDOEIgLyogUHJvZHVjdHMgKi8sCiAJCQkJOTVBQjgzMUEwREE0MkM2OTAwQkM4M0YzIC8q
IHByb2ZpbGVyICovLApAQCAtNDYyMCw0MCArNDUwMiwxMCBAQAogCQkJbmFtZSA9IGxsaW50Owog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJMEZDRUZBQUQxODA1Q0E0NDAwNDcy
Q0U0IC8qIGxsdm0gKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAot
CQkJCTBGQ0VGQUJGMTgwNUQ5NDEwMDQ3MkNFNCAvKiBsaWJyYXJ5ICovLAotCQkJCTBGQ0VGQUM0
MTgwNUU3NTUwMDQ3MkNFNCAvKiBJbml0aWFsaXplTExWTS5jcHAgKi8sCi0JCQkJMEZDRUZBQUUx
ODA1Q0E2RDAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZNLmggKi8sCi0JCQkJOUVBNUM3QTAxOTBG
MDVEMjAwNTA4RUJFIC8qIEluaXRpYWxpemVMTFZNTWFjLmNwcCAqLywKLQkJCQkwRkNFRkFDNTE4
MDVFNzU1MDA0NzJDRTQgLyogSW5pdGlhbGl6ZUxMVk1QT1NJWC5jcHAgKi8sCi0JCQkJMEZDRUZB
QzYxODA1RTc1NTAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZNUE9TSVguaCAqLywKLQkJCQkwRkNF
RkFDNzE4MDVFNzU1MDA0NzJDRTQgLyogTExWTUFQSS5jcHAgKi8sCi0JCQkJMEZDRUZBQzgxODA1
RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuaCAqLywKLQkJCQkwRkNFRkFDOTE4MDVFNzU1MDA0NzJD
RTQgLyogTExWTUFQSUZ1bmN0aW9ucy5oICovLAotCQkJCTBGQ0VGQUQyMTgwNUVEQ0MwMDQ3MkNF
NCAvKiBMTFZNSGVhZGVycy5oICovLAotCQkJKTsKLQkJCW5hbWUgPSBsbHZtOwotCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJMEZDRUZBQkYxODA1RDk0MTAwNDcyQ0U0IC8qIGxp
YnJhcnkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTBG
Q0VGQURCMTgwNjRBMTQwMDQ3MkNFNCAvKiBjb25maWdfbGx2bS5oICovLAotCQkJCTBGQ0VGQUQ2
MTgwNjE3NDYwMDQ3MkNFNCAvKiBMTFZNQW5jaG9yLmNwcCAqLywKLQkJCQkwRkNFRkFDMjE4MDVF
NzQwMDA0NzJDRTQgLyogTExWTUV4cG9ydHMuY3BwICovLAotCQkJCTBGQ0VGQUMwMTgwNUQ5NDEw
MDQ3MkNFNCAvKiBMTFZNT3ZlcnJpZGVzLmNwcCAqLywKLQkJCSk7Ci0JCQluYW1lID0gbGlicmFy
eTsKLQkJCXBhdGggPSBsbHZtL2xpYnJhcnk7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwot
CQl9OwogCQkwRkVBMDlGQzE3MDUxMzdGMDBCQjcyMkMgLyogZnRsICovID0gewogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwRkRCMkNDNzE3M0RBNTFFMDA3QjNDMUIg
LyogRlRMQWJicmV2aWF0ZWRUeXBlcy5oICovLAotCQkJCTBGRUEwOUZEMTcwNTEzREIwMEJCNzIy
QyAvKiBGVExBYmJyZXZpYXRpb25zLmggKi8sCiAJCQkJMEZFQTBBMTcxNzA4QjAwNzAwQkI3MjJD
IC8qIEZUTEFic3RyYWN0SGVhcC5jcHAgKi8sCiAJCQkJMEZFQTBBMTgxNzA4QjAwNzAwQkI3MjJD
IC8qIEZUTEFic3RyYWN0SGVhcC5oICovLAogCQkJCTBGRUEwQTE5MTcwOEIwMDcwMEJCNzIyQyAv
KiBGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcCAqLywKQEAgLTQ2NjcsMTggKzQ1MTksNyBA
QAogCQkJCTBGRUEwOUZGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDYXBhYmlsaXRpZXMuaCAqLywK
IAkJCQkwRkVBMEEyNTE3MDk2MjNCMDBCQjcyMkMgLyogRlRMQ29tbW9uVmFsdWVzLmNwcCAqLywK
IAkJCQkwRkVBMEEyMTE3MDk2MDY5MDBCQjcyMkMgLyogRlRMQ29tbW9uVmFsdWVzLmggKi8sCi0J
CQkJMEZFQTBBMDAxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENvbXBpbGUuY3BwICovLAogCQkJCTBG
RUEwQTAxMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDb21waWxlLmggKi8sCi0JCQkJRkUxODdBMTUx
QzBFMTNDNjAwMzhCQkNBIC8qIEZUTENvbXBpbGVCaW5hcnlPcC5jcHAgKi8sCi0JCQkJRkUxODdB
MTYxQzBFMTNDNjAwMzhCQkNBIC8qIEZUTENvbXBpbGVCaW5hcnlPcC5oICovLAotCQkJCTBGRTk1
Rjc3MThCNTY5NDcwMEI1MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5jcHAgKi8sCi0JCQkJMEZFOTVG
NzgxOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0aW9uLmggKi8sCi0JCQkJMkFDOTIyQjkx
OEExNjE4MjAwM0NFMEZCIC8qIEZUTERXQVJGRGVidWdMaW5lSW5mby5jcHAgKi8sCi0JCQkJMkFD
OTIyQkExOEExNjE4MjAwM0NFMEZCIC8qIEZUTERXQVJGRGVidWdMaW5lSW5mby5oICovLAotCQkJ
CTBGOUM1RTVDMThFMzVGNUUwMEQ0MzFDMyAvKiBGVExEV0FSRlJlZ2lzdGVyLmNwcCAqLywKLQkJ
CQkwRjlDNUU1RDE4RTM1RjVFMDBENDMxQzMgLyogRlRMRFdBUkZSZWdpc3Rlci5oICovLAotCQkJ
CTc5REY2NkFFMUJGMjZBNTcwMDAxQ0YxMSAvKiBGVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlci5j
cHAgKi8sCi0JCQkJNzlERjY2QUYxQkYyNkE1NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRs
ZXJNYW5hZ2VyLmggKi8sCiAJCQkJMEY5RDRDMEExQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4Y2Vw
dGlvblRhcmdldC5jcHAgKi8sCiAJCQkJMEY5RDRDMEIxQzNFMUMxMTAwNkNEOTg0IC8qIEZUTEV4
Y2VwdGlvblRhcmdldC5oICovLAogCQkJCTBGMjM1QkJEMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExF
eGl0QXJndW1lbnQuY3BwICovLApAQCAtNDY4Nyw4ICs0NTI4LDYgQEAKIAkJCQkwRjIzNUJDMDE3
MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oICovLAogCQkJCTBG
MkI5Q0VFMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAgKi8sCiAJ
CQkJMEYyQjlDRUYxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmggKi8s
Ci0JCQkJMEYyMzVCQzIxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5j
cHAgKi8sCi0JCQkJMEYyMzVCQzMxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRUaHVua0dlbmVy
YXRvci5oICovLAogCQkJCTBGMkI5Q0YwMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbi5jcHAgKi8sCiAJCQkJMEYyQjlDRjExOUQwQkFDMTAwQjFEMUI1
IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggKi8sCiAJCQkJMEYyMzVCQzQx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5jcHAgKi8sCkBAIC00Njk5LDIzICs0NTM4
LDEwIEBACiAJCQkJMEZEOEEzMTUxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5SklU
Q29kZS5jcHAgKi8sCiAJCQkJMEZEOEEzMTYxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVu
dHJ5SklUQ29kZS5oICovLAogCQkJCUE3OEE5NzdDMTc5NzM4RDUwMDlERjc0NCAvKiBGVExHZW5l
cmF0ZWRGdW5jdGlvbi5oICovLAotCQkJCTBGMjVGMUE3MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJ
bmxpbmVDYWNoZURlc2NyaXB0b3IuaCAqLywKLQkJCQkwRjI1RjFBODE4MTYzNUYzMDA1MjJGMzkg
LyogRlRMSW5saW5lQ2FjaGVTaXplLmNwcCAqLywKLQkJCQkwRjI1RjFBOTE4MTYzNUYzMDA1MjJG
MzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmggKi8sCi0JCQkJMEZFQTBBMjYxNzA5NjIzQjAwQkI3
MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuY3BwICovLAotCQkJCTBGRUEwQTIyMTcwOTYw
NjkwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmggKi8sCiAJCQkJMEZFQTBBMDIx
NzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuY3BwICovLAogCQkJCTBGRUEwQTAzMTcwNTEz
REIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmggKi8sCiAJCQkJQTc4QTk3N0QxNzk3MzhENTAwOURG
NzQ0IC8qIEZUTEpJVEZpbmFsaXplci5jcHAgKi8sCiAJCQkJQTc4QTk3N0UxNzk3MzhENTAwOURG
NzQ0IC8qIEZUTEpJVEZpbmFsaXplci5oICovLAotCQkJCTBGNkIxQ0IzMTg1RkM5RTkwMDg0NUQ5
NyAvKiBGVExKU0NhbGwuY3BwICovLAotCQkJCTBGNkIxQ0I0MTg1RkM5RTkwMDg0NUQ5NyAvKiBG
VExKU0NhbGwuaCAqLywKLQkJCQkwRkQxMjAyRDFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxs
QmFzZS5jcHAgKi8sCi0JCQkJMEZEMTIwMkUxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJh
c2UuaCAqLywKLQkJCQkwRkQxMjAzMTFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJn
cy5jcHAgKi8sCi0JCQkJMEZEMTIwMzIxQThDODVCRDAwMEY1MjgwIC8qIEZUTEpTQ2FsbFZhcmFy
Z3MuaCAqLywKLQkJCQk2Mjc3NERBODFCOEQ0QjE5MDAwNkYwNUEgLyogRlRMSlNUYWlsQ2FsbC5j
cHAgKi8sCi0JCQkJNjI3NzREQTkxQjhENEIxOTAwMDZGMDVBIC8qIEZUTEpTVGFpbENhbGwuaCAq
LywKIAkJCQkwRkI0RkI3MDFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmNwcCAq
LywKIAkJCQkwRkI0RkI3MTFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmggKi8s
CiAJCQkJMEZCNEZCNzIxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aENhbGwuaCAq
LywKQEAgLTQ3MzIsMTMgKzQ1NTgsMTAgQEAKIAkJCQkwRkQ4QTMxODE3RDUxRjIyMDBDQTJDNDAg
LyogRlRMT1NSRW50cnkuaCAqLywKIAkJCQkwRjIzNUJDNjE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
T1NSRXhpdC5jcHAgKi8sCiAJCQkJMEYyMzVCQzcxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4
aXQuaCAqLywKLQkJCQkwRjIzNUJDODE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBp
bGF0aW9uSW5mby5oICovLAogCQkJCTBGMjM1QkM5MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JF
eGl0Q29tcGlsZXIuY3BwICovLAogCQkJCTBGMjM1QkNBMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExP
U1JFeGl0Q29tcGlsZXIuaCAqLywKIAkJCQkwRjlCMURCNTFDMEU0MkJEMDBFNUJGRDIgLyogRlRM
T1NSRXhpdEhhbmRsZS5jcHAgKi8sCiAJCQkJMEY5QjFEQjYxQzBFNDJCRDAwRTVCRkQyIC8qIEZU
TE9TUkV4aXRIYW5kbGUuaCAqLywKLQkJCQkwRkVBMEEyOTE3MDk2Mjk2MDBCQjcyMkMgLyogRlRM
T3V0cHV0LmNwcCAqLywKLQkJCQkwRkVBMEEwNjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMT3V0cHV0
LmggKi8sCiAJCQkJMEY5RDRDMEUxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNl
cHRpb25IYW5kbGUuY3BwICovLAogCQkJCTBGOUQ0QzBGMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQ
YXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmggKi8sCiAJCQkJMEY0ODUzMjUxODdERkRFQzAwODNC
Njg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmNwcCAqLywKQEAgLTQ3NTAsMTYgKzQ1NzMsMTIgQEAK
IAkJCQkwRjI1RjFBQzE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCAq
LywKIAkJCQkwRjI1RjFBRDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5Lmgg
Ki8sCiAJCQkJMEYyMzVCQzExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFN0YWNrbWFwQXJndW1lbnRM
aXN0LmggKi8sCi0JCQkJMEY5RDMzOTgxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5j
cHAgKi8sCi0JCQkJMEY5RDMzOTkxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5oICov
LAogCQkJCTBGRUEwQTE1MTcwNkJCOTAwMEJCNzIyQyAvKiBGVExTdGF0ZS5jcHAgKi8sCiAJCQkJ
MEZFQTBBMDcxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTFN0YXRlLmggKi8sCiAJCQkJQTdGQ0MyNkMx
N0EwQjZBQTAwNzg2RDFBIC8qIEZUTFN3aXRjaENhc2UuaCAqLywKIAkJCQkwRjIzNUJDQjE3MTc4
RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmNwcCAqLywKIAkJCQkwRjIzNUJDQzE3MTc4RTFDMDA2
OTBDN0YgLyogRlRMVGh1bmtzLmggKi8sCiAJCQkJMEZFQTBBMUIxNzA4QjAwNzAwQkI3MjJDIC8q
IEZUTFR5cGVkUG9pbnRlci5oICovLAotCQkJCTBGNkIxQ0MxMTg2MkM0NzgwMDg0NUQ5NyAvKiBG
VExVbndpbmRJbmZvLmNwcCAqLywKLQkJCQkwRjZCMUNDMjE4NjJDNDc4MDA4NDVEOTcgLyogRlRM
VW53aW5kSW5mby5oICovLAogCQkJCTBGREIyQ0M4MTczREE1MUUwMDdCM0MxQiAvKiBGVExWYWx1
ZUZyb21CbG9jay5oICovLAogCQkJCTBGNUE2MjgxMTg4Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1
ZVJhbmdlLmNwcCAqLywKIAkJCQkwRjVBNjI4MjE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVS
YW5nZS5oICovLApAQCAtNTAxMyw4ICs0ODMyLDYgQEAKIAkJCQk2NUMwMjg0RjE3MTc5NUUyMDAz
NTFFMzUgLyogQVJNdjdEaXNhc3NlbWJsZXIuY3BwICovLAogCQkJCTBGOUQzMzZFMTY1REJCOEQw
MDVBRDM4NyAvKiBEaXNhc3NlbWJsZXIuY3BwICovLAogCQkJCTBGRjQyNzJGMTU4RUJENDQwMDRD
QjlGRiAvKiBEaXNhc3NlbWJsZXIuaCAqLywKLQkJCQlBN0U1QUIzMzE3OTlFNEIyMDBEMjgzM0Qg
LyogTExWTURpc2Fzc2VtYmxlci5jcHAgKi8sCi0JCQkJQTdFNUFCMzQxNzk5RTRCMjAwRDI4MzNE
IC8qIExMVk1EaXNhc3NlbWJsZXIuaCAqLywKIAkJCQkwRkY0MjczMDE1OEVCRDQ0MDA0Q0I5RkYg
LyogVURpczg2RGlzYXNzZW1ibGVyLmNwcCAqLywKIAkJCQlBN0U1QUIzNTE3OTlFNEIyMDBEMjgz
M0QgLyogVURpczg2RGlzYXNzZW1ibGVyLmggKi8sCiAJCQkJQTdFNUFCMzYxNzk5RTRCMjAwRDI4
MzNEIC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgKi8sCkBAIC03MDIwLDE3ICs2ODM3LDYgQEAKIC8q
IEVuZCBQQlhHcm91cCBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEhlYWRlcnNCdWlsZFBoYXNl
IHNlY3Rpb24gKi8KLQkJMEZDRUZBQjQxODA1RDYxNjAwNDcyQ0U0IC8qIEhlYWRlcnMgKi8gPSB7
Ci0JCQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIx
NDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCQkwRkNFRkFEQzE4MDY0QTE0MDA0NzJDRTQgLyog
Y29uZmlnX2xsdm0uaCBpbiBIZWFkZXJzICovLAotCQkJCTBGQ0VGQURBMTgwNjIwREEwMDQ3MkNF
NCAvKiBMTFZNQVBJLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkNFRkFEMTE4MDVFNzc5MDA0NzJD
RTQgLyogTExWTUFQSUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEZDRUZBRDQxODA1
RURDQzAwNDcyQ0U0IC8qIExMVk1IZWFkZXJzLmggaW4gSGVhZGVycyAqLywKLQkJCSk7Ci0JCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKIAkJMTQ0MDA1Qzcw
QTUzMzhDNjAwMDVGMDYxIC8qIEhlYWRlcnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhIZWFkZXJzQnVp
bGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC03MDQ5LDcgKzY4
NTUsNiBAQAogCQkJZmlsZXMgPSAoCiAJCQkJMEZGQTU0OTgxNkI4ODM1MzAwQjNBOTgyIC8qIEE2
NERPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUZFNTFDMTkyMkEzQkMwMDY5ODdDNSAv
KiBBYm9ydFJlYXNvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkUxODdBMUExQzBFMTNFNjAwMzhC
QkNBIC8qIEZUTENvbXBpbGVCaW5hcnlPcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTMw
RjNBODNDMTAwRjg0NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNTVGMEY1MTREMTA2M0MwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkVDODU2RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5o
IGluIEhlYWRlcnMgKi8sCkBAIC03MDY4LDcgKzY4NzMsNiBAQAogCQkJCTBGNjE4MzMxMUM0NUJG
MDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1
NzcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFQzg1NzkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggaW4gSGVhZGVy
cyAqLywKLQkJCQk3OURGNjZCMTFCRjI2QTU3MDAwMUNGMTEgLyogRlRMRXhjZXB0aW9uSGFuZGxl
ck1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTdBMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJHZW5lcmF0aW9uQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1N0MxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDODU3RTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTc1MTEsNyArNzMxNSw2IEBACiAJCQkJQTdBOEFGMzkxN0FEQjVGMzAwNUFCMTc0
IC8qIEZsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNEU1NDMxN0VBOUY1OTAw
QUJCMjE3IC8qIEZQUkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREIyQ0M5MTczREE1MjAw
MDdCM0MxQiAvKiBGVExBYmJyZXZpYXRlZFR5cGVzLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkVB
MEEwODE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFQTBBMUQxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFQTBBMUYxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVh
cFJlcG9zaXRvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDg1MzI4MTg3REZERUMwMDgzQjY4
NyAvKiBGVExBdmFpbGFibGVSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCkBAIC03NTE5LDE1ICs3
MzIyLDExIEBACiAJCQkJMEZFQTBBMEExNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENhcGFiaWxpdGll
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMjMxNzA5NjA2OTAwQkI3MjJDIC8qIEZUTENv
bW1vblZhbHVlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMEMxNzA1MTNEQjAwQkI3MjJD
IC8qIEZUTENvbXBpbGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGRTk1RjdBMThCNTY5NDcwMEI1
MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkFDOTIyQkMxOEEx
NjE4MjAwM0NFMEZCIC8qIEZUTERXQVJGRGVidWdMaW5lSW5mby5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMEY5QzVFNUYxOEUzNUY1RTAwRDQzMUMzIC8qIEZUTERXQVJGUmVnaXN0ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMjM1QkQ0MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4RTBDMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0NvbXBp
bGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJENjE3MTc4RTFDMDA2OTBDN0YgLyog
RlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRDcx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTFN0YWNrbWFwQXJndW1lbnRMaXN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJCOUNGNTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5VmFsdWUu
aCBpbiBIZWFkZXJzICovLAotCQkJCTBGMjM1QkQ5MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0
VGh1bmtHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI5Q0Y3MTlEMEJBQzEwMEIx
RDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyMzVCREIxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZFMEU0QUUxQzI0Qzk0QTAwMkUxN0I2IC8qIEFpclRtcFdpZHRoLmggaW4g
SGVhZGVycyAqLywKQEAgLTc1MzUsMTUgKzczMzQsOCBAQAogCQkJCTBGRUEwQTJDMTcwQjY2MTkw
MEJCNzIyQyAvKiBGVExGb3JtYXR0ZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEz
MUExN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5SklUQ29kZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTc4QTk3N0YxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEdlbmVyYXRlZEZ1bmN0aW9u
LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjI1RjFBRTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5s
aW5lQ2FjaGVEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjI1RjFCMDE4MTYzNUYz
MDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkVB
MEEyNDE3MDk2MDY5MDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZFQTBBMEUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3OEE5NzgxMTc5NzM4RDUwMDlERjc0NCAvKiBGVExKSVRGaW5hbGl6
ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGNkIxQ0I2MTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExK
U0NhbGwuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGRDEyMDMwMUE4QUVEMTIwMDBGNTI4MCAvKiBG
VExKU0NhbGxCYXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkQxMjAzNDFBOEM4NUJEMDAwRjUy
ODAgLyogRlRMSlNDYWxsVmFyYXJncy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNjI3NzREQUIxQjhE
NEIxOTAwMDZGMDVBIC8qIEZUTEpTVGFpbENhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjRG
Qjc0MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGguaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQjRGQjc1MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGhDYWxsLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjhGMkI5NjE3MkUwNEEzMDA3REJEQTUgLyogRlRMTGluay5oIGlu
IEhlYWRlcnMgKi8sCkBAIC03NTU0LDE5ICs3MzQ2LDE1IEBACiAJCQkJMEYzMzhFMTAxQkYwMjc2
QzAwMTNDODhGIC8qIEIzTW92ZUNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEz
MUMxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjIzNUJERDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMEYyMzVCREUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8u
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkUwMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JF
eGl0Q29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGRUEwQTExMTcwNTEzREIwMEJCNzIy
QyAvKiBGVExPdXRwdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDg1MzJBMTg3REZERUMwMDgz
QjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRUZBQUMx
ODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjI1RjFCMjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjI1RjFCNDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQkwRjlEMzM5QjE4MDNBREI3MDA3M0MyQkMgLyogRlRMU3RhY2tN
YXBzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEExMjE3MDUxM0RCMDBCQjcyMkMgLyogRlRM
U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RkNDMjZEMTdBMEI2QUEwMDc4NkQxQSAvKiBG
VExTd2l0Y2hDYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFMjE3MTc4RTFDMDA2OTBD
N0YgLyogRlRMVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEyMDE3MDhCMDA3MDBC
QjcyMkMgLyogRlRMVHlwZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjZCMUNDNjE4
NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZE
QjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYwMzMyQzYxOEI1M0ZBOTAwNUY5NzlBIC8qIEZUTFdlaWdodC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC03NjU0LDggKzc0NDIsNiBAQAogCQkJCTBGMEE3NTIzMUI5NEJGQTkw
MDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkM5MjEyMUI5
NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZGOEJERUIxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuaCBpbiBIZWFkZXJzICov
LAotCQkJCTBGQ0VGQUIwMTgwNUNBNkQwMDQ3MkNFNCAvKiBJbml0aWFsaXplTExWTS5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMEZDRUZBQ0MxODA1RTc1NTAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZN
UE9TSVguaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDEwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBJ
bml0aWFsaXplVGhyZWFkaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTEzRTVCODE4NUI4QkQz
MDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MTRCMkMz
MTg1QTY4NDQwMEYzQzdDQiAvKiBJbmplY3RlZFNjcmlwdEJhc2UuaCBpbiBIZWFkZXJzICovLApA
QCAtNzkxOSwxMCArNzcwNSw2IEBACiAJCQkJRkVEMjg3QjIxNUVDOUE1NzAwREE4MTYxIC8qIExM
SW50T3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBBNTE0QkE3RjhEMDBCRkUyNzIg
LyogTExJbnRTbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4MzlEMTRCQ0Y0NjYw
MDg4NUI0RiAvKiBMTEludFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEZDRUZBQ0UxODA1
RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGQ0VGQUNGMTgw
NUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKLQkJCQlB
N0U1QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMEZDRUZBRDMxODA1RURDQzAwNDcyQ0U0IC8qIExMVk1IZWFkZXJzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDJFMzEzOTEzNEZGMEE2MDBBRkFEQjUgLyogTG9jYWwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0MkUzMTNBMTM0RkYwQTYwMEFGQURCNSAvKiBMb2NhbFNjb3BlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQzNzBFMTZGNUNEMDBCMzQ0NjAgLyogTG9va3VwLmggaW4g
SGVhZGVycyAqLywKQEAgLTgyNzEsMjMgKzgwNTMsNiBAQAogCQkJcHJvZHVjdFJlZmVyZW5jZSA9
IDBGOTMyNzU5MUMyMEJDQkEwMENGNjU2NCAvKiBkeW5iZW5jaCAqLzsKIAkJCXByb2R1Y3RUeXBl
ID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUudG9vbCI7CiAJCX07Ci0JCTBGQ0VGQUI1MTgwNUQ2
MTYwMDQ3MkNFNCAvKiBsbHZtRm9ySlNDICovID0gewotCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0
OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDBGQ0VGQUI3MTgwNUQ2MTYwMDQ3MkNFNCAv
KiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAibGx2bUZvckpT
QyIgKi87Ci0JCQlidWlsZFBoYXNlcyA9ICgKLQkJCQkwRkNFRkFCMjE4MDVENjE2MDA0NzJDRTQg
LyogU291cmNlcyAqLywKLQkJCQkwRkNFRkFCMzE4MDVENjE2MDA0NzJDRTQgLyogRnJhbWV3b3Jr
cyAqLywKLQkJCQkwRkNFRkFCNDE4MDVENjE2MDA0NzJDRTQgLyogSGVhZGVycyAqLywKLQkJCSk7
Ci0JCQlidWlsZFJ1bGVzID0gKAotCQkJKTsKLQkJCWRlcGVuZGVuY2llcyA9ICgKLQkJCSk7Ci0J
CQluYW1lID0gbGx2bUZvckpTQzsKLQkJCXByb2R1Y3ROYW1lID0gbGx2bUZvckpTQzsKLQkJCXBy
b2R1Y3RSZWZlcmVuY2UgPSAwRkNFRkFCNjE4MDVENjE2MDA0NzJDRTQgLyogbGlibGx2bUZvckpT
Qy5keWxpYiAqLzsKLQkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGli
cmFyeS5keW5hbWljIjsKLQkJfTsKIAkJMEZFQzg1OTQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3Ri
MyAqLyA9IHsKIAkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlv
bkxpc3QgPSAwRkVDODVBODFCREI1Q0YxMDA4MEZGNzQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBs
aXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInRlc3RiMyIgKi87CkBAIC04Mzg2LDcgKzgxNTEsNiBA
QAogCQkJCTM3MzI4MTFBMTdGQ0QyMzUwMDRBRDUxOSAvKiBQb3N0cHJvY2VzcyBIZWFkZXJzICov
LAogCQkJCTkzMkY1QjkxMDgyMkExQzcwMDczNjk3NSAvKiBTb3VyY2VzICovLAogCQkJCTkzMkY1
QkQyMDgyMkExQzcwMDczNjk3NSAvKiBGcmFtZXdvcmtzICovLAotCQkJCTBGQ0VGQUQ5MTgwNjE5
MTgwMDQ3MkNFNCAvKiBDb3B5IExMVk0gTGlicmFyeSBJbnRvIEZyYW1ld29yayAqLywKIAkJCQk1
RDI5RDhCRTBFOTg2MEI0MDBDM0QyRDAgLyogQ2hlY2sgRm9yIFdlYWsgVlRhYmxlcyBhbmQgRXh0
ZXJuYWxzICovLAogCQkJCTM3MTNGMDE0MTQyOTA1MjQwMDM2Mzg3RiAvKiBDaGVjayBGb3IgSW5h
cHByb3ByaWF0ZSBPYmplY3RpdmUtQyBDbGFzcyBOYW1lcyAqLywKIAkJCQlBNTVERUFBNDE2NzAz
REY3MDAzREI4NDEgLyogQ2hlY2sgRm9yIEluYXBwcm9wcmlhdGUgTWFjcm9zIGluIEV4dGVybmFs
IEhlYWRlcnMgKi8sCkBAIC04Mzk1LDcgKzgxNTksNiBAQAogCQkJYnVpbGRSdWxlcyA9ICgKIAkJ
CSk7CiAJCQlkZXBlbmRlbmNpZXMgPSAoCi0JCQkJMEZDRUZBQkQxODA1RDY2MzAwNDcyQ0U0IC8q
IFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJNjU3ODhBQUQxOEI0MEE3QjAwQzE4OUZGIC8q
IFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJNjVGQjNGN0UwOUQxMUVGMzAwRjQ5REVCIC8q
IFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkpOwpAQCAtODQ1MCw3ICs4MjEzLDYgQEAKIAkJ
CXRhcmdldHMgPSAoCiAJCQkJOTMyRjVCRTMwODIyQTFDNzAwNzM2OTc1IC8qIEFsbCAqLywKIAkJ
CQk5MzJGNUIzRTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUgKi8sCi0JCQkJMEZD
RUZBQjUxODA1RDYxNjAwNDcyQ0U0IC8qIGxsdm1Gb3JKU0MgKi8sCiAJCQkJMEY0NjgwQTkxNEJB
N0ZEOTAwQkZFMjcyIC8qIExMSW50IE9mZnNldHMgKi8sCiAJCQkJNjVGQjNGNjYwOUQxMUU5MTAw
RjQ5REVCIC8qIERlcml2ZWQgU291cmNlcyAqLywKIAkJCQkwRkY5MjJDMzE0RjQ2QjEzMDA0MUEy
NEUgLyogSlNDTExJbnRPZmZzZXRzRXh0cmFjdG9yICovLApAQCAtODQ5NCwyMSArODI1Niw2IEBA
CiAJCQlzaGVsbFBhdGggPSAvYmluL3NoOwogCQkJc2hlbGxTY3JpcHQgPSAic2V0IC1lXG5cbm1r
ZGlyIC1wIFwiJHtCVUlMVF9QUk9EVUNUU19ESVJ9L0xMSW50T2Zmc2V0cy9cIlxuXG4vdXNyL2Jp
bi9lbnYgcnVieSBcIiR7U1JDUk9PVH0vb2ZmbGluZWFzbS9nZW5lcmF0ZV9vZmZzZXRfZXh0cmFj
dG9yLnJiXCIgXCItSSR7QlVJTFRfUFJPRFVDVFNfRElSfS9EZXJpdmVkU291cmNlcy9KYXZhU2Ny
aXB0Q29yZVwiIFwiJHtTUkNST09UfS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbVwiIFwi
JHtCVUlMVF9QUk9EVUNUU19ESVJ9L0xMSW50T2Zmc2V0cy9MTEludERlc2lyZWRPZmZzZXRzLmhc
IiBcIlg4NixYODZfNjQsQVJNdjcsQVJNdjdzLEFSTTY0LENfTE9PUFwiXG4iOwogCQl9OwotCQkw
RkNFRkFEOTE4MDYxOTE4MDA0NzJDRTQgLyogQ29weSBMTFZNIExpYnJhcnkgSW50byBGcmFtZXdv
cmsgKi8gPSB7Ci0JCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7Ci0JCQlidWlsZEFj
dGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJaW5wdXRQYXRo
cyA9ICgKLQkJCQkiJChCVUlMVF9QUk9EVUNUU19ESVIpL2xpYmxsdm1Gb3JKU0MuZHlsaWIiLAot
CQkJKTsKLQkJCW5hbWUgPSAiQ29weSBMTFZNIExpYnJhcnkgSW50byBGcmFtZXdvcmsiOwotCQkJ
b3V0cHV0UGF0aHMgPSAoCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7Ci0JCQlzaGVsbFBhdGggPSAvYmluL3NoOwotCQkJc2hlbGxTY3JpcHQgPSAic2V0
IC1lXG5cbmlmIFtbICRFTkFCTEVfRlRMX0pJVCAhPSBcIkVOQUJMRV9GVExfSklUXCIgXV1cbnRo
ZW5cbiAgICBleGl0IDBcbmZpXG5cbmlmIFtbICR7Q09ORklHVVJBVElPTjo9RGVidWd9ICE9IFwi
UHJvZHVjdGlvblwiIF1dXG50aGVuXG4gICAgIyBDb3B5IHRoZSBsbHZtRm9ySlNDIGxpYnJhcnkg
aW50byB0aGUgZnJhbWV3b3JrLlxuICAgIGRpdHRvIFwiJHtCVUlMVF9QUk9EVUNUU19ESVJ9L2xp
Ymxsdm1Gb3JKU0MuZHlsaWJcIiBcIiR7QlVJTFRfUFJPRFVDVFNfRElSfS8ke0NPTlRFTlRTX0ZP
TERFUl9QQVRIfS9MaWJyYXJpZXMvbGlibGx2bUZvckpTQy5keWxpYlwiXG5maVxuXG5pZiBbWyAk
UExBVEZPUk1fTkFNRSAhPSBcIm1hY29zeFwiIF1dXG50aGVuXG4gICAgZXhpdCAwXG5maVxuXG5p
ZiBbICEgLWUgXCIke0JVSUxUX1BST0RVQ1RTX0RJUn0vJHtXUkFQUEVSX05BTUV9L0xpYnJhcmll
c1wiIF1cbnRoZW5cbiAgICBsbiAtZnMgXCJWZXJzaW9ucy9DdXJyZW50L0xpYnJhcmllc1wiIFwi
JHtCVUlMVF9QUk9EVUNUU19ESVJ9LyR7V1JBUFBFUl9OQU1FfS9MaWJyYXJpZXNcIlxuZmkiOwot
CQl9OwogCQkxQTAyRDlBODFCMzRBODgyMDAwRDE1MjIgLyogQWRkIFN5bWxpbmsgaW4gL1N5c3Rl
bS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0gUEJYU2hlbGxTY3Jp
cHRCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gODsKQEAgLTg3MTUsMTYgKzg0NjIs
NiBAQAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwotCQkwRkNFRkFCMjE4MDVENjE2MDA0NzJDRTQgLyogU291cmNlcyAqLyA9IHsKLQkJCWlz
YSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0
NzsKLQkJCWZpbGVzID0gKAotCQkJCTBGQ0VGQUQ3MTgwNjE3NDYwMDQ3MkNFNCAvKiBMTFZNQW5j
aG9yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGQ0VGQUMzMTgwNUU3NDAwMDQ3MkNFNCAvKiBM
TFZNRXhwb3J0cy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRkNFRkFDMTE4MDVEOTRFMDA0NzJD
RTQgLyogTExWTU92ZXJyaWRlcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCSk7Ci0JCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKIAkJMEZFQzg1OTUxQkRCNUNG
MTAwODBGRjc0IC8qIFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFz
ZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC05MDQ4LDcgKzg3ODUsNiBA
QAogCQkJCTBGQjE3NjYyMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYzQTFCRjkxQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lu
a2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDQ0ZCMThBNjAwNzAwMDFBMjdG
OCAvKiBERkdTYWZlcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkUxODdBMTkxQzBFMTNF
MzAwMzhCQkNBIC8qIEZUTENvbXBpbGVCaW5hcnlPcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4
NkVDOUREMjEzMjhERjgyMDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODY4ODBGMUYxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4ODBGNEQxNDM1M0IyMTAwQjA4RDQyIC8q
IERGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MTEzLDI4ICs4ODQ5
LDE3IEBACiAJCQkJMEZFQTBBMDkxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENhcGFiaWxpdGllcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjMzOEUxQjFCRjI4NkVBMDAxM0M4OEYgLyogQjNCbG9j
a0luc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEyNzE3MDk2MjNCMDBC
QjcyMkMgLyogRlRMQ29tbW9uVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGRUEwQTBC
MTcwNTEzREIwMEJCNzIyQyAvKiBGVExDb21waWxlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBG
RTk1Rjc5MThCNTY5NDcwMEI1MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQkyQUM5MjJCQjE4QTE2MTgyMDAzQ0UwRkIgLyogRlRMRFdBUkZEZWJ1Z0xpbmVJbmZv
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGOUM1RTVFMThFMzVGNUUwMEQ0MzFDMyAvKiBGVExE
V0FSRlJlZ2lzdGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkQzMTcxNzhFMUMwMDY5
MEM3RiAvKiBGVExFeGl0QXJndW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRDUx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYyQjlDRjQxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZh
bHVlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGMjM1QkQ4MTcxNzhFMUMwMDY5MEM3RiAvKiBG
VExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjlDRjYxOUQw
QkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMjM1QkRBMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGMjk5NkIxN0EwQkI2NzAwMTA0MTdBIC8qIEZUTEZh
aWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMTkxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZU
TEZvck9TUkVudHJ5SklUQ29kZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjI1RjFBRjE4MTYz
NUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTBGRUEwQTI4MTcwOTYyM0IwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRUEwQTBEMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2Rl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkI4QUUyMUM0RUZFMTcwMDk2OTA1MiAvKiBCM0Jy
ZWFrQ3JpdGljYWxFZGdlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhBOTc4MDE3OTczOEQ1
MDA5REY3NDQgLyogRlRMSklURmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGNkIx
Q0I1MTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
MEZEMTIwMkYxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY3MjVDQUYxQzUwNkQzQjAwQUQ5NDNBIC8qIEIzRm9sZFBhdGhDb25zdGFudHMu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEZEMTIwMzMxQThDODVCRDAwMEY1MjgwIC8qIEZUTEpT
Q2FsbFZhcmFyZ3MuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNjI3NzREQUExQjhENEIxOTAwMDZG
MDVBIC8qIEZUTEpTVGFpbENhbGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUxODdBMEUxQzAz
MEQ2NDAwMzhCQkNBIC8qIEpJVERpdkdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkI0RkI3MzFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGOEYyQjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtOTE0NCwxOCArODg2OSwxNSBAQAogCQkJCTBGRDhBMzFCMTdENTFGMjIwMENB
MkM0MCAvKiBGVExPU1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJEQzE3MTc4
RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJE
RjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTBGRUEwQTJBMTcwOTYyOTYwMEJCNzIyQyAvKiBGVExPdXRwdXQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTU1MTY1RDIxQkRGMEI5ODAwM0I3NUMxIC8qIEluc3BlY3RvclNjcmlwdFBy
b2ZpbGVyQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUzMjkxODdERkRFQzAwODNC
Njg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0VGQUFC
MTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjI1RjFCMTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMzM4REYxMUJFOTNBRDEwMDEzQzg4RiAvKiBCM1N0YWNrbWFwVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNs
b3dQYXRoQ2FsbEtleS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjlEMzM5QTE4MDNBREI3MDA3
M0MyQkMgLyogRlRMU3RhY2tNYXBzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQzMTlEQTAzMUMx
QkU0MEEwMDFEMjYwQiAvKiBCM0xvd2VyTWFjcm9zQWZ0ZXJPcHRpbWl6YXRpb25zLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRUEwQTE2MTcwNkJCOTAwMEJCNzIyQyAvKiBGVExTdGF0ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJFMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtz
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGNkIxQ0M1MTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExV
bndpbmRJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNUE2MjgzMTg4Qzk4RDQwMDcyQzlE
RiAvKiBGVExWYWx1ZVJhbmdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBODM2Mzg5MThEN0Qw
RkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0N0YzOUNCMTA3RUMzNzYwMDQyN0E0OCAvKiBGdW5jdGlvbkNvbnN0cnVjdG9yLmNwcCBp
biBTb3VyY2VzICovLApAQCAtOTE4Niw5ICs4OTA4LDYgQEAKIAkJCQkwRjBBNzUyMjFCOTRCRkE5
MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkM5MjEx
MUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQkwRkNFRkFDQTE4MDVFNzU1MDA0NzJDRTQgLyogSW5pdGlhbGl6ZUxMVk0u
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOUVBNUM3QTIxOTBGMDg4NzAwNTA4RUJFIC8qIEluaXRp
YWxpemVMTFZNTWFjLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTlFNzI5NDA4MTkwRjAyMUUwMDFB
OTFCNSAvKiBJbml0aWFsaXplTExWTVBPU0lYLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlFNzI5
NDA3MTkwRjAxQTUwMDFBOTFCNSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1MTNFNUI3MTg1QjhCRDMwMDdFOTVBRCAvKiBJbmplY3RlZFNjcmlwdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNTE0QjJDMjE4NUE2ODQ0MDBGM0M3Q0IgLyogSW5qZWN0ZWRT
Y3JpcHRCYXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTM0Niw3ICs5MDY1LDYgQEAKIAkJCQkw
RjJCNjZGRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1MzRDNDU3RTFCQzcyNTQ5MDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmlld0NvbnN0
cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCURFQTdFMjQ0MUJCQzY3NzIwMEQ3ODQ0MCAv
KiBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTc5REY2
NkIwMUJGMjZBNTcwMDAxQ0YxMSAvKiBGVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4NkUzQzYxQTE2N0JBQkVFMDA2RDc2MEEgLyogSlNWYWx1ZS5tbSBp
biBTb3VyY2VzICovLAogCQkJCTE0QkQ1QTMyMEEzRTkxRjYwMEJBRjU5QyAvKiBKU1ZhbHVlUmVm
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RTNDNjFDMTY3QkFCRUUwMDZENzYwQSAvKiBKU1Zp
cnR1YWxNYWNoaW5lLm1tIGluIFNvdXJjZXMgKi8sCkBAIC05MzcxLDggKzkwODksNiBAQAogCQkJ
CTBGNDY4MEE4MTRCQTdGQUIwMEJGRTI3MiAvKiBMTEludEV4Y2VwdGlvbnMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY0NjgwQTQxNEJBN0Y4RDAwQkZFMjcyIC8qIExMSW50U2xvd1BhdGhzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMEI4MzlDMTRCQ0Y0NjMwMDg4NUI0RiAvKiBMTEludFRo
dW5rcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRkNFRkFDRDE4MDVFNzU1MDA0NzJDRTQgLyog
TExWTUFQSS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBN0U1QUIzNzE3OTlFNEIyMDBEMjgzM0Qg
LyogTExWTURpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERTEwN0VD
N0U3MDA2NTA0NDYgLyogTG9va3VwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MENDMTRC
QkIxN0EwMEJGRTI3MiAvKiBMb3dMZXZlbEludGVycHJldGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1QUI0OURDMUJFQzgwODIwMDcwMjBGQiAvKiBQZXJHbG9iYWxPYmplY3RXcmFwcGVyV29y
bGQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05NjExLDExICs5MzI3LDYgQEAKIAkJCXRhcmdldCA9
IDBGOTMyNzRFMUMyMEJDQkEwMENGNjU2NCAvKiBkeW5iZW5jaCAqLzsKIAkJCXRhcmdldFByb3h5
ID0gMEY5MzI3NUMxQzIwQkYzQTAwQ0Y2NTY0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsK
IAkJfTsKLQkJMEZDRUZBQkQxODA1RDY2MzAwNDcyQ0U0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kg
Ki8gPSB7Ci0JCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwotCQkJdGFyZ2V0ID0gMEZDRUZB
QjUxODA1RDYxNjAwNDcyQ0U0IC8qIGxsdm1Gb3JKU0MgKi87Ci0JCQl0YXJnZXRQcm94eSA9IDBG
Q0VGQUJDMTgwNUQ2NjMwMDQ3MkNFNCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87Ci0JCX07
CiAJCTBGRUM4NUIxMUJEQjVEOEYwMDgwRkY3NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0g
ewogCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKIAkJCXRhcmdldCA9IDBGRUM4NTk0MUJE
QjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi87CkBAIC05NzgxLDM0ICs5NDkyLDYgQEAKIAkJCX07
CiAJCQluYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsKLQkJMEZDRUZBQjgxODA1RDYxNjAwNDcyQ0U0
IC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNl
Q29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDBGQ0VGQUJFMTgwNUQ4NjkwMDQ3MkNFNCAvKiBMTFZN
Rm9ySlNDLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCX07Ci0JCQluYW1l
ID0gRGVidWc7Ci0JCX07Ci0JCTBGQ0VGQUI5MTgwNUQ2MTYwMDQ3MkNFNCAvKiBSZWxlYXNlICov
ID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmlndXJhdGlv
blJlZmVyZW5jZSA9IDBGQ0VGQUJFMTgwNUQ4NjkwMDQ3MkNFNCAvKiBMTFZNRm9ySlNDLnhjY29u
ZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCX07Ci0JCQluYW1lID0gUmVsZWFzZTsK
LQkJfTsKLQkJMEZDRUZBQkExODA1RDYxNjAwNDcyQ0U0IC8qIFByb2ZpbGluZyAqLyA9IHsKLQkJ
CWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVu
Y2UgPSAwRkNFRkFCRTE4MDVEODY5MDA0NzJDRTQgLyogTExWTUZvckpTQy54Y2NvbmZpZyAqLzsK
LQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9IFByb2ZpbGluZzsKLQkJfTsK
LQkJMEZDRUZBQkIxODA1RDYxNjAwNDcyQ0U0IC8qIFByb2R1Y3Rpb24gKi8gPSB7Ci0JCQlpc2Eg
PSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0g
MEZDRUZBQkUxODA1RDg2OTAwNDcyQ0U0IC8qIExMVk1Gb3JKU0MueGNjb25maWcgKi87Ci0JCQli
dWlsZFNldHRpbmdzID0gewotCQkJfTsKLQkJCW5hbWUgPSBQcm9kdWN0aW9uOwotCQl9OwogCQkw
RkVDODVBOTFCREI1Q0YxMDA4MEZGNzQgLyogRGVidWcgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxk
Q29uZmlndXJhdGlvbjsKIAkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIx
MzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOwpAQCAtMTAyMDQs
MTcgKzk4ODcsNiBAQAogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwogCQkJ
ZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsKLQkJMEZDRUZBQjcx
ODA1RDYxNjAwNDcyQ0U0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZl
VGFyZ2V0ICJsbHZtRm9ySlNDIiAqLyA9IHsKLQkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7
Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAotCQkJCTBGQ0VGQUI4MTgwNUQ2MTYwMDQ3MkNF
NCAvKiBEZWJ1ZyAqLywKLQkJCQkwRkNFRkFCOTE4MDVENjE2MDA0NzJDRTQgLyogUmVsZWFzZSAq
LywKLQkJCQkwRkNFRkFCQTE4MDVENjE2MDA0NzJDRTQgLyogUHJvZmlsaW5nICovLAotCQkJCTBG
Q0VGQUJCMTgwNUQ2MTYwMDQ3MkNFNCAvKiBQcm9kdWN0aW9uICovLAotCQkJKTsKLQkJCWRlZmF1
bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKLQkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFt
ZSA9IFByb2R1Y3Rpb247Ci0JCX07CiAJCTBGRUM4NUE4MUJEQjVDRjEwMDgwRkY3NCAvKiBCdWls
ZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidGVzdGIzIiAqLyA9IHsK
IAkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25zID0g
KApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxOTY2
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSwxMSArMzUsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAKLS8vIFdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgdHJhbnNpdGlvbiBmcm9tIExMVk0gdG8g
QjMgYXMgdGhlIGJhY2tlbmQgZm9yIHRoZSBGVEwuIFRoaXMgZmxhZyB3aWxsIGdvCi0vLyBhd2F5
IG9uY2UgdGhhdCB0cmFuc2l0aW9uIGlzIGZpbmlzaGVkLiBGb3Igbm93LCB3ZSBlbmFibGUgQjMg
YnkgZGVmYXVsdCBidXQgd2Ugc3RpbGwgaGF2ZSBzb21lIG9sZAotLy8gTExWTSBjb2RlIHRoYXQg
aGFzbid0IGJlZW4gcmVtb3ZlZCB5ZXQuCi0jZGVmaW5lIEZUTF9VU0VTX0IzIDEKLQogc3RydWN0
IE5vZGU7CiAKIHR5cGVkZWYgdWludDMyX3QgQmxvY2tJbmRleDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNyArODksNiBA
QAogI2luY2x1ZGUgIkZUTExpbmsuaCIKICNpbmNsdWRlICJGVExMb3dlckRGR1RvTExWTS5oIgog
I2luY2x1ZGUgIkZUTFN0YXRlLmgiCi0jaW5jbHVkZSAiSW5pdGlhbGl6ZUxMVk0uaCIKICNlbmRp
ZgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC0yMjUsNyArMjI0LDcgQEAg
dm9pZCBQbGFuOjpjb21waWxlSW5UaHJlYWQoTG9uZ0xpdmVkU3RhdAogICAgICAgICB9CiAgICAg
ICAgIGRhdGFMb2coIk9wdGltaXplZCAiLCBjb2RlQmxvY2tOYW1lLCAiIHVzaW5nICIsIG1vZGUs
ICIgd2l0aCAiLCBwYXRoTmFtZSwgIiBpbnRvICIsIGZpbmFsaXplciA/IGZpbmFsaXplci0+Y29k
ZVNpemUoKSA6IDAsICIgYnl0ZXMgaW4gIiwgYWZ0ZXIgLSBiZWZvcmUsICIgbXMiKTsKICAgICAg
ICAgaWYgKHBhdGggPT0gRlRMUGF0aCkKLSAgICAgICAgICAgIGRhdGFMb2coIiAoREZHOiAiLCBt
X3RpbWVCZWZvcmVGVEwgLSBiZWZvcmUsICIsIExMVk06ICIsIGFmdGVyIC0gbV90aW1lQmVmb3Jl
RlRMLCAiKSIpOworICAgICAgICAgICAgZGF0YUxvZygiIChERkc6ICIsIG1fdGltZUJlZm9yZUZU
TCAtIGJlZm9yZSwgIiwgQjM6ICIsIGFmdGVyIC0gbV90aW1lQmVmb3JlRlRMLCAiKSIpOwogICAg
ICAgICBkYXRhTG9nKCIuXG4iKTsKICAgICB9CiB9CkBAIC00NDAsNyArNDM5LDcgQEAgUGxhbjo6
Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICBpZiAoT3B0aW9uczo6
dXNlTW92SGludFJlbW92YWwoKSkKICAgICAgICAgICAgIHBlcmZvcm1Nb3ZIaW50UmVtb3ZhbChk
ZmcpOwogICAgICAgICBwZXJmb3JtQ2xlYW5VcChkZmcpOwotICAgICAgICBwZXJmb3JtRENFKGRm
Zyk7IC8vIFdlIHJlbHkgb24gdGhpcyB0byBraWxsIGRlYWQgY29kZSB0aGF0IHdvbid0IGJlIHJl
Y29nbml6ZWQgYXMgZGVhZCBieSBMTFZNLgorICAgICAgICBwZXJmb3JtRENFKGRmZyk7IC8vIFdl
IHJlbHkgb24gdGhpcyB0byBraWxsIGRlYWQgY29kZSB0aGF0IHdvbid0IGJlIHJlY29nbml6ZWQg
YXMgZGVhZCBieSBCMy4KICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUNvcHlCYXJyaWVyT3B0aW1p
emF0aW9uKCkpCiAgICAgICAgICAgICBwZXJmb3JtQ29weUJhcnJpZXJPcHRpbWl6YXRpb24oZGZn
KTsKICAgICAgICAgcGVyZm9ybVN0YWNrTGF5b3V0KGRmZyk7CkBAIC00NTQsMzEgKzQ1MywxNSBA
QCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIH0KIAog
ICAgICAgICBkdW1wQW5kVmVyaWZ5R3JhcGgoZGZnLCAiR3JhcGgganVzdCBiZWZvcmUgRlRMIGxv
d2VyaW5nOiIsIHNob3VsZER1bXBEaXNhc3NlbWJseShtb2RlKSk7Ci0gICAgICAgIAotI2lmIEhB
VkUoTExWTSkgJiYgIUZUTF9VU0VTX0IzCi0gICAgICAgIGJvb2wgaGF2ZUxMVk07Ci0jZW5kaWYK
KworICAgICAgICAvLyBGbGFzaCBhIHNhZmVwb2ludCBpbiBjYXNlIHRoZSBHQyB3YW50cyBzb21l
IGFjdGlvbi4KICAgICAgICAgU2FmZXBvaW50OjpSZXN1bHQgc2FmZXBvaW50UmVzdWx0OwogICAg
ICAgICB7CiAgICAgICAgICAgICBHcmFwaFNhZmVwb2ludCBzYWZlcG9pbnQoZGZnLCBzYWZlcG9p
bnRSZXN1bHQpOwotI2lmIEhBVkUoTExWTSkgJiYgIUZUTF9VU0VTX0IzCi0gICAgICAgICAgICBo
YXZlTExWTSA9IGluaXRpYWxpemVMTFZNKCk7Ci0jZW5kaWYKICAgICAgICAgfQogICAgICAgICBp
ZiAoc2FmZXBvaW50UmVzdWx0LmRpZEdldENhbmNlbGxlZCgpKQogICAgICAgICAgICAgcmV0dXJu
IENhbmNlbFBhdGg7CiAKLSNpZiBIQVZFKExMVk0pICYmICFGVExfVVNFU19CMwotICAgICAgICBp
ZiAoIWhhdmVMTFZNKSB7Ci0gICAgICAgICAgICBpZiAoT3B0aW9uczo6ZnRsQ3Jhc2hlc0lmQ2Fu
dEluaXRpYWxpemVMTFZNKCkpIHsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJMTFZNIGNhbid0
IGJlIGluaXRpYWxpemVkLlxuIik7Ci0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGZpbmFsaXplciA9IHN0ZDo6bWFrZV91bmlxdWU8RmFpbGVkRmlu
YWxpemVyPigqdGhpcyk7Ci0gICAgICAgICAgICByZXR1cm4gRmFpbFBhdGg7Ci0gICAgICAgIH0K
LSNlbmRpZgotCiAgICAgICAgIEZUTDo6U3RhdGUgc3RhdGUoZGZnKTsKICAgICAgICAgRlRMOjps
b3dlckRGR1RvTExWTShzdGF0ZSk7CiAgICAgICAgIApAQCAtNTA0LDEzICs0ODcsNiBAQCBQbGFu
OjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgICAgICByZXR1cm4g
RlRMUGF0aDsKICAgICAgICAgfQogCi0jaWYgIUZUTF9VU0VTX0IzCi0gICAgICAgIGlmIChzdGF0
ZS5qaXRDb2RlLT5zdGFja21hcHMuc3RhY2tTaXplKCkgPiBPcHRpb25zOjpsbHZtTWF4U3RhY2tT
aXplKCkpIHsKLSAgICAgICAgICAgIEZUTDo6ZmFpbChzdGF0ZSk7Ci0gICAgICAgICAgICByZXR1
cm4gRlRMUGF0aDsKLSAgICAgICAgfQotI2VuZGlmCi0KICAgICAgICAgRlRMOjpsaW5rKHN0YXRl
KTsKICAgICAgICAgCiAgICAgICAgIGlmIChzdGF0ZS5hbGxvY2F0aW9uRmFpbGVkKSB7CkBAIC02
OTAsNyArNjY2LDcgQEAgSGFzaE1hcDxDU3RyaW5nLCBkb3VibGU+IFBsYW46OmNvbXBpbGVUaQog
ICAgICAgICByZXN1bHQuYWRkKCJERkcgQ29tcGlsZSBUaW1lIiwgdG90YWxERkdDb21waWxlVGlt
ZSk7CiAgICAgICAgIHJlc3VsdC5hZGQoIkZUTCBDb21waWxlIFRpbWUiLCB0b3RhbEZUTENvbXBp
bGVUaW1lKTsKICAgICAgICAgcmVzdWx0LmFkZCgiRlRMIChERkcpIENvbXBpbGUgVGltZSIsIHRv
dGFsRlRMREZHQ29tcGlsZVRpbWUpOwotICAgICAgICByZXN1bHQuYWRkKCJGVEwgKExMVk0pIENv
bXBpbGUgVGltZSIsIHRvdGFsRlRMTExWTUNvbXBpbGVUaW1lKTsKKyAgICAgICAgcmVzdWx0LmFk
ZCgiRlRMIChCMykgQ29tcGlsZSBUaW1lIiwgdG90YWxGVExMTFZNQ29tcGlsZVRpbWUpOwogICAg
IH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rp
c2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9u
IDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNNjREaXNh
c3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi1ib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVh
bSYgb3V0LCBJbnN0cnVjdGlvblN1YnNldEhpbnQpCitib29sIHRyeVRvRGlzYXNzZW1ibGUoY29u
c3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hh
ciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQogewogICAgIEE2NERPcGNvZGUgYXJtNjRPcGNv
ZGU7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNdjdEaXNh
c3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3Nl
bWJsZXIvQVJNdjdEaXNhc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTXY3RGlzYXNzZW1ibGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotYm9vbCB0cnlU
b0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgY29kZVB0ciwgc2l6ZV90
IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCwgSW5zdHJ1Y3Rpb25T
dWJzZXRIaW50KQorYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciYgY29kZVB0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJl
YW0mIG91dCkKIHsKICAgICBBUk12N0RPcGNvZGUgYXJtT3Bjb2RlOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIuY3BwCShy
ZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rp
c2Fzc2VtYmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDkgKzM3LDkgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLXZvaWQgZGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
JiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYg
b3V0LCBJbnN0cnVjdGlvblN1YnNldEhpbnQgc3Vic2V0SGludCkKK3ZvaWQgZGlzYXNzZW1ibGUo
Y29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3Qg
Y2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQogewotICAgIGlmICh0cnlUb0Rpc2Fzc2Vt
YmxlKGNvZGVQdHIsIHNpemUsIHByZWZpeCwgb3V0LCBzdWJzZXRIaW50KSkKKyAgICBpZiAodHJ5
VG9EaXNhc3NlbWJsZShjb2RlUHRyLCBzaXplLCBwcmVmaXgsIG91dCkpCiAgICAgICAgIHJldHVy
bjsKICAgICAKICAgICBvdXQucHJpbnRmKCIlc2Rpc2Fzc2VtYmx5IG5vdCBhdmFpbGFibGUgZm9y
IHJhbmdlICVwLi4uJXBcbiIsIHByZWZpeCwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBz
dGF0aWNfY2FzdDxjaGFyKj4oY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKSArIHNpemUpOwpA
QCAtNjcsNyArNjcsNiBAQCBwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVS
ZWY7CiAgICAgc2l6ZV90IHNpemUgeyAwIH07CiAgICAgY29uc3QgY2hhciogcHJlZml4IHsgbnVs
bHB0ciB9OwotICAgIEluc3RydWN0aW9uU3Vic2V0SGludCBzdWJzZXRIaW50IHsgTWFjcm9Bc3Nl
bWJsZXJTdWJzZXQgfTsKIH07CiAKIGNsYXNzIEFzeW5jaHJvbm91c0Rpc2Fzc2VtYmxlciB7CkBA
IC0xMDcsOSArMTA2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
ZGF0YUxvZyh0YXNrLT5oZWFkZXIpOwotICAgICAgICAgICAgZGlzYXNzZW1ibGUoCi0gICAgICAg
ICAgICAgICAgdGFzay0+Y29kZVJlZi5jb2RlKCksIHRhc2stPnNpemUsIHRhc2stPnByZWZpeCwg
V1RGOjpkYXRhRmlsZSgpLAotICAgICAgICAgICAgICAgIHRhc2stPnN1YnNldEhpbnQpOworICAg
ICAgICAgICAgZGlzYXNzZW1ibGUodGFzay0+Y29kZVJlZi5jb2RlKCksIHRhc2stPnNpemUsIHRh
c2stPnByZWZpeCwgV1RGOjpkYXRhRmlsZSgpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAg
LTEzMSwxNSArMTI4LDEzIEBAIEFzeW5jaHJvbm91c0Rpc2Fzc2VtYmxlciYgYXN5bmNocm9ub3Vz
RGkKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCiB2b2lkIGRpc2Fzc2VtYmxlQXN5bmNocm9u
b3VzbHkoCi0gICAgY29uc3QgQ1N0cmluZyYgaGVhZGVyLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYmIGNvZGVSZWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsCi0gICAgSW5z
dHJ1Y3Rpb25TdWJzZXRIaW50IHN1YnNldEhpbnQpCisgICAgY29uc3QgQ1N0cmluZyYgaGVhZGVy
LCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGVSZWYsIHNpemVfdCBzaXplLCBjb25z
dCBjaGFyKiBwcmVmaXgpCiB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPERpc2Fzc2VtYmx5VGFzaz4g
dGFzayA9IHN0ZDo6bWFrZV91bmlxdWU8RGlzYXNzZW1ibHlUYXNrPigpOwogICAgIHRhc2stPmhl
YWRlciA9IHN0cmR1cChoZWFkZXIuZGF0YSgpKTsgLy8gWXVjayEgV2UgbmVlZCB0aGlzIGJlY2F1
c2UgQ1N0cmluZyBkb2VzIHJhY3kgcmVmY291bnRpbmcuCiAgICAgdGFzay0+Y29kZVJlZiA9IGNv
ZGVSZWY7CiAgICAgdGFzay0+c2l6ZSA9IHNpemU7CiAgICAgdGFzay0+cHJlZml4ID0gcHJlZml4
OwotICAgIHRhc2stPnN1YnNldEhpbnQgPSBzdWJzZXRIaW50OwogICAgIAogICAgIGFzeW5jaHJv
bm91c0Rpc2Fzc2VtYmxlcigpLmVucXVldWUoV1RGTW92ZSh0YXNrKSk7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmgJKHJl
dmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlz
YXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEyICszNiwxMCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjsKIGNsYXNzIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjsKIAotZW51bSBJbnN0cnVjdGlvblN1YnNldEhpbnQgeyBNYWNyb0Fzc2VtYmxlclN1
YnNldCwgTExWTVN1YnNldCB9OwotCiAjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKLWJvb2wgdHJ5
VG9EaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImLCBzaXplX3QsIGNvbnN0
IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mLCBJbnN0cnVjdGlvblN1YnNldEhpbnQgPSBNYWNy
b0Fzc2VtYmxlclN1YnNldCk7Citib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyJiwgc2l6ZV90LCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJik7
CiAjZWxzZQotaW5saW5lIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHImLCBzaXplX3QsIGNvbnN0IGNoYXIqLCBQcmludFN0cmVhbSYsIEluc3RydWN0aW9u
U3Vic2V0SGludCA9IE1hY3JvQXNzZW1ibGVyU3Vic2V0KQoraW5saW5lIGJvb2wgdHJ5VG9EaXNh
c3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImLCBzaXplX3QsIGNvbnN0IGNoYXIq
LCBQcmludFN0cmVhbSYpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNDksMTMgKzQ3LDEy
IEBAIGlubGluZSBib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm8KIAogLy8gUHJpbnRz
IGVpdGhlciB0aGUgZGlzYXNzZW1ibHksIG9yIGEgbGluZSBvZiB0ZXh0IGluZGljYXRpbmcgdGhh
dCBkaXNhc3NlbWJseSBmYWlsZWQgYW5kCiAvLyB0aGUgcmFuZ2Ugb2YgbWFjaGluZSBjb2RlIGFk
ZHJlc3Nlcy4KLXZvaWQgZGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiwg
c2l6ZV90LCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQsIEluc3RydWN0aW9u
U3Vic2V0SGludCA9IE1hY3JvQXNzZW1ibGVyU3Vic2V0KTsKK3ZvaWQgZGlzYXNzZW1ibGUoY29u
c3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiwgc2l6ZV90LCBjb25zdCBjaGFyKiBwcmVmaXgsIFBy
aW50U3RyZWFtJiBvdXQpOwogCiAvLyBBc3luY2hyb25vdXMgZGlzYXNzZW1ibHkuIFRoaXMgaGFw
cGVucyBvbiBhbm90aGVyIHRocmVhZCwgYW5kIGNhbGxzIHRoZSBwcm92aWRlZAogLy8gY2FsbGJh
Y2sgd2hlbiB0aGUgZGlzYXNzZW1ibHkgaXMgZG9uZS4KIHZvaWQgZGlzYXNzZW1ibGVBc3luY2hy
b25vdXNseSgKLSAgICBjb25zdCBDU3RyaW5nJiBoZWFkZXIsIGNvbnN0IE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiYsIHNpemVfdCwgY29uc3QgY2hhciogcHJlZml4LAotICAgIEluc3RydWN0aW9uU3Vi
c2V0SGludCA9IE1hY3JvQXNzZW1ibGVyU3Vic2V0KTsKKyAgICBjb25zdCBDU3RyaW5nJiBoZWFk
ZXIsIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIHNpemVfdCwgY29uc3QgY2hhciogcHJl
Zml4KTsKIAogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3YWl0Rm9yQXN5bmNocm9ub3VzRGlzYXNz
ZW1ibHkoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9MTFZN
RGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlz
YXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMTFZNRGlz
YXNzZW1ibGVyLmgiCi0KLSNpZiBVU0UoTExWTV9ESVNBU1NFTUJMRVIpCi0KLSNpbmNsdWRlICJJ
bml0aWFsaXplTExWTS5oIgotI2luY2x1ZGUgIkxMVk1BUEkuaCIKLSNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlckNvZGVSZWYuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXN0YXRpYyBjb25zdCB1bnNp
Z25lZCBzeW1ib2xTdHJpbmdTaXplID0gNDA7Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpzeW1ib2xM
b29rdXBDYWxsYmFjaygKLSAgICB2b2lkKiBvcGFxdWUsIHVpbnQ2NF90IHJlZmVyZW5jZVZhbHVl
LCB1aW50NjRfdCogcmVmZXJlbmNlVHlwZSwgdWludDY0X3QgcmVmZXJlbmNlUEMsCi0gICAgY29u
c3QgY2hhcioqIHJlZmVyZW5jZU5hbWUpCi17Ci0gICAgLy8gU2V0IHRoaXMgaWYgeW91IHdhbnQg
dG8gZGVidWcgYW4gdW5leHBlY3RlZCByZWZlcmVuY2UgdHlwZS4gQ3VycmVudGx5IHdlIG9ubHkg
ZW5jb3VudGVyIHRoZXNlCi0gICAgLy8gaWYgd2UgdHJ5IHRvIGRpc2Fzc2VtYmxlIGdhcmJhZ2Us
IHNpbmNlIG91ciBjb2RlIGdlbmVyYXRvciBuZXZlciB1c2VzIHRoZW0uIFRoZXNlIGluY2x1ZGUg
dGhpbmdzCi0gICAgLy8gbGlrZSBQQy1yZWxhdGl2ZSByZWZlcmVuY2VzLgotICAgIHN0YXRpYyBj
b25zdCBib29sIGNyYXNoT25VbmV4cGVjdGVkID0gZmFsc2U7Ci0gICAgCi0gICAgY2hhciogc3lt
Ym9sU3RyaW5nID0gc3RhdGljX2Nhc3Q8Y2hhcio+KG9wYXF1ZSk7Ci0gICAgCi0gICAgc3dpdGNo
ICgqcmVmZXJlbmNlVHlwZSkgewotICAgIGNhc2UgTExWTURpc2Fzc2VtYmxlcl9SZWZlcmVuY2VU
eXBlX0luT3V0X05vbmU6Ci0gICAgICAgIHJldHVybiAwOwotICAgIGNhc2UgTExWTURpc2Fzc2Vt
Ymxlcl9SZWZlcmVuY2VUeXBlX0luX0JyYW5jaDoKLSAgICAgICAgKnJlZmVyZW5jZU5hbWUgPSAw
OwotICAgICAgICAqcmVmZXJlbmNlVHlwZSA9IExMVk1EaXNhc3NlbWJsZXJfUmVmZXJlbmNlVHlw
ZV9Jbk91dF9Ob25lOwotICAgICAgICBzbnByaW50ZigKLSAgICAgICAgICAgIHN5bWJvbFN0cmlu
Zywgc3ltYm9sU3RyaW5nU2l6ZSwgIjB4JWx4IiwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGxvbmc+KHJlZmVyZW5jZVZhbHVlKSk7Ci0gICAgICAgIHJldHVybiBzeW1ib2xTdHJp
bmc7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKGNyYXNoT25VbmV4cGVjdGVkKSB7Ci0gICAg
ICAgICAgICBkYXRhTG9nKCJyZWZlcmVuY2VWYWx1ZSA9ICIsIHJlZmVyZW5jZVZhbHVlLCAiXG4i
KTsKLSAgICAgICAgICAgIGRhdGFMb2coInJlZmVyZW5jZVR5cGUgPSAiLCBSYXdQb2ludGVyKHJl
ZmVyZW5jZVR5cGUpLCAiLCAqcmVmZXJlbmNlVHlwZSA9ICIsICpyZWZlcmVuY2VUeXBlLCAiXG4i
KTsKLSAgICAgICAgICAgIGRhdGFMb2coInJlZmVyZW5jZVBDID0gIiwgcmVmZXJlbmNlUEMsICJc
biIpOwotICAgICAgICAgICAgZGF0YUxvZygicmVmZXJlbmNlTmFtZSA9ICIsIFJhd1BvaW50ZXIo
cmVmZXJlbmNlTmFtZSksICJcbiIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAqcmVm
ZXJlbmNlTmFtZSA9ICJ1bmltcGxlbWVudGVkIHJlZmVyZW5jZSB0eXBlISI7Ci0gICAgICAgICpy
ZWZlcmVuY2VUeXBlID0gTExWTURpc2Fzc2VtYmxlcl9SZWZlcmVuY2VUeXBlX0luT3V0X05vbmU7
Ci0gICAgICAgIHNucHJpbnRmKAotICAgICAgICAgICAgc3ltYm9sU3RyaW5nLCBzeW1ib2xTdHJp
bmdTaXplLCAidW5pbXBsZW1lbnRlZDoweCVseCIsCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBsb25nPihyZWZlcmVuY2VWYWx1ZSkpOwotICAgICAgICByZXR1cm4gc3ltYm9sU3Ry
aW5nOwotICAgIH0KLX0KLQotYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlV2l0aExMVk0oCi0gICAgY29u
c3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hh
ciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0LAotICAgIEluc3RydWN0aW9uU3Vic2V0SGludCkK
LXsKLSAgICBpbml0aWFsaXplTExWTSgpOwotICAgIAotICAgIGNvbnN0IGNoYXIqIHRyaXBsZTsK
LSNpZiBDUFUoWDg2XzY0KQotICAgIHRyaXBsZSA9ICJ4ODZfNjQtYXBwbGUtZGFyd2luIjsKLSNl
bGlmIENQVShYODYpCi0gICAgdHJpcGxlID0gIng4Ni1hcHBsZS1kYXJ3aW4iOwotI2VsaWYgQ1BV
KEFSTTY0KQotICAgIHRyaXBsZSA9ICJhcm02NC1hcHBsZS1kYXJ3aW4iOwotI2Vsc2UKLSNlcnJv
ciAiTExWTSBkaXNhc3NlbWJsZXIgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBDUFUu
IgotI2VuZGlmCi0KLSAgICBjaGFyIHN5bWJvbFN0cmluZ1tzeW1ib2xTdHJpbmdTaXplXTsKLSAg
ICAKLSAgICBMTFZNRGlzYXNtQ29udGV4dFJlZiBkaXNhc3NlbWJseUNvbnRleHQgPQotICAgICAg
ICBsbHZtLT5DcmVhdGVEaXNhc20odHJpcGxlLCBzeW1ib2xTdHJpbmcsIDAsIDAsIHN5bWJvbExv
b2t1cENhbGxiYWNrKTsKLSAgICBSRUxFQVNFX0FTU0VSVChkaXNhc3NlbWJseUNvbnRleHQpOwot
ICAgIAotICAgIGNoYXIgcGNTdHJpbmdbMjBdOwotICAgIGNoYXIgaW5zdHJ1Y3Rpb25TdHJpbmdb
MTAwMF07Ci0gICAgCi0gICAgdWludDhfdCogcGMgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oY29k
ZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICB1aW50OF90KiBlbmQgPSBwYyArIHNpemU7
Ci0gICAgCi0gICAgd2hpbGUgKHBjIDwgZW5kKSB7Ci0gICAgICAgIHNucHJpbnRmKAotICAgICAg
ICAgICAgcGNTdHJpbmcsIHNpemVvZihwY1N0cmluZyksICIweCVseCIsCi0gICAgICAgICAgICBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihwYykpKTsK
LQotICAgICAgICBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplID0gbGx2bS0+RGlzYXNtSW5zdHJ1Y3Rp
b24oCi0gICAgICAgICAgICBkaXNhc3NlbWJseUNvbnRleHQsIHBjLCBlbmQgLSBwYywgYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4ocGMpLAotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25TdHJpbmcsIHNp
emVvZihpbnN0cnVjdGlvblN0cmluZykpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFpbnN0cnVj
dGlvblNpemUpCi0gICAgICAgICAgICBzbnByaW50ZihpbnN0cnVjdGlvblN0cmluZywgc2l6ZW9m
KGluc3RydWN0aW9uU3RyaW5nKSwgIi5ieXRlIDB4JTAyeCIsICpwYysrKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgcGMgKz0gaW5zdHJ1Y3Rpb25TaXplOwotICAgICAgICAKLSAgICAgICAg
b3V0LnByaW50ZigiJXMlMTZzOiAlc1xuIiwgcHJlZml4LCBwY1N0cmluZywgaW5zdHJ1Y3Rpb25T
dHJpbmcpOwotICAgIH0KLSAgICAKLSAgICBsbHZtLT5EaXNhc21EaXNwb3NlKGRpc2Fzc2VtYmx5
Q29udGV4dCk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpT
QwotCi0jZW5kaWYgLy8gVVNFKExMVk1fRElTQVNTRU1CTEVSKQotCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuaAko
cmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9M
TFZNRGlzYXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIExMVk1EaXNh
c3NlbWJsZXJfaAotI2RlZmluZSBMTFZNRGlzYXNzZW1ibGVyX2gKLQotI2luY2x1ZGUgIkRpc2Fz
c2VtYmxlci5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotI2lmIFVTRShMTFZNX0RJU0FTU0VNQkxF
UikKLQotYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlV2l0aExMVk0oY29uc3QgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0
cmVhbSYgb3V0LCBJbnN0cnVjdGlvblN1YnNldEhpbnQpOwotCi0jZWxzZSAvLyBVU0UoTExWTV9E
SVNBU1NFTUJMRVIpCi0KLWlubGluZSBib29sIHRyeVRvRGlzYXNzZW1ibGVXaXRoTExWTShjb25z
dCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImLCBzaXplX3QsIGNvbnN0IGNoYXIqLCBQcmludFN0cmVh
bSYsIEluc3RydWN0aW9uU3Vic2V0SGludCkgeyByZXR1cm4gZmFsc2U7IH0KLQotI2VuZGlmIC8v
IFVTRShMTFZNX0RJU0FTU0VNQkxFUikKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAv
LyBMTFZNRGlzYXNzZW1ibGVyX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fz
c2VtYmxlci9VRGlzODZEaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvVURpczg2RGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24g
MTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9VRGlzODZEaXNh
c3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMyw3IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCi1ib29sIHRyeVRvRGlzYXNzZW1ibGVXaXRoVURpczg2KGNvbnN0
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgY29kZVB0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIq
IHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCwgSW5zdHJ1Y3Rpb25TdWJzZXRIaW50KQorYm9vbCB0
cnlUb0Rpc2Fzc2VtYmxlV2l0aFVEaXM4Nihjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGNv
ZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQp
CiB7CiAgICAgdWRfdCBkaXNhc3NlbWJsZXI7CiAgICAgdWRfaW5pdCgmZGlzYXNzZW1ibGVyKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvVURpczg2RGlzYXNzZW1i
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9V
RGlzODZEaXNhc3NlbWJsZXIuaAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Rpc2Fzc2VtYmxlci9VRGlzODZEaXNhc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsMTEgKzMyLDExIEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKFVESVM4NikKIAot
Ym9vbCB0cnlUb0Rpc2Fzc2VtYmxlV2l0aFVEaXM4Nihjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHImIGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFt
JiBvdXQsIEluc3RydWN0aW9uU3Vic2V0SGludCk7Citib29sIHRyeVRvRGlzYXNzZW1ibGVXaXRo
VURpczg2KGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgY29kZVB0ciwgc2l6ZV90IHNpemUs
IGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCk7CiAKICNlbHNlIC8vIFVTRShV
RElTODYpCiAKLWlubGluZSBib29sIHRyeVRvRGlzYXNzZW1ibGVXaXRoVURpczg2KGNvbnN0IE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciYsIHNpemVfdCwgY29uc3QgY2hhciosIFByaW50U3RyZWFtJiwg
SW5zdHJ1Y3Rpb25TdWJzZXRIaW50KSB7IHJldHVybiBmYWxzZTsgfQoraW5saW5lIGJvb2wgdHJ5
VG9EaXNhc3NlbWJsZVdpdGhVRGlzODYoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiwgc2l6
ZV90LCBjb25zdCBjaGFyKiwgUHJpbnRTdHJlYW0mKSB7IHJldHVybiBmYWxzZTsgfQogCiAjZW5k
aWYgLy8gVVNFKFVESVM4NikKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2Vt
Ymxlci9YODZEaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMTk2Njg1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9YODZEaXNhc3NlbWJsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlVEaXM4NkRpc2Fz
c2VtYmxlci5oIgotI2luY2x1ZGUgIkxMVk1EaXNhc3NlbWJsZXIuaCIKIAogbmFtZXNwYWNlIEpT
QyB7CiAKQEAgLTQzLDI5ICs0Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogLy8gd2hldGhlciBoZSdz
IHVzaW5nIHRoZSBzdWJzZXQgb2YgdGhlIGFyY2hpdGVjdHVyZSB0aGF0IG91ciBNYWNyb0Fzc2Vt
YmxlcgogLy8gc3VwcG9ydHMgKGluIHdoaWNoIGNhc2Ugd2UgZ28gd2l0aCBVRGlzODYpIG9yIGlm
IGhlJ3MgdXNpbmcgdGhlIExMVk0gc3Vic2V0LgogCi1ib29sIHRyeVRvRGlzYXNzZW1ibGUoY29u
c3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hh
ciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0LCBJbnN0cnVjdGlvblN1YnNldEhpbnQgc3Vic2V0
SGludCkKK2Jvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIm
IGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBv
dXQpCiB7Ci0gICAgaWYgKE9wdGlvbnM6OmZvcmNlVURpczg2RGlzYXNzZW1ibGVyKCkpCi0gICAg
ICAgIHJldHVybiB0cnlUb0Rpc2Fzc2VtYmxlV2l0aFVEaXM4Nihjb2RlUHRyLCBzaXplLCBwcmVm
aXgsIG91dCwgc3Vic2V0SGludCk7Ci0KLSAgICBpZiAoT3B0aW9uczo6Zm9yY2VMTFZNRGlzYXNz
ZW1ibGVyKCkpCi0gICAgICAgIHJldHVybiB0cnlUb0Rpc2Fzc2VtYmxlV2l0aExMVk0oY29kZVB0
ciwgc2l6ZSwgcHJlZml4LCBvdXQsIHN1YnNldEhpbnQpOwotICAgIAotICAgIGlmIChzdWJzZXRI
aW50ID09IE1hY3JvQXNzZW1ibGVyU3Vic2V0Ci0gICAgICAgICYmIHRyeVRvRGlzYXNzZW1ibGVX
aXRoVURpczg2KGNvZGVQdHIsIHNpemUsIHByZWZpeCwgb3V0LCBNYWNyb0Fzc2VtYmxlclN1YnNl
dCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKHN1YnNldEhpbnQgPT0gTExWTVN1
YnNldAotICAgICAgICAmJiB0cnlUb0Rpc2Fzc2VtYmxlV2l0aExMVk0oY29kZVB0ciwgc2l6ZSwg
cHJlZml4LCBvdXQsIExMVk1TdWJzZXQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAg
ICBpZiAodHJ5VG9EaXNhc3NlbWJsZVdpdGhVRGlzODYoY29kZVB0ciwgc2l6ZSwgcHJlZml4LCBv
dXQsIHN1YnNldEhpbnQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodHJ5VG9EaXNh
c3NlbWJsZVdpdGhMTFZNKGNvZGVQdHIsIHNpemUsIHByZWZpeCwgb3V0LCBzdWJzZXRIaW50KSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRyeVRvRGlzYXNzZW1ibGVXaXRo
VURpczg2KGNvZGVQdHIsIHNpemUsIHByZWZpeCwgb3V0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGVkVHlwZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGVk
VHlwZXMuaAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExBYmJyZXZpYXRlZFR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKICNp
ZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgotI2luY2x1ZGUgIkxM
Vk1IZWFkZXJzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogY2xhc3MgQmFz
aWNCbG9jazsKQEAgLTM5LDM4ICszOCwxMCBAQCBlbnVtIFR5cGUgOiBpbnQ4X3Q7CiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAotI2lmIEZUTF9VU0VTX0IzCiB0eXBlZGVmIEIz
OjpCYXNpY0Jsb2NrKiBMQmFzaWNCbG9jazsKIHR5cGVkZWYgQjM6OlR5cGUgTFR5cGU7CiB0eXBl
ZGVmIEIzOjpWYWx1ZSogTFZhbHVlOwogCi10eXBlZGVmIHZvaWQqIExBdG9taWNPcmRlcmluZzsK
LXR5cGVkZWYgdm9pZCogTEJ1aWxkZXI7Ci10eXBlZGVmIHZvaWQqIExDYWxsQ29udjsKLXR5cGVk
ZWYgdm9pZCogTENvbnRleHQ7Ci10eXBlZGVmIHZvaWQqIExJbnRQcmVkaWNhdGU7Ci10eXBlZGVm
IHZvaWQqIExMaW5rYWdlOwotdHlwZWRlZiB2b2lkKiBMTW9kdWxlOwotdHlwZWRlZiB2b2lkKiBM
UmVhbFByZWRpY2F0ZTsKLXR5cGVkZWYgdm9pZCogTE1lbW9yeUJ1ZmZlcjsKLSNlbHNlCi10eXBl
ZGVmIExMVk1CYXNpY0Jsb2NrUmVmIExCYXNpY0Jsb2NrOwotdHlwZWRlZiBMTFZNVHlwZVJlZiBM
VHlwZTsKLXR5cGVkZWYgTExWTVZhbHVlUmVmIExWYWx1ZTsKLQotdHlwZWRlZiBMTFZNQXRvbWlj
T3JkZXJpbmcgTEF0b21pY09yZGVyaW5nOwotdHlwZWRlZiBMTFZNQnVpbGRlclJlZiBMQnVpbGRl
cjsKLXR5cGVkZWYgTExWTUNhbGxDb252IExDYWxsQ29udjsKLXR5cGVkZWYgTExWTUNvbnRleHRS
ZWYgTENvbnRleHQ7Ci10eXBlZGVmIExMVk1JbnRQcmVkaWNhdGUgTEludFByZWRpY2F0ZTsKLXR5
cGVkZWYgTExWTUxpbmthZ2UgTExpbmthZ2U7Ci10eXBlZGVmIExMVk1Nb2R1bGVSZWYgTE1vZHVs
ZTsKLXR5cGVkZWYgTExWTVJlYWxQcmVkaWNhdGUgTFJlYWxQcmVkaWNhdGU7Ci10eXBlZGVmIExM
Vk1NZW1vcnlCdWZmZXJSZWYgTE1lbW9yeUJ1ZmZlcjsKLSNlbmRpZgotCi1lbnVtIFN5bmNocm9u
aXphdGlvblNjb3BlIHsgU2luZ2xlVGhyZWFkLCBDcm9zc1RocmVhZCB9OwotCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCShyZXZpc2lvbiAxOTY2
ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSwzMTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEZUTEFiYnJldmlhdGlvbnNfaAotI2Rl
ZmluZSBGVExBYmJyZXZpYXRpb25zX2gKLQotI2lmIEVOQUJMRShGVExfSklUKQotCi0jaW5jbHVk
ZSAiRlRMQWJicmV2aWF0ZWRUeXBlcy5oIgotI2luY2x1ZGUgIkZUTFZhbHVlRnJvbUJsb2NrLmgi
Ci0jaW5jbHVkZSAiTExWTUFQSS5oIgotI2luY2x1ZGUgPGNzdHJpbmc+Ci0KLW5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKLQotI2lmICFGVExfVVNFU19CMwotCi0vLyBUaGlzIGZpbGUg
Y29udGFpbnMgc2hvcnQtZm9ybSBjYWxscyBpbnRvIHRoZSBMTFZNIEMgQVBJLiBJdCBpcyBtZWFu
dCB0bwotLy8gc2F2ZSB0eXBpbmcgYW5kIG1ha2UgdGhlIGxvd2VyaW5nIGNvZGUgY2xlYXJlci4g
SWYgd2UgZXZlciBjYWxsIGFuIExMVk0gQyBBUEkKLS8vIGZ1bmN0aW9uIG1vcmUgdGhhbiBvbmNl
IGluIHRoZSBGVEwgbG93ZXJpbmcgY29kZSwgd2Ugc2hvdWxkIGFkZCBhIHNob3J0Y3V0IGZvcgot
Ly8gaXQgaGVyZS4KLQotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0jZXJyb3IgIlRoZSBGVEwgYmFj
a2VuZCBhc3N1bWVzIHRoYXQgcG9pbnRlcnMgYXJlIDY0LWJpdC4iCi0jZW5kaWYKLQotc3RhdGlj
IGlubGluZSBMVHlwZSB2b2lkVHlwZShMQ29udGV4dCBjb250ZXh0KSB7IHJldHVybiBsbHZtLT5W
b2lkVHlwZUluQ29udGV4dChjb250ZXh0KTsgfQotc3RhdGljIGlubGluZSBMVHlwZSBpbnQxVHlw
ZShMQ29udGV4dCBjb250ZXh0KSB7IHJldHVybiBsbHZtLT5JbnQxVHlwZUluQ29udGV4dChjb250
ZXh0KTsgfQotc3RhdGljIGlubGluZSBMVHlwZSBpbnQ4VHlwZShMQ29udGV4dCBjb250ZXh0KSB7
IHJldHVybiBsbHZtLT5JbnQ4VHlwZUluQ29udGV4dChjb250ZXh0KTsgfQotc3RhdGljIGlubGlu
ZSBMVHlwZSBpbnQxNlR5cGUoTENvbnRleHQgY29udGV4dCkgeyByZXR1cm4gbGx2bS0+SW50MTZU
eXBlSW5Db250ZXh0KGNvbnRleHQpOyB9Ci1zdGF0aWMgaW5saW5lIExUeXBlIGludDMyVHlwZShM
Q29udGV4dCBjb250ZXh0KSB7IHJldHVybiBsbHZtLT5JbnQzMlR5cGVJbkNvbnRleHQoY29udGV4
dCk7IH0KLXN0YXRpYyBpbmxpbmUgTFR5cGUgaW50NjRUeXBlKExDb250ZXh0IGNvbnRleHQpIHsg
cmV0dXJuIGxsdm0tPkludDY0VHlwZUluQ29udGV4dChjb250ZXh0KTsgfQotc3RhdGljIGlubGlu
ZSBMVHlwZSBpbnRQdHJUeXBlKExDb250ZXh0IGNvbnRleHQpIHsgcmV0dXJuIGxsdm0tPkludDY0
VHlwZUluQ29udGV4dChjb250ZXh0KTsgfQotc3RhdGljIGlubGluZSBMVHlwZSBmbG9hdFR5cGUo
TENvbnRleHQgY29udGV4dCkgeyByZXR1cm4gbGx2bS0+RmxvYXRUeXBlSW5Db250ZXh0KGNvbnRl
eHQpOyB9Ci1zdGF0aWMgaW5saW5lIExUeXBlIGRvdWJsZVR5cGUoTENvbnRleHQgY29udGV4dCkg
eyByZXR1cm4gbGx2bS0+RG91YmxlVHlwZUluQ29udGV4dChjb250ZXh0KTsgfQotCi1zdGF0aWMg
aW5saW5lIExUeXBlIHBvaW50ZXJUeXBlKExUeXBlIHR5cGUpIHsgcmV0dXJuIGxsdm0tPlBvaW50
ZXJUeXBlKHR5cGUsIDApOyB9Ci1zdGF0aWMgaW5saW5lIExUeXBlIGFycmF5VHlwZShMVHlwZSB0
eXBlLCB1bnNpZ25lZCBjb3VudCkgeyByZXR1cm4gbGx2bS0+QXJyYXlUeXBlKHR5cGUsIGNvdW50
KTsgfQotc3RhdGljIGlubGluZSBMVHlwZSB2ZWN0b3JUeXBlKExUeXBlIHR5cGUsIHVuc2lnbmVk
IGNvdW50KSB7IHJldHVybiBsbHZtLT5WZWN0b3JUeXBlKHR5cGUsIGNvdW50KTsgfQotCi1lbnVt
IFBhY2tpbmdNb2RlIHsgTm90UGFja2VkLCBQYWNrZWQgfTsKLXN0YXRpYyBpbmxpbmUgTFR5cGUg
c3RydWN0VHlwZShMQ29udGV4dCBjb250ZXh0LCBMVHlwZSogZWxlbWVudFR5cGVzLCB1bnNpZ25l
ZCBlbGVtZW50Q291bnQsIFBhY2tpbmdNb2RlIHBhY2tpbmcgPSBOb3RQYWNrZWQpCi17Ci0gICAg
cmV0dXJuIGxsdm0tPlN0cnVjdFR5cGVJbkNvbnRleHQoY29udGV4dCwgZWxlbWVudFR5cGVzLCBl
bGVtZW50Q291bnQsIHBhY2tpbmcgPT0gUGFja2VkKTsKLX0KLXN0YXRpYyBpbmxpbmUgTFR5cGUg
c3RydWN0VHlwZShMQ29udGV4dCBjb250ZXh0LCBQYWNraW5nTW9kZSBwYWNraW5nID0gTm90UGFj
a2VkKQotewotICAgIHJldHVybiBzdHJ1Y3RUeXBlKGNvbnRleHQsIDAsIDAsIHBhY2tpbmcpOwot
fQotc3RhdGljIGlubGluZSBMVHlwZSBzdHJ1Y3RUeXBlKExDb250ZXh0IGNvbnRleHQsIExUeXBl
IGVsZW1lbnQxLCBQYWNraW5nTW9kZSBwYWNraW5nID0gTm90UGFja2VkKQotewotICAgIHJldHVy
biBzdHJ1Y3RUeXBlKGNvbnRleHQsICZlbGVtZW50MSwgMSwgcGFja2luZyk7Ci19Ci1zdGF0aWMg
aW5saW5lIExUeXBlIHN0cnVjdFR5cGUoTENvbnRleHQgY29udGV4dCwgTFR5cGUgZWxlbWVudDEs
IExUeXBlIGVsZW1lbnQyLCBQYWNraW5nTW9kZSBwYWNraW5nID0gTm90UGFja2VkKQotewotICAg
IExUeXBlIGVsZW1lbnRzW10gPSB7IGVsZW1lbnQxLCBlbGVtZW50MiB9OwotICAgIHJldHVybiBz
dHJ1Y3RUeXBlKGNvbnRleHQsIGVsZW1lbnRzLCAyLCBwYWNraW5nKTsKLX0KLQotLy8gRklYTUU6
IE1ha2UgdGhlIFZhcmlhZGljaXR5IGFyZ3VtZW50IG5vdCBiZSB0aGUgbGFzdCBhcmd1bWVudCB0
byBmdW5jdGlvblR5cGUoKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24KLS8vIGNhbiB1c2UgQysrMTEg
dmFyaWFkaWMgdGVtcGxhdGVzCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQxNTc1Ci1lbnVtIFZhcmlhZGljaXR5IHsgTm90VmFyaWFkaWMsIFZhcmlhZGljIH07
Ci1zdGF0aWMgaW5saW5lIExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByZXR1cm5UeXBlLCBjb25z
dCBMVHlwZSogcGFyYW1UeXBlcywgdW5zaWduZWQgcGFyYW1Db3VudCwgVmFyaWFkaWNpdHkgdmFy
aWFkaWNpdHkpCi17Ci0gICAgcmV0dXJuIGxsdm0tPkZ1bmN0aW9uVHlwZShyZXR1cm5UeXBlLCBj
b25zdF9jYXN0PExUeXBlKj4ocGFyYW1UeXBlcyksIHBhcmFtQ291bnQsIHZhcmlhZGljaXR5ID09
IFZhcmlhZGljKTsKLX0KLXRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGU+Ci1pbmxpbmUgTFR5
cGUgZnVuY3Rpb25UeXBlKExUeXBlIHJldHVyblR5cGUsIGNvbnN0IFZlY3RvclR5cGUmIHZlY3Rv
ciwgVmFyaWFkaWNpdHkgdmFyaWFkaWNpdHkgPSBOb3RWYXJpYWRpYykKLXsKLSAgICByZXR1cm4g
ZnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHZlY3Rvci5iZWdpbigpLCB2ZWN0b3Iuc2l6ZSgpLCB2
YXJpYWRpY2l0eSk7Ci19Ci1zdGF0aWMgaW5saW5lIExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSBy
ZXR1cm5UeXBlLCBWYXJpYWRpY2l0eSB2YXJpYWRpY2l0eSA9IE5vdFZhcmlhZGljKQotewotICAg
IHJldHVybiBmdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgMCwgMCwgdmFyaWFkaWNpdHkpOwotfQot
c3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcmV0dXJuVHlwZSwgTFR5cGUg
cGFyYW0xLCBWYXJpYWRpY2l0eSB2YXJpYWRpY2l0eSA9IE5vdFZhcmlhZGljKQotewotICAgIHJl
dHVybiBmdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgJnBhcmFtMSwgMSwgdmFyaWFkaWNpdHkpOwot
fQotc3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcmV0dXJuVHlwZSwgTFR5
cGUgcGFyYW0xLCBMVHlwZSBwYXJhbTIsIFZhcmlhZGljaXR5IHZhcmlhZGljaXR5ID0gTm90VmFy
aWFkaWMpCi17Ci0gICAgTFR5cGUgcGFyYW1UeXBlc1tdID0geyBwYXJhbTEsIHBhcmFtMiB9Owot
ICAgIHJldHVybiBmdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgcGFyYW1UeXBlcywgMiwgdmFyaWFk
aWNpdHkpOwotfQotc3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcmV0dXJu
VHlwZSwgTFR5cGUgcGFyYW0xLCBMVHlwZSBwYXJhbTIsIExUeXBlIHBhcmFtMywgVmFyaWFkaWNp
dHkgdmFyaWFkaWNpdHkgPSBOb3RWYXJpYWRpYykKLXsKLSAgICBMVHlwZSBwYXJhbVR5cGVzW10g
PSB7IHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMgfTsKLSAgICByZXR1cm4gZnVuY3Rpb25UeXBlKHJl
dHVyblR5cGUsIHBhcmFtVHlwZXMsIDMsIHZhcmlhZGljaXR5KTsKLX0KLXN0YXRpYyBpbmxpbmUg
TFR5cGUgZnVuY3Rpb25UeXBlKExUeXBlIHJldHVyblR5cGUsIExUeXBlIHBhcmFtMSwgTFR5cGUg
cGFyYW0yLCBMVHlwZSBwYXJhbTMsIExUeXBlIHBhcmFtNCwgVmFyaWFkaWNpdHkgdmFyaWFkaWNp
dHkgPSBOb3RWYXJpYWRpYykKLXsKLSAgICBMVHlwZSBwYXJhbVR5cGVzW10gPSB7IHBhcmFtMSwg
cGFyYW0yLCBwYXJhbTMsIHBhcmFtNCB9OwotICAgIHJldHVybiBmdW5jdGlvblR5cGUocmV0dXJu
VHlwZSwgcGFyYW1UeXBlcywgNCwgdmFyaWFkaWNpdHkpOwotfQotc3RhdGljIGlubGluZSBMVHlw
ZSBmdW5jdGlvblR5cGUoTFR5cGUgcmV0dXJuVHlwZSwgTFR5cGUgcGFyYW0xLCBMVHlwZSBwYXJh
bTIsIExUeXBlIHBhcmFtMywgTFR5cGUgcGFyYW00LCBMVHlwZSBwYXJhbTUsIFZhcmlhZGljaXR5
IHZhcmlhZGljaXR5ID0gTm90VmFyaWFkaWMpCi17Ci0gICAgTFR5cGUgcGFyYW1UeXBlc1tdID0g
eyBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQsIHBhcmFtNSB9OwotICAgIHJldHVybiBm
dW5jdGlvblR5cGUocmV0dXJuVHlwZSwgcGFyYW1UeXBlcywgNSwgdmFyaWFkaWNpdHkpOwotfQot
c3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcmV0dXJuVHlwZSwgTFR5cGUg
cGFyYW0xLCBMVHlwZSBwYXJhbTIsIExUeXBlIHBhcmFtMywgTFR5cGUgcGFyYW00LCBMVHlwZSBw
YXJhbTUsIExUeXBlIHBhcmFtNiwgVmFyaWFkaWNpdHkgdmFyaWFkaWNpdHkgPSBOb3RWYXJpYWRp
YykKLXsKLSAgICBMVHlwZSBwYXJhbVR5cGVzW10gPSB7IHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMs
IHBhcmFtNCwgcGFyYW01LCBwYXJhbTYgfTsKLSAgICByZXR1cm4gZnVuY3Rpb25UeXBlKHJldHVy
blR5cGUsIHBhcmFtVHlwZXMsIDYsIHZhcmlhZGljaXR5KTsKLX0KLQotc3RhdGljIGlubGluZSB1
bnNpZ25lZCBtZEtpbmRJRChMQ29udGV4dCBjb250ZXh0LCBjb25zdCBjaGFyKiBzdHJpbmcpIHsg
cmV0dXJuIGxsdm0tPkdldE1ES2luZElESW5Db250ZXh0KGNvbnRleHQsIHN0cmluZywgc3RkOjpz
dHJsZW4oc3RyaW5nKSk7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kU3RyaW5nKExDb250ZXh0
IGNvbnRleHQsIGNvbnN0IGNoYXIqIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoKSB7IHJldHVybiBs
bHZtLT5NRFN0cmluZ0luQ29udGV4dChjb250ZXh0LCBzdHJpbmcsIGxlbmd0aCk7IH0KLXN0YXRp
YyBpbmxpbmUgTFZhbHVlIG1kU3RyaW5nKExDb250ZXh0IGNvbnRleHQsIGNvbnN0IGNoYXIqIHN0
cmluZykgeyByZXR1cm4gbWRTdHJpbmcoY29udGV4dCwgc3RyaW5nLCBzdGQ6OnN0cmxlbihzdHJp
bmcpKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQsIExW
YWx1ZSogYXJncywgdW5zaWduZWQgbnVtQXJncykgeyByZXR1cm4gbGx2bS0+TUROb2RlSW5Db250
ZXh0KGNvbnRleHQsIGFyZ3MsIG51bUFyZ3MpOyB9Ci10ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JU
eXBlPgotc3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQsIGNvbnN0
IFZlY3RvclR5cGUmIHZlY3RvcikgeyByZXR1cm4gbWROb2RlKGNvbnRleHQsIGNvbnN0X2Nhc3Q8
TFZhbHVlKj4odmVjdG9yLmJlZ2luKCkpLCB2ZWN0b3Iuc2l6ZSgpKTsgfQotc3RhdGljIGlubGlu
ZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQpIHsgcmV0dXJuIG1kTm9kZShjb250ZXh0
LCAwLCAwKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQs
IExWYWx1ZSBhcmcxKSB7IHJldHVybiBtZE5vZGUoY29udGV4dCwgJmFyZzEsIDEpOyB9Ci1zdGF0
aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRleHQgY29udGV4dCwgTFZhbHVlIGFyZzEsIExW
YWx1ZSBhcmcyKQotewotICAgIExWYWx1ZSBhcmdzW10gPSB7IGFyZzEsIGFyZzIgfTsKLSAgICBy
ZXR1cm4gbWROb2RlKGNvbnRleHQsIGFyZ3MsIDIpOwotfQotc3RhdGljIGlubGluZSBMVmFsdWUg
bWROb2RlKExDb250ZXh0IGNvbnRleHQsIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwgTFZhbHVl
IGFyZzMpCi17Ci0gICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiwgYXJnMyB9OwotICAg
IHJldHVybiBtZE5vZGUoY29udGV4dCwgYXJncywgMyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9p
ZCBzZXRNZXRhZGF0YShMVmFsdWUgaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGtpbmQsIExWYWx1ZSBt
ZXRhZGF0YSkgeyBsbHZtLT5TZXRNZXRhZGF0YShpbnN0cnVjdGlvbiwga2luZCwgbWV0YWRhdGEp
OyB9Ci0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGFkZEZ1bmN0aW9uKExNb2R1bGUgbW9kdWxlLCBj
b25zdCBjaGFyKiBuYW1lLCBMVHlwZSB0eXBlKSB7IHJldHVybiBsbHZtLT5BZGRGdW5jdGlvbiht
b2R1bGUsIG5hbWUsIHR5cGUpOyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBnZXRGaXJzdEZ1bmN0
aW9uKExNb2R1bGUgbW9kdWxlKSB7IHJldHVybiBsbHZtLT5HZXRGaXJzdEZ1bmN0aW9uKG1vZHVs
ZSk7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGdldE5leHRGdW5jdGlvbihMVmFsdWUgZnVuY3Rp
b24pIHsgcmV0dXJuIGxsdm0tPkdldE5leHRGdW5jdGlvbihmdW5jdGlvbik7IH0KLQotc3RhdGlj
IGlubGluZSB2b2lkIHNldEZ1bmN0aW9uQ2FsbGluZ0NvbnYoTFZhbHVlIGZ1bmN0aW9uLCBMQ2Fs
bENvbnYgY29udmVudGlvbikgeyBsbHZtLT5TZXRGdW5jdGlvbkNhbGxDb252KGZ1bmN0aW9uLCBj
b252ZW50aW9uKTsgfQotc3RhdGljIGlubGluZSB2b2lkIGFkZFRhcmdldERlcGVuZGVudEZ1bmN0
aW9uQXR0cihMVmFsdWUgZnVuY3Rpb24sIGNvbnN0IGNoYXIqIGtleSwgY29uc3QgY2hhciogdmFs
dWUpIHsgbGx2bS0+QWRkVGFyZ2V0RGVwZW5kZW50RnVuY3Rpb25BdHRyKGZ1bmN0aW9uLCBrZXks
IHZhbHVlKTsgfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0TGlua2FnZShMVmFsdWUgZ2xvYmFs
LCBMTFZNTGlua2FnZSBsaW5rYWdlKSB7IGxsdm0tPlNldExpbmthZ2UoZ2xvYmFsLCBsaW5rYWdl
KTsgfQotCi1zdGF0aWMgaW5saW5lIExWYWx1ZSBhZGRFeHRlcm5GdW5jdGlvbihMTW9kdWxlIG1v
ZHVsZSwgY29uc3QgY2hhciogbmFtZSwgTFR5cGUgdHlwZSkKLXsKLSAgICBMVmFsdWUgcmVzdWx0
ID0gYWRkRnVuY3Rpb24obW9kdWxlLCBuYW1lLCB0eXBlKTsKLSAgICBzZXRMaW5rYWdlKHJlc3Vs
dCwgTExWTUV4dGVybmFsTGlua2FnZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGlj
IGlubGluZSBMTW9kdWxlIG1vZHVsZUNyZWF0ZVdpdGhOYW1lSW5Db250ZXh0KGNvbnN0IGNoYXIq
IG1vZHVsZUlELCBMQ29udGV4dCBjb250ZXh0KXsgcmV0dXJuIGxsdm0tPk1vZHVsZUNyZWF0ZVdp
dGhOYW1lSW5Db250ZXh0KG1vZHVsZUlELCBjb250ZXh0KTsgfQotc3RhdGljIGlubGluZSB2b2lk
IGRpc3Bvc2VNb2R1bGUoTE1vZHVsZSBtKXsgbGx2bS0+RGlzcG9zZU1vZHVsZShtKTsgfQotCi1z
dGF0aWMgaW5saW5lIHZvaWQgZGlzcG9zZU1lc3NhZ2UoY2hhciogb3V0TXNnKSB7IGxsdm0tPkRp
c3Bvc2VNZXNzYWdlKG91dE1zZyk7IH0KLQotc3RhdGljIGlubGluZSBMVmFsdWUgZ2V0UGFyYW0o
TFZhbHVlIGZ1bmN0aW9uLCB1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbGx2bS0+R2V0UGFyYW0o
ZnVuY3Rpb24sIGluZGV4KTsgfQotCi1zdGF0aWMgaW5saW5lIExWYWx1ZSBnZXRVbmRlZihMVHlw
ZSB0eXBlKSB7IHJldHVybiBsbHZtLT5HZXRVbmRlZih0eXBlKTsgfQotCi1lbnVtIEJpdEV4dGVu
c2lvbiB7IFplcm9FeHRlbmQsIFNpZ25FeHRlbmQgfTsKLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGNv
bnN0SW50KExUeXBlIHR5cGUsIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZSwgQml0RXh0ZW5zaW9u
IGV4dGVuc2lvbiA9IFplcm9FeHRlbmQpIHsgcmV0dXJuIGxsdm0tPkNvbnN0SW50KHR5cGUsIHZh
bHVlLCBleHRlbnNpb24gPT0gU2lnbkV4dGVuZCk7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGNv
bnN0UmVhbChMVHlwZSB0eXBlLCBkb3VibGUgdmFsdWUpIHsgcmV0dXJuIGxsdm0tPkNvbnN0UmVh
bCh0eXBlLCB2YWx1ZSk7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGNvbnN0TnVsbChMVHlwZSB0
eXBlKSB7IHJldHVybiBsbHZtLT5Db25zdE51bGwodHlwZSk7IH0KLQotc3RhdGljIGlubGluZSBM
QmFzaWNCbG9jayBhcHBlbmRCYXNpY0Jsb2NrKExDb250ZXh0IGNvbnRleHQsIExWYWx1ZSBmdW5j
dGlvbiwgY29uc3QgY2hhciogbmFtZSA9ICIiKSB7IHJldHVybiBsbHZtLT5BcHBlbmRCYXNpY0Js
b2NrSW5Db250ZXh0KGNvbnRleHQsIGZ1bmN0aW9uLCBuYW1lKTsgfQotc3RhdGljIGlubGluZSBM
QmFzaWNCbG9jayBpbnNlcnRCYXNpY0Jsb2NrKExDb250ZXh0IGNvbnRleHQsIExCYXNpY0Jsb2Nr
IGJlZm9yZUJhc2ljQmxvY2ssIGNvbnN0IGNoYXIqIG5hbWUgPSAiIikgeyByZXR1cm4gbGx2bS0+
SW5zZXJ0QmFzaWNCbG9ja0luQ29udGV4dChjb250ZXh0LCBiZWZvcmVCYXNpY0Jsb2NrLCBuYW1l
KTsgfQotCi1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZFBoaShMQnVpbGRlciBidWlsZGVyLCBM
VHlwZSB0eXBlKSB7IHJldHVybiBsbHZtLT5CdWlsZFBoaShidWlsZGVyLCB0eXBlLCAiIik7IH0K
LXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRJbmNvbWluZyhMVmFsdWUgcGhpLCBjb25zdCBMVmFsdWUq
IHZhbHVlcywgY29uc3QgTEJhc2ljQmxvY2sqIGJsb2NrcywgdW5zaWduZWQgbnVtUHJlZGVjZXNz
b3JzKQotewotICAgIGxsdm0tPkFkZEluY29taW5nKHBoaSwgY29uc3RfY2FzdDxMVmFsdWUqPih2
YWx1ZXMpLCBjb25zdF9jYXN0PExCYXNpY0Jsb2NrKj4oYmxvY2tzKSwgbnVtUHJlZGVjZXNzb3Jz
KTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRJbmNvbWluZyhMVmFsdWUgcGhpLCBWYWx1ZUZy
b21CbG9jayB2YWx1ZTEpCi17Ci0gICAgTFZhbHVlIHZhbHVlID0gdmFsdWUxLnZhbHVlKCk7Ci0g
ICAgTEJhc2ljQmxvY2sgYmxvY2sgPSB2YWx1ZTEuYmxvY2soKTsKLSAgICBhZGRJbmNvbWluZyhw
aGksICZ2YWx1ZSwgJmJsb2NrLCAxKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRJbmNvbWlu
ZyhMVmFsdWUgcGhpLCBWYWx1ZUZyb21CbG9jayB2YWx1ZTEsIFZhbHVlRnJvbUJsb2NrIHZhbHVl
MikKLXsKLSAgICBMVmFsdWUgdmFsdWVzW10gPSB7IHZhbHVlMS52YWx1ZSgpLCB2YWx1ZTIudmFs
dWUoKSB9OwotICAgIExCYXNpY0Jsb2NrIGJsb2Nrc1tdID0geyB2YWx1ZTEuYmxvY2soKSwgdmFs
dWUyLmJsb2NrKCkgfTsKLSAgICBhZGRJbmNvbWluZyhwaGksIHZhbHVlcywgYmxvY2tzLCAyKTsK
LX0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkUGhpKExCdWlsZGVyIGJ1aWxkZXIsIExUeXBl
IHR5cGUsIFZhbHVlRnJvbUJsb2NrIHZhbHVlMSkKLXsKLSAgICBMVmFsdWUgcmVzdWx0ID0gYnVp
bGRQaGkoYnVpbGRlciwgdHlwZSk7Ci0gICAgYWRkSW5jb21pbmcocmVzdWx0LCB2YWx1ZTEpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZFBoaSgKLSAg
ICBMQnVpbGRlciBidWlsZGVyLCBMVHlwZSB0eXBlLCBWYWx1ZUZyb21CbG9jayB2YWx1ZTEsIFZh
bHVlRnJvbUJsb2NrIHZhbHVlMikKLXsKLSAgICBMVmFsdWUgcmVzdWx0ID0gYnVpbGRQaGkoYnVp
bGRlciwgdHlwZSk7Ci0gICAgYWRkSW5jb21pbmcocmVzdWx0LCB2YWx1ZTEsIHZhbHVlMik7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRBbGxvY2Eo
TEJ1aWxkZXIgYnVpbGRlciwgTFR5cGUgdHlwZSkgeyByZXR1cm4gbGx2bS0+QnVpbGRBbGxvY2Eo
YnVpbGRlciwgdHlwZSwgIiIpOyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEFkZChMQnVp
bGRlciBidWlsZGVyLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBsbHZtLT5C
dWlsZEFkZChidWlsZGVyLCBsZWZ0LCByaWdodCwgIiIpOyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1
ZSBidWlsZFN1YihMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7
IHJldHVybiBsbHZtLT5CdWlsZFN1YihidWlsZGVyLCBsZWZ0LCByaWdodCwgIiIpOyB9Ci1zdGF0
aWMgaW5saW5lIExWYWx1ZSBidWlsZE11bChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgbGVmdCwg
TFZhbHVlIHJpZ2h0KSB7IHJldHVybiBsbHZtLT5CdWlsZE11bChidWlsZGVyLCBsZWZ0LCByaWdo
dCwgIiIpOyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZERpdihMQnVpbGRlciBidWlsZGVy
LCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBsbHZtLT5CdWlsZFNEaXYoYnVp
bGRlciwgbGVmdCwgcmlnaHQsICIiKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRSZW0o
TEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbGx2
bS0+QnVpbGRTUmVtKGJ1aWxkZXIsIGxlZnQsIHJpZ2h0LCAiIik7IH0KLXN0YXRpYyBpbmxpbmUg
TFZhbHVlIGJ1aWxkTmVnKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4g
bGx2bS0+QnVpbGROZWcoYnVpbGRlciwgdmFsdWUsICIiKTsgfQotc3RhdGljIGlubGluZSBMVmFs
dWUgYnVpbGRGQWRkKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQp
IHsgcmV0dXJuIGxsdm0tPkJ1aWxkRkFkZChidWlsZGVyLCBsZWZ0LCByaWdodCwgIiIpOyB9Ci1z
dGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEZTdWIoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGxl
ZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbGx2bS0+QnVpbGRGU3ViKGJ1aWxkZXIsIGxlZnQs
IHJpZ2h0LCAiIik7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkRk11bChMQnVpbGRlciBi
dWlsZGVyLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBsbHZtLT5CdWlsZEZN
dWwoYnVpbGRlciwgbGVmdCwgcmlnaHQsICIiKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVp
bGRGRGl2KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0
dXJuIGxsdm0tPkJ1aWxkRkRpdihidWlsZGVyLCBsZWZ0LCByaWdodCwgIiIpOyB9Ci1zdGF0aWMg
aW5saW5lIExWYWx1ZSBidWlsZEZSZW0oTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGxlZnQsIExW
YWx1ZSByaWdodCkgeyByZXR1cm4gbGx2bS0+QnVpbGRGUmVtKGJ1aWxkZXIsIGxlZnQsIHJpZ2h0
LCAiIik7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkRk5lZyhMQnVpbGRlciBidWlsZGVy
LCBMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkRk5lZyhidWlsZGVyLCB2YWx1ZSwg
IiIpOyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEFuZChMQnVpbGRlciBidWlsZGVyLCBM
VmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBsbHZtLT5CdWlsZEFuZChidWlsZGVy
LCBsZWZ0LCByaWdodCwgIiIpOyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZE9yKExCdWls
ZGVyIGJ1aWxkZXIsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGxsdm0tPkJ1
aWxkT3IoYnVpbGRlciwgbGVmdCwgcmlnaHQsICIiKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUg
YnVpbGRYb3IoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyBy
ZXR1cm4gbGx2bS0+QnVpbGRYb3IoYnVpbGRlciwgbGVmdCwgcmlnaHQsICIiKTsgfQotc3RhdGlj
IGlubGluZSBMVmFsdWUgYnVpbGRTaGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGxlZnQsIExW
YWx1ZSByaWdodCkgeyByZXR1cm4gbGx2bS0+QnVpbGRTaGwoYnVpbGRlciwgbGVmdCwgcmlnaHQs
ICIiKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRBU2hyKExCdWlsZGVyIGJ1aWxkZXIs
IExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkQVNocihidWls
ZGVyLCBsZWZ0LCByaWdodCwgIiIpOyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZExTaHIo
TEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbGx2
bS0+QnVpbGRMU2hyKGJ1aWxkZXIsIGxlZnQsIHJpZ2h0LCAiIik7IH0KLXN0YXRpYyBpbmxpbmUg
TFZhbHVlIGJ1aWxkTm90KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4g
bGx2bS0+QnVpbGROb3QoYnVpbGRlciwgdmFsdWUsICIiKTsgfQotc3RhdGljIGlubGluZSBMVmFs
dWUgYnVpbGRMb2FkKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBwb2ludGVyKSB7IHJldHVybiBs
bHZtLT5CdWlsZExvYWQoYnVpbGRlciwgcG9pbnRlciwgIiIpOyB9Ci1zdGF0aWMgaW5saW5lIExW
YWx1ZSBidWlsZFN0b3JlKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHBv
aW50ZXIpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkU3RvcmUoYnVpbGRlciwgdmFsdWUsIHBvaW50ZXIp
OyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZFNFeHQoTEJ1aWxkZXIgYnVpbGRlciwgTFZh
bHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJldHVybiBsbHZtLT5CdWlsZFNFeHQoYnVpbGRlciwg
dmFsdWUsIHR5cGUsICIiKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRaRXh0KExCdWls
ZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gbGx2bS0+QnVp
bGRaRXh0KGJ1aWxkZXIsIHZhbHVlLCB0eXBlLCAiIik7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVl
IGJ1aWxkRlBUb1NJKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkg
eyByZXR1cm4gbGx2bS0+QnVpbGRGUFRvU0koYnVpbGRlciwgdmFsdWUsIHR5cGUsICIiKTsgfQot
c3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRGUFRvVUkoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVl
IHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJldHVybiBsbHZtLT5CdWlsZEZQVG9VSShidWlsZGVyLCB2
YWx1ZSwgdHlwZSwgIiIpOyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZFNJVG9GUChMQnVp
bGRlciBidWlsZGVyLCBMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGxsdm0tPkJ1
aWxkU0lUb0ZQKGJ1aWxkZXIsIHZhbHVlLCB0eXBlLCAiIik7IH0KLXN0YXRpYyBpbmxpbmUgTFZh
bHVlIGJ1aWxkVUlUb0ZQKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlw
ZSkgeyByZXR1cm4gbGx2bS0+QnVpbGRVSVRvRlAoYnVpbGRlciwgdmFsdWUsIHR5cGUsICIiKTsg
fQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRJbnRDYXN0KExCdWlsZGVyIGJ1aWxkZXIsIExW
YWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gbGx2bS0+QnVpbGRJbnRDYXN0KGJ1aWxk
ZXIsIHZhbHVlLCB0eXBlLCAiIik7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkRlBDYXN0
KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gbGx2
bS0+QnVpbGRGUENhc3QoYnVpbGRlciwgdmFsdWUsIHR5cGUsICIiKTsgfQotc3RhdGljIGlubGlu
ZSBMVmFsdWUgYnVpbGRJbnRUb1B0cihMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgdmFsdWUsIExU
eXBlIHR5cGUpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkSW50VG9QdHIoYnVpbGRlciwgdmFsdWUsIHR5
cGUsICIiKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRQdHJUb0ludChMQnVpbGRlciBi
dWlsZGVyLCBMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkUHRy
VG9JbnQoYnVpbGRlciwgdmFsdWUsIHR5cGUsICIiKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUg
YnVpbGRCaXRDYXN0KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkg
eyByZXR1cm4gbGx2bS0+QnVpbGRCaXRDYXN0KGJ1aWxkZXIsIHZhbHVlLCB0eXBlLCAiIik7IH0K
LXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkSUNtcChMQnVpbGRlciBidWlsZGVyLCBMSW50UHJl
ZGljYXRlIGNvbmQsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGxsdm0tPkJ1
aWxkSUNtcChidWlsZGVyLCBjb25kLCBsZWZ0LCByaWdodCwgIiIpOyB9Ci1zdGF0aWMgaW5saW5l
IExWYWx1ZSBidWlsZEZDbXAoTEJ1aWxkZXIgYnVpbGRlciwgTFJlYWxQcmVkaWNhdGUgY29uZCwg
TFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbGx2bS0+QnVpbGRGQ21wKGJ1aWxk
ZXIsIGNvbmQsIGxlZnQsIHJpZ2h0LCAiIik7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxk
SW5zZXJ0RWxlbWVudChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgdmVjdG9yLCBMVmFsdWUgZWxl
bWVudCwgTFZhbHVlIGluZGV4KSB7IHJldHVybiBsbHZtLT5CdWlsZEluc2VydEVsZW1lbnQoYnVp
bGRlciwgdmVjdG9yLCBlbGVtZW50LCBpbmRleCwgIiIpOyB9Ci0KLXN0YXRpYyBpbmxpbmUgTFZh
bHVlIGJ1aWxkRmVuY2UoTEJ1aWxkZXIgYnVpbGRlciwgTEF0b21pY09yZGVyaW5nIG9yZGVyaW5n
LCBTeW5jaHJvbml6YXRpb25TY29wZSBzY29wZSA9IENyb3NzVGhyZWFkKQotewotICAgIHJldHVy
biBsbHZtLT5CdWlsZEZlbmNlKGJ1aWxkZXIsIG9yZGVyaW5nLCBzY29wZSA9PSBTaW5nbGVUaHJl
YWQsICIiKTsKLX0KLQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1
aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwgY29uc3QgTFZhbHVlKiBhcmdzLCB1bnNpZ25lZCBudW1B
cmdzKQotewotICAgIHJldHVybiBsbHZtLT5CdWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGNv
bnN0X2Nhc3Q8TFZhbHVlKj4oYXJncyksIG51bUFyZ3MsICIiKTsKLX0KLXRlbXBsYXRlPHR5cGVu
YW1lIFZlY3RvclR5cGU+Ci1pbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVy
LCBMVmFsdWUgZnVuY3Rpb24sIGNvbnN0IFZlY3RvclR5cGUmIHZlY3RvcikKLXsKLSAgICByZXR1
cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCB2ZWN0b3IuYmVnaW4oKSwgdmVjdG9yLnNp
emUoKSk7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRl
ciwgTFZhbHVlIGZ1bmN0aW9uKQotewotICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVu
Y3Rpb24sIDAsIDApOwotfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVy
IGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEpCi17Ci0gICAgcmV0dXJuIGJ1
aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgJmFyZzEsIDEpOwotfQotdGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJncz4KLUxWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1
bmN0aW9uLCBMVmFsdWUgYXJnMSwgQXJncy4uLiBhcmdzKQotewotICAgIExWYWx1ZSBhcmdzQXJy
YXlbXSA9IHsgYXJnMSwgYXJncy4uLiB9OwotICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwg
ZnVuY3Rpb24sIGFyZ3NBcnJheSwgc2l6ZW9mKGFyZ3NBcnJheSkgLyBzaXplb2YoTFZhbHVlKSk7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9u
KExWYWx1ZSBpbnN0cnVjdGlvbiwgTENhbGxDb252IGNhbGxpbmdDb252ZW50aW9uKSB7IGxsdm0t
PlNldEluc3RydWN0aW9uQ2FsbENvbnYoaW5zdHJ1Y3Rpb24sIGNhbGxpbmdDb252ZW50aW9uKTsg
fQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRFeHRyYWN0VmFsdWUoTEJ1aWxkZXIgYnVpbGRl
ciwgTFZhbHVlIGFnZ1ZhbCwgdW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkRXh0
cmFjdFZhbHVlKGJ1aWxkZXIsIGFnZ1ZhbCwgaW5kZXgsICIiKTsgfQotc3RhdGljIGlubGluZSBM
VmFsdWUgYnVpbGRTZWxlY3QoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGNvbmRpdGlvbiwgTFZh
bHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pIHsgcmV0dXJuIGxsdm0tPkJ1aWxkU2VsZWN0KGJ1
aWxkZXIsIGNvbmRpdGlvbiwgdGFrZW4sIG5vdFRha2VuLCAiIik7IH0KLXN0YXRpYyBpbmxpbmUg
TFZhbHVlIGJ1aWxkQnIoTEJ1aWxkZXIgYnVpbGRlciwgTEJhc2ljQmxvY2sgZGVzdGluYXRpb24p
IHsgcmV0dXJuIGxsdm0tPkJ1aWxkQnIoYnVpbGRlciwgZGVzdGluYXRpb24pOyB9Ci1zdGF0aWMg
aW5saW5lIExWYWx1ZSBidWlsZENvbmRCcihMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgY29uZGl0
aW9uLCBMQmFzaWNCbG9jayB0YWtlbiwgTEJhc2ljQmxvY2sgbm90VGFrZW4pIHsgcmV0dXJuIGxs
dm0tPkJ1aWxkQ29uZEJyKGJ1aWxkZXIsIGNvbmRpdGlvbiwgdGFrZW4sIG5vdFRha2VuKTsgfQot
c3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRTd2l0Y2goTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVl
IHZhbHVlLCBMQmFzaWNCbG9jayBmYWxsVGhyb3VnaCwgdW5zaWduZWQgbnVtQ2FzZXMpIHsgcmV0
dXJuIGxsdm0tPkJ1aWxkU3dpdGNoKGJ1aWxkZXIsIHZhbHVlLCBmYWxsVGhyb3VnaCwgbnVtQ2Fz
ZXMpOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgYWRkQ2FzZShMVmFsdWUgc3dpdGNoSW5zdCwgTFZh
bHVlIHZhbHVlLCBMQmFzaWNCbG9jayB0YXJnZXQpIHsgbGx2bS0+QWRkQ2FzZShzd2l0Y2hJbnN0
LCB2YWx1ZSwgdGFyZ2V0KTsgfQotdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KLXN0YXRp
YyBpbmxpbmUgTFZhbHVlIGJ1aWxkU3dpdGNoKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1
ZSwgY29uc3QgVmVjdG9yVHlwZSYgY2FzZXMsIExCYXNpY0Jsb2NrIGZhbGxUaHJvdWdoKQotewot
ICAgIExWYWx1ZSByZXN1bHQgPSBidWlsZFN3aXRjaChidWlsZGVyLCB2YWx1ZSwgZmFsbFRocm91
Z2gsIGNhc2VzLnNpemUoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhc2VzLnNp
emUoKTsgKytpKQotICAgICAgICBhZGRDYXNlKHJlc3VsdCwgY2FzZXNbaV0udmFsdWUoKSwgY2Fz
ZXNbaV0udGFyZ2V0KCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci1zdGF0aWMgaW5saW5lIExW
YWx1ZSBidWlsZFJldChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIGxs
dm0tPkJ1aWxkUmV0KGJ1aWxkZXIsIHZhbHVlKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVp
bGRVbnJlYWNoYWJsZShMQnVpbGRlciBidWlsZGVyKSB7IHJldHVybiBsbHZtLT5CdWlsZFVucmVh
Y2hhYmxlKGJ1aWxkZXIpOyB9Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wTW9kdWxlKExNb2R1
bGUgbW9kdWxlKSB7IGxsdm0tPkR1bXBNb2R1bGUobW9kdWxlKTsgfQotc3RhdGljIGlubGluZSB2
b2lkIHZlcmlmeU1vZHVsZShMTW9kdWxlIG1vZHVsZSkKLXsKLSAgICBjaGFyKiBlcnJvciA9IDA7
Ci0gICAgbGx2bS0+VmVyaWZ5TW9kdWxlKG1vZHVsZSwgTExWTUFib3J0UHJvY2Vzc0FjdGlvbiwg
JmVycm9yKTsKLSAgICBsbHZtLT5EaXNwb3NlTWVzc2FnZShlcnJvcik7Ci19Ci0KLSNlbmRpZiAv
LyAhRlRMX1VTRVNfQjMKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8g
RU5BQkxFKEZUTF9KSVQpCi0KLSNlbmRpZiAvLyBGVExBYmJyZXZpYXRpb25zX2gKLQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmNwcAkocmV2aXNp
b24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwzNyArMzAsMTggQEAKIAogI2luY2x1ZGUgIkRGR0Nv
bW1vbi5oIgogI2luY2x1ZGUgIkZUTEFiYnJldmlhdGVkVHlwZXMuaCIKLSNpbmNsdWRlICJGVExB
YmJyZXZpYXRpb25zLmgiCiAjaW5jbHVkZSAiRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oIgog
I2luY2x1ZGUgIkZUTEIzT3V0cHV0LmgiCi0jaW5jbHVkZSAiRlRMT3V0cHV0LmgiCiAjaW5jbHVk
ZSAiRlRMVHlwZWRQb2ludGVyLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUg
Ik9wdGlvbnMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCi0jaWYgIUZU
TF9VU0VTX0IzCi1MVmFsdWUgQWJzdHJhY3RIZWFwOjp0YmFhTWV0YWRhdGFTbG93KGNvbnN0IEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkmIHJlcG9zaXRvcnkpIGNvbnN0Ci17Ci0gICAgbV90YmFhTWV0
YWRhdGEgPSBtZE5vZGUoCi0gICAgICAgIHJlcG9zaXRvcnkubV9jb250ZXh0LAotICAgICAgICBt
ZFN0cmluZyhyZXBvc2l0b3J5Lm1fY29udGV4dCwgbV9oZWFwTmFtZSksCi0gICAgICAgIG1fcGFy
ZW50LT50YmFhTWV0YWRhdGEocmVwb3NpdG9yeSkpOwotICAgIHJldHVybiBtX3RiYWFNZXRhZGF0
YTsKLX0KLSNlbmRpZgotCiB2b2lkIEFic3RyYWN0SGVhcDo6ZGVjb3JhdGVJbnN0cnVjdGlvbihM
VmFsdWUgaW5zdHJ1Y3Rpb24sIGNvbnN0IEFic3RyYWN0SGVhcFJlcG9zaXRvcnkmIHJlcG9zaXRv
cnkpIGNvbnN0CiB7Ci0jaWYgIUZUTF9VU0VTX0IzCi0gICAgaWYgKCFPcHRpb25zOjp1c2VGVExU
QkFBKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBzZXRNZXRhZGF0YShpbnN0cnVjdGlvbiwgcmVw
b3NpdG9yeS5tX3RiYWFLaW5kLCB0YmFhTWV0YWRhdGEocmVwb3NpdG9yeSkpOwotI2Vsc2UKICAg
ICBVTlVTRURfUEFSQU0oaW5zdHJ1Y3Rpb24pOwogICAgIFVOVVNFRF9QQVJBTShyZXBvc2l0b3J5
KTsKLSNlbmRpZgogfQogCiB2b2lkIEFic3RyYWN0SGVhcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdApAQCAtNzcsMzMgKzU4LDEyIEBAIHZvaWQgQWJzdHJhY3RGaWVsZDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3UKICAgICAgICAgb3V0LnByaW50KCItPiIsICpwYXJlbnQoKSk7CiB9CiAKLUlu
ZGV4ZWRBYnN0cmFjdEhlYXA6OkluZGV4ZWRBYnN0cmFjdEhlYXAoTENvbnRleHQgY29udGV4dCwg
QWJzdHJhY3RIZWFwKiBwYXJlbnQsIGNvbnN0IGNoYXIqIGhlYXBOYW1lLCBwdHJkaWZmX3Qgb2Zm
c2V0LCBzaXplX3QgZWxlbWVudFNpemUpCitJbmRleGVkQWJzdHJhY3RIZWFwOjpJbmRleGVkQWJz
dHJhY3RIZWFwKEFic3RyYWN0SGVhcCogcGFyZW50LCBjb25zdCBjaGFyKiBoZWFwTmFtZSwgcHRy
ZGlmZl90IG9mZnNldCwgc2l6ZV90IGVsZW1lbnRTaXplKQogICAgIDogbV9oZWFwRm9yQW55SW5k
ZXgocGFyZW50LCBoZWFwTmFtZSkKICAgICAsIG1faGVhcE5hbWVMZW5ndGgoc3RybGVuKGhlYXBO
YW1lKSkKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAsIG1fZWxlbWVudFNpemUoZWxlbWVu
dFNpemUpCi0jaWYgIUZUTF9VU0VTX0IzCi0gICAgLCBtX3NjYWxlVGVybSgwKQotICAgICwgbV9j
YW5TaGlmdChmYWxzZSkKLSNlbmRpZgotewotI2lmIEZUTF9VU0VTX0IzCi0gICAgVU5VU0VEX1BB
UkFNKGNvbnRleHQpOwotI2Vsc2UKLSAgICAvLyBTZWUgaWYgdGhlcmUgaXMgYSBjb21tb24gc2hp
ZnQgYW1vdW50IHdlIGNvdWxkIHVzZSBpbnN0ZWFkIG9mIG11bHRpcGx5aW5nLiBEb24ndAotICAg
IC8vIHRyeSB0b28gaGFyZC4gVGhpcyBpcyBqdXN0IGEgc3BlY3VsYXRpdmUgb3B0aW1pemF0aW9u
IHRvIHJlZHVjZSBsb2FkIG9uIExMVk0uCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDQ7
ICsraSkgewotICAgICAgICBpZiAoMVUgPDwgaSA9PSBtX2VsZW1lbnRTaXplKSB7Ci0gICAgICAg
ICAgICBpZiAoaSkKLSAgICAgICAgICAgICAgICBtX3NjYWxlVGVybSA9IGNvbnN0SW50KGludFB0
clR5cGUoY29udGV4dCksIGksIFplcm9FeHRlbmQpOwotICAgICAgICAgICAgbV9jYW5TaGlmdCA9
IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBp
ZiAoIW1fY2FuU2hpZnQpCi0gICAgICAgIG1fc2NhbGVUZXJtID0gY29uc3RJbnQoaW50UHRyVHlw
ZShjb250ZXh0KSwgbV9lbGVtZW50U2l6ZSwgWmVyb0V4dGVuZCk7Ci0jZW5kaWYKK3sKIH0KIAog
SW5kZXhlZEFic3RyYWN0SGVhcDo6fkluZGV4ZWRBYnN0cmFjdEhlYXAoKQpAQCAtMTE1LDE4ICs3
NSw3IEBAIFR5cGVkUG9pbnRlciBJbmRleGVkQWJzdHJhY3RIZWFwOjpiYXNlSW4KICAgICBpZiAo
aW5kZXhBc0NvbnN0YW50LmlzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIG91dC5hZGRyZXNzKGJh
c2UsIGF0KGluZGV4QXNDb25zdGFudC5hc0ludDMyKCkpLCBvZmZzZXQpOwogCi0jaWYgRlRMX1VT
RVNfQjMKICAgICBMVmFsdWUgcmVzdWx0ID0gb3V0LmFkZChiYXNlLCBvdXQubXVsKGluZGV4LCBv
dXQuY29uc3RJbnRQdHIobV9lbGVtZW50U2l6ZSkpKTsKLSNlbHNlCi0gICAgTFZhbHVlIHJlc3Vs
dDsKLSAgICBpZiAobV9jYW5TaGlmdCkgewotICAgICAgICBpZiAoIW1fc2NhbGVUZXJtKQotICAg
ICAgICAgICAgcmVzdWx0ID0gb3V0LmFkZChiYXNlLCBpbmRleCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHJlc3VsdCA9IG91dC5hZGQoYmFzZSwgb3V0LnNobChpbmRleCwgbV9zY2FsZVRl
cm0pKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmVzdWx0ID0gb3V0LmFkZChiYXNlLCBvdXQubXVs
KGluZGV4LCBtX3NjYWxlVGVybSkpOwotI2VuZGlmCiAgICAgCiAgICAgcmV0dXJuIFR5cGVkUG9p
bnRlcihhdEFueUluZGV4KCksIG91dC5hZGRQdHIocmVzdWx0LCBtX29mZnNldCArIG9mZnNldCkp
OwogfQpAQCAtMjE1LDggKzE2NCw4IEBAIHZvaWQgSW5kZXhlZEFic3RyYWN0SGVhcDo6ZHVtcChQ
cmludFN0cmUKICAgICBvdXQucHJpbnQoIkluZGV4ZWQ6IiwgYXRBbnlJbmRleCgpKTsKIH0KIAot
TnVtYmVyZWRBYnN0cmFjdEhlYXA6Ok51bWJlcmVkQWJzdHJhY3RIZWFwKExDb250ZXh0IGNvbnRl
eHQsIEFic3RyYWN0SGVhcCogaGVhcCwgY29uc3QgY2hhciogaGVhcE5hbWUpCi0gICAgOiBtX2lu
ZGV4ZWRIZWFwKGNvbnRleHQsIGhlYXAsIGhlYXBOYW1lLCAwLCAxKQorTnVtYmVyZWRBYnN0cmFj
dEhlYXA6Ok51bWJlcmVkQWJzdHJhY3RIZWFwKEFic3RyYWN0SGVhcCogaGVhcCwgY29uc3QgY2hh
ciogaGVhcE5hbWUpCisgICAgOiBtX2luZGV4ZWRIZWFwKGhlYXAsIGhlYXBOYW1lLCAwLCAxKQog
ewogfQogCkBAIC0yMjksOCArMTc4LDggQEAgdm9pZCBOdW1iZXJlZEFic3RyYWN0SGVhcDo6ZHVt
cChQcmludFN0cgogICAgIG91dC5wcmludCgiTnVtYmVyZWQ6ICIsIGF0QW55TnVtYmVyKCkpOwog
fQogCi1BYnNvbHV0ZUFic3RyYWN0SGVhcDo6QWJzb2x1dGVBYnN0cmFjdEhlYXAoTENvbnRleHQg
Y29udGV4dCwgQWJzdHJhY3RIZWFwKiBoZWFwLCBjb25zdCBjaGFyKiBoZWFwTmFtZSkKLSAgICA6
IG1faW5kZXhlZEhlYXAoY29udGV4dCwgaGVhcCwgaGVhcE5hbWUsIDAsIDEpCitBYnNvbHV0ZUFi
c3RyYWN0SGVhcDo6QWJzb2x1dGVBYnN0cmFjdEhlYXAoQWJzdHJhY3RIZWFwKiBoZWFwLCBjb25z
dCBjaGFyKiBoZWFwTmFtZSkKKyAgICA6IG1faW5kZXhlZEhlYXAoaGVhcCwgaGVhcE5hbWUsIDAs
IDEpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RI
ZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFj
dEhlYXAuaAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExBYnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTggKzUzLDEyIEBAIHB1Ymxp
YzoKICAgICBBYnN0cmFjdEhlYXAoKQogICAgICAgICA6IG1fcGFyZW50KDApCiAgICAgICAgICwg
bV9oZWFwTmFtZSgwKQotI2lmICFGVExfVVNFU19CMwotICAgICAgICAsIG1fdGJhYU1ldGFkYXRh
KDApCi0jZW5kaWYKICAgICB7CiAgICAgfQogICAgIAogICAgIEFic3RyYWN0SGVhcChBYnN0cmFj
dEhlYXAqIHBhcmVudCwgY29uc3QgY2hhciogaGVhcE5hbWUpCiAgICAgICAgIDogbV9wYXJlbnQo
cGFyZW50KQogICAgICAgICAsIG1faGVhcE5hbWUoaGVhcE5hbWUpCi0jaWYgIUZUTF9VU0VTX0Iz
Ci0gICAgICAgICwgbV90YmFhTWV0YWRhdGEoMCkKLSNlbmRpZgogICAgIHsKICAgICB9CiAgICAg
CkBAIC05MywxNiArODcsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2hlYXBOYW1lOwog
ICAgIH0KIAotI2lmICFGVExfVVNFU19CMwotICAgIExWYWx1ZSB0YmFhTWV0YWRhdGEoY29uc3Qg
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeSYgcmVwb3NpdG9yeSkgY29uc3QKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChpc0luaXRpYWxpemVkKCkpOwotICAgICAgICBpZiAoTElLRUxZKCEhbV90YmFhTWV0
YWRhdGEpKQotICAgICAgICAgICAgcmV0dXJuIG1fdGJhYU1ldGFkYXRhOwotICAgICAgICByZXR1
cm4gdGJhYU1ldGFkYXRhU2xvdyhyZXBvc2l0b3J5KTsKLSAgICB9Ci0jZW5kaWYKLSAgICAKICAg
ICB2b2lkIGRlY29yYXRlSW5zdHJ1Y3Rpb24oTFZhbHVlIGluc3RydWN0aW9uLCBjb25zdCBBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5JikgY29uc3Q7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKQEAgLTExMCwxNSArOTQsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVu
ZCBjbGFzcyBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OwogCi0jaWYgIUZUTF9VU0VTX0IzCi0gICAg
TFZhbHVlIHRiYWFNZXRhZGF0YVNsb3coY29uc3QgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeSYpIGNv
bnN0OwotI2VuZGlmCi0gICAgCiAgICAgQWJzdHJhY3RIZWFwKiBtX3BhcmVudDsKICAgICBjb25z
dCBjaGFyKiBtX2hlYXBOYW1lOwotI2lmICFGVExfVVNFU19CMwotICAgIG11dGFibGUgTFZhbHVl
IG1fdGJhYU1ldGFkYXRhOwotI2VuZGlmCiB9OwogCiAvLyBUaGluayBvZiAiQWJzdHJhY3RGaWVs
ZCIgYXMgYmVpbmcgYW4gIkFic3RyYWN0SGVhcFdpdGhPZmZzZXQiLiBJIHdvdWxkIGhhdmUgbmFt
ZWQKQEAgLTE1NSw3ICsxMzIsNyBAQCBwcml2YXRlOgogCiBjbGFzcyBJbmRleGVkQWJzdHJhY3RI
ZWFwIHsKIHB1YmxpYzoKLSAgICBJbmRleGVkQWJzdHJhY3RIZWFwKExDb250ZXh0LCBBYnN0cmFj
dEhlYXAqIHBhcmVudCwgY29uc3QgY2hhciogaGVhcE5hbWUsIHB0cmRpZmZfdCBvZmZzZXQsIHNp
emVfdCBlbGVtZW50U2l6ZSk7CisgICAgSW5kZXhlZEFic3RyYWN0SGVhcChBYnN0cmFjdEhlYXAq
IHBhcmVudCwgY29uc3QgY2hhciogaGVhcE5hbWUsIHB0cmRpZmZfdCBvZmZzZXQsIHNpemVfdCBl
bGVtZW50U2l6ZSk7CiAgICAgfkluZGV4ZWRBYnN0cmFjdEhlYXAoKTsKICAgICAKICAgICBjb25z
dCBBYnN0cmFjdEhlYXAmIGF0QW55SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2hlYXBGb3JBbnlJ
bmRleDsgfQpAQCAtMTg4LDEwICsxNjUsNiBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX2hlYXBO
YW1lTGVuZ3RoOwogICAgIHB0cmRpZmZfdCBtX29mZnNldDsKICAgICBzaXplX3QgbV9lbGVtZW50
U2l6ZTsKLSNpZiAhRlRMX1VTRVNfQjMKLSAgICBMVmFsdWUgbV9zY2FsZVRlcm07Ci0gICAgYm9v
bCBtX2NhblNoaWZ0OwotI2VuZGlmCiAgICAgc3RkOjphcnJheTxBYnN0cmFjdEZpZWxkLCAxNj4g
bV9zbWFsbEluZGljZXM7CiAgICAgCiAgICAgc3RydWN0IFdpdGhvdXRaZXJvT3JPbmVIYXNoVHJh
aXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxwdHJkaWZmX3Q+IHsKQEAgLTIxMSw3ICsxODQs
NyBAQCBwcml2YXRlOgogCiBjbGFzcyBOdW1iZXJlZEFic3RyYWN0SGVhcCB7CiBwdWJsaWM6Ci0g
ICAgTnVtYmVyZWRBYnN0cmFjdEhlYXAoTENvbnRleHQsIEFic3RyYWN0SGVhcCogcGFyZW50LCBj
b25zdCBjaGFyKiBoZWFwTmFtZSk7CisgICAgTnVtYmVyZWRBYnN0cmFjdEhlYXAoQWJzdHJhY3RI
ZWFwKiBwYXJlbnQsIGNvbnN0IGNoYXIqIGhlYXBOYW1lKTsKICAgICB+TnVtYmVyZWRBYnN0cmFj
dEhlYXAoKTsKICAgICAKICAgICBjb25zdCBBYnN0cmFjdEhlYXAmIGF0QW55TnVtYmVyKCkgY29u
c3QgeyByZXR1cm4gbV9pbmRleGVkSGVhcC5hdEFueUluZGV4KCk7IH0KQEAgLTIzMCw3ICsyMDMs
NyBAQCBwcml2YXRlOgogCiBjbGFzcyBBYnNvbHV0ZUFic3RyYWN0SGVhcCB7CiBwdWJsaWM6Ci0g
ICAgQWJzb2x1dGVBYnN0cmFjdEhlYXAoTENvbnRleHQsIEFic3RyYWN0SGVhcCogcGFyZW50LCBj
b25zdCBjaGFyKiBoZWFwTmFtZSk7CisgICAgQWJzb2x1dGVBYnN0cmFjdEhlYXAoQWJzdHJhY3RI
ZWFwKiBwYXJlbnQsIGNvbnN0IGNoYXIqIGhlYXBOYW1lKTsKICAgICB+QWJzb2x1dGVBYnN0cmFj
dEhlYXAoKTsKICAgICAKICAgICBjb25zdCBBYnN0cmFjdEhlYXAmIGF0QW55QWRkcmVzcygpIGNv
bnN0IHsgcmV0dXJuIG1faW5kZXhlZEhlYXAuYXRBbnlJbmRleCgpOyB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9y
eS5jcHAJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYg
QEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgot
I2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIK
ICNpbmNsdWRlICJKU0Vudmlyb25tZW50UmVjb3JkLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yLmgiCkBAIC00MCw3ICszOSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKIAotQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6QWJzdHJhY3RIZWFwUmVwb3Np
dG9yeShMQ29udGV4dCBjb250ZXh0KQorQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6QWJzdHJhY3RI
ZWFwUmVwb3NpdG9yeSgpCiAgICAgOiByb290KDAsICJqc2NSb290IikKIAogI2RlZmluZSBBQlNU
UkFDVF9IRUFQX0lOSVRJQUxJWkFUSU9OKG5hbWUpICwgbmFtZSgmcm9vdCwgI25hbWUpCkBAIC01
MywxOSArNTIsMTUgQEAgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6QWJzdHJhY3RIZWFwUmVwbwog
ICAgIAogICAgICwgSlNDZWxsX2ZyZWVMaXN0TmV4dChKU0NlbGxfc3RydWN0dXJlSUQpCiAgICAg
Ci0jZGVmaW5lIElOREVYRURfQUJTVFJBQ1RfSEVBUF9JTklUSUFMSVpBVElPTihuYW1lLCBvZmZz
ZXQsIHNpemUpICwgbmFtZShjb250ZXh0LCAmcm9vdCwgI25hbWUsIG9mZnNldCwgc2l6ZSkKKyNk
ZWZpbmUgSU5ERVhFRF9BQlNUUkFDVF9IRUFQX0lOSVRJQUxJWkFUSU9OKG5hbWUsIG9mZnNldCwg
c2l6ZSkgLCBuYW1lKCZyb290LCAjbmFtZSwgb2Zmc2V0LCBzaXplKQogICAgIEZPUl9FQUNIX0lO
REVYRURfQUJTVFJBQ1RfSEVBUChJTkRFWEVEX0FCU1RSQUNUX0hFQVBfSU5JVElBTElaQVRJT04p
CiAjdW5kZWYgSU5ERVhFRF9BQlNUUkFDVF9IRUFQX0lOSVRJQUxJWkFUSU9OCiAgICAgCi0jZGVm
aW5lIE5VTUJFUkVEX0FCU1RSQUNUX0hFQVBfSU5JVElBTElaQVRJT04obmFtZSkgLCBuYW1lKGNv
bnRleHQsICZyb290LCAjbmFtZSkKKyNkZWZpbmUgTlVNQkVSRURfQUJTVFJBQ1RfSEVBUF9JTklU
SUFMSVpBVElPTihuYW1lKSAsIG5hbWUoJnJvb3QsICNuYW1lKQogICAgIEZPUl9FQUNIX05VTUJF
UkVEX0FCU1RSQUNUX0hFQVAoTlVNQkVSRURfQUJTVFJBQ1RfSEVBUF9JTklUSUFMSVpBVElPTikK
ICN1bmRlZiBOVU1CRVJFRF9BQlNUUkFDVF9IRUFQX0lOSVRJQUxJWkFUSU9OCiAKLSAgICAsIGFi
c29sdXRlKGNvbnRleHQsICZyb290LCAiYWJzb2x1dGUiKQotICAgICwgbV9jb250ZXh0KGNvbnRl
eHQpCi0jaWYgIUZUTF9VU0VTX0IzCi0gICAgLCBtX3RiYWFLaW5kKG1kS2luZElEKG1fY29udGV4
dCwgInRiYWEiKSkKLSNlbmRpZgorICAgICwgYWJzb2x1dGUoJnJvb3QsICJhYnNvbHV0ZSIpCiB7
CiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgb3VyIGV4cGxpY2l0IGFzc3VtcHRpb25zIGFib3V0IHRo
ZSBTdHJ1Y3R1cmVJREJsb2IgbWF0Y2ggcmVhbGl0eS4KICAgICBSRUxFQVNFX0FTU0VSVCghKEpT
Q2VsbF9pbmRleGluZ1R5cGUub2Zmc2V0KCkgJiAoc2l6ZW9mKGludDMyX3QpIC0gMSkpKTsKQEAg
LTc4LDEzICs3Myw2IEBAIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OkFic3RyYWN0SGVhcFJlcG8K
ICAgICBKU0NlbGxfdHlwZUluZm9GbGFncy5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2VmdWxCeXRl
cyk7CiAgICAgSlNDZWxsX2NlbGxTdGF0ZS5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2VmdWxCeXRl
cyk7CiAKLSNpZiAhRlRMX1VTRVNfQjMKLSAgICByb290Lm1fdGJhYU1ldGFkYXRhID0gbWROb2Rl
KG1fY29udGV4dCwgbWRTdHJpbmcobV9jb250ZXh0LCByb290Lm1faGVhcE5hbWUpKTsKLSAgICAK
LSAgICBSRUxFQVNFX0FTU0VSVChtX3RiYWFLaW5kKTsKLSAgICBSRUxFQVNFX0FTU0VSVChyb290
Lm1fdGJhYU1ldGFkYXRhKTsKLSNlbmRpZgotICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKCFKU0Nl
bGxfZnJlZUxpc3ROZXh0Lm9mZnNldCgpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9u
IDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgewogY2xhc3MgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeSB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQWJzdHJhY3RIZWFwUmVwb3NpdG9yeSk7CiBwdWJsaWM6Ci0g
ICAgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeShMQ29udGV4dCk7CisgICAgQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeSgpOwogICAgIH5BYnN0cmFjdEhlYXBSZXBvc2l0b3J5KCk7CiAgICAgCiAgICAgQWJz
dHJhY3RIZWFwIHJvb3Q7CkBAIC0xODgsMTEgKzE4OCw2IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgQWJzdHJhY3RIZWFwOwotICAgIAotICAgIExDb250ZXh0IG1fY29u
dGV4dDsKLSNpZiAhRlRMX1VTRVNfQjMKLSAgICB1bnNpZ25lZCBtX3RiYWFLaW5kOwotI2VuZGlm
CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEIzQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExCM0NvbXBpbGUuY3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGVExDb21waWxlLmgi
CiAKLSNpZiBFTkFCTEUoRlRMX0pJVCkgJiYgRlRMX1VTRVNfQjMKKyNpZiBFTkFCTEUoRlRMX0pJ
VCkKIAogI2luY2x1ZGUgIkFpckNvZGUuaCIKICNpbmNsdWRlICJCM0dlbmVyYXRlLmgiCkBAIC0z
OSwxMiArMzksOCBAQAogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJEYXRh
Vmlldy5oIgogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgotI2luY2x1ZGUgIkZUTEV4Y2VwdGlv
bkhhbmRsZXJNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgiCi0j
aW5jbHVkZSAiRlRMSW5saW5lQ2FjaGVTaXplLmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgog
I2luY2x1ZGUgIkZUTFRodW5rcy5oIgotI2luY2x1ZGUgIkZUTFVud2luZEluZm8uaCIKICNpbmNs
dWRlICJKSVRTdWJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVk
ZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKQEAgLTE1Myw1ICsxNDksNSBAQCB2b2lkIGNvbXBpbGUo
U3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
IAotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKSAmJiBGVExfVVNFU19CMworI2VuZGlmIC8vIEVO
QUJMRShGVExfSklUKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzT3V0
cHV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzT3V0
cHV0LmNwcAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExCM091dHB1dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRl
ICJGVExCM091dHB1dC5oIgogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCi0jaWYgRlRMX1VTRVNfQjMK
IAogI2luY2x1ZGUgIkIzTWF0aEV4dHJhcy5oIgogI2luY2x1ZGUgIkIzU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zLmgiCkBAIC0zNyw4ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
RlRMIHsKIHVzaW5nIG5hbWVzcGFjZSBCMzsKIAogT3V0cHV0OjpPdXRwdXQoU3RhdGUmIHN0YXRl
KQotICAgIDogQ29tbW9uVmFsdWVzKHN0YXRlLmNvbnRleHQpCi0gICAgLCBtX3Byb2MoKnN0YXRl
LnByb2MpCisgICAgOiBtX3Byb2MoKnN0YXRlLnByb2MpCiB7CiB9CiAKQEAgLTI0NCw4ICsyNDIs
NjEgQEAgdm9pZCBPdXRwdXQ6OmNoZWNrKExWYWx1ZSBjb25kaXRpb24sIFdlaQogICAgIGNoZWNr
KGNvbmRpdGlvbiwgdGFrZW4sIHRha2VuLndlaWdodCgpLmludmVyc2UoKSk7CiB9CiAKK0xWYWx1
ZSBPdXRwdXQ6OmxvYWQoVHlwZWRQb2ludGVyIHBvaW50ZXIsIExvYWRUeXBlIHR5cGUpCit7Cisg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBMb2FkOFNpZ25FeHQzMjoKKyAgICAgICAgcmV0
dXJuIGxvYWQ4U2lnbkV4dDMyKHBvaW50ZXIpOworICAgIGNhc2UgTG9hZDhaZXJvRXh0MzI6Cisg
ICAgICAgIHJldHVybiBsb2FkOFplcm9FeHQzMihwb2ludGVyKTsKKyAgICBjYXNlIExvYWQxNlNp
Z25FeHQzMjoKKyAgICAgICAgcmV0dXJuIGxvYWQ4U2lnbkV4dDMyKHBvaW50ZXIpOworICAgIGNh
c2UgTG9hZDE2WmVyb0V4dDMyOgorICAgICAgICByZXR1cm4gbG9hZDhaZXJvRXh0MzIocG9pbnRl
cik7CisgICAgY2FzZSBMb2FkMzI6CisgICAgICAgIHJldHVybiBsb2FkMzIocG9pbnRlcik7Cisg
ICAgY2FzZSBMb2FkNjQ6CisgICAgICAgIHJldHVybiBsb2FkNjQocG9pbnRlcik7CisgICAgY2Fz
ZSBMb2FkUHRyOgorICAgICAgICByZXR1cm4gbG9hZFB0cihwb2ludGVyKTsKKyAgICBjYXNlIExv
YWRGbG9hdDoKKyAgICAgICAgcmV0dXJuIGxvYWRGbG9hdChwb2ludGVyKTsKKyAgICBjYXNlIExv
YWREb3VibGU6CisgICAgICAgIHJldHVybiBsb2FkRG91YmxlKHBvaW50ZXIpOworICAgIH0KKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQor
Cit2b2lkIE91dHB1dDo6c3RvcmUoTFZhbHVlIHZhbHVlLCBUeXBlZFBvaW50ZXIgcG9pbnRlciwg
U3RvcmVUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBTdG9yZTMy
QXM4OgorICAgICAgICBzdG9yZTMyQXM4KHZhbHVlLCBwb2ludGVyKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgU3RvcmUzMkFzMTY6CisgICAgICAgIHN0b3JlMzJBczE2KHZhbHVlLCBwb2lu
dGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmUzMjoKKyAgICAgICAgc3RvcmUz
Mih2YWx1ZSwgcG9pbnRlcik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0b3JlNjQ6Cisg
ICAgICAgIHN0b3JlNjQodmFsdWUsIHBvaW50ZXIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBTdG9yZVB0cjoKKyAgICAgICAgc3RvcmVQdHIodmFsdWUsIHBvaW50ZXIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICBzdG9yZUZsb2F0KHZhbHVlLCBw
b2ludGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmVEb3VibGU6CisgICAgICAg
IHN0b3JlRG91YmxlKHZhbHVlLCBwb2ludGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCiAKLSNlbmRpZiAvLyBGVExfVVNFU19CMwogI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzT3V0cHV0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM091dHB1dC5oCShyZXZpc2lv
biAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzT3V0cHV0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJERkdDb21tb24uaCIKIAog
I2lmIEVOQUJMRShGVExfSklUKQotI2lmIEZUTF9VU0VTX0IzCiAKICNpbmNsdWRlICJCM0FyZ3Vt
ZW50UmVnVmFsdWUuaCIKICNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCkBAIC01MzEs
NyArNTMwLDYgQEAgaW5saW5lIExWYWx1ZSBPdXRwdXQ6OmZyb3VuZChMVmFsdWUgZG91YgogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKLSNlbmRpZiAvLyBGVExfVVNFU19CMwogI2VuZGlm
IC8vIEVOQUJMRShGVExfSklUKQogCiAjZW5kaWYgLy8gRlRMQjNPdXRwdXRfaApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21tb25WYWx1ZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tbW9uVmFsdWVzLmNwcAkocmV2aXNpb24g
MTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21tb25WYWx1ZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiQjNQcm9jZWR1cmVJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNUeXBlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMu
aCIKLSNpbmNsdWRlICJGVExBYmJyZXZpYXRpb25zLmgiCiAKICNpZiBFTkFCTEUoRlRMX0pJVCkK
IApAQCAtNDIsOCArNDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKIHVz
aW5nIG5hbWVzcGFjZSBCMzsKIAotQ29tbW9uVmFsdWVzOjpDb21tb25WYWx1ZXMoTENvbnRleHQg
Y29udGV4dCkKLSNpZiBGVExfVVNFU19CMworQ29tbW9uVmFsdWVzOjpDb21tb25WYWx1ZXMoKQog
ICAgIDogdm9pZFR5cGUoQjM6OlZvaWQpCiAgICAgLCBib29sZWFuKEIzOjpJbnQzMikKICAgICAs
IGludDMyKEIzOjpJbnQzMikKQEAgLTUxLDQ2ICs0OSw5IEBAIENvbW1vblZhbHVlczo6Q29tbW9u
VmFsdWVzKExDb250ZXh0IGNvbnQKICAgICAsIGludFB0cihCMzo6cG9pbnRlclR5cGUoKSkKICAg
ICAsIGZsb2F0VHlwZShCMzo6RmxvYXQpCiAgICAgLCBkb3VibGVUeXBlKEIzOjpEb3VibGUpCi0j
ZWxzZQotICAgIDogdm9pZFR5cGUoRlRMOjp2b2lkVHlwZShjb250ZXh0KSkKLSAgICAsIGJvb2xl
YW4oaW50MVR5cGUoY29udGV4dCkpCi0gICAgLCBpbnQzMihpbnQzMlR5cGUoY29udGV4dCkpCi0g
ICAgLCBpbnQ2NChpbnQ2NFR5cGUoY29udGV4dCkpCi0gICAgLCBpbnRQdHIoaW50UHRyVHlwZShj
b250ZXh0KSkKLSAgICAsIGZsb2F0VHlwZShGVEw6OmZsb2F0VHlwZShjb250ZXh0KSkKLSAgICAs
IGRvdWJsZVR5cGUoRlRMOjpkb3VibGVUeXBlKGNvbnRleHQpKQotICAgICwgaW50OChpbnQ4VHlw
ZShjb250ZXh0KSkKLSAgICAsIGludDE2KGludDE2VHlwZShjb250ZXh0KSkKLSAgICAsIHJlZjgo
cG9pbnRlclR5cGUoaW50OCkpCi0gICAgLCByZWYxNihwb2ludGVyVHlwZShpbnQxNikpCi0gICAg
LCByZWYzMihwb2ludGVyVHlwZShpbnQzMikpCi0gICAgLCByZWY2NChwb2ludGVyVHlwZShpbnQ2
NCkpCi0gICAgLCByZWZQdHIocG9pbnRlclR5cGUoaW50UHRyKSkKLSAgICAsIHJlZkZsb2F0KHBv
aW50ZXJUeXBlKGZsb2F0VHlwZSkpCi0gICAgLCByZWZEb3VibGUocG9pbnRlclR5cGUoZG91Ymxl
VHlwZSkpCi0gICAgLCBib29sZWFuVHJ1ZShjb25zdEludChib29sZWFuLCB0cnVlLCBaZXJvRXh0
ZW5kKSkKLSAgICAsIGJvb2xlYW5GYWxzZShjb25zdEludChib29sZWFuLCBmYWxzZSwgWmVyb0V4
dGVuZCkpCi0gICAgLCBpbnQ4WmVybyhjb25zdEludChpbnQ4LCAwLCBTaWduRXh0ZW5kKSkKLSAg
ICAsIGludDMyWmVybyhjb25zdEludChpbnQzMiwgMCwgU2lnbkV4dGVuZCkpCi0gICAgLCBpbnQz
Mk9uZShjb25zdEludChpbnQzMiwgMSwgU2lnbkV4dGVuZCkpCi0gICAgLCBpbnQ2NFplcm8oY29u
c3RJbnQoaW50NjQsIDAsIFNpZ25FeHRlbmQpKQotICAgICwgaW50UHRyWmVybyhjb25zdEludChp
bnRQdHIsIDAsIFNpZ25FeHRlbmQpKQotICAgICwgaW50UHRyT25lKGNvbnN0SW50KGludFB0ciwg
MSwgU2lnbkV4dGVuZCkpCi0gICAgLCBpbnRQdHJUd28oY29uc3RJbnQoaW50UHRyLCAyLCBTaWdu
RXh0ZW5kKSkKLSAgICAsIGludFB0clRocmVlKGNvbnN0SW50KGludFB0ciwgMywgU2lnbkV4dGVu
ZCkpCi0gICAgLCBpbnRQdHJFaWdodChjb25zdEludChpbnRQdHIsIDgsIFNpZ25FeHRlbmQpKQot
ICAgICwgZG91YmxlWmVybyhjb25zdFJlYWwoZG91YmxlVHlwZSwgMCkpCi0gICAgLCByYW5nZUtp
bmQobWRLaW5kSUQoY29udGV4dCwgInJhbmdlIikpCi0gICAgLCBwcm9mS2luZChtZEtpbmRJRChj
b250ZXh0LCAicHJvZiIpKQotICAgICwgYnJhbmNoV2VpZ2h0cyhtZFN0cmluZyhjb250ZXh0LCAi
YnJhbmNoX3dlaWdodHMiKSkKLSAgICAsIG5vbk5lZ2F0aXZlSW50MzIoY29uc3RJbnQoaW50MzIs
IDAsIFNpZ25FeHRlbmQpLCBjb25zdEludChpbnQzMiwgMWxsIDw8IDMxLCBTaWduRXh0ZW5kKSkK
LSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKLSAgICAsIG1fY29udGV4dChjb250ZXh0KQotICAgICwg
bV9tb2R1bGUoMCkKIHsKIH0KIAotI2lmIEZUTF9VU0VTX0IzCiB2b2lkIENvbW1vblZhbHVlczo6
aW5pdGlhbGl6ZUNvbnN0YW50cyhCMzo6UHJvY2VkdXJlJiBwcm9jLCBCMzo6QmFzaWNCbG9jayog
YmxvY2spCiB7CiAgICAgaW50MzJaZXJvID0gYmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCAwKTsKQEAgLTEwNSw3ICs2Niw2IEBAIHZvaWQgQ29tbW9uVmFsdWVz
Ojppbml0aWFsaXplQ29uc3RhbnRzKEIKICAgICBpbnRQdHJFaWdodCA9IGJsb2NrLT5hcHBlbmRO
ZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDgpOwogICAgIGRvdWJsZVplcm8gPSBi
bG9jay0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwLik7CiB9
Ci0jZW5kaWYKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENvbW1vblZhbHVlcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tbW9uVmFsdWVzLmgJKHJldmlzaW9uIDE5NjY4NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tbW9uVmFsdWVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDE2ICs0Miw5IEBAIG5hbWVzcGFjZSBGVEwgewogCiBjbGFzcyBDb21tb25WYWx1
ZXMgewogcHVibGljOgotICAgIENvbW1vblZhbHVlcyhMQ29udGV4dCBjb250ZXh0KTsKKyAgICBD
b21tb25WYWx1ZXMoKTsKIAotI2lmIEZUTF9VU0VTX0IzCiAgICAgdm9pZCBpbml0aWFsaXplQ29u
c3RhbnRzKEIzOjpQcm9jZWR1cmUmLCBCMzo6QmFzaWNCbG9jayopOwotI2Vsc2UgLy8gRlRMX1VT
RVNfQjMKLSAgICB2b2lkIGluaXRpYWxpemUoTE1vZHVsZSBtb2R1bGUpCi0gICAgewotICAgICAg
ICBtX21vZHVsZSA9IG1vZHVsZTsKLSAgICB9Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICAK
ICAgICBjb25zdCBMVHlwZSB2b2lkVHlwZTsKICAgICBjb25zdCBMVHlwZSBib29sZWFuOwpAQCAt
NjAsMjIgKzUzLDggQEAgcHVibGljOgogICAgIGNvbnN0IExUeXBlIGludFB0cjsKICAgICBjb25z
dCBMVHlwZSBmbG9hdFR5cGU7CiAgICAgY29uc3QgTFR5cGUgZG91YmxlVHlwZTsKLSNpZiAhRlRM
X1VTRVNfQjMKLSAgICBjb25zdCBMVHlwZSBpbnQ4OwotICAgIGNvbnN0IExUeXBlIGludDE2Owot
ICAgIGNvbnN0IExUeXBlIHJlZjg7Ci0gICAgY29uc3QgTFR5cGUgcmVmMTY7Ci0gICAgY29uc3Qg
TFR5cGUgcmVmMzI7Ci0gICAgY29uc3QgTFR5cGUgcmVmNjQ7Ci0gICAgY29uc3QgTFR5cGUgcmVm
UHRyOwotICAgIGNvbnN0IExUeXBlIHJlZkZsb2F0OwotICAgIGNvbnN0IExUeXBlIHJlZkRvdWJs
ZTsKLSNlbmRpZgogICAgIExWYWx1ZSBib29sZWFuVHJ1ZSB7IG51bGxwdHIgfTsKICAgICBMVmFs
dWUgYm9vbGVhbkZhbHNlIHsgbnVsbHB0ciB9OwotI2lmICFGVExfVVNFU19CMwotICAgIExWYWx1
ZSBpbnQ4WmVybyB7IG51bGxwdHIgfTsKLSNlbmRpZgogICAgIExWYWx1ZSBpbnQzMlplcm8geyBu
dWxscHRyIH07CiAgICAgTFZhbHVlIGludDMyT25lIHsgbnVsbHB0ciB9OwogICAgIExWYWx1ZSBp
bnQ2NFplcm8geyBudWxscHRyIH07CkBAIC05MSw5ICs3MCw2IEBAIHB1YmxpYzoKICAgICBjb25z
dCBMVmFsdWUgYnJhbmNoV2VpZ2h0cyB7IG51bGxwdHIgfTsKICAgICAKICAgICBjb25zdCBWYWx1
ZVJhbmdlIG5vbk5lZ2F0aXZlSW50MzI7Ci0KLSAgICBMQ29udGV4dCBjb25zdCBtX2NvbnRleHQ7
Ci0gICAgTE1vZHVsZSBtX21vZHVsZTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24g
MTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwxMjE5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgU2Ftc3VuZyBFbGVjdHJvbmljcwotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgU3plZ2VkCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRlRMQ29tcGlsZS5oIgotCi0jaWYgRU5BQkxF
KEZUTF9KSVQpICYmICFGVExfVVNFU19CMwotCi0jaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5
cGUuaCIKLSNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLSNpbmNsdWRlICJERkdDb21tb24uaCIK
LSNpbmNsdWRlICJERkdHcmFwaFNhZmVwb2ludC5oIgotI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMu
aCIKLSNpbmNsdWRlICJEYXRhVmlldy5oIgotI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgotI2lu
Y2x1ZGUgIkZUTENvbXBpbGVCaW5hcnlPcC5oIgotI2luY2x1ZGUgIkZUTEV4Y2VwdGlvbkhhbmRs
ZXJNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgiCi0jaW5jbHVk
ZSAiRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgiCi0jaW5jbHVkZSAiRlRMSW5saW5lQ2FjaGVT
aXplLmgiCi0jaW5jbHVkZSAiRlRMSklUQ29kZS5oIgotI2luY2x1ZGUgIkZUTFRodW5rcy5oIgot
I2luY2x1ZGUgIkZUTFVud2luZEluZm8uaCIKLSNpbmNsdWRlICJMTFZNQVBJLmgiCi0jaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgotI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIgot
Ci1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBERkc7
Ci0KLXN0YXRpYyBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzRm9yKGNvbnN0IFN0YWNrTWFwczo6
UmVjb3JkJik7Ci0KLXN0YXRpYyB1aW50OF90KiBtbUFsbG9jYXRlQ29kZVNlY3Rpb24oCi0gICAg
dm9pZCogb3BhcXVlU3RhdGUsIHVpbnRwdHJfdCBzaXplLCB1bnNpZ25lZCBhbGlnbm1lbnQsIHVu
c2lnbmVkLCBjb25zdCBjaGFyKiBzZWN0aW9uTmFtZSkKLXsKLSAgICBTdGF0ZSYgc3RhdGUgPSAq
c3RhdGljX2Nhc3Q8U3RhdGUqPihvcGFxdWVTdGF0ZSk7Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NF
UlQoYWxpZ25tZW50IDw9IGppdEFsbG9jYXRpb25HcmFudWxlKTsKLSAgICAKLSAgICBSZWZQdHI8
RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0KLSAgICAgICAgc3RhdGUuZ3JhcGgubV92
bS5leGVjdXRhYmxlQWxsb2NhdG9yLmFsbG9jYXRlKAotICAgICAgICAgICAgc3RhdGUuZ3JhcGgu
bV92bSwgc2l6ZSwgc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFp
bCk7Ci0gICAgCi0gICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgLy8gU2lnbmFsIGZhaWx1cmUu
IFRoaXMgY29tcGlsYXRpb24gd2lsbCBnZXQgdG9zc2VkLgotICAgICAgICBzdGF0ZS5hbGxvY2F0
aW9uRmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZha2UgYW4gYWxsb2NhdGlv
biwgc2luY2UgTExWTSBjYW5ub3QgaGFuZGxlIGZhaWx1cmVzIGluIHRoZSBtZW1vcnkgbWFuYWdl
ci4KLSAgICAgICAgUmVmUHRyPERhdGFTZWN0aW9uPiBmYWtlU2VjdGlvbiA9IGFkb3B0UmVmKG5l
dyBEYXRhU2VjdGlvbihzaXplLCBqaXRBbGxvY2F0aW9uR3JhbnVsZSkpOwotICAgICAgICBzdGF0
ZS5qaXRDb2RlLT5hZGREYXRhU2VjdGlvbihmYWtlU2VjdGlvbik7Ci0gICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8dWludDhfdCo+KGZha2VTZWN0aW9uLT5iYXNlKCkpOwotICAgIH0KLSAgICAK
LSAgICAvLyBMTFZNIHVzZWQgdG8gcHV0IF9fY29tcGFjdF91bndpbmQgaW4gYSBjb2RlIHNlY3Rp
b24uIFdlIGtlZXAgdGhpcyBoZXJlIGRlZmVuc2l2ZWx5LAotICAgIC8vIGZvciBjbGllbnRzIHRo
YXQgdXNlIG9sZGVyIExMVk1zLgotICAgIGlmICghc3RyY21wKHNlY3Rpb25OYW1lLCBTRUNUSU9O
X05BTUUoImNvbXBhY3RfdW53aW5kIikpKSB7Ci0gICAgICAgIHN0YXRlLnVud2luZERhdGFTZWN0
aW9uID0gcmVzdWx0LT5zdGFydCgpOwotICAgICAgICBzdGF0ZS51bndpbmREYXRhU2VjdGlvblNp
emUgPSByZXN1bHQtPnNpemVJbkJ5dGVzKCk7Ci0gICAgfQotICAgIAotICAgIHN0YXRlLmppdENv
ZGUtPmFkZEhhbmRsZShyZXN1bHQpOwotICAgIHN0YXRlLmNvZGVTZWN0aW9uTmFtZXMuYXBwZW5k
KHNlY3Rpb25OYW1lKTsKLSAgICAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHJl
c3VsdC0+c3RhcnQoKSk7Ci19Ci0KLXN0YXRpYyB1aW50OF90KiBtbUFsbG9jYXRlRGF0YVNlY3Rp
b24oCi0gICAgdm9pZCogb3BhcXVlU3RhdGUsIHVpbnRwdHJfdCBzaXplLCB1bnNpZ25lZCBhbGln
bm1lbnQsIHVuc2lnbmVkIHNlY3Rpb25JRCwKLSAgICBjb25zdCBjaGFyKiBzZWN0aW9uTmFtZSwg
TExWTUJvb2wgaXNSZWFkT25seSkKLXsKLSAgICBVTlVTRURfUEFSQU0oc2VjdGlvbklEKTsKLSAg
ICBVTlVTRURfUEFSQU0oaXNSZWFkT25seSk7Ci0KLSAgICAvLyBBbGxvY2F0ZSB0aGUgR09UIGlu
IHRoZSBjb2RlIHNlY3Rpb24gdG8gbWFrZSBpdCByZWFjaGFibGUgZm9yIGFsbCBjb2RlLgotICAg
IGlmICghc3RyY21wKHNlY3Rpb25OYW1lLCBTRUNUSU9OX05BTUUoImdvdCIpKSkKLSAgICAgICAg
cmV0dXJuIG1tQWxsb2NhdGVDb2RlU2VjdGlvbihvcGFxdWVTdGF0ZSwgc2l6ZSwgYWxpZ25tZW50
LCBzZWN0aW9uSUQsIHNlY3Rpb25OYW1lKTsKLQotICAgIFN0YXRlJiBzdGF0ZSA9ICpzdGF0aWNf
Y2FzdDxTdGF0ZSo+KG9wYXF1ZVN0YXRlKTsKLQotICAgIFJlZlB0cjxEYXRhU2VjdGlvbj4gc2Vj
dGlvbiA9IGFkb3B0UmVmKG5ldyBEYXRhU2VjdGlvbihzaXplLCBhbGlnbm1lbnQpKTsKLQotICAg
IGlmICghc3RyY21wKHNlY3Rpb25OYW1lLCBTRUNUSU9OX05BTUUoImxsdm1fc3RhY2ttYXBzIikp
KQotICAgICAgICBzdGF0ZS5zdGFja21hcHNTZWN0aW9uID0gc2VjdGlvbjsKLSAgICBlbHNlIHsK
LSAgICAgICAgc3RhdGUuaml0Q29kZS0+YWRkRGF0YVNlY3Rpb24oc2VjdGlvbik7Ci0gICAgICAg
IHN0YXRlLmRhdGFTZWN0aW9uTmFtZXMuYXBwZW5kKHNlY3Rpb25OYW1lKTsKLSNpZiBPUyhEQVJX
SU4pCi0gICAgICAgIGlmICghc3RyY21wKHNlY3Rpb25OYW1lLCBTRUNUSU9OX05BTUUoImNvbXBh
Y3RfdW53aW5kIikpKSB7Ci0jZWxpZiBPUyhMSU5VWCkKLSAgICAgICAgaWYgKCFzdHJjbXAoc2Vj
dGlvbk5hbWUsIFNFQ1RJT05fTkFNRSgiZWhfZnJhbWUiKSkpIHsKLSNlbHNlCi0jZXJyb3IgIlVu
cmVjb2duaXplZCBPUyIKLSNlbmRpZgotICAgICAgICAgICAgc3RhdGUudW53aW5kRGF0YVNlY3Rp
b24gPSBzZWN0aW9uLT5iYXNlKCk7Ci0gICAgICAgICAgICBzdGF0ZS51bndpbmREYXRhU2VjdGlv
blNpemUgPSBzaXplOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDx1aW50OF90Kj4oc2VjdGlvbi0+YmFzZSgpKTsKLX0KLQotc3RhdGljIExMVk1Cb29sIG1tQXBw
bHlQZXJtaXNzaW9ucyh2b2lkKiwgY2hhcioqKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
c3RhdGljIHZvaWQgbW1EZXN0cm95KHZvaWQqKQotewotfQotCi1zdGF0aWMgdm9pZCBkdW1wRGF0
YVNlY3Rpb24oRGF0YVNlY3Rpb24qIHNlY3Rpb24sIGNvbnN0IGNoYXIqIHByZWZpeCkKLXsKLSAg
ICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc2VjdGlvbi0+c2l6ZSgpIC8gc2l6ZW9mKGludDY0
X3QpOyArK2opIHsKLSAgICAgICAgY2hhciBidWZbMzJdOwotICAgICAgICBpbnQ2NF90KiB3b3Jk
UG9pbnRlciA9IHN0YXRpY19jYXN0PGludDY0X3QqPihzZWN0aW9uLT5iYXNlKCkpICsgajsKLSAg
ICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIjB4JWx4Iiwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZz4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4od29yZFBvaW50ZXIpKSk7Ci0gICAg
ICAgIGRhdGFMb2dGKCIlcyUxNnM6IDB4JTAxNmxseFxuIiwgcHJlZml4LCBidWYsIHN0YXRpY19j
YXN0PGxvbmcgbG9uZz4oKndvcmRQb2ludGVyKSk7Ci0gICAgfQotfQotCi1zdGF0aWMgaW50IG9m
ZnNldE9mU3RhY2tSZWdpb24oU3RhY2tNYXBzOjpSZWNvcmRNYXAmIHJlY29yZE1hcCwgdWludDMy
X3Qgc3RhY2ttYXBJRCkKLXsKLSAgICBpZiAoc3RhY2ttYXBJRCA9PSBVSU5UX01BWCkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0
ZXIgPSByZWNvcmRNYXAuZmluZChzdGFja21hcElEKTsKLSAgICBSRUxFQVNFX0FTU0VSVChpdGVy
ICE9IHJlY29yZE1hcC5lbmQoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXRlci0+dmFsdWUuc2l6
ZSgpID09IDEpOwotICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXItPnZhbHVlWzBdLnJlY29yZC5sb2Nh
dGlvbnMuc2l6ZSgpID09IDEpOwotICAgIExvY2F0aW9uIGNhcHR1cmVkTG9jYXRpb24gPQotICAg
ICAgICBMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKG51bGxwdHIsIGl0ZXItPnZhbHVlWzBdLnJlY29y
ZC5sb2NhdGlvbnNbMF0pOwotICAgIFJFTEVBU0VfQVNTRVJUKGNhcHR1cmVkTG9jYXRpb24ua2lu
ZCgpID09IExvY2F0aW9uOjpSZWdpc3Rlcik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoY2FwdHVyZWRM
b2NhdGlvbi5ncHIoKSA9PSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgUkVMRUFT
RV9BU1NFUlQoIShjYXB0dXJlZExvY2F0aW9uLmFkZGVuZCgpICUgc2l6ZW9mKFJlZ2lzdGVyKSkp
OwotICAgIHJldHVybiBjYXB0dXJlZExvY2F0aW9uLmFkZGVuZCgpIC8gc2l6ZW9mKFJlZ2lzdGVy
KTsKLX0KLQotc3RhdGljIHZvaWQgZ2VuZXJhdGVJbmxpbmVJZlBvc3NpYmxlT3V0T2ZMaW5lSWZO
b3QoU3RhdGUmIHN0YXRlLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDQ2FsbEhlbHBl
cnMmIGNvZGUsIGNoYXIqIHN0YXJ0T2ZJbmxpbmVDb2RlLCBzaXplX3Qgc2l6ZU9mSW5saW5lQ29k
ZSwgY29uc3QgY2hhciogY29kZURlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
TGlua0J1ZmZlciYsIENDYWxsSGVscGVycyYsIGJvb2wgd2FzQ29tcGlsZWRJbmxpbmUpPiYgY2Fs
bGJhY2spCi17Ci0gICAgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+IGNvZGVMaW5rQnVmZmVy
OwotICAgIHNpemVfdCBhY3R1YWxDb2RlU2l6ZSA9IGNvZGUubV9hc3NlbWJsZXIuYnVmZmVyKCku
Y29kZVNpemUoKTsKLQotICAgIGlmIChhY3R1YWxDb2RlU2l6ZSA8PSBzaXplT2ZJbmxpbmVDb2Rl
KSB7Ci0gICAgICAgIExpbmtCdWZmZXIgY29kZUxpbmtCdWZmZXIodm0sIGNvZGUsIHN0YXJ0T2ZJ
bmxpbmVDb2RlLCBzaXplT2ZJbmxpbmVDb2RlKTsKLQotICAgICAgICAvLyBGaWxsIHRoZSByZW1h
aW5kZXIgb2YgdGhlIGlubGluZSBzcGFjZSB3aXRoIG5vcHMgdG8gYXZvaWQgY29uZnVzaW5nIHRo
ZSBkaXNhc3NlbWJsZXIuCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBc3NlbWJsZXJUeXBlX1Q6
OmZpbGxOb3BzKGJpdHdpc2VfY2FzdDxjaGFyKj4oc3RhcnRPZklubGluZUNvZGUpICsgYWN0dWFs
Q29kZVNpemUsIHNpemVPZklubGluZUNvZGUgLSBhY3R1YWxDb2RlU2l6ZSk7Ci0KLSAgICAgICAg
Y2FsbGJhY2soY29kZUxpbmtCdWZmZXIsIGNvZGUsIHRydWUpOwotCi0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoT3B0aW9uczo6YXNzZXJ0SUNTaXppbmcoKSB8fCBPcHRpb25zOjpk
dW1wRmFpbGVkSUNTaXppbmcoKSkgewotICAgICAgICBzdGF0aWMgc2l6ZV90IG1heFNpemUgPSAw
OwotICAgICAgICBpZiAobWF4U2l6ZSA8IGFjdHVhbENvZGVTaXplKQotICAgICAgICAgICAgbWF4
U2l6ZSA9IGFjdHVhbENvZGVTaXplOwotICAgICAgICBkYXRhTG9nRigiQUxFUlQ6IFVuZGVyLWVz
dGltYXRlZCBGVEwgSW5saW5lIENhY2hlIFNpemUgZm9yICVzOiBlc3RpbWF0ZWQgJXp1LCBhY3R1
YWwgJXp1LCBtYXggJXp1XG4iLCBjb2RlRGVzY3JpcHRpb24sIHNpemVPZklubGluZUNvZGUsIGFj
dHVhbENvZGVTaXplLCBtYXhTaXplKTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OmFzc2VydElDU2l6
aW5nKCkpCi0gICAgICAgICAgICBDUkFTSCgpOwotICAgIH0KLQotICAgIC8vIElmIHRoZXJlIGlz
bid0IGVub3VnaCBzcGFjZSBpbiB0aGUgcHJvdmlkZWQgaW5saW5lIGNvZGUgYXJlYSwgYWxsb2Nh
dGUgb3V0IG9mIGxpbmUKLSAgICAvLyBleGVjdXRhYmxlIG1lbW9yeSB0byBsaW5rIHRoZSBwcm92
aWRlZCBjb2RlLiBQbGFjZSBhIGp1bXAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKLSAgICAvLyBp
bmxpbmUgYXJlYSBhbmQganVtcCB0byB0aGUgb3V0IG9mIGxpbmUgY29kZS4gU2ltaWxhcmx5IHJl
dHVybiBieSBhcHBlbmRpbmcgYSBqdW1wCi0gICAgLy8gdG8gdGhlIHByb3ZpZGVkIGNvZGUgdGhh
dCBnb2VzIHRvIHRoZSBpbnN0cnVjdGlvbiBhZnRlciB0aGUgaW5saW5lIGNvZGUuCi0gICAgLy8g
RmlsbCB0aGUgbWlkZGxlIHdpdGggbm9wJ3MuCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcmV0
dXJuVG9NYWlubGluZSA9IGNvZGUuanVtcCgpOwotCi0gICAgLy8gQWxsb2NhdGUgb3V0IG9mIGxp
bmUgZXhlY3V0YWJsZSBtZW1vcnkgYW5kIGxpbmsgdGhlIHByb3ZpZGVkIGNvZGUgdGhlcmUuCi0g
ICAgY29kZUxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtCdWZmZXI+KHZtLCBjb2Rl
LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOwotCi0gICAgLy8gUGxhbnQg
YSBqbXAgaW4gdGhlIGlubGluZSBidWZmZXIgdG8gdGhlIG91dCBvZiBsaW5lIGNvZGUuCi0gICAg
TWFjcm9Bc3NlbWJsZXIgY2FsbFRvT3V0T2ZMaW5lQ29kZTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBqdW1wVG9PdXRPZkxpbmUgPSBjYWxsVG9PdXRPZkxpbmVDb2RlLmp1bXAoKTsKLSAgICBM
aW5rQnVmZmVyIGlubGluZUJ1ZmZlcih2bSwgY2FsbFRvT3V0T2ZMaW5lQ29kZSwgc3RhcnRPZklu
bGluZUNvZGUsIHNpemVPZklubGluZUNvZGUpOwotICAgIGlubGluZUJ1ZmZlci5saW5rKGp1bXBU
b091dE9mTGluZSwgY29kZUxpbmtCdWZmZXItPmVudHJ5cG9pbnQoKSk7Ci0KLSAgICAvLyBGaWxs
IHRoZSByZW1haW5kZXIgb2YgdGhlIGlubGluZSBzcGFjZSB3aXRoIG5vcHMgdG8gYXZvaWQgY29u
ZnVzaW5nIHRoZSBkaXNhc3NlbWJsZXIuCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkFzc2VtYmxlclR5
cGVfVDo6ZmlsbE5vcHMoYml0d2lzZV9jYXN0PGNoYXIqPihzdGFydE9mSW5saW5lQ29kZSkgKyBp
bmxpbmVCdWZmZXIuc2l6ZSgpLCBzaXplT2ZJbmxpbmVDb2RlIC0gaW5saW5lQnVmZmVyLnNpemUo
KSk7Ci0KLSAgICAvLyBMaW5rIHRoZSBlbmQgb2YgdGhlIG91dCBvZiBsaW5lIGNvZGUgdG8gcmln
aHQgYWZ0ZXIgdGhlIGlubGluZSBhcmVhLgotICAgIGNvZGVMaW5rQnVmZmVyLT5saW5rKHJldHVy
blRvTWFpbmxpbmUsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3Jl
YXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHN0YXJ0T2ZJbmxpbmVDb2RlKSkubGFiZWxBdE9mZnNl
dChzaXplT2ZJbmxpbmVDb2RlKSk7Ci0KLSAgICBjYWxsYmFjaygqY29kZUxpbmtCdWZmZXIuZ2V0
KCksIGNvZGUsIGZhbHNlKTsKLQotICAgIHN0YXRlLmZpbmFsaXplci0+b3V0T2ZMaW5lQ29kZUlu
Zm9zLmFwcGVuZChPdXRPZkxpbmVDb2RlSW5mbyhXVEZNb3ZlKGNvZGVMaW5rQnVmZmVyKSwgY29k
ZURlc2NyaXB0aW9uKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIERlc2NyaXB0b3JUeXBlPgot
dm9pZCBnZW5lcmF0ZUlDRmFzdFBhdGgoCi0gICAgU3RhdGUmIHN0YXRlLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgR2VuZXJhdGVkRnVuY3Rpb24gZ2VuZXJhdGVkRnVuY3Rpb24sCi0gICAgU3RhY2tN
YXBzOjpSZWNvcmRNYXAmIHJlY29yZE1hcCwgRGVzY3JpcHRvclR5cGUmIGljLCBzaXplX3Qgc2l6
ZU9mSUMsIGNvbnN0IGNoYXIqIGljTmFtZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS5ncmFwaC5t
X3ZtOwotCi0gICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNvcmRN
YXAuZmluZChpYy5zdGFja21hcElEKCkpOwotICAgIGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQo
KSkgewotICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICAKLSAgICBWZWN0b3I8U3RhY2tNYXBzOjpSZWNvcmRBbmRJbmRleD4mIHJlY29y
ZHMgPSBpdGVyLT52YWx1ZTsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChyZWNvcmRzLnNpemUo
KSA9PSBpYy5tX2dlbmVyYXRvcnMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSByZWNvcmRzLnNpemUoKTsgaS0tOykgewotICAgICAgICBTdGFja01hcHM6OlJlY29yZCYgcmVj
b3JkID0gcmVjb3Jkc1tpXS5yZWNvcmQ7Ci0gICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gaWMubV9n
ZW5lcmF0b3JzW2ldOwotCi0gICAgICAgIENDYWxsSGVscGVycyBmYXN0UGF0aEpJVCgmdm0sIGNv
ZGVCbG9jayk7Ci0gICAgICAgIGdlbmVyYXRvci5nZW5lcmF0ZUZhc3RQYXRoKGZhc3RQYXRoSklU
KTsKLSAgICAgICAgCi0gICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9Ci0gICAgICAgICAgICBiaXR3
aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIHJlY29yZC5pbnN0cnVjdGlvbk9m
ZnNldDsKLQotICAgICAgICBnZW5lcmF0ZUlubGluZUlmUG9zc2libGVPdXRPZkxpbmVJZk5vdChz
dGF0ZSwgdm0sIGNvZGVCbG9jaywgZmFzdFBhdGhKSVQsIHN0YXJ0T2ZJQywgc2l6ZU9mSUMsIGlj
TmFtZSwgWyZdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBDQ2FsbEhlbHBlcnMmLCBib29sKSB7
Ci0gICAgICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPnNpZGVDb2RlTGlua0J1ZmZlci0+bGluayhp
Yy5tX3Nsb3dQYXRoRG9uZVtpXSwKLSAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChz
dGFydE9mSUMgKyBzaXplT2ZJQykpOwotCi0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZ2Vu
ZXJhdG9yLnNsb3dQYXRoSnVtcCgpLAotICAgICAgICAgICAgICAgIHN0YXRlLmZpbmFsaXplci0+
c2lkZUNvZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGdlbmVyYXRvci5zbG93UGF0aEJlZ2luKCkp
KTsKLQotICAgICAgICAgICAgZ2VuZXJhdG9yLmZpbmFsaXplKGxpbmtCdWZmZXIsICpzdGF0ZS5m
aW5hbGl6ZXItPnNpZGVDb2RlTGlua0J1ZmZlcik7Ci0gICAgICAgIH0pOwotICAgIH0KLX0KLQot
c3RhdGljIHZvaWQgZ2VuZXJhdGVDaGVja0luSUNGYXN0UGF0aCgKLSAgICBTdGF0ZSYgc3RhdGUs
IENvZGVCbG9jayogY29kZUJsb2NrLCBHZW5lcmF0ZWRGdW5jdGlvbiBnZW5lcmF0ZWRGdW5jdGlv
biwKLSAgICBTdGFja01hcHM6OlJlY29yZE1hcCYgcmVjb3JkTWFwLCBDaGVja0luRGVzY3JpcHRv
ciYgaWMsIHNpemVfdCBzaXplT2ZJQykKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS5ncmFwaC5tX3Zt
OwotCi0gICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNvcmRNYXAu
ZmluZChpYy5zdGFja21hcElEKCkpOwotICAgIGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQoKSkg
ewotICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICAKLSAgICBWZWN0b3I8U3RhY2tNYXBzOjpSZWNvcmRBbmRJbmRleD4mIHJlY29yZHMg
PSBpdGVyLT52YWx1ZTsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChyZWNvcmRzLnNpemUoKSA9
PSBpYy5tX2dlbmVyYXRvcnMuc2l6ZSgpKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IHJlY29y
ZHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBy
ZWNvcmRzW2ldLnJlY29yZDsKLSAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBpYy5tX2dlbmVyYXRv
cnNbaV07Ci0KLSAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKmdlbmVyYXRv
ci5tX3N0dWI7Ci0gICAgICAgIGF1dG8gY2FsbCA9IGdlbmVyYXRvci5tX3Nsb3dDYWxsOwotICAg
ICAgICBhdXRvIHNsb3dQYXRoQmVnaW4gPSBnZW5lcmF0b3IubV9iZWdpbkxhYmVsOwotCi0gICAg
ICAgIENDYWxsSGVscGVycyBmYXN0UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7Ci0gICAgICAgIAot
ICAgICAgICBhdXRvIGp1bXAgPSBmYXN0UGF0aEpJVC5wYXRjaGFibGVKdW1wKCk7Ci0gICAgICAg
IGF1dG8gZG9uZSA9IGZhc3RQYXRoSklULmxhYmVsKCk7Ci0KLSAgICAgICAgY2hhciogc3RhcnRP
ZklDID0KLSAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24p
ICsgcmVjb3JkLmluc3RydWN0aW9uT2Zmc2V0OwotCi0gICAgICAgIGF1dG8gcG9zdExpbmsgPSBb
Jl0gKExpbmtCdWZmZXImIGZhc3RQYXRoLCBDQ2FsbEhlbHBlcnMmLCBib29sKSB7Ci0gICAgICAg
ICAgICBMaW5rQnVmZmVyJiBzbG93UGF0aCA9ICpzdGF0ZS5maW5hbGl6ZXItPnNpZGVDb2RlTGlu
a0J1ZmZlcjsKLQotICAgICAgICAgICAgc3RhdGUuZmluYWxpemVyLT5zaWRlQ29kZUxpbmtCdWZm
ZXItPmxpbmsoCi0gICAgICAgICAgICAgICAgaWMubV9zbG93UGF0aERvbmVbaV0sIENvZGVMb2Nh
dGlvbkxhYmVsKHN0YXJ0T2ZJQyArIHNpemVPZklDKSk7Ci0KLSAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsIHNsb3dQYXRoQmVnaW5Mb2MgPSBzbG93UGF0aC5sb2NhdGlvbk9mKHNsb3dQYXRo
QmVnaW4pOwotICAgICAgICAgICAgZmFzdFBhdGgubGluayhqdW1wLCBzbG93UGF0aEJlZ2luTG9j
KTsKLQotICAgICAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb24gPSBz
bG93UGF0aC5sb2NhdGlvbk9mKGNhbGwpOwotCi0gICAgICAgICAgICBzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb0RvbmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRy
KAotICAgICAgICAgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9jYXRpb25P
Zihkb25lKSk7Ci0KLSAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCA9
IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgICAgICAg
ICAgY2FsbFJldHVybkxvY2F0aW9uLCBmYXN0UGF0aC5sb2NhdGlvbk9mKGp1bXApKTsKLSAgICAg
ICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGxSZXR1cm5Mb2NhdGlvbjsK
LSAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UgPSBNYWNyb0Fz
c2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICAgICAgICAgIGNhbGxS
ZXR1cm5Mb2NhdGlvbiwgc2xvd1BhdGhCZWdpbkxvYyk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
Z2VuZXJhdGVJbmxpbmVJZlBvc3NpYmxlT3V0T2ZMaW5lSWZOb3Qoc3RhdGUsIHZtLCBjb2RlQmxv
Y2ssIGZhc3RQYXRoSklULCBzdGFydE9mSUMsIHNpemVPZklDLCAiQ2hlY2tJbiIsIHBvc3RMaW5r
KTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGdlbmVyYXRlQmluYXJ5T3BJQ0Zhc3RQYXRoKAot
ICAgIFN0YXRlJiBzdGF0ZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEdlbmVyYXRlZEZ1bmN0aW9u
IGdlbmVyYXRlZEZ1bmN0aW9uLAotICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwJiByZWNvcmRNYXAs
IEJpbmFyeU9wRGVzY3JpcHRvciYgaWMpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUuZ3JhcGgubV92
bTsKLSAgICBzaXplX3Qgc2l6ZU9mSUMgPSBpYy5zaXplKCk7Ci0KLSAgICBTdGFja01hcHM6OlJl
Y29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKGljLnN0YWNrbWFwSUQoKSk7
Ci0gICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKQotICAgICAgICByZXR1cm47IC8vIEl0
IHdhcyBvcHRpbWl6ZWQgb3V0LgotCi0gICAgVmVjdG9yPFN0YWNrTWFwczo6UmVjb3JkQW5kSW5k
ZXg+JiByZWNvcmRzID0gaXRlci0+dmFsdWU7Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChyZWNvcmRz
LnNpemUoKSA9PSBpYy5tX3Nsb3dQYXRoU3RhcnRzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSByZWNvcmRzLnNpemUoKTsgaS0tOykgewotICAgICAgICBTdGFja01hcHM6OlJlY29y
ZCYgcmVjb3JkID0gcmVjb3Jkc1tpXS5yZWNvcmQ7Ci0KLSAgICAgICAgQ0NhbGxIZWxwZXJzIGZh
c3RQYXRoSklUKCZ2bSwgY29kZUJsb2NrKTsKLQotICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVj
b3JkLmxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKTsKLSAgICAgICAgR1BSUmVnIGxlZnQgPSByZWNv
cmQubG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwotICAgICAgICBHUFJSZWcgcmlnaHQgPSByZWNv
cmQubG9jYXRpb25zWzJdLmRpcmVjdEdQUigpOwotICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVn
aXN0ZXJzID0gdXNlZFJlZ2lzdGVyc0ZvcihyZWNvcmQpOwotCi0gICAgICAgIENDYWxsSGVscGVy
czo6SnVtcCBkb25lOwotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1BhdGhTdGFydDsK
LQotICAgICAgICBnZW5lcmF0ZUJpbmFyeU9wRmFzdFBhdGgoaWMsIGZhc3RQYXRoSklULCByZXN1
bHQsIGxlZnQsIHJpZ2h0LCB1c2VkUmVnaXN0ZXJzLCBkb25lLCBzbG93UGF0aFN0YXJ0KTsKLQot
ICAgICAgICBjaGFyKiBzdGFydE9mSUMgPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1
bmN0aW9uKSArIHJlY29yZC5pbnN0cnVjdGlvbk9mZnNldDsKLSAgICAgICAgZ2VuZXJhdGVJbmxp
bmVJZlBvc3NpYmxlT3V0T2ZMaW5lSWZOb3Qoc3RhdGUsIHZtLCBjb2RlQmxvY2ssIGZhc3RQYXRo
SklULCBzdGFydE9mSUMsIHNpemVPZklDLCBpYy5uYW1lKCksIFsmXSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlciwgQ0NhbGxIZWxwZXJzJiwgYm9vbCkgewotICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKGRvbmUsIENvZGVMb2NhdGlvbkxhYmVsKHN0YXJ0T2ZJQyArIHNpemVPZklDKSk7Ci0gICAg
ICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPnNpZGVDb2RlTGlua0J1ZmZlci0+bGluayhpYy5tX3Ns
b3dQYXRoRG9uZVtpXSwgQ29kZUxvY2F0aW9uTGFiZWwoc3RhcnRPZklDICsgc2l6ZU9mSUMpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dQYXRoU3RhcnQs
IHN0YXRlLmZpbmFsaXplci0+c2lkZUNvZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGljLm1fc2xv
d1BhdGhTdGFydHNbaV0pKTsKLSAgICAgICAgfSk7Ci0gICAgfQotfQotCi0jaWYgRU5BQkxFKE1B
U01fUFJPQkUpCi0KLXN0YXRpYyB2b2lkIGdlbmVyYXRlUHJvYmUoCi0gICAgU3RhdGUmIHN0YXRl
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgR2VuZXJhdGVkRnVuY3Rpb24gZ2VuZXJhdGVkRnVuY3Rp
b24sCi0gICAgU3RhY2tNYXBzOjpSZWNvcmRNYXAmIHJlY29yZE1hcCwgUHJvYmVEZXNjcmlwdG9y
JiBpYykKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS5ncmFwaC5tX3ZtOwotICAgIHNpemVfdCBzaXpl
T2ZJQyA9IHNpemVPZlByb2JlKCk7Ci0KLSAgICBTdGFja01hcHM6OlJlY29yZE1hcDo6aXRlcmF0
b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKGljLnN0YWNrbWFwSUQoKSk7Ci0gICAgaWYgKGl0ZXIg
PT0gcmVjb3JkTWFwLmVuZCgpKQotICAgICAgICByZXR1cm47IC8vIEl0IHdhcyBvcHRpbWl6ZWQg
b3V0LgotCi0gICAgQ0NhbGxIZWxwZXJzIGZhc3RQYXRoSklUKCZ2bSwgY29kZUJsb2NrKTsKLSAg
ICBWZWN0b3I8U3RhY2tNYXBzOjpSZWNvcmRBbmRJbmRleD4mIHJlY29yZHMgPSBpdGVyLT52YWx1
ZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSByZWNvcmRzLnNpemUoKTsgaS0tOykgewotICAgICAg
ICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gcmVjb3Jkc1tpXS5yZWNvcmQ7Ci0KLSAgICAg
ICAgZmFzdFBhdGhKSVQucHJvYmUoaWMucHJvYmVGdW5jdGlvbigpKTsKLSAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGRvbmUgPSBmYXN0UGF0aEpJVC5qdW1wKCk7Ci0KLSAgICAgICAgY2hhciog
c3RhcnRPZklDID0gYml0d2lzZV9jYXN0PGNoYXIqPihnZW5lcmF0ZWRGdW5jdGlvbikgKyByZWNv
cmQuaW5zdHJ1Y3Rpb25PZmZzZXQ7Ci0gICAgICAgIGdlbmVyYXRlSW5saW5lSWZQb3NzaWJsZU91
dE9mTGluZUlmTm90KHN0YXRlLCB2bSwgY29kZUJsb2NrLCBmYXN0UGF0aEpJVCwgc3RhcnRPZklD
LCBzaXplT2ZJQywgIlByb2JlIiwgWyZdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBDQ2FsbEhl
bHBlcnMmLCBib29sKSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZG9uZSwgQ29kZUxv
Y2F0aW9uTGFiZWwoc3RhcnRPZklDICsgc2l6ZU9mSUMpKTsKLSAgICAgICAgfSk7Ci0gICAgfQot
fQotCi0jZW5kaWYgLy8gRU5BQkxFKE1BU01fUFJPQkUpCi0KLXN0YXRpYyBSZWdpc3RlclNldCB1
c2VkUmVnaXN0ZXJzRm9yKGNvbnN0IFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQpCi17Ci0gICAg
aWYgKE9wdGlvbnM6OmFzc3VtZUFsbFJlZ3NJbkZUTElDQXJlTGl2ZSgpKQotICAgICAgICByZXR1
cm4gUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpOwotICAgIHJldHVybiBSZWdpc3RlclNldChy
ZWNvcmQudXNlZFJlZ2lzdGVyU2V0KCksIFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJz
KCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsVHlwZT4KLXZvaWQgYWRqdXN0Q2FsbElD
c0ZvclN0YWNrbWFwcyhWZWN0b3I8Q2FsbFR5cGU+JiBjYWxscywgU3RhY2tNYXBzOjpSZWNvcmRN
YXAmIHJlY29yZE1hcCwgRXhjZXB0aW9uSGFuZGxlck1hbmFnZXImIGV4Y2VwdGlvbkhhbmRsZXJN
YW5hZ2VyKQotewotICAgIC8vIEhhbmRsaW5nIEpTIGNhbGxzIGlzIHdlaXJkOiB3ZSBuZWVkIHRv
IGVuc3VyZSB0aGF0IHdlIHNvcnQgdGhlbSBieSB0aGUgUEMgaW4gTExWTQotICAgIC8vIGdlbmVy
YXRlZCBjb2RlLiBUaGF0IGltcGxpZXMgZmlyc3QgcHJ1bmluZyB0aGUgb25lcyB0aGF0IExMVk0g
ZGlkbid0IGdlbmVyYXRlLgotCi0gICAgVmVjdG9yPENhbGxUeXBlPiBvbGRDYWxsczsKLSAgICBv
bGRDYWxscy5zd2FwKGNhbGxzKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
b2xkQ2FsbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQ2FsbFR5cGUmIGNhbGwgPSBvbGRDYWxs
c1tpXTsKLSAgICAgICAgCi0gICAgICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwOjppdGVyYXRvciBp
dGVyID0gcmVjb3JkTWFwLmZpbmQoY2FsbC5zdGFja21hcElEKCkpOwotICAgICAgICBpZiAoaXRl
ciA9PSByZWNvcmRNYXAuZW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0g
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBpdGVyLT52YWx1ZS5zaXplKCk7ICsraikg
ewotICAgICAgICAgICAgQ2FsbFR5cGUgY29weSA9IGNhbGw7Ci0gICAgICAgICAgICBjb3B5Lm1f
aW5zdHJ1Y3Rpb25PZmZzZXQgPSBpdGVyLT52YWx1ZVtqXS5yZWNvcmQuaW5zdHJ1Y3Rpb25PZmZz
ZXQ7Ci0gICAgICAgICAgICBjb3B5LnNldENhbGxTaXRlSW5kZXgoZXhjZXB0aW9uSGFuZGxlck1h
bmFnZXIucHJvY3VyZUNhbGxTaXRlSW5kZXgoaXRlci0+dmFsdWVbal0uaW5kZXgsIGNvcHkpKTsK
LSAgICAgICAgICAgIGNvcHkuc2V0Q29ycmVzcG9uZGluZ0dlbmVyaWNVbndpbmRPU1JFeGl0KGV4
Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmdldENhbGxPU1JFeGl0KGl0ZXItPnZhbHVlW2pdLmluZGV4
LCBjb3B5KSk7Ci0KLSAgICAgICAgICAgIGNhbGxzLmFwcGVuZChjb3B5KTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHN0ZDo6c29ydChjYWxscy5iZWdpbigpLCBjYWxscy5lbmQoKSk7Ci19Ci0K
LXN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKLSAgICBTdGF0ZSYgc3Rh
dGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlKiBqaXRDb2RlLCBHZW5lcmF0ZWRGdW5j
dGlvbiBnZW5lcmF0ZWRGdW5jdGlvbiwKLSAgICBTdGFja01hcHM6OlJlY29yZE1hcCYgcmVjb3Jk
TWFwKQotewotICAgIEdyYXBoJiBncmFwaCA9IHN0YXRlLmdyYXBoOwotICAgIFZNJiB2bSA9IGdy
YXBoLm1fdm07Ci0gICAgU3RhY2tNYXBzJiBzdGFja21hcHMgPSBqaXRDb2RlLT5zdGFja21hcHM7
Ci0KLSAgICBFeGNlcHRpb25IYW5kbGVyTWFuYWdlciBleGNlcHRpb25IYW5kbGVyTWFuYWdlcihz
dGF0ZSk7Ci0gICAgCi0gICAgaW50IGxvY2Fsc09mZnNldCA9IG9mZnNldE9mU3RhY2tSZWdpb24o
cmVjb3JkTWFwLCBzdGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQpICsgZ3JhcGgubV9uZXh0TWFjaGlu
ZUxvY2FsOwotICAgIGludCB2YXJhcmdzU3BpbGxTbG90c09mZnNldCA9IG9mZnNldE9mU3RhY2tS
ZWdpb24ocmVjb3JkTWFwLCBzdGF0ZS52YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQpOwotICAg
IGludCBvc3JFeGl0RnJvbUdlbmVyaWNVbndpbmRTdGFja1NwaWxsU2xvdCAgPSBvZmZzZXRPZlN0
YWNrUmVnaW9uKHJlY29yZE1hcCwgc3RhdGUuZXhjZXB0aW9uSGFuZGxpbmdTcGlsbFNsb3RTdGFj
a21hcElEKTsKLSAgICBqaXRDb2RlLT5vc3JFeGl0RnJvbUdlbmVyaWNVbndpbmRTdGFja1NwaWxs
U2xvdCA9IG9zckV4aXRGcm9tR2VuZXJpY1Vud2luZFN0YWNrU3BpbGxTbG90OwotICAgIAotICAg
IGZvciAodW5zaWduZWQgaSA9IGdyYXBoLm1faW5saW5lVmFyaWFibGVEYXRhLnNpemUoKTsgaS0t
OykgewotICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGdyYXBoLm1f
aW5saW5lVmFyaWFibGVEYXRhW2ldLmlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgCi0gICAgICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCi0g
ICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlciArPSBsb2Nh
bHNPZmZzZXQ7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOyBhcmd1bWVudC0tID4gMTspIHsKLSAgICAg
ICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzW2FyZ3VtZW50XSA9Ci0gICAgICAgICAg
ICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNbYXJndW1lbnRdLndpdGhMb2NhbHNPZmZz
ZXQobG9jYWxzT2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGlubGlu
ZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewotICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1l
LT5jYWxsZWVSZWNvdmVyeSA9Ci0gICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5jYWxs
ZWVSZWNvdmVyeS53aXRoTG9jYWxzT2Zmc2V0KGxvY2Fsc09mZnNldCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoZ3JhcGguaGFzRGVidWdnZXJFbmFibGVkKCkpCi0gICAgICAgICAgICBjb2Rl
QmxvY2stPnNldFNjb3BlUmVnaXN0ZXIoY29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkgKyBsb2Nh
bHNPZmZzZXQpOwotICAgIH0KLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgc3RhY2tP
dmVyZmxvd0V4Y2VwdGlvbjsKLQotICAgIHsKLSAgICAgICAgQ0NhbGxIZWxwZXJzIGNoZWNrSklU
KCZ2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgaXQn
cyBwZXJmZWN0bHkgZmFpciB0byBqdXN0IGJsb3cgYXdheSBhbGwgc3RhdGUgYW5kIHJlc3RvcmUg
dGhlCi0gICAgICAgIC8vIEpTIEpJVCB2aWV3IG9mIHRoZSB1bml2ZXJzZS4KLSAgICAgICAgY2hl
Y2tKSVQuY29weUNhbGxlZVNhdmVzVG9WTUNhbGxlZVNhdmVzQnVmZmVyKCk7Ci0gICAgICAgIGNo
ZWNrSklULm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKLSAgICAgICAgY2hlY2tKSVQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgY2FsbExvb2t1cEV4Y2VwdGlvbkhhbmRsZXIgPSBjaGVja0pJVC5jYWxsKCk7Ci0gICAg
ICAgIGNoZWNrSklULmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKLQotICAgICAgICBzdGFja092
ZXJmbG93RXhjZXB0aW9uID0gY2hlY2tKSVQubGFiZWwoKTsKLSAgICAgICAgY2hlY2tKSVQuY29w
eUNhbGxlZVNhdmVzVG9WTUNhbGxlZVNhdmVzQnVmZmVyKCk7Ci0gICAgICAgIGNoZWNrSklULm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKLSAgICAgICAgY2hlY2tKSVQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2Fs
bExvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgPSBjaGVja0pJVC5jYWxsKCk7
Ci0gICAgICAgIGNoZWNrSklULmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKLQotICAgICAgICBh
dXRvIGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtCdWZmZXI+KAotICAgICAgICAg
ICAgdm0sIGNoZWNrSklULCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAg
ICAgIGlmIChsaW5rQnVmZmVyLT5kaWRGYWlsVG9BbGxvY2F0ZSgpKSB7Ci0gICAgICAgICAgICBz
dGF0ZS5hbGxvY2F0aW9uRmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxMb29rdXBFeGNlcHRpb25IYW5kbGVy
LCBGdW5jdGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSk7Ci0gICAgICAgIGxpbmtCdWZm
ZXItPmxpbmsoY2FsbExvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUsIEZ1bmN0
aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUpKTsKLQotICAgICAg
ICBzdGF0ZS5maW5hbGl6ZXItPmhhbmRsZUV4Y2VwdGlvbnNMaW5rQnVmZmVyID0gV1RGTW92ZShs
aW5rQnVmZmVyKTsKLSAgICB9Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5qaXRDb2RlLT5v
c3JFeGl0LnNpemUoKSA9PSAwKTsKLSAgICBIYXNoTWFwPE9TUkV4aXREZXNjcmlwdG9yKiwgT1NS
RXhpdERlc2NyaXB0b3JJbXBsKj4gZ2VuZXJpY1Vud2luZE9TUkV4aXREZXNjcmlwdG9yczsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUuaml0Q29kZS0+b3NyRXhpdERlc2NyaXB0
b3JzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIE9TUkV4aXREZXNjcmlwdG9yKiBleGl0RGVzY3Jp
cHRvciA9ICZzdGF0ZS5qaXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRvcnNbaV07Ci0gICAgICAgIGF1
dG8gaXRlciA9IHJlY29yZE1hcC5maW5kKGV4aXREZXNjcmlwdG9yLT5tX3N0YWNrbWFwSUQpOwot
ICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpIHsKLSAgICAgICAgICAgIC8vIEl0
IHdhcyBvcHRpbWl6ZWQgb3V0LgotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICBPU1JFeGl0RGVzY3JpcHRvckltcGwmIGV4aXREZXNjcmlwdG9ySW1wbCA9IHN0YXRl
Lm9zckV4aXREZXNjcmlwdG9ySW1wbHNbaV07Ci0gICAgICAgIGlmIChleGl0RGVzY3JpcHRvcklt
cGwubV9raW5kID09IEdlbmVyaWNVbndpbmQpCi0gICAgICAgICAgICBnZW5lcmljVW53aW5kT1NS
RXhpdERlc2NyaXB0b3JzLmFkZChleGl0RGVzY3JpcHRvciwgJmV4aXREZXNjcmlwdG9ySW1wbCk7
Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gZXhpdERlc2NyaXB0b3ItPm1fdmFsdWVzLnNp
emUoKTsgai0tOykKLSAgICAgICAgICAgIGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlc1tqXSA9IGV4
aXREZXNjcmlwdG9yLT5tX3ZhbHVlc1tqXS53aXRoTG9jYWxzT2Zmc2V0KGxvY2Fsc09mZnNldCk7
Ci0gICAgICAgIGZvciAoRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXph
dGlvbiA6IGV4aXREZXNjcmlwdG9yLT5tX21hdGVyaWFsaXphdGlvbnMpCi0gICAgICAgICAgICBt
YXRlcmlhbGl6YXRpb24tPmFjY291bnRGb3JMb2NhbHNPZmZzZXQobG9jYWxzT2Zmc2V0KTsKLQot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyBqKysp
IHsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1aW50MzJfdCBzdGFja21hcFJlY29y
ZEluZGV4ID0gaXRlci0+dmFsdWVbal0uaW5kZXg7Ci0gICAgICAgICAgICAgICAgT1NSRXhpdCBl
eGl0KGV4aXREZXNjcmlwdG9yLCBleGl0RGVzY3JpcHRvckltcGwubV9raW5kLCBleGl0RGVzY3Jp
cHRvckltcGwsIHN0YWNrbWFwUmVjb3JkSW5kZXgpOwotICAgICAgICAgICAgICAgIHN0YXRlLmpp
dENvZGUtPm9zckV4aXQuYXBwZW5kKGV4aXQpOwotICAgICAgICAgICAgICAgIHN0YXRlLmZpbmFs
aXplci0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IHN0YXRlLmppdENvZGUtPm9zckV4
aXQubGFzdCgpOwotICAgICAgICAgICAgaWYgKGV4aXQud2lsbEFycml2ZUF0RXhpdEZyb21JbmRp
cmVjdEV4Y2VwdGlvbkNoZWNrKCkpIHsKLSAgICAgICAgICAgICAgICBTdGFja01hcHM6OlJlY29y
ZCYgcmVjb3JkID0gaXRlci0+dmFsdWVbal0ucmVjb3JkOwotICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGV4aXREZXNjcmlwdG9ySW1wbC5tX3NlbWFudGljQ29kZU9yaWdpbkZvckNhbGxG
cmFtZUhlYWRlci5pc1NldCgpKTsKLSAgICAgICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxT
aXRlSW5kZXggPSBzdGF0ZS5qaXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChl
eGl0RGVzY3JpcHRvckltcGwubV9zZW1hbnRpY0NvZGVPcmlnaW5Gb3JDYWxsRnJhbWVIZWFkZXIp
OwotICAgICAgICAgICAgICAgIGV4aXQubV9leGNlcHRpb25IYW5kbGVyQ2FsbFNpdGVJbmRleCA9
IGNhbGxTaXRlSW5kZXg7Ci0KLSAgICAgICAgICAgICAgICBPU1JFeGl0KiBjYWxsT3BlcmF0aW9u
RXhpdCA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgaWYgKGV4aXREZXNjcmlwdG9ySW1wbC5t
X2V4Y2VwdGlvblR5cGUgPT0gRXhjZXB0aW9uVHlwZTo6QmluYXJ5T3BHZW5lcmF0b3IpIHsKLSAg
ICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuYWRkTmV3Q2FsbE9wZXJh
dGlvbkV4aXQoaXRlci0+dmFsdWVbal0uaW5kZXgsIHN0YXRlLmppdENvZGUtPm9zckV4aXQuc2l6
ZSgpIC0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25FeGl0ID0gJmV4aXQ7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhh
bmRsZXJNYW5hZ2VyLmFkZE5ld0V4aXQoaXRlci0+dmFsdWVbal0uaW5kZXgsIHN0YXRlLmppdENv
ZGUtPm9zckV4aXQuc2l6ZSgpIC0gMSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaWYgKGV4aXREZXNjcmlwdG9ySW1wbC5tX2V4Y2VwdGlvblR5cGUgPT0gRXhjZXB0aW9uVHlw
ZTo6R2V0QnlJZCB8fCBleGl0RGVzY3JpcHRvckltcGwubV9leGNlcHRpb25UeXBlID09IEV4Y2Vw
dGlvblR5cGU6OlB1dEJ5SWQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgY3JlYXRlIHR3
byBkaWZmZXJlbnQgT1NSRXhpdHMgZm9yIEdldEJ5SWQgYW5kIFB1dEJ5SWQuCi0gICAgICAgICAg
ICAgICAgICAgIC8vIE9uZSBleGl0IHRoYXQgd2lsbCBiZSBhcnJpdmVkIGF0IGZyb20gdGhlIGdl
bmVyaWNVbndpbmQgZXhjZXB0aW9uIGhhbmRsZXIgcGF0aCwKLSAgICAgICAgICAgICAgICAgICAg
Ly8gYW5kIHRoZSBvdGhlciB0aGF0IHdpbGwgYmUgYXJyaXZlZCBhdCBmcm9tIHRoZSBjYWxsT3Bl
cmF0aW9uIGV4Y2VwdGlvbiBoYW5kbGVyIHBhdGguCi0gICAgICAgICAgICAgICAgICAgIC8vIFRo
aXMgY29kZSBoZXJlIGdlbmVyYXRlcyB0aGUgc2Vjb25kIGNhbGxPcGVyYXRpb24gdmFyaWFudC4K
LSAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleCA9IGl0ZXIt
PnZhbHVlW2pdLmluZGV4OwotICAgICAgICAgICAgICAgICAgICBPU1JFeGl0IGV4aXQoZXhpdERl
c2NyaXB0b3IsIEV4Y2VwdGlvbkNoZWNrLCBleGl0RGVzY3JpcHRvckltcGwsIHN0YWNrbWFwUmVj
b3JkSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZXhpdERlc2NyaXB0b3JJbXBsLm1f
ZXhjZXB0aW9uVHlwZSA9PSBFeGNlcHRpb25UeXBlOjpHZXRCeUlkKQotICAgICAgICAgICAgICAg
ICAgICAgICAgZXhpdC5tX2V4Y2VwdGlvblR5cGUgPSBFeGNlcHRpb25UeXBlOjpHZXRCeUlkQ2Fs
bE9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICAgICAgZXhpdC5tX2V4Y2VwdGlvblR5cGUgPSBFeGNlcHRpb25UeXBlOjpQdXRCeUlkQ2FsbE9w
ZXJhdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4
ID0gc3RhdGUuaml0Q29kZS0+Y29tbW9uLmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoZXhpdERlc2Ny
aXB0b3JJbXBsLm1fc2VtYW50aWNDb2RlT3JpZ2luRm9yQ2FsbEZyYW1lSGVhZGVyKTsKLSAgICAg
ICAgICAgICAgICAgICAgZXhpdC5tX2V4Y2VwdGlvbkhhbmRsZXJDYWxsU2l0ZUluZGV4ID0gY2Fs
bFNpdGVJbmRleDsKLQotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5qaXRDb2RlLT5vc3JFeGl0
LmFwcGVuZChleGl0KTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuZmluYWxpemVyLT5vc3JF
eGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwotCi0gICAgICAgICAgICAgICAg
ICAgIGV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmFkZE5ld0NhbGxPcGVyYXRpb25FeGl0KGl0ZXIt
PnZhbHVlW2pdLmluZGV4LCBzdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSAtIDEpOwotICAg
ICAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uRXhpdCA9ICZzdGF0ZS5qaXRDb2RlLT5vc3JF
eGl0Lmxhc3QoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBCaW5h
cnlPcHMgYW5kIEdldEJ5SWRzIGhhdmUgYW4gaW50ZXJlc3RpbmcgcmVnaXN0ZXIgcHJlc2VydmF0
aW9uIHN0b3J5LAotICAgICAgICAgICAgICAgIC8vIHNlZSBjb21tZW50IGJlbG93IGF0IEdldEJ5
SWQgdG8gcmVhZCBhYm91dCBpdC4KLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAg
IC8vIFdlIHNldCB0aGUgcmVnaXN0ZXJzIG5lZWRpbmcgc3BpbGxhZ2UgaGVyZSBiZWNhdXNlIHRo
ZXkgbmVlZCB0byBiZSBzZXQKLSAgICAgICAgICAgICAgICAvLyBiZWZvcmUgd2UgZ2VuZXJhdGUg
T1NSIGV4aXRzIHNvIHRoZSBleGl0IGtub3dzIHRvIGRvIHRoZSBwcm9wZXIgcmVjb3ZlcnkuCi0g
ICAgICAgICAgICAgICAgaWYgKGV4aXREZXNjcmlwdG9ySW1wbC5tX2V4Y2VwdGlvblR5cGUgPT0g
RXhjZXB0aW9uVHlwZTo6SlNDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIENhbGwgcGF0
Y2hwb2ludHMgbWlnaHQgaGF2ZSB2YWx1ZXMgd2Ugd2FudCB0byBkbyB2YWx1ZSByZWNvdmVyeQot
ICAgICAgICAgICAgICAgICAgICAvLyBvbiBpbnNpZGUgdm9sYXRpbGUgcmVnaXN0ZXJzLiBXZSBu
ZWVkIHRvIGNvbGxlY3QgdGhlIHZvbGF0aWxlCi0gICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lz
dGVycyB3ZSB3YW50IHRvIGRvIHZhbHVlIHJlY292ZXJ5IG9uIGhlcmUgYmVjYXVzZSB0aGV5IG11
c3QKLSAgICAgICAgICAgICAgICAgICAgLy8gYmUgcHJlc2VydmVkIHRvIHRoZSBzdGFjayBiZWZv
cmUgdGhlIGNhbGwsIHRoYXQgd2F5IHRoZSBPU1IgZXhpdAotICAgICAgICAgICAgICAgICAgICAv
LyBleGNlcHRpb24gaGFuZGxlciBjYW4gcmVjb3ZlciB0aGVtIGludG8gdGhlIHByb3BlciByZWdp
c3RlcnMuCi0gICAgICAgICAgICAgICAgICAgIGV4aXQuZ2F0aGVyUmVnaXN0ZXJzVG9TcGlsbEZv
ckNhbGxJZkV4Y2VwdGlvbihzdGFja21hcHMsIHJlY29yZCk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChleGl0RGVzY3JpcHRvckltcGwubV9leGNlcHRpb25UeXBlID09IEV4Y2VwdGlvblR5
cGU6OkdldEJ5SWQgfHwgZXhpdERlc2NyaXB0b3JJbXBsLm1fZXhjZXB0aW9uVHlwZSA9PSBFeGNl
cHRpb25UeXBlOjpCaW5hcnlPcEdlbmVyYXRvcikgewotICAgICAgICAgICAgICAgICAgICBHUFJS
ZWcgcmVzdWx0ID0gcmVjb3JkLmxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKTsKLSAgICAgICAgICAg
ICAgICAgICAgUmVnaXN0ZXJTZXQgcmVnaXN0ZXJzTmVlZGVkRm9yT1NSRXhpdCA9IHJlY29yZC51
c2VkUmVnaXN0ZXJTZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlZ2lzdGVyc05lZWRl
ZEZvck9TUkV4aXQuZ2V0KHJlc3VsdCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uRXhpdC0+cmVnaXN0ZXJzVG9QcmVzZXJ2ZUZvckNhbGxUaGF0TWlnaHRUaHJvdy5zZXQo
cmVzdWx0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgRXhpdFRodW5rR2VuZXJhdG9yIGV4aXRUaHVua0dlbmVyYXRvcihzdGF0ZSk7Ci0g
ICAgZXhpdFRodW5rR2VuZXJhdG9yLmVtaXRUaHVua3MoKTsKLSAgICBpZiAoZXhpdFRodW5rR2Vu
ZXJhdG9yLmRpZFRoaW5ncygpKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLmZpbmFs
aXplci0+b3NyRXhpdC5zaXplKCkpOwotICAgICAgICAKLSAgICAgICAgYXV0byBsaW5rQnVmZmVy
ID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPigKLSAgICAgICAgICAgIHZtLCBleGl0VGh1
bmtHZW5lcmF0b3IsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAgICAgICAg
aWYgKGxpbmtCdWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKLSAgICAgICAgICAgIHN0YXRl
LmFsbG9jYXRpb25GYWlsZWQgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5maW5hbGl6ZXItPm9zckV4
aXQuc2l6ZSgpID09IHN0YXRlLmppdENvZGUtPm9zckV4aXQuc2l6ZSgpKTsKLSAgICAgICAgCi0g
ICAgICAgIGNvZGVCbG9jay0+Y2xlYXJFeGNlcHRpb25IYW5kbGVycygpOwotCi0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gc3RhdGUuZmlu
YWxpemVyLT5vc3JFeGl0W2ldOwotICAgICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IHN0YXRlLmpp
dENvZGUtPm9zckV4aXRbaV07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2ZXJib3Nl
Q29tcGlsYXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcg
T1NSIHN0YWNrbWFwICMiLCBleGl0Lm1fZGVzY3JpcHRvci0+bV9zdGFja21hcElELCAiIGZvciAi
LCBleGl0Lm1fY29kZU9yaWdpbiwgIlxuIik7Ci0KLSAgICAgICAgICAgIGluZm8ubV90aHVua0Fk
ZHJlc3MgPSBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGluZm8ubV90aHVua0xhYmVsKTsKLSAgICAg
ICAgICAgIGV4aXQubV9wYXRjaGFibGVDb2RlT2Zmc2V0ID0gbGlua0J1ZmZlci0+b2Zmc2V0T2Yo
aW5mby5tX3RodW5rSnVtcCk7Ci0KLSAgICAgICAgICAgIGlmIChleGl0LmlzR2VuZXJpY1Vud2lu
ZEhhbmRsZXIoKSkgewotICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvIG5ld0hhbmRsZXIgPSBn
ZW5lcmljVW53aW5kT1NSRXhpdERlc2NyaXB0b3JzLmdldChleGl0Lm1fZGVzY3JpcHRvciktPm1f
YmFzZWxpbmVFeGNlcHRpb25IYW5kbGVyOwotICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIuc3Rh
cnQgPSBleGl0Lm1fZXhjZXB0aW9uSGFuZGxlckNhbGxTaXRlSW5kZXguYml0cygpOwotICAgICAg
ICAgICAgICAgIG5ld0hhbmRsZXIuZW5kID0gZXhpdC5tX2V4Y2VwdGlvbkhhbmRsZXJDYWxsU2l0
ZUluZGV4LmJpdHMoKSArIDE7Ci0gICAgICAgICAgICAgICAgbmV3SGFuZGxlci5uYXRpdmVDb2Rl
ID0gaW5mby5tX3RodW5rQWRkcmVzczsKLSAgICAgICAgICAgICAgICBjb2RlQmxvY2stPmFwcGVu
ZEV4Y2VwdGlvbkhhbmRsZXIobmV3SGFuZGxlcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgICAgICBE
dW1wQ29udGV4dCBjb250ZXh0OwotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBFeGl0IHZh
bHVlczogIiwgaW5Db250ZXh0KGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcywgJmNvbnRleHQp
LCAiXG4iKTsKLSAgICAgICAgICAgICAgICBpZiAoIWV4aXQubV9kZXNjcmlwdG9yLT5tX21hdGVy
aWFsaXphdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICBNYXRlcmlhbGl6YXRpb25zOiBcbiIpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKEV4aXRU
aW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiBleGl0Lm1fZGVzY3Jp
cHRvci0+bV9tYXRlcmlhbGl6YXRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgICAgICBNYXRlcmlhbGl6ZSgiLCBwb2ludGVyRHVtcChtYXRlcmlhbGl6YXRpb24pLCAi
KVxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPmV4aXRUaHVua3NMaW5rQnVmZmVyID0gV1RG
TW92ZShsaW5rQnVmZmVyKTsKLSAgICB9Ci0KLSAgICBpZiAoIXN0YXRlLmdldEJ5SWRzLmlzRW1w
dHkoKQotICAgICAgICB8fCAhc3RhdGUucHV0QnlJZHMuaXNFbXB0eSgpCi0gICAgICAgIHx8ICFz
dGF0ZS5jaGVja0lucy5pc0VtcHR5KCkKLSAgICAgICAgfHwgIXN0YXRlLmJpbmFyeU9wcy5pc0Vt
cHR5KCkKLSAgICAgICAgfHwgIXN0YXRlLmxhenlTbG93UGF0aHMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIENDYWxsSGVscGVycyBzbG93UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7Ci0gICAgICAgIAot
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvblRhcmdldDsKLQotICAgICAg
ICBWZWN0b3I8c3RkOjpwYWlyPENDYWxsSGVscGVyczo6SnVtcExpc3QsIENvZGVMb2NhdGlvbkxh
YmVsPj4gZXhjZXB0aW9uSnVtcHNUb0xpbms7Ci0gICAgICAgIGF1dG8gYWRkTmV3RXhjZXB0aW9u
SnVtcElmTmVjZXNzYXJ5ID0gWyZdICh1aW50MzJfdCByZWNvcmRJbmRleCkgewotICAgICAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uVGFyZ2V0ID0gZXhjZXB0aW9uSGFuZGxlck1h
bmFnZXIuY2FsbE9wZXJhdGlvbkV4Y2VwdGlvblRhcmdldChyZWNvcmRJbmRleCk7Ci0gICAgICAg
ICAgICBpZiAoIWV4Y2VwdGlvblRhcmdldCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICBleGNlcHRpb25KdW1wc1RvTGluay5hcHBlbmQoCi0gICAgICAgICAgICAg
ICAgc3RkOjptYWtlX3BhaXIoQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCgpLCBleGNlcHRpb25UYXJn
ZXQpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9OwotICAgICAgICAKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUuZ2V0QnlJZHMuc2l6ZSgpOyBpLS07KSB7Ci0g
ICAgICAgICAgICBHZXRCeUlkRGVzY3JpcHRvciYgZ2V0QnlJZCA9IHN0YXRlLmdldEJ5SWRzW2ld
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxl
ZCgpKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIkhhbmRsaW5nIEdldEJ5SWQgc3RhY2ttYXAg
IyIsIGdldEJ5SWQuc3RhY2ttYXBJRCgpLCAiXG4iKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgYXV0byBpdGVyID0gcmVjb3JkTWFwLmZpbmQoZ2V0QnlJZC5zdGFja21hcElEKCkpOwotICAg
ICAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gSXQgd2FzIG9wdGltaXplZCBvdXQuCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdp
biA9IGdldEJ5SWQuY29kZU9yaWdpbigpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGl0ZXItPnZhbHVlLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgU3RhY2tN
YXBzOjpSZWNvcmQmIHJlY29yZCA9IGl0ZXItPnZhbHVlW2ldLnJlY29yZDsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0
ZXJzRm9yKHJlY29yZCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR1BSUmVn
IHJlc3VsdCA9IHJlY29yZC5sb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCk7Ci0gICAgICAgICAgICAg
ICAgR1BSUmVnIGJhc2UgPSByZWNvcmQubG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAg
ICAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGV4Y2VwdGlvbkhhbmRsZXJN
YW5hZ2VyLnByb2N1cmVDYWxsU2l0ZUluZGV4KGl0ZXItPnZhbHVlW2ldLmluZGV4LCBjb2RlT3Jp
Z2luKSwgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MoYmFzZSksCi0gICAgICAgICAgICAgICAg
ICAgIEpTVmFsdWVSZWdzKHJlc3VsdCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGJvb2wgYWRkZWRVbmlxdWVFeGNlcHRpb25KdW1wID0gYWRkTmV3RXhjZXB0aW9uSnVtcElm
TmVjZXNzYXJ5KGl0ZXItPnZhbHVlW2ldLmluZGV4KTsKLSAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgYmVnaW4gPSBzbG93UGF0aEpJVC5sYWJlbCgpOwotICAgICAgICAgICAg
ICAgIC8vIFdlIHRha2UgY2FyZSB0byBhbHdheXMgc3BpbGwgdGhlIHJlc3VsdCB3aGVuZXZlciB3
ZSBuZWVkIHRvIGRvIHZhbHVlIHJlY292ZXJ5Ci0gICAgICAgICAgICAgICAgLy8gb24gaXQgaW4g
dGhlIE9TUiBleGl0LiBUaGlzIGlzIGJlY2F1c2UgdGhlIGNhbGxPcGVyYXRpb24oLikgbWFjaGlu
ZXJ5IGRvZXNuJ3QKLSAgICAgICAgICAgICAgICAvLyBldmVyIHNwaWxsIHRoZSByZXN1bHQgdmFs
dWUuIEl0IGFjdHVhbGx5IHRha2VzIGNhcmUgdG8gbmV2ZXIgc3BpbGwgdGhlIHJlc3VsdAotICAg
ICAgICAgICAgICAgIC8vIGJlY2F1c2UgaXQgb3ZlcndyaXRlcyBpdCB3aXRoIHRoZSByZXN1bHQg
b2YgdGhlIGNhbGwuIEJ1dCwgd2l0aCBleGNlcHRpb25zIGFuZAotICAgICAgICAgICAgICAgIC8v
IE9TUiBleGl0cywgd2UgbWF5IG5lZWQgdGhlIHJlc3VsdCB2YWx1ZSBwcmlvciB0byB0aGUgY2Fs
bCBkdXJpbmcgT1NSIGV4aXQuCi0gICAgICAgICAgICAgICAgLy8gV2UgdGFrZSBjYXJlIHRvIG1h
cmsgaXQgZm9yIHNwaWxsYWdlIG5vdy4KLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAg
ICAgIC8vIFRoaXMgYWxzbyBoYW5kbGVzIGFub3RoZXIgcmVhbGx5IGludGVyZXN0aW5nIHJlZ2lz
dGVyIHByZXNlcnZhdGlvbiBzdG9yeTogCi0gICAgICAgICAgICAgICAgLy8gV2UgbWF5IGhhdmUg
YSBHZXRCeUlkL1NuaXBwZXQgaW5zaWRlIGEgdHJ5IGJsb2NrIHdoZXJlIExMVk0gYXNzaWducyB0
aGUgcmVzdWx0Ci0gICAgICAgICAgICAgICAgLy8gYW5kIHRoZSBiYXNlIHRvIHRoZSBzYW1lIHJl
Z2lzdGVyLiBUaGUgaW5saW5lIGNhY2hlIG1heSBtaXNzIGFuZCB3ZSBtYXkgZW5kIHVwCi0gICAg
ICAgICAgICAgICAgLy8gYXQgdGhpcyBzbG93IHBhdGggY2FsbE9wZXJhdGlvbi4gVGhlbiwgYmVj
YXVzZSB0aGUgYmFzZSBhbmQgdGhlIHJlc3VsdCBhcmUgYm90aAotICAgICAgICAgICAgICAgIC8v
IHRoZSBzYW1lIHJlZ2lzdGVyLCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBDIGNhbGwgZ2V0cyBz
dG9yZWQgaW50byB0aGUgb3JpZ2luYWwKLSAgICAgICAgICAgICAgICAvLyBiYXNlIHJlZ2lzdGVy
LiBJZiB0aGUgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplIHRocm93cywgaXQgd2lsbCByZXR1cm4g
InVuZGVmaW5lZCIKLSAgICAgICAgICAgICAgICAvLyBhbmQgd2Ugd2lsbCBiZSBzdHVjayB3aXRo
ICJ1bmRlZmluZWQiIGluIHRoZSBiYXNlIHJlZ2lzdGVyIHRoYXQgd2Ugd291bGQgbGlrZSB0byAK
LSAgICAgICAgICAgICAgICAvLyBkbyB2YWx1ZSByZWNvdmVyeSBvbi4gV2UgY29tYmF0IHRoaXMg
c2l0dWF0aW9uIGZyb20gZXZlciB0YWtpbmcgcGxhY2UgYnkgZW5zdXJpbmcKLSAgICAgICAgICAg
ICAgICAvLyB3ZSBzcGlsbCB0aGUgb3JpZ2luYWwgYmFzZSB2YWx1ZSAoaS5lIHRoZSByZXN1bHQg
cmVnaXN0ZXIpLgotICAgICAgICAgICAgICAgIGlmIChPU1JFeGl0KiBleGl0ID0gZXhjZXB0aW9u
SGFuZGxlck1hbmFnZXIuY2FsbE9wZXJhdGlvbk9TUkV4aXQoaXRlci0+dmFsdWVbaV0uaW5kZXgp
KQotICAgICAgICAgICAgICAgICAgICBleGl0LT5zcGlsbFJlZ2lzdGVyc1RvU3BpbGxTbG90KHNs
b3dQYXRoSklULCBvc3JFeGl0RnJvbUdlbmVyaWNVbndpbmRTdGFja1NwaWxsU2xvdCk7Ci0gICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oCi0g
ICAgICAgICAgICAgICAgICAgIHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBzbG93UGF0aEpJVCwgY29k
ZU9yaWdpbiwgYWRkZWRVbmlxdWVFeGNlcHRpb25KdW1wID8gJmV4Y2VwdGlvbkp1bXBzVG9MaW5r
Lmxhc3QoKS5maXJzdCA6ICZleGNlcHRpb25UYXJnZXQsCi0gICAgICAgICAgICAgICAgICAgIG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoZ2VuLnN0dWJJbmZvKCkpLAotICAgICAgICAgICAgICAgICAgICBiYXNlLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoZ2V0QnlJZC51aWQoKSkpLmNhbGwoKTsKLQotICAgICAgICAgICAg
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoYmVnaW4sIGNhbGwpOwotCi0gICAgICAgICAgICAg
ICAgZ2V0QnlJZC5tX3Nsb3dQYXRoRG9uZS5hcHBlbmQoc2xvd1BhdGhKSVQuanVtcCgpKTsKLSAg
ICAgICAgICAgICAgICBnZXRCeUlkLm1fZ2VuZXJhdG9ycy5hcHBlbmQoZ2VuKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3Rh
dGUucHV0QnlJZHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBQdXRCeUlkRGVzY3JpcHRv
ciYgcHV0QnlJZCA9IHN0YXRlLnB1dEJ5SWRzW2ldOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgICAgIGRhdGFM
b2coIkhhbmRsaW5nIFB1dEJ5SWQgc3RhY2ttYXAgIyIsIHB1dEJ5SWQuc3RhY2ttYXBJRCgpLCAi
XG4iKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXV0byBpdGVyID0gcmVjb3JkTWFwLmZp
bmQocHV0QnlJZC5zdGFja21hcElEKCkpOwotICAgICAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3Jk
TWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gSXQgd2FzIG9wdGltaXplZCBvdXQuCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IHB1dEJ5SWQuY29kZU9yaWdpbigpOwot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZXItPnZhbHVlLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCA9IGl0ZXIt
PnZhbHVlW2ldLnJlY29yZDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBSZWdp
c3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVyc0ZvcihyZWNvcmQpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVjb3JkLmxvY2F0aW9u
c1swXS5kaXJlY3RHUFIoKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgdmFsdWUgPSByZWNvcmQu
bG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgICAgICAgICBjb2RlQmxv
Y2ssIGNvZGVPcmlnaW4sIGV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLnByb2N1cmVDYWxsU2l0ZUlu
ZGV4KGl0ZXItPnZhbHVlW2ldLmluZGV4LCBjb2RlT3JpZ2luKSwgdXNlZFJlZ2lzdGVycywgSlNW
YWx1ZVJlZ3MoYmFzZSksCi0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZhbHVlKSwg
R1BSSW5mbzo6cGF0Y2hwb2ludFNjcmF0Y2hSZWdpc3RlciwgcHV0QnlJZC5lY21hTW9kZSgpLCBw
dXRCeUlkLnB1dEtpbmQoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYm9v
bCBhZGRlZFVuaXF1ZUV4Y2VwdGlvbkp1bXAgPSBhZGROZXdFeGNlcHRpb25KdW1wSWZOZWNlc3Nh
cnkoaXRlci0+dmFsdWVbaV0uaW5kZXgpOwotCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIGJlZ2luID0gc2xvd1BhdGhKSVQubGFiZWwoKTsKLQotICAgICAgICAgICAgICAg
IGlmIChPU1JFeGl0KiBleGl0ID0gZXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuY2FsbE9wZXJhdGlv
bk9TUkV4aXQoaXRlci0+dmFsdWVbaV0uaW5kZXgpKQotICAgICAgICAgICAgICAgICAgICBleGl0
LT5zcGlsbFJlZ2lzdGVyc1RvU3BpbGxTbG90KHNsb3dQYXRoSklULCBvc3JFeGl0RnJvbUdlbmVy
aWNVbndpbmRTdGFja1NwaWxsU2xvdCk7Ci0KLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbigKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUs
IHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBjb2RlT3JpZ2luLCBhZGRlZFVuaXF1ZUV4Y2Vw
dGlvbkp1bXAgPyAmZXhjZXB0aW9uSnVtcHNUb0xpbmsubGFzdCgpLmZpcnN0IDogJmV4Y2VwdGlv
blRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgSW52
YWxpZEdQUlJlZywKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGdlbi5zdHViSW5mbygpKSwgdmFsdWUsIGJhc2UsCi0gICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihwdXRCeUlkLnVpZCgpKSkuY2FsbCgpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoYmVnaW4s
IGNhbGwpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHB1dEJ5SWQubV9zbG93
UGF0aERvbmUuYXBwZW5kKHNsb3dQYXRoSklULmp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgcHV0
QnlJZC5tX2dlbmVyYXRvcnMuYXBwZW5kKGdlbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5jaGVja0lucy5zaXplKCk7IGktLTsp
IHsKLSAgICAgICAgICAgIENoZWNrSW5EZXNjcmlwdG9yJiBjaGVja0luID0gc3RhdGUuY2hlY2tJ
bnNbaV07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25F
bmFibGVkKCkpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcgY2hlY2tJbiBzdGFj
a21hcCAjIiwgY2hlY2tJbi5zdGFja21hcElEKCksICJcbiIpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmluZChjaGVja0luLnN0YWNrbWFwSUQoKSk7
Ci0gICAgICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luID0gY2hlY2tJbi5jb2RlT3JpZ2luKCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBT
dGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gaXRlci0+dmFsdWVbaV0ucmVjb3JkOwotICAgICAg
ICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJzRm9yKHJl
Y29yZCk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHJlY29yZC5sb2NhdGlvbnNb
MF0uZGlyZWN0R1BSKCk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIG9iaiA9IHJlY29yZC5sb2Nh
dGlvbnNbMV0uZGlyZWN0R1BSKCk7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvID0gY29kZUJsb2NrLT5hZGRTdHViSW5mbyhBY2Nlc3NUeXBlOjpJbik7IAotICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLT5jb2RlT3JpZ2luID0gY29kZU9yaWdpbjsKLSAgICAgICAg
ICAgICAgICBzdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IHN0YXRlLmppdENvZGUtPmNvbW1vbi5h
ZGRVbmlxdWVDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4pOwotICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLT5wYXRjaC5iYXNlR1BSID0gc3RhdGljX2Nhc3Q8aW50OF90PihvYmopOwotICAgICAgICAg
ICAgICAgIHN0dWJJbmZvLT5wYXRjaC52YWx1ZUdQUiA9IHN0YXRpY19jYXN0PGludDhfdD4ocmVz
dWx0KTsKLSAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2gudXNlZFJlZ2lzdGVycyA9IHVz
ZWRSZWdpc3RlcnM7Ci0KLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgYmVn
aW4gPSBzbG93UGF0aEpJVC5sYWJlbCgpOwotCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgc2xvd0NhbGwgPSBjYWxsT3BlcmF0aW9uKAotICAgICAgICAgICAgICAgICAgICBz
dGF0ZSwgdXNlZFJlZ2lzdGVycywgc2xvd1BhdGhKSVQsIGNvZGVPcmlnaW4sICZleGNlcHRpb25U
YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkluT3B0aW1pemUsIHJlc3VsdCwg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0dWJJbmZvKSwgb2JqLAotICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2hlY2tJbi51aWQoKSkpLmNhbGwo
KTsKLQotICAgICAgICAgICAgICAgIGNoZWNrSW4ubV9zbG93UGF0aERvbmUuYXBwZW5kKHNsb3dQ
YXRoSklULmp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2hlY2tJ
bi5tX2dlbmVyYXRvcnMuYXBwZW5kKENoZWNrSW5HZW5lcmF0b3Ioc3R1YkluZm8sIHNsb3dDYWxs
LCBiZWdpbikpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IHN0YXRlLmJpbmFyeU9wcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIEJpbmFy
eU9wRGVzY3JpcHRvciYgYmluYXJ5T3AgPSBzdGF0ZS5iaW5hcnlPcHNbaV07Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCi0gICAgICAg
ICAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcgIiwgYmluYXJ5T3AubmFtZSgpLCAiIHN0YWNrbWFw
ICMiLCBiaW5hcnlPcC5zdGFja21hcElEKCksICJcbiIpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmluZChiaW5hcnlPcC5zdGFja21hcElEKCkpOwot
ICAgICAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOyAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gYmluYXJ5T3AuY29kZU9yaWdpbigpOwotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZXItPnZhbHVlLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCA9IGl0ZXItPnZh
bHVlW2ldLnJlY29yZDsKLSAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJz
ID0gdXNlZFJlZ2lzdGVyc0ZvcihyZWNvcmQpOwotCi0gICAgICAgICAgICAgICAgR1BSUmVnIHJl
c3VsdCA9IHJlY29yZC5sb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCk7Ci0gICAgICAgICAgICAgICAg
R1BSUmVnIGxlZnQgPSByZWNvcmQubG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwotICAgICAgICAg
ICAgICAgIEdQUlJlZyByaWdodCA9IHJlY29yZC5sb2NhdGlvbnNbMl0uZGlyZWN0R1BSKCk7Ci0K
LSAgICAgICAgICAgICAgICBiaW5hcnlPcC5tX3Nsb3dQYXRoU3RhcnRzLmFwcGVuZChzbG93UGF0
aEpJVC5sYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBib29sIGFkZGVkVW5pcXVlRXhjZXB0aW9u
SnVtcCA9IGFkZE5ld0V4Y2VwdGlvbkp1bXBJZk5lY2Vzc2FyeShpdGVyLT52YWx1ZVtpXS5pbmRl
eCk7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBzaXR1YXRpb24gaGFzIGEgcmVhbGx5IGludGVy
ZXN0aW5nIHJlZ2lzdGVyIHByZXNlcnZhdGlvbiBzdG9yeS4KLSAgICAgICAgICAgICAgICAvLyBT
ZWUgY29tbWVudCBhYm92ZSBmb3IgR2V0QnlJZHMuCi0gICAgICAgICAgICAgICAgaWYgKE9TUkV4
aXQqIGV4aXQgPSBleGNlcHRpb25IYW5kbGVyTWFuYWdlci5jYWxsT3BlcmF0aW9uT1NSRXhpdChp
dGVyLT52YWx1ZVtpXS5pbmRleCkpCi0gICAgICAgICAgICAgICAgICAgIGV4aXQtPnNwaWxsUmVn
aXN0ZXJzVG9TcGlsbFNsb3Qoc2xvd1BhdGhKSVQsIG9zckV4aXRGcm9tR2VuZXJpY1Vud2luZFN0
YWNrU3BpbGxTbG90KTsKLQotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oc3RhdGUsIHVz
ZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBjb2RlT3JpZ2luLCBhZGRlZFVuaXF1ZUV4Y2VwdGlv
bkp1bXAgPyAmZXhjZXB0aW9uSnVtcHNUb0xpbmsubGFzdCgpLmZpcnN0IDogJmV4Y2VwdGlvblRh
cmdldCwKLSAgICAgICAgICAgICAgICAgICAgYmluYXJ5T3Auc2xvd1BhdGhGdW5jdGlvbigpLCBy
ZXN1bHQsIGxlZnQsIHJpZ2h0KS5jYWxsKCk7Ci0KLSAgICAgICAgICAgICAgICBiaW5hcnlPcC5t
X3Nsb3dQYXRoRG9uZS5hcHBlbmQoc2xvd1BhdGhKSVQuanVtcCgpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmxhenlTbG93UGF0
aHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBMYXp5U2xvd1BhdGhEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yID0gc3RhdGUubGF6eVNsb3dQYXRoc1tpXTsKLQotICAgICAgICAgICAgaWYgKHZl
cmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJIYW5k
bGluZyBsYXp5U2xvd1BhdGggc3RhY2ttYXAgIyIsIGRlc2NyaXB0b3Iuc3RhY2ttYXBJRCgpLCAi
XG4iKTsKLQotICAgICAgICAgICAgYXV0byBpdGVyID0gcmVjb3JkTWFwLmZpbmQoZGVzY3JpcHRv
ci5zdGFja21hcElEKCkpOwotICAgICAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gSXQgd2FzIG9wdGltaXplZCBvdXQuCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4gPSBkZXNjcmlwdG9yLmNvZGVPcmlnaW4oKTsKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBpdGVyLT52YWx1ZS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
ICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBpdGVyLT52YWx1ZVtpXS5yZWNvcmQ7Ci0g
ICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnNG
b3IocmVjb3JkKTsKLSAgICAgICAgICAgICAgICBjaGFyKiBzdGFydE9mSUMgPQotICAgICAgICAg
ICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIHJlY29y
ZC5pbnN0cnVjdGlvbk9mZnNldDsKLSAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBw
YXRjaHBvaW50KChNYWNyb0Fzc2VtYmxlckNvZGVQdHIoc3RhcnRPZklDKSkpOwotICAgICAgICAg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvblRhcmdldCA9IGV4Y2VwdGlvbkhhbmRs
ZXJNYW5hZ2VyLmxhenlTbG93UGF0aEV4Y2VwdGlvblRhcmdldChpdGVyLT52YWx1ZVtpXS5pbmRl
eCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFleGNlcHRpb25UYXJnZXQpCi0gICAgICAgICAgICAg
ICAgICAgIGV4Y2VwdGlvblRhcmdldCA9IHN0YXRlLmZpbmFsaXplci0+aGFuZGxlRXhjZXB0aW9u
c0xpbmtCdWZmZXItPmVudHJ5cG9pbnQoKTsKLQotICAgICAgICAgICAgICAgIFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvciBzY3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOwotICAgICAgICAg
ICAgICAgIEdQUlJlZyBuZXdaZXJvID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgICAgICAgICBW
ZWN0b3I8TG9jYXRpb24+IGxvY2F0aW9uczsKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8gc3Rh
Y2ttYXBMb2NhdGlvbiA6IHJlY29yZC5sb2NhdGlvbnMpIHsKLSAgICAgICAgICAgICAgICAgICAg
RlRMOjpMb2NhdGlvbiBsb2NhdGlvbiA9IExvY2F0aW9uOjpmb3JTdGFja21hcHMoJnN0YWNrbWFw
cywgc3RhY2ttYXBMb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc0FSTTY0KCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIExMVk0gcHJvdmVzIHRoYXQgc29tZXRo
aW5nIGlzIHplcm8sIGl0IG1heSBwYXNzIHVzIHRoZSB6ZXJvIHJlZ2lzdGVyIChha2EsIHRoZSBz
dGFjayBwb2ludGVyKS4gT3VyIGFzc2VtYmxlcgotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
aXNuJ3QgcHJlcGFyZWQgdG8gaGFuZGxlIHRoaXMgd2VsbC4gV2UgbmVlZCB0byBtb3ZlIGl0IGlu
dG8gYSBkaWZmZXJlbnQgcmVnaXN0ZXIgaWYgc3VjaCBhIGNhc2UgYXJpc2VzLgotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uLmlzR1BSKCkgJiYgbG9jYXRpb24uZ3ByKCkgPT0g
TWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG5ld1plcm8gPT0gSW52YWxpZEdQUlJlZykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXdaZXJvID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNj
cmF0Y2hHUFIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVy
cy5zZXQobmV3WmVybyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gRlRMOjpMb2NhdGlvbjo6Zm9yUmVnaXN0ZXIo
RFdBUkZSZWdpc3RlcihzdGF0aWNfY2FzdDx1aW50MTZfdD4obmV3WmVybykpLCAwKTsgLy8gRFdB
UkYgR1BScyBmb3IgYXJtNjQgYXJlIHNlbnNpYmx5IG51bWJlcmVkLgotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGxv
Y2F0aW9ucy5hcHBlbmQobG9jYXRpb24pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxMYXp5U2xvd1BhdGg+IGxhenlTbG93UGF0aCA9IHN0ZDo6
bWFrZV91bmlxdWU8TGF6eVNsb3dQYXRoPigKLSAgICAgICAgICAgICAgICAgICAgcGF0Y2hwb2lu
dCwgZXhjZXB0aW9uVGFyZ2V0LCB1c2VkUmVnaXN0ZXJzLCBleGNlcHRpb25IYW5kbGVyTWFuYWdl
ci5wcm9jdXJlQ2FsbFNpdGVJbmRleChpdGVyLT52YWx1ZVtpXS5pbmRleCwgY29kZU9yaWdpbiks
Ci0gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IubV9saW5rZXItPnJ1bihsb2NhdGlvbnMp
LCBuZXdaZXJvLCBzY3JhdGNoQWxsb2NhdG9yKTsKLQotICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6TGFiZWwgYmVnaW4gPSBzbG93UGF0aEpJVC5sYWJlbCgpOwotCi0gICAgICAgICAgICAg
ICAgc2xvd1BhdGhKSVQucHVzaFRvU2F2ZUltbWVkaWF0ZVdpdGhvdXRUb3VjaGluZ1JlZ2lzdGVy
cygKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGUu
aml0Q29kZS0+bGF6eVNsb3dQYXRocy5zaXplKCkpKTsKLSAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgZ2VuZXJhdG9ySnVtcCA9IHNsb3dQYXRoSklULmp1bXAoKTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLm1fZ2VuZXJhdG9ycy5hcHBlbmQo
c3RkOjptYWtlX3R1cGxlKGxhenlTbG93UGF0aC5nZXQoKSwgYmVnaW4pKTsKLQotICAgICAgICAg
ICAgICAgIHN0YXRlLmppdENvZGUtPmxhenlTbG93UGF0aHMuYXBwZW5kKFdURk1vdmUobGF6eVNs
b3dQYXRoKSk7Ci0gICAgICAgICAgICAgICAgc3RhdGUuZmluYWxpemVyLT5sYXp5U2xvd1BhdGhH
ZW5lcmF0b3JKdW1wcy5hcHBlbmQoZ2VuZXJhdG9ySnVtcCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGV4Y2VwdGlvblRhcmdldC5saW5rKCZzbG93UGF0aEpJ
VCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGV4Y2VwdGlvbkp1bXAgPSBzbG93UGF0
aEpJVC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPnNpZGVDb2Rl
TGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8TGlua0J1ZmZlcj4odm0sIHNsb3dQYXRoSklU
LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgICAgIGlmIChzdGF0ZS5m
aW5hbGl6ZXItPnNpZGVDb2RlTGlua0J1ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUoKSkgewotICAg
ICAgICAgICAgc3RhdGUuYWxsb2NhdGlvbkZhaWxlZCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGUuZmluYWxpemVyLT5zaWRlQ29kZUxpbmtCdWZm
ZXItPmxpbmsoCi0gICAgICAgICAgICBleGNlcHRpb25KdW1wLCBzdGF0ZS5maW5hbGl6ZXItPmhh
bmRsZUV4Y2VwdGlvbnNMaW5rQnVmZmVyLT5lbnRyeXBvaW50KCkpOwotICAgICAgICAKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUuZ2V0QnlJZHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAg
ICAgICAgICBnZW5lcmF0ZUlDRmFzdFBhdGgoCi0gICAgICAgICAgICAgICAgc3RhdGUsIGNvZGVC
bG9jaywgZ2VuZXJhdGVkRnVuY3Rpb24sIHJlY29yZE1hcCwgc3RhdGUuZ2V0QnlJZHNbaV0sCi0g
ICAgICAgICAgICAgICAgc2l6ZU9mR2V0QnlJZCgpLCAiR2V0QnlJZCIpOwotICAgICAgICB9Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLnB1dEJ5SWRzLnNpemUoKTsgaS0tOykgewot
ICAgICAgICAgICAgZ2VuZXJhdGVJQ0Zhc3RQYXRoKAotICAgICAgICAgICAgICAgIHN0YXRlLCBj
b2RlQmxvY2ssIGdlbmVyYXRlZEZ1bmN0aW9uLCByZWNvcmRNYXAsIHN0YXRlLnB1dEJ5SWRzW2ld
LAotICAgICAgICAgICAgICAgIHNpemVPZlB1dEJ5SWQoKSwgIlB1dEJ5SWQiKTsKLSAgICAgICAg
fQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5jaGVja0lucy5zaXplKCk7IGktLTsp
IHsKLSAgICAgICAgICAgIGdlbmVyYXRlQ2hlY2tJbklDRmFzdFBhdGgoCi0gICAgICAgICAgICAg
ICAgc3RhdGUsIGNvZGVCbG9jaywgZ2VuZXJhdGVkRnVuY3Rpb24sIHJlY29yZE1hcCwgc3RhdGUu
Y2hlY2tJbnNbaV0sCi0gICAgICAgICAgICAgICAgc2l6ZU9mSW4oKSk7IAotICAgICAgICB9Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmJpbmFyeU9wcy5zaXplKCk7IGktLTspIHsK
LSAgICAgICAgICAgIEJpbmFyeU9wRGVzY3JpcHRvciYgYmluYXJ5T3AgPSBzdGF0ZS5iaW5hcnlP
cHNbaV07Ci0gICAgICAgICAgICBnZW5lcmF0ZUJpbmFyeU9wSUNGYXN0UGF0aChzdGF0ZSwgY29k
ZUJsb2NrLCBnZW5lcmF0ZWRGdW5jdGlvbiwgcmVjb3JkTWFwLCBiaW5hcnlPcCk7Ci0gICAgICAg
IH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUubGF6eVNsb3dQYXRocy5zaXplKCk7
IGktLTspIHsKLSAgICAgICAgICAgIExhenlTbG93UGF0aERlc2NyaXB0b3ImIGxhenlTbG93UGF0
aCA9IHN0YXRlLmxhenlTbG93UGF0aHNbaV07Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHR1cGxl
IDogbGF6eVNsb3dQYXRoLm1fZ2VuZXJhdG9ycykgewotICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAoCi0gICAgICAgICAgICAgICAgICAgIHN0ZDo6Z2V0PDA+
KHR1cGxlKS0+cGF0Y2hwb2ludCgpLAotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5maW5hbGl6
ZXItPnNpZGVDb2RlTGlua0J1ZmZlci0+bG9jYXRpb25PZihzdGQ6OmdldDwxPih0dXBsZSkpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2lmIEVOQUJMRShNQVNNX1BST0JFKQotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5wcm9iZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAg
ICAgICBQcm9iZURlc2NyaXB0b3ImIHByb2JlID0gc3RhdGUucHJvYmVzW2ldOwotICAgICAgICAg
ICAgZ2VuZXJhdGVQcm9iZShzdGF0ZSwgY29kZUJsb2NrLCBnZW5lcmF0ZWRGdW5jdGlvbiwgcmVj
b3JkTWFwLCBwcm9iZSk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBmb3IgKGF1dG8mIHBh
aXIgOiBleGNlcHRpb25KdW1wc1RvTGluaykKLSAgICAgICAgICAgIHN0YXRlLmZpbmFsaXplci0+
c2lkZUNvZGVMaW5rQnVmZmVyLT5saW5rKHBhaXIuZmlyc3QsIHBhaXIuc2Vjb25kKTsKLSAgICB9
Ci0gICAgCi0gICAgYWRqdXN0Q2FsbElDc0ZvclN0YWNrbWFwcyhzdGF0ZS5qc0NhbGxzLCByZWNv
cmRNYXAsIGV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSBzdGF0ZS5qc0NhbGxzLnNpemUoKTsgaS0tOykgewotICAgICAgICBKU0NhbGwmIGNhbGwg
PSBzdGF0ZS5qc0NhbGxzW2ldOwotCi0gICAgICAgIENDYWxsSGVscGVycyBmYXN0UGF0aEpJVCgm
dm0sIGNvZGVCbG9jayk7Ci0gICAgICAgIGNhbGwuZW1pdChmYXN0UGF0aEpJVCwgc3RhdGUsIG9z
ckV4aXRGcm9tR2VuZXJpY1Vud2luZFN0YWNrU3BpbGxTbG90KTsKLQotICAgICAgICBjaGFyKiBz
dGFydE9mSUMgPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIGNhbGwu
bV9pbnN0cnVjdGlvbk9mZnNldDsKLQotICAgICAgICBnZW5lcmF0ZUlubGluZUlmUG9zc2libGVP
dXRPZkxpbmVJZk5vdChzdGF0ZSwgdm0sIGNvZGVCbG9jaywgZmFzdFBhdGhKSVQsIHN0YXJ0T2ZJ
Qywgc2l6ZU9mQ2FsbCgpLCAiSlNDYWxsIiwgWyZdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBD
Q2FsbEhlbHBlcnMmLCBib29sKSB7Ci0gICAgICAgICAgICBjYWxsLmxpbmsodm0sIGxpbmtCdWZm
ZXIpOwotICAgICAgICB9KTsKLSAgICB9Ci0gICAgCi0gICAgYWRqdXN0Q2FsbElDc0ZvclN0YWNr
bWFwcyhzdGF0ZS5qc0NhbGxWYXJhcmdzZXMsIHJlY29yZE1hcCwgZXhjZXB0aW9uSGFuZGxlck1h
bmFnZXIpOwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmpzQ2FsbFZhcmFyZ3Nl
cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgSlNDYWxsVmFyYXJncyYgY2FsbCA9IHN0YXRlLmpz
Q2FsbFZhcmFyZ3Nlc1tpXTsKLSAgICAgICAgCi0gICAgICAgIENDYWxsSGVscGVycyBmYXN0UGF0
aEpJVCgmdm0sIGNvZGVCbG9jayk7Ci0gICAgICAgIGNhbGwuZW1pdChmYXN0UGF0aEpJVCwgc3Rh
dGUsIHZhcmFyZ3NTcGlsbFNsb3RzT2Zmc2V0LCBvc3JFeGl0RnJvbUdlbmVyaWNVbndpbmRTdGFj
a1NwaWxsU2xvdCk7Ci0KLSAgICAgICAgY2hhciogc3RhcnRPZklDID0gYml0d2lzZV9jYXN0PGNo
YXIqPihnZW5lcmF0ZWRGdW5jdGlvbikgKyBjYWxsLm1faW5zdHJ1Y3Rpb25PZmZzZXQ7Ci0gICAg
ICAgIHNpemVfdCBzaXplT2ZJQyA9IHNpemVPZklDRm9yKGNhbGwubm9kZSgpKTsKLQotICAgICAg
ICBnZW5lcmF0ZUlubGluZUlmUG9zc2libGVPdXRPZkxpbmVJZk5vdChzdGF0ZSwgdm0sIGNvZGVC
bG9jaywgZmFzdFBhdGhKSVQsIHN0YXJ0T2ZJQywgc2l6ZU9mSUMsICJ2YXJhcmdzIGNhbGwiLCBb
Jl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIENDYWxsSGVscGVycyYsIGJvb2wpIHsKLSAgICAg
ICAgICAgIGNhbGwubGluayh2bSwgbGlua0J1ZmZlciwgc3RhdGUuZmluYWxpemVyLT5oYW5kbGVF
eGNlcHRpb25zTGlua0J1ZmZlci0+ZW50cnlwb2ludCgpKTsKLSAgICAgICAgfSk7Ci0gICAgfQot
Ci0gICAgYWRqdXN0Q2FsbElDc0ZvclN0YWNrbWFwcyhzdGF0ZS5qc1RhaWxDYWxscywgcmVjb3Jk
TWFwLCBleGNlcHRpb25IYW5kbGVyTWFuYWdlcik7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBz
dGF0ZS5qc1RhaWxDYWxscy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgSlNUYWlsQ2FsbCYgY2Fs
bCA9IHN0YXRlLmpzVGFpbENhbGxzW2ldOwotCi0gICAgICAgIENDYWxsSGVscGVycyBmYXN0UGF0
aEpJVCgmdm0sIGNvZGVCbG9jayk7Ci0gICAgICAgIGNhbGwuZW1pdCgqc3RhdGUuaml0Q29kZS5n
ZXQoKSwgZmFzdFBhdGhKSVQpOwotCi0gICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9IGJpdHdpc2Vf
Y2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24pICsgY2FsbC5tX2luc3RydWN0aW9uT2Zmc2V0
OwotICAgICAgICBzaXplX3Qgc2l6ZU9mSUMgPSBjYWxsLmVzdGltYXRlZFNpemUoKTsKLQotICAg
ICAgICBnZW5lcmF0ZUlubGluZUlmUG9zc2libGVPdXRPZkxpbmVJZk5vdChzdGF0ZSwgdm0sIGNv
ZGVCbG9jaywgZmFzdFBhdGhKSVQsIHN0YXJ0T2ZJQywgc2l6ZU9mSUMsICJ0YWlsIGNhbGwiLCBb
Jl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIENDYWxsSGVscGVycyYsIGJvb2wpIHsKLSAgICAg
ICAgICAgIGNhbGwubGluayh2bSwgbGlua0J1ZmZlcik7Ci0gICAgICAgIH0pOwotICAgIH0KLSAg
ICAKLSAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmluZChzdGF0ZS5oYW5kbGVTdGFja092ZXJm
bG93RXhjZXB0aW9uU3RhY2ttYXBJRCk7Ci0gICAgLy8gSXQncyBzb3J0IG9mIHJlbW90ZWx5IHBv
c3NpYmxlIHRoYXQgd2Ugd29uJ3QgaGF2ZSBhbiBpbi1iYW5kIGV4Y2VwdGlvbiBoYW5kbGluZwot
ICAgIC8vIHBhdGgsIGZvciBzb21lIGtpbmRzIG9mIGZ1bmN0aW9ucy4KLSAgICBpZiAoaXRlciAh
PSByZWNvcmRNYXAuZW5kKCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaXRlci0+dmFs
dWUuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3Jk
ID0gaXRlci0+dmFsdWVbaV0ucmVjb3JkOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbCBzb3VyY2UgPSBDb2RlTG9jYXRpb25MYWJlbCgKLSAgICAgICAgICAgICAg
ICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIHJlY29yZC5pbnN0cnVj
dGlvbk9mZnNldCk7Ci0KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YWNrT3ZlcmZsb3dF
eGNlcHRpb24uaXNTZXQoKSk7Ci0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNl
V2l0aEp1bXAoc291cmNlLCBzdGF0ZS5maW5hbGl6ZXItPmhhbmRsZUV4Y2VwdGlvbnNMaW5rQnVm
ZmVyLT5sb2NhdGlvbk9mKHN0YWNrT3ZlcmZsb3dFeGNlcHRpb24pKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICAKLSAgICBpdGVyID0gcmVjb3JkTWFwLmZpbmQoc3RhdGUuaGFuZGxlRXhjZXB0aW9u
U3RhY2ttYXBJRCk7Ci0gICAgLy8gSXQncyBzb3J0IG9mIHJlbW90ZWx5IHBvc3NpYmxlIHRoYXQg
d2Ugd29uJ3QgaGF2ZSBhbiBpbi1iYW5kIGV4Y2VwdGlvbiBoYW5kbGluZwotICAgIC8vIHBhdGgs
IGZvciBzb21lIGtpbmRzIG9mIGZ1bmN0aW9ucy4KLSAgICBpZiAoaXRlciAhPSByZWNvcmRNYXAu
ZW5kKCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaXRlci0+dmFsdWUuc2l6ZSgpOyBp
LS07KSB7Ci0gICAgICAgICAgICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gaXRlci0+dmFs
dWVbaV0ucmVjb3JkOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bCBzb3VyY2UgPSBDb2RlTG9jYXRpb25MYWJlbCgKLSAgICAgICAgICAgICAgICBiaXR3aXNlX2Nh
c3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIHJlY29yZC5pbnN0cnVjdGlvbk9mZnNldCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1
bXAoc291cmNlLCBzdGF0ZS5maW5hbGl6ZXItPmhhbmRsZUV4Y2VwdGlvbnNMaW5rQnVmZmVyLT5l
bnRyeXBvaW50KCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGZvciAodW5zaWduZWQg
ZXhpdEluZGV4ID0gMDsgZXhpdEluZGV4IDwgaml0Q29kZS0+b3NyRXhpdC5zaXplKCk7ICsrZXhp
dEluZGV4KSB7Ci0gICAgICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBzdGF0ZS5m
aW5hbGl6ZXItPm9zckV4aXRbZXhpdEluZGV4XTsKLSAgICAgICAgT1NSRXhpdCYgZXhpdCA9IGpp
dENvZGUtPm9zckV4aXRbZXhpdEluZGV4XTsKLSAgICAgICAgVmVjdG9yPGNvbnN0IHZvaWQqPiBj
b2RlQWRkcmVzc2VzOwotCi0gICAgICAgIGlmIChleGl0LndpbGxBcnJpdmVBdEV4aXRGcm9tSW5k
aXJlY3RFeGNlcHRpb25DaGVjaygpKSAvLyBUaGlzIGp1bXAgZG9lc24ndCBoYXBwZW4gZGlyZWN0
bHkgZnJvbSBhIHBhdGNocG9pbnQvc3RhY2ttYXAgd2UgY29tcGlsZS4gSXQgaGFwcGVucyBpbmRp
cmVjdGx5IHRocm91Z2ggYW4gZXhjZXB0aW9uIGNoZWNrIHNvbWV3aGVyZS4KLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCA9
IGppdENvZGUtPnN0YWNrbWFwcy5yZWNvcmRzW2V4aXQubV9zdGFja21hcFJlY29yZEluZGV4XTsK
LSAgICAgICAgCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHNvdXJjZSA9IENvZGVMb2NhdGlv
bkxhYmVsKAotICAgICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPihnZW5lcmF0ZWRGdW5jdGlv
bikgKyByZWNvcmQuaW5zdHJ1Y3Rpb25PZmZzZXQpOwotICAgICAgICAKLSAgICAgICAgY29kZUFk
ZHJlc3Nlcy5hcHBlbmQoYml0d2lzZV9jYXN0PGNoYXIqPihnZW5lcmF0ZWRGdW5jdGlvbikgKyBy
ZWNvcmQuaW5zdHJ1Y3Rpb25PZmZzZXQgKyBNYWNyb0Fzc2VtYmxlcjo6bWF4SnVtcFJlcGxhY2Vt
ZW50U2l6ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChleGl0Lm1fZGVzY3JpcHRvci0+bV9p
c0ludmFsaWRhdGlvblBvaW50KQotICAgICAgICAgICAgaml0Q29kZS0+Y29tbW9uLmp1bXBSZXBs
YWNlbWVudHMuYXBwZW5kKEp1bXBSZXBsYWNlbWVudChzb3VyY2UsIGluZm8ubV90aHVua0FkZHJl
c3MpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VX
aXRoSnVtcChzb3VyY2UsIGluZm8ubV90aHVua0FkZHJlc3MpOwotICAgICAgICAKLSAgICAgICAg
aWYgKGdyYXBoLmNvbXBpbGF0aW9uKCkpCi0gICAgICAgICAgICBncmFwaC5jb21waWxhdGlvbigp
LT5hZGRPU1JFeGl0U2l0ZShjb2RlQWRkcmVzc2VzKTsKLSAgICB9Ci19Ci0KLXZvaWQgY29tcGls
ZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmVzdWx0JiBzYWZlcG9pbnRSZXN1bHQpCi17Ci0g
ICAgY2hhciogZXJyb3IgPSAwOwotICAgIAotICAgIHsKLSAgICAgICAgR3JhcGhTYWZlcG9pbnQg
c2FmZXBvaW50KHN0YXRlLmdyYXBoLCBzYWZlcG9pbnRSZXN1bHQpOwotICAgICAgICAKLSAgICAg
ICAgTExWTU1DSklUQ29tcGlsZXJPcHRpb25zIG9wdGlvbnM7Ci0gICAgICAgIGxsdm0tPkluaXRp
YWxpemVNQ0pJVENvbXBpbGVyT3B0aW9ucygmb3B0aW9ucywgc2l6ZW9mKG9wdGlvbnMpKTsKLSAg
ICAgICAgb3B0aW9ucy5PcHRMZXZlbCA9IE9wdGlvbnM6Omxsdm1CYWNrZW5kT3B0aW1pemF0aW9u
TGV2ZWwoKTsKLSAgICAgICAgb3B0aW9ucy5Ob0ZyYW1lUG9pbnRlckVsaW0gPSB0cnVlOwotICAg
ICAgICBpZiAoT3B0aW9uczo6dXNlTExWTVNtYWxsQ29kZU1vZGVsKCkpCi0gICAgICAgICAgICBv
cHRpb25zLkNvZGVNb2RlbCA9IExMVk1Db2RlTW9kZWxTbWFsbDsKLSAgICAgICAgb3B0aW9ucy5F
bmFibGVGYXN0SVNlbCA9IGVuYWJsZUxMVk1GYXN0SVNlbDsKLSAgICAgICAgb3B0aW9ucy5NQ0pN
TSA9IGxsdm0tPkNyZWF0ZVNpbXBsZU1DSklUTWVtb3J5TWFuYWdlcigKLSAgICAgICAgICAgICZz
dGF0ZSwgbW1BbGxvY2F0ZUNvZGVTZWN0aW9uLCBtbUFsbG9jYXRlRGF0YVNlY3Rpb24sIG1tQXBw
bHlQZXJtaXNzaW9ucywgbW1EZXN0cm95KTsKLSAgICAKLSAgICAgICAgTExWTUV4ZWN1dGlvbkVu
Z2luZVJlZiBlbmdpbmU7Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNBUk02NCgpKSB7Ci0jaWYg
T1MoREFSV0lOKQotICAgICAgICAgICAgbGx2bS0+U2V0VGFyZ2V0KHN0YXRlLm1vZHVsZSwgImFy
bTY0LWFwcGxlLWlvcyIpOwotI2VsaWYgT1MoTElOVVgpCi0gICAgICAgICAgICBsbHZtLT5TZXRU
YXJnZXQoc3RhdGUubW9kdWxlLCAiYWFyY2g2NC1saW51eC1nbnUiKTsKLSNlbHNlCi0jZXJyb3Ig
IlVucmVjb2duaXplZCBPUyIKLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxsdm0t
PkNyZWF0ZU1DSklUQ29tcGlsZXJGb3JNb2R1bGUoJmVuZ2luZSwgc3RhdGUubW9kdWxlLCAmb3B0
aW9ucywgc2l6ZW9mKG9wdGlvbnMpLCAmZXJyb3IpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCJG
QVRBTDogQ291bGQgbm90IGNyZWF0ZSBMTFZNIGV4ZWN1dGlvbiBlbmdpbmU6ICIsIGVycm9yLCAi
XG4iKTsKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IC8vIEF0IHRoaXMgcG9pbnQgd2Ugbm8gbG9uZ2VyIG93biB0aGUgbW9kdWxlLgotICAgICAgICBM
TW9kdWxlIG1vZHVsZSA9IHN0YXRlLm1vZHVsZTsKLSAgICAgICAgc3RhdGUubW9kdWxlID0gbnVs
bHB0cjsKLQotICAgICAgICAvLyBUaGUgZGF0YSBsYXlvdXQgYWxzbyBoYXMgdG8gYmUgc2V0IGlu
IHRoZSBtb2R1bGUuIEdldCB0aGUgZGF0YSBsYXlvdXQgZnJvbSB0aGUgTUNKSVQgYW5kIGFwcGx5
Ci0gICAgICAgIC8vIGl0IHRvIHRoZSBtb2R1bGUuCi0gICAgICAgIExMVk1UYXJnZXRNYWNoaW5l
UmVmIHRhcmdldE1hY2hpbmUgPSBsbHZtLT5HZXRFeGVjdXRpb25FbmdpbmVUYXJnZXRNYWNoaW5l
KGVuZ2luZSk7Ci0gICAgICAgIExMVk1UYXJnZXREYXRhUmVmIHRhcmdldERhdGEgPSBsbHZtLT5H
ZXRFeGVjdXRpb25FbmdpbmVUYXJnZXREYXRhKGVuZ2luZSk7Ci0gICAgICAgIGNoYXIqIHN0cmlu
Z1JlcE9mVGFyZ2V0RGF0YSA9IGxsdm0tPkNvcHlTdHJpbmdSZXBPZlRhcmdldERhdGEodGFyZ2V0
RGF0YSk7Ci0gICAgICAgIGxsdm0tPlNldERhdGFMYXlvdXQobW9kdWxlLCBzdHJpbmdSZXBPZlRh
cmdldERhdGEpOwotICAgICAgICBmcmVlKHN0cmluZ1JlcE9mVGFyZ2V0RGF0YSk7Ci0KLSAgICAg
ICAgTExWTVBhc3NNYW5hZ2VyUmVmIGZ1bmN0aW9uUGFzc2VzID0gMDsKLSAgICAgICAgTExWTVBh
c3NNYW5hZ2VyUmVmIG1vZHVsZVBhc3NlczsKLQotICAgICAgICBpZiAoT3B0aW9uczo6bGx2bVNp
bXBsZU9wdCgpKSB7Ci0gICAgICAgICAgICBtb2R1bGVQYXNzZXMgPSBsbHZtLT5DcmVhdGVQYXNz
TWFuYWdlcigpOwotICAgICAgICAgICAgbGx2bS0+QWRkVGFyZ2V0RGF0YSh0YXJnZXREYXRhLCBt
b2R1bGVQYXNzZXMpOwotICAgICAgICAgICAgbGx2bS0+QWRkQW5hbHlzaXNQYXNzZXModGFyZ2V0
TWFjaGluZSwgbW9kdWxlUGFzc2VzKTsKLSAgICAgICAgICAgIGxsdm0tPkFkZFByb21vdGVNZW1v
cnlUb1JlZ2lzdGVyUGFzcyhtb2R1bGVQYXNzZXMpOwotICAgICAgICAgICAgbGx2bS0+QWRkR2xv
YmFsT3B0aW1pemVyUGFzcyhtb2R1bGVQYXNzZXMpOwotICAgICAgICAgICAgbGx2bS0+QWRkRnVu
Y3Rpb25JbmxpbmluZ1Bhc3MobW9kdWxlUGFzc2VzKTsKLSAgICAgICAgICAgIGxsdm0tPkFkZFBy
dW5lRUhQYXNzKG1vZHVsZVBhc3Nlcyk7Ci0gICAgICAgICAgICBsbHZtLT5BZGRHbG9iYWxEQ0VQ
YXNzKG1vZHVsZVBhc3Nlcyk7Ci0gICAgICAgICAgICBsbHZtLT5BZGRDb25zdGFudFByb3BhZ2F0
aW9uUGFzcyhtb2R1bGVQYXNzZXMpOwotICAgICAgICAgICAgbGx2bS0+QWRkQWdncmVzc2l2ZURD
RVBhc3MobW9kdWxlUGFzc2VzKTsKLSAgICAgICAgICAgIGxsdm0tPkFkZEluc3RydWN0aW9uQ29t
YmluaW5nUGFzcyhtb2R1bGVQYXNzZXMpOwotICAgICAgICAgICAgLy8gQkVHSU4gLSBETyBOT1Qg
Q0hBTkdFIFRIRSBPUkRFUiBPRiBUSEUgQUxJQVMgQU5BTFlTSVMgUEFTU0VTCi0gICAgICAgICAg
ICBsbHZtLT5BZGRUeXBlQmFzZWRBbGlhc0FuYWx5c2lzUGFzcyhtb2R1bGVQYXNzZXMpOwotICAg
ICAgICAgICAgbGx2bS0+QWRkQmFzaWNBbGlhc0FuYWx5c2lzUGFzcyhtb2R1bGVQYXNzZXMpOwot
ICAgICAgICAgICAgLy8gRU5EIC0gRE8gTk9UIENIQU5HRSBUSEUgT1JERVIgT0YgVEhFIEFMSUFT
IEFOQUxZU0lTIFBBU1NFUwotICAgICAgICAgICAgbGx2bS0+QWRkR1ZOUGFzcyhtb2R1bGVQYXNz
ZXMpOwotICAgICAgICAgICAgbGx2bS0+QWRkQ0ZHU2ltcGxpZmljYXRpb25QYXNzKG1vZHVsZVBh
c3Nlcyk7Ci0gICAgICAgICAgICBsbHZtLT5BZGREZWFkU3RvcmVFbGltaW5hdGlvblBhc3MobW9k
dWxlUGFzc2VzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGVuYWJsZUxMVk1GYXN0
SVNlbCkKLSAgICAgICAgICAgICAgICBsbHZtLT5BZGRMb3dlclN3aXRjaFBhc3MobW9kdWxlUGFz
c2VzKTsKLQotICAgICAgICAgICAgbGx2bS0+UnVuUGFzc01hbmFnZXIobW9kdWxlUGFzc2VzLCBt
b2R1bGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTExWTVBhc3NNYW5hZ2VyQnVp
bGRlclJlZiBwYXNzQnVpbGRlciA9IGxsdm0tPlBhc3NNYW5hZ2VyQnVpbGRlckNyZWF0ZSgpOwot
ICAgICAgICAgICAgbGx2bS0+UGFzc01hbmFnZXJCdWlsZGVyU2V0T3B0TGV2ZWwocGFzc0J1aWxk
ZXIsIE9wdGlvbnM6Omxsdm1PcHRpbWl6YXRpb25MZXZlbCgpKTsKLSAgICAgICAgICAgIGxsdm0t
PlBhc3NNYW5hZ2VyQnVpbGRlclVzZUlubGluZXJXaXRoVGhyZXNob2xkKHBhc3NCdWlsZGVyLCAy
NzUpOwotICAgICAgICAgICAgbGx2bS0+UGFzc01hbmFnZXJCdWlsZGVyU2V0U2l6ZUxldmVsKHBh
c3NCdWlsZGVyLCBPcHRpb25zOjpsbHZtU2l6ZUxldmVsKCkpOwotICAgICAgICAKLSAgICAgICAg
ICAgIGZ1bmN0aW9uUGFzc2VzID0gbGx2bS0+Q3JlYXRlRnVuY3Rpb25QYXNzTWFuYWdlckZvck1v
ZHVsZShtb2R1bGUpOwotICAgICAgICAgICAgbW9kdWxlUGFzc2VzID0gbGx2bS0+Q3JlYXRlUGFz
c01hbmFnZXIoKTsKLSAgICAgICAgCi0gICAgICAgICAgICBsbHZtLT5BZGRUYXJnZXREYXRhKGxs
dm0tPkdldEV4ZWN1dGlvbkVuZ2luZVRhcmdldERhdGEoZW5naW5lKSwgbW9kdWxlUGFzc2VzKTsK
LSAgICAgICAgCi0gICAgICAgICAgICBsbHZtLT5QYXNzTWFuYWdlckJ1aWxkZXJQb3B1bGF0ZUZ1
bmN0aW9uUGFzc01hbmFnZXIocGFzc0J1aWxkZXIsIGZ1bmN0aW9uUGFzc2VzKTsKLSAgICAgICAg
ICAgIGxsdm0tPlBhc3NNYW5hZ2VyQnVpbGRlclBvcHVsYXRlTW9kdWxlUGFzc01hbmFnZXIocGFz
c0J1aWxkZXIsIG1vZHVsZVBhc3Nlcyk7Ci0gICAgICAgIAotICAgICAgICAgICAgbGx2bS0+UGFz
c01hbmFnZXJCdWlsZGVyRGlzcG9zZShwYXNzQnVpbGRlcik7Ci0gICAgICAgIAotICAgICAgICAg
ICAgbGx2bS0+SW5pdGlhbGl6ZUZ1bmN0aW9uUGFzc01hbmFnZXIoZnVuY3Rpb25QYXNzZXMpOwot
ICAgICAgICAgICAgZm9yIChMVmFsdWUgZnVuY3Rpb24gPSBsbHZtLT5HZXRGaXJzdEZ1bmN0aW9u
KG1vZHVsZSk7IGZ1bmN0aW9uOyBmdW5jdGlvbiA9IGxsdm0tPkdldE5leHRGdW5jdGlvbihmdW5j
dGlvbikpCi0gICAgICAgICAgICAgICAgbGx2bS0+UnVuRnVuY3Rpb25QYXNzTWFuYWdlcihmdW5j
dGlvblBhc3NlcywgZnVuY3Rpb24pOwotICAgICAgICAgICAgbGx2bS0+RmluYWxpemVGdW5jdGlv
blBhc3NNYW5hZ2VyKGZ1bmN0aW9uUGFzc2VzKTsKLSAgICAgICAgCi0gICAgICAgICAgICBsbHZt
LT5SdW5QYXNzTWFuYWdlcihtb2R1bGVQYXNzZXMsIG1vZHVsZSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgdmVyYm9zZUNvbXBpbGF0aW9uRW5h
YmxlZCgpKQotICAgICAgICAgICAgc3RhdGUuZHVtcFN0YXRlKG1vZHVsZSwgImFmdGVyIG9wdGlt
aXphdGlvbiIpOwotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8gYWRkIHN1cHBv
cnQgZm9yIHRoZSBjYXNlIHdoZXJlIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuCi0gICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjAKLSAg
ICAgICAgc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEdlbmVyYXRl
ZEZ1bmN0aW9uPihsbHZtLT5HZXRQb2ludGVyVG9HbG9iYWwoZW5naW5lLCBzdGF0ZS5mdW5jdGlv
bikpOwotICAgICAgICBpZiAoZnVuY3Rpb25QYXNzZXMpCi0gICAgICAgICAgICBsbHZtLT5EaXNw
b3NlUGFzc01hbmFnZXIoZnVuY3Rpb25QYXNzZXMpOwotICAgICAgICBsbHZtLT5EaXNwb3NlUGFz
c01hbmFnZXIobW9kdWxlUGFzc2VzKTsKLSAgICAgICAgbGx2bS0+RGlzcG9zZUV4ZWN1dGlvbkVu
Z2luZShlbmdpbmUpOwotICAgIH0KLQotICAgIGlmIChzYWZlcG9pbnRSZXN1bHQuZGlkR2V0Q2Fu
Y2VsbGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBSRUxFQVNFX0FTU0VSVCghc3RhdGUuZ3Jh
cGgubV92bS5oZWFwLmlzQ29sbGVjdGluZygpKTsKLSAgICAKLSAgICBpZiAoc3RhdGUuYWxsb2Nh
dGlvbkZhaWxlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChzaG91bGREdW1wRGlz
YXNzZW1ibHkoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUuaml0
Q29kZS0+aGFuZGxlcygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBFeGVjdXRhYmxlTWVt
b3J5SGFuZGxlKiBoYW5kbGUgPSBzdGF0ZS5qaXRDb2RlLT5oYW5kbGVzKClbaV0uZ2V0KCk7Ci0g
ICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgICAgICJHZW5lcmF0ZWQgTExWTSBjb2Rl
IGZvciAiLAotICAgICAgICAgICAgICAgIENvZGVCbG9ja1dpdGhKSVRUeXBlKHN0YXRlLmdyYXBo
Lm1fY29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpLAotICAgICAgICAgICAgICAgICIgIyIsIGks
ICIsICIsIHN0YXRlLmNvZGVTZWN0aW9uTmFtZXNbaV0sICI6XG4iKTsKLSAgICAgICAgICAgIGRp
c2Fzc2VtYmxlKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cihoYW5kbGUt
PnN0YXJ0KCkpLCBoYW5kbGUtPnNpemVJbkJ5dGVzKCksCi0gICAgICAgICAgICAgICAgIiAgICAi
LCBXVEY6OmRhdGFGaWxlKCksIExMVk1TdWJzZXQpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUuaml0Q29kZS0+ZGF0YVNlY3Rpb25z
KCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIERhdGFTZWN0aW9uKiBzZWN0aW9uID0gc3Rh
dGUuaml0Q29kZS0+ZGF0YVNlY3Rpb25zKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICBkYXRhTG9n
KAotICAgICAgICAgICAgICAgICJHZW5lcmF0ZWQgTExWTSBkYXRhIHNlY3Rpb24gZm9yICIsCi0g
ICAgICAgICAgICAgICAgQ29kZUJsb2NrV2l0aEpJVFR5cGUoc3RhdGUuZ3JhcGgubV9jb2RlQmxv
Y2ssIEpJVENvZGU6OkZUTEpJVCksCi0gICAgICAgICAgICAgICAgIiAjIiwgaSwgIiwgIiwgc3Rh
dGUuZGF0YVNlY3Rpb25OYW1lc1tpXSwgIjpcbiIpOwotICAgICAgICAgICAgZHVtcERhdGFTZWN0
aW9uKHNlY3Rpb24sICIgICAgIik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgc3RkOjp1
bmlxdWVfcHRyPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PiByZWdpc3Rlck9mZnNldHMgPSBwYXJzZVVu
d2luZEluZm8oCi0gICAgICAgIHN0YXRlLnVud2luZERhdGFTZWN0aW9uLCBzdGF0ZS51bndpbmRE
YXRhU2VjdGlvblNpemUsCi0gICAgICAgIHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uKTsKLSAgICBp
ZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpIHsKLSAgICAgICAgZGF0YUxvZygiVW53aW5kIGlu
Zm8gZm9yICIsIENvZGVCbG9ja1dpdGhKSVRUeXBlKHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBK
SVRDb2RlOjpGVExKSVQpLCAiOlxuIik7Ci0gICAgICAgIGRhdGFMb2coIiAgICAiLCAqcmVnaXN0
ZXJPZmZzZXRzLCAiXG4iKTsKLSAgICB9Ci0gICAgc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2stPnNl
dENhbGxlZVNhdmVSZWdpc3RlcnMoV1RGTW92ZShyZWdpc3Rlck9mZnNldHMpKTsKLSAgICAKLSAg
ICBpZiAoc3RhdGUuc3RhY2ttYXBzU2VjdGlvbiAmJiBzdGF0ZS5zdGFja21hcHNTZWN0aW9uLT5z
aXplKCkpIHsKLSAgICAgICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJseSgpKSB7Ci0gICAgICAg
ICAgICBkYXRhTG9nKAotICAgICAgICAgICAgICAgICJHZW5lcmF0ZWQgTExWTSBzdGFja21hcHMg
c2VjdGlvbiBmb3IgIiwKLSAgICAgICAgICAgICAgICBDb2RlQmxvY2tXaXRoSklUVHlwZShzdGF0
ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSwgIjpcbiIpOwotICAgICAgICAg
ICAgZGF0YUxvZygiICAgIFJhdyBkYXRhOlxuIik7Ci0gICAgICAgICAgICBkdW1wRGF0YVNlY3Rp
b24oc3RhdGUuc3RhY2ttYXBzU2VjdGlvbi5nZXQoKSwgIiAgICAiKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgUmVmUHRyPERhdGFWaWV3PiBzdGFja21hcHNEYXRhID0gRGF0YVZpZXc6
OmNyZWF0ZSgKLSAgICAgICAgICAgIEFycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGUuc3RhY2ttYXBz
U2VjdGlvbi0+YmFzZSgpLCBzdGF0ZS5zdGFja21hcHNTZWN0aW9uLT5zaXplKCkpKTsKLSAgICAg
ICAgc3RhdGUuaml0Q29kZS0+c3RhY2ttYXBzLnBhcnNlKHN0YWNrbWFwc0RhdGEuZ2V0KCkpOwot
ICAgIAotICAgICAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpIHsKLSAgICAgICAgICAg
IGRhdGFMb2coIiAgICBTdHJ1Y3R1cmVkIGRhdGE6XG4iKTsKLSAgICAgICAgICAgIHN0YXRlLmpp
dENvZGUtPnN0YWNrbWFwcy5kdW1wTXVsdGlsaW5lKFdURjo6ZGF0YUZpbGUoKSwgIiAgICAgICAg
Iik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwIHJl
Y29yZE1hcCA9IHN0YXRlLmppdENvZGUtPnN0YWNrbWFwcy5jb21wdXRlUmVjb3JkTWFwKCk7Ci0g
ICAgICAgIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKLSAgICAgICAgICAgIHN0YXRlLCBz
dGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgc3RhdGUuaml0Q29kZS5nZXQoKSwgc3RhdGUuZ2VuZXJh
dGVkRnVuY3Rpb24sCi0gICAgICAgICAgICByZWNvcmRNYXApOwotICAgICAgICBpZiAoc3RhdGUu
YWxsb2NhdGlvbkZhaWxlZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAg
IGlmIChzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5
KCkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5qaXRDb2Rl
LT5oYW5kbGVzKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGUuY29k
ZVNlY3Rpb25OYW1lc1tpXSAhPSBTRUNUSU9OX05BTUUoInRleHQiKSkKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgRXhlY3V0
YWJsZU1lbW9yeUhhbmRsZSogaGFuZGxlID0gc3RhdGUuaml0Q29kZS0+aGFuZGxlcygpW2ldLmdl
dCgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENTdHJpbmcgaGVhZGVyID0g
dG9DU3RyaW5nKAotICAgICAgICAgICAgICAgICAgICAiR2VuZXJhdGVkIExMVk0gY29kZSBhZnRl
ciBzdGFja21hcC1iYXNlZCBmaXgtdXAgZm9yICIsCi0gICAgICAgICAgICAgICAgICAgIENvZGVC
bG9ja1dpdGhKSVRUeXBlKHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQp
LAotICAgICAgICAgICAgICAgICAgICAiIGluICIsIHN0YXRlLmdyYXBoLm1fcGxhbi5tb2RlLCAi
ICMiLCBpLCAiLCAiLAotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jb2RlU2VjdGlvbk5hbWVz
W2ldLCAiOlxuIik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKE9wdGlv
bnM6OmFzeW5jRGlzYXNzZW1ibHkoKSkgewotICAgICAgICAgICAgICAgICAgICBkaXNhc3NlbWJs
ZUFzeW5jaHJvbm91c2x5KAotICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYoaGFuZGxlKSwgaGFuZGxlLT5zaXplSW5CeXRlcygpLCAiICAgICIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBMTFZNU3Vic2V0KTsKLSAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGRhdGFMb2coaGVhZGVyKTsKLSAgICAgICAgICAgICAgICBkaXNhc3NlbWJsZSgKLSAg
ICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGhhbmRsZS0+c3RhcnQoKSks
IGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwKLSAgICAgICAgICAgICAgICAgICAgIiAgICAiLCBXVEY6
OmRhdGFGaWxlKCksIExMVk1TdWJzZXQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCi0KLSNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkgJiYgRlRMX1VTRVNfQjMKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDb21waWxlQmluYXJ5T3AuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ29tcGlsZUJpbmFyeU9wLmNwcAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlQmluYXJ5T3AuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMxMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZUTENvbXBpbGVCaW5hcnlP
cC5oIgotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0KLSNpbmNsdWRlICJERkdOb2RlVHlwZS5oIgot
I2luY2x1ZGUgIkZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oIgotI2luY2x1ZGUgIkdQUkluZm8u
aCIKLSNpbmNsdWRlICJKSVRBZGRHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJKSVRCaXRBbmRHZW5l
cmF0b3IuaCIKLSNpbmNsdWRlICJKSVRCaXRPckdlbmVyYXRvci5oIgotI2luY2x1ZGUgIkpJVEJp
dFhvckdlbmVyYXRvci5oIgotI2luY2x1ZGUgIkpJVERpdkdlbmVyYXRvci5oIgotI2luY2x1ZGUg
IkpJVExlZnRTaGlmdEdlbmVyYXRvci5oIgotI2luY2x1ZGUgIkpJVE11bEdlbmVyYXRvci5oIgot
I2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJKSVRTdWJHZW5l
cmF0b3IuaCIKLSNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKLQotbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewotCi11c2luZyBuYW1lc3BhY2UgREZHOwotCi1jbGFz
cyBCaW5hcnlTbmlwcGV0UmVnaXN0ZXJDb250ZXh0IHsKLSAgICAvLyBUaGUgcHVycG9zZSBvZiB0
aGlzIGNsYXNzIGlzIHRvIHNodWZmbGUgcmVnaXN0ZXJzIHRvIGdldCB0aGVtIGludG8gdGhlIHN0
YXRlCi0gICAgLy8gdGhhdCBiYXNlbGluZSBjb2RlIGV4cGVjdHMgc28gdGhhdCB3ZSBjYW4gdXNl
IHRoZSBiYXNlbGluZSBzbmlwcGV0IGdlbmVyYXRvcnMgaS5lLgotICAgIC8vICAgIDEuIEVuc3Vy
ZSB0aGF0IHRoZSBpbnB1dHMgYW5kIG91dHB1dCBhcmUgbm90IGluIHJlc2VydmVkIHJlZ2lzdGVy
cyAod2hpY2gKLSAgICAvLyAgICAgICBpbmNsdWRlIHRoZSB0YWcgcmVnaXN0ZXJzKS4gVGhlIHNu
aXBwZXQgd2lsbCB1c2UgdGhlc2UgcmVzZXJ2ZWQgcmVnaXN0ZXJzLgotICAgIC8vICAgICAgIEhl
bmNlLCB3ZSBuZWVkIHRvIHB1dCB0aGUgaW5wdXRzIGFuZCBvdXRwdXQgaW4gb3RoZXIgc2NyYXRj
aCByZWdpc3RlcnMuCi0gICAgLy8gICAgMi4gVGFnIHJlZ2lzdGVycyBhcmUgbG9hZGVkIHdpdGgg
dGhlIGV4cGVjdGVkIHZhbHVlcy4KLSAgICAvLwotICAgIC8vIFdoZW4gdGhlIHNuaXBwZXQgaXMg
ZG9uZToKLSAgICAvLyAgICAxLiBJZiB3ZSBoYWQgcmUtYXNzaWduZWQgdGhlIHJlc3VsdCByZWdp
c3RlciB0byBhIHNjcmF0Y2gsIHdlIG5lZWQgdG8gY29weSB0aGUKLSAgICAvLyAgICAgICByZXN1
bHQgYmFjayBmcm9tIHRoZSBzY3JhdGNoLgotICAgIC8vICAgIDIuIFJlc3RvcmUgdGhlIGlucHV0
IGFuZCB0YWcgcmVnaXN0ZXJzIHRvIHRoZSB2YWx1ZXMgdGhhdCBMTFZNIHB1dCB0aGVyZSBvcmln
aW5hbGx5LgotICAgIC8vICAgICAgIFRoYXQgaXMgdW5sZXNzIHdoZW4gb25lIG9mIHRoZW0gaXMg
YWxzbyB0aGUgcmVzdWx0IHJlZ2lzdGVyLiBJbiB0aGF0IGNhc2UsIHdlCi0gICAgLy8gICAgICAg
ZG9uJ3Qgd2FudCB0byB0cmFzaCB0aGUgcmVzdWx0LCBhbmQgaGVuY2UsIHNob3VsZCBub3QgcmVz
dG9yZSBpbnRvIGl0LgotCi1wdWJsaWM6Ci0gICAgQmluYXJ5U25pcHBldFJlZ2lzdGVyQ29udGV4
dChTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3ImIGFsbG9jYXRvciwgR1BSUmVnJiByZXN1bHQsIEdQ
UlJlZyYgbGVmdCwgR1BSUmVnJiByaWdodCkKLSAgICAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0
b3IpCi0gICAgICAgICwgbV9yZXN1bHQocmVzdWx0KQotICAgICAgICAsIG1fbGVmdChsZWZ0KQot
ICAgICAgICAsIG1fcmlnaHQocmlnaHQpCi0gICAgICAgICwgbV9vcmlnUmVzdWx0KHJlc3VsdCkK
LSAgICAgICAgLCBtX29yaWdMZWZ0KGxlZnQpCi0gICAgICAgICwgbV9vcmlnUmlnaHQocmlnaHQp
Ci0gICAgewotICAgICAgICBtX2FsbG9jYXRvci5sb2NrKG1fcmVzdWx0KTsKLSAgICAgICAgbV9h
bGxvY2F0b3IubG9jayhtX2xlZnQpOwotICAgICAgICBtX2FsbG9jYXRvci5sb2NrKG1fcmlnaHQp
OwotCi0gICAgICAgIFJlZ2lzdGVyU2V0IGlucHV0QW5kT3V0cHV0UmVnaXN0ZXJzID0gUmVnaXN0
ZXJTZXQobV9sZWZ0LCBtX3JpZ2h0LCBtX3Jlc3VsdCk7Ci0gICAgICAgIFJlZ2lzdGVyU2V0IHJl
c2VydmVkUmVnaXN0ZXJzOwotICAgICAgICBmb3IgKEdQUlJlZyByZWcgOiBHUFJJbmZvOjpyZXNl
cnZlZFJlZ2lzdGVycygpKQotICAgICAgICAgICAgcmVzZXJ2ZWRSZWdpc3RlcnMuc2V0KHJlZyk7
Ci0KLSAgICAgICAgaWYgKHJlc2VydmVkUmVnaXN0ZXJzLmdldChtX2xlZnQpKQotICAgICAgICAg
ICAgbV9sZWZ0ID0gbV9hbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgICAgIGlm
IChyZXNlcnZlZFJlZ2lzdGVycy5nZXQobV9yaWdodCkpIHsKLSAgICAgICAgICAgIGlmIChtX29y
aWdSaWdodCA9PSBtX29yaWdMZWZ0KQotICAgICAgICAgICAgICAgIG1fcmlnaHQgPSBtX2xlZnQ7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9yaWdodCA9IG1fYWxsb2NhdG9y
LmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZXNlcnZlZFJl
Z2lzdGVycy5nZXQobV9yZXN1bHQpKSB7Ci0gICAgICAgICAgICBpZiAobV9vcmlnUmVzdWx0ID09
IG1fb3JpZ0xlZnQpCi0gICAgICAgICAgICAgICAgbV9yZXN1bHQgPSBtX2xlZnQ7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChtX29yaWdSZXN1bHQgPT0gbV9vcmlnUmlnaHQpCi0gICAgICAgICAgICAg
ICAgbV9yZXN1bHQgPSBtX3JpZ2h0OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IG1fcmVzdWx0ID0gbV9hbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoIWlucHV0QW5kT3V0cHV0UmVnaXN0ZXJzLmdldChHUFJJbmZvOjp0YWdN
YXNrUmVnaXN0ZXIpKQotICAgICAgICAgICAgbV9zYXZlZFRhZ01hc2tSZWdpc3RlciA9IG1fYWxs
b2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgICAgICBpZiAoIWlucHV0QW5kT3V0cHV0
UmVnaXN0ZXJzLmdldChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKQotICAgICAgICAg
ICAgbV9zYXZlZFRhZ1R5cGVOdW1iZXJSZWdpc3RlciA9IG1fYWxsb2NhdG9yLmFsbG9jYXRlU2Ny
YXRjaEdQUigpOwotICAgIH0KLQotICAgIHZvaWQgaW5pdGlhbGl6ZVJlZ2lzdGVycyhDQ2FsbEhl
bHBlcnMmIGppdCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2xlZnQgIT0gbV9vcmlnTGVmdCkKLSAg
ICAgICAgICAgIGppdC5tb3ZlKG1fb3JpZ0xlZnQsIG1fbGVmdCk7Ci0gICAgICAgIGlmIChtX3Jp
Z2h0ICE9IG1fb3JpZ1JpZ2h0ICYmIG1fb3JpZ1JpZ2h0ICE9IG1fb3JpZ0xlZnQpCi0gICAgICAg
ICAgICBqaXQubW92ZShtX29yaWdSaWdodCwgbV9yaWdodCk7Ci0gICAgICAgIAotICAgICAgICBp
ZiAobV9zYXZlZFRhZ01hc2tSZWdpc3RlciAhPSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAg
aml0Lm1vdmUoR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyLCBtX3NhdmVkVGFnTWFza1JlZ2lzdGVy
KTsKLSAgICAgICAgaWYgKG1fc2F2ZWRUYWdUeXBlTnVtYmVyUmVnaXN0ZXIgIT0gSW52YWxpZEdQ
UlJlZykKLSAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciwgbV9zYXZlZFRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0KLSAgICAgICAgaml0LmVtaXRNYXRl
cmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7Ci0gICAgfQotCi0gICAgdm9pZCByZXN0b3JlUmVn
aXN0ZXJzKENDYWxsSGVscGVycyYgaml0KQotICAgIHsKLSAgICAgICAgaWYgKG1fb3JpZ1Jlc3Vs
dCAhPSBtX3Jlc3VsdCkKLSAgICAgICAgICAgIGppdC5tb3ZlKG1fcmVzdWx0LCBtX29yaWdSZXN1
bHQpOwotICAgICAgICBpZiAobV9vcmlnTGVmdCAhPSBtX2xlZnQgJiYgbV9vcmlnTGVmdCAhPSBt
X29yaWdSZXN1bHQpCi0gICAgICAgICAgICBqaXQubW92ZShtX2xlZnQsIG1fb3JpZ0xlZnQpOwot
ICAgICAgICBpZiAobV9vcmlnUmlnaHQgIT0gbV9yaWdodCAmJiBtX29yaWdSaWdodCAhPSBtX29y
aWdSZXN1bHQgJiYgbV9vcmlnUmlnaHQgIT0gbV9vcmlnTGVmdCkKLSAgICAgICAgICAgIGppdC5t
b3ZlKG1fcmlnaHQsIG1fb3JpZ1JpZ2h0KTsKLQotICAgICAgICAvLyBXZSBhcmUgZ3VhcmFudGVl
ZCB0aGF0IHRoZSB0YWcgcmVnaXN0ZXJzIGFyZSBub3QgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFs
IGlucHV0Ci0gICAgICAgIC8vIG9yIG91dHB1dCByZWdpc3RlcnMuIE90aGVyd2lzZSwgd2Ugd291
bGQgbm90IGhhdmUgYWxsb2NhdGVkIGEgc2NyYXRjaCBmb3IgdGhlbS4KLSAgICAgICAgLy8gSGVu
Y2UsIHdlIGRvbid0IG5lZWQgdG8gbmVlZCB0byBjaGVjayBmb3Igb3ZlcmxhcCBsaWtlIHdlIGRv
IGZvciB0aGUgaW5wdXQgcmVnaXN0ZXJzLgotICAgICAgICBpZiAobV9zYXZlZFRhZ01hc2tSZWdp
c3RlciAhPSBJbnZhbGlkR1BSUmVnKSB7Ci0gICAgICAgICAgICBBU1NFUlQoR1BSSW5mbzo6dGFn
TWFza1JlZ2lzdGVyICE9IG1fb3JpZ0xlZnQpOwotICAgICAgICAgICAgQVNTRVJUKEdQUkluZm86
OnRhZ01hc2tSZWdpc3RlciAhPSBtX29yaWdSaWdodCk7Ci0gICAgICAgICAgICBBU1NFUlQoR1BS
SW5mbzo6dGFnTWFza1JlZ2lzdGVyICE9IG1fb3JpZ1Jlc3VsdCk7Ci0gICAgICAgICAgICBqaXQu
bW92ZShtX3NhdmVkVGFnTWFza1JlZ2lzdGVyLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChtX3NhdmVkVGFnVHlwZU51bWJlclJlZ2lzdGVyICE9IElu
dmFsaWRHUFJSZWcpIHsKLSAgICAgICAgICAgIEFTU0VSVChHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIgIT0gbV9vcmlnTGVmdCk7Ci0gICAgICAgICAgICBBU1NFUlQoR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyICE9IG1fb3JpZ1JpZ2h0KTsKLSAgICAgICAgICAgIEFTU0VSVChH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIgIT0gbV9vcmlnUmVzdWx0KTsKLSAgICAgICAg
ICAgIGppdC5tb3ZlKG1fc2F2ZWRUYWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsKLQotICAgIEdQUlJlZyYgbV9yZXN1
bHQ7Ci0gICAgR1BSUmVnJiBtX2xlZnQ7Ci0gICAgR1BSUmVnJiBtX3JpZ2h0OwotCi0gICAgR1BS
UmVnIG1fb3JpZ1Jlc3VsdDsKLSAgICBHUFJSZWcgbV9vcmlnTGVmdDsKLSAgICBHUFJSZWcgbV9v
cmlnUmlnaHQ7Ci0KLSAgICBHUFJSZWcgbV9zYXZlZFRhZ01hc2tSZWdpc3RlciB7IEludmFsaWRH
UFJSZWcgfTsKLSAgICBHUFJSZWcgbV9zYXZlZFRhZ1R5cGVOdW1iZXJSZWdpc3RlciB7IEludmFs
aWRHUFJSZWcgfTsKLX07Ci0KLWVudW0gU2NyYXRjaEZQUlVzYWdlIHsKLSAgICBEb250TmVlZFNj
cmF0Y2hGUFIsCi0gICAgTmVlZFNjcmF0Y2hGUFIKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFNu
aXBwZXRHZW5lcmF0b3I+Ci12b2lkIGdlbmVyYXRlQmluYXJ5Qml0T3BGYXN0UGF0aChCaW5hcnlP
cERlc2NyaXB0b3ImIGljLCBDQ2FsbEhlbHBlcnMmIGppdCwKLSAgICBHUFJSZWcgcmVzdWx0LCBH
UFJSZWcgbGVmdCwgR1BSUmVnIHJpZ2h0LCBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzLAotICAg
IENDYWxsSGVscGVyczo6SnVtcCYgZG9uZSwgQ0NhbGxIZWxwZXJzOjpKdW1wJiBzbG93UGF0aFN0
YXJ0KQotewotICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3IodXNlZFJlZ2lz
dGVycyk7Ci0KLSAgICBCaW5hcnlTbmlwcGV0UmVnaXN0ZXJDb250ZXh0IGNvbnRleHQoYWxsb2Nh
dG9yLCByZXN1bHQsIGxlZnQsIHJpZ2h0KTsKLQotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gYWxs
b2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotCi0gICAgU25pcHBldEdlbmVyYXRvciBnZW4o
aWMubGVmdE9wZXJhbmQoKSwgaWMucmlnaHRPcGVyYW5kKCksIEpTVmFsdWVSZWdzKHJlc3VsdCks
Ci0gICAgICAgIEpTVmFsdWVSZWdzKGxlZnQpLCBKU1ZhbHVlUmVncyhyaWdodCksIHNjcmF0Y2hH
UFIpOwotCi0gICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVz
ZXJ2ZWRTdGF0ZSA9Ci0gICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5
UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpO
b0V4dHJhU3BhY2UpOwotCi0gICAgY29udGV4dC5pbml0aWFsaXplUmVnaXN0ZXJzKGppdCk7Ci0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoaml0KTsKLQotICAgIEFTU0VSVChnZW4uZGlkRW1pdEZh
c3RQYXRoKCkpOwotICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsoJmppdCk7Ci0KLSAgICBjb250
ZXh0LnJlc3RvcmVSZWdpc3RlcnMoaml0KTsKLSAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJl
Z2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKLSAgICBkb25lID0gaml0Lmp1
bXAoKTsKLQotICAgIGdlbi5zbG93UGF0aEp1bXBMaXN0KCkubGluaygmaml0KTsKLSAgICBjb250
ZXh0LnJlc3RvcmVSZWdpc3RlcnMoaml0KTsKLSAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJl
Z2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKLSAgICBzbG93UGF0aFN0YXJ0
ID0gaml0Lmp1bXAoKTsKLX0KLQotc3RhdGljIHZvaWQgZ2VuZXJhdGVSaWdodFNoaWZ0RmFzdFBh
dGgoQmluYXJ5T3BEZXNjcmlwdG9yJiBpYywgQ0NhbGxIZWxwZXJzJiBqaXQsCi0gICAgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIGxlZnQsIEdQUlJlZyByaWdodCwgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lz
dGVycywKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAmIGRvbmUsIENDYWxsSGVscGVyczo6SnVtcCYg
c2xvd1BhdGhTdGFydCwKLSAgICBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yOjpTaGlmdFR5cGUgc2hp
ZnRUeXBlKQotewotICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3IodXNlZFJl
Z2lzdGVycyk7Ci0KLSAgICBCaW5hcnlTbmlwcGV0UmVnaXN0ZXJDb250ZXh0IGNvbnRleHQoYWxs
b2NhdG9yLCByZXN1bHQsIGxlZnQsIHJpZ2h0KTsKLQotICAgIEZQUlJlZyBsZWZ0RlBSID0gYWxs
b2NhdG9yLmFsbG9jYXRlU2NyYXRjaEZQUigpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gYWxs
b2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotCi0gICAgSklUUmlnaHRTaGlmdEdlbmVyYXRv
ciBnZW4oaWMubGVmdE9wZXJhbmQoKSwgaWMucmlnaHRPcGVyYW5kKCksIEpTVmFsdWVSZWdzKHJl
c3VsdCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGxlZnQpLCBKU1ZhbHVlUmVncyhyaWdodCksIGxl
ZnRGUFIsIHNjcmF0Y2hHUFIsIEludmFsaWRGUFJSZWcsIHNoaWZ0VHlwZSk7Ci0KLSAgICBTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlID0KLSAg
ICAgICAgYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6Ok5vRXh0cmFTcGFjZSk7Ci0K
LSAgICBjb250ZXh0LmluaXRpYWxpemVSZWdpc3RlcnMoaml0KTsKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aChqaXQpOwotCi0gICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7Ci0gICAg
Z2VuLmVuZEp1bXBMaXN0KCkubGluaygmaml0KTsKLSAgICBjb250ZXh0LnJlc3RvcmVSZWdpc3Rl
cnMoaml0KTsKLSAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhq
aXQsIHByZXNlcnZlZFN0YXRlKTsKLSAgICBkb25lID0gaml0Lmp1bXAoKTsKLQotICAgIGdlbi5z
bG93UGF0aEp1bXBMaXN0KCkubGluaygmaml0KTsKLSAgICBjb250ZXh0LnJlc3RvcmVSZWdpc3Rl
cnMoaml0KTsKLSAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhq
aXQsIHByZXNlcnZlZFN0YXRlKTsKLSAgICBzbG93UGF0aFN0YXJ0ID0gaml0Lmp1bXAoKTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5QXJpdGhPcEdlbmVyYXRvciwgU2NyYXRjaEZQUlVz
YWdlIHNjcmF0Y2hGUFJVc2FnZSA9IERvbnROZWVkU2NyYXRjaEZQUj4KLXZvaWQgZ2VuZXJhdGVC
aW5hcnlBcml0aE9wRmFzdFBhdGgoQmluYXJ5T3BEZXNjcmlwdG9yJiBpYywgQ0NhbGxIZWxwZXJz
JiBqaXQsCi0gICAgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGxlZnQsIEdQUlJlZyByaWdodCwgUmVn
aXN0ZXJTZXQgdXNlZFJlZ2lzdGVycywKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAmIGRvbmUsIEND
YWxsSGVscGVyczo6SnVtcCYgc2xvd1BhdGhTdGFydCkKLXsKLSAgICBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IgYWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOwotCi0gICAgQmluYXJ5U25pcHBldFJl
Z2lzdGVyQ29udGV4dCBjb250ZXh0KGFsbG9jYXRvciwgcmVzdWx0LCBsZWZ0LCByaWdodCk7Ci0K
LSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsK
LSAgICBGUFJSZWcgbGVmdEZQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hGUFIoKTsKLSAg
ICBGUFJSZWcgcmlnaHRGUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoRlBSKCk7Ci0gICAg
RlBSUmVnIHNjcmF0Y2hGUFIgPSBJbnZhbGlkRlBSUmVnOwotICAgIGlmIChzY3JhdGNoRlBSVXNh
Z2UgPT0gTmVlZFNjcmF0Y2hGUFIpCi0gICAgICAgIHNjcmF0Y2hGUFIgPSBhbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoRlBSKCk7Ci0KLSAgICBCaW5hcnlBcml0aE9wR2VuZXJhdG9yIGdlbihpYy5s
ZWZ0T3BlcmFuZCgpLCBpYy5yaWdodE9wZXJhbmQoKSwgSlNWYWx1ZVJlZ3MocmVzdWx0KSwKLSAg
ICAgICAgSlNWYWx1ZVJlZ3MobGVmdCksIEpTVmFsdWVSZWdzKHJpZ2h0KSwgbGVmdEZQUiwgcmln
aHRGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIpOwotCi0gICAgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0gICAgICAgIGFsbG9jYXRv
ci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4dHJhU3BhY2UpOwotCi0gICAgY29udGV4dC5p
bml0aWFsaXplUmVnaXN0ZXJzKGppdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoaml0KTsK
LQotICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwotICAgIGdlbi5lbmRKdW1wTGlz
dCgpLmxpbmsoJmppdCk7Ci0gICAgY29udGV4dC5yZXN0b3JlUmVnaXN0ZXJzKGppdCk7Ci0gICAg
YWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRT
dGF0ZSk7Ci0gICAgZG9uZSA9IGppdC5qdW1wKCk7Ci0KLSAgICBnZW4uc2xvd1BhdGhKdW1wTGlz
dCgpLmxpbmsoJmppdCk7Ci0gICAgY29udGV4dC5yZXN0b3JlUmVnaXN0ZXJzKGppdCk7Ci0gICAg
YWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRT
dGF0ZSk7Ci0gICAgc2xvd1BhdGhTdGFydCA9IGppdC5qdW1wKCk7Ci19Ci0KLXZvaWQgZ2VuZXJh
dGVCaW5hcnlPcEZhc3RQYXRoKEJpbmFyeU9wRGVzY3JpcHRvciYgaWMsIENDYWxsSGVscGVycyYg
aml0LAotICAgIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBsZWZ0LCBHUFJSZWcgcmlnaHQsIFJlZ2lz
dGVyU2V0IHVzZWRSZWdpc3RlcnMsCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wJiBkb25lLCBDQ2Fs
bEhlbHBlcnM6Okp1bXAmIHNsb3dQYXRoU3RhcnQpCi17Ci0gICAgc3dpdGNoIChpYy5ub2RlVHlw
ZSgpKSB7Ci0gICAgY2FzZSBCaXRBbmQ6Ci0gICAgICAgIGdlbmVyYXRlQmluYXJ5Qml0T3BGYXN0
UGF0aDxKSVRCaXRBbmRHZW5lcmF0b3I+KGljLCBqaXQsIHJlc3VsdCwgbGVmdCwgcmlnaHQsIHVz
ZWRSZWdpc3RlcnMsIGRvbmUsIHNsb3dQYXRoU3RhcnQpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEJpdE9yOgotICAgICAgICBnZW5lcmF0ZUJpbmFyeUJpdE9wRmFzdFBhdGg8SklUQml0T3JH
ZW5lcmF0b3I+KGljLCBqaXQsIHJlc3VsdCwgbGVmdCwgcmlnaHQsIHVzZWRSZWdpc3RlcnMsIGRv
bmUsIHNsb3dQYXRoU3RhcnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJpdFhvcjoKLSAg
ICAgICAgZ2VuZXJhdGVCaW5hcnlCaXRPcEZhc3RQYXRoPEpJVEJpdFhvckdlbmVyYXRvcj4oaWMs
IGppdCwgcmVzdWx0LCBsZWZ0LCByaWdodCwgdXNlZFJlZ2lzdGVycywgZG9uZSwgc2xvd1BhdGhT
dGFydCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQml0TFNoaWZ0OgotICAgICAgICBnZW5l
cmF0ZUJpbmFyeUJpdE9wRmFzdFBhdGg8SklUTGVmdFNoaWZ0R2VuZXJhdG9yPihpYywgaml0LCBy
ZXN1bHQsIGxlZnQsIHJpZ2h0LCB1c2VkUmVnaXN0ZXJzLCBkb25lLCBzbG93UGF0aFN0YXJ0KTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCaXRSU2hpZnQ6Ci0gICAgICAgIGdlbmVyYXRlUmln
aHRTaGlmdEZhc3RQYXRoKGljLCBqaXQsIHJlc3VsdCwgbGVmdCwgcmlnaHQsIHVzZWRSZWdpc3Rl
cnMsIGRvbmUsIHNsb3dQYXRoU3RhcnQsIEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3I6OlNpZ25lZFNo
aWZ0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCaXRVUlNoaWZ0OgotICAgICAgICBnZW5l
cmF0ZVJpZ2h0U2hpZnRGYXN0UGF0aChpYywgaml0LCByZXN1bHQsIGxlZnQsIHJpZ2h0LCB1c2Vk
UmVnaXN0ZXJzLCBkb25lLCBzbG93UGF0aFN0YXJ0LCBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yOjpV
bnNpZ25lZFNoaWZ0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcml0aERpdjoKLSAgICAg
ICAgZ2VuZXJhdGVCaW5hcnlBcml0aE9wRmFzdFBhdGg8SklURGl2R2VuZXJhdG9yLCBOZWVkU2Ny
YXRjaEZQUj4oaWMsIGppdCwgcmVzdWx0LCBsZWZ0LCByaWdodCwgdXNlZFJlZ2lzdGVycywgZG9u
ZSwgc2xvd1BhdGhTdGFydCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJpdGhNdWw6Ci0g
ICAgICAgIGdlbmVyYXRlQmluYXJ5QXJpdGhPcEZhc3RQYXRoPEpJVE11bEdlbmVyYXRvcj4oaWMs
IGppdCwgcmVzdWx0LCBsZWZ0LCByaWdodCwgdXNlZFJlZ2lzdGVycywgZG9uZSwgc2xvd1BhdGhT
dGFydCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJpdGhTdWI6Ci0gICAgICAgIGdlbmVy
YXRlQmluYXJ5QXJpdGhPcEZhc3RQYXRoPEpJVFN1YkdlbmVyYXRvcj4oaWMsIGppdCwgcmVzdWx0
LCBsZWZ0LCByaWdodCwgdXNlZFJlZ2lzdGVycywgZG9uZSwgc2xvd1BhdGhTdGFydCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgVmFsdWVBZGQ6Ci0gICAgICAgIGdlbmVyYXRlQmluYXJ5QXJp
dGhPcEZhc3RQYXRoPEpJVEFkZEdlbmVyYXRvcj4oaWMsIGppdCwgcmVzdWx0LCBsZWZ0LCByaWdo
dCwgdXNlZFJlZ2lzdGVycywgZG9uZSwgc2xvd1BhdGhTdGFydCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
fQotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCi0KLSNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZUJpbmFyeU9w
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlQmlu
YXJ5T3AuaAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDb21waWxlQmluYXJ5T3AuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0NyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBGVExDb21w
aWxlQmluYXJ5T3BfaAotI2RlZmluZSBGVExDb21waWxlQmluYXJ5T3BfaAotCi0jaWYgRU5BQkxF
KEZUTF9KSVQpCi0KLSNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLQotbmFtZXNwYWNlIEpTQyB7
Ci1uYW1lc3BhY2UgRlRMIHsKLQotY2xhc3MgQmluYXJ5T3BEZXNjcmlwdG9yOwotCi12b2lkIGdl
bmVyYXRlQmluYXJ5T3BGYXN0UGF0aChCaW5hcnlPcERlc2NyaXB0b3ImLCBDQ2FsbEhlbHBlcnMm
LAotICAgIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBsZWZ0LCBHUFJSZWcgcmlnaHQsIFJlZ2lzdGVy
U2V0IHVzZWRSZWdpc3RlcnMsCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wJiBkb25lLCBDQ2FsbEhl
bHBlcnM6Okp1bXAmIHNsb3dQYXRoU3RhcnQpOwotCi19IC8vIG5hbWVzcGFjZSBGVEwKLX0gLy8g
bmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0KLSNlbmRpZiAvLyBG
VExDb21waWxlQmluYXJ5T3BfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExE
V0FSRkRlYnVnTGluZUluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmNwcAkocmV2aXNpb24gMTk2Njg1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExEV0FSRkRlYnVnTGluZUluZm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkZUTERXQVJGRGVidWdMaW5lSW5mby5oIgotCi0jaWYgRU5BQkxFKEZUTF9K
SVQpCi0KLSNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7Ci0KLURlYnVnTGluZUludGVycHJldGVyOjpEZWJ1Z0xpbmVJbnRlcnByZXRlcihj
b25zdCBjaGFyKiBwcm9ncmFtKQotICAgIDogbV9wcm9ncmFtKHByb2dyYW0pCi0gICAgLCBtX2xv
Z1Jlc3VsdHMoZmFsc2UpCi17Ci0gICAgcmVzZXRJbnRlcnByZXRlclN0YXRlKCk7Ci19Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCByZWFkKGNvbnN0IGNoYXIqJiBwcm9ncmFtKQot
ewotICAgIFQgcmVzdWx0ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHByb2dyYW0pOwot
ICAgIHByb2dyYW0gKz0gc2l6ZW9mKFQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXVpbnQz
Ml90IERlYnVnTGluZUludGVycHJldGVyOjpwYXJzZVVMRUIxMjgoY29uc3QgY2hhciomIG9mZnNl
dCkKLXsKLSAgICB1aW50MzJfdCByZXN1bHQgPSAwOwotICAgIHVpbnQ4X3QgYnl0ZTsKLSAgICB1
bnNpZ25lZCBzaGlmdEFtb3VudCA9IDA7Ci0gICAgZG8gewotICAgICAgICBieXRlID0gcmVhZDx1
aW50OF90PihvZmZzZXQpOwotICAgICAgICByZXN1bHQgfD0gKGJ5dGUgJiB+MHg4MCkgPDwgc2hp
ZnRBbW91bnQ7Ci0gICAgICAgIHNoaWZ0QW1vdW50ICs9IDc7Ci0gICAgfSB3aGlsZSAoYnl0ZSAm
IDB4ODApOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWludDMyX3QgRGVidWdMaW5lSW50ZXJw
cmV0ZXI6OnBhcnNlU0xFQjEyOChjb25zdCBjaGFyKiYgb2Zmc2V0KQotewotICAgIGludDMyX3Qg
cmVzdWx0ID0gMDsKLSAgICB1aW50OF90IGJ5dGU7Ci0gICAgdW5zaWduZWQgc2hpZnRBbW91bnQg
PSAwOwotICAgIGRvIHsKLSAgICAgICAgYnl0ZSA9IHJlYWQ8dWludDhfdD4ob2Zmc2V0KTsKLSAg
ICAgICAgcmVzdWx0IHw9IChieXRlICYgfjB4ODApIDw8IHNoaWZ0QW1vdW50OwotICAgICAgICBz
aGlmdEFtb3VudCArPSA3OwotICAgIH0gd2hpbGUgKGJ5dGUgJiAweDgwKTsKLSAgICAKLSAgICAv
LyBJZiB0aGUgc2lnbiBiaXQgKGluIHRoaXMgY2FzZSwgdGhlIHNlY29uZCBNU0IpIG9uIHRoZSBs
YXN0IGJ5dGUgaXMgc2V0IHdlIG5lZWQgdG8gemVybyBleHRlbmQuCi0gICAgaWYgKGJ5dGUgJiAw
eDQwKQotICAgICAgICByZXN1bHQgfD0gLSgxIDw8IHNoaWZ0QW1vdW50KTsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi12b2lkIERlYnVnTGluZUludGVycHJldGVyOjpydW4oKQotewotICAgIHBh
cnNlUHJvbG9ndWUoKTsKLSAgICBpbnRlcnByZXRTdGF0ZW1lbnRQcm9ncmFtKCk7Ci0gICAgaWYg
KG1fbG9nUmVzdWx0cykKLSAgICAgICAgcHJpbnRMaW5lSW5mbygpOwotfQotCi12b2lkIERlYnVn
TGluZUludGVycHJldGVyOjpwYXJzZVByb2xvZ3VlKCkKLXsKLSAgICBjb25zdCBjaGFyKiBjdXJy
ZW50UHJvZ3JhbU9mZnNldCA9IG1fcHJvZ3JhbTsKLSAgICBtX3Byb2xvZ3VlLnRvdGFsTGVuZ3Ro
ID0gcmVhZDx1aW50MzJfdD4oY3VycmVudFByb2dyYW1PZmZzZXQpOwotICAgIGlmIChtX3Byb2xv
Z3VlLnRvdGFsTGVuZ3RoID09IDB4ZmZmZmZmZmYpIHsKLSAgICAgICAgLy8gVGhpcyBpcyA2NC1i
aXQgRFdBUkYgZm9ybWF0LgotICAgICAgICBtX3Byb2xvZ3VlLmZvcm1hdCA9IFNpeHR5Rm91ckJp
dDsKLSAgICAgICAgbV9wcm9sb2d1ZS50b3RhbExlbmd0aCA9IHJlYWQ8dWludDY0X3Q+KGN1cnJl
bnRQcm9ncmFtT2Zmc2V0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9wcm9sb2d1ZS5mb3JtYXQg
PSBUaGlydHlUd29CaXQ7Ci0gICAgbV9wcm9sb2d1ZS52ZXJzaW9uID0gcmVhZDx1aW50MTZfdD4o
Y3VycmVudFByb2dyYW1PZmZzZXQpOwotICAgIAotICAgIGlmIChtX3Byb2xvZ3VlLmZvcm1hdCA9
PSBUaGlydHlUd29CaXQpCi0gICAgICAgIG1fcHJvbG9ndWUucHJvbG9ndWVMZW5ndGggPSByZWFk
PHVpbnQzMl90PihjdXJyZW50UHJvZ3JhbU9mZnNldCk7Ci0gICAgZWxzZQotICAgICAgICBtX3By
b2xvZ3VlLnByb2xvZ3VlTGVuZ3RoID0gcmVhZDx1aW50NjRfdD4oY3VycmVudFByb2dyYW1PZmZz
ZXQpOwotICAgIGNvbnN0IGNoYXIqIGFmdGVyTGVuZ3RoT2Zmc2V0ID0gY3VycmVudFByb2dyYW1P
ZmZzZXQ7Ci0gICAgCi0gICAgbV9wcm9sb2d1ZS5taW5pbXVtSW5zdHJ1Y3Rpb25MZW5ndGggPSBy
ZWFkPHVpbnQ4X3Q+KGN1cnJlbnRQcm9ncmFtT2Zmc2V0KTsKLSAgICBtX3Byb2xvZ3VlLmRlZmF1
bHRJc1N0YXRlbWVudCA9IHJlYWQ8dWludDhfdD4oY3VycmVudFByb2dyYW1PZmZzZXQpOwotICAg
IG1fcHJvbG9ndWUubGluZUJhc2UgPSByZWFkPGludDhfdD4oY3VycmVudFByb2dyYW1PZmZzZXQp
OwotICAgIG1fcHJvbG9ndWUubGluZVJhbmdlID0gcmVhZDx1aW50OF90PihjdXJyZW50UHJvZ3Jh
bU9mZnNldCk7Ci0gICAgbV9wcm9sb2d1ZS5vcGNvZGVCYXNlID0gcmVhZDx1aW50OF90PihjdXJy
ZW50UHJvZ3JhbU9mZnNldCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG1fcHJvbG9n
dWUub3Bjb2RlQmFzZTsgKytpKQotICAgICAgICBtX3Byb2xvZ3VlLnN0YW5kYXJkT3Bjb2RlTGVu
Z3Rocy5hcHBlbmQocmVhZDx1aW50OF90PihjdXJyZW50UHJvZ3JhbU9mZnNldCkpOwotICAgIHBh
cnNlSW5jbHVkZURpcmVjdG9yaWVzKGN1cnJlbnRQcm9ncmFtT2Zmc2V0KTsKLSAgICBwYXJzZUZp
bGVFbnRyaWVzKGN1cnJlbnRQcm9ncmFtT2Zmc2V0KTsKLSAgICAKLSAgICBtX3Byb2dyYW0gPSBh
ZnRlckxlbmd0aE9mZnNldCArIG1fcHJvbG9ndWUucHJvbG9ndWVMZW5ndGg7Ci0KLSAgICBpZiAo
IW1fbG9nUmVzdWx0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGF0YUxvZygiXG5Qcm9sb2d1
ZTpcbiIpOwotICAgIGRhdGFMb2coInRvdGFsTGVuZ3RoID0gIiwgbV9wcm9sb2d1ZS50b3RhbExl
bmd0aCwgIlxuIik7Ci0gICAgZGF0YUxvZygidmVyc2lvbiA9ICIsIG1fcHJvbG9ndWUudmVyc2lv
biwgIlxuIik7Ci0gICAgZGF0YUxvZygicHJvbG9ndWVMZW5ndGggPSAiLCBtX3Byb2xvZ3VlLnBy
b2xvZ3VlTGVuZ3RoLCAiXG4iKTsKLSAgICBkYXRhTG9nKCJtaW5pbXVtSW5zdHJ1Y3Rpb25MZW5n
dGggPSAiLCBtX3Byb2xvZ3VlLm1pbmltdW1JbnN0cnVjdGlvbkxlbmd0aCwgIlxuIik7Ci0gICAg
ZGF0YUxvZygiZGVmYXVsdElzU3RhdGVtZW50ID0gIiwgbV9wcm9sb2d1ZS5kZWZhdWx0SXNTdGF0
ZW1lbnQsICJcbiIpOwotICAgIGRhdGFMb2coImxpbmVCYXNlID0gIiwgbV9wcm9sb2d1ZS5saW5l
QmFzZSwgIlxuIik7Ci0gICAgZGF0YUxvZygibGluZVJhbmdlID0gIiwgbV9wcm9sb2d1ZS5saW5l
UmFuZ2UsICJcbiIpOwotICAgIGRhdGFMb2coIm9wY29kZUJhc2UgPSAiLCBtX3Byb2xvZ3VlLm9w
Y29kZUJhc2UsICJcbiIpOwotICAgIAotICAgIGRhdGFMb2coIlxuU3RhbmRhcmQgT3Bjb2RlIExl
bmd0aHM6XG4iKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9wcm9sb2d1ZS5vcGNv
ZGVCYXNlOyArK2kpCi0gICAgICAgIGRhdGFMb2coInN0YW5kYXJkT3Bjb2RlTGVuZ3Roc1siLCBp
IC0gMSwgIl0gPSAiLCBtX3Byb2xvZ3VlLnN0YW5kYXJkT3Bjb2RlTGVuZ3Roc1tpIC0gMV0sICJc
biIpOwotICAgIAotICAgIGRhdGFMb2coIlxuSW5jbHVkZSBEaXJlY3RvcmllczpcbiIpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb2xvZ3VlLmluY2x1ZGVEaXJlY3Rvcmllcy5z
aXplKCk7ICsraSkKLSAgICAgICAgZGF0YUxvZygiaW5jbHVkZURpcmVjdG9yaWVzWyIsIGksICJd
ID0gIiwgbV9wcm9sb2d1ZS5pbmNsdWRlRGlyZWN0b3JpZXNbaV0sICJcbiIpOwotICAgIAotICAg
IGRhdGFMb2coIlxuRmlsZXM6XG4iKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9w
cm9sb2d1ZS5maWxlRW50cmllcy5zaXplKCk7ICsraSkgewotICAgICAgICBGaWxlRW50cnkmIGVu
dHJ5ID0gbV9wcm9sb2d1ZS5maWxlRW50cmllc1tpXTsKLSAgICAgICAgZGF0YUxvZygiZmlsZUVu
dHJpZXNbIiwgaSwgIl0gPSB7bmFtZTogXCIiLCBlbnRyeS5uYW1lLCAiXCIsIGRpcl9pbmRleDog
IiwgZW50cnkuZGlyZWN0b3J5SW5kZXgsICIsIGxhc3RfbW9kaWZpZWQ6ICIsIGVudHJ5Lmxhc3RN
b2RpZmllZCwgIiwgc2l6ZTogIiwgZW50cnkuc2l6ZSwgIn1cbiIpOwotICAgIH0KLX0KLQotdm9p
ZCBEZWJ1Z0xpbmVJbnRlcnByZXRlcjo6cGFyc2VJbmNsdWRlRGlyZWN0b3JpZXMoY29uc3QgY2hh
ciomIG9mZnNldCkKLXsKLSAgICBzaXplX3QgbGVuZ3RoID0gMDsKLSAgICB3aGlsZSAoKGxlbmd0
aCA9IHN0cmxlbihvZmZzZXQpKSkgewotICAgICAgICBtX3Byb2xvZ3VlLmluY2x1ZGVEaXJlY3Rv
cmllcy5hcHBlbmQob2Zmc2V0KTsKLSAgICAgICAgb2Zmc2V0ICs9IGxlbmd0aCArIDE7Ci0gICAg
fQotICAgIAotICAgIC8vIEV4dHJhIGluY3JlbWVudCB0byBnZXQgcGFzdCB0aGUgbGFzdCBudWxs
IGJ5dGUuCi0gICAgb2Zmc2V0ICs9IDE7Ci19Ci0KLXZvaWQgRGVidWdMaW5lSW50ZXJwcmV0ZXI6
OnBhcnNlRmlsZUVudHJpZXMoY29uc3QgY2hhciomIG9mZnNldCkKLXsKLSAgICB3aGlsZSAodHJ1
ZSkgewotICAgICAgICBEZWJ1Z0xpbmVJbnRlcnByZXRlcjo6RmlsZUVudHJ5IG5leHRFbnRyeTsK
LSAgICAgICAgaWYgKCFwYXJzZUZpbGVFbnRyeShvZmZzZXQsIG5leHRFbnRyeSkpCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgbV9wcm9sb2d1ZS5maWxlRW50cmllcy5hcHBlbmQobmV4dEVu
dHJ5KTsKLSAgICB9Ci19Ci0KLWJvb2wgRGVidWdMaW5lSW50ZXJwcmV0ZXI6OnBhcnNlRmlsZUVu
dHJ5KGNvbnN0IGNoYXIqJiBvZmZzZXQsIEZpbGVFbnRyeSYgZW50cnkpCi17Ci0gICAgc2l6ZV90
IGxlbmd0aCA9IHN0cmxlbihvZmZzZXQpOwotICAgIGlmICghbGVuZ3RoKSB7Ci0gICAgICAgIG9m
ZnNldCArPSAxOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGVudHJ5Lm5hbWUg
PSBvZmZzZXQ7Ci0gICAgb2Zmc2V0ICs9IGxlbmd0aCArIDE7Ci0gICAgZW50cnkuZGlyZWN0b3J5
SW5kZXggPSBwYXJzZVVMRUIxMjgob2Zmc2V0KTsKLSAgICBlbnRyeS5sYXN0TW9kaWZpZWQgPSBw
YXJzZVVMRUIxMjgob2Zmc2V0KTsKLSAgICBlbnRyeS5zaXplID0gcGFyc2VVTEVCMTI4KG9mZnNl
dCk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRGVidWdMaW5lSW50ZXJwcmV0
ZXI6OmludGVycHJldFN0YXRlbWVudFByb2dyYW0oKQotewotICAgIGNvbnN0IGNoYXIqIGN1cnJl
bnRQcm9ncmFtT2Zmc2V0ID0gbV9wcm9ncmFtOwotICAgIGJvb2wga2VlcEdvaW5nID0gdHJ1ZTsK
LSAgICBkbyB7Ci0gICAgICAgIGtlZXBHb2luZyA9IGludGVycHJldE9wY29kZShjdXJyZW50UHJv
Z3JhbU9mZnNldCk7Ci0gICAgfSB3aGlsZSAoa2VlcEdvaW5nKTsKLX0KLQotYm9vbCBEZWJ1Z0xp
bmVJbnRlcnByZXRlcjo6aW50ZXJwcmV0T3Bjb2RlKGNvbnN0IGNoYXIqJiBvZmZzZXQpCi17Ci0g
ICAgdWludDhfdCBuZXh0T3Bjb2RlID0gcmVhZDx1aW50OF90PihvZmZzZXQpOwotICAgIHN3aXRj
aCAobmV4dE9wY29kZSkgewotICAgIGNhc2UgRXh0ZW5kZWRPcGNvZGVzOiB7Ci0gICAgICAgIHVp
bnQzMl90IGxlbmd0aCA9IHBhcnNlVUxFQjEyOChvZmZzZXQpOwotICAgICAgICBpZiAoIWxlbmd0
aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdWludDhfdCBleHRlbmRlZE9w
Y29kZSA9IHJlYWQ8dWludDhfdD4ob2Zmc2V0KTsKLSAgICAgICAgc3dpdGNoIChleHRlbmRlZE9w
Y29kZSkgewotICAgICAgICBjYXNlIERXX0xORV9lbmRfc2VxdWVuY2U6IHsKLSAgICAgICAgICAg
IG1fY3VycmVudFN0YXRlLmVuZFNlcXVlbmNlID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fbGluZUlu
Zm9NYXRyaXguYXBwZW5kKG1fY3VycmVudFN0YXRlKTsKLSAgICAgICAgICAgIHJlc2V0SW50ZXJw
cmV0ZXJTdGF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBEV19MTkVfc2V0X2FkZHJlc3M6IHsKLSAgICAgICAgICAgIG1fY3VycmVudFN0YXRlLmFkZHJl
c3MgPSByZWFkPHNpemVfdD4ob2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgRFdfTE5FX2RlZmluZV9maWxlOiB7Ci0gICAgICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIlVuaW1wbGVtZW50ZWQgZXh0ZW5kZWQgb3Bjb2RlIERXX0xORV9kZWZpbmVfZmls
ZS5cbiIpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBleHRlbmRlZCBvcGNvZGUuXG4iKTsKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgLyogU3Rh
bmRhcmQgb3Bjb2RlcyAqLwotICAgIGNhc2UgRFdfTE5TX2NvcHk6IHsKLSAgICAgICAgbV9saW5l
SW5mb01hdHJpeC5hcHBlbmQobV9jdXJyZW50U3RhdGUpOwotICAgICAgICBtX2N1cnJlbnRTdGF0
ZS5pc0Jhc2ljQmxvY2sgPSBmYWxzZTsKLSAgICAgICAgbV9jdXJyZW50U3RhdGUucHJvbG9ndWVF
bmQgPSBmYWxzZTsKLSAgICAgICAgbV9jdXJyZW50U3RhdGUuZXBpbG9ndWVCZWdpbiA9IGZhbHNl
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBEV19MTlNfYWR2YW5jZV9wYzogewot
ICAgICAgICB1aW50MzJfdCBhZHZhbmNlID0gcGFyc2VVTEVCMTI4KG9mZnNldCk7Ci0gICAgICAg
IG1fY3VycmVudFN0YXRlLmFkZHJlc3MgKz0gYWR2YW5jZSAqIG1fcHJvbG9ndWUubWluaW11bUlu
c3RydWN0aW9uTGVuZ3RoOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBEV19MTlNf
YWR2YW5jZV9saW5lOiB7Ci0gICAgICAgIGludDMyX3QgYWR2YW5jZSA9IHBhcnNlU0xFQjEyOChv
ZmZzZXQpOwotICAgICAgICBtX2N1cnJlbnRTdGF0ZS5saW5lICs9IGFkdmFuY2U7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBjYXNlIERXX0xOU19zZXRfZmlsZTogewotICAgICAgICB1aW50
MzJfdCBmaWxlSW5kZXggPSBwYXJzZVVMRUIxMjgob2Zmc2V0KTsKLSAgICAgICAgbV9jdXJyZW50
U3RhdGUuZmlsZSA9IGZpbGVJbmRleDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
RFdfTE5TX3NldF9jb2x1bW46IHsKLSAgICAgICAgbV9jdXJyZW50U3RhdGUuY29sdW1uID0gcGFy
c2VVTEVCMTI4KG9mZnNldCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIERXX0xO
U19uZWdhdGVfc3RtdDogewotICAgICAgICBtX2N1cnJlbnRTdGF0ZS5pc1N0YXRlbWVudCA9ICFt
X2N1cnJlbnRTdGF0ZS5pc1N0YXRlbWVudDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNh
c2UgRFdfTE5TX3NldF9iYXNpY19ibG9jazogewotICAgICAgICBtX2N1cnJlbnRTdGF0ZS5pc0Jh
c2ljQmxvY2sgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBEV19MTlNf
Y29uc3RfYWRkX3BjOiB7Ci0gICAgICAgIHVpbnQ4X3QgYWRqdXN0ZWRPcGNvZGUgPSBuZXh0T3Bj
b2RlIC0gbV9wcm9sb2d1ZS5vcGNvZGVCYXNlOwotICAgICAgICB1aW50MzJfdCBhZGRyZXNzSW5j
cmVtZW50ID0gKGFkanVzdGVkT3Bjb2RlIC8gbV9wcm9sb2d1ZS5saW5lUmFuZ2UpICogbV9wcm9s
b2d1ZS5taW5pbXVtSW5zdHJ1Y3Rpb25MZW5ndGg7Ci0gICAgICAgIG1fY3VycmVudFN0YXRlLmFk
ZHJlc3MgKz0gYWRkcmVzc0luY3JlbWVudDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNh
c2UgRFdfTE5TX2ZpeGVkX2FkdmFuY2VfcGM6IHsKLSAgICAgICAgdWludDE2X3QgYWR2YW5jZSA9
IHJlYWQ8dWludDE2X3Q+KG9mZnNldCk7Ci0gICAgICAgIG1fY3VycmVudFN0YXRlLmFkZHJlc3Mg
Kz0gYWR2YW5jZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRFdfTE5TX3NldF9w
cm9sb2d1ZV9lbmQ6IHsKLSAgICAgICAgbV9jdXJyZW50U3RhdGUucHJvbG9ndWVFbmQgPSB0cnVl
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBEV19MTlNfc2V0X2VwaWxvZ3VlX2Jl
Z2luOiB7Ci0gICAgICAgIG1fY3VycmVudFN0YXRlLmVwaWxvZ3VlQmVnaW4gPSB0cnVlOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBEV19MTlNfc2V0X2lzYTogewotICAgICAgICBt
X2N1cnJlbnRTdGF0ZS5pc2EgPSBwYXJzZVVMRUIxMjgob2Zmc2V0KTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgICAgICAvKiBTcGVjaWFsIG9wY29kZXMgKi8KLSAgICBkZWZhdWx0OiB7Ci0g
ICAgICAgIHVpbnQ4X3QgYWRqdXN0ZWRPcGNvZGUgPSBuZXh0T3Bjb2RlIC0gbV9wcm9sb2d1ZS5v
cGNvZGVCYXNlOwotICAgICAgICB1aW50MzJfdCBhZGRyZXNzSW5jcmVtZW50ID0gKGFkanVzdGVk
T3Bjb2RlIC8gbV9wcm9sb2d1ZS5saW5lUmFuZ2UpICogbV9wcm9sb2d1ZS5taW5pbXVtSW5zdHJ1
Y3Rpb25MZW5ndGg7Ci0gICAgICAgIGludDMyX3QgbGluZUluY3JlbWVudCA9IG1fcHJvbG9ndWUu
bGluZUJhc2UgKyAoYWRqdXN0ZWRPcGNvZGUgJSBtX3Byb2xvZ3VlLmxpbmVSYW5nZSk7Ci0gICAg
ICAgIG1fY3VycmVudFN0YXRlLmFkZHJlc3MgKz0gYWRkcmVzc0luY3JlbWVudDsKLSAgICAgICAg
bV9jdXJyZW50U3RhdGUubGluZSArPSBsaW5lSW5jcmVtZW50OwotICAgICAgICBtX2xpbmVJbmZv
TWF0cml4LmFwcGVuZChtX2N1cnJlbnRTdGF0ZSk7Ci0gICAgICAgIG1fY3VycmVudFN0YXRlLmlz
QmFzaWNCbG9jayA9IGZhbHNlOwotICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm9sb2d1ZUVuZCA9
IGZhbHNlOwotICAgICAgICBtX2N1cnJlbnRTdGF0ZS5lcGlsb2d1ZUJlZ2luID0gZmFsc2U7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
RGVidWdMaW5lSW50ZXJwcmV0ZXI6OnByaW50TGluZUluZm8oKQotewotICAgIGRhdGFMb2coIlxu
TGluZSBJbmZvIE1hdHJpeDpcbiIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xp
bmVJbmZvTWF0cml4LnNpemUoKTsgKytpKQotICAgICAgICBwcmludExpbmVJbmZvKG1fbGluZUlu
Zm9NYXRyaXhbaV0pOwotICAgIGRhdGFMb2coIlxuIik7Ci19Ci0KLXZvaWQgRGVidWdMaW5lSW50
ZXJwcmV0ZXI6OnByaW50TGluZUluZm8oTGluZUluZm8mIGluZm8pCi17Ci0gICAgZGF0YUxvZ0Yo
ImFkZHJlc3M6ICVwIiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaW5mby5hZGRyZXNzKSk7Ci0g
ICAgZGF0YUxvZygiICBmaWxlOiAiLCBpbmZvLmZpbGUsICIgIGxpbmU6ICIsIGluZm8ubGluZSwg
IiAgY29sdW1uOiAiLCBpbmZvLmNvbHVtbiwgIiAgaXNhOiAiLCBpbmZvLmlzYSwgIiAgIik7Ci0g
ICAgZGF0YUxvZygiICBzdGF0ZW1lbnQ/OiAiLCBpbmZvLmlzU3RhdGVtZW50KTsKLSAgICBkYXRh
TG9nKCIgIGJhc2ljIGJsb2NrPzogIiwgaW5mby5pc0Jhc2ljQmxvY2spOwotICAgIGRhdGFMb2co
IiAgZW5kIHNlcXVlbmNlPzogIiwgaW5mby5lbmRTZXF1ZW5jZSk7Ci0gICAgZGF0YUxvZygiICBw
cm9sb2d1ZSBlbmQ/OiAiLCBpbmZvLnByb2xvZ3VlRW5kKTsKLSAgICBkYXRhTG9nKCIgIGVwaWxv
Z3VlIGJlZ2luPzogIiwgaW5mby5lcGlsb2d1ZUJlZ2luKTsKLSAgICBkYXRhTG9nKCJcbiIpOwot
fQotCi12b2lkIERlYnVnTGluZUludGVycHJldGVyOjpyZXNldEludGVycHJldGVyU3RhdGUoKQot
ewotICAgIG1fY3VycmVudFN0YXRlLmFkZHJlc3MgPSAwOwotICAgIG1fY3VycmVudFN0YXRlLmZp
bGUgPSAxOwotICAgIG1fY3VycmVudFN0YXRlLmxpbmUgPSAxOwotICAgIG1fY3VycmVudFN0YXRl
LmNvbHVtbiA9IDA7Ci0gICAgbV9jdXJyZW50U3RhdGUuaXNhID0gMDsKLSAgICBtX2N1cnJlbnRT
dGF0ZS5pc1N0YXRlbWVudCA9IGZhbHNlOwotICAgIG1fY3VycmVudFN0YXRlLmlzQmFzaWNCbG9j
ayA9IGZhbHNlOwotICAgIG1fY3VycmVudFN0YXRlLmVuZFNlcXVlbmNlID0gZmFsc2U7Ci0gICAg
bV9jdXJyZW50U3RhdGUucHJvbG9ndWVFbmQgPSBmYWxzZTsKLSAgICBtX2N1cnJlbnRTdGF0ZS5l
cGlsb2d1ZUJlZ2luID0gZmFsc2U7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKLQot
I2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTERXQVJGRGVidWdMaW5lSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmgJKHJldmlzaW9uIDE5NjY4NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEZUTERXQVJG
RGVidWdMaW5lSW5mb19oCi0jZGVmaW5lIEZUTERXQVJGRGVidWdMaW5lSW5mb19oCi0KLSNpZiBF
TkFCTEUoRlRMX0pJVCkKLQotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewotCi1j
bGFzcyBEZWJ1Z0xpbmVJbnRlcnByZXRlciB7Ci1wdWJsaWM6Ci0gICAgRGVidWdMaW5lSW50ZXJw
cmV0ZXIoY29uc3QgY2hhciogcHJvZ3JhbSk7Ci0KLSAgICB2b2lkIHJ1bigpOwotCi1wcml2YXRl
OgotICAgIHN0cnVjdCBGaWxlRW50cnkgewotICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAg
dWludDMyX3QgZGlyZWN0b3J5SW5kZXg7Ci0gICAgICAgIHVpbnQzMl90IGxhc3RNb2RpZmllZDsK
LSAgICAgICAgdWludDMyX3Qgc2l6ZTsKLSAgICB9OwotCi0gICAgdm9pZCByZXNldEludGVycHJl
dGVyU3RhdGUoKTsKLSAgICB2b2lkIGludGVycHJldFN0YXRlbWVudFByb2dyYW0oKTsKLSAgICBi
b29sIGludGVycHJldE9wY29kZShjb25zdCBjaGFyKiYpOwotICAgIHZvaWQgcGFyc2VQcm9sb2d1
ZSgpOwotICAgIHZvaWQgcGFyc2VJbmNsdWRlRGlyZWN0b3JpZXMoY29uc3QgY2hhciomKTsKLSAg
ICB2b2lkIHBhcnNlRmlsZUVudHJpZXMoY29uc3QgY2hhciomKTsKLSAgICBib29sIHBhcnNlRmls
ZUVudHJ5KGNvbnN0IGNoYXIqJiwgRGVidWdMaW5lSW50ZXJwcmV0ZXI6OkZpbGVFbnRyeSYpOwot
ICAgIHVpbnQzMl90IHBhcnNlVUxFQjEyOChjb25zdCBjaGFyKiYpOwotICAgIGludDMyX3QgcGFy
c2VTTEVCMTI4KGNvbnN0IGNoYXIqJik7Ci0KLSAgICBjb25zdCBjaGFyKiBtX3Byb2dyYW07Ci0g
ICAgYm9vbCBtX2xvZ1Jlc3VsdHM7Ci0KLSAgICBzdHJ1Y3QgTGluZUluZm8gewotICAgICAgICBz
aXplX3QgYWRkcmVzczsKLSAgICAgICAgdWludDMyX3QgZmlsZTsKLSAgICAgICAgdWludDMyX3Qg
bGluZTsKLSAgICAgICAgdWludDMyX3QgY29sdW1uOwotICAgICAgICB1aW50MzJfdCBpc2E7Ci0g
ICAgICAgIGJvb2wgaXNTdGF0ZW1lbnQ7Ci0gICAgICAgIGJvb2wgaXNCYXNpY0Jsb2NrOwotICAg
ICAgICBib29sIGVuZFNlcXVlbmNlOwotICAgICAgICBib29sIHByb2xvZ3VlRW5kOwotICAgICAg
ICBib29sIGVwaWxvZ3VlQmVnaW47Ci0gICAgfTsKLSAgICAKLSAgICB2b2lkIHByaW50TGluZUlu
Zm8oTGluZUluZm8mKTsKLSAgICB2b2lkIHByaW50TGluZUluZm8oKTsKLQotICAgIExpbmVJbmZv
IG1fY3VycmVudFN0YXRlOwotICAgIFZlY3RvcjxMaW5lSW5mbz4gbV9saW5lSW5mb01hdHJpeDsK
LQotICAgIGVudW0gRHdhcmZGb3JtYXQgewotICAgICAgICBTaXh0eUZvdXJCaXQsCi0gICAgICAg
IFRoaXJ0eVR3b0JpdAotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUHJvbG9ndWUgewotICAgICAgICBQ
cm9sb2d1ZSgpCi0gICAgICAgICAgICA6IHRvdGFsTGVuZ3RoKDApCi0gICAgICAgICAgICAsIGZv
cm1hdChUaGlydHlUd29CaXQpCi0gICAgICAgICAgICAsIHZlcnNpb24oMCkKLSAgICAgICAgICAg
ICwgcHJvbG9ndWVMZW5ndGgoMCkKLSAgICAgICAgICAgICwgbWluaW11bUluc3RydWN0aW9uTGVu
Z3RoKDApCi0gICAgICAgICAgICAsIGRlZmF1bHRJc1N0YXRlbWVudCgwKQotICAgICAgICAgICAg
LCBsaW5lQmFzZSgwKQotICAgICAgICAgICAgLCBsaW5lUmFuZ2UoMCkKLSAgICAgICAgICAgICwg
b3Bjb2RlQmFzZSgwKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB1aW50NjRfdCB0
b3RhbExlbmd0aDsKLSAgICAgICAgRHdhcmZGb3JtYXQgZm9ybWF0OwotICAgICAgICB1aW50MTZf
dCB2ZXJzaW9uOwotICAgICAgICB1aW50NjRfdCBwcm9sb2d1ZUxlbmd0aDsKLSAgICAgICAgdWlu
dDhfdCBtaW5pbXVtSW5zdHJ1Y3Rpb25MZW5ndGg7Ci0gICAgICAgIHVpbnQ4X3QgZGVmYXVsdElz
U3RhdGVtZW50OwotICAgICAgICBpbnQ4X3QgbGluZUJhc2U7Ci0gICAgICAgIHVpbnQ4X3QgbGlu
ZVJhbmdlOwotICAgICAgICB1aW50OF90IG9wY29kZUJhc2U7Ci0gICAgICAgIFZlY3Rvcjx1aW50
OF90PiBzdGFuZGFyZE9wY29kZUxlbmd0aHM7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IGluY2x1
ZGVEaXJlY3RvcmllczsKLSAgICAgICAgVmVjdG9yPEZpbGVFbnRyeT4gZmlsZUVudHJpZXM7Ci0g
ICAgfSBtX3Byb2xvZ3VlOwotCi0gICAgZW51bSBFeHRlbmRlZE9wY29kZSB7Ci0gICAgICAgIERX
X0xORV9lbmRfc2VxdWVuY2UgPSAweDEsCi0gICAgICAgIERXX0xORV9zZXRfYWRkcmVzcyAgPSAw
eDIsCi0gICAgICAgIERXX0xORV9kZWZpbmVfZmlsZSAgPSAweDMKLSAgICB9OwotCi0gICAgZW51
bSBTdGFuZGFyZE9wY29kZSB7Ci0gICAgICAgIEV4dGVuZGVkT3Bjb2RlcyAgICAgICAgICAgICA9
IDB4MCwKLSAgICAgICAgRFdfTE5TX2NvcHkgICAgICAgICAgICAgICAgID0gMHgxLAotICAgICAg
ICBEV19MTlNfYWR2YW5jZV9wYyAgICAgICAgICAgPSAweDIsCi0gICAgICAgIERXX0xOU19hZHZh
bmNlX2xpbmUgICAgICAgICA9IDB4MywKLSAgICAgICAgRFdfTE5TX3NldF9maWxlICAgICAgICAg
ICAgID0gMHg0LAotICAgICAgICBEV19MTlNfc2V0X2NvbHVtbiAgICAgICAgICAgPSAweDUsCi0g
ICAgICAgIERXX0xOU19uZWdhdGVfc3RtdCAgICAgICAgICA9IDB4NiwKLSAgICAgICAgRFdfTE5T
X3NldF9iYXNpY19ibG9jayAgICAgID0gMHg3LAotICAgICAgICBEV19MTlNfY29uc3RfYWRkX3Bj
ICAgICAgICAgPSAweDgsCi0gICAgICAgIERXX0xOU19maXhlZF9hZHZhbmNlX3BjICAgICA9IDB4
OSwKLSAgICAgICAgRFdfTE5TX3NldF9wcm9sb2d1ZV9lbmQgICAgID0gMHhhLAotICAgICAgICBE
V19MTlNfc2V0X2VwaWxvZ3VlX2JlZ2luICAgPSAweGIsCi0gICAgICAgIERXX0xOU19zZXRfaXNh
ICAgICAgICAgICAgICA9IDB4YwotICAgIH07Ci19OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6
RlRMCi0gICAgCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0KLSNlbmRpZiAvLyBGVExEV0FS
RkRlYnVnTGluZUluZm9faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExEV0FS
RlJlZ2lzdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TERXQVJGUmVnaXN0ZXIuY3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTERXQVJGUmVnaXN0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZUTERXQVJGUmVnaXN0ZXIuaCIKLQotI2lmIEVO
QUJMRShGVExfSklUKQotCi0jaW5jbHVkZSAiRlBSSW5mby5oIgotI2luY2x1ZGUgIkdQUkluZm8u
aCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewotCi1SZWcgRFdBUkZSZWdpc3Rl
cjo6cmVnKCkgY29uc3QKLXsKLSNpZiBDUFUoWDg2XzY0KQotICAgIGlmIChtX2R3YXJmUmVnTnVt
ID49IDAgJiYgbV9kd2FyZlJlZ051bSA8IDE2KSB7Ci0gICAgICAgIHN3aXRjaCAoZHdhcmZSZWdO
dW0oKSkgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICByZXR1cm4gWDg2UmVnaXN0ZXJz
OjplYXg7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHJldHVybiBYODZSZWdpc3RlcnM6
OmVkeDsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgcmV0dXJuIFg4NlJlZ2lzdGVyczo6
ZWN4OwotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICByZXR1cm4gWDg2UmVnaXN0ZXJzOjpl
Yng7Ci0gICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgIHJldHVybiBYODZSZWdpc3RlcnM6OmVz
aTsKLSAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgcmV0dXJuIFg4NlJlZ2lzdGVyczo6ZWRp
OwotICAgICAgICBjYXNlIDY6Ci0gICAgICAgICAgICByZXR1cm4gWDg2UmVnaXN0ZXJzOjplYnA7
Ci0gICAgICAgIGNhc2UgNzoKLSAgICAgICAgICAgIHJldHVybiBYODZSZWdpc3RlcnM6OmVzcDsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8vIFJlZ2lzdGVycyByOC4ucjE1IGFyZSBu
dW1iZXJlZCBzZW5zaWJseS4KLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHUFJSZWc+
KG1fZHdhcmZSZWdOdW0pOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChtX2R3YXJmUmVnTnVt
ID49IDE3ICYmIG1fZHdhcmZSZWdOdW0gPD0gMzIpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxGUFJSZWc+KG1fZHdhcmZSZWdOdW0gLSAxNyk7Ci0jZWxpZiBDUFUoQVJNNjQpCi0gICAgaWYg
KG1fZHdhcmZSZWdOdW0gPj0gMCAmJiBtX2R3YXJmUmVnTnVtIDw9IDMxKQotICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8R1BSUmVnPihtX2R3YXJmUmVnTnVtKTsKLSAgICBpZiAobV9kd2FyZlJl
Z051bSA+PSA2NCAmJiBtX2R3YXJmUmVnTnVtIDw9IDk1KQotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8RlBSUmVnPihtX2R3YXJmUmVnTnVtIC0gNjQpOwotI2VuZGlmCi0gICAgcmV0dXJuIFJl
ZygpOwotfQotCi12b2lkIERXQVJGUmVnaXN0ZXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKLXsKLSAgICBSZWcgcmVnID0gdGhpcy0+cmVnKCk7Ci0gICAgaWYgKCEhcmVnKQotICAgICAg
ICBvdXQucHJpbnQocmVnKTsKLSAgICBlbHNlCi0gICAgICAgIG91dC5wcmludCgiPHVua25vd246
IiwgbV9kd2FyZlJlZ051bSwgIj4iKTsKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAot
Ci0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRFdBUkZSZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRFdBUkZSZWdpc3Rlci5oCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTERXQVJGUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgRlRMRFdBUkZSZWdpc3Rlcl9oCi0jZGVmaW5lIEZUTERXQVJGUmVnaXN0ZXJf
aAotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0KLSNpbmNsdWRlICJSZWcuaCIKLSNpbmNsdWRlIDx3
dGYvUHJpbnRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewotCi1j
bGFzcyBEV0FSRlJlZ2lzdGVyIHsKLXB1YmxpYzoKLSAgICBEV0FSRlJlZ2lzdGVyKCkKLSAgICAg
ICAgOiBtX2R3YXJmUmVnTnVtKC0xKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQg
RFdBUkZSZWdpc3RlcihpbnQxNl90IGR3YXJmUmVnTnVtKQotICAgICAgICA6IG1fZHdhcmZSZWdO
dW0oZHdhcmZSZWdOdW0pCi0gICAgewotICAgIH0KLSAgICAKLSAgICBpbnQxNl90IGR3YXJmUmVn
TnVtKCkgY29uc3QgeyByZXR1cm4gbV9kd2FyZlJlZ051bTsgfQotICAgIAotICAgIFJlZyByZWco
KSBjb25zdDsgLy8gVGhpcyBtYXkgcmV0dXJuIFJlZygpIGlmIGl0IGNhbid0IHBhcnNlIHRoZSBE
d2FyZiByZWdpc3RlciBudW1iZXIuCi0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7Ci0gICAgCi1wcml2YXRlOgotICAgIGludDE2X3QgbV9kd2FyZlJlZ051bTsKLX07Ci0K
LX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKLQotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQot
Ci0jZW5kaWYgLy8gRlRMRFdBUkZSZWdpc3Rlcl9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRGF0YVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRGF0YVNlY3Rpb24uY3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTERhdGFTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGVExEYXRhU2VjdGlvbi5oIgot
Ci0jaWYgRU5BQkxFKEZUTF9KSVQpCi0KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2lu
Y2x1ZGUgPHd0Zi9EYXRhTG9nLmg+Ci0jaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLQotbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewotCi1EYXRhU2VjdGlvbjo6RGF0YVNlY3Rpb24o
c2l6ZV90IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCkKLSAgICA6IG1fc2l6ZShzaXplKQotewot
ICAgIFJFTEVBU0VfQVNTRVJUKFdURjo6Yml0Q291bnQoYWxpZ25tZW50KSA9PSAxKTsKLSAgICAK
LSAgICBjb25zdCB1bnNpZ25lZCBuYXRpdmVBbGlnbm1lbnQgPSA4OwotICAgIAotICAgIGFsaWdu
bWVudCA9IHN0ZDo6bWF4KG5hdGl2ZUFsaWdubWVudCwgYWxpZ25tZW50KTsKLSAgICAKLSAgICBz
aXplX3QgYWxsb2NhdGVkU2l6ZSA9IHNpemUgKyBhbGlnbm1lbnQgLSBuYXRpdmVBbGlnbm1lbnQ7
Ci0gICAgbV9hbGxvY2F0aW9uQmFzZSA9IGZhc3RNYWxsb2MoYWxsb2NhdGVkU2l6ZSk7Ci0gICAg
Ci0gICAgbV9iYXNlID0gYml0d2lzZV9jYXN0PHZvaWQqPigKLSAgICAgICAgKGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KG1fYWxsb2NhdGlvbkJhc2UpICsgYWxpZ25tZW50IC0gMSkgJiB+c3RhdGlj
X2Nhc3Q8dWludHB0cl90PihhbGlnbm1lbnQgLSAxKSk7Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NF
UlQoIShiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX2Jhc2UpICYgKGFsaWdubWVudCAtIDEpKSk7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9iYXNlKSArIHNp
emUgPD0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9hbGxvY2F0aW9uQmFzZSkgKyBhbGxvY2F0
ZWRTaXplKTsKLX0KLQotRGF0YVNlY3Rpb246On5EYXRhU2VjdGlvbigpCi17Ci0gICAgZmFzdEZy
ZWUobV9hbGxvY2F0aW9uQmFzZSk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKLQot
I2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTERhdGFTZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExEYXRhU2VjdGlvbi5oCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTERhdGFTZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZu
ZGVmIEZUTERhdGFTZWN0aW9uX2gKLSNkZWZpbmUgRlRMRGF0YVNlY3Rpb25faAotCi0jaWYgRU5B
QkxFKEZUTF9KSVQpCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJWTS5oIgot
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
RlRMIHsKLQotY2xhc3MgRGF0YVNlY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxEYXRhU2VjdGlv
bj4gewotcHVibGljOgotICAgIERhdGFTZWN0aW9uKHNpemVfdCwgdW5zaWduZWQgYWxpZ25tZW50
KTsKLSAgICB+RGF0YVNlY3Rpb24oKTsKLSAgICAKLSAgICB2b2lkKiBiYXNlKCkgeyByZXR1cm4g
bV9iYXNlOyB9Ci0gICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAg
ICAKLXByaXZhdGU6Ci0gICAgdm9pZCogbV9hbGxvY2F0aW9uQmFzZTsKLSAgICB2b2lkKiBtX2Jh
c2U7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
LQotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotCi0jZW5kaWYgLy8gRlRMRGF0YVNlY3Rpb25f
aAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvbkhhbmRsZXJN
YW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4
Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMTY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZUTEV4Y2VwdGlv
bkhhbmRsZXJNYW5hZ2VyLmgiCi0KLSNpZiBFTkFCTEUoRlRMX0pJVCkgJiYgIUZUTF9VU0VTX0Iz
Ci0KLSNpbmNsdWRlICJGVExTdGF0ZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7Ci0KLUV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjpFeGNlcHRpb25IYW5kbGVyTWFuYWdlcihT
dGF0ZSYgc3RhdGUpCi0gICAgOiBtX3N0YXRlKHN0YXRlKQotewotfQotCi12b2lkIEV4Y2VwdGlv
bkhhbmRsZXJNYW5hZ2VyOjphZGROZXdFeGl0KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgs
IHNpemVfdCBvc3JFeGl0SW5kZXgpCi17Ci0gICAgbV9tYXAuYWRkKHN0YWNrbWFwUmVjb3JkSW5k
ZXgsIG9zckV4aXRJbmRleCk7Ci0gICAgT1NSRXhpdCYgZXhpdCA9IG1fc3RhdGUuaml0Q29kZS0+
b3NyRXhpdFtvc3JFeGl0SW5kZXhdOwotICAgIFJFTEVBU0VfQVNTRVJUKGV4aXQud2lsbEFycml2
ZUF0RXhpdEZyb21JbmRpcmVjdEV4Y2VwdGlvbkNoZWNrKCkpOwotfQotCi12b2lkIEV4Y2VwdGlv
bkhhbmRsZXJNYW5hZ2VyOjphZGROZXdDYWxsT3BlcmF0aW9uRXhpdCh1aW50MzJfdCBzdGFja21h
cFJlY29yZEluZGV4LCBzaXplX3Qgb3NyRXhpdEluZGV4KQotewotICAgIG1fY2FsbE9wZXJhdGlv
bk1hcC5hZGQoc3RhY2ttYXBSZWNvcmRJbmRleCwgb3NyRXhpdEluZGV4KTsKLSAgICBPU1JFeGl0
JiBleGl0ID0gbV9zdGF0ZS5qaXRDb2RlLT5vc3JFeGl0W29zckV4aXRJbmRleF07Ci0gICAgUkVM
RUFTRV9BU1NFUlQoZXhpdC53aWxsQXJyaXZlQXRFeGl0RnJvbUluZGlyZWN0RXhjZXB0aW9uQ2hl
Y2soKSk7Ci19Ci0KLUNvZGVMb2NhdGlvbkxhYmVsIEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjpj
YWxsT3BlcmF0aW9uRXhjZXB0aW9uVGFyZ2V0KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgp
Ci17Ci0jaWYgRlRMX1VTRVNfQjMKLSAgICBVTlVTRURfUEFSQU0oc3RhY2ttYXBSZWNvcmRJbmRl
eCk7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gQ29kZUxv
Y2F0aW9uTGFiZWwoKTsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAgYXV0byBmaW5kUmVzdWx0
ID0gbV9jYWxsT3BlcmF0aW9uTWFwLmZpbmQoc3RhY2ttYXBSZWNvcmRJbmRleCk7Ci0gICAgaWYg
KGZpbmRSZXN1bHQgPT0gbV9jYWxsT3BlcmF0aW9uTWFwLmVuZCgpKQotICAgICAgICByZXR1cm4g
Q29kZUxvY2F0aW9uTGFiZWwoKTsKLQotICAgIHNpemVfdCBvc3JFeGl0SW5kZXggPSBmaW5kUmVz
dWx0LT52YWx1ZTsKLSAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlLmppdENvZGUtPm9zckV4aXRb
b3NyRXhpdEluZGV4XS53aWxsQXJyaXZlQXRPU1JFeGl0RnJvbUNhbGxPcGVyYXRpb24oKSk7Ci0g
ICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fc3RhdGUuZmluYWxpemVyLT5vc3JF
eGl0W29zckV4aXRJbmRleF07Ci0gICAgUkVMRUFTRV9BU1NFUlQoaW5mby5tX3RodW5rTGFiZWwu
aXNTZXQoKSk7Ci0gICAgcmV0dXJuIG1fc3RhdGUuZmluYWxpemVyLT5leGl0VGh1bmtzTGlua0J1
ZmZlci0+bG9jYXRpb25PZihpbmZvLm1fdGh1bmtMYWJlbCk7Ci0jZW5kaWYgLy8gRlRMX1VTRVNf
QjMKLX0KLQotQ29kZUxvY2F0aW9uTGFiZWwgRXhjZXB0aW9uSGFuZGxlck1hbmFnZXI6OmxhenlT
bG93UGF0aEV4Y2VwdGlvblRhcmdldCh1aW50MzJfdCBzdGFja21hcFJlY29yZEluZGV4KQotewot
I2lmIEZUTF9VU0VTX0IzCi0gICAgVU5VU0VEX1BBUkFNKHN0YWNrbWFwUmVjb3JkSW5kZXgpOwot
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIENvZGVMb2NhdGlv
bkxhYmVsKCk7Ci0jZWxzZSAvLyBGVExfVVNFU19CMwotICAgIGF1dG8gZmluZFJlc3VsdCA9IG1f
bWFwLmZpbmQoc3RhY2ttYXBSZWNvcmRJbmRleCk7Ci0gICAgaWYgKGZpbmRSZXN1bHQgPT0gbV9t
YXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbCgpOwotCi0gICAgc2l6
ZV90IG9zckV4aXRJbmRleCA9IGZpbmRSZXN1bHQtPnZhbHVlOwotICAgIFJFTEVBU0VfQVNTRVJU
KG1fc3RhdGUuaml0Q29kZS0+b3NyRXhpdFtvc3JFeGl0SW5kZXhdLm1fZXhjZXB0aW9uVHlwZSA9
PSBFeGNlcHRpb25UeXBlOjpMYXp5U2xvd1BhdGgpOwotICAgIE9TUkV4aXRDb21waWxhdGlvbklu
Zm8mIGluZm8gPSBtX3N0YXRlLmZpbmFsaXplci0+b3NyRXhpdFtvc3JFeGl0SW5kZXhdOwotICAg
IFJFTEVBU0VfQVNTRVJUKGluZm8ubV90aHVua0xhYmVsLmlzU2V0KCkpOwotICAgIHJldHVybiBt
X3N0YXRlLmZpbmFsaXplci0+ZXhpdFRodW5rc0xpbmtCdWZmZXItPmxvY2F0aW9uT2YoaW5mby5t
X3RodW5rTGFiZWwpOwotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCi19Ci0KLU9TUkV4aXQqIEV4Y2Vw
dGlvbkhhbmRsZXJNYW5hZ2VyOjpjYWxsT3BlcmF0aW9uT1NSRXhpdCh1aW50MzJfdCBzdGFja21h
cFJlY29yZEluZGV4KQotewotICAgIGF1dG8gZmluZFJlc3VsdCA9IG1fY2FsbE9wZXJhdGlvbk1h
cC5maW5kKHN0YWNrbWFwUmVjb3JkSW5kZXgpOwotICAgIGlmIChmaW5kUmVzdWx0ID09IG1fY2Fs
bE9wZXJhdGlvbk1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgc2l6ZV90
IG9zckV4aXRJbmRleCA9IGZpbmRSZXN1bHQtPnZhbHVlOwotICAgIE9TUkV4aXQqIGV4aXQgPSAm
bV9zdGF0ZS5qaXRDb2RlLT5vc3JFeGl0W29zckV4aXRJbmRleF07Ci0gICAgLy8gV2UgbWF5IGhh
dmUgbW9yZSB0aGFuIG9uZSBleGl0IGZvciB0aGUgc2FtZSBzdGFja21hcCByZWNvcmQgaW5kZXgg
KGkuZSwgZm9yIEdldEJ5SWRzIGFuZCBQdXRCeUlkcykuCi0gICAgLy8gVGhlcmVmb3JlIHdlIG5l
ZWQgdG8gbWFrZSBzdXJlIHRoaXMgZXhpdCByZWFsbHkgaXMgYSBjYWxsT3BlcmF0aW9uIE9TUiBl
eGl0LgotICAgIFJFTEVBU0VfQVNTRVJUKGV4aXQtPndpbGxBcnJpdmVBdE9TUkV4aXRGcm9tQ2Fs
bE9wZXJhdGlvbigpKTsKLSAgICByZXR1cm4gZXhpdDsgCi19Ci0KLU9TUkV4aXQqIEV4Y2VwdGlv
bkhhbmRsZXJNYW5hZ2VyOjpnZXRDYWxsT1NSRXhpdENvbW1vbih1aW50MzJfdCBzdGFja21hcFJl
Y29yZEluZGV4KQotewotICAgIGF1dG8gZmluZFJlc3VsdCA9IG1fbWFwLmZpbmQoc3RhY2ttYXBS
ZWNvcmRJbmRleCk7Ci0gICAgaWYgKGZpbmRSZXN1bHQgPT0gbV9tYXAuZW5kKCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIHNpemVfdCBvc3JFeGl0SW5kZXggPSBmaW5kUmVzdWx0LT52
YWx1ZTsKLSAgICBPU1JFeGl0KiBleGl0ID0gJm1fc3RhdGUuaml0Q29kZS0+b3NyRXhpdFtvc3JF
eGl0SW5kZXhdOwotICAgIFJFTEVBU0VfQVNTRVJUKGV4aXQtPm1fZXhjZXB0aW9uVHlwZSA9PSBF
eGNlcHRpb25UeXBlOjpKU0NhbGwpOwotICAgIHJldHVybiBleGl0OyAKLX0KLQotT1NSRXhpdCog
RXhjZXB0aW9uSGFuZGxlck1hbmFnZXI6OmdldENhbGxPU1JFeGl0KHVpbnQzMl90IHN0YWNrbWFw
UmVjb3JkSW5kZXgsIGNvbnN0IEpTQ2FsbCYpCi17Ci0gICAgcmV0dXJuIGdldENhbGxPU1JFeGl0
Q29tbW9uKHN0YWNrbWFwUmVjb3JkSW5kZXgpOwotfQotCi1PU1JFeGl0KiBFeGNlcHRpb25IYW5k
bGVyTWFuYWdlcjo6Z2V0Q2FsbE9TUkV4aXQodWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleCwg
Y29uc3QgSlNDYWxsVmFyYXJncyYpCi17Ci0gICAgcmV0dXJuIGdldENhbGxPU1JFeGl0Q29tbW9u
KHN0YWNrbWFwUmVjb3JkSW5kZXgpOwotfQotCi1PU1JFeGl0KiBFeGNlcHRpb25IYW5kbGVyTWFu
YWdlcjo6Z2V0Q2FsbE9TUkV4aXQodWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleCwgY29uc3Qg
SlNUYWlsQ2FsbCYgY2FsbCkKLXsKLSAgICBVTlVTRURfUEFSQU0oc3RhY2ttYXBSZWNvcmRJbmRl
eCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGwpOwotICAgIC8vIEEgY2FsbCBjYW4ndCBiZSBpbiB0
YWlsIHBvc2l0aW9uIGluc2lkZSBhIHRyeSBibG9jay4KLSAgICBBU1NFUlQobV9tYXAuZmluZChz
dGFja21hcFJlY29yZEluZGV4KSA9PSBtX21hcC5lbmQoKSk7Ci0gICAgcmV0dXJuIG51bGxwdHI7
Ci19Ci0KLUNhbGxTaXRlSW5kZXggRXhjZXB0aW9uSGFuZGxlck1hbmFnZXI6OnByb2N1cmVDYWxs
U2l0ZUluZGV4KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgsIENvZGVPcmlnaW4gb3JpZ2lu
KQotewotICAgIGF1dG8gZmluZFJlc3VsdCA9IG1fbWFwLmZpbmQoc3RhY2ttYXBSZWNvcmRJbmRl
eCk7Ci0gICAgaWYgKGZpbmRSZXN1bHQgPT0gbV9tYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBt
X3N0YXRlLmppdENvZGUtPmNvbW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KG9yaWdpbik7Ci0g
ICAgc2l6ZV90IG9zckV4aXRJbmRleCA9IGZpbmRSZXN1bHQtPnZhbHVlOwotICAgIE9TUkV4aXQm
IGV4aXQgPSBtX3N0YXRlLmppdENvZGUtPm9zckV4aXRbb3NyRXhpdEluZGV4XTsKLSAgICBSRUxF
QVNFX0FTU0VSVChleGl0Lm1fZXhjZXB0aW9uSGFuZGxlckNhbGxTaXRlSW5kZXgpOwotICAgIHJl
dHVybiBleGl0Lm1fZXhjZXB0aW9uSGFuZGxlckNhbGxTaXRlSW5kZXg7Ci19Ci0KLUNhbGxTaXRl
SW5kZXggRXhjZXB0aW9uSGFuZGxlck1hbmFnZXI6OnByb2N1cmVDYWxsU2l0ZUluZGV4KHVpbnQz
Ml90IHN0YWNrbWFwUmVjb3JkSW5kZXgsIGNvbnN0IEpTQ2FsbCYgY2FsbCkKLXsKLSAgICByZXR1
cm4gcHJvY3VyZUNhbGxTaXRlSW5kZXgoc3RhY2ttYXBSZWNvcmRJbmRleCwgY2FsbC5jYWxsU2l0
ZURlc2NyaXB0aW9uT3JpZ2luKCkpOwotfQotCi1DYWxsU2l0ZUluZGV4IEV4Y2VwdGlvbkhhbmRs
ZXJNYW5hZ2VyOjpwcm9jdXJlQ2FsbFNpdGVJbmRleCh1aW50MzJfdCBzdGFja21hcFJlY29yZElu
ZGV4LCBjb25zdCBKU0NhbGxWYXJhcmdzJiBjYWxsKQotewotICAgIHJldHVybiBwcm9jdXJlQ2Fs
bFNpdGVJbmRleChzdGFja21hcFJlY29yZEluZGV4LCBjYWxsLmNhbGxTaXRlRGVzY3JpcHRpb25P
cmlnaW4oKSk7Ci19Ci0KLUNhbGxTaXRlSW5kZXggRXhjZXB0aW9uSGFuZGxlck1hbmFnZXI6OnBy
b2N1cmVDYWxsU2l0ZUluZGV4KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgsIGNvbnN0IEpT
VGFpbENhbGwmIGNhbGwpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHN0YWNrbWFwUmVjb3JkSW5kZXgp
OwotICAgIFVOVVNFRF9QQVJBTShjYWxsKTsKLSAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGdlbmVy
YXRlIGEgY2FsbCBzaXRlIGluZGV4IGZvciB0YWlsIGNhbGxzCi0gICAgLy8gYmVjYXVzZSB0aGV5
IGRvbid0IHN0b3JlIGEgQ2FsbFNpdGVJbmRleCBvbiB0aGUgY2FsbCBmcmFtZS4KLSAgICByZXR1
cm4gQ2FsbFNpdGVJbmRleCgpOwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCi0KLSNl
bmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkgJiYgIUZUTF9VU0VTX0IzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlci5o
CShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2Vw
dGlvbkhhbmRsZXJNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOTAgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEZUTEV4
Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyX2gKLSNkZWZpbmUgRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFn
ZXJfaAotCi0jaW5jbHVkZSAiREZHQ29tbW9uLmgiCi0KLSNpZiBFTkFCTEUoRlRMX0pJVCkgJiYg
IUZUTF9VU0VTX0IzCi0KLSNpbmNsdWRlICJDYWxsRnJhbWUuaCIKLSNpbmNsdWRlICJGVExKU0Nh
bGwuaCIKLSNpbmNsdWRlICJGVExKU0NhbGxWYXJhcmdzLmgiCi0jaW5jbHVkZSAiRlRMSlNUYWls
Q2FsbC5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLS8vIFRoaXMgY2xh
c3MgaXMgaW50ZW50ZWQgdG8gYmUgdXNlZCBkdXJpbmcgRlRMQ29tcGlsZSB0byBtYW5hZ2Ugc29t
ZSBjb21tb24gdGFza3MKLS8vIG5lZWRlZCB0byBxdWVyeSB0aGUgY29ycmVzcG9uZGVuY2UgYmV0
d2VlbiBzdGFja21hcCByZWNvcmRzIGFuZCBPU1IgZXhpdHMgdGhhdCBhcmUKLS8vIGV4Y2VwdGlv
biBoYW5kbGVycy4gVGhlIG9ubHkga2luZCBvZiBPU1IgZXhpdHMgd2Uga2VlcCBhcmUgdGhvc2Ug
T1NSIGV4aXRzIHRoYXQKLS8vIGNvcnJlc3BvbmQgdG8gZXhjZXB0aW9ucyBmcm9tIHBhdGNocG9p
bnRzLiBUaGF0IG1lYW5zIGV4aXRzIGZyb20gbGF6eSBzbG93IHBhdGhzLAotLy8gSlMgY2FsbHMs
IEdldC9QdXQgQnlJZCwgZXRjLiBOb3RlOiB0aGlzIG1lYW5zIHdlIGRvbid0IGtlZXAgdHJhY2sg
b2YgZXhjZXB0aW9uIGNoZWNrcwotLy8gYWZ0ZXIgQyBjYWxscyBiZWNhdXNlIHRob3NlIGFyZSBt
b2RlbGVkIGV4cGxpY3RseSBpbiBMTFZNIElSIGFzIGEgYnJhbmNoIHRvIGEgc3RhY2ttYXAKLS8v
IGludHJpbnNpYy4gVGhlc2UgcGF0Y2hwb2ludCBPU1IgZXhpdHMgdGhhdCB0aGlzIGNsYXNzIGtl
ZXBzIHRyYWNrIG9mIGFyZSBub3QgYnJhbmNoZWQgdG8KLS8vIGRpcmVjdGx5IHdpdGhpbiBMTFZN
IElSLiAgV2UganVtcCB0byB0aGVzZSBPU1IgZXhpdHMgZnJvbSBnZW5lcmF0ZWQgcGF0Y2hwb2lu
dCBjb2RlLAotLy8gZnJvbSBnZW5lcmljVW53aW5kKCksIG9yIGZyb20gRlRMOjpjYWxsT3BlcmF0
aW9uKCkuCi0gICAgCi1jbGFzcyBTdGF0ZTsKLQotY2xhc3MgRXhjZXB0aW9uSGFuZGxlck1hbmFn
ZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyKTsK
LQotcHVibGljOgotICAgIEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyKFN0YXRlJiBzdGF0ZSk7Ci0K
LSAgICB2b2lkIGFkZE5ld0V4aXQodWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleCwgc2l6ZV90
IG9zckV4aXRJbmRleCk7Ci0gICAgdm9pZCBhZGROZXdDYWxsT3BlcmF0aW9uRXhpdCh1aW50MzJf
dCBzdGFja21hcFJlY29yZEluZGV4LCBzaXplX3Qgb3NyRXhpdEluZGV4KTsKLQotICAgIC8vIFRo
ZXNlIGZ1bmN0aW9ucyBvbmx5IG1ha2Ugc2Vuc2UgdG8gYmUgY2FsbGVkIGFmdGVyIHdlJ3ZlIGdl
bmVyYXRlZCB0aGUgT1NSCi0gICAgLy8gZXhpdCB0aHVua3MgYW5kIGFsbG9jYXRlZCB0aGUgT1NS
IGV4aXQgdGh1bmtzJyBsaW5rIGJ1ZmZlci4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBjYWxsT3Bl
cmF0aW9uRXhjZXB0aW9uVGFyZ2V0KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgpOwotICAg
IENvZGVMb2NhdGlvbkxhYmVsIGxhenlTbG93UGF0aEV4Y2VwdGlvblRhcmdldCh1aW50MzJfdCBz
dGFja21hcFJlY29yZEluZGV4KTsKLQotICAgIE9TUkV4aXQqIGNhbGxPcGVyYXRpb25PU1JFeGl0
KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgpOwotICAgIE9TUkV4aXQqIGdldENhbGxPU1JF
eGl0KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgsIGNvbnN0IEpTQ2FsbCYpOwotICAgIE9T
UkV4aXQqIGdldENhbGxPU1JFeGl0KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgsIGNvbnN0
IEpTVGFpbENhbGwmKTsKLSAgICBPU1JFeGl0KiBnZXRDYWxsT1NSRXhpdCh1aW50MzJfdCBzdGFj
a21hcFJlY29yZEluZGV4LCBjb25zdCBKU0NhbGxWYXJhcmdzJik7Ci0KLSAgICBDYWxsU2l0ZUlu
ZGV4IHByb2N1cmVDYWxsU2l0ZUluZGV4KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgsIENv
ZGVPcmlnaW4pOwotICAgIENhbGxTaXRlSW5kZXggcHJvY3VyZUNhbGxTaXRlSW5kZXgodWludDMy
X3Qgc3RhY2ttYXBSZWNvcmRJbmRleCwgY29uc3QgSlNDYWxsJik7Ci0gICAgQ2FsbFNpdGVJbmRl
eCBwcm9jdXJlQ2FsbFNpdGVJbmRleCh1aW50MzJfdCBzdGFja21hcFJlY29yZEluZGV4LCBjb25z
dCBKU1RhaWxDYWxsJik7Ci0gICAgQ2FsbFNpdGVJbmRleCBwcm9jdXJlQ2FsbFNpdGVJbmRleCh1
aW50MzJfdCBzdGFja21hcFJlY29yZEluZGV4LCBjb25zdCBKU0NhbGxWYXJhcmdzJik7Ci0gICAg
T1NSRXhpdCoganNDYWxsT1NSRXhpdCh1aW50MzJfdCBzdGFja21hcFJlY29yZEluZGV4KTsKLQot
cHJpdmF0ZToKLSAgICBPU1JFeGl0KiBnZXRDYWxsT1NSRXhpdENvbW1vbih1aW50MzJfdCBzdGFj
a21hcFJlY29yZEluZGV4KTsKLQotICAgIFN0YXRlJiBtX3N0YXRlOwotICAgIHR5cGVkZWYgSGFz
aE1hcDx1aW50MzJfdCwgc2l6ZV90LCBXVEY6OkludEhhc2g8dWludDMyX3Q+LCBXVEY6OlVuc2ln
bmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gUmVjb3JkSW5kZXhUb09TUkV4aXRJ
bmRleE1hcDsKLSAgICBSZWNvcmRJbmRleFRvT1NSRXhpdEluZGV4TWFwIG1fbWFwOwotICAgIFJl
Y29yZEluZGV4VG9PU1JFeGl0SW5kZXhNYXAgbV9jYWxsT3BlcmF0aW9uTWFwOwotfTsKLQotfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYmICFG
VExfVVNFU19CMwotCi0jZW5kaWYgLy8gRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXJfaApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25UYXJnZXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmNw
cAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNl
cHRpb25UYXJnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRlRMRXhjZXB0aW9uVGFyZ2V0LmgiCiAKLSNpZiBFTkFC
TEUoRlRMX0pJVCkgJiYgRlRMX1VTRVNfQjMKKyNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1
ZGUgIkZUTFN0YXRlLmgiCiAKQEAgLTcyLDUgKzcyLDUgQEAgRXhjZXB0aW9uVGFyZ2V0OjpFeGNl
cHRpb25UYXJnZXQoCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAotI2VuZGlmIC8vIEVO
QUJMRShGVExfSklUKSAmJiBGVExfVVNFU19CMworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uVGFyZ2V0
LmgJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhj
ZXB0aW9uVGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1
ZGUgIkRGR0NvbW1vbi5oIgogCi0jaWYgRU5BQkxFKEZUTF9KSVQpICYmIEZUTF9VU0VTX0IzCisj
aWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRl
ICJGVExPU1JFeGl0SGFuZGxlLmgiCkBAIC02Miw3ICs2Miw3IEBAIHByaXZhdGU6CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpGVEwKIAotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKSAmJiBGVExf
VVNFU19CMworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogCiAjZW5kaWYgLy8gRlRMRXhjZXB0
aW9uVGFyZ2V0X2gKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1
bmtHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZUTEV4aXRUaHVua0dlbmVy
YXRvci5oIgotCi0jaWYgRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwotCi0jaW5jbHVk
ZSAiRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIgotI2luY2x1ZGUgIkZUTFN0YXRlLmgiCi0K
LW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzo6
REZHOwotCi1FeGl0VGh1bmtHZW5lcmF0b3I6OkV4aXRUaHVua0dlbmVyYXRvcihTdGF0ZSYgc3Rh
dGUpCi0gICAgOiBDQ2FsbEhlbHBlcnMoJnN0YXRlLmdyYXBoLm1fdm0sIHN0YXRlLmdyYXBoLm1f
Y29kZUJsb2NrKQotICAgICwgbV9zdGF0ZShzdGF0ZSkKLSAgICAsIG1fZGlkVGhpbmdzKGZhbHNl
KQotewotfQotCi1FeGl0VGh1bmtHZW5lcmF0b3I6On5FeGl0VGh1bmtHZW5lcmF0b3IoKQotewot
fQotCi12b2lkIEV4aXRUaHVua0dlbmVyYXRvcjo6ZW1pdFRodW5rKHVuc2lnbmVkIGluZGV4KQot
ewotICAgIE9TUkV4aXQmIGV4aXQgPSBtX3N0YXRlLmppdENvZGUtPm9zckV4aXRbaW5kZXhdOwot
ICAgIEFTU0VSVF9VTlVTRUQoZXhpdCwgIShleGl0LmlzR2VuZXJpY1Vud2luZEhhbmRsZXIoKSAm
JiBleGl0LndpbGxBcnJpdmVBdE9TUkV4aXRGcm9tQ2FsbE9wZXJhdGlvbigpKSk7Ci0gICAgCi0g
ICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fc3RhdGUuZmluYWxpemVyLT5vc3JF
eGl0W2luZGV4XTsKLSAgICBpbmZvLm1fdGh1bmtMYWJlbCA9IGxhYmVsKCk7Ci0KLSAgICBwdXNo
VG9TYXZlSW1tZWRpYXRlV2l0aG91dFRvdWNoaW5nUmVnaXN0ZXJzKFRydXN0ZWRJbW0zMihpbmRl
eCkpOwotICAgIGluZm8ubV90aHVua0p1bXAgPSBwYXRjaGFibGVKdW1wKCk7Ci0gICAgCi0gICAg
bV9kaWRUaGluZ3MgPSB0cnVlOwotfQotCi12b2lkIEV4aXRUaHVua0dlbmVyYXRvcjo6ZW1pdFRo
dW5rcygpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RhdGUuZmluYWxpemVy
LT5vc3JFeGl0LnNpemUoKTsgKytpKQotICAgICAgICBlbWl0VGh1bmsoaSk7Ci19Ci0KLX0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpGVEwKLQotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKSAmJiAhRlRM
X1VTRVNfQjMKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtH
ZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4
aXRUaHVua0dlbmVyYXRvci5oCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYw
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2lmbmRlZiBGVExFeGl0VGh1bmtHZW5lcmF0b3JfaAotI2RlZmluZSBGVExFeGl0VGh1bmtHZW5l
cmF0b3JfaAotCi0jaW5jbHVkZSAiREZHQ29tbW9uLmgiCi0KLSNpZiBFTkFCTEUoRlRMX0pJVCkg
JiYgIUZUTF9VU0VTX0IzCi0KLSNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLQotbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgewotCi1jbGFzcyBTdGF0ZTsKLXN0cnVjdCBPU1JFeGl0Q29t
cGlsYXRpb25JbmZvOwotCi1jbGFzcyBFeGl0VGh1bmtHZW5lcmF0b3IgOiBwdWJsaWMgQ0NhbGxI
ZWxwZXJzIHsKLXB1YmxpYzoKLSAgICBFeGl0VGh1bmtHZW5lcmF0b3IoU3RhdGUmIHN0YXRlKTsK
LSAgICB+RXhpdFRodW5rR2VuZXJhdG9yKCk7Ci0gICAgCi0gICAgdm9pZCBlbWl0VGh1bmsodW5z
aWduZWQgaW5kZXgpOwotICAgIHZvaWQgZW1pdFRodW5rcygpOwotICAgIAotICAgIGJvb2wgZGlk
VGhpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9kaWRUaGluZ3M7IH0KLQotcHJpdmF0ZToKLSAgICBT
dGF0ZSYgbV9zdGF0ZTsKLSAgICBib29sIG1fZGlkVGhpbmdzOwotfTsKLQotfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19C
MwotCi0jZW5kaWYgLy8gRlRMRXhpdFRodW5rR2VuZXJhdG9yX2gKLQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExGYWlsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEZhaWwuY3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEZhaWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2
IEBACiAKICNpbmNsdWRlICJERkdGYWlsZWRGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJGVExKSVRD
b2RlLmgiCi0jaW5jbHVkZSAiTExWTUFQSS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7CiAKQEAgLTM5LDExICszOCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBERkc7CiB2b2lkIGZh
aWwoU3RhdGUmIHN0YXRlKQogewogICAgIHN0YXRlLmdyYXBoLm1fcGxhbi5maW5hbGl6ZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPEZhaWxlZEZpbmFsaXplcj4oc3RhdGUuZ3JhcGgubV9wbGFuKTsKLSAg
ICAKLSNpZiAhRlRMX1VTRVNfQjMKLSAgICBpZiAoc3RhdGUubW9kdWxlKQotICAgICAgICBsbHZt
LT5EaXNwb3NlTW9kdWxlKHN0YXRlLm1vZHVsZSk7Ci0jZW5kaWYKIH0KIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVD
YWNoZURlc2NyaXB0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDM1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3JfaAotI2Rl
ZmluZSBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3JfaAotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0K
LSNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCi0jaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgot
I2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJGVExJbmxpbmVDYWNoZVNpemUu
aCIKLSNpbmNsdWRlICJGVExMYXp5U2xvd1BhdGguaCIKLSNpbmNsdWRlICJKSVRJbmxpbmVDYWNo
ZUdlbmVyYXRvci5oIgotI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCi0jaW5jbHVkZSAiU25p
cHBldE9wZXJhbmQuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9VbmlxdWVkU3RyaW5nSW1wbC5oPgot
Ci1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLWNsYXNzIExvY2F0aW9uOwotCi1j
bGFzcyBJbmxpbmVDYWNoZURlc2NyaXB0b3IgewotcHVibGljOgotICAgIElubGluZUNhY2hlRGVz
Y3JpcHRvcigpIAotICAgIHsgfQotICAgIAotICAgIElubGluZUNhY2hlRGVzY3JpcHRvcih1bnNp
Z25lZCBzdGFja21hcElELCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQpCi0gICAgICAgIDogbV9zdGFja21hcElEKHN0YWNrbWFwSUQpCi0gICAgICAgICwgbV9j
b2RlT3JpZ2luKGNvZGVPcmlnaW4pCi0gICAgICAgICwgbV91aWQodWlkKQotICAgIHsKLSAgICB9
Ci0gICAgCi0gICAgdW5zaWduZWQgc3RhY2ttYXBJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2tt
YXBJRDsgfQotICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fY29k
ZU9yaWdpbjsgfQotICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQoKSBjb25zdCB7IHJldHVybiBt
X3VpZDsgfQotICAgIAotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX3N0YWNrbWFwSUQ7Ci0gICAg
Q29kZU9yaWdpbiBtX2NvZGVPcmlnaW47Ci0gICAgVW5pcXVlZFN0cmluZ0ltcGwqIG1fdWlkOwot
ICAgIAotcHVibGljOgotICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcD4gbV9zbG93UGF0
aERvbmU7Ci19OwotCi1jbGFzcyBHZXRCeUlkRGVzY3JpcHRvciA6IHB1YmxpYyBJbmxpbmVDYWNo
ZURlc2NyaXB0b3IgewotcHVibGljOgotICAgIEdldEJ5SWREZXNjcmlwdG9yKCkgeyB9Ci0gICAg
Ci0gICAgR2V0QnlJZERlc2NyaXB0b3IodW5zaWduZWQgc3RhY2ttYXBJRCwgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotICAgICAgICA6IElubGluZUNhY2hl
RGVzY3JpcHRvcihzdGFja21hcElELCBjb2RlT3JpZ2luLCB1aWQpCi0gICAgewotICAgIH0KLSAg
ICAKLSAgICBWZWN0b3I8SklUR2V0QnlJZEdlbmVyYXRvcj4gbV9nZW5lcmF0b3JzOwotfTsKLQot
Y2xhc3MgUHV0QnlJZERlc2NyaXB0b3IgOiBwdWJsaWMgSW5saW5lQ2FjaGVEZXNjcmlwdG9yIHsK
LXB1YmxpYzoKLSAgICBQdXRCeUlkRGVzY3JpcHRvcigpIHsgfQotICAgIAotICAgIFB1dEJ5SWRE
ZXNjcmlwdG9yKAotICAgICAgICB1bnNpZ25lZCBzdGFja21hcElELCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsCi0gICAgICAgIEVDTUFNb2RlIGVjbWFNb2Rl
LCBQdXRLaW5kIHB1dEtpbmQpCi0gICAgICAgIDogSW5saW5lQ2FjaGVEZXNjcmlwdG9yKHN0YWNr
bWFwSUQsIGNvZGVPcmlnaW4sIHVpZCkKLSAgICAgICAgLCBtX2VjbWFNb2RlKGVjbWFNb2RlKQot
ICAgICAgICAsIG1fcHV0S2luZChwdXRLaW5kKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgVmVj
dG9yPEpJVFB1dEJ5SWRHZW5lcmF0b3I+IG1fZ2VuZXJhdG9yczsKLSAgICAKLSAgICBFQ01BTW9k
ZSBlY21hTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWNtYU1vZGU7IH0KLSAgICBQdXRLaW5kIHB1
dEtpbmQoKSBjb25zdCB7IHJldHVybiBtX3B1dEtpbmQ7IH0KLQotcHJpdmF0ZToKLSAgICBFQ01B
TW9kZSBtX2VjbWFNb2RlOwotICAgIFB1dEtpbmQgbV9wdXRLaW5kOwotfTsKLQotc3RydWN0IENo
ZWNrSW5HZW5lcmF0b3IgewotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBtX3N0dWI7Ci0gICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgbV9zbG93Q2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
bV9iZWdpbkxhYmVsOwotCi0gICAgQ2hlY2tJbkdlbmVyYXRvcihTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YiwgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgc2xvd0NhbGwsIE1hY3JvQXNzZW1ibGVyOjpMYWJl
bCBiZWdpbkxhYmVsKQotICAgICAgICA6IG1fc3R1YihzdHViKSAKLSAgICAgICAgLCBtX3Nsb3dD
YWxsKHNsb3dDYWxsKQotICAgICAgICAsIG1fYmVnaW5MYWJlbChiZWdpbkxhYmVsKQotICAgIHsK
LSAgICB9Ci19OwotCi1jbGFzcyBDaGVja0luRGVzY3JpcHRvciA6IHB1YmxpYyBJbmxpbmVDYWNo
ZURlc2NyaXB0b3IgewotcHVibGljOgotICAgIENoZWNrSW5EZXNjcmlwdG9yKCkgeyB9Ci0gICAg
Ci0gICAgQ2hlY2tJbkRlc2NyaXB0b3IodW5zaWduZWQgc3RhY2ttYXBJRCwgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotICAgICAgICA6IElubGluZUNhY2hl
RGVzY3JpcHRvcihzdGFja21hcElELCBjb2RlT3JpZ2luLCB1aWQpCi0gICAgewotICAgIH0KLSAg
ICAKLSAgICBWZWN0b3I8Q2hlY2tJbkdlbmVyYXRvcj4gbV9nZW5lcmF0b3JzOwotfTsKLQotY2xh
c3MgQmluYXJ5T3BEZXNjcmlwdG9yIDogcHVibGljIElubGluZUNhY2hlRGVzY3JpcHRvciB7Ci1w
dWJsaWM6Ci0gICAgdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoKlNsb3dQYXRoRnVuY3Rpb24pKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDIpOwotCi0gICAgdW5zaWduZWQgbm9kZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX25vZGVU
eXBlOyB9Ci0gICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICBj
b25zdCBjaGFyKiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgU2xvd1BhdGhG
dW5jdGlvbiBzbG93UGF0aEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zbG93UGF0aEZ1bmN0
aW9uOyB9Ci0KLSAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZCgpIHsgcmV0dXJuIG1fbGVm
dE9wZXJhbmQ7IH0KLSAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoKSB7IHJldHVybiBt
X3JpZ2h0T3BlcmFuZDsgfQotCi0gICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpMYWJlbD4gbV9z
bG93UGF0aFN0YXJ0czsKLQotcHJvdGVjdGVkOgotICAgIEJpbmFyeU9wRGVzY3JpcHRvcih1bnNp
Z25lZCBub2RlVHlwZSwgdW5zaWduZWQgc3RhY2ttYXBJRCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LAotICAgICAgICBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogbmFtZSwgU2xvd1BhdGhGdW5jdGlv
biBzbG93UGF0aEZ1bmN0aW9uLAotICAgICAgICBjb25zdCBTbmlwcGV0T3BlcmFuZCYgbGVmdE9w
ZXJhbmQsIGNvbnN0IFNuaXBwZXRPcGVyYW5kJiByaWdodE9wZXJhbmQpCi0gICAgICAgIDogSW5s
aW5lQ2FjaGVEZXNjcmlwdG9yKHN0YWNrbWFwSUQsIGNvZGVPcmlnaW4sIG51bGxwdHIpCi0gICAg
ICAgICwgbV9ub2RlVHlwZShub2RlVHlwZSkKLSAgICAgICAgLCBtX3NpemUoc2l6ZSkKLSAgICAg
ICAgLCBtX25hbWUobmFtZSkKLSAgICAgICAgLCBtX3Nsb3dQYXRoRnVuY3Rpb24oc2xvd1BhdGhG
dW5jdGlvbikKLSAgICAgICAgLCBtX2xlZnRPcGVyYW5kKGxlZnRPcGVyYW5kKQotICAgICAgICAs
IG1fcmlnaHRPcGVyYW5kKHJpZ2h0T3BlcmFuZCkKLSAgICB7Ci0gICAgfQotCi0gICAgdW5zaWdu
ZWQgbV9ub2RlVHlwZTsKLSAgICBzaXplX3QgbV9zaXplOwotICAgIGNvbnN0IGNoYXIqIG1fbmFt
ZTsKLSAgICBTbG93UGF0aEZ1bmN0aW9uIG1fc2xvd1BhdGhGdW5jdGlvbjsKLQotICAgIFNuaXBw
ZXRPcGVyYW5kIG1fbGVmdE9wZXJhbmQ7Ci0gICAgU25pcHBldE9wZXJhbmQgbV9yaWdodE9wZXJh
bmQ7Ci19OwotCi1jbGFzcyBCaXRBbmREZXNjcmlwdG9yIDogcHVibGljIEJpbmFyeU9wRGVzY3Jp
cHRvciB7Ci1wdWJsaWM6Ci0gICAgQml0QW5kRGVzY3JpcHRvcih1bnNpZ25lZCBzdGFja21hcElE
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IFNuaXBwZXRPcGVyYW5kJiBsZWZ0T3BlcmFu
ZCwgY29uc3QgU25pcHBldE9wZXJhbmQmIHJpZ2h0T3BlcmFuZCkKLSAgICAgICAgOiBCaW5hcnlP
cERlc2NyaXB0b3Iobm9kZVR5cGUoKSwgc3RhY2ttYXBJRCwgY29kZU9yaWdpbiwgaWNTaXplKCks
IG9wTmFtZSgpLCBzbG93UGF0aEZ1bmN0aW9uKCksIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQp
Ci0gICAgeyB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IGljU2l6ZSgpIHsgcmV0dXJuIHNpemVPZkJp
dEFuZCgpOyB9Ci0gICAgc3RhdGljIHVuc2lnbmVkIG5vZGVUeXBlKCkgeyByZXR1cm4gREZHOjpC
aXRBbmQ7IH0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gIkJpdEFu
ZCI7IH0KLSAgICBzdGF0aWMgSl9KSVRPcGVyYXRpb25fRUpKIHNsb3dQYXRoRnVuY3Rpb24oKSB7
IHJldHVybiBERkc6Om9wZXJhdGlvblZhbHVlQml0QW5kOyB9Ci0gICAgc3RhdGljIEpfSklUT3Bl
cmF0aW9uX0VKSiBub25OdW1iZXJTbG93UGF0aEZ1bmN0aW9uKCkgeyByZXR1cm4gc2xvd1BhdGhG
dW5jdGlvbigpOyB9Ci19OwotCi1jbGFzcyBCaXRPckRlc2NyaXB0b3IgOiBwdWJsaWMgQmluYXJ5
T3BEZXNjcmlwdG9yIHsKLXB1YmxpYzoKLSAgICBCaXRPckRlc2NyaXB0b3IodW5zaWduZWQgc3Rh
Y2ttYXBJRCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBTbmlwcGV0T3BlcmFuZCYgbGVm
dE9wZXJhbmQsIGNvbnN0IFNuaXBwZXRPcGVyYW5kJiByaWdodE9wZXJhbmQpCi0gICAgICAgIDog
QmluYXJ5T3BEZXNjcmlwdG9yKG5vZGVUeXBlKCksIHN0YWNrbWFwSUQsIGNvZGVPcmlnaW4sIGlj
U2l6ZSgpLCBvcE5hbWUoKSwgc2xvd1BhdGhGdW5jdGlvbigpLCBsZWZ0T3BlcmFuZCwgcmlnaHRP
cGVyYW5kKQotICAgIHsgfQotCi0gICAgc3RhdGljIHNpemVfdCBpY1NpemUoKSB7IHJldHVybiBz
aXplT2ZCaXRPcigpOyB9Ci0gICAgc3RhdGljIHVuc2lnbmVkIG5vZGVUeXBlKCkgeyByZXR1cm4g
REZHOjpCaXRPcjsgfQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBvcE5hbWUoKSB7IHJldHVybiAi
Qml0T3IiOyB9Ci0gICAgc3RhdGljIEpfSklUT3BlcmF0aW9uX0VKSiBzbG93UGF0aEZ1bmN0aW9u
KCkgeyByZXR1cm4gREZHOjpvcGVyYXRpb25WYWx1ZUJpdE9yOyB9Ci0gICAgc3RhdGljIEpfSklU
T3BlcmF0aW9uX0VKSiBub25OdW1iZXJTbG93UGF0aEZ1bmN0aW9uKCkgeyByZXR1cm4gc2xvd1Bh
dGhGdW5jdGlvbigpOyB9Ci19OwotCi1jbGFzcyBCaXRYb3JEZXNjcmlwdG9yIDogcHVibGljIEJp
bmFyeU9wRGVzY3JpcHRvciB7Ci1wdWJsaWM6Ci0gICAgQml0WG9yRGVzY3JpcHRvcih1bnNpZ25l
ZCBzdGFja21hcElELCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IFNuaXBwZXRPcGVyYW5k
JiBsZWZ0T3BlcmFuZCwgY29uc3QgU25pcHBldE9wZXJhbmQmIHJpZ2h0T3BlcmFuZCkKLSAgICAg
ICAgOiBCaW5hcnlPcERlc2NyaXB0b3Iobm9kZVR5cGUoKSwgc3RhY2ttYXBJRCwgY29kZU9yaWdp
biwgaWNTaXplKCksIG9wTmFtZSgpLCBzbG93UGF0aEZ1bmN0aW9uKCksIGxlZnRPcGVyYW5kLCBy
aWdodE9wZXJhbmQpCi0gICAgeyB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IGljU2l6ZSgpIHsgcmV0
dXJuIHNpemVPZkJpdFhvcigpOyB9Ci0gICAgc3RhdGljIHVuc2lnbmVkIG5vZGVUeXBlKCkgeyBy
ZXR1cm4gREZHOjpCaXRYb3I7IH0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogb3BOYW1lKCkgeyBy
ZXR1cm4gIkJpdFhvciI7IH0KLSAgICBzdGF0aWMgSl9KSVRPcGVyYXRpb25fRUpKIHNsb3dQYXRo
RnVuY3Rpb24oKSB7IHJldHVybiBERkc6Om9wZXJhdGlvblZhbHVlQml0WG9yOyB9Ci0gICAgc3Rh
dGljIEpfSklUT3BlcmF0aW9uX0VKSiBub25OdW1iZXJTbG93UGF0aEZ1bmN0aW9uKCkgeyByZXR1
cm4gc2xvd1BhdGhGdW5jdGlvbigpOyB9Ci19OwotCi1jbGFzcyBCaXRMU2hpZnREZXNjcmlwdG9y
IDogcHVibGljIEJpbmFyeU9wRGVzY3JpcHRvciB7Ci1wdWJsaWM6Ci0gICAgQml0TFNoaWZ0RGVz
Y3JpcHRvcih1bnNpZ25lZCBzdGFja21hcElELCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0
IFNuaXBwZXRPcGVyYW5kJiBsZWZ0T3BlcmFuZCwgY29uc3QgU25pcHBldE9wZXJhbmQmIHJpZ2h0
T3BlcmFuZCkKLSAgICAgICAgOiBCaW5hcnlPcERlc2NyaXB0b3Iobm9kZVR5cGUoKSwgc3RhY2tt
YXBJRCwgY29kZU9yaWdpbiwgaWNTaXplKCksIG9wTmFtZSgpLCBzbG93UGF0aEZ1bmN0aW9uKCks
IGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpCi0gICAgeyB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90
IGljU2l6ZSgpIHsgcmV0dXJuIHNpemVPZkJpdExTaGlmdCgpOyB9Ci0gICAgc3RhdGljIHVuc2ln
bmVkIG5vZGVUeXBlKCkgeyByZXR1cm4gREZHOjpCaXRMU2hpZnQ7IH0KLSAgICBzdGF0aWMgY29u
c3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gIkJpdExTaGlmdCI7IH0KLSAgICBzdGF0aWMgSl9K
SVRPcGVyYXRpb25fRUpKIHNsb3dQYXRoRnVuY3Rpb24oKSB7IHJldHVybiBERkc6Om9wZXJhdGlv
blZhbHVlQml0TFNoaWZ0OyB9Ci0gICAgc3RhdGljIEpfSklUT3BlcmF0aW9uX0VKSiBub25OdW1i
ZXJTbG93UGF0aEZ1bmN0aW9uKCkgeyByZXR1cm4gc2xvd1BhdGhGdW5jdGlvbigpOyB9Ci19Owot
Ci1jbGFzcyBCaXRSU2hpZnREZXNjcmlwdG9yIDogcHVibGljIEJpbmFyeU9wRGVzY3JpcHRvciB7
Ci1wdWJsaWM6Ci0gICAgQml0UlNoaWZ0RGVzY3JpcHRvcih1bnNpZ25lZCBzdGFja21hcElELCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IFNuaXBwZXRPcGVyYW5kJiBsZWZ0T3BlcmFuZCwg
Y29uc3QgU25pcHBldE9wZXJhbmQmIHJpZ2h0T3BlcmFuZCkKLSAgICAgICAgOiBCaW5hcnlPcERl
c2NyaXB0b3Iobm9kZVR5cGUoKSwgc3RhY2ttYXBJRCwgY29kZU9yaWdpbiwgaWNTaXplKCksIG9w
TmFtZSgpLCBzbG93UGF0aEZ1bmN0aW9uKCksIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpCi0g
ICAgeyB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IGljU2l6ZSgpIHsgcmV0dXJuIHNpemVPZkJpdFJT
aGlmdCgpOyB9Ci0gICAgc3RhdGljIHVuc2lnbmVkIG5vZGVUeXBlKCkgeyByZXR1cm4gREZHOjpC
aXRSU2hpZnQ7IH0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gIkJp
dFJTaGlmdCI7IH0KLSAgICBzdGF0aWMgSl9KSVRPcGVyYXRpb25fRUpKIHNsb3dQYXRoRnVuY3Rp
b24oKSB7IHJldHVybiBERkc6Om9wZXJhdGlvblZhbHVlQml0UlNoaWZ0OyB9Ci0gICAgc3RhdGlj
IEpfSklUT3BlcmF0aW9uX0VKSiBub25OdW1iZXJTbG93UGF0aEZ1bmN0aW9uKCkgeyByZXR1cm4g
c2xvd1BhdGhGdW5jdGlvbigpOyB9Ci19OwotCi1jbGFzcyBCaXRVUlNoaWZ0RGVzY3JpcHRvciA6
IHB1YmxpYyBCaW5hcnlPcERlc2NyaXB0b3IgewotcHVibGljOgotICAgIEJpdFVSU2hpZnREZXNj
cmlwdG9yKHVuc2lnbmVkIHN0YWNrbWFwSUQsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3Qg
U25pcHBldE9wZXJhbmQmIGxlZnRPcGVyYW5kLCBjb25zdCBTbmlwcGV0T3BlcmFuZCYgcmlnaHRP
cGVyYW5kKQotICAgICAgICA6IEJpbmFyeU9wRGVzY3JpcHRvcihub2RlVHlwZSgpLCBzdGFja21h
cElELCBjb2RlT3JpZ2luLCBpY1NpemUoKSwgb3BOYW1lKCksIHNsb3dQYXRoRnVuY3Rpb24oKSwg
bGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCkKLSAgICB7IH0KLQotICAgIHN0YXRpYyBzaXplX3Qg
aWNTaXplKCkgeyByZXR1cm4gc2l6ZU9mQml0VVJTaGlmdCgpOyB9Ci0gICAgc3RhdGljIHVuc2ln
bmVkIG5vZGVUeXBlKCkgeyByZXR1cm4gREZHOjpCaXRVUlNoaWZ0OyB9Ci0gICAgc3RhdGljIGNv
bnN0IGNoYXIqIG9wTmFtZSgpIHsgcmV0dXJuICJCaXRVUlNoaWZ0IjsgfQotICAgIHN0YXRpYyBK
X0pJVE9wZXJhdGlvbl9FSkogc2xvd1BhdGhGdW5jdGlvbigpIHsgcmV0dXJuIERGRzo6b3BlcmF0
aW9uVmFsdWVCaXRVUlNoaWZ0OyB9Ci0gICAgc3RhdGljIEpfSklUT3BlcmF0aW9uX0VKSiBub25O
dW1iZXJTbG93UGF0aEZ1bmN0aW9uKCkgeyByZXR1cm4gc2xvd1BhdGhGdW5jdGlvbigpOyB9Ci19
OwotCi1jbGFzcyBBcml0aERpdkRlc2NyaXB0b3IgOiBwdWJsaWMgQmluYXJ5T3BEZXNjcmlwdG9y
IHsKLXB1YmxpYzoKLSAgICBBcml0aERpdkRlc2NyaXB0b3IodW5zaWduZWQgc3RhY2ttYXBJRCwg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBTbmlwcGV0T3BlcmFuZCYgbGVmdE9wZXJhbmQs
IGNvbnN0IFNuaXBwZXRPcGVyYW5kJiByaWdodE9wZXJhbmQpCi0gICAgICAgIDogQmluYXJ5T3BE
ZXNjcmlwdG9yKG5vZGVUeXBlKCksIHN0YWNrbWFwSUQsIGNvZGVPcmlnaW4sIGljU2l6ZSgpLCBv
cE5hbWUoKSwgc2xvd1BhdGhGdW5jdGlvbigpLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKQot
ICAgIHsgfQotCi0gICAgc3RhdGljIHNpemVfdCBpY1NpemUoKSB7IHJldHVybiBzaXplT2ZBcml0
aERpdigpOyB9Ci0gICAgc3RhdGljIHVuc2lnbmVkIG5vZGVUeXBlKCkgeyByZXR1cm4gREZHOjpB
cml0aERpdjsgfQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBvcE5hbWUoKSB7IHJldHVybiAiQXJp
dGhEaXYiOyB9Ci0gICAgc3RhdGljIEpfSklUT3BlcmF0aW9uX0VKSiBzbG93UGF0aEZ1bmN0aW9u
KCkgeyByZXR1cm4gREZHOjpvcGVyYXRpb25WYWx1ZURpdjsgfQotICAgIHN0YXRpYyBKX0pJVE9w
ZXJhdGlvbl9FSkogbm9uTnVtYmVyU2xvd1BhdGhGdW5jdGlvbigpIHsgcmV0dXJuIHNsb3dQYXRo
RnVuY3Rpb24oKTsgfQotfTsKLQotY2xhc3MgQXJpdGhNdWxEZXNjcmlwdG9yIDogcHVibGljIEJp
bmFyeU9wRGVzY3JpcHRvciB7Ci1wdWJsaWM6Ci0gICAgQXJpdGhNdWxEZXNjcmlwdG9yKHVuc2ln
bmVkIHN0YWNrbWFwSUQsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3QgU25pcHBldE9wZXJh
bmQmIGxlZnRPcGVyYW5kLCBjb25zdCBTbmlwcGV0T3BlcmFuZCYgcmlnaHRPcGVyYW5kKQotICAg
ICAgICA6IEJpbmFyeU9wRGVzY3JpcHRvcihub2RlVHlwZSgpLCBzdGFja21hcElELCBjb2RlT3Jp
Z2luLCBpY1NpemUoKSwgb3BOYW1lKCksIHNsb3dQYXRoRnVuY3Rpb24oKSwgbGVmdE9wZXJhbmQs
IHJpZ2h0T3BlcmFuZCkKLSAgICB7IH0KLQotICAgIHN0YXRpYyBzaXplX3QgaWNTaXplKCkgeyBy
ZXR1cm4gc2l6ZU9mQXJpdGhNdWwoKTsgfQotICAgIHN0YXRpYyB1bnNpZ25lZCBub2RlVHlwZSgp
IHsgcmV0dXJuIERGRzo6QXJpdGhNdWw7IH0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogb3BOYW1l
KCkgeyByZXR1cm4gIkFyaXRoTXVsIjsgfQotICAgIHN0YXRpYyBKX0pJVE9wZXJhdGlvbl9FSkog
c2xvd1BhdGhGdW5jdGlvbigpIHsgcmV0dXJuIERGRzo6b3BlcmF0aW9uVmFsdWVNdWw7IH0KLSAg
ICBzdGF0aWMgSl9KSVRPcGVyYXRpb25fRUpKIG5vbk51bWJlclNsb3dQYXRoRnVuY3Rpb24oKSB7
IHJldHVybiBzbG93UGF0aEZ1bmN0aW9uKCk7IH0KLX07Ci0KLWNsYXNzIEFyaXRoU3ViRGVzY3Jp
cHRvciA6IHB1YmxpYyBCaW5hcnlPcERlc2NyaXB0b3IgewotcHVibGljOgotICAgIEFyaXRoU3Vi
RGVzY3JpcHRvcih1bnNpZ25lZCBzdGFja21hcElELCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNv
bnN0IFNuaXBwZXRPcGVyYW5kJiBsZWZ0T3BlcmFuZCwgY29uc3QgU25pcHBldE9wZXJhbmQmIHJp
Z2h0T3BlcmFuZCkKLSAgICAgICAgOiBCaW5hcnlPcERlc2NyaXB0b3Iobm9kZVR5cGUoKSwgc3Rh
Y2ttYXBJRCwgY29kZU9yaWdpbiwgaWNTaXplKCksIG9wTmFtZSgpLCBzbG93UGF0aEZ1bmN0aW9u
KCksIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpCi0gICAgeyB9Ci0KLSAgICBzdGF0aWMgc2l6
ZV90IGljU2l6ZSgpIHsgcmV0dXJuIHNpemVPZkFyaXRoU3ViKCk7IH0KLSAgICBzdGF0aWMgdW5z
aWduZWQgbm9kZVR5cGUoKSB7IHJldHVybiBERkc6OkFyaXRoU3ViOyB9Ci0gICAgc3RhdGljIGNv
bnN0IGNoYXIqIG9wTmFtZSgpIHsgcmV0dXJuICJBcml0aFN1YiI7IH0KLSAgICBzdGF0aWMgSl9K
SVRPcGVyYXRpb25fRUpKIHNsb3dQYXRoRnVuY3Rpb24oKSB7IHJldHVybiBERkc6Om9wZXJhdGlv
blZhbHVlU3ViOyB9Ci0gICAgc3RhdGljIEpfSklUT3BlcmF0aW9uX0VKSiBub25OdW1iZXJTbG93
UGF0aEZ1bmN0aW9uKCkgeyByZXR1cm4gc2xvd1BhdGhGdW5jdGlvbigpOyB9Ci19OwotCi1jbGFz
cyBWYWx1ZUFkZERlc2NyaXB0b3IgOiBwdWJsaWMgQmluYXJ5T3BEZXNjcmlwdG9yIHsKLXB1Ymxp
YzoKLSAgICBWYWx1ZUFkZERlc2NyaXB0b3IodW5zaWduZWQgc3RhY2ttYXBJRCwgQ29kZU9yaWdp
biBjb2RlT3JpZ2luLCBjb25zdCBTbmlwcGV0T3BlcmFuZCYgbGVmdE9wZXJhbmQsIGNvbnN0IFNu
aXBwZXRPcGVyYW5kJiByaWdodE9wZXJhbmQpCi0gICAgICAgIDogQmluYXJ5T3BEZXNjcmlwdG9y
KG5vZGVUeXBlKCksIHN0YWNrbWFwSUQsIGNvZGVPcmlnaW4sIGljU2l6ZSgpLCBvcE5hbWUoKSwg
c2xvd1BhdGhGdW5jdGlvbigpLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKQotICAgIHsgfQot
Ci0gICAgc3RhdGljIHNpemVfdCBpY1NpemUoKSB7IHJldHVybiBzaXplT2ZWYWx1ZUFkZCgpOyB9
Ci0gICAgc3RhdGljIHVuc2lnbmVkIG5vZGVUeXBlKCkgeyByZXR1cm4gREZHOjpWYWx1ZUFkZDsg
fQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBvcE5hbWUoKSB7IHJldHVybiAiVmFsdWVBZGQiOyB9
Ci0gICAgc3RhdGljIEpfSklUT3BlcmF0aW9uX0VKSiBzbG93UGF0aEZ1bmN0aW9uKCkgeyByZXR1
cm4gREZHOjpvcGVyYXRpb25WYWx1ZUFkZDsgfQotICAgIHN0YXRpYyBKX0pJVE9wZXJhdGlvbl9F
Skogbm9uTnVtYmVyU2xvd1BhdGhGdW5jdGlvbigpIHsgcmV0dXJuIERGRzo6b3BlcmF0aW9uVmFs
dWVBZGROb3ROdW1iZXI7IH0KLX07Ci0KLS8vIFlvdSBjYW4gY3JlYXRlIGEgbGF6eSBzbG93IHBh
dGggY2FsbCBpbiBsb3dlckRGR1RvTExWTSBieSBkb2luZzoKLS8vIG1fZnRsU3RhdGUubGF6eVNs
b3dQYXRocy5hcHBlbmQoCi0vLyAgICAgTGF6eVNsb3dQYXRoRGVzY3JpcHRvcigKLS8vICAgICAg
ICAgc3RhY2ttYXBJRCwgY2FsbFNpdGVJbmRleCwKLS8vICAgICAgICAgY3JlYXRlU2hhcmVkVGFz
azxSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+KGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4m
KT4oCi0vLyAgICAgICAgICAgICBbXSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25z
KSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLS8vICAgICAgICAgICAgICAg
ICAvLyBUaGlzIGxhbWJkYSBzaG91bGQganVzdCByZWNvcmQgdGhlIHJlZ2lzdGVycyB0aGF0IHdl
IHdpbGwgYmUgdXNpbmcsIGFuZCByZXR1cm4KLS8vICAgICAgICAgICAgICAgICAvLyBhIFNoYXJl
ZFRhc2sgdGhhdCB3aWxsIGFjdHVhbGx5IGdlbmVyYXRlIHRoZSBzbG93IHBhdGguCi0vLyAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAotLy8gICAgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbiwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNb
MV0uZGlyZWN0R1BSKCkpOwotLy8gICAgICAgICAgICAgfSkpKTsKLS8vCi0vLyBVc3VhbGx5LCB5
b3UgY2FuIHVzZSB0aGUgTG93ZXJERkdUb0xMVk06OmxhenlTbG93UGF0aCgpIGhlbHBlciwgd2hp
Y2ggdGFrZXMgY2FyZSBvZiB0aGUgZGVzY3JpcHRvcgotLy8gZm9yIHlvdSBhbmQgYWxzbyBjcmVh
dGVzIHRoZSBwYXRjaHBvaW50LgotdHlwZWRlZiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0
b3I+IExhenlTbG93UGF0aExpbmtlckZ1bmN0aW9uKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mKTsK
LXR5cGVkZWYgU2hhcmVkVGFzazxMYXp5U2xvd1BhdGhMaW5rZXJGdW5jdGlvbj4gTGF6eVNsb3dQ
YXRoTGlua2VyVGFzazsKLWNsYXNzIExhenlTbG93UGF0aERlc2NyaXB0b3IgOiBwdWJsaWMgSW5s
aW5lQ2FjaGVEZXNjcmlwdG9yIHsKLXB1YmxpYzoKLSAgICBMYXp5U2xvd1BhdGhEZXNjcmlwdG9y
KCkgeyB9Ci0KLSAgICBMYXp5U2xvd1BhdGhEZXNjcmlwdG9yKAotICAgICAgICB1bnNpZ25lZCBz
dGFja21hcElELCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sCi0gICAgICAgIFJlZlB0cjxMYXp5U2xv
d1BhdGhMaW5rZXJUYXNrPiBsaW5rZXIpCi0gICAgICAgIDogSW5saW5lQ2FjaGVEZXNjcmlwdG9y
KHN0YWNrbWFwSUQsIGNvZGVPcmlnaW4sIG51bGxwdHIpCi0gICAgICAgICwgbV9saW5rZXIobGlu
a2VyKQotICAgIHsKLSAgICB9Ci0KLSAgICBWZWN0b3I8c3RkOjp0dXBsZTxMYXp5U2xvd1BhdGgq
LCBDQ2FsbEhlbHBlcnM6OkxhYmVsPj4gbV9nZW5lcmF0b3JzOwotCi0gICAgUmVmUHRyPExhenlT
bG93UGF0aExpbmtlclRhc2s+IG1fbGlua2VyOwotfTsKLQotI2lmIEVOQUJMRShNQVNNX1BST0JF
KQotY2xhc3MgUHJvYmVEZXNjcmlwdG9yIDogcHVibGljIElubGluZUNhY2hlRGVzY3JpcHRvciB7
Ci1wdWJsaWM6Ci0gICAgUHJvYmVEZXNjcmlwdG9yKHVuc2lnbmVkIHN0YWNrbWFwSUQsIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoQ0NhbGxIZWxwZXJzOjpQcm9iZUNvbnRleHQqKT4gcHJvYmVGdW5jdGlv
bikKLSAgICAgICAgOiBJbmxpbmVDYWNoZURlc2NyaXB0b3Ioc3RhY2ttYXBJRCwgY29kZU9yaWdp
bigpLCBudWxscHRyKQotICAgICAgICAsIG1fcHJvYmVGdW5jdGlvbihwcm9iZUZ1bmN0aW9uKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKENDYWxsSGVscGVyczo6UHJv
YmVDb250ZXh0Kik+JiBwcm9iZUZ1bmN0aW9uKCkgeyByZXR1cm4gbV9wcm9iZUZ1bmN0aW9uOyB9
Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjpmdW5jdGlvbjx2b2lkIChDQ2FsbEhlbHBlcnM6OlByb2Jl
Q29udGV4dCopPiBtX3Byb2JlRnVuY3Rpb247Ci19OwotI2VuZGlmIC8vIEVOQUJMRShNQVNNX1BS
T0JFKQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCi0KLSNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKLQotI2VuZGlmIC8vIEZUTElubGluZUNhY2hlRGVzY3JpcHRvcl9oCi0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAJKHJl
dmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2Fj
aGVTaXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzNDIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJGVExJbmxpbmVDYWNoZVNpemUuaCIKLQotI2lmIEVOQUJMRShGVExfSklU
KQotCi0jaW5jbHVkZSAiREZHTm9kZS5oIgotI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJh
dG9yLmgiCi0jaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBGVEwgewotCi11c2luZyBuYW1lc3BhY2UgREZHOwotCi0vLyBUaGUgZGVmYXVsdCBz
aXplcyBhcmUgeDg2LTY0LXNwZWNpZmljLCBhbmQgd2VyZSBmb3VuZCBlbXBpcmljYWxseS4gVGhl
eSBoYXZlIHRvIGNvdmVyIHRoZSB3b3JzdAotLy8gcG9zc2libGUgY29tYmluYXRpb24gb2YgcmVn
aXN0ZXJzIGxlYWRpbmcgdG8gdGhlIGxhcmdlc3QgcG9zc2libGUgZW5jb2Rpbmcgb2YgZWFjaCBp
bnN0cnVjdGlvbiBpbgotLy8gdGhlIElDLgotLy8KLS8vIEZJWE1FOiBUaGUgQVJNNjQgc2l6ZXMg
YXJlIG92ZXJlc3RpbWF0ZXM7IGlmIHRoZXJlIGlzIGFueSBicmFuY2ggY29tcGFjdGlvbiB0aGVu
IHdlIHNob3VsZCBiZSBhYmxlCi0vLyB0byBnZXQgYXdheSB3aXRoIGxlc3MuIFRoZSBicmFuY2gg
Y29tcGFjdGlvbiBjb2RlIGN1cnJlbnRseSB2YWxpZGF0ZXMgdGhlIHNpemUgb2YgdGhlIElDIGJl
Zm9yZQotLy8gZG9pbmcgYW55IGNvbXBhY3Rpb24sIHNvIHdlIG5lZWQgdG8gb3ZlcmVzdGltYXRl
IGFuZCBnaXZlIHRoZSB1bmNvbXBhY3RlZCBzaXplLiBUaGlzIHdvdWxkIGJlCi0vLyByZWxhdGl2
ZWx5IGVhc3kgdG8gZml4LgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyOTMzNQotCi1zaXplX3Qgc2l6ZU9mR2V0QnlJZCgpCi17Ci0jaWYgQ1BVKEFSTTY0KQot
ICAgIHJldHVybiAzMjsKLSNlbHNlCi0gICAgcmV0dXJuIDI3OwotI2VuZGlmCi19Ci0KLXNpemVf
dCBzaXplT2ZQdXRCeUlkKCkKLXsKLSNpZiBDUFUoQVJNNjQpCi0gICAgcmV0dXJuIDQwOwotI2Vs
c2UKLSAgICByZXR1cm4gMjk7Ci0jZW5kaWYKLX0KLQotc2l6ZV90IHNpemVPZkNhbGwoKQotewot
I2lmIENQVShBUk02NCkKLSAgICByZXR1cm4gNjA7Ci0jZWxzZQotICAgIHJldHVybiA2MDsKLSNl
bmRpZgotfQotCi1zaXplX3Qgc2l6ZU9mQ2FsbFZhcmFyZ3MoKQotewotI2lmIENQVShBUk02NCkK
LSAgICByZXR1cm4gMzMyOwotI2Vsc2UKLSAgICByZXR1cm4gMjc1OwotI2VuZGlmCi19Ci0KLXNp
emVfdCBzaXplT2ZUYWlsQ2FsbFZhcmFyZ3MoKQotewotI2lmIENQVShBUk02NCkKLSAgICByZXR1
cm4gMTg4ICsgc2l6ZU9mQ2FsbFZhcmFyZ3MoKTsKLSNlbHNlCi0gICAgcmV0dXJuIDE1MSArIHNp
emVPZkNhbGxWYXJhcmdzKCk7Ci0jZW5kaWYKLX0KLQotc2l6ZV90IHNpemVPZkNhbGxGb3J3YXJk
VmFyYXJncygpCi17Ci0jaWYgQ1BVKEFSTTY0KQotICAgIHJldHVybiAzMTI7Ci0jZWxzZQotICAg
IHJldHVybiAyNjI7Ci0jZW5kaWYKLX0KLQotc2l6ZV90IHNpemVPZlRhaWxDYWxsRm9yd2FyZFZh
cmFyZ3MoKQotewotI2lmIENQVShBUk02NCkKLSAgICByZXR1cm4gMTg4ICsgc2l6ZU9mQ2FsbEZv
cndhcmRWYXJhcmdzKCk7Ci0jZWxzZQotICAgIHJldHVybiAxNTEgKyBzaXplT2ZDYWxsRm9yd2Fy
ZFZhcmFyZ3MoKTsKLSNlbmRpZgotfQotCi1zaXplX3Qgc2l6ZU9mQ29uc3RydWN0VmFyYXJncygp
Ci17Ci0gICAgcmV0dXJuIHNpemVPZkNhbGxWYXJhcmdzKCk7IC8vIFNob3VsZCBiZSB0aGUgc2Ft
ZSBzaXplLgotfQotCi1zaXplX3Qgc2l6ZU9mQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3MoKQotewot
ICAgIHJldHVybiBzaXplT2ZDYWxsRm9yd2FyZFZhcmFyZ3MoKTsgLy8gU2hvdWxkIGJlIHRoZSBz
YW1lIHNpemUuCi19Ci0KLXNpemVfdCBzaXplT2ZJbigpCi17Ci0jaWYgQ1BVKEFSTTY0KQotICAg
IHJldHVybiA0OwotI2Vsc2UKLSAgICByZXR1cm4gNTsgCi0jZW5kaWYKLX0KLQotc2l6ZV90IHNp
emVPZkJpdEFuZCgpCi17Ci0jaWYgQ1BVKEFSTTY0KQotI2lmZGVmIE5ERUJVRwotcmV0dXJuIDE4
MDsgLy8gQVJNNjQgcmVsZWFzZS4KLSNlbHNlCi1yZXR1cm4gMjc2OyAvLyBBUk02NCBkZWJ1Zy4K
LSNlbmRpZgotI2Vsc2UgLy8gQ1BVKFg4Nl82NCkKLSNpZmRlZiBOREVCVUcKLXJldHVybiAxOTk7
IC8vIFg4Nl82NCByZWxlYXNlLgotI2Vsc2UKLXJldHVybiAyODY7IC8vIFg4Nl82NCBkZWJ1Zy4K
LSNlbmRpZgotI2VuZGlmCi19Ci0KLXNpemVfdCBzaXplT2ZCaXRPcigpCi17Ci0jaWYgQ1BVKEFS
TTY0KQotI2lmZGVmIE5ERUJVRwotICAgIHJldHVybiAxODA7IC8vIEFSTTY0IHJlbGVhc2UuCi0j
ZWxzZQotICAgIHJldHVybiAyNzY7IC8vIEFSTTY0IGRlYnVnLgotI2VuZGlmCi0jZWxzZSAvLyBD
UFUoWDg2XzY0KQotI2lmZGVmIE5ERUJVRwotICAgIHJldHVybiAxOTk7IC8vIFg4Nl82NCByZWxl
YXNlLgotI2Vsc2UKLSAgICByZXR1cm4gMjg2OyAvLyBYODZfNjQgZGVidWcuCi0jZW5kaWYKLSNl
bmRpZgotfQotCi1zaXplX3Qgc2l6ZU9mQml0WG9yKCkKLXsKLSNpZiBDUFUoQVJNNjQpCi0jaWZk
ZWYgTkRFQlVHCi0gICAgcmV0dXJuIDE4MDsgLy8gQVJNNjQgcmVsZWFzZS4KLSNlbHNlCi0gICAg
cmV0dXJuIDI3NjsgLy8gQVJNNjQgZGVidWcuCi0jZW5kaWYKLSNlbHNlIC8vIENQVShYODZfNjQp
Ci0jaWZkZWYgTkRFQlVHCi0gICAgcmV0dXJuIDE5OTsgLy8gWDg2XzY0IHJlbGVhc2UuCi0jZWxz
ZQotICAgIHJldHVybiAyODY7IC8vIFg4Nl82NCBkZWJ1Zy4KLSNlbmRpZgotI2VuZGlmCi19Ci0K
LXNpemVfdCBzaXplT2ZCaXRMU2hpZnQoKQotewotI2lmIENQVShBUk02NCkKLSNpZmRlZiBOREVC
VUcKLSAgICByZXR1cm4gMTgwOyAvLyBBUk02NCByZWxlYXNlLgotI2Vsc2UKLSAgICByZXR1cm4g
Mjc2OyAvLyBBUk02NCBkZWJ1Zy4KLSNlbmRpZgotI2Vsc2UgLy8gQ1BVKFg4Nl82NCkKLSNpZmRl
ZiBOREVCVUcKLSAgICByZXR1cm4gMTk5OyAvLyBYODZfNjQgcmVsZWFzZS4KLSNlbHNlCi0gICAg
cmV0dXJuIDI4NjsgLy8gWDg2XzY0IGRlYnVnLgotI2VuZGlmCi0jZW5kaWYKLX0KLQotc2l6ZV90
IHNpemVPZkJpdFJTaGlmdCgpCi17Ci0jaWYgQ1BVKEFSTTY0KQotI2lmZGVmIE5ERUJVRwotICAg
IHJldHVybiAxODA7IC8vIEFSTTY0IHJlbGVhc2UuCi0jZWxzZQotICAgIHJldHVybiAyNzY7IC8v
IEFSTTY0IGRlYnVnLgotI2VuZGlmCi0jZWxzZSAvLyBDUFUoWDg2XzY0KQotI2lmZGVmIE5ERUJV
RwotICAgIHJldHVybiAxOTk7IC8vIFg4Nl82NCByZWxlYXNlLgotI2Vsc2UKLSAgICByZXR1cm4g
Mjg2OyAvLyBYODZfNjQgZGVidWcuCi0jZW5kaWYKLSNlbmRpZgotfQotCi1zaXplX3Qgc2l6ZU9m
Qml0VVJTaGlmdCgpCi17Ci0jaWYgQ1BVKEFSTTY0KQotI2lmZGVmIE5ERUJVRwotICAgIHJldHVy
biAxODA7IC8vIEFSTTY0IHJlbGVhc2UuCi0jZWxzZQotICAgIHJldHVybiAyNzY7IC8vIEFSTTY0
IGRlYnVnLgotI2VuZGlmCi0jZWxzZSAvLyBDUFUoWDg2XzY0KQotI2lmZGVmIE5ERUJVRwotICAg
IHJldHVybiAxOTk7IC8vIFg4Nl82NCByZWxlYXNlLgotI2Vsc2UKLSAgICByZXR1cm4gMjg2OyAv
LyBYODZfNjQgZGVidWcuCi0jZW5kaWYKLSNlbmRpZgotfQotCi1zaXplX3Qgc2l6ZU9mQXJpdGhE
aXYoKQotewotI2lmIENQVShBUk02NCkKLSNpZmRlZiBOREVCVUcKLSAgICByZXR1cm4gMTgwOyAv
LyBBUk02NCByZWxlYXNlLgotI2Vsc2UKLSAgICByZXR1cm4gMjc2OyAvLyBBUk02NCBkZWJ1Zy4K
LSNlbmRpZgotI2Vsc2UgLy8gQ1BVKFg4Nl82NCkKLSNpZmRlZiBOREVCVUcKLSAgICByZXR1cm4g
MTk5OyAvLyBYODZfNjQgcmVsZWFzZS4KLSNlbHNlCi0gICAgcmV0dXJuIDI4NjsgLy8gWDg2XzY0
IGRlYnVnLgotI2VuZGlmCi0jZW5kaWYKLX0KLQotc2l6ZV90IHNpemVPZkFyaXRoTXVsKCkKLXsK
LSNpZiBDUFUoQVJNNjQpCi0jaWZkZWYgTkRFQlVHCi0gICAgcmV0dXJuIDE4MDsgLy8gQVJNNjQg
cmVsZWFzZS4KLSNlbHNlCi0gICAgcmV0dXJuIDI3NjsgLy8gQVJNNjQgZGVidWcuCi0jZW5kaWYK
LSNlbHNlIC8vIENQVShYODZfNjQpCi0jaWZkZWYgTkRFQlVHCi0gICAgcmV0dXJuIDE5OTsgLy8g
WDg2XzY0IHJlbGVhc2UuCi0jZWxzZQotICAgIHJldHVybiAyODY7IC8vIFg4Nl82NCBkZWJ1Zy4K
LSNlbmRpZgotI2VuZGlmCi19Ci0KLXNpemVfdCBzaXplT2ZBcml0aFN1YigpCi17Ci0jaWYgQ1BV
KEFSTTY0KQotI2lmZGVmIE5ERUJVRwotICAgIHJldHVybiAyMTY7IC8vIEFSTTY0IHJlbGVhc2Uu
Ci0jZWxzZQotICAgIHJldHVybiAzMTI7IC8vIEFSTTY0IGRlYnVnLgotI2VuZGlmCi0jZWxzZSAv
LyBDUFUoWDg2XzY0KQotI2lmZGVmIE5ERUJVRwotICAgIHJldHVybiAyMjM7IC8vIFg4Nl82NCBy
ZWxlYXNlLgotI2Vsc2UKLSAgICByZXR1cm4gMjk4OyAvLyBYODZfNjQgZGVidWcuCi0jZW5kaWYK
LSNlbmRpZgotfQotCi1zaXplX3Qgc2l6ZU9mVmFsdWVBZGQoKQotewotI2lmIENQVShBUk02NCkK
LSNpZmRlZiBOREVCVUcKLSAgICByZXR1cm4gMTgwOyAvLyBBUk02NCByZWxlYXNlLgotI2Vsc2UK
LSAgICByZXR1cm4gMjc2OyAvLyBBUk02NCBkZWJ1Zy4KLSNlbmRpZgotI2Vsc2UgLy8gQ1BVKFg4
Nl82NCkKLSNpZmRlZiBOREVCVUcKLSAgICByZXR1cm4gMTk5OyAvLyBYODZfNjQgcmVsZWFzZS4K
LSNlbHNlCi0gICAgcmV0dXJuIDI4NjsgLy8gWDg2XzY0IGRlYnVnLgotI2VuZGlmCi0jZW5kaWYK
LX0KLQotI2lmIEVOQUJMRShNQVNNX1BST0JFKQotc2l6ZV90IHNpemVPZlByb2JlKCkKLXsKLSAg
ICByZXR1cm4gMTMyOyAvLyBCYXNlZCBvbiBBUk02NC4KLX0KLSNlbmRpZgotCi1zaXplX3Qgc2l6
ZU9mSUNGb3IoTm9kZSogbm9kZSkKLXsKLSAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICBj
YXNlIEdldEJ5SWQ6Ci0gICAgICAgIHJldHVybiBzaXplT2ZHZXRCeUlkKCk7Ci0gICAgY2FzZSBQ
dXRCeUlkOgotICAgICAgICByZXR1cm4gc2l6ZU9mUHV0QnlJZCgpOwotICAgIGNhc2UgQ2FsbDoK
LSAgICBjYXNlIENvbnN0cnVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVPZkNhbGwoKTsKLSAgICBj
YXNlIENhbGxWYXJhcmdzOgotICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoK
LSAgICAgICAgcmV0dXJuIHNpemVPZkNhbGxWYXJhcmdzKCk7Ci0gICAgY2FzZSBUYWlsQ2FsbFZh
cmFyZ3M6Ci0gICAgICAgIHJldHVybiBzaXplT2ZUYWlsQ2FsbFZhcmFyZ3MoKTsKLSAgICBjYXNl
IENhbGxGb3J3YXJkVmFyYXJnczoKLSAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxp
bmVkQ2FsbGVyOgotICAgICAgICByZXR1cm4gc2l6ZU9mQ2FsbEZvcndhcmRWYXJhcmdzKCk7Ci0g
ICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgotICAgICAgICByZXR1cm4gc2l6ZU9mVGFp
bENhbGxGb3J3YXJkVmFyYXJncygpOwotICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKLSAgICAg
ICAgcmV0dXJuIHNpemVPZkNvbnN0cnVjdFZhcmFyZ3MoKTsKLSAgICBjYXNlIENvbnN0cnVjdEZv
cndhcmRWYXJhcmdzOgotICAgICAgICByZXR1cm4gc2l6ZU9mQ29uc3RydWN0Rm9yd2FyZFZhcmFy
Z3MoKTsKLSAgICBjYXNlIEluOgotICAgICAgICByZXR1cm4gc2l6ZU9mSW4oKTsKLSAgICBkZWZh
dWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQot
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUu
aAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxp
bmVDYWNoZVNpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3MCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgRlRMSW5s
aW5lQ2FjaGVTaXplX2gKLSNkZWZpbmUgRlRMSW5saW5lQ2FjaGVTaXplX2gKLQotI2lmIEVOQUJM
RShGVExfSklUKQotCi1uYW1lc3BhY2UgSlNDIHsKLQotbmFtZXNwYWNlIERGRyB7Ci1zdHJ1Y3Qg
Tm9kZTsKLX0KLQotbmFtZXNwYWNlIEZUTCB7Ci0KLXNpemVfdCBzaXplT2ZHZXRCeUlkKCk7Ci1z
aXplX3Qgc2l6ZU9mUHV0QnlJZCgpOwotc2l6ZV90IHNpemVPZkNhbGwoKTsKLXNpemVfdCBzaXpl
T2ZDYWxsVmFyYXJncygpOwotc2l6ZV90IHNpemVPZlRhaWxDYWxsVmFyYXJncygpOwotc2l6ZV90
IHNpemVPZkNhbGxGb3J3YXJkVmFyYXJncygpOwotc2l6ZV90IHNpemVPZlRhaWxDYWxsRm9yd2Fy
ZFZhcmFyZ3MoKTsKLXNpemVfdCBzaXplT2ZDb25zdHJ1Y3RWYXJhcmdzKCk7Ci1zaXplX3Qgc2l6
ZU9mQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3MoKTsKLXNpemVfdCBzaXplT2ZJbigpOwotc2l6ZV90
IHNpemVPZkJpdEFuZCgpOwotc2l6ZV90IHNpemVPZkJpdE9yKCk7Ci1zaXplX3Qgc2l6ZU9mQml0
WG9yKCk7Ci1zaXplX3Qgc2l6ZU9mQml0TFNoaWZ0KCk7Ci1zaXplX3Qgc2l6ZU9mQml0UlNoaWZ0
KCk7Ci1zaXplX3Qgc2l6ZU9mQml0VVJTaGlmdCgpOwotc2l6ZV90IHNpemVPZkFyaXRoRGl2KCk7
Ci1zaXplX3Qgc2l6ZU9mQXJpdGhNdWwoKTsKLXNpemVfdCBzaXplT2ZBcml0aFN1YigpOwotc2l6
ZV90IHNpemVPZlZhbHVlQWRkKCk7Ci0jaWYgRU5BQkxFKE1BU01fUFJPQkUpCi1zaXplX3Qgc2l6
ZU9mUHJvYmUoKTsKLSNlbmRpZgotCi1zaXplX3Qgc2l6ZU9mSUNGb3IoREZHOjpOb2RlKik7Ci0K
LX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKLQotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQot
Ci0jZW5kaWYgLy8gRlRMSW5saW5lQ2FjaGVTaXplX2gKLQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuY3BwCShyZXZpc2lv
biAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9z
aXRvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkZUTEludHJpbnNpY1JlcG9zaXRvcnkuaCIKLQotI2lmIEVOQUJMRShGVExfSklUKQot
I2lmICFGVExfVVNFU19CMwotCi0jaW5jbHVkZSAiRlRMQWJicmV2aWF0aW9ucy5oIgotCi1uYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLUludHJpbnNpY1JlcG9zaXRvcnk6OkludHJp
bnNpY1JlcG9zaXRvcnkoTENvbnRleHQgY29udGV4dCkKLSAgICA6IENvbW1vblZhbHVlcyhjb250
ZXh0KQotI2RlZmluZSBJTlRSSU5TSUNfSU5JVElBTElaQVRJT04ob3VyTmFtZSwgbGx2bU5hbWUs
IHR5cGUpICwgbV8jI291ck5hbWUoMCkKLSAgICBGT1JfRUFDSF9GVExfSU5UUklOU0lDKElOVFJJ
TlNJQ19JTklUSUFMSVpBVElPTikKLSN1bmRlZiBJTlRSSU5TSUNfSU5JVElBTElaQVRJT04KLSNk
ZWZpbmUgRlVOQ1RJT05fVFlQRV9JTklUSUFMSVpBVElPTih0eXBlTmFtZSwgdHlwZSkgLCBtXyMj
dHlwZU5hbWUoMCkKLSAgICBGT1JfRUFDSF9GVU5DVElPTl9UWVBFKEZVTkNUSU9OX1RZUEVfSU5J
VElBTElaQVRJT04pCi0jdW5kZWYgRlVOQ1RJT05fVFlQRV9JTklUSUFMSVpBVElPTgotewotfQot
Ci0jZGVmaW5lIElOVFJJTlNJQ19HRVRURVJfU0xPV19ERUZJTklUSU9OKG91ck5hbWUsIGxsdm1O
YW1lLCB0eXBlKSAgICAgICBcCi0gICAgTFZhbHVlIEludHJpbnNpY1JlcG9zaXRvcnk6Om91ck5h
bWUjI0ludHJpbnNpY1Nsb3coKSAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgIG1fIyNvdXJOYW1lID0gYWRkRXh0ZXJuRnVuY3Rpb24obV9tb2R1bGUsIGxsdm1OYW1l
LCB0eXBlKTsgICAgICBcCi0gICAgICAgIHJldHVybiBtXyMjb3VyTmFtZTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfQotRk9SX0VBQ0hfRlRMX0lO
VFJJTlNJQyhJTlRSSU5TSUNfR0VUVEVSX1NMT1dfREVGSU5JVElPTikKLSN1bmRlZiBJTlRSSU5T
SUNfR0VUVEVSCi0KLSNkZWZpbmUgRlVOQ1RJT05fVFlQRV9HRVRURVJfU0xPV19ERUZJTklUSU9O
KHR5cGVOYW1lLCB0eXBlKSBcCi0gICAgTFR5cGUgSW50cmluc2ljUmVwb3NpdG9yeTo6dHlwZU5h
bWUjI1Nsb3coKSAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgbV8jI3R5cGVOYW1lID0g
dHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHJldHVybiBt
XyMjdHlwZU5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0KLUZP
Ul9FQUNIX0ZVTkNUSU9OX1RZUEUoRlVOQ1RJT05fVFlQRV9HRVRURVJfU0xPV19ERUZJTklUSU9O
KQotI3VuZGVmIEZVTkNUSU9OX1RZUEVfR0VUVEVSX1NMT1dfREVGSU5JVElPTgotCi19IH0gLy8g
bmFtZXNwYWNlIEpTQzo6RlRMCi0KLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKLSNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRy
aW5zaWNSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDE5NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2lmbmRlZiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5X2gKLSNkZWZpbmUg
RlRMSW50cmluc2ljUmVwb3NpdG9yeV9oCi0KLSNpZiBFTkFCTEUoRlRMX0pJVCkKLQotI2luY2x1
ZGUgIkRGR0NvbW1vbi5oIgotCi0jaWYgIUZUTF9VU0VTX0IzCi0KLSNpbmNsdWRlICJERkdPcGVy
YXRpb25zLmgiCi0jaW5jbHVkZSAiRlRMQWJicmV2aWF0aW9ucy5oIgotI2luY2x1ZGUgIkZUTENv
bW1vblZhbHVlcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLSNkZWZp
bmUgRk9SX0VBQ0hfRlRMX0lOVFJJTlNJQyhtYWNybykgXAotICAgIG1hY3JvKGNlaWw2NCwgImxs
dm0uY2VpbC5mNjQiLCBmdW5jdGlvblR5cGUoZG91YmxlVHlwZSwgZG91YmxlVHlwZSkpIFwKLSAg
ICBtYWNybyhjdGx6MzIsICJsbHZtLmN0bHouaTMyIiwgZnVuY3Rpb25UeXBlKGludDMyLCBpbnQz
MiwgYm9vbGVhbikpIFwKLSAgICBtYWNybyhhZGRXaXRoT3ZlcmZsb3czMiwgImxsdm0uc2FkZC53
aXRoLm92ZXJmbG93LmkzMiIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50
MzIsIGJvb2xlYW4pLCBpbnQzMiwgaW50MzIpKSBcCi0gICAgbWFjcm8oYWRkV2l0aE92ZXJmbG93
NjQsICJsbHZtLnNhZGQud2l0aC5vdmVyZmxvdy5pNjQiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlw
ZShtX2NvbnRleHQsIGludDY0LCBib29sZWFuKSwgaW50NjQsIGludDY0KSkgXAotICAgIG1hY3Jv
KGRvdWJsZUFicywgImxsdm0uZmFicy5mNjQiLCBmdW5jdGlvblR5cGUoZG91YmxlVHlwZSwgZG91
YmxlVHlwZSkpIFwKLSAgICBtYWNybyhkb3VibGVTaW4sICJsbHZtLnNpbi5mNjQiLCBmdW5jdGlv
blR5cGUoZG91YmxlVHlwZSwgZG91YmxlVHlwZSkpIFwKLSAgICBtYWNybyhkb3VibGVDb3MsICJs
bHZtLmNvcy5mNjQiLCBmdW5jdGlvblR5cGUoZG91YmxlVHlwZSwgZG91YmxlVHlwZSkpIFwKLSAg
ICBtYWNybyhkb3VibGVQb3csICJsbHZtLnBvdy5mNjQiLCBmdW5jdGlvblR5cGUoZG91YmxlVHlw
ZSwgZG91YmxlVHlwZSwgZG91YmxlVHlwZSkpIFwKLSAgICBtYWNybyhkb3VibGVQb3dpLCAibGx2
bS5wb3dpLmY2NCIsIGZ1bmN0aW9uVHlwZShkb3VibGVUeXBlLCBkb3VibGVUeXBlLCBpbnQzMikp
IFwKLSAgICBtYWNybyhkb3VibGVTcXJ0LCAibGx2bS5zcXJ0LmY2NCIsIGZ1bmN0aW9uVHlwZShk
b3VibGVUeXBlLCBkb3VibGVUeXBlKSkgXAotICAgIG1hY3JvKGRvdWJsZUxvZywgImxsdm0ubG9n
LmY2NCIsIGZ1bmN0aW9uVHlwZShkb3VibGVUeXBlLCBkb3VibGVUeXBlKSkgXAotICAgIG1hY3Jv
KGZyYW1lQWRkcmVzcywgImxsdm0uZnJhbWVhZGRyZXNzIiwgZnVuY3Rpb25UeXBlKHBvaW50ZXJU
eXBlKGludDgpLCBpbnQzMikpIFwKLSAgICBtYWNybyhtdWxXaXRoT3ZlcmZsb3czMiwgImxsdm0u
c211bC53aXRoLm92ZXJmbG93LmkzMiIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4
dCwgaW50MzIsIGJvb2xlYW4pLCBpbnQzMiwgaW50MzIpKSBcCi0gICAgbWFjcm8obXVsV2l0aE92
ZXJmbG93NjQsICJsbHZtLnNtdWwud2l0aC5vdmVyZmxvdy5pNjQiLCBmdW5jdGlvblR5cGUoc3Ry
dWN0VHlwZShtX2NvbnRleHQsIGludDY0LCBib29sZWFuKSwgaW50NjQsIGludDY0KSkgXAotICAg
IG1hY3JvKHBhdGNocG9pbnRJbnQ2NCwgImxsdm0uZXhwZXJpbWVudGFsLnBhdGNocG9pbnQuaTY0
IiwgZnVuY3Rpb25UeXBlKGludDY0LCBpbnQ2NCwgaW50MzIsIHJlZjgsIGludDMyLCBWYXJpYWRp
YykpIFwKLSAgICBtYWNybyhwYXRjaHBvaW50Vm9pZCwgImxsdm0uZXhwZXJpbWVudGFsLnBhdGNo
cG9pbnQudm9pZCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50NjQsIGludDMyLCByZWY4LCBp
bnQzMiwgVmFyaWFkaWMpKSBcCi0gICAgbWFjcm8oc3RhY2ttYXAsICJsbHZtLmV4cGVyaW1lbnRh
bC5zdGFja21hcCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50NjQsIGludDMyLCBWYXJpYWRp
YykpIFwKLSAgICBtYWNybyhzdWJXaXRoT3ZlcmZsb3czMiwgImxsdm0uc3N1Yi53aXRoLm92ZXJm
bG93LmkzMiIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50MzIsIGJvb2xl
YW4pLCBpbnQzMiwgaW50MzIpKSBcCi0gICAgbWFjcm8oc3ViV2l0aE92ZXJmbG93NjQsICJsbHZt
LnNzdWIud2l0aC5vdmVyZmxvdy5pNjQiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZShtX2NvbnRl
eHQsIGludDY0LCBib29sZWFuKSwgaW50NjQsIGludDY0KSkgXAotICAgIG1hY3JvKHRyYXAsICJs
bHZtLnRyYXAiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUpKSBcCi0gICAgbWFjcm8oeDg2U1NFMkN2
dFRTRDJTSSwgImxsdm0ueDg2LnNzZTIuY3Z0dHNkMnNpIiwgZnVuY3Rpb25UeXBlKGludDMyLCB2
ZWN0b3JUeXBlKGRvdWJsZVR5cGUsIDIpKSkKLQotI2RlZmluZSBGT1JfRUFDSF9GVU5DVElPTl9U
WVBFKG1hY3JvKSBcCi0gICAgbWFjcm8oQ19KSVRPcGVyYXRpb25fRUMsIGZ1bmN0aW9uVHlwZShp
bnRQdHIsIGludFB0ciwgaW50UHRyKSkgXAotICAgIG1hY3JvKENfSklUT3BlcmF0aW9uX0VDWiwg
ZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBpbnRQdHIsIGludDMyKSkgXAotICAgIG1hY3Jv
KENfSklUT3BlcmF0aW9uX0VDWkMsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRy
LCBpbnQzMiwgaW50UHRyKSkgXAotICAgIG1hY3JvKENfSklUT3BlcmF0aW9uX0VHQywgZnVuY3Rp
b25UeXBlKGludFB0ciwgaW50UHRyLCBpbnRQdHIsIGludFB0cikpIFwKLSAgICBtYWNybyhDX0pJ
VE9wZXJhdGlvbl9FSiwgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBpbnQ2NCkpIFwKLSAg
ICBtYWNybyhDX0pJVE9wZXJhdGlvbl9FSkosIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwg
aW50NjQsIGludDY0KSkgXAotICAgIG1hY3JvKENfSklUT3BlcmF0aW9uX0VKSkosIGZ1bmN0aW9u
VHlwZShpbnRQdHIsIGludFB0ciwgaW50NjQsIGludDY0LCBpbnQ2NCkpIFwKLSAgICBtYWNybyhD
X0pJVE9wZXJhdGlvbl9FSnNzSnNzLCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIsIGludFB0
ciwgaW50UHRyKSkgXAotICAgIG1hY3JvKENfSklUT3BlcmF0aW9uX0VKc3NKc3NKc3MsIGZ1bmN0
aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyLCBpbnRQdHIsIGludFB0cikpIFwKLSAgICBt
YWNybyhDX0pJVE9wZXJhdGlvbl9FU3QsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50
UHRyKSkgXAotICAgIG1hY3JvKENfSklUT3BlcmF0aW9uX0VTdEpzY1N5bXRhYkosIGZ1bmN0aW9u
VHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyLCBpbnRQdHIsIGludFB0ciwgaW50UHRyKSkgXAot
ICAgIG1hY3JvKENfSklUT3BlcmF0aW9uX0VTdFJaSnNmLCBmdW5jdGlvblR5cGUoaW50UHRyLCBp
bnRQdHIsIGludFB0ciwgaW50UHRyLCBpbnQzMiwgaW50UHRyKSkgXAotICAgIG1hY3JvKENfSklU
T3BlcmF0aW9uX0VTdFJaSnNmTCwgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBpbnRQdHIs
IGludFB0ciwgaW50MzIsIGludFB0ciwgaW50UHRyKSkgXAotICAgIG1hY3JvKENfSklUT3BlcmF0
aW9uX0VTdFosIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyLCBpbnQzMikpIFwK
LSAgICBtYWNybyhDX0pJVE9wZXJhdGlvbl9FU3RaWiwgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50
UHRyLCBpbnRQdHIsIGludDMyLCBpbnQzMikpIFwKLSAgICBtYWNybyhDX0pJVE9wZXJhdGlvbl9F
WiwgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBpbnQzMikpIFwKLSAgICBtYWNybyhEX0pJ
VE9wZXJhdGlvbl9ELCBmdW5jdGlvblR5cGUoZG91YmxlVHlwZSwgZG91YmxlVHlwZSkpIFwKLSAg
ICBtYWNybyhUX0pJVE9wZXJhdGlvbl9FSnNzLCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIs
IGludFB0cikpIFwKLSAgICBtYWNybyhKX0pJVE9wZXJhdGlvbl9FLCBmdW5jdGlvblR5cGUoaW50
NjQsIGludFB0cikpIFwKLSAgICBtYWNybyhKX0pJVE9wZXJhdGlvbl9FQSwgZnVuY3Rpb25UeXBl
KGludDY0LCBpbnRQdHIsIGludFB0cikpIFwKLSAgICBtYWNybyhKX0pJVE9wZXJhdGlvbl9FQVos
IGZ1bmN0aW9uVHlwZShpbnQ2NCwgaW50UHRyLCBpbnRQdHIsIGludDMyKSkgXAotICAgIG1hY3Jv
KEpfSklUT3BlcmF0aW9uX0VDSiwgZnVuY3Rpb25UeXBlKGludDY0LCBpbnRQdHIsIGludFB0ciwg
aW50NjQpKSBcCi0gICAgbWFjcm8oSl9KSVRPcGVyYXRpb25fRUNaLCBmdW5jdGlvblR5cGUoaW50
NjQsIGludFB0ciwgaW50UHRyLCBpbnQzMikpIFwKLSAgICBtYWNybyhKX0pJVE9wZXJhdGlvbl9F
REEsIGZ1bmN0aW9uVHlwZShpbnQ2NCwgaW50UHRyLCBkb3VibGVUeXBlLCBpbnRQdHIpKSBcCi0g
ICAgbWFjcm8oSl9KSVRPcGVyYXRpb25fRUosIGZ1bmN0aW9uVHlwZShpbnQ2NCwgaW50UHRyLCBp
bnQ2NCkpIFwKLSAgICBtYWNybyhKX0pJVE9wZXJhdGlvbl9FSkEsIGZ1bmN0aW9uVHlwZShpbnQ2
NCwgaW50UHRyLCBpbnQ2NCwgaW50UHRyKSkgXAotICAgIG1hY3JvKEpfSklUT3BlcmF0aW9uX0VK
QywgZnVuY3Rpb25UeXBlKGludDY0LCBpbnRQdHIsIGludDY0LCBpbnRQdHIpKSBcCi0gICAgbWFj
cm8oSl9KSVRPcGVyYXRpb25fRUpJLCBmdW5jdGlvblR5cGUoaW50NjQsIGludFB0ciwgaW50NjQs
IGludFB0cikpIFwKLSAgICBtYWNybyhKX0pJVE9wZXJhdGlvbl9FSkosIGZ1bmN0aW9uVHlwZShp
bnQ2NCwgaW50UHRyLCBpbnQ2NCwgaW50NjQpKSBcCi0gICAgbWFjcm8oSl9KSVRPcGVyYXRpb25f
RUpzY0MsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyLCBpbnRQdHIpKSBcCi0g
ICAgbWFjcm8oSl9KSVRPcGVyYXRpb25fRUpzY0NKLCBmdW5jdGlvblR5cGUoaW50NjQsIGludFB0
ciwgaW50NjQsIGludDY0LCBpbnQ2NCkpXAotICAgIG1hY3JvKEpfSklUT3BlcmF0aW9uX0VKc3Na
LCBmdW5jdGlvblR5cGUoaW50NjQsIGludFB0ciwgaW50UHRyLCBpbnQzMikpIFwKLSAgICBtYWNy
byhKX0pJVE9wZXJhdGlvbl9FU3NpSkksIGZ1bmN0aW9uVHlwZShpbnQ2NCwgaW50UHRyLCBpbnRQ
dHIsIGludDY0LCBpbnRQdHIpKSBcCi0gICAgbWFjcm8oSnNzX0pJVE9wZXJhdGlvbl9FWiwgZnVu
Y3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBpbnQzMikpIFwKLSAgICBtYWNybyhQX0pJVE9wZXJh
dGlvbl9FLCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIpKSBcCi0gICAgbWFjcm8oUF9KSVRP
cGVyYXRpb25fRUMsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyKSkgXAotICAg
IG1hY3JvKFBfSklUT3BlcmF0aW9uX0VPLCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIsIGlu
dFB0cikpIFwKLSAgICBtYWNybyhQX0pJVE9wZXJhdGlvbl9FUywgZnVuY3Rpb25UeXBlKGludFB0
ciwgaW50UHRyLCBpbnQ2NCkpIFwKLSAgICBtYWNybyhQX0pJVE9wZXJhdGlvbl9FT1MsIGZ1bmN0
aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyLCBpbnQ2NCkpIFwKLSAgICBtYWNybyhQX0pJ
VE9wZXJhdGlvbl9FU3QsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyKSkgXAot
ICAgIG1hY3JvKFBfSklUT3BlcmF0aW9uX0VTdFBTLCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQ
dHIsIGludFB0ciwgaW50UHRyLCBpbnRQdHIpKSBcCi0gICAgbWFjcm8oUF9KSVRPcGVyYXRpb25f
RVN0U1MsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyLCBpbnRQdHIsIGludFB0
cikpIFwKLSAgICBtYWNybyhQX0pJVE9wZXJhdGlvbl9FU3RaLCBmdW5jdGlvblR5cGUoaW50UHRy
LCBpbnRQdHIsIGludFB0ciwgaW50MzIpKSBcCi0gICAgbWFjcm8oUV9KSVRPcGVyYXRpb25fRCwg
ZnVuY3Rpb25UeXBlKGludDY0LCBkb3VibGVUeXBlKSkgXAotICAgIG1hY3JvKFFfSklUT3BlcmF0
aW9uX0osIGZ1bmN0aW9uVHlwZShpbnQ2NCwgaW50NjQpKSBcCi0gICAgbWFjcm8oU19KSVRPcGVy
YXRpb25fRUdDLCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIsIGludFB0ciwgaW50UHRyKSkg
XAotICAgIG1hY3JvKFNfSklUT3BlcmF0aW9uX0VKLCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQ
dHIsIGludDY0KSkgXAotICAgIG1hY3JvKFNfSklUT3BlcmF0aW9uX0VKSiwgZnVuY3Rpb25UeXBl
KGludFB0ciwgaW50UHRyLCBpbnQ2NCwgaW50NjQpKSBcCi0gICAgbWFjcm8oU19KSVRPcGVyYXRp
b25fSiwgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50NjQpKSBcCi0gICAgbWFjcm8oVl9KSVRPcGVy
YXRpb24sIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSkpIFwKLSAgICBtYWNybyhWX0pJVE9wZXJhdGlv
bl9FSkpKLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50NjQsIGludDY0LCBpbnQ2
NCkpIFwKLSAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FT1pELCBmdW5jdGlvblR5cGUodm9pZFR5
cGUsIGludFB0ciwgaW50UHRyLCBpbnQzMiwgZG91YmxlVHlwZSkpIFwKLSAgICBtYWNybyhWX0pJ
VE9wZXJhdGlvbl9FT1pKLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBp
bnQzMiwgaW50NjQpKSBcCi0gICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRUMsIGZ1bmN0aW9uVHlw
ZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIpKSBcCi0gICAgbWFjcm8oVl9KSVRPcGVyYXRpb25f
RUNiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyKSkgXAotICAgIG1hY3Jv
KFZfSklUT3BlcmF0aW9uX0VXcywgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0
cikpIFwKLSAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FWkpaWlosIGZ1bmN0aW9uVHlwZSh2b2lk
VHlwZSwgaW50UHRyLCBpbnQzMiwgaW50NjQsIGludDMyLCBpbnQzMiwgaW50MzIpKSBcCi0gICAg
bWFjcm8oVl9KSVRPcGVyYXRpb25fSiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQ2NCkpIFwK
LSAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9aLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludDMy
KSkgXAotICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0UsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwg
aW50UHRyKSkgXAotICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VDSVpDLCBmdW5jdGlvblR5cGUo
dm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnRQdHIsIGludDMyLCBpbnRQdHIpKSBcCi0gICAg
bWFjcm8oVl9KSVRPcGVyYXRpb25fRUNJWkpKLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0
ciwgaW50UHRyLCBpbnRQdHIsIGludDMyLCBpbnQ2NCwgaW50NjQpKSBcCi0gICAgbWFjcm8oVl9K
SVRPcGVyYXRpb25fRUNKWkMsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIs
IGludDY0LCBpbnQzMiwgaW50UHRyKSkgXAotICAgIG1hY3JvKFpfSklUT3BlcmF0aW9uX0QsIGZ1
bmN0aW9uVHlwZShpbnQzMiwgZG91YmxlVHlwZSkpIFwKLSAgICBtYWNybyhaX0pJVE9wZXJhdGlv
bl9FQywgZnVuY3Rpb25UeXBlKGludDMyLCBpbnRQdHIsIGludFB0cikpIFwKLSAgICBtYWNybyha
X0pJVE9wZXJhdGlvbl9FR0MsIGZ1bmN0aW9uVHlwZShpbnQzMiwgaW50UHRyLCBpbnRQdHIsIGlu
dFB0cikpIFwKLSAgICBtYWNybyhaX0pJVE9wZXJhdGlvbl9FSk9KLCBmdW5jdGlvblR5cGUoaW50
MzIsIGludFB0ciwgaW50NjQsIGludFB0ciwgaW50NjQpKSBcCi0gICAgbWFjcm8oWl9KSVRPcGVy
YXRpb25fRUpaLCBmdW5jdGlvblR5cGUoaW50MzIsIGludFB0ciwgaW50NjQsIGludDMyKSkgXAot
ICAgIG1hY3JvKFpfSklUT3BlcmF0aW9uX0VTSnNzLCBmdW5jdGlvblR5cGUoaW50MzIsIGludFB0
ciwgaW50UHRyLCBpbnQ2NCkpIFwKLSAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FQ1JVaVVpLCBm
dW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnRQdHIsIGludDMyLCBpbnQz
MikpCi0gICAgCi1jbGFzcyBJbnRyaW5zaWNSZXBvc2l0b3J5IDogcHVibGljIENvbW1vblZhbHVl
cyB7Ci1wdWJsaWM6Ci0gICAgSW50cmluc2ljUmVwb3NpdG9yeShMQ29udGV4dCk7Ci0gICAgCi0j
ZGVmaW5lIElOVFJJTlNJQ19HRVRURVIob3VyTmFtZSwgbGx2bU5hbWUsIHR5cGUpIFwKLSAgICBM
VmFsdWUgb3VyTmFtZSMjSW50cmluc2ljKCkgeyAgICAgICAgICAgICAgICAgXAotICAgICAgICBp
ZiAoIW1fIyNvdXJOYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBy
ZXR1cm4gb3VyTmFtZSMjSW50cmluc2ljU2xvdygpOyAgICAgIFwKLSAgICAgICAgcmV0dXJuIG1f
IyNvdXJOYW1lOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0KLSAgICBGT1JfRUFDSF9G
VExfSU5UUklOU0lDKElOVFJJTlNJQ19HRVRURVIpCi0jdW5kZWYgSU5UUklOU0lDX0dFVFRFUgot
Ci0jZGVmaW5lIEZVTkNUSU9OX1RZUEVfR0VUVEVSKHR5cGVOYW1lLCB0eXBlKSBcCi0gICAgTFR5
cGUgdHlwZU5hbWUoKSAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICghbV8jI3R5cGVOYW1l
KSAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICByZXR1cm4gdHlwZU5hbWUjI1Nsb3co
KTsgICAgICAgICBcCi0gICAgICAgIHJldHVybiBtXyMjdHlwZU5hbWU7ICAgICAgICAgICAgICAg
ICBcCi0gICAgfQotICAgIEZPUl9FQUNIX0ZVTkNUSU9OX1RZUEUoRlVOQ1RJT05fVFlQRV9HRVRU
RVIpCi0jdW5kZWYgRlVOQ1RJT05fVFlQRV9HRVRURVIKLSAgICAKLSNkZWZpbmUgRlVOQ1RJT05f
VFlQRV9SRVNPTFZFUih0eXBlTmFtZSwgdHlwZSkgXAotICAgIExUeXBlIG9wZXJhdGlvblR5cGUo
SlNDOjp0eXBlTmFtZSkgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0dXJuIHR5cGVOYW1lKCk7ICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIH0KLSAgICBGT1JfRUFDSF9GVU5DVElPTl9UWVBFKEZVTkNUSU9OX1RZ
UEVfUkVTT0xWRVIpCi0jdW5kZWYgRlVOQ1RJT05fVFlQRV9SRVNPTFZFUgotICAgIAotcHJpdmF0
ZToKLSNkZWZpbmUgSU5UUklOU0lDX0dFVFRFUl9TTE9XX0RFQ0xBUkFUSU9OKG91ck5hbWUsIGxs
dm1OYW1lLCB0eXBlKSBcCi0gICAgTFZhbHVlIG91ck5hbWUjI0ludHJpbnNpY1Nsb3coKTsKLSAg
ICBGT1JfRUFDSF9GVExfSU5UUklOU0lDKElOVFJJTlNJQ19HRVRURVJfU0xPV19ERUNMQVJBVElP
TikKLSN1bmRlZiBJTlRSSU5TSUNfR0VUVEVSCi0KLSNkZWZpbmUgSU5UUklOU0lDX0ZJRUxEX0RF
Q0xBUkFUSU9OKG91ck5hbWUsIGxsdm1OYW1lLCB0eXBlKSBMVmFsdWUgbV8jI291ck5hbWU7Ci0g
ICAgRk9SX0VBQ0hfRlRMX0lOVFJJTlNJQyhJTlRSSU5TSUNfRklFTERfREVDTEFSQVRJT04pCi0j
dW5kZWYgSU5UUklOU0lDX0ZJRUxEX0RFQ0xBUkFUSU9OCi0KLSNkZWZpbmUgRlVOQ1RJT05fVFlQ
RV9HRVRURVJfU0xPV19ERUNMQVJBVElPTih0eXBlTmFtZSwgdHlwZSkgXAotICAgIExUeXBlIHR5
cGVOYW1lIyNTbG93KCk7Ci0gICAgRk9SX0VBQ0hfRlVOQ1RJT05fVFlQRShGVU5DVElPTl9UWVBF
X0dFVFRFUl9TTE9XX0RFQ0xBUkFUSU9OKQotI3VuZGVmIEZVTkNUSU9OX1RZUEVfR0VUVEVSX1NM
T1dfREVDTEFSQVRJT04KLQotI2RlZmluZSBGVU5DVElPTl9UWVBFX0ZJRUxEX0RFQ0xBUkFUSU9O
KHR5cGVOYW1lLCB0eXBlKSBcCi0gICAgTFR5cGUgbV8jI3R5cGVOYW1lOwotICAgIEZPUl9FQUNI
X0ZVTkNUSU9OX1RZUEUoRlVOQ1RJT05fVFlQRV9GSUVMRF9ERUNMQVJBVElPTikKLSN1bmRlZiBG
VU5DVElPTl9UWVBFX0ZJRUxEX0RFQ0xBUkFUSU9OCi19OwotCi19IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCi0KLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKLQotI2VuZGlmIC8vIEZUTEludHJpbnNpY1JlcG9zaXRvcnlfaAotCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDIwICs0NCwxMSBAQCBKSVRDb2RlOjp+SklUQ29kZSgpCiAgICAgaWYgKEZUTDo6c2hvdWxk
RHVtcERpc2Fzc2VtYmx5KCkpIHsKICAgICAgICAgZGF0YUxvZygiRGVzdHJveWluZyBGVEwgSklU
IGNvZGUgYXQgIik7CiAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKLSNpZiBGVExfVVNFU19C
MwogICAgICAgICBkYXRhTG9nKGNvbW1hLCBtX2IzQ29kZSk7CiAgICAgICAgIGRhdGFMb2coY29t
bWEsIG1fYXJpdHlDaGVja0VudHJ5cG9pbnQpOwotI2Vsc2UKLSAgICAgICAgZm9yIChhdXRvJiBo
YW5kbGUgOiBtX2hhbmRsZXMpCi0gICAgICAgICAgICBkYXRhTG9nKGNvbW1hLCBwb2ludGVyRHVt
cChoYW5kbGUuZ2V0KCkpKTsKLSAgICAgICAgZGF0YUxvZyhjb21tYSwgcG9pbnRlckR1bXAobV9h
cml0eUNoZWNrRW50cnlwb2ludC5leGVjdXRhYmxlTWVtb3J5KCkpKTsKLSAgICAgICAgZGF0YUxv
Zyhjb21tYSwgcG9pbnRlckR1bXAobV9leGl0VGh1bmtzLmV4ZWN1dGFibGVNZW1vcnkoKSkpOwot
ICAgICAgICBkYXRhTG9nKCJcbiIpOwotI2VuZGlmCiAgICAgfQogfQogCi0jaWYgRlRMX1VTRVNf
QjMKIHZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUIzQ29kZShDb2RlUmVmIGIzQ29kZSkKIHsKICAg
ICBtX2IzQ29kZSA9IGIzQ29kZTsKQEAgLTY3LDIyICs1OCw2IEBAIHZvaWQgSklUQ29kZTo6aW5p
dGlhbGl6ZUIzQnlwcm9kdWN0cyhzdGQKIHsKICAgICBtX2IzQnlwcm9kdWN0cyA9IFdURk1vdmUo
Ynlwcm9kdWN0cyk7CiB9Ci0jZWxzZSAvLyBGVExfVVNFU19CMwotdm9pZCBKSVRDb2RlOjppbml0
aWFsaXplRXhpdFRodW5rcyhDb2RlUmVmIGV4aXRUaHVua3MpCi17Ci0gICAgbV9leGl0VGh1bmtz
ID0gZXhpdFRodW5rczsKLX0KLQotdm9pZCBKSVRDb2RlOjphZGRIYW5kbGUoUGFzc1JlZlB0cjxF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBoYW5kbGUpCi17Ci0gICAgbV9oYW5kbGVzLmFwcGVuZCho
YW5kbGUpOwotfQotCi12b2lkIEpJVENvZGU6OmFkZERhdGFTZWN0aW9uKFBhc3NSZWZQdHI8RGF0
YVNlY3Rpb24+IGRhdGFTZWN0aW9uKQotewotICAgIG1fZGF0YVNlY3Rpb25zLmFwcGVuZChkYXRh
U2VjdGlvbik7Ci19Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKIAogdm9pZCBKSVRDb2RlOjppbml0
aWFsaXplQWRkcmVzc0ZvckNhbGwoQ29kZVB0ciBhZGRyZXNzKQogewpAQCAtMTQwLDEzICsxMTUs
NiBAQCBib29sIEpJVENvZGU6OmNvbnRhaW5zKHZvaWQqKQogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotI2lmICFGVExfVVNFU19CMwotSklUQ29kZTo6Q29kZVB0ciBKSVRDb2RlOjpleGl0VGh1bmtz
KCkKLXsKLSAgICByZXR1cm4gbV9leGl0VGh1bmtzLmNvZGUoKTsKLX0KLSNlbmRpZgotCiBKSVRD
b2RlKiBKSVRDb2RlOjpmdGwoKQogewogICAgIHJldHVybiB0aGlzOwpAQCAtMTY3LDcgKzEzNSw2
IEBAIHZvaWQgSklUQ29kZTo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFQKIAogUmVnaXN0ZXJT
ZXQgSklUQ29kZTo6bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2Fs
bFNpdGUoQ29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQogewotI2lmIEZU
TF9VU0VTX0IzCiAgICAgZm9yIChPU1JFeGl0JiBleGl0IDogb3NyRXhpdCkgewogICAgICAgICBp
ZiAoZXhpdC5tX2V4Y2VwdGlvbkhhbmRsZXJDYWxsU2l0ZUluZGV4LmJpdHMoKSA9PSBjYWxsU2l0
ZUluZGV4LmJpdHMoKSkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhpdC5pc0V4Y2Vw
dGlvbkhhbmRsZXIoKSk7CkBAIC0xNzUsMTQgKzE0Miw2IEBAIFJlZ2lzdGVyU2V0IEpJVENvZGU6
OmxpdmVSZWdpc3RlcnNUb1ByZXMKICAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6dXNlZFJl
Z2lzdGVycyhleGl0Lm1fdmFsdWVSZXBzKTsKICAgICAgICAgfQogICAgIH0KLSNlbHNlIC8vIEZU
TF9VU0VTX0IzCi0gICAgZm9yIChPU1JFeGl0JiBleGl0IDogb3NyRXhpdCkgewotICAgICAgICBp
ZiAoZXhpdC5tX2V4Y2VwdGlvbkhhbmRsZXJDYWxsU2l0ZUluZGV4LmJpdHMoKSA9PSBjYWxsU2l0
ZUluZGV4LmJpdHMoKSkgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhpdC5pc0V4Y2Vw
dGlvbkhhbmRsZXIoKSk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhY2ttYXBzLnJlY29yZHNbZXhp
dC5tX3N0YWNrbWFwUmVjb3JkSW5kZXhdLnVzZWRSZWdpc3RlclNldCgpOwotICAgICAgICB9Ci0g
ICAgfQotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgcmV0dXJuIFJlZ2lzdGVyU2V0KCk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCShyZXZpc2lvbiAx
OTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsMjcgKzMwLDExIEBACiAKICNpbmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVj
dHMuaCIKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCi0jaW5jbHVkZSAiRlRMRGF0YVNlY3Rp
b24uaCIKICNpbmNsdWRlICJGVExMYXp5U2xvd1BhdGguaCIKICNpbmNsdWRlICJGVExPU1JFeGl0
LmgiCi0jaW5jbHVkZSAiRlRMU3RhY2tNYXBzLmgiCi0jaW5jbHVkZSAiRlRMVW53aW5kSW5mby5o
IgogI2luY2x1ZGUgIkpJVENvZGUuaCIKLSNpbmNsdWRlICJMTFZNQVBJLmgiCiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWRBcnJheS5oPgogCi0jaWYgIUZUTF9VU0VTX0IzCi0jaWYgT1MoREFSV0lO
KQotI2RlZmluZSBTRUNUSU9OX05BTUVfUFJFRklYICJfXyIKLSNlbGlmIE9TKExJTlVYKQotI2Rl
ZmluZSBTRUNUSU9OX05BTUVfUFJFRklYICIuIgotI2Vsc2UKLSNlcnJvciAiVW5zdXBwb3J0ZWQg
cGxhdGZvcm0iCi0jZW5kaWYKLQotI2RlZmluZSBTRUNUSU9OX05BTUUoTkFNRSkgKFNFQ1RJT05f
TkFNRV9QUkVGSVggTkFNRSkKLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKLQogbmFtZXNwYWNlIEpT
QyB7CiAKIGNsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOwpAQCAtNjksMTQgKzUzLDggQEAgcHVibGlj
OgogICAgIHNpemVfdCBzaXplKCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBjb250YWlucyh2b2lkKikg
b3ZlcnJpZGU7CiAKLSNpZiBGVExfVVNFU19CMwogICAgIHZvaWQgaW5pdGlhbGl6ZUIzQ29kZShD
b2RlUmVmKTsKICAgICB2b2lkIGluaXRpYWxpemVCM0J5cHJvZHVjdHMoc3RkOjp1bmlxdWVfcHRy
PEIzOjpPcGFxdWVCeXByb2R1Y3RzPik7Ci0jZWxzZQotICAgIHZvaWQgaW5pdGlhbGl6ZUV4aXRU
aHVua3MoQ29kZVJlZik7Ci0gICAgdm9pZCBhZGRIYW5kbGUoUGFzc1JlZlB0cjxFeGVjdXRhYmxl
TWVtb3J5SGFuZGxlPik7Ci0gICAgdm9pZCBhZGREYXRhU2VjdGlvbihQYXNzUmVmUHRyPERhdGFT
ZWN0aW9uPik7Ci0jZW5kaWYKICAgICB2b2lkIGluaXRpYWxpemVBZGRyZXNzRm9yQ2FsbChDb2Rl
UHRyKTsKICAgICB2b2lkIGluaXRpYWxpemVBcml0eUNoZWNrRW50cnlwb2ludChDb2RlUmVmKTsK
ICAgICAKQEAgLTg2LDE0ICs2NCw3IEBAIHB1YmxpYzoKIAogICAgIE9wdGlvbmFsPENvZGVPcmln
aW4+IGZpbmRQQyhDb2RlQmxvY2sqLCB2b2lkKiBwYykgb3ZlcnJpZGU7CiAKLSNpZiBGVExfVVNF
U19CMwogICAgIENvZGVSZWYgYjNDb2RlKCkgY29uc3QgeyByZXR1cm4gbV9iM0NvZGU7IH0KLSNl
bHNlCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPj4mIGhh
bmRsZXMoKSBjb25zdCB7IHJldHVybiBtX2hhbmRsZXM7IH0KLSAgICBjb25zdCBWZWN0b3I8UmVm
UHRyPERhdGFTZWN0aW9uPj4mIGRhdGFTZWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YVNl
Y3Rpb25zOyB9Ci0gICAgCi0gICAgQ29kZVB0ciBleGl0VGh1bmtzKCk7Ci0jZW5kaWYKICAgICAK
ICAgICBKSVRDb2RlKiBmdGwoKSBvdmVycmlkZTsKICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0Nv
bW1vbigpIG92ZXJyaWRlOwpAQCAtMTAyLDI1ICs3MywxMyBAQCBwdWJsaWM6CiAgICAgREZHOjpD
b21tb25EYXRhIGNvbW1vbjsKICAgICBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdCwgOD4gb3NyRXhp
dDsKICAgICBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdERlc2NyaXB0b3IsIDg+IG9zckV4aXREZXNj
cmlwdG9yczsKLSNpZiAhRlRMX1VTRVNfQjMKLSAgICBTdGFja01hcHMgc3RhY2ttYXBzOwotI2Vu
ZGlmIC8vICFGVExfVVNFU19CMwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TGF6eVNsb3dQ
YXRoPj4gbGF6eVNsb3dQYXRoczsKLSAgICBpbnQzMl90IG9zckV4aXRGcm9tR2VuZXJpY1Vud2lu
ZFN0YWNrU3BpbGxTbG90OwogICAgIAogcHJpdmF0ZToKICAgICBDb2RlUHRyIG1fYWRkcmVzc0Zv
ckNhbGw7Ci0jaWYgRlRMX1VTRVNfQjMKICAgICBDb2RlUmVmIG1fYjNDb2RlOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxCMzo6T3BhcXVlQnlwcm9kdWN0cz4gbV9iM0J5cHJvZHVjdHM7Ci0jZWxzZQot
ICAgIFZlY3RvcjxSZWZQdHI8RGF0YVNlY3Rpb24+PiBtX2RhdGFTZWN0aW9uczsKLSAgICBWZWN0
b3I8UmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+PiBtX2hhbmRsZXM7Ci0jZW5kaWYKICAg
ICBDb2RlUmVmIG1fYXJpdHlDaGVja0VudHJ5cG9pbnQ7Ci0jaWYgIUZUTF9VU0VTX0IzCi0gICAg
Q29kZVJlZiBtX2V4aXRUaHVua3M7Ci0jZW5kaWYKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXpl
ci5jcHAJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTkgKzUxLDggQEAgc2l6ZV90
IEpJVEZpbmFsaXplcjo6Y29kZVNpemUoKQogewogICAgIHNpemVfdCByZXN1bHQgPSAwOwogCi0j
aWYgRlRMX1VTRVNfQjMKICAgICBpZiAoYjNDb2RlTGlua0J1ZmZlcikKICAgICAgICAgcmVzdWx0
ICs9IGIzQ29kZUxpbmtCdWZmZXItPnNpemUoKTsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAg
aWYgKGV4aXRUaHVua3NMaW5rQnVmZmVyKQotICAgICAgICByZXN1bHQgKz0gZXhpdFRodW5rc0xp
bmtCdWZmZXItPnNpemUoKTsKLSAgICBpZiAoc2lkZUNvZGVMaW5rQnVmZmVyKQotICAgICAgICBy
ZXN1bHQgKz0gc2lkZUNvZGVMaW5rQnVmZmVyLT5zaXplKCk7Ci0gICAgaWYgKGhhbmRsZUV4Y2Vw
dGlvbnNMaW5rQnVmZmVyKQotICAgICAgICByZXN1bHQgKz0gaGFuZGxlRXhjZXB0aW9uc0xpbmtC
dWZmZXItPnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBqaXRDb2RlLT5oYW5kbGVzKCku
c2l6ZSgpOyBpLS07KQotICAgICAgICByZXN1bHQgKz0gaml0Q29kZS0+aGFuZGxlcygpW2ldLT5z
aXplSW5CeXRlcygpOwotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgCiAgICAgaWYgKGVudHJ5
cG9pbnRMaW5rQnVmZmVyKQogICAgICAgICByZXN1bHQgKz0gZW50cnlwb2ludExpbmtCdWZmZXIt
PnNpemUoKTsKQEAgLTgxLDc1ICs3MCwxNyBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVG
dW5jdGlvbigpCiB7CiAgICAgYm9vbCBkdW1wRGlzYXNzZW1ibHkgPSBzaG91bGREdW1wRGlzYXNz
ZW1ibHkoKSB8fCBPcHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5KCk7CiAgICAgCi0jaWYgRlRMX1VT
RVNfQjMKICAgICBqaXRDb2RlLT5pbml0aWFsaXplQjNDb2RlKAogICAgICAgICBGSU5BTElaRV9D
T0RFX0lGKAogICAgICAgICAgICAgZHVtcERpc2Fzc2VtYmx5LCAqYjNDb2RlTGlua0J1ZmZlciwK
ICAgICAgICAgICAgICgiRlRMIEIzIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dp
dGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSkpKTsK
IAotI2Vsc2UgLy8gRlRMX1VTRVNfQjMKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBqaXRDb2RlLT5o
YW5kbGVzKCkuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpjYWNoZUZs
dXNoKAotICAgICAgICAgICAgaml0Q29kZS0+aGFuZGxlcygpW2ldLT5zdGFydCgpLCBqaXRDb2Rl
LT5oYW5kbGVzKClbaV0tPnNpemVJbkJ5dGVzKCkpOwotICAgIH0KLQotICAgIGlmIChleGl0VGh1
bmtzTGlua0J1ZmZlcikgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3NyRXhp
dC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5m
byA9IG9zckV4aXRbaV07Ci0gICAgICAgICAgICBleGl0VGh1bmtzTGlua0J1ZmZlci0+bGluaygK
LSAgICAgICAgICAgICAgICBpbmZvLm1fdGh1bmtKdW1wLAotICAgICAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsKAotICAgICAgICAgICAgICAgICAgICBtX3BsYW4udm0uZ2V0Q1RJU3R1Yihv
c3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgaml0Q29kZS0+aW5pdGlhbGl6ZUV4aXRUaHVua3MoCi0gICAgICAgICAg
ICBGSU5BTElaRV9DT0RFX0lGKAotICAgICAgICAgICAgICAgIGR1bXBEaXNhc3NlbWJseSwgKmV4
aXRUaHVua3NMaW5rQnVmZmVyLAotICAgICAgICAgICAgICAgICgiRlRMIGV4aXQgdGh1bmtzIGZv
ciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBK
SVRDb2RlOjpGVExKSVQpKS5kYXRhKCkpKSk7Ci0gICAgfSAvLyBlbHNlIHRoaXMgZnVuY3Rpb24g
aGFkIG5vIE9TUiBleGl0cywgc28gbm8gZXhpdCB0aHVua3MuCi0gICAgCi0gICAgaWYgKHNpZGVD
b2RlTGlua0J1ZmZlcikgewotICAgICAgICAvLyBTaWRlIGNvZGUgaXMgZm9yIHNwZWNpYWwgc2xv
dyBwYXRocyB0aGF0IHdlIGdlbmVyYXRlIG91cnNlbHZlcywgbGlrZSBmb3IgaW5saW5lCi0gICAg
ICAgIC8vIGNhY2hlcy4KLSAgICAgICAgCi0gICAgICAgIGZvciAoQ0NhbGxIZWxwZXJzOjpKdW1w
IGp1bXAgOiBsYXp5U2xvd1BhdGhHZW5lcmF0b3JKdW1wcykgewotICAgICAgICAgICAgc2lkZUNv
ZGVMaW5rQnVmZmVyLT5saW5rKAotICAgICAgICAgICAgICAgIGp1bXAsCi0gICAgICAgICAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwoCi0gICAgICAgICAgICAgICAgICAgIG1fcGxhbi52bS5nZXRD
VElTdHViKGxhenlTbG93UGF0aEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGppdENvZGUtPmFkZEhhbmRsZShGSU5BTElaRV9D
T0RFX0lGKAotICAgICAgICAgICAgZHVtcERpc2Fzc2VtYmx5LCAqc2lkZUNvZGVMaW5rQnVmZmVy
LAotICAgICAgICAgICAgKCJGVEwgc2lkZSBjb2RlIGZvciAlcyIsCi0gICAgICAgICAgICAgICAg
dG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6
OkZUTEpJVCkpLmRhdGEoKSkpCi0gICAgICAgICAgICAuZXhlY3V0YWJsZU1lbW9yeSgpKTsKLSAg
ICB9Ci0gICAgCi0gICAgaWYgKGhhbmRsZUV4Y2VwdGlvbnNMaW5rQnVmZmVyKSB7Ci0gICAgICAg
IGppdENvZGUtPmFkZEhhbmRsZShGSU5BTElaRV9DT0RFX0lGKAotICAgICAgICAgICAgZHVtcERp
c2Fzc2VtYmx5LCAqaGFuZGxlRXhjZXB0aW9uc0xpbmtCdWZmZXIsCi0gICAgICAgICAgICAoIkZU
TCBleGNlcHRpb24gaGFuZGxlciBmb3IgJXMiLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhD
b2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpKS5k
YXRhKCkpKQotICAgICAgICAgICAgLmV4ZWN1dGFibGVNZW1vcnkoKSk7Ci0gICAgfQotCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG91dE9mTGluZUNvZGVJbmZvcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBqaXRDb2RlLT5hZGRIYW5kbGUoRklOQUxJWkVfQ09ERV9JRigKLSAgICAgICAg
ICAgIGR1bXBEaXNhc3NlbWJseSwgKm91dE9mTGluZUNvZGVJbmZvc1tpXS5tX2xpbmtCdWZmZXIs
Ci0gICAgICAgICAgICAoIkZUTCBvdXQgb2YgbGluZSBjb2RlIGZvciAlcyBpbmxpbmUgY2FjaGUi
LCBvdXRPZkxpbmVDb2RlSW5mb3NbaV0ubV9jb2RlRGVzY3JpcHRpb24pKS5leGVjdXRhYmxlTWVt
b3J5KCkpOwotICAgIH0KLSNlbmRpZiAvLyBGVExfVVNFU19CMwotCiAgICAgaml0Q29kZS0+aW5p
dGlhbGl6ZUFyaXR5Q2hlY2tFbnRyeXBvaW50KAogICAgICAgICBGSU5BTElaRV9DT0RFX0lGKAog
ICAgICAgICAgICAgZHVtcERpc2Fzc2VtYmx5LCAqZW50cnlwb2ludExpbmtCdWZmZXIsCiAgICAg
ICAgICAgICAoIkZUTCBlbnRyeXBvaW50IHRodW5rIGZvciAlcyB3aXRoIExMVk0gZ2VuZXJhdGVk
IGNvZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVC
bG9jaywgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpLCBmdW5jdGlvbikpKTsKICAgICAKICAgICBt
X3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKGppdENvZGUpOwotI2lmICFGVExfVVNFU19CMwot
ICAgIG1fcGxhbi52bS51cGRhdGVGVExMYXJnZXN0U3RhY2tTaXplKGppdENvZGUtPnN0YWNrbWFw
cy5zdGFja1NpemUoKSk7Ci0jZW5kaWYKIAogICAgIGlmIChtX3BsYW4uY29tcGlsYXRpb24pCiAg
ICAgICAgIG1fcGxhbi52bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0aW9uKG1f
cGxhbi5jb21waWxhdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJ
VEZpbmFsaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SklURmluYWxpemVyLmgJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSklURmluYWxpemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDcgQEAK
ICNpbmNsdWRlICJERkdGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJGVExHZW5lcmF0ZWRGdW5jdGlv
bi5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKLSNpbmNsdWRlICJGVExPU1JFeGl0Q29tcGls
YXRpb25JbmZvLmgiCiAjaW5jbHVkZSAiRlRMU2xvd1BhdGhDYWxsLmgiCi0jaW5jbHVkZSAiTExW
TUFQSS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ci5oIgogCkBAIC02MCwyMiArNTgsMTEgQEAgcHVibGljOgogICAgIGJvb2wgZmluYWxpemUoKSBv
dmVycmlkZTsKICAgICBib29sIGZpbmFsaXplRnVuY3Rpb24oKSBvdmVycmlkZTsKIAotI2lmIEZU
TF9VU0VTX0IzCiAgICAgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+IGIzQ29kZUxpbmtCdWZm
ZXI7Ci0jZW5kaWYKIAogICAgIC8vIEV2ZW50dWFsbHksIHdlIGNhbiBnZXQgcmlkIG9mIHRoaXMg
d2l0aCBCMy4KICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4gZW50cnlwb2ludExpbmtC
dWZmZXI7CiAgICAgCi0jaWYgIUZUTF9VU0VTX0IzCi0gICAgLy8gSW4gQjMsIHdlIGNhbiBkbyBh
bGwgb2YgdGhpcyBkaXJlY3RseSBpbiB0aGUgQjMgY29kZS4gVGhhdCBpbmNsdWRlcyBzbG93IHBh
dGhzIGFuZCBleGNlcHRpb24gaGFuZGxlcnMuCi0gICAgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZm
ZXI+IGV4aXRUaHVua3NMaW5rQnVmZmVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVy
PiBzaWRlQ29kZUxpbmtCdWZmZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+IGhh
bmRsZUV4Y2VwdGlvbnNMaW5rQnVmZmVyOwotICAgIFZlY3RvcjxPdXRPZkxpbmVDb2RlSW5mbz4g
b3V0T2ZMaW5lQ29kZUluZm9zOwotICAgIFZlY3RvcjxPU1JFeGl0Q29tcGlsYXRpb25JbmZvPiBv
c3JFeGl0OwotI2VuZGlmCi0KICAgICBWZWN0b3I8Q0NhbGxIZWxwZXJzOjpKdW1wPiBsYXp5U2xv
d1BhdGhHZW5lcmF0b3JKdW1wczsKICAgICBHZW5lcmF0ZWRGdW5jdGlvbiBmdW5jdGlvbjsKICAg
ICBSZWZQdHI8SklUQ29kZT4gaml0Q29kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSlNDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpTQ2FsbC5jcHAJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSlNDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkZUTEpTQ2FsbC5oIgotCi0jaWYgRU5BQkxFKEZUTF9KSVQp
ICYmICFGVExfVVNFU19CMwotCi0jaW5jbHVkZSAiREZHTm9kZS5oIgotI2luY2x1ZGUgIkZUTFN0
YXRlLmgiCi0jaW5jbHVkZSAiTGlua0J1ZmZlci5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBERkc7Ci0KLUpTQ2FsbDo6SlNDYWxsKCkKLSAg
ICA6IG1fc3RhY2ttYXBJRChVSU5UX01BWCkKLSAgICAsIG1faW5zdHJ1Y3Rpb25PZmZzZXQoVUlO
VF9NQVgpCi17Ci19Ci0KLUpTQ2FsbDo6SlNDYWxsKHVuc2lnbmVkIHN0YWNrbWFwSUQsIE5vZGUq
IG5vZGUsIENvZGVPcmlnaW4gY2FsbFNpdGVEZXNjcmlwdGlvbk9yaWdpbikKLSAgICA6IEpTQ2Fs
bEJhc2Uobm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3QgPyBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA6
IENhbGxMaW5rSW5mbzo6Q2FsbCwgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBjYWxsU2l0ZURlc2Ny
aXB0aW9uT3JpZ2luKQotICAgICwgbV9zdGFja21hcElEKHN0YWNrbWFwSUQpCi0gICAgLCBtX2lu
c3RydWN0aW9uT2Zmc2V0KDApCi17Ci0gICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQ2FsbCB8fCBu
b2RlLT5vcCgpID09IENvbnN0cnVjdCB8fCBub2RlLT5vcCgpID09IFRhaWxDYWxsSW5saW5lZENh
bGxlcik7Ci19Ci0KLXZvaWQgSlNDYWxsOjplbWl0KENDYWxsSGVscGVycyYgaml0LCBTdGF0ZSYg
c3RhdGUsIGludDMyX3Qgb3NyRXhpdEZyb21HZW5lcmljVW53aW5kU3BpbGxTbG90cykKLXsKLSAg
ICBKU0NhbGxCYXNlOjplbWl0KGppdCwgc3RhdGUsIG9zckV4aXRGcm9tR2VuZXJpY1Vud2luZFNw
aWxsU2xvdHMpOwotCi0jaWYgRlRMX1VTRVNfQjMKLSAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKC0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RhdGUuaml0Q29kZS0+Y29t
bW9uLmZyYW1lUmVnaXN0ZXJDb3VudCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKSwgQ0NhbGxI
ZWxwZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7Ci0jZWxzZSAvLyBGVExfVVNFU19CMwotICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoLSBzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGF0ZS5qaXRDb2RlLT5z
dGFja21hcHMuc3RhY2tTaXplRm9yTG9jYWxzKCkpKSwgQ0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50
ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0jZW5kaWYg
Ly8gRlRMX1VTRVNfQjMKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAotCi0jZW5kaWYg
Ly8gRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwotCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSlNDYWxsLmgJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSlNDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5k
ZWYgRlRMSlNDYWxsX2gKLSNkZWZpbmUgRlRMSlNDYWxsX2gKLQotI2luY2x1ZGUgIkRGR0NvbW1v
bi5oIgotCi0jaWYgRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwotCi0jaW5jbHVkZSAi
RlRMSlNDYWxsQmFzZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotbmFtZXNwYWNlIERGRyB7Ci1z
dHJ1Y3QgTm9kZTsKLX0KLQotbmFtZXNwYWNlIEZUTCB7Ci0KLWNsYXNzIEpTQ2FsbCA6IHB1Ymxp
YyBKU0NhbGxCYXNlIHsKLXB1YmxpYzoKLSAgICBKU0NhbGwoKTsKLSAgICBKU0NhbGwodW5zaWdu
ZWQgc3RhY2ttYXBJRCwgREZHOjpOb2RlKiwgQ29kZU9yaWdpbiBjYWxsU2l0ZURlc2NyaXB0aW9u
T3JpZ2luKTsKLQotICAgIHZvaWQgZW1pdChDQ2FsbEhlbHBlcnMmLCBTdGF0ZSYsIGludDMyX3Qg
b3NyRXhpdEZyb21HZW5lcmljVW53aW5kU3BpbGxTbG90cyk7Ci0gICAgCi0gICAgdW5zaWduZWQg
c3RhY2ttYXBJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBJRDsgfQotICAgIAotICAgIGJv
b2wgb3BlcmF0b3I8KGNvbnN0IEpTQ2FsbCYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9pbnN0cnVjdGlvbk9mZnNldCA8IG90aGVyLm1faW5zdHJ1Y3Rpb25PZmZzZXQ7Ci0g
ICAgfQotICAgIAotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX3N0YWNrbWFwSUQ7Ci0KLXB1Ymxp
YzoKLSAgICB1aW50MzJfdCBtX2luc3RydWN0aW9uT2Zmc2V0OwotfTsKLQotfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19C
MwotCi0jZW5kaWYgLy8gRlRMSlNDYWxsX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKU0NhbGxCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEw
NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGVExKU0NhbGxCYXNlLmgiCi0KLSNpZiBF
TkFCTEUoRlRMX0pJVCkgJiYgIUZUTF9VU0VTX0IzCi0KLSNpbmNsdWRlICJERkdOb2RlLmgiCi0j
aW5jbHVkZSAiRlRMU3RhdGUuaCIKLSNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCi0KLW5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKLQotdXNpbmcgbmFtZXNwYWNlIERGRzsKLQotSlNDYWxs
QmFzZTo6SlNDYWxsQmFzZSgpCi0gICAgOiBtX3R5cGUoQ2FsbExpbmtJbmZvOjpOb25lKQotICAg
ICwgbV9jYWxsTGlua0luZm8obnVsbHB0cikKLSAgICAsIG1fY29ycmVzcG9uZGluZ0dlbmVyaWNV
bndpbmRPU1JFeGl0KG51bGxwdHIpCi17Ci19Ci0KLUpTQ2FsbEJhc2U6OkpTQ2FsbEJhc2UoQ2Fs
bExpbmtJbmZvOjpDYWxsVHlwZSB0eXBlLCBDb2RlT3JpZ2luIHNlbWFudGljLCBDb2RlT3JpZ2lu
IGNhbGxTaXRlRGVzY3JpcHRpb24pCi0gICAgOiBtX3R5cGUodHlwZSkKLSAgICAsIG1fc2VtYW50
aWNlT3JpZ2luKHNlbWFudGljKQotICAgICwgbV9jYWxsU2l0ZURlc2NyaXB0aW9uT3JpZ2luKGNh
bGxTaXRlRGVzY3JpcHRpb24pCi0gICAgLCBtX2NhbGxMaW5rSW5mbyhudWxscHRyKQotewotfQot
Ci12b2lkIEpTQ2FsbEJhc2U6OmVtaXQoQ0NhbGxIZWxwZXJzJiBqaXQsIFN0YXRlJiAvKnN0YXRl
Ki8sIGludDMyX3Qgb3NyRXhpdEZyb21HZW5lcmljVW53aW5kU3RhY2tTcGlsbFNsb3QpCi17Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoISFtX2NhbGxTaXRlSW5kZXgpOwotCi0gICAgaWYgKG1fY29ycmVz
cG9uZGluZ0dlbmVyaWNVbndpbmRPU1JFeGl0KQotICAgICAgICBtX2NvcnJlc3BvbmRpbmdHZW5l
cmljVW53aW5kT1NSRXhpdC0+c3BpbGxSZWdpc3RlcnNUb1NwaWxsU2xvdChqaXQsIG9zckV4aXRG
cm9tR2VuZXJpY1Vud2luZFN0YWNrU3BpbGxTbG90KTsKLQotICAgIGppdC5zdG9yZTMyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKG1fY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBDQ2FsbEhlbHBl
cnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50
Q291bnQpKSk7Ci0KLSAgICBtX2NhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2Fs
bExpbmtJbmZvKCk7Ci0gICAgCi0gICAgaWYgKENhbGxMaW5rSW5mbzo6Y2FsbE1vZGVGb3IobV90
eXBlKSA9PSBDYWxsTW9kZTo6VGFpbCkKLSAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKLQotICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJX
aXRoUGF0Y2goCi0gICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1Qw
LCBtX3RhcmdldFRvQ2hlY2ssCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigw
KSk7Ci0KLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKLQotICAgIGlmIChDYWxsTGlua0lu
Zm86OmNhbGxNb2RlRm9yKG1fdHlwZSkgPT0gQ2FsbE1vZGU6OlRhaWwpIHsKLSAgICAgICAgaml0
LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKLSAgICAgICAgbV9mYXN0Q2FsbCA9IGppdC5uZWFy
VGFpbENhbGwoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX2Zhc3RDYWxsID0gaml0Lm5lYXJD
YWxsKCk7Ci0gICAgICAgIGRvbmUgPSBqaXQuanVtcCgpOwotICAgIH0KLQotICAgIHNsb3dQYXRo
LmxpbmsoJmppdCk7Ci0KLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
bV9jYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgbV9zbG93Q2FsbCA9IGppdC5u
ZWFyQ2FsbCgpOwotCi0gICAgaWYgKENhbGxMaW5rSW5mbzo6Y2FsbE1vZGVGb3IobV90eXBlKSA9
PSBDYWxsTW9kZTo6VGFpbCkKLSAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1
cm5Gcm9tVGFpbENhbGwpOwotICAgIGVsc2UKLSAgICAgICAgZG9uZS5saW5rKCZqaXQpOwotCi0g
ICAgbV9jYWxsTGlua0luZm8tPnNldFVwQ2FsbChtX3R5cGUsIG1fc2VtYW50aWNlT3JpZ2luLCBH
UFJJbmZvOjpyZWdUMCk7Ci19Ci0KLXZvaWQgSlNDYWxsQmFzZTo6bGluayhWTSYgdm0sIExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpCi17Ci0gICAgbGlua0J1ZmZlci5saW5rKAotICAgICAgICBtX3Ns
b3dDYWxsLCBGdW5jdGlvblB0cih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3Ip
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0KLSAgICBtX2NhbGxMaW5rSW5mby0+c2V0
Q2FsbExvY2F0aW9ucyhsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX3Nsb3dDYWxsKSwK
LSAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fdGFyZ2V0VG9DaGVjayksIGxpbmtCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fZmFzdENhbGwpKTsKLX0KLQotfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwot
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuaAkocmV2aXNp
b24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEZUTEpTQ2FsbEJhc2VfaAotI2RlZmluZSBG
VExKU0NhbGxCYXNlX2gKLQotI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgotCi0jaWYgRU5BQkxFKEZU
TF9KSVQpICYmICFGVExfVVNFU19CMwotCi0jaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCi0jaW5j
bHVkZSAiQ2FsbExpbmtJbmZvLmgiCi0jaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgotI2luY2x1ZGUg
IkZUTE9TUkV4aXQuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIExpbmtCdWZmZXI7Ci0K
LW5hbWVzcGFjZSBERkcgewotc3RydWN0IE5vZGU7Ci19Ci0KLW5hbWVzcGFjZSBGVEwgewotCi1j
bGFzcyBTdGF0ZTsKLQotY2xhc3MgSlNDYWxsQmFzZSB7Ci1wdWJsaWM6Ci0gICAgSlNDYWxsQmFz
ZSgpOwotICAgIEpTQ2FsbEJhc2UoQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSwgQ29kZU9yaWdpbiBz
ZW1hbnRpYywgQ29kZU9yaWdpbiBjYWxsU2l0ZURlc2NyaXB0aW9uKTsKLSAgICAKLSAgICB2b2lk
IGVtaXQoQ0NhbGxIZWxwZXJzJiwgU3RhdGUmLCBpbnQzMl90IG9zckV4aXRGcm9tR2VuZXJpY1Vu
d2luZFNwaWxsU2xvdHMpOwotICAgIHZvaWQgbGluayhWTSYsIExpbmtCdWZmZXImKTsKLQotICAg
IHZvaWQgc2V0Q2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgpIHsgbV9j
YWxsU2l0ZUluZGV4ID0gY2FsbFNpdGVJbmRleDsgfQotICAgIENvZGVPcmlnaW4gY2FsbFNpdGVE
ZXNjcmlwdGlvbk9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbFNpdGVEZXNjcmlwdGlvbk9y
aWdpbjsgfQotCi0gICAgdm9pZCBzZXRDb3JyZXNwb25kaW5nR2VuZXJpY1Vud2luZE9TUkV4aXQo
T1NSRXhpdCogZXhpdCkgeyBtX2NvcnJlc3BvbmRpbmdHZW5lcmljVW53aW5kT1NSRXhpdCA9IGV4
aXQ7IH0KLSAgICAKLXByb3RlY3RlZDoKLSAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIG1fdHlw
ZTsKLSAgICBDb2RlT3JpZ2luIG1fc2VtYW50aWNlT3JpZ2luOwotICAgIENvZGVPcmlnaW4gbV9j
YWxsU2l0ZURlc2NyaXB0aW9uT3JpZ2luOyAvLyBUaGVzZSB0d28gY29kZSBvcmlnaW5zIG1heSBi
ZSBkaWZmZXJlbnQgd2l0aCB0YWlsIGNhbGxzIHVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcyBvZiBp
bmxpbmluZy4gU2VlIHJlbGV2YW50IGNvbW1lbnQgaW4gTG93ZXJERkdUb0xMVk0uCi0gICAgQ2Fs
bFNpdGVJbmRleCBtX2NhbGxTaXRlSW5kZXg7Ci0gICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQ
dHIgbV90YXJnZXRUb0NoZWNrOwotICAgIENDYWxsSGVscGVyczo6Q2FsbCBtX2Zhc3RDYWxsOwot
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBtX3Nsb3dDYWxsOwotICAgIENhbGxMaW5rSW5mbyogbV9j
YWxsTGlua0luZm87Ci1wdWJsaWM6Ci0gICAgT1NSRXhpdCogbV9jb3JyZXNwb25kaW5nR2VuZXJp
Y1Vud2luZE9TUkV4aXQ7Ci19OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoRlRMX0pJVCkgJiYgIUZUTF9VU0VTX0IzCi0KLSNlbmRpZiAvLyBGVExKU0Nh
bGxCYXNlX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJh
cmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2Fs
bFZhcmFyZ3MuY3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIyOSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJGVExKU0NhbGxWYXJhcmdzLmgiCi0KLSNpZiBFTkFCTEUo
RlRMX0pJVCkgJiYgIUZUTF9VU0VTX0IzCi0KLSNpbmNsdWRlICJERkdOb2RlLmgiCi0jaW5jbHVk
ZSAiREZHT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkZUTFN0YXRlLmgiCi0jaW5jbHVkZSAiSlND
SW5saW5lcy5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgotCi1uYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBERkc7Ci0KLUpT
Q2FsbFZhcmFyZ3M6OkpTQ2FsbFZhcmFyZ3MoKQotICAgIDogbV9zdGFja21hcElEKFVJTlRfTUFY
KQotICAgICwgbV9ub2RlKG51bGxwdHIpCi0gICAgLCBtX2luc3RydWN0aW9uT2Zmc2V0KFVJTlRf
TUFYKQotewotfQotCi1KU0NhbGxWYXJhcmdzOjpKU0NhbGxWYXJhcmdzKHVuc2lnbmVkIHN0YWNr
bWFwSUQsIE5vZGUqIG5vZGUsIENvZGVPcmlnaW4gY2FsbFNpdGVEZXNjcmlwdGlvbk9yaWdpbikK
LSAgICA6IG1fc3RhY2ttYXBJRChzdGFja21hcElEKQotICAgICwgbV9ub2RlKG5vZGUpCi0gICAg
LCBtX2NhbGxCYXNlKAotICAgICAgICAobm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3RWYXJhcmdzIHx8
IG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3MpCi0gICAgICAgID8gQ2FsbExp
bmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzIDogKG5vZGUtPm9wKCkgPT0gVGFpbENhbGxWYXJhcmdz
IHx8IG5vZGUtPm9wKCkgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncykKLSAgICAgICAgPyBDYWxs
TGlua0luZm86OlRhaWxDYWxsVmFyYXJncyA6IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3MsCi0g
ICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2FsbFNpdGVEZXNjcmlwdGlvbk9yaWdpbikK
LSAgICAsIG1faW5zdHJ1Y3Rpb25PZmZzZXQoMCkKLXsKLSAgICBBU1NFUlQoCi0gICAgICAgIG5v
ZGUtPm9wKCkgPT0gQ2FsbFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZhcmFy
Z3MKLSAgICAgICAgfHwgbm9kZS0+b3AoKSA9PSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVy
IHx8IG5vZGUtPm9wKCkgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXIKLSAg
ICAgICAgfHwgbm9kZS0+b3AoKSA9PSBUYWlsQ2FsbFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBU
YWlsQ2FsbEZvcndhcmRWYXJhcmdzCi0gICAgICAgIHx8IG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0
VmFyYXJncyB8fCBub2RlLT5vcCgpID09IENvbnN0cnVjdEZvcndhcmRWYXJhcmdzKTsKLX0KLQot
dW5zaWduZWQgSlNDYWxsVmFyYXJnczo6bnVtU3BpbGxTbG90c05lZWRlZCgpCi17Ci0gICAgcmV0
dXJuIDQ7Ci19Ci0KLXZvaWQgSlNDYWxsVmFyYXJnczo6ZW1pdChDQ2FsbEhlbHBlcnMmIGppdCwg
U3RhdGUmIHN0YXRlLCBpbnQzMl90IHNwaWxsU2xvdHNPZmZzZXQsIGludDMyX3Qgb3NyRXhpdEZy
b21HZW5lcmljVW53aW5kU3BpbGxTbG90cykKLXsKLSAgICAvLyBXZSBhcmUgcGFzc2VkIHRocmVl
IHBpZWNlcyBvZiBpbmZvcm1hdGlvbjoKLSAgICAvLyAtIFRoZSBjYWxsZWUuCi0gICAgLy8gLSBU
aGUgYXJndW1lbnRzIG9iamVjdCwgaWYgaXQncyBub3QgYSBmb3J3YXJkaW5nIGNhbGwuCi0gICAg
Ly8gLSBUaGUgInRoaXMiIHZhbHVlLCBpZiBpdCdzIGEgY29uc3RydWN0b3IgY2FsbC4KLQotICAg
IENhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7Ci0gICAg
Ci0gICAgR1BSUmVnIGNhbGxlZUdQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMDsKLSAgICAKLSAg
ICBHUFJSZWcgYXJndW1lbnRzR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICBHUFJSZWcgdGhpc0dQ
UiA9IEludmFsaWRHUFJSZWc7Ci0gICAgCi0gICAgYm9vbCBmb3J3YXJkaW5nID0gZmFsc2U7Ci0g
ICAgCi0gICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsKLSAgICBjYXNlIENhbGxWYXJhcmdzOgot
ICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgotICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5l
ZENhbGxlcjoKLSAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6Ci0gICAgICAgIGFyZ3VtZW50c0dQ
UiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKLSAgICAgICAgdGhpc0dQUiA9IEdQUkluZm86OmFy
Z3VtZW50R1BSMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6
Ci0gICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgotICAgIGNhc2UgVGFpbENhbGxGb3J3
YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6Ci0gICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJn
czoKLSAgICAgICAgdGhpc0dQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKLSAgICAgICAgZm9y
d2FyZGluZyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAK
LSAgICBjb25zdCB1bnNpZ25lZCBjYWxsZWVTcGlsbFNsb3QgPSAwOwotICAgIGNvbnN0IHVuc2ln
bmVkIGFyZ3VtZW50c1NwaWxsU2xvdCA9IDE7Ci0gICAgY29uc3QgdW5zaWduZWQgdGhpc1NwaWxs
U2xvdCA9IDI7Ci0gICAgY29uc3QgdW5zaWduZWQgc3RhY2tQb2ludGVyU3BpbGxTbG90ID0gMzsK
LSAgICAKLSAgICAvLyBHZXQgc29tZSBzY3JhdGNoIHJlZ2lzdGVycy4KLSAgICBSZWdpc3RlclNl
dCB1c2VkUmVnaXN0ZXJzOwotICAgIHVzZWRSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OnN0
YWNrUmVnaXN0ZXJzKCkpOwotICAgIHVzZWRSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OnJl
c2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7Ci0gICAgdXNlZFJlZ2lzdGVycy5tZXJnZShSZWdp
c3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKLSAgICB1c2VkUmVnaXN0ZXJzLnNldChj
YWxsZWVHUFIpOwotICAgIGlmIChhcmd1bWVudHNHUFIgIT0gSW52YWxpZEdQUlJlZykKLSAgICAg
ICAgdXNlZFJlZ2lzdGVycy5zZXQoYXJndW1lbnRzR1BSKTsKLSAgICBBU1NFUlQodGhpc0dQUik7
Ci0gICAgdXNlZFJlZ2lzdGVycy5zZXQodGhpc0dQUik7Ci0gICAgU2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yIGFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUjEg
PSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIy
ID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BS
MyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLQotICAgIFJFTEVBU0VfQVNTRVJU
KCFhbGxvY2F0b3IubnVtYmVyT2ZSZXVzZWRSZWdpc3RlcnMoKSk7Ci0gICAgCi0gICAgYXV0byBj
b21wdXRlVXNlZFN0YWNrID0gWyZdIChHUFJSZWcgdGFyZ2V0R1BSLCB1bnNpZ25lZCBleHRyYSkg
ewotICAgICAgICBpZiAoaXNBUk02NCgpKSB7Ci0gICAgICAgICAgICAvLyBIYXZlIHRvIGRvIHRo
aXMgdGhlIHdlaXJkIHdheSBiZWNhdXNlICRzcCBvbiBBUk02NCBtZWFucyB6ZXJvIHdoZW4gdXNl
ZCBpbiBhIHN1YnRyYWN0aW9uLgotICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3RlciwgdGFyZ2V0R1BSKTsKLSAgICAgICAgICAgIGppdC5uZWdQdHIo
dGFyZ2V0R1BSKTsKLSAgICAgICAgICAgIGppdC5hZGRQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIHRhcmdldEdQUik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBqaXQubW92
ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdGFyZ2V0R1BSKTsKLSAgICAgICAgICAgIGpp
dC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgdGFyZ2V0R1BSKTsK
LSAgICAgICAgfQotICAgICAgICBpZiAoZXh0cmEpCi0gICAgICAgICAgICBqaXQuc3ViUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGV4dHJhKSwgdGFyZ2V0R1BSKTsKLSAgICAgICAgaml0
LnVyc2hpZnRQdHIoQ0NhbGxIZWxwZXJzOjpJbW0zMigzKSwgdGFyZ2V0R1BSKTsKLSAgICB9Owot
ICAgIAotICAgIGF1dG8gY2FsbFdpdGhFeGNlcHRpb25DaGVjayA9IFsmXSAodm9pZCogY2FsbGVl
KSB7Ci0gICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsZWUp
LCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7Ci0gICAgICAgIGppdC5jYWxs
KEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKLSAgICAgICAgbV9leGNlcHRp
b25zLmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKEFzc2VtYmx5SGVscGVyczo6Tm9ybWFs
RXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVscGVyczo6RmFySnVtcFdpZHRoKSk7Ci0gICAgfTsK
LSAgICAKLSAgICBpZiAoaXNBUk02NCgpKSB7Ci0gICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgaml0LnN0b3Jl
UHRyKHNjcmF0Y2hHUFIxLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNl
dCArIHN0YWNrUG9pbnRlclNwaWxsU2xvdCkpOwotICAgIH0gZWxzZQotICAgICAgICBqaXQuc3Rv
cmVQdHIoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjph
ZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBzdGFja1BvaW50ZXJTcGlsbFNsb3QpKTsKLQot
ICAgIHVuc2lnbmVkIGV4dHJhU3RhY2sgPSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKwotICAg
ICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCA1ICog
c2l6ZW9mKHZvaWQqKSk7Ci0KLSAgICBpZiAoZm9yd2FyZGluZykgewotICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlOwotICAgICAgICBjb21wdXRlVXNlZFN0YWNrKHNjcmF0
Y2hHUFIyLCAwKTsKLSAgICAgICAgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uoaml0LCBz
Y3JhdGNoR1BSMiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgbV9ub2Rl
LT5jaGlsZDIoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSwgZGF0YS0+Zmlyc3RW
YXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKLSAgICAgICAgCi0gICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKLSAgICAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKLSAg
ICAgICAgaml0LnN1YlB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihleHRyYVN0YWNrKSwg
Q0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5zZXR1cEFy
Z3VtZW50c0V4ZWNTdGF0ZSgpOwotICAgICAgICBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGJpdHdp
c2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93Rm9yVmFyYXJncykpOwot
ICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKERGR1ZhcmFyZ3NUaHJvd2luZ1BhdGhEaWROb3RU
aHJvdyk7Ci0gICAgICAgIAotICAgICAgICBkb25lLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC5t
b3ZlKGNhbGxlZUdQUiwgR1BSSW5mbzo6cmVnVDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8v
IEdvdHRhIHNwaWxsIHRoZSBjYWxsZWUsIGFyZ3VtZW50cywgYW5kIHRoaXMgYmVjYXVzZSB3ZSB3
aWxsIG5lZWQgdGhlbSBsYXRlciBhbmQgd2Ugd2lsbCBoYXZlIHNvbWUKLSAgICAgICAgLy8gY2Fs
bHMgdGhhdCBjbG9iYmVyIHRoZW0uCi0gICAgICAgIGppdC5zdG9yZTY0KGNhbGxlZUdQUiwgQ0Nh
bGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBjYWxsZWVTcGlsbFNsb3Qp
KTsKLSAgICAgICAgaml0LnN0b3JlNjQoYXJndW1lbnRzR1BSLCBDQ2FsbEhlbHBlcnM6OmFkZHJl
c3NGb3Ioc3BpbGxTbG90c09mZnNldCArIGFyZ3VtZW50c1NwaWxsU2xvdCkpOwotICAgICAgICBq
aXQuc3RvcmU2NCh0aGlzR1BSLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09m
ZnNldCArIHRoaXNTcGlsbFNsb3QpKTsKLSAgICAKLSAgICAgICAgY29tcHV0ZVVzZWRTdGFjayhz
Y3JhdGNoR1BSMSwgMCk7Ci0gICAgICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoZXh0cmFTdGFjayksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwot
ICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZ3VtZW50c0dQUiwgc2Ny
YXRjaEdQUjEsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGRhdGEtPmZpcnN0VmFyQXJnT2Zm
c2V0KSk7Ci0gICAgICAgIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2soYml0d2lzZV9jYXN0PHZvaWQq
PihvcGVyYXRpb25TaXplRnJhbWVGb3JWYXJhcmdzKSk7Ci0gICAgCi0gICAgICAgIGppdC5tb3Zl
KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIGNvbXB1dGVV
c2VkU3RhY2soc2NyYXRjaEdQUjIsIGV4dHJhU3RhY2spOwotICAgICAgICBqaXQubG9hZDY0KEND
YWxsSGVscGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0ICsgYXJndW1lbnRzU3BpbGxT
bG90KSwgYXJndW1lbnRzR1BSKTsKLSAgICAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZShqaXQsIHNj
cmF0Y2hHUFIxLCBmYWxzZSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgaml0
LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtZXh0cmFTdGFjayksIHNjcmF0Y2hH
UFIyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgaml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShzY3JhdGNoR1BSMiwgYXJndW1lbnRzR1BSLCBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihkYXRhLT5maXJzdFZhckFyZ09mZnNldCksIHNjcmF0Y2hH
UFIxKTsKLSAgICAgICAgY2FsbFdpdGhFeGNlcHRpb25DaGVjayhiaXR3aXNlX2Nhc3Q8dm9pZCo+
KG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lKSk7Ci0gICAgCi0gICAgICAgIGppdC5tb3ZlKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBzY3JhdGNoR1BSMik7Ci0KLSAgICAgICAgaml0LmxvYWQ2
NChDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIHRoaXNTcGlsbFNs
b3QpLCB0aGlzR1BSKTsKLSAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OmFkZHJlc3NG
b3Ioc3BpbGxTbG90c09mZnNldCArIGNhbGxlZVNwaWxsU2xvdCksIEdQUkluZm86OnJlZ1QwKTsK
LSAgICB9Ci0gICAgCi0gICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBzY3JhdGNoR1BSMiwgQ0NhbGxIZWxwZXJzOjpzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7Ci0KLSAgICBqaXQuc3RvcmU2NCh0aGlzR1BSLCBDQ2FsbEhlbHBl
cnM6OmNhbGxlZUFyZ3VtZW50U2xvdCgwKSk7Ci0gICAgCi0gICAgLy8gSGVuY2Vmb3J0aCB3ZSBt
YWtlIHRoZSBjYWxsLiBUaGUgYmFzZSBGVEwgY2FsbCBtYWNoaW5lcnkgZXhwZWN0cyB0aGUgY2Fs
bGVlIGluIHJlZ1QwIGFuZCBmb3IgdGhlCi0gICAgLy8gc3RhY2sgZnJhbWUgdG8gYWxyZWFkeSBi
ZSBzZXQgdXAsIHdoaWNoIGl0IGlzLgotICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBD
Q2FsbEhlbHBlcnM6OmNhbGxlZUZyYW1lU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKLQotICAgIG1f
Y2FsbEJhc2UuZW1pdChqaXQsIHN0YXRlLCBvc3JFeGl0RnJvbUdlbmVyaWNVbndpbmRTcGlsbFNs
b3RzKTsKLQotICAgIAotICAgIC8vIFVuZG8gdGhlIGRhbWFnZSB3ZSd2ZSBkb25lLgotICAgIGlm
IChpc0FSTTY0KCkpIHsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFJBdFJldHVybiA9IENDYWxs
SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0
ICsgc3RhY2tQb2ludGVyU3BpbGxTbG90KSwgc2NyYXRjaEdQUkF0UmV0dXJuKTsKLSAgICAgICAg
aml0Lm1vdmUoc2NyYXRjaEdQUkF0UmV0dXJuLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKLSAgICB9IGVsc2UKLSAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjph
ZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBzdGFja1BvaW50ZXJTcGlsbFNsb3QpLCBDQ2Fs
bEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLX0KLQotdm9pZCBKU0NhbGxWYXJhcmdz
OjpsaW5rKFZNJiB2bSwgTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgQ29kZUxvY2F0aW9uTGFiZWwg
ZXhjZXB0aW9uSGFuZGxlcikKLXsKLSAgICBtX2NhbGxCYXNlLmxpbmsodm0sIGxpbmtCdWZmZXIp
OwotICAgIGxpbmtCdWZmZXIubGluayhtX2V4Y2VwdGlvbnMsIGV4Y2VwdGlvbkhhbmRsZXIpOwot
fQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCi0KLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkgJiYgIUZUTF9VU0VTX0IzCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SlNDYWxsVmFyYXJncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSlNDYWxsVmFyYXJncy5oCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4MyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5k
ZWYgRlRMSlNDYWxsVmFyYXJnc19oCi0jZGVmaW5lIEZUTEpTQ2FsbFZhcmFyZ3NfaAotCi0jaW5j
bHVkZSAiREZHQ29tbW9uLmgiCi0KLSNpZiBFTkFCTEUoRlRMX0pJVCkgJiYgIUZUTF9VU0VTX0Iz
Ci0KLSNpbmNsdWRlICJGVExKU0NhbGxCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFz
cyBMaW5rQnVmZmVyOwotCi1uYW1lc3BhY2UgREZHIHsKLXN0cnVjdCBOb2RlOwotfQotCi1uYW1l
c3BhY2UgRlRMIHsKLQotY2xhc3MgSlNDYWxsVmFyYXJncyB7Ci1wdWJsaWM6Ci0gICAgSlNDYWxs
VmFyYXJncygpOwotICAgIEpTQ2FsbFZhcmFyZ3ModW5zaWduZWQgc3RhY2ttYXBJRCwgREZHOjpO
b2RlKiwgQ29kZU9yaWdpbiBjYWxsU2l0ZURlc2NyaXB0aW9uT3JpZ2luKTsKLSAgICAKLSAgICBE
Rkc6Ok5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KLSAgICAKLSAgICBzdGF0
aWMgdW5zaWduZWQgbnVtU3BpbGxTbG90c05lZWRlZCgpOwotICAgIAotICAgIHZvaWQgZW1pdChD
Q2FsbEhlbHBlcnMmLCBTdGF0ZSYsIGludDMyX3Qgc3BpbGxTbG90c09mZnNldCwgaW50MzJfdCBv
c3JFeGl0RnJvbUdlbmVyaWNVbndpbmRTcGlsbFNsb3RzKTsKLSAgICB2b2lkIGxpbmsoVk0mLCBM
aW5rQnVmZmVyJiwgQ29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uSGFuZGxlcik7Ci0gICAgCi0g
ICAgdW5zaWduZWQgc3RhY2ttYXBJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBJRDsgfQot
ICAgIAotICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEpTQ2FsbFZhcmFyZ3MmIG90aGVyKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW5zdHJ1Y3Rpb25PZmZzZXQgPCBvdGhlci5tX2lu
c3RydWN0aW9uT2Zmc2V0OwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldENhbGxTaXRlSW5kZXgo
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KSB7IG1fY2FsbEJhc2Uuc2V0Q2FsbFNpdGVJbmRl
eChjYWxsU2l0ZUluZGV4KTsgfQotICAgIENvZGVPcmlnaW4gY2FsbFNpdGVEZXNjcmlwdGlvbk9y
aWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEJhc2UuY2FsbFNpdGVEZXNjcmlwdGlvbk9yaWdp
bigpOyB9Ci0gICAgdm9pZCBzZXRDb3JyZXNwb25kaW5nR2VuZXJpY1Vud2luZE9TUkV4aXQoT1NS
RXhpdCogZXhpdCkgeyBtX2NhbGxCYXNlLnNldENvcnJlc3BvbmRpbmdHZW5lcmljVW53aW5kT1NS
RXhpdChleGl0KTsgfQotICAgIAotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX3N0YWNrbWFwSUQ7
Ci0gICAgREZHOjpOb2RlKiBtX25vZGU7Ci0gICAgSlNDYWxsQmFzZSBtX2NhbGxCYXNlOwotICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3QgbV9leGNlcHRpb25zOwotCi1wdWJsaWM6Ci0gICAgdWlu
dDMyX3QgbV9pbnN0cnVjdGlvbk9mZnNldDsKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKLQotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKSAmJiAhRlRMX1VTRVNfQjMKLQotI2VuZGlm
IC8vIEZUTEpTQ2FsbFZhcmFyZ3NfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpTVGFpbENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSlNUYWlsQ2FsbC5jcHAJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSlNUYWlsQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzI4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRlRMSlNUYWlsQ2FsbC5oIgotCi0jaWYg
RU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwotCi0jaW5jbHVkZSAiQ2FsbEZyYW1lU2h1
ZmZsZXIuaCIKLSNpbmNsdWRlICJERkdOb2RlLmgiCi0jaW5jbHVkZSAiRlRMSklUQ29kZS5oIgot
I2luY2x1ZGUgIkZUTExvY2F0aW9uLmgiCi0jaW5jbHVkZSAiRlRMU3RhY2tNYXBzLmgiCi0jaW5j
bHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCi0KLW5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKLQotdXNpbmcgbmFtZXNwYWNlIERGRzsKLQot
bmFtZXNwYWNlIHsKLQotRlRMOjpMb2NhdGlvbiBnZXRSZWdpc3RlcldpdGhBZGRlbmQoY29uc3Qg
RXhpdFZhbHVlJiB2YWx1ZSwgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCwgU3RhY2tNYXBzJiBz
dGFja21hcHMpCi17Ci0gICAgaWYgKHZhbHVlLmtpbmQoKSAhPSBFeGl0VmFsdWVBcmd1bWVudCkK
LSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGF1dG8gbG9jYXRpb24gPQotICAgICAgICBGVEw6
OkxvY2F0aW9uOjpmb3JTdGFja21hcHMoJnN0YWNrbWFwcywgcmVjb3JkLmxvY2F0aW9uc1t2YWx1
ZS5leGl0QXJndW1lbnQoKS5hcmd1bWVudCgpXSk7Ci0KLSAgICBpZiAobG9jYXRpb24ua2luZCgp
ICE9IExvY2F0aW9uOjpSZWdpc3RlciB8fCAhbG9jYXRpb24uYWRkZW5kKCkpCi0gICAgICAgIHJl
dHVybiB7IH07Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChsb2NhdGlvbi5pc0dQUigpKTsKLSAgICBy
ZXR1cm4gbG9jYXRpb247Ci19Ci0KLVZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnlGb3IoY29uc3QgRXhp
dFZhbHVlJiB2YWx1ZSwgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCwgU3RhY2tNYXBzJiBzdGFj
a21hcHMpCi17Ci0gICAgc3dpdGNoICh2YWx1ZS5raW5kKCkpIHsKLSAgICBjYXNlIEV4aXRWYWx1
ZUNvbnN0YW50OgotICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQodmFsdWUu
Y29uc3RhbnQoKSk7Ci0KLSAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50OiB7Ci0gICAgICAgIGF1
dG8gbG9jYXRpb24gPQotICAgICAgICAgICAgRlRMOjpMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKCZz
dGFja21hcHMsIHJlY29yZC5sb2NhdGlvbnNbdmFsdWUuZXhpdEFyZ3VtZW50KCkuYXJndW1lbnQo
KV0pOwotICAgICAgICBhdXRvIGZvcm1hdCA9IHZhbHVlLmV4aXRBcmd1bWVudCgpLmZvcm1hdCgp
OwotCi0gICAgICAgIHN3aXRjaCAobG9jYXRpb24ua2luZCgpKSB7Ci0gICAgICAgIGNhc2UgTG9j
YXRpb246OlJlZ2lzdGVyOgotICAgICAgICAgICAgLy8gV2UgaGFuZGxlIHRoZSBhZGRlbmQgb3V0
c2lkZQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluUmVnaXN0ZXIobG9jYXRp
b24ucmVnKCksIGZvcm1hdCk7Ci0KLSAgICAgICAgY2FzZSBMb2NhdGlvbjo6SW5kaXJlY3Q6Ci0g
ICAgICAgICAgICAvLyBPaCBMTFZNLCB5b3UgY3JhenkuLi4KLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGxvY2F0aW9uLnJlZygpID09IFJlZyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVy
UmVnaXN0ZXIpKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEobG9jYXRpb24ub2Zmc2V0
KCkgJSBzaXplb2Yodm9pZCopKSk7Ci0gICAgICAgICAgICAvLyBEYXRhRm9ybWF0SW50MzIgYW5k
IERhdGFGb3JtYXRCb29sZWFuIHNob3VsZCBiZSBhbHJlYWR5IGJlIGJveGVkLgotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZm9ybWF0ICE9IERhdGFGb3JtYXRJbnQzMiAmJiBmb3JtYXQgIT0g
RGF0YUZvcm1hdEJvb2xlYW4pOwotICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmRp
c3BsYWNlZEluSlNTdGFjayhWaXJ0dWFsUmVnaXN0ZXIgeyBzdGF0aWNfY2FzdDxpbnQ+KGxvY2F0
aW9uLm9mZnNldCgpIC8gc2l6ZW9mKHZvaWQqKSkgfSwgZm9ybWF0KTsKLQotICAgICAgICBjYXNl
IExvY2F0aW9uOjpDb25zdGFudDoKLSAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpj
b25zdGFudChKU1ZhbHVlOjpkZWNvZGUobG9jYXRpb24uY29uc3RhbnQoKSkpOwotCi0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6Ci0gICAgICAgIHJl
dHVybiBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2sodmFsdWUudmlydHVhbFJlZ2lz
dGVyKCksIERhdGFGb3JtYXRKUyk7Ci0KLSAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50
MzI6Ci0gICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2sodmFs
dWUudmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXRJbnQzMik7Ci0KLSAgICBjYXNlIEV4aXRW
YWx1ZUluSlNTdGFja0FzSW50NTI6Ci0gICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjpkaXNw
bGFjZWRJbkpTU3RhY2sodmFsdWUudmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXRJbnQ1Mik7
Ci0KLSAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlOgotICAgICAgICByZXR1cm4g
VmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKHZhbHVlLnZpcnR1YWxSZWdpc3Rlcigp
LCBEYXRhRm9ybWF0RG91YmxlKTsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi0vLyBUaGlzIGNvbXB1dGVzIGFuIGVzdGlt
YXRlZCBzaXplIChpbiBiaXRzKSBmb3IgdGhlIHNlcXVlbmNlIG9mCi0vLyBpbnN0cnVjdGlvbnMg
cmVxdWlyZWQgdG8gbG9hZCwgYm94LCBhbmQgc3RvcmUgYSB2YWx1ZSBvZiBhIGdpdmVuCi0vLyB0
eXBlLCBhc3N1bWluZyBubyBzcGlsbGluZyBpcyByZXF1aXJlZC4KLXVpbnQzMl90IHNpemVGb3Io
RGF0YUZvcm1hdCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIERh
dGFGb3JtYXRJbnQzMjoKLSAgICAgICAgLy8gQm94aW5nIGlzIHplcm8tZXh0ZW5kaW5nIGFuZCB0
YWdnaW5nCi0jaWYgQ1BVKFg4Nl82NCkKLSAgICAgICAgcmV0dXJuIDYgKyBzaXplRm9yKERhdGFG
b3JtYXRKUyk7Ci0jZWxpZiBDUFUoQVJNNjQpCi0gICAgICAgIHJldHVybiA4ICsgc2l6ZUZvcihE
YXRhRm9ybWF0SlMpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIHNpemVPZlplcm9FeHRlbmQzMiAr
IHNpemVPZk9ySW1tNjQgKyBzaXplRm9yKERhdGFGb3JtYXRKUyk7Ci0jZW5kaWYKLQotICAgIGNh
c2UgRGF0YUZvcm1hdEludDUyOgotICAgICAgICAvLyBCb3hpbmcgaXMgZmlyc3QgYSBjb252ZXJz
aW9uIHRvIFN0cmljdEludDUyLCB0aGVuCi0gICAgICAgIC8vIFN0cmljdEludDUyIGJveGluZwot
I2lmIENQVShYODZfNjQpCi0gICAgICAgIHJldHVybiA0ICsgc2l6ZUZvcihEYXRhRm9ybWF0U3Ry
aWN0SW50NTIpOwotI2VsaWYgQ1BVKEFSTTY0KQotICAgICAgICByZXR1cm4gNCArIHNpemVGb3Io
RGF0YUZvcm1hdFN0cmljdEludDUyKTsKLSNlbHNlCi0gICAgICAgIHJldHVybiBzaXplT2ZTaGlm
dEltbTMyICsgc2l6ZUZvcihEYXRhRm9ybWF0U3RyaWN0SW50NTIpOwotI2VuZGlmCi0KLSAgICBj
YXNlIERhdGFGb3JtYXRTdHJpY3RJbnQ1MjoKLSAgICAgICAgLy8gQm94aW5nIGlzIGZpcnN0IGEg
Y29udmVyc2lvbiB0byBkb3VibGUsIHRoZW4gZG91YmxlIGJveGluZwotI2lmIENQVShYODZfNjQp
Ci0gICAgICAgIHJldHVybiA4ICsgc2l6ZUZvcihEYXRhRm9ybWF0RG91YmxlKTsKLSNlbGlmIENQ
VShBUk02NCkKLSAgICAgICAgcmV0dXJuIDQgKyBzaXplRm9yKERhdGFGb3JtYXREb3VibGUpOwot
I2Vsc2UKLSAgICAgICAgcmV0dXJuIHNpemVPZkNvbnZlcnRJbnQ2NFRvRG91YmxlICsgc2l6ZUZv
cihEYXRhRm9ybWF0RG91YmxlKTsKLSNlbmRpZgotCi0gICAgY2FzZSBEYXRhRm9ybWF0RG91Ymxl
OgotICAgICAgICAvLyBCb3hpbmcgaXMgcHVyaWZ5aW5nLCBtb3ZpbmcgdG8gYSBHUFIsIGFuZCB0
YWdnaW5nCi0jaWYgQ1BVKFg4Nl82NCkKLSAgICAgICAgcmV0dXJuIDM4ICsgc2l6ZUZvcihEYXRh
Rm9ybWF0SlMpOwotI2VsaWYgQ1BVKEFSTTY0KQotICAgICAgICByZXR1cm4gMjggKyBzaXplRm9y
KERhdGFGb3JtYXRKUyk7Ci0jZWxzZQotICAgICAgICByZXR1cm4gc2l6ZU9mUHVyaWZ5TmFOICsg
c2l6ZU9mU3ViSW1tNjQgKyBzaXplT2ZNb3ZlRG91YmxlVG82NCArIHNpemVGb3IoRGF0YUZvcm1h
dEpTKTsKLSNlbmRpZgotCi0gICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoKLSAgICAgICAgLy8g
Qm94aW5nIGlzIGFkZGluZyBWYWx1ZUZhbHNlCi0jaWYgQ1BVKFg4Nl82NCkKLSAgICAgICAgcmV0
dXJuIDQgKyBzaXplRm9yKERhdGFGb3JtYXRKUyk7Ci0jZWxpZiBDUFUoQVJNNjQpCi0gICAgICAg
IHJldHVybiA0ICsgc2l6ZUZvcihEYXRhRm9ybWF0SlMpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJu
IHNpemVPZkFkZEltbTMyICsgc2l6ZUZvcihEYXRhRm9ybWF0SlMpOwotI2VuZGlmCi0KLSAgICBj
YXNlIERhdGFGb3JtYXRKUzoKLSAgICAgICAgLy8gV2Ugd2lsbCBsb2FkIChpbiBhIEdQUiBvciBG
UFIpIHRoZW4gc3RvcmUgdGhlIHZhbHVlCi0jaWYgQ1BVKFg4Nl82NCkKLSAgICAgICAgcmV0dXJu
IDg7Ci0jZWxpZiBDUFUoQVJNNjQpCi0gICAgICAgIHJldHVybiA4OwotI2Vsc2UKLSAgICAgICAg
cmV0dXJuIHNpemVPZkxvYWQgKyBzaXplT2ZTdG9yZTsKLSNlbmRpZgotCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLX0gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQotCi1KU1RhaWxDYWxsOjpKU1RhaWxDYWxsKHVuc2lnbmVkIHN0
YWNrbWFwSUQsIE5vZGUqIG5vZGUsIGNvbnN0IFZlY3RvcjxFeGl0VmFsdWU+JiBhcmd1bWVudHMp
Ci0gICAgOiBKU0NhbGxCYXNlKENhbGxMaW5rSW5mbzo6VGFpbENhbGwsIG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYywgbm9kZS0+b3JpZ2luLnNlbWFudGljKQotICAgICwgbV9zdGFja21hcElEKHN0YWNr
bWFwSUQpCi0gICAgLCBtX2FyZ3VtZW50cyhhcmd1bWVudHMpCi0gICAgLCBtX2luc3RydWN0aW9u
T2Zmc2V0KDApCi17Ci0gICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpOwotICAgIEFT
U0VSVChudW1Bcmd1bWVudHMoKSA9PSBub2RlLT5udW1DaGlsZHJlbigpIC0gMSk7Ci0KLSAgICAv
LyBFc3RpbWF0ZSB0aGUgc2l6ZSBvZiB0aGUgaW5saW5lIGNhY2hlLCBhc3N1bWluZyB0aGF0IGV2
ZXJ5Ci0gICAgLy8gdmFsdWUgZ29lcyBmcm9tIHRoZSBzdGFjayB0byB0aGUgc3RhY2sgKGluIHBy
YWN0aWNlLCB0aGlzIHdpbGwKLSAgICAvLyBzZWxkb20gYmUgdHJ1ZSwgZ2l2aW5nIHVzIHNvbWUg
YW1vdW50IG9mIGxlZXdheSkgYW5kIHRoYXQgbm8KLSAgICAvLyBzcGlsbGluZyB3aWxsIG9jY3Vy
IChpbiBwcmFjdGljZSwgdGhpcyB3aWxsIGFsbW9zdCBhbHdheXMgYmUKLSAgICAvLyB0cnVlKS4K
LQotICAgIC8vIFdlIGZpcnN0IGNvbXB1dGUgdGhlIG5ldyBmcmFtZSBiYXNlIGFuZCBsb2FkIHRo
ZSBmcC9scgotICAgIC8vIHJlZ2lzdGVycyBmaW5hbCB2YWx1ZXMuIE9uIGRlYnVnIGJ1aWxkcywg
d2UgYWxzbyBuZWVkIHRvCi0gICAgLy8gYWNjb3VudCBmb3IgdGhlIGZwLXNwIGRlbHRhIGNoZWNr
ICh0d2ljZTogZmFzdCBhbmQgc2xvdyBwYXRoKS4KLSNpZiBDUFUoWDg2XzY0KQotICAgIG1fZXN0
aW1hdGVkU2l6ZSA9IDU2OwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBtX2VzdGltYXRlZFNp
emUgKz0gMjY7Ci0jICBlbmRpZgotI2VsaWYgQ1BVKEFSTTY0KQotICAgIG1fZXN0aW1hdGVkU2l6
ZSA9IDQ0OwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBtX2VzdGltYXRlZFNpemUgKz0gMjQ7
Ci0jICBlbmRpZgotI2Vsc2UKLSAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKLSNlbmRp
ZgotCi0gICAgLy8gQXJndW1lbnRzIHdpbGwgcHJvYmFibHkgYmUgbG9hZGVkICYgc3RvcmVkIHR3
aWNlIChmYXN0ICYgc2xvdykKLSAgICBmb3IgKEV4aXRWYWx1ZSYgYXJnIDogbV9hcmd1bWVudHMp
Ci0gICAgICAgIG1fZXN0aW1hdGVkU2l6ZSArPSAyICogc2l6ZUZvcihhcmcuZGF0YUZvcm1hdCgp
KTsKLQotICAgIC8vIFdlIGFsc28gaGF2ZSB0aGUgc2xvdyBwYXRoIGNoZWNrLCB0aGUgdHdvIGNh
bGxzLCBhbmQgdGhlCi0gICAgLy8gQ2FsbExpbmtJbmZvIGxvYWQgZm9yIHRoZSBzbG93IHBhdGgK
LSNpZiBDUFUoWDg2XzY0KQotICAgIG1fZXN0aW1hdGVkU2l6ZSArPSA1NTsKLSNlbGlmIENQVShB
Uk02NCkKLSAgICBtX2VzdGltYXRlZFNpemUgKz0gNDQ7Ci0jZWxzZQotICAgIG1fZXN0aW1hdGVk
U2l6ZSArPSBzaXplT2ZDYWxsICsgc2l6ZU9mSnVtcCArIHNpemVPZkxvYWQgKyBzaXplT2ZTbG93
UGF0aENoZWNrOwotI2VuZGlmCi19Ci0KLXZvaWQgSlNUYWlsQ2FsbDo6ZW1pdChKSVRDb2RlJiBq
aXRDb2RlLCBDQ2FsbEhlbHBlcnMmIGppdCkKLXsKLSAgICBTdGFja01hcHM6OlJlY29yZCogcmVj
b3JkIHsgbnVsbHB0ciB9OwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IGppdENvZGUuc3Rh
Y2ttYXBzLnJlY29yZHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIHJlY29yZCA9ICZqaXRDb2Rl
LnN0YWNrbWFwcy5yZWNvcmRzW2ldOwotICAgICAgICBpZiAocmVjb3JkLT5wYXRjaHBvaW50SUQg
PT0gbV9zdGFja21hcElEKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgUkVMRUFT
RV9BU1NFUlQocmVjb3JkLT5wYXRjaHBvaW50SUQgPT0gbV9zdGFja21hcElEKTsKLQotICAgIG1f
Y2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oKTsKLQotICAg
IENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwotCi0gICAgLy8gVGhlIGNhbGxlZSB3
YXMgdGhlIGZpcnN0IHBhc3NlZCBhcmd1bWVudCwgYW5kIG11c3QgYmUgaW4gYSBHUFIgYmVjYXVz
ZQotICAgIC8vIHdlIHVzZWQgdGhlICJhbnlyZWdjYyIgY2FsbGluZyBjb252ZW50aW9uCi0gICAg
YXV0byBjYWxsZWVMb2NhdGlvbiA9Ci0gICAgICAgIEZUTDo6TG9jYXRpb246OmZvclN0YWNrbWFw
cyhudWxscHRyLCByZWNvcmQtPmxvY2F0aW9uc1swXSk7Ci0gICAgR1BSUmVnIGNhbGxlZUdQUiA9
IGNhbGxlZUxvY2F0aW9uLmRpcmVjdEdQUigpOwotICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZh
bHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUdQUiwgRGF0YUZvcm1hdEpTKTsKLQotICAgIC8vIFRo
ZSB0YWcgdHlwZSBudW1iZXIgd2FzIHRoZSBzZWNvbmQgYXJndW1lbnQsIGlmIHRoZXJlIHdhcyBv
bmUKLSAgICBhdXRvIHRhZ1R5cGVOdW1iZXJMb2NhdGlvbiA9Ci0gICAgICAgIEZUTDo6TG9jYXRp
b246OmZvclN0YWNrbWFwcygmaml0Q29kZS5zdGFja21hcHMsIHJlY29yZC0+bG9jYXRpb25zWzFd
KTsKLSAgICBpZiAodGFnVHlwZU51bWJlckxvY2F0aW9uLmlzR1BSKCkgJiYgIXRhZ1R5cGVOdW1i
ZXJMb2NhdGlvbi5hZGRlbmQoKSkKLSAgICAgICAgc2h1ZmZsZURhdGEudGFnVHlwZU51bWJlciA9
IHRhZ1R5cGVOdW1iZXJMb2NhdGlvbi5kaXJlY3RHUFIoKTsKLQotICAgIHNodWZmbGVEYXRhLmFy
Z3MuZ3JvdyhudW1Bcmd1bWVudHMoKSk7Ci0gICAgSGFzaE1hcDxSZWcsIFZlY3RvcjxzdGQ6OnBh
aXI8VmFsdWVSZWNvdmVyeSosIGludDMyX3Q+Pj4gd2l0aEFkZGVuZDsKLSAgICBzaXplX3QgbnVt
QWRkZW5kcyB7IDAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUFyZ3VtZW50cygp
OyArK2kpIHsKLSAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9IHJlY292ZXJ5Rm9yKG1fYXJn
dW1lbnRzW2ldLCAqcmVjb3JkLCBqaXRDb2RlLnN0YWNrbWFwcyk7Ci0gICAgICAgIGlmIChGVEw6
OkxvY2F0aW9uIGFkZGVuZCA9IGdldFJlZ2lzdGVyV2l0aEFkZGVuZChtX2FyZ3VtZW50c1tpXSwg
KnJlY29yZCwgaml0Q29kZS5zdGFja21hcHMpKSB7Ci0gICAgICAgICAgICB3aXRoQWRkZW5kLmFk
ZCgKLSAgICAgICAgICAgICAgICBhZGRlbmQucmVnKCksCi0gICAgICAgICAgICAgICAgVmVjdG9y
PHN0ZDo6cGFpcjxWYWx1ZVJlY292ZXJ5KiwgaW50MzJfdD4+KCkpLml0ZXJhdG9yLT52YWx1ZS5h
cHBlbmQoCi0gICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyKCZzaHVmZmxlRGF0YS5h
cmdzW2ldLCBhZGRlbmQuYWRkZW5kKCkpKTsKLSAgICAgICAgICAgIG51bUFkZGVuZHMrKzsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIG51bUFkZGVuZHMgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxl
T2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgbnVtQWRkZW5kcyk7Ci0KLSAgICBzaHVmZmxl
RGF0YS5udW1Mb2NhbHMgPSBzdGF0aWNfY2FzdDxpbnQ2NF90PihqaXRDb2RlLnN0YWNrbWFwcy5z
dGFja1NpemVGb3JMb2NhbHMoKSkgLyBzaXplb2Yodm9pZCopICsgbnVtQWRkZW5kczsKLQotICAg
IEFTU0VSVCghbnVtQWRkZW5kcyA9PSB3aXRoQWRkZW5kLmlzRW1wdHkoKSk7Ci0KLSAgICBpZiAo
IXdpdGhBZGRlbmQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihudW1BZGRlbmRzICogc2l6ZW9mKHZvaWQqKSksIE1hY3JvQXNzZW1i
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcGls
bEJhc2UgeyAxIC0gc3RhdGljX2Nhc3Q8aW50PihzaHVmZmxlRGF0YS5udW1Mb2NhbHMpIH07Ci0g
ICAgICAgIGZvciAoYXV0byBlbnRyeSA6IHdpdGhBZGRlbmQpIHsKLSAgICAgICAgICAgIGZvciAo
YXV0byBwYWlyIDogZW50cnkudmFsdWUpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobnVtQWRk
ZW5kcyA+IDApOwotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcGlsbFNsb3QgeyBz
cGlsbEJhc2UgKyAtLW51bUFkZGVuZHMgfTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZW50cnku
a2V5LmlzR1BSKCkpOwotICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihwYWlyLnNlY29uZCksIGVudHJ5LmtleS5ncHIoKSk7Ci0gICAgICAgICAg
ICAgICAgaml0LnN0b3JlUHRyKGVudHJ5LmtleS5ncHIoKSwgQ0NhbGxIZWxwZXJzOjphZGRyZXNz
Rm9yKHNwaWxsU2xvdCkpOwotICAgICAgICAgICAgICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMihwYWlyLnNlY29uZCksIGVudHJ5LmtleS5ncHIoKSk7Ci0gICAgICAg
ICAgICAgICAgKnBhaXIuZmlyc3QgPSBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2so
c3BpbGxTbG90LCBwYWlyLmZpcnN0LT5kYXRhRm9ybWF0KCkpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIEFTU0VSVChudW1BZGRlbmRzIDwgc3RhY2tBbGlnbm1lbnRSZWdpc3Rl
cnMoKSk7Ci0gICAgfQotCi0gICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUobnVtQXJndW1lbnRz
KCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtQXJndW1lbnRzKCk7ICsraSkKLSAg
ICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9IHJlY292ZXJ5Rm9yKG1fYXJndW1lbnRzW2ldLCAq
cmVjb3JkLCBqaXRDb2RlLnN0YWNrbWFwcyk7Ci0KLSAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxl
ZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKLQotICAgIENDYWxsSGVscGVyczo6SnVt
cCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgIENDYWxsSGVscGVy
czo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgbV90YXJnZXRUb0NoZWNrLAotICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoMCkpOwotCi0gICAgbV9jYWxsTGlua0luZm8tPnNldEZyYW1l
U2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwotICAgIENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1
ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotCi0gICAgbV9mYXN0Q2FsbCA9IGppdC5u
ZWFyVGFpbENhbGwoKTsKLQotICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7Ci0KLSAgICBDYWxsRnJh
bWVTaHVmZmxlciBzbG93UGF0aFNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpOwotICAgIHNsb3dQ
YXRoU2h1ZmZsZXIuc2V0Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MgeyBHUFJJbmZvOjpy
ZWdUMCB9KTsKLSAgICBzbG93UGF0aFNodWZmbGVyLnByZXBhcmVGb3JTbG93UGF0aCgpOwotCi0g
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fY2FsbExpbmtJbmZvKSwg
R1BSSW5mbzo6cmVnVDIpOwotCi0gICAgbV9zbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwotCi0g
ICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwotCi0gICAg
bV9jYWxsTGlua0luZm8tPnNldFVwQ2FsbChtX3R5cGUsIG1fc2VtYW50aWNlT3JpZ2luLCBjYWxs
ZWVHUFIpOwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCi0KLSNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkgJiYgIUZUTF9VU0VTX0IzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpTVGFpbENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpTVGFpbENhbGwuaAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExKU1RhaWxDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
Zm5kZWYgRlRMSlNUYWlsQ2FsbF9oCi0jZGVmaW5lIEZUTEpTVGFpbENhbGxfaAotCi0jaW5jbHVk
ZSAiREZHQ29tbW9uLmgiCi0KLSNpZiBFTkFCTEUoRlRMX0pJVCkgJiYgIUZUTF9VU0VTX0IzCi0K
LSNpbmNsdWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgotI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgot
I2luY2x1ZGUgIkZUTEV4aXRWYWx1ZS5oIgotI2luY2x1ZGUgIkZUTEpTQ2FsbEJhc2UuaCIKLSNp
bmNsdWRlICJGVExTdGFja21hcEFyZ3VtZW50TGlzdC5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQot
bmFtZXNwYWNlIERGRyB7Ci1zdHJ1Y3QgTm9kZTsKLX0KLQotbmFtZXNwYWNlIEZUTCB7Ci0KLWNs
YXNzIEpTVGFpbENhbGwgOiBwdWJsaWMgSlNDYWxsQmFzZSB7Ci1wdWJsaWM6Ci0gICAgSlNUYWls
Q2FsbCgKLSAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCwKLSAgICAgICAgREZHOjpOb2RlKiwg
Y29uc3QgVmVjdG9yPEV4aXRWYWx1ZT4mIGFyZ3VtZW50cyk7Ci0KLSAgICB2b2lkIGVtaXQoSklU
Q29kZSYsIENDYWxsSGVscGVycyYpOwotCi0gICAgdW5zaWduZWQgc3RhY2ttYXBJRCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhY2ttYXBJRDsgfQotCi0gICAgdW5zaWduZWQgZXN0aW1hdGVkU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZXN0aW1hdGVkU2l6ZTsgfQotCi0gICAgdW5zaWduZWQgbnVtQXJn
dW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgpOyB9Ci0KLSAgICBib29s
IG9wZXJhdG9yPChjb25zdCBKU1RhaWxDYWxsJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX2luc3RydWN0aW9uT2Zmc2V0IDwgb3RoZXIubV9pbnN0cnVjdGlvbk9mZnNldDsK
LSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIHVuc2lnbmVkIG1fc3RhY2ttYXBJRDsKLSAgICBW
ZWN0b3I8RXhpdFZhbHVlPiBtX2FyZ3VtZW50czsKLSAgICB1bnNpZ25lZCBtX2VzdGltYXRlZFNp
emU7Ci0KLXB1YmxpYzoKLSAgICB1aW50MzJfdCBtX2luc3RydWN0aW9uT2Zmc2V0OwotfTsKLQot
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYm
ICFGVExfVVNFU19CMwotCi0jZW5kaWYgLy8gRlRMSlNUYWlsQ2FsbF9oCi0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5jcHAJKHJldmlzaW9uIDE5
NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsMzEgKzM0LDE2IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7CiAKIExhenlTbG93UGF0aDo6TGF6eVNsb3dQYXRoKAotI2lmIEZUTF9VU0VTX0Iz
CiAgICAgQ29kZUxvY2F0aW9uSnVtcCBwYXRjaGFibGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbCBk
b25lLAotI2Vsc2UgLy8gRlRMX1VTRVNfQjMKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBwYXRjaHBv
aW50LAotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0
aW9uVGFyZ2V0LAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDYWxsU2l0
ZUluZGV4IGNhbGxTaXRlSW5kZXgsIFJlZlB0cjxHZW5lcmF0b3I+IGdlbmVyYXRvcgotI2lmICFG
VExfVVNFU19CMwotICAgICwgR1BSUmVnIG5ld1plcm9SZWcsIFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvciBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IKLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKICAg
ICApCi0jaWYgRlRMX1VTRVNfQjMKICAgICA6IG1fcGF0Y2hhYmxlSnVtcChwYXRjaGFibGVKdW1w
KQogICAgICwgbV9kb25lKGRvbmUpCi0jZWxzZSAvLyBGVExfVVNFU19CMwotICAgIDogbV9wYXRj
aHBvaW50KHBhdGNocG9pbnQpCi0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICAsIG1fZXhjZXB0
aW9uVGFyZ2V0KGV4Y2VwdGlvblRhcmdldCkKICAgICAsIG1fdXNlZFJlZ2lzdGVycyh1c2VkUmVn
aXN0ZXJzKQogICAgICwgbV9jYWxsU2l0ZUluZGV4KGNhbGxTaXRlSW5kZXgpCiAgICAgLCBtX2dl
bmVyYXRvcihnZW5lcmF0b3IpCi0jaWYgIUZUTF9VU0VTX0IzCi0gICAgLCBtX25ld1plcm9WYWx1
ZVJlZ2lzdGVyKG5ld1plcm9SZWcpCi0gICAgLCBtX3NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcihz
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IpCi0jZW5kaWYgLy8gIUZUTF9VU0VTX0IzCiB7CiB9CiAK
QEAgLTc4LDQ5ICs2MywxNSBAQCB2b2lkIExhenlTbG93UGF0aDo6Z2VuZXJhdGUoQ29kZUJsb2Nr
KiBjCiAgICAgcGFyYW1zLmV4Y2VwdGlvbkp1bXBzID0gbV9leGNlcHRpb25UYXJnZXQgPyAmZXhj
ZXB0aW9uSnVtcHMgOiBudWxscHRyOwogICAgIHBhcmFtcy5sYXp5U2xvd1BhdGggPSB0aGlzOwog
Ci0jaWYgIUZUTF9VU0VTX0IzCi0gICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVzZXJ2
ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0gICAgICAgIG1fc2NyYXRjaFJlZ2lzdGVyQWxsb2Nh
dG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6Ok5vRXh0cmFTcGFjZSk7Ci0gICAgLy8gVGhpcyBp
cyBuZWVkZWQgYmVjYXVzZSBMTFZNIG1heSBjcmVhdGUgYSBzdGFja21hcCBsb2NhdGlvbiB0aGF0
IGlzIHRoZSByZWdpc3RlciBTUC4KLSAgICAvLyBCdXQgb24gYXJtNjQsIFNQIGlzIGFsc28gdGhl
IHNhbWUgcmVnaXN0ZXIgbnVtYmVyIGFzIFpSLCBzbyBMTFZNIGlzIHRlbGxpbmcgdXMgdGhhdCBp
dCBoYXMKLSAgICAvLyBwcm92ZW4gc29tZXRoaW5nIGlzIHplcm8uIE91ciBNQVNNIGlzbid0IHVu
aXZlcnNhbGx5IGNvbXBhdGlibGUgd2l0aCBhcm02NCdzIGNvbnRleHQgZGVwZW5kZW50Ci0gICAg
Ly8gbm90aW9uIG9mIFNQIG1lYW5pbmcgWlIuIFdlIGp1c3QgbWFrZSB0aGluZ3MgZWFzaWVyIGJ5
IGVuc3VyaW5nIHdlIGRvIHRoZSBuZWNlc3NhcnkgbW92ZSBvZiB6ZXJvCi0gICAgLy8gaW50byBh
IG5vbi1TUCByZWdpc3Rlci4KLSAgICBpZiAobV9uZXdaZXJvVmFsdWVSZWdpc3RlciAhPSBJbnZh
bGlkR1BSUmVnKQotICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigw
KSwgbV9uZXdaZXJvVmFsdWVSZWdpc3Rlcik7Ci0jZW5kaWYgLy8gIUZUTF9VU0VTX0IzCi0KICAg
ICBtX2dlbmVyYXRvci0+cnVuKGppdCwgcGFyYW1zKTsKIAotI2lmICFGVExfVVNFU19CMwotICAg
IENDYWxsSGVscGVyczo6TGFiZWwgZG9uZUxhYmVsOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBq
dW1wVG9FbmRPZlBhdGNocG9pbnQ7Ci0gICAgaWYgKHByZXNlcnZlZFN0YXRlLm51bWJlck9mQnl0
ZXNQcmVzZXJ2ZWQpIHsKLSAgICAgICAgZG9uZUxhYmVsID0gaml0LmxhYmVsKCk7Ci0gICAgICAg
IG1fc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBp
bmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7Ci0gICAgICAgIGp1bXBUb0VuZE9mUGF0Y2hwb2ludCA9
IGppdC5qdW1wKCk7Ci0gICAgfQotI2VuZGlmIC8vICFGVExfVVNFU19CMwotCiAgICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKHZtLCBqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3Vj
Y2VlZCk7Ci0jaWYgRlRMX1VTRVNfQjMKICAgICBsaW5rQnVmZmVyLmxpbmsocGFyYW1zLmRvbmVK
dW1wcywgbV9kb25lKTsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAgaWYgKHByZXNlcnZlZFN0
YXRlLm51bWJlck9mQnl0ZXNQcmVzZXJ2ZWQpIHsKLSAgICAgICAgbGlua0J1ZmZlci5saW5rKHBh
cmFtcy5kb25lSnVtcHMsIGxpbmtCdWZmZXIubG9jYXRpb25PZihkb25lTGFiZWwpKTsKLSAgICAg
ICAgbGlua0J1ZmZlci5saW5rKGp1bXBUb0VuZE9mUGF0Y2hwb2ludCwgbV9wYXRjaHBvaW50Lmxh
YmVsQXRPZmZzZXQoTWFjcm9Bc3NlbWJsZXI6Om1heEp1bXBSZXBsYWNlbWVudFNpemUoKSkpOwot
ICAgIH0gZWxzZQotICAgICAgICBsaW5rQnVmZmVyLmxpbmsocGFyYW1zLmRvbmVKdW1wcywgbV9w
YXRjaHBvaW50LmxhYmVsQXRPZmZzZXQoTWFjcm9Bc3NlbWJsZXI6Om1heEp1bXBSZXBsYWNlbWVu
dFNpemUoKSkpOwotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgaWYgKG1fZXhjZXB0aW9uVGFy
Z2V0KQogICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZXhjZXB0aW9uSnVtcHMsIG1fZXhjZXB0aW9u
VGFyZ2V0KTsKICAgICBtX3N0dWIgPSBGSU5BTElaRV9DT0RFX0ZPUihjb2RlQmxvY2ssIGxpbmtC
dWZmZXIsICgiTGF6eSBzbG93IHBhdGggY2FsbCBzdHViIikpOwogCi0jaWYgRlRMX1VTRVNfQjMK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAobV9wYXRjaGFibGVKdW1wLCBDb2RlTG9j
YXRpb25MYWJlbChtX3N0dWIuY29kZSgpKSk7Ci0jZWxzZSAvLyBGVExfVVNFU19CMwotICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAobV9wYXRjaHBvaW50LCBDb2RlTG9jYXRpb25M
YWJlbChtX3N0dWIuY29kZSgpKSk7Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKIH0KIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
YXp5U2xvd1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExhenlTbG93UGF0aC5oCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExhenlTbG93UGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NiwyNiArNjYsMTUg
QEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBMYXp5U2xvd1BhdGgoCi0jaWYgRlRMX1VTRVNf
QjMKICAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBwYXRjaGFibGVKdW1wLCBDb2RlTG9jYXRpb25M
YWJlbCBkb25lLAotI2Vsc2UgLy8gRkxUX1VTRVNfQjMKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwgcGF0Y2hwb2ludCwKLSNlbmRpZiAvLyBGVExfVVNFU19CMwogICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbCBleGNlcHRpb25UYXJnZXQsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LAogICAgICAgICBDYWxsU2l0ZUluZGV4LCBSZWZQdHI8R2VuZXJhdG9yPgotI2lmICFGVExfVVNF
U19CMwotICAgICAgICAsIEdQUlJlZyBuZXdaZXJvUmVnLCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IKLSNlbmRpZiAvLyBGVExfVVNFU19CMwogICAgICAgICApOwogCiAgICAgfkxhenlTbG93UGF0
aCgpOwogCi0jaWYgRlRMX1VTRVNfQjMKICAgICBDb2RlTG9jYXRpb25KdW1wIHBhdGNoYWJsZUp1
bXAoKSBjb25zdCB7IHJldHVybiBtX3BhdGNoYWJsZUp1bXA7IH0KICAgICBDb2RlTG9jYXRpb25M
YWJlbCBkb25lKCkgY29uc3QgeyByZXR1cm4gbV9kb25lOyB9Ci0jZWxzZSAvLyBGVExfVVNFU19C
MwotICAgIENvZGVMb2NhdGlvbkxhYmVsIHBhdGNocG9pbnQoKSBjb25zdCB7IHJldHVybiBtX3Bh
dGNocG9pbnQ7IH0KLSNlbmRpZiAvLyBGVExfVVNFU19CMwogICAgIGNvbnN0IFJlZ2lzdGVyU2V0
JiB1c2VkUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV91c2VkUmVnaXN0ZXJzOyB9CiAgICAg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsU2l0ZUlu
ZGV4OyB9CiAKQEAgLTk0LDI3ICs4MywxMyBAQCBwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHN0dWIoKSBjb25zdCB7IHJldHVybiBtX3N0dWI7IH0KIAogcHJpdmF0ZToKLSNpZiBG
VExfVVNFU19CMwogICAgIENvZGVMb2NhdGlvbkp1bXAgbV9wYXRjaGFibGVKdW1wOwogICAgIENv
ZGVMb2NhdGlvbkxhYmVsIG1fZG9uZTsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAgQ29kZUxv
Y2F0aW9uTGFiZWwgbV9wYXRjaHBvaW50OwotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgbV9leGNlcHRpb25UYXJnZXQ7CiAgICAgUmVnaXN0ZXJTZXQgbV91c2Vk
UmVnaXN0ZXJzOwogICAgIENhbGxTaXRlSW5kZXggbV9jYWxsU2l0ZUluZGV4OwogICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBtX3N0dWI7CiAgICAgUmVmUHRyPEdlbmVyYXRvcj4gbV9nZW5lcmF0
b3I7Ci0jaWYgIUZUTF9VU0VTX0IzCi0gICAgR1BSUmVnIG1fbmV3WmVyb1ZhbHVlUmVnaXN0ZXI7
Ci0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGZpZWxkIGluIG9uZSBvZiB0d28gd2F5czoKLSAg
ICAvLyAxKSBXaGVuIGxhbmRpbmcgQjMsIHdlIHNob3VsZCByZW1vdmUgdGhpcyBmaWVsZCBiZWNh
dXNlIGl0IHdpbGwgbm8KLSAgICAvLyBsb25nZXIgYmUgdGhlIGNhc2Ugd2hlcmUgYSBsb2NhdGlv
biBiZWluZyBpbiBTUCBtZWFucyBpdCdzIHplcm8uCi0gICAgLy8gMikgSWYgd2UgZG9uJ3QgbGFu
ZCBCMywgdGhpcyBzYW1lIGlkZWEgY2FuIGJlIGV4cHJlc3NlZCBpbiBsZXNzCi0gICAgLy8gbWVt
b3J5IHVzaW5nIGp1c3QgYSBzaW5nbGUgR1BSUmVnLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE3NjgKLSAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IgbV9zY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I7Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKIH07
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1
ZGUgIkRGR0NvbW1vbi5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKICNpbmNsdWRlICJKSVRP
cGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiTExWTUFQSS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIu
aCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJDb21waWxhdGlv
bi5oIgpAQCAtNTIsMzQgKzUxLDYgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKICAgICAvLyBM
TFZNIHdpbGwgY3JlYXRlIGl0cyBvd24ganVtcCB0YWJsZXMgYXMgbmVlZGVkLgogICAgIGNvZGVC
bG9jay0+Y2xlYXJTd2l0Y2hKdW1wVGFibGVzKCk7CiAKLSNpZiAhRlRMX1VTRVNfQjMKLSAgICAv
LyBXaGF0IExMVk0ncyBzdGFja21hcHMgY2FsbCBzdGFja1NpemVGb3JMb2NhbHMgYW5kIHdoYXQg
d2UgY2FsbCBmcmFtZVJlZ2lzdGVyQ291bnQgaGF2ZSBhIHNpbXBsZQotICAgIC8vIHJlbGF0aW9u
c2hpcCwgdGhvdWdoIGl0J3Mgbm90IG9idmlvdXMgZnJvbSByZWFkaW5nIHRoZSBjb2RlLiBUaGUg
ZWFzaWVzdCB3YXkgdG8gdW5kZXJzdGFuZCB0aGVtCi0gICAgLy8gaXMgdG8gbG9vayBhdCBzdGFj
a09mZnNldCwgaS5lLiB3aGF0IHlvdSBoYXZlIHRvIGFkZCB0byBGUCB0byBnZXQgU1AuIEZvciBM
TFZNIHRoYXQgaXMganVzdDoKLSAgICAvLwotICAgIC8vICAgICBzdGFja09mZnNldCA9PSAtc3Rh
dGUuaml0Q29kZS0+c3RhY2ttYXBzLnN0YWNrU2l6ZUZvckxvY2FscygpCi0gICAgLy8KLSAgICAv
LyBUaGUgd2F5IHdlIGRlZmluZSBmcmFtZVJlZ2lzdGVyQ291bnQgaXMgdGhhdCBpdCBzYXRpc2Zp
ZXMgdGhpcyBlcXVhbGl0eToKLSAgICAvLwotICAgIC8vICAgICBzdGFja09mZnNldCA9PSB2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnQgLSAxKS5vZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikKLSAgICAvLwotICAgIC8vIFdlIGNhbiBzaW1wbGlmeSB0aGlzIHdoZW4g
d2UgYXBwbHkgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoKToKLSAgICAvLwotICAgIC8vICAgICBz
dGFja09mZnNldCA9PSAoLTEgLSAoZnJhbWVSZWdpc3RlckNvdW50IC0gMSkpICogc2l6ZW9mKFJl
Z2lzdGVyKQotICAgIC8vICAgICBzdGFja09mZnNldCA9PSAoLTEgLSBmcmFtZVJlZ2lzdGVyQ291
bnQgKyAxKSAqIHNpemVvZihSZWdpc3RlcikKLSAgICAvLyAgICAgc3RhY2tPZmZzZXQgPT0gLWZy
YW1lUmVnaXN0ZXJDb3VudCAqIHNpemVvZihSZWdpc3RlcikKLSAgICAvLwotICAgIC8vIFRoZXJl
Zm9yZSB3ZSBqdXN0IGhhdmU6Ci0gICAgLy8KLSAgICAvLyAgICAgZnJhbWVSZWdpc3RlckNvdW50
ID09IC1zdGFja09mZnNldCAvIHNpemVvZihSZWdpc3RlcikKLSAgICAvLwotICAgIC8vIElmIHdl
IHN1YnN0aXR1dGUgd2hhdCB3ZSBoYXZlIGFib3ZlLCB3ZSBnZXQ6Ci0gICAgLy8KLSAgICAvLyAg
ICAgZnJhbWVSZWdpc3RlckNvdW50ID09IC0oLXN0YXRlLmppdENvZGUtPnN0YWNrbWFwcy5zdGFj
a1NpemVGb3JMb2NhbHMoKSkgLyBzaXplb2YoUmVnaXN0ZXIpCi0gICAgLy8gICAgIGZyYW1lUmVn
aXN0ZXJDb3VudCA9PSBzdGF0ZS5qaXRDb2RlLT5zdGFja21hcHMuc3RhY2tTaXplRm9yTG9jYWxz
KCkgLyBzaXplb2YoUmVnaXN0ZXIpCi0gICAgc3RhdGUuaml0Q29kZS0+Y29tbW9uLmZyYW1lUmVn
aXN0ZXJDb3VudCA9IHN0YXRlLmppdENvZGUtPnN0YWNrbWFwcy5zdGFja1NpemVGb3JMb2NhbHMo
KSAvIHNpemVvZih2b2lkKik7Ci0jZW5kaWYKLSAgICAKICAgICBzdGF0ZS5qaXRDb2RlLT5jb21t
b24ucmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCA9IGdyYXBoLnJlcXVpcmVkUmVnaXN0ZXJD
b3VudEZvckV4aXQoKTsKICAgICAKICAgICBpZiAoIWdyYXBoLm1fcGxhbi5pbmxpbmVDYWxsRnJh
bWVzLT5pc0VtcHR5KCkpCkBAIC0xNDcsMTkgKzExOCw3IEBAIHZvaWQgbGluayhTdGF0ZSYgc3Rh
dGUpCiAgICAgICAgIG91dC5yZXNldCgpOwogCiAgICAgICAgIG91dC5wcmludCgiICAgIERpc2Fz
c2VtYmx5OlxuIik7Ci0jaWYgRlRMX1VTRVNfQjMKICAgICAgICAgb3V0LnByaW50KCIgICAgICAg
IDxub3QgaW1wbGVtZW50ZWQgeWV0PlxuIik7Ci0jZWxzZQotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc3RhdGUuaml0Q29kZS0+aGFuZGxlcygpLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoc3RhdGUuY29kZVNlY3Rpb25OYW1lc1tpXSAhPSBTRUNUSU9OX05BTUUoInRl
eHQiKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogaGFuZGxlID0gc3RhdGUuaml0Q29kZS0+aGFuZGxl
cygpW2ldLmdldCgpOwotICAgICAgICAgICAgZGlzYXNzZW1ibGUoCi0gICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGhhbmRsZS0+c3RhcnQoKSksIGhhbmRsZS0+c2l6ZUluQnl0
ZXMoKSwKLSAgICAgICAgICAgICAgICAiICAgICAgIiwgb3V0LCBMTFZNU3Vic2V0KTsKLSAgICAg
ICAgfQotI2VuZGlmCiAgICAgICAgIGNvbXBpbGF0aW9uLT5hZGREZXNjcmlwdGlvbihQcm9maWxl
cjo6T3JpZ2luU3RhY2soKSwgb3V0LnRvQ1N0cmluZygpKTsKICAgICAgICAgb3V0LnJlc2V0KCk7
CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5j
cHAJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9j
YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKIAogdXNpbmcgbmFtZXNwYWNlIEIzOwogCi0jaWYgRlRMX1VTRVNf
QjMKIExvY2F0aW9uIExvY2F0aW9uOjpmb3JWYWx1ZVJlcChjb25zdCBWYWx1ZVJlcCYgcmVwKQog
ewogICAgIHN3aXRjaCAocmVwLmtpbmQoKSkgewpAQCAtNTQsMzQgKzUzLDYgQEAgTG9jYXRpb24g
TG9jYXRpb246OmZvclZhbHVlUmVwKGNvbnN0IFZhbAogICAgICAgICByZXR1cm4gTG9jYXRpb24o
KTsKICAgICB9CiB9Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKLQotTG9jYXRpb24gTG9jYXRpb246
OmZvclN0YWNrbWFwcyhjb25zdCBTdGFja01hcHMqIHN0YWNrbWFwcywgY29uc3QgU3RhY2tNYXBz
OjpMb2NhdGlvbiYgbG9jYXRpb24pCi17Ci0gICAgc3dpdGNoIChsb2NhdGlvbi5raW5kKSB7Ci0g
ICAgY2FzZSBTdGFja01hcHM6OkxvY2F0aW9uOjpVbnByb2Nlc3NlZDoKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNh
c2UgU3RhY2tNYXBzOjpMb2NhdGlvbjo6UmVnaXN0ZXI6Ci0gICAgY2FzZSBTdGFja01hcHM6Okxv
Y2F0aW9uOjpEaXJlY3Q6Ci0gICAgICAgIHJldHVybiBmb3JSZWdpc3Rlcihsb2NhdGlvbi5kd2Fy
ZlJlZywgbG9jYXRpb24ub2Zmc2V0KTsKLSAgICAgICAgCi0gICAgY2FzZSBTdGFja01hcHM6Okxv
Y2F0aW9uOjpJbmRpcmVjdDoKLSAgICAgICAgcmV0dXJuIGZvckluZGlyZWN0KGxvY2F0aW9uLmR3
YXJmUmVnLCBsb2NhdGlvbi5vZmZzZXQpOwotICAgICAgICAKLSAgICBjYXNlIFN0YWNrTWFwczo6
TG9jYXRpb246OkNvbnN0YW50OgotICAgICAgICByZXR1cm4gZm9yQ29uc3RhbnQobG9jYXRpb24u
b2Zmc2V0KTsKLSAgICAgICAgCi0gICAgY2FzZSBTdGFja01hcHM6OkxvY2F0aW9uOjpDb25zdGFu
dEluZGV4OgotICAgICAgICBBU1NFUlQoc3RhY2ttYXBzKTsKLSAgICAgICAgcmV0dXJuIGZvckNv
bnN0YW50KHN0YWNrbWFwcy0+Y29uc3RhbnRzW2xvY2F0aW9uLm9mZnNldF0uaW50ZWdlcik7Ci0g
ICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICByZXR1
cm4gTG9jYXRpb24oKTsKLX0KIAogdm9pZCBMb2NhdGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRpb24uaAko
cmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw2IEBACiAKICNpbmNsdWRlICJERkdDb21t
b24uaCIKICNpbmNsdWRlICJGUFJJbmZvLmgiCi0jaW5jbHVkZSAiRlRMRFdBUkZSZWdpc3Rlci5o
IgotI2luY2x1ZGUgIkZUTFN0YWNrTWFwcy5oIgogI2luY2x1ZGUgIkdQUkluZm8uaCIKICNpbmNs
dWRlICJSZWcuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtNzQsMTEgKzcyLDYgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICBzdGF0aWMg
TG9jYXRpb24gZm9yUmVnaXN0ZXIoRFdBUkZSZWdpc3RlciBkd2FyZlJlZywgaW50MzJfdCBhZGRl
bmQpCi0gICAgewotICAgICAgICByZXR1cm4gZm9yUmVnaXN0ZXIoZHdhcmZSZWcucmVnKCksIGFk
ZGVuZCk7Ci0gICAgfQotICAgIAogICAgIHN0YXRpYyBMb2NhdGlvbiBmb3JJbmRpcmVjdChSZWcg
cmVnLCBpbnQzMl90IG9mZnNldCkKICAgICB7CiAgICAgICAgIExvY2F0aW9uIHJlc3VsdDsKQEAg
LTg4LDExICs4MSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAg
ICAgCi0gICAgc3RhdGljIExvY2F0aW9uIGZvckluZGlyZWN0KERXQVJGUmVnaXN0ZXIgZHdhcmZS
ZWcsIGludDMyX3Qgb2Zmc2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZvckluZGlyZWN0KGR3
YXJmUmVnLnJlZygpLCBvZmZzZXQpOwotICAgIH0KLSAgICAKICAgICBzdGF0aWMgTG9jYXRpb24g
Zm9yQ29uc3RhbnQoaW50NjRfdCBjb25zdGFudCkKICAgICB7CiAgICAgICAgIExvY2F0aW9uIHJl
c3VsdDsKQEAgLTEwMSwxNCArODksOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogCi0jaWYgRlRMX1VTRVNfQjMKICAgICBzdGF0aWMgTG9jYXRpb24gZm9yVmFsdWVS
ZXAoY29uc3QgQjM6OlZhbHVlUmVwJik7Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKIAotICAgIC8v
IFlvdSBjYW4gcGFzcyBhIG51bGwgU3RhY2tNYXBzIGlmIHlvdSBhcmUgY29uZmlkZW50IHRoYXQg
dGhlIGxvY2F0aW9uIGRvZXNuJ3QKLSAgICAvLyBpbnZvbHZlIGEgd2lkZSBjb25zdGFudC4KLSAg
ICBzdGF0aWMgTG9jYXRpb24gZm9yU3RhY2ttYXBzKGNvbnN0IFN0YWNrTWFwcyosIGNvbnN0IFN0
YWNrTWFwczo6TG9jYXRpb24mKTsKLSAgICAKICAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVy
biBtX2tpbmQ7IH0KIAogICAgIGJvb2wgaGFzUmVnKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09
IFJlZ2lzdGVyIHx8IGtpbmQoKSA9PSBJbmRpcmVjdDsgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE5NjY4NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NSwxMSArNDUsOSBAQAogI2luY2x1ZGUgIkZUTEV4Y2VwdGlvblRhcmdl
dC5oIgogI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTEZv
cm1hdHRlZFZhbHVlLmgiCi0jaW5jbHVkZSAiRlRMSW5saW5lQ2FjaGVTaXplLmgiCiAjaW5jbHVk
ZSAiRlRMTGF6eVNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIkZUTExvd2VyZWROb2RlVmFsdWUu
aCIKICNpbmNsdWRlICJGVExPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiRlRMT3V0cHV0LmgiCiAj
aW5jbHVkZSAiRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oIgogI2luY2x1ZGUgIkZUTFRo
dW5rcy5oIgogI2luY2x1ZGUgIkZUTFdlaWdodGVkVGFyZ2V0LmgiCkBAIC01OCw2ICs1Niw3IEBA
CiAjaW5jbHVkZSAiSklUQml0T3JHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRCaXRYb3JHZW5l
cmF0b3IuaCIKICNpbmNsdWRlICJKSVREaXZHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVExlZnRTaGlmdEdlbmVyYXRvci5oIgog
I2luY2x1ZGUgIkpJVE11bEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5l
cmF0b3IuaCIKQEAgLTc2LDcgKzc1LDYgQEAKICNpZiAhT1MoV0lORE9XUykKICNpbmNsdWRlIDxk
bGZjbi5oPgogI2VuZGlmCi0jaW5jbHVkZSA8bGx2bS9Jbml0aWFsaXplTExWTS5oPgogI2luY2x1
ZGUgPHVub3JkZXJlZF9zZXQ+CiAjaW5jbHVkZSA8d3RmL0JveC5oPgogI2luY2x1ZGUgPHd0Zi9Q
cm9jZXNzSUQuaD4KQEAgLTEyNywxOCArMTI1LDEwIEBAIHB1YmxpYzoKICAgICBMb3dlckRGR1Rv
TExWTShTdGF0ZSYgc3RhdGUpCiAgICAgICAgIDogbV9ncmFwaChzdGF0ZS5ncmFwaCkKICAgICAg
ICAgLCBtX2Z0bFN0YXRlKHN0YXRlKQotICAgICAgICAsIG1faGVhcHMoc3RhdGUuY29udGV4dCkK
ICAgICAgICAgLCBtX291dChzdGF0ZSkKLSNpZiBGVExfVVNFU19CMwogICAgICAgICAsIG1fcHJv
Yygqc3RhdGUucHJvYykKLSNlbmRpZgogICAgICAgICAsIG1fc3RhdGUoc3RhdGUuZ3JhcGgpCiAg
ICAgICAgICwgbV9pbnRlcnByZXRlcihzdGF0ZS5ncmFwaCwgbV9zdGF0ZSkKLSAgICAgICAgLCBt
X3N0YWNrbWFwSURzKDApCi0jaWYgIUZUTF9VU0VTX0IzCi0gICAgICAgICwgbV90YmFhS2luZCht
ZEtpbmRJRChzdGF0ZS5jb250ZXh0LCAidGJhYSIpKQotICAgICAgICAsIG1fdGJhYVN0cnVjdEtp
bmQobWRLaW5kSUQoc3RhdGUuY29udGV4dCwgInRiYWEuc3RydWN0IikpCi0jZW5kaWYKICAgICB7
CiAgICAgfQogICAgIApAQCAtMTU2LDI4ICsxNDYsMTAgQEAgcHVibGljOgogICAgICAgICAKICAg
ICAgICAgbV9ncmFwaC5lbnN1cmVEb21pbmF0b3JzKCk7CiAKLSNpZiAhRlRMX1VTRVNfQjMKLSAg
ICAgICAgc3RhdGUtPm1vZHVsZSA9Ci0gICAgICAgICAgICBtb2R1bGVDcmVhdGVXaXRoTmFtZUlu
Q29udGV4dChuYW1lLmRhdGEoKSwgc3RhdGUtPmNvbnRleHQpOwotICAgICAgICAKLSAgICAgICAg
c3RhdGUtPmZ1bmN0aW9uID0gYWRkRnVuY3Rpb24oCi0gICAgICAgICAgICBzdGF0ZS0+bW9kdWxl
LCBuYW1lLmRhdGEoKSwgZnVuY3Rpb25UeXBlKG1fb3V0LmludDY0KSk7Ci0gICAgICAgIHNldEZ1
bmN0aW9uQ2FsbGluZ0NvbnYoc3RhdGUtPmZ1bmN0aW9uLCBMTFZNQ0NhbGxDb252KTsKLSAgICAg
ICAgaWYgKGlzWDg2KCkgJiYgT3B0aW9uczo6bGx2bURpc2FsbG93QVZYKCkpIHsKLSAgICAgICAg
ICAgIC8vIEFWWCBtYWtlcyBWOC9yYXl0cmFjZSA4MCUgc2xvd2VyLiBJdCBtYWtlcyBLcmFrZW4v
YXVkaW8tb3NjaWxsYXRvciA0LjV4Ci0gICAgICAgICAgICAvLyBzbG93ZXIuIEl0IHNob3VsZCBi
ZSBkaXNhYmxlZC4KLSAgICAgICAgICAgIGFkZFRhcmdldERlcGVuZGVudEZ1bmN0aW9uQXR0cihz
dGF0ZS0+ZnVuY3Rpb24sICJ0YXJnZXQtZmVhdHVyZXMiLCAiLWF2eCIpOwotICAgICAgICB9Ci0j
ZW5kaWYgLy8gIUZUTF9VU0VTX0IzCi0gICAgICAgIAogICAgICAgICBpZiAodmVyYm9zZUNvbXBp
bGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgZGF0YUxvZygiRnVuY3Rpb24gcmVhZHksIGJl
Z2lubmluZyBsb3dlcmluZy5cbiIpOwogCi0jaWYgRlRMX1VTRVNfQjMKICAgICAgICAgbV9vdXQu
aW5pdGlhbGl6ZShtX2hlYXBzKTsKLSNlbHNlCi0gICAgICAgIG1fb3V0LmluaXRpYWxpemUoc3Rh
dGUtPm1vZHVsZSwgc3RhdGUtPmZ1bmN0aW9uLCBtX2hlYXBzKTsKLSNlbmRpZgogCiAgICAgICAg
IC8vIFdlIHVzZSBwcm9sb2d1ZSBmcmVxdWVuY3kgZm9yIGFsbCBvZiB0aGUgaW5pdGlhbGl6YXRp
b24gY29kZS4KICAgICAgICAgbV9vdXQuc2V0RnJlcXVlbmN5KDEpOwpAQCAtMjAwLDE0OCArMTcy
LDI3IEBAIHB1YmxpYzoKICAgICAgICAgbV9vdXQuc2V0RnJlcXVlbmN5KDEpOwogICAgICAgICAK
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9wcm9sb2d1ZSwgc3RhY2tPdmVyZmxvdyk7Ci0jaWYg
RlRMX1VTRVNfQjMKICAgICAgICAgbV9vdXQuaW5pdGlhbGl6ZUNvbnN0YW50cyhtX3Byb2MsIG1f
cHJvbG9ndWUpOwotI2VuZGlmCiAgICAgICAgIGNyZWF0ZVBoaVZhcmlhYmxlcygpOwogCi0jaWYg
RlRMX1VTRVNfQjMKICAgICAgICAgc2l6ZV90IHNpemVPZkNhcHR1cmVkID0gc2l6ZW9mKEpTVmFs
dWUpICogbV9ncmFwaC5tX25leHRNYWNoaW5lTG9jYWw7CiAgICAgICAgIEIzOjpTbG90QmFzZVZh
bHVlKiBjYXB0dXJlZEJhc2UgPSBtX291dC5sb2NrZWRTdGFja1Nsb3Qoc2l6ZU9mQ2FwdHVyZWQp
OwogICAgICAgICBtX2NhcHR1cmVkID0gbV9vdXQuYWRkKGNhcHR1cmVkQmFzZSwgbV9vdXQuY29u
c3RJbnRQdHIoc2l6ZU9mQ2FwdHVyZWQpKTsKICAgICAgICAgc3RhdGUtPmNhcHR1cmVkVmFsdWUg
PSBjYXB0dXJlZEJhc2UtPnNsb3QoKTsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAgICAgIExW
YWx1ZSBjYXB0dXJlZEFsbG9jYSA9IG1fb3V0LmFsbG9jYShhcnJheVR5cGUobV9vdXQuaW50NjQs
IG1fZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsKSk7Ci0gICAgICAgIAotICAgICAgICBtX2NhcHR1
cmVkID0gbV9vdXQuYWRkKAotICAgICAgICAgICAgbV9vdXQucHRyVG9JbnQoY2FwdHVyZWRBbGxv
Y2EsIG1fb3V0LmludFB0ciksCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0cihtX2dyYXBo
Lm1fbmV4dE1hY2hpbmVMb2NhbCAqIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICAgICAgCi0gICAg
ICAgIHN0YXRlLT5jYXB0dXJlZFN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7Ci0gICAgICAg
IG1fb3V0LmNhbGwoCi0gICAgICAgICAgICBtX291dC52b2lkVHlwZSwgbV9vdXQuc3RhY2ttYXBJ
bnRyaW5zaWMoKSwgbV9vdXQuY29uc3RJbnQ2NChzdGF0ZS0+Y2FwdHVyZWRTdGFja21hcElEKSwK
LSAgICAgICAgICAgIG1fb3V0LmludDMyWmVybywgY2FwdHVyZWRBbGxvY2EpOwotI2VuZGlmIC8v
IEZUTF9VU0VfQjMKIAogICAgICAgICBhdXRvIHByZU9yZGVyID0gbV9ncmFwaC5ibG9ja3NJblBy
ZU9yZGVyKCk7CiAKLSNpZiAhRlRMX1VTRVNfQjMKLSAgICAgICAgYm9vbCBoYXNWYXJhcmdzID0g
ZmFsc2U7Ci0gICAgICAgIHNpemVfdCBtYXhOdW1iZXJPZkNhdGNoU3BpbGxzID0gMDsKLSAgICAg
ICAgZm9yIChERkc6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJlT3JkZXIpIHsKLSAgICAgICAgICAg
IGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgewotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6Ci0gICAgICAgICAgICAgICAgY2FzZSBUYWlsQ2Fs
bFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgotICAgICAgICAgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRW
YXJhcmdzOgotICAgICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKLSAg
ICAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgot
ICAgICAgICAgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKLSAgICAgICAgICAgICAgICBj
YXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgotICAgICAgICAgICAgICAgICAgICBoYXNWYXJh
cmdzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9oYXNFeGNlcHRpb25IYW5kbGVycykgewot
ICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBDYWxsOgotICAgICAgICAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgot
ICAgICAgICAgICAgICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ29uc3Ry
dWN0VmFyYXJnczoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFy
YXJnczoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbElubGluZWRDYWxsZXI6Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxl
cjogewotICAgICAgICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBvcENhdGNoT3JpZ2luOwot
ICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlckluZm8qIGV4Y2VwdGlvbkhhbmRsZXI7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHdpbGxDYXRjaEV4Y2VwdGlvbiA9IG1fZ3JhcGgu
d2lsbENhdGNoRXhjZXB0aW9uSW5NYWNoaW5lRnJhbWUobm9kZS0+b3JpZ2luLmZvckV4aXQsIG9w
Q2F0Y2hPcmlnaW4sIGV4Y2VwdGlvbkhhbmRsZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHdpbGxDYXRjaEV4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhO
dW1iZXJPZkNhdGNoU3BpbGxzID0gc3RkOjptYXgobWF4TnVtYmVyT2ZDYXRjaFNwaWxscywgbV9n
cmFwaC5sb2NhbHNMaXZlSW5CeXRlY29kZShvcENhdGNoT3JpZ2luKS5iaXRDb3VudCgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgQXJpdGhEaXY6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
QXJpdGhNdWw6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQXJpdGhTdWI6Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgVmFsdWVBZGQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgREZHOjpC
aXRBbmQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgREZHOjpCaXRPcjoKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBERkc6OkJpdFhvcjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBCaXRM
U2hpZnQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQml0UlNoaWZ0OgotICAgICAgICAgICAg
ICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5v
ZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsgLy8gV2Ugb25seSBjb21waWxlIHBhdGNocG9pbnRzIGZvciBVbnR5cGVkVXNl
LgotICAgICAgICAgICAgICAgICAgICAgICAgRkFMTFRIUk9VR0g7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBHZXRCeUlkOgotICAgICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5SWRGbHVz
aDogewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbWF5IGhhdmUgdG8gZmx1c2ggb25l
IHRoaW5nIGZvciBHZXRCeUlkcy8gYmluYXJ5IG9wcyB3aGVuIHRoZSBiYXNlIGFuZCByZXN1bHQg
b3IgdGhlIGxlZnQvcmlnaHQgYW5kIHRoZSByZXN1bHQKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGFyZSBhc3NpZ25lZCB0aGUgc2FtZSByZWdpc3Rlci4gRm9yIGEgbW9yZSBjb21wcmVoZW5z
aXZlIG92ZXJ2aWV3LCBsb29rIGF0IHRoZSBjb21tZW50IGluIEZUTENvbXBpbGUuY3BwCi0gICAg
ICAgICAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIG9wQ2F0Y2hPcmlnaW47Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBIYW5kbGVySW5mbyogZXhjZXB0aW9uSGFuZGxlcjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgd2lsbENhdGNoRXhjZXB0aW9uID0gbV9ncmFwaC53aWxsQ2F0Y2hF
eGNlcHRpb25Jbk1hY2hpbmVGcmFtZShub2RlLT5vcmlnaW4uZm9yRXhpdCwgb3BDYXRjaE9yaWdp
biwgZXhjZXB0aW9uSGFuZGxlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lsbENh
dGNoRXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBudW1iZXJPZkdldEJ5SWRPckJpbmFyeU9wU3BpbGxzID0gMTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYXhOdW1iZXJPZkNhdGNoU3BpbGxzID0gc3RkOjptYXgobWF4TnVt
YmVyT2ZDYXRjaFNwaWxscywgbnVtYmVyT2ZHZXRCeUlkT3JCaW5hcnlPcFNwaWxscyk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBCMyBkb2Vz
bid0IG5lZWQgdGhlIHZhcmFyZ3Mgc3BpbGwgc2xvdCBiZWNhdXNlIHdlIGp1c3QgdXNlIGNhbGwg
YXJnIGFyZWEgc2l6ZSBhcyBhIHdheSB0bwotICAgICAgICAvLyByZXF1ZXN0IHNwaWxsIHNsb3Rz
LgotICAgICAgICBpZiAoaGFzVmFyYXJncykgewotICAgICAgICAgICAgTFZhbHVlIHZhcmFyZ3NT
cGlsbFNsb3RzID0gbV9vdXQuYWxsb2NhKAotICAgICAgICAgICAgICAgIGFycmF5VHlwZShtX291
dC5pbnQ2NCwgSlNDYWxsVmFyYXJnczo6bnVtU3BpbGxTbG90c05lZWRlZCgpKSk7Ci0gICAgICAg
ICAgICBzdGF0ZS0+dmFyYXJnc1NwaWxsU2xvdHNTdGFja21hcElEID0gbV9zdGFja21hcElEcysr
OwotICAgICAgICAgICAgbV9vdXQuY2FsbCgKLSAgICAgICAgICAgICAgICBtX291dC52b2lkVHlw
ZSwgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwKLSAgICAgICAgICAgICAgICBtX291dC5jb25z
dEludDY0KHN0YXRlLT52YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQpLAotICAgICAgICAgICAg
ICAgIG1fb3V0LmludDMyWmVybywgdmFyYXJnc1NwaWxsU2xvdHMpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gQjMgZG9lc24ndCBuZWVkIHRoZSBleGNlcHRpb24gc3BpbGwgc2xvdCBiZWNhdXNl
IHdlIGp1c3QgdXNlIHRoZSAKLSAgICAgICAgaWYgKG1fZ3JhcGgubV9oYXNFeGNlcHRpb25IYW5k
bGVycyAmJiBtYXhOdW1iZXJPZkNhdGNoU3BpbGxzKSB7Ci0gICAgICAgICAgICBSZWdpc3RlclNl
dCB2b2xhdGlsZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpT
Q2FsbCgpOwotICAgICAgICAgICAgbWF4TnVtYmVyT2ZDYXRjaFNwaWxscyA9IHN0ZDo6bWluKHZv
bGF0aWxlUmVnaXN0ZXJzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCksIG1heE51bWJlck9mQ2F0Y2hT
cGlsbHMpOwotCi0gICAgICAgICAgICBMVmFsdWUgZXhjZXB0aW9uSGFuZGxpbmdWb2xhdGlsZVJl
Z2lzdGVyc1NwaWxsU2xvdHMgPSBtX291dC5hbGxvY2EoCi0gICAgICAgICAgICAgICAgYXJyYXlU
eXBlKG1fb3V0LmludDY0LCBtYXhOdW1iZXJPZkNhdGNoU3BpbGxzKSk7Ci0gICAgICAgICAgICBz
dGF0ZS0+ZXhjZXB0aW9uSGFuZGxpbmdTcGlsbFNsb3RTdGFja21hcElEID0gbV9zdGFja21hcElE
cysrOwotICAgICAgICAgICAgbV9vdXQuY2FsbCgKLSAgICAgICAgICAgICAgICBtX291dC52b2lk
VHlwZSwgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwKLSAgICAgICAgICAgICAgICBtX291dC5j
b25zdEludDY0KHN0YXRlLT5leGNlcHRpb25IYW5kbGluZ1NwaWxsU2xvdFN0YWNrbWFwSUQpLAot
ICAgICAgICAgICAgICAgIG1fb3V0LmludDMyWmVybywgZXhjZXB0aW9uSGFuZGxpbmdWb2xhdGls
ZVJlZ2lzdGVyc1NwaWxsU2xvdHMpOwotICAgICAgICB9Ci0jZW5kaWYgLy8gIUZUTF9VU0VTX0Iz
Ci0gICAgICAgIAogICAgICAgICAvLyBXZSBzaG91bGQgbm90IGNyZWF0ZSBhbnkgYWxsb2NhJ3Mg
YWZ0ZXIgdGhpcyBwb2ludCwgc2luY2UgdGhleSB3aWxsIGNlYXNlIHRvCiAgICAgICAgIC8vIGJl
IG1lbTJyZWcgY2FuZGlkYXRlcy4KICAgICAgICAgCi0jaWYgRlRMX1VTRVNfQjMKICAgICAgICAg
bV9jYWxsRnJhbWUgPSBtX291dC5mcmFtZVBvaW50ZXIoKTsKLSNlbHNlCi0gICAgICAgIG1fY2Fs
bEZyYW1lID0gbV9vdXQucHRyVG9JbnQoCi0gICAgICAgICAgICBtX291dC5jYWxsKG1fb3V0Lmlu
dFB0ciwgbV9vdXQuZnJhbWVBZGRyZXNzSW50cmluc2ljKCksIG1fb3V0LmludDMyWmVybyksIG1f
b3V0LmludFB0cik7Ci0jZW5kaWYKICAgICAgICAgbV90YWdUeXBlTnVtYmVyID0gbV9vdXQuY29u
c3RJbnQ2NChUYWdUeXBlTnVtYmVyKTsKICAgICAgICAgbV90YWdNYXNrID0gbV9vdXQuY29uc3RJ
bnQ2NChUYWdNYXNrKTsKIAotI2lmIEZUTF9VU0VTX0IzCiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0
aGF0IEIzIGtub3dzIHRoYXQgd2UgcmVhbGx5IGNhcmUgYWJvdXQgdGhlIG1hc2sgcmVnaXN0ZXJz
LiBUaGlzIGZvcmNlcyB0aGUKICAgICAgICAgLy8gY29uc3RhbnRzIHRvIGJlIG1hdGVyaWFsaXpl
ZCBpbiByZWdpc3RlcnMuCiAgICAgICAgIG1fcHJvYy5hZGRGYXN0Q29uc3RhbnQobV90YWdUeXBl
TnVtYmVyLT5rZXkoKSk7CiAgICAgICAgIG1fcHJvYy5hZGRGYXN0Q29uc3RhbnQobV90YWdNYXNr
LT5rZXkoKSk7Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICAgICAgCiAgICAgICAgIG1fb3V0
LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50UHRyKGNvZGVCbG9jaygpKSwgYWRkcmVzc0ZvcihKU1N0
YWNrOjpDb2RlQmxvY2spKTsKICAgICAgICAgCkBAIC0zNTAsNyArMjAxLDYgQEAgcHVibGljOgog
ICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc3RhY2tPdmVyZmxvdywgbV9oYW5kbGVF
eGNlcHRpb25zKTsKICAgICAgICAgbV9vdXQuY2FsbChtX291dC52b2lkVHlwZSwgbV9vdXQub3Bl
cmF0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yKSwgbV9jYWxsRnJhbWUsIG1f
b3V0LmNvbnN0SW50UHRyKGNvZGVCbG9jaygpKSk7Ci0jaWYgRlRMX1VTRVNfQjMKICAgICAgICAg
bV9vdXQucGF0Y2hwb2ludChWb2lkKS0+c2V0R2VuZXJhdG9yKAogICAgICAgICAgICAgWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewogICAg
ICAgICAgICAgICAgIC8vIFdlIGFyZSB0ZXJtaW5hbCwgc28gd2UgY2FuIGNsb2JiZXIgZXZlcnl0
aGluZy4gVGhhdCdzIHdoeSB3ZSBkb24ndCBjbGFpbSB0bwpAQCAtMzY4LDE3ICsyMTgsOSBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVu
Y3Rpb25QdHIobG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSkpOwogICAgICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwotI2Vsc2UgLy8gRlRMX1VTRVNfQjMK
LSAgICAgICAgc3RhdGUtPmhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFja21hcElEID0g
bV9zdGFja21hcElEcysrOwotICAgICAgICBtX291dC5jYWxsKAotICAgICAgICAgICAgbV9vdXQu
dm9pZFR5cGUsIG1fb3V0LnN0YWNrbWFwSW50cmluc2ljKCksCi0gICAgICAgICAgICBtX291dC5j
b25zdEludDY0KHN0YXRlLT5oYW5kbGVTdGFja092ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJRCks
Ci0gICAgICAgICAgICBtX291dC5jb25zdEludDMyKE1hY3JvQXNzZW1ibGVyOjptYXhKdW1wUmVw
bGFjZW1lbnRTaXplKCkpKTsKLSNlbmRpZiAvLyBGVExfVVNFU19CMwogICAgICAgICBtX291dC51
bnJlYWNoYWJsZSgpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9oYW5kbGVF
eGNlcHRpb25zLCBjaGVja0FyZ3VtZW50cyk7Ci0jaWYgRlRMX1VTRVNfQjMKICAgICAgICAgQm94
PENDYWxsSGVscGVyczo6TGFiZWw+IGV4Y2VwdGlvbkhhbmRsZXIgPSBzdGF0ZS0+ZXhjZXB0aW9u
SGFuZGxlcjsKICAgICAgICAgbV9vdXQucGF0Y2hwb2ludChWb2lkKS0+c2V0R2VuZXJhdG9yKAog
ICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJikgewpAQCAtMzg4LDEyICsyMzAsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKCpl
eGNlcHRpb25IYW5kbGVyKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
fSk7Ci0jZWxzZQotICAgICAgICBzdGF0ZS0+aGFuZGxlRXhjZXB0aW9uU3RhY2ttYXBJRCA9IG1f
c3RhY2ttYXBJRHMrKzsKLSAgICAgICAgbV9vdXQuY2FsbCgKLSAgICAgICAgICAgIG1fb3V0LnZv
aWRUeXBlLCBtX291dC5zdGFja21hcEludHJpbnNpYygpLCBtX291dC5jb25zdEludDY0KHN0YXRl
LT5oYW5kbGVFeGNlcHRpb25TdGFja21hcElEKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
MzIoTWFjcm9Bc3NlbWJsZXI6Om1heEp1bXBSZXBsYWNlbWVudFNpemUoKSkpOwotI2VuZGlmCiAg
ICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBl
bmRUbyhjaGVja0FyZ3VtZW50cywgbG93QmxvY2sobV9ncmFwaC5ibG9jaygwKSkpOwpAQCAtNDQz
LDcgKzI3OSw2IEBAIHB1YmxpYzoKICAgICAgICAgZm9yIChERkc6OkJhc2ljQmxvY2sqIGJsb2Nr
IDogcHJlT3JkZXIpCiAgICAgICAgICAgICBjb21waWxlQmxvY2soYmxvY2spOwogCi0jaWYgRlRM
X1VTRVNfQjMKICAgICAgICAgLy8gV2UgY3JlYXRlIGFsbCBQaGkncyB1cCBmcm9udCwgYnV0IHdl
IG1heSB0aGVuIGRlY2lkZSBub3QgdG8gY29tcGlsZSB0aGUgYmFzaWMgYmxvY2sKICAgICAgICAg
Ly8gdGhhdCB3b3VsZCBoYXZlIGNvbnRhaW5lZCBvbmUgb2YgdGhlbS4gU28gdGhpcyBjcmVhdGVz
IG9ycGhhbnMsIHdoaWNoIHRyaWdnZXJzIEIzCiAgICAgICAgIC8vIHZhbGlkYXRpb24gZmFpbHVy
ZXMuIENhbGxpbmcgdGhpcyBmaXhlcyB0aGUgaXNzdWUuCkBAIC00NTcsMTYgKzI5Miw2IEBAIHB1
YmxpYzoKIAogICAgICAgICAvLyBXZSBwdXQgdGhlIGJsb2NrcyBpbnRvIHRoZSBCMyBwcm9jZWR1
cmUgaW4gYSBzdXBlciB3ZWlyZCBvcmRlci4gTm93IHdlIHJlb3JkZXIgdGhlbS4KICAgICAgICAg
bV9vdXQuYXBwbHlCbG9ja09yZGVyKCk7Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKLQotI2lmICFG
VExfVVNFU19CMwotICAgICAgICBpZiAoT3B0aW9uczo6ZHVtcExMVk1JUigpKQotICAgICAgICAg
ICAgZHVtcE1vZHVsZShzdGF0ZS0+bW9kdWxlKTsKLSAgICAgICAgaWYgKHZlcmJvc2VDb21waWxh
dGlvbkVuYWJsZWQoKSkKLSAgICAgICAgICAgIHN0YXRlLT5kdW1wU3RhdGUoImFmdGVyIGxvd2Vy
aW5nIik7Ci0gICAgICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgdmVy
aWZ5TW9kdWxlKHN0YXRlLT5tb2R1bGUpOwotI2VuZGlmCiAgICAgfQogCiBwcml2YXRlOgpAQCAt
NTAyLDExICszMjcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbm9kZSwgIkJhZCBQaGkgbm9kZSByZXN1bHQgdHlwZSIpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0jaWYgRlRMX1VTRVNfQjMKICAgICAg
ICAgICAgICAgICBtX3BoaXMuYWRkKG5vZGUsIG1fcHJvYy5hZGQ8VmFsdWU+KEIzOjpQaGksIHR5
cGUsIE9yaWdpbihub2RlKSkpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBtX3BoaXMuYWRkKG5v
ZGUsIG1fb3V0LmFsbG9jYSh0eXBlKSk7Ci0jZW5kaWYKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KQEAgLTU5NSw5ICs0MTYsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAg
bV9ub2RlID0gbV9oaWdoQmxvY2stPmF0KG5vZGVJbmRleCk7CiAgICAgICAgIG1fb3JpZ2luID0g
bV9ub2RlLT5vcmlnaW47Ci0jaWYgRlRMX1VTRVNfQjMKICAgICAgICAgbV9vdXQuc2V0T3JpZ2lu
KG1fbm9kZSk7Ci0jZW5kaWYKICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRp
b25FbmFibGVkKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJMb3dlcmluZyAiLCBtX25vZGUsICJc
biIpOwpAQCAtMTExOCw4MCArOTM3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCi0gICAgZW51bSBDb25zdEludDMyT3BlcmFuZE9wdGltaXphdGlvblN1cHBvcnQg
ewotICAgICAgICBIYXNDb25zdEludDMyT3BlcmFuZE9wdGltaXphdGlvbiwKLSAgICAgICAgRG9l
c05vdEhhdmVDb25zdEludDMyT3BlcmFuZE9wdGltaXphdGlvbiwKLSAgICB9OwotCi0gICAgZW51
bSBDb25zdERvdWJsZU9wZXJhbmRPcHRpbWl6YXRpb25TdXBwb3J0IHsKLSAgICAgICAgSGFzQ29u
c3REb3VibGVPcGVyYW5kT3B0aW1pemF0aW9uLAotICAgICAgICBEb2VzTm90SGF2ZUNvbnN0RG91
YmxlT3BlcmFuZE9wdGltaXphdGlvbiwKLSAgICB9OwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFNuaXBwZXRJQ0Rlc2NyaXB0b3IsCi0gICAgICAgIENvbnN0SW50MzJPcGVyYW5kT3B0aW1pemF0
aW9uU3VwcG9ydCBjb25zdEludDMyT3B0ID0gSGFzQ29uc3RJbnQzMk9wZXJhbmRPcHRpbWl6YXRp
b24sCi0gICAgICAgIENvbnN0RG91YmxlT3BlcmFuZE9wdGltaXphdGlvblN1cHBvcnQgY29uc3RE
b3VibGVPcHQgPSBEb2VzTm90SGF2ZUNvbnN0RG91YmxlT3BlcmFuZE9wdGltaXphdGlvbj4KLSAg
ICB2b2lkIGNvbXBpbGVVbnR5cGVkQmluYXJ5T3AoKQotICAgIHsKLSAgICAgICAgRWRnZSYgbGVm
dENoaWxkID0gbV9ub2RlLT5jaGlsZDEoKTsKLSAgICAgICAgRWRnZSYgcmlnaHRDaGlsZCA9IG1f
bm9kZS0+Y2hpbGQyKCk7Ci0KLSAgICAgICAgaWYgKCEocHJvdmVuVHlwZShsZWZ0Q2hpbGQpICYg
U3BlY0Z1bGxOdW1iZXIpIHx8ICEocHJvdmVuVHlwZShyaWdodENoaWxkKSAmIFNwZWNGdWxsTnVt
YmVyKSkgewotICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwobV9vdXQuaW50NjQsIG1fb3V0
Lm9wZXJhdGlvbihTbmlwcGV0SUNEZXNjcmlwdG9yOjpub25OdW1iZXJTbG93UGF0aEZ1bmN0aW9u
KCkpLCBtX2NhbGxGcmFtZSwKLSAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKGxlZnRDaGlsZCks
IGxvd0pTVmFsdWUocmlnaHRDaGlsZCkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7Ci0KLSAg
ICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvbigpKQotICAgICAgICAgICAgZGF0
YUxvZygiICAgIEVtaXR0aW5nICIsIFNuaXBwZXRJQ0Rlc2NyaXB0b3I6Om9wTmFtZSgpLCAiIHBh
dGNocG9pbnQgd2l0aCBzdGFja21hcCAjIiwgc3RhY2ttYXBJRCwgIlxuIik7Ci0KLSNpZiBGVExf
VVNFU19CMwotICAgICAgICBDUkFTSCgpOwotI2Vsc2UKLSAgICAgICAgTFZhbHVlIGxlZnQgPSBs
b3dKU1ZhbHVlKGxlZnRDaGlsZCk7Ci0gICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0pTVmFsdWUo
cmlnaHRDaGlsZCk7Ci0KLSAgICAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQoYWJzdHJh
Y3RWYWx1ZShsZWZ0Q2hpbGQpLnJlc3VsdFR5cGUoKSk7Ci0gICAgICAgIFNuaXBwZXRPcGVyYW5k
IHJpZ2h0T3BlcmFuZChhYnN0cmFjdFZhbHVlKHJpZ2h0Q2hpbGQpLnJlc3VsdFR5cGUoKSk7Ci0K
LSAgICAgICAgaWYgKGNvbnN0SW50MzJPcHQgPT0gSGFzQ29uc3RJbnQzMk9wZXJhbmRPcHRpbWl6
YXRpb24gJiYgbGVmdENoaWxkLT5pc0ludDMyQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIGxlZnRP
cGVyYW5kLnNldENvbnN0SW50MzIobGVmdENoaWxkLT5hc0ludDMyKCkpOwotICAgICAgICBlbHNl
IGlmIChjb25zdERvdWJsZU9wdCA9PSBIYXNDb25zdERvdWJsZU9wZXJhbmRPcHRpbWl6YXRpb24g
JiYgbGVmdENoaWxkLT5pc0RvdWJsZUNvbnN0YW50KCkpCi0gICAgICAgICAgICBsZWZ0T3BlcmFu
ZC5zZXRDb25zdERvdWJsZShsZWZ0Q2hpbGQtPmFzTnVtYmVyKCkpOwotCi0gICAgICAgIGlmIChs
ZWZ0T3BlcmFuZC5pc0NvbnN0KCkpIHsKLSAgICAgICAgICAgIC8vIEJlY2F1c2UgdGhlIHNuaXBw
ZXQgZG9lcyBub3Qgc3VwcG9ydCBib3RoIG9wZXJhbmRzIGJlaW5nIGNvbnN0YW50LCBpZiB0aGUg
bGVmdAotICAgICAgICAgICAgLy8gb3BlcmFuZCBpcyBhbHJlYWR5IGEgY29uc3RhbnQsIHdlJ2xs
IGp1c3QgcHJldGVuZCB0aGUgcmlnaHQgb3BlcmFuZCBpcyBub3QuCi0gICAgICAgIH0gZWxzZSBp
ZiAoY29uc3RJbnQzMk9wdCA9PSBIYXNDb25zdEludDMyT3BlcmFuZE9wdGltaXphdGlvbiAmJiBy
aWdodENoaWxkLT5pc0ludDMyQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIHJpZ2h0T3BlcmFuZC5z
ZXRDb25zdEludDMyKHJpZ2h0Q2hpbGQtPmFzSW50MzIoKSk7Ci0gICAgICAgIGVsc2UgaWYgKGNv
bnN0RG91YmxlT3B0ID09IEhhc0NvbnN0RG91YmxlT3BlcmFuZE9wdGltaXphdGlvbiAmJiByaWdo
dENoaWxkLT5pc0RvdWJsZUNvbnN0YW50KCkpCi0gICAgICAgICAgICByaWdodE9wZXJhbmQuc2V0
Q29uc3REb3VibGUocmlnaHRDaGlsZC0+YXNOdW1iZXIoKSk7Ci0KLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7
Ci0KLSAgICAgICAgLy8gQXJndW1lbnRzOiBpZCwgYnl0ZXMsIHRhcmdldCwgbnVtQXJncywgYXJn
cy4uLgotICAgICAgICBTdGFja21hcEFyZ3VtZW50TGlzdCBhcmd1bWVudHM7Ci0gICAgICAgIGFy
Z3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQ2NChzdGFja21hcElEKSk7Ci0gICAgICAgIGFy
Z3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMihTbmlwcGV0SUNEZXNjcmlwdG9yOjppY1Np
emUoKSkpOwotICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGNvbnN0TnVsbChtX291dC5yZWY4KSk7
Ci0gICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMigyKSk7Ci0gICAgICAg
IGFyZ3VtZW50cy5hcHBlbmQobGVmdCk7Ci0gICAgICAgIGFyZ3VtZW50cy5hcHBlbmQocmlnaHQp
OwotCi0gICAgICAgIGFwcGVuZE9TUkV4aXRBcmd1bWVudHNGb3JQYXRjaHBvaW50SWZXaWxsQ2F0
Y2hFeGNlcHRpb24oYXJndW1lbnRzLAotICAgICAgICAgICAgRXhjZXB0aW9uVHlwZTo6QmluYXJ5
T3BHZW5lcmF0b3IsIDMpOyAvLyBsZWZ0LCByaWdodCwgYW5kIHJlc3VsdCBzaG93IHVwIGluIHRo
ZSBzdGFja21hcCBsb2NhdGlvbnMuCi0KLSAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxs
KG1fb3V0LmludDY0LCBtX291dC5wYXRjaHBvaW50SW50NjRJbnRyaW5zaWMoKSwgYXJndW1lbnRz
KTsKLSAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNQW55
UmVnQ2FsbENvbnYpOwotCi0gICAgICAgIG1fZnRsU3RhdGUuYmluYXJ5T3BzLmFwcGVuZChTbmlw
cGV0SUNEZXNjcmlwdG9yKHN0YWNrbWFwSUQsIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLCBsZWZ0
T3BlcmFuZCwgcmlnaHRPcGVyYW5kKSk7Ci0KLSAgICAgICAgc2V0SlNWYWx1ZShjYWxsKTsKLSNl
bmRpZgotICAgIH0KLQogICAgIHZvaWQgY29tcGlsZVVwc2lsb24oKQogICAgIHsKICAgICAgICAg
TFZhbHVlIHVwc2lsb25WYWx1ZSA9IG51bGxwdHI7CkBAIC0xMjIxLDE5ICs5NjYsMTMgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtp
bmQiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0jaWYgRlRMX1VTRVNfQjMKICAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgdXBzaWxvbiA9IG1fb3V0LmFuY2hvcih1cHNpbG9uVmFsdWUp
OwogICAgICAgICBMVmFsdWUgcGhpTm9kZSA9IG1fcGhpcy5nZXQobV9ub2RlLT5waGkoKSk7CiAg
ICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkocGhpTm9kZSwgdXBzaWxvbik7Ci0jZWxzZQot
ICAgICAgICBMVmFsdWUgZGVzdGluYXRpb24gPSBtX3BoaXMuZ2V0KG1fbm9kZS0+cGhpKCkpOwot
ICAgICAgICBtX291dC5zZXQodXBzaWxvblZhbHVlLCBkZXN0aW5hdGlvbik7Ci0jZW5kaWYKICAg
ICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlUGhpKCkKICAgICB7Ci0jaWYgRlRMX1VTRVNfQjMK
ICAgICAgICAgTFZhbHVlIHBoaSA9IG1fcGhpcy5nZXQobV9ub2RlKTsKICAgICAgICAgbV9vdXQu
bV9ibG9jay0+YXBwZW5kKHBoaSk7CiAKQEAgLTEyNTcsMzAgKzk5Niw2IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgTFZhbHVlIHNvdXJj
ZSA9IG1fcGhpcy5nZXQobV9ub2RlKTsKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAobV9ub2Rl
LT5mbGFncygpICYgTm9kZVJlc3VsdE1hc2spIHsKLSAgICAgICAgY2FzZSBOb2RlUmVzdWx0RG91
YmxlOgotICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LmdldChzb3VyY2UpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5vZGVSZXN1bHRJbnQzMjoKLSAgICAgICAgICAgIHNl
dEludDMyKG1fb3V0LmdldChzb3VyY2UpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIE5vZGVSZXN1bHRJbnQ1MjoKLSAgICAgICAgICAgIHNldEludDUyKG1fb3V0LmdldChzb3Vy
Y2UpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5vZGVSZXN1bHRCb29sZWFu
OgotICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5nZXQoc291cmNlKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBOb2RlUmVzdWx0SlM6Ci0gICAgICAgICAgICBzZXRKU1Zh
bHVlKG1fb3V0LmdldChzb3VyY2UpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2lu
ZCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSNlbmRpZgogICAgIH0KICAgICAK
ICAgICB2b2lkIGNvbXBpbGVEb3VibGVDb25zdGFudCgpCkBAIC0xNjY2LDExICsxMzgxLDcgQEAg
cHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVWYWx1ZUFkZCgpCiAgICAgewotI2lmIEZU
TF9VU0VTX0IzCiAgICAgICAgIGVtaXRCaW5hcnlTbmlwcGV0PEpJVEFkZEdlbmVyYXRvcj4ob3Bl
cmF0aW9uVmFsdWVBZGQpOwotI2Vsc2UgLy8gRlRMX1VTRVNfQjMKLSAgICAgICAgY29tcGlsZVVu
dHlwZWRCaW5hcnlPcDxWYWx1ZUFkZERlc2NyaXB0b3I+KCk7Ci0jZW5kaWYgLy8gRlRMX1VTRVNf
QjMKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlU3RyQ2F0KCkKQEAgLTE3MDQsNDcgKzE0
MTUsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
IAotI2lmIEZUTF9VU0VTX0IzCiAgICAgICAgICAgICBDaGVja1ZhbHVlKiByZXN1bHQgPQogICAg
ICAgICAgICAgICAgIGlzU3ViID8gbV9vdXQuc3BlY3VsYXRlU3ViKGxlZnQsIHJpZ2h0KSA6IG1f
b3V0LnNwZWN1bGF0ZUFkZChsZWZ0LCByaWdodCk7CiAgICAgICAgICAgICBibGVzc1NwZWN1bGF0
aW9uKHJlc3VsdCwgT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4pOwogICAg
ICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAgICAg
ICAgICBMVmFsdWUgcmVzdWx0OwotICAgICAgICAgICAgaWYgKCFpc1N1YikgewotICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IG1fb3V0LmFkZFdpdGhPdmVyZmxvdzMyKGxlZnQsIHJpZ2h0KTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoZG9lc0tpbGwobV9ub2RlLT5jaGls
ZDIoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgYWRkQXZhaWxhYmxlUmVjb3ZlcnkoCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtX25vZGUtPmNoaWxkMigpLCBTdWJSZWNvdmVyeSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDApLCBsZWZ0LCBE
YXRhRm9ybWF0SW50MzIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZG9lc0tpbGwobV9u
b2RlLT5jaGlsZDEoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgYWRkQXZhaWxhYmxlUmVjb3Zl
cnkoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX25vZGUtPmNoaWxkMSgpLCBTdWJSZWNvdmVy
eSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDAp
LCByaWdodCwgRGF0YUZvcm1hdEludDMyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LnN1YldpdGhPdmVyZmxv
dzMyKGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAo
ZG9lc0tpbGwobV9ub2RlLT5jaGlsZDIoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gcmVz
dWx0ID0gbGVmdCAtIHJpZ2h0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHJlc3VsdCAtIGxlZnQg
PSAtcmlnaHQKLSAgICAgICAgICAgICAgICAgICAgLy8gcmlnaHQgPSBsZWZ0IC0gcmVzdWx0Ci0g
ICAgICAgICAgICAgICAgICAgIGFkZEF2YWlsYWJsZVJlY292ZXJ5KAotICAgICAgICAgICAgICAg
ICAgICAgICAgbV9ub2RlLT5jaGlsZDIoKSwgU3ViUmVjb3ZlcnksCi0gICAgICAgICAgICAgICAg
ICAgICAgICBsZWZ0LCBtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAwKSwgRGF0YUZvcm1hdElu
dDMyKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRvZXNLaWxsKG1fbm9kZS0+Y2hpbGQx
KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHJlc3VsdCA9IGxlZnQgLSByaWdodAotICAg
ICAgICAgICAgICAgICAgICAvLyByZXN1bHQgKyByaWdodCA9IGxlZnQKLSAgICAgICAgICAgICAg
ICAgICAgYWRkQXZhaWxhYmxlUmVjb3ZlcnkoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX25v
ZGUtPmNoaWxkMSgpLCBBZGRSZWNvdmVyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0
LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDApLCByaWdodCwgRGF0YUZvcm1hdEludDMyKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVy
Zmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAxKSk7Ci0gICAg
ICAgICAgICBzZXRJbnQzMihtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAwKSk7Ci0jZW5kaWYg
Ly8gRlRMX1VTRVNfQjMKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKQEAgLTE3NjAsNDggKzE0MzQsMTAgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgTFZhbHVl
IGxlZnQgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIExWYWx1ZSBy
aWdodCA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQyKCkpOwotI2lmIEZUTF9VU0VTX0IzCiAgICAg
ICAgICAgICBDaGVja1ZhbHVlKiByZXN1bHQgPQogICAgICAgICAgICAgICAgIGlzU3ViID8gbV9v
dXQuc3BlY3VsYXRlU3ViKGxlZnQsIHJpZ2h0KSA6IG1fb3V0LnNwZWN1bGF0ZUFkZChsZWZ0LCBy
aWdodCk7CiAgICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9uKHJlc3VsdCwgT3ZlcmZsb3csIG5v
VmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4pOwogICAgICAgICAgICAgc2V0SW50NTIocmVzdWx0
KTsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0KLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQ7Ci0g
ICAgICAgICAgICBpZiAoIWlzU3ViKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQu
YWRkV2l0aE92ZXJmbG93NjQobGVmdCwgcmlnaHQpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGlmIChkb2VzS2lsbChtX25vZGUtPmNoaWxkMigpKSkgewotICAgICAgICAgICAg
ICAgICAgICBhZGRBdmFpbGFibGVSZWNvdmVyeSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
bm9kZS0+Y2hpbGQyKCksIFN1YlJlY292ZXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgbV9v
dXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMCksIGxlZnQsIERhdGFGb3JtYXRJbnQ1Mik7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChkb2VzS2lsbChtX25vZGUtPmNoaWxkMSgpKSkgewotICAg
ICAgICAgICAgICAgICAgICBhZGRBdmFpbGFibGVSZWNvdmVyeSgKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1fbm9kZS0+Y2hpbGQxKCksIFN1YlJlY292ZXJ5LAotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMCksIHJpZ2h0LCBEYXRhRm9ybWF0SW50
NTIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0ID0gbV9vdXQuc3ViV2l0aE92ZXJmbG93NjQobGVmdCwgcmlnaHQpOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChkb2VzS2lsbChtX25vZGUtPmNoaWxk
MigpKSkgewotICAgICAgICAgICAgICAgICAgICAvLyByZXN1bHQgPSBsZWZ0IC0gcmlnaHQKLSAg
ICAgICAgICAgICAgICAgICAgLy8gcmVzdWx0IC0gbGVmdCA9IC1yaWdodAotICAgICAgICAgICAg
ICAgICAgICAvLyByaWdodCA9IGxlZnQgLSByZXN1bHQKLSAgICAgICAgICAgICAgICAgICAgYWRk
QXZhaWxhYmxlUmVjb3ZlcnkoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX25vZGUtPmNoaWxk
MigpLCBTdWJSZWNvdmVyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQsIG1fb3V0LmV4
dHJhY3RWYWx1ZShyZXN1bHQsIDApLCBEYXRhRm9ybWF0SW50NTIpOwotICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoZG9lc0tpbGwobV9ub2RlLT5jaGlsZDEoKSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gcmVzdWx0ID0gbGVmdCAtIHJpZ2h0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHJl
c3VsdCArIHJpZ2h0ID0gbGVmdAotICAgICAgICAgICAgICAgICAgICBhZGRBdmFpbGFibGVSZWNv
dmVyeSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+Y2hpbGQxKCksIEFkZFJlY292
ZXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwg
MCksIHJpZ2h0LCBEYXRhRm9ybWF0SW50NTIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgc3BlY3VsYXRlKEludDUyT3ZlcmZsb3csIG5vVmFsdWUoKSwg
MCwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMSkpOwotICAgICAgICAgICAgc2V0SW50NTIo
bV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMCkpOwotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xODE5LDExICsx
NDU1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
IAotI2lmIEZUTF9VU0VTX0IzCiAgICAgICAgICAgICBlbWl0QmluYXJ5U25pcHBldDxKSVRTdWJH
ZW5lcmF0b3I+KG9wZXJhdGlvblZhbHVlU3ViKTsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAg
ICAgICAgICBjb21waWxlVW50eXBlZEJpbmFyeU9wPEFyaXRoU3ViRGVzY3JpcHRvciwgRG9lc05v
dEhhdmVDb25zdEludDMyT3BlcmFuZE9wdGltaXphdGlvbiwgRG9lc05vdEhhdmVDb25zdERvdWJs
ZU9wZXJhbmRPcHRpbWl6YXRpb24+KCk7Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE4NTEsMTUgKzE0ODMsOSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgaWYgKCFzaG91bGRDaGVja092ZXJmbG93KG1fbm9kZS0+YXJpdGhNb2RlKCkp
KQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0Lm11bChsZWZ0LCByaWdodCk7CiAgICAg
ICAgICAgICBlbHNlIHsKLSNpZiBGVExfVVNFU19CMwogICAgICAgICAgICAgICAgIENoZWNrVmFs
dWUqIHNwZWN1bGF0aW9uID0gbV9vdXQuc3BlY3VsYXRlTXVsKGxlZnQsIHJpZ2h0KTsKICAgICAg
ICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9uKHNwZWN1bGF0aW9uLCBPdmVyZmxvdywgbm9WYWx1
ZSgpLCBudWxscHRyLCBtX29yaWdpbik7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3BlY3Vs
YXRpb247Ci0jZWxzZSAvLyBGVExfVVNFU19CMwotICAgICAgICAgICAgICAgIExWYWx1ZSBvdmVy
Zmxvd1Jlc3VsdCA9IG1fb3V0Lm11bFdpdGhPdmVyZmxvdzMyKGxlZnQsIHJpZ2h0KTsKLSAgICAg
ICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQuZXh0cmFj
dFZhbHVlKG92ZXJmbG93UmVzdWx0LCAxKSk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9v
dXQuZXh0cmFjdFZhbHVlKG92ZXJmbG93UmVzdWx0LCAwKTsKLSNlbmRpZiAvLyBGVExfVVNFU19C
MwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc2hvdWxkQ2hl
Y2tOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aE1vZGUoKSkpIHsKQEAgLTE4ODUsMTQgKzE1MTEs
OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dXaGljaGV2ZXJJbnQ1
MihtX25vZGUtPmNoaWxkMSgpLCBraW5kKTsKICAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxv
d0ludDUyKG1fbm9kZS0+Y2hpbGQyKCksIG9wcG9zaXRlKGtpbmQpKTsKIAotI2lmIEZUTF9VU0VT
X0IzCiAgICAgICAgICAgICBDaGVja1ZhbHVlKiByZXN1bHQgPSBtX291dC5zcGVjdWxhdGVNdWwo
bGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgYmxlc3NTcGVjdWxhdGlvbihyZXN1bHQsIE92ZXJm
bG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2luKTsKLSNlbHNlIC8vIEZUTF9VU0VTX0Iz
Ci0gICAgICAgICAgICBMVmFsdWUgb3ZlcmZsb3dSZXN1bHQgPSBtX291dC5tdWxXaXRoT3ZlcmZs
b3c2NChsZWZ0LCByaWdodCk7Ci0gICAgICAgICAgICBzcGVjdWxhdGUoSW50NTJPdmVyZmxvdywg
bm9WYWx1ZSgpLCAwLCBtX291dC5leHRyYWN0VmFsdWUob3ZlcmZsb3dSZXN1bHQsIDEpKTsKLSAg
ICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5leHRyYWN0VmFsdWUob3ZlcmZsb3dSZXN1
bHQsIDApOwotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAKICAgICAgICAgICAgIGlmIChzaG91bGRD
aGVja05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAgICAgICAgICAg
IExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aE11bCBz
bG93IGNhc2UiKSk7CkBAIC0xOTE5LDExICsxNTM5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQog
CiAgICAgICAgIGNhc2UgVW50eXBlZFVzZTogewotI2lmIEZUTF9VU0VTX0IzCiAgICAgICAgICAg
ICBlbWl0QmluYXJ5U25pcHBldDxKSVRNdWxHZW5lcmF0b3I+KG9wZXJhdGlvblZhbHVlTXVsKTsK
LSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAgICAgICAgICBjb21waWxlVW50eXBlZEJpbmFyeU9w
PEFyaXRoTXVsRGVzY3JpcHRvcj4oKTsKLSNlbmRpZiAvLyBGVExfVVNFU19CMwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTk5MiwxMSArMTYwOCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIH0KIAogICAgICAgICBjYXNlIFVudHlwZWRVc2U6IHsKLSNpZiBGVExfVVNFU19CMwog
ICAgICAgICAgICAgZW1pdEJpbmFyeVNuaXBwZXQ8SklURGl2R2VuZXJhdG9yLCBOZWVkU2NyYXRj
aEZQUj4ob3BlcmF0aW9uVmFsdWVEaXYpOwotI2Vsc2UgLy8gRlRMX1VTRVNfQjMKLSAgICAgICAg
ICAgIGNvbXBpbGVVbnR5cGVkQmluYXJ5T3A8QXJpdGhEaXZEZXNjcmlwdG9yLCBIYXNDb25zdElu
dDMyT3BlcmFuZE9wdGltaXphdGlvbiwgSGFzQ29uc3REb3VibGVPcGVyYW5kT3B0aW1pemF0aW9u
PigpOwotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogCkBAIC0yMzExLDE3ICsxOTIzLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGVsc2UgaWYg
KCFzaG91bGRDaGVja05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAg
ICAgICAgICAgIC8vICIwIC0geCIgaXMgdGhlIGNhbm9uaWNhbCB3YXkgb2Ygc2F5aW5nICIteCIg
aW4gYm90aCBCMyBhbmQgTExWTS4gVGhpcyBnZXRzCiAgICAgICAgICAgICAgICAgLy8gbG93ZXJl
ZCB0byB0aGUgcmlnaHQgdGhpbmcuCi0jaWYgRlRMX1VTRVNfQjMKICAgICAgICAgICAgICAgICBD
aGVja1ZhbHVlKiBjaGVjayA9IG1fb3V0LnNwZWN1bGF0ZVN1YihtX291dC5pbnQzMlplcm8sIHZh
bHVlKTsKICAgICAgICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9uKGNoZWNrLCBPdmVyZmxvdywg
bm9WYWx1ZSgpLCBudWxscHRyLCBtX29yaWdpbik7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
Y2hlY2s7Ci0jZWxzZSAvLyBGVExfVVNFU19CMwotICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0
IGhhdmUgYSBuZWdhdGUtd2l0aC1vdmVyZmxvdyBpbnRyaW5zaWMuIEhvcGVmdWxseSB0aGlzCi0g
ICAgICAgICAgICAgICAgLy8gZG9lcyB0aGUgdHJpY2ssIHRob3VnaC4KLSAgICAgICAgICAgICAg
ICBMVmFsdWUgb3ZlcmZsb3dSZXN1bHQgPSBtX291dC5zdWJXaXRoT3ZlcmZsb3czMihtX291dC5p
bnQzMlplcm8sIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5v
VmFsdWUoKSwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKG92ZXJmbG93UmVzdWx0LCAxKSk7Ci0gICAg
ICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQuZXh0cmFjdFZhbHVlKG92ZXJmbG93UmVzdWx0LCAw
KTsKLSNlbmRpZiAvLyBGVExfVVNFU19CMwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQudGVzdElzWmVy
bzMyKHZhbHVlLCBtX291dC5jb25zdEludDMyKDB4N2ZmZmZmZmYpKSk7CiAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gbV9vdXQubmVnKHZhbHVlKTsKQEAgLTIzNDMsMTQgKzE5NDcsOCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBMVmFsdWUgdmFs
dWUgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxkMSgpKTsKLSNpZiBGVExfVVNFU19CMwogICAgICAg
ICAgICAgQ2hlY2tWYWx1ZSogcmVzdWx0ID0gbV9vdXQuc3BlY3VsYXRlU3ViKG1fb3V0LmludDY0
WmVybywgdmFsdWUpOwogICAgICAgICAgICAgYmxlc3NTcGVjdWxhdGlvbihyZXN1bHQsIEludDUy
T3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4pOwotI2Vsc2UgLy8gRlRMX1VT
RVNfQjMKLSAgICAgICAgICAgIExWYWx1ZSBvdmVyZmxvd1Jlc3VsdCA9IG1fb3V0LnN1YldpdGhP
dmVyZmxvdzY0KG1fb3V0LmludDY0WmVybywgdmFsdWUpOwotICAgICAgICAgICAgc3BlY3VsYXRl
KEludDUyT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKG92ZXJmbG93
UmVzdWx0LCAxKSk7Ci0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuZXh0cmFjdFZh
bHVlKG92ZXJmbG93UmVzdWx0LCAwKTsKLSNlbmRpZiAvLyBGVExfVVNFU19CMwogICAgICAgICAg
ICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCAwLCBtX291dC5pc1plcm82NChy
ZXN1bHQpKTsKICAgICAgICAgICAgIHNldEludDUyKHJlc3VsdCk7CiAgICAgICAgICAgICBicmVh
azsKQEAgLTIzNzAsMTEgKzE5NjgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZUJpdEFu
ZCgpCiAgICAgewogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVz
ZSkpIHsKLSNpZiBGVExfVVNFU19CMwogICAgICAgICAgICAgZW1pdEJpbmFyeUJpdE9wU25pcHBl
dDxKSVRCaXRBbmRHZW5lcmF0b3I+KG9wZXJhdGlvblZhbHVlQml0QW5kKTsKLSNlbHNlIC8vIEZU
TF9VU0VTX0IzCi0gICAgICAgICAgICBjb21waWxlVW50eXBlZEJpbmFyeU9wPEJpdEFuZERlc2Ny
aXB0b3I+KCk7Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICBzZXRJbnQzMihtX291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5j
aGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CkBAIC0yMzgzLDExICsxOTc3
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVCaXRPcigpCiAgICAgewogICAgICAgICBp
ZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpIHsKLSNpZiBGVExfVVNFU19C
MwogICAgICAgICAgICAgZW1pdEJpbmFyeUJpdE9wU25pcHBldDxKSVRCaXRPckdlbmVyYXRvcj4o
b3BlcmF0aW9uVmFsdWVCaXRPcik7Ci0jZWxzZSAvLyBGVExfVVNFU19CMwotICAgICAgICAgICAg
Y29tcGlsZVVudHlwZWRCaW5hcnlPcDxCaXRPckRlc2NyaXB0b3I+KCk7Ci0jZW5kaWYgLy8gRlRM
X1VTRVNfQjMKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBzZXRJbnQz
MihtX291dC5iaXRPcihsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2Rl
LT5jaGlsZDIoKSkpKTsKQEAgLTIzOTYsMTEgKzE5ODYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
Y29tcGlsZUJpdFhvcigpCiAgICAgewogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtp
bmQoVW50eXBlZFVzZSkpIHsKLSNpZiBGVExfVVNFU19CMwogICAgICAgICAgICAgZW1pdEJpbmFy
eUJpdE9wU25pcHBldDxKSVRCaXRYb3JHZW5lcmF0b3I+KG9wZXJhdGlvblZhbHVlQml0WG9yKTsK
LSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAgICAgICAgICBjb21waWxlVW50eXBlZEJpbmFyeU9w
PEJpdFhvckRlc2NyaXB0b3I+KCk7Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICBzZXRJbnQzMihtX291dC5iaXRYb3IobG93SW50
MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CkBAIC0y
NDA5LDExICsxOTk1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVCaXRSU2hpZnQoKQog
ICAgIHsKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFVudHlwZWRVc2UpKSB7
Ci0jaWYgRlRMX1VTRVNfQjMKICAgICAgICAgICAgIGVtaXRSaWdodFNoaWZ0U25pcHBldChKSVRS
aWdodFNoaWZ0R2VuZXJhdG9yOjpTaWduZWRTaGlmdCk7Ci0jZWxzZSAvLyBGVExfVVNFU19CMwot
ICAgICAgICAgICAgY29tcGlsZVVudHlwZWRCaW5hcnlPcDxCaXRSU2hpZnREZXNjcmlwdG9yPigp
OwotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgc2V0SW50MzIobV9vdXQuYVNocigKQEAgLTI0MjQsMTEgKzIwMDYsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgY29tcGlsZUJpdExTaGlmdCgpCiAgICAgewogICAgICAgICBpZiAobV9u
b2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpIHsKLSNpZiBGVExfVVNFU19CMwogICAg
ICAgICAgICAgZW1pdEJpbmFyeUJpdE9wU25pcHBldDxKSVRMZWZ0U2hpZnRHZW5lcmF0b3I+KG9w
ZXJhdGlvblZhbHVlQml0TFNoaWZ0KTsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAgICAgICAg
ICBjb21waWxlVW50eXBlZEJpbmFyeU9wPEJpdExTaGlmdERlc2NyaXB0b3I+KCk7Ci0jZW5kaWYg
Ly8gRlRMX1VTRVNfQjMKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBz
ZXRJbnQzMihtX291dC5zaGwoCkBAIC0yNDM5LDExICsyMDE3LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGNvbXBpbGVCaXRVUlNoaWZ0KCkKICAgICB7CiAgICAgICAgIGlmIChtX25vZGUtPmlzQmlu
YXJ5VXNlS2luZChVbnR5cGVkVXNlKSkgewotI2lmIEZUTF9VU0VTX0IzCiAgICAgICAgICAgICBl
bWl0UmlnaHRTaGlmdFNuaXBwZXQoSklUUmlnaHRTaGlmdEdlbmVyYXRvcjo6VW5zaWduZWRTaGlm
dCk7Ci0jZWxzZSAvLyBGVExfVVNFU19CMwotICAgICAgICAgICAgY29tcGlsZVVudHlwZWRCaW5h
cnlPcDxCaXRVUlNoaWZ0RGVzY3JpcHRvcj4oKTsKLSNlbmRpZiAvLyBGVExfVVNFU19CMwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHNldEludDMyKG1fb3V0LmxTaHIo
CkBAIC0yNjg3LDcgKzIyNjEsNiBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgdmFsdWUgPSBs
b3dKU1ZhbHVlKG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgYXV0byB1aWQgPSBtX2dyYXBoLmlk
ZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKIAotI2lmIEZUTF9VU0VTX0Iz
CiAgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBv
aW50KFZvaWQpOwogICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIoYmFzZSk7
CiAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3Rlcih2YWx1ZSk7CkBAIC0yNzQ1
LDMyICsyMzE4LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKLSNlbHNlCi0gICAgICAg
IC8vIEFyZ3VtZW50czogaWQsIGJ5dGVzLCB0YXJnZXQsIG51bUFyZ3MsIGFyZ3MuLi4KLSAgICAg
ICAgdW5zaWduZWQgc3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKLQotICAgICAgICBpZiAo
dmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIEVt
aXR0aW5nIFB1dEJ5SWQgcGF0Y2hwb2ludCB3aXRoIHN0YWNrbWFwICMiLCBzdGFja21hcElELCAi
XG4iKTsKLQotICAgICAgICBTdGFja21hcEFyZ3VtZW50TGlzdCBhcmd1bWVudHM7Ci0gICAgICAg
IGFyZ3VtZW50cy5hcHBlbmQoYmFzZSk7IAotICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHZhbHVl
KTsKLQotICAgICAgICBhcHBlbmRPU1JFeGl0QXJndW1lbnRzRm9yUGF0Y2hwb2ludElmV2lsbENh
dGNoRXhjZXB0aW9uKGFyZ3VtZW50cywgRXhjZXB0aW9uVHlwZTo6UHV0QnlJZCwgMik7IC8vIDIg
YXJndW1lbnRzIHNob3cgdXAgaW4gdGhlIHN0YWNrbWFwIGxvY2F0aW9uczogdGhlIGJhc2UgYW5k
IHRoZSB2YWx1ZS4KLQotICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAsIG1fb3V0LmNvbnN0SW50
MzIoMikpOyAKLSAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBjb25zdE51bGwobV9vdXQucmVm
OCkpOyAKLSAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBtX291dC5jb25zdEludDMyKHNpemVP
ZlB1dEJ5SWQoKSkpOwotICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAsIG1fb3V0LmNvbnN0SW50
NjQoc3RhY2ttYXBJRCkpOwotCi0gICAgICAgIExWYWx1ZSBjYWxsID0gbV9vdXQuY2FsbChtX291
dC52b2lkVHlwZSwgbV9vdXQucGF0Y2hwb2ludFZvaWRJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsK
LSAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNQW55UmVn
Q2FsbENvbnYpOwotICAgICAgICAKLSAgICAgICAgbV9mdGxTdGF0ZS5wdXRCeUlkcy5hcHBlbmQo
UHV0QnlJZERlc2NyaXB0b3IoCi0gICAgICAgICAgICBzdGFja21hcElELCBub2RlLT5vcmlnaW4u
c2VtYW50aWMsIHVpZCwKLSAgICAgICAgICAgIG1fZ3JhcGguZXhlY3V0YWJsZUZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpLT5lY21hTW9kZSgpLAotICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBQ
dXRCeUlkRGlyZWN0ID8gRGlyZWN0IDogTm90RGlyZWN0KSk7Ci0jZW5kaWYKICAgICB9CiAgICAg
CiAgICAgdm9pZCBjb21waWxlR2V0QnV0dGVyZmx5KCkKQEAgLTQ0MDksMTcgKzM5NTYsMTAgQEAg
cHJpdmF0ZToKICAgICAgICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0LmxvYWQzMihraWRzWzBdLCBt
X2hlYXBzLkpTU3RyaW5nX2xlbmd0aCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkg
PCBudW1LaWRzOyArK2kpIHsKICAgICAgICAgICAgIGZsYWdzID0gbV9vdXQuYml0QW5kKGZsYWdz
LCBtX291dC5sb2FkMzIoa2lkc1tpXSwgbV9oZWFwcy5KU1N0cmluZ19mbGFncykpOwotI2lmIEZU
TF9VU0VTX0IzCiAgICAgICAgICAgICBDaGVja1ZhbHVlKiBsZW5ndGhDaGVjayA9IG1fb3V0LnNw
ZWN1bGF0ZUFkZCgKICAgICAgICAgICAgICAgICBsZW5ndGgsIG1fb3V0LmxvYWQzMihraWRzW2ld
LCBtX2hlYXBzLkpTU3RyaW5nX2xlbmd0aCkpOwogICAgICAgICAgICAgYmxlc3NTcGVjdWxhdGlv
bihsZW5ndGhDaGVjaywgVW5jb3VudGFibGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4p
OwogICAgICAgICAgICAgbGVuZ3RoID0gbGVuZ3RoQ2hlY2s7Ci0jZWxzZSAvLyBGVExfVVNFU19C
MyAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIGxlbmd0aEFuZE92ZXJmbG93ID0gbV9v
dXQuYWRkV2l0aE92ZXJmbG93MzIoCi0gICAgICAgICAgICAgICAgbGVuZ3RoLCBtX291dC5sb2Fk
MzIoa2lkc1tpXSwgbV9oZWFwcy5KU1N0cmluZ19sZW5ndGgpKTsKLSAgICAgICAgICAgIHNwZWN1
bGF0ZShVbmNvdW50YWJsZSwgbm9WYWx1ZSgpLCAwLCBtX291dC5leHRyYWN0VmFsdWUobGVuZ3Ro
QW5kT3ZlcmZsb3csIDEpKTsKLSAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LmV4dHJhY3RWYWx1
ZShsZW5ndGhBbmRPdmVyZmxvdywgMCk7Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICAgICAg
fQogICAgICAgICBtX291dC5zdG9yZTMyKAogICAgICAgICAgICAgbV9vdXQuYml0QW5kKG1fb3V0
LmNvbnN0SW50MzIoSlNTdHJpbmc6OklzOEJpdCksIGZsYWdzKSwKQEAgLTUxNjksNyArNDcwOSw2
IEBAIHByaXZhdGU6CiAKICAgICAgICAgTFZhbHVlIGpzQ2FsbGVlID0gbG93SlNWYWx1ZShtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKIAotI2lmIEZUTF9VU0VTX0IzCiAgICAgICAgIHVu
c2lnbmVkIGZyYW1lU2l6ZSA9IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBudW1Bcmdz
OwogICAgICAgICB1bnNpZ25lZCBhbGlnbmVkRnJhbWVTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0
aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIGZyYW1lU2l6ZSk7CiAKQEAgLTUyNjMs
MzggKzQ4MDIsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgc2V0SlNW
YWx1ZShwYXRjaHBvaW50KTsKLSNlbHNlCi0gICAgICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQgPSBt
X3N0YWNrbWFwSURzKys7Ci0KLSAgICAgICAgdW5zaWduZWQgZnJhbWVTaXplID0gSlNTdGFjazo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIG51bUFyZ3M7Ci0gICAgICAgIHVuc2lnbmVkIGFsaWduZWRG
cmFtZVNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3Rl
cnMoKSwgZnJhbWVTaXplKTsKLSAgICAgICAgdW5zaWduZWQgcGFkZGluZyA9IGFsaWduZWRGcmFt
ZVNpemUgLSBmcmFtZVNpemU7Ci0gICAgICAgIC8vIERvY3VtZW50YXRpb24gYWJvdXQgc3RhY2tt
YXAgYW5kIHBhdGNocG9pbnQgaW50cmluc2ljczoKLSAgICAgICAgLy8gaHR0cDovL2xsdm0ub3Jn
L2RvY3MvU3RhY2tNYXBzLmh0bWwKLSAgICAgICAgU3RhY2ttYXBBcmd1bWVudExpc3QgYXJndW1l
bnRzOwotICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGpzQ2FsbGVlKTsgLy8gY2FsbGVlIC0+ICVy
YXgKLSAgICAgICAgYXJndW1lbnRzLmFwcGVuZChnZXRVbmRlZihtX291dC5pbnQ2NCkpOyAvLyBj
b2RlIGJsb2NrCi0gICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoanNDYWxsZWUpOyAvLyBjYWxsZWUg
LT4gc3RhY2sKLSAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDY0KG51bUFy
Z3MpKTsgLy8gYXJndW1lbnQgY291bnQgYW5kIHplcm9zIGZvciB0aGUgdGFnCi0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1BcmdzOyArK2kpCi0gICAgICAgICAgICBhcmd1bWVu
dHMuYXBwZW5kKGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxICsgaSkpKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhZGRpbmc7ICsraSkKLSAgICAgICAg
ICAgIGFyZ3VtZW50cy5hcHBlbmQoZ2V0VW5kZWYobV9vdXQuaW50NjQpKTsKLQotICAgICAgICBh
cHBlbmRPU1JFeGl0QXJndW1lbnRzRm9yUGF0Y2hwb2ludElmV2lsbENhdGNoRXhjZXB0aW9uKGFy
Z3VtZW50cywgRXhjZXB0aW9uVHlwZTo6SlNDYWxsLCAwKTsgLy8gTm8gY2FsbCBhcmd1bWVudHMg
c2hvdyB1cCBpbiB0aGUgc3RhY2ttYXAgbG9jYXRpb25zLgotCi0gICAgICAgIGFyZ3VtZW50cy5p
bnNlcnQoMCwgbV9vdXQuY29uc3RJbnQzMigxICsgYWxpZ25lZEZyYW1lU2l6ZSAtIEpTU3RhY2s6
OkNhbGxlckZyYW1lQW5kUENTaXplKSk7Ci0gICAgICAgIGFyZ3VtZW50cy5pbnNlcnQoMCwgY29u
c3ROdWxsKG1fb3V0LnJlZjgpKTsKLSAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBtX291dC5j
b25zdEludDMyKHNpemVPZkNhbGwoKSkpOwotICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAsIG1f
b3V0LmNvbnN0SW50NjQoc3RhY2ttYXBJRCkpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIGNh
bGwgPSBtX291dC5jYWxsKG1fb3V0LmludDY0LCBtX291dC5wYXRjaHBvaW50SW50NjRJbnRyaW5z
aWMoKSwgYXJndW1lbnRzKTsKLSAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlv
bihjYWxsLCBMTFZNV2ViS2l0SlNDYWxsQ29udik7Ci0gICAgICAgIAotICAgICAgICBtX2Z0bFN0
YXRlLmpzQ2FsbHMuYXBwZW5kKEpTQ2FsbChzdGFja21hcElELCBub2RlLCBjb2RlT3JpZ2luRGVz
Y3JpcHRpb25PZkNhbGxTaXRlKCkpKTsKLSAgICAgICAgCi0gICAgICAgIHNldEpTVmFsdWUoY2Fs
bCk7Ci0jZW5kaWYKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVUYWlsQ2FsbCgpCkBAIC01MzA0
LDcgKzQ4MTEsNiBAQCBwcml2YXRlOgogCiAgICAgICAgIExWYWx1ZSBqc0NhbGxlZSA9IGxvd0pT
VmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CiAgICAgICAgIAotI2lmIEZUTF9V
U0VTX0IzCiAgICAgICAgIC8vIFdlIHdhbnQgQjMgdG8gZ2l2ZSB1cyBhbGwgb2YgdGhlIGFyZ3Vt
ZW50cyB1c2luZyB3aGF0ZXZlciBtZWNoYW5pc20gaXQgdGhpbmtzIGlzCiAgICAgICAgIC8vIGNv
bnZlbmllbnQuIFRoZSBnZW5lcmF0b3IgdGhlbiBzaHVmZmxlcyB0aG9zZSBhcmd1bWVudHMgaW50
byBvdXIgb3duIGNhbGwgZnJhbWUsCiAgICAgICAgIC8vIGRlc3Ryb3lpbmcgb3VyIGZyYW1lIGlu
IHRoZSBwcm9jZXNzLgpAQCAtNTM5NiwzNiArNDkwMiw2IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFzdENhbGwp
KTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKLSNlbHNlCi0gICAg
ICAgIFN0YWNrbWFwQXJndW1lbnRMaXN0IGV4aXRBcmd1bWVudHM7Ci0gICAgICAgIGV4aXRBcmd1
bWVudHMucmVzZXJ2ZUNhcGFjaXR5KG51bUFyZ3MgKyA2KTsKLQotICAgICAgICB1bnNpZ25lZCBz
dGFja21hcElEID0gbV9zdGFja21hcElEcysrOwotICAgICAgICBleGl0QXJndW1lbnRzLmFwcGVu
ZChqc0NhbGxlZSk7Ci0gICAgICAgIGV4aXRBcmd1bWVudHMuYXBwZW5kKG1fdGFnVHlwZU51bWJl
cik7Ci0KLSAgICAgICAgVmVjdG9yPEV4aXRWYWx1ZT4gY2FsbEFyZ3VtZW50cyhudW1BcmdzKTsK
LQotICAgICAgICBib29sIG5lZWRzVGFnVHlwZU51bWJlciB7IGZhbHNlIH07Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1BcmdzOyArK2kpIHsKLSAgICAgICAgICAgIGNhbGxB
cmd1bWVudHNbaV0gPQotICAgICAgICAgICAgICAgIGV4aXRWYWx1ZUZvclRhaWxDYWxsKGV4aXRB
cmd1bWVudHMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSArIGkpLm5vZGUoKSk7Ci0gICAg
ICAgICAgICBpZiAoY2FsbEFyZ3VtZW50c1tpXS5kYXRhRm9ybWF0KCkgPT0gRGF0YUZvcm1hdElu
dDMyKQotICAgICAgICAgICAgICAgIG5lZWRzVGFnVHlwZU51bWJlciA9IHRydWU7Ci0gICAgICAg
IH0KLQotICAgICAgICBKU1RhaWxDYWxsIHRhaWxDYWxsKHN0YWNrbWFwSUQsIG5vZGUsIFdURk1v
dmUoY2FsbEFyZ3VtZW50cykpOwotCi0gICAgICAgIGV4aXRBcmd1bWVudHMuaW5zZXJ0KDAsIG1f
b3V0LmNvbnN0SW50MzIobmVlZHNUYWdUeXBlTnVtYmVyID8gMiA6IDEpKTsKLSAgICAgICAgZXhp
dEFyZ3VtZW50cy5pbnNlcnQoMCwgY29uc3ROdWxsKG1fb3V0LnJlZjgpKTsKLSAgICAgICAgZXhp
dEFyZ3VtZW50cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJbnQzMih0YWlsQ2FsbC5lc3RpbWF0ZWRT
aXplKCkpKTsKLSAgICAgICAgZXhpdEFyZ3VtZW50cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJbnQ2
NChzdGFja21hcElEKSk7Ci0KLSAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKG1fb3V0
LnZvaWRUeXBlLCBtX291dC5wYXRjaHBvaW50Vm9pZEludHJpbnNpYygpLCBleGl0QXJndW1lbnRz
KTsKLSAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNQW55
UmVnQ2FsbENvbnYpOwotCi0gICAgICAgIG1fZnRsU3RhdGUuanNUYWlsQ2FsbHMuYXBwZW5kKHRh
aWxDYWxsKTsKLSNlbmRpZgogICAgICAgICAKICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsK
ICAgICB9CkBAIC01NDU3LDcgKzQ5MzMsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgCi0jaWYgRlRMX1VTRVNfQjMKICAgICAgICAgUGF0Y2hwb2lu
dFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7CiAKICAgICAgICAg
Ly8gQXBwZW5kIHRoZSBmb3JtcyBvZiB0aGUgYXJndW1lbnRzIHRoYXQgd2Ugd2lsbCB1c2UgYmVm
b3JlIGFueSBjbG9iYmVyaW5nIGhhcHBlbnMuCkBAIC01Njk5LDM5ICs1MTc0LDYgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHNldEpTVmFsdWUocGF0Y2hwb2ludCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGZvcndhcmRpbmcpOwot
ICAgICAgICB1bnNpZ25lZCBzdGFja21hcElEID0gbV9zdGFja21hcElEcysrOwotICAgICAgICAK
LSAgICAgICAgU3RhY2ttYXBBcmd1bWVudExpc3QgYXJndW1lbnRzOwotICAgICAgICBhcmd1bWVu
dHMuYXBwZW5kKGpzQ2FsbGVlKTsKLSAgICAgICAgaWYgKGpzQXJndW1lbnRzKQotICAgICAgICAg
ICAgYXJndW1lbnRzLmFwcGVuZChqc0FyZ3VtZW50cyk7Ci0gICAgICAgIEFTU0VSVCh0aGlzQXJn
KTsKLSAgICAgICAgYXJndW1lbnRzLmFwcGVuZCh0aGlzQXJnKTsKLQotICAgICAgICBhcHBlbmRP
U1JFeGl0QXJndW1lbnRzRm9yUGF0Y2hwb2ludElmV2lsbENhdGNoRXhjZXB0aW9uKGFyZ3VtZW50
cywgRXhjZXB0aW9uVHlwZTo6SlNDYWxsLCAwKTsgLy8gTm8gY2FsbCBhcmd1bWVudHMgc2hvdyB1
cCBpbiBzdGFja21hcCBsb2NhdGlvbnMuCi0KLSAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBt
X291dC5jb25zdEludDMyKDIgKyAhIWpzQXJndW1lbnRzKSk7Ci0gICAgICAgIGFyZ3VtZW50cy5p
bnNlcnQoMCwgY29uc3ROdWxsKG1fb3V0LnJlZjgpKTsKLSAgICAgICAgYXJndW1lbnRzLmluc2Vy
dCgwLCBtX291dC5jb25zdEludDMyKHNpemVPZklDRm9yKG5vZGUpKSk7Ci0gICAgICAgIGFyZ3Vt
ZW50cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJbnQ2NChzdGFja21hcElEKSk7Ci0gICAgICAgIAot
ICAgICAgICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwobV9vdXQuaW50NjQsIG1fb3V0LnBhdGNo
cG9pbnRJbnQ2NEludHJpbnNpYygpLCBhcmd1bWVudHMpOwotICAgICAgICBzZXRJbnN0cnVjdGlv
bkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1DQ2FsbENvbnYpOwotICAgICAgICAKLSAgICAg
ICAgbV9mdGxTdGF0ZS5qc0NhbGxWYXJhcmdzZXMuYXBwZW5kKEpTQ2FsbFZhcmFyZ3Moc3RhY2tt
YXBJRCwgbm9kZSwgY29kZU9yaWdpbkRlc2NyaXB0aW9uT2ZDYWxsU2l0ZSgpKSk7Ci0KLSAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgot
ICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgICAgICBtX291dC51
bnJlYWNoYWJsZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIHNldEpTVmFsdWUoY2FsbCk7Ci0gICAgICAgIH0KLSNlbmRpZgogICAgIH0KICAg
ICAKICAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncygpCkBAIC02MDkzLDcgKzU1MzUsNiBAQCBw
cml2YXRlOgogCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtX29yaWdpbi5l
eGl0T0spOwogICAgICAgICAKLSNpZiBGVExfVVNFU19CMwogICAgICAgICBQYXRjaHBvaW50VmFs
dWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBvaW50KFZvaWQpOwogICAgICAgICBPU1JFeGl0
RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IGFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKG5vVmFsdWUo
KSwgbnVsbHB0cik7CiAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbV9vcmlnaW47CkBAIC02
MTQwLDE1ICs1NTgxLDYgQEAgcHJpdmF0ZToKIAogICAgICAgICAvLyBXaGVuIHRoaXMgYWJydXB0
bHkgdGVybWluYXRlcywgaXQgY291bGQgcmVhZCBhbnkgaGVhcCBsb2NhdGlvbi4KICAgICAgICAg
cGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkcyA9IEhlYXBSYW5nZTo6dG9wKCk7Ci0jZWxzZSAvLyBG
VExfVVNFU19CMwotCi0gICAgICAgIE9TUkV4aXREZXNjcmlwdG9yKiBleGl0RGVzY3JpcHRvciA9
IGFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKFVuY291bnRhYmxlSW52YWxpZGF0aW9uLCBFeGNlcHRp
b25UeXBlOjpOb25lLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2luKTsKLSAgICAgICAgCi0g
ICAgICAgIFN0YWNrbWFwQXJndW1lbnRMaXN0IGFyZ3VtZW50cyA9IGJ1aWxkRXhpdEFyZ3VtZW50
cyhleGl0RGVzY3JpcHRvciwgbV9mdGxTdGF0ZS5vc3JFeGl0RGVzY3JpcHRvckltcGxzLmxhc3Qo
KS5tX2NvZGVPcmlnaW4sIEZvcm1hdHRlZFZhbHVlKCkpOwotICAgICAgICBjYWxsU3RhY2ttYXAo
ZXhpdERlc2NyaXB0b3IsIGFyZ3VtZW50cyk7Ci0gICAgICAgIAotICAgICAgICBleGl0RGVzY3Jp
cHRvci0+bV9pc0ludmFsaWRhdGlvblBvaW50ID0gdHJ1ZTsKLSNlbmRpZiAvLyBGVExfVVNFU19C
MwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVJc1VuZGVmaW5lZCgpCkBAIC02MzMzLDcg
KzU3NjUsNiBAQCBwcml2YXRlOgogICAgICAgICBpZiAoSlNTdHJpbmcqIHN0cmluZyA9IG5vZGUt
PmNoaWxkMSgpLT5keW5hbWljQ2FzdENvbnN0YW50PEpTU3RyaW5nKj4oKSkgewogICAgICAgICAg
ICAgaWYgKHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCkgJiYgc3RyaW5nLT50cnlHZXRWYWx1ZUlt
cGwoKS0+aXNBdG9taWMoKSkgewogICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBz
dHIgPSBiaXR3aXNlX2Nhc3Q8VW5pcXVlZFN0cmluZ0ltcGwqPihzdHJpbmctPnRyeUdldFZhbHVl
SW1wbCgpKTsKLSNpZiBGVExfVVNFU19CMwogICAgICAgICAgICAgICAgIEIzOjpQYXRjaHBvaW50
VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBvaW50KEludDY0KTsKICAgICAgICAgICAg
ICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIoY2VsbCk7CiAgICAgICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJz
KCkpOwpAQCAtNjM5MywxOSArNTgyNCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IH0pOwogCiAgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50KTsKLSNlbHNlIC8v
IEZUTF9VU0VTX0IzCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCA9IG1fc3Rh
Y2ttYXBJRHMrKzsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIExWYWx1ZSBjYWxsID0g
bV9vdXQuY2FsbCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0LnBhdGNo
cG9pbnRJbnQ2NEludHJpbnNpYygpLAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdElu
dDY0KHN0YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZkluKCkpLAotICAgICAgICAg
ICAgICAgICAgICBjb25zdE51bGwobV9vdXQucmVmOCksIG1fb3V0LmNvbnN0SW50MzIoMSksIGNl
bGwpOwotCi0gICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihj
YWxsLCBMTFZNQW55UmVnQ2FsbENvbnYpOwotCi0gICAgICAgICAgICAgICAgbV9mdGxTdGF0ZS5j
aGVja0lucy5hcHBlbmQoQ2hlY2tJbkRlc2NyaXB0b3Ioc3RhY2ttYXBJRCwgbm9kZS0+b3JpZ2lu
LnNlbWFudGljLCBzdHIpKTsKLSAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGNhbGwpOwotI2Vu
ZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQogICAgICAgICB9IApAQCAtNzQxMyw3ICs2ODMxLDYgQEAgcHJpdmF0ZToKICAgICAgICAgTm9k
ZSogbm9kZSA9IG1fbm9kZTsKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3Jh
cGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldOwogCi0jaWYgRlRMX1VT
RVNfQjMKICAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBh
dGNocG9pbnQoSW50NjQpOwogICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIo
YmFzZSk7CiAKQEAgLTc0NzUsMzAgKzY4OTIsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgfSk7
CiAKICAgICAgICAgcmV0dXJuIHBhdGNocG9pbnQ7Ci0jZWxzZQotICAgICAgICAvLyBBcmd1bWVu
dHM6IGlkLCBieXRlcywgdGFyZ2V0LCBudW1BcmdzLCBhcmdzLi4uCi0gICAgICAgIHVuc2lnbmVk
IHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7Ci0gICAgICAgIAotICAgICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgRW1p
dHRpbmcgR2V0QnlJZCBwYXRjaHBvaW50IHdpdGggc3RhY2ttYXAgIyIsIHN0YWNrbWFwSUQsICJc
biIpOwotICAgICAgICAKLSAgICAgICAgU3RhY2ttYXBBcmd1bWVudExpc3QgYXJndW1lbnRzOwot
ICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGJhc2UpOwotCi0gICAgICAgIGFwcGVuZE9TUkV4aXRB
cmd1bWVudHNGb3JQYXRjaHBvaW50SWZXaWxsQ2F0Y2hFeGNlcHRpb24oYXJndW1lbnRzLCBFeGNl
cHRpb25UeXBlOjpHZXRCeUlkLCAyKTsgLy8gMiBhcmd1bWVudHMgc2hvdyB1cCBpbiB0aGUgc3Rh
Y2ttYXAgbG9jYXRpb25zOiB0aGUgcmVzdWx0IGFuZCB0aGUgYmFzZS4KLQotICAgICAgICBhcmd1
bWVudHMuaW5zZXJ0KDAsIG1fb3V0LmNvbnN0SW50MzIoMSkpOyAKLSAgICAgICAgYXJndW1lbnRz
Lmluc2VydCgwLCBjb25zdE51bGwobV9vdXQucmVmOCkpOwotICAgICAgICBhcmd1bWVudHMuaW5z
ZXJ0KDAsIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mR2V0QnlJZCgpKSk7Ci0gICAgICAgIGFyZ3Vt
ZW50cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJbnQ2NChzdGFja21hcElEKSk7IAotCi0gICAgICAg
IExWYWx1ZSBjYWxsID0gbV9vdXQuY2FsbChtX291dC5pbnQ2NCwgbV9vdXQucGF0Y2hwb2ludElu
dDY0SW50cmluc2ljKCksIGFyZ3VtZW50cyk7Ci0gICAgICAgIHNldEluc3RydWN0aW9uQ2FsbGlu
Z0NvbnZlbnRpb24oY2FsbCwgTExWTUFueVJlZ0NhbGxDb252KTsKLSAgICAgICAgCi0gICAgICAg
IG1fZnRsU3RhdGUuZ2V0QnlJZHMuYXBwZW5kKEdldEJ5SWREZXNjcmlwdG9yKHN0YWNrbWFwSUQs
IG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgdWlkKSk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4g
Y2FsbDsKLSNlbmRpZgogICAgIH0KIAogICAgIExWYWx1ZSBsb2FkQnV0dGVyZmx5V2l0aEJhcnJp
ZXIoTFZhbHVlIG9iamVjdCkKQEAgLTc4MjgsNyArNzIyMSw2IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBtX291dC5waGkobV9vdXQuYm9vbGVhbiwgdHJ1ZVJlc3VsdCwgZmFsc2VSZXN1bHQs
IHNsb3dSZXN1bHQpOwogICAgIH0KIAotI2lmIEZUTF9VU0VTX0IzCiAgICAgZW51bSBTY3JhdGNo
RlBSVXNhZ2UgewogICAgICAgICBEb250TmVlZFNjcmF0Y2hGUFIsCiAgICAgICAgIE5lZWRTY3Jh
dGNoRlBSCkBAIC04MDEzLDcgKzc0MDUsNiBAQCBwcml2YXRlOgogCiAgICAgICAgIHNldEpTVmFs
dWUocGF0Y2hwb2ludCk7CiAgICAgfQotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAKICAgICBMVmFs
dWUgYWxsb2NhdGVDZWxsKExWYWx1ZSBhbGxvY2F0b3IsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQog
ICAgIHsKQEAgLTkxMzUsNyArODUyNiw2IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KICAgICBMVmFsdWUgbGF6eVNsb3dQYXRoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IsIGNvbnN0IFZlY3RvcjxMVmFsdWU+JiB1c2VyQXJndW1lbnRzKQogICAgIHsKLSNpZiBGVExf
VVNFU19CMwogICAgICAgICBDb2RlT3JpZ2luIG9yaWdpbiA9IG1fbm9kZS0+b3JpZ2luLnNlbWFu
dGljOwogICAgICAgICAKICAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiByZXN1bHQgPSBtX291dC5w
YXRjaHBvaW50KEIzOjpJbnQ2NCk7CkBAIC05MjA5LDI4ICs4NTk5LDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSNlbHNlCi0gICAgICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURz
Kys7Ci0KLSAgICAgICAgU3RhY2ttYXBBcmd1bWVudExpc3QgYXJndW1lbnRzOwotICAgICAgICBh
cmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50NjQoc3RhY2ttYXBJRCkpOwotICAgICAgICBh
cmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50MzIoTWFjcm9Bc3NlbWJsZXI6Om1heEp1bXBS
ZXBsYWNlbWVudFNpemUoKSkpOwotICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGNvbnN0TnVsbCht
X291dC5yZWY4KSk7Ci0gICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMih1
c2VyQXJndW1lbnRzLnNpemUoKSkpOwotICAgICAgICBhcmd1bWVudHMuYXBwZW5kVmVjdG9yKHVz
ZXJBcmd1bWVudHMpOwotCi0gICAgICAgIGFwcGVuZE9TUkV4aXRBcmd1bWVudHNGb3JQYXRjaHBv
aW50SWZXaWxsQ2F0Y2hFeGNlcHRpb24oYXJndW1lbnRzLCBFeGNlcHRpb25UeXBlOjpMYXp5U2xv
d1BhdGgsIHVzZXJBcmd1bWVudHMuc2l6ZSgpICsgMSk7IC8vIEFsbCB0aGUgYXJndW1lbnRzIHBs
dXMgdGhlIHJlc3VsdCBzaG93IHVwIGluIHRoZSBzdGFja21hcCBsb2NhdGlvbnMuCi0KLSAgICAg
ICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKG1fb3V0LmludDY0LCBtX291dC5wYXRjaHBvaW50
SW50NjRJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKLSAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxs
aW5nQ29udmVudGlvbihjYWxsLCBMTFZNQW55UmVnQ2FsbENvbnYpOwotICAgICAgICAKLSAgICAg
ICAgUmVmUHRyPExhenlTbG93UGF0aExpbmtlclRhc2s+IGxpbmtlciA9Ci0gICAgICAgICAgICBj
cmVhdGVTaGFyZWRUYXNrPExhenlTbG93UGF0aExpbmtlckZ1bmN0aW9uPihmdW5jdG9yKTsKLQot
ICAgICAgICBtX2Z0bFN0YXRlLmxhenlTbG93UGF0aHMuYXBwZW5kKExhenlTbG93UGF0aERlc2Ny
aXB0b3Ioc3RhY2ttYXBJRCwgbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMsIGxpbmtlcikpOwotCi0g
ICAgICAgIHJldHVybiBjYWxsOwotI2VuZGlmCiAgICAgfQogICAgIAogICAgIHZvaWQgc3BlY3Vs
YXRlKApAQCAtMTA0NjgsNyArOTgzNiw2IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbik7CiAgICAgfQogCi0jaWYgRlRMX1VTRVNfQjMKICAgICBSZWZQdHI8
UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25z
KFBhdGNocG9pbnRWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBDb2RlT3JpZ2luIG9wQ2F0
Y2hPcmlnaW47CkBAIC0xMDUwNCw1MCArOTg3MSwxMiBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6Y3JlYXRlKAogICAgICAgICAgICAgbV9mdGxT
dGF0ZSwgZXhpdERlc2NyaXB0b3IsIG9yaWdpbiwgb2Zmc2V0LCAqZXhjZXB0aW9uSGFuZGxlcik7
CiAgICAgfQotI2Vsc2UgLy8gRlRMX1VTRVNfQjMKLSAgICB2b2lkIGFwcGVuZE9TUkV4aXRBcmd1
bWVudHNGb3JQYXRjaHBvaW50SWZXaWxsQ2F0Y2hFeGNlcHRpb24oU3RhY2ttYXBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgRXhjZXB0aW9uVHlwZSBleGNlcHRpb25UeXBlLCB1bnNpZ25lZCBvZmZz
ZXRPZkV4aXRBcmd1bWVudHMpCi0gICAgewotICAgICAgICBDb2RlT3JpZ2luIG9wQ2F0Y2hPcmln
aW47Ci0gICAgICAgIEhhbmRsZXJJbmZvKiBleGNlcHRpb25IYW5kbGVyOwotICAgICAgICBib29s
IHdpbGxDYXRjaEV4Y2VwdGlvbiA9IG1fZ3JhcGgud2lsbENhdGNoRXhjZXB0aW9uSW5NYWNoaW5l
RnJhbWUobV9vcmlnaW4uZm9yRXhpdCwgb3BDYXRjaE9yaWdpbiwgZXhjZXB0aW9uSGFuZGxlcik7
Ci0gICAgICAgIGlmICghd2lsbENhdGNoRXhjZXB0aW9uKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIEV4aXRLaW5kIGV4aXRLaW5kOwotICAgICAgICBzd2l0Y2ggKGV4Y2VwdGlvblR5
cGUpIHsKLSAgICAgICAgY2FzZSBFeGNlcHRpb25UeXBlOjpKU0NhbGw6Ci0gICAgICAgIGNhc2Ug
RXhjZXB0aW9uVHlwZTo6R2V0QnlJZDoKLSAgICAgICAgY2FzZSBFeGNlcHRpb25UeXBlOjpQdXRC
eUlkOgotICAgICAgICAgICAgZXhpdEtpbmQgPSBHZW5lcmljVW53aW5kOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRXhjZXB0aW9uVHlwZTo6TGF6eVNsb3dQYXRoOgotICAgICAg
ICBjYXNlIEV4Y2VwdGlvblR5cGU6OkJpbmFyeU9wR2VuZXJhdG9yOgotICAgICAgICAgICAgZXhp
dEtpbmQgPSBFeGNlcHRpb25DaGVjazsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKGV4aXRLaW5kLCBleGNlcHRpb25U
eXBlLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2luLndpdGhGb3JFeGl0QW5kRXhpdE9LKG9w
Q2F0Y2hPcmlnaW4sIHRydWUpKTsKLSAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNj
cmlwdG9yID0gJm1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdERlc2NyaXB0b3JzLmxhc3QoKTsK
LSAgICAgICAgZXhpdERlc2NyaXB0b3ItPm1fc3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMgLSAx
OwotCi0gICAgICAgIE9TUkV4aXREZXNjcmlwdG9ySW1wbCYgZXhpdERlc2NyaXB0b3JJbXBsID0g
bV9mdGxTdGF0ZS5vc3JFeGl0RGVzY3JpcHRvckltcGxzLmxhc3QoKTsKLSAgICAgICAgZXhpdERl
c2NyaXB0b3JJbXBsLm1fc2VtYW50aWNDb2RlT3JpZ2luRm9yQ2FsbEZyYW1lSGVhZGVyID0gY29k
ZU9yaWdpbkRlc2NyaXB0aW9uT2ZDYWxsU2l0ZSgpOwotICAgICAgICBleGl0RGVzY3JpcHRvcklt
cGwubV9iYXNlbGluZUV4Y2VwdGlvbkhhbmRsZXIgPSAqZXhjZXB0aW9uSGFuZGxlcjsKLQotICAg
ICAgICBTdGFja21hcEFyZ3VtZW50TGlzdCBmcmVzaExpc3QgPQotICAgICAgICAgICAgYnVpbGRF
eGl0QXJndW1lbnRzKGV4aXREZXNjcmlwdG9yLCBleGl0RGVzY3JpcHRvckltcGwubV9jb2RlT3Jp
Z2luLCBub1ZhbHVlKCksIG9mZnNldE9mRXhpdEFyZ3VtZW50cyk7Ci0gICAgICAgIGFyZ3VtZW50
cy5hcHBlbmRWZWN0b3IoZnJlc2hMaXN0KTsKLSAgICB9Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMK
IAogICAgIExCYXNpY0Jsb2NrIGxvd0Jsb2NrKERGRzo6QmFzaWNCbG9jayogYmxvY2spCiAgICAg
ewogICAgICAgICByZXR1cm4gbV9ibG9ja3MuZ2V0KGJsb2NrKTsKICAgICB9CiAKLSNpZiBGVExf
VVNFU19CMwogICAgIE9TUkV4aXREZXNjcmlwdG9yKiBhcHBlbmRPU1JFeGl0RGVzY3JpcHRvcihG
b3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlKQogICAgIHsKICAgICAgICAg
cmV0dXJuICZtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXREZXNjcmlwdG9ycy5hbGxvYygKQEAg
LTEwNTU1LDE4ICs5ODg0LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1h
cCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksCiAgICAgICAgICAgICBhdmFpbGFiaWxp
dHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpKTsKICAgICB9Ci0jZWxzZSAvLyBGVExf
VVNFU19CMwotICAgIE9TUkV4aXREZXNjcmlwdG9yKiBhcHBlbmRPU1JFeGl0RGVzY3JpcHRvcihF
eGl0S2luZCBraW5kLCBFeGNlcHRpb25UeXBlIGV4Y2VwdGlvblR5cGUsIEZvcm1hdHRlZFZhbHVl
IGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIE5vZGVPcmlnaW4gb3JpZ2luKQotICAgIHsKLSAg
ICAgICAgT1NSRXhpdERlc2NyaXB0b3ImIHJlc3VsdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3Ny
RXhpdERlc2NyaXB0b3JzLmFsbG9jKAotICAgICAgICAgICAgbG93VmFsdWUuZm9ybWF0KCksIG1f
Z3JhcGgubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihoaWdoVmFsdWUpLAotICAgICAg
ICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwKLSAg
ICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCkpOwot
ICAgICAgICBtX2Z0bFN0YXRlLm9zckV4aXREZXNjcmlwdG9ySW1wbHMuYWxsb2MoCi0gICAgICAg
ICAgICBraW5kLCBvcmlnaW4uZm9yRXhpdCwgb3JpZ2luLnNlbWFudGljLCBleGNlcHRpb25UeXBl
KTsKLSAgICAgICAgcmV0dXJuICZyZXN1bHQ7Ci0gICAgfQotI2VuZGlmIC8vIEZUTF9VU0VTX0Iz
CiAgICAgCiAgICAgdm9pZCBhcHBlbmRPU1JFeGl0KAogICAgICAgICBFeGl0S2luZCBraW5kLCBG
b3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRp
dGlvbiwgCkBAIC0xMDYwMiwzNiArOTkxOSwxMCBAQCBwcml2YXRlOgogICAgICAgICBpZiAoZmFp
bENvbmRpdGlvbiA9PSBtX291dC5ib29sZWFuRmFsc2UpCiAgICAgICAgICAgICByZXR1cm47CiAK
LSNpZiBGVExfVVNFU19CMwogICAgICAgICBibGVzc1NwZWN1bGF0aW9uKAogICAgICAgICAgICAg
bV9vdXQuc3BlY3VsYXRlKGZhaWxDb25kaXRpb24pLCBraW5kLCBsb3dWYWx1ZSwgaGlnaFZhbHVl
LCBvcmlnaW4pOwotI2Vsc2UgLy8gRlRMX1VTRVNfQjMKLSAgICAgICAgT1NSRXhpdERlc2NyaXB0
b3IqIGV4aXREZXNjcmlwdG9yID0gYXBwZW5kT1NSRXhpdERlc2NyaXB0b3Ioa2luZCwgaXNFeGNl
cHRpb25IYW5kbGVyID8gRXhjZXB0aW9uVHlwZTo6Q0NhbGxFeGNlcHRpb24gOiBFeGNlcHRpb25U
eXBlOjpOb25lLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCBvcmlnaW4pOwotCi0gICAgICAgIGlmIChm
YWlsQ29uZGl0aW9uID09IG1fb3V0LmJvb2xlYW5UcnVlKSB7Ci0gICAgICAgICAgICBlbWl0T1NS
RXhpdENhbGwoZXhpdERlc2NyaXB0b3IsIGxvd1ZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbnVsbHB0cjsKLSAg
ICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbnVsbHB0cjsKLSAgICAgICAgCi0gICAg
ICAgIExCYXNpY0Jsb2NrIGZhaWxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJPU1IgZXhp
dCBmYWlsQ2FzZSBmb3IgIiwgbV9ub2RlKSk7Ci0gICAgICAgIGNvbnRpbnVhdGlvbiA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiT1NSIGV4aXQgY29udGludWF0aW9uIGZvciAiLCBtX25vZGUpKTsK
LSAgICAgICAgCi0gICAgICAgIG1fb3V0LmJyYW5jaChmYWlsQ29uZGl0aW9uLCByYXJlbHkoZmFp
bENhc2UpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbikpOwotICAgICAgICAKLSAgICAgICAgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhmYWlsQ2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgCi0g
ICAgICAgIGVtaXRPU1JFeGl0Q2FsbChleGl0RGVzY3JpcHRvciwgbG93VmFsdWUpOwotICAgICAg
ICAKLSAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotI2VuZGlmIC8vIEZUTF9VU0VTX0Iz
CiAgICAgfQogCi0jaWYgRlRMX1VTRVNfQjMKICAgICB2b2lkIGJsZXNzU3BlY3VsYXRpb24oQ2hl
Y2tWYWx1ZSogdmFsdWUsIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBO
b2RlKiBoaWdoVmFsdWUsIE5vZGVPcmlnaW4gb3JpZ2luKQogICAgIHsKICAgICAgICAgT1NSRXhp
dERlc2NyaXB0b3IqIGV4aXREZXNjcmlwdG9yID0gYXBwZW5kT1NSRXhpdERlc2NyaXB0b3IobG93
VmFsdWUsIGhpZ2hWYWx1ZSk7CkBAIC0xMDY0NSwxNCArOTkzNiw2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgICpzdGF0ZSwga2luZCwgb3JpZ2luLCBqaXQsIHBhcmFtcywgMCk7CiAg
ICAgICAgICAgICB9KTsKICAgICB9Ci0jZW5kaWYKLQotI2lmICFGVExfVVNFU19CMwotICAgIHZv
aWQgZW1pdE9TUkV4aXRDYWxsKE9TUkV4aXREZXNjcmlwdG9yKiBleGl0RGVzY3JpcHRvciwgRm9y
bWF0dGVkVmFsdWUgbG93VmFsdWUpCi0gICAgewotICAgICAgICBjYWxsU3RhY2ttYXAoZXhpdERl
c2NyaXB0b3IsIGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0RGVzY3JpcHRvciwgbV9mdGxTdGF0ZS5v
c3JFeGl0RGVzY3JpcHRvckltcGxzLmxhc3QoKS5tX2NvZGVPcmlnaW4sIGxvd1ZhbHVlKSk7Ci0g
ICAgfQotI2VuZGlmCiAKICAgICBTdGFja21hcEFyZ3VtZW50TGlzdCBidWlsZEV4aXRBcmd1bWVu
dHMoCiAgICAgICAgIE9TUkV4aXREZXNjcmlwdG9yKiBleGl0RGVzY3JpcHRvciwgQ29kZU9yaWdp
biBleGl0T3JpZ2luLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwKQEAgLTEwNzI4LDE3ICsxMDAx
MSw2IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKLSNpZiAhRlRMX1VTRVNfQjMKLSAg
ICB2b2lkIGNhbGxTdGFja21hcChPU1JFeGl0RGVzY3JpcHRvciogZXhpdERlc2NyaXB0b3IsIFN0
YWNrbWFwQXJndW1lbnRMaXN0IGFyZ3VtZW50cykKLSAgICB7Ci0gICAgICAgIGV4aXREZXNjcmlw
dG9yLT5tX3N0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7Ci0gICAgICAgIGFyZ3VtZW50cy5p
bnNlcnQoMCwgbV9vdXQuY29uc3RJbnQzMihNYWNyb0Fzc2VtYmxlcjo6bWF4SnVtcFJlcGxhY2Vt
ZW50U2l6ZSgpKSk7Ci0gICAgICAgIGFyZ3VtZW50cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJbnQ2
NChleGl0RGVzY3JpcHRvci0+bV9zdGFja21hcElEKSk7Ci0gICAgICAgIAotICAgICAgICBtX291
dC5jYWxsKG1fb3V0LnZvaWRUeXBlLCBtX291dC5zdGFja21hcEludHJpbnNpYygpLCBhcmd1bWVu
dHMpOwotICAgIH0KLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKLSAgICAKICAgICBFeGl0VmFsdWUg
ZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KAogICAgICAgICBTdGFja21hcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBjb25zdCBIYXNoTWFwPE5vZGUqLCBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXph
dGlvbio+JiBtYXAsCiAgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkpCkBAIC0xMDgy
OSwxNSArMTAxMDEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIGV4aXRBcmd1bWVu
dChhcmd1bWVudHMsIERhdGFGb3JtYXRTdHJpY3RJbnQ1MiwgdmFsdWUudmFsdWUoKSk7CiAgICAg
ICAgIAogICAgICAgICB2YWx1ZSA9IG1fYm9vbGVhblZhbHVlcy5nZXQobm9kZSk7Ci0jaWYgRlRM
X1VTRVNfQjMKICAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQogICAgICAgICAgICAgcmV0dXJu
IGV4aXRBcmd1bWVudChhcmd1bWVudHMsIERhdGFGb3JtYXRCb29sZWFuLCB2YWx1ZS52YWx1ZSgp
KTsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgewot
ICAgICAgICAgICAgTFZhbHVlIHZhbHVlVG9QYXNzID0gbV9vdXQuemVyb0V4dCh2YWx1ZS52YWx1
ZSgpLCBtX291dC5pbnQzMik7Ci0gICAgICAgICAgICByZXR1cm4gZXhpdEFyZ3VtZW50KGFyZ3Vt
ZW50cywgRGF0YUZvcm1hdEJvb2xlYW4sIHZhbHVlVG9QYXNzKTsKLSAgICAgICAgfQotI2VuZGlm
IC8vIEZUTF9VU0VTX0IzCiAgICAgICAgIAogICAgICAgICB2YWx1ZSA9IG1fanNWYWx1ZVZhbHVl
cy5nZXQobm9kZSk7CiAgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKQEAgLTExMTA3LDEzICsx
MDM3Miw3IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKE1BU01fUFJPQkUpCiAgICAgdm9pZCBwcm9i
ZShzdGQ6OmZ1bmN0aW9uPHZvaWQgKENDYWxsSGVscGVyczo6UHJvYmVDb250ZXh0Kik+IHByb2Jl
RnVuYykKICAgICB7Ci0jaWYgRlRMX1VTRVNfQjMKICAgICAgICAgVU5VU0VEX1BBUkFNKHByb2Jl
RnVuYyk7Ci0jZWxzZSAvLyAhRlRMX1VTRVNfQjMKLSAgICAgICAgdWludDMyX3Qgc3RhY2ttYXBJ
RCA9IG1fc3RhY2ttYXBJRHMrKzsKLSAgICAgICAgbV9mdGxTdGF0ZS5wcm9iZXMuYXBwZW5kKFBy
b2JlRGVzY3JpcHRvcihzdGFja21hcElELCBwcm9iZUZ1bmMpKTsKLSAgICAgICAgbV9vdXQuY2Fs
bChtX291dC52b2lkVHlwZSwgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgbV9vdXQuY29uc3RJ
bnQ2NChzdGFja21hcElEKSwgbV9vdXQuY29uc3RJbnQzMihzaXplT2ZQcm9iZSgpKSk7Ci0jZW5k
aWYgLy8gIUZUTF9VU0VTX0IzCiAgICAgfQogI2VuZGlmCiAKQEAgLTExMTMwLDE1ICsxMDM4OSw3
IEBAIHByaXZhdGU6CiAjZWxzZQogICAgICAgICBtX291dC5jYWxsKAogICAgICAgICAgICAgbV9v
dXQudm9pZFR5cGUsCi0jaWYgRlRMX1VTRVNfQjMKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
UHRyKGZ0bFVucmVhY2hhYmxlKSwKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAgICAgICAgICBt
X291dC5pbnRUb1B0cigKLSAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihmdGxVbnJl
YWNoYWJsZSksCi0gICAgICAgICAgICAgICAgcG9pbnRlclR5cGUoCi0gICAgICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uVHlwZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBl
LCBtX291dC5pbnRQdHIsIG1fb3V0LmludDMyLCBtX291dC5pbnQzMikpKSwKLSNlbmRpZiAvLyBG
VExfVVNFU19CMwogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoY29kZUJsb2NrKCkpLCBt
X291dC5jb25zdEludDMyKGJsb2NrSW5kZXgpLAogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQz
Mihub2RlSW5kZXgpKTsKICNlbmRpZgpAQCAtMTExNTQsOSArMTA0MDUsNyBAQCBwcml2YXRlOgog
ICAgIFN0YXRlJiBtX2Z0bFN0YXRlOwogICAgIEFic3RyYWN0SGVhcFJlcG9zaXRvcnkgbV9oZWFw
czsKICAgICBPdXRwdXQgbV9vdXQ7Ci0jaWYgRlRMX1VTRVNfQjMKICAgICBQcm9jZWR1cmUmIG1f
cHJvYzsKLSNlbmRpZgogICAgIAogICAgIExCYXNpY0Jsb2NrIG1fcHJvbG9ndWU7CiAgICAgTEJh
c2ljQmxvY2sgbV9oYW5kbGVFeGNlcHRpb25zOwpAQCAtMTExOTUsMTIgKzEwNDQ0LDYgQEAgcHJp
dmF0ZToKICAgICBOb2RlT3JpZ2luIG1fb3JpZ2luOwogICAgIHVuc2lnbmVkIG1fbm9kZUluZGV4
OwogICAgIE5vZGUqIG1fbm9kZTsKLSAgICAKLSAgICB1aW50MzJfdCBtX3N0YWNrbWFwSURzOwot
I2lmICFGVExfVVNFU19CMwotICAgIHVuc2lnbmVkIG1fdGJhYUtpbmQ7Ci0gICAgdW5zaWduZWQg
bV90YmFhU3RydWN0S2luZDsKLSNlbmRpZgogfTsKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNl
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAJKHJldmlzaW9u
IDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDYgQEAgT1NSRXhpdERlc2NyaXB0b3I6Ok9TUkV4aXRE
ZXNjcmlwdG9yKAogICAgIDogbV9wcm9maWxlRGF0YUZvcm1hdChwcm9maWxlRGF0YUZvcm1hdCkK
ICAgICAsIG1fdmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZSkKICAgICAsIG1fdmFsdWVzKG51bWJl
ck9mQXJndW1lbnRzLCBudW1iZXJPZkxvY2FscykKLSNpZiAhRlRMX1VTRVNfQjMKLSAgICAsIG1f
aXNJbnZhbGlkYXRpb25Qb2ludChmYWxzZSkKLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKIHsKIH0K
IApAQCAtNjYsNyArNjMsNiBAQCB2b2lkIE9TUkV4aXREZXNjcmlwdG9yOjp2YWxpZGF0ZVJlZmVy
ZW5jCiAgICAgICAgIG1hdGVyaWFsaXphdGlvbi0+dmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRS
ZWZlcmVuY2VzKTsKIH0KIAotI2lmIEZUTF9VU0VTX0IzCiBSZWZQdHI8T1NSRXhpdEhhbmRsZT4g
T1NSRXhpdERlc2NyaXB0b3I6OmVtaXRPU1JFeGl0KAogICAgIFN0YXRlJiBzdGF0ZSwgRXhpdEtp
bmQgZXhpdEtpbmQsIGNvbnN0IE5vZGVPcmlnaW4mIG5vZGVPcmlnaW4sIENDYWxsSGVscGVycyYg
aml0LAogICAgIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zLCB1bnNpZ25l
ZCBvZmZzZXQpCkBAIC0xMDMsOSArOTksNyBAQCBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gT1NSRXhp
dERlc2NyaXB0b3I6CiAgICAgZXhpdC5tX3ZhbHVlUmVwcy5zaHJpbmtUb0ZpdCgpOwogICAgIHJl
dHVybiBoYW5kbGU7CiB9Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKIAotI2lmIEZUTF9VU0VTX0Iz
CiBPU1JFeGl0OjpPU1JFeGl0KAogICAgIE9TUkV4aXREZXNjcmlwdG9yKiBkZXNjcmlwdG9yLAog
ICAgIEV4aXRLaW5kIGV4aXRLaW5kLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENvZGVPcmlnaW4g
Y29kZU9yaWdpbkZvckV4aXRQcm9maWxlKQpAQCAtMTEzLDE0NyArMTA3LDEyIEBAIE9TUkV4aXQ6
Ok9TUkV4aXQoCiAgICAgLCBtX2Rlc2NyaXB0b3IoZGVzY3JpcHRvcikKIHsKIH0KLSNlbHNlIC8v
IEZUTF9VU0VTX0IzCi1PU1JFeGl0OjpPU1JFeGl0KAotICAgIE9TUkV4aXREZXNjcmlwdG9yKiBk
ZXNjcmlwdG9yLCBFeGl0S2luZCBleGl0S2luZCwgT1NSRXhpdERlc2NyaXB0b3JJbXBsJiBleGl0
RGVzY3JpcHRvckltcGwsCi0gICAgdWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleCkKLSAgICA6
IE9TUkV4aXRCYXNlKGV4aXRLaW5kLCBleGl0RGVzY3JpcHRvckltcGwubV9jb2RlT3JpZ2luLCBl
eGl0RGVzY3JpcHRvckltcGwubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUpCi0gICAgLCBtX2Rl
c2NyaXB0b3IoZGVzY3JpcHRvcikKLSAgICAsIG1fc3RhY2ttYXBSZWNvcmRJbmRleChzdGFja21h
cFJlY29yZEluZGV4KQotICAgICwgbV9leGNlcHRpb25UeXBlKGV4aXREZXNjcmlwdG9ySW1wbC5t
X2V4Y2VwdGlvblR5cGUpCi17Ci19Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKIAogQ29kZUxvY2F0
aW9uSnVtcCBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayogZnRsQ29k
ZUJsb2NrKSBjb25zdAogewotI2lmIEZUTF9VU0VTX0IzCiAgICAgVU5VU0VEX1BBUkFNKGZ0bENv
ZGVCbG9jayk7CiAgICAgcmV0dXJuIG1fcGF0Y2hhYmxlSnVtcDsKLSNlbHNlIC8vIEZUTF9VU0VT
X0IzCi0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkp1bXAoCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KAotICAgICAgICAgICAgZnRsQ29kZUJsb2NrLT5qaXRDb2RlKCktPmZ0bCgpLT5l
eGl0VGh1bmtzKCkuZGF0YUxvY2F0aW9uKCkpICsKLSAgICAgICAgbV9wYXRjaGFibGVDb2RlT2Zm
c2V0KTsKLSNlbmRpZiAvLyBGVExfVVNFU19CMwotfQotCi0jaWYgIUZUTF9VU0VTX0IzCi12b2lk
IE9TUkV4aXQ6OmdhdGhlclJlZ2lzdGVyc1RvU3BpbGxGb3JDYWxsSWZFeGNlcHRpb24oU3RhY2tN
YXBzJiBzdGFja21hcHMsIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQpCi17Ci0gICAgUkVMRUFT
RV9BU1NFUlQobV9leGNlcHRpb25UeXBlID09IEV4Y2VwdGlvblR5cGU6OkpTQ2FsbCk7Ci0KLSAg
ICBSZWdpc3RlclNldCB2b2xhdGlsZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJl
Z2lzdGVyc0ZvckpTQ2FsbCgpOwotCi0gICAgYXV0byBhZGROZWVkZWRSZWdpc3RlcnMgPSBbJl0g
KGNvbnN0IEV4aXRWYWx1ZSYgZXhpdFZhbHVlKSB7Ci0gICAgICAgIGF1dG8gaGFuZGxlTG9jYXRp
b24gPSBbJl0gKGNvbnN0IEZUTDo6TG9jYXRpb24mIGxvY2F0aW9uKSB7Ci0gICAgICAgICAgICBp
ZiAobG9jYXRpb24uaW52b2x2ZXNHUFIoKSAmJiB2b2xhdGlsZVJlZ2lzdGVycy5nZXQobG9jYXRp
b24uZ3ByKCkpKQotICAgICAgICAgICAgICAgIHRoaXMtPnJlZ2lzdGVyc1RvUHJlc2VydmVGb3JD
YWxsVGhhdE1pZ2h0VGhyb3cuc2V0KGxvY2F0aW9uLmdwcigpKTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKGxvY2F0aW9uLmlzRlBSKCkgJiYgdm9sYXRpbGVSZWdpc3RlcnMuZ2V0KGxvY2F0aW9uLmZw
cigpKSkKLSAgICAgICAgICAgICAgICB0aGlzLT5yZWdpc3RlcnNUb1ByZXNlcnZlRm9yQ2FsbFRo
YXRNaWdodFRocm93LnNldChsb2NhdGlvbi5mcHIoKSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
c3dpdGNoIChleGl0VmFsdWUua2luZCgpKSB7Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVlQXJndW1l
bnQ6Ci0gICAgICAgICAgICBoYW5kbGVMb2NhdGlvbihGVEw6OkxvY2F0aW9uOjpmb3JTdGFja21h
cHMoJnN0YWNrbWFwcywgcmVjb3JkLmxvY2F0aW9uc1tleGl0VmFsdWUuZXhpdEFyZ3VtZW50KCku
YXJndW1lbnQoKV0pKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEV4aXRWYWx1
ZVJlY292ZXJ5OgotICAgICAgICAgICAgaGFuZGxlTG9jYXRpb24oRlRMOjpMb2NhdGlvbjo6Zm9y
U3RhY2ttYXBzKCZzdGFja21hcHMsIHJlY29yZC5sb2NhdGlvbnNbZXhpdFZhbHVlLnJpZ2h0UmVj
b3ZlcnlBcmd1bWVudCgpXSkpOwotICAgICAgICAgICAgaGFuZGxlTG9jYXRpb24oRlRMOjpMb2Nh
dGlvbjo6Zm9yU3RhY2ttYXBzKCZzdGFja21hcHMsIHJlY29yZC5sb2NhdGlvbnNbZXhpdFZhbHVl
LmxlZnRSZWNvdmVyeUFyZ3VtZW50KCldKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfTsKLSAgICBmb3Ig
KEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiBtX2Rlc2Ny
aXB0b3ItPm1fbWF0ZXJpYWxpemF0aW9ucykgewotICAgICAgICBmb3IgKHVuc2lnbmVkIHByb3Bl
cnR5SW5kZXggPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKS5zaXplKCk7IHByb3BlcnR5
SW5kZXgtLTspCi0gICAgICAgICAgICBhZGROZWVkZWRSZWdpc3RlcnMobWF0ZXJpYWxpemF0aW9u
LT5wcm9wZXJ0aWVzKClbcHJvcGVydHlJbmRleF0udmFsdWUoKSk7Ci0gICAgfQotICAgIGZvciAo
dW5zaWduZWQgaW5kZXggPSBtX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUoKTsgaW5kZXgtLTsp
Ci0gICAgICAgIGFkZE5lZWRlZFJlZ2lzdGVycyhtX2Rlc2NyaXB0b3ItPm1fdmFsdWVzW2luZGV4
XSk7Ci19Ci0KLXZvaWQgT1NSRXhpdDo6c3BpbGxSZWdpc3RlcnNUb1NwaWxsU2xvdChDQ2FsbEhl
bHBlcnMmIGppdCwgaW50MzJfdCBzdGFja1NwaWxsU2xvdCkKLXsKLSAgICBSRUxFQVNFX0FTU0VS
VChpc0dlbmVyaWNVbndpbmRIYW5kbGVyKCkgfHwgd2lsbEFycml2ZUF0T1NSRXhpdEZyb21DYWxs
T3BlcmF0aW9uKCkpOwotICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKLSAgICBmb3IgKEdQUlJlZyBy
ZWcgPSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpOyByZWcgPD0gTWFjcm9Bc3NlbWJs
ZXI6Omxhc3RSZWdpc3RlcigpOyByZWcgPSBNYWNyb0Fzc2VtYmxlcjo6bmV4dFJlZ2lzdGVyKHJl
ZykpIHsKLSAgICAgICAgaWYgKHJlZ2lzdGVyc1RvUHJlc2VydmVGb3JDYWxsVGhhdE1pZ2h0VGhy
b3cuZ2V0KHJlZykpIHsKLSAgICAgICAgICAgIGppdC5zdG9yZTY0KHJlZywgQ0NhbGxIZWxwZXJz
OjphZGRyZXNzRm9yKHN0YWNrU3BpbGxTbG90ICsgY291bnQpKTsKLSAgICAgICAgICAgIGNvdW50
Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZm9yIChGUFJSZWcgcmVnID0gTWFjcm9Bc3NlbWJs
ZXI6OmZpcnN0RlBSZWdpc3RlcigpOyByZWcgPD0gTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lz
dGVyKCk7IHJlZyA9IE1hY3JvQXNzZW1ibGVyOjpuZXh0RlBSZWdpc3RlcihyZWcpKSB7Ci0gICAg
ICAgIGlmIChyZWdpc3RlcnNUb1ByZXNlcnZlRm9yQ2FsbFRoYXRNaWdodFRocm93LmdldChyZWcp
KSB7Ci0gICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUocmVnLCBDQ2FsbEhlbHBlcnM6OmFkZHJl
c3NGb3Ioc3RhY2tTcGlsbFNsb3QgKyBjb3VudCkpOwotICAgICAgICAgICAgY291bnQrKzsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBPU1JFeGl0OjpyZWNvdmVyUmVnaXN0ZXJzRnJvbVNw
aWxsU2xvdChDQ2FsbEhlbHBlcnMmIGppdCwgaW50MzJfdCBzdGFja1NwaWxsU2xvdCkKLXsKLSAg
ICBSRUxFQVNFX0FTU0VSVChpc0dlbmVyaWNVbndpbmRIYW5kbGVyKCkgfHwgd2lsbEFycml2ZUF0
T1NSRXhpdEZyb21DYWxsT3BlcmF0aW9uKCkpOwotICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKLSAg
ICBmb3IgKEdQUlJlZyByZWcgPSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpOyByZWcg
PD0gTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpOyByZWcgPSBNYWNyb0Fzc2VtYmxlcjo6
bmV4dFJlZ2lzdGVyKHJlZykpIHsKLSAgICAgICAgaWYgKHJlZ2lzdGVyc1RvUHJlc2VydmVGb3JD
YWxsVGhhdE1pZ2h0VGhyb3cuZ2V0KHJlZykpIHsKLSAgICAgICAgICAgIGppdC5sb2FkNjQoQ0Nh
bGxIZWxwZXJzOjphZGRyZXNzRm9yKHN0YWNrU3BpbGxTbG90ICsgY291bnQpLCByZWcpOwotICAg
ICAgICAgICAgY291bnQrKzsKLSAgICAgICAgfQotICAgIH0KLSAgICBmb3IgKEZQUlJlZyByZWcg
PSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCk7IHJlZyA8PSBNYWNyb0Fzc2VtYmxl
cjo6bGFzdEZQUmVnaXN0ZXIoKTsgcmVnID0gTWFjcm9Bc3NlbWJsZXI6Om5leHRGUFJlZ2lzdGVy
KHJlZykpIHsKLSAgICAgICAgaWYgKHJlZ2lzdGVyc1RvUHJlc2VydmVGb3JDYWxsVGhhdE1pZ2h0
VGhyb3cuZ2V0KHJlZykpIHsKLSAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVy
czo6YWRkcmVzc0ZvcihzdGFja1NwaWxsU2xvdCArIGNvdW50KSwgcmVnKTsKLSAgICAgICAgICAg
IGNvdW50Kys7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgT1NSRXhpdDo6d2lsbEFycml2
ZUF0RXhpdEZyb21JbmRpcmVjdEV4Y2VwdGlvbkNoZWNrKCkgY29uc3QKLXsKLSAgICBzd2l0Y2gg
KG1fZXhjZXB0aW9uVHlwZSkgewotICAgIGNhc2UgRXhjZXB0aW9uVHlwZTo6SlNDYWxsOgotICAg
IGNhc2UgRXhjZXB0aW9uVHlwZTo6R2V0QnlJZDoKLSAgICBjYXNlIEV4Y2VwdGlvblR5cGU6OlB1
dEJ5SWQ6Ci0gICAgY2FzZSBFeGNlcHRpb25UeXBlOjpMYXp5U2xvd1BhdGg6Ci0gICAgY2FzZSBF
eGNlcHRpb25UeXBlOjpCaW5hcnlPcEdlbmVyYXRvcjoKLSAgICBjYXNlIEV4Y2VwdGlvblR5cGU6
OkdldEJ5SWRDYWxsT3BlcmF0aW9uOgotICAgIGNhc2UgRXhjZXB0aW9uVHlwZTo6UHV0QnlJZENh
bGxPcGVyYXRpb246Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LX0KLQotYm9vbCBPU1JFeGl0Ojp3aWxsQXJyaXZlQXRPU1JFeGl0RnJvbUNhbGxPcGVyYXRpb24o
KSBjb25zdAotewotICAgIHN3aXRjaCAobV9leGNlcHRpb25UeXBlKSB7Ci0gICAgY2FzZSBFeGNl
cHRpb25UeXBlOjpHZXRCeUlkQ2FsbE9wZXJhdGlvbjoKLSAgICBjYXNlIEV4Y2VwdGlvblR5cGU6
OlB1dEJ5SWRDYWxsT3BlcmF0aW9uOgotICAgIGNhc2UgRXhjZXB0aW9uVHlwZTo6QmluYXJ5T3BH
ZW5lcmF0b3I6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0K
LQotYm9vbCBPU1JFeGl0OjpuZWVkc1JlZ2lzdGVyUmVjb3ZlcnlPbkdlbmVyaWNVbndpbmRPU1JF
eGl0UGF0aCgpIGNvbnN0Ci17Ci0gICAgLy8gQ2FsbHMvUHV0QnlJZHMvR2V0QnlJZHMgYWxsIGhh
dmUgYSBnZW5lcmljIHVud2luZCBvc3IgZXhpdCBwYXRocy4KLSAgICAvLyBCdXQsIEdldEJ5SWQg
YW5kIFB1dEJ5SWQgSUNzIHdpbGwgZG8gcmVnaXN0ZXIgcmVjb3ZlcnkgdGhlbXNlbHZlcwotICAg
IC8vIGJlY2F1c2UgdGhleSdyZSByZXNwb25zaWJsZSBmb3Igc3BpbGxpbmcgbmVjZXNzYXJ5IHJl
Z2lzdGVycywgc28KLSAgICAvLyB0aGV5IGFsc28gbXVzdCByZWNvdmVyIHJlZ2lzdGVycyB0aGVt
c2VsdmVzLgotICAgIC8vIENhbGxzIGRvbid0IHdvcmsgdGhpcyB3YXkuIFdlIGNvbXBpbGUgQ2Fs
bHMgYXMgcGF0Y2hwb2ludHMgaW4gTExWTS4KLSAgICAvLyBBIGNhbGwgcGF0Y2hwb2ludCBtaWdo
dCBwYXNzIHVzIHZvbGF0aWxlIHJlZ2lzdGVycyBmb3IgbG9jYXRpb25zCi0gICAgLy8gd2Ugd2ls
bCBkbyB2YWx1ZSByZWNvdmVyeSBvbi4gVGhlcmVmb3JlLCBiZWZvcmUgd2UgbWFrZSB0aGUgY2Fs
bCwKLSAgICAvLyB3ZSBtdXN0IHNwaWxsIHRoZXNlIHJlZ2lzdGVycy4gT3RoZXJ3aXNlLCB0aGUg
Y2FsbCB3aWxsIGNsb2JiZXIgdGhlbS4KLSAgICAvLyBUaGVyZWZvcmUsIHRoZSBjb3JyZXNwb25k
aW5nIE9TUiBleGl0IGZvciB0aGUgY2FsbCB3aWxsIG5lZWQgdG8KLSAgICAvLyByZWNvdmVyIHRo
ZSBzcGlsbGVkIHJlZ2lzdGVycy4KLSAgICByZXR1cm4gbV9leGNlcHRpb25UeXBlID09IEV4Y2Vw
dGlvblR5cGU6OkpTQ2FsbDsKIH0KLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXQuaAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlICJGVExF
eGl0VmFsdWUuaCIKICNpbmNsdWRlICJGVExGb3JtYXR0ZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkZU
TE9TUkV4aXRIYW5kbGUuaCIKLSNpbmNsdWRlICJGVExTdGFja01hcHMuaCIKICNpbmNsdWRlICJG
VExTdGFja21hcEFyZ3VtZW50TGlzdC5oIgogI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgiCiAjaW5j
bHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpAQCAtNjgsMjAgKzY3LDYgQEAg
Y2xhc3MgU3RhdGU7CiBzdHJ1Y3QgT1NSRXhpdERlc2NyaXB0b3JJbXBsOwogc3RydWN0IE9TUkV4
aXRIYW5kbGU7CiAKLSNpZiAhRlRMX1VTRVNfQjMKLWVudW0gY2xhc3MgRXhjZXB0aW9uVHlwZSA6
IHVpbnQ4X3QgewotICAgIE5vbmUsCi0gICAgQ0NhbGxFeGNlcHRpb24sCi0gICAgSlNDYWxsLAot
ICAgIEdldEJ5SWQsCi0gICAgR2V0QnlJZENhbGxPcGVyYXRpb24sCi0gICAgUHV0QnlJZCwKLSAg
ICBQdXRCeUlkQ2FsbE9wZXJhdGlvbiwKLSAgICBMYXp5U2xvd1BhdGgsCi0gICAgQmluYXJ5T3BH
ZW5lcmF0b3IsCi19OwotI2VuZGlmIC8vICFGVExfVVNFU19CMwotCiBzdHJ1Y3QgT1NSRXhpdERl
c2NyaXB0b3IgewogICAgIE9TUkV4aXREZXNjcmlwdG9yKAogICAgICAgICBEYXRhRm9ybWF0IHBy
b2ZpbGVEYXRhRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLApAQCAtOTgsMTQg
KzgzLDggQEAgc3RydWN0IE9TUkV4aXREZXNjcmlwdG9yIHsKICAgICBPcGVyYW5kczxFeGl0VmFs
dWU+IG1fdmFsdWVzOwogICAgIEJhZzxFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbj4gbV9t
YXRlcmlhbGl6YXRpb25zOwogCi0jaWYgIUZUTF9VU0VTX0IzCi0gICAgdWludDMyX3QgbV9zdGFj
a21hcElEOwotICAgIGJvb2wgbV9pc0ludmFsaWRhdGlvblBvaW50OwotI2VuZGlmIC8vICFGVExf
VVNFU19CMwotICAgIAogICAgIHZvaWQgdmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRS
ZWZlcmVuY2VzJik7CiAKLSNpZiBGVExfVVNFU19CMwogICAgIC8vIENhbGwgdGhpcyBvbmNlIHdl
IGhhdmUgYSBwbGFjZSB0byBlbWl0IHRoZSBPU1IgZXhpdCBqdW1wIGFuZCB3ZSBoYXZlIGRhdGEg
YWJvdXQgaG93IHRoZSBzdGF0ZQogICAgIC8vIHNob3VsZCBiZSByZWNvdmVyZWQuIFRoaXMgZWZm
ZWN0aXZlbHkgZW1pdHMgY29kZSB0aGF0IGRvZXMgdGhlIGV4aXQsIHRob3VnaCB0aGUgY29kZSBp
cyByZWFsbHkgYQogICAgIC8vIHBhdGNoYWJsZSBqdW1wIGFuZCB3ZSBlbWl0IHRoZSByZWFsIGNv
ZGUgbGF6aWx5LiBUaGUgZGVzY3JpcHRpb24gb2YgaG93IHRvIGVtaXQgdGhlIHJlYWwgY29kZSBp
cwpAQCAtMTM1LDcxICsxMTQsMjcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8T1NSRXhpdEhhbmRs
ZT4gcHJlcGFyZU9TUkV4aXRIYW5kbGUoCiAgICAgICAgIFN0YXRlJiwgRXhpdEtpbmQsIGNvbnN0
IERGRzo6Tm9kZU9yaWdpbiYsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmLAog
ICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSAwKTsKLSNlbmRpZiAvLyBGVExfVVNFU19CMwotfTsK
LQotI2lmICFGVExfVVNFU19CMwotc3RydWN0IE9TUkV4aXREZXNjcmlwdG9ySW1wbCB7Ci0gICAg
T1NSRXhpdERlc2NyaXB0b3JJbXBsKEV4aXRLaW5kIGtpbmQsIENvZGVPcmlnaW4gZXhpdE9yaWdp
biwgQ29kZU9yaWdpbiBmb3JFeGl0UHJvZmlsZSwgRXhjZXB0aW9uVHlwZSBleGNlcHRpb25UeXBl
KQotICAgICAgICA6IG1fa2luZChraW5kKQotICAgICAgICAsIG1fY29kZU9yaWdpbihleGl0T3Jp
Z2luKQotICAgICAgICAsIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlKGZvckV4aXRQcm9maWxl
KQotICAgICAgICAsIG1fZXhjZXB0aW9uVHlwZShleGNlcHRpb25UeXBlKQotICAgIHsKLSAgICB9
Ci0KLSAgICBFeGl0S2luZCBtX2tpbmQ7Ci0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47Ci0g
ICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKLSAgICBFeGNlcHRpb25U
eXBlIG1fZXhjZXB0aW9uVHlwZTsKLSAgICBDb2RlT3JpZ2luIG1fc2VtYW50aWNDb2RlT3JpZ2lu
Rm9yQ2FsbEZyYW1lSGVhZGVyOwotICAgIEhhbmRsZXJJbmZvIG1fYmFzZWxpbmVFeGNlcHRpb25I
YW5kbGVyOwogfTsKLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKIAogc3RydWN0IE9TUkV4aXQgOiBw
dWJsaWMgREZHOjpPU1JFeGl0QmFzZSB7CiAgICAgT1NSRXhpdCgKICAgICAgICAgT1NSRXhpdERl
c2NyaXB0b3IqLCBFeGl0S2luZCwKLSNpZiBGVExfVVNFU19CMwogICAgICAgICBDb2RlT3JpZ2lu
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZQotI2Vsc2UgLy8gRlRMX1VTRVNf
QjMKLSAgICAgICAgT1NSRXhpdERlc2NyaXB0b3JJbXBsJiwgdWludDMyX3Qgc3RhY2ttYXBSZWNv
cmRJbmRleAotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgICAgICk7CiAKICAgICBPU1JFeGl0
RGVzY3JpcHRvciogbV9kZXNjcmlwdG9yOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX2Nv
ZGU7Ci0jaWYgRlRMX1VTRVNfQjMKICAgICAvLyBUaGlzIHRlbGxzIHVzIHdoZXJlIHRvIHBsYWNl
IGEganVtcC4KICAgICBDb2RlTG9jYXRpb25KdW1wIG1fcGF0Y2hhYmxlSnVtcDsKICAgICBWZWN0
b3I8QjM6OlZhbHVlUmVwPiBtX3ZhbHVlUmVwczsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAg
Ly8gT2Zmc2V0IHdpdGhpbiB0aGUgZXhpdCBzdHVicyBvZiB0aGUgc3R1YiBmb3IgdGhpcyBleGl0
LgotICAgIHVuc2lnbmVkIG1fcGF0Y2hhYmxlQ29kZU9mZnNldDsKLSAgICAvLyBPZmZzZXQgd2l0
aGluIFN0YWNrbWFwOjpyZWNvcmRzCi0gICAgdWludDMyX3QgbV9zdGFja21hcFJlY29yZEluZGV4
OwotICAgIEV4Y2VwdGlvblR5cGUgbV9leGNlcHRpb25UeXBlOwotICAgIFJlZ2lzdGVyU2V0IHJl
Z2lzdGVyc1RvUHJlc2VydmVGb3JDYWxsVGhhdE1pZ2h0VGhyb3c7Ci0jZW5kaWYgLy8gRlRMX1VT
RVNfQjMKIAogICAgIENvZGVMb2NhdGlvbkp1bXAgY29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2Rl
QmxvY2sqIGZ0bENvZGVCbG9jaykgY29uc3Q7CiAgICAgdm9pZCBjb25zaWRlckFkZGluZ0FzRnJl
cXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKQogICAgIHsKICAgICAg
ICAgT1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKHByb2ZpbGVk
Q29kZUJsb2NrLCBFeGl0RnJvbUZUTCk7CiAgICAgfQotCi0jaWYgIUZUTF9VU0VTX0IzCi0gICAg
dm9pZCBnYXRoZXJSZWdpc3RlcnNUb1NwaWxsRm9yQ2FsbElmRXhjZXB0aW9uKFN0YWNrTWFwcyYs
IFN0YWNrTWFwczo6UmVjb3JkJik7Ci0gICAgdm9pZCBzcGlsbFJlZ2lzdGVyc1RvU3BpbGxTbG90
KENDYWxsSGVscGVycyYsIGludDMyX3Qgc3RhY2tTcGlsbFNsb3QpOwotICAgIHZvaWQgcmVjb3Zl
clJlZ2lzdGVyc0Zyb21TcGlsbFNsb3QoQ0NhbGxIZWxwZXJzJiBqaXQsIGludDMyX3Qgc3RhY2tT
cGlsbFNsb3QpOwotCi0gICAgYm9vbCB3aWxsQXJyaXZlQXRFeGl0RnJvbUluZGlyZWN0RXhjZXB0
aW9uQ2hlY2soKSBjb25zdDsKLSAgICBib29sIHdpbGxBcnJpdmVBdE9TUkV4aXRGcm9tQ2FsbE9w
ZXJhdGlvbigpIGNvbnN0OwotICAgIGJvb2wgbmVlZHNSZWdpc3RlclJlY292ZXJ5T25HZW5lcmlj
VW53aW5kT1NSRXhpdFBhdGgoKSBjb25zdDsKLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKIH07CiAK
LQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxhdGlvbklu
Zm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRD
b21waWxhdGlvbkluZm8uaAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaWZuZGVmIEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm9faAotI2RlZmluZSBGVExPU1JFeGl0
Q29tcGlsYXRpb25JbmZvX2gKLQotI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgotCi0jaWYgRU5BQkxF
KEZUTF9KSVQpICYmICFGVExfVVNFU19CMwotCi0jaW5jbHVkZSAiRlRMQWJicmV2aWF0ZWRUeXBl
cy5oIgotI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKLQotc3RydWN0IE9TUkV4aXRDb21waWxhdGlvbkluZm8gewotICAgIE9TUkV4
aXRDb21waWxhdGlvbkluZm8oKQotICAgIHsKLSAgICB9Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgbV90aHVua0xhYmVsOwotICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1f
dGh1bmtKdW1wOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIG1fdGh1bmtBZGRyZXNzOwotfTsKLQot
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYm
ICFGVExfVVNFU19CMwotCi0jZW5kaWYgLy8gRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mb19oCi0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxl
ci5jcHAJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksMTEgKzk5LDcgQEAgc3Rh
dGljIHZvaWQgcmVib3hBY2NvcmRpbmdUb0Zvcm1hdCgKIAogc3RhdGljIHZvaWQgY29tcGlsZVJl
Y292ZXJ5KAogICAgIENDYWxsSGVscGVycyYgaml0LCBjb25zdCBFeGl0VmFsdWUmIHZhbHVlLAot
I2lmIEZUTF9VU0VTX0IzCiAgICAgVmVjdG9yPEIzOjpWYWx1ZVJlcD4mIHZhbHVlUmVwcywKLSNl
bHNlIC8vIEZUTF9VU0VTX0IzCi0gICAgU3RhY2tNYXBzOjpSZWNvcmQqIHJlY29yZCwgU3RhY2tN
YXBzJiBzdGFja21hcHMsCi0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICBjaGFyKiByZWdpc3Rl
clNjcmF0Y2gsCiAgICAgY29uc3QgSGFzaE1hcDxFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlv
biosIEVuY29kZWRKU1ZhbHVlKj4mIG1hdGVyaWFsaXphdGlvblRvUG9pbnRlcikKIHsKQEAgLTEx
NywxMyArMTEzLDggQEAgc3RhdGljIHZvaWQgY29tcGlsZVJlY292ZXJ5KAogICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAogICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnQ6Ci0jaWYgRlRMX1VT
RVNfQjMKICAgICAgICAgTG9jYXRpb246OmZvclZhbHVlUmVwKHZhbHVlUmVwc1t2YWx1ZS5leGl0
QXJndW1lbnQoKS5hcmd1bWVudCgpXSkucmVzdG9yZUludG8oCiAgICAgICAgICAgICBqaXQsIHJl
Z2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDApOwotI2Vsc2UgLy8gRlRMX1VTRVNfQjMKLSAg
ICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUuZXhpdEFyZ3VtZW50KCkuYXJndW1lbnQoKV0u
cmVzdG9yZUludG8oCi0gICAgICAgICAgICBqaXQsIHN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNo
LCBHUFJJbmZvOjpyZWdUMCk7Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFjazoKQEAgLTEzNCwxNyAr
MTI1LDEwIEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVSZWNvdmVyeSgKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKICAgICBjYXNlIEV4aXRWYWx1ZVJlY292ZXJ5OgotI2lmIEZUTF9VU0VTX0Iz
CiAgICAgICAgIExvY2F0aW9uOjpmb3JWYWx1ZVJlcCh2YWx1ZVJlcHNbdmFsdWUucmlnaHRSZWNv
dmVyeUFyZ3VtZW50KCldKS5yZXN0b3JlSW50bygKICAgICAgICAgICAgIGppdCwgcmVnaXN0ZXJT
Y3JhdGNoLCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgICAgIExvY2F0aW9uOjpmb3JWYWx1ZVJlcCh2
YWx1ZVJlcHNbdmFsdWUubGVmdFJlY292ZXJ5QXJndW1lbnQoKV0pLnJlc3RvcmVJbnRvKAogICAg
ICAgICAgICAgaml0LCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1QwKTsKLSNlbHNlIC8v
IEZUTF9VU0VTX0IzCi0gICAgICAgIHJlY29yZC0+bG9jYXRpb25zW3ZhbHVlLnJpZ2h0UmVjb3Zl
cnlBcmd1bWVudCgpXS5yZXN0b3JlSW50bygKLSAgICAgICAgICAgIGppdCwgc3RhY2ttYXBzLCBy
ZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgcmVjb3JkLT5sb2NhdGlv
bnNbdmFsdWUubGVmdFJlY292ZXJ5QXJndW1lbnQoKV0ucmVzdG9yZUludG8oCi0gICAgICAgICAg
ICBqaXQsIHN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMCk7Ci0jZW5k
aWYgLy8gRlRMX1VTRVNfQjMKICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVyeU9wY29kZSgp
KSB7CiAgICAgICAgIGNhc2UgQWRkUmVjb3Zlcnk6CiAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVl
LnJlY292ZXJ5Rm9ybWF0KCkpIHsKQEAgLTE5NCwxMyArMTc4LDYgQEAgc3RhdGljIHZvaWQgY29t
cGlsZVJlY292ZXJ5KAogc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgdW5zaWduZWQgZXhp
dElELCBKSVRDb2RlKiBqaXRDb2RlLCBPU1JFeGl0JiBleGl0LCBWTSogdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrKQogewotI2lmIEZUTF9VU0VTX0IzCi0gICAgVU5VU0VEX1BBUkFNKGppdENvZGUp
OwotI2Vsc2UgLy8gRlRMX1VTRVNfQjMKLSAgICBTdGFja01hcHM6OlJlY29yZCogcmVjb3JkID0g
JmppdENvZGUtPnN0YWNrbWFwcy5yZWNvcmRzW2V4aXQubV9zdGFja21hcFJlY29yZEluZGV4XTsK
LSAgICBSRUxFQVNFX0FTU0VSVChyZWNvcmQtPnBhdGNocG9pbnRJRCA9PSBleGl0Lm1fZGVzY3Jp
cHRvci0+bV9zdGFja21hcElEKTsKLSNlbmRpZiAvLyBGVExfVVNFU19CMwotCiAgICAgLy8gVGhp
cyBjb2RlIHJlcXVpcmVzIGZyYW1lUG9pbnRlclJlZ2lzdGVyIGlzIHRoZSBzYW1lIGFzIGNhbGxG
cmFtZVJlZ2lzdGVyCiAgICAgc3RhdGljX2Fzc2VydChNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2lu
dGVyUmVnaXN0ZXIgPT0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICJNYWNyb0Fzc2VtYmxl
cjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIgYW5kIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyIG11
c3QgYmUgdGhlIHNhbWUiKTsKIApAQCAtMjE0LDIyICsxOTEsMTIgQEAgc3RhdGljIHZvaWQgY29t
cGlsZVN0dWIoCiAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
Y29kZUJsb2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLAogICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAotI2lmICFGVExfVVNFU19CMwotICAgICAgICBp
ZiAoZXhpdC5uZWVkc1JlZ2lzdGVyUmVjb3ZlcnlPbkdlbmVyaWNVbndpbmRPU1JFeGl0UGF0aCgp
KQotICAgICAgICAgICAgZXhpdC5yZWNvdmVyUmVnaXN0ZXJzRnJvbVNwaWxsU2xvdChqaXQsIGpp
dENvZGUtPm9zckV4aXRGcm9tR2VuZXJpY1Vud2luZFN0YWNrU3BpbGxTbG90KTsKLSNlbmRpZiAv
LyAhRlRMX1VTRVNfQjMKLQogICAgICAgICAvLyBEbyBhIHB1c2hUb1NhdmUgYmVjYXVzZSB0aGF0
J3Mgd2hhdCB0aGUgZXhpdCBjb21waWxlciBiZWxvdyBleHBlY3RzIHRoZSBzdGFjawogICAgICAg
ICAvLyB0byBsb29rIGxpa2UgYmVjYXVzZSB0aGF0J3MgdGhlIGxhc3QgdGhpbmcgdGhlIEV4aXRU
aHVua0dlbmVyYXRvciBkb2VzLiBUaGUgY29kZQogICAgICAgICAvLyBiZWxvdyBkb2Vzbid0IGFj
dHVhbGx5IHVzZSB0aGUgdmFsdWUgdGhhdCB3YXMgcHVzaGVkLCBidXQgaXQgZG9lcyByZWx5IG9u
IHRoZQogICAgICAgICAvLyBnZW5lcmFsIHNoYXBlIG9mIHRoZSBzdGFjayBiZWluZyBhcyBpdCBp
cyBpbiB0aGUgbm9uLWV4Y2VwdGlvbiBPU1IgY2FzZS4KICAgICAgICAgaml0LnB1c2hUb1NhdmVJ
bW1lZGlhdGVXaXRob3V0VG91Y2hpbmdSZWdpc3RlcnMoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoMHhiYWRiZWVmKSk7CiAgICAgfQotI2lmICFGVExfVVNFU19CMwotICAgIGlmIChleGl0Lndp
bGxBcnJpdmVBdE9TUkV4aXRGcm9tQ2FsbE9wZXJhdGlvbigpKQotICAgICAgICBleGl0LnJlY292
ZXJSZWdpc3RlcnNGcm9tU3BpbGxTbG90KGppdCwgaml0Q29kZS0+b3NyRXhpdEZyb21HZW5lcmlj
VW53aW5kU3RhY2tTcGlsbFNsb3QpOwotI2VuZGlmIC8vICFGVExfVVNFU19CMwotICAgIAogCiAg
ICAgLy8gV2UgbmVlZCBzY3JhdGNoIHNwYWNlIHRvIHNhdmUgYWxsIHJlZ2lzdGVycywgdG8gYnVp
bGQgdXAgdGhlIEpTIHN0YWNrLCB0byBkZWFsIHdpdGggdW53aW5kCiAgICAgLy8gZml4dXAsIHBv
aW50ZXJzIHRvIGFsbCBvZiB0aGUgb2JqZWN0cyB3ZSBtYXRlcmlhbGl6ZSwgYW5kIHRoZSBlbGVt
ZW50cyBpbnNpZGUgdGhvc2Ugb2JqZWN0cwpAQCAtMjY3LDExICsyMzQsNyBAQCBzdGF0aWMgdm9p
ZCBjb21waWxlU3R1YigKICAgICBhdXRvIHJlY292ZXJWYWx1ZSA9IFsmXSAoY29uc3QgRXhpdFZh
bHVlJiB2YWx1ZSkgewogICAgICAgICBjb21waWxlUmVjb3ZlcnkoCiAgICAgICAgICAgICBqaXQs
IHZhbHVlLAotI2lmIEZUTF9VU0VTX0IzCiAgICAgICAgICAgICBleGl0Lm1fdmFsdWVSZXBzLAot
I2Vsc2UgLy8gRlRMX1VTRVNfQjMKLSAgICAgICAgICAgIHJlY29yZCwgaml0Q29kZS0+c3RhY2tt
YXBzLAotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgICAgICAgICByZWdpc3RlclNjcmF0Y2gs
IG1hdGVyaWFsaXphdGlvblRvUG9pbnRlcik7CiAgICAgfTsKICAgICAKQEAgLTI4NSw5ICsyNDgs
OSBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICBqaXQucG9wVG9SZXN0b3JlKEdQUklu
Zm86OnJlZ1QwKTsKICAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICAK
LSAgICBpZiAodm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBjb2RlQmxvY2stPmppdENvZGUo
KS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uKSB7CisgICAgaWYgKHZtLT5tX3BlckJ5dGVjb2Rl
UHJvZmlsZXIgJiYgaml0Q29kZS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uKSB7CiAgICAgICAg
IFByb2ZpbGVyOjpEYXRhYmFzZSYgZGF0YWJhc2UgPSAqdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxl
cjsKLSAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbiA9IGNvZGVCbG9j
ay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24uZ2V0KCk7CisgICAgICAgIFBy
b2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBqaXRDb2RlLT5kZmdDb21tb24oKS0+
Y29tcGlsYXRpb24uZ2V0KCk7CiAgICAgICAgIAogICAgICAgICBQcm9maWxlcjo6T1NSRXhpdCog
cHJvZmlsZXJFeGl0ID0gY29tcGlsYXRpb24tPmFkZE9TUkV4aXQoCiAgICAgICAgICAgICBleGl0
SUQsIFByb2ZpbGVyOjpPcmlnaW5TdGFjayhkYXRhYmFzZSwgY29kZUJsb2NrLCBleGl0Lm1fY29k
ZU9yaWdpbiksCkBAIC0zMDUsMTEgKzI2OCw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAog
ICAgIAogICAgIC8vIERvIHNvbWUgdmFsdWUgcHJvZmlsaW5nLgogICAgIGlmIChleGl0Lm1fZGVz
Y3JpcHRvci0+bV9wcm9maWxlRGF0YUZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSkgewotI2lmIEZU
TF9VU0VTX0IzCiAgICAgICAgIExvY2F0aW9uOjpmb3JWYWx1ZVJlcChleGl0Lm1fdmFsdWVSZXBz
WzBdKS5yZXN0b3JlSW50byhqaXQsIHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDApOwot
I2Vsc2UgLy8gRlRMX1VTRVNfQjMKLSAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbMF0ucmVzdG9y
ZUludG8oaml0LCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6
cmVnVDApOwotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgICAgIHJlYm94QWNjb3JkaW5nVG9G
b3JtYXQoCiAgICAgICAgICAgICBleGl0Lm1fZGVzY3JpcHRvci0+bV9wcm9maWxlRGF0YUZvcm1h
dCwgaml0LCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QyKTsK
ICAgICAgICAgCkBAIC01NjEsNyArNTIwLDYgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAg
ICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KGppdCwgZXhpdCk7CiAgICAgCiAgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgY29kZUJsb2NrKTsKLSNpZiBGVExfVVNFU19CMwogICAg
IGV4aXQubV9jb2RlID0gRklOQUxJWkVfQ09ERV9JRigKICAgICAgICAgc2hvdWxkRHVtcERpc2Fz
c2VtYmx5KCkgfHwgT3B0aW9uczo6dmVyYm9zZU9TUigpIHx8IE9wdGlvbnM6OnZlcmJvc2VGVExP
U1JFeGl0KCksCiAgICAgICAgIHBhdGNoQnVmZmVyLApAQCAtNTcwLDE3ICs1MjgsNiBAQCBzdGF0
aWMgdm9pZCBjb21waWxlU3R1YigKICAgICAgICAgICAgIGV4aXRLaW5kVG9TdHJpbmcoZXhpdC5t
X2tpbmQpLCB0b0NTdHJpbmcoKmNvZGVCbG9jaykuZGF0YSgpLAogICAgICAgICAgICAgdG9DU3Ry
aW5nKGlnbm9yaW5nQ29udGV4dDxEdW1wQ29udGV4dD4oZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFs
dWVzKSkuZGF0YSgpKQogICAgICAgICApOwotI2Vsc2UgLy8gRlRMX1VTRVNfQjMKLSAgICBleGl0
Lm1fY29kZSA9IEZJTkFMSVpFX0NPREVfSUYoCi0gICAgICAgIHNob3VsZER1bXBEaXNhc3NlbWJs
eSgpIHx8IE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8fCBPcHRpb25zOjp2ZXJib3NlRlRMT1NSRXhp
dCgpLAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJGVEwgT1NSIGV4aXQgIyV1ICgl
cywgJXMpIGZyb20gJXMsIHdpdGggb3BlcmFuZHMgPSAlcywgYW5kIHJlY29yZCA9ICVzIiwKLSAg
ICAgICAgICAgIGV4aXRJRCwgdG9DU3RyaW5nKGV4aXQubV9jb2RlT3JpZ2luKS5kYXRhKCksCi0g
ICAgICAgICAgICBleGl0S2luZFRvU3RyaW5nKGV4aXQubV9raW5kKSwgdG9DU3RyaW5nKCpjb2Rl
QmxvY2spLmRhdGEoKSwKLSAgICAgICAgICAgIHRvQ1N0cmluZyhpZ25vcmluZ0NvbnRleHQ8RHVt
cENvbnRleHQ+KGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcykpLmRhdGEoKSwKLSAgICAgICAg
ICAgIHRvQ1N0cmluZygqcmVjb3JkKS5kYXRhKCkpCi0gICAgICAgICk7Ci0jZW5kaWYgLy8gRlRM
X1VTRVNfQjMKIH0KIAogZXh0ZXJuICJDIiB2b2lkKiBjb21waWxlRlRMT1NSRXhpdChFeGVjU3Rh
dGUqIGV4ZWMsIHVuc2lnbmVkIGV4aXRJRCkKQEAgLTYxMiwxOSArNTU5LDExIEBAIGV4dGVybiAi
QyIgdm9pZCogY29tcGlsZUZUTE9TUkV4aXQoRXhlY1MKICAgICAgICAgZGF0YUxvZygiICAgIE9y
aWdpbjogIiwgZXhpdC5tX2NvZGVPcmlnaW4sICJcbiIpOwogICAgICAgICBpZiAoZXhpdC5tX2Nv
ZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSAhPSBleGl0Lm1fY29kZU9yaWdpbikKICAgICAgICAgICAg
IGRhdGFMb2coIiAgICBPcmlnaW4gZm9yIGV4aXQgcHJvZmlsZTogIiwgZXhpdC5tX2NvZGVPcmln
aW5Gb3JFeGl0UHJvZmlsZSwgIlxuIik7Ci0jaWYgIUZUTF9VU0VTX0IzCi0gICAgICAgIGRhdGFM
b2coIiAgICBFeGl0IHN0YWNrbWFwIElEOiAiLCBleGl0Lm1fZGVzY3JpcHRvci0+bV9zdGFja21h
cElELCAiXG4iKTsKLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKICAgICAgICAgZGF0YUxvZygiICAg
IEN1cnJlbnQgY2FsbCBzaXRlIGluZGV4OiAiLCBleGVjLT5jYWxsU2l0ZUluZGV4KCkuYml0cygp
LCAiXG4iKTsKICAgICAgICAgZGF0YUxvZygiICAgIEV4aXQgaXMgZXhjZXB0aW9uIGhhbmRsZXI6
ICIsIGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCksICJcbiIpOwogICAgICAgICBkYXRhTG9nKCIg
ICAgSXMgdW53aW5kIGhhbmRsZXI6ICIsIGV4aXQuaXNHZW5lcmljVW53aW5kSGFuZGxlcigpLCAi
XG4iKTsKLSNpZiAhRlRMX1VTRVNfQjMKLSAgICAgICAgZGF0YUxvZygiICAgIFdpbGwgYXJyaXZl
IGF0IGV4aXQgZnJvbSBsYXp5IHNsb3cgcGF0aDogIiwgZXhpdC5tX2V4Y2VwdGlvblR5cGUgPT0g
RXhjZXB0aW9uVHlwZTo6TGF6eVNsb3dQYXRoLCAiXG4iKTsKLSNlbmRpZiAvLyAhRlRMX1VTRVNf
QjMKICAgICAgICAgZGF0YUxvZygiICAgIEV4aXQgdmFsdWVzOiAiLCBleGl0Lm1fZGVzY3JpcHRv
ci0+bV92YWx1ZXMsICJcbiIpOwotI2lmIEZUTF9VU0VTX0IzCiAgICAgICAgIGRhdGFMb2coIiAg
ICBWYWx1ZSByZXBzOiAiLCBsaXN0RHVtcChleGl0Lm1fdmFsdWVSZXBzKSwgIlxuIik7Ci0jZW5k
aWYgLy8gRlRMX1VTRVNfQjMKICAgICAgICAgaWYgKCFleGl0Lm1fZGVzY3JpcHRvci0+bV9tYXRl
cmlhbGl6YXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgZGF0YUxvZygiICAgIE1hdGVy
aWFsaXphdGlvbnM6XG4iKTsKICAgICAgICAgICAgIGZvciAoRXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiA6IGV4aXQubV9kZXNjcmlwdG9yLT5tX21hdGVyaWFs
aXphdGlvbnMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRIYW5k
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dEhhbmRsZS5jcHAJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT1NSRXhpdEhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGVExPU1JFeGl0SGFuZGxlLmgiCiAKLSNp
ZiBFTkFCTEUoRlRMX0pJVCkgJiYgRlRMX1VTRVNfQjMKKyNpZiBFTkFCTEUoRlRMX0pJVCkKIAog
I2luY2x1ZGUgIkZUTE9TUkV4aXQuaCIKICNpbmNsdWRlICJGVExTdGF0ZS5oIgpAQCAtNTgsNSAr
NTgsNSBAQCB2b2lkIE9TUkV4aXRIYW5kbGU6OmVtaXRFeGl0VGh1bmsoU3RhdGUmCiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpGVEwKIAotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKSAmJiBGVExf
VVNFU19CMworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRIYW5kbGUuaAkocmV2aXNpb24gMTk2Njg1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0SGFuZGxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogCi0jaWYgRU5B
QkxFKEZUTF9KSVQpICYmIEZUTF9VU0VTX0IzCisjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNs
dWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQu
aD4KQEAgLTYxLDcgKzYxLDcgQEAgc3RydWN0IE9TUkV4aXRIYW5kbGUgOiBwdWJsaWMgVGhyZWFk
U2FmZQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKLSNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkgJiYgRlRMX1VTRVNfQjMKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKIAogI2VuZGlm
IC8vIEZUTE9TUkV4aXRIYW5kbGVfaAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE91dHB1dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPdXRwdXQuY3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE91dHB1dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzAwICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiREZHQ29tbW9uLmgiCi0jaW5jbHVkZSAiRlRMQjNPdXRw
dXQuaCIKLSNpbmNsdWRlICJGVExPdXRwdXQuaCIKLQotI2lmIEVOQUJMRShGVExfSklUKQotCi1u
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLSNpZiAhRlRMX1VTRVNfQjMKLQotT3V0
cHV0OjpPdXRwdXQoU3RhdGUmIHN0YXRlKQotICAgIDogSW50cmluc2ljUmVwb3NpdG9yeShzdGF0
ZS5jb250ZXh0KQotICAgICwgbV9mdW5jdGlvbigwKQotICAgICwgbV9oZWFwcygwKQotICAgICwg
bV9idWlsZGVyKGxsdm0tPkNyZWF0ZUJ1aWxkZXJJbkNvbnRleHQobV9jb250ZXh0KSkKLSAgICAs
IG1fYmxvY2soMCkKLSAgICAsIG1fbmV4dEJsb2NrKDApCi17Ci19Ci0KLU91dHB1dDo6fk91dHB1
dCgpCi17Ci0gICAgbGx2bS0+RGlzcG9zZUJ1aWxkZXIobV9idWlsZGVyKTsKLX0KLQotdm9pZCBP
dXRwdXQ6OmluaXRpYWxpemUoTE1vZHVsZSBtb2R1bGUsIExWYWx1ZSBmdW5jdGlvbiwgQWJzdHJh
Y3RIZWFwUmVwb3NpdG9yeSYgaGVhcHMpCi17Ci0gICAgSW50cmluc2ljUmVwb3NpdG9yeTo6aW5p
dGlhbGl6ZShtb2R1bGUpOwotICAgIG1fZnVuY3Rpb24gPSBmdW5jdGlvbjsKLSAgICBtX2hlYXBz
ID0gJmhlYXBzOwotfQotCi1MQmFzaWNCbG9jayBPdXRwdXQ6OmFwcGVuZFRvKExCYXNpY0Jsb2Nr
IGJsb2NrLCBMQmFzaWNCbG9jayBuZXh0QmxvY2spCi17Ci0gICAgYXBwZW5kVG8oYmxvY2spOwot
ICAgIHJldHVybiBpbnNlcnROZXdCbG9ja3NCZWZvcmUobmV4dEJsb2NrKTsKLX0KLQotdm9pZCBP
dXRwdXQ6OmFwcGVuZFRvKExCYXNpY0Jsb2NrIGJsb2NrKQotewotICAgIG1fYmxvY2sgPSBibG9j
azsKLSAgICAKLSAgICBsbHZtLT5Qb3NpdGlvbkJ1aWxkZXJBdEVuZChtX2J1aWxkZXIsIGJsb2Nr
KTsKLX0KLQotTEJhc2ljQmxvY2sgT3V0cHV0OjpuZXdCbG9jayhjb25zdCBjaGFyKiBuYW1lKQot
ewotICAgIGlmICghbV9uZXh0QmxvY2spCi0gICAgICAgIHJldHVybiBhcHBlbmRCYXNpY0Jsb2Nr
KG1fY29udGV4dCwgbV9mdW5jdGlvbiwgbmFtZSk7Ci0gICAgcmV0dXJuIGluc2VydEJhc2ljQmxv
Y2sobV9jb250ZXh0LCBtX25leHRCbG9jaywgbmFtZSk7Ci19Ci0KLUxWYWx1ZSBPdXRwdXQ6OmNo
aWxsRGl2KExWYWx1ZSBudW1lcmF0b3IsIExWYWx1ZSBkZW5vbWluYXRvcikKLXsKLSAgICBMQmFz
aWNCbG9jayB1bnNhZmVEZW5vbWluYXRvciA9IEZUTF9ORVdfQkxPQ0soKnRoaXMsICgiQ2hpbGxE
aXYgdW5zYWZlIGRlbm9taW5hdG9yIikpOwotICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IEZUTF9ORVdfQkxPQ0soKnRoaXMsICgiQ2hpbGxEaXYgY29udGludWF0aW9uIikpOwotICAgIExC
YXNpY0Jsb2NrIGRvbmUgPSBGVExfTkVXX0JMT0NLKCp0aGlzLCAoIkNoaWxsRGl2IGRvbmUiKSk7
Ci0gICAgTEJhc2ljQmxvY2sgZGl2QnlaZXJvID0gRlRMX05FV19CTE9DSygqdGhpcywgKCJDaGls
bERpdiBkaXZpZGUgYnkgemVybyIpKTsKLSAgICBMQmFzaWNCbG9jayBub3REaXZCeVplcm8gPSBG
VExfTkVXX0JMT0NLKCp0aGlzLCAoIkNoaWxsRGl2IG5vdCBkaXZpZGUgYnkgemVybyIpKTsKLSAg
ICBMQmFzaWNCbG9jayBuZWcyVG9UaGUzMUJ5TmVnMSA9IEZUTF9ORVdfQkxPQ0soKnRoaXMsICgi
QXJpdGhEaXYgLTJeMzEvLTEiKSk7Ci0KLSAgICBMVmFsdWUgYWRqdXN0ZWREZW5vbWluYXRvciA9
IGFkZChkZW5vbWluYXRvciwgaW50MzJPbmUpOwotICAgIGJyYW5jaCgKLSAgICAgICAgYWJvdmUo
YWRqdXN0ZWREZW5vbWluYXRvciwgaW50MzJPbmUpLAotICAgICAgICB1c3VhbGx5KGNvbnRpbnVh
dGlvbiksIHJhcmVseSh1bnNhZmVEZW5vbWluYXRvcikpOwotCi0gICAgVmVjdG9yPFZhbHVlRnJv
bUJsb2NrLCAzPiByZXN1bHRzOwotICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gYXBwZW5kVG8o
dW5zYWZlRGVub21pbmF0b3IsIGNvbnRpbnVhdGlvbik7Ci0KLSAgICBMVmFsdWUgbmVnMlRvVGhl
MzEgPSBjb25zdEludDMyKC0yMTQ3NDgzNjQ3LTEpOwotICAgIGJyYW5jaChpc1plcm8zMihkZW5v
bWluYXRvciksIHJhcmVseShkaXZCeVplcm8pLCB1c3VhbGx5KG5vdERpdkJ5WmVybykpOwotCi0g
ICAgYXBwZW5kVG8oZGl2QnlaZXJvLCBub3REaXZCeVplcm8pOwotICAgIHJlc3VsdHMuYXBwZW5k
KGFuY2hvcihpbnQzMlplcm8pKTsKLSAgICBqdW1wKGRvbmUpOwotCi0gICAgYXBwZW5kVG8obm90
RGl2QnlaZXJvLCBuZWcyVG9UaGUzMUJ5TmVnMSk7Ci0gICAgYnJhbmNoKGVxdWFsKG51bWVyYXRv
ciwgbmVnMlRvVGhlMzEpLAotICAgICAgICByYXJlbHkobmVnMlRvVGhlMzFCeU5lZzEpLCB1c3Vh
bGx5KGNvbnRpbnVhdGlvbikpOwotCi0gICAgYXBwZW5kVG8obmVnMlRvVGhlMzFCeU5lZzEsIGNv
bnRpbnVhdGlvbik7Ci0gICAgcmVzdWx0cy5hcHBlbmQoYW5jaG9yKG5lZzJUb1RoZTMxKSk7Ci0g
ICAganVtcChkb25lKTsKLQotICAgIGFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgZG9uZSk7Ci0gICAg
TFZhbHVlIHJlc3VsdCA9IGRpdihudW1lcmF0b3IsIGRlbm9taW5hdG9yKTsKLSAgICByZXN1bHRz
LmFwcGVuZChhbmNob3IocmVzdWx0KSk7Ci0gICAganVtcChkb25lKTsKLQotICAgIGFwcGVuZFRv
KGRvbmUsIGxhc3ROZXh0KTsKLSAgICByZXR1cm4gcGhpKGludDMyLCByZXN1bHRzKTsKLX0KLQot
TFZhbHVlIE91dHB1dDo6Y2hpbGxNb2QoTFZhbHVlIG51bWVyYXRvciwgTFZhbHVlIGRlbm9taW5h
dG9yKQotewotICAgIExCYXNpY0Jsb2NrIHVuc2FmZURlbm9taW5hdG9yID0gRlRMX05FV19CTE9D
SygqdGhpcywgKCJDaGlsbE1vZCB1bnNhZmUgZGVub21pbmF0b3IiKSk7Ci0gICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSygqdGhpcywgKCJDaGlsbE1vZCBjb250aW51
YXRpb24iKSk7Ci0gICAgTEJhc2ljQmxvY2sgZG9uZSA9IEZUTF9ORVdfQkxPQ0soKnRoaXMsICgi
Q2hpbGxNb2QgZG9uZSIpKTsKLSAgICBMQmFzaWNCbG9jayBkaXZCeVplcm8gPSBGVExfTkVXX0JM
T0NLKCp0aGlzLCAoIkNoaWxsTW9kIGRpdmlkZSBieSB6ZXJvIikpOwotICAgIExCYXNpY0Jsb2Nr
IG5vdERpdkJ5WmVybyA9IEZUTF9ORVdfQkxPQ0soKnRoaXMsICgiQ2hpbGxNb2Qgbm90IGRpdmlk
ZSBieSB6ZXJvIikpOwotICAgIExCYXNpY0Jsb2NrIG5lZzJUb1RoZTMxQnlOZWcxID0gRlRMX05F
V19CTE9DSygqdGhpcywgKCJDaGlsbE1vZCAtMl4zMS8tMSIpKTsKLQotICAgIExWYWx1ZSBhZGp1
c3RlZERlbm9taW5hdG9yID0gYWRkKGRlbm9taW5hdG9yLCBpbnQzMk9uZSk7Ci0gICAgYnJhbmNo
KAotICAgICAgICBhYm92ZShhZGp1c3RlZERlbm9taW5hdG9yLCBpbnQzMk9uZSksCi0gICAgICAg
IHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHVuc2FmZURlbm9taW5hdG9yKSk7Ci0KLSAg
ICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDM+IHJlc3VsdHM7Ci0gICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBhcHBlbmRUbyh1bnNhZmVEZW5vbWluYXRvciwgY29udGludWF0aW9uKTsKLQotICAg
IExWYWx1ZSBuZWcyVG9UaGUzMSA9IGNvbnN0SW50MzIoLTIxNDc0ODM2NDctMSk7Ci0gICAgYnJh
bmNoKGlzWmVybzMyKGRlbm9taW5hdG9yKSwgcmFyZWx5KGRpdkJ5WmVybyksIHVzdWFsbHkobm90
RGl2QnlaZXJvKSk7Ci0KLSAgICBhcHBlbmRUbyhkaXZCeVplcm8sIG5vdERpdkJ5WmVybyk7Ci0g
ICAgcmVzdWx0cy5hcHBlbmQoYW5jaG9yKGludDMyWmVybykpOwotICAgIGp1bXAoZG9uZSk7Ci0K
LSAgICBhcHBlbmRUbyhub3REaXZCeVplcm8sIG5lZzJUb1RoZTMxQnlOZWcxKTsKLSAgICBicmFu
Y2goZXF1YWwobnVtZXJhdG9yLCBuZWcyVG9UaGUzMSksCi0gICAgICAgIHJhcmVseShuZWcyVG9U
aGUzMUJ5TmVnMSksIHVzdWFsbHkoY29udGludWF0aW9uKSk7Ci0KLSAgICBhcHBlbmRUbyhuZWcy
VG9UaGUzMUJ5TmVnMSwgY29udGludWF0aW9uKTsKLSAgICByZXN1bHRzLmFwcGVuZChhbmNob3Io
aW50MzJaZXJvKSk7Ci0gICAganVtcChkb25lKTsKLQotICAgIGFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgZG9uZSk7Ci0gICAgTFZhbHVlIHJlc3VsdCA9IG1vZChudW1lcmF0b3IsIGRlbm9taW5hdG9y
KTsKLSAgICByZXN1bHRzLmFwcGVuZChhbmNob3IocmVzdWx0KSk7Ci0gICAganVtcChkb25lKTsK
LQotICAgIGFwcGVuZFRvKGRvbmUsIGxhc3ROZXh0KTsKLSAgICByZXR1cm4gcGhpKGludDMyLCBy
ZXN1bHRzKTsKLX0KLQotTFZhbHVlIE91dHB1dDo6c2Vuc2libGVEb3VibGVUb0ludChMVmFsdWUg
dmFsdWUpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXNYODYoKSk7Ci0gICAgcmV0dXJuIGNhbGwo
Ci0gICAgICAgIGludDMyLAotICAgICAgICB4ODZTU0UyQ3Z0VFNEMlNJSW50cmluc2ljKCksCi0g
ICAgICAgIGluc2VydEVsZW1lbnQoCi0gICAgICAgICAgICBpbnNlcnRFbGVtZW50KGdldFVuZGVm
KHZlY3RvclR5cGUoZG91YmxlVHlwZSwgMikpLCB2YWx1ZSwgaW50MzJaZXJvKSwKLSAgICAgICAg
ICAgIGRvdWJsZVplcm8sIGludDMyT25lKSk7Ci19Ci0KLUxWYWx1ZSBPdXRwdXQ6OmxvYWQoVHlw
ZWRQb2ludGVyIHBvaW50ZXIsIExUeXBlIHJlZlR5cGUpCi17Ci0gICAgTFZhbHVlIHJlc3VsdCA9
IGdldChpbnRUb1B0cihwb2ludGVyLnZhbHVlKCksIHJlZlR5cGUpKTsKLSAgICBwb2ludGVyLmhl
YXAoKS5kZWNvcmF0ZUluc3RydWN0aW9uKHJlc3VsdCwgKm1faGVhcHMpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLXZvaWQgT3V0cHV0OjpzdG9yZShMVmFsdWUgdmFsdWUsIFR5cGVkUG9pbnRl
ciBwb2ludGVyLCBMVHlwZSByZWZUeXBlKQotewotICAgIExWYWx1ZSByZXN1bHQgPSBzZXQodmFs
dWUsIGludFRvUHRyKHBvaW50ZXIudmFsdWUoKSwgcmVmVHlwZSkpOwotICAgIHBvaW50ZXIuaGVh
cCgpLmRlY29yYXRlSW5zdHJ1Y3Rpb24ocmVzdWx0LCAqbV9oZWFwcyk7Ci19Ci0KLUxWYWx1ZSBP
dXRwdXQ6OmJhc2VJbmRleChMVmFsdWUgYmFzZSwgTFZhbHVlIGluZGV4LCBTY2FsZSBzY2FsZSwg
cHRyZGlmZl90IG9mZnNldCkKLXsKLSAgICBMVmFsdWUgYWNjdW11bGF0ZWRPZmZzZXQ7Ci0gICAg
ICAgIAotICAgIHN3aXRjaCAoc2NhbGUpIHsKLSAgICBjYXNlIFNjYWxlT25lOgotICAgICAgICBh
Y2N1bXVsYXRlZE9mZnNldCA9IGluZGV4OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNjYWxl
VHdvOgotICAgICAgICBhY2N1bXVsYXRlZE9mZnNldCA9IHNobChpbmRleCwgaW50UHRyT25lKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTY2FsZUZvdXI6Ci0gICAgICAgIGFjY3VtdWxhdGVk
T2Zmc2V0ID0gc2hsKGluZGV4LCBpbnRQdHJUd28pOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFNjYWxlRWlnaHQ6Ci0gICAgY2FzZSBTY2FsZVB0cjoKLSAgICAgICAgYWNjdW11bGF0ZWRPZmZz
ZXQgPSBzaGwoaW5kZXgsIGludFB0clRocmVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
ICAgICAKLSAgICBpZiAob2Zmc2V0KQotICAgICAgICBhY2N1bXVsYXRlZE9mZnNldCA9IGFkZChh
Y2N1bXVsYXRlZE9mZnNldCwgY29uc3RJbnRQdHIob2Zmc2V0KSk7Ci0gICAgICAgIAotICAgIHJl
dHVybiBhZGQoYmFzZSwgYWNjdW11bGF0ZWRPZmZzZXQpOwotfQotCi12b2lkIE91dHB1dDo6YnJh
bmNoKExWYWx1ZSBjb25kaXRpb24sIExCYXNpY0Jsb2NrIHRha2VuLCBXZWlnaHQgdGFrZW5XZWln
aHQsIExCYXNpY0Jsb2NrIG5vdFRha2VuLCBXZWlnaHQgbm90VGFrZW5XZWlnaHQpCi17Ci0gICAg
TFZhbHVlIGJyYW5jaCA9IGJ1aWxkQ29uZEJyKG1fYnVpbGRlciwgY29uZGl0aW9uLCB0YWtlbiwg
bm90VGFrZW4pOwotICAgIAotICAgIGlmICghdGFrZW5XZWlnaHQgfHwgIW5vdFRha2VuV2VpZ2h0
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgZG91YmxlIHRvdGFsID0gdGFrZW5XZWlnaHQu
dmFsdWUoKSArIG5vdFRha2VuV2VpZ2h0LnZhbHVlKCk7Ci0gICAgCi0gICAgc2V0TWV0YWRhdGEo
Ci0gICAgICAgIGJyYW5jaCwgcHJvZktpbmQsCi0gICAgICAgIG1kTm9kZSgKLSAgICAgICAgICAg
IG1fY29udGV4dCwgYnJhbmNoV2VpZ2h0cywKLSAgICAgICAgICAgIGNvbnN0SW50MzIodGFrZW5X
ZWlnaHQuc2NhbGVUb1RvdGFsKHRvdGFsKSksCi0gICAgICAgICAgICBjb25zdEludDMyKG5vdFRh
a2VuV2VpZ2h0LnNjYWxlVG9Ub3RhbCh0b3RhbCkpKSk7Ci19Ci0KLXZvaWQgT3V0cHV0OjpjaGVj
ayhMVmFsdWUgY29uZGl0aW9uLCBXZWlnaHRlZFRhcmdldCB0YWtlbiwgV2VpZ2h0IG5vdFRha2Vu
V2VpZ2h0KQotewotICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
KnRoaXMsICgiT3V0cHV0OjpjaGVjayBjb250aW51YXRpb24iKSk7Ci0gICAgYnJhbmNoKGNvbmRp
dGlvbiwgdGFrZW4sIFdlaWdodGVkVGFyZ2V0KGNvbnRpbnVhdGlvbiwgbm90VGFrZW5XZWlnaHQp
KTsKLSAgICBhcHBlbmRUbyhjb250aW51YXRpb24pOwotfQotCi12b2lkIE91dHB1dDo6Y2hlY2so
TFZhbHVlIGNvbmRpdGlvbiwgV2VpZ2h0ZWRUYXJnZXQgdGFrZW4pCi17Ci0gICAgY2hlY2soY29u
ZGl0aW9uLCB0YWtlbiwgdGFrZW4ud2VpZ2h0KCkuaW52ZXJzZSgpKTsKLX0KLQotI2VuZGlmIC8v
ICFGVExfVVNFU19CMwotCi1MVmFsdWUgT3V0cHV0Ojpsb2FkKFR5cGVkUG9pbnRlciBwb2ludGVy
LCBMb2FkVHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgTG9hZDhT
aWduRXh0MzI6Ci0gICAgICAgIHJldHVybiBsb2FkOFNpZ25FeHQzMihwb2ludGVyKTsKLSAgICBj
YXNlIExvYWQ4WmVyb0V4dDMyOgotICAgICAgICByZXR1cm4gbG9hZDhaZXJvRXh0MzIocG9pbnRl
cik7Ci0gICAgY2FzZSBMb2FkMTZTaWduRXh0MzI6Ci0gICAgICAgIHJldHVybiBsb2FkOFNpZ25F
eHQzMihwb2ludGVyKTsKLSAgICBjYXNlIExvYWQxNlplcm9FeHQzMjoKLSAgICAgICAgcmV0dXJu
IGxvYWQ4WmVyb0V4dDMyKHBvaW50ZXIpOwotICAgIGNhc2UgTG9hZDMyOgotICAgICAgICByZXR1
cm4gbG9hZDMyKHBvaW50ZXIpOwotICAgIGNhc2UgTG9hZDY0OgotICAgICAgICByZXR1cm4gbG9h
ZDY0KHBvaW50ZXIpOwotICAgIGNhc2UgTG9hZFB0cjoKLSAgICAgICAgcmV0dXJuIGxvYWRQdHIo
cG9pbnRlcik7Ci0gICAgY2FzZSBMb2FkRmxvYXQ6Ci0gICAgICAgIHJldHVybiBsb2FkRmxvYXQo
cG9pbnRlcik7Ci0gICAgY2FzZSBMb2FkRG91YmxlOgotICAgICAgICByZXR1cm4gbG9hZERvdWJs
ZShwb2ludGVyKTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBPdXRwdXQ6OnN0b3JlKExWYWx1ZSB2YWx1ZSwg
VHlwZWRQb2ludGVyIHBvaW50ZXIsIFN0b3JlVHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlw
ZSkgewotICAgIGNhc2UgU3RvcmUzMkFzODoKLSAgICAgICAgc3RvcmUzMkFzOCh2YWx1ZSwgcG9p
bnRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFN0b3JlMzJBczE2OgotICAgICAgICBz
dG9yZTMyQXMxNih2YWx1ZSwgcG9pbnRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFN0
b3JlMzI6Ci0gICAgICAgIHN0b3JlMzIodmFsdWUsIHBvaW50ZXIpOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBTdG9yZTY0OgotICAgICAgICBzdG9yZTY0KHZhbHVlLCBwb2ludGVyKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgU3RvcmVQdHI6Ci0gICAgICAgIHN0b3JlUHRyKHZhbHVl
LCBwb2ludGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgU3RvcmVGbG9hdDoKLSAgICAg
ICAgc3RvcmVGbG9hdCh2YWx1ZSwgcG9pbnRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNl
IFN0b3JlRG91YmxlOgotICAgICAgICBzdG9yZURvdWJsZSh2YWx1ZSwgcG9pbnRlcik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0K
LQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQp
Ci0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkocmV2aXNpb24gMTk2
Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1MjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgRlRMT3V0cHV0X2gKLSNkZWZpbmUgRlRMT3V0cHV0
X2gKLQotI2lmIEVOQUJMRShGVExfSklUKQotI2lmICFGVExfVVNFU19CMwotCi0jaW5jbHVkZSAi
REZHQ29tbW9uLmgiCi0jaW5jbHVkZSAiRlRMQWJicmV2aWF0aW9ucy5oIgotI2luY2x1ZGUgIkZU
TEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaCIKLSNpbmNsdWRlICJGVExDb21tb25WYWx1ZXMuaCIK
LSNpbmNsdWRlICJGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgiCi0jaW5jbHVkZSAiRlRMU3RhdGUu
aCIKLSNpbmNsdWRlICJGVExTd2l0Y2hDYXNlLmgiCi0jaW5jbHVkZSAiRlRMVHlwZWRQb2ludGVy
LmgiCi0jaW5jbHVkZSAiRlRMV2VpZ2h0LmgiCi0jaW5jbHVkZSAiRlRMV2VpZ2h0ZWRUYXJnZXQu
aCIKLSNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgewotCi0vLyBJZGlvbWF0aWMgTExWTSBJUiBidWlsZGVyIHNwZWNpZmlj
YWxseSBkZXNpZ25lZCBmb3IgRlRMLiBUaGlzIHVzZXMgb3VyIG93biBsb3dlcmluZwotLy8gdGVy
bWlub2xvZ3ksIGFuZCBoYXMgc29tZSBvZiBpdHMgb3duIG5vdGlvbnM6Ci0vLwotLy8gV2Ugc2F5
IHRoYXQgYSAicmVmZXJlbmNlIiBpcyB3aGF0IExMVk0gY29uc2lkZXJzIHRvIGJlIGEgInBvaW50
ZXIiLiBUaGF0IGlzLCBpdCBoYXMKLS8vIGFuIGVsZW1lbnQgdHlwZSBhbmQgY2FuIGJlIHBhc3Nl
ZCBkaXJlY3RseSB0byBtZW1vcnkgYWNjZXNzIGluc3RydWN0aW9ucy4gTm90ZSB0aGF0Ci0vLyBi
cm9hZGx5IHNwZWFraW5nIHRoZSB1c2VycyBvZiBGVEw6Ok91dHB1dCBzaG91bGQgb25seSB1c2Ug
cmVmZXJlbmNlcyBmb3IgYWxsb2NhJ2QKLS8vIHNsb3RzIGZvciBtdXRhYmxlIGxvY2FsIHZhcmlh
Ymxlcy4KLS8vCi0vLyBXZSBzYXkgdGhhdCBhICJwb2ludGVyIiBpcyB3aGF0IExMVk0gY29uc2lk
ZXJzIHRvIGJlIGEgcG9pbnRlci13aWR0aCBpbnRlZ2VyLgotLy8KLS8vIFdlIHNheSB0aGF0IGEg
InR5cGVkIHBvaW50ZXIiIGlzIGEgcG9pbnRlciB0aGF0IGNhcnJpZXMgVEJBQSBtZXRhLWRhdGEg
KGkuZS4gYW4KLS8vIEFic3RyYWN0SGVhcCkuIFRoZXNlIHNob3VsZCB1c3VhbGx5IG5vdCBoYXZl
IGZ1cnRoZXIgY29tcHV0YXRpb24gcGVyZm9ybWVkIG9uIHRoZW0KLS8vIHByaW9yIHRvIGFjY2Vz
cywgdGhvdWdoIHRoZXJlIGFyZSBleGNlcHRpb25zIChsaWtlIG9mZnNldHRpbmcgaW50byB0aGUg
cGF5bG9hZCBvZgotLy8gYSB0eXBlZCBwb2ludGVyIHRvIGEgSlNWYWx1ZSkuCi0vLwotLy8gV2Ug
c2F5IHRoYXQgImdldCIgYW5kICJzZXQiIGFyZSB3aGF0IExMVk0gY29uc2lkZXJzIHRvIGJlICJs
b2FkIiBhbmQgInN0b3JlIi4gR2V0Ci0vLyBhbmQgc2V0IHRha2UgcmVmZXJlbmNlcy4KLS8vCi0v
LyBXZSBzYXkgdGhhdCAibG9hZCIgYW5kICJzdG9yZSIgYXJlIG9wZXJhdGlvbnMgdGhhdCB0YWtl
IGEgdHlwZWQgcG9pbnRlci4gVGhlc2UKLS8vIG9wZXJhdGlvbnMgdHJhbnNsYXRlIHRoZSBwb2lu
dGVyIGludG8gYSByZWZlcmVuY2UgKG9yLCBhIHBvaW50ZXIgaW4gTExWTS1zcGVhayksCi0vLyBl
bWl0IGdldCBvciBzZXQgb24gdGhlIHJlZmVyZW5jZSAob3IsIGxvYWQgYW5kIHN0b3JlIGluIExM
Vk0tc3BlYWspLCBhbmQgYXBwbHkgdGhlCi0vLyBUQkFBIG1ldGEtZGF0YSB0byB0aGUgZ2V0IG9y
IHNldC4KLQotZW51bSBTY2FsZSB7IFNjYWxlT25lLCBTY2FsZVR3bywgU2NhbGVGb3VyLCBTY2Fs
ZUVpZ2h0LCBTY2FsZVB0ciB9OwotCi1jbGFzcyBPdXRwdXQgOiBwdWJsaWMgSW50cmluc2ljUmVw
b3NpdG9yeSB7Ci1wdWJsaWM6Ci0gICAgT3V0cHV0KFN0YXRlJik7Ci0gICAgfk91dHB1dCgpOwot
ICAgIAotICAgIHZvaWQgaW5pdGlhbGl6ZShMTW9kdWxlLCBMVmFsdWUsIEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkmKTsKLQotICAgIHZvaWQgc2V0RnJlcXVlbmN5KGRvdWJsZSkgeyB9Ci0gICAgCi0g
ICAgTEJhc2ljQmxvY2sgaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKExCYXNpY0Jsb2NrIG5leHRCbG9j
aykKLSAgICB7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0QmxvY2sgPSBtX25leHRCbG9j
azsKLSAgICAgICAgbV9uZXh0QmxvY2sgPSBuZXh0QmxvY2s7Ci0gICAgICAgIHJldHVybiBsYXN0
TmV4dEJsb2NrOwotICAgIH0KLSAgICAKLSAgICBMQmFzaWNCbG9jayBhcHBlbmRUbyhMQmFzaWNC
bG9jaywgTEJhc2ljQmxvY2sgbmV4dEJsb2NrKTsKLSAgICAKLSAgICB2b2lkIGFwcGVuZFRvKExC
YXNpY0Jsb2NrKTsKLSAgICAKLSAgICBMQmFzaWNCbG9jayBuZXdCbG9jayhjb25zdCBjaGFyKiBu
YW1lID0gIiIpOwotICAgIAotICAgIExWYWx1ZSBwYXJhbSh1bnNpZ25lZCBpbmRleCkgeyByZXR1
cm4gZ2V0UGFyYW0obV9mdW5jdGlvbiwgaW5kZXgpOyB9Ci0gICAgTFZhbHVlIGNvbnN0Qm9vbChi
b29sIHZhbHVlKSB7IHJldHVybiBjb25zdEludChib29sZWFuLCB2YWx1ZSk7IH0KLSAgICBMVmFs
dWUgY29uc3RJbnQzMihpbnQzMl90IHZhbHVlKSB7IHJldHVybiBjb25zdEludChpbnQzMiwgdmFs
dWUpOyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBMVmFsdWUgY29uc3RJbnRQdHIo
VCogdmFsdWUpIHsgcmV0dXJuIGNvbnN0SW50KGludFB0ciwgYml0d2lzZV9jYXN0PGludHB0cl90
Pih2YWx1ZSkpOyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBMVmFsdWUgY29uc3RJ
bnRQdHIoVCB2YWx1ZSkgeyByZXR1cm4gY29uc3RJbnQoaW50UHRyLCBzdGF0aWNfY2FzdDxpbnRw
dHJfdD4odmFsdWUpKTsgfQotICAgIExWYWx1ZSBjb25zdEludDY0KGludDY0X3QgdmFsdWUpIHsg
cmV0dXJuIGNvbnN0SW50KGludDY0LCB2YWx1ZSk7IH0KLSAgICBMVmFsdWUgY29uc3REb3VibGUo
ZG91YmxlIHZhbHVlKSB7IHJldHVybiBjb25zdFJlYWwoZG91YmxlVHlwZSwgdmFsdWUpOyB9Ci0g
ICAgCi0gICAgTFZhbHVlIHBoaShMVHlwZSB0eXBlKSB7IHJldHVybiBidWlsZFBoaShtX2J1aWxk
ZXIsIHR5cGUpOyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gUGFyYW1zPgotICAgIExWYWx1
ZSBwaGkoTFR5cGUgdHlwZSwgVmFsdWVGcm9tQmxvY2sgdmFsdWUsIFBhcmFtcy4uLiB0aGVSZXN0
KQotICAgIHsKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHBoaSh0eXBlLCB0aGVSZXN0Li4uKTsK
LSAgICAgICAgYWRkSW5jb21pbmcocmVzdWx0LCB2YWx1ZSk7Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGU+Ci0gICAgTFZhbHVl
IHBoaShMVHlwZSB0eXBlLCBjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpCi0gICAgewotICAgICAg
ICBMVmFsdWUgcmVzdWx0ID0gcGhpKHR5cGUpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdmVjdG9yLnNpemUoKTsgKytpKQotICAgICAgICAgICAgYWRkSW5jb21pbmcocmVzdWx0
LCB2ZWN0b3JbaV0pOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICB2b2lkIGFk
ZEluY29taW5nVG9QaGkoTFZhbHVlIHBoaSwgVmFsdWVGcm9tQmxvY2sgdmFsdWUpCi0gICAgewot
ICAgICAgICBhZGRJbmNvbWluZyhwaGksIHZhbHVlKTsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVl
IGFkZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZEFkZChtX2J1aWxk
ZXIsIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1ZSBzdWIoTFZhbHVlIGxlZnQsIExWYWx1ZSBy
aWdodCkgeyByZXR1cm4gYnVpbGRTdWIobV9idWlsZGVyLCBsZWZ0LCByaWdodCk7IH0KLSAgICBM
VmFsdWUgbXVsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGJ1aWxkTXVsKG1f
YnVpbGRlciwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVlIGRpdihMVmFsdWUgbGVmdCwgTFZh
bHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZERpdihtX2J1aWxkZXIsIGxlZnQsIHJpZ2h0KTsgfQot
ICAgIExWYWx1ZSBjaGlsbERpdihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KTsKLSAgICBMVmFs
dWUgbW9kKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGJ1aWxkUmVtKG1fYnVp
bGRlciwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVlIGNoaWxsTW9kKExWYWx1ZSBsZWZ0LCBM
VmFsdWUgcmlnaHQpOwotICAgIExWYWx1ZSBuZWcoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBidWls
ZE5lZyhtX2J1aWxkZXIsIHZhbHVlKTsgfQotCi0gICAgTFZhbHVlIGRvdWJsZUFkZChMVmFsdWUg
bGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZEZBZGQobV9idWlsZGVyLCBsZWZ0LCBy
aWdodCk7IH0KLSAgICBMVmFsdWUgZG91YmxlU3ViKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQp
IHsgcmV0dXJuIGJ1aWxkRlN1YihtX2J1aWxkZXIsIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1
ZSBkb3VibGVNdWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gYnVpbGRGTXVs
KG1fYnVpbGRlciwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVlIGRvdWJsZURpdihMVmFsdWUg
bGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZEZEaXYobV9idWlsZGVyLCBsZWZ0LCBy
aWdodCk7IH0KLSAgICBMVmFsdWUgZG91YmxlTW9kKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQp
IHsgcmV0dXJuIGJ1aWxkRlJlbShtX2J1aWxkZXIsIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1
ZSBkb3VibGVOZWcoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBidWlsZEZOZWcobV9idWlsZGVyLCB2
YWx1ZSk7IH0KLQotICAgIExWYWx1ZSBiaXRBbmQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkg
eyByZXR1cm4gYnVpbGRBbmQobV9idWlsZGVyLCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUg
Yml0T3IoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gYnVpbGRPcihtX2J1aWxk
ZXIsIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1ZSBiaXRYb3IoTFZhbHVlIGxlZnQsIExWYWx1
ZSByaWdodCkgeyByZXR1cm4gYnVpbGRYb3IobV9idWlsZGVyLCBsZWZ0LCByaWdodCk7IH0KLSAg
ICBMVmFsdWUgc2hsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGJ1aWxkU2hs
KG1fYnVpbGRlciwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVlIGFTaHIoTFZhbHVlIGxlZnQs
IExWYWx1ZSByaWdodCkgeyByZXR1cm4gYnVpbGRBU2hyKG1fYnVpbGRlciwgbGVmdCwgcmlnaHQp
OyB9IC8vIGFyaXRobWV0aWMgPSBzaWduZWQKLSAgICBMVmFsdWUgbFNocihMVmFsdWUgbGVmdCwg
TFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZExTaHIobV9idWlsZGVyLCBsZWZ0LCByaWdodCk7
IH0gLy8gbG9naWNhbCA9IHVuc2lnbmVkCi0gICAgTFZhbHVlIGJpdE5vdChMVmFsdWUgdmFsdWUp
IHsgcmV0dXJuIGJ1aWxkTm90KG1fYnVpbGRlciwgdmFsdWUpOyB9Ci0gICAgTFZhbHVlIGxvZ2lj
YWxOb3QoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBiaXROb3QodmFsdWUpOyB9Ci0gICAgCi0gICAg
TFZhbHVlIGluc2VydEVsZW1lbnQoTFZhbHVlIHZlY3RvciwgTFZhbHVlIGVsZW1lbnQsIExWYWx1
ZSBpbmRleCkgeyByZXR1cm4gYnVpbGRJbnNlcnRFbGVtZW50KG1fYnVpbGRlciwgdmVjdG9yLCBl
bGVtZW50LCBpbmRleCk7IH0KLQotICAgIExWYWx1ZSBjdGx6MzIoTFZhbHVlIG9wZXJhbmQpCi0g
ICAgewotICAgICAgICByZXR1cm4gY2FsbChpbnQzMiwgY3RsejMySW50cmluc2ljKCksIG9wZXJh
bmQsIGJvb2xlYW5GYWxzZSk7Ci0gICAgfQotICAgIExWYWx1ZSBhZGRXaXRoT3ZlcmZsb3czMihM
VmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGwoaW50
MzIsIGFkZFdpdGhPdmVyZmxvdzMySW50cmluc2ljKCksIGxlZnQsIHJpZ2h0KTsKLSAgICB9Ci0g
ICAgTFZhbHVlIHN1YldpdGhPdmVyZmxvdzMyKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCi0g
ICAgewotICAgICAgICByZXR1cm4gY2FsbChpbnQzMiwgc3ViV2l0aE92ZXJmbG93MzJJbnRyaW5z
aWMoKSwgbGVmdCwgcmlnaHQpOwotICAgIH0KLSAgICBMVmFsdWUgbXVsV2l0aE92ZXJmbG93MzIo
TFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjYWxsKGlu
dDMyLCBtdWxXaXRoT3ZlcmZsb3czMkludHJpbnNpYygpLCBsZWZ0LCByaWdodCk7Ci0gICAgfQot
ICAgIExWYWx1ZSBhZGRXaXRoT3ZlcmZsb3c2NChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGwoaW50NjQsIGFkZFdpdGhPdmVyZmxvdzY0SW50cmlu
c2ljKCksIGxlZnQsIHJpZ2h0KTsKLSAgICB9Ci0gICAgTFZhbHVlIHN1YldpdGhPdmVyZmxvdzY0
KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCi0gICAgewotICAgICAgICByZXR1cm4gY2FsbChp
bnQ2NCwgc3ViV2l0aE92ZXJmbG93NjRJbnRyaW5zaWMoKSwgbGVmdCwgcmlnaHQpOwotICAgIH0K
LSAgICBMVmFsdWUgbXVsV2l0aE92ZXJmbG93NjQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBjYWxsKGludDY0LCBtdWxXaXRoT3ZlcmZsb3c2NEludHJp
bnNpYygpLCBsZWZ0LCByaWdodCk7Ci0gICAgfQotICAgIExWYWx1ZSBkb3VibGVBYnMoTFZhbHVl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGwoZG91YmxlVHlwZSwgZG91YmxlQWJz
SW50cmluc2ljKCksIHZhbHVlKTsKLSAgICB9Ci0gICAgTFZhbHVlIGRvdWJsZUNlaWwoTFZhbHVl
IG9wZXJhbmQpCi0gICAgewotICAgICAgICByZXR1cm4gY2FsbChkb3VibGVUeXBlLCBjZWlsNjRJ
bnRyaW5zaWMoKSwgb3BlcmFuZCk7Ci0gICAgfQotCi0gICAgTFZhbHVlIGRvdWJsZVNpbihMVmFs
dWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY2FsbChkb3VibGVUeXBlLCBkb3VibGVT
aW5JbnRyaW5zaWMoKSwgdmFsdWUpOwotICAgIH0KLSAgICBMVmFsdWUgZG91YmxlQ29zKExWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjYWxsKGRvdWJsZVR5cGUsIGRvdWJsZUNv
c0ludHJpbnNpYygpLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgTFZhbHVlIGRvdWJsZVBvdyhMVmFs
dWUgeE9wZXJhbmQsIExWYWx1ZSB5T3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjYWxs
KGRvdWJsZVR5cGUsIGRvdWJsZVBvd0ludHJpbnNpYygpLCB4T3BlcmFuZCwgeU9wZXJhbmQpOwot
ICAgIH0KLQotICAgIExWYWx1ZSBkb3VibGVQb3dpKExWYWx1ZSB4T3BlcmFuZCwgTFZhbHVlIHlP
cGVyYW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGwoZG91YmxlVHlwZSwgZG91YmxlUG93
aUludHJpbnNpYygpLCB4T3BlcmFuZCwgeU9wZXJhbmQpOwotICAgIH0KLQotICAgIExWYWx1ZSBk
b3VibGVTcXJ0KExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjYWxsKGRvdWJs
ZVR5cGUsIGRvdWJsZVNxcnRJbnRyaW5zaWMoKSwgdmFsdWUpOwotICAgIH0KLQotICAgIExWYWx1
ZSBkb3VibGVMb2coTFZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGwoZG91
YmxlVHlwZSwgZG91YmxlTG9nSW50cmluc2ljKCksIHZhbHVlKTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgYm9vbCBoYXNTZW5zaWJsZURvdWJsZVRvSW50KCkgeyByZXR1cm4gaXNYODYoKTsgfQotICAg
IExWYWx1ZSBzZW5zaWJsZURvdWJsZVRvSW50KExWYWx1ZSk7Ci0gICAgTFZhbHVlIGRvdWJsZVRv
SW50KExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gZnBUb0ludDMyKHZhbHVlKTsgfQotICAgIExWYWx1
ZSBkb3VibGVUb1VJbnQoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBmcFRvVUludDMyKHZhbHVlKTsg
fQotCi0gICAgTFZhbHVlIHNpZ25FeHQzMlRvNjQoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBzaWdu
RXh0KHZhbHVlLCBpbnQ2NCk7IH0KLSAgICBMVmFsdWUgemVyb0V4dChMVmFsdWUgdmFsdWUsIExU
eXBlIHR5cGUpIHsgcmV0dXJuIGJ1aWxkWkV4dChtX2J1aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQot
ICAgIExWYWx1ZSB6ZXJvRXh0UHRyKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gemVyb0V4dCh2YWx1
ZSwgaW50UHRyKTsgfQotICAgIExWYWx1ZSBmcFRvSW50MzIoTFZhbHVlIHZhbHVlKSB7IHJldHVy
biBmcFRvSW50KHZhbHVlLCBpbnQzMik7IH0KLSAgICBMVmFsdWUgZnBUb1VJbnQzMihMVmFsdWUg
dmFsdWUpIHsgcmV0dXJuIGZwVG9VSW50KHZhbHVlLCBpbnQzMik7IH0KLSAgICBMVmFsdWUgaW50
VG9Eb3VibGUoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBpbnRUb0ZQKHZhbHVlLCBkb3VibGVUeXBl
KTsgfQotICAgIExWYWx1ZSB1bnNpZ25lZFRvRG91YmxlKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4g
dW5zaWduZWRUb0ZQKHZhbHVlLCBkb3VibGVUeXBlKTsgfQotICAgIExWYWx1ZSBjYXN0VG9JbnQz
MihMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIGludENhc3QodmFsdWUsIGludDMyKTsgfQotICAgIExW
YWx1ZSBkb3VibGVUb0Zsb2F0KExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gZnBDYXN0KHZhbHVlLCBm
bG9hdFR5cGUpOyB9Ci0gICAgTFZhbHVlIGZsb2F0VG9Eb3VibGUoTFZhbHVlIHZhbHVlKSB7IHJl
dHVybiBmcENhc3QodmFsdWUsIGRvdWJsZVR5cGUpOyB9Ci0gICAgTFZhbHVlIGludFRvUHRyKExW
YWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRJbnRUb1B0cihtX2J1aWxkZXIs
IHZhbHVlLCB0eXBlKTsgfQotICAgIExWYWx1ZSBwdHJUb0ludChMVmFsdWUgdmFsdWUsIExUeXBl
IHR5cGUpIHsgcmV0dXJuIGJ1aWxkUHRyVG9JbnQobV9idWlsZGVyLCB2YWx1ZSwgdHlwZSk7IH0K
LSAgICBMVmFsdWUgYml0Q2FzdChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGJ1
aWxkQml0Q2FzdChtX2J1aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQotCi0gICAgTFZhbHVlIGZyb3Vu
ZChMVmFsdWUgZG91YmxlVmFsdWUpOwotICAgIAotICAgIC8vIEhpbGFyaW91c2x5LCB0aGUgI2Rl
ZmluZSBtYWNoaW5lcnkgaW4gdGhlIHN0ZGxpYiBtZWFucyB0aGF0IHRoaXMgbWV0aG9kIGlzIGFj
dHVhbGx5IGNhbGxlZAotICAgIC8vIF9fYnVpbHRpbl9hbGxvY2EuIFNvIGZhciB0aGlzIGFwcGVh
cnMgYmVuaWduLiA6LXwKLSAgICBMVmFsdWUgYWxsb2NhKExUeXBlIHR5cGUpIHsgcmV0dXJuIGJ1
aWxkQWxsb2NhKG1fYnVpbGRlciwgdHlwZSk7IH0KLSAgICAKLSAgICAvLyBBY2Nlc3MgdGhlIHZh
bHVlIG9mIGFuIGFsbG9jYS4gQWxzbyB1c2VkIGFzIGEgbG93LWxldmVsIGltcGxlbWVudGF0aW9u
IHByaW1pdGl2ZSBmb3IKLSAgICAvLyBsb2FkKCkuIE5ldmVyIHVzZSB0aGlzIHRvIGxvYWQgZnJv
bSAicG9pbnRlcnMiIGluIHRoZSBGVEwgc2Vuc2UsIHNpbmNlIEZUTCBwb2ludGVycwotICAgIC8v
IGFyZSBhY3R1YWxseSBpbnRlZ2Vycy4gVGhpcyByZXF1aXJlcyBhbiBMTFZNIHBvaW50ZXIuIEJy
b2FkbHkgc3BlYWtpbmcsIHlvdSBkb24ndAotICAgIC8vIGhhdmUgYW55IExMVk0gcG9pbnRlcnMg
ZXZlbiBpZiB5b3UgcmVhbGx5IHRoaW5rIHlvdSBkby4gQSBUeXBlZFBvaW50ZXIgaXMgbm90IGFu
Ci0gICAgLy8gTExWTSBwb2ludGVyLiBTZWUgY29tbWVudCBibG9jayBhdCB0b3Agb2YgdGhpcyBm
aWxlIHRvIHVuZGVyc3RhbmQgdGhlIGRpc3RpbmN0aW9uCi0gICAgLy8gYmV0d2VlbiBMTFZNIHBv
aW50ZXJzLCBGVEwgcG9pbnRlcnMsIGFuZCBGVEwgcmVmZXJlbmNlcy4KLSAgICBMVmFsdWUgZ2V0
KExWYWx1ZSByZWZlcmVuY2UpIHsgcmV0dXJuIGJ1aWxkTG9hZChtX2J1aWxkZXIsIHJlZmVyZW5j
ZSk7IH0KLSAgICAvLyBTaW1pbGFyIHRvIGdldCgpIGJ1dCBmb3Igc3RvcmluZyB0byB0aGUgdmFs
dWUgaW4gYW4gYWxsb2NhLgotICAgIExWYWx1ZSBzZXQoTFZhbHVlIHZhbHVlLCBMVmFsdWUgcmVm
ZXJlbmNlKSB7IHJldHVybiBidWlsZFN0b3JlKG1fYnVpbGRlciwgdmFsdWUsIHJlZmVyZW5jZSk7
IH0KLSAgICAKLSAgICBMVmFsdWUgbG9hZChUeXBlZFBvaW50ZXIsIExUeXBlIHJlZlR5cGUpOwot
ICAgIHZvaWQgc3RvcmUoTFZhbHVlLCBUeXBlZFBvaW50ZXIsIExUeXBlIHJlZlR5cGUpOwotCi0g
ICAgTFZhbHVlIGxvYWQ4U2lnbkV4dDMyKFR5cGVkUG9pbnRlcik7Ci0gICAgTFZhbHVlIGxvYWQ4
WmVyb0V4dDMyKFR5cGVkUG9pbnRlcik7Ci0gICAgTFZhbHVlIGxvYWQxNlNpZ25FeHQzMihUeXBl
ZFBvaW50ZXIpOwotICAgIExWYWx1ZSBsb2FkMTZaZXJvRXh0MzIoVHlwZWRQb2ludGVyKTsKLSAg
ICBMVmFsdWUgbG9hZDMyKFR5cGVkUG9pbnRlciBwb2ludGVyKSB7IHJldHVybiBsb2FkKHBvaW50
ZXIsIHJlZjMyKTsgfQotICAgIExWYWx1ZSBsb2FkNjQoVHlwZWRQb2ludGVyIHBvaW50ZXIpIHsg
cmV0dXJuIGxvYWQocG9pbnRlciwgcmVmNjQpOyB9Ci0gICAgTFZhbHVlIGxvYWRQdHIoVHlwZWRQ
b2ludGVyIHBvaW50ZXIpIHsgcmV0dXJuIGxvYWQocG9pbnRlciwgcmVmUHRyKTsgfQotICAgIExW
YWx1ZSBsb2FkRmxvYXQoVHlwZWRQb2ludGVyIHBvaW50ZXIpIHsgcmV0dXJuIGxvYWQocG9pbnRl
ciwgcmVmRmxvYXQpOyB9Ci0gICAgTFZhbHVlIGxvYWREb3VibGUoVHlwZWRQb2ludGVyIHBvaW50
ZXIpIHsgcmV0dXJuIGxvYWQocG9pbnRlciwgcmVmRG91YmxlKTsgfQotCi0gICAgZW51bSBMb2Fk
VHlwZSB7Ci0gICAgICAgIExvYWQ4U2lnbkV4dDMyLAotICAgICAgICBMb2FkOFplcm9FeHQzMiwK
LSAgICAgICAgTG9hZDE2U2lnbkV4dDMyLAotICAgICAgICBMb2FkMTZaZXJvRXh0MzIsCi0gICAg
ICAgIExvYWQzMiwKLSAgICAgICAgTG9hZDY0LAotICAgICAgICBMb2FkUHRyLAotICAgICAgICBM
b2FkRmxvYXQsCi0gICAgICAgIExvYWREb3VibGUKLSAgICB9OwotCi0gICAgTFZhbHVlIGxvYWQo
VHlwZWRQb2ludGVyLCBMb2FkVHlwZSk7Ci0gICAgCi0gICAgdm9pZCBzdG9yZTMyQXM4KExWYWx1
ZSB2YWx1ZSwgVHlwZWRQb2ludGVyIHBvaW50ZXIpIHsgc3RvcmUoaW50Q2FzdCh2YWx1ZSwgaW50
OCksIHBvaW50ZXIsIHJlZjgpOyB9Ci0gICAgdm9pZCBzdG9yZTMyQXMxNihMVmFsdWUgdmFsdWUs
IFR5cGVkUG9pbnRlciBwb2ludGVyKSB7IHN0b3JlKGludENhc3QodmFsdWUsIGludDE2KSwgcG9p
bnRlciwgcmVmMTYpOyB9Ci0gICAgdm9pZCBzdG9yZTMyKExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2lu
dGVyIHBvaW50ZXIpIHsgc3RvcmUodmFsdWUsIHBvaW50ZXIsIHJlZjMyKTsgfQotICAgIHZvaWQg
c3RvcmU2NChMVmFsdWUgdmFsdWUsIFR5cGVkUG9pbnRlciBwb2ludGVyKSB7IHN0b3JlKHZhbHVl
LCBwb2ludGVyLCByZWY2NCk7IH0KLSAgICB2b2lkIHN0b3JlUHRyKExWYWx1ZSB2YWx1ZSwgVHlw
ZWRQb2ludGVyIHBvaW50ZXIpIHsgc3RvcmUodmFsdWUsIHBvaW50ZXIsIHJlZlB0cik7IH0KLSAg
ICB2b2lkIHN0b3JlRmxvYXQoTFZhbHVlIHZhbHVlLCBUeXBlZFBvaW50ZXIgcG9pbnRlcikgeyBz
dG9yZSh2YWx1ZSwgcG9pbnRlciwgcmVmRmxvYXQpOyB9Ci0gICAgdm9pZCBzdG9yZURvdWJsZShM
VmFsdWUgdmFsdWUsIFR5cGVkUG9pbnRlciBwb2ludGVyKSB7IHN0b3JlKHZhbHVlLCBwb2ludGVy
LCByZWZEb3VibGUpOyB9Ci0KLSAgICBlbnVtIFN0b3JlVHlwZSB7Ci0gICAgICAgIFN0b3JlMzJB
czgsCi0gICAgICAgIFN0b3JlMzJBczE2LAotICAgICAgICBTdG9yZTMyLAotICAgICAgICBTdG9y
ZTY0LAotICAgICAgICBTdG9yZVB0ciwKLSAgICAgICAgU3RvcmVGbG9hdCwKLSAgICAgICAgU3Rv
cmVEb3VibGUKLSAgICB9OwotCi0gICAgdm9pZCBzdG9yZShMVmFsdWUsIFR5cGVkUG9pbnRlciwg
U3RvcmVUeXBlKTsKLQotICAgIExWYWx1ZSBhZGRQdHIoTFZhbHVlIHZhbHVlLCBwdHJkaWZmX3Qg
aW1tZWRpYXRlID0gMCkKLSAgICB7Ci0gICAgICAgIGlmICghaW1tZWRpYXRlKQotICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlOwotICAgICAgICByZXR1cm4gYWRkKHZhbHVlLCBjb25zdEludFB0cihp
bW1lZGlhdGUpKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gQ29uc3RydWN0IGFuIGFkZHJlc3MgYnkg
b2Zmc2V0dGluZyBiYXNlIGJ5IHRoZSByZXF1ZXN0ZWQgYW1vdW50IGFuZCBhc2NyaWJpbmcKLSAg
ICAvLyB0aGUgcmVxdWVzdGVkIGFic3RyYWN0IGhlYXAgdG8gaXQuCi0gICAgVHlwZWRQb2ludGVy
IGFkZHJlc3MoY29uc3QgQWJzdHJhY3RIZWFwJiBoZWFwLCBMVmFsdWUgYmFzZSwgcHRyZGlmZl90
IG9mZnNldCA9IDApCi0gICAgewotICAgICAgICByZXR1cm4gVHlwZWRQb2ludGVyKGhlYXAsIGFk
ZFB0cihiYXNlLCBvZmZzZXQpKTsKLSAgICB9Ci0gICAgLy8gQ29uc3RydWN0IGFuIGFkZHJlc3Mg
Ynkgb2Zmc2V0dGluZyBiYXNlIGJ5IHRoZSBhbW91bnQgc3BlY2lmaWVkIGJ5IHRoZSBmaWVsZCwK
LSAgICAvLyBhbmQgb3B0aW9uYWxseSBhbiBhZGRpdGlvbmFsIGFtb3VudCAodXNlIHRoaXMgd2l0
aCBjYXJlKSwgYW5kIHRoZW4gY3JlYXRpbmcKLSAgICAvLyBhIFR5cGVkUG9pbnRlciB3aXRoIHRo
ZSBnaXZlbiBmaWVsZCBhcyB0aGUgaGVhcC4KLSAgICBUeXBlZFBvaW50ZXIgYWRkcmVzcyhMVmFs
dWUgYmFzZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQsIHB0cmRpZmZfdCBvZmZzZXQgPSAw
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZHJlc3MoZmllbGQsIGJhc2UsIG9mZnNldCArIGZp
ZWxkLm9mZnNldCgpKTsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIGJhc2VJbmRleChMVmFsdWUg
YmFzZSwgTFZhbHVlIGluZGV4LCBTY2FsZSwgcHRyZGlmZl90IG9mZnNldCA9IDApOwotCi0gICAg
VHlwZWRQb2ludGVyIGJhc2VJbmRleChjb25zdCBBYnN0cmFjdEhlYXAmIGhlYXAsIExWYWx1ZSBi
YXNlLCBMVmFsdWUgaW5kZXgsIFNjYWxlIHNjYWxlLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBUeXBlZFBvaW50ZXIoaGVhcCwgYmFzZUluZGV4KGJhc2UsIGlu
ZGV4LCBzY2FsZSwgb2Zmc2V0KSk7Ci0gICAgfQotICAgIFR5cGVkUG9pbnRlciBiYXNlSW5kZXgo
SW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCwgTFZhbHVlIGJhc2UsIExWYWx1ZSBpbmRleCwgSlNW
YWx1ZSBpbmRleEFzQ29uc3RhbnQgPSBKU1ZhbHVlKCksIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGhlYXAuYmFzZUluZGV4KCp0aGlzLCBiYXNlLCBpbmRleCwg
aW5kZXhBc0NvbnN0YW50LCBvZmZzZXQpOwotICAgIH0KLSAgICAKLSAgICBUeXBlZFBvaW50ZXIg
YWJzb2x1dGUodm9pZCogYWRkcmVzcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlZFBvaW50
ZXIobV9oZWFwcy0+YWJzb2x1dGVbYWRkcmVzc10sIGNvbnN0SW50UHRyKGFkZHJlc3MpKTsKLSAg
ICB9Ci0KLSAgICBMVmFsdWUgbG9hZDhTaWduRXh0MzIoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3Ry
YWN0RmllbGQmIGZpZWxkKSB7IHJldHVybiBsb2FkOFNpZ25FeHQzMihhZGRyZXNzKGJhc2UsIGZp
ZWxkKSk7IH0KLSAgICBMVmFsdWUgbG9hZDhaZXJvRXh0MzIoTFZhbHVlIGJhc2UsIGNvbnN0IEFi
c3RyYWN0RmllbGQmIGZpZWxkKSB7IHJldHVybiBsb2FkOFplcm9FeHQzMihhZGRyZXNzKGJhc2Us
IGZpZWxkKSk7IH0KLSAgICBMVmFsdWUgbG9hZDE2U2lnbkV4dDMyKExWYWx1ZSBiYXNlLCBjb25z
dCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkgeyByZXR1cm4gbG9hZDE2U2lnbkV4dDMyKGFkZHJlc3Mo
YmFzZSwgZmllbGQpKTsgfQotICAgIExWYWx1ZSBsb2FkMTZaZXJvRXh0MzIoTFZhbHVlIGJhc2Us
IGNvbnN0IEFic3RyYWN0RmllbGQmIGZpZWxkKSB7IHJldHVybiBsb2FkMTZaZXJvRXh0MzIoYWRk
cmVzcyhiYXNlLCBmaWVsZCkpOyB9Ci0gICAgTFZhbHVlIGxvYWQzMihMVmFsdWUgYmFzZSwgY29u
c3QgQWJzdHJhY3RGaWVsZCYgZmllbGQpIHsgcmV0dXJuIGxvYWQzMihhZGRyZXNzKGJhc2UsIGZp
ZWxkKSk7IH0KLSAgICBMVmFsdWUgbG9hZDY0KExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZp
ZWxkJiBmaWVsZCkgeyByZXR1cm4gbG9hZDY0KGFkZHJlc3MoYmFzZSwgZmllbGQpKTsgfQotICAg
IExWYWx1ZSBsb2FkUHRyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkg
eyByZXR1cm4gbG9hZFB0cihhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KLSAgICBMVmFsdWUgbG9h
ZERvdWJsZShMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQpIHsgcmV0dXJu
IGxvYWREb3VibGUoYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9Ci0gICAgdm9pZCBzdG9yZTMyKExW
YWx1ZSB2YWx1ZSwgTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZpZWxkKSB7IHN0
b3JlMzIodmFsdWUsIGFkZHJlc3MoYmFzZSwgZmllbGQpKTsgfQotICAgIHZvaWQgc3RvcmU2NChM
VmFsdWUgdmFsdWUsIExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkgeyBz
dG9yZTY0KHZhbHVlLCBhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KLSAgICB2b2lkIHN0b3JlUHRy
KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZpZWxkKSB7
IHN0b3JlUHRyKHZhbHVlLCBhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KLSAgICB2b2lkIHN0b3Jl
RG91YmxlKExWYWx1ZSB2YWx1ZSwgTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZp
ZWxkKSB7IHN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KLSAgICAK
LSAgICB2b2lkIGFzY3JpYmVSYW5nZShMVmFsdWUgbG9hZEluc3RydWN0aW9uLCBjb25zdCBWYWx1
ZVJhbmdlJiByYW5nZSkKLSAgICB7Ci0gICAgICAgIHJhbmdlLmRlY29yYXRlSW5zdHJ1Y3Rpb24o
bV9jb250ZXh0LCBsb2FkSW5zdHJ1Y3Rpb24sIHJhbmdlS2luZCk7Ci0gICAgfQotICAgIAotICAg
IExWYWx1ZSBub25OZWdhdGl2ZTMyKExWYWx1ZSBsb2FkSW5zdHJ1Y3Rpb24pCi0gICAgewotICAg
ICAgICBhc2NyaWJlUmFuZ2UobG9hZEluc3RydWN0aW9uLCBub25OZWdhdGl2ZUludDMyKTsKLSAg
ICAgICAgcmV0dXJuIGxvYWRJbnN0cnVjdGlvbjsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIGxv
YWQzMk5vbk5lZ2F0aXZlKFR5cGVkUG9pbnRlciBwb2ludGVyKSB7IHJldHVybiBub25OZWdhdGl2
ZTMyKGxvYWQzMihwb2ludGVyKSk7IH0KLSAgICBMVmFsdWUgbG9hZDMyTm9uTmVnYXRpdmUoTFZh
bHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZpZWxkKSB7IHJldHVybiBub25OZWdhdGl2
ZTMyKGxvYWQzMihiYXNlLCBmaWVsZCkpOyB9Ci0gICAgCi0gICAgTFZhbHVlIGljbXAoTEludFBy
ZWRpY2F0ZSBjb25kLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZElD
bXAobV9idWlsZGVyLCBjb25kLCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUgZXF1YWwoTFZh
bHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gaWNtcChMTFZNSW50RVEsIGxlZnQsIHJp
Z2h0KTsgfQotICAgIExWYWx1ZSBub3RFcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7
IHJldHVybiBpY21wKExMVk1JbnRORSwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVlIGFib3Zl
KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGljbXAoTExWTUludFVHVCwgbGVm
dCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVlIGFib3ZlT3JFcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVl
IHJpZ2h0KSB7IHJldHVybiBpY21wKExMVk1JbnRVR0UsIGxlZnQsIHJpZ2h0KTsgfQotICAgIExW
YWx1ZSBiZWxvdyhMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBpY21wKExMVk1J
bnRVTFQsIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1ZSBiZWxvd09yRXF1YWwoTFZhbHVlIGxl
ZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gaWNtcChMTFZNSW50VUxFLCBsZWZ0LCByaWdodCk7
IH0KLSAgICBMVmFsdWUgZ3JlYXRlclRoYW4oTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyBy
ZXR1cm4gaWNtcChMTFZNSW50U0dULCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUgZ3JlYXRl
clRoYW5PckVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGljbXAoTExW
TUludFNHRSwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVlIGxlc3NUaGFuKExWYWx1ZSBsZWZ0
LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGljbXAoTExWTUludFNMVCwgbGVmdCwgcmlnaHQpOyB9
Ci0gICAgTFZhbHVlIGxlc3NUaGFuT3JFcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7
IHJldHVybiBpY21wKExMVk1JbnRTTEUsIGxlZnQsIHJpZ2h0KTsgfQotICAgIAotICAgIExWYWx1
ZSBmY21wKExSZWFsUHJlZGljYXRlIGNvbmQsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsg
cmV0dXJuIGJ1aWxkRkNtcChtX2J1aWxkZXIsIGNvbmQsIGxlZnQsIHJpZ2h0KTsgfQotICAgIExW
YWx1ZSBkb3VibGVFcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBmY21w
KExMVk1SZWFsT0VRLCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUgZG91YmxlTm90RXF1YWxP
clVub3JkZXJlZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBmY21wKExMVk1S
ZWFsVU5FLCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUgZG91YmxlTGVzc1RoYW4oTFZhbHVl
IGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gZmNtcChMTFZNUmVhbE9MVCwgbGVmdCwgcmln
aHQpOyB9Ci0gICAgTFZhbHVlIGRvdWJsZUxlc3NUaGFuT3JFcXVhbChMVmFsdWUgbGVmdCwgTFZh
bHVlIHJpZ2h0KSB7IHJldHVybiBmY21wKExMVk1SZWFsT0xFLCBsZWZ0LCByaWdodCk7IH0KLSAg
ICBMVmFsdWUgZG91YmxlR3JlYXRlclRoYW4oTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyBy
ZXR1cm4gZmNtcChMTFZNUmVhbE9HVCwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVlIGRvdWJs
ZUdyZWF0ZXJUaGFuT3JFcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBm
Y21wKExMVk1SZWFsT0dFLCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUgZG91YmxlTm90RXF1
YWxBbmRPcmRlcmVkKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGZjbXAoTExW
TVJlYWxPTkUsIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1ZSBkb3VibGVMZXNzVGhhbk9yVW5v
cmRlcmVkKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGZjbXAoTExWTVJlYWxV
TFQsIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1ZSBkb3VibGVMZXNzVGhhbk9yRXF1YWxPclVu
b3JkZXJlZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBmY21wKExMVk1SZWFs
VUxFLCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUgZG91YmxlR3JlYXRlclRoYW5PclVub3Jk
ZXJlZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBmY21wKExMVk1SZWFsVUdU
LCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUgZG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JV
bm9yZGVyZWQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gZmNtcChMTFZNUmVh
bFVHRSwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgCi0gICAgTFZhbHVlIGlzWmVybzMyKExWYWx1ZSB2
YWx1ZSkgeyByZXR1cm4gZXF1YWwodmFsdWUsIGludDMyWmVybyk7IH0KLSAgICBMVmFsdWUgbm90
WmVybzMyKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gbm90RXF1YWwodmFsdWUsIGludDMyWmVybyk7
IH0KLSAgICBMVmFsdWUgaXNaZXJvNjQoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBlcXVhbCh2YWx1
ZSwgaW50NjRaZXJvKTsgfQotICAgIExWYWx1ZSBub3RaZXJvNjQoTFZhbHVlIHZhbHVlKSB7IHJl
dHVybiBub3RFcXVhbCh2YWx1ZSwgaW50NjRaZXJvKTsgfQotICAgIExWYWx1ZSBpc051bGwoTFZh
bHVlIHZhbHVlKSB7IHJldHVybiBlcXVhbCh2YWx1ZSwgaW50UHRyWmVybyk7IH0KLSAgICBMVmFs
dWUgbm90TnVsbChMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIG5vdEVxdWFsKHZhbHVlLCBpbnRQdHJa
ZXJvKTsgfQotICAgIAotICAgIExWYWx1ZSB0ZXN0SXNaZXJvMzIoTFZhbHVlIHZhbHVlLCBMVmFs
dWUgbWFzaykgeyByZXR1cm4gaXNaZXJvMzIoYml0QW5kKHZhbHVlLCBtYXNrKSk7IH0KLSAgICBM
VmFsdWUgdGVzdE5vblplcm8zMihMVmFsdWUgdmFsdWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBu
b3RaZXJvMzIoYml0QW5kKHZhbHVlLCBtYXNrKSk7IH0KLSAgICBMVmFsdWUgdGVzdElzWmVybzY0
KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIG1hc2spIHsgcmV0dXJuIGlzWmVybzY0KGJpdEFuZCh2YWx1
ZSwgbWFzaykpOyB9Ci0gICAgTFZhbHVlIHRlc3ROb25aZXJvNjQoTFZhbHVlIHZhbHVlLCBMVmFs
dWUgbWFzaykgeyByZXR1cm4gbm90WmVybzY0KGJpdEFuZCh2YWx1ZSwgbWFzaykpOyB9Ci0gICAg
TFZhbHVlIHRlc3RJc1plcm9QdHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykgeyByZXR1cm4g
aXNOdWxsKGJpdEFuZCh2YWx1ZSwgbWFzaykpOyB9Ci0gICAgTFZhbHVlIHRlc3ROb25aZXJvUHRy
KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIG1hc2spIHsgcmV0dXJuIG5vdE51bGwoYml0QW5kKHZhbHVl
LCBtYXNrKSk7IH0KLSAgICAKLSAgICBMVmFsdWUgc2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVl
IHRha2VuLCBMVmFsdWUgbm90VGFrZW4pIHsgcmV0dXJuIGJ1aWxkU2VsZWN0KG1fYnVpbGRlciwg
dmFsdWUsIHRha2VuLCBub3RUYWtlbik7IH0KLSAgICBMVmFsdWUgZXh0cmFjdFZhbHVlKExWYWx1
ZSBhZ2dWYWwsIHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBidWlsZEV4dHJhY3RWYWx1ZShtX2J1
aWxkZXIsIGFnZ1ZhbCwgaW5kZXgpOyB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmVj
dG9yVHlwZT4KLSAgICBMVmFsdWUgY2FsbChMVHlwZSwgTFZhbHVlIGZ1bmN0aW9uLCBjb25zdCBW
ZWN0b3JUeXBlJiB2ZWN0b3IpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9u
LCB2ZWN0b3IpOyB9Ci0gICAgTFZhbHVlIGNhbGwoTFR5cGUsIExWYWx1ZSBmdW5jdGlvbikgeyBy
ZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24pOyB9Ci0gICAgTFZhbHVlIGNhbGwo
TFR5cGUsIExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEpIHsgcmV0dXJuIGJ1aWxkQ2FsbCht
X2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxKTsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3M+Ci0gICAgTFZhbHVlIGNhbGwoTFR5cGUsIExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEs
IEFyZ3MuLi4gYXJncykgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIGFy
ZzEsIGFyZ3MuLi4pOyB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBl
PgotICAgIExWYWx1ZSBvcGVyYXRpb24oRnVuY3Rpb25UeXBlIGZ1bmN0aW9uKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGludFRvUHRyKGNvbnN0SW50UHRyKGZ1bmN0aW9uKSwgcG9pbnRlclR5cGUo
b3BlcmF0aW9uVHlwZShmdW5jdGlvbikpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBqdW1wKExC
YXNpY0Jsb2NrIGRlc3RpbmF0aW9uKSB7IGJ1aWxkQnIobV9idWlsZGVyLCBkZXN0aW5hdGlvbik7
IH0KLSAgICB2b2lkIGJyYW5jaChMVmFsdWUgY29uZGl0aW9uLCBMQmFzaWNCbG9jayB0YWtlbiwg
V2VpZ2h0IHRha2VuV2VpZ2h0LCBMQmFzaWNCbG9jayBub3RUYWtlbiwgV2VpZ2h0IG5vdFRha2Vu
V2VpZ2h0KTsKLSAgICB2b2lkIGJyYW5jaChMVmFsdWUgY29uZGl0aW9uLCBXZWlnaHRlZFRhcmdl
dCB0YWtlbiwgV2VpZ2h0ZWRUYXJnZXQgbm90VGFrZW4pCi0gICAgewotICAgICAgICBicmFuY2go
Y29uZGl0aW9uLCB0YWtlbi50YXJnZXQoKSwgdGFrZW4ud2VpZ2h0KCksIG5vdFRha2VuLnRhcmdl
dCgpLCBub3RUYWtlbi53ZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgLy8gQnJhbmNoZXMgdG8gYW4g
YWxyZWFkeS1jcmVhdGVkIGhhbmRsZXIgaWYgdHJ1ZSwgImZhbGxzIHRocm91Z2giIGlmIGZhbHNl
LiBGYWxsLXRocm91Z2ggaXMKLSAgICAvLyBzaW11bGF0ZWQgYnkgY3JlYXRpbmcgYSBjb250aW51
YXRpb24gZm9yIHlvdS4KLSAgICB2b2lkIGNoZWNrKExWYWx1ZSBjb25kaXRpb24sIFdlaWdodGVk
VGFyZ2V0IHRha2VuLCBXZWlnaHQgbm90VGFrZW5XZWlnaHQpOwotICAgIAotICAgIC8vIFNhbWUg
YXMgY2hlY2soKSwgYnV0IHVzZXMgV2VpZ2h0OjppbnZlcnNlKCkgdG8gY29tcHV0ZSB0aGUgbm90
VGFrZW5XZWlnaHQuCi0gICAgdm9pZCBjaGVjayhMVmFsdWUgY29uZGl0aW9uLCBXZWlnaHRlZFRh
cmdldCB0YWtlbik7Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KLSAg
ICB2b2lkIHN3aXRjaEluc3RydWN0aW9uKExWYWx1ZSB2YWx1ZSwgY29uc3QgVmVjdG9yVHlwZSYg
Y2FzZXMsIExCYXNpY0Jsb2NrIGZhbGxUaHJvdWdoLCBXZWlnaHQgZmFsbFRocm91Z2hXZWlnaHQp
Ci0gICAgewotICAgICAgICBMVmFsdWUgaW5zdCA9IGJ1aWxkU3dpdGNoKG1fYnVpbGRlciwgdmFs
dWUsIGNhc2VzLCBmYWxsVGhyb3VnaCk7Ci0gICAgICAgIAotICAgICAgICBkb3VibGUgdG90YWwg
PSAwOwotICAgICAgICBpZiAoIWZhbGxUaHJvdWdoV2VpZ2h0KQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB0b3RhbCArPSBmYWxsVGhyb3VnaFdlaWdodC52YWx1ZSgpOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBjYXNlcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIGlmICgh
Y2FzZXNbaV0ud2VpZ2h0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
dG90YWwgKz0gY2FzZXNbaV0ud2VpZ2h0KCkudmFsdWUoKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgVmVjdG9yPExWYWx1ZT4gbWRBcmdzOwotICAgICAgICBtZEFyZ3MuYXBwZW5kKGJy
YW5jaFdlaWdodHMpOwotICAgICAgICBtZEFyZ3MuYXBwZW5kKGNvbnN0SW50MzIoZmFsbFRocm91
Z2hXZWlnaHQuc2NhbGVUb1RvdGFsKHRvdGFsKSkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY2FzZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtZEFyZ3MuYXBwZW5kKGNv
bnN0SW50MzIoY2FzZXNbaV0ud2VpZ2h0KCkuc2NhbGVUb1RvdGFsKHRvdGFsKSkpOwotICAgICAg
ICAKLSAgICAgICAgc2V0TWV0YWRhdGEoaW5zdCwgcHJvZktpbmQsIG1kTm9kZShtX2NvbnRleHQs
IG1kQXJncykpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHJldChMVmFsdWUgdmFsdWUpIHsgYnVp
bGRSZXQobV9idWlsZGVyLCB2YWx1ZSk7IH0KLSAgICAKLSAgICB2b2lkIHVucmVhY2hhYmxlKCkg
eyBidWlsZFVucmVhY2hhYmxlKG1fYnVpbGRlcik7IH0KLSAgICAKLSAgICB2b2lkIHRyYXAoKQot
ICAgIHsKLSAgICAgICAgY2FsbCh2b2lkVHlwZSwgdHJhcEludHJpbnNpYygpKTsKLSAgICB9Ci0g
ICAgCi0gICAgVmFsdWVGcm9tQmxvY2sgYW5jaG9yKExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBWYWx1ZUZyb21CbG9jayh2YWx1ZSwgbV9ibG9jayk7Ci0gICAgfQotICAgIAot
ICAgIExWYWx1ZSBtX2Z1bmN0aW9uOwotICAgIEFic3RyYWN0SGVhcFJlcG9zaXRvcnkqIG1faGVh
cHM7Ci0gICAgTEJ1aWxkZXIgbV9idWlsZGVyOwotICAgIExCYXNpY0Jsb2NrIG1fYmxvY2s7Ci0g
ICAgTEJhc2ljQmxvY2sgbV9uZXh0QmxvY2s7Ci0KLXByaXZhdGU6Ci0gICAgTFZhbHVlIGludENh
c3QoTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJldHVybiBidWlsZEludENhc3QobV9idWls
ZGVyLCB2YWx1ZSwgdHlwZSk7IH0KLSAgICBMVmFsdWUgZnBUb0ludChMVmFsdWUgdmFsdWUsIExU
eXBlIHR5cGUpIHsgcmV0dXJuIGJ1aWxkRlBUb1NJKG1fYnVpbGRlciwgdmFsdWUsIHR5cGUpOyB9
Ci0gICAgTFZhbHVlIGZwVG9VSW50KExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4g
YnVpbGRGUFRvVUkobV9idWlsZGVyLCB2YWx1ZSwgdHlwZSk7IH0KLSAgICBMVmFsdWUgZnBDYXN0
KExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRGUENhc3QobV9idWlsZGVy
LCB2YWx1ZSwgdHlwZSk7IH0KLSAgICBMVmFsdWUgaW50VG9GUChMVmFsdWUgdmFsdWUsIExUeXBl
IHR5cGUpIHsgcmV0dXJuIGJ1aWxkU0lUb0ZQKG1fYnVpbGRlciwgdmFsdWUsIHR5cGUpOyB9Ci0g
ICAgTFZhbHVlIHVuc2lnbmVkVG9GUChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJu
IGJ1aWxkVUlUb0ZQKG1fYnVpbGRlciwgdmFsdWUsIHR5cGUpOyB9Ci0gICAgTFZhbHVlIHNpZ25F
eHQoTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJldHVybiBidWlsZFNFeHQobV9idWlsZGVy
LCB2YWx1ZSwgdHlwZSk7IH0KLX07Ci0KLWlubGluZSBMVmFsdWUgT3V0cHV0Ojpsb2FkOFNpZ25F
eHQzMihUeXBlZFBvaW50ZXIgcG9pbnRlcikKLXsKLSAgICBMVmFsdWUgdmFsdWU4ID0gbG9hZChw
b2ludGVyLCByZWY4KTsKLSAgICByZXR1cm4gc2lnbkV4dCh2YWx1ZTgsIGludDMyKTsKLX0KLQot
aW5saW5lIExWYWx1ZSBPdXRwdXQ6OmxvYWQ4WmVyb0V4dDMyKFR5cGVkUG9pbnRlciBwb2ludGVy
KQotewotICAgIExWYWx1ZSB2YWx1ZTggPSBsb2FkKHBvaW50ZXIsIHJlZjgpOwotICAgIHJldHVy
biB6ZXJvRXh0KHZhbHVlOCwgaW50MzIpOwotfQotCi1pbmxpbmUgTFZhbHVlIE91dHB1dDo6bG9h
ZDE2U2lnbkV4dDMyKFR5cGVkUG9pbnRlciBwb2ludGVyKQotewotICAgIExWYWx1ZSB2YWx1ZTE2
ID0gbG9hZChwb2ludGVyLCByZWYxNik7Ci0gICAgcmV0dXJuIHNpZ25FeHQodmFsdWUxNiwgaW50
MzIpOwotfQotCi1pbmxpbmUgTFZhbHVlIE91dHB1dDo6bG9hZDE2WmVyb0V4dDMyKFR5cGVkUG9p
bnRlciBwb2ludGVyKQotewotICAgIExWYWx1ZSB2YWx1ZTE2ID0gbG9hZChwb2ludGVyLCByZWYx
Nik7Ci0gICAgcmV0dXJuIHplcm9FeHQodmFsdWUxNiwgaW50MzIpOwotfQotCi1pbmxpbmUgTFZh
bHVlIE91dHB1dDo6ZnJvdW5kKExWYWx1ZSBkb3VibGVWYWx1ZSkKLXsKLSAgICBMVmFsdWUgZmxv
YXRWYWx1ZSA9IGJ1aWxkRlBDYXN0KG1fYnVpbGRlciwgZG91YmxlVmFsdWUsIGZsb2F0VHlwZSk7
Ci0gICAgcmV0dXJuIGJ1aWxkRlBDYXN0KG1fYnVpbGRlciwgZmxvYXRWYWx1ZSwgZG91YmxlVHlw
ZSk7Ci19Ci0KLSNkZWZpbmUgRlRMX05FV19CTE9DSyhvdXRwdXQsIG5hbWVBcmd1bWVudHMpIFwK
LSAgICAoTElLRUxZKCF2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpIFwKLSAgICA/IChvdXRw
dXQpLm5ld0Jsb2NrKCkgXAotICAgIDogKG91dHB1dCkubmV3QmxvY2soKHRvQ1N0cmluZyBuYW1l
QXJndW1lbnRzKS5kYXRhKCkpKQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCi0KLSNlbmRp
ZiAvLyAhRlRMX1VTRVNfQjMKLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLQotI2VuZGlmIC8v
IEZUTE91dHB1dF9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUGF0Y2hw
b2ludEV4Y2VwdGlvbkhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmNwcAkocmV2aXNpb24gMTk2Njg1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFu
ZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaCIKIAotI2lmIEVO
QUJMRShGVExfSklUKSAmJiBGVExfVVNFU19CMworI2lmIEVOQUJMRShGVExfSklUKQogCiAjaW5j
bHVkZSAiQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaCIKICNpbmNsdWRlICJGVExFeGNlcHRp
b25UYXJnZXQuaCIKQEAgLTExNyw1ICsxMTcsNSBAQCBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gUGF0
Y2hwb2ludEV4Y2VwdGlvCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAotI2VuZGlmIC8v
IEVOQUJMRShGVExfSklUKSAmJiBGVExfVVNFU19CMworI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRp
b25IYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFBh
dGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogCi0jaWYg
RU5BQkxFKEZUTF9KSVQpICYmIEZUTF9VU0VTX0IzCisjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNp
bmNsdWRlICJERkdOb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiRXhpdEtpbmQuaCIKQEAgLTEwMCw3
ICsxMDAsNyBAQCBwcml2YXRlOgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKLSNlbmRp
ZiAvLyBFTkFCTEUoRlRMX0pJVCkgJiYgRlRMX1VTRVNfQjMKKyNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKIAogI2VuZGlmIC8vIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGVfaAogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuY3BwCShyZXZpc2lvbiAx
OTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMzAwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkZUTFN0YWNrTWFwcy5oIgotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0KLSNpbmNsdWRlICJGVExM
b2NhdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KLSNpbmNsdWRlIDx3dGYv
RGF0YUxvZy5oPgotI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgotCi1uYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1UIHJlYWRPYmplY3QoU3Rh
Y2tNYXBzOjpQYXJzZUNvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgVCByZXN1bHQ7Ci0gICAgcmVz
dWx0LnBhcnNlKGNvbnRleHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgU3RhY2tN
YXBzOjpDb25zdGFudDo6cGFyc2UoU3RhY2tNYXBzOjpQYXJzZUNvbnRleHQmIGNvbnRleHQpCi17
Ci0gICAgaW50ZWdlciA9IGNvbnRleHQudmlldy0+cmVhZDxpbnQ2NF90Pihjb250ZXh0Lm9mZnNl
dCwgdHJ1ZSk7Ci19Ci0KLXZvaWQgU3RhY2tNYXBzOjpDb25zdGFudDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAotewotICAgIG91dC5wcmludGYoIjB4JTAxNmxseCIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4oaW50ZWdlcikpOwotfQotCi12b2lkIFN0YWNrTWFwczo6U3Rh
Y2tTaXplOjpwYXJzZShTdGFja01hcHM6OlBhcnNlQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBz
d2l0Y2ggKGNvbnRleHQudmVyc2lvbikgewotICAgIGNhc2UgMDoKLSAgICAgICAgZnVuY3Rpb25P
ZmZzZXQgPSBjb250ZXh0LnZpZXctPnJlYWQ8dWludDMyX3Q+KGNvbnRleHQub2Zmc2V0LCB0cnVl
KTsKLSAgICAgICAgc2l6ZSA9IGNvbnRleHQudmlldy0+cmVhZDx1aW50MzJfdD4oY29udGV4dC5v
ZmZzZXQsIHRydWUpOwotICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgZGVmYXVsdDoKLSAg
ICAgICAgZnVuY3Rpb25PZmZzZXQgPSBjb250ZXh0LnZpZXctPnJlYWQ8dWludDY0X3Q+KGNvbnRl
eHQub2Zmc2V0LCB0cnVlKTsKLSAgICAgICAgc2l6ZSA9IGNvbnRleHQudmlldy0+cmVhZDx1aW50
NjRfdD4oY29udGV4dC5vZmZzZXQsIHRydWUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0K
LXZvaWQgU3RhY2tNYXBzOjpTdGFja1NpemU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
LXsKLSAgICBvdXQucHJpbnQoIihvZmY6IiwgZnVuY3Rpb25PZmZzZXQsICIsIHNpemU6Iiwgc2l6
ZSwgIikiKTsKLX0KLQotdm9pZCBTdGFja01hcHM6OkxvY2F0aW9uOjpwYXJzZShTdGFja01hcHM6
OlBhcnNlQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBraW5kID0gc3RhdGljX2Nhc3Q8S2luZD4o
Y29udGV4dC52aWV3LT5yZWFkPHVpbnQ4X3Q+KGNvbnRleHQub2Zmc2V0LCB0cnVlKSk7Ci0gICAg
c2l6ZSA9IGNvbnRleHQudmlldy0+cmVhZDx1aW50OF90Pihjb250ZXh0Lm9mZnNldCwgdHJ1ZSk7
Ci0gICAgZHdhcmZSZWcgPSBEV0FSRlJlZ2lzdGVyKGNvbnRleHQudmlldy0+cmVhZDx1aW50MTZf
dD4oY29udGV4dC5vZmZzZXQsIHRydWUpKTsKLSAgICB0aGlzLT5vZmZzZXQgPSBjb250ZXh0LnZp
ZXctPnJlYWQ8aW50MzJfdD4oY29udGV4dC5vZmZzZXQsIHRydWUpOwotfQotCi12b2lkIFN0YWNr
TWFwczo6TG9jYXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBvdXQu
cHJpbnQoIigiLCBraW5kLCAiLCAiLCBkd2FyZlJlZywgIiwgb2ZmOiIsIG9mZnNldCwgIiwgc2l6
ZToiLCBzaXplLCAiKSIpOwotfQotCi1HUFJSZWcgU3RhY2tNYXBzOjpMb2NhdGlvbjo6ZGlyZWN0
R1BSKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRlRMOjpMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKG51
bGxwdHIsICp0aGlzKS5kaXJlY3RHUFIoKTsKLX0KLQotdm9pZCBTdGFja01hcHM6OkxvY2F0aW9u
OjpyZXN0b3JlSW50bygKLSAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBTdGFja01hcHMmIHN0YWNr
bWFwcywgY2hhciogc2F2ZWRSZWdpc3RlcnMsIEdQUlJlZyByZXN1bHQpIGNvbnN0Ci17Ci0gICAg
RlRMOjpMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKCZzdGFja21hcHMsICp0aGlzKS5yZXN0b3JlSW50
byhqaXQsIHNhdmVkUmVnaXN0ZXJzLCByZXN1bHQpOwotfQotCi12b2lkIFN0YWNrTWFwczo6TGl2
ZU91dDo6cGFyc2UoU3RhY2tNYXBzOjpQYXJzZUNvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgZHdh
cmZSZWcgPSBEV0FSRlJlZ2lzdGVyKGNvbnRleHQudmlldy0+cmVhZDx1aW50MTZfdD4oY29udGV4
dC5vZmZzZXQsIHRydWUpKTsgLy8gcmVnbnVtCi0gICAgY29udGV4dC52aWV3LT5yZWFkPHVpbnQ4
X3Q+KGNvbnRleHQub2Zmc2V0LCB0cnVlKTsgLy8gcmVzZXJ2ZWQKLSAgICBzaXplID0gY29udGV4
dC52aWV3LT5yZWFkPHVpbnQ4X3Q+KGNvbnRleHQub2Zmc2V0LCB0cnVlKTsgLy8gc2l6ZSBpbiBi
eXRlcwotfQotCi12b2lkIFN0YWNrTWFwczo6TGl2ZU91dDo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAotewotICAgIG91dC5wcmludCgiKCIsIGR3YXJmUmVnLCAiLCAiLCBzaXplLCAiKSIp
OwotfQotCi1ib29sIFN0YWNrTWFwczo6UmVjb3JkOjpwYXJzZShTdGFja01hcHM6OlBhcnNlQ29u
dGV4dCYgY29udGV4dCkKLXsKLSAgICBpbnQ2NF90IGlkID0gY29udGV4dC52aWV3LT5yZWFkPGlu
dDY0X3Q+KGNvbnRleHQub2Zmc2V0LCB0cnVlKTsKLSAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oaWQpID09IGlkKTsKLSAgICBwYXRjaHBvaW50SUQgPSBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oaWQpOwotICAgIGlmIChzdGF0aWNfY2FzdDxpbnQzMl90PihwYXRjaHBvaW50SUQpIDwgMCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGluc3RydWN0aW9uT2Zmc2V0ID0gY29u
dGV4dC52aWV3LT5yZWFkPHVpbnQzMl90Pihjb250ZXh0Lm9mZnNldCwgdHJ1ZSk7Ci0gICAgZmxh
Z3MgPSBjb250ZXh0LnZpZXctPnJlYWQ8dWludDE2X3Q+KGNvbnRleHQub2Zmc2V0LCB0cnVlKTsK
LSAgICAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBjb250ZXh0LnZpZXctPnJlYWQ8dWludDE2X3Q+
KGNvbnRleHQub2Zmc2V0LCB0cnVlKTsKLSAgICB3aGlsZSAobGVuZ3RoLS0pCi0gICAgICAgIGxv
Y2F0aW9ucy5hcHBlbmQocmVhZE9iamVjdDxMb2NhdGlvbj4oY29udGV4dCkpOwotICAgIAotICAg
IGlmIChjb250ZXh0LnZlcnNpb24gPj0gMSkKLSAgICAgICAgY29udGV4dC52aWV3LT5yZWFkPHVp
bnQxNl90Pihjb250ZXh0Lm9mZnNldCwgdHJ1ZSk7IC8vIHBhZGRpbmcKLQotICAgIHVuc2lnbmVk
IG51bUxpdmVPdXRzID0gY29udGV4dC52aWV3LT5yZWFkPHVpbnQxNl90Pihjb250ZXh0Lm9mZnNl
dCwgdHJ1ZSk7Ci0gICAgd2hpbGUgKG51bUxpdmVPdXRzLS0pCi0gICAgICAgIGxpdmVPdXRzLmFw
cGVuZChyZWFkT2JqZWN0PExpdmVPdXQ+KGNvbnRleHQpKTsKLQotICAgIGlmIChjb250ZXh0LnZl
cnNpb24gPj0gMSkgewotICAgICAgICBpZiAoY29udGV4dC5vZmZzZXQgJiA3KSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoIShjb250ZXh0Lm9mZnNldCAmIDMpKTsKLSAgICAgICAgICAgIGNvbnRleHQu
dmlldy0+cmVhZDx1aW50MzJfdD4oY29udGV4dC5vZmZzZXQsIHRydWUpOyAvLyBwYWRkaW5nCi0g
ICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU3RhY2tN
YXBzOjpSZWNvcmQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBvdXQucHJp
bnQoCi0gICAgICAgICIoIyIsIHBhdGNocG9pbnRJRCwgIiwgb2Zmc2V0ID0gIiwgaW5zdHJ1Y3Rp
b25PZmZzZXQsICIsIGZsYWdzID0gIiwgZmxhZ3MsCi0gICAgICAgICIsIGxvY2F0aW9ucyA9IFsi
LCBsaXN0RHVtcChsb2NhdGlvbnMpLCAiXSwgbGl2ZU91dHMgPSBbIiwKLSAgICAgICAgbGlzdER1
bXAobGl2ZU91dHMpLCAiXSkiKTsKLX0KLQotUmVnaXN0ZXJTZXQgU3RhY2tNYXBzOjpSZWNvcmQ6
OmxvY2F0aW9uU2V0KCkgY29uc3QKLXsKLSAgICBSZWdpc3RlclNldCByZXN1bHQ7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gbG9jYXRpb25zLnNpemUoKTsgaS0tOykgewotICAgICAgICBSZWcgcmVn
ID0gbG9jYXRpb25zW2ldLmR3YXJmUmVnLnJlZygpOwotICAgICAgICBpZiAoIXJlZykKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICByZXN1bHQuc2V0KHJlZyk7Ci0gICAgfQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLVJlZ2lzdGVyU2V0IFN0YWNrTWFwczo6UmVjb3JkOjpsaXZlT3V0
c1NldCgpIGNvbnN0Ci17Ci0gICAgUmVnaXN0ZXJTZXQgcmVzdWx0OwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IGxpdmVPdXRzLnNpemUoKTsgaS0tOykgewotICAgICAgICBMaXZlT3V0IGxpdmVPdXQg
PSBsaXZlT3V0c1tpXTsKLSAgICAgICAgUmVnIHJlZyA9IGxpdmVPdXQuZHdhcmZSZWcucmVnKCk7
Ci0gICAgICAgIC8vIEZJWE1FOiBFaXRoZXIgYXNzZXJ0IHRoYXQgc2l6ZSBpcyBub3QgZ3JlYXRl
ciB0aGFuIHNpemVvZihwb2ludGVyKSwgb3IgYWN0dWFsbHkKLSAgICAgICAgLy8gc2F2ZSB0aGUg
aGlnaCBiaXRzIG9mIHJlZ2lzdGVycy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzMDg4NQotICAgICAgICBpZiAoIXJlZykgewotICAgICAgICAg
ICAgZGF0YUxvZygiSW52YWxpZCBsaXZlT3V0cyBlbnRyeSBpbjogIiwgKnRoaXMsICJcbiIpOwot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAg
ICAgICByZXN1bHQuc2V0KHJlZyk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJl
Z2lzdGVyU2V0IFN0YWNrTWFwczo6UmVjb3JkOjp1c2VkUmVnaXN0ZXJTZXQoKSBjb25zdAotewot
ICAgIFJlZ2lzdGVyU2V0IHJlc3VsdDsKLSAgICByZXN1bHQubWVyZ2UobG9jYXRpb25TZXQoKSk7
Ci0gICAgcmVzdWx0Lm1lcmdlKGxpdmVPdXRzU2V0KCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLWJvb2wgU3RhY2tNYXBzOjpwYXJzZShEYXRhVmlldyogdmlldykKLXsKLSAgICBQYXJzZUNv
bnRleHQgY29udGV4dDsKLSAgICBjb250ZXh0Lm9mZnNldCA9IDA7Ci0gICAgY29udGV4dC52aWV3
ID0gdmlldzsKLSAgICAKLSAgICB2ZXJzaW9uID0gY29udGV4dC52ZXJzaW9uID0gY29udGV4dC52
aWV3LT5yZWFkPHVpbnQ4X3Q+KGNvbnRleHQub2Zmc2V0LCB0cnVlKTsKLQotICAgIGNvbnRleHQu
dmlldy0+cmVhZDx1aW50OF90Pihjb250ZXh0Lm9mZnNldCwgdHJ1ZSk7IC8vIFJlc2VydmVkCi0g
ICAgY29udGV4dC52aWV3LT5yZWFkPHVpbnQ4X3Q+KGNvbnRleHQub2Zmc2V0LCB0cnVlKTsgLy8g
UmVzZXJ2ZWQKLSAgICBjb250ZXh0LnZpZXctPnJlYWQ8dWludDhfdD4oY29udGV4dC5vZmZzZXQs
IHRydWUpOyAvLyBSZXNlcnZlZAotCi0gICAgdWludDMyX3QgbnVtRnVuY3Rpb25zOwotICAgIHVp
bnQzMl90IG51bUNvbnN0YW50czsKLSAgICB1aW50MzJfdCBudW1SZWNvcmRzOwotICAgIAotICAg
IG51bUZ1bmN0aW9ucyA9IGNvbnRleHQudmlldy0+cmVhZDx1aW50MzJfdD4oY29udGV4dC5vZmZz
ZXQsIHRydWUpOwotICAgIGlmIChjb250ZXh0LnZlcnNpb24gPj0gMSkgewotICAgICAgICBudW1D
b25zdGFudHMgPSBjb250ZXh0LnZpZXctPnJlYWQ8dWludDMyX3Q+KGNvbnRleHQub2Zmc2V0LCB0
cnVlKTsKLSAgICAgICAgbnVtUmVjb3JkcyA9IGNvbnRleHQudmlldy0+cmVhZDx1aW50MzJfdD4o
Y29udGV4dC5vZmZzZXQsIHRydWUpOwotICAgIH0KLSAgICB3aGlsZSAobnVtRnVuY3Rpb25zLS0p
Ci0gICAgICAgIHN0YWNrU2l6ZXMuYXBwZW5kKHJlYWRPYmplY3Q8U3RhY2tTaXplPihjb250ZXh0
KSk7Ci0gICAgCi0gICAgaWYgKCFjb250ZXh0LnZlcnNpb24pCi0gICAgICAgIG51bUNvbnN0YW50
cyA9IGNvbnRleHQudmlldy0+cmVhZDx1aW50MzJfdD4oY29udGV4dC5vZmZzZXQsIHRydWUpOwot
ICAgIHdoaWxlIChudW1Db25zdGFudHMtLSkKLSAgICAgICAgY29uc3RhbnRzLmFwcGVuZChyZWFk
T2JqZWN0PENvbnN0YW50Pihjb250ZXh0KSk7Ci0gICAgCi0gICAgaWYgKCFjb250ZXh0LnZlcnNp
b24pCi0gICAgICAgIG51bVJlY29yZHMgPSBjb250ZXh0LnZpZXctPnJlYWQ8dWludDMyX3Q+KGNv
bnRleHQub2Zmc2V0LCB0cnVlKTsKLSAgICB3aGlsZSAobnVtUmVjb3Jkcy0tKSB7Ci0gICAgICAg
IFJlY29yZCByZWNvcmQ7Ci0gICAgICAgIGlmICghcmVjb3JkLnBhcnNlKGNvbnRleHQpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZWNvcmRzLmFwcGVuZChyZWNvcmQpOwot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTdGFja01hcHM6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBvdXQucHJpbnQoIlZlcnNpb246IiwgdmVy
c2lvbiwgIiwgU3RhY2tTaXplc1siLCBsaXN0RHVtcChzdGFja1NpemVzKSwgIl0sIENvbnN0YW50
czpbIiwgbGlzdER1bXAoY29uc3RhbnRzKSwgIl0sIFJlY29yZHM6WyIsIGxpc3REdW1wKHJlY29y
ZHMpLCAiXSIpOwotfQotCi12b2lkIFN0YWNrTWFwczo6ZHVtcE11bHRpbGluZShQcmludFN0cmVh
bSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgpIGNvbnN0Ci17Ci0gICAgb3V0LnByaW50KHByZWZp
eCwgIlZlcnNpb246ICIsIHZlcnNpb24sICJcbiIpOwotICAgIG91dC5wcmludChwcmVmaXgsICJT
dGFja1NpemVzOlxuIik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YWNrU2l6ZXMu
c2l6ZSgpOyArK2kpCi0gICAgICAgIG91dC5wcmludChwcmVmaXgsICIgICAgIiwgc3RhY2tTaXpl
c1tpXSwgIlxuIik7Ci0gICAgb3V0LnByaW50KHByZWZpeCwgIkNvbnN0YW50czpcbiIpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb25zdGFudHMuc2l6ZSgpOyArK2kpCi0gICAgICAg
IG91dC5wcmludChwcmVmaXgsICIgICAgIiwgY29uc3RhbnRzW2ldLCAiXG4iKTsKLSAgICBvdXQu
cHJpbnQocHJlZml4LCAiUmVjb3JkczpcbiIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCByZWNvcmRzLnNpemUoKTsgKytpKQotICAgICAgICBvdXQucHJpbnQocHJlZml4LCAiICAgICIs
IHJlY29yZHNbaV0sICJcbiIpOwotfQotCi1TdGFja01hcHM6OlJlY29yZE1hcCBTdGFja01hcHM6
OmNvbXB1dGVSZWNvcmRNYXAoKSBjb25zdAotewotICAgIFJlY29yZE1hcCByZXN1bHQ7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gcmVjb3Jkcy5zaXplKCk7IGktLTspCi0gICAgICAgIHJlc3VsdC5h
ZGQocmVjb3Jkc1tpXS5wYXRjaHBvaW50SUQsIFZlY3RvcjxSZWNvcmRBbmRJbmRleD4oKSkuaXRl
cmF0b3ItPnZhbHVlLmFwcGVuZChSZWNvcmRBbmRJbmRleHsgcmVjb3Jkc1tpXSwgaSB9KTsKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi11bnNpZ25lZCBTdGFja01hcHM6OnN0YWNrU2l6ZSgpIGNv
bnN0Ci17Ci0gICAgUkVMRUFTRV9BU1NFUlQoc3RhY2tTaXplcy5zaXplKCkgPT0gMSk7Ci0KLSAg
ICByZXR1cm4gc3RhY2tTaXplc1swXS5zaXplOwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6
RlRMCi0KLW5hbWVzcGFjZSBXVEYgewotCi11c2luZyBuYW1lc3BhY2UgSlNDOjpGVEw7Ci0KLXZv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBTdGFja01hcHM6OkxvY2F0aW9uOjpL
aW5kIGtpbmQpCi17Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBTdGFja01hcHM6Okxv
Y2F0aW9uOjpVbnByb2Nlc3NlZDoKLSAgICAgICAgb3V0LnByaW50KCJVbnByb2Nlc3NlZCIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBTdGFja01hcHM6OkxvY2F0aW9uOjpSZWdpc3RlcjoK
LSAgICAgICAgb3V0LnByaW50KCJSZWdpc3RlciIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2Fz
ZSBTdGFja01hcHM6OkxvY2F0aW9uOjpEaXJlY3Q6Ci0gICAgICAgIG91dC5wcmludCgiRGlyZWN0
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFN0YWNrTWFwczo6TG9jYXRpb246OkluZGly
ZWN0OgotICAgICAgICBvdXQucHJpbnQoIkluZGlyZWN0Iik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIFN0YWNrTWFwczo6TG9jYXRpb246OkNvbnN0YW50OgotICAgICAgICBvdXQucHJpbnQo
IkNvbnN0YW50Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFN0YWNrTWFwczo6TG9jYXRp
b246OkNvbnN0YW50SW5kZXg6Ci0gICAgICAgIG91dC5wcmludCgiQ29uc3RhbnRJbmRleCIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGRhdGFMb2coIlVucmVjb2duaXplZCBraW5kOiAi
LCBzdGF0aWNfY2FzdDxpbnQ+KGtpbmQpLCAiXG4iKTsKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIEVOQUJMRShG
VExfSklUKQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmgJ
KHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tN
YXBzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBGVExTdGFja01hcHNf
aAotI2RlZmluZSBGVExTdGFja01hcHNfaAotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0KLSNpbmNs
dWRlICJEYXRhVmlldy5oIgotI2luY2x1ZGUgIkZUTERXQVJGUmVnaXN0ZXIuaCIKLSNpbmNsdWRl
ICJHUFJJbmZvLmgiCi0jaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKLSNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgTWFjcm9Bc3NlbWJsZXI7Ci0KLW5h
bWVzcGFjZSBGVEwgewotCi1zdHJ1Y3QgU3RhY2tNYXBzIHsKLSAgICBzdHJ1Y3QgUGFyc2VDb250
ZXh0IHsKLSAgICAgICAgdW5zaWduZWQgdmVyc2lvbjsKLSAgICAgICAgRGF0YVZpZXcqIHZpZXc7
Ci0gICAgICAgIHVuc2lnbmVkIG9mZnNldDsKLSAgICB9OwotICAgIAotICAgIHN0cnVjdCBDb25z
dGFudCB7Ci0gICAgICAgIGludDY0X3QgaW50ZWdlcjsKLSAgICAgICAgCi0gICAgICAgIHZvaWQg
cGFyc2UoUGFyc2VDb250ZXh0Jik7Ci0gICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdDsKLSAgICB9OwotCi0gICAgc3RydWN0IFN0YWNrU2l6ZSB7Ci0gICAgICAgIHVpbnQ2
NF90IGZ1bmN0aW9uT2Zmc2V0OwotICAgICAgICB1aW50NjRfdCBzaXplOwotCi0gICAgICAgIHZv
aWQgcGFyc2UoUGFyc2VDb250ZXh0Jik7Ci0gICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgTG9jYXRpb24gewotICAgICAgICBlbnVtIEtp
bmQgOiBpbnQ4X3QgewotICAgICAgICAgICAgVW5wcm9jZXNzZWQsCi0gICAgICAgICAgICBSZWdp
c3RlciwKLSAgICAgICAgICAgIERpcmVjdCwKLSAgICAgICAgICAgIEluZGlyZWN0LAotICAgICAg
ICAgICAgQ29uc3RhbnQsCi0gICAgICAgICAgICBDb25zdGFudEluZGV4Ci0gICAgICAgIH07Ci0g
ICAgICAgIAotICAgICAgICBEV0FSRlJlZ2lzdGVyIGR3YXJmUmVnOwotICAgICAgICB1aW50OF90
IHNpemU7Ci0gICAgICAgIEtpbmQga2luZDsKLSAgICAgICAgaW50MzJfdCBvZmZzZXQ7Ci0gICAg
ICAgIAotICAgICAgICB2b2lkIHBhcnNlKFBhcnNlQ29udGV4dCYpOwotICAgICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7Ci0gICAgICAgIAotICAgICAgICBHUFJSZWcgZGly
ZWN0R1BSKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgcmVzdG9yZUludG8oTWFjcm9Bc3NlbWJsZXIm
LCBTdGFja01hcHMmLCBjaGFyKiBzYXZlZFJlZ2lzdGVycywgR1BSUmVnIHJlc3VsdCkgY29uc3Q7
Ci0gICAgfTsKLSAgICAKLSAgICAvLyBGSVhNRTogSW52ZXN0aWdhdGUgaG93IG11Y2ggbWVtb3J5
IHRoaXMgdGFrZXMgYW5kIHBvc3NpYmx5IHBydW5lIGl0IGZyb20gdGhlCi0gICAgLy8gZm9ybWF0
IHdlIGtlZXAgYXJvdW5kIGluIEZUTDo6SklUQ29kZS4gSSBzdXNwZWN0IHRoYXQgaXQgd291bGQg
YmUgbW9zdCBhd2Vzb21lIHRvCi0gICAgLy8gaGF2ZSBhIENvbXBhY3RTdGFja01hcHMgc3RydWN0
IHRoYXQgbG9zc2lseSBzdG9yZXMgb25seSB0aGF0IHN1YnNldCBvZiBTdGFja01hcHMKLSAgICAv
LyBhbmQgUmVjb3JkIHRoYXQgd2UgYWN0dWFsbHkgbmVlZCBmb3IgT1NSIGV4aXQuCi0gICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDgwMgotICAgIHN0cnVj
dCBMaXZlT3V0IHsKLSAgICAgICAgRFdBUkZSZWdpc3RlciBkd2FyZlJlZzsKLSAgICAgICAgdWlu
dDhfdCBzaXplOwotICAgICAgICAKLSAgICAgICAgdm9pZCBwYXJzZShQYXJzZUNvbnRleHQmKTsK
LSAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwotICAgIH07Ci0gICAg
Ci0gICAgc3RydWN0IFJlY29yZCB7Ci0gICAgICAgIHVpbnQzMl90IHBhdGNocG9pbnRJRDsKLSAg
ICAgICAgdWludDMyX3QgaW5zdHJ1Y3Rpb25PZmZzZXQ7Ci0gICAgICAgIHVpbnQxNl90IGZsYWdz
OwotICAgICAgICAKLSAgICAgICAgVmVjdG9yPExvY2F0aW9uPiBsb2NhdGlvbnM7Ci0gICAgICAg
IFZlY3RvcjxMaXZlT3V0PiBsaXZlT3V0czsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgcGFyc2Uo
UGFyc2VDb250ZXh0Jik7Ci0gICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owot
ICAgICAgICAKLSAgICAgICAgUmVnaXN0ZXJTZXQgbGl2ZU91dHNTZXQoKSBjb25zdDsKLSAgICAg
ICAgUmVnaXN0ZXJTZXQgbG9jYXRpb25TZXQoKSBjb25zdDsKLSAgICAgICAgUmVnaXN0ZXJTZXQg
dXNlZFJlZ2lzdGVyU2V0KCkgY29uc3Q7Ci0gICAgfTsKLQotICAgIHVuc2lnbmVkIHZlcnNpb247
Ci0gICAgVmVjdG9yPFN0YWNrU2l6ZT4gc3RhY2tTaXplczsKLSAgICBWZWN0b3I8Q29uc3RhbnQ+
IGNvbnN0YW50czsKLSAgICBWZWN0b3I8UmVjb3JkPiByZWNvcmRzOwotICAgIAotICAgIGJvb2wg
cGFyc2UoRGF0YVZpZXcqKTsgLy8gUmV0dXJucyB0cnVlIG9uIHBhcnNlIHN1Y2Nlc3MsIGZhbHNl
IG9uIGZhaWx1cmUuIEZhaWx1cmUgbWVhbnMgdGhhdCBMTFZNIGlzIHNpZ25hbGluZyBjb21waWxl
IGZhaWx1cmUgdG8gdXMuCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAg
dm9pZCBkdW1wTXVsdGlsaW5lKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4KSBjb25z
dDsKLSAgICAKLSAgICBzdHJ1Y3QgUmVjb3JkQW5kSW5kZXggewotICAgICAgICBSZWNvcmQgcmVj
b3JkOwotICAgICAgICB1aW50MzJfdCBpbmRleDsKLSAgICB9OwotICAgIHR5cGVkZWYgSGFzaE1h
cDx1aW50MzJfdCwgVmVjdG9yPFJlY29yZEFuZEluZGV4PiwgV1RGOjpJbnRIYXNoPHVpbnQzMl90
PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IFJlY29yZE1h
cDsKLSAgICAKLSAgICBSZWNvcmRNYXAgY29tcHV0ZVJlY29yZE1hcCgpIGNvbnN0OwotCi0gICAg
dW5zaWduZWQgc3RhY2tTaXplKCkgY29uc3Q7Ci0KLSAgICB1bnNpZ25lZCBzdGFja1NpemVGb3JM
b2NhbHMoKSBjb25zdAotICAgIHsKLSNpZiBDUFUoWDg2XzY0KQotICAgICAgICAvLyBMTFZNIHdp
bGwgc3RvcmUgZnAgaW4gdGhlIGNhbGwgZnJhbWUKLSAgICAgICAgcmV0dXJuIHN0YWNrU2l6ZSgp
IC0gc2l6ZW9mKHZvaWQqKTsKLSNlbGlmIENQVShBUk02NCkKLSAgICAgICAgLy8gTExWTSB3aWxs
IHN0b3JlIGZwICYgbHIgaW4gdGhlIGNhbGwgZnJhbWUKLSAgICAgICAgcmV0dXJuIHN0YWNrU2l6
ZSgpIC0gMiAqIHNpemVvZih2b2lkKik7Ci0jZWxzZQotICAgICAgICBVTlJFQUNIQUJMRV9GT1Jf
UExBVEZPUk0oKTsKLSNlbmRpZgotICAgIH0KLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYs
IEpTQzo6RlRMOjpTdGFja01hcHM6OkxvY2F0aW9uOjpLaW5kKTsKLQotfSAvLyBuYW1lc3BhY2Ug
V1RGCi0KLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLQotI2VuZGlmIC8vIEZUTFN0YWNrTWFw
c19oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCShyZXZpc2lv
biAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjksMTIgKzI5LDEwIEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNp
bmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgotI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlv
bnMuaCIKICNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKICNpbmNsdWRlICJGVExK
SVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRMSklURmluYWxpemVyLmgiCiAjaW5jbHVkZSAiRlRMUGF0
Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oIgotI2luY2x1ZGUgPGxsdm0vSW5pdGlhbGl6ZUxMVk0u
aD4KICNpbmNsdWRlIDxzdGRpby5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CkBAIC00NCwxNiArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgREZHOwogCiBTdGF0ZTo6U3RhdGUo
R3JhcGgmIGdyYXBoKQogICAgIDogZ3JhcGgoZ3JhcGgpCi0jaWYgRlRMX1VTRVNfQjMKLSAgICAs
IGNvbnRleHQobnVsbHB0cikKLSNlbHNlCi0gICAgLCBjb250ZXh0KGxsdm0tPkNvbnRleHRDcmVh
dGUoKSkKLSNlbmRpZgotICAgICwgbW9kdWxlKDApCi0gICAgLCBmdW5jdGlvbigwKQogICAgICwg
Z2VuZXJhdGVkRnVuY3Rpb24oMCkKLSAgICAsIHVud2luZERhdGFTZWN0aW9uKDApCi0gICAgLCB1
bndpbmREYXRhU2VjdGlvblNpemUoMCkKIHsKICAgICBzd2l0Y2ggKGdyYXBoLm1fcGxhbi5tb2Rl
KSB7CiAgICAgY2FzZSBGVExNb2RlOiB7CkBAIC03NSw3ICs2NCw2IEBAIFN0YXRlOjpTdGF0ZShH
cmFwaCYgZ3JhcGgpCiAgICAgZ3JhcGgubV9wbGFuLmZpbmFsaXplciA9IHN0ZDo6bWFrZV91bmlx
dWU8SklURmluYWxpemVyPihncmFwaC5tX3BsYW4pOwogICAgIGZpbmFsaXplciA9IHN0YXRpY19j
YXN0PEpJVEZpbmFsaXplcio+KGdyYXBoLm1fcGxhbi5maW5hbGl6ZXIuZ2V0KCkpOwogCi0jaWYg
RlRMX1VTRVNfQjMKICAgICBwcm9jID0gc3RkOjptYWtlX3VuaXF1ZTxQcm9jZWR1cmU+KCk7CiAK
ICAgICBwcm9jLT5zZXRPcmlnaW5QcmludGVyKApAQCAtODQsMzEgKzcyLDEwIEBAIFN0YXRlOjpT
dGF0ZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIH0pOwogCiAgICAgcHJvYy0+c2V0RnJvbnRlbmRE
YXRhKCZncmFwaCk7Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKIH0KIAogU3RhdGU6On5TdGF0ZSgp
CiB7Ci0jaWYgIUZUTF9VU0VTX0IzCi0gICAgbGx2bS0+Q29udGV4dERpc3Bvc2UoY29udGV4dCk7
Ci0jZW5kaWYKLX0KLQotdm9pZCBTdGF0ZTo6ZHVtcFN0YXRlKGNvbnN0IGNoYXIqIHdoZW4pCi17
Ci0gICAgZHVtcFN0YXRlKG1vZHVsZSwgd2hlbik7Ci19Ci0KLXZvaWQgU3RhdGU6OmR1bXBTdGF0
ZShMTW9kdWxlIG1vZHVsZSwgY29uc3QgY2hhciogd2hlbikKLXsKLSNpZiBGVExfVVNFU19CMwot
ICAgIFVOVVNFRF9QQVJBTShtb2R1bGUpOwotICAgIGlmICghd2hlbiB8fCAhIXdoZW4pCi0gICAg
ICAgIENSQVNIKCk7Ci0jZWxzZQotICAgIGRhdGFMb2coIkxMVk0gSVIgZm9yICIsIENvZGVCbG9j
a1dpdGhKSVRUeXBlKGdyYXBoLm1fY29kZUJsb2NrLCBGVEw6OkpJVENvZGU6OkZUTEpJVCksICIg
Iiwgd2hlbiwgIjpcbiIpOwotICAgIGR1bXBNb2R1bGUobW9kdWxlKTsKLSNlbmRpZgogfQogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
dGF0ZS5oCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEzICszMyw4IEBACiAjaW5jbHVkZSAiREZH
R3JhcGguaCIKICNpbmNsdWRlICJGVExBYmJyZXZpYXRlZFR5cGVzLmgiCiAjaW5jbHVkZSAiRlRM
R2VuZXJhdGVkRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJGVExJbmxpbmVDYWNoZURlc2NyaXB0b3Iu
aCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRMSklURmluYWxpemVyLmgi
Ci0jaW5jbHVkZSAiRlRMSlNDYWxsLmgiCi0jaW5jbHVkZSAiRlRMSlNDYWxsVmFyYXJncy5oIgot
I2luY2x1ZGUgIkZUTEpTVGFpbENhbGwuaCIKLSNpbmNsdWRlICJGVExTdGFja01hcHMuaCIKICNp
bmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKQEAgLTc0
LDUzICs2OSwxNiBAQCBwdWJsaWM6CiAgICAgLy8gTm9uZSBvZiB0aGVzZSB0aGluZ3MgaXMgb3du
ZWQgYnkgU3RhdGUuIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZgogICAgIC8vIEZUTCBwaGFz
ZXMgdG8gcHJvcGVybHkgbWFuYWdlIHRoZSBsaWZlY3ljbGUgb2YgdGhlIG1vZHVsZSBhbmQgZnVu
Y3Rpb24uCiAgICAgREZHOjpHcmFwaCYgZ3JhcGg7Ci0jaWYgRlRMX1VTRVNfQjMKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8QjM6OlByb2NlZHVyZT4gcHJvYzsKLSNlbmRpZgotICAgIExDb250ZXh0IGNv
bnRleHQ7Ci0gICAgTE1vZHVsZSBtb2R1bGU7Ci0gICAgTFZhbHVlIGZ1bmN0aW9uOwotICAgIGJv
b2wgYWxsb2NhdGlvbkZhaWxlZCB7IGZhbHNlIH07IC8vIFRocm93IG91dCB0aGUgY29tcGlsYXRp
b24gb25jZSBMTFZNIHJldHVybnMuCisgICAgYm9vbCBhbGxvY2F0aW9uRmFpbGVkIHsgZmFsc2Ug
fTsgLy8gVGhyb3cgb3V0IHRoZSBjb21waWxhdGlvbiBvbmNlIEIzIHJldHVybnMuCiAgICAgUmVm
UHRyPEpJVENvZGU+IGppdENvZGU7CiAgICAgR2VuZXJhdGVkRnVuY3Rpb24gZ2VuZXJhdGVkRnVu
Y3Rpb247CiAgICAgSklURmluYWxpemVyKiBmaW5hbGl6ZXI7Ci0jaWYgRlRMX1VTRVNfQjMKICAg
ICAvLyBUb3AtbGV2ZWwgZXhjZXB0aW9uIGhhbmRsZXIuIEp1bXAgaGVyZSBpZiB5b3Uga25vdyB0
aGF0IHlvdSBoYXZlIHRvIGdlbmVyaWNVbndpbmQoKSBhbmQgdGhlcmUKICAgICAvLyBhcmUgbm8g
YXBwbGljYWJsZSBjYXRjaCBibG9ja3MgYW55d2hlcmUgaW4gdGhlIEdyYXBoLgogICAgIFJlZlB0
cjxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBkZWZhdWx0RXhjZXB0aW9uSGFuZGxlOwogICAg
IEJveDxDQ2FsbEhlbHBlcnM6OkxhYmVsPiBleGNlcHRpb25IYW5kbGVyIHsgQm94PENDYWxsSGVs
cGVyczo6TGFiZWw+OjpjcmVhdGUoKSB9OwogICAgIEIzOjpTdGFja1Nsb3QqIGNhcHR1cmVkVmFs
dWUgeyBudWxscHRyIH07Ci0jZWxzZSAvLyBGVExfVVNFU19CMwotICAgIHVuc2lnbmVkIGhhbmRs
ZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFja21hcElEIHsgVUlOVF9NQVggfTsKLSAgICB1bnNp
Z25lZCBoYW5kbGVFeGNlcHRpb25TdGFja21hcElEIHsgVUlOVF9NQVggfTsKLSAgICB1bnNpZ25l
ZCBjYXB0dXJlZFN0YWNrbWFwSUQgeyBVSU5UX01BWCB9OwotICAgIHVuc2lnbmVkIHZhcmFyZ3NT
cGlsbFNsb3RzU3RhY2ttYXBJRCB7IFVJTlRfTUFYIH07Ci0gICAgdW5zaWduZWQgZXhjZXB0aW9u
SGFuZGxpbmdTcGlsbFNsb3RTdGFja21hcElEIHsgVUlOVF9NQVggfTsKLSNlbmRpZiAvLyBGVExf
VVNFX0IzCi0gICAgU2VnbWVudGVkVmVjdG9yPEdldEJ5SWREZXNjcmlwdG9yPiBnZXRCeUlkczsK
LSAgICBTZWdtZW50ZWRWZWN0b3I8UHV0QnlJZERlc2NyaXB0b3I+IHB1dEJ5SWRzOwotICAgIFNl
Z21lbnRlZFZlY3RvcjxDaGVja0luRGVzY3JpcHRvcj4gY2hlY2tJbnM7Ci0gICAgU2VnbWVudGVk
VmVjdG9yPEJpbmFyeU9wRGVzY3JpcHRvcj4gYmluYXJ5T3BzOwotICAgIFNlZ21lbnRlZFZlY3Rv
cjxMYXp5U2xvd1BhdGhEZXNjcmlwdG9yPiBsYXp5U2xvd1BhdGhzOwotI2lmIEVOQUJMRShNQVNN
X1BST0JFKQotICAgIFNlZ21lbnRlZFZlY3RvcjxQcm9iZURlc2NyaXB0b3I+IHByb2JlczsKLSNl
bmRpZgotI2lmICFGVExfVVNFU19CMwotICAgIFZlY3RvcjxKU0NhbGw+IGpzQ2FsbHM7Ci0gICAg
VmVjdG9yPEpTQ2FsbFZhcmFyZ3M+IGpzQ2FsbFZhcmFyZ3NlczsKLSAgICBWZWN0b3I8SlNUYWls
Q2FsbD4ganNUYWlsQ2FsbHM7Ci0gICAgVmVjdG9yPENTdHJpbmc+IGNvZGVTZWN0aW9uTmFtZXM7
Ci0gICAgVmVjdG9yPENTdHJpbmc+IGRhdGFTZWN0aW9uTmFtZXM7Ci0gICAgU2VnbWVudGVkVmVj
dG9yPE9TUkV4aXREZXNjcmlwdG9ySW1wbD4gb3NyRXhpdERlc2NyaXB0b3JJbXBsczsKLSNlbmRp
ZiAvLyAhRlRMX1VTRVNfQjMKLSAgICB2b2lkKiB1bndpbmREYXRhU2VjdGlvbjsKLSAgICBzaXpl
X3QgdW53aW5kRGF0YVNlY3Rpb25TaXplOwotICAgIFJlZlB0cjxEYXRhU2VjdGlvbj4gc3RhY2tt
YXBzU2VjdGlvbjsKLSAgICAKLSAgICB2b2lkIGR1bXBTdGF0ZShjb25zdCBjaGFyKiB3aGVuKTsK
LSAgICB2b2lkIGR1bXBTdGF0ZShMTW9kdWxlLCBjb25zdCBjaGFyKiB3aGVuKTsKLQotICAgIEhh
c2hTZXQ8Q1N0cmluZz4gbmF0aXZlTG9hZGVkTGlicmFyaWVzOwogfTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExVbndpbmRJ
bmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFVud2lu
ZEluZm8uY3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFVud2luZEluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwMjUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcwotICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICoKLSAqIFVuaXZl
cnNpdHkgb2YgSWxsaW5vaXMvTkNTQQotICogT3BlbiBTb3VyY2UgTGljZW5zZQotICoKLSAqIENv
cHlyaWdodCAoYykgMjAwOS0yMDE0IGJ5IHRoZSBjb250cmlidXRvcnMgb2YgTExWTS9saWJjKyth
YmkgcHJvamVjdC4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3Bl
ZCBieToKLSAqCi0gKiAgICBMTFZNIFRlYW0KLSAqCi0gKiAgICBVbml2ZXJzaXR5IG9mIElsbGlu
b2lzIGF0IFVyYmFuYS1DaGFtcGFpZ24KLSAqCi0gKiAgICBodHRwOi8vbGx2bS5vcmcKLSAqCi0g
KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl
cnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCi0gKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk
IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCB3aXRoCi0gKiB0
aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRh
dGlvbiB0aGUgcmlnaHRzIHRvCi0gKiB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs
IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcwotICogb2YgdGhlIFNv
ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVy
bmlzaGVkIHRvIGRvCi0gKiBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6
Ci0gKgotICogICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzLgotICoKLSAqICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQg
bm90aWNlLAotICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVycyBpbiB0aGUKLSAqICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAgICAqIE5l
aXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBMTFZNIFRlYW0sIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMg
YXQKLSAqICAgICAgVXJiYW5hLUNoYW1wYWlnbiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvCi0gKiAgICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCi0gKiAgICAgIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg
IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1Q
TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFksIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O
SU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT05UUklCVVRPUlMgT1Ig
Q09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RI
RVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg
T1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX
SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIFdJVEggVEhFCi0g
KiBTT0ZUV0FSRS4KLSAqCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqCi0gKiBDb3B5cmln
aHQgKGMpIDIwMDktMjAxNCBieSB0aGUgY29udHJpYnV0b3JzIG9mIExMVk0vbGliYysrYWJpIHBy
b2plY3QuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy
Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0d2FyZSBh
bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRl
YWwKLSAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0
aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLSAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn
ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSAqIGNvcGll
cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0
d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw
ZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBz
dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJF
IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF
U1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBBVVRI
T1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VT
IE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU
LCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElOIENPTk5F
Q1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgot
ICogVEhFIFNPRlRXQVJFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJG
VExVbndpbmRJbmZvLmgiCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJSZWdp
c3RlckF0T2Zmc2V0TGlzdC5oIgotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0KLSNpZiBPUyhEQVJX
SU4pCi0jaW5jbHVkZSA8bWFjaC1vL2NvbXBhY3RfdW53aW5kX2VuY29kaW5nLmg+Ci0jZW5kaWYK
LSNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgewotCi1uYW1lc3BhY2UgewotI2lmIE9TKERBUldJTikKLXN0cnVjdCBDb21wYWN0VW53aW5k
IHsKLSAgICB2b2lkKiBmdW5jdGlvbjsKLSAgICB1aW50MzJfdCBzaXplOwotICAgIGNvbXBhY3Rf
dW53aW5kX2VuY29kaW5nX3QgZW5jb2Rpbmc7Ci0gICAgdm9pZCogcGVyc29uYWxpdHk7Ci0gICAg
dm9pZCogbHNkYTsKLX07Ci0jZWxpZiBPUyhMSU5VWCkKLS8vIERXQVJGIHVud2luZCBpbnN0cnVj
dGlvbnMKLWVudW0gewotICAgIERXX0NGQV9ub3AgICAgICAgICAgICAgICAgID0gMHgwLAotICAg
IERXX0NGQV9zZXRfbG9jICAgICAgICAgICAgID0gMHgxLAotICAgIERXX0NGQV9hZHZhbmNlX2xv
YzEgICAgICAgID0gMHgyLAotICAgIERXX0NGQV9hZHZhbmNlX2xvYzIgICAgICAgID0gMHgzLAot
ICAgIERXX0NGQV9hZHZhbmNlX2xvYzQgICAgICAgID0gMHg0LAotICAgIERXX0NGQV9vZmZzZXRf
ZXh0ZW5kZWQgICAgID0gMHg1LAotICAgIERXX0NGQV9kZWZfY2ZhICAgICAgICAgICAgID0gMHhD
LAotICAgIERXX0NGQV9kZWZfY2ZhX3JlZ2lzdGVyICAgID0gMHhELAotICAgIERXX0NGQV9kZWZf
Y2ZhX29mZnNldCAgICAgID0gMHhFLAotICAgIERXX0NGQV9vZmZzZXRfZXh0ZW5kZWRfc2YgPSAw
eDExLAotICAgIERXX0NGQV9kZWZfY2ZhX3NmICAgICAgICAgPSAweDEyLAotICAgIERXX0NGQV9k
ZWZfY2ZhX29mZnNldF9zZiAgPSAweDEzLAotICAgIC8vIGhpZ2ggMiBiaXRzIGFyZSAweDEsIGxv
d2VyIDYgYml0cyBhcmUgZGVsdGEKLSAgICBEV19DRkFfYWR2YW5jZV9sb2MgICAgICAgID0gMHg0
MCwKLSAgICAvLyBoaWdoIDIgYml0cyBhcmUgMHgyLCBsb3dlciA2IGJpdHMgYXJlIHJlZ2lzdGVy
Ci0gICAgRFdfQ0ZBX29mZnNldCAgICAgICAgICAgICA9IDB4ODAKLX07Ci0KLWVudW0gewotICAg
IERXX0NGQV9vcGVyYW5kX21hc2sgPSAweDNGIC8vIGxvdyA2IGJpdHMgbWFzayBmb3Igb3Bjb2Rl
LWVuY29kZWQgb3BlcmFuZHMgaW4gRFdfQ0ZBX2FkdmFuY2VfbG9jIGFuZCBEV19DRkFfb2Zmc2V0
Ci19OwotCi0vLyBGU0YgZXhjZXB0aW9uIGhhbmRsaW5nIFBvaW50ZXItRW5jb2RpbmcgY29uc3Rh
bnRzCi1lbnVtIHsKLSAgICBEV19FSF9QRV9wdHIgICAgICAgPSAweDAwLAotICAgIERXX0VIX1BF
X3VsZWIxMjggICA9IDB4MDEsCi0gICAgRFdfRUhfUEVfdWRhdGEyICAgID0gMHgwMiwKLSAgICBE
V19FSF9QRV91ZGF0YTQgICAgPSAweDAzLAotICAgIERXX0VIX1BFX3VkYXRhOCAgICA9IDB4MDQs
Ci0gICAgRFdfRUhfUEVfc2xlYjEyOCAgID0gMHgwOSwKLSAgICBEV19FSF9QRV9zZGF0YTIgICAg
PSAweDBBLAotICAgIERXX0VIX1BFX3NkYXRhNCAgICA9IDB4MEIsCi0gICAgRFdfRUhfUEVfc2Rh
dGE4ICAgID0gMHgwQywKLSAgICBEV19FSF9QRV9hYnNwdHIgICAgPSAweDAwLAotICAgIERXX0VI
X1BFX3BjcmVsICAgICA9IDB4MTAsCi0gICAgRFdfRUhfUEVfaW5kaXJlY3QgID0gMHg4MAotfTsK
LQotZW51bSB7Ci0gICAgRFdfRUhfUEVfcmVsYXRpdmVfbWFzayA9IDB4NzAKLX07Ci0KLS8vIDY0
LWJpdCB4ODZfNjQgcmVnaXN0ZXJzCi1lbnVtIHsKLSAgICBVTldfWDg2XzY0X3JieCA9ICAzLAot
ICAgIFVOV19YODZfNjRfcmJwID0gIDYsCi0gICAgVU5XX1g4Nl82NF9yMTIgPSAxMiwKLSAgICBV
TldfWDg2XzY0X3IxMyA9IDEzLAotICAgIFVOV19YODZfNjRfcjE0ID0gMTQsCi0gICAgVU5XX1g4
Nl82NF9yMTUgPSAxNQotfTsKLQotZW51bSB7Ci0gICAgRFdfWDg2XzY0X1JFVF9hZGRyID0gMTYK
LX07Ci0KLWVudW0gewotICAgIFVOV19BUk02NF94MCA9IDAsCi0gICAgVU5XX0FSTTY0X3gxID0g
MSwKLSAgICBVTldfQVJNNjRfeDIgPSAyLAotICAgIFVOV19BUk02NF94MyA9IDMsCi0gICAgVU5X
X0FSTTY0X3g0ID0gNCwKLSAgICBVTldfQVJNNjRfeDUgPSA1LAotICAgIFVOV19BUk02NF94NiA9
IDYsCi0gICAgVU5XX0FSTTY0X3g3ID0gNywKLSAgICBVTldfQVJNNjRfeDggPSA4LAotICAgIFVO
V19BUk02NF94OSA9IDksCi0gICAgVU5XX0FSTTY0X3gxMCA9IDEwLAotICAgIFVOV19BUk02NF94
MTEgPSAxMSwKLSAgICBVTldfQVJNNjRfeDEyID0gMTIsCi0gICAgVU5XX0FSTTY0X3gxMyA9IDEz
LAotICAgIFVOV19BUk02NF94MTQgPSAxNCwKLSAgICBVTldfQVJNNjRfeDE1ID0gMTUsCi0gICAg
VU5XX0FSTTY0X3gxNiA9IDE2LAotICAgIFVOV19BUk02NF94MTcgPSAxNywKLSAgICBVTldfQVJN
NjRfeDE4ID0gMTgsCi0gICAgVU5XX0FSTTY0X3gxOSA9IDE5LAotICAgIFVOV19BUk02NF94MjAg
PSAyMCwKLSAgICBVTldfQVJNNjRfeDIxID0gMjEsCi0gICAgVU5XX0FSTTY0X3gyMiA9IDIyLAot
ICAgIFVOV19BUk02NF94MjMgPSAyMywKLSAgICBVTldfQVJNNjRfeDI0ID0gMjQsCi0gICAgVU5X
X0FSTTY0X3gyNSA9IDI1LAotICAgIFVOV19BUk02NF94MjYgPSAyNiwKLSAgICBVTldfQVJNNjRf
eDI3ID0gMjcsCi0gICAgVU5XX0FSTTY0X3gyOCA9IDI4LAotICAgIFVOV19BUk02NF9mcCA9IDI5
LAotICAgIFVOV19BUk02NF94MzAgPSAzMCwKLSAgICBVTldfQVJNNjRfc3AgPSAzMSwKLSAgICBV
TldfQVJNNjRfdjAgPSA2NCwKLSAgICBVTldfQVJNNjRfdjEgPSA2NSwKLSAgICBVTldfQVJNNjRf
djIgPSA2NiwKLSAgICBVTldfQVJNNjRfdjMgPSA2NywKLSAgICBVTldfQVJNNjRfdjQgPSA2OCwK
LSAgICBVTldfQVJNNjRfdjUgPSA2OSwKLSAgICBVTldfQVJNNjRfdjYgPSA3MCwKLSAgICBVTldf
QVJNNjRfdjcgPSA3MSwKLSAgICBVTldfQVJNNjRfdjggPSA3MiwKLSAgICBVTldfQVJNNjRfdjkg
PSA3MywKLSAgICBVTldfQVJNNjRfdjEwID0gNzQsCi0gICAgVU5XX0FSTTY0X3YxMSA9IDc1LAot
ICAgIFVOV19BUk02NF92MTIgPSA3NiwKLSAgICBVTldfQVJNNjRfdjEzID0gNzcsCi0gICAgVU5X
X0FSTTY0X3YxNCA9IDc4LAotICAgIFVOV19BUk02NF92MTUgPSA3OSwKLSAgICBVTldfQVJNNjRf
djE2ID0gODAsCi0gICAgVU5XX0FSTTY0X3YxNyA9IDgxLAotICAgIFVOV19BUk02NF92MTggPSA4
MiwKLSAgICBVTldfQVJNNjRfdjE5ID0gODMsCi0gICAgVU5XX0FSTTY0X3YyMCA9IDg0LAotICAg
IFVOV19BUk02NF92MjEgPSA4NSwKLSAgICBVTldfQVJNNjRfdjIyID0gODYsCi0gICAgVU5XX0FS
TTY0X3YyMyA9IDg3LAotICAgIFVOV19BUk02NF92MjQgPSA4OCwKLSAgICBVTldfQVJNNjRfdjI1
ID0gODksCi0gICAgVU5XX0FSTTY0X3YyNiA9IDkwLAotICAgIFVOV19BUk02NF92MjcgPSA5MSwK
LSAgICBVTldfQVJNNjRfdjI4ID0gOTIsCi0gICAgVU5XX0FSTTY0X3YyOSA9IDkzLAotICAgIFVO
V19BUk02NF92MzAgPSA5NCwKLSAgICBVTldfQVJNNjRfdjMxID0gOTUKLX07Ci0KLXN0YXRpYyB1
aW50OF90IGdldDgodWludHB0cl90IGFkZHIpICAgIHsgcmV0dXJuICooKHVpbnQ4X3QqKWFkZHIp
OyB9Ci1zdGF0aWMgdWludDE2X3QgZ2V0MTYodWludHB0cl90IGFkZHIpICB7IHJldHVybiAqKCh1
aW50MTZfdCopYWRkcik7IH0KLXN0YXRpYyB1aW50MzJfdCBnZXQzMih1aW50cHRyX3QgYWRkcikg
IHsgcmV0dXJuICooKHVpbnQzMl90KilhZGRyKTsgfQotc3RhdGljIHVpbnQ2NF90IGdldDY0KHVp
bnRwdHJfdCBhZGRyKSAgeyByZXR1cm4gKigodWludDY0X3QqKWFkZHIpOyB9Ci0KLXN0YXRpYyB1
aW50cHRyX3QgZ2V0UCh1aW50cHRyX3QgYWRkcikKLXsKLSAgICAvLyBGSVhNRTogYWRkIHN1cHBv
cnQgZm9yIDMyIGJpdCBwb2ludGVycyBvbiAzMiBiaXQgYXJjaGl0ZWN0dXJlcwotICAgIHJldHVy
biBnZXQ2NChhZGRyKTsKLX0KLQotc3RhdGljIHVpbnQ2NF90IGdldFVMRUIxMjgodWludHB0cl90
JiBhZGRyLCB1aW50cHRyX3QgZW5kKQotewotICAgIGNvbnN0IHVpbnQ4X3QqIHAgPSAodWludDhf
dCopYWRkcjsKLSAgICBjb25zdCB1aW50OF90KiBwZW5kID0gKHVpbnQ4X3QqKWVuZDsKLSAgICB1
aW50NjRfdCByZXN1bHQgPSAwOwotICAgIGludCBiaXQgPSAwOwotICAgIGRvICB7Ci0gICAgICAg
IHVpbnQ2NF90IGI7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlQocCAhPSBwZW5kKTsgLy8gdHJ1
bmNhdGVkIHVsZWIxMjggZXhwcmVzc2lvbgotCi0gICAgICAgIGIgPSAqcCAmIDB4N2Y7Ci0KLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIShiaXQgPj0gNjQgfHwgYiA8PCBiaXQgPj4gYml0ICE9IGIp
KTsgLy8gbWFsZm9ybWVkIHVsZWIxMjggZXhwcmVzc2lvbgotCi0gICAgICAgIHJlc3VsdCB8PSBi
IDw8IGJpdDsKLSAgICAgICAgYml0ICs9IDc7Ci0gICAgfSB3aGlsZSAoKnArKyA+PSAweDgwKTsK
LSAgICBhZGRyID0gKHVpbnRwdHJfdClwOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRp
YyBpbnQ2NF90IGdldFNMRUIxMjgodWludHB0cl90JiBhZGRyLCB1aW50cHRyX3QgZW5kKQotewot
ICAgIGNvbnN0IHVpbnQ4X3QqIHAgPSAodWludDhfdCopYWRkcjsKLSAgICBjb25zdCB1aW50OF90
KiBwZW5kID0gKHVpbnQ4X3QqKWVuZDsKLQotICAgIGludDY0X3QgcmVzdWx0ID0gMDsKLSAgICBp
bnQgYml0ID0gMDsKLSAgICB1aW50OF90IGJ5dGU7Ci0gICAgZG8gewotICAgICAgICBSRUxFQVNF
X0FTU0VSVChwICE9IHBlbmQpOyAvLyB0cnVuY2F0ZWQgc2xlYjEyOCBleHByZXNzaW9uCi0KLSAg
ICAgICAgYnl0ZSA9ICpwKys7Ci0gICAgICAgIHJlc3VsdCB8PSAoKGJ5dGUgJiAweDdmKSA8PCBi
aXQpOwotICAgICAgICBiaXQgKz0gNzsKLSAgICB9IHdoaWxlIChieXRlICYgMHg4MCk7Ci0gICAg
Ly8gc2lnbiBleHRlbmQgbmVnYXRpdmUgbnVtYmVycwotICAgIGlmICgoYnl0ZSAmIDB4NDApKQot
ICAgICAgICByZXN1bHQgfD0gKC0xTEwpIDw8IGJpdDsKLSAgICBhZGRyID0gKHVpbnRwdHJfdClw
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB1aW50cHRyX3QgZ2V0RW5jb2RlZFAo
dWludHB0cl90JiBhZGRyLCB1aW50cHRyX3QgZW5kLCB1aW50OF90IGVuY29kaW5nKQotewotICAg
IHVpbnRwdHJfdCBzdGFydEFkZHIgPSBhZGRyOwotICAgIGNvbnN0IHVpbnQ4X3QqIHAgPSAodWlu
dDhfdCopYWRkcjsKLSAgICB1aW50cHRyX3QgcmVzdWx0OwotCi0gICAgLy8gZmlyc3QgZ2V0IHZh
bHVlCi0gICAgc3dpdGNoIChlbmNvZGluZyAmIDB4MEYpIHsKLSAgICBjYXNlIERXX0VIX1BFX3B0
cjoKLSAgICAgICAgcmVzdWx0ID0gZ2V0UChhZGRyKTsKLSAgICAgICAgcCArPSBzaXplb2YodWlu
dHB0cl90KTsKLSAgICAgICAgYWRkciA9ICh1aW50cHRyX3QpcDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBEV19FSF9QRV91bGViMTI4OgotICAgICAgICByZXN1bHQgPSBnZXRVTEVCMTI4KGFk
ZHIsIGVuZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRFdfRUhfUEVfdWRhdGEyOgotICAg
ICAgICByZXN1bHQgPSBnZXQxNihhZGRyKTsKLSAgICAgICAgcCArPSAyOwotICAgICAgICBhZGRy
ID0gKHVpbnRwdHJfdClwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERXX0VIX1BFX3VkYXRh
NDoKLSAgICAgICAgcmVzdWx0ID0gZ2V0MzIoYWRkcik7Ci0gICAgICAgIHAgKz0gNDsKLSAgICAg
ICAgYWRkciA9ICh1aW50cHRyX3QpcDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEV19FSF9Q
RV91ZGF0YTg6Ci0gICAgICAgIHJlc3VsdCA9IGdldDY0KGFkZHIpOwotICAgICAgICBwICs9IDg7
Ci0gICAgICAgIGFkZHIgPSAodWludHB0cl90KXA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
RFdfRUhfUEVfc2xlYjEyODoKLSAgICAgICAgcmVzdWx0ID0gZ2V0U0xFQjEyOChhZGRyLCBlbmQp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERXX0VIX1BFX3NkYXRhMjoKLSAgICAgICAgcmVz
dWx0ID0gKGludDE2X3QpZ2V0MTYoYWRkcik7Ci0gICAgICAgIHAgKz0gMjsKLSAgICAgICAgYWRk
ciA9ICh1aW50cHRyX3QpcDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEV19FSF9QRV9zZGF0
YTQ6Ci0gICAgICAgIHJlc3VsdCA9IChpbnQzMl90KWdldDMyKGFkZHIpOwotICAgICAgICBwICs9
IDQ7Ci0gICAgICAgIGFkZHIgPSAodWludHB0cl90KXA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRFdfRUhfUEVfc2RhdGE4OgotICAgICAgICByZXN1bHQgPSBnZXQ2NChhZGRyKTsKLSAgICAg
ICAgcCArPSA4OwotICAgICAgICBhZGRyID0gKHVpbnRwdHJfdClwOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyB1
bmtub3duIHBvaW50ZXIgZW5jb2RpbmcKLSAgICB9Ci0KLSAgICAvLyB0aGVuIGFkZCByZWxhdGl2
ZSBvZmZzZXQKLSAgICBzd2l0Y2ggKGVuY29kaW5nICYgRFdfRUhfUEVfcmVsYXRpdmVfbWFzaykg
ewotICAgIGNhc2UgRFdfRUhfUEVfYWJzcHRyOgotICAgICAgICAvLyBkbyBub3RoaW5nCi0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRFdfRUhfUEVfcGNyZWw6Ci0gICAgICAgIHJlc3VsdCArPSBz
dGFydEFkZHI7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIHVuc3VwcG9ydGVkIG9yIHVua25vd24gcG9pbnRlciBl
bmNvZGluZwotICAgIH0KLQotICAgIGlmIChlbmNvZGluZyAmIERXX0VIX1BFX2luZGlyZWN0KQot
ICAgICAgICByZXN1bHQgPSBnZXRQKHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci0vLyBJbmZvcm1hdGlvbiBlbmNvZGVkIGluIGEgQ0lFIChDb21tb24gSW5mb3JtYXRpb24gRW50
cnkpCi1zdHJ1Y3QgQ0lFX0luZm8gewotICAgIHVpbnRwdHJfdCBjaWVTdGFydDsKLSAgICB1aW50
cHRyX3QgY2llTGVuZ3RoOwotICAgIHVpbnRwdHJfdCBjaWVJbnN0cnVjdGlvbnM7Ci0gICAgdWlu
dDhfdCBwb2ludGVyRW5jb2Rpbmc7Ci0gICAgdWludDhfdCBsc2RhRW5jb2Rpbmc7Ci0gICAgdWlu
dDhfdCBwZXJzb25hbGl0eUVuY29kaW5nOwotICAgIHVpbnQ4X3QgcGVyc29uYWxpdHlPZmZzZXRJ
bkNJRTsKLSAgICB1aW50cHRyX3QgcGVyc29uYWxpdHk7Ci0gICAgaW50IGRhdGFBbGlnbkZhY3Rv
cjsKLSAgICBib29sIGZkZXNIYXZlQXVnbWVudGF0aW9uRGF0YTsKLX07Ci0KLS8vIEluZm9ybWF0
aW9uIGFib3V0IGFuIEZERSAoRnJhbWUgRGVzY3JpcHRpb24gRW50cnkpCi1zdHJ1Y3QgRkRFX0lu
Zm8gewotICAgIHVpbnRwdHJfdCBmZGVTdGFydDsKLSAgICB1aW50cHRyX3QgZmRlTGVuZ3RoOwot
ICAgIHVpbnRwdHJfdCBmZGVJbnN0cnVjdGlvbnM7Ci0gICAgdWludHB0cl90IGxzZGE7Ci19Owot
Ci0vLyBJbmZvcm1hdGlvbiBhYm91dCBhIGZyYW1lIGxheW91dCBhbmQgcmVnaXN0ZXJzIHNhdmVk
IGRldGVybWluZWQKLS8vIGJ5ICJydW5uaW5nIiB0aGUgZHdhcmYgRkRFICJpbnN0cnVjdGlvbnMi
Ci0jaWYgQ1BVKEFSTTY0KQotZW51bSB7IE1heFJlZ2lzdGVyTnVtYmVyID0gMTIwIH07Ci0jZWxp
ZiBDUFUoWDg2XzY0KQotZW51bSB7IE1heFJlZ2lzdGVyTnVtYmVyID0gMTcgfTsKLSNlbHNlCi0j
ZXJyb3IgIlVucmVjb2duaXplZCBhcmNoaXRlY3R1cmUiCi0jZW5kaWYKLQotc3RydWN0IFJlZ2lz
dGVyTG9jYXRpb24gewotICAgIGJvb2wgc2F2ZWQ7Ci0gICAgaW50NjRfdCBvZmZzZXQ7Ci19Owot
Ci1zdHJ1Y3QgUHJvbG9nSW5mbyB7Ci0gICAgdWludDMyX3QgY2ZhUmVnaXN0ZXI7Ci0gICAgaW50
MzJfdCBjZmFSZWdpc3Rlck9mZnNldDsgLy8gQ0ZBID0gKGNmYVJlZ2lzdGVyKStjZmFSZWdpc3Rl
ck9mZnNldAotICAgIFJlZ2lzdGVyTG9jYXRpb24gc2F2ZWRSZWdpc3RlcnNbTWF4UmVnaXN0ZXJO
dW1iZXJdOyAvLyBmcm9tIHdoZXJlIHRvIHJlc3RvcmUgcmVnaXN0ZXJzCi19OwotCi1zdGF0aWMg
dm9pZCBwYXJzZUNJRSh1aW50cHRyX3QgY2llLCBDSUVfSW5mbyogY2llSW5mbykKLXsKLSAgICBj
aWVJbmZvLT5wb2ludGVyRW5jb2RpbmcgPSAwOwotICAgIGNpZUluZm8tPmxzZGFFbmNvZGluZyA9
IDA7Ci0gICAgY2llSW5mby0+cGVyc29uYWxpdHlFbmNvZGluZyA9IDA7Ci0gICAgY2llSW5mby0+
cGVyc29uYWxpdHlPZmZzZXRJbkNJRSA9IDA7Ci0gICAgY2llSW5mby0+cGVyc29uYWxpdHkgPSAw
OwotICAgIGNpZUluZm8tPmRhdGFBbGlnbkZhY3RvciA9IDA7Ci0gICAgY2llSW5mby0+ZmRlc0hh
dmVBdWdtZW50YXRpb25EYXRhID0gZmFsc2U7Ci0gICAgY2llSW5mby0+Y2llU3RhcnQgPSBjaWU7
Ci0KLSAgICB1aW50cHRyX3QgcCA9IGNpZTsKLSAgICB1aW50NjRfdCBjaWVMZW5ndGggPSBnZXQz
MihwKTsKLSAgICBwICs9IDQ7Ci0gICAgdWludHB0cl90IGNpZUNvbnRlbnRFbmQgPSBwICsgY2ll
TGVuZ3RoOwotICAgIGlmIChjaWVMZW5ndGggPT0gMHhmZmZmZmZmZikgewotICAgICAgICAvLyAw
eGZmZmZmZmZmIG1lYW5zIGxlbmd0aCBpcyByZWFsbHkgbmV4dCA4IGJ5dGVzCi0gICAgICAgIGNp
ZUxlbmd0aCA9IGdldDY0KHApOwotICAgICAgICBwICs9IDg7Ci0gICAgICAgIGNpZUNvbnRlbnRF
bmQgPSBwICsgY2llTGVuZ3RoOwotICAgIH0KLQotICAgIFJFTEVBU0VfQVNTRVJUKGNpZUxlbmd0
aCk7Ci0KLSAgICAvLyBDSUUgSUQgaXMgYWx3YXlzIDAKLSAgICBSRUxFQVNFX0FTU0VSVCghZ2V0
MzIocCkpOyAvLyBDSUUgSUQgaXMgbm90IHplcm8KLSAgICBwICs9IDQ7Ci0gICAgLy8gVmVyc2lv
biBpcyBhbHdheXMgMSBvciAzCi0gICAgdWludDhfdCB2ZXJzaW9uID0gZ2V0OChwKTsKLSAgICBS
RUxFQVNFX0FTU0VSVCgodmVyc2lvbiA9PSAxKSB8fCAodmVyc2lvbiA9PSAzKSk7IC8vIENJRSB2
ZXJzaW9uIGlzIG5vdCAxIG9yIDMKLQotICAgICsrcDsKLSAgICAvLyBzYXZlIHN0YXJ0IG9mIGF1
Z21lbnRhdGlvbiBzdHJpbmcgYW5kIGZpbmQgZW5kCi0gICAgdWludHB0cl90IHN0clN0YXJ0ID0g
cDsKLSAgICB3aGlsZSAoZ2V0OChwKSkKLSAgICAgICAgKytwOwotICAgICsrcDsKLSAgICAvLyBw
YXJzZSBjb2RlIGFsaWdtZW50IGZhY3RvcgotICAgIGdldFVMRUIxMjgocCwgY2llQ29udGVudEVu
ZCk7Ci0gICAgLy8gcGFyc2UgZGF0YSBhbGlnbm1lbnQgZmFjdG9yCi0gICAgY2llSW5mby0+ZGF0
YUFsaWduRmFjdG9yID0gZ2V0U0xFQjEyOChwLCBjaWVDb250ZW50RW5kKTsKLSAgICAvLyBwYXJz
ZSByZXR1cm4gYWRkcmVzcyByZWdpc3RlcgotICAgIGdldFVMRUIxMjgocCwgY2llQ29udGVudEVu
ZCk7Ci0gICAgLy8gcGFyc2UgYXVnbWVudGF0aW9uIGRhdGEgYmFzZWQgb24gYXVnbWVudGF0aW9u
IHN0cmluZwotICAgIGlmIChnZXQ4KHN0clN0YXJ0KSA9PSAneicpIHsKLSAgICAgICAgLy8gcGFy
c2UgYXVnbWVudGF0aW9uIGRhdGEgbGVuZ3RoCi0gICAgICAgIGdldFVMRUIxMjgocCwgY2llQ29u
dGVudEVuZCk7Ci0gICAgICAgIGZvciAodWludHB0cl90IHMgPSBzdHJTdGFydDsgZ2V0OChzKSAh
PSAnXDAnOyArK3MpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoZ2V0OChzKSkgewotICAgICAgICAg
ICAgY2FzZSAneic6Ci0gICAgICAgICAgICAgICAgY2llSW5mby0+ZmRlc0hhdmVBdWdtZW50YXRp
b25EYXRhID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
J1AnOiAvLyBGSVhNRTogc2hvdWxkIGFzc2VydCBvbiBwZXJzb25hbGl0eSAoanVzdCB0byBrZWVw
IGluIHN5bmMgd2l0aCB0aGUgQ1UgYmVoYXZpb3VyKQotICAgICAgICAgICAgICAgIGNpZUluZm8t
PnBlcnNvbmFsaXR5RW5jb2RpbmcgPSBnZXQ4KHApOwotICAgICAgICAgICAgICAgICsrcDsKLSAg
ICAgICAgICAgICAgICBjaWVJbmZvLT5wZXJzb25hbGl0eU9mZnNldEluQ0lFID0gcCAtIGNpZTsK
LSAgICAgICAgICAgICAgICBjaWVJbmZvLT5wZXJzb25hbGl0eSA9IGdldEVuY29kZWRQKHAsIGNp
ZUNvbnRlbnRFbmQsIGNpZUluZm8tPnBlcnNvbmFsaXR5RW5jb2RpbmcpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnTCc6IC8vIEZJWE1FOiBzaG91bGQgYXNzZXJ0
IG9uIExTREEgKGp1c3QgdG8ga2VlcCBpbiBzeW5jIHdpdGggdGhlIENVIGJlaGF2aW91cikKLSAg
ICAgICAgICAgICAgICBjaWVJbmZvLT5sc2RhRW5jb2RpbmcgPSBnZXQ4KHApOwotICAgICAgICAg
ICAgICAgICsrcDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ1In
OgotICAgICAgICAgICAgICAgIGNpZUluZm8tPnBvaW50ZXJFbmNvZGluZyA9IGdldDgocCk7Ci0g
ICAgICAgICAgICAgICAgKytwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAvLyBpZ25vcmUgdW5rbm93biBsZXR0ZXJzCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Y2llSW5mby0+Y2llTGVuZ3RoID0gY2llQ29udGVudEVuZCAtIGNpZUluZm8tPmNpZVN0YXJ0Owot
ICAgIGNpZUluZm8tPmNpZUluc3RydWN0aW9ucyA9IHA7Ci19Ci0KLXN0YXRpYyB2b2lkIGZpbmRG
REUodWludHB0cl90IHBjLCB1aW50cHRyX3QgZWhTZWN0aW9uU3RhcnQsIHVpbnQzMl90IHNlY3Rp
b25MZW5ndGgsIEZERV9JbmZvKiBmZGVJbmZvLCBDSUVfSW5mbyogY2llSW5mbykKLXsKLSAgICB1
aW50cHRyX3QgcCA9IGVoU2VjdGlvblN0YXJ0OwotICAgIGNvbnN0IHVpbnRwdHJfdCBlaFNlY3Rp
b25FbmQgPSBwICsgc2VjdGlvbkxlbmd0aDsKLSAgICB3aGlsZSAocCA8IGVoU2VjdGlvbkVuZCkg
ewotICAgICAgICB1aW50cHRyX3QgY3VycmVudENGSSA9IHA7Ci0gICAgICAgIHVpbnQ2NF90IGNm
aUxlbmd0aCA9IGdldDMyKHApOwotICAgICAgICBwICs9IDQ7Ci0gICAgICAgIGlmIChjZmlMZW5n
dGggPT0gMHhmZmZmZmZmZikgewotICAgICAgICAgICAgLy8gMHhmZmZmZmZmZiBtZWFucyBsZW5n
dGggaXMgcmVhbGx5IG5leHQgOCBieXRlcwotICAgICAgICAgICAgY2ZpTGVuZ3RoID0gZ2V0NjQo
cCk7Ci0gICAgICAgICAgICBwICs9IDg7Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY2ZpTGVuZ3RoKTsgLy8gZW5kIG1hcmtlciByZWFjaGVkIGJlZm9yZSBmaW5kaW5nIEZERSBm
b3IgcGMKLQotICAgICAgICB1aW50MzJfdCBpZCA9IGdldDMyKHApOwotICAgICAgICBpZiAoIWlk
KSB7Ci0gICAgICAgICAgICAvLyBza2lwIG92ZXIgQ0lFcwotICAgICAgICAgICAgcCArPSBjZmlM
ZW5ndGg7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBwcm9jZXNzIEZERSB0byBz
ZWUgaWYgaXQgY292ZXJzIHBjCi0gICAgICAgICAgICB1aW50cHRyX3QgbmV4dENGSSA9IHAgKyBj
ZmlMZW5ndGg7Ci0gICAgICAgICAgICB1aW50MzJfdCBjaWVQb2ludGVyID0gZ2V0MzIocCk7Ci0g
ICAgICAgICAgICB1aW50cHRyX3QgY2llU3RhcnQgPSBwIC0gY2llUG9pbnRlcjsKLSAgICAgICAg
ICAgIC8vIHZhbGlkYXRlIHBvaW50ZXIgdG8gQ0lFIGlzIHdpdGhpbiBzZWN0aW9uCi0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCgoZWhTZWN0aW9uU3RhcnQgPD0gY2llU3RhcnQpICYmIChjaWVT
dGFydCA8IGVoU2VjdGlvbkVuZCkpOyAvLyBtYWxmb3JtZWQgRkRFLiBDSUUgaXMgYmFkCi0KLSAg
ICAgICAgICAgIHBhcnNlQ0lFKGNpZVN0YXJ0LCBjaWVJbmZvKTsKLQotICAgICAgICAgICAgcCAr
PSA0OwotICAgICAgICAgICAgLy8gcGFyc2UgcGMgYmVnaW4gYW5kIHJhbmdlCi0gICAgICAgICAg
ICB1aW50cHRyX3QgcGNTdGFydCA9IGdldEVuY29kZWRQKHAsIG5leHRDRkksIGNpZUluZm8tPnBv
aW50ZXJFbmNvZGluZyk7Ci0gICAgICAgICAgICB1aW50cHRyX3QgcGNSYW5nZSA9IGdldEVuY29k
ZWRQKHAsIG5leHRDRkksIGNpZUluZm8tPnBvaW50ZXJFbmNvZGluZyAmIDB4MEYpOwotCi0gICAg
ICAgICAgICAvLyB0ZXN0IGlmIHBjIGlzIHdpdGhpbiB0aGUgZnVuY3Rpb24gdGhpcyBGREUgY292
ZXJzCi0gICAgICAgICAgICAvLyBpZiBwYyBpcyBub3QgaW4gYmVnaW4vcmFuZ2UsIHNraXAgdGhp
cyBGREUKLSAgICAgICAgICAgIGlmICgocGNTdGFydCA8PSBwYykgJiYgKHBjIDwgcGNTdGFydCtw
Y1JhbmdlKSkgewotICAgICAgICAgICAgICAgIC8vIHBhcnNlIHJlc3Qgb2YgaW5mbwotICAgICAg
ICAgICAgICAgIGZkZUluZm8tPmxzZGEgPSAwOwotICAgICAgICAgICAgICAgIC8vIGNoZWNrIGZv
ciBhdWdtZW50YXRpb24gbGVuZ3RoCi0gICAgICAgICAgICAgICAgaWYgKGNpZUluZm8tPmZkZXNI
YXZlQXVnbWVudGF0aW9uRGF0YSkgewotICAgICAgICAgICAgICAgICAgICB1aW50cHRyX3QgYXVn
TGVuID0gZ2V0VUxFQjEyOChwLCBuZXh0Q0ZJKTsKLSAgICAgICAgICAgICAgICAgICAgdWludHB0
cl90IGVuZE9mQXVnID0gcCArIGF1Z0xlbjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNpZUlu
Zm8tPmxzZGFFbmNvZGluZykgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGVlayBhdCB2
YWx1ZSAod2l0aG91dCBpbmRpcmVjdGlvbikuIFplcm8gbWVhbnMgbm8gbHNkYQotICAgICAgICAg
ICAgICAgICAgICAgICAgdWludHB0cl90IGxzZGFTdGFydCA9IHA7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoZ2V0RW5jb2RlZFAocCwgbmV4dENGSSwgY2llSW5mby0+bHNkYUVuY29kaW5n
ICYgMHgwRikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNldCBwb2ludGVy
IGFuZCByZS1wYXJzZSBsc2RhIGFkZHJlc3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
ID0gbHNkYVN0YXJ0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkZUluZm8tPmxzZGEg
PSBnZXRFbmNvZGVkUChwLCBuZXh0Q0ZJLCBjaWVJbmZvLT5sc2RhRW5jb2RpbmcpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIHAgPSBlbmRPZkF1ZzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ZmRlSW5mby0+ZmRlU3RhcnQgPSBjdXJyZW50Q0ZJOwotICAgICAgICAgICAgICAgIGZkZUluZm8t
PmZkZUxlbmd0aCA9IG5leHRDRkkgLSBjdXJyZW50Q0ZJOwotICAgICAgICAgICAgICAgIGZkZUlu
Zm8tPmZkZUluc3RydWN0aW9ucyA9IHA7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm47IC8vIEZE
RSBmb3VuZAotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwID0gbmV4dENGSTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIG5vIEZE
RSBmb3VuZCBmb3IgcGMKLX0KLQotc3RhdGljIHZvaWQgZXhlY3V0ZURlZkNGQVJlZ2lzdGVyKHVp
bnQ2NF90IHJlZywgUHJvbG9nSW5mbyogcmVzdWx0cykKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChy
ZWcgPD0gTWF4UmVnaXN0ZXJOdW1iZXIpOyAvLyByZWcgdG9vIGJpZwotICAgIHJlc3VsdHMtPmNm
YVJlZ2lzdGVyID0gcmVnOwotfQotCi1zdGF0aWMgdm9pZCBleGVjdXRlRGVmQ0ZBT2Zmc2V0KGlu
dDY0X3Qgb2Zmc2V0LCBQcm9sb2dJbmZvKiByZXN1bHRzKQotewotICAgIFJFTEVBU0VfQVNTRVJU
KG9mZnNldCA8PSAweDgwMDAwMDAwKTsgLy8gY2ZhIGhhcyBuZWdhdGl2ZSBvZmZzZXQgKGR3YXJm
IG1pZ2h0IGNvbnRhaW4gZXBpbG9nKQotICAgIHJlc3VsdHMtPmNmYVJlZ2lzdGVyT2Zmc2V0ID0g
b2Zmc2V0OwotfQotCi1zdGF0aWMgdm9pZCBleGVjdXRlT2Zmc2V0KHVpbnQ2NF90IHJlZywgaW50
NjRfdCBvZmZzZXQsIFByb2xvZ0luZm8gKnJlc3VsdHMpCi17Ci0gICAgaWYgKHJlZyA+IE1heFJl
Z2lzdGVyTnVtYmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSRUxFQVNFX0FTU0VSVCghcmVz
dWx0cy0+c2F2ZWRSZWdpc3RlcnNbcmVnXS5zYXZlZCk7Ci0gICAgcmVzdWx0cy0+c2F2ZWRSZWdp
c3RlcnNbcmVnXS5zYXZlZCA9IHRydWU7Ci0gICAgcmVzdWx0cy0+c2F2ZWRSZWdpc3RlcnNbcmVn
XS5vZmZzZXQgPSBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhcnNlSW5zdHJ1Y3Rpb25zKHVp
bnRwdHJfdCBpbnN0cnVjdGlvbnMsIHVpbnRwdHJfdCBpbnN0cnVjdGlvbnNFbmQsIGNvbnN0IENJ
RV9JbmZvJiBjaWVJbmZvLCBQcm9sb2dJbmZvKiByZXN1bHRzKQotewotICAgIHVpbnRwdHJfdCBw
ID0gaW5zdHJ1Y3Rpb25zOwotCi0gICAgLy8gc2VlIER3YXJmIFNwZWMsIHNlY3Rpb24gNi40LjIg
Zm9yIGRldGFpbHMgb24gdW53aW5kIG9wY29kZXMKLSAgICB3aGlsZSAoKHAgPCBpbnN0cnVjdGlv
bnNFbmQpKSB7Ci0gICAgICAgIHVpbnQ2NF90IHJlZzsKLSAgICAgICAgdWludDhfdCBvcGNvZGUg
PSBnZXQ4KHApOwotICAgICAgICB1aW50OF90IG9wZXJhbmQ7Ci0gICAgICAgICsrcDsKLSAgICAg
ICAgc3dpdGNoIChvcGNvZGUpIHsKLSAgICAgICAgY2FzZSBEV19DRkFfbm9wOgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRFdfQ0ZBX3NldF9sb2M6Ci0gICAgICAgICAgICBnZXRF
bmNvZGVkUChwLCBpbnN0cnVjdGlvbnNFbmQsIGNpZUluZm8ucG9pbnRlckVuY29kaW5nKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERXX0NGQV9hZHZhbmNlX2xvYzE6Ci0gICAg
ICAgICAgICBwICs9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEV19DRkFf
YWR2YW5jZV9sb2MyOgotICAgICAgICAgICAgcCArPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRFdfQ0ZBX2FkdmFuY2VfbG9jNDoKLSAgICAgICAgICAgIHAgKz0gNDsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERXX0NGQV9kZWZfY2ZhOgotICAgICAgICAg
ICAgZXhlY3V0ZURlZkNGQVJlZ2lzdGVyKGdldFVMRUIxMjgocCwgaW5zdHJ1Y3Rpb25zRW5kKSwg
cmVzdWx0cyk7Ci0gICAgICAgICAgICBleGVjdXRlRGVmQ0ZBT2Zmc2V0KGdldFVMRUIxMjgocCwg
aW5zdHJ1Y3Rpb25zRW5kKSwgcmVzdWx0cyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBEV19DRkFfZGVmX2NmYV9zZjoKLSAgICAgICAgICAgIGV4ZWN1dGVEZWZDRkFSZWdpc3Rl
cihnZXRVTEVCMTI4KHAsIGluc3RydWN0aW9uc0VuZCksIHJlc3VsdHMpOwotICAgICAgICAgICAg
ZXhlY3V0ZURlZkNGQU9mZnNldChnZXRTTEVCMTI4KHAsIGluc3RydWN0aW9uc0VuZCkgKiBjaWVJ
bmZvLmRhdGFBbGlnbkZhY3RvciwgcmVzdWx0cyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBEV19DRkFfZGVmX2NmYV9yZWdpc3RlcjoKLSAgICAgICAgICAgIGV4ZWN1dGVEZWZD
RkFSZWdpc3RlcihnZXRVTEVCMTI4KHAsIGluc3RydWN0aW9uc0VuZCksIHJlc3VsdHMpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRFdfQ0ZBX2RlZl9jZmFfb2Zmc2V0OgotICAg
ICAgICAgICAgZXhlY3V0ZURlZkNGQU9mZnNldChnZXRVTEVCMTI4KHAsIGluc3RydWN0aW9uc0Vu
ZCksIHJlc3VsdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRFdfQ0ZBX2Rl
Zl9jZmFfb2Zmc2V0X3NmOgotICAgICAgICAgICAgZXhlY3V0ZURlZkNGQU9mZnNldChnZXRTTEVC
MTI4KHAsIGluc3RydWN0aW9uc0VuZCkgKiBjaWVJbmZvLmRhdGFBbGlnbkZhY3RvciwgcmVzdWx0
cyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEV19DRkFfb2Zmc2V0X2V4dGVu
ZGVkOgotICAgICAgICAgICAgcmVnID0gZ2V0VUxFQjEyOChwLCBpbnN0cnVjdGlvbnNFbmQpOwot
ICAgICAgICAgICAgZXhlY3V0ZU9mZnNldChyZWcsIGdldFVMRUIxMjgocCwgaW5zdHJ1Y3Rpb25z
RW5kKSAqIGNpZUluZm8uZGF0YUFsaWduRmFjdG9yLCByZXN1bHRzKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIERXX0NGQV9vZmZzZXRfZXh0ZW5kZWRfc2Y6Ci0gICAgICAgICAg
ICByZWcgPSBnZXRVTEVCMTI4KHAsIGluc3RydWN0aW9uc0VuZCk7Ci0gICAgICAgICAgICBleGVj
dXRlT2Zmc2V0KHJlZywgZ2V0U0xFQjEyOChwLCBpbnN0cnVjdGlvbnNFbmQpICogY2llSW5mby5k
YXRhQWxpZ25GYWN0b3IsIHJlc3VsdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBvcGVyYW5kID0gb3Bjb2RlICYgRFdfQ0ZBX29wZXJhbmRfbWFz
azsKLSAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlICYgfkRXX0NGQV9vcGVyYW5kX21hc2spIHsK
LSAgICAgICAgICAgIGNhc2UgRFdfQ0ZBX29mZnNldDoKLSAgICAgICAgICAgICAgICBleGVjdXRl
T2Zmc2V0KG9wZXJhbmQsIGdldFVMRUIxMjgocCwgaW5zdHJ1Y3Rpb25zRW5kKSAqIGNpZUluZm8u
ZGF0YUFsaWduRmFjdG9yLCByZXN1bHRzKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgRFdfQ0ZBX2FkdmFuY2VfbG9jOgotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyAvLyB1bmtub3duIG9yIHVuc3VwcG9ydGVkIENGQSBvcGNvZGUKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgcGFyc2VGREVJbnN0cnVj
dGlvbnMoY29uc3QgRkRFX0luZm8mIGZkZUluZm8sIGNvbnN0IENJRV9JbmZvJiBjaWVJbmZvLCBQ
cm9sb2dJbmZvKiByZXN1bHRzKQotewotICAgIC8vIGNsZWFyIHJlc3VsdHMKLSAgICBiemVybyhy
ZXN1bHRzLCBzaXplb2YoUHJvbG9nSW5mbykpOwotCi0gICAgLy8gcGFyc2UgQ0lFIHRoZW4gRkRF
IGluc3RydWN0aW9ucwotICAgIHBhcnNlSW5zdHJ1Y3Rpb25zKGNpZUluZm8uY2llSW5zdHJ1Y3Rp
b25zLCBjaWVJbmZvLmNpZVN0YXJ0ICsgY2llSW5mby5jaWVMZW5ndGgsIGNpZUluZm8sIHJlc3Vs
dHMpOwotICAgIHBhcnNlSW5zdHJ1Y3Rpb25zKGZkZUluZm8uZmRlSW5zdHJ1Y3Rpb25zLCBmZGVJ
bmZvLmZkZVN0YXJ0ICsgZmRlSW5mby5mZGVMZW5ndGgsIGNpZUluZm8sIHJlc3VsdHMpOwotfQot
I2VuZGlmCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotc3RkOjp1bmlxdWVfcHRyPFJlZ2lz
dGVyQXRPZmZzZXRMaXN0PiBwYXJzZVVud2luZEluZm8odm9pZCogc2VjdGlvbiwgc2l6ZV90IHNp
emUsIEdlbmVyYXRlZEZ1bmN0aW9uIGdlbmVyYXRlZEZ1bmN0aW9uKQotewotICAgIFJFTEVBU0Vf
QVNTRVJUKCEhc2VjdGlvbik7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVnaXN0ZXJBdE9mZnNl
dExpc3Q+IHJlZ2lzdGVyT2Zmc2V0cyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVnaXN0ZXJBdE9mZnNl
dExpc3Q+KCk7Ci0KLSNpZiBPUyhEQVJXSU4pCi0gICAgUkVMRUFTRV9BU1NFUlQoc2l6ZSA+PSBz
aXplb2YoQ29tcGFjdFVud2luZCkpOwotICAgIAotICAgIENvbXBhY3RVbndpbmQqIGRhdGEgPSBi
aXR3aXNlX2Nhc3Q8Q29tcGFjdFVud2luZCo+KHNlY3Rpb24pOwotICAgIAotICAgIFJFTEVBU0Vf
QVNTRVJUKCFkYXRhLT5wZXJzb25hbGl0eSk7IC8vIFdlIGRvbid0IGtub3cgaG93IHRvIGhhbmRs
ZSB0aGlzLgotICAgIFJFTEVBU0VfQVNTRVJUKCFkYXRhLT5sc2RhKTsgLy8gV2UgZG9uJ3Qga25v
dyBob3cgdG8gaGFuZGxlIHRoaXMuCi0gICAgUkVMRUFTRV9BU1NFUlQoZGF0YS0+ZnVuY3Rpb24g
PT0gZ2VuZXJhdGVkRnVuY3Rpb24pOyAvLyBUaGUgdW53aW5kIGRhdGEgYmV0dGVyIGJlIGZvciBv
dXIgZnVuY3Rpb24uCi0gICAgCi0gICAgY29tcGFjdF91bndpbmRfZW5jb2RpbmdfdCBlbmNvZGlu
ZyA9IGRhdGEtPmVuY29kaW5nOwotICAgIFJFTEVBU0VfQVNTRVJUKCEoZW5jb2RpbmcgJiBVTldJ
TkRfSVNfTk9UX0ZVTkNUSU9OX1NUQVJUKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIShlbmNvZGlu
ZyAmIFVOV0lORF9IQVNfTFNEQSkpOwotICAgIFJFTEVBU0VfQVNTRVJUKCEoZW5jb2RpbmcgJiBV
TldJTkRfUEVSU09OQUxJVFlfTUFTSykpOwotCi0jaWYgQ1BVKFg4Nl82NCkKLSAgICBSRUxFQVNF
X0FTU0VSVCgoZW5jb2RpbmcgJiBVTldJTkRfWDg2XzY0X01PREVfTUFTSykgPT0gVU5XSU5EX1g4
Nl82NF9NT0RFX1JCUF9GUkFNRSk7Ci0gICAgCi0gICAgaW50MzJfdCBvZmZzZXQgPSAtKChlbmNv
ZGluZyAmIFVOV0lORF9YODZfNjRfUkJQX0ZSQU1FX09GRlNFVCkgPj4gMTYpICogODsKLSAgICB1
aW50MzJfdCBuZXh0UmVnaXN0ZXJzID0gZW5jb2Rpbmc7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
NTsgaS0tOykgewotICAgICAgICB1aW50MzJfdCBjdXJyZW50UmVnaXN0ZXIgPSBuZXh0UmVnaXN0
ZXJzICYgNzsKLSAgICAgICAgbmV4dFJlZ2lzdGVycyA+Pj0gMzsKLSAgICAgICAgCi0gICAgICAg
IHN3aXRjaCAoY3VycmVudFJlZ2lzdGVyKSB7Ci0gICAgICAgIGNhc2UgVU5XSU5EX1g4Nl82NF9S
RUdfTk9ORToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
VU5XSU5EX1g4Nl82NF9SRUdfUkJYOgotICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBl
bmQoUmVnaXN0ZXJBdE9mZnNldChYODZSZWdpc3RlcnM6OmVieCwgb2Zmc2V0KSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFVOV0lORF9YODZfNjRfUkVH
X1IxMjoKLSAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZz
ZXQoWDg2UmVnaXN0ZXJzOjpyMTIsIG9mZnNldCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBVTldJTkRfWDg2XzY0X1JFR19SMTM6Ci0gICAgICAgICAg
ICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KFg4NlJlZ2lzdGVyczo6
cjEzLCBvZmZzZXQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgVU5XSU5EX1g4Nl82NF9SRUdfUjE0OgotICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRz
LT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChYODZSZWdpc3RlcnM6OnIxNCwgb2Zmc2V0KSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFVOV0lORF9YODZf
NjRfUkVHX1IxNToKLSAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVy
QXRPZmZzZXQoWDg2UmVnaXN0ZXJzOjpyMTUsIG9mZnNldCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBVTldJTkRfWDg2XzY0X1JFR19SQlA6Ci0gICAg
ICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KFg4NlJlZ2lz
dGVyczo6ZWJwLCBvZmZzZXQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBvZmZzZXQgKz0gODsKLSAgICB9Ci0jZWxp
ZiBDUFUoQVJNNjQpCi0gICAgUkVMRUFTRV9BU1NFUlQoKGVuY29kaW5nICYgVU5XSU5EX0FSTTY0
X01PREVfTUFTSykgPT0gVU5XSU5EX0FSTTY0X01PREVfRlJBTUUpOwotICAgIAotICAgIHJlZ2lz
dGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OmZwLCAw
KSk7Ci0gICAgCi0gICAgaW50MzJfdCBvZmZzZXQgPSAwOwotICAgIGlmIChlbmNvZGluZyAmIFVO
V0lORF9BUk02NF9GUkFNRV9YMTlfWDIwX1BBSVIpIHsKLSAgICAgICAgcmVnaXN0ZXJPZmZzZXRz
LT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDE5LCBvZmZzZXQgLT0g
OCkpOwotICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KEFS
TTY0UmVnaXN0ZXJzOjp4MjAsIG9mZnNldCAtPSA4KSk7Ci0gICAgfQotICAgIGlmIChlbmNvZGlu
ZyAmIFVOV0lORF9BUk02NF9GUkFNRV9YMjFfWDIyX1BBSVIpIHsKLSAgICAgICAgcmVnaXN0ZXJP
ZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDIxLCBvZmZz
ZXQgLT0gOCkpOwotICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zm
c2V0KEFSTTY0UmVnaXN0ZXJzOjp4MjIsIG9mZnNldCAtPSA4KSk7Ci0gICAgfQotICAgIGlmIChl
bmNvZGluZyAmIFVOV0lORF9BUk02NF9GUkFNRV9YMjNfWDI0X1BBSVIpIHsKLSAgICAgICAgcmVn
aXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDIz
LCBvZmZzZXQgLT0gOCkpOwotICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3Rl
ckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjp4MjQsIG9mZnNldCAtPSA4KSk7Ci0gICAgfQotICAg
IGlmIChlbmNvZGluZyAmIFVOV0lORF9BUk02NF9GUkFNRV9YMjVfWDI2X1BBSVIpIHsKLSAgICAg
ICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVy
czo6eDI1LCBvZmZzZXQgLT0gOCkpOwotICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChS
ZWdpc3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjp4MjYsIG9mZnNldCAtPSA4KSk7Ci0gICAg
fQotICAgIGlmIChlbmNvZGluZyAmIFVOV0lORF9BUk02NF9GUkFNRV9YMjdfWDI4X1BBSVIpIHsK
LSAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJl
Z2lzdGVyczo6eDI3LCBvZmZzZXQgLT0gOCkpOwotICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFw
cGVuZChSZWdpc3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjp4MjgsIG9mZnNldCAtPSA4KSk7
Ci0gICAgfQotICAgIGlmIChlbmNvZGluZyAmIFVOV0lORF9BUk02NF9GUkFNRV9EOF9EOV9QQUlS
KSB7Ci0gICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJN
NjRSZWdpc3RlcnM6OnE4LCBvZmZzZXQgLT0gOCkpOwotICAgICAgICByZWdpc3Rlck9mZnNldHMt
PmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjpxOSwgb2Zmc2V0IC09IDgp
KTsKLSAgICB9Ci0gICAgaWYgKGVuY29kaW5nICYgVU5XSU5EX0FSTTY0X0ZSQU1FX0QxMF9EMTFf
UEFJUikgewotICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0
KEFSTTY0UmVnaXN0ZXJzOjpxMTAsIG9mZnNldCAtPSA4KSk7Ci0gICAgICAgIHJlZ2lzdGVyT2Zm
c2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OnExMSwgb2Zmc2V0
IC09IDgpKTsKLSAgICB9Ci0gICAgaWYgKGVuY29kaW5nICYgVU5XSU5EX0FSTTY0X0ZSQU1FX0Qx
Ml9EMTNfUEFJUikgewotICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0
T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjpxMTIsIG9mZnNldCAtPSA4KSk7Ci0gICAgICAgIHJlZ2lz
dGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OnExMywg
b2Zmc2V0IC09IDgpKTsKLSAgICB9Ci0gICAgaWYgKGVuY29kaW5nICYgVU5XSU5EX0FSTTY0X0ZS
QU1FX0QxNF9EMTVfUEFJUikgewotICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdp
c3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjpxMTQsIG9mZnNldCAtPSA4KSk7Ci0gICAgICAg
IHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6
OnExNSwgb2Zmc2V0IC09IDgpKTsKLSAgICB9Ci0jZWxzZQotI2Vycm9yICJVbnJlY29nbml6ZWQg
YXJjaGl0ZWN0dXJlIgotI2VuZGlmCi0KLSNlbGlmIE9TKExJTlVYKQotICAgIEZERV9JbmZvIGZk
ZUluZm87Ci0gICAgQ0lFX0luZm8gY2llSW5mbzsKLSAgICBQcm9sb2dJbmZvIHByb2xvZzsKLQot
ICAgIGZpbmRGREUoKHVpbnRwdHJfdClnZW5lcmF0ZWRGdW5jdGlvbiwgKHVpbnRwdHJfdClzZWN0
aW9uLCBzaXplLCAmZmRlSW5mbywgJmNpZUluZm8pOwotICAgIHBhcnNlRkRFSW5zdHJ1Y3Rpb25z
KGZkZUluZm8sIGNpZUluZm8sICZwcm9sb2cpOwotCi0jaWYgQ1BVKFg4Nl82NCkKLSAgICBSRUxF
QVNFX0FTU0VSVChwcm9sb2cuY2ZhUmVnaXN0ZXIgPT0gVU5XX1g4Nl82NF9yYnApOwotICAgIFJF
TEVBU0VfQVNTRVJUKHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCA9PSAxNik7Ci0gICAgUkVMRUFT
RV9BU1NFUlQocHJvbG9nLnNhdmVkUmVnaXN0ZXJzW1VOV19YODZfNjRfcmJwXS5zYXZlZCk7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQocHJvbG9nLnNhdmVkUmVnaXN0ZXJzW1VOV19YODZfNjRfcmJwXS5v
ZmZzZXQgPT0gLXByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCk7Ci0KLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IE1heFJlZ2lzdGVyTnVtYmVyOyArK2kpIHsKLSAgICAgICAgaWYgKHByb2xvZy5zYXZl
ZFJlZ2lzdGVyc1tpXS5zYXZlZCkgewotICAgICAgICAgICAgc3dpdGNoIChpKSB7Ci0gICAgICAg
ICAgICBjYXNlIFVOV19YODZfNjRfcmJ4OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0
cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoWDg2UmVnaXN0ZXJzOjplYngsIHByb2xvZy5zYXZl
ZFJlZ2lzdGVyc1tpXS5vZmZzZXQgKyBwcm9sb2cuY2ZhUmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVU5XX1g4Nl82NF9yMTI6Ci0gICAg
ICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChYODZS
ZWdpc3RlcnM6OnIxMiwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5j
ZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBVTldfWDg2XzY0X3IxMzoKLSAgICAgICAgICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFw
cGVuZChSZWdpc3RlckF0T2Zmc2V0KFg4NlJlZ2lzdGVyczo6cjEzLCBwcm9sb2cuc2F2ZWRSZWdp
c3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19YODZfNjRfcjE0OgotICAgICAgICAg
ICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoWDg2UmVnaXN0
ZXJzOjpyMTQsIHByb2xvZy5zYXZlZFJlZ2lzdGVyc1tpXS5vZmZzZXQgKyBwcm9sb2cuY2ZhUmVn
aXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
VU5XX1g4Nl82NF9yMTU6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQo
UmVnaXN0ZXJBdE9mZnNldChYODZSZWdpc3RlcnM6OnIxNSwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJz
W2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfWDg2XzY0X3JicDoKLSAgICAgICAgICAgICAg
ICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KFg4NlJlZ2lzdGVyczo6
ZWJwLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVy
T2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERXX1g4
Nl82NF9SRVRfYWRkcjoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gbm9u
LXN0YW5kYXJkIHJlZ2lzdGVyIGJlaW5nIHNhdmVkIGluIHByb2xvZwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotI2VsaWYgQ1BVKEFSTTY0KQotICAgIFJFTEVBU0VfQVNTRVJUKHBy
b2xvZy5jZmFSZWdpc3RlciA9PSBVTldfQVJNNjRfZnApOwotICAgIFJFTEVBU0VfQVNTRVJUKHBy
b2xvZy5jZmFSZWdpc3Rlck9mZnNldCA9PSAxNik7Ci0gICAgUkVMRUFTRV9BU1NFUlQocHJvbG9n
LnNhdmVkUmVnaXN0ZXJzW1VOV19BUk02NF9mcF0uc2F2ZWQpOwotICAgIFJFTEVBU0VfQVNTRVJU
KHByb2xvZy5zYXZlZFJlZ2lzdGVyc1tVTldfQVJNNjRfZnBdLm9mZnNldCA9PSAtcHJvbG9nLmNm
YVJlZ2lzdGVyT2Zmc2V0KTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTWF4UmVnaXN0ZXJO
dW1iZXI7ICsraSkgewotICAgICAgICBpZiAocHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLnNhdmVk
KSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGkpIHsKLSAgICAgICAgICAgIGNhc2UgVU5XX0FSTTY0
X3gwOgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRP
ZmZzZXQoQVJNNjRSZWdpc3RlcnM6OngwLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0
ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIFVOV19BUk02NF94MToKLSAgICAgICAgICAgICAgICByZWdpc3Rlck9m
ZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjp4MSwgcHJvbG9n
LnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfeDI6Ci0g
ICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChB
Uk02NFJlZ2lzdGVyczo6eDIsIHByb2xvZy5zYXZlZFJlZ2lzdGVyc1tpXS5vZmZzZXQgKyBwcm9s
b2cuY2ZhUmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgVU5XX0FSTTY0X3gzOgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+
YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OngzLCBwcm9sb2cuc2F2ZWRS
ZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF94NDoKLSAgICAgICAg
ICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KEFSTTY0UmVn
aXN0ZXJzOjp4NCwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFS
ZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBVTldfQVJNNjRfeDU6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQo
UmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDUsIHByb2xvZy5zYXZlZFJlZ2lzdGVy
c1tpXS5vZmZzZXQgKyBwcm9sb2cuY2ZhUmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVU5XX0FSTTY0X3g2OgotICAgICAgICAgICAgICAg
IHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6
Ong2LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVy
T2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19B
Uk02NF94NzoKLSAgICAgICAgICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3Rl
ckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjp4NywgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9m
ZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfeDg6Ci0gICAgICAgICAgICAgICAgcmVnaXN0
ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDgsIHBy
b2xvZy5zYXZlZFJlZ2lzdGVyc1tpXS5vZmZzZXQgKyBwcm9sb2cuY2ZhUmVnaXN0ZXJPZmZzZXQp
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVU5XX0FSTTY0X3g5
OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZz
ZXQoQVJNNjRSZWdpc3RlcnM6Ong5LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsg
cHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIFVOV19BUk02NF94MTA6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZz
ZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDEwLCBwcm9sb2cu
c2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF94MTE6Ci0g
ICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChB
Uk02NFJlZ2lzdGVyczo6eDExLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJv
bG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIFVOV19BUk02NF94MTI6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRz
LT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDEyLCBwcm9sb2cuc2F2
ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF94MTM6Ci0gICAg
ICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02
NFJlZ2lzdGVyczo6eDEzLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9n
LmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIFVOV19BUk02NF94MTQ6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5h
cHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDE0LCBwcm9sb2cuc2F2ZWRS
ZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF94MTU6Ci0gICAgICAg
ICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJl
Z2lzdGVyczo6eDE1LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNm
YVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIFVOV19BUk02NF94MTY6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBl
bmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDE2LCBwcm9sb2cuc2F2ZWRSZWdp
c3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF94MTc6Ci0gICAgICAgICAg
ICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lz
dGVyczo6eDE3LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJl
Z2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IFVOV19BUk02NF94MTg6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQo
UmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDE4LCBwcm9sb2cuc2F2ZWRSZWdpc3Rl
cnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF94MTk6Ci0gICAgICAgICAgICAg
ICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVy
czo6eDE5LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lz
dGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVO
V19BUk02NF94MjA6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVn
aXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDIwLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNb
aV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF94MjE6Ci0gICAgICAgICAgICAgICAg
cmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6
eDIxLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVy
T2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19B
Uk02NF94MjI6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0
ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDIyLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0u
b2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF94MjM6Ci0gICAgICAgICAgICAgICAgcmVn
aXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDIz
LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zm
c2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02
NF94MjQ6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJB
dE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDI0LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zm
c2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF94MjU6Ci0gICAgICAgICAgICAgICAgcmVnaXN0
ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDI1LCBw
cm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0
KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF94
MjY6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9m
ZnNldChBUk02NFJlZ2lzdGVyczo6eDI2LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0
ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIFVOV19BUk02NF94Mjc6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJP
ZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDI3LCBwcm9s
b2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF94Mjg6
Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNl
dChBUk02NFJlZ2lzdGVyczo6eDI4LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsg
cHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIFVOV19BUk02NF9mcDoKLSAgICAgICAgICAgICAgICByZWdpc3Rlck9mZnNl
dHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjpmcCwgcHJvbG9nLnNh
dmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfeDMwOgotICAg
ICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJN
NjRSZWdpc3RlcnM6OngzMCwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xv
Zy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBVTldfQVJNNjRfc3A6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5h
cHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6c3AsIHByb2xvZy5zYXZlZFJl
Z2lzdGVyc1tpXS5vZmZzZXQgKyBwcm9sb2cuY2ZhUmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVU5XX0FSTTY0X3YwOgotICAgICAgICAg
ICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdp
c3RlcnM6OnEwLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJl
Z2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IFVOV19BUk02NF92MToKLSAgICAgICAgICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChS
ZWdpc3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjpxMSwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJz
W2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfdjI6Ci0gICAgICAgICAgICAgICAg
cmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6
cTIsIHByb2xvZy5zYXZlZFJlZ2lzdGVyc1tpXS5vZmZzZXQgKyBwcm9sb2cuY2ZhUmVnaXN0ZXJP
ZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVU5XX0FS
TTY0X3YzOgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVy
QXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OnEzLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zm
c2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92NDoKLSAgICAgICAgICAgICAgICByZWdpc3Rl
ck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjpxNCwgcHJv
bG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfdjU6
Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNl
dChBUk02NFJlZ2lzdGVyczo6cTUsIHByb2xvZy5zYXZlZFJlZ2lzdGVyc1tpXS5vZmZzZXQgKyBw
cm9sb2cuY2ZhUmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgVU5XX0FSTTY0X3Y2OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0
cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OnE2LCBwcm9sb2cuc2F2
ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92NzoKLSAgICAg
ICAgICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KEFSTTY0
UmVnaXN0ZXJzOjpxNywgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5j
ZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBVTldfQVJNNjRfdjg6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBl
bmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTgsIHByb2xvZy5zYXZlZFJlZ2lz
dGVyc1tpXS5vZmZzZXQgKyBwcm9sb2cuY2ZhUmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVU5XX0FSTTY0X3Y5OgotICAgICAgICAgICAg
ICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3Rl
cnM6OnE5LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lz
dGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVO
V19BUk02NF92MTA6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVn
aXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTEwLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNb
aV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92MTE6Ci0gICAgICAgICAgICAgICAg
cmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6
cTExLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVy
T2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19B
Uk02NF92MTI6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0
ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTEyLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0u
b2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92MTM6Ci0gICAgICAgICAgICAgICAgcmVn
aXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTEz
LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zm
c2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02
NF92MTQ6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJB
dE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTE0LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zm
c2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92MTU6Ci0gICAgICAgICAgICAgICAgcmVnaXN0
ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTE1LCBw
cm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0
KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92
MTY6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9m
ZnNldChBUk02NFJlZ2lzdGVyczo6cTE2LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0
ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIFVOV19BUk02NF92MTc6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJP
ZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTE3LCBwcm9s
b2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92MTg6
Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNl
dChBUk02NFJlZ2lzdGVyczo6cTE4LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsg
cHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIFVOV19BUk02NF92MTk6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZz
ZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTE5LCBwcm9sb2cu
c2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92MjA6Ci0g
ICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChB
Uk02NFJlZ2lzdGVyczo6cTIwLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJv
bG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIFVOV19BUk02NF92MjE6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRz
LT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTIxLCBwcm9sb2cuc2F2
ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92MjI6Ci0gICAg
ICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02
NFJlZ2lzdGVyczo6cTIyLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9n
LmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIFVOV19BUk02NF92MjM6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5h
cHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTIzLCBwcm9sb2cuc2F2ZWRS
ZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92MjQ6Ci0gICAgICAg
ICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJl
Z2lzdGVyczo6cTI0LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNm
YVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIFVOV19BUk02NF92MjU6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBl
bmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTI1LCBwcm9sb2cuc2F2ZWRSZWdp
c3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92MjY6Ci0gICAgICAgICAg
ICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lz
dGVyczo6cTI2LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJl
Z2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IFVOV19BUk02NF92Mjc6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQo
UmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTI3LCBwcm9sb2cuc2F2ZWRSZWdpc3Rl
cnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92Mjg6Ci0gICAgICAgICAgICAg
ICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVy
czo6cTI4LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lz
dGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVO
V19BUk02NF92Mjk6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVn
aXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTI5LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNb
aV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92MzA6Ci0gICAgICAgICAgICAgICAg
cmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6
cTMwLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVy
T2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19B
Uk02NF92MzE6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0
ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTMxLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0u
b2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7IC8vIG5vbi1zdGFuZGFyZCByZWdpc3RlciBiZWluZyBzYXZlZCBpbiBw
cm9sb2cKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSNlbHNlCi0jZXJyb3IgIlVu
cmVjb2duaXplZCBhcmNoaXRlY3R1cmUiCi0jZW5kaWYKLQotI2VuZGlmCi0gICAgcmVnaXN0ZXJP
ZmZzZXRzLT5zb3J0KCk7Ci0gICAgcmV0dXJuIHJlZ2lzdGVyT2Zmc2V0czsKLX0KLQotfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVW53aW5kSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVW53aW5kSW5mby5oCShyZXZpc2lvbiAxOTY2
ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFVud2luZEluZm8uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBT
YW1zdW5nIEVsZWN0cm9uaWNzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBT
emVnZWQKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5k
ZWYgRlRMVW53aW5kSW5mb19oCi0jZGVmaW5lIEZUTFVud2luZEluZm9faAotCi0jaWYgRU5BQkxF
KEZUTF9KSVQpCi0KLSNpbmNsdWRlICJGVExHZW5lcmF0ZWRGdW5jdGlvbi5oIgotY2xhc3MgUmVn
aXN0ZXJBdE9mZnNldExpc3Q7Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKLQot
c3RkOjp1bmlxdWVfcHRyPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PiAgcGFyc2VVbndpbmRJbmZvKHZv
aWQqLCBzaXplX3QsIEdlbmVyYXRlZEZ1bmN0aW9uKTsKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0KLSNlbmRpZiAvLyBGVExVbndpbmRJ
bmZvX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVJhbmdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlUmFuZ2Uu
Y3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZh
bHVlUmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyNCArMjYsMTQgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJGVExWYWx1ZVJhbmdlLmgiCiAKLSNpbmNsdWRlICJGVExB
YmJyZXZpYXRpb25zLmgiCi0KICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgewogCi12b2lkIFZhbHVlUmFuZ2U6OmRlY29yYXRlSW5zdHJ1Y3Rpb24o
Ci0gICAgTENvbnRleHQgY29udGV4dCwgTFZhbHVlIGxvYWRJbnN0cnVjdGlvbiwgdW5zaWduZWQg
cmFuZ2VLaW5kKSBjb25zdAordm9pZCBWYWx1ZVJhbmdlOjpkZWNvcmF0ZUluc3RydWN0aW9uKExW
YWx1ZSBsb2FkSW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIHJhbmdlS2luZCkgY29uc3QKIHsKLSNpZiBG
VExfVVNFU19CMwotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKICAgICBVTlVTRURfUEFSQU0o
bG9hZEluc3RydWN0aW9uKTsKICAgICBVTlVTRURfUEFSQU0ocmFuZ2VLaW5kKTsKLSNlbHNlCi0g
ICAgaWYgKCFtX3JhbmdlTWV0YWRhdGEpCi0gICAgICAgIG1fcmFuZ2VNZXRhZGF0YSA9IG1kTm9k
ZShjb250ZXh0LCBtX2JlZ2luLCBtX2VuZCk7Ci0gICAgc2V0TWV0YWRhdGEobG9hZEluc3RydWN0
aW9uLCByYW5nZUtpbmQsIG1fcmFuZ2VNZXRhZGF0YSk7Ci0jZW5kaWYgLy8gIUZUTF9VU0VTX0Iz
CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMVmFsdWVSYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMVmFsdWVSYW5nZS5oCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMzIg
KzM3LDIzIEBAIHB1YmxpYzoKICAgICBWYWx1ZVJhbmdlKCkKICAgICAgICAgOiBtX2JlZ2luKDAp
CiAgICAgICAgICwgbV9lbmQoMCkKLSNpZiAhRlRMX1VTRVNfQjMKLSAgICAgICAgLCBtX3Jhbmdl
TWV0YWRhdGEoMCkKLSNlbmRpZgogICAgIHsKICAgICB9CiAgICAgCiAgICAgVmFsdWVSYW5nZShM
VmFsdWUgYmVnaW4sIExWYWx1ZSBlbmQpCiAgICAgICAgIDogbV9iZWdpbihiZWdpbikKICAgICAg
ICAgLCBtX2VuZChlbmQpCi0jaWYgIUZUTF9VU0VTX0IzCi0gICAgICAgICwgbV9yYW5nZU1ldGFk
YXRhKDApCi0jZW5kaWYKICAgICB7CiAgICAgfQogICAgIAogICAgIExWYWx1ZSBiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fYmVnaW47IH0KICAgICBMVmFsdWUgZW5kKCkgY29uc3QgeyByZXR1cm4g
bV9lbmQ7IH0KICAgICAKLSAgICB2b2lkIGRlY29yYXRlSW5zdHJ1Y3Rpb24oTENvbnRleHQsIExW
YWx1ZSBsb2FkSW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIHJhbmdlS2luZCkgY29uc3Q7CisgICAgdm9p
ZCBkZWNvcmF0ZUluc3RydWN0aW9uKExWYWx1ZSBsb2FkSW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIHJh
bmdlS2luZCkgY29uc3Q7CiAgICAgCiBwcml2YXRlOgogICAgIExWYWx1ZSBtX2JlZ2luOwogICAg
IExWYWx1ZSBtX2VuZDsKLSNpZiAhRlRMX1VTRVNfQjMKLSAgICBtdXRhYmxlIExWYWx1ZSBtX3Jh
bmdlTWV0YWRhdGE7Ci0jZW5kaWYKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMV2VpZ2h0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExXZWlnaHQuaAkocmV2aXNpb24gMTk2Njg1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExXZWlnaHQuaAkod29ya2luZyBjb3B5KQpA
QCAtNTEsOSArNTEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgZmxvYXQgdmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlOyB9CiAKLSNpZiBGVExfVVNFU19CMwogICAgIEIzOjpGcmVxdWVuY3lD
bGFzcyBmcmVxdWVuY3lDbGFzcygpIGNvbnN0IHsgcmV0dXJuIHZhbHVlKCkgPyBCMzo6RnJlcXVl
bmN5Q2xhc3M6Ok5vcm1hbCA6IEIzOjpGcmVxdWVuY3lDbGFzczo6UmFyZTsgfQotI2VuZGlmCiAg
ICAgCiAgICAgdW5zaWduZWQgc2NhbGVUb1RvdGFsKGRvdWJsZSB0b3RhbCkgY29uc3QKICAgICB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9Jbml0aWFsaXplTExWTS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vSW5pdGlhbGl6ZUxMVk0uY3Bw
CShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9Jbml0aWFs
aXplTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJJbml0aWFsaXplTExWTS5oIgotCi0jaWYgSEFWRShMTFZNKQotCi0jaW5j
bHVkZSAiTExWTUFQSS5oIgotI2luY2x1ZGUgIk9wdGlvbnMuaCIKLSNpbmNsdWRlIDxtdXRleD4K
LSNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3RhdGljIHZv
aWQgaW5pdGlhbGl6ZUxMVk1JbXBsKCkKLXsKLSAgICBjb25zdCBib29sIHZlcmJvc2UgPQotICAg
ICAgICBPcHRpb25zOjp2ZXJib3NlRlRMQ29tcGlsYXRpb24oKQotICAgICAgICB8fCBPcHRpb25z
OjpkdW1wRlRMRGlzYXNzZW1ibHkoKQotICAgICAgICB8fCBPcHRpb25zOjp2ZXJib3NlRlRMRmFp
bHVyZSgpCi0gICAgICAgIHx8IE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvbigpCi0gICAgICAg
IHx8IE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpCi0gICAgICAgIHx8IE9wdGlvbnM6OmR1
bXBEaXNhc3NlbWJseSgpOwotICAgIAotICAgIExMVk1Jbml0aWFsaXplckZ1bmN0aW9uIGluaXRp
YWxpemVyID0gZ2V0TExWTUluaXRpYWxpemVyRnVuY3Rpb24odmVyYm9zZSk7Ci0gICAgaWYgKCFp
bml0aWFsaXplcikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJvb2wgZW5hYmxlRmFzdElT
ZWwgPSBPcHRpb25zOjp1c2VMTFZNRmFzdElTZWwoKTsKLSAgICBsbHZtID0gaW5pdGlhbGl6ZXIo
V1RGTG9nQWx3YXlzQW5kQ3Jhc2gsICZlbmFibGVGYXN0SVNlbCk7Ci0gICAgaWYgKCFsbHZtKSB7
Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiTExWTSBpbml0aWxp
emF0aW9uIGZhaWxlZC5cbiIpOwotICAgIH0KLSAgICBpZiAoT3B0aW9uczo6dXNlTExWTUZhc3RJ
U2VsKCkgJiYgIWVuYWJsZUZhc3RJU2VsKSB7Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAg
ICAgICAgZGF0YUxvZygiRmFzdCBJU2VsIHJlcXVlc3RlZCBidXQgTExWTSBub3QgbmV3IGVub3Vn
aC5cbiIpOwotICAgIH0KLSAgICAKLSAgICBlbmFibGVMTFZNRmFzdElTZWwgPSBlbmFibGVGYXN0
SVNlbDsKLX0KLQotYm9vbCBpbml0aWFsaXplTExWTSgpCi17Ci0gICAgc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIGluaXRpYWxpemVMTFZNT25jZUtleTsKLQotICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRp
YWxpemVMTFZNT25jZUtleSwgaW5pdGlhbGl6ZUxMVk1JbXBsKTsKLSAgICByZXR1cm4gISFsbHZt
OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEhBVkUoTExWTSkKLQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vSW5pdGlhbGl6ZUxMVk0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9Jbml0aWFsaXplTExWTS5oCShyZXZpc2lv
biAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9Jbml0aWFsaXplTExWTS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEluaXRpYWxpemVMTFZNX2gKLSNk
ZWZpbmUgSW5pdGlhbGl6ZUxMVk1faAotCi0jaWYgSEFWRShMTFZNKQotCi0jaW5jbHVkZSAiTExW
TUFQSS5oIgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLW5hbWVzcGFjZSBKU0MgewotCi10eXBlZGVmIHZvaWQgKCpMb2dnZXJGdW5jdGlvbikoY29u
c3QgY2hhciosIC4uLikgV1RGX0FUVFJJQlVURV9QUklOVEYoMSwgMik7Ci10eXBlZGVmIExMVk1B
UEkqICgqTExWTUluaXRpYWxpemVyRnVuY3Rpb24pKExvZ2dlckZ1bmN0aW9uLCBib29sKiBlbmFi
bGVGYXN0SVNlbCk7Ci0KLUxMVk1Jbml0aWFsaXplckZ1bmN0aW9uIGdldExMVk1Jbml0aWFsaXpl
ckZ1bmN0aW9uKGJvb2wgdmVyYm9zZSk7Ci0KLWV4dGVybiBjb25zdCBDU3RyaW5nKiBsbHZtQml0
Y29kZUxpYnJhcnlGb3JJbmxpbmluZ1BhdGg7Ci0KLS8vIFlvdSBtdXN0IGNhbGwgdGhpcyBiZWZv
cmUgdXNpbmcgSlNDOjpsbHZtLiBJdCdzIHNhZmUgdG8gY2FsbCB0aGlzIG11bHRpcGxlIHRpbWVz
LgotLy8gUmV0dXJucyB0cnVlIGlmIHdlIHN1Y2Nlc3NmdWxseSBsb2FkZWQgTExWTS4gUmV0dXJu
cyBmYWxzZSBpZiB3ZSBkaWRuJ3QuCi1ib29sIGluaXRpYWxpemVMTFZNKCk7Ci0KLX0gLy8gbmFt
ZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gSEFWRShMTFZNKQotCi0jZW5kaWYgLy8gSW5pdGlhbGl6
ZUxMVk1faAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9Jbml0aWFsaXplTExW
TU1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vSW5pdGlh
bGl6ZUxMVk1NYWMuY3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGx2bS9Jbml0aWFsaXplTExWTU1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDQgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5pdGlhbGl6ZUxMVk0uaCIKLQotI2lm
IEhBVkUoTExWTSkKLQotI2luY2x1ZGUgIkJ1bmRsZVBhdGguaCIKLSNpbmNsdWRlICJJbml0aWFs
aXplTExWTVBPU0lYLmgiCi0jaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+Ci0KLW5h
bWVzcGFjZSBKU0MgewotCi1MTFZNSW5pdGlhbGl6ZXJGdW5jdGlvbiBnZXRMTFZNSW5pdGlhbGl6
ZXJGdW5jdGlvbihib29sIHZlcmJvc2UpCi17Ci0gICAgcmV0dXJuIGdldExMVk1Jbml0aWFsaXpl
ckZ1bmN0aW9uUE9TSVgodG9DU3RyaW5nKGJ1bmRsZVBhdGgoKS5kYXRhKCksICIvTGlicmFyaWVz
L2xpYmxsdm1Gb3JKU0MuZHlsaWIiKS5kYXRhKCksIHZlcmJvc2UpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBKU0MKLQotI2VuZGlmIC8vIEhBVkUoTExWTSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNUE9TSVguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNUE9TSVguY3BwCShyZXZpc2lvbiAxOTY2
ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9Jbml0aWFsaXplTExWTVBPU0lYLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkluaXRpYWxpemVMTFZNUE9TSVguaCIKLQotI2lmIEhBVkUoTExWTSkKLQotI2luY2x1ZGUg
IkxMVk1BUEkuaCIKLSNpbmNsdWRlICJPcHRpb25zLmgiCi0jaW5jbHVkZSA8ZGxmY24uaD4KLSNp
bmNsdWRlIDx3dGYvRGF0YUxvZy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotTExWTUluaXRpYWxp
emVyRnVuY3Rpb24gZ2V0TExWTUluaXRpYWxpemVyRnVuY3Rpb25QT1NJWChjb25zdCBjaGFyKiBs
aWJyYXJ5TmFtZSwgYm9vbCB2ZXJib3NlKQotewotICAgIGludCBmbGFncyA9IFJUTERfTk9XOwot
ICAgIAotI2lmIE9TKExJTlVYKQotICAgIC8vIFdlIG5lZWQgdGhpcyB0byBjYXVzZSBvdXIgb3Zl
cnJpZGVzIChsaWtlIF9fY3hhX2F0ZXhpdCkgdG8gdGFrZSBwcmVjZWRlbnQgb3ZlciB0aGUgX19j
eGFfYXRleGl0IHRoYXQgaXMgYWxyZWFkeQotICAgIC8vIGdsb2JhbGx5IGV4cG9ydGVkLiBUaG9z
ZSBvdmVycmlkZXMgYXJlIG5lY2Vzc2FyeSB0byBwcmV2ZW50IGNyYXNoZXMgKG91ciBfX2N4YV9h
dGV4aXQgdHVybnMgb2ZmIExMVk0ncyBleGl0LXRpbWUKLSAgICAvLyBkZXN0cnVjdGlvbiwgd2hp
Y2ggY2F1c2VzIGV4aXQtdGltZSBjcmFzaGVzIGlmIHRoZSBjb25jdXJyZW50IEpJVCBpcyBzdGls
bCBydW5uaW5nKSBhbmQgdG8gbWFrZSBMTFZNIGFzc2VydGlvbgotICAgIC8vIGZhaWx1cmVzIGZ1
bm5lbCB0aHJvdWdoIFdlYktpdCdzIG1lY2hhbmlzbXMuIFRoaXMgZmxhZyBpbmR1Y2VzIGJlaGF2
aW9yIHRoYXQgaXMgdGhlIGRlZmF1bHQgb24gRGFyd2luLiBPdGhlciBPU2VzCi0gICAgLy8gbWF5
IG5lZWQgdGhlaXIgb3duIGZsYWdzIGluIHBsYWNlIG9mIHRoaXMuCi0gICAgZmxhZ3MgfD0gUlRM
RF9ERUVQQklORDsKLSNlbmRpZgotICAgIAotICAgIHZvaWQqIGxpYnJhcnkgPSBkbG9wZW4obGli
cmFyeU5hbWUsIGZsYWdzKTsKLSAgICBpZiAoIWxpYnJhcnkpIHsKLSAgICAgICAgaWYgKHZlcmJv
c2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJGYWlsZWQgdG8gbG9hZCBMTFZNIGxpYnJhcnkgYXQg
IiwgbGlicmFyeU5hbWUsICI6ICIsIGRsZXJyb3IoKSwgIlxuIik7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBjaGFyKiBzeW1ib2xOYW1lID0gImluaXRp
YWxpemVBbmRHZXRKU0NMTFZNQVBJIjsKLSAgICBMTFZNSW5pdGlhbGl6ZXJGdW5jdGlvbiBpbml0
aWFsaXplciA9IGJpdHdpc2VfY2FzdDxMTFZNSW5pdGlhbGl6ZXJGdW5jdGlvbj4oCi0gICAgICAg
IGRsc3ltKGxpYnJhcnksIHN5bWJvbE5hbWUpKTsKLSAgICBpZiAoIWluaXRpYWxpemVyKSB7Ci0g
ICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiRmFpbGVkIHRvIGZpbmQg
Iiwgc3ltYm9sTmFtZSwgIiBpbiAiLCBsaWJyYXJ5TmFtZSwgIjogIiwgZGxlcnJvcigpKTsKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBpbml0aWFsaXpl
cjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBIQVZFKExMVk0pCi0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNUE9TSVguaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9Jbml0aWFsaXplTExWTVBPU0lY
LmgJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0luaXRp
YWxpemVMTFZNUE9TSVguaAkod29ya2luZyBjb3B5KQpAQCAtMSw0MiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgSW5p
dGlhbGl6ZUxMVk1QT1NJWF9oCi0jZGVmaW5lIEluaXRpYWxpemVMTFZNUE9TSVhfaAotCi0jaWYg
SEFWRShMTFZNKQotCi0jaW5jbHVkZSAiSW5pdGlhbGl6ZUxMVk0uaCIKLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLUxMVk1Jbml0aWFsaXplckZ1bmN0aW9uIGdldExMVk1Jbml0aWFsaXplckZ1bmN0aW9u
UE9TSVgoY29uc3QgY2hhciogbGlicmFyeU5hbWUsIGJvb2wgdmVyYm9zZSk7Ci0KLX0gLy8gbmFt
ZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gSEFWRShMTFZNKQotCi0jZW5kaWYgLy8gSW5pdGlhbGl6
ZUxMVk1QT1NJWF9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0xMVk1BUEku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0xMVk1BUEkuY3Bw
CShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9MTFZNQVBJ
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJMTFZNQVBJLmgiCi0KLSNpZiBIQVZFKExMVk0pCi0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1MTFZNQVBJKiBsbHZtOwotYm9vbCBlbmFibGVMTFZNRmFzdElTZWw7Ci0KLX0KLQotI2VuZGlm
IC8vIEhBVkUoTExWTSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0xMVk1BUEku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9MTFZNQVBJLmgJKHJl
dmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0xMVk1BUEkuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgTExWTUFQSV9oCi0jZGVmaW5lIExM
Vk1BUElfaAotCi0jaWYgSEFWRShMTFZNKQotCi0jaW5jbHVkZSAiTExWTUFQSUZ1bmN0aW9ucy5o
IgotI2luY2x1ZGUgIkxMVk1IZWFkZXJzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1zdHJ1Y3Qg
TExWTUFQSSB7Ci0jZGVmaW5lIExMVk1fQVBJX0ZVTkNUSU9OX0RFQ0xBUkFUSU9OKHJldHVyblR5
cGUsIG5hbWUsIHNpZ25hdHVyZSkgXAotICAgIHJldHVyblR5cGUgKCpuYW1lKSBzaWduYXR1cmU7
Ci0gICAgRk9SX0VBQ0hfTExWTV9BUElfRlVOQ1RJT04oTExWTV9BUElfRlVOQ1RJT05fREVDTEFS
QVRJT04pCi0jdW5kZWYgTExWTV9BUElfRlVOQ1RJT05fREVDTEFSQVRJT04KLSAgICAKLSAgICAv
LyBGdW5jdGlvbnMgdGhhdCB3ZSBhZGQgY29uZGl0aW9uYWxseS4KLSAgICB2b2lkICgqQWRkTG93
ZXJTd2l0Y2hQYXNzKShMTFZNUGFzc01hbmFnZXJSZWYgUE0pOwotfTsKLQotZXh0ZXJuIExMVk1B
UEkqIGxsdm07Ci1leHRlcm4gYm9vbCBlbmFibGVMTFZNRmFzdElTZWw7Ci0KLX0gLy8gbmFtZXNw
YWNlIEpTQwotCi0jZW5kaWYgLy8gSEFWRShMTFZNKQotCi0jZW5kaWYgLy8gTExWTUFQSV9oCi0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0xMVk1BUElGdW5jdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9MTFZNQVBJRnVuY3Rpb25zLmgJ
KHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0xMVk1BUElG
dW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxNzYgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIExMVk1BUElGdW5jdGlv
bnNfaAotI2RlZmluZSBMTFZNQVBJRnVuY3Rpb25zX2gKLQotI2luY2x1ZGUgIkxMVk1IZWFkZXJz
LmgiCi0KLSNkZWZpbmUgRk9SX0VBQ0hfTExWTV9BUElfRlVOQ1RJT04obWFjcm8pIFwKLSAgICBt
YWNybyh2b2lkLCBEaXNwb3NlTWVzc2FnZSwgKGNoYXIgKk1lc3NhZ2UpKSBcCi0gICAgbWFjcm8o
dm9pZCwgSW5zdGFsbEZhdGFsRXJyb3JIYW5kbGVyLCAoTExWTUZhdGFsRXJyb3JIYW5kbGVyIEhh
bmRsZXIpKSBcCi0gICAgbWFjcm8oTExWTUNvbnRleHRSZWYsIENvbnRleHRDcmVhdGUsICh2b2lk
KSkgXAotICAgIG1hY3JvKHZvaWQsIENvbnRleHREaXNwb3NlLCAoTExWTUNvbnRleHRSZWYgQykp
IFwKLSAgICBtYWNybyh1bnNpZ25lZCwgR2V0TURLaW5kSURJbkNvbnRleHQsIChMTFZNQ29udGV4
dFJlZiBDLCBjb25zdCBjaGFyKiBOYW1lLCB1bnNpZ25lZCBTTGVuKSkgXAotICAgIG1hY3JvKExM
Vk1Nb2R1bGVSZWYsIE1vZHVsZUNyZWF0ZVdpdGhOYW1lSW5Db250ZXh0LCAoY29uc3QgY2hhciAq
TW9kdWxlSUQsIExMVk1Db250ZXh0UmVmIEMpKSBcCi0gICAgbWFjcm8odm9pZCwgRGlzcG9zZU1v
ZHVsZSwgKExMVk1Nb2R1bGVSZWYgTSkpIFwKLSAgICBtYWNybyh2b2lkLCBTZXREYXRhTGF5b3V0
LCAoTExWTU1vZHVsZVJlZiBNLCBjb25zdCBjaGFyICpUcmlwbGUpKSBcCi0gICAgbWFjcm8odm9p
ZCwgU2V0VGFyZ2V0LCAoTExWTU1vZHVsZVJlZiBNLCBjb25zdCBjaGFyICpUcmlwbGUpKSBcCi0g
ICAgbWFjcm8odm9pZCwgRHVtcE1vZHVsZSwgKExMVk1Nb2R1bGVSZWYgTSkpIFwKLSAgICBtYWNy
byhMTFZNQ29udGV4dFJlZiwgR2V0TW9kdWxlQ29udGV4dCwgKExMVk1Nb2R1bGVSZWYgTSkpIFwK
LSAgICBtYWNybyhMTFZNVHlwZVJlZiwgR2V0VHlwZUJ5TmFtZSwgKExMVk1Nb2R1bGVSZWYgTSwg
Y29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyh2b2lkLCBEdW1wVHlwZSwgKExMVk1UeXBl
UmVmIFZhbCkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEFkZEZ1bmN0aW9uLCAoTExWTU1v
ZHVsZVJlZiBNLCBjb25zdCBjaGFyICpOYW1lLCBMTFZNVHlwZVJlZiBGdW5jdGlvblR5KSkgXAot
ICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgR2V0Rmlyc3RGdW5jdGlvbiwgKExMVk1Nb2R1bGVSZWYg
TSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEdldE5leHRGdW5jdGlvbiwgKExMVk1WYWx1
ZVJlZiBGbikpIFwKLSAgICBtYWNybyhMTFZNVHlwZVJlZiwgSW50MVR5cGVJbkNvbnRleHQsIChM
TFZNQ29udGV4dFJlZiBDKSkgXAotICAgIG1hY3JvKExMVk1UeXBlUmVmLCBJbnQ4VHlwZUluQ29u
dGV4dCwgKExMVk1Db250ZXh0UmVmIEMpKSBcCi0gICAgbWFjcm8oTExWTVR5cGVSZWYsIEludDE2
VHlwZUluQ29udGV4dCwgKExMVk1Db250ZXh0UmVmIEMpKSBcCi0gICAgbWFjcm8oTExWTVR5cGVS
ZWYsIEludDMyVHlwZUluQ29udGV4dCwgKExMVk1Db250ZXh0UmVmIEMpKSBcCi0gICAgbWFjcm8o
TExWTVR5cGVSZWYsIEludDY0VHlwZUluQ29udGV4dCwgKExMVk1Db250ZXh0UmVmIEMpKSBcCi0g
ICAgbWFjcm8oTExWTVR5cGVSZWYsIEludFR5cGVJbkNvbnRleHQsIChMTFZNQ29udGV4dFJlZiBD
LCB1bnNpZ25lZCBOdW1CaXRzKSkgXAotICAgIG1hY3JvKExMVk1UeXBlUmVmLCBGbG9hdFR5cGVJ
bkNvbnRleHQsIChMTFZNQ29udGV4dFJlZiBDKSkgXAotICAgIG1hY3JvKExMVk1UeXBlUmVmLCBE
b3VibGVUeXBlSW5Db250ZXh0LCAoTExWTUNvbnRleHRSZWYgQykpIFwKLSAgICBtYWNybyhMTFZN
VHlwZVJlZiwgRnVuY3Rpb25UeXBlLCAoTExWTVR5cGVSZWYgUmV0dXJuVHlwZSwgTExWTVR5cGVS
ZWYgKlBhcmFtVHlwZXMsIHVuc2lnbmVkIFBhcmFtQ291bnQsIExMVk1Cb29sIElzVmFyQXJnKSkg
XAotICAgIG1hY3JvKExMVk1UeXBlUmVmLCBTdHJ1Y3RUeXBlSW5Db250ZXh0LCAoTExWTUNvbnRl
eHRSZWYgQywgTExWTVR5cGVSZWYgKkVsZW1lbnRUeXBlcywgdW5zaWduZWQgRWxlbWVudENvdW50
LCBMTFZNQm9vbCBQYWNrZWQpKSBcCi0gICAgbWFjcm8oTExWTVR5cGVSZWYsIEFycmF5VHlwZSwg
KExMVk1UeXBlUmVmIEVsZW1lbnRUeXBlLCB1bnNpZ25lZCBFbGVtZW50Q291bnQpKSBcCi0gICAg
bWFjcm8oTExWTVR5cGVSZWYsIFBvaW50ZXJUeXBlLCAoTExWTVR5cGVSZWYgRWxlbWVudFR5cGUs
IHVuc2lnbmVkIEFkZHJlc3NTcGFjZSkpIFwKLSAgICBtYWNybyhMTFZNVHlwZVJlZiwgVmVjdG9y
VHlwZSwgKExMVk1UeXBlUmVmIEVsZW1lbnRUeXBlLCB1bnNpZ25lZCBFbGVtZW50Q291bnQpKSBc
Ci0gICAgbWFjcm8oTExWTVR5cGVSZWYsIFZvaWRUeXBlSW5Db250ZXh0LCAoTExWTUNvbnRleHRS
ZWYgQykpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIENvbnN0TnVsbCwgKExMVk1UeXBlUmVm
IFR5KSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgR2V0VW5kZWYsIChMTFZNVHlwZVJlZiBU
eSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIENvbnN0SW50LCAoTExWTVR5cGVSZWYgSW50
VHksIHVuc2lnbmVkIGxvbmcgbG9uZyBOLCBMTFZNQm9vbCBTaWduRXh0ZW5kKSkgXAotICAgIG1h
Y3JvKExMVk1WYWx1ZVJlZiwgQ29uc3RSZWFsLCAoTExWTVR5cGVSZWYgUmVhbFR5LCBkb3VibGUg
TikpIFwKLSAgICBtYWNybyh2b2lkLCBTZXRMaW5rYWdlLCAoTExWTVZhbHVlUmVmIEdsb2JhbCwg
TExWTUxpbmthZ2UgTGlua2FnZSkpIFwKLSAgICBtYWNybyh2b2lkLCBTZXRGdW5jdGlvbkNhbGxD
b252LCAoTExWTVZhbHVlUmVmIEZuLCB1bnNpZ25lZCBDQykpIFwKLSAgICBtYWNybyh2b2lkLCBB
ZGRUYXJnZXREZXBlbmRlbnRGdW5jdGlvbkF0dHIsIChMTFZNVmFsdWVSZWYgRm4sIGNvbnN0IGNo
YXIgKkEsIGNvbnN0IGNoYXIgKlYpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBHZXRQYXJh
bSwgKExMVk1WYWx1ZVJlZiBGbiwgdW5zaWduZWQgSW5kZXgpKSBcCi0gICAgbWFjcm8oTExWTVZh
bHVlUmVmLCBNRFN0cmluZ0luQ29udGV4dCwgKExMVk1Db250ZXh0UmVmIEMsIGNvbnN0IGNoYXIg
KlN0ciwgdW5zaWduZWQgU0xlbikpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIE1EU3RyaW5n
LCAoY29uc3QgY2hhciAqU3RyLCB1bnNpZ25lZCBTTGVuKSkgXAotICAgIG1hY3JvKExMVk1WYWx1
ZVJlZiwgTUROb2RlSW5Db250ZXh0LCAoTExWTUNvbnRleHRSZWYgQywgTExWTVZhbHVlUmVmICpW
YWxzLCB1bnNpZ25lZCBDb3VudCkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIE1ETm9kZSwg
KExMVk1WYWx1ZVJlZiAqVmFscywgdW5zaWduZWQgQ291bnQpKSBcCi0gICAgbWFjcm8oTExWTUJh
c2ljQmxvY2tSZWYsIEFwcGVuZEJhc2ljQmxvY2tJbkNvbnRleHQsIChMTFZNQ29udGV4dFJlZiBD
LCBMTFZNVmFsdWVSZWYgRm4sIGNvbnN0IGNoYXIgKk5hbWUpKSBcCi0gICAgbWFjcm8oTExWTUJh
c2ljQmxvY2tSZWYsIEluc2VydEJhc2ljQmxvY2tJbkNvbnRleHQsIChMTFZNQ29udGV4dFJlZiBD
LCBMTFZNQmFzaWNCbG9ja1JlZiBCQiwgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyh2
b2lkLCBTZXRNZXRhZGF0YSwgKExMVk1WYWx1ZVJlZiBWYWwsIHVuc2lnbmVkIEtpbmRJRCwgTExW
TVZhbHVlUmVmIE5vZGUpKSBcCi0gICAgbWFjcm8odm9pZCwgU2V0SW5zdHJ1Y3Rpb25DYWxsQ29u
diwgKExMVk1WYWx1ZVJlZiBJbnN0ciwgdW5zaWduZWQgQ0MpKSBcCi0gICAgbWFjcm8odm9pZCwg
QWRkSW5jb21pbmcsIChMTFZNVmFsdWVSZWYgUGhpTm9kZSwgTExWTVZhbHVlUmVmICpJbmNvbWlu
Z1ZhbHVlcywgTExWTUJhc2ljQmxvY2tSZWYgKkluY29taW5nQmxvY2tzLCB1bnNpZ25lZCBDb3Vu
dCkpIFwKLSAgICBtYWNybyhMTFZNQnVpbGRlclJlZiwgQ3JlYXRlQnVpbGRlckluQ29udGV4dCwg
KExMVk1Db250ZXh0UmVmIEMpKSBcCi0gICAgbWFjcm8odm9pZCwgUG9zaXRpb25CdWlsZGVyQXRF
bmQsIChMTFZNQnVpbGRlclJlZiBCdWlsZGVyLCBMTFZNQmFzaWNCbG9ja1JlZiBCbG9jaykpIFwK
LSAgICBtYWNybyh2b2lkLCBEaXNwb3NlQnVpbGRlciwgKExMVk1CdWlsZGVyUmVmIEJ1aWxkZXIp
KSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZFJldCwgKExMVk1CdWlsZGVyUmVmLCBM
TFZNVmFsdWVSZWYgVikpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkQnIsIChMTFZN
QnVpbGRlclJlZiwgTExWTUJhc2ljQmxvY2tSZWYgRGVzdCkpIFwKLSAgICBtYWNybyhMTFZNVmFs
dWVSZWYsIEJ1aWxkQ29uZEJyLCAoTExWTUJ1aWxkZXJSZWYsIExMVk1WYWx1ZVJlZiBJZiwgTExW
TUJhc2ljQmxvY2tSZWYgVGhlbiwgTExWTUJhc2ljQmxvY2tSZWYgRWxzZSkpIFwKLSAgICBtYWNy
byhMTFZNVmFsdWVSZWYsIEJ1aWxkU3dpdGNoLCAoTExWTUJ1aWxkZXJSZWYsIExMVk1WYWx1ZVJl
ZiBWLCBMTFZNQmFzaWNCbG9ja1JlZiBFbHNlLCB1bnNpZ25lZCBOdW1DYXNlcykpIFwKLSAgICBt
YWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkVW5yZWFjaGFibGUsIChMTFZNQnVpbGRlclJlZikpIFwK
LSAgICBtYWNybyh2b2lkLCBBZGRDYXNlLCAoTExWTVZhbHVlUmVmIFN3aXRjaCwgTExWTVZhbHVl
UmVmIE9uVmFsLCBMTFZNQmFzaWNCbG9ja1JlZiBEZXN0KSkgXAotICAgIG1hY3JvKExMVk1WYWx1
ZVJlZiwgQnVpbGRBZGQsIChMTFZNQnVpbGRlclJlZiwgTExWTVZhbHVlUmVmIExIUywgTExWTVZh
bHVlUmVmIFJIUywgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYs
IEJ1aWxkRkFkZCwgKExMVk1CdWlsZGVyUmVmLCBMTFZNVmFsdWVSZWYgTEhTLCBMTFZNVmFsdWVS
ZWYgUkhTLCBjb25zdCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVp
bGRTdWIsIChMTFZNQnVpbGRlclJlZiwgTExWTVZhbHVlUmVmIExIUywgTExWTVZhbHVlUmVmIFJI
UywgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkRlN1
YiwgKExMVk1CdWlsZGVyUmVmLCBMTFZNVmFsdWVSZWYgTEhTLCBMTFZNVmFsdWVSZWYgUkhTLCBj
b25zdCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRNdWwsIChM
TFZNQnVpbGRlclJlZiwgTExWTVZhbHVlUmVmIExIUywgTExWTVZhbHVlUmVmIFJIUywgY29uc3Qg
Y2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkRk11bCwgKExMVk1C
dWlsZGVyUmVmLCBMTFZNVmFsdWVSZWYgTEhTLCBMTFZNVmFsdWVSZWYgUkhTLCBjb25zdCBjaGFy
ICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRTRGl2LCAoTExWTUJ1aWxk
ZXJSZWYsIExMVk1WYWx1ZVJlZiBMSFMsIExMVk1WYWx1ZVJlZiBSSFMsIGNvbnN0IGNoYXIgKk5h
bWUpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZEZEaXYsIChMTFZNQnVpbGRlclJl
ZiwgTExWTVZhbHVlUmVmIExIUywgTExWTVZhbHVlUmVmIFJIUywgY29uc3QgY2hhciAqTmFtZSkp
IFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkU1JlbSwgKExMVk1CdWlsZGVyUmVmLCBM
TFZNVmFsdWVSZWYgTEhTLCBMTFZNVmFsdWVSZWYgUkhTLCBjb25zdCBjaGFyICpOYW1lKSkgXAot
ICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRGUmVtLCAoTExWTUJ1aWxkZXJSZWYsIExMVk1W
YWx1ZVJlZiBMSFMsIExMVk1WYWx1ZVJlZiBSSFMsIGNvbnN0IGNoYXIgKk5hbWUpKSBcCi0gICAg
bWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZFNobCwgKExMVk1CdWlsZGVyUmVmLCBMTFZNVmFsdWVS
ZWYgTEhTLCBMTFZNVmFsdWVSZWYgUkhTLCBjb25zdCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3Jv
KExMVk1WYWx1ZVJlZiwgQnVpbGRMU2hyLCAoTExWTUJ1aWxkZXJSZWYsIExMVk1WYWx1ZVJlZiBM
SFMsIExMVk1WYWx1ZVJlZiBSSFMsIGNvbnN0IGNoYXIgKk5hbWUpKSBcCi0gICAgbWFjcm8oTExW
TVZhbHVlUmVmLCBCdWlsZEFTaHIsIChMTFZNQnVpbGRlclJlZiwgTExWTVZhbHVlUmVmIExIUywg
TExWTVZhbHVlUmVmIFJIUywgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFs
dWVSZWYsIEJ1aWxkQW5kLCAoTExWTUJ1aWxkZXJSZWYsIExMVk1WYWx1ZVJlZiBMSFMsIExMVk1W
YWx1ZVJlZiBSSFMsIGNvbnN0IGNoYXIgKk5hbWUpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVm
LCBCdWlsZE9yLCAoTExWTUJ1aWxkZXJSZWYsIExMVk1WYWx1ZVJlZiBMSFMsIExMVk1WYWx1ZVJl
ZiBSSFMsIGNvbnN0IGNoYXIgKk5hbWUpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWls
ZFhvciwgKExMVk1CdWlsZGVyUmVmLCBMTFZNVmFsdWVSZWYgTEhTLCBMTFZNVmFsdWVSZWYgUkhT
LCBjb25zdCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGROZWcs
IChMTFZNQnVpbGRlclJlZiwgTExWTVZhbHVlUmVmIFYsIGNvbnN0IGNoYXIgKk5hbWUpKSBcCi0g
ICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZEZOZWcsIChMTFZNQnVpbGRlclJlZiwgTExWTVZh
bHVlUmVmIFYsIGNvbnN0IGNoYXIgKk5hbWUpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBC
dWlsZE5vdCwgKExMVk1CdWlsZGVyUmVmLCBMTFZNVmFsdWVSZWYgViwgY29uc3QgY2hhciAqTmFt
ZSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkQWxsb2NhLCAoTExWTUJ1aWxkZXJS
ZWYsIExMVk1UeXBlUmVmIFR5LCBjb25zdCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1W
YWx1ZVJlZiwgQnVpbGRMb2FkLCAoTExWTUJ1aWxkZXJSZWYsIExMVk1WYWx1ZVJlZiBQb2ludGVy
VmFsLCBjb25zdCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRT
dG9yZSwgKExMVk1CdWlsZGVyUmVmLCBMTFZNVmFsdWVSZWYgVmFsLCBMTFZNVmFsdWVSZWYgUHRy
KSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRaRXh0LCAoTExWTUJ1aWxkZXJSZWYs
IExMVk1WYWx1ZVJlZiBWYWwsIExMVk1UeXBlUmVmIERlc3RUeSwgY29uc3QgY2hhciAqTmFtZSkp
IFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkU0V4dCwgKExMVk1CdWlsZGVyUmVmLCBM
TFZNVmFsdWVSZWYgVmFsLCBMTFZNVHlwZVJlZiBEZXN0VHksIGNvbnN0IGNoYXIgKk5hbWUpKSBc
Ci0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZEZQVG9VSSwgKExMVk1CdWlsZGVyUmVmLCBM
TFZNVmFsdWVSZWYgVmFsLCBMTFZNVHlwZVJlZiBEZXN0VHksIGNvbnN0IGNoYXIgKk5hbWUpKSBc
Ci0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZEZQVG9TSSwgKExMVk1CdWlsZGVyUmVmLCBM
TFZNVmFsdWVSZWYgVmFsLCBMTFZNVHlwZVJlZiBEZXN0VHksIGNvbnN0IGNoYXIgKk5hbWUpKSBc
Ci0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZFVJVG9GUCwgKExMVk1CdWlsZGVyUmVmLCBM
TFZNVmFsdWVSZWYgVmFsLCBMTFZNVHlwZVJlZiBEZXN0VHksIGNvbnN0IGNoYXIgKk5hbWUpKSBc
Ci0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZFNJVG9GUCwgKExMVk1CdWlsZGVyUmVmLCBM
TFZNVmFsdWVSZWYgVmFsLCBMTFZNVHlwZVJlZiBEZXN0VHksIGNvbnN0IGNoYXIgKk5hbWUpKSBc
Ci0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZFB0clRvSW50LCAoTExWTUJ1aWxkZXJSZWYs
IExMVk1WYWx1ZVJlZiBWYWwsIExMVk1UeXBlUmVmIERlc3RUeSwgY29uc3QgY2hhciAqTmFtZSkp
IFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkSW50VG9QdHIsIChMTFZNQnVpbGRlclJl
ZiwgTExWTVZhbHVlUmVmIFZhbCwgTExWTVR5cGVSZWYgRGVzdFR5LCBjb25zdCBjaGFyICpOYW1l
KSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRCaXRDYXN0LCAoTExWTUJ1aWxkZXJS
ZWYsIExMVk1WYWx1ZVJlZiBWYWwsIExMVk1UeXBlUmVmIERlc3RUeSwgY29uc3QgY2hhciAqTmFt
ZSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkSW50Q2FzdCwgKExMVk1CdWlsZGVy
UmVmLCBMTFZNVmFsdWVSZWYgVmFsLCBMTFZNVHlwZVJlZiBEZXN0VHksIGNvbnN0IGNoYXIgKk5h
bWUpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZEZQQ2FzdCwgKExMVk1CdWlsZGVy
UmVmLCBMTFZNVmFsdWVSZWYgVmFsLCBMTFZNVHlwZVJlZiBEZXN0VHksIGNvbnN0IGNoYXIgKk5h
bWUpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZElDbXAsIChMTFZNQnVpbGRlclJl
ZiwgTExWTUludFByZWRpY2F0ZSBPcCwgTExWTVZhbHVlUmVmIExIUywgTExWTVZhbHVlUmVmIFJI
UywgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkRkNt
cCwgKExMVk1CdWlsZGVyUmVmLCBMTFZNUmVhbFByZWRpY2F0ZSBPcCwgTExWTVZhbHVlUmVmIExI
UywgTExWTVZhbHVlUmVmIFJIUywgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyhMTFZN
VmFsdWVSZWYsIEJ1aWxkUGhpLCAoTExWTUJ1aWxkZXJSZWYsIExMVk1UeXBlUmVmIFR5LCBjb25z
dCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRDYWxsLCAoTExW
TUJ1aWxkZXJSZWYsIExMVk1WYWx1ZVJlZiBGbiwgTExWTVZhbHVlUmVmICpBcmdzLCB1bnNpZ25l
ZCBOdW1BcmdzLCBjb25zdCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwg
QnVpbGRTZWxlY3QsIChMTFZNQnVpbGRlclJlZiwgTExWTVZhbHVlUmVmIElmLCBMTFZNVmFsdWVS
ZWYgVGhlbiwgTExWTVZhbHVlUmVmIEVsc2UsIGNvbnN0IGNoYXIgKk5hbWUpKSBcCi0gICAgbWFj
cm8oTExWTVZhbHVlUmVmLCBCdWlsZEluc2VydEVsZW1lbnQsIChMTFZNQnVpbGRlclJlZiwgTExW
TVZhbHVlUmVmIFZlY1ZhbCwgTExWTVZhbHVlUmVmIEVsdFZhbCwgTExWTVZhbHVlUmVmIEluZGV4
LCBjb25zdCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRFeHRy
YWN0VmFsdWUsIChMTFZNQnVpbGRlclJlZiwgTExWTVZhbHVlUmVmIEFnZ1ZhbCwgdW5zaWduZWQg
SW5kZXgsIGNvbnN0IGNoYXIgKk5hbWUpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWls
ZEZlbmNlLCAoTExWTUJ1aWxkZXJSZWYgQiwgTExWTUF0b21pY09yZGVyaW5nIE9yZGVyaW5nLCBM
TFZNQm9vbCBpc1NpbmdsZVRocmVhZCwgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyhM
TFZNUGFzc01hbmFnZXJSZWYsIENyZWF0ZVBhc3NNYW5hZ2VyLCAodm9pZCkpIFwKLSAgICBtYWNy
byhMTFZNUGFzc01hbmFnZXJSZWYsIENyZWF0ZUZ1bmN0aW9uUGFzc01hbmFnZXJGb3JNb2R1bGUs
IChMTFZNTW9kdWxlUmVmIE0pKSBcCi0gICAgbWFjcm8oTExWTVBhc3NNYW5hZ2VyUmVmLCBDcmVh
dGVGdW5jdGlvblBhc3NNYW5hZ2VyLCAoTExWTU1vZHVsZVByb3ZpZGVyUmVmIE1QKSkgXAotICAg
IG1hY3JvKExMVk1Cb29sLCBSdW5QYXNzTWFuYWdlciwgKExMVk1QYXNzTWFuYWdlclJlZiBQTSwg
TExWTU1vZHVsZVJlZiBNKSkgXAotICAgIG1hY3JvKExMVk1Cb29sLCBJbml0aWFsaXplRnVuY3Rp
b25QYXNzTWFuYWdlciwgKExMVk1QYXNzTWFuYWdlclJlZiBGUE0pKSBcCi0gICAgbWFjcm8oTExW
TUJvb2wsIFJ1bkZ1bmN0aW9uUGFzc01hbmFnZXIsIChMTFZNUGFzc01hbmFnZXJSZWYgRlBNLCBM
TFZNVmFsdWVSZWYgRikpIFwKLSAgICBtYWNybyhMTFZNQm9vbCwgRmluYWxpemVGdW5jdGlvblBh
c3NNYW5hZ2VyLCAoTExWTVBhc3NNYW5hZ2VyUmVmIEZQTSkpIFwKLSAgICBtYWNybyh2b2lkLCBE
aXNwb3NlUGFzc01hbmFnZXIsIChMTFZNUGFzc01hbmFnZXJSZWYgUE0pKSBcCi0gICAgbWFjcm8o
TExWTUJvb2wsIFN0YXJ0TXVsdGl0aHJlYWRlZCwgKCkpIFwKLSAgICBtYWNybyh2b2lkLCBBZGRU
YXJnZXREYXRhLCAoTExWTVRhcmdldERhdGFSZWYsIExMVk1QYXNzTWFuYWdlclJlZikpIFwKLSAg
ICBtYWNybyhjaGFyICosIENvcHlTdHJpbmdSZXBPZlRhcmdldERhdGEsIChMTFZNVGFyZ2V0RGF0
YVJlZikpIFwKLSAgICBtYWNybyhMTFZNVHlwZVJlZiwgSW50UHRyVHlwZSwgKExMVk1UYXJnZXRE
YXRhUmVmKSkgXAotICAgIG1hY3JvKHZvaWQsIExpbmtJbk1DSklULCAodm9pZCkpIFwKLSAgICBt
YWNybyh2b2lkLCBJbml0aWFsaXplTUNKSVRDb21waWxlck9wdGlvbnMsIChzdHJ1Y3QgTExWTU1D
SklUQ29tcGlsZXJPcHRpb25zICpPcHRpb25zLCBzaXplX3QgU2l6ZU9mT3B0aW9ucykpIFwKLSAg
ICBtYWNybyhMTFZNQm9vbCwgQ3JlYXRlTUNKSVRDb21waWxlckZvck1vZHVsZSwgKExMVk1FeGVj
dXRpb25FbmdpbmVSZWYgKk91dEpJVCwgTExWTU1vZHVsZVJlZiBNLCBzdHJ1Y3QgTExWTU1DSklU
Q29tcGlsZXJPcHRpb25zICpPcHRpb25zLCBzaXplX3QgU2l6ZU9mT3B0aW9ucywgY2hhciAqKk91
dEVycm9yKSkgXAotICAgIG1hY3JvKHZvaWQsIERpc3Bvc2VFeGVjdXRpb25FbmdpbmUsIChMTFZN
RXhlY3V0aW9uRW5naW5lUmVmIEVFKSkgXAotICAgIG1hY3JvKExMVk1UYXJnZXREYXRhUmVmLCBH
ZXRFeGVjdXRpb25FbmdpbmVUYXJnZXREYXRhLCAoTExWTUV4ZWN1dGlvbkVuZ2luZVJlZiBFRSkp
IFwKLSAgICBtYWNybyhMTFZNVGFyZ2V0TWFjaGluZVJlZiwgR2V0RXhlY3V0aW9uRW5naW5lVGFy
Z2V0TWFjaGluZSwgKExMVk1FeGVjdXRpb25FbmdpbmVSZWYgRUUpKSBcCi0gICAgbWFjcm8odm9p
ZCAqLCBHZXRQb2ludGVyVG9HbG9iYWwsIChMTFZNRXhlY3V0aW9uRW5naW5lUmVmIEVFLCBMTFZN
VmFsdWVSZWYgR2xvYmFsKSkgXAotICAgIG1hY3JvKExMVk1NQ0pJVE1lbW9yeU1hbmFnZXJSZWYs
IENyZWF0ZVNpbXBsZU1DSklUTWVtb3J5TWFuYWdlciwgKHZvaWQgKk9wYXF1ZSwgTExWTU1lbW9y
eU1hbmFnZXJBbGxvY2F0ZUNvZGVTZWN0aW9uQ2FsbGJhY2sgQWxsb2NhdGVDb2RlU2VjdGlvbiwg
TExWTU1lbW9yeU1hbmFnZXJBbGxvY2F0ZURhdGFTZWN0aW9uQ2FsbGJhY2sgQWxsb2NhdGVEYXRh
U2VjdGlvbiwgTExWTU1lbW9yeU1hbmFnZXJGaW5hbGl6ZU1lbW9yeUNhbGxiYWNrIEZpbmFsaXpl
TWVtb3J5LCBMTFZNTWVtb3J5TWFuYWdlckRlc3Ryb3lDYWxsYmFjayBEZXN0b3J5KSkgXAotICAg
IG1hY3JvKExMVk1Cb29sLCBWZXJpZnlNb2R1bGUsIChMTFZNTW9kdWxlUmVmIE0sIExMVk1WZXJp
ZmllckZhaWx1cmVBY3Rpb24gQWN0aW9uLCBjaGFyICoqT3V0TWVzc2FnZSkpIFwKLSAgICBtYWNy
byhMTFZNRGlzYXNtQ29udGV4dFJlZiwgQ3JlYXRlRGlzYXNtLCAoY29uc3QgY2hhciAqVHJpcGxl
TmFtZSwgdm9pZCAqRGlzSW5mbywgaW50IFRhZ1R5cGUsIExMVk1PcEluZm9DYWxsYmFjayBHZXRP
cEluZm8sIExMVk1TeW1ib2xMb29rdXBDYWxsYmFjayBTeW1ib2xMb29rVXApKSBcCi0gICAgbWFj
cm8odm9pZCwgRGlzYXNtRGlzcG9zZSwgKExMVk1EaXNhc21Db250ZXh0UmVmIERDKSkgXAotICAg
IG1hY3JvKHNpemVfdCwgRGlzYXNtSW5zdHJ1Y3Rpb24sIChMTFZNRGlzYXNtQ29udGV4dFJlZiBE
QywgdWludDhfdCAqQnl0ZXMsIHVpbnQ2NF90IEJ5dGVzU2l6ZSwgdWludDY0X3QgUEMsIGNoYXIg
Kk91dFN0cmluZywgc2l6ZV90IE91dFN0cmluZ1NpemUpKSBcCi0gICAgbWFjcm8oTExWTVBhc3NN
YW5hZ2VyQnVpbGRlclJlZiwgUGFzc01hbmFnZXJCdWlsZGVyQ3JlYXRlLCAodm9pZCkpIFwKLSAg
ICBtYWNybyh2b2lkLCBQYXNzTWFuYWdlckJ1aWxkZXJEaXNwb3NlLCAoTExWTVBhc3NNYW5hZ2Vy
QnVpbGRlclJlZiBQTUIpKSBcCi0gICAgbWFjcm8odm9pZCwgUGFzc01hbmFnZXJCdWlsZGVyU2V0
T3B0TGV2ZWwsIChMTFZNUGFzc01hbmFnZXJCdWlsZGVyUmVmIFBNQiwgdW5zaWduZWQgT3B0TGV2
ZWwpKSBcCi0gICAgbWFjcm8odm9pZCwgUGFzc01hbmFnZXJCdWlsZGVyU2V0U2l6ZUxldmVsLCAo
TExWTVBhc3NNYW5hZ2VyQnVpbGRlclJlZiBQTUIsIHVuc2lnbmVkIFNpemVMZXZlbCkpIFwKLSAg
ICBtYWNybyh2b2lkLCBQYXNzTWFuYWdlckJ1aWxkZXJVc2VJbmxpbmVyV2l0aFRocmVzaG9sZCwg
KExMVk1QYXNzTWFuYWdlckJ1aWxkZXJSZWYgUE1CLCB1bnNpZ25lZCBUaHJlc2hvbGQpKSBcCi0g
ICAgbWFjcm8odm9pZCwgUGFzc01hbmFnZXJCdWlsZGVyUG9wdWxhdGVGdW5jdGlvblBhc3NNYW5h
Z2VyLCAoTExWTVBhc3NNYW5hZ2VyQnVpbGRlclJlZiBQTUIsIExMVk1QYXNzTWFuYWdlclJlZiBQ
TSkpIFwKLSAgICBtYWNybyh2b2lkLCBQYXNzTWFuYWdlckJ1aWxkZXJQb3B1bGF0ZU1vZHVsZVBh
c3NNYW5hZ2VyLCAoTExWTVBhc3NNYW5hZ2VyQnVpbGRlclJlZiBQTUIsIExMVk1QYXNzTWFuYWdl
clJlZiBQTSkpIFwKLSAgICBtYWNybyh2b2lkLCBBZGRBbmFseXNpc1Bhc3NlcywgKExMVk1UYXJn
ZXRNYWNoaW5lUmVmIFQsIExMVk1QYXNzTWFuYWdlclJlZiBQTSkpIFwKLSAgICBtYWNybyh2b2lk
LCBBZGRBZ2dyZXNzaXZlRENFUGFzcywgKExMVk1QYXNzTWFuYWdlclJlZiBQTSkpIFwKLSAgICBt
YWNybyh2b2lkLCBBZGRDRkdTaW1wbGlmaWNhdGlvblBhc3MsIChMTFZNUGFzc01hbmFnZXJSZWYg
UE0pKSBcCi0gICAgbWFjcm8odm9pZCwgQWRkRGVhZFN0b3JlRWxpbWluYXRpb25QYXNzLCAoTExW
TVBhc3NNYW5hZ2VyUmVmIFBNKSkgXAotICAgIG1hY3JvKHZvaWQsIEFkZEZ1bmN0aW9uSW5saW5p
bmdQYXNzLCAoTExWTVBhc3NNYW5hZ2VyUmVmIFBNKSkgXAotICAgIG1hY3JvKHZvaWQsIEFkZEds
b2JhbERDRVBhc3MsIChMTFZNUGFzc01hbmFnZXJSZWYgUE0pKSBcCi0gICAgbWFjcm8odm9pZCwg
QWRkUHJ1bmVFSFBhc3MsIChMTFZNUGFzc01hbmFnZXJSZWYgUE0pKSBcCi0gICAgbWFjcm8odm9p
ZCwgQWRkR2xvYmFsT3B0aW1pemVyUGFzcywgKExMVk1QYXNzTWFuYWdlclJlZiBQTSkpIFwKLSAg
ICBtYWNybyh2b2lkLCBBZGRHVk5QYXNzLCAoTExWTVBhc3NNYW5hZ2VyUmVmIFBNKSkgXAotICAg
IG1hY3JvKHZvaWQsIEFkZEluc3RydWN0aW9uQ29tYmluaW5nUGFzcywgKExMVk1QYXNzTWFuYWdl
clJlZiBQTSkpIFwKLSAgICBtYWNybyh2b2lkLCBBZGRQcm9tb3RlTWVtb3J5VG9SZWdpc3RlclBh
c3MsIChMTFZNUGFzc01hbmFnZXJSZWYgUE0pKSBcCi0gICAgbWFjcm8odm9pZCwgQWRkQ29uc3Rh
bnRQcm9wYWdhdGlvblBhc3MsIChMTFZNUGFzc01hbmFnZXJSZWYgUE0pKSBcCi0gICAgbWFjcm8o
dm9pZCwgQWRkVHlwZUJhc2VkQWxpYXNBbmFseXNpc1Bhc3MsIChMTFZNUGFzc01hbmFnZXJSZWYg
UE0pKSBcCi0gICAgbWFjcm8odm9pZCwgQWRkQmFzaWNBbGlhc0FuYWx5c2lzUGFzcywgKExMVk1Q
YXNzTWFuYWdlclJlZiBQTSkpCi0KLSNlbmRpZiAvLyBMTFZNQVBJRnVuY3Rpb25zX2gKLQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vTExWTUhlYWRlcnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9MTFZNSGVhZGVycy5oCShyZXZpc2lvbiAxOTY2
ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9MTFZNSGVhZGVycy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBMTFZNSGVhZGVyc19oCi0jZGVmaW5lIExMVk1I
ZWFkZXJzX2gKLQotI2lmIEhBVkUoTExWTSkKLQotLy8gSXQgaXMgbmVjZXNzYXJ5IHRvIGluY2x1
ZGUgTExWTSBoZWFkZXJzIHZpYSB0aGlzIGZpbGUsIGJlY2F1c2U6Ci0vLyAtIExMVk0gcmVxdWly
ZXMgZGVmaW5pbmcgdGhpbmdzIHRoYXQgd2UgZG9uJ3Qgbm9ybWFsbHkgZGVmaW5lLCBhbmQKLS8v
IC0gTExWTSBpbmNsdWRlcyBpdHMgQysrIGhlYWRlcnMgZnJvbSBpdHMgQyBoZWFkZXJzLCBhbmQg
aXRzIEMrKwotLy8gICBoZWFkZXJzIGRvbid0IGNvbXBpbGUgY2xlYW5seSB3aXRoIG91ciB3YXJu
aW5ncy4KLQotI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TCi0jZGVmaW5lIF9fU1REQ19DT05T
VEFOVF9NQUNST1MKLQotI2lmIENPTVBJTEVSKENMQU5HKQotI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmctbm9y
ZXR1cm4iCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtcGFyYW1l
dGVyIgotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xbm9uLXZpcnR1YWwtZHRv
ciIKLSNlbmRpZiAvLyBDT01QSUxFUihDTEFORykKLQotI2luY2x1ZGUgPGxsdm0tYy9BbmFseXNp
cy5oPgotI2luY2x1ZGUgPGxsdm0tYy9CaXRSZWFkZXIuaD4KLSNpbmNsdWRlIDxsbHZtLWMvQ29y
ZS5oPgotI2luY2x1ZGUgPGxsdm0tYy9EaXNhc3NlbWJsZXIuaD4KLSNpbmNsdWRlIDxsbHZtLWMv
RXhlY3V0aW9uRW5naW5lLmg+Ci0jaW5jbHVkZSA8bGx2bS1jL0luaXRpYWxpemF0aW9uLmg+Ci0j
aW5jbHVkZSA8bGx2bS1jL0xpbmtlci5oPgotI2luY2x1ZGUgPGxsdm0tYy9UYXJnZXQuaD4KLSNp
bmNsdWRlIDxsbHZtLWMvVGFyZ2V0TWFjaGluZS5oPgotI2luY2x1ZGUgPGxsdm0tYy9UcmFuc2Zv
cm1zL0lQTy5oPgotI2luY2x1ZGUgPGxsdm0tYy9UcmFuc2Zvcm1zL1Bhc3NNYW5hZ2VyQnVpbGRl
ci5oPgotI2luY2x1ZGUgPGxsdm0tYy9UcmFuc2Zvcm1zL1NjYWxhci5oPgotCi0jaWYgQ09NUElM
RVIoQ0xBTkcpCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0jZW5kaWYgLy8gQ09NUElM
RVIoQ0xBTkcpCi0KLSN1bmRlZiBfX1NURENfTElNSVRfTUFDUk9TCi0jdW5kZWYgX19TVERDX0NP
TlNUQU5UX01BQ1JPUwotCi0jZW5kaWYgLy8gSEFWRShMTFZNKQotCi0jZW5kaWYgLy8gTExWTUhl
YWRlcnNfaAotCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL2xpYnJhcnkvTExW
TUFuY2hvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vbGli
cmFyeS9MTFZNQW5jaG9yLmNwcAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsdm0vbGlicmFyeS9MTFZNQW5jaG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwy
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLS8vIFRoaXMgaXMgYSBoYWNrIGZvciBlbnN1cmluZyB0aGF0IHRoZSBidWlsZCBzeXN0
ZW0gcmVsaW5rcyBKYXZhU2NyaXB0Q29yZSBpZiBhbnkKLS8vIG9mIHRoZSBMTFZNIGxpYnJhcmll
cyBhcmUga25vd24gdG8gaGF2ZSBjaGFuZ2VkLiBUaHMgZmlsZSB3aWxsIGdldCB0b3VjaGVkIGJ5
IG91cgotLy8gcGVybCBzY3JpcHRzIHRvIHRyaWdnZXIgYSByZWJ1aWxkIGlmIGEgY2hhbmdlIGlu
IExMVk0gd2FzIGRldGVjdGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vbGli
cmFyeS9MTFZNRXhwb3J0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsdm0vbGlicmFyeS9MTFZNRXhwb3J0cy5jcHAJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbHZtL2xpYnJhcnkvTExWTUV4cG9ydHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDE0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZ19sbHZtLmgiCi0KLSNpZiBIQVZFKExM
Vk0pCi0KLSNpbmNsdWRlICJMTFZNQVBJLmgiCi0jaW5jbHVkZSAiTExWTVRyYXBDYWxsYmFjay5o
IgotCi0vLyBJbmNsdWRlIHNvbWUgZXh0cmEgTExWTSBDKysgaGVhZGVycy4gVGhpcyBpcyB0aGUg
b25seSBwbGFjZSB3aGVyZSBpbmNsdWRpbmcgTExWTSBDKysKLS8vIGhlYWRlcnMgaXMgT0ssIHNp
bmNlIHRoaXMgbW9kdWxlIGxpdmVzIGluc2lkZSBvZiB0aGUgTExWTSBkeWxpYiB3ZSBtYWtlIGFu
ZCBzbyBjYW4gc2VlCi0vLyBvdGhlcndpc2UgcHJpdmF0ZSB0aGluZ3MuIEJ1dCB0byBpbmNsdWRl
IHRob3NlIGhlYWRlcnMsIHdlIG5lZWQgdG8gZG8gc29tZSB3ZWlyZCB0aGluZ3MKLS8vIGZpcnN0
LiBBbnl3YXksIHdlIHNob3VsZCBrZWVwIExMVk0gQysrIGluY2x1ZGVzIHRvIGEgbWluaW11bSBp
ZiBwb3NzaWJsZS4KLQotI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TCi0jZGVmaW5lIF9fU1RE
Q19DT05TVEFOVF9NQUNST1MKLQotI2lmIENPTVBJTEVSKENMQU5HKQotI3ByYWdtYSBjbGFuZyBk
aWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Np
bmctbm9yZXR1cm4iCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQt
cGFyYW1ldGVyIgotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xbm9uLXZpcnR1
YWwtZHRvciIKLSNlbmRpZiAvLyBDT01QSUxFUihDTEFORykKLQotI2luY2x1ZGUgPGxsdm0vU3Vw
cG9ydC9Db21tYW5kTGluZS5oPgotCi0jaWYgQ09NUElMRVIoQ0xBTkcpCi0jcHJhZ21hIGNsYW5n
IGRpYWdub3N0aWMgcG9wCi0jZW5kaWYgLy8gQ09NUElMRVIoQ0xBTkcpCi0KLSN1bmRlZiBfX1NU
RENfTElNSVRfTUFDUk9TCi0jdW5kZWYgX19TVERDX0NPTlNUQU5UX01BQ1JPUwotCi1zdGF0aWMg
dm9pZCBsbHZtQ3Jhc2goY29uc3QgY2hhciopIE5PX1JFVFVSTjsKLWV4dGVybiAiQyIgV1RGX0VY
UE9SVF9QUklWQVRFIEpTQzo6TExWTUFQSSogaW5pdGlhbGl6ZUFuZEdldEpTQ0xMVk1BUEkoCi0g
ICAgdm9pZCAoKikoY29uc3QgY2hhciosIC4uLikgTk9fUkVUVVJOLCBib29sKiBlbmFibGVGYXN0
SVNlbCk7Ci0KLXN0YXRpYyB2b2lkIGxsdm1DcmFzaChjb25zdCBjaGFyKiByZWFzb24pCi17Ci0g
ICAgZ19sbHZtVHJhcENhbGxiYWNrKCJMTFZNIGZhdGFsIGVycm9yOiAlcyIsIHJlYXNvbik7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+Ci12b2lkIGluaXRDb21tYW5kTGluZShBcmdz
Li4uIGFyZ3MpCi17Ci0gICAgY29uc3QgY2hhciogdGhlQXJnc1tdID0geyBhcmdzLi4uIH07Ci0g
ICAgbGx2bTo6Y2w6OlBhcnNlQ29tbWFuZExpbmVPcHRpb25zKHNpemVvZih0aGVBcmdzKSAvIHNp
emVvZihjb25zdCBjaGFyKiksIHRoZUFyZ3MpOwotfQotCi1leHRlcm4gIkMiIEpTQzo6TExWTUFQ
SSogaW5pdGlhbGl6ZUFuZEdldEpTQ0xMVk1BUEkoCi0gICAgdm9pZCAoKmNhbGxiYWNrKShjb25z
dCBjaGFyKiwgLi4uKSBOT19SRVRVUk4sCi0gICAgYm9vbCogZW5hYmxlRmFzdElTZWwpCi17Ci0g
ICAgZ19sbHZtVHJhcENhbGxiYWNrID0gY2FsbGJhY2s7Ci0gICAgCi0gICAgTExWTUluc3RhbGxG
YXRhbEVycm9ySGFuZGxlcihsbHZtQ3Jhc2gpOwotCi0gICAgaWYgKCFMTFZNU3RhcnRNdWx0aXRo
cmVhZGVkKCkpCi0gICAgICAgIGNhbGxiYWNrKCJDb3VsZCBub3Qgc3RhcnQgTExWTSBtdWx0aXRo
cmVhZGluZyIpOwotICAgIAotICAgIExMVk1MaW5rSW5NQ0pJVCgpOwotICAgIAotICAgIC8vIFlv
dSB0aGluayB5b3Ugd2FudCB0byBjYWxsIExMVk1Jbml0aWFsaXplTmF0aXZlVGFyZ2V0KCk/IFRo
aW5rIGFnYWluLiBUaGlzIHByZXN1bWVzIHRoYXQKLSAgICAvLyBMTFZNIHdhcyAuL2NvbmZpZ3Vy
ZWQgY29ycmVjdGx5LCB3aGljaCB3b24ndCBiZSB0aGUgY2FzZSBpbiBjcm9zcy1jb21waWxhdGlv
biBzaXR1YXRpb25zLgotICAgIAotI2lmIENQVShYODZfNjQpCi0gICAgTExWTUluaXRpYWxpemVY
ODZUYXJnZXRJbmZvKCk7Ci0gICAgTExWTUluaXRpYWxpemVYODZUYXJnZXQoKTsKLSAgICBMTFZN
SW5pdGlhbGl6ZVg4NlRhcmdldE1DKCk7Ci0gICAgTExWTUluaXRpYWxpemVYODZBc21QcmludGVy
KCk7Ci0gICAgTExWTUluaXRpYWxpemVYODZEaXNhc3NlbWJsZXIoKTsKLSNlbGlmIENQVShBUk02
NCkKLSNpZiBQTEFURk9STShJT1MpIHx8IE9TKExJTlVYKQotICAgIExMVk1Jbml0aWFsaXplQUFy
Y2g2NFRhcmdldEluZm8oKTsKLSAgICBMTFZNSW5pdGlhbGl6ZUFBcmNoNjRUYXJnZXQoKTsKLSAg
ICBMTFZNSW5pdGlhbGl6ZUFBcmNoNjRUYXJnZXRNQygpOwotICAgIExMVk1Jbml0aWFsaXplQUFy
Y2g2NEFzbVByaW50ZXIoKTsKLSAgICBMTFZNSW5pdGlhbGl6ZUFBcmNoNjREaXNhc3NlbWJsZXIo
KTsKLSNlbHNlCi0gICAgTExWTUluaXRpYWxpemVBUk02NFRhcmdldEluZm8oKTsKLSAgICBMTFZN
SW5pdGlhbGl6ZUFSTTY0VGFyZ2V0KCk7Ci0gICAgTExWTUluaXRpYWxpemVBUk02NFRhcmdldE1D
KCk7Ci0gICAgTExWTUluaXRpYWxpemVBUk02NEFzbVByaW50ZXIoKTsKLSAgICBMTFZNSW5pdGlh
bGl6ZUFSTTY0RGlzYXNzZW1ibGVyKCk7Ci0jZW5kaWYKLSNlbHNlCi0gICAgVU5SRUFDSEFCTEVf
Rk9SX1BMQVRGT1JNKCk7Ci0jZW5kaWYKLSAgICAKLSNpZiBMTFZNX1ZFUlNJT05fTUFKT1IgPj0g
NCB8fCAoTExWTV9WRVJTSU9OX01BSk9SID09IDMgJiYgTExWTV9WRVJTSU9OX01JTk9SID49IDYp
Ci0gICAgLy8gSXQncyBPSyB0byBoYXZlIGZhc3QgSVNlbCwgaWYgaXQgd2FzIHJlcXVlc3RlZC4K
LSNlbHNlCi0gICAgLy8gV2UgZG9uJ3QgaGF2ZSBlbm91Z2ggc3VwcG9ydCBmb3IgZmFzdCBJU2Vs
LiBEaXNhYmxlIGl0LgotICAgICplbmFibGVGYXN0SVNlbCA9IGZhbHNlOwotI2VuZGlmCi0KLSAg
ICBpZiAoKmVuYWJsZUZhc3RJU2VsKQotICAgICAgICBpbml0Q29tbWFuZExpbmUoImxsdm1Gb3JK
U0MuZHlsaWIiLCAiLWVuYWJsZS1taXNjaGVkPWZhbHNlIiwgIi1yZWdhbGxvYz1iYXNpYyIpOwot
ICAgIGVsc2UKLSAgICAgICAgaW5pdENvbW1hbmRMaW5lKCJsbHZtRm9ySlNDLmR5bGliIiwgIi1l
bmFibGUtcGF0Y2hwb2ludC1saXZlbmVzcz10cnVlIik7Ci0gICAgCi0gICAgSlNDOjpMTFZNQVBJ
KiByZXN1bHQgPSBuZXcgSlNDOjpMTFZNQVBJOwotICAgIAotICAgIC8vIEluaXRpYWxpemUgdGhl
IHdob2xlIHRoaW5nIHRvIG51bGwuCi0gICAgbWVtc2V0KHJlc3VsdCwgMCwgc2l6ZW9mKCpyZXN1
bHQpKTsKLSAgICAKLSNkZWZpbmUgTExWTV9BUElfRlVOQ1RJT05fQVNTSUdOTUVOVChyZXR1cm5U
eXBlLCBuYW1lLCBzaWduYXR1cmUpIFwKLSAgICByZXN1bHQtPm5hbWUgPSBMTFZNIyNuYW1lOwot
ICAgIEZPUl9FQUNIX0xMVk1fQVBJX0ZVTkNUSU9OKExMVk1fQVBJX0ZVTkNUSU9OX0FTU0lHTk1F
TlQpOwotI3VuZGVmIExMVk1fQVBJX0ZVTkNUSU9OX0FTU0lHTk1FTlQKLSAgICAKLSAgICAvLyBI
YW5kbGUgY29uZGl0aW9uYWxseSBhdmFpbGFibGUgZnVuY3Rpb25zLgotI2lmIExMVk1fVkVSU0lP
Tl9NQUpPUiA+PSA0IHx8IChMTFZNX1ZFUlNJT05fTUFKT1IgPT0gMyAmJiBMTFZNX1ZFUlNJT05f
TUlOT1IgPj0gNikKLSAgICByZXN1bHQtPkFkZExvd2VyU3dpdGNoUGFzcyA9IExMVk1BZGRMb3dl
clN3aXRjaFBhc3M7Ci0jZW5kaWYKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0jZWxz
ZQotCi0vLyBDcmVhdGUgYSBkdW1teSBpbml0aWFsaXplQW5kR2V0SlNDTExWTUFQSSB0byBwbGFj
YXRlIHRoZSBidWlsZCBzeXN0ZW0uCi1leHRlcm4gIkMiIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGluaXRpYWxpemVBbmRHZXRKU0NMTFZNQVBJKCk7Ci1leHRlcm4gIkMiIHZvaWQgaW5pdGlhbGl6
ZUFuZEdldEpTQ0xMVk1BUEkoKSB7IH0KLQotI2VuZGlmIC8vIEhBVkUoTExWTSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL2xpYnJhcnkvTExWTU92ZXJyaWRlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vbGlicmFyeS9MTFZNT3ZlcnJpZGVz
LmNwcAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vbGli
cmFyeS9MTFZNT3ZlcnJpZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1OSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJj
b25maWdfbGx2bS5oIgotCi0jaW5jbHVkZSAiTExWTVRyYXBDYWxsYmFjay5oIgotCi0jaWYgSEFW
RShMTFZNKQotCi1leHRlcm4gIkMiIGludCBfX2N4YV9hdGV4aXQoKTsKLWV4dGVybiAiQyIgaW50
IF9fY3hhX2F0ZXhpdCgpIHsgcmV0dXJuIDA7IH0KLQotdm9pZCAoKmdfbGx2bVRyYXBDYWxsYmFj
aykoY29uc3QgY2hhciogbWVzc2FnZSwgLi4uKSBOT19SRVRVUk47Ci0KLS8vIElmIExMVk0gdHJp
ZXMgdG8gcmFpc2Ugc2lnbmFscywgYWJvcnQsIG9yIGZhaWwgYW4gYXNzZXJ0aW9uLCB0aGVuIGxl
dAotLy8gV2ViS2l0IGhhbmRsZSBpdCBpbnN0ZWFkIG9mIHRyYXBwaW5nLgotZXh0ZXJuICJDIiBp
bnQgcmFpc2UoaW50IHNpZ25hbCk7Ci1leHRlcm4gIkMiIHZvaWQgX19hc3NlcnRfcnRuKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBmaWxlbmFtZSwgaW50IGxpbmVOdW1iZXIsIGNv
bnN0IGNoYXIqIGV4cHJlc3Npb24pIE5PX1JFVFVSTjsKLWV4dGVybiAiQyIgdm9pZCBhYm9ydCh2
b2lkKSBOT19SRVRVUk47Ci0KLWV4dGVybiAiQyIgaW50IHJhaXNlKGludCBzaWduYWwpCi17Ci0g
ICAgZ19sbHZtVHJhcENhbGxiYWNrKCJyYWlzZSglZCkgY2FsbGVkLiIsIHNpZ25hbCk7Ci0gICAg
cmV0dXJuIDA7Ci19Ci1leHRlcm4gIkMiIHZvaWQgX19hc3NlcnRfcnRuKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uLCBjb25zdCBjaGFyKiBmaWxlbmFtZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IGNoYXIq
IGV4cHJlc3Npb24pCi17Ci0gICAgaWYgKGZ1bmN0aW9uKQotICAgICAgICBnX2xsdm1UcmFwQ2Fs
bGJhY2soIkFzc2VydGlvbiBmYWlsZWQ6ICglcyksIGZ1bmN0aW9uICVzLCBmaWxlICVzLCBsaW5l
ICVkLiIsIGV4cHJlc3Npb24sIGZ1bmN0aW9uLCBmaWxlbmFtZSwgbGluZU51bWJlcik7Ci0gICAg
Z19sbHZtVHJhcENhbGxiYWNrKCJBc3NlcnRpb24gZmFpbGVkOiAoJXMpLCBmaWxlICVzLCBsaW5l
ICVkLiIsIGV4cHJlc3Npb24sIGZpbGVuYW1lLCBsaW5lTnVtYmVyKTsKLX0KLWV4dGVybiAiQyIg
dm9pZCBhYm9ydCh2b2lkKQotewotICAgIGdfbGx2bVRyYXBDYWxsYmFjaygiYWJvcnQoKSBjYWxs
ZWQuIik7Ci19Ci0KLSNlbmRpZiAvLyBIQVZFKExMVk0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGx2bS9saWJyYXJ5L2NvbmZpZ19sbHZtLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsdm0vbGlicmFyeS9jb25maWdfbGx2bS5oCShyZXZpc2lvbiAxOTY2ODUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9saWJyYXJ5L2NvbmZpZ19sbHZtLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaWYgZGVmaW5lZChIQVZFX0NPTkZJR19IKSAmJiBIQVZFX0NP
TkZJR19ICi0jaWZkZWYgQlVJTERJTkdfV0lUSF9DTUFLRQotI2luY2x1ZGUgImNtYWtlY29uZmln
LmgiCi0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgotI2luY2x1ZGUg
PHd0Zi9FeHBvcnRNYWNyb3MuaD4KLQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NjY4NikKKysrIFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTYtMDIt
MTcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgTExW
TSBkZXBlbmRlbmNpZXMgZnJvbSBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1NDMyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMTYtMDItMTYgIEZpbGlw
IFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGVExfVVNFU19CMyBzaG91bGQg
YmUgdW5jb25kaXRpb25hbGx5IHRydWUKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMTk2Njg2
KQorKysgU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtNzExLDEx
ICs3MTEsNiBAQAogI2RlZmluZSBFTkFCTEVfSklUIDEKICNlbmRpZgogCi0vKiBEbyB3ZSBoYXZl
IExMVk0/ICovCi0jaWYgIWRlZmluZWQoSEFWRV9MTFZNKSAmJiBPUyhEQVJXSU4pICYmICFQTEFU
Rk9STShFRkwpICYmICFQTEFURk9STShHVEspICYmIEVOQUJMRShGVExfSklUKSAmJiAoQ1BVKFg4
Nl82NCkgfHwgQ1BVKEFSTTY0KSkKLSNkZWZpbmUgSEFWRV9MTFZNIDEKLSNlbmRpZgotCiAvKiBU
aGUgRlRMICpkb2VzIG5vdCogd29yayBvbiAzMi1iaXQgcGxhdGZvcm1zLiBEaXNhYmxlIGl0IGV2
ZW4gaWYgc29tZW9uZSBhc2tlZCB1cyB0byBlbmFibGUgaXQuICovCiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKICN1bmRlZiBFTkFCTEVfRlRMX0pJVApAQCAtNzI4LDEyICs3MjMsNiBAQAogI2RlZmlu
ZSBFTkFCTEVfRlRMX0pJVCAwCiAjZW5kaWYKIAotLyogSWYgcG9zc2libGUsIHRyeSB0byBlbmFi
bGUgdGhlIExMVk0gZGlzYXNzZW1ibGVyLiBUaGlzIGlzIG9wdGlvbmFsIGFuZCB3ZSBjYW4KLSAg
IGZhbGwgYmFjayBvbiBVRGlzODYgaWYgbmVjZXNzYXJ5LiAqLwotI2lmICFkZWZpbmVkKFVTRV9M
TFZNX0RJU0FTU0VNQkxFUikgJiYgSEFWRShMTFZNKSAmJiAoQ1BVKFg4Nl82NCkgfHwgQ1BVKFg4
NikgfHwgQ1BVKEFSTTY0KSkKLSNkZWZpbmUgVVNFX0xMVk1fRElTQVNTRU1CTEVSIDEKLSNlbmRp
ZgotCiAvKiBJZiBwb3NzaWJsZSwgdHJ5IHRvIGVuYWJsZSBhIGRpc2Fzc2VtYmxlci4gVGhpcyBp
cyBvcHRpb25hbC4gV2UgcHJvY2VlZCBpbiB0d28KICAgIHN0ZXBzOiBmaXJzdCB3ZSB0cnkgdG8g
ZmluZCBzb21lIGRpc2Fzc2VtYmxlciB0aGF0IHdlIGNhbiB1c2UsIGFuZCB0aGVuIHdlCiAgICBk
ZWNpZGUgaWYgdGhlIGhpZ2gtbGV2ZWwgZGlzYXNzZW1ibGVyIEFQSSBjYW4gYmUgZW5hYmxlZC4g
Ki8KQEAgLTc0MiwxMSArNzMxLDExIEBACiAjZGVmaW5lIFVTRV9VRElTODYgMQogI2VuZGlmCiAK
LSNpZiAhZGVmaW5lZChFTkFCTEVfRElTQVNTRU1CTEVSKSAmJiAoVVNFKFVESVM4NikgfHwgVVNF
KExMVk1fRElTQVNTRU1CTEVSKSkKKyNpZiAhZGVmaW5lZChFTkFCTEVfRElTQVNTRU1CTEVSKSAm
JiBVU0UoVURJUzg2KQogI2RlZmluZSBFTkFCTEVfRElTQVNTRU1CTEVSIDEKICNlbmRpZgogCi0j
aWYgIWRlZmluZWQoVVNFX0FSTTY0X0RJU0FTU0VNQkxFUikgJiYgRU5BQkxFKEpJVCkgJiYgQ1BV
KEFSTTY0KSAmJiAhVVNFKExMVk1fRElTQVNTRU1CTEVSKQorI2lmICFkZWZpbmVkKFVTRV9BUk02
NF9ESVNBU1NFTUJMRVIpICYmIEVOQUJMRShKSVQpICYmIENQVShBUk02NCkKICNkZWZpbmUgVVNF
X0FSTTY0X0RJU0FTU0VNQkxFUiAxCiAjZW5kaWYKIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2NzIxKQorKysgVG9vbHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTYtMDItMTcgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgTExWTSBkZXBl
bmRlbmNpZXMgZnJvbSBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1NDMyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogU2NyaXB0cy9jb3B5LXdlYmtpdGxpYnJhcmllcy10by1wcm9kdWN0LWRp
cmVjdG9yeToKKyAgICAgICAgKGlzQ29udGVudE9mRmlsZUVxdWFsVG9TdHJpbmcpOgorICAgICAg
ICAoZmlsZUNvbnRhaW5zKTogRGVsZXRlZC4KKyAgICAgICAgKGJ1aWxkTExWTSk6IERlbGV0ZWQu
CisgICAgICAgIChzeW1saW5rTExWTUxpYnJhcmllc0lmTmVlZGVkKTogRGVsZXRlZC4KKwogMjAx
Ni0wMi0xNiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBhbiBl
bnN1cmUgZnVuY3Rpb24gb24gSGFzaE1hcCB0aGF0IHRha2VzIGEga2V5IGFuZCBhIGZ1bmN0aW9u
IHRvIG1ha2UgdGhlIGxhenkgdmFsdWUgaW5pdGlhbGl6YXRpb24gaWRpb20gZWFzaWVyCkluZGV4
OiBUb29scy9TY3JpcHRzL2NvcHktd2Via2l0bGlicmFyaWVzLXRvLXByb2R1Y3QtZGlyZWN0b3J5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvY29weS13ZWJraXRsaWJyYXJpZXMtdG8tcHJv
ZHVjdC1kaXJlY3RvcnkJKHJldmlzaW9uIDE5NjY4NSkKKysrIFRvb2xzL1NjcmlwdHMvY29weS13
ZWJraXRsaWJyYXJpZXMtdG8tcHJvZHVjdC1kaXJlY3RvcnkJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAjIS91c3IvYmluL3BlcmwgLXcKIAotIyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIw
MDgsIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDgsIDIwMTAsIDIwMTEsIDIwMTIsIDIw
MTMsIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw5ICszMCw2IEBAIHVzZSBHZXRvcHQ6OkxvbmcgcXco
OmNvbmZpZyBwYXNzX3Rocm91Z2gKIHVzZSBsaWIgJEZpbmRCaW46OkJpbjsKIHVzZSB3ZWJraXRk
aXJzOwogCi1zdWIgYnVpbGRMTFZNKCQpOwotc3ViIHN5bWxpbmtMTFZNTGlicmFyaWVzSWZOZWVk
ZWQoJCQpOwotCiBteSAkc2hvd0hlbHAgPSAwOwogbXkgJGxsdm0gPSAwOwogbXkgJHdrc2kgPSAw
OwpAQCAtNTAsMTUgKzQ3LDkgQEAgbXkgJHByb2dyYW1OYW1lID0gYmFzZW5hbWUoJDApOwogbXkg
JHVzYWdlID0gPDxFT0Y7CiBVc2FnZTogJHByb2dyYW1OYW1lIFtvcHRpb25zXQogICAtLWhlbHAg
ICAgICAgICAgICAgICAgICAgICAgICBTaG93IHRoaXMgaGVscCBtZXNzYWdlCi0gIC0tW25vLV1s
bHZtICAgICAgICAgICAgICAgICAgIFRvZ2dsZSBjb3B5aW5nIExMVk0gZHJvcHMgKGRlZmF1bHQ6
ICRsbHZtKQogICAtLVtuby1dd2tzaSAgICAgICAgICAgICAgICAgICBUb2dnbGUgY29weWluZyBX
ZWJLaXRTeXN0ZW1JbnRlcmZhY2UgZHJvcHMgKGRlZmF1bHQ6ICR3a3NpKQogICAtLWNsZWFuICAg
ICAgICAgICAgICAgICAgICAgICBDbGVhbiB0aGUgbGlicmFyaWVzIChkZWZhdWx0OiAkY2xlYW4p
Ci0gIC0tdXNlLWxsdm0taW5jbHVkZXM9PHBhdGg+ICAgIEdldCB0aGUgTExWTSBpbmx1ZGVzIHBh
Y2thZ2UgZnJvbSA8cGF0aD4KLSAgLS11c2UtbGx2bS1saWJyYXJpZXM9PHBhdGg+ICAgR2V0IHRo
ZSBMTFZNIGxpYnJhcmllcyBwYWNrYWdlIGZyb20gPHBhdGg+CiAgIC0tW25vLV11c2UtZnVsbC1s
aWItcGF0aHMgICAgIFRvZ2dsZSB1c2luZyBmdWxsIGxpYnJhcnkgcGF0aHMKLSAgLS1bbm8tXXBy
ZWZlci1zeXN0ZW0tbGx2bSAgICAgVG9nZ2xlIHByZWZlcnJpbmcgdGhlIHN5c3RlbSBMTFZNIG92
ZXIgdGhlIGJpbmFyeSBkcm9wcyAoZGVmYXVsdDogJHByZWZlclN5c3RlbUxMVk1PdmVyRHJvcHMp
Ci0gIC0tbGx2bS1zdWJkaXJlY3Rvcnk9PG5hbWU+ICAgIFNldCB0aGUgbmFtZSBvZiB0aGUgTExW
TSBzdWJkaXJlY3RvcnkgdG8gc2VhcmNoIGZvciAoZGVmYXVsdDogJGxsdm1TdWJkaXJlY3RvcnlO
YW1lKQotICAtLWxsdm0tcHJlZml4PTxwYXRoPiAgICAgICAgICBTZXQgdGhlIHByZWZpeCBpbnRv
IHdoaWNoIExMVk0gaXMgaW5zdGFsbGVkIChkZWZhdWx0OiAkbGx2bVByZWZpeCkKICAgLS1zZGs9
PHNkaz4gICAgICAgICAgICAgICAgICAgVXNlIGEgc3BlY2lmaWMgWGNvZGUgU0RLCiAgIC0tZGV2
aWNlICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgY3VycmVudCBpcGhvbmVvcy5pbnRlcm5h
bCBTREsgKGlPUyBvbmx5KQogICAtLXNpbXVsYXRvciAgICAgICAgICAgICAgICAgICBVc2UgdGhl
IGN1cnJlbnQgaXBob25lc2ltdWxhdG9yIFNESyAoaU9TIG9ubHkpCkBAIC0xNDAsMTAgKzEzMSw4
IEBAIHN1YiBkaXR0b0hlYWRlcnMKIGlmICgkY2xlYW4pIHsKICAgICBwcmludCAiQ2xlYW5pbmcu
XG4iOyAgICAKICAgICAoc3lzdGVtKCJybSIsICItcmYiLCBGaWxlOjpTcGVjLT5jYXRmaWxlKCRw
cm9kdWN0RGlyLCAidXNyIiwgImxvY2FsIiwgImluY2x1ZGUiLCAiV2ViS2l0U3lzdGVtSW50ZXJm
YWNlLmgiKSkgPT0gMCkgb3IgZGllOwotICAgIChzeXN0ZW0oInJtIiwgIi1yZiIsICIkcHJvZHVj
dERpciRsbHZtUHJlZml4IikgPT0gMCkgb3IgZGllOwogICAgIHVubGluayBnbG9iICIkcHJvZHVj
dERpci9saWJXZWJLaXRTeXN0ZW1JbnRlcmZhY2UqIiBvciBkaWUgaWYgZ2xvYiAiJHByb2R1Y3RE
aXIvbGliV2ViS2l0U3lzdGVtSW50ZXJmYWNlKiI7CiAgICAgdW5saW5rIGdsb2IgIiRwcm9kdWN0
RGlyL3Vzci9sb2NhbC9saWIvbGliV2ViS2l0U3lzdGVtSW50ZXJmYWNlKiIgb3IgZGllIGlmIGds
b2IgIiRwcm9kdWN0RGlyL3Vzci9sb2NhbC9saWIvbGliV2ViS2l0U3lzdGVtSW50ZXJmYWNlKiI7
Ci0gICAgdW5saW5rIGdsb2IgIiRwcm9kdWN0RGlyL2xpYkxMVk0qIiBvciBkaWUgaWYgZ2xvYiAi
JHByb2R1Y3REaXIvbGliTExWTSoiOwogICAgIHVubGluayBnbG9iICIkcHJvZHVjdERpci9saWJM
VE8qIiBvciBkaWUgaWYgZ2xvYiAiJHByb2R1Y3REaXIvbGliTFRPKiI7CiB9CiAKQEAgLTE4Miw3
OCArMTcxLDEwIEBAIGlmICgkd2tzaSkgewogfQogCiBpZiAoJGxsdm0pIHsKLSAgICAoc3lzdGVt
KCJta2RpciIsICItcCIsICIkcHJvZHVjdERpciRsbHZtUHJlZml4L2luY2x1ZGUiKSA9PSAwKSBv
ciBkaWU7Ci0KLSAgICBteSAkbGlicmFyeURpciA9ICR1c2VGdWxsTGliUGF0aHMgPyAiJHByb2R1
Y3REaXIkbGx2bVByZWZpeC9saWIiIDogJHByb2R1Y3REaXI7Ci0gICAgIyBBbHdheXMgY3JlYXRl
IGEgZGlyZWN0b3J5IGF0IHRoZSBmdWxsIGxpYnJhcnkgcGF0aCwgYmVjYXVzZSB0aGUgSmF2YVNj
cmlwdENvcmUgYnVpbGQgZW1pdHMgYSB3YXJuaW5nIGlmIGl0J3Mgbm90IHRoZXJlLgotICAgIChz
eXN0ZW0oIm1rZGlyIiwgIi1wIiwgIiRwcm9kdWN0RGlyJGxsdm1QcmVmaXgvbGliIikgPT0gMCkg
b3IgZGllOwotCi0gICAgKHN5c3RlbSgicm0iLCAiLWYiLCBGaWxlOjpTcGVjLT5jYXRmaWxlKCRw
cm9kdWN0RGlyLCAiRXh0cmFJbmNsdWRlc0ZvckxvY2FsTExWTUJ1aWxkIikpID09IDApIG9yIGRp
ZTsKLQotICAgIGlmICgkcHJlZmVyU3lzdGVtTExWTU92ZXJEcm9wcykgewotICAgICAgICBwcmlu
dCAiVXNpbmcgc3lzdGVtIExMVk0uXG4iOwotICAgICAgICBleGl0IDA7Ci0gICAgfQotCi0gICAg
bXkgJGxsdm1Tb3VyY2VEaXJlY3RvcnkgPSAkRU5We0xMVk1fU09VUkNFX1BBVEh9OwotICAgICRs
bHZtU291cmNlRGlyZWN0b3J5ID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKHNvdXJjZURpcigpLCAkbGx2
bVN1YmRpcmVjdG9yeU5hbWUpIHVubGVzcyAkbGx2bVNvdXJjZURpcmVjdG9yeTsKLSAgICBpZiAo
LWQgJGxsdm1Tb3VyY2VEaXJlY3RvcnkpIHsKLSAgICAgICAgbXkgJGxsdm1CdWlsZEZpbGUgPSBG
aWxlOjpTcGVjLT5jYXRmaWxlKCRsbHZtU291cmNlRGlyZWN0b3J5LCAiTExWTUJ1aWxkLnR4dCIp
OwotICAgICAgICBpZiAoLWYgJGxsdm1CdWlsZEZpbGUpIHsKLSAgICAgICAgICAgIHByaW50ICJV
c2luZyBMTFZNIHNvdXJjZSBmcm9tICRsbHZtU291cmNlRGlyZWN0b3J5LlxuIjsKLSAgICAgICAg
ICAgIGJ1aWxkTExWTSgkbGx2bVNvdXJjZURpcmVjdG9yeSk7Ci0gICAgICAgICAgICBpZiAoc3lt
bGlua0xMVk1MaWJyYXJpZXNJZk5lZWRlZCgkbGx2bVNvdXJjZURpcmVjdG9yeSwgJGxpYnJhcnlE
aXIpKSB7Ci0gICAgICAgICAgICAgICAgIyBMTFZNIGxpYnJhcmllcyBjaGFuZ2VkOyBtYWtlIEph
dmFTY3JpcHRDb3JlIHJlbGluayBhZ2FpbnN0IHRoZSBuZXcgTExWTSB0aGUgbmV4dCB0aW1lIGl0
IGlzIGJ1aWx0LgotICAgICAgICAgICAgICAgIChzeXN0ZW0oInRvdWNoIiwgIlNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbHZtL2xpYnJhcnkvTExWTUFuY2hvci5jcHAiKSA9PSAwKSBvciBkaWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBleGl0IDA7Ci0gICAgICAgIH0KLSAgICAgICAgcHJp
bnQgU1RERVJSICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqXG4iOwotICAgICAgICBwcmludCBTVERFUlIgIkNhbm5vdCBmaW5kIGZp
bGUgJyRsbHZtQnVpbGRGaWxlJy5cbiI7Ci0gICAgICAgIHByaW50IFNUREVSUiAiUGxlYXNlIGVu
c3VyZSB0aGF0IHlvdSBoYXZlIGEgY29tcGxldGUgTExWTSBkaXN0cmlidXRpb24uXG4iOwotICAg
ICAgICBwcmludCBTVERFUlIgIllvdSBjYW4gY2hlY2sgb3V0IExMVk0gdHJ1bmsgaW50byB0aGUg
V2ViS2l0IGRpcmVjdG9yeSBieSBydW5uaW5nOlxuIjsKLSAgICAgICAgcHJpbnQgU1RERVJSICJz
dm4gY28gaHR0cDovL2xsdm0ub3JnL3N2bi9sbHZtLXByb2plY3QvbGx2bS90cnVuayBsbHZtXG4i
OwotICAgICAgICBwcmludCBTVERFUlIgIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiI7Ci0gICAgICAgIGV4aXQgMTsKLSAgICB9
Ci0KLSAgICAkbGx2bUluY2x1ZGVQYWNrYWdlID0gJEVOVntMTFZNX0xJQlJBUllfUEFDS0FHRX0g
dW5sZXNzICRsbHZtSW5jbHVkZVBhY2thZ2U7Ci0gICAgJGxsdm1JbmNsdWRlUGFja2FnZSA9ICRF
TlZ7TExWTV9JTkNMVURFX1BBQ0tBR0V9IHVubGVzcyAkbGx2bUluY2x1ZGVQYWNrYWdlOwotICAg
IGlmICghJGxsdm1MaWJyYXJ5UGFja2FnZSB8fCAhJGxsdm1JbmNsdWRlUGFja2FnZSkgewotICAg
ICAgICBpZiAoaXNJT1NXZWJLaXQoKSkgewotICAgICAgICAgICAgbXkgJG1ham9yU0RLVmVyc2lv
biA9IGlvc1ZlcnNpb24oKS0+eyJtYWpvciJ9OwotICAgICAgICAgICAgJGxsdm1MaWJyYXJ5UGFj
a2FnZSA9ICJXZWJLaXRMaWJyYXJpZXMvTExWTUxpYnJhcmllc0lPUyRtYWpvclNES1ZlcnNpb24u
dGFyLmJ6MiI7Ci0gICAgICAgICAgICAkbGx2bUluY2x1ZGVQYWNrYWdlID0gIldlYktpdExpYnJh
cmllcy9MTFZNSW5jbHVkZXNJT1MkbWFqb3JTREtWZXJzaW9uLnRhci5iejIiOwotICAgICAgICB9
IGVsc2lmIChpc0FwcGxlTWFjV2ViS2l0KCkpIHsKLSAgICAgICAgICAgIGlmICgkb3N4VmVyc2lv
biBlcSAiMTAuMTAiKSB7Ci0gICAgICAgICAgICAgICAgJGxsdm1MaWJyYXJ5UGFja2FnZSA9ICJX
ZWJLaXRMaWJyYXJpZXMvTExWTUxpYnJhcmllc1lvc2VtaXRlLnRhci5iejIiOwotICAgICAgICAg
ICAgICAgICRsbHZtSW5jbHVkZVBhY2thZ2UgPSAiV2ViS2l0TGlicmFyaWVzL0xMVk1JbmNsdWRl
c1lvc2VtaXRlLnRhci5iejIiOwotICAgICAgICAgICAgfSBlbHNpZiAoJG9zeFZlcnNpb24gZXEg
IjEwLjExIikgewotICAgICAgICAgICAgICAgICRsbHZtTGlicmFyeVBhY2thZ2UgPSAiV2ViS2l0
TGlicmFyaWVzL0xMVk1MaWJyYXJpZXNFbENhcGl0YW4udGFyLmJ6MiI7Ci0gICAgICAgICAgICAg
ICAgJGxsdm1JbmNsdWRlUGFja2FnZSA9ICJXZWJLaXRMaWJyYXJpZXMvTExWTUluY2x1ZGVzRWxD
YXBpdGFuLnRhci5iejIiOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGlm
ICgkbGx2bUxpYnJhcnlQYWNrYWdlICYmICRsbHZtSW5jbHVkZVBhY2thZ2UpIHsKLSAgICAgICAg
cHJpbnQgIlVzaW5nIExMVk0gYmluYXJ5IGRyb3BzICRsbHZtTGlicmFyeVBhY2thZ2UgYW5kICRs
bHZtSW5jbHVkZVBhY2thZ2UuXG4iOwotICAgICAgICBpZiAodW5wYWNrSWZOZWNlc3NhcnkoJGxp
YnJhcnlEaXIsICIkbGlicmFyeURpci9saWJMTFZNQ29yZS5hIiwgJGxsdm1MaWJyYXJ5UGFja2Fn
ZSwgMSkpIHsKLSAgICAgICAgICAgICMgTExWTSBsaWJyYXJpZXMgY2hhbmdlZDsgbWFrZSBKYXZh
U2NyaXB0Q29yZSByZWxpbmsgYWdhaW5zdCB0aGUgbmV3IExMVk0gdGhlIG5leHQgdGltZSBpdCBp
cyBidWlsdC4KLSAgICAgICAgICAgIChzeXN0ZW0oInRvdWNoIiwgIlNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbHZtL2xpYnJhcnkvTExWTUFuY2hvci5jcHAiKSA9PSAwKSBvciBkaWU7Ci0gICAgICAg
IH0KLSAgICAgICAgdW5wYWNrSWZOZWNlc3NhcnkoRmlsZTo6U3BlYy0+Y2F0ZGlyKCIkcHJvZHVj
dERpciRsbHZtUHJlZml4IiwgImluY2x1ZGUiKSwgRmlsZTo6U3BlYy0+Y2F0ZmlsZSgiJHByb2R1
Y3REaXIkbGx2bVByZWZpeCIsICJpbmNsdWRlIiwgImxsdm0tYyIsICJDb3JlLmgiKSwgJGxsdm1J
bmNsdWRlUGFja2FnZSwgMCk7Ci0gICAgICAgIGV4aXQgMDsKLSAgICB9Ci0KLSAgICBwcmludCBT
VERFUlIgIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKipcbiI7Ci0gICAgcHJpbnQgU1RERVJSICJEb24ndCBrbm93IHdoZXJlIHRvIGZp
bmQgTExWTSFcbiI7Ci0gICAgcHJpbnQgU1RERVJSICJcbiI7Ci0gICAgcHJpbnQgU1RERVJSICJU
cnkgZGVmaW5pbmcgTExWTV9MSUJSQVJZX1BBQ0tBR0UgYW5kIExMVk1fSU5DTFVERV9QQUNLQUdF
IG9yIHNldHRpbmcgdGhlXG4iOwotICAgIHByaW50IFNUREVSUiAiLS11c2UtbGx2bS1pbmNsdWRl
cyBhbmQgLS11c2UtbGx2bS1saWJyYXJpZXMgb3B0aW9ucy5cbiI7Ci0gICAgcHJpbnQgU1RERVJS
ICJcbiI7Ci0gICAgcHJpbnQgU1RERVJSICJBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGNoZWNrIG91
dCBsbHZtIHRydW5rIGludG8gdGhlIFdlYktpdCBkaXJlY3Rvcnk6XG4iOwotICAgIHByaW50IFNU
REVSUiAic3ZuIGNvIGh0dHA6Ly9sbHZtLm9yZy9zdm4vbGx2bS1wcm9qZWN0L2xsdm0vdHJ1bmsg
bGx2bVxuIjsKLSAgICBwcmludCBTVERFUlIgIioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiI7Ci0gICAgZXhpdCAxOworICAgICMg
V2UgaGF2ZSB2YXJpb3VzIHNjcmlwdHMgdGhhdCBjYWxsIHRoaXMgc2NyaXB0IGFuZCBwYXNzIExM
Vk0tcmVsYXRlZCBvcHRpb25zLiBTbywgd2Ugc29ydCBvZgorICAgICMgc2lsZW50bHkgaWdub3Jl
IHRoZW0gZm9yIG5vdy4gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIG9uY2Ugd2UgY29uZmlybSB0aGF0
IHdlJ3ZlIGF4ZWQgYWxsIG9mIHRoZQorICAgICMgTExWTSBzdXBwb3J0IGV2ZXJ5d2hlcmUuCisg
ICAgcHJpbnQgIldhcm5pbmc6IHdlIG5vIGxvbmdlciBkZXBlbmQgb24gTExWTSBzbyB0aGlzIHNj
cmlwdCBkb2VzIG5vdGhpbmcgZm9yIExMVk0uIExMVk0tcmVsYXRlZCBvcHRpb25zIHdpbGwgYmUg
cmVtb3ZlZCBzb29uLlxuIjsKIH0KIAogc3ViIGZpbGVDb250YWlucwpAQCAtMjc1LDExMSArMTk2
LDMgQEAgc3ViIGlzQ29udGVudE9mRmlsZUVxdWFsVG9TdHJpbmcoJCQpCiAgICAgcmV0dXJuICRj
b250ZW50cyBlcSAkc3RyaW5nOwogfQogCi1zdWIgYnVpbGRMTFZNKCQpCi17Ci0gICAgbXkgKCRs
bHZtU291cmNlRGlyZWN0b3J5KSA9IEBfOwotCi0gICAgbXkgJHNhdmVkV29ya2luZ0RpcmVjdG9y
eSA9IGdldGN3ZCgpOwotICAgIGNob21wKG15ICRzZGtSb290RW52aXJvbm1lbnRWYXJpYWJsZSA9
IGB4Y3J1biBAe1t4Y29kZVNESygpID8gIi0tc2RrICIgLiB4Y29kZVNESygpIDogIiJdfSAtLXNo
b3ctc2RrLXBhdGhgKTsKLSAgICAkc2RrUm9vdEVudmlyb25tZW50VmFyaWFibGUgPSAiU0RLUk9P
VD0kc2RrUm9vdEVudmlyb25tZW50VmFyaWFibGUiOwotCi0gICAgbXkgJGxsdm1CYXNlUHJvZHVj
dERpcmVjdG9yeSA9IEZpbGU6OlNwZWMtPmNhdGRpcigkbGx2bVNvdXJjZURpcmVjdG9yeSwgIndr
TExWTUJ1aWxkIik7Ci0gICAgaWYgKCEtZSBGaWxlOjpTcGVjLT5jYXRmaWxlKCRsbHZtQmFzZVBy
b2R1Y3REaXJlY3RvcnksICJNYWtlZmlsZS5jb25maWciKSkgewotICAgICAgICBzeXN0ZW0oIm1r
ZGlyIiwgIi1wIiwgJGxsdm1CYXNlUHJvZHVjdERpcmVjdG9yeSk7Ci0gICAgICAgIGNoZGlyKCRs
bHZtQmFzZVByb2R1Y3REaXJlY3RvcnkpIG9yIGRpZTsKLSAgICAgICAgbXkgQGFyZ3MgPSBxdygK
LSAgICAgICAgICAgIC0tZW5hYmxlLW9wdGltaXplZD15ZXMKLSAgICAgICAgICAgIC0tZW5hYmxl
LWJhY2t0cmFjZXM9bm8KLSAgICAgICAgICAgIC0tZW5hYmxlLWxpYmNwcD15ZXMKLSAgICAgICAg
ICAgIC0tZW5hYmxlLXpsaWI9bm8KLSAgICAgICAgICAgIC0tZW5hYmxlLXRlcm1pbmZvPW5vCi0g
ICAgICAgICAgICAtLWVuYWJsZS1jcmFzaC1vdmVycmlkZXM9bm8KLSAgICAgICAgKTsKLSAgICAg
ICAgbXkgJHRhcmdldEFyY2hpdGVjdHVyZTsKLSAgICAgICAgaWYgKGlzSU9TV2ViS2l0KCkpIHsK
LSAgICAgICAgICAgICR0YXJnZXRBcmNoaXRlY3R1cmUgPSAiYXJtNjQiOwotICAgICAgICAgICAg
cHVzaCBAYXJncywgIi0taG9zdD1hcm0tYXBwbGUtZGFyd2luIjsKLSAgICAgICAgICAgIHB1c2gg
QGFyZ3MsICItLWVuYWJsZS10YXJnZXRzPSR0YXJnZXRBcmNoaXRlY3R1cmUiOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgJHRhcmdldEFyY2hpdGVjdHVyZSA9ICJ4ODZfNjQiOwotICAg
ICAgICAgICAgcHVzaCBAYXJncywgIi0tZW5hYmxlLXRhcmdldHM9JHRhcmdldEFyY2hpdGVjdHVy
ZSI7Ci0gICAgICAgIH0KLQotICAgICAgICAjIEVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgZXhw
bGljaXRseSBhcHBlbmRlZCBhZnRlciBjb21tYW5kIGxpbmUgb3B0aW9ucyBzbyB0aGF0Ci0gICAg
ICAgICMgdGhlIHNjcmlwdCBjb25maWd1cmUgY2FjaGVzIHRoZW0gaW4gZmlsZSBjb25maWcuc3Rh
dHVzIGZvciBhdXRvbWF0aWMgcmVjb25maWd1cmF0aW9uLgotICAgICAgICBpZiAoaXNJT1NXZWJL
aXQoKSkgewotICAgICAgICAgICAgIyBXZSBtdXN0IGV4cGxpY2l0bHkgc3BlY2lmeSB0aGUgdGFy
Z2V0IGFyY2hpdGVjdHVyZSB0byB0aGUgY29tcGlsZXIvcHJlcHJvY2Vzc29yCi0gICAgICAgICAg
ICAjIHNpbmNlIHdlIGFyZSBjcm9zcy1jb21waWxpbmcgTExWTS4KLSAgICAgICAgICAgIGZvciBt
eSAkZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgKHF3KENGTEFHUyBDWFhGTEFHUyBDUFBGTEFHUykp
IHsKLSAgICAgICAgICAgICAgICBwdXNoIEBhcmdzLCAiJGVudmlyb25tZW50VmFyaWFibGVOYW1l
PS1hcmNoICR0YXJnZXRBcmNoaXRlY3R1cmUiOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIHB1c2ggQGFyZ3MsICRzZGtSb290RW52aXJvbm1lbnRWYXJpYWJsZTsKLSAgICAgICAg
KHN5c3RlbSgiLi4vY29uZmlndXJlIiwgQGFyZ3MpID09IDApIG9yIGRpZTsKLSAgICB9Ci0KLSAg
ICBjaGRpcigkbGx2bUJhc2VQcm9kdWN0RGlyZWN0b3J5KSBvciBkaWU7Ci0gICAgbXkgJHNhdmVk
UGF0aCA9ICRFTlZ7IlBBVEgifTsKLQotICAgIG15ICRiaW5hcmllc0RpcmVjdG9yeSA9ICJiaW5h
cmllc0ZvckxMVk1CdWlsZCI7Ci0gICAgbXkgJHBhdGhFbnZpcm9ubWVudFZhcmlhYmxlID0gIiI7
Ci0gICAgaWYgKC1lICRiaW5hcmllc0RpcmVjdG9yeSkgewotICAgICAgICBteSAkYmluYXJpZXNQ
YXRoID0gRmlsZTo6U3BlYy0+cmVsMmFicygkYmluYXJpZXNEaXJlY3RvcnkpOwotICAgICAgICAk
cGF0aEVudmlyb25tZW50VmFyaWFibGUgPSAiUEFUSD0iIC4gam9pbigiOiIsICRiaW5hcmllc1Bh
dGgsICckUEFUSCcpOwotICAgIH0KLSAgICBteSAkbWFrZUNvbW1hbmQgPSAiZW52IC1pIGJhc2gg
LWwgLWMgXCIkcGF0aEVudmlyb25tZW50VmFyaWFibGUgJHNka1Jvb3RFbnZpcm9ubWVudFZhcmlh
YmxlIG1ha2UgLWogYHN5c2N0bCAtbiBody5hY3RpdmVjcHVgXCIiOwotICAgIHByaW50ICRtYWtl
Q29tbWFuZCAuICJcbiI7Ci0gICAgKHN5c3RlbSgkbWFrZUNvbW1hbmQpID09IDApIG9yIGRpZTsK
LQotICAgICRFTlZ7IlBBVEgifSA9ICRzYXZlZFBhdGg7Ci0gICAgY2hkaXIoJHNhdmVkV29ya2lu
Z0RpcmVjdG9yeSk7Ci19Ci0KLXN1YiBzeW1saW5rTExWTUxpYnJhcmllc0lmTmVlZGVkKCQkKQot
ewotICAgIG15ICgkbGx2bVNvdXJjZURpcmVjdG9yeSwgJGxpYnJhcnlUYXJnZXREaXJlY3Rvcnkp
ID0gQF87Ci0KLSAgICBteSAkbGx2bU1ha2VmaWxlQ29uZmlnID0gRmlsZTo6U3BlYy0+Y2F0Zmls
ZSgkbGx2bVNvdXJjZURpcmVjdG9yeSwgIndrTExWTUJ1aWxkIiwgIk1ha2VmaWxlLmNvbmZpZyIp
OwotICAgIG15ICRjb25maWd1cmF0aW9uRGlyZWN0b3J5TmFtZSA9ICIiOwotICAgIGlmIChmaWxl
Q29udGFpbnMoJGxsdm1NYWtlZmlsZUNvbmZpZywgIkVOQUJMRV9PUFRJTUlaRUQ9MSIpKSB7Ci0g
ICAgICAgICRjb25maWd1cmF0aW9uRGlyZWN0b3J5TmFtZSAuPSAiUmVsZWFzZSI7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgJGNvbmZpZ3VyYXRpb25EaXJlY3RvcnlOYW1lIC49ICJEZWJ1ZyI7Ci0g
ICAgfQotICAgICRjb25maWd1cmF0aW9uRGlyZWN0b3J5TmFtZSAuPSAiK0Fzc2VydHMiIHVubGVz
cyBmaWxlQ29udGFpbnMoJGxsdm1NYWtlZmlsZUNvbmZpZywgIkRJU0FCTEVfQVNTRVJUSU9OUz0x
Iik7Ci0gICAgbXkgJGxpYnJhcnlTb3VyY2VEaXJlY3RvcnkgPSBGaWxlOjpTcGVjLT5jYXRkaXIo
JGxsdm1Tb3VyY2VEaXJlY3RvcnksICJ3a0xMVk1CdWlsZCIsICRjb25maWd1cmF0aW9uRGlyZWN0
b3J5TmFtZSwgImxpYiIpOwotCi0gICAgbXkgJHNob3VsZFVwZGF0ZUxMVk1MaWJyYXJ5VG9rZW4g
PSAwOwotICAgIHByaW50KCJTeW1saW5raW5nIGxpYnJhcmllcyBmcm9tICRsaWJyYXJ5U291cmNl
RGlyZWN0b3J5IHRvICRsaWJyYXJ5VGFyZ2V0RGlyZWN0b3J5XG4iKTsKLSAgICBvcGVuZGlyKG15
ICRkaXJIYW5kbGUsICRsaWJyYXJ5U291cmNlRGlyZWN0b3J5KTsKLSAgICB3aGlsZSAobXkgJGZp
bGVuYW1lID0gcmVhZGRpcigkZGlySGFuZGxlKSkgewotICAgICAgICBuZXh0IGlmICRmaWxlbmFt
ZSAhfiAvXC5hJC87Ci0gICAgICAgIG5leHQgaWYgJGZpbGVuYW1lID1+IC9saWJndGVzdC87Ci0K
LSAgICAgICAgcHJpbnQgIiAgIFN5bWxpbmsgJGZpbGVuYW1lXG4iOwotICAgICAgICBteSAkc291
cmNlTGlicmFyeSA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJGxpYnJhcnlTb3VyY2VEaXJlY3Rvcnks
ICRmaWxlbmFtZSk7Ci0gICAgICAgIG15ICR0YXJnZXRMaWJyYXJ5ID0gRmlsZTo6U3BlYy0+Y2F0
ZmlsZSgkbGlicmFyeVRhcmdldERpcmVjdG9yeSwgJGZpbGVuYW1lKTsKLSAgICAgICAgbXkgJHJh
bmxpYlRva2VuID0gRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkbGlicmFyeVRhcmdldERpcmVjdG9yeSwg
Ii5yYW5saWJUb2tlbi0kZmlsZW5hbWUiKTsKLSAgICAgICAgdW5saW5rKCR0YXJnZXRMaWJyYXJ5
KTsKLSAgICAgICAgc3ltbGluaygkc291cmNlTGlicmFyeSwgJHRhcmdldExpYnJhcnkpOwotICAg
ICAgICBpZiAoJGZvcmNlIHx8ICEtZSAkcmFubGliVG9rZW4gfHwgIWlzQ29udGVudE9mRmlsZUVx
dWFsVG9TdHJpbmcoJHJhbmxpYlRva2VuLCAkc291cmNlTGlicmFyeSkgfHwgLU0gJHJhbmxpYlRv
a2VuID4gLU0gJHNvdXJjZUxpYnJhcnkpIHsKLSAgICAgICAgICAgIHByaW50ICIgICBSYW5saWIg
JGZpbGVuYW1lXG4iOwotICAgICAgICAgICAgZXhlY3V0ZVJhbmxpYigkdGFyZ2V0TGlicmFyeSk7
Ci0gICAgICAgICAgICBvcGVuKFJBTkxJQl9UT0tFTiwgIj4iLCAkcmFubGliVG9rZW4pIG9yIGRp
ZSAiRmFpbGVkIHRvIG9wZW4gJHJhbmxpYlRva2VuOiAkISI7Ci0gICAgICAgICAgICBwcmludCBS
QU5MSUJfVE9LRU4gJHNvdXJjZUxpYnJhcnk7Ci0gICAgICAgICAgICBjbG9zZShSQU5MSUJfVE9L
RU4pOwotICAgICAgICAgICAgJHNob3VsZFVwZGF0ZUxMVk1MaWJyYXJ5VG9rZW4gPSAxOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGNsb3NlZGlyKCRkaXJIYW5kbGUpOwotCi0gICAgbXkgJHRhcmdl
dEluY2x1ZGVMTFZNRGlyZWN0b3J5ID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKCIkcHJvZHVjdERpciRs
bHZtUHJlZml4IiwgImluY2x1ZGUiLCAibGx2bSIpOwotICAgIG15ICR0YXJnZXRJbmNsdWRlTExW
TUNEaXJlY3RvcnkgPSBGaWxlOjpTcGVjLT5jYXRkaXIoIiRwcm9kdWN0RGlyJGxsdm1QcmVmaXgi
LCAiaW5jbHVkZSIsICJsbHZtLWMiKTsKLSAgICAoc3lzdGVtKCJybSIsICItcmYiLCAkdGFyZ2V0
SW5jbHVkZUxMVk1EaXJlY3RvcnkpID09IDApIG9yIGRpZTsKLSAgICAoc3lzdGVtKCJybSIsICIt
cmYiLCAkdGFyZ2V0SW5jbHVkZUxMVk1DRGlyZWN0b3J5KSA9PSAwKSBvciBkaWU7Ci0gICAgc3lt
bGluayhGaWxlOjpTcGVjLT5jYXRkaXIoJGxsdm1Tb3VyY2VEaXJlY3RvcnksICJpbmNsdWRlIiwg
Imxsdm0iKSwgJHRhcmdldEluY2x1ZGVMTFZNRGlyZWN0b3J5KSBvciBkaWU7Ci0gICAgc3ltbGlu
ayhGaWxlOjpTcGVjLT5jYXRkaXIoJGxsdm1Tb3VyY2VEaXJlY3RvcnksICJpbmNsdWRlIiwgImxs
dm0tYyIpLCAkdGFyZ2V0SW5jbHVkZUxMVk1DRGlyZWN0b3J5KSBvciBkaWU7Ci0gICAgc3ltbGlu
ayhGaWxlOjpTcGVjLT5jYXRkaXIoJGxsdm1Tb3VyY2VEaXJlY3RvcnksICJ3a0xMVk1CdWlsZCIs
ICJpbmNsdWRlIiksIEZpbGU6OlNwZWMtPmNhdGZpbGUoJHByb2R1Y3REaXIsICJFeHRyYUluY2x1
ZGVzRm9yTG9jYWxMTFZNQnVpbGQiKSkgb3IgZGllOwotCi0gICAgcmV0dXJuICRzaG91bGRVcGRh
dGVMTFZNTGlicmFyeVRva2VuOwotfQo=
</data>
<flag name="review"
          id="296403"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271589</attachid>
            <date>2016-02-17 14:13:43 -0800</date>
            <delta_ts>2016-02-17 14:14:17 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>620816</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2Njg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1NSBA
QAorMjAxNi0wMi0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFJlbW92ZSBMTFZNIGRlcGVuZGVuY2llcyBmcm9tIFdlYktpdAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0MzIzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRm
Zy9ERkdDb21tb24uaDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpj
b21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21waWxlVGlt
ZVN0YXRzKToKKyAgICAgICAgKiBkaXNhc3NlbWJsZXIvQVJNNjREaXNhc3NlbWJsZXIuY3BwOgor
ICAgICAgICAoSlNDOjp0cnlUb0Rpc2Fzc2VtYmxlKToKKyAgICAgICAgKiBkaXNhc3NlbWJsZXIv
QVJNdjdEaXNhc3NlbWJsZXIuY3BwOgorICAgICAgICAoSlNDOjp0cnlUb0Rpc2Fzc2VtYmxlKToK
KyAgICAgICAgKiBkaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
ZGlzYXNzZW1ibGUpOgorICAgICAgICAoSlNDOjpkaXNhc3NlbWJsZUFzeW5jaHJvbm91c2x5KToK
KyAgICAgICAgKiBkaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6OnRy
eVRvRGlzYXNzZW1ibGUpOgorICAgICAgICAqIGRpc2Fzc2VtYmxlci9MTFZNRGlzYXNzZW1ibGVy
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBkaXNhc3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5o
OiBSZW1vdmVkLgorICAgICAgICAqIGRpc2Fzc2VtYmxlci9VRGlzODZEaXNhc3NlbWJsZXIuY3Bw
OgorICAgICAgICAoSlNDOjp0cnlUb0Rpc2Fzc2VtYmxlV2l0aFVEaXM4Nik6CisgICAgICAgICog
ZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjp0cnlUb0Rp
c2Fzc2VtYmxlV2l0aFVEaXM4Nik6CisgICAgICAgICogZGlzYXNzZW1ibGVyL1g4NkRpc2Fzc2Vt
Ymxlci5jcHA6CisgICAgICAgIChKU0M6OnRyeVRvRGlzYXNzZW1ibGUpOgorICAgICAgICAqIGZ0
bC9GVExBYmJyZXZpYXRlZFR5cGVzLmg6CisgICAgICAgICogZnRsL0ZUTEFiYnJldmlhdGlvbnMu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpBYnN0cmFjdEhlYXA6OmRlY29yYXRlSW5zdHJ1Y3Rpb24pOgorICAgICAgICAo
SlNDOjpGVEw6OkFic3RyYWN0SGVhcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzdHJh
Y3RGaWVsZDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkZUTDo6SW5kZXhlZEFic3RyYWN0SGVhcDo6
SW5kZXhlZEFic3RyYWN0SGVhcCk6CisgICAgICAgIChKU0M6OkZUTDo6SW5kZXhlZEFic3RyYWN0
SGVhcDo6fkluZGV4ZWRBYnN0cmFjdEhlYXApOgorICAgICAgICAoSlNDOjpGVEw6OkluZGV4ZWRB
YnN0cmFjdEhlYXA6OmJhc2VJbmRleCk6CisgICAgICAgIChKU0M6OkZUTDo6SW5kZXhlZEFic3Ry
YWN0SGVhcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkZUTDo6TnVtYmVyZWRBYnN0cmFjdEhlYXA6
Ok51bWJlcmVkQWJzdHJhY3RIZWFwKToKKyAgICAgICAgKEpTQzo6RlRMOjpOdW1iZXJlZEFic3Ry
YWN0SGVhcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkZUTDo6QWJzb2x1dGVBYnN0cmFjdEhlYXA6
OkFic29sdXRlQWJzdHJhY3RIZWFwKToKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXA6
OnRiYWFNZXRhZGF0YVNsb3cpOiBEZWxldGVkLgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhl
YXAuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpBYnN0cmFjdEhlYXA6OkFic3RyYWN0SGVhcCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6QWJzdHJhY3RIZWFwOjpoZWFwTmFtZSk6CisgICAgICAgIChKU0M6
OkZUTDo6SW5kZXhlZEFic3RyYWN0SGVhcDo6YXRBbnlJbmRleCk6CisgICAgICAgIChKU0M6OkZU
TDo6TnVtYmVyZWRBYnN0cmFjdEhlYXA6OmF0QW55TnVtYmVyKToKKyAgICAgICAgKEpTQzo6RlRM
OjpBYnNvbHV0ZUFic3RyYWN0SGVhcDo6YXRBbnlBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6RlRM
OjpBYnN0cmFjdEhlYXA6OnRiYWFNZXRhZGF0YSk6IERlbGV0ZWQuCisgICAgICAgICogZnRsL0ZU
TEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkFic3RyYWN0
SGVhcFJlcG9zaXRvcnk6OkFic3RyYWN0SGVhcFJlcG9zaXRvcnkpOgorICAgICAgICAqIGZ0bC9G
VExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTEIzQ29tcGlsZS5j
cHA6CisgICAgICAgICogZnRsL0ZUTEIzT3V0cHV0LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpP
dXRwdXQ6Ok91dHB1dCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpjaGVjayk6CisgICAg
ICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpsb2FkKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6
OnN0b3JlKToKKyAgICAgICAgKiBmdGwvRlRMQjNPdXRwdXQuaDoKKyAgICAgICAgKiBmdGwvRlRM
Q29tbW9uVmFsdWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpDb21tb25WYWx1ZXM6OkNvbW1v
blZhbHVlcyk6CisgICAgICAgIChKU0M6OkZUTDo6Q29tbW9uVmFsdWVzOjppbml0aWFsaXplQ29u
c3RhbnRzKToKKyAgICAgICAgKiBmdGwvRlRMQ29tbW9uVmFsdWVzLmg6CisgICAgICAgIChKU0M6
OkZUTDo6Q29tbW9uVmFsdWVzOjppbml0aWFsaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBmdGwv
RlRMQ29tcGlsZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZnRsL0ZUTENvbXBpbGVCaW5hcnlP
cC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZnRsL0ZUTENvbXBpbGVCaW5hcnlPcC5oOiBSZW1v
dmVkLgorICAgICAgICAqIGZ0bC9GVExEV0FSRkRlYnVnTGluZUluZm8uY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIGZ0bC9GVExEV0FSRkRlYnVnTGluZUluZm8uaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBmdGwvRlRMRFdBUkZSZWdpc3Rlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZnRsL0ZUTERX
QVJGUmVnaXN0ZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBmdGwvRlRMRGF0YVNlY3Rpb24uY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIGZ0bC9GVExEYXRhU2VjdGlvbi5oOiBSZW1vdmVkLgorICAg
ICAgICAqIGZ0bC9GVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlci5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogZnRsL0ZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmg6IFJlbW92ZWQuCisgICAgICAg
ICogZnRsL0ZUTEV4Y2VwdGlvblRhcmdldC5jcHA6CisgICAgICAgICogZnRsL0ZUTEV4Y2VwdGlv
blRhcmdldC5oOgorICAgICAgICAqIGZ0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIGZ0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBmdGwvRlRMRmFpbC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6ZmFpbCk6CisgICAg
ICAgICogZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oOiBSZW1vdmVkLgorICAgICAgICAq
IGZ0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGZ0bC9GVExJ
bmxpbmVDYWNoZVNpemUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBmdGwvRlRMSW50cmluc2ljUmVw
b3NpdG9yeS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRv
cnkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6SklUQ29kZTo6fkpJVENvZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6
OmluaXRpYWxpemVCM0NvZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmluaXRpYWxp
emVCM0J5cHJvZHVjdHMpOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmluaXRpYWxpemVB
ZGRyZXNzRm9yQ2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6Y29udGFpbnMpOgor
ICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmZ0bCk6CisgICAgICAgIChKU0M6OkZUTDo6SklU
Q29kZTo6bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUp
OgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmluaXRpYWxpemVFeGl0VGh1bmtzKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjphZGRIYW5kbGUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmFkZERhdGFTZWN0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjpleGl0VGh1bmtzKTogRGVsZXRlZC4KKyAgICAgICAg
KiBmdGwvRlRMSklUQ29kZS5oOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmIzQ29kZSk6
CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6aGFuZGxlcyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkZUTDo6SklUQ29kZTo6ZGF0YVNlY3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiBm
dGwvRlRMSklURmluYWxpemVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRGaW5hbGl6ZXI6
OmNvZGVTaXplKToKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVu
Y3Rpb24pOgorICAgICAgICAqIGZ0bC9GVExKSVRGaW5hbGl6ZXIuaDoKKyAgICAgICAgKiBmdGwv
RlRMSlNDYWxsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBmdGwvRlRMSlNDYWxsLmg6IFJlbW92
ZWQuCisgICAgICAgICogZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IGZ0bC9GVExKU0NhbGxCYXNlLmg6IFJlbW92ZWQuCisgICAgICAgICogZnRsL0ZUTEpTQ2FsbFZh
cmFyZ3MuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGZ0bC9GVExKU0NhbGxWYXJhcmdzLmg6IFJl
bW92ZWQuCisgICAgICAgICogZnRsL0ZUTEpTVGFpbENhbGwuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIGZ0bC9GVExKU1RhaWxDYWxsLmg6IFJlbW92ZWQuCisgICAgICAgICogZnRsL0ZUTExhenlT
bG93UGF0aC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TGF6eVNsb3dQYXRoOjpMYXp5U2xvd1Bh
dGgpOgorICAgICAgICAoSlNDOjpGVEw6OkxhenlTbG93UGF0aDo6Z2VuZXJhdGUpOgorICAgICAg
ICAqIGZ0bC9GVExMYXp5U2xvd1BhdGguaDoKKyAgICAgICAgKEpTQzo6RlRMOjpMYXp5U2xvd1Bh
dGg6OmNyZWF0ZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkZUTDo6TGF6eVNsb3dQYXRoOjpw
YXRjaGFibGVKdW1wKToKKyAgICAgICAgKEpTQzo6RlRMOjpMYXp5U2xvd1BhdGg6OmRvbmUpOgor
ICAgICAgICAoSlNDOjpGVEw6OkxhenlTbG93UGF0aDo6dXNlZFJlZ2lzdGVycyk6CisgICAgICAg
IChKU0M6OkZUTDo6TGF6eVNsb3dQYXRoOjpjYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpTQzo6
RlRMOjpMYXp5U2xvd1BhdGg6OnN0dWIpOgorICAgICAgICAoSlNDOjpGVEw6OkxhenlTbG93UGF0
aDo6cGF0Y2hwb2ludCk6IERlbGV0ZWQuCisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAg
ICAgICAoSlNDOjpGVEw6OmxpbmspOgorICAgICAgICAqIGZ0bC9GVExMb2NhdGlvbi5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG9jYXRpb246OmZvclZhbHVlUmVwKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb2NhdGlvbjo6ZHVtcCk6CisgICAgICAgIChKU0M6OkZUTDo6TG9jYXRpb246OmZvclN0
YWNrbWFwcyk6IERlbGV0ZWQuCisgICAgICAgICogZnRsL0ZUTExvY2F0aW9uLmg6CisgICAgICAg
IChKU0M6OkZUTDo6TG9jYXRpb246OmZvclJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b2NhdGlvbjo6Zm9ySW5kaXJlY3QpOgorICAgICAgICAoSlNDOjpGVEw6OkxvY2F0aW9uOjpmb3JD
b25zdGFudCk6CisgICAgICAgIChKU0M6OkZUTDo6TG9jYXRpb246OmtpbmQpOgorICAgICAgICAo
SlNDOjpGVEw6OkxvY2F0aW9uOjpoYXNSZWcpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6TG93ZXJE
RkdUb0xMVk0pOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06Omxvd2Vy
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjcmVhdGVQaGlWYXJp
YWJsZXMpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVO
b2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlVXBz
aWxvbik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVBo
aSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZURvdWJs
ZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21w
aWxlVmFsdWVBZGQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNv
bXBpbGVTdHJDYXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNv
bXBpbGVBcml0aEFkZE9yU3ViKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9M
TFZNOjpjb21waWxlQXJpdGhNdWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0xMVk06OmNvbXBpbGVBcml0aERpdik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvTExWTTo6Y29tcGlsZUFyaXRoTmVnYXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlQml0QW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlQml0T3IpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0xMVk06OmNvbXBpbGVCaXRYb3IpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0xMVk06OmNvbXBpbGVCaXRSU2hpZnQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0xMVk06OmNvbXBpbGVCaXRMU2hpZnQpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVCaXRVUlNoaWZ0KToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlUHV0QnlJZCk6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldEJ1dHRlcmZseSk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU1ha2VSb3BlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ2FsbE9yQ29uc3RydWN0KToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlVGFpbENhbGwp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDYWxsT3JD
b25zdHJ1Y3RWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlTG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0xMVk06OmNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUlzVW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlSW4pOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0xMVk06OmdldEJ5SWQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0xMVk06OmxvYWRCdXR0ZXJmbHlXaXRoQmFycmllcik6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvTExWTTo6c3RyaW5nc0VxdWFsKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9MTFZNOjplbWl0UmlnaHRTaGlmdFNuaXBwZXQpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmFsbG9jYXRlQ2VsbCk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6bGF6eVNsb3dQYXRoKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGUpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNhbGxDaGVjayk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvTExWTTo6cHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpsb3dCbG9jayk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6YXBwZW5kT1NSRXhpdERlc2NyaXB0b3Ip
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmFwcGVuZE9TUkV4aXQp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmJsZXNzU3BlY3VsYXRp
b24pOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmJ1aWxkRXhpdEFy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6ZXhpdFZh
bHVlRm9yQXZhaWxhYmlsaXR5KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9M
TFZNOjpleGl0VmFsdWVGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9MTFZNOjpwcm9iZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6
Y3Jhc2gpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVV
bnR5cGVkQmluYXJ5T3ApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0xMVk06OmFwcGVuZE9TUkV4aXRBcmd1bWVudHNGb3JQYXRjaHBvaW50SWZXaWxsQ2F0Y2hF
eGNlcHRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xM
Vk06OmVtaXRPU1JFeGl0Q2FsbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvTExWTTo6Y2FsbFN0YWNrbWFwKTogRGVsZXRlZC4KKyAgICAgICAgKiBmdGwvRlRM
T1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdERlc2NyaXB0b3I6Ok9TUkV4
aXREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0RGVzY3JpcHRvcjo6dmFs
aWRhdGVSZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0RGVzY3JpcHRvcjo6
ZW1pdE9TUkV4aXQpOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXREZXNjcmlwdG9yOjpwcmVw
YXJlT1NSRXhpdEhhbmRsZSk6CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdDo6T1NSRXhpdCk6
CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdDo6Z2F0aGVyUmVnaXN0ZXJzVG9TcGlsbEZvckNhbGxJ
ZkV4Y2VwdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdDo6c3BpbGxS
ZWdpc3RlcnNUb1NwaWxsU2xvdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhp
dDo6cmVjb3ZlclJlZ2lzdGVyc0Zyb21TcGlsbFNsb3QpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpGVEw6Ok9TUkV4aXQ6OndpbGxBcnJpdmVBdEV4aXRGcm9tSW5kaXJlY3RFeGNlcHRpb25DaGVj
ayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdDo6d2lsbEFycml2ZUF0T1NS
RXhpdEZyb21DYWxsT3BlcmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpPU1JF
eGl0OjpuZWVkc1JlZ2lzdGVyUmVjb3ZlcnlPbkdlbmVyaWNVbndpbmRPU1JFeGl0UGF0aCk6IERl
bGV0ZWQuCisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpP
U1JFeGl0Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZSk6CisgICAgICAgIChKU0M6
OkZUTDo6T1NSRXhpdERlc2NyaXB0b3JJbXBsOjpPU1JFeGl0RGVzY3JpcHRvckltcGwpOiBEZWxl
dGVkLgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmg6IFJlbW92ZWQu
CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6Y29tcGlsZVJlY292ZXJ5KToKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZUZUTE9TUkV4aXQpOgorICAgICAgICAqIGZ0bC9GVExP
U1JFeGl0SGFuZGxlLmNwcDoKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdEhhbmRsZS5oOgorICAg
ICAgICAqIGZ0bC9GVExPdXRwdXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGZ0bC9GVExPdXRw
dXQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBmdGwvRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRs
ZS5jcHA6CisgICAgICAgICogZnRsL0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaDoKKyAg
ICAgICAgKiBmdGwvRlRMU3RhY2tNYXBzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBmdGwvRlRM
U3RhY2tNYXBzLmg6IFJlbW92ZWQuCisgICAgICAgICogZnRsL0ZUTFN0YXRlLmNwcDoKKyAgICAg
ICAgKEpTQzo6RlRMOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoSlNDOjpGVEw6OlN0YXRlOjp+
U3RhdGUpOgorICAgICAgICAoSlNDOjpGVEw6OlN0YXRlOjpkdW1wU3RhdGUpOiBEZWxldGVkLgor
ICAgICAgICAqIGZ0bC9GVExTdGF0ZS5oOgorICAgICAgICAqIGZ0bC9GVExVbndpbmRJbmZvLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBmdGwvRlRMVW53aW5kSW5mby5oOiBSZW1vdmVkLgorICAg
ICAgICAqIGZ0bC9GVExWYWx1ZVJhbmdlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVJh
bmdlOjpkZWNvcmF0ZUluc3RydWN0aW9uKToKKyAgICAgICAgKiBmdGwvRlRMVmFsdWVSYW5nZS5o
OgorICAgICAgICAoSlNDOjpGVEw6OlZhbHVlUmFuZ2U6OlZhbHVlUmFuZ2UpOgorICAgICAgICAo
SlNDOjpGVEw6OlZhbHVlUmFuZ2U6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVJh
bmdlOjplbmQpOgorICAgICAgICAqIGZ0bC9GVExXZWlnaHQuaDoKKyAgICAgICAgKEpTQzo6RlRM
OjpXZWlnaHQ6OnZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpXZWlnaHQ6OmZyZXF1ZW5jeUNs
YXNzKToKKyAgICAgICAgKEpTQzo6RlRMOjpXZWlnaHQ6OnNjYWxlVG9Ub3RhbCk6CisgICAgICAg
ICogbGx2bS9Jbml0aWFsaXplTExWTS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogbGx2bS9Jbml0
aWFsaXplTExWTS5oOiBSZW1vdmVkLgorICAgICAgICAqIGxsdm0vSW5pdGlhbGl6ZUxMVk1NYWMu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIGxsdm0vSW5pdGlhbGl6ZUxMVk1QT1NJWC5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogbGx2bS9Jbml0aWFsaXplTExWTVBPU0lYLmg6IFJlbW92ZWQuCisg
ICAgICAgICogbGx2bS9MTFZNQVBJLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBsbHZtL0xMVk1B
UEkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBsbHZtL0xMVk1BUElGdW5jdGlvbnMuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBsbHZtL0xMVk1IZWFkZXJzLmg6IFJlbW92ZWQuCisgICAgICAgICogbGx2
bS9saWJyYXJ5L0xMVk1BbmNob3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGxsdm0vbGlicmFy
eS9MTFZNRXhwb3J0cy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogbGx2bS9saWJyYXJ5L0xMVk1P
dmVycmlkZXMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGxsdm0vbGlicmFyeS9jb25maWdfbGx2
bS5oOiBSZW1vdmVkLgorCiAyMDE2LTAyLTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CiAKICAgICAgICAgRlRMX1VTRVNfQjMgc2hvdWxkIGJlIHVuY29uZGl0aW9uYWxseSB0cnVl
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxOTY2ODUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDcgKzI3LDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMK
ICAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2ludGVycHJldGVyIgogICAgICIke0pBVkFTQ1JJ
UFRDT1JFX0RJUn0vaml0IgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vbGxpbnQiCi0gICAg
IiR7SkFWQVNDUklQVENPUkVfRElSfS9sbHZtIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0v
cGFyc2VyIgogICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vcHJvZmlsZXIiCiAgICAgIiR7SkFW
QVNDUklQVENPUkVfRElSfS9yZXBsYXkiCkBAIC0zNzgsNyArMzc3LDYgQEAgc2V0KEphdmFTY3Jp
cHRDb3JlX1NPVVJDRVMKICAgICBkaXNhc3NlbWJsZXIvQVJNNjREaXNhc3NlbWJsZXIuY3BwCiAg
ICAgZGlzYXNzZW1ibGVyL0FSTXY3RGlzYXNzZW1ibGVyLmNwcAogICAgIGRpc2Fzc2VtYmxlci9E
aXNhc3NlbWJsZXIuY3BwCi0gICAgZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwCiAg
ICAgZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5jcHAKICAgICBkaXNhc3NlbWJsZXIv
WDg2RGlzYXNzZW1ibGVyLmNwcAogCkBAIC0xMDA0LDI5ICsxMDAyLDE2IEBAIGlmIChFTkFCTEVf
RlRMX0pJVCkKICAgICAgICAgZnRsL0ZUTEIzT3V0cHV0LmNwcAogICAgICAgICBmdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcAogICAgICAgICBmdGwvRlRMQ29tbW9uVmFsdWVzLmNwcAotICAgICAgICBm
dGwvRlRMQ29tcGlsZS5jcHAKLSAgICAgICAgZnRsL0ZUTENvbXBpbGVCaW5hcnlPcC5jcHAKLSAg
ICAgICAgZnRsL0ZUTERXQVJGRGVidWdMaW5lSW5mby5jcHAKLSAgICAgICAgZnRsL0ZUTERXQVJG
UmVnaXN0ZXIuY3BwCi0gICAgICAgIGZ0bC9GVExEYXRhU2VjdGlvbi5jcHAKLSAgICAgICAgZnRs
L0ZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmNwcAogICAgICAgICBmdGwvRlRMRXhjZXB0aW9u
VGFyZ2V0LmNwcAogICAgICAgICBmdGwvRlRMRXhpdEFyZ3VtZW50LmNwcAogICAgICAgICBmdGwv
RlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5jcHAKICAgICAgICAgZnRsL0ZUTEV4aXRQcm9wZXJ0
eVZhbHVlLmNwcAotICAgICAgICBmdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcAogICAgICAg
ICBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uY3BwCiAgICAgICAgIGZ0bC9G
VExFeGl0VmFsdWUuY3BwCiAgICAgICAgIGZ0bC9GVExGYWlsLmNwcAogICAgICAgICBmdGwvRlRM
Rm9yT1NSRW50cnlKSVRDb2RlLmNwcAotICAgICAgICBmdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNw
cAotICAgICAgICBmdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAKICAgICAgICAgZnRsL0ZU
TEpJVENvZGUuY3BwCiAgICAgICAgIGZ0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCi0gICAgICAgIGZ0
bC9GVExKU0NhbGwuY3BwCi0gICAgICAgIGZ0bC9GVExKU0NhbGxCYXNlLmNwcAotICAgICAgICBm
dGwvRlRMSlNDYWxsVmFyYXJncy5jcHAKLSAgICAgICAgZnRsL0ZUTEpTVGFpbENhbGwuY3BwCiAg
ICAgICAgIGZ0bC9GVExMYXp5U2xvd1BhdGguY3BwCiAgICAgICAgIGZ0bC9GVExMaW5rLmNwcAog
ICAgICAgICBmdGwvRlRMTG9jYXRpb24uY3BwCkBAIC0xMDM2LDU0ICsxMDIxLDE3IEBAIGlmIChF
TkFCTEVfRlRMX0pJVCkKICAgICAgICAgZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKICAgICAg
ICAgZnRsL0ZUTE9TUkV4aXRIYW5kbGUuY3BwCiAgICAgICAgIGZ0bC9GVExPcGVyYXRpb25zLmNw
cAotICAgICAgICBmdGwvRlRMT3V0cHV0LmNwcAogICAgICAgICBmdGwvRlRMUGF0Y2hwb2ludEV4
Y2VwdGlvbkhhbmRsZS5jcHAKICAgICAgICAgZnRsL0ZUTFJlY292ZXJ5T3Bjb2RlLmNwcAogICAg
ICAgICBmdGwvRlRMU2F2ZVJlc3RvcmUuY3BwCiAgICAgICAgIGZ0bC9GVExTbG93UGF0aENhbGwu
Y3BwCiAgICAgICAgIGZ0bC9GVExTbG93UGF0aENhbGxLZXkuY3BwCi0gICAgICAgIGZ0bC9GVExT
dGFja01hcHMuY3BwCiAgICAgICAgIGZ0bC9GVExTdGF0ZS5jcHAKICAgICAgICAgZnRsL0ZUTFRo
dW5rcy5jcHAKLSAgICAgICAgZnRsL0ZUTFVud2luZEluZm8uY3BwCiAgICAgICAgIGZ0bC9GVExW
YWx1ZVJhbmdlLmNwcAogICAgICkKIGVuZGlmICgpCiAKLWlmIChVU0VfTExWTV9ESVNBU1NFTUJM
RVIpCi0gICAgIyBDb25maWd1cmUgbGx2bUZvckpTQy5zbwotICAgIHNldChsbHZtRm9ySlNDX1NP
VVJDRVMKLSAgICAgICAgbGx2bS9saWJyYXJ5L0xMVk1BbmNob3IuY3BwCi0gICAgICAgIGxsdm0v
bGlicmFyeS9MTFZNRXhwb3J0cy5jcHAKLSAgICAgICAgbGx2bS9saWJyYXJ5L0xMVk1PdmVycmlk
ZXMuY3BwCi0gICAgKQotICAgIHNldChsbHZtRm9ySlNDX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAg
ICAgICAgJHtMTFZNX0lOQ0xVREVfRElSU30KLSAgICAgICAgIiR7REVSSVZFRF9TT1VSQ0VTX0pB
VkFTQ1JJUFRDT1JFX0RJUn0iCi0gICAgKQotCi0gICAgYWRkX2N1c3RvbV9jb21tYW5kKAotICAg
ICAgICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9XZWJLaXRM
TFZNTGlicmFyeVRva2VuLmgKLSAgICAgICAgQ09NTUFORCAke0NNQUtFX0NPTU1BTkR9IC1FIHRv
dWNoICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vV2ViS2l0TExWTUxpYnJh
cnlUb2tlbi5oCi0gICAgICAgIFZFUkJBVElNKQotCi0gICAgIyBBZGRlZCBleHRyYSBpdGVtcyBm
b3IgSmF2YVNjcmlwdENvcmUKLSAgICBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9TWVNURU1f
SU5DTFVERV9ESVJFQ1RPUklFUwotICAgICAgICAke0xMVk1fSU5DTFVERV9ESVJTfQotICAgICkK
LQotICAgIGxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKLSAgICAgICAgbGx2bS9J
bml0aWFsaXplTExWTS5jcHAKLSAgICAgICAgbGx2bS9MTFZNQVBJLmNwcAotICAgICkKLSAgICBp
ZiAoTk9UIFdJTjMyKQotICAgICAgICBsaXN0KEFQUEVORCBKYXZhU2NyaXB0Q29yZV9TT1VSQ0VT
Ci0gICAgICAgICAgICBsbHZtL0luaXRpYWxpemVMTFZNTGludXguY3BwCi0gICAgICAgICAgICBs
bHZtL0luaXRpYWxpemVMTFZNUE9TSVguY3BwCi0gICAgICAgICkKLSAgICBlbmRpZiAoKQotZW5k
aWYgKCkKLQogc2V0KEhBU0hfTFVUX0dFTkVSQVRPUiAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJ
Un0vY3JlYXRlX2hhc2hfdGFibGUpCiBtYWNybyhHRU5FUkFURV9IQVNIX0xVVCBfaW5wdXQgX291
dHB1dCkKICAgICBhZGRfY3VzdG9tX2NvbW1hbmQoCkBAIC0xMzY3LDI1ICsxMzE1LDYgQEAgZW5k
aWYgKCkKIAogV0VCS0lUX0lOQ0xVREVfQ09ORklHX0ZJTEVTX0lGX0VYSVNUUygpCiAKLWlmIChV
U0VfTExWTV9ESVNBU1NFTUJMRVIgQU5EIE5PVCBXSU4zMikKLSAgICBpZiAoTk9UIGxsdm1Gb3JK
U0NfTElCUkFSSUVTKQotICAgICAgICBzZXQobGx2bUZvckpTQ19MSUJSQVJJRVMgJHtMTFZNX1NU
QVRJQ19MSUJSQVJJRVN9KQotICAgIGVuZGlmICgpCi0gICAgaWYgKE5PVCBsbHZtRm9ySlNDX0xJ
QlJBUklFUykKLSAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiTm8gTExWTSBsaWJzIGZvdW5k
LCBidXQgTExWTSBkaXNhc3NlbWJsZXIgaXMgZW5hYmxlZC4gU3RvcHBpbmcgYnVpbGQuIikKLSAg
ICBlbmRpZiAoKQotCi0gICAgV0VCS0lUX1dSQVBfU09VUkNFTElTVCgke2xsdm1Gb3JKU0NfU09V
UkNFU30pCi0gICAgYWRkX2xpYnJhcnkobGx2bUZvckpTQyBTSEFSRUQgJHtsbHZtRm9ySlNDX1NP
VVJDRVN9ICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vV2ViS2l0TExWTUxp
YnJhcnlUb2tlbi5oKQotICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhsbHZtRm9ySlNDICR7bGx2
bUZvckpTQ19MSUJSQVJJRVN9ICR7TExWTV9TWVNURU1fTElCUkFSSUVTfSkKLSAgICBpZiAoTk9U
IENNQUtFX1NZU1RFTV9OQU1FIE1BVENIRVMgIkRhcndpbiIpCi0gICAgICAgIEFERF9UQVJHRVRf
UFJPUEVSVElFUyhsbHZtRm9ySlNDIExJTktfRkxBR1MgIi1XbCwtLXZlcnNpb24tc2NyaXB0PSR7
SkFWQVNDUklQVENPUkVfRElSfS9sbHZtL2xpYnJhcnkvbGlibGx2bUZvckpTQy52ZXJzaW9uIikK
LSAgICBlbmRpZiAoKQotICAgIGlmIChsbHZtRm9ySlNDX0lOU1RBTExfRElSKQotICAgICAgICBp
bnN0YWxsKFRBUkdFVFMgbGx2bUZvckpTQyBERVNUSU5BVElPTiAiJHtsbHZtRm9ySlNDX0lOU1RB
TExfRElSfSIpCi0gICAgZW5kaWYgKCkKLWVuZGlmICgpCi0KIFdFQktJVF9DUkVBVEVfRk9SV0FS
RElOR19IRUFERVJTKEphdmFTY3JpcHRDb3JlIERJUkVDVE9SSUVTICR7SmF2YVNjcmlwdENvcmVf
Rk9SV0FSRElOR19IRUFERVJTX0RJUkVDVE9SSUVTfSBGSUxFUyAke0phdmFTY3JpcHRDb3JlX0ZP
UldBUkRJTkdfSEVBREVSU19GSUxFU30pCiAKIApAQCAtMTQxNywxMCArMTM0Niw2IEBAIGlmICgk
e0phdmFTY3JpcHRDb3JlX0xJQlJBUllfVFlQRX0gU1RSRVEKICAgICBpbnN0YWxsKFRBUkdFVFMg
SmF2YVNjcmlwdENvcmUgREVTVElOQVRJT04gIiR7TElCX0lOU1RBTExfRElSfSIpCiBlbmRpZiAo
KQogCi1pZiAoVVNFX0xMVk1fRElTQVNTRU1CTEVSKQotICAgIGFkZF9kZXBlbmRlbmNpZXMoSmF2
YVNjcmlwdENvcmUgbGx2bUZvckpTQykKLWVuZGlmICgpCi0KICMgRm9yY2Ugc3RhZ2luZyBvZiBz
aGFyZWQgc2NyaXB0cywgZXZlbiBpZiB0aGV5IGFyZW4ndCBkaXJlY3RseSB1c2VkIHRvIGJ1aWxk
IEphdmFTY3JpcHRDb3JlLgogCiBhZGRfY3VzdG9tX3RhcmdldChzdGFnZVNoYXJlZFNjcmlwdHMg
REVQRU5EUyAke0phdmFTY3JpcHRDb3JlX1NDUklQVFN9KQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzUsMTMgKzEzNSwxMCBAQAogCQkwRjIzNUJENTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhp
dEFyZ3VtZW50Rm9yT3BlcmFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjIzNUJCRjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50
Rm9yT3BlcmFuZC5jcHAgKi87IH07CiAJCTBGMjM1QkQ2MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExF
eGl0QXJndW1lbnRGb3JPcGVyYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjIzNUJDMDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50
Rm9yT3BlcmFuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGMjM1QkQ3MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExTdGFja21hcEFyZ3VtZW50TGlz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVC
QzExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFN0YWNrbWFwQXJndW1lbnRMaXN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYyMzVCRDgxNzE3OEUx
QzAwNjkwQzdGIC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJDMjE3MTc4RTFDMDA2OTBDN0YgLyog
RlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcCAqLzsgfTsKLQkJMEYyMzVCRDkxNzE3OEUxQzAwNjkw
QzdGIC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCQzMxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRU
aHVua0dlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGMjM1QkRBMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCQzQxNzE3
OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5jcHAgKi87IH07CiAJCTBGMjM1QkRCMTcxNzhF
MUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkM1MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFs
dWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjIzNUJEQzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJDNjE3MTc4RTFDMDA2OTBDN0Yg
LyogRlRMT1NSRXhpdC5jcHAgKi87IH07CiAJCTBGMjM1QkREMTcxNzhFMUMwMDY5MEM3RiAvKiBG
VExPU1JFeGl0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjIzNUJDNzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGMjM1QkRFMTcxNzhFMUMwMDY5
MEM3RiAvKiBGVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJDODE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
T1NSRXhpdENvbXBpbGF0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGMjM1QkRGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0
Q29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyMzVCQzkxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXRDb21waWxlci5jcHAgKi87
IH07CiAJCTBGMjM1QkUwMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29tcGlsZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkNBMTcx
NzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29tcGlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjIzNUJFMTE3MTc4RTFDMDA2OTBDN0Yg
LyogRlRMVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMjM1QkNCMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExUaHVua3MuY3BwICovOyB9OwpA
QCAtMTY2LDkgKzE2Myw2IEBACiAJCTBGMjRFNTU2MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVD
YWxsRnJhbWVTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjRFNTU0MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjI0RTU1ODE3
Rjc0RURCMDBBQkIyMTcgLyogVmFsdWVSZWNvdmVyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTU1NzE3Rjc0RURCMDBBQkIyMTcgLyogVmFs
dWVSZWNvdmVyeS5jcHAgKi87IH07CiAJCTBGMjU2QzM2MTYyN0IwQUQwMDdGMjc4MyAvKiBERkdD
YWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERG
R0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi87IH07Ci0JCTBGMjVGMUFF
MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjVGMUE3MTgxNjM1RjMwMDUy
MkYzOSAvKiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjI1RjFBRjE4MTYzNUYzMDA1MjJGMzkgLyog
RlRMSW5saW5lQ2FjaGVTaXplLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMjVGMUE4MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZVNp
emUuY3BwICovOyB9OwotCQkwRjI1RjFCMDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2Fj
aGVTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjI1RjFBOTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNUYxQjExODE2MzVG
MzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI1RjFBQTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xv
d1BhdGhDYWxsLmNwcCAqLzsgfTsKIAkJMEYyNUYxQjIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNs
b3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyNUYxQUIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjVGMUIzMTgxNjM1
RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNUYxQUMxODE2MzVGMzAwNTIyRjM5IC8qIEZU
TFNsb3dQYXRoQ2FsbEtleS5jcHAgKi87IH07CkBAIC00NTIsMTEgKzQ0Niw3IEBACiAJCTBGNjgy
RkIzMTlCQ0IzNjQwMEZBM0JBRCAvKiBERkdTU0FDYWxjdWxhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY4MkZCMTE5QkNCMzY0MDBGQTNCQUQg
LyogREZHU1NBQ2FsY3VsYXRvci5oICovOyB9OwogCQkwRjY5Q0M4ODE5M0FDNjBBMDA0NTc1OUUg
LyogREZHRnJvemVuVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2OUNDODYxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmNw
cCAqLzsgfTsKIAkJMEY2OUNDODkxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY5Q0M4NzE5
M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuaCAqLzsgfTsKLQkJMEY2QjFDQjUxODVG
QzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCMzE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxs
LmNwcCAqLzsgfTsKLQkJMEY2QjFDQjYxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQjQxODVG
QzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGNkIxQ0I5MTg2MTI0NEMwMDg0NUQ5NyAvKiBBcml0eUNo
ZWNrTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2QjFDQjcxODYxMjQ0QzAwODQ1RDk3IC8qIEFyaXR5Q2hlY2tNb2RlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY2QjFDQzUxODYyQzQ3ODAw
ODQ1RDk3IC8qIEZUTFVud2luZEluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQzExODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZElu
Zm8uY3BwICovOyB9OwotCQkwRjZCMUNDNjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5m
by5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFD
QzIxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjZCOEFEODFDNEVEREEyMDA5NjkwNTIg
LyogQjNEdXBsaWNhdGVUYWlscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjZCOEFENjFDNEVEREEyMDA5NjkwNTIgLyogQjNEdXBsaWNhdGVUYWls
cy5jcHAgKi87IH07CiAJCTBGNkI4QUQ5MUM0RUREQTIwMDk2OTA1MiAvKiBCM0R1cGxpY2F0ZVRh
aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZC
OEFENzFDNEVEREEyMDA5NjkwNTIgLyogQjNEdXBsaWNhdGVUYWlscy5oICovOyB9OwogCQkwRjZC
OEFEQzFDNEVGQUMzMDA5NjkwNTIgLyogQjNTU0FDYWxjdWxhdG9yLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkI4QURBMUM0RUZBQzMwMDk2OTA1
MiAvKiBCM1NTQUNhbGN1bGF0b3IuY3BwICovOyB9OwpAQCAtNTUzLDEzICs1NDMsOSBAQAogCQkw
RjlCMURCNDFDMEU0MkE1MDBFNUJGRDIgLyogRlRMQjNPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5QjFEQjMxQzBFNDJBNTAwRTVCRkQy
IC8qIEZUTEIzT3V0cHV0LmNwcCAqLzsgfTsKIAkJMEY5QjFEQjcxQzBFNDJCRDAwRTVCRkQyIC8q
IEZUTE9TUkV4aXRIYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5QjFEQjUxQzBFNDJCRDAwRTVCRkQyIC8qIEZUTE9TUkV4aXRIYW5kbGUu
Y3BwICovOyB9OwogCQkwRjlCMURCODFDMEU0MkJEMDBFNUJGRDIgLyogRlRMT1NSRXhpdEhhbmRs
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5QjFE
QjYxQzBFNDJCRDAwRTVCRkQyIC8qIEZUTE9TUkV4aXRIYW5kbGUuaCAqLzsgfTsKLQkJMEY5QzVF
NUUxOEUzNUY1RTAwRDQzMUMzIC8qIEZUTERXQVJGUmVnaXN0ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5QzVFNUMxOEUzNUY1RTAwRDQzMUMz
IC8qIEZUTERXQVJGUmVnaXN0ZXIuY3BwICovOyB9OwotCQkwRjlDNUU1RjE4RTM1RjVFMDBENDMx
QzMgLyogRlRMRFdBUkZSZWdpc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY5QzVFNUQxOEUzNUY1RTAwRDQzMUMzIC8qIEZUTERXQVJGUmVnaXN0
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjlEMzM3MDE2NURCQjkwMDA1QUQzODcgLyogRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzMzZFMTY1REJCOEQwMDVBRDM4
NyAvKiBEaXNhc3NlbWJsZXIuY3BwICovOyB9OwogCQkwRjlEMzM5NjE3RkZDNEU2MDA3M0MyQkMg
LyogREZHRmx1c2hlZEF0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGOUQzMzk0MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3BwICov
OyB9OwogCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzM5NTE3RkZDNEU2
MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggKi87IH07Ci0JCTBGOUQzMzlBMTgwM0FEQjcwMDcz
QzJCQyAvKiBGVExTdGFja01hcHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY5RDMzOTgxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5j
cHAgKi87IH07Ci0JCTBGOUQzMzlCMTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzMzk5MTgw
M0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjlEMzY5NDFBRTlDQzMzMDAwRDRERkIgLyogREZH
Q2xlYW5VcFBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGOUQzNjkyMUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuY3BwICov
OyB9OwogCQkwRjlEMzY5NTFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzY5MzFBRTlD
QzMzMDAwRDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmggKi87IH07CiAJCTBGOUQ0QzBDMUMzRTFD
MTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDRDMEExQzNFMUMxMTAwNkNEOTg0IC8qIEZU
TEV4Y2VwdGlvblRhcmdldC5jcHAgKi87IH07CkBAIC02NjgsMjYgKzY1NCw4IEBACiAJCTBGQ0NB
RTQ1MTZEMENGNzQwMEQwQzY1QiAvKiBQYXJzZXJFcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDQ0FFNDMxNkQwQ0Y2RTAwRDBDNjVCIC8qIFBh
cnNlckVycm9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEZDRUZBQUIxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUE5MTgwNEMx
M0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgKi87IH07CiAJCTBGQ0VGQUFDMTgwNEMx
M0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBQUExODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVS
ZXN0b3JlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJMEZDRUZBQjAxODA1Q0E2RDAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZNLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFBRTE4MDVDQTZEMDA0
NzJDRTQgLyogSW5pdGlhbGl6ZUxMVk0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQkwRkNFRkFDMTE4MDVEOTRFMDA0NzJDRTQgLyogTExWTU92ZXJy
aWRlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkNFRkFDMDE4MDVEOTQxMDA0NzJDRTQgLyogTExWTU92ZXJyaWRlcy5jcHAgKi87IH07Ci0JCTBG
Q0VGQUMzMTgwNUU3NDAwMDQ3MkNFNCAvKiBMTFZNRXhwb3J0cy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFDMjE4MDVFNzQwMDA0NzJDRTQg
LyogTExWTUV4cG9ydHMuY3BwICovOyB9OwotCQkwRkNFRkFDQTE4MDVFNzU1MDA0NzJDRTQgLyog
SW5pdGlhbGl6ZUxMVk0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZDRUZBQzQxODA1RTc1NTAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZNLmNwcCAq
LzsgfTsKLQkJMEZDRUZBQ0MxODA1RTc1NTAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZNUE9TSVgu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUM2
MTgwNUU3NTUwMDQ3MkNFNCAvKiBJbml0aWFsaXplTExWTVBPU0lYLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZDRUZBQ0QxODA1RTc1NTAwNDcy
Q0U0IC8qIExMVk1BUEkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZDRUZBQzcxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuY3BwICovOyB9Owot
CQkwRkNFRkFDRTE4MDVFNzU1MDA0NzJDRTQgLyogTExWTUFQSS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBQzgxODA1RTc1NTAwNDcyQ0U0IC8q
IExMVk1BUEkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQkwRkNFRkFDRjE4MDVFNzU1MDA0NzJDRTQgLyogTExWTUFQSUZ1bmN0aW9ucy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBQzkxODA1RTc1
NTAwNDcyQ0U0IC8qIExMVk1BUElGdW5jdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRkNFRkFEMTE4MDVFNzc5MDA0NzJDRTQgLyogTExW
TUFQSUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZDRUZBQzkxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUElGdW5jdGlvbnMuaCAqLzsg
fTsKLQkJMEZDRUZBRDMxODA1RURDQzAwNDcyQ0U0IC8qIExMVk1IZWFkZXJzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFEMjE4MDVFRENDMDA0
NzJDRTQgLyogTExWTUhlYWRlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQkwRkNFRkFENDE4MDVFRENDMDA0NzJDRTQgLyogTExWTUhlYWRlcnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUQy
MTgwNUVEQ0MwMDQ3MkNFNCAvKiBMTFZNSGVhZGVycy5oICovOyB9OwotCQkwRkNFRkFENzE4MDYx
NzQ2MDA0NzJDRTQgLyogTExWTUFuY2hvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFENjE4MDYxNzQ2MDA0NzJDRTQgLyogTExWTUFuY2hv
ci5jcHAgKi87IH07Ci0JCTBGQ0VGQURBMTgwNjIwREEwMDQ3MkNFNCAvKiBMTFZNQVBJLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFDODE4MDVF
NzU1MDA0NzJDRTQgLyogTExWTUFQSS5oICovOyB9OwotCQkwRkNFRkFEQzE4MDY0QTE0MDA0NzJD
RTQgLyogY29uZmlnX2xsdm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQ0VGQURCMTgwNjRBMTQwMDQ3MkNFNCAvKiBjb25maWdfbGx2bS5oICovOyB9
OwogCQkwRkNFRkFERjE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBREQxODA3MzhDMDAw
NDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCAqLzsgfTsKIAkJMEZDRUZBRTAxODA3MzhDMDAwNDcy
Q0U0IC8qIEZUTExvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkNFRkFERTE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRkQxMjAyRjFB
OEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQxMjAyRDFBOEFFRDEyMDAwRjUyODAgLyogRlRM
SlNDYWxsQmFzZS5jcHAgKi87IH07Ci0JCTBGRDEyMDMwMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExK
U0NhbGxCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGRDEyMDMzMUE4Qzg1QkQw
MDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDEyMDMxMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0Nh
bGxWYXJhcmdzLmNwcCAqLzsgfTsKLQkJMEZEMTIwMzQxQThDODVCRDAwMEY1MjgwIC8qIEZUTEpT
Q2FsbFZhcmFyZ3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDEyMDMyMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEMkM5MjQxNkQw
MUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1
Y3R1cmVJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0MTE1Q0Y4
MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLzsgfTsKIAkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4
MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovOyB9OwpA
QCAtNzU5LDE4ICs3MjcsMTMgQEAKIAkJMEZFODM0MTgxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHlt
b3JwaGljQ2FsbFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkU4MzQxNjFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxs
U3R1YlJvdXRpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkU4NTM0QjE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1
MzQ5MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwICovOyB9Owog
CQkwRkU4NTM0QzE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU4NTM0QTE3MjND
REE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmggKi87IH07Ci0JCTBGRTk1Rjc5
MThCNTY5NDcwMEI1MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU5NUY3NzE4QjU2OTQ3MDBCNTMxRkIgLyog
RlRMRGF0YVNlY3Rpb24uY3BwICovOyB9OwotCQkwRkU5NUY3QTE4QjU2OTQ3MDBCNTMxRkIgLyog
RlRMRGF0YVNlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRTk1Rjc4MThCNTY5NDcwMEI1MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGRUEwQTA4MTcw
NTEzREIwMEJCNzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMDlGRDE3MDUxM0RCMDBCQjcyMkMgLyogRlRM
QWJicmV2aWF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGRUEwQTA5MTcwNTEzREIwMEJCNzIyQyAvKiBGVExDYXBhYmlsaXRpZXMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTA5RkUx
NzA1MTNEQjAwQkI3MjJDIC8qIEZUTENhcGFiaWxpdGllcy5jcHAgKi87IH07CiAJCTBGRUEwQTBB
MTcwNTEzREIwMEJCNzIyQyAvKiBGVExDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwOUZGMTcwNTEzREIwMEJCNzIyQyAvKiBG
VExDYXBhYmlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQkwRkVBMEEwQjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEwMDE3MDUx
M0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5jcHAgKi87IH07CiAJCTBGRUEwQTBDMTcwNTEzREIw
MEJCNzIyQyAvKiBGVExDb21waWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVBMEEwMTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEwQTBE
MTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTAyMTcwNTEzREIwMEJCNzIyQyAvKiBGVExK
SVRDb2RlLmNwcCAqLzsgfTsKIAkJMEZFQTBBMEUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENv
ZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEw
QTAzMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFQTBBMEYxNzA1MTNEQjAwQkI3MjJDIC8q
IEZUTExvd2VyREZHVG9MTFZNLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUEwQTA0MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExW
TS5jcHAgKi87IH07CiAJCTBGRUEwQTEwMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1Rv
TExWTS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
QTBBMDUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9MTFZNLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZFQTBBMTExNzA1MTNEQjAw
QkI3MjJDIC8qIEZUTE91dHB1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQTBBMDYxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTE91dHB1dC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEwQTEyMTcw
NTEzREIwMEJCNzIyQyAvKiBGVExTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQTBBMDcxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTFN0YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFQTBB
MTYxNzA2QkI5MDAwQkI3MjJDIC8qIEZUTFN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTE1MTcwNkJCOTAwMEJCNzIyQyAvKiBGVExT
dGF0ZS5jcHAgKi87IH07CiAJCTBGRUEwQTFDMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0cmFj
dEhlYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQTBBMTcxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5jcHAgKi87IH07CkBA
IC03NzksMTAgKzc0Miw3IEBACiAJCTBGRUEwQTFGMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVBMEExQTE3MDhCMDA3MDBCQjcyMkMgLyogRlRMQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGRUEwQTIwMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExUeXBlZFBvaW50ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTFCMTcwOEIwMDcw
MEJCNzIyQyAvKiBGVExUeXBlZFBvaW50ZXIuaCAqLzsgfTsKIAkJMEZFQTBBMjMxNzA5NjA2OTAw
QkI3MjJDIC8qIEZUTENvbW1vblZhbHVlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQTBBMjExNzA5NjA2OTAwQkI3MjJDIC8qIEZUTENvbW1vblZh
bHVlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CTBGRUEwQTI0MTcwOTYwNjkwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEyMjE3MDk2
MDY5MDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEwQTI3MTcwOTYyM0IwMEJCNzIy
QyAvKiBGVExDb21tb25WYWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQTBBMjUxNzA5NjIzQjAwQkI3MjJDIC8qIEZUTENvbW1vblZhbHVl
cy5jcHAgKi87IH07Ci0JCTBGRUEwQTI4MTcwOTYyM0IwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNS
ZXBvc2l0b3J5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUEwQTI2MTcwOTYyM0IwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmNw
cCAqLzsgfTsKLQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3MjJDIC8qIEZUTE91dHB1dC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEyOTE3MDk2
Mjk2MDBCQjcyMkMgLyogRlRMT3V0cHV0LmNwcCAqLzsgfTsKIAkJMEZFQTBBMkMxNzBCNjYxOTAw
QkI3MjJDIC8qIEZUTEZvcm1hdHRlZFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEyQjE3MEI2NjE5MDBCQjcyMkMgLyogRlRMRm9ybWF0
dGVkVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRkVBMEEzMTE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEyRDE3MEQ0MEJG
MDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5jcHAgKi87IH07CiAJCTBGRUEwQTMyMTcwRDQwQkYw
MEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEyRTE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0
YS5oICovOyB9OwpAQCAtMTE3Nyw4ICsxMTM3LDYgQEAKIAkJMkFBQkNERTcxOEVGMjk0MjAwMDAy
MDk2IC8qIEdDTG9nZ2luZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkFBQkNERTYxOEVGMjk0MjAwMDAyMDk2IC8qIEdDTG9nZ2luZy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJBQUNFNjNDMThDQTVB
MDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFBQ0U2M0ExOENBNUEwMzAwRUQwMTkxIC8qIEdD
QWN0aXZpdHlDYWxsYmFjay5jcHAgKi87IH07CiAJCTJBQUNFNjNEMThDQTVBMDMwMEVEMDE5MSAv
KiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJBQUNFNjNCMThDQTVBMDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJh
Y2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQky
QUM5MjJCQjE4QTE2MTgyMDAzQ0UwRkIgLyogRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBQzkyMkI5MThBMTYx
ODIwMDNDRTBGQiAvKiBGVExEV0FSRkRlYnVnTGluZUluZm8uY3BwICovOyB9OwotCQkyQUM5MjJC
QzE4QTE2MTgyMDAzQ0UwRkIgLyogRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUM5MjJCQTE4QTE2MTgyMDAzQ0Uw
RkIgLyogRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmggKi87IH07CiAJCTJBRDJFREZCMTk3OTlFMzgw
MDRENjQ3OCAvKiBFbnVtZXJhdGlvbk1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJBRDJFREZBMTk3OTlFMzgwMDRENjQ3OCAvKiBFbnVtZXJhdGlv
bk1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkyQUQ4OTMyQjE3RTM4NjhGMDA2NjgyNzYgLyogSGVhcEl0ZXJhdGlvblNjb3BlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUQ4OTMyOTE3RTM4NjhG
MDA2NjgyNzYgLyogSGVhcEl0ZXJhdGlvblNjb3BlLmggKi87IH07CiAJCTJBREZBMjYzMThFRjM1
NDAwMDRGOUZDQyAvKiBHQ0xvZ2dpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkFERkEyNjIxOEVGMzU0MDAwNEY5RkNDIC8qIEdDTG9nZ2luZy5j
cHAgKi87IH07CkBAIC0xMjMwLDggKzExODgsNiBAQAogCQk2MjNBMzdFQzFCODdBN0MwMDA3NTQy
MDkgLyogUmVnaXN0ZXJNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDYyM0EzN0VCMUI4N0E3QkQwMDc1NDIwOSAvKiBSZWdpc3Rlck1hcC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTYyNzY3MzIzMUI2
ODBDMUUwMEZEOUYyRSAvKiBDYWxsTW9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2Mjc2NzMyMTFCNjgwQzFFMDBGRDlGMkUgLyogQ2FsbE1vZGUu
Y3BwICovOyB9OwogCQk2Mjc2NzMyNDFCNjgwQzFFMDBGRDlGMkUgLyogQ2FsbE1vZGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyNzY3MzIyMUI2ODBD
MUUwMEZEOUYyRSAvKiBDYWxsTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCTYyNzc0REFBMUI4RDRCMTkwMDA2RjA1QSAvKiBGVExKU1RhaWxD
YWxsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYy
Nzc0REE4MUI4RDRCMTkwMDA2RjA1QSAvKiBGVExKU1RhaWxDYWxsLmNwcCAqLzsgfTsKLQkJNjI3
NzREQUIxQjhENEIxOTAwMDZGMDVBIC8qIEZUTEpTVGFpbENhbGwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyNzc0REE5MUI4RDRCMTkwMDA2RjA1QSAv
KiBGVExKU1RhaWxDYWxsLmggKi87IH07CiAJCTYyRDJEMzhGMUFERjEwM0YwMDAyMDZDMSAvKiBG
dW5jdGlvblJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDYyRDJEMzhEMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmNw
cCAqLzsgfTsKIAkJNjJEMkQzOTAxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyRDJEMzhF
MUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjJENzU1RDQxQjg0RkIzRDAwMTgwMUZB
IC8qIENhbGxGcmFtZVNodWZmbGVyNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNjJENzU1RDMxQjg0RkIzOTAwMTgwMUZBIC8qIENhbGxGcmFtZVNo
dWZmbGVyNjQuY3BwICovOyB9OwpAQCAtMTMyMyw4ICsxMjc5LDYgQEAKIAkJNzlDRkM2RjAxQzMz
QjEwMDAwQzc2OEVBIC8qIExMSW50UENSYW5nZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5Q0ZDNkVGMUMzM0IxMDAwMEM3NjhFQSAvKiBMTEludFBD
UmFuZ2VzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNzlENUNENUExQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlENUNENTgxQzExMDZB
OTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuY3BwICovOyB9OwogCQk3OUQ1Q0Q1QjFDMTEw
NkE5MDBDRUNBMDcgLyogU2FtcGxpbmdQcm9maWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlENUNENTkxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBs
aW5nUHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQk3OURGNjZCMDFCRjI2QTU3MDAwMUNGMTEgLyogRlRMRXhjZXB0aW9uSGFuZGxlck1h
bmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlERjY2QUUxQkYyNkE1NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmNw
cCAqLzsgfTsKLQkJNzlERjY2QjExQkYyNkE1NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRs
ZXJNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3OURGNjZBRjFCRjI2QTU3MDAwMUNGMTEgLyogRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUVF
MEJGRjFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUVFMEJGRDFCNEFGQjg1MDAw
Mzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAgKi87IH07CiAJCTc5RUUwQzAwMUI0QUZC
ODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUVFMEJGRTFCNEFGQjg1MDAwMzg1QzkgLyogVmFy
aWFibGVFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTc5RjhGQzFFMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJ
bnNlcnRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OUY4RkMxQzFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0
aW9uUGhhc2UuY3BwICovOyB9OwpAQCAtMTUyNiwxMCArMTQ4MCw4IEBACiAJCTk5RjFBNkZFMUI4
RTZEOTQwMDQ2M0IyNiAvKiBJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5OUYxQTZGQzFCOEU2RDk0MDA0NjNC
MjYgLyogSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuY3BwICovOyB9OwogCQk5OUYxQTcwMTFCOThG
QkVDMDA0NjNCMjYgLyogSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk5RjFBNzAwMUI5OEZCRUMwMDQ2M0IyNiAv
KiBJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTlFNzI5NDA3MTkwRjAxQTUwMDFBOTFCNSAvKiBJbml0aWFs
aXplVGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxNzg2MzZDMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNw
cCAqLzsgfTsKLQkJOUU3Mjk0MDgxOTBGMDIxRTAwMUE5MUI1IC8qIEluaXRpYWxpemVMTFZNUE9T
SVguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZD
RUZBQzUxODA1RTc1NTAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZNUE9TSVguY3BwICovOyB9Owog
CQk5RTcyOTQwQjE5MEYwNTE0MDAxQTkxQjUgLyogQnVuZGxlUGF0aC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUU3Mjk0MEExOTBGMDUxNDAwMUE5MUI1
IC8qIEJ1bmRsZVBhdGguaCAqLzsgfTsKIAkJOUVBNUM3QTExOTBGMDg0MjAwNTA4RUJFIC8qIEJ1
bmRsZVBhdGgubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5RTcyOTQwOTE5MEYwMzA2MDAxQTkxQjUgLyogQnVuZGxlUGF0aC5tbSAqLzsgfTsKLQkJOUVB
NUM3QTIxOTBGMDg4NzAwNTA4RUJFIC8qIEluaXRpYWxpemVMTFZNTWFjLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlFQTVDN0EwMTkwRjA1RDIwMDUw
OEVCRSAvKiBJbml0aWFsaXplTExWTU1hYy5jcHAgKi87IH07CiAJCUExMjU4NDZFMUI0NUEzNjAw
MENDN0Y2QyAvKiBJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTI1ODQ2QzFCNDVBMzYwMDBDQzdG
NkMgLyogSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmx1dC5oICovOyB9OwogCQlBMTI1ODQ2
RjFCNDVBMzYwMDBDQzdGNkMgLyogSW50bE51bWJlckZvcm1hdFByb3RvdHlwZS5sdXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMjU4NDZEMUI0NUEz
NjAwMENDN0Y2QyAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmx1dC5oICovOyB9OwogCQlB
MTJCQkZGMjFCMDQ0QThCMDA2NjRCNjkgLyogSW50bE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEyQkJGRjExQjA0NEE4QjAwNjY0QjY5IC8q
IEludGxPYmplY3QuaCAqLzsgfTsKQEAgLTE4NTEsOCArMTgwMyw2IEBACiAJCUE3RTJFQTZDMEZC
NDYwQ0YwMDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RTJFQTZBMEZCNDYwQ0YwMDYwMUYwNiAvKiBMaXRl
cmFsUGFyc2VyLmNwcCAqLzsgfTsKIAkJQTdFNUEzQTcxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBp
bGF0aW9uUmVzdWx0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3RTVBM0E1MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5jcHAg
Ki87IH07CiAJCUE3RTVBM0E4MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdFNUEzQTYx
Nzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTdFNUFCMzcxNzk5RTRCMjAwRDI4MzNE
IC8qIExMVk1EaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTdFNUFCMzMxNzk5RTRCMjAwRDI4MzNEIC8qIExMVk1EaXNhc3NlbWJs
ZXIuY3BwICovOyB9OwotCQlBN0U1QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2Vt
Ymxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdF
NUFCMzQxNzk5RTRCMjAwRDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0U1QUIzOTE3OTlFNEIyMDBE
MjgzM0QgLyogVURpczg2RGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBN0U1QUIzNTE3OTlFNEIyMDBEMjgzM0QgLyogVURpczg2RGlz
YXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQTdFNUFCM0ExNzk5RTRCMjAwRDI4MzNEIC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0U1QUIzNjE3OTlF
NEIyMDBEMjgzM0QgLyogWDg2RGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJQTdGMjk5NkIxN0Ew
QkI2NzAwMTA0MTdBIC8qIEZUTEZhaWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTdGMjk5NjkxN0EwQkI2NzAwMTA0MTdBIC8qIEZUTEZhaWwuY3Bw
ICovOyB9OwpAQCAtMjA3Niw4ICsyMDI2LDYgQEAKIAkJRkUxODdBMEQxQzAzMEQ1QzAwMzhCQkNB
IC8qIEpJVERpdkdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkUxODdBMEIxQzAyMjkyMzAwMzhCQkNBIC8qIEpJVERpdkdlbmVyYXRvci5o
ICovOyB9OwogCQlGRTE4N0EwRTFDMDMwRDY0MDAzOEJCQ0EgLyogSklURGl2R2VuZXJhdG9yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMTg3QTBB
MUMwMjI5MjMwMDM4QkJDQSAvKiBKSVREaXZHZW5lcmF0b3IuY3BwICovOyB9OwogCQlGRTE4N0Ew
RjFDMDMwRDZDMDAzOEJCQ0EgLyogU25pcHBldE9wZXJhbmQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMTg3QTBDMUMwMkVCQTcwMDM4QkJDQSAvKiBT
bmlwcGV0T3BlcmFuZC5oICovOyB9OwotCQlGRTE4N0ExOTFDMEUxM0UzMDAzOEJCQ0EgLyogRlRM
Q29tcGlsZUJpbmFyeU9wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFMTg3QTE1MUMwRTEzQzYwMDM4QkJDQSAvKiBGVExDb21waWxlQmluYXJ5T3Au
Y3BwICovOyB9OwotCQlGRTE4N0ExQTFDMEUxM0U2MDAzOEJCQ0EgLyogRlRMQ29tcGlsZUJpbmFy
eU9wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTE4
N0ExNjFDMEUxM0M2MDAzOEJCQ0EgLyogRlRMQ29tcGlsZUJpbmFyeU9wLmggKi87IH07CiAJCUZF
MUMwRkZEMUIxOTNFOTgwMEI1M0ZDQSAvKiBFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMUMwRkZDMUIxOTNFOTgwMEI1M0ZDQSAvKiBF
eGNlcHRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlGRTFDMEZGRjFCMTk0RkQxMDBCNTNGQ0EgLyogRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMUMwRkZFMUIxOTRGRDEwMEI1
M0ZDQSAvKiBFeGNlcHRpb24uY3BwICovOyB9OwogCQlGRTIwQ0U5RDE1RjA0QTk1MDBERjM0MzAg
LyogTExJbnRDTG9vcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGRTIwQ0U5QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgKi87IH07
CkBAIC0yMTQzLDEzICsyMDkxLDYgQEAKIAkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEY5MzI3
NEUxQzIwQkNCQTAwQ0Y2NTY0OwogCQkJcmVtb3RlSW5mbyA9IGR5bmJlbmNoOwogCQl9OwotCQkw
RkNFRkFCQzE4MDVENjYzMDA0NzJDRTQgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0gewot
CQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OwotCQkJY29udGFpbmVyUG9ydGFsID0gMDg2
N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOwotCQkJcHJveHlUeXBl
ID0gMTsKLQkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEZDRUZBQjUxODA1RDYxNjAwNDcyQ0U0
OwotCQkJcmVtb3RlSW5mbyA9IGxsdm1Gb3JKU0M7Ci0JCX07CiAJCTBGRUM4NUIwMUJEQjVEOEYw
MDgwRkY3NCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb250
YWluZXJJdGVtUHJveHk7CiAJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAy
QUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CkBAIC0yMzM0LDEzICsyMjc1LDEwIEBACiAJCTBG
MjM1QkJGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEV4aXRBcmd1bWVudEZvck9w
ZXJhbmQuY3BwOyBwYXRoID0gZnRsL0ZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIzNUJDMDE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
RXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmg7IHBhdGggPSBmdGwvRlRMRXhpdEFyZ3VtZW50
Rm9yT3BlcmFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIzNUJDMTE3MTc4
RTFDMDA2OTBDN0YgLyogRlRMU3RhY2ttYXBBcmd1bWVudExpc3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gRlRMU3RhY2ttYXBBcmd1bWVudExpc3QuaDsgcGF0aCA9IGZ0bC9G
VExTdGFja21hcEFyZ3VtZW50TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
RjIzNUJDMjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEV4aXRUaHVua0dlbmVyYXRvci5j
cHA7IHBhdGggPSBmdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEYyMzVCQzMxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRUaHVua0dl
bmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExFeGl0VGh1bmtH
ZW5lcmF0b3IuaDsgcGF0aCA9IGZ0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMzVCQzQxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRW
YWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExFeGl0VmFs
dWUuY3BwOyBwYXRoID0gZnRsL0ZUTEV4aXRWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMjM1QkM1MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMRXhpdFZhbHVlLmg7IHBhdGggPSBmdGwv
RlRMRXhpdFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjM1QkM2MTcx
NzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IEZUTE9TUkV4aXQuY3BwOyBwYXRoID0gZnRsL0ZUTE9TUkV4aXQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIzNUJDNzE3MTc4RTFDMDA2OTBDN0YgLyog
RlRMT1NSRXhpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExPU1JFeGl0
Lmg7IHBhdGggPSBmdGwvRlRMT1NSRXhpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkwRjIzNUJDODE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExPU1JFeGl0Q29tcGlsYXRpb25J
bmZvLmg7IHBhdGggPSBmdGwvRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjIzNUJDOTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhp
dENvbXBpbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTE9T
UkV4aXRDb21waWxlci5jcHA7IHBhdGggPSBmdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMzVCQ0ExNzE3OEUxQzAwNjkwQzdGIC8qIEZU
TE9TUkV4aXRDb21waWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExP
U1JFeGl0Q29tcGlsZXIuaDsgcGF0aCA9IGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMzVCQ0IxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFRo
dW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExUaHVua3Mu
Y3BwOyBwYXRoID0gZnRsL0ZUTFRodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yMzY1LDkgKzIzMDMsNiBAQAogCQkwRjI0RTU1NDE3RjBCNzFDMDBBQkIyMTcgLyogSW5s
aW5lQ2FsbEZyYW1lU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGlu
ZUNhbGxGcmFtZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0RTU1NzE3
Rjc0RURCMDBBQkIyMTcgLyogVmFsdWVSZWNvdmVyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBWYWx1ZVJlY292ZXJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRv
clNsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHQ2Fs
bEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMEYyNUYxQTcxODE2MzVGMzAwNTIyRjM5IC8qIEZUTElubGluZUNhY2hlRGVzY3Jp
cHRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExJbmxpbmVDYWNoZURl
c2NyaXB0b3IuaDsgcGF0aCA9IGZ0bC9GVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYyNUYxQTgxODE2MzVGMzAwNTIyRjM5IC8qIEZUTElu
bGluZUNhY2hlU2l6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBG
VExJbmxpbmVDYWNoZVNpemUuY3BwOyBwYXRoID0gZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMjVGMUE5MTgxNjM1RjMwMDUyMkYzOSAv
KiBGVExJbmxpbmVDYWNoZVNpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
RlRMSW5saW5lQ2FjaGVTaXplLmg7IHBhdGggPSBmdGwvRlRMSW5saW5lQ2FjaGVTaXplLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjVGMUFBMTgxNjM1RjMwMDUyMkYzOSAvKiBG
VExTbG93UGF0aENhbGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
RlRMU2xvd1BhdGhDYWxsLmNwcDsgcGF0aCA9IGZ0bC9GVExTbG93UGF0aENhbGwuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI1RjFBQjE4MTYzNUYzMDA1MjJGMzkgLyogRlRM
U2xvd1BhdGhDYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFNsb3dQ
YXRoQ2FsbC5oOyBwYXRoID0gZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjI1RjFBQzE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxs
S2V5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFNsb3dQYXRo
Q2FsbEtleS5jcHA7IHBhdGggPSBmdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI2NDksMTEgKzI1ODQsNyBAQAogCQkwRjY4MkZCMTE5QkNC
MzY0MDBGQTNCQUQgLyogREZHU1NBQ2FsY3VsYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdTU0FDYWxjdWxhdG9yLmg7IHBhdGggPSBkZmcvREZHU1NBQ2FsY3VsYXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY5Q0M4NjE5M0FDNjBBMDA0NTc1
OUUgLyogREZHRnJvemVuVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHRnJvemVuVmFsdWUuY3BwOyBwYXRoID0gZGZnL0RGR0Zyb3plblZhbHVlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2OUNDODcxOTNBQzYwQTAwNDU3NTlFIC8q
IERGR0Zyb3plblZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Zy
b3plblZhbHVlLmg7IHBhdGggPSBkZmcvREZHRnJvemVuVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEY2QjFDQjMxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExKU0NhbGwuY3BwOyBwYXRo
ID0gZnRsL0ZUTEpTQ2FsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNkIx
Q0I0MTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gRlRMSlNDYWxsLmg7IHBhdGggPSBmdGwvRlRMSlNDYWxsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNkIxQ0I3MTg2MTI0NEMwMDg0NUQ5NyAvKiBBcml0eUNo
ZWNrTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcml0eUNoZWNrTW9k
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjZCMUNDMTE4NjJDNDc4MDA4NDVE
OTcgLyogRlRMVW53aW5kSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBGVExVbndpbmRJbmZvLmNwcDsgcGF0aCA9IGZ0bC9GVExVbndpbmRJbmZvLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY2QjFDQzIxODYyQzQ3ODAwODQ1RDk3IC8qIEZU
TFVud2luZEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMVW53aW5k
SW5mby5oOyBwYXRoID0gZnRsL0ZUTFVud2luZEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2QjhBRDYxQzRFRERBMjAwOTY5MDUyIC8qIEIzRHVwbGljYXRlVGFpbHMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNEdXBsaWNhdGVUYWlscy5j
cHA7IHBhdGggPSBiMy9CM0R1cGxpY2F0ZVRhaWxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY2QjhBRDcxQzRFRERBMjAwOTY5MDUyIC8qIEIzRHVwbGljYXRlVGFpbHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNEdXBsaWNhdGVUYWlscy5oOyBwYXRo
ID0gYjMvQjNEdXBsaWNhdGVUYWlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjZCOEFEQTFDNEVGQUMzMDA5NjkwNTIgLyogQjNTU0FDYWxjdWxhdG9yLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU1NBQ2FsY3VsYXRvci5jcHA7IHBhdGggPSBi
My9CM1NTQUNhbGN1bGF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjc0
NywxMyArMjY3OCw5IEBACiAJCTBGOUIxREIzMUMwRTQyQTUwMEU1QkZEMiAvKiBGVExCM091dHB1
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExCM091dHB1dC5j
cHA7IHBhdGggPSBmdGwvRlRMQjNPdXRwdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjlCMURCNTFDMEU0MkJEMDBFNUJGRDIgLyogRlRMT1NSRXhpdEhhbmRsZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExPU1JFeGl0SGFuZGxlLmNwcDsg
cGF0aCA9IGZ0bC9GVExPU1JFeGl0SGFuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY5QjFEQjYxQzBFNDJCRDAwRTVCRkQyIC8qIEZUTE9TUkV4aXRIYW5kbGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMT1NSRXhpdEhhbmRsZS5oOyBwYXRoID0g
ZnRsL0ZUTE9TUkV4aXRIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY5
QzVFNUMxOEUzNUY1RTAwRDQzMUMzIC8qIEZUTERXQVJGUmVnaXN0ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMRFdBUkZSZWdpc3Rlci5jcHA7IHBhdGggPSBm
dGwvRlRMRFdBUkZSZWdpc3Rlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
OUM1RTVEMThFMzVGNUUwMEQ0MzFDMyAvKiBGVExEV0FSRlJlZ2lzdGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTERXQVJGUmVnaXN0ZXIuaDsgcGF0aCA9IGZ0bC9GVExE
V0FSRlJlZ2lzdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQzMzZFMTY1
REJCOEQwMDVBRDM4NyAvKiBEaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gRGlzYXNzZW1ibGVyLmNwcDsgcGF0aCA9IGRpc2Fzc2VtYmxlci9EaXNh
c3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM5NDE3RkZD
NEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0ZsdXNoZWRBdC5jcHA7IHBhdGggPSBkZmcvREZHRmx1c2hlZEF0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5RDMzOTUxN0ZGQzRFNjAwNzNDMkJD
IC8qIERGR0ZsdXNoZWRBdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdG
bHVzaGVkQXQuaDsgcGF0aCA9IGRmZy9ERkdGbHVzaGVkQXQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMEY5RDMzOTgxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExTdGFja01hcHMuY3BwOyBw
YXRoID0gZnRsL0ZUTFN0YWNrTWFwcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTBGOUQzMzk5MTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMU3RhY2tNYXBzLmg7IHBhdGggPSBmdGwvRlRMU3RhY2tN
YXBzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQzNjkyMUFFOUNDMzMwMDBE
NERGQiAvKiBERkdDbGVhblVwUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gREZHQ2xlYW5VcFBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDbGVhblVwUGhhc2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzY5MzFBRTlDQzMzMDAwRDRE
RkIgLyogREZHQ2xlYW5VcFBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0NsZWFuVXBQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0NsZWFuVXBQaGFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlENEMwQTFDM0UxQzExMDA2Q0Q5ODQgLyogRlRMRXhj
ZXB0aW9uVGFyZ2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZU
TEV4Y2VwdGlvblRhcmdldC5jcHA7IHBhdGggPSBmdGwvRlRMRXhjZXB0aW9uVGFyZ2V0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4NzQsMjYgKzI4MDEsOSBAQAogCQkwRkND
QUU0MzE2RDBDRjZFMDBEMEM2NUIgLyogUGFyc2VyRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGFyc2VyRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZDRUZBQTkxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFNhdmVSZXN0b3JlLmNwcDsgcGF0aCA9
IGZ0bC9GVExTYXZlUmVzdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
Q0VGQUFBMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBGVExTYXZlUmVzdG9yZS5oOyBwYXRoID0gZnRsL0ZUTFNhdmVS
ZXN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQ0VGQUFFMTgwNUNBNkQw
MDQ3MkNFNCAvKiBJbml0aWFsaXplTExWTS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBJbml0aWFsaXplTExWTS5oOyBwYXRoID0gbGx2bS9Jbml0aWFsaXplTExWTS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkNFRkFCNjE4MDVENjE2MDA0NzJDRTQgLyogbGli
bGx2bUZvckpTQy5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZp
bGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0
aCA9IGxpYmxsdm1Gb3JKU0MuZHlsaWI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7
IH07CiAJCTBGQ0VGQUJFMTgwNUQ4NjkwMDQ3MkNFNCAvKiBMTFZNRm9ySlNDLnhjY29uZmlnICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2Nv
bmZpZzsgcGF0aCA9IExMVk1Gb3JKU0MueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTBGQ0VGQUMwMTgwNUQ5NDEwMDQ3MkNFNCAvKiBMTFZNT3ZlcnJpZGVzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IExMVk1PdmVycmlkZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwRkNFRkFDMjE4MDVFNzQwMDA0NzJDRTQgLyogTExWTUV4cG9ydHMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTExWTUV4cG9ydHMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkwRkNFRkFDNDE4MDVFNzU1MDA0NzJDRTQgLyogSW5pdGlh
bGl6ZUxMVk0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSW5pdGlh
bGl6ZUxMVk0uY3BwOyBwYXRoID0gbGx2bS9Jbml0aWFsaXplTExWTS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTBGQ0VGQUM1MTgwNUU3NTUwMDQ3MkNFNCAvKiBJbml0aWFsaXpl
TExWTVBPU0lYLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEluaXRp
YWxpemVMTFZNUE9TSVguY3BwOyBwYXRoID0gbGx2bS9Jbml0aWFsaXplTExWTVBPU0lYLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDRUZBQzYxODA1RTc1NTAwNDcyQ0U0IC8q
IEluaXRpYWxpemVMTFZNUE9TSVguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
SW5pdGlhbGl6ZUxMVk1QT1NJWC5oOyBwYXRoID0gbGx2bS9Jbml0aWFsaXplTExWTVBPU0lYLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQ0VGQUM3MTgwNUU3NTUwMDQ3MkNFNCAv
KiBMTFZNQVBJLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMVk1B
UEkuY3BwOyBwYXRoID0gbGx2bS9MTFZNQVBJLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMEZDRUZBQzgxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gTExWTUFQSS5oOyBwYXRoID0gbGx2bS9MTFZNQVBJLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQ0VGQUM5MTgwNUU3NTUwMDQ3MkNFNCAvKiBM
TFZNQVBJRnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExMVk1B
UElGdW5jdGlvbnMuaDsgcGF0aCA9IGxsdm0vTExWTUFQSUZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRkNFRkFEMjE4MDVFRENDMDA0NzJDRTQgLyogTExWTUhlYWRl
cnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExWTUhlYWRlcnMuaDsgcGF0
aCA9IGxsdm0vTExWTUhlYWRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZD
RUZBRDYxODA2MTc0NjAwNDcyQ0U0IC8qIExMVk1BbmNob3IuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTExWTUFuY2hvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGQ0VGQURCMTgwNjRBMTQwMDQ3MkNFNCAvKiBjb25maWdfbGx2bS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjb25maWdfbGx2bS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkNFRkFERDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMTG9jYXRpb24uY3Bw
OyBwYXRoID0gZnRsL0ZUTExvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZDRUZBREUxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTExvY2F0aW9uLmg7IHBhdGggPSBmdGwvRlRMTG9jYXRp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZEMTIwMkQxQThBRUQxMjAwMEY1
MjgwIC8qIEZUTEpTQ2FsbEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gRlRMSlNDYWxsQmFzZS5jcHA7IHBhdGggPSBmdGwvRlRMSlNDYWxsQmFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRDEyMDJFMUE4QUVEMTIwMDBGNTI4MCAvKiBG
VExKU0NhbGxCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEpTQ2Fs
bEJhc2UuaDsgcGF0aCA9IGZ0bC9GVExKU0NhbGxCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGRDEyMDMxMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2FsbFZhcmFyZ3Mu
Y3BwOyBwYXRoID0gZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0NhbGxWYXJhcmdzLmg7IHBh
dGggPSBmdGwvRlRMSlNDYWxsVmFyYXJncy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRHJpdmVyLmNwcDsg
cGF0aCA9IGRmZy9ERkdEcml2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0RyaXZlci5oOyBwYXRoID0gZGZnL0RGR0RyaXZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjk2NywxOCArMjg3NywxMyBAQAogCQkwRkU4MzQx
NjFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8q
IERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRX
YXRjaHBvaW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzRBMTcy
M0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHBhdGggPSBkZmcvREZH
RGVzaXJlZFdhdGNocG9pbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRTk1
Rjc3MThCNTY5NDcwMEI1MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExEYXRhU2VjdGlvbi5jcHA7IHBhdGggPSBmdGwvRlRM
RGF0YVNlY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkU5NUY3ODE4
QjU2OTQ3MDBCNTMxRkIgLyogRlRMRGF0YVNlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gRlRMRGF0YVNlY3Rpb24uaDsgcGF0aCA9IGZ0bC9GVExEYXRhU2VjdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkVBMDlGRDE3MDUxM0RCMDBCQjcyMkMg
LyogRlRMQWJicmV2aWF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBG
VExBYmJyZXZpYXRpb25zLmg7IHBhdGggPSBmdGwvRlRMQWJicmV2aWF0aW9ucy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMDlGRTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ2Fw
YWJpbGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTENh
cGFiaWxpdGllcy5jcHA7IHBhdGggPSBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTA5RkYxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENhcGFi
aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExDYXBhYmlsaXRp
ZXMuaDsgcGF0aCA9IGZ0bC9GVExDYXBhYmlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMEZFQTBBMDAxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENvbXBpbGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMQ29tcGlsZS5jcHA7IHBhdGggPSBm
dGwvRlRMQ29tcGlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTAx
MTcwNTEzREIwMEJCNzIyQyAvKiBGVExDb21waWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEZUTENvbXBpbGUuaDsgcGF0aCA9IGZ0bC9GVExDb21waWxlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTAyMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRD
b2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpJVENvZGUu
Y3BwOyBwYXRoID0gZnRsL0ZUTEpJVENvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkVBMEEwMzE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklUQ29kZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKSVRDb2RlLmg7IHBhdGggPSBmdGwvRlRMSklUQ29k
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEwNDE3MDUxM0RCMDBCQjcy
MkMgLyogRlRMTG93ZXJERkdUb0xMVk0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gRlRMTG93ZXJERkdUb0xMVk0uY3BwOyBwYXRoID0gZnRsL0ZUTExvd2VyREZHVG9M
TFZNLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTBBMDUxNzA1MTNEQjAw
QkI3MjJDIC8qIEZUTExvd2VyREZHVG9MTFZNLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZUTExvd2VyREZHVG9MTFZNLmg7IHBhdGggPSBmdGwvRlRMTG93ZXJERkdUb0xMVk0u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZFQTBBMDYxNzA1MTNEQjAwQkI3MjJD
IC8qIEZUTE91dHB1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExPdXRw
dXQuaDsgcGF0aCA9IGZ0bC9GVExPdXRwdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZFQTBBMDcxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTFN0YXRlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFN0YXRlLmg7IHBhdGggPSBmdGwvRlRMU3RhdGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTBBMTUxNzA2QkI5MDAwQkI3MjJDIC8qIEZU
TFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFN0YXRl
LmNwcDsgcGF0aCA9IGZ0bC9GVExTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRUEwQTE3MTcwOEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0cmFjdEhlYXAuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMQWJzdHJhY3RIZWFwLmNwcDsgcGF0
aCA9IGZ0bC9GVExBYnN0cmFjdEhlYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjk4NywxMCArMjg5Miw3IEBACiAJCTBGRUEwQTFBMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExB
YnN0cmFjdEhlYXBSZXBvc2l0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaDsgcGF0aCA9IGZ0bC9GVExBYnN0cmFjdEhlYXBS
ZXBvc2l0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTFCMTcwOEIw
MDcwMEJCNzIyQyAvKiBGVExUeXBlZFBvaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRlRMVHlwZWRQb2ludGVyLmg7IHBhdGggPSBmdGwvRlRMVHlwZWRQb2ludGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTIxMTcwOTYwNjkwMEJCNzIyQyAv
KiBGVExDb21tb25WYWx1ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRM
Q29tbW9uVmFsdWVzLmg7IHBhdGggPSBmdGwvRlRMQ29tbW9uVmFsdWVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTBGRUEwQTIyMTcwOTYwNjkwMEJCNzIyQyAvKiBGVExJbnRyaW5z
aWNSZXBvc2l0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEludHJp
bnNpY1JlcG9zaXRvcnkuaDsgcGF0aCA9IGZ0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTI1MTcwOTYyM0IwMEJCNzIyQyAvKiBG
VExDb21tb25WYWx1ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
RlRMQ29tbW9uVmFsdWVzLmNwcDsgcGF0aCA9IGZ0bC9GVExDb21tb25WYWx1ZXMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkVBMEEyNjE3MDk2MjNCMDBCQjcyMkMgLyogRlRM
SW50cmluc2ljUmVwb3NpdG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmNwcDsgcGF0aCA9IGZ0bC9GVExJbnRyaW5zaWNS
ZXBvc2l0b3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZFQTBBMjkxNzA5
NjI5NjAwQkI3MjJDIC8qIEZUTE91dHB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBGVExPdXRwdXQuY3BwOyBwYXRoID0gZnRsL0ZUTE91dHB1dC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTJCMTcwQjY2MTkwMEJCNzIyQyAvKiBGVExG
b3JtYXR0ZWRWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExGb3Jt
YXR0ZWRWYWx1ZS5oOyBwYXRoID0gZnRsL0ZUTEZvcm1hdHRlZFZhbHVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTJEMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25E
YXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbW1vbkRh
dGEuY3BwOyBwYXRoID0gZGZnL0RGR0NvbW1vbkRhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkVBMEEyRTE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb21tb25EYXRhLmg7IHBhdGggPSBk
ZmcvREZHQ29tbW9uRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzM0MSw4
ICszMjQzLDYgQEAKIAkJMkFBQkNERTYxOEVGMjk0MjAwMDAyMDk2IC8qIEdDTG9nZ2luZy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0xvZ2dpbmcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMkFBQ0U2M0ExOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlD
YWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHQ0FjdGl2
aXR5Q2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQUFDRTYzQjE4
Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdDQWN0aXZpdHlDYWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkyQUM5MjJCOTE4QTE2MTgyMDAzQ0UwRkIgLyogRlRMRFdBUkZEZWJ1Z0xpbmVJ
bmZvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTERXQVJGRGVi
dWdMaW5lSW5mby5jcHA7IHBhdGggPSBmdGwvRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkFDOTIyQkExOEExNjE4MjAwM0NFMEZCIC8qIEZU
TERXQVJGRGVidWdMaW5lSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBG
VExEV0FSRkRlYnVnTGluZUluZm8uaDsgcGF0aCA9IGZ0bC9GVExEV0FSRkRlYnVnTGluZUluZm8u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkFEMkVERkExOTc5OUUzODAwNEQ2NDc4
IC8qIEVudW1lcmF0aW9uTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBF
bnVtZXJhdGlvbk1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkFEODkzMjkx
N0UzODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29wZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBIZWFwSXRlcmF0aW9uU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMkFERkEyNjIxOEVGMzU0MDAwNEY5RkNDIC8qIEdDTG9nZ2luZy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHQ0xvZ2dpbmcuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzQwNCw4ICszMzA0LDYgQEAKIAkJNjIzQTM3RUIxQjg3
QTdCRDAwNzU0MjA5IC8qIFJlZ2lzdGVyTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlZ2lzdGVyTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTYyNzY3
MzIxMUI2ODBDMUUwMEZEOUYyRSAvKiBDYWxsTW9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDYWxsTW9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTYyNzY3MzIyMUI2ODBDMUUwMEZEOUYyRSAvKiBDYWxsTW9kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk2Mjc3NERBODFCOEQ0QjE5MDAwNkYwNUEgLyogRlRMSlNUYWlsQ2FsbC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExKU1RhaWxDYWxsLmNwcDsgcGF0aCA9
IGZ0bC9GVExKU1RhaWxDYWxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNjI3
NzREQTkxQjhENEIxOTAwMDZGMDVBIC8qIEZUTEpTVGFpbENhbGwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gRlRMSlNUYWlsQ2FsbC5oOyBwYXRoID0gZnRsL0ZUTEpTVGFpbENh
bGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjJBOUEyOUUxQjBCRUQ0ODAwQkQ1
NENBIC8qIERGR0xhenlOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR0xhenlOb2RlLmNwcDsgcGF0aCA9IGRmZy9ERkdMYXp5Tm9kZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTYyQTlBMjlGMUIwQkVENDgwMEJENTRDQSAvKiBERkdMYXp5
Tm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdMYXp5Tm9kZS5oOyBw
YXRoID0gZGZnL0RGR0xhenlOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTYy
RDJEMzhEMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0aW9uUmFyZURhdGEuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzUzMCw4ICszNDI4LDYgQEAKIAkJNzlDRkM2RUYxQzMz
QjEwMDAwQzc2OEVBIC8qIExMSW50UENSYW5nZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gTExJbnRQQ1Jhbmdlcy5oOyBwYXRoID0gbGxpbnQvTExJbnRQQ1Jhbmdlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUQ1Q0Q1ODFDMTEwNkE5MDBDRUNBMDcgLyog
U2FtcGxpbmdQcm9maWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTYW1wbGluZ1Byb2ZpbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlE
NUNENTkxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2FtcGxpbmdQcm9maWxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk3OURGNjZBRTFCRjI2QTU3MDAwMUNGMTEgLyogRlRMRXhjZXB0aW9uSGFu
ZGxlck1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRM
RXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuY3BwOyBwYXRoID0gZnRsL0ZUTEV4Y2VwdGlvbkhhbmRs
ZXJNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzlERjY2QUYxQkYy
NkE1NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmg7IHBhdGgg
PSBmdGwvRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzlFRTBCRkQxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFibGVFbnZpcm9u
bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5RUUwQkZFMUI0QUZCODUw
MDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFZhcmlhYmxlRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzlGOEZDMUMxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01heGltYWxGbHVzaEluc2VydGlv
blBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01heGlt
YWxGbHVzaEluc2VydGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdNYXhpbWFsRmx1c2hJbnNl
cnRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzc1LDcgKzM2
NzEsNiBAQAogCQk5QjQ5NTRFODFBNjY0MERCMDAyODE1QTYgLyogUGFyc2VyRnVuY3Rpb25JbmZv
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlckZ1bmN0aW9uSW5mby5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5RTcyOTQwOTE5MEYwMzA2MDAxQTkxQjUgLyogQnVuZGxlUGF0aC5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEJ1bmRsZVBhdGgubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlFNzI5NDBBMTkwRjA1MTQwMDFBOTFCNSAvKiBC
dW5kbGVQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ1bmRsZVBhdGgu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOUVBNUM3QTAxOTBGMDVEMjAwNTA4RUJF
IC8qIEluaXRpYWxpemVMTFZNTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEluaXRpYWxpemVMTFZNTWFjLmNwcDsgcGF0aCA9IGxsdm0vSW5pdGlhbGl6ZUxMVk1N
YWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTI1ODQ2QzFCNDVBMzYwMDBD
QzdGNkMgLyogSW50bE51bWJlckZvcm1hdENvbnN0cnVjdG9yLmx1dC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbnRsTnVtYmVyRm9ybWF0Q29uc3RydWN0b3IubHV0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMjU4NDZEMUI0NUEzNjAwMENDN0Y2QyAvKiBJ
bnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmx1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBlLmx1dC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBMTJCQkZGMTFCMDQ0QThCMDA2NjRCNjkgLyogSW50bE9iamVjdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRsT2JqZWN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC00MDk4LDggKzM5OTMsNiBAQAogCQlBN0UyRUE2QTBGQjQ2MENG
MDA2MDFGMDYgLyogTGl0ZXJhbFBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBMaXRlcmFsUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTdFNUEzQTUxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBpbGF0aW9uUmVzdWx0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdFNUEzQTYxNzk3NDMyRDAwRTg5M0MwIC8q
IENvbXBpbGF0aW9uUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENv
bXBpbGF0aW9uUmVzdWx0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3RTVBQjMz
MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZNRGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExMVk1EaXNhc3NlbWJsZXIuY3BwOyBwYXRoID0gZGlzYXNz
ZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlBN0U1QUIzNDE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTFZNRGlzYXNzZW1ibGVyLmg7IHBhdGggPSBkaXNh
c3NlbWJsZXIvTExWTURpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBN0U1QUIzNTE3OTlFNEIyMDBEMjgzM0QgLyogVURpczg2RGlzYXNzZW1ibGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFVEaXM4NkRpc2Fzc2VtYmxlci5oOyBwYXRoID0g
ZGlzYXNzZW1ibGVyL1VEaXM4NkRpc2Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBN0U1QUIzNjE3OTlFNEIyMDBEMjgzM0QgLyogWDg2RGlzYXNzZW1ibGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFg4NkRpc2Fzc2VtYmxlci5jcHA7
IHBhdGggPSBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTdGMjk5NjkxN0EwQkI2NzAwMTA0MTdBIC8qIEZUTEZhaWwuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMRmFpbC5jcHA7IHBhdGggPSBm
dGwvRlRMRmFpbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00MzU0LDggKzQy
NDcsNiBAQAogCQlGRTE4N0EwQTFDMDIyOTIzMDAzOEJCQ0EgLyogSklURGl2R2VuZXJhdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVERpdkdlbmVyYXRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTg3QTBCMUMwMjI5MjMwMDM4QkJD
QSAvKiBKSVREaXZHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SklURGl2R2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMTg3QTBD
MUMwMkVCQTcwMDM4QkJDQSAvKiBTbmlwcGV0T3BlcmFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTbmlwcGV0T3BlcmFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlGRTE4N0ExNTFDMEUxM0M2MDAzOEJCQ0EgLyogRlRMQ29tcGlsZUJpbmFyeU9wLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTENvbXBpbGVCaW5hcnlPcC5j
cHA7IHBhdGggPSBmdGwvRlRMQ29tcGlsZUJpbmFyeU9wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJRkUxODdBMTYxQzBFMTNDNjAwMzhCQkNBIC8qIEZUTENvbXBpbGVCaW5hcnlP
cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExDb21waWxlQmluYXJ5T3Au
aDsgcGF0aCA9IGZ0bC9GVExDb21waWxlQmluYXJ5T3AuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkUxQzBGRkMxQjE5M0U5ODAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkUxQzBGRkUxQjE5NEZEMTAwQjUzRkNBIC8qIEV4Y2VwdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGNlcHRpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRD
TG9vcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMTEludENMb29w
LmNwcDsgcGF0aCA9IGxsaW50L0xMSW50Q0xvb3AuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNDQzMCwxMyArNDMyMSw2IEBACiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Ci0JCTBGQ0VGQUIzMTgwNUQ2MTYwMDQ3MkNFNCAv
KiBGcmFtZXdvcmtzICovID0gewotCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7Ci0J
CQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCX07CiAJCTBGRUM4NUEy
MUJEQjVDRjEwMDgwRkY3NCAvKiBGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0gUEJYRnJhbWV3
b3Jrc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAtNDUx
Miw3ICs0Mzk2LDYgQEAKIAkJCQk5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlw
dENvcmUuZnJhbWV3b3JrICovLAogCQkJCTkzMkY1QkUxMDgyMkExQzcwMDczNjk3NSAvKiBqc2Mg
Ki8sCiAJCQkJMEZGOTIyQ0YxNEY0NkIxMzAwNDFBMjRFIC8qIEpTQ0xMSW50T2Zmc2V0c0V4dHJh
Y3RvciAqLywKLQkJCQkwRkNFRkFCNjE4MDVENjE2MDA0NzJDRTQgLyogbGlibGx2bUZvckpTQy5k
eWxpYiAqLywKIAkJCQkxNDEyMTEyMDBBNDg3OTNDMDA0ODAyNTUgLyogbWluaWRvbSAqLywKIAkJ
CQkxNEJENTlCRjBBM0U4RjkwMDBCQUY1OUMgLyogdGVzdGFwaSAqLywKIAkJCQkwRkVDODVBRDFC
REI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovLApAQCAtNDU1Nyw3ICs0NDQwLDYgQEAKIAkJCQkx
NDI5RDc3QTBFRDIwRDczMDBCODk2MTkgLyogaW50ZXJwcmV0ZXIgKi8sCiAJCQkJMTQyOUQ5MkMw
RUQyMkQ3MDAwQjg5NjE5IC8qIGppdCAqLywKIAkJCQkwRjQ2ODA5QzE0QkE3RjREMDBCRkUyNzIg
LyogbGxpbnQgKi8sCi0JCQkJMEZDRUZBQUQxODA1Q0E0NDAwNDcyQ0U0IC8qIGxsdm0gKi8sCiAJ
CQkJN0UzOUQ4MzcwRUMzQTM4ODAwM0FGMTFBIC8qIHBhcnNlciAqLywKIAkJCQkwMzQ3NjhERkZG
MzhBNTA0MTFEQjlDOEIgLyogUHJvZHVjdHMgKi8sCiAJCQkJOTVBQjgzMUEwREE0MkM2OTAwQkM4
M0YzIC8qIHByb2ZpbGVyICovLApAQCAtNDYyMCw0MCArNDUwMiwxMCBAQAogCQkJbmFtZSA9IGxs
aW50OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJMEZDRUZBQUQxODA1Q0E0
NDAwNDcyQ0U0IC8qIGxsdm0gKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVu
ID0gKAotCQkJCTBGQ0VGQUJGMTgwNUQ5NDEwMDQ3MkNFNCAvKiBsaWJyYXJ5ICovLAotCQkJCTBG
Q0VGQUM0MTgwNUU3NTUwMDQ3MkNFNCAvKiBJbml0aWFsaXplTExWTS5jcHAgKi8sCi0JCQkJMEZD
RUZBQUUxODA1Q0E2RDAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZNLmggKi8sCi0JCQkJOUVBNUM3
QTAxOTBGMDVEMjAwNTA4RUJFIC8qIEluaXRpYWxpemVMTFZNTWFjLmNwcCAqLywKLQkJCQkwRkNF
RkFDNTE4MDVFNzU1MDA0NzJDRTQgLyogSW5pdGlhbGl6ZUxMVk1QT1NJWC5jcHAgKi8sCi0JCQkJ
MEZDRUZBQzYxODA1RTc1NTAwNDcyQ0U0IC8qIEluaXRpYWxpemVMTFZNUE9TSVguaCAqLywKLQkJ
CQkwRkNFRkFDNzE4MDVFNzU1MDA0NzJDRTQgLyogTExWTUFQSS5jcHAgKi8sCi0JCQkJMEZDRUZB
QzgxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuaCAqLywKLQkJCQkwRkNFRkFDOTE4MDVFNzU1
MDA0NzJDRTQgLyogTExWTUFQSUZ1bmN0aW9ucy5oICovLAotCQkJCTBGQ0VGQUQyMTgwNUVEQ0Mw
MDQ3MkNFNCAvKiBMTFZNSGVhZGVycy5oICovLAotCQkJKTsKLQkJCW5hbWUgPSBsbHZtOwotCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJMEZDRUZBQkYxODA1RDk0MTAwNDcyQ0U0
IC8qIGxpYnJhcnkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAot
CQkJCTBGQ0VGQURCMTgwNjRBMTQwMDQ3MkNFNCAvKiBjb25maWdfbGx2bS5oICovLAotCQkJCTBG
Q0VGQUQ2MTgwNjE3NDYwMDQ3MkNFNCAvKiBMTFZNQW5jaG9yLmNwcCAqLywKLQkJCQkwRkNFRkFD
MjE4MDVFNzQwMDA0NzJDRTQgLyogTExWTUV4cG9ydHMuY3BwICovLAotCQkJCTBGQ0VGQUMwMTgw
NUQ5NDEwMDQ3MkNFNCAvKiBMTFZNT3ZlcnJpZGVzLmNwcCAqLywKLQkJCSk7Ci0JCQluYW1lID0g
bGlicmFyeTsKLQkJCXBhdGggPSBsbHZtL2xpYnJhcnk7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwotCQl9OwogCQkwRkVBMDlGQzE3MDUxMzdGMDBCQjcyMkMgLyogZnRsICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwRkRCMkNDNzE3M0RBNTFFMDA3
QjNDMUIgLyogRlRMQWJicmV2aWF0ZWRUeXBlcy5oICovLAotCQkJCTBGRUEwOUZEMTcwNTEzREIw
MEJCNzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmggKi8sCiAJCQkJMEZFQTBBMTcxNzA4QjAwNzAw
QkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5jcHAgKi8sCiAJCQkJMEZFQTBBMTgxNzA4QjAwNzAw
QkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5oICovLAogCQkJCTBGRUEwQTE5MTcwOEIwMDcwMEJC
NzIyQyAvKiBGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcCAqLywKQEAgLTQ2NjcsMTggKzQ1
MTksNyBAQAogCQkJCTBGRUEwOUZGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDYXBhYmlsaXRpZXMu
aCAqLywKIAkJCQkwRkVBMEEyNTE3MDk2MjNCMDBCQjcyMkMgLyogRlRMQ29tbW9uVmFsdWVzLmNw
cCAqLywKIAkJCQkwRkVBMEEyMTE3MDk2MDY5MDBCQjcyMkMgLyogRlRMQ29tbW9uVmFsdWVzLmgg
Ki8sCi0JCQkJMEZFQTBBMDAxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENvbXBpbGUuY3BwICovLAog
CQkJCTBGRUEwQTAxMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDb21waWxlLmggKi8sCi0JCQkJRkUx
ODdBMTUxQzBFMTNDNjAwMzhCQkNBIC8qIEZUTENvbXBpbGVCaW5hcnlPcC5jcHAgKi8sCi0JCQkJ
RkUxODdBMTYxQzBFMTNDNjAwMzhCQkNBIC8qIEZUTENvbXBpbGVCaW5hcnlPcC5oICovLAotCQkJ
CTBGRTk1Rjc3MThCNTY5NDcwMEI1MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5jcHAgKi8sCi0JCQkJ
MEZFOTVGNzgxOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0aW9uLmggKi8sCi0JCQkJMkFD
OTIyQjkxOEExNjE4MjAwM0NFMEZCIC8qIEZUTERXQVJGRGVidWdMaW5lSW5mby5jcHAgKi8sCi0J
CQkJMkFDOTIyQkExOEExNjE4MjAwM0NFMEZCIC8qIEZUTERXQVJGRGVidWdMaW5lSW5mby5oICov
LAotCQkJCTBGOUM1RTVDMThFMzVGNUUwMEQ0MzFDMyAvKiBGVExEV0FSRlJlZ2lzdGVyLmNwcCAq
LywKLQkJCQkwRjlDNUU1RDE4RTM1RjVFMDBENDMxQzMgLyogRlRMRFdBUkZSZWdpc3Rlci5oICov
LAotCQkJCTc5REY2NkFFMUJGMjZBNTcwMDAxQ0YxMSAvKiBGVExFeGNlcHRpb25IYW5kbGVyTWFu
YWdlci5jcHAgKi8sCi0JCQkJNzlERjY2QUYxQkYyNkE1NzAwMDFDRjExIC8qIEZUTEV4Y2VwdGlv
bkhhbmRsZXJNYW5hZ2VyLmggKi8sCiAJCQkJMEY5RDRDMEExQzNFMUMxMTAwNkNEOTg0IC8qIEZU
TEV4Y2VwdGlvblRhcmdldC5jcHAgKi8sCiAJCQkJMEY5RDRDMEIxQzNFMUMxMTAwNkNEOTg0IC8q
IEZUTEV4Y2VwdGlvblRhcmdldC5oICovLAogCQkJCTBGMjM1QkJEMTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExFeGl0QXJndW1lbnQuY3BwICovLApAQCAtNDY4Nyw4ICs0NTI4LDYgQEAKIAkJCQkwRjIz
NUJDMDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oICovLAog
CQkJCTBGMkI5Q0VFMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAg
Ki8sCiAJCQkJMEYyQjlDRUYxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVl
LmggKi8sCi0JCQkJMEYyMzVCQzIxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRUaHVua0dlbmVy
YXRvci5jcHAgKi8sCi0JCQkJMEYyMzVCQzMxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRUaHVu
a0dlbmVyYXRvci5oICovLAogCQkJCTBGMkI5Q0YwMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0
VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAgKi8sCiAJCQkJMEYyQjlDRjExOUQwQkFDMTAw
QjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggKi8sCiAJCQkJMEYy
MzVCQzQxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5jcHAgKi8sCkBAIC00Njk5LDIz
ICs0NTM4LDEwIEBACiAJCQkJMEZEOEEzMTUxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVu
dHJ5SklUQ29kZS5jcHAgKi8sCiAJCQkJMEZEOEEzMTYxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZv
ck9TUkVudHJ5SklUQ29kZS5oICovLAogCQkJCUE3OEE5NzdDMTc5NzM4RDUwMDlERjc0NCAvKiBG
VExHZW5lcmF0ZWRGdW5jdGlvbi5oICovLAotCQkJCTBGMjVGMUE3MTgxNjM1RjMwMDUyMkYzOSAv
KiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCAqLywKLQkJCQkwRjI1RjFBODE4MTYzNUYzMDA1
MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmNwcCAqLywKLQkJCQkwRjI1RjFBOTE4MTYzNUYz
MDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmggKi8sCi0JCQkJMEZFQTBBMjYxNzA5NjIz
QjAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuY3BwICovLAotCQkJCTBGRUEwQTIy
MTcwOTYwNjkwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmggKi8sCiAJCQkJMEZF
QTBBMDIxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuY3BwICovLAogCQkJCTBGRUEwQTAz
MTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmggKi8sCiAJCQkJQTc4QTk3N0QxNzk3MzhE
NTAwOURGNzQ0IC8qIEZUTEpJVEZpbmFsaXplci5jcHAgKi8sCiAJCQkJQTc4QTk3N0UxNzk3MzhE
NTAwOURGNzQ0IC8qIEZUTEpJVEZpbmFsaXplci5oICovLAotCQkJCTBGNkIxQ0IzMTg1RkM5RTkw
MDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwICovLAotCQkJCTBGNkIxQ0I0MTg1RkM5RTkwMDg0NUQ5
NyAvKiBGVExKU0NhbGwuaCAqLywKLQkJCQkwRkQxMjAyRDFBOEFFRDEyMDAwRjUyODAgLyogRlRM
SlNDYWxsQmFzZS5jcHAgKi8sCi0JCQkJMEZEMTIwMkUxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpT
Q2FsbEJhc2UuaCAqLywKLQkJCQkwRkQxMjAzMTFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxs
VmFyYXJncy5jcHAgKi8sCi0JCQkJMEZEMTIwMzIxQThDODVCRDAwMEY1MjgwIC8qIEZUTEpTQ2Fs
bFZhcmFyZ3MuaCAqLywKLQkJCQk2Mjc3NERBODFCOEQ0QjE5MDAwNkYwNUEgLyogRlRMSlNUYWls
Q2FsbC5jcHAgKi8sCi0JCQkJNjI3NzREQTkxQjhENEIxOTAwMDZGMDVBIC8qIEZUTEpTVGFpbENh
bGwuaCAqLywKIAkJCQkwRkI0RkI3MDFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRo
LmNwcCAqLywKIAkJCQkwRkI0RkI3MTFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRo
LmggKi8sCiAJCQkJMEZCNEZCNzIxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aENh
bGwuaCAqLywKQEAgLTQ3MzIsMTMgKzQ1NTgsMTAgQEAKIAkJCQkwRkQ4QTMxODE3RDUxRjIyMDBD
QTJDNDAgLyogRlRMT1NSRW50cnkuaCAqLywKIAkJCQkwRjIzNUJDNjE3MTc4RTFDMDA2OTBDN0Yg
LyogRlRMT1NSRXhpdC5jcHAgKi8sCiAJCQkJMEYyMzVCQzcxNzE3OEUxQzAwNjkwQzdGIC8qIEZU
TE9TUkV4aXQuaCAqLywKLQkJCQkwRjIzNUJDODE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhp
dENvbXBpbGF0aW9uSW5mby5oICovLAogCQkJCTBGMjM1QkM5MTcxNzhFMUMwMDY5MEM3RiAvKiBG
VExPU1JFeGl0Q29tcGlsZXIuY3BwICovLAogCQkJCTBGMjM1QkNBMTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExPU1JFeGl0Q29tcGlsZXIuaCAqLywKIAkJCQkwRjlCMURCNTFDMEU0MkJEMDBFNUJGRDIg
LyogRlRMT1NSRXhpdEhhbmRsZS5jcHAgKi8sCiAJCQkJMEY5QjFEQjYxQzBFNDJCRDAwRTVCRkQy
IC8qIEZUTE9TUkV4aXRIYW5kbGUuaCAqLywKLQkJCQkwRkVBMEEyOTE3MDk2Mjk2MDBCQjcyMkMg
LyogRlRMT3V0cHV0LmNwcCAqLywKLQkJCQkwRkVBMEEwNjE3MDUxM0RCMDBCQjcyMkMgLyogRlRM
T3V0cHV0LmggKi8sCiAJCQkJMEY5RDRDMEUxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9p
bnRFeGNlcHRpb25IYW5kbGUuY3BwICovLAogCQkJCTBGOUQ0QzBGMUMzRTJDNzQwMDZDRDk4NCAv
KiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmggKi8sCiAJCQkJMEY0ODUzMjUxODdERkRF
QzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmNwcCAqLywKQEAgLTQ3NTAsMTYgKzQ1NzMs
MTIgQEAKIAkJCQkwRjI1RjFBQzE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5
LmNwcCAqLywKIAkJCQkwRjI1RjFBRDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxs
S2V5LmggKi8sCiAJCQkJMEYyMzVCQzExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFN0YWNrbWFwQXJn
dW1lbnRMaXN0LmggKi8sCi0JCQkJMEY5RDMzOTgxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNr
TWFwcy5jcHAgKi8sCi0JCQkJMEY5RDMzOTkxODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFw
cy5oICovLAogCQkJCTBGRUEwQTE1MTcwNkJCOTAwMEJCNzIyQyAvKiBGVExTdGF0ZS5jcHAgKi8s
CiAJCQkJMEZFQTBBMDcxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTFN0YXRlLmggKi8sCiAJCQkJQTdG
Q0MyNkMxN0EwQjZBQTAwNzg2RDFBIC8qIEZUTFN3aXRjaENhc2UuaCAqLywKIAkJCQkwRjIzNUJD
QjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmNwcCAqLywKIAkJCQkwRjIzNUJDQzE3MTc4
RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmggKi8sCiAJCQkJMEZFQTBBMUIxNzA4QjAwNzAwQkI3
MjJDIC8qIEZUTFR5cGVkUG9pbnRlci5oICovLAotCQkJCTBGNkIxQ0MxMTg2MkM0NzgwMDg0NUQ5
NyAvKiBGVExVbndpbmRJbmZvLmNwcCAqLywKLQkJCQkwRjZCMUNDMjE4NjJDNDc4MDA4NDVEOTcg
LyogRlRMVW53aW5kSW5mby5oICovLAogCQkJCTBGREIyQ0M4MTczREE1MUUwMDdCM0MxQiAvKiBG
VExWYWx1ZUZyb21CbG9jay5oICovLAogCQkJCTBGNUE2MjgxMTg4Qzk4RDQwMDcyQzlERiAvKiBG
VExWYWx1ZVJhbmdlLmNwcCAqLywKIAkJCQkwRjVBNjI4MjE4OEM5OEQ0MDA3MkM5REYgLyogRlRM
VmFsdWVSYW5nZS5oICovLApAQCAtNTAxMyw4ICs0ODMyLDYgQEAKIAkJCQk2NUMwMjg0RjE3MTc5
NUUyMDAzNTFFMzUgLyogQVJNdjdEaXNhc3NlbWJsZXIuY3BwICovLAogCQkJCTBGOUQzMzZFMTY1
REJCOEQwMDVBRDM4NyAvKiBEaXNhc3NlbWJsZXIuY3BwICovLAogCQkJCTBGRjQyNzJGMTU4RUJE
NDQwMDRDQjlGRiAvKiBEaXNhc3NlbWJsZXIuaCAqLywKLQkJCQlBN0U1QUIzMzE3OTlFNEIyMDBE
MjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5jcHAgKi8sCi0JCQkJQTdFNUFCMzQxNzk5RTRCMjAw
RDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuaCAqLywKIAkJCQkwRkY0MjczMDE1OEVCRDQ0MDA0
Q0I5RkYgLyogVURpczg2RGlzYXNzZW1ibGVyLmNwcCAqLywKIAkJCQlBN0U1QUIzNTE3OTlFNEIy
MDBEMjgzM0QgLyogVURpczg2RGlzYXNzZW1ibGVyLmggKi8sCiAJCQkJQTdFNUFCMzYxNzk5RTRC
MjAwRDI4MzNEIC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgKi8sCkBAIC03MDIwLDE3ICs2ODM3LDYg
QEAKIC8qIEVuZCBQQlhHcm91cCBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEhlYWRlcnNCdWls
ZFBoYXNlIHNlY3Rpb24gKi8KLQkJMEZDRUZBQjQxODA1RDYxNjAwNDcyQ0U0IC8qIEhlYWRlcnMg
Ki8gPSB7Ci0JCQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFz
ayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCQkwRkNFRkFEQzE4MDY0QTE0MDA0NzJD
RTQgLyogY29uZmlnX2xsdm0uaCBpbiBIZWFkZXJzICovLAotCQkJCTBGQ0VGQURBMTgwNjIwREEw
MDQ3MkNFNCAvKiBMTFZNQVBJLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkNFRkFEMTE4MDVFNzc5
MDA0NzJDRTQgLyogTExWTUFQSUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEZDRUZB
RDQxODA1RURDQzAwNDcyQ0U0IC8qIExMVk1IZWFkZXJzLmggaW4gSGVhZGVycyAqLywKLQkJCSk7
Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKIAkJMTQ0
MDA1QzcwQTUzMzhDNjAwMDVGMDYxIC8qIEhlYWRlcnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhIZWFk
ZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC03MDQ5
LDcgKzY4NTUsNiBAQAogCQkJZmlsZXMgPSAoCiAJCQkJMEZGQTU0OTgxNkI4ODM1MzAwQjNBOTgy
IC8qIEE2NERPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUZFNTFDMTkyMkEzQkMwMDY5
ODdDNSAvKiBBYm9ydFJlYXNvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkUxODdBMUExQzBFMTNF
NjAwMzhCQkNBIC8qIEZUTENvbXBpbGVCaW5hcnlPcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYw
MTYxRTMwRjNBODNDMTAwRjg0NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNTVGMEY1MTREMTA2M0MwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkVDODU2RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVT
dGFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC03MDY4LDcgKzY4NzMsNiBAQAogCQkJCTBGNjE4MzMx
MUM0NUJGMDcwMDcyNDUwQiAvKiBBaXJMb3dlck1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZFQzg1NzcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZFQzg1NzkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggaW4g
SGVhZGVycyAqLywKLQkJCQk3OURGNjZCMTFCRjI2QTU3MDAwMUNGMTEgLyogRlRMRXhjZXB0aW9u
SGFuZGxlck1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTdBMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1
N0MxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkVDODU3RTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmggaW4g
SGVhZGVycyAqLywKQEAgLTc1MTEsNyArNzMxNSw2IEBACiAJCQkJQTdBOEFGMzkxN0FEQjVGMzAw
NUFCMTc0IC8qIEZsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNEU1NDMxN0VB
OUY1OTAwQUJCMjE3IC8qIEZQUkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREIyQ0M5MTcz
REE1MjAwMDdCM0MxQiAvKiBGVExBYmJyZXZpYXRlZFR5cGVzLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkwRkVBMEEwODE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZFQTBBMUQxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMUYxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3Ry
YWN0SGVhcFJlcG9zaXRvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDg1MzI4MTg3REZERUMw
MDgzQjY4NyAvKiBGVExBdmFpbGFibGVSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCkBAIC03NTE5
LDE1ICs3MzIyLDExIEBACiAJCQkJMEZFQTBBMEExNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENhcGFi
aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMjMxNzA5NjA2OTAwQkI3MjJDIC8q
IEZUTENvbW1vblZhbHVlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMEMxNzA1MTNEQjAw
QkI3MjJDIC8qIEZUTENvbXBpbGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGRTk1RjdBMThCNTY5
NDcwMEI1MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkFDOTIy
QkMxOEExNjE4MjAwM0NFMEZCIC8qIEZUTERXQVJGRGVidWdMaW5lSW5mby5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMEY5QzVFNUYxOEUzNUY1RTAwRDQzMUMzIC8qIEZUTERXQVJGUmVnaXN0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMjM1QkQ0MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJn
dW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4RTBDMUJGMDI3NkMwMDEzQzg4RiAvKiBC
M0NvbXBpbGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJENjE3MTc4RTFDMDA2OTBD
N0YgLyogRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
MzVCRDcxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFN0YWNrbWFwQXJndW1lbnRMaXN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCOUNGNTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFByb3BlcnR5
VmFsdWUuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGMjM1QkQ5MTcxNzhFMUMwMDY5MEM3RiAvKiBG
VExFeGl0VGh1bmtHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI5Q0Y3MTlEMEJB
QzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyMzVCREIxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZFMEU0QUUxQzI0Qzk0QTAwMkUxN0I2IC8qIEFpclRtcFdpZHRo
LmggaW4gSGVhZGVycyAqLywKQEAgLTc1MzUsMTUgKzczMzQsOCBAQAogCQkJCTBGRUEwQTJDMTcw
QjY2MTkwMEJCNzIyQyAvKiBGVExGb3JtYXR0ZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZEOEEzMUExN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZvck9TUkVudHJ5SklUQ29kZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTc4QTk3N0YxNzk3MzhENTAwOURGNzQ0IC8qIEZUTEdlbmVyYXRlZEZ1
bmN0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjI1RjFBRTE4MTYzNUYzMDA1MjJGMzkgLyog
RlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjI1RjFCMDE4
MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkwRkVBMEEyNDE3MDk2MDY5MDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMEUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5NzgxMTc5NzM4RDUwMDlERjc0NCAvKiBGVExKSVRG
aW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGNkIxQ0I2MTg1RkM5RTkwMDg0NUQ5NyAv
KiBGVExKU0NhbGwuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGRDEyMDMwMUE4QUVEMTIwMDBGNTI4
MCAvKiBGVExKU0NhbGxCYXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkQxMjAzNDFBOEM4NUJE
MDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNjI3NzRE
QUIxQjhENEIxOTAwMDZGMDVBIC8qIEZUTEpTVGFpbENhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQjRGQjc0MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGguaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQjRGQjc1MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGhDYWxs
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMkI5NjE3MkUwNEEzMDA3REJEQTUgLyogRlRMTGlu
ay5oIGluIEhlYWRlcnMgKi8sCkBAIC03NTU0LDE5ICs3MzQ2LDE1IEBACiAJCQkJMEYzMzhFMTAx
QkYwMjc2QzAwMTNDODhGIC8qIEIzTW92ZUNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZEOEEzMUMxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjIzNUJERDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMEYyMzVCREUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXRDb21waWxhdGlv
bkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkUwMTcxNzhFMUMwMDY5MEM3RiAvKiBG
VExPU1JFeGl0Q29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGRUEwQTExMTcwNTEzREIw
MEJCNzIyQyAvKiBGVExPdXRwdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDg1MzJBMTg3REZE
RUMwMDgzQjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZD
RUZBQUMxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjI1RjFCMjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjI1RjFCNDE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxs
S2V5LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjlEMzM5QjE4MDNBREI3MDA3M0MyQkMgLyogRlRM
U3RhY2tNYXBzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEExMjE3MDUxM0RCMDBCQjcyMkMg
LyogRlRMU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RkNDMjZEMTdBMEI2QUEwMDc4NkQx
QSAvKiBGVExTd2l0Y2hDYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFMjE3MTc4RTFD
MDA2OTBDN0YgLyogRlRMVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEyMDE3MDhC
MDA3MDBCQjcyMkMgLyogRlRMVHlwZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjZC
MUNDNjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEQjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzYxOEI1M0ZBOTAwNUY5NzlBIC8qIEZUTFdlaWdo
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC03NjU0LDggKzc0NDIsNiBAQAogCQkJCTBGMEE3NTIzMUI5
NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkM5
MjEyMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZGOEJERUIxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTBGQ0VGQUIwMTgwNUNBNkQwMDQ3MkNFNCAvKiBJbml0aWFsaXplTExWTS5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMEZDRUZBQ0MxODA1RTc1NTAwNDcyQ0U0IC8qIEluaXRpYWxp
emVMTFZNUE9TSVguaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDEwMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTEzRTVCODE4
NUI4QkQzMDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
MTRCMkMzMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmplY3RlZFNjcmlwdEJhc2UuaCBpbiBIZWFkZXJz
ICovLApAQCAtNzkxOSwxMCArNzcwNSw2IEBACiAJCQkJRkVEMjg3QjIxNUVDOUE1NzAwREE4MTYx
IC8qIExMSW50T3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBBNTE0QkE3RjhEMDBC
RkUyNzIgLyogTExJbnRTbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4MzlEMTRC
Q0Y0NjYwMDg4NUI0RiAvKiBMTEludFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEZDRUZB
Q0UxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGQ0VG
QUNGMTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywK
LQkJCQlBN0U1QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMEZDRUZBRDMxODA1RURDQzAwNDcyQ0U0IC8qIExMVk1IZWFkZXJzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDJFMzEzOTEzNEZGMEE2MDBBRkFEQjUgLyogTG9jYWwuaCBp
biBIZWFkZXJzICovLAogCQkJCTE0MkUzMTNBMTM0RkYwQTYwMEFGQURCNSAvKiBMb2NhbFNjb3Bl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQzNzBFMTZGNUNEMDBCMzQ0NjAgLyogTG9va3Vw
LmggaW4gSGVhZGVycyAqLywKQEAgLTgyNzEsMjMgKzgwNTMsNiBAQAogCQkJcHJvZHVjdFJlZmVy
ZW5jZSA9IDBGOTMyNzU5MUMyMEJDQkEwMENGNjU2NCAvKiBkeW5iZW5jaCAqLzsKIAkJCXByb2R1
Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUudG9vbCI7CiAJCX07Ci0JCTBGQ0VGQUI1
MTgwNUQ2MTYwMDQ3MkNFNCAvKiBsbHZtRm9ySlNDICovID0gewotCQkJaXNhID0gUEJYTmF0aXZl
VGFyZ2V0OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDBGQ0VGQUI3MTgwNUQ2MTYwMDQ3
MkNFNCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAibGx2
bUZvckpTQyIgKi87Ci0JCQlidWlsZFBoYXNlcyA9ICgKLQkJCQkwRkNFRkFCMjE4MDVENjE2MDA0
NzJDRTQgLyogU291cmNlcyAqLywKLQkJCQkwRkNFRkFCMzE4MDVENjE2MDA0NzJDRTQgLyogRnJh
bWV3b3JrcyAqLywKLQkJCQkwRkNFRkFCNDE4MDVENjE2MDA0NzJDRTQgLyogSGVhZGVycyAqLywK
LQkJCSk7Ci0JCQlidWlsZFJ1bGVzID0gKAotCQkJKTsKLQkJCWRlcGVuZGVuY2llcyA9ICgKLQkJ
CSk7Ci0JCQluYW1lID0gbGx2bUZvckpTQzsKLQkJCXByb2R1Y3ROYW1lID0gbGx2bUZvckpTQzsK
LQkJCXByb2R1Y3RSZWZlcmVuY2UgPSAwRkNFRkFCNjE4MDVENjE2MDA0NzJDRTQgLyogbGlibGx2
bUZvckpTQy5keWxpYiAqLzsKLQkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5
cGUubGlicmFyeS5keW5hbWljIjsKLQkJfTsKIAkJMEZFQzg1OTQxQkRCNUNGMTAwODBGRjc0IC8q
IHRlc3RiMyAqLyA9IHsKIAkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKIAkJCWJ1aWxkQ29uZmln
dXJhdGlvbkxpc3QgPSAwRkVDODVBODFCREI1Q0YxMDA4MEZGNzQgLyogQnVpbGQgY29uZmlndXJh
dGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInRlc3RiMyIgKi87CkBAIC04Mzg2LDcgKzgx
NTEsNiBAQAogCQkJCTM3MzI4MTFBMTdGQ0QyMzUwMDRBRDUxOSAvKiBQb3N0cHJvY2VzcyBIZWFk
ZXJzICovLAogCQkJCTkzMkY1QjkxMDgyMkExQzcwMDczNjk3NSAvKiBTb3VyY2VzICovLAogCQkJ
CTkzMkY1QkQyMDgyMkExQzcwMDczNjk3NSAvKiBGcmFtZXdvcmtzICovLAotCQkJCTBGQ0VGQUQ5
MTgwNjE5MTgwMDQ3MkNFNCAvKiBDb3B5IExMVk0gTGlicmFyeSBJbnRvIEZyYW1ld29yayAqLywK
IAkJCQk1RDI5RDhCRTBFOTg2MEI0MDBDM0QyRDAgLyogQ2hlY2sgRm9yIFdlYWsgVlRhYmxlcyBh
bmQgRXh0ZXJuYWxzICovLAogCQkJCTM3MTNGMDE0MTQyOTA1MjQwMDM2Mzg3RiAvKiBDaGVjayBG
b3IgSW5hcHByb3ByaWF0ZSBPYmplY3RpdmUtQyBDbGFzcyBOYW1lcyAqLywKIAkJCQlBNTVERUFB
NDE2NzAzREY3MDAzREI4NDEgLyogQ2hlY2sgRm9yIEluYXBwcm9wcmlhdGUgTWFjcm9zIGluIEV4
dGVybmFsIEhlYWRlcnMgKi8sCkBAIC04Mzk1LDcgKzgxNTksNiBAQAogCQkJYnVpbGRSdWxlcyA9
ICgKIAkJCSk7CiAJCQlkZXBlbmRlbmNpZXMgPSAoCi0JCQkJMEZDRUZBQkQxODA1RDY2MzAwNDcy
Q0U0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJNjU3ODhBQUQxOEI0MEE3QjAwQzE4
OUZGIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJNjVGQjNGN0UwOUQxMUVGMzAwRjQ5
REVCIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkpOwpAQCAtODQ1MCw3ICs4MjEzLDYg
QEAKIAkJCXRhcmdldHMgPSAoCiAJCQkJOTMyRjVCRTMwODIyQTFDNzAwNzM2OTc1IC8qIEFsbCAq
LywKIAkJCQk5MzJGNUIzRTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUgKi8sCi0J
CQkJMEZDRUZBQjUxODA1RDYxNjAwNDcyQ0U0IC8qIGxsdm1Gb3JKU0MgKi8sCiAJCQkJMEY0Njgw
QTkxNEJBN0ZEOTAwQkZFMjcyIC8qIExMSW50IE9mZnNldHMgKi8sCiAJCQkJNjVGQjNGNjYwOUQx
MUU5MTAwRjQ5REVCIC8qIERlcml2ZWQgU291cmNlcyAqLywKIAkJCQkwRkY5MjJDMzE0RjQ2QjEz
MDA0MUEyNEUgLyogSlNDTExJbnRPZmZzZXRzRXh0cmFjdG9yICovLApAQCAtODQ5NCwyMSArODI1
Niw2IEBACiAJCQlzaGVsbFBhdGggPSAvYmluL3NoOwogCQkJc2hlbGxTY3JpcHQgPSAic2V0IC1l
XG5cbm1rZGlyIC1wIFwiJHtCVUlMVF9QUk9EVUNUU19ESVJ9L0xMSW50T2Zmc2V0cy9cIlxuXG4v
dXNyL2Jpbi9lbnYgcnVieSBcIiR7U1JDUk9PVH0vb2ZmbGluZWFzbS9nZW5lcmF0ZV9vZmZzZXRf
ZXh0cmFjdG9yLnJiXCIgXCItSSR7QlVJTFRfUFJPRFVDVFNfRElSfS9EZXJpdmVkU291cmNlcy9K
YXZhU2NyaXB0Q29yZVwiIFwiJHtTUkNST09UfS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bVwiIFwiJHtCVUlMVF9QUk9EVUNUU19ESVJ9L0xMSW50T2Zmc2V0cy9MTEludERlc2lyZWRPZmZz
ZXRzLmhcIiBcIlg4NixYODZfNjQsQVJNdjcsQVJNdjdzLEFSTTY0LENfTE9PUFwiXG4iOwogCQl9
OwotCQkwRkNFRkFEOTE4MDYxOTE4MDA0NzJDRTQgLyogQ29weSBMTFZNIExpYnJhcnkgSW50byBG
cmFtZXdvcmsgKi8gPSB7Ci0JCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7Ci0JCQli
dWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJaW5w
dXRQYXRocyA9ICgKLQkJCQkiJChCVUlMVF9QUk9EVUNUU19ESVIpL2xpYmxsdm1Gb3JKU0MuZHls
aWIiLAotCQkJKTsKLQkJCW5hbWUgPSAiQ29weSBMTFZNIExpYnJhcnkgSW50byBGcmFtZXdvcmsi
OwotCQkJb3V0cHV0UGF0aHMgPSAoCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7Ci0JCQlzaGVsbFBhdGggPSAvYmluL3NoOwotCQkJc2hlbGxTY3JpcHQg
PSAic2V0IC1lXG5cbmlmIFtbICRFTkFCTEVfRlRMX0pJVCAhPSBcIkVOQUJMRV9GVExfSklUXCIg
XV1cbnRoZW5cbiAgICBleGl0IDBcbmZpXG5cbmlmIFtbICR7Q09ORklHVVJBVElPTjo9RGVidWd9
ICE9IFwiUHJvZHVjdGlvblwiIF1dXG50aGVuXG4gICAgIyBDb3B5IHRoZSBsbHZtRm9ySlNDIGxp
YnJhcnkgaW50byB0aGUgZnJhbWV3b3JrLlxuICAgIGRpdHRvIFwiJHtCVUlMVF9QUk9EVUNUU19E
SVJ9L2xpYmxsdm1Gb3JKU0MuZHlsaWJcIiBcIiR7QlVJTFRfUFJPRFVDVFNfRElSfS8ke0NPTlRF
TlRTX0ZPTERFUl9QQVRIfS9MaWJyYXJpZXMvbGlibGx2bUZvckpTQy5keWxpYlwiXG5maVxuXG5p
ZiBbWyAkUExBVEZPUk1fTkFNRSAhPSBcIm1hY29zeFwiIF1dXG50aGVuXG4gICAgZXhpdCAwXG5m
aVxuXG5pZiBbICEgLWUgXCIke0JVSUxUX1BST0RVQ1RTX0RJUn0vJHtXUkFQUEVSX05BTUV9L0xp
YnJhcmllc1wiIF1cbnRoZW5cbiAgICBsbiAtZnMgXCJWZXJzaW9ucy9DdXJyZW50L0xpYnJhcmll
c1wiIFwiJHtCVUlMVF9QUk9EVUNUU19ESVJ9LyR7V1JBUFBFUl9OQU1FfS9MaWJyYXJpZXNcIlxu
ZmkiOwotCQl9OwogCQkxQTAyRDlBODFCMzRBODgyMDAwRDE1MjIgLyogQWRkIFN5bWxpbmsgaW4g
L1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0gUEJYU2hl
bGxTY3JpcHRCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gODsKQEAgLTg3MTUsMTYg
Kzg0NjIsNiBAQAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwotCQkwRkNFRkFCMjE4MDVENjE2MDA0NzJDRTQgLyogU291cmNlcyAqLyA9IHsK
LQkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0
NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJCTBGQ0VGQUQ3MTgwNjE3NDYwMDQ3MkNFNCAvKiBM
TFZNQW5jaG9yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGQ0VGQUMzMTgwNUU3NDAwMDQ3MkNF
NCAvKiBMTFZNRXhwb3J0cy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRkNFRkFDMTE4MDVEOTRF
MDA0NzJDRTQgLyogTExWTU92ZXJyaWRlcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCSk7Ci0JCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKIAkJMEZFQzg1OTUx
QkRCNUNGMTAwODBGRjc0IC8qIFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVp
bGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC05MDQ4LDcgKzg3
ODUsNiBAQAogCQkJCTBGQjE3NjYyMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQTFCRjkxQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0
YWNrU2lua2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDQ0ZCMThBNjAwNzAw
MDFBMjdGOCAvKiBERkdTYWZlcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkUxODdBMTkx
QzBFMTNFMzAwMzhCQkNBIC8qIEZUTENvbXBpbGVCaW5hcnlPcC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4NkVDOUREMjEzMjhERjgyMDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODY4ODBGMUYxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4ODBGNEQxNDM1M0IyMTAwQjA4
RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MTEzLDI4
ICs4ODQ5LDE3IEBACiAJCQkJMEZFQTBBMDkxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENhcGFiaWxp
dGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjMzOEUxQjFCRjI4NkVBMDAxM0M4OEYgLyog
QjNCbG9ja0luc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEyNzE3MDk2
MjNCMDBCQjcyMkMgLyogRlRMQ29tbW9uVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBG
RUEwQTBCMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDb21waWxlLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTBGRTk1Rjc5MThCNTY5NDcwMEI1MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQkyQUM5MjJCQjE4QTE2MTgyMDAzQ0UwRkIgLyogRlRMRFdBUkZEZWJ1Z0xp
bmVJbmZvLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGOUM1RTVFMThFMzVGNUUwMEQ0MzFDMyAv
KiBGVExEV0FSRlJlZ2lzdGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkQzMTcxNzhF
MUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYy
MzVCRDUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYyQjlDRjQxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQcm9w
ZXJ0eVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGMjM1QkQ4MTcxNzhFMUMwMDY5MEM3
RiAvKiBGVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjlD
RjYxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkRBMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGMjk5NkIxN0EwQkI2NzAwMTA0MTdBIC8q
IEZUTEZhaWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMTkxN0Q1MUYyMjAwQ0EyQzQw
IC8qIEZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjI1RjFB
RjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTBGRUEwQTI4MTcwOTYyM0IwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTBEMTcwNTEzREIwMEJCNzIyQyAvKiBGVExK
SVRDb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkI4QUUyMUM0RUZFMTcwMDk2OTA1MiAv
KiBCM0JyZWFrQ3JpdGljYWxFZGdlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhBOTc4MDE3
OTczOEQ1MDA5REY3NDQgLyogRlRMSklURmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTBGNkIxQ0I1MTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJMEZEMTIwMkYxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY3MjVDQUYxQzUwNkQzQjAwQUQ5NDNBIC8qIEIzRm9sZFBhdGhDb25z
dGFudHMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEZEMTIwMzMxQThDODVCRDAwMEY1MjgwIC8q
IEZUTEpTQ2FsbFZhcmFyZ3MuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNjI3NzREQUExQjhENEIx
OTAwMDZGMDVBIC8qIEZUTEpTVGFpbENhbGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUxODdB
MEUxQzAzMEQ2NDAwMzhCQkNBIC8qIEpJVERpdkdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkI0RkI3MzFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGOEYyQjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCBp
biBTb3VyY2VzICovLApAQCAtOTE0NCwxOCArODg2OSwxNSBAQAogCQkJCTBGRDhBMzFCMTdENTFG
MjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJE
QzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjIzNUJERjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCTBGRUEwQTJBMTcwOTYyOTYwMEJCNzIyQyAvKiBGVExPdXRwdXQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTU1MTY1RDIxQkRGMEI5ODAwM0I3NUMxIC8qIEluc3BlY3RvclNj
cmlwdFByb2ZpbGVyQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUzMjkxODdERkRF
QzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
Q0VGQUFCMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjI1RjFCMTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGMzM4REYxMUJFOTNBRDEwMDEzQzg4RiAvKiBCM1N0YWNrbWFw
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8q
IEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjlEMzM5QTE4MDNB
REI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQzMTlE
QTAzMUMxQkU0MEEwMDFEMjYwQiAvKiBCM0xvd2VyTWFjcm9zQWZ0ZXJPcHRpbWl6YXRpb25zLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTE2MTcwNkJCOTAwMEJCNzIyQyAvKiBGVExTdGF0
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJFMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
VGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGNkIxQ0M1MTg2MkM0NzgwMDg0NUQ5NyAv
KiBGVExVbndpbmRJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNUE2MjgzMTg4Qzk4RDQw
MDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBODM2Mzg5
MThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0N0YzOUNCMTA3RUMzNzYwMDQyN0E0OCAvKiBGdW5jdGlvbkNvbnN0cnVjdG9y
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTE4Niw5ICs4OTA4LDYgQEAKIAkJCQkwRjBBNzUyMjFC
OTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RkM5MjExMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQkwRkNFRkFDQTE4MDVFNzU1MDA0NzJDRTQgLyogSW5pdGlhbGl6
ZUxMVk0uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOUVBNUM3QTIxOTBGMDg4NzAwNTA4RUJFIC8q
IEluaXRpYWxpemVMTFZNTWFjLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTlFNzI5NDA4MTkwRjAy
MUUwMDFBOTFCNSAvKiBJbml0aWFsaXplTExWTVBPU0lYLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTlFNzI5NDA3MTkwRjAxQTUwMDFBOTFCNSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1MTNFNUI3MTg1QjhCRDMwMDdFOTVBRCAvKiBJbmplY3RlZFNjcmlw
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTE0QjJDMjE4NUE2ODQ0MDBGM0M3Q0IgLyogSW5q
ZWN0ZWRTY3JpcHRCYXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTM0Niw3ICs5MDY1LDYgQEAK
IAkJCQkwRjJCNjZGRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1MzRDNDU3RTFCQzcyNTQ5MDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmll
d0NvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCURFQTdFMjQ0MUJCQzY3NzIwMEQ3
ODQ0MCAvKiBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTc5REY2NkIwMUJGMjZBNTcwMDAxQ0YxMSAvKiBGVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxQTE2N0JBQkVFMDA2RDc2MEEgLyogSlNWYWx1
ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0QkQ1QTMyMEEzRTkxRjYwMEJBRjU5QyAvKiBKU1Zh
bHVlUmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RTNDNjFDMTY3QkFCRUUwMDZENzYwQSAv
KiBKU1ZpcnR1YWxNYWNoaW5lLm1tIGluIFNvdXJjZXMgKi8sCkBAIC05MzcxLDggKzkwODksNiBA
QAogCQkJCTBGNDY4MEE4MTRCQTdGQUIwMEJGRTI3MiAvKiBMTEludEV4Y2VwdGlvbnMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwQTQxNEJBN0Y4RDAwQkZFMjcyIC8qIExMSW50U2xvd1Bh
dGhzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMEI4MzlDMTRCQ0Y0NjMwMDg4NUI0RiAvKiBM
TEludFRodW5rcy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRkNFRkFDRDE4MDVFNzU1MDA0NzJD
RTQgLyogTExWTUFQSS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBN0U1QUIzNzE3OTlFNEIyMDBE
MjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURE
RTEwN0VDN0U3MDA2NTA0NDYgLyogTG9va3VwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4
MENDMTRCQkIxN0EwMEJGRTI3MiAvKiBMb3dMZXZlbEludGVycHJldGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1QUI0OURDMUJFQzgwODIwMDcwMjBGQiAvKiBQZXJHbG9iYWxPYmplY3RXcmFw
cGVyV29ybGQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05NjExLDExICs5MzI3LDYgQEAKIAkJCXRh
cmdldCA9IDBGOTMyNzRFMUMyMEJDQkEwMENGNjU2NCAvKiBkeW5iZW5jaCAqLzsKIAkJCXRhcmdl
dFByb3h5ID0gMEY5MzI3NUMxQzIwQkYzQTAwQ0Y2NTY0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94
eSAqLzsKIAkJfTsKLQkJMEZDRUZBQkQxODA1RDY2MzAwNDcyQ0U0IC8qIFBCWFRhcmdldERlcGVu
ZGVuY3kgKi8gPSB7Ci0JCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwotCQkJdGFyZ2V0ID0g
MEZDRUZBQjUxODA1RDYxNjAwNDcyQ0U0IC8qIGxsdm1Gb3JKU0MgKi87Ci0JCQl0YXJnZXRQcm94
eSA9IDBGQ0VGQUJDMTgwNUQ2NjMwMDQ3MkNFNCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87
Ci0JCX07CiAJCTBGRUM4NUIxMUJEQjVEOEYwMDgwRkY3NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5
ICovID0gewogCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKIAkJCXRhcmdldCA9IDBGRUM4
NTk0MUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi87CkBAIC05NzgxLDM0ICs5NDkyLDYgQEAK
IAkJCX07CiAJCQluYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsKLQkJMEZDRUZBQjgxODA1RDYxNjAw
NDcyQ0U0IC8qIERlYnVnICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0J
CQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDBGQ0VGQUJFMTgwNUQ4NjkwMDQ3MkNFNCAv
KiBMTFZNRm9ySlNDLnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCX07Ci0J
CQluYW1lID0gRGVidWc7Ci0JCX07Ci0JCTBGQ0VGQUI5MTgwNUQ2MTYwMDQ3MkNFNCAvKiBSZWxl
YXNlICovID0gewotCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247Ci0JCQliYXNlQ29uZmln
dXJhdGlvblJlZmVyZW5jZSA9IDBGQ0VGQUJFMTgwNUQ4NjkwMDQ3MkNFNCAvKiBMTFZNRm9ySlND
LnhjY29uZmlnICovOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCX07Ci0JCQluYW1lID0gUmVs
ZWFzZTsKLQkJfTsKLQkJMEZDRUZBQkExODA1RDYxNjAwNDcyQ0U0IC8qIFByb2ZpbGluZyAqLyA9
IHsKLQkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwotCQkJYmFzZUNvbmZpZ3VyYXRpb25S
ZWZlcmVuY2UgPSAwRkNFRkFCRTE4MDVEODY5MDA0NzJDRTQgLyogTExWTUZvckpTQy54Y2NvbmZp
ZyAqLzsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQl9OwotCQkJbmFtZSA9IFByb2ZpbGluZzsK
LQkJfTsKLQkJMEZDRUZBQkIxODA1RDYxNjAwNDcyQ0U0IC8qIFByb2R1Y3Rpb24gKi8gPSB7Ci0J
CQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKLQkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJl
bmNlID0gMEZDRUZBQkUxODA1RDg2OTAwNDcyQ0U0IC8qIExMVk1Gb3JKU0MueGNjb25maWcgKi87
Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJfTsKLQkJCW5hbWUgPSBQcm9kdWN0aW9uOwotCQl9
OwogCQkwRkVDODVBOTFCREI1Q0YxMDA4MEZGNzQgLyogRGVidWcgKi8gPSB7CiAJCQlpc2EgPSBY
Q0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMw
MjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOwpAQCAt
MTAyMDQsMTcgKzk4ODcsNiBAQAogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAw
OwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsKLQkJMEZD
RUZBQjcxODA1RDYxNjAwNDcyQ0U0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJY
TmF0aXZlVGFyZ2V0ICJsbHZtRm9ySlNDIiAqLyA9IHsKLQkJCWlzYSA9IFhDQ29uZmlndXJhdGlv
bkxpc3Q7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAotCQkJCTBGQ0VGQUI4MTgwNUQ2MTYw
MDQ3MkNFNCAvKiBEZWJ1ZyAqLywKLQkJCQkwRkNFRkFCOTE4MDVENjE2MDA0NzJDRTQgLyogUmVs
ZWFzZSAqLywKLQkJCQkwRkNFRkFCQTE4MDVENjE2MDA0NzJDRTQgLyogUHJvZmlsaW5nICovLAot
CQkJCTBGQ0VGQUJCMTgwNUQ2MTYwMDQ3MkNFNCAvKiBQcm9kdWN0aW9uICovLAotCQkJKTsKLQkJ
CWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKLQkJCWRlZmF1bHRDb25maWd1cmF0
aW9uTmFtZSA9IFByb2R1Y3Rpb247Ci0JCX07CiAJCTBGRUM4NUE4MUJEQjVDRjEwMDgwRkY3NCAv
KiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidGVzdGIzIiAq
LyA9IHsKIAkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRp
b25zID0gKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lv
biAxOTY2ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSwxMSArMzUsNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKLS8vIFdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgdHJhbnNpdGlvbiBmcm9tIExM
Vk0gdG8gQjMgYXMgdGhlIGJhY2tlbmQgZm9yIHRoZSBGVEwuIFRoaXMgZmxhZyB3aWxsIGdvCi0v
LyBhd2F5IG9uY2UgdGhhdCB0cmFuc2l0aW9uIGlzIGZpbmlzaGVkLiBGb3Igbm93LCB3ZSBlbmFi
bGUgQjMgYnkgZGVmYXVsdCBidXQgd2Ugc3RpbGwgaGF2ZSBzb21lIG9sZAotLy8gTExWTSBjb2Rl
IHRoYXQgaGFzbid0IGJlZW4gcmVtb3ZlZCB5ZXQuCi0jZGVmaW5lIEZUTF9VU0VTX0IzIDEKLQog
c3RydWN0IE5vZGU7CiAKIHR5cGVkZWYgdWludDMyX3QgQmxvY2tJbmRleDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNyAr
ODksNiBAQAogI2luY2x1ZGUgIkZUTExpbmsuaCIKICNpbmNsdWRlICJGVExMb3dlckRGR1RvTExW
TS5oIgogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCi0jaW5jbHVkZSAiSW5pdGlhbGl6ZUxMVk0uaCIK
ICNlbmRpZgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC0yMjUsNyArMjI0
LDcgQEAgdm9pZCBQbGFuOjpjb21waWxlSW5UaHJlYWQoTG9uZ0xpdmVkU3RhdAogICAgICAgICB9
CiAgICAgICAgIGRhdGFMb2coIk9wdGltaXplZCAiLCBjb2RlQmxvY2tOYW1lLCAiIHVzaW5nICIs
IG1vZGUsICIgd2l0aCAiLCBwYXRoTmFtZSwgIiBpbnRvICIsIGZpbmFsaXplciA/IGZpbmFsaXpl
ci0+Y29kZVNpemUoKSA6IDAsICIgYnl0ZXMgaW4gIiwgYWZ0ZXIgLSBiZWZvcmUsICIgbXMiKTsK
ICAgICAgICAgaWYgKHBhdGggPT0gRlRMUGF0aCkKLSAgICAgICAgICAgIGRhdGFMb2coIiAoREZH
OiAiLCBtX3RpbWVCZWZvcmVGVEwgLSBiZWZvcmUsICIsIExMVk06ICIsIGFmdGVyIC0gbV90aW1l
QmVmb3JlRlRMLCAiKSIpOworICAgICAgICAgICAgZGF0YUxvZygiIChERkc6ICIsIG1fdGltZUJl
Zm9yZUZUTCAtIGJlZm9yZSwgIiwgQjM6ICIsIGFmdGVyIC0gbV90aW1lQmVmb3JlRlRMLCAiKSIp
OwogICAgICAgICBkYXRhTG9nKCIuXG4iKTsKICAgICB9CiB9CkBAIC00NDAsNyArNDM5LDcgQEAg
UGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICBpZiAoT3B0
aW9uczo6dXNlTW92SGludFJlbW92YWwoKSkKICAgICAgICAgICAgIHBlcmZvcm1Nb3ZIaW50UmVt
b3ZhbChkZmcpOwogICAgICAgICBwZXJmb3JtQ2xlYW5VcChkZmcpOwotICAgICAgICBwZXJmb3Jt
RENFKGRmZyk7IC8vIFdlIHJlbHkgb24gdGhpcyB0byBraWxsIGRlYWQgY29kZSB0aGF0IHdvbid0
IGJlIHJlY29nbml6ZWQgYXMgZGVhZCBieSBMTFZNLgorICAgICAgICBwZXJmb3JtRENFKGRmZyk7
IC8vIFdlIHJlbHkgb24gdGhpcyB0byBraWxsIGRlYWQgY29kZSB0aGF0IHdvbid0IGJlIHJlY29n
bml6ZWQgYXMgZGVhZCBieSBCMy4KICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUNvcHlCYXJyaWVy
T3B0aW1pemF0aW9uKCkpCiAgICAgICAgICAgICBwZXJmb3JtQ29weUJhcnJpZXJPcHRpbWl6YXRp
b24oZGZnKTsKICAgICAgICAgcGVyZm9ybVN0YWNrTGF5b3V0KGRmZyk7CkBAIC00NTQsMzEgKzQ1
MywxNSBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAg
IH0KIAogICAgICAgICBkdW1wQW5kVmVyaWZ5R3JhcGgoZGZnLCAiR3JhcGgganVzdCBiZWZvcmUg
RlRMIGxvd2VyaW5nOiIsIHNob3VsZER1bXBEaXNhc3NlbWJseShtb2RlKSk7Ci0gICAgICAgIAot
I2lmIEhBVkUoTExWTSkgJiYgIUZUTF9VU0VTX0IzCi0gICAgICAgIGJvb2wgaGF2ZUxMVk07Ci0j
ZW5kaWYKKworICAgICAgICAvLyBGbGFzaCBhIHNhZmVwb2ludCBpbiBjYXNlIHRoZSBHQyB3YW50
cyBzb21lIGFjdGlvbi4KICAgICAgICAgU2FmZXBvaW50OjpSZXN1bHQgc2FmZXBvaW50UmVzdWx0
OwogICAgICAgICB7CiAgICAgICAgICAgICBHcmFwaFNhZmVwb2ludCBzYWZlcG9pbnQoZGZnLCBz
YWZlcG9pbnRSZXN1bHQpOwotI2lmIEhBVkUoTExWTSkgJiYgIUZUTF9VU0VTX0IzCi0gICAgICAg
ICAgICBoYXZlTExWTSA9IGluaXRpYWxpemVMTFZNKCk7Ci0jZW5kaWYKICAgICAgICAgfQogICAg
ICAgICBpZiAoc2FmZXBvaW50UmVzdWx0LmRpZEdldENhbmNlbGxlZCgpKQogICAgICAgICAgICAg
cmV0dXJuIENhbmNlbFBhdGg7CiAKLSNpZiBIQVZFKExMVk0pICYmICFGVExfVVNFU19CMwotICAg
ICAgICBpZiAoIWhhdmVMTFZNKSB7Ci0gICAgICAgICAgICBpZiAoT3B0aW9uczo6ZnRsQ3Jhc2hl
c0lmQ2FudEluaXRpYWxpemVMTFZNKCkpIHsKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJMTFZN
IGNhbid0IGJlIGluaXRpYWxpemVkLlxuIik7Ci0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbmFsaXplciA9IHN0ZDo6bWFrZV91bmlxdWU8RmFp
bGVkRmluYWxpemVyPigqdGhpcyk7Ci0gICAgICAgICAgICByZXR1cm4gRmFpbFBhdGg7Ci0gICAg
ICAgIH0KLSNlbmRpZgotCiAgICAgICAgIEZUTDo6U3RhdGUgc3RhdGUoZGZnKTsKICAgICAgICAg
RlRMOjpsb3dlckRGR1RvTExWTShzdGF0ZSk7CiAgICAgICAgIApAQCAtNTA0LDEzICs0ODcsNiBA
QCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgICAgICBy
ZXR1cm4gRlRMUGF0aDsKICAgICAgICAgfQogCi0jaWYgIUZUTF9VU0VTX0IzCi0gICAgICAgIGlm
IChzdGF0ZS5qaXRDb2RlLT5zdGFja21hcHMuc3RhY2tTaXplKCkgPiBPcHRpb25zOjpsbHZtTWF4
U3RhY2tTaXplKCkpIHsKLSAgICAgICAgICAgIEZUTDo6ZmFpbChzdGF0ZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gRlRMUGF0aDsKLSAgICAgICAgfQotI2VuZGlmCi0KICAgICAgICAgRlRMOjpsaW5r
KHN0YXRlKTsKICAgICAgICAgCiAgICAgICAgIGlmIChzdGF0ZS5hbGxvY2F0aW9uRmFpbGVkKSB7
CkBAIC02OTAsNyArNjY2LDcgQEAgSGFzaE1hcDxDU3RyaW5nLCBkb3VibGU+IFBsYW46OmNvbXBp
bGVUaQogICAgICAgICByZXN1bHQuYWRkKCJERkcgQ29tcGlsZSBUaW1lIiwgdG90YWxERkdDb21w
aWxlVGltZSk7CiAgICAgICAgIHJlc3VsdC5hZGQoIkZUTCBDb21waWxlIFRpbWUiLCB0b3RhbEZU
TENvbXBpbGVUaW1lKTsKICAgICAgICAgcmVzdWx0LmFkZCgiRlRMIChERkcpIENvbXBpbGUgVGlt
ZSIsIHRvdGFsRlRMREZHQ29tcGlsZVRpbWUpOwotICAgICAgICByZXN1bHQuYWRkKCJGVEwgKExM
Vk0pIENvbXBpbGUgVGltZSIsIHRvdGFsRlRMTExWTUNvbXBpbGVUaW1lKTsKKyAgICAgICAgcmVz
dWx0LmFkZCgiRlRMIChCMykgQ29tcGlsZSBUaW1lIiwgdG90YWxGVExMTFZNQ29tcGlsZVRpbWUp
OwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Rpc2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5jcHAJKHJl
dmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJN
NjREaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi1ib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQcmlu
dFN0cmVhbSYgb3V0LCBJbnN0cnVjdGlvblN1YnNldEhpbnQpCitib29sIHRyeVRvRGlzYXNzZW1i
bGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29u
c3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQogewogICAgIEE2NERPcGNvZGUgYXJt
NjRPcGNvZGU7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJN
djdEaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
aXNhc3NlbWJsZXIvQVJNdjdEaXNhc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTXY3RGlzYXNzZW1ibGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotYm9v
bCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgY29kZVB0ciwg
c2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCwgSW5zdHJ1
Y3Rpb25TdWJzZXRIaW50KQorYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciYgY29kZVB0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJp
bnRTdHJlYW0mIG91dCkKIHsKICAgICBBUk12N0RPcGNvZGUgYXJtT3Bjb2RlOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9EaXNhc3NlbWJsZXIu
Y3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1i
bGVyL0Rpc2Fzc2VtYmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDkgKzM3LDkgQEAKIAog
bmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgZGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQcmludFN0
cmVhbSYgb3V0LCBJbnN0cnVjdGlvblN1YnNldEhpbnQgc3Vic2V0SGludCkKK3ZvaWQgZGlzYXNz
ZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwg
Y29uc3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQogewotICAgIGlmICh0cnlUb0Rp
c2Fzc2VtYmxlKGNvZGVQdHIsIHNpemUsIHByZWZpeCwgb3V0LCBzdWJzZXRIaW50KSkKKyAgICBp
ZiAodHJ5VG9EaXNhc3NlbWJsZShjb2RlUHRyLCBzaXplLCBwcmVmaXgsIG91dCkpCiAgICAgICAg
IHJldHVybjsKICAgICAKICAgICBvdXQucHJpbnRmKCIlc2Rpc2Fzc2VtYmx5IG5vdCBhdmFpbGFi
bGUgZm9yIHJhbmdlICVwLi4uJXBcbiIsIHByZWZpeCwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVz
cygpLCBzdGF0aWNfY2FzdDxjaGFyKj4oY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKSArIHNp
emUpOwpAQCAtNjcsNyArNjcsNiBAQCBwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGNvZGVSZWY7CiAgICAgc2l6ZV90IHNpemUgeyAwIH07CiAgICAgY29uc3QgY2hhciogcHJlZml4
IHsgbnVsbHB0ciB9OwotICAgIEluc3RydWN0aW9uU3Vic2V0SGludCBzdWJzZXRIaW50IHsgTWFj
cm9Bc3NlbWJsZXJTdWJzZXQgfTsKIH07CiAKIGNsYXNzIEFzeW5jaHJvbm91c0Rpc2Fzc2VtYmxl
ciB7CkBAIC0xMDcsOSArMTA2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgZGF0YUxvZyh0YXNrLT5oZWFkZXIpOwotICAgICAgICAgICAgZGlzYXNzZW1ibGUoCi0g
ICAgICAgICAgICAgICAgdGFzay0+Y29kZVJlZi5jb2RlKCksIHRhc2stPnNpemUsIHRhc2stPnBy
ZWZpeCwgV1RGOjpkYXRhRmlsZSgpLAotICAgICAgICAgICAgICAgIHRhc2stPnN1YnNldEhpbnQp
OworICAgICAgICAgICAgZGlzYXNzZW1ibGUodGFzay0+Y29kZVJlZi5jb2RlKCksIHRhc2stPnNp
emUsIHRhc2stPnByZWZpeCwgV1RGOjpkYXRhRmlsZSgpKTsKICAgICAgICAgfQogICAgIH0KICAg
ICAKQEAgLTEzMSwxNSArMTI4LDEzIEBAIEFzeW5jaHJvbm91c0Rpc2Fzc2VtYmxlciYgYXN5bmNo
cm9ub3VzRGkKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCiB2b2lkIGRpc2Fzc2VtYmxlQXN5
bmNocm9ub3VzbHkoCi0gICAgY29uc3QgQ1N0cmluZyYgaGVhZGVyLCBjb25zdCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYmIGNvZGVSZWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsCi0g
ICAgSW5zdHJ1Y3Rpb25TdWJzZXRIaW50IHN1YnNldEhpbnQpCisgICAgY29uc3QgQ1N0cmluZyYg
aGVhZGVyLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGVSZWYsIHNpemVfdCBzaXpl
LCBjb25zdCBjaGFyKiBwcmVmaXgpCiB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPERpc2Fzc2VtYmx5
VGFzaz4gdGFzayA9IHN0ZDo6bWFrZV91bmlxdWU8RGlzYXNzZW1ibHlUYXNrPigpOwogICAgIHRh
c2stPmhlYWRlciA9IHN0cmR1cChoZWFkZXIuZGF0YSgpKTsgLy8gWXVjayEgV2UgbmVlZCB0aGlz
IGJlY2F1c2UgQ1N0cmluZyBkb2VzIHJhY3kgcmVmY291bnRpbmcuCiAgICAgdGFzay0+Y29kZVJl
ZiA9IGNvZGVSZWY7CiAgICAgdGFzay0+c2l6ZSA9IHNpemU7CiAgICAgdGFzay0+cHJlZml4ID0g
cHJlZml4OwotICAgIHRhc2stPnN1YnNldEhpbnQgPSBzdWJzZXRIaW50OwogICAgIAogICAgIGFz
eW5jaHJvbm91c0Rpc2Fzc2VtYmxlcigpLmVucXVldWUoV1RGTW92ZSh0YXNrKSk7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0Rpc2Fzc2VtYmxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVy
LmgJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJs
ZXIvRGlzYXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEyICszNiwxMCBAQCBuYW1l
c3BhY2UgSlNDIHsKIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjsKIGNsYXNzIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjsKIAotZW51bSBJbnN0cnVjdGlvblN1YnNldEhpbnQgeyBNYWNyb0Fzc2Vt
YmxlclN1YnNldCwgTExWTVN1YnNldCB9OwotCiAjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKLWJv
b2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImLCBzaXplX3Qs
IGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mLCBJbnN0cnVjdGlvblN1YnNldEhpbnQg
PSBNYWNyb0Fzc2VtYmxlclN1YnNldCk7Citib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyJiwgc2l6ZV90LCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3Ry
ZWFtJik7CiAjZWxzZQotaW5saW5lIGJvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHImLCBzaXplX3QsIGNvbnN0IGNoYXIqLCBQcmludFN0cmVhbSYsIEluc3Ry
dWN0aW9uU3Vic2V0SGludCA9IE1hY3JvQXNzZW1ibGVyU3Vic2V0KQoraW5saW5lIGJvb2wgdHJ5
VG9EaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImLCBzaXplX3QsIGNvbnN0
IGNoYXIqLCBQcmludFN0cmVhbSYpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNDksMTMg
KzQ3LDEyIEBAIGlubGluZSBib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3QgTWFjcm8KIAogLy8g
UHJpbnRzIGVpdGhlciB0aGUgZGlzYXNzZW1ibHksIG9yIGEgbGluZSBvZiB0ZXh0IGluZGljYXRp
bmcgdGhhdCBkaXNhc3NlbWJseSBmYWlsZWQgYW5kCiAvLyB0aGUgcmFuZ2Ugb2YgbWFjaGluZSBj
b2RlIGFkZHJlc3Nlcy4KLXZvaWQgZGlzYXNzZW1ibGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyJiwgc2l6ZV90LCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQsIEluc3Ry
dWN0aW9uU3Vic2V0SGludCA9IE1hY3JvQXNzZW1ibGVyU3Vic2V0KTsKK3ZvaWQgZGlzYXNzZW1i
bGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiwgc2l6ZV90LCBjb25zdCBjaGFyKiBwcmVm
aXgsIFByaW50U3RyZWFtJiBvdXQpOwogCiAvLyBBc3luY2hyb25vdXMgZGlzYXNzZW1ibHkuIFRo
aXMgaGFwcGVucyBvbiBhbm90aGVyIHRocmVhZCwgYW5kIGNhbGxzIHRoZSBwcm92aWRlZAogLy8g
Y2FsbGJhY2sgd2hlbiB0aGUgZGlzYXNzZW1ibHkgaXMgZG9uZS4KIHZvaWQgZGlzYXNzZW1ibGVB
c3luY2hyb25vdXNseSgKLSAgICBjb25zdCBDU3RyaW5nJiBoZWFkZXIsIGNvbnN0IE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiYsIHNpemVfdCwgY29uc3QgY2hhciogcHJlZml4LAotICAgIEluc3RydWN0
aW9uU3Vic2V0SGludCA9IE1hY3JvQXNzZW1ibGVyU3Vic2V0KTsKKyAgICBjb25zdCBDU3RyaW5n
JiBoZWFkZXIsIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIHNpemVfdCwgY29uc3QgY2hh
ciogcHJlZml4KTsKIAogSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB3YWl0Rm9yQXN5bmNocm9ub3Vz
RGlzYXNzZW1ibHkoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxl
ci9MTFZNRGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAxOTY2ODUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJM
TFZNRGlzYXNzZW1ibGVyLmgiCi0KLSNpZiBVU0UoTExWTV9ESVNBU1NFTUJMRVIpCi0KLSNpbmNs
dWRlICJJbml0aWFsaXplTExWTS5oIgotI2luY2x1ZGUgIkxMVk1BUEkuaCIKLSNpbmNsdWRlICJN
YWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXN0YXRpYyBjb25z
dCB1bnNpZ25lZCBzeW1ib2xTdHJpbmdTaXplID0gNDA7Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpz
eW1ib2xMb29rdXBDYWxsYmFjaygKLSAgICB2b2lkKiBvcGFxdWUsIHVpbnQ2NF90IHJlZmVyZW5j
ZVZhbHVlLCB1aW50NjRfdCogcmVmZXJlbmNlVHlwZSwgdWludDY0X3QgcmVmZXJlbmNlUEMsCi0g
ICAgY29uc3QgY2hhcioqIHJlZmVyZW5jZU5hbWUpCi17Ci0gICAgLy8gU2V0IHRoaXMgaWYgeW91
IHdhbnQgdG8gZGVidWcgYW4gdW5leHBlY3RlZCByZWZlcmVuY2UgdHlwZS4gQ3VycmVudGx5IHdl
IG9ubHkgZW5jb3VudGVyIHRoZXNlCi0gICAgLy8gaWYgd2UgdHJ5IHRvIGRpc2Fzc2VtYmxlIGdh
cmJhZ2UsIHNpbmNlIG91ciBjb2RlIGdlbmVyYXRvciBuZXZlciB1c2VzIHRoZW0uIFRoZXNlIGlu
Y2x1ZGUgdGhpbmdzCi0gICAgLy8gbGlrZSBQQy1yZWxhdGl2ZSByZWZlcmVuY2VzLgotICAgIHN0
YXRpYyBjb25zdCBib29sIGNyYXNoT25VbmV4cGVjdGVkID0gZmFsc2U7Ci0gICAgCi0gICAgY2hh
ciogc3ltYm9sU3RyaW5nID0gc3RhdGljX2Nhc3Q8Y2hhcio+KG9wYXF1ZSk7Ci0gICAgCi0gICAg
c3dpdGNoICgqcmVmZXJlbmNlVHlwZSkgewotICAgIGNhc2UgTExWTURpc2Fzc2VtYmxlcl9SZWZl
cmVuY2VUeXBlX0luT3V0X05vbmU6Ci0gICAgICAgIHJldHVybiAwOwotICAgIGNhc2UgTExWTURp
c2Fzc2VtYmxlcl9SZWZlcmVuY2VUeXBlX0luX0JyYW5jaDoKLSAgICAgICAgKnJlZmVyZW5jZU5h
bWUgPSAwOwotICAgICAgICAqcmVmZXJlbmNlVHlwZSA9IExMVk1EaXNhc3NlbWJsZXJfUmVmZXJl
bmNlVHlwZV9Jbk91dF9Ob25lOwotICAgICAgICBzbnByaW50ZigKLSAgICAgICAgICAgIHN5bWJv
bFN0cmluZywgc3ltYm9sU3RyaW5nU2l6ZSwgIjB4JWx4IiwKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmc+KHJlZmVyZW5jZVZhbHVlKSk7Ci0gICAgICAgIHJldHVybiBzeW1i
b2xTdHJpbmc7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKGNyYXNoT25VbmV4cGVjdGVkKSB7
Ci0gICAgICAgICAgICBkYXRhTG9nKCJyZWZlcmVuY2VWYWx1ZSA9ICIsIHJlZmVyZW5jZVZhbHVl
LCAiXG4iKTsKLSAgICAgICAgICAgIGRhdGFMb2coInJlZmVyZW5jZVR5cGUgPSAiLCBSYXdQb2lu
dGVyKHJlZmVyZW5jZVR5cGUpLCAiLCAqcmVmZXJlbmNlVHlwZSA9ICIsICpyZWZlcmVuY2VUeXBl
LCAiXG4iKTsKLSAgICAgICAgICAgIGRhdGFMb2coInJlZmVyZW5jZVBDID0gIiwgcmVmZXJlbmNl
UEMsICJcbiIpOwotICAgICAgICAgICAgZGF0YUxvZygicmVmZXJlbmNlTmFtZSA9ICIsIFJhd1Bv
aW50ZXIocmVmZXJlbmNlTmFtZSksICJcbiIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICAqcmVmZXJlbmNlTmFtZSA9ICJ1bmltcGxlbWVudGVkIHJlZmVyZW5jZSB0eXBlISI7Ci0gICAg
ICAgICpyZWZlcmVuY2VUeXBlID0gTExWTURpc2Fzc2VtYmxlcl9SZWZlcmVuY2VUeXBlX0luT3V0
X05vbmU7Ci0gICAgICAgIHNucHJpbnRmKAotICAgICAgICAgICAgc3ltYm9sU3RyaW5nLCBzeW1i
b2xTdHJpbmdTaXplLCAidW5pbXBsZW1lbnRlZDoweCVseCIsCi0gICAgICAgICAgICBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nPihyZWZlcmVuY2VWYWx1ZSkpOwotICAgICAgICByZXR1cm4gc3lt
Ym9sU3RyaW5nOwotICAgIH0KLX0KLQotYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlV2l0aExMVk0oCi0g
ICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29u
c3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0LAotICAgIEluc3RydWN0aW9uU3Vic2V0
SGludCkKLXsKLSAgICBpbml0aWFsaXplTExWTSgpOwotICAgIAotICAgIGNvbnN0IGNoYXIqIHRy
aXBsZTsKLSNpZiBDUFUoWDg2XzY0KQotICAgIHRyaXBsZSA9ICJ4ODZfNjQtYXBwbGUtZGFyd2lu
IjsKLSNlbGlmIENQVShYODYpCi0gICAgdHJpcGxlID0gIng4Ni1hcHBsZS1kYXJ3aW4iOwotI2Vs
aWYgQ1BVKEFSTTY0KQotICAgIHRyaXBsZSA9ICJhcm02NC1hcHBsZS1kYXJ3aW4iOwotI2Vsc2UK
LSNlcnJvciAiTExWTSBkaXNhc3NlbWJsZXIgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgb24gdGhp
cyBDUFUuIgotI2VuZGlmCi0KLSAgICBjaGFyIHN5bWJvbFN0cmluZ1tzeW1ib2xTdHJpbmdTaXpl
XTsKLSAgICAKLSAgICBMTFZNRGlzYXNtQ29udGV4dFJlZiBkaXNhc3NlbWJseUNvbnRleHQgPQot
ICAgICAgICBsbHZtLT5DcmVhdGVEaXNhc20odHJpcGxlLCBzeW1ib2xTdHJpbmcsIDAsIDAsIHN5
bWJvbExvb2t1cENhbGxiYWNrKTsKLSAgICBSRUxFQVNFX0FTU0VSVChkaXNhc3NlbWJseUNvbnRl
eHQpOwotICAgIAotICAgIGNoYXIgcGNTdHJpbmdbMjBdOwotICAgIGNoYXIgaW5zdHJ1Y3Rpb25T
dHJpbmdbMTAwMF07Ci0gICAgCi0gICAgdWludDhfdCogcGMgPSBzdGF0aWNfY2FzdDx1aW50OF90
Kj4oY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICB1aW50OF90KiBlbmQgPSBwYyAr
IHNpemU7Ci0gICAgCi0gICAgd2hpbGUgKHBjIDwgZW5kKSB7Ci0gICAgICAgIHNucHJpbnRmKAot
ICAgICAgICAgICAgcGNTdHJpbmcsIHNpemVvZihwY1N0cmluZyksICIweCVseCIsCi0gICAgICAg
ICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihw
YykpKTsKLQotICAgICAgICBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplID0gbGx2bS0+RGlzYXNtSW5z
dHJ1Y3Rpb24oCi0gICAgICAgICAgICBkaXNhc3NlbWJseUNvbnRleHQsIHBjLCBlbmQgLSBwYywg
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocGMpLAotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25TdHJp
bmcsIHNpemVvZihpbnN0cnVjdGlvblN0cmluZykpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFp
bnN0cnVjdGlvblNpemUpCi0gICAgICAgICAgICBzbnByaW50ZihpbnN0cnVjdGlvblN0cmluZywg
c2l6ZW9mKGluc3RydWN0aW9uU3RyaW5nKSwgIi5ieXRlIDB4JTAyeCIsICpwYysrKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgcGMgKz0gaW5zdHJ1Y3Rpb25TaXplOwotICAgICAgICAKLSAg
ICAgICAgb3V0LnByaW50ZigiJXMlMTZzOiAlc1xuIiwgcHJlZml4LCBwY1N0cmluZywgaW5zdHJ1
Y3Rpb25TdHJpbmcpOwotICAgIH0KLSAgICAKLSAgICBsbHZtLT5EaXNhc21EaXNwb3NlKGRpc2Fz
c2VtYmx5Q29udGV4dCk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIEpTQwotCi0jZW5kaWYgLy8gVVNFKExMVk1fRElTQVNTRU1CTEVSKQotCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0xMVk1EaXNhc3NlbWJs
ZXIuaAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2Vt
Ymxlci9MTFZNRGlzYXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDYgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIExM
Vk1EaXNhc3NlbWJsZXJfaAotI2RlZmluZSBMTFZNRGlzYXNzZW1ibGVyX2gKLQotI2luY2x1ZGUg
IkRpc2Fzc2VtYmxlci5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotI2lmIFVTRShMTFZNX0RJU0FT
U0VNQkxFUikKLQotYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlV2l0aExMVk0oY29uc3QgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogcHJlZml4LCBQ
cmludFN0cmVhbSYgb3V0LCBJbnN0cnVjdGlvblN1YnNldEhpbnQpOwotCi0jZWxzZSAvLyBVU0Uo
TExWTV9ESVNBU1NFTUJMRVIpCi0KLWlubGluZSBib29sIHRyeVRvRGlzYXNzZW1ibGVXaXRoTExW
TShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImLCBzaXplX3QsIGNvbnN0IGNoYXIqLCBQcmlu
dFN0cmVhbSYsIEluc3RydWN0aW9uU3Vic2V0SGludCkgeyByZXR1cm4gZmFsc2U7IH0KLQotI2Vu
ZGlmIC8vIFVTRShMTFZNX0RJU0FTU0VNQkxFUikKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNl
bmRpZiAvLyBMTFZNRGlzYXNzZW1ibGVyX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Rpc2Fzc2VtYmxlci9VRGlzODZEaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvVURpczg2RGlzYXNzZW1ibGVyLmNwcAkocmV2
aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9VRGlz
ODZEaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw3ICszMyw3
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1ib29sIHRyeVRvRGlzYXNzZW1ibGVXaXRoVURpczg2
KGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgY29kZVB0ciwgc2l6ZV90IHNpemUsIGNvbnN0
IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCwgSW5zdHJ1Y3Rpb25TdWJzZXRIaW50KQor
Ym9vbCB0cnlUb0Rpc2Fzc2VtYmxlV2l0aFVEaXM4Nihjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHImIGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFt
JiBvdXQpCiB7CiAgICAgdWRfdCBkaXNhc3NlbWJsZXI7CiAgICAgdWRfaW5pdCgmZGlzYXNzZW1i
bGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvVURpczg2RGlz
YXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2Vt
Ymxlci9VRGlzODZEaXNhc3NlbWJsZXIuaAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9VRGlzODZEaXNhc3NlbWJsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsMTEgKzMyLDExIEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKFVESVM4
NikKIAotYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlV2l0aFVEaXM4Nihjb25zdCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHImIGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50
U3RyZWFtJiBvdXQsIEluc3RydWN0aW9uU3Vic2V0SGludCk7Citib29sIHRyeVRvRGlzYXNzZW1i
bGVXaXRoVURpczg2KGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgY29kZVB0ciwgc2l6ZV90
IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCwgUHJpbnRTdHJlYW0mIG91dCk7CiAKICNlbHNlIC8v
IFVTRShVRElTODYpCiAKLWlubGluZSBib29sIHRyeVRvRGlzYXNzZW1ibGVXaXRoVURpczg2KGNv
bnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYsIHNpemVfdCwgY29uc3QgY2hhciosIFByaW50U3Ry
ZWFtJiwgSW5zdHJ1Y3Rpb25TdWJzZXRIaW50KSB7IHJldHVybiBmYWxzZTsgfQoraW5saW5lIGJv
b2wgdHJ5VG9EaXNhc3NlbWJsZVdpdGhVRGlzODYoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
Jiwgc2l6ZV90LCBjb25zdCBjaGFyKiwgUHJpbnRTdHJlYW0mKSB7IHJldHVybiBmYWxzZTsgfQog
CiAjZW5kaWYgLy8gVVNFKFVESVM4NikKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rp
c2Fzc2VtYmxlci9YODZEaXNhc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMTk2
Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9YODZEaXNhc3NlbWJs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlVEaXM4
NkRpc2Fzc2VtYmxlci5oIgotI2luY2x1ZGUgIkxMVk1EaXNhc3NlbWJsZXIuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTQzLDI5ICs0Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogLy8gd2hldGhl
ciBoZSdzIHVzaW5nIHRoZSBzdWJzZXQgb2YgdGhlIGFyY2hpdGVjdHVyZSB0aGF0IG91ciBNYWNy
b0Fzc2VtYmxlcgogLy8gc3VwcG9ydHMgKGluIHdoaWNoIGNhc2Ugd2UgZ28gd2l0aCBVRGlzODYp
IG9yIGlmIGhlJ3MgdXNpbmcgdGhlIExMVk0gc3Vic2V0LgogCi1ib29sIHRyeVRvRGlzYXNzZW1i
bGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29u
c3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0LCBJbnN0cnVjdGlvblN1YnNldEhpbnQg
c3Vic2V0SGludCkKK2Jvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHImIGNvZGVQdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3Ry
ZWFtJiBvdXQpCiB7Ci0gICAgaWYgKE9wdGlvbnM6OmZvcmNlVURpczg2RGlzYXNzZW1ibGVyKCkp
Ci0gICAgICAgIHJldHVybiB0cnlUb0Rpc2Fzc2VtYmxlV2l0aFVEaXM4Nihjb2RlUHRyLCBzaXpl
LCBwcmVmaXgsIG91dCwgc3Vic2V0SGludCk7Ci0KLSAgICBpZiAoT3B0aW9uczo6Zm9yY2VMTFZN
RGlzYXNzZW1ibGVyKCkpCi0gICAgICAgIHJldHVybiB0cnlUb0Rpc2Fzc2VtYmxlV2l0aExMVk0o
Y29kZVB0ciwgc2l6ZSwgcHJlZml4LCBvdXQsIHN1YnNldEhpbnQpOwotICAgIAotICAgIGlmIChz
dWJzZXRIaW50ID09IE1hY3JvQXNzZW1ibGVyU3Vic2V0Ci0gICAgICAgICYmIHRyeVRvRGlzYXNz
ZW1ibGVXaXRoVURpczg2KGNvZGVQdHIsIHNpemUsIHByZWZpeCwgb3V0LCBNYWNyb0Fzc2VtYmxl
clN1YnNldCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKHN1YnNldEhpbnQgPT0g
TExWTVN1YnNldAotICAgICAgICAmJiB0cnlUb0Rpc2Fzc2VtYmxlV2l0aExMVk0oY29kZVB0ciwg
c2l6ZSwgcHJlZml4LCBvdXQsIExMVk1TdWJzZXQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAKLSAgICBpZiAodHJ5VG9EaXNhc3NlbWJsZVdpdGhVRGlzODYoY29kZVB0ciwgc2l6ZSwgcHJl
Zml4LCBvdXQsIHN1YnNldEhpbnQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAodHJ5
VG9EaXNhc3NlbWJsZVdpdGhMTFZNKGNvZGVQdHIsIHNpemUsIHByZWZpeCwgb3V0LCBzdWJzZXRI
aW50KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRyeVRvRGlzYXNzZW1i
bGVXaXRoVURpczg2KGNvZGVQdHIsIHNpemUsIHByZWZpeCwgb3V0KTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGVk
VHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJl
dmlhdGVkVHlwZXMuaAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExBYmJyZXZpYXRlZFR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYg
QEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgotI2luY2x1
ZGUgIkxMVk1IZWFkZXJzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogY2xh
c3MgQmFzaWNCbG9jazsKQEAgLTM5LDM4ICszOCwxMCBAQCBlbnVtIFR5cGUgOiBpbnQ4X3Q7CiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAotI2lmIEZUTF9VU0VTX0IzCiB0eXBl
ZGVmIEIzOjpCYXNpY0Jsb2NrKiBMQmFzaWNCbG9jazsKIHR5cGVkZWYgQjM6OlR5cGUgTFR5cGU7
CiB0eXBlZGVmIEIzOjpWYWx1ZSogTFZhbHVlOwogCi10eXBlZGVmIHZvaWQqIExBdG9taWNPcmRl
cmluZzsKLXR5cGVkZWYgdm9pZCogTEJ1aWxkZXI7Ci10eXBlZGVmIHZvaWQqIExDYWxsQ29udjsK
LXR5cGVkZWYgdm9pZCogTENvbnRleHQ7Ci10eXBlZGVmIHZvaWQqIExJbnRQcmVkaWNhdGU7Ci10
eXBlZGVmIHZvaWQqIExMaW5rYWdlOwotdHlwZWRlZiB2b2lkKiBMTW9kdWxlOwotdHlwZWRlZiB2
b2lkKiBMUmVhbFByZWRpY2F0ZTsKLXR5cGVkZWYgdm9pZCogTE1lbW9yeUJ1ZmZlcjsKLSNlbHNl
Ci10eXBlZGVmIExMVk1CYXNpY0Jsb2NrUmVmIExCYXNpY0Jsb2NrOwotdHlwZWRlZiBMTFZNVHlw
ZVJlZiBMVHlwZTsKLXR5cGVkZWYgTExWTVZhbHVlUmVmIExWYWx1ZTsKLQotdHlwZWRlZiBMTFZN
QXRvbWljT3JkZXJpbmcgTEF0b21pY09yZGVyaW5nOwotdHlwZWRlZiBMTFZNQnVpbGRlclJlZiBM
QnVpbGRlcjsKLXR5cGVkZWYgTExWTUNhbGxDb252IExDYWxsQ29udjsKLXR5cGVkZWYgTExWTUNv
bnRleHRSZWYgTENvbnRleHQ7Ci10eXBlZGVmIExMVk1JbnRQcmVkaWNhdGUgTEludFByZWRpY2F0
ZTsKLXR5cGVkZWYgTExWTUxpbmthZ2UgTExpbmthZ2U7Ci10eXBlZGVmIExMVk1Nb2R1bGVSZWYg
TE1vZHVsZTsKLXR5cGVkZWYgTExWTVJlYWxQcmVkaWNhdGUgTFJlYWxQcmVkaWNhdGU7Ci10eXBl
ZGVmIExMVk1NZW1vcnlCdWZmZXJSZWYgTE1lbW9yeUJ1ZmZlcjsKLSNlbmRpZgotCi1lbnVtIFN5
bmNocm9uaXphdGlvblNjb3BlIHsgU2luZ2xlVGhyZWFkLCBDcm9zc1RocmVhZCB9OwotCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCShyZXZpc2lv
biAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSwzMTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEZUTEFiYnJldmlhdGlvbnNf
aAotI2RlZmluZSBGVExBYmJyZXZpYXRpb25zX2gKLQotI2lmIEVOQUJMRShGVExfSklUKQotCi0j
aW5jbHVkZSAiRlRMQWJicmV2aWF0ZWRUeXBlcy5oIgotI2luY2x1ZGUgIkZUTFZhbHVlRnJvbUJs
b2NrLmgiCi0jaW5jbHVkZSAiTExWTUFQSS5oIgotI2luY2x1ZGUgPGNzdHJpbmc+Ci0KLW5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKLQotI2lmICFGVExfVVNFU19CMwotCi0vLyBUaGlz
IGZpbGUgY29udGFpbnMgc2hvcnQtZm9ybSBjYWxscyBpbnRvIHRoZSBMTFZNIEMgQVBJLiBJdCBp
cyBtZWFudCB0bwotLy8gc2F2ZSB0eXBpbmcgYW5kIG1ha2UgdGhlIGxvd2VyaW5nIGNvZGUgY2xl
YXJlci4gSWYgd2UgZXZlciBjYWxsIGFuIExMVk0gQyBBUEkKLS8vIGZ1bmN0aW9uIG1vcmUgdGhh
biBvbmNlIGluIHRoZSBGVEwgbG93ZXJpbmcgY29kZSwgd2Ugc2hvdWxkIGFkZCBhIHNob3J0Y3V0
IGZvcgotLy8gaXQgaGVyZS4KLQotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0jZXJyb3IgIlRoZSBG
VEwgYmFja2VuZCBhc3N1bWVzIHRoYXQgcG9pbnRlcnMgYXJlIDY0LWJpdC4iCi0jZW5kaWYKLQot
c3RhdGljIGlubGluZSBMVHlwZSB2b2lkVHlwZShMQ29udGV4dCBjb250ZXh0KSB7IHJldHVybiBs
bHZtLT5Wb2lkVHlwZUluQ29udGV4dChjb250ZXh0KTsgfQotc3RhdGljIGlubGluZSBMVHlwZSBp
bnQxVHlwZShMQ29udGV4dCBjb250ZXh0KSB7IHJldHVybiBsbHZtLT5JbnQxVHlwZUluQ29udGV4
dChjb250ZXh0KTsgfQotc3RhdGljIGlubGluZSBMVHlwZSBpbnQ4VHlwZShMQ29udGV4dCBjb250
ZXh0KSB7IHJldHVybiBsbHZtLT5JbnQ4VHlwZUluQ29udGV4dChjb250ZXh0KTsgfQotc3RhdGlj
IGlubGluZSBMVHlwZSBpbnQxNlR5cGUoTENvbnRleHQgY29udGV4dCkgeyByZXR1cm4gbGx2bS0+
SW50MTZUeXBlSW5Db250ZXh0KGNvbnRleHQpOyB9Ci1zdGF0aWMgaW5saW5lIExUeXBlIGludDMy
VHlwZShMQ29udGV4dCBjb250ZXh0KSB7IHJldHVybiBsbHZtLT5JbnQzMlR5cGVJbkNvbnRleHQo
Y29udGV4dCk7IH0KLXN0YXRpYyBpbmxpbmUgTFR5cGUgaW50NjRUeXBlKExDb250ZXh0IGNvbnRl
eHQpIHsgcmV0dXJuIGxsdm0tPkludDY0VHlwZUluQ29udGV4dChjb250ZXh0KTsgfQotc3RhdGlj
IGlubGluZSBMVHlwZSBpbnRQdHJUeXBlKExDb250ZXh0IGNvbnRleHQpIHsgcmV0dXJuIGxsdm0t
PkludDY0VHlwZUluQ29udGV4dChjb250ZXh0KTsgfQotc3RhdGljIGlubGluZSBMVHlwZSBmbG9h
dFR5cGUoTENvbnRleHQgY29udGV4dCkgeyByZXR1cm4gbGx2bS0+RmxvYXRUeXBlSW5Db250ZXh0
KGNvbnRleHQpOyB9Ci1zdGF0aWMgaW5saW5lIExUeXBlIGRvdWJsZVR5cGUoTENvbnRleHQgY29u
dGV4dCkgeyByZXR1cm4gbGx2bS0+RG91YmxlVHlwZUluQ29udGV4dChjb250ZXh0KTsgfQotCi1z
dGF0aWMgaW5saW5lIExUeXBlIHBvaW50ZXJUeXBlKExUeXBlIHR5cGUpIHsgcmV0dXJuIGxsdm0t
PlBvaW50ZXJUeXBlKHR5cGUsIDApOyB9Ci1zdGF0aWMgaW5saW5lIExUeXBlIGFycmF5VHlwZShM
VHlwZSB0eXBlLCB1bnNpZ25lZCBjb3VudCkgeyByZXR1cm4gbGx2bS0+QXJyYXlUeXBlKHR5cGUs
IGNvdW50KTsgfQotc3RhdGljIGlubGluZSBMVHlwZSB2ZWN0b3JUeXBlKExUeXBlIHR5cGUsIHVu
c2lnbmVkIGNvdW50KSB7IHJldHVybiBsbHZtLT5WZWN0b3JUeXBlKHR5cGUsIGNvdW50KTsgfQot
Ci1lbnVtIFBhY2tpbmdNb2RlIHsgTm90UGFja2VkLCBQYWNrZWQgfTsKLXN0YXRpYyBpbmxpbmUg
TFR5cGUgc3RydWN0VHlwZShMQ29udGV4dCBjb250ZXh0LCBMVHlwZSogZWxlbWVudFR5cGVzLCB1
bnNpZ25lZCBlbGVtZW50Q291bnQsIFBhY2tpbmdNb2RlIHBhY2tpbmcgPSBOb3RQYWNrZWQpCi17
Ci0gICAgcmV0dXJuIGxsdm0tPlN0cnVjdFR5cGVJbkNvbnRleHQoY29udGV4dCwgZWxlbWVudFR5
cGVzLCBlbGVtZW50Q291bnQsIHBhY2tpbmcgPT0gUGFja2VkKTsKLX0KLXN0YXRpYyBpbmxpbmUg
TFR5cGUgc3RydWN0VHlwZShMQ29udGV4dCBjb250ZXh0LCBQYWNraW5nTW9kZSBwYWNraW5nID0g
Tm90UGFja2VkKQotewotICAgIHJldHVybiBzdHJ1Y3RUeXBlKGNvbnRleHQsIDAsIDAsIHBhY2tp
bmcpOwotfQotc3RhdGljIGlubGluZSBMVHlwZSBzdHJ1Y3RUeXBlKExDb250ZXh0IGNvbnRleHQs
IExUeXBlIGVsZW1lbnQxLCBQYWNraW5nTW9kZSBwYWNraW5nID0gTm90UGFja2VkKQotewotICAg
IHJldHVybiBzdHJ1Y3RUeXBlKGNvbnRleHQsICZlbGVtZW50MSwgMSwgcGFja2luZyk7Ci19Ci1z
dGF0aWMgaW5saW5lIExUeXBlIHN0cnVjdFR5cGUoTENvbnRleHQgY29udGV4dCwgTFR5cGUgZWxl
bWVudDEsIExUeXBlIGVsZW1lbnQyLCBQYWNraW5nTW9kZSBwYWNraW5nID0gTm90UGFja2VkKQot
ewotICAgIExUeXBlIGVsZW1lbnRzW10gPSB7IGVsZW1lbnQxLCBlbGVtZW50MiB9OwotICAgIHJl
dHVybiBzdHJ1Y3RUeXBlKGNvbnRleHQsIGVsZW1lbnRzLCAyLCBwYWNraW5nKTsKLX0KLQotLy8g
RklYTUU6IE1ha2UgdGhlIFZhcmlhZGljaXR5IGFyZ3VtZW50IG5vdCBiZSB0aGUgbGFzdCBhcmd1
bWVudCB0byBmdW5jdGlvblR5cGUoKSBzbyB0aGF0IHRoaXMgZnVuY3Rpb24KLS8vIGNhbiB1c2Ug
QysrMTEgdmFyaWFkaWMgdGVtcGxhdGVzCi0vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQxNTc1Ci1lbnVtIFZhcmlhZGljaXR5IHsgTm90VmFyaWFkaWMsIFZhcmlh
ZGljIH07Ci1zdGF0aWMgaW5saW5lIExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByZXR1cm5UeXBl
LCBjb25zdCBMVHlwZSogcGFyYW1UeXBlcywgdW5zaWduZWQgcGFyYW1Db3VudCwgVmFyaWFkaWNp
dHkgdmFyaWFkaWNpdHkpCi17Ci0gICAgcmV0dXJuIGxsdm0tPkZ1bmN0aW9uVHlwZShyZXR1cm5U
eXBlLCBjb25zdF9jYXN0PExUeXBlKj4ocGFyYW1UeXBlcyksIHBhcmFtQ291bnQsIHZhcmlhZGlj
aXR5ID09IFZhcmlhZGljKTsKLX0KLXRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGU+Ci1pbmxp
bmUgTFR5cGUgZnVuY3Rpb25UeXBlKExUeXBlIHJldHVyblR5cGUsIGNvbnN0IFZlY3RvclR5cGUm
IHZlY3RvciwgVmFyaWFkaWNpdHkgdmFyaWFkaWNpdHkgPSBOb3RWYXJpYWRpYykKLXsKLSAgICBy
ZXR1cm4gZnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHZlY3Rvci5iZWdpbigpLCB2ZWN0b3Iuc2l6
ZSgpLCB2YXJpYWRpY2l0eSk7Ci19Ci1zdGF0aWMgaW5saW5lIExUeXBlIGZ1bmN0aW9uVHlwZShM
VHlwZSByZXR1cm5UeXBlLCBWYXJpYWRpY2l0eSB2YXJpYWRpY2l0eSA9IE5vdFZhcmlhZGljKQot
ewotICAgIHJldHVybiBmdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgMCwgMCwgdmFyaWFkaWNpdHkp
OwotfQotc3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcmV0dXJuVHlwZSwg
TFR5cGUgcGFyYW0xLCBWYXJpYWRpY2l0eSB2YXJpYWRpY2l0eSA9IE5vdFZhcmlhZGljKQotewot
ICAgIHJldHVybiBmdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgJnBhcmFtMSwgMSwgdmFyaWFkaWNp
dHkpOwotfQotc3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcmV0dXJuVHlw
ZSwgTFR5cGUgcGFyYW0xLCBMVHlwZSBwYXJhbTIsIFZhcmlhZGljaXR5IHZhcmlhZGljaXR5ID0g
Tm90VmFyaWFkaWMpCi17Ci0gICAgTFR5cGUgcGFyYW1UeXBlc1tdID0geyBwYXJhbTEsIHBhcmFt
MiB9OwotICAgIHJldHVybiBmdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgcGFyYW1UeXBlcywgMiwg
dmFyaWFkaWNpdHkpOwotfQotc3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUg
cmV0dXJuVHlwZSwgTFR5cGUgcGFyYW0xLCBMVHlwZSBwYXJhbTIsIExUeXBlIHBhcmFtMywgVmFy
aWFkaWNpdHkgdmFyaWFkaWNpdHkgPSBOb3RWYXJpYWRpYykKLXsKLSAgICBMVHlwZSBwYXJhbVR5
cGVzW10gPSB7IHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMgfTsKLSAgICByZXR1cm4gZnVuY3Rpb25U
eXBlKHJldHVyblR5cGUsIHBhcmFtVHlwZXMsIDMsIHZhcmlhZGljaXR5KTsKLX0KLXN0YXRpYyBp
bmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBlKExUeXBlIHJldHVyblR5cGUsIExUeXBlIHBhcmFtMSwg
TFR5cGUgcGFyYW0yLCBMVHlwZSBwYXJhbTMsIExUeXBlIHBhcmFtNCwgVmFyaWFkaWNpdHkgdmFy
aWFkaWNpdHkgPSBOb3RWYXJpYWRpYykKLXsKLSAgICBMVHlwZSBwYXJhbVR5cGVzW10gPSB7IHBh
cmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCB9OwotICAgIHJldHVybiBmdW5jdGlvblR5cGUo
cmV0dXJuVHlwZSwgcGFyYW1UeXBlcywgNCwgdmFyaWFkaWNpdHkpOwotfQotc3RhdGljIGlubGlu
ZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcmV0dXJuVHlwZSwgTFR5cGUgcGFyYW0xLCBMVHlw
ZSBwYXJhbTIsIExUeXBlIHBhcmFtMywgTFR5cGUgcGFyYW00LCBMVHlwZSBwYXJhbTUsIFZhcmlh
ZGljaXR5IHZhcmlhZGljaXR5ID0gTm90VmFyaWFkaWMpCi17Ci0gICAgTFR5cGUgcGFyYW1UeXBl
c1tdID0geyBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQsIHBhcmFtNSB9OwotICAgIHJl
dHVybiBmdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgcGFyYW1UeXBlcywgNSwgdmFyaWFkaWNpdHkp
OwotfQotc3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcmV0dXJuVHlwZSwg
TFR5cGUgcGFyYW0xLCBMVHlwZSBwYXJhbTIsIExUeXBlIHBhcmFtMywgTFR5cGUgcGFyYW00LCBM
VHlwZSBwYXJhbTUsIExUeXBlIHBhcmFtNiwgVmFyaWFkaWNpdHkgdmFyaWFkaWNpdHkgPSBOb3RW
YXJpYWRpYykKLXsKLSAgICBMVHlwZSBwYXJhbVR5cGVzW10gPSB7IHBhcmFtMSwgcGFyYW0yLCBw
YXJhbTMsIHBhcmFtNCwgcGFyYW01LCBwYXJhbTYgfTsKLSAgICByZXR1cm4gZnVuY3Rpb25UeXBl
KHJldHVyblR5cGUsIHBhcmFtVHlwZXMsIDYsIHZhcmlhZGljaXR5KTsKLX0KLQotc3RhdGljIGlu
bGluZSB1bnNpZ25lZCBtZEtpbmRJRChMQ29udGV4dCBjb250ZXh0LCBjb25zdCBjaGFyKiBzdHJp
bmcpIHsgcmV0dXJuIGxsdm0tPkdldE1ES2luZElESW5Db250ZXh0KGNvbnRleHQsIHN0cmluZywg
c3RkOjpzdHJsZW4oc3RyaW5nKSk7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kU3RyaW5nKExD
b250ZXh0IGNvbnRleHQsIGNvbnN0IGNoYXIqIHN0cmluZywgdW5zaWduZWQgbGVuZ3RoKSB7IHJl
dHVybiBsbHZtLT5NRFN0cmluZ0luQ29udGV4dChjb250ZXh0LCBzdHJpbmcsIGxlbmd0aCk7IH0K
LXN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kU3RyaW5nKExDb250ZXh0IGNvbnRleHQsIGNvbnN0IGNo
YXIqIHN0cmluZykgeyByZXR1cm4gbWRTdHJpbmcoY29udGV4dCwgc3RyaW5nLCBzdGQ6OnN0cmxl
bihzdHJpbmcpKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRl
eHQsIExWYWx1ZSogYXJncywgdW5zaWduZWQgbnVtQXJncykgeyByZXR1cm4gbGx2bS0+TUROb2Rl
SW5Db250ZXh0KGNvbnRleHQsIGFyZ3MsIG51bUFyZ3MpOyB9Ci10ZW1wbGF0ZTx0eXBlbmFtZSBW
ZWN0b3JUeXBlPgotc3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQs
IGNvbnN0IFZlY3RvclR5cGUmIHZlY3RvcikgeyByZXR1cm4gbWROb2RlKGNvbnRleHQsIGNvbnN0
X2Nhc3Q8TFZhbHVlKj4odmVjdG9yLmJlZ2luKCkpLCB2ZWN0b3Iuc2l6ZSgpKTsgfQotc3RhdGlj
IGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQpIHsgcmV0dXJuIG1kTm9kZShj
b250ZXh0LCAwLCAwKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgbWROb2RlKExDb250ZXh0IGNv
bnRleHQsIExWYWx1ZSBhcmcxKSB7IHJldHVybiBtZE5vZGUoY29udGV4dCwgJmFyZzEsIDEpOyB9
Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBtZE5vZGUoTENvbnRleHQgY29udGV4dCwgTFZhbHVlIGFy
ZzEsIExWYWx1ZSBhcmcyKQotewotICAgIExWYWx1ZSBhcmdzW10gPSB7IGFyZzEsIGFyZzIgfTsK
LSAgICByZXR1cm4gbWROb2RlKGNvbnRleHQsIGFyZ3MsIDIpOwotfQotc3RhdGljIGlubGluZSBM
VmFsdWUgbWROb2RlKExDb250ZXh0IGNvbnRleHQsIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMiwg
TFZhbHVlIGFyZzMpCi17Ci0gICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiwgYXJnMyB9
OwotICAgIHJldHVybiBtZE5vZGUoY29udGV4dCwgYXJncywgMyk7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgdm9pZCBzZXRNZXRhZGF0YShMVmFsdWUgaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGtpbmQsIExW
YWx1ZSBtZXRhZGF0YSkgeyBsbHZtLT5TZXRNZXRhZGF0YShpbnN0cnVjdGlvbiwga2luZCwgbWV0
YWRhdGEpOyB9Ci0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGFkZEZ1bmN0aW9uKExNb2R1bGUgbW9k
dWxlLCBjb25zdCBjaGFyKiBuYW1lLCBMVHlwZSB0eXBlKSB7IHJldHVybiBsbHZtLT5BZGRGdW5j
dGlvbihtb2R1bGUsIG5hbWUsIHR5cGUpOyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBnZXRGaXJz
dEZ1bmN0aW9uKExNb2R1bGUgbW9kdWxlKSB7IHJldHVybiBsbHZtLT5HZXRGaXJzdEZ1bmN0aW9u
KG1vZHVsZSk7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGdldE5leHRGdW5jdGlvbihMVmFsdWUg
ZnVuY3Rpb24pIHsgcmV0dXJuIGxsdm0tPkdldE5leHRGdW5jdGlvbihmdW5jdGlvbik7IH0KLQot
c3RhdGljIGlubGluZSB2b2lkIHNldEZ1bmN0aW9uQ2FsbGluZ0NvbnYoTFZhbHVlIGZ1bmN0aW9u
LCBMQ2FsbENvbnYgY29udmVudGlvbikgeyBsbHZtLT5TZXRGdW5jdGlvbkNhbGxDb252KGZ1bmN0
aW9uLCBjb252ZW50aW9uKTsgfQotc3RhdGljIGlubGluZSB2b2lkIGFkZFRhcmdldERlcGVuZGVu
dEZ1bmN0aW9uQXR0cihMVmFsdWUgZnVuY3Rpb24sIGNvbnN0IGNoYXIqIGtleSwgY29uc3QgY2hh
ciogdmFsdWUpIHsgbGx2bS0+QWRkVGFyZ2V0RGVwZW5kZW50RnVuY3Rpb25BdHRyKGZ1bmN0aW9u
LCBrZXksIHZhbHVlKTsgfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0TGlua2FnZShMVmFsdWUg
Z2xvYmFsLCBMTFZNTGlua2FnZSBsaW5rYWdlKSB7IGxsdm0tPlNldExpbmthZ2UoZ2xvYmFsLCBs
aW5rYWdlKTsgfQotCi1zdGF0aWMgaW5saW5lIExWYWx1ZSBhZGRFeHRlcm5GdW5jdGlvbihMTW9k
dWxlIG1vZHVsZSwgY29uc3QgY2hhciogbmFtZSwgTFR5cGUgdHlwZSkKLXsKLSAgICBMVmFsdWUg
cmVzdWx0ID0gYWRkRnVuY3Rpb24obW9kdWxlLCBuYW1lLCB0eXBlKTsKLSAgICBzZXRMaW5rYWdl
KHJlc3VsdCwgTExWTUV4dGVybmFsTGlua2FnZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
c3RhdGljIGlubGluZSBMTW9kdWxlIG1vZHVsZUNyZWF0ZVdpdGhOYW1lSW5Db250ZXh0KGNvbnN0
IGNoYXIqIG1vZHVsZUlELCBMQ29udGV4dCBjb250ZXh0KXsgcmV0dXJuIGxsdm0tPk1vZHVsZUNy
ZWF0ZVdpdGhOYW1lSW5Db250ZXh0KG1vZHVsZUlELCBjb250ZXh0KTsgfQotc3RhdGljIGlubGlu
ZSB2b2lkIGRpc3Bvc2VNb2R1bGUoTE1vZHVsZSBtKXsgbGx2bS0+RGlzcG9zZU1vZHVsZShtKTsg
fQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZGlzcG9zZU1lc3NhZ2UoY2hhciogb3V0TXNnKSB7IGxs
dm0tPkRpc3Bvc2VNZXNzYWdlKG91dE1zZyk7IH0KLQotc3RhdGljIGlubGluZSBMVmFsdWUgZ2V0
UGFyYW0oTFZhbHVlIGZ1bmN0aW9uLCB1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbGx2bS0+R2V0
UGFyYW0oZnVuY3Rpb24sIGluZGV4KTsgfQotCi1zdGF0aWMgaW5saW5lIExWYWx1ZSBnZXRVbmRl
ZihMVHlwZSB0eXBlKSB7IHJldHVybiBsbHZtLT5HZXRVbmRlZih0eXBlKTsgfQotCi1lbnVtIEJp
dEV4dGVuc2lvbiB7IFplcm9FeHRlbmQsIFNpZ25FeHRlbmQgfTsKLXN0YXRpYyBpbmxpbmUgTFZh
bHVlIGNvbnN0SW50KExUeXBlIHR5cGUsIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZSwgQml0RXh0
ZW5zaW9uIGV4dGVuc2lvbiA9IFplcm9FeHRlbmQpIHsgcmV0dXJuIGxsdm0tPkNvbnN0SW50KHR5
cGUsIHZhbHVlLCBleHRlbnNpb24gPT0gU2lnbkV4dGVuZCk7IH0KLXN0YXRpYyBpbmxpbmUgTFZh
bHVlIGNvbnN0UmVhbChMVHlwZSB0eXBlLCBkb3VibGUgdmFsdWUpIHsgcmV0dXJuIGxsdm0tPkNv
bnN0UmVhbCh0eXBlLCB2YWx1ZSk7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGNvbnN0TnVsbChM
VHlwZSB0eXBlKSB7IHJldHVybiBsbHZtLT5Db25zdE51bGwodHlwZSk7IH0KLQotc3RhdGljIGlu
bGluZSBMQmFzaWNCbG9jayBhcHBlbmRCYXNpY0Jsb2NrKExDb250ZXh0IGNvbnRleHQsIExWYWx1
ZSBmdW5jdGlvbiwgY29uc3QgY2hhciogbmFtZSA9ICIiKSB7IHJldHVybiBsbHZtLT5BcHBlbmRC
YXNpY0Jsb2NrSW5Db250ZXh0KGNvbnRleHQsIGZ1bmN0aW9uLCBuYW1lKTsgfQotc3RhdGljIGlu
bGluZSBMQmFzaWNCbG9jayBpbnNlcnRCYXNpY0Jsb2NrKExDb250ZXh0IGNvbnRleHQsIExCYXNp
Y0Jsb2NrIGJlZm9yZUJhc2ljQmxvY2ssIGNvbnN0IGNoYXIqIG5hbWUgPSAiIikgeyByZXR1cm4g
bGx2bS0+SW5zZXJ0QmFzaWNCbG9ja0luQ29udGV4dChjb250ZXh0LCBiZWZvcmVCYXNpY0Jsb2Nr
LCBuYW1lKTsgfQotCi1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZFBoaShMQnVpbGRlciBidWls
ZGVyLCBMVHlwZSB0eXBlKSB7IHJldHVybiBsbHZtLT5CdWlsZFBoaShidWlsZGVyLCB0eXBlLCAi
Iik7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRJbmNvbWluZyhMVmFsdWUgcGhpLCBjb25zdCBM
VmFsdWUqIHZhbHVlcywgY29uc3QgTEJhc2ljQmxvY2sqIGJsb2NrcywgdW5zaWduZWQgbnVtUHJl
ZGVjZXNzb3JzKQotewotICAgIGxsdm0tPkFkZEluY29taW5nKHBoaSwgY29uc3RfY2FzdDxMVmFs
dWUqPih2YWx1ZXMpLCBjb25zdF9jYXN0PExCYXNpY0Jsb2NrKj4oYmxvY2tzKSwgbnVtUHJlZGVj
ZXNzb3JzKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRJbmNvbWluZyhMVmFsdWUgcGhpLCBW
YWx1ZUZyb21CbG9jayB2YWx1ZTEpCi17Ci0gICAgTFZhbHVlIHZhbHVlID0gdmFsdWUxLnZhbHVl
KCk7Ci0gICAgTEJhc2ljQmxvY2sgYmxvY2sgPSB2YWx1ZTEuYmxvY2soKTsKLSAgICBhZGRJbmNv
bWluZyhwaGksICZ2YWx1ZSwgJmJsb2NrLCAxKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRJ
bmNvbWluZyhMVmFsdWUgcGhpLCBWYWx1ZUZyb21CbG9jayB2YWx1ZTEsIFZhbHVlRnJvbUJsb2Nr
IHZhbHVlMikKLXsKLSAgICBMVmFsdWUgdmFsdWVzW10gPSB7IHZhbHVlMS52YWx1ZSgpLCB2YWx1
ZTIudmFsdWUoKSB9OwotICAgIExCYXNpY0Jsb2NrIGJsb2Nrc1tdID0geyB2YWx1ZTEuYmxvY2so
KSwgdmFsdWUyLmJsb2NrKCkgfTsKLSAgICBhZGRJbmNvbWluZyhwaGksIHZhbHVlcywgYmxvY2tz
LCAyKTsKLX0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkUGhpKExCdWlsZGVyIGJ1aWxkZXIs
IExUeXBlIHR5cGUsIFZhbHVlRnJvbUJsb2NrIHZhbHVlMSkKLXsKLSAgICBMVmFsdWUgcmVzdWx0
ID0gYnVpbGRQaGkoYnVpbGRlciwgdHlwZSk7Ci0gICAgYWRkSW5jb21pbmcocmVzdWx0LCB2YWx1
ZTEpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZFBo
aSgKLSAgICBMQnVpbGRlciBidWlsZGVyLCBMVHlwZSB0eXBlLCBWYWx1ZUZyb21CbG9jayB2YWx1
ZTEsIFZhbHVlRnJvbUJsb2NrIHZhbHVlMikKLXsKLSAgICBMVmFsdWUgcmVzdWx0ID0gYnVpbGRQ
aGkoYnVpbGRlciwgdHlwZSk7Ci0gICAgYWRkSW5jb21pbmcocmVzdWx0LCB2YWx1ZTEsIHZhbHVl
Mik7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRB
bGxvY2EoTEJ1aWxkZXIgYnVpbGRlciwgTFR5cGUgdHlwZSkgeyByZXR1cm4gbGx2bS0+QnVpbGRB
bGxvY2EoYnVpbGRlciwgdHlwZSwgIiIpOyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEFk
ZChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBs
bHZtLT5CdWlsZEFkZChidWlsZGVyLCBsZWZ0LCByaWdodCwgIiIpOyB9Ci1zdGF0aWMgaW5saW5l
IExWYWx1ZSBidWlsZFN1YihMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJp
Z2h0KSB7IHJldHVybiBsbHZtLT5CdWlsZFN1YihidWlsZGVyLCBsZWZ0LCByaWdodCwgIiIpOyB9
Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZE11bChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUg
bGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBsbHZtLT5CdWlsZE11bChidWlsZGVyLCBsZWZ0
LCByaWdodCwgIiIpOyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZERpdihMQnVpbGRlciBi
dWlsZGVyLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBsbHZtLT5CdWlsZFNE
aXYoYnVpbGRlciwgbGVmdCwgcmlnaHQsICIiKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVp
bGRSZW0oTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1
cm4gbGx2bS0+QnVpbGRTUmVtKGJ1aWxkZXIsIGxlZnQsIHJpZ2h0LCAiIik7IH0KLXN0YXRpYyBp
bmxpbmUgTFZhbHVlIGJ1aWxkTmVnKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gbGx2bS0+QnVpbGROZWcoYnVpbGRlciwgdmFsdWUsICIiKTsgfQotc3RhdGljIGlubGlu
ZSBMVmFsdWUgYnVpbGRGQWRkKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBsZWZ0LCBMVmFsdWUg
cmlnaHQpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkRkFkZChidWlsZGVyLCBsZWZ0LCByaWdodCwgIiIp
OyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEZTdWIoTEJ1aWxkZXIgYnVpbGRlciwgTFZh
bHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbGx2bS0+QnVpbGRGU3ViKGJ1aWxkZXIs
IGxlZnQsIHJpZ2h0LCAiIik7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkRk11bChMQnVp
bGRlciBidWlsZGVyLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBsbHZtLT5C
dWlsZEZNdWwoYnVpbGRlciwgbGVmdCwgcmlnaHQsICIiKTsgfQotc3RhdGljIGlubGluZSBMVmFs
dWUgYnVpbGRGRGl2KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQp
IHsgcmV0dXJuIGxsdm0tPkJ1aWxkRkRpdihidWlsZGVyLCBsZWZ0LCByaWdodCwgIiIpOyB9Ci1z
dGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEZSZW0oTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGxl
ZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbGx2bS0+QnVpbGRGUmVtKGJ1aWxkZXIsIGxlZnQs
IHJpZ2h0LCAiIik7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkRk5lZyhMQnVpbGRlciBi
dWlsZGVyLCBMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkRk5lZyhidWlsZGVyLCB2
YWx1ZSwgIiIpOyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEFuZChMQnVpbGRlciBidWls
ZGVyLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBsbHZtLT5CdWlsZEFuZChi
dWlsZGVyLCBsZWZ0LCByaWdodCwgIiIpOyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZE9y
KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGxs
dm0tPkJ1aWxkT3IoYnVpbGRlciwgbGVmdCwgcmlnaHQsICIiKTsgfQotc3RhdGljIGlubGluZSBM
VmFsdWUgYnVpbGRYb3IoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdo
dCkgeyByZXR1cm4gbGx2bS0+QnVpbGRYb3IoYnVpbGRlciwgbGVmdCwgcmlnaHQsICIiKTsgfQot
c3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRTaGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGxl
ZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbGx2bS0+QnVpbGRTaGwoYnVpbGRlciwgbGVmdCwg
cmlnaHQsICIiKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRBU2hyKExCdWlsZGVyIGJ1
aWxkZXIsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkQVNo
cihidWlsZGVyLCBsZWZ0LCByaWdodCwgIiIpOyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWls
ZExTaHIoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1
cm4gbGx2bS0+QnVpbGRMU2hyKGJ1aWxkZXIsIGxlZnQsIHJpZ2h0LCAiIik7IH0KLXN0YXRpYyBp
bmxpbmUgTFZhbHVlIGJ1aWxkTm90KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gbGx2bS0+QnVpbGROb3QoYnVpbGRlciwgdmFsdWUsICIiKTsgfQotc3RhdGljIGlubGlu
ZSBMVmFsdWUgYnVpbGRMb2FkKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBwb2ludGVyKSB7IHJl
dHVybiBsbHZtLT5CdWlsZExvYWQoYnVpbGRlciwgcG9pbnRlciwgIiIpOyB9Ci1zdGF0aWMgaW5s
aW5lIExWYWx1ZSBidWlsZFN0b3JlKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSwgTFZh
bHVlIHBvaW50ZXIpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkU3RvcmUoYnVpbGRlciwgdmFsdWUsIHBv
aW50ZXIpOyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZFNFeHQoTEJ1aWxkZXIgYnVpbGRl
ciwgTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJldHVybiBsbHZtLT5CdWlsZFNFeHQoYnVp
bGRlciwgdmFsdWUsIHR5cGUsICIiKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRaRXh0
KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gbGx2
bS0+QnVpbGRaRXh0KGJ1aWxkZXIsIHZhbHVlLCB0eXBlLCAiIik7IH0KLXN0YXRpYyBpbmxpbmUg
TFZhbHVlIGJ1aWxkRlBUb1NJKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSwgTFR5cGUg
dHlwZSkgeyByZXR1cm4gbGx2bS0+QnVpbGRGUFRvU0koYnVpbGRlciwgdmFsdWUsIHR5cGUsICIi
KTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRGUFRvVUkoTEJ1aWxkZXIgYnVpbGRlciwg
TFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJldHVybiBsbHZtLT5CdWlsZEZQVG9VSShidWls
ZGVyLCB2YWx1ZSwgdHlwZSwgIiIpOyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZFNJVG9G
UChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGxs
dm0tPkJ1aWxkU0lUb0ZQKGJ1aWxkZXIsIHZhbHVlLCB0eXBlLCAiIik7IH0KLXN0YXRpYyBpbmxp
bmUgTFZhbHVlIGJ1aWxkVUlUb0ZQKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSwgTFR5
cGUgdHlwZSkgeyByZXR1cm4gbGx2bS0+QnVpbGRVSVRvRlAoYnVpbGRlciwgdmFsdWUsIHR5cGUs
ICIiKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRJbnRDYXN0KExCdWlsZGVyIGJ1aWxk
ZXIsIExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gbGx2bS0+QnVpbGRJbnRDYXN0
KGJ1aWxkZXIsIHZhbHVlLCB0eXBlLCAiIik7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxk
RlBDYXN0KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1
cm4gbGx2bS0+QnVpbGRGUENhc3QoYnVpbGRlciwgdmFsdWUsIHR5cGUsICIiKTsgfQotc3RhdGlj
IGlubGluZSBMVmFsdWUgYnVpbGRJbnRUb1B0cihMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgdmFs
dWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGxsdm0tPkJ1aWxkSW50VG9QdHIoYnVpbGRlciwgdmFs
dWUsIHR5cGUsICIiKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRQdHJUb0ludChMQnVp
bGRlciBidWlsZGVyLCBMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGxsdm0tPkJ1
aWxkUHRyVG9JbnQoYnVpbGRlciwgdmFsdWUsIHR5cGUsICIiKTsgfQotc3RhdGljIGlubGluZSBM
VmFsdWUgYnVpbGRCaXRDYXN0KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSwgTFR5cGUg
dHlwZSkgeyByZXR1cm4gbGx2bS0+QnVpbGRCaXRDYXN0KGJ1aWxkZXIsIHZhbHVlLCB0eXBlLCAi
Iik7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkSUNtcChMQnVpbGRlciBidWlsZGVyLCBM
SW50UHJlZGljYXRlIGNvbmQsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGxs
dm0tPkJ1aWxkSUNtcChidWlsZGVyLCBjb25kLCBsZWZ0LCByaWdodCwgIiIpOyB9Ci1zdGF0aWMg
aW5saW5lIExWYWx1ZSBidWlsZEZDbXAoTEJ1aWxkZXIgYnVpbGRlciwgTFJlYWxQcmVkaWNhdGUg
Y29uZCwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbGx2bS0+QnVpbGRGQ21w
KGJ1aWxkZXIsIGNvbmQsIGxlZnQsIHJpZ2h0LCAiIik7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVl
IGJ1aWxkSW5zZXJ0RWxlbWVudChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgdmVjdG9yLCBMVmFs
dWUgZWxlbWVudCwgTFZhbHVlIGluZGV4KSB7IHJldHVybiBsbHZtLT5CdWlsZEluc2VydEVsZW1l
bnQoYnVpbGRlciwgdmVjdG9yLCBlbGVtZW50LCBpbmRleCwgIiIpOyB9Ci0KLXN0YXRpYyBpbmxp
bmUgTFZhbHVlIGJ1aWxkRmVuY2UoTEJ1aWxkZXIgYnVpbGRlciwgTEF0b21pY09yZGVyaW5nIG9y
ZGVyaW5nLCBTeW5jaHJvbml6YXRpb25TY29wZSBzY29wZSA9IENyb3NzVGhyZWFkKQotewotICAg
IHJldHVybiBsbHZtLT5CdWlsZEZlbmNlKGJ1aWxkZXIsIG9yZGVyaW5nLCBzY29wZSA9PSBTaW5n
bGVUaHJlYWQsICIiKTsKLX0KLQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWls
ZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwgY29uc3QgTFZhbHVlKiBhcmdzLCB1bnNpZ25l
ZCBudW1BcmdzKQotewotICAgIHJldHVybiBsbHZtLT5CdWlsZENhbGwoYnVpbGRlciwgZnVuY3Rp
b24sIGNvbnN0X2Nhc3Q8TFZhbHVlKj4oYXJncyksIG51bUFyZ3MsICIiKTsKLX0KLXRlbXBsYXRl
PHR5cGVuYW1lIFZlY3RvclR5cGU+Ci1pbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBi
dWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIGNvbnN0IFZlY3RvclR5cGUmIHZlY3RvcikKLXsKLSAg
ICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCB2ZWN0b3IuYmVnaW4oKSwgdmVj
dG9yLnNpemUoKSk7Ci19Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIg
YnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uKQotewotICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRl
ciwgZnVuY3Rpb24sIDAsIDApOwotfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExC
dWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEpCi17Ci0gICAgcmV0
dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgJmFyZzEsIDEpOwotfQotdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJncz4KLUxWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZh
bHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgQXJncy4uLiBhcmdzKQotewotICAgIExWYWx1ZSBh
cmdzQXJyYXlbXSA9IHsgYXJnMSwgYXJncy4uLiB9OwotICAgIHJldHVybiBidWlsZENhbGwoYnVp
bGRlciwgZnVuY3Rpb24sIGFyZ3NBcnJheSwgc2l6ZW9mKGFyZ3NBcnJheSkgLyBzaXplb2YoTFZh
bHVlKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252
ZW50aW9uKExWYWx1ZSBpbnN0cnVjdGlvbiwgTENhbGxDb252IGNhbGxpbmdDb252ZW50aW9uKSB7
IGxsdm0tPlNldEluc3RydWN0aW9uQ2FsbENvbnYoaW5zdHJ1Y3Rpb24sIGNhbGxpbmdDb252ZW50
aW9uKTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRFeHRyYWN0VmFsdWUoTEJ1aWxkZXIg
YnVpbGRlciwgTFZhbHVlIGFnZ1ZhbCwgdW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIGxsdm0tPkJ1
aWxkRXh0cmFjdFZhbHVlKGJ1aWxkZXIsIGFnZ1ZhbCwgaW5kZXgsICIiKTsgfQotc3RhdGljIGlu
bGluZSBMVmFsdWUgYnVpbGRTZWxlY3QoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGNvbmRpdGlv
biwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pIHsgcmV0dXJuIGxsdm0tPkJ1aWxkU2Vs
ZWN0KGJ1aWxkZXIsIGNvbmRpdGlvbiwgdGFrZW4sIG5vdFRha2VuLCAiIik7IH0KLXN0YXRpYyBp
bmxpbmUgTFZhbHVlIGJ1aWxkQnIoTEJ1aWxkZXIgYnVpbGRlciwgTEJhc2ljQmxvY2sgZGVzdGlu
YXRpb24pIHsgcmV0dXJuIGxsdm0tPkJ1aWxkQnIoYnVpbGRlciwgZGVzdGluYXRpb24pOyB9Ci1z
dGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENvbmRCcihMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUg
Y29uZGl0aW9uLCBMQmFzaWNCbG9jayB0YWtlbiwgTEJhc2ljQmxvY2sgbm90VGFrZW4pIHsgcmV0
dXJuIGxsdm0tPkJ1aWxkQ29uZEJyKGJ1aWxkZXIsIGNvbmRpdGlvbiwgdGFrZW4sIG5vdFRha2Vu
KTsgfQotc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRTd2l0Y2goTEJ1aWxkZXIgYnVpbGRlciwg
TFZhbHVlIHZhbHVlLCBMQmFzaWNCbG9jayBmYWxsVGhyb3VnaCwgdW5zaWduZWQgbnVtQ2FzZXMp
IHsgcmV0dXJuIGxsdm0tPkJ1aWxkU3dpdGNoKGJ1aWxkZXIsIHZhbHVlLCBmYWxsVGhyb3VnaCwg
bnVtQ2FzZXMpOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgYWRkQ2FzZShMVmFsdWUgc3dpdGNoSW5z
dCwgTFZhbHVlIHZhbHVlLCBMQmFzaWNCbG9jayB0YXJnZXQpIHsgbGx2bS0+QWRkQ2FzZShzd2l0
Y2hJbnN0LCB2YWx1ZSwgdGFyZ2V0KTsgfQotdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4K
LXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkU3dpdGNoKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1
ZSB2YWx1ZSwgY29uc3QgVmVjdG9yVHlwZSYgY2FzZXMsIExCYXNpY0Jsb2NrIGZhbGxUaHJvdWdo
KQotewotICAgIExWYWx1ZSByZXN1bHQgPSBidWlsZFN3aXRjaChidWlsZGVyLCB2YWx1ZSwgZmFs
bFRocm91Z2gsIGNhc2VzLnNpemUoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNh
c2VzLnNpemUoKTsgKytpKQotICAgICAgICBhZGRDYXNlKHJlc3VsdCwgY2FzZXNbaV0udmFsdWUo
KSwgY2FzZXNbaV0udGFyZ2V0KCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci1zdGF0aWMgaW5s
aW5lIExWYWx1ZSBidWlsZFJldChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgdmFsdWUpIHsgcmV0
dXJuIGxsdm0tPkJ1aWxkUmV0KGJ1aWxkZXIsIHZhbHVlKTsgfQotc3RhdGljIGlubGluZSBMVmFs
dWUgYnVpbGRVbnJlYWNoYWJsZShMQnVpbGRlciBidWlsZGVyKSB7IHJldHVybiBsbHZtLT5CdWls
ZFVucmVhY2hhYmxlKGJ1aWxkZXIpOyB9Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wTW9kdWxl
KExNb2R1bGUgbW9kdWxlKSB7IGxsdm0tPkR1bXBNb2R1bGUobW9kdWxlKTsgfQotc3RhdGljIGlu
bGluZSB2b2lkIHZlcmlmeU1vZHVsZShMTW9kdWxlIG1vZHVsZSkKLXsKLSAgICBjaGFyKiBlcnJv
ciA9IDA7Ci0gICAgbGx2bS0+VmVyaWZ5TW9kdWxlKG1vZHVsZSwgTExWTUFib3J0UHJvY2Vzc0Fj
dGlvbiwgJmVycm9yKTsKLSAgICBsbHZtLT5EaXNwb3NlTWVzc2FnZShlcnJvcik7Ci19Ci0KLSNl
bmRpZiAvLyAhRlRMX1VTRVNfQjMKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAotCi0jZW5k
aWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0KLSNlbmRpZiAvLyBGVExBYmJyZXZpYXRpb25zX2gKLQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmNwcAko
cmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFj
dEhlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwzNyArMzAsMTggQEAKIAogI2luY2x1ZGUg
IkRGR0NvbW1vbi5oIgogI2luY2x1ZGUgIkZUTEFiYnJldmlhdGVkVHlwZXMuaCIKLSNpbmNsdWRl
ICJGVExBYmJyZXZpYXRpb25zLmgiCiAjaW5jbHVkZSAiRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9y
eS5oIgogI2luY2x1ZGUgIkZUTEIzT3V0cHV0LmgiCi0jaW5jbHVkZSAiRlRMT3V0cHV0LmgiCiAj
aW5jbHVkZSAiRlRMVHlwZWRQb2ludGVyLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIk9wdGlvbnMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCi0j
aWYgIUZUTF9VU0VTX0IzCi1MVmFsdWUgQWJzdHJhY3RIZWFwOjp0YmFhTWV0YWRhdGFTbG93KGNv
bnN0IEFic3RyYWN0SGVhcFJlcG9zaXRvcnkmIHJlcG9zaXRvcnkpIGNvbnN0Ci17Ci0gICAgbV90
YmFhTWV0YWRhdGEgPSBtZE5vZGUoCi0gICAgICAgIHJlcG9zaXRvcnkubV9jb250ZXh0LAotICAg
ICAgICBtZFN0cmluZyhyZXBvc2l0b3J5Lm1fY29udGV4dCwgbV9oZWFwTmFtZSksCi0gICAgICAg
IG1fcGFyZW50LT50YmFhTWV0YWRhdGEocmVwb3NpdG9yeSkpOwotICAgIHJldHVybiBtX3RiYWFN
ZXRhZGF0YTsKLX0KLSNlbmRpZgotCiB2b2lkIEFic3RyYWN0SGVhcDo6ZGVjb3JhdGVJbnN0cnVj
dGlvbihMVmFsdWUgaW5zdHJ1Y3Rpb24sIGNvbnN0IEFic3RyYWN0SGVhcFJlcG9zaXRvcnkmIHJl
cG9zaXRvcnkpIGNvbnN0CiB7Ci0jaWYgIUZUTF9VU0VTX0IzCi0gICAgaWYgKCFPcHRpb25zOjp1
c2VGVExUQkFBKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBzZXRNZXRhZGF0YShpbnN0cnVjdGlv
biwgcmVwb3NpdG9yeS5tX3RiYWFLaW5kLCB0YmFhTWV0YWRhdGEocmVwb3NpdG9yeSkpOwotI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0oaW5zdHJ1Y3Rpb24pOwogICAgIFVOVVNFRF9QQVJBTShyZXBv
c2l0b3J5KTsKLSNlbmRpZgogfQogCiB2b2lkIEFic3RyYWN0SGVhcDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdApAQCAtNzcsMzMgKzU4LDEyIEBAIHZvaWQgQWJzdHJhY3RGaWVsZDo6ZHVt
cChQcmludFN0cmVhbSYgb3UKICAgICAgICAgb3V0LnByaW50KCItPiIsICpwYXJlbnQoKSk7CiB9
CiAKLUluZGV4ZWRBYnN0cmFjdEhlYXA6OkluZGV4ZWRBYnN0cmFjdEhlYXAoTENvbnRleHQgY29u
dGV4dCwgQWJzdHJhY3RIZWFwKiBwYXJlbnQsIGNvbnN0IGNoYXIqIGhlYXBOYW1lLCBwdHJkaWZm
X3Qgb2Zmc2V0LCBzaXplX3QgZWxlbWVudFNpemUpCitJbmRleGVkQWJzdHJhY3RIZWFwOjpJbmRl
eGVkQWJzdHJhY3RIZWFwKEFic3RyYWN0SGVhcCogcGFyZW50LCBjb25zdCBjaGFyKiBoZWFwTmFt
ZSwgcHRyZGlmZl90IG9mZnNldCwgc2l6ZV90IGVsZW1lbnRTaXplKQogICAgIDogbV9oZWFwRm9y
QW55SW5kZXgocGFyZW50LCBoZWFwTmFtZSkKICAgICAsIG1faGVhcE5hbWVMZW5ndGgoc3RybGVu
KGhlYXBOYW1lKSkKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAsIG1fZWxlbWVudFNpemUo
ZWxlbWVudFNpemUpCi0jaWYgIUZUTF9VU0VTX0IzCi0gICAgLCBtX3NjYWxlVGVybSgwKQotICAg
ICwgbV9jYW5TaGlmdChmYWxzZSkKLSNlbmRpZgotewotI2lmIEZUTF9VU0VTX0IzCi0gICAgVU5V
U0VEX1BBUkFNKGNvbnRleHQpOwotI2Vsc2UKLSAgICAvLyBTZWUgaWYgdGhlcmUgaXMgYSBjb21t
b24gc2hpZnQgYW1vdW50IHdlIGNvdWxkIHVzZSBpbnN0ZWFkIG9mIG11bHRpcGx5aW5nLiBEb24n
dAotICAgIC8vIHRyeSB0b28gaGFyZC4gVGhpcyBpcyBqdXN0IGEgc3BlY3VsYXRpdmUgb3B0aW1p
emF0aW9uIHRvIHJlZHVjZSBsb2FkIG9uIExMVk0uCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IDQ7ICsraSkgewotICAgICAgICBpZiAoMVUgPDwgaSA9PSBtX2VsZW1lbnRTaXplKSB7Ci0g
ICAgICAgICAgICBpZiAoaSkKLSAgICAgICAgICAgICAgICBtX3NjYWxlVGVybSA9IGNvbnN0SW50
KGludFB0clR5cGUoY29udGV4dCksIGksIFplcm9FeHRlbmQpOwotICAgICAgICAgICAgbV9jYW5T
aGlmdCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAK
LSAgICBpZiAoIW1fY2FuU2hpZnQpCi0gICAgICAgIG1fc2NhbGVUZXJtID0gY29uc3RJbnQoaW50
UHRyVHlwZShjb250ZXh0KSwgbV9lbGVtZW50U2l6ZSwgWmVyb0V4dGVuZCk7Ci0jZW5kaWYKK3sK
IH0KIAogSW5kZXhlZEFic3RyYWN0SGVhcDo6fkluZGV4ZWRBYnN0cmFjdEhlYXAoKQpAQCAtMTE1
LDE4ICs3NSw3IEBAIFR5cGVkUG9pbnRlciBJbmRleGVkQWJzdHJhY3RIZWFwOjpiYXNlSW4KICAg
ICBpZiAoaW5kZXhBc0NvbnN0YW50LmlzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIG91dC5hZGRy
ZXNzKGJhc2UsIGF0KGluZGV4QXNDb25zdGFudC5hc0ludDMyKCkpLCBvZmZzZXQpOwogCi0jaWYg
RlRMX1VTRVNfQjMKICAgICBMVmFsdWUgcmVzdWx0ID0gb3V0LmFkZChiYXNlLCBvdXQubXVsKGlu
ZGV4LCBvdXQuY29uc3RJbnRQdHIobV9lbGVtZW50U2l6ZSkpKTsKLSNlbHNlCi0gICAgTFZhbHVl
IHJlc3VsdDsKLSAgICBpZiAobV9jYW5TaGlmdCkgewotICAgICAgICBpZiAoIW1fc2NhbGVUZXJt
KQotICAgICAgICAgICAgcmVzdWx0ID0gb3V0LmFkZChiYXNlLCBpbmRleCk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHJlc3VsdCA9IG91dC5hZGQoYmFzZSwgb3V0LnNobChpbmRleCwgbV9z
Y2FsZVRlcm0pKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmVzdWx0ID0gb3V0LmFkZChiYXNlLCBv
dXQubXVsKGluZGV4LCBtX3NjYWxlVGVybSkpOwotI2VuZGlmCiAgICAgCiAgICAgcmV0dXJuIFR5
cGVkUG9pbnRlcihhdEFueUluZGV4KCksIG91dC5hZGRQdHIocmVzdWx0LCBtX29mZnNldCArIG9m
ZnNldCkpOwogfQpAQCAtMjE1LDggKzE2NCw4IEBAIHZvaWQgSW5kZXhlZEFic3RyYWN0SGVhcDo6
ZHVtcChQcmludFN0cmUKICAgICBvdXQucHJpbnQoIkluZGV4ZWQ6IiwgYXRBbnlJbmRleCgpKTsK
IH0KIAotTnVtYmVyZWRBYnN0cmFjdEhlYXA6Ok51bWJlcmVkQWJzdHJhY3RIZWFwKExDb250ZXh0
IGNvbnRleHQsIEFic3RyYWN0SGVhcCogaGVhcCwgY29uc3QgY2hhciogaGVhcE5hbWUpCi0gICAg
OiBtX2luZGV4ZWRIZWFwKGNvbnRleHQsIGhlYXAsIGhlYXBOYW1lLCAwLCAxKQorTnVtYmVyZWRB
YnN0cmFjdEhlYXA6Ok51bWJlcmVkQWJzdHJhY3RIZWFwKEFic3RyYWN0SGVhcCogaGVhcCwgY29u
c3QgY2hhciogaGVhcE5hbWUpCisgICAgOiBtX2luZGV4ZWRIZWFwKGhlYXAsIGhlYXBOYW1lLCAw
LCAxKQogewogfQogCkBAIC0yMjksOCArMTc4LDggQEAgdm9pZCBOdW1iZXJlZEFic3RyYWN0SGVh
cDo6ZHVtcChQcmludFN0cgogICAgIG91dC5wcmludCgiTnVtYmVyZWQ6ICIsIGF0QW55TnVtYmVy
KCkpOwogfQogCi1BYnNvbHV0ZUFic3RyYWN0SGVhcDo6QWJzb2x1dGVBYnN0cmFjdEhlYXAoTENv
bnRleHQgY29udGV4dCwgQWJzdHJhY3RIZWFwKiBoZWFwLCBjb25zdCBjaGFyKiBoZWFwTmFtZSkK
LSAgICA6IG1faW5kZXhlZEhlYXAoY29udGV4dCwgaGVhcCwgaGVhcE5hbWUsIDAsIDEpCitBYnNv
bHV0ZUFic3RyYWN0SGVhcDo6QWJzb2x1dGVBYnN0cmFjdEhlYXAoQWJzdHJhY3RIZWFwKiBoZWFw
LCBjb25zdCBjaGFyKiBoZWFwTmFtZSkKKyAgICA6IG1faW5kZXhlZEhlYXAoaGVhcCwgaGVhcE5h
bWUsIDAsIDEpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJz
dHJhY3RIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExB
YnN0cmFjdEhlYXAuaAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExBYnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTggKzUzLDEyIEBA
IHB1YmxpYzoKICAgICBBYnN0cmFjdEhlYXAoKQogICAgICAgICA6IG1fcGFyZW50KDApCiAgICAg
ICAgICwgbV9oZWFwTmFtZSgwKQotI2lmICFGVExfVVNFU19CMwotICAgICAgICAsIG1fdGJhYU1l
dGFkYXRhKDApCi0jZW5kaWYKICAgICB7CiAgICAgfQogICAgIAogICAgIEFic3RyYWN0SGVhcChB
YnN0cmFjdEhlYXAqIHBhcmVudCwgY29uc3QgY2hhciogaGVhcE5hbWUpCiAgICAgICAgIDogbV9w
YXJlbnQocGFyZW50KQogICAgICAgICAsIG1faGVhcE5hbWUoaGVhcE5hbWUpCi0jaWYgIUZUTF9V
U0VTX0IzCi0gICAgICAgICwgbV90YmFhTWV0YWRhdGEoMCkKLSNlbmRpZgogICAgIHsKICAgICB9
CiAgICAgCkBAIC05MywxNiArODcsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2hlYXBO
YW1lOwogICAgIH0KIAotI2lmICFGVExfVVNFU19CMwotICAgIExWYWx1ZSB0YmFhTWV0YWRhdGEo
Y29uc3QgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeSYgcmVwb3NpdG9yeSkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChpc0luaXRpYWxpemVkKCkpOwotICAgICAgICBpZiAoTElLRUxZKCEhbV90
YmFhTWV0YWRhdGEpKQotICAgICAgICAgICAgcmV0dXJuIG1fdGJhYU1ldGFkYXRhOwotICAgICAg
ICByZXR1cm4gdGJhYU1ldGFkYXRhU2xvdyhyZXBvc2l0b3J5KTsKLSAgICB9Ci0jZW5kaWYKLSAg
ICAKICAgICB2b2lkIGRlY29yYXRlSW5zdHJ1Y3Rpb24oTFZhbHVlIGluc3RydWN0aW9uLCBjb25z
dCBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5JikgY29uc3Q7CiAKICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKQEAgLTExMCwxNSArOTQsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OwogCi0jaWYgIUZUTF9VU0VTX0Iz
Ci0gICAgTFZhbHVlIHRiYWFNZXRhZGF0YVNsb3coY29uc3QgQWJzdHJhY3RIZWFwUmVwb3NpdG9y
eSYpIGNvbnN0OwotI2VuZGlmCi0gICAgCiAgICAgQWJzdHJhY3RIZWFwKiBtX3BhcmVudDsKICAg
ICBjb25zdCBjaGFyKiBtX2hlYXBOYW1lOwotI2lmICFGVExfVVNFU19CMwotICAgIG11dGFibGUg
TFZhbHVlIG1fdGJhYU1ldGFkYXRhOwotI2VuZGlmCiB9OwogCiAvLyBUaGluayBvZiAiQWJzdHJh
Y3RGaWVsZCIgYXMgYmVpbmcgYW4gIkFic3RyYWN0SGVhcFdpdGhPZmZzZXQiLiBJIHdvdWxkIGhh
dmUgbmFtZWQKQEAgLTE1NSw3ICsxMzIsNyBAQCBwcml2YXRlOgogCiBjbGFzcyBJbmRleGVkQWJz
dHJhY3RIZWFwIHsKIHB1YmxpYzoKLSAgICBJbmRleGVkQWJzdHJhY3RIZWFwKExDb250ZXh0LCBB
YnN0cmFjdEhlYXAqIHBhcmVudCwgY29uc3QgY2hhciogaGVhcE5hbWUsIHB0cmRpZmZfdCBvZmZz
ZXQsIHNpemVfdCBlbGVtZW50U2l6ZSk7CisgICAgSW5kZXhlZEFic3RyYWN0SGVhcChBYnN0cmFj
dEhlYXAqIHBhcmVudCwgY29uc3QgY2hhciogaGVhcE5hbWUsIHB0cmRpZmZfdCBvZmZzZXQsIHNp
emVfdCBlbGVtZW50U2l6ZSk7CiAgICAgfkluZGV4ZWRBYnN0cmFjdEhlYXAoKTsKICAgICAKICAg
ICBjb25zdCBBYnN0cmFjdEhlYXAmIGF0QW55SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2hlYXBG
b3JBbnlJbmRleDsgfQpAQCAtMTg4LDEwICsxNjUsNiBAQCBwcml2YXRlOgogICAgIHNpemVfdCBt
X2hlYXBOYW1lTGVuZ3RoOwogICAgIHB0cmRpZmZfdCBtX29mZnNldDsKICAgICBzaXplX3QgbV9l
bGVtZW50U2l6ZTsKLSNpZiAhRlRMX1VTRVNfQjMKLSAgICBMVmFsdWUgbV9zY2FsZVRlcm07Ci0g
ICAgYm9vbCBtX2NhblNoaWZ0OwotI2VuZGlmCiAgICAgc3RkOjphcnJheTxBYnN0cmFjdEZpZWxk
LCAxNj4gbV9zbWFsbEluZGljZXM7CiAgICAgCiAgICAgc3RydWN0IFdpdGhvdXRaZXJvT3JPbmVI
YXNoVHJhaXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxwdHJkaWZmX3Q+IHsKQEAgLTIxMSw3
ICsxODQsNyBAQCBwcml2YXRlOgogCiBjbGFzcyBOdW1iZXJlZEFic3RyYWN0SGVhcCB7CiBwdWJs
aWM6Ci0gICAgTnVtYmVyZWRBYnN0cmFjdEhlYXAoTENvbnRleHQsIEFic3RyYWN0SGVhcCogcGFy
ZW50LCBjb25zdCBjaGFyKiBoZWFwTmFtZSk7CisgICAgTnVtYmVyZWRBYnN0cmFjdEhlYXAoQWJz
dHJhY3RIZWFwKiBwYXJlbnQsIGNvbnN0IGNoYXIqIGhlYXBOYW1lKTsKICAgICB+TnVtYmVyZWRB
YnN0cmFjdEhlYXAoKTsKICAgICAKICAgICBjb25zdCBBYnN0cmFjdEhlYXAmIGF0QW55TnVtYmVy
KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGVkSGVhcC5hdEFueUluZGV4KCk7IH0KQEAgLTIzMCw3
ICsyMDMsNyBAQCBwcml2YXRlOgogCiBjbGFzcyBBYnNvbHV0ZUFic3RyYWN0SGVhcCB7CiBwdWJs
aWM6Ci0gICAgQWJzb2x1dGVBYnN0cmFjdEhlYXAoTENvbnRleHQsIEFic3RyYWN0SGVhcCogcGFy
ZW50LCBjb25zdCBjaGFyKiBoZWFwTmFtZSk7CisgICAgQWJzb2x1dGVBYnN0cmFjdEhlYXAoQWJz
dHJhY3RIZWFwKiBwYXJlbnQsIGNvbnN0IGNoYXIqIGhlYXBOYW1lKTsKICAgICB+QWJzb2x1dGVB
YnN0cmFjdEhlYXAoKTsKICAgICAKICAgICBjb25zdCBBYnN0cmFjdEhlYXAmIGF0QW55QWRkcmVz
cygpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhlZEhlYXAuYXRBbnlJbmRleCgpOyB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeS5jcHAJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcg
KzI5LDYgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50
cy5oIgotI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0
ZXIuaCIKICNpbmNsdWRlICJKU0Vudmlyb25tZW50UmVjb3JkLmgiCiAjaW5jbHVkZSAiSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCkBAIC00MCw3ICszOSw3IEBACiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKIAotQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6QWJzdHJhY3RIZWFw
UmVwb3NpdG9yeShMQ29udGV4dCBjb250ZXh0KQorQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6QWJz
dHJhY3RIZWFwUmVwb3NpdG9yeSgpCiAgICAgOiByb290KDAsICJqc2NSb290IikKIAogI2RlZmlu
ZSBBQlNUUkFDVF9IRUFQX0lOSVRJQUxJWkFUSU9OKG5hbWUpICwgbmFtZSgmcm9vdCwgI25hbWUp
CkBAIC01MywxOSArNTIsMTUgQEAgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTo6QWJzdHJhY3RIZWFw
UmVwbwogICAgIAogICAgICwgSlNDZWxsX2ZyZWVMaXN0TmV4dChKU0NlbGxfc3RydWN0dXJlSUQp
CiAgICAgCi0jZGVmaW5lIElOREVYRURfQUJTVFJBQ1RfSEVBUF9JTklUSUFMSVpBVElPTihuYW1l
LCBvZmZzZXQsIHNpemUpICwgbmFtZShjb250ZXh0LCAmcm9vdCwgI25hbWUsIG9mZnNldCwgc2l6
ZSkKKyNkZWZpbmUgSU5ERVhFRF9BQlNUUkFDVF9IRUFQX0lOSVRJQUxJWkFUSU9OKG5hbWUsIG9m
ZnNldCwgc2l6ZSkgLCBuYW1lKCZyb290LCAjbmFtZSwgb2Zmc2V0LCBzaXplKQogICAgIEZPUl9F
QUNIX0lOREVYRURfQUJTVFJBQ1RfSEVBUChJTkRFWEVEX0FCU1RSQUNUX0hFQVBfSU5JVElBTEla
QVRJT04pCiAjdW5kZWYgSU5ERVhFRF9BQlNUUkFDVF9IRUFQX0lOSVRJQUxJWkFUSU9OCiAgICAg
Ci0jZGVmaW5lIE5VTUJFUkVEX0FCU1RSQUNUX0hFQVBfSU5JVElBTElaQVRJT04obmFtZSkgLCBu
YW1lKGNvbnRleHQsICZyb290LCAjbmFtZSkKKyNkZWZpbmUgTlVNQkVSRURfQUJTVFJBQ1RfSEVB
UF9JTklUSUFMSVpBVElPTihuYW1lKSAsIG5hbWUoJnJvb3QsICNuYW1lKQogICAgIEZPUl9FQUNI
X05VTUJFUkVEX0FCU1RSQUNUX0hFQVAoTlVNQkVSRURfQUJTVFJBQ1RfSEVBUF9JTklUSUFMSVpB
VElPTikKICN1bmRlZiBOVU1CRVJFRF9BQlNUUkFDVF9IRUFQX0lOSVRJQUxJWkFUSU9OCiAKLSAg
ICAsIGFic29sdXRlKGNvbnRleHQsICZyb290LCAiYWJzb2x1dGUiKQotICAgICwgbV9jb250ZXh0
KGNvbnRleHQpCi0jaWYgIUZUTF9VU0VTX0IzCi0gICAgLCBtX3RiYWFLaW5kKG1kS2luZElEKG1f
Y29udGV4dCwgInRiYWEiKSkKLSNlbmRpZgorICAgICwgYWJzb2x1dGUoJnJvb3QsICJhYnNvbHV0
ZSIpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgb3VyIGV4cGxpY2l0IGFzc3VtcHRpb25zIGFi
b3V0IHRoZSBTdHJ1Y3R1cmVJREJsb2IgbWF0Y2ggcmVhbGl0eS4KICAgICBSRUxFQVNFX0FTU0VS
VCghKEpTQ2VsbF9pbmRleGluZ1R5cGUub2Zmc2V0KCkgJiAoc2l6ZW9mKGludDMyX3QpIC0gMSkp
KTsKQEAgLTc4LDEzICs3Myw2IEBAIEFic3RyYWN0SGVhcFJlcG9zaXRvcnk6OkFic3RyYWN0SGVh
cFJlcG8KICAgICBKU0NlbGxfdHlwZUluZm9GbGFncy5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2Vm
dWxCeXRlcyk7CiAgICAgSlNDZWxsX2NlbGxTdGF0ZS5jaGFuZ2VQYXJlbnQoJkpTQ2VsbF91c2Vm
dWxCeXRlcyk7CiAKLSNpZiAhRlRMX1VTRVNfQjMKLSAgICByb290Lm1fdGJhYU1ldGFkYXRhID0g
bWROb2RlKG1fY29udGV4dCwgbWRTdHJpbmcobV9jb250ZXh0LCByb290Lm1faGVhcE5hbWUpKTsK
LSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChtX3RiYWFLaW5kKTsKLSAgICBSRUxFQVNFX0FTU0VS
VChyb290Lm1fdGJhYU1ldGFkYXRhKTsKLSNlbmRpZgotICAgIAogICAgIFJFTEVBU0VfQVNTRVJU
KCFKU0NlbGxfZnJlZUxpc3ROZXh0Lm9mZnNldCgpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJl
dmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RI
ZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNyArMTE4LDcgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogY2xhc3MgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeSB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWJzdHJhY3RIZWFwUmVwb3NpdG9yeSk7CiBwdWJs
aWM6Ci0gICAgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeShMQ29udGV4dCk7CisgICAgQWJzdHJhY3RI
ZWFwUmVwb3NpdG9yeSgpOwogICAgIH5BYnN0cmFjdEhlYXBSZXBvc2l0b3J5KCk7CiAgICAgCiAg
ICAgQWJzdHJhY3RIZWFwIHJvb3Q7CkBAIC0xODgsMTEgKzE4OCw2IEBAIHB1YmxpYzoKIAogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWJzdHJhY3RIZWFwOwotICAgIAotICAgIExDb250ZXh0
IG1fY29udGV4dDsKLSNpZiAhRlRMX1VTRVNfQjMKLSAgICB1bnNpZ25lZCBtX3RiYWFLaW5kOwot
I2VuZGlmCiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEIzQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExCM0NvbXBpbGUuY3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGVExDb21w
aWxlLmgiCiAKLSNpZiBFTkFCTEUoRlRMX0pJVCkgJiYgRlRMX1VTRVNfQjMKKyNpZiBFTkFCTEUo
RlRMX0pJVCkKIAogI2luY2x1ZGUgIkFpckNvZGUuaCIKICNpbmNsdWRlICJCM0dlbmVyYXRlLmgi
CkBAIC0zOSwxMiArMzksOCBAQAogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRl
ICJEYXRhVmlldy5oIgogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgotI2luY2x1ZGUgIkZUTEV4
Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiRlRMRXhpdFRodW5rR2VuZXJhdG9y
LmgiCi0jaW5jbHVkZSAiRlRMSW5saW5lQ2FjaGVTaXplLmgiCiAjaW5jbHVkZSAiRlRMSklUQ29k
ZS5oIgogI2luY2x1ZGUgIkZUTFRodW5rcy5oIgotI2luY2x1ZGUgIkZUTFVud2luZEluZm8uaCIK
ICNpbmNsdWRlICJKSVRTdWJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAj
aW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKQEAgLTE1Myw1ICsxNDksNSBAQCB2b2lkIGNv
bXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKIAotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKSAmJiBGVExfVVNFU19CMworI2VuZGlm
IC8vIEVOQUJMRShGVExfSklUKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEIzT3V0cHV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEIzT3V0cHV0LmNwcAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExCM091dHB1dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKICNp
bmNsdWRlICJGVExCM091dHB1dC5oIgogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCi0jaWYgRlRMX1VT
RVNfQjMKIAogI2luY2x1ZGUgIkIzTWF0aEV4dHJhcy5oIgogI2luY2x1ZGUgIkIzU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zLmgiCkBAIC0zNyw4ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKIHVzaW5nIG5hbWVzcGFjZSBCMzsKIAogT3V0cHV0OjpPdXRwdXQoU3RhdGUm
IHN0YXRlKQotICAgIDogQ29tbW9uVmFsdWVzKHN0YXRlLmNvbnRleHQpCi0gICAgLCBtX3Byb2Mo
KnN0YXRlLnByb2MpCisgICAgOiBtX3Byb2MoKnN0YXRlLnByb2MpCiB7CiB9CiAKQEAgLTI0NCw4
ICsyNDIsNjEgQEAgdm9pZCBPdXRwdXQ6OmNoZWNrKExWYWx1ZSBjb25kaXRpb24sIFdlaQogICAg
IGNoZWNrKGNvbmRpdGlvbiwgdGFrZW4sIHRha2VuLndlaWdodCgpLmludmVyc2UoKSk7CiB9CiAK
K0xWYWx1ZSBPdXRwdXQ6OmxvYWQoVHlwZWRQb2ludGVyIHBvaW50ZXIsIExvYWRUeXBlIHR5cGUp
Cit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBMb2FkOFNpZ25FeHQzMjoKKyAgICAg
ICAgcmV0dXJuIGxvYWQ4U2lnbkV4dDMyKHBvaW50ZXIpOworICAgIGNhc2UgTG9hZDhaZXJvRXh0
MzI6CisgICAgICAgIHJldHVybiBsb2FkOFplcm9FeHQzMihwb2ludGVyKTsKKyAgICBjYXNlIExv
YWQxNlNpZ25FeHQzMjoKKyAgICAgICAgcmV0dXJuIGxvYWQ4U2lnbkV4dDMyKHBvaW50ZXIpOwor
ICAgIGNhc2UgTG9hZDE2WmVyb0V4dDMyOgorICAgICAgICByZXR1cm4gbG9hZDhaZXJvRXh0MzIo
cG9pbnRlcik7CisgICAgY2FzZSBMb2FkMzI6CisgICAgICAgIHJldHVybiBsb2FkMzIocG9pbnRl
cik7CisgICAgY2FzZSBMb2FkNjQ6CisgICAgICAgIHJldHVybiBsb2FkNjQocG9pbnRlcik7Cisg
ICAgY2FzZSBMb2FkUHRyOgorICAgICAgICByZXR1cm4gbG9hZFB0cihwb2ludGVyKTsKKyAgICBj
YXNlIExvYWRGbG9hdDoKKyAgICAgICAgcmV0dXJuIGxvYWRGbG9hdChwb2ludGVyKTsKKyAgICBj
YXNlIExvYWREb3VibGU6CisgICAgICAgIHJldHVybiBsb2FkRG91YmxlKHBvaW50ZXIpOworICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRy
OworfQorCit2b2lkIE91dHB1dDo6c3RvcmUoTFZhbHVlIHZhbHVlLCBUeXBlZFBvaW50ZXIgcG9p
bnRlciwgU3RvcmVUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBT
dG9yZTMyQXM4OgorICAgICAgICBzdG9yZTMyQXM4KHZhbHVlLCBwb2ludGVyKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU3RvcmUzMkFzMTY6CisgICAgICAgIHN0b3JlMzJBczE2KHZhbHVl
LCBwb2ludGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmUzMjoKKyAgICAgICAg
c3RvcmUzMih2YWx1ZSwgcG9pbnRlcik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0b3Jl
NjQ6CisgICAgICAgIHN0b3JlNjQodmFsdWUsIHBvaW50ZXIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBTdG9yZVB0cjoKKyAgICAgICAgc3RvcmVQdHIodmFsdWUsIHBvaW50ZXIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICBzdG9yZUZsb2F0KHZh
bHVlLCBwb2ludGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmVEb3VibGU6Cisg
ICAgICAgIHN0b3JlRG91YmxlKHZhbHVlLCBwb2ludGVyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCiAKLSNlbmRpZiAvLyBGVExfVVNFU19CMwogI2VuZGlmIC8vIEVOQUJMRShG
VExfSklUKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzT3V0cHV0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM091dHB1dC5oCShy
ZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzT3V0cHV0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJERkdDb21tb24u
aCIKIAogI2lmIEVOQUJMRShGVExfSklUKQotI2lmIEZUTF9VU0VTX0IzCiAKICNpbmNsdWRlICJC
M0FyZ3VtZW50UmVnVmFsdWUuaCIKICNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCkBA
IC01MzEsNyArNTMwLDYgQEAgaW5saW5lIExWYWx1ZSBPdXRwdXQ6OmZyb3VuZChMVmFsdWUgZG91
YgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKLSNlbmRpZiAvLyBGVExfVVNFU19CMwog
I2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogCiAjZW5kaWYgLy8gRlRMQjNPdXRwdXRfaApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21tb25WYWx1ZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tbW9uVmFsdWVzLmNwcAkocmV2
aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21tb25WYWx1
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiQjNQcm9j
ZWR1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNUeXBlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlu
bGluZXMuaCIKLSNpbmNsdWRlICJGVExBYmJyZXZpYXRpb25zLmgiCiAKICNpZiBFTkFCTEUoRlRM
X0pJVCkKIApAQCAtNDIsOCArNDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBCMzsKIAotQ29tbW9uVmFsdWVzOjpDb21tb25WYWx1ZXMoTENv
bnRleHQgY29udGV4dCkKLSNpZiBGVExfVVNFU19CMworQ29tbW9uVmFsdWVzOjpDb21tb25WYWx1
ZXMoKQogICAgIDogdm9pZFR5cGUoQjM6OlZvaWQpCiAgICAgLCBib29sZWFuKEIzOjpJbnQzMikK
ICAgICAsIGludDMyKEIzOjpJbnQzMikKQEAgLTUxLDQ2ICs0OSw5IEBAIENvbW1vblZhbHVlczo6
Q29tbW9uVmFsdWVzKExDb250ZXh0IGNvbnQKICAgICAsIGludFB0cihCMzo6cG9pbnRlclR5cGUo
KSkKICAgICAsIGZsb2F0VHlwZShCMzo6RmxvYXQpCiAgICAgLCBkb3VibGVUeXBlKEIzOjpEb3Vi
bGUpCi0jZWxzZQotICAgIDogdm9pZFR5cGUoRlRMOjp2b2lkVHlwZShjb250ZXh0KSkKLSAgICAs
IGJvb2xlYW4oaW50MVR5cGUoY29udGV4dCkpCi0gICAgLCBpbnQzMihpbnQzMlR5cGUoY29udGV4
dCkpCi0gICAgLCBpbnQ2NChpbnQ2NFR5cGUoY29udGV4dCkpCi0gICAgLCBpbnRQdHIoaW50UHRy
VHlwZShjb250ZXh0KSkKLSAgICAsIGZsb2F0VHlwZShGVEw6OmZsb2F0VHlwZShjb250ZXh0KSkK
LSAgICAsIGRvdWJsZVR5cGUoRlRMOjpkb3VibGVUeXBlKGNvbnRleHQpKQotICAgICwgaW50OChp
bnQ4VHlwZShjb250ZXh0KSkKLSAgICAsIGludDE2KGludDE2VHlwZShjb250ZXh0KSkKLSAgICAs
IHJlZjgocG9pbnRlclR5cGUoaW50OCkpCi0gICAgLCByZWYxNihwb2ludGVyVHlwZShpbnQxNikp
Ci0gICAgLCByZWYzMihwb2ludGVyVHlwZShpbnQzMikpCi0gICAgLCByZWY2NChwb2ludGVyVHlw
ZShpbnQ2NCkpCi0gICAgLCByZWZQdHIocG9pbnRlclR5cGUoaW50UHRyKSkKLSAgICAsIHJlZkZs
b2F0KHBvaW50ZXJUeXBlKGZsb2F0VHlwZSkpCi0gICAgLCByZWZEb3VibGUocG9pbnRlclR5cGUo
ZG91YmxlVHlwZSkpCi0gICAgLCBib29sZWFuVHJ1ZShjb25zdEludChib29sZWFuLCB0cnVlLCBa
ZXJvRXh0ZW5kKSkKLSAgICAsIGJvb2xlYW5GYWxzZShjb25zdEludChib29sZWFuLCBmYWxzZSwg
WmVyb0V4dGVuZCkpCi0gICAgLCBpbnQ4WmVybyhjb25zdEludChpbnQ4LCAwLCBTaWduRXh0ZW5k
KSkKLSAgICAsIGludDMyWmVybyhjb25zdEludChpbnQzMiwgMCwgU2lnbkV4dGVuZCkpCi0gICAg
LCBpbnQzMk9uZShjb25zdEludChpbnQzMiwgMSwgU2lnbkV4dGVuZCkpCi0gICAgLCBpbnQ2NFpl
cm8oY29uc3RJbnQoaW50NjQsIDAsIFNpZ25FeHRlbmQpKQotICAgICwgaW50UHRyWmVybyhjb25z
dEludChpbnRQdHIsIDAsIFNpZ25FeHRlbmQpKQotICAgICwgaW50UHRyT25lKGNvbnN0SW50KGlu
dFB0ciwgMSwgU2lnbkV4dGVuZCkpCi0gICAgLCBpbnRQdHJUd28oY29uc3RJbnQoaW50UHRyLCAy
LCBTaWduRXh0ZW5kKSkKLSAgICAsIGludFB0clRocmVlKGNvbnN0SW50KGludFB0ciwgMywgU2ln
bkV4dGVuZCkpCi0gICAgLCBpbnRQdHJFaWdodChjb25zdEludChpbnRQdHIsIDgsIFNpZ25FeHRl
bmQpKQotICAgICwgZG91YmxlWmVybyhjb25zdFJlYWwoZG91YmxlVHlwZSwgMCkpCi0gICAgLCBy
YW5nZUtpbmQobWRLaW5kSUQoY29udGV4dCwgInJhbmdlIikpCi0gICAgLCBwcm9mS2luZChtZEtp
bmRJRChjb250ZXh0LCAicHJvZiIpKQotICAgICwgYnJhbmNoV2VpZ2h0cyhtZFN0cmluZyhjb250
ZXh0LCAiYnJhbmNoX3dlaWdodHMiKSkKLSAgICAsIG5vbk5lZ2F0aXZlSW50MzIoY29uc3RJbnQo
aW50MzIsIDAsIFNpZ25FeHRlbmQpLCBjb25zdEludChpbnQzMiwgMWxsIDw8IDMxLCBTaWduRXh0
ZW5kKSkKLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKLSAgICAsIG1fY29udGV4dChjb250ZXh0KQot
ICAgICwgbV9tb2R1bGUoMCkKIHsKIH0KIAotI2lmIEZUTF9VU0VTX0IzCiB2b2lkIENvbW1vblZh
bHVlczo6aW5pdGlhbGl6ZUNvbnN0YW50cyhCMzo6UHJvY2VkdXJlJiBwcm9jLCBCMzo6QmFzaWNC
bG9jayogYmxvY2spCiB7CiAgICAgaW50MzJaZXJvID0gYmxvY2stPmFwcGVuZE5ldzxDb25zdDMy
VmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKTsKQEAgLTEwNSw3ICs2Niw2IEBAIHZvaWQgQ29tbW9u
VmFsdWVzOjppbml0aWFsaXplQ29uc3RhbnRzKEIKICAgICBpbnRQdHJFaWdodCA9IGJsb2NrLT5h
cHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDgpOwogICAgIGRvdWJsZVpl
cm8gPSBibG9jay0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KHByb2MsIE9yaWdpbigpLCAw
Lik7CiB9Ci0jZW5kaWYKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbW1vblZhbHVlcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tbW9uVmFsdWVzLmgJKHJldmlzaW9uIDE5NjY4
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tbW9uVmFsdWVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDE2ICs0Miw5IEBAIG5hbWVzcGFjZSBGVEwgewogCiBjbGFzcyBDb21t
b25WYWx1ZXMgewogcHVibGljOgotICAgIENvbW1vblZhbHVlcyhMQ29udGV4dCBjb250ZXh0KTsK
KyAgICBDb21tb25WYWx1ZXMoKTsKIAotI2lmIEZUTF9VU0VTX0IzCiAgICAgdm9pZCBpbml0aWFs
aXplQ29uc3RhbnRzKEIzOjpQcm9jZWR1cmUmLCBCMzo6QmFzaWNCbG9jayopOwotI2Vsc2UgLy8g
RlRMX1VTRVNfQjMKLSAgICB2b2lkIGluaXRpYWxpemUoTE1vZHVsZSBtb2R1bGUpCi0gICAgewot
ICAgICAgICBtX21vZHVsZSA9IG1vZHVsZTsKLSAgICB9Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMK
ICAgICAKICAgICBjb25zdCBMVHlwZSB2b2lkVHlwZTsKICAgICBjb25zdCBMVHlwZSBib29sZWFu
OwpAQCAtNjAsMjIgKzUzLDggQEAgcHVibGljOgogICAgIGNvbnN0IExUeXBlIGludFB0cjsKICAg
ICBjb25zdCBMVHlwZSBmbG9hdFR5cGU7CiAgICAgY29uc3QgTFR5cGUgZG91YmxlVHlwZTsKLSNp
ZiAhRlRMX1VTRVNfQjMKLSAgICBjb25zdCBMVHlwZSBpbnQ4OwotICAgIGNvbnN0IExUeXBlIGlu
dDE2OwotICAgIGNvbnN0IExUeXBlIHJlZjg7Ci0gICAgY29uc3QgTFR5cGUgcmVmMTY7Ci0gICAg
Y29uc3QgTFR5cGUgcmVmMzI7Ci0gICAgY29uc3QgTFR5cGUgcmVmNjQ7Ci0gICAgY29uc3QgTFR5
cGUgcmVmUHRyOwotICAgIGNvbnN0IExUeXBlIHJlZkZsb2F0OwotICAgIGNvbnN0IExUeXBlIHJl
ZkRvdWJsZTsKLSNlbmRpZgogICAgIExWYWx1ZSBib29sZWFuVHJ1ZSB7IG51bGxwdHIgfTsKICAg
ICBMVmFsdWUgYm9vbGVhbkZhbHNlIHsgbnVsbHB0ciB9OwotI2lmICFGVExfVVNFU19CMwotICAg
IExWYWx1ZSBpbnQ4WmVybyB7IG51bGxwdHIgfTsKLSNlbmRpZgogICAgIExWYWx1ZSBpbnQzMlpl
cm8geyBudWxscHRyIH07CiAgICAgTFZhbHVlIGludDMyT25lIHsgbnVsbHB0ciB9OwogICAgIExW
YWx1ZSBpbnQ2NFplcm8geyBudWxscHRyIH07CkBAIC05MSw5ICs3MCw2IEBAIHB1YmxpYzoKICAg
ICBjb25zdCBMVmFsdWUgYnJhbmNoV2VpZ2h0cyB7IG51bGxwdHIgfTsKICAgICAKICAgICBjb25z
dCBWYWx1ZVJhbmdlIG5vbk5lZ2F0aXZlSW50MzI7Ci0KLSAgICBMQ29udGV4dCBjb25zdCBtX2Nv
bnRleHQ7Ci0gICAgTE1vZHVsZSBtX21vZHVsZTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2
aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjE5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcwotICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgU3plZ2VkCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRlRMQ29tcGlsZS5oIgotCi0jaWYg
RU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwotCi0jaW5jbHVkZSAiQ29kZUJsb2NrV2l0
aEpJVFR5cGUuaCIKLSNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLSNpbmNsdWRlICJERkdDb21t
b24uaCIKLSNpbmNsdWRlICJERkdHcmFwaFNhZmVwb2ludC5oIgotI2luY2x1ZGUgIkRGR09wZXJh
dGlvbnMuaCIKLSNpbmNsdWRlICJEYXRhVmlldy5oIgotI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5o
IgotI2luY2x1ZGUgIkZUTENvbXBpbGVCaW5hcnlPcC5oIgotI2luY2x1ZGUgIkZUTEV4Y2VwdGlv
bkhhbmRsZXJNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgiCi0j
aW5jbHVkZSAiRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgiCi0jaW5jbHVkZSAiRlRMSW5saW5l
Q2FjaGVTaXplLmgiCi0jaW5jbHVkZSAiRlRMSklUQ29kZS5oIgotI2luY2x1ZGUgIkZUTFRodW5r
cy5oIgotI2luY2x1ZGUgIkZUTFVud2luZEluZm8uaCIKLSNpbmNsdWRlICJMTFZNQVBJLmgiCi0j
aW5jbHVkZSAiTGlua0J1ZmZlci5oIgotI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBERkc7Ci0KLXN0YXRpYyBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzRm9yKGNvbnN0IFN0YWNr
TWFwczo6UmVjb3JkJik7Ci0KLXN0YXRpYyB1aW50OF90KiBtbUFsbG9jYXRlQ29kZVNlY3Rpb24o
Ci0gICAgdm9pZCogb3BhcXVlU3RhdGUsIHVpbnRwdHJfdCBzaXplLCB1bnNpZ25lZCBhbGlnbm1l
bnQsIHVuc2lnbmVkLCBjb25zdCBjaGFyKiBzZWN0aW9uTmFtZSkKLXsKLSAgICBTdGF0ZSYgc3Rh
dGUgPSAqc3RhdGljX2Nhc3Q8U3RhdGUqPihvcGFxdWVTdGF0ZSk7Ci0gICAgCi0gICAgUkVMRUFT
RV9BU1NFUlQoYWxpZ25tZW50IDw9IGppdEFsbG9jYXRpb25HcmFudWxlKTsKLSAgICAKLSAgICBS
ZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0KLSAgICAgICAgc3RhdGUuZ3Jh
cGgubV92bS5leGVjdXRhYmxlQWxsb2NhdG9yLmFsbG9jYXRlKAotICAgICAgICAgICAgc3RhdGUu
Z3JhcGgubV92bSwgc2l6ZSwgc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9u
Q2FuRmFpbCk7Ci0gICAgCi0gICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgLy8gU2lnbmFsIGZh
aWx1cmUuIFRoaXMgY29tcGlsYXRpb24gd2lsbCBnZXQgdG9zc2VkLgotICAgICAgICBzdGF0ZS5h
bGxvY2F0aW9uRmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZha2UgYW4gYWxs
b2NhdGlvbiwgc2luY2UgTExWTSBjYW5ub3QgaGFuZGxlIGZhaWx1cmVzIGluIHRoZSBtZW1vcnkg
bWFuYWdlci4KLSAgICAgICAgUmVmUHRyPERhdGFTZWN0aW9uPiBmYWtlU2VjdGlvbiA9IGFkb3B0
UmVmKG5ldyBEYXRhU2VjdGlvbihzaXplLCBqaXRBbGxvY2F0aW9uR3JhbnVsZSkpOwotICAgICAg
ICBzdGF0ZS5qaXRDb2RlLT5hZGREYXRhU2VjdGlvbihmYWtlU2VjdGlvbik7Ci0gICAgICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8dWludDhfdCo+KGZha2VTZWN0aW9uLT5iYXNlKCkpOwotICAgIH0K
LSAgICAKLSAgICAvLyBMTFZNIHVzZWQgdG8gcHV0IF9fY29tcGFjdF91bndpbmQgaW4gYSBjb2Rl
IHNlY3Rpb24uIFdlIGtlZXAgdGhpcyBoZXJlIGRlZmVuc2l2ZWx5LAotICAgIC8vIGZvciBjbGll
bnRzIHRoYXQgdXNlIG9sZGVyIExMVk1zLgotICAgIGlmICghc3RyY21wKHNlY3Rpb25OYW1lLCBT
RUNUSU9OX05BTUUoImNvbXBhY3RfdW53aW5kIikpKSB7Ci0gICAgICAgIHN0YXRlLnVud2luZERh
dGFTZWN0aW9uID0gcmVzdWx0LT5zdGFydCgpOwotICAgICAgICBzdGF0ZS51bndpbmREYXRhU2Vj
dGlvblNpemUgPSByZXN1bHQtPnNpemVJbkJ5dGVzKCk7Ci0gICAgfQotICAgIAotICAgIHN0YXRl
LmppdENvZGUtPmFkZEhhbmRsZShyZXN1bHQpOwotICAgIHN0YXRlLmNvZGVTZWN0aW9uTmFtZXMu
YXBwZW5kKHNlY3Rpb25OYW1lKTsKLSAgICAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhf
dCo+KHJlc3VsdC0+c3RhcnQoKSk7Ci19Ci0KLXN0YXRpYyB1aW50OF90KiBtbUFsbG9jYXRlRGF0
YVNlY3Rpb24oCi0gICAgdm9pZCogb3BhcXVlU3RhdGUsIHVpbnRwdHJfdCBzaXplLCB1bnNpZ25l
ZCBhbGlnbm1lbnQsIHVuc2lnbmVkIHNlY3Rpb25JRCwKLSAgICBjb25zdCBjaGFyKiBzZWN0aW9u
TmFtZSwgTExWTUJvb2wgaXNSZWFkT25seSkKLXsKLSAgICBVTlVTRURfUEFSQU0oc2VjdGlvbklE
KTsKLSAgICBVTlVTRURfUEFSQU0oaXNSZWFkT25seSk7Ci0KLSAgICAvLyBBbGxvY2F0ZSB0aGUg
R09UIGluIHRoZSBjb2RlIHNlY3Rpb24gdG8gbWFrZSBpdCByZWFjaGFibGUgZm9yIGFsbCBjb2Rl
LgotICAgIGlmICghc3RyY21wKHNlY3Rpb25OYW1lLCBTRUNUSU9OX05BTUUoImdvdCIpKSkKLSAg
ICAgICAgcmV0dXJuIG1tQWxsb2NhdGVDb2RlU2VjdGlvbihvcGFxdWVTdGF0ZSwgc2l6ZSwgYWxp
Z25tZW50LCBzZWN0aW9uSUQsIHNlY3Rpb25OYW1lKTsKLQotICAgIFN0YXRlJiBzdGF0ZSA9ICpz
dGF0aWNfY2FzdDxTdGF0ZSo+KG9wYXF1ZVN0YXRlKTsKLQotICAgIFJlZlB0cjxEYXRhU2VjdGlv
bj4gc2VjdGlvbiA9IGFkb3B0UmVmKG5ldyBEYXRhU2VjdGlvbihzaXplLCBhbGlnbm1lbnQpKTsK
LQotICAgIGlmICghc3RyY21wKHNlY3Rpb25OYW1lLCBTRUNUSU9OX05BTUUoImxsdm1fc3RhY2tt
YXBzIikpKQotICAgICAgICBzdGF0ZS5zdGFja21hcHNTZWN0aW9uID0gc2VjdGlvbjsKLSAgICBl
bHNlIHsKLSAgICAgICAgc3RhdGUuaml0Q29kZS0+YWRkRGF0YVNlY3Rpb24oc2VjdGlvbik7Ci0g
ICAgICAgIHN0YXRlLmRhdGFTZWN0aW9uTmFtZXMuYXBwZW5kKHNlY3Rpb25OYW1lKTsKLSNpZiBP
UyhEQVJXSU4pCi0gICAgICAgIGlmICghc3RyY21wKHNlY3Rpb25OYW1lLCBTRUNUSU9OX05BTUUo
ImNvbXBhY3RfdW53aW5kIikpKSB7Ci0jZWxpZiBPUyhMSU5VWCkKLSAgICAgICAgaWYgKCFzdHJj
bXAoc2VjdGlvbk5hbWUsIFNFQ1RJT05fTkFNRSgiZWhfZnJhbWUiKSkpIHsKLSNlbHNlCi0jZXJy
b3IgIlVucmVjb2duaXplZCBPUyIKLSNlbmRpZgotICAgICAgICAgICAgc3RhdGUudW53aW5kRGF0
YVNlY3Rpb24gPSBzZWN0aW9uLT5iYXNlKCk7Ci0gICAgICAgICAgICBzdGF0ZS51bndpbmREYXRh
U2VjdGlvblNpemUgPSBzaXplOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDx1aW50OF90Kj4oc2VjdGlvbi0+YmFzZSgpKTsKLX0KLQotc3RhdGljIExMVk1Cb29s
IG1tQXBwbHlQZXJtaXNzaW9ucyh2b2lkKiwgY2hhcioqKQotewotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotc3RhdGljIHZvaWQgbW1EZXN0cm95KHZvaWQqKQotewotfQotCi1zdGF0aWMgdm9pZCBk
dW1wRGF0YVNlY3Rpb24oRGF0YVNlY3Rpb24qIHNlY3Rpb24sIGNvbnN0IGNoYXIqIHByZWZpeCkK
LXsKLSAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc2VjdGlvbi0+c2l6ZSgpIC8gc2l6ZW9m
KGludDY0X3QpOyArK2opIHsKLSAgICAgICAgY2hhciBidWZbMzJdOwotICAgICAgICBpbnQ2NF90
KiB3b3JkUG9pbnRlciA9IHN0YXRpY19jYXN0PGludDY0X3QqPihzZWN0aW9uLT5iYXNlKCkpICsg
ajsKLSAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIjB4JWx4Iiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQgbG9uZz4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4od29yZFBvaW50ZXIpKSk7
Ci0gICAgICAgIGRhdGFMb2dGKCIlcyUxNnM6IDB4JTAxNmxseFxuIiwgcHJlZml4LCBidWYsIHN0
YXRpY19jYXN0PGxvbmcgbG9uZz4oKndvcmRQb2ludGVyKSk7Ci0gICAgfQotfQotCi1zdGF0aWMg
aW50IG9mZnNldE9mU3RhY2tSZWdpb24oU3RhY2tNYXBzOjpSZWNvcmRNYXAmIHJlY29yZE1hcCwg
dWludDMyX3Qgc3RhY2ttYXBJRCkKLXsKLSAgICBpZiAoc3RhY2ttYXBJRCA9PSBVSU5UX01BWCkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJh
dG9yIGl0ZXIgPSByZWNvcmRNYXAuZmluZChzdGFja21hcElEKTsKLSAgICBSRUxFQVNFX0FTU0VS
VChpdGVyICE9IHJlY29yZE1hcC5lbmQoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXRlci0+dmFs
dWUuc2l6ZSgpID09IDEpOwotICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXItPnZhbHVlWzBdLnJlY29y
ZC5sb2NhdGlvbnMuc2l6ZSgpID09IDEpOwotICAgIExvY2F0aW9uIGNhcHR1cmVkTG9jYXRpb24g
PQotICAgICAgICBMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKG51bGxwdHIsIGl0ZXItPnZhbHVlWzBd
LnJlY29yZC5sb2NhdGlvbnNbMF0pOwotICAgIFJFTEVBU0VfQVNTRVJUKGNhcHR1cmVkTG9jYXRp
b24ua2luZCgpID09IExvY2F0aW9uOjpSZWdpc3Rlcik7Ci0gICAgUkVMRUFTRV9BU1NFUlQoY2Fw
dHVyZWRMb2NhdGlvbi5ncHIoKSA9PSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoIShjYXB0dXJlZExvY2F0aW9uLmFkZGVuZCgpICUgc2l6ZW9mKFJlZ2lz
dGVyKSkpOwotICAgIHJldHVybiBjYXB0dXJlZExvY2F0aW9uLmFkZGVuZCgpIC8gc2l6ZW9mKFJl
Z2lzdGVyKTsKLX0KLQotc3RhdGljIHZvaWQgZ2VuZXJhdGVJbmxpbmVJZlBvc3NpYmxlT3V0T2ZM
aW5lSWZOb3QoU3RhdGUmIHN0YXRlLCBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDQ2Fs
bEhlbHBlcnMmIGNvZGUsIGNoYXIqIHN0YXJ0T2ZJbmxpbmVDb2RlLCBzaXplX3Qgc2l6ZU9mSW5s
aW5lQ29kZSwgY29uc3QgY2hhciogY29kZURlc2NyaXB0aW9uLCBjb25zdCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoTGlua0J1ZmZlciYsIENDYWxsSGVscGVycyYsIGJvb2wgd2FzQ29tcGlsZWRJbmxpbmUp
PiYgY2FsbGJhY2spCi17Ci0gICAgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+IGNvZGVMaW5r
QnVmZmVyOwotICAgIHNpemVfdCBhY3R1YWxDb2RlU2l6ZSA9IGNvZGUubV9hc3NlbWJsZXIuYnVm
ZmVyKCkuY29kZVNpemUoKTsKLQotICAgIGlmIChhY3R1YWxDb2RlU2l6ZSA8PSBzaXplT2ZJbmxp
bmVDb2RlKSB7Ci0gICAgICAgIExpbmtCdWZmZXIgY29kZUxpbmtCdWZmZXIodm0sIGNvZGUsIHN0
YXJ0T2ZJbmxpbmVDb2RlLCBzaXplT2ZJbmxpbmVDb2RlKTsKLQotICAgICAgICAvLyBGaWxsIHRo
ZSByZW1haW5kZXIgb2YgdGhlIGlubGluZSBzcGFjZSB3aXRoIG5vcHMgdG8gYXZvaWQgY29uZnVz
aW5nIHRoZSBkaXNhc3NlbWJsZXIuCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBc3NlbWJsZXJU
eXBlX1Q6OmZpbGxOb3BzKGJpdHdpc2VfY2FzdDxjaGFyKj4oc3RhcnRPZklubGluZUNvZGUpICsg
YWN0dWFsQ29kZVNpemUsIHNpemVPZklubGluZUNvZGUgLSBhY3R1YWxDb2RlU2l6ZSk7Ci0KLSAg
ICAgICAgY2FsbGJhY2soY29kZUxpbmtCdWZmZXIsIGNvZGUsIHRydWUpOwotCi0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoT3B0aW9uczo6YXNzZXJ0SUNTaXppbmcoKSB8fCBPcHRp
b25zOjpkdW1wRmFpbGVkSUNTaXppbmcoKSkgewotICAgICAgICBzdGF0aWMgc2l6ZV90IG1heFNp
emUgPSAwOwotICAgICAgICBpZiAobWF4U2l6ZSA8IGFjdHVhbENvZGVTaXplKQotICAgICAgICAg
ICAgbWF4U2l6ZSA9IGFjdHVhbENvZGVTaXplOwotICAgICAgICBkYXRhTG9nRigiQUxFUlQ6IFVu
ZGVyLWVzdGltYXRlZCBGVEwgSW5saW5lIENhY2hlIFNpemUgZm9yICVzOiBlc3RpbWF0ZWQgJXp1
LCBhY3R1YWwgJXp1LCBtYXggJXp1XG4iLCBjb2RlRGVzY3JpcHRpb24sIHNpemVPZklubGluZUNv
ZGUsIGFjdHVhbENvZGVTaXplLCBtYXhTaXplKTsKLSAgICAgICAgaWYgKE9wdGlvbnM6OmFzc2Vy
dElDU2l6aW5nKCkpCi0gICAgICAgICAgICBDUkFTSCgpOwotICAgIH0KLQotICAgIC8vIElmIHRo
ZXJlIGlzbid0IGVub3VnaCBzcGFjZSBpbiB0aGUgcHJvdmlkZWQgaW5saW5lIGNvZGUgYXJlYSwg
YWxsb2NhdGUgb3V0IG9mIGxpbmUKLSAgICAvLyBleGVjdXRhYmxlIG1lbW9yeSB0byBsaW5rIHRo
ZSBwcm92aWRlZCBjb2RlLiBQbGFjZSBhIGp1bXAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKLSAg
ICAvLyBpbmxpbmUgYXJlYSBhbmQganVtcCB0byB0aGUgb3V0IG9mIGxpbmUgY29kZS4gU2ltaWxh
cmx5IHJldHVybiBieSBhcHBlbmRpbmcgYSBqdW1wCi0gICAgLy8gdG8gdGhlIHByb3ZpZGVkIGNv
ZGUgdGhhdCBnb2VzIHRvIHRoZSBpbnN0cnVjdGlvbiBhZnRlciB0aGUgaW5saW5lIGNvZGUuCi0g
ICAgLy8gRmlsbCB0aGUgbWlkZGxlIHdpdGggbm9wJ3MuCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgcmV0dXJuVG9NYWlubGluZSA9IGNvZGUuanVtcCgpOwotCi0gICAgLy8gQWxsb2NhdGUgb3V0
IG9mIGxpbmUgZXhlY3V0YWJsZSBtZW1vcnkgYW5kIGxpbmsgdGhlIHByb3ZpZGVkIGNvZGUgdGhl
cmUuCi0gICAgY29kZUxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtCdWZmZXI+KHZt
LCBjb2RlLCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOwotCi0gICAgLy8g
UGxhbnQgYSBqbXAgaW4gdGhlIGlubGluZSBidWZmZXIgdG8gdGhlIG91dCBvZiBsaW5lIGNvZGUu
Ci0gICAgTWFjcm9Bc3NlbWJsZXIgY2FsbFRvT3V0T2ZMaW5lQ29kZTsKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBqdW1wVG9PdXRPZkxpbmUgPSBjYWxsVG9PdXRPZkxpbmVDb2RlLmp1bXAoKTsK
LSAgICBMaW5rQnVmZmVyIGlubGluZUJ1ZmZlcih2bSwgY2FsbFRvT3V0T2ZMaW5lQ29kZSwgc3Rh
cnRPZklubGluZUNvZGUsIHNpemVPZklubGluZUNvZGUpOwotICAgIGlubGluZUJ1ZmZlci5saW5r
KGp1bXBUb091dE9mTGluZSwgY29kZUxpbmtCdWZmZXItPmVudHJ5cG9pbnQoKSk7Ci0KLSAgICAv
LyBGaWxsIHRoZSByZW1haW5kZXIgb2YgdGhlIGlubGluZSBzcGFjZSB3aXRoIG5vcHMgdG8gYXZv
aWQgY29uZnVzaW5nIHRoZSBkaXNhc3NlbWJsZXIuCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkFzc2Vt
YmxlclR5cGVfVDo6ZmlsbE5vcHMoYml0d2lzZV9jYXN0PGNoYXIqPihzdGFydE9mSW5saW5lQ29k
ZSkgKyBpbmxpbmVCdWZmZXIuc2l6ZSgpLCBzaXplT2ZJbmxpbmVDb2RlIC0gaW5saW5lQnVmZmVy
LnNpemUoKSk7Ci0KLSAgICAvLyBMaW5rIHRoZSBlbmQgb2YgdGhlIG91dCBvZiBsaW5lIGNvZGUg
dG8gcmlnaHQgYWZ0ZXIgdGhlIGlubGluZSBhcmVhLgotICAgIGNvZGVMaW5rQnVmZmVyLT5saW5r
KHJldHVyblRvTWFpbmxpbmUsIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHN0YXJ0T2ZJbmxpbmVDb2RlKSkubGFiZWxB
dE9mZnNldChzaXplT2ZJbmxpbmVDb2RlKSk7Ci0KLSAgICBjYWxsYmFjaygqY29kZUxpbmtCdWZm
ZXIuZ2V0KCksIGNvZGUsIGZhbHNlKTsKLQotICAgIHN0YXRlLmZpbmFsaXplci0+b3V0T2ZMaW5l
Q29kZUluZm9zLmFwcGVuZChPdXRPZkxpbmVDb2RlSW5mbyhXVEZNb3ZlKGNvZGVMaW5rQnVmZmVy
KSwgY29kZURlc2NyaXB0aW9uKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIERlc2NyaXB0b3JU
eXBlPgotdm9pZCBnZW5lcmF0ZUlDRmFzdFBhdGgoCi0gICAgU3RhdGUmIHN0YXRlLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgR2VuZXJhdGVkRnVuY3Rpb24gZ2VuZXJhdGVkRnVuY3Rpb24sCi0gICAg
U3RhY2tNYXBzOjpSZWNvcmRNYXAmIHJlY29yZE1hcCwgRGVzY3JpcHRvclR5cGUmIGljLCBzaXpl
X3Qgc2l6ZU9mSUMsIGNvbnN0IGNoYXIqIGljTmFtZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS5n
cmFwaC5tX3ZtOwotCi0gICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBy
ZWNvcmRNYXAuZmluZChpYy5zdGFja21hcElEKCkpOwotICAgIGlmIChpdGVyID09IHJlY29yZE1h
cC5lbmQoKSkgewotICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAKLSAgICBWZWN0b3I8U3RhY2tNYXBzOjpSZWNvcmRBbmRJbmRleD4m
IHJlY29yZHMgPSBpdGVyLT52YWx1ZTsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChyZWNvcmRz
LnNpemUoKSA9PSBpYy5tX2dlbmVyYXRvcnMuc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSByZWNvcmRzLnNpemUoKTsgaS0tOykgewotICAgICAgICBTdGFja01hcHM6OlJlY29y
ZCYgcmVjb3JkID0gcmVjb3Jkc1tpXS5yZWNvcmQ7Ci0gICAgICAgIGF1dG8gZ2VuZXJhdG9yID0g
aWMubV9nZW5lcmF0b3JzW2ldOwotCi0gICAgICAgIENDYWxsSGVscGVycyBmYXN0UGF0aEpJVCgm
dm0sIGNvZGVCbG9jayk7Ci0gICAgICAgIGdlbmVyYXRvci5nZW5lcmF0ZUZhc3RQYXRoKGZhc3RQ
YXRoSklUKTsKLSAgICAgICAgCi0gICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9Ci0gICAgICAgICAg
ICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIHJlY29yZC5pbnN0cnVj
dGlvbk9mZnNldDsKLQotICAgICAgICBnZW5lcmF0ZUlubGluZUlmUG9zc2libGVPdXRPZkxpbmVJ
Zk5vdChzdGF0ZSwgdm0sIGNvZGVCbG9jaywgZmFzdFBhdGhKSVQsIHN0YXJ0T2ZJQywgc2l6ZU9m
SUMsIGljTmFtZSwgWyZdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBDQ2FsbEhlbHBlcnMmLCBi
b29sKSB7Ci0gICAgICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPnNpZGVDb2RlTGlua0J1ZmZlci0+
bGluayhpYy5tX3Nsb3dQYXRoRG9uZVtpXSwKLSAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbChzdGFydE9mSUMgKyBzaXplT2ZJQykpOwotCi0gICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsoZ2VuZXJhdG9yLnNsb3dQYXRoSnVtcCgpLAotICAgICAgICAgICAgICAgIHN0YXRlLmZpbmFs
aXplci0+c2lkZUNvZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGdlbmVyYXRvci5zbG93UGF0aEJl
Z2luKCkpKTsKLQotICAgICAgICAgICAgZ2VuZXJhdG9yLmZpbmFsaXplKGxpbmtCdWZmZXIsICpz
dGF0ZS5maW5hbGl6ZXItPnNpZGVDb2RlTGlua0J1ZmZlcik7Ci0gICAgICAgIH0pOwotICAgIH0K
LX0KLQotc3RhdGljIHZvaWQgZ2VuZXJhdGVDaGVja0luSUNGYXN0UGF0aCgKLSAgICBTdGF0ZSYg
c3RhdGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBHZW5lcmF0ZWRGdW5jdGlvbiBnZW5lcmF0ZWRG
dW5jdGlvbiwKLSAgICBTdGFja01hcHM6OlJlY29yZE1hcCYgcmVjb3JkTWFwLCBDaGVja0luRGVz
Y3JpcHRvciYgaWMsIHNpemVfdCBzaXplT2ZJQykKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS5ncmFw
aC5tX3ZtOwotCi0gICAgU3RhY2tNYXBzOjpSZWNvcmRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSByZWNv
cmRNYXAuZmluZChpYy5zdGFja21hcElEKCkpOwotICAgIGlmIChpdGVyID09IHJlY29yZE1hcC5l
bmQoKSkgewotICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICAKLSAgICBWZWN0b3I8U3RhY2tNYXBzOjpSZWNvcmRBbmRJbmRleD4mIHJl
Y29yZHMgPSBpdGVyLT52YWx1ZTsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVChyZWNvcmRzLnNp
emUoKSA9PSBpYy5tX2dlbmVyYXRvcnMuc2l6ZSgpKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9
IHJlY29yZHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNv
cmQgPSByZWNvcmRzW2ldLnJlY29yZDsKLSAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBpYy5tX2dl
bmVyYXRvcnNbaV07Ci0KLSAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gKmdl
bmVyYXRvci5tX3N0dWI7Ci0gICAgICAgIGF1dG8gY2FsbCA9IGdlbmVyYXRvci5tX3Nsb3dDYWxs
OwotICAgICAgICBhdXRvIHNsb3dQYXRoQmVnaW4gPSBnZW5lcmF0b3IubV9iZWdpbkxhYmVsOwot
Ci0gICAgICAgIENDYWxsSGVscGVycyBmYXN0UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7Ci0gICAg
ICAgIAotICAgICAgICBhdXRvIGp1bXAgPSBmYXN0UGF0aEpJVC5wYXRjaGFibGVKdW1wKCk7Ci0g
ICAgICAgIGF1dG8gZG9uZSA9IGZhc3RQYXRoSklULmxhYmVsKCk7Ci0KLSAgICAgICAgY2hhciog
c3RhcnRPZklDID0KLSAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVu
Y3Rpb24pICsgcmVjb3JkLmluc3RydWN0aW9uT2Zmc2V0OwotCi0gICAgICAgIGF1dG8gcG9zdExp
bmsgPSBbJl0gKExpbmtCdWZmZXImIGZhc3RQYXRoLCBDQ2FsbEhlbHBlcnMmLCBib29sKSB7Ci0g
ICAgICAgICAgICBMaW5rQnVmZmVyJiBzbG93UGF0aCA9ICpzdGF0ZS5maW5hbGl6ZXItPnNpZGVD
b2RlTGlua0J1ZmZlcjsKLQotICAgICAgICAgICAgc3RhdGUuZmluYWxpemVyLT5zaWRlQ29kZUxp
bmtCdWZmZXItPmxpbmsoCi0gICAgICAgICAgICAgICAgaWMubV9zbG93UGF0aERvbmVbaV0sIENv
ZGVMb2NhdGlvbkxhYmVsKHN0YXJ0T2ZJQyArIHNpemVPZklDKSk7Ci0KLSAgICAgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsIHNsb3dQYXRoQmVnaW5Mb2MgPSBzbG93UGF0aC5sb2NhdGlvbk9mKHNs
b3dQYXRoQmVnaW4pOwotICAgICAgICAgICAgZmFzdFBhdGgubGluayhqdW1wLCBzbG93UGF0aEJl
Z2luTG9jKTsKLQotICAgICAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRp
b24gPSBzbG93UGF0aC5sb2NhdGlvbk9mKGNhbGwpOwotCi0gICAgICAgICAgICBzdHViSW5mby5w
YXRjaC5kZWx0YUNhbGxUb0RvbmUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5D
b2RlUHRyKAotICAgICAgICAgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwgZmFzdFBhdGgubG9j
YXRpb25PZihkb25lKSk7Ci0KLSAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRv
SnVtcCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAg
ICAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLCBmYXN0UGF0aC5sb2NhdGlvbk9mKGp1bXApKTsK
LSAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGxSZXR1cm5Mb2Nh
dGlvbjsKLSAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UgPSBN
YWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAgICAgICAgICAg
IGNhbGxSZXR1cm5Mb2NhdGlvbiwgc2xvd1BhdGhCZWdpbkxvYyk7Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgZ2VuZXJhdGVJbmxpbmVJZlBvc3NpYmxlT3V0T2ZMaW5lSWZOb3Qoc3RhdGUsIHZtLCBj
b2RlQmxvY2ssIGZhc3RQYXRoSklULCBzdGFydE9mSUMsIHNpemVPZklDLCAiQ2hlY2tJbiIsIHBv
c3RMaW5rKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGdlbmVyYXRlQmluYXJ5T3BJQ0Zhc3RQ
YXRoKAotICAgIFN0YXRlJiBzdGF0ZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEdlbmVyYXRlZEZ1
bmN0aW9uIGdlbmVyYXRlZEZ1bmN0aW9uLAotICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwJiByZWNv
cmRNYXAsIEJpbmFyeU9wRGVzY3JpcHRvciYgaWMpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUuZ3Jh
cGgubV92bTsKLSAgICBzaXplX3Qgc2l6ZU9mSUMgPSBpYy5zaXplKCk7Ci0KLSAgICBTdGFja01h
cHM6OlJlY29yZE1hcDo6aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKGljLnN0YWNrbWFw
SUQoKSk7Ci0gICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKQotICAgICAgICByZXR1cm47
IC8vIEl0IHdhcyBvcHRpbWl6ZWQgb3V0LgotCi0gICAgVmVjdG9yPFN0YWNrTWFwczo6UmVjb3Jk
QW5kSW5kZXg+JiByZWNvcmRzID0gaXRlci0+dmFsdWU7Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChy
ZWNvcmRzLnNpemUoKSA9PSBpYy5tX3Nsb3dQYXRoU3RhcnRzLnNpemUoKSk7Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSByZWNvcmRzLnNpemUoKTsgaS0tOykgewotICAgICAgICBTdGFja01hcHM6
OlJlY29yZCYgcmVjb3JkID0gcmVjb3Jkc1tpXS5yZWNvcmQ7Ci0KLSAgICAgICAgQ0NhbGxIZWxw
ZXJzIGZhc3RQYXRoSklUKCZ2bSwgY29kZUJsb2NrKTsKLQotICAgICAgICBHUFJSZWcgcmVzdWx0
ID0gcmVjb3JkLmxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKTsKLSAgICAgICAgR1BSUmVnIGxlZnQg
PSByZWNvcmQubG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwotICAgICAgICBHUFJSZWcgcmlnaHQg
PSByZWNvcmQubG9jYXRpb25zWzJdLmRpcmVjdEdQUigpOwotICAgICAgICBSZWdpc3RlclNldCB1
c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVyc0ZvcihyZWNvcmQpOwotCi0gICAgICAgIENDYWxs
SGVscGVyczo6SnVtcCBkb25lOwotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1BhdGhT
dGFydDsKLQotICAgICAgICBnZW5lcmF0ZUJpbmFyeU9wRmFzdFBhdGgoaWMsIGZhc3RQYXRoSklU
LCByZXN1bHQsIGxlZnQsIHJpZ2h0LCB1c2VkUmVnaXN0ZXJzLCBkb25lLCBzbG93UGF0aFN0YXJ0
KTsKLQotICAgICAgICBjaGFyKiBzdGFydE9mSUMgPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVy
YXRlZEZ1bmN0aW9uKSArIHJlY29yZC5pbnN0cnVjdGlvbk9mZnNldDsKLSAgICAgICAgZ2VuZXJh
dGVJbmxpbmVJZlBvc3NpYmxlT3V0T2ZMaW5lSWZOb3Qoc3RhdGUsIHZtLCBjb2RlQmxvY2ssIGZh
c3RQYXRoSklULCBzdGFydE9mSUMsIHNpemVPZklDLCBpYy5uYW1lKCksIFsmXSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlciwgQ0NhbGxIZWxwZXJzJiwgYm9vbCkgewotICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKGRvbmUsIENvZGVMb2NhdGlvbkxhYmVsKHN0YXJ0T2ZJQyArIHNpemVPZklDKSk7
Ci0gICAgICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPnNpZGVDb2RlTGlua0J1ZmZlci0+bGluayhp
Yy5tX3Nsb3dQYXRoRG9uZVtpXSwgQ29kZUxvY2F0aW9uTGFiZWwoc3RhcnRPZklDICsgc2l6ZU9m
SUMpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dQYXRo
U3RhcnQsIHN0YXRlLmZpbmFsaXplci0+c2lkZUNvZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGlj
Lm1fc2xvd1BhdGhTdGFydHNbaV0pKTsKLSAgICAgICAgfSk7Ci0gICAgfQotfQotCi0jaWYgRU5B
QkxFKE1BU01fUFJPQkUpCi0KLXN0YXRpYyB2b2lkIGdlbmVyYXRlUHJvYmUoCi0gICAgU3RhdGUm
IHN0YXRlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgR2VuZXJhdGVkRnVuY3Rpb24gZ2VuZXJhdGVk
RnVuY3Rpb24sCi0gICAgU3RhY2tNYXBzOjpSZWNvcmRNYXAmIHJlY29yZE1hcCwgUHJvYmVEZXNj
cmlwdG9yJiBpYykKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS5ncmFwaC5tX3ZtOwotICAgIHNpemVf
dCBzaXplT2ZJQyA9IHNpemVPZlByb2JlKCk7Ci0KLSAgICBTdGFja01hcHM6OlJlY29yZE1hcDo6
aXRlcmF0b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKGljLnN0YWNrbWFwSUQoKSk7Ci0gICAgaWYg
KGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKQotICAgICAgICByZXR1cm47IC8vIEl0IHdhcyBvcHRp
bWl6ZWQgb3V0LgotCi0gICAgQ0NhbGxIZWxwZXJzIGZhc3RQYXRoSklUKCZ2bSwgY29kZUJsb2Nr
KTsKLSAgICBWZWN0b3I8U3RhY2tNYXBzOjpSZWNvcmRBbmRJbmRleD4mIHJlY29yZHMgPSBpdGVy
LT52YWx1ZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSByZWNvcmRzLnNpemUoKTsgaS0tOykgewot
ICAgICAgICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gcmVjb3Jkc1tpXS5yZWNvcmQ7Ci0K
LSAgICAgICAgZmFzdFBhdGhKSVQucHJvYmUoaWMucHJvYmVGdW5jdGlvbigpKTsKLSAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIGRvbmUgPSBmYXN0UGF0aEpJVC5qdW1wKCk7Ci0KLSAgICAgICAg
Y2hhciogc3RhcnRPZklDID0gYml0d2lzZV9jYXN0PGNoYXIqPihnZW5lcmF0ZWRGdW5jdGlvbikg
KyByZWNvcmQuaW5zdHJ1Y3Rpb25PZmZzZXQ7Ci0gICAgICAgIGdlbmVyYXRlSW5saW5lSWZQb3Nz
aWJsZU91dE9mTGluZUlmTm90KHN0YXRlLCB2bSwgY29kZUJsb2NrLCBmYXN0UGF0aEpJVCwgc3Rh
cnRPZklDLCBzaXplT2ZJQywgIlByb2JlIiwgWyZdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBD
Q2FsbEhlbHBlcnMmLCBib29sKSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZG9uZSwg
Q29kZUxvY2F0aW9uTGFiZWwoc3RhcnRPZklDICsgc2l6ZU9mSUMpKTsKLSAgICAgICAgfSk7Ci0g
ICAgfQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKE1BU01fUFJPQkUpCi0KLXN0YXRpYyBSZWdpc3Rl
clNldCB1c2VkUmVnaXN0ZXJzRm9yKGNvbnN0IFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQpCi17
Ci0gICAgaWYgKE9wdGlvbnM6OmFzc3VtZUFsbFJlZ3NJbkZUTElDQXJlTGl2ZSgpKQotICAgICAg
ICByZXR1cm4gUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpOwotICAgIHJldHVybiBSZWdpc3Rl
clNldChyZWNvcmQudXNlZFJlZ2lzdGVyU2V0KCksIFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVn
aXN0ZXJzKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsVHlwZT4KLXZvaWQgYWRqdXN0
Q2FsbElDc0ZvclN0YWNrbWFwcyhWZWN0b3I8Q2FsbFR5cGU+JiBjYWxscywgU3RhY2tNYXBzOjpS
ZWNvcmRNYXAmIHJlY29yZE1hcCwgRXhjZXB0aW9uSGFuZGxlck1hbmFnZXImIGV4Y2VwdGlvbkhh
bmRsZXJNYW5hZ2VyKQotewotICAgIC8vIEhhbmRsaW5nIEpTIGNhbGxzIGlzIHdlaXJkOiB3ZSBu
ZWVkIHRvIGVuc3VyZSB0aGF0IHdlIHNvcnQgdGhlbSBieSB0aGUgUEMgaW4gTExWTQotICAgIC8v
IGdlbmVyYXRlZCBjb2RlLiBUaGF0IGltcGxpZXMgZmlyc3QgcHJ1bmluZyB0aGUgb25lcyB0aGF0
IExMVk0gZGlkbid0IGdlbmVyYXRlLgotCi0gICAgVmVjdG9yPENhbGxUeXBlPiBvbGRDYWxsczsK
LSAgICBvbGRDYWxscy5zd2FwKGNhbGxzKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgb2xkQ2FsbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQ2FsbFR5cGUmIGNhbGwgPSBv
bGRDYWxsc1tpXTsKLSAgICAgICAgCi0gICAgICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwOjppdGVy
YXRvciBpdGVyID0gcmVjb3JkTWFwLmZpbmQoY2FsbC5zdGFja21hcElEKCkpOwotICAgICAgICBp
ZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBpdGVyLT52YWx1ZS5zaXplKCk7
ICsraikgewotICAgICAgICAgICAgQ2FsbFR5cGUgY29weSA9IGNhbGw7Ci0gICAgICAgICAgICBj
b3B5Lm1faW5zdHJ1Y3Rpb25PZmZzZXQgPSBpdGVyLT52YWx1ZVtqXS5yZWNvcmQuaW5zdHJ1Y3Rp
b25PZmZzZXQ7Ci0gICAgICAgICAgICBjb3B5LnNldENhbGxTaXRlSW5kZXgoZXhjZXB0aW9uSGFu
ZGxlck1hbmFnZXIucHJvY3VyZUNhbGxTaXRlSW5kZXgoaXRlci0+dmFsdWVbal0uaW5kZXgsIGNv
cHkpKTsKLSAgICAgICAgICAgIGNvcHkuc2V0Q29ycmVzcG9uZGluZ0dlbmVyaWNVbndpbmRPU1JF
eGl0KGV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmdldENhbGxPU1JFeGl0KGl0ZXItPnZhbHVlW2pd
LmluZGV4LCBjb3B5KSk7Ci0KLSAgICAgICAgICAgIGNhbGxzLmFwcGVuZChjb3B5KTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHN0ZDo6c29ydChjYWxscy5iZWdpbigpLCBjYWxscy5lbmQoKSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKLSAgICBTdGF0
ZSYgc3RhdGUsIENvZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlKiBqaXRDb2RlLCBHZW5lcmF0
ZWRGdW5jdGlvbiBnZW5lcmF0ZWRGdW5jdGlvbiwKLSAgICBTdGFja01hcHM6OlJlY29yZE1hcCYg
cmVjb3JkTWFwKQotewotICAgIEdyYXBoJiBncmFwaCA9IHN0YXRlLmdyYXBoOwotICAgIFZNJiB2
bSA9IGdyYXBoLm1fdm07Ci0gICAgU3RhY2tNYXBzJiBzdGFja21hcHMgPSBqaXRDb2RlLT5zdGFj
a21hcHM7Ci0KLSAgICBFeGNlcHRpb25IYW5kbGVyTWFuYWdlciBleGNlcHRpb25IYW5kbGVyTWFu
YWdlcihzdGF0ZSk7Ci0gICAgCi0gICAgaW50IGxvY2Fsc09mZnNldCA9IG9mZnNldE9mU3RhY2tS
ZWdpb24ocmVjb3JkTWFwLCBzdGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQpICsgZ3JhcGgubV9uZXh0
TWFjaGluZUxvY2FsOwotICAgIGludCB2YXJhcmdzU3BpbGxTbG90c09mZnNldCA9IG9mZnNldE9m
U3RhY2tSZWdpb24ocmVjb3JkTWFwLCBzdGF0ZS52YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQp
OwotICAgIGludCBvc3JFeGl0RnJvbUdlbmVyaWNVbndpbmRTdGFja1NwaWxsU2xvdCAgPSBvZmZz
ZXRPZlN0YWNrUmVnaW9uKHJlY29yZE1hcCwgc3RhdGUuZXhjZXB0aW9uSGFuZGxpbmdTcGlsbFNs
b3RTdGFja21hcElEKTsKLSAgICBqaXRDb2RlLT5vc3JFeGl0RnJvbUdlbmVyaWNVbndpbmRTdGFj
a1NwaWxsU2xvdCA9IG9zckV4aXRGcm9tR2VuZXJpY1Vud2luZFN0YWNrU3BpbGxTbG90OwotICAg
IAotICAgIGZvciAodW5zaWduZWQgaSA9IGdyYXBoLm1faW5saW5lVmFyaWFibGVEYXRhLnNpemUo
KTsgaS0tOykgewotICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGdy
YXBoLm1faW5saW5lVmFyaWFibGVEYXRhW2ldLmlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlk
KCkpCi0gICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlciAr
PSBsb2NhbHNPZmZzZXQ7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50
ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOyBhcmd1bWVudC0tID4gMTspIHsK
LSAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzW2FyZ3VtZW50XSA9Ci0gICAg
ICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNbYXJndW1lbnRdLndpdGhMb2Nh
bHNPZmZzZXQobG9jYWxzT2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYg
KGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgewotICAgICAgICAgICAgaW5saW5lQ2Fs
bEZyYW1lLT5jYWxsZWVSZWNvdmVyeSA9Ci0gICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1l
LT5jYWxsZWVSZWNvdmVyeS53aXRoTG9jYWxzT2Zmc2V0KGxvY2Fsc09mZnNldCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoZ3JhcGguaGFzRGVidWdnZXJFbmFibGVkKCkpCi0gICAgICAgICAg
ICBjb2RlQmxvY2stPnNldFNjb3BlUmVnaXN0ZXIoY29kZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkg
KyBsb2NhbHNPZmZzZXQpOwotICAgIH0KLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
c3RhY2tPdmVyZmxvd0V4Y2VwdGlvbjsKLQotICAgIHsKLSAgICAgICAgQ0NhbGxIZWxwZXJzIGNo
ZWNrSklUKCZ2bSwgY29kZUJsb2NrKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEF0IHRoaXMgcG9p
bnQgaXQncyBwZXJmZWN0bHkgZmFpciB0byBqdXN0IGJsb3cgYXdheSBhbGwgc3RhdGUgYW5kIHJl
c3RvcmUgdGhlCi0gICAgICAgIC8vIEpTIEpJVCB2aWV3IG9mIHRoZSB1bml2ZXJzZS4KLSAgICAg
ICAgY2hlY2tKSVQuY29weUNhbGxlZVNhdmVzVG9WTUNhbGxlZVNhdmVzQnVmZmVyKCk7Ci0gICAg
ICAgIGNoZWNrSklULm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgY2hlY2tKSVQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkNhbGwgY2FsbExvb2t1cEV4Y2VwdGlvbkhhbmRsZXIgPSBjaGVja0pJVC5jYWxsKCk7
Ci0gICAgICAgIGNoZWNrSklULmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKLQotICAgICAgICBz
dGFja092ZXJmbG93RXhjZXB0aW9uID0gY2hlY2tKSVQubGFiZWwoKTsKLSAgICAgICAgY2hlY2tK
SVQuY29weUNhbGxlZVNhdmVzVG9WTUNhbGxlZVNhdmVzQnVmZmVyKCk7Ci0gICAgICAgIGNoZWNr
SklULm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJnZtKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKLSAgICAgICAgY2hlY2tKSVQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgY2FsbExvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUgPSBjaGVja0pJVC5j
YWxsKCk7Ci0gICAgICAgIGNoZWNrSklULmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKLQotICAg
ICAgICBhdXRvIGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtCdWZmZXI+KAotICAg
ICAgICAgICAgdm0sIGNoZWNrSklULCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7
Ci0gICAgICAgIGlmIChsaW5rQnVmZmVyLT5kaWRGYWlsVG9BbGxvY2F0ZSgpKSB7Ci0gICAgICAg
ICAgICBzdGF0ZS5hbGxvY2F0aW9uRmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxMb29rdXBFeGNlcHRpb25I
YW5kbGVyLCBGdW5jdGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSk7Ci0gICAgICAgIGxp
bmtCdWZmZXItPmxpbmsoY2FsbExvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUs
IEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUpKTsKLQot
ICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPmhhbmRsZUV4Y2VwdGlvbnNMaW5rQnVmZmVyID0gV1RG
TW92ZShsaW5rQnVmZmVyKTsKLSAgICB9Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5qaXRD
b2RlLT5vc3JFeGl0LnNpemUoKSA9PSAwKTsKLSAgICBIYXNoTWFwPE9TUkV4aXREZXNjcmlwdG9y
KiwgT1NSRXhpdERlc2NyaXB0b3JJbXBsKj4gZ2VuZXJpY1Vud2luZE9TUkV4aXREZXNjcmlwdG9y
czsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUuaml0Q29kZS0+b3NyRXhpdERl
c2NyaXB0b3JzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIE9TUkV4aXREZXNjcmlwdG9yKiBleGl0
RGVzY3JpcHRvciA9ICZzdGF0ZS5qaXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRvcnNbaV07Ci0gICAg
ICAgIGF1dG8gaXRlciA9IHJlY29yZE1hcC5maW5kKGV4aXREZXNjcmlwdG9yLT5tX3N0YWNrbWFw
SUQpOwotICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpIHsKLSAgICAgICAgICAg
IC8vIEl0IHdhcyBvcHRpbWl6ZWQgb3V0LgotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KLQotICAgICAgICBPU1JFeGl0RGVzY3JpcHRvckltcGwmIGV4aXREZXNjcmlwdG9ySW1wbCA9
IHN0YXRlLm9zckV4aXREZXNjcmlwdG9ySW1wbHNbaV07Ci0gICAgICAgIGlmIChleGl0RGVzY3Jp
cHRvckltcGwubV9raW5kID09IEdlbmVyaWNVbndpbmQpCi0gICAgICAgICAgICBnZW5lcmljVW53
aW5kT1NSRXhpdERlc2NyaXB0b3JzLmFkZChleGl0RGVzY3JpcHRvciwgJmV4aXREZXNjcmlwdG9y
SW1wbCk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gZXhpdERlc2NyaXB0b3ItPm1fdmFs
dWVzLnNpemUoKTsgai0tOykKLSAgICAgICAgICAgIGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlc1tq
XSA9IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlc1tqXS53aXRoTG9jYWxzT2Zmc2V0KGxvY2Fsc09m
ZnNldCk7Ci0gICAgICAgIGZvciAoRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG1hdGVy
aWFsaXphdGlvbiA6IGV4aXREZXNjcmlwdG9yLT5tX21hdGVyaWFsaXphdGlvbnMpCi0gICAgICAg
ICAgICBtYXRlcmlhbGl6YXRpb24tPmFjY291bnRGb3JMb2NhbHNPZmZzZXQobG9jYWxzT2Zmc2V0
KTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgaXRlci0+dmFsdWUuc2l6ZSgp
OyBqKyspIHsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1aW50MzJfdCBzdGFja21h
cFJlY29yZEluZGV4ID0gaXRlci0+dmFsdWVbal0uaW5kZXg7Ci0gICAgICAgICAgICAgICAgT1NS
RXhpdCBleGl0KGV4aXREZXNjcmlwdG9yLCBleGl0RGVzY3JpcHRvckltcGwubV9raW5kLCBleGl0
RGVzY3JpcHRvckltcGwsIHN0YWNrbWFwUmVjb3JkSW5kZXgpOwotICAgICAgICAgICAgICAgIHN0
YXRlLmppdENvZGUtPm9zckV4aXQuYXBwZW5kKGV4aXQpOwotICAgICAgICAgICAgICAgIHN0YXRl
LmZpbmFsaXplci0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IHN0YXRlLmppdENvZGUt
Pm9zckV4aXQubGFzdCgpOwotICAgICAgICAgICAgaWYgKGV4aXQud2lsbEFycml2ZUF0RXhpdEZy
b21JbmRpcmVjdEV4Y2VwdGlvbkNoZWNrKCkpIHsKLSAgICAgICAgICAgICAgICBTdGFja01hcHM6
OlJlY29yZCYgcmVjb3JkID0gaXRlci0+dmFsdWVbal0ucmVjb3JkOwotICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGV4aXREZXNjcmlwdG9ySW1wbC5tX3NlbWFudGljQ29kZU9yaWdpbkZv
ckNhbGxGcmFtZUhlYWRlci5pc1NldCgpKTsKLSAgICAgICAgICAgICAgICBDYWxsU2l0ZUluZGV4
IGNhbGxTaXRlSW5kZXggPSBzdGF0ZS5qaXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJ
bmRleChleGl0RGVzY3JpcHRvckltcGwubV9zZW1hbnRpY0NvZGVPcmlnaW5Gb3JDYWxsRnJhbWVI
ZWFkZXIpOwotICAgICAgICAgICAgICAgIGV4aXQubV9leGNlcHRpb25IYW5kbGVyQ2FsbFNpdGVJ
bmRleCA9IGNhbGxTaXRlSW5kZXg7Ci0KLSAgICAgICAgICAgICAgICBPU1JFeGl0KiBjYWxsT3Bl
cmF0aW9uRXhpdCA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgaWYgKGV4aXREZXNjcmlwdG9y
SW1wbC5tX2V4Y2VwdGlvblR5cGUgPT0gRXhjZXB0aW9uVHlwZTo6QmluYXJ5T3BHZW5lcmF0b3Ip
IHsKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuYWRkTmV3Q2Fs
bE9wZXJhdGlvbkV4aXQoaXRlci0+dmFsdWVbal0uaW5kZXgsIHN0YXRlLmppdENvZGUtPm9zckV4
aXQuc2l6ZSgpIC0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb25FeGl0ID0g
JmV4aXQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGV4Y2Vw
dGlvbkhhbmRsZXJNYW5hZ2VyLmFkZE5ld0V4aXQoaXRlci0+dmFsdWVbal0uaW5kZXgsIHN0YXRl
LmppdENvZGUtPm9zckV4aXQuc2l6ZSgpIC0gMSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaWYgKGV4aXREZXNjcmlwdG9ySW1wbC5tX2V4Y2VwdGlvblR5cGUgPT0gRXhjZXB0
aW9uVHlwZTo6R2V0QnlJZCB8fCBleGl0RGVzY3JpcHRvckltcGwubV9leGNlcHRpb25UeXBlID09
IEV4Y2VwdGlvblR5cGU6OlB1dEJ5SWQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgY3Jl
YXRlIHR3byBkaWZmZXJlbnQgT1NSRXhpdHMgZm9yIEdldEJ5SWQgYW5kIFB1dEJ5SWQuCi0gICAg
ICAgICAgICAgICAgICAgIC8vIE9uZSBleGl0IHRoYXQgd2lsbCBiZSBhcnJpdmVkIGF0IGZyb20g
dGhlIGdlbmVyaWNVbndpbmQgZXhjZXB0aW9uIGhhbmRsZXIgcGF0aCwKLSAgICAgICAgICAgICAg
ICAgICAgLy8gYW5kIHRoZSBvdGhlciB0aGF0IHdpbGwgYmUgYXJyaXZlZCBhdCBmcm9tIHRoZSBj
YWxsT3BlcmF0aW9uIGV4Y2VwdGlvbiBoYW5kbGVyIHBhdGguCi0gICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgY29kZSBoZXJlIGdlbmVyYXRlcyB0aGUgc2Vjb25kIGNhbGxPcGVyYXRpb24gdmFy
aWFudC4KLSAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleCA9
IGl0ZXItPnZhbHVlW2pdLmluZGV4OwotICAgICAgICAgICAgICAgICAgICBPU1JFeGl0IGV4aXQo
ZXhpdERlc2NyaXB0b3IsIEV4Y2VwdGlvbkNoZWNrLCBleGl0RGVzY3JpcHRvckltcGwsIHN0YWNr
bWFwUmVjb3JkSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZXhpdERlc2NyaXB0b3JJ
bXBsLm1fZXhjZXB0aW9uVHlwZSA9PSBFeGNlcHRpb25UeXBlOjpHZXRCeUlkKQotICAgICAgICAg
ICAgICAgICAgICAgICAgZXhpdC5tX2V4Y2VwdGlvblR5cGUgPSBFeGNlcHRpb25UeXBlOjpHZXRC
eUlkQ2FsbE9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICAgICAgZXhpdC5tX2V4Y2VwdGlvblR5cGUgPSBFeGNlcHRpb25UeXBlOjpQdXRCeUlk
Q2FsbE9wZXJhdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZUluZGV4ID0gc3RhdGUuaml0Q29kZS0+Y29tbW9uLmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoZXhp
dERlc2NyaXB0b3JJbXBsLm1fc2VtYW50aWNDb2RlT3JpZ2luRm9yQ2FsbEZyYW1lSGVhZGVyKTsK
LSAgICAgICAgICAgICAgICAgICAgZXhpdC5tX2V4Y2VwdGlvbkhhbmRsZXJDYWxsU2l0ZUluZGV4
ID0gY2FsbFNpdGVJbmRleDsKLQotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5qaXRDb2RlLT5v
c3JFeGl0LmFwcGVuZChleGl0KTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuZmluYWxpemVy
LT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwotCi0gICAgICAgICAg
ICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmFkZE5ld0NhbGxPcGVyYXRpb25FeGl0
KGl0ZXItPnZhbHVlW2pdLmluZGV4LCBzdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSAtIDEp
OwotICAgICAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uRXhpdCA9ICZzdGF0ZS5qaXRDb2Rl
LT5vc3JFeGl0Lmxhc3QoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAv
LyBCaW5hcnlPcHMgYW5kIEdldEJ5SWRzIGhhdmUgYW4gaW50ZXJlc3RpbmcgcmVnaXN0ZXIgcHJl
c2VydmF0aW9uIHN0b3J5LAotICAgICAgICAgICAgICAgIC8vIHNlZSBjb21tZW50IGJlbG93IGF0
IEdldEJ5SWQgdG8gcmVhZCBhYm91dCBpdC4KLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAg
ICAgICAgIC8vIFdlIHNldCB0aGUgcmVnaXN0ZXJzIG5lZWRpbmcgc3BpbGxhZ2UgaGVyZSBiZWNh
dXNlIHRoZXkgbmVlZCB0byBiZSBzZXQKLSAgICAgICAgICAgICAgICAvLyBiZWZvcmUgd2UgZ2Vu
ZXJhdGUgT1NSIGV4aXRzIHNvIHRoZSBleGl0IGtub3dzIHRvIGRvIHRoZSBwcm9wZXIgcmVjb3Zl
cnkuCi0gICAgICAgICAgICAgICAgaWYgKGV4aXREZXNjcmlwdG9ySW1wbC5tX2V4Y2VwdGlvblR5
cGUgPT0gRXhjZXB0aW9uVHlwZTo6SlNDYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIENh
bGwgcGF0Y2hwb2ludHMgbWlnaHQgaGF2ZSB2YWx1ZXMgd2Ugd2FudCB0byBkbyB2YWx1ZSByZWNv
dmVyeQotICAgICAgICAgICAgICAgICAgICAvLyBvbiBpbnNpZGUgdm9sYXRpbGUgcmVnaXN0ZXJz
LiBXZSBuZWVkIHRvIGNvbGxlY3QgdGhlIHZvbGF0aWxlCi0gICAgICAgICAgICAgICAgICAgIC8v
IHJlZ2lzdGVycyB3ZSB3YW50IHRvIGRvIHZhbHVlIHJlY292ZXJ5IG9uIGhlcmUgYmVjYXVzZSB0
aGV5IG11c3QKLSAgICAgICAgICAgICAgICAgICAgLy8gYmUgcHJlc2VydmVkIHRvIHRoZSBzdGFj
ayBiZWZvcmUgdGhlIGNhbGwsIHRoYXQgd2F5IHRoZSBPU1IgZXhpdAotICAgICAgICAgICAgICAg
ICAgICAvLyBleGNlcHRpb24gaGFuZGxlciBjYW4gcmVjb3ZlciB0aGVtIGludG8gdGhlIHByb3Bl
ciByZWdpc3RlcnMuCi0gICAgICAgICAgICAgICAgICAgIGV4aXQuZ2F0aGVyUmVnaXN0ZXJzVG9T
cGlsbEZvckNhbGxJZkV4Y2VwdGlvbihzdGFja21hcHMsIHJlY29yZCk7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChleGl0RGVzY3JpcHRvckltcGwubV9leGNlcHRpb25UeXBlID09IEV4Y2Vw
dGlvblR5cGU6OkdldEJ5SWQgfHwgZXhpdERlc2NyaXB0b3JJbXBsLm1fZXhjZXB0aW9uVHlwZSA9
PSBFeGNlcHRpb25UeXBlOjpCaW5hcnlPcEdlbmVyYXRvcikgewotICAgICAgICAgICAgICAgICAg
ICBHUFJSZWcgcmVzdWx0ID0gcmVjb3JkLmxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKTsKLSAgICAg
ICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgcmVnaXN0ZXJzTmVlZGVkRm9yT1NSRXhpdCA9IHJl
Y29yZC51c2VkUmVnaXN0ZXJTZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlZ2lzdGVy
c05lZWRlZEZvck9TUkV4aXQuZ2V0KHJlc3VsdCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBj
YWxsT3BlcmF0aW9uRXhpdC0+cmVnaXN0ZXJzVG9QcmVzZXJ2ZUZvckNhbGxUaGF0TWlnaHRUaHJv
dy5zZXQocmVzdWx0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgRXhpdFRodW5rR2VuZXJhdG9yIGV4aXRUaHVua0dlbmVyYXRvcihzdGF0
ZSk7Ci0gICAgZXhpdFRodW5rR2VuZXJhdG9yLmVtaXRUaHVua3MoKTsKLSAgICBpZiAoZXhpdFRo
dW5rR2VuZXJhdG9yLmRpZFRoaW5ncygpKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRl
LmZpbmFsaXplci0+b3NyRXhpdC5zaXplKCkpOwotICAgICAgICAKLSAgICAgICAgYXV0byBsaW5r
QnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPigKLSAgICAgICAgICAgIHZtLCBl
eGl0VGh1bmtHZW5lcmF0b3IsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLSAg
ICAgICAgaWYgKGxpbmtCdWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKLSAgICAgICAgICAg
IHN0YXRlLmFsbG9jYXRpb25GYWlsZWQgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5maW5hbGl6ZXIt
Pm9zckV4aXQuc2l6ZSgpID09IHN0YXRlLmppdENvZGUtPm9zckV4aXQuc2l6ZSgpKTsKLSAgICAg
ICAgCi0gICAgICAgIGNvZGVCbG9jay0+Y2xlYXJFeGNlcHRpb25IYW5kbGVycygpOwotCi0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gc3Rh
dGUuZmluYWxpemVyLT5vc3JFeGl0W2ldOwotICAgICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IHN0
YXRlLmppdENvZGUtPm9zckV4aXRbaV07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2
ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiSGFu
ZGxpbmcgT1NSIHN0YWNrbWFwICMiLCBleGl0Lm1fZGVzY3JpcHRvci0+bV9zdGFja21hcElELCAi
IGZvciAiLCBleGl0Lm1fY29kZU9yaWdpbiwgIlxuIik7Ci0KLSAgICAgICAgICAgIGluZm8ubV90
aHVua0FkZHJlc3MgPSBsaW5rQnVmZmVyLT5sb2NhdGlvbk9mKGluZm8ubV90aHVua0xhYmVsKTsK
LSAgICAgICAgICAgIGV4aXQubV9wYXRjaGFibGVDb2RlT2Zmc2V0ID0gbGlua0J1ZmZlci0+b2Zm
c2V0T2YoaW5mby5tX3RodW5rSnVtcCk7Ci0KLSAgICAgICAgICAgIGlmIChleGl0LmlzR2VuZXJp
Y1Vud2luZEhhbmRsZXIoKSkgewotICAgICAgICAgICAgICAgIEhhbmRsZXJJbmZvIG5ld0hhbmRs
ZXIgPSBnZW5lcmljVW53aW5kT1NSRXhpdERlc2NyaXB0b3JzLmdldChleGl0Lm1fZGVzY3JpcHRv
ciktPm1fYmFzZWxpbmVFeGNlcHRpb25IYW5kbGVyOwotICAgICAgICAgICAgICAgIG5ld0hhbmRs
ZXIuc3RhcnQgPSBleGl0Lm1fZXhjZXB0aW9uSGFuZGxlckNhbGxTaXRlSW5kZXguYml0cygpOwot
ICAgICAgICAgICAgICAgIG5ld0hhbmRsZXIuZW5kID0gZXhpdC5tX2V4Y2VwdGlvbkhhbmRsZXJD
YWxsU2l0ZUluZGV4LmJpdHMoKSArIDE7Ci0gICAgICAgICAgICAgICAgbmV3SGFuZGxlci5uYXRp
dmVDb2RlID0gaW5mby5tX3RodW5rQWRkcmVzczsKLSAgICAgICAgICAgICAgICBjb2RlQmxvY2st
PmFwcGVuZEV4Y2VwdGlvbkhhbmRsZXIobmV3SGFuZGxlcik7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAg
ICAgICBEdW1wQ29udGV4dCBjb250ZXh0OwotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBF
eGl0IHZhbHVlczogIiwgaW5Db250ZXh0KGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcywgJmNv
bnRleHQpLCAiXG4iKTsKLSAgICAgICAgICAgICAgICBpZiAoIWV4aXQubV9kZXNjcmlwdG9yLT5t
X21hdGVyaWFsaXphdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgICBNYXRlcmlhbGl6YXRpb25zOiBcbiIpOwotICAgICAgICAgICAgICAgICAgICBmb3Ig
KEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiBleGl0Lm1f
ZGVzY3JpcHRvci0+bV9tYXRlcmlhbGl6YXRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgICAgICBNYXRlcmlhbGl6ZSgiLCBwb2ludGVyRHVtcChtYXRlcmlhbGl6YXRp
b24pLCAiKVxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPmV4aXRUaHVua3NMaW5rQnVmZmVy
ID0gV1RGTW92ZShsaW5rQnVmZmVyKTsKLSAgICB9Ci0KLSAgICBpZiAoIXN0YXRlLmdldEJ5SWRz
LmlzRW1wdHkoKQotICAgICAgICB8fCAhc3RhdGUucHV0QnlJZHMuaXNFbXB0eSgpCi0gICAgICAg
IHx8ICFzdGF0ZS5jaGVja0lucy5pc0VtcHR5KCkKLSAgICAgICAgfHwgIXN0YXRlLmJpbmFyeU9w
cy5pc0VtcHR5KCkKLSAgICAgICAgfHwgIXN0YXRlLmxhenlTbG93UGF0aHMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIENDYWxsSGVscGVycyBzbG93UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7Ci0gICAg
ICAgIAotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvblRhcmdldDsKLQot
ICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPENDYWxsSGVscGVyczo6SnVtcExpc3QsIENvZGVMb2Nh
dGlvbkxhYmVsPj4gZXhjZXB0aW9uSnVtcHNUb0xpbms7Ci0gICAgICAgIGF1dG8gYWRkTmV3RXhj
ZXB0aW9uSnVtcElmTmVjZXNzYXJ5ID0gWyZdICh1aW50MzJfdCByZWNvcmRJbmRleCkgewotICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uVGFyZ2V0ID0gZXhjZXB0aW9uSGFu
ZGxlck1hbmFnZXIuY2FsbE9wZXJhdGlvbkV4Y2VwdGlvblRhcmdldChyZWNvcmRJbmRleCk7Ci0g
ICAgICAgICAgICBpZiAoIWV4Y2VwdGlvblRhcmdldCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBleGNlcHRpb25KdW1wc1RvTGluay5hcHBlbmQoCi0gICAgICAg
ICAgICAgICAgc3RkOjptYWtlX3BhaXIoQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCgpLCBleGNlcHRp
b25UYXJnZXQpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9OwotICAgICAg
ICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUuZ2V0QnlJZHMuc2l6ZSgpOyBpLS07
KSB7Ci0gICAgICAgICAgICBHZXRCeUlkRGVzY3JpcHRvciYgZ2V0QnlJZCA9IHN0YXRlLmdldEJ5
SWRzW2ldOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9u
RW5hYmxlZCgpKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIkhhbmRsaW5nIEdldEJ5SWQgc3Rh
Y2ttYXAgIyIsIGdldEJ5SWQuc3RhY2ttYXBJRCgpLCAiXG4iKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgYXV0byBpdGVyID0gcmVjb3JkTWFwLmZpbmQoZ2V0QnlJZC5zdGFja21hcElEKCkp
OwotICAgICAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gSXQgd2FzIG9wdGltaXplZCBvdXQuCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiA9IGdldEJ5SWQuY29kZU9yaWdpbigpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGl0ZXItPnZhbHVlLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
U3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCA9IGl0ZXItPnZhbHVlW2ldLnJlY29yZDsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1c2Vk
UmVnaXN0ZXJzRm9yKHJlY29yZCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
R1BSUmVnIHJlc3VsdCA9IHJlY29yZC5sb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCk7Ci0gICAgICAg
ICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWNvcmQubG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGNvZGVPcmlnaW4sIGV4Y2VwdGlvbkhh
bmRsZXJNYW5hZ2VyLnByb2N1cmVDYWxsU2l0ZUluZGV4KGl0ZXItPnZhbHVlW2ldLmluZGV4LCBj
b2RlT3JpZ2luKSwgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MoYmFzZSksCi0gICAgICAgICAg
ICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdCkpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGJvb2wgYWRkZWRVbmlxdWVFeGNlcHRpb25KdW1wID0gYWRkTmV3RXhjZXB0aW9u
SnVtcElmTmVjZXNzYXJ5KGl0ZXItPnZhbHVlW2ldLmluZGV4KTsKLSAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwgYmVnaW4gPSBzbG93UGF0aEpJVC5sYWJlbCgpOwotICAgICAg
ICAgICAgICAgIC8vIFdlIHRha2UgY2FyZSB0byBhbHdheXMgc3BpbGwgdGhlIHJlc3VsdCB3aGVu
ZXZlciB3ZSBuZWVkIHRvIGRvIHZhbHVlIHJlY292ZXJ5Ci0gICAgICAgICAgICAgICAgLy8gb24g
aXQgaW4gdGhlIE9TUiBleGl0LiBUaGlzIGlzIGJlY2F1c2UgdGhlIGNhbGxPcGVyYXRpb24oLikg
bWFjaGluZXJ5IGRvZXNuJ3QKLSAgICAgICAgICAgICAgICAvLyBldmVyIHNwaWxsIHRoZSByZXN1
bHQgdmFsdWUuIEl0IGFjdHVhbGx5IHRha2VzIGNhcmUgdG8gbmV2ZXIgc3BpbGwgdGhlIHJlc3Vs
dAotICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgaXQgb3ZlcndyaXRlcyBpdCB3aXRoIHRoZSBy
ZXN1bHQgb2YgdGhlIGNhbGwuIEJ1dCwgd2l0aCBleGNlcHRpb25zIGFuZAotICAgICAgICAgICAg
ICAgIC8vIE9TUiBleGl0cywgd2UgbWF5IG5lZWQgdGhlIHJlc3VsdCB2YWx1ZSBwcmlvciB0byB0
aGUgY2FsbCBkdXJpbmcgT1NSIGV4aXQuCi0gICAgICAgICAgICAgICAgLy8gV2UgdGFrZSBjYXJl
IHRvIG1hcmsgaXQgZm9yIHNwaWxsYWdlIG5vdy4KLSAgICAgICAgICAgICAgICAvLwotICAgICAg
ICAgICAgICAgIC8vIFRoaXMgYWxzbyBoYW5kbGVzIGFub3RoZXIgcmVhbGx5IGludGVyZXN0aW5n
IHJlZ2lzdGVyIHByZXNlcnZhdGlvbiBzdG9yeTogCi0gICAgICAgICAgICAgICAgLy8gV2UgbWF5
IGhhdmUgYSBHZXRCeUlkL1NuaXBwZXQgaW5zaWRlIGEgdHJ5IGJsb2NrIHdoZXJlIExMVk0gYXNz
aWducyB0aGUgcmVzdWx0Ci0gICAgICAgICAgICAgICAgLy8gYW5kIHRoZSBiYXNlIHRvIHRoZSBz
YW1lIHJlZ2lzdGVyLiBUaGUgaW5saW5lIGNhY2hlIG1heSBtaXNzIGFuZCB3ZSBtYXkgZW5kIHVw
Ci0gICAgICAgICAgICAgICAgLy8gYXQgdGhpcyBzbG93IHBhdGggY2FsbE9wZXJhdGlvbi4gVGhl
biwgYmVjYXVzZSB0aGUgYmFzZSBhbmQgdGhlIHJlc3VsdCBhcmUgYm90aAotICAgICAgICAgICAg
ICAgIC8vIHRoZSBzYW1lIHJlZ2lzdGVyLCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBDIGNhbGwg
Z2V0cyBzdG9yZWQgaW50byB0aGUgb3JpZ2luYWwKLSAgICAgICAgICAgICAgICAvLyBiYXNlIHJl
Z2lzdGVyLiBJZiB0aGUgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplIHRocm93cywgaXQgd2lsbCBy
ZXR1cm4gInVuZGVmaW5lZCIKLSAgICAgICAgICAgICAgICAvLyBhbmQgd2Ugd2lsbCBiZSBzdHVj
ayB3aXRoICJ1bmRlZmluZWQiIGluIHRoZSBiYXNlIHJlZ2lzdGVyIHRoYXQgd2Ugd291bGQgbGlr
ZSB0byAKLSAgICAgICAgICAgICAgICAvLyBkbyB2YWx1ZSByZWNvdmVyeSBvbi4gV2UgY29tYmF0
IHRoaXMgc2l0dWF0aW9uIGZyb20gZXZlciB0YWtpbmcgcGxhY2UgYnkgZW5zdXJpbmcKLSAgICAg
ICAgICAgICAgICAvLyB3ZSBzcGlsbCB0aGUgb3JpZ2luYWwgYmFzZSB2YWx1ZSAoaS5lIHRoZSBy
ZXN1bHQgcmVnaXN0ZXIpLgotICAgICAgICAgICAgICAgIGlmIChPU1JFeGl0KiBleGl0ID0gZXhj
ZXB0aW9uSGFuZGxlck1hbmFnZXIuY2FsbE9wZXJhdGlvbk9TUkV4aXQoaXRlci0+dmFsdWVbaV0u
aW5kZXgpKQotICAgICAgICAgICAgICAgICAgICBleGl0LT5zcGlsbFJlZ2lzdGVyc1RvU3BpbGxT
bG90KHNsb3dQYXRoSklULCBvc3JFeGl0RnJvbUdlbmVyaWNVbndpbmRTdGFja1NwaWxsU2xvdCk7
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24oCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBzbG93UGF0aEpJ
VCwgY29kZU9yaWdpbiwgYWRkZWRVbmlxdWVFeGNlcHRpb25KdW1wID8gJmV4Y2VwdGlvbkp1bXBz
VG9MaW5rLmxhc3QoKS5maXJzdCA6ICZleGNlcHRpb25UYXJnZXQsCi0gICAgICAgICAgICAgICAg
ICAgIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLAotICAgICAgICAgICAgICAgICAgICBiYXNlLCBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2V0QnlJZC51aWQoKSkpLmNhbGwoKTsKLQotICAgICAg
ICAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoYmVnaW4sIGNhbGwpOwotCi0gICAgICAg
ICAgICAgICAgZ2V0QnlJZC5tX3Nsb3dQYXRoRG9uZS5hcHBlbmQoc2xvd1BhdGhKSVQuanVtcCgp
KTsKLSAgICAgICAgICAgICAgICBnZXRCeUlkLm1fZ2VuZXJhdG9ycy5hcHBlbmQoZ2VuKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gc3RhdGUucHV0QnlJZHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBQdXRCeUlkRGVz
Y3JpcHRvciYgcHV0QnlJZCA9IHN0YXRlLnB1dEJ5SWRzW2ldOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgICAg
IGRhdGFMb2coIkhhbmRsaW5nIFB1dEJ5SWQgc3RhY2ttYXAgIyIsIHB1dEJ5SWQuc3RhY2ttYXBJ
RCgpLCAiXG4iKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXV0byBpdGVyID0gcmVjb3Jk
TWFwLmZpbmQocHV0QnlJZC5zdGFja21hcElEKCkpOwotICAgICAgICAgICAgaWYgKGl0ZXIgPT0g
cmVjb3JkTWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gSXQgd2FzIG9wdGltaXplZCBv
dXQuCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IHB1dEJ5SWQuY29kZU9yaWdp
bigpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZXItPnZhbHVlLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCA9
IGl0ZXItPnZhbHVlW2ldLnJlY29yZDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVyc0ZvcihyZWNvcmQpOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVjb3JkLmxv
Y2F0aW9uc1swXS5kaXJlY3RHUFIoKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgdmFsdWUgPSBy
ZWNvcmQubG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgICAgICAgICBj
b2RlQmxvY2ssIGNvZGVPcmlnaW4sIGV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLnByb2N1cmVDYWxs
U2l0ZUluZGV4KGl0ZXItPnZhbHVlW2ldLmluZGV4LCBjb2RlT3JpZ2luKSwgdXNlZFJlZ2lzdGVy
cywgSlNWYWx1ZVJlZ3MoYmFzZSksCi0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHZh
bHVlKSwgR1BSSW5mbzo6cGF0Y2hwb2ludFNjcmF0Y2hSZWdpc3RlciwgcHV0QnlJZC5lY21hTW9k
ZSgpLCBwdXRCeUlkLnB1dEtpbmQoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgYm9vbCBhZGRlZFVuaXF1ZUV4Y2VwdGlvbkp1bXAgPSBhZGROZXdFeGNlcHRpb25KdW1wSWZO
ZWNlc3NhcnkoaXRlci0+dmFsdWVbaV0uaW5kZXgpOwotCi0gICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIGJlZ2luID0gc2xvd1BhdGhKSVQubGFiZWwoKTsKLQotICAgICAgICAg
ICAgICAgIGlmIChPU1JFeGl0KiBleGl0ID0gZXhjZXB0aW9uSGFuZGxlck1hbmFnZXIuY2FsbE9w
ZXJhdGlvbk9TUkV4aXQoaXRlci0+dmFsdWVbaV0uaW5kZXgpKQotICAgICAgICAgICAgICAgICAg
ICBleGl0LT5zcGlsbFJlZ2lzdGVyc1RvU3BpbGxTbG90KHNsb3dQYXRoSklULCBvc3JFeGl0RnJv
bUdlbmVyaWNVbndpbmRTdGFja1NwaWxsU2xvdCk7Ci0KLSAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbigKLSAgICAgICAgICAgICAgICAgICAg
c3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBjb2RlT3JpZ2luLCBhZGRlZFVuaXF1
ZUV4Y2VwdGlvbkp1bXAgPyAmZXhjZXB0aW9uSnVtcHNUb0xpbmsubGFzdCgpLmZpcnN0IDogJmV4
Y2VwdGlvblRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgZ2VuLnNsb3dQYXRoRnVuY3Rpb24o
KSwgSW52YWxpZEdQUlJlZywKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGdlbi5zdHViSW5mbygpKSwgdmFsdWUsIGJhc2UsCi0gICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihwdXRCeUlkLnVpZCgpKSkuY2FsbCgpOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
YmVnaW4sIGNhbGwpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHB1dEJ5SWQu
bV9zbG93UGF0aERvbmUuYXBwZW5kKHNsb3dQYXRoSklULmp1bXAoKSk7Ci0gICAgICAgICAgICAg
ICAgcHV0QnlJZC5tX2dlbmVyYXRvcnMuYXBwZW5kKGdlbik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5jaGVja0lucy5zaXplKCk7
IGktLTspIHsKLSAgICAgICAgICAgIENoZWNrSW5EZXNjcmlwdG9yJiBjaGVja0luID0gc3RhdGUu
Y2hlY2tJbnNbaV07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2ZXJib3NlQ29tcGls
YXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcgY2hlY2tJ
biBzdGFja21hcCAjIiwgY2hlY2tJbi5zdGFja21hcElEKCksICJcbiIpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmluZChjaGVja0luLnN0YWNrbWFw
SUQoKSk7Ci0gICAgICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgQ29kZU9yaWdp
biBjb2RlT3JpZ2luID0gY2hlY2tJbi5jb2RlT3JpZ2luKCk7Ci0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gaXRlci0+dmFsdWVbaV0ucmVjb3JkOwot
ICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJz
Rm9yKHJlY29yZCk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHJlY29yZC5sb2Nh
dGlvbnNbMF0uZGlyZWN0R1BSKCk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIG9iaiA9IHJlY29y
ZC5sb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCk7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvID0gY29kZUJsb2NrLT5hZGRTdHViSW5mbyhBY2Nlc3NUeXBlOjpJbik7
IAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5jb2RlT3JpZ2luID0gY29kZU9yaWdpbjsKLSAg
ICAgICAgICAgICAgICBzdHViSW5mby0+Y2FsbFNpdGVJbmRleCA9IHN0YXRlLmppdENvZGUtPmNv
bW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4pOwotICAgICAgICAgICAgICAg
IHN0dWJJbmZvLT5wYXRjaC5iYXNlR1BSID0gc3RhdGljX2Nhc3Q8aW50OF90PihvYmopOwotICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC52YWx1ZUdQUiA9IHN0YXRpY19jYXN0PGludDhf
dD4ocmVzdWx0KTsKLSAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2gudXNlZFJlZ2lzdGVy
cyA9IHVzZWRSZWdpc3RlcnM7Ci0KLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgYmVnaW4gPSBzbG93UGF0aEpJVC5sYWJlbCgpOwotCi0gICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgc2xvd0NhbGwgPSBjYWxsT3BlcmF0aW9uKAotICAgICAgICAgICAgICAg
ICAgICBzdGF0ZSwgdXNlZFJlZ2lzdGVycywgc2xvd1BhdGhKSVQsIGNvZGVPcmlnaW4sICZleGNl
cHRpb25UYXJnZXQsCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkluT3B0aW1pemUsIHJl
c3VsdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0dWJJbmZvKSwgb2JqLAotICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2hlY2tJbi51aWQoKSkp
LmNhbGwoKTsKLQotICAgICAgICAgICAgICAgIGNoZWNrSW4ubV9zbG93UGF0aERvbmUuYXBwZW5k
KHNsb3dQYXRoSklULmp1bXAoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Y2hlY2tJbi5tX2dlbmVyYXRvcnMuYXBwZW5kKENoZWNrSW5HZW5lcmF0b3Ioc3R1YkluZm8sIHNs
b3dDYWxsLCBiZWdpbikpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IHN0YXRlLmJpbmFyeU9wcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAg
IEJpbmFyeU9wRGVzY3JpcHRvciYgYmluYXJ5T3AgPSBzdGF0ZS5iaW5hcnlPcHNbaV07Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCi0g
ICAgICAgICAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcgIiwgYmluYXJ5T3AubmFtZSgpLCAiIHN0
YWNrbWFwICMiLCBiaW5hcnlPcC5zdGFja21hcElEKCksICJcbiIpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmluZChiaW5hcnlPcC5zdGFja21hcElE
KCkpOwotICAgICAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOyAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gYmluYXJ5T3AuY29kZU9yaWdpbigp
OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZXItPnZhbHVlLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCA9IGl0
ZXItPnZhbHVlW2ldLnJlY29yZDsKLSAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVn
aXN0ZXJzID0gdXNlZFJlZ2lzdGVyc0ZvcihyZWNvcmQpOwotCi0gICAgICAgICAgICAgICAgR1BS
UmVnIHJlc3VsdCA9IHJlY29yZC5sb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCk7Ci0gICAgICAgICAg
ICAgICAgR1BSUmVnIGxlZnQgPSByZWNvcmQubG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwotICAg
ICAgICAgICAgICAgIEdQUlJlZyByaWdodCA9IHJlY29yZC5sb2NhdGlvbnNbMl0uZGlyZWN0R1BS
KCk7Ci0KLSAgICAgICAgICAgICAgICBiaW5hcnlPcC5tX3Nsb3dQYXRoU3RhcnRzLmFwcGVuZChz
bG93UGF0aEpJVC5sYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBib29sIGFkZGVkVW5pcXVlRXhj
ZXB0aW9uSnVtcCA9IGFkZE5ld0V4Y2VwdGlvbkp1bXBJZk5lY2Vzc2FyeShpdGVyLT52YWx1ZVtp
XS5pbmRleCk7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBzaXR1YXRpb24gaGFzIGEgcmVhbGx5
IGludGVyZXN0aW5nIHJlZ2lzdGVyIHByZXNlcnZhdGlvbiBzdG9yeS4KLSAgICAgICAgICAgICAg
ICAvLyBTZWUgY29tbWVudCBhYm92ZSBmb3IgR2V0QnlJZHMuCi0gICAgICAgICAgICAgICAgaWYg
KE9TUkV4aXQqIGV4aXQgPSBleGNlcHRpb25IYW5kbGVyTWFuYWdlci5jYWxsT3BlcmF0aW9uT1NS
RXhpdChpdGVyLT52YWx1ZVtpXS5pbmRleCkpCi0gICAgICAgICAgICAgICAgICAgIGV4aXQtPnNw
aWxsUmVnaXN0ZXJzVG9TcGlsbFNsb3Qoc2xvd1BhdGhKSVQsIG9zckV4aXRGcm9tR2VuZXJpY1Vu
d2luZFN0YWNrU3BpbGxTbG90KTsKLQotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oc3Rh
dGUsIHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBjb2RlT3JpZ2luLCBhZGRlZFVuaXF1ZUV4
Y2VwdGlvbkp1bXAgPyAmZXhjZXB0aW9uSnVtcHNUb0xpbmsubGFzdCgpLmZpcnN0IDogJmV4Y2Vw
dGlvblRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgYmluYXJ5T3Auc2xvd1BhdGhGdW5jdGlv
bigpLCByZXN1bHQsIGxlZnQsIHJpZ2h0KS5jYWxsKCk7Ci0KLSAgICAgICAgICAgICAgICBiaW5h
cnlPcC5tX3Nsb3dQYXRoRG9uZS5hcHBlbmQoc2xvd1BhdGhKSVQuanVtcCgpKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmxhenlT
bG93UGF0aHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBMYXp5U2xvd1BhdGhEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yID0gc3RhdGUubGF6eVNsb3dQYXRoc1tpXTsKLQotICAgICAgICAgICAg
aWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgICAgICAgICBkYXRhTG9n
KCJIYW5kbGluZyBsYXp5U2xvd1BhdGggc3RhY2ttYXAgIyIsIGRlc2NyaXB0b3Iuc3RhY2ttYXBJ
RCgpLCAiXG4iKTsKLQotICAgICAgICAgICAgYXV0byBpdGVyID0gcmVjb3JkTWFwLmZpbmQoZGVz
Y3JpcHRvci5zdGFja21hcElEKCkpOwotICAgICAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFw
LmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gSXQgd2FzIG9wdGltaXplZCBvdXQuCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4gPSBkZXNjcmlwdG9yLmNvZGVPcmlnaW4oKTsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVyLT52YWx1ZS5zaXplKCk7ICsraSkgewotICAgICAg
ICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBpdGVyLT52YWx1ZVtpXS5yZWNv
cmQ7Ci0gICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdp
c3RlcnNGb3IocmVjb3JkKTsKLSAgICAgICAgICAgICAgICBjaGFyKiBzdGFydE9mSUMgPQotICAg
ICAgICAgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSAr
IHJlY29yZC5pbnN0cnVjdGlvbk9mZnNldDsKLSAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbCBwYXRjaHBvaW50KChNYWNyb0Fzc2VtYmxlckNvZGVQdHIoc3RhcnRPZklDKSkpOwotICAg
ICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvblRhcmdldCA9IGV4Y2VwdGlv
bkhhbmRsZXJNYW5hZ2VyLmxhenlTbG93UGF0aEV4Y2VwdGlvblRhcmdldChpdGVyLT52YWx1ZVtp
XS5pbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFleGNlcHRpb25UYXJnZXQpCi0gICAgICAg
ICAgICAgICAgICAgIGV4Y2VwdGlvblRhcmdldCA9IHN0YXRlLmZpbmFsaXplci0+aGFuZGxlRXhj
ZXB0aW9uc0xpbmtCdWZmZXItPmVudHJ5cG9pbnQoKTsKLQotICAgICAgICAgICAgICAgIFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvciBzY3JhdGNoQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOwotICAg
ICAgICAgICAgICAgIEdQUlJlZyBuZXdaZXJvID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgICAg
ICAgICBWZWN0b3I8TG9jYXRpb24+IGxvY2F0aW9uczsKLSAgICAgICAgICAgICAgICBmb3IgKGF1
dG8gc3RhY2ttYXBMb2NhdGlvbiA6IHJlY29yZC5sb2NhdGlvbnMpIHsKLSAgICAgICAgICAgICAg
ICAgICAgRlRMOjpMb2NhdGlvbiBsb2NhdGlvbiA9IExvY2F0aW9uOjpmb3JTdGFja21hcHMoJnN0
YWNrbWFwcywgc3RhY2ttYXBMb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc0FS
TTY0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIExMVk0gcHJvdmVzIHRoYXQg
c29tZXRoaW5nIGlzIHplcm8sIGl0IG1heSBwYXNzIHVzIHRoZSB6ZXJvIHJlZ2lzdGVyIChha2Es
IHRoZSBzdGFjayBwb2ludGVyKS4gT3VyIGFzc2VtYmxlcgotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gaXNuJ3QgcHJlcGFyZWQgdG8gaGFuZGxlIHRoaXMgd2VsbC4gV2UgbmVlZCB0byBtb3Zl
IGl0IGludG8gYSBkaWZmZXJlbnQgcmVnaXN0ZXIgaWYgc3VjaCBhIGNhc2UgYXJpc2VzLgotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uLmlzR1BSKCkgJiYgbG9jYXRpb24uZ3By
KCkgPT0gTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG5ld1plcm8gPT0gSW52YWxpZEdQUlJlZykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdaZXJvID0gc2NyYXRjaEFsbG9jYXRvci5hbGxv
Y2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZFJl
Z2lzdGVycy5zZXQobmV3WmVybyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gRlRMOjpMb2NhdGlvbjo6Zm9yUmVn
aXN0ZXIoRFdBUkZSZWdpc3RlcihzdGF0aWNfY2FzdDx1aW50MTZfdD4obmV3WmVybykpLCAwKTsg
Ly8gRFdBUkYgR1BScyBmb3IgYXJtNjQgYXJlIHNlbnNpYmx5IG51bWJlcmVkLgotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGxvY2F0aW9ucy5hcHBlbmQobG9jYXRpb24pOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxMYXp5U2xvd1BhdGg+IGxhenlTbG93UGF0aCA9
IHN0ZDo6bWFrZV91bmlxdWU8TGF6eVNsb3dQYXRoPigKLSAgICAgICAgICAgICAgICAgICAgcGF0
Y2hwb2ludCwgZXhjZXB0aW9uVGFyZ2V0LCB1c2VkUmVnaXN0ZXJzLCBleGNlcHRpb25IYW5kbGVy
TWFuYWdlci5wcm9jdXJlQ2FsbFNpdGVJbmRleChpdGVyLT52YWx1ZVtpXS5pbmRleCwgY29kZU9y
aWdpbiksCi0gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IubV9saW5rZXItPnJ1bihsb2Nh
dGlvbnMpLCBuZXdaZXJvLCBzY3JhdGNoQWxsb2NhdG9yKTsKLQotICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6TGFiZWwgYmVnaW4gPSBzbG93UGF0aEpJVC5sYWJlbCgpOwotCi0gICAgICAg
ICAgICAgICAgc2xvd1BhdGhKSVQucHVzaFRvU2F2ZUltbWVkaWF0ZVdpdGhvdXRUb3VjaGluZ1Jl
Z2lzdGVycygKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
c3RhdGUuaml0Q29kZS0+bGF6eVNsb3dQYXRocy5zaXplKCkpKTsKLSAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdG9ySnVtcCA9IHNsb3dQYXRoSklULmp1bXAoKTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLm1fZ2VuZXJhdG9ycy5h
cHBlbmQoc3RkOjptYWtlX3R1cGxlKGxhenlTbG93UGF0aC5nZXQoKSwgYmVnaW4pKTsKLQotICAg
ICAgICAgICAgICAgIHN0YXRlLmppdENvZGUtPmxhenlTbG93UGF0aHMuYXBwZW5kKFdURk1vdmUo
bGF6eVNsb3dQYXRoKSk7Ci0gICAgICAgICAgICAgICAgc3RhdGUuZmluYWxpemVyLT5sYXp5U2xv
d1BhdGhHZW5lcmF0b3JKdW1wcy5hcHBlbmQoZ2VuZXJhdG9ySnVtcCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGV4Y2VwdGlvblRhcmdldC5saW5rKCZzbG93
UGF0aEpJVCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGV4Y2VwdGlvbkp1bXAgPSBz
bG93UGF0aEpJVC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPnNp
ZGVDb2RlTGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8TGlua0J1ZmZlcj4odm0sIHNsb3dQ
YXRoSklULCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgICAgIGlmIChz
dGF0ZS5maW5hbGl6ZXItPnNpZGVDb2RlTGlua0J1ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUoKSkg
ewotICAgICAgICAgICAgc3RhdGUuYWxsb2NhdGlvbkZhaWxlZCA9IHRydWU7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGUuZmluYWxpemVyLT5zaWRlQ29kZUxp
bmtCdWZmZXItPmxpbmsoCi0gICAgICAgICAgICBleGNlcHRpb25KdW1wLCBzdGF0ZS5maW5hbGl6
ZXItPmhhbmRsZUV4Y2VwdGlvbnNMaW5rQnVmZmVyLT5lbnRyeXBvaW50KCkpOwotICAgICAgICAK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUuZ2V0QnlJZHMuc2l6ZSgpOyBpLS07KSB7
Ci0gICAgICAgICAgICBnZW5lcmF0ZUlDRmFzdFBhdGgoCi0gICAgICAgICAgICAgICAgc3RhdGUs
IGNvZGVCbG9jaywgZ2VuZXJhdGVkRnVuY3Rpb24sIHJlY29yZE1hcCwgc3RhdGUuZ2V0QnlJZHNb
aV0sCi0gICAgICAgICAgICAgICAgc2l6ZU9mR2V0QnlJZCgpLCAiR2V0QnlJZCIpOwotICAgICAg
ICB9Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLnB1dEJ5SWRzLnNpemUoKTsgaS0t
OykgewotICAgICAgICAgICAgZ2VuZXJhdGVJQ0Zhc3RQYXRoKAotICAgICAgICAgICAgICAgIHN0
YXRlLCBjb2RlQmxvY2ssIGdlbmVyYXRlZEZ1bmN0aW9uLCByZWNvcmRNYXAsIHN0YXRlLnB1dEJ5
SWRzW2ldLAotICAgICAgICAgICAgICAgIHNpemVPZlB1dEJ5SWQoKSwgIlB1dEJ5SWQiKTsKLSAg
ICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5jaGVja0lucy5zaXplKCk7
IGktLTspIHsKLSAgICAgICAgICAgIGdlbmVyYXRlQ2hlY2tJbklDRmFzdFBhdGgoCi0gICAgICAg
ICAgICAgICAgc3RhdGUsIGNvZGVCbG9jaywgZ2VuZXJhdGVkRnVuY3Rpb24sIHJlY29yZE1hcCwg
c3RhdGUuY2hlY2tJbnNbaV0sCi0gICAgICAgICAgICAgICAgc2l6ZU9mSW4oKSk7IAotICAgICAg
ICB9Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmJpbmFyeU9wcy5zaXplKCk7IGkt
LTspIHsKLSAgICAgICAgICAgIEJpbmFyeU9wRGVzY3JpcHRvciYgYmluYXJ5T3AgPSBzdGF0ZS5i
aW5hcnlPcHNbaV07Ci0gICAgICAgICAgICBnZW5lcmF0ZUJpbmFyeU9wSUNGYXN0UGF0aChzdGF0
ZSwgY29kZUJsb2NrLCBnZW5lcmF0ZWRGdW5jdGlvbiwgcmVjb3JkTWFwLCBiaW5hcnlPcCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUubGF6eVNsb3dQYXRocy5z
aXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIExhenlTbG93UGF0aERlc2NyaXB0b3ImIGxhenlT
bG93UGF0aCA9IHN0YXRlLmxhenlTbG93UGF0aHNbaV07Ci0gICAgICAgICAgICBmb3IgKGF1dG8m
IHR1cGxlIDogbGF6eVNsb3dQYXRoLm1fZ2VuZXJhdG9ycykgewotICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAoCi0gICAgICAgICAgICAgICAgICAgIHN0ZDo6
Z2V0PDA+KHR1cGxlKS0+cGF0Y2hwb2ludCgpLAotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5m
aW5hbGl6ZXItPnNpZGVDb2RlTGlua0J1ZmZlci0+bG9jYXRpb25PZihzdGQ6OmdldDwxPih0dXBs
ZSkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2lmIEVOQUJMRShNQVNNX1BST0JFKQot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5wcm9iZXMuc2l6ZSgpOyBpLS07KSB7Ci0g
ICAgICAgICAgICBQcm9iZURlc2NyaXB0b3ImIHByb2JlID0gc3RhdGUucHJvYmVzW2ldOwotICAg
ICAgICAgICAgZ2VuZXJhdGVQcm9iZShzdGF0ZSwgY29kZUJsb2NrLCBnZW5lcmF0ZWRGdW5jdGlv
biwgcmVjb3JkTWFwLCBwcm9iZSk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBmb3IgKGF1
dG8mIHBhaXIgOiBleGNlcHRpb25KdW1wc1RvTGluaykKLSAgICAgICAgICAgIHN0YXRlLmZpbmFs
aXplci0+c2lkZUNvZGVMaW5rQnVmZmVyLT5saW5rKHBhaXIuZmlyc3QsIHBhaXIuc2Vjb25kKTsK
LSAgICB9Ci0gICAgCi0gICAgYWRqdXN0Q2FsbElDc0ZvclN0YWNrbWFwcyhzdGF0ZS5qc0NhbGxz
LCByZWNvcmRNYXAsIGV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyKTsKLSAgICAKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSBzdGF0ZS5qc0NhbGxzLnNpemUoKTsgaS0tOykgewotICAgICAgICBKU0NhbGwm
IGNhbGwgPSBzdGF0ZS5qc0NhbGxzW2ldOwotCi0gICAgICAgIENDYWxsSGVscGVycyBmYXN0UGF0
aEpJVCgmdm0sIGNvZGVCbG9jayk7Ci0gICAgICAgIGNhbGwuZW1pdChmYXN0UGF0aEpJVCwgc3Rh
dGUsIG9zckV4aXRGcm9tR2VuZXJpY1Vud2luZFN0YWNrU3BpbGxTbG90KTsKLQotICAgICAgICBj
aGFyKiBzdGFydE9mSUMgPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSAr
IGNhbGwubV9pbnN0cnVjdGlvbk9mZnNldDsKLQotICAgICAgICBnZW5lcmF0ZUlubGluZUlmUG9z
c2libGVPdXRPZkxpbmVJZk5vdChzdGF0ZSwgdm0sIGNvZGVCbG9jaywgZmFzdFBhdGhKSVQsIHN0
YXJ0T2ZJQywgc2l6ZU9mQ2FsbCgpLCAiSlNDYWxsIiwgWyZdIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyLCBDQ2FsbEhlbHBlcnMmLCBib29sKSB7Ci0gICAgICAgICAgICBjYWxsLmxpbmsodm0sIGxp
bmtCdWZmZXIpOwotICAgICAgICB9KTsKLSAgICB9Ci0gICAgCi0gICAgYWRqdXN0Q2FsbElDc0Zv
clN0YWNrbWFwcyhzdGF0ZS5qc0NhbGxWYXJhcmdzZXMsIHJlY29yZE1hcCwgZXhjZXB0aW9uSGFu
ZGxlck1hbmFnZXIpOwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmpzQ2FsbFZh
cmFyZ3Nlcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgSlNDYWxsVmFyYXJncyYgY2FsbCA9IHN0
YXRlLmpzQ2FsbFZhcmFyZ3Nlc1tpXTsKLSAgICAgICAgCi0gICAgICAgIENDYWxsSGVscGVycyBm
YXN0UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7Ci0gICAgICAgIGNhbGwuZW1pdChmYXN0UGF0aEpJ
VCwgc3RhdGUsIHZhcmFyZ3NTcGlsbFNsb3RzT2Zmc2V0LCBvc3JFeGl0RnJvbUdlbmVyaWNVbndp
bmRTdGFja1NwaWxsU2xvdCk7Ci0KLSAgICAgICAgY2hhciogc3RhcnRPZklDID0gYml0d2lzZV9j
YXN0PGNoYXIqPihnZW5lcmF0ZWRGdW5jdGlvbikgKyBjYWxsLm1faW5zdHJ1Y3Rpb25PZmZzZXQ7
Ci0gICAgICAgIHNpemVfdCBzaXplT2ZJQyA9IHNpemVPZklDRm9yKGNhbGwubm9kZSgpKTsKLQot
ICAgICAgICBnZW5lcmF0ZUlubGluZUlmUG9zc2libGVPdXRPZkxpbmVJZk5vdChzdGF0ZSwgdm0s
IGNvZGVCbG9jaywgZmFzdFBhdGhKSVQsIHN0YXJ0T2ZJQywgc2l6ZU9mSUMsICJ2YXJhcmdzIGNh
bGwiLCBbJl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIENDYWxsSGVscGVycyYsIGJvb2wpIHsK
LSAgICAgICAgICAgIGNhbGwubGluayh2bSwgbGlua0J1ZmZlciwgc3RhdGUuZmluYWxpemVyLT5o
YW5kbGVFeGNlcHRpb25zTGlua0J1ZmZlci0+ZW50cnlwb2ludCgpKTsKLSAgICAgICAgfSk7Ci0g
ICAgfQotCi0gICAgYWRqdXN0Q2FsbElDc0ZvclN0YWNrbWFwcyhzdGF0ZS5qc1RhaWxDYWxscywg
cmVjb3JkTWFwLCBleGNlcHRpb25IYW5kbGVyTWFuYWdlcik7Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSBzdGF0ZS5qc1RhaWxDYWxscy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgSlNUYWlsQ2Fs
bCYgY2FsbCA9IHN0YXRlLmpzVGFpbENhbGxzW2ldOwotCi0gICAgICAgIENDYWxsSGVscGVycyBm
YXN0UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7Ci0gICAgICAgIGNhbGwuZW1pdCgqc3RhdGUuaml0
Q29kZS5nZXQoKSwgZmFzdFBhdGhKSVQpOwotCi0gICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9IGJp
dHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24pICsgY2FsbC5tX2luc3RydWN0aW9u
T2Zmc2V0OwotICAgICAgICBzaXplX3Qgc2l6ZU9mSUMgPSBjYWxsLmVzdGltYXRlZFNpemUoKTsK
LQotICAgICAgICBnZW5lcmF0ZUlubGluZUlmUG9zc2libGVPdXRPZkxpbmVJZk5vdChzdGF0ZSwg
dm0sIGNvZGVCbG9jaywgZmFzdFBhdGhKSVQsIHN0YXJ0T2ZJQywgc2l6ZU9mSUMsICJ0YWlsIGNh
bGwiLCBbJl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIENDYWxsSGVscGVycyYsIGJvb2wpIHsK
LSAgICAgICAgICAgIGNhbGwubGluayh2bSwgbGlua0J1ZmZlcik7Ci0gICAgICAgIH0pOwotICAg
IH0KLSAgICAKLSAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmluZChzdGF0ZS5oYW5kbGVTdGFj
a092ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJRCk7Ci0gICAgLy8gSXQncyBzb3J0IG9mIHJlbW90
ZWx5IHBvc3NpYmxlIHRoYXQgd2Ugd29uJ3QgaGF2ZSBhbiBpbi1iYW5kIGV4Y2VwdGlvbiBoYW5k
bGluZwotICAgIC8vIHBhdGgsIGZvciBzb21lIGtpbmRzIG9mIGZ1bmN0aW9ucy4KLSAgICBpZiAo
aXRlciAhPSByZWNvcmRNYXAuZW5kKCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaXRl
ci0+dmFsdWUuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBTdGFja01hcHM6OlJlY29yZCYg
cmVjb3JkID0gaXRlci0+dmFsdWVbaV0ucmVjb3JkOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbCBzb3VyY2UgPSBDb2RlTG9jYXRpb25MYWJlbCgKLSAgICAgICAg
ICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIHJlY29yZC5p
bnN0cnVjdGlvbk9mZnNldCk7Ci0KLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YWNrT3Zl
cmZsb3dFeGNlcHRpb24uaXNTZXQoKSk7Ci0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBsYWNlV2l0aEp1bXAoc291cmNlLCBzdGF0ZS5maW5hbGl6ZXItPmhhbmRsZUV4Y2VwdGlvbnNM
aW5rQnVmZmVyLT5sb2NhdGlvbk9mKHN0YWNrT3ZlcmZsb3dFeGNlcHRpb24pKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICBpdGVyID0gcmVjb3JkTWFwLmZpbmQoc3RhdGUuaGFuZGxlRXhj
ZXB0aW9uU3RhY2ttYXBJRCk7Ci0gICAgLy8gSXQncyBzb3J0IG9mIHJlbW90ZWx5IHBvc3NpYmxl
IHRoYXQgd2Ugd29uJ3QgaGF2ZSBhbiBpbi1iYW5kIGV4Y2VwdGlvbiBoYW5kbGluZwotICAgIC8v
IHBhdGgsIGZvciBzb21lIGtpbmRzIG9mIGZ1bmN0aW9ucy4KLSAgICBpZiAoaXRlciAhPSByZWNv
cmRNYXAuZW5kKCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaXRlci0+dmFsdWUuc2l6
ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gaXRl
ci0+dmFsdWVbaV0ucmVjb3JkOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbCBzb3VyY2UgPSBDb2RlTG9jYXRpb25MYWJlbCgKLSAgICAgICAgICAgICAgICBiaXR3
aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIHJlY29yZC5pbnN0cnVjdGlvbk9m
ZnNldCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNl
V2l0aEp1bXAoc291cmNlLCBzdGF0ZS5maW5hbGl6ZXItPmhhbmRsZUV4Y2VwdGlvbnNMaW5rQnVm
ZmVyLT5lbnRyeXBvaW50KCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGZvciAodW5z
aWduZWQgZXhpdEluZGV4ID0gMDsgZXhpdEluZGV4IDwgaml0Q29kZS0+b3NyRXhpdC5zaXplKCk7
ICsrZXhpdEluZGV4KSB7Ci0gICAgICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBz
dGF0ZS5maW5hbGl6ZXItPm9zckV4aXRbZXhpdEluZGV4XTsKLSAgICAgICAgT1NSRXhpdCYgZXhp
dCA9IGppdENvZGUtPm9zckV4aXRbZXhpdEluZGV4XTsKLSAgICAgICAgVmVjdG9yPGNvbnN0IHZv
aWQqPiBjb2RlQWRkcmVzc2VzOwotCi0gICAgICAgIGlmIChleGl0LndpbGxBcnJpdmVBdEV4aXRG
cm9tSW5kaXJlY3RFeGNlcHRpb25DaGVjaygpKSAvLyBUaGlzIGp1bXAgZG9lc24ndCBoYXBwZW4g
ZGlyZWN0bHkgZnJvbSBhIHBhdGNocG9pbnQvc3RhY2ttYXAgd2UgY29tcGlsZS4gSXQgaGFwcGVu
cyBpbmRpcmVjdGx5IHRocm91Z2ggYW4gZXhjZXB0aW9uIGNoZWNrIHNvbWV3aGVyZS4KLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJl
Y29yZCA9IGppdENvZGUtPnN0YWNrbWFwcy5yZWNvcmRzW2V4aXQubV9zdGFja21hcFJlY29yZElu
ZGV4XTsKLSAgICAgICAgCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHNvdXJjZSA9IENvZGVM
b2NhdGlvbkxhYmVsKAotICAgICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPihnZW5lcmF0ZWRG
dW5jdGlvbikgKyByZWNvcmQuaW5zdHJ1Y3Rpb25PZmZzZXQpOwotICAgICAgICAKLSAgICAgICAg
Y29kZUFkZHJlc3Nlcy5hcHBlbmQoYml0d2lzZV9jYXN0PGNoYXIqPihnZW5lcmF0ZWRGdW5jdGlv
bikgKyByZWNvcmQuaW5zdHJ1Y3Rpb25PZmZzZXQgKyBNYWNyb0Fzc2VtYmxlcjo6bWF4SnVtcFJl
cGxhY2VtZW50U2l6ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChleGl0Lm1fZGVzY3JpcHRv
ci0+bV9pc0ludmFsaWRhdGlvblBvaW50KQotICAgICAgICAgICAgaml0Q29kZS0+Y29tbW9uLmp1
bXBSZXBsYWNlbWVudHMuYXBwZW5kKEp1bXBSZXBsYWNlbWVudChzb3VyY2UsIGluZm8ubV90aHVu
a0FkZHJlc3MpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGxhY2VXaXRoSnVtcChzb3VyY2UsIGluZm8ubV90aHVua0FkZHJlc3MpOwotICAgICAgICAKLSAg
ICAgICAgaWYgKGdyYXBoLmNvbXBpbGF0aW9uKCkpCi0gICAgICAgICAgICBncmFwaC5jb21waWxh
dGlvbigpLT5hZGRPU1JFeGl0U2l0ZShjb2RlQWRkcmVzc2VzKTsKLSAgICB9Ci19Ci0KLXZvaWQg
Y29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmVzdWx0JiBzYWZlcG9pbnRSZXN1bHQp
Ci17Ci0gICAgY2hhciogZXJyb3IgPSAwOwotICAgIAotICAgIHsKLSAgICAgICAgR3JhcGhTYWZl
cG9pbnQgc2FmZXBvaW50KHN0YXRlLmdyYXBoLCBzYWZlcG9pbnRSZXN1bHQpOwotICAgICAgICAK
LSAgICAgICAgTExWTU1DSklUQ29tcGlsZXJPcHRpb25zIG9wdGlvbnM7Ci0gICAgICAgIGxsdm0t
PkluaXRpYWxpemVNQ0pJVENvbXBpbGVyT3B0aW9ucygmb3B0aW9ucywgc2l6ZW9mKG9wdGlvbnMp
KTsKLSAgICAgICAgb3B0aW9ucy5PcHRMZXZlbCA9IE9wdGlvbnM6Omxsdm1CYWNrZW5kT3B0aW1p
emF0aW9uTGV2ZWwoKTsKLSAgICAgICAgb3B0aW9ucy5Ob0ZyYW1lUG9pbnRlckVsaW0gPSB0cnVl
OwotICAgICAgICBpZiAoT3B0aW9uczo6dXNlTExWTVNtYWxsQ29kZU1vZGVsKCkpCi0gICAgICAg
ICAgICBvcHRpb25zLkNvZGVNb2RlbCA9IExMVk1Db2RlTW9kZWxTbWFsbDsKLSAgICAgICAgb3B0
aW9ucy5FbmFibGVGYXN0SVNlbCA9IGVuYWJsZUxMVk1GYXN0SVNlbDsKLSAgICAgICAgb3B0aW9u
cy5NQ0pNTSA9IGxsdm0tPkNyZWF0ZVNpbXBsZU1DSklUTWVtb3J5TWFuYWdlcigKLSAgICAgICAg
ICAgICZzdGF0ZSwgbW1BbGxvY2F0ZUNvZGVTZWN0aW9uLCBtbUFsbG9jYXRlRGF0YVNlY3Rpb24s
IG1tQXBwbHlQZXJtaXNzaW9ucywgbW1EZXN0cm95KTsKLSAgICAKLSAgICAgICAgTExWTUV4ZWN1
dGlvbkVuZ2luZVJlZiBlbmdpbmU7Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNBUk02NCgpKSB7
Ci0jaWYgT1MoREFSV0lOKQotICAgICAgICAgICAgbGx2bS0+U2V0VGFyZ2V0KHN0YXRlLm1vZHVs
ZSwgImFybTY0LWFwcGxlLWlvcyIpOwotI2VsaWYgT1MoTElOVVgpCi0gICAgICAgICAgICBsbHZt
LT5TZXRUYXJnZXQoc3RhdGUubW9kdWxlLCAiYWFyY2g2NC1saW51eC1nbnUiKTsKLSNlbHNlCi0j
ZXJyb3IgIlVucmVjb2duaXplZCBPUyIKLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGxsdm0tPkNyZWF0ZU1DSklUQ29tcGlsZXJGb3JNb2R1bGUoJmVuZ2luZSwgc3RhdGUubW9kdWxl
LCAmb3B0aW9ucywgc2l6ZW9mKG9wdGlvbnMpLCAmZXJyb3IpKSB7Ci0gICAgICAgICAgICBkYXRh
TG9nKCJGQVRBTDogQ291bGQgbm90IGNyZWF0ZSBMTFZNIGV4ZWN1dGlvbiBlbmdpbmU6ICIsIGVy
cm9yLCAiXG4iKTsKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Ugbm8gbG9uZ2VyIG93biB0aGUgbW9kdWxlLgotICAg
ICAgICBMTW9kdWxlIG1vZHVsZSA9IHN0YXRlLm1vZHVsZTsKLSAgICAgICAgc3RhdGUubW9kdWxl
ID0gbnVsbHB0cjsKLQotICAgICAgICAvLyBUaGUgZGF0YSBsYXlvdXQgYWxzbyBoYXMgdG8gYmUg
c2V0IGluIHRoZSBtb2R1bGUuIEdldCB0aGUgZGF0YSBsYXlvdXQgZnJvbSB0aGUgTUNKSVQgYW5k
IGFwcGx5Ci0gICAgICAgIC8vIGl0IHRvIHRoZSBtb2R1bGUuCi0gICAgICAgIExMVk1UYXJnZXRN
YWNoaW5lUmVmIHRhcmdldE1hY2hpbmUgPSBsbHZtLT5HZXRFeGVjdXRpb25FbmdpbmVUYXJnZXRN
YWNoaW5lKGVuZ2luZSk7Ci0gICAgICAgIExMVk1UYXJnZXREYXRhUmVmIHRhcmdldERhdGEgPSBs
bHZtLT5HZXRFeGVjdXRpb25FbmdpbmVUYXJnZXREYXRhKGVuZ2luZSk7Ci0gICAgICAgIGNoYXIq
IHN0cmluZ1JlcE9mVGFyZ2V0RGF0YSA9IGxsdm0tPkNvcHlTdHJpbmdSZXBPZlRhcmdldERhdGEo
dGFyZ2V0RGF0YSk7Ci0gICAgICAgIGxsdm0tPlNldERhdGFMYXlvdXQobW9kdWxlLCBzdHJpbmdS
ZXBPZlRhcmdldERhdGEpOwotICAgICAgICBmcmVlKHN0cmluZ1JlcE9mVGFyZ2V0RGF0YSk7Ci0K
LSAgICAgICAgTExWTVBhc3NNYW5hZ2VyUmVmIGZ1bmN0aW9uUGFzc2VzID0gMDsKLSAgICAgICAg
TExWTVBhc3NNYW5hZ2VyUmVmIG1vZHVsZVBhc3NlczsKLQotICAgICAgICBpZiAoT3B0aW9uczo6
bGx2bVNpbXBsZU9wdCgpKSB7Ci0gICAgICAgICAgICBtb2R1bGVQYXNzZXMgPSBsbHZtLT5DcmVh
dGVQYXNzTWFuYWdlcigpOwotICAgICAgICAgICAgbGx2bS0+QWRkVGFyZ2V0RGF0YSh0YXJnZXRE
YXRhLCBtb2R1bGVQYXNzZXMpOwotICAgICAgICAgICAgbGx2bS0+QWRkQW5hbHlzaXNQYXNzZXMo
dGFyZ2V0TWFjaGluZSwgbW9kdWxlUGFzc2VzKTsKLSAgICAgICAgICAgIGxsdm0tPkFkZFByb21v
dGVNZW1vcnlUb1JlZ2lzdGVyUGFzcyhtb2R1bGVQYXNzZXMpOwotICAgICAgICAgICAgbGx2bS0+
QWRkR2xvYmFsT3B0aW1pemVyUGFzcyhtb2R1bGVQYXNzZXMpOwotICAgICAgICAgICAgbGx2bS0+
QWRkRnVuY3Rpb25JbmxpbmluZ1Bhc3MobW9kdWxlUGFzc2VzKTsKLSAgICAgICAgICAgIGxsdm0t
PkFkZFBydW5lRUhQYXNzKG1vZHVsZVBhc3Nlcyk7Ci0gICAgICAgICAgICBsbHZtLT5BZGRHbG9i
YWxEQ0VQYXNzKG1vZHVsZVBhc3Nlcyk7Ci0gICAgICAgICAgICBsbHZtLT5BZGRDb25zdGFudFBy
b3BhZ2F0aW9uUGFzcyhtb2R1bGVQYXNzZXMpOwotICAgICAgICAgICAgbGx2bS0+QWRkQWdncmVz
c2l2ZURDRVBhc3MobW9kdWxlUGFzc2VzKTsKLSAgICAgICAgICAgIGxsdm0tPkFkZEluc3RydWN0
aW9uQ29tYmluaW5nUGFzcyhtb2R1bGVQYXNzZXMpOwotICAgICAgICAgICAgLy8gQkVHSU4gLSBE
TyBOT1QgQ0hBTkdFIFRIRSBPUkRFUiBPRiBUSEUgQUxJQVMgQU5BTFlTSVMgUEFTU0VTCi0gICAg
ICAgICAgICBsbHZtLT5BZGRUeXBlQmFzZWRBbGlhc0FuYWx5c2lzUGFzcyhtb2R1bGVQYXNzZXMp
OwotICAgICAgICAgICAgbGx2bS0+QWRkQmFzaWNBbGlhc0FuYWx5c2lzUGFzcyhtb2R1bGVQYXNz
ZXMpOwotICAgICAgICAgICAgLy8gRU5EIC0gRE8gTk9UIENIQU5HRSBUSEUgT1JERVIgT0YgVEhF
IEFMSUFTIEFOQUxZU0lTIFBBU1NFUwotICAgICAgICAgICAgbGx2bS0+QWRkR1ZOUGFzcyhtb2R1
bGVQYXNzZXMpOwotICAgICAgICAgICAgbGx2bS0+QWRkQ0ZHU2ltcGxpZmljYXRpb25QYXNzKG1v
ZHVsZVBhc3Nlcyk7Ci0gICAgICAgICAgICBsbHZtLT5BZGREZWFkU3RvcmVFbGltaW5hdGlvblBh
c3MobW9kdWxlUGFzc2VzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGVuYWJsZUxM
Vk1GYXN0SVNlbCkKLSAgICAgICAgICAgICAgICBsbHZtLT5BZGRMb3dlclN3aXRjaFBhc3MobW9k
dWxlUGFzc2VzKTsKLQotICAgICAgICAgICAgbGx2bS0+UnVuUGFzc01hbmFnZXIobW9kdWxlUGFz
c2VzLCBtb2R1bGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTExWTVBhc3NNYW5h
Z2VyQnVpbGRlclJlZiBwYXNzQnVpbGRlciA9IGxsdm0tPlBhc3NNYW5hZ2VyQnVpbGRlckNyZWF0
ZSgpOwotICAgICAgICAgICAgbGx2bS0+UGFzc01hbmFnZXJCdWlsZGVyU2V0T3B0TGV2ZWwocGFz
c0J1aWxkZXIsIE9wdGlvbnM6Omxsdm1PcHRpbWl6YXRpb25MZXZlbCgpKTsKLSAgICAgICAgICAg
IGxsdm0tPlBhc3NNYW5hZ2VyQnVpbGRlclVzZUlubGluZXJXaXRoVGhyZXNob2xkKHBhc3NCdWls
ZGVyLCAyNzUpOwotICAgICAgICAgICAgbGx2bS0+UGFzc01hbmFnZXJCdWlsZGVyU2V0U2l6ZUxl
dmVsKHBhc3NCdWlsZGVyLCBPcHRpb25zOjpsbHZtU2l6ZUxldmVsKCkpOwotICAgICAgICAKLSAg
ICAgICAgICAgIGZ1bmN0aW9uUGFzc2VzID0gbGx2bS0+Q3JlYXRlRnVuY3Rpb25QYXNzTWFuYWdl
ckZvck1vZHVsZShtb2R1bGUpOwotICAgICAgICAgICAgbW9kdWxlUGFzc2VzID0gbGx2bS0+Q3Jl
YXRlUGFzc01hbmFnZXIoKTsKLSAgICAgICAgCi0gICAgICAgICAgICBsbHZtLT5BZGRUYXJnZXRE
YXRhKGxsdm0tPkdldEV4ZWN1dGlvbkVuZ2luZVRhcmdldERhdGEoZW5naW5lKSwgbW9kdWxlUGFz
c2VzKTsKLSAgICAgICAgCi0gICAgICAgICAgICBsbHZtLT5QYXNzTWFuYWdlckJ1aWxkZXJQb3B1
bGF0ZUZ1bmN0aW9uUGFzc01hbmFnZXIocGFzc0J1aWxkZXIsIGZ1bmN0aW9uUGFzc2VzKTsKLSAg
ICAgICAgICAgIGxsdm0tPlBhc3NNYW5hZ2VyQnVpbGRlclBvcHVsYXRlTW9kdWxlUGFzc01hbmFn
ZXIocGFzc0J1aWxkZXIsIG1vZHVsZVBhc3Nlcyk7Ci0gICAgICAgIAotICAgICAgICAgICAgbGx2
bS0+UGFzc01hbmFnZXJCdWlsZGVyRGlzcG9zZShwYXNzQnVpbGRlcik7Ci0gICAgICAgIAotICAg
ICAgICAgICAgbGx2bS0+SW5pdGlhbGl6ZUZ1bmN0aW9uUGFzc01hbmFnZXIoZnVuY3Rpb25QYXNz
ZXMpOwotICAgICAgICAgICAgZm9yIChMVmFsdWUgZnVuY3Rpb24gPSBsbHZtLT5HZXRGaXJzdEZ1
bmN0aW9uKG1vZHVsZSk7IGZ1bmN0aW9uOyBmdW5jdGlvbiA9IGxsdm0tPkdldE5leHRGdW5jdGlv
bihmdW5jdGlvbikpCi0gICAgICAgICAgICAgICAgbGx2bS0+UnVuRnVuY3Rpb25QYXNzTWFuYWdl
cihmdW5jdGlvblBhc3NlcywgZnVuY3Rpb24pOwotICAgICAgICAgICAgbGx2bS0+RmluYWxpemVG
dW5jdGlvblBhc3NNYW5hZ2VyKGZ1bmN0aW9uUGFzc2VzKTsKLSAgICAgICAgCi0gICAgICAgICAg
ICBsbHZtLT5SdW5QYXNzTWFuYWdlcihtb2R1bGVQYXNzZXMsIG1vZHVsZSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgdmVyYm9zZUNvbXBpbGF0
aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgc3RhdGUuZHVtcFN0YXRlKG1vZHVsZSwgImFmdGVy
IG9wdGltaXphdGlvbiIpOwotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8gYWRk
IHN1cHBvcnQgZm9yIHRoZSBjYXNlIHdoZXJlIEpJVCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQu
Ci0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2
MjAKLSAgICAgICAgc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEdl
bmVyYXRlZEZ1bmN0aW9uPihsbHZtLT5HZXRQb2ludGVyVG9HbG9iYWwoZW5naW5lLCBzdGF0ZS5m
dW5jdGlvbikpOwotICAgICAgICBpZiAoZnVuY3Rpb25QYXNzZXMpCi0gICAgICAgICAgICBsbHZt
LT5EaXNwb3NlUGFzc01hbmFnZXIoZnVuY3Rpb25QYXNzZXMpOwotICAgICAgICBsbHZtLT5EaXNw
b3NlUGFzc01hbmFnZXIobW9kdWxlUGFzc2VzKTsKLSAgICAgICAgbGx2bS0+RGlzcG9zZUV4ZWN1
dGlvbkVuZ2luZShlbmdpbmUpOwotICAgIH0KLQotICAgIGlmIChzYWZlcG9pbnRSZXN1bHQuZGlk
R2V0Q2FuY2VsbGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBSRUxFQVNFX0FTU0VSVCghc3Rh
dGUuZ3JhcGgubV92bS5oZWFwLmlzQ29sbGVjdGluZygpKTsKLSAgICAKLSAgICBpZiAoc3RhdGUu
YWxsb2NhdGlvbkZhaWxlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChzaG91bGRE
dW1wRGlzYXNzZW1ibHkoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3Rh
dGUuaml0Q29kZS0+aGFuZGxlcygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBFeGVjdXRh
YmxlTWVtb3J5SGFuZGxlKiBoYW5kbGUgPSBzdGF0ZS5qaXRDb2RlLT5oYW5kbGVzKClbaV0uZ2V0
KCk7Ci0gICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgICAgICJHZW5lcmF0ZWQgTExW
TSBjb2RlIGZvciAiLAotICAgICAgICAgICAgICAgIENvZGVCbG9ja1dpdGhKSVRUeXBlKHN0YXRl
LmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpLAotICAgICAgICAgICAgICAgICIg
IyIsIGksICIsICIsIHN0YXRlLmNvZGVTZWN0aW9uTmFtZXNbaV0sICI6XG4iKTsKLSAgICAgICAg
ICAgIGRpc2Fzc2VtYmxlKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciho
YW5kbGUtPnN0YXJ0KCkpLCBoYW5kbGUtPnNpemVJbkJ5dGVzKCksCi0gICAgICAgICAgICAgICAg
IiAgICAiLCBXVEY6OmRhdGFGaWxlKCksIExMVk1TdWJzZXQpOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUuaml0Q29kZS0+ZGF0YVNl
Y3Rpb25zKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIERhdGFTZWN0aW9uKiBzZWN0aW9u
ID0gc3RhdGUuaml0Q29kZS0+ZGF0YVNlY3Rpb25zKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICBk
YXRhTG9nKAotICAgICAgICAgICAgICAgICJHZW5lcmF0ZWQgTExWTSBkYXRhIHNlY3Rpb24gZm9y
ICIsCi0gICAgICAgICAgICAgICAgQ29kZUJsb2NrV2l0aEpJVFR5cGUoc3RhdGUuZ3JhcGgubV9j
b2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCksCi0gICAgICAgICAgICAgICAgIiAjIiwgaSwgIiwg
Iiwgc3RhdGUuZGF0YVNlY3Rpb25OYW1lc1tpXSwgIjpcbiIpOwotICAgICAgICAgICAgZHVtcERh
dGFTZWN0aW9uKHNlY3Rpb24sICIgICAgIik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAg
c3RkOjp1bmlxdWVfcHRyPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PiByZWdpc3Rlck9mZnNldHMgPSBw
YXJzZVVud2luZEluZm8oCi0gICAgICAgIHN0YXRlLnVud2luZERhdGFTZWN0aW9uLCBzdGF0ZS51
bndpbmREYXRhU2VjdGlvblNpemUsCi0gICAgICAgIHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uKTsK
LSAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpIHsKLSAgICAgICAgZGF0YUxvZygiVW53
aW5kIGluZm8gZm9yICIsIENvZGVCbG9ja1dpdGhKSVRUeXBlKHN0YXRlLmdyYXBoLm1fY29kZUJs
b2NrLCBKSVRDb2RlOjpGVExKSVQpLCAiOlxuIik7Ci0gICAgICAgIGRhdGFMb2coIiAgICAiLCAq
cmVnaXN0ZXJPZmZzZXRzLCAiXG4iKTsKLSAgICB9Ci0gICAgc3RhdGUuZ3JhcGgubV9jb2RlQmxv
Y2stPnNldENhbGxlZVNhdmVSZWdpc3RlcnMoV1RGTW92ZShyZWdpc3Rlck9mZnNldHMpKTsKLSAg
ICAKLSAgICBpZiAoc3RhdGUuc3RhY2ttYXBzU2VjdGlvbiAmJiBzdGF0ZS5zdGFja21hcHNTZWN0
aW9uLT5zaXplKCkpIHsKLSAgICAgICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJseSgpKSB7Ci0g
ICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgICAgICJHZW5lcmF0ZWQgTExWTSBzdGFj
a21hcHMgc2VjdGlvbiBmb3IgIiwKLSAgICAgICAgICAgICAgICBDb2RlQmxvY2tXaXRoSklUVHlw
ZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSwgIjpcbiIpOwotICAg
ICAgICAgICAgZGF0YUxvZygiICAgIFJhdyBkYXRhOlxuIik7Ci0gICAgICAgICAgICBkdW1wRGF0
YVNlY3Rpb24oc3RhdGUuc3RhY2ttYXBzU2VjdGlvbi5nZXQoKSwgIiAgICAiKTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgUmVmUHRyPERhdGFWaWV3PiBzdGFja21hcHNEYXRhID0gRGF0
YVZpZXc6OmNyZWF0ZSgKLSAgICAgICAgICAgIEFycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGUuc3Rh
Y2ttYXBzU2VjdGlvbi0+YmFzZSgpLCBzdGF0ZS5zdGFja21hcHNTZWN0aW9uLT5zaXplKCkpKTsK
LSAgICAgICAgc3RhdGUuaml0Q29kZS0+c3RhY2ttYXBzLnBhcnNlKHN0YWNrbWFwc0RhdGEuZ2V0
KCkpOwotICAgIAotICAgICAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpIHsKLSAgICAg
ICAgICAgIGRhdGFMb2coIiAgICBTdHJ1Y3R1cmVkIGRhdGE6XG4iKTsKLSAgICAgICAgICAgIHN0
YXRlLmppdENvZGUtPnN0YWNrbWFwcy5kdW1wTXVsdGlsaW5lKFdURjo6ZGF0YUZpbGUoKSwgIiAg
ICAgICAgIik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFN0YWNrTWFwczo6UmVjb3Jk
TWFwIHJlY29yZE1hcCA9IHN0YXRlLmppdENvZGUtPnN0YWNrbWFwcy5jb21wdXRlUmVjb3JkTWFw
KCk7Ci0gICAgICAgIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKLSAgICAgICAgICAgIHN0
YXRlLCBzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgc3RhdGUuaml0Q29kZS5nZXQoKSwgc3RhdGUu
Z2VuZXJhdGVkRnVuY3Rpb24sCi0gICAgICAgICAgICByZWNvcmRNYXApOwotICAgICAgICBpZiAo
c3RhdGUuYWxsb2NhdGlvbkZhaWxlZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjphc3luY0Rpc2Fz
c2VtYmx5KCkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5q
aXRDb2RlLT5oYW5kbGVzKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3Rh
dGUuY29kZVNlY3Rpb25OYW1lc1tpXSAhPSBTRUNUSU9OX05BTUUoInRleHQiKSkKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
RXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogaGFuZGxlID0gc3RhdGUuaml0Q29kZS0+aGFuZGxlcygp
W2ldLmdldCgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENTdHJpbmcgaGVh
ZGVyID0gdG9DU3RyaW5nKAotICAgICAgICAgICAgICAgICAgICAiR2VuZXJhdGVkIExMVk0gY29k
ZSBhZnRlciBzdGFja21hcC1iYXNlZCBmaXgtdXAgZm9yICIsCi0gICAgICAgICAgICAgICAgICAg
IENvZGVCbG9ja1dpdGhKSVRUeXBlKHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb2RlOjpG
VExKSVQpLAotICAgICAgICAgICAgICAgICAgICAiIGluICIsIHN0YXRlLmdyYXBoLm1fcGxhbi5t
b2RlLCAiICMiLCBpLCAiLCAiLAotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jb2RlU2VjdGlv
bk5hbWVzW2ldLCAiOlxuIik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYg
KE9wdGlvbnM6OmFzeW5jRGlzYXNzZW1ibHkoKSkgewotICAgICAgICAgICAgICAgICAgICBkaXNh
c3NlbWJsZUFzeW5jaHJvbm91c2x5KAotICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYoaGFuZGxlKSwgaGFuZGxlLT5zaXplSW5CeXRlcygpLCAiICAg
ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICBMTFZNU3Vic2V0KTsKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGRhdGFMb2coaGVhZGVyKTsKLSAgICAgICAgICAgICAgICBkaXNhc3NlbWJs
ZSgKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGhhbmRsZS0+c3Rh
cnQoKSksIGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwKLSAgICAgICAgICAgICAgICAgICAgIiAgICAi
LCBXVEY6OmRhdGFGaWxlKCksIExMVk1TdWJzZXQpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCi0KLSNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkgJiYgRlRMX1VTRVNfQjMKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDb21waWxlQmluYXJ5T3AuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ29tcGlsZUJpbmFyeU9wLmNwcAkocmV2aXNpb24gMTk2Njg1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlQmluYXJ5T3AuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMxMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZUTENvbXBpbGVC
aW5hcnlPcC5oIgotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0KLSNpbmNsdWRlICJERkdOb2RlVHlw
ZS5oIgotI2luY2x1ZGUgIkZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oIgotI2luY2x1ZGUgIkdQ
UkluZm8uaCIKLSNpbmNsdWRlICJKSVRBZGRHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJKSVRCaXRB
bmRHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJKSVRCaXRPckdlbmVyYXRvci5oIgotI2luY2x1ZGUg
IkpJVEJpdFhvckdlbmVyYXRvci5oIgotI2luY2x1ZGUgIkpJVERpdkdlbmVyYXRvci5oIgotI2lu
Y2x1ZGUgIkpJVExlZnRTaGlmdEdlbmVyYXRvci5oIgotI2luY2x1ZGUgIkpJVE11bEdlbmVyYXRv
ci5oIgotI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJKSVRT
dWJHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKLQot
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewotCi11c2luZyBuYW1lc3BhY2UgREZHOwot
Ci1jbGFzcyBCaW5hcnlTbmlwcGV0UmVnaXN0ZXJDb250ZXh0IHsKLSAgICAvLyBUaGUgcHVycG9z
ZSBvZiB0aGlzIGNsYXNzIGlzIHRvIHNodWZmbGUgcmVnaXN0ZXJzIHRvIGdldCB0aGVtIGludG8g
dGhlIHN0YXRlCi0gICAgLy8gdGhhdCBiYXNlbGluZSBjb2RlIGV4cGVjdHMgc28gdGhhdCB3ZSBj
YW4gdXNlIHRoZSBiYXNlbGluZSBzbmlwcGV0IGdlbmVyYXRvcnMgaS5lLgotICAgIC8vICAgIDEu
IEVuc3VyZSB0aGF0IHRoZSBpbnB1dHMgYW5kIG91dHB1dCBhcmUgbm90IGluIHJlc2VydmVkIHJl
Z2lzdGVycyAod2hpY2gKLSAgICAvLyAgICAgICBpbmNsdWRlIHRoZSB0YWcgcmVnaXN0ZXJzKS4g
VGhlIHNuaXBwZXQgd2lsbCB1c2UgdGhlc2UgcmVzZXJ2ZWQgcmVnaXN0ZXJzLgotICAgIC8vICAg
ICAgIEhlbmNlLCB3ZSBuZWVkIHRvIHB1dCB0aGUgaW5wdXRzIGFuZCBvdXRwdXQgaW4gb3RoZXIg
c2NyYXRjaCByZWdpc3RlcnMuCi0gICAgLy8gICAgMi4gVGFnIHJlZ2lzdGVycyBhcmUgbG9hZGVk
IHdpdGggdGhlIGV4cGVjdGVkIHZhbHVlcy4KLSAgICAvLwotICAgIC8vIFdoZW4gdGhlIHNuaXBw
ZXQgaXMgZG9uZToKLSAgICAvLyAgICAxLiBJZiB3ZSBoYWQgcmUtYXNzaWduZWQgdGhlIHJlc3Vs
dCByZWdpc3RlciB0byBhIHNjcmF0Y2gsIHdlIG5lZWQgdG8gY29weSB0aGUKLSAgICAvLyAgICAg
ICByZXN1bHQgYmFjayBmcm9tIHRoZSBzY3JhdGNoLgotICAgIC8vICAgIDIuIFJlc3RvcmUgdGhl
IGlucHV0IGFuZCB0YWcgcmVnaXN0ZXJzIHRvIHRoZSB2YWx1ZXMgdGhhdCBMTFZNIHB1dCB0aGVy
ZSBvcmlnaW5hbGx5LgotICAgIC8vICAgICAgIFRoYXQgaXMgdW5sZXNzIHdoZW4gb25lIG9mIHRo
ZW0gaXMgYWxzbyB0aGUgcmVzdWx0IHJlZ2lzdGVyLiBJbiB0aGF0IGNhc2UsIHdlCi0gICAgLy8g
ICAgICAgZG9uJ3Qgd2FudCB0byB0cmFzaCB0aGUgcmVzdWx0LCBhbmQgaGVuY2UsIHNob3VsZCBu
b3QgcmVzdG9yZSBpbnRvIGl0LgotCi1wdWJsaWM6Ci0gICAgQmluYXJ5U25pcHBldFJlZ2lzdGVy
Q29udGV4dChTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3ImIGFsbG9jYXRvciwgR1BSUmVnJiByZXN1
bHQsIEdQUlJlZyYgbGVmdCwgR1BSUmVnJiByaWdodCkKLSAgICAgICAgOiBtX2FsbG9jYXRvcihh
bGxvY2F0b3IpCi0gICAgICAgICwgbV9yZXN1bHQocmVzdWx0KQotICAgICAgICAsIG1fbGVmdChs
ZWZ0KQotICAgICAgICAsIG1fcmlnaHQocmlnaHQpCi0gICAgICAgICwgbV9vcmlnUmVzdWx0KHJl
c3VsdCkKLSAgICAgICAgLCBtX29yaWdMZWZ0KGxlZnQpCi0gICAgICAgICwgbV9vcmlnUmlnaHQo
cmlnaHQpCi0gICAgewotICAgICAgICBtX2FsbG9jYXRvci5sb2NrKG1fcmVzdWx0KTsKLSAgICAg
ICAgbV9hbGxvY2F0b3IubG9jayhtX2xlZnQpOwotICAgICAgICBtX2FsbG9jYXRvci5sb2NrKG1f
cmlnaHQpOwotCi0gICAgICAgIFJlZ2lzdGVyU2V0IGlucHV0QW5kT3V0cHV0UmVnaXN0ZXJzID0g
UmVnaXN0ZXJTZXQobV9sZWZ0LCBtX3JpZ2h0LCBtX3Jlc3VsdCk7Ci0gICAgICAgIFJlZ2lzdGVy
U2V0IHJlc2VydmVkUmVnaXN0ZXJzOwotICAgICAgICBmb3IgKEdQUlJlZyByZWcgOiBHUFJJbmZv
OjpyZXNlcnZlZFJlZ2lzdGVycygpKQotICAgICAgICAgICAgcmVzZXJ2ZWRSZWdpc3RlcnMuc2V0
KHJlZyk7Ci0KLSAgICAgICAgaWYgKHJlc2VydmVkUmVnaXN0ZXJzLmdldChtX2xlZnQpKQotICAg
ICAgICAgICAgbV9sZWZ0ID0gbV9hbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAg
ICAgIGlmIChyZXNlcnZlZFJlZ2lzdGVycy5nZXQobV9yaWdodCkpIHsKLSAgICAgICAgICAgIGlm
IChtX29yaWdSaWdodCA9PSBtX29yaWdMZWZ0KQotICAgICAgICAgICAgICAgIG1fcmlnaHQgPSBt
X2xlZnQ7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9yaWdodCA9IG1fYWxs
b2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZXNl
cnZlZFJlZ2lzdGVycy5nZXQobV9yZXN1bHQpKSB7Ci0gICAgICAgICAgICBpZiAobV9vcmlnUmVz
dWx0ID09IG1fb3JpZ0xlZnQpCi0gICAgICAgICAgICAgICAgbV9yZXN1bHQgPSBtX2xlZnQ7Ci0g
ICAgICAgICAgICBlbHNlIGlmIChtX29yaWdSZXN1bHQgPT0gbV9vcmlnUmlnaHQpCi0gICAgICAg
ICAgICAgICAgbV9yZXN1bHQgPSBtX3JpZ2h0OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIG1fcmVzdWx0ID0gbV9hbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoIWlucHV0QW5kT3V0cHV0UmVnaXN0ZXJzLmdldChHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpKQotICAgICAgICAgICAgbV9zYXZlZFRhZ01hc2tSZWdpc3RlciA9
IG1fYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgICAgICBpZiAoIWlucHV0QW5k
T3V0cHV0UmVnaXN0ZXJzLmdldChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKQotICAg
ICAgICAgICAgbV9zYXZlZFRhZ1R5cGVOdW1iZXJSZWdpc3RlciA9IG1fYWxsb2NhdG9yLmFsbG9j
YXRlU2NyYXRjaEdQUigpOwotICAgIH0KLQotICAgIHZvaWQgaW5pdGlhbGl6ZVJlZ2lzdGVycyhD
Q2FsbEhlbHBlcnMmIGppdCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2xlZnQgIT0gbV9vcmlnTGVm
dCkKLSAgICAgICAgICAgIGppdC5tb3ZlKG1fb3JpZ0xlZnQsIG1fbGVmdCk7Ci0gICAgICAgIGlm
IChtX3JpZ2h0ICE9IG1fb3JpZ1JpZ2h0ICYmIG1fb3JpZ1JpZ2h0ICE9IG1fb3JpZ0xlZnQpCi0g
ICAgICAgICAgICBqaXQubW92ZShtX29yaWdSaWdodCwgbV9yaWdodCk7Ci0gICAgICAgIAotICAg
ICAgICBpZiAobV9zYXZlZFRhZ01hc2tSZWdpc3RlciAhPSBJbnZhbGlkR1BSUmVnKQotICAgICAg
ICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyLCBtX3NhdmVkVGFnTWFza1Jl
Z2lzdGVyKTsKLSAgICAgICAgaWYgKG1fc2F2ZWRUYWdUeXBlTnVtYmVyUmVnaXN0ZXIgIT0gSW52
YWxpZEdQUlJlZykKLSAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgbV9zYXZlZFRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0KLSAgICAgICAgaml0LmVt
aXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJzKCk7Ci0gICAgfQotCi0gICAgdm9pZCByZXN0
b3JlUmVnaXN0ZXJzKENDYWxsSGVscGVycyYgaml0KQotICAgIHsKLSAgICAgICAgaWYgKG1fb3Jp
Z1Jlc3VsdCAhPSBtX3Jlc3VsdCkKLSAgICAgICAgICAgIGppdC5tb3ZlKG1fcmVzdWx0LCBtX29y
aWdSZXN1bHQpOwotICAgICAgICBpZiAobV9vcmlnTGVmdCAhPSBtX2xlZnQgJiYgbV9vcmlnTGVm
dCAhPSBtX29yaWdSZXN1bHQpCi0gICAgICAgICAgICBqaXQubW92ZShtX2xlZnQsIG1fb3JpZ0xl
ZnQpOwotICAgICAgICBpZiAobV9vcmlnUmlnaHQgIT0gbV9yaWdodCAmJiBtX29yaWdSaWdodCAh
PSBtX29yaWdSZXN1bHQgJiYgbV9vcmlnUmlnaHQgIT0gbV9vcmlnTGVmdCkKLSAgICAgICAgICAg
IGppdC5tb3ZlKG1fcmlnaHQsIG1fb3JpZ1JpZ2h0KTsKLQotICAgICAgICAvLyBXZSBhcmUgZ3Vh
cmFudGVlZCB0aGF0IHRoZSB0YWcgcmVnaXN0ZXJzIGFyZSBub3QgdGhlIHNhbWUgYXMgdGhlIG9y
aWdpbmFsIGlucHV0Ci0gICAgICAgIC8vIG9yIG91dHB1dCByZWdpc3RlcnMuIE90aGVyd2lzZSwg
d2Ugd291bGQgbm90IGhhdmUgYWxsb2NhdGVkIGEgc2NyYXRjaCBmb3IgdGhlbS4KLSAgICAgICAg
Ly8gSGVuY2UsIHdlIGRvbid0IG5lZWQgdG8gbmVlZCB0byBjaGVjayBmb3Igb3ZlcmxhcCBsaWtl
IHdlIGRvIGZvciB0aGUgaW5wdXQgcmVnaXN0ZXJzLgotICAgICAgICBpZiAobV9zYXZlZFRhZ01h
c2tSZWdpc3RlciAhPSBJbnZhbGlkR1BSUmVnKSB7Ci0gICAgICAgICAgICBBU1NFUlQoR1BSSW5m
bzo6dGFnTWFza1JlZ2lzdGVyICE9IG1fb3JpZ0xlZnQpOwotICAgICAgICAgICAgQVNTRVJUKEdQ
UkluZm86OnRhZ01hc2tSZWdpc3RlciAhPSBtX29yaWdSaWdodCk7Ci0gICAgICAgICAgICBBU1NF
UlQoR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyICE9IG1fb3JpZ1Jlc3VsdCk7Ci0gICAgICAgICAg
ICBqaXQubW92ZShtX3NhdmVkVGFnTWFza1JlZ2lzdGVyLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0
ZXIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX3NhdmVkVGFnVHlwZU51bWJlclJlZ2lzdGVy
ICE9IEludmFsaWRHUFJSZWcpIHsKLSAgICAgICAgICAgIEFTU0VSVChHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIgIT0gbV9vcmlnTGVmdCk7Ci0gICAgICAgICAgICBBU1NFUlQoR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyICE9IG1fb3JpZ1JpZ2h0KTsKLSAgICAgICAgICAgIEFT
U0VSVChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIgIT0gbV9vcmlnUmVzdWx0KTsKLSAg
ICAgICAgICAgIGppdC5tb3ZlKG1fc2F2ZWRUYWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsKLQotICAgIEdQUlJlZyYg
bV9yZXN1bHQ7Ci0gICAgR1BSUmVnJiBtX2xlZnQ7Ci0gICAgR1BSUmVnJiBtX3JpZ2h0OwotCi0g
ICAgR1BSUmVnIG1fb3JpZ1Jlc3VsdDsKLSAgICBHUFJSZWcgbV9vcmlnTGVmdDsKLSAgICBHUFJS
ZWcgbV9vcmlnUmlnaHQ7Ci0KLSAgICBHUFJSZWcgbV9zYXZlZFRhZ01hc2tSZWdpc3RlciB7IElu
dmFsaWRHUFJSZWcgfTsKLSAgICBHUFJSZWcgbV9zYXZlZFRhZ1R5cGVOdW1iZXJSZWdpc3RlciB7
IEludmFsaWRHUFJSZWcgfTsKLX07Ci0KLWVudW0gU2NyYXRjaEZQUlVzYWdlIHsKLSAgICBEb250
TmVlZFNjcmF0Y2hGUFIsCi0gICAgTmVlZFNjcmF0Y2hGUFIKLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFNuaXBwZXRHZW5lcmF0b3I+Ci12b2lkIGdlbmVyYXRlQmluYXJ5Qml0T3BGYXN0UGF0aChC
aW5hcnlPcERlc2NyaXB0b3ImIGljLCBDQ2FsbEhlbHBlcnMmIGppdCwKLSAgICBHUFJSZWcgcmVz
dWx0LCBHUFJSZWcgbGVmdCwgR1BSUmVnIHJpZ2h0LCBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJz
LAotICAgIENDYWxsSGVscGVyczo6SnVtcCYgZG9uZSwgQ0NhbGxIZWxwZXJzOjpKdW1wJiBzbG93
UGF0aFN0YXJ0KQotewotICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3IodXNl
ZFJlZ2lzdGVycyk7Ci0KLSAgICBCaW5hcnlTbmlwcGV0UmVnaXN0ZXJDb250ZXh0IGNvbnRleHQo
YWxsb2NhdG9yLCByZXN1bHQsIGxlZnQsIHJpZ2h0KTsKLQotICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotCi0gICAgU25pcHBldEdlbmVyYXRv
ciBnZW4oaWMubGVmdE9wZXJhbmQoKSwgaWMucmlnaHRPcGVyYW5kKCksIEpTVmFsdWVSZWdzKHJl
c3VsdCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGxlZnQpLCBKU1ZhbHVlUmVncyhyaWdodCksIHNj
cmF0Y2hHUFIpOwotCi0gICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0
ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0gICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lz
dGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1Nw
YWNlOjpOb0V4dHJhU3BhY2UpOwotCi0gICAgY29udGV4dC5pbml0aWFsaXplUmVnaXN0ZXJzKGpp
dCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoaml0KTsKLQotICAgIEFTU0VSVChnZW4uZGlk
RW1pdEZhc3RQYXRoKCkpOwotICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsoJmppdCk7Ci0KLSAg
ICBjb250ZXh0LnJlc3RvcmVSZWdpc3RlcnMoaml0KTsKLSAgICBhbGxvY2F0b3IucmVzdG9yZVJl
dXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKLSAgICBkb25lID0g
aml0Lmp1bXAoKTsKLQotICAgIGdlbi5zbG93UGF0aEp1bXBMaXN0KCkubGluaygmaml0KTsKLSAg
ICBjb250ZXh0LnJlc3RvcmVSZWdpc3RlcnMoaml0KTsKLSAgICBhbGxvY2F0b3IucmVzdG9yZVJl
dXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKLSAgICBzbG93UGF0
aFN0YXJ0ID0gaml0Lmp1bXAoKTsKLX0KLQotc3RhdGljIHZvaWQgZ2VuZXJhdGVSaWdodFNoaWZ0
RmFzdFBhdGgoQmluYXJ5T3BEZXNjcmlwdG9yJiBpYywgQ0NhbGxIZWxwZXJzJiBqaXQsCi0gICAg
R1BSUmVnIHJlc3VsdCwgR1BSUmVnIGxlZnQsIEdQUlJlZyByaWdodCwgUmVnaXN0ZXJTZXQgdXNl
ZFJlZ2lzdGVycywKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAmIGRvbmUsIENDYWxsSGVscGVyczo6
SnVtcCYgc2xvd1BhdGhTdGFydCwKLSAgICBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yOjpTaGlmdFR5
cGUgc2hpZnRUeXBlKQotewotICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3Io
dXNlZFJlZ2lzdGVycyk7Ci0KLSAgICBCaW5hcnlTbmlwcGV0UmVnaXN0ZXJDb250ZXh0IGNvbnRl
eHQoYWxsb2NhdG9yLCByZXN1bHQsIGxlZnQsIHJpZ2h0KTsKLQotICAgIEZQUlJlZyBsZWZ0RlBS
ID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEZQUigpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotCi0gICAgSklUUmlnaHRTaGlmdEdl
bmVyYXRvciBnZW4oaWMubGVmdE9wZXJhbmQoKSwgaWMucmlnaHRPcGVyYW5kKCksIEpTVmFsdWVS
ZWdzKHJlc3VsdCksCi0gICAgICAgIEpTVmFsdWVSZWdzKGxlZnQpLCBKU1ZhbHVlUmVncyhyaWdo
dCksIGxlZnRGUFIsIHNjcmF0Y2hHUFIsIEludmFsaWRGUFJSZWcsIHNoaWZ0VHlwZSk7Ci0KLSAg
ICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRl
ID0KLSAgICAgICAgYWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGpp
dCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6Ok5vRXh0cmFTcGFj
ZSk7Ci0KLSAgICBjb250ZXh0LmluaXRpYWxpemVSZWdpc3RlcnMoaml0KTsKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aChqaXQpOwotCi0gICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7
Ci0gICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluaygmaml0KTsKLSAgICBjb250ZXh0LnJlc3RvcmVS
ZWdpc3RlcnMoaml0KTsKLSAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9w
cGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKLSAgICBkb25lID0gaml0Lmp1bXAoKTsKLQotICAg
IGdlbi5zbG93UGF0aEp1bXBMaXN0KCkubGluaygmaml0KTsKLSAgICBjb250ZXh0LnJlc3RvcmVS
ZWdpc3RlcnMoaml0KTsKLSAgICBhbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9w
cGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKLSAgICBzbG93UGF0aFN0YXJ0ID0gaml0Lmp1bXAo
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5QXJpdGhPcEdlbmVyYXRvciwgU2NyYXRj
aEZQUlVzYWdlIHNjcmF0Y2hGUFJVc2FnZSA9IERvbnROZWVkU2NyYXRjaEZQUj4KLXZvaWQgZ2Vu
ZXJhdGVCaW5hcnlBcml0aE9wRmFzdFBhdGgoQmluYXJ5T3BEZXNjcmlwdG9yJiBpYywgQ0NhbGxI
ZWxwZXJzJiBqaXQsCi0gICAgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGxlZnQsIEdQUlJlZyByaWdo
dCwgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycywKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAmIGRv
bmUsIENDYWxsSGVscGVyczo6SnVtcCYgc2xvd1BhdGhTdGFydCkKLXsKLSAgICBTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOwotCi0gICAgQmluYXJ5U25p
cHBldFJlZ2lzdGVyQ29udGV4dCBjb250ZXh0KGFsbG9jYXRvciwgcmVzdWx0LCBsZWZ0LCByaWdo
dCk7Ci0KLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKLSAgICBGUFJSZWcgbGVmdEZQUiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hGUFIo
KTsKLSAgICBGUFJSZWcgcmlnaHRGUFIgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoRlBSKCk7
Ci0gICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBJbnZhbGlkRlBSUmVnOwotICAgIGlmIChzY3JhdGNo
RlBSVXNhZ2UgPT0gTmVlZFNjcmF0Y2hGUFIpCi0gICAgICAgIHNjcmF0Y2hGUFIgPSBhbGxvY2F0
b3IuYWxsb2NhdGVTY3JhdGNoRlBSKCk7Ci0KLSAgICBCaW5hcnlBcml0aE9wR2VuZXJhdG9yIGdl
bihpYy5sZWZ0T3BlcmFuZCgpLCBpYy5yaWdodE9wZXJhbmQoKSwgSlNWYWx1ZVJlZ3MocmVzdWx0
KSwKLSAgICAgICAgSlNWYWx1ZVJlZ3MobGVmdCksIEpTVmFsdWVSZWdzKHJpZ2h0KSwgbGVmdEZQ
UiwgcmlnaHRGUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIpOwotCi0gICAgU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yOjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0gICAgICAgIGFs
bG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpOb0V4dHJhU3BhY2UpOwotCi0gICAgY29u
dGV4dC5pbml0aWFsaXplUmVnaXN0ZXJzKGppdCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
aml0KTsKLQotICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwotICAgIGdlbi5lbmRK
dW1wTGlzdCgpLmxpbmsoJmppdCk7Ci0gICAgY29udGV4dC5yZXN0b3JlUmVnaXN0ZXJzKGppdCk7
Ci0gICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVz
ZXJ2ZWRTdGF0ZSk7Ci0gICAgZG9uZSA9IGppdC5qdW1wKCk7Ci0KLSAgICBnZW4uc2xvd1BhdGhK
dW1wTGlzdCgpLmxpbmsoJmppdCk7Ci0gICAgY29udGV4dC5yZXN0b3JlUmVnaXN0ZXJzKGppdCk7
Ci0gICAgYWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVz
ZXJ2ZWRTdGF0ZSk7Ci0gICAgc2xvd1BhdGhTdGFydCA9IGppdC5qdW1wKCk7Ci19Ci0KLXZvaWQg
Z2VuZXJhdGVCaW5hcnlPcEZhc3RQYXRoKEJpbmFyeU9wRGVzY3JpcHRvciYgaWMsIENDYWxsSGVs
cGVycyYgaml0LAotICAgIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBsZWZ0LCBHUFJSZWcgcmlnaHQs
IFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMsCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wJiBkb25l
LCBDQ2FsbEhlbHBlcnM6Okp1bXAmIHNsb3dQYXRoU3RhcnQpCi17Ci0gICAgc3dpdGNoIChpYy5u
b2RlVHlwZSgpKSB7Ci0gICAgY2FzZSBCaXRBbmQ6Ci0gICAgICAgIGdlbmVyYXRlQmluYXJ5Qml0
T3BGYXN0UGF0aDxKSVRCaXRBbmRHZW5lcmF0b3I+KGljLCBqaXQsIHJlc3VsdCwgbGVmdCwgcmln
aHQsIHVzZWRSZWdpc3RlcnMsIGRvbmUsIHNsb3dQYXRoU3RhcnQpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEJpdE9yOgotICAgICAgICBnZW5lcmF0ZUJpbmFyeUJpdE9wRmFzdFBhdGg8SklU
Qml0T3JHZW5lcmF0b3I+KGljLCBqaXQsIHJlc3VsdCwgbGVmdCwgcmlnaHQsIHVzZWRSZWdpc3Rl
cnMsIGRvbmUsIHNsb3dQYXRoU3RhcnQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJpdFhv
cjoKLSAgICAgICAgZ2VuZXJhdGVCaW5hcnlCaXRPcEZhc3RQYXRoPEpJVEJpdFhvckdlbmVyYXRv
cj4oaWMsIGppdCwgcmVzdWx0LCBsZWZ0LCByaWdodCwgdXNlZFJlZ2lzdGVycywgZG9uZSwgc2xv
d1BhdGhTdGFydCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQml0TFNoaWZ0OgotICAgICAg
ICBnZW5lcmF0ZUJpbmFyeUJpdE9wRmFzdFBhdGg8SklUTGVmdFNoaWZ0R2VuZXJhdG9yPihpYywg
aml0LCByZXN1bHQsIGxlZnQsIHJpZ2h0LCB1c2VkUmVnaXN0ZXJzLCBkb25lLCBzbG93UGF0aFN0
YXJ0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCaXRSU2hpZnQ6Ci0gICAgICAgIGdlbmVy
YXRlUmlnaHRTaGlmdEZhc3RQYXRoKGljLCBqaXQsIHJlc3VsdCwgbGVmdCwgcmlnaHQsIHVzZWRS
ZWdpc3RlcnMsIGRvbmUsIHNsb3dQYXRoU3RhcnQsIEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3I6OlNp
Z25lZFNoaWZ0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCaXRVUlNoaWZ0OgotICAgICAg
ICBnZW5lcmF0ZVJpZ2h0U2hpZnRGYXN0UGF0aChpYywgaml0LCByZXN1bHQsIGxlZnQsIHJpZ2h0
LCB1c2VkUmVnaXN0ZXJzLCBkb25lLCBzbG93UGF0aFN0YXJ0LCBKSVRSaWdodFNoaWZ0R2VuZXJh
dG9yOjpVbnNpZ25lZFNoaWZ0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcml0aERpdjoK
LSAgICAgICAgZ2VuZXJhdGVCaW5hcnlBcml0aE9wRmFzdFBhdGg8SklURGl2R2VuZXJhdG9yLCBO
ZWVkU2NyYXRjaEZQUj4oaWMsIGppdCwgcmVzdWx0LCBsZWZ0LCByaWdodCwgdXNlZFJlZ2lzdGVy
cywgZG9uZSwgc2xvd1BhdGhTdGFydCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJpdGhN
dWw6Ci0gICAgICAgIGdlbmVyYXRlQmluYXJ5QXJpdGhPcEZhc3RQYXRoPEpJVE11bEdlbmVyYXRv
cj4oaWMsIGppdCwgcmVzdWx0LCBsZWZ0LCByaWdodCwgdXNlZFJlZ2lzdGVycywgZG9uZSwgc2xv
d1BhdGhTdGFydCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJpdGhTdWI6Ci0gICAgICAg
IGdlbmVyYXRlQmluYXJ5QXJpdGhPcEZhc3RQYXRoPEpJVFN1YkdlbmVyYXRvcj4oaWMsIGppdCwg
cmVzdWx0LCBsZWZ0LCByaWdodCwgdXNlZFJlZ2lzdGVycywgZG9uZSwgc2xvd1BhdGhTdGFydCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVmFsdWVBZGQ6Ci0gICAgICAgIGdlbmVyYXRlQmlu
YXJ5QXJpdGhPcEZhc3RQYXRoPEpJVEFkZEdlbmVyYXRvcj4oaWMsIGppdCwgcmVzdWx0LCBsZWZ0
LCByaWdodCwgdXNlZFJlZ2lzdGVycywgZG9uZSwgc2xvd1BhdGhTdGFydCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgfQotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCi0KLSNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZUJp
bmFyeU9wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21w
aWxlQmluYXJ5T3AuaAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDb21waWxlQmluYXJ5T3AuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0NyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBG
VExDb21waWxlQmluYXJ5T3BfaAotI2RlZmluZSBGVExDb21waWxlQmluYXJ5T3BfaAotCi0jaWYg
RU5BQkxFKEZUTF9KSVQpCi0KLSNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLQotbmFtZXNwYWNl
IEpTQyB7Ci1uYW1lc3BhY2UgRlRMIHsKLQotY2xhc3MgQmluYXJ5T3BEZXNjcmlwdG9yOwotCi12
b2lkIGdlbmVyYXRlQmluYXJ5T3BGYXN0UGF0aChCaW5hcnlPcERlc2NyaXB0b3ImLCBDQ2FsbEhl
bHBlcnMmLAotICAgIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBsZWZ0LCBHUFJSZWcgcmlnaHQsIFJl
Z2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMsCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wJiBkb25lLCBD
Q2FsbEhlbHBlcnM6Okp1bXAmIHNsb3dQYXRoU3RhcnQpOwotCi19IC8vIG5hbWVzcGFjZSBGVEwK
LX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0KLSNlbmRp
ZiAvLyBGVExDb21waWxlQmluYXJ5T3BfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExEV0FSRkRlYnVnTGluZUluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmNwcAkocmV2aXNpb24gMTk2Njg1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExEV0FSRkRlYnVnTGluZUluZm8uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkZUTERXQVJGRGVidWdMaW5lSW5mby5oIgotCi0jaWYgRU5BQkxF
KEZUTF9KSVQpCi0KLSNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgotCi1uYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7Ci0KLURlYnVnTGluZUludGVycHJldGVyOjpEZWJ1Z0xpbmVJbnRlcnBy
ZXRlcihjb25zdCBjaGFyKiBwcm9ncmFtKQotICAgIDogbV9wcm9ncmFtKHByb2dyYW0pCi0gICAg
LCBtX2xvZ1Jlc3VsdHMoZmFsc2UpCi17Ci0gICAgcmVzZXRJbnRlcnByZXRlclN0YXRlKCk7Ci19
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCByZWFkKGNvbnN0IGNoYXIqJiBwcm9n
cmFtKQotewotICAgIFQgcmVzdWx0ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHByb2dy
YW0pOwotICAgIHByb2dyYW0gKz0gc2l6ZW9mKFQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXVpbnQzMl90IERlYnVnTGluZUludGVycHJldGVyOjpwYXJzZVVMRUIxMjgoY29uc3QgY2hhciom
IG9mZnNldCkKLXsKLSAgICB1aW50MzJfdCByZXN1bHQgPSAwOwotICAgIHVpbnQ4X3QgYnl0ZTsK
LSAgICB1bnNpZ25lZCBzaGlmdEFtb3VudCA9IDA7Ci0gICAgZG8gewotICAgICAgICBieXRlID0g
cmVhZDx1aW50OF90PihvZmZzZXQpOwotICAgICAgICByZXN1bHQgfD0gKGJ5dGUgJiB+MHg4MCkg
PDwgc2hpZnRBbW91bnQ7Ci0gICAgICAgIHNoaWZ0QW1vdW50ICs9IDc7Ci0gICAgfSB3aGlsZSAo
Ynl0ZSAmIDB4ODApOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWludDMyX3QgRGVidWdMaW5l
SW50ZXJwcmV0ZXI6OnBhcnNlU0xFQjEyOChjb25zdCBjaGFyKiYgb2Zmc2V0KQotewotICAgIGlu
dDMyX3QgcmVzdWx0ID0gMDsKLSAgICB1aW50OF90IGJ5dGU7Ci0gICAgdW5zaWduZWQgc2hpZnRB
bW91bnQgPSAwOwotICAgIGRvIHsKLSAgICAgICAgYnl0ZSA9IHJlYWQ8dWludDhfdD4ob2Zmc2V0
KTsKLSAgICAgICAgcmVzdWx0IHw9IChieXRlICYgfjB4ODApIDw8IHNoaWZ0QW1vdW50OwotICAg
ICAgICBzaGlmdEFtb3VudCArPSA3OwotICAgIH0gd2hpbGUgKGJ5dGUgJiAweDgwKTsKLSAgICAK
LSAgICAvLyBJZiB0aGUgc2lnbiBiaXQgKGluIHRoaXMgY2FzZSwgdGhlIHNlY29uZCBNU0IpIG9u
IHRoZSBsYXN0IGJ5dGUgaXMgc2V0IHdlIG5lZWQgdG8gemVybyBleHRlbmQuCi0gICAgaWYgKGJ5
dGUgJiAweDQwKQotICAgICAgICByZXN1bHQgfD0gLSgxIDw8IHNoaWZ0QW1vdW50KTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIERlYnVnTGluZUludGVycHJldGVyOjpydW4oKQotewot
ICAgIHBhcnNlUHJvbG9ndWUoKTsKLSAgICBpbnRlcnByZXRTdGF0ZW1lbnRQcm9ncmFtKCk7Ci0g
ICAgaWYgKG1fbG9nUmVzdWx0cykKLSAgICAgICAgcHJpbnRMaW5lSW5mbygpOwotfQotCi12b2lk
IERlYnVnTGluZUludGVycHJldGVyOjpwYXJzZVByb2xvZ3VlKCkKLXsKLSAgICBjb25zdCBjaGFy
KiBjdXJyZW50UHJvZ3JhbU9mZnNldCA9IG1fcHJvZ3JhbTsKLSAgICBtX3Byb2xvZ3VlLnRvdGFs
TGVuZ3RoID0gcmVhZDx1aW50MzJfdD4oY3VycmVudFByb2dyYW1PZmZzZXQpOwotICAgIGlmICht
X3Byb2xvZ3VlLnRvdGFsTGVuZ3RoID09IDB4ZmZmZmZmZmYpIHsKLSAgICAgICAgLy8gVGhpcyBp
cyA2NC1iaXQgRFdBUkYgZm9ybWF0LgotICAgICAgICBtX3Byb2xvZ3VlLmZvcm1hdCA9IFNpeHR5
Rm91ckJpdDsKLSAgICAgICAgbV9wcm9sb2d1ZS50b3RhbExlbmd0aCA9IHJlYWQ8dWludDY0X3Q+
KGN1cnJlbnRQcm9ncmFtT2Zmc2V0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9wcm9sb2d1ZS5m
b3JtYXQgPSBUaGlydHlUd29CaXQ7Ci0gICAgbV9wcm9sb2d1ZS52ZXJzaW9uID0gcmVhZDx1aW50
MTZfdD4oY3VycmVudFByb2dyYW1PZmZzZXQpOwotICAgIAotICAgIGlmIChtX3Byb2xvZ3VlLmZv
cm1hdCA9PSBUaGlydHlUd29CaXQpCi0gICAgICAgIG1fcHJvbG9ndWUucHJvbG9ndWVMZW5ndGgg
PSByZWFkPHVpbnQzMl90PihjdXJyZW50UHJvZ3JhbU9mZnNldCk7Ci0gICAgZWxzZQotICAgICAg
ICBtX3Byb2xvZ3VlLnByb2xvZ3VlTGVuZ3RoID0gcmVhZDx1aW50NjRfdD4oY3VycmVudFByb2dy
YW1PZmZzZXQpOwotICAgIGNvbnN0IGNoYXIqIGFmdGVyTGVuZ3RoT2Zmc2V0ID0gY3VycmVudFBy
b2dyYW1PZmZzZXQ7Ci0gICAgCi0gICAgbV9wcm9sb2d1ZS5taW5pbXVtSW5zdHJ1Y3Rpb25MZW5n
dGggPSByZWFkPHVpbnQ4X3Q+KGN1cnJlbnRQcm9ncmFtT2Zmc2V0KTsKLSAgICBtX3Byb2xvZ3Vl
LmRlZmF1bHRJc1N0YXRlbWVudCA9IHJlYWQ8dWludDhfdD4oY3VycmVudFByb2dyYW1PZmZzZXQp
OwotICAgIG1fcHJvbG9ndWUubGluZUJhc2UgPSByZWFkPGludDhfdD4oY3VycmVudFByb2dyYW1P
ZmZzZXQpOwotICAgIG1fcHJvbG9ndWUubGluZVJhbmdlID0gcmVhZDx1aW50OF90PihjdXJyZW50
UHJvZ3JhbU9mZnNldCk7Ci0gICAgbV9wcm9sb2d1ZS5vcGNvZGVCYXNlID0gcmVhZDx1aW50OF90
PihjdXJyZW50UHJvZ3JhbU9mZnNldCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG1f
cHJvbG9ndWUub3Bjb2RlQmFzZTsgKytpKQotICAgICAgICBtX3Byb2xvZ3VlLnN0YW5kYXJkT3Bj
b2RlTGVuZ3Rocy5hcHBlbmQocmVhZDx1aW50OF90PihjdXJyZW50UHJvZ3JhbU9mZnNldCkpOwot
ICAgIHBhcnNlSW5jbHVkZURpcmVjdG9yaWVzKGN1cnJlbnRQcm9ncmFtT2Zmc2V0KTsKLSAgICBw
YXJzZUZpbGVFbnRyaWVzKGN1cnJlbnRQcm9ncmFtT2Zmc2V0KTsKLSAgICAKLSAgICBtX3Byb2dy
YW0gPSBhZnRlckxlbmd0aE9mZnNldCArIG1fcHJvbG9ndWUucHJvbG9ndWVMZW5ndGg7Ci0KLSAg
ICBpZiAoIW1fbG9nUmVzdWx0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGF0YUxvZygiXG5Q
cm9sb2d1ZTpcbiIpOwotICAgIGRhdGFMb2coInRvdGFsTGVuZ3RoID0gIiwgbV9wcm9sb2d1ZS50
b3RhbExlbmd0aCwgIlxuIik7Ci0gICAgZGF0YUxvZygidmVyc2lvbiA9ICIsIG1fcHJvbG9ndWUu
dmVyc2lvbiwgIlxuIik7Ci0gICAgZGF0YUxvZygicHJvbG9ndWVMZW5ndGggPSAiLCBtX3Byb2xv
Z3VlLnByb2xvZ3VlTGVuZ3RoLCAiXG4iKTsKLSAgICBkYXRhTG9nKCJtaW5pbXVtSW5zdHJ1Y3Rp
b25MZW5ndGggPSAiLCBtX3Byb2xvZ3VlLm1pbmltdW1JbnN0cnVjdGlvbkxlbmd0aCwgIlxuIik7
Ci0gICAgZGF0YUxvZygiZGVmYXVsdElzU3RhdGVtZW50ID0gIiwgbV9wcm9sb2d1ZS5kZWZhdWx0
SXNTdGF0ZW1lbnQsICJcbiIpOwotICAgIGRhdGFMb2coImxpbmVCYXNlID0gIiwgbV9wcm9sb2d1
ZS5saW5lQmFzZSwgIlxuIik7Ci0gICAgZGF0YUxvZygibGluZVJhbmdlID0gIiwgbV9wcm9sb2d1
ZS5saW5lUmFuZ2UsICJcbiIpOwotICAgIGRhdGFMb2coIm9wY29kZUJhc2UgPSAiLCBtX3Byb2xv
Z3VlLm9wY29kZUJhc2UsICJcbiIpOwotICAgIAotICAgIGRhdGFMb2coIlxuU3RhbmRhcmQgT3Bj
b2RlIExlbmd0aHM6XG4iKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9wcm9sb2d1
ZS5vcGNvZGVCYXNlOyArK2kpCi0gICAgICAgIGRhdGFMb2coInN0YW5kYXJkT3Bjb2RlTGVuZ3Ro
c1siLCBpIC0gMSwgIl0gPSAiLCBtX3Byb2xvZ3VlLnN0YW5kYXJkT3Bjb2RlTGVuZ3Roc1tpIC0g
MV0sICJcbiIpOwotICAgIAotICAgIGRhdGFMb2coIlxuSW5jbHVkZSBEaXJlY3RvcmllczpcbiIp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb2xvZ3VlLmluY2x1ZGVEaXJlY3Rv
cmllcy5zaXplKCk7ICsraSkKLSAgICAgICAgZGF0YUxvZygiaW5jbHVkZURpcmVjdG9yaWVzWyIs
IGksICJdID0gIiwgbV9wcm9sb2d1ZS5pbmNsdWRlRGlyZWN0b3JpZXNbaV0sICJcbiIpOwotICAg
IAotICAgIGRhdGFMb2coIlxuRmlsZXM6XG4iKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9wcm9sb2d1ZS5maWxlRW50cmllcy5zaXplKCk7ICsraSkgewotICAgICAgICBGaWxlRW50
cnkmIGVudHJ5ID0gbV9wcm9sb2d1ZS5maWxlRW50cmllc1tpXTsKLSAgICAgICAgZGF0YUxvZygi
ZmlsZUVudHJpZXNbIiwgaSwgIl0gPSB7bmFtZTogXCIiLCBlbnRyeS5uYW1lLCAiXCIsIGRpcl9p
bmRleDogIiwgZW50cnkuZGlyZWN0b3J5SW5kZXgsICIsIGxhc3RfbW9kaWZpZWQ6ICIsIGVudHJ5
Lmxhc3RNb2RpZmllZCwgIiwgc2l6ZTogIiwgZW50cnkuc2l6ZSwgIn1cbiIpOwotICAgIH0KLX0K
LQotdm9pZCBEZWJ1Z0xpbmVJbnRlcnByZXRlcjo6cGFyc2VJbmNsdWRlRGlyZWN0b3JpZXMoY29u
c3QgY2hhciomIG9mZnNldCkKLXsKLSAgICBzaXplX3QgbGVuZ3RoID0gMDsKLSAgICB3aGlsZSAo
KGxlbmd0aCA9IHN0cmxlbihvZmZzZXQpKSkgewotICAgICAgICBtX3Byb2xvZ3VlLmluY2x1ZGVE
aXJlY3Rvcmllcy5hcHBlbmQob2Zmc2V0KTsKLSAgICAgICAgb2Zmc2V0ICs9IGxlbmd0aCArIDE7
Ci0gICAgfQotICAgIAotICAgIC8vIEV4dHJhIGluY3JlbWVudCB0byBnZXQgcGFzdCB0aGUgbGFz
dCBudWxsIGJ5dGUuCi0gICAgb2Zmc2V0ICs9IDE7Ci19Ci0KLXZvaWQgRGVidWdMaW5lSW50ZXJw
cmV0ZXI6OnBhcnNlRmlsZUVudHJpZXMoY29uc3QgY2hhciomIG9mZnNldCkKLXsKLSAgICB3aGls
ZSAodHJ1ZSkgewotICAgICAgICBEZWJ1Z0xpbmVJbnRlcnByZXRlcjo6RmlsZUVudHJ5IG5leHRF
bnRyeTsKLSAgICAgICAgaWYgKCFwYXJzZUZpbGVFbnRyeShvZmZzZXQsIG5leHRFbnRyeSkpCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgbV9wcm9sb2d1ZS5maWxlRW50cmllcy5hcHBlbmQo
bmV4dEVudHJ5KTsKLSAgICB9Ci19Ci0KLWJvb2wgRGVidWdMaW5lSW50ZXJwcmV0ZXI6OnBhcnNl
RmlsZUVudHJ5KGNvbnN0IGNoYXIqJiBvZmZzZXQsIEZpbGVFbnRyeSYgZW50cnkpCi17Ci0gICAg
c2l6ZV90IGxlbmd0aCA9IHN0cmxlbihvZmZzZXQpOwotICAgIGlmICghbGVuZ3RoKSB7Ci0gICAg
ICAgIG9mZnNldCArPSAxOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGVudHJ5
Lm5hbWUgPSBvZmZzZXQ7Ci0gICAgb2Zmc2V0ICs9IGxlbmd0aCArIDE7Ci0gICAgZW50cnkuZGly
ZWN0b3J5SW5kZXggPSBwYXJzZVVMRUIxMjgob2Zmc2V0KTsKLSAgICBlbnRyeS5sYXN0TW9kaWZp
ZWQgPSBwYXJzZVVMRUIxMjgob2Zmc2V0KTsKLSAgICBlbnRyeS5zaXplID0gcGFyc2VVTEVCMTI4
KG9mZnNldCk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRGVidWdMaW5lSW50
ZXJwcmV0ZXI6OmludGVycHJldFN0YXRlbWVudFByb2dyYW0oKQotewotICAgIGNvbnN0IGNoYXIq
IGN1cnJlbnRQcm9ncmFtT2Zmc2V0ID0gbV9wcm9ncmFtOwotICAgIGJvb2wga2VlcEdvaW5nID0g
dHJ1ZTsKLSAgICBkbyB7Ci0gICAgICAgIGtlZXBHb2luZyA9IGludGVycHJldE9wY29kZShjdXJy
ZW50UHJvZ3JhbU9mZnNldCk7Ci0gICAgfSB3aGlsZSAoa2VlcEdvaW5nKTsKLX0KLQotYm9vbCBE
ZWJ1Z0xpbmVJbnRlcnByZXRlcjo6aW50ZXJwcmV0T3Bjb2RlKGNvbnN0IGNoYXIqJiBvZmZzZXQp
Ci17Ci0gICAgdWludDhfdCBuZXh0T3Bjb2RlID0gcmVhZDx1aW50OF90PihvZmZzZXQpOwotICAg
IHN3aXRjaCAobmV4dE9wY29kZSkgewotICAgIGNhc2UgRXh0ZW5kZWRPcGNvZGVzOiB7Ci0gICAg
ICAgIHVpbnQzMl90IGxlbmd0aCA9IHBhcnNlVUxFQjEyOChvZmZzZXQpOwotICAgICAgICBpZiAo
IWxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdWludDhfdCBleHRl
bmRlZE9wY29kZSA9IHJlYWQ8dWludDhfdD4ob2Zmc2V0KTsKLSAgICAgICAgc3dpdGNoIChleHRl
bmRlZE9wY29kZSkgewotICAgICAgICBjYXNlIERXX0xORV9lbmRfc2VxdWVuY2U6IHsKLSAgICAg
ICAgICAgIG1fY3VycmVudFN0YXRlLmVuZFNlcXVlbmNlID0gdHJ1ZTsKLSAgICAgICAgICAgIG1f
bGluZUluZm9NYXRyaXguYXBwZW5kKG1fY3VycmVudFN0YXRlKTsKLSAgICAgICAgICAgIHJlc2V0
SW50ZXJwcmV0ZXJTdGF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBEV19MTkVfc2V0X2FkZHJlc3M6IHsKLSAgICAgICAgICAgIG1fY3VycmVudFN0YXRl
LmFkZHJlc3MgPSByZWFkPHNpemVfdD4ob2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgRFdfTE5FX2RlZmluZV9maWxlOiB7Ci0gICAgICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIlVuaW1wbGVtZW50ZWQgZXh0ZW5kZWQgb3Bjb2RlIERXX0xORV9kZWZp
bmVfZmlsZS5cbiIpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6IHsKLSAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBleHRlbmRlZCBvcGNvZGUuXG4iKTsKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAg
LyogU3RhbmRhcmQgb3Bjb2RlcyAqLwotICAgIGNhc2UgRFdfTE5TX2NvcHk6IHsKLSAgICAgICAg
bV9saW5lSW5mb01hdHJpeC5hcHBlbmQobV9jdXJyZW50U3RhdGUpOwotICAgICAgICBtX2N1cnJl
bnRTdGF0ZS5pc0Jhc2ljQmxvY2sgPSBmYWxzZTsKLSAgICAgICAgbV9jdXJyZW50U3RhdGUucHJv
bG9ndWVFbmQgPSBmYWxzZTsKLSAgICAgICAgbV9jdXJyZW50U3RhdGUuZXBpbG9ndWVCZWdpbiA9
IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBEV19MTlNfYWR2YW5jZV9w
YzogewotICAgICAgICB1aW50MzJfdCBhZHZhbmNlID0gcGFyc2VVTEVCMTI4KG9mZnNldCk7Ci0g
ICAgICAgIG1fY3VycmVudFN0YXRlLmFkZHJlc3MgKz0gYWR2YW5jZSAqIG1fcHJvbG9ndWUubWlu
aW11bUluc3RydWN0aW9uTGVuZ3RoOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBE
V19MTlNfYWR2YW5jZV9saW5lOiB7Ci0gICAgICAgIGludDMyX3QgYWR2YW5jZSA9IHBhcnNlU0xF
QjEyOChvZmZzZXQpOwotICAgICAgICBtX2N1cnJlbnRTdGF0ZS5saW5lICs9IGFkdmFuY2U7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIERXX0xOU19zZXRfZmlsZTogewotICAgICAg
ICB1aW50MzJfdCBmaWxlSW5kZXggPSBwYXJzZVVMRUIxMjgob2Zmc2V0KTsKLSAgICAgICAgbV9j
dXJyZW50U3RhdGUuZmlsZSA9IGZpbGVJbmRleDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgRFdfTE5TX3NldF9jb2x1bW46IHsKLSAgICAgICAgbV9jdXJyZW50U3RhdGUuY29sdW1u
ID0gcGFyc2VVTEVCMTI4KG9mZnNldCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IERXX0xOU19uZWdhdGVfc3RtdDogewotICAgICAgICBtX2N1cnJlbnRTdGF0ZS5pc1N0YXRlbWVu
dCA9ICFtX2N1cnJlbnRTdGF0ZS5pc1N0YXRlbWVudDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGNhc2UgRFdfTE5TX3NldF9iYXNpY19ibG9jazogewotICAgICAgICBtX2N1cnJlbnRTdGF0
ZS5pc0Jhc2ljQmxvY2sgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBE
V19MTlNfY29uc3RfYWRkX3BjOiB7Ci0gICAgICAgIHVpbnQ4X3QgYWRqdXN0ZWRPcGNvZGUgPSBu
ZXh0T3Bjb2RlIC0gbV9wcm9sb2d1ZS5vcGNvZGVCYXNlOwotICAgICAgICB1aW50MzJfdCBhZGRy
ZXNzSW5jcmVtZW50ID0gKGFkanVzdGVkT3Bjb2RlIC8gbV9wcm9sb2d1ZS5saW5lUmFuZ2UpICog
bV9wcm9sb2d1ZS5taW5pbXVtSW5zdHJ1Y3Rpb25MZW5ndGg7Ci0gICAgICAgIG1fY3VycmVudFN0
YXRlLmFkZHJlc3MgKz0gYWRkcmVzc0luY3JlbWVudDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGNhc2UgRFdfTE5TX2ZpeGVkX2FkdmFuY2VfcGM6IHsKLSAgICAgICAgdWludDE2X3QgYWR2
YW5jZSA9IHJlYWQ8dWludDE2X3Q+KG9mZnNldCk7Ci0gICAgICAgIG1fY3VycmVudFN0YXRlLmFk
ZHJlc3MgKz0gYWR2YW5jZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRFdfTE5T
X3NldF9wcm9sb2d1ZV9lbmQ6IHsKLSAgICAgICAgbV9jdXJyZW50U3RhdGUucHJvbG9ndWVFbmQg
PSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBEV19MTlNfc2V0X2VwaWxv
Z3VlX2JlZ2luOiB7Ci0gICAgICAgIG1fY3VycmVudFN0YXRlLmVwaWxvZ3VlQmVnaW4gPSB0cnVl
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBEV19MTlNfc2V0X2lzYTogewotICAg
ICAgICBtX2N1cnJlbnRTdGF0ZS5pc2EgPSBwYXJzZVVMRUIxMjgob2Zmc2V0KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgICAgICAvKiBTcGVjaWFsIG9wY29kZXMgKi8KLSAgICBkZWZhdWx0
OiB7Ci0gICAgICAgIHVpbnQ4X3QgYWRqdXN0ZWRPcGNvZGUgPSBuZXh0T3Bjb2RlIC0gbV9wcm9s
b2d1ZS5vcGNvZGVCYXNlOwotICAgICAgICB1aW50MzJfdCBhZGRyZXNzSW5jcmVtZW50ID0gKGFk
anVzdGVkT3Bjb2RlIC8gbV9wcm9sb2d1ZS5saW5lUmFuZ2UpICogbV9wcm9sb2d1ZS5taW5pbXVt
SW5zdHJ1Y3Rpb25MZW5ndGg7Ci0gICAgICAgIGludDMyX3QgbGluZUluY3JlbWVudCA9IG1fcHJv
bG9ndWUubGluZUJhc2UgKyAoYWRqdXN0ZWRPcGNvZGUgJSBtX3Byb2xvZ3VlLmxpbmVSYW5nZSk7
Ci0gICAgICAgIG1fY3VycmVudFN0YXRlLmFkZHJlc3MgKz0gYWRkcmVzc0luY3JlbWVudDsKLSAg
ICAgICAgbV9jdXJyZW50U3RhdGUubGluZSArPSBsaW5lSW5jcmVtZW50OwotICAgICAgICBtX2xp
bmVJbmZvTWF0cml4LmFwcGVuZChtX2N1cnJlbnRTdGF0ZSk7Ci0gICAgICAgIG1fY3VycmVudFN0
YXRlLmlzQmFzaWNCbG9jayA9IGZhbHNlOwotICAgICAgICBtX2N1cnJlbnRTdGF0ZS5wcm9sb2d1
ZUVuZCA9IGZhbHNlOwotICAgICAgICBtX2N1cnJlbnRTdGF0ZS5lcGlsb2d1ZUJlZ2luID0gZmFs
c2U7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgRGVidWdMaW5lSW50ZXJwcmV0ZXI6OnByaW50TGluZUluZm8oKQotewotICAgIGRhdGFM
b2coIlxuTGluZSBJbmZvIE1hdHJpeDpcbiIpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2xpbmVJbmZvTWF0cml4LnNpemUoKTsgKytpKQotICAgICAgICBwcmludExpbmVJbmZvKG1f
bGluZUluZm9NYXRyaXhbaV0pOwotICAgIGRhdGFMb2coIlxuIik7Ci19Ci0KLXZvaWQgRGVidWdM
aW5lSW50ZXJwcmV0ZXI6OnByaW50TGluZUluZm8oTGluZUluZm8mIGluZm8pCi17Ci0gICAgZGF0
YUxvZ0YoImFkZHJlc3M6ICVwIiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaW5mby5hZGRyZXNz
KSk7Ci0gICAgZGF0YUxvZygiICBmaWxlOiAiLCBpbmZvLmZpbGUsICIgIGxpbmU6ICIsIGluZm8u
bGluZSwgIiAgY29sdW1uOiAiLCBpbmZvLmNvbHVtbiwgIiAgaXNhOiAiLCBpbmZvLmlzYSwgIiAg
Iik7Ci0gICAgZGF0YUxvZygiICBzdGF0ZW1lbnQ/OiAiLCBpbmZvLmlzU3RhdGVtZW50KTsKLSAg
ICBkYXRhTG9nKCIgIGJhc2ljIGJsb2NrPzogIiwgaW5mby5pc0Jhc2ljQmxvY2spOwotICAgIGRh
dGFMb2coIiAgZW5kIHNlcXVlbmNlPzogIiwgaW5mby5lbmRTZXF1ZW5jZSk7Ci0gICAgZGF0YUxv
ZygiICBwcm9sb2d1ZSBlbmQ/OiAiLCBpbmZvLnByb2xvZ3VlRW5kKTsKLSAgICBkYXRhTG9nKCIg
IGVwaWxvZ3VlIGJlZ2luPzogIiwgaW5mby5lcGlsb2d1ZUJlZ2luKTsKLSAgICBkYXRhTG9nKCJc
biIpOwotfQotCi12b2lkIERlYnVnTGluZUludGVycHJldGVyOjpyZXNldEludGVycHJldGVyU3Rh
dGUoKQotewotICAgIG1fY3VycmVudFN0YXRlLmFkZHJlc3MgPSAwOwotICAgIG1fY3VycmVudFN0
YXRlLmZpbGUgPSAxOwotICAgIG1fY3VycmVudFN0YXRlLmxpbmUgPSAxOwotICAgIG1fY3VycmVu
dFN0YXRlLmNvbHVtbiA9IDA7Ci0gICAgbV9jdXJyZW50U3RhdGUuaXNhID0gMDsKLSAgICBtX2N1
cnJlbnRTdGF0ZS5pc1N0YXRlbWVudCA9IGZhbHNlOwotICAgIG1fY3VycmVudFN0YXRlLmlzQmFz
aWNCbG9jayA9IGZhbHNlOwotICAgIG1fY3VycmVudFN0YXRlLmVuZFNlcXVlbmNlID0gZmFsc2U7
Ci0gICAgbV9jdXJyZW50U3RhdGUucHJvbG9ndWVFbmQgPSBmYWxzZTsKLSAgICBtX2N1cnJlbnRT
dGF0ZS5lcGlsb2d1ZUJlZ2luID0gZmFsc2U7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKLQotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTERXQVJGRGVidWdMaW5lSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmgJKHJldmlzaW9uIDE5NjY4
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEZU
TERXQVJGRGVidWdMaW5lSW5mb19oCi0jZGVmaW5lIEZUTERXQVJGRGVidWdMaW5lSW5mb19oCi0K
LSNpZiBFTkFCTEUoRlRMX0pJVCkKLQotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwg
ewotCi1jbGFzcyBEZWJ1Z0xpbmVJbnRlcnByZXRlciB7Ci1wdWJsaWM6Ci0gICAgRGVidWdMaW5l
SW50ZXJwcmV0ZXIoY29uc3QgY2hhciogcHJvZ3JhbSk7Ci0KLSAgICB2b2lkIHJ1bigpOwotCi1w
cml2YXRlOgotICAgIHN0cnVjdCBGaWxlRW50cnkgewotICAgICAgICBTdHJpbmcgbmFtZTsKLSAg
ICAgICAgdWludDMyX3QgZGlyZWN0b3J5SW5kZXg7Ci0gICAgICAgIHVpbnQzMl90IGxhc3RNb2Rp
ZmllZDsKLSAgICAgICAgdWludDMyX3Qgc2l6ZTsKLSAgICB9OwotCi0gICAgdm9pZCByZXNldElu
dGVycHJldGVyU3RhdGUoKTsKLSAgICB2b2lkIGludGVycHJldFN0YXRlbWVudFByb2dyYW0oKTsK
LSAgICBib29sIGludGVycHJldE9wY29kZShjb25zdCBjaGFyKiYpOwotICAgIHZvaWQgcGFyc2VQ
cm9sb2d1ZSgpOwotICAgIHZvaWQgcGFyc2VJbmNsdWRlRGlyZWN0b3JpZXMoY29uc3QgY2hhciom
KTsKLSAgICB2b2lkIHBhcnNlRmlsZUVudHJpZXMoY29uc3QgY2hhciomKTsKLSAgICBib29sIHBh
cnNlRmlsZUVudHJ5KGNvbnN0IGNoYXIqJiwgRGVidWdMaW5lSW50ZXJwcmV0ZXI6OkZpbGVFbnRy
eSYpOwotICAgIHVpbnQzMl90IHBhcnNlVUxFQjEyOChjb25zdCBjaGFyKiYpOwotICAgIGludDMy
X3QgcGFyc2VTTEVCMTI4KGNvbnN0IGNoYXIqJik7Ci0KLSAgICBjb25zdCBjaGFyKiBtX3Byb2dy
YW07Ci0gICAgYm9vbCBtX2xvZ1Jlc3VsdHM7Ci0KLSAgICBzdHJ1Y3QgTGluZUluZm8gewotICAg
ICAgICBzaXplX3QgYWRkcmVzczsKLSAgICAgICAgdWludDMyX3QgZmlsZTsKLSAgICAgICAgdWlu
dDMyX3QgbGluZTsKLSAgICAgICAgdWludDMyX3QgY29sdW1uOwotICAgICAgICB1aW50MzJfdCBp
c2E7Ci0gICAgICAgIGJvb2wgaXNTdGF0ZW1lbnQ7Ci0gICAgICAgIGJvb2wgaXNCYXNpY0Jsb2Nr
OwotICAgICAgICBib29sIGVuZFNlcXVlbmNlOwotICAgICAgICBib29sIHByb2xvZ3VlRW5kOwot
ICAgICAgICBib29sIGVwaWxvZ3VlQmVnaW47Ci0gICAgfTsKLSAgICAKLSAgICB2b2lkIHByaW50
TGluZUluZm8oTGluZUluZm8mKTsKLSAgICB2b2lkIHByaW50TGluZUluZm8oKTsKLQotICAgIExp
bmVJbmZvIG1fY3VycmVudFN0YXRlOwotICAgIFZlY3RvcjxMaW5lSW5mbz4gbV9saW5lSW5mb01h
dHJpeDsKLQotICAgIGVudW0gRHdhcmZGb3JtYXQgewotICAgICAgICBTaXh0eUZvdXJCaXQsCi0g
ICAgICAgIFRoaXJ0eVR3b0JpdAotICAgIH07Ci0KLSAgICBzdHJ1Y3QgUHJvbG9ndWUgewotICAg
ICAgICBQcm9sb2d1ZSgpCi0gICAgICAgICAgICA6IHRvdGFsTGVuZ3RoKDApCi0gICAgICAgICAg
ICAsIGZvcm1hdChUaGlydHlUd29CaXQpCi0gICAgICAgICAgICAsIHZlcnNpb24oMCkKLSAgICAg
ICAgICAgICwgcHJvbG9ndWVMZW5ndGgoMCkKLSAgICAgICAgICAgICwgbWluaW11bUluc3RydWN0
aW9uTGVuZ3RoKDApCi0gICAgICAgICAgICAsIGRlZmF1bHRJc1N0YXRlbWVudCgwKQotICAgICAg
ICAgICAgLCBsaW5lQmFzZSgwKQotICAgICAgICAgICAgLCBsaW5lUmFuZ2UoMCkKLSAgICAgICAg
ICAgICwgb3Bjb2RlQmFzZSgwKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB1aW50
NjRfdCB0b3RhbExlbmd0aDsKLSAgICAgICAgRHdhcmZGb3JtYXQgZm9ybWF0OwotICAgICAgICB1
aW50MTZfdCB2ZXJzaW9uOwotICAgICAgICB1aW50NjRfdCBwcm9sb2d1ZUxlbmd0aDsKLSAgICAg
ICAgdWludDhfdCBtaW5pbXVtSW5zdHJ1Y3Rpb25MZW5ndGg7Ci0gICAgICAgIHVpbnQ4X3QgZGVm
YXVsdElzU3RhdGVtZW50OwotICAgICAgICBpbnQ4X3QgbGluZUJhc2U7Ci0gICAgICAgIHVpbnQ4
X3QgbGluZVJhbmdlOwotICAgICAgICB1aW50OF90IG9wY29kZUJhc2U7Ci0gICAgICAgIFZlY3Rv
cjx1aW50OF90PiBzdGFuZGFyZE9wY29kZUxlbmd0aHM7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+
IGluY2x1ZGVEaXJlY3RvcmllczsKLSAgICAgICAgVmVjdG9yPEZpbGVFbnRyeT4gZmlsZUVudHJp
ZXM7Ci0gICAgfSBtX3Byb2xvZ3VlOwotCi0gICAgZW51bSBFeHRlbmRlZE9wY29kZSB7Ci0gICAg
ICAgIERXX0xORV9lbmRfc2VxdWVuY2UgPSAweDEsCi0gICAgICAgIERXX0xORV9zZXRfYWRkcmVz
cyAgPSAweDIsCi0gICAgICAgIERXX0xORV9kZWZpbmVfZmlsZSAgPSAweDMKLSAgICB9OwotCi0g
ICAgZW51bSBTdGFuZGFyZE9wY29kZSB7Ci0gICAgICAgIEV4dGVuZGVkT3Bjb2RlcyAgICAgICAg
ICAgICA9IDB4MCwKLSAgICAgICAgRFdfTE5TX2NvcHkgICAgICAgICAgICAgICAgID0gMHgxLAot
ICAgICAgICBEV19MTlNfYWR2YW5jZV9wYyAgICAgICAgICAgPSAweDIsCi0gICAgICAgIERXX0xO
U19hZHZhbmNlX2xpbmUgICAgICAgICA9IDB4MywKLSAgICAgICAgRFdfTE5TX3NldF9maWxlICAg
ICAgICAgICAgID0gMHg0LAotICAgICAgICBEV19MTlNfc2V0X2NvbHVtbiAgICAgICAgICAgPSAw
eDUsCi0gICAgICAgIERXX0xOU19uZWdhdGVfc3RtdCAgICAgICAgICA9IDB4NiwKLSAgICAgICAg
RFdfTE5TX3NldF9iYXNpY19ibG9jayAgICAgID0gMHg3LAotICAgICAgICBEV19MTlNfY29uc3Rf
YWRkX3BjICAgICAgICAgPSAweDgsCi0gICAgICAgIERXX0xOU19maXhlZF9hZHZhbmNlX3BjICAg
ICA9IDB4OSwKLSAgICAgICAgRFdfTE5TX3NldF9wcm9sb2d1ZV9lbmQgICAgID0gMHhhLAotICAg
ICAgICBEV19MTlNfc2V0X2VwaWxvZ3VlX2JlZ2luICAgPSAweGIsCi0gICAgICAgIERXX0xOU19z
ZXRfaXNhICAgICAgICAgICAgICA9IDB4YwotICAgIH07Ci19OwotCi19IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCi0gICAgCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0KLSNlbmRpZiAvLyBG
VExEV0FSRkRlYnVnTGluZUluZm9faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExEV0FSRlJlZ2lzdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTERXQVJGUmVnaXN0ZXIuY3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTERXQVJGUmVnaXN0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZUTERXQVJGUmVnaXN0ZXIuaCIKLQot
I2lmIEVOQUJMRShGVExfSklUKQotCi0jaW5jbHVkZSAiRlBSSW5mby5oIgotI2luY2x1ZGUgIkdQ
UkluZm8uaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewotCi1SZWcgRFdBUkZS
ZWdpc3Rlcjo6cmVnKCkgY29uc3QKLXsKLSNpZiBDUFUoWDg2XzY0KQotICAgIGlmIChtX2R3YXJm
UmVnTnVtID49IDAgJiYgbV9kd2FyZlJlZ051bSA8IDE2KSB7Ci0gICAgICAgIHN3aXRjaCAoZHdh
cmZSZWdOdW0oKSkgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICByZXR1cm4gWDg2UmVn
aXN0ZXJzOjplYXg7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHJldHVybiBYODZSZWdp
c3RlcnM6OmVkeDsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgcmV0dXJuIFg4NlJlZ2lz
dGVyczo6ZWN4OwotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICByZXR1cm4gWDg2UmVnaXN0
ZXJzOjplYng7Ci0gICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgIHJldHVybiBYODZSZWdpc3Rl
cnM6OmVzaTsKLSAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgcmV0dXJuIFg4NlJlZ2lzdGVy
czo6ZWRpOwotICAgICAgICBjYXNlIDY6Ci0gICAgICAgICAgICByZXR1cm4gWDg2UmVnaXN0ZXJz
OjplYnA7Ci0gICAgICAgIGNhc2UgNzoKLSAgICAgICAgICAgIHJldHVybiBYODZSZWdpc3RlcnM6
OmVzcDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8vIFJlZ2lzdGVycyByOC4ucjE1
IGFyZSBudW1iZXJlZCBzZW5zaWJseS4KLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxH
UFJSZWc+KG1fZHdhcmZSZWdOdW0pOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChtX2R3YXJm
UmVnTnVtID49IDE3ICYmIG1fZHdhcmZSZWdOdW0gPD0gMzIpCi0gICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxGUFJSZWc+KG1fZHdhcmZSZWdOdW0gLSAxNyk7Ci0jZWxpZiBDUFUoQVJNNjQpCi0g
ICAgaWYgKG1fZHdhcmZSZWdOdW0gPj0gMCAmJiBtX2R3YXJmUmVnTnVtIDw9IDMxKQotICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8R1BSUmVnPihtX2R3YXJmUmVnTnVtKTsKLSAgICBpZiAobV9k
d2FyZlJlZ051bSA+PSA2NCAmJiBtX2R3YXJmUmVnTnVtIDw9IDk1KQotICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8RlBSUmVnPihtX2R3YXJmUmVnTnVtIC0gNjQpOwotI2VuZGlmCi0gICAgcmV0
dXJuIFJlZygpOwotfQotCi12b2lkIERXQVJGUmVnaXN0ZXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKLXsKLSAgICBSZWcgcmVnID0gdGhpcy0+cmVnKCk7Ci0gICAgaWYgKCEhcmVnKQot
ICAgICAgICBvdXQucHJpbnQocmVnKTsKLSAgICBlbHNlCi0gICAgICAgIG91dC5wcmludCgiPHVu
a25vd246IiwgbV9kd2FyZlJlZ051bSwgIj4iKTsKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRFdBUkZSZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMRFdBUkZSZWdpc3Rlci5oCShyZXZpc2lvbiAxOTY2ODUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTERXQVJGUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpZm5kZWYgRlRMRFdBUkZSZWdpc3Rlcl9oCi0jZGVmaW5lIEZUTERXQVJGUmVn
aXN0ZXJfaAotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0KLSNpbmNsdWRlICJSZWcuaCIKLSNpbmNs
dWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwg
ewotCi1jbGFzcyBEV0FSRlJlZ2lzdGVyIHsKLXB1YmxpYzoKLSAgICBEV0FSRlJlZ2lzdGVyKCkK
LSAgICAgICAgOiBtX2R3YXJmUmVnTnVtKC0xKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgZXhw
bGljaXQgRFdBUkZSZWdpc3RlcihpbnQxNl90IGR3YXJmUmVnTnVtKQotICAgICAgICA6IG1fZHdh
cmZSZWdOdW0oZHdhcmZSZWdOdW0pCi0gICAgewotICAgIH0KLSAgICAKLSAgICBpbnQxNl90IGR3
YXJmUmVnTnVtKCkgY29uc3QgeyByZXR1cm4gbV9kd2FyZlJlZ051bTsgfQotICAgIAotICAgIFJl
ZyByZWcoKSBjb25zdDsgLy8gVGhpcyBtYXkgcmV0dXJuIFJlZygpIGlmIGl0IGNhbid0IHBhcnNl
IHRoZSBEd2FyZiByZWdpc3RlciBudW1iZXIuCi0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotICAgIGludDE2X3QgbV9kd2FyZlJlZ051bTsK
LX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKLQotI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQotCi0jZW5kaWYgLy8gRlRMRFdBUkZSZWdpc3Rlcl9oCi0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMRGF0YVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRGF0YVNlY3Rpb24uY3BwCShyZXZpc2lvbiAxOTY2ODUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTERhdGFTZWN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGVExEYXRhU2VjdGlv
bi5oIgotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgotI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+Ci0jaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4K
LQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewotCi1EYXRhU2VjdGlvbjo6RGF0YVNl
Y3Rpb24oc2l6ZV90IHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCkKLSAgICA6IG1fc2l6ZShzaXpl
KQotewotICAgIFJFTEVBU0VfQVNTRVJUKFdURjo6Yml0Q291bnQoYWxpZ25tZW50KSA9PSAxKTsK
LSAgICAKLSAgICBjb25zdCB1bnNpZ25lZCBuYXRpdmVBbGlnbm1lbnQgPSA4OwotICAgIAotICAg
IGFsaWdubWVudCA9IHN0ZDo6bWF4KG5hdGl2ZUFsaWdubWVudCwgYWxpZ25tZW50KTsKLSAgICAK
LSAgICBzaXplX3QgYWxsb2NhdGVkU2l6ZSA9IHNpemUgKyBhbGlnbm1lbnQgLSBuYXRpdmVBbGln
bm1lbnQ7Ci0gICAgbV9hbGxvY2F0aW9uQmFzZSA9IGZhc3RNYWxsb2MoYWxsb2NhdGVkU2l6ZSk7
Ci0gICAgCi0gICAgbV9iYXNlID0gYml0d2lzZV9jYXN0PHZvaWQqPigKLSAgICAgICAgKGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KG1fYWxsb2NhdGlvbkJhc2UpICsgYWxpZ25tZW50IC0gMSkgJiB+
c3RhdGljX2Nhc3Q8dWludHB0cl90PihhbGlnbm1lbnQgLSAxKSk7Ci0gICAgCi0gICAgUkVMRUFT
RV9BU1NFUlQoIShiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX2Jhc2UpICYgKGFsaWdubWVudCAt
IDEpKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9iYXNl
KSArIHNpemUgPD0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9hbGxvY2F0aW9uQmFzZSkgKyBh
bGxvY2F0ZWRTaXplKTsKLX0KLQotRGF0YVNlY3Rpb246On5EYXRhU2VjdGlvbigpCi17Ci0gICAg
ZmFzdEZyZWUobV9hbGxvY2F0aW9uQmFzZSk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKLQotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTERhdGFTZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExEYXRhU2VjdGlvbi5oCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTERhdGFTZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaWZuZGVmIEZUTERhdGFTZWN0aW9uX2gKLSNkZWZpbmUgRlRMRGF0YVNlY3Rpb25faAotCi0j
aWYgRU5BQkxFKEZUTF9KSVQpCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJW
TS5oIgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKLQotY2xhc3MgRGF0YVNlY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxEYXRh
U2VjdGlvbj4gewotcHVibGljOgotICAgIERhdGFTZWN0aW9uKHNpemVfdCwgdW5zaWduZWQgYWxp
Z25tZW50KTsKLSAgICB+RGF0YVNlY3Rpb24oKTsKLSAgICAKLSAgICB2b2lkKiBiYXNlKCkgeyBy
ZXR1cm4gbV9iYXNlOyB9Ci0gICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7
IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgdm9pZCogbV9hbGxvY2F0aW9uQmFzZTsKLSAgICB2b2lk
KiBtX2Jhc2U7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKLQotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotCi0jZW5kaWYgLy8gRlRMRGF0YVNl
Y3Rpb25faAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvbkhh
bmRsZXJNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTk2Njg1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25IYW5kbGVyTWFuYWdlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZUTEV4
Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmgiCi0KLSNpZiBFTkFCTEUoRlRMX0pJVCkgJiYgIUZUTF9V
U0VTX0IzCi0KLSNpbmNsdWRlICJGVExTdGF0ZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7Ci0KLUV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjpFeGNlcHRpb25IYW5kbGVyTWFu
YWdlcihTdGF0ZSYgc3RhdGUpCi0gICAgOiBtX3N0YXRlKHN0YXRlKQotewotfQotCi12b2lkIEV4
Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjphZGROZXdFeGl0KHVpbnQzMl90IHN0YWNrbWFwUmVjb3Jk
SW5kZXgsIHNpemVfdCBvc3JFeGl0SW5kZXgpCi17Ci0gICAgbV9tYXAuYWRkKHN0YWNrbWFwUmVj
b3JkSW5kZXgsIG9zckV4aXRJbmRleCk7Ci0gICAgT1NSRXhpdCYgZXhpdCA9IG1fc3RhdGUuaml0
Q29kZS0+b3NyRXhpdFtvc3JFeGl0SW5kZXhdOwotICAgIFJFTEVBU0VfQVNTRVJUKGV4aXQud2ls
bEFycml2ZUF0RXhpdEZyb21JbmRpcmVjdEV4Y2VwdGlvbkNoZWNrKCkpOwotfQotCi12b2lkIEV4
Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjphZGROZXdDYWxsT3BlcmF0aW9uRXhpdCh1aW50MzJfdCBz
dGFja21hcFJlY29yZEluZGV4LCBzaXplX3Qgb3NyRXhpdEluZGV4KQotewotICAgIG1fY2FsbE9w
ZXJhdGlvbk1hcC5hZGQoc3RhY2ttYXBSZWNvcmRJbmRleCwgb3NyRXhpdEluZGV4KTsKLSAgICBP
U1JFeGl0JiBleGl0ID0gbV9zdGF0ZS5qaXRDb2RlLT5vc3JFeGl0W29zckV4aXRJbmRleF07Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoZXhpdC53aWxsQXJyaXZlQXRFeGl0RnJvbUluZGlyZWN0RXhjZXB0
aW9uQ2hlY2soKSk7Ci19Ci0KLUNvZGVMb2NhdGlvbkxhYmVsIEV4Y2VwdGlvbkhhbmRsZXJNYW5h
Z2VyOjpjYWxsT3BlcmF0aW9uRXhjZXB0aW9uVGFyZ2V0KHVpbnQzMl90IHN0YWNrbWFwUmVjb3Jk
SW5kZXgpCi17Ci0jaWYgRlRMX1VTRVNfQjMKLSAgICBVTlVTRURfUEFSQU0oc3RhY2ttYXBSZWNv
cmRJbmRleCk7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
Q29kZUxvY2F0aW9uTGFiZWwoKTsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAgYXV0byBmaW5k
UmVzdWx0ID0gbV9jYWxsT3BlcmF0aW9uTWFwLmZpbmQoc3RhY2ttYXBSZWNvcmRJbmRleCk7Ci0g
ICAgaWYgKGZpbmRSZXN1bHQgPT0gbV9jYWxsT3BlcmF0aW9uTWFwLmVuZCgpKQotICAgICAgICBy
ZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwoKTsKLQotICAgIHNpemVfdCBvc3JFeGl0SW5kZXggPSBm
aW5kUmVzdWx0LT52YWx1ZTsKLSAgICBSRUxFQVNFX0FTU0VSVChtX3N0YXRlLmppdENvZGUtPm9z
ckV4aXRbb3NyRXhpdEluZGV4XS53aWxsQXJyaXZlQXRPU1JFeGl0RnJvbUNhbGxPcGVyYXRpb24o
KSk7Ci0gICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fc3RhdGUuZmluYWxpemVy
LT5vc3JFeGl0W29zckV4aXRJbmRleF07Ci0gICAgUkVMRUFTRV9BU1NFUlQoaW5mby5tX3RodW5r
TGFiZWwuaXNTZXQoKSk7Ci0gICAgcmV0dXJuIG1fc3RhdGUuZmluYWxpemVyLT5leGl0VGh1bmtz
TGlua0J1ZmZlci0+bG9jYXRpb25PZihpbmZvLm1fdGh1bmtMYWJlbCk7Ci0jZW5kaWYgLy8gRlRM
X1VTRVNfQjMKLX0KLQotQ29kZUxvY2F0aW9uTGFiZWwgRXhjZXB0aW9uSGFuZGxlck1hbmFnZXI6
OmxhenlTbG93UGF0aEV4Y2VwdGlvblRhcmdldCh1aW50MzJfdCBzdGFja21hcFJlY29yZEluZGV4
KQotewotI2lmIEZUTF9VU0VTX0IzCi0gICAgVU5VU0VEX1BBUkFNKHN0YWNrbWFwUmVjb3JkSW5k
ZXgpOwotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIENvZGVM
b2NhdGlvbkxhYmVsKCk7Ci0jZWxzZSAvLyBGVExfVVNFU19CMwotICAgIGF1dG8gZmluZFJlc3Vs
dCA9IG1fbWFwLmZpbmQoc3RhY2ttYXBSZWNvcmRJbmRleCk7Ci0gICAgaWYgKGZpbmRSZXN1bHQg
PT0gbV9tYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbCgpOwotCi0g
ICAgc2l6ZV90IG9zckV4aXRJbmRleCA9IGZpbmRSZXN1bHQtPnZhbHVlOwotICAgIFJFTEVBU0Vf
QVNTRVJUKG1fc3RhdGUuaml0Q29kZS0+b3NyRXhpdFtvc3JFeGl0SW5kZXhdLm1fZXhjZXB0aW9u
VHlwZSA9PSBFeGNlcHRpb25UeXBlOjpMYXp5U2xvd1BhdGgpOwotICAgIE9TUkV4aXRDb21waWxh
dGlvbkluZm8mIGluZm8gPSBtX3N0YXRlLmZpbmFsaXplci0+b3NyRXhpdFtvc3JFeGl0SW5kZXhd
OwotICAgIFJFTEVBU0VfQVNTRVJUKGluZm8ubV90aHVua0xhYmVsLmlzU2V0KCkpOwotICAgIHJl
dHVybiBtX3N0YXRlLmZpbmFsaXplci0+ZXhpdFRodW5rc0xpbmtCdWZmZXItPmxvY2F0aW9uT2Yo
aW5mby5tX3RodW5rTGFiZWwpOwotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCi19Ci0KLU9TUkV4aXQq
IEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjpjYWxsT3BlcmF0aW9uT1NSRXhpdCh1aW50MzJfdCBz
dGFja21hcFJlY29yZEluZGV4KQotewotICAgIGF1dG8gZmluZFJlc3VsdCA9IG1fY2FsbE9wZXJh
dGlvbk1hcC5maW5kKHN0YWNrbWFwUmVjb3JkSW5kZXgpOwotICAgIGlmIChmaW5kUmVzdWx0ID09
IG1fY2FsbE9wZXJhdGlvbk1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
c2l6ZV90IG9zckV4aXRJbmRleCA9IGZpbmRSZXN1bHQtPnZhbHVlOwotICAgIE9TUkV4aXQqIGV4
aXQgPSAmbV9zdGF0ZS5qaXRDb2RlLT5vc3JFeGl0W29zckV4aXRJbmRleF07Ci0gICAgLy8gV2Ug
bWF5IGhhdmUgbW9yZSB0aGFuIG9uZSBleGl0IGZvciB0aGUgc2FtZSBzdGFja21hcCByZWNvcmQg
aW5kZXggKGkuZSwgZm9yIEdldEJ5SWRzIGFuZCBQdXRCeUlkcykuCi0gICAgLy8gVGhlcmVmb3Jl
IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZXhpdCByZWFsbHkgaXMgYSBjYWxsT3BlcmF0aW9u
IE9TUiBleGl0LgotICAgIFJFTEVBU0VfQVNTRVJUKGV4aXQtPndpbGxBcnJpdmVBdE9TUkV4aXRG
cm9tQ2FsbE9wZXJhdGlvbigpKTsKLSAgICByZXR1cm4gZXhpdDsgCi19Ci0KLU9TUkV4aXQqIEV4
Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyOjpnZXRDYWxsT1NSRXhpdENvbW1vbih1aW50MzJfdCBzdGFj
a21hcFJlY29yZEluZGV4KQotewotICAgIGF1dG8gZmluZFJlc3VsdCA9IG1fbWFwLmZpbmQoc3Rh
Y2ttYXBSZWNvcmRJbmRleCk7Ci0gICAgaWYgKGZpbmRSZXN1bHQgPT0gbV9tYXAuZW5kKCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHNpemVfdCBvc3JFeGl0SW5kZXggPSBmaW5kUmVz
dWx0LT52YWx1ZTsKLSAgICBPU1JFeGl0KiBleGl0ID0gJm1fc3RhdGUuaml0Q29kZS0+b3NyRXhp
dFtvc3JFeGl0SW5kZXhdOwotICAgIFJFTEVBU0VfQVNTRVJUKGV4aXQtPm1fZXhjZXB0aW9uVHlw
ZSA9PSBFeGNlcHRpb25UeXBlOjpKU0NhbGwpOwotICAgIHJldHVybiBleGl0OyAKLX0KLQotT1NS
RXhpdCogRXhjZXB0aW9uSGFuZGxlck1hbmFnZXI6OmdldENhbGxPU1JFeGl0KHVpbnQzMl90IHN0
YWNrbWFwUmVjb3JkSW5kZXgsIGNvbnN0IEpTQ2FsbCYpCi17Ci0gICAgcmV0dXJuIGdldENhbGxP
U1JFeGl0Q29tbW9uKHN0YWNrbWFwUmVjb3JkSW5kZXgpOwotfQotCi1PU1JFeGl0KiBFeGNlcHRp
b25IYW5kbGVyTWFuYWdlcjo6Z2V0Q2FsbE9TUkV4aXQodWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJ
bmRleCwgY29uc3QgSlNDYWxsVmFyYXJncyYpCi17Ci0gICAgcmV0dXJuIGdldENhbGxPU1JFeGl0
Q29tbW9uKHN0YWNrbWFwUmVjb3JkSW5kZXgpOwotfQotCi1PU1JFeGl0KiBFeGNlcHRpb25IYW5k
bGVyTWFuYWdlcjo6Z2V0Q2FsbE9TUkV4aXQodWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleCwg
Y29uc3QgSlNUYWlsQ2FsbCYgY2FsbCkKLXsKLSAgICBVTlVTRURfUEFSQU0oc3RhY2ttYXBSZWNv
cmRJbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNhbGwpOwotICAgIC8vIEEgY2FsbCBjYW4ndCBi
ZSBpbiB0YWlsIHBvc2l0aW9uIGluc2lkZSBhIHRyeSBibG9jay4KLSAgICBBU1NFUlQobV9tYXAu
ZmluZChzdGFja21hcFJlY29yZEluZGV4KSA9PSBtX21hcC5lbmQoKSk7Ci0gICAgcmV0dXJuIG51
bGxwdHI7Ci19Ci0KLUNhbGxTaXRlSW5kZXggRXhjZXB0aW9uSGFuZGxlck1hbmFnZXI6OnByb2N1
cmVDYWxsU2l0ZUluZGV4KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgsIENvZGVPcmlnaW4g
b3JpZ2luKQotewotICAgIGF1dG8gZmluZFJlc3VsdCA9IG1fbWFwLmZpbmQoc3RhY2ttYXBSZWNv
cmRJbmRleCk7Ci0gICAgaWYgKGZpbmRSZXN1bHQgPT0gbV9tYXAuZW5kKCkpCi0gICAgICAgIHJl
dHVybiBtX3N0YXRlLmppdENvZGUtPmNvbW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KG9yaWdp
bik7Ci0gICAgc2l6ZV90IG9zckV4aXRJbmRleCA9IGZpbmRSZXN1bHQtPnZhbHVlOwotICAgIE9T
UkV4aXQmIGV4aXQgPSBtX3N0YXRlLmppdENvZGUtPm9zckV4aXRbb3NyRXhpdEluZGV4XTsKLSAg
ICBSRUxFQVNFX0FTU0VSVChleGl0Lm1fZXhjZXB0aW9uSGFuZGxlckNhbGxTaXRlSW5kZXgpOwot
ICAgIHJldHVybiBleGl0Lm1fZXhjZXB0aW9uSGFuZGxlckNhbGxTaXRlSW5kZXg7Ci19Ci0KLUNh
bGxTaXRlSW5kZXggRXhjZXB0aW9uSGFuZGxlck1hbmFnZXI6OnByb2N1cmVDYWxsU2l0ZUluZGV4
KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgsIGNvbnN0IEpTQ2FsbCYgY2FsbCkKLXsKLSAg
ICByZXR1cm4gcHJvY3VyZUNhbGxTaXRlSW5kZXgoc3RhY2ttYXBSZWNvcmRJbmRleCwgY2FsbC5j
YWxsU2l0ZURlc2NyaXB0aW9uT3JpZ2luKCkpOwotfQotCi1DYWxsU2l0ZUluZGV4IEV4Y2VwdGlv
bkhhbmRsZXJNYW5hZ2VyOjpwcm9jdXJlQ2FsbFNpdGVJbmRleCh1aW50MzJfdCBzdGFja21hcFJl
Y29yZEluZGV4LCBjb25zdCBKU0NhbGxWYXJhcmdzJiBjYWxsKQotewotICAgIHJldHVybiBwcm9j
dXJlQ2FsbFNpdGVJbmRleChzdGFja21hcFJlY29yZEluZGV4LCBjYWxsLmNhbGxTaXRlRGVzY3Jp
cHRpb25PcmlnaW4oKSk7Ci19Ci0KLUNhbGxTaXRlSW5kZXggRXhjZXB0aW9uSGFuZGxlck1hbmFn
ZXI6OnByb2N1cmVDYWxsU2l0ZUluZGV4KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgsIGNv
bnN0IEpTVGFpbENhbGwmIGNhbGwpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHN0YWNrbWFwUmVjb3Jk
SW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTShjYWxsKTsKLSAgICAvLyBXZSBkb24ndCBuZWVkIHRv
IGdlbmVyYXRlIGEgY2FsbCBzaXRlIGluZGV4IGZvciB0YWlsIGNhbGxzCi0gICAgLy8gYmVjYXVz
ZSB0aGV5IGRvbid0IHN0b3JlIGEgQ2FsbFNpdGVJbmRleCBvbiB0aGUgY2FsbCBmcmFtZS4KLSAg
ICByZXR1cm4gQ2FsbFNpdGVJbmRleCgpOwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkgJiYgIUZUTF9VU0VTX0IzCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25IYW5kbGVyTWFu
YWdlci5oCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOTAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVm
IEZUTEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyX2gKLSNkZWZpbmUgRlRMRXhjZXB0aW9uSGFuZGxl
ck1hbmFnZXJfaAotCi0jaW5jbHVkZSAiREZHQ29tbW9uLmgiCi0KLSNpZiBFTkFCTEUoRlRMX0pJ
VCkgJiYgIUZUTF9VU0VTX0IzCi0KLSNpbmNsdWRlICJDYWxsRnJhbWUuaCIKLSNpbmNsdWRlICJG
VExKU0NhbGwuaCIKLSNpbmNsdWRlICJGVExKU0NhbGxWYXJhcmdzLmgiCi0jaW5jbHVkZSAiRlRM
SlNUYWlsQ2FsbC5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLS8vIFRo
aXMgY2xhc3MgaXMgaW50ZW50ZWQgdG8gYmUgdXNlZCBkdXJpbmcgRlRMQ29tcGlsZSB0byBtYW5h
Z2Ugc29tZSBjb21tb24gdGFza3MKLS8vIG5lZWRlZCB0byBxdWVyeSB0aGUgY29ycmVzcG9uZGVu
Y2UgYmV0d2VlbiBzdGFja21hcCByZWNvcmRzIGFuZCBPU1IgZXhpdHMgdGhhdCBhcmUKLS8vIGV4
Y2VwdGlvbiBoYW5kbGVycy4gVGhlIG9ubHkga2luZCBvZiBPU1IgZXhpdHMgd2Uga2VlcCBhcmUg
dGhvc2UgT1NSIGV4aXRzIHRoYXQKLS8vIGNvcnJlc3BvbmQgdG8gZXhjZXB0aW9ucyBmcm9tIHBh
dGNocG9pbnRzLiBUaGF0IG1lYW5zIGV4aXRzIGZyb20gbGF6eSBzbG93IHBhdGhzLAotLy8gSlMg
Y2FsbHMsIEdldC9QdXQgQnlJZCwgZXRjLiBOb3RlOiB0aGlzIG1lYW5zIHdlIGRvbid0IGtlZXAg
dHJhY2sgb2YgZXhjZXB0aW9uIGNoZWNrcwotLy8gYWZ0ZXIgQyBjYWxscyBiZWNhdXNlIHRob3Nl
IGFyZSBtb2RlbGVkIGV4cGxpY3RseSBpbiBMTFZNIElSIGFzIGEgYnJhbmNoIHRvIGEgc3RhY2tt
YXAKLS8vIGludHJpbnNpYy4gVGhlc2UgcGF0Y2hwb2ludCBPU1IgZXhpdHMgdGhhdCB0aGlzIGNs
YXNzIGtlZXBzIHRyYWNrIG9mIGFyZSBub3QgYnJhbmNoZWQgdG8KLS8vIGRpcmVjdGx5IHdpdGhp
biBMTFZNIElSLiAgV2UganVtcCB0byB0aGVzZSBPU1IgZXhpdHMgZnJvbSBnZW5lcmF0ZWQgcGF0
Y2hwb2ludCBjb2RlLAotLy8gZnJvbSBnZW5lcmljVW53aW5kKCksIG9yIGZyb20gRlRMOjpjYWxs
T3BlcmF0aW9uKCkuCi0gICAgCi1jbGFzcyBTdGF0ZTsKLQotY2xhc3MgRXhjZXB0aW9uSGFuZGxl
ck1hbmFnZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEV4Y2VwdGlvbkhhbmRsZXJNYW5h
Z2VyKTsKLQotcHVibGljOgotICAgIEV4Y2VwdGlvbkhhbmRsZXJNYW5hZ2VyKFN0YXRlJiBzdGF0
ZSk7Ci0KLSAgICB2b2lkIGFkZE5ld0V4aXQodWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleCwg
c2l6ZV90IG9zckV4aXRJbmRleCk7Ci0gICAgdm9pZCBhZGROZXdDYWxsT3BlcmF0aW9uRXhpdCh1
aW50MzJfdCBzdGFja21hcFJlY29yZEluZGV4LCBzaXplX3Qgb3NyRXhpdEluZGV4KTsKLQotICAg
IC8vIFRoZXNlIGZ1bmN0aW9ucyBvbmx5IG1ha2Ugc2Vuc2UgdG8gYmUgY2FsbGVkIGFmdGVyIHdl
J3ZlIGdlbmVyYXRlZCB0aGUgT1NSCi0gICAgLy8gZXhpdCB0aHVua3MgYW5kIGFsbG9jYXRlZCB0
aGUgT1NSIGV4aXQgdGh1bmtzJyBsaW5rIGJ1ZmZlci4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBj
YWxsT3BlcmF0aW9uRXhjZXB0aW9uVGFyZ2V0KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgp
OwotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhenlTbG93UGF0aEV4Y2VwdGlvblRhcmdldCh1aW50
MzJfdCBzdGFja21hcFJlY29yZEluZGV4KTsKLQotICAgIE9TUkV4aXQqIGNhbGxPcGVyYXRpb25P
U1JFeGl0KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgpOwotICAgIE9TUkV4aXQqIGdldENh
bGxPU1JFeGl0KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgsIGNvbnN0IEpTQ2FsbCYpOwot
ICAgIE9TUkV4aXQqIGdldENhbGxPU1JFeGl0KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5kZXgs
IGNvbnN0IEpTVGFpbENhbGwmKTsKLSAgICBPU1JFeGl0KiBnZXRDYWxsT1NSRXhpdCh1aW50MzJf
dCBzdGFja21hcFJlY29yZEluZGV4LCBjb25zdCBKU0NhbGxWYXJhcmdzJik7Ci0KLSAgICBDYWxs
U2l0ZUluZGV4IHByb2N1cmVDYWxsU2l0ZUluZGV4KHVpbnQzMl90IHN0YWNrbWFwUmVjb3JkSW5k
ZXgsIENvZGVPcmlnaW4pOwotICAgIENhbGxTaXRlSW5kZXggcHJvY3VyZUNhbGxTaXRlSW5kZXgo
dWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleCwgY29uc3QgSlNDYWxsJik7Ci0gICAgQ2FsbFNp
dGVJbmRleCBwcm9jdXJlQ2FsbFNpdGVJbmRleCh1aW50MzJfdCBzdGFja21hcFJlY29yZEluZGV4
LCBjb25zdCBKU1RhaWxDYWxsJik7Ci0gICAgQ2FsbFNpdGVJbmRleCBwcm9jdXJlQ2FsbFNpdGVJ
bmRleCh1aW50MzJfdCBzdGFja21hcFJlY29yZEluZGV4LCBjb25zdCBKU0NhbGxWYXJhcmdzJik7
Ci0gICAgT1NSRXhpdCoganNDYWxsT1NSRXhpdCh1aW50MzJfdCBzdGFja21hcFJlY29yZEluZGV4
KTsKLQotcHJpdmF0ZToKLSAgICBPU1JFeGl0KiBnZXRDYWxsT1NSRXhpdENvbW1vbih1aW50MzJf
dCBzdGFja21hcFJlY29yZEluZGV4KTsKLQotICAgIFN0YXRlJiBtX3N0YXRlOwotICAgIHR5cGVk
ZWYgSGFzaE1hcDx1aW50MzJfdCwgc2l6ZV90LCBXVEY6OkludEhhc2g8dWludDMyX3Q+LCBXVEY6
OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gUmVjb3JkSW5kZXhUb09T
UkV4aXRJbmRleE1hcDsKLSAgICBSZWNvcmRJbmRleFRvT1NSRXhpdEluZGV4TWFwIG1fbWFwOwot
ICAgIFJlY29yZEluZGV4VG9PU1JFeGl0SW5kZXhNYXAgbV9jYWxsT3BlcmF0aW9uTWFwOwotfTsK
LQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQp
ICYmICFGVExfVVNFU19CMwotCi0jZW5kaWYgLy8gRlRMRXhjZXB0aW9uSGFuZGxlck1hbmFnZXJf
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGNlcHRpb25UYXJnZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9uVGFy
Z2V0LmNwcAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExFeGNlcHRpb25UYXJnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRlRMRXhjZXB0aW9uVGFyZ2V0LmgiCiAKLSNp
ZiBFTkFCTEUoRlRMX0pJVCkgJiYgRlRMX1VTRVNfQjMKKyNpZiBFTkFCTEUoRlRMX0pJVCkKIAog
I2luY2x1ZGUgIkZUTFN0YXRlLmgiCiAKQEAgLTcyLDUgKzcyLDUgQEAgRXhjZXB0aW9uVGFyZ2V0
OjpFeGNlcHRpb25UYXJnZXQoCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAotI2VuZGlm
IC8vIEVOQUJMRShGVExfSklUKSAmJiBGVExfVVNFU19CMworI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4Y2VwdGlvblRhcmdl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhjZXB0aW9u
VGFyZ2V0LmgJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRXhjZXB0aW9uVGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAog
I2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogCi0jaWYgRU5BQkxFKEZUTF9KSVQpICYmIEZUTF9VU0VT
X0IzCisjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNp
bmNsdWRlICJGVExPU1JFeGl0SGFuZGxlLmgiCkBAIC02Miw3ICs2Miw3IEBAIHByaXZhdGU6CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKSAm
JiBGVExfVVNFU19CMworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogCiAjZW5kaWYgLy8gRlRM
RXhjZXB0aW9uVGFyZ2V0X2gKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExF
eGl0VGh1bmtHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTk2Njg1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZUTEV4aXRUaHVu
a0dlbmVyYXRvci5oIgotCi0jaWYgRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwotCi0j
aW5jbHVkZSAiRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIgotI2luY2x1ZGUgIkZUTFN0YXRl
LmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKLQotdXNpbmcgbmFtZXNwYWNl
IEpTQzo6REZHOwotCi1FeGl0VGh1bmtHZW5lcmF0b3I6OkV4aXRUaHVua0dlbmVyYXRvcihTdGF0
ZSYgc3RhdGUpCi0gICAgOiBDQ2FsbEhlbHBlcnMoJnN0YXRlLmdyYXBoLm1fdm0sIHN0YXRlLmdy
YXBoLm1fY29kZUJsb2NrKQotICAgICwgbV9zdGF0ZShzdGF0ZSkKLSAgICAsIG1fZGlkVGhpbmdz
KGZhbHNlKQotewotfQotCi1FeGl0VGh1bmtHZW5lcmF0b3I6On5FeGl0VGh1bmtHZW5lcmF0b3Io
KQotewotfQotCi12b2lkIEV4aXRUaHVua0dlbmVyYXRvcjo6ZW1pdFRodW5rKHVuc2lnbmVkIGlu
ZGV4KQotewotICAgIE9TUkV4aXQmIGV4aXQgPSBtX3N0YXRlLmppdENvZGUtPm9zckV4aXRbaW5k
ZXhdOwotICAgIEFTU0VSVF9VTlVTRUQoZXhpdCwgIShleGl0LmlzR2VuZXJpY1Vud2luZEhhbmRs
ZXIoKSAmJiBleGl0LndpbGxBcnJpdmVBdE9TUkV4aXRGcm9tQ2FsbE9wZXJhdGlvbigpKSk7Ci0g
ICAgCi0gICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fc3RhdGUuZmluYWxpemVy
LT5vc3JFeGl0W2luZGV4XTsKLSAgICBpbmZvLm1fdGh1bmtMYWJlbCA9IGxhYmVsKCk7Ci0KLSAg
ICBwdXNoVG9TYXZlSW1tZWRpYXRlV2l0aG91dFRvdWNoaW5nUmVnaXN0ZXJzKFRydXN0ZWRJbW0z
MihpbmRleCkpOwotICAgIGluZm8ubV90aHVua0p1bXAgPSBwYXRjaGFibGVKdW1wKCk7Ci0gICAg
Ci0gICAgbV9kaWRUaGluZ3MgPSB0cnVlOwotfQotCi12b2lkIEV4aXRUaHVua0dlbmVyYXRvcjo6
ZW1pdFRodW5rcygpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RhdGUuZmlu
YWxpemVyLT5vc3JFeGl0LnNpemUoKTsgKytpKQotICAgICAgICBlbWl0VGh1bmsoaSk7Ci19Ci0K
LX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKLQotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKSAm
JiAhRlRMX1VTRVNfQjMKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0
VGh1bmtHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEV4aXRUaHVua0dlbmVyYXRvci5oCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2lmbmRlZiBGVExFeGl0VGh1bmtHZW5lcmF0b3JfaAotI2RlZmluZSBGVExFeGl0VGh1
bmtHZW5lcmF0b3JfaAotCi0jaW5jbHVkZSAiREZHQ29tbW9uLmgiCi0KLSNpZiBFTkFCTEUoRlRM
X0pJVCkgJiYgIUZUTF9VU0VTX0IzCi0KLSNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLQotbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewotCi1jbGFzcyBTdGF0ZTsKLXN0cnVjdCBPU1JF
eGl0Q29tcGlsYXRpb25JbmZvOwotCi1jbGFzcyBFeGl0VGh1bmtHZW5lcmF0b3IgOiBwdWJsaWMg
Q0NhbGxIZWxwZXJzIHsKLXB1YmxpYzoKLSAgICBFeGl0VGh1bmtHZW5lcmF0b3IoU3RhdGUmIHN0
YXRlKTsKLSAgICB+RXhpdFRodW5rR2VuZXJhdG9yKCk7Ci0gICAgCi0gICAgdm9pZCBlbWl0VGh1
bmsodW5zaWduZWQgaW5kZXgpOwotICAgIHZvaWQgZW1pdFRodW5rcygpOwotICAgIAotICAgIGJv
b2wgZGlkVGhpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9kaWRUaGluZ3M7IH0KLQotcHJpdmF0ZToK
LSAgICBTdGF0ZSYgbV9zdGF0ZTsKLSAgICBib29sIG1fZGlkVGhpbmdzOwotfTsKLQotfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYmICFGVExf
VVNFU19CMwotCi0jZW5kaWYgLy8gRlRMRXhpdFRodW5rR2VuZXJhdG9yX2gKLQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGYWlsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZhaWwuY3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZhaWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3
ICszMCw2IEBACiAKICNpbmNsdWRlICJERkdGYWlsZWRGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJG
VExKSVRDb2RlLmgiCi0jaW5jbHVkZSAiTExWTUFQSS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CiAKQEAgLTM5LDExICszOCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBERkc7CiB2
b2lkIGZhaWwoU3RhdGUmIHN0YXRlKQogewogICAgIHN0YXRlLmdyYXBoLm1fcGxhbi5maW5hbGl6
ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEZhaWxlZEZpbmFsaXplcj4oc3RhdGUuZ3JhcGgubV9wbGFu
KTsKLSAgICAKLSNpZiAhRlRMX1VTRVNfQjMKLSAgICBpZiAoc3RhdGUubW9kdWxlKQotICAgICAg
ICBsbHZtLT5EaXNwb3NlTW9kdWxlKHN0YXRlLm1vZHVsZSk7Ci0jZW5kaWYKIH0KIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJ
bmxpbmVDYWNoZURlc2NyaXB0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oCShyZXZpc2lvbiAxOTY2ODUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDM1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3Jf
aAotI2RlZmluZSBGVExJbmxpbmVDYWNoZURlc2NyaXB0b3JfaAotCi0jaWYgRU5BQkxFKEZUTF9K
SVQpCi0KLSNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCi0jaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1
ZS5oIgotI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJGVExJbmxpbmVDYWNo
ZVNpemUuaCIKLSNpbmNsdWRlICJGVExMYXp5U2xvd1BhdGguaCIKLSNpbmNsdWRlICJKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvci5oIgotI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCi0jaW5jbHVk
ZSAiU25pcHBldE9wZXJhbmQuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9VbmlxdWVkU3RyaW5nSW1w
bC5oPgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLWNsYXNzIExvY2F0aW9u
OwotCi1jbGFzcyBJbmxpbmVDYWNoZURlc2NyaXB0b3IgewotcHVibGljOgotICAgIElubGluZUNh
Y2hlRGVzY3JpcHRvcigpIAotICAgIHsgfQotICAgIAotICAgIElubGluZUNhY2hlRGVzY3JpcHRv
cih1bnNpZ25lZCBzdGFja21hcElELCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpCi0gICAgICAgIDogbV9zdGFja21hcElEKHN0YWNrbWFwSUQpCi0gICAgICAg
ICwgbV9jb2RlT3JpZ2luKGNvZGVPcmlnaW4pCi0gICAgICAgICwgbV91aWQodWlkKQotICAgIHsK
LSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgc3RhY2ttYXBJRCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhY2ttYXBJRDsgfQotICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fY29kZU9yaWdpbjsgfQotICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQoKSBjb25zdCB7IHJl
dHVybiBtX3VpZDsgfQotICAgIAotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX3N0YWNrbWFwSUQ7
Ci0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47Ci0gICAgVW5pcXVlZFN0cmluZ0ltcGwqIG1f
dWlkOwotICAgIAotcHVibGljOgotICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcD4gbV9z
bG93UGF0aERvbmU7Ci19OwotCi1jbGFzcyBHZXRCeUlkRGVzY3JpcHRvciA6IHB1YmxpYyBJbmxp
bmVDYWNoZURlc2NyaXB0b3IgewotcHVibGljOgotICAgIEdldEJ5SWREZXNjcmlwdG9yKCkgeyB9
Ci0gICAgCi0gICAgR2V0QnlJZERlc2NyaXB0b3IodW5zaWduZWQgc3RhY2ttYXBJRCwgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotICAgICAgICA6IElubGlu
ZUNhY2hlRGVzY3JpcHRvcihzdGFja21hcElELCBjb2RlT3JpZ2luLCB1aWQpCi0gICAgewotICAg
IH0KLSAgICAKLSAgICBWZWN0b3I8SklUR2V0QnlJZEdlbmVyYXRvcj4gbV9nZW5lcmF0b3JzOwot
fTsKLQotY2xhc3MgUHV0QnlJZERlc2NyaXB0b3IgOiBwdWJsaWMgSW5saW5lQ2FjaGVEZXNjcmlw
dG9yIHsKLXB1YmxpYzoKLSAgICBQdXRCeUlkRGVzY3JpcHRvcigpIHsgfQotICAgIAotICAgIFB1
dEJ5SWREZXNjcmlwdG9yKAotICAgICAgICB1bnNpZ25lZCBzdGFja21hcElELCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsCi0gICAgICAgIEVDTUFNb2RlIGVj
bWFNb2RlLCBQdXRLaW5kIHB1dEtpbmQpCi0gICAgICAgIDogSW5saW5lQ2FjaGVEZXNjcmlwdG9y
KHN0YWNrbWFwSUQsIGNvZGVPcmlnaW4sIHVpZCkKLSAgICAgICAgLCBtX2VjbWFNb2RlKGVjbWFN
b2RlKQotICAgICAgICAsIG1fcHV0S2luZChwdXRLaW5kKQotICAgIHsKLSAgICB9Ci0gICAgCi0g
ICAgVmVjdG9yPEpJVFB1dEJ5SWRHZW5lcmF0b3I+IG1fZ2VuZXJhdG9yczsKLSAgICAKLSAgICBF
Q01BTW9kZSBlY21hTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWNtYU1vZGU7IH0KLSAgICBQdXRL
aW5kIHB1dEtpbmQoKSBjb25zdCB7IHJldHVybiBtX3B1dEtpbmQ7IH0KLQotcHJpdmF0ZToKLSAg
ICBFQ01BTW9kZSBtX2VjbWFNb2RlOwotICAgIFB1dEtpbmQgbV9wdXRLaW5kOwotfTsKLQotc3Ry
dWN0IENoZWNrSW5HZW5lcmF0b3IgewotICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBtX3N0dWI7Ci0g
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9zbG93Q2FsbDsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgbV9iZWdpbkxhYmVsOwotCi0gICAgQ2hlY2tJbkdlbmVyYXRvcihTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YiwgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgc2xvd0NhbGwsIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBiZWdpbkxhYmVsKQotICAgICAgICA6IG1fc3R1YihzdHViKSAKLSAgICAgICAgLCBt
X3Nsb3dDYWxsKHNsb3dDYWxsKQotICAgICAgICAsIG1fYmVnaW5MYWJlbChiZWdpbkxhYmVsKQot
ICAgIHsKLSAgICB9Ci19OwotCi1jbGFzcyBDaGVja0luRGVzY3JpcHRvciA6IHB1YmxpYyBJbmxp
bmVDYWNoZURlc2NyaXB0b3IgewotcHVibGljOgotICAgIENoZWNrSW5EZXNjcmlwdG9yKCkgeyB9
Ci0gICAgCi0gICAgQ2hlY2tJbkRlc2NyaXB0b3IodW5zaWduZWQgc3RhY2ttYXBJRCwgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotICAgICAgICA6IElubGlu
ZUNhY2hlRGVzY3JpcHRvcihzdGFja21hcElELCBjb2RlT3JpZ2luLCB1aWQpCi0gICAgewotICAg
IH0KLSAgICAKLSAgICBWZWN0b3I8Q2hlY2tJbkdlbmVyYXRvcj4gbV9nZW5lcmF0b3JzOwotfTsK
LQotY2xhc3MgQmluYXJ5T3BEZXNjcmlwdG9yIDogcHVibGljIElubGluZUNhY2hlRGVzY3JpcHRv
ciB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoKlNsb3dQYXRoRnVuY3Rp
b24pKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIpOwotCi0gICAgdW5zaWduZWQgbm9kZVR5cGUoKSBjb25zdCB7IHJldHVybiBt
X25vZGVUeXBlOyB9Ci0gICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0K
LSAgICBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgU2xv
d1BhdGhGdW5jdGlvbiBzbG93UGF0aEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zbG93UGF0
aEZ1bmN0aW9uOyB9Ci0KLSAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZCgpIHsgcmV0dXJu
IG1fbGVmdE9wZXJhbmQ7IH0KLSAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQoKSB7IHJl
dHVybiBtX3JpZ2h0T3BlcmFuZDsgfQotCi0gICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpMYWJl
bD4gbV9zbG93UGF0aFN0YXJ0czsKLQotcHJvdGVjdGVkOgotICAgIEJpbmFyeU9wRGVzY3JpcHRv
cih1bnNpZ25lZCBub2RlVHlwZSwgdW5zaWduZWQgc3RhY2ttYXBJRCwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLAotICAgICAgICBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciogbmFtZSwgU2xvd1BhdGhG
dW5jdGlvbiBzbG93UGF0aEZ1bmN0aW9uLAotICAgICAgICBjb25zdCBTbmlwcGV0T3BlcmFuZCYg
bGVmdE9wZXJhbmQsIGNvbnN0IFNuaXBwZXRPcGVyYW5kJiByaWdodE9wZXJhbmQpCi0gICAgICAg
IDogSW5saW5lQ2FjaGVEZXNjcmlwdG9yKHN0YWNrbWFwSUQsIGNvZGVPcmlnaW4sIG51bGxwdHIp
Ci0gICAgICAgICwgbV9ub2RlVHlwZShub2RlVHlwZSkKLSAgICAgICAgLCBtX3NpemUoc2l6ZSkK
LSAgICAgICAgLCBtX25hbWUobmFtZSkKLSAgICAgICAgLCBtX3Nsb3dQYXRoRnVuY3Rpb24oc2xv
d1BhdGhGdW5jdGlvbikKLSAgICAgICAgLCBtX2xlZnRPcGVyYW5kKGxlZnRPcGVyYW5kKQotICAg
ICAgICAsIG1fcmlnaHRPcGVyYW5kKHJpZ2h0T3BlcmFuZCkKLSAgICB7Ci0gICAgfQotCi0gICAg
dW5zaWduZWQgbV9ub2RlVHlwZTsKLSAgICBzaXplX3QgbV9zaXplOwotICAgIGNvbnN0IGNoYXIq
IG1fbmFtZTsKLSAgICBTbG93UGF0aEZ1bmN0aW9uIG1fc2xvd1BhdGhGdW5jdGlvbjsKLQotICAg
IFNuaXBwZXRPcGVyYW5kIG1fbGVmdE9wZXJhbmQ7Ci0gICAgU25pcHBldE9wZXJhbmQgbV9yaWdo
dE9wZXJhbmQ7Ci19OwotCi1jbGFzcyBCaXRBbmREZXNjcmlwdG9yIDogcHVibGljIEJpbmFyeU9w
RGVzY3JpcHRvciB7Ci1wdWJsaWM6Ci0gICAgQml0QW5kRGVzY3JpcHRvcih1bnNpZ25lZCBzdGFj
a21hcElELCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IFNuaXBwZXRPcGVyYW5kJiBsZWZ0
T3BlcmFuZCwgY29uc3QgU25pcHBldE9wZXJhbmQmIHJpZ2h0T3BlcmFuZCkKLSAgICAgICAgOiBC
aW5hcnlPcERlc2NyaXB0b3Iobm9kZVR5cGUoKSwgc3RhY2ttYXBJRCwgY29kZU9yaWdpbiwgaWNT
aXplKCksIG9wTmFtZSgpLCBzbG93UGF0aEZ1bmN0aW9uKCksIGxlZnRPcGVyYW5kLCByaWdodE9w
ZXJhbmQpCi0gICAgeyB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IGljU2l6ZSgpIHsgcmV0dXJuIHNp
emVPZkJpdEFuZCgpOyB9Ci0gICAgc3RhdGljIHVuc2lnbmVkIG5vZGVUeXBlKCkgeyByZXR1cm4g
REZHOjpCaXRBbmQ7IH0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4g
IkJpdEFuZCI7IH0KLSAgICBzdGF0aWMgSl9KSVRPcGVyYXRpb25fRUpKIHNsb3dQYXRoRnVuY3Rp
b24oKSB7IHJldHVybiBERkc6Om9wZXJhdGlvblZhbHVlQml0QW5kOyB9Ci0gICAgc3RhdGljIEpf
SklUT3BlcmF0aW9uX0VKSiBub25OdW1iZXJTbG93UGF0aEZ1bmN0aW9uKCkgeyByZXR1cm4gc2xv
d1BhdGhGdW5jdGlvbigpOyB9Ci19OwotCi1jbGFzcyBCaXRPckRlc2NyaXB0b3IgOiBwdWJsaWMg
QmluYXJ5T3BEZXNjcmlwdG9yIHsKLXB1YmxpYzoKLSAgICBCaXRPckRlc2NyaXB0b3IodW5zaWdu
ZWQgc3RhY2ttYXBJRCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBTbmlwcGV0T3BlcmFu
ZCYgbGVmdE9wZXJhbmQsIGNvbnN0IFNuaXBwZXRPcGVyYW5kJiByaWdodE9wZXJhbmQpCi0gICAg
ICAgIDogQmluYXJ5T3BEZXNjcmlwdG9yKG5vZGVUeXBlKCksIHN0YWNrbWFwSUQsIGNvZGVPcmln
aW4sIGljU2l6ZSgpLCBvcE5hbWUoKSwgc2xvd1BhdGhGdW5jdGlvbigpLCBsZWZ0T3BlcmFuZCwg
cmlnaHRPcGVyYW5kKQotICAgIHsgfQotCi0gICAgc3RhdGljIHNpemVfdCBpY1NpemUoKSB7IHJl
dHVybiBzaXplT2ZCaXRPcigpOyB9Ci0gICAgc3RhdGljIHVuc2lnbmVkIG5vZGVUeXBlKCkgeyBy
ZXR1cm4gREZHOjpCaXRPcjsgfQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBvcE5hbWUoKSB7IHJl
dHVybiAiQml0T3IiOyB9Ci0gICAgc3RhdGljIEpfSklUT3BlcmF0aW9uX0VKSiBzbG93UGF0aEZ1
bmN0aW9uKCkgeyByZXR1cm4gREZHOjpvcGVyYXRpb25WYWx1ZUJpdE9yOyB9Ci0gICAgc3RhdGlj
IEpfSklUT3BlcmF0aW9uX0VKSiBub25OdW1iZXJTbG93UGF0aEZ1bmN0aW9uKCkgeyByZXR1cm4g
c2xvd1BhdGhGdW5jdGlvbigpOyB9Ci19OwotCi1jbGFzcyBCaXRYb3JEZXNjcmlwdG9yIDogcHVi
bGljIEJpbmFyeU9wRGVzY3JpcHRvciB7Ci1wdWJsaWM6Ci0gICAgQml0WG9yRGVzY3JpcHRvcih1
bnNpZ25lZCBzdGFja21hcElELCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IFNuaXBwZXRP
cGVyYW5kJiBsZWZ0T3BlcmFuZCwgY29uc3QgU25pcHBldE9wZXJhbmQmIHJpZ2h0T3BlcmFuZCkK
LSAgICAgICAgOiBCaW5hcnlPcERlc2NyaXB0b3Iobm9kZVR5cGUoKSwgc3RhY2ttYXBJRCwgY29k
ZU9yaWdpbiwgaWNTaXplKCksIG9wTmFtZSgpLCBzbG93UGF0aEZ1bmN0aW9uKCksIGxlZnRPcGVy
YW5kLCByaWdodE9wZXJhbmQpCi0gICAgeyB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IGljU2l6ZSgp
IHsgcmV0dXJuIHNpemVPZkJpdFhvcigpOyB9Ci0gICAgc3RhdGljIHVuc2lnbmVkIG5vZGVUeXBl
KCkgeyByZXR1cm4gREZHOjpCaXRYb3I7IH0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogb3BOYW1l
KCkgeyByZXR1cm4gIkJpdFhvciI7IH0KLSAgICBzdGF0aWMgSl9KSVRPcGVyYXRpb25fRUpKIHNs
b3dQYXRoRnVuY3Rpb24oKSB7IHJldHVybiBERkc6Om9wZXJhdGlvblZhbHVlQml0WG9yOyB9Ci0g
ICAgc3RhdGljIEpfSklUT3BlcmF0aW9uX0VKSiBub25OdW1iZXJTbG93UGF0aEZ1bmN0aW9uKCkg
eyByZXR1cm4gc2xvd1BhdGhGdW5jdGlvbigpOyB9Ci19OwotCi1jbGFzcyBCaXRMU2hpZnREZXNj
cmlwdG9yIDogcHVibGljIEJpbmFyeU9wRGVzY3JpcHRvciB7Ci1wdWJsaWM6Ci0gICAgQml0TFNo
aWZ0RGVzY3JpcHRvcih1bnNpZ25lZCBzdGFja21hcElELCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IGNvbnN0IFNuaXBwZXRPcGVyYW5kJiBsZWZ0T3BlcmFuZCwgY29uc3QgU25pcHBldE9wZXJhbmQm
IHJpZ2h0T3BlcmFuZCkKLSAgICAgICAgOiBCaW5hcnlPcERlc2NyaXB0b3Iobm9kZVR5cGUoKSwg
c3RhY2ttYXBJRCwgY29kZU9yaWdpbiwgaWNTaXplKCksIG9wTmFtZSgpLCBzbG93UGF0aEZ1bmN0
aW9uKCksIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpCi0gICAgeyB9Ci0KLSAgICBzdGF0aWMg
c2l6ZV90IGljU2l6ZSgpIHsgcmV0dXJuIHNpemVPZkJpdExTaGlmdCgpOyB9Ci0gICAgc3RhdGlj
IHVuc2lnbmVkIG5vZGVUeXBlKCkgeyByZXR1cm4gREZHOjpCaXRMU2hpZnQ7IH0KLSAgICBzdGF0
aWMgY29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1cm4gIkJpdExTaGlmdCI7IH0KLSAgICBzdGF0
aWMgSl9KSVRPcGVyYXRpb25fRUpKIHNsb3dQYXRoRnVuY3Rpb24oKSB7IHJldHVybiBERkc6Om9w
ZXJhdGlvblZhbHVlQml0TFNoaWZ0OyB9Ci0gICAgc3RhdGljIEpfSklUT3BlcmF0aW9uX0VKSiBu
b25OdW1iZXJTbG93UGF0aEZ1bmN0aW9uKCkgeyByZXR1cm4gc2xvd1BhdGhGdW5jdGlvbigpOyB9
Ci19OwotCi1jbGFzcyBCaXRSU2hpZnREZXNjcmlwdG9yIDogcHVibGljIEJpbmFyeU9wRGVzY3Jp
cHRvciB7Ci1wdWJsaWM6Ci0gICAgQml0UlNoaWZ0RGVzY3JpcHRvcih1bnNpZ25lZCBzdGFja21h
cElELCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IFNuaXBwZXRPcGVyYW5kJiBsZWZ0T3Bl
cmFuZCwgY29uc3QgU25pcHBldE9wZXJhbmQmIHJpZ2h0T3BlcmFuZCkKLSAgICAgICAgOiBCaW5h
cnlPcERlc2NyaXB0b3Iobm9kZVR5cGUoKSwgc3RhY2ttYXBJRCwgY29kZU9yaWdpbiwgaWNTaXpl
KCksIG9wTmFtZSgpLCBzbG93UGF0aEZ1bmN0aW9uKCksIGxlZnRPcGVyYW5kLCByaWdodE9wZXJh
bmQpCi0gICAgeyB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IGljU2l6ZSgpIHsgcmV0dXJuIHNpemVP
ZkJpdFJTaGlmdCgpOyB9Ci0gICAgc3RhdGljIHVuc2lnbmVkIG5vZGVUeXBlKCkgeyByZXR1cm4g
REZHOjpCaXRSU2hpZnQ7IH0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogb3BOYW1lKCkgeyByZXR1
cm4gIkJpdFJTaGlmdCI7IH0KLSAgICBzdGF0aWMgSl9KSVRPcGVyYXRpb25fRUpKIHNsb3dQYXRo
RnVuY3Rpb24oKSB7IHJldHVybiBERkc6Om9wZXJhdGlvblZhbHVlQml0UlNoaWZ0OyB9Ci0gICAg
c3RhdGljIEpfSklUT3BlcmF0aW9uX0VKSiBub25OdW1iZXJTbG93UGF0aEZ1bmN0aW9uKCkgeyBy
ZXR1cm4gc2xvd1BhdGhGdW5jdGlvbigpOyB9Ci19OwotCi1jbGFzcyBCaXRVUlNoaWZ0RGVzY3Jp
cHRvciA6IHB1YmxpYyBCaW5hcnlPcERlc2NyaXB0b3IgewotcHVibGljOgotICAgIEJpdFVSU2hp
ZnREZXNjcmlwdG9yKHVuc2lnbmVkIHN0YWNrbWFwSUQsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwg
Y29uc3QgU25pcHBldE9wZXJhbmQmIGxlZnRPcGVyYW5kLCBjb25zdCBTbmlwcGV0T3BlcmFuZCYg
cmlnaHRPcGVyYW5kKQotICAgICAgICA6IEJpbmFyeU9wRGVzY3JpcHRvcihub2RlVHlwZSgpLCBz
dGFja21hcElELCBjb2RlT3JpZ2luLCBpY1NpemUoKSwgb3BOYW1lKCksIHNsb3dQYXRoRnVuY3Rp
b24oKSwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCkKLSAgICB7IH0KLQotICAgIHN0YXRpYyBz
aXplX3QgaWNTaXplKCkgeyByZXR1cm4gc2l6ZU9mQml0VVJTaGlmdCgpOyB9Ci0gICAgc3RhdGlj
IHVuc2lnbmVkIG5vZGVUeXBlKCkgeyByZXR1cm4gREZHOjpCaXRVUlNoaWZ0OyB9Ci0gICAgc3Rh
dGljIGNvbnN0IGNoYXIqIG9wTmFtZSgpIHsgcmV0dXJuICJCaXRVUlNoaWZ0IjsgfQotICAgIHN0
YXRpYyBKX0pJVE9wZXJhdGlvbl9FSkogc2xvd1BhdGhGdW5jdGlvbigpIHsgcmV0dXJuIERGRzo6
b3BlcmF0aW9uVmFsdWVCaXRVUlNoaWZ0OyB9Ci0gICAgc3RhdGljIEpfSklUT3BlcmF0aW9uX0VK
SiBub25OdW1iZXJTbG93UGF0aEZ1bmN0aW9uKCkgeyByZXR1cm4gc2xvd1BhdGhGdW5jdGlvbigp
OyB9Ci19OwotCi1jbGFzcyBBcml0aERpdkRlc2NyaXB0b3IgOiBwdWJsaWMgQmluYXJ5T3BEZXNj
cmlwdG9yIHsKLXB1YmxpYzoKLSAgICBBcml0aERpdkRlc2NyaXB0b3IodW5zaWduZWQgc3RhY2tt
YXBJRCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBTbmlwcGV0T3BlcmFuZCYgbGVmdE9w
ZXJhbmQsIGNvbnN0IFNuaXBwZXRPcGVyYW5kJiByaWdodE9wZXJhbmQpCi0gICAgICAgIDogQmlu
YXJ5T3BEZXNjcmlwdG9yKG5vZGVUeXBlKCksIHN0YWNrbWFwSUQsIGNvZGVPcmlnaW4sIGljU2l6
ZSgpLCBvcE5hbWUoKSwgc2xvd1BhdGhGdW5jdGlvbigpLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVy
YW5kKQotICAgIHsgfQotCi0gICAgc3RhdGljIHNpemVfdCBpY1NpemUoKSB7IHJldHVybiBzaXpl
T2ZBcml0aERpdigpOyB9Ci0gICAgc3RhdGljIHVuc2lnbmVkIG5vZGVUeXBlKCkgeyByZXR1cm4g
REZHOjpBcml0aERpdjsgfQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBvcE5hbWUoKSB7IHJldHVy
biAiQXJpdGhEaXYiOyB9Ci0gICAgc3RhdGljIEpfSklUT3BlcmF0aW9uX0VKSiBzbG93UGF0aEZ1
bmN0aW9uKCkgeyByZXR1cm4gREZHOjpvcGVyYXRpb25WYWx1ZURpdjsgfQotICAgIHN0YXRpYyBK
X0pJVE9wZXJhdGlvbl9FSkogbm9uTnVtYmVyU2xvd1BhdGhGdW5jdGlvbigpIHsgcmV0dXJuIHNs
b3dQYXRoRnVuY3Rpb24oKTsgfQotfTsKLQotY2xhc3MgQXJpdGhNdWxEZXNjcmlwdG9yIDogcHVi
bGljIEJpbmFyeU9wRGVzY3JpcHRvciB7Ci1wdWJsaWM6Ci0gICAgQXJpdGhNdWxEZXNjcmlwdG9y
KHVuc2lnbmVkIHN0YWNrbWFwSUQsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3QgU25pcHBl
dE9wZXJhbmQmIGxlZnRPcGVyYW5kLCBjb25zdCBTbmlwcGV0T3BlcmFuZCYgcmlnaHRPcGVyYW5k
KQotICAgICAgICA6IEJpbmFyeU9wRGVzY3JpcHRvcihub2RlVHlwZSgpLCBzdGFja21hcElELCBj
b2RlT3JpZ2luLCBpY1NpemUoKSwgb3BOYW1lKCksIHNsb3dQYXRoRnVuY3Rpb24oKSwgbGVmdE9w
ZXJhbmQsIHJpZ2h0T3BlcmFuZCkKLSAgICB7IH0KLQotICAgIHN0YXRpYyBzaXplX3QgaWNTaXpl
KCkgeyByZXR1cm4gc2l6ZU9mQXJpdGhNdWwoKTsgfQotICAgIHN0YXRpYyB1bnNpZ25lZCBub2Rl
VHlwZSgpIHsgcmV0dXJuIERGRzo6QXJpdGhNdWw7IH0KLSAgICBzdGF0aWMgY29uc3QgY2hhciog
b3BOYW1lKCkgeyByZXR1cm4gIkFyaXRoTXVsIjsgfQotICAgIHN0YXRpYyBKX0pJVE9wZXJhdGlv
bl9FSkogc2xvd1BhdGhGdW5jdGlvbigpIHsgcmV0dXJuIERGRzo6b3BlcmF0aW9uVmFsdWVNdWw7
IH0KLSAgICBzdGF0aWMgSl9KSVRPcGVyYXRpb25fRUpKIG5vbk51bWJlclNsb3dQYXRoRnVuY3Rp
b24oKSB7IHJldHVybiBzbG93UGF0aEZ1bmN0aW9uKCk7IH0KLX07Ci0KLWNsYXNzIEFyaXRoU3Vi
RGVzY3JpcHRvciA6IHB1YmxpYyBCaW5hcnlPcERlc2NyaXB0b3IgewotcHVibGljOgotICAgIEFy
aXRoU3ViRGVzY3JpcHRvcih1bnNpZ25lZCBzdGFja21hcElELCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIGNvbnN0IFNuaXBwZXRPcGVyYW5kJiBsZWZ0T3BlcmFuZCwgY29uc3QgU25pcHBldE9wZXJh
bmQmIHJpZ2h0T3BlcmFuZCkKLSAgICAgICAgOiBCaW5hcnlPcERlc2NyaXB0b3Iobm9kZVR5cGUo
KSwgc3RhY2ttYXBJRCwgY29kZU9yaWdpbiwgaWNTaXplKCksIG9wTmFtZSgpLCBzbG93UGF0aEZ1
bmN0aW9uKCksIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpCi0gICAgeyB9Ci0KLSAgICBzdGF0
aWMgc2l6ZV90IGljU2l6ZSgpIHsgcmV0dXJuIHNpemVPZkFyaXRoU3ViKCk7IH0KLSAgICBzdGF0
aWMgdW5zaWduZWQgbm9kZVR5cGUoKSB7IHJldHVybiBERkc6OkFyaXRoU3ViOyB9Ci0gICAgc3Rh
dGljIGNvbnN0IGNoYXIqIG9wTmFtZSgpIHsgcmV0dXJuICJBcml0aFN1YiI7IH0KLSAgICBzdGF0
aWMgSl9KSVRPcGVyYXRpb25fRUpKIHNsb3dQYXRoRnVuY3Rpb24oKSB7IHJldHVybiBERkc6Om9w
ZXJhdGlvblZhbHVlU3ViOyB9Ci0gICAgc3RhdGljIEpfSklUT3BlcmF0aW9uX0VKSiBub25OdW1i
ZXJTbG93UGF0aEZ1bmN0aW9uKCkgeyByZXR1cm4gc2xvd1BhdGhGdW5jdGlvbigpOyB9Ci19Owot
Ci1jbGFzcyBWYWx1ZUFkZERlc2NyaXB0b3IgOiBwdWJsaWMgQmluYXJ5T3BEZXNjcmlwdG9yIHsK
LXB1YmxpYzoKLSAgICBWYWx1ZUFkZERlc2NyaXB0b3IodW5zaWduZWQgc3RhY2ttYXBJRCwgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBTbmlwcGV0T3BlcmFuZCYgbGVmdE9wZXJhbmQsIGNv
bnN0IFNuaXBwZXRPcGVyYW5kJiByaWdodE9wZXJhbmQpCi0gICAgICAgIDogQmluYXJ5T3BEZXNj
cmlwdG9yKG5vZGVUeXBlKCksIHN0YWNrbWFwSUQsIGNvZGVPcmlnaW4sIGljU2l6ZSgpLCBvcE5h
bWUoKSwgc2xvd1BhdGhGdW5jdGlvbigpLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKQotICAg
IHsgfQotCi0gICAgc3RhdGljIHNpemVfdCBpY1NpemUoKSB7IHJldHVybiBzaXplT2ZWYWx1ZUFk
ZCgpOyB9Ci0gICAgc3RhdGljIHVuc2lnbmVkIG5vZGVUeXBlKCkgeyByZXR1cm4gREZHOjpWYWx1
ZUFkZDsgfQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBvcE5hbWUoKSB7IHJldHVybiAiVmFsdWVB
ZGQiOyB9Ci0gICAgc3RhdGljIEpfSklUT3BlcmF0aW9uX0VKSiBzbG93UGF0aEZ1bmN0aW9uKCkg
eyByZXR1cm4gREZHOjpvcGVyYXRpb25WYWx1ZUFkZDsgfQotICAgIHN0YXRpYyBKX0pJVE9wZXJh
dGlvbl9FSkogbm9uTnVtYmVyU2xvd1BhdGhGdW5jdGlvbigpIHsgcmV0dXJuIERGRzo6b3BlcmF0
aW9uVmFsdWVBZGROb3ROdW1iZXI7IH0KLX07Ci0KLS8vIFlvdSBjYW4gY3JlYXRlIGEgbGF6eSBz
bG93IHBhdGggY2FsbCBpbiBsb3dlckRGR1RvTExWTSBieSBkb2luZzoKLS8vIG1fZnRsU3RhdGUu
bGF6eVNsb3dQYXRocy5hcHBlbmQoCi0vLyAgICAgTGF6eVNsb3dQYXRoRGVzY3JpcHRvcigKLS8v
ICAgICAgICAgc3RhY2ttYXBJRCwgY2FsbFNpdGVJbmRleCwKLS8vICAgICAgICAgY3JlYXRlU2hh
cmVkVGFzazxSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+KGNvbnN0IFZlY3RvcjxMb2Nh
dGlvbj4mKT4oCi0vLyAgICAgICAgICAgICBbXSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9j
YXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLS8vICAgICAgICAg
ICAgICAgICAvLyBUaGlzIGxhbWJkYSBzaG91bGQganVzdCByZWNvcmQgdGhlIHJlZ2lzdGVycyB0
aGF0IHdlIHdpbGwgYmUgdXNpbmcsIGFuZCByZXR1cm4KLS8vICAgICAgICAgICAgICAgICAvLyBh
IFNoYXJlZFRhc2sgdGhhdCB3aWxsIGFjdHVhbGx5IGdlbmVyYXRlIHRoZSBzbG93IHBhdGguCi0v
LyAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAotLy8gICAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbiwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2Nh
dGlvbnNbMV0uZGlyZWN0R1BSKCkpOwotLy8gICAgICAgICAgICAgfSkpKTsKLS8vCi0vLyBVc3Vh
bGx5LCB5b3UgY2FuIHVzZSB0aGUgTG93ZXJERkdUb0xMVk06OmxhenlTbG93UGF0aCgpIGhlbHBl
ciwgd2hpY2ggdGFrZXMgY2FyZSBvZiB0aGUgZGVzY3JpcHRvcgotLy8gZm9yIHlvdSBhbmQgYWxz
byBjcmVhdGVzIHRoZSBwYXRjaHBvaW50LgotdHlwZWRlZiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpH
ZW5lcmF0b3I+IExhenlTbG93UGF0aExpbmtlckZ1bmN0aW9uKGNvbnN0IFZlY3RvcjxMb2NhdGlv
bj4mKTsKLXR5cGVkZWYgU2hhcmVkVGFzazxMYXp5U2xvd1BhdGhMaW5rZXJGdW5jdGlvbj4gTGF6
eVNsb3dQYXRoTGlua2VyVGFzazsKLWNsYXNzIExhenlTbG93UGF0aERlc2NyaXB0b3IgOiBwdWJs
aWMgSW5saW5lQ2FjaGVEZXNjcmlwdG9yIHsKLXB1YmxpYzoKLSAgICBMYXp5U2xvd1BhdGhEZXNj
cmlwdG9yKCkgeyB9Ci0KLSAgICBMYXp5U2xvd1BhdGhEZXNjcmlwdG9yKAotICAgICAgICB1bnNp
Z25lZCBzdGFja21hcElELCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sCi0gICAgICAgIFJlZlB0cjxM
YXp5U2xvd1BhdGhMaW5rZXJUYXNrPiBsaW5rZXIpCi0gICAgICAgIDogSW5saW5lQ2FjaGVEZXNj
cmlwdG9yKHN0YWNrbWFwSUQsIGNvZGVPcmlnaW4sIG51bGxwdHIpCi0gICAgICAgICwgbV9saW5r
ZXIobGlua2VyKQotICAgIHsKLSAgICB9Ci0KLSAgICBWZWN0b3I8c3RkOjp0dXBsZTxMYXp5U2xv
d1BhdGgqLCBDQ2FsbEhlbHBlcnM6OkxhYmVsPj4gbV9nZW5lcmF0b3JzOwotCi0gICAgUmVmUHRy
PExhenlTbG93UGF0aExpbmtlclRhc2s+IG1fbGlua2VyOwotfTsKLQotI2lmIEVOQUJMRShNQVNN
X1BST0JFKQotY2xhc3MgUHJvYmVEZXNjcmlwdG9yIDogcHVibGljIElubGluZUNhY2hlRGVzY3Jp
cHRvciB7Ci1wdWJsaWM6Ci0gICAgUHJvYmVEZXNjcmlwdG9yKHVuc2lnbmVkIHN0YWNrbWFwSUQs
IHN0ZDo6ZnVuY3Rpb248dm9pZCAoQ0NhbGxIZWxwZXJzOjpQcm9iZUNvbnRleHQqKT4gcHJvYmVG
dW5jdGlvbikKLSAgICAgICAgOiBJbmxpbmVDYWNoZURlc2NyaXB0b3Ioc3RhY2ttYXBJRCwgY29k
ZU9yaWdpbigpLCBudWxscHRyKQotICAgICAgICAsIG1fcHJvYmVGdW5jdGlvbihwcm9iZUZ1bmN0
aW9uKQotICAgIHsKLSAgICB9Ci0KLSAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKENDYWxsSGVscGVy
czo6UHJvYmVDb250ZXh0Kik+JiBwcm9iZUZ1bmN0aW9uKCkgeyByZXR1cm4gbV9wcm9iZUZ1bmN0
aW9uOyB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjpmdW5jdGlvbjx2b2lkIChDQ2FsbEhlbHBlcnM6
OlByb2JlQ29udGV4dCopPiBtX3Byb2JlRnVuY3Rpb247Ci19OwotI2VuZGlmIC8vIEVOQUJMRShN
QVNNX1BST0JFKQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCi0KLSNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKLQotI2VuZGlmIC8vIEZUTElubGluZUNhY2hlRGVzY3JpcHRvcl9oCi0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5j
cHAJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5s
aW5lQ2FjaGVTaXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzNDIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJGVExJbmxpbmVDYWNoZVNpemUuaCIKLQotI2lmIEVOQUJMRShG
VExfSklUKQotCi0jaW5jbHVkZSAiREZHTm9kZS5oIgotI2luY2x1ZGUgIkpJVElubGluZUNhY2hl
R2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKLQotbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgewotCi11c2luZyBuYW1lc3BhY2UgREZHOwotCi0vLyBUaGUgZGVm
YXVsdCBzaXplcyBhcmUgeDg2LTY0LXNwZWNpZmljLCBhbmQgd2VyZSBmb3VuZCBlbXBpcmljYWxs
eS4gVGhleSBoYXZlIHRvIGNvdmVyIHRoZSB3b3JzdAotLy8gcG9zc2libGUgY29tYmluYXRpb24g
b2YgcmVnaXN0ZXJzIGxlYWRpbmcgdG8gdGhlIGxhcmdlc3QgcG9zc2libGUgZW5jb2Rpbmcgb2Yg
ZWFjaCBpbnN0cnVjdGlvbiBpbgotLy8gdGhlIElDLgotLy8KLS8vIEZJWE1FOiBUaGUgQVJNNjQg
c2l6ZXMgYXJlIG92ZXJlc3RpbWF0ZXM7IGlmIHRoZXJlIGlzIGFueSBicmFuY2ggY29tcGFjdGlv
biB0aGVuIHdlIHNob3VsZCBiZSBhYmxlCi0vLyB0byBnZXQgYXdheSB3aXRoIGxlc3MuIFRoZSBi
cmFuY2ggY29tcGFjdGlvbiBjb2RlIGN1cnJlbnRseSB2YWxpZGF0ZXMgdGhlIHNpemUgb2YgdGhl
IElDIGJlZm9yZQotLy8gZG9pbmcgYW55IGNvbXBhY3Rpb24sIHNvIHdlIG5lZWQgdG8gb3ZlcmVz
dGltYXRlIGFuZCBnaXZlIHRoZSB1bmNvbXBhY3RlZCBzaXplLiBUaGlzIHdvdWxkIGJlCi0vLyBy
ZWxhdGl2ZWx5IGVhc3kgdG8gZml4LgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyOTMzNQotCi1zaXplX3Qgc2l6ZU9mR2V0QnlJZCgpCi17Ci0jaWYgQ1BVKEFS
TTY0KQotICAgIHJldHVybiAzMjsKLSNlbHNlCi0gICAgcmV0dXJuIDI3OwotI2VuZGlmCi19Ci0K
LXNpemVfdCBzaXplT2ZQdXRCeUlkKCkKLXsKLSNpZiBDUFUoQVJNNjQpCi0gICAgcmV0dXJuIDQw
OwotI2Vsc2UKLSAgICByZXR1cm4gMjk7Ci0jZW5kaWYKLX0KLQotc2l6ZV90IHNpemVPZkNhbGwo
KQotewotI2lmIENQVShBUk02NCkKLSAgICByZXR1cm4gNjA7Ci0jZWxzZQotICAgIHJldHVybiA2
MDsKLSNlbmRpZgotfQotCi1zaXplX3Qgc2l6ZU9mQ2FsbFZhcmFyZ3MoKQotewotI2lmIENQVShB
Uk02NCkKLSAgICByZXR1cm4gMzMyOwotI2Vsc2UKLSAgICByZXR1cm4gMjc1OwotI2VuZGlmCi19
Ci0KLXNpemVfdCBzaXplT2ZUYWlsQ2FsbFZhcmFyZ3MoKQotewotI2lmIENQVShBUk02NCkKLSAg
ICByZXR1cm4gMTg4ICsgc2l6ZU9mQ2FsbFZhcmFyZ3MoKTsKLSNlbHNlCi0gICAgcmV0dXJuIDE1
MSArIHNpemVPZkNhbGxWYXJhcmdzKCk7Ci0jZW5kaWYKLX0KLQotc2l6ZV90IHNpemVPZkNhbGxG
b3J3YXJkVmFyYXJncygpCi17Ci0jaWYgQ1BVKEFSTTY0KQotICAgIHJldHVybiAzMTI7Ci0jZWxz
ZQotICAgIHJldHVybiAyNjI7Ci0jZW5kaWYKLX0KLQotc2l6ZV90IHNpemVPZlRhaWxDYWxsRm9y
d2FyZFZhcmFyZ3MoKQotewotI2lmIENQVShBUk02NCkKLSAgICByZXR1cm4gMTg4ICsgc2l6ZU9m
Q2FsbEZvcndhcmRWYXJhcmdzKCk7Ci0jZWxzZQotICAgIHJldHVybiAxNTEgKyBzaXplT2ZDYWxs
Rm9yd2FyZFZhcmFyZ3MoKTsKLSNlbmRpZgotfQotCi1zaXplX3Qgc2l6ZU9mQ29uc3RydWN0VmFy
YXJncygpCi17Ci0gICAgcmV0dXJuIHNpemVPZkNhbGxWYXJhcmdzKCk7IC8vIFNob3VsZCBiZSB0
aGUgc2FtZSBzaXplLgotfQotCi1zaXplX3Qgc2l6ZU9mQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3Mo
KQotewotICAgIHJldHVybiBzaXplT2ZDYWxsRm9yd2FyZFZhcmFyZ3MoKTsgLy8gU2hvdWxkIGJl
IHRoZSBzYW1lIHNpemUuCi19Ci0KLXNpemVfdCBzaXplT2ZJbigpCi17Ci0jaWYgQ1BVKEFSTTY0
KQotICAgIHJldHVybiA0OwotI2Vsc2UKLSAgICByZXR1cm4gNTsgCi0jZW5kaWYKLX0KLQotc2l6
ZV90IHNpemVPZkJpdEFuZCgpCi17Ci0jaWYgQ1BVKEFSTTY0KQotI2lmZGVmIE5ERUJVRwotcmV0
dXJuIDE4MDsgLy8gQVJNNjQgcmVsZWFzZS4KLSNlbHNlCi1yZXR1cm4gMjc2OyAvLyBBUk02NCBk
ZWJ1Zy4KLSNlbmRpZgotI2Vsc2UgLy8gQ1BVKFg4Nl82NCkKLSNpZmRlZiBOREVCVUcKLXJldHVy
biAxOTk7IC8vIFg4Nl82NCByZWxlYXNlLgotI2Vsc2UKLXJldHVybiAyODY7IC8vIFg4Nl82NCBk
ZWJ1Zy4KLSNlbmRpZgotI2VuZGlmCi19Ci0KLXNpemVfdCBzaXplT2ZCaXRPcigpCi17Ci0jaWYg
Q1BVKEFSTTY0KQotI2lmZGVmIE5ERUJVRwotICAgIHJldHVybiAxODA7IC8vIEFSTTY0IHJlbGVh
c2UuCi0jZWxzZQotICAgIHJldHVybiAyNzY7IC8vIEFSTTY0IGRlYnVnLgotI2VuZGlmCi0jZWxz
ZSAvLyBDUFUoWDg2XzY0KQotI2lmZGVmIE5ERUJVRwotICAgIHJldHVybiAxOTk7IC8vIFg4Nl82
NCByZWxlYXNlLgotI2Vsc2UKLSAgICByZXR1cm4gMjg2OyAvLyBYODZfNjQgZGVidWcuCi0jZW5k
aWYKLSNlbmRpZgotfQotCi1zaXplX3Qgc2l6ZU9mQml0WG9yKCkKLXsKLSNpZiBDUFUoQVJNNjQp
Ci0jaWZkZWYgTkRFQlVHCi0gICAgcmV0dXJuIDE4MDsgLy8gQVJNNjQgcmVsZWFzZS4KLSNlbHNl
Ci0gICAgcmV0dXJuIDI3NjsgLy8gQVJNNjQgZGVidWcuCi0jZW5kaWYKLSNlbHNlIC8vIENQVShY
ODZfNjQpCi0jaWZkZWYgTkRFQlVHCi0gICAgcmV0dXJuIDE5OTsgLy8gWDg2XzY0IHJlbGVhc2Uu
Ci0jZWxzZQotICAgIHJldHVybiAyODY7IC8vIFg4Nl82NCBkZWJ1Zy4KLSNlbmRpZgotI2VuZGlm
Ci19Ci0KLXNpemVfdCBzaXplT2ZCaXRMU2hpZnQoKQotewotI2lmIENQVShBUk02NCkKLSNpZmRl
ZiBOREVCVUcKLSAgICByZXR1cm4gMTgwOyAvLyBBUk02NCByZWxlYXNlLgotI2Vsc2UKLSAgICBy
ZXR1cm4gMjc2OyAvLyBBUk02NCBkZWJ1Zy4KLSNlbmRpZgotI2Vsc2UgLy8gQ1BVKFg4Nl82NCkK
LSNpZmRlZiBOREVCVUcKLSAgICByZXR1cm4gMTk5OyAvLyBYODZfNjQgcmVsZWFzZS4KLSNlbHNl
Ci0gICAgcmV0dXJuIDI4NjsgLy8gWDg2XzY0IGRlYnVnLgotI2VuZGlmCi0jZW5kaWYKLX0KLQot
c2l6ZV90IHNpemVPZkJpdFJTaGlmdCgpCi17Ci0jaWYgQ1BVKEFSTTY0KQotI2lmZGVmIE5ERUJV
RwotICAgIHJldHVybiAxODA7IC8vIEFSTTY0IHJlbGVhc2UuCi0jZWxzZQotICAgIHJldHVybiAy
NzY7IC8vIEFSTTY0IGRlYnVnLgotI2VuZGlmCi0jZWxzZSAvLyBDUFUoWDg2XzY0KQotI2lmZGVm
IE5ERUJVRwotICAgIHJldHVybiAxOTk7IC8vIFg4Nl82NCByZWxlYXNlLgotI2Vsc2UKLSAgICBy
ZXR1cm4gMjg2OyAvLyBYODZfNjQgZGVidWcuCi0jZW5kaWYKLSNlbmRpZgotfQotCi1zaXplX3Qg
c2l6ZU9mQml0VVJTaGlmdCgpCi17Ci0jaWYgQ1BVKEFSTTY0KQotI2lmZGVmIE5ERUJVRwotICAg
IHJldHVybiAxODA7IC8vIEFSTTY0IHJlbGVhc2UuCi0jZWxzZQotICAgIHJldHVybiAyNzY7IC8v
IEFSTTY0IGRlYnVnLgotI2VuZGlmCi0jZWxzZSAvLyBDUFUoWDg2XzY0KQotI2lmZGVmIE5ERUJV
RwotICAgIHJldHVybiAxOTk7IC8vIFg4Nl82NCByZWxlYXNlLgotI2Vsc2UKLSAgICByZXR1cm4g
Mjg2OyAvLyBYODZfNjQgZGVidWcuCi0jZW5kaWYKLSNlbmRpZgotfQotCi1zaXplX3Qgc2l6ZU9m
QXJpdGhEaXYoKQotewotI2lmIENQVShBUk02NCkKLSNpZmRlZiBOREVCVUcKLSAgICByZXR1cm4g
MTgwOyAvLyBBUk02NCByZWxlYXNlLgotI2Vsc2UKLSAgICByZXR1cm4gMjc2OyAvLyBBUk02NCBk
ZWJ1Zy4KLSNlbmRpZgotI2Vsc2UgLy8gQ1BVKFg4Nl82NCkKLSNpZmRlZiBOREVCVUcKLSAgICBy
ZXR1cm4gMTk5OyAvLyBYODZfNjQgcmVsZWFzZS4KLSNlbHNlCi0gICAgcmV0dXJuIDI4NjsgLy8g
WDg2XzY0IGRlYnVnLgotI2VuZGlmCi0jZW5kaWYKLX0KLQotc2l6ZV90IHNpemVPZkFyaXRoTXVs
KCkKLXsKLSNpZiBDUFUoQVJNNjQpCi0jaWZkZWYgTkRFQlVHCi0gICAgcmV0dXJuIDE4MDsgLy8g
QVJNNjQgcmVsZWFzZS4KLSNlbHNlCi0gICAgcmV0dXJuIDI3NjsgLy8gQVJNNjQgZGVidWcuCi0j
ZW5kaWYKLSNlbHNlIC8vIENQVShYODZfNjQpCi0jaWZkZWYgTkRFQlVHCi0gICAgcmV0dXJuIDE5
OTsgLy8gWDg2XzY0IHJlbGVhc2UuCi0jZWxzZQotICAgIHJldHVybiAyODY7IC8vIFg4Nl82NCBk
ZWJ1Zy4KLSNlbmRpZgotI2VuZGlmCi19Ci0KLXNpemVfdCBzaXplT2ZBcml0aFN1YigpCi17Ci0j
aWYgQ1BVKEFSTTY0KQotI2lmZGVmIE5ERUJVRwotICAgIHJldHVybiAyMTY7IC8vIEFSTTY0IHJl
bGVhc2UuCi0jZWxzZQotICAgIHJldHVybiAzMTI7IC8vIEFSTTY0IGRlYnVnLgotI2VuZGlmCi0j
ZWxzZSAvLyBDUFUoWDg2XzY0KQotI2lmZGVmIE5ERUJVRwotICAgIHJldHVybiAyMjM7IC8vIFg4
Nl82NCByZWxlYXNlLgotI2Vsc2UKLSAgICByZXR1cm4gMjk4OyAvLyBYODZfNjQgZGVidWcuCi0j
ZW5kaWYKLSNlbmRpZgotfQotCi1zaXplX3Qgc2l6ZU9mVmFsdWVBZGQoKQotewotI2lmIENQVShB
Uk02NCkKLSNpZmRlZiBOREVCVUcKLSAgICByZXR1cm4gMTgwOyAvLyBBUk02NCByZWxlYXNlLgot
I2Vsc2UKLSAgICByZXR1cm4gMjc2OyAvLyBBUk02NCBkZWJ1Zy4KLSNlbmRpZgotI2Vsc2UgLy8g
Q1BVKFg4Nl82NCkKLSNpZmRlZiBOREVCVUcKLSAgICByZXR1cm4gMTk5OyAvLyBYODZfNjQgcmVs
ZWFzZS4KLSNlbHNlCi0gICAgcmV0dXJuIDI4NjsgLy8gWDg2XzY0IGRlYnVnLgotI2VuZGlmCi0j
ZW5kaWYKLX0KLQotI2lmIEVOQUJMRShNQVNNX1BST0JFKQotc2l6ZV90IHNpemVPZlByb2JlKCkK
LXsKLSAgICByZXR1cm4gMTMyOyAvLyBCYXNlZCBvbiBBUk02NC4KLX0KLSNlbmRpZgotCi1zaXpl
X3Qgc2l6ZU9mSUNGb3IoTm9kZSogbm9kZSkKLXsKLSAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
LSAgICBjYXNlIEdldEJ5SWQ6Ci0gICAgICAgIHJldHVybiBzaXplT2ZHZXRCeUlkKCk7Ci0gICAg
Y2FzZSBQdXRCeUlkOgotICAgICAgICByZXR1cm4gc2l6ZU9mUHV0QnlJZCgpOwotICAgIGNhc2Ug
Q2FsbDoKLSAgICBjYXNlIENvbnN0cnVjdDoKLSAgICAgICAgcmV0dXJuIHNpemVPZkNhbGwoKTsK
LSAgICBjYXNlIENhbGxWYXJhcmdzOgotICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENh
bGxlcjoKLSAgICAgICAgcmV0dXJuIHNpemVPZkNhbGxWYXJhcmdzKCk7Ci0gICAgY2FzZSBUYWls
Q2FsbFZhcmFyZ3M6Ci0gICAgICAgIHJldHVybiBzaXplT2ZUYWlsQ2FsbFZhcmFyZ3MoKTsKLSAg
ICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKLSAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFy
Z3NJbmxpbmVkQ2FsbGVyOgotICAgICAgICByZXR1cm4gc2l6ZU9mQ2FsbEZvcndhcmRWYXJhcmdz
KCk7Ci0gICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgotICAgICAgICByZXR1cm4gc2l6
ZU9mVGFpbENhbGxGb3J3YXJkVmFyYXJncygpOwotICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoK
LSAgICAgICAgcmV0dXJuIHNpemVPZkNvbnN0cnVjdFZhcmFyZ3MoKTsKLSAgICBjYXNlIENvbnN0
cnVjdEZvcndhcmRWYXJhcmdzOgotICAgICAgICByZXR1cm4gc2l6ZU9mQ29uc3RydWN0Rm9yd2Fy
ZFZhcmFyZ3MoKTsKLSAgICBjYXNlIEluOgotICAgICAgICByZXR1cm4gc2l6ZU9mSW4oKTsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0K
LX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXpl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNo
ZVNpemUuaAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExJbmxpbmVDYWNoZVNpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3MCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYg
RlRMSW5saW5lQ2FjaGVTaXplX2gKLSNkZWZpbmUgRlRMSW5saW5lQ2FjaGVTaXplX2gKLQotI2lm
IEVOQUJMRShGVExfSklUKQotCi1uYW1lc3BhY2UgSlNDIHsKLQotbmFtZXNwYWNlIERGRyB7Ci1z
dHJ1Y3QgTm9kZTsKLX0KLQotbmFtZXNwYWNlIEZUTCB7Ci0KLXNpemVfdCBzaXplT2ZHZXRCeUlk
KCk7Ci1zaXplX3Qgc2l6ZU9mUHV0QnlJZCgpOwotc2l6ZV90IHNpemVPZkNhbGwoKTsKLXNpemVf
dCBzaXplT2ZDYWxsVmFyYXJncygpOwotc2l6ZV90IHNpemVPZlRhaWxDYWxsVmFyYXJncygpOwot
c2l6ZV90IHNpemVPZkNhbGxGb3J3YXJkVmFyYXJncygpOwotc2l6ZV90IHNpemVPZlRhaWxDYWxs
Rm9yd2FyZFZhcmFyZ3MoKTsKLXNpemVfdCBzaXplT2ZDb25zdHJ1Y3RWYXJhcmdzKCk7Ci1zaXpl
X3Qgc2l6ZU9mQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3MoKTsKLXNpemVfdCBzaXplT2ZJbigpOwot
c2l6ZV90IHNpemVPZkJpdEFuZCgpOwotc2l6ZV90IHNpemVPZkJpdE9yKCk7Ci1zaXplX3Qgc2l6
ZU9mQml0WG9yKCk7Ci1zaXplX3Qgc2l6ZU9mQml0TFNoaWZ0KCk7Ci1zaXplX3Qgc2l6ZU9mQml0
UlNoaWZ0KCk7Ci1zaXplX3Qgc2l6ZU9mQml0VVJTaGlmdCgpOwotc2l6ZV90IHNpemVPZkFyaXRo
RGl2KCk7Ci1zaXplX3Qgc2l6ZU9mQXJpdGhNdWwoKTsKLXNpemVfdCBzaXplT2ZBcml0aFN1Yigp
Owotc2l6ZV90IHNpemVPZlZhbHVlQWRkKCk7Ci0jaWYgRU5BQkxFKE1BU01fUFJPQkUpCi1zaXpl
X3Qgc2l6ZU9mUHJvYmUoKTsKLSNlbmRpZgotCi1zaXplX3Qgc2l6ZU9mSUNGb3IoREZHOjpOb2Rl
Kik7Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKLQotI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQotCi0jZW5kaWYgLy8gRlRMSW5saW5lQ2FjaGVTaXplX2gKLQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuY3BwCShy
ZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNp
Y1JlcG9zaXRvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkZUTEludHJpbnNpY1JlcG9zaXRvcnkuaCIKLQotI2lmIEVOQUJMRShGVExf
SklUKQotI2lmICFGVExfVVNFU19CMwotCi0jaW5jbHVkZSAiRlRMQWJicmV2aWF0aW9ucy5oIgot
Ci1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLUludHJpbnNpY1JlcG9zaXRvcnk6
OkludHJpbnNpY1JlcG9zaXRvcnkoTENvbnRleHQgY29udGV4dCkKLSAgICA6IENvbW1vblZhbHVl
cyhjb250ZXh0KQotI2RlZmluZSBJTlRSSU5TSUNfSU5JVElBTElaQVRJT04ob3VyTmFtZSwgbGx2
bU5hbWUsIHR5cGUpICwgbV8jI291ck5hbWUoMCkKLSAgICBGT1JfRUFDSF9GVExfSU5UUklOU0lD
KElOVFJJTlNJQ19JTklUSUFMSVpBVElPTikKLSN1bmRlZiBJTlRSSU5TSUNfSU5JVElBTElaQVRJ
T04KLSNkZWZpbmUgRlVOQ1RJT05fVFlQRV9JTklUSUFMSVpBVElPTih0eXBlTmFtZSwgdHlwZSkg
LCBtXyMjdHlwZU5hbWUoMCkKLSAgICBGT1JfRUFDSF9GVU5DVElPTl9UWVBFKEZVTkNUSU9OX1RZ
UEVfSU5JVElBTElaQVRJT04pCi0jdW5kZWYgRlVOQ1RJT05fVFlQRV9JTklUSUFMSVpBVElPTgot
ewotfQotCi0jZGVmaW5lIElOVFJJTlNJQ19HRVRURVJfU0xPV19ERUZJTklUSU9OKG91ck5hbWUs
IGxsdm1OYW1lLCB0eXBlKSAgICAgICBcCi0gICAgTFZhbHVlIEludHJpbnNpY1JlcG9zaXRvcnk6
Om91ck5hbWUjI0ludHJpbnNpY1Nsb3coKSAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIG1fIyNvdXJOYW1lID0gYWRkRXh0ZXJuRnVuY3Rpb24obV9tb2R1bGUsIGxs
dm1OYW1lLCB0eXBlKTsgICAgICBcCi0gICAgICAgIHJldHVybiBtXyMjb3VyTmFtZTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfQotRk9SX0VBQ0hf
RlRMX0lOVFJJTlNJQyhJTlRSSU5TSUNfR0VUVEVSX1NMT1dfREVGSU5JVElPTikKLSN1bmRlZiBJ
TlRSSU5TSUNfR0VUVEVSCi0KLSNkZWZpbmUgRlVOQ1RJT05fVFlQRV9HRVRURVJfU0xPV19ERUZJ
TklUSU9OKHR5cGVOYW1lLCB0eXBlKSBcCi0gICAgTFR5cGUgSW50cmluc2ljUmVwb3NpdG9yeTo6
dHlwZU5hbWUjI1Nsb3coKSAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgbV8jI3R5cGVO
YW1lID0gdHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHJl
dHVybiBtXyMjdHlwZU5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IH0KLUZPUl9FQUNIX0ZVTkNUSU9OX1RZUEUoRlVOQ1RJT05fVFlQRV9HRVRURVJfU0xPV19ERUZJ
TklUSU9OKQotI3VuZGVmIEZVTkNUSU9OX1RZUEVfR0VUVEVSX1NMT1dfREVGSU5JVElPTgotCi19
IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCi0KLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKLSNlbmRp
ZiAvLyBFTkFCTEUoRlRMX0pJVCkKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExJbnRyaW5zaWNSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDE5NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5X2gKLSNk
ZWZpbmUgRlRMSW50cmluc2ljUmVwb3NpdG9yeV9oCi0KLSNpZiBFTkFCTEUoRlRMX0pJVCkKLQot
I2luY2x1ZGUgIkRGR0NvbW1vbi5oIgotCi0jaWYgIUZUTF9VU0VTX0IzCi0KLSNpbmNsdWRlICJE
RkdPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiRlRMQWJicmV2aWF0aW9ucy5oIgotI2luY2x1ZGUg
IkZUTENvbW1vblZhbHVlcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0K
LSNkZWZpbmUgRk9SX0VBQ0hfRlRMX0lOVFJJTlNJQyhtYWNybykgXAotICAgIG1hY3JvKGNlaWw2
NCwgImxsdm0uY2VpbC5mNjQiLCBmdW5jdGlvblR5cGUoZG91YmxlVHlwZSwgZG91YmxlVHlwZSkp
IFwKLSAgICBtYWNybyhjdGx6MzIsICJsbHZtLmN0bHouaTMyIiwgZnVuY3Rpb25UeXBlKGludDMy
LCBpbnQzMiwgYm9vbGVhbikpIFwKLSAgICBtYWNybyhhZGRXaXRoT3ZlcmZsb3czMiwgImxsdm0u
c2FkZC53aXRoLm92ZXJmbG93LmkzMiIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4
dCwgaW50MzIsIGJvb2xlYW4pLCBpbnQzMiwgaW50MzIpKSBcCi0gICAgbWFjcm8oYWRkV2l0aE92
ZXJmbG93NjQsICJsbHZtLnNhZGQud2l0aC5vdmVyZmxvdy5pNjQiLCBmdW5jdGlvblR5cGUoc3Ry
dWN0VHlwZShtX2NvbnRleHQsIGludDY0LCBib29sZWFuKSwgaW50NjQsIGludDY0KSkgXAotICAg
IG1hY3JvKGRvdWJsZUFicywgImxsdm0uZmFicy5mNjQiLCBmdW5jdGlvblR5cGUoZG91YmxlVHlw
ZSwgZG91YmxlVHlwZSkpIFwKLSAgICBtYWNybyhkb3VibGVTaW4sICJsbHZtLnNpbi5mNjQiLCBm
dW5jdGlvblR5cGUoZG91YmxlVHlwZSwgZG91YmxlVHlwZSkpIFwKLSAgICBtYWNybyhkb3VibGVD
b3MsICJsbHZtLmNvcy5mNjQiLCBmdW5jdGlvblR5cGUoZG91YmxlVHlwZSwgZG91YmxlVHlwZSkp
IFwKLSAgICBtYWNybyhkb3VibGVQb3csICJsbHZtLnBvdy5mNjQiLCBmdW5jdGlvblR5cGUoZG91
YmxlVHlwZSwgZG91YmxlVHlwZSwgZG91YmxlVHlwZSkpIFwKLSAgICBtYWNybyhkb3VibGVQb3dp
LCAibGx2bS5wb3dpLmY2NCIsIGZ1bmN0aW9uVHlwZShkb3VibGVUeXBlLCBkb3VibGVUeXBlLCBp
bnQzMikpIFwKLSAgICBtYWNybyhkb3VibGVTcXJ0LCAibGx2bS5zcXJ0LmY2NCIsIGZ1bmN0aW9u
VHlwZShkb3VibGVUeXBlLCBkb3VibGVUeXBlKSkgXAotICAgIG1hY3JvKGRvdWJsZUxvZywgImxs
dm0ubG9nLmY2NCIsIGZ1bmN0aW9uVHlwZShkb3VibGVUeXBlLCBkb3VibGVUeXBlKSkgXAotICAg
IG1hY3JvKGZyYW1lQWRkcmVzcywgImxsdm0uZnJhbWVhZGRyZXNzIiwgZnVuY3Rpb25UeXBlKHBv
aW50ZXJUeXBlKGludDgpLCBpbnQzMikpIFwKLSAgICBtYWNybyhtdWxXaXRoT3ZlcmZsb3czMiwg
Imxsdm0uc211bC53aXRoLm92ZXJmbG93LmkzMiIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1f
Y29udGV4dCwgaW50MzIsIGJvb2xlYW4pLCBpbnQzMiwgaW50MzIpKSBcCi0gICAgbWFjcm8obXVs
V2l0aE92ZXJmbG93NjQsICJsbHZtLnNtdWwud2l0aC5vdmVyZmxvdy5pNjQiLCBmdW5jdGlvblR5
cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGludDY0LCBib29sZWFuKSwgaW50NjQsIGludDY0KSkg
XAotICAgIG1hY3JvKHBhdGNocG9pbnRJbnQ2NCwgImxsdm0uZXhwZXJpbWVudGFsLnBhdGNocG9p
bnQuaTY0IiwgZnVuY3Rpb25UeXBlKGludDY0LCBpbnQ2NCwgaW50MzIsIHJlZjgsIGludDMyLCBW
YXJpYWRpYykpIFwKLSAgICBtYWNybyhwYXRjaHBvaW50Vm9pZCwgImxsdm0uZXhwZXJpbWVudGFs
LnBhdGNocG9pbnQudm9pZCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50NjQsIGludDMyLCBy
ZWY4LCBpbnQzMiwgVmFyaWFkaWMpKSBcCi0gICAgbWFjcm8oc3RhY2ttYXAsICJsbHZtLmV4cGVy
aW1lbnRhbC5zdGFja21hcCIsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50NjQsIGludDMyLCBW
YXJpYWRpYykpIFwKLSAgICBtYWNybyhzdWJXaXRoT3ZlcmZsb3czMiwgImxsdm0uc3N1Yi53aXRo
Lm92ZXJmbG93LmkzMiIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50MzIs
IGJvb2xlYW4pLCBpbnQzMiwgaW50MzIpKSBcCi0gICAgbWFjcm8oc3ViV2l0aE92ZXJmbG93NjQs
ICJsbHZtLnNzdWIud2l0aC5vdmVyZmxvdy5pNjQiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZSht
X2NvbnRleHQsIGludDY0LCBib29sZWFuKSwgaW50NjQsIGludDY0KSkgXAotICAgIG1hY3JvKHRy
YXAsICJsbHZtLnRyYXAiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUpKSBcCi0gICAgbWFjcm8oeDg2
U1NFMkN2dFRTRDJTSSwgImxsdm0ueDg2LnNzZTIuY3Z0dHNkMnNpIiwgZnVuY3Rpb25UeXBlKGlu
dDMyLCB2ZWN0b3JUeXBlKGRvdWJsZVR5cGUsIDIpKSkKLQotI2RlZmluZSBGT1JfRUFDSF9GVU5D
VElPTl9UWVBFKG1hY3JvKSBcCi0gICAgbWFjcm8oQ19KSVRPcGVyYXRpb25fRUMsIGZ1bmN0aW9u
VHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyKSkgXAotICAgIG1hY3JvKENfSklUT3BlcmF0aW9u
X0VDWiwgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBpbnRQdHIsIGludDMyKSkgXAotICAg
IG1hY3JvKENfSklUT3BlcmF0aW9uX0VDWkMsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwg
aW50UHRyLCBpbnQzMiwgaW50UHRyKSkgXAotICAgIG1hY3JvKENfSklUT3BlcmF0aW9uX0VHQywg
ZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBpbnRQdHIsIGludFB0cikpIFwKLSAgICBtYWNy
byhDX0pJVE9wZXJhdGlvbl9FSiwgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBpbnQ2NCkp
IFwKLSAgICBtYWNybyhDX0pJVE9wZXJhdGlvbl9FSkosIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGlu
dFB0ciwgaW50NjQsIGludDY0KSkgXAotICAgIG1hY3JvKENfSklUT3BlcmF0aW9uX0VKSkosIGZ1
bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50NjQsIGludDY0LCBpbnQ2NCkpIFwKLSAgICBt
YWNybyhDX0pJVE9wZXJhdGlvbl9FSnNzSnNzLCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIs
IGludFB0ciwgaW50UHRyKSkgXAotICAgIG1hY3JvKENfSklUT3BlcmF0aW9uX0VKc3NKc3NKc3Ms
IGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyLCBpbnRQdHIsIGludFB0cikpIFwK
LSAgICBtYWNybyhDX0pJVE9wZXJhdGlvbl9FU3QsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0
ciwgaW50UHRyKSkgXAotICAgIG1hY3JvKENfSklUT3BlcmF0aW9uX0VTdEpzY1N5bXRhYkosIGZ1
bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyLCBpbnRQdHIsIGludFB0ciwgaW50UHRy
KSkgXAotICAgIG1hY3JvKENfSklUT3BlcmF0aW9uX0VTdFJaSnNmLCBmdW5jdGlvblR5cGUoaW50
UHRyLCBpbnRQdHIsIGludFB0ciwgaW50UHRyLCBpbnQzMiwgaW50UHRyKSkgXAotICAgIG1hY3Jv
KENfSklUT3BlcmF0aW9uX0VTdFJaSnNmTCwgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBp
bnRQdHIsIGludFB0ciwgaW50MzIsIGludFB0ciwgaW50UHRyKSkgXAotICAgIG1hY3JvKENfSklU
T3BlcmF0aW9uX0VTdFosIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyLCBpbnQz
MikpIFwKLSAgICBtYWNybyhDX0pJVE9wZXJhdGlvbl9FU3RaWiwgZnVuY3Rpb25UeXBlKGludFB0
ciwgaW50UHRyLCBpbnRQdHIsIGludDMyLCBpbnQzMikpIFwKLSAgICBtYWNybyhDX0pJVE9wZXJh
dGlvbl9FWiwgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBpbnQzMikpIFwKLSAgICBtYWNy
byhEX0pJVE9wZXJhdGlvbl9ELCBmdW5jdGlvblR5cGUoZG91YmxlVHlwZSwgZG91YmxlVHlwZSkp
IFwKLSAgICBtYWNybyhUX0pJVE9wZXJhdGlvbl9FSnNzLCBmdW5jdGlvblR5cGUoaW50UHRyLCBp
bnRQdHIsIGludFB0cikpIFwKLSAgICBtYWNybyhKX0pJVE9wZXJhdGlvbl9FLCBmdW5jdGlvblR5
cGUoaW50NjQsIGludFB0cikpIFwKLSAgICBtYWNybyhKX0pJVE9wZXJhdGlvbl9FQSwgZnVuY3Rp
b25UeXBlKGludDY0LCBpbnRQdHIsIGludFB0cikpIFwKLSAgICBtYWNybyhKX0pJVE9wZXJhdGlv
bl9FQVosIGZ1bmN0aW9uVHlwZShpbnQ2NCwgaW50UHRyLCBpbnRQdHIsIGludDMyKSkgXAotICAg
IG1hY3JvKEpfSklUT3BlcmF0aW9uX0VDSiwgZnVuY3Rpb25UeXBlKGludDY0LCBpbnRQdHIsIGlu
dFB0ciwgaW50NjQpKSBcCi0gICAgbWFjcm8oSl9KSVRPcGVyYXRpb25fRUNaLCBmdW5jdGlvblR5
cGUoaW50NjQsIGludFB0ciwgaW50UHRyLCBpbnQzMikpIFwKLSAgICBtYWNybyhKX0pJVE9wZXJh
dGlvbl9FREEsIGZ1bmN0aW9uVHlwZShpbnQ2NCwgaW50UHRyLCBkb3VibGVUeXBlLCBpbnRQdHIp
KSBcCi0gICAgbWFjcm8oSl9KSVRPcGVyYXRpb25fRUosIGZ1bmN0aW9uVHlwZShpbnQ2NCwgaW50
UHRyLCBpbnQ2NCkpIFwKLSAgICBtYWNybyhKX0pJVE9wZXJhdGlvbl9FSkEsIGZ1bmN0aW9uVHlw
ZShpbnQ2NCwgaW50UHRyLCBpbnQ2NCwgaW50UHRyKSkgXAotICAgIG1hY3JvKEpfSklUT3BlcmF0
aW9uX0VKQywgZnVuY3Rpb25UeXBlKGludDY0LCBpbnRQdHIsIGludDY0LCBpbnRQdHIpKSBcCi0g
ICAgbWFjcm8oSl9KSVRPcGVyYXRpb25fRUpJLCBmdW5jdGlvblR5cGUoaW50NjQsIGludFB0ciwg
aW50NjQsIGludFB0cikpIFwKLSAgICBtYWNybyhKX0pJVE9wZXJhdGlvbl9FSkosIGZ1bmN0aW9u
VHlwZShpbnQ2NCwgaW50UHRyLCBpbnQ2NCwgaW50NjQpKSBcCi0gICAgbWFjcm8oSl9KSVRPcGVy
YXRpb25fRUpzY0MsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyLCBpbnRQdHIp
KSBcCi0gICAgbWFjcm8oSl9KSVRPcGVyYXRpb25fRUpzY0NKLCBmdW5jdGlvblR5cGUoaW50NjQs
IGludFB0ciwgaW50NjQsIGludDY0LCBpbnQ2NCkpXAotICAgIG1hY3JvKEpfSklUT3BlcmF0aW9u
X0VKc3NaLCBmdW5jdGlvblR5cGUoaW50NjQsIGludFB0ciwgaW50UHRyLCBpbnQzMikpIFwKLSAg
ICBtYWNybyhKX0pJVE9wZXJhdGlvbl9FU3NpSkksIGZ1bmN0aW9uVHlwZShpbnQ2NCwgaW50UHRy
LCBpbnRQdHIsIGludDY0LCBpbnRQdHIpKSBcCi0gICAgbWFjcm8oSnNzX0pJVE9wZXJhdGlvbl9F
WiwgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBpbnQzMikpIFwKLSAgICBtYWNybyhQX0pJ
VE9wZXJhdGlvbl9FLCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIpKSBcCi0gICAgbWFjcm8o
UF9KSVRPcGVyYXRpb25fRUMsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyKSkg
XAotICAgIG1hY3JvKFBfSklUT3BlcmF0aW9uX0VPLCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQ
dHIsIGludFB0cikpIFwKLSAgICBtYWNybyhQX0pJVE9wZXJhdGlvbl9FUywgZnVuY3Rpb25UeXBl
KGludFB0ciwgaW50UHRyLCBpbnQ2NCkpIFwKLSAgICBtYWNybyhQX0pJVE9wZXJhdGlvbl9FT1Ms
IGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyLCBpbnQ2NCkpIFwKLSAgICBtYWNy
byhQX0pJVE9wZXJhdGlvbl9FU3QsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRy
KSkgXAotICAgIG1hY3JvKFBfSklUT3BlcmF0aW9uX0VTdFBTLCBmdW5jdGlvblR5cGUoaW50UHRy
LCBpbnRQdHIsIGludFB0ciwgaW50UHRyLCBpbnRQdHIpKSBcCi0gICAgbWFjcm8oUF9KSVRPcGVy
YXRpb25fRVN0U1MsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50UHRyLCBpbnRQdHIs
IGludFB0cikpIFwKLSAgICBtYWNybyhQX0pJVE9wZXJhdGlvbl9FU3RaLCBmdW5jdGlvblR5cGUo
aW50UHRyLCBpbnRQdHIsIGludFB0ciwgaW50MzIpKSBcCi0gICAgbWFjcm8oUV9KSVRPcGVyYXRp
b25fRCwgZnVuY3Rpb25UeXBlKGludDY0LCBkb3VibGVUeXBlKSkgXAotICAgIG1hY3JvKFFfSklU
T3BlcmF0aW9uX0osIGZ1bmN0aW9uVHlwZShpbnQ2NCwgaW50NjQpKSBcCi0gICAgbWFjcm8oU19K
SVRPcGVyYXRpb25fRUdDLCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIsIGludFB0ciwgaW50
UHRyKSkgXAotICAgIG1hY3JvKFNfSklUT3BlcmF0aW9uX0VKLCBmdW5jdGlvblR5cGUoaW50UHRy
LCBpbnRQdHIsIGludDY0KSkgXAotICAgIG1hY3JvKFNfSklUT3BlcmF0aW9uX0VKSiwgZnVuY3Rp
b25UeXBlKGludFB0ciwgaW50UHRyLCBpbnQ2NCwgaW50NjQpKSBcCi0gICAgbWFjcm8oU19KSVRP
cGVyYXRpb25fSiwgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50NjQpKSBcCi0gICAgbWFjcm8oVl9K
SVRPcGVyYXRpb24sIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSkpIFwKLSAgICBtYWNybyhWX0pJVE9w
ZXJhdGlvbl9FSkpKLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50NjQsIGludDY0
LCBpbnQ2NCkpIFwKLSAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FT1pELCBmdW5jdGlvblR5cGUo
dm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnQzMiwgZG91YmxlVHlwZSkpIFwKLSAgICBtYWNy
byhWX0pJVE9wZXJhdGlvbl9FT1pKLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50
UHRyLCBpbnQzMiwgaW50NjQpKSBcCi0gICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRUMsIGZ1bmN0
aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIpKSBcCi0gICAgbWFjcm8oVl9KSVRPcGVy
YXRpb25fRUNiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyKSkgXAotICAg
IG1hY3JvKFZfSklUT3BlcmF0aW9uX0VXcywgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIs
IGludFB0cikpIFwKLSAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FWkpaWlosIGZ1bmN0aW9uVHlw
ZSh2b2lkVHlwZSwgaW50UHRyLCBpbnQzMiwgaW50NjQsIGludDMyLCBpbnQzMiwgaW50MzIpKSBc
Ci0gICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fSiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQ2
NCkpIFwKLSAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9aLCBmdW5jdGlvblR5cGUodm9pZFR5cGUs
IGludDMyKSkgXAotICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0UsIGZ1bmN0aW9uVHlwZSh2b2lk
VHlwZSwgaW50UHRyKSkgXAotICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VDSVpDLCBmdW5jdGlv
blR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnRQdHIsIGludDMyLCBpbnRQdHIpKSBc
Ci0gICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRUNJWkpKLCBmdW5jdGlvblR5cGUodm9pZFR5cGUs
IGludFB0ciwgaW50UHRyLCBpbnRQdHIsIGludDMyLCBpbnQ2NCwgaW50NjQpKSBcCi0gICAgbWFj
cm8oVl9KSVRPcGVyYXRpb25fRUNKWkMsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBp
bnRQdHIsIGludDY0LCBpbnQzMiwgaW50UHRyKSkgXAotICAgIG1hY3JvKFpfSklUT3BlcmF0aW9u
X0QsIGZ1bmN0aW9uVHlwZShpbnQzMiwgZG91YmxlVHlwZSkpIFwKLSAgICBtYWNybyhaX0pJVE9w
ZXJhdGlvbl9FQywgZnVuY3Rpb25UeXBlKGludDMyLCBpbnRQdHIsIGludFB0cikpIFwKLSAgICBt
YWNybyhaX0pJVE9wZXJhdGlvbl9FR0MsIGZ1bmN0aW9uVHlwZShpbnQzMiwgaW50UHRyLCBpbnRQ
dHIsIGludFB0cikpIFwKLSAgICBtYWNybyhaX0pJVE9wZXJhdGlvbl9FSk9KLCBmdW5jdGlvblR5
cGUoaW50MzIsIGludFB0ciwgaW50NjQsIGludFB0ciwgaW50NjQpKSBcCi0gICAgbWFjcm8oWl9K
SVRPcGVyYXRpb25fRUpaLCBmdW5jdGlvblR5cGUoaW50MzIsIGludFB0ciwgaW50NjQsIGludDMy
KSkgXAotICAgIG1hY3JvKFpfSklUT3BlcmF0aW9uX0VTSnNzLCBmdW5jdGlvblR5cGUoaW50MzIs
IGludFB0ciwgaW50UHRyLCBpbnQ2NCkpIFwKLSAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FQ1JV
aVVpLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnRQdHIsIGludDMy
LCBpbnQzMikpCi0gICAgCi1jbGFzcyBJbnRyaW5zaWNSZXBvc2l0b3J5IDogcHVibGljIENvbW1v
blZhbHVlcyB7Ci1wdWJsaWM6Ci0gICAgSW50cmluc2ljUmVwb3NpdG9yeShMQ29udGV4dCk7Ci0g
ICAgCi0jZGVmaW5lIElOVFJJTlNJQ19HRVRURVIob3VyTmFtZSwgbGx2bU5hbWUsIHR5cGUpIFwK
LSAgICBMVmFsdWUgb3VyTmFtZSMjSW50cmluc2ljKCkgeyAgICAgICAgICAgICAgICAgXAotICAg
ICAgICBpZiAoIW1fIyNvdXJOYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICByZXR1cm4gb3VyTmFtZSMjSW50cmluc2ljU2xvdygpOyAgICAgIFwKLSAgICAgICAgcmV0
dXJuIG1fIyNvdXJOYW1lOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0KLSAgICBGT1Jf
RUFDSF9GVExfSU5UUklOU0lDKElOVFJJTlNJQ19HRVRURVIpCi0jdW5kZWYgSU5UUklOU0lDX0dF
VFRFUgotCi0jZGVmaW5lIEZVTkNUSU9OX1RZUEVfR0VUVEVSKHR5cGVOYW1lLCB0eXBlKSBcCi0g
ICAgTFR5cGUgdHlwZU5hbWUoKSAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICghbV8jI3R5
cGVOYW1lKSAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICByZXR1cm4gdHlwZU5hbWUj
I1Nsb3coKTsgICAgICAgICBcCi0gICAgICAgIHJldHVybiBtXyMjdHlwZU5hbWU7ICAgICAgICAg
ICAgICAgICBcCi0gICAgfQotICAgIEZPUl9FQUNIX0ZVTkNUSU9OX1RZUEUoRlVOQ1RJT05fVFlQ
RV9HRVRURVIpCi0jdW5kZWYgRlVOQ1RJT05fVFlQRV9HRVRURVIKLSAgICAKLSNkZWZpbmUgRlVO
Q1RJT05fVFlQRV9SRVNPTFZFUih0eXBlTmFtZSwgdHlwZSkgXAotICAgIExUeXBlIG9wZXJhdGlv
blR5cGUoSlNDOjp0eXBlTmFtZSkgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0dXJuIHR5cGVOYW1lKCk7ICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIH0KLSAgICBGT1JfRUFDSF9GVU5DVElPTl9UWVBFKEZVTkNU
SU9OX1RZUEVfUkVTT0xWRVIpCi0jdW5kZWYgRlVOQ1RJT05fVFlQRV9SRVNPTFZFUgotICAgIAot
cHJpdmF0ZToKLSNkZWZpbmUgSU5UUklOU0lDX0dFVFRFUl9TTE9XX0RFQ0xBUkFUSU9OKG91ck5h
bWUsIGxsdm1OYW1lLCB0eXBlKSBcCi0gICAgTFZhbHVlIG91ck5hbWUjI0ludHJpbnNpY1Nsb3co
KTsKLSAgICBGT1JfRUFDSF9GVExfSU5UUklOU0lDKElOVFJJTlNJQ19HRVRURVJfU0xPV19ERUNM
QVJBVElPTikKLSN1bmRlZiBJTlRSSU5TSUNfR0VUVEVSCi0KLSNkZWZpbmUgSU5UUklOU0lDX0ZJ
RUxEX0RFQ0xBUkFUSU9OKG91ck5hbWUsIGxsdm1OYW1lLCB0eXBlKSBMVmFsdWUgbV8jI291ck5h
bWU7Ci0gICAgRk9SX0VBQ0hfRlRMX0lOVFJJTlNJQyhJTlRSSU5TSUNfRklFTERfREVDTEFSQVRJ
T04pCi0jdW5kZWYgSU5UUklOU0lDX0ZJRUxEX0RFQ0xBUkFUSU9OCi0KLSNkZWZpbmUgRlVOQ1RJ
T05fVFlQRV9HRVRURVJfU0xPV19ERUNMQVJBVElPTih0eXBlTmFtZSwgdHlwZSkgXAotICAgIExU
eXBlIHR5cGVOYW1lIyNTbG93KCk7Ci0gICAgRk9SX0VBQ0hfRlVOQ1RJT05fVFlQRShGVU5DVElP
Tl9UWVBFX0dFVFRFUl9TTE9XX0RFQ0xBUkFUSU9OKQotI3VuZGVmIEZVTkNUSU9OX1RZUEVfR0VU
VEVSX1NMT1dfREVDTEFSQVRJT04KLQotI2RlZmluZSBGVU5DVElPTl9UWVBFX0ZJRUxEX0RFQ0xB
UkFUSU9OKHR5cGVOYW1lLCB0eXBlKSBcCi0gICAgTFR5cGUgbV8jI3R5cGVOYW1lOwotICAgIEZP
Ul9FQUNIX0ZVTkNUSU9OX1RZUEUoRlVOQ1RJT05fVFlQRV9GSUVMRF9ERUNMQVJBVElPTikKLSN1
bmRlZiBGVU5DVElPTl9UWVBFX0ZJRUxEX0RFQ0xBUkFUSU9OCi19OwotCi19IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCi0KLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKLSNlbmRpZiAvLyBFTkFCTEUo
RlRMX0pJVCkKLQotI2VuZGlmIC8vIEZUTEludHJpbnNpY1JlcG9zaXRvcnlfaAotCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHJldmlzaW9uIDE5NjY4NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDIwICs0NCwxMSBAQCBKSVRDb2RlOjp+SklUQ29kZSgpCiAgICAgaWYgKEZUTDo6
c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpIHsKICAgICAgICAgZGF0YUxvZygiRGVzdHJveWluZyBG
VEwgSklUIGNvZGUgYXQgIik7CiAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKLSNpZiBGVExf
VVNFU19CMwogICAgICAgICBkYXRhTG9nKGNvbW1hLCBtX2IzQ29kZSk7CiAgICAgICAgIGRhdGFM
b2coY29tbWEsIG1fYXJpdHlDaGVja0VudHJ5cG9pbnQpOwotI2Vsc2UKLSAgICAgICAgZm9yIChh
dXRvJiBoYW5kbGUgOiBtX2hhbmRsZXMpCi0gICAgICAgICAgICBkYXRhTG9nKGNvbW1hLCBwb2lu
dGVyRHVtcChoYW5kbGUuZ2V0KCkpKTsKLSAgICAgICAgZGF0YUxvZyhjb21tYSwgcG9pbnRlckR1
bXAobV9hcml0eUNoZWNrRW50cnlwb2ludC5leGVjdXRhYmxlTWVtb3J5KCkpKTsKLSAgICAgICAg
ZGF0YUxvZyhjb21tYSwgcG9pbnRlckR1bXAobV9leGl0VGh1bmtzLmV4ZWN1dGFibGVNZW1vcnko
KSkpOwotICAgICAgICBkYXRhTG9nKCJcbiIpOwotI2VuZGlmCiAgICAgfQogfQogCi0jaWYgRlRM
X1VTRVNfQjMKIHZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUIzQ29kZShDb2RlUmVmIGIzQ29kZSkK
IHsKICAgICBtX2IzQ29kZSA9IGIzQ29kZTsKQEAgLTY3LDIyICs1OCw2IEBAIHZvaWQgSklUQ29k
ZTo6aW5pdGlhbGl6ZUIzQnlwcm9kdWN0cyhzdGQKIHsKICAgICBtX2IzQnlwcm9kdWN0cyA9IFdU
Rk1vdmUoYnlwcm9kdWN0cyk7CiB9Ci0jZWxzZSAvLyBGVExfVVNFU19CMwotdm9pZCBKSVRDb2Rl
Ojppbml0aWFsaXplRXhpdFRodW5rcyhDb2RlUmVmIGV4aXRUaHVua3MpCi17Ci0gICAgbV9leGl0
VGh1bmtzID0gZXhpdFRodW5rczsKLX0KLQotdm9pZCBKSVRDb2RlOjphZGRIYW5kbGUoUGFzc1Jl
ZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBoYW5kbGUpCi17Ci0gICAgbV9oYW5kbGVzLmFw
cGVuZChoYW5kbGUpOwotfQotCi12b2lkIEpJVENvZGU6OmFkZERhdGFTZWN0aW9uKFBhc3NSZWZQ
dHI8RGF0YVNlY3Rpb24+IGRhdGFTZWN0aW9uKQotewotICAgIG1fZGF0YVNlY3Rpb25zLmFwcGVu
ZChkYXRhU2VjdGlvbik7Ci19Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKIAogdm9pZCBKSVRDb2Rl
Ojppbml0aWFsaXplQWRkcmVzc0ZvckNhbGwoQ29kZVB0ciBhZGRyZXNzKQogewpAQCAtMTQwLDEz
ICsxMTUsNiBAQCBib29sIEpJVENvZGU6OmNvbnRhaW5zKHZvaWQqKQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotI2lmICFGVExfVVNFU19CMwotSklUQ29kZTo6Q29kZVB0ciBKSVRDb2RlOjpleGl0
VGh1bmtzKCkKLXsKLSAgICByZXR1cm4gbV9leGl0VGh1bmtzLmNvZGUoKTsKLX0KLSNlbmRpZgot
CiBKSVRDb2RlKiBKSVRDb2RlOjpmdGwoKQogewogICAgIHJldHVybiB0aGlzOwpAQCAtMTY3LDcg
KzEzNSw2IEBAIHZvaWQgSklUQ29kZTo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFQKIAogUmVn
aXN0ZXJTZXQgSklUQ29kZTo6bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRs
aW5nQ2FsbFNpdGUoQ29kZUJsb2NrKiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KQogewot
I2lmIEZUTF9VU0VTX0IzCiAgICAgZm9yIChPU1JFeGl0JiBleGl0IDogb3NyRXhpdCkgewogICAg
ICAgICBpZiAoZXhpdC5tX2V4Y2VwdGlvbkhhbmRsZXJDYWxsU2l0ZUluZGV4LmJpdHMoKSA9PSBj
YWxsU2l0ZUluZGV4LmJpdHMoKSkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhpdC5p
c0V4Y2VwdGlvbkhhbmRsZXIoKSk7CkBAIC0xNzUsMTQgKzE0Miw2IEBAIFJlZ2lzdGVyU2V0IEpJ
VENvZGU6OmxpdmVSZWdpc3RlcnNUb1ByZXMKICAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6
dXNlZFJlZ2lzdGVycyhleGl0Lm1fdmFsdWVSZXBzKTsKICAgICAgICAgfQogICAgIH0KLSNlbHNl
IC8vIEZUTF9VU0VTX0IzCi0gICAgZm9yIChPU1JFeGl0JiBleGl0IDogb3NyRXhpdCkgewotICAg
ICAgICBpZiAoZXhpdC5tX2V4Y2VwdGlvbkhhbmRsZXJDYWxsU2l0ZUluZGV4LmJpdHMoKSA9PSBj
YWxsU2l0ZUluZGV4LmJpdHMoKSkgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhpdC5p
c0V4Y2VwdGlvbkhhbmRsZXIoKSk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhY2ttYXBzLnJlY29y
ZHNbZXhpdC5tX3N0YWNrbWFwUmVjb3JkSW5kZXhdLnVzZWRSZWdpc3RlclNldCgpOwotICAgICAg
ICB9Ci0gICAgfQotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgcmV0dXJuIFJlZ2lzdGVyU2V0
KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCShyZXZp
c2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsMjcgKzMwLDExIEBACiAKICNpbmNsdWRlICJCM09wYXF1ZUJ5
cHJvZHVjdHMuaCIKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCi0jaW5jbHVkZSAiRlRMRGF0
YVNlY3Rpb24uaCIKICNpbmNsdWRlICJGVExMYXp5U2xvd1BhdGguaCIKICNpbmNsdWRlICJGVExP
U1JFeGl0LmgiCi0jaW5jbHVkZSAiRlRMU3RhY2tNYXBzLmgiCi0jaW5jbHVkZSAiRlRMVW53aW5k
SW5mby5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKLSNpbmNsdWRlICJMTFZNQVBJLmgiCiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5oPgogCi0jaWYgIUZUTF9VU0VTX0IzCi0jaWYgT1Mo
REFSV0lOKQotI2RlZmluZSBTRUNUSU9OX05BTUVfUFJFRklYICJfXyIKLSNlbGlmIE9TKExJTlVY
KQotI2RlZmluZSBTRUNUSU9OX05BTUVfUFJFRklYICIuIgotI2Vsc2UKLSNlcnJvciAiVW5zdXBw
b3J0ZWQgcGxhdGZvcm0iCi0jZW5kaWYKLQotI2RlZmluZSBTRUNUSU9OX05BTUUoTkFNRSkgKFNF
Q1RJT05fTkFNRV9QUkVGSVggTkFNRSkKLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKLQogbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOwpAQCAtNjksMTQgKzUzLDggQEAg
cHVibGljOgogICAgIHNpemVfdCBzaXplKCkgb3ZlcnJpZGU7CiAgICAgYm9vbCBjb250YWlucyh2
b2lkKikgb3ZlcnJpZGU7CiAKLSNpZiBGVExfVVNFU19CMwogICAgIHZvaWQgaW5pdGlhbGl6ZUIz
Q29kZShDb2RlUmVmKTsKICAgICB2b2lkIGluaXRpYWxpemVCM0J5cHJvZHVjdHMoc3RkOjp1bmlx
dWVfcHRyPEIzOjpPcGFxdWVCeXByb2R1Y3RzPik7Ci0jZWxzZQotICAgIHZvaWQgaW5pdGlhbGl6
ZUV4aXRUaHVua3MoQ29kZVJlZik7Ci0gICAgdm9pZCBhZGRIYW5kbGUoUGFzc1JlZlB0cjxFeGVj
dXRhYmxlTWVtb3J5SGFuZGxlPik7Ci0gICAgdm9pZCBhZGREYXRhU2VjdGlvbihQYXNzUmVmUHRy
PERhdGFTZWN0aW9uPik7Ci0jZW5kaWYKICAgICB2b2lkIGluaXRpYWxpemVBZGRyZXNzRm9yQ2Fs
bChDb2RlUHRyKTsKICAgICB2b2lkIGluaXRpYWxpemVBcml0eUNoZWNrRW50cnlwb2ludChDb2Rl
UmVmKTsKICAgICAKQEAgLTg2LDE0ICs2NCw3IEBAIHB1YmxpYzoKIAogICAgIE9wdGlvbmFsPENv
ZGVPcmlnaW4+IGZpbmRQQyhDb2RlQmxvY2sqLCB2b2lkKiBwYykgb3ZlcnJpZGU7CiAKLSNpZiBG
VExfVVNFU19CMwogICAgIENvZGVSZWYgYjNDb2RlKCkgY29uc3QgeyByZXR1cm4gbV9iM0NvZGU7
IH0KLSNlbHNlCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
Pj4mIGhhbmRsZXMoKSBjb25zdCB7IHJldHVybiBtX2hhbmRsZXM7IH0KLSAgICBjb25zdCBWZWN0
b3I8UmVmUHRyPERhdGFTZWN0aW9uPj4mIGRhdGFTZWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YVNlY3Rpb25zOyB9Ci0gICAgCi0gICAgQ29kZVB0ciBleGl0VGh1bmtzKCk7Ci0jZW5kaWYK
ICAgICAKICAgICBKSVRDb2RlKiBmdGwoKSBvdmVycmlkZTsKICAgICBERkc6OkNvbW1vbkRhdGEq
IGRmZ0NvbW1vbigpIG92ZXJyaWRlOwpAQCAtMTAyLDI1ICs3MywxMyBAQCBwdWJsaWM6CiAgICAg
REZHOjpDb21tb25EYXRhIGNvbW1vbjsKICAgICBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdCwgOD4g
b3NyRXhpdDsKICAgICBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdERlc2NyaXB0b3IsIDg+IG9zckV4
aXREZXNjcmlwdG9yczsKLSNpZiAhRlRMX1VTRVNfQjMKLSAgICBTdGFja01hcHMgc3RhY2ttYXBz
OwotI2VuZGlmIC8vICFGVExfVVNFU19CMwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TGF6
eVNsb3dQYXRoPj4gbGF6eVNsb3dQYXRoczsKLSAgICBpbnQzMl90IG9zckV4aXRGcm9tR2VuZXJp
Y1Vud2luZFN0YWNrU3BpbGxTbG90OwogICAgIAogcHJpdmF0ZToKICAgICBDb2RlUHRyIG1fYWRk
cmVzc0ZvckNhbGw7Ci0jaWYgRlRMX1VTRVNfQjMKICAgICBDb2RlUmVmIG1fYjNDb2RlOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxCMzo6T3BhcXVlQnlwcm9kdWN0cz4gbV9iM0J5cHJvZHVjdHM7Ci0j
ZWxzZQotICAgIFZlY3RvcjxSZWZQdHI8RGF0YVNlY3Rpb24+PiBtX2RhdGFTZWN0aW9uczsKLSAg
ICBWZWN0b3I8UmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+PiBtX2hhbmRsZXM7Ci0jZW5k
aWYKICAgICBDb2RlUmVmIG1fYXJpdHlDaGVja0VudHJ5cG9pbnQ7Ci0jaWYgIUZUTF9VU0VTX0Iz
Ci0gICAgQ29kZVJlZiBtX2V4aXRUaHVua3M7Ci0jZW5kaWYKIH07CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxp
emVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZp
bmFsaXplci5jcHAJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTkgKzUxLDggQEAg
c2l6ZV90IEpJVEZpbmFsaXplcjo6Y29kZVNpemUoKQogewogICAgIHNpemVfdCByZXN1bHQgPSAw
OwogCi0jaWYgRlRMX1VTRVNfQjMKICAgICBpZiAoYjNDb2RlTGlua0J1ZmZlcikKICAgICAgICAg
cmVzdWx0ICs9IGIzQ29kZUxpbmtCdWZmZXItPnNpemUoKTsKLSNlbHNlIC8vIEZUTF9VU0VTX0Iz
Ci0gICAgaWYgKGV4aXRUaHVua3NMaW5rQnVmZmVyKQotICAgICAgICByZXN1bHQgKz0gZXhpdFRo
dW5rc0xpbmtCdWZmZXItPnNpemUoKTsKLSAgICBpZiAoc2lkZUNvZGVMaW5rQnVmZmVyKQotICAg
ICAgICByZXN1bHQgKz0gc2lkZUNvZGVMaW5rQnVmZmVyLT5zaXplKCk7Ci0gICAgaWYgKGhhbmRs
ZUV4Y2VwdGlvbnNMaW5rQnVmZmVyKQotICAgICAgICByZXN1bHQgKz0gaGFuZGxlRXhjZXB0aW9u
c0xpbmtCdWZmZXItPnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBqaXRDb2RlLT5oYW5k
bGVzKCkuc2l6ZSgpOyBpLS07KQotICAgICAgICByZXN1bHQgKz0gaml0Q29kZS0+aGFuZGxlcygp
W2ldLT5zaXplSW5CeXRlcygpOwotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgCiAgICAgaWYg
KGVudHJ5cG9pbnRMaW5rQnVmZmVyKQogICAgICAgICByZXN1bHQgKz0gZW50cnlwb2ludExpbmtC
dWZmZXItPnNpemUoKTsKQEAgLTgxLDc1ICs3MCwxNyBAQCBib29sIEpJVEZpbmFsaXplcjo6Zmlu
YWxpemVGdW5jdGlvbigpCiB7CiAgICAgYm9vbCBkdW1wRGlzYXNzZW1ibHkgPSBzaG91bGREdW1w
RGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjphc3luY0Rpc2Fzc2VtYmx5KCk7CiAgICAgCi0jaWYg
RlRMX1VTRVNfQjMKICAgICBqaXRDb2RlLT5pbml0aWFsaXplQjNDb2RlKAogICAgICAgICBGSU5B
TElaRV9DT0RFX0lGKAogICAgICAgICAgICAgZHVtcERpc2Fzc2VtYmx5LCAqYjNDb2RlTGlua0J1
ZmZlciwKICAgICAgICAgICAgICgiRlRMIEIzIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVC
bG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEo
KSkpKTsKIAotI2Vsc2UgLy8gRlRMX1VTRVNfQjMKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBqaXRD
b2RlLT5oYW5kbGVzKCkuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpj
YWNoZUZsdXNoKAotICAgICAgICAgICAgaml0Q29kZS0+aGFuZGxlcygpW2ldLT5zdGFydCgpLCBq
aXRDb2RlLT5oYW5kbGVzKClbaV0tPnNpemVJbkJ5dGVzKCkpOwotICAgIH0KLQotICAgIGlmIChl
eGl0VGh1bmtzTGlua0J1ZmZlcikgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
b3NyRXhpdC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5m
byYgaW5mbyA9IG9zckV4aXRbaV07Ci0gICAgICAgICAgICBleGl0VGh1bmtzTGlua0J1ZmZlci0+
bGluaygKLSAgICAgICAgICAgICAgICBpbmZvLm1fdGh1bmtKdW1wLAotICAgICAgICAgICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsKAotICAgICAgICAgICAgICAgICAgICBtX3BsYW4udm0uZ2V0Q1RJ
U3R1Yihvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgaml0Q29kZS0+aW5pdGlhbGl6ZUV4aXRUaHVua3MoCi0gICAg
ICAgICAgICBGSU5BTElaRV9DT0RFX0lGKAotICAgICAgICAgICAgICAgIGR1bXBEaXNhc3NlbWJs
eSwgKmV4aXRUaHVua3NMaW5rQnVmZmVyLAotICAgICAgICAgICAgICAgICgiRlRMIGV4aXQgdGh1
bmtzIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJs
b2NrLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCkpKSk7Ci0gICAgfSAvLyBlbHNlIHRoaXMgZnVu
Y3Rpb24gaGFkIG5vIE9TUiBleGl0cywgc28gbm8gZXhpdCB0aHVua3MuCi0gICAgCi0gICAgaWYg
KHNpZGVDb2RlTGlua0J1ZmZlcikgewotICAgICAgICAvLyBTaWRlIGNvZGUgaXMgZm9yIHNwZWNp
YWwgc2xvdyBwYXRocyB0aGF0IHdlIGdlbmVyYXRlIG91cnNlbHZlcywgbGlrZSBmb3IgaW5saW5l
Ci0gICAgICAgIC8vIGNhY2hlcy4KLSAgICAgICAgCi0gICAgICAgIGZvciAoQ0NhbGxIZWxwZXJz
OjpKdW1wIGp1bXAgOiBsYXp5U2xvd1BhdGhHZW5lcmF0b3JKdW1wcykgewotICAgICAgICAgICAg
c2lkZUNvZGVMaW5rQnVmZmVyLT5saW5rKAotICAgICAgICAgICAgICAgIGp1bXAsCi0gICAgICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoCi0gICAgICAgICAgICAgICAgICAgIG1fcGxhbi52
bS5nZXRDVElTdHViKGxhenlTbG93UGF0aEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcikuY29kZSgp
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGppdENvZGUtPmFkZEhhbmRsZShGSU5B
TElaRV9DT0RFX0lGKAotICAgICAgICAgICAgZHVtcERpc2Fzc2VtYmx5LCAqc2lkZUNvZGVMaW5r
QnVmZmVyLAotICAgICAgICAgICAgKCJGVEwgc2lkZSBjb2RlIGZvciAlcyIsCi0gICAgICAgICAg
ICAgICAgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJ
VENvZGU6OkZUTEpJVCkpLmRhdGEoKSkpCi0gICAgICAgICAgICAuZXhlY3V0YWJsZU1lbW9yeSgp
KTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGhhbmRsZUV4Y2VwdGlvbnNMaW5rQnVmZmVyKSB7Ci0g
ICAgICAgIGppdENvZGUtPmFkZEhhbmRsZShGSU5BTElaRV9DT0RFX0lGKAotICAgICAgICAgICAg
ZHVtcERpc2Fzc2VtYmx5LCAqaGFuZGxlRXhjZXB0aW9uc0xpbmtCdWZmZXIsCi0gICAgICAgICAg
ICAoIkZUTCBleGNlcHRpb24gaGFuZGxlciBmb3IgJXMiLAotICAgICAgICAgICAgICAgIHRvQ1N0
cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRDb2RlOjpGVExK
SVQpKS5kYXRhKCkpKQotICAgICAgICAgICAgLmV4ZWN1dGFibGVNZW1vcnkoKSk7Ci0gICAgfQot
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG91dE9mTGluZUNvZGVJbmZvcy5zaXplKCk7
ICsraSkgewotICAgICAgICBqaXRDb2RlLT5hZGRIYW5kbGUoRklOQUxJWkVfQ09ERV9JRigKLSAg
ICAgICAgICAgIGR1bXBEaXNhc3NlbWJseSwgKm91dE9mTGluZUNvZGVJbmZvc1tpXS5tX2xpbmtC
dWZmZXIsCi0gICAgICAgICAgICAoIkZUTCBvdXQgb2YgbGluZSBjb2RlIGZvciAlcyBpbmxpbmUg
Y2FjaGUiLCBvdXRPZkxpbmVDb2RlSW5mb3NbaV0ubV9jb2RlRGVzY3JpcHRpb24pKS5leGVjdXRh
YmxlTWVtb3J5KCkpOwotICAgIH0KLSNlbmRpZiAvLyBGVExfVVNFU19CMwotCiAgICAgaml0Q29k
ZS0+aW5pdGlhbGl6ZUFyaXR5Q2hlY2tFbnRyeXBvaW50KAogICAgICAgICBGSU5BTElaRV9DT0RF
X0lGKAogICAgICAgICAgICAgZHVtcERpc2Fzc2VtYmx5LCAqZW50cnlwb2ludExpbmtCdWZmZXIs
CiAgICAgICAgICAgICAoIkZUTCBlbnRyeXBvaW50IHRodW5rIGZvciAlcyB3aXRoIExMVk0gZ2Vu
ZXJhdGVkIGNvZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFu
LmNvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpLCBmdW5jdGlvbikpKTsKICAgICAK
ICAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKGppdENvZGUpOwotI2lmICFGVExfVVNF
U19CMwotICAgIG1fcGxhbi52bS51cGRhdGVGVExMYXJnZXN0U3RhY2tTaXplKGppdENvZGUtPnN0
YWNrbWFwcy5zdGFja1NpemUoKSk7Ci0jZW5kaWYKIAogICAgIGlmIChtX3BsYW4uY29tcGlsYXRp
b24pCiAgICAgICAgIG1fcGxhbi52bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmFkZENvbXBpbGF0
aW9uKG1fcGxhbi5jb21waWxhdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpJVEZpbmFsaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSklURmluYWxpemVyLmgJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMx
LDcgQEAKICNpbmNsdWRlICJERkdGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJGVExHZW5lcmF0ZWRG
dW5jdGlvbi5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKLSNpbmNsdWRlICJGVExPU1JFeGl0
Q29tcGlsYXRpb25JbmZvLmgiCiAjaW5jbHVkZSAiRlRMU2xvd1BhdGhDYWxsLmgiCi0jaW5jbHVk
ZSAiTExWTUFQSS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYWNyb0Fz
c2VtYmxlci5oIgogCkBAIC02MCwyMiArNTgsMTEgQEAgcHVibGljOgogICAgIGJvb2wgZmluYWxp
emUoKSBvdmVycmlkZTsKICAgICBib29sIGZpbmFsaXplRnVuY3Rpb24oKSBvdmVycmlkZTsKIAot
I2lmIEZUTF9VU0VTX0IzCiAgICAgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+IGIzQ29kZUxp
bmtCdWZmZXI7Ci0jZW5kaWYKIAogICAgIC8vIEV2ZW50dWFsbHksIHdlIGNhbiBnZXQgcmlkIG9m
IHRoaXMgd2l0aCBCMy4KICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGlua0J1ZmZlcj4gZW50cnlwb2lu
dExpbmtCdWZmZXI7CiAgICAgCi0jaWYgIUZUTF9VU0VTX0IzCi0gICAgLy8gSW4gQjMsIHdlIGNh
biBkbyBhbGwgb2YgdGhpcyBkaXJlY3RseSBpbiB0aGUgQjMgY29kZS4gVGhhdCBpbmNsdWRlcyBz
bG93IHBhdGhzIGFuZCBleGNlcHRpb24gaGFuZGxlcnMuCi0gICAgc3RkOjp1bmlxdWVfcHRyPExp
bmtCdWZmZXI+IGV4aXRUaHVua3NMaW5rQnVmZmVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxMaW5r
QnVmZmVyPiBzaWRlQ29kZUxpbmtCdWZmZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZm
ZXI+IGhhbmRsZUV4Y2VwdGlvbnNMaW5rQnVmZmVyOwotICAgIFZlY3RvcjxPdXRPZkxpbmVDb2Rl
SW5mbz4gb3V0T2ZMaW5lQ29kZUluZm9zOwotICAgIFZlY3RvcjxPU1JFeGl0Q29tcGlsYXRpb25J
bmZvPiBvc3JFeGl0OwotI2VuZGlmCi0KICAgICBWZWN0b3I8Q0NhbGxIZWxwZXJzOjpKdW1wPiBs
YXp5U2xvd1BhdGhHZW5lcmF0b3JKdW1wczsKICAgICBHZW5lcmF0ZWRGdW5jdGlvbiBmdW5jdGlv
bjsKICAgICBSZWZQdHI8SklUQ29kZT4gaml0Q29kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpTQ2FsbC5jcHAJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZUTEpTQ2FsbC5oIgotCi0jaWYgRU5BQkxFKEZU
TF9KSVQpICYmICFGVExfVVNFU19CMwotCi0jaW5jbHVkZSAiREZHTm9kZS5oIgotI2luY2x1ZGUg
IkZUTFN0YXRlLmgiCi0jaW5jbHVkZSAiTGlua0J1ZmZlci5oIgotCi1uYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBERkc7Ci0KLUpTQ2FsbDo6SlNDYWxs
KCkKLSAgICA6IG1fc3RhY2ttYXBJRChVSU5UX01BWCkKLSAgICAsIG1faW5zdHJ1Y3Rpb25PZmZz
ZXQoVUlOVF9NQVgpCi17Ci19Ci0KLUpTQ2FsbDo6SlNDYWxsKHVuc2lnbmVkIHN0YWNrbWFwSUQs
IE5vZGUqIG5vZGUsIENvZGVPcmlnaW4gY2FsbFNpdGVEZXNjcmlwdGlvbk9yaWdpbikKLSAgICA6
IEpTQ2FsbEJhc2Uobm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3QgPyBDYWxsTGlua0luZm86OkNvbnN0
cnVjdCA6IENhbGxMaW5rSW5mbzo6Q2FsbCwgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBjYWxsU2l0
ZURlc2NyaXB0aW9uT3JpZ2luKQotICAgICwgbV9zdGFja21hcElEKHN0YWNrbWFwSUQpCi0gICAg
LCBtX2luc3RydWN0aW9uT2Zmc2V0KDApCi17Ci0gICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQ2Fs
bCB8fCBub2RlLT5vcCgpID09IENvbnN0cnVjdCB8fCBub2RlLT5vcCgpID09IFRhaWxDYWxsSW5s
aW5lZENhbGxlcik7Ci19Ci0KLXZvaWQgSlNDYWxsOjplbWl0KENDYWxsSGVscGVycyYgaml0LCBT
dGF0ZSYgc3RhdGUsIGludDMyX3Qgb3NyRXhpdEZyb21HZW5lcmljVW53aW5kU3BpbGxTbG90cykK
LXsKLSAgICBKU0NhbGxCYXNlOjplbWl0KGppdCwgc3RhdGUsIG9zckV4aXRGcm9tR2VuZXJpY1Vu
d2luZFNwaWxsU2xvdHMpOwotCi0jaWYgRlRMX1VTRVNfQjMKLSAgICBqaXQuYWRkUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKC0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RhdGUuaml0Q29k
ZS0+Y29tbW9uLmZyYW1lUmVnaXN0ZXJDb3VudCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKSwg
Q0NhbGxIZWxwZXJzOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7Ci0jZWxzZSAvLyBGVExfVVNFU19CMwotICAgIGppdC5hZGRQdHIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLSBzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGF0ZS5qaXRD
b2RlLT5zdGFja21hcHMuc3RhY2tTaXplRm9yTG9jYWxzKCkpKSwgQ0NhbGxIZWxwZXJzOjpmcmFt
ZVBvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0j
ZW5kaWYgLy8gRlRMX1VTRVNfQjMKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAotCi0j
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwotCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmgJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpZm5kZWYgRlRMSlNDYWxsX2gKLSNkZWZpbmUgRlRMSlNDYWxsX2gKLQotI2luY2x1ZGUgIkRG
R0NvbW1vbi5oIgotCi0jaWYgRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwotCi0jaW5j
bHVkZSAiRlRMSlNDYWxsQmFzZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotbmFtZXNwYWNlIERG
RyB7Ci1zdHJ1Y3QgTm9kZTsKLX0KLQotbmFtZXNwYWNlIEZUTCB7Ci0KLWNsYXNzIEpTQ2FsbCA6
IHB1YmxpYyBKU0NhbGxCYXNlIHsKLXB1YmxpYzoKLSAgICBKU0NhbGwoKTsKLSAgICBKU0NhbGwo
dW5zaWduZWQgc3RhY2ttYXBJRCwgREZHOjpOb2RlKiwgQ29kZU9yaWdpbiBjYWxsU2l0ZURlc2Ny
aXB0aW9uT3JpZ2luKTsKLQotICAgIHZvaWQgZW1pdChDQ2FsbEhlbHBlcnMmLCBTdGF0ZSYsIGlu
dDMyX3Qgb3NyRXhpdEZyb21HZW5lcmljVW53aW5kU3BpbGxTbG90cyk7Ci0gICAgCi0gICAgdW5z
aWduZWQgc3RhY2ttYXBJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBJRDsgfQotICAgIAot
ICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEpTQ2FsbCYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gbV9pbnN0cnVjdGlvbk9mZnNldCA8IG90aGVyLm1faW5zdHJ1Y3Rpb25PZmZz
ZXQ7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX3N0YWNrbWFwSUQ7Ci0K
LXB1YmxpYzoKLSAgICB1aW50MzJfdCBtX2luc3RydWN0aW9uT2Zmc2V0OwotfTsKLQotfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYmICFGVExf
VVNFU19CMwotCi0jZW5kaWYgLy8gRlRMSlNDYWxsX2gKLQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDEwNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGVExKU0NhbGxCYXNlLmgiCi0K
LSNpZiBFTkFCTEUoRlRMX0pJVCkgJiYgIUZUTF9VU0VTX0IzCi0KLSNpbmNsdWRlICJERkdOb2Rl
LmgiCi0jaW5jbHVkZSAiRlRMU3RhdGUuaCIKLSNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCi0KLW5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKLQotdXNpbmcgbmFtZXNwYWNlIERGRzsKLQot
SlNDYWxsQmFzZTo6SlNDYWxsQmFzZSgpCi0gICAgOiBtX3R5cGUoQ2FsbExpbmtJbmZvOjpOb25l
KQotICAgICwgbV9jYWxsTGlua0luZm8obnVsbHB0cikKLSAgICAsIG1fY29ycmVzcG9uZGluZ0dl
bmVyaWNVbndpbmRPU1JFeGl0KG51bGxwdHIpCi17Ci19Ci0KLUpTQ2FsbEJhc2U6OkpTQ2FsbEJh
c2UoQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSB0eXBlLCBDb2RlT3JpZ2luIHNlbWFudGljLCBDb2Rl
T3JpZ2luIGNhbGxTaXRlRGVzY3JpcHRpb24pCi0gICAgOiBtX3R5cGUodHlwZSkKLSAgICAsIG1f
c2VtYW50aWNlT3JpZ2luKHNlbWFudGljKQotICAgICwgbV9jYWxsU2l0ZURlc2NyaXB0aW9uT3Jp
Z2luKGNhbGxTaXRlRGVzY3JpcHRpb24pCi0gICAgLCBtX2NhbGxMaW5rSW5mbyhudWxscHRyKQot
ewotfQotCi12b2lkIEpTQ2FsbEJhc2U6OmVtaXQoQ0NhbGxIZWxwZXJzJiBqaXQsIFN0YXRlJiAv
KnN0YXRlKi8sIGludDMyX3Qgb3NyRXhpdEZyb21HZW5lcmljVW53aW5kU3RhY2tTcGlsbFNsb3Qp
Ci17Ci0gICAgUkVMRUFTRV9BU1NFUlQoISFtX2NhbGxTaXRlSW5kZXgpOwotCi0gICAgaWYgKG1f
Y29ycmVzcG9uZGluZ0dlbmVyaWNVbndpbmRPU1JFeGl0KQotICAgICAgICBtX2NvcnJlc3BvbmRp
bmdHZW5lcmljVW53aW5kT1NSRXhpdC0+c3BpbGxSZWdpc3RlcnNUb1NwaWxsU2xvdChqaXQsIG9z
ckV4aXRGcm9tR2VuZXJpY1Vud2luZFN0YWNrU3BpbGxTbG90KTsKLQotICAgIGppdC5zdG9yZTMy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fY2FsbFNpdGVJbmRleC5iaXRzKCkpLCBDQ2Fs
bEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFy
Z3VtZW50Q291bnQpKSk7Ci0KLSAgICBtX2NhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+
YWRkQ2FsbExpbmtJbmZvKCk7Ci0gICAgCi0gICAgaWYgKENhbGxMaW5rSW5mbzo6Y2FsbE1vZGVG
b3IobV90eXBlKSA9PSBDYWxsTW9kZTo6VGFpbCkKLSAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKLQotICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFu
Y2hQdHJXaXRoUGF0Y2goCi0gICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86
OnJlZ1QwLCBtX3RhcmdldFRvQ2hlY2ssCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cigwKSk7Ci0KLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKLQotICAgIGlmIChDYWxs
TGlua0luZm86OmNhbGxNb2RlRm9yKG1fdHlwZSkgPT0gQ2FsbE1vZGU6OlRhaWwpIHsKLSAgICAg
ICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKLSAgICAgICAgbV9mYXN0Q2FsbCA9IGpp
dC5uZWFyVGFpbENhbGwoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX2Zhc3RDYWxsID0gaml0
Lm5lYXJDYWxsKCk7Ci0gICAgICAgIGRvbmUgPSBqaXQuanVtcCgpOwotICAgIH0KLQotICAgIHNs
b3dQYXRoLmxpbmsoJmppdCk7Ci0KLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIobV9jYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgbV9zbG93Q2FsbCA9
IGppdC5uZWFyQ2FsbCgpOwotCi0gICAgaWYgKENhbGxMaW5rSW5mbzo6Y2FsbE1vZGVGb3IobV90
eXBlKSA9PSBDYWxsTW9kZTo6VGFpbCkKLSAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVRE
aWRSZXR1cm5Gcm9tVGFpbENhbGwpOwotICAgIGVsc2UKLSAgICAgICAgZG9uZS5saW5rKCZqaXQp
OwotCi0gICAgbV9jYWxsTGlua0luZm8tPnNldFVwQ2FsbChtX3R5cGUsIG1fc2VtYW50aWNlT3Jp
Z2luLCBHUFJJbmZvOjpyZWdUMCk7Ci19Ci0KLXZvaWQgSlNDYWxsQmFzZTo6bGluayhWTSYgdm0s
IExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCi17Ci0gICAgbGlua0J1ZmZlci5saW5rKAotICAgICAg
ICBtX3Nsb3dDYWxsLCBGdW5jdGlvblB0cih2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5l
cmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0KLSAgICBtX2NhbGxMaW5rSW5m
by0+c2V0Q2FsbExvY2F0aW9ucyhsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX3Nsb3dD
YWxsKSwKLSAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fdGFyZ2V0VG9DaGVjayksIGxp
bmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fZmFzdENhbGwpKTsKLX0KLQotfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNF
U19CMwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuaAko
cmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxC
YXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEZUTEpTQ2FsbEJhc2VfaAotI2Rl
ZmluZSBGVExKU0NhbGxCYXNlX2gKLQotI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgotCi0jaWYgRU5B
QkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwotCi0jaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgi
Ci0jaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCi0jaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgotI2lu
Y2x1ZGUgIkZUTE9TUkV4aXQuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIExpbmtCdWZm
ZXI7Ci0KLW5hbWVzcGFjZSBERkcgewotc3RydWN0IE5vZGU7Ci19Ci0KLW5hbWVzcGFjZSBGVEwg
ewotCi1jbGFzcyBTdGF0ZTsKLQotY2xhc3MgSlNDYWxsQmFzZSB7Ci1wdWJsaWM6Ci0gICAgSlND
YWxsQmFzZSgpOwotICAgIEpTQ2FsbEJhc2UoQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSwgQ29kZU9y
aWdpbiBzZW1hbnRpYywgQ29kZU9yaWdpbiBjYWxsU2l0ZURlc2NyaXB0aW9uKTsKLSAgICAKLSAg
ICB2b2lkIGVtaXQoQ0NhbGxIZWxwZXJzJiwgU3RhdGUmLCBpbnQzMl90IG9zckV4aXRGcm9tR2Vu
ZXJpY1Vud2luZFNwaWxsU2xvdHMpOwotICAgIHZvaWQgbGluayhWTSYsIExpbmtCdWZmZXImKTsK
LQotICAgIHZvaWQgc2V0Q2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgp
IHsgbV9jYWxsU2l0ZUluZGV4ID0gY2FsbFNpdGVJbmRleDsgfQotICAgIENvZGVPcmlnaW4gY2Fs
bFNpdGVEZXNjcmlwdGlvbk9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbFNpdGVEZXNjcmlw
dGlvbk9yaWdpbjsgfQotCi0gICAgdm9pZCBzZXRDb3JyZXNwb25kaW5nR2VuZXJpY1Vud2luZE9T
UkV4aXQoT1NSRXhpdCogZXhpdCkgeyBtX2NvcnJlc3BvbmRpbmdHZW5lcmljVW53aW5kT1NSRXhp
dCA9IGV4aXQ7IH0KLSAgICAKLXByb3RlY3RlZDoKLSAgICBDYWxsTGlua0luZm86OkNhbGxUeXBl
IG1fdHlwZTsKLSAgICBDb2RlT3JpZ2luIG1fc2VtYW50aWNlT3JpZ2luOwotICAgIENvZGVPcmln
aW4gbV9jYWxsU2l0ZURlc2NyaXB0aW9uT3JpZ2luOyAvLyBUaGVzZSB0d28gY29kZSBvcmlnaW5z
IG1heSBiZSBkaWZmZXJlbnQgd2l0aCB0YWlsIGNhbGxzIHVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNl
cyBvZiBpbmxpbmluZy4gU2VlIHJlbGV2YW50IGNvbW1lbnQgaW4gTG93ZXJERkdUb0xMVk0uCi0g
ICAgQ2FsbFNpdGVJbmRleCBtX2NhbGxTaXRlSW5kZXg7Ci0gICAgQ0NhbGxIZWxwZXJzOjpEYXRh
TGFiZWxQdHIgbV90YXJnZXRUb0NoZWNrOwotICAgIENDYWxsSGVscGVyczo6Q2FsbCBtX2Zhc3RD
YWxsOwotICAgIENDYWxsSGVscGVyczo6Q2FsbCBtX3Nsb3dDYWxsOwotICAgIENhbGxMaW5rSW5m
byogbV9jYWxsTGlua0luZm87Ci1wdWJsaWM6Ci0gICAgT1NSRXhpdCogbV9jb3JyZXNwb25kaW5n
R2VuZXJpY1Vud2luZE9TUkV4aXQ7Ci19OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCi0K
LSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkgJiYgIUZUTF9VU0VTX0IzCi0KLSNlbmRpZiAvLyBG
VExKU0NhbGxCYXNlX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0Nh
bGxWYXJhcmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpTQ2FsbFZhcmFyZ3MuY3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIyOSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGVExKU0NhbGxWYXJhcmdzLmgiCi0KLSNpZiBF
TkFCTEUoRlRMX0pJVCkgJiYgIUZUTF9VU0VTX0IzCi0KLSNpbmNsdWRlICJERkdOb2RlLmgiCi0j
aW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkZUTFN0YXRlLmgiCi0jaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgot
Ci1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBERkc7
Ci0KLUpTQ2FsbFZhcmFyZ3M6OkpTQ2FsbFZhcmFyZ3MoKQotICAgIDogbV9zdGFja21hcElEKFVJ
TlRfTUFYKQotICAgICwgbV9ub2RlKG51bGxwdHIpCi0gICAgLCBtX2luc3RydWN0aW9uT2Zmc2V0
KFVJTlRfTUFYKQotewotfQotCi1KU0NhbGxWYXJhcmdzOjpKU0NhbGxWYXJhcmdzKHVuc2lnbmVk
IHN0YWNrbWFwSUQsIE5vZGUqIG5vZGUsIENvZGVPcmlnaW4gY2FsbFNpdGVEZXNjcmlwdGlvbk9y
aWdpbikKLSAgICA6IG1fc3RhY2ttYXBJRChzdGFja21hcElEKQotICAgICwgbV9ub2RlKG5vZGUp
Ci0gICAgLCBtX2NhbGxCYXNlKAotICAgICAgICAobm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3RWYXJh
cmdzIHx8IG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3MpCi0gICAgICAgID8g
Q2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzIDogKG5vZGUtPm9wKCkgPT0gVGFpbENhbGxW
YXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJncykKLSAgICAgICAg
PyBDYWxsTGlua0luZm86OlRhaWxDYWxsVmFyYXJncyA6IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFy
Z3MsCi0gICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2FsbFNpdGVEZXNjcmlwdGlvbk9y
aWdpbikKLSAgICAsIG1faW5zdHJ1Y3Rpb25PZmZzZXQoMCkKLXsKLSAgICBBU1NFUlQoCi0gICAg
ICAgIG5vZGUtPm9wKCkgPT0gQ2FsbFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBDYWxsRm9yd2Fy
ZFZhcmFyZ3MKLSAgICAgICAgfHwgbm9kZS0+b3AoKSA9PSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVk
Q2FsbGVyIHx8IG5vZGUtPm9wKCkgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxs
ZXIKLSAgICAgICAgfHwgbm9kZS0+b3AoKSA9PSBUYWlsQ2FsbFZhcmFyZ3MgfHwgbm9kZS0+b3Ao
KSA9PSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzCi0gICAgICAgIHx8IG5vZGUtPm9wKCkgPT0gQ29u
c3RydWN0VmFyYXJncyB8fCBub2RlLT5vcCgpID09IENvbnN0cnVjdEZvcndhcmRWYXJhcmdzKTsK
LX0KLQotdW5zaWduZWQgSlNDYWxsVmFyYXJnczo6bnVtU3BpbGxTbG90c05lZWRlZCgpCi17Ci0g
ICAgcmV0dXJuIDQ7Ci19Ci0KLXZvaWQgSlNDYWxsVmFyYXJnczo6ZW1pdChDQ2FsbEhlbHBlcnMm
IGppdCwgU3RhdGUmIHN0YXRlLCBpbnQzMl90IHNwaWxsU2xvdHNPZmZzZXQsIGludDMyX3Qgb3Ny
RXhpdEZyb21HZW5lcmljVW53aW5kU3BpbGxTbG90cykKLXsKLSAgICAvLyBXZSBhcmUgcGFzc2Vk
IHRocmVlIHBpZWNlcyBvZiBpbmZvcm1hdGlvbjoKLSAgICAvLyAtIFRoZSBjYWxsZWUuCi0gICAg
Ly8gLSBUaGUgYXJndW1lbnRzIG9iamVjdCwgaWYgaXQncyBub3QgYSBmb3J3YXJkaW5nIGNhbGwu
Ci0gICAgLy8gLSBUaGUgInRoaXMiIHZhbHVlLCBpZiBpdCdzIGEgY29uc3RydWN0b3IgY2FsbC4K
LQotICAgIENhbGxWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7
Ci0gICAgCi0gICAgR1BSUmVnIGNhbGxlZUdQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMDsKLSAg
ICAKLSAgICBHUFJSZWcgYXJndW1lbnRzR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICBHUFJSZWcg
dGhpc0dQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgCi0gICAgYm9vbCBmb3J3YXJkaW5nID0gZmFs
c2U7Ci0gICAgCi0gICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsKLSAgICBjYXNlIENhbGxWYXJh
cmdzOgotICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgotICAgIGNhc2UgVGFpbENhbGxWYXJhcmdz
SW5saW5lZENhbGxlcjoKLSAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6Ci0gICAgICAgIGFyZ3Vt
ZW50c0dQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKLSAgICAgICAgdGhpc0dQUiA9IEdQUklu
Zm86OmFyZ3VtZW50R1BSMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDYWxsRm9yd2FyZFZh
cmFyZ3M6Ci0gICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgotICAgIGNhc2UgVGFpbENh
bGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6Ci0gICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJk
VmFyYXJnczoKLSAgICAgICAgdGhpc0dQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKLSAgICAg
ICAgZm9yd2FyZGluZyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICAKLSAgICBjb25zdCB1bnNpZ25lZCBjYWxsZWVTcGlsbFNsb3QgPSAwOwotICAgIGNvbnN0
IHVuc2lnbmVkIGFyZ3VtZW50c1NwaWxsU2xvdCA9IDE7Ci0gICAgY29uc3QgdW5zaWduZWQgdGhp
c1NwaWxsU2xvdCA9IDI7Ci0gICAgY29uc3QgdW5zaWduZWQgc3RhY2tQb2ludGVyU3BpbGxTbG90
ID0gMzsKLSAgICAKLSAgICAvLyBHZXQgc29tZSBzY3JhdGNoIHJlZ2lzdGVycy4KLSAgICBSZWdp
c3RlclNldCB1c2VkUmVnaXN0ZXJzOwotICAgIHVzZWRSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJT
ZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOwotICAgIHVzZWRSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJT
ZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7Ci0gICAgdXNlZFJlZ2lzdGVycy5tZXJn
ZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKLSAgICB1c2VkUmVnaXN0ZXJz
LnNldChjYWxsZWVHUFIpOwotICAgIGlmIChhcmd1bWVudHNHUFIgIT0gSW52YWxpZEdQUlJlZykK
LSAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQoYXJndW1lbnRzR1BSKTsKLSAgICBBU1NFUlQodGhp
c0dQUik7Ci0gICAgdXNlZFJlZ2lzdGVycy5zZXQodGhpc0dQUik7Ci0gICAgU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yIGFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKLSAgICBHUFJSZWcgc2NyYXRj
aEdQUjEgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0gICAgR1BSUmVnIHNjcmF0
Y2hHUFIyID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgIEdQUlJlZyBzY3Jh
dGNoR1BSMyA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLQotICAgIFJFTEVBU0Vf
QVNTRVJUKCFhbGxvY2F0b3IubnVtYmVyT2ZSZXVzZWRSZWdpc3RlcnMoKSk7Ci0gICAgCi0gICAg
YXV0byBjb21wdXRlVXNlZFN0YWNrID0gWyZdIChHUFJSZWcgdGFyZ2V0R1BSLCB1bnNpZ25lZCBl
eHRyYSkgewotICAgICAgICBpZiAoaXNBUk02NCgpKSB7Ci0gICAgICAgICAgICAvLyBIYXZlIHRv
IGRvIHRoaXMgdGhlIHdlaXJkIHdheSBiZWNhdXNlICRzcCBvbiBBUk02NCBtZWFucyB6ZXJvIHdo
ZW4gdXNlZCBpbiBhIHN1YnRyYWN0aW9uLgotICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgdGFyZ2V0R1BSKTsKLSAgICAgICAgICAgIGppdC5u
ZWdQdHIodGFyZ2V0R1BSKTsKLSAgICAgICAgICAgIGppdC5hZGRQdHIoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIHRhcmdldEdQUik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBq
aXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgdGFyZ2V0R1BSKTsKLSAgICAgICAg
ICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgdGFyZ2V0
R1BSKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXh0cmEpCi0gICAgICAgICAgICBqaXQuc3Vi
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGV4dHJhKSwgdGFyZ2V0R1BSKTsKLSAgICAg
ICAgaml0LnVyc2hpZnRQdHIoQ0NhbGxIZWxwZXJzOjpJbW0zMigzKSwgdGFyZ2V0R1BSKTsKLSAg
ICB9OwotICAgIAotICAgIGF1dG8gY2FsbFdpdGhFeGNlcHRpb25DaGVjayA9IFsmXSAodm9pZCog
Y2FsbGVlKSB7Ci0gICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihj
YWxsZWUpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7Ci0gICAgICAgIGpp
dC5jYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKLSAgICAgICAgbV9l
eGNlcHRpb25zLmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKEFzc2VtYmx5SGVscGVyczo6
Tm9ybWFsRXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVscGVyczo6RmFySnVtcFdpZHRoKSk7Ci0g
ICAgfTsKLSAgICAKLSAgICBpZiAoaXNBUk02NCgpKSB7Ci0gICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNjcmF0Y2hHUFIxKTsKLSAgICAgICAgaml0
LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90
c09mZnNldCArIHN0YWNrUG9pbnRlclNwaWxsU2xvdCkpOwotICAgIH0gZWxzZQotICAgICAgICBq
aXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgQ0NhbGxIZWxw
ZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBzdGFja1BvaW50ZXJTcGlsbFNsb3Qp
KTsKLQotICAgIHVuc2lnbmVkIGV4dHJhU3RhY2sgPSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykg
KwotICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygp
LCA1ICogc2l6ZW9mKHZvaWQqKSk7Ci0KLSAgICBpZiAoZm9yd2FyZGluZykgewotICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dDYXNlOwotICAgICAgICBjb21wdXRlVXNlZFN0YWNr
KHNjcmF0Y2hHUFIyLCAwKTsKLSAgICAgICAgZW1pdFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uo
aml0LCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywg
bV9ub2RlLT5jaGlsZDIoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSwgZGF0YS0+
Zmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKLSAgICAgICAgCi0gICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKLSAgICAgICAgc2xvd0Nhc2UubGluaygmaml0
KTsKLSAgICAgICAgaml0LnN1YlB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihleHRyYVN0
YWNrKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIGppdC5z
ZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwotICAgICAgICBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93Rm9yVmFyYXJn
cykpOwotICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKERGR1ZhcmFyZ3NUaHJvd2luZ1BhdGhE
aWROb3RUaHJvdyk7Ci0gICAgICAgIAotICAgICAgICBkb25lLmxpbmsoJmppdCk7Ci0gICAgICAg
IGppdC5tb3ZlKGNhbGxlZUdQUiwgR1BSSW5mbzo6cmVnVDApOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIC8vIEdvdHRhIHNwaWxsIHRoZSBjYWxsZWUsIGFyZ3VtZW50cywgYW5kIHRoaXMgYmVjYXVz
ZSB3ZSB3aWxsIG5lZWQgdGhlbSBsYXRlciBhbmQgd2Ugd2lsbCBoYXZlIHNvbWUKLSAgICAgICAg
Ly8gY2FsbHMgdGhhdCBjbG9iYmVyIHRoZW0uCi0gICAgICAgIGppdC5zdG9yZTY0KGNhbGxlZUdQ
UiwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBjYWxsZWVTcGls
bFNsb3QpKTsKLSAgICAgICAgaml0LnN0b3JlNjQoYXJndW1lbnRzR1BSLCBDQ2FsbEhlbHBlcnM6
OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIGFyZ3VtZW50c1NwaWxsU2xvdCkpOwotICAg
ICAgICBqaXQuc3RvcmU2NCh0aGlzR1BSLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxT
bG90c09mZnNldCArIHRoaXNTcGlsbFNsb3QpKTsKLSAgICAKLSAgICAgICAgY29tcHV0ZVVzZWRT
dGFjayhzY3JhdGNoR1BSMSwgMCk7Ci0gICAgICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoZXh0cmFTdGFjayksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwotICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZ3VtZW50c0dQ
Uiwgc2NyYXRjaEdQUjEsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGRhdGEtPmZpcnN0VmFy
QXJnT2Zmc2V0KSk7Ci0gICAgICAgIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2soYml0d2lzZV9jYXN0
PHZvaWQqPihvcGVyYXRpb25TaXplRnJhbWVGb3JWYXJhcmdzKSk7Ci0gICAgCi0gICAgICAgIGpp
dC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIGNv
bXB1dGVVc2VkU3RhY2soc2NyYXRjaEdQUjIsIGV4dHJhU3RhY2spOwotICAgICAgICBqaXQubG9h
ZDY0KENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3RzT2Zmc2V0ICsgYXJndW1lbnRz
U3BpbGxTbG90KSwgYXJndW1lbnRzR1BSKTsKLSAgICAgICAgZW1pdFNldFZhcmFyZ3NGcmFtZShq
aXQsIHNjcmF0Y2hHUFIxLCBmYWxzZSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIyKTsKLSAgICAg
ICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtZXh0cmFTdGFjayksIHNj
cmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAg
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShzY3JhdGNoR1BSMiwgYXJndW1lbnRzR1BS
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihkYXRhLT5maXJzdFZhckFyZ09mZnNldCksIHNj
cmF0Y2hHUFIxKTsKLSAgICAgICAgY2FsbFdpdGhFeGNlcHRpb25DaGVjayhiaXR3aXNlX2Nhc3Q8
dm9pZCo+KG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lKSk7Ci0gICAgCi0gICAgICAgIGppdC5t
b3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBzY3JhdGNoR1BSMik7Ci0KLSAgICAgICAgaml0
LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIHRoaXNT
cGlsbFNsb3QpLCB0aGlzR1BSKTsKLSAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OmFk
ZHJlc3NGb3Ioc3BpbGxTbG90c09mZnNldCArIGNhbGxlZVNwaWxsU2xvdCksIEdQUkluZm86OnJl
Z1QwKTsKLSAgICB9Ci0gICAgCi0gICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBzY3JhdGNoR1BSMiwgQ0NhbGxIZWxwZXJz
OjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0KLSAgICBqaXQuc3RvcmU2NCh0aGlzR1BSLCBDQ2Fs
bEhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCgwKSk7Ci0gICAgCi0gICAgLy8gSGVuY2Vmb3J0
aCB3ZSBtYWtlIHRoZSBjYWxsLiBUaGUgYmFzZSBGVEwgY2FsbCBtYWNoaW5lcnkgZXhwZWN0cyB0
aGUgY2FsbGVlIGluIHJlZ1QwIGFuZCBmb3IgdGhlCi0gICAgLy8gc3RhY2sgZnJhbWUgdG8gYWxy
ZWFkeSBiZSBzZXQgdXAsIHdoaWNoIGl0IGlzLgotICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJl
Z1QwLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUZyYW1lU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKLQot
ICAgIG1fY2FsbEJhc2UuZW1pdChqaXQsIHN0YXRlLCBvc3JFeGl0RnJvbUdlbmVyaWNVbndpbmRT
cGlsbFNsb3RzKTsKLQotICAgIAotICAgIC8vIFVuZG8gdGhlIGRhbWFnZSB3ZSd2ZSBkb25lLgot
ICAgIGlmIChpc0FSTTY0KCkpIHsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFJBdFJldHVybiA9
IENDYWxsSGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7
Ci0gICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3Rz
T2Zmc2V0ICsgc3RhY2tQb2ludGVyU3BpbGxTbG90KSwgc2NyYXRjaEdQUkF0UmV0dXJuKTsKLSAg
ICAgICAgaml0Lm1vdmUoc2NyYXRjaEdQUkF0UmV0dXJuLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKLSAgICB9IGVsc2UKLSAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjphZGRyZXNzRm9yKHNwaWxsU2xvdHNPZmZzZXQgKyBzdGFja1BvaW50ZXJTcGlsbFNsb3Qp
LCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLX0KLQotdm9pZCBKU0NhbGxW
YXJhcmdzOjpsaW5rKFZNJiB2bSwgTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgQ29kZUxvY2F0aW9u
TGFiZWwgZXhjZXB0aW9uSGFuZGxlcikKLXsKLSAgICBtX2NhbGxCYXNlLmxpbmsodm0sIGxpbmtC
dWZmZXIpOwotICAgIGxpbmtCdWZmZXIubGluayhtX2V4Y2VwdGlvbnMsIGV4Y2VwdGlvbkhhbmRs
ZXIpOwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCi0KLSNlbmRpZiAvLyBFTkFCTEUo
RlRMX0pJVCkgJiYgIUZUTF9VU0VTX0IzCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSlNDYWxsVmFyYXJncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSlNDYWxsVmFyYXJncy5oCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpZm5kZWYgRlRMSlNDYWxsVmFyYXJnc19oCi0jZGVmaW5lIEZUTEpTQ2FsbFZhcmFyZ3NfaAot
Ci0jaW5jbHVkZSAiREZHQ29tbW9uLmgiCi0KLSNpZiBFTkFCTEUoRlRMX0pJVCkgJiYgIUZUTF9V
U0VTX0IzCi0KLSNpbmNsdWRlICJGVExKU0NhbGxCYXNlLmgiCi0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1jbGFzcyBMaW5rQnVmZmVyOwotCi1uYW1lc3BhY2UgREZHIHsKLXN0cnVjdCBOb2RlOwotfQot
Ci1uYW1lc3BhY2UgRlRMIHsKLQotY2xhc3MgSlNDYWxsVmFyYXJncyB7Ci1wdWJsaWM6Ci0gICAg
SlNDYWxsVmFyYXJncygpOwotICAgIEpTQ2FsbFZhcmFyZ3ModW5zaWduZWQgc3RhY2ttYXBJRCwg
REZHOjpOb2RlKiwgQ29kZU9yaWdpbiBjYWxsU2l0ZURlc2NyaXB0aW9uT3JpZ2luKTsKLSAgICAK
LSAgICBERkc6Ok5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KLSAgICAKLSAg
ICBzdGF0aWMgdW5zaWduZWQgbnVtU3BpbGxTbG90c05lZWRlZCgpOwotICAgIAotICAgIHZvaWQg
ZW1pdChDQ2FsbEhlbHBlcnMmLCBTdGF0ZSYsIGludDMyX3Qgc3BpbGxTbG90c09mZnNldCwgaW50
MzJfdCBvc3JFeGl0RnJvbUdlbmVyaWNVbndpbmRTcGlsbFNsb3RzKTsKLSAgICB2b2lkIGxpbmso
Vk0mLCBMaW5rQnVmZmVyJiwgQ29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uSGFuZGxlcik7Ci0g
ICAgCi0gICAgdW5zaWduZWQgc3RhY2ttYXBJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBJ
RDsgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEpTQ2FsbFZhcmFyZ3MmIG90aGVy
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW5zdHJ1Y3Rpb25PZmZzZXQgPCBvdGhl
ci5tX2luc3RydWN0aW9uT2Zmc2V0OwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldENhbGxTaXRl
SW5kZXgoQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KSB7IG1fY2FsbEJhc2Uuc2V0Q2FsbFNp
dGVJbmRleChjYWxsU2l0ZUluZGV4KTsgfQotICAgIENvZGVPcmlnaW4gY2FsbFNpdGVEZXNjcmlw
dGlvbk9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEJhc2UuY2FsbFNpdGVEZXNjcmlwdGlv
bk9yaWdpbigpOyB9Ci0gICAgdm9pZCBzZXRDb3JyZXNwb25kaW5nR2VuZXJpY1Vud2luZE9TUkV4
aXQoT1NSRXhpdCogZXhpdCkgeyBtX2NhbGxCYXNlLnNldENvcnJlc3BvbmRpbmdHZW5lcmljVW53
aW5kT1NSRXhpdChleGl0KTsgfQotICAgIAotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX3N0YWNr
bWFwSUQ7Ci0gICAgREZHOjpOb2RlKiBtX25vZGU7Ci0gICAgSlNDYWxsQmFzZSBtX2NhbGxCYXNl
OwotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgbV9leGNlcHRpb25zOwotCi1wdWJsaWM6Ci0g
ICAgdWludDMyX3QgbV9pbnN0cnVjdGlvbk9mZnNldDsKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKLQotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKSAmJiAhRlRMX1VTRVNfQjMKLQot
I2VuZGlmIC8vIEZUTEpTQ2FsbFZhcmFyZ3NfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpTVGFpbENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSlNUYWlsQ2FsbC5jcHAJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNUYWlsQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MzI4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRlRMSlNUYWlsQ2FsbC5oIgot
Ci0jaWYgRU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwotCi0jaW5jbHVkZSAiQ2FsbEZy
YW1lU2h1ZmZsZXIuaCIKLSNpbmNsdWRlICJERkdOb2RlLmgiCi0jaW5jbHVkZSAiRlRMSklUQ29k
ZS5oIgotI2luY2x1ZGUgIkZUTExvY2F0aW9uLmgiCi0jaW5jbHVkZSAiRlRMU3RhY2tNYXBzLmgi
Ci0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJMaW5rQnVmZmVyLmgi
Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKLQotdXNpbmcgbmFtZXNwYWNlIERG
RzsKLQotbmFtZXNwYWNlIHsKLQotRlRMOjpMb2NhdGlvbiBnZXRSZWdpc3RlcldpdGhBZGRlbmQo
Y29uc3QgRXhpdFZhbHVlJiB2YWx1ZSwgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCwgU3RhY2tN
YXBzJiBzdGFja21hcHMpCi17Ci0gICAgaWYgKHZhbHVlLmtpbmQoKSAhPSBFeGl0VmFsdWVBcmd1
bWVudCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGF1dG8gbG9jYXRpb24gPQotICAgICAg
ICBGVEw6OkxvY2F0aW9uOjpmb3JTdGFja21hcHMoJnN0YWNrbWFwcywgcmVjb3JkLmxvY2F0aW9u
c1t2YWx1ZS5leGl0QXJndW1lbnQoKS5hcmd1bWVudCgpXSk7Ci0KLSAgICBpZiAobG9jYXRpb24u
a2luZCgpICE9IExvY2F0aW9uOjpSZWdpc3RlciB8fCAhbG9jYXRpb24uYWRkZW5kKCkpCi0gICAg
ICAgIHJldHVybiB7IH07Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChsb2NhdGlvbi5pc0dQUigpKTsK
LSAgICByZXR1cm4gbG9jYXRpb247Ci19Ci0KLVZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnlGb3IoY29u
c3QgRXhpdFZhbHVlJiB2YWx1ZSwgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCwgU3RhY2tNYXBz
JiBzdGFja21hcHMpCi17Ci0gICAgc3dpdGNoICh2YWx1ZS5raW5kKCkpIHsKLSAgICBjYXNlIEV4
aXRWYWx1ZUNvbnN0YW50OgotICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQo
dmFsdWUuY29uc3RhbnQoKSk7Ci0KLSAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50OiB7Ci0gICAg
ICAgIGF1dG8gbG9jYXRpb24gPQotICAgICAgICAgICAgRlRMOjpMb2NhdGlvbjo6Zm9yU3RhY2tt
YXBzKCZzdGFja21hcHMsIHJlY29yZC5sb2NhdGlvbnNbdmFsdWUuZXhpdEFyZ3VtZW50KCkuYXJn
dW1lbnQoKV0pOwotICAgICAgICBhdXRvIGZvcm1hdCA9IHZhbHVlLmV4aXRBcmd1bWVudCgpLmZv
cm1hdCgpOwotCi0gICAgICAgIHN3aXRjaCAobG9jYXRpb24ua2luZCgpKSB7Ci0gICAgICAgIGNh
c2UgTG9jYXRpb246OlJlZ2lzdGVyOgotICAgICAgICAgICAgLy8gV2UgaGFuZGxlIHRoZSBhZGRl
bmQgb3V0c2lkZQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluUmVnaXN0ZXIo
bG9jYXRpb24ucmVnKCksIGZvcm1hdCk7Ci0KLSAgICAgICAgY2FzZSBMb2NhdGlvbjo6SW5kaXJl
Y3Q6Ci0gICAgICAgICAgICAvLyBPaCBMTFZNLCB5b3UgY3JhenkuLi4KLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGxvY2F0aW9uLnJlZygpID09IFJlZyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQ
b2ludGVyUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEobG9jYXRpb24u
b2Zmc2V0KCkgJSBzaXplb2Yodm9pZCopKSk7Ci0gICAgICAgICAgICAvLyBEYXRhRm9ybWF0SW50
MzIgYW5kIERhdGFGb3JtYXRCb29sZWFuIHNob3VsZCBiZSBhbHJlYWR5IGJlIGJveGVkLgotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZm9ybWF0ICE9IERhdGFGb3JtYXRJbnQzMiAmJiBmb3Jt
YXQgIT0gRGF0YUZvcm1hdEJvb2xlYW4pOwotICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zl
cnk6OmRpc3BsYWNlZEluSlNTdGFjayhWaXJ0dWFsUmVnaXN0ZXIgeyBzdGF0aWNfY2FzdDxpbnQ+
KGxvY2F0aW9uLm9mZnNldCgpIC8gc2l6ZW9mKHZvaWQqKSkgfSwgZm9ybWF0KTsKLQotICAgICAg
ICBjYXNlIExvY2F0aW9uOjpDb25zdGFudDoKLSAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292
ZXJ5Ojpjb25zdGFudChKU1ZhbHVlOjpkZWNvZGUobG9jYXRpb24uY29uc3RhbnQoKSkpOwotCi0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6Ci0gICAg
ICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2sodmFsdWUudmlydHVh
bFJlZ2lzdGVyKCksIERhdGFGb3JtYXRKUyk7Ci0KLSAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFj
a0FzSW50MzI6Ci0gICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3Rh
Y2sodmFsdWUudmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXRJbnQzMik7Ci0KLSAgICBjYXNl
IEV4aXRWYWx1ZUluSlNTdGFja0FzSW50NTI6Ci0gICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5
OjpkaXNwbGFjZWRJbkpTU3RhY2sodmFsdWUudmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXRJ
bnQ1Mik7Ci0KLSAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlOgotICAgICAgICBy
ZXR1cm4gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKHZhbHVlLnZpcnR1YWxSZWdp
c3RlcigpLCBEYXRhRm9ybWF0RG91YmxlKTsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi0vLyBUaGlzIGNvbXB1dGVzIGFu
IGVzdGltYXRlZCBzaXplIChpbiBiaXRzKSBmb3IgdGhlIHNlcXVlbmNlIG9mCi0vLyBpbnN0cnVj
dGlvbnMgcmVxdWlyZWQgdG8gbG9hZCwgYm94LCBhbmQgc3RvcmUgYSB2YWx1ZSBvZiBhIGdpdmVu
Ci0vLyB0eXBlLCBhc3N1bWluZyBubyBzcGlsbGluZyBpcyByZXF1aXJlZC4KLXVpbnQzMl90IHNp
emVGb3IoRGF0YUZvcm1hdCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBj
YXNlIERhdGFGb3JtYXRJbnQzMjoKLSAgICAgICAgLy8gQm94aW5nIGlzIHplcm8tZXh0ZW5kaW5n
IGFuZCB0YWdnaW5nCi0jaWYgQ1BVKFg4Nl82NCkKLSAgICAgICAgcmV0dXJuIDYgKyBzaXplRm9y
KERhdGFGb3JtYXRKUyk7Ci0jZWxpZiBDUFUoQVJNNjQpCi0gICAgICAgIHJldHVybiA4ICsgc2l6
ZUZvcihEYXRhRm9ybWF0SlMpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIHNpemVPZlplcm9FeHRl
bmQzMiArIHNpemVPZk9ySW1tNjQgKyBzaXplRm9yKERhdGFGb3JtYXRKUyk7Ci0jZW5kaWYKLQot
ICAgIGNhc2UgRGF0YUZvcm1hdEludDUyOgotICAgICAgICAvLyBCb3hpbmcgaXMgZmlyc3QgYSBj
b252ZXJzaW9uIHRvIFN0cmljdEludDUyLCB0aGVuCi0gICAgICAgIC8vIFN0cmljdEludDUyIGJv
eGluZwotI2lmIENQVShYODZfNjQpCi0gICAgICAgIHJldHVybiA0ICsgc2l6ZUZvcihEYXRhRm9y
bWF0U3RyaWN0SW50NTIpOwotI2VsaWYgQ1BVKEFSTTY0KQotICAgICAgICByZXR1cm4gNCArIHNp
emVGb3IoRGF0YUZvcm1hdFN0cmljdEludDUyKTsKLSNlbHNlCi0gICAgICAgIHJldHVybiBzaXpl
T2ZTaGlmdEltbTMyICsgc2l6ZUZvcihEYXRhRm9ybWF0U3RyaWN0SW50NTIpOwotI2VuZGlmCi0K
LSAgICBjYXNlIERhdGFGb3JtYXRTdHJpY3RJbnQ1MjoKLSAgICAgICAgLy8gQm94aW5nIGlzIGZp
cnN0IGEgY29udmVyc2lvbiB0byBkb3VibGUsIHRoZW4gZG91YmxlIGJveGluZwotI2lmIENQVShY
ODZfNjQpCi0gICAgICAgIHJldHVybiA4ICsgc2l6ZUZvcihEYXRhRm9ybWF0RG91YmxlKTsKLSNl
bGlmIENQVShBUk02NCkKLSAgICAgICAgcmV0dXJuIDQgKyBzaXplRm9yKERhdGFGb3JtYXREb3Vi
bGUpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIHNpemVPZkNvbnZlcnRJbnQ2NFRvRG91YmxlICsg
c2l6ZUZvcihEYXRhRm9ybWF0RG91YmxlKTsKLSNlbmRpZgotCi0gICAgY2FzZSBEYXRhRm9ybWF0
RG91YmxlOgotICAgICAgICAvLyBCb3hpbmcgaXMgcHVyaWZ5aW5nLCBtb3ZpbmcgdG8gYSBHUFIs
IGFuZCB0YWdnaW5nCi0jaWYgQ1BVKFg4Nl82NCkKLSAgICAgICAgcmV0dXJuIDM4ICsgc2l6ZUZv
cihEYXRhRm9ybWF0SlMpOwotI2VsaWYgQ1BVKEFSTTY0KQotICAgICAgICByZXR1cm4gMjggKyBz
aXplRm9yKERhdGFGb3JtYXRKUyk7Ci0jZWxzZQotICAgICAgICByZXR1cm4gc2l6ZU9mUHVyaWZ5
TmFOICsgc2l6ZU9mU3ViSW1tNjQgKyBzaXplT2ZNb3ZlRG91YmxlVG82NCArIHNpemVGb3IoRGF0
YUZvcm1hdEpTKTsKLSNlbmRpZgotCi0gICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoKLSAgICAg
ICAgLy8gQm94aW5nIGlzIGFkZGluZyBWYWx1ZUZhbHNlCi0jaWYgQ1BVKFg4Nl82NCkKLSAgICAg
ICAgcmV0dXJuIDQgKyBzaXplRm9yKERhdGFGb3JtYXRKUyk7Ci0jZWxpZiBDUFUoQVJNNjQpCi0g
ICAgICAgIHJldHVybiA0ICsgc2l6ZUZvcihEYXRhRm9ybWF0SlMpOwotI2Vsc2UKLSAgICAgICAg
cmV0dXJuIHNpemVPZkFkZEltbTMyICsgc2l6ZUZvcihEYXRhRm9ybWF0SlMpOwotI2VuZGlmCi0K
LSAgICBjYXNlIERhdGFGb3JtYXRKUzoKLSAgICAgICAgLy8gV2Ugd2lsbCBsb2FkIChpbiBhIEdQ
UiBvciBGUFIpIHRoZW4gc3RvcmUgdGhlIHZhbHVlCi0jaWYgQ1BVKFg4Nl82NCkKLSAgICAgICAg
cmV0dXJuIDg7Ci0jZWxpZiBDUFUoQVJNNjQpCi0gICAgICAgIHJldHVybiA4OwotI2Vsc2UKLSAg
ICAgICAgcmV0dXJuIHNpemVPZkxvYWQgKyBzaXplT2ZTdG9yZTsKLSNlbmRpZgotCi0gICAgZGVm
YXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0K
LX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi1KU1RhaWxDYWxsOjpKU1RhaWxDYWxsKHVuc2ln
bmVkIHN0YWNrbWFwSUQsIE5vZGUqIG5vZGUsIGNvbnN0IFZlY3RvcjxFeGl0VmFsdWU+JiBhcmd1
bWVudHMpCi0gICAgOiBKU0NhbGxCYXNlKENhbGxMaW5rSW5mbzo6VGFpbENhbGwsIG5vZGUtPm9y
aWdpbi5zZW1hbnRpYywgbm9kZS0+b3JpZ2luLnNlbWFudGljKQotICAgICwgbV9zdGFja21hcElE
KHN0YWNrbWFwSUQpCi0gICAgLCBtX2FyZ3VtZW50cyhhcmd1bWVudHMpCi0gICAgLCBtX2luc3Ry
dWN0aW9uT2Zmc2V0KDApCi17Ci0gICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpOwot
ICAgIEFTU0VSVChudW1Bcmd1bWVudHMoKSA9PSBub2RlLT5udW1DaGlsZHJlbigpIC0gMSk7Ci0K
LSAgICAvLyBFc3RpbWF0ZSB0aGUgc2l6ZSBvZiB0aGUgaW5saW5lIGNhY2hlLCBhc3N1bWluZyB0
aGF0IGV2ZXJ5Ci0gICAgLy8gdmFsdWUgZ29lcyBmcm9tIHRoZSBzdGFjayB0byB0aGUgc3RhY2sg
KGluIHByYWN0aWNlLCB0aGlzIHdpbGwKLSAgICAvLyBzZWxkb20gYmUgdHJ1ZSwgZ2l2aW5nIHVz
IHNvbWUgYW1vdW50IG9mIGxlZXdheSkgYW5kIHRoYXQgbm8KLSAgICAvLyBzcGlsbGluZyB3aWxs
IG9jY3VyIChpbiBwcmFjdGljZSwgdGhpcyB3aWxsIGFsbW9zdCBhbHdheXMgYmUKLSAgICAvLyB0
cnVlKS4KLQotICAgIC8vIFdlIGZpcnN0IGNvbXB1dGUgdGhlIG5ldyBmcmFtZSBiYXNlIGFuZCBs
b2FkIHRoZSBmcC9scgotICAgIC8vIHJlZ2lzdGVycyBmaW5hbCB2YWx1ZXMuIE9uIGRlYnVnIGJ1
aWxkcywgd2UgYWxzbyBuZWVkIHRvCi0gICAgLy8gYWNjb3VudCBmb3IgdGhlIGZwLXNwIGRlbHRh
IGNoZWNrICh0d2ljZTogZmFzdCBhbmQgc2xvdyBwYXRoKS4KLSNpZiBDUFUoWDg2XzY0KQotICAg
IG1fZXN0aW1hdGVkU2l6ZSA9IDU2OwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBtX2VzdGlt
YXRlZFNpemUgKz0gMjY7Ci0jICBlbmRpZgotI2VsaWYgQ1BVKEFSTTY0KQotICAgIG1fZXN0aW1h
dGVkU2l6ZSA9IDQ0OwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBtX2VzdGltYXRlZFNpemUg
Kz0gMjQ7Ci0jICBlbmRpZgotI2Vsc2UKLSAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsK
LSNlbmRpZgotCi0gICAgLy8gQXJndW1lbnRzIHdpbGwgcHJvYmFibHkgYmUgbG9hZGVkICYgc3Rv
cmVkIHR3aWNlIChmYXN0ICYgc2xvdykKLSAgICBmb3IgKEV4aXRWYWx1ZSYgYXJnIDogbV9hcmd1
bWVudHMpCi0gICAgICAgIG1fZXN0aW1hdGVkU2l6ZSArPSAyICogc2l6ZUZvcihhcmcuZGF0YUZv
cm1hdCgpKTsKLQotICAgIC8vIFdlIGFsc28gaGF2ZSB0aGUgc2xvdyBwYXRoIGNoZWNrLCB0aGUg
dHdvIGNhbGxzLCBhbmQgdGhlCi0gICAgLy8gQ2FsbExpbmtJbmZvIGxvYWQgZm9yIHRoZSBzbG93
IHBhdGgKLSNpZiBDUFUoWDg2XzY0KQotICAgIG1fZXN0aW1hdGVkU2l6ZSArPSA1NTsKLSNlbGlm
IENQVShBUk02NCkKLSAgICBtX2VzdGltYXRlZFNpemUgKz0gNDQ7Ci0jZWxzZQotICAgIG1fZXN0
aW1hdGVkU2l6ZSArPSBzaXplT2ZDYWxsICsgc2l6ZU9mSnVtcCArIHNpemVPZkxvYWQgKyBzaXpl
T2ZTbG93UGF0aENoZWNrOwotI2VuZGlmCi19Ci0KLXZvaWQgSlNUYWlsQ2FsbDo6ZW1pdChKSVRD
b2RlJiBqaXRDb2RlLCBDQ2FsbEhlbHBlcnMmIGppdCkKLXsKLSAgICBTdGFja01hcHM6OlJlY29y
ZCogcmVjb3JkIHsgbnVsbHB0ciB9OwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IGppdENv
ZGUuc3RhY2ttYXBzLnJlY29yZHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIHJlY29yZCA9ICZq
aXRDb2RlLnN0YWNrbWFwcy5yZWNvcmRzW2ldOwotICAgICAgICBpZiAocmVjb3JkLT5wYXRjaHBv
aW50SUQgPT0gbV9zdGFja21hcElEKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
UkVMRUFTRV9BU1NFUlQocmVjb3JkLT5wYXRjaHBvaW50SUQgPT0gbV9zdGFja21hcElEKTsKLQot
ICAgIG1fY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oKTsK
LQotICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwotCi0gICAgLy8gVGhlIGNh
bGxlZSB3YXMgdGhlIGZpcnN0IHBhc3NlZCBhcmd1bWVudCwgYW5kIG11c3QgYmUgaW4gYSBHUFIg
YmVjYXVzZQotICAgIC8vIHdlIHVzZWQgdGhlICJhbnlyZWdjYyIgY2FsbGluZyBjb252ZW50aW9u
Ci0gICAgYXV0byBjYWxsZWVMb2NhdGlvbiA9Ci0gICAgICAgIEZUTDo6TG9jYXRpb246OmZvclN0
YWNrbWFwcyhudWxscHRyLCByZWNvcmQtPmxvY2F0aW9uc1swXSk7Ci0gICAgR1BSUmVnIGNhbGxl
ZUdQUiA9IGNhbGxlZUxvY2F0aW9uLmRpcmVjdEdQUigpOwotICAgIHNodWZmbGVEYXRhLmNhbGxl
ZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUdQUiwgRGF0YUZvcm1hdEpTKTsKLQotICAg
IC8vIFRoZSB0YWcgdHlwZSBudW1iZXIgd2FzIHRoZSBzZWNvbmQgYXJndW1lbnQsIGlmIHRoZXJl
IHdhcyBvbmUKLSAgICBhdXRvIHRhZ1R5cGVOdW1iZXJMb2NhdGlvbiA9Ci0gICAgICAgIEZUTDo6
TG9jYXRpb246OmZvclN0YWNrbWFwcygmaml0Q29kZS5zdGFja21hcHMsIHJlY29yZC0+bG9jYXRp
b25zWzFdKTsKLSAgICBpZiAodGFnVHlwZU51bWJlckxvY2F0aW9uLmlzR1BSKCkgJiYgIXRhZ1R5
cGVOdW1iZXJMb2NhdGlvbi5hZGRlbmQoKSkKLSAgICAgICAgc2h1ZmZsZURhdGEudGFnVHlwZU51
bWJlciA9IHRhZ1R5cGVOdW1iZXJMb2NhdGlvbi5kaXJlY3RHUFIoKTsKLQotICAgIHNodWZmbGVE
YXRhLmFyZ3MuZ3JvdyhudW1Bcmd1bWVudHMoKSk7Ci0gICAgSGFzaE1hcDxSZWcsIFZlY3Rvcjxz
dGQ6OnBhaXI8VmFsdWVSZWNvdmVyeSosIGludDMyX3Q+Pj4gd2l0aEFkZGVuZDsKLSAgICBzaXpl
X3QgbnVtQWRkZW5kcyB7IDAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUFyZ3Vt
ZW50cygpOyArK2kpIHsKLSAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9IHJlY292ZXJ5Rm9y
KG1fYXJndW1lbnRzW2ldLCAqcmVjb3JkLCBqaXRDb2RlLnN0YWNrbWFwcyk7Ci0gICAgICAgIGlm
IChGVEw6OkxvY2F0aW9uIGFkZGVuZCA9IGdldFJlZ2lzdGVyV2l0aEFkZGVuZChtX2FyZ3VtZW50
c1tpXSwgKnJlY29yZCwgaml0Q29kZS5zdGFja21hcHMpKSB7Ci0gICAgICAgICAgICB3aXRoQWRk
ZW5kLmFkZCgKLSAgICAgICAgICAgICAgICBhZGRlbmQucmVnKCksCi0gICAgICAgICAgICAgICAg
VmVjdG9yPHN0ZDo6cGFpcjxWYWx1ZVJlY292ZXJ5KiwgaW50MzJfdD4+KCkpLml0ZXJhdG9yLT52
YWx1ZS5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV9wYWlyKCZzaHVmZmxl
RGF0YS5hcmdzW2ldLCBhZGRlbmQuYWRkZW5kKCkpKTsKLSAgICAgICAgICAgIG51bUFkZGVuZHMr
KzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG51bUFkZGVuZHMgPSBXVEY6OnJvdW5kVXBUb011
bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgbnVtQWRkZW5kcyk7Ci0KLSAgICBz
aHVmZmxlRGF0YS5udW1Mb2NhbHMgPSBzdGF0aWNfY2FzdDxpbnQ2NF90PihqaXRDb2RlLnN0YWNr
bWFwcy5zdGFja1NpemVGb3JMb2NhbHMoKSkgLyBzaXplb2Yodm9pZCopICsgbnVtQWRkZW5kczsK
LQotICAgIEFTU0VSVCghbnVtQWRkZW5kcyA9PSB3aXRoQWRkZW5kLmlzRW1wdHkoKSk7Ci0KLSAg
ICBpZiAoIXdpdGhBZGRlbmQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGppdC5zdWJQdHIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihudW1BZGRlbmRzICogc2l6ZW9mKHZvaWQqKSksIE1hY3Jv
QXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBzcGlsbEJhc2UgeyAxIC0gc3RhdGljX2Nhc3Q8aW50PihzaHVmZmxlRGF0YS5udW1Mb2NhbHMp
IH07Ci0gICAgICAgIGZvciAoYXV0byBlbnRyeSA6IHdpdGhBZGRlbmQpIHsKLSAgICAgICAgICAg
IGZvciAoYXV0byBwYWlyIDogZW50cnkudmFsdWUpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
bnVtQWRkZW5kcyA+IDApOwotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcGlsbFNs
b3QgeyBzcGlsbEJhc2UgKyAtLW51bUFkZGVuZHMgfTsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
ZW50cnkua2V5LmlzR1BSKCkpOwotICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihwYWlyLnNlY29uZCksIGVudHJ5LmtleS5ncHIoKSk7Ci0gICAg
ICAgICAgICAgICAgaml0LnN0b3JlUHRyKGVudHJ5LmtleS5ncHIoKSwgQ0NhbGxIZWxwZXJzOjph
ZGRyZXNzRm9yKHNwaWxsU2xvdCkpOwotICAgICAgICAgICAgICAgIGppdC5zdWJQdHIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihwYWlyLnNlY29uZCksIGVudHJ5LmtleS5ncHIoKSk7Ci0g
ICAgICAgICAgICAgICAgKnBhaXIuZmlyc3QgPSBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpT
U3RhY2soc3BpbGxTbG90LCBwYWlyLmZpcnN0LT5kYXRhRm9ybWF0KCkpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChudW1BZGRlbmRzIDwgc3RhY2tBbGlnbm1lbnRS
ZWdpc3RlcnMoKSk7Ci0gICAgfQotCi0gICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUobnVtQXJn
dW1lbnRzKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtQXJndW1lbnRzKCk7ICsr
aSkKLSAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9IHJlY292ZXJ5Rm9yKG1fYXJndW1lbnRz
W2ldLCAqcmVjb3JkLCBqaXRDb2RlLnN0YWNrbWFwcyk7Ci0KLSAgICBzaHVmZmxlRGF0YS5zZXR1
cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKLQotICAgIENDYWxsSGVscGVy
czo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgIENDYWxs
SGVscGVyczo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgbV90YXJnZXRUb0NoZWNrLAotICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCkpOwotCi0gICAgbV9jYWxsTGlua0luZm8tPnNl
dEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwotICAgIENhbGxGcmFtZVNodWZmbGVyKGpp
dCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwotCi0gICAgbV9mYXN0Q2FsbCA9
IGppdC5uZWFyVGFpbENhbGwoKTsKLQotICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7Ci0KLSAgICBD
YWxsRnJhbWVTaHVmZmxlciBzbG93UGF0aFNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpOwotICAg
IHNsb3dQYXRoU2h1ZmZsZXIuc2V0Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MgeyBHUFJJ
bmZvOjpyZWdUMCB9KTsKLSAgICBzbG93UGF0aFNodWZmbGVyLnByZXBhcmVGb3JTbG93UGF0aCgp
OwotCi0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fY2FsbExpbmtJ
bmZvKSwgR1BSSW5mbzo6cmVnVDIpOwotCi0gICAgbV9zbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgp
OwotCi0gICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwot
Ci0gICAgbV9jYWxsTGlua0luZm8tPnNldFVwQ2FsbChtX3R5cGUsIG1fc2VtYW50aWNlT3JpZ2lu
LCBjYWxsZWVHUFIpOwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCi0KLSNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkgJiYgIUZUTF9VU0VTX0IzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpTVGFpbENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpTVGFpbENhbGwuaAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExKU1RhaWxDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgRlRMSlNUYWlsQ2FsbF9oCi0jZGVmaW5lIEZUTEpTVGFpbENhbGxfaAotCi0j
aW5jbHVkZSAiREZHQ29tbW9uLmgiCi0KLSNpZiBFTkFCTEUoRlRMX0pJVCkgJiYgIUZUTF9VU0VT
X0IzCi0KLSNpbmNsdWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgotI2luY2x1ZGUgIkRGR0NvbW1v
bi5oIgotI2luY2x1ZGUgIkZUTEV4aXRWYWx1ZS5oIgotI2luY2x1ZGUgIkZUTEpTQ2FsbEJhc2Uu
aCIKLSNpbmNsdWRlICJGVExTdGFja21hcEFyZ3VtZW50TGlzdC5oIgotCi1uYW1lc3BhY2UgSlND
IHsKLQotbmFtZXNwYWNlIERGRyB7Ci1zdHJ1Y3QgTm9kZTsKLX0KLQotbmFtZXNwYWNlIEZUTCB7
Ci0KLWNsYXNzIEpTVGFpbENhbGwgOiBwdWJsaWMgSlNDYWxsQmFzZSB7Ci1wdWJsaWM6Ci0gICAg
SlNUYWlsQ2FsbCgKLSAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCwKLSAgICAgICAgREZHOjpO
b2RlKiwgY29uc3QgVmVjdG9yPEV4aXRWYWx1ZT4mIGFyZ3VtZW50cyk7Ci0KLSAgICB2b2lkIGVt
aXQoSklUQ29kZSYsIENDYWxsSGVscGVycyYpOwotCi0gICAgdW5zaWduZWQgc3RhY2ttYXBJRCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBJRDsgfQotCi0gICAgdW5zaWduZWQgZXN0aW1hdGVk
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXN0aW1hdGVkU2l6ZTsgfQotCi0gICAgdW5zaWduZWQg
bnVtQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgpOyB9Ci0KLSAg
ICBib29sIG9wZXJhdG9yPChjb25zdCBKU1RhaWxDYWxsJiBvdGhlcikgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2luc3RydWN0aW9uT2Zmc2V0IDwgb3RoZXIubV9pbnN0cnVjdGlvbk9m
ZnNldDsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIHVuc2lnbmVkIG1fc3RhY2ttYXBJRDsK
LSAgICBWZWN0b3I8RXhpdFZhbHVlPiBtX2FyZ3VtZW50czsKLSAgICB1bnNpZ25lZCBtX2VzdGlt
YXRlZFNpemU7Ci0KLXB1YmxpYzoKLSAgICB1aW50MzJfdCBtX2luc3RydWN0aW9uT2Zmc2V0Owot
fTsKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpICYmICFGVExfVVNFU19CMwotCi0jZW5kaWYgLy8gRlRMSlNUYWlsQ2FsbF9oCi0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5jcHAJKHJldmlz
aW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRo
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMzEgKzM0LDE2IEBACiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CiAKIExhenlTbG93UGF0aDo6TGF6eVNsb3dQYXRoKAotI2lmIEZUTF9V
U0VTX0IzCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBwYXRjaGFibGVKdW1wLCBDb2RlTG9jYXRpb25M
YWJlbCBkb25lLAotI2Vsc2UgLy8gRlRMX1VTRVNfQjMKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBw
YXRjaHBvaW50LAotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwg
ZXhjZXB0aW9uVGFyZ2V0LAogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsIFJlZlB0cjxHZW5lcmF0b3I+IGdlbmVyYXRvcgot
I2lmICFGVExfVVNFU19CMwotICAgICwgR1BSUmVnIG5ld1plcm9SZWcsIFNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvciBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IKLSNlbmRpZiAvLyAhRlRMX1VTRVNf
QjMKICAgICApCi0jaWYgRlRMX1VTRVNfQjMKICAgICA6IG1fcGF0Y2hhYmxlSnVtcChwYXRjaGFi
bGVKdW1wKQogICAgICwgbV9kb25lKGRvbmUpCi0jZWxzZSAvLyBGVExfVVNFU19CMwotICAgIDog
bV9wYXRjaHBvaW50KHBhdGNocG9pbnQpCi0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICAsIG1f
ZXhjZXB0aW9uVGFyZ2V0KGV4Y2VwdGlvblRhcmdldCkKICAgICAsIG1fdXNlZFJlZ2lzdGVycyh1
c2VkUmVnaXN0ZXJzKQogICAgICwgbV9jYWxsU2l0ZUluZGV4KGNhbGxTaXRlSW5kZXgpCiAgICAg
LCBtX2dlbmVyYXRvcihnZW5lcmF0b3IpCi0jaWYgIUZUTF9VU0VTX0IzCi0gICAgLCBtX25ld1pl
cm9WYWx1ZVJlZ2lzdGVyKG5ld1plcm9SZWcpCi0gICAgLCBtX3NjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvcihzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IpCi0jZW5kaWYgLy8gIUZUTF9VU0VTX0IzCiB7
CiB9CiAKQEAgLTc4LDQ5ICs2MywxNSBAQCB2b2lkIExhenlTbG93UGF0aDo6Z2VuZXJhdGUoQ29k
ZUJsb2NrKiBjCiAgICAgcGFyYW1zLmV4Y2VwdGlvbkp1bXBzID0gbV9leGNlcHRpb25UYXJnZXQg
PyAmZXhjZXB0aW9uSnVtcHMgOiBudWxscHRyOwogICAgIHBhcmFtcy5sYXp5U2xvd1BhdGggPSB0
aGlzOwogCi0jaWYgIUZUTF9VU0VTX0IzCi0gICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpQ
cmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0gICAgICAgIG1fc2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCwgU2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6Ok5vRXh0cmFTcGFjZSk7Ci0gICAgLy8g
VGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBMTFZNIG1heSBjcmVhdGUgYSBzdGFja21hcCBsb2NhdGlv
biB0aGF0IGlzIHRoZSByZWdpc3RlciBTUC4KLSAgICAvLyBCdXQgb24gYXJtNjQsIFNQIGlzIGFs
c28gdGhlIHNhbWUgcmVnaXN0ZXIgbnVtYmVyIGFzIFpSLCBzbyBMTFZNIGlzIHRlbGxpbmcgdXMg
dGhhdCBpdCBoYXMKLSAgICAvLyBwcm92ZW4gc29tZXRoaW5nIGlzIHplcm8uIE91ciBNQVNNIGlz
bid0IHVuaXZlcnNhbGx5IGNvbXBhdGlibGUgd2l0aCBhcm02NCdzIGNvbnRleHQgZGVwZW5kZW50
Ci0gICAgLy8gbm90aW9uIG9mIFNQIG1lYW5pbmcgWlIuIFdlIGp1c3QgbWFrZSB0aGluZ3MgZWFz
aWVyIGJ5IGVuc3VyaW5nIHdlIGRvIHRoZSBuZWNlc3NhcnkgbW92ZSBvZiB6ZXJvCi0gICAgLy8g
aW50byBhIG5vbi1TUCByZWdpc3Rlci4KLSAgICBpZiAobV9uZXdaZXJvVmFsdWVSZWdpc3RlciAh
PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMigwKSwgbV9uZXdaZXJvVmFsdWVSZWdpc3Rlcik7Ci0jZW5kaWYgLy8gIUZUTF9VU0VTX0Iz
Ci0KICAgICBtX2dlbmVyYXRvci0+cnVuKGppdCwgcGFyYW1zKTsKIAotI2lmICFGVExfVVNFU19C
MwotICAgIENDYWxsSGVscGVyczo6TGFiZWwgZG9uZUxhYmVsOwotICAgIENDYWxsSGVscGVyczo6
SnVtcCBqdW1wVG9FbmRPZlBhdGNocG9pbnQ7Ci0gICAgaWYgKHByZXNlcnZlZFN0YXRlLm51bWJl
ck9mQnl0ZXNQcmVzZXJ2ZWQpIHsKLSAgICAgICAgZG9uZUxhYmVsID0gaml0LmxhYmVsKCk7Ci0g
ICAgICAgIG1fc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNC
eVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7Ci0gICAgICAgIGp1bXBUb0VuZE9mUGF0Y2hw
b2ludCA9IGppdC5qdW1wKCk7Ci0gICAgfQotI2VuZGlmIC8vICFGVExfVVNFU19CMwotCiAgICAg
TGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCBqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25N
dXN0U3VjY2VlZCk7Ci0jaWYgRlRMX1VTRVNfQjMKICAgICBsaW5rQnVmZmVyLmxpbmsocGFyYW1z
LmRvbmVKdW1wcywgbV9kb25lKTsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAgaWYgKHByZXNl
cnZlZFN0YXRlLm51bWJlck9mQnl0ZXNQcmVzZXJ2ZWQpIHsKLSAgICAgICAgbGlua0J1ZmZlci5s
aW5rKHBhcmFtcy5kb25lSnVtcHMsIGxpbmtCdWZmZXIubG9jYXRpb25PZihkb25lTGFiZWwpKTsK
LSAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXBUb0VuZE9mUGF0Y2hwb2ludCwgbV9wYXRjaHBv
aW50LmxhYmVsQXRPZmZzZXQoTWFjcm9Bc3NlbWJsZXI6Om1heEp1bXBSZXBsYWNlbWVudFNpemUo
KSkpOwotICAgIH0gZWxzZQotICAgICAgICBsaW5rQnVmZmVyLmxpbmsocGFyYW1zLmRvbmVKdW1w
cywgbV9wYXRjaHBvaW50LmxhYmVsQXRPZmZzZXQoTWFjcm9Bc3NlbWJsZXI6Om1heEp1bXBSZXBs
YWNlbWVudFNpemUoKSkpOwotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgaWYgKG1fZXhjZXB0
aW9uVGFyZ2V0KQogICAgICAgICBsaW5rQnVmZmVyLmxpbmsoZXhjZXB0aW9uSnVtcHMsIG1fZXhj
ZXB0aW9uVGFyZ2V0KTsKICAgICBtX3N0dWIgPSBGSU5BTElaRV9DT0RFX0ZPUihjb2RlQmxvY2ss
IGxpbmtCdWZmZXIsICgiTGF6eSBzbG93IHBhdGggY2FsbCBzdHViIikpOwogCi0jaWYgRlRMX1VT
RVNfQjMKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAobV9wYXRjaGFibGVKdW1wLCBD
b2RlTG9jYXRpb25MYWJlbChtX3N0dWIuY29kZSgpKSk7Ci0jZWxzZSAvLyBGVExfVVNFU19CMwot
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAobV9wYXRjaHBvaW50LCBDb2RlTG9j
YXRpb25MYWJlbChtX3N0dWIuY29kZSgpKSk7Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKIH0KIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMYXp5U2xvd1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExhenlTbG93UGF0aC5oCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NiwyNiAr
NjYsMTUgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBMYXp5U2xvd1BhdGgoCi0jaWYgRlRM
X1VTRVNfQjMKICAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBwYXRjaGFibGVKdW1wLCBDb2RlTG9j
YXRpb25MYWJlbCBkb25lLAotI2Vsc2UgLy8gRkxUX1VTRVNfQjMKLSAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwgcGF0Y2hwb2ludCwKLSNlbmRpZiAvLyBGVExfVVNFU19CMwogICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbCBleGNlcHRpb25UYXJnZXQsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzLAogICAgICAgICBDYWxsU2l0ZUluZGV4LCBSZWZQdHI8R2VuZXJhdG9yPgotI2lmICFG
VExfVVNFU19CMwotICAgICAgICAsIEdQUlJlZyBuZXdaZXJvUmVnLCBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IKLSNlbmRpZiAvLyBGVExfVVNFU19CMwogICAgICAgICApOwogCiAgICAgfkxhenlT
bG93UGF0aCgpOwogCi0jaWYgRlRMX1VTRVNfQjMKICAgICBDb2RlTG9jYXRpb25KdW1wIHBhdGNo
YWJsZUp1bXAoKSBjb25zdCB7IHJldHVybiBtX3BhdGNoYWJsZUp1bXA7IH0KICAgICBDb2RlTG9j
YXRpb25MYWJlbCBkb25lKCkgY29uc3QgeyByZXR1cm4gbV9kb25lOyB9Ci0jZWxzZSAvLyBGVExf
VVNFU19CMwotICAgIENvZGVMb2NhdGlvbkxhYmVsIHBhdGNocG9pbnQoKSBjb25zdCB7IHJldHVy
biBtX3BhdGNocG9pbnQ7IH0KLSNlbmRpZiAvLyBGVExfVVNFU19CMwogICAgIGNvbnN0IFJlZ2lz
dGVyU2V0JiB1c2VkUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV91c2VkUmVnaXN0ZXJzOyB9
CiAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9jYWxs
U2l0ZUluZGV4OyB9CiAKQEAgLTk0LDI3ICs4MywxMyBAQCBwdWJsaWM6CiAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHN0dWIoKSBjb25zdCB7IHJldHVybiBtX3N0dWI7IH0KIAogcHJpdmF0ZToK
LSNpZiBGVExfVVNFU19CMwogICAgIENvZGVMb2NhdGlvbkp1bXAgbV9wYXRjaGFibGVKdW1wOwog
ICAgIENvZGVMb2NhdGlvbkxhYmVsIG1fZG9uZTsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAg
Q29kZUxvY2F0aW9uTGFiZWwgbV9wYXRjaHBvaW50OwotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwgbV9leGNlcHRpb25UYXJnZXQ7CiAgICAgUmVnaXN0ZXJTZXQg
bV91c2VkUmVnaXN0ZXJzOwogICAgIENhbGxTaXRlSW5kZXggbV9jYWxsU2l0ZUluZGV4OwogICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX3N0dWI7CiAgICAgUmVmUHRyPEdlbmVyYXRvcj4gbV9n
ZW5lcmF0b3I7Ci0jaWYgIUZUTF9VU0VTX0IzCi0gICAgR1BSUmVnIG1fbmV3WmVyb1ZhbHVlUmVn
aXN0ZXI7Ci0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGZpZWxkIGluIG9uZSBvZiB0d28gd2F5
czoKLSAgICAvLyAxKSBXaGVuIGxhbmRpbmcgQjMsIHdlIHNob3VsZCByZW1vdmUgdGhpcyBmaWVs
ZCBiZWNhdXNlIGl0IHdpbGwgbm8KLSAgICAvLyBsb25nZXIgYmUgdGhlIGNhc2Ugd2hlcmUgYSBs
b2NhdGlvbiBiZWluZyBpbiBTUCBtZWFucyBpdCdzIHplcm8uCi0gICAgLy8gMikgSWYgd2UgZG9u
J3QgbGFuZCBCMywgdGhpcyBzYW1lIGlkZWEgY2FuIGJlIGV4cHJlc3NlZCBpbiBsZXNzCi0gICAg
Ly8gbWVtb3J5IHVzaW5nIGp1c3QgYSBzaW5nbGUgR1BSUmVnLgotICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE3NjgKLSAgICBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IgbV9zY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I7Ci0jZW5kaWYgLy8gRlRMX1VTRVNf
QjMKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAog
I2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKICNpbmNsdWRl
ICJKSVRPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiTExWTUFQSS5oIgogI2luY2x1ZGUgIkxpbmtC
dWZmZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJDb21w
aWxhdGlvbi5oIgpAQCAtNTIsMzQgKzUxLDYgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKICAg
ICAvLyBMTFZNIHdpbGwgY3JlYXRlIGl0cyBvd24ganVtcCB0YWJsZXMgYXMgbmVlZGVkLgogICAg
IGNvZGVCbG9jay0+Y2xlYXJTd2l0Y2hKdW1wVGFibGVzKCk7CiAKLSNpZiAhRlRMX1VTRVNfQjMK
LSAgICAvLyBXaGF0IExMVk0ncyBzdGFja21hcHMgY2FsbCBzdGFja1NpemVGb3JMb2NhbHMgYW5k
IHdoYXQgd2UgY2FsbCBmcmFtZVJlZ2lzdGVyQ291bnQgaGF2ZSBhIHNpbXBsZQotICAgIC8vIHJl
bGF0aW9uc2hpcCwgdGhvdWdoIGl0J3Mgbm90IG9idmlvdXMgZnJvbSByZWFkaW5nIHRoZSBjb2Rl
LiBUaGUgZWFzaWVzdCB3YXkgdG8gdW5kZXJzdGFuZCB0aGVtCi0gICAgLy8gaXMgdG8gbG9vayBh
dCBzdGFja09mZnNldCwgaS5lLiB3aGF0IHlvdSBoYXZlIHRvIGFkZCB0byBGUCB0byBnZXQgU1Au
IEZvciBMTFZNIHRoYXQgaXMganVzdDoKLSAgICAvLwotICAgIC8vICAgICBzdGFja09mZnNldCA9
PSAtc3RhdGUuaml0Q29kZS0+c3RhY2ttYXBzLnN0YWNrU2l6ZUZvckxvY2FscygpCi0gICAgLy8K
LSAgICAvLyBUaGUgd2F5IHdlIGRlZmluZSBmcmFtZVJlZ2lzdGVyQ291bnQgaXMgdGhhdCBpdCBz
YXRpc2ZpZXMgdGhpcyBlcXVhbGl0eToKLSAgICAvLwotICAgIC8vICAgICBzdGFja09mZnNldCA9
PSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChmcmFtZVJlZ2lzdGVyQ291bnQgLSAxKS5vZmZzZXQo
KSAqIHNpemVvZihSZWdpc3RlcikKLSAgICAvLwotICAgIC8vIFdlIGNhbiBzaW1wbGlmeSB0aGlz
IHdoZW4gd2UgYXBwbHkgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoKToKLSAgICAvLwotICAgIC8v
ICAgICBzdGFja09mZnNldCA9PSAoLTEgLSAoZnJhbWVSZWdpc3RlckNvdW50IC0gMSkpICogc2l6
ZW9mKFJlZ2lzdGVyKQotICAgIC8vICAgICBzdGFja09mZnNldCA9PSAoLTEgLSBmcmFtZVJlZ2lz
dGVyQ291bnQgKyAxKSAqIHNpemVvZihSZWdpc3RlcikKLSAgICAvLyAgICAgc3RhY2tPZmZzZXQg
PT0gLWZyYW1lUmVnaXN0ZXJDb3VudCAqIHNpemVvZihSZWdpc3RlcikKLSAgICAvLwotICAgIC8v
IFRoZXJlZm9yZSB3ZSBqdXN0IGhhdmU6Ci0gICAgLy8KLSAgICAvLyAgICAgZnJhbWVSZWdpc3Rl
ckNvdW50ID09IC1zdGFja09mZnNldCAvIHNpemVvZihSZWdpc3RlcikKLSAgICAvLwotICAgIC8v
IElmIHdlIHN1YnN0aXR1dGUgd2hhdCB3ZSBoYXZlIGFib3ZlLCB3ZSBnZXQ6Ci0gICAgLy8KLSAg
ICAvLyAgICAgZnJhbWVSZWdpc3RlckNvdW50ID09IC0oLXN0YXRlLmppdENvZGUtPnN0YWNrbWFw
cy5zdGFja1NpemVGb3JMb2NhbHMoKSkgLyBzaXplb2YoUmVnaXN0ZXIpCi0gICAgLy8gICAgIGZy
YW1lUmVnaXN0ZXJDb3VudCA9PSBzdGF0ZS5qaXRDb2RlLT5zdGFja21hcHMuc3RhY2tTaXplRm9y
TG9jYWxzKCkgLyBzaXplb2YoUmVnaXN0ZXIpCi0gICAgc3RhdGUuaml0Q29kZS0+Y29tbW9uLmZy
YW1lUmVnaXN0ZXJDb3VudCA9IHN0YXRlLmppdENvZGUtPnN0YWNrbWFwcy5zdGFja1NpemVGb3JM
b2NhbHMoKSAvIHNpemVvZih2b2lkKik7Ci0jZW5kaWYKLSAgICAKICAgICBzdGF0ZS5qaXRDb2Rl
LT5jb21tb24ucmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCA9IGdyYXBoLnJlcXVpcmVkUmVn
aXN0ZXJDb3VudEZvckV4aXQoKTsKICAgICAKICAgICBpZiAoIWdyYXBoLm1fcGxhbi5pbmxpbmVD
YWxsRnJhbWVzLT5pc0VtcHR5KCkpCkBAIC0xNDcsMTkgKzExOCw3IEBAIHZvaWQgbGluayhTdGF0
ZSYgc3RhdGUpCiAgICAgICAgIG91dC5yZXNldCgpOwogCiAgICAgICAgIG91dC5wcmludCgiICAg
IERpc2Fzc2VtYmx5OlxuIik7Ci0jaWYgRlRMX1VTRVNfQjMKICAgICAgICAgb3V0LnByaW50KCIg
ICAgICAgIDxub3QgaW1wbGVtZW50ZWQgeWV0PlxuIik7Ci0jZWxzZQotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUuaml0Q29kZS0+aGFuZGxlcygpLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBpZiAoc3RhdGUuY29kZVNlY3Rpb25OYW1lc1tpXSAhPSBTRUNUSU9OX05B
TUUoInRleHQiKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogaGFuZGxlID0gc3RhdGUuaml0Q29kZS0+
aGFuZGxlcygpW2ldLmdldCgpOwotICAgICAgICAgICAgZGlzYXNzZW1ibGUoCi0gICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGhhbmRsZS0+c3RhcnQoKSksIGhhbmRsZS0+c2l6
ZUluQnl0ZXMoKSwKLSAgICAgICAgICAgICAgICAiICAgICAgIiwgb3V0LCBMTFZNU3Vic2V0KTsK
LSAgICAgICAgfQotI2VuZGlmCiAgICAgICAgIGNvbXBpbGF0aW9uLT5hZGREZXNjcmlwdGlvbihQ
cm9maWxlcjo6T3JpZ2luU3RhY2soKSwgb3V0LnRvQ1N0cmluZygpKTsKICAgICAgICAgb3V0LnJl
c2V0KCk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2Nh
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2Nh
dGlvbi5jcHAJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogdXNpbmcgbmFtZXNwYWNlIEIzOwogCi0jaWYgRlRM
X1VTRVNfQjMKIExvY2F0aW9uIExvY2F0aW9uOjpmb3JWYWx1ZVJlcChjb25zdCBWYWx1ZVJlcCYg
cmVwKQogewogICAgIHN3aXRjaCAocmVwLmtpbmQoKSkgewpAQCAtNTQsMzQgKzUzLDYgQEAgTG9j
YXRpb24gTG9jYXRpb246OmZvclZhbHVlUmVwKGNvbnN0IFZhbAogICAgICAgICByZXR1cm4gTG9j
YXRpb24oKTsKICAgICB9CiB9Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKLQotTG9jYXRpb24gTG9j
YXRpb246OmZvclN0YWNrbWFwcyhjb25zdCBTdGFja01hcHMqIHN0YWNrbWFwcywgY29uc3QgU3Rh
Y2tNYXBzOjpMb2NhdGlvbiYgbG9jYXRpb24pCi17Ci0gICAgc3dpdGNoIChsb2NhdGlvbi5raW5k
KSB7Ci0gICAgY2FzZSBTdGFja01hcHM6OkxvY2F0aW9uOjpVbnByb2Nlc3NlZDoKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAot
ICAgIGNhc2UgU3RhY2tNYXBzOjpMb2NhdGlvbjo6UmVnaXN0ZXI6Ci0gICAgY2FzZSBTdGFja01h
cHM6OkxvY2F0aW9uOjpEaXJlY3Q6Ci0gICAgICAgIHJldHVybiBmb3JSZWdpc3Rlcihsb2NhdGlv
bi5kd2FyZlJlZywgbG9jYXRpb24ub2Zmc2V0KTsKLSAgICAgICAgCi0gICAgY2FzZSBTdGFja01h
cHM6OkxvY2F0aW9uOjpJbmRpcmVjdDoKLSAgICAgICAgcmV0dXJuIGZvckluZGlyZWN0KGxvY2F0
aW9uLmR3YXJmUmVnLCBsb2NhdGlvbi5vZmZzZXQpOwotICAgICAgICAKLSAgICBjYXNlIFN0YWNr
TWFwczo6TG9jYXRpb246OkNvbnN0YW50OgotICAgICAgICByZXR1cm4gZm9yQ29uc3RhbnQobG9j
YXRpb24ub2Zmc2V0KTsKLSAgICAgICAgCi0gICAgY2FzZSBTdGFja01hcHM6OkxvY2F0aW9uOjpD
b25zdGFudEluZGV4OgotICAgICAgICBBU1NFUlQoc3RhY2ttYXBzKTsKLSAgICAgICAgcmV0dXJu
IGZvckNvbnN0YW50KHN0YWNrbWFwcy0+Y29uc3RhbnRzW2xvY2F0aW9uLm9mZnNldF0uaW50ZWdl
cik7Ci0gICAgfQotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAg
ICByZXR1cm4gTG9jYXRpb24oKTsKLX0KIAogdm9pZCBMb2NhdGlvbjo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2Nh
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRp
b24uaAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw2IEBACiAKICNpbmNsdWRlICJE
RkdDb21tb24uaCIKICNpbmNsdWRlICJGUFJJbmZvLmgiCi0jaW5jbHVkZSAiRlRMRFdBUkZSZWdp
c3Rlci5oIgotI2luY2x1ZGUgIkZUTFN0YWNrTWFwcy5oIgogI2luY2x1ZGUgIkdQUkluZm8uaCIK
ICNpbmNsdWRlICJSZWcuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtNzQsMTEgKzcy
LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICBz
dGF0aWMgTG9jYXRpb24gZm9yUmVnaXN0ZXIoRFdBUkZSZWdpc3RlciBkd2FyZlJlZywgaW50MzJf
dCBhZGRlbmQpCi0gICAgewotICAgICAgICByZXR1cm4gZm9yUmVnaXN0ZXIoZHdhcmZSZWcucmVn
KCksIGFkZGVuZCk7Ci0gICAgfQotICAgIAogICAgIHN0YXRpYyBMb2NhdGlvbiBmb3JJbmRpcmVj
dChSZWcgcmVnLCBpbnQzMl90IG9mZnNldCkKICAgICB7CiAgICAgICAgIExvY2F0aW9uIHJlc3Vs
dDsKQEAgLTg4LDExICs4MSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAgICAgCi0gICAgc3RhdGljIExvY2F0aW9uIGZvckluZGlyZWN0KERXQVJGUmVnaXN0ZXIg
ZHdhcmZSZWcsIGludDMyX3Qgb2Zmc2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZvckluZGly
ZWN0KGR3YXJmUmVnLnJlZygpLCBvZmZzZXQpOwotICAgIH0KLSAgICAKICAgICBzdGF0aWMgTG9j
YXRpb24gZm9yQ29uc3RhbnQoaW50NjRfdCBjb25zdGFudCkKICAgICB7CiAgICAgICAgIExvY2F0
aW9uIHJlc3VsdDsKQEAgLTEwMSwxNCArODksOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQogCi0jaWYgRlRMX1VTRVNfQjMKICAgICBzdGF0aWMgTG9jYXRpb24gZm9y
VmFsdWVSZXAoY29uc3QgQjM6OlZhbHVlUmVwJik7Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKIAot
ICAgIC8vIFlvdSBjYW4gcGFzcyBhIG51bGwgU3RhY2tNYXBzIGlmIHlvdSBhcmUgY29uZmlkZW50
IHRoYXQgdGhlIGxvY2F0aW9uIGRvZXNuJ3QKLSAgICAvLyBpbnZvbHZlIGEgd2lkZSBjb25zdGFu
dC4KLSAgICBzdGF0aWMgTG9jYXRpb24gZm9yU3RhY2ttYXBzKGNvbnN0IFN0YWNrTWFwcyosIGNv
bnN0IFN0YWNrTWFwczo6TG9jYXRpb24mKTsKLSAgICAKICAgICBLaW5kIGtpbmQoKSBjb25zdCB7
IHJldHVybiBtX2tpbmQ7IH0KIAogICAgIGJvb2wgaGFzUmVnKCkgY29uc3QgeyByZXR1cm4ga2lu
ZCgpID09IFJlZ2lzdGVyIHx8IGtpbmQoKSA9PSBJbmRpcmVjdDsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE5
NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMSArNDUsOSBAQAogI2luY2x1ZGUgIkZUTEV4Y2VwdGlv
blRhcmdldC5oIgogI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29kZS5oIgogI2luY2x1ZGUg
IkZUTEZvcm1hdHRlZFZhbHVlLmgiCi0jaW5jbHVkZSAiRlRMSW5saW5lQ2FjaGVTaXplLmgiCiAj
aW5jbHVkZSAiRlRMTGF6eVNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIkZUTExvd2VyZWROb2Rl
VmFsdWUuaCIKICNpbmNsdWRlICJGVExPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiRlRMT3V0cHV0
LmgiCiAjaW5jbHVkZSAiRlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oIgogI2luY2x1ZGUg
IkZUTFRodW5rcy5oIgogI2luY2x1ZGUgIkZUTFdlaWdodGVkVGFyZ2V0LmgiCkBAIC01OCw2ICs1
Niw3IEBACiAjaW5jbHVkZSAiSklUQml0T3JHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVRCaXRY
b3JHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKSVREaXZHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJK
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVExlZnRTaGlmdEdlbmVyYXRv
ci5oIgogI2luY2x1ZGUgIkpJVE11bEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVFJpZ2h0U2hp
ZnRHZW5lcmF0b3IuaCIKQEAgLTc2LDcgKzc1LDYgQEAKICNpZiAhT1MoV0lORE9XUykKICNpbmNs
dWRlIDxkbGZjbi5oPgogI2VuZGlmCi0jaW5jbHVkZSA8bGx2bS9Jbml0aWFsaXplTExWTS5oPgog
I2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CiAjaW5jbHVkZSA8d3RmL0JveC5oPgogI2luY2x1ZGUg
PHd0Zi9Qcm9jZXNzSUQuaD4KQEAgLTEyNywxOCArMTI1LDEwIEBAIHB1YmxpYzoKICAgICBMb3dl
ckRGR1RvTExWTShTdGF0ZSYgc3RhdGUpCiAgICAgICAgIDogbV9ncmFwaChzdGF0ZS5ncmFwaCkK
ICAgICAgICAgLCBtX2Z0bFN0YXRlKHN0YXRlKQotICAgICAgICAsIG1faGVhcHMoc3RhdGUuY29u
dGV4dCkKICAgICAgICAgLCBtX291dChzdGF0ZSkKLSNpZiBGVExfVVNFU19CMwogICAgICAgICAs
IG1fcHJvYygqc3RhdGUucHJvYykKLSNlbmRpZgogICAgICAgICAsIG1fc3RhdGUoc3RhdGUuZ3Jh
cGgpCiAgICAgICAgICwgbV9pbnRlcnByZXRlcihzdGF0ZS5ncmFwaCwgbV9zdGF0ZSkKLSAgICAg
ICAgLCBtX3N0YWNrbWFwSURzKDApCi0jaWYgIUZUTF9VU0VTX0IzCi0gICAgICAgICwgbV90YmFh
S2luZChtZEtpbmRJRChzdGF0ZS5jb250ZXh0LCAidGJhYSIpKQotICAgICAgICAsIG1fdGJhYVN0
cnVjdEtpbmQobWRLaW5kSUQoc3RhdGUuY29udGV4dCwgInRiYWEuc3RydWN0IikpCi0jZW5kaWYK
ICAgICB7CiAgICAgfQogICAgIApAQCAtMTU2LDI4ICsxNDYsMTAgQEAgcHVibGljOgogICAgICAg
ICAKICAgICAgICAgbV9ncmFwaC5lbnN1cmVEb21pbmF0b3JzKCk7CiAKLSNpZiAhRlRMX1VTRVNf
QjMKLSAgICAgICAgc3RhdGUtPm1vZHVsZSA9Ci0gICAgICAgICAgICBtb2R1bGVDcmVhdGVXaXRo
TmFtZUluQ29udGV4dChuYW1lLmRhdGEoKSwgc3RhdGUtPmNvbnRleHQpOwotICAgICAgICAKLSAg
ICAgICAgc3RhdGUtPmZ1bmN0aW9uID0gYWRkRnVuY3Rpb24oCi0gICAgICAgICAgICBzdGF0ZS0+
bW9kdWxlLCBuYW1lLmRhdGEoKSwgZnVuY3Rpb25UeXBlKG1fb3V0LmludDY0KSk7Ci0gICAgICAg
IHNldEZ1bmN0aW9uQ2FsbGluZ0NvbnYoc3RhdGUtPmZ1bmN0aW9uLCBMTFZNQ0NhbGxDb252KTsK
LSAgICAgICAgaWYgKGlzWDg2KCkgJiYgT3B0aW9uczo6bGx2bURpc2FsbG93QVZYKCkpIHsKLSAg
ICAgICAgICAgIC8vIEFWWCBtYWtlcyBWOC9yYXl0cmFjZSA4MCUgc2xvd2VyLiBJdCBtYWtlcyBL
cmFrZW4vYXVkaW8tb3NjaWxsYXRvciA0LjV4Ci0gICAgICAgICAgICAvLyBzbG93ZXIuIEl0IHNo
b3VsZCBiZSBkaXNhYmxlZC4KLSAgICAgICAgICAgIGFkZFRhcmdldERlcGVuZGVudEZ1bmN0aW9u
QXR0cihzdGF0ZS0+ZnVuY3Rpb24sICJ0YXJnZXQtZmVhdHVyZXMiLCAiLWF2eCIpOwotICAgICAg
ICB9Ci0jZW5kaWYgLy8gIUZUTF9VU0VTX0IzCi0gICAgICAgIAogICAgICAgICBpZiAodmVyYm9z
ZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgZGF0YUxvZygiRnVuY3Rpb24gcmVh
ZHksIGJlZ2lubmluZyBsb3dlcmluZy5cbiIpOwogCi0jaWYgRlRMX1VTRVNfQjMKICAgICAgICAg
bV9vdXQuaW5pdGlhbGl6ZShtX2hlYXBzKTsKLSNlbHNlCi0gICAgICAgIG1fb3V0LmluaXRpYWxp
emUoc3RhdGUtPm1vZHVsZSwgc3RhdGUtPmZ1bmN0aW9uLCBtX2hlYXBzKTsKLSNlbmRpZgogCiAg
ICAgICAgIC8vIFdlIHVzZSBwcm9sb2d1ZSBmcmVxdWVuY3kgZm9yIGFsbCBvZiB0aGUgaW5pdGlh
bGl6YXRpb24gY29kZS4KICAgICAgICAgbV9vdXQuc2V0RnJlcXVlbmN5KDEpOwpAQCAtMjAwLDE0
OCArMTcyLDI3IEBAIHB1YmxpYzoKICAgICAgICAgbV9vdXQuc2V0RnJlcXVlbmN5KDEpOwogICAg
ICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9wcm9sb2d1ZSwgc3RhY2tPdmVyZmxvdyk7
Ci0jaWYgRlRMX1VTRVNfQjMKICAgICAgICAgbV9vdXQuaW5pdGlhbGl6ZUNvbnN0YW50cyhtX3By
b2MsIG1fcHJvbG9ndWUpOwotI2VuZGlmCiAgICAgICAgIGNyZWF0ZVBoaVZhcmlhYmxlcygpOwog
Ci0jaWYgRlRMX1VTRVNfQjMKICAgICAgICAgc2l6ZV90IHNpemVPZkNhcHR1cmVkID0gc2l6ZW9m
KEpTVmFsdWUpICogbV9ncmFwaC5tX25leHRNYWNoaW5lTG9jYWw7CiAgICAgICAgIEIzOjpTbG90
QmFzZVZhbHVlKiBjYXB0dXJlZEJhc2UgPSBtX291dC5sb2NrZWRTdGFja1Nsb3Qoc2l6ZU9mQ2Fw
dHVyZWQpOwogICAgICAgICBtX2NhcHR1cmVkID0gbV9vdXQuYWRkKGNhcHR1cmVkQmFzZSwgbV9v
dXQuY29uc3RJbnRQdHIoc2l6ZU9mQ2FwdHVyZWQpKTsKICAgICAgICAgc3RhdGUtPmNhcHR1cmVk
VmFsdWUgPSBjYXB0dXJlZEJhc2UtPnNsb3QoKTsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAg
ICAgIExWYWx1ZSBjYXB0dXJlZEFsbG9jYSA9IG1fb3V0LmFsbG9jYShhcnJheVR5cGUobV9vdXQu
aW50NjQsIG1fZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsKSk7Ci0gICAgICAgIAotICAgICAgICBt
X2NhcHR1cmVkID0gbV9vdXQuYWRkKAotICAgICAgICAgICAgbV9vdXQucHRyVG9JbnQoY2FwdHVy
ZWRBbGxvY2EsIG1fb3V0LmludFB0ciksCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0ciht
X2dyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbCAqIHNpemVvZihSZWdpc3RlcikpKTsKLSAgICAgICAg
Ci0gICAgICAgIHN0YXRlLT5jYXB0dXJlZFN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7Ci0g
ICAgICAgIG1fb3V0LmNhbGwoCi0gICAgICAgICAgICBtX291dC52b2lkVHlwZSwgbV9vdXQuc3Rh
Y2ttYXBJbnRyaW5zaWMoKSwgbV9vdXQuY29uc3RJbnQ2NChzdGF0ZS0+Y2FwdHVyZWRTdGFja21h
cElEKSwKLSAgICAgICAgICAgIG1fb3V0LmludDMyWmVybywgY2FwdHVyZWRBbGxvY2EpOwotI2Vu
ZGlmIC8vIEZUTF9VU0VfQjMKIAogICAgICAgICBhdXRvIHByZU9yZGVyID0gbV9ncmFwaC5ibG9j
a3NJblByZU9yZGVyKCk7CiAKLSNpZiAhRlRMX1VTRVNfQjMKLSAgICAgICAgYm9vbCBoYXNWYXJh
cmdzID0gZmFsc2U7Ci0gICAgICAgIHNpemVfdCBtYXhOdW1iZXJPZkNhdGNoU3BpbGxzID0gMDsK
LSAgICAgICAgZm9yIChERkc6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJlT3JkZXIpIHsKLSAgICAg
ICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgewotICAgICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6Ci0gICAg
ICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6Ci0gICAgICAgICAgICAgICAgY2FzZSBU
YWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgotICAgICAgICAgICAgICAgIGNhc2UgQ2FsbEZv
cndhcmRWYXJhcmdzOgotICAgICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJn
czoKLSAgICAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2Fs
bGVyOgotICAgICAgICAgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKLSAgICAgICAgICAg
ICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgotICAgICAgICAgICAgICAgICAgICBo
YXNWYXJhcmdzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9oYXNFeGNlcHRpb25IYW5kbGVy
cykgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBDYWxsOgotICAgICAgICAgICAgICAgICAgICBjYXNlIENhbGxWYXJh
cmdzOgotICAgICAgICAgICAgICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
Q29uc3RydWN0VmFyYXJnczoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3
YXJkVmFyYXJnczoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbElubGluZWRDYWxs
ZXI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxl
cjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5l
ZENhbGxlcjogewotICAgICAgICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBvcENhdGNoT3Jp
Z2luOwotICAgICAgICAgICAgICAgICAgICAgICAgSGFuZGxlckluZm8qIGV4Y2VwdGlvbkhhbmRs
ZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIHdpbGxDYXRjaEV4Y2VwdGlvbiA9IG1f
Z3JhcGgud2lsbENhdGNoRXhjZXB0aW9uSW5NYWNoaW5lRnJhbWUobm9kZS0+b3JpZ2luLmZvckV4
aXQsIG9wQ2F0Y2hPcmlnaW4sIGV4Y2VwdGlvbkhhbmRsZXIpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHdpbGxDYXRjaEV4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXhOdW1iZXJPZkNhdGNoU3BpbGxzID0gc3RkOjptYXgobWF4TnVtYmVyT2ZDYXRjaFNwaWxs
cywgbV9ncmFwaC5sb2NhbHNMaXZlSW5CeXRlY29kZShvcENhdGNoT3JpZ2luKS5iaXRDb3VudCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQXJpdGhEaXY6Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgQXJpdGhNdWw6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQXJpdGhTdWI6Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVBZGQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
REZHOjpCaXRBbmQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgREZHOjpCaXRPcjoKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBERkc6OkJpdFhvcjoKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBCaXRMU2hpZnQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQml0UlNoaWZ0OgotICAgICAg
ICAgICAgICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIW5vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsgLy8gV2Ugb25seSBjb21waWxlIHBhdGNocG9pbnRzIGZvciBVbnR5
cGVkVXNlLgotICAgICAgICAgICAgICAgICAgICAgICAgRkFMTFRIUk9VR0g7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBHZXRCeUlkOgotICAgICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5
SWRGbHVzaDogewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgbWF5IGhhdmUgdG8gZmx1
c2ggb25lIHRoaW5nIGZvciBHZXRCeUlkcy8gYmluYXJ5IG9wcyB3aGVuIHRoZSBiYXNlIGFuZCBy
ZXN1bHQgb3IgdGhlIGxlZnQvcmlnaHQgYW5kIHRoZSByZXN1bHQKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGFyZSBhc3NpZ25lZCB0aGUgc2FtZSByZWdpc3Rlci4gRm9yIGEgbW9yZSBjb21w
cmVoZW5zaXZlIG92ZXJ2aWV3LCBsb29rIGF0IHRoZSBjb21tZW50IGluIEZUTENvbXBpbGUuY3Bw
Ci0gICAgICAgICAgICAgICAgICAgICAgICBDb2RlT3JpZ2luIG9wQ2F0Y2hPcmlnaW47Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBIYW5kbGVySW5mbyogZXhjZXB0aW9uSGFuZGxlcjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgd2lsbENhdGNoRXhjZXB0aW9uID0gbV9ncmFwaC53aWxs
Q2F0Y2hFeGNlcHRpb25Jbk1hY2hpbmVGcmFtZShub2RlLT5vcmlnaW4uZm9yRXhpdCwgb3BDYXRj
aE9yaWdpbiwgZXhjZXB0aW9uSGFuZGxlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
d2lsbENhdGNoRXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBudW1iZXJPZkdldEJ5SWRPckJpbmFyeU9wU3BpbGxzID0gMTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYXhOdW1iZXJPZkNhdGNoU3BpbGxzID0gc3RkOjptYXgo
bWF4TnVtYmVyT2ZDYXRjaFNwaWxscywgbnVtYmVyT2ZHZXRCeUlkT3JCaW5hcnlPcFNwaWxscyk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBC
MyBkb2Vzbid0IG5lZWQgdGhlIHZhcmFyZ3Mgc3BpbGwgc2xvdCBiZWNhdXNlIHdlIGp1c3QgdXNl
IGNhbGwgYXJnIGFyZWEgc2l6ZSBhcyBhIHdheSB0bwotICAgICAgICAvLyByZXF1ZXN0IHNwaWxs
IHNsb3RzLgotICAgICAgICBpZiAoaGFzVmFyYXJncykgewotICAgICAgICAgICAgTFZhbHVlIHZh
cmFyZ3NTcGlsbFNsb3RzID0gbV9vdXQuYWxsb2NhKAotICAgICAgICAgICAgICAgIGFycmF5VHlw
ZShtX291dC5pbnQ2NCwgSlNDYWxsVmFyYXJnczo6bnVtU3BpbGxTbG90c05lZWRlZCgpKSk7Ci0g
ICAgICAgICAgICBzdGF0ZS0+dmFyYXJnc1NwaWxsU2xvdHNTdGFja21hcElEID0gbV9zdGFja21h
cElEcysrOwotICAgICAgICAgICAgbV9vdXQuY2FsbCgKLSAgICAgICAgICAgICAgICBtX291dC52
b2lkVHlwZSwgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwKLSAgICAgICAgICAgICAgICBtX291
dC5jb25zdEludDY0KHN0YXRlLT52YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQpLAotICAgICAg
ICAgICAgICAgIG1fb3V0LmludDMyWmVybywgdmFyYXJnc1NwaWxsU2xvdHMpOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gQjMgZG9lc24ndCBuZWVkIHRoZSBleGNlcHRpb24gc3BpbGwgc2xvdCBi
ZWNhdXNlIHdlIGp1c3QgdXNlIHRoZSAKLSAgICAgICAgaWYgKG1fZ3JhcGgubV9oYXNFeGNlcHRp
b25IYW5kbGVycyAmJiBtYXhOdW1iZXJPZkNhdGNoU3BpbGxzKSB7Ci0gICAgICAgICAgICBSZWdp
c3RlclNldCB2b2xhdGlsZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVy
c0ZvckpTQ2FsbCgpOwotICAgICAgICAgICAgbWF4TnVtYmVyT2ZDYXRjaFNwaWxscyA9IHN0ZDo6
bWluKHZvbGF0aWxlUmVnaXN0ZXJzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCksIG1heE51bWJlck9m
Q2F0Y2hTcGlsbHMpOwotCi0gICAgICAgICAgICBMVmFsdWUgZXhjZXB0aW9uSGFuZGxpbmdWb2xh
dGlsZVJlZ2lzdGVyc1NwaWxsU2xvdHMgPSBtX291dC5hbGxvY2EoCi0gICAgICAgICAgICAgICAg
YXJyYXlUeXBlKG1fb3V0LmludDY0LCBtYXhOdW1iZXJPZkNhdGNoU3BpbGxzKSk7Ci0gICAgICAg
ICAgICBzdGF0ZS0+ZXhjZXB0aW9uSGFuZGxpbmdTcGlsbFNsb3RTdGFja21hcElEID0gbV9zdGFj
a21hcElEcysrOwotICAgICAgICAgICAgbV9vdXQuY2FsbCgKLSAgICAgICAgICAgICAgICBtX291
dC52b2lkVHlwZSwgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwKLSAgICAgICAgICAgICAgICBt
X291dC5jb25zdEludDY0KHN0YXRlLT5leGNlcHRpb25IYW5kbGluZ1NwaWxsU2xvdFN0YWNrbWFw
SUQpLAotICAgICAgICAgICAgICAgIG1fb3V0LmludDMyWmVybywgZXhjZXB0aW9uSGFuZGxpbmdW
b2xhdGlsZVJlZ2lzdGVyc1NwaWxsU2xvdHMpOwotICAgICAgICB9Ci0jZW5kaWYgLy8gIUZUTF9V
U0VTX0IzCi0gICAgICAgIAogICAgICAgICAvLyBXZSBzaG91bGQgbm90IGNyZWF0ZSBhbnkgYWxs
b2NhJ3MgYWZ0ZXIgdGhpcyBwb2ludCwgc2luY2UgdGhleSB3aWxsIGNlYXNlIHRvCiAgICAgICAg
IC8vIGJlIG1lbTJyZWcgY2FuZGlkYXRlcy4KICAgICAgICAgCi0jaWYgRlRMX1VTRVNfQjMKICAg
ICAgICAgbV9jYWxsRnJhbWUgPSBtX291dC5mcmFtZVBvaW50ZXIoKTsKLSNlbHNlCi0gICAgICAg
IG1fY2FsbEZyYW1lID0gbV9vdXQucHRyVG9JbnQoCi0gICAgICAgICAgICBtX291dC5jYWxsKG1f
b3V0LmludFB0ciwgbV9vdXQuZnJhbWVBZGRyZXNzSW50cmluc2ljKCksIG1fb3V0LmludDMyWmVy
byksIG1fb3V0LmludFB0cik7Ci0jZW5kaWYKICAgICAgICAgbV90YWdUeXBlTnVtYmVyID0gbV9v
dXQuY29uc3RJbnQ2NChUYWdUeXBlTnVtYmVyKTsKICAgICAgICAgbV90YWdNYXNrID0gbV9vdXQu
Y29uc3RJbnQ2NChUYWdNYXNrKTsKIAotI2lmIEZUTF9VU0VTX0IzCiAgICAgICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IEIzIGtub3dzIHRoYXQgd2UgcmVhbGx5IGNhcmUgYWJvdXQgdGhlIG1hc2sgcmVn
aXN0ZXJzLiBUaGlzIGZvcmNlcyB0aGUKICAgICAgICAgLy8gY29uc3RhbnRzIHRvIGJlIG1hdGVy
aWFsaXplZCBpbiByZWdpc3RlcnMuCiAgICAgICAgIG1fcHJvYy5hZGRGYXN0Q29uc3RhbnQobV90
YWdUeXBlTnVtYmVyLT5rZXkoKSk7CiAgICAgICAgIG1fcHJvYy5hZGRGYXN0Q29uc3RhbnQobV90
YWdNYXNrLT5rZXkoKSk7Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICAgICAgCiAgICAgICAg
IG1fb3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50UHRyKGNvZGVCbG9jaygpKSwgYWRkcmVzc0Zv
cihKU1N0YWNrOjpDb2RlQmxvY2spKTsKICAgICAgICAgCkBAIC0zNTAsNyArMjAxLDYgQEAgcHVi
bGljOgogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc3RhY2tPdmVyZmxvdywgbV9o
YW5kbGVFeGNlcHRpb25zKTsKICAgICAgICAgbV9vdXQuY2FsbChtX291dC52b2lkVHlwZSwgbV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9yKSwgbV9jYWxsRnJh
bWUsIG1fb3V0LmNvbnN0SW50UHRyKGNvZGVCbG9jaygpKSk7Ci0jaWYgRlRMX1VTRVNfQjMKICAg
ICAgICAgbV9vdXQucGF0Y2hwb2ludChWb2lkKS0+c2V0R2VuZXJhdG9yKAogICAgICAgICAgICAg
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikg
ewogICAgICAgICAgICAgICAgIC8vIFdlIGFyZSB0ZXJtaW5hbCwgc28gd2UgY2FuIGNsb2JiZXIg
ZXZlcnl0aGluZy4gVGhhdCdzIHdoeSB3ZSBkb24ndCBjbGFpbSB0bwpAQCAtMzY4LDE3ICsyMTgs
OSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2Fs
bCwgRnVuY3Rpb25QdHIobG9va3VwRXhjZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSkpOwog
ICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwotI2Vsc2UgLy8gRlRMX1VT
RVNfQjMKLSAgICAgICAgc3RhdGUtPmhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFja21h
cElEID0gbV9zdGFja21hcElEcysrOwotICAgICAgICBtX291dC5jYWxsKAotICAgICAgICAgICAg
bV9vdXQudm9pZFR5cGUsIG1fb3V0LnN0YWNrbWFwSW50cmluc2ljKCksCi0gICAgICAgICAgICBt
X291dC5jb25zdEludDY0KHN0YXRlLT5oYW5kbGVTdGFja092ZXJmbG93RXhjZXB0aW9uU3RhY2tt
YXBJRCksCi0gICAgICAgICAgICBtX291dC5jb25zdEludDMyKE1hY3JvQXNzZW1ibGVyOjptYXhK
dW1wUmVwbGFjZW1lbnRTaXplKCkpKTsKLSNlbmRpZiAvLyBGVExfVVNFU19CMwogICAgICAgICBt
X291dC51bnJlYWNoYWJsZSgpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9o
YW5kbGVFeGNlcHRpb25zLCBjaGVja0FyZ3VtZW50cyk7Ci0jaWYgRlRMX1VTRVNfQjMKICAgICAg
ICAgQm94PENDYWxsSGVscGVyczo6TGFiZWw+IGV4Y2VwdGlvbkhhbmRsZXIgPSBzdGF0ZS0+ZXhj
ZXB0aW9uSGFuZGxlcjsKICAgICAgICAgbV9vdXQucGF0Y2hwb2ludChWb2lkKS0+c2V0R2VuZXJh
dG9yKAogICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJikgewpAQCAtMzg4LDEyICsyMzAsNiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcCwgbGlua0J1ZmZlci5sb2NhdGlv
bk9mKCpleGNlcHRpb25IYW5kbGVyKSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgfSk7Ci0jZWxzZQotICAgICAgICBzdGF0ZS0+aGFuZGxlRXhjZXB0aW9uU3RhY2ttYXBJ
RCA9IG1fc3RhY2ttYXBJRHMrKzsKLSAgICAgICAgbV9vdXQuY2FsbCgKLSAgICAgICAgICAgIG1f
b3V0LnZvaWRUeXBlLCBtX291dC5zdGFja21hcEludHJpbnNpYygpLCBtX291dC5jb25zdEludDY0
KHN0YXRlLT5oYW5kbGVFeGNlcHRpb25TdGFja21hcElEKSwKLSAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50MzIoTWFjcm9Bc3NlbWJsZXI6Om1heEp1bXBSZXBsYWNlbWVudFNpemUoKSkpOwotI2Vu
ZGlmCiAgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CiAgICAgICAgIAogICAgICAgICBtX291
dC5hcHBlbmRUbyhjaGVja0FyZ3VtZW50cywgbG93QmxvY2sobV9ncmFwaC5ibG9jaygwKSkpOwpA
QCAtNDQzLDcgKzI3OSw2IEBAIHB1YmxpYzoKICAgICAgICAgZm9yIChERkc6OkJhc2ljQmxvY2sq
IGJsb2NrIDogcHJlT3JkZXIpCiAgICAgICAgICAgICBjb21waWxlQmxvY2soYmxvY2spOwogCi0j
aWYgRlRMX1VTRVNfQjMKICAgICAgICAgLy8gV2UgY3JlYXRlIGFsbCBQaGkncyB1cCBmcm9udCwg
YnV0IHdlIG1heSB0aGVuIGRlY2lkZSBub3QgdG8gY29tcGlsZSB0aGUgYmFzaWMgYmxvY2sKICAg
ICAgICAgLy8gdGhhdCB3b3VsZCBoYXZlIGNvbnRhaW5lZCBvbmUgb2YgdGhlbS4gU28gdGhpcyBj
cmVhdGVzIG9ycGhhbnMsIHdoaWNoIHRyaWdnZXJzIEIzCiAgICAgICAgIC8vIHZhbGlkYXRpb24g
ZmFpbHVyZXMuIENhbGxpbmcgdGhpcyBmaXhlcyB0aGUgaXNzdWUuCkBAIC00NTcsMTYgKzI5Miw2
IEBAIHB1YmxpYzoKIAogICAgICAgICAvLyBXZSBwdXQgdGhlIGJsb2NrcyBpbnRvIHRoZSBCMyBw
cm9jZWR1cmUgaW4gYSBzdXBlciB3ZWlyZCBvcmRlci4gTm93IHdlIHJlb3JkZXIgdGhlbS4KICAg
ICAgICAgbV9vdXQuYXBwbHlCbG9ja09yZGVyKCk7Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKLQot
I2lmICFGVExfVVNFU19CMwotICAgICAgICBpZiAoT3B0aW9uczo6ZHVtcExMVk1JUigpKQotICAg
ICAgICAgICAgZHVtcE1vZHVsZShzdGF0ZS0+bW9kdWxlKTsKLSAgICAgICAgaWYgKHZlcmJvc2VD
b21waWxhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgICAgIHN0YXRlLT5kdW1wU3RhdGUoImFmdGVy
IGxvd2VyaW5nIik7Ci0gICAgICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAg
ICAgdmVyaWZ5TW9kdWxlKHN0YXRlLT5tb2R1bGUpOwotI2VuZGlmCiAgICAgfQogCiBwcml2YXRl
OgpAQCAtNTAyLDExICszMjcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBERkdf
Q1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCBQaGkgbm9kZSByZXN1bHQgdHlwZSIpOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0jaWYgRlRMX1VTRVNfQjMK
ICAgICAgICAgICAgICAgICBtX3BoaXMuYWRkKG5vZGUsIG1fcHJvYy5hZGQ8VmFsdWU+KEIzOjpQ
aGksIHR5cGUsIE9yaWdpbihub2RlKSkpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBtX3BoaXMu
YWRkKG5vZGUsIG1fb3V0LmFsbG9jYSh0eXBlKSk7Ci0jZW5kaWYKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KQEAgLTU5NSw5ICs0MTYsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAg
ICAgICAgbV9ub2RlID0gbV9oaWdoQmxvY2stPmF0KG5vZGVJbmRleCk7CiAgICAgICAgIG1fb3Jp
Z2luID0gbV9ub2RlLT5vcmlnaW47Ci0jaWYgRlRMX1VTRVNfQjMKICAgICAgICAgbV9vdXQuc2V0
T3JpZ2luKG1fbm9kZSk7Ci0jZW5kaWYKICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlQ29t
cGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJMb3dlcmluZyAiLCBtX25v
ZGUsICJcbiIpOwpAQCAtMTExOCw4MCArOTM3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCi0gICAgZW51bSBDb25zdEludDMyT3BlcmFuZE9wdGltaXphdGlvblN1
cHBvcnQgewotICAgICAgICBIYXNDb25zdEludDMyT3BlcmFuZE9wdGltaXphdGlvbiwKLSAgICAg
ICAgRG9lc05vdEhhdmVDb25zdEludDMyT3BlcmFuZE9wdGltaXphdGlvbiwKLSAgICB9OwotCi0g
ICAgZW51bSBDb25zdERvdWJsZU9wZXJhbmRPcHRpbWl6YXRpb25TdXBwb3J0IHsKLSAgICAgICAg
SGFzQ29uc3REb3VibGVPcGVyYW5kT3B0aW1pemF0aW9uLAotICAgICAgICBEb2VzTm90SGF2ZUNv
bnN0RG91YmxlT3BlcmFuZE9wdGltaXphdGlvbiwKLSAgICB9OwotCi0gICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFNuaXBwZXRJQ0Rlc2NyaXB0b3IsCi0gICAgICAgIENvbnN0SW50MzJPcGVyYW5kT3B0
aW1pemF0aW9uU3VwcG9ydCBjb25zdEludDMyT3B0ID0gSGFzQ29uc3RJbnQzMk9wZXJhbmRPcHRp
bWl6YXRpb24sCi0gICAgICAgIENvbnN0RG91YmxlT3BlcmFuZE9wdGltaXphdGlvblN1cHBvcnQg
Y29uc3REb3VibGVPcHQgPSBEb2VzTm90SGF2ZUNvbnN0RG91YmxlT3BlcmFuZE9wdGltaXphdGlv
bj4KLSAgICB2b2lkIGNvbXBpbGVVbnR5cGVkQmluYXJ5T3AoKQotICAgIHsKLSAgICAgICAgRWRn
ZSYgbGVmdENoaWxkID0gbV9ub2RlLT5jaGlsZDEoKTsKLSAgICAgICAgRWRnZSYgcmlnaHRDaGls
ZCA9IG1fbm9kZS0+Y2hpbGQyKCk7Ci0KLSAgICAgICAgaWYgKCEocHJvdmVuVHlwZShsZWZ0Q2hp
bGQpICYgU3BlY0Z1bGxOdW1iZXIpIHx8ICEocHJvdmVuVHlwZShyaWdodENoaWxkKSAmIFNwZWNG
dWxsTnVtYmVyKSkgewotICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwobV9vdXQuaW50NjQs
IG1fb3V0Lm9wZXJhdGlvbihTbmlwcGV0SUNEZXNjcmlwdG9yOjpub25OdW1iZXJTbG93UGF0aEZ1
bmN0aW9uKCkpLCBtX2NhbGxGcmFtZSwKLSAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKGxlZnRD
aGlsZCksIGxvd0pTVmFsdWUocmlnaHRDaGlsZCkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7
Ci0KLSAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvbigpKQotICAgICAgICAg
ICAgZGF0YUxvZygiICAgIEVtaXR0aW5nICIsIFNuaXBwZXRJQ0Rlc2NyaXB0b3I6Om9wTmFtZSgp
LCAiIHBhdGNocG9pbnQgd2l0aCBzdGFja21hcCAjIiwgc3RhY2ttYXBJRCwgIlxuIik7Ci0KLSNp
ZiBGVExfVVNFU19CMwotICAgICAgICBDUkFTSCgpOwotI2Vsc2UKLSAgICAgICAgTFZhbHVlIGxl
ZnQgPSBsb3dKU1ZhbHVlKGxlZnRDaGlsZCk7Ci0gICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0pT
VmFsdWUocmlnaHRDaGlsZCk7Ci0KLSAgICAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQo
YWJzdHJhY3RWYWx1ZShsZWZ0Q2hpbGQpLnJlc3VsdFR5cGUoKSk7Ci0gICAgICAgIFNuaXBwZXRP
cGVyYW5kIHJpZ2h0T3BlcmFuZChhYnN0cmFjdFZhbHVlKHJpZ2h0Q2hpbGQpLnJlc3VsdFR5cGUo
KSk7Ci0KLSAgICAgICAgaWYgKGNvbnN0SW50MzJPcHQgPT0gSGFzQ29uc3RJbnQzMk9wZXJhbmRP
cHRpbWl6YXRpb24gJiYgbGVmdENoaWxkLT5pc0ludDMyQ29uc3RhbnQoKSkKLSAgICAgICAgICAg
IGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIobGVmdENoaWxkLT5hc0ludDMyKCkpOwotICAgICAg
ICBlbHNlIGlmIChjb25zdERvdWJsZU9wdCA9PSBIYXNDb25zdERvdWJsZU9wZXJhbmRPcHRpbWl6
YXRpb24gJiYgbGVmdENoaWxkLT5pc0RvdWJsZUNvbnN0YW50KCkpCi0gICAgICAgICAgICBsZWZ0
T3BlcmFuZC5zZXRDb25zdERvdWJsZShsZWZ0Q2hpbGQtPmFzTnVtYmVyKCkpOwotCi0gICAgICAg
IGlmIChsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpIHsKLSAgICAgICAgICAgIC8vIEJlY2F1c2UgdGhl
IHNuaXBwZXQgZG9lcyBub3Qgc3VwcG9ydCBib3RoIG9wZXJhbmRzIGJlaW5nIGNvbnN0YW50LCBp
ZiB0aGUgbGVmdAotICAgICAgICAgICAgLy8gb3BlcmFuZCBpcyBhbHJlYWR5IGEgY29uc3RhbnQs
IHdlJ2xsIGp1c3QgcHJldGVuZCB0aGUgcmlnaHQgb3BlcmFuZCBpcyBub3QuCi0gICAgICAgIH0g
ZWxzZSBpZiAoY29uc3RJbnQzMk9wdCA9PSBIYXNDb25zdEludDMyT3BlcmFuZE9wdGltaXphdGlv
biAmJiByaWdodENoaWxkLT5pc0ludDMyQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIHJpZ2h0T3Bl
cmFuZC5zZXRDb25zdEludDMyKHJpZ2h0Q2hpbGQtPmFzSW50MzIoKSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGNvbnN0RG91YmxlT3B0ID09IEhhc0NvbnN0RG91YmxlT3BlcmFuZE9wdGltaXphdGlvbiAm
JiByaWdodENoaWxkLT5pc0RvdWJsZUNvbnN0YW50KCkpCi0gICAgICAgICAgICByaWdodE9wZXJh
bmQuc2V0Q29uc3REb3VibGUocmlnaHRDaGlsZC0+YXNOdW1iZXIoKSk7Ci0KLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29u
c3QoKSk7Ci0KLSAgICAgICAgLy8gQXJndW1lbnRzOiBpZCwgYnl0ZXMsIHRhcmdldCwgbnVtQXJn
cywgYXJncy4uLgotICAgICAgICBTdGFja21hcEFyZ3VtZW50TGlzdCBhcmd1bWVudHM7Ci0gICAg
ICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQ2NChzdGFja21hcElEKSk7Ci0gICAg
ICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMihTbmlwcGV0SUNEZXNjcmlwdG9y
OjppY1NpemUoKSkpOwotICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGNvbnN0TnVsbChtX291dC5y
ZWY4KSk7Ci0gICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQzMigyKSk7Ci0g
ICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobGVmdCk7Ci0gICAgICAgIGFyZ3VtZW50cy5hcHBlbmQo
cmlnaHQpOwotCi0gICAgICAgIGFwcGVuZE9TUkV4aXRBcmd1bWVudHNGb3JQYXRjaHBvaW50SWZX
aWxsQ2F0Y2hFeGNlcHRpb24oYXJndW1lbnRzLAotICAgICAgICAgICAgRXhjZXB0aW9uVHlwZTo6
QmluYXJ5T3BHZW5lcmF0b3IsIDMpOyAvLyBsZWZ0LCByaWdodCwgYW5kIHJlc3VsdCBzaG93IHVw
IGluIHRoZSBzdGFja21hcCBsb2NhdGlvbnMuCi0KLSAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291
dC5jYWxsKG1fb3V0LmludDY0LCBtX291dC5wYXRjaHBvaW50SW50NjRJbnRyaW5zaWMoKSwgYXJn
dW1lbnRzKTsKLSAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBM
TFZNQW55UmVnQ2FsbENvbnYpOwotCi0gICAgICAgIG1fZnRsU3RhdGUuYmluYXJ5T3BzLmFwcGVu
ZChTbmlwcGV0SUNEZXNjcmlwdG9yKHN0YWNrbWFwSUQsIG1fbm9kZS0+b3JpZ2luLnNlbWFudGlj
LCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKSk7Ci0KLSAgICAgICAgc2V0SlNWYWx1ZShjYWxs
KTsKLSNlbmRpZgotICAgIH0KLQogICAgIHZvaWQgY29tcGlsZVVwc2lsb24oKQogICAgIHsKICAg
ICAgICAgTFZhbHVlIHVwc2lsb25WYWx1ZSA9IG51bGxwdHI7CkBAIC0xMjIxLDE5ICs5NjYsMTMg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQg
dXNlIGtpbmQiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0jaWYgRlRMX1VTRVNf
QjMKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgdXBzaWxvbiA9IG1fb3V0LmFuY2hvcih1cHNpbG9u
VmFsdWUpOwogICAgICAgICBMVmFsdWUgcGhpTm9kZSA9IG1fcGhpcy5nZXQobV9ub2RlLT5waGko
KSk7CiAgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkocGhpTm9kZSwgdXBzaWxvbik7Ci0j
ZWxzZQotICAgICAgICBMVmFsdWUgZGVzdGluYXRpb24gPSBtX3BoaXMuZ2V0KG1fbm9kZS0+cGhp
KCkpOwotICAgICAgICBtX291dC5zZXQodXBzaWxvblZhbHVlLCBkZXN0aW5hdGlvbik7Ci0jZW5k
aWYKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlUGhpKCkKICAgICB7Ci0jaWYgRlRMX1VT
RVNfQjMKICAgICAgICAgTFZhbHVlIHBoaSA9IG1fcGhpcy5nZXQobV9ub2RlKTsKICAgICAgICAg
bV9vdXQubV9ibG9jay0+YXBwZW5kKHBoaSk7CiAKQEAgLTEyNTcsMzAgKzk5Niw2IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5k
Iik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgTFZhbHVl
IHNvdXJjZSA9IG1fcGhpcy5nZXQobV9ub2RlKTsKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAo
bV9ub2RlLT5mbGFncygpICYgTm9kZVJlc3VsdE1hc2spIHsKLSAgICAgICAgY2FzZSBOb2RlUmVz
dWx0RG91YmxlOgotICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LmdldChzb3VyY2UpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5vZGVSZXN1bHRJbnQzMjoKLSAgICAgICAg
ICAgIHNldEludDMyKG1fb3V0LmdldChzb3VyY2UpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIE5vZGVSZXN1bHRJbnQ1MjoKLSAgICAgICAgICAgIHNldEludDUyKG1fb3V0Lmdl
dChzb3VyY2UpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5vZGVSZXN1bHRC
b29sZWFuOgotICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5nZXQoc291cmNlKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOb2RlUmVzdWx0SlM6Ci0gICAgICAgICAgICBz
ZXRKU1ZhbHVlKG1fb3V0LmdldChzb3VyY2UpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1
c2Uga2luZCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSNlbmRpZgogICAgIH0K
ICAgICAKICAgICB2b2lkIGNvbXBpbGVEb3VibGVDb25zdGFudCgpCkBAIC0xNjY2LDExICsxMzgx
LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVWYWx1ZUFkZCgpCiAgICAgewot
I2lmIEZUTF9VU0VTX0IzCiAgICAgICAgIGVtaXRCaW5hcnlTbmlwcGV0PEpJVEFkZEdlbmVyYXRv
cj4ob3BlcmF0aW9uVmFsdWVBZGQpOwotI2Vsc2UgLy8gRlRMX1VTRVNfQjMKLSAgICAgICAgY29t
cGlsZVVudHlwZWRCaW5hcnlPcDxWYWx1ZUFkZERlc2NyaXB0b3I+KCk7Ci0jZW5kaWYgLy8gRlRM
X1VTRVNfQjMKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlU3RyQ2F0KCkKQEAgLTE3MDQs
NDcgKzE0MTUsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KIAotI2lmIEZUTF9VU0VTX0IzCiAgICAgICAgICAgICBDaGVja1ZhbHVlKiByZXN1bHQg
PQogICAgICAgICAgICAgICAgIGlzU3ViID8gbV9vdXQuc3BlY3VsYXRlU3ViKGxlZnQsIHJpZ2h0
KSA6IG1fb3V0LnNwZWN1bGF0ZUFkZChsZWZ0LCByaWdodCk7CiAgICAgICAgICAgICBibGVzc1Nw
ZWN1bGF0aW9uKHJlc3VsdCwgT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4p
OwogICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0g
ICAgICAgICAgICBMVmFsdWUgcmVzdWx0OwotICAgICAgICAgICAgaWYgKCFpc1N1YikgewotICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmFkZFdpdGhPdmVyZmxvdzMyKGxlZnQsIHJpZ2h0
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoZG9lc0tpbGwobV9ub2Rl
LT5jaGlsZDIoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgYWRkQXZhaWxhYmxlUmVjb3Zlcnko
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX25vZGUtPmNoaWxkMigpLCBTdWJSZWNvdmVyeSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDApLCBs
ZWZ0LCBEYXRhRm9ybWF0SW50MzIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZG9lc0tp
bGwobV9ub2RlLT5jaGlsZDEoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgYWRkQXZhaWxhYmxl
UmVjb3ZlcnkoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX25vZGUtPmNoaWxkMSgpLCBTdWJS
ZWNvdmVyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1
bHQsIDApLCByaWdodCwgRGF0YUZvcm1hdEludDMyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LnN1YldpdGhP
dmVyZmxvdzMyKGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpZiAoZG9lc0tpbGwobV9ub2RlLT5jaGlsZDIoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gcmVzdWx0ID0gbGVmdCAtIHJpZ2h0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHJlc3VsdCAt
IGxlZnQgPSAtcmlnaHQKLSAgICAgICAgICAgICAgICAgICAgLy8gcmlnaHQgPSBsZWZ0IC0gcmVz
dWx0Ci0gICAgICAgICAgICAgICAgICAgIGFkZEF2YWlsYWJsZVJlY292ZXJ5KAotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ub2RlLT5jaGlsZDIoKSwgU3ViUmVjb3ZlcnksCi0gICAgICAgICAg
ICAgICAgICAgICAgICBsZWZ0LCBtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAwKSwgRGF0YUZv
cm1hdEludDMyKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRvZXNLaWxsKG1fbm9kZS0+
Y2hpbGQxKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHJlc3VsdCA9IGxlZnQgLSByaWdo
dAotICAgICAgICAgICAgICAgICAgICAvLyByZXN1bHQgKyByaWdodCA9IGxlZnQKLSAgICAgICAg
ICAgICAgICAgICAgYWRkQXZhaWxhYmxlUmVjb3ZlcnkoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtX25vZGUtPmNoaWxkMSgpLCBBZGRSZWNvdmVyeSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDApLCByaWdodCwgRGF0YUZvcm1hdEludDMyKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0
ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAxKSk7
Ci0gICAgICAgICAgICBzZXRJbnQzMihtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAwKSk7Ci0j
ZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKQEAgLTE3NjAsNDggKzE0MzQsMTAgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAg
TFZhbHVlIGxlZnQgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIExW
YWx1ZSByaWdodCA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQyKCkpOwotI2lmIEZUTF9VU0VTX0Iz
CiAgICAgICAgICAgICBDaGVja1ZhbHVlKiByZXN1bHQgPQogICAgICAgICAgICAgICAgIGlzU3Vi
ID8gbV9vdXQuc3BlY3VsYXRlU3ViKGxlZnQsIHJpZ2h0KSA6IG1fb3V0LnNwZWN1bGF0ZUFkZChs
ZWZ0LCByaWdodCk7CiAgICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9uKHJlc3VsdCwgT3ZlcmZs
b3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4pOwogICAgICAgICAgICAgc2V0SW50NTIo
cmVzdWx0KTsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0KLSAgICAgICAgICAgIExWYWx1ZSByZXN1
bHQ7Ci0gICAgICAgICAgICBpZiAoIWlzU3ViKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0g
bV9vdXQuYWRkV2l0aE92ZXJmbG93NjQobGVmdCwgcmlnaHQpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmIChkb2VzS2lsbChtX25vZGUtPmNoaWxkMigpKSkgewotICAgICAg
ICAgICAgICAgICAgICBhZGRBdmFpbGFibGVSZWNvdmVyeSgKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fbm9kZS0+Y2hpbGQyKCksIFN1YlJlY292ZXJ5LAotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMCksIGxlZnQsIERhdGFGb3JtYXRJbnQ1Mik7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkb2VzS2lsbChtX25vZGUtPmNoaWxkMSgpKSkg
ewotICAgICAgICAgICAgICAgICAgICBhZGRBdmFpbGFibGVSZWNvdmVyeSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1fbm9kZS0+Y2hpbGQxKCksIFN1YlJlY292ZXJ5LAotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMCksIHJpZ2h0LCBEYXRhRm9y
bWF0SW50NTIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQuc3ViV2l0aE92ZXJmbG93NjQobGVmdCwgcmlnaHQp
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChkb2VzS2lsbChtX25vZGUt
PmNoaWxkMigpKSkgewotICAgICAgICAgICAgICAgICAgICAvLyByZXN1bHQgPSBsZWZ0IC0gcmln
aHQKLSAgICAgICAgICAgICAgICAgICAgLy8gcmVzdWx0IC0gbGVmdCA9IC1yaWdodAotICAgICAg
ICAgICAgICAgICAgICAvLyByaWdodCA9IGxlZnQgLSByZXN1bHQKLSAgICAgICAgICAgICAgICAg
ICAgYWRkQXZhaWxhYmxlUmVjb3ZlcnkoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX25vZGUt
PmNoaWxkMigpLCBTdWJSZWNvdmVyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQsIG1f
b3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDApLCBEYXRhRm9ybWF0SW50NTIpOwotICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoZG9lc0tpbGwobV9ub2RlLT5jaGlsZDEoKSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gcmVzdWx0ID0gbGVmdCAtIHJpZ2h0Ci0gICAgICAgICAgICAgICAgICAg
IC8vIHJlc3VsdCArIHJpZ2h0ID0gbGVmdAotICAgICAgICAgICAgICAgICAgICBhZGRBdmFpbGFi
bGVSZWNvdmVyeSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+Y2hpbGQxKCksIEFk
ZFJlY292ZXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuZXh0cmFjdFZhbHVlKHJl
c3VsdCwgMCksIHJpZ2h0LCBEYXRhRm9ybWF0SW50NTIpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3BlY3VsYXRlKEludDUyT3ZlcmZsb3csIG5vVmFs
dWUoKSwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMSkpOwotICAgICAgICAgICAgc2V0
SW50NTIobV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMCkpOwotI2VuZGlmIC8vIEZUTF9VU0VT
X0IzCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xODE5
LDExICsxNDU1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KIAotI2lmIEZUTF9VU0VTX0IzCiAgICAgICAgICAgICBlbWl0QmluYXJ5U25pcHBldDxK
SVRTdWJHZW5lcmF0b3I+KG9wZXJhdGlvblZhbHVlU3ViKTsKLSNlbHNlIC8vIEZUTF9VU0VTX0Iz
Ci0gICAgICAgICAgICBjb21waWxlVW50eXBlZEJpbmFyeU9wPEFyaXRoU3ViRGVzY3JpcHRvciwg
RG9lc05vdEhhdmVDb25zdEludDMyT3BlcmFuZE9wdGltaXphdGlvbiwgRG9lc05vdEhhdmVDb25z
dERvdWJsZU9wZXJhbmRPcHRpbWl6YXRpb24+KCk7Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE4NTEsMTUgKzE0ODMsOSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgaWYgKCFzaG91bGRDaGVja092ZXJmbG93KG1fbm9kZS0+YXJpdGhN
b2RlKCkpKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0Lm11bChsZWZ0LCByaWdodCk7
CiAgICAgICAgICAgICBlbHNlIHsKLSNpZiBGVExfVVNFU19CMwogICAgICAgICAgICAgICAgIENo
ZWNrVmFsdWUqIHNwZWN1bGF0aW9uID0gbV9vdXQuc3BlY3VsYXRlTXVsKGxlZnQsIHJpZ2h0KTsK
ICAgICAgICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9uKHNwZWN1bGF0aW9uLCBPdmVyZmxvdywg
bm9WYWx1ZSgpLCBudWxscHRyLCBtX29yaWdpbik7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
c3BlY3VsYXRpb247Ci0jZWxzZSAvLyBGVExfVVNFU19CMwotICAgICAgICAgICAgICAgIExWYWx1
ZSBvdmVyZmxvd1Jlc3VsdCA9IG1fb3V0Lm11bFdpdGhPdmVyZmxvdzMyKGxlZnQsIHJpZ2h0KTsK
LSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQu
ZXh0cmFjdFZhbHVlKG92ZXJmbG93UmVzdWx0LCAxKSk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0
ID0gbV9vdXQuZXh0cmFjdFZhbHVlKG92ZXJmbG93UmVzdWx0LCAwKTsKLSNlbmRpZiAvLyBGVExf
VVNFU19CMwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc2hv
dWxkQ2hlY2tOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aE1vZGUoKSkpIHsKQEAgLTE4ODUsMTQg
KzE1MTEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dXaGljaGV2
ZXJJbnQ1MihtX25vZGUtPmNoaWxkMSgpLCBraW5kKTsKICAgICAgICAgICAgIExWYWx1ZSByaWdo
dCA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQyKCksIG9wcG9zaXRlKGtpbmQpKTsKIAotI2lmIEZU
TF9VU0VTX0IzCiAgICAgICAgICAgICBDaGVja1ZhbHVlKiByZXN1bHQgPSBtX291dC5zcGVjdWxh
dGVNdWwobGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgYmxlc3NTcGVjdWxhdGlvbihyZXN1bHQs
IE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2luKTsKLSNlbHNlIC8vIEZUTF9V
U0VTX0IzCi0gICAgICAgICAgICBMVmFsdWUgb3ZlcmZsb3dSZXN1bHQgPSBtX291dC5tdWxXaXRo
T3ZlcmZsb3c2NChsZWZ0LCByaWdodCk7Ci0gICAgICAgICAgICBzcGVjdWxhdGUoSW50NTJPdmVy
Zmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5leHRyYWN0VmFsdWUob3ZlcmZsb3dSZXN1bHQsIDEp
KTsKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5leHRyYWN0VmFsdWUob3ZlcmZs
b3dSZXN1bHQsIDApOwotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAKICAgICAgICAgICAgIGlmIChz
aG91bGRDaGVja05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoTW9kZSgpKSkgewogICAgICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0
aE11bCBzbG93IGNhc2UiKSk7CkBAIC0xOTE5LDExICsxNTM5LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgfQogCiAgICAgICAgIGNhc2UgVW50eXBlZFVzZTogewotI2lmIEZUTF9VU0VTX0IzCiAgICAg
ICAgICAgICBlbWl0QmluYXJ5U25pcHBldDxKSVRNdWxHZW5lcmF0b3I+KG9wZXJhdGlvblZhbHVl
TXVsKTsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAgICAgICAgICBjb21waWxlVW50eXBlZEJp
bmFyeU9wPEFyaXRoTXVsRGVzY3JpcHRvcj4oKTsKLSNlbmRpZiAvLyBGVExfVVNFU19CMwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTk5MiwxMSArMTYwOCw3IEBAIHByaXZh
dGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFVudHlwZWRVc2U6IHsKLSNpZiBGVExfVVNF
U19CMwogICAgICAgICAgICAgZW1pdEJpbmFyeVNuaXBwZXQ8SklURGl2R2VuZXJhdG9yLCBOZWVk
U2NyYXRjaEZQUj4ob3BlcmF0aW9uVmFsdWVEaXYpOwotI2Vsc2UgLy8gRlRMX1VTRVNfQjMKLSAg
ICAgICAgICAgIGNvbXBpbGVVbnR5cGVkQmluYXJ5T3A8QXJpdGhEaXZEZXNjcmlwdG9yLCBIYXND
b25zdEludDMyT3BlcmFuZE9wdGltaXphdGlvbiwgSGFzQ29uc3REb3VibGVPcGVyYW5kT3B0aW1p
emF0aW9uPigpOwotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogCkBAIC0yMzExLDE3ICsxOTIzLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGVs
c2UgaWYgKCFzaG91bGRDaGVja05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoTW9kZSgpKSkgewog
ICAgICAgICAgICAgICAgIC8vICIwIC0geCIgaXMgdGhlIGNhbm9uaWNhbCB3YXkgb2Ygc2F5aW5n
ICIteCIgaW4gYm90aCBCMyBhbmQgTExWTS4gVGhpcyBnZXRzCiAgICAgICAgICAgICAgICAgLy8g
bG93ZXJlZCB0byB0aGUgcmlnaHQgdGhpbmcuCi0jaWYgRlRMX1VTRVNfQjMKICAgICAgICAgICAg
ICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fb3V0LnNwZWN1bGF0ZVN1YihtX291dC5pbnQzMlpl
cm8sIHZhbHVlKTsKICAgICAgICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9uKGNoZWNrLCBPdmVy
Zmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX29yaWdpbik7CiAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gY2hlY2s7Ci0jZWxzZSAvLyBGVExfVVNFU19CMwotICAgICAgICAgICAgICAgIC8vIFdl
IGRvbid0IGhhdmUgYSBuZWdhdGUtd2l0aC1vdmVyZmxvdyBpbnRyaW5zaWMuIEhvcGVmdWxseSB0
aGlzCi0gICAgICAgICAgICAgICAgLy8gZG9lcyB0aGUgdHJpY2ssIHRob3VnaC4KLSAgICAgICAg
ICAgICAgICBMVmFsdWUgb3ZlcmZsb3dSZXN1bHQgPSBtX291dC5zdWJXaXRoT3ZlcmZsb3czMiht
X291dC5pbnQzMlplcm8sIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZs
b3csIG5vVmFsdWUoKSwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKG92ZXJmbG93UmVzdWx0LCAxKSk7
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQuZXh0cmFjdFZhbHVlKG92ZXJmbG93UmVz
dWx0LCAwKTsKLSNlbmRpZiAvLyBGVExfVVNFU19CMwogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQudGVz
dElzWmVybzMyKHZhbHVlLCBtX291dC5jb25zdEludDMyKDB4N2ZmZmZmZmYpKSk7CiAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gbV9vdXQubmVnKHZhbHVlKTsKQEAgLTIzNDMsMTQgKzE5NDcsOCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBMVmFs
dWUgdmFsdWUgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxkMSgpKTsKLSNpZiBGVExfVVNFU19CMwog
ICAgICAgICAgICAgQ2hlY2tWYWx1ZSogcmVzdWx0ID0gbV9vdXQuc3BlY3VsYXRlU3ViKG1fb3V0
LmludDY0WmVybywgdmFsdWUpOwogICAgICAgICAgICAgYmxlc3NTcGVjdWxhdGlvbihyZXN1bHQs
IEludDUyT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4pOwotI2Vsc2UgLy8g
RlRMX1VTRVNfQjMKLSAgICAgICAgICAgIExWYWx1ZSBvdmVyZmxvd1Jlc3VsdCA9IG1fb3V0LnN1
YldpdGhPdmVyZmxvdzY0KG1fb3V0LmludDY0WmVybywgdmFsdWUpOwotICAgICAgICAgICAgc3Bl
Y3VsYXRlKEludDUyT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKG92
ZXJmbG93UmVzdWx0LCAxKSk7Ci0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuZXh0
cmFjdFZhbHVlKG92ZXJmbG93UmVzdWx0LCAwKTsKLSNlbmRpZiAvLyBGVExfVVNFU19CMwogICAg
ICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCAwLCBtX291dC5pc1pl
cm82NChyZXN1bHQpKTsKICAgICAgICAgICAgIHNldEludDUyKHJlc3VsdCk7CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTIzNzAsMTEgKzE5NjgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGls
ZUJpdEFuZCgpCiAgICAgewogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50
eXBlZFVzZSkpIHsKLSNpZiBGVExfVVNFU19CMwogICAgICAgICAgICAgZW1pdEJpbmFyeUJpdE9w
U25pcHBldDxKSVRCaXRBbmRHZW5lcmF0b3I+KG9wZXJhdGlvblZhbHVlQml0QW5kKTsKLSNlbHNl
IC8vIEZUTF9VU0VTX0IzCi0gICAgICAgICAgICBjb21waWxlVW50eXBlZEJpbmFyeU9wPEJpdEFu
ZERlc2NyaXB0b3I+KCk7Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICBzZXRJbnQzMihtX291dC5iaXRBbmQobG93SW50MzIobV9u
b2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CkBAIC0yMzgzLDEx
ICsxOTc3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVCaXRPcigpCiAgICAgewogICAg
ICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpIHsKLSNpZiBGVExf
VVNFU19CMwogICAgICAgICAgICAgZW1pdEJpbmFyeUJpdE9wU25pcHBldDxKSVRCaXRPckdlbmVy
YXRvcj4ob3BlcmF0aW9uVmFsdWVCaXRPcik7Ci0jZWxzZSAvLyBGVExfVVNFU19CMwotICAgICAg
ICAgICAgY29tcGlsZVVudHlwZWRCaW5hcnlPcDxCaXRPckRlc2NyaXB0b3I+KCk7Ci0jZW5kaWYg
Ly8gRlRMX1VTRVNfQjMKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBz
ZXRJbnQzMihtX291dC5iaXRPcihsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIo
bV9ub2RlLT5jaGlsZDIoKSkpKTsKQEAgLTIzOTYsMTEgKzE5ODYsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgY29tcGlsZUJpdFhvcigpCiAgICAgewogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFy
eVVzZUtpbmQoVW50eXBlZFVzZSkpIHsKLSNpZiBGVExfVVNFU19CMwogICAgICAgICAgICAgZW1p
dEJpbmFyeUJpdE9wU25pcHBldDxKSVRCaXRYb3JHZW5lcmF0b3I+KG9wZXJhdGlvblZhbHVlQml0
WG9yKTsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAgICAgICAgICBjb21waWxlVW50eXBlZEJp
bmFyeU9wPEJpdFhvckRlc2NyaXB0b3I+KCk7Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBzZXRJbnQzMihtX291dC5iaXRYb3Io
bG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7
CkBAIC0yNDA5LDExICsxOTk1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVCaXRSU2hp
ZnQoKQogICAgIHsKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFVudHlwZWRV
c2UpKSB7Ci0jaWYgRlRMX1VTRVNfQjMKICAgICAgICAgICAgIGVtaXRSaWdodFNoaWZ0U25pcHBl
dChKSVRSaWdodFNoaWZ0R2VuZXJhdG9yOjpTaWduZWRTaGlmdCk7Ci0jZWxzZSAvLyBGVExfVVNF
U19CMwotICAgICAgICAgICAgY29tcGlsZVVudHlwZWRCaW5hcnlPcDxCaXRSU2hpZnREZXNjcmlw
dG9yPigpOwotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgc2V0SW50MzIobV9vdXQuYVNocigKQEAgLTI0MjQsMTEgKzIwMDYsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZUJpdExTaGlmdCgpCiAgICAgewogICAgICAgICBp
ZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpIHsKLSNpZiBGVExfVVNFU19C
MwogICAgICAgICAgICAgZW1pdEJpbmFyeUJpdE9wU25pcHBldDxKSVRMZWZ0U2hpZnRHZW5lcmF0
b3I+KG9wZXJhdGlvblZhbHVlQml0TFNoaWZ0KTsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAg
ICAgICAgICBjb21waWxlVW50eXBlZEJpbmFyeU9wPEJpdExTaGlmdERlc2NyaXB0b3I+KCk7Ci0j
ZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICBzZXRJbnQzMihtX291dC5zaGwoCkBAIC0yNDM5LDExICsyMDE3LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGNvbXBpbGVCaXRVUlNoaWZ0KCkKICAgICB7CiAgICAgICAgIGlmIChtX25vZGUt
PmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkgewotI2lmIEZUTF9VU0VTX0IzCiAgICAgICAg
ICAgICBlbWl0UmlnaHRTaGlmdFNuaXBwZXQoSklUUmlnaHRTaGlmdEdlbmVyYXRvcjo6VW5zaWdu
ZWRTaGlmdCk7Ci0jZWxzZSAvLyBGVExfVVNFU19CMwotICAgICAgICAgICAgY29tcGlsZVVudHlw
ZWRCaW5hcnlPcDxCaXRVUlNoaWZ0RGVzY3JpcHRvcj4oKTsKLSNlbmRpZiAvLyBGVExfVVNFU19C
MwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHNldEludDMyKG1fb3V0
LmxTaHIoCkBAIC0yNjg3LDcgKzIyNjEsNiBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgdmFs
dWUgPSBsb3dKU1ZhbHVlKG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgYXV0byB1aWQgPSBtX2dy
YXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKIAotI2lmIEZUTF9V
U0VTX0IzCiAgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5w
YXRjaHBvaW50KFZvaWQpOwogICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIo
YmFzZSk7CiAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3Rlcih2YWx1ZSk7CkBA
IC0yNzQ1LDMyICsyMzE4LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKLSNlbHNlCi0g
ICAgICAgIC8vIEFyZ3VtZW50czogaWQsIGJ5dGVzLCB0YXJnZXQsIG51bUFyZ3MsIGFyZ3MuLi4K
LSAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKLQotICAgICAg
ICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgZGF0YUxvZygi
ICAgIEVtaXR0aW5nIFB1dEJ5SWQgcGF0Y2hwb2ludCB3aXRoIHN0YWNrbWFwICMiLCBzdGFja21h
cElELCAiXG4iKTsKLQotICAgICAgICBTdGFja21hcEFyZ3VtZW50TGlzdCBhcmd1bWVudHM7Ci0g
ICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoYmFzZSk7IAotICAgICAgICBhcmd1bWVudHMuYXBwZW5k
KHZhbHVlKTsKLQotICAgICAgICBhcHBlbmRPU1JFeGl0QXJndW1lbnRzRm9yUGF0Y2hwb2ludElm
V2lsbENhdGNoRXhjZXB0aW9uKGFyZ3VtZW50cywgRXhjZXB0aW9uVHlwZTo6UHV0QnlJZCwgMik7
IC8vIDIgYXJndW1lbnRzIHNob3cgdXAgaW4gdGhlIHN0YWNrbWFwIGxvY2F0aW9uczogdGhlIGJh
c2UgYW5kIHRoZSB2YWx1ZS4KLQotICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAsIG1fb3V0LmNv
bnN0SW50MzIoMikpOyAKLSAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBjb25zdE51bGwobV9v
dXQucmVmOCkpOyAKLSAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBtX291dC5jb25zdEludDMy
KHNpemVPZlB1dEJ5SWQoKSkpOwotICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAsIG1fb3V0LmNv
bnN0SW50NjQoc3RhY2ttYXBJRCkpOwotCi0gICAgICAgIExWYWx1ZSBjYWxsID0gbV9vdXQuY2Fs
bChtX291dC52b2lkVHlwZSwgbV9vdXQucGF0Y2hwb2ludFZvaWRJbnRyaW5zaWMoKSwgYXJndW1l
bnRzKTsKLSAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZN
QW55UmVnQ2FsbENvbnYpOwotICAgICAgICAKLSAgICAgICAgbV9mdGxTdGF0ZS5wdXRCeUlkcy5h
cHBlbmQoUHV0QnlJZERlc2NyaXB0b3IoCi0gICAgICAgICAgICBzdGFja21hcElELCBub2RlLT5v
cmlnaW4uc2VtYW50aWMsIHVpZCwKLSAgICAgICAgICAgIG1fZ3JhcGguZXhlY3V0YWJsZUZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpLT5lY21hTW9kZSgpLAotICAgICAgICAgICAgbm9kZS0+b3Ao
KSA9PSBQdXRCeUlkRGlyZWN0ID8gRGlyZWN0IDogTm90RGlyZWN0KSk7Ci0jZW5kaWYKICAgICB9
CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0QnV0dGVyZmx5KCkKQEAgLTQ0MDksMTcgKzM5NTYs
MTAgQEAgcHJpdmF0ZToKICAgICAgICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0LmxvYWQzMihraWRz
WzBdLCBtX2hlYXBzLkpTU3RyaW5nX2xlbmd0aCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPCBudW1LaWRzOyArK2kpIHsKICAgICAgICAgICAgIGZsYWdzID0gbV9vdXQuYml0QW5k
KGZsYWdzLCBtX291dC5sb2FkMzIoa2lkc1tpXSwgbV9oZWFwcy5KU1N0cmluZ19mbGFncykpOwot
I2lmIEZUTF9VU0VTX0IzCiAgICAgICAgICAgICBDaGVja1ZhbHVlKiBsZW5ndGhDaGVjayA9IG1f
b3V0LnNwZWN1bGF0ZUFkZCgKICAgICAgICAgICAgICAgICBsZW5ndGgsIG1fb3V0LmxvYWQzMihr
aWRzW2ldLCBtX2hlYXBzLkpTU3RyaW5nX2xlbmd0aCkpOwogICAgICAgICAgICAgYmxlc3NTcGVj
dWxhdGlvbihsZW5ndGhDaGVjaywgVW5jb3VudGFibGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9v
cmlnaW4pOwogICAgICAgICAgICAgbGVuZ3RoID0gbGVuZ3RoQ2hlY2s7Ci0jZWxzZSAvLyBGVExf
VVNFU19CMyAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIGxlbmd0aEFuZE92ZXJmbG93
ID0gbV9vdXQuYWRkV2l0aE92ZXJmbG93MzIoCi0gICAgICAgICAgICAgICAgbGVuZ3RoLCBtX291
dC5sb2FkMzIoa2lkc1tpXSwgbV9oZWFwcy5KU1N0cmluZ19sZW5ndGgpKTsKLSAgICAgICAgICAg
IHNwZWN1bGF0ZShVbmNvdW50YWJsZSwgbm9WYWx1ZSgpLCAwLCBtX291dC5leHRyYWN0VmFsdWUo
bGVuZ3RoQW5kT3ZlcmZsb3csIDEpKTsKLSAgICAgICAgICAgIGxlbmd0aCA9IG1fb3V0LmV4dHJh
Y3RWYWx1ZShsZW5ndGhBbmRPdmVyZmxvdywgMCk7Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAg
ICAgICAgfQogICAgICAgICBtX291dC5zdG9yZTMyKAogICAgICAgICAgICAgbV9vdXQuYml0QW5k
KG1fb3V0LmNvbnN0SW50MzIoSlNTdHJpbmc6OklzOEJpdCksIGZsYWdzKSwKQEAgLTUxNjksNyAr
NDcwOSw2IEBAIHByaXZhdGU6CiAKICAgICAgICAgTFZhbHVlIGpzQ2FsbGVlID0gbG93SlNWYWx1
ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKIAotI2lmIEZUTF9VU0VTX0IzCiAgICAg
ICAgIHVuc2lnbmVkIGZyYW1lU2l6ZSA9IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBu
dW1BcmdzOwogICAgICAgICB1bnNpZ25lZCBhbGlnbmVkRnJhbWVTaXplID0gV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIGZyYW1lU2l6ZSk7CiAKQEAg
LTUyNjMsMzggKzQ4MDIsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgfSk7CiAKICAgICAgICAg
c2V0SlNWYWx1ZShwYXRjaHBvaW50KTsKLSNlbHNlCi0gICAgICAgIHVuc2lnbmVkIHN0YWNrbWFw
SUQgPSBtX3N0YWNrbWFwSURzKys7Ci0KLSAgICAgICAgdW5zaWduZWQgZnJhbWVTaXplID0gSlNT
dGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIG51bUFyZ3M7Ci0gICAgICAgIHVuc2lnbmVkIGFs
aWduZWRGcmFtZVNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRS
ZWdpc3RlcnMoKSwgZnJhbWVTaXplKTsKLSAgICAgICAgdW5zaWduZWQgcGFkZGluZyA9IGFsaWdu
ZWRGcmFtZVNpemUgLSBmcmFtZVNpemU7Ci0gICAgICAgIC8vIERvY3VtZW50YXRpb24gYWJvdXQg
c3RhY2ttYXAgYW5kIHBhdGNocG9pbnQgaW50cmluc2ljczoKLSAgICAgICAgLy8gaHR0cDovL2xs
dm0ub3JnL2RvY3MvU3RhY2tNYXBzLmh0bWwKLSAgICAgICAgU3RhY2ttYXBBcmd1bWVudExpc3Qg
YXJndW1lbnRzOwotICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGpzQ2FsbGVlKTsgLy8gY2FsbGVl
IC0+ICVyYXgKLSAgICAgICAgYXJndW1lbnRzLmFwcGVuZChnZXRVbmRlZihtX291dC5pbnQ2NCkp
OyAvLyBjb2RlIGJsb2NrCi0gICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoanNDYWxsZWUpOyAvLyBj
YWxsZWUgLT4gc3RhY2sKLSAgICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDY0
KG51bUFyZ3MpKTsgLy8gYXJndW1lbnQgY291bnQgYW5kIHplcm9zIGZvciB0aGUgdGFnCi0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1BcmdzOyArK2kpCi0gICAgICAgICAgICBh
cmd1bWVudHMuYXBwZW5kKGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxICsg
aSkpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhZGRpbmc7ICsraSkKLSAg
ICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoZ2V0VW5kZWYobV9vdXQuaW50NjQpKTsKLQotICAg
ICAgICBhcHBlbmRPU1JFeGl0QXJndW1lbnRzRm9yUGF0Y2hwb2ludElmV2lsbENhdGNoRXhjZXB0
aW9uKGFyZ3VtZW50cywgRXhjZXB0aW9uVHlwZTo6SlNDYWxsLCAwKTsgLy8gTm8gY2FsbCBhcmd1
bWVudHMgc2hvdyB1cCBpbiB0aGUgc3RhY2ttYXAgbG9jYXRpb25zLgotCi0gICAgICAgIGFyZ3Vt
ZW50cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJbnQzMigxICsgYWxpZ25lZEZyYW1lU2l6ZSAtIEpT
U3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplKSk7Ci0gICAgICAgIGFyZ3VtZW50cy5pbnNlcnQo
MCwgY29uc3ROdWxsKG1fb3V0LnJlZjgpKTsKLSAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBt
X291dC5jb25zdEludDMyKHNpemVPZkNhbGwoKSkpOwotICAgICAgICBhcmd1bWVudHMuaW5zZXJ0
KDAsIG1fb3V0LmNvbnN0SW50NjQoc3RhY2ttYXBJRCkpOwotICAgICAgICAKLSAgICAgICAgTFZh
bHVlIGNhbGwgPSBtX291dC5jYWxsKG1fb3V0LmludDY0LCBtX291dC5wYXRjaHBvaW50SW50NjRJ
bnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKLSAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29u
dmVudGlvbihjYWxsLCBMTFZNV2ViS2l0SlNDYWxsQ29udik7Ci0gICAgICAgIAotICAgICAgICBt
X2Z0bFN0YXRlLmpzQ2FsbHMuYXBwZW5kKEpTQ2FsbChzdGFja21hcElELCBub2RlLCBjb2RlT3Jp
Z2luRGVzY3JpcHRpb25PZkNhbGxTaXRlKCkpKTsKLSAgICAgICAgCi0gICAgICAgIHNldEpTVmFs
dWUoY2FsbCk7Ci0jZW5kaWYKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVUYWlsQ2FsbCgpCkBA
IC01MzA0LDcgKzQ4MTEsNiBAQCBwcml2YXRlOgogCiAgICAgICAgIExWYWx1ZSBqc0NhbGxlZSA9
IGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CiAgICAgICAgIAotI2lm
IEZUTF9VU0VTX0IzCiAgICAgICAgIC8vIFdlIHdhbnQgQjMgdG8gZ2l2ZSB1cyBhbGwgb2YgdGhl
IGFyZ3VtZW50cyB1c2luZyB3aGF0ZXZlciBtZWNoYW5pc20gaXQgdGhpbmtzIGlzCiAgICAgICAg
IC8vIGNvbnZlbmllbnQuIFRoZSBnZW5lcmF0b3IgdGhlbiBzaHVmZmxlcyB0aG9zZSBhcmd1bWVu
dHMgaW50byBvdXIgb3duIGNhbGwgZnJhbWUsCiAgICAgICAgIC8vIGRlc3Ryb3lpbmcgb3VyIGZy
YW1lIGluIHRoZSBwcm9jZXNzLgpAQCAtNTM5NiwzNiArNDkwMiw2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoZmFz
dENhbGwpKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKLSNlbHNl
Ci0gICAgICAgIFN0YWNrbWFwQXJndW1lbnRMaXN0IGV4aXRBcmd1bWVudHM7Ci0gICAgICAgIGV4
aXRBcmd1bWVudHMucmVzZXJ2ZUNhcGFjaXR5KG51bUFyZ3MgKyA2KTsKLQotICAgICAgICB1bnNp
Z25lZCBzdGFja21hcElEID0gbV9zdGFja21hcElEcysrOwotICAgICAgICBleGl0QXJndW1lbnRz
LmFwcGVuZChqc0NhbGxlZSk7Ci0gICAgICAgIGV4aXRBcmd1bWVudHMuYXBwZW5kKG1fdGFnVHlw
ZU51bWJlcik7Ci0KLSAgICAgICAgVmVjdG9yPEV4aXRWYWx1ZT4gY2FsbEFyZ3VtZW50cyhudW1B
cmdzKTsKLQotICAgICAgICBib29sIG5lZWRzVGFnVHlwZU51bWJlciB7IGZhbHNlIH07Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1BcmdzOyArK2kpIHsKLSAgICAgICAgICAg
IGNhbGxBcmd1bWVudHNbaV0gPQotICAgICAgICAgICAgICAgIGV4aXRWYWx1ZUZvclRhaWxDYWxs
KGV4aXRBcmd1bWVudHMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSArIGkpLm5vZGUoKSk7
Ci0gICAgICAgICAgICBpZiAoY2FsbEFyZ3VtZW50c1tpXS5kYXRhRm9ybWF0KCkgPT0gRGF0YUZv
cm1hdEludDMyKQotICAgICAgICAgICAgICAgIG5lZWRzVGFnVHlwZU51bWJlciA9IHRydWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBKU1RhaWxDYWxsIHRhaWxDYWxsKHN0YWNrbWFwSUQsIG5vZGUs
IFdURk1vdmUoY2FsbEFyZ3VtZW50cykpOwotCi0gICAgICAgIGV4aXRBcmd1bWVudHMuaW5zZXJ0
KDAsIG1fb3V0LmNvbnN0SW50MzIobmVlZHNUYWdUeXBlTnVtYmVyID8gMiA6IDEpKTsKLSAgICAg
ICAgZXhpdEFyZ3VtZW50cy5pbnNlcnQoMCwgY29uc3ROdWxsKG1fb3V0LnJlZjgpKTsKLSAgICAg
ICAgZXhpdEFyZ3VtZW50cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJbnQzMih0YWlsQ2FsbC5lc3Rp
bWF0ZWRTaXplKCkpKTsKLSAgICAgICAgZXhpdEFyZ3VtZW50cy5pbnNlcnQoMCwgbV9vdXQuY29u
c3RJbnQ2NChzdGFja21hcElEKSk7Ci0KLSAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxs
KG1fb3V0LnZvaWRUeXBlLCBtX291dC5wYXRjaHBvaW50Vm9pZEludHJpbnNpYygpLCBleGl0QXJn
dW1lbnRzKTsKLSAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBM
TFZNQW55UmVnQ2FsbENvbnYpOwotCi0gICAgICAgIG1fZnRsU3RhdGUuanNUYWlsQ2FsbHMuYXBw
ZW5kKHRhaWxDYWxsKTsKLSNlbmRpZgogICAgICAgICAKICAgICAgICAgbV9vdXQudW5yZWFjaGFi
bGUoKTsKICAgICB9CkBAIC01NDU3LDcgKzQ5MzMsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0jaWYgRlRMX1VTRVNfQjMKICAgICAgICAgUGF0
Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7CiAKICAg
ICAgICAgLy8gQXBwZW5kIHRoZSBmb3JtcyBvZiB0aGUgYXJndW1lbnRzIHRoYXQgd2Ugd2lsbCB1
c2UgYmVmb3JlIGFueSBjbG9iYmVyaW5nIGhhcHBlbnMuCkBAIC01Njk5LDM5ICs1MTc0LDYgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIHNldEpTVmFsdWUocGF0Y2hwb2ludCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGZvcndhcmRp
bmcpOwotICAgICAgICB1bnNpZ25lZCBzdGFja21hcElEID0gbV9zdGFja21hcElEcysrOwotICAg
ICAgICAKLSAgICAgICAgU3RhY2ttYXBBcmd1bWVudExpc3QgYXJndW1lbnRzOwotICAgICAgICBh
cmd1bWVudHMuYXBwZW5kKGpzQ2FsbGVlKTsKLSAgICAgICAgaWYgKGpzQXJndW1lbnRzKQotICAg
ICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChqc0FyZ3VtZW50cyk7Ci0gICAgICAgIEFTU0VSVCh0
aGlzQXJnKTsKLSAgICAgICAgYXJndW1lbnRzLmFwcGVuZCh0aGlzQXJnKTsKLQotICAgICAgICBh
cHBlbmRPU1JFeGl0QXJndW1lbnRzRm9yUGF0Y2hwb2ludElmV2lsbENhdGNoRXhjZXB0aW9uKGFy
Z3VtZW50cywgRXhjZXB0aW9uVHlwZTo6SlNDYWxsLCAwKTsgLy8gTm8gY2FsbCBhcmd1bWVudHMg
c2hvdyB1cCBpbiBzdGFja21hcCBsb2NhdGlvbnMuCi0KLSAgICAgICAgYXJndW1lbnRzLmluc2Vy
dCgwLCBtX291dC5jb25zdEludDMyKDIgKyAhIWpzQXJndW1lbnRzKSk7Ci0gICAgICAgIGFyZ3Vt
ZW50cy5pbnNlcnQoMCwgY29uc3ROdWxsKG1fb3V0LnJlZjgpKTsKLSAgICAgICAgYXJndW1lbnRz
Lmluc2VydCgwLCBtX291dC5jb25zdEludDMyKHNpemVPZklDRm9yKG5vZGUpKSk7Ci0gICAgICAg
IGFyZ3VtZW50cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJbnQ2NChzdGFja21hcElEKSk7Ci0gICAg
ICAgIAotICAgICAgICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwobV9vdXQuaW50NjQsIG1fb3V0
LnBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygpLCBhcmd1bWVudHMpOwotICAgICAgICBzZXRJbnN0
cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1DQ2FsbENvbnYpOwotICAgICAgICAK
LSAgICAgICAgbV9mdGxTdGF0ZS5qc0NhbGxWYXJhcmdzZXMuYXBwZW5kKEpTQ2FsbFZhcmFyZ3Mo
c3RhY2ttYXBJRCwgbm9kZSwgY29kZU9yaWdpbkRlc2NyaXB0aW9uT2ZDYWxsU2l0ZSgpKSk7Ci0K
LSAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgIGNhc2UgVGFpbENhbGxWYXJh
cmdzOgotICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgICAgICBt
X291dC51bnJlYWNoYWJsZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIHNldEpTVmFsdWUoY2FsbCk7Ci0gICAgICAgIH0KLSNlbmRpZgogICAg
IH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncygpCkBAIC02MDkzLDcgKzU1MzUs
NiBAQCBwcml2YXRlOgogCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtX29y
aWdpbi5leGl0T0spOwogICAgICAgICAKLSNpZiBGVExfVVNFU19CMwogICAgICAgICBQYXRjaHBv
aW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBvaW50KFZvaWQpOwogICAgICAgICBP
U1JFeGl0RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IGFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKG5v
VmFsdWUoKSwgbnVsbHB0cik7CiAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbV9vcmlnaW47
CkBAIC02MTQwLDE1ICs1NTgxLDYgQEAgcHJpdmF0ZToKIAogICAgICAgICAvLyBXaGVuIHRoaXMg
YWJydXB0bHkgdGVybWluYXRlcywgaXQgY291bGQgcmVhZCBhbnkgaGVhcCBsb2NhdGlvbi4KICAg
ICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkcyA9IEhlYXBSYW5nZTo6dG9wKCk7Ci0jZWxz
ZSAvLyBGVExfVVNFU19CMwotCi0gICAgICAgIE9TUkV4aXREZXNjcmlwdG9yKiBleGl0RGVzY3Jp
cHRvciA9IGFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKFVuY291bnRhYmxlSW52YWxpZGF0aW9uLCBF
eGNlcHRpb25UeXBlOjpOb25lLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2luKTsKLSAgICAg
ICAgCi0gICAgICAgIFN0YWNrbWFwQXJndW1lbnRMaXN0IGFyZ3VtZW50cyA9IGJ1aWxkRXhpdEFy
Z3VtZW50cyhleGl0RGVzY3JpcHRvciwgbV9mdGxTdGF0ZS5vc3JFeGl0RGVzY3JpcHRvckltcGxz
Lmxhc3QoKS5tX2NvZGVPcmlnaW4sIEZvcm1hdHRlZFZhbHVlKCkpOwotICAgICAgICBjYWxsU3Rh
Y2ttYXAoZXhpdERlc2NyaXB0b3IsIGFyZ3VtZW50cyk7Ci0gICAgICAgIAotICAgICAgICBleGl0
RGVzY3JpcHRvci0+bV9pc0ludmFsaWRhdGlvblBvaW50ID0gdHJ1ZTsKLSNlbmRpZiAvLyBGVExf
VVNFU19CMwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVJc1VuZGVmaW5lZCgpCkBAIC02
MzMzLDcgKzU3NjUsNiBAQCBwcml2YXRlOgogICAgICAgICBpZiAoSlNTdHJpbmcqIHN0cmluZyA9
IG5vZGUtPmNoaWxkMSgpLT5keW5hbWljQ2FzdENvbnN0YW50PEpTU3RyaW5nKj4oKSkgewogICAg
ICAgICAgICAgaWYgKHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCkgJiYgc3RyaW5nLT50cnlHZXRW
YWx1ZUltcGwoKS0+aXNBdG9taWMoKSkgewogICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiBzdHIgPSBiaXR3aXNlX2Nhc3Q8VW5pcXVlZFN0cmluZ0ltcGwqPihzdHJpbmctPnRyeUdl
dFZhbHVlSW1wbCgpKTsKLSNpZiBGVExfVVNFU19CMwogICAgICAgICAgICAgICAgIEIzOjpQYXRj
aHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBvaW50KEludDY0KTsKICAgICAg
ICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIoY2VsbCk7CiAgICAgICAg
ICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVn
aXN0ZXJzKCkpOwpAQCAtNjM5MywxOSArNTgyNCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgIH0pOwogCiAgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50KTsKLSNl
bHNlIC8vIEZUTF9VU0VTX0IzCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCA9
IG1fc3RhY2ttYXBJRHMrKzsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIExWYWx1ZSBj
YWxsID0gbV9vdXQuY2FsbCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0
LnBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygpLAotICAgICAgICAgICAgICAgICAgICBtX291dC5j
b25zdEludDY0KHN0YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKHNpemVPZkluKCkpLAotICAg
ICAgICAgICAgICAgICAgICBjb25zdE51bGwobV9vdXQucmVmOCksIG1fb3V0LmNvbnN0SW50MzIo
MSksIGNlbGwpOwotCi0gICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVu
dGlvbihjYWxsLCBMTFZNQW55UmVnQ2FsbENvbnYpOwotCi0gICAgICAgICAgICAgICAgbV9mdGxT
dGF0ZS5jaGVja0lucy5hcHBlbmQoQ2hlY2tJbkRlc2NyaXB0b3Ioc3RhY2ttYXBJRCwgbm9kZS0+
b3JpZ2luLnNlbWFudGljLCBzdHIpKTsKLSAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKGNhbGwp
OwotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQogICAgICAgICB9IApAQCAtNzQxMyw3ICs2ODMxLDYgQEAgcHJpdmF0ZToKICAgICAg
ICAgTm9kZSogbm9kZSA9IG1fbm9kZTsKICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9
IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldOwogCi0jaWYg
RlRMX1VTRVNfQjMKICAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1f
b3V0LnBhdGNocG9pbnQoSW50NjQpOwogICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVn
aXN0ZXIoYmFzZSk7CiAKQEAgLTc0NzUsMzAgKzY4OTIsNiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgfSk7CiAKICAgICAgICAgcmV0dXJuIHBhdGNocG9pbnQ7Ci0jZWxzZQotICAgICAgICAvLyBB
cmd1bWVudHM6IGlkLCBieXRlcywgdGFyZ2V0LCBudW1BcmdzLCBhcmdzLi4uCi0gICAgICAgIHVu
c2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCIg
ICAgRW1pdHRpbmcgR2V0QnlJZCBwYXRjaHBvaW50IHdpdGggc3RhY2ttYXAgIyIsIHN0YWNrbWFw
SUQsICJcbiIpOwotICAgICAgICAKLSAgICAgICAgU3RhY2ttYXBBcmd1bWVudExpc3QgYXJndW1l
bnRzOwotICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGJhc2UpOwotCi0gICAgICAgIGFwcGVuZE9T
UkV4aXRBcmd1bWVudHNGb3JQYXRjaHBvaW50SWZXaWxsQ2F0Y2hFeGNlcHRpb24oYXJndW1lbnRz
LCBFeGNlcHRpb25UeXBlOjpHZXRCeUlkLCAyKTsgLy8gMiBhcmd1bWVudHMgc2hvdyB1cCBpbiB0
aGUgc3RhY2ttYXAgbG9jYXRpb25zOiB0aGUgcmVzdWx0IGFuZCB0aGUgYmFzZS4KLQotICAgICAg
ICBhcmd1bWVudHMuaW5zZXJ0KDAsIG1fb3V0LmNvbnN0SW50MzIoMSkpOyAKLSAgICAgICAgYXJn
dW1lbnRzLmluc2VydCgwLCBjb25zdE51bGwobV9vdXQucmVmOCkpOwotICAgICAgICBhcmd1bWVu
dHMuaW5zZXJ0KDAsIG1fb3V0LmNvbnN0SW50MzIoc2l6ZU9mR2V0QnlJZCgpKSk7Ci0gICAgICAg
IGFyZ3VtZW50cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJbnQ2NChzdGFja21hcElEKSk7IAotCi0g
ICAgICAgIExWYWx1ZSBjYWxsID0gbV9vdXQuY2FsbChtX291dC5pbnQ2NCwgbV9vdXQucGF0Y2hw
b2ludEludDY0SW50cmluc2ljKCksIGFyZ3VtZW50cyk7Ci0gICAgICAgIHNldEluc3RydWN0aW9u
Q2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUFueVJlZ0NhbGxDb252KTsKLSAgICAgICAgCi0g
ICAgICAgIG1fZnRsU3RhdGUuZ2V0QnlJZHMuYXBwZW5kKEdldEJ5SWREZXNjcmlwdG9yKHN0YWNr
bWFwSUQsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgdWlkKSk7Ci0gICAgICAgIAotICAgICAgICBy
ZXR1cm4gY2FsbDsKLSNlbmRpZgogICAgIH0KIAogICAgIExWYWx1ZSBsb2FkQnV0dGVyZmx5V2l0
aEJhcnJpZXIoTFZhbHVlIG9iamVjdCkKQEAgLTc4MjgsNyArNzIyMSw2IEBAIHByaXZhdGU6CiAg
ICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuYm9vbGVhbiwgdHJ1ZVJlc3VsdCwgZmFsc2VS
ZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgIH0KIAotI2lmIEZUTF9VU0VTX0IzCiAgICAgZW51bSBT
Y3JhdGNoRlBSVXNhZ2UgewogICAgICAgICBEb250TmVlZFNjcmF0Y2hGUFIsCiAgICAgICAgIE5l
ZWRTY3JhdGNoRlBSCkBAIC04MDEzLDcgKzc0MDUsNiBAQCBwcml2YXRlOgogCiAgICAgICAgIHNl
dEpTVmFsdWUocGF0Y2hwb2ludCk7CiAgICAgfQotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAKICAg
ICBMVmFsdWUgYWxsb2NhdGVDZWxsKExWYWx1ZSBhbGxvY2F0b3IsIExCYXNpY0Jsb2NrIHNsb3dQ
YXRoKQogICAgIHsKQEAgLTkxMzUsNyArODUyNiw2IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KICAgICBMVmFsdWUgbGF6eVNsb3dQYXRoKGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IsIGNvbnN0IFZlY3RvcjxMVmFsdWU+JiB1c2VyQXJndW1lbnRzKQogICAgIHsKLSNp
ZiBGVExfVVNFU19CMwogICAgICAgICBDb2RlT3JpZ2luIG9yaWdpbiA9IG1fbm9kZS0+b3JpZ2lu
LnNlbWFudGljOwogICAgICAgICAKICAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiByZXN1bHQgPSBt
X291dC5wYXRjaHBvaW50KEIzOjpJbnQ2NCk7CkBAIC05MjA5LDI4ICs4NTk5LDYgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSNlbHNlCi0gICAgICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNr
bWFwSURzKys7Ci0KLSAgICAgICAgU3RhY2ttYXBBcmd1bWVudExpc3QgYXJndW1lbnRzOwotICAg
ICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50NjQoc3RhY2ttYXBJRCkpOwotICAg
ICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50MzIoTWFjcm9Bc3NlbWJsZXI6Om1h
eEp1bXBSZXBsYWNlbWVudFNpemUoKSkpOwotICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGNvbnN0
TnVsbChtX291dC5yZWY4KSk7Ci0gICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJ
bnQzMih1c2VyQXJndW1lbnRzLnNpemUoKSkpOwotICAgICAgICBhcmd1bWVudHMuYXBwZW5kVmVj
dG9yKHVzZXJBcmd1bWVudHMpOwotCi0gICAgICAgIGFwcGVuZE9TUkV4aXRBcmd1bWVudHNGb3JQ
YXRjaHBvaW50SWZXaWxsQ2F0Y2hFeGNlcHRpb24oYXJndW1lbnRzLCBFeGNlcHRpb25UeXBlOjpM
YXp5U2xvd1BhdGgsIHVzZXJBcmd1bWVudHMuc2l6ZSgpICsgMSk7IC8vIEFsbCB0aGUgYXJndW1l
bnRzIHBsdXMgdGhlIHJlc3VsdCBzaG93IHVwIGluIHRoZSBzdGFja21hcCBsb2NhdGlvbnMuCi0K
LSAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKG1fb3V0LmludDY0LCBtX291dC5wYXRj
aHBvaW50SW50NjRJbnRyaW5zaWMoKSwgYXJndW1lbnRzKTsKLSAgICAgICAgc2V0SW5zdHJ1Y3Rp
b25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNQW55UmVnQ2FsbENvbnYpOwotICAgICAgICAK
LSAgICAgICAgUmVmUHRyPExhenlTbG93UGF0aExpbmtlclRhc2s+IGxpbmtlciA9Ci0gICAgICAg
ICAgICBjcmVhdGVTaGFyZWRUYXNrPExhenlTbG93UGF0aExpbmtlckZ1bmN0aW9uPihmdW5jdG9y
KTsKLQotICAgICAgICBtX2Z0bFN0YXRlLmxhenlTbG93UGF0aHMuYXBwZW5kKExhenlTbG93UGF0
aERlc2NyaXB0b3Ioc3RhY2ttYXBJRCwgbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMsIGxpbmtlcikp
OwotCi0gICAgICAgIHJldHVybiBjYWxsOwotI2VuZGlmCiAgICAgfQogICAgIAogICAgIHZvaWQg
c3BlY3VsYXRlKApAQCAtMTA0NjgsNyArOTgzNiw2IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbik7CiAgICAgfQogCi0jaWYgRlRMX1VTRVNfQjMKICAgICBS
ZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNl
cHRpb25zKFBhdGNocG9pbnRWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBDb2RlT3JpZ2lu
IG9wQ2F0Y2hPcmlnaW47CkBAIC0xMDUwNCw1MCArOTg3MSwxMiBAQCBwcml2YXRlOgogICAgICAg
ICByZXR1cm4gUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6Y3JlYXRlKAogICAgICAgICAgICAg
bV9mdGxTdGF0ZSwgZXhpdERlc2NyaXB0b3IsIG9yaWdpbiwgb2Zmc2V0LCAqZXhjZXB0aW9uSGFu
ZGxlcik7CiAgICAgfQotI2Vsc2UgLy8gRlRMX1VTRVNfQjMKLSAgICB2b2lkIGFwcGVuZE9TUkV4
aXRBcmd1bWVudHNGb3JQYXRjaHBvaW50SWZXaWxsQ2F0Y2hFeGNlcHRpb24oU3RhY2ttYXBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgRXhjZXB0aW9uVHlwZSBleGNlcHRpb25UeXBlLCB1bnNpZ25l
ZCBvZmZzZXRPZkV4aXRBcmd1bWVudHMpCi0gICAgewotICAgICAgICBDb2RlT3JpZ2luIG9wQ2F0
Y2hPcmlnaW47Ci0gICAgICAgIEhhbmRsZXJJbmZvKiBleGNlcHRpb25IYW5kbGVyOwotICAgICAg
ICBib29sIHdpbGxDYXRjaEV4Y2VwdGlvbiA9IG1fZ3JhcGgud2lsbENhdGNoRXhjZXB0aW9uSW5N
YWNoaW5lRnJhbWUobV9vcmlnaW4uZm9yRXhpdCwgb3BDYXRjaE9yaWdpbiwgZXhjZXB0aW9uSGFu
ZGxlcik7Ci0gICAgICAgIGlmICghd2lsbENhdGNoRXhjZXB0aW9uKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIEV4aXRLaW5kIGV4aXRLaW5kOwotICAgICAgICBzd2l0Y2ggKGV4Y2Vw
dGlvblR5cGUpIHsKLSAgICAgICAgY2FzZSBFeGNlcHRpb25UeXBlOjpKU0NhbGw6Ci0gICAgICAg
IGNhc2UgRXhjZXB0aW9uVHlwZTo6R2V0QnlJZDoKLSAgICAgICAgY2FzZSBFeGNlcHRpb25UeXBl
OjpQdXRCeUlkOgotICAgICAgICAgICAgZXhpdEtpbmQgPSBHZW5lcmljVW53aW5kOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRXhjZXB0aW9uVHlwZTo6TGF6eVNsb3dQYXRoOgot
ICAgICAgICBjYXNlIEV4Y2VwdGlvblR5cGU6OkJpbmFyeU9wR2VuZXJhdG9yOgotICAgICAgICAg
ICAgZXhpdEtpbmQgPSBFeGNlcHRpb25DaGVjazsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKGV4aXRLaW5kLCBleGNl
cHRpb25UeXBlLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2luLndpdGhGb3JFeGl0QW5kRXhp
dE9LKG9wQ2F0Y2hPcmlnaW4sIHRydWUpKTsKLSAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4
aXREZXNjcmlwdG9yID0gJm1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdERlc2NyaXB0b3JzLmxh
c3QoKTsKLSAgICAgICAgZXhpdERlc2NyaXB0b3ItPm1fc3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJ
RHMgLSAxOwotCi0gICAgICAgIE9TUkV4aXREZXNjcmlwdG9ySW1wbCYgZXhpdERlc2NyaXB0b3JJ
bXBsID0gbV9mdGxTdGF0ZS5vc3JFeGl0RGVzY3JpcHRvckltcGxzLmxhc3QoKTsKLSAgICAgICAg
ZXhpdERlc2NyaXB0b3JJbXBsLm1fc2VtYW50aWNDb2RlT3JpZ2luRm9yQ2FsbEZyYW1lSGVhZGVy
ID0gY29kZU9yaWdpbkRlc2NyaXB0aW9uT2ZDYWxsU2l0ZSgpOwotICAgICAgICBleGl0RGVzY3Jp
cHRvckltcGwubV9iYXNlbGluZUV4Y2VwdGlvbkhhbmRsZXIgPSAqZXhjZXB0aW9uSGFuZGxlcjsK
LQotICAgICAgICBTdGFja21hcEFyZ3VtZW50TGlzdCBmcmVzaExpc3QgPQotICAgICAgICAgICAg
YnVpbGRFeGl0QXJndW1lbnRzKGV4aXREZXNjcmlwdG9yLCBleGl0RGVzY3JpcHRvckltcGwubV9j
b2RlT3JpZ2luLCBub1ZhbHVlKCksIG9mZnNldE9mRXhpdEFyZ3VtZW50cyk7Ci0gICAgICAgIGFy
Z3VtZW50cy5hcHBlbmRWZWN0b3IoZnJlc2hMaXN0KTsKLSAgICB9Ci0jZW5kaWYgLy8gRlRMX1VT
RVNfQjMKIAogICAgIExCYXNpY0Jsb2NrIGxvd0Jsb2NrKERGRzo6QmFzaWNCbG9jayogYmxvY2sp
CiAgICAgewogICAgICAgICByZXR1cm4gbV9ibG9ja3MuZ2V0KGJsb2NrKTsKICAgICB9CiAKLSNp
ZiBGVExfVVNFU19CMwogICAgIE9TUkV4aXREZXNjcmlwdG9yKiBhcHBlbmRPU1JFeGl0RGVzY3Jp
cHRvcihGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlKQogICAgIHsKICAg
ICAgICAgcmV0dXJuICZtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXREZXNjcmlwdG9ycy5hbGxv
YygKQEAgLTEwNTU1LDE4ICs5ODg0LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGF2YWlsYWJp
bGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksCiAgICAgICAgICAgICBhdmFp
bGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpKTsKICAgICB9Ci0jZWxzZSAv
LyBGVExfVVNFU19CMwotICAgIE9TUkV4aXREZXNjcmlwdG9yKiBhcHBlbmRPU1JFeGl0RGVzY3Jp
cHRvcihFeGl0S2luZCBraW5kLCBFeGNlcHRpb25UeXBlIGV4Y2VwdGlvblR5cGUsIEZvcm1hdHRl
ZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIE5vZGVPcmlnaW4gb3JpZ2luKQotICAg
IHsKLSAgICAgICAgT1NSRXhpdERlc2NyaXB0b3ImIHJlc3VsdCA9IG1fZnRsU3RhdGUuaml0Q29k
ZS0+b3NyRXhpdERlc2NyaXB0b3JzLmFsbG9jKAotICAgICAgICAgICAgbG93VmFsdWUuZm9ybWF0
KCksIG1fZ3JhcGgubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihoaWdoVmFsdWUpLAot
ICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMo
KSwKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9jYWxz
KCkpOwotICAgICAgICBtX2Z0bFN0YXRlLm9zckV4aXREZXNjcmlwdG9ySW1wbHMuYWxsb2MoCi0g
ICAgICAgICAgICBraW5kLCBvcmlnaW4uZm9yRXhpdCwgb3JpZ2luLnNlbWFudGljLCBleGNlcHRp
b25UeXBlKTsKLSAgICAgICAgcmV0dXJuICZyZXN1bHQ7Ci0gICAgfQotI2VuZGlmIC8vIEZUTF9V
U0VTX0IzCiAgICAgCiAgICAgdm9pZCBhcHBlbmRPU1JFeGl0KAogICAgICAgICBFeGl0S2luZCBr
aW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFp
bENvbmRpdGlvbiwgCkBAIC0xMDYwMiwzNiArOTkxOSwxMCBAQCBwcml2YXRlOgogICAgICAgICBp
ZiAoZmFpbENvbmRpdGlvbiA9PSBtX291dC5ib29sZWFuRmFsc2UpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSNpZiBGVExfVVNFU19CMwogICAgICAgICBibGVzc1NwZWN1bGF0aW9uKAogICAgICAg
ICAgICAgbV9vdXQuc3BlY3VsYXRlKGZhaWxDb25kaXRpb24pLCBraW5kLCBsb3dWYWx1ZSwgaGln
aFZhbHVlLCBvcmlnaW4pOwotI2Vsc2UgLy8gRlRMX1VTRVNfQjMKLSAgICAgICAgT1NSRXhpdERl
c2NyaXB0b3IqIGV4aXREZXNjcmlwdG9yID0gYXBwZW5kT1NSRXhpdERlc2NyaXB0b3Ioa2luZCwg
aXNFeGNlcHRpb25IYW5kbGVyID8gRXhjZXB0aW9uVHlwZTo6Q0NhbGxFeGNlcHRpb24gOiBFeGNl
cHRpb25UeXBlOjpOb25lLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCBvcmlnaW4pOwotCi0gICAgICAg
IGlmIChmYWlsQ29uZGl0aW9uID09IG1fb3V0LmJvb2xlYW5UcnVlKSB7Ci0gICAgICAgICAgICBl
bWl0T1NSRXhpdENhbGwoZXhpdERlc2NyaXB0b3IsIGxvd1ZhbHVlKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbnVsbHB0
cjsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbnVsbHB0cjsKLSAgICAgICAg
Ci0gICAgICAgIExCYXNpY0Jsb2NrIGZhaWxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJP
U1IgZXhpdCBmYWlsQ2FzZSBmb3IgIiwgbV9ub2RlKSk7Ci0gICAgICAgIGNvbnRpbnVhdGlvbiA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiT1NSIGV4aXQgY29udGludWF0aW9uIGZvciAiLCBtX25v
ZGUpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmJyYW5jaChmYWlsQ29uZGl0aW9uLCByYXJl
bHkoZmFpbENhc2UpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbikpOwotICAgICAgICAKLSAgICAgICAg
bGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhmYWlsQ2FzZSwgY29udGludWF0aW9uKTsKLSAgICAg
ICAgCi0gICAgICAgIGVtaXRPU1JFeGl0Q2FsbChleGl0RGVzY3JpcHRvciwgbG93VmFsdWUpOwot
ICAgICAgICAKLSAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKLSAgICAgICAgCi0gICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotI2VuZGlmIC8vIEZUTF9V
U0VTX0IzCiAgICAgfQogCi0jaWYgRlRMX1VTRVNfQjMKICAgICB2b2lkIGJsZXNzU3BlY3VsYXRp
b24oQ2hlY2tWYWx1ZSogdmFsdWUsIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1Zh
bHVlLCBOb2RlKiBoaWdoVmFsdWUsIE5vZGVPcmlnaW4gb3JpZ2luKQogICAgIHsKICAgICAgICAg
T1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNjcmlwdG9yID0gYXBwZW5kT1NSRXhpdERlc2NyaXB0
b3IobG93VmFsdWUsIGhpZ2hWYWx1ZSk7CkBAIC0xMDY0NSwxNCArOTkzNiw2IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwga2luZCwgb3JpZ2luLCBqaXQsIHBhcmFtcywg
MCk7CiAgICAgICAgICAgICB9KTsKICAgICB9Ci0jZW5kaWYKLQotI2lmICFGVExfVVNFU19CMwot
ICAgIHZvaWQgZW1pdE9TUkV4aXRDYWxsKE9TUkV4aXREZXNjcmlwdG9yKiBleGl0RGVzY3JpcHRv
ciwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUpCi0gICAgewotICAgICAgICBjYWxsU3RhY2ttYXAo
ZXhpdERlc2NyaXB0b3IsIGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0RGVzY3JpcHRvciwgbV9mdGxT
dGF0ZS5vc3JFeGl0RGVzY3JpcHRvckltcGxzLmxhc3QoKS5tX2NvZGVPcmlnaW4sIGxvd1ZhbHVl
KSk7Ci0gICAgfQotI2VuZGlmCiAKICAgICBTdGFja21hcEFyZ3VtZW50TGlzdCBidWlsZEV4aXRB
cmd1bWVudHMoCiAgICAgICAgIE9TUkV4aXREZXNjcmlwdG9yKiBleGl0RGVzY3JpcHRvciwgQ29k
ZU9yaWdpbiBleGl0T3JpZ2luLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwKQEAgLTEwNzI4LDE3
ICsxMDAxMSw2IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKLSNpZiAhRlRMX1VTRVNf
QjMKLSAgICB2b2lkIGNhbGxTdGFja21hcChPU1JFeGl0RGVzY3JpcHRvciogZXhpdERlc2NyaXB0
b3IsIFN0YWNrbWFwQXJndW1lbnRMaXN0IGFyZ3VtZW50cykKLSAgICB7Ci0gICAgICAgIGV4aXRE
ZXNjcmlwdG9yLT5tX3N0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7Ci0gICAgICAgIGFyZ3Vt
ZW50cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJbnQzMihNYWNyb0Fzc2VtYmxlcjo6bWF4SnVtcFJl
cGxhY2VtZW50U2l6ZSgpKSk7Ci0gICAgICAgIGFyZ3VtZW50cy5pbnNlcnQoMCwgbV9vdXQuY29u
c3RJbnQ2NChleGl0RGVzY3JpcHRvci0+bV9zdGFja21hcElEKSk7Ci0gICAgICAgIAotICAgICAg
ICBtX291dC5jYWxsKG1fb3V0LnZvaWRUeXBlLCBtX291dC5zdGFja21hcEludHJpbnNpYygpLCBh
cmd1bWVudHMpOwotICAgIH0KLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKLSAgICAKICAgICBFeGl0
VmFsdWUgZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KAogICAgICAgICBTdGFja21hcEFyZ3VtZW50
TGlzdCYgYXJndW1lbnRzLCBjb25zdCBIYXNoTWFwPE5vZGUqLCBFeGl0VGltZU9iamVjdE1hdGVy
aWFsaXphdGlvbio+JiBtYXAsCiAgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkpCkBA
IC0xMDgyOSwxNSArMTAxMDEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIGV4aXRB
cmd1bWVudChhcmd1bWVudHMsIERhdGFGb3JtYXRTdHJpY3RJbnQ1MiwgdmFsdWUudmFsdWUoKSk7
CiAgICAgICAgIAogICAgICAgICB2YWx1ZSA9IG1fYm9vbGVhblZhbHVlcy5nZXQobm9kZSk7Ci0j
aWYgRlRMX1VTRVNfQjMKICAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQogICAgICAgICAgICAg
cmV0dXJuIGV4aXRBcmd1bWVudChhcmd1bWVudHMsIERhdGFGb3JtYXRCb29sZWFuLCB2YWx1ZS52
YWx1ZSgpKTsKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAgICAgIGlmIChpc1ZhbGlkKHZhbHVl
KSkgewotICAgICAgICAgICAgTFZhbHVlIHZhbHVlVG9QYXNzID0gbV9vdXQuemVyb0V4dCh2YWx1
ZS52YWx1ZSgpLCBtX291dC5pbnQzMik7Ci0gICAgICAgICAgICByZXR1cm4gZXhpdEFyZ3VtZW50
KGFyZ3VtZW50cywgRGF0YUZvcm1hdEJvb2xlYW4sIHZhbHVlVG9QYXNzKTsKLSAgICAgICAgfQot
I2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgICAgIAogICAgICAgICB2YWx1ZSA9IG1fanNWYWx1
ZVZhbHVlcy5nZXQobm9kZSk7CiAgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKQEAgLTExMTA3
LDEzICsxMDM3Miw3IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKE1BU01fUFJPQkUpCiAgICAgdm9p
ZCBwcm9iZShzdGQ6OmZ1bmN0aW9uPHZvaWQgKENDYWxsSGVscGVyczo6UHJvYmVDb250ZXh0Kik+
IHByb2JlRnVuYykKICAgICB7Ci0jaWYgRlRMX1VTRVNfQjMKICAgICAgICAgVU5VU0VEX1BBUkFN
KHByb2JlRnVuYyk7Ci0jZWxzZSAvLyAhRlRMX1VTRVNfQjMKLSAgICAgICAgdWludDMyX3Qgc3Rh
Y2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKLSAgICAgICAgbV9mdGxTdGF0ZS5wcm9iZXMuYXBw
ZW5kKFByb2JlRGVzY3JpcHRvcihzdGFja21hcElELCBwcm9iZUZ1bmMpKTsKLSAgICAgICAgbV9v
dXQuY2FsbChtX291dC52b2lkVHlwZSwgbV9vdXQuc3RhY2ttYXBJbnRyaW5zaWMoKSwgbV9vdXQu
Y29uc3RJbnQ2NChzdGFja21hcElEKSwgbV9vdXQuY29uc3RJbnQzMihzaXplT2ZQcm9iZSgpKSk7
Ci0jZW5kaWYgLy8gIUZUTF9VU0VTX0IzCiAgICAgfQogI2VuZGlmCiAKQEAgLTExMTMwLDE1ICsx
MDM4OSw3IEBAIHByaXZhdGU6CiAjZWxzZQogICAgICAgICBtX291dC5jYWxsKAogICAgICAgICAg
ICAgbV9vdXQudm9pZFR5cGUsCi0jaWYgRlRMX1VTRVNfQjMKICAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50UHRyKGZ0bFVucmVhY2hhYmxlKSwKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAgICAg
ICAgICBtX291dC5pbnRUb1B0cigKLSAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihm
dGxVbnJlYWNoYWJsZSksCi0gICAgICAgICAgICAgICAgcG9pbnRlclR5cGUoCi0gICAgICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uVHlwZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LnZv
aWRUeXBlLCBtX291dC5pbnRQdHIsIG1fb3V0LmludDMyLCBtX291dC5pbnQzMikpKSwKLSNlbmRp
ZiAvLyBGVExfVVNFU19CMwogICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoY29kZUJsb2Nr
KCkpLCBtX291dC5jb25zdEludDMyKGJsb2NrSW5kZXgpLAogICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnQzMihub2RlSW5kZXgpKTsKICNlbmRpZgpAQCAtMTExNTQsOSArMTA0MDUsNyBAQCBwcml2
YXRlOgogICAgIFN0YXRlJiBtX2Z0bFN0YXRlOwogICAgIEFic3RyYWN0SGVhcFJlcG9zaXRvcnkg
bV9oZWFwczsKICAgICBPdXRwdXQgbV9vdXQ7Ci0jaWYgRlRMX1VTRVNfQjMKICAgICBQcm9jZWR1
cmUmIG1fcHJvYzsKLSNlbmRpZgogICAgIAogICAgIExCYXNpY0Jsb2NrIG1fcHJvbG9ndWU7CiAg
ICAgTEJhc2ljQmxvY2sgbV9oYW5kbGVFeGNlcHRpb25zOwpAQCAtMTExOTUsMTIgKzEwNDQ0LDYg
QEAgcHJpdmF0ZToKICAgICBOb2RlT3JpZ2luIG1fb3JpZ2luOwogICAgIHVuc2lnbmVkIG1fbm9k
ZUluZGV4OwogICAgIE5vZGUqIG1fbm9kZTsKLSAgICAKLSAgICB1aW50MzJfdCBtX3N0YWNrbWFw
SURzOwotI2lmICFGVExfVVNFU19CMwotICAgIHVuc2lnbmVkIG1fdGJhYUtpbmQ7Ci0gICAgdW5z
aWduZWQgbV90YmFhU3RydWN0S2luZDsKLSNlbmRpZgogfTsKIAogfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAJKHJl
dmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDYgQEAgT1NSRXhpdERlc2NyaXB0b3I6Ok9T
UkV4aXREZXNjcmlwdG9yKAogICAgIDogbV9wcm9maWxlRGF0YUZvcm1hdChwcm9maWxlRGF0YUZv
cm1hdCkKICAgICAsIG1fdmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZSkKICAgICAsIG1fdmFsdWVz
KG51bWJlck9mQXJndW1lbnRzLCBudW1iZXJPZkxvY2FscykKLSNpZiAhRlRMX1VTRVNfQjMKLSAg
ICAsIG1faXNJbnZhbGlkYXRpb25Qb2ludChmYWxzZSkKLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMK
IHsKIH0KIApAQCAtNjYsNyArNjMsNiBAQCB2b2lkIE9TUkV4aXREZXNjcmlwdG9yOjp2YWxpZGF0
ZVJlZmVyZW5jCiAgICAgICAgIG1hdGVyaWFsaXphdGlvbi0+dmFsaWRhdGVSZWZlcmVuY2VzKHRy
YWNrZWRSZWZlcmVuY2VzKTsKIH0KIAotI2lmIEZUTF9VU0VTX0IzCiBSZWZQdHI8T1NSRXhpdEhh
bmRsZT4gT1NSRXhpdERlc2NyaXB0b3I6OmVtaXRPU1JFeGl0KAogICAgIFN0YXRlJiBzdGF0ZSwg
RXhpdEtpbmQgZXhpdEtpbmQsIGNvbnN0IE5vZGVPcmlnaW4mIG5vZGVPcmlnaW4sIENDYWxsSGVs
cGVycyYgaml0LAogICAgIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zLCB1
bnNpZ25lZCBvZmZzZXQpCkBAIC0xMDMsOSArOTksNyBAQCBSZWZQdHI8T1NSRXhpdEhhbmRsZT4g
T1NSRXhpdERlc2NyaXB0b3I6CiAgICAgZXhpdC5tX3ZhbHVlUmVwcy5zaHJpbmtUb0ZpdCgpOwog
ICAgIHJldHVybiBoYW5kbGU7CiB9Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKIAotI2lmIEZUTF9V
U0VTX0IzCiBPU1JFeGl0OjpPU1JFeGl0KAogICAgIE9TUkV4aXREZXNjcmlwdG9yKiBkZXNjcmlw
dG9yLAogICAgIEV4aXRLaW5kIGV4aXRLaW5kLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENvZGVP
cmlnaW4gY29kZU9yaWdpbkZvckV4aXRQcm9maWxlKQpAQCAtMTEzLDE0NyArMTA3LDEyIEBAIE9T
UkV4aXQ6Ok9TUkV4aXQoCiAgICAgLCBtX2Rlc2NyaXB0b3IoZGVzY3JpcHRvcikKIHsKIH0KLSNl
bHNlIC8vIEZUTF9VU0VTX0IzCi1PU1JFeGl0OjpPU1JFeGl0KAotICAgIE9TUkV4aXREZXNjcmlw
dG9yKiBkZXNjcmlwdG9yLCBFeGl0S2luZCBleGl0S2luZCwgT1NSRXhpdERlc2NyaXB0b3JJbXBs
JiBleGl0RGVzY3JpcHRvckltcGwsCi0gICAgdWludDMyX3Qgc3RhY2ttYXBSZWNvcmRJbmRleCkK
LSAgICA6IE9TUkV4aXRCYXNlKGV4aXRLaW5kLCBleGl0RGVzY3JpcHRvckltcGwubV9jb2RlT3Jp
Z2luLCBleGl0RGVzY3JpcHRvckltcGwubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUpCi0gICAg
LCBtX2Rlc2NyaXB0b3IoZGVzY3JpcHRvcikKLSAgICAsIG1fc3RhY2ttYXBSZWNvcmRJbmRleChz
dGFja21hcFJlY29yZEluZGV4KQotICAgICwgbV9leGNlcHRpb25UeXBlKGV4aXREZXNjcmlwdG9y
SW1wbC5tX2V4Y2VwdGlvblR5cGUpCi17Ci19Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKIAogQ29k
ZUxvY2F0aW9uSnVtcCBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayog
ZnRsQ29kZUJsb2NrKSBjb25zdAogewotI2lmIEZUTF9VU0VTX0IzCiAgICAgVU5VU0VEX1BBUkFN
KGZ0bENvZGVCbG9jayk7CiAgICAgcmV0dXJuIG1fcGF0Y2hhYmxlSnVtcDsKLSNlbHNlIC8vIEZU
TF9VU0VTX0IzCi0gICAgcmV0dXJuIENvZGVMb2NhdGlvbkp1bXAoCi0gICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KAotICAgICAgICAgICAgZnRsQ29kZUJsb2NrLT5qaXRDb2RlKCktPmZ0
bCgpLT5leGl0VGh1bmtzKCkuZGF0YUxvY2F0aW9uKCkpICsKLSAgICAgICAgbV9wYXRjaGFibGVD
b2RlT2Zmc2V0KTsKLSNlbmRpZiAvLyBGVExfVVNFU19CMwotfQotCi0jaWYgIUZUTF9VU0VTX0Iz
Ci12b2lkIE9TUkV4aXQ6OmdhdGhlclJlZ2lzdGVyc1RvU3BpbGxGb3JDYWxsSWZFeGNlcHRpb24o
U3RhY2tNYXBzJiBzdGFja21hcHMsIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQpCi17Ci0gICAg
UkVMRUFTRV9BU1NFUlQobV9leGNlcHRpb25UeXBlID09IEV4Y2VwdGlvblR5cGU6OkpTQ2FsbCk7
Ci0KLSAgICBSZWdpc3RlclNldCB2b2xhdGlsZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0Ojp2b2xh
dGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpOwotCi0gICAgYXV0byBhZGROZWVkZWRSZWdpc3RlcnMg
PSBbJl0gKGNvbnN0IEV4aXRWYWx1ZSYgZXhpdFZhbHVlKSB7Ci0gICAgICAgIGF1dG8gaGFuZGxl
TG9jYXRpb24gPSBbJl0gKGNvbnN0IEZUTDo6TG9jYXRpb24mIGxvY2F0aW9uKSB7Ci0gICAgICAg
ICAgICBpZiAobG9jYXRpb24uaW52b2x2ZXNHUFIoKSAmJiB2b2xhdGlsZVJlZ2lzdGVycy5nZXQo
bG9jYXRpb24uZ3ByKCkpKQotICAgICAgICAgICAgICAgIHRoaXMtPnJlZ2lzdGVyc1RvUHJlc2Vy
dmVGb3JDYWxsVGhhdE1pZ2h0VGhyb3cuc2V0KGxvY2F0aW9uLmdwcigpKTsKLSAgICAgICAgICAg
IGVsc2UgaWYgKGxvY2F0aW9uLmlzRlBSKCkgJiYgdm9sYXRpbGVSZWdpc3RlcnMuZ2V0KGxvY2F0
aW9uLmZwcigpKSkKLSAgICAgICAgICAgICAgICB0aGlzLT5yZWdpc3RlcnNUb1ByZXNlcnZlRm9y
Q2FsbFRoYXRNaWdodFRocm93LnNldChsb2NhdGlvbi5mcHIoKSk7Ci0gICAgICAgIH07Ci0KLSAg
ICAgICAgc3dpdGNoIChleGl0VmFsdWUua2luZCgpKSB7Ci0gICAgICAgIGNhc2UgRXhpdFZhbHVl
QXJndW1lbnQ6Ci0gICAgICAgICAgICBoYW5kbGVMb2NhdGlvbihGVEw6OkxvY2F0aW9uOjpmb3JT
dGFja21hcHMoJnN0YWNrbWFwcywgcmVjb3JkLmxvY2F0aW9uc1tleGl0VmFsdWUuZXhpdEFyZ3Vt
ZW50KCkuYXJndW1lbnQoKV0pKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEV4
aXRWYWx1ZVJlY292ZXJ5OgotICAgICAgICAgICAgaGFuZGxlTG9jYXRpb24oRlRMOjpMb2NhdGlv
bjo6Zm9yU3RhY2ttYXBzKCZzdGFja21hcHMsIHJlY29yZC5sb2NhdGlvbnNbZXhpdFZhbHVlLnJp
Z2h0UmVjb3ZlcnlBcmd1bWVudCgpXSkpOwotICAgICAgICAgICAgaGFuZGxlTG9jYXRpb24oRlRM
OjpMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKCZzdGFja21hcHMsIHJlY29yZC5sb2NhdGlvbnNbZXhp
dFZhbHVlLmxlZnRSZWNvdmVyeUFyZ3VtZW50KCldKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfTsKLSAg
ICBmb3IgKEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiBt
X2Rlc2NyaXB0b3ItPm1fbWF0ZXJpYWxpemF0aW9ucykgewotICAgICAgICBmb3IgKHVuc2lnbmVk
IHByb3BlcnR5SW5kZXggPSBtYXRlcmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKS5zaXplKCk7IHBy
b3BlcnR5SW5kZXgtLTspCi0gICAgICAgICAgICBhZGROZWVkZWRSZWdpc3RlcnMobWF0ZXJpYWxp
emF0aW9uLT5wcm9wZXJ0aWVzKClbcHJvcGVydHlJbmRleF0udmFsdWUoKSk7Ci0gICAgfQotICAg
IGZvciAodW5zaWduZWQgaW5kZXggPSBtX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUoKTsgaW5k
ZXgtLTspCi0gICAgICAgIGFkZE5lZWRlZFJlZ2lzdGVycyhtX2Rlc2NyaXB0b3ItPm1fdmFsdWVz
W2luZGV4XSk7Ci19Ci0KLXZvaWQgT1NSRXhpdDo6c3BpbGxSZWdpc3RlcnNUb1NwaWxsU2xvdChD
Q2FsbEhlbHBlcnMmIGppdCwgaW50MzJfdCBzdGFja1NwaWxsU2xvdCkKLXsKLSAgICBSRUxFQVNF
X0FTU0VSVChpc0dlbmVyaWNVbndpbmRIYW5kbGVyKCkgfHwgd2lsbEFycml2ZUF0T1NSRXhpdEZy
b21DYWxsT3BlcmF0aW9uKCkpOwotICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKLSAgICBmb3IgKEdQ
UlJlZyByZWcgPSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpOyByZWcgPD0gTWFjcm9B
c3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpOyByZWcgPSBNYWNyb0Fzc2VtYmxlcjo6bmV4dFJlZ2lz
dGVyKHJlZykpIHsKLSAgICAgICAgaWYgKHJlZ2lzdGVyc1RvUHJlc2VydmVGb3JDYWxsVGhhdE1p
Z2h0VGhyb3cuZ2V0KHJlZykpIHsKLSAgICAgICAgICAgIGppdC5zdG9yZTY0KHJlZywgQ0NhbGxI
ZWxwZXJzOjphZGRyZXNzRm9yKHN0YWNrU3BpbGxTbG90ICsgY291bnQpKTsKLSAgICAgICAgICAg
IGNvdW50Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZm9yIChGUFJSZWcgcmVnID0gTWFjcm9B
c3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpOyByZWcgPD0gTWFjcm9Bc3NlbWJsZXI6Omxhc3RG
UFJlZ2lzdGVyKCk7IHJlZyA9IE1hY3JvQXNzZW1ibGVyOjpuZXh0RlBSZWdpc3RlcihyZWcpKSB7
Ci0gICAgICAgIGlmIChyZWdpc3RlcnNUb1ByZXNlcnZlRm9yQ2FsbFRoYXRNaWdodFRocm93Lmdl
dChyZWcpKSB7Ci0gICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUocmVnLCBDQ2FsbEhlbHBlcnM6
OmFkZHJlc3NGb3Ioc3RhY2tTcGlsbFNsb3QgKyBjb3VudCkpOwotICAgICAgICAgICAgY291bnQr
KzsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBPU1JFeGl0OjpyZWNvdmVyUmVnaXN0ZXJz
RnJvbVNwaWxsU2xvdChDQ2FsbEhlbHBlcnMmIGppdCwgaW50MzJfdCBzdGFja1NwaWxsU2xvdCkK
LXsKLSAgICBSRUxFQVNFX0FTU0VSVChpc0dlbmVyaWNVbndpbmRIYW5kbGVyKCkgfHwgd2lsbEFy
cml2ZUF0T1NSRXhpdEZyb21DYWxsT3BlcmF0aW9uKCkpOwotICAgIHVuc2lnbmVkIGNvdW50ID0g
MDsKLSAgICBmb3IgKEdQUlJlZyByZWcgPSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3Rlcigp
OyByZWcgPD0gTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpOyByZWcgPSBNYWNyb0Fzc2Vt
Ymxlcjo6bmV4dFJlZ2lzdGVyKHJlZykpIHsKLSAgICAgICAgaWYgKHJlZ2lzdGVyc1RvUHJlc2Vy
dmVGb3JDYWxsVGhhdE1pZ2h0VGhyb3cuZ2V0KHJlZykpIHsKLSAgICAgICAgICAgIGppdC5sb2Fk
NjQoQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKHN0YWNrU3BpbGxTbG90ICsgY291bnQpLCByZWcp
OwotICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgfQotICAgIH0KLSAgICBmb3IgKEZQUlJl
ZyByZWcgPSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCk7IHJlZyA8PSBNYWNyb0Fz
c2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKTsgcmVnID0gTWFjcm9Bc3NlbWJsZXI6Om5leHRGUFJl
Z2lzdGVyKHJlZykpIHsKLSAgICAgICAgaWYgKHJlZ2lzdGVyc1RvUHJlc2VydmVGb3JDYWxsVGhh
dE1pZ2h0VGhyb3cuZ2V0KHJlZykpIHsKLSAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxs
SGVscGVyczo6YWRkcmVzc0ZvcihzdGFja1NwaWxsU2xvdCArIGNvdW50KSwgcmVnKTsKLSAgICAg
ICAgICAgIGNvdW50Kys7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgT1NSRXhpdDo6d2ls
bEFycml2ZUF0RXhpdEZyb21JbmRpcmVjdEV4Y2VwdGlvbkNoZWNrKCkgY29uc3QKLXsKLSAgICBz
d2l0Y2ggKG1fZXhjZXB0aW9uVHlwZSkgewotICAgIGNhc2UgRXhjZXB0aW9uVHlwZTo6SlNDYWxs
OgotICAgIGNhc2UgRXhjZXB0aW9uVHlwZTo6R2V0QnlJZDoKLSAgICBjYXNlIEV4Y2VwdGlvblR5
cGU6OlB1dEJ5SWQ6Ci0gICAgY2FzZSBFeGNlcHRpb25UeXBlOjpMYXp5U2xvd1BhdGg6Ci0gICAg
Y2FzZSBFeGNlcHRpb25UeXBlOjpCaW5hcnlPcEdlbmVyYXRvcjoKLSAgICBjYXNlIEV4Y2VwdGlv
blR5cGU6OkdldEJ5SWRDYWxsT3BlcmF0aW9uOgotICAgIGNhc2UgRXhjZXB0aW9uVHlwZTo6UHV0
QnlJZENhbGxPcGVyYXRpb246Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLX0KLQotYm9vbCBPU1JFeGl0Ojp3aWxsQXJyaXZlQXRPU1JFeGl0RnJvbUNhbGxPcGVy
YXRpb24oKSBjb25zdAotewotICAgIHN3aXRjaCAobV9leGNlcHRpb25UeXBlKSB7Ci0gICAgY2Fz
ZSBFeGNlcHRpb25UeXBlOjpHZXRCeUlkQ2FsbE9wZXJhdGlvbjoKLSAgICBjYXNlIEV4Y2VwdGlv
blR5cGU6OlB1dEJ5SWRDYWxsT3BlcmF0aW9uOgotICAgIGNhc2UgRXhjZXB0aW9uVHlwZTo6Qmlu
YXJ5T3BHZW5lcmF0b3I6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLX0KLQotYm9vbCBPU1JFeGl0OjpuZWVkc1JlZ2lzdGVyUmVjb3ZlcnlPbkdlbmVyaWNVbndp
bmRPU1JFeGl0UGF0aCgpIGNvbnN0Ci17Ci0gICAgLy8gQ2FsbHMvUHV0QnlJZHMvR2V0QnlJZHMg
YWxsIGhhdmUgYSBnZW5lcmljIHVud2luZCBvc3IgZXhpdCBwYXRocy4KLSAgICAvLyBCdXQsIEdl
dEJ5SWQgYW5kIFB1dEJ5SWQgSUNzIHdpbGwgZG8gcmVnaXN0ZXIgcmVjb3ZlcnkgdGhlbXNlbHZl
cwotICAgIC8vIGJlY2F1c2UgdGhleSdyZSByZXNwb25zaWJsZSBmb3Igc3BpbGxpbmcgbmVjZXNz
YXJ5IHJlZ2lzdGVycywgc28KLSAgICAvLyB0aGV5IGFsc28gbXVzdCByZWNvdmVyIHJlZ2lzdGVy
cyB0aGVtc2VsdmVzLgotICAgIC8vIENhbGxzIGRvbid0IHdvcmsgdGhpcyB3YXkuIFdlIGNvbXBp
bGUgQ2FsbHMgYXMgcGF0Y2hwb2ludHMgaW4gTExWTS4KLSAgICAvLyBBIGNhbGwgcGF0Y2hwb2lu
dCBtaWdodCBwYXNzIHVzIHZvbGF0aWxlIHJlZ2lzdGVycyBmb3IgbG9jYXRpb25zCi0gICAgLy8g
d2Ugd2lsbCBkbyB2YWx1ZSByZWNvdmVyeSBvbi4gVGhlcmVmb3JlLCBiZWZvcmUgd2UgbWFrZSB0
aGUgY2FsbCwKLSAgICAvLyB3ZSBtdXN0IHNwaWxsIHRoZXNlIHJlZ2lzdGVycy4gT3RoZXJ3aXNl
LCB0aGUgY2FsbCB3aWxsIGNsb2JiZXIgdGhlbS4KLSAgICAvLyBUaGVyZWZvcmUsIHRoZSBjb3Jy
ZXNwb25kaW5nIE9TUiBleGl0IGZvciB0aGUgY2FsbCB3aWxsIG5lZWQgdG8KLSAgICAvLyByZWNv
dmVyIHRoZSBzcGlsbGVkIHJlZ2lzdGVycy4KLSAgICByZXR1cm4gbV9leGNlcHRpb25UeXBlID09
IEV4Y2VwdGlvblR5cGU6OkpTQ2FsbDsKIH0KLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9TUkV4aXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE9TUkV4aXQuaAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRl
ICJGVExFeGl0VmFsdWUuaCIKICNpbmNsdWRlICJGVExGb3JtYXR0ZWRWYWx1ZS5oIgogI2luY2x1
ZGUgIkZUTE9TUkV4aXRIYW5kbGUuaCIKLSNpbmNsdWRlICJGVExTdGFja01hcHMuaCIKICNpbmNs
dWRlICJGVExTdGFja21hcEFyZ3VtZW50TGlzdC5oIgogI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgi
CiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpAQCAtNjgsMjAgKzY3
LDYgQEAgY2xhc3MgU3RhdGU7CiBzdHJ1Y3QgT1NSRXhpdERlc2NyaXB0b3JJbXBsOwogc3RydWN0
IE9TUkV4aXRIYW5kbGU7CiAKLSNpZiAhRlRMX1VTRVNfQjMKLWVudW0gY2xhc3MgRXhjZXB0aW9u
VHlwZSA6IHVpbnQ4X3QgewotICAgIE5vbmUsCi0gICAgQ0NhbGxFeGNlcHRpb24sCi0gICAgSlND
YWxsLAotICAgIEdldEJ5SWQsCi0gICAgR2V0QnlJZENhbGxPcGVyYXRpb24sCi0gICAgUHV0QnlJ
ZCwKLSAgICBQdXRCeUlkQ2FsbE9wZXJhdGlvbiwKLSAgICBMYXp5U2xvd1BhdGgsCi0gICAgQmlu
YXJ5T3BHZW5lcmF0b3IsCi19OwotI2VuZGlmIC8vICFGVExfVVNFU19CMwotCiBzdHJ1Y3QgT1NS
RXhpdERlc2NyaXB0b3IgewogICAgIE9TUkV4aXREZXNjcmlwdG9yKAogICAgICAgICBEYXRhRm9y
bWF0IHByb2ZpbGVEYXRhRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLApAQCAt
OTgsMTQgKzgzLDggQEAgc3RydWN0IE9TUkV4aXREZXNjcmlwdG9yIHsKICAgICBPcGVyYW5kczxF
eGl0VmFsdWU+IG1fdmFsdWVzOwogICAgIEJhZzxFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlv
bj4gbV9tYXRlcmlhbGl6YXRpb25zOwogCi0jaWYgIUZUTF9VU0VTX0IzCi0gICAgdWludDMyX3Qg
bV9zdGFja21hcElEOwotICAgIGJvb2wgbV9pc0ludmFsaWRhdGlvblBvaW50OwotI2VuZGlmIC8v
ICFGVExfVVNFU19CMwotICAgIAogICAgIHZvaWQgdmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRy
YWNrZWRSZWZlcmVuY2VzJik7CiAKLSNpZiBGVExfVVNFU19CMwogICAgIC8vIENhbGwgdGhpcyBv
bmNlIHdlIGhhdmUgYSBwbGFjZSB0byBlbWl0IHRoZSBPU1IgZXhpdCBqdW1wIGFuZCB3ZSBoYXZl
IGRhdGEgYWJvdXQgaG93IHRoZSBzdGF0ZQogICAgIC8vIHNob3VsZCBiZSByZWNvdmVyZWQuIFRo
aXMgZWZmZWN0aXZlbHkgZW1pdHMgY29kZSB0aGF0IGRvZXMgdGhlIGV4aXQsIHRob3VnaCB0aGUg
Y29kZSBpcyByZWFsbHkgYQogICAgIC8vIHBhdGNoYWJsZSBqdW1wIGFuZCB3ZSBlbWl0IHRoZSBy
ZWFsIGNvZGUgbGF6aWx5LiBUaGUgZGVzY3JpcHRpb24gb2YgaG93IHRvIGVtaXQgdGhlIHJlYWwg
Y29kZSBpcwpAQCAtMTM1LDcxICsxMTQsMjcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8T1NSRXhp
dEhhbmRsZT4gcHJlcGFyZU9TUkV4aXRIYW5kbGUoCiAgICAgICAgIFN0YXRlJiwgRXhpdEtpbmQs
IGNvbnN0IERGRzo6Tm9kZU9yaWdpbiYsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmLAogICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSAwKTsKLSNlbmRpZiAvLyBGVExfVVNFU19C
MwotfTsKLQotI2lmICFGVExfVVNFU19CMwotc3RydWN0IE9TUkV4aXREZXNjcmlwdG9ySW1wbCB7
Ci0gICAgT1NSRXhpdERlc2NyaXB0b3JJbXBsKEV4aXRLaW5kIGtpbmQsIENvZGVPcmlnaW4gZXhp
dE9yaWdpbiwgQ29kZU9yaWdpbiBmb3JFeGl0UHJvZmlsZSwgRXhjZXB0aW9uVHlwZSBleGNlcHRp
b25UeXBlKQotICAgICAgICA6IG1fa2luZChraW5kKQotICAgICAgICAsIG1fY29kZU9yaWdpbihl
eGl0T3JpZ2luKQotICAgICAgICAsIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlKGZvckV4aXRQ
cm9maWxlKQotICAgICAgICAsIG1fZXhjZXB0aW9uVHlwZShleGNlcHRpb25UeXBlKQotICAgIHsK
LSAgICB9Ci0KLSAgICBFeGl0S2luZCBtX2tpbmQ7Ci0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmln
aW47Ci0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKLSAgICBFeGNl
cHRpb25UeXBlIG1fZXhjZXB0aW9uVHlwZTsKLSAgICBDb2RlT3JpZ2luIG1fc2VtYW50aWNDb2Rl
T3JpZ2luRm9yQ2FsbEZyYW1lSGVhZGVyOwotICAgIEhhbmRsZXJJbmZvIG1fYmFzZWxpbmVFeGNl
cHRpb25IYW5kbGVyOwogfTsKLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKIAogc3RydWN0IE9TUkV4
aXQgOiBwdWJsaWMgREZHOjpPU1JFeGl0QmFzZSB7CiAgICAgT1NSRXhpdCgKICAgICAgICAgT1NS
RXhpdERlc2NyaXB0b3IqLCBFeGl0S2luZCwKLSNpZiBGVExfVVNFU19CMwogICAgICAgICBDb2Rl
T3JpZ2luLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZQotI2Vsc2UgLy8gRlRM
X1VTRVNfQjMKLSAgICAgICAgT1NSRXhpdERlc2NyaXB0b3JJbXBsJiwgdWludDMyX3Qgc3RhY2tt
YXBSZWNvcmRJbmRleAotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgICAgICk7CiAKICAgICBP
U1JFeGl0RGVzY3JpcHRvciogbV9kZXNjcmlwdG9yOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBtX2NvZGU7Ci0jaWYgRlRMX1VTRVNfQjMKICAgICAvLyBUaGlzIHRlbGxzIHVzIHdoZXJlIHRv
IHBsYWNlIGEganVtcC4KICAgICBDb2RlTG9jYXRpb25KdW1wIG1fcGF0Y2hhYmxlSnVtcDsKICAg
ICBWZWN0b3I8QjM6OlZhbHVlUmVwPiBtX3ZhbHVlUmVwczsKLSNlbHNlIC8vIEZUTF9VU0VTX0Iz
Ci0gICAgLy8gT2Zmc2V0IHdpdGhpbiB0aGUgZXhpdCBzdHVicyBvZiB0aGUgc3R1YiBmb3IgdGhp
cyBleGl0LgotICAgIHVuc2lnbmVkIG1fcGF0Y2hhYmxlQ29kZU9mZnNldDsKLSAgICAvLyBPZmZz
ZXQgd2l0aGluIFN0YWNrbWFwOjpyZWNvcmRzCi0gICAgdWludDMyX3QgbV9zdGFja21hcFJlY29y
ZEluZGV4OwotICAgIEV4Y2VwdGlvblR5cGUgbV9leGNlcHRpb25UeXBlOwotICAgIFJlZ2lzdGVy
U2V0IHJlZ2lzdGVyc1RvUHJlc2VydmVGb3JDYWxsVGhhdE1pZ2h0VGhyb3c7Ci0jZW5kaWYgLy8g
RlRMX1VTRVNfQjMKIAogICAgIENvZGVMb2NhdGlvbkp1bXAgY29kZUxvY2F0aW9uRm9yUmVwYXRj
aChDb2RlQmxvY2sqIGZ0bENvZGVCbG9jaykgY29uc3Q7CiAgICAgdm9pZCBjb25zaWRlckFkZGlu
Z0FzRnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKQogICAgIHsK
ICAgICAgICAgT1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKHBy
b2ZpbGVkQ29kZUJsb2NrLCBFeGl0RnJvbUZUTCk7CiAgICAgfQotCi0jaWYgIUZUTF9VU0VTX0Iz
Ci0gICAgdm9pZCBnYXRoZXJSZWdpc3RlcnNUb1NwaWxsRm9yQ2FsbElmRXhjZXB0aW9uKFN0YWNr
TWFwcyYsIFN0YWNrTWFwczo6UmVjb3JkJik7Ci0gICAgdm9pZCBzcGlsbFJlZ2lzdGVyc1RvU3Bp
bGxTbG90KENDYWxsSGVscGVycyYsIGludDMyX3Qgc3RhY2tTcGlsbFNsb3QpOwotICAgIHZvaWQg
cmVjb3ZlclJlZ2lzdGVyc0Zyb21TcGlsbFNsb3QoQ0NhbGxIZWxwZXJzJiBqaXQsIGludDMyX3Qg
c3RhY2tTcGlsbFNsb3QpOwotCi0gICAgYm9vbCB3aWxsQXJyaXZlQXRFeGl0RnJvbUluZGlyZWN0
RXhjZXB0aW9uQ2hlY2soKSBjb25zdDsKLSAgICBib29sIHdpbGxBcnJpdmVBdE9TUkV4aXRGcm9t
Q2FsbE9wZXJhdGlvbigpIGNvbnN0OwotICAgIGJvb2wgbmVlZHNSZWdpc3RlclJlY292ZXJ5T25H
ZW5lcmljVW53aW5kT1NSRXhpdFBhdGgoKSBjb25zdDsKLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMK
IH07CiAKLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZU
TF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxh
dGlvbkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXRDb21waWxhdGlvbkluZm8uaAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWZuZGVmIEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm9faAotI2RlZmluZSBGVExP
U1JFeGl0Q29tcGlsYXRpb25JbmZvX2gKLQotI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgotCi0jaWYg
RU5BQkxFKEZUTF9KSVQpICYmICFGVExfVVNFU19CMwotCi0jaW5jbHVkZSAiRlRMQWJicmV2aWF0
ZWRUeXBlcy5oIgotI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCi0KLW5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKLQotc3RydWN0IE9TUkV4aXRDb21waWxhdGlvbkluZm8gewotICAg
IE9TUkV4aXRDb21waWxhdGlvbkluZm8oKQotICAgIHsKLSAgICB9Ci0KLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6TGFiZWwgbV90aHVua0xhYmVsOwotICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVK
dW1wIG1fdGh1bmtKdW1wOwotICAgIENvZGVMb2NhdGlvbkxhYmVsIG1fdGh1bmtBZGRyZXNzOwot
fTsKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpICYmICFGVExfVVNFU19CMwotCi0jZW5kaWYgLy8gRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5m
b19oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRD
b21waWxlci5jcHAJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksMTEgKzk5LDcg
QEAgc3RhdGljIHZvaWQgcmVib3hBY2NvcmRpbmdUb0Zvcm1hdCgKIAogc3RhdGljIHZvaWQgY29t
cGlsZVJlY292ZXJ5KAogICAgIENDYWxsSGVscGVycyYgaml0LCBjb25zdCBFeGl0VmFsdWUmIHZh
bHVlLAotI2lmIEZUTF9VU0VTX0IzCiAgICAgVmVjdG9yPEIzOjpWYWx1ZVJlcD4mIHZhbHVlUmVw
cywKLSNlbHNlIC8vIEZUTF9VU0VTX0IzCi0gICAgU3RhY2tNYXBzOjpSZWNvcmQqIHJlY29yZCwg
U3RhY2tNYXBzJiBzdGFja21hcHMsCi0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICBjaGFyKiBy
ZWdpc3RlclNjcmF0Y2gsCiAgICAgY29uc3QgSGFzaE1hcDxFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbiosIEVuY29kZWRKU1ZhbHVlKj4mIG1hdGVyaWFsaXphdGlvblRvUG9pbnRlcikKIHsK
QEAgLTExNywxMyArMTEzLDggQEAgc3RhdGljIHZvaWQgY29tcGlsZVJlY292ZXJ5KAogICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnQ6Ci0jaWYg
RlRMX1VTRVNfQjMKICAgICAgICAgTG9jYXRpb246OmZvclZhbHVlUmVwKHZhbHVlUmVwc1t2YWx1
ZS5leGl0QXJndW1lbnQoKS5hcmd1bWVudCgpXSkucmVzdG9yZUludG8oCiAgICAgICAgICAgICBq
aXQsIHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVnVDApOwotI2Vsc2UgLy8gRlRMX1VTRVNf
QjMKLSAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbdmFsdWUuZXhpdEFyZ3VtZW50KCkuYXJndW1l
bnQoKV0ucmVzdG9yZUludG8oCi0gICAgICAgICAgICBqaXQsIHN0YWNrbWFwcywgcmVnaXN0ZXJT
Y3JhdGNoLCBHUFJJbmZvOjpyZWdUMCk7Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFjazoKQEAgLTEz
NCwxNyArMTI1LDEwIEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVSZWNvdmVyeSgKICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIEV4aXRWYWx1ZVJlY292ZXJ5OgotI2lmIEZUTF9V
U0VTX0IzCiAgICAgICAgIExvY2F0aW9uOjpmb3JWYWx1ZVJlcCh2YWx1ZVJlcHNbdmFsdWUucmln
aHRSZWNvdmVyeUFyZ3VtZW50KCldKS5yZXN0b3JlSW50bygKICAgICAgICAgICAgIGppdCwgcmVn
aXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgICAgIExvY2F0aW9uOjpmb3JWYWx1
ZVJlcCh2YWx1ZVJlcHNbdmFsdWUubGVmdFJlY292ZXJ5QXJndW1lbnQoKV0pLnJlc3RvcmVJbnRv
KAogICAgICAgICAgICAgaml0LCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1QwKTsKLSNl
bHNlIC8vIEZUTF9VU0VTX0IzCi0gICAgICAgIHJlY29yZC0+bG9jYXRpb25zW3ZhbHVlLnJpZ2h0
UmVjb3ZlcnlBcmd1bWVudCgpXS5yZXN0b3JlSW50bygKLSAgICAgICAgICAgIGppdCwgc3RhY2tt
YXBzLCByZWdpc3RlclNjcmF0Y2gsIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgcmVjb3JkLT5s
b2NhdGlvbnNbdmFsdWUubGVmdFJlY292ZXJ5QXJndW1lbnQoKV0ucmVzdG9yZUludG8oCi0gICAg
ICAgICAgICBqaXQsIHN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMCk7
Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVyeU9w
Y29kZSgpKSB7CiAgICAgICAgIGNhc2UgQWRkUmVjb3Zlcnk6CiAgICAgICAgICAgICBzd2l0Y2gg
KHZhbHVlLnJlY292ZXJ5Rm9ybWF0KCkpIHsKQEAgLTE5NCwxMyArMTc4LDYgQEAgc3RhdGljIHZv
aWQgY29tcGlsZVJlY292ZXJ5KAogc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgdW5zaWdu
ZWQgZXhpdElELCBKSVRDb2RlKiBqaXRDb2RlLCBPU1JFeGl0JiBleGl0LCBWTSogdm0sIENvZGVC
bG9jayogY29kZUJsb2NrKQogewotI2lmIEZUTF9VU0VTX0IzCi0gICAgVU5VU0VEX1BBUkFNKGpp
dENvZGUpOwotI2Vsc2UgLy8gRlRMX1VTRVNfQjMKLSAgICBTdGFja01hcHM6OlJlY29yZCogcmVj
b3JkID0gJmppdENvZGUtPnN0YWNrbWFwcy5yZWNvcmRzW2V4aXQubV9zdGFja21hcFJlY29yZElu
ZGV4XTsKLSAgICBSRUxFQVNFX0FTU0VSVChyZWNvcmQtPnBhdGNocG9pbnRJRCA9PSBleGl0Lm1f
ZGVzY3JpcHRvci0+bV9zdGFja21hcElEKTsKLSNlbmRpZiAvLyBGVExfVVNFU19CMwotCiAgICAg
Ly8gVGhpcyBjb2RlIHJlcXVpcmVzIGZyYW1lUG9pbnRlclJlZ2lzdGVyIGlzIHRoZSBzYW1lIGFz
IGNhbGxGcmFtZVJlZ2lzdGVyCiAgICAgc3RhdGljX2Fzc2VydChNYWNyb0Fzc2VtYmxlcjo6ZnJh
bWVQb2ludGVyUmVnaXN0ZXIgPT0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsICJNYWNyb0Fz
c2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIgYW5kIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyIG11c3QgYmUgdGhlIHNhbWUiKTsKIApAQCAtMjE0LDIyICsxOTEsMTIgQEAgc3RhdGljIHZv
aWQgY29tcGlsZVN0dWIoCiAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoY29kZUJsb2NrLT5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rlcikp
LAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBDQ2Fs
bEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAotI2lmICFGVExfVVNFU19CMwotICAg
ICAgICBpZiAoZXhpdC5uZWVkc1JlZ2lzdGVyUmVjb3ZlcnlPbkdlbmVyaWNVbndpbmRPU1JFeGl0
UGF0aCgpKQotICAgICAgICAgICAgZXhpdC5yZWNvdmVyUmVnaXN0ZXJzRnJvbVNwaWxsU2xvdChq
aXQsIGppdENvZGUtPm9zckV4aXRGcm9tR2VuZXJpY1Vud2luZFN0YWNrU3BpbGxTbG90KTsKLSNl
bmRpZiAvLyAhRlRMX1VTRVNfQjMKLQogICAgICAgICAvLyBEbyBhIHB1c2hUb1NhdmUgYmVjYXVz
ZSB0aGF0J3Mgd2hhdCB0aGUgZXhpdCBjb21waWxlciBiZWxvdyBleHBlY3RzIHRoZSBzdGFjawog
ICAgICAgICAvLyB0byBsb29rIGxpa2UgYmVjYXVzZSB0aGF0J3MgdGhlIGxhc3QgdGhpbmcgdGhl
IEV4aXRUaHVua0dlbmVyYXRvciBkb2VzLiBUaGUgY29kZQogICAgICAgICAvLyBiZWxvdyBkb2Vz
bid0IGFjdHVhbGx5IHVzZSB0aGUgdmFsdWUgdGhhdCB3YXMgcHVzaGVkLCBidXQgaXQgZG9lcyBy
ZWx5IG9uIHRoZQogICAgICAgICAvLyBnZW5lcmFsIHNoYXBlIG9mIHRoZSBzdGFjayBiZWluZyBh
cyBpdCBpcyBpbiB0aGUgbm9uLWV4Y2VwdGlvbiBPU1IgY2FzZS4KICAgICAgICAgaml0LnB1c2hU
b1NhdmVJbW1lZGlhdGVXaXRob3V0VG91Y2hpbmdSZWdpc3RlcnMoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoMHhiYWRiZWVmKSk7CiAgICAgfQotI2lmICFGVExfVVNFU19CMwotICAgIGlmIChl
eGl0LndpbGxBcnJpdmVBdE9TUkV4aXRGcm9tQ2FsbE9wZXJhdGlvbigpKQotICAgICAgICBleGl0
LnJlY292ZXJSZWdpc3RlcnNGcm9tU3BpbGxTbG90KGppdCwgaml0Q29kZS0+b3NyRXhpdEZyb21H
ZW5lcmljVW53aW5kU3RhY2tTcGlsbFNsb3QpOwotI2VuZGlmIC8vICFGVExfVVNFU19CMwotICAg
IAogCiAgICAgLy8gV2UgbmVlZCBzY3JhdGNoIHNwYWNlIHRvIHNhdmUgYWxsIHJlZ2lzdGVycywg
dG8gYnVpbGQgdXAgdGhlIEpTIHN0YWNrLCB0byBkZWFsIHdpdGggdW53aW5kCiAgICAgLy8gZml4
dXAsIHBvaW50ZXJzIHRvIGFsbCBvZiB0aGUgb2JqZWN0cyB3ZSBtYXRlcmlhbGl6ZSwgYW5kIHRo
ZSBlbGVtZW50cyBpbnNpZGUgdGhvc2Ugb2JqZWN0cwpAQCAtMjY3LDExICsyMzQsNyBAQCBzdGF0
aWMgdm9pZCBjb21waWxlU3R1YigKICAgICBhdXRvIHJlY292ZXJWYWx1ZSA9IFsmXSAoY29uc3Qg
RXhpdFZhbHVlJiB2YWx1ZSkgewogICAgICAgICBjb21waWxlUmVjb3ZlcnkoCiAgICAgICAgICAg
ICBqaXQsIHZhbHVlLAotI2lmIEZUTF9VU0VTX0IzCiAgICAgICAgICAgICBleGl0Lm1fdmFsdWVS
ZXBzLAotI2Vsc2UgLy8gRlRMX1VTRVNfQjMKLSAgICAgICAgICAgIHJlY29yZCwgaml0Q29kZS0+
c3RhY2ttYXBzLAotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgICAgICAgICByZWdpc3RlclNj
cmF0Y2gsIG1hdGVyaWFsaXphdGlvblRvUG9pbnRlcik7CiAgICAgfTsKICAgICAKQEAgLTI4NSw5
ICsyNDgsOSBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICBqaXQucG9wVG9SZXN0b3Jl
KEdQUkluZm86OnJlZ1QwKTsKICAgICBqaXQuY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsK
ICAgICAKLSAgICBpZiAodm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlciAmJiBjb2RlQmxvY2stPmpp
dENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uKSB7CisgICAgaWYgKHZtLT5tX3BlckJ5
dGVjb2RlUHJvZmlsZXIgJiYgaml0Q29kZS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uKSB7CiAg
ICAgICAgIFByb2ZpbGVyOjpEYXRhYmFzZSYgZGF0YWJhc2UgPSAqdm0tPm1fcGVyQnl0ZWNvZGVQ
cm9maWxlcjsKLSAgICAgICAgUHJvZmlsZXI6OkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbiA9IGNv
ZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24uZ2V0KCk7CisgICAg
ICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBqaXRDb2RlLT5kZmdDb21t
b24oKS0+Y29tcGlsYXRpb24uZ2V0KCk7CiAgICAgICAgIAogICAgICAgICBQcm9maWxlcjo6T1NS
RXhpdCogcHJvZmlsZXJFeGl0ID0gY29tcGlsYXRpb24tPmFkZE9TUkV4aXQoCiAgICAgICAgICAg
ICBleGl0SUQsIFByb2ZpbGVyOjpPcmlnaW5TdGFjayhkYXRhYmFzZSwgY29kZUJsb2NrLCBleGl0
Lm1fY29kZU9yaWdpbiksCkBAIC0zMDUsMTEgKzI2OCw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVT
dHViKAogICAgIAogICAgIC8vIERvIHNvbWUgdmFsdWUgcHJvZmlsaW5nLgogICAgIGlmIChleGl0
Lm1fZGVzY3JpcHRvci0+bV9wcm9maWxlRGF0YUZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSkgewot
I2lmIEZUTF9VU0VTX0IzCiAgICAgICAgIExvY2F0aW9uOjpmb3JWYWx1ZVJlcChleGl0Lm1fdmFs
dWVSZXBzWzBdKS5yZXN0b3JlSW50byhqaXQsIHJlZ2lzdGVyU2NyYXRjaCwgR1BSSW5mbzo6cmVn
VDApOwotI2Vsc2UgLy8gRlRMX1VTRVNfQjMKLSAgICAgICAgcmVjb3JkLT5sb2NhdGlvbnNbMF0u
cmVzdG9yZUludG8oaml0LCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRjaCwgR1BS
SW5mbzo6cmVnVDApOwotI2VuZGlmIC8vIEZUTF9VU0VTX0IzCiAgICAgICAgIHJlYm94QWNjb3Jk
aW5nVG9Gb3JtYXQoCiAgICAgICAgICAgICBleGl0Lm1fZGVzY3JpcHRvci0+bV9wcm9maWxlRGF0
YUZvcm1hdCwgaml0LCBHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJl
Z1QyKTsKICAgICAgICAgCkBAIC01NjEsNyArNTIwLDYgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0
dWIoCiAgICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KGppdCwgZXhpdCk7CiAgICAgCiAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgY29kZUJsb2NrKTsKLSNpZiBGVExfVVNFU19C
MwogICAgIGV4aXQubV9jb2RlID0gRklOQUxJWkVfQ09ERV9JRigKICAgICAgICAgc2hvdWxkRHVt
cERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6dmVyYm9zZU9TUigpIHx8IE9wdGlvbnM6OnZlcmJv
c2VGVExPU1JFeGl0KCksCiAgICAgICAgIHBhdGNoQnVmZmVyLApAQCAtNTcwLDE3ICs1MjgsNiBA
QCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICAgICAgICAgIGV4aXRLaW5kVG9TdHJpbmco
ZXhpdC5tX2tpbmQpLCB0b0NTdHJpbmcoKmNvZGVCbG9jaykuZGF0YSgpLAogICAgICAgICAgICAg
dG9DU3RyaW5nKGlnbm9yaW5nQ29udGV4dDxEdW1wQ29udGV4dD4oZXhpdC5tX2Rlc2NyaXB0b3It
Pm1fdmFsdWVzKSkuZGF0YSgpKQogICAgICAgICApOwotI2Vsc2UgLy8gRlRMX1VTRVNfQjMKLSAg
ICBleGl0Lm1fY29kZSA9IEZJTkFMSVpFX0NPREVfSUYoCi0gICAgICAgIHNob3VsZER1bXBEaXNh
c3NlbWJseSgpIHx8IE9wdGlvbnM6OnZlcmJvc2VPU1IoKSB8fCBPcHRpb25zOjp2ZXJib3NlRlRM
T1NSRXhpdCgpLAotICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgKCJGVEwgT1NSIGV4aXQg
IyV1ICglcywgJXMpIGZyb20gJXMsIHdpdGggb3BlcmFuZHMgPSAlcywgYW5kIHJlY29yZCA9ICVz
IiwKLSAgICAgICAgICAgIGV4aXRJRCwgdG9DU3RyaW5nKGV4aXQubV9jb2RlT3JpZ2luKS5kYXRh
KCksCi0gICAgICAgICAgICBleGl0S2luZFRvU3RyaW5nKGV4aXQubV9raW5kKSwgdG9DU3RyaW5n
KCpjb2RlQmxvY2spLmRhdGEoKSwKLSAgICAgICAgICAgIHRvQ1N0cmluZyhpZ25vcmluZ0NvbnRl
eHQ8RHVtcENvbnRleHQ+KGV4aXQubV9kZXNjcmlwdG9yLT5tX3ZhbHVlcykpLmRhdGEoKSwKLSAg
ICAgICAgICAgIHRvQ1N0cmluZygqcmVjb3JkKS5kYXRhKCkpCi0gICAgICAgICk7Ci0jZW5kaWYg
Ly8gRlRMX1VTRVNfQjMKIH0KIAogZXh0ZXJuICJDIiB2b2lkKiBjb21waWxlRlRMT1NSRXhpdChF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGV4aXRJRCkKQEAgLTYxMiwxOSArNTU5LDExIEBAIGV4
dGVybiAiQyIgdm9pZCogY29tcGlsZUZUTE9TUkV4aXQoRXhlY1MKICAgICAgICAgZGF0YUxvZygi
ICAgIE9yaWdpbjogIiwgZXhpdC5tX2NvZGVPcmlnaW4sICJcbiIpOwogICAgICAgICBpZiAoZXhp
dC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSAhPSBleGl0Lm1fY29kZU9yaWdpbikKICAgICAg
ICAgICAgIGRhdGFMb2coIiAgICBPcmlnaW4gZm9yIGV4aXQgcHJvZmlsZTogIiwgZXhpdC5tX2Nv
ZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgIlxuIik7Ci0jaWYgIUZUTF9VU0VTX0IzCi0gICAgICAg
IGRhdGFMb2coIiAgICBFeGl0IHN0YWNrbWFwIElEOiAiLCBleGl0Lm1fZGVzY3JpcHRvci0+bV9z
dGFja21hcElELCAiXG4iKTsKLSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKICAgICAgICAgZGF0YUxv
ZygiICAgIEN1cnJlbnQgY2FsbCBzaXRlIGluZGV4OiAiLCBleGVjLT5jYWxsU2l0ZUluZGV4KCku
Yml0cygpLCAiXG4iKTsKICAgICAgICAgZGF0YUxvZygiICAgIEV4aXQgaXMgZXhjZXB0aW9uIGhh
bmRsZXI6ICIsIGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCksICJcbiIpOwogICAgICAgICBkYXRh
TG9nKCIgICAgSXMgdW53aW5kIGhhbmRsZXI6ICIsIGV4aXQuaXNHZW5lcmljVW53aW5kSGFuZGxl
cigpLCAiXG4iKTsKLSNpZiAhRlRMX1VTRVNfQjMKLSAgICAgICAgZGF0YUxvZygiICAgIFdpbGwg
YXJyaXZlIGF0IGV4aXQgZnJvbSBsYXp5IHNsb3cgcGF0aDogIiwgZXhpdC5tX2V4Y2VwdGlvblR5
cGUgPT0gRXhjZXB0aW9uVHlwZTo6TGF6eVNsb3dQYXRoLCAiXG4iKTsKLSNlbmRpZiAvLyAhRlRM
X1VTRVNfQjMKICAgICAgICAgZGF0YUxvZygiICAgIEV4aXQgdmFsdWVzOiAiLCBleGl0Lm1fZGVz
Y3JpcHRvci0+bV92YWx1ZXMsICJcbiIpOwotI2lmIEZUTF9VU0VTX0IzCiAgICAgICAgIGRhdGFM
b2coIiAgICBWYWx1ZSByZXBzOiAiLCBsaXN0RHVtcChleGl0Lm1fdmFsdWVSZXBzKSwgIlxuIik7
Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKICAgICAgICAgaWYgKCFleGl0Lm1fZGVzY3JpcHRvci0+
bV9tYXRlcmlhbGl6YXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgZGF0YUxvZygiICAg
IE1hdGVyaWFsaXphdGlvbnM6XG4iKTsKICAgICAgICAgICAgIGZvciAoRXhpdFRpbWVPYmplY3RN
YXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiA6IGV4aXQubV9kZXNjcmlwdG9yLT5tX21h
dGVyaWFsaXphdGlvbnMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXRIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdEhhbmRsZS5jcHAJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRXhpdEhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGVExPU1JFeGl0SGFuZGxlLmgi
CiAKLSNpZiBFTkFCTEUoRlRMX0pJVCkgJiYgRlRMX1VTRVNfQjMKKyNpZiBFTkFCTEUoRlRMX0pJ
VCkKIAogI2luY2x1ZGUgIkZUTE9TUkV4aXQuaCIKICNpbmNsdWRlICJGVExTdGF0ZS5oIgpAQCAt
NTgsNSArNTgsNSBAQCB2b2lkIE9TUkV4aXRIYW5kbGU6OmVtaXRFeGl0VGh1bmsoU3RhdGUmCiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKSAm
JiBGVExfVVNFU19CMworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRIYW5kbGUuaAkocmV2aXNpb24gMTk2Njg1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0SGFuZGxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogCi0j
aWYgRU5BQkxFKEZUTF9KSVQpICYmIEZUTF9VU0VTX0IzCisjaWYgRU5BQkxFKEZUTF9KSVQpCiAK
ICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaD4KQEAgLTYxLDcgKzYxLDcgQEAgc3RydWN0IE9TUkV4aXRIYW5kbGUgOiBwdWJsaWMg
VGhyZWFkU2FmZQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKLSNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkgJiYgRlRMX1VTRVNfQjMKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKIAog
I2VuZGlmIC8vIEZUTE9TUkV4aXRIYW5kbGVfaAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE91dHB1dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPdXRwdXQuY3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE91dHB1dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzAwICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiREZHQ29tbW9uLmgiCi0jaW5jbHVkZSAiRlRM
QjNPdXRwdXQuaCIKLSNpbmNsdWRlICJGVExPdXRwdXQuaCIKLQotI2lmIEVOQUJMRShGVExfSklU
KQotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLSNpZiAhRlRMX1VTRVNfQjMK
LQotT3V0cHV0OjpPdXRwdXQoU3RhdGUmIHN0YXRlKQotICAgIDogSW50cmluc2ljUmVwb3NpdG9y
eShzdGF0ZS5jb250ZXh0KQotICAgICwgbV9mdW5jdGlvbigwKQotICAgICwgbV9oZWFwcygwKQot
ICAgICwgbV9idWlsZGVyKGxsdm0tPkNyZWF0ZUJ1aWxkZXJJbkNvbnRleHQobV9jb250ZXh0KSkK
LSAgICAsIG1fYmxvY2soMCkKLSAgICAsIG1fbmV4dEJsb2NrKDApCi17Ci19Ci0KLU91dHB1dDo6
fk91dHB1dCgpCi17Ci0gICAgbGx2bS0+RGlzcG9zZUJ1aWxkZXIobV9idWlsZGVyKTsKLX0KLQot
dm9pZCBPdXRwdXQ6OmluaXRpYWxpemUoTE1vZHVsZSBtb2R1bGUsIExWYWx1ZSBmdW5jdGlvbiwg
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeSYgaGVhcHMpCi17Ci0gICAgSW50cmluc2ljUmVwb3NpdG9y
eTo6aW5pdGlhbGl6ZShtb2R1bGUpOwotICAgIG1fZnVuY3Rpb24gPSBmdW5jdGlvbjsKLSAgICBt
X2hlYXBzID0gJmhlYXBzOwotfQotCi1MQmFzaWNCbG9jayBPdXRwdXQ6OmFwcGVuZFRvKExCYXNp
Y0Jsb2NrIGJsb2NrLCBMQmFzaWNCbG9jayBuZXh0QmxvY2spCi17Ci0gICAgYXBwZW5kVG8oYmxv
Y2spOwotICAgIHJldHVybiBpbnNlcnROZXdCbG9ja3NCZWZvcmUobmV4dEJsb2NrKTsKLX0KLQot
dm9pZCBPdXRwdXQ6OmFwcGVuZFRvKExCYXNpY0Jsb2NrIGJsb2NrKQotewotICAgIG1fYmxvY2sg
PSBibG9jazsKLSAgICAKLSAgICBsbHZtLT5Qb3NpdGlvbkJ1aWxkZXJBdEVuZChtX2J1aWxkZXIs
IGJsb2NrKTsKLX0KLQotTEJhc2ljQmxvY2sgT3V0cHV0OjpuZXdCbG9jayhjb25zdCBjaGFyKiBu
YW1lKQotewotICAgIGlmICghbV9uZXh0QmxvY2spCi0gICAgICAgIHJldHVybiBhcHBlbmRCYXNp
Y0Jsb2NrKG1fY29udGV4dCwgbV9mdW5jdGlvbiwgbmFtZSk7Ci0gICAgcmV0dXJuIGluc2VydEJh
c2ljQmxvY2sobV9jb250ZXh0LCBtX25leHRCbG9jaywgbmFtZSk7Ci19Ci0KLUxWYWx1ZSBPdXRw
dXQ6OmNoaWxsRGl2KExWYWx1ZSBudW1lcmF0b3IsIExWYWx1ZSBkZW5vbWluYXRvcikKLXsKLSAg
ICBMQmFzaWNCbG9jayB1bnNhZmVEZW5vbWluYXRvciA9IEZUTF9ORVdfQkxPQ0soKnRoaXMsICgi
Q2hpbGxEaXYgdW5zYWZlIGRlbm9taW5hdG9yIikpOwotICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IEZUTF9ORVdfQkxPQ0soKnRoaXMsICgiQ2hpbGxEaXYgY29udGludWF0aW9uIikpOwot
ICAgIExCYXNpY0Jsb2NrIGRvbmUgPSBGVExfTkVXX0JMT0NLKCp0aGlzLCAoIkNoaWxsRGl2IGRv
bmUiKSk7Ci0gICAgTEJhc2ljQmxvY2sgZGl2QnlaZXJvID0gRlRMX05FV19CTE9DSygqdGhpcywg
KCJDaGlsbERpdiBkaXZpZGUgYnkgemVybyIpKTsKLSAgICBMQmFzaWNCbG9jayBub3REaXZCeVpl
cm8gPSBGVExfTkVXX0JMT0NLKCp0aGlzLCAoIkNoaWxsRGl2IG5vdCBkaXZpZGUgYnkgemVybyIp
KTsKLSAgICBMQmFzaWNCbG9jayBuZWcyVG9UaGUzMUJ5TmVnMSA9IEZUTF9ORVdfQkxPQ0soKnRo
aXMsICgiQXJpdGhEaXYgLTJeMzEvLTEiKSk7Ci0KLSAgICBMVmFsdWUgYWRqdXN0ZWREZW5vbWlu
YXRvciA9IGFkZChkZW5vbWluYXRvciwgaW50MzJPbmUpOwotICAgIGJyYW5jaCgKLSAgICAgICAg
YWJvdmUoYWRqdXN0ZWREZW5vbWluYXRvciwgaW50MzJPbmUpLAotICAgICAgICB1c3VhbGx5KGNv
bnRpbnVhdGlvbiksIHJhcmVseSh1bnNhZmVEZW5vbWluYXRvcikpOwotCi0gICAgVmVjdG9yPFZh
bHVlRnJvbUJsb2NrLCAzPiByZXN1bHRzOwotICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gYXBw
ZW5kVG8odW5zYWZlRGVub21pbmF0b3IsIGNvbnRpbnVhdGlvbik7Ci0KLSAgICBMVmFsdWUgbmVn
MlRvVGhlMzEgPSBjb25zdEludDMyKC0yMTQ3NDgzNjQ3LTEpOwotICAgIGJyYW5jaChpc1plcm8z
MihkZW5vbWluYXRvciksIHJhcmVseShkaXZCeVplcm8pLCB1c3VhbGx5KG5vdERpdkJ5WmVybykp
OwotCi0gICAgYXBwZW5kVG8oZGl2QnlaZXJvLCBub3REaXZCeVplcm8pOwotICAgIHJlc3VsdHMu
YXBwZW5kKGFuY2hvcihpbnQzMlplcm8pKTsKLSAgICBqdW1wKGRvbmUpOwotCi0gICAgYXBwZW5k
VG8obm90RGl2QnlaZXJvLCBuZWcyVG9UaGUzMUJ5TmVnMSk7Ci0gICAgYnJhbmNoKGVxdWFsKG51
bWVyYXRvciwgbmVnMlRvVGhlMzEpLAotICAgICAgICByYXJlbHkobmVnMlRvVGhlMzFCeU5lZzEp
LCB1c3VhbGx5KGNvbnRpbnVhdGlvbikpOwotCi0gICAgYXBwZW5kVG8obmVnMlRvVGhlMzFCeU5l
ZzEsIGNvbnRpbnVhdGlvbik7Ci0gICAgcmVzdWx0cy5hcHBlbmQoYW5jaG9yKG5lZzJUb1RoZTMx
KSk7Ci0gICAganVtcChkb25lKTsKLQotICAgIGFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgZG9uZSk7
Ci0gICAgTFZhbHVlIHJlc3VsdCA9IGRpdihudW1lcmF0b3IsIGRlbm9taW5hdG9yKTsKLSAgICBy
ZXN1bHRzLmFwcGVuZChhbmNob3IocmVzdWx0KSk7Ci0gICAganVtcChkb25lKTsKLQotICAgIGFw
cGVuZFRvKGRvbmUsIGxhc3ROZXh0KTsKLSAgICByZXR1cm4gcGhpKGludDMyLCByZXN1bHRzKTsK
LX0KLQotTFZhbHVlIE91dHB1dDo6Y2hpbGxNb2QoTFZhbHVlIG51bWVyYXRvciwgTFZhbHVlIGRl
bm9taW5hdG9yKQotewotICAgIExCYXNpY0Jsb2NrIHVuc2FmZURlbm9taW5hdG9yID0gRlRMX05F
V19CTE9DSygqdGhpcywgKCJDaGlsbE1vZCB1bnNhZmUgZGVub21pbmF0b3IiKSk7Ci0gICAgTEJh
c2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSygqdGhpcywgKCJDaGlsbE1vZCBj
b250aW51YXRpb24iKSk7Ci0gICAgTEJhc2ljQmxvY2sgZG9uZSA9IEZUTF9ORVdfQkxPQ0soKnRo
aXMsICgiQ2hpbGxNb2QgZG9uZSIpKTsKLSAgICBMQmFzaWNCbG9jayBkaXZCeVplcm8gPSBGVExf
TkVXX0JMT0NLKCp0aGlzLCAoIkNoaWxsTW9kIGRpdmlkZSBieSB6ZXJvIikpOwotICAgIExCYXNp
Y0Jsb2NrIG5vdERpdkJ5WmVybyA9IEZUTF9ORVdfQkxPQ0soKnRoaXMsICgiQ2hpbGxNb2Qgbm90
IGRpdmlkZSBieSB6ZXJvIikpOwotICAgIExCYXNpY0Jsb2NrIG5lZzJUb1RoZTMxQnlOZWcxID0g
RlRMX05FV19CTE9DSygqdGhpcywgKCJDaGlsbE1vZCAtMl4zMS8tMSIpKTsKLQotICAgIExWYWx1
ZSBhZGp1c3RlZERlbm9taW5hdG9yID0gYWRkKGRlbm9taW5hdG9yLCBpbnQzMk9uZSk7Ci0gICAg
YnJhbmNoKAotICAgICAgICBhYm92ZShhZGp1c3RlZERlbm9taW5hdG9yLCBpbnQzMk9uZSksCi0g
ICAgICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHVuc2FmZURlbm9taW5hdG9yKSk7
Ci0KLSAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDM+IHJlc3VsdHM7Ci0gICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBhcHBlbmRUbyh1bnNhZmVEZW5vbWluYXRvciwgY29udGludWF0aW9uKTsK
LQotICAgIExWYWx1ZSBuZWcyVG9UaGUzMSA9IGNvbnN0SW50MzIoLTIxNDc0ODM2NDctMSk7Ci0g
ICAgYnJhbmNoKGlzWmVybzMyKGRlbm9taW5hdG9yKSwgcmFyZWx5KGRpdkJ5WmVybyksIHVzdWFs
bHkobm90RGl2QnlaZXJvKSk7Ci0KLSAgICBhcHBlbmRUbyhkaXZCeVplcm8sIG5vdERpdkJ5WmVy
byk7Ci0gICAgcmVzdWx0cy5hcHBlbmQoYW5jaG9yKGludDMyWmVybykpOwotICAgIGp1bXAoZG9u
ZSk7Ci0KLSAgICBhcHBlbmRUbyhub3REaXZCeVplcm8sIG5lZzJUb1RoZTMxQnlOZWcxKTsKLSAg
ICBicmFuY2goZXF1YWwobnVtZXJhdG9yLCBuZWcyVG9UaGUzMSksCi0gICAgICAgIHJhcmVseShu
ZWcyVG9UaGUzMUJ5TmVnMSksIHVzdWFsbHkoY29udGludWF0aW9uKSk7Ci0KLSAgICBhcHBlbmRU
byhuZWcyVG9UaGUzMUJ5TmVnMSwgY29udGludWF0aW9uKTsKLSAgICByZXN1bHRzLmFwcGVuZChh
bmNob3IoaW50MzJaZXJvKSk7Ci0gICAganVtcChkb25lKTsKLQotICAgIGFwcGVuZFRvKGNvbnRp
bnVhdGlvbiwgZG9uZSk7Ci0gICAgTFZhbHVlIHJlc3VsdCA9IG1vZChudW1lcmF0b3IsIGRlbm9t
aW5hdG9yKTsKLSAgICByZXN1bHRzLmFwcGVuZChhbmNob3IocmVzdWx0KSk7Ci0gICAganVtcChk
b25lKTsKLQotICAgIGFwcGVuZFRvKGRvbmUsIGxhc3ROZXh0KTsKLSAgICByZXR1cm4gcGhpKGlu
dDMyLCByZXN1bHRzKTsKLX0KLQotTFZhbHVlIE91dHB1dDo6c2Vuc2libGVEb3VibGVUb0ludChM
VmFsdWUgdmFsdWUpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXNYODYoKSk7Ci0gICAgcmV0dXJu
IGNhbGwoCi0gICAgICAgIGludDMyLAotICAgICAgICB4ODZTU0UyQ3Z0VFNEMlNJSW50cmluc2lj
KCksCi0gICAgICAgIGluc2VydEVsZW1lbnQoCi0gICAgICAgICAgICBpbnNlcnRFbGVtZW50KGdl
dFVuZGVmKHZlY3RvclR5cGUoZG91YmxlVHlwZSwgMikpLCB2YWx1ZSwgaW50MzJaZXJvKSwKLSAg
ICAgICAgICAgIGRvdWJsZVplcm8sIGludDMyT25lKSk7Ci19Ci0KLUxWYWx1ZSBPdXRwdXQ6Omxv
YWQoVHlwZWRQb2ludGVyIHBvaW50ZXIsIExUeXBlIHJlZlR5cGUpCi17Ci0gICAgTFZhbHVlIHJl
c3VsdCA9IGdldChpbnRUb1B0cihwb2ludGVyLnZhbHVlKCksIHJlZlR5cGUpKTsKLSAgICBwb2lu
dGVyLmhlYXAoKS5kZWNvcmF0ZUluc3RydWN0aW9uKHJlc3VsdCwgKm1faGVhcHMpOwotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgT3V0cHV0OjpzdG9yZShMVmFsdWUgdmFsdWUsIFR5cGVk
UG9pbnRlciBwb2ludGVyLCBMVHlwZSByZWZUeXBlKQotewotICAgIExWYWx1ZSByZXN1bHQgPSBz
ZXQodmFsdWUsIGludFRvUHRyKHBvaW50ZXIudmFsdWUoKSwgcmVmVHlwZSkpOwotICAgIHBvaW50
ZXIuaGVhcCgpLmRlY29yYXRlSW5zdHJ1Y3Rpb24ocmVzdWx0LCAqbV9oZWFwcyk7Ci19Ci0KLUxW
YWx1ZSBPdXRwdXQ6OmJhc2VJbmRleChMVmFsdWUgYmFzZSwgTFZhbHVlIGluZGV4LCBTY2FsZSBz
Y2FsZSwgcHRyZGlmZl90IG9mZnNldCkKLXsKLSAgICBMVmFsdWUgYWNjdW11bGF0ZWRPZmZzZXQ7
Ci0gICAgICAgIAotICAgIHN3aXRjaCAoc2NhbGUpIHsKLSAgICBjYXNlIFNjYWxlT25lOgotICAg
ICAgICBhY2N1bXVsYXRlZE9mZnNldCA9IGluZGV4OwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFNjYWxlVHdvOgotICAgICAgICBhY2N1bXVsYXRlZE9mZnNldCA9IHNobChpbmRleCwgaW50UHRy
T25lKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTY2FsZUZvdXI6Ci0gICAgICAgIGFjY3Vt
dWxhdGVkT2Zmc2V0ID0gc2hsKGluZGV4LCBpbnRQdHJUd28pOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFNjYWxlRWlnaHQ6Ci0gICAgY2FzZSBTY2FsZVB0cjoKLSAgICAgICAgYWNjdW11bGF0
ZWRPZmZzZXQgPSBzaGwoaW5kZXgsIGludFB0clRocmVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgICAgICAKLSAgICBpZiAob2Zmc2V0KQotICAgICAgICBhY2N1bXVsYXRlZE9mZnNldCA9
IGFkZChhY2N1bXVsYXRlZE9mZnNldCwgY29uc3RJbnRQdHIob2Zmc2V0KSk7Ci0gICAgICAgIAot
ICAgIHJldHVybiBhZGQoYmFzZSwgYWNjdW11bGF0ZWRPZmZzZXQpOwotfQotCi12b2lkIE91dHB1
dDo6YnJhbmNoKExWYWx1ZSBjb25kaXRpb24sIExCYXNpY0Jsb2NrIHRha2VuLCBXZWlnaHQgdGFr
ZW5XZWlnaHQsIExCYXNpY0Jsb2NrIG5vdFRha2VuLCBXZWlnaHQgbm90VGFrZW5XZWlnaHQpCi17
Ci0gICAgTFZhbHVlIGJyYW5jaCA9IGJ1aWxkQ29uZEJyKG1fYnVpbGRlciwgY29uZGl0aW9uLCB0
YWtlbiwgbm90VGFrZW4pOwotICAgIAotICAgIGlmICghdGFrZW5XZWlnaHQgfHwgIW5vdFRha2Vu
V2VpZ2h0KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgZG91YmxlIHRvdGFsID0gdGFrZW5X
ZWlnaHQudmFsdWUoKSArIG5vdFRha2VuV2VpZ2h0LnZhbHVlKCk7Ci0gICAgCi0gICAgc2V0TWV0
YWRhdGEoCi0gICAgICAgIGJyYW5jaCwgcHJvZktpbmQsCi0gICAgICAgIG1kTm9kZSgKLSAgICAg
ICAgICAgIG1fY29udGV4dCwgYnJhbmNoV2VpZ2h0cywKLSAgICAgICAgICAgIGNvbnN0SW50MzIo
dGFrZW5XZWlnaHQuc2NhbGVUb1RvdGFsKHRvdGFsKSksCi0gICAgICAgICAgICBjb25zdEludDMy
KG5vdFRha2VuV2VpZ2h0LnNjYWxlVG9Ub3RhbCh0b3RhbCkpKSk7Ci19Ci0KLXZvaWQgT3V0cHV0
OjpjaGVjayhMVmFsdWUgY29uZGl0aW9uLCBXZWlnaHRlZFRhcmdldCB0YWtlbiwgV2VpZ2h0IG5v
dFRha2VuV2VpZ2h0KQotewotICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0soKnRoaXMsICgiT3V0cHV0OjpjaGVjayBjb250aW51YXRpb24iKSk7Ci0gICAgYnJhbmNo
KGNvbmRpdGlvbiwgdGFrZW4sIFdlaWdodGVkVGFyZ2V0KGNvbnRpbnVhdGlvbiwgbm90VGFrZW5X
ZWlnaHQpKTsKLSAgICBhcHBlbmRUbyhjb250aW51YXRpb24pOwotfQotCi12b2lkIE91dHB1dDo6
Y2hlY2soTFZhbHVlIGNvbmRpdGlvbiwgV2VpZ2h0ZWRUYXJnZXQgdGFrZW4pCi17Ci0gICAgY2hl
Y2soY29uZGl0aW9uLCB0YWtlbiwgdGFrZW4ud2VpZ2h0KCkuaW52ZXJzZSgpKTsKLX0KLQotI2Vu
ZGlmIC8vICFGVExfVVNFU19CMwotCi1MVmFsdWUgT3V0cHV0Ojpsb2FkKFR5cGVkUG9pbnRlciBw
b2ludGVyLCBMb2FkVHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2Ug
TG9hZDhTaWduRXh0MzI6Ci0gICAgICAgIHJldHVybiBsb2FkOFNpZ25FeHQzMihwb2ludGVyKTsK
LSAgICBjYXNlIExvYWQ4WmVyb0V4dDMyOgotICAgICAgICByZXR1cm4gbG9hZDhaZXJvRXh0MzIo
cG9pbnRlcik7Ci0gICAgY2FzZSBMb2FkMTZTaWduRXh0MzI6Ci0gICAgICAgIHJldHVybiBsb2Fk
OFNpZ25FeHQzMihwb2ludGVyKTsKLSAgICBjYXNlIExvYWQxNlplcm9FeHQzMjoKLSAgICAgICAg
cmV0dXJuIGxvYWQ4WmVyb0V4dDMyKHBvaW50ZXIpOwotICAgIGNhc2UgTG9hZDMyOgotICAgICAg
ICByZXR1cm4gbG9hZDMyKHBvaW50ZXIpOwotICAgIGNhc2UgTG9hZDY0OgotICAgICAgICByZXR1
cm4gbG9hZDY0KHBvaW50ZXIpOwotICAgIGNhc2UgTG9hZFB0cjoKLSAgICAgICAgcmV0dXJuIGxv
YWRQdHIocG9pbnRlcik7Ci0gICAgY2FzZSBMb2FkRmxvYXQ6Ci0gICAgICAgIHJldHVybiBsb2Fk
RmxvYXQocG9pbnRlcik7Ci0gICAgY2FzZSBMb2FkRG91YmxlOgotICAgICAgICByZXR1cm4gbG9h
ZERvdWJsZShwb2ludGVyKTsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBPdXRwdXQ6OnN0b3JlKExWYWx1ZSB2
YWx1ZSwgVHlwZWRQb2ludGVyIHBvaW50ZXIsIFN0b3JlVHlwZSB0eXBlKQotewotICAgIHN3aXRj
aCAodHlwZSkgewotICAgIGNhc2UgU3RvcmUzMkFzODoKLSAgICAgICAgc3RvcmUzMkFzOCh2YWx1
ZSwgcG9pbnRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFN0b3JlMzJBczE2OgotICAg
ICAgICBzdG9yZTMyQXMxNih2YWx1ZSwgcG9pbnRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICBj
YXNlIFN0b3JlMzI6Ci0gICAgICAgIHN0b3JlMzIodmFsdWUsIHBvaW50ZXIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBTdG9yZTY0OgotICAgICAgICBzdG9yZTY0KHZhbHVlLCBwb2ludGVy
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgU3RvcmVQdHI6Ci0gICAgICAgIHN0b3JlUHRy
KHZhbHVlLCBwb2ludGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgU3RvcmVGbG9hdDoK
LSAgICAgICAgc3RvcmVGbG9hdCh2YWx1ZSwgcG9pbnRlcik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIFN0b3JlRG91YmxlOgotICAgICAgICBzdG9yZURvdWJsZSh2YWx1ZSwgcG9pbnRlcik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZU
TF9KSVQpCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkocmV2aXNp
b24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1MjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgRlRMT3V0cHV0X2gKLSNkZWZpbmUgRlRM
T3V0cHV0X2gKLQotI2lmIEVOQUJMRShGVExfSklUKQotI2lmICFGVExfVVNFU19CMwotCi0jaW5j
bHVkZSAiREZHQ29tbW9uLmgiCi0jaW5jbHVkZSAiRlRMQWJicmV2aWF0aW9ucy5oIgotI2luY2x1
ZGUgIkZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaCIKLSNpbmNsdWRlICJGVExDb21tb25WYWx1
ZXMuaCIKLSNpbmNsdWRlICJGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgiCi0jaW5jbHVkZSAiRlRM
U3RhdGUuaCIKLSNpbmNsdWRlICJGVExTd2l0Y2hDYXNlLmgiCi0jaW5jbHVkZSAiRlRMVHlwZWRQ
b2ludGVyLmgiCi0jaW5jbHVkZSAiRlRMV2VpZ2h0LmgiCi0jaW5jbHVkZSAiRlRMV2VpZ2h0ZWRU
YXJnZXQuaCIKLSNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KLQotbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgewotCi0vLyBJZGlvbWF0aWMgTExWTSBJUiBidWlsZGVyIHNw
ZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgRlRMLiBUaGlzIHVzZXMgb3VyIG93biBsb3dlcmluZwot
Ly8gdGVybWlub2xvZ3ksIGFuZCBoYXMgc29tZSBvZiBpdHMgb3duIG5vdGlvbnM6Ci0vLwotLy8g
V2Ugc2F5IHRoYXQgYSAicmVmZXJlbmNlIiBpcyB3aGF0IExMVk0gY29uc2lkZXJzIHRvIGJlIGEg
InBvaW50ZXIiLiBUaGF0IGlzLCBpdCBoYXMKLS8vIGFuIGVsZW1lbnQgdHlwZSBhbmQgY2FuIGJl
IHBhc3NlZCBkaXJlY3RseSB0byBtZW1vcnkgYWNjZXNzIGluc3RydWN0aW9ucy4gTm90ZSB0aGF0
Ci0vLyBicm9hZGx5IHNwZWFraW5nIHRoZSB1c2VycyBvZiBGVEw6Ok91dHB1dCBzaG91bGQgb25s
eSB1c2UgcmVmZXJlbmNlcyBmb3IgYWxsb2NhJ2QKLS8vIHNsb3RzIGZvciBtdXRhYmxlIGxvY2Fs
IHZhcmlhYmxlcy4KLS8vCi0vLyBXZSBzYXkgdGhhdCBhICJwb2ludGVyIiBpcyB3aGF0IExMVk0g
Y29uc2lkZXJzIHRvIGJlIGEgcG9pbnRlci13aWR0aCBpbnRlZ2VyLgotLy8KLS8vIFdlIHNheSB0
aGF0IGEgInR5cGVkIHBvaW50ZXIiIGlzIGEgcG9pbnRlciB0aGF0IGNhcnJpZXMgVEJBQSBtZXRh
LWRhdGEgKGkuZS4gYW4KLS8vIEFic3RyYWN0SGVhcCkuIFRoZXNlIHNob3VsZCB1c3VhbGx5IG5v
dCBoYXZlIGZ1cnRoZXIgY29tcHV0YXRpb24gcGVyZm9ybWVkIG9uIHRoZW0KLS8vIHByaW9yIHRv
IGFjY2VzcywgdGhvdWdoIHRoZXJlIGFyZSBleGNlcHRpb25zIChsaWtlIG9mZnNldHRpbmcgaW50
byB0aGUgcGF5bG9hZCBvZgotLy8gYSB0eXBlZCBwb2ludGVyIHRvIGEgSlNWYWx1ZSkuCi0vLwot
Ly8gV2Ugc2F5IHRoYXQgImdldCIgYW5kICJzZXQiIGFyZSB3aGF0IExMVk0gY29uc2lkZXJzIHRv
IGJlICJsb2FkIiBhbmQgInN0b3JlIi4gR2V0Ci0vLyBhbmQgc2V0IHRha2UgcmVmZXJlbmNlcy4K
LS8vCi0vLyBXZSBzYXkgdGhhdCAibG9hZCIgYW5kICJzdG9yZSIgYXJlIG9wZXJhdGlvbnMgdGhh
dCB0YWtlIGEgdHlwZWQgcG9pbnRlci4gVGhlc2UKLS8vIG9wZXJhdGlvbnMgdHJhbnNsYXRlIHRo
ZSBwb2ludGVyIGludG8gYSByZWZlcmVuY2UgKG9yLCBhIHBvaW50ZXIgaW4gTExWTS1zcGVhayks
Ci0vLyBlbWl0IGdldCBvciBzZXQgb24gdGhlIHJlZmVyZW5jZSAob3IsIGxvYWQgYW5kIHN0b3Jl
IGluIExMVk0tc3BlYWspLCBhbmQgYXBwbHkgdGhlCi0vLyBUQkFBIG1ldGEtZGF0YSB0byB0aGUg
Z2V0IG9yIHNldC4KLQotZW51bSBTY2FsZSB7IFNjYWxlT25lLCBTY2FsZVR3bywgU2NhbGVGb3Vy
LCBTY2FsZUVpZ2h0LCBTY2FsZVB0ciB9OwotCi1jbGFzcyBPdXRwdXQgOiBwdWJsaWMgSW50cmlu
c2ljUmVwb3NpdG9yeSB7Ci1wdWJsaWM6Ci0gICAgT3V0cHV0KFN0YXRlJik7Ci0gICAgfk91dHB1
dCgpOwotICAgIAotICAgIHZvaWQgaW5pdGlhbGl6ZShMTW9kdWxlLCBMVmFsdWUsIEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkmKTsKLQotICAgIHZvaWQgc2V0RnJlcXVlbmN5KGRvdWJsZSkgeyB9Ci0g
ICAgCi0gICAgTEJhc2ljQmxvY2sgaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKExCYXNpY0Jsb2NrIG5l
eHRCbG9jaykKLSAgICB7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0QmxvY2sgPSBtX25l
eHRCbG9jazsKLSAgICAgICAgbV9uZXh0QmxvY2sgPSBuZXh0QmxvY2s7Ci0gICAgICAgIHJldHVy
biBsYXN0TmV4dEJsb2NrOwotICAgIH0KLSAgICAKLSAgICBMQmFzaWNCbG9jayBhcHBlbmRUbyhM
QmFzaWNCbG9jaywgTEJhc2ljQmxvY2sgbmV4dEJsb2NrKTsKLSAgICAKLSAgICB2b2lkIGFwcGVu
ZFRvKExCYXNpY0Jsb2NrKTsKLSAgICAKLSAgICBMQmFzaWNCbG9jayBuZXdCbG9jayhjb25zdCBj
aGFyKiBuYW1lID0gIiIpOwotICAgIAotICAgIExWYWx1ZSBwYXJhbSh1bnNpZ25lZCBpbmRleCkg
eyByZXR1cm4gZ2V0UGFyYW0obV9mdW5jdGlvbiwgaW5kZXgpOyB9Ci0gICAgTFZhbHVlIGNvbnN0
Qm9vbChib29sIHZhbHVlKSB7IHJldHVybiBjb25zdEludChib29sZWFuLCB2YWx1ZSk7IH0KLSAg
ICBMVmFsdWUgY29uc3RJbnQzMihpbnQzMl90IHZhbHVlKSB7IHJldHVybiBjb25zdEludChpbnQz
MiwgdmFsdWUpOyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBMVmFsdWUgY29uc3RJ
bnRQdHIoVCogdmFsdWUpIHsgcmV0dXJuIGNvbnN0SW50KGludFB0ciwgYml0d2lzZV9jYXN0PGlu
dHB0cl90Pih2YWx1ZSkpOyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBMVmFsdWUg
Y29uc3RJbnRQdHIoVCB2YWx1ZSkgeyByZXR1cm4gY29uc3RJbnQoaW50UHRyLCBzdGF0aWNfY2Fz
dDxpbnRwdHJfdD4odmFsdWUpKTsgfQotICAgIExWYWx1ZSBjb25zdEludDY0KGludDY0X3QgdmFs
dWUpIHsgcmV0dXJuIGNvbnN0SW50KGludDY0LCB2YWx1ZSk7IH0KLSAgICBMVmFsdWUgY29uc3RE
b3VibGUoZG91YmxlIHZhbHVlKSB7IHJldHVybiBjb25zdFJlYWwoZG91YmxlVHlwZSwgdmFsdWUp
OyB9Ci0gICAgCi0gICAgTFZhbHVlIHBoaShMVHlwZSB0eXBlKSB7IHJldHVybiBidWlsZFBoaSht
X2J1aWxkZXIsIHR5cGUpOyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gUGFyYW1zPgotICAg
IExWYWx1ZSBwaGkoTFR5cGUgdHlwZSwgVmFsdWVGcm9tQmxvY2sgdmFsdWUsIFBhcmFtcy4uLiB0
aGVSZXN0KQotICAgIHsKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHBoaSh0eXBlLCB0aGVSZXN0
Li4uKTsKLSAgICAgICAgYWRkSW5jb21pbmcocmVzdWx0LCB2YWx1ZSk7Ci0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGU+Ci0gICAg
TFZhbHVlIHBoaShMVHlwZSB0eXBlLCBjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpCi0gICAgewot
ICAgICAgICBMVmFsdWUgcmVzdWx0ID0gcGhpKHR5cGUpOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsgKytpKQotICAgICAgICAgICAgYWRkSW5jb21pbmco
cmVzdWx0LCB2ZWN0b3JbaV0pOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICB2
b2lkIGFkZEluY29taW5nVG9QaGkoTFZhbHVlIHBoaSwgVmFsdWVGcm9tQmxvY2sgdmFsdWUpCi0g
ICAgewotICAgICAgICBhZGRJbmNvbWluZyhwaGksIHZhbHVlKTsKLSAgICB9Ci0gICAgCi0gICAg
TFZhbHVlIGFkZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZEFkZCht
X2J1aWxkZXIsIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1ZSBzdWIoTFZhbHVlIGxlZnQsIExW
YWx1ZSByaWdodCkgeyByZXR1cm4gYnVpbGRTdWIobV9idWlsZGVyLCBsZWZ0LCByaWdodCk7IH0K
LSAgICBMVmFsdWUgbXVsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGJ1aWxk
TXVsKG1fYnVpbGRlciwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVlIGRpdihMVmFsdWUgbGVm
dCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZERpdihtX2J1aWxkZXIsIGxlZnQsIHJpZ2h0
KTsgfQotICAgIExWYWx1ZSBjaGlsbERpdihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KTsKLSAg
ICBMVmFsdWUgbW9kKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGJ1aWxkUmVt
KG1fYnVpbGRlciwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVlIGNoaWxsTW9kKExWYWx1ZSBs
ZWZ0LCBMVmFsdWUgcmlnaHQpOwotICAgIExWYWx1ZSBuZWcoTFZhbHVlIHZhbHVlKSB7IHJldHVy
biBidWlsZE5lZyhtX2J1aWxkZXIsIHZhbHVlKTsgfQotCi0gICAgTFZhbHVlIGRvdWJsZUFkZChM
VmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZEZBZGQobV9idWlsZGVyLCBs
ZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUgZG91YmxlU3ViKExWYWx1ZSBsZWZ0LCBMVmFsdWUg
cmlnaHQpIHsgcmV0dXJuIGJ1aWxkRlN1YihtX2J1aWxkZXIsIGxlZnQsIHJpZ2h0KTsgfQotICAg
IExWYWx1ZSBkb3VibGVNdWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gYnVp
bGRGTXVsKG1fYnVpbGRlciwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVlIGRvdWJsZURpdihM
VmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZEZEaXYobV9idWlsZGVyLCBs
ZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUgZG91YmxlTW9kKExWYWx1ZSBsZWZ0LCBMVmFsdWUg
cmlnaHQpIHsgcmV0dXJuIGJ1aWxkRlJlbShtX2J1aWxkZXIsIGxlZnQsIHJpZ2h0KTsgfQotICAg
IExWYWx1ZSBkb3VibGVOZWcoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBidWlsZEZOZWcobV9idWls
ZGVyLCB2YWx1ZSk7IH0KLQotICAgIExWYWx1ZSBiaXRBbmQoTFZhbHVlIGxlZnQsIExWYWx1ZSBy
aWdodCkgeyByZXR1cm4gYnVpbGRBbmQobV9idWlsZGVyLCBsZWZ0LCByaWdodCk7IH0KLSAgICBM
VmFsdWUgYml0T3IoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gYnVpbGRPciht
X2J1aWxkZXIsIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1ZSBiaXRYb3IoTFZhbHVlIGxlZnQs
IExWYWx1ZSByaWdodCkgeyByZXR1cm4gYnVpbGRYb3IobV9idWlsZGVyLCBsZWZ0LCByaWdodCk7
IH0KLSAgICBMVmFsdWUgc2hsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGJ1
aWxkU2hsKG1fYnVpbGRlciwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVlIGFTaHIoTFZhbHVl
IGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gYnVpbGRBU2hyKG1fYnVpbGRlciwgbGVmdCwg
cmlnaHQpOyB9IC8vIGFyaXRobWV0aWMgPSBzaWduZWQKLSAgICBMVmFsdWUgbFNocihMVmFsdWUg
bGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZExTaHIobV9idWlsZGVyLCBsZWZ0LCBy
aWdodCk7IH0gLy8gbG9naWNhbCA9IHVuc2lnbmVkCi0gICAgTFZhbHVlIGJpdE5vdChMVmFsdWUg
dmFsdWUpIHsgcmV0dXJuIGJ1aWxkTm90KG1fYnVpbGRlciwgdmFsdWUpOyB9Ci0gICAgTFZhbHVl
IGxvZ2ljYWxOb3QoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBiaXROb3QodmFsdWUpOyB9Ci0gICAg
Ci0gICAgTFZhbHVlIGluc2VydEVsZW1lbnQoTFZhbHVlIHZlY3RvciwgTFZhbHVlIGVsZW1lbnQs
IExWYWx1ZSBpbmRleCkgeyByZXR1cm4gYnVpbGRJbnNlcnRFbGVtZW50KG1fYnVpbGRlciwgdmVj
dG9yLCBlbGVtZW50LCBpbmRleCk7IH0KLQotICAgIExWYWx1ZSBjdGx6MzIoTFZhbHVlIG9wZXJh
bmQpCi0gICAgewotICAgICAgICByZXR1cm4gY2FsbChpbnQzMiwgY3RsejMySW50cmluc2ljKCks
IG9wZXJhbmQsIGJvb2xlYW5GYWxzZSk7Ci0gICAgfQotICAgIExWYWx1ZSBhZGRXaXRoT3ZlcmZs
b3czMihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNh
bGwoaW50MzIsIGFkZFdpdGhPdmVyZmxvdzMySW50cmluc2ljKCksIGxlZnQsIHJpZ2h0KTsKLSAg
ICB9Ci0gICAgTFZhbHVlIHN1YldpdGhPdmVyZmxvdzMyKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmln
aHQpCi0gICAgewotICAgICAgICByZXR1cm4gY2FsbChpbnQzMiwgc3ViV2l0aE92ZXJmbG93MzJJ
bnRyaW5zaWMoKSwgbGVmdCwgcmlnaHQpOwotICAgIH0KLSAgICBMVmFsdWUgbXVsV2l0aE92ZXJm
bG93MzIoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBj
YWxsKGludDMyLCBtdWxXaXRoT3ZlcmZsb3czMkludHJpbnNpYygpLCBsZWZ0LCByaWdodCk7Ci0g
ICAgfQotICAgIExWYWx1ZSBhZGRXaXRoT3ZlcmZsb3c2NChMVmFsdWUgbGVmdCwgTFZhbHVlIHJp
Z2h0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGwoaW50NjQsIGFkZFdpdGhPdmVyZmxvdzY0
SW50cmluc2ljKCksIGxlZnQsIHJpZ2h0KTsKLSAgICB9Ci0gICAgTFZhbHVlIHN1YldpdGhPdmVy
ZmxvdzY0KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCi0gICAgewotICAgICAgICByZXR1cm4g
Y2FsbChpbnQ2NCwgc3ViV2l0aE92ZXJmbG93NjRJbnRyaW5zaWMoKSwgbGVmdCwgcmlnaHQpOwot
ICAgIH0KLSAgICBMVmFsdWUgbXVsV2l0aE92ZXJmbG93NjQoTFZhbHVlIGxlZnQsIExWYWx1ZSBy
aWdodCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjYWxsKGludDY0LCBtdWxXaXRoT3ZlcmZsb3c2
NEludHJpbnNpYygpLCBsZWZ0LCByaWdodCk7Ci0gICAgfQotICAgIExWYWx1ZSBkb3VibGVBYnMo
TFZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGwoZG91YmxlVHlwZSwgZG91
YmxlQWJzSW50cmluc2ljKCksIHZhbHVlKTsKLSAgICB9Ci0gICAgTFZhbHVlIGRvdWJsZUNlaWwo
TFZhbHVlIG9wZXJhbmQpCi0gICAgewotICAgICAgICByZXR1cm4gY2FsbChkb3VibGVUeXBlLCBj
ZWlsNjRJbnRyaW5zaWMoKSwgb3BlcmFuZCk7Ci0gICAgfQotCi0gICAgTFZhbHVlIGRvdWJsZVNp
bihMVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY2FsbChkb3VibGVUeXBlLCBk
b3VibGVTaW5JbnRyaW5zaWMoKSwgdmFsdWUpOwotICAgIH0KLSAgICBMVmFsdWUgZG91YmxlQ29z
KExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjYWxsKGRvdWJsZVR5cGUsIGRv
dWJsZUNvc0ludHJpbnNpYygpLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgTFZhbHVlIGRvdWJsZVBv
dyhMVmFsdWUgeE9wZXJhbmQsIExWYWx1ZSB5T3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBjYWxsKGRvdWJsZVR5cGUsIGRvdWJsZVBvd0ludHJpbnNpYygpLCB4T3BlcmFuZCwgeU9wZXJh
bmQpOwotICAgIH0KLQotICAgIExWYWx1ZSBkb3VibGVQb3dpKExWYWx1ZSB4T3BlcmFuZCwgTFZh
bHVlIHlPcGVyYW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGwoZG91YmxlVHlwZSwgZG91
YmxlUG93aUludHJpbnNpYygpLCB4T3BlcmFuZCwgeU9wZXJhbmQpOwotICAgIH0KLQotICAgIExW
YWx1ZSBkb3VibGVTcXJ0KExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjYWxs
KGRvdWJsZVR5cGUsIGRvdWJsZVNxcnRJbnRyaW5zaWMoKSwgdmFsdWUpOwotICAgIH0KLQotICAg
IExWYWx1ZSBkb3VibGVMb2coTFZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNh
bGwoZG91YmxlVHlwZSwgZG91YmxlTG9nSW50cmluc2ljKCksIHZhbHVlKTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgYm9vbCBoYXNTZW5zaWJsZURvdWJsZVRvSW50KCkgeyByZXR1cm4gaXNYODYoKTsg
fQotICAgIExWYWx1ZSBzZW5zaWJsZURvdWJsZVRvSW50KExWYWx1ZSk7Ci0gICAgTFZhbHVlIGRv
dWJsZVRvSW50KExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gZnBUb0ludDMyKHZhbHVlKTsgfQotICAg
IExWYWx1ZSBkb3VibGVUb1VJbnQoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBmcFRvVUludDMyKHZh
bHVlKTsgfQotCi0gICAgTFZhbHVlIHNpZ25FeHQzMlRvNjQoTFZhbHVlIHZhbHVlKSB7IHJldHVy
biBzaWduRXh0KHZhbHVlLCBpbnQ2NCk7IH0KLSAgICBMVmFsdWUgemVyb0V4dChMVmFsdWUgdmFs
dWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGJ1aWxkWkV4dChtX2J1aWxkZXIsIHZhbHVlLCB0eXBl
KTsgfQotICAgIExWYWx1ZSB6ZXJvRXh0UHRyKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gemVyb0V4
dCh2YWx1ZSwgaW50UHRyKTsgfQotICAgIExWYWx1ZSBmcFRvSW50MzIoTFZhbHVlIHZhbHVlKSB7
IHJldHVybiBmcFRvSW50KHZhbHVlLCBpbnQzMik7IH0KLSAgICBMVmFsdWUgZnBUb1VJbnQzMihM
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIGZwVG9VSW50KHZhbHVlLCBpbnQzMik7IH0KLSAgICBMVmFs
dWUgaW50VG9Eb3VibGUoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBpbnRUb0ZQKHZhbHVlLCBkb3Vi
bGVUeXBlKTsgfQotICAgIExWYWx1ZSB1bnNpZ25lZFRvRG91YmxlKExWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gdW5zaWduZWRUb0ZQKHZhbHVlLCBkb3VibGVUeXBlKTsgfQotICAgIExWYWx1ZSBjYXN0
VG9JbnQzMihMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIGludENhc3QodmFsdWUsIGludDMyKTsgfQot
ICAgIExWYWx1ZSBkb3VibGVUb0Zsb2F0KExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gZnBDYXN0KHZh
bHVlLCBmbG9hdFR5cGUpOyB9Ci0gICAgTFZhbHVlIGZsb2F0VG9Eb3VibGUoTFZhbHVlIHZhbHVl
KSB7IHJldHVybiBmcENhc3QodmFsdWUsIGRvdWJsZVR5cGUpOyB9Ci0gICAgTFZhbHVlIGludFRv
UHRyKExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRJbnRUb1B0cihtX2J1
aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQotICAgIExWYWx1ZSBwdHJUb0ludChMVmFsdWUgdmFsdWUs
IExUeXBlIHR5cGUpIHsgcmV0dXJuIGJ1aWxkUHRyVG9JbnQobV9idWlsZGVyLCB2YWx1ZSwgdHlw
ZSk7IH0KLSAgICBMVmFsdWUgYml0Q2FzdChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0
dXJuIGJ1aWxkQml0Q2FzdChtX2J1aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQotCi0gICAgTFZhbHVl
IGZyb3VuZChMVmFsdWUgZG91YmxlVmFsdWUpOwotICAgIAotICAgIC8vIEhpbGFyaW91c2x5LCB0
aGUgI2RlZmluZSBtYWNoaW5lcnkgaW4gdGhlIHN0ZGxpYiBtZWFucyB0aGF0IHRoaXMgbWV0aG9k
IGlzIGFjdHVhbGx5IGNhbGxlZAotICAgIC8vIF9fYnVpbHRpbl9hbGxvY2EuIFNvIGZhciB0aGlz
IGFwcGVhcnMgYmVuaWduLiA6LXwKLSAgICBMVmFsdWUgYWxsb2NhKExUeXBlIHR5cGUpIHsgcmV0
dXJuIGJ1aWxkQWxsb2NhKG1fYnVpbGRlciwgdHlwZSk7IH0KLSAgICAKLSAgICAvLyBBY2Nlc3Mg
dGhlIHZhbHVlIG9mIGFuIGFsbG9jYS4gQWxzbyB1c2VkIGFzIGEgbG93LWxldmVsIGltcGxlbWVu
dGF0aW9uIHByaW1pdGl2ZSBmb3IKLSAgICAvLyBsb2FkKCkuIE5ldmVyIHVzZSB0aGlzIHRvIGxv
YWQgZnJvbSAicG9pbnRlcnMiIGluIHRoZSBGVEwgc2Vuc2UsIHNpbmNlIEZUTCBwb2ludGVycwot
ICAgIC8vIGFyZSBhY3R1YWxseSBpbnRlZ2Vycy4gVGhpcyByZXF1aXJlcyBhbiBMTFZNIHBvaW50
ZXIuIEJyb2FkbHkgc3BlYWtpbmcsIHlvdSBkb24ndAotICAgIC8vIGhhdmUgYW55IExMVk0gcG9p
bnRlcnMgZXZlbiBpZiB5b3UgcmVhbGx5IHRoaW5rIHlvdSBkby4gQSBUeXBlZFBvaW50ZXIgaXMg
bm90IGFuCi0gICAgLy8gTExWTSBwb2ludGVyLiBTZWUgY29tbWVudCBibG9jayBhdCB0b3Agb2Yg
dGhpcyBmaWxlIHRvIHVuZGVyc3RhbmQgdGhlIGRpc3RpbmN0aW9uCi0gICAgLy8gYmV0d2VlbiBM
TFZNIHBvaW50ZXJzLCBGVEwgcG9pbnRlcnMsIGFuZCBGVEwgcmVmZXJlbmNlcy4KLSAgICBMVmFs
dWUgZ2V0KExWYWx1ZSByZWZlcmVuY2UpIHsgcmV0dXJuIGJ1aWxkTG9hZChtX2J1aWxkZXIsIHJl
ZmVyZW5jZSk7IH0KLSAgICAvLyBTaW1pbGFyIHRvIGdldCgpIGJ1dCBmb3Igc3RvcmluZyB0byB0
aGUgdmFsdWUgaW4gYW4gYWxsb2NhLgotICAgIExWYWx1ZSBzZXQoTFZhbHVlIHZhbHVlLCBMVmFs
dWUgcmVmZXJlbmNlKSB7IHJldHVybiBidWlsZFN0b3JlKG1fYnVpbGRlciwgdmFsdWUsIHJlZmVy
ZW5jZSk7IH0KLSAgICAKLSAgICBMVmFsdWUgbG9hZChUeXBlZFBvaW50ZXIsIExUeXBlIHJlZlR5
cGUpOwotICAgIHZvaWQgc3RvcmUoTFZhbHVlLCBUeXBlZFBvaW50ZXIsIExUeXBlIHJlZlR5cGUp
OwotCi0gICAgTFZhbHVlIGxvYWQ4U2lnbkV4dDMyKFR5cGVkUG9pbnRlcik7Ci0gICAgTFZhbHVl
IGxvYWQ4WmVyb0V4dDMyKFR5cGVkUG9pbnRlcik7Ci0gICAgTFZhbHVlIGxvYWQxNlNpZ25FeHQz
MihUeXBlZFBvaW50ZXIpOwotICAgIExWYWx1ZSBsb2FkMTZaZXJvRXh0MzIoVHlwZWRQb2ludGVy
KTsKLSAgICBMVmFsdWUgbG9hZDMyKFR5cGVkUG9pbnRlciBwb2ludGVyKSB7IHJldHVybiBsb2Fk
KHBvaW50ZXIsIHJlZjMyKTsgfQotICAgIExWYWx1ZSBsb2FkNjQoVHlwZWRQb2ludGVyIHBvaW50
ZXIpIHsgcmV0dXJuIGxvYWQocG9pbnRlciwgcmVmNjQpOyB9Ci0gICAgTFZhbHVlIGxvYWRQdHIo
VHlwZWRQb2ludGVyIHBvaW50ZXIpIHsgcmV0dXJuIGxvYWQocG9pbnRlciwgcmVmUHRyKTsgfQot
ICAgIExWYWx1ZSBsb2FkRmxvYXQoVHlwZWRQb2ludGVyIHBvaW50ZXIpIHsgcmV0dXJuIGxvYWQo
cG9pbnRlciwgcmVmRmxvYXQpOyB9Ci0gICAgTFZhbHVlIGxvYWREb3VibGUoVHlwZWRQb2ludGVy
IHBvaW50ZXIpIHsgcmV0dXJuIGxvYWQocG9pbnRlciwgcmVmRG91YmxlKTsgfQotCi0gICAgZW51
bSBMb2FkVHlwZSB7Ci0gICAgICAgIExvYWQ4U2lnbkV4dDMyLAotICAgICAgICBMb2FkOFplcm9F
eHQzMiwKLSAgICAgICAgTG9hZDE2U2lnbkV4dDMyLAotICAgICAgICBMb2FkMTZaZXJvRXh0MzIs
Ci0gICAgICAgIExvYWQzMiwKLSAgICAgICAgTG9hZDY0LAotICAgICAgICBMb2FkUHRyLAotICAg
ICAgICBMb2FkRmxvYXQsCi0gICAgICAgIExvYWREb3VibGUKLSAgICB9OwotCi0gICAgTFZhbHVl
IGxvYWQoVHlwZWRQb2ludGVyLCBMb2FkVHlwZSk7Ci0gICAgCi0gICAgdm9pZCBzdG9yZTMyQXM4
KExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2ludGVyIHBvaW50ZXIpIHsgc3RvcmUoaW50Q2FzdCh2YWx1
ZSwgaW50OCksIHBvaW50ZXIsIHJlZjgpOyB9Ci0gICAgdm9pZCBzdG9yZTMyQXMxNihMVmFsdWUg
dmFsdWUsIFR5cGVkUG9pbnRlciBwb2ludGVyKSB7IHN0b3JlKGludENhc3QodmFsdWUsIGludDE2
KSwgcG9pbnRlciwgcmVmMTYpOyB9Ci0gICAgdm9pZCBzdG9yZTMyKExWYWx1ZSB2YWx1ZSwgVHlw
ZWRQb2ludGVyIHBvaW50ZXIpIHsgc3RvcmUodmFsdWUsIHBvaW50ZXIsIHJlZjMyKTsgfQotICAg
IHZvaWQgc3RvcmU2NChMVmFsdWUgdmFsdWUsIFR5cGVkUG9pbnRlciBwb2ludGVyKSB7IHN0b3Jl
KHZhbHVlLCBwb2ludGVyLCByZWY2NCk7IH0KLSAgICB2b2lkIHN0b3JlUHRyKExWYWx1ZSB2YWx1
ZSwgVHlwZWRQb2ludGVyIHBvaW50ZXIpIHsgc3RvcmUodmFsdWUsIHBvaW50ZXIsIHJlZlB0cik7
IH0KLSAgICB2b2lkIHN0b3JlRmxvYXQoTFZhbHVlIHZhbHVlLCBUeXBlZFBvaW50ZXIgcG9pbnRl
cikgeyBzdG9yZSh2YWx1ZSwgcG9pbnRlciwgcmVmRmxvYXQpOyB9Ci0gICAgdm9pZCBzdG9yZURv
dWJsZShMVmFsdWUgdmFsdWUsIFR5cGVkUG9pbnRlciBwb2ludGVyKSB7IHN0b3JlKHZhbHVlLCBw
b2ludGVyLCByZWZEb3VibGUpOyB9Ci0KLSAgICBlbnVtIFN0b3JlVHlwZSB7Ci0gICAgICAgIFN0
b3JlMzJBczgsCi0gICAgICAgIFN0b3JlMzJBczE2LAotICAgICAgICBTdG9yZTMyLAotICAgICAg
ICBTdG9yZTY0LAotICAgICAgICBTdG9yZVB0ciwKLSAgICAgICAgU3RvcmVGbG9hdCwKLSAgICAg
ICAgU3RvcmVEb3VibGUKLSAgICB9OwotCi0gICAgdm9pZCBzdG9yZShMVmFsdWUsIFR5cGVkUG9p
bnRlciwgU3RvcmVUeXBlKTsKLQotICAgIExWYWx1ZSBhZGRQdHIoTFZhbHVlIHZhbHVlLCBwdHJk
aWZmX3QgaW1tZWRpYXRlID0gMCkKLSAgICB7Ci0gICAgICAgIGlmICghaW1tZWRpYXRlKQotICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICByZXR1cm4gYWRkKHZhbHVlLCBjb25zdElu
dFB0cihpbW1lZGlhdGUpKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gQ29uc3RydWN0IGFuIGFkZHJl
c3MgYnkgb2Zmc2V0dGluZyBiYXNlIGJ5IHRoZSByZXF1ZXN0ZWQgYW1vdW50IGFuZCBhc2NyaWJp
bmcKLSAgICAvLyB0aGUgcmVxdWVzdGVkIGFic3RyYWN0IGhlYXAgdG8gaXQuCi0gICAgVHlwZWRQ
b2ludGVyIGFkZHJlc3MoY29uc3QgQWJzdHJhY3RIZWFwJiBoZWFwLCBMVmFsdWUgYmFzZSwgcHRy
ZGlmZl90IG9mZnNldCA9IDApCi0gICAgewotICAgICAgICByZXR1cm4gVHlwZWRQb2ludGVyKGhl
YXAsIGFkZFB0cihiYXNlLCBvZmZzZXQpKTsKLSAgICB9Ci0gICAgLy8gQ29uc3RydWN0IGFuIGFk
ZHJlc3MgYnkgb2Zmc2V0dGluZyBiYXNlIGJ5IHRoZSBhbW91bnQgc3BlY2lmaWVkIGJ5IHRoZSBm
aWVsZCwKLSAgICAvLyBhbmQgb3B0aW9uYWxseSBhbiBhZGRpdGlvbmFsIGFtb3VudCAodXNlIHRo
aXMgd2l0aCBjYXJlKSwgYW5kIHRoZW4gY3JlYXRpbmcKLSAgICAvLyBhIFR5cGVkUG9pbnRlciB3
aXRoIHRoZSBnaXZlbiBmaWVsZCBhcyB0aGUgaGVhcC4KLSAgICBUeXBlZFBvaW50ZXIgYWRkcmVz
cyhMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQsIHB0cmRpZmZfdCBvZmZz
ZXQgPSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZHJlc3MoZmllbGQsIGJhc2UsIG9mZnNl
dCArIGZpZWxkLm9mZnNldCgpKTsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIGJhc2VJbmRleChM
VmFsdWUgYmFzZSwgTFZhbHVlIGluZGV4LCBTY2FsZSwgcHRyZGlmZl90IG9mZnNldCA9IDApOwot
Ci0gICAgVHlwZWRQb2ludGVyIGJhc2VJbmRleChjb25zdCBBYnN0cmFjdEhlYXAmIGhlYXAsIExW
YWx1ZSBiYXNlLCBMVmFsdWUgaW5kZXgsIFNjYWxlIHNjYWxlLCBwdHJkaWZmX3Qgb2Zmc2V0ID0g
MCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlZFBvaW50ZXIoaGVhcCwgYmFzZUluZGV4KGJh
c2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KSk7Ci0gICAgfQotICAgIFR5cGVkUG9pbnRlciBiYXNl
SW5kZXgoSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCwgTFZhbHVlIGJhc2UsIExWYWx1ZSBpbmRl
eCwgSlNWYWx1ZSBpbmRleEFzQ29uc3RhbnQgPSBKU1ZhbHVlKCksIHB0cmRpZmZfdCBvZmZzZXQg
PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGhlYXAuYmFzZUluZGV4KCp0aGlzLCBiYXNlLCBp
bmRleCwgaW5kZXhBc0NvbnN0YW50LCBvZmZzZXQpOwotICAgIH0KLSAgICAKLSAgICBUeXBlZFBv
aW50ZXIgYWJzb2x1dGUodm9pZCogYWRkcmVzcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBl
ZFBvaW50ZXIobV9oZWFwcy0+YWJzb2x1dGVbYWRkcmVzc10sIGNvbnN0SW50UHRyKGFkZHJlc3Mp
KTsKLSAgICB9Ci0KLSAgICBMVmFsdWUgbG9hZDhTaWduRXh0MzIoTFZhbHVlIGJhc2UsIGNvbnN0
IEFic3RyYWN0RmllbGQmIGZpZWxkKSB7IHJldHVybiBsb2FkOFNpZ25FeHQzMihhZGRyZXNzKGJh
c2UsIGZpZWxkKSk7IH0KLSAgICBMVmFsdWUgbG9hZDhaZXJvRXh0MzIoTFZhbHVlIGJhc2UsIGNv
bnN0IEFic3RyYWN0RmllbGQmIGZpZWxkKSB7IHJldHVybiBsb2FkOFplcm9FeHQzMihhZGRyZXNz
KGJhc2UsIGZpZWxkKSk7IH0KLSAgICBMVmFsdWUgbG9hZDE2U2lnbkV4dDMyKExWYWx1ZSBiYXNl
LCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkgeyByZXR1cm4gbG9hZDE2U2lnbkV4dDMyKGFk
ZHJlc3MoYmFzZSwgZmllbGQpKTsgfQotICAgIExWYWx1ZSBsb2FkMTZaZXJvRXh0MzIoTFZhbHVl
IGJhc2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZpZWxkKSB7IHJldHVybiBsb2FkMTZaZXJvRXh0
MzIoYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9Ci0gICAgTFZhbHVlIGxvYWQzMihMVmFsdWUgYmFz
ZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQpIHsgcmV0dXJuIGxvYWQzMihhZGRyZXNzKGJh
c2UsIGZpZWxkKSk7IH0KLSAgICBMVmFsdWUgbG9hZDY0KExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0
cmFjdEZpZWxkJiBmaWVsZCkgeyByZXR1cm4gbG9hZDY0KGFkZHJlc3MoYmFzZSwgZmllbGQpKTsg
fQotICAgIExWYWx1ZSBsb2FkUHRyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBm
aWVsZCkgeyByZXR1cm4gbG9hZFB0cihhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KLSAgICBMVmFs
dWUgbG9hZERvdWJsZShMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQpIHsg
cmV0dXJuIGxvYWREb3VibGUoYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9Ci0gICAgdm9pZCBzdG9y
ZTMyKExWYWx1ZSB2YWx1ZSwgTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZpZWxk
KSB7IHN0b3JlMzIodmFsdWUsIGFkZHJlc3MoYmFzZSwgZmllbGQpKTsgfQotICAgIHZvaWQgc3Rv
cmU2NChMVmFsdWUgdmFsdWUsIExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVs
ZCkgeyBzdG9yZTY0KHZhbHVlLCBhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KLSAgICB2b2lkIHN0
b3JlUHRyKExWYWx1ZSB2YWx1ZSwgTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZp
ZWxkKSB7IHN0b3JlUHRyKHZhbHVlLCBhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KLSAgICB2b2lk
IHN0b3JlRG91YmxlKExWYWx1ZSB2YWx1ZSwgTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0Rmll
bGQmIGZpZWxkKSB7IHN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0K
LSAgICAKLSAgICB2b2lkIGFzY3JpYmVSYW5nZShMVmFsdWUgbG9hZEluc3RydWN0aW9uLCBjb25z
dCBWYWx1ZVJhbmdlJiByYW5nZSkKLSAgICB7Ci0gICAgICAgIHJhbmdlLmRlY29yYXRlSW5zdHJ1
Y3Rpb24obV9jb250ZXh0LCBsb2FkSW5zdHJ1Y3Rpb24sIHJhbmdlS2luZCk7Ci0gICAgfQotICAg
IAotICAgIExWYWx1ZSBub25OZWdhdGl2ZTMyKExWYWx1ZSBsb2FkSW5zdHJ1Y3Rpb24pCi0gICAg
ewotICAgICAgICBhc2NyaWJlUmFuZ2UobG9hZEluc3RydWN0aW9uLCBub25OZWdhdGl2ZUludDMy
KTsKLSAgICAgICAgcmV0dXJuIGxvYWRJbnN0cnVjdGlvbjsKLSAgICB9Ci0gICAgCi0gICAgTFZh
bHVlIGxvYWQzMk5vbk5lZ2F0aXZlKFR5cGVkUG9pbnRlciBwb2ludGVyKSB7IHJldHVybiBub25O
ZWdhdGl2ZTMyKGxvYWQzMihwb2ludGVyKSk7IH0KLSAgICBMVmFsdWUgbG9hZDMyTm9uTmVnYXRp
dmUoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZpZWxkKSB7IHJldHVybiBub25O
ZWdhdGl2ZTMyKGxvYWQzMihiYXNlLCBmaWVsZCkpOyB9Ci0gICAgCi0gICAgTFZhbHVlIGljbXAo
TEludFByZWRpY2F0ZSBjb25kLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBi
dWlsZElDbXAobV9idWlsZGVyLCBjb25kLCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUgZXF1
YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gaWNtcChMTFZNSW50RVEsIGxl
ZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1ZSBub3RFcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJp
Z2h0KSB7IHJldHVybiBpY21wKExMVk1JbnRORSwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVl
IGFib3ZlKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGljbXAoTExWTUludFVH
VCwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVlIGFib3ZlT3JFcXVhbChMVmFsdWUgbGVmdCwg
TFZhbHVlIHJpZ2h0KSB7IHJldHVybiBpY21wKExMVk1JbnRVR0UsIGxlZnQsIHJpZ2h0KTsgfQot
ICAgIExWYWx1ZSBiZWxvdyhMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBpY21w
KExMVk1JbnRVTFQsIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1ZSBiZWxvd09yRXF1YWwoTFZh
bHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gaWNtcChMTFZNSW50VUxFLCBsZWZ0LCBy
aWdodCk7IH0KLSAgICBMVmFsdWUgZ3JlYXRlclRoYW4oTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdo
dCkgeyByZXR1cm4gaWNtcChMTFZNSW50U0dULCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUg
Z3JlYXRlclRoYW5PckVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGlj
bXAoTExWTUludFNHRSwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVlIGxlc3NUaGFuKExWYWx1
ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGljbXAoTExWTUludFNMVCwgbGVmdCwgcmln
aHQpOyB9Ci0gICAgTFZhbHVlIGxlc3NUaGFuT3JFcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJp
Z2h0KSB7IHJldHVybiBpY21wKExMVk1JbnRTTEUsIGxlZnQsIHJpZ2h0KTsgfQotICAgIAotICAg
IExWYWx1ZSBmY21wKExSZWFsUHJlZGljYXRlIGNvbmQsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmln
aHQpIHsgcmV0dXJuIGJ1aWxkRkNtcChtX2J1aWxkZXIsIGNvbmQsIGxlZnQsIHJpZ2h0KTsgfQot
ICAgIExWYWx1ZSBkb3VibGVFcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVy
biBmY21wKExMVk1SZWFsT0VRLCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUgZG91YmxlTm90
RXF1YWxPclVub3JkZXJlZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBmY21w
KExMVk1SZWFsVU5FLCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUgZG91YmxlTGVzc1RoYW4o
TFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gZmNtcChMTFZNUmVhbE9MVCwgbGVm
dCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVlIGRvdWJsZUxlc3NUaGFuT3JFcXVhbChMVmFsdWUgbGVm
dCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBmY21wKExMVk1SZWFsT0xFLCBsZWZ0LCByaWdodCk7
IH0KLSAgICBMVmFsdWUgZG91YmxlR3JlYXRlclRoYW4oTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdo
dCkgeyByZXR1cm4gZmNtcChMTFZNUmVhbE9HVCwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVl
IGRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJl
dHVybiBmY21wKExMVk1SZWFsT0dFLCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUgZG91Ymxl
Tm90RXF1YWxBbmRPcmRlcmVkKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGZj
bXAoTExWTVJlYWxPTkUsIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1ZSBkb3VibGVMZXNzVGhh
bk9yVW5vcmRlcmVkKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGZjbXAoTExW
TVJlYWxVTFQsIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1ZSBkb3VibGVMZXNzVGhhbk9yRXF1
YWxPclVub3JkZXJlZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBmY21wKExM
Vk1SZWFsVUxFLCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUgZG91YmxlR3JlYXRlclRoYW5P
clVub3JkZXJlZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBmY21wKExMVk1S
ZWFsVUdULCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUgZG91YmxlR3JlYXRlclRoYW5PckVx
dWFsT3JVbm9yZGVyZWQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gZmNtcChM
TFZNUmVhbFVHRSwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgCi0gICAgTFZhbHVlIGlzWmVybzMyKExW
YWx1ZSB2YWx1ZSkgeyByZXR1cm4gZXF1YWwodmFsdWUsIGludDMyWmVybyk7IH0KLSAgICBMVmFs
dWUgbm90WmVybzMyKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gbm90RXF1YWwodmFsdWUsIGludDMy
WmVybyk7IH0KLSAgICBMVmFsdWUgaXNaZXJvNjQoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBlcXVh
bCh2YWx1ZSwgaW50NjRaZXJvKTsgfQotICAgIExWYWx1ZSBub3RaZXJvNjQoTFZhbHVlIHZhbHVl
KSB7IHJldHVybiBub3RFcXVhbCh2YWx1ZSwgaW50NjRaZXJvKTsgfQotICAgIExWYWx1ZSBpc051
bGwoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBlcXVhbCh2YWx1ZSwgaW50UHRyWmVybyk7IH0KLSAg
ICBMVmFsdWUgbm90TnVsbChMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIG5vdEVxdWFsKHZhbHVlLCBp
bnRQdHJaZXJvKTsgfQotICAgIAotICAgIExWYWx1ZSB0ZXN0SXNaZXJvMzIoTFZhbHVlIHZhbHVl
LCBMVmFsdWUgbWFzaykgeyByZXR1cm4gaXNaZXJvMzIoYml0QW5kKHZhbHVlLCBtYXNrKSk7IH0K
LSAgICBMVmFsdWUgdGVzdE5vblplcm8zMihMVmFsdWUgdmFsdWUsIExWYWx1ZSBtYXNrKSB7IHJl
dHVybiBub3RaZXJvMzIoYml0QW5kKHZhbHVlLCBtYXNrKSk7IH0KLSAgICBMVmFsdWUgdGVzdElz
WmVybzY0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIG1hc2spIHsgcmV0dXJuIGlzWmVybzY0KGJpdEFu
ZCh2YWx1ZSwgbWFzaykpOyB9Ci0gICAgTFZhbHVlIHRlc3ROb25aZXJvNjQoTFZhbHVlIHZhbHVl
LCBMVmFsdWUgbWFzaykgeyByZXR1cm4gbm90WmVybzY0KGJpdEFuZCh2YWx1ZSwgbWFzaykpOyB9
Ci0gICAgTFZhbHVlIHRlc3RJc1plcm9QdHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykgeyBy
ZXR1cm4gaXNOdWxsKGJpdEFuZCh2YWx1ZSwgbWFzaykpOyB9Ci0gICAgTFZhbHVlIHRlc3ROb25a
ZXJvUHRyKExWYWx1ZSB2YWx1ZSwgTFZhbHVlIG1hc2spIHsgcmV0dXJuIG5vdE51bGwoYml0QW5k
KHZhbHVlLCBtYXNrKSk7IH0KLSAgICAKLSAgICBMVmFsdWUgc2VsZWN0KExWYWx1ZSB2YWx1ZSwg
TFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pIHsgcmV0dXJuIGJ1aWxkU2VsZWN0KG1fYnVp
bGRlciwgdmFsdWUsIHRha2VuLCBub3RUYWtlbik7IH0KLSAgICBMVmFsdWUgZXh0cmFjdFZhbHVl
KExWYWx1ZSBhZ2dWYWwsIHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBidWlsZEV4dHJhY3RWYWx1
ZShtX2J1aWxkZXIsIGFnZ1ZhbCwgaW5kZXgpOyB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmVjdG9yVHlwZT4KLSAgICBMVmFsdWUgY2FsbChMVHlwZSwgTFZhbHVlIGZ1bmN0aW9uLCBj
b25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1
bmN0aW9uLCB2ZWN0b3IpOyB9Ci0gICAgTFZhbHVlIGNhbGwoTFR5cGUsIExWYWx1ZSBmdW5jdGlv
bikgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24pOyB9Ci0gICAgTFZhbHVl
IGNhbGwoTFR5cGUsIExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEpIHsgcmV0dXJuIGJ1aWxk
Q2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxKTsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3M+Ci0gICAgTFZhbHVlIGNhbGwoTFR5cGUsIExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVl
IGFyZzEsIEFyZ3MuLi4gYXJncykgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rp
b24sIGFyZzEsIGFyZ3MuLi4pOyB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rp
b25UeXBlPgotICAgIExWYWx1ZSBvcGVyYXRpb24oRnVuY3Rpb25UeXBlIGZ1bmN0aW9uKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGludFRvUHRyKGNvbnN0SW50UHRyKGZ1bmN0aW9uKSwgcG9pbnRl
clR5cGUob3BlcmF0aW9uVHlwZShmdW5jdGlvbikpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBq
dW1wKExCYXNpY0Jsb2NrIGRlc3RpbmF0aW9uKSB7IGJ1aWxkQnIobV9idWlsZGVyLCBkZXN0aW5h
dGlvbik7IH0KLSAgICB2b2lkIGJyYW5jaChMVmFsdWUgY29uZGl0aW9uLCBMQmFzaWNCbG9jayB0
YWtlbiwgV2VpZ2h0IHRha2VuV2VpZ2h0LCBMQmFzaWNCbG9jayBub3RUYWtlbiwgV2VpZ2h0IG5v
dFRha2VuV2VpZ2h0KTsKLSAgICB2b2lkIGJyYW5jaChMVmFsdWUgY29uZGl0aW9uLCBXZWlnaHRl
ZFRhcmdldCB0YWtlbiwgV2VpZ2h0ZWRUYXJnZXQgbm90VGFrZW4pCi0gICAgewotICAgICAgICBi
cmFuY2goY29uZGl0aW9uLCB0YWtlbi50YXJnZXQoKSwgdGFrZW4ud2VpZ2h0KCksIG5vdFRha2Vu
LnRhcmdldCgpLCBub3RUYWtlbi53ZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgLy8gQnJhbmNoZXMg
dG8gYW4gYWxyZWFkeS1jcmVhdGVkIGhhbmRsZXIgaWYgdHJ1ZSwgImZhbGxzIHRocm91Z2giIGlm
IGZhbHNlLiBGYWxsLXRocm91Z2ggaXMKLSAgICAvLyBzaW11bGF0ZWQgYnkgY3JlYXRpbmcgYSBj
b250aW51YXRpb24gZm9yIHlvdS4KLSAgICB2b2lkIGNoZWNrKExWYWx1ZSBjb25kaXRpb24sIFdl
aWdodGVkVGFyZ2V0IHRha2VuLCBXZWlnaHQgbm90VGFrZW5XZWlnaHQpOwotICAgIAotICAgIC8v
IFNhbWUgYXMgY2hlY2soKSwgYnV0IHVzZXMgV2VpZ2h0OjppbnZlcnNlKCkgdG8gY29tcHV0ZSB0
aGUgbm90VGFrZW5XZWlnaHQuCi0gICAgdm9pZCBjaGVjayhMVmFsdWUgY29uZGl0aW9uLCBXZWln
aHRlZFRhcmdldCB0YWtlbik7Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlw
ZT4KLSAgICB2b2lkIHN3aXRjaEluc3RydWN0aW9uKExWYWx1ZSB2YWx1ZSwgY29uc3QgVmVjdG9y
VHlwZSYgY2FzZXMsIExCYXNpY0Jsb2NrIGZhbGxUaHJvdWdoLCBXZWlnaHQgZmFsbFRocm91Z2hX
ZWlnaHQpCi0gICAgewotICAgICAgICBMVmFsdWUgaW5zdCA9IGJ1aWxkU3dpdGNoKG1fYnVpbGRl
ciwgdmFsdWUsIGNhc2VzLCBmYWxsVGhyb3VnaCk7Ci0gICAgICAgIAotICAgICAgICBkb3VibGUg
dG90YWwgPSAwOwotICAgICAgICBpZiAoIWZhbGxUaHJvdWdoV2VpZ2h0KQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB0b3RhbCArPSBmYWxsVGhyb3VnaFdlaWdodC52YWx1ZSgpOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjYXNlcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAg
IGlmICghY2FzZXNbaV0ud2VpZ2h0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgdG90YWwgKz0gY2FzZXNbaV0ud2VpZ2h0KCkudmFsdWUoKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgVmVjdG9yPExWYWx1ZT4gbWRBcmdzOwotICAgICAgICBtZEFyZ3MuYXBw
ZW5kKGJyYW5jaFdlaWdodHMpOwotICAgICAgICBtZEFyZ3MuYXBwZW5kKGNvbnN0SW50MzIoZmFs
bFRocm91Z2hXZWlnaHQuc2NhbGVUb1RvdGFsKHRvdGFsKSkpOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgY2FzZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtZEFyZ3MuYXBw
ZW5kKGNvbnN0SW50MzIoY2FzZXNbaV0ud2VpZ2h0KCkuc2NhbGVUb1RvdGFsKHRvdGFsKSkpOwot
ICAgICAgICAKLSAgICAgICAgc2V0TWV0YWRhdGEoaW5zdCwgcHJvZktpbmQsIG1kTm9kZShtX2Nv
bnRleHQsIG1kQXJncykpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHJldChMVmFsdWUgdmFsdWUp
IHsgYnVpbGRSZXQobV9idWlsZGVyLCB2YWx1ZSk7IH0KLSAgICAKLSAgICB2b2lkIHVucmVhY2hh
YmxlKCkgeyBidWlsZFVucmVhY2hhYmxlKG1fYnVpbGRlcik7IH0KLSAgICAKLSAgICB2b2lkIHRy
YXAoKQotICAgIHsKLSAgICAgICAgY2FsbCh2b2lkVHlwZSwgdHJhcEludHJpbnNpYygpKTsKLSAg
ICB9Ci0gICAgCi0gICAgVmFsdWVGcm9tQmxvY2sgYW5jaG9yKExWYWx1ZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBWYWx1ZUZyb21CbG9jayh2YWx1ZSwgbV9ibG9jayk7Ci0gICAgfQot
ICAgIAotICAgIExWYWx1ZSBtX2Z1bmN0aW9uOwotICAgIEFic3RyYWN0SGVhcFJlcG9zaXRvcnkq
IG1faGVhcHM7Ci0gICAgTEJ1aWxkZXIgbV9idWlsZGVyOwotICAgIExCYXNpY0Jsb2NrIG1fYmxv
Y2s7Ci0gICAgTEJhc2ljQmxvY2sgbV9uZXh0QmxvY2s7Ci0KLXByaXZhdGU6Ci0gICAgTFZhbHVl
IGludENhc3QoTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJldHVybiBidWlsZEludENhc3Qo
bV9idWlsZGVyLCB2YWx1ZSwgdHlwZSk7IH0KLSAgICBMVmFsdWUgZnBUb0ludChMVmFsdWUgdmFs
dWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGJ1aWxkRlBUb1NJKG1fYnVpbGRlciwgdmFsdWUsIHR5
cGUpOyB9Ci0gICAgTFZhbHVlIGZwVG9VSW50KExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyBy
ZXR1cm4gYnVpbGRGUFRvVUkobV9idWlsZGVyLCB2YWx1ZSwgdHlwZSk7IH0KLSAgICBMVmFsdWUg
ZnBDYXN0KExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRGUENhc3QobV9i
dWlsZGVyLCB2YWx1ZSwgdHlwZSk7IH0KLSAgICBMVmFsdWUgaW50VG9GUChMVmFsdWUgdmFsdWUs
IExUeXBlIHR5cGUpIHsgcmV0dXJuIGJ1aWxkU0lUb0ZQKG1fYnVpbGRlciwgdmFsdWUsIHR5cGUp
OyB9Ci0gICAgTFZhbHVlIHVuc2lnbmVkVG9GUChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsg
cmV0dXJuIGJ1aWxkVUlUb0ZQKG1fYnVpbGRlciwgdmFsdWUsIHR5cGUpOyB9Ci0gICAgTFZhbHVl
IHNpZ25FeHQoTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJldHVybiBidWlsZFNFeHQobV9i
dWlsZGVyLCB2YWx1ZSwgdHlwZSk7IH0KLX07Ci0KLWlubGluZSBMVmFsdWUgT3V0cHV0Ojpsb2Fk
OFNpZ25FeHQzMihUeXBlZFBvaW50ZXIgcG9pbnRlcikKLXsKLSAgICBMVmFsdWUgdmFsdWU4ID0g
bG9hZChwb2ludGVyLCByZWY4KTsKLSAgICByZXR1cm4gc2lnbkV4dCh2YWx1ZTgsIGludDMyKTsK
LX0KLQotaW5saW5lIExWYWx1ZSBPdXRwdXQ6OmxvYWQ4WmVyb0V4dDMyKFR5cGVkUG9pbnRlciBw
b2ludGVyKQotewotICAgIExWYWx1ZSB2YWx1ZTggPSBsb2FkKHBvaW50ZXIsIHJlZjgpOwotICAg
IHJldHVybiB6ZXJvRXh0KHZhbHVlOCwgaW50MzIpOwotfQotCi1pbmxpbmUgTFZhbHVlIE91dHB1
dDo6bG9hZDE2U2lnbkV4dDMyKFR5cGVkUG9pbnRlciBwb2ludGVyKQotewotICAgIExWYWx1ZSB2
YWx1ZTE2ID0gbG9hZChwb2ludGVyLCByZWYxNik7Ci0gICAgcmV0dXJuIHNpZ25FeHQodmFsdWUx
NiwgaW50MzIpOwotfQotCi1pbmxpbmUgTFZhbHVlIE91dHB1dDo6bG9hZDE2WmVyb0V4dDMyKFR5
cGVkUG9pbnRlciBwb2ludGVyKQotewotICAgIExWYWx1ZSB2YWx1ZTE2ID0gbG9hZChwb2ludGVy
LCByZWYxNik7Ci0gICAgcmV0dXJuIHplcm9FeHQodmFsdWUxNiwgaW50MzIpOwotfQotCi1pbmxp
bmUgTFZhbHVlIE91dHB1dDo6ZnJvdW5kKExWYWx1ZSBkb3VibGVWYWx1ZSkKLXsKLSAgICBMVmFs
dWUgZmxvYXRWYWx1ZSA9IGJ1aWxkRlBDYXN0KG1fYnVpbGRlciwgZG91YmxlVmFsdWUsIGZsb2F0
VHlwZSk7Ci0gICAgcmV0dXJuIGJ1aWxkRlBDYXN0KG1fYnVpbGRlciwgZmxvYXRWYWx1ZSwgZG91
YmxlVHlwZSk7Ci19Ci0KLSNkZWZpbmUgRlRMX05FV19CTE9DSyhvdXRwdXQsIG5hbWVBcmd1bWVu
dHMpIFwKLSAgICAoTElLRUxZKCF2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpIFwKLSAgICA/
IChvdXRwdXQpLm5ld0Jsb2NrKCkgXAotICAgIDogKG91dHB1dCkubmV3QmxvY2soKHRvQ1N0cmlu
ZyBuYW1lQXJndW1lbnRzKS5kYXRhKCkpKQotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCi0K
LSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLQotI2Vu
ZGlmIC8vIEZUTE91dHB1dF9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmNwcAkocmV2aXNpb24g
MTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExQYXRjaHBvaW50RXhjZXB0
aW9uSGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaCIKIAot
I2lmIEVOQUJMRShGVExfSklUKSAmJiBGVExfVVNFU19CMworI2lmIEVOQUJMRShGVExfSklUKQog
CiAjaW5jbHVkZSAiQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaCIKICNpbmNsdWRlICJGVExF
eGNlcHRpb25UYXJnZXQuaCIKQEAgLTExNyw1ICsxMTcsNSBAQCBSZWZQdHI8T1NSRXhpdEhhbmRs
ZT4gUGF0Y2hwb2ludEV4Y2VwdGlvCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAotI2Vu
ZGlmIC8vIEVOQUJMRShGVExfSklUKSAmJiBGVExfVVNFU19CMworI2VuZGlmIC8vIEVOQUJMRShG
VExfSklUKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFBhdGNocG9pbnRF
eGNlcHRpb25IYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaAkocmV2aXNpb24gMTk2Njg1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgog
Ci0jaWYgRU5BQkxFKEZUTF9KSVQpICYmIEZUTF9VU0VTX0IzCisjaWYgRU5BQkxFKEZUTF9KSVQp
CiAKICNpbmNsdWRlICJERkdOb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiRXhpdEtpbmQuaCIKQEAg
LTEwMCw3ICsxMDAsNyBAQCBwcml2YXRlOgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAK
LSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkgJiYgRlRMX1VTRVNfQjMKKyNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKIAogI2VuZGlmIC8vIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGVfaAog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGFja01hcHMuY3BwCShyZXZp
c2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzAwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkZUTFN0YWNrTWFwcy5oIgotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0KLSNpbmNsdWRl
ICJGVExMb2NhdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KLSNpbmNsdWRl
IDx3dGYvRGF0YUxvZy5oPgotI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgotCi1uYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1UIHJlYWRPYmpl
Y3QoU3RhY2tNYXBzOjpQYXJzZUNvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgVCByZXN1bHQ7Ci0g
ICAgcmVzdWx0LnBhcnNlKGNvbnRleHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQg
U3RhY2tNYXBzOjpDb25zdGFudDo6cGFyc2UoU3RhY2tNYXBzOjpQYXJzZUNvbnRleHQmIGNvbnRl
eHQpCi17Ci0gICAgaW50ZWdlciA9IGNvbnRleHQudmlldy0+cmVhZDxpbnQ2NF90Pihjb250ZXh0
Lm9mZnNldCwgdHJ1ZSk7Ci19Ci0KLXZvaWQgU3RhY2tNYXBzOjpDb25zdGFudDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIG91dC5wcmludGYoIjB4JTAxNmxseCIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oaW50ZWdlcikpOwotfQotCi12b2lkIFN0YWNrTWFw
czo6U3RhY2tTaXplOjpwYXJzZShTdGFja01hcHM6OlBhcnNlQ29udGV4dCYgY29udGV4dCkKLXsK
LSAgICBzd2l0Y2ggKGNvbnRleHQudmVyc2lvbikgewotICAgIGNhc2UgMDoKLSAgICAgICAgZnVu
Y3Rpb25PZmZzZXQgPSBjb250ZXh0LnZpZXctPnJlYWQ8dWludDMyX3Q+KGNvbnRleHQub2Zmc2V0
LCB0cnVlKTsKLSAgICAgICAgc2l6ZSA9IGNvbnRleHQudmlldy0+cmVhZDx1aW50MzJfdD4oY29u
dGV4dC5vZmZzZXQsIHRydWUpOwotICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgZGVmYXVs
dDoKLSAgICAgICAgZnVuY3Rpb25PZmZzZXQgPSBjb250ZXh0LnZpZXctPnJlYWQ8dWludDY0X3Q+
KGNvbnRleHQub2Zmc2V0LCB0cnVlKTsKLSAgICAgICAgc2l6ZSA9IGNvbnRleHQudmlldy0+cmVh
ZDx1aW50NjRfdD4oY29udGV4dC5vZmZzZXQsIHRydWUpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci19Ci0KLXZvaWQgU3RhY2tNYXBzOjpTdGFja1NpemU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKLXsKLSAgICBvdXQucHJpbnQoIihvZmY6IiwgZnVuY3Rpb25PZmZzZXQsICIsIHNpemU6
Iiwgc2l6ZSwgIikiKTsKLX0KLQotdm9pZCBTdGFja01hcHM6OkxvY2F0aW9uOjpwYXJzZShTdGFj
a01hcHM6OlBhcnNlQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBraW5kID0gc3RhdGljX2Nhc3Q8
S2luZD4oY29udGV4dC52aWV3LT5yZWFkPHVpbnQ4X3Q+KGNvbnRleHQub2Zmc2V0LCB0cnVlKSk7
Ci0gICAgc2l6ZSA9IGNvbnRleHQudmlldy0+cmVhZDx1aW50OF90Pihjb250ZXh0Lm9mZnNldCwg
dHJ1ZSk7Ci0gICAgZHdhcmZSZWcgPSBEV0FSRlJlZ2lzdGVyKGNvbnRleHQudmlldy0+cmVhZDx1
aW50MTZfdD4oY29udGV4dC5vZmZzZXQsIHRydWUpKTsKLSAgICB0aGlzLT5vZmZzZXQgPSBjb250
ZXh0LnZpZXctPnJlYWQ8aW50MzJfdD4oY29udGV4dC5vZmZzZXQsIHRydWUpOwotfQotCi12b2lk
IFN0YWNrTWFwczo6TG9jYXRpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAg
ICBvdXQucHJpbnQoIigiLCBraW5kLCAiLCAiLCBkd2FyZlJlZywgIiwgb2ZmOiIsIG9mZnNldCwg
Iiwgc2l6ZToiLCBzaXplLCAiKSIpOwotfQotCi1HUFJSZWcgU3RhY2tNYXBzOjpMb2NhdGlvbjo6
ZGlyZWN0R1BSKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRlRMOjpMb2NhdGlvbjo6Zm9yU3RhY2tt
YXBzKG51bGxwdHIsICp0aGlzKS5kaXJlY3RHUFIoKTsKLX0KLQotdm9pZCBTdGFja01hcHM6Okxv
Y2F0aW9uOjpyZXN0b3JlSW50bygKLSAgICBNYWNyb0Fzc2VtYmxlciYgaml0LCBTdGFja01hcHMm
IHN0YWNrbWFwcywgY2hhciogc2F2ZWRSZWdpc3RlcnMsIEdQUlJlZyByZXN1bHQpIGNvbnN0Ci17
Ci0gICAgRlRMOjpMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKCZzdGFja21hcHMsICp0aGlzKS5yZXN0
b3JlSW50byhqaXQsIHNhdmVkUmVnaXN0ZXJzLCByZXN1bHQpOwotfQotCi12b2lkIFN0YWNrTWFw
czo6TGl2ZU91dDo6cGFyc2UoU3RhY2tNYXBzOjpQYXJzZUNvbnRleHQmIGNvbnRleHQpCi17Ci0g
ICAgZHdhcmZSZWcgPSBEV0FSRlJlZ2lzdGVyKGNvbnRleHQudmlldy0+cmVhZDx1aW50MTZfdD4o
Y29udGV4dC5vZmZzZXQsIHRydWUpKTsgLy8gcmVnbnVtCi0gICAgY29udGV4dC52aWV3LT5yZWFk
PHVpbnQ4X3Q+KGNvbnRleHQub2Zmc2V0LCB0cnVlKTsgLy8gcmVzZXJ2ZWQKLSAgICBzaXplID0g
Y29udGV4dC52aWV3LT5yZWFkPHVpbnQ4X3Q+KGNvbnRleHQub2Zmc2V0LCB0cnVlKTsgLy8gc2l6
ZSBpbiBieXRlcwotfQotCi12b2lkIFN0YWNrTWFwczo6TGl2ZU91dDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAotewotICAgIG91dC5wcmludCgiKCIsIGR3YXJmUmVnLCAiLCAiLCBzaXpl
LCAiKSIpOwotfQotCi1ib29sIFN0YWNrTWFwczo6UmVjb3JkOjpwYXJzZShTdGFja01hcHM6OlBh
cnNlQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpbnQ2NF90IGlkID0gY29udGV4dC52aWV3LT5y
ZWFkPGludDY0X3Q+KGNvbnRleHQub2Zmc2V0LCB0cnVlKTsKLSAgICBBU1NFUlQoc3RhdGljX2Nh
c3Q8aW50MzJfdD4oaWQpID09IGlkKTsKLSAgICBwYXRjaHBvaW50SUQgPSBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oaWQpOwotICAgIGlmIChzdGF0aWNfY2FzdDxpbnQzMl90PihwYXRjaHBvaW50SUQp
IDwgMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGluc3RydWN0aW9uT2Zmc2V0
ID0gY29udGV4dC52aWV3LT5yZWFkPHVpbnQzMl90Pihjb250ZXh0Lm9mZnNldCwgdHJ1ZSk7Ci0g
ICAgZmxhZ3MgPSBjb250ZXh0LnZpZXctPnJlYWQ8dWludDE2X3Q+KGNvbnRleHQub2Zmc2V0LCB0
cnVlKTsKLSAgICAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBjb250ZXh0LnZpZXctPnJlYWQ8dWlu
dDE2X3Q+KGNvbnRleHQub2Zmc2V0LCB0cnVlKTsKLSAgICB3aGlsZSAobGVuZ3RoLS0pCi0gICAg
ICAgIGxvY2F0aW9ucy5hcHBlbmQocmVhZE9iamVjdDxMb2NhdGlvbj4oY29udGV4dCkpOwotICAg
IAotICAgIGlmIChjb250ZXh0LnZlcnNpb24gPj0gMSkKLSAgICAgICAgY29udGV4dC52aWV3LT5y
ZWFkPHVpbnQxNl90Pihjb250ZXh0Lm9mZnNldCwgdHJ1ZSk7IC8vIHBhZGRpbmcKLQotICAgIHVu
c2lnbmVkIG51bUxpdmVPdXRzID0gY29udGV4dC52aWV3LT5yZWFkPHVpbnQxNl90Pihjb250ZXh0
Lm9mZnNldCwgdHJ1ZSk7Ci0gICAgd2hpbGUgKG51bUxpdmVPdXRzLS0pCi0gICAgICAgIGxpdmVP
dXRzLmFwcGVuZChyZWFkT2JqZWN0PExpdmVPdXQ+KGNvbnRleHQpKTsKLQotICAgIGlmIChjb250
ZXh0LnZlcnNpb24gPj0gMSkgewotICAgICAgICBpZiAoY29udGV4dC5vZmZzZXQgJiA3KSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoIShjb250ZXh0Lm9mZnNldCAmIDMpKTsKLSAgICAgICAgICAgIGNv
bnRleHQudmlldy0+cmVhZDx1aW50MzJfdD4oY29udGV4dC5vZmZzZXQsIHRydWUpOyAvLyBwYWRk
aW5nCi0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
U3RhY2tNYXBzOjpSZWNvcmQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBv
dXQucHJpbnQoCi0gICAgICAgICIoIyIsIHBhdGNocG9pbnRJRCwgIiwgb2Zmc2V0ID0gIiwgaW5z
dHJ1Y3Rpb25PZmZzZXQsICIsIGZsYWdzID0gIiwgZmxhZ3MsCi0gICAgICAgICIsIGxvY2F0aW9u
cyA9IFsiLCBsaXN0RHVtcChsb2NhdGlvbnMpLCAiXSwgbGl2ZU91dHMgPSBbIiwKLSAgICAgICAg
bGlzdER1bXAobGl2ZU91dHMpLCAiXSkiKTsKLX0KLQotUmVnaXN0ZXJTZXQgU3RhY2tNYXBzOjpS
ZWNvcmQ6OmxvY2F0aW9uU2V0KCkgY29uc3QKLXsKLSAgICBSZWdpc3RlclNldCByZXN1bHQ7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gbG9jYXRpb25zLnNpemUoKTsgaS0tOykgewotICAgICAgICBS
ZWcgcmVnID0gbG9jYXRpb25zW2ldLmR3YXJmUmVnLnJlZygpOwotICAgICAgICBpZiAoIXJlZykK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICByZXN1bHQuc2V0KHJlZyk7Ci0gICAgfQot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJlZ2lzdGVyU2V0IFN0YWNrTWFwczo6UmVjb3JkOjps
aXZlT3V0c1NldCgpIGNvbnN0Ci17Ci0gICAgUmVnaXN0ZXJTZXQgcmVzdWx0OwotICAgIGZvciAo
dW5zaWduZWQgaSA9IGxpdmVPdXRzLnNpemUoKTsgaS0tOykgewotICAgICAgICBMaXZlT3V0IGxp
dmVPdXQgPSBsaXZlT3V0c1tpXTsKLSAgICAgICAgUmVnIHJlZyA9IGxpdmVPdXQuZHdhcmZSZWcu
cmVnKCk7Ci0gICAgICAgIC8vIEZJWE1FOiBFaXRoZXIgYXNzZXJ0IHRoYXQgc2l6ZSBpcyBub3Qg
Z3JlYXRlciB0aGFuIHNpemVvZihwb2ludGVyKSwgb3IgYWN0dWFsbHkKLSAgICAgICAgLy8gc2F2
ZSB0aGUgaGlnaCBiaXRzIG9mIHJlZ2lzdGVycy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDg4NQotICAgICAgICBpZiAoIXJlZykgewotICAg
ICAgICAgICAgZGF0YUxvZygiSW52YWxpZCBsaXZlT3V0cyBlbnRyeSBpbjogIiwgKnRoaXMsICJc
biIpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
fQotICAgICAgICByZXN1bHQuc2V0KHJlZyk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLVJlZ2lzdGVyU2V0IFN0YWNrTWFwczo6UmVjb3JkOjp1c2VkUmVnaXN0ZXJTZXQoKSBjb25z
dAotewotICAgIFJlZ2lzdGVyU2V0IHJlc3VsdDsKLSAgICByZXN1bHQubWVyZ2UobG9jYXRpb25T
ZXQoKSk7Ci0gICAgcmVzdWx0Lm1lcmdlKGxpdmVPdXRzU2V0KCkpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLWJvb2wgU3RhY2tNYXBzOjpwYXJzZShEYXRhVmlldyogdmlldykKLXsKLSAgICBQ
YXJzZUNvbnRleHQgY29udGV4dDsKLSAgICBjb250ZXh0Lm9mZnNldCA9IDA7Ci0gICAgY29udGV4
dC52aWV3ID0gdmlldzsKLSAgICAKLSAgICB2ZXJzaW9uID0gY29udGV4dC52ZXJzaW9uID0gY29u
dGV4dC52aWV3LT5yZWFkPHVpbnQ4X3Q+KGNvbnRleHQub2Zmc2V0LCB0cnVlKTsKLQotICAgIGNv
bnRleHQudmlldy0+cmVhZDx1aW50OF90Pihjb250ZXh0Lm9mZnNldCwgdHJ1ZSk7IC8vIFJlc2Vy
dmVkCi0gICAgY29udGV4dC52aWV3LT5yZWFkPHVpbnQ4X3Q+KGNvbnRleHQub2Zmc2V0LCB0cnVl
KTsgLy8gUmVzZXJ2ZWQKLSAgICBjb250ZXh0LnZpZXctPnJlYWQ8dWludDhfdD4oY29udGV4dC5v
ZmZzZXQsIHRydWUpOyAvLyBSZXNlcnZlZAotCi0gICAgdWludDMyX3QgbnVtRnVuY3Rpb25zOwot
ICAgIHVpbnQzMl90IG51bUNvbnN0YW50czsKLSAgICB1aW50MzJfdCBudW1SZWNvcmRzOwotICAg
IAotICAgIG51bUZ1bmN0aW9ucyA9IGNvbnRleHQudmlldy0+cmVhZDx1aW50MzJfdD4oY29udGV4
dC5vZmZzZXQsIHRydWUpOwotICAgIGlmIChjb250ZXh0LnZlcnNpb24gPj0gMSkgewotICAgICAg
ICBudW1Db25zdGFudHMgPSBjb250ZXh0LnZpZXctPnJlYWQ8dWludDMyX3Q+KGNvbnRleHQub2Zm
c2V0LCB0cnVlKTsKLSAgICAgICAgbnVtUmVjb3JkcyA9IGNvbnRleHQudmlldy0+cmVhZDx1aW50
MzJfdD4oY29udGV4dC5vZmZzZXQsIHRydWUpOwotICAgIH0KLSAgICB3aGlsZSAobnVtRnVuY3Rp
b25zLS0pCi0gICAgICAgIHN0YWNrU2l6ZXMuYXBwZW5kKHJlYWRPYmplY3Q8U3RhY2tTaXplPihj
b250ZXh0KSk7Ci0gICAgCi0gICAgaWYgKCFjb250ZXh0LnZlcnNpb24pCi0gICAgICAgIG51bUNv
bnN0YW50cyA9IGNvbnRleHQudmlldy0+cmVhZDx1aW50MzJfdD4oY29udGV4dC5vZmZzZXQsIHRy
dWUpOwotICAgIHdoaWxlIChudW1Db25zdGFudHMtLSkKLSAgICAgICAgY29uc3RhbnRzLmFwcGVu
ZChyZWFkT2JqZWN0PENvbnN0YW50Pihjb250ZXh0KSk7Ci0gICAgCi0gICAgaWYgKCFjb250ZXh0
LnZlcnNpb24pCi0gICAgICAgIG51bVJlY29yZHMgPSBjb250ZXh0LnZpZXctPnJlYWQ8dWludDMy
X3Q+KGNvbnRleHQub2Zmc2V0LCB0cnVlKTsKLSAgICB3aGlsZSAobnVtUmVjb3Jkcy0tKSB7Ci0g
ICAgICAgIFJlY29yZCByZWNvcmQ7Ci0gICAgICAgIGlmICghcmVjb3JkLnBhcnNlKGNvbnRleHQp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZWNvcmRzLmFwcGVuZChyZWNv
cmQpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTdGFja01hcHM6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBvdXQucHJpbnQoIlZlcnNpb246
IiwgdmVyc2lvbiwgIiwgU3RhY2tTaXplc1siLCBsaXN0RHVtcChzdGFja1NpemVzKSwgIl0sIENv
bnN0YW50czpbIiwgbGlzdER1bXAoY29uc3RhbnRzKSwgIl0sIFJlY29yZHM6WyIsIGxpc3REdW1w
KHJlY29yZHMpLCAiXSIpOwotfQotCi12b2lkIFN0YWNrTWFwczo6ZHVtcE11bHRpbGluZShQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgpIGNvbnN0Ci17Ci0gICAgb3V0LnByaW50
KHByZWZpeCwgIlZlcnNpb246ICIsIHZlcnNpb24sICJcbiIpOwotICAgIG91dC5wcmludChwcmVm
aXgsICJTdGFja1NpemVzOlxuIik7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YWNr
U2l6ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG91dC5wcmludChwcmVmaXgsICIgICAgIiwgc3Rh
Y2tTaXplc1tpXSwgIlxuIik7Ci0gICAgb3V0LnByaW50KHByZWZpeCwgIkNvbnN0YW50czpcbiIp
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb25zdGFudHMuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIG91dC5wcmludChwcmVmaXgsICIgICAgIiwgY29uc3RhbnRzW2ldLCAiXG4iKTsKLSAg
ICBvdXQucHJpbnQocHJlZml4LCAiUmVjb3JkczpcbiIpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCByZWNvcmRzLnNpemUoKTsgKytpKQotICAgICAgICBvdXQucHJpbnQocHJlZml4LCAi
ICAgICIsIHJlY29yZHNbaV0sICJcbiIpOwotfQotCi1TdGFja01hcHM6OlJlY29yZE1hcCBTdGFj
a01hcHM6OmNvbXB1dGVSZWNvcmRNYXAoKSBjb25zdAotewotICAgIFJlY29yZE1hcCByZXN1bHQ7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gcmVjb3Jkcy5zaXplKCk7IGktLTspCi0gICAgICAgIHJl
c3VsdC5hZGQocmVjb3Jkc1tpXS5wYXRjaHBvaW50SUQsIFZlY3RvcjxSZWNvcmRBbmRJbmRleD4o
KSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChSZWNvcmRBbmRJbmRleHsgcmVjb3Jkc1tpXSwgaSB9
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi11bnNpZ25lZCBTdGFja01hcHM6OnN0YWNrU2l6
ZSgpIGNvbnN0Ci17Ci0gICAgUkVMRUFTRV9BU1NFUlQoc3RhY2tTaXplcy5zaXplKCkgPT0gMSk7
Ci0KLSAgICByZXR1cm4gc3RhY2tTaXplc1swXS5zaXplOwotfQotCi19IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCi0KLW5hbWVzcGFjZSBXVEYgewotCi11c2luZyBuYW1lc3BhY2UgSlNDOjpGVEw7
Ci0KLXZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBTdGFja01hcHM6OkxvY2F0
aW9uOjpLaW5kIGtpbmQpCi17Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBTdGFja01h
cHM6OkxvY2F0aW9uOjpVbnByb2Nlc3NlZDoKLSAgICAgICAgb3V0LnByaW50KCJVbnByb2Nlc3Nl
ZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBTdGFja01hcHM6OkxvY2F0aW9uOjpSZWdp
c3RlcjoKLSAgICAgICAgb3V0LnByaW50KCJSZWdpc3RlciIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBTdGFja01hcHM6OkxvY2F0aW9uOjpEaXJlY3Q6Ci0gICAgICAgIG91dC5wcmludCgi
RGlyZWN0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFN0YWNrTWFwczo6TG9jYXRpb246
OkluZGlyZWN0OgotICAgICAgICBvdXQucHJpbnQoIkluZGlyZWN0Iik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICBjYXNlIFN0YWNrTWFwczo6TG9jYXRpb246OkNvbnN0YW50OgotICAgICAgICBvdXQu
cHJpbnQoIkNvbnN0YW50Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFN0YWNrTWFwczo6
TG9jYXRpb246OkNvbnN0YW50SW5kZXg6Ci0gICAgICAgIG91dC5wcmludCgiQ29uc3RhbnRJbmRl
eCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGRhdGFMb2coIlVucmVjb2duaXplZCBr
aW5kOiAiLCBzdGF0aWNfY2FzdDxpbnQ+KGtpbmQpLCAiXG4iKTsKLSAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIEVO
QUJMRShGVExfSklUKQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNr
TWFwcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tN
YXBzLmgJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
U3RhY2tNYXBzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTYwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBGVExTdGFj
a01hcHNfaAotI2RlZmluZSBGVExTdGFja01hcHNfaAotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0K
LSNpbmNsdWRlICJEYXRhVmlldy5oIgotI2luY2x1ZGUgIkZUTERXQVJGUmVnaXN0ZXIuaCIKLSNp
bmNsdWRlICJHUFJJbmZvLmgiCi0jaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKLSNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgTWFjcm9Bc3NlbWJsZXI7
Ci0KLW5hbWVzcGFjZSBGVEwgewotCi1zdHJ1Y3QgU3RhY2tNYXBzIHsKLSAgICBzdHJ1Y3QgUGFy
c2VDb250ZXh0IHsKLSAgICAgICAgdW5zaWduZWQgdmVyc2lvbjsKLSAgICAgICAgRGF0YVZpZXcq
IHZpZXc7Ci0gICAgICAgIHVuc2lnbmVkIG9mZnNldDsKLSAgICB9OwotICAgIAotICAgIHN0cnVj
dCBDb25zdGFudCB7Ci0gICAgICAgIGludDY0X3QgaW50ZWdlcjsKLSAgICAgICAgCi0gICAgICAg
IHZvaWQgcGFyc2UoUGFyc2VDb250ZXh0Jik7Ci0gICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdDsKLSAgICB9OwotCi0gICAgc3RydWN0IFN0YWNrU2l6ZSB7Ci0gICAgICAg
IHVpbnQ2NF90IGZ1bmN0aW9uT2Zmc2V0OwotICAgICAgICB1aW50NjRfdCBzaXplOwotCi0gICAg
ICAgIHZvaWQgcGFyc2UoUGFyc2VDb250ZXh0Jik7Ci0gICAgICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgTG9jYXRpb24gewotICAgICAgICBl
bnVtIEtpbmQgOiBpbnQ4X3QgewotICAgICAgICAgICAgVW5wcm9jZXNzZWQsCi0gICAgICAgICAg
ICBSZWdpc3RlciwKLSAgICAgICAgICAgIERpcmVjdCwKLSAgICAgICAgICAgIEluZGlyZWN0LAot
ICAgICAgICAgICAgQ29uc3RhbnQsCi0gICAgICAgICAgICBDb25zdGFudEluZGV4Ci0gICAgICAg
IH07Ci0gICAgICAgIAotICAgICAgICBEV0FSRlJlZ2lzdGVyIGR3YXJmUmVnOwotICAgICAgICB1
aW50OF90IHNpemU7Ci0gICAgICAgIEtpbmQga2luZDsKLSAgICAgICAgaW50MzJfdCBvZmZzZXQ7
Ci0gICAgICAgIAotICAgICAgICB2b2lkIHBhcnNlKFBhcnNlQ29udGV4dCYpOwotICAgICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7Ci0gICAgICAgIAotICAgICAgICBHUFJS
ZWcgZGlyZWN0R1BSKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgcmVzdG9yZUludG8oTWFjcm9Bc3Nl
bWJsZXImLCBTdGFja01hcHMmLCBjaGFyKiBzYXZlZFJlZ2lzdGVycywgR1BSUmVnIHJlc3VsdCkg
Y29uc3Q7Ci0gICAgfTsKLSAgICAKLSAgICAvLyBGSVhNRTogSW52ZXN0aWdhdGUgaG93IG11Y2gg
bWVtb3J5IHRoaXMgdGFrZXMgYW5kIHBvc3NpYmx5IHBydW5lIGl0IGZyb20gdGhlCi0gICAgLy8g
Zm9ybWF0IHdlIGtlZXAgYXJvdW5kIGluIEZUTDo6SklUQ29kZS4gSSBzdXNwZWN0IHRoYXQgaXQg
d291bGQgYmUgbW9zdCBhd2Vzb21lIHRvCi0gICAgLy8gaGF2ZSBhIENvbXBhY3RTdGFja01hcHMg
c3RydWN0IHRoYXQgbG9zc2lseSBzdG9yZXMgb25seSB0aGF0IHN1YnNldCBvZiBTdGFja01hcHMK
LSAgICAvLyBhbmQgUmVjb3JkIHRoYXQgd2UgYWN0dWFsbHkgbmVlZCBmb3IgT1NSIGV4aXQuCi0g
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMDgwMgotICAg
IHN0cnVjdCBMaXZlT3V0IHsKLSAgICAgICAgRFdBUkZSZWdpc3RlciBkd2FyZlJlZzsKLSAgICAg
ICAgdWludDhfdCBzaXplOwotICAgICAgICAKLSAgICAgICAgdm9pZCBwYXJzZShQYXJzZUNvbnRl
eHQmKTsKLSAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwotICAgIH07
Ci0gICAgCi0gICAgc3RydWN0IFJlY29yZCB7Ci0gICAgICAgIHVpbnQzMl90IHBhdGNocG9pbnRJ
RDsKLSAgICAgICAgdWludDMyX3QgaW5zdHJ1Y3Rpb25PZmZzZXQ7Ci0gICAgICAgIHVpbnQxNl90
IGZsYWdzOwotICAgICAgICAKLSAgICAgICAgVmVjdG9yPExvY2F0aW9uPiBsb2NhdGlvbnM7Ci0g
ICAgICAgIFZlY3RvcjxMaXZlT3V0PiBsaXZlT3V0czsKLSAgICAgICAgCi0gICAgICAgIGJvb2wg
cGFyc2UoUGFyc2VDb250ZXh0Jik7Ci0gICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OwotICAgICAgICAKLSAgICAgICAgUmVnaXN0ZXJTZXQgbGl2ZU91dHNTZXQoKSBjb25zdDsK
LSAgICAgICAgUmVnaXN0ZXJTZXQgbG9jYXRpb25TZXQoKSBjb25zdDsKLSAgICAgICAgUmVnaXN0
ZXJTZXQgdXNlZFJlZ2lzdGVyU2V0KCkgY29uc3Q7Ci0gICAgfTsKLQotICAgIHVuc2lnbmVkIHZl
cnNpb247Ci0gICAgVmVjdG9yPFN0YWNrU2l6ZT4gc3RhY2tTaXplczsKLSAgICBWZWN0b3I8Q29u
c3RhbnQ+IGNvbnN0YW50czsKLSAgICBWZWN0b3I8UmVjb3JkPiByZWNvcmRzOwotICAgIAotICAg
IGJvb2wgcGFyc2UoRGF0YVZpZXcqKTsgLy8gUmV0dXJucyB0cnVlIG9uIHBhcnNlIHN1Y2Nlc3Ms
IGZhbHNlIG9uIGZhaWx1cmUuIEZhaWx1cmUgbWVhbnMgdGhhdCBMTFZNIGlzIHNpZ25hbGluZyBj
b21waWxlIGZhaWx1cmUgdG8gdXMuCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
Ci0gICAgdm9pZCBkdW1wTXVsdGlsaW5lKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4
KSBjb25zdDsKLSAgICAKLSAgICBzdHJ1Y3QgUmVjb3JkQW5kSW5kZXggewotICAgICAgICBSZWNv
cmQgcmVjb3JkOwotICAgICAgICB1aW50MzJfdCBpbmRleDsKLSAgICB9OwotICAgIHR5cGVkZWYg
SGFzaE1hcDx1aW50MzJfdCwgVmVjdG9yPFJlY29yZEFuZEluZGV4PiwgV1RGOjpJbnRIYXNoPHVp
bnQzMl90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50MzJfdD4+IFJl
Y29yZE1hcDsKLSAgICAKLSAgICBSZWNvcmRNYXAgY29tcHV0ZVJlY29yZE1hcCgpIGNvbnN0Owot
Ci0gICAgdW5zaWduZWQgc3RhY2tTaXplKCkgY29uc3Q7Ci0KLSAgICB1bnNpZ25lZCBzdGFja1Np
emVGb3JMb2NhbHMoKSBjb25zdAotICAgIHsKLSNpZiBDUFUoWDg2XzY0KQotICAgICAgICAvLyBM
TFZNIHdpbGwgc3RvcmUgZnAgaW4gdGhlIGNhbGwgZnJhbWUKLSAgICAgICAgcmV0dXJuIHN0YWNr
U2l6ZSgpIC0gc2l6ZW9mKHZvaWQqKTsKLSNlbGlmIENQVShBUk02NCkKLSAgICAgICAgLy8gTExW
TSB3aWxsIHN0b3JlIGZwICYgbHIgaW4gdGhlIGNhbGwgZnJhbWUKLSAgICAgICAgcmV0dXJuIHN0
YWNrU2l6ZSgpIC0gMiAqIHNpemVvZih2b2lkKik7Ci0jZWxzZQotICAgICAgICBVTlJFQUNIQUJM
RV9GT1JfUExBVEZPUk0oKTsKLSNlbmRpZgotICAgIH0KLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYsIEpTQzo6RlRMOjpTdGFja01hcHM6OkxvY2F0aW9uOjpLaW5kKTsKLQotfSAvLyBuYW1l
c3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLQotI2VuZGlmIC8vIEZUTFN0
YWNrTWFwc19oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuY3BwCShy
ZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksMTIgKzI5LDEwIEBACiAjaWYgRU5BQkxFKEZUTF9KSVQp
CiAKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgotI2luY2x1ZGUgIkZUTEFiYnJl
dmlhdGlvbnMuaCIKICNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKICNpbmNsdWRl
ICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRMSklURmluYWxpemVyLmgiCiAjaW5jbHVkZSAi
RlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oIgotI2luY2x1ZGUgPGxsdm0vSW5pdGlhbGl6
ZUxMVk0uaD4KICNpbmNsdWRlIDxzdGRpby5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7CkBAIC00NCwxNiArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgREZHOwogCiBTdGF0ZTo6
U3RhdGUoR3JhcGgmIGdyYXBoKQogICAgIDogZ3JhcGgoZ3JhcGgpCi0jaWYgRlRMX1VTRVNfQjMK
LSAgICAsIGNvbnRleHQobnVsbHB0cikKLSNlbHNlCi0gICAgLCBjb250ZXh0KGxsdm0tPkNvbnRl
eHRDcmVhdGUoKSkKLSNlbmRpZgotICAgICwgbW9kdWxlKDApCi0gICAgLCBmdW5jdGlvbigwKQog
ICAgICwgZ2VuZXJhdGVkRnVuY3Rpb24oMCkKLSAgICAsIHVud2luZERhdGFTZWN0aW9uKDApCi0g
ICAgLCB1bndpbmREYXRhU2VjdGlvblNpemUoMCkKIHsKICAgICBzd2l0Y2ggKGdyYXBoLm1fcGxh
bi5tb2RlKSB7CiAgICAgY2FzZSBGVExNb2RlOiB7CkBAIC03NSw3ICs2NCw2IEBAIFN0YXRlOjpT
dGF0ZShHcmFwaCYgZ3JhcGgpCiAgICAgZ3JhcGgubV9wbGFuLmZpbmFsaXplciA9IHN0ZDo6bWFr
ZV91bmlxdWU8SklURmluYWxpemVyPihncmFwaC5tX3BsYW4pOwogICAgIGZpbmFsaXplciA9IHN0
YXRpY19jYXN0PEpJVEZpbmFsaXplcio+KGdyYXBoLm1fcGxhbi5maW5hbGl6ZXIuZ2V0KCkpOwog
Ci0jaWYgRlRMX1VTRVNfQjMKICAgICBwcm9jID0gc3RkOjptYWtlX3VuaXF1ZTxQcm9jZWR1cmU+
KCk7CiAKICAgICBwcm9jLT5zZXRPcmlnaW5QcmludGVyKApAQCAtODQsMzEgKzcyLDEwIEBAIFN0
YXRlOjpTdGF0ZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgIH0pOwogCiAgICAgcHJvYy0+c2V0RnJv
bnRlbmREYXRhKCZncmFwaCk7Ci0jZW5kaWYgLy8gRlRMX1VTRVNfQjMKIH0KIAogU3RhdGU6On5T
dGF0ZSgpCiB7Ci0jaWYgIUZUTF9VU0VTX0IzCi0gICAgbGx2bS0+Q29udGV4dERpc3Bvc2UoY29u
dGV4dCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBTdGF0ZTo6ZHVtcFN0YXRlKGNvbnN0IGNoYXIqIHdo
ZW4pCi17Ci0gICAgZHVtcFN0YXRlKG1vZHVsZSwgd2hlbik7Ci19Ci0KLXZvaWQgU3RhdGU6OmR1
bXBTdGF0ZShMTW9kdWxlIG1vZHVsZSwgY29uc3QgY2hhciogd2hlbikKLXsKLSNpZiBGVExfVVNF
U19CMwotICAgIFVOVVNFRF9QQVJBTShtb2R1bGUpOwotICAgIGlmICghd2hlbiB8fCAhIXdoZW4p
Ci0gICAgICAgIENSQVNIKCk7Ci0jZWxzZQotICAgIGRhdGFMb2coIkxMVk0gSVIgZm9yICIsIENv
ZGVCbG9ja1dpdGhKSVRUeXBlKGdyYXBoLm1fY29kZUJsb2NrLCBGVEw6OkpJVENvZGU6OkZUTEpJ
VCksICIgIiwgd2hlbiwgIjpcbiIpOwotICAgIGR1bXBNb2R1bGUobW9kdWxlKTsKLSNlbmRpZgog
fQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTdGF0ZS5oCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEzICszMyw4IEBACiAjaW5jbHVk
ZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJGVExBYmJyZXZpYXRlZFR5cGVzLmgiCiAjaW5jbHVk
ZSAiRlRMR2VuZXJhdGVkRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJGVExJbmxpbmVDYWNoZURlc2Ny
aXB0b3IuaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRMSklURmluYWxp
emVyLmgiCi0jaW5jbHVkZSAiRlRMSlNDYWxsLmgiCi0jaW5jbHVkZSAiRlRMSlNDYWxsVmFyYXJn
cy5oIgotI2luY2x1ZGUgIkZUTEpTVGFpbENhbGwuaCIKLSNpbmNsdWRlICJGVExTdGFja01hcHMu
aCIKICNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAK
QEAgLTc0LDUzICs2OSwxNiBAQCBwdWJsaWM6CiAgICAgLy8gTm9uZSBvZiB0aGVzZSB0aGluZ3Mg
aXMgb3duZWQgYnkgU3RhdGUuIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZgogICAgIC8vIEZU
TCBwaGFzZXMgdG8gcHJvcGVybHkgbWFuYWdlIHRoZSBsaWZlY3ljbGUgb2YgdGhlIG1vZHVsZSBh
bmQgZnVuY3Rpb24uCiAgICAgREZHOjpHcmFwaCYgZ3JhcGg7Ci0jaWYgRlRMX1VTRVNfQjMKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QjM6OlByb2NlZHVyZT4gcHJvYzsKLSNlbmRpZgotICAgIExDb250
ZXh0IGNvbnRleHQ7Ci0gICAgTE1vZHVsZSBtb2R1bGU7Ci0gICAgTFZhbHVlIGZ1bmN0aW9uOwot
ICAgIGJvb2wgYWxsb2NhdGlvbkZhaWxlZCB7IGZhbHNlIH07IC8vIFRocm93IG91dCB0aGUgY29t
cGlsYXRpb24gb25jZSBMTFZNIHJldHVybnMuCisgICAgYm9vbCBhbGxvY2F0aW9uRmFpbGVkIHsg
ZmFsc2UgfTsgLy8gVGhyb3cgb3V0IHRoZSBjb21waWxhdGlvbiBvbmNlIEIzIHJldHVybnMuCiAg
ICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7CiAgICAgR2VuZXJhdGVkRnVuY3Rpb24gZ2VuZXJh
dGVkRnVuY3Rpb247CiAgICAgSklURmluYWxpemVyKiBmaW5hbGl6ZXI7Ci0jaWYgRlRMX1VTRVNf
QjMKICAgICAvLyBUb3AtbGV2ZWwgZXhjZXB0aW9uIGhhbmRsZXIuIEp1bXAgaGVyZSBpZiB5b3Ug
a25vdyB0aGF0IHlvdSBoYXZlIHRvIGdlbmVyaWNVbndpbmQoKSBhbmQgdGhlcmUKICAgICAvLyBh
cmUgbm8gYXBwbGljYWJsZSBjYXRjaCBibG9ja3MgYW55d2hlcmUgaW4gdGhlIEdyYXBoLgogICAg
IFJlZlB0cjxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBkZWZhdWx0RXhjZXB0aW9uSGFuZGxl
OwogICAgIEJveDxDQ2FsbEhlbHBlcnM6OkxhYmVsPiBleGNlcHRpb25IYW5kbGVyIHsgQm94PEND
YWxsSGVscGVyczo6TGFiZWw+OjpjcmVhdGUoKSB9OwogICAgIEIzOjpTdGFja1Nsb3QqIGNhcHR1
cmVkVmFsdWUgeyBudWxscHRyIH07Ci0jZWxzZSAvLyBGVExfVVNFU19CMwotICAgIHVuc2lnbmVk
IGhhbmRsZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFja21hcElEIHsgVUlOVF9NQVggfTsKLSAg
ICB1bnNpZ25lZCBoYW5kbGVFeGNlcHRpb25TdGFja21hcElEIHsgVUlOVF9NQVggfTsKLSAgICB1
bnNpZ25lZCBjYXB0dXJlZFN0YWNrbWFwSUQgeyBVSU5UX01BWCB9OwotICAgIHVuc2lnbmVkIHZh
cmFyZ3NTcGlsbFNsb3RzU3RhY2ttYXBJRCB7IFVJTlRfTUFYIH07Ci0gICAgdW5zaWduZWQgZXhj
ZXB0aW9uSGFuZGxpbmdTcGlsbFNsb3RTdGFja21hcElEIHsgVUlOVF9NQVggfTsKLSNlbmRpZiAv
LyBGVExfVVNFX0IzCi0gICAgU2VnbWVudGVkVmVjdG9yPEdldEJ5SWREZXNjcmlwdG9yPiBnZXRC
eUlkczsKLSAgICBTZWdtZW50ZWRWZWN0b3I8UHV0QnlJZERlc2NyaXB0b3I+IHB1dEJ5SWRzOwot
ICAgIFNlZ21lbnRlZFZlY3RvcjxDaGVja0luRGVzY3JpcHRvcj4gY2hlY2tJbnM7Ci0gICAgU2Vn
bWVudGVkVmVjdG9yPEJpbmFyeU9wRGVzY3JpcHRvcj4gYmluYXJ5T3BzOwotICAgIFNlZ21lbnRl
ZFZlY3RvcjxMYXp5U2xvd1BhdGhEZXNjcmlwdG9yPiBsYXp5U2xvd1BhdGhzOwotI2lmIEVOQUJM
RShNQVNNX1BST0JFKQotICAgIFNlZ21lbnRlZFZlY3RvcjxQcm9iZURlc2NyaXB0b3I+IHByb2Jl
czsKLSNlbmRpZgotI2lmICFGVExfVVNFU19CMwotICAgIFZlY3RvcjxKU0NhbGw+IGpzQ2FsbHM7
Ci0gICAgVmVjdG9yPEpTQ2FsbFZhcmFyZ3M+IGpzQ2FsbFZhcmFyZ3NlczsKLSAgICBWZWN0b3I8
SlNUYWlsQ2FsbD4ganNUYWlsQ2FsbHM7Ci0gICAgVmVjdG9yPENTdHJpbmc+IGNvZGVTZWN0aW9u
TmFtZXM7Ci0gICAgVmVjdG9yPENTdHJpbmc+IGRhdGFTZWN0aW9uTmFtZXM7Ci0gICAgU2VnbWVu
dGVkVmVjdG9yPE9TUkV4aXREZXNjcmlwdG9ySW1wbD4gb3NyRXhpdERlc2NyaXB0b3JJbXBsczsK
LSNlbmRpZiAvLyAhRlRMX1VTRVNfQjMKLSAgICB2b2lkKiB1bndpbmREYXRhU2VjdGlvbjsKLSAg
ICBzaXplX3QgdW53aW5kRGF0YVNlY3Rpb25TaXplOwotICAgIFJlZlB0cjxEYXRhU2VjdGlvbj4g
c3RhY2ttYXBzU2VjdGlvbjsKLSAgICAKLSAgICB2b2lkIGR1bXBTdGF0ZShjb25zdCBjaGFyKiB3
aGVuKTsKLSAgICB2b2lkIGR1bXBTdGF0ZShMTW9kdWxlLCBjb25zdCBjaGFyKiB3aGVuKTsKLQot
ICAgIEhhc2hTZXQ8Q1N0cmluZz4gbmF0aXZlTG9hZGVkTGlicmFyaWVzOwogfTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExV
bndpbmRJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFVud2luZEluZm8uY3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFVud2luZEluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwMjUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcwotICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICoKLSAq
IFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMvTkNTQQotICogT3BlbiBTb3VyY2UgTGljZW5zZQotICoK
LSAqIENvcHlyaWdodCAoYykgMjAwOS0yMDE0IGJ5IHRoZSBjb250cmlidXRvcnMgb2YgTExWTS9s
aWJjKythYmkgcHJvamVjdC4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERl
dmVsb3BlZCBieToKLSAqCi0gKiAgICBMTFZNIFRlYW0KLSAqCi0gKiAgICBVbml2ZXJzaXR5IG9m
IElsbGlub2lzIGF0IFVyYmFuYS1DaGFtcGFpZ24KLSAqCi0gKiAgICBodHRwOi8vbGx2bS5vcmcK
LSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g
YW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCi0gKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv
Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCB3aXRo
Ci0gKiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg
bGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCi0gKiB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1
Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcwotICogb2Yg
dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUg
aXMgZnVybmlzaGVkIHRvIGRvCi0gKiBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnM6Ci0gKgotICogICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gKiAgICAgIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzLgotICoKLSAqICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQgbm90aWNlLAotICogICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVycyBpbiB0aGUKLSAqICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAg
ICAqIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBMTFZNIFRlYW0sIFVuaXZlcnNpdHkgb2YgSWxs
aW5vaXMgYXQKLSAqICAgICAgVXJiYW5hLUNoYW1wYWlnbiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvCi0gKiAgICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCi0gKiAg
ICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJP
VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgot
ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
TkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT05UUklCVVRP
UlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg
T1IgT1RIRVIKLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs
IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi0gKiBPVVQgT0YgT1IgSU4gQ09OTkVD
VElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIFdJVEgg
VEhFCi0gKiBTT0ZUV0FSRS4KLSAqCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqCi0gKiBD
b3B5cmlnaHQgKGMpIDIwMDktMjAxNCBieSB0aGUgY29udHJpYnV0b3JzIG9mIExMVk0vbGliYysr
YWJpIHByb2plY3QuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv
ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotICogb2YgdGhpcyBzb2Z0
d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiks
IHRvIGRlYWwKLSAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp
bmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLSAqIHRvIHVzZSwgY29weSwgbW9kaWZ5
LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLSAq
IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo
ZSBTb2Z0d2FyZSBpcwotICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg
dGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGll
cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNP
RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs
IEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0g
KiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE
QU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP
TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotICogT1VUIE9GIE9SIElO
IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5H
UyBJTgotICogVEhFIFNPRlRXQVJFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJGVExVbndpbmRJbmZvLmgiCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRl
ICJSZWdpc3RlckF0T2Zmc2V0TGlzdC5oIgotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0KLSNpZiBP
UyhEQVJXSU4pCi0jaW5jbHVkZSA8bWFjaC1vL2NvbXBhY3RfdW53aW5kX2VuY29kaW5nLmg+Ci0j
ZW5kaWYKLSNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewotCi1uYW1lc3BhY2UgewotI2lmIE9TKERBUldJTikKLXN0cnVjdCBDb21wYWN0
VW53aW5kIHsKLSAgICB2b2lkKiBmdW5jdGlvbjsKLSAgICB1aW50MzJfdCBzaXplOwotICAgIGNv
bXBhY3RfdW53aW5kX2VuY29kaW5nX3QgZW5jb2Rpbmc7Ci0gICAgdm9pZCogcGVyc29uYWxpdHk7
Ci0gICAgdm9pZCogbHNkYTsKLX07Ci0jZWxpZiBPUyhMSU5VWCkKLS8vIERXQVJGIHVud2luZCBp
bnN0cnVjdGlvbnMKLWVudW0gewotICAgIERXX0NGQV9ub3AgICAgICAgICAgICAgICAgID0gMHgw
LAotICAgIERXX0NGQV9zZXRfbG9jICAgICAgICAgICAgID0gMHgxLAotICAgIERXX0NGQV9hZHZh
bmNlX2xvYzEgICAgICAgID0gMHgyLAotICAgIERXX0NGQV9hZHZhbmNlX2xvYzIgICAgICAgID0g
MHgzLAotICAgIERXX0NGQV9hZHZhbmNlX2xvYzQgICAgICAgID0gMHg0LAotICAgIERXX0NGQV9v
ZmZzZXRfZXh0ZW5kZWQgICAgID0gMHg1LAotICAgIERXX0NGQV9kZWZfY2ZhICAgICAgICAgICAg
ID0gMHhDLAotICAgIERXX0NGQV9kZWZfY2ZhX3JlZ2lzdGVyICAgID0gMHhELAotICAgIERXX0NG
QV9kZWZfY2ZhX29mZnNldCAgICAgID0gMHhFLAotICAgIERXX0NGQV9vZmZzZXRfZXh0ZW5kZWRf
c2YgPSAweDExLAotICAgIERXX0NGQV9kZWZfY2ZhX3NmICAgICAgICAgPSAweDEyLAotICAgIERX
X0NGQV9kZWZfY2ZhX29mZnNldF9zZiAgPSAweDEzLAotICAgIC8vIGhpZ2ggMiBiaXRzIGFyZSAw
eDEsIGxvd2VyIDYgYml0cyBhcmUgZGVsdGEKLSAgICBEV19DRkFfYWR2YW5jZV9sb2MgICAgICAg
ID0gMHg0MCwKLSAgICAvLyBoaWdoIDIgYml0cyBhcmUgMHgyLCBsb3dlciA2IGJpdHMgYXJlIHJl
Z2lzdGVyCi0gICAgRFdfQ0ZBX29mZnNldCAgICAgICAgICAgICA9IDB4ODAKLX07Ci0KLWVudW0g
ewotICAgIERXX0NGQV9vcGVyYW5kX21hc2sgPSAweDNGIC8vIGxvdyA2IGJpdHMgbWFzayBmb3Ig
b3Bjb2RlLWVuY29kZWQgb3BlcmFuZHMgaW4gRFdfQ0ZBX2FkdmFuY2VfbG9jIGFuZCBEV19DRkFf
b2Zmc2V0Ci19OwotCi0vLyBGU0YgZXhjZXB0aW9uIGhhbmRsaW5nIFBvaW50ZXItRW5jb2Rpbmcg
Y29uc3RhbnRzCi1lbnVtIHsKLSAgICBEV19FSF9QRV9wdHIgICAgICAgPSAweDAwLAotICAgIERX
X0VIX1BFX3VsZWIxMjggICA9IDB4MDEsCi0gICAgRFdfRUhfUEVfdWRhdGEyICAgID0gMHgwMiwK
LSAgICBEV19FSF9QRV91ZGF0YTQgICAgPSAweDAzLAotICAgIERXX0VIX1BFX3VkYXRhOCAgICA9
IDB4MDQsCi0gICAgRFdfRUhfUEVfc2xlYjEyOCAgID0gMHgwOSwKLSAgICBEV19FSF9QRV9zZGF0
YTIgICAgPSAweDBBLAotICAgIERXX0VIX1BFX3NkYXRhNCAgICA9IDB4MEIsCi0gICAgRFdfRUhf
UEVfc2RhdGE4ICAgID0gMHgwQywKLSAgICBEV19FSF9QRV9hYnNwdHIgICAgPSAweDAwLAotICAg
IERXX0VIX1BFX3BjcmVsICAgICA9IDB4MTAsCi0gICAgRFdfRUhfUEVfaW5kaXJlY3QgID0gMHg4
MAotfTsKLQotZW51bSB7Ci0gICAgRFdfRUhfUEVfcmVsYXRpdmVfbWFzayA9IDB4NzAKLX07Ci0K
LS8vIDY0LWJpdCB4ODZfNjQgcmVnaXN0ZXJzCi1lbnVtIHsKLSAgICBVTldfWDg2XzY0X3JieCA9
ICAzLAotICAgIFVOV19YODZfNjRfcmJwID0gIDYsCi0gICAgVU5XX1g4Nl82NF9yMTIgPSAxMiwK
LSAgICBVTldfWDg2XzY0X3IxMyA9IDEzLAotICAgIFVOV19YODZfNjRfcjE0ID0gMTQsCi0gICAg
VU5XX1g4Nl82NF9yMTUgPSAxNQotfTsKLQotZW51bSB7Ci0gICAgRFdfWDg2XzY0X1JFVF9hZGRy
ID0gMTYKLX07Ci0KLWVudW0gewotICAgIFVOV19BUk02NF94MCA9IDAsCi0gICAgVU5XX0FSTTY0
X3gxID0gMSwKLSAgICBVTldfQVJNNjRfeDIgPSAyLAotICAgIFVOV19BUk02NF94MyA9IDMsCi0g
ICAgVU5XX0FSTTY0X3g0ID0gNCwKLSAgICBVTldfQVJNNjRfeDUgPSA1LAotICAgIFVOV19BUk02
NF94NiA9IDYsCi0gICAgVU5XX0FSTTY0X3g3ID0gNywKLSAgICBVTldfQVJNNjRfeDggPSA4LAot
ICAgIFVOV19BUk02NF94OSA9IDksCi0gICAgVU5XX0FSTTY0X3gxMCA9IDEwLAotICAgIFVOV19B
Uk02NF94MTEgPSAxMSwKLSAgICBVTldfQVJNNjRfeDEyID0gMTIsCi0gICAgVU5XX0FSTTY0X3gx
MyA9IDEzLAotICAgIFVOV19BUk02NF94MTQgPSAxNCwKLSAgICBVTldfQVJNNjRfeDE1ID0gMTUs
Ci0gICAgVU5XX0FSTTY0X3gxNiA9IDE2LAotICAgIFVOV19BUk02NF94MTcgPSAxNywKLSAgICBV
TldfQVJNNjRfeDE4ID0gMTgsCi0gICAgVU5XX0FSTTY0X3gxOSA9IDE5LAotICAgIFVOV19BUk02
NF94MjAgPSAyMCwKLSAgICBVTldfQVJNNjRfeDIxID0gMjEsCi0gICAgVU5XX0FSTTY0X3gyMiA9
IDIyLAotICAgIFVOV19BUk02NF94MjMgPSAyMywKLSAgICBVTldfQVJNNjRfeDI0ID0gMjQsCi0g
ICAgVU5XX0FSTTY0X3gyNSA9IDI1LAotICAgIFVOV19BUk02NF94MjYgPSAyNiwKLSAgICBVTldf
QVJNNjRfeDI3ID0gMjcsCi0gICAgVU5XX0FSTTY0X3gyOCA9IDI4LAotICAgIFVOV19BUk02NF9m
cCA9IDI5LAotICAgIFVOV19BUk02NF94MzAgPSAzMCwKLSAgICBVTldfQVJNNjRfc3AgPSAzMSwK
LSAgICBVTldfQVJNNjRfdjAgPSA2NCwKLSAgICBVTldfQVJNNjRfdjEgPSA2NSwKLSAgICBVTldf
QVJNNjRfdjIgPSA2NiwKLSAgICBVTldfQVJNNjRfdjMgPSA2NywKLSAgICBVTldfQVJNNjRfdjQg
PSA2OCwKLSAgICBVTldfQVJNNjRfdjUgPSA2OSwKLSAgICBVTldfQVJNNjRfdjYgPSA3MCwKLSAg
ICBVTldfQVJNNjRfdjcgPSA3MSwKLSAgICBVTldfQVJNNjRfdjggPSA3MiwKLSAgICBVTldfQVJN
NjRfdjkgPSA3MywKLSAgICBVTldfQVJNNjRfdjEwID0gNzQsCi0gICAgVU5XX0FSTTY0X3YxMSA9
IDc1LAotICAgIFVOV19BUk02NF92MTIgPSA3NiwKLSAgICBVTldfQVJNNjRfdjEzID0gNzcsCi0g
ICAgVU5XX0FSTTY0X3YxNCA9IDc4LAotICAgIFVOV19BUk02NF92MTUgPSA3OSwKLSAgICBVTldf
QVJNNjRfdjE2ID0gODAsCi0gICAgVU5XX0FSTTY0X3YxNyA9IDgxLAotICAgIFVOV19BUk02NF92
MTggPSA4MiwKLSAgICBVTldfQVJNNjRfdjE5ID0gODMsCi0gICAgVU5XX0FSTTY0X3YyMCA9IDg0
LAotICAgIFVOV19BUk02NF92MjEgPSA4NSwKLSAgICBVTldfQVJNNjRfdjIyID0gODYsCi0gICAg
VU5XX0FSTTY0X3YyMyA9IDg3LAotICAgIFVOV19BUk02NF92MjQgPSA4OCwKLSAgICBVTldfQVJN
NjRfdjI1ID0gODksCi0gICAgVU5XX0FSTTY0X3YyNiA9IDkwLAotICAgIFVOV19BUk02NF92Mjcg
PSA5MSwKLSAgICBVTldfQVJNNjRfdjI4ID0gOTIsCi0gICAgVU5XX0FSTTY0X3YyOSA9IDkzLAot
ICAgIFVOV19BUk02NF92MzAgPSA5NCwKLSAgICBVTldfQVJNNjRfdjMxID0gOTUKLX07Ci0KLXN0
YXRpYyB1aW50OF90IGdldDgodWludHB0cl90IGFkZHIpICAgIHsgcmV0dXJuICooKHVpbnQ4X3Qq
KWFkZHIpOyB9Ci1zdGF0aWMgdWludDE2X3QgZ2V0MTYodWludHB0cl90IGFkZHIpICB7IHJldHVy
biAqKCh1aW50MTZfdCopYWRkcik7IH0KLXN0YXRpYyB1aW50MzJfdCBnZXQzMih1aW50cHRyX3Qg
YWRkcikgIHsgcmV0dXJuICooKHVpbnQzMl90KilhZGRyKTsgfQotc3RhdGljIHVpbnQ2NF90IGdl
dDY0KHVpbnRwdHJfdCBhZGRyKSAgeyByZXR1cm4gKigodWludDY0X3QqKWFkZHIpOyB9Ci0KLXN0
YXRpYyB1aW50cHRyX3QgZ2V0UCh1aW50cHRyX3QgYWRkcikKLXsKLSAgICAvLyBGSVhNRTogYWRk
IHN1cHBvcnQgZm9yIDMyIGJpdCBwb2ludGVycyBvbiAzMiBiaXQgYXJjaGl0ZWN0dXJlcwotICAg
IHJldHVybiBnZXQ2NChhZGRyKTsKLX0KLQotc3RhdGljIHVpbnQ2NF90IGdldFVMRUIxMjgodWlu
dHB0cl90JiBhZGRyLCB1aW50cHRyX3QgZW5kKQotewotICAgIGNvbnN0IHVpbnQ4X3QqIHAgPSAo
dWludDhfdCopYWRkcjsKLSAgICBjb25zdCB1aW50OF90KiBwZW5kID0gKHVpbnQ4X3QqKWVuZDsK
LSAgICB1aW50NjRfdCByZXN1bHQgPSAwOwotICAgIGludCBiaXQgPSAwOwotICAgIGRvICB7Ci0g
ICAgICAgIHVpbnQ2NF90IGI7Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlQocCAhPSBwZW5kKTsg
Ly8gdHJ1bmNhdGVkIHVsZWIxMjggZXhwcmVzc2lvbgotCi0gICAgICAgIGIgPSAqcCAmIDB4N2Y7
Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShiaXQgPj0gNjQgfHwgYiA8PCBiaXQgPj4gYml0
ICE9IGIpKTsgLy8gbWFsZm9ybWVkIHVsZWIxMjggZXhwcmVzc2lvbgotCi0gICAgICAgIHJlc3Vs
dCB8PSBiIDw8IGJpdDsKLSAgICAgICAgYml0ICs9IDc7Ci0gICAgfSB3aGlsZSAoKnArKyA+PSAw
eDgwKTsKLSAgICBhZGRyID0gKHVpbnRwdHJfdClwOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXN0YXRpYyBpbnQ2NF90IGdldFNMRUIxMjgodWludHB0cl90JiBhZGRyLCB1aW50cHRyX3QgZW5k
KQotewotICAgIGNvbnN0IHVpbnQ4X3QqIHAgPSAodWludDhfdCopYWRkcjsKLSAgICBjb25zdCB1
aW50OF90KiBwZW5kID0gKHVpbnQ4X3QqKWVuZDsKLQotICAgIGludDY0X3QgcmVzdWx0ID0gMDsK
LSAgICBpbnQgYml0ID0gMDsKLSAgICB1aW50OF90IGJ5dGU7Ci0gICAgZG8gewotICAgICAgICBS
RUxFQVNFX0FTU0VSVChwICE9IHBlbmQpOyAvLyB0cnVuY2F0ZWQgc2xlYjEyOCBleHByZXNzaW9u
Ci0KLSAgICAgICAgYnl0ZSA9ICpwKys7Ci0gICAgICAgIHJlc3VsdCB8PSAoKGJ5dGUgJiAweDdm
KSA8PCBiaXQpOwotICAgICAgICBiaXQgKz0gNzsKLSAgICB9IHdoaWxlIChieXRlICYgMHg4MCk7
Ci0gICAgLy8gc2lnbiBleHRlbmQgbmVnYXRpdmUgbnVtYmVycwotICAgIGlmICgoYnl0ZSAmIDB4
NDApKQotICAgICAgICByZXN1bHQgfD0gKC0xTEwpIDw8IGJpdDsKLSAgICBhZGRyID0gKHVpbnRw
dHJfdClwOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB1aW50cHRyX3QgZ2V0RW5j
b2RlZFAodWludHB0cl90JiBhZGRyLCB1aW50cHRyX3QgZW5kLCB1aW50OF90IGVuY29kaW5nKQot
ewotICAgIHVpbnRwdHJfdCBzdGFydEFkZHIgPSBhZGRyOwotICAgIGNvbnN0IHVpbnQ4X3QqIHAg
PSAodWludDhfdCopYWRkcjsKLSAgICB1aW50cHRyX3QgcmVzdWx0OwotCi0gICAgLy8gZmlyc3Qg
Z2V0IHZhbHVlCi0gICAgc3dpdGNoIChlbmNvZGluZyAmIDB4MEYpIHsKLSAgICBjYXNlIERXX0VI
X1BFX3B0cjoKLSAgICAgICAgcmVzdWx0ID0gZ2V0UChhZGRyKTsKLSAgICAgICAgcCArPSBzaXpl
b2YodWludHB0cl90KTsKLSAgICAgICAgYWRkciA9ICh1aW50cHRyX3QpcDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBEV19FSF9QRV91bGViMTI4OgotICAgICAgICByZXN1bHQgPSBnZXRVTEVC
MTI4KGFkZHIsIGVuZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRFdfRUhfUEVfdWRhdGEy
OgotICAgICAgICByZXN1bHQgPSBnZXQxNihhZGRyKTsKLSAgICAgICAgcCArPSAyOwotICAgICAg
ICBhZGRyID0gKHVpbnRwdHJfdClwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERXX0VIX1BF
X3VkYXRhNDoKLSAgICAgICAgcmVzdWx0ID0gZ2V0MzIoYWRkcik7Ci0gICAgICAgIHAgKz0gNDsK
LSAgICAgICAgYWRkciA9ICh1aW50cHRyX3QpcDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBE
V19FSF9QRV91ZGF0YTg6Ci0gICAgICAgIHJlc3VsdCA9IGdldDY0KGFkZHIpOwotICAgICAgICBw
ICs9IDg7Ci0gICAgICAgIGFkZHIgPSAodWludHB0cl90KXA7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRFdfRUhfUEVfc2xlYjEyODoKLSAgICAgICAgcmVzdWx0ID0gZ2V0U0xFQjEyOChhZGRy
LCBlbmQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERXX0VIX1BFX3NkYXRhMjoKLSAgICAg
ICAgcmVzdWx0ID0gKGludDE2X3QpZ2V0MTYoYWRkcik7Ci0gICAgICAgIHAgKz0gMjsKLSAgICAg
ICAgYWRkciA9ICh1aW50cHRyX3QpcDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEV19FSF9Q
RV9zZGF0YTQ6Ci0gICAgICAgIHJlc3VsdCA9IChpbnQzMl90KWdldDMyKGFkZHIpOwotICAgICAg
ICBwICs9IDQ7Ci0gICAgICAgIGFkZHIgPSAodWludHB0cl90KXA7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRFdfRUhfUEVfc2RhdGE4OgotICAgICAgICByZXN1bHQgPSBnZXQ2NChhZGRyKTsK
LSAgICAgICAgcCArPSA4OwotICAgICAgICBhZGRyID0gKHVpbnRwdHJfdClwOwotICAgICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OyAvLyB1bmtub3duIHBvaW50ZXIgZW5jb2RpbmcKLSAgICB9Ci0KLSAgICAvLyB0aGVuIGFkZCBy
ZWxhdGl2ZSBvZmZzZXQKLSAgICBzd2l0Y2ggKGVuY29kaW5nICYgRFdfRUhfUEVfcmVsYXRpdmVf
bWFzaykgewotICAgIGNhc2UgRFdfRUhfUEVfYWJzcHRyOgotICAgICAgICAvLyBkbyBub3RoaW5n
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRFdfRUhfUEVfcGNyZWw6Ci0gICAgICAgIHJlc3Vs
dCArPSBzdGFydEFkZHI7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIHVuc3VwcG9ydGVkIG9yIHVua25vd24gcG9p
bnRlciBlbmNvZGluZwotICAgIH0KLQotICAgIGlmIChlbmNvZGluZyAmIERXX0VIX1BFX2luZGly
ZWN0KQotICAgICAgICByZXN1bHQgPSBnZXRQKHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi0vLyBJbmZvcm1hdGlvbiBlbmNvZGVkIGluIGEgQ0lFIChDb21tb24gSW5mb3JtYXRp
b24gRW50cnkpCi1zdHJ1Y3QgQ0lFX0luZm8gewotICAgIHVpbnRwdHJfdCBjaWVTdGFydDsKLSAg
ICB1aW50cHRyX3QgY2llTGVuZ3RoOwotICAgIHVpbnRwdHJfdCBjaWVJbnN0cnVjdGlvbnM7Ci0g
ICAgdWludDhfdCBwb2ludGVyRW5jb2Rpbmc7Ci0gICAgdWludDhfdCBsc2RhRW5jb2Rpbmc7Ci0g
ICAgdWludDhfdCBwZXJzb25hbGl0eUVuY29kaW5nOwotICAgIHVpbnQ4X3QgcGVyc29uYWxpdHlP
ZmZzZXRJbkNJRTsKLSAgICB1aW50cHRyX3QgcGVyc29uYWxpdHk7Ci0gICAgaW50IGRhdGFBbGln
bkZhY3RvcjsKLSAgICBib29sIGZkZXNIYXZlQXVnbWVudGF0aW9uRGF0YTsKLX07Ci0KLS8vIElu
Zm9ybWF0aW9uIGFib3V0IGFuIEZERSAoRnJhbWUgRGVzY3JpcHRpb24gRW50cnkpCi1zdHJ1Y3Qg
RkRFX0luZm8gewotICAgIHVpbnRwdHJfdCBmZGVTdGFydDsKLSAgICB1aW50cHRyX3QgZmRlTGVu
Z3RoOwotICAgIHVpbnRwdHJfdCBmZGVJbnN0cnVjdGlvbnM7Ci0gICAgdWludHB0cl90IGxzZGE7
Ci19OwotCi0vLyBJbmZvcm1hdGlvbiBhYm91dCBhIGZyYW1lIGxheW91dCBhbmQgcmVnaXN0ZXJz
IHNhdmVkIGRldGVybWluZWQKLS8vIGJ5ICJydW5uaW5nIiB0aGUgZHdhcmYgRkRFICJpbnN0cnVj
dGlvbnMiCi0jaWYgQ1BVKEFSTTY0KQotZW51bSB7IE1heFJlZ2lzdGVyTnVtYmVyID0gMTIwIH07
Ci0jZWxpZiBDUFUoWDg2XzY0KQotZW51bSB7IE1heFJlZ2lzdGVyTnVtYmVyID0gMTcgfTsKLSNl
bHNlCi0jZXJyb3IgIlVucmVjb2duaXplZCBhcmNoaXRlY3R1cmUiCi0jZW5kaWYKLQotc3RydWN0
IFJlZ2lzdGVyTG9jYXRpb24gewotICAgIGJvb2wgc2F2ZWQ7Ci0gICAgaW50NjRfdCBvZmZzZXQ7
Ci19OwotCi1zdHJ1Y3QgUHJvbG9nSW5mbyB7Ci0gICAgdWludDMyX3QgY2ZhUmVnaXN0ZXI7Ci0g
ICAgaW50MzJfdCBjZmFSZWdpc3Rlck9mZnNldDsgLy8gQ0ZBID0gKGNmYVJlZ2lzdGVyKStjZmFS
ZWdpc3Rlck9mZnNldAotICAgIFJlZ2lzdGVyTG9jYXRpb24gc2F2ZWRSZWdpc3RlcnNbTWF4UmVn
aXN0ZXJOdW1iZXJdOyAvLyBmcm9tIHdoZXJlIHRvIHJlc3RvcmUgcmVnaXN0ZXJzCi19OwotCi1z
dGF0aWMgdm9pZCBwYXJzZUNJRSh1aW50cHRyX3QgY2llLCBDSUVfSW5mbyogY2llSW5mbykKLXsK
LSAgICBjaWVJbmZvLT5wb2ludGVyRW5jb2RpbmcgPSAwOwotICAgIGNpZUluZm8tPmxzZGFFbmNv
ZGluZyA9IDA7Ci0gICAgY2llSW5mby0+cGVyc29uYWxpdHlFbmNvZGluZyA9IDA7Ci0gICAgY2ll
SW5mby0+cGVyc29uYWxpdHlPZmZzZXRJbkNJRSA9IDA7Ci0gICAgY2llSW5mby0+cGVyc29uYWxp
dHkgPSAwOwotICAgIGNpZUluZm8tPmRhdGFBbGlnbkZhY3RvciA9IDA7Ci0gICAgY2llSW5mby0+
ZmRlc0hhdmVBdWdtZW50YXRpb25EYXRhID0gZmFsc2U7Ci0gICAgY2llSW5mby0+Y2llU3RhcnQg
PSBjaWU7Ci0KLSAgICB1aW50cHRyX3QgcCA9IGNpZTsKLSAgICB1aW50NjRfdCBjaWVMZW5ndGgg
PSBnZXQzMihwKTsKLSAgICBwICs9IDQ7Ci0gICAgdWludHB0cl90IGNpZUNvbnRlbnRFbmQgPSBw
ICsgY2llTGVuZ3RoOwotICAgIGlmIChjaWVMZW5ndGggPT0gMHhmZmZmZmZmZikgewotICAgICAg
ICAvLyAweGZmZmZmZmZmIG1lYW5zIGxlbmd0aCBpcyByZWFsbHkgbmV4dCA4IGJ5dGVzCi0gICAg
ICAgIGNpZUxlbmd0aCA9IGdldDY0KHApOwotICAgICAgICBwICs9IDg7Ci0gICAgICAgIGNpZUNv
bnRlbnRFbmQgPSBwICsgY2llTGVuZ3RoOwotICAgIH0KLQotICAgIFJFTEVBU0VfQVNTRVJUKGNp
ZUxlbmd0aCk7Ci0KLSAgICAvLyBDSUUgSUQgaXMgYWx3YXlzIDAKLSAgICBSRUxFQVNFX0FTU0VS
VCghZ2V0MzIocCkpOyAvLyBDSUUgSUQgaXMgbm90IHplcm8KLSAgICBwICs9IDQ7Ci0gICAgLy8g
VmVyc2lvbiBpcyBhbHdheXMgMSBvciAzCi0gICAgdWludDhfdCB2ZXJzaW9uID0gZ2V0OChwKTsK
LSAgICBSRUxFQVNFX0FTU0VSVCgodmVyc2lvbiA9PSAxKSB8fCAodmVyc2lvbiA9PSAzKSk7IC8v
IENJRSB2ZXJzaW9uIGlzIG5vdCAxIG9yIDMKLQotICAgICsrcDsKLSAgICAvLyBzYXZlIHN0YXJ0
IG9mIGF1Z21lbnRhdGlvbiBzdHJpbmcgYW5kIGZpbmQgZW5kCi0gICAgdWludHB0cl90IHN0clN0
YXJ0ID0gcDsKLSAgICB3aGlsZSAoZ2V0OChwKSkKLSAgICAgICAgKytwOwotICAgICsrcDsKLSAg
ICAvLyBwYXJzZSBjb2RlIGFsaWdtZW50IGZhY3RvcgotICAgIGdldFVMRUIxMjgocCwgY2llQ29u
dGVudEVuZCk7Ci0gICAgLy8gcGFyc2UgZGF0YSBhbGlnbm1lbnQgZmFjdG9yCi0gICAgY2llSW5m
by0+ZGF0YUFsaWduRmFjdG9yID0gZ2V0U0xFQjEyOChwLCBjaWVDb250ZW50RW5kKTsKLSAgICAv
LyBwYXJzZSByZXR1cm4gYWRkcmVzcyByZWdpc3RlcgotICAgIGdldFVMRUIxMjgocCwgY2llQ29u
dGVudEVuZCk7Ci0gICAgLy8gcGFyc2UgYXVnbWVudGF0aW9uIGRhdGEgYmFzZWQgb24gYXVnbWVu
dGF0aW9uIHN0cmluZwotICAgIGlmIChnZXQ4KHN0clN0YXJ0KSA9PSAneicpIHsKLSAgICAgICAg
Ly8gcGFyc2UgYXVnbWVudGF0aW9uIGRhdGEgbGVuZ3RoCi0gICAgICAgIGdldFVMRUIxMjgocCwg
Y2llQ29udGVudEVuZCk7Ci0gICAgICAgIGZvciAodWludHB0cl90IHMgPSBzdHJTdGFydDsgZ2V0
OChzKSAhPSAnXDAnOyArK3MpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoZ2V0OChzKSkgewotICAg
ICAgICAgICAgY2FzZSAneic6Ci0gICAgICAgICAgICAgICAgY2llSW5mby0+ZmRlc0hhdmVBdWdt
ZW50YXRpb25EYXRhID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgJ1AnOiAvLyBGSVhNRTogc2hvdWxkIGFzc2VydCBvbiBwZXJzb25hbGl0eSAoanVzdCB0
byBrZWVwIGluIHN5bmMgd2l0aCB0aGUgQ1UgYmVoYXZpb3VyKQotICAgICAgICAgICAgICAgIGNp
ZUluZm8tPnBlcnNvbmFsaXR5RW5jb2RpbmcgPSBnZXQ4KHApOwotICAgICAgICAgICAgICAgICsr
cDsKLSAgICAgICAgICAgICAgICBjaWVJbmZvLT5wZXJzb25hbGl0eU9mZnNldEluQ0lFID0gcCAt
IGNpZTsKLSAgICAgICAgICAgICAgICBjaWVJbmZvLT5wZXJzb25hbGl0eSA9IGdldEVuY29kZWRQ
KHAsIGNpZUNvbnRlbnRFbmQsIGNpZUluZm8tPnBlcnNvbmFsaXR5RW5jb2RpbmcpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnTCc6IC8vIEZJWE1FOiBzaG91bGQg
YXNzZXJ0IG9uIExTREEgKGp1c3QgdG8ga2VlcCBpbiBzeW5jIHdpdGggdGhlIENVIGJlaGF2aW91
cikKLSAgICAgICAgICAgICAgICBjaWVJbmZvLT5sc2RhRW5jb2RpbmcgPSBnZXQ4KHApOwotICAg
ICAgICAgICAgICAgICsrcDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgJ1InOgotICAgICAgICAgICAgICAgIGNpZUluZm8tPnBvaW50ZXJFbmNvZGluZyA9IGdldDgo
cCk7Ci0gICAgICAgICAgICAgICAgKytwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAvLyBpZ25vcmUgdW5rbm93biBsZXR0ZXJz
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgY2llSW5mby0+Y2llTGVuZ3RoID0gY2llQ29udGVudEVuZCAtIGNpZUluZm8tPmNpZVN0
YXJ0OwotICAgIGNpZUluZm8tPmNpZUluc3RydWN0aW9ucyA9IHA7Ci19Ci0KLXN0YXRpYyB2b2lk
IGZpbmRGREUodWludHB0cl90IHBjLCB1aW50cHRyX3QgZWhTZWN0aW9uU3RhcnQsIHVpbnQzMl90
IHNlY3Rpb25MZW5ndGgsIEZERV9JbmZvKiBmZGVJbmZvLCBDSUVfSW5mbyogY2llSW5mbykKLXsK
LSAgICB1aW50cHRyX3QgcCA9IGVoU2VjdGlvblN0YXJ0OwotICAgIGNvbnN0IHVpbnRwdHJfdCBl
aFNlY3Rpb25FbmQgPSBwICsgc2VjdGlvbkxlbmd0aDsKLSAgICB3aGlsZSAocCA8IGVoU2VjdGlv
bkVuZCkgewotICAgICAgICB1aW50cHRyX3QgY3VycmVudENGSSA9IHA7Ci0gICAgICAgIHVpbnQ2
NF90IGNmaUxlbmd0aCA9IGdldDMyKHApOwotICAgICAgICBwICs9IDQ7Ci0gICAgICAgIGlmIChj
ZmlMZW5ndGggPT0gMHhmZmZmZmZmZikgewotICAgICAgICAgICAgLy8gMHhmZmZmZmZmZiBtZWFu
cyBsZW5ndGggaXMgcmVhbGx5IG5leHQgOCBieXRlcwotICAgICAgICAgICAgY2ZpTGVuZ3RoID0g
Z2V0NjQocCk7Ci0gICAgICAgICAgICBwICs9IDg7Ci0gICAgICAgIH0KLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQoY2ZpTGVuZ3RoKTsgLy8gZW5kIG1hcmtlciByZWFjaGVkIGJlZm9yZSBmaW5kaW5n
IEZERSBmb3IgcGMKLQotICAgICAgICB1aW50MzJfdCBpZCA9IGdldDMyKHApOwotICAgICAgICBp
ZiAoIWlkKSB7Ci0gICAgICAgICAgICAvLyBza2lwIG92ZXIgQ0lFcwotICAgICAgICAgICAgcCAr
PSBjZmlMZW5ndGg7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBwcm9jZXNzIEZE
RSB0byBzZWUgaWYgaXQgY292ZXJzIHBjCi0gICAgICAgICAgICB1aW50cHRyX3QgbmV4dENGSSA9
IHAgKyBjZmlMZW5ndGg7Ci0gICAgICAgICAgICB1aW50MzJfdCBjaWVQb2ludGVyID0gZ2V0MzIo
cCk7Ci0gICAgICAgICAgICB1aW50cHRyX3QgY2llU3RhcnQgPSBwIC0gY2llUG9pbnRlcjsKLSAg
ICAgICAgICAgIC8vIHZhbGlkYXRlIHBvaW50ZXIgdG8gQ0lFIGlzIHdpdGhpbiBzZWN0aW9uCi0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCgoZWhTZWN0aW9uU3RhcnQgPD0gY2llU3RhcnQpICYm
IChjaWVTdGFydCA8IGVoU2VjdGlvbkVuZCkpOyAvLyBtYWxmb3JtZWQgRkRFLiBDSUUgaXMgYmFk
Ci0KLSAgICAgICAgICAgIHBhcnNlQ0lFKGNpZVN0YXJ0LCBjaWVJbmZvKTsKLQotICAgICAgICAg
ICAgcCArPSA0OwotICAgICAgICAgICAgLy8gcGFyc2UgcGMgYmVnaW4gYW5kIHJhbmdlCi0gICAg
ICAgICAgICB1aW50cHRyX3QgcGNTdGFydCA9IGdldEVuY29kZWRQKHAsIG5leHRDRkksIGNpZUlu
Zm8tPnBvaW50ZXJFbmNvZGluZyk7Ci0gICAgICAgICAgICB1aW50cHRyX3QgcGNSYW5nZSA9IGdl
dEVuY29kZWRQKHAsIG5leHRDRkksIGNpZUluZm8tPnBvaW50ZXJFbmNvZGluZyAmIDB4MEYpOwot
Ci0gICAgICAgICAgICAvLyB0ZXN0IGlmIHBjIGlzIHdpdGhpbiB0aGUgZnVuY3Rpb24gdGhpcyBG
REUgY292ZXJzCi0gICAgICAgICAgICAvLyBpZiBwYyBpcyBub3QgaW4gYmVnaW4vcmFuZ2UsIHNr
aXAgdGhpcyBGREUKLSAgICAgICAgICAgIGlmICgocGNTdGFydCA8PSBwYykgJiYgKHBjIDwgcGNT
dGFydCtwY1JhbmdlKSkgewotICAgICAgICAgICAgICAgIC8vIHBhcnNlIHJlc3Qgb2YgaW5mbwot
ICAgICAgICAgICAgICAgIGZkZUluZm8tPmxzZGEgPSAwOwotICAgICAgICAgICAgICAgIC8vIGNo
ZWNrIGZvciBhdWdtZW50YXRpb24gbGVuZ3RoCi0gICAgICAgICAgICAgICAgaWYgKGNpZUluZm8t
PmZkZXNIYXZlQXVnbWVudGF0aW9uRGF0YSkgewotICAgICAgICAgICAgICAgICAgICB1aW50cHRy
X3QgYXVnTGVuID0gZ2V0VUxFQjEyOChwLCBuZXh0Q0ZJKTsKLSAgICAgICAgICAgICAgICAgICAg
dWludHB0cl90IGVuZE9mQXVnID0gcCArIGF1Z0xlbjsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGNpZUluZm8tPmxzZGFFbmNvZGluZykgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGVl
ayBhdCB2YWx1ZSAod2l0aG91dCBpbmRpcmVjdGlvbikuIFplcm8gbWVhbnMgbm8gbHNkYQotICAg
ICAgICAgICAgICAgICAgICAgICAgdWludHB0cl90IGxzZGFTdGFydCA9IHA7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZ2V0RW5jb2RlZFAocCwgbmV4dENGSSwgY2llSW5mby0+bHNkYUVu
Y29kaW5nICYgMHgwRikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNldCBw
b2ludGVyIGFuZCByZS1wYXJzZSBsc2RhIGFkZHJlc3MKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwID0gbHNkYVN0YXJ0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkZUluZm8t
PmxzZGEgPSBnZXRFbmNvZGVkUChwLCBuZXh0Q0ZJLCBjaWVJbmZvLT5sc2RhRW5jb2RpbmcpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIHAgPSBlbmRPZkF1ZzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZmRlSW5mby0+ZmRlU3RhcnQgPSBjdXJyZW50Q0ZJOwotICAgICAgICAgICAgICAgIGZk
ZUluZm8tPmZkZUxlbmd0aCA9IG5leHRDRkkgLSBjdXJyZW50Q0ZJOwotICAgICAgICAgICAgICAg
IGZkZUluZm8tPmZkZUluc3RydWN0aW9ucyA9IHA7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm47
IC8vIEZERSBmb3VuZAotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwID0gbmV4dENGSTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8v
IG5vIEZERSBmb3VuZCBmb3IgcGMKLX0KLQotc3RhdGljIHZvaWQgZXhlY3V0ZURlZkNGQVJlZ2lz
dGVyKHVpbnQ2NF90IHJlZywgUHJvbG9nSW5mbyogcmVzdWx0cykKLXsKLSAgICBSRUxFQVNFX0FT
U0VSVChyZWcgPD0gTWF4UmVnaXN0ZXJOdW1iZXIpOyAvLyByZWcgdG9vIGJpZwotICAgIHJlc3Vs
dHMtPmNmYVJlZ2lzdGVyID0gcmVnOwotfQotCi1zdGF0aWMgdm9pZCBleGVjdXRlRGVmQ0ZBT2Zm
c2V0KGludDY0X3Qgb2Zmc2V0LCBQcm9sb2dJbmZvKiByZXN1bHRzKQotewotICAgIFJFTEVBU0Vf
QVNTRVJUKG9mZnNldCA8PSAweDgwMDAwMDAwKTsgLy8gY2ZhIGhhcyBuZWdhdGl2ZSBvZmZzZXQg
KGR3YXJmIG1pZ2h0IGNvbnRhaW4gZXBpbG9nKQotICAgIHJlc3VsdHMtPmNmYVJlZ2lzdGVyT2Zm
c2V0ID0gb2Zmc2V0OwotfQotCi1zdGF0aWMgdm9pZCBleGVjdXRlT2Zmc2V0KHVpbnQ2NF90IHJl
ZywgaW50NjRfdCBvZmZzZXQsIFByb2xvZ0luZm8gKnJlc3VsdHMpCi17Ci0gICAgaWYgKHJlZyA+
IE1heFJlZ2lzdGVyTnVtYmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSRUxFQVNFX0FTU0VS
VCghcmVzdWx0cy0+c2F2ZWRSZWdpc3RlcnNbcmVnXS5zYXZlZCk7Ci0gICAgcmVzdWx0cy0+c2F2
ZWRSZWdpc3RlcnNbcmVnXS5zYXZlZCA9IHRydWU7Ci0gICAgcmVzdWx0cy0+c2F2ZWRSZWdpc3Rl
cnNbcmVnXS5vZmZzZXQgPSBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhcnNlSW5zdHJ1Y3Rp
b25zKHVpbnRwdHJfdCBpbnN0cnVjdGlvbnMsIHVpbnRwdHJfdCBpbnN0cnVjdGlvbnNFbmQsIGNv
bnN0IENJRV9JbmZvJiBjaWVJbmZvLCBQcm9sb2dJbmZvKiByZXN1bHRzKQotewotICAgIHVpbnRw
dHJfdCBwID0gaW5zdHJ1Y3Rpb25zOwotCi0gICAgLy8gc2VlIER3YXJmIFNwZWMsIHNlY3Rpb24g
Ni40LjIgZm9yIGRldGFpbHMgb24gdW53aW5kIG9wY29kZXMKLSAgICB3aGlsZSAoKHAgPCBpbnN0
cnVjdGlvbnNFbmQpKSB7Ci0gICAgICAgIHVpbnQ2NF90IHJlZzsKLSAgICAgICAgdWludDhfdCBv
cGNvZGUgPSBnZXQ4KHApOwotICAgICAgICB1aW50OF90IG9wZXJhbmQ7Ci0gICAgICAgICsrcDsK
LSAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKLSAgICAgICAgY2FzZSBEV19DRkFfbm9wOgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRFdfQ0ZBX3NldF9sb2M6Ci0gICAgICAgICAg
ICBnZXRFbmNvZGVkUChwLCBpbnN0cnVjdGlvbnNFbmQsIGNpZUluZm8ucG9pbnRlckVuY29kaW5n
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERXX0NGQV9hZHZhbmNlX2xvYzE6
Ci0gICAgICAgICAgICBwICs9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBE
V19DRkFfYWR2YW5jZV9sb2MyOgotICAgICAgICAgICAgcCArPSAyOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRFdfQ0ZBX2FkdmFuY2VfbG9jNDoKLSAgICAgICAgICAgIHAgKz0g
NDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERXX0NGQV9kZWZfY2ZhOgotICAg
ICAgICAgICAgZXhlY3V0ZURlZkNGQVJlZ2lzdGVyKGdldFVMRUIxMjgocCwgaW5zdHJ1Y3Rpb25z
RW5kKSwgcmVzdWx0cyk7Ci0gICAgICAgICAgICBleGVjdXRlRGVmQ0ZBT2Zmc2V0KGdldFVMRUIx
MjgocCwgaW5zdHJ1Y3Rpb25zRW5kKSwgcmVzdWx0cyk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBEV19DRkFfZGVmX2NmYV9zZjoKLSAgICAgICAgICAgIGV4ZWN1dGVEZWZDRkFS
ZWdpc3RlcihnZXRVTEVCMTI4KHAsIGluc3RydWN0aW9uc0VuZCksIHJlc3VsdHMpOwotICAgICAg
ICAgICAgZXhlY3V0ZURlZkNGQU9mZnNldChnZXRTTEVCMTI4KHAsIGluc3RydWN0aW9uc0VuZCkg
KiBjaWVJbmZvLmRhdGFBbGlnbkZhY3RvciwgcmVzdWx0cyk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBEV19DRkFfZGVmX2NmYV9yZWdpc3RlcjoKLSAgICAgICAgICAgIGV4ZWN1
dGVEZWZDRkFSZWdpc3RlcihnZXRVTEVCMTI4KHAsIGluc3RydWN0aW9uc0VuZCksIHJlc3VsdHMp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRFdfQ0ZBX2RlZl9jZmFfb2Zmc2V0
OgotICAgICAgICAgICAgZXhlY3V0ZURlZkNGQU9mZnNldChnZXRVTEVCMTI4KHAsIGluc3RydWN0
aW9uc0VuZCksIHJlc3VsdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRFdf
Q0ZBX2RlZl9jZmFfb2Zmc2V0X3NmOgotICAgICAgICAgICAgZXhlY3V0ZURlZkNGQU9mZnNldChn
ZXRTTEVCMTI4KHAsIGluc3RydWN0aW9uc0VuZCkgKiBjaWVJbmZvLmRhdGFBbGlnbkZhY3Rvciwg
cmVzdWx0cyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEV19DRkFfb2Zmc2V0
X2V4dGVuZGVkOgotICAgICAgICAgICAgcmVnID0gZ2V0VUxFQjEyOChwLCBpbnN0cnVjdGlvbnNF
bmQpOwotICAgICAgICAgICAgZXhlY3V0ZU9mZnNldChyZWcsIGdldFVMRUIxMjgocCwgaW5zdHJ1
Y3Rpb25zRW5kKSAqIGNpZUluZm8uZGF0YUFsaWduRmFjdG9yLCByZXN1bHRzKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIERXX0NGQV9vZmZzZXRfZXh0ZW5kZWRfc2Y6Ci0gICAg
ICAgICAgICByZWcgPSBnZXRVTEVCMTI4KHAsIGluc3RydWN0aW9uc0VuZCk7Ci0gICAgICAgICAg
ICBleGVjdXRlT2Zmc2V0KHJlZywgZ2V0U0xFQjEyOChwLCBpbnN0cnVjdGlvbnNFbmQpICogY2ll
SW5mby5kYXRhQWxpZ25GYWN0b3IsIHJlc3VsdHMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBvcGVyYW5kID0gb3Bjb2RlICYgRFdfQ0ZBX29wZXJh
bmRfbWFzazsKLSAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlICYgfkRXX0NGQV9vcGVyYW5kX21h
c2spIHsKLSAgICAgICAgICAgIGNhc2UgRFdfQ0ZBX29mZnNldDoKLSAgICAgICAgICAgICAgICBl
eGVjdXRlT2Zmc2V0KG9wZXJhbmQsIGdldFVMRUIxMjgocCwgaW5zdHJ1Y3Rpb25zRW5kKSAqIGNp
ZUluZm8uZGF0YUFsaWduRmFjdG9yLCByZXN1bHRzKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgRFdfQ0ZBX2FkdmFuY2VfbG9jOgotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOyAvLyB1bmtub3duIG9yIHVuc3VwcG9ydGVkIENGQSBvcGNvZGUKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgcGFyc2VGREVJ
bnN0cnVjdGlvbnMoY29uc3QgRkRFX0luZm8mIGZkZUluZm8sIGNvbnN0IENJRV9JbmZvJiBjaWVJ
bmZvLCBQcm9sb2dJbmZvKiByZXN1bHRzKQotewotICAgIC8vIGNsZWFyIHJlc3VsdHMKLSAgICBi
emVybyhyZXN1bHRzLCBzaXplb2YoUHJvbG9nSW5mbykpOwotCi0gICAgLy8gcGFyc2UgQ0lFIHRo
ZW4gRkRFIGluc3RydWN0aW9ucwotICAgIHBhcnNlSW5zdHJ1Y3Rpb25zKGNpZUluZm8uY2llSW5z
dHJ1Y3Rpb25zLCBjaWVJbmZvLmNpZVN0YXJ0ICsgY2llSW5mby5jaWVMZW5ndGgsIGNpZUluZm8s
IHJlc3VsdHMpOwotICAgIHBhcnNlSW5zdHJ1Y3Rpb25zKGZkZUluZm8uZmRlSW5zdHJ1Y3Rpb25z
LCBmZGVJbmZvLmZkZVN0YXJ0ICsgZmRlSW5mby5mZGVMZW5ndGgsIGNpZUluZm8sIHJlc3VsdHMp
OwotfQotI2VuZGlmCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotc3RkOjp1bmlxdWVfcHRy
PFJlZ2lzdGVyQXRPZmZzZXRMaXN0PiBwYXJzZVVud2luZEluZm8odm9pZCogc2VjdGlvbiwgc2l6
ZV90IHNpemUsIEdlbmVyYXRlZEZ1bmN0aW9uIGdlbmVyYXRlZEZ1bmN0aW9uKQotewotICAgIFJF
TEVBU0VfQVNTRVJUKCEhc2VjdGlvbik7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVnaXN0ZXJB
dE9mZnNldExpc3Q+IHJlZ2lzdGVyT2Zmc2V0cyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVnaXN0ZXJB
dE9mZnNldExpc3Q+KCk7Ci0KLSNpZiBPUyhEQVJXSU4pCi0gICAgUkVMRUFTRV9BU1NFUlQoc2l6
ZSA+PSBzaXplb2YoQ29tcGFjdFVud2luZCkpOwotICAgIAotICAgIENvbXBhY3RVbndpbmQqIGRh
dGEgPSBiaXR3aXNlX2Nhc3Q8Q29tcGFjdFVud2luZCo+KHNlY3Rpb24pOwotICAgIAotICAgIFJF
TEVBU0VfQVNTRVJUKCFkYXRhLT5wZXJzb25hbGl0eSk7IC8vIFdlIGRvbid0IGtub3cgaG93IHRv
IGhhbmRsZSB0aGlzLgotICAgIFJFTEVBU0VfQVNTRVJUKCFkYXRhLT5sc2RhKTsgLy8gV2UgZG9u
J3Qga25vdyBob3cgdG8gaGFuZGxlIHRoaXMuCi0gICAgUkVMRUFTRV9BU1NFUlQoZGF0YS0+ZnVu
Y3Rpb24gPT0gZ2VuZXJhdGVkRnVuY3Rpb24pOyAvLyBUaGUgdW53aW5kIGRhdGEgYmV0dGVyIGJl
IGZvciBvdXIgZnVuY3Rpb24uCi0gICAgCi0gICAgY29tcGFjdF91bndpbmRfZW5jb2RpbmdfdCBl
bmNvZGluZyA9IGRhdGEtPmVuY29kaW5nOwotICAgIFJFTEVBU0VfQVNTRVJUKCEoZW5jb2Rpbmcg
JiBVTldJTkRfSVNfTk9UX0ZVTkNUSU9OX1NUQVJUKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIShl
bmNvZGluZyAmIFVOV0lORF9IQVNfTFNEQSkpOwotICAgIFJFTEVBU0VfQVNTRVJUKCEoZW5jb2Rp
bmcgJiBVTldJTkRfUEVSU09OQUxJVFlfTUFTSykpOwotCi0jaWYgQ1BVKFg4Nl82NCkKLSAgICBS
RUxFQVNFX0FTU0VSVCgoZW5jb2RpbmcgJiBVTldJTkRfWDg2XzY0X01PREVfTUFTSykgPT0gVU5X
SU5EX1g4Nl82NF9NT0RFX1JCUF9GUkFNRSk7Ci0gICAgCi0gICAgaW50MzJfdCBvZmZzZXQgPSAt
KChlbmNvZGluZyAmIFVOV0lORF9YODZfNjRfUkJQX0ZSQU1FX09GRlNFVCkgPj4gMTYpICogODsK
LSAgICB1aW50MzJfdCBuZXh0UmVnaXN0ZXJzID0gZW5jb2Rpbmc7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gNTsgaS0tOykgewotICAgICAgICB1aW50MzJfdCBjdXJyZW50UmVnaXN0ZXIgPSBuZXh0
UmVnaXN0ZXJzICYgNzsKLSAgICAgICAgbmV4dFJlZ2lzdGVycyA+Pj0gMzsKLSAgICAgICAgCi0g
ICAgICAgIHN3aXRjaCAoY3VycmVudFJlZ2lzdGVyKSB7Ci0gICAgICAgIGNhc2UgVU5XSU5EX1g4
Nl82NF9SRUdfTk9ORToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgVU5XSU5EX1g4Nl82NF9SRUdfUkJYOgotICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRz
LT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChYODZSZWdpc3RlcnM6OmVieCwgb2Zmc2V0KSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFVOV0lORF9YODZf
NjRfUkVHX1IxMjoKLSAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVy
QXRPZmZzZXQoWDg2UmVnaXN0ZXJzOjpyMTIsIG9mZnNldCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBVTldJTkRfWDg2XzY0X1JFR19SMTM6Ci0gICAg
ICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KFg4NlJlZ2lz
dGVyczo6cjEzLCBvZmZzZXQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgVU5XSU5EX1g4Nl82NF9SRUdfUjE0OgotICAgICAgICAgICAgcmVnaXN0ZXJP
ZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChYODZSZWdpc3RlcnM6OnIxNCwgb2Zmc2V0
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFVOV0lO
RF9YODZfNjRfUkVHX1IxNToKLSAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJl
Z2lzdGVyQXRPZmZzZXQoWDg2UmVnaXN0ZXJzOjpyMTUsIG9mZnNldCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBVTldJTkRfWDg2XzY0X1JFR19SQlA6
Ci0gICAgICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KFg4
NlJlZ2lzdGVyczo6ZWJwLCBvZmZzZXQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBvZmZzZXQgKz0gODsKLSAgICB9
Ci0jZWxpZiBDUFUoQVJNNjQpCi0gICAgUkVMRUFTRV9BU1NFUlQoKGVuY29kaW5nICYgVU5XSU5E
X0FSTTY0X01PREVfTUFTSykgPT0gVU5XSU5EX0FSTTY0X01PREVfRlJBTUUpOwotICAgIAotICAg
IHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6
OmZwLCAwKSk7Ci0gICAgCi0gICAgaW50MzJfdCBvZmZzZXQgPSAwOwotICAgIGlmIChlbmNvZGlu
ZyAmIFVOV0lORF9BUk02NF9GUkFNRV9YMTlfWDIwX1BBSVIpIHsKLSAgICAgICAgcmVnaXN0ZXJP
ZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDE5LCBvZmZz
ZXQgLT0gOCkpOwotICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zm
c2V0KEFSTTY0UmVnaXN0ZXJzOjp4MjAsIG9mZnNldCAtPSA4KSk7Ci0gICAgfQotICAgIGlmIChl
bmNvZGluZyAmIFVOV0lORF9BUk02NF9GUkFNRV9YMjFfWDIyX1BBSVIpIHsKLSAgICAgICAgcmVn
aXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDIx
LCBvZmZzZXQgLT0gOCkpOwotICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3Rl
ckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjp4MjIsIG9mZnNldCAtPSA4KSk7Ci0gICAgfQotICAg
IGlmIChlbmNvZGluZyAmIFVOV0lORF9BUk02NF9GUkFNRV9YMjNfWDI0X1BBSVIpIHsKLSAgICAg
ICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVy
czo6eDIzLCBvZmZzZXQgLT0gOCkpOwotICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChS
ZWdpc3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjp4MjQsIG9mZnNldCAtPSA4KSk7Ci0gICAg
fQotICAgIGlmIChlbmNvZGluZyAmIFVOV0lORF9BUk02NF9GUkFNRV9YMjVfWDI2X1BBSVIpIHsK
LSAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJl
Z2lzdGVyczo6eDI1LCBvZmZzZXQgLT0gOCkpOwotICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFw
cGVuZChSZWdpc3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjp4MjYsIG9mZnNldCAtPSA4KSk7
Ci0gICAgfQotICAgIGlmIChlbmNvZGluZyAmIFVOV0lORF9BUk02NF9GUkFNRV9YMjdfWDI4X1BB
SVIpIHsKLSAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChB
Uk02NFJlZ2lzdGVyczo6eDI3LCBvZmZzZXQgLT0gOCkpOwotICAgICAgICByZWdpc3Rlck9mZnNl
dHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjp4MjgsIG9mZnNldCAt
PSA4KSk7Ci0gICAgfQotICAgIGlmIChlbmNvZGluZyAmIFVOV0lORF9BUk02NF9GUkFNRV9EOF9E
OV9QQUlSKSB7Ci0gICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZz
ZXQoQVJNNjRSZWdpc3RlcnM6OnE4LCBvZmZzZXQgLT0gOCkpOwotICAgICAgICByZWdpc3Rlck9m
ZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjpxOSwgb2Zmc2V0
IC09IDgpKTsKLSAgICB9Ci0gICAgaWYgKGVuY29kaW5nICYgVU5XSU5EX0FSTTY0X0ZSQU1FX0Qx
MF9EMTFfUEFJUikgewotICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0
T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjpxMTAsIG9mZnNldCAtPSA4KSk7Ci0gICAgICAgIHJlZ2lz
dGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OnExMSwg
b2Zmc2V0IC09IDgpKTsKLSAgICB9Ci0gICAgaWYgKGVuY29kaW5nICYgVU5XSU5EX0FSTTY0X0ZS
QU1FX0QxMl9EMTNfUEFJUikgewotICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdp
c3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjpxMTIsIG9mZnNldCAtPSA4KSk7Ci0gICAgICAg
IHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6
OnExMywgb2Zmc2V0IC09IDgpKTsKLSAgICB9Ci0gICAgaWYgKGVuY29kaW5nICYgVU5XSU5EX0FS
TTY0X0ZSQU1FX0QxNF9EMTVfUEFJUikgewotICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVu
ZChSZWdpc3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjpxMTQsIG9mZnNldCAtPSA4KSk7Ci0g
ICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdp
c3RlcnM6OnExNSwgb2Zmc2V0IC09IDgpKTsKLSAgICB9Ci0jZWxzZQotI2Vycm9yICJVbnJlY29n
bml6ZWQgYXJjaGl0ZWN0dXJlIgotI2VuZGlmCi0KLSNlbGlmIE9TKExJTlVYKQotICAgIEZERV9J
bmZvIGZkZUluZm87Ci0gICAgQ0lFX0luZm8gY2llSW5mbzsKLSAgICBQcm9sb2dJbmZvIHByb2xv
ZzsKLQotICAgIGZpbmRGREUoKHVpbnRwdHJfdClnZW5lcmF0ZWRGdW5jdGlvbiwgKHVpbnRwdHJf
dClzZWN0aW9uLCBzaXplLCAmZmRlSW5mbywgJmNpZUluZm8pOwotICAgIHBhcnNlRkRFSW5zdHJ1
Y3Rpb25zKGZkZUluZm8sIGNpZUluZm8sICZwcm9sb2cpOwotCi0jaWYgQ1BVKFg4Nl82NCkKLSAg
ICBSRUxFQVNFX0FTU0VSVChwcm9sb2cuY2ZhUmVnaXN0ZXIgPT0gVU5XX1g4Nl82NF9yYnApOwot
ICAgIFJFTEVBU0VfQVNTRVJUKHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCA9PSAxNik7Ci0gICAg
UkVMRUFTRV9BU1NFUlQocHJvbG9nLnNhdmVkUmVnaXN0ZXJzW1VOV19YODZfNjRfcmJwXS5zYXZl
ZCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocHJvbG9nLnNhdmVkUmVnaXN0ZXJzW1VOV19YODZfNjRf
cmJwXS5vZmZzZXQgPT0gLXByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCk7Ci0KLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IE1heFJlZ2lzdGVyTnVtYmVyOyArK2kpIHsKLSAgICAgICAgaWYgKHByb2xv
Zy5zYXZlZFJlZ2lzdGVyc1tpXS5zYXZlZCkgewotICAgICAgICAgICAgc3dpdGNoIChpKSB7Ci0g
ICAgICAgICAgICBjYXNlIFVOV19YODZfNjRfcmJ4OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVy
T2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoWDg2UmVnaXN0ZXJzOjplYngsIHByb2xv
Zy5zYXZlZFJlZ2lzdGVyc1tpXS5vZmZzZXQgKyBwcm9sb2cuY2ZhUmVnaXN0ZXJPZmZzZXQpKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVU5XX1g4Nl82NF9yMTI6
Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNl
dChYODZSZWdpc3RlcnM6OnIxMiwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHBy
b2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBVTldfWDg2XzY0X3IxMzoKLSAgICAgICAgICAgICAgICByZWdpc3Rlck9mZnNl
dHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KFg4NlJlZ2lzdGVyczo6cjEzLCBwcm9sb2cuc2F2
ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19YODZfNjRfcjE0OgotICAg
ICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoWDg2
UmVnaXN0ZXJzOjpyMTQsIHByb2xvZy5zYXZlZFJlZ2lzdGVyc1tpXS5vZmZzZXQgKyBwcm9sb2cu
Y2ZhUmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgVU5XX1g4Nl82NF9yMTU6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5h
cHBlbmQoUmVnaXN0ZXJBdE9mZnNldChYODZSZWdpc3RlcnM6OnIxNSwgcHJvbG9nLnNhdmVkUmVn
aXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfWDg2XzY0X3JicDoKLSAgICAgICAg
ICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KFg4NlJlZ2lz
dGVyczo6ZWJwLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJl
Z2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IERXX1g4Nl82NF9SRVRfYWRkcjoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
Ly8gbm9uLXN0YW5kYXJkIHJlZ2lzdGVyIGJlaW5nIHNhdmVkIGluIHByb2xvZwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotI2VsaWYgQ1BVKEFSTTY0KQotICAgIFJFTEVBU0VfQVNT
RVJUKHByb2xvZy5jZmFSZWdpc3RlciA9PSBVTldfQVJNNjRfZnApOwotICAgIFJFTEVBU0VfQVNT
RVJUKHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCA9PSAxNik7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
cHJvbG9nLnNhdmVkUmVnaXN0ZXJzW1VOV19BUk02NF9mcF0uc2F2ZWQpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKHByb2xvZy5zYXZlZFJlZ2lzdGVyc1tVTldfQVJNNjRfZnBdLm9mZnNldCA9PSAtcHJv
bG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTWF4UmVn
aXN0ZXJOdW1iZXI7ICsraSkgewotICAgICAgICBpZiAocHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ld
LnNhdmVkKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGkpIHsKLSAgICAgICAgICAgIGNhc2UgVU5X
X0FSTTY0X3gwOgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lz
dGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OngwLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0u
b2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF94MToKLSAgICAgICAgICAgICAgICByZWdp
c3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjp4MSwg
cHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNl
dCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRf
eDI6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9m
ZnNldChBUk02NFJlZ2lzdGVyczo6eDIsIHByb2xvZy5zYXZlZFJlZ2lzdGVyc1tpXS5vZmZzZXQg
KyBwcm9sb2cuY2ZhUmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgVU5XX0FSTTY0X3gzOgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zm
c2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OngzLCBwcm9sb2cu
c2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF94NDoKLSAg
ICAgICAgICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KEFS
TTY0UmVnaXN0ZXJzOjp4NCwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xv
Zy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBVTldfQVJNNjRfeDU6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5h
cHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDUsIHByb2xvZy5zYXZlZFJl
Z2lzdGVyc1tpXS5vZmZzZXQgKyBwcm9sb2cuY2ZhUmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVU5XX0FSTTY0X3g2OgotICAgICAgICAg
ICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdp
c3RlcnM6Ong2LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJl
Z2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IFVOV19BUk02NF94NzoKLSAgICAgICAgICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChS
ZWdpc3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjp4NywgcHJvbG9nLnNhdmVkUmVnaXN0ZXJz
W2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfeDg6Ci0gICAgICAgICAgICAgICAg
cmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6
eDgsIHByb2xvZy5zYXZlZFJlZ2lzdGVyc1tpXS5vZmZzZXQgKyBwcm9sb2cuY2ZhUmVnaXN0ZXJP
ZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVU5XX0FS
TTY0X3g5OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVy
QXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6Ong5LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zm
c2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF94MTA6Ci0gICAgICAgICAgICAgICAgcmVnaXN0
ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDEwLCBw
cm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0
KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF94
MTE6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9m
ZnNldChBUk02NFJlZ2lzdGVyczo6eDExLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0
ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIFVOV19BUk02NF94MTI6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJP
ZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDEyLCBwcm9s
b2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF94MTM6
Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNl
dChBUk02NFJlZ2lzdGVyczo6eDEzLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsg
cHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIFVOV19BUk02NF94MTQ6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZz
ZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDE0LCBwcm9sb2cu
c2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF94MTU6Ci0g
ICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChB
Uk02NFJlZ2lzdGVyczo6eDE1LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJv
bG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIFVOV19BUk02NF94MTY6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRz
LT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDE2LCBwcm9sb2cuc2F2
ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF94MTc6Ci0gICAg
ICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02
NFJlZ2lzdGVyczo6eDE3LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9n
LmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIFVOV19BUk02NF94MTg6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5h
cHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDE4LCBwcm9sb2cuc2F2ZWRS
ZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF94MTk6Ci0gICAgICAg
ICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJl
Z2lzdGVyczo6eDE5LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNm
YVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIFVOV19BUk02NF94MjA6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBl
bmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDIwLCBwcm9sb2cuc2F2ZWRSZWdp
c3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF94MjE6Ci0gICAgICAgICAg
ICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lz
dGVyczo6eDIxLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJl
Z2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IFVOV19BUk02NF94MjI6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQo
UmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDIyLCBwcm9sb2cuc2F2ZWRSZWdpc3Rl
cnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF94MjM6Ci0gICAgICAgICAgICAg
ICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVy
czo6eDIzLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lz
dGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVO
V19BUk02NF94MjQ6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVn
aXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDI0LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNb
aV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF94MjU6Ci0gICAgICAgICAgICAgICAg
cmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6
eDI1LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVy
T2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19B
Uk02NF94MjY6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0
ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDI2LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0u
b2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF94Mjc6Ci0gICAgICAgICAgICAgICAgcmVn
aXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDI3
LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zm
c2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02
NF94Mjg6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJB
dE9mZnNldChBUk02NFJlZ2lzdGVyczo6eDI4LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zm
c2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF9mcDoKLSAgICAgICAgICAgICAgICByZWdpc3Rl
ck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjpmcCwgcHJv
bG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfeDMw
OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZz
ZXQoQVJNNjRSZWdpc3RlcnM6OngzMCwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCAr
IHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBVTldfQVJNNjRfc3A6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZz
ZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6c3AsIHByb2xvZy5z
YXZlZFJlZ2lzdGVyc1tpXS5vZmZzZXQgKyBwcm9sb2cuY2ZhUmVnaXN0ZXJPZmZzZXQpKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVU5XX0FSTTY0X3YwOgotICAg
ICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJN
NjRSZWdpc3RlcnM6OnEwLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9n
LmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIFVOV19BUk02NF92MToKLSAgICAgICAgICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFw
cGVuZChSZWdpc3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjpxMSwgcHJvbG9nLnNhdmVkUmVn
aXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJNNjRfdjI6Ci0gICAgICAgICAg
ICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lz
dGVyczo6cTIsIHByb2xvZy5zYXZlZFJlZ2lzdGVyc1tpXS5vZmZzZXQgKyBwcm9sb2cuY2ZhUmVn
aXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
VU5XX0FSTTY0X3YzOgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJl
Z2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OnEzLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNb
aV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92NDoKLSAgICAgICAgICAgICAgICBy
ZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KEFSTTY0UmVnaXN0ZXJzOjpx
NCwgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHByb2xvZy5jZmFSZWdpc3Rlck9m
ZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVTldfQVJN
NjRfdjU6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJB
dE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTUsIHByb2xvZy5zYXZlZFJlZ2lzdGVyc1tpXS5vZmZz
ZXQgKyBwcm9sb2cuY2ZhUmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgVU5XX0FSTTY0X3Y2OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVy
T2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRSZWdpc3RlcnM6OnE2LCBwcm9s
b2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92NzoK
LSAgICAgICAgICAgICAgICByZWdpc3Rlck9mZnNldHMtPmFwcGVuZChSZWdpc3RlckF0T2Zmc2V0
KEFSTTY0UmVnaXN0ZXJzOjpxNywgcHJvbG9nLnNhdmVkUmVnaXN0ZXJzW2ldLm9mZnNldCArIHBy
b2xvZy5jZmFSZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBVTldfQVJNNjRfdjg6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRz
LT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTgsIHByb2xvZy5zYXZl
ZFJlZ2lzdGVyc1tpXS5vZmZzZXQgKyBwcm9sb2cuY2ZhUmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVU5XX0FSTTY0X3Y5OgotICAgICAg
ICAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0cy0+YXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQoQVJNNjRS
ZWdpc3RlcnM6OnE5LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNm
YVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIFVOV19BUk02NF92MTA6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBl
bmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTEwLCBwcm9sb2cuc2F2ZWRSZWdp
c3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92MTE6Ci0gICAgICAgICAg
ICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lz
dGVyczo6cTExLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJl
Z2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IFVOV19BUk02NF92MTI6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQo
UmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTEyLCBwcm9sb2cuc2F2ZWRSZWdpc3Rl
cnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92MTM6Ci0gICAgICAgICAgICAg
ICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVy
czo6cTEzLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lz
dGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVO
V19BUk02NF92MTQ6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVn
aXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTE0LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNb
aV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92MTU6Ci0gICAgICAgICAgICAgICAg
cmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6
cTE1LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVy
T2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19B
Uk02NF92MTY6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0
ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTE2LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0u
b2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92MTc6Ci0gICAgICAgICAgICAgICAgcmVn
aXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTE3
LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zm
c2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02
NF92MTg6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJB
dE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTE4LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zm
c2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92MTk6Ci0gICAgICAgICAgICAgICAgcmVnaXN0
ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTE5LCBw
cm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0
KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92
MjA6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9m
ZnNldChBUk02NFJlZ2lzdGVyczo6cTIwLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0
ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIFVOV19BUk02NF92MjE6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJP
ZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTIxLCBwcm9s
b2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92MjI6
Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNl
dChBUk02NFJlZ2lzdGVyczo6cTIyLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsg
cHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIFVOV19BUk02NF92MjM6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZz
ZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTIzLCBwcm9sb2cu
c2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92MjQ6Ci0g
ICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChB
Uk02NFJlZ2lzdGVyczo6cTI0LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJv
bG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIFVOV19BUk02NF92MjU6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRz
LT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTI1LCBwcm9sb2cuc2F2
ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92MjY6Ci0gICAg
ICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02
NFJlZ2lzdGVyczo6cTI2LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9n
LmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIFVOV19BUk02NF92Mjc6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5h
cHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTI3LCBwcm9sb2cuc2F2ZWRS
ZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92Mjg6Ci0gICAgICAg
ICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJl
Z2lzdGVyczo6cTI4LCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNm
YVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIFVOV19BUk02NF92Mjk6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBl
bmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTI5LCBwcm9sb2cuc2F2ZWRSZWdp
c3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVOV19BUk02NF92MzA6Ci0gICAgICAgICAg
ICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lz
dGVyczo6cTMwLCBwcm9sb2cuc2F2ZWRSZWdpc3RlcnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJl
Z2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IFVOV19BUk02NF92MzE6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJPZmZzZXRzLT5hcHBlbmQo
UmVnaXN0ZXJBdE9mZnNldChBUk02NFJlZ2lzdGVyczo6cTMxLCBwcm9sb2cuc2F2ZWRSZWdpc3Rl
cnNbaV0ub2Zmc2V0ICsgcHJvbG9nLmNmYVJlZ2lzdGVyT2Zmc2V0KSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIG5vbi1zdGFuZGFyZCByZWdpc3RlciBiZWluZyBzYXZl
ZCBpbiBwcm9sb2cKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSNlbHNlCi0jZXJy
b3IgIlVucmVjb2duaXplZCBhcmNoaXRlY3R1cmUiCi0jZW5kaWYKLQotI2VuZGlmCi0gICAgcmVn
aXN0ZXJPZmZzZXRzLT5zb3J0KCk7Ci0gICAgcmV0dXJuIHJlZ2lzdGVyT2Zmc2V0czsKLX0KLQot
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVW53aW5kSW5mby5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVW53aW5kSW5mby5oCShyZXZpc2lv
biAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFVud2luZEluZm8uaAko
d29ya2luZyBjb3B5KQpAQCAtMSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBTemVnZWQKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpZm5kZWYgRlRMVW53aW5kSW5mb19oCi0jZGVmaW5lIEZUTFVud2luZEluZm9faAotCi0jaWYg
RU5BQkxFKEZUTF9KSVQpCi0KLSNpbmNsdWRlICJGVExHZW5lcmF0ZWRGdW5jdGlvbi5oIgotY2xh
c3MgUmVnaXN0ZXJBdE9mZnNldExpc3Q7Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKLQotc3RkOjp1bmlxdWVfcHRyPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PiAgcGFyc2VVbndpbmRJ
bmZvKHZvaWQqLCBzaXplX3QsIEdlbmVyYXRlZEZ1bmN0aW9uKTsKLQotfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0KLSNlbmRpZiAvLyBGVExV
bndpbmRJbmZvX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVJh
bmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVl
UmFuZ2UuY3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFZhbHVlUmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwyNCArMjYsMTQgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGVExWYWx1ZVJhbmdlLmgiCiAKLSNpbmNsdWRl
ICJGVExBYmJyZXZpYXRpb25zLmgiCi0KICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCi12b2lkIFZhbHVlUmFuZ2U6OmRlY29yYXRlSW5zdHJ1
Y3Rpb24oCi0gICAgTENvbnRleHQgY29udGV4dCwgTFZhbHVlIGxvYWRJbnN0cnVjdGlvbiwgdW5z
aWduZWQgcmFuZ2VLaW5kKSBjb25zdAordm9pZCBWYWx1ZVJhbmdlOjpkZWNvcmF0ZUluc3RydWN0
aW9uKExWYWx1ZSBsb2FkSW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIHJhbmdlS2luZCkgY29uc3QKIHsK
LSNpZiBGVExfVVNFU19CMwotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKICAgICBVTlVTRURf
UEFSQU0obG9hZEluc3RydWN0aW9uKTsKICAgICBVTlVTRURfUEFSQU0ocmFuZ2VLaW5kKTsKLSNl
bHNlCi0gICAgaWYgKCFtX3JhbmdlTWV0YWRhdGEpCi0gICAgICAgIG1fcmFuZ2VNZXRhZGF0YSA9
IG1kTm9kZShjb250ZXh0LCBtX2JlZ2luLCBtX2VuZCk7Ci0gICAgc2V0TWV0YWRhdGEobG9hZElu
c3RydWN0aW9uLCByYW5nZUtpbmQsIG1fcmFuZ2VNZXRhZGF0YSk7Ci0jZW5kaWYgLy8gIUZUTF9V
U0VTX0IzCiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVSYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVSYW5nZS5oCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MzcsMzIgKzM3LDIzIEBAIHB1YmxpYzoKICAgICBWYWx1ZVJhbmdlKCkKICAgICAgICAgOiBtX2Jl
Z2luKDApCiAgICAgICAgICwgbV9lbmQoMCkKLSNpZiAhRlRMX1VTRVNfQjMKLSAgICAgICAgLCBt
X3JhbmdlTWV0YWRhdGEoMCkKLSNlbmRpZgogICAgIHsKICAgICB9CiAgICAgCiAgICAgVmFsdWVS
YW5nZShMVmFsdWUgYmVnaW4sIExWYWx1ZSBlbmQpCiAgICAgICAgIDogbV9iZWdpbihiZWdpbikK
ICAgICAgICAgLCBtX2VuZChlbmQpCi0jaWYgIUZUTF9VU0VTX0IzCi0gICAgICAgICwgbV9yYW5n
ZU1ldGFkYXRhKDApCi0jZW5kaWYKICAgICB7CiAgICAgfQogICAgIAogICAgIExWYWx1ZSBiZWdp
bigpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW47IH0KICAgICBMVmFsdWUgZW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9lbmQ7IH0KICAgICAKLSAgICB2b2lkIGRlY29yYXRlSW5zdHJ1Y3Rpb24oTENvbnRl
eHQsIExWYWx1ZSBsb2FkSW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIHJhbmdlS2luZCkgY29uc3Q7Cisg
ICAgdm9pZCBkZWNvcmF0ZUluc3RydWN0aW9uKExWYWx1ZSBsb2FkSW5zdHJ1Y3Rpb24sIHVuc2ln
bmVkIHJhbmdlS2luZCkgY29uc3Q7CiAgICAgCiBwcml2YXRlOgogICAgIExWYWx1ZSBtX2JlZ2lu
OwogICAgIExWYWx1ZSBtX2VuZDsKLSNpZiAhRlRMX1VTRVNfQjMKLSAgICBtdXRhYmxlIExWYWx1
ZSBtX3JhbmdlTWV0YWRhdGE7Ci0jZW5kaWYKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMV2VpZ2h0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExXZWlnaHQuaAkocmV2aXNpb24gMTk2
Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExXZWlnaHQuaAkod29ya2luZyBj
b3B5KQpAQCAtNTEsOSArNTEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgZmxvYXQgdmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CiAKLSNpZiBGVExfVVNFU19CMwogICAgIEIzOjpGcmVx
dWVuY3lDbGFzcyBmcmVxdWVuY3lDbGFzcygpIGNvbnN0IHsgcmV0dXJuIHZhbHVlKCkgPyBCMzo6
RnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbCA6IEIzOjpGcmVxdWVuY3lDbGFzczo6UmFyZTsgfQotI2Vu
ZGlmCiAgICAgCiAgICAgdW5zaWduZWQgc2NhbGVUb1RvdGFsKGRvdWJsZSB0b3RhbCkgY29uc3QK
ICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9Jbml0aWFsaXplTExWTS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vSW5pdGlhbGl6ZUxM
Vk0uY3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9J
bml0aWFsaXplTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzcgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJJbml0aWFsaXplTExWTS5oIgotCi0jaWYgSEFWRShMTFZNKQot
Ci0jaW5jbHVkZSAiTExWTUFQSS5oIgotI2luY2x1ZGUgIk9wdGlvbnMuaCIKLSNpbmNsdWRlIDxt
dXRleD4KLSNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3Rh
dGljIHZvaWQgaW5pdGlhbGl6ZUxMVk1JbXBsKCkKLXsKLSAgICBjb25zdCBib29sIHZlcmJvc2Ug
PQotICAgICAgICBPcHRpb25zOjp2ZXJib3NlRlRMQ29tcGlsYXRpb24oKQotICAgICAgICB8fCBP
cHRpb25zOjpkdW1wRlRMRGlzYXNzZW1ibHkoKQotICAgICAgICB8fCBPcHRpb25zOjp2ZXJib3Nl
RlRMRmFpbHVyZSgpCi0gICAgICAgIHx8IE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvbigpCi0g
ICAgICAgIHx8IE9wdGlvbnM6OmR1bXBERkdEaXNhc3NlbWJseSgpCi0gICAgICAgIHx8IE9wdGlv
bnM6OmR1bXBEaXNhc3NlbWJseSgpOwotICAgIAotICAgIExMVk1Jbml0aWFsaXplckZ1bmN0aW9u
IGluaXRpYWxpemVyID0gZ2V0TExWTUluaXRpYWxpemVyRnVuY3Rpb24odmVyYm9zZSk7Ci0gICAg
aWYgKCFpbml0aWFsaXplcikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJvb2wgZW5hYmxl
RmFzdElTZWwgPSBPcHRpb25zOjp1c2VMTFZNRmFzdElTZWwoKTsKLSAgICBsbHZtID0gaW5pdGlh
bGl6ZXIoV1RGTG9nQWx3YXlzQW5kQ3Jhc2gsICZlbmFibGVGYXN0SVNlbCk7Ci0gICAgaWYgKCFs
bHZtKSB7Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiTExWTSBp
bml0aWxpemF0aW9uIGZhaWxlZC5cbiIpOwotICAgIH0KLSAgICBpZiAoT3B0aW9uczo6dXNlTExW
TUZhc3RJU2VsKCkgJiYgIWVuYWJsZUZhc3RJU2VsKSB7Ci0gICAgICAgIGlmICh2ZXJib3NlKQot
ICAgICAgICAgICAgZGF0YUxvZygiRmFzdCBJU2VsIHJlcXVlc3RlZCBidXQgTExWTSBub3QgbmV3
IGVub3VnaC5cbiIpOwotICAgIH0KLSAgICAKLSAgICBlbmFibGVMTFZNRmFzdElTZWwgPSBlbmFi
bGVGYXN0SVNlbDsKLX0KLQotYm9vbCBpbml0aWFsaXplTExWTSgpCi17Ci0gICAgc3RhdGljIHN0
ZDo6b25jZV9mbGFnIGluaXRpYWxpemVMTFZNT25jZUtleTsKLQotICAgIHN0ZDo6Y2FsbF9vbmNl
KGluaXRpYWxpemVMTFZNT25jZUtleSwgaW5pdGlhbGl6ZUxMVk1JbXBsKTsKLSAgICByZXR1cm4g
ISFsbHZtOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEhBVkUoTExWTSkK
LQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vSW5pdGlhbGl6ZUxMVk0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9Jbml0aWFsaXplTExWTS5oCShy
ZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9Jbml0aWFsaXpl
TExWTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEluaXRpYWxpemVMTFZN
X2gKLSNkZWZpbmUgSW5pdGlhbGl6ZUxMVk1faAotCi0jaWYgSEFWRShMTFZNKQotCi0jaW5jbHVk
ZSAiTExWTUFQSS5oIgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi10eXBlZGVmIHZvaWQgKCpMb2dnZXJGdW5jdGlv
bikoY29uc3QgY2hhciosIC4uLikgV1RGX0FUVFJJQlVURV9QUklOVEYoMSwgMik7Ci10eXBlZGVm
IExMVk1BUEkqICgqTExWTUluaXRpYWxpemVyRnVuY3Rpb24pKExvZ2dlckZ1bmN0aW9uLCBib29s
KiBlbmFibGVGYXN0SVNlbCk7Ci0KLUxMVk1Jbml0aWFsaXplckZ1bmN0aW9uIGdldExMVk1Jbml0
aWFsaXplckZ1bmN0aW9uKGJvb2wgdmVyYm9zZSk7Ci0KLWV4dGVybiBjb25zdCBDU3RyaW5nKiBs
bHZtQml0Y29kZUxpYnJhcnlGb3JJbmxpbmluZ1BhdGg7Ci0KLS8vIFlvdSBtdXN0IGNhbGwgdGhp
cyBiZWZvcmUgdXNpbmcgSlNDOjpsbHZtLiBJdCdzIHNhZmUgdG8gY2FsbCB0aGlzIG11bHRpcGxl
IHRpbWVzLgotLy8gUmV0dXJucyB0cnVlIGlmIHdlIHN1Y2Nlc3NmdWxseSBsb2FkZWQgTExWTS4g
UmV0dXJucyBmYWxzZSBpZiB3ZSBkaWRuJ3QuCi1ib29sIGluaXRpYWxpemVMTFZNKCk7Ci0KLX0g
Ly8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gSEFWRShMTFZNKQotCi0jZW5kaWYgLy8gSW5p
dGlhbGl6ZUxMVk1faAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9Jbml0aWFs
aXplTExWTU1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0v
SW5pdGlhbGl6ZUxMVk1NYWMuY3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGx2bS9Jbml0aWFsaXplTExWTU1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5pdGlhbGl6ZUxMVk0uaCIK
LQotI2lmIEhBVkUoTExWTSkKLQotI2luY2x1ZGUgIkJ1bmRsZVBhdGguaCIKLSNpbmNsdWRlICJJ
bml0aWFsaXplTExWTVBPU0lYLmgiCi0jaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+
Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1MTFZNSW5pdGlhbGl6ZXJGdW5jdGlvbiBnZXRMTFZNSW5p
dGlhbGl6ZXJGdW5jdGlvbihib29sIHZlcmJvc2UpCi17Ci0gICAgcmV0dXJuIGdldExMVk1Jbml0
aWFsaXplckZ1bmN0aW9uUE9TSVgodG9DU3RyaW5nKGJ1bmRsZVBhdGgoKS5kYXRhKCksICIvTGli
cmFyaWVzL2xpYmxsdm1Gb3JKU0MuZHlsaWIiKS5kYXRhKCksIHZlcmJvc2UpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEhBVkUoTExWTSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNUE9TSVguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNUE9TSVguY3BwCShyZXZpc2lv
biAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9Jbml0aWFsaXplTExWTVBP
U0lYLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkluaXRpYWxpemVMTFZNUE9TSVguaCIKLQotI2lmIEhBVkUoTExWTSkKLQotI2lu
Y2x1ZGUgIkxMVk1BUEkuaCIKLSNpbmNsdWRlICJPcHRpb25zLmgiCi0jaW5jbHVkZSA8ZGxmY24u
aD4KLSNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotTExWTUlu
aXRpYWxpemVyRnVuY3Rpb24gZ2V0TExWTUluaXRpYWxpemVyRnVuY3Rpb25QT1NJWChjb25zdCBj
aGFyKiBsaWJyYXJ5TmFtZSwgYm9vbCB2ZXJib3NlKQotewotICAgIGludCBmbGFncyA9IFJUTERf
Tk9XOwotICAgIAotI2lmIE9TKExJTlVYKQotICAgIC8vIFdlIG5lZWQgdGhpcyB0byBjYXVzZSBv
dXIgb3ZlcnJpZGVzIChsaWtlIF9fY3hhX2F0ZXhpdCkgdG8gdGFrZSBwcmVjZWRlbnQgb3ZlciB0
aGUgX19jeGFfYXRleGl0IHRoYXQgaXMgYWxyZWFkeQotICAgIC8vIGdsb2JhbGx5IGV4cG9ydGVk
LiBUaG9zZSBvdmVycmlkZXMgYXJlIG5lY2Vzc2FyeSB0byBwcmV2ZW50IGNyYXNoZXMgKG91ciBf
X2N4YV9hdGV4aXQgdHVybnMgb2ZmIExMVk0ncyBleGl0LXRpbWUKLSAgICAvLyBkZXN0cnVjdGlv
biwgd2hpY2ggY2F1c2VzIGV4aXQtdGltZSBjcmFzaGVzIGlmIHRoZSBjb25jdXJyZW50IEpJVCBp
cyBzdGlsbCBydW5uaW5nKSBhbmQgdG8gbWFrZSBMTFZNIGFzc2VydGlvbgotICAgIC8vIGZhaWx1
cmVzIGZ1bm5lbCB0aHJvdWdoIFdlYktpdCdzIG1lY2hhbmlzbXMuIFRoaXMgZmxhZyBpbmR1Y2Vz
IGJlaGF2aW9yIHRoYXQgaXMgdGhlIGRlZmF1bHQgb24gRGFyd2luLiBPdGhlciBPU2VzCi0gICAg
Ly8gbWF5IG5lZWQgdGhlaXIgb3duIGZsYWdzIGluIHBsYWNlIG9mIHRoaXMuCi0gICAgZmxhZ3Mg
fD0gUlRMRF9ERUVQQklORDsKLSNlbmRpZgotICAgIAotICAgIHZvaWQqIGxpYnJhcnkgPSBkbG9w
ZW4obGlicmFyeU5hbWUsIGZsYWdzKTsKLSAgICBpZiAoIWxpYnJhcnkpIHsKLSAgICAgICAgaWYg
KHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJGYWlsZWQgdG8gbG9hZCBMTFZNIGxpYnJh
cnkgYXQgIiwgbGlicmFyeU5hbWUsICI6ICIsIGRsZXJyb3IoKSwgIlxuIik7Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBjaGFyKiBzeW1ib2xOYW1lID0g
ImluaXRpYWxpemVBbmRHZXRKU0NMTFZNQVBJIjsKLSAgICBMTFZNSW5pdGlhbGl6ZXJGdW5jdGlv
biBpbml0aWFsaXplciA9IGJpdHdpc2VfY2FzdDxMTFZNSW5pdGlhbGl6ZXJGdW5jdGlvbj4oCi0g
ICAgICAgIGRsc3ltKGxpYnJhcnksIHN5bWJvbE5hbWUpKTsKLSAgICBpZiAoIWluaXRpYWxpemVy
KSB7Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiRmFpbGVkIHRv
IGZpbmQgIiwgc3ltYm9sTmFtZSwgIiBpbiAiLCBsaWJyYXJ5TmFtZSwgIjogIiwgZGxlcnJvcigp
KTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBpbml0
aWFsaXplcjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBIQVZFKExMVk0p
Ci0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNUE9TSVgu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9Jbml0aWFsaXplTExW
TVBPU0lYLmgJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZt
L0luaXRpYWxpemVMTFZNUE9TSVguaAkod29ya2luZyBjb3B5KQpAQCAtMSw0MiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5k
ZWYgSW5pdGlhbGl6ZUxMVk1QT1NJWF9oCi0jZGVmaW5lIEluaXRpYWxpemVMTFZNUE9TSVhfaAot
Ci0jaWYgSEFWRShMTFZNKQotCi0jaW5jbHVkZSAiSW5pdGlhbGl6ZUxMVk0uaCIKLQotbmFtZXNw
YWNlIEpTQyB7Ci0KLUxMVk1Jbml0aWFsaXplckZ1bmN0aW9uIGdldExMVk1Jbml0aWFsaXplckZ1
bmN0aW9uUE9TSVgoY29uc3QgY2hhciogbGlicmFyeU5hbWUsIGJvb2wgdmVyYm9zZSk7Ci0KLX0g
Ly8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gSEFWRShMTFZNKQotCi0jZW5kaWYgLy8gSW5p
dGlhbGl6ZUxMVk1QT1NJWF9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0xM
Vk1BUEkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0xMVk1B
UEkuY3BwCShyZXZpc2lvbiAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9M
TFZNQVBJLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzOCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJMTFZNQVBJLmgiCi0KLSNpZiBIQVZFKExMVk0pCi0KLW5hbWVzcGFjZSBK
U0MgewotCi1MTFZNQVBJKiBsbHZtOwotYm9vbCBlbmFibGVMTFZNRmFzdElTZWw7Ci0KLX0KLQot
I2VuZGlmIC8vIEhBVkUoTExWTSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0xM
Vk1BUEkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9MTFZNQVBJ
LmgJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0xMVk1B
UEkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgTExWTUFQSV9oCi0jZGVm
aW5lIExMVk1BUElfaAotCi0jaWYgSEFWRShMTFZNKQotCi0jaW5jbHVkZSAiTExWTUFQSUZ1bmN0
aW9ucy5oIgotI2luY2x1ZGUgIkxMVk1IZWFkZXJzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1z
dHJ1Y3QgTExWTUFQSSB7Ci0jZGVmaW5lIExMVk1fQVBJX0ZVTkNUSU9OX0RFQ0xBUkFUSU9OKHJl
dHVyblR5cGUsIG5hbWUsIHNpZ25hdHVyZSkgXAotICAgIHJldHVyblR5cGUgKCpuYW1lKSBzaWdu
YXR1cmU7Ci0gICAgRk9SX0VBQ0hfTExWTV9BUElfRlVOQ1RJT04oTExWTV9BUElfRlVOQ1RJT05f
REVDTEFSQVRJT04pCi0jdW5kZWYgTExWTV9BUElfRlVOQ1RJT05fREVDTEFSQVRJT04KLSAgICAK
LSAgICAvLyBGdW5jdGlvbnMgdGhhdCB3ZSBhZGQgY29uZGl0aW9uYWxseS4KLSAgICB2b2lkICgq
QWRkTG93ZXJTd2l0Y2hQYXNzKShMTFZNUGFzc01hbmFnZXJSZWYgUE0pOwotfTsKLQotZXh0ZXJu
IExMVk1BUEkqIGxsdm07Ci1leHRlcm4gYm9vbCBlbmFibGVMTFZNRmFzdElTZWw7Ci0KLX0gLy8g
bmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gSEFWRShMTFZNKQotCi0jZW5kaWYgLy8gTExWTUFQ
SV9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0xMVk1BUElGdW5jdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9MTFZNQVBJRnVuY3Rp
b25zLmgJKHJldmlzaW9uIDE5NjY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0xM
Vk1BUElGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxNzYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIExMVk1BUElG
dW5jdGlvbnNfaAotI2RlZmluZSBMTFZNQVBJRnVuY3Rpb25zX2gKLQotI2luY2x1ZGUgIkxMVk1I
ZWFkZXJzLmgiCi0KLSNkZWZpbmUgRk9SX0VBQ0hfTExWTV9BUElfRlVOQ1RJT04obWFjcm8pIFwK
LSAgICBtYWNybyh2b2lkLCBEaXNwb3NlTWVzc2FnZSwgKGNoYXIgKk1lc3NhZ2UpKSBcCi0gICAg
bWFjcm8odm9pZCwgSW5zdGFsbEZhdGFsRXJyb3JIYW5kbGVyLCAoTExWTUZhdGFsRXJyb3JIYW5k
bGVyIEhhbmRsZXIpKSBcCi0gICAgbWFjcm8oTExWTUNvbnRleHRSZWYsIENvbnRleHRDcmVhdGUs
ICh2b2lkKSkgXAotICAgIG1hY3JvKHZvaWQsIENvbnRleHREaXNwb3NlLCAoTExWTUNvbnRleHRS
ZWYgQykpIFwKLSAgICBtYWNybyh1bnNpZ25lZCwgR2V0TURLaW5kSURJbkNvbnRleHQsIChMTFZN
Q29udGV4dFJlZiBDLCBjb25zdCBjaGFyKiBOYW1lLCB1bnNpZ25lZCBTTGVuKSkgXAotICAgIG1h
Y3JvKExMVk1Nb2R1bGVSZWYsIE1vZHVsZUNyZWF0ZVdpdGhOYW1lSW5Db250ZXh0LCAoY29uc3Qg
Y2hhciAqTW9kdWxlSUQsIExMVk1Db250ZXh0UmVmIEMpKSBcCi0gICAgbWFjcm8odm9pZCwgRGlz
cG9zZU1vZHVsZSwgKExMVk1Nb2R1bGVSZWYgTSkpIFwKLSAgICBtYWNybyh2b2lkLCBTZXREYXRh
TGF5b3V0LCAoTExWTU1vZHVsZVJlZiBNLCBjb25zdCBjaGFyICpUcmlwbGUpKSBcCi0gICAgbWFj
cm8odm9pZCwgU2V0VGFyZ2V0LCAoTExWTU1vZHVsZVJlZiBNLCBjb25zdCBjaGFyICpUcmlwbGUp
KSBcCi0gICAgbWFjcm8odm9pZCwgRHVtcE1vZHVsZSwgKExMVk1Nb2R1bGVSZWYgTSkpIFwKLSAg
ICBtYWNybyhMTFZNQ29udGV4dFJlZiwgR2V0TW9kdWxlQ29udGV4dCwgKExMVk1Nb2R1bGVSZWYg
TSkpIFwKLSAgICBtYWNybyhMTFZNVHlwZVJlZiwgR2V0VHlwZUJ5TmFtZSwgKExMVk1Nb2R1bGVS
ZWYgTSwgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyh2b2lkLCBEdW1wVHlwZSwgKExM
Vk1UeXBlUmVmIFZhbCkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEFkZEZ1bmN0aW9uLCAo
TExWTU1vZHVsZVJlZiBNLCBjb25zdCBjaGFyICpOYW1lLCBMTFZNVHlwZVJlZiBGdW5jdGlvblR5
KSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgR2V0Rmlyc3RGdW5jdGlvbiwgKExMVk1Nb2R1
bGVSZWYgTSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEdldE5leHRGdW5jdGlvbiwgKExM
Vk1WYWx1ZVJlZiBGbikpIFwKLSAgICBtYWNybyhMTFZNVHlwZVJlZiwgSW50MVR5cGVJbkNvbnRl
eHQsIChMTFZNQ29udGV4dFJlZiBDKSkgXAotICAgIG1hY3JvKExMVk1UeXBlUmVmLCBJbnQ4VHlw
ZUluQ29udGV4dCwgKExMVk1Db250ZXh0UmVmIEMpKSBcCi0gICAgbWFjcm8oTExWTVR5cGVSZWYs
IEludDE2VHlwZUluQ29udGV4dCwgKExMVk1Db250ZXh0UmVmIEMpKSBcCi0gICAgbWFjcm8oTExW
TVR5cGVSZWYsIEludDMyVHlwZUluQ29udGV4dCwgKExMVk1Db250ZXh0UmVmIEMpKSBcCi0gICAg
bWFjcm8oTExWTVR5cGVSZWYsIEludDY0VHlwZUluQ29udGV4dCwgKExMVk1Db250ZXh0UmVmIEMp
KSBcCi0gICAgbWFjcm8oTExWTVR5cGVSZWYsIEludFR5cGVJbkNvbnRleHQsIChMTFZNQ29udGV4
dFJlZiBDLCB1bnNpZ25lZCBOdW1CaXRzKSkgXAotICAgIG1hY3JvKExMVk1UeXBlUmVmLCBGbG9h
dFR5cGVJbkNvbnRleHQsIChMTFZNQ29udGV4dFJlZiBDKSkgXAotICAgIG1hY3JvKExMVk1UeXBl
UmVmLCBEb3VibGVUeXBlSW5Db250ZXh0LCAoTExWTUNvbnRleHRSZWYgQykpIFwKLSAgICBtYWNy
byhMTFZNVHlwZVJlZiwgRnVuY3Rpb25UeXBlLCAoTExWTVR5cGVSZWYgUmV0dXJuVHlwZSwgTExW
TVR5cGVSZWYgKlBhcmFtVHlwZXMsIHVuc2lnbmVkIFBhcmFtQ291bnQsIExMVk1Cb29sIElzVmFy
QXJnKSkgXAotICAgIG1hY3JvKExMVk1UeXBlUmVmLCBTdHJ1Y3RUeXBlSW5Db250ZXh0LCAoTExW
TUNvbnRleHRSZWYgQywgTExWTVR5cGVSZWYgKkVsZW1lbnRUeXBlcywgdW5zaWduZWQgRWxlbWVu
dENvdW50LCBMTFZNQm9vbCBQYWNrZWQpKSBcCi0gICAgbWFjcm8oTExWTVR5cGVSZWYsIEFycmF5
VHlwZSwgKExMVk1UeXBlUmVmIEVsZW1lbnRUeXBlLCB1bnNpZ25lZCBFbGVtZW50Q291bnQpKSBc
Ci0gICAgbWFjcm8oTExWTVR5cGVSZWYsIFBvaW50ZXJUeXBlLCAoTExWTVR5cGVSZWYgRWxlbWVu
dFR5cGUsIHVuc2lnbmVkIEFkZHJlc3NTcGFjZSkpIFwKLSAgICBtYWNybyhMTFZNVHlwZVJlZiwg
VmVjdG9yVHlwZSwgKExMVk1UeXBlUmVmIEVsZW1lbnRUeXBlLCB1bnNpZ25lZCBFbGVtZW50Q291
bnQpKSBcCi0gICAgbWFjcm8oTExWTVR5cGVSZWYsIFZvaWRUeXBlSW5Db250ZXh0LCAoTExWTUNv
bnRleHRSZWYgQykpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIENvbnN0TnVsbCwgKExMVk1U
eXBlUmVmIFR5KSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgR2V0VW5kZWYsIChMTFZNVHlw
ZVJlZiBUeSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIENvbnN0SW50LCAoTExWTVR5cGVS
ZWYgSW50VHksIHVuc2lnbmVkIGxvbmcgbG9uZyBOLCBMTFZNQm9vbCBTaWduRXh0ZW5kKSkgXAot
ICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQ29uc3RSZWFsLCAoTExWTVR5cGVSZWYgUmVhbFR5LCBk
b3VibGUgTikpIFwKLSAgICBtYWNybyh2b2lkLCBTZXRMaW5rYWdlLCAoTExWTVZhbHVlUmVmIEds
b2JhbCwgTExWTUxpbmthZ2UgTGlua2FnZSkpIFwKLSAgICBtYWNybyh2b2lkLCBTZXRGdW5jdGlv
bkNhbGxDb252LCAoTExWTVZhbHVlUmVmIEZuLCB1bnNpZ25lZCBDQykpIFwKLSAgICBtYWNybyh2
b2lkLCBBZGRUYXJnZXREZXBlbmRlbnRGdW5jdGlvbkF0dHIsIChMTFZNVmFsdWVSZWYgRm4sIGNv
bnN0IGNoYXIgKkEsIGNvbnN0IGNoYXIgKlYpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBH
ZXRQYXJhbSwgKExMVk1WYWx1ZVJlZiBGbiwgdW5zaWduZWQgSW5kZXgpKSBcCi0gICAgbWFjcm8o
TExWTVZhbHVlUmVmLCBNRFN0cmluZ0luQ29udGV4dCwgKExMVk1Db250ZXh0UmVmIEMsIGNvbnN0
IGNoYXIgKlN0ciwgdW5zaWduZWQgU0xlbikpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIE1E
U3RyaW5nLCAoY29uc3QgY2hhciAqU3RyLCB1bnNpZ25lZCBTTGVuKSkgXAotICAgIG1hY3JvKExM
Vk1WYWx1ZVJlZiwgTUROb2RlSW5Db250ZXh0LCAoTExWTUNvbnRleHRSZWYgQywgTExWTVZhbHVl
UmVmICpWYWxzLCB1bnNpZ25lZCBDb3VudCkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIE1E
Tm9kZSwgKExMVk1WYWx1ZVJlZiAqVmFscywgdW5zaWduZWQgQ291bnQpKSBcCi0gICAgbWFjcm8o
TExWTUJhc2ljQmxvY2tSZWYsIEFwcGVuZEJhc2ljQmxvY2tJbkNvbnRleHQsIChMTFZNQ29udGV4
dFJlZiBDLCBMTFZNVmFsdWVSZWYgRm4sIGNvbnN0IGNoYXIgKk5hbWUpKSBcCi0gICAgbWFjcm8o
TExWTUJhc2ljQmxvY2tSZWYsIEluc2VydEJhc2ljQmxvY2tJbkNvbnRleHQsIChMTFZNQ29udGV4
dFJlZiBDLCBMTFZNQmFzaWNCbG9ja1JlZiBCQiwgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBt
YWNybyh2b2lkLCBTZXRNZXRhZGF0YSwgKExMVk1WYWx1ZVJlZiBWYWwsIHVuc2lnbmVkIEtpbmRJ
RCwgTExWTVZhbHVlUmVmIE5vZGUpKSBcCi0gICAgbWFjcm8odm9pZCwgU2V0SW5zdHJ1Y3Rpb25D
YWxsQ29udiwgKExMVk1WYWx1ZVJlZiBJbnN0ciwgdW5zaWduZWQgQ0MpKSBcCi0gICAgbWFjcm8o
dm9pZCwgQWRkSW5jb21pbmcsIChMTFZNVmFsdWVSZWYgUGhpTm9kZSwgTExWTVZhbHVlUmVmICpJ
bmNvbWluZ1ZhbHVlcywgTExWTUJhc2ljQmxvY2tSZWYgKkluY29taW5nQmxvY2tzLCB1bnNpZ25l
ZCBDb3VudCkpIFwKLSAgICBtYWNybyhMTFZNQnVpbGRlclJlZiwgQ3JlYXRlQnVpbGRlckluQ29u
dGV4dCwgKExMVk1Db250ZXh0UmVmIEMpKSBcCi0gICAgbWFjcm8odm9pZCwgUG9zaXRpb25CdWls
ZGVyQXRFbmQsIChMTFZNQnVpbGRlclJlZiBCdWlsZGVyLCBMTFZNQmFzaWNCbG9ja1JlZiBCbG9j
aykpIFwKLSAgICBtYWNybyh2b2lkLCBEaXNwb3NlQnVpbGRlciwgKExMVk1CdWlsZGVyUmVmIEJ1
aWxkZXIpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZFJldCwgKExMVk1CdWlsZGVy
UmVmLCBMTFZNVmFsdWVSZWYgVikpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkQnIs
IChMTFZNQnVpbGRlclJlZiwgTExWTUJhc2ljQmxvY2tSZWYgRGVzdCkpIFwKLSAgICBtYWNybyhM
TFZNVmFsdWVSZWYsIEJ1aWxkQ29uZEJyLCAoTExWTUJ1aWxkZXJSZWYsIExMVk1WYWx1ZVJlZiBJ
ZiwgTExWTUJhc2ljQmxvY2tSZWYgVGhlbiwgTExWTUJhc2ljQmxvY2tSZWYgRWxzZSkpIFwKLSAg
ICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkU3dpdGNoLCAoTExWTUJ1aWxkZXJSZWYsIExMVk1W
YWx1ZVJlZiBWLCBMTFZNQmFzaWNCbG9ja1JlZiBFbHNlLCB1bnNpZ25lZCBOdW1DYXNlcykpIFwK
LSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkVW5yZWFjaGFibGUsIChMTFZNQnVpbGRlclJl
ZikpIFwKLSAgICBtYWNybyh2b2lkLCBBZGRDYXNlLCAoTExWTVZhbHVlUmVmIFN3aXRjaCwgTExW
TVZhbHVlUmVmIE9uVmFsLCBMTFZNQmFzaWNCbG9ja1JlZiBEZXN0KSkgXAotICAgIG1hY3JvKExM
Vk1WYWx1ZVJlZiwgQnVpbGRBZGQsIChMTFZNQnVpbGRlclJlZiwgTExWTVZhbHVlUmVmIExIUywg
TExWTVZhbHVlUmVmIFJIUywgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFs
dWVSZWYsIEJ1aWxkRkFkZCwgKExMVk1CdWlsZGVyUmVmLCBMTFZNVmFsdWVSZWYgTEhTLCBMTFZN
VmFsdWVSZWYgUkhTLCBjb25zdCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJl
ZiwgQnVpbGRTdWIsIChMTFZNQnVpbGRlclJlZiwgTExWTVZhbHVlUmVmIExIUywgTExWTVZhbHVl
UmVmIFJIUywgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1
aWxkRlN1YiwgKExMVk1CdWlsZGVyUmVmLCBMTFZNVmFsdWVSZWYgTEhTLCBMTFZNVmFsdWVSZWYg
UkhTLCBjb25zdCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRN
dWwsIChMTFZNQnVpbGRlclJlZiwgTExWTVZhbHVlUmVmIExIUywgTExWTVZhbHVlUmVmIFJIUywg
Y29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkRk11bCwg
KExMVk1CdWlsZGVyUmVmLCBMTFZNVmFsdWVSZWYgTEhTLCBMTFZNVmFsdWVSZWYgUkhTLCBjb25z
dCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRTRGl2LCAoTExW
TUJ1aWxkZXJSZWYsIExMVk1WYWx1ZVJlZiBMSFMsIExMVk1WYWx1ZVJlZiBSSFMsIGNvbnN0IGNo
YXIgKk5hbWUpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZEZEaXYsIChMTFZNQnVp
bGRlclJlZiwgTExWTVZhbHVlUmVmIExIUywgTExWTVZhbHVlUmVmIFJIUywgY29uc3QgY2hhciAq
TmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkU1JlbSwgKExMVk1CdWlsZGVy
UmVmLCBMTFZNVmFsdWVSZWYgTEhTLCBMTFZNVmFsdWVSZWYgUkhTLCBjb25zdCBjaGFyICpOYW1l
KSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRGUmVtLCAoTExWTUJ1aWxkZXJSZWYs
IExMVk1WYWx1ZVJlZiBMSFMsIExMVk1WYWx1ZVJlZiBSSFMsIGNvbnN0IGNoYXIgKk5hbWUpKSBc
Ci0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZFNobCwgKExMVk1CdWlsZGVyUmVmLCBMTFZN
VmFsdWVSZWYgTEhTLCBMTFZNVmFsdWVSZWYgUkhTLCBjb25zdCBjaGFyICpOYW1lKSkgXAotICAg
IG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRMU2hyLCAoTExWTUJ1aWxkZXJSZWYsIExMVk1WYWx1
ZVJlZiBMSFMsIExMVk1WYWx1ZVJlZiBSSFMsIGNvbnN0IGNoYXIgKk5hbWUpKSBcCi0gICAgbWFj
cm8oTExWTVZhbHVlUmVmLCBCdWlsZEFTaHIsIChMTFZNQnVpbGRlclJlZiwgTExWTVZhbHVlUmVm
IExIUywgTExWTVZhbHVlUmVmIFJIUywgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyhM
TFZNVmFsdWVSZWYsIEJ1aWxkQW5kLCAoTExWTUJ1aWxkZXJSZWYsIExMVk1WYWx1ZVJlZiBMSFMs
IExMVk1WYWx1ZVJlZiBSSFMsIGNvbnN0IGNoYXIgKk5hbWUpKSBcCi0gICAgbWFjcm8oTExWTVZh
bHVlUmVmLCBCdWlsZE9yLCAoTExWTUJ1aWxkZXJSZWYsIExMVk1WYWx1ZVJlZiBMSFMsIExMVk1W
YWx1ZVJlZiBSSFMsIGNvbnN0IGNoYXIgKk5hbWUpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVm
LCBCdWlsZFhvciwgKExMVk1CdWlsZGVyUmVmLCBMTFZNVmFsdWVSZWYgTEhTLCBMTFZNVmFsdWVS
ZWYgUkhTLCBjb25zdCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVp
bGROZWcsIChMTFZNQnVpbGRlclJlZiwgTExWTVZhbHVlUmVmIFYsIGNvbnN0IGNoYXIgKk5hbWUp
KSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZEZOZWcsIChMTFZNQnVpbGRlclJlZiwg
TExWTVZhbHVlUmVmIFYsIGNvbnN0IGNoYXIgKk5hbWUpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVl
UmVmLCBCdWlsZE5vdCwgKExMVk1CdWlsZGVyUmVmLCBMTFZNVmFsdWVSZWYgViwgY29uc3QgY2hh
ciAqTmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkQWxsb2NhLCAoTExWTUJ1
aWxkZXJSZWYsIExMVk1UeXBlUmVmIFR5LCBjb25zdCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3Jv
KExMVk1WYWx1ZVJlZiwgQnVpbGRMb2FkLCAoTExWTUJ1aWxkZXJSZWYsIExMVk1WYWx1ZVJlZiBQ
b2ludGVyVmFsLCBjb25zdCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwg
QnVpbGRTdG9yZSwgKExMVk1CdWlsZGVyUmVmLCBMTFZNVmFsdWVSZWYgVmFsLCBMTFZNVmFsdWVS
ZWYgUHRyKSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRaRXh0LCAoTExWTUJ1aWxk
ZXJSZWYsIExMVk1WYWx1ZVJlZiBWYWwsIExMVk1UeXBlUmVmIERlc3RUeSwgY29uc3QgY2hhciAq
TmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkU0V4dCwgKExMVk1CdWlsZGVy
UmVmLCBMTFZNVmFsdWVSZWYgVmFsLCBMTFZNVHlwZVJlZiBEZXN0VHksIGNvbnN0IGNoYXIgKk5h
bWUpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZEZQVG9VSSwgKExMVk1CdWlsZGVy
UmVmLCBMTFZNVmFsdWVSZWYgVmFsLCBMTFZNVHlwZVJlZiBEZXN0VHksIGNvbnN0IGNoYXIgKk5h
bWUpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZEZQVG9TSSwgKExMVk1CdWlsZGVy
UmVmLCBMTFZNVmFsdWVSZWYgVmFsLCBMTFZNVHlwZVJlZiBEZXN0VHksIGNvbnN0IGNoYXIgKk5h
bWUpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZFVJVG9GUCwgKExMVk1CdWlsZGVy
UmVmLCBMTFZNVmFsdWVSZWYgVmFsLCBMTFZNVHlwZVJlZiBEZXN0VHksIGNvbnN0IGNoYXIgKk5h
bWUpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZFNJVG9GUCwgKExMVk1CdWlsZGVy
UmVmLCBMTFZNVmFsdWVSZWYgVmFsLCBMTFZNVHlwZVJlZiBEZXN0VHksIGNvbnN0IGNoYXIgKk5h
bWUpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZFB0clRvSW50LCAoTExWTUJ1aWxk
ZXJSZWYsIExMVk1WYWx1ZVJlZiBWYWwsIExMVk1UeXBlUmVmIERlc3RUeSwgY29uc3QgY2hhciAq
TmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkSW50VG9QdHIsIChMTFZNQnVp
bGRlclJlZiwgTExWTVZhbHVlUmVmIFZhbCwgTExWTVR5cGVSZWYgRGVzdFR5LCBjb25zdCBjaGFy
ICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRCaXRDYXN0LCAoTExWTUJ1
aWxkZXJSZWYsIExMVk1WYWx1ZVJlZiBWYWwsIExMVk1UeXBlUmVmIERlc3RUeSwgY29uc3QgY2hh
ciAqTmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1aWxkSW50Q2FzdCwgKExMVk1C
dWlsZGVyUmVmLCBMTFZNVmFsdWVSZWYgVmFsLCBMTFZNVHlwZVJlZiBEZXN0VHksIGNvbnN0IGNo
YXIgKk5hbWUpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZEZQQ2FzdCwgKExMVk1C
dWlsZGVyUmVmLCBMTFZNVmFsdWVSZWYgVmFsLCBMTFZNVHlwZVJlZiBEZXN0VHksIGNvbnN0IGNo
YXIgKk5hbWUpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZElDbXAsIChMTFZNQnVp
bGRlclJlZiwgTExWTUludFByZWRpY2F0ZSBPcCwgTExWTVZhbHVlUmVmIExIUywgTExWTVZhbHVl
UmVmIFJIUywgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNybyhMTFZNVmFsdWVSZWYsIEJ1
aWxkRkNtcCwgKExMVk1CdWlsZGVyUmVmLCBMTFZNUmVhbFByZWRpY2F0ZSBPcCwgTExWTVZhbHVl
UmVmIExIUywgTExWTVZhbHVlUmVmIFJIUywgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBtYWNy
byhMTFZNVmFsdWVSZWYsIEJ1aWxkUGhpLCAoTExWTUJ1aWxkZXJSZWYsIExMVk1UeXBlUmVmIFR5
LCBjb25zdCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVpbGRDYWxs
LCAoTExWTUJ1aWxkZXJSZWYsIExMVk1WYWx1ZVJlZiBGbiwgTExWTVZhbHVlUmVmICpBcmdzLCB1
bnNpZ25lZCBOdW1BcmdzLCBjb25zdCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1WYWx1
ZVJlZiwgQnVpbGRTZWxlY3QsIChMTFZNQnVpbGRlclJlZiwgTExWTVZhbHVlUmVmIElmLCBMTFZN
VmFsdWVSZWYgVGhlbiwgTExWTVZhbHVlUmVmIEVsc2UsIGNvbnN0IGNoYXIgKk5hbWUpKSBcCi0g
ICAgbWFjcm8oTExWTVZhbHVlUmVmLCBCdWlsZEluc2VydEVsZW1lbnQsIChMTFZNQnVpbGRlclJl
ZiwgTExWTVZhbHVlUmVmIFZlY1ZhbCwgTExWTVZhbHVlUmVmIEVsdFZhbCwgTExWTVZhbHVlUmVm
IEluZGV4LCBjb25zdCBjaGFyICpOYW1lKSkgXAotICAgIG1hY3JvKExMVk1WYWx1ZVJlZiwgQnVp
bGRFeHRyYWN0VmFsdWUsIChMTFZNQnVpbGRlclJlZiwgTExWTVZhbHVlUmVmIEFnZ1ZhbCwgdW5z
aWduZWQgSW5kZXgsIGNvbnN0IGNoYXIgKk5hbWUpKSBcCi0gICAgbWFjcm8oTExWTVZhbHVlUmVm
LCBCdWlsZEZlbmNlLCAoTExWTUJ1aWxkZXJSZWYgQiwgTExWTUF0b21pY09yZGVyaW5nIE9yZGVy
aW5nLCBMTFZNQm9vbCBpc1NpbmdsZVRocmVhZCwgY29uc3QgY2hhciAqTmFtZSkpIFwKLSAgICBt
YWNybyhMTFZNUGFzc01hbmFnZXJSZWYsIENyZWF0ZVBhc3NNYW5hZ2VyLCAodm9pZCkpIFwKLSAg
ICBtYWNybyhMTFZNUGFzc01hbmFnZXJSZWYsIENyZWF0ZUZ1bmN0aW9uUGFzc01hbmFnZXJGb3JN
b2R1bGUsIChMTFZNTW9kdWxlUmVmIE0pKSBcCi0gICAgbWFjcm8oTExWTVBhc3NNYW5hZ2VyUmVm
LCBDcmVhdGVGdW5jdGlvblBhc3NNYW5hZ2VyLCAoTExWTU1vZHVsZVByb3ZpZGVyUmVmIE1QKSkg
XAotICAgIG1hY3JvKExMVk1Cb29sLCBSdW5QYXNzTWFuYWdlciwgKExMVk1QYXNzTWFuYWdlclJl
ZiBQTSwgTExWTU1vZHVsZVJlZiBNKSkgXAotICAgIG1hY3JvKExMVk1Cb29sLCBJbml0aWFsaXpl
RnVuY3Rpb25QYXNzTWFuYWdlciwgKExMVk1QYXNzTWFuYWdlclJlZiBGUE0pKSBcCi0gICAgbWFj
cm8oTExWTUJvb2wsIFJ1bkZ1bmN0aW9uUGFzc01hbmFnZXIsIChMTFZNUGFzc01hbmFnZXJSZWYg
RlBNLCBMTFZNVmFsdWVSZWYgRikpIFwKLSAgICBtYWNybyhMTFZNQm9vbCwgRmluYWxpemVGdW5j
dGlvblBhc3NNYW5hZ2VyLCAoTExWTVBhc3NNYW5hZ2VyUmVmIEZQTSkpIFwKLSAgICBtYWNybyh2
b2lkLCBEaXNwb3NlUGFzc01hbmFnZXIsIChMTFZNUGFzc01hbmFnZXJSZWYgUE0pKSBcCi0gICAg
bWFjcm8oTExWTUJvb2wsIFN0YXJ0TXVsdGl0aHJlYWRlZCwgKCkpIFwKLSAgICBtYWNybyh2b2lk
LCBBZGRUYXJnZXREYXRhLCAoTExWTVRhcmdldERhdGFSZWYsIExMVk1QYXNzTWFuYWdlclJlZikp
IFwKLSAgICBtYWNybyhjaGFyICosIENvcHlTdHJpbmdSZXBPZlRhcmdldERhdGEsIChMTFZNVGFy
Z2V0RGF0YVJlZikpIFwKLSAgICBtYWNybyhMTFZNVHlwZVJlZiwgSW50UHRyVHlwZSwgKExMVk1U
YXJnZXREYXRhUmVmKSkgXAotICAgIG1hY3JvKHZvaWQsIExpbmtJbk1DSklULCAodm9pZCkpIFwK
LSAgICBtYWNybyh2b2lkLCBJbml0aWFsaXplTUNKSVRDb21waWxlck9wdGlvbnMsIChzdHJ1Y3Qg
TExWTU1DSklUQ29tcGlsZXJPcHRpb25zICpPcHRpb25zLCBzaXplX3QgU2l6ZU9mT3B0aW9ucykp
IFwKLSAgICBtYWNybyhMTFZNQm9vbCwgQ3JlYXRlTUNKSVRDb21waWxlckZvck1vZHVsZSwgKExM
Vk1FeGVjdXRpb25FbmdpbmVSZWYgKk91dEpJVCwgTExWTU1vZHVsZVJlZiBNLCBzdHJ1Y3QgTExW
TU1DSklUQ29tcGlsZXJPcHRpb25zICpPcHRpb25zLCBzaXplX3QgU2l6ZU9mT3B0aW9ucywgY2hh
ciAqKk91dEVycm9yKSkgXAotICAgIG1hY3JvKHZvaWQsIERpc3Bvc2VFeGVjdXRpb25FbmdpbmUs
IChMTFZNRXhlY3V0aW9uRW5naW5lUmVmIEVFKSkgXAotICAgIG1hY3JvKExMVk1UYXJnZXREYXRh
UmVmLCBHZXRFeGVjdXRpb25FbmdpbmVUYXJnZXREYXRhLCAoTExWTUV4ZWN1dGlvbkVuZ2luZVJl
ZiBFRSkpIFwKLSAgICBtYWNybyhMTFZNVGFyZ2V0TWFjaGluZVJlZiwgR2V0RXhlY3V0aW9uRW5n
aW5lVGFyZ2V0TWFjaGluZSwgKExMVk1FeGVjdXRpb25FbmdpbmVSZWYgRUUpKSBcCi0gICAgbWFj
cm8odm9pZCAqLCBHZXRQb2ludGVyVG9HbG9iYWwsIChMTFZNRXhlY3V0aW9uRW5naW5lUmVmIEVF
LCBMTFZNVmFsdWVSZWYgR2xvYmFsKSkgXAotICAgIG1hY3JvKExMVk1NQ0pJVE1lbW9yeU1hbmFn
ZXJSZWYsIENyZWF0ZVNpbXBsZU1DSklUTWVtb3J5TWFuYWdlciwgKHZvaWQgKk9wYXF1ZSwgTExW
TU1lbW9yeU1hbmFnZXJBbGxvY2F0ZUNvZGVTZWN0aW9uQ2FsbGJhY2sgQWxsb2NhdGVDb2RlU2Vj
dGlvbiwgTExWTU1lbW9yeU1hbmFnZXJBbGxvY2F0ZURhdGFTZWN0aW9uQ2FsbGJhY2sgQWxsb2Nh
dGVEYXRhU2VjdGlvbiwgTExWTU1lbW9yeU1hbmFnZXJGaW5hbGl6ZU1lbW9yeUNhbGxiYWNrIEZp
bmFsaXplTWVtb3J5LCBMTFZNTWVtb3J5TWFuYWdlckRlc3Ryb3lDYWxsYmFjayBEZXN0b3J5KSkg
XAotICAgIG1hY3JvKExMVk1Cb29sLCBWZXJpZnlNb2R1bGUsIChMTFZNTW9kdWxlUmVmIE0sIExM
Vk1WZXJpZmllckZhaWx1cmVBY3Rpb24gQWN0aW9uLCBjaGFyICoqT3V0TWVzc2FnZSkpIFwKLSAg
ICBtYWNybyhMTFZNRGlzYXNtQ29udGV4dFJlZiwgQ3JlYXRlRGlzYXNtLCAoY29uc3QgY2hhciAq
VHJpcGxlTmFtZSwgdm9pZCAqRGlzSW5mbywgaW50IFRhZ1R5cGUsIExMVk1PcEluZm9DYWxsYmFj
ayBHZXRPcEluZm8sIExMVk1TeW1ib2xMb29rdXBDYWxsYmFjayBTeW1ib2xMb29rVXApKSBcCi0g
ICAgbWFjcm8odm9pZCwgRGlzYXNtRGlzcG9zZSwgKExMVk1EaXNhc21Db250ZXh0UmVmIERDKSkg
XAotICAgIG1hY3JvKHNpemVfdCwgRGlzYXNtSW5zdHJ1Y3Rpb24sIChMTFZNRGlzYXNtQ29udGV4
dFJlZiBEQywgdWludDhfdCAqQnl0ZXMsIHVpbnQ2NF90IEJ5dGVzU2l6ZSwgdWludDY0X3QgUEMs
IGNoYXIgKk91dFN0cmluZywgc2l6ZV90IE91dFN0cmluZ1NpemUpKSBcCi0gICAgbWFjcm8oTExW
TVBhc3NNYW5hZ2VyQnVpbGRlclJlZiwgUGFzc01hbmFnZXJCdWlsZGVyQ3JlYXRlLCAodm9pZCkp
IFwKLSAgICBtYWNybyh2b2lkLCBQYXNzTWFuYWdlckJ1aWxkZXJEaXNwb3NlLCAoTExWTVBhc3NN
YW5hZ2VyQnVpbGRlclJlZiBQTUIpKSBcCi0gICAgbWFjcm8odm9pZCwgUGFzc01hbmFnZXJCdWls
ZGVyU2V0T3B0TGV2ZWwsIChMTFZNUGFzc01hbmFnZXJCdWlsZGVyUmVmIFBNQiwgdW5zaWduZWQg
T3B0TGV2ZWwpKSBcCi0gICAgbWFjcm8odm9pZCwgUGFzc01hbmFnZXJCdWlsZGVyU2V0U2l6ZUxl
dmVsLCAoTExWTVBhc3NNYW5hZ2VyQnVpbGRlclJlZiBQTUIsIHVuc2lnbmVkIFNpemVMZXZlbCkp
IFwKLSAgICBtYWNybyh2b2lkLCBQYXNzTWFuYWdlckJ1aWxkZXJVc2VJbmxpbmVyV2l0aFRocmVz
aG9sZCwgKExMVk1QYXNzTWFuYWdlckJ1aWxkZXJSZWYgUE1CLCB1bnNpZ25lZCBUaHJlc2hvbGQp
KSBcCi0gICAgbWFjcm8odm9pZCwgUGFzc01hbmFnZXJCdWlsZGVyUG9wdWxhdGVGdW5jdGlvblBh
c3NNYW5hZ2VyLCAoTExWTVBhc3NNYW5hZ2VyQnVpbGRlclJlZiBQTUIsIExMVk1QYXNzTWFuYWdl
clJlZiBQTSkpIFwKLSAgICBtYWNybyh2b2lkLCBQYXNzTWFuYWdlckJ1aWxkZXJQb3B1bGF0ZU1v
ZHVsZVBhc3NNYW5hZ2VyLCAoTExWTVBhc3NNYW5hZ2VyQnVpbGRlclJlZiBQTUIsIExMVk1QYXNz
TWFuYWdlclJlZiBQTSkpIFwKLSAgICBtYWNybyh2b2lkLCBBZGRBbmFseXNpc1Bhc3NlcywgKExM
Vk1UYXJnZXRNYWNoaW5lUmVmIFQsIExMVk1QYXNzTWFuYWdlclJlZiBQTSkpIFwKLSAgICBtYWNy
byh2b2lkLCBBZGRBZ2dyZXNzaXZlRENFUGFzcywgKExMVk1QYXNzTWFuYWdlclJlZiBQTSkpIFwK
LSAgICBtYWNybyh2b2lkLCBBZGRDRkdTaW1wbGlmaWNhdGlvblBhc3MsIChMTFZNUGFzc01hbmFn
ZXJSZWYgUE0pKSBcCi0gICAgbWFjcm8odm9pZCwgQWRkRGVhZFN0b3JlRWxpbWluYXRpb25QYXNz
LCAoTExWTVBhc3NNYW5hZ2VyUmVmIFBNKSkgXAotICAgIG1hY3JvKHZvaWQsIEFkZEZ1bmN0aW9u
SW5saW5pbmdQYXNzLCAoTExWTVBhc3NNYW5hZ2VyUmVmIFBNKSkgXAotICAgIG1hY3JvKHZvaWQs
IEFkZEdsb2JhbERDRVBhc3MsIChMTFZNUGFzc01hbmFnZXJSZWYgUE0pKSBcCi0gICAgbWFjcm8o
dm9pZCwgQWRkUHJ1bmVFSFBhc3MsIChMTFZNUGFzc01hbmFnZXJSZWYgUE0pKSBcCi0gICAgbWFj
cm8odm9pZCwgQWRkR2xvYmFsT3B0aW1pemVyUGFzcywgKExMVk1QYXNzTWFuYWdlclJlZiBQTSkp
IFwKLSAgICBtYWNybyh2b2lkLCBBZGRHVk5QYXNzLCAoTExWTVBhc3NNYW5hZ2VyUmVmIFBNKSkg
XAotICAgIG1hY3JvKHZvaWQsIEFkZEluc3RydWN0aW9uQ29tYmluaW5nUGFzcywgKExMVk1QYXNz
TWFuYWdlclJlZiBQTSkpIFwKLSAgICBtYWNybyh2b2lkLCBBZGRQcm9tb3RlTWVtb3J5VG9SZWdp
c3RlclBhc3MsIChMTFZNUGFzc01hbmFnZXJSZWYgUE0pKSBcCi0gICAgbWFjcm8odm9pZCwgQWRk
Q29uc3RhbnRQcm9wYWdhdGlvblBhc3MsIChMTFZNUGFzc01hbmFnZXJSZWYgUE0pKSBcCi0gICAg
bWFjcm8odm9pZCwgQWRkVHlwZUJhc2VkQWxpYXNBbmFseXNpc1Bhc3MsIChMTFZNUGFzc01hbmFn
ZXJSZWYgUE0pKSBcCi0gICAgbWFjcm8odm9pZCwgQWRkQmFzaWNBbGlhc0FuYWx5c2lzUGFzcywg
KExMVk1QYXNzTWFuYWdlclJlZiBQTSkpCi0KLSNlbmRpZiAvLyBMTFZNQVBJRnVuY3Rpb25zX2gK
LQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vTExWTUhlYWRlcnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9MTFZNSGVhZGVycy5oCShyZXZpc2lv
biAxOTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9MTFZNSGVhZGVycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBMTFZNSGVhZGVyc19oCi0jZGVmaW5l
IExMVk1IZWFkZXJzX2gKLQotI2lmIEhBVkUoTExWTSkKLQotLy8gSXQgaXMgbmVjZXNzYXJ5IHRv
IGluY2x1ZGUgTExWTSBoZWFkZXJzIHZpYSB0aGlzIGZpbGUsIGJlY2F1c2U6Ci0vLyAtIExMVk0g
cmVxdWlyZXMgZGVmaW5pbmcgdGhpbmdzIHRoYXQgd2UgZG9uJ3Qgbm9ybWFsbHkgZGVmaW5lLCBh
bmQKLS8vIC0gTExWTSBpbmNsdWRlcyBpdHMgQysrIGhlYWRlcnMgZnJvbSBpdHMgQyBoZWFkZXJz
LCBhbmQgaXRzIEMrKwotLy8gICBoZWFkZXJzIGRvbid0IGNvbXBpbGUgY2xlYW5seSB3aXRoIG91
ciB3YXJuaW5ncy4KLQotI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TCi0jZGVmaW5lIF9fU1RE
Q19DT05TVEFOVF9NQUNST1MKLQotI2lmIENPTVBJTEVSKENMQU5HKQotI3ByYWdtYSBjbGFuZyBk
aWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Np
bmctbm9yZXR1cm4iCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQt
cGFyYW1ldGVyIgotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xbm9uLXZpcnR1
YWwtZHRvciIKLSNlbmRpZiAvLyBDT01QSUxFUihDTEFORykKLQotI2luY2x1ZGUgPGxsdm0tYy9B
bmFseXNpcy5oPgotI2luY2x1ZGUgPGxsdm0tYy9CaXRSZWFkZXIuaD4KLSNpbmNsdWRlIDxsbHZt
LWMvQ29yZS5oPgotI2luY2x1ZGUgPGxsdm0tYy9EaXNhc3NlbWJsZXIuaD4KLSNpbmNsdWRlIDxs
bHZtLWMvRXhlY3V0aW9uRW5naW5lLmg+Ci0jaW5jbHVkZSA8bGx2bS1jL0luaXRpYWxpemF0aW9u
Lmg+Ci0jaW5jbHVkZSA8bGx2bS1jL0xpbmtlci5oPgotI2luY2x1ZGUgPGxsdm0tYy9UYXJnZXQu
aD4KLSNpbmNsdWRlIDxsbHZtLWMvVGFyZ2V0TWFjaGluZS5oPgotI2luY2x1ZGUgPGxsdm0tYy9U
cmFuc2Zvcm1zL0lQTy5oPgotI2luY2x1ZGUgPGxsdm0tYy9UcmFuc2Zvcm1zL1Bhc3NNYW5hZ2Vy
QnVpbGRlci5oPgotI2luY2x1ZGUgPGxsdm0tYy9UcmFuc2Zvcm1zL1NjYWxhci5oPgotCi0jaWYg
Q09NUElMRVIoQ0xBTkcpCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0jZW5kaWYgLy8g
Q09NUElMRVIoQ0xBTkcpCi0KLSN1bmRlZiBfX1NURENfTElNSVRfTUFDUk9TCi0jdW5kZWYgX19T
VERDX0NPTlNUQU5UX01BQ1JPUwotCi0jZW5kaWYgLy8gSEFWRShMTFZNKQotCi0jZW5kaWYgLy8g
TExWTUhlYWRlcnNfaAotCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL2xpYnJh
cnkvTExWTUFuY2hvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
dm0vbGlicmFyeS9MTFZNQW5jaG9yLmNwcAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsdm0vbGlicmFyeS9MTFZNQW5jaG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSwyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLS8vIFRoaXMgaXMgYSBoYWNrIGZvciBlbnN1cmluZyB0aGF0IHRoZSBidWls
ZCBzeXN0ZW0gcmVsaW5rcyBKYXZhU2NyaXB0Q29yZSBpZiBhbnkKLS8vIG9mIHRoZSBMTFZNIGxp
YnJhcmllcyBhcmUga25vd24gdG8gaGF2ZSBjaGFuZ2VkLiBUaHMgZmlsZSB3aWxsIGdldCB0b3Vj
aGVkIGJ5IG91cgotLy8gcGVybCBzY3JpcHRzIHRvIHRyaWdnZXIgYSByZWJ1aWxkIGlmIGEgY2hh
bmdlIGluIExMVk0gd2FzIGRldGVjdGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
dm0vbGlicmFyeS9MTFZNRXhwb3J0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsdm0vbGlicmFyeS9MTFZNRXhwb3J0cy5jcHAJKHJldmlzaW9uIDE5NjY4NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL2xpYnJhcnkvTExWTUV4cG9ydHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDE0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZ19sbHZtLmgiCi0KLSNpZiBI
QVZFKExMVk0pCi0KLSNpbmNsdWRlICJMTFZNQVBJLmgiCi0jaW5jbHVkZSAiTExWTVRyYXBDYWxs
YmFjay5oIgotCi0vLyBJbmNsdWRlIHNvbWUgZXh0cmEgTExWTSBDKysgaGVhZGVycy4gVGhpcyBp
cyB0aGUgb25seSBwbGFjZSB3aGVyZSBpbmNsdWRpbmcgTExWTSBDKysKLS8vIGhlYWRlcnMgaXMg
T0ssIHNpbmNlIHRoaXMgbW9kdWxlIGxpdmVzIGluc2lkZSBvZiB0aGUgTExWTSBkeWxpYiB3ZSBt
YWtlIGFuZCBzbyBjYW4gc2VlCi0vLyBvdGhlcndpc2UgcHJpdmF0ZSB0aGluZ3MuIEJ1dCB0byBp
bmNsdWRlIHRob3NlIGhlYWRlcnMsIHdlIG5lZWQgdG8gZG8gc29tZSB3ZWlyZCB0aGluZ3MKLS8v
IGZpcnN0LiBBbnl3YXksIHdlIHNob3VsZCBrZWVwIExMVk0gQysrIGluY2x1ZGVzIHRvIGEgbWlu
aW11bSBpZiBwb3NzaWJsZS4KLQotI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TCi0jZGVmaW5l
IF9fU1REQ19DT05TVEFOVF9NQUNST1MKLQotI2lmIENPTVBJTEVSKENMQU5HKQotI3ByYWdtYSBj
bGFuZyBkaWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V21pc3Npbmctbm9yZXR1cm4iCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1
bnVzZWQtcGFyYW1ldGVyIgotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xbm9u
LXZpcnR1YWwtZHRvciIKLSNlbmRpZiAvLyBDT01QSUxFUihDTEFORykKLQotI2luY2x1ZGUgPGxs
dm0vU3VwcG9ydC9Db21tYW5kTGluZS5oPgotCi0jaWYgQ09NUElMRVIoQ0xBTkcpCi0jcHJhZ21h
IGNsYW5nIGRpYWdub3N0aWMgcG9wCi0jZW5kaWYgLy8gQ09NUElMRVIoQ0xBTkcpCi0KLSN1bmRl
ZiBfX1NURENfTElNSVRfTUFDUk9TCi0jdW5kZWYgX19TVERDX0NPTlNUQU5UX01BQ1JPUwotCi1z
dGF0aWMgdm9pZCBsbHZtQ3Jhc2goY29uc3QgY2hhciopIE5PX1JFVFVSTjsKLWV4dGVybiAiQyIg
V1RGX0VYUE9SVF9QUklWQVRFIEpTQzo6TExWTUFQSSogaW5pdGlhbGl6ZUFuZEdldEpTQ0xMVk1B
UEkoCi0gICAgdm9pZCAoKikoY29uc3QgY2hhciosIC4uLikgTk9fUkVUVVJOLCBib29sKiBlbmFi
bGVGYXN0SVNlbCk7Ci0KLXN0YXRpYyB2b2lkIGxsdm1DcmFzaChjb25zdCBjaGFyKiByZWFzb24p
Ci17Ci0gICAgZ19sbHZtVHJhcENhbGxiYWNrKCJMTFZNIGZhdGFsIGVycm9yOiAlcyIsIHJlYXNv
bik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+Ci12b2lkIGluaXRDb21tYW5kTGlu
ZShBcmdzLi4uIGFyZ3MpCi17Ci0gICAgY29uc3QgY2hhciogdGhlQXJnc1tdID0geyBhcmdzLi4u
IH07Ci0gICAgbGx2bTo6Y2w6OlBhcnNlQ29tbWFuZExpbmVPcHRpb25zKHNpemVvZih0aGVBcmdz
KSAvIHNpemVvZihjb25zdCBjaGFyKiksIHRoZUFyZ3MpOwotfQotCi1leHRlcm4gIkMiIEpTQzo6
TExWTUFQSSogaW5pdGlhbGl6ZUFuZEdldEpTQ0xMVk1BUEkoCi0gICAgdm9pZCAoKmNhbGxiYWNr
KShjb25zdCBjaGFyKiwgLi4uKSBOT19SRVRVUk4sCi0gICAgYm9vbCogZW5hYmxlRmFzdElTZWwp
Ci17Ci0gICAgZ19sbHZtVHJhcENhbGxiYWNrID0gY2FsbGJhY2s7Ci0gICAgCi0gICAgTExWTUlu
c3RhbGxGYXRhbEVycm9ySGFuZGxlcihsbHZtQ3Jhc2gpOwotCi0gICAgaWYgKCFMTFZNU3RhcnRN
dWx0aXRocmVhZGVkKCkpCi0gICAgICAgIGNhbGxiYWNrKCJDb3VsZCBub3Qgc3RhcnQgTExWTSBt
dWx0aXRocmVhZGluZyIpOwotICAgIAotICAgIExMVk1MaW5rSW5NQ0pJVCgpOwotICAgIAotICAg
IC8vIFlvdSB0aGluayB5b3Ugd2FudCB0byBjYWxsIExMVk1Jbml0aWFsaXplTmF0aXZlVGFyZ2V0
KCk/IFRoaW5rIGFnYWluLiBUaGlzIHByZXN1bWVzIHRoYXQKLSAgICAvLyBMTFZNIHdhcyAuL2Nv
bmZpZ3VyZWQgY29ycmVjdGx5LCB3aGljaCB3b24ndCBiZSB0aGUgY2FzZSBpbiBjcm9zcy1jb21w
aWxhdGlvbiBzaXR1YXRpb25zLgotICAgIAotI2lmIENQVShYODZfNjQpCi0gICAgTExWTUluaXRp
YWxpemVYODZUYXJnZXRJbmZvKCk7Ci0gICAgTExWTUluaXRpYWxpemVYODZUYXJnZXQoKTsKLSAg
ICBMTFZNSW5pdGlhbGl6ZVg4NlRhcmdldE1DKCk7Ci0gICAgTExWTUluaXRpYWxpemVYODZBc21Q
cmludGVyKCk7Ci0gICAgTExWTUluaXRpYWxpemVYODZEaXNhc3NlbWJsZXIoKTsKLSNlbGlmIENQ
VShBUk02NCkKLSNpZiBQTEFURk9STShJT1MpIHx8IE9TKExJTlVYKQotICAgIExMVk1Jbml0aWFs
aXplQUFyY2g2NFRhcmdldEluZm8oKTsKLSAgICBMTFZNSW5pdGlhbGl6ZUFBcmNoNjRUYXJnZXQo
KTsKLSAgICBMTFZNSW5pdGlhbGl6ZUFBcmNoNjRUYXJnZXRNQygpOwotICAgIExMVk1Jbml0aWFs
aXplQUFyY2g2NEFzbVByaW50ZXIoKTsKLSAgICBMTFZNSW5pdGlhbGl6ZUFBcmNoNjREaXNhc3Nl
bWJsZXIoKTsKLSNlbHNlCi0gICAgTExWTUluaXRpYWxpemVBUk02NFRhcmdldEluZm8oKTsKLSAg
ICBMTFZNSW5pdGlhbGl6ZUFSTTY0VGFyZ2V0KCk7Ci0gICAgTExWTUluaXRpYWxpemVBUk02NFRh
cmdldE1DKCk7Ci0gICAgTExWTUluaXRpYWxpemVBUk02NEFzbVByaW50ZXIoKTsKLSAgICBMTFZN
SW5pdGlhbGl6ZUFSTTY0RGlzYXNzZW1ibGVyKCk7Ci0jZW5kaWYKLSNlbHNlCi0gICAgVU5SRUFD
SEFCTEVfRk9SX1BMQVRGT1JNKCk7Ci0jZW5kaWYKLSAgICAKLSNpZiBMTFZNX1ZFUlNJT05fTUFK
T1IgPj0gNCB8fCAoTExWTV9WRVJTSU9OX01BSk9SID09IDMgJiYgTExWTV9WRVJTSU9OX01JTk9S
ID49IDYpCi0gICAgLy8gSXQncyBPSyB0byBoYXZlIGZhc3QgSVNlbCwgaWYgaXQgd2FzIHJlcXVl
c3RlZC4KLSNlbHNlCi0gICAgLy8gV2UgZG9uJ3QgaGF2ZSBlbm91Z2ggc3VwcG9ydCBmb3IgZmFz
dCBJU2VsLiBEaXNhYmxlIGl0LgotICAgICplbmFibGVGYXN0SVNlbCA9IGZhbHNlOwotI2VuZGlm
Ci0KLSAgICBpZiAoKmVuYWJsZUZhc3RJU2VsKQotICAgICAgICBpbml0Q29tbWFuZExpbmUoImxs
dm1Gb3JKU0MuZHlsaWIiLCAiLWVuYWJsZS1taXNjaGVkPWZhbHNlIiwgIi1yZWdhbGxvYz1iYXNp
YyIpOwotICAgIGVsc2UKLSAgICAgICAgaW5pdENvbW1hbmRMaW5lKCJsbHZtRm9ySlNDLmR5bGli
IiwgIi1lbmFibGUtcGF0Y2hwb2ludC1saXZlbmVzcz10cnVlIik7Ci0gICAgCi0gICAgSlNDOjpM
TFZNQVBJKiByZXN1bHQgPSBuZXcgSlNDOjpMTFZNQVBJOwotICAgIAotICAgIC8vIEluaXRpYWxp
emUgdGhlIHdob2xlIHRoaW5nIHRvIG51bGwuCi0gICAgbWVtc2V0KHJlc3VsdCwgMCwgc2l6ZW9m
KCpyZXN1bHQpKTsKLSAgICAKLSNkZWZpbmUgTExWTV9BUElfRlVOQ1RJT05fQVNTSUdOTUVOVChy
ZXR1cm5UeXBlLCBuYW1lLCBzaWduYXR1cmUpIFwKLSAgICByZXN1bHQtPm5hbWUgPSBMTFZNIyNu
YW1lOwotICAgIEZPUl9FQUNIX0xMVk1fQVBJX0ZVTkNUSU9OKExMVk1fQVBJX0ZVTkNUSU9OX0FT
U0lHTk1FTlQpOwotI3VuZGVmIExMVk1fQVBJX0ZVTkNUSU9OX0FTU0lHTk1FTlQKLSAgICAKLSAg
ICAvLyBIYW5kbGUgY29uZGl0aW9uYWxseSBhdmFpbGFibGUgZnVuY3Rpb25zLgotI2lmIExMVk1f
VkVSU0lPTl9NQUpPUiA+PSA0IHx8IChMTFZNX1ZFUlNJT05fTUFKT1IgPT0gMyAmJiBMTFZNX1ZF
UlNJT05fTUlOT1IgPj0gNikKLSAgICByZXN1bHQtPkFkZExvd2VyU3dpdGNoUGFzcyA9IExMVk1B
ZGRMb3dlclN3aXRjaFBhc3M7Ci0jZW5kaWYKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci0jZWxzZQotCi0vLyBDcmVhdGUgYSBkdW1teSBpbml0aWFsaXplQW5kR2V0SlNDTExWTUFQSSB0
byBwbGFjYXRlIHRoZSBidWlsZCBzeXN0ZW0uCi1leHRlcm4gIkMiIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIGluaXRpYWxpemVBbmRHZXRKU0NMTFZNQVBJKCk7Ci1leHRlcm4gIkMiIHZvaWQgaW5p
dGlhbGl6ZUFuZEdldEpTQ0xMVk1BUEkoKSB7IH0KLQotI2VuZGlmIC8vIEhBVkUoTExWTSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL2xpYnJhcnkvTExWTU92ZXJyaWRlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vbGlicmFyeS9MTFZNT3Zl
cnJpZGVzLmNwcAkocmV2aXNpb24gMTk2Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
dm0vbGlicmFyeS9MTFZNT3ZlcnJpZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1OSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNs
dWRlICJjb25maWdfbGx2bS5oIgotCi0jaW5jbHVkZSAiTExWTVRyYXBDYWxsYmFjay5oIgotCi0j
aWYgSEFWRShMTFZNKQotCi1leHRlcm4gIkMiIGludCBfX2N4YV9hdGV4aXQoKTsKLWV4dGVybiAi
QyIgaW50IF9fY3hhX2F0ZXhpdCgpIHsgcmV0dXJuIDA7IH0KLQotdm9pZCAoKmdfbGx2bVRyYXBD
YWxsYmFjaykoY29uc3QgY2hhciogbWVzc2FnZSwgLi4uKSBOT19SRVRVUk47Ci0KLS8vIElmIExM
Vk0gdHJpZXMgdG8gcmFpc2Ugc2lnbmFscywgYWJvcnQsIG9yIGZhaWwgYW4gYXNzZXJ0aW9uLCB0
aGVuIGxldAotLy8gV2ViS2l0IGhhbmRsZSBpdCBpbnN0ZWFkIG9mIHRyYXBwaW5nLgotZXh0ZXJu
ICJDIiBpbnQgcmFpc2UoaW50IHNpZ25hbCk7Ci1leHRlcm4gIkMiIHZvaWQgX19hc3NlcnRfcnRu
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBmaWxlbmFtZSwgaW50IGxpbmVOdW1i
ZXIsIGNvbnN0IGNoYXIqIGV4cHJlc3Npb24pIE5PX1JFVFVSTjsKLWV4dGVybiAiQyIgdm9pZCBh
Ym9ydCh2b2lkKSBOT19SRVRVUk47Ci0KLWV4dGVybiAiQyIgaW50IHJhaXNlKGludCBzaWduYWwp
Ci17Ci0gICAgZ19sbHZtVHJhcENhbGxiYWNrKCJyYWlzZSglZCkgY2FsbGVkLiIsIHNpZ25hbCk7
Ci0gICAgcmV0dXJuIDA7Ci19Ci1leHRlcm4gIkMiIHZvaWQgX19hc3NlcnRfcnRuKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBmaWxlbmFtZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0
IGNoYXIqIGV4cHJlc3Npb24pCi17Ci0gICAgaWYgKGZ1bmN0aW9uKQotICAgICAgICBnX2xsdm1U
cmFwQ2FsbGJhY2soIkFzc2VydGlvbiBmYWlsZWQ6ICglcyksIGZ1bmN0aW9uICVzLCBmaWxlICVz
LCBsaW5lICVkLiIsIGV4cHJlc3Npb24sIGZ1bmN0aW9uLCBmaWxlbmFtZSwgbGluZU51bWJlcik7
Ci0gICAgZ19sbHZtVHJhcENhbGxiYWNrKCJBc3NlcnRpb24gZmFpbGVkOiAoJXMpLCBmaWxlICVz
LCBsaW5lICVkLiIsIGV4cHJlc3Npb24sIGZpbGVuYW1lLCBsaW5lTnVtYmVyKTsKLX0KLWV4dGVy
biAiQyIgdm9pZCBhYm9ydCh2b2lkKQotewotICAgIGdfbGx2bVRyYXBDYWxsYmFjaygiYWJvcnQo
KSBjYWxsZWQuIik7Ci19Ci0KLSNlbmRpZiAvLyBIQVZFKExMVk0pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGx2bS9saWJyYXJ5L2NvbmZpZ19sbHZtLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vbGlicmFyeS9jb25maWdfbGx2bS5oCShyZXZpc2lvbiAx
OTY2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9saWJyYXJ5L2NvbmZpZ19sbHZt
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWYgZGVmaW5lZChIQVZFX0NPTkZJR19IKSAmJiBI
QVZFX0NPTkZJR19ICi0jaWZkZWYgQlVJTERJTkdfV0lUSF9DTUFLRQotI2luY2x1ZGUgImNtYWtl
Y29uZmlnLmgiCi0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgotI2lu
Y2x1ZGUgPHd0Zi9FeHBvcnRNYWNyb3MuaD4KLQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NjY4NikKKysr
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIw
MTYtMDItMTcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1v
dmUgTExWTSBkZXBlbmRlbmNpZXMgZnJvbSBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDMyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMTYtMDItMTYg
IEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGVExfVVNFU19CMyBz
aG91bGQgYmUgdW5jb25kaXRpb25hbGx5IHRydWUKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24g
MTk2Njg2KQorKysgU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAt
NzExLDExICs3MTEsNiBAQAogI2RlZmluZSBFTkFCTEVfSklUIDEKICNlbmRpZgogCi0vKiBEbyB3
ZSBoYXZlIExMVk0/ICovCi0jaWYgIWRlZmluZWQoSEFWRV9MTFZNKSAmJiBPUyhEQVJXSU4pICYm
ICFQTEFURk9STShFRkwpICYmICFQTEFURk9STShHVEspICYmIEVOQUJMRShGVExfSklUKSAmJiAo
Q1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KSkKLSNkZWZpbmUgSEFWRV9MTFZNIDEKLSNlbmRpZgot
CiAvKiBUaGUgRlRMICpkb2VzIG5vdCogd29yayBvbiAzMi1iaXQgcGxhdGZvcm1zLiBEaXNhYmxl
IGl0IGV2ZW4gaWYgc29tZW9uZSBhc2tlZCB1cyB0byBlbmFibGUgaXQuICovCiAjaWYgVVNFKEpT
VkFMVUUzMl82NCkKICN1bmRlZiBFTkFCTEVfRlRMX0pJVApAQCAtNzI4LDEyICs3MjMsNiBAQAog
I2RlZmluZSBFTkFCTEVfRlRMX0pJVCAwCiAjZW5kaWYKIAotLyogSWYgcG9zc2libGUsIHRyeSB0
byBlbmFibGUgdGhlIExMVk0gZGlzYXNzZW1ibGVyLiBUaGlzIGlzIG9wdGlvbmFsIGFuZCB3ZSBj
YW4KLSAgIGZhbGwgYmFjayBvbiBVRGlzODYgaWYgbmVjZXNzYXJ5LiAqLwotI2lmICFkZWZpbmVk
KFVTRV9MTFZNX0RJU0FTU0VNQkxFUikgJiYgSEFWRShMTFZNKSAmJiAoQ1BVKFg4Nl82NCkgfHwg
Q1BVKFg4NikgfHwgQ1BVKEFSTTY0KSkKLSNkZWZpbmUgVVNFX0xMVk1fRElTQVNTRU1CTEVSIDEK
LSNlbmRpZgotCiAvKiBJZiBwb3NzaWJsZSwgdHJ5IHRvIGVuYWJsZSBhIGRpc2Fzc2VtYmxlci4g
VGhpcyBpcyBvcHRpb25hbC4gV2UgcHJvY2VlZCBpbiB0d28KICAgIHN0ZXBzOiBmaXJzdCB3ZSB0
cnkgdG8gZmluZCBzb21lIGRpc2Fzc2VtYmxlciB0aGF0IHdlIGNhbiB1c2UsIGFuZCB0aGVuIHdl
CiAgICBkZWNpZGUgaWYgdGhlIGhpZ2gtbGV2ZWwgZGlzYXNzZW1ibGVyIEFQSSBjYW4gYmUgZW5h
YmxlZC4gKi8KQEAgLTc0MiwxMSArNzMxLDExIEBACiAjZGVmaW5lIFVTRV9VRElTODYgMQogI2Vu
ZGlmCiAKLSNpZiAhZGVmaW5lZChFTkFCTEVfRElTQVNTRU1CTEVSKSAmJiAoVVNFKFVESVM4Nikg
fHwgVVNFKExMVk1fRElTQVNTRU1CTEVSKSkKKyNpZiAhZGVmaW5lZChFTkFCTEVfRElTQVNTRU1C
TEVSKSAmJiBVU0UoVURJUzg2KQogI2RlZmluZSBFTkFCTEVfRElTQVNTRU1CTEVSIDEKICNlbmRp
ZgogCi0jaWYgIWRlZmluZWQoVVNFX0FSTTY0X0RJU0FTU0VNQkxFUikgJiYgRU5BQkxFKEpJVCkg
JiYgQ1BVKEFSTTY0KSAmJiAhVVNFKExMVk1fRElTQVNTRU1CTEVSKQorI2lmICFkZWZpbmVkKFVT
RV9BUk02NF9ESVNBU1NFTUJMRVIpICYmIEVOQUJMRShKSVQpICYmIENQVShBUk02NCkKICNkZWZp
bmUgVVNFX0FSTTY0X0RJU0FTU0VNQkxFUiAxCiAjZW5kaWYKIApJbmRleDogVG9vbHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2NzIxKQorKysg
VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTYtMDIt
MTcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgTExW
TSBkZXBlbmRlbmNpZXMgZnJvbSBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1NDMyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9jb3B5LXdlYmtpdGxpYnJhcmllcy10by1wcm9k
dWN0LWRpcmVjdG9yeToKKyAgICAgICAgKGlzQ29udGVudE9mRmlsZUVxdWFsVG9TdHJpbmcpOgor
ICAgICAgICAoZmlsZUNvbnRhaW5zKTogRGVsZXRlZC4KKyAgICAgICAgKGJ1aWxkTExWTSk6IERl
bGV0ZWQuCisgICAgICAgIChzeW1saW5rTExWTUxpYnJhcmllc0lmTmVlZGVkKTogRGVsZXRlZC4K
KwogMjAxNi0wMi0xNiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEFk
ZCBhbiBlbnN1cmUgZnVuY3Rpb24gb24gSGFzaE1hcCB0aGF0IHRha2VzIGEga2V5IGFuZCBhIGZ1
bmN0aW9uIHRvIG1ha2UgdGhlIGxhenkgdmFsdWUgaW5pdGlhbGl6YXRpb24gaWRpb20gZWFzaWVy
CkluZGV4OiBUb29scy9TY3JpcHRzL2NvcHktd2Via2l0bGlicmFyaWVzLXRvLXByb2R1Y3QtZGly
ZWN0b3J5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvY29weS13ZWJraXRsaWJyYXJpZXMt
dG8tcHJvZHVjdC1kaXJlY3RvcnkJKHJldmlzaW9uIDE5NjY4NSkKKysrIFRvb2xzL1NjcmlwdHMv
Y29weS13ZWJraXRsaWJyYXJpZXMtdG8tcHJvZHVjdC1kaXJlY3RvcnkJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAjIS91c3IvYmluL3BlcmwgLXcKIAotIyBDb3B5cmlnaHQgKEMpIDIw
MDUsIDIwMDgsIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDgsIDIwMTAsIDIwMTEsIDIw
MTIsIDIwMTMsIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwog
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw5ICszMCw2IEBAIHVzZSBHZXRvcHQ6Okxv
bmcgcXcoOmNvbmZpZyBwYXNzX3Rocm91Z2gKIHVzZSBsaWIgJEZpbmRCaW46OkJpbjsKIHVzZSB3
ZWJraXRkaXJzOwogCi1zdWIgYnVpbGRMTFZNKCQpOwotc3ViIHN5bWxpbmtMTFZNTGlicmFyaWVz
SWZOZWVkZWQoJCQpOwotCiBteSAkc2hvd0hlbHAgPSAwOwogbXkgJGxsdm0gPSAwOwogbXkgJHdr
c2kgPSAwOwpAQCAtNTAsMTUgKzQ3LDkgQEAgbXkgJHByb2dyYW1OYW1lID0gYmFzZW5hbWUoJDAp
OwogbXkgJHVzYWdlID0gPDxFT0Y7CiBVc2FnZTogJHByb2dyYW1OYW1lIFtvcHRpb25zXQogICAt
LWhlbHAgICAgICAgICAgICAgICAgICAgICAgICBTaG93IHRoaXMgaGVscCBtZXNzYWdlCi0gIC0t
W25vLV1sbHZtICAgICAgICAgICAgICAgICAgIFRvZ2dsZSBjb3B5aW5nIExMVk0gZHJvcHMgKGRl
ZmF1bHQ6ICRsbHZtKQogICAtLVtuby1dd2tzaSAgICAgICAgICAgICAgICAgICBUb2dnbGUgY29w
eWluZyBXZWJLaXRTeXN0ZW1JbnRlcmZhY2UgZHJvcHMgKGRlZmF1bHQ6ICR3a3NpKQogICAtLWNs
ZWFuICAgICAgICAgICAgICAgICAgICAgICBDbGVhbiB0aGUgbGlicmFyaWVzIChkZWZhdWx0OiAk
Y2xlYW4pCi0gIC0tdXNlLWxsdm0taW5jbHVkZXM9PHBhdGg+ICAgIEdldCB0aGUgTExWTSBpbmx1
ZGVzIHBhY2thZ2UgZnJvbSA8cGF0aD4KLSAgLS11c2UtbGx2bS1saWJyYXJpZXM9PHBhdGg+ICAg
R2V0IHRoZSBMTFZNIGxpYnJhcmllcyBwYWNrYWdlIGZyb20gPHBhdGg+CiAgIC0tW25vLV11c2Ut
ZnVsbC1saWItcGF0aHMgICAgIFRvZ2dsZSB1c2luZyBmdWxsIGxpYnJhcnkgcGF0aHMKLSAgLS1b
bm8tXXByZWZlci1zeXN0ZW0tbGx2bSAgICAgVG9nZ2xlIHByZWZlcnJpbmcgdGhlIHN5c3RlbSBM
TFZNIG92ZXIgdGhlIGJpbmFyeSBkcm9wcyAoZGVmYXVsdDogJHByZWZlclN5c3RlbUxMVk1PdmVy
RHJvcHMpCi0gIC0tbGx2bS1zdWJkaXJlY3Rvcnk9PG5hbWU+ICAgIFNldCB0aGUgbmFtZSBvZiB0
aGUgTExWTSBzdWJkaXJlY3RvcnkgdG8gc2VhcmNoIGZvciAoZGVmYXVsdDogJGxsdm1TdWJkaXJl
Y3RvcnlOYW1lKQotICAtLWxsdm0tcHJlZml4PTxwYXRoPiAgICAgICAgICBTZXQgdGhlIHByZWZp
eCBpbnRvIHdoaWNoIExMVk0gaXMgaW5zdGFsbGVkIChkZWZhdWx0OiAkbGx2bVByZWZpeCkKICAg
LS1zZGs9PHNkaz4gICAgICAgICAgICAgICAgICAgVXNlIGEgc3BlY2lmaWMgWGNvZGUgU0RLCiAg
IC0tZGV2aWNlICAgICAgICAgICAgICAgICAgICAgIFVzZSB0aGUgY3VycmVudCBpcGhvbmVvcy5p
bnRlcm5hbCBTREsgKGlPUyBvbmx5KQogICAtLXNpbXVsYXRvciAgICAgICAgICAgICAgICAgICBV
c2UgdGhlIGN1cnJlbnQgaXBob25lc2ltdWxhdG9yIFNESyAoaU9TIG9ubHkpCkBAIC0xNDAsMTAg
KzEzMSw4IEBAIHN1YiBkaXR0b0hlYWRlcnMKIGlmICgkY2xlYW4pIHsKICAgICBwcmludCAiQ2xl
YW5pbmcuXG4iOyAgICAKICAgICAoc3lzdGVtKCJybSIsICItcmYiLCBGaWxlOjpTcGVjLT5jYXRm
aWxlKCRwcm9kdWN0RGlyLCAidXNyIiwgImxvY2FsIiwgImluY2x1ZGUiLCAiV2ViS2l0U3lzdGVt
SW50ZXJmYWNlLmgiKSkgPT0gMCkgb3IgZGllOwotICAgIChzeXN0ZW0oInJtIiwgIi1yZiIsICIk
cHJvZHVjdERpciRsbHZtUHJlZml4IikgPT0gMCkgb3IgZGllOwogICAgIHVubGluayBnbG9iICIk
cHJvZHVjdERpci9saWJXZWJLaXRTeXN0ZW1JbnRlcmZhY2UqIiBvciBkaWUgaWYgZ2xvYiAiJHBy
b2R1Y3REaXIvbGliV2ViS2l0U3lzdGVtSW50ZXJmYWNlKiI7CiAgICAgdW5saW5rIGdsb2IgIiRw
cm9kdWN0RGlyL3Vzci9sb2NhbC9saWIvbGliV2ViS2l0U3lzdGVtSW50ZXJmYWNlKiIgb3IgZGll
IGlmIGdsb2IgIiRwcm9kdWN0RGlyL3Vzci9sb2NhbC9saWIvbGliV2ViS2l0U3lzdGVtSW50ZXJm
YWNlKiI7Ci0gICAgdW5saW5rIGdsb2IgIiRwcm9kdWN0RGlyL2xpYkxMVk0qIiBvciBkaWUgaWYg
Z2xvYiAiJHByb2R1Y3REaXIvbGliTExWTSoiOwogICAgIHVubGluayBnbG9iICIkcHJvZHVjdERp
ci9saWJMVE8qIiBvciBkaWUgaWYgZ2xvYiAiJHByb2R1Y3REaXIvbGliTFRPKiI7CiB9CiAKQEAg
LTE4Miw3OCArMTcxLDEwIEBAIGlmICgkd2tzaSkgewogfQogCiBpZiAoJGxsdm0pIHsKLSAgICAo
c3lzdGVtKCJta2RpciIsICItcCIsICIkcHJvZHVjdERpciRsbHZtUHJlZml4L2luY2x1ZGUiKSA9
PSAwKSBvciBkaWU7Ci0KLSAgICBteSAkbGlicmFyeURpciA9ICR1c2VGdWxsTGliUGF0aHMgPyAi
JHByb2R1Y3REaXIkbGx2bVByZWZpeC9saWIiIDogJHByb2R1Y3REaXI7Ci0gICAgIyBBbHdheXMg
Y3JlYXRlIGEgZGlyZWN0b3J5IGF0IHRoZSBmdWxsIGxpYnJhcnkgcGF0aCwgYmVjYXVzZSB0aGUg
SmF2YVNjcmlwdENvcmUgYnVpbGQgZW1pdHMgYSB3YXJuaW5nIGlmIGl0J3Mgbm90IHRoZXJlLgot
ICAgIChzeXN0ZW0oIm1rZGlyIiwgIi1wIiwgIiRwcm9kdWN0RGlyJGxsdm1QcmVmaXgvbGliIikg
PT0gMCkgb3IgZGllOwotCi0gICAgKHN5c3RlbSgicm0iLCAiLWYiLCBGaWxlOjpTcGVjLT5jYXRm
aWxlKCRwcm9kdWN0RGlyLCAiRXh0cmFJbmNsdWRlc0ZvckxvY2FsTExWTUJ1aWxkIikpID09IDAp
IG9yIGRpZTsKLQotICAgIGlmICgkcHJlZmVyU3lzdGVtTExWTU92ZXJEcm9wcykgewotICAgICAg
ICBwcmludCAiVXNpbmcgc3lzdGVtIExMVk0uXG4iOwotICAgICAgICBleGl0IDA7Ci0gICAgfQot
Ci0gICAgbXkgJGxsdm1Tb3VyY2VEaXJlY3RvcnkgPSAkRU5We0xMVk1fU09VUkNFX1BBVEh9Owot
ICAgICRsbHZtU291cmNlRGlyZWN0b3J5ID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKHNvdXJjZURpcigp
LCAkbGx2bVN1YmRpcmVjdG9yeU5hbWUpIHVubGVzcyAkbGx2bVNvdXJjZURpcmVjdG9yeTsKLSAg
ICBpZiAoLWQgJGxsdm1Tb3VyY2VEaXJlY3RvcnkpIHsKLSAgICAgICAgbXkgJGxsdm1CdWlsZEZp
bGUgPSBGaWxlOjpTcGVjLT5jYXRmaWxlKCRsbHZtU291cmNlRGlyZWN0b3J5LCAiTExWTUJ1aWxk
LnR4dCIpOwotICAgICAgICBpZiAoLWYgJGxsdm1CdWlsZEZpbGUpIHsKLSAgICAgICAgICAgIHBy
aW50ICJVc2luZyBMTFZNIHNvdXJjZSBmcm9tICRsbHZtU291cmNlRGlyZWN0b3J5LlxuIjsKLSAg
ICAgICAgICAgIGJ1aWxkTExWTSgkbGx2bVNvdXJjZURpcmVjdG9yeSk7Ci0gICAgICAgICAgICBp
ZiAoc3ltbGlua0xMVk1MaWJyYXJpZXNJZk5lZWRlZCgkbGx2bVNvdXJjZURpcmVjdG9yeSwgJGxp
YnJhcnlEaXIpKSB7Ci0gICAgICAgICAgICAgICAgIyBMTFZNIGxpYnJhcmllcyBjaGFuZ2VkOyBt
YWtlIEphdmFTY3JpcHRDb3JlIHJlbGluayBhZ2FpbnN0IHRoZSBuZXcgTExWTSB0aGUgbmV4dCB0
aW1lIGl0IGlzIGJ1aWx0LgotICAgICAgICAgICAgICAgIChzeXN0ZW0oInRvdWNoIiwgIlNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbHZtL2xpYnJhcnkvTExWTUFuY2hvci5jcHAiKSA9PSAwKSBvciBk
aWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBleGl0IDA7Ci0gICAgICAgIH0KLSAgICAg
ICAgcHJpbnQgU1RERVJSICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqXG4iOwotICAgICAgICBwcmludCBTVERFUlIgIkNhbm5vdCBm
aW5kIGZpbGUgJyRsbHZtQnVpbGRGaWxlJy5cbiI7Ci0gICAgICAgIHByaW50IFNUREVSUiAiUGxl
YXNlIGVuc3VyZSB0aGF0IHlvdSBoYXZlIGEgY29tcGxldGUgTExWTSBkaXN0cmlidXRpb24uXG4i
OwotICAgICAgICBwcmludCBTVERFUlIgIllvdSBjYW4gY2hlY2sgb3V0IExMVk0gdHJ1bmsgaW50
byB0aGUgV2ViS2l0IGRpcmVjdG9yeSBieSBydW5uaW5nOlxuIjsKLSAgICAgICAgcHJpbnQgU1RE
RVJSICJzdm4gY28gaHR0cDovL2xsdm0ub3JnL3N2bi9sbHZtLXByb2plY3QvbGx2bS90cnVuayBs
bHZtXG4iOwotICAgICAgICBwcmludCBTVERFUlIgIioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiI7Ci0gICAgICAgIGV4aXQgMTsK
LSAgICB9Ci0KLSAgICAkbGx2bUluY2x1ZGVQYWNrYWdlID0gJEVOVntMTFZNX0xJQlJBUllfUEFD
S0FHRX0gdW5sZXNzICRsbHZtSW5jbHVkZVBhY2thZ2U7Ci0gICAgJGxsdm1JbmNsdWRlUGFja2Fn
ZSA9ICRFTlZ7TExWTV9JTkNMVURFX1BBQ0tBR0V9IHVubGVzcyAkbGx2bUluY2x1ZGVQYWNrYWdl
OwotICAgIGlmICghJGxsdm1MaWJyYXJ5UGFja2FnZSB8fCAhJGxsdm1JbmNsdWRlUGFja2FnZSkg
ewotICAgICAgICBpZiAoaXNJT1NXZWJLaXQoKSkgewotICAgICAgICAgICAgbXkgJG1ham9yU0RL
VmVyc2lvbiA9IGlvc1ZlcnNpb24oKS0+eyJtYWpvciJ9OwotICAgICAgICAgICAgJGxsdm1MaWJy
YXJ5UGFja2FnZSA9ICJXZWJLaXRMaWJyYXJpZXMvTExWTUxpYnJhcmllc0lPUyRtYWpvclNES1Zl
cnNpb24udGFyLmJ6MiI7Ci0gICAgICAgICAgICAkbGx2bUluY2x1ZGVQYWNrYWdlID0gIldlYktp
dExpYnJhcmllcy9MTFZNSW5jbHVkZXNJT1MkbWFqb3JTREtWZXJzaW9uLnRhci5iejIiOwotICAg
ICAgICB9IGVsc2lmIChpc0FwcGxlTWFjV2ViS2l0KCkpIHsKLSAgICAgICAgICAgIGlmICgkb3N4
VmVyc2lvbiBlcSAiMTAuMTAiKSB7Ci0gICAgICAgICAgICAgICAgJGxsdm1MaWJyYXJ5UGFja2Fn
ZSA9ICJXZWJLaXRMaWJyYXJpZXMvTExWTUxpYnJhcmllc1lvc2VtaXRlLnRhci5iejIiOwotICAg
ICAgICAgICAgICAgICRsbHZtSW5jbHVkZVBhY2thZ2UgPSAiV2ViS2l0TGlicmFyaWVzL0xMVk1J
bmNsdWRlc1lvc2VtaXRlLnRhci5iejIiOwotICAgICAgICAgICAgfSBlbHNpZiAoJG9zeFZlcnNp
b24gZXEgIjEwLjExIikgewotICAgICAgICAgICAgICAgICRsbHZtTGlicmFyeVBhY2thZ2UgPSAi
V2ViS2l0TGlicmFyaWVzL0xMVk1MaWJyYXJpZXNFbENhcGl0YW4udGFyLmJ6MiI7Ci0gICAgICAg
ICAgICAgICAgJGxsdm1JbmNsdWRlUGFja2FnZSA9ICJXZWJLaXRMaWJyYXJpZXMvTExWTUluY2x1
ZGVzRWxDYXBpdGFuLnRhci5iejIiOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
ICAgIGlmICgkbGx2bUxpYnJhcnlQYWNrYWdlICYmICRsbHZtSW5jbHVkZVBhY2thZ2UpIHsKLSAg
ICAgICAgcHJpbnQgIlVzaW5nIExMVk0gYmluYXJ5IGRyb3BzICRsbHZtTGlicmFyeVBhY2thZ2Ug
YW5kICRsbHZtSW5jbHVkZVBhY2thZ2UuXG4iOwotICAgICAgICBpZiAodW5wYWNrSWZOZWNlc3Nh
cnkoJGxpYnJhcnlEaXIsICIkbGlicmFyeURpci9saWJMTFZNQ29yZS5hIiwgJGxsdm1MaWJyYXJ5
UGFja2FnZSwgMSkpIHsKLSAgICAgICAgICAgICMgTExWTSBsaWJyYXJpZXMgY2hhbmdlZDsgbWFr
ZSBKYXZhU2NyaXB0Q29yZSByZWxpbmsgYWdhaW5zdCB0aGUgbmV3IExMVk0gdGhlIG5leHQgdGlt
ZSBpdCBpcyBidWlsdC4KLSAgICAgICAgICAgIChzeXN0ZW0oInRvdWNoIiwgIlNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbHZtL2xpYnJhcnkvTExWTUFuY2hvci5jcHAiKSA9PSAwKSBvciBkaWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgdW5wYWNrSWZOZWNlc3NhcnkoRmlsZTo6U3BlYy0+Y2F0ZGlyKCIk
cHJvZHVjdERpciRsbHZtUHJlZml4IiwgImluY2x1ZGUiKSwgRmlsZTo6U3BlYy0+Y2F0ZmlsZSgi
JHByb2R1Y3REaXIkbGx2bVByZWZpeCIsICJpbmNsdWRlIiwgImxsdm0tYyIsICJDb3JlLmgiKSwg
JGxsdm1JbmNsdWRlUGFja2FnZSwgMCk7Ci0gICAgICAgIGV4aXQgMDsKLSAgICB9Ci0KLSAgICBw
cmludCBTVERFUlIgIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKipcbiI7Ci0gICAgcHJpbnQgU1RERVJSICJEb24ndCBrbm93IHdoZXJl
IHRvIGZpbmQgTExWTSFcbiI7Ci0gICAgcHJpbnQgU1RERVJSICJcbiI7Ci0gICAgcHJpbnQgU1RE
RVJSICJUcnkgZGVmaW5pbmcgTExWTV9MSUJSQVJZX1BBQ0tBR0UgYW5kIExMVk1fSU5DTFVERV9Q
QUNLQUdFIG9yIHNldHRpbmcgdGhlXG4iOwotICAgIHByaW50IFNUREVSUiAiLS11c2UtbGx2bS1p
bmNsdWRlcyBhbmQgLS11c2UtbGx2bS1saWJyYXJpZXMgb3B0aW9ucy5cbiI7Ci0gICAgcHJpbnQg
U1RERVJSICJcbiI7Ci0gICAgcHJpbnQgU1RERVJSICJBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGNo
ZWNrIG91dCBsbHZtIHRydW5rIGludG8gdGhlIFdlYktpdCBkaXJlY3Rvcnk6XG4iOwotICAgIHBy
aW50IFNUREVSUiAic3ZuIGNvIGh0dHA6Ly9sbHZtLm9yZy9zdm4vbGx2bS1wcm9qZWN0L2xsdm0v
dHJ1bmsgbGx2bVxuIjsKLSAgICBwcmludCBTVERFUlIgIioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiI7Ci0gICAgZXhpdCAxOwor
ICAgICMgV2UgaGF2ZSB2YXJpb3VzIHNjcmlwdHMgdGhhdCBjYWxsIHRoaXMgc2NyaXB0IGFuZCBw
YXNzIExMVk0tcmVsYXRlZCBvcHRpb25zLiBTbywgd2Ugc29ydCBvZgorICAgICMgc2lsZW50bHkg
aWdub3JlIHRoZW0gZm9yIG5vdy4gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIG9uY2Ugd2UgY29uZmly
bSB0aGF0IHdlJ3ZlIGF4ZWQgYWxsIG9mIHRoZQorICAgICMgTExWTSBzdXBwb3J0IGV2ZXJ5d2hl
cmUuCisgICAgcHJpbnQgIldhcm5pbmc6IHdlIG5vIGxvbmdlciBkZXBlbmQgb24gTExWTSBzbyB0
aGlzIHNjcmlwdCBkb2VzIG5vdGhpbmcgZm9yIExMVk0uIExMVk0tcmVsYXRlZCBvcHRpb25zIHdp
bGwgYmUgcmVtb3ZlZCBzb29uLlxuIjsKIH0KIAogc3ViIGZpbGVDb250YWlucwpAQCAtMjc1LDEx
MSArMTk2LDMgQEAgc3ViIGlzQ29udGVudE9mRmlsZUVxdWFsVG9TdHJpbmcoJCQpCiAgICAgcmV0
dXJuICRjb250ZW50cyBlcSAkc3RyaW5nOwogfQogCi1zdWIgYnVpbGRMTFZNKCQpCi17Ci0gICAg
bXkgKCRsbHZtU291cmNlRGlyZWN0b3J5KSA9IEBfOwotCi0gICAgbXkgJHNhdmVkV29ya2luZ0Rp
cmVjdG9yeSA9IGdldGN3ZCgpOwotICAgIGNob21wKG15ICRzZGtSb290RW52aXJvbm1lbnRWYXJp
YWJsZSA9IGB4Y3J1biBAe1t4Y29kZVNESygpID8gIi0tc2RrICIgLiB4Y29kZVNESygpIDogIiJd
fSAtLXNob3ctc2RrLXBhdGhgKTsKLSAgICAkc2RrUm9vdEVudmlyb25tZW50VmFyaWFibGUgPSAi
U0RLUk9PVD0kc2RrUm9vdEVudmlyb25tZW50VmFyaWFibGUiOwotCi0gICAgbXkgJGxsdm1CYXNl
UHJvZHVjdERpcmVjdG9yeSA9IEZpbGU6OlNwZWMtPmNhdGRpcigkbGx2bVNvdXJjZURpcmVjdG9y
eSwgIndrTExWTUJ1aWxkIik7Ci0gICAgaWYgKCEtZSBGaWxlOjpTcGVjLT5jYXRmaWxlKCRsbHZt
QmFzZVByb2R1Y3REaXJlY3RvcnksICJNYWtlZmlsZS5jb25maWciKSkgewotICAgICAgICBzeXN0
ZW0oIm1rZGlyIiwgIi1wIiwgJGxsdm1CYXNlUHJvZHVjdERpcmVjdG9yeSk7Ci0gICAgICAgIGNo
ZGlyKCRsbHZtQmFzZVByb2R1Y3REaXJlY3RvcnkpIG9yIGRpZTsKLSAgICAgICAgbXkgQGFyZ3Mg
PSBxdygKLSAgICAgICAgICAgIC0tZW5hYmxlLW9wdGltaXplZD15ZXMKLSAgICAgICAgICAgIC0t
ZW5hYmxlLWJhY2t0cmFjZXM9bm8KLSAgICAgICAgICAgIC0tZW5hYmxlLWxpYmNwcD15ZXMKLSAg
ICAgICAgICAgIC0tZW5hYmxlLXpsaWI9bm8KLSAgICAgICAgICAgIC0tZW5hYmxlLXRlcm1pbmZv
PW5vCi0gICAgICAgICAgICAtLWVuYWJsZS1jcmFzaC1vdmVycmlkZXM9bm8KLSAgICAgICAgKTsK
LSAgICAgICAgbXkgJHRhcmdldEFyY2hpdGVjdHVyZTsKLSAgICAgICAgaWYgKGlzSU9TV2ViS2l0
KCkpIHsKLSAgICAgICAgICAgICR0YXJnZXRBcmNoaXRlY3R1cmUgPSAiYXJtNjQiOwotICAgICAg
ICAgICAgcHVzaCBAYXJncywgIi0taG9zdD1hcm0tYXBwbGUtZGFyd2luIjsKLSAgICAgICAgICAg
IHB1c2ggQGFyZ3MsICItLWVuYWJsZS10YXJnZXRzPSR0YXJnZXRBcmNoaXRlY3R1cmUiOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgJHRhcmdldEFyY2hpdGVjdHVyZSA9ICJ4ODZfNjQi
OwotICAgICAgICAgICAgcHVzaCBAYXJncywgIi0tZW5hYmxlLXRhcmdldHM9JHRhcmdldEFyY2hp
dGVjdHVyZSI7Ci0gICAgICAgIH0KLQotICAgICAgICAjIEVudmlyb25tZW50IHZhcmlhYmxlcyBh
cmUgZXhwbGljaXRseSBhcHBlbmRlZCBhZnRlciBjb21tYW5kIGxpbmUgb3B0aW9ucyBzbyB0aGF0
Ci0gICAgICAgICMgdGhlIHNjcmlwdCBjb25maWd1cmUgY2FjaGVzIHRoZW0gaW4gZmlsZSBjb25m
aWcuc3RhdHVzIGZvciBhdXRvbWF0aWMgcmVjb25maWd1cmF0aW9uLgotICAgICAgICBpZiAoaXNJ
T1NXZWJLaXQoKSkgewotICAgICAgICAgICAgIyBXZSBtdXN0IGV4cGxpY2l0bHkgc3BlY2lmeSB0
aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSB0byB0aGUgY29tcGlsZXIvcHJlcHJvY2Vzc29yCi0gICAg
ICAgICAgICAjIHNpbmNlIHdlIGFyZSBjcm9zcy1jb21waWxpbmcgTExWTS4KLSAgICAgICAgICAg
IGZvciBteSAkZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgKHF3KENGTEFHUyBDWFhGTEFHUyBDUFBG
TEFHUykpIHsKLSAgICAgICAgICAgICAgICBwdXNoIEBhcmdzLCAiJGVudmlyb25tZW50VmFyaWFi
bGVOYW1lPS1hcmNoICR0YXJnZXRBcmNoaXRlY3R1cmUiOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIHB1c2ggQGFyZ3MsICRzZGtSb290RW52aXJvbm1lbnRWYXJpYWJsZTsKLSAg
ICAgICAgKHN5c3RlbSgiLi4vY29uZmlndXJlIiwgQGFyZ3MpID09IDApIG9yIGRpZTsKLSAgICB9
Ci0KLSAgICBjaGRpcigkbGx2bUJhc2VQcm9kdWN0RGlyZWN0b3J5KSBvciBkaWU7Ci0gICAgbXkg
JHNhdmVkUGF0aCA9ICRFTlZ7IlBBVEgifTsKLQotICAgIG15ICRiaW5hcmllc0RpcmVjdG9yeSA9
ICJiaW5hcmllc0ZvckxMVk1CdWlsZCI7Ci0gICAgbXkgJHBhdGhFbnZpcm9ubWVudFZhcmlhYmxl
ID0gIiI7Ci0gICAgaWYgKC1lICRiaW5hcmllc0RpcmVjdG9yeSkgewotICAgICAgICBteSAkYmlu
YXJpZXNQYXRoID0gRmlsZTo6U3BlYy0+cmVsMmFicygkYmluYXJpZXNEaXJlY3RvcnkpOwotICAg
ICAgICAkcGF0aEVudmlyb25tZW50VmFyaWFibGUgPSAiUEFUSD0iIC4gam9pbigiOiIsICRiaW5h
cmllc1BhdGgsICckUEFUSCcpOwotICAgIH0KLSAgICBteSAkbWFrZUNvbW1hbmQgPSAiZW52IC1p
IGJhc2ggLWwgLWMgXCIkcGF0aEVudmlyb25tZW50VmFyaWFibGUgJHNka1Jvb3RFbnZpcm9ubWVu
dFZhcmlhYmxlIG1ha2UgLWogYHN5c2N0bCAtbiBody5hY3RpdmVjcHVgXCIiOwotICAgIHByaW50
ICRtYWtlQ29tbWFuZCAuICJcbiI7Ci0gICAgKHN5c3RlbSgkbWFrZUNvbW1hbmQpID09IDApIG9y
IGRpZTsKLQotICAgICRFTlZ7IlBBVEgifSA9ICRzYXZlZFBhdGg7Ci0gICAgY2hkaXIoJHNhdmVk
V29ya2luZ0RpcmVjdG9yeSk7Ci19Ci0KLXN1YiBzeW1saW5rTExWTUxpYnJhcmllc0lmTmVlZGVk
KCQkKQotewotICAgIG15ICgkbGx2bVNvdXJjZURpcmVjdG9yeSwgJGxpYnJhcnlUYXJnZXREaXJl
Y3RvcnkpID0gQF87Ci0KLSAgICBteSAkbGx2bU1ha2VmaWxlQ29uZmlnID0gRmlsZTo6U3BlYy0+
Y2F0ZmlsZSgkbGx2bVNvdXJjZURpcmVjdG9yeSwgIndrTExWTUJ1aWxkIiwgIk1ha2VmaWxlLmNv
bmZpZyIpOwotICAgIG15ICRjb25maWd1cmF0aW9uRGlyZWN0b3J5TmFtZSA9ICIiOwotICAgIGlm
IChmaWxlQ29udGFpbnMoJGxsdm1NYWtlZmlsZUNvbmZpZywgIkVOQUJMRV9PUFRJTUlaRUQ9MSIp
KSB7Ci0gICAgICAgICRjb25maWd1cmF0aW9uRGlyZWN0b3J5TmFtZSAuPSAiUmVsZWFzZSI7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgJGNvbmZpZ3VyYXRpb25EaXJlY3RvcnlOYW1lIC49ICJEZWJ1
ZyI7Ci0gICAgfQotICAgICRjb25maWd1cmF0aW9uRGlyZWN0b3J5TmFtZSAuPSAiK0Fzc2VydHMi
IHVubGVzcyBmaWxlQ29udGFpbnMoJGxsdm1NYWtlZmlsZUNvbmZpZywgIkRJU0FCTEVfQVNTRVJU
SU9OUz0xIik7Ci0gICAgbXkgJGxpYnJhcnlTb3VyY2VEaXJlY3RvcnkgPSBGaWxlOjpTcGVjLT5j
YXRkaXIoJGxsdm1Tb3VyY2VEaXJlY3RvcnksICJ3a0xMVk1CdWlsZCIsICRjb25maWd1cmF0aW9u
RGlyZWN0b3J5TmFtZSwgImxpYiIpOwotCi0gICAgbXkgJHNob3VsZFVwZGF0ZUxMVk1MaWJyYXJ5
VG9rZW4gPSAwOwotICAgIHByaW50KCJTeW1saW5raW5nIGxpYnJhcmllcyBmcm9tICRsaWJyYXJ5
U291cmNlRGlyZWN0b3J5IHRvICRsaWJyYXJ5VGFyZ2V0RGlyZWN0b3J5XG4iKTsKLSAgICBvcGVu
ZGlyKG15ICRkaXJIYW5kbGUsICRsaWJyYXJ5U291cmNlRGlyZWN0b3J5KTsKLSAgICB3aGlsZSAo
bXkgJGZpbGVuYW1lID0gcmVhZGRpcigkZGlySGFuZGxlKSkgewotICAgICAgICBuZXh0IGlmICRm
aWxlbmFtZSAhfiAvXC5hJC87Ci0gICAgICAgIG5leHQgaWYgJGZpbGVuYW1lID1+IC9saWJndGVz
dC87Ci0KLSAgICAgICAgcHJpbnQgIiAgIFN5bWxpbmsgJGZpbGVuYW1lXG4iOwotICAgICAgICBt
eSAkc291cmNlTGlicmFyeSA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJGxpYnJhcnlTb3VyY2VEaXJl
Y3RvcnksICRmaWxlbmFtZSk7Ci0gICAgICAgIG15ICR0YXJnZXRMaWJyYXJ5ID0gRmlsZTo6U3Bl
Yy0+Y2F0ZmlsZSgkbGlicmFyeVRhcmdldERpcmVjdG9yeSwgJGZpbGVuYW1lKTsKLSAgICAgICAg
bXkgJHJhbmxpYlRva2VuID0gRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkbGlicmFyeVRhcmdldERpcmVj
dG9yeSwgIi5yYW5saWJUb2tlbi0kZmlsZW5hbWUiKTsKLSAgICAgICAgdW5saW5rKCR0YXJnZXRM
aWJyYXJ5KTsKLSAgICAgICAgc3ltbGluaygkc291cmNlTGlicmFyeSwgJHRhcmdldExpYnJhcnkp
OwotICAgICAgICBpZiAoJGZvcmNlIHx8ICEtZSAkcmFubGliVG9rZW4gfHwgIWlzQ29udGVudE9m
RmlsZUVxdWFsVG9TdHJpbmcoJHJhbmxpYlRva2VuLCAkc291cmNlTGlicmFyeSkgfHwgLU0gJHJh
bmxpYlRva2VuID4gLU0gJHNvdXJjZUxpYnJhcnkpIHsKLSAgICAgICAgICAgIHByaW50ICIgICBS
YW5saWIgJGZpbGVuYW1lXG4iOwotICAgICAgICAgICAgZXhlY3V0ZVJhbmxpYigkdGFyZ2V0TGli
cmFyeSk7Ci0gICAgICAgICAgICBvcGVuKFJBTkxJQl9UT0tFTiwgIj4iLCAkcmFubGliVG9rZW4p
IG9yIGRpZSAiRmFpbGVkIHRvIG9wZW4gJHJhbmxpYlRva2VuOiAkISI7Ci0gICAgICAgICAgICBw
cmludCBSQU5MSUJfVE9LRU4gJHNvdXJjZUxpYnJhcnk7Ci0gICAgICAgICAgICBjbG9zZShSQU5M
SUJfVE9LRU4pOwotICAgICAgICAgICAgJHNob3VsZFVwZGF0ZUxMVk1MaWJyYXJ5VG9rZW4gPSAx
OwotICAgICAgICB9Ci0gICAgfQotICAgIGNsb3NlZGlyKCRkaXJIYW5kbGUpOwotCi0gICAgbXkg
JHRhcmdldEluY2x1ZGVMTFZNRGlyZWN0b3J5ID0gRmlsZTo6U3BlYy0+Y2F0ZGlyKCIkcHJvZHVj
dERpciRsbHZtUHJlZml4IiwgImluY2x1ZGUiLCAibGx2bSIpOwotICAgIG15ICR0YXJnZXRJbmNs
dWRlTExWTUNEaXJlY3RvcnkgPSBGaWxlOjpTcGVjLT5jYXRkaXIoIiRwcm9kdWN0RGlyJGxsdm1Q
cmVmaXgiLCAiaW5jbHVkZSIsICJsbHZtLWMiKTsKLSAgICAoc3lzdGVtKCJybSIsICItcmYiLCAk
dGFyZ2V0SW5jbHVkZUxMVk1EaXJlY3RvcnkpID09IDApIG9yIGRpZTsKLSAgICAoc3lzdGVtKCJy
bSIsICItcmYiLCAkdGFyZ2V0SW5jbHVkZUxMVk1DRGlyZWN0b3J5KSA9PSAwKSBvciBkaWU7Ci0g
ICAgc3ltbGluayhGaWxlOjpTcGVjLT5jYXRkaXIoJGxsdm1Tb3VyY2VEaXJlY3RvcnksICJpbmNs
dWRlIiwgImxsdm0iKSwgJHRhcmdldEluY2x1ZGVMTFZNRGlyZWN0b3J5KSBvciBkaWU7Ci0gICAg
c3ltbGluayhGaWxlOjpTcGVjLT5jYXRkaXIoJGxsdm1Tb3VyY2VEaXJlY3RvcnksICJpbmNsdWRl
IiwgImxsdm0tYyIpLCAkdGFyZ2V0SW5jbHVkZUxMVk1DRGlyZWN0b3J5KSBvciBkaWU7Ci0gICAg
c3ltbGluayhGaWxlOjpTcGVjLT5jYXRkaXIoJGxsdm1Tb3VyY2VEaXJlY3RvcnksICJ3a0xMVk1C
dWlsZCIsICJpbmNsdWRlIiksIEZpbGU6OlNwZWMtPmNhdGZpbGUoJHByb2R1Y3REaXIsICJFeHRy
YUluY2x1ZGVzRm9yTG9jYWxMTFZNQnVpbGQiKSkgb3IgZGllOwotCi0gICAgcmV0dXJuICRzaG91
bGRVcGRhdGVMTFZNTGlicmFyeVRva2VuOwotfQo=
</data>
<flag name="review"
          id="296405"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>