<?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>147142</bug_id>
          
          <creation_ts>2015-07-20 23:43:03 -0700</creation_ts>
          <short_desc>[WTF] Turn tryMakeString(), makeString() into variadic templates</short_desc>
          <delta_ts>2016-12-15 16:22:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>147624</dependson>
    
    <dependson>147644</dependson>
          <blocked>165791</blocked>
    
    <blocked>165924</blocked>
    
    <blocked>163919</blocked>
    
    <blocked>165790</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="JF Bastien">jfbastien</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>jfbastien</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1110909</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-07-20 23:43:03 -0700</bug_when>
    <thetext>[WTF] Turn tryMakeString(), makeString() into variadic templates</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110921</commentid>
    <comment_count>1</comment_count>
      <attachid>257173</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-07-21 01:29:23 -0700</bug_when>
    <thetext>Created attachment 257173
Patch

EWS run</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110932</commentid>
    <comment_count>2</comment_count>
      <attachid>257179</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-07-21 07:02:35 -0700</bug_when>
    <thetext>Created attachment 257179
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1110980</commentid>
    <comment_count>3</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-07-21 11:34:02 -0700</bug_when>
    <thetext>How similar is this to 

https://bugs.webkit.org/attachment.cgi?id=239228&amp;action=review

(Not saying you shouldn&apos;t do it - I started doing it but forgot about it since the patch didn&apos;t build on OS X/iOS).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111125</commentid>
    <comment_count>4</comment_count>
      <attachid>257179</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-07-21 16:52:35 -0700</bug_when>
    <thetext>Comment on attachment 257179
Patch

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

&gt; Source/WTF/wtf/text/StringConcatenate.h:330
&gt; +    return String(std::forward&lt;T&gt;(string1));

I’m surprised the explicit cast to String() is needed here.

&gt; Source/WTF/wtf/text/StringOperators.h:37
&gt; +        RefPtr&lt;StringImpl&gt; resultImpl = StringAdapterTuple&lt;2, AdapterType&lt;T1&gt;, AdapterType&lt;T2&gt;&gt;::createString(m_tuple);

Seems like this should be named result, not resultImpl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111126</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-07-21 16:53:05 -0700</bug_when>
    <thetext>Oops, I missed Anders’ comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111600</commentid>
    <comment_count>6</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-07-22 23:42:43 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; How similar is this to 
&gt; 
&gt; https://bugs.webkit.org/attachment.cgi?id=239228&amp;action=review
&gt; 
&gt; (Not saying you shouldn&apos;t do it - I started doing it but forgot about it
&gt; since the patch didn&apos;t build on OS X/iOS).

It&apos;s very similar. I&apos;ll try to adopt the use of additional adapters and Checked&lt;&gt;, and update the patch with that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112306</commentid>
    <comment_count>7</comment_count>
      <attachid>257536</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-07-26 02:20:52 -0700</bug_when>
    <thetext>Created attachment 257536
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112313</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-07-26 12:18:16 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created attachment 257536 [details]
&gt; Patch

Thanks for picking this up Zan! Would you mind posting the non-diff version of StringConcatenate.h. I think it would make it easier to review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112448</commentid>
    <comment_count>9</comment_count>
      <attachid>257573</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-07-27 11:27:06 -0700</bug_when>
    <thetext>Created attachment 257573
New StringConcatenate.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112541</commentid>
    <comment_count>10</comment_count>
      <attachid>257536</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-07-27 15:37:55 -0700</bug_when>
    <thetext>Comment on attachment 257536
Patch

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

&gt; Source/WTF/wtf/text/StringConcatenate.h:391
&gt; +String makeString(T1&amp;&amp; string1, T2&amp;&amp; string2, Ts&amp;&amp;... strings)

Why does this take three parameters? Shouldn&apos;t this be String makeString(T1&amp;&amp; string,  Ts&amp;&amp;... strings)? Same question for tryMakeString</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112542</commentid>
    <comment_count>11</comment_count>
      <attachid>257536</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-07-27 15:40:46 -0700</bug_when>
    <thetext>Comment on attachment 257536
Patch

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

&gt;&gt; Source/WTF/wtf/text/StringConcatenate.h:391
&gt;&gt; +String makeString(T1&amp;&amp; string1, T2&amp;&amp; string2, Ts&amp;&amp;... strings)
&gt; 
&gt; Why does this take three parameters? Shouldn&apos;t this be String makeString(T1&amp;&amp; string,  Ts&amp;&amp;... strings)? Same question for tryMakeString

I also think these can be const references rather than universal references, since there will never be any stealing going on.  (This is of course not true of the makeString that takes only one String).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114303</commentid>
    <comment_count>12</comment_count>
      <attachid>257536</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-08-03 12:41:22 -0700</bug_when>
    <thetext>Comment on attachment 257536
Patch

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

&gt;&gt;&gt; Source/WTF/wtf/text/StringConcatenate.h:391
&gt;&gt;&gt; +String makeString(T1&amp;&amp; string1, T2&amp;&amp; string2, Ts&amp;&amp;... strings)
&gt;&gt; 
&gt;&gt; Why does this take three parameters? Shouldn&apos;t this be String makeString(T1&amp;&amp; string,  Ts&amp;&amp;... strings)? Same question for tryMakeString
&gt; 
&gt; I also think these can be const references rather than universal references, since there will never be any stealing going on.  (This is of course not true of the makeString that takes only one String).

The variadic pack can be of zero size, essentially containing no elements. The first two parameters ensure that at least two arguments are passed in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114304</commentid>
    <comment_count>13</comment_count>
      <attachid>257536</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-08-03 12:41:23 -0700</bug_when>
    <thetext>Comment on attachment 257536
Patch

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

&gt;&gt;&gt; Source/WTF/wtf/text/StringConcatenate.h:391
&gt;&gt;&gt; +String makeString(T1&amp;&amp; string1, T2&amp;&amp; string2, Ts&amp;&amp;... strings)
&gt;&gt; 
&gt;&gt; Why does this take three parameters? Shouldn&apos;t this be String makeString(T1&amp;&amp; string,  Ts&amp;&amp;... strings)? Same question for tryMakeString
&gt; 
&gt; I also think these can be const references rather than universal references, since there will never be any stealing going on.  (This is of course not true of the makeString that takes only one String).

The variadic pack can be of zero size, essentially containing no elements. The first two parameters ensure that at least two arguments are passed in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114318</commentid>
    <comment_count>14</comment_count>
      <attachid>258102</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-08-03 13:13:40 -0700</bug_when>
    <thetext>Created attachment 258102
Patch

Uses const-references in multi-parameter tryMakeString(), makeString() versions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114534</commentid>
    <comment_count>15</comment_count>
      <attachid>258102</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-08-03 23:27:22 -0700</bug_when>
    <thetext>Comment on attachment 258102
Patch

Clearing flags on attachment: 258102

Committed r187815: &lt;http://trac.webkit.org/changeset/187815&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114535</commentid>
    <comment_count>16</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-08-03 23:27:31 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114536</commentid>
    <comment_count>17</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-08-03 23:33:01 -0700</bug_when>
    <thetext>Looks like this broke the Windows build:
&lt;https://build.webkit.org/builders/Apple%20Win%20Debug%20%28Build%29/builds/90030/steps/compile-webkit/logs/stdio&gt;

A lot of errors that look like:

&gt; C:\cygwin\home\buildbot\slave\win-debug\build\Source\WTF\wtf/text/StringOperators.h(72): error C2079: &apos;WTF::StringAppend&lt;const char *,WTF::String&gt;::m_tuple&apos; uses undefined class &apos;std::tuple&lt;WTF::StringTypeAdapter&lt;const char*&gt;,WTF::StringTypeAdapter&lt;WTF::String&gt;&gt;&apos; (..\wtf\DecimalNumber.cpp) [C:\cygwin\home\buildbot\slave\win-debug\build\Source\WTF\WTF.vcxproj\WTF.vcxproj]
&gt;           C:\cygwin\home\buildbot\slave\win-debug\build\Source\WTF\wtf/text/StringOperators.h(97) : see reference to class template instantiation &apos;WTF::StringAppend&lt;const char *,WTF::String&gt;&apos; being compiled

Have time to investigate? Or should we consider rolling out?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114558</commentid>
    <comment_count>18</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-08-04 00:28:55 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Looks like this broke the Windows build:
&gt; &lt;https://build.webkit.org/builders/Apple%20Win%20Debug%20%28Build%29/builds/
&gt; 90030/steps/compile-webkit/logs/stdio&gt;
&gt; 
&gt; A lot of errors that look like:
&gt; 
&gt; &gt; C:\cygwin\home\buildbot\slave\win-debug\build\Source\WTF\wtf/text/StringOperators.h(72): error C2079: &apos;WTF::StringAppend&lt;const char *,WTF::String&gt;::m_tuple&apos; uses undefined class &apos;std::tuple&lt;WTF::StringTypeAdapter&lt;const char*&gt;,WTF::StringTypeAdapter&lt;WTF::String&gt;&gt;&apos; (..\wtf\DecimalNumber.cpp) [C:\cygwin\home\buildbot\slave\win-debug\build\Source\WTF\WTF.vcxproj\WTF.vcxproj]
&gt; &gt;           C:\cygwin\home\buildbot\slave\win-debug\build\Source\WTF\wtf/text/StringOperators.h(97) : see reference to class template instantiation &apos;WTF::StringAppend&lt;const char *,WTF::String&gt;&apos; being compiled
&gt; 
&gt; Have time to investigate? Or should we consider rolling out?

Fixed in r187817.
http://trac.webkit.org/changeset/187817</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114564</commentid>
    <comment_count>19</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-08-04 00:38:40 -0700</bug_when>
    <thetext>*** Bug 137369 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114611</commentid>
    <comment_count>20</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-08-04 08:31:26 -0700</bug_when>
    <thetext>A lot of Windows tests are crashing, and this is the most likely cause in the revision range:

https://build.webkit.org/builders/Apple%20Win%207%20Debug%20%28Tests%29?numbuilds=100

Please investigate. I will roll out to test this theory in a few hours.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114694</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-04 12:07:48 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 147644</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1213895</commentid>
    <comment_count>22</comment_count>
      <attachid>284410</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-07-23 03:43:02 -0700</bug_when>
    <thetext>Created attachment 284410
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259298</commentid>
    <comment_count>23</comment_count>
      <attachid>296975</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-12 18:01:30 -0800</bug_when>
    <thetext>Created attachment 296975
patch

This seems stalled, and I didn&apos;t know the bug existed until after writing the code. I propose this minimal patch which *only* makes the code variadic, and I&apos;ll be happy to do follow-ups later, including allowing us to makeString from non-string things (e.g. using String::number on numbers, and enabling user-defined stringifiers through ADL).

There are two FIXMEs in there which I&apos;d like to change, either here or in a follow-up (since it&apos;s a behavior change).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259340</commentid>
    <comment_count>24</comment_count>
      <attachid>296975</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-12 20:58:44 -0800</bug_when>
    <thetext>Comment on attachment 296975
patch

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

&gt; Source/WTF/wtf/text/StringConcatenate.h:144
&gt; +        if (length &gt; std::numeric_limits&lt;unsigned&gt;::max()) // FIXME

This is sketchy: length is already unsigned. A string that long should probably CRASH anyways as it&apos;s a symptom of a deeper problem.

&gt; Source/WTF/wtf/text/StringConcatenate.h:153
&gt; +    NO_RETURN_DUE_TO_CRASH void writeTo(LChar*) const // FIXME

We could fail this if instantiated instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259342</commentid>
    <comment_count>25</comment_count>
      <attachid>296975</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-12-12 22:06:33 -0800</bug_when>
    <thetext>Comment on attachment 296975
patch

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

Some comments for now.  Will read the rest carefully tomorrow when my mind is more awake.

&gt; Source/WTF/ChangeLog:8
&gt; +        I wrote this patch while improving WebAssembly&apos;s error messages, and only found this bug afterwads. My implementation does the bare minimum to make this code variadic without changing behavior. I think it&apos;s better to go with this baby step first, and improve the code later. Notable, for my WebAssembly patch I also taught the code to handle integers and other types (including WebAssembly types). A follow-up could rely on ADL magic to pretty-format these other types.

/afterwads/afterwards/.

nit: I&apos;d prefer it if you put some line breaks in this and break it into multiple lines.

&gt;&gt; Source/WTF/wtf/text/StringConcatenate.h:144
&gt;&gt; +        if (length &gt; std::numeric_limits&lt;unsigned&gt;::max()) // FIXME
&gt; 
&gt; This is sketchy: length is already unsigned. A string that long should probably CRASH anyways as it&apos;s a symptom of a deeper problem.

You should file a bug and include the bug url with the FIXME.

&gt;&gt; Source/WTF/wtf/text/StringConcatenate.h:153
&gt;&gt; +    NO_RETURN_DUE_TO_CRASH void writeTo(LChar*) const // FIXME
&gt; 
&gt; We could fail this if instantiated instead.

Ditto.  File a bug so that we don&apos;t forget it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259346</commentid>
    <comment_count>26</comment_count>
      <attachid>296991</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-12 22:58:00 -0800</bug_when>
    <thetext>Created attachment 296991
patch

Address Mark&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259428</commentid>
    <comment_count>27</comment_count>
      <attachid>296991</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-12-13 10:16:30 -0800</bug_when>
    <thetext>Comment on attachment 296991
patch

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

r=me

&gt; Source/WTF/ChangeLog:20
&gt; +        (WTF::sumWithOverflow): This unconditionally does the sum for all inputs, which the compiler is more likely to appreciate (because it&apos;s the common case) compared to testing for overflow and bailing on each addition

nit: can you add some line breaks to this line too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259444</commentid>
    <comment_count>28</comment_count>
      <attachid>297023</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-13 10:38:28 -0800</bug_when>
    <thetext>Created attachment 297023
patch

Break multiline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259453</commentid>
    <comment_count>29</comment_count>
      <attachid>297023</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-13 11:15:39 -0800</bug_when>
    <thetext>Comment on attachment 297023
patch

Clearing flags on attachment: 297023

Committed r209761: &lt;http://trac.webkit.org/changeset/209761&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259454</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-13 11:15:49 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260347</commentid>
    <comment_count>31</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-12-15 16:22:31 -0800</bug_when>
    <thetext>*** Bug 129235 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257173</attachid>
            <date>2015-07-21 01:29:23 -0700</date>
            <delta_ts>2015-07-21 07:02:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147142-20150721012808.patch</filename>
            <type>text/plain</type>
            <size>31617</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3MDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDk5YTUzZThiMDc0YmMyZDU4ZjdjZTMz
OWM3ODgzNDcwNGNkZmZhNGIuLmJhYzdhMDYwMDQxMTVjYjY0MmQxYTM4MzY3YmI2MmM5NjFlZWEz
MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTUtMDctMjAgIFphbiBEb2JlcnNlayAgPHpkb2Jl
cnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtXVEZdIFR1cm4gdHJ5TWFrZVN0cmluZygpLCBt
YWtlU3RyaW5nKCkgaW50byB2YXJpYWRpYyB0ZW1wbGF0ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzE0MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCB0cnlNYWtlU3RyaW5nKCkgYW5k
IG1ha2VTdHJpbmcoKSBhcyB2YXJpYWRpYyB0ZW1wbGF0ZXMsIHJlcGxhY2luZworICAgICAgICB0
aGUgYXJndW1lbnQgY291bnQtYmFzZWQgb3ZlcmxvYWRzLgorCisgICAgICAgIHRyeU1ha2VTdHJp
bmcoKSBub3cgY29uc3RydWN0cyBhIHN0YWNrLWJhc2VkIHR1cGxlIG9mIG5lY2Vzc2FyeSBTdHJp
bmdUeXBlQWRhcHRlcgorICAgICAgICBvYmplY3RzIGFuZCB1dGlsaXplcyB0aGUgU3RyaW5nQWRh
cHRlclR1cGxlIHN0cnVjdCB0ZW1wbGF0ZSB0byBvcGVyYXRlIG9uIHRoYXQKKyAgICAgICAgdHVw
bGUsIHJlY3Vyc2l2ZWx5IGNhbGxpbmcgdGhlIG5lY2Vzc2FyeSBvcGVyYXRpb25zIG9uIGVhY2gg
ZWxlbWVudCBpbiB0aGUgdHVwbGUuCisgICAgICAgIFRoaXMgZWZmZWN0aXZlbHkgbWltaWNzIHRo
ZSBwcm9jZXNzIG9mIHByZXZpb3VzIHRyeU1ha2VTdHJpbmcoKSBpbXBsZW1lbnRhdGlvbiwKKyAg
ICAgICAgYnV0IG1ha2VzIGl0IHNjYWxhYmxlIHRvIGEgdHVwbGUgb2YgZWxlbWVudHMgdGhhdCBh
cmUgdG8gYmUgY29uY2F0ZW5hdGVkLgorCisgICAgICAgIFN0cmluZ0FwcGVuZCBjbGFzcyB0ZW1w
bGF0ZSBub3cgc3RvcmVzIHR3byBTdHJpbmdUeXBlQWRhcHRlciBvYmplY3RzIGZvciB0aGUKKyAg
ICAgICAgdHdvIHBhc3NlZC1pbiBzdHJpbmcgb2JqZWN0cywgcGFja2VkIGluIGEgdHVwbGUsIGNh
bGxpbmcKKyAgICAgICAgU3RyaW5nQWRhcHRlclR1cGxlPD46OmNyZWF0ZVN0cmluZygpIGRpcmVj
dGx5IHdoZW4gY29uY2F0ZW5hdGluZyB0aGUgdHdvIG9iamVjdHMKKyAgICAgICAgaW50byBvbmUg
U3RyaW5nLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaDoKKyAgICAg
ICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8Y2hhcj46Omxlbmd0aCk6CisgICAgICAgIChXVEY6
OlN0cmluZ1R5cGVBZGFwdGVyPGNoYXI+OjppczhCaXQpOgorICAgICAgICAoV1RGOjpTdHJpbmdB
ZGFwdGVyVHVwbGU6OnN1bVdpdGhPdmVyZmxvd3cpOgorICAgICAgICAoV1RGOjpTdHJpbmdBZGFw
dGVyVHVwbGU6OmlzOEJpdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0FkYXB0ZXJUdXBsZTo6d3Jp
dGVUbyk6CisgICAgICAgIChXVEY6OlN0cmluZ0FkYXB0ZXJUdXBsZTo6Y3JlYXRlU3RyaW5nKToK
KyAgICAgICAgKFdURjo6dHJ5TWFrZVN0cmluZyk6CisgICAgICAgIChXVEY6Om1ha2VTdHJpbmcp
OgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ09wZXJhdG9ycy5oOgorICAgICAgICAoV1RGOjpT
dHJpbmdBcHBlbmQ6OlN0cmluZ0FwcGVuZCk6CisgICAgICAgIChXVEY6OlN0cmluZ0FwcGVuZDo6
b3BlcmF0b3IgU3RyaW5nKToKKyAgICAgICAgKFdURjo6U3RyaW5nQXBwZW5kOjppczhCaXQpOgor
ICAgICAgICAoV1RGOjpTdHJpbmdBcHBlbmQ6OndyaXRlVG8pOgorICAgICAgICAoV1RGOjpTdHJp
bmdBcHBlbmQ6Omxlbmd0aCk6CisgICAgICAgIChXVEY6OlN0cmluZ0FwcGVuZDo6c3RyaW5nMSk6
CisgICAgICAgIChXVEY6OlN0cmluZ0FwcGVuZDo6c3RyaW5nMik6CisKIDIwMTUtMDctMjAgIEp1
bGllbiBCcmlhbmNlYXUgIDxqdWxpZW4uYnJpYW5jZWF1QGdtYWlsLmNvbT4KIAogICAgICAgICBV
c2UgaXNuYW4gZnJvbSBzdGQgbmFtZXNwYWNlIGluIFN0b3B3YXRjaC5oLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oIGIvU291cmNlL1dURi93dGYv
dGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCmluZGV4IDhjYzRiNThlMjA1MzNmYWY0MTM0MmFkYThh
ZmQ5YWY4MTYwYTA1MDMuLmZhOGY3ZjkxMWZlNTFhNGEzNTBmNTI3MTlkYzkwNmY3NjdjODE0OGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmgKQEAgLTU1LDggKzU1LDgg
QEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVy
biAxOyB9Ci0gICAgYm9vbCBpczhCaXQoKSB7IHJldHVybiB0cnVlOyB9CisgICAgdW5zaWduZWQg
bGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gMTsgfQorICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogCiAgICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikgY29u
c3QKICAgICB7CkBAIC0yNTUsNTYxICsyNTUsODUgQEAgaW5saW5lIHZvaWQgc3VtV2l0aE92ZXJm
bG93KHVuc2lnbmVkJiB0b3RhbCwgdW5zaWduZWQgYWRkZW5kLCBib29sJiBvdmVyZmxvdykKICAg
ICAgICAgb3ZlcmZsb3cgPSB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBl
MSwgdHlwZW5hbWUgU3RyaW5nVHlwZTI+Ci1SZWZQdHI8U3RyaW5nSW1wbD4gdHJ5TWFrZVN0cmlu
ZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyKQotewotICAgIFN0cmlu
Z1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBhZGFwdGVyMShzdHJpbmcxKTsKLSAgICBTdHJpbmdU
eXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRhcHRlcjIoc3RyaW5nMik7Ci0KLSAgICBib29sIG92
ZXJmbG93ID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYWRhcHRlcjEubGVuZ3RoKCk7
Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjIubGVuZ3RoKCksIG92ZXJmbG93
KTsKLSAgICBpZiAob3ZlcmZsb3cpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYg
KGFkYXB0ZXIxLmlzOEJpdCgpICYmIGFkYXB0ZXIyLmlzOEJpdCgpKSB7Ci0gICAgICAgIExDaGFy
KiBidWZmZXI7Ci0gICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5n
SW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgICAgIGlm
ICghcmVzdWx0SW1wbCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIExD
aGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsK
LSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMi53
cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICAgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHRJbXBsKTsK
LSAgICB9Ci0KLSAgICBVQ2hhciogYnVmZmVyOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1
bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZl
cik7Ci0gICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IFVDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwot
ICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMi53cml0ZVRvKHJl
c3VsdCk7Ci0KLSAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdEltcGwpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0
cmluZ1R5cGUzPgotUmVmUHRyPFN0cmluZ0ltcGw+IHRyeU1ha2VTdHJpbmcoU3RyaW5nVHlwZTEg
c3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMykKLXsKLSAg
ICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3RyaW5nMSk7Ci0gICAg
U3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKHN0cmluZzIpOwotICAgIFN0
cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUzPiBhZGFwdGVyMyhzdHJpbmczKTsKLQotICAgIGJv
b2wgb3ZlcmZsb3cgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhZGFwdGVyMS5sZW5n
dGgoKTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyMi5sZW5ndGgoKSwgb3Zl
cmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIzLmxlbmd0aCgpLCBv
dmVyZmxvdyk7Ci0gICAgaWYgKG92ZXJmbG93KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIGlmIChhZGFwdGVyMS5pczhCaXQoKSAmJiBhZGFwdGVyMi5pczhCaXQoKSAmJiBhZGFwdGVy
My5pczhCaXQoKSkgewotICAgICAgICBMQ2hhciogYnVmZmVyOwotICAgICAgICBSZWZQdHI8U3Ry
aW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQo
bGVuZ3RoLCBidWZmZXIpOwotICAgICAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBMQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgICAg
ICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMS5s
ZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1
bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0
KTsKLQotICAgICAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdEltcGwpOwotICAgIH0KLQotICAg
IFVDaGFyKiBidWZmZXIgPSAwOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0g
U3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAg
aWYgKCFyZXN1bHRJbXBsKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFVDaGFyKiBy
ZXN1bHQgPSBidWZmZXI7Ci0gICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3Vs
dCArPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0g
ICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVz
dWx0KTsKLQotICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0SW1wbCk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3Ry
aW5nVHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5cGU0PgotUmVmUHRyPFN0cmluZ0ltcGw+IHRyeU1h
a2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5n
VHlwZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3RyaW5nNCkKLXsKLSAgICBTdHJpbmdUeXBlQWRh
cHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3RyaW5nMSk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0
ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKHN0cmluZzIpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVy
PFN0cmluZ1R5cGUzPiBhZGFwdGVyMyhzdHJpbmczKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxT
dHJpbmdUeXBlND4gYWRhcHRlcjQoc3RyaW5nNCk7Ci0KLSAgICBib29sIG92ZXJmbG93ID0gZmFs
c2U7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgc3VtV2l0
aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjIubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1X
aXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyMy5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1
bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI0Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAg
aWYgKG92ZXJmbG93KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChhZGFwdGVy
MS5pczhCaXQoKSAmJiBhZGFwdGVyMi5pczhCaXQoKSAmJiBhZGFwdGVyMy5pczhCaXQoKSAmJiBh
ZGFwdGVyNC5pczhCaXQoKSkgewotICAgICAgICBMQ2hhciogYnVmZmVyOwotICAgICAgICBSZWZQ
dHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlh
bGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgICAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBMQ2hhciogcmVzdWx0ID0gYnVmZmVyOwot
ICAgICAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFw
dGVyMS5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgICAg
ICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIzLndyaXRlVG8o
cmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgICAgICBh
ZGFwdGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICAgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1
bHRJbXBsKTsKK3RlbXBsYXRlPHNpemVfdCBpbmRleCwgdHlwZW5hbWUuLi4gQWRhcHRlcnM+Citz
dHJ1Y3QgU3RyaW5nQWRhcHRlclR1cGxlIHsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgc3VtV2l0
aE92ZXJmbG93KHVuc2lnbmVkJiB0b3RhbCwgYm9vbCYgb3ZlcmZsb3csIGNvbnN0IHN0ZDo6dHVw
bGU8QWRhcHRlcnMuLi4+JiB0dXBsZSkKKyAgICB7CisgICAgICAgIGF1dG8mIGFkYXB0ZXIgPSBz
dGQ6OmdldDxzaXplb2YuLi4oQWRhcHRlcnMpIC0gaW5kZXg+KHR1cGxlKTsKKyAgICAgICAgV1RG
OjpzdW1XaXRoT3ZlcmZsb3codG90YWwsIGFkYXB0ZXIubGVuZ3RoKCksIG92ZXJmbG93KTsKKyAg
ICAgICAgU3RyaW5nQWRhcHRlclR1cGxlPGluZGV4IC0gMSwgQWRhcHRlcnMuLi4+OjpzdW1XaXRo
T3ZlcmZsb3codG90YWwsIG92ZXJmbG93LCB0dXBsZSk7CiAgICAgfQogCi0gICAgVUNoYXIqIGJ1
ZmZlcjsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghcmVzdWx0SW1w
bCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBVQ2hhciogcmVzdWx0ID0gYnVmZmVy
OwotICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjEu
bGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBh
ZGFwdGVyMi5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVz
dWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsK
LQotICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0SW1wbCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlw
ZTMsIHR5cGVuYW1lIFN0cmluZ1R5cGU0LCB0eXBlbmFtZSBTdHJpbmdUeXBlNT4KLVJlZlB0cjxT
dHJpbmdJbXBsPiB0cnlNYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUy
IHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQsIFN0cmlu
Z1R5cGU1IHN0cmluZzUpCi17Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTE+IGFk
YXB0ZXIxKHN0cmluZzEpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFw
dGVyMihzdHJpbmcyKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMz4gYWRhcHRl
cjMoc3RyaW5nMyk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTQ+IGFkYXB0ZXI0
KHN0cmluZzQpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU1PiBhZGFwdGVyNShz
dHJpbmc1KTsKLQotICAgIGJvb2wgb3ZlcmZsb3cgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBsZW5n
dGggPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFw
dGVyMi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFk
YXB0ZXIzLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwg
YWRhcHRlcjQubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3Ro
LCBhZGFwdGVyNS5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIGlmIChvdmVyZmxvdykKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoYWRhcHRlcjEuaXM4Qml0KCkgJiYgYWRhcHRl
cjIuaXM4Qml0KCkgJiYgYWRhcHRlcjMuaXM4Qml0KCkgJiYgYWRhcHRlcjQuaXM4Qml0KCkgJiYg
YWRhcHRlcjUuaXM4Qml0KCkpIHsKLSAgICAgICAgTENoYXIqIGJ1ZmZlcjsKLSAgICAgICAgUmVm
UHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRp
YWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgTENoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsK
LSAgICAgICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRh
cHRlcjEubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICAg
ICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMy53cml0ZVRv
KHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsKLSAgICAgICAg
YWRhcHRlcjQud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVu
Z3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKLQotICAgICAgICByZXR1
cm4gV1RGOjptb3ZlKHJlc3VsdEltcGwpOworICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBpczhCaXQo
Y29uc3Qgc3RkOjp0dXBsZTxBZGFwdGVycy4uLj4mIHR1cGxlKQorICAgIHsKKyAgICAgICAgYXV0
byYgYWRhcHRlciA9IHN0ZDo6Z2V0PHNpemVvZi4uLihBZGFwdGVycykgLSBpbmRleD4odHVwbGUp
OworICAgICAgICByZXR1cm4gYWRhcHRlci5pczhCaXQoKSAmJiBTdHJpbmdBZGFwdGVyVHVwbGU8
aW5kZXggLSAxLCBBZGFwdGVycy4uLj46OmlzOEJpdCh0dXBsZSk7CiAgICAgfQogCi0gICAgVUNo
YXIqIGJ1ZmZlcjsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0lt
cGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghcmVz
dWx0SW1wbCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBVQ2hhciogcmVzdWx0ID0g
YnVmZmVyOwotICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRh
cHRlcjEubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3Vs
dCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0g
ICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVz
dWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjUud3Jp
dGVUbyhyZXN1bHQpOwotCi0gICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHRJbXBsKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBl
bmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5
cGU1LCB0eXBlbmFtZSBTdHJpbmdUeXBlNj4KLVJlZlB0cjxTdHJpbmdJbXBsPiB0cnlNYWtlU3Ry
aW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUz
IHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0cmlu
Z1R5cGU2IHN0cmluZzYpCi17Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTE+IGFk
YXB0ZXIxKHN0cmluZzEpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFw
dGVyMihzdHJpbmcyKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMz4gYWRhcHRl
cjMoc3RyaW5nMyk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTQ+IGFkYXB0ZXI0
KHN0cmluZzQpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU1PiBhZGFwdGVyNShz
dHJpbmc1KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNj4gYWRhcHRlcjYoc3Ry
aW5nNik7Ci0KLSAgICBib29sIG92ZXJmbG93ID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgbGVuZ3Ro
ID0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRl
cjIubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFw
dGVyMy5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFk
YXB0ZXI0Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwg
YWRhcHRlcjUubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3Ro
LCBhZGFwdGVyNi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIGlmIChvdmVyZmxvdykKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoYWRhcHRlcjEuaXM4Qml0KCkgJiYgYWRhcHRl
cjIuaXM4Qml0KCkgJiYgYWRhcHRlcjMuaXM4Qml0KCkgJiYgYWRhcHRlcjQuaXM4Qml0KCkgJiYg
YWRhcHRlcjUuaXM4Qml0KCkgJiYgYWRhcHRlcjYuaXM4Qml0KCkpIHsKLSAgICAgICAgTENoYXIq
IGJ1ZmZlcjsKLSAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJ
bXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAgaWYg
KCFyZXN1bHRJbXBsKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgTENo
YXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICAgICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwot
ICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIyLndy
aXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAg
ICAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVy
My5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICBy
ZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVz
dWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI1Lmxlbmd0aCgpOwotICAgICAgICBhZGFw
dGVyNi53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICAgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHRJ
bXBsKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyBpbmxpbmUgdm9pZCB3
cml0ZVRvKFQqIGJ1ZmZlciwgY29uc3Qgc3RkOjp0dXBsZTxBZGFwdGVycy4uLj4mIHR1cGxlKQor
ICAgIHsKKyAgICAgICAgYXV0byYgYWRhcHRlciA9IHN0ZDo6Z2V0PHNpemVvZi4uLihBZGFwdGVy
cykgLSBpbmRleD4odHVwbGUpOworICAgICAgICBhZGFwdGVyLndyaXRlVG8oYnVmZmVyKTsKKyAg
ICAgICAgU3RyaW5nQWRhcHRlclR1cGxlPGluZGV4IC0gMSwgQWRhcHRlcnMuLi4+Ojp3cml0ZVRv
KGJ1ZmZlciArIGFkYXB0ZXIubGVuZ3RoKCksIHR1cGxlKTsKICAgICB9CiAKLSAgICBVQ2hhciog
YnVmZmVyOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6
dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFyZXN1bHRJ
bXBsKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFVDaGFyKiByZXN1bHQgPSBidWZm
ZXI7Ci0gICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVy
MS5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9
IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAgICBy
ZXN1bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQp
OwotICAgIHJlc3VsdCArPSBhZGFwdGVyNC5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNS53cml0ZVRv
KHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI1Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI2
LndyaXRlVG8ocmVzdWx0KTsKLQotICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0SW1wbCk7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwg
dHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5cGU0LCB0eXBlbmFtZSBTdHJp
bmdUeXBlNSwgdHlwZW5hbWUgU3RyaW5nVHlwZTYsIHR5cGVuYW1lIFN0cmluZ1R5cGU3PgotUmVm
UHRyPFN0cmluZ0ltcGw+IHRyeU1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5n
VHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3RyaW5nNCwg
U3RyaW5nVHlwZTUgc3RyaW5nNSwgU3RyaW5nVHlwZTYgc3RyaW5nNiwgU3RyaW5nVHlwZTcgc3Ry
aW5nNykKLXsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3Ry
aW5nMSk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKHN0cmlu
ZzIpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUzPiBhZGFwdGVyMyhzdHJpbmcz
KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlND4gYWRhcHRlcjQoc3RyaW5nNCk7
Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTU+IGFkYXB0ZXI1KHN0cmluZzUpOwot
ICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU2PiBhZGFwdGVyNihzdHJpbmc2KTsKLSAg
ICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNz4gYWRhcHRlcjcoc3RyaW5nNyk7Ci0KLSAg
ICBib29sIG92ZXJmbG93ID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYWRhcHRlcjEu
bGVuZ3RoKCk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjIubGVuZ3RoKCks
IG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyMy5sZW5ndGgo
KSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI0Lmxlbmd0
aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjUubGVu
Z3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNi5s
ZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI3
Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgaWYgKG92ZXJmbG93KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGlmIChhZGFwdGVyMS5pczhCaXQoKSAmJiBhZGFwdGVyMi5pczhCaXQo
KSAmJiBhZGFwdGVyMy5pczhCaXQoKSAmJiBhZGFwdGVyNC5pczhCaXQoKSAmJiBhZGFwdGVyNS5p
czhCaXQoKSAmJiBhZGFwdGVyNi5pczhCaXQoKSAmJiBhZGFwdGVyNy5pczhCaXQoKSkgewotICAg
ICAgICBMQ2hhciogYnVmZmVyOwotICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1w
bCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwot
ICAgICAgICBpZiAoIXJlc3VsdEltcGwpCisgICAgc3RhdGljIGlubGluZSBSZWZQdHI8U3RyaW5n
SW1wbD4gY3JlYXRlU3RyaW5nKGNvbnN0IHN0ZDo6dHVwbGU8QWRhcHRlcnMuLi4+JiBhZGFwdGVy
cykKKyAgICB7CisgICAgICAgIGJvb2wgb3ZlcmZsb3cgPSBmYWxzZTsKKyAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gMDsKKyAgICAgICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgb3ZlcmZsb3cs
IGFkYXB0ZXJzKTsKKyAgICAgICAgaWYgKG92ZXJmbG93KQogICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICAgICAgTENoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICAgICAgYWRhcHRl
cjEud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7
Ci0gICAgICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFk
YXB0ZXIyLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAg
ICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjQud3JpdGVU
byhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3RoKCk7Ci0gICAgICAg
IGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI1Lmxl
bmd0aCgpOwotICAgICAgICBhZGFwdGVyNi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3Vs
dCArPSBhZGFwdGVyNi5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjcud3JpdGVUbyhyZXN1bHQp
OwotCi0gICAgICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0SW1wbCk7Ci0gICAgfQorICAgICAg
ICBpZiAoaXM4Qml0KGFkYXB0ZXJzKSkgeworICAgICAgICAgICAgTENoYXIqIGJ1ZmZlcjsKKyAg
ICAgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CisgICAgICAgICAgICBpZiAoIXJl
c3VsdEltcGwpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBVQ2hhciog
YnVmZmVyOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6
dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFyZXN1bHRJ
bXBsKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFVDaGFyKiByZXN1bHQgPSBidWZm
ZXI7Ci0gICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVy
MS5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9
IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAgICBy
ZXN1bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQp
OwotICAgIHJlc3VsdCArPSBhZGFwdGVyNC5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNS53cml0ZVRv
KHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI1Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI2
LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjYubGVuZ3RoKCk7Ci0gICAg
YWRhcHRlcjcud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHRJ
bXBsKTsKLX0KKyAgICAgICAgICAgIHdyaXRlVG8oYnVmZmVyLCBhZGFwdGVycyk7CisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0SW1wbDsKKyAgICAgICAgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBT
dHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0
eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTUsIHR5cGVuYW1lIFN0cmlu
Z1R5cGU2LCB0eXBlbmFtZSBTdHJpbmdUeXBlNywgdHlwZW5hbWUgU3RyaW5nVHlwZTg+Ci1SZWZQ
dHI8U3RyaW5nSW1wbD4gdHJ5TWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdU
eXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBT
dHJpbmdUeXBlNSBzdHJpbmc1LCBTdHJpbmdUeXBlNiBzdHJpbmc2LCBTdHJpbmdUeXBlNyBzdHJp
bmc3LCBTdHJpbmdUeXBlOCBzdHJpbmc4KQotewotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmlu
Z1R5cGUxPiBhZGFwdGVyMShzdHJpbmcxKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdU
eXBlMj4gYWRhcHRlcjIoc3RyaW5nMik7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlw
ZTM+IGFkYXB0ZXIzKHN0cmluZzMpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU0
PiBhZGFwdGVyNChzdHJpbmc0KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNT4g
YWRhcHRlcjUoc3RyaW5nNSk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTY+IGFk
YXB0ZXI2KHN0cmluZzYpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU3PiBhZGFw
dGVyNyhzdHJpbmc3KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlOD4gYWRhcHRl
cjgoc3RyaW5nOCk7Ci0KLSAgICBib29sIG92ZXJmbG93ID0gZmFsc2U7Ci0gICAgdW5zaWduZWQg
bGVuZ3RoID0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwg
YWRhcHRlcjIubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3Ro
LCBhZGFwdGVyMy5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5n
dGgsIGFkYXB0ZXI0Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxl
bmd0aCwgYWRhcHRlcjUubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3co
bGVuZ3RoLCBhZGFwdGVyNi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxv
dyhsZW5ndGgsIGFkYXB0ZXI3Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJm
bG93KGxlbmd0aCwgYWRhcHRlcjgubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBpZiAob3ZlcmZs
b3cpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGFkYXB0ZXIxLmlzOEJpdCgp
ICYmIGFkYXB0ZXIyLmlzOEJpdCgpICYmIGFkYXB0ZXIzLmlzOEJpdCgpICYmIGFkYXB0ZXI0Lmlz
OEJpdCgpICYmIGFkYXB0ZXI1LmlzOEJpdCgpICYmIGFkYXB0ZXI2LmlzOEJpdCgpICYmIGFkYXB0
ZXI3LmlzOEJpdCgpICYmIGFkYXB0ZXI4LmlzOEJpdCgpKSB7Ci0gICAgICAgIExDaGFyKiBidWZm
ZXI7CisgICAgICAgIFVDaGFyKiBidWZmZXI7CiAgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBy
ZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1
ZmZlcik7CiAgICAgICAgIGlmICghcmVzdWx0SW1wbCkKICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCi0gICAgICAgIExDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAgICAgIGFkYXB0ZXIx
LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwot
ICAgICAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFw
dGVyMi5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwotICAgICAg
ICByZXN1bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI0LndyaXRlVG8o
cmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI0Lmxlbmd0aCgpOwotICAgICAgICBh
ZGFwdGVyNS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNS5sZW5n
dGgoKTsKLSAgICAgICAgYWRhcHRlcjYud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQg
Kz0gYWRhcHRlcjYubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI3LndyaXRlVG8ocmVzdWx0KTsK
LSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI3Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyOC53
cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICAgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHRJbXBsKTsK
KyAgICAgICAgd3JpdGVUbyhidWZmZXIsIGFkYXB0ZXJzKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dEltcGw7CiAgICAgfQorfTsKIAotICAgIFVDaGFyKiBidWZmZXI7Ci0gICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxl
bmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgVUNoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICBhZGFwdGVyMS53cml0ZVRv
KHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIGFkYXB0ZXIy
LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAg
YWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgo
KTsKLSAgICBhZGFwdGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI0
Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0g
YWRhcHRlcjUubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjYud3JpdGVUbyhyZXN1bHQpOwotICAgIHJl
c3VsdCArPSBhZGFwdGVyNi5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNy53cml0ZVRvKHJlc3VsdCk7
Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI3Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI4LndyaXRlVG8o
cmVzdWx0KTsKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIEFkYXB0ZXJzPgorc3RydWN0IFN0cmluZ0Fk
YXB0ZXJUdXBsZTwwLCBBZGFwdGVycy4uLj4geworICAgIHN0YXRpYyB2b2lkIHN1bVdpdGhPdmVy
Zmxvdyh1bnNpZ25lZCYsIGJvb2wmLCBjb25zdCBzdGQ6OnR1cGxlPEFkYXB0ZXJzLi4uPiYpIHsg
fQorICAgIHN0YXRpYyBib29sIGlzOEJpdChjb25zdCBzdGQ6OnR1cGxlPEFkYXB0ZXJzLi4uPiYp
IHsgcmV0dXJuIHRydWU7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdm9pZCB3
cml0ZVRvKFQqLCBjb25zdCBzdGQ6OnR1cGxlPEFkYXB0ZXJzLi4uPiYpIHsgfQorfTsKIAotICAg
IHJldHVybiBXVEY6Om1vdmUocmVzdWx0SW1wbCk7Ci19Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
dXNpbmcgQWRhcHRlclR5cGUgPSBTdHJpbmdUeXBlQWRhcHRlcjx0eXBlbmFtZSBzdGQ6OmRlY2F5
PFQ+Ojp0eXBlPjsKIAotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0
cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQsIHR5
cGVuYW1lIFN0cmluZ1R5cGU1LCB0eXBlbmFtZSBTdHJpbmdUeXBlNiwgdHlwZW5hbWUgU3RyaW5n
VHlwZTcsIHR5cGVuYW1lIFN0cmluZ1R5cGU4LCB0eXBlbmFtZSBTdHJpbmdUeXBlOT4KLVJlZlB0
cjxTdHJpbmdJbXBsPiB0cnlNYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5
cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQsIFN0
cmluZ1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5cGU2IHN0cmluZzYsIFN0cmluZ1R5cGU3IHN0cmlu
ZzcsIFN0cmluZ1R5cGU4IHN0cmluZzgsIFN0cmluZ1R5cGU5IHN0cmluZzkpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lLi4uIFRzPgorUmVmUHRyPFN0cmluZ0lt
cGw+IHRyeU1ha2VTdHJpbmcoVDEmJiBzdHJpbmcxLCBUMiYmIHN0cmluZzIsIFRzJiYuLi4gc3Ry
aW5ncykKIHsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3Ry
aW5nMSk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKHN0cmlu
ZzIpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUzPiBhZGFwdGVyMyhzdHJpbmcz
KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlND4gYWRhcHRlcjQoc3RyaW5nNCk7
Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTU+IGFkYXB0ZXI1KHN0cmluZzUpOwot
ICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU2PiBhZGFwdGVyNihzdHJpbmc2KTsKLSAg
ICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNz4gYWRhcHRlcjcoc3RyaW5nNyk7Ci0gICAg
U3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTg+IGFkYXB0ZXI4KHN0cmluZzgpOwotICAgIFN0
cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU5PiBhZGFwdGVyOShzdHJpbmc5KTsKLQotICAgIGJv
b2wgb3ZlcmZsb3cgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhZGFwdGVyMS5sZW5n
dGgoKTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyMi5sZW5ndGgoKSwgb3Zl
cmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIzLmxlbmd0aCgpLCBv
dmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjQubGVuZ3RoKCks
IG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNS5sZW5ndGgo
KSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI2Lmxlbmd0
aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjcubGVu
Z3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyOC5s
ZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI5
Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgaWYgKG92ZXJmbG93KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGlmIChhZGFwdGVyMS5pczhCaXQoKSAmJiBhZGFwdGVyMi5pczhCaXQo
KSAmJiBhZGFwdGVyMy5pczhCaXQoKSAmJiBhZGFwdGVyNC5pczhCaXQoKSAmJiBhZGFwdGVyNS5p
czhCaXQoKSAmJiBhZGFwdGVyNi5pczhCaXQoKSAmJiBhZGFwdGVyNy5pczhCaXQoKSAmJiBhZGFw
dGVyOC5pczhCaXQoKSAmJiBhZGFwdGVyOS5pczhCaXQoKSkgewotICAgICAgICBMQ2hhciogYnVm
ZmVyOwotICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgICAgICBpZiAoIXJl
c3VsdEltcGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBMQ2hhciog
cmVzdWx0ID0gYnVmZmVyOwotICAgICAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAg
ICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjIud3JpdGVU
byhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAgICAg
IGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxl
bmd0aCgpOwotICAgICAgICBhZGFwdGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3Vs
dCArPSBhZGFwdGVyNC5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1bHQp
OwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjUubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI2
LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI2Lmxlbmd0aCgpOwot
ICAgICAgICBhZGFwdGVyNy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFw
dGVyNy5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjgud3JpdGVUbyhyZXN1bHQpOwotICAgICAg
ICByZXN1bHQgKz0gYWRhcHRlcjgubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI5LndyaXRlVG8o
cmVzdWx0KTsKLQotICAgICAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdEltcGwpOwotICAgIH0K
LQotICAgIFVDaGFyKiBidWZmZXI7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwg
PSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAg
ICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgVUNoYXIq
IHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVz
dWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsK
LSAgICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjMud3JpdGVUbyhy
ZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNC53
cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI0Lmxlbmd0aCgpOwotICAgIGFk
YXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjUubGVuZ3RoKCk7
Ci0gICAgYWRhcHRlcjYud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyNi5s
ZW5ndGgoKTsKLSAgICBhZGFwdGVyNy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFk
YXB0ZXI3Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI4LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1
bHQgKz0gYWRhcHRlcjgubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjkud3JpdGVUbyhyZXN1bHQpOwot
Ci0gICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHRJbXBsKTsKKyAgICBhdXRvIGFkYXB0ZXJzID0g
c3RkOjptYWtlX3R1cGxlKEFkYXB0ZXJUeXBlPFQxPihzdGQ6OmZvcndhcmQ8VDE+KHN0cmluZzEp
KSwgQWRhcHRlclR5cGU8VDI+KHN0ZDo6Zm9yd2FyZDxUMj4oc3RyaW5nMikpLCBBZGFwdGVyVHlw
ZTxUcz4oc3RkOjpmb3J3YXJkPFRzPihzdHJpbmdzKSkuLi4pOworICAgIHJldHVybiBTdHJpbmdB
ZGFwdGVyVHVwbGU8MiArIHNpemVvZi4uLihUcyksIEFkYXB0ZXJUeXBlPFQxPiwgQWRhcHRlclR5
cGU8VDI+LCBBZGFwdGVyVHlwZTxUcz4uLi4+OjpjcmVhdGVTdHJpbmcoYWRhcHRlcnMpOwogfQog
Ci0KIC8vIENvbnZlbmllbmNlIG9ubHkuCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMT4K
LVN0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEpCi17Ci0gICAgcmV0dXJuIFN0
cmluZyhzdHJpbmcxKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVu
YW1lIFN0cmluZ1R5cGUyPgotU3RyaW5nIG1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwg
U3RyaW5nVHlwZTIgc3RyaW5nMikKLXsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1w
bCA9IHRyeU1ha2VTdHJpbmcoc3RyaW5nMSwgc3RyaW5nMik7Ci0gICAgaWYgKCFyZXN1bHRJbXBs
KQotICAgICAgICBDUkFTSCgpOwotICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0SW1wbCk7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwg
dHlwZW5hbWUgU3RyaW5nVHlwZTM+Ci1TdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJp
bmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczKQordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK1N0cmluZyBtYWtlU3RyaW5nKFQmJiBzdHJpbmcxKQogewotICAgIFJlZlB0
cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gdHJ5TWFrZVN0cmluZyhzdHJpbmcxLCBzdHJpbmcy
LCBzdHJpbmczKTsKLSAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgIENSQVNIKCk7Ci0gICAg
cmV0dXJuIFdURjo6bW92ZShyZXN1bHRJbXBsKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgU3Ry
aW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlw
ZW5hbWUgU3RyaW5nVHlwZTQ+Ci1TdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcx
LCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBz
dHJpbmc0KQotewotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gdHJ5TWFrZVN0
cmluZyhzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczLCBzdHJpbmc0KTsKLSAgICBpZiAoIXJlc3Vs
dEltcGwpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHRJbXBs
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5
cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQsIHR5cGVuYW1l
IFN0cmluZ1R5cGU1PgotU3RyaW5nIG1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3Ry
aW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3RyaW5n
NCwgU3RyaW5nVHlwZTUgc3RyaW5nNSkKLXsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0
SW1wbCA9IHRyeU1ha2VTdHJpbmcoc3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMywgc3RyaW5nNCwg
c3RyaW5nNSk7Ci0gICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICBDUkFTSCgpOwotICAgIHJl
dHVybiBXVEY6Om1vdmUocmVzdWx0SW1wbCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmlu
Z1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVu
YW1lIFN0cmluZ1R5cGU0LCB0eXBlbmFtZSBTdHJpbmdUeXBlNSwgdHlwZW5hbWUgU3RyaW5nVHlw
ZTY+Ci1TdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBz
dHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBTdHJpbmdU
eXBlNSBzdHJpbmc1LCBTdHJpbmdUeXBlNiBzdHJpbmc2KQotewotICAgIFJlZlB0cjxTdHJpbmdJ
bXBsPiByZXN1bHRJbXBsID0gdHJ5TWFrZVN0cmluZyhzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmcz
LCBzdHJpbmc0LCBzdHJpbmc1LCBzdHJpbmc2KTsKLSAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAg
ICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHRJbXBsKTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFt
ZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1
LCB0eXBlbmFtZSBTdHJpbmdUeXBlNiwgdHlwZW5hbWUgU3RyaW5nVHlwZTc+Ci1TdHJpbmcgbWFr
ZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdU
eXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBTdHJpbmdUeXBlNSBzdHJpbmc1LCBT
dHJpbmdUeXBlNiBzdHJpbmc2LCBTdHJpbmdUeXBlNyBzdHJpbmc3KQotewotICAgIFJlZlB0cjxT
dHJpbmdJbXBsPiByZXN1bHRJbXBsID0gdHJ5TWFrZVN0cmluZyhzdHJpbmcxLCBzdHJpbmcyLCBz
dHJpbmczLCBzdHJpbmc0LCBzdHJpbmc1LCBzdHJpbmc2LCBzdHJpbmc3KTsKLSAgICBpZiAoIXJl
c3VsdEltcGwpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHRJ
bXBsKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmlu
Z1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQsIHR5cGVu
YW1lIFN0cmluZ1R5cGU1LCB0eXBlbmFtZSBTdHJpbmdUeXBlNiwgdHlwZW5hbWUgU3RyaW5nVHlw
ZTcsIHR5cGVuYW1lIFN0cmluZ1R5cGU4PgotU3RyaW5nIG1ha2VTdHJpbmcoU3RyaW5nVHlwZTEg
c3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5n
VHlwZTQgc3RyaW5nNCwgU3RyaW5nVHlwZTUgc3RyaW5nNSwgU3RyaW5nVHlwZTYgc3RyaW5nNiwg
U3RyaW5nVHlwZTcgc3RyaW5nNywgU3RyaW5nVHlwZTggc3RyaW5nOCkKLXsKLSAgICBSZWZQdHI8
U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IHRyeU1ha2VTdHJpbmcoc3RyaW5nMSwgc3RyaW5nMiwg
c3RyaW5nMywgc3RyaW5nNCwgc3RyaW5nNSwgc3RyaW5nNiwgc3RyaW5nNywgc3RyaW5nOCk7Ci0g
ICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICBDUkFTSCgpOwotICAgIHJldHVybiBXVEY6Om1v
dmUocmVzdWx0SW1wbCk7CisgICAgcmV0dXJuIFN0cmluZyhzdGQ6OmZvcndhcmQ8VD4oc3RyaW5n
MSkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5n
VHlwZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5h
bWUgU3RyaW5nVHlwZTUsIHR5cGVuYW1lIFN0cmluZ1R5cGU2LCB0eXBlbmFtZSBTdHJpbmdUeXBl
NywgdHlwZW5hbWUgU3RyaW5nVHlwZTgsIHR5cGVuYW1lIFN0cmluZ1R5cGU5PgotU3RyaW5nIG1h
a2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5n
VHlwZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3RyaW5nNCwgU3RyaW5nVHlwZTUgc3RyaW5nNSwg
U3RyaW5nVHlwZTYgc3RyaW5nNiwgU3RyaW5nVHlwZTcgc3RyaW5nNywgU3RyaW5nVHlwZTggc3Ry
aW5nOCwgU3RyaW5nVHlwZTkgc3RyaW5nOSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFt
ZSBUMiwgdHlwZW5hbWUuLi4gVHM+CitTdHJpbmcgbWFrZVN0cmluZyhUMSYmIHN0cmluZzEsIFQy
JiYgc3RyaW5nMiwgVHMmJi4uLiBzdHJpbmdzKQogewotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBy
ZXN1bHRJbXBsID0gdHJ5TWFrZVN0cmluZyhzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczLCBzdHJp
bmc0LCBzdHJpbmc1LCBzdHJpbmc2LCBzdHJpbmc3LCBzdHJpbmc4LCBzdHJpbmc5KTsKKyAgICBS
ZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IHRyeU1ha2VTdHJpbmcoc3RkOjpmb3J3YXJk
PFQxPihzdHJpbmcxKSwgc3RkOjpmb3J3YXJkPFQyPihzdHJpbmcyKSwgc3RkOjpmb3J3YXJkPFRz
PihzdHJpbmdzKS4uLik7CiAgICAgaWYgKCFyZXN1bHRJbXBsKQogICAgICAgICBDUkFTSCgpOwog
ICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0SW1wbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ09wZXJhdG9ycy5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdP
cGVyYXRvcnMuaAppbmRleCBjZmQyZjZkNmNhY2NkMTY4NjUyNWE4N2VhNjgyMmQ3YjQwM2NiOTUw
Li45MWQwNzRjMGI4ZWQ2YTQxZDhkODBlODQyMGJjZjI1MjgwY2IwYzg2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ09wZXJhdG9ycy5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nT3BlcmF0b3JzLmgKQEAgLTI0LDIxICsyNCwyMCBAQAogCiBuYW1lc3BhY2Ug
V1RGIHsKIAotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5
cGUyPgordGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgogY2xhc3MgU3RyaW5nQXBw
ZW5kIHsKIHB1YmxpYzoKLSAgICBTdHJpbmdBcHBlbmQoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3Ry
aW5nVHlwZTIgc3RyaW5nMikKLSAgICAgICAgOiBtX3N0cmluZzEoc3RyaW5nMSkKLSAgICAgICAg
LCBtX3N0cmluZzIoc3RyaW5nMikKKyAgICBTdHJpbmdBcHBlbmQoY29uc3QgVDEmIHN0cmluZzEs
IGNvbnN0IFQyJiBzdHJpbmcyKQorICAgICAgICA6IG1fdHVwbGUoc3RkOjptYWtlX3R1cGxlKEFk
YXB0ZXJUeXBlPFQxPihzdHJpbmcxKSwgQWRhcHRlclR5cGU8VDI+KHN0cmluZzIpKSkKICAgICB7
CiAgICAgfQogCiAgICAgb3BlcmF0b3IgU3RyaW5nKCkgY29uc3QKICAgICB7Ci0gICAgICAgIFJl
ZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gdHJ5TWFrZVN0cmluZyhtX3N0cmluZzEsIG1f
c3RyaW5nMik7CisgICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5n
QWRhcHRlclR1cGxlPDIsIEFkYXB0ZXJUeXBlPFQxPiwgQWRhcHRlclR5cGU8VDI+Pjo6Y3JlYXRl
U3RyaW5nKG1fdHVwbGUpOwogICAgICAgICBpZiAoIXJlc3VsdEltcGwpCiAgICAgICAgICAgICBD
UkFTSCgpOwotICAgICAgICByZXR1cm4gcmVzdWx0SW1wbC5yZWxlYXNlKCk7CisgICAgICAgIHJl
dHVybiBXVEY6Om1vdmUocmVzdWx0SW1wbCk7CiAgICAgfQogCiAgICAgb3BlcmF0b3IgQXRvbWlj
U3RyaW5nKCkgY29uc3QKQEAgLTQ2LDU5ICs0NSw1MiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBvcGVyYXRvciBTdHJpbmcoKTsKICAgICB9CiAKLSAgICBib29sIGlzOEJpdCgpCisgICAgYm9v
bCBpczhCaXQoKSBjb25zdAogICAgIHsKLSAgICAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5n
VHlwZTE+IGFkYXB0ZXIxKG1fc3RyaW5nMSk7Ci0gICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0
cmluZ1R5cGUyPiBhZGFwdGVyMihtX3N0cmluZzIpOwotICAgICAgICByZXR1cm4gYWRhcHRlcjEu
aXM4Qml0KCkgJiYgYWRhcHRlcjIuaXM4Qml0KCk7CisgICAgICAgIHJldHVybiBzdHJpbmcxKCku
aXM4Qml0KCkgJiYgc3RyaW5nMigpLmlzOEJpdCgpOwogICAgIH0KIAotICAgIHZvaWQgd3JpdGVU
byhMQ2hhciogZGVzdGluYXRpb24pCisgICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlv
bikgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChpczhCaXQoKSk7Ci0gICAgICAgIFN0cmlu
Z1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBhZGFwdGVyMShtX3N0cmluZzEpOwotICAgICAgICBT
dHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRhcHRlcjIobV9zdHJpbmcyKTsKLSAgICAg
ICAgYWRhcHRlcjEud3JpdGVUbyhkZXN0aW5hdGlvbik7Ci0gICAgICAgIGFkYXB0ZXIyLndyaXRl
VG8oZGVzdGluYXRpb24gKyBhZGFwdGVyMS5sZW5ndGgoKSk7CisgICAgICAgIHN0cmluZzEoKS53
cml0ZVRvKGRlc3RpbmF0aW9uKTsKKyAgICAgICAgc3RyaW5nMigpLndyaXRlVG8oZGVzdGluYXRp
b24gKyBzdHJpbmcxKCkubGVuZ3RoKCkpOwogICAgIH0KIAotICAgIHZvaWQgd3JpdGVUbyhVQ2hh
ciogZGVzdGluYXRpb24pCisgICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikgY29u
c3QKICAgICB7Ci0gICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBhZGFwdGVy
MShtX3N0cmluZzEpOwotICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRh
cHRlcjIobV9zdHJpbmcyKTsKLSAgICAgICAgYWRhcHRlcjEud3JpdGVUbyhkZXN0aW5hdGlvbik7
Ci0gICAgICAgIGFkYXB0ZXIyLndyaXRlVG8oZGVzdGluYXRpb24gKyBhZGFwdGVyMS5sZW5ndGgo
KSk7CisgICAgICAgIHN0cmluZzEoKS53cml0ZVRvKGRlc3RpbmF0aW9uKTsKKyAgICAgICAgc3Ry
aW5nMigpLndyaXRlVG8oZGVzdGluYXRpb24gKyBzdHJpbmcxKCkubGVuZ3RoKCkpOwogICAgIH0K
IAotICAgIHVuc2lnbmVkIGxlbmd0aCgpCisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBhZGFwdGVyMShtX3N0
cmluZzEpOwotICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRhcHRlcjIo
bV9zdHJpbmcyKTsKLSAgICAgICAgcmV0dXJuIGFkYXB0ZXIxLmxlbmd0aCgpICsgYWRhcHRlcjIu
bGVuZ3RoKCk7CisgICAgICAgIHJldHVybiBzdHJpbmcxKCkubGVuZ3RoKCkgKyBzdHJpbmcyKCku
bGVuZ3RoKCk7CiAgICAgfSAgICAKIAogcHJpdmF0ZToKLSAgICBTdHJpbmdUeXBlMSBtX3N0cmlu
ZzE7Ci0gICAgU3RyaW5nVHlwZTIgbV9zdHJpbmcyOworICAgIHN0ZDo6dHVwbGU8QWRhcHRlclR5
cGU8VDE+LCBBZGFwdGVyVHlwZTxUMj4+IG1fdHVwbGU7CisgICAgY29uc3QgQWRhcHRlclR5cGU8
VDE+JiBzdHJpbmcxKCkgY29uc3QgeyByZXR1cm4gc3RkOjpnZXQ8MD4obV90dXBsZSk7IH0KKyAg
ICBjb25zdCBBZGFwdGVyVHlwZTxUMj4mIHN0cmluZzIoKSBjb25zdCB7IHJldHVybiBzdGQ6Omdl
dDwxPihtX3R1cGxlKTsgfQogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5
cGVuYW1lIFN0cmluZ1R5cGUyPgogY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nQXBwZW5k
PFN0cmluZ1R5cGUxLCBTdHJpbmdUeXBlMj4+IHsKIHB1YmxpYzoKLSAgICBTdHJpbmdUeXBlQWRh
cHRlcjxTdHJpbmdBcHBlbmQ8U3RyaW5nVHlwZTEsIFN0cmluZ1R5cGUyPj4oU3RyaW5nQXBwZW5k
PFN0cmluZ1R5cGUxLCBTdHJpbmdUeXBlMj4mIGJ1ZmZlcikKKyAgICBTdHJpbmdUeXBlQWRhcHRl
cjxTdHJpbmdBcHBlbmQ8U3RyaW5nVHlwZTEsIFN0cmluZ1R5cGUyPj4oY29uc3QgU3RyaW5nQXBw
ZW5kPFN0cmluZ1R5cGUxLCBTdHJpbmdUeXBlMj4mIGJ1ZmZlcikKICAgICAgICAgOiBtX2J1ZmZl
cihidWZmZXIpCiAgICAgewogICAgIH0KIAotICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJu
IG1fYnVmZmVyLmxlbmd0aCgpOyB9CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9idWZmZXIubGVuZ3RoKCk7IH0KIAotICAgIGJvb2wgaXM4Qml0KCkgeyByZXR1cm4gbV9i
dWZmZXIuaXM4Qml0KCk7IH0KKyAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIG1fYnVm
ZmVyLmlzOEJpdCgpOyB9CiAKLSAgICB2b2lkIHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0aW9uKSB7
IG1fYnVmZmVyLndyaXRlVG8oZGVzdGluYXRpb24pOyB9Ci0gICAgdm9pZCB3cml0ZVRvKFVDaGFy
KiBkZXN0aW5hdGlvbikgeyBtX2J1ZmZlci53cml0ZVRvKGRlc3RpbmF0aW9uKTsgfQorICAgIHZv
aWQgd3JpdGVUbyhMQ2hhciogZGVzdGluYXRpb24pIGNvbnN0IHsgbV9idWZmZXIud3JpdGVUbyhk
ZXN0aW5hdGlvbik7IH0KKyAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKSBjb25z
dCB7IG1fYnVmZmVyLndyaXRlVG8oZGVzdGluYXRpb24pOyB9CiAKIHByaXZhdGU6Ci0gICAgU3Ry
aW5nQXBwZW5kPFN0cmluZ1R5cGUxLCBTdHJpbmdUeXBlMj4mIG1fYnVmZmVyOworICAgIGNvbnN0
IFN0cmluZ0FwcGVuZDxTdHJpbmdUeXBlMSwgU3RyaW5nVHlwZTI+JiBtX2J1ZmZlcjsKIH07CiAK
IGlubGluZSBTdHJpbmdBcHBlbmQ8Y29uc3QgY2hhciosIFN0cmluZz4gb3BlcmF0b3IrKGNvbnN0
IGNoYXIqIHN0cmluZzEsIGNvbnN0IFN0cmluZyYgc3RyaW5nMikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257179</attachid>
            <date>2015-07-21 07:02:35 -0700</date>
            <delta_ts>2015-07-26 02:20:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147142-20150721160119.patch</filename>
            <type>text/plain</type>
            <size>31766</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3MTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDgwNzUxODAxM2NiODQ5NTdkMTU4YzI0
Y2U5ZTQwMjhjOWZlY2M3OWQuLjJkNWRiYzQxZGZmODM4NzU0YmFjZDZkZDczYjRlMDZlMjkyNGY3
OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTUtMDctMjEgIFphbiBEb2JlcnNlayAgPHpkb2Jl
cnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtXVEZdIFR1cm4gdHJ5TWFrZVN0cmluZygpLCBt
YWtlU3RyaW5nKCkgaW50byB2YXJpYWRpYyB0ZW1wbGF0ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzE0MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCB0cnlNYWtlU3RyaW5nKCkgYW5k
IG1ha2VTdHJpbmcoKSBhcyB2YXJpYWRpYyB0ZW1wbGF0ZXMsIHJlcGxhY2luZworICAgICAgICB0
aGUgYXJndW1lbnQgY291bnQtYmFzZWQgb3ZlcmxvYWRzLgorCisgICAgICAgIHRyeU1ha2VTdHJp
bmcoKSBub3cgY29uc3RydWN0cyBhIHN0YWNrLWJhc2VkIHR1cGxlIG9mIG5lY2Vzc2FyeSBTdHJp
bmdUeXBlQWRhcHRlcgorICAgICAgICBvYmplY3RzIGFuZCB1dGlsaXplcyB0aGUgU3RyaW5nQWRh
cHRlclR1cGxlIHN0cnVjdCB0ZW1wbGF0ZSB0byBvcGVyYXRlIG9uIHRoYXQKKyAgICAgICAgdHVw
bGUsIHJlY3Vyc2l2ZWx5IGNhbGxpbmcgdGhlIG5lY2Vzc2FyeSBvcGVyYXRpb25zIG9uIGVhY2gg
ZWxlbWVudCBpbiB0aGUgdHVwbGUuCisgICAgICAgIFRoaXMgZWZmZWN0aXZlbHkgbWltaWNzIHRo
ZSBwcm9jZXNzIG9mIHByZXZpb3VzIHRyeU1ha2VTdHJpbmcoKSBpbXBsZW1lbnRhdGlvbiwKKyAg
ICAgICAgYnV0IG1ha2VzIGl0IHNjYWxhYmxlIHRvIGEgdHVwbGUgb2YgZWxlbWVudHMgdGhhdCBh
cmUgdG8gYmUgY29uY2F0ZW5hdGVkLgorCisgICAgICAgIFN0cmluZ0FwcGVuZCBjbGFzcyB0ZW1w
bGF0ZSBub3cgc3RvcmVzIHR3byBTdHJpbmdUeXBlQWRhcHRlciBvYmplY3RzIGZvciB0aGUKKyAg
ICAgICAgdHdvIHBhc3NlZC1pbiBzdHJpbmcgb2JqZWN0cywgcGFja2VkIGluIGEgdHVwbGUsIGNh
bGxpbmcKKyAgICAgICAgU3RyaW5nQWRhcHRlclR1cGxlPD46OmNyZWF0ZVN0cmluZygpIGRpcmVj
dGx5IHdoZW4gY29uY2F0ZW5hdGluZyB0aGUgdHdvIG9iamVjdHMKKyAgICAgICAgaW50byBvbmUg
U3RyaW5nLgorCisgICAgICAgIFRoaXMgYWxzbyByZWR1Y2VzIHRoZSBzaXplIG9mIGdlbmVyYXRl
ZCBjb2RlLCBzaGF2aW5nIG9mZiBhIHRvdGFsIG9mIDc4a0Igb2ZmCisgICAgICAgIHNoYXJlZCBs
aWJyYXJpZXMgZm9yIHRoZSBHVEsgcG9ydCBvbiB4ODZfNjQuCisKKyAgICAgICAgKiB3dGYvdGV4
dC9TdHJpbmdDb25jYXRlbmF0ZS5oOgorICAgICAgICAoV1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxj
aGFyPjo6bGVuZ3RoKToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8Y2hhcj46Omlz
OEJpdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0FkYXB0ZXJUdXBsZTo6c3VtV2l0aE92ZXJmbG93
dyk6CisgICAgICAgIChXVEY6OlN0cmluZ0FkYXB0ZXJUdXBsZTo6aXM4Qml0KToKKyAgICAgICAg
KFdURjo6U3RyaW5nQWRhcHRlclR1cGxlOjp3cml0ZVRvKToKKyAgICAgICAgKFdURjo6U3RyaW5n
QWRhcHRlclR1cGxlOjpjcmVhdGVTdHJpbmcpOgorICAgICAgICAoV1RGOjp0cnlNYWtlU3RyaW5n
KToKKyAgICAgICAgKFdURjo6bWFrZVN0cmluZyk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5n
T3BlcmF0b3JzLmg6CisgICAgICAgIChXVEY6OlN0cmluZ0FwcGVuZDo6U3RyaW5nQXBwZW5kKToK
KyAgICAgICAgKFdURjo6U3RyaW5nQXBwZW5kOjpvcGVyYXRvciBTdHJpbmcpOgorICAgICAgICAo
V1RGOjpTdHJpbmdBcHBlbmQ6OmlzOEJpdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0FwcGVuZDo6
d3JpdGVUbyk6CisgICAgICAgIChXVEY6OlN0cmluZ0FwcGVuZDo6bGVuZ3RoKToKKyAgICAgICAg
KFdURjo6U3RyaW5nQXBwZW5kOjpzdHJpbmcxKToKKyAgICAgICAgKFdURjo6U3RyaW5nQXBwZW5k
OjpzdHJpbmcyKToKKwogMjAxNS0wNy0yMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+
CiAKICAgICAgICAgUm9sbG91dCByMTg3MDIwIGFuZCByMTg3MDIxOiBicmVha3MgSlNDIEFQSSB0
ZXN0cyBvbiBkZWJ1ZyBidWlsZHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ0NvbmNhdGVuYXRlLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRl
LmgKaW5kZXggOGNjNGI1OGUyMDUzM2ZhZjQxMzQyYWRhOGFmZDlhZjgxNjBhMDUwMy4uZmE4Zjdm
OTExZmU1MWE0YTM1MGY1MjcxOWRjOTA2Zjc2N2M4MTQ4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nQ29uY2F0ZW5hdGUuaApAQCAtNTUsOCArNTUsOCBAQCBwdWJsaWM6CiAgICAgewogICAg
IH0KIAotICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIDE7IH0KLSAgICBib29sIGlzOEJp
dCgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVy
biAxOyB9CisgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2
b2lkIHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAogICAgIHsKQEAgLTI1NSw1NjEg
KzI1NSw4NSBAQCBpbmxpbmUgdm9pZCBzdW1XaXRoT3ZlcmZsb3codW5zaWduZWQmIHRvdGFsLCB1
bnNpZ25lZCBhZGRlbmQsIGJvb2wmIG92ZXJmbG93KQogICAgICAgICBvdmVyZmxvdyA9IHRydWU7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBl
Mj4KLVJlZlB0cjxTdHJpbmdJbXBsPiB0cnlNYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEs
IFN0cmluZ1R5cGUyIHN0cmluZzIpCi17Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlw
ZTE+IGFkYXB0ZXIxKHN0cmluZzEpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUy
PiBhZGFwdGVyMihzdHJpbmcyKTsKLQotICAgIGJvb2wgb3ZlcmZsb3cgPSBmYWxzZTsKLSAgICB1
bnNpZ25lZCBsZW5ndGggPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBzdW1XaXRoT3ZlcmZsb3co
bGVuZ3RoLCBhZGFwdGVyMi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIGlmIChvdmVyZmxvdykK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoYWRhcHRlcjEuaXM4Qml0KCkgJiYg
YWRhcHRlcjIuaXM4Qml0KCkpIHsKLSAgICAgICAgTENoYXIqIGJ1ZmZlcjsKLSAgICAgICAgUmVm
UHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRp
YWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgTENoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsK
LSAgICAgICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRh
cHRlcjEubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLQotICAg
ICAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdEltcGwpOwotICAgIH0KLQotICAgIFVDaGFyKiBi
dWZmZXI7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0
cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIXJlc3VsdElt
cGwpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgVUNoYXIqIHJlc3VsdCA9IGJ1ZmZl
cjsKLSAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIx
Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLQotICAgIHJldHVybiBX
VEY6Om1vdmUocmVzdWx0SW1wbCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUx
LCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTM+Ci1SZWZQdHI8U3Ry
aW5nSW1wbD4gdHJ5TWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBz
dHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczKQotewotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0
cmluZ1R5cGUxPiBhZGFwdGVyMShzdHJpbmcxKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJp
bmdUeXBlMj4gYWRhcHRlcjIoc3RyaW5nMik7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5n
VHlwZTM+IGFkYXB0ZXIzKHN0cmluZzMpOwotCi0gICAgYm9vbCBvdmVyZmxvdyA9IGZhbHNlOwot
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIHN1bVdpdGhPdmVy
ZmxvdyhsZW5ndGgsIGFkYXB0ZXIyLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92
ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjMubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBpZiAob3Zl
cmZsb3cpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGFkYXB0ZXIxLmlzOEJp
dCgpICYmIGFkYXB0ZXIyLmlzOEJpdCgpICYmIGFkYXB0ZXIzLmlzOEJpdCgpKSB7Ci0gICAgICAg
IExDaGFyKiBidWZmZXI7Ci0gICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0g
U3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAg
ICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
ICAgIExDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVz
dWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgICAgICBhZGFw
dGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgo
KTsKLSAgICAgICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgICAgIHJldHVybiBX
VEY6Om1vdmUocmVzdWx0SW1wbCk7Ci0gICAgfQotCi0gICAgVUNoYXIqIGJ1ZmZlciA9IDA7Ci0g
ICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVV
bmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgVUNoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICBh
ZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgp
OwotICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjIu
bGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgcmV0dXJuIFdU
Rjo6bW92ZShyZXN1bHRJbXBsKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEs
IHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3Ry
aW5nVHlwZTQ+Ci1SZWZQdHI8U3RyaW5nSW1wbD4gdHJ5TWFrZVN0cmluZyhTdHJpbmdUeXBlMSBz
dHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdU
eXBlNCBzdHJpbmc0KQotewotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBhZGFw
dGVyMShzdHJpbmcxKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRhcHRl
cjIoc3RyaW5nMik7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTM+IGFkYXB0ZXIz
KHN0cmluZzMpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU0PiBhZGFwdGVyNChz
dHJpbmc0KTsKLQotICAgIGJvb2wgb3ZlcmZsb3cgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBsZW5n
dGggPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFw
dGVyMi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFk
YXB0ZXIzLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwg
YWRhcHRlcjQubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBpZiAob3ZlcmZsb3cpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGFkYXB0ZXIxLmlzOEJpdCgpICYmIGFkYXB0ZXIy
LmlzOEJpdCgpICYmIGFkYXB0ZXIzLmlzOEJpdCgpICYmIGFkYXB0ZXI0LmlzOEJpdCgpKSB7Ci0g
ICAgICAgIExDaGFyKiBidWZmZXI7Ci0gICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJ
bXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7
Ci0gICAgICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgICAgIExDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRl
VG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgICAg
ICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMi5s
ZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1
bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0
KTsKLQotICAgICAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdEltcGwpOwordGVtcGxhdGU8c2l6
ZV90IGluZGV4LCB0eXBlbmFtZS4uLiBBZGFwdGVycz4KK3N0cnVjdCBTdHJpbmdBZGFwdGVyVHVw
bGUgeworICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBzdW1XaXRoT3ZlcmZsb3codW5zaWduZWQmIHRv
dGFsLCBib29sJiBvdmVyZmxvdywgY29uc3Qgc3RkOjp0dXBsZTxBZGFwdGVycy4uLj4mIHR1cGxl
KQorICAgIHsKKyAgICAgICAgYXV0byYgYWRhcHRlciA9IHN0ZDo6Z2V0PHNpemVvZi4uLihBZGFw
dGVycykgLSBpbmRleD4odHVwbGUpOworICAgICAgICBXVEY6OnN1bVdpdGhPdmVyZmxvdyh0b3Rh
bCwgYWRhcHRlci5sZW5ndGgoKSwgb3ZlcmZsb3cpOworICAgICAgICBTdHJpbmdBZGFwdGVyVHVw
bGU8aW5kZXggLSAxLCBBZGFwdGVycy4uLj46OnN1bVdpdGhPdmVyZmxvdyh0b3RhbCwgb3ZlcmZs
b3csIHR1cGxlKTsKICAgICB9CiAKLSAgICBVQ2hhciogYnVmZmVyOwotICAgIFJlZlB0cjxTdHJp
bmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChs
ZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIFVDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAgYWRhcHRlcjEud3JpdGVU
byhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBhZGFwdGVy
Mi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAg
IGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjMubGVuZ3Ro
KCk7Ci0gICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgcmV0dXJuIFdURjo6bW92
ZShyZXN1bHRJbXBsKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVu
YW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlw
ZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1PgotUmVmUHRyPFN0cmluZ0ltcGw+IHRyeU1ha2VTdHJp
bmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMg
c3RyaW5nMywgU3RyaW5nVHlwZTQgc3RyaW5nNCwgU3RyaW5nVHlwZTUgc3RyaW5nNSkKLXsKLSAg
ICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3RyaW5nMSk7Ci0gICAg
U3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKHN0cmluZzIpOwotICAgIFN0
cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUzPiBhZGFwdGVyMyhzdHJpbmczKTsKLSAgICBTdHJp
bmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlND4gYWRhcHRlcjQoc3RyaW5nNCk7Ci0gICAgU3RyaW5n
VHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTU+IGFkYXB0ZXI1KHN0cmluZzUpOwotCi0gICAgYm9vbCBv
dmVyZmxvdyA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIxLmxlbmd0aCgp
OwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIyLmxlbmd0aCgpLCBvdmVyZmxv
dyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjMubGVuZ3RoKCksIG92ZXJm
bG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNC5sZW5ndGgoKSwgb3Zl
cmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI1Lmxlbmd0aCgpLCBv
dmVyZmxvdyk7Ci0gICAgaWYgKG92ZXJmbG93KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIGlmIChhZGFwdGVyMS5pczhCaXQoKSAmJiBhZGFwdGVyMi5pczhCaXQoKSAmJiBhZGFwdGVy
My5pczhCaXQoKSAmJiBhZGFwdGVyNC5pczhCaXQoKSAmJiBhZGFwdGVyNS5pczhCaXQoKSkgewot
ICAgICAgICBMQ2hhciogYnVmZmVyOwotICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0
SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIp
OwotICAgICAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgICAgICBMQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgICAgICBhZGFwdGVyMS53cml0
ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICAg
ICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjIu
bGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVz
dWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNC53cml0ZVRvKHJlc3Vs
dCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNC5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRl
cjUud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0SW1w
bCk7CisgICAgc3RhdGljIGlubGluZSBib29sIGlzOEJpdChjb25zdCBzdGQ6OnR1cGxlPEFkYXB0
ZXJzLi4uPiYgdHVwbGUpCisgICAgeworICAgICAgICBhdXRvJiBhZGFwdGVyID0gc3RkOjpnZXQ8
c2l6ZW9mLi4uKEFkYXB0ZXJzKSAtIGluZGV4Pih0dXBsZSk7CisgICAgICAgIHJldHVybiBhZGFw
dGVyLmlzOEJpdCgpICYmIFN0cmluZ0FkYXB0ZXJUdXBsZTxpbmRleCAtIDEsIEFkYXB0ZXJzLi4u
Pjo6aXM4Qml0KHR1cGxlKTsKICAgICB9CiAKLSAgICBVQ2hhciogYnVmZmVyOwotICAgIFJlZlB0
cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIFVDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAgYWRhcHRlcjEu
d3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBh
ZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgp
OwotICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjMu
bGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBh
ZGFwdGVyNC5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNS53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICBy
ZXR1cm4gV1RGOjptb3ZlKHJlc3VsdEltcGwpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJp
bmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBl
bmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTUsIHR5cGVuYW1lIFN0cmluZ1R5
cGU2PgotUmVmUHRyPFN0cmluZ0ltcGw+IHRyeU1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5n
MSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQg
c3RyaW5nNCwgU3RyaW5nVHlwZTUgc3RyaW5nNSwgU3RyaW5nVHlwZTYgc3RyaW5nNikKLXsKLSAg
ICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3RyaW5nMSk7Ci0gICAg
U3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKHN0cmluZzIpOwotICAgIFN0
cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUzPiBhZGFwdGVyMyhzdHJpbmczKTsKLSAgICBTdHJp
bmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlND4gYWRhcHRlcjQoc3RyaW5nNCk7Ci0gICAgU3RyaW5n
VHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTU+IGFkYXB0ZXI1KHN0cmluZzUpOwotICAgIFN0cmluZ1R5
cGVBZGFwdGVyPFN0cmluZ1R5cGU2PiBhZGFwdGVyNihzdHJpbmc2KTsKLQotICAgIGJvb2wgb3Zl
cmZsb3cgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhZGFwdGVyMS5sZW5ndGgoKTsK
LSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyMi5sZW5ndGgoKSwgb3ZlcmZsb3cp
OwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIzLmxlbmd0aCgpLCBvdmVyZmxv
dyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjQubGVuZ3RoKCksIG92ZXJm
bG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNS5sZW5ndGgoKSwgb3Zl
cmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI2Lmxlbmd0aCgpLCBv
dmVyZmxvdyk7Ci0gICAgaWYgKG92ZXJmbG93KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIGlmIChhZGFwdGVyMS5pczhCaXQoKSAmJiBhZGFwdGVyMi5pczhCaXQoKSAmJiBhZGFwdGVy
My5pczhCaXQoKSAmJiBhZGFwdGVyNC5pczhCaXQoKSAmJiBhZGFwdGVyNS5pczhCaXQoKSAmJiBh
ZGFwdGVyNi5pczhCaXQoKSkgewotICAgICAgICBMQ2hhciogYnVmZmVyOwotICAgICAgICBSZWZQ
dHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlh
bGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgICAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBMQ2hhciogcmVzdWx0ID0gYnVmZmVyOwot
ICAgICAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFw
dGVyMS5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgICAg
ICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIzLndyaXRlVG8o
cmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgICAgICBh
ZGFwdGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNC5sZW5n
dGgoKTsKLSAgICAgICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQg
Kz0gYWRhcHRlcjUubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI2LndyaXRlVG8ocmVzdWx0KTsK
LQotICAgICAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdEltcGwpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgc3RhdGljIGlubGluZSB2b2lkIHdyaXRlVG8oVCogYnVmZmVyLCBjb25z
dCBzdGQ6OnR1cGxlPEFkYXB0ZXJzLi4uPiYgdHVwbGUpCisgICAgeworICAgICAgICBhdXRvJiBh
ZGFwdGVyID0gc3RkOjpnZXQ8c2l6ZW9mLi4uKEFkYXB0ZXJzKSAtIGluZGV4Pih0dXBsZSk7Cisg
ICAgICAgIGFkYXB0ZXIud3JpdGVUbyhidWZmZXIpOworICAgICAgICBTdHJpbmdBZGFwdGVyVHVw
bGU8aW5kZXggLSAxLCBBZGFwdGVycy4uLj46OndyaXRlVG8oYnVmZmVyICsgYWRhcHRlci5sZW5n
dGgoKSwgdHVwbGUpOwogICAgIH0KIAotICAgIFVDaGFyKiBidWZmZXI7Ci0gICAgUmVmUHRyPFN0
cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVk
KGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgVUNoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICBhZGFwdGVyMS53cml0
ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIGFkYXB0
ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0g
ICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5n
dGgoKTsKLSAgICBhZGFwdGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0
ZXI0Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQg
Kz0gYWRhcHRlcjUubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjYud3JpdGVUbyhyZXN1bHQpOwotCi0g
ICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHRJbXBsKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
U3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywg
dHlwZW5hbWUgU3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1LCB0eXBlbmFtZSBTdHJp
bmdUeXBlNiwgdHlwZW5hbWUgU3RyaW5nVHlwZTc+Ci1SZWZQdHI8U3RyaW5nSW1wbD4gdHJ5TWFr
ZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdU
eXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBTdHJpbmdUeXBlNSBzdHJpbmc1LCBT
dHJpbmdUeXBlNiBzdHJpbmc2LCBTdHJpbmdUeXBlNyBzdHJpbmc3KQotewotICAgIFN0cmluZ1R5
cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBhZGFwdGVyMShzdHJpbmcxKTsKLSAgICBTdHJpbmdUeXBl
QWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRhcHRlcjIoc3RyaW5nMik7Ci0gICAgU3RyaW5nVHlwZUFk
YXB0ZXI8U3RyaW5nVHlwZTM+IGFkYXB0ZXIzKHN0cmluZzMpOwotICAgIFN0cmluZ1R5cGVBZGFw
dGVyPFN0cmluZ1R5cGU0PiBhZGFwdGVyNChzdHJpbmc0KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRl
cjxTdHJpbmdUeXBlNT4gYWRhcHRlcjUoc3RyaW5nNSk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8
U3RyaW5nVHlwZTY+IGFkYXB0ZXI2KHN0cmluZzYpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0
cmluZ1R5cGU3PiBhZGFwdGVyNyhzdHJpbmc3KTsKLQotICAgIGJvb2wgb3ZlcmZsb3cgPSBmYWxz
ZTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBzdW1XaXRo
T3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyMi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdp
dGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIzLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3Vt
V2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjQubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBz
dW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNS5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAg
IHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI2Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0g
ICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjcubGVuZ3RoKCksIG92ZXJmbG93KTsK
LSAgICBpZiAob3ZlcmZsb3cpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGFk
YXB0ZXIxLmlzOEJpdCgpICYmIGFkYXB0ZXIyLmlzOEJpdCgpICYmIGFkYXB0ZXIzLmlzOEJpdCgp
ICYmIGFkYXB0ZXI0LmlzOEJpdCgpICYmIGFkYXB0ZXI1LmlzOEJpdCgpICYmIGFkYXB0ZXI2Lmlz
OEJpdCgpICYmIGFkYXB0ZXI3LmlzOEJpdCgpKSB7Ci0gICAgICAgIExDaGFyKiBidWZmZXI7Ci0g
ICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgICAgIGlmICghcmVzdWx0SW1w
bCkKKyAgICBzdGF0aWMgaW5saW5lIFJlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGVTdHJpbmcoY29u
c3Qgc3RkOjp0dXBsZTxBZGFwdGVycy4uLj4mIGFkYXB0ZXJzKQorICAgIHsKKyAgICAgICAgYm9v
bCBvdmVyZmxvdyA9IGZhbHNlOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSAwOworICAgICAg
ICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBvdmVyZmxvdywgYWRhcHRlcnMpOworICAgICAgICBp
ZiAob3ZlcmZsb3cpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBMQ2hh
ciogcmVzdWx0ID0gYnVmZmVyOwotICAgICAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0g
ICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjIud3Jp
dGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAg
ICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIz
Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJl
c3VsdCArPSBhZGFwdGVyNC5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1
bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjUubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0
ZXI2LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI2Lmxlbmd0aCgp
OwotICAgICAgICBhZGFwdGVyNy53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICAgICAgcmV0dXJuIFdU
Rjo6bW92ZShyZXN1bHRJbXBsKTsKLSAgICB9CisgICAgICAgIGlmIChpczhCaXQoYWRhcHRlcnMp
KSB7CisgICAgICAgICAgICBMQ2hhciogYnVmZmVyOworICAgICAgICAgICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxl
bmd0aCwgYnVmZmVyKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0SW1wbCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFVDaGFyKiBidWZmZXI7Ci0gICAgUmVmUHRyPFN0
cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVk
KGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgVUNoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICBhZGFwdGVyMS53cml0
ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIGFkYXB0
ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0g
ICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5n
dGgoKTsKLSAgICBhZGFwdGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0
ZXI0Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQg
Kz0gYWRhcHRlcjUubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjYud3JpdGVUbyhyZXN1bHQpOwotICAg
IHJlc3VsdCArPSBhZGFwdGVyNi5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNy53cml0ZVRvKHJlc3Vs
dCk7Ci0KLSAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdEltcGwpOwotfQorICAgICAgICAgICAg
d3JpdGVUbyhidWZmZXIsIGFkYXB0ZXJzKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHRJbXBs
OworICAgICAgICB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBT
dHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5cGU0LCB0
eXBlbmFtZSBTdHJpbmdUeXBlNSwgdHlwZW5hbWUgU3RyaW5nVHlwZTYsIHR5cGVuYW1lIFN0cmlu
Z1R5cGU3LCB0eXBlbmFtZSBTdHJpbmdUeXBlOD4KLVJlZlB0cjxTdHJpbmdJbXBsPiB0cnlNYWtl
U3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5
cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0
cmluZ1R5cGU2IHN0cmluZzYsIFN0cmluZ1R5cGU3IHN0cmluZzcsIFN0cmluZ1R5cGU4IHN0cmlu
ZzgpCi17Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTE+IGFkYXB0ZXIxKHN0cmlu
ZzEpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFwdGVyMihzdHJpbmcy
KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMz4gYWRhcHRlcjMoc3RyaW5nMyk7
Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTQ+IGFkYXB0ZXI0KHN0cmluZzQpOwot
ICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU1PiBhZGFwdGVyNShzdHJpbmc1KTsKLSAg
ICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNj4gYWRhcHRlcjYoc3RyaW5nNik7Ci0gICAg
U3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTc+IGFkYXB0ZXI3KHN0cmluZzcpOwotICAgIFN0
cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU4PiBhZGFwdGVyOChzdHJpbmc4KTsKLQotICAgIGJv
b2wgb3ZlcmZsb3cgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhZGFwdGVyMS5sZW5n
dGgoKTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyMi5sZW5ndGgoKSwgb3Zl
cmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIzLmxlbmd0aCgpLCBv
dmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjQubGVuZ3RoKCks
IG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNS5sZW5ndGgo
KSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI2Lmxlbmd0
aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjcubGVu
Z3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyOC5s
ZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIGlmIChvdmVyZmxvdykKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBpZiAoYWRhcHRlcjEuaXM4Qml0KCkgJiYgYWRhcHRlcjIuaXM4Qml0KCkg
JiYgYWRhcHRlcjMuaXM4Qml0KCkgJiYgYWRhcHRlcjQuaXM4Qml0KCkgJiYgYWRhcHRlcjUuaXM4
Qml0KCkgJiYgYWRhcHRlcjYuaXM4Qml0KCkgJiYgYWRhcHRlcjcuaXM4Qml0KCkgJiYgYWRhcHRl
cjguaXM4Qml0KCkpIHsKLSAgICAgICAgTENoYXIqIGJ1ZmZlcjsKKyAgICAgICAgVUNoYXIqIGJ1
ZmZlcjsKICAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBs
Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKICAgICAgICAgaWYgKCFy
ZXN1bHRJbXBsKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgTENoYXIq
IHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICAgICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAg
ICAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIyLndyaXRl
VG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgICAg
ICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMy5s
ZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1
bHQgKz0gYWRhcHRlcjQubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0
KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI1Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVy
Ni53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNi5sZW5ndGgoKTsK
LSAgICAgICAgYWRhcHRlcjcud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRh
cHRlcjcubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI4LndyaXRlVG8ocmVzdWx0KTsKLQotICAg
ICAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdEltcGwpOworICAgICAgICB3cml0ZVRvKGJ1ZmZl
ciwgYWRhcHRlcnMpOworICAgICAgICByZXR1cm4gcmVzdWx0SW1wbDsKICAgICB9Cit9OwogCi0g
ICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0
cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlm
ICghcmVzdWx0SW1wbCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBVQ2hhciogcmVz
dWx0ID0gYnVmZmVyOwotICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQg
Kz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAg
IHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3Vs
dCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgIGFkYXB0ZXI0LndyaXRl
VG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3RoKCk7Ci0gICAgYWRhcHRl
cjUud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyNS5sZW5ndGgoKTsKLSAg
ICBhZGFwdGVyNi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI2Lmxlbmd0
aCgpOwotICAgIGFkYXB0ZXI3LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRl
cjcubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjgud3JpdGVUbyhyZXN1bHQpOwordGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQWRhcHRlcnM+CitzdHJ1Y3QgU3RyaW5nQWRhcHRlclR1cGxlPDAsIEFkYXB0ZXJz
Li4uPiB7CisgICAgc3RhdGljIHZvaWQgc3VtV2l0aE92ZXJmbG93KHVuc2lnbmVkJiwgYm9vbCYs
IGNvbnN0IHN0ZDo6dHVwbGU8QWRhcHRlcnMuLi4+JikgeyB9CisgICAgc3RhdGljIGJvb2wgaXM4
Qml0KGNvbnN0IHN0ZDo6dHVwbGU8QWRhcHRlcnMuLi4+JikgeyByZXR1cm4gdHJ1ZTsgfQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIHdyaXRlVG8oVCosIGNvbnN0IHN0ZDo6
dHVwbGU8QWRhcHRlcnMuLi4+JikgeyB9Cit9OwogCi0gICAgcmV0dXJuIFdURjo6bW92ZShyZXN1
bHRJbXBsKTsKLX0KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit1c2luZyBBZGFwdGVyVHlwZSA9IFN0
cmluZ1R5cGVBZGFwdGVyPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGU+OwogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0
cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTUsIHR5
cGVuYW1lIFN0cmluZ1R5cGU2LCB0eXBlbmFtZSBTdHJpbmdUeXBlNywgdHlwZW5hbWUgU3RyaW5n
VHlwZTgsIHR5cGVuYW1lIFN0cmluZ1R5cGU5PgotUmVmUHRyPFN0cmluZ0ltcGw+IHRyeU1ha2VT
dHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlw
ZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3RyaW5nNCwgU3RyaW5nVHlwZTUgc3RyaW5nNSwgU3Ry
aW5nVHlwZTYgc3RyaW5nNiwgU3RyaW5nVHlwZTcgc3RyaW5nNywgU3RyaW5nVHlwZTggc3RyaW5n
OCwgU3RyaW5nVHlwZTkgc3RyaW5nOSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBU
MiwgdHlwZW5hbWUuLi4gVHM+CitSZWZQdHI8U3RyaW5nSW1wbD4gdHJ5TWFrZVN0cmluZyhUMSYm
IHN0cmluZzEsIFQyJiYgc3RyaW5nMiwgVHMmJi4uLiBzdHJpbmdzKQogewotICAgIFN0cmluZ1R5
cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBhZGFwdGVyMShzdHJpbmcxKTsKLSAgICBTdHJpbmdUeXBl
QWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRhcHRlcjIoc3RyaW5nMik7Ci0gICAgU3RyaW5nVHlwZUFk
YXB0ZXI8U3RyaW5nVHlwZTM+IGFkYXB0ZXIzKHN0cmluZzMpOwotICAgIFN0cmluZ1R5cGVBZGFw
dGVyPFN0cmluZ1R5cGU0PiBhZGFwdGVyNChzdHJpbmc0KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRl
cjxTdHJpbmdUeXBlNT4gYWRhcHRlcjUoc3RyaW5nNSk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8
U3RyaW5nVHlwZTY+IGFkYXB0ZXI2KHN0cmluZzYpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0
cmluZ1R5cGU3PiBhZGFwdGVyNyhzdHJpbmc3KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJp
bmdUeXBlOD4gYWRhcHRlcjgoc3RyaW5nOCk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5n
VHlwZTk+IGFkYXB0ZXI5KHN0cmluZzkpOwotCi0gICAgYm9vbCBvdmVyZmxvdyA9IGZhbHNlOwot
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIHN1bVdpdGhPdmVy
ZmxvdyhsZW5ndGgsIGFkYXB0ZXIyLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92
ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjMubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRo
T3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNC5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdp
dGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI1Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3Vt
V2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjYubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBz
dW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNy5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAg
IHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI4Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0g
ICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjkubGVuZ3RoKCksIG92ZXJmbG93KTsK
LSAgICBpZiAob3ZlcmZsb3cpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGFk
YXB0ZXIxLmlzOEJpdCgpICYmIGFkYXB0ZXIyLmlzOEJpdCgpICYmIGFkYXB0ZXIzLmlzOEJpdCgp
ICYmIGFkYXB0ZXI0LmlzOEJpdCgpICYmIGFkYXB0ZXI1LmlzOEJpdCgpICYmIGFkYXB0ZXI2Lmlz
OEJpdCgpICYmIGFkYXB0ZXI3LmlzOEJpdCgpICYmIGFkYXB0ZXI4LmlzOEJpdCgpICYmIGFkYXB0
ZXI5LmlzOEJpdCgpKSB7Ci0gICAgICAgIExDaGFyKiBidWZmZXI7Ci0gICAgICAgIFJlZlB0cjxT
dHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgICAgIExDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAg
ICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIx
Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJl
c3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1
bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0
ZXI0LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI0Lmxlbmd0aCgp
OwotICAgICAgICBhZGFwdGVyNS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBh
ZGFwdGVyNS5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjYud3JpdGVUbyhyZXN1bHQpOwotICAg
ICAgICByZXN1bHQgKz0gYWRhcHRlcjYubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI3LndyaXRl
VG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI3Lmxlbmd0aCgpOwotICAgICAg
ICBhZGFwdGVyOC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyOC5s
ZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjkud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgICAgIHJl
dHVybiBXVEY6Om1vdmUocmVzdWx0SW1wbCk7Ci0gICAgfQotCi0gICAgVUNoYXIqIGJ1ZmZlcjsK
LSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0
ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBVQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAg
IGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3Ro
KCk7Ci0gICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVy
Mi5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9
IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKLSAgICBy
ZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1bHQp
OwotICAgIHJlc3VsdCArPSBhZGFwdGVyNS5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNi53cml0ZVRv
KHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI2Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI3
LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjcubGVuZ3RoKCk7Ci0gICAg
YWRhcHRlcjgud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyOC5sZW5ndGgo
KTsKLSAgICBhZGFwdGVyOS53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gV1RGOjptb3Zl
KHJlc3VsdEltcGwpOworICAgIGF1dG8gYWRhcHRlcnMgPSBzdGQ6Om1ha2VfdHVwbGUoQWRhcHRl
clR5cGU8VDE+KHN0ZDo6Zm9yd2FyZDxUMT4oc3RyaW5nMSkpLCBBZGFwdGVyVHlwZTxUMj4oc3Rk
Ojpmb3J3YXJkPFQyPihzdHJpbmcyKSksIEFkYXB0ZXJUeXBlPFRzPihzdGQ6OmZvcndhcmQ8VHM+
KHN0cmluZ3MpKS4uLik7CisgICAgcmV0dXJuIFN0cmluZ0FkYXB0ZXJUdXBsZTwyICsgc2l6ZW9m
Li4uKFRzKSwgQWRhcHRlclR5cGU8VDE+LCBBZGFwdGVyVHlwZTxUMj4sIEFkYXB0ZXJUeXBlPFRz
Pi4uLj46OmNyZWF0ZVN0cmluZyhhZGFwdGVycyk7CiB9CiAKLQogLy8gQ29udmVuaWVuY2Ugb25s
eS4KLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxPgotU3RyaW5nIG1ha2VTdHJpbmcoU3Ry
aW5nVHlwZTEgc3RyaW5nMSkKLXsKLSAgICByZXR1cm4gU3RyaW5nKHN0cmluZzEpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTI+Ci1TdHJp
bmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyKQot
ewotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gdHJ5TWFrZVN0cmluZyhzdHJp
bmcxLCBzdHJpbmcyKTsKLSAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgIENSQVNIKCk7Ci0g
ICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHRJbXBsKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
U3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMz4K
LVN0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmlu
ZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorU3RyaW5nIG1h
a2VTdHJpbmcoVCYmIHN0cmluZzEpCiB7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdElt
cGwgPSB0cnlNYWtlU3RyaW5nKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMpOwotICAgIGlmICgh
cmVzdWx0SW1wbCkKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3Vs
dEltcGwpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3Ry
aW5nVHlwZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlND4KLVN0
cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIs
IFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQpCi17Ci0gICAgUmVmUHRy
PFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSB0cnlNYWtlU3RyaW5nKHN0cmluZzEsIHN0cmluZzIs
IHN0cmluZzMsIHN0cmluZzQpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgQ1JBU0go
KTsKLSAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdEltcGwpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmluZ1R5
cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTU+Ci1TdHJpbmcg
bWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJp
bmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBTdHJpbmdUeXBlNSBzdHJpbmc1
KQotewotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gdHJ5TWFrZVN0cmluZyhz
dHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczLCBzdHJpbmc0LCBzdHJpbmc1KTsKLSAgICBpZiAoIXJl
c3VsdEltcGwpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHRJ
bXBsKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmlu
Z1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQsIHR5cGVu
YW1lIFN0cmluZ1R5cGU1LCB0eXBlbmFtZSBTdHJpbmdUeXBlNj4KLVN0cmluZyBtYWtlU3RyaW5n
KFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0
cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5
cGU2IHN0cmluZzYpCi17Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSB0cnlN
YWtlU3RyaW5nKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMsIHN0cmluZzQsIHN0cmluZzUsIHN0
cmluZzYpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1
cm4gV1RGOjptb3ZlKHJlc3VsdEltcGwpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdU
eXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFt
ZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTUsIHR5cGVuYW1lIFN0cmluZ1R5cGU2
LCB0eXBlbmFtZSBTdHJpbmdUeXBlNz4KLVN0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0
cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5
cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5cGU2IHN0cmluZzYsIFN0
cmluZ1R5cGU3IHN0cmluZzcpCi17Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwg
PSB0cnlNYWtlU3RyaW5nKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMsIHN0cmluZzQsIHN0cmlu
ZzUsIHN0cmluZzYsIHN0cmluZzcpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgQ1JB
U0goKTsKLSAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdEltcGwpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmlu
Z1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTUsIHR5cGVu
YW1lIFN0cmluZ1R5cGU2LCB0eXBlbmFtZSBTdHJpbmdUeXBlNywgdHlwZW5hbWUgU3RyaW5nVHlw
ZTg+Ci1TdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBz
dHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBTdHJpbmdU
eXBlNSBzdHJpbmc1LCBTdHJpbmdUeXBlNiBzdHJpbmc2LCBTdHJpbmdUeXBlNyBzdHJpbmc3LCBT
dHJpbmdUeXBlOCBzdHJpbmc4KQotewotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBs
ID0gdHJ5TWFrZVN0cmluZyhzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczLCBzdHJpbmc0LCBzdHJp
bmc1LCBzdHJpbmc2LCBzdHJpbmc3LCBzdHJpbmc4KTsKLSAgICBpZiAoIXJlc3VsdEltcGwpCi0g
ICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHRJbXBsKTsKKyAgICBy
ZXR1cm4gU3RyaW5nKHN0ZDo6Zm9yd2FyZDxUPihzdHJpbmcxKSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5n
VHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5cGU0LCB0eXBlbmFtZSBTdHJpbmdUeXBlNSwgdHlwZW5h
bWUgU3RyaW5nVHlwZTYsIHR5cGVuYW1lIFN0cmluZ1R5cGU3LCB0eXBlbmFtZSBTdHJpbmdUeXBl
OCwgdHlwZW5hbWUgU3RyaW5nVHlwZTk+Ci1TdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBz
dHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdU
eXBlNCBzdHJpbmc0LCBTdHJpbmdUeXBlNSBzdHJpbmc1LCBTdHJpbmdUeXBlNiBzdHJpbmc2LCBT
dHJpbmdUeXBlNyBzdHJpbmc3LCBTdHJpbmdUeXBlOCBzdHJpbmc4LCBTdHJpbmdUeXBlOSBzdHJp
bmc5KQordGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZS4uLiBUcz4K
K1N0cmluZyBtYWtlU3RyaW5nKFQxJiYgc3RyaW5nMSwgVDImJiBzdHJpbmcyLCBUcyYmLi4uIHN0
cmluZ3MpCiB7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSB0cnlNYWtlU3Ry
aW5nKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMsIHN0cmluZzQsIHN0cmluZzUsIHN0cmluZzYs
IHN0cmluZzcsIHN0cmluZzgsIHN0cmluZzkpOworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1
bHRJbXBsID0gdHJ5TWFrZVN0cmluZyhzdGQ6OmZvcndhcmQ8VDE+KHN0cmluZzEpLCBzdGQ6OmZv
cndhcmQ8VDI+KHN0cmluZzIpLCBzdGQ6OmZvcndhcmQ8VHM+KHN0cmluZ3MpLi4uKTsKICAgICBp
ZiAoIXJlc3VsdEltcGwpCiAgICAgICAgIENSQVNIKCk7CiAgICAgcmV0dXJuIFdURjo6bW92ZShy
ZXN1bHRJbXBsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nT3BlcmF0
b3JzLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ09wZXJhdG9ycy5oCmluZGV4IGNmZDJm
NmQ2Y2FjY2QxNjg2NTI1YTg3ZWE2ODIyZDdiNDAzY2I5NTAuLjkxZDA3NGMwYjhlZDZhNDFkOGQ4
MGU4NDIwYmNmMjUyODBjYjBjODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nT3BlcmF0b3JzLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdPcGVyYXRvcnMu
aApAQCAtMjQsMjEgKzI0LDIwIEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTI+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUMSwgdHlwZW5hbWUgVDI+CiBjbGFzcyBTdHJpbmdBcHBlbmQgewogcHVibGljOgotICAgIFN0
cmluZ0FwcGVuZChTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyKQotICAg
ICAgICA6IG1fc3RyaW5nMShzdHJpbmcxKQotICAgICAgICAsIG1fc3RyaW5nMihzdHJpbmcyKQor
ICAgIFN0cmluZ0FwcGVuZChjb25zdCBUMSYgc3RyaW5nMSwgY29uc3QgVDImIHN0cmluZzIpCisg
ICAgICAgIDogbV90dXBsZShzdGQ6Om1ha2VfdHVwbGUoQWRhcHRlclR5cGU8VDE+KHN0cmluZzEp
LCBBZGFwdGVyVHlwZTxUMj4oc3RyaW5nMikpKQogICAgIHsKICAgICB9CiAKICAgICBvcGVyYXRv
ciBTdHJpbmcoKSBjb25zdAogICAgIHsKLSAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3Vs
dEltcGwgPSB0cnlNYWtlU3RyaW5nKG1fc3RyaW5nMSwgbV9zdHJpbmcyKTsKKyAgICAgICAgUmVm
UHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdBZGFwdGVyVHVwbGU8MiwgQWRhcHRl
clR5cGU8VDE+LCBBZGFwdGVyVHlwZTxUMj4+OjpjcmVhdGVTdHJpbmcobV90dXBsZSk7CiAgICAg
ICAgIGlmICghcmVzdWx0SW1wbCkKICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgIHJldHVy
biByZXN1bHRJbXBsLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHRJ
bXBsKTsKICAgICB9CiAKICAgICBvcGVyYXRvciBBdG9taWNTdHJpbmcoKSBjb25zdApAQCAtNDYs
NTkgKzQ1LDUyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9wZXJhdG9yIFN0cmluZygpOwog
ICAgIH0KIAotICAgIGJvb2wgaXM4Qml0KCkKKyAgICBib29sIGlzOEJpdCgpIGNvbnN0CiAgICAg
ewotICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEobV9zdHJp
bmcxKTsKLSAgICAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKG1f
c3RyaW5nMik7Ci0gICAgICAgIHJldHVybiBhZGFwdGVyMS5pczhCaXQoKSAmJiBhZGFwdGVyMi5p
czhCaXQoKTsKKyAgICAgICAgcmV0dXJuIHN0cmluZzEoKS5pczhCaXQoKSAmJiBzdHJpbmcyKCku
aXM4Qml0KCk7CiAgICAgfQogCi0gICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikK
KyAgICB2b2lkIHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAogICAgIHsKICAgICAg
ICAgQVNTRVJUKGlzOEJpdCgpKTsKLSAgICAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlw
ZTE+IGFkYXB0ZXIxKG1fc3RyaW5nMSk7Ci0gICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmlu
Z1R5cGUyPiBhZGFwdGVyMihtX3N0cmluZzIpOwotICAgICAgICBhZGFwdGVyMS53cml0ZVRvKGRl
c3RpbmF0aW9uKTsKLSAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhkZXN0aW5hdGlvbiArIGFkYXB0
ZXIxLmxlbmd0aCgpKTsKKyAgICAgICAgc3RyaW5nMSgpLndyaXRlVG8oZGVzdGluYXRpb24pOwor
ICAgICAgICBzdHJpbmcyKCkud3JpdGVUbyhkZXN0aW5hdGlvbiArIHN0cmluZzEoKS5sZW5ndGgo
KSk7CiAgICAgfQogCi0gICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikKKyAgICB2
b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAogICAgIHsKLSAgICAgICAgU3Ry
aW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTE+IGFkYXB0ZXIxKG1fc3RyaW5nMSk7Ci0gICAgICAg
IFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFwdGVyMihtX3N0cmluZzIpOwotICAg
ICAgICBhZGFwdGVyMS53cml0ZVRvKGRlc3RpbmF0aW9uKTsKLSAgICAgICAgYWRhcHRlcjIud3Jp
dGVUbyhkZXN0aW5hdGlvbiArIGFkYXB0ZXIxLmxlbmd0aCgpKTsKKyAgICAgICAgc3RyaW5nMSgp
LndyaXRlVG8oZGVzdGluYXRpb24pOworICAgICAgICBzdHJpbmcyKCkud3JpdGVUbyhkZXN0aW5h
dGlvbiArIHN0cmluZzEoKS5sZW5ndGgoKSk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgbGVuZ3Ro
KCkKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdAogICAgIHsKLSAgICAgICAgU3RyaW5nVHlw
ZUFkYXB0ZXI8U3RyaW5nVHlwZTE+IGFkYXB0ZXIxKG1fc3RyaW5nMSk7Ci0gICAgICAgIFN0cmlu
Z1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFwdGVyMihtX3N0cmluZzIpOwotICAgICAgICBy
ZXR1cm4gYWRhcHRlcjEubGVuZ3RoKCkgKyBhZGFwdGVyMi5sZW5ndGgoKTsKKyAgICAgICAgcmV0
dXJuIHN0cmluZzEoKS5sZW5ndGgoKSArIHN0cmluZzIoKS5sZW5ndGgoKTsKICAgICB9ICAgIAog
CiBwcml2YXRlOgotICAgIFN0cmluZ1R5cGUxIG1fc3RyaW5nMTsKLSAgICBTdHJpbmdUeXBlMiBt
X3N0cmluZzI7CisgICAgc3RkOjp0dXBsZTxBZGFwdGVyVHlwZTxUMT4sIEFkYXB0ZXJUeXBlPFQy
Pj4gbV90dXBsZTsKKyAgICBjb25zdCBBZGFwdGVyVHlwZTxUMT4mIHN0cmluZzEoKSBjb25zdCB7
IHJldHVybiBzdGQ6OmdldDwwPihtX3R1cGxlKTsgfQorICAgIGNvbnN0IEFkYXB0ZXJUeXBlPFQy
PiYgc3RyaW5nMigpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6Z2V0PDE+KG1fdHVwbGUpOyB9CiB9Owog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTI+CiBj
bGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdBcHBlbmQ8U3RyaW5nVHlwZTEsIFN0cmluZ1R5
cGUyPj4gewogcHVibGljOgotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ0FwcGVuZDxTdHJp
bmdUeXBlMSwgU3RyaW5nVHlwZTI+PihTdHJpbmdBcHBlbmQ8U3RyaW5nVHlwZTEsIFN0cmluZ1R5
cGUyPiYgYnVmZmVyKQorICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ0FwcGVuZDxTdHJpbmdU
eXBlMSwgU3RyaW5nVHlwZTI+Pihjb25zdCBTdHJpbmdBcHBlbmQ8U3RyaW5nVHlwZTEsIFN0cmlu
Z1R5cGUyPiYgYnVmZmVyKQogICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKICAgICB7CiAgICAg
fQogCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gbV9idWZmZXIubGVuZ3RoKCk7IH0K
KyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5sZW5ndGgoKTsg
fQogCi0gICAgYm9vbCBpczhCaXQoKSB7IHJldHVybiBtX2J1ZmZlci5pczhCaXQoKTsgfQorICAg
IGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuaXM4Qml0KCk7IH0KIAotICAg
IHZvaWQgd3JpdGVUbyhMQ2hhciogZGVzdGluYXRpb24pIHsgbV9idWZmZXIud3JpdGVUbyhkZXN0
aW5hdGlvbik7IH0KLSAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKSB7IG1fYnVm
ZmVyLndyaXRlVG8oZGVzdGluYXRpb24pOyB9CisgICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0
aW5hdGlvbikgY29uc3QgeyBtX2J1ZmZlci53cml0ZVRvKGRlc3RpbmF0aW9uKTsgfQorICAgIHZv
aWQgd3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pIGNvbnN0IHsgbV9idWZmZXIud3JpdGVUbyhk
ZXN0aW5hdGlvbik7IH0KIAogcHJpdmF0ZToKLSAgICBTdHJpbmdBcHBlbmQ8U3RyaW5nVHlwZTEs
IFN0cmluZ1R5cGUyPiYgbV9idWZmZXI7CisgICAgY29uc3QgU3RyaW5nQXBwZW5kPFN0cmluZ1R5
cGUxLCBTdHJpbmdUeXBlMj4mIG1fYnVmZmVyOwogfTsKIAogaW5saW5lIFN0cmluZ0FwcGVuZDxj
b25zdCBjaGFyKiwgU3RyaW5nPiBvcGVyYXRvcisoY29uc3QgY2hhciogc3RyaW5nMSwgY29uc3Qg
U3RyaW5nJiBzdHJpbmcyKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257536</attachid>
            <date>2015-07-26 02:20:52 -0700</date>
            <delta_ts>2015-08-03 13:13:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147142-20150726021928.patch</filename>
            <type>text/plain</type>
            <size>34123</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3MzgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDQ5ZTNhMmI0OWY1MjIzMTQ0MmM1ZGNh
YjVhN2Q3ZWY1MGYzYjYwNjkuLmU2Y2YyMDJiOWJhMjc2YWNiMzdhYmFkYWQxMmY2MDcxZmNkMmVk
YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTUtMDctMjYgIFphbiBEb2JlcnNlayAgPHpkb2Jl
cnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtXVEZdIFR1cm4gdHJ5TWFrZVN0cmluZygpLCBt
YWtlU3RyaW5nKCkgaW50byB2YXJpYWRpYyB0ZW1wbGF0ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzE0MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1aWx0IHVwb24gdGhlIG9yaWdpbmFsIHdvcmsg
YnkgQW5kZXJzIENhcmxzc29uLCBNYXJrIFJvd2UgYW5kIFNhbSBXZWluaWcuCisKKyAgICAgICAg
SW1wbGVtZW50IHRyeU1ha2VTdHJpbmcoKSBhbmQgbWFrZVN0cmluZygpIGFzIHZhcmlhZGljIHRl
bXBsYXRlcywgcmVwbGFjaW5nCisgICAgICAgIHRoZSBhcmd1bWVudCBjb3VudC1iYXNlZCBvdmVy
bG9hZHMuCisKKyAgICAgICAgdHJ5TWFrZVN0cmluZygpIG5vdyBjb25zdHJ1Y3RzIGEgc3RhY2st
YmFzZWQgdHVwbGUgb2YgbmVjZXNzYXJ5IFN0cmluZ1R5cGVBZGFwdGVyCisgICAgICAgIG9iamVj
dHMgYW5kIHV0aWxpemVzIHRoZSBTdHJpbmdBZGFwdGVyVHVwbGUgc3RydWN0IHRlbXBsYXRlIHRv
IG9wZXJhdGUgb24gdGhhdAorICAgICAgICB0dXBsZSwgcmVjdXJzaXZlbHkgY2FsbGluZyB0aGUg
bmVjZXNzYXJ5IG9wZXJhdGlvbnMgb24gZWFjaCBlbGVtZW50IGluIHRoZSB0dXBsZS4KKyAgICAg
ICAgVGhpcyBlZmZlY3RpdmVseSBtaW1pY3MgdGhlIHByb2Nlc3Mgb2YgcHJldmlvdXMgdHJ5TWFr
ZVN0cmluZygpIGltcGxlbWVudGF0aW9uLAorICAgICAgICBidXQgbWFrZXMgaXQgc2NhbGFibGUg
dG8gYSB0dXBsZSBvZiBlbGVtZW50cyB0aGF0IGFyZSB0byBiZSBjb25jYXRlbmF0ZWQuCisKKyAg
ICAgICAgU3RyaW5nQXBwZW5kIGNsYXNzIHRlbXBsYXRlIG5vdyBzdG9yZXMgdHdvIFN0cmluZ1R5
cGVBZGFwdGVyIG9iamVjdHMgZm9yIHRoZQorICAgICAgICB0d28gcGFzc2VkLWluIHN0cmluZyBv
YmplY3RzLCBwYWNrZWQgaW4gYSB0dXBsZSwgY2FsbGluZworICAgICAgICBTdHJpbmdBZGFwdGVy
VHVwbGU8Pjo6Y3JlYXRlU3RyaW5nKCkgZGlyZWN0bHkgd2hlbiBjb25jYXRlbmF0aW5nIHRoZSB0
d28gb2JqZWN0cworICAgICAgICBpbnRvIG9uZSBTdHJpbmcuCisKKyAgICAgICAgKiB3dGYvdGV4
dC9TdHJpbmdDb25jYXRlbmF0ZS5oOgorICAgICAgICAoV1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxj
aGFyPjo6bGVuZ3RoKToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8Y2hhcj46Omlz
OEJpdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0FkYXB0ZXJUdXBsZTo6c3VtV2l0aE92ZXJmbG93
KToKKyAgICAgICAgKFdURjo6U3RyaW5nQWRhcHRlclR1cGxlOjppczhCaXQpOgorICAgICAgICAo
V1RGOjpTdHJpbmdBZGFwdGVyVHVwbGU6OndyaXRlVG8pOgorICAgICAgICAoV1RGOjpTdHJpbmdB
ZGFwdGVyVHVwbGU6OmNyZWF0ZVN0cmluZyk6CisgICAgICAgIChXVEY6OnRyeU1ha2VTdHJpbmcp
OgorICAgICAgICAoV1RGOjptYWtlU3RyaW5nKToKKyAgICAgICAgKFdURjo6c3VtV2l0aE92ZXJm
bG93KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdPcGVyYXRvcnMuaDoKKyAg
ICAgICAgKFdURjo6U3RyaW5nQXBwZW5kOjpTdHJpbmdBcHBlbmQpOgorICAgICAgICAoV1RGOjpT
dHJpbmdBcHBlbmQ6Om9wZXJhdG9yIFN0cmluZyk6CisgICAgICAgIChXVEY6OlN0cmluZ0FwcGVu
ZDo6aXM4Qml0KToKKyAgICAgICAgKFdURjo6U3RyaW5nQXBwZW5kOjp3cml0ZVRvKToKKyAgICAg
ICAgKFdURjo6U3RyaW5nQXBwZW5kOjpsZW5ndGgpOgorICAgICAgICAoV1RGOjpTdHJpbmdBcHBl
bmQ6OnN0cmluZzEpOgorICAgICAgICAoV1RGOjpTdHJpbmdBcHBlbmQ6OnN0cmluZzIpOgorCiAy
MDE1LTA3LTI0ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUmVtb3ZlIHRoZSB1bnVzZWQgR0NDIHdvcmthcm91bmQgLSBzdGQ6OmlzX3RyaXZpYWxseV9k
ZXN0cnVjdGlibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29uY2F0
ZW5hdGUuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaAppbmRleCA4
Y2M0YjU4ZTIwNTMzZmFmNDEzNDJhZGE4YWZkOWFmODE2MGEwNTAzLi40MGI4MTI0NTIxNmMwYmVi
YzRhYzVjNTFjM2Y1MjYwOGVmZmRmYmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L1N0cmluZ0NvbmNhdGVuYXRlLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb25j
YXRlbmF0ZS5oCkBAIC01NSw4ICs1NSw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAg
dW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gMTsgfQotICAgIGJvb2wgaXM4Qml0KCkgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKyAg
ICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZvaWQgd3JpdGVU
byhMQ2hhciogZGVzdGluYXRpb24pIGNvbnN0CiAgICAgewpAQCAtOTgsNiArOTgsNzQgQEAgcHJp
dmF0ZToKICAgICBVQ2hhciBtX2NoYXJhY3RlcjsKIH07CiAKK3RlbXBsYXRlPHNpemVfdCBzdHJp
bmdMaXRlcmFsTGVuZ3RoPgorY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8Y2hhcltzdHJpbmdMaXRl
cmFsTGVuZ3RoXT4geworcHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVyKGNvbnN0IGNoYXIg
KCZzdHJpbmdMaXRlcmFsKVtzdHJpbmdMaXRlcmFsTGVuZ3RoXSkKKyAgICAgICAgOiBtX3N0cmlu
ZyhyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oc3RyaW5nTGl0ZXJhbCkpCisgICAgewor
ICAgIH0KKworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHN0cmluZ0xpdGVy
YWxMZW5ndGggLSAxOyB9CisgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CisKKyAgICB2b2lkIHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAorICAgIHsKKyAg
ICAgICAgU3RyaW5nVmlldyhtX3N0cmluZywgbGVuZ3RoKCkpLmdldENoYXJhY3RlcnNXaXRoVXBj
b252ZXJ0KGRlc3RpbmF0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRl
c3RpbmF0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgU3RyaW5nVmlldyhtX3N0cmluZywgbGVu
Z3RoKCkpLmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KGRlc3RpbmF0aW9uKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgY29uc3QgTENoYXIqIG1fc3RyaW5nOworfTsKKwordGVtcGxhdGU8c2l6
ZV90IHN0cmluZ0xpdGVyYWxMZW5ndGg+CitjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBj
aGFyW3N0cmluZ0xpdGVyYWxMZW5ndGhdPiA6IHB1YmxpYyBTdHJpbmdUeXBlQWRhcHRlcjxjaGFy
W3N0cmluZ0xpdGVyYWxMZW5ndGhdPiB7CitwdWJsaWM6CisgICAgU3RyaW5nVHlwZUFkYXB0ZXIo
Y29uc3QgY2hhciAoJnN0cmluZ0xpdGVyYWwpW3N0cmluZ0xpdGVyYWxMZW5ndGhdKQorICAgICAg
ICA6IFN0cmluZ1R5cGVBZGFwdGVyPGNoYXJbc3RyaW5nTGl0ZXJhbExlbmd0aF0+KHN0cmluZ0xp
dGVyYWwpCisgICAgeworICAgIH0KK307CisKK3RlbXBsYXRlPHNpemVfdCBzdHJpbmdMaXRlcmFs
TGVuZ3RoPgorY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8VUNoYXJbc3RyaW5nTGl0ZXJhbExlbmd0
aF0+IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdUeXBlQWRhcHRlcihjb25zdCBVQ2hhciAoJnN0cmlu
Z0xpdGVyYWwpW3N0cmluZ0xpdGVyYWxMZW5ndGhdKQorICAgICAgICA6IG1fc3RyaW5nKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihzdHJpbmdMaXRlcmFsKSkKKyAgICB7CisgICAgfQor
CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nTGl0ZXJhbExlbmd0
aCAtIDE7IH0KKyAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAg
ICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgd3JpdGVUbyhMQ2hhciopIGNvbnN0CisgICAg
eworICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAgIHZvaWQgd3JpdGVUbyhVQ2hhciogZGVz
dGluYXRpb24pIGNvbnN0CisgICAgeworICAgICAgICBTdHJpbmdWaWV3KG1fc3RyaW5nLCBsZW5n
dGgoKSkuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoZGVzdGluYXRpb24pOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBjb25zdCBVQ2hhciogbV9zdHJpbmc7Cit9OworCit0ZW1wbGF0ZTxzaXpl
X3Qgc3RyaW5nTGl0ZXJhbExlbmd0aD4KK2NsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPGNvbnN0IFVD
aGFyW3N0cmluZ0xpdGVyYWxMZW5ndGhdPiA6IHB1YmxpYyBTdHJpbmdUeXBlQWRhcHRlcjxVQ2hh
cltzdHJpbmdMaXRlcmFsTGVuZ3RoXT4geworcHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFwdGVy
KGNvbnN0IFVDaGFyICgmc3RyaW5nTGl0ZXJhbClbc3RyaW5nTGl0ZXJhbExlbmd0aF0pCisgICAg
ICAgIDogU3RyaW5nVHlwZUFkYXB0ZXI8VUNoYXJbc3RyaW5nTGl0ZXJhbExlbmd0aF0+KHN0cmlu
Z0xpdGVyYWwpCisgICAgeworICAgIH0KK307CisKIHRlbXBsYXRlPD4KIGNsYXNzIFN0cmluZ1R5
cGVBZGFwdGVyPGNvbnN0IExDaGFyKj4gewogcHVibGljOgpAQCAtMjQ3LDU3MiArMzE1LDg1IEBA
IHB1YmxpYzoKICAgICB9CiB9OwogCi1pbmxpbmUgdm9pZCBzdW1XaXRoT3ZlcmZsb3codW5zaWdu
ZWQmIHRvdGFsLCB1bnNpZ25lZCBhZGRlbmQsIGJvb2wmIG92ZXJmbG93KQotewotICAgIHVuc2ln
bmVkIG9sZFRvdGFsID0gdG90YWw7Ci0gICAgdG90YWwgPSBvbGRUb3RhbCArIGFkZGVuZDsKLSAg
ICBpZiAodG90YWwgPCBvbGRUb3RhbCkKLSAgICAgICAgb3ZlcmZsb3cgPSB0cnVlOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTI+Ci1SZWZQ
dHI8U3RyaW5nSW1wbD4gdHJ5TWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdU
eXBlMiBzdHJpbmcyKQotewotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBhZGFw
dGVyMShzdHJpbmcxKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRhcHRl
cjIoc3RyaW5nMik7Ci0KLSAgICBib29sIG92ZXJmbG93ID0gZmFsc2U7Ci0gICAgdW5zaWduZWQg
bGVuZ3RoID0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwg
YWRhcHRlcjIubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBpZiAob3ZlcmZsb3cpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGFkYXB0ZXIxLmlzOEJpdCgpICYmIGFkYXB0ZXIy
LmlzOEJpdCgpKSB7Ci0gICAgICAgIExDaGFyKiBidWZmZXI7Ci0gICAgICAgIFJlZlB0cjxTdHJp
bmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChs
ZW5ndGgsIGJ1ZmZlcik7Ci0gICAgICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgICAgIExDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAgICAg
IGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxl
bmd0aCgpOwotICAgICAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICAgICAgcmV0
dXJuIFdURjo6bW92ZShyZXN1bHRJbXBsKTsKK3RlbXBsYXRlPHNpemVfdCBpbmRleCwgdHlwZW5h
bWUuLi4gQWRhcHRlcnM+CitzdHJ1Y3QgU3RyaW5nQWRhcHRlclR1cGxlIHsKKyAgICBzdGF0aWMg
aW5saW5lIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBzdW1XaXRoT3ZlcmZsb3co
Y29uc3Qgc3RkOjp0dXBsZTxBZGFwdGVycy4uLj4mIHR1cGxlKQorICAgIHsKKyAgICAgICAgYXV0
byYgYWRhcHRlciA9IHN0ZDo6Z2V0PHNpemVvZi4uLihBZGFwdGVycykgLSBpbmRleD4odHVwbGUp
OworICAgICAgICByZXR1cm4gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KGFkYXB0
ZXIubGVuZ3RoKCkpICsgU3RyaW5nQWRhcHRlclR1cGxlPGluZGV4IC0gMSwgQWRhcHRlcnMuLi4+
OjpzdW1XaXRoT3ZlcmZsb3codHVwbGUpOwogICAgIH0KIAotICAgIFVDaGFyKiBidWZmZXI7Ci0g
ICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVV
bmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgVUNoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICBh
ZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgp
OwotICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLQotICAgIHJldHVybiBXVEY6Om1vdmUo
cmVzdWx0SW1wbCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFt
ZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTM+Ci1SZWZQdHI8U3RyaW5nSW1wbD4g
dHJ5TWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBT
dHJpbmdUeXBlMyBzdHJpbmczKQotewotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUx
PiBhZGFwdGVyMShzdHJpbmcxKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4g
YWRhcHRlcjIoc3RyaW5nMik7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTM+IGFk
YXB0ZXIzKHN0cmluZzMpOwotCi0gICAgYm9vbCBvdmVyZmxvdyA9IGZhbHNlOwotICAgIHVuc2ln
bmVkIGxlbmd0aCA9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5n
dGgsIGFkYXB0ZXIyLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxl
bmd0aCwgYWRhcHRlcjMubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBpZiAob3ZlcmZsb3cpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGFkYXB0ZXIxLmlzOEJpdCgpICYmIGFk
YXB0ZXIyLmlzOEJpdCgpICYmIGFkYXB0ZXIzLmlzOEJpdCgpKSB7Ci0gICAgICAgIExDaGFyKiBi
dWZmZXI7Ci0gICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1w
bDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgICAgIGlmICgh
cmVzdWx0SW1wbCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIExDaGFy
KiByZXN1bHQgPSBidWZmZXI7Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAg
ICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMi53cml0
ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICAg
ICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgICAgIHJldHVybiBXVEY6Om1vdmUo
cmVzdWx0SW1wbCk7CisgICAgc3RhdGljIGlubGluZSBib29sIGlzOEJpdChjb25zdCBzdGQ6OnR1
cGxlPEFkYXB0ZXJzLi4uPiYgdHVwbGUpCisgICAgeworICAgICAgICBhdXRvJiBhZGFwdGVyID0g
c3RkOjpnZXQ8c2l6ZW9mLi4uKEFkYXB0ZXJzKSAtIGluZGV4Pih0dXBsZSk7CisgICAgICAgIHJl
dHVybiBhZGFwdGVyLmlzOEJpdCgpICYmIFN0cmluZ0FkYXB0ZXJUdXBsZTxpbmRleCAtIDEsIEFk
YXB0ZXJzLi4uPjo6aXM4Qml0KHR1cGxlKTsKICAgICB9CiAKLSAgICBVQ2hhciogYnVmZmVyID0g
MDsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghcmVzdWx0SW1wbCkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBVQ2hhciogcmVzdWx0ID0gYnVmZmVyOwot
ICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVu
Z3RoKCk7Ci0gICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFw
dGVyMi5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICByZXR1
cm4gV1RGOjptb3ZlKHJlc3VsdEltcGwpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdU
eXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFt
ZSBTdHJpbmdUeXBlND4KLVJlZlB0cjxTdHJpbmdJbXBsPiB0cnlNYWtlU3RyaW5nKFN0cmluZ1R5
cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0
cmluZ1R5cGU0IHN0cmluZzQpCi17Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTE+
IGFkYXB0ZXIxKHN0cmluZzEpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUyPiBh
ZGFwdGVyMihzdHJpbmcyKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMz4gYWRh
cHRlcjMoc3RyaW5nMyk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTQ+IGFkYXB0
ZXI0KHN0cmluZzQpOwotCi0gICAgYm9vbCBvdmVyZmxvdyA9IGZhbHNlOwotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgs
IGFkYXB0ZXIyLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0
aCwgYWRhcHRlcjMubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVu
Z3RoLCBhZGFwdGVyNC5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIGlmIChvdmVyZmxvdykKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoYWRhcHRlcjEuaXM4Qml0KCkgJiYgYWRh
cHRlcjIuaXM4Qml0KCkgJiYgYWRhcHRlcjMuaXM4Qml0KCkgJiYgYWRhcHRlcjQuaXM4Qml0KCkp
IHsKLSAgICAgICAgTENoYXIqIGJ1ZmZlcjsKLSAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJl
c3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVm
ZmVyKTsKLSAgICAgICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICAgICAgTENoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICAgICAgYWRhcHRlcjEu
d3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0g
ICAgICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0
ZXIyLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAg
IHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjQud3JpdGVUbyhy
ZXN1bHQpOwotCi0gICAgICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0SW1wbCk7Ci0gICAgfQot
Ci0gICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9
IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAg
IGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBVQ2hhciog
cmVzdWx0ID0gYnVmZmVyOwotICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1
bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwot
ICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMy53cml0ZVRvKHJl
c3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgIGFkYXB0ZXI0Lndy
aXRlVG8ocmVzdWx0KTsKLQotICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0SW1wbCk7Ci19Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVUbyhU
KiBidWZmZXIsIGNvbnN0IHN0ZDo6dHVwbGU8QWRhcHRlcnMuLi4+JiB0dXBsZSkKKyAgICB7Cisg
ICAgICAgIGF1dG8mIGFkYXB0ZXIgPSBzdGQ6OmdldDxzaXplb2YuLi4oQWRhcHRlcnMpIC0gaW5k
ZXg+KHR1cGxlKTsKKyAgICAgICAgYWRhcHRlci53cml0ZVRvKGJ1ZmZlcik7CisgICAgICAgIFN0
cmluZ0FkYXB0ZXJUdXBsZTxpbmRleCAtIDEsIEFkYXB0ZXJzLi4uPjo6d3JpdGVUbyhidWZmZXIg
KyBhZGFwdGVyLmxlbmd0aCgpLCB0dXBsZSk7CisgICAgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBT
dHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0
eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTU+Ci1SZWZQdHI8U3RyaW5n
SW1wbD4gdHJ5TWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJp
bmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBTdHJpbmdUeXBl
NSBzdHJpbmc1KQotewotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBhZGFwdGVy
MShzdHJpbmcxKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRhcHRlcjIo
c3RyaW5nMik7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTM+IGFkYXB0ZXIzKHN0
cmluZzMpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU0PiBhZGFwdGVyNChzdHJp
bmc0KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNT4gYWRhcHRlcjUoc3RyaW5n
NSk7Ci0KLSAgICBib29sIG92ZXJmbG93ID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0g
YWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjIu
bGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVy
My5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0
ZXI0Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRh
cHRlcjUubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBpZiAob3ZlcmZsb3cpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgaWYgKGFkYXB0ZXIxLmlzOEJpdCgpICYmIGFkYXB0ZXIyLmlz
OEJpdCgpICYmIGFkYXB0ZXIzLmlzOEJpdCgpICYmIGFkYXB0ZXI0LmlzOEJpdCgpICYmIGFkYXB0
ZXI1LmlzOEJpdCgpKSB7Ci0gICAgICAgIExDaGFyKiBidWZmZXI7Ci0gICAgICAgIFJlZlB0cjxT
dHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgICAgIGlmICghcmVzdWx0SW1wbCkKKyAgICBzdGF0aWMg
aW5saW5lIFJlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGVTdHJpbmcoY29uc3Qgc3RkOjp0dXBsZTxB
ZGFwdGVycy4uLj4mIGFkYXB0ZXJzKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
MDsKKyAgICAgICAgaWYgKHN1bVdpdGhPdmVyZmxvdyhhZGFwdGVycykuc2FmZUdldChsZW5ndGgp
ID09IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgICAgICBMQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgICAgICBhZGFwdGVyMS53
cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAg
ICAgICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRl
cjIubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAg
cmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNC53cml0ZVRvKHJl
c3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNC5sZW5ndGgoKTsKLSAgICAgICAgYWRh
cHRlcjUud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0
SW1wbCk7Ci0gICAgfQotCi0gICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICBSZWZQdHI8U3RyaW5nSW1w
bD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3Ro
LCBidWZmZXIpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBVQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVz
dWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjIud3Jp
dGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICBhZGFw
dGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwot
ICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVu
Z3RoKCk7Ci0gICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgcmV0dXJuIFdURjo6
bW92ZShyZXN1bHRJbXBsKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5
cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5n
VHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1LCB0eXBlbmFtZSBTdHJpbmdUeXBlNj4KLVJlZlB0
cjxTdHJpbmdJbXBsPiB0cnlNYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5
cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQsIFN0
cmluZ1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5cGU2IHN0cmluZzYpCi17Ci0gICAgU3RyaW5nVHlw
ZUFkYXB0ZXI8U3RyaW5nVHlwZTE+IGFkYXB0ZXIxKHN0cmluZzEpOwotICAgIFN0cmluZ1R5cGVB
ZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFwdGVyMihzdHJpbmcyKTsKLSAgICBTdHJpbmdUeXBlQWRh
cHRlcjxTdHJpbmdUeXBlMz4gYWRhcHRlcjMoc3RyaW5nMyk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0
ZXI8U3RyaW5nVHlwZTQ+IGFkYXB0ZXI0KHN0cmluZzQpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVy
PFN0cmluZ1R5cGU1PiBhZGFwdGVyNShzdHJpbmc1KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxT
dHJpbmdUeXBlNj4gYWRhcHRlcjYoc3RyaW5nNik7Ci0KLSAgICBib29sIG92ZXJmbG93ID0gZmFs
c2U7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgc3VtV2l0
aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjIubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1X
aXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyMy5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1
bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI0Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAg
c3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjUubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAg
ICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwot
ICAgIGlmIChvdmVyZmxvdykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoYWRh
cHRlcjEuaXM4Qml0KCkgJiYgYWRhcHRlcjIuaXM4Qml0KCkgJiYgYWRhcHRlcjMuaXM4Qml0KCkg
JiYgYWRhcHRlcjQuaXM4Qml0KCkgJiYgYWRhcHRlcjUuaXM4Qml0KCkgJiYgYWRhcHRlcjYuaXM4
Qml0KCkpIHsKLSAgICAgICAgTENoYXIqIGJ1ZmZlcjsKLSAgICAgICAgUmVmUHRyPFN0cmluZ0lt
cGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0
aCwgYnVmZmVyKTsKLSAgICAgICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIGlmIChpczhCaXQoYWRhcHRlcnMpKSB7CisgICAgICAgICAgICBM
Q2hhciogYnVmZmVyOworICAgICAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdCA9IFN0
cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOworICAgICAg
ICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICAgICAgTENoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICAgICAgYWRhcHRlcjEud3JpdGVUbyhy
ZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgICAgIGFk
YXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0
aCgpOwotICAgICAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCAr
PSBhZGFwdGVyMy5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQpOwot
ICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI1Lndy
aXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI1Lmxlbmd0aCgpOwotICAg
ICAgICBhZGFwdGVyNi53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICAgICAgcmV0dXJuIFdURjo6bW92
ZShyZXN1bHRJbXBsKTsKLSAgICB9Ci0KLSAgICBVQ2hhciogYnVmZmVyOwotICAgIFJlZlB0cjxT
dHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIFVDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAgYWRhcHRlcjEud3Jp
dGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBhZGFw
dGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwot
ICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjMubGVu
Z3RoKCk7Ci0gICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFw
dGVyNC5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0
ICs9IGFkYXB0ZXI1Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI2LndyaXRlVG8ocmVzdWx0KTsKLQot
ICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0SW1wbCk7Ci19CisgICAgICAgICAgICB3cml0ZVRv
KGJ1ZmZlciwgYWRhcHRlcnMpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIs
IHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3Ry
aW5nVHlwZTUsIHR5cGVuYW1lIFN0cmluZ1R5cGU2LCB0eXBlbmFtZSBTdHJpbmdUeXBlNz4KLVJl
ZlB0cjxTdHJpbmdJbXBsPiB0cnlNYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmlu
Z1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQs
IFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5cGU2IHN0cmluZzYsIFN0cmluZ1R5cGU3IHN0
cmluZzcpCi17Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTE+IGFkYXB0ZXIxKHN0
cmluZzEpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFwdGVyMihzdHJp
bmcyKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMz4gYWRhcHRlcjMoc3RyaW5n
Myk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTQ+IGFkYXB0ZXI0KHN0cmluZzQp
OwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU1PiBhZGFwdGVyNShzdHJpbmc1KTsK
LSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNj4gYWRhcHRlcjYoc3RyaW5nNik7Ci0g
ICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTc+IGFkYXB0ZXI3KHN0cmluZzcpOwotCi0g
ICAgYm9vbCBvdmVyZmxvdyA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIx
Lmxlbmd0aCgpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIyLmxlbmd0aCgp
LCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjMubGVuZ3Ro
KCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNC5sZW5n
dGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI1Lmxl
bmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjYu
bGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVy
Ny5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIGlmIChvdmVyZmxvdykKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBpZiAoYWRhcHRlcjEuaXM4Qml0KCkgJiYgYWRhcHRlcjIuaXM4Qml0
KCkgJiYgYWRhcHRlcjMuaXM4Qml0KCkgJiYgYWRhcHRlcjQuaXM4Qml0KCkgJiYgYWRhcHRlcjUu
aXM4Qml0KCkgJiYgYWRhcHRlcjYuaXM4Qml0KCkgJiYgYWRhcHRlcjcuaXM4Qml0KCkpIHsKLSAg
ICAgICAgTENoYXIqIGJ1ZmZlcjsKLSAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdElt
cGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsK
LSAgICAgICAgaWYgKCFyZXN1bHRJbXBsKQorICAgICAgICBVQ2hhciogYnVmZmVyOworICAgICAg
ICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0ID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0
aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CisgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgTENoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAg
ICAgICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRl
cjEubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAg
cmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMy53cml0ZVRvKHJl
c3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsKLSAgICAgICAgYWRh
cHRlcjQud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3Ro
KCk7Ci0gICAgICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9
IGFkYXB0ZXI1Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNi53cml0ZVRvKHJlc3VsdCk7Ci0g
ICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNi5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjcud3Jp
dGVUbyhyZXN1bHQpOwotCi0gICAgICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0SW1wbCk7Ci0g
ICAgfQotCi0gICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0
SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIp
OwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBV
Q2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAg
ICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1
bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMy53cml0
ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgIGFkYXB0
ZXI0LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3RoKCk7Ci0g
ICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyNS5sZW5n
dGgoKTsKLSAgICBhZGFwdGVyNi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0
ZXI2Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI3LndyaXRlVG8ocmVzdWx0KTsKLQotICAgIHJldHVy
biBXVEY6Om1vdmUocmVzdWx0SW1wbCk7Ci19CisgICAgICAgIHdyaXRlVG8oYnVmZmVyLCBhZGFw
dGVycyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfTsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdU
eXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1LCB0eXBlbmFt
ZSBTdHJpbmdUeXBlNiwgdHlwZW5hbWUgU3RyaW5nVHlwZTcsIHR5cGVuYW1lIFN0cmluZ1R5cGU4
PgotUmVmUHRyPFN0cmluZ0ltcGw+IHRyeU1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwg
U3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3Ry
aW5nNCwgU3RyaW5nVHlwZTUgc3RyaW5nNSwgU3RyaW5nVHlwZTYgc3RyaW5nNiwgU3RyaW5nVHlw
ZTcgc3RyaW5nNywgU3RyaW5nVHlwZTggc3RyaW5nOCkKLXsKLSAgICBTdHJpbmdUeXBlQWRhcHRl
cjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3RyaW5nMSk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8
U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKHN0cmluZzIpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0
cmluZ1R5cGUzPiBhZGFwdGVyMyhzdHJpbmczKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJp
bmdUeXBlND4gYWRhcHRlcjQoc3RyaW5nNCk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5n
VHlwZTU+IGFkYXB0ZXI1KHN0cmluZzUpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5
cGU2PiBhZGFwdGVyNihzdHJpbmc2KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBl
Nz4gYWRhcHRlcjcoc3RyaW5nNyk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTg+
IGFkYXB0ZXI4KHN0cmluZzgpOwotCi0gICAgYm9vbCBvdmVyZmxvdyA9IGZhbHNlOwotICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhs
ZW5ndGgsIGFkYXB0ZXIyLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93
KGxlbmd0aCwgYWRhcHRlcjMubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZs
b3cobGVuZ3RoLCBhZGFwdGVyNC5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVy
ZmxvdyhsZW5ndGgsIGFkYXB0ZXI1Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92
ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjYubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRo
T3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNy5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdp
dGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI4Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgaWYg
KG92ZXJmbG93KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChhZGFwdGVyMS5p
czhCaXQoKSAmJiBhZGFwdGVyMi5pczhCaXQoKSAmJiBhZGFwdGVyMy5pczhCaXQoKSAmJiBhZGFw
dGVyNC5pczhCaXQoKSAmJiBhZGFwdGVyNS5pczhCaXQoKSAmJiBhZGFwdGVyNi5pczhCaXQoKSAm
JiBhZGFwdGVyNy5pczhCaXQoKSAmJiBhZGFwdGVyOC5pczhCaXQoKSkgewotICAgICAgICBMQ2hh
ciogYnVmZmVyOwotICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmlu
Z0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgICAgICBp
ZiAoIXJlc3VsdEltcGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKK3RlbXBsYXRlPHR5
cGVuYW1lLi4uIEFkYXB0ZXJzPgorc3RydWN0IFN0cmluZ0FkYXB0ZXJUdXBsZTwwLCBBZGFwdGVy
cy4uLj4geworICAgIHN0YXRpYyBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gc3Vt
V2l0aE92ZXJmbG93KGNvbnN0IHN0ZDo6dHVwbGU8QWRhcHRlcnMuLi4+JikgeyByZXR1cm4gMDsg
fQorICAgIHN0YXRpYyBib29sIGlzOEJpdChjb25zdCBzdGQ6OnR1cGxlPEFkYXB0ZXJzLi4uPiYp
IHsgcmV0dXJuIHRydWU7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdm9pZCB3
cml0ZVRvKFQqLCBjb25zdCBzdGQ6OnR1cGxlPEFkYXB0ZXJzLi4uPiYpIHsgfQorfTsKIAotICAg
ICAgICBMQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgICAgICBhZGFwdGVyMS53cml0ZVRvKHJl
c3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICAgICAgYWRh
cHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3Ro
KCk7Ci0gICAgICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9
IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0g
ICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNC5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjUud3Jp
dGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjUubGVuZ3RoKCk7Ci0gICAg
ICAgIGFkYXB0ZXI2LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI2
Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJl
c3VsdCArPSBhZGFwdGVyNy5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjgud3JpdGVUbyhyZXN1
bHQpOwotCi0gICAgICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0SW1wbCk7Ci0gICAgfQotCi0g
ICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0
cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlm
ICghcmVzdWx0SW1wbCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBVQ2hhciogcmVz
dWx0ID0gYnVmZmVyOwotICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQg
Kz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAg
IHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3Vs
dCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgIGFkYXB0ZXI0LndyaXRl
VG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3RoKCk7Ci0gICAgYWRhcHRl
cjUud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyNS5sZW5ndGgoKTsKLSAg
ICBhZGFwdGVyNi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI2Lmxlbmd0
aCgpOwotICAgIGFkYXB0ZXI3LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRl
cjcubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjgud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgcmV0dXJu
IFdURjo6bW92ZShyZXN1bHRJbXBsKTsKLX0KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit1c2luZyBB
ZGFwdGVyVHlwZSA9IFN0cmluZ1R5cGVBZGFwdGVyPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5
cGU+OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlw
ZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUg
U3RyaW5nVHlwZTUsIHR5cGVuYW1lIFN0cmluZ1R5cGU2LCB0eXBlbmFtZSBTdHJpbmdUeXBlNywg
dHlwZW5hbWUgU3RyaW5nVHlwZTgsIHR5cGVuYW1lIFN0cmluZ1R5cGU5PgotUmVmUHRyPFN0cmlu
Z0ltcGw+IHRyeU1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3Ry
aW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3RyaW5nNCwgU3RyaW5nVHlw
ZTUgc3RyaW5nNSwgU3RyaW5nVHlwZTYgc3RyaW5nNiwgU3RyaW5nVHlwZTcgc3RyaW5nNywgU3Ry
aW5nVHlwZTggc3RyaW5nOCwgU3RyaW5nVHlwZTkgc3RyaW5nOSkKK3RlbXBsYXRlPHR5cGVuYW1l
IFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUuLi4gVHM+CitSZWZQdHI8U3RyaW5nSW1wbD4gdHJ5
TWFrZVN0cmluZyhUMSYmIHN0cmluZzEsIFQyJiYgc3RyaW5nMiwgVHMmJi4uLiBzdHJpbmdzKQog
ewotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBhZGFwdGVyMShzdHJpbmcxKTsK
LSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRhcHRlcjIoc3RyaW5nMik7Ci0g
ICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTM+IGFkYXB0ZXIzKHN0cmluZzMpOwotICAg
IFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU0PiBhZGFwdGVyNChzdHJpbmc0KTsKLSAgICBT
dHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNT4gYWRhcHRlcjUoc3RyaW5nNSk7Ci0gICAgU3Ry
aW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTY+IGFkYXB0ZXI2KHN0cmluZzYpOwotICAgIFN0cmlu
Z1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU3PiBhZGFwdGVyNyhzdHJpbmc3KTsKLSAgICBTdHJpbmdU
eXBlQWRhcHRlcjxTdHJpbmdUeXBlOD4gYWRhcHRlcjgoc3RyaW5nOCk7Ci0gICAgU3RyaW5nVHlw
ZUFkYXB0ZXI8U3RyaW5nVHlwZTk+IGFkYXB0ZXI5KHN0cmluZzkpOwotCi0gICAgYm9vbCBvdmVy
ZmxvdyA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIxLmxlbmd0aCgpOwot
ICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIyLmxlbmd0aCgpLCBvdmVyZmxvdyk7
Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjMubGVuZ3RoKCksIG92ZXJmbG93
KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNC5sZW5ndGgoKSwgb3ZlcmZs
b3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI1Lmxlbmd0aCgpLCBvdmVy
Zmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjYubGVuZ3RoKCksIG92
ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNy5sZW5ndGgoKSwg
b3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI4Lmxlbmd0aCgp
LCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjkubGVuZ3Ro
KCksIG92ZXJmbG93KTsKLSAgICBpZiAob3ZlcmZsb3cpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgaWYgKGFkYXB0ZXIxLmlzOEJpdCgpICYmIGFkYXB0ZXIyLmlzOEJpdCgpICYmIGFk
YXB0ZXIzLmlzOEJpdCgpICYmIGFkYXB0ZXI0LmlzOEJpdCgpICYmIGFkYXB0ZXI1LmlzOEJpdCgp
ICYmIGFkYXB0ZXI2LmlzOEJpdCgpICYmIGFkYXB0ZXI3LmlzOEJpdCgpICYmIGFkYXB0ZXI4Lmlz
OEJpdCgpICYmIGFkYXB0ZXI5LmlzOEJpdCgpKSB7Ci0gICAgICAgIExDaGFyKiBidWZmZXI7Ci0g
ICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgICAgIGlmICghcmVzdWx0SW1w
bCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIExDaGFyKiByZXN1bHQg
PSBidWZmZXI7Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVz
dWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3Vs
dCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRl
cjMud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7
Ci0gICAgICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFk
YXB0ZXI0Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNS53cml0ZVRvKHJlc3VsdCk7Ci0gICAg
ICAgIHJlc3VsdCArPSBhZGFwdGVyNS5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjYud3JpdGVU
byhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjYubGVuZ3RoKCk7Ci0gICAgICAg
IGFkYXB0ZXI3LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI3Lmxl
bmd0aCgpOwotICAgICAgICBhZGFwdGVyOC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3Vs
dCArPSBhZGFwdGVyOC5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjkud3JpdGVUbyhyZXN1bHQp
OwotCi0gICAgICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0SW1wbCk7Ci0gICAgfQotCi0gICAg
VUNoYXIqIGJ1ZmZlcjsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmlu
Z0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICgh
cmVzdWx0SW1wbCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBVQ2hhciogcmVzdWx0
ID0gYnVmZmVyOwotICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0g
YWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgIHJl
c3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7
Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgIGFkYXB0ZXI0LndyaXRlVG8o
cmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjUu
d3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyNS5sZW5ndGgoKTsKLSAgICBh
ZGFwdGVyNi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI2Lmxlbmd0aCgp
OwotICAgIGFkYXB0ZXI3LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjcu
bGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjgud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBh
ZGFwdGVyOC5sZW5ndGgoKTsKLSAgICBhZGFwdGVyOS53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICBy
ZXR1cm4gV1RGOjptb3ZlKHJlc3VsdEltcGwpOworICAgIGF1dG8gYWRhcHRlcnMgPSBzdGQ6Om1h
a2VfdHVwbGUoQWRhcHRlclR5cGU8VDE+KHN0ZDo6Zm9yd2FyZDxUMT4oc3RyaW5nMSkpLCBBZGFw
dGVyVHlwZTxUMj4oc3RkOjpmb3J3YXJkPFQyPihzdHJpbmcyKSksIEFkYXB0ZXJUeXBlPFRzPihz
dGQ6OmZvcndhcmQ8VHM+KHN0cmluZ3MpKS4uLik7CisgICAgcmV0dXJuIFN0cmluZ0FkYXB0ZXJU
dXBsZTwyICsgc2l6ZW9mLi4uKFRzKSwgQWRhcHRlclR5cGU8VDE+LCBBZGFwdGVyVHlwZTxUMj4s
IEFkYXB0ZXJUeXBlPFRzPi4uLj46OmNyZWF0ZVN0cmluZyhhZGFwdGVycyk7CiB9CiAKLQogLy8g
Q29udmVuaWVuY2Ugb25seS4KLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxPgotU3RyaW5n
IG1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSkKLXsKLSAgICByZXR1cm4gU3RyaW5nKHN0
cmluZzEpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3Ry
aW5nVHlwZTI+Ci1TdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdU
eXBlMiBzdHJpbmcyKQotewotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gdHJ5
TWFrZVN0cmluZyhzdHJpbmcxLCBzdHJpbmcyKTsKLSAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAg
ICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHRJbXBsKTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFt
ZSBTdHJpbmdUeXBlMz4KLVN0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0
cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMpCi17Ci0gICAgUmVmUHRyPFN0
cmluZ0ltcGw+IHJlc3VsdEltcGwgPSB0cnlNYWtlU3RyaW5nKHN0cmluZzEsIHN0cmluZzIsIHN0
cmluZzMpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1
cm4gV1RGOjptb3ZlKHJlc3VsdEltcGwpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdU
eXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFt
ZSBTdHJpbmdUeXBlND4KLVN0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0
cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmlu
ZzQpCi17Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSB0cnlNYWtlU3RyaW5n
KHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMsIHN0cmluZzQpOwotICAgIGlmICghcmVzdWx0SW1w
bCkKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdEltcGwpOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIs
IHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3Ry
aW5nVHlwZTU+Ci1TdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdU
eXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBT
dHJpbmdUeXBlNSBzdHJpbmc1KQotewotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBs
ID0gdHJ5TWFrZVN0cmluZyhzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczLCBzdHJpbmc0LCBzdHJp
bmc1KTsKLSAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJu
IFdURjo6bW92ZShyZXN1bHRJbXBsKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlw
ZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUg
U3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1LCB0eXBlbmFtZSBTdHJpbmdUeXBlNj4K
LVN0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmlu
ZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1
IHN0cmluZzUsIFN0cmluZ1R5cGU2IHN0cmluZzYpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorU3Ry
aW5nIG1ha2VTdHJpbmcoVCYmIHN0cmluZzEpCiB7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJl
c3VsdEltcGwgPSB0cnlNYWtlU3RyaW5nKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMsIHN0cmlu
ZzQsIHN0cmluZzUsIHN0cmluZzYpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgQ1JB
U0goKTsKLSAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdEltcGwpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmlu
Z1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTUsIHR5cGVu
YW1lIFN0cmluZ1R5cGU2LCB0eXBlbmFtZSBTdHJpbmdUeXBlNz4KLVN0cmluZyBtYWtlU3RyaW5n
KFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0
cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5
cGU2IHN0cmluZzYsIFN0cmluZ1R5cGU3IHN0cmluZzcpCi17Ci0gICAgUmVmUHRyPFN0cmluZ0lt
cGw+IHJlc3VsdEltcGwgPSB0cnlNYWtlU3RyaW5nKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMs
IHN0cmluZzQsIHN0cmluZzUsIHN0cmluZzYsIHN0cmluZzcpOwotICAgIGlmICghcmVzdWx0SW1w
bCkKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdEltcGwpOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIs
IHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3Ry
aW5nVHlwZTUsIHR5cGVuYW1lIFN0cmluZ1R5cGU2LCB0eXBlbmFtZSBTdHJpbmdUeXBlNywgdHlw
ZW5hbWUgU3RyaW5nVHlwZTg+Ci1TdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcx
LCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBz
dHJpbmc0LCBTdHJpbmdUeXBlNSBzdHJpbmc1LCBTdHJpbmdUeXBlNiBzdHJpbmc2LCBTdHJpbmdU
eXBlNyBzdHJpbmc3LCBTdHJpbmdUeXBlOCBzdHJpbmc4KQotewotICAgIFJlZlB0cjxTdHJpbmdJ
bXBsPiByZXN1bHRJbXBsID0gdHJ5TWFrZVN0cmluZyhzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmcz
LCBzdHJpbmc0LCBzdHJpbmc1LCBzdHJpbmc2LCBzdHJpbmc3LCBzdHJpbmc4KTsKLSAgICBpZiAo
IXJlc3VsdEltcGwpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIFdURjo6bW92ZShyZXN1
bHRJbXBsKTsKKyAgICByZXR1cm4gc3RkOjpmb3J3YXJkPFQ+KHN0cmluZzEpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1l
IFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTUs
IHR5cGVuYW1lIFN0cmluZ1R5cGU2LCB0eXBlbmFtZSBTdHJpbmdUeXBlNywgdHlwZW5hbWUgU3Ry
aW5nVHlwZTgsIHR5cGVuYW1lIFN0cmluZ1R5cGU5PgotU3RyaW5nIG1ha2VTdHJpbmcoU3RyaW5n
VHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywg
U3RyaW5nVHlwZTQgc3RyaW5nNCwgU3RyaW5nVHlwZTUgc3RyaW5nNSwgU3RyaW5nVHlwZTYgc3Ry
aW5nNiwgU3RyaW5nVHlwZTcgc3RyaW5nNywgU3RyaW5nVHlwZTggc3RyaW5nOCwgU3RyaW5nVHlw
ZTkgc3RyaW5nOSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUu
Li4gVHM+CitTdHJpbmcgbWFrZVN0cmluZyhUMSYmIHN0cmluZzEsIFQyJiYgc3RyaW5nMiwgVHMm
Ji4uLiBzdHJpbmdzKQogewotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gdHJ5
TWFrZVN0cmluZyhzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczLCBzdHJpbmc0LCBzdHJpbmc1LCBz
dHJpbmc2LCBzdHJpbmc3LCBzdHJpbmc4LCBzdHJpbmc5KTsKLSAgICBpZiAoIXJlc3VsdEltcGwp
CisgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdCA9IHRyeU1ha2VTdHJpbmcoc3RkOjpmb3J3
YXJkPFQxPihzdHJpbmcxKSwgc3RkOjpmb3J3YXJkPFQyPihzdHJpbmcyKSwgc3RkOjpmb3J3YXJk
PFRzPihzdHJpbmdzKS4uLik7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIENSQVNIKCk7Ci0g
ICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHRJbXBsKTsKKyAgICByZXR1cm4gV1RGOjptb3ZlKHJl
c3VsdCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvdGV4dC9TdHJpbmdPcGVyYXRvcnMuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nT3Bl
cmF0b3JzLmgKaW5kZXggY2ZkMmY2ZDZjYWNjZDE2ODY1MjVhODdlYTY4MjJkN2I0MDNjYjk1MC4u
OTFkMDc0YzBiOGVkNmE0MWQ4ZDgwZTg0MjBiY2YyNTI4MGNiMGM4NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdPcGVyYXRvcnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L1N0cmluZ09wZXJhdG9ycy5oCkBAIC0yNCwyMSArMjQsMjAgQEAKIAogbmFtZXNwYWNlIFdU
RiB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBl
Mj4KK3RlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KIGNsYXNzIFN0cmluZ0FwcGVu
ZCB7CiBwdWJsaWM6Ci0gICAgU3RyaW5nQXBwZW5kKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmlu
Z1R5cGUyIHN0cmluZzIpCi0gICAgICAgIDogbV9zdHJpbmcxKHN0cmluZzEpCi0gICAgICAgICwg
bV9zdHJpbmcyKHN0cmluZzIpCisgICAgU3RyaW5nQXBwZW5kKGNvbnN0IFQxJiBzdHJpbmcxLCBj
b25zdCBUMiYgc3RyaW5nMikKKyAgICAgICAgOiBtX3R1cGxlKHN0ZDo6bWFrZV90dXBsZShBZGFw
dGVyVHlwZTxUMT4oc3RyaW5nMSksIEFkYXB0ZXJUeXBlPFQyPihzdHJpbmcyKSkpCiAgICAgewog
ICAgIH0KIAogICAgIG9wZXJhdG9yIFN0cmluZygpIGNvbnN0CiAgICAgewotICAgICAgICBSZWZQ
dHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IHRyeU1ha2VTdHJpbmcobV9zdHJpbmcxLCBtX3N0
cmluZzIpOworICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0Fk
YXB0ZXJUdXBsZTwyLCBBZGFwdGVyVHlwZTxUMT4sIEFkYXB0ZXJUeXBlPFQyPj46OmNyZWF0ZVN0
cmluZyhtX3R1cGxlKTsKICAgICAgICAgaWYgKCFyZXN1bHRJbXBsKQogICAgICAgICAgICAgQ1JB
U0goKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdEltcGwucmVsZWFzZSgpOworICAgICAgICByZXR1
cm4gV1RGOjptb3ZlKHJlc3VsdEltcGwpOwogICAgIH0KIAogICAgIG9wZXJhdG9yIEF0b21pY1N0
cmluZygpIGNvbnN0CkBAIC00Niw1OSArNDUsNTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
b3BlcmF0b3IgU3RyaW5nKCk7CiAgICAgfQogCi0gICAgYm9vbCBpczhCaXQoKQorICAgIGJvb2wg
aXM4Qml0KCkgY29uc3QKICAgICB7Ci0gICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5
cGUxPiBhZGFwdGVyMShtX3N0cmluZzEpOwotICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJp
bmdUeXBlMj4gYWRhcHRlcjIobV9zdHJpbmcyKTsKLSAgICAgICAgcmV0dXJuIGFkYXB0ZXIxLmlz
OEJpdCgpICYmIGFkYXB0ZXIyLmlzOEJpdCgpOworICAgICAgICByZXR1cm4gc3RyaW5nMSgpLmlz
OEJpdCgpICYmIHN0cmluZzIoKS5pczhCaXQoKTsKICAgICB9CiAKLSAgICB2b2lkIHdyaXRlVG8o
TENoYXIqIGRlc3RpbmF0aW9uKQorICAgIHZvaWQgd3JpdGVUbyhMQ2hhciogZGVzdGluYXRpb24p
IGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXM4Qml0KCkpOwotICAgICAgICBTdHJpbmdU
eXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEobV9zdHJpbmcxKTsKLSAgICAgICAgU3Ry
aW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKG1fc3RyaW5nMik7Ci0gICAgICAg
IGFkYXB0ZXIxLndyaXRlVG8oZGVzdGluYXRpb24pOwotICAgICAgICBhZGFwdGVyMi53cml0ZVRv
KGRlc3RpbmF0aW9uICsgYWRhcHRlcjEubGVuZ3RoKCkpOworICAgICAgICBzdHJpbmcxKCkud3Jp
dGVUbyhkZXN0aW5hdGlvbik7CisgICAgICAgIHN0cmluZzIoKS53cml0ZVRvKGRlc3RpbmF0aW9u
ICsgc3RyaW5nMSgpLmxlbmd0aCgpKTsKICAgICB9CiAKLSAgICB2b2lkIHdyaXRlVG8oVUNoYXIq
IGRlc3RpbmF0aW9uKQorICAgIHZvaWQgd3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pIGNvbnN0
CiAgICAgewotICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEo
bV9zdHJpbmcxKTsKLSAgICAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0
ZXIyKG1fc3RyaW5nMik7Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRlVG8oZGVzdGluYXRpb24pOwot
ICAgICAgICBhZGFwdGVyMi53cml0ZVRvKGRlc3RpbmF0aW9uICsgYWRhcHRlcjEubGVuZ3RoKCkp
OworICAgICAgICBzdHJpbmcxKCkud3JpdGVUbyhkZXN0aW5hdGlvbik7CisgICAgICAgIHN0cmlu
ZzIoKS53cml0ZVRvKGRlc3RpbmF0aW9uICsgc3RyaW5nMSgpLmxlbmd0aCgpKTsKICAgICB9CiAK
LSAgICB1bnNpZ25lZCBsZW5ndGgoKQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0CiAgICAg
ewotICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEobV9zdHJp
bmcxKTsKLSAgICAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKG1f
c3RyaW5nMik7Ci0gICAgICAgIHJldHVybiBhZGFwdGVyMS5sZW5ndGgoKSArIGFkYXB0ZXIyLmxl
bmd0aCgpOworICAgICAgICByZXR1cm4gc3RyaW5nMSgpLmxlbmd0aCgpICsgc3RyaW5nMigpLmxl
bmd0aCgpOwogICAgIH0gICAgCiAKIHByaXZhdGU6Ci0gICAgU3RyaW5nVHlwZTEgbV9zdHJpbmcx
OwotICAgIFN0cmluZ1R5cGUyIG1fc3RyaW5nMjsKKyAgICBzdGQ6OnR1cGxlPEFkYXB0ZXJUeXBl
PFQxPiwgQWRhcHRlclR5cGU8VDI+PiBtX3R1cGxlOworICAgIGNvbnN0IEFkYXB0ZXJUeXBlPFQx
PiYgc3RyaW5nMSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6Z2V0PDA+KG1fdHVwbGUpOyB9CisgICAg
Y29uc3QgQWRhcHRlclR5cGU8VDI+JiBzdHJpbmcyKCkgY29uc3QgeyByZXR1cm4gc3RkOjpnZXQ8
MT4obV90dXBsZSk7IH0KIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBl
bmFtZSBTdHJpbmdUeXBlMj4KIGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ0FwcGVuZDxT
dHJpbmdUeXBlMSwgU3RyaW5nVHlwZTI+PiB7CiBwdWJsaWM6Ci0gICAgU3RyaW5nVHlwZUFkYXB0
ZXI8U3RyaW5nQXBwZW5kPFN0cmluZ1R5cGUxLCBTdHJpbmdUeXBlMj4+KFN0cmluZ0FwcGVuZDxT
dHJpbmdUeXBlMSwgU3RyaW5nVHlwZTI+JiBidWZmZXIpCisgICAgU3RyaW5nVHlwZUFkYXB0ZXI8
U3RyaW5nQXBwZW5kPFN0cmluZ1R5cGUxLCBTdHJpbmdUeXBlMj4+KGNvbnN0IFN0cmluZ0FwcGVu
ZDxTdHJpbmdUeXBlMSwgU3RyaW5nVHlwZTI+JiBidWZmZXIpCiAgICAgICAgIDogbV9idWZmZXIo
YnVmZmVyKQogICAgIHsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBt
X2J1ZmZlci5sZW5ndGgoKTsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fYnVmZmVyLmxlbmd0aCgpOyB9CiAKLSAgICBib29sIGlzOEJpdCgpIHsgcmV0dXJuIG1fYnVm
ZmVyLmlzOEJpdCgpOyB9CisgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZl
ci5pczhCaXQoKTsgfQogCi0gICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikgeyBt
X2J1ZmZlci53cml0ZVRvKGRlc3RpbmF0aW9uKTsgfQotICAgIHZvaWQgd3JpdGVUbyhVQ2hhciog
ZGVzdGluYXRpb24pIHsgbV9idWZmZXIud3JpdGVUbyhkZXN0aW5hdGlvbik7IH0KKyAgICB2b2lk
IHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0aW9uKSBjb25zdCB7IG1fYnVmZmVyLndyaXRlVG8oZGVz
dGluYXRpb24pOyB9CisgICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikgY29uc3Qg
eyBtX2J1ZmZlci53cml0ZVRvKGRlc3RpbmF0aW9uKTsgfQogCiBwcml2YXRlOgotICAgIFN0cmlu
Z0FwcGVuZDxTdHJpbmdUeXBlMSwgU3RyaW5nVHlwZTI+JiBtX2J1ZmZlcjsKKyAgICBjb25zdCBT
dHJpbmdBcHBlbmQ8U3RyaW5nVHlwZTEsIFN0cmluZ1R5cGUyPiYgbV9idWZmZXI7CiB9OwogCiBp
bmxpbmUgU3RyaW5nQXBwZW5kPGNvbnN0IGNoYXIqLCBTdHJpbmc+IG9wZXJhdG9yKyhjb25zdCBj
aGFyKiBzdHJpbmcxLCBjb25zdCBTdHJpbmcmIHN0cmluZzIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>257573</attachid>
            <date>2015-07-27 11:27:06 -0700</date>
            <delta_ts>2016-12-12 18:01:30 -0800</delta_ts>
            <desc>New StringConcatenate.h</desc>
            <filename>StringConcatenate.h</filename>
            <type>text/plain</type>
            <size>11430</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">LyoKICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0OgogKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
ICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgogKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAogKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAogKi8KCiNpZm5kZWYgU3RyaW5nQ29uY2F0ZW5hdGVfaAojZGVmaW5l
IFN0cmluZ0NvbmNhdGVuYXRlX2gKCiNpbmNsdWRlIDxzdHJpbmcuaD4KCiNpZm5kZWYgQXRvbWlj
U3RyaW5nX2gKI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgojZW5kaWYKCiNpZm5k
ZWYgU3RyaW5nVmlld19oCiNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiNlbmRpZgoK
Ly8gVGhpcyBtYWNybyBpcyBoZWxwZnVsIGZvciB0ZXN0aW5nIGhvdyBtYW55IGludGVybWVkaWF0
ZSBTdHJpbmdzIGFyZSBjcmVhdGVkIHdoaWxlIGV2YWx1YXRpbmcgYW4KLy8gZXhwcmVzc2lvbiBj
b250YWluaW5nIG9wZXJhdG9yKy4KI2lmbmRlZiBXVEZfU1RSSU5HVFlQRUFEQVBURVJfQ09QSUVE
X1dURl9TVFJJTkcKI2RlZmluZSBXVEZfU1RSSU5HVFlQRUFEQVBURVJfQ09QSUVEX1dURl9TVFJJ
TkcoKSAoKHZvaWQpMCkKI2VuZGlmCgpuYW1lc3BhY2UgV1RGIHsKCnRlbXBsYXRlPHR5cGVuYW1l
IFN0cmluZ1R5cGU+CmNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyOwoKdGVtcGxhdGU8PgpjbGFzcyBT
dHJpbmdUeXBlQWRhcHRlcjxjaGFyPiB7CnB1YmxpYzoKICAgIFN0cmluZ1R5cGVBZGFwdGVyPGNo
YXI+KGNoYXIgY2hhcmFjdGVyKQogICAgICAgIDogbV9jaGFyYWN0ZXIoY2hhcmFjdGVyKQogICAg
ewogICAgfQoKICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KICAgIGJv
b2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQoKICAgIHZvaWQgd3JpdGVUbyhMQ2hh
ciogZGVzdGluYXRpb24pIGNvbnN0CiAgICB7CiAgICAgICAgKmRlc3RpbmF0aW9uID0gbV9jaGFy
YWN0ZXI7CiAgICB9CgogICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QK
ICAgIHsKICAgICAgICAqZGVzdGluYXRpb24gPSBtX2NoYXJhY3RlcjsKICAgIH0KCnByaXZhdGU6
CiAgICBjaGFyIG1fY2hhcmFjdGVyOwp9OwoKdGVtcGxhdGU8PgpjbGFzcyBTdHJpbmdUeXBlQWRh
cHRlcjxVQ2hhcj4gewpwdWJsaWM6CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxVQ2hhcj4oVUNoYXIg
Y2hhcmFjdGVyKQogICAgICAgIDogbV9jaGFyYWN0ZXIoY2hhcmFjdGVyKQogICAgewogICAgfQoK
ICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KICAgIGJvb2wgaXM4Qml0
KCkgY29uc3QgeyByZXR1cm4gbV9jaGFyYWN0ZXIgPD0gMHhmZjsgfQoKICAgIHZvaWQgd3JpdGVU
byhMQ2hhciogZGVzdGluYXRpb24pIGNvbnN0CiAgICB7CiAgICAgICAgQVNTRVJUKGlzOEJpdCgp
KTsKICAgICAgICAqZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDxMQ2hhcj4obV9jaGFyYWN0ZXIp
OwogICAgfQoKICAgIHZvaWQgd3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pIGNvbnN0CiAgICB7
CiAgICAgICAgKmRlc3RpbmF0aW9uID0gbV9jaGFyYWN0ZXI7CiAgICB9Cgpwcml2YXRlOgogICAg
VUNoYXIgbV9jaGFyYWN0ZXI7Cn07Cgp0ZW1wbGF0ZTxzaXplX3Qgc3RyaW5nTGl0ZXJhbExlbmd0
aD4KY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8Y2hhcltzdHJpbmdMaXRlcmFsTGVuZ3RoXT4gewpw
dWJsaWM6CiAgICBTdHJpbmdUeXBlQWRhcHRlcihjb25zdCBjaGFyICgmc3RyaW5nTGl0ZXJhbClb
c3RyaW5nTGl0ZXJhbExlbmd0aF0pCiAgICAgICAgOiBtX3N0cmluZyhyZWludGVycHJldF9jYXN0
PGNvbnN0IExDaGFyKj4oc3RyaW5nTGl0ZXJhbCkpCiAgICB7CiAgICB9CgogICAgdW5zaWduZWQg
bGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gc3RyaW5nTGl0ZXJhbExlbmd0aCAtIDE7IH0KICAgIGJv
b2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQoKICAgIHZvaWQgd3JpdGVUbyhMQ2hh
ciogZGVzdGluYXRpb24pIGNvbnN0CiAgICB7CiAgICAgICAgU3RyaW5nVmlldyhtX3N0cmluZywg
bGVuZ3RoKCkpLmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KGRlc3RpbmF0aW9uKTsKICAgIH0K
CiAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAogICAgewogICAgICAg
IFN0cmluZ1ZpZXcobV9zdHJpbmcsIGxlbmd0aCgpKS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVy
dChkZXN0aW5hdGlvbik7CiAgICB9Cgpwcml2YXRlOgogICAgY29uc3QgTENoYXIqIG1fc3RyaW5n
Owp9OwoKdGVtcGxhdGU8c2l6ZV90IHN0cmluZ0xpdGVyYWxMZW5ndGg+CmNsYXNzIFN0cmluZ1R5
cGVBZGFwdGVyPGNvbnN0IGNoYXJbc3RyaW5nTGl0ZXJhbExlbmd0aF0+IDogcHVibGljIFN0cmlu
Z1R5cGVBZGFwdGVyPGNoYXJbc3RyaW5nTGl0ZXJhbExlbmd0aF0+IHsKcHVibGljOgogICAgU3Ry
aW5nVHlwZUFkYXB0ZXIoY29uc3QgY2hhciAoJnN0cmluZ0xpdGVyYWwpW3N0cmluZ0xpdGVyYWxM
ZW5ndGhdKQogICAgICAgIDogU3RyaW5nVHlwZUFkYXB0ZXI8Y2hhcltzdHJpbmdMaXRlcmFsTGVu
Z3RoXT4oc3RyaW5nTGl0ZXJhbCkKICAgIHsKICAgIH0KfTsKCnRlbXBsYXRlPHNpemVfdCBzdHJp
bmdMaXRlcmFsTGVuZ3RoPgpjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxVQ2hhcltzdHJpbmdMaXRl
cmFsTGVuZ3RoXT4gewpwdWJsaWM6CiAgICBTdHJpbmdUeXBlQWRhcHRlcihjb25zdCBVQ2hhciAo
JnN0cmluZ0xpdGVyYWwpW3N0cmluZ0xpdGVyYWxMZW5ndGhdKQogICAgICAgIDogbV9zdHJpbmco
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHN0cmluZ0xpdGVyYWwpKQogICAgewogICAg
fQoKICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHN0cmluZ0xpdGVyYWxMZW5n
dGggLSAxOyB9CiAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CgogICAg
Tk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIHdyaXRlVG8oTENoYXIqKSBjb25zdAogICAgewog
ICAgICAgIENSQVNIKCk7CiAgICB9CgogICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlv
bikgY29uc3QKICAgIHsKICAgICAgICBTdHJpbmdWaWV3KG1fc3RyaW5nLCBsZW5ndGgoKSkuZ2V0
Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoZGVzdGluYXRpb24pOwogICAgfQoKcHJpdmF0ZToKICAg
IGNvbnN0IFVDaGFyKiBtX3N0cmluZzsKfTsKCnRlbXBsYXRlPHNpemVfdCBzdHJpbmdMaXRlcmFs
TGVuZ3RoPgpjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBVQ2hhcltzdHJpbmdMaXRlcmFs
TGVuZ3RoXT4gOiBwdWJsaWMgU3RyaW5nVHlwZUFkYXB0ZXI8VUNoYXJbc3RyaW5nTGl0ZXJhbExl
bmd0aF0+IHsKcHVibGljOgogICAgU3RyaW5nVHlwZUFkYXB0ZXIoY29uc3QgVUNoYXIgKCZzdHJp
bmdMaXRlcmFsKVtzdHJpbmdMaXRlcmFsTGVuZ3RoXSkKICAgICAgICA6IFN0cmluZ1R5cGVBZGFw
dGVyPFVDaGFyW3N0cmluZ0xpdGVyYWxMZW5ndGhdPihzdHJpbmdMaXRlcmFsKQogICAgewogICAg
fQp9OwoKdGVtcGxhdGU8PgpjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBMQ2hhcio+IHsK
cHVibGljOgogICAgU3RyaW5nVHlwZUFkYXB0ZXIoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMpCiAg
ICAgICAgOiBtX2NoYXJhY3RlcnMoY2hhcmFjdGVycykKICAgICAgICAsIG1fbGVuZ3RoKHN0cmxl
bihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihjaGFyYWN0ZXJzKSkpCiAgICB7CiAgICB9
CgogICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KICAgIGJv
b2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQoKICAgIHZvaWQgd3JpdGVUbyhMQ2hh
ciogZGVzdGluYXRpb24pIGNvbnN0CiAgICB7CiAgICAgICAgU3RyaW5nVmlldyhtX2NoYXJhY3Rl
cnMsIG1fbGVuZ3RoKS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChkZXN0aW5hdGlvbik7CiAg
ICB9CgogICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKICAgIHsKICAg
ICAgICBTdHJpbmdWaWV3KG1fY2hhcmFjdGVycywgbV9sZW5ndGgpLmdldENoYXJhY3RlcnNXaXRo
VXBjb252ZXJ0KGRlc3RpbmF0aW9uKTsKICAgIH0KCnByaXZhdGU6CiAgICBjb25zdCBMQ2hhciog
bV9jaGFyYWN0ZXJzOwogICAgdW5zaWduZWQgbV9sZW5ndGg7Cn07Cgp0ZW1wbGF0ZTw+CmNsYXNz
IFN0cmluZ1R5cGVBZGFwdGVyPGNvbnN0IFVDaGFyKj4gewpwdWJsaWM6CiAgICBTdHJpbmdUeXBl
QWRhcHRlcihjb25zdCBVQ2hhciogY2hhcmFjdGVycykKICAgICAgICA6IG1fY2hhcmFjdGVycyhj
aGFyYWN0ZXJzKQogICAgewogICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CiAgICAgICAgd2hp
bGUgKG1fY2hhcmFjdGVyc1tsZW5ndGhdKQogICAgICAgICAgICArK2xlbmd0aDsKCiAgICAgICAg
aWYgKGxlbmd0aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKICAgICAg
ICAgICAgQ1JBU0goKTsKCiAgICAgICAgbV9sZW5ndGggPSBsZW5ndGg7CiAgICB9CgogICAgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KICAgIGJvb2wgaXM4Qml0
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KCiAgICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZv
aWQgd3JpdGVUbyhMQ2hhciopIGNvbnN0CiAgICB7CiAgICAgICAgQ1JBU0goKTsKICAgIH0KCiAg
ICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAogICAgewogICAgICAgIG1l
bWNweShkZXN0aW5hdGlvbiwgbV9jaGFyYWN0ZXJzLCBtX2xlbmd0aCAqIHNpemVvZihVQ2hhcikp
OwogICAgfQoKcHJpdmF0ZToKICAgIGNvbnN0IFVDaGFyKiBtX2NoYXJhY3RlcnM7CiAgICB1bnNp
Z25lZCBtX2xlbmd0aDsKfTsKCnRlbXBsYXRlPD4KY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8Y29u
c3QgY2hhcio+IDogcHVibGljIFN0cmluZ1R5cGVBZGFwdGVyPGNvbnN0IExDaGFyKj4gewpwdWJs
aWM6CiAgICBTdHJpbmdUeXBlQWRhcHRlcihjb25zdCBjaGFyKiBjaGFyYWN0ZXJzKQogICAgICAg
IDogU3RyaW5nVHlwZUFkYXB0ZXI8Y29uc3QgTENoYXIqPihyZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4oY2hhcmFjdGVycykpCiAgICB7CiAgICB9Cn07Cgp0ZW1wbGF0ZTw+CmNsYXNzIFN0
cmluZ1R5cGVBZGFwdGVyPGNoYXIqPiA6IHB1YmxpYyBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBj
aGFyKj4gewpwdWJsaWM6CiAgICBTdHJpbmdUeXBlQWRhcHRlcihjb25zdCBjaGFyKiBjaGFyYWN0
ZXJzKQogICAgICAgIDogU3RyaW5nVHlwZUFkYXB0ZXI8Y29uc3QgY2hhcio+KGNoYXJhY3RlcnMp
CiAgICB7CiAgICB9Cn07Cgp0ZW1wbGF0ZTw+CmNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPEFTQ0lJ
TGl0ZXJhbD4gOiBwdWJsaWMgU3RyaW5nVHlwZUFkYXB0ZXI8Y29uc3QgY2hhcio+IHsKcHVibGlj
OgogICAgU3RyaW5nVHlwZUFkYXB0ZXIoQVNDSUlMaXRlcmFsIGNoYXJhY3RlcnMpCiAgICAgICAg
OiBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBjaGFyKj4oY2hhcmFjdGVycykKICAgIHsKICAgIH0K
fTsKCnRlbXBsYXRlPD4KY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8VmVjdG9yPGNoYXI+PiB7CnB1
YmxpYzoKICAgIFN0cmluZ1R5cGVBZGFwdGVyKGNvbnN0IFZlY3RvcjxjaGFyPiYgdmVjdG9yKQog
ICAgICAgIDogbV92ZWN0b3IodmVjdG9yKQogICAgewogICAgfQoKICAgIHNpemVfdCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5zaXplKCk7IH0KICAgIGJvb2wgaXM4Qml0KCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQoKICAgIHZvaWQgd3JpdGVUbyhMQ2hhciogZGVzdGluYXRpb24p
IGNvbnN0CiAgICB7CiAgICAgICAgU3RyaW5nVmlldyhyZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4obV92ZWN0b3IuZGF0YSgpKSwgbV92ZWN0b3Iuc2l6ZSgpKS5nZXRDaGFyYWN0ZXJzV2l0
aFVwY29udmVydChkZXN0aW5hdGlvbik7CiAgICB9CgogICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBk
ZXN0aW5hdGlvbikgY29uc3QKICAgIHsKICAgICAgICBTdHJpbmdWaWV3KHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgTENoYXIqPihtX3ZlY3Rvci5kYXRhKCkpLCBtX3ZlY3Rvci5zaXplKCkpLmdldENo
YXJhY3RlcnNXaXRoVXBjb252ZXJ0KGRlc3RpbmF0aW9uKTsKICAgIH0KCnByaXZhdGU6CiAgICBj
b25zdCBWZWN0b3I8Y2hhcj4mIG1fdmVjdG9yOwp9OwoKdGVtcGxhdGU8PgpjbGFzcyBTdHJpbmdU
eXBlQWRhcHRlcjxTdHJpbmc+IHsKcHVibGljOgogICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5n
Pihjb25zdCBTdHJpbmcmIHN0cmluZykKICAgICAgICA6IG1fc3RyaW5nKHN0cmluZykKICAgIHsK
ICAgIH0KCiAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5sZW5n
dGgoKTsgfQogICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5pc051bGwo
KSB8fCBtX3N0cmluZy5pczhCaXQoKTsgfQoKICAgIHZvaWQgd3JpdGVUbyhMQ2hhciogZGVzdGlu
YXRpb24pIGNvbnN0CiAgICB7CiAgICAgICAgU3RyaW5nVmlldyhtX3N0cmluZykuZ2V0Q2hhcmFj
dGVyc1dpdGhVcGNvbnZlcnQoZGVzdGluYXRpb24pOwogICAgICAgIFdURl9TVFJJTkdUWVBFQURB
UFRFUl9DT1BJRURfV1RGX1NUUklORygpOwogICAgfQoKICAgIHZvaWQgd3JpdGVUbyhVQ2hhciog
ZGVzdGluYXRpb24pIGNvbnN0CiAgICB7CiAgICAgICAgU3RyaW5nVmlldyhtX3N0cmluZykuZ2V0
Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoZGVzdGluYXRpb24pOwogICAgICAgIFdURl9TVFJJTkdU
WVBFQURBUFRFUl9DT1BJRURfV1RGX1NUUklORygpOwogICAgfQoKcHJpdmF0ZToKICAgIGNvbnN0
IFN0cmluZyYgbV9zdHJpbmc7Cn07Cgp0ZW1wbGF0ZTw+CmNsYXNzIFN0cmluZ1R5cGVBZGFwdGVy
PEF0b21pY1N0cmluZz4gOiBwdWJsaWMgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nPiB7CnB1Ymxp
YzoKICAgIFN0cmluZ1R5cGVBZGFwdGVyKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nKQogICAg
ICAgIDogU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nPihzdHJpbmcuc3RyaW5nKCkpCiAgICB7CiAg
ICB9Cn07Cgp0ZW1wbGF0ZTxzaXplX3QgaW5kZXgsIHR5cGVuYW1lLi4uIEFkYXB0ZXJzPgpzdHJ1
Y3QgU3RyaW5nQWRhcHRlclR1cGxlIHsKICAgIHN0YXRpYyBpbmxpbmUgQ2hlY2tlZDx1bnNpZ25l
ZCwgUmVjb3JkT3ZlcmZsb3c+IHN1bVdpdGhPdmVyZmxvdyhjb25zdCBzdGQ6OnR1cGxlPEFkYXB0
ZXJzLi4uPiYgdHVwbGUpCiAgICB7CiAgICAgICAgYXV0byYgYWRhcHRlciA9IHN0ZDo6Z2V0PHNp
emVvZi4uLihBZGFwdGVycykgLSBpbmRleD4odHVwbGUpOwogICAgICAgIHJldHVybiBDaGVja2Vk
PHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4oYWRhcHRlci5sZW5ndGgoKSkgKyBTdHJpbmdBZGFw
dGVyVHVwbGU8aW5kZXggLSAxLCBBZGFwdGVycy4uLj46OnN1bVdpdGhPdmVyZmxvdyh0dXBsZSk7
CiAgICB9CgogICAgc3RhdGljIGlubGluZSBib29sIGlzOEJpdChjb25zdCBzdGQ6OnR1cGxlPEFk
YXB0ZXJzLi4uPiYgdHVwbGUpCiAgICB7CiAgICAgICAgYXV0byYgYWRhcHRlciA9IHN0ZDo6Z2V0
PHNpemVvZi4uLihBZGFwdGVycykgLSBpbmRleD4odHVwbGUpOwogICAgICAgIHJldHVybiBhZGFw
dGVyLmlzOEJpdCgpICYmIFN0cmluZ0FkYXB0ZXJUdXBsZTxpbmRleCAtIDEsIEFkYXB0ZXJzLi4u
Pjo6aXM4Qml0KHR1cGxlKTsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgc3Rh
dGljIGlubGluZSB2b2lkIHdyaXRlVG8oVCogYnVmZmVyLCBjb25zdCBzdGQ6OnR1cGxlPEFkYXB0
ZXJzLi4uPiYgdHVwbGUpCiAgICB7CiAgICAgICAgYXV0byYgYWRhcHRlciA9IHN0ZDo6Z2V0PHNp
emVvZi4uLihBZGFwdGVycykgLSBpbmRleD4odHVwbGUpOwogICAgICAgIGFkYXB0ZXIud3JpdGVU
byhidWZmZXIpOwogICAgICAgIFN0cmluZ0FkYXB0ZXJUdXBsZTxpbmRleCAtIDEsIEFkYXB0ZXJz
Li4uPjo6d3JpdGVUbyhidWZmZXIgKyBhZGFwdGVyLmxlbmd0aCgpLCB0dXBsZSk7CiAgICB9Cgog
ICAgc3RhdGljIGlubGluZSBSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlU3RyaW5nKGNvbnN0IHN0
ZDo6dHVwbGU8QWRhcHRlcnMuLi4+JiBhZGFwdGVycykKICAgIHsKICAgICAgICB1bnNpZ25lZCBs
ZW5ndGggPSAwOwogICAgICAgIGlmIChzdW1XaXRoT3ZlcmZsb3coYWRhcHRlcnMpLnNhZmVHZXQo
bGVuZ3RoKSA9PSBDaGVja2VkU3RhdGU6OkRpZE92ZXJmbG93KQogICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKCiAgICAgICAgaWYgKGlzOEJpdChhZGFwdGVycykpIHsKICAgICAgICAgICAgTENo
YXIqIGJ1ZmZlcjsKICAgICAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdCA9IFN0cmlu
Z0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwogICAgICAgICAg
ICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwoKICAgICAgICAg
ICAgd3JpdGVUbyhidWZmZXIsIGFkYXB0ZXJzKTsKICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICB9CgogICAgICAgIFVDaGFyKiBidWZmZXI7CiAgICAgICAgUmVmUHRyPFN0cmluZ0lt
cGw+IHJlc3VsdCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBi
dWZmZXIpOwogICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
CiAgICAgICAgd3JpdGVUbyhidWZmZXIsIGFkYXB0ZXJzKTsKICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgfQp9OwoKdGVtcGxhdGU8dHlwZW5hbWUuLi4gQWRhcHRlcnM+CnN0cnVjdCBTdHJpbmdB
ZGFwdGVyVHVwbGU8MCwgQWRhcHRlcnMuLi4+IHsKICAgIHN0YXRpYyBDaGVja2VkPHVuc2lnbmVk
LCBSZWNvcmRPdmVyZmxvdz4gc3VtV2l0aE92ZXJmbG93KGNvbnN0IHN0ZDo6dHVwbGU8QWRhcHRl
cnMuLi4+JikgeyByZXR1cm4gMDsgfQogICAgc3RhdGljIGJvb2wgaXM4Qml0KGNvbnN0IHN0ZDo6
dHVwbGU8QWRhcHRlcnMuLi4+JikgeyByZXR1cm4gdHJ1ZTsgfQogICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RhdGljIHZvaWQgd3JpdGVUbyhUKiwgY29uc3Qgc3RkOjp0dXBsZTxBZGFwdGVycy4u
Lj4mKSB7IH0KfTsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnVzaW5nIEFkYXB0ZXJUeXBlID0gU3Ry
aW5nVHlwZUFkYXB0ZXI8dHlwZW5hbWUgc3RkOjpkZWNheTxUPjo6dHlwZT47Cgp0ZW1wbGF0ZTx0
eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lLi4uIFRzPgpSZWZQdHI8U3RyaW5nSW1w
bD4gdHJ5TWFrZVN0cmluZyhUMSYmIHN0cmluZzEsIFQyJiYgc3RyaW5nMiwgVHMmJi4uLiBzdHJp
bmdzKQp7CiAgICBhdXRvIGFkYXB0ZXJzID0gc3RkOjptYWtlX3R1cGxlKEFkYXB0ZXJUeXBlPFQx
PihzdGQ6OmZvcndhcmQ8VDE+KHN0cmluZzEpKSwgQWRhcHRlclR5cGU8VDI+KHN0ZDo6Zm9yd2Fy
ZDxUMj4oc3RyaW5nMikpLCBBZGFwdGVyVHlwZTxUcz4oc3RkOjpmb3J3YXJkPFRzPihzdHJpbmdz
KSkuLi4pOwogICAgcmV0dXJuIFN0cmluZ0FkYXB0ZXJUdXBsZTwyICsgc2l6ZW9mLi4uKFRzKSwg
QWRhcHRlclR5cGU8VDE+LCBBZGFwdGVyVHlwZTxUMj4sIEFkYXB0ZXJUeXBlPFRzPi4uLj46OmNy
ZWF0ZVN0cmluZyhhZGFwdGVycyk7Cn0KCi8vIENvbnZlbmllbmNlIG9ubHkuCnRlbXBsYXRlPHR5
cGVuYW1lIFQ+ClN0cmluZyBtYWtlU3RyaW5nKFQmJiBzdHJpbmcxKQp7CiAgICByZXR1cm4gc3Rk
Ojpmb3J3YXJkPFQ+KHN0cmluZzEpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUg
VDIsIHR5cGVuYW1lLi4uIFRzPgpTdHJpbmcgbWFrZVN0cmluZyhUMSYmIHN0cmluZzEsIFQyJiYg
c3RyaW5nMiwgVHMmJi4uLiBzdHJpbmdzKQp7CiAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0
ID0gdHJ5TWFrZVN0cmluZyhzdGQ6OmZvcndhcmQ8VDE+KHN0cmluZzEpLCBzdGQ6OmZvcndhcmQ8
VDI+KHN0cmluZzIpLCBzdGQ6OmZvcndhcmQ8VHM+KHN0cmluZ3MpLi4uKTsKICAgIGlmICghcmVz
dWx0KQogICAgICAgIENSQVNIKCk7CiAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdCk7Cn0KCn0g
Ly8gbmFtZXNwYWNlIFdURgoKdXNpbmcgV1RGOjptYWtlU3RyaW5nOwoKI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ09wZXJhdG9ycy5oPgojZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258102</attachid>
            <date>2015-08-03 13:13:40 -0700</date>
            <delta_ts>2016-07-23 03:42:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147142-20150803221333.patch</filename>
            <type>text/plain</type>
            <size>34115</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3NzMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDY4ZmU3NmUzNmNkMjhkNWQzYzgwYWEy
ZGM3ZWQ5YzQwYmU1N2QzZDEuLjUyNjljYTE0MDk4NDA4MTk0NGJhYTE1YTRlYTVmMzYwYTVmN2Ey
M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTUtMDgtMDMgIFphbiBEb2JlcnNlayAgPHpkb2Jl
cnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtXVEZdIFR1cm4gdHJ5TWFrZVN0cmluZygpLCBt
YWtlU3RyaW5nKCkgaW50byB2YXJpYWRpYyB0ZW1wbGF0ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzE0MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1aWx0IHVwb24gdGhlIG9yaWdpbmFsIHdvcmsg
YnkgQW5kZXJzIENhcmxzc29uLCBNYXJrIFJvd2UgYW5kIFNhbSBXZWluaWcuCisKKyAgICAgICAg
SW1wbGVtZW50IHRyeU1ha2VTdHJpbmcoKSBhbmQgbWFrZVN0cmluZygpIGFzIHZhcmlhZGljIHRl
bXBsYXRlcywgcmVwbGFjaW5nCisgICAgICAgIHRoZSBhcmd1bWVudCBjb3VudC1iYXNlZCBvdmVy
bG9hZHMuCisKKyAgICAgICAgdHJ5TWFrZVN0cmluZygpIG5vdyBjb25zdHJ1Y3RzIGEgc3RhY2st
YmFzZWQgdHVwbGUgb2YgbmVjZXNzYXJ5IFN0cmluZ1R5cGVBZGFwdGVyCisgICAgICAgIG9iamVj
dHMgYW5kIHV0aWxpemVzIHRoZSBTdHJpbmdBZGFwdGVyVHVwbGUgc3RydWN0IHRlbXBsYXRlIHRv
IG9wZXJhdGUgb24gdGhhdAorICAgICAgICB0dXBsZSwgcmVjdXJzaXZlbHkgY2FsbGluZyB0aGUg
bmVjZXNzYXJ5IG9wZXJhdGlvbnMgb24gZWFjaCBlbGVtZW50IGluIHRoZSB0dXBsZS4KKyAgICAg
ICAgVGhpcyBlZmZlY3RpdmVseSBtaW1pY3MgdGhlIHByb2Nlc3Mgb2YgcHJldmlvdXMgdHJ5TWFr
ZVN0cmluZygpIGltcGxlbWVudGF0aW9uLAorICAgICAgICBidXQgbWFrZXMgaXQgc2NhbGFibGUg
dG8gYSB0dXBsZSBvZiBlbGVtZW50cyB0aGF0IGFyZSB0byBiZSBjb25jYXRlbmF0ZWQuCisKKyAg
ICAgICAgU3RyaW5nQXBwZW5kIGNsYXNzIHRlbXBsYXRlIG5vdyBzdG9yZXMgdHdvIFN0cmluZ1R5
cGVBZGFwdGVyIG9iamVjdHMgZm9yIHRoZQorICAgICAgICB0d28gcGFzc2VkLWluIHN0cmluZyBv
YmplY3RzLCBwYWNrZWQgaW4gYSB0dXBsZSwgY2FsbGluZworICAgICAgICBTdHJpbmdBZGFwdGVy
VHVwbGU8Pjo6Y3JlYXRlU3RyaW5nKCkgZGlyZWN0bHkgd2hlbiBjb25jYXRlbmF0aW5nIHRoZSB0
d28gb2JqZWN0cworICAgICAgICBpbnRvIG9uZSBTdHJpbmcuCisKKyAgICAgICAgKiB3dGYvdGV4
dC9TdHJpbmdDb25jYXRlbmF0ZS5oOgorICAgICAgICAoV1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxj
aGFyPjo6bGVuZ3RoKToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8Y2hhcj46Omlz
OEJpdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0FkYXB0ZXJUdXBsZTo6c3VtV2l0aE92ZXJmbG93
KToKKyAgICAgICAgKFdURjo6U3RyaW5nQWRhcHRlclR1cGxlOjppczhCaXQpOgorICAgICAgICAo
V1RGOjpTdHJpbmdBZGFwdGVyVHVwbGU6OndyaXRlVG8pOgorICAgICAgICAoV1RGOjpTdHJpbmdB
ZGFwdGVyVHVwbGU6OmNyZWF0ZVN0cmluZyk6CisgICAgICAgIChXVEY6OnRyeU1ha2VTdHJpbmcp
OgorICAgICAgICAoV1RGOjptYWtlU3RyaW5nKToKKyAgICAgICAgKFdURjo6c3VtV2l0aE92ZXJm
bG93KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdPcGVyYXRvcnMuaDoKKyAg
ICAgICAgKFdURjo6U3RyaW5nQXBwZW5kOjpTdHJpbmdBcHBlbmQpOgorICAgICAgICAoV1RGOjpT
dHJpbmdBcHBlbmQ6Om9wZXJhdG9yIFN0cmluZyk6CisgICAgICAgIChXVEY6OlN0cmluZ0FwcGVu
ZDo6aXM4Qml0KToKKyAgICAgICAgKFdURjo6U3RyaW5nQXBwZW5kOjp3cml0ZVRvKToKKyAgICAg
ICAgKFdURjo6U3RyaW5nQXBwZW5kOjpsZW5ndGgpOgorICAgICAgICAoV1RGOjpTdHJpbmdBcHBl
bmQ6OnN0cmluZzEpOgorICAgICAgICAoV1RGOjpTdHJpbmdBcHBlbmQ6OnN0cmluZzIpOgorCiAy
MDE1LTA4LTAyICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIEludmVzdGlnYXRlIEhhc2hUYWJsZTo6SGFzaFRhYmxlKGNvbnN0IEhhc2hUYWJsZSYpIGFu
ZCBIYXNoVGFibGU6Om9wZXJhdG9yPShjb25zdCBIYXNoVGFibGUmKSBwZXJmb3JtYW5jZSBmb3Ig
aGFzaC1iYXNlZCBzdGF0aWMgYW5hbHlzZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvU3RyaW5nQ29uY2F0ZW5hdGUuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29uY2F0
ZW5hdGUuaAppbmRleCA4Y2M0YjU4ZTIwNTMzZmFmNDEzNDJhZGE4YWZkOWFmODE2MGEwNTAzLi5m
NWNmMzY2NmQxMWMyMzY5YTg2YWE4MmUyNjc5Y2IxNzczNWE3Y2I1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmgKKysrIGIvU291cmNlL1dURi93dGYv
dGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCkBAIC01NSw4ICs1NSw4IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgfQogCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gMTsgfQotICAgIGJvb2wg
aXM4Qml0KCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIDE7IH0KKyAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAog
ICAgIHZvaWQgd3JpdGVUbyhMQ2hhciogZGVzdGluYXRpb24pIGNvbnN0CiAgICAgewpAQCAtOTgs
NiArOTgsNzQgQEAgcHJpdmF0ZToKICAgICBVQ2hhciBtX2NoYXJhY3RlcjsKIH07CiAKK3RlbXBs
YXRlPHNpemVfdCBzdHJpbmdMaXRlcmFsTGVuZ3RoPgorY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8
Y2hhcltzdHJpbmdMaXRlcmFsTGVuZ3RoXT4geworcHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFw
dGVyKGNvbnN0IGNoYXIgKCZzdHJpbmdMaXRlcmFsKVtzdHJpbmdMaXRlcmFsTGVuZ3RoXSkKKyAg
ICAgICAgOiBtX3N0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oc3RyaW5nTGl0
ZXJhbCkpCisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIHN0cmluZ0xpdGVyYWxMZW5ndGggLSAxOyB9CisgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CisKKyAgICB2b2lkIHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0aW9uKSBj
b25zdAorICAgIHsKKyAgICAgICAgU3RyaW5nVmlldyhtX3N0cmluZywgbGVuZ3RoKCkpLmdldENo
YXJhY3RlcnNXaXRoVXBjb252ZXJ0KGRlc3RpbmF0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHdy
aXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgU3RyaW5nVmll
dyhtX3N0cmluZywgbGVuZ3RoKCkpLmdldENoYXJhY3RlcnNXaXRoVXBjb252ZXJ0KGRlc3RpbmF0
aW9uKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgTENoYXIqIG1fc3RyaW5nOworfTsK
KwordGVtcGxhdGU8c2l6ZV90IHN0cmluZ0xpdGVyYWxMZW5ndGg+CitjbGFzcyBTdHJpbmdUeXBl
QWRhcHRlcjxjb25zdCBjaGFyW3N0cmluZ0xpdGVyYWxMZW5ndGhdPiA6IHB1YmxpYyBTdHJpbmdU
eXBlQWRhcHRlcjxjaGFyW3N0cmluZ0xpdGVyYWxMZW5ndGhdPiB7CitwdWJsaWM6CisgICAgU3Ry
aW5nVHlwZUFkYXB0ZXIoY29uc3QgY2hhciAoJnN0cmluZ0xpdGVyYWwpW3N0cmluZ0xpdGVyYWxM
ZW5ndGhdKQorICAgICAgICA6IFN0cmluZ1R5cGVBZGFwdGVyPGNoYXJbc3RyaW5nTGl0ZXJhbExl
bmd0aF0+KHN0cmluZ0xpdGVyYWwpCisgICAgeworICAgIH0KK307CisKK3RlbXBsYXRlPHNpemVf
dCBzdHJpbmdMaXRlcmFsTGVuZ3RoPgorY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8VUNoYXJbc3Ry
aW5nTGl0ZXJhbExlbmd0aF0+IHsKK3B1YmxpYzoKKyAgICBTdHJpbmdUeXBlQWRhcHRlcihjb25z
dCBVQ2hhciAoJnN0cmluZ0xpdGVyYWwpW3N0cmluZ0xpdGVyYWxMZW5ndGhdKQorICAgICAgICA6
IG1fc3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihzdHJpbmdMaXRlcmFsKSkK
KyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gc3Ry
aW5nTGl0ZXJhbExlbmd0aCAtIDE7IH0KKyAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisKKyAgICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgd3JpdGVUbyhMQ2hh
ciopIGNvbnN0CisgICAgeworICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAgIHZvaWQgd3Jp
dGVUbyhVQ2hhciogZGVzdGluYXRpb24pIGNvbnN0CisgICAgeworICAgICAgICBTdHJpbmdWaWV3
KG1fc3RyaW5nLCBsZW5ndGgoKSkuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoZGVzdGluYXRp
b24pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBVQ2hhciogbV9zdHJpbmc7Cit9Owor
Cit0ZW1wbGF0ZTxzaXplX3Qgc3RyaW5nTGl0ZXJhbExlbmd0aD4KK2NsYXNzIFN0cmluZ1R5cGVB
ZGFwdGVyPGNvbnN0IFVDaGFyW3N0cmluZ0xpdGVyYWxMZW5ndGhdPiA6IHB1YmxpYyBTdHJpbmdU
eXBlQWRhcHRlcjxVQ2hhcltzdHJpbmdMaXRlcmFsTGVuZ3RoXT4geworcHVibGljOgorICAgIFN0
cmluZ1R5cGVBZGFwdGVyKGNvbnN0IFVDaGFyICgmc3RyaW5nTGl0ZXJhbClbc3RyaW5nTGl0ZXJh
bExlbmd0aF0pCisgICAgICAgIDogU3RyaW5nVHlwZUFkYXB0ZXI8VUNoYXJbc3RyaW5nTGl0ZXJh
bExlbmd0aF0+KHN0cmluZ0xpdGVyYWwpCisgICAgeworICAgIH0KK307CisKIHRlbXBsYXRlPD4K
IGNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPGNvbnN0IExDaGFyKj4gewogcHVibGljOgpAQCAtMjQ3
LDU3MiArMzE1LDg1IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi1pbmxpbmUgdm9pZCBzdW1XaXRo
T3ZlcmZsb3codW5zaWduZWQmIHRvdGFsLCB1bnNpZ25lZCBhZGRlbmQsIGJvb2wmIG92ZXJmbG93
KQotewotICAgIHVuc2lnbmVkIG9sZFRvdGFsID0gdG90YWw7Ci0gICAgdG90YWwgPSBvbGRUb3Rh
bCArIGFkZGVuZDsKLSAgICBpZiAodG90YWwgPCBvbGRUb3RhbCkKLSAgICAgICAgb3ZlcmZsb3cg
PSB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3Ry
aW5nVHlwZTI+Ci1SZWZQdHI8U3RyaW5nSW1wbD4gdHJ5TWFrZVN0cmluZyhTdHJpbmdUeXBlMSBz
dHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyKQotewotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0
cmluZ1R5cGUxPiBhZGFwdGVyMShzdHJpbmcxKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJp
bmdUeXBlMj4gYWRhcHRlcjIoc3RyaW5nMik7Ci0KLSAgICBib29sIG92ZXJmbG93ID0gZmFsc2U7
Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgc3VtV2l0aE92
ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjIubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBpZiAob3Zl
cmZsb3cpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGFkYXB0ZXIxLmlzOEJp
dCgpICYmIGFkYXB0ZXIyLmlzOEJpdCgpKSB7Ci0gICAgICAgIExDaGFyKiBidWZmZXI7Ci0gICAg
ICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRl
VW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgICAgIGlmICghcmVzdWx0SW1wbCkK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIExDaGFyKiByZXN1bHQgPSBi
dWZmZXI7Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0
ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7
Ci0KLSAgICAgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHRJbXBsKTsKK3RlbXBsYXRlPHNpemVf
dCBpbmRleCwgdHlwZW5hbWUuLi4gQWRhcHRlcnM+CitzdHJ1Y3QgU3RyaW5nQWRhcHRlclR1cGxl
IHsKKyAgICBzdGF0aWMgaW5saW5lIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBz
dW1XaXRoT3ZlcmZsb3coY29uc3Qgc3RkOjp0dXBsZTxBZGFwdGVycy4uLj4mIHR1cGxlKQorICAg
IHsKKyAgICAgICAgYXV0byYgYWRhcHRlciA9IHN0ZDo6Z2V0PHNpemVvZi4uLihBZGFwdGVycykg
LSBpbmRleD4odHVwbGUpOworICAgICAgICByZXR1cm4gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3Jk
T3ZlcmZsb3c+KGFkYXB0ZXIubGVuZ3RoKCkpICsgU3RyaW5nQWRhcHRlclR1cGxlPGluZGV4IC0g
MSwgQWRhcHRlcnMuLi4+OjpzdW1XaXRoT3ZlcmZsb3codHVwbGUpOwogICAgIH0KIAotICAgIFVD
aGFyKiBidWZmZXI7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJ
bXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIXJl
c3VsdEltcGwpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgVUNoYXIqIHJlc3VsdCA9
IGJ1ZmZlcjsKLSAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFk
YXB0ZXIxLmxlbmd0aCgpOwotICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLQotICAgIHJl
dHVybiBXVEY6Om1vdmUocmVzdWx0SW1wbCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmlu
Z1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTM+Ci1SZWZQ
dHI8U3RyaW5nSW1wbD4gdHJ5TWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdU
eXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczKQotewotICAgIFN0cmluZ1R5cGVBZGFw
dGVyPFN0cmluZ1R5cGUxPiBhZGFwdGVyMShzdHJpbmcxKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRl
cjxTdHJpbmdUeXBlMj4gYWRhcHRlcjIoc3RyaW5nMik7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8
U3RyaW5nVHlwZTM+IGFkYXB0ZXIzKHN0cmluZzMpOwotCi0gICAgYm9vbCBvdmVyZmxvdyA9IGZh
bHNlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIHN1bVdp
dGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIyLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3Vt
V2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjMubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBp
ZiAob3ZlcmZsb3cpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGFkYXB0ZXIx
LmlzOEJpdCgpICYmIGFkYXB0ZXIyLmlzOEJpdCgpICYmIGFkYXB0ZXIzLmlzOEJpdCgpKSB7Ci0g
ICAgICAgIExDaGFyKiBidWZmZXI7Ci0gICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJ
bXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7
Ci0gICAgICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgICAgIExDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRl
VG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgICAg
ICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMi5s
ZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgICAgIHJl
dHVybiBXVEY6Om1vdmUocmVzdWx0SW1wbCk7CisgICAgc3RhdGljIGlubGluZSBib29sIGlzOEJp
dChjb25zdCBzdGQ6OnR1cGxlPEFkYXB0ZXJzLi4uPiYgdHVwbGUpCisgICAgeworICAgICAgICBh
dXRvJiBhZGFwdGVyID0gc3RkOjpnZXQ8c2l6ZW9mLi4uKEFkYXB0ZXJzKSAtIGluZGV4Pih0dXBs
ZSk7CisgICAgICAgIHJldHVybiBhZGFwdGVyLmlzOEJpdCgpICYmIFN0cmluZ0FkYXB0ZXJUdXBs
ZTxpbmRleCAtIDEsIEFkYXB0ZXJzLi4uPjo6aXM4Qml0KHR1cGxlKTsKICAgICB9CiAKLSAgICBV
Q2hhciogYnVmZmVyID0gMDsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0
cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlm
ICghcmVzdWx0SW1wbCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBVQ2hhciogcmVz
dWx0ID0gYnVmZmVyOwotICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQg
Kz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAg
IHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3Vs
dCk7Ci0KLSAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdEltcGwpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmlu
Z1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlND4KLVJlZlB0cjxTdHJpbmdJbXBsPiB0cnlNYWtl
U3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5
cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQpCi17Ci0gICAgU3RyaW5nVHlwZUFkYXB0
ZXI8U3RyaW5nVHlwZTE+IGFkYXB0ZXIxKHN0cmluZzEpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVy
PFN0cmluZ1R5cGUyPiBhZGFwdGVyMihzdHJpbmcyKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxT
dHJpbmdUeXBlMz4gYWRhcHRlcjMoc3RyaW5nMyk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3Ry
aW5nVHlwZTQ+IGFkYXB0ZXI0KHN0cmluZzQpOwotCi0gICAgYm9vbCBvdmVyZmxvdyA9IGZhbHNl
OwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIHN1bVdpdGhP
dmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIyLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0
aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjMubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1X
aXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNC5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIGlm
IChvdmVyZmxvdykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoYWRhcHRlcjEu
aXM4Qml0KCkgJiYgYWRhcHRlcjIuaXM4Qml0KCkgJiYgYWRhcHRlcjMuaXM4Qml0KCkgJiYgYWRh
cHRlcjQuaXM4Qml0KCkpIHsKLSAgICAgICAgTENoYXIqIGJ1ZmZlcjsKLSAgICAgICAgUmVmUHRy
PFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxp
emVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgTENoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAg
ICAgICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRl
cjEubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAg
cmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMy53cml0ZVRvKHJl
c3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsKLSAgICAgICAgYWRh
cHRlcjQud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0
SW1wbCk7Ci0gICAgfQotCi0gICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICBSZWZQdHI8U3RyaW5nSW1w
bD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3Ro
LCBidWZmZXIpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBVQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVz
dWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjIud3Jp
dGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICBhZGFw
dGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwot
ICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKLQotICAgIHJldHVybiBXVEY6Om1vdmUocmVz
dWx0SW1wbCk7Ci19CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgaW5saW5l
IHZvaWQgd3JpdGVUbyhUKiBidWZmZXIsIGNvbnN0IHN0ZDo6dHVwbGU8QWRhcHRlcnMuLi4+JiB0
dXBsZSkKKyAgICB7CisgICAgICAgIGF1dG8mIGFkYXB0ZXIgPSBzdGQ6OmdldDxzaXplb2YuLi4o
QWRhcHRlcnMpIC0gaW5kZXg+KHR1cGxlKTsKKyAgICAgICAgYWRhcHRlci53cml0ZVRvKGJ1ZmZl
cik7CisgICAgICAgIFN0cmluZ0FkYXB0ZXJUdXBsZTxpbmRleCAtIDEsIEFkYXB0ZXJzLi4uPjo6
d3JpdGVUbyhidWZmZXIgKyBhZGFwdGVyLmxlbmd0aCgpLCB0dXBsZSk7CisgICAgfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1l
IFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTU+
Ci1SZWZQdHI8U3RyaW5nSW1wbD4gdHJ5TWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBT
dHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJp
bmc0LCBTdHJpbmdUeXBlNSBzdHJpbmc1KQotewotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmlu
Z1R5cGUxPiBhZGFwdGVyMShzdHJpbmcxKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdU
eXBlMj4gYWRhcHRlcjIoc3RyaW5nMik7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlw
ZTM+IGFkYXB0ZXIzKHN0cmluZzMpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU0
PiBhZGFwdGVyNChzdHJpbmc0KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNT4g
YWRhcHRlcjUoc3RyaW5nNSk7Ci0KLSAgICBib29sIG92ZXJmbG93ID0gZmFsc2U7Ci0gICAgdW5z
aWduZWQgbGVuZ3RoID0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxl
bmd0aCwgYWRhcHRlcjIubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3co
bGVuZ3RoLCBhZGFwdGVyMy5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxv
dyhsZW5ndGgsIGFkYXB0ZXI0Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJm
bG93KGxlbmd0aCwgYWRhcHRlcjUubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBpZiAob3ZlcmZs
b3cpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGFkYXB0ZXIxLmlzOEJpdCgp
ICYmIGFkYXB0ZXIyLmlzOEJpdCgpICYmIGFkYXB0ZXIzLmlzOEJpdCgpICYmIGFkYXB0ZXI0Lmlz
OEJpdCgpICYmIGFkYXB0ZXI1LmlzOEJpdCgpKSB7Ci0gICAgICAgIExDaGFyKiBidWZmZXI7Ci0g
ICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgICAgIGlmICghcmVzdWx0SW1w
bCkKKyAgICBzdGF0aWMgaW5saW5lIFJlZlB0cjxTdHJpbmdJbXBsPiBjcmVhdGVTdHJpbmcoY29u
c3Qgc3RkOjp0dXBsZTxBZGFwdGVycy4uLj4mIGFkYXB0ZXJzKQorICAgIHsKKyAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gMDsKKyAgICAgICAgaWYgKHN1bVdpdGhPdmVyZmxvdyhhZGFwdGVycyku
c2FmZUdldChsZW5ndGgpID09IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBMQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAg
ICAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVy
MS5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICBy
ZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVz
dWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgICAgICBhZGFw
dGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNC5sZW5ndGgo
KTsKLSAgICAgICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgICAgIHJldHVybiBX
VEY6Om1vdmUocmVzdWx0SW1wbCk7Ci0gICAgfQotCi0gICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICBS
ZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5p
dGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBVQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgIGFkYXB0
ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0g
ICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5n
dGgoKTsKLSAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0
ZXIzLmxlbmd0aCgpOwotICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQg
Kz0gYWRhcHRlcjQubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1bHQpOwotCi0g
ICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHRJbXBsKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
U3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywg
dHlwZW5hbWUgU3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1LCB0eXBlbmFtZSBTdHJp
bmdUeXBlNj4KLVJlZlB0cjxTdHJpbmdJbXBsPiB0cnlNYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0
cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5
cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5cGU2IHN0cmluZzYpCi17
Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTE+IGFkYXB0ZXIxKHN0cmluZzEpOwot
ICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFwdGVyMihzdHJpbmcyKTsKLSAg
ICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMz4gYWRhcHRlcjMoc3RyaW5nMyk7Ci0gICAg
U3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTQ+IGFkYXB0ZXI0KHN0cmluZzQpOwotICAgIFN0
cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU1PiBhZGFwdGVyNShzdHJpbmc1KTsKLSAgICBTdHJp
bmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNj4gYWRhcHRlcjYoc3RyaW5nNik7Ci0KLSAgICBib29s
IG92ZXJmbG93ID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYWRhcHRlcjEubGVuZ3Ro
KCk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjIubGVuZ3RoKCksIG92ZXJm
bG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyMy5sZW5ndGgoKSwgb3Zl
cmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI0Lmxlbmd0aCgpLCBv
dmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjUubGVuZ3RoKCks
IG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNi5sZW5ndGgo
KSwgb3ZlcmZsb3cpOwotICAgIGlmIChvdmVyZmxvdykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBpZiAoYWRhcHRlcjEuaXM4Qml0KCkgJiYgYWRhcHRlcjIuaXM4Qml0KCkgJiYgYWRh
cHRlcjMuaXM4Qml0KCkgJiYgYWRhcHRlcjQuaXM4Qml0KCkgJiYgYWRhcHRlcjUuaXM4Qml0KCkg
JiYgYWRhcHRlcjYuaXM4Qml0KCkpIHsKLSAgICAgICAgTENoYXIqIGJ1ZmZlcjsKLSAgICAgICAg
UmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAgaWYgKCFyZXN1bHRJbXBsKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGlmIChpczhCaXQoYWRhcHRlcnMpKSB7
CisgICAgICAgICAgICBMQ2hhciogYnVmZmVyOworICAgICAgICAgICAgUmVmUHRyPFN0cmluZ0lt
cGw+IHJlc3VsdCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBi
dWZmZXIpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICAgICAgTENoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICAgICAgYWRh
cHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3Ro
KCk7Ci0gICAgICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9
IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0g
ICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjQud3Jp
dGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3RoKCk7Ci0gICAg
ICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI1
Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNi53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICAgICAg
cmV0dXJuIFdURjo6bW92ZShyZXN1bHRJbXBsKTsKLSAgICB9Ci0KLSAgICBVQ2hhciogYnVmZmVy
OwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFyZXN1bHRJbXBsKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFVDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0g
ICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5n
dGgoKTsKLSAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0
ZXIyLmxlbmd0aCgpOwotICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQg
Kz0gYWRhcHRlcjMubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQpOwotICAg
IHJlc3VsdCArPSBhZGFwdGVyNC5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNS53cml0ZVRvKHJlc3Vs
dCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI1Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI2LndyaXRl
VG8ocmVzdWx0KTsKLQotICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0SW1wbCk7Ci19CisgICAg
ICAgICAgICB3cml0ZVRvKGJ1ZmZlciwgYWRhcHRlcnMpOworICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5h
bWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBl
NCwgdHlwZW5hbWUgU3RyaW5nVHlwZTUsIHR5cGVuYW1lIFN0cmluZ1R5cGU2LCB0eXBlbmFtZSBT
dHJpbmdUeXBlNz4KLVJlZlB0cjxTdHJpbmdJbXBsPiB0cnlNYWtlU3RyaW5nKFN0cmluZ1R5cGUx
IHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmlu
Z1R5cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5cGU2IHN0cmluZzYs
IFN0cmluZ1R5cGU3IHN0cmluZzcpCi17Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlw
ZTE+IGFkYXB0ZXIxKHN0cmluZzEpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUy
PiBhZGFwdGVyMihzdHJpbmcyKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMz4g
YWRhcHRlcjMoc3RyaW5nMyk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTQ+IGFk
YXB0ZXI0KHN0cmluZzQpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU1PiBhZGFw
dGVyNShzdHJpbmc1KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNj4gYWRhcHRl
cjYoc3RyaW5nNik7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTc+IGFkYXB0ZXI3
KHN0cmluZzcpOwotCi0gICAgYm9vbCBvdmVyZmxvdyA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFk
YXB0ZXIyLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwg
YWRhcHRlcjMubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3Ro
LCBhZGFwdGVyNC5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5n
dGgsIGFkYXB0ZXI1Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxl
bmd0aCwgYWRhcHRlcjYubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3co
bGVuZ3RoLCBhZGFwdGVyNy5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIGlmIChvdmVyZmxvdykK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoYWRhcHRlcjEuaXM4Qml0KCkgJiYg
YWRhcHRlcjIuaXM4Qml0KCkgJiYgYWRhcHRlcjMuaXM4Qml0KCkgJiYgYWRhcHRlcjQuaXM4Qml0
KCkgJiYgYWRhcHRlcjUuaXM4Qml0KCkgJiYgYWRhcHRlcjYuaXM4Qml0KCkgJiYgYWRhcHRlcjcu
aXM4Qml0KCkpIHsKLSAgICAgICAgTENoYXIqIGJ1ZmZlcjsKLSAgICAgICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxl
bmd0aCwgYnVmZmVyKTsKLSAgICAgICAgaWYgKCFyZXN1bHRJbXBsKQorICAgICAgICBVQ2hhciog
YnVmZmVyOworICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0ID0gU3RyaW5nSW1wbDo6
dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CisgICAgICAgIGlmICghcmVz
dWx0KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgTENoYXIqIHJlc3Vs
dCA9IGJ1ZmZlcjsKLSAgICAgICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICBy
ZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVz
dWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgICAgICBhZGFw
dGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgo
KTsKLSAgICAgICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0g
YWRhcHRlcjQubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKLSAg
ICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI1Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNi53cml0
ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNi5sZW5ndGgoKTsKLSAgICAg
ICAgYWRhcHRlcjcud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgICAgIHJldHVybiBXVEY6Om1vdmUo
cmVzdWx0SW1wbCk7Ci0gICAgfQotCi0gICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICBSZWZQdHI8U3Ry
aW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQo
bGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBVQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgIGFkYXB0ZXIxLndyaXRl
VG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgYWRhcHRl
cjIud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAg
ICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0
aCgpOwotICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRl
cjQubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCAr
PSBhZGFwdGVyNS5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNi53cml0ZVRvKHJlc3VsdCk7Ci0gICAg
cmVzdWx0ICs9IGFkYXB0ZXI2Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI3LndyaXRlVG8ocmVzdWx0
KTsKLQotICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0SW1wbCk7Ci19CisgICAgICAgIHdyaXRl
VG8oYnVmZmVyLCBhZGFwdGVycyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfTsK
IAotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0
eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0cmlu
Z1R5cGU1LCB0eXBlbmFtZSBTdHJpbmdUeXBlNiwgdHlwZW5hbWUgU3RyaW5nVHlwZTcsIHR5cGVu
YW1lIFN0cmluZ1R5cGU4PgotUmVmUHRyPFN0cmluZ0ltcGw+IHRyeU1ha2VTdHJpbmcoU3RyaW5n
VHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywg
U3RyaW5nVHlwZTQgc3RyaW5nNCwgU3RyaW5nVHlwZTUgc3RyaW5nNSwgU3RyaW5nVHlwZTYgc3Ry
aW5nNiwgU3RyaW5nVHlwZTcgc3RyaW5nNywgU3RyaW5nVHlwZTggc3RyaW5nOCkKLXsKLSAgICBT
dHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3RyaW5nMSk7Ci0gICAgU3Ry
aW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKHN0cmluZzIpOwotICAgIFN0cmlu
Z1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUzPiBhZGFwdGVyMyhzdHJpbmczKTsKLSAgICBTdHJpbmdU
eXBlQWRhcHRlcjxTdHJpbmdUeXBlND4gYWRhcHRlcjQoc3RyaW5nNCk7Ci0gICAgU3RyaW5nVHlw
ZUFkYXB0ZXI8U3RyaW5nVHlwZTU+IGFkYXB0ZXI1KHN0cmluZzUpOwotICAgIFN0cmluZ1R5cGVB
ZGFwdGVyPFN0cmluZ1R5cGU2PiBhZGFwdGVyNihzdHJpbmc2KTsKLSAgICBTdHJpbmdUeXBlQWRh
cHRlcjxTdHJpbmdUeXBlNz4gYWRhcHRlcjcoc3RyaW5nNyk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0
ZXI8U3RyaW5nVHlwZTg+IGFkYXB0ZXI4KHN0cmluZzgpOwotCi0gICAgYm9vbCBvdmVyZmxvdyA9
IGZhbHNlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIHN1
bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIyLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAg
c3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjMubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAg
ICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNC5sZW5ndGgoKSwgb3ZlcmZsb3cpOwot
ICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI1Lmxlbmd0aCgpLCBvdmVyZmxvdyk7
Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjYubGVuZ3RoKCksIG92ZXJmbG93
KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNy5sZW5ndGgoKSwgb3ZlcmZs
b3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI4Lmxlbmd0aCgpLCBvdmVy
Zmxvdyk7Ci0gICAgaWYgKG92ZXJmbG93KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IGlmIChhZGFwdGVyMS5pczhCaXQoKSAmJiBhZGFwdGVyMi5pczhCaXQoKSAmJiBhZGFwdGVyMy5p
czhCaXQoKSAmJiBhZGFwdGVyNC5pczhCaXQoKSAmJiBhZGFwdGVyNS5pczhCaXQoKSAmJiBhZGFw
dGVyNi5pczhCaXQoKSAmJiBhZGFwdGVyNy5pczhCaXQoKSAmJiBhZGFwdGVyOC5pczhCaXQoKSkg
ewotICAgICAgICBMQ2hhciogYnVmZmVyOwotICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVz
dWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZm
ZXIpOwotICAgICAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIEFkYXB0ZXJzPgorc3RydWN0IFN0cmluZ0FkYXB0ZXJU
dXBsZTwwLCBBZGFwdGVycy4uLj4geworICAgIHN0YXRpYyBDaGVja2VkPHVuc2lnbmVkLCBSZWNv
cmRPdmVyZmxvdz4gc3VtV2l0aE92ZXJmbG93KGNvbnN0IHN0ZDo6dHVwbGU8QWRhcHRlcnMuLi4+
JikgeyByZXR1cm4gMDsgfQorICAgIHN0YXRpYyBib29sIGlzOEJpdChjb25zdCBzdGQ6OnR1cGxl
PEFkYXB0ZXJzLi4uPiYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdGF0aWMgdm9pZCB3cml0ZVRvKFQqLCBjb25zdCBzdGQ6OnR1cGxlPEFkYXB0ZXJzLi4uPiYp
IHsgfQorfTsKIAotICAgICAgICBMQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgICAgICBhZGFw
dGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgo
KTsKLSAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0g
YWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAg
ICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNC53cml0
ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNC5sZW5ndGgoKTsKLSAgICAg
ICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjUu
bGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI2LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVz
dWx0ICs9IGFkYXB0ZXI2Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNy53cml0ZVRvKHJlc3Vs
dCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNy5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRl
cjgud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgICAgIHJldHVybiBXVEY6Om1vdmUocmVzdWx0SW1w
bCk7Ci0gICAgfQotCi0gICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4g
cmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBi
dWZmZXIpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBVQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0
KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjIud3JpdGVU
byhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICBhZGFwdGVy
My53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAg
IGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3Ro
KCk7Ci0gICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVy
NS5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9
IGFkYXB0ZXI2Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI3LndyaXRlVG8ocmVzdWx0KTsKLSAgICBy
ZXN1bHQgKz0gYWRhcHRlcjcubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjgud3JpdGVUbyhyZXN1bHQp
OwotCi0gICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHRJbXBsKTsKLX0KK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+Cit1c2luZyBBZGFwdGVyVHlwZSA9IFN0cmluZ1R5cGVBZGFwdGVyPHR5cGVuYW1lIHN0
ZDo6ZGVjYXk8VD46OnR5cGU+OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlw
ZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdU
eXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTUsIHR5cGVuYW1lIFN0cmluZ1R5cGU2LCB0eXBlbmFt
ZSBTdHJpbmdUeXBlNywgdHlwZW5hbWUgU3RyaW5nVHlwZTgsIHR5cGVuYW1lIFN0cmluZ1R5cGU5
PgotUmVmUHRyPFN0cmluZ0ltcGw+IHRyeU1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwg
U3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3Ry
aW5nNCwgU3RyaW5nVHlwZTUgc3RyaW5nNSwgU3RyaW5nVHlwZTYgc3RyaW5nNiwgU3RyaW5nVHlw
ZTcgc3RyaW5nNywgU3RyaW5nVHlwZTggc3RyaW5nOCwgU3RyaW5nVHlwZTkgc3RyaW5nOSkKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUuLi4gVHM+CitSZWZQdHI8
U3RyaW5nSW1wbD4gdHJ5TWFrZVN0cmluZyhjb25zdCBUMSYgc3RyaW5nMSwgY29uc3QgVDImIHN0
cmluZzIsIGNvbnN0IFRzJi4uLiBzdHJpbmdzKQogewotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0
cmluZ1R5cGUxPiBhZGFwdGVyMShzdHJpbmcxKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJp
bmdUeXBlMj4gYWRhcHRlcjIoc3RyaW5nMik7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5n
VHlwZTM+IGFkYXB0ZXIzKHN0cmluZzMpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5
cGU0PiBhZGFwdGVyNChzdHJpbmc0KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBl
NT4gYWRhcHRlcjUoc3RyaW5nNSk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTY+
IGFkYXB0ZXI2KHN0cmluZzYpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU3PiBh
ZGFwdGVyNyhzdHJpbmc3KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlOD4gYWRh
cHRlcjgoc3RyaW5nOCk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTk+IGFkYXB0
ZXI5KHN0cmluZzkpOwotCi0gICAgYm9vbCBvdmVyZmxvdyA9IGZhbHNlOwotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgs
IGFkYXB0ZXIyLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0
aCwgYWRhcHRlcjMubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVu
Z3RoLCBhZGFwdGVyNC5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhs
ZW5ndGgsIGFkYXB0ZXI1Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93
KGxlbmd0aCwgYWRhcHRlcjYubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZs
b3cobGVuZ3RoLCBhZGFwdGVyNy5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVy
ZmxvdyhsZW5ndGgsIGFkYXB0ZXI4Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92
ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjkubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBpZiAob3Zl
cmZsb3cpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGFkYXB0ZXIxLmlzOEJp
dCgpICYmIGFkYXB0ZXIyLmlzOEJpdCgpICYmIGFkYXB0ZXIzLmlzOEJpdCgpICYmIGFkYXB0ZXI0
LmlzOEJpdCgpICYmIGFkYXB0ZXI1LmlzOEJpdCgpICYmIGFkYXB0ZXI2LmlzOEJpdCgpICYmIGFk
YXB0ZXI3LmlzOEJpdCgpICYmIGFkYXB0ZXI4LmlzOEJpdCgpICYmIGFkYXB0ZXI5LmlzOEJpdCgp
KSB7Ci0gICAgICAgIExDaGFyKiBidWZmZXI7Ci0gICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBy
ZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1
ZmZlcik7Ci0gICAgICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgICAgIExDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAgICAgIGFkYXB0ZXIx
LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwot
ICAgICAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFw
dGVyMi5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwotICAgICAg
ICByZXN1bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI0LndyaXRlVG8o
cmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI0Lmxlbmd0aCgpOwotICAgICAgICBh
ZGFwdGVyNS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNS5sZW5n
dGgoKTsKLSAgICAgICAgYWRhcHRlcjYud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQg
Kz0gYWRhcHRlcjYubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI3LndyaXRlVG8ocmVzdWx0KTsK
LSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI3Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyOC53
cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyOC5sZW5ndGgoKTsKLSAg
ICAgICAgYWRhcHRlcjkud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgICAgIHJldHVybiBXVEY6Om1v
dmUocmVzdWx0SW1wbCk7Ci0gICAgfQotCi0gICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICBSZWZQdHI8
U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBVQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgIGFkYXB0ZXIxLndy
aXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgYWRh
cHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsK
LSAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxl
bmd0aCgpOwotICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRh
cHRlcjQubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3Vs
dCArPSBhZGFwdGVyNS5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNi53cml0ZVRvKHJlc3VsdCk7Ci0g
ICAgcmVzdWx0ICs9IGFkYXB0ZXI2Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI3LndyaXRlVG8ocmVz
dWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjcubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjgud3Jp
dGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyOC5sZW5ndGgoKTsKLSAgICBhZGFw
dGVyOS53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdEltcGwp
OworICAgIGF1dG8gYWRhcHRlcnMgPSBzdGQ6Om1ha2VfdHVwbGUoQWRhcHRlclR5cGU8VDE+KHN0
cmluZzEpLCBBZGFwdGVyVHlwZTxUMj4oc3RyaW5nMiksIEFkYXB0ZXJUeXBlPFRzPihzdHJpbmdz
KS4uLik7CisgICAgcmV0dXJuIFN0cmluZ0FkYXB0ZXJUdXBsZTwyICsgc2l6ZW9mLi4uKFRzKSwg
QWRhcHRlclR5cGU8VDE+LCBBZGFwdGVyVHlwZTxUMj4sIEFkYXB0ZXJUeXBlPFRzPi4uLj46OmNy
ZWF0ZVN0cmluZyhhZGFwdGVycyk7CiB9CiAKLQogLy8gQ29udmVuaWVuY2Ugb25seS4KLXRlbXBs
YXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxPgotU3RyaW5nIG1ha2VTdHJpbmcoU3RyaW5nVHlwZTEg
c3RyaW5nMSkKLXsKLSAgICByZXR1cm4gU3RyaW5nKHN0cmluZzEpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTI+Ci1TdHJpbmcgbWFrZVN0
cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyKQotewotICAgIFJl
ZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gdHJ5TWFrZVN0cmluZyhzdHJpbmcxLCBzdHJp
bmcyKTsKLSAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJu
IFdURjo6bW92ZShyZXN1bHRJbXBsKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlw
ZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMz4KLVN0cmluZyBt
YWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmlu
Z1R5cGUzIHN0cmluZzMpCi17Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSB0
cnlNYWtlU3RyaW5nKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMpOwotICAgIGlmICghcmVzdWx0
SW1wbCkKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdEltcGwp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlw
ZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlND4KLVN0cmluZyBt
YWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmlu
Z1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQpCi17Ci0gICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IHJlc3VsdEltcGwgPSB0cnlNYWtlU3RyaW5nKHN0cmluZzEsIHN0cmluZzIsIHN0cmlu
ZzMsIHN0cmluZzQpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgQ1JBU0goKTsKLSAg
ICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdEltcGwpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBT
dHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0
eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTU+Ci1TdHJpbmcgbWFrZVN0
cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBl
MyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBTdHJpbmdUeXBlNSBzdHJpbmc1KQotewot
ICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gdHJ5TWFrZVN0cmluZyhzdHJpbmcx
LCBzdHJpbmcyLCBzdHJpbmczLCBzdHJpbmc0LCBzdHJpbmc1KTsKLSAgICBpZiAoIXJlc3VsdElt
cGwpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHRJbXBsKTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUy
LCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0
cmluZ1R5cGU1LCB0eXBlbmFtZSBTdHJpbmdUeXBlNj4KLVN0cmluZyBtYWtlU3RyaW5nKFN0cmlu
Z1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMs
IFN0cmluZ1R5cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5cGU2IHN0
cmluZzYpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorU3RyaW5nIG1ha2VTdHJpbmcoVCYmIHN0cmlu
ZykKIHsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IHRyeU1ha2VTdHJpbmco
c3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMywgc3RyaW5nNCwgc3RyaW5nNSwgc3RyaW5nNik7Ci0g
ICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICBDUkFTSCgpOwotICAgIHJldHVybiBXVEY6Om1v
dmUocmVzdWx0SW1wbCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBl
bmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5
cGU0LCB0eXBlbmFtZSBTdHJpbmdUeXBlNSwgdHlwZW5hbWUgU3RyaW5nVHlwZTYsIHR5cGVuYW1l
IFN0cmluZ1R5cGU3PgotU3RyaW5nIG1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3Ry
aW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3RyaW5n
NCwgU3RyaW5nVHlwZTUgc3RyaW5nNSwgU3RyaW5nVHlwZTYgc3RyaW5nNiwgU3RyaW5nVHlwZTcg
c3RyaW5nNykKLXsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IHRyeU1ha2VT
dHJpbmcoc3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMywgc3RyaW5nNCwgc3RyaW5nNSwgc3RyaW5n
Niwgc3RyaW5nNyk7Ci0gICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICBDUkFTSCgpOwotICAg
IHJldHVybiBXVEY6Om1vdmUocmVzdWx0SW1wbCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFN0
cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5
cGVuYW1lIFN0cmluZ1R5cGU0LCB0eXBlbmFtZSBTdHJpbmdUeXBlNSwgdHlwZW5hbWUgU3RyaW5n
VHlwZTYsIHR5cGVuYW1lIFN0cmluZ1R5cGU3LCB0eXBlbmFtZSBTdHJpbmdUeXBlOD4KLVN0cmlu
ZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0
cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmlu
ZzUsIFN0cmluZ1R5cGU2IHN0cmluZzYsIFN0cmluZ1R5cGU3IHN0cmluZzcsIFN0cmluZ1R5cGU4
IHN0cmluZzgpCi17Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSB0cnlNYWtl
U3RyaW5nKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMsIHN0cmluZzQsIHN0cmluZzUsIHN0cmlu
ZzYsIHN0cmluZzcsIHN0cmluZzgpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgQ1JB
U0goKTsKLSAgICByZXR1cm4gV1RGOjptb3ZlKHJlc3VsdEltcGwpOworICAgIHJldHVybiBzdGQ6
OmZvcndhcmQ8VD4oc3RyaW5nKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEs
IHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3Ry
aW5nVHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1LCB0eXBlbmFtZSBTdHJpbmdUeXBlNiwgdHlw
ZW5hbWUgU3RyaW5nVHlwZTcsIHR5cGVuYW1lIFN0cmluZ1R5cGU4LCB0eXBlbmFtZSBTdHJpbmdU
eXBlOT4KLVN0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUy
IHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQsIFN0cmlu
Z1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5cGU2IHN0cmluZzYsIFN0cmluZ1R5cGU3IHN0cmluZzcs
IFN0cmluZ1R5cGU4IHN0cmluZzgsIFN0cmluZ1R5cGU5IHN0cmluZzkpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lLi4uIFRzPgorU3RyaW5nIG1ha2VTdHJpbmco
Y29uc3QgVDEmIHN0cmluZzEsIGNvbnN0IFQyJiBzdHJpbmcyLCBjb25zdCBUcyYuLi4gc3RyaW5n
cykKIHsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IHRyeU1ha2VTdHJpbmco
c3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMywgc3RyaW5nNCwgc3RyaW5nNSwgc3RyaW5nNiwgc3Ry
aW5nNywgc3RyaW5nOCwgc3RyaW5nOSk7Ci0gICAgaWYgKCFyZXN1bHRJbXBsKQorICAgIFJlZlB0
cjxTdHJpbmdJbXBsPiByZXN1bHQgPSB0cnlNYWtlU3RyaW5nKHN0cmluZzEsIHN0cmluZzIsIHN0
cmluZ3MuLi4pOworICAgIGlmICghcmVzdWx0KQogICAgICAgICBDUkFTSCgpOwotICAgIHJldHVy
biBXVEY6Om1vdmUocmVzdWx0SW1wbCk7CisgICAgcmV0dXJuIFdURjo6bW92ZShyZXN1bHQpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nT3BlcmF0b3JzLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ09wZXJhdG9ycy5o
CmluZGV4IGNmZDJmNmQ2Y2FjY2QxNjg2NTI1YTg3ZWE2ODIyZDdiNDAzY2I5NTAuLjkxZDA3NGMw
YjhlZDZhNDFkOGQ4MGU4NDIwYmNmMjUyODBjYjBjODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nT3BlcmF0b3JzLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdPcGVyYXRvcnMuaApAQCAtMjQsMjEgKzI0LDIwIEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTI+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+CiBjbGFzcyBTdHJpbmdBcHBlbmQgewogcHVi
bGljOgotICAgIFN0cmluZ0FwcGVuZChTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBz
dHJpbmcyKQotICAgICAgICA6IG1fc3RyaW5nMShzdHJpbmcxKQotICAgICAgICAsIG1fc3RyaW5n
MihzdHJpbmcyKQorICAgIFN0cmluZ0FwcGVuZChjb25zdCBUMSYgc3RyaW5nMSwgY29uc3QgVDIm
IHN0cmluZzIpCisgICAgICAgIDogbV90dXBsZShzdGQ6Om1ha2VfdHVwbGUoQWRhcHRlclR5cGU8
VDE+KHN0cmluZzEpLCBBZGFwdGVyVHlwZTxUMj4oc3RyaW5nMikpKQogICAgIHsKICAgICB9CiAK
ICAgICBvcGVyYXRvciBTdHJpbmcoKSBjb25zdAogICAgIHsKLSAgICAgICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IHJlc3VsdEltcGwgPSB0cnlNYWtlU3RyaW5nKG1fc3RyaW5nMSwgbV9zdHJpbmcyKTsK
KyAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdBZGFwdGVyVHVw
bGU8MiwgQWRhcHRlclR5cGU8VDE+LCBBZGFwdGVyVHlwZTxUMj4+OjpjcmVhdGVTdHJpbmcobV90
dXBsZSk7CiAgICAgICAgIGlmICghcmVzdWx0SW1wbCkKICAgICAgICAgICAgIENSQVNIKCk7Ci0g
ICAgICAgIHJldHVybiByZXN1bHRJbXBsLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bW92ZShyZXN1bHRJbXBsKTsKICAgICB9CiAKICAgICBvcGVyYXRvciBBdG9taWNTdHJpbmcoKSBj
b25zdApAQCAtNDYsNTkgKzQ1LDUyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG9wZXJhdG9y
IFN0cmluZygpOwogICAgIH0KIAotICAgIGJvb2wgaXM4Qml0KCkKKyAgICBib29sIGlzOEJpdCgp
IGNvbnN0CiAgICAgewotICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRh
cHRlcjEobV9zdHJpbmcxKTsKLSAgICAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+
IGFkYXB0ZXIyKG1fc3RyaW5nMik7Ci0gICAgICAgIHJldHVybiBhZGFwdGVyMS5pczhCaXQoKSAm
JiBhZGFwdGVyMi5pczhCaXQoKTsKKyAgICAgICAgcmV0dXJuIHN0cmluZzEoKS5pczhCaXQoKSAm
JiBzdHJpbmcyKCkuaXM4Qml0KCk7CiAgICAgfQogCi0gICAgdm9pZCB3cml0ZVRvKExDaGFyKiBk
ZXN0aW5hdGlvbikKKyAgICB2b2lkIHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAog
ICAgIHsKICAgICAgICAgQVNTRVJUKGlzOEJpdCgpKTsKLSAgICAgICAgU3RyaW5nVHlwZUFkYXB0
ZXI8U3RyaW5nVHlwZTE+IGFkYXB0ZXIxKG1fc3RyaW5nMSk7Ci0gICAgICAgIFN0cmluZ1R5cGVB
ZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFwdGVyMihtX3N0cmluZzIpOwotICAgICAgICBhZGFwdGVy
MS53cml0ZVRvKGRlc3RpbmF0aW9uKTsKLSAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhkZXN0aW5h
dGlvbiArIGFkYXB0ZXIxLmxlbmd0aCgpKTsKKyAgICAgICAgc3RyaW5nMSgpLndyaXRlVG8oZGVz
dGluYXRpb24pOworICAgICAgICBzdHJpbmcyKCkud3JpdGVUbyhkZXN0aW5hdGlvbiArIHN0cmlu
ZzEoKS5sZW5ndGgoKSk7CiAgICAgfQogCi0gICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5h
dGlvbikKKyAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKSBjb25zdAogICAgIHsK
LSAgICAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTE+IGFkYXB0ZXIxKG1fc3RyaW5n
MSk7Ci0gICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFwdGVyMihtX3N0
cmluZzIpOwotICAgICAgICBhZGFwdGVyMS53cml0ZVRvKGRlc3RpbmF0aW9uKTsKLSAgICAgICAg
YWRhcHRlcjIud3JpdGVUbyhkZXN0aW5hdGlvbiArIGFkYXB0ZXIxLmxlbmd0aCgpKTsKKyAgICAg
ICAgc3RyaW5nMSgpLndyaXRlVG8oZGVzdGluYXRpb24pOworICAgICAgICBzdHJpbmcyKCkud3Jp
dGVUbyhkZXN0aW5hdGlvbiArIHN0cmluZzEoKS5sZW5ndGgoKSk7CiAgICAgfQogCi0gICAgdW5z
aWduZWQgbGVuZ3RoKCkKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTE+IGFkYXB0ZXIxKG1fc3RyaW5nMSk7Ci0g
ICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFwdGVyMihtX3N0cmluZzIp
OwotICAgICAgICByZXR1cm4gYWRhcHRlcjEubGVuZ3RoKCkgKyBhZGFwdGVyMi5sZW5ndGgoKTsK
KyAgICAgICAgcmV0dXJuIHN0cmluZzEoKS5sZW5ndGgoKSArIHN0cmluZzIoKS5sZW5ndGgoKTsK
ICAgICB9ICAgIAogCiBwcml2YXRlOgotICAgIFN0cmluZ1R5cGUxIG1fc3RyaW5nMTsKLSAgICBT
dHJpbmdUeXBlMiBtX3N0cmluZzI7CisgICAgc3RkOjp0dXBsZTxBZGFwdGVyVHlwZTxUMT4sIEFk
YXB0ZXJUeXBlPFQyPj4gbV90dXBsZTsKKyAgICBjb25zdCBBZGFwdGVyVHlwZTxUMT4mIHN0cmlu
ZzEoKSBjb25zdCB7IHJldHVybiBzdGQ6OmdldDwwPihtX3R1cGxlKTsgfQorICAgIGNvbnN0IEFk
YXB0ZXJUeXBlPFQyPiYgc3RyaW5nMigpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6Z2V0PDE+KG1fdHVw
bGUpOyB9CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3Ry
aW5nVHlwZTI+CiBjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdBcHBlbmQ8U3RyaW5nVHlw
ZTEsIFN0cmluZ1R5cGUyPj4gewogcHVibGljOgotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmlu
Z0FwcGVuZDxTdHJpbmdUeXBlMSwgU3RyaW5nVHlwZTI+PihTdHJpbmdBcHBlbmQ8U3RyaW5nVHlw
ZTEsIFN0cmluZ1R5cGUyPiYgYnVmZmVyKQorICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ0Fw
cGVuZDxTdHJpbmdUeXBlMSwgU3RyaW5nVHlwZTI+Pihjb25zdCBTdHJpbmdBcHBlbmQ8U3RyaW5n
VHlwZTEsIFN0cmluZ1R5cGUyPiYgYnVmZmVyKQogICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikK
ICAgICB7CiAgICAgfQogCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gbV9idWZmZXIu
bGVuZ3RoKCk7IH0KKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZl
ci5sZW5ndGgoKTsgfQogCi0gICAgYm9vbCBpczhCaXQoKSB7IHJldHVybiBtX2J1ZmZlci5pczhC
aXQoKTsgfQorICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuaXM4Qml0
KCk7IH0KIAotICAgIHZvaWQgd3JpdGVUbyhMQ2hhciogZGVzdGluYXRpb24pIHsgbV9idWZmZXIu
d3JpdGVUbyhkZXN0aW5hdGlvbik7IH0KLSAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0
aW9uKSB7IG1fYnVmZmVyLndyaXRlVG8oZGVzdGluYXRpb24pOyB9CisgICAgdm9pZCB3cml0ZVRv
KExDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QgeyBtX2J1ZmZlci53cml0ZVRvKGRlc3RpbmF0aW9u
KTsgfQorICAgIHZvaWQgd3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pIGNvbnN0IHsgbV9idWZm
ZXIud3JpdGVUbyhkZXN0aW5hdGlvbik7IH0KIAogcHJpdmF0ZToKLSAgICBTdHJpbmdBcHBlbmQ8
U3RyaW5nVHlwZTEsIFN0cmluZ1R5cGUyPiYgbV9idWZmZXI7CisgICAgY29uc3QgU3RyaW5nQXBw
ZW5kPFN0cmluZ1R5cGUxLCBTdHJpbmdUeXBlMj4mIG1fYnVmZmVyOwogfTsKIAogaW5saW5lIFN0
cmluZ0FwcGVuZDxjb25zdCBjaGFyKiwgU3RyaW5nPiBvcGVyYXRvcisoY29uc3QgY2hhciogc3Ry
aW5nMSwgY29uc3QgU3RyaW5nJiBzdHJpbmcyKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284410</attachid>
            <date>2016-07-23 03:43:02 -0700</date>
            <delta_ts>2016-12-12 18:01:30 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>bug-147142-20160723034158.patch</filename>
            <type>text/plain</type>
            <size>34243</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzNjMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGQ4MmMzNzUwNjZjYzhmYTg2YmQ3MTAy
Njc1ZGIwN2FlMDU4N2Q0NTEuLmIwNzAxYmNjYTRmZjY4MmQyNWM5YTY5MWRlYzg1MTcyNzdjM2Mw
MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTYtMDctMjMgIFphbiBEb2JlcnNlayAgPHpkb2Jl
cnNla0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtXVEZdIFR1cm4gdHJ5TWFrZVN0cmluZygpLCBt
YWtlU3RyaW5nKCkgaW50byB2YXJpYWRpYyB0ZW1wbGF0ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzE0MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUu
aDoKKyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8Y2hhcj46Omxlbmd0aCk6CisgICAg
ICAgIChXVEY6OlN0cmluZ1R5cGVBZGFwdGVyPGNoYXI+OjppczhCaXQpOgorICAgICAgICAoV1RG
OjpTdHJpbmdBZGFwdGVyVHVwbGU6OnN1bVdpdGhPdmVyZmxvdyk6CisgICAgICAgIChXVEY6OlN0
cmluZ0FkYXB0ZXJUdXBsZTo6aXM4Qml0KToKKyAgICAgICAgKFdURjo6U3RyaW5nQWRhcHRlclR1
cGxlOjp3cml0ZVRvKToKKyAgICAgICAgKFdURjo6U3RyaW5nQWRhcHRlclR1cGxlOjpjcmVhdGVT
dHJpbmcpOgorICAgICAgICAoV1RGOjp0cnlNYWtlU3RyaW5nKToKKyAgICAgICAgKFdURjo6bWFr
ZVN0cmluZyk6CisgICAgICAgIChXVEY6OnN1bVdpdGhPdmVyZmxvdyk6IERlbGV0ZWQuCisgICAg
ICAgICogd3RmL3RleHQvU3RyaW5nT3BlcmF0b3JzLmg6CisgICAgICAgIChXVEY6OlN0cmluZ0Fw
cGVuZDo6U3RyaW5nQXBwZW5kKToKKyAgICAgICAgKFdURjo6U3RyaW5nQXBwZW5kOjpvcGVyYXRv
ciBTdHJpbmcpOgorICAgICAgICAoV1RGOjpTdHJpbmdBcHBlbmQ6OmlzOEJpdCk6CisgICAgICAg
IChXVEY6OlN0cmluZ0FwcGVuZDo6d3JpdGVUbyk6CisgICAgICAgIChXVEY6OlN0cmluZ0FwcGVu
ZDo6bGVuZ3RoKToKKyAgICAgICAgKFdURjo6U3RyaW5nQXBwZW5kOjpzdHJpbmcxKToKKyAgICAg
ICAgKFdURjo6U3RyaW5nQXBwZW5kOjpzdHJpbmcyKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJp
bmdWaWV3Lmg6CisgICAgICAgIChXVEY6OlN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1ZpZXc+Ojps
ZW5ndGgpOgorICAgICAgICAoV1RGOjpTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdWaWV3Pjo6aXM4
Qml0KToKKyAgICAgICAgKFdURjo6U3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVmlldz46OndyaXRl
VG8pOgorCiAyMDE2LTA3LTIxICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5j
b20+CiAKICAgICAgICAgW21hY09TXSBDYXJldCBwbGFjZW1lbnQgb2NjdXJzIGluIHRoZSBtaWRk
bGUgb2YgbmV3IGVtb2ppIGdyb3VwIGNhbmRpZGF0ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
Q29uY2F0ZW5hdGUuaAppbmRleCA3N2YzNGRmNDcyN2I5OTMwMTNhMWUxMzg0OThlM2JlZGY3ODE2
YjI5Li5kYjUzMzIyYmQ3NTcyNTQ2Y2U2MmU5NDg4ZDUzZTZkMWUyZjRiOWI4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmgKKysrIGIvU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCkBAIC01NSw4ICs1NSw4IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gMTsgfQotICAg
IGJvb2wgaXM4Qml0KCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIDE7IH0KKyAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KIAogICAgIHZvaWQgd3JpdGVUbyhMQ2hhciogZGVzdGluYXRpb24pIGNvbnN0CiAgICAgewpA
QCAtMTAyLDYgKzEwMiw3NCBAQCBwcml2YXRlOgogICAgIFVDaGFyIG1fY2hhcmFjdGVyOwogfTsK
IAordGVtcGxhdGU8c2l6ZV90IHN0cmluZ0xpdGVyYWxMZW5ndGg+CitjbGFzcyBTdHJpbmdUeXBl
QWRhcHRlcjxjaGFyW3N0cmluZ0xpdGVyYWxMZW5ndGhdPiB7CitwdWJsaWM6CisgICAgU3RyaW5n
VHlwZUFkYXB0ZXIoY29uc3QgY2hhciAoJnN0cmluZ0xpdGVyYWwpW3N0cmluZ0xpdGVyYWxMZW5n
dGhdKQorICAgICAgICA6IG1fc3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihz
dHJpbmdMaXRlcmFsKSkKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gc3RyaW5nTGl0ZXJhbExlbmd0aCAtIDE7IH0KKyAgICBib29sIGlzOEJpdCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZvaWQgd3JpdGVUbyhMQ2hhciogZGVzdGlu
YXRpb24pIGNvbnN0CisgICAgeworICAgICAgICBTdHJpbmdWaWV3KG1fc3RyaW5nLCBsZW5ndGgo
KSkuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoZGVzdGluYXRpb24pOworICAgIH0KKworICAg
IHZvaWQgd3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pIGNvbnN0CisgICAgeworICAgICAgICBT
dHJpbmdWaWV3KG1fc3RyaW5nLCBsZW5ndGgoKSkuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQo
ZGVzdGluYXRpb24pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBMQ2hhciogbV9zdHJp
bmc7Cit9OworCit0ZW1wbGF0ZTxzaXplX3Qgc3RyaW5nTGl0ZXJhbExlbmd0aD4KK2NsYXNzIFN0
cmluZ1R5cGVBZGFwdGVyPGNvbnN0IGNoYXJbc3RyaW5nTGl0ZXJhbExlbmd0aF0+IDogcHVibGlj
IFN0cmluZ1R5cGVBZGFwdGVyPGNoYXJbc3RyaW5nTGl0ZXJhbExlbmd0aF0+IHsKK3B1YmxpYzoK
KyAgICBTdHJpbmdUeXBlQWRhcHRlcihjb25zdCBjaGFyICgmc3RyaW5nTGl0ZXJhbClbc3RyaW5n
TGl0ZXJhbExlbmd0aF0pCisgICAgICAgIDogU3RyaW5nVHlwZUFkYXB0ZXI8Y2hhcltzdHJpbmdM
aXRlcmFsTGVuZ3RoXT4oc3RyaW5nTGl0ZXJhbCkKKyAgICB7CisgICAgfQorfTsKKwordGVtcGxh
dGU8c2l6ZV90IHN0cmluZ0xpdGVyYWxMZW5ndGg+CitjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxV
Q2hhcltzdHJpbmdMaXRlcmFsTGVuZ3RoXT4geworcHVibGljOgorICAgIFN0cmluZ1R5cGVBZGFw
dGVyKGNvbnN0IFVDaGFyICgmc3RyaW5nTGl0ZXJhbClbc3RyaW5nTGl0ZXJhbExlbmd0aF0pCisg
ICAgICAgIDogbV9zdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHN0cmluZ0xp
dGVyYWwpKQorICAgIHsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBzdHJpbmdMaXRlcmFsTGVuZ3RoIC0gMTsgfQorICAgIGJvb2wgaXM4Qml0KCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKworICAgIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCB3cml0
ZVRvKExDaGFyKikgY29uc3QKKyAgICB7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorCisgICAg
dm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QKKyAgICB7CisgICAgICAgIFN0
cmluZ1ZpZXcobV9zdHJpbmcsIGxlbmd0aCgpKS5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChk
ZXN0aW5hdGlvbik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFVDaGFyKiBtX3N0cmlu
ZzsKK307CisKK3RlbXBsYXRlPHNpemVfdCBzdHJpbmdMaXRlcmFsTGVuZ3RoPgorY2xhc3MgU3Ry
aW5nVHlwZUFkYXB0ZXI8Y29uc3QgVUNoYXJbc3RyaW5nTGl0ZXJhbExlbmd0aF0+IDogcHVibGlj
IFN0cmluZ1R5cGVBZGFwdGVyPFVDaGFyW3N0cmluZ0xpdGVyYWxMZW5ndGhdPiB7CitwdWJsaWM6
CisgICAgU3RyaW5nVHlwZUFkYXB0ZXIoY29uc3QgVUNoYXIgKCZzdHJpbmdMaXRlcmFsKVtzdHJp
bmdMaXRlcmFsTGVuZ3RoXSkKKyAgICAgICAgOiBTdHJpbmdUeXBlQWRhcHRlcjxVQ2hhcltzdHJp
bmdMaXRlcmFsTGVuZ3RoXT4oc3RyaW5nTGl0ZXJhbCkKKyAgICB7CisgICAgfQorfTsKKwogdGVt
cGxhdGU8PgogY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8Y29uc3QgTENoYXIqPiB7CiBwdWJsaWM6
CkBAIC0yNTksNTc0ICszMjcsODkgQEAgcHVibGljOgogICAgIH0KIH07CiAKLWlubGluZSB2b2lk
IHN1bVdpdGhPdmVyZmxvdyh1bnNpZ25lZCYgdG90YWwsIHVuc2lnbmVkIGFkZGVuZCwgYm9vbCYg
b3ZlcmZsb3cpCi17Ci0gICAgdW5zaWduZWQgb2xkVG90YWwgPSB0b3RhbDsKLSAgICB0b3RhbCA9
IG9sZFRvdGFsICsgYWRkZW5kOwotICAgIGlmICh0b3RhbCA8IG9sZFRvdGFsKQotICAgICAgICBv
dmVyZmxvdyA9IHRydWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBl
bmFtZSBTdHJpbmdUeXBlMj4KLVN0cmluZyB0cnlNYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmlu
ZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIpCi17Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5n
VHlwZTE+IGFkYXB0ZXIxKHN0cmluZzEpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5
cGUyPiBhZGFwdGVyMihzdHJpbmcyKTsKLQotICAgIGlmIChhZGFwdGVyMS5sZW5ndGgoKSAmJiAh
YWRhcHRlcjIubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBhZGFwdGVyMS50b1N0cmluZygpOwot
ICAgIGlmICghYWRhcHRlcjEubGVuZ3RoKCkgJiYgYWRhcHRlcjIubGVuZ3RoKCkpCi0gICAgICAg
IHJldHVybiBhZGFwdGVyMi50b1N0cmluZygpOwotCi0gICAgYm9vbCBvdmVyZmxvdyA9IGZhbHNl
OwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIHN1bVdpdGhP
dmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIyLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgaWYgKG92
ZXJmbG93KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBpZiAoYWRhcHRlcjEuaXM4
Qml0KCkgJiYgYWRhcHRlcjIuaXM4Qml0KCkpIHsKLSAgICAgICAgTENoYXIqIGJ1ZmZlcjsKLSAg
ICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVh
dGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAgaWYgKCFyZXN1bHRJbXBs
KQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgICAgIExDaGFyKiByZXN1bHQg
PSBidWZmZXI7Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVz
dWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3Vs
dCk7Ci0KLSAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0SW1wbCk7Cit0ZW1wbGF0ZTxzaXpl
X3QgaW5kZXgsIHR5cGVuYW1lLi4uIEFkYXB0ZXJzPgorc3RydWN0IFN0cmluZ0FkYXB0ZXJUdXBs
ZSB7CisgICAgc3RhdGljIGlubGluZSBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4g
c3VtV2l0aE92ZXJmbG93KGNvbnN0IHN0ZDo6dHVwbGU8QWRhcHRlcnMuLi4+JiB0dXBsZSkKKyAg
ICB7CisgICAgICAgIGF1dG8mIGFkYXB0ZXIgPSBzdGQ6OmdldDxzaXplb2YuLi4oQWRhcHRlcnMp
IC0gaW5kZXg+KHR1cGxlKTsKKyAgICAgICAgcmV0dXJuIENoZWNrZWQ8dW5zaWduZWQsIFJlY29y
ZE92ZXJmbG93PihhZGFwdGVyLmxlbmd0aCgpKSArIFN0cmluZ0FkYXB0ZXJUdXBsZTxpbmRleCAt
IDEsIEFkYXB0ZXJzLi4uPjo6c3VtV2l0aE92ZXJmbG93KHR1cGxlKTsKICAgICB9CiAKLSAgICBV
Q2hhciogYnVmZmVyOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5n
SW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFy
ZXN1bHRJbXBsKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBVQ2hhciogcmVzdWx0
ID0gYnVmZmVyOwotICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0g
YWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotCi0gICAg
cmV0dXJuIFdURk1vdmUocmVzdWx0SW1wbCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmlu
Z1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTM+Ci1TdHJp
bmcgdHJ5TWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcy
LCBTdHJpbmdUeXBlMyBzdHJpbmczKQotewotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5
cGUxPiBhZGFwdGVyMShzdHJpbmcxKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBl
Mj4gYWRhcHRlcjIoc3RyaW5nMik7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTM+
IGFkYXB0ZXIzKHN0cmluZzMpOwotCi0gICAgYm9vbCBvdmVyZmxvdyA9IGZhbHNlOwotICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhs
ZW5ndGgsIGFkYXB0ZXIyLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93
KGxlbmd0aCwgYWRhcHRlcjMubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBpZiAob3ZlcmZsb3cp
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmIChhZGFwdGVyMS5pczhCaXQoKSAm
JiBhZGFwdGVyMi5pczhCaXQoKSAmJiBhZGFwdGVyMy5pczhCaXQoKSkgewotICAgICAgICBMQ2hh
ciogYnVmZmVyOwotICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmlu
Z0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgICAgICBp
ZiAoIXJlc3VsdEltcGwpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICAgICAg
TENoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICAgICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQp
OwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIy
LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwot
ICAgICAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICAgICAgcmV0dXJuIFdURk1v
dmUocmVzdWx0SW1wbCk7CisgICAgc3RhdGljIGlubGluZSBib29sIGlzOEJpdChjb25zdCBzdGQ6
OnR1cGxlPEFkYXB0ZXJzLi4uPiYgdHVwbGUpCisgICAgeworICAgICAgICBhdXRvJiBhZGFwdGVy
ID0gc3RkOjpnZXQ8c2l6ZW9mLi4uKEFkYXB0ZXJzKSAtIGluZGV4Pih0dXBsZSk7CisgICAgICAg
IHJldHVybiBhZGFwdGVyLmlzOEJpdCgpICYmIFN0cmluZ0FkYXB0ZXJUdXBsZTxpbmRleCAtIDEs
IEFkYXB0ZXJzLi4uPjo6aXM4Qml0KHR1cGxlKTsKICAgICB9CiAKLSAgICBVQ2hhciogYnVmZmVy
ID0gMDsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghcmVzdWx0SW1w
bCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgVUNoYXIqIHJlc3VsdCA9IGJ1ZmZl
cjsKLSAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIx
Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0g
YWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwotCi0gICAg
cmV0dXJuIFdURk1vdmUocmVzdWx0SW1wbCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmlu
Z1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVu
YW1lIFN0cmluZ1R5cGU0PgotU3RyaW5nIHRyeU1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5n
MSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQg
c3RyaW5nNCkKLXsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEo
c3RyaW5nMSk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKHN0
cmluZzIpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUzPiBhZGFwdGVyMyhzdHJp
bmczKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlND4gYWRhcHRlcjQoc3RyaW5n
NCk7Ci0KLSAgICBib29sIG92ZXJmbG93ID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0g
YWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjIu
bGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVy
My5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0
ZXI0Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgaWYgKG92ZXJmbG93KQotICAgICAgICByZXR1
cm4gU3RyaW5nKCk7Ci0KLSAgICBpZiAoYWRhcHRlcjEuaXM4Qml0KCkgJiYgYWRhcHRlcjIuaXM4
Qml0KCkgJiYgYWRhcHRlcjMuaXM4Qml0KCkgJiYgYWRhcHRlcjQuaXM4Qml0KCkpIHsKLSAgICAg
ICAgTENoYXIqIGJ1ZmZlcjsKLSAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwg
PSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAg
ICAgICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIGlubGluZSB2b2lkIHdyaXRlVG8oVCog
YnVmZmVyLCBjb25zdCBzdGQ6OnR1cGxlPEFkYXB0ZXJzLi4uPiYgdHVwbGUpCisgICAgeworICAg
ICAgICBhdXRvJiBhZGFwdGVyID0gc3RkOjpnZXQ8c2l6ZW9mLi4uKEFkYXB0ZXJzKSAtIGluZGV4
Pih0dXBsZSk7CisgICAgICAgIGFkYXB0ZXIud3JpdGVUbyhidWZmZXIpOworICAgICAgICBTdHJp
bmdBZGFwdGVyVHVwbGU8aW5kZXggLSAxLCBBZGFwdGVycy4uLj46OndyaXRlVG8oYnVmZmVyICsg
YWRhcHRlci5sZW5ndGgoKSwgdHVwbGUpOworICAgIH0KIAotICAgICAgICBMQ2hhciogcmVzdWx0
ID0gYnVmZmVyOwotICAgICAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJl
c3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1
bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0
ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgp
OwotICAgICAgICBhZGFwdGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICAgICAgcmV0dXJuIFdU
Rk1vdmUocmVzdWx0SW1wbCk7Ci0gICAgfQotCi0gICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICBSZWZQ
dHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlh
bGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgcmV0
dXJuIFN0cmluZygpOwotCi0gICAgVUNoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICBhZGFwdGVy
MS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAg
IGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3Ro
KCk7Ci0gICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVy
My5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICByZXR1cm4g
V1RGTW92ZShyZXN1bHRJbXBsKTsKLX0KKyAgICBzdGF0aWMgaW5saW5lIFN0cmluZyBjcmVhdGVT
dHJpbmcoY29uc3Qgc3RkOjp0dXBsZTxBZGFwdGVycy4uLj4mIGFkYXB0ZXJzKQorICAgIHsKKyAg
ICAgICAgaWYgKHNpemVvZi4uLihBZGFwdGVycykgPT0gMikgeworICAgICAgICAgICAgaWYgKHN0
ZDo6Z2V0PDA+KGFkYXB0ZXJzKS5sZW5ndGgoKSAmJiAhc3RkOjpnZXQ8MT4oYWRhcHRlcnMpLmxl
bmd0aCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6OmdldDwwPihhZGFwdGVycykudG9T
dHJpbmcoKTsKKyAgICAgICAgICAgIGlmICghc3RkOjpnZXQ8MD4oYWRhcHRlcnMpLmxlbmd0aCgp
ICYmIHN0ZDo6Z2V0PDE+KGFkYXB0ZXJzKS5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gc3RkOjpnZXQ8MT4oYWRhcHRlcnMpLnRvU3RyaW5nKCk7CisgICAgICAgIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBT
dHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1Pgot
U3RyaW5nIHRyeU1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3Ry
aW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3RyaW5nNCwgU3RyaW5nVHlw
ZTUgc3RyaW5nNSkKLXsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRl
cjEoc3RyaW5nMSk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIy
KHN0cmluZzIpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUzPiBhZGFwdGVyMyhz
dHJpbmczKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlND4gYWRhcHRlcjQoc3Ry
aW5nNCk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTU+IGFkYXB0ZXI1KHN0cmlu
ZzUpOwotCi0gICAgYm9vbCBvdmVyZmxvdyA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIy
Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRl
cjMubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFw
dGVyNC5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFk
YXB0ZXI1Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgaWYgKG92ZXJmbG93KQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBpZiAoYWRhcHRlcjEuaXM4Qml0KCkgJiYgYWRhcHRlcjIu
aXM4Qml0KCkgJiYgYWRhcHRlcjMuaXM4Qml0KCkgJiYgYWRhcHRlcjQuaXM4Qml0KCkgJiYgYWRh
cHRlcjUuaXM4Qml0KCkpIHsKLSAgICAgICAgTENoYXIqIGJ1ZmZlcjsKLSAgICAgICAgUmVmUHRy
PFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxp
emVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAgaWYgKCFyZXN1bHRJbXBsKQorICAgICAgICB1
bnNpZ25lZCBsZW5ndGggPSAwOworICAgICAgICBpZiAoc3VtV2l0aE92ZXJmbG93KGFkYXB0ZXJz
KS5zYWZlR2V0KGxlbmd0aCkgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykKICAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgICAgICBMQ2hhciogcmVzdWx0ID0gYnVmZmVyOwot
ICAgICAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFw
dGVyMS5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgICAg
ICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIzLndyaXRlVG8o
cmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgICAgICBh
ZGFwdGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNC5sZW5n
dGgoKTsKLSAgICAgICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgICAgIHJldHVy
biBXVEZNb3ZlKHJlc3VsdEltcGwpOwotICAgIH0KLQotICAgIFVDaGFyKiBidWZmZXI7Ci0gICAg
UmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLQotICAgIFVDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAgYWRh
cHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsK
LSAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxl
bmd0aCgpOwotICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRh
cHRlcjMubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3Vs
dCArPSBhZGFwdGVyNC5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNS53cml0ZVRvKHJlc3VsdCk7Ci0K
LSAgICByZXR1cm4gV1RGTW92ZShyZXN1bHRJbXBsKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
U3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywg
dHlwZW5hbWUgU3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1LCB0eXBlbmFtZSBTdHJp
bmdUeXBlNj4KLVN0cmluZyB0cnlNYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmlu
Z1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQs
IFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5cGU2IHN0cmluZzYpCi17Ci0gICAgU3RyaW5n
VHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTE+IGFkYXB0ZXIxKHN0cmluZzEpOwotICAgIFN0cmluZ1R5
cGVBZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFwdGVyMihzdHJpbmcyKTsKLSAgICBTdHJpbmdUeXBl
QWRhcHRlcjxTdHJpbmdUeXBlMz4gYWRhcHRlcjMoc3RyaW5nMyk7Ci0gICAgU3RyaW5nVHlwZUFk
YXB0ZXI8U3RyaW5nVHlwZTQ+IGFkYXB0ZXI0KHN0cmluZzQpOwotICAgIFN0cmluZ1R5cGVBZGFw
dGVyPFN0cmluZ1R5cGU1PiBhZGFwdGVyNShzdHJpbmc1KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRl
cjxTdHJpbmdUeXBlNj4gYWRhcHRlcjYoc3RyaW5nNik7Ci0KLSAgICBib29sIG92ZXJmbG93ID0g
ZmFsc2U7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgc3Vt
V2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjIubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBz
dW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyMy5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAg
IHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI0Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0g
ICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjUubGVuZ3RoKCksIG92ZXJmbG93KTsK
LSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNi5sZW5ndGgoKSwgb3ZlcmZsb3cp
OwotICAgIGlmIChvdmVyZmxvdykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgaWYg
KGFkYXB0ZXIxLmlzOEJpdCgpICYmIGFkYXB0ZXIyLmlzOEJpdCgpICYmIGFkYXB0ZXIzLmlzOEJp
dCgpICYmIGFkYXB0ZXI0LmlzOEJpdCgpICYmIGFkYXB0ZXI1LmlzOEJpdCgpICYmIGFkYXB0ZXI2
LmlzOEJpdCgpKSB7Ci0gICAgICAgIExDaGFyKiBidWZmZXI7Ci0gICAgICAgIFJlZlB0cjxTdHJp
bmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChs
ZW5ndGgsIGJ1ZmZlcik7Ci0gICAgICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKyAgICAgICAgaWYgKGlzOEJpdChhZGFwdGVycykpIHsKKyAgICAgICAg
ICAgIExDaGFyKiBidWZmZXI7CisgICAgICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0
ID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Cisg
ICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CiAKLSAgICAgICAgTENoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICAgICAgYWRhcHRlcjEud3Jp
dGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAg
ICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIy
Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJl
c3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1
bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0
ZXI1LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI1Lmxlbmd0aCgp
OwotICAgICAgICBhZGFwdGVyNi53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICAgICAgcmV0dXJuIFdU
Rk1vdmUocmVzdWx0SW1wbCk7Ci0gICAgfQotCi0gICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICBSZWZQ
dHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlh
bGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgcmV0
dXJuIFN0cmluZygpOwotCi0gICAgVUNoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICBhZGFwdGVy
MS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAg
IGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3Ro
KCk7Ci0gICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVy
My5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9
IGFkYXB0ZXI0Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKLSAgICBy
ZXN1bHQgKz0gYWRhcHRlcjUubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjYud3JpdGVUbyhyZXN1bHQp
OwotCi0gICAgcmV0dXJuIFdURk1vdmUocmVzdWx0SW1wbCk7Ci19CisgICAgICAgICAgICB3cml0
ZVRvKGJ1ZmZlciwgYWRhcHRlcnMpOworICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0
KTsKKyAgICAgICAgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUg
U3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwg
dHlwZW5hbWUgU3RyaW5nVHlwZTUsIHR5cGVuYW1lIFN0cmluZ1R5cGU2LCB0eXBlbmFtZSBTdHJp
bmdUeXBlNz4KLVN0cmluZyB0cnlNYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmlu
Z1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQs
IFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5cGU2IHN0cmluZzYsIFN0cmluZ1R5cGU3IHN0
cmluZzcpCi17Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTE+IGFkYXB0ZXIxKHN0
cmluZzEpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFwdGVyMihzdHJp
bmcyKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMz4gYWRhcHRlcjMoc3RyaW5n
Myk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTQ+IGFkYXB0ZXI0KHN0cmluZzQp
OwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU1PiBhZGFwdGVyNShzdHJpbmc1KTsK
LSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNj4gYWRhcHRlcjYoc3RyaW5nNik7Ci0g
ICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTc+IGFkYXB0ZXI3KHN0cmluZzcpOwotCi0g
ICAgYm9vbCBvdmVyZmxvdyA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIx
Lmxlbmd0aCgpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIyLmxlbmd0aCgp
LCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjMubGVuZ3Ro
KCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNC5sZW5n
dGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI1Lmxl
bmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjYu
bGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVy
Ny5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIGlmIChvdmVyZmxvdykKLSAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotCi0gICAgaWYgKGFkYXB0ZXIxLmlzOEJpdCgpICYmIGFkYXB0ZXIyLmlzOEJp
dCgpICYmIGFkYXB0ZXIzLmlzOEJpdCgpICYmIGFkYXB0ZXI0LmlzOEJpdCgpICYmIGFkYXB0ZXI1
LmlzOEJpdCgpICYmIGFkYXB0ZXI2LmlzOEJpdCgpICYmIGFkYXB0ZXI3LmlzOEJpdCgpKSB7Ci0g
ICAgICAgIExDaGFyKiBidWZmZXI7Ci0gICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJ
bXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7
Ci0gICAgICAgIGlmICghcmVzdWx0SW1wbCkKKyAgICAgICAgVUNoYXIqIGJ1ZmZlcjsKKyAgICAg
ICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5p
dGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOworICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgICAgICBMQ2hhciogcmVzdWx0ID0gYnVmZmVyOwot
ICAgICAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFw
dGVyMS5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgICAg
ICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIzLndyaXRlVG8o
cmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgICAgICBh
ZGFwdGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNC5sZW5n
dGgoKTsKLSAgICAgICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQg
Kz0gYWRhcHRlcjUubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI2LndyaXRlVG8ocmVzdWx0KTsK
LSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI2Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNy53
cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0SW1wbCk7Ci0g
ICAgfQotCi0gICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0
SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIp
OwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAg
VUNoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0g
ICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVz
dWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjMud3Jp
dGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsKLSAgICBhZGFw
dGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI0Lmxlbmd0aCgpOwot
ICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjUubGVu
Z3RoKCk7Ci0gICAgYWRhcHRlcjYud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFw
dGVyNi5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNy53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICByZXR1
cm4gV1RGTW92ZShyZXN1bHRJbXBsKTsKLX0KKyAgICAgICAgd3JpdGVUbyhidWZmZXIsIGFkYXB0
ZXJzKTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKKyAgICB9Cit9OwogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1l
IFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTUs
IHR5cGVuYW1lIFN0cmluZ1R5cGU2LCB0eXBlbmFtZSBTdHJpbmdUeXBlNywgdHlwZW5hbWUgU3Ry
aW5nVHlwZTg+Ci1TdHJpbmcgdHJ5TWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJp
bmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0
LCBTdHJpbmdUeXBlNSBzdHJpbmc1LCBTdHJpbmdUeXBlNiBzdHJpbmc2LCBTdHJpbmdUeXBlNyBz
dHJpbmc3LCBTdHJpbmdUeXBlOCBzdHJpbmc4KQotewotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0
cmluZ1R5cGUxPiBhZGFwdGVyMShzdHJpbmcxKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJp
bmdUeXBlMj4gYWRhcHRlcjIoc3RyaW5nMik7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5n
VHlwZTM+IGFkYXB0ZXIzKHN0cmluZzMpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5
cGU0PiBhZGFwdGVyNChzdHJpbmc0KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBl
NT4gYWRhcHRlcjUoc3RyaW5nNSk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTY+
IGFkYXB0ZXI2KHN0cmluZzYpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU3PiBh
ZGFwdGVyNyhzdHJpbmc3KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlOD4gYWRh
cHRlcjgoc3RyaW5nOCk7Ci0KLSAgICBib29sIG92ZXJmbG93ID0gZmFsc2U7Ci0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0
aCwgYWRhcHRlcjIubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVu
Z3RoLCBhZGFwdGVyMy5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhs
ZW5ndGgsIGFkYXB0ZXI0Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93
KGxlbmd0aCwgYWRhcHRlcjUubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZs
b3cobGVuZ3RoLCBhZGFwdGVyNi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVy
ZmxvdyhsZW5ndGgsIGFkYXB0ZXI3Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92
ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjgubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBpZiAob3Zl
cmZsb3cpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmIChhZGFwdGVyMS5pczhC
aXQoKSAmJiBhZGFwdGVyMi5pczhCaXQoKSAmJiBhZGFwdGVyMy5pczhCaXQoKSAmJiBhZGFwdGVy
NC5pczhCaXQoKSAmJiBhZGFwdGVyNS5pczhCaXQoKSAmJiBhZGFwdGVyNi5pczhCaXQoKSAmJiBh
ZGFwdGVyNy5pczhCaXQoKSAmJiBhZGFwdGVyOC5pczhCaXQoKSkgewotICAgICAgICBMQ2hhciog
YnVmZmVyOwotICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0lt
cGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgICAgICBpZiAo
IXJlc3VsdEltcGwpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Cit0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBZGFwdGVycz4KK3N0cnVjdCBTdHJpbmdBZGFwdGVyVHVwbGU8MCwgQWRhcHRlcnMu
Li4+IHsKKyAgICBzdGF0aWMgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IHN1bVdp
dGhPdmVyZmxvdyhjb25zdCBzdGQ6OnR1cGxlPEFkYXB0ZXJzLi4uPiYpIHsgcmV0dXJuIDA7IH0K
KyAgICBzdGF0aWMgYm9vbCBpczhCaXQoY29uc3Qgc3RkOjp0dXBsZTxBZGFwdGVycy4uLj4mKSB7
IHJldHVybiB0cnVlOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHZvaWQgd3Jp
dGVUbyhUKiwgY29uc3Qgc3RkOjp0dXBsZTxBZGFwdGVycy4uLj4mKSB7IH0KK307CiAKLSAgICAg
ICAgTENoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICAgICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1
bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0
ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgp
OwotICAgICAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBh
ZGFwdGVyMy5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQpOwotICAg
ICAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI1LndyaXRl
VG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI1Lmxlbmd0aCgpOwotICAgICAg
ICBhZGFwdGVyNi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNi5s
ZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjcud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1
bHQgKz0gYWRhcHRlcjcubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI4LndyaXRlVG8ocmVzdWx0
KTsKLQotICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHRJbXBsKTsKLSAgICB9Ci0KLSAgICBV
Q2hhciogYnVmZmVyOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5n
SW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFy
ZXN1bHRJbXBsKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBVQ2hhciogcmVzdWx0
ID0gYnVmZmVyOwotICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0g
YWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgIHJl
c3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7
Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgIGFkYXB0ZXI0LndyaXRlVG8o
cmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjUu
d3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyNS5sZW5ndGgoKTsKLSAgICBh
ZGFwdGVyNi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI2Lmxlbmd0aCgp
OwotICAgIGFkYXB0ZXI3LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjcu
bGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjgud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgcmV0dXJuIFdU
Rk1vdmUocmVzdWx0SW1wbCk7Ci19Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordXNpbmcgQWRhcHRl
clR5cGUgPSBTdHJpbmdUeXBlQWRhcHRlcjx0eXBlbmFtZSBzdGQ6OmRlY2F5PFQ+Ojp0eXBlPjsK
IAotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0
eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0cmlu
Z1R5cGU1LCB0eXBlbmFtZSBTdHJpbmdUeXBlNiwgdHlwZW5hbWUgU3RyaW5nVHlwZTcsIHR5cGVu
YW1lIFN0cmluZ1R5cGU4LCB0eXBlbmFtZSBTdHJpbmdUeXBlOT4KLVN0cmluZyB0cnlNYWtlU3Ry
aW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUz
IHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0cmlu
Z1R5cGU2IHN0cmluZzYsIFN0cmluZ1R5cGU3IHN0cmluZzcsIFN0cmluZ1R5cGU4IHN0cmluZzgs
IFN0cmluZ1R5cGU5IHN0cmluZzkpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIs
IHR5cGVuYW1lLi4uIFRzPgorU3RyaW5nIHRyeU1ha2VTdHJpbmcoY29uc3QgVDEmIHN0cmluZzEs
IGNvbnN0IFQyJiBzdHJpbmcyLCBjb25zdCBUcyYuLi4gc3RyaW5ncykKIHsKLSAgICBTdHJpbmdU
eXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3RyaW5nMSk7Ci0gICAgU3RyaW5nVHlw
ZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKHN0cmluZzIpOwotICAgIFN0cmluZ1R5cGVB
ZGFwdGVyPFN0cmluZ1R5cGUzPiBhZGFwdGVyMyhzdHJpbmczKTsKLSAgICBTdHJpbmdUeXBlQWRh
cHRlcjxTdHJpbmdUeXBlND4gYWRhcHRlcjQoc3RyaW5nNCk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0
ZXI8U3RyaW5nVHlwZTU+IGFkYXB0ZXI1KHN0cmluZzUpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVy
PFN0cmluZ1R5cGU2PiBhZGFwdGVyNihzdHJpbmc2KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxT
dHJpbmdUeXBlNz4gYWRhcHRlcjcoc3RyaW5nNyk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3Ry
aW5nVHlwZTg+IGFkYXB0ZXI4KHN0cmluZzgpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmlu
Z1R5cGU5PiBhZGFwdGVyOShzdHJpbmc5KTsKLQotICAgIGJvb2wgb3ZlcmZsb3cgPSBmYWxzZTsK
LSAgICB1bnNpZ25lZCBsZW5ndGggPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBzdW1XaXRoT3Zl
cmZsb3cobGVuZ3RoLCBhZGFwdGVyMi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhP
dmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIzLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0
aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjQubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1X
aXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNS5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1
bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI2Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAg
c3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjcubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAg
ICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyOC5sZW5ndGgoKSwgb3ZlcmZsb3cpOwot
ICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI5Lmxlbmd0aCgpLCBvdmVyZmxvdyk7
Ci0gICAgaWYgKG92ZXJmbG93KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBpZiAo
YWRhcHRlcjEuaXM4Qml0KCkgJiYgYWRhcHRlcjIuaXM4Qml0KCkgJiYgYWRhcHRlcjMuaXM4Qml0
KCkgJiYgYWRhcHRlcjQuaXM4Qml0KCkgJiYgYWRhcHRlcjUuaXM4Qml0KCkgJiYgYWRhcHRlcjYu
aXM4Qml0KCkgJiYgYWRhcHRlcjcuaXM4Qml0KCkgJiYgYWRhcHRlcjguaXM4Qml0KCkgJiYgYWRh
cHRlcjkuaXM4Qml0KCkpIHsKLSAgICAgICAgTENoYXIqIGJ1ZmZlcjsKLSAgICAgICAgUmVmUHRy
PFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxp
emVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgICAgIExDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0g
ICAgICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0
ZXIxLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAg
IHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjMud3JpdGVUbyhy
ZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7Ci0gICAgICAgIGFk
YXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI0Lmxlbmd0
aCgpOwotICAgICAgICBhZGFwdGVyNS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCAr
PSBhZGFwdGVyNS5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjYud3JpdGVUbyhyZXN1bHQpOwot
ICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjYubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI3Lndy
aXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI3Lmxlbmd0aCgpOwotICAg
ICAgICBhZGFwdGVyOC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVy
OC5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjkud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgICAg
IHJldHVybiBXVEZNb3ZlKHJlc3VsdEltcGwpOwotICAgIH0KLQotICAgIFVDaGFyKiBidWZmZXI7
Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVh
dGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIXJlc3VsdEltcGwpCi0g
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIFVDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0g
ICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5n
dGgoKTsKLSAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0
ZXIyLmxlbmd0aCgpOwotICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQg
Kz0gYWRhcHRlcjMubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQpOwotICAg
IHJlc3VsdCArPSBhZGFwdGVyNC5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNS53cml0ZVRvKHJlc3Vs
dCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI1Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI2LndyaXRl
VG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjYubGVuZ3RoKCk7Ci0gICAgYWRhcHRl
cjcud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyNy5sZW5ndGgoKTsKLSAg
ICBhZGFwdGVyOC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI4Lmxlbmd0
aCgpOwotICAgIGFkYXB0ZXI5LndyaXRlVG8ocmVzdWx0KTsKLQotICAgIHJldHVybiBXVEZNb3Zl
KHJlc3VsdEltcGwpOworICAgIGF1dG8gYWRhcHRlcnMgPSBzdGQ6Om1ha2VfdHVwbGUoQWRhcHRl
clR5cGU8VDE+KHN0cmluZzEpLCBBZGFwdGVyVHlwZTxUMj4oc3RyaW5nMiksIEFkYXB0ZXJUeXBl
PFRzPihzdHJpbmdzKS4uLik7CisgICAgcmV0dXJuIFN0cmluZ0FkYXB0ZXJUdXBsZTwyICsgc2l6
ZW9mLi4uKFRzKSwgQWRhcHRlclR5cGU8VDE+LCBBZGFwdGVyVHlwZTxUMj4sIEFkYXB0ZXJUeXBl
PFRzPi4uLj46OmNyZWF0ZVN0cmluZyhhZGFwdGVycyk7CiB9CiAKLQogLy8gQ29udmVuaWVuY2Ug
b25seS4KLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxPgotU3RyaW5nIG1ha2VTdHJpbmco
U3RyaW5nVHlwZTEgc3RyaW5nMSkKLXsKLSAgICByZXR1cm4gU3RyaW5nKHN0cmluZzEpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTI+Ci1T
dHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcy
KQotewotICAgIFN0cmluZyByZXN1bHQgPSB0cnlNYWtlU3RyaW5nKHN0cmluZzEsIHN0cmluZzIp
OwotICAgIGlmICghcmVzdWx0KQotICAgICAgICBDUkFTSCgpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBl
MiwgdHlwZW5hbWUgU3RyaW5nVHlwZTM+Ci1TdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBz
dHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczKQordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK1N0cmluZyBtYWtlU3RyaW5nKFQmJiBzdHJpbmcpCiB7Ci0gICAgU3Ry
aW5nIHJlc3VsdCA9IHRyeU1ha2VTdHJpbmcoc3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMyk7Ci0g
ICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0
eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQ+Ci1TdHJpbmcgbWFrZVN0
cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBl
MyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0KQotewotICAgIFN0cmluZyByZXN1bHQgPSB0
cnlNYWtlU3RyaW5nKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMsIHN0cmluZzQpOwotICAgIGlm
ICghcmVzdWx0KQotICAgICAgICBDUkFTSCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5h
bWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5cGU0LCB0eXBlbmFtZSBTdHJpbmdUeXBl
NT4KLVN0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0
cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQsIFN0cmluZ1R5
cGU1IHN0cmluZzUpCi17Ci0gICAgU3RyaW5nIHJlc3VsdCA9IHRyeU1ha2VTdHJpbmcoc3RyaW5n
MSwgc3RyaW5nMiwgc3RyaW5nMywgc3RyaW5nNCwgc3RyaW5nNSk7Ci0gICAgaWYgKCFyZXN1bHQp
Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdU
eXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1LCB0eXBlbmFt
ZSBTdHJpbmdUeXBlNj4KLVN0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0
cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmlu
ZzQsIFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5cGU2IHN0cmluZzYpCi17Ci0gICAgU3Ry
aW5nIHJlc3VsdCA9IHRyeU1ha2VTdHJpbmcoc3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMywgc3Ry
aW5nNCwgc3RyaW5nNSwgc3RyaW5nNik7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIENSQVNI
KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlw
ZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUg
U3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1LCB0eXBlbmFtZSBTdHJpbmdUeXBlNiwg
dHlwZW5hbWUgU3RyaW5nVHlwZTc+Ci1TdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJp
bmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBl
NCBzdHJpbmc0LCBTdHJpbmdUeXBlNSBzdHJpbmc1LCBTdHJpbmdUeXBlNiBzdHJpbmc2LCBTdHJp
bmdUeXBlNyBzdHJpbmc3KQotewotICAgIFN0cmluZyByZXN1bHQgPSB0cnlNYWtlU3RyaW5nKHN0
cmluZzEsIHN0cmluZzIsIHN0cmluZzMsIHN0cmluZzQsIHN0cmluZzUsIHN0cmluZzYsIHN0cmlu
ZzcpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICBDUkFTSCgpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdU
eXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5cGU0LCB0eXBlbmFt
ZSBTdHJpbmdUeXBlNSwgdHlwZW5hbWUgU3RyaW5nVHlwZTYsIHR5cGVuYW1lIFN0cmluZ1R5cGU3
LCB0eXBlbmFtZSBTdHJpbmdUeXBlOD4KLVN0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0
cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5
cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5cGU2IHN0cmluZzYsIFN0
cmluZ1R5cGU3IHN0cmluZzcsIFN0cmluZ1R5cGU4IHN0cmluZzgpCi17Ci0gICAgU3RyaW5nIHJl
c3VsdCA9IHRyeU1ha2VTdHJpbmcoc3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMywgc3RyaW5nNCwg
c3RyaW5nNSwgc3RyaW5nNiwgc3RyaW5nNywgc3RyaW5nOCk7Ci0gICAgaWYgKCFyZXN1bHQpCi0g
ICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gc3RkOjpmb3J3
YXJkPFQ+KHN0cmluZyk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBl
bmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5
cGU0LCB0eXBlbmFtZSBTdHJpbmdUeXBlNSwgdHlwZW5hbWUgU3RyaW5nVHlwZTYsIHR5cGVuYW1l
IFN0cmluZ1R5cGU3LCB0eXBlbmFtZSBTdHJpbmdUeXBlOCwgdHlwZW5hbWUgU3RyaW5nVHlwZTk+
Ci1TdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJp
bmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBTdHJpbmdUeXBl
NSBzdHJpbmc1LCBTdHJpbmdUeXBlNiBzdHJpbmc2LCBTdHJpbmdUeXBlNyBzdHJpbmc3LCBTdHJp
bmdUeXBlOCBzdHJpbmc4LCBTdHJpbmdUeXBlOSBzdHJpbmc5KQordGVtcGxhdGU8dHlwZW5hbWUg
VDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZS4uLiBUcz4KK1N0cmluZyBtYWtlU3RyaW5nKGNvbnN0
IFQxJiBzdHJpbmcxLCBjb25zdCBUMiYgc3RyaW5nMiwgY29uc3QgVHMmLi4uIHN0cmluZ3MpCiB7
Ci0gICAgU3RyaW5nIHJlc3VsdCA9IHRyeU1ha2VTdHJpbmcoc3RyaW5nMSwgc3RyaW5nMiwgc3Ry
aW5nMywgc3RyaW5nNCwgc3RyaW5nNSwgc3RyaW5nNiwgc3RyaW5nNywgc3RyaW5nOCwgc3RyaW5n
OSk7CisgICAgU3RyaW5nIHJlc3VsdCA9IHRyeU1ha2VTdHJpbmcoc3RyaW5nMSwgc3RyaW5nMiwg
c3RyaW5ncy4uLik7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIENSQVNIKCk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nT3BlcmF0
b3JzLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ09wZXJhdG9ycy5oCmluZGV4IDVhMjQz
NTY1OGQzMWU4Zjk2ODYyOTc1ODVlMjViZGMzNDg2ZjhjMmMuLjZhMTE3NjM3NjBkOWQ0ZjJmOGNh
NjBmNGM4YTA2NDJmZWQwOTI0MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nT3BlcmF0b3JzLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdPcGVyYXRvcnMu
aApAQCAtMjQsMTggKzI0LDE3IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTI+Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUMSwgdHlwZW5hbWUgVDI+CiBjbGFzcyBTdHJpbmdBcHBlbmQgewogcHVibGljOgotICAgIFN0
cmluZ0FwcGVuZChTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyKQotICAg
ICAgICA6IG1fc3RyaW5nMShzdHJpbmcxKQotICAgICAgICAsIG1fc3RyaW5nMihzdHJpbmcyKQor
ICAgIFN0cmluZ0FwcGVuZChjb25zdCBUMSYgc3RyaW5nMSwgY29uc3QgVDImIHN0cmluZzIpCisg
ICAgICAgIDogbV90dXBsZShzdGQ6Om1ha2VfdHVwbGUoQWRhcHRlclR5cGU8VDE+KHN0cmluZzEp
LCBBZGFwdGVyVHlwZTxUMj4oc3RyaW5nMikpKQogICAgIHsKICAgICB9CiAKICAgICBvcGVyYXRv
ciBTdHJpbmcoKSBjb25zdAogICAgIHsKLSAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHRyeU1ha2VT
dHJpbmcobV9zdHJpbmcxLCBtX3N0cmluZzIpOworICAgICAgICBTdHJpbmcgcmVzdWx0ID0gU3Ry
aW5nQWRhcHRlclR1cGxlPDIsIEFkYXB0ZXJUeXBlPFQxPiwgQWRhcHRlclR5cGU8VDI+Pjo6Y3Jl
YXRlU3RyaW5nKG1fdHVwbGUpOwogICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgIENS
QVNIKCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC00Niw2MSArNDUsNTQgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gb3BlcmF0b3IgU3RyaW5nKCk7CiAgICAgfQogCi0gICAgYm9vbCBp
czhCaXQoKQorICAgIGJvb2wgaXM4Qml0KCkgY29uc3QKICAgICB7Ci0gICAgICAgIFN0cmluZ1R5
cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBhZGFwdGVyMShtX3N0cmluZzEpOwotICAgICAgICBTdHJp
bmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRhcHRlcjIobV9zdHJpbmcyKTsKLSAgICAgICAg
cmV0dXJuIGFkYXB0ZXIxLmlzOEJpdCgpICYmIGFkYXB0ZXIyLmlzOEJpdCgpOworICAgICAgICBy
ZXR1cm4gc3RyaW5nMSgpLmlzOEJpdCgpICYmIHN0cmluZzIoKS5pczhCaXQoKTsKICAgICB9CiAK
LSAgICB2b2lkIHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0aW9uKQorICAgIHZvaWQgd3JpdGVUbyhM
Q2hhciogZGVzdGluYXRpb24pIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXM4Qml0KCkp
OwotICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEobV9zdHJp
bmcxKTsKLSAgICAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKG1f
c3RyaW5nMik7Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRlVG8oZGVzdGluYXRpb24pOwotICAgICAg
ICBhZGFwdGVyMi53cml0ZVRvKGRlc3RpbmF0aW9uICsgYWRhcHRlcjEubGVuZ3RoKCkpOworICAg
ICAgICBzdHJpbmcxKCkud3JpdGVUbyhkZXN0aW5hdGlvbik7CisgICAgICAgIHN0cmluZzIoKS53
cml0ZVRvKGRlc3RpbmF0aW9uICsgc3RyaW5nMSgpLmxlbmd0aCgpKTsKICAgICB9CiAKLSAgICB2
b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKQorICAgIHZvaWQgd3JpdGVUbyhVQ2hhciog
ZGVzdGluYXRpb24pIGNvbnN0CiAgICAgewotICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJp
bmdUeXBlMT4gYWRhcHRlcjEobV9zdHJpbmcxKTsKLSAgICAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8
U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKG1fc3RyaW5nMik7Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRl
VG8oZGVzdGluYXRpb24pOwotICAgICAgICBhZGFwdGVyMi53cml0ZVRvKGRlc3RpbmF0aW9uICsg
YWRhcHRlcjEubGVuZ3RoKCkpOworICAgICAgICBzdHJpbmcxKCkud3JpdGVUbyhkZXN0aW5hdGlv
bik7CisgICAgICAgIHN0cmluZzIoKS53cml0ZVRvKGRlc3RpbmF0aW9uICsgc3RyaW5nMSgpLmxl
bmd0aCgpKTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBsZW5ndGgoKQorICAgIHVuc2lnbmVkIGxl
bmd0aCgpIGNvbnN0CiAgICAgewotICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBl
MT4gYWRhcHRlcjEobV9zdHJpbmcxKTsKLSAgICAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5n
VHlwZTI+IGFkYXB0ZXIyKG1fc3RyaW5nMik7Ci0gICAgICAgIHJldHVybiBhZGFwdGVyMS5sZW5n
dGgoKSArIGFkYXB0ZXIyLmxlbmd0aCgpOworICAgICAgICByZXR1cm4gc3RyaW5nMSgpLmxlbmd0
aCgpICsgc3RyaW5nMigpLmxlbmd0aCgpOwogICAgIH0gICAgCiAKIHByaXZhdGU6Ci0gICAgU3Ry
aW5nVHlwZTEgbV9zdHJpbmcxOwotICAgIFN0cmluZ1R5cGUyIG1fc3RyaW5nMjsKKyAgICBzdGQ6
OnR1cGxlPEFkYXB0ZXJUeXBlPFQxPiwgQWRhcHRlclR5cGU8VDI+PiBtX3R1cGxlOworICAgIGNv
bnN0IEFkYXB0ZXJUeXBlPFQxPiYgc3RyaW5nMSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6Z2V0PDA+
KG1fdHVwbGUpOyB9CisgICAgY29uc3QgQWRhcHRlclR5cGU8VDI+JiBzdHJpbmcyKCkgY29uc3Qg
eyByZXR1cm4gc3RkOjpnZXQ8MT4obV90dXBsZSk7IH0KIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMj4KIGNsYXNzIFN0cmluZ1R5cGVBZGFw
dGVyPFN0cmluZ0FwcGVuZDxTdHJpbmdUeXBlMSwgU3RyaW5nVHlwZTI+PiB7CiBwdWJsaWM6Ci0g
ICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nQXBwZW5kPFN0cmluZ1R5cGUxLCBTdHJpbmdUeXBl
Mj4+KFN0cmluZ0FwcGVuZDxTdHJpbmdUeXBlMSwgU3RyaW5nVHlwZTI+JiBidWZmZXIpCisgICAg
U3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nQXBwZW5kPFN0cmluZ1R5cGUxLCBTdHJpbmdUeXBlMj4+
KGNvbnN0IFN0cmluZ0FwcGVuZDxTdHJpbmdUeXBlMSwgU3RyaW5nVHlwZTI+JiBidWZmZXIpCiAg
ICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQogICAgIHsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBs
ZW5ndGgoKSB7IHJldHVybiBtX2J1ZmZlci5sZW5ndGgoKTsgfQorICAgIHVuc2lnbmVkIGxlbmd0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLmxlbmd0aCgpOyB9CiAKLSAgICBib29sIGlzOEJp
dCgpIHsgcmV0dXJuIG1fYnVmZmVyLmlzOEJpdCgpOyB9CisgICAgYm9vbCBpczhCaXQoKSBjb25z
dCB7IHJldHVybiBtX2J1ZmZlci5pczhCaXQoKTsgfQogCi0gICAgdm9pZCB3cml0ZVRvKExDaGFy
KiBkZXN0aW5hdGlvbikgeyBtX2J1ZmZlci53cml0ZVRvKGRlc3RpbmF0aW9uKTsgfQotICAgIHZv
aWQgd3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pIHsgbV9idWZmZXIud3JpdGVUbyhkZXN0aW5h
dGlvbik7IH0KKyAgICB2b2lkIHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0aW9uKSBjb25zdCB7IG1f
YnVmZmVyLndyaXRlVG8oZGVzdGluYXRpb24pOyB9CisgICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBk
ZXN0aW5hdGlvbikgY29uc3QgeyBtX2J1ZmZlci53cml0ZVRvKGRlc3RpbmF0aW9uKTsgfQogCiAg
ICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXI7IH0KIAogcHJpdmF0
ZToKLSAgICBTdHJpbmdBcHBlbmQ8U3RyaW5nVHlwZTEsIFN0cmluZ1R5cGUyPiYgbV9idWZmZXI7
CisgICAgY29uc3QgU3RyaW5nQXBwZW5kPFN0cmluZ1R5cGUxLCBTdHJpbmdUeXBlMj4mIG1fYnVm
ZmVyOwogfTsKIAogaW5saW5lIFN0cmluZ0FwcGVuZDxjb25zdCBjaGFyKiwgU3RyaW5nPiBvcGVy
YXRvcisoY29uc3QgY2hhciogc3RyaW5nMSwgY29uc3QgU3RyaW5nJiBzdHJpbmcyKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdWaWV3LmggYi9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L1N0cmluZ1ZpZXcuaAppbmRleCA5OTE2MzcxMWRlMjk4ZWYyMmU4Yjc2YmNmNTY2YjQxYmEz
N2Q5MWNlLi5lZDhkZWRlY2I2ZDVhOTkxODMzNmYwYjA2Zjg3YzgwMWY1ODcxNmQ2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1ZpZXcuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ1ZpZXcuaApAQCAtNTI4LDEwICs1MjgsMTAgQEAgcHVibGljOgogICAgIHsK
ICAgICB9CiAKLSAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBtX3N0cmluZy5sZW5ndGgo
KTsgfQotICAgIGJvb2wgaXM4Qml0KCkgeyByZXR1cm4gbV9zdHJpbmcuaXM4Qml0KCk7IH0KLSAg
ICB2b2lkIHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0aW9uKSB7IG1fc3RyaW5nLmdldENoYXJhY3Rl
cnNXaXRoVXBjb252ZXJ0KGRlc3RpbmF0aW9uKTsgfQotICAgIHZvaWQgd3JpdGVUbyhVQ2hhciog
ZGVzdGluYXRpb24pIHsgbV9zdHJpbmcuZ2V0Q2hhcmFjdGVyc1dpdGhVcGNvbnZlcnQoZGVzdGlu
YXRpb24pOyB9CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcu
bGVuZ3RoKCk7IH0KKyAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlz
OEJpdCgpOyB9CisgICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikgY29uc3QgeyBt
X3N0cmluZy5nZXRDaGFyYWN0ZXJzV2l0aFVwY29udmVydChkZXN0aW5hdGlvbik7IH0KKyAgICB2
b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKSBjb25zdCB7IG1fc3RyaW5nLmdldENoYXJh
Y3RlcnNXaXRoVXBjb252ZXJ0KGRlc3RpbmF0aW9uKTsgfQogCiAgICAgU3RyaW5nIHRvU3RyaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcudG9TdHJpbmcoKTsgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296975</attachid>
            <date>2016-12-12 18:01:30 -0800</date>
            <delta_ts>2016-12-12 22:58:00 -0800</delta_ts>
            <desc>patch</desc>
            <filename>0001-makeString.patch</filename>
            <type>text/plain</type>
            <size>30201</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSAyYWVkMTlkZTZmZTY1MGMwY2YwZjRlOTk0NTFmMTk1ZWQyODVjODI4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBNb24sIDEyIERlYyAyMDE2IDE3OjU2OjU3IC0wODAwClN1YmplY3Q6IFtQQVRDSF0gbWFrZVN0
cmluZzwuLi4+CgotLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAg
ICAgICAgICAgfCAgMTQgKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdC
dWlsZGVyLmggICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3Vw
LmNwcCAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0UHJvdG90eXBlLmNwcCB8ICAgMiArLQogU291cmNlL1dURi9DaGFuZ2VMb2cgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAxNyArCiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0Nv
bmNhdGVuYXRlLmggICAgICAgICAgIHwgNTU3ICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDYgZmls
ZXMgY2hhbmdlZCwgNzQgaW5zZXJ0aW9ucygrKSwgNTIwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCmluZGV4IDY4ZWJiMmIuLjgyZjE4NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE2LTEyLTEyICBKRiBCYXN0aWVuICA8amZiYXN0aWVu
QGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBUdXJuIHRyeU1ha2VTdHJpbmcoKSwgbWFrZVN0
cmluZygpIGludG8gdmFyaWFkaWMgdGVtcGxhdGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcxNDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmdCdWlsZGVyLmg6CisgICAg
ICAgIChKU0M6OmpzTWFrZU5vbnRyaXZpYWxTdHJpbmcpOiByZW1vdmUgV1RGOjogcHJlZml4LCBp
dCBpc24ndCBuZWVkZWQgYW55bW9yZQorICAgICAgICAqIHJ1bnRpbWUvTG9va3VwLmNwcDoKKyAg
ICAgICAgKEpTQzo6cmVpZnlTdGF0aWNBY2Nlc3Nvcik6IHJlbW92ZSBXVEY6OiBwcmVmaXgsIGl0
IGlzbid0IG5lZWRlZCBhbnltb3JlCisgICAgICAgICogcnVudGltZS9PYmplY3RQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNUb1N0cmluZyk6IHJlbW92ZSBXVEY6
OiBwcmVmaXgsIGl0IGlzbid0IG5lZWRlZCBhbnltb3JlCisKIDIwMTYtMTItMTIgIE1pY2hhZWwg
U2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgRlRMOiBEdW1waW5nIGRpc2Fz
c2VtYmx5IHJlcXVpcmVzIHRoYXQgY29kZSBvcmlnaW4gaXMgc2V0IHdoZW4gbWFraW5nIHBvbHlt
b3JwaGljIHRhaWwgY2FsbHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZ0J1aWxkZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nQnVpbGRlci5oCmluZGV4IGY3YmFjY2EuLjg4YWQ2ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nQnVpbGRlci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nQnVpbGRlci5oCkBAIC0xMzAsNyArMTMwLDcg
QEAgaW5saW5lIEpTVmFsdWUganNNYWtlTm9udHJpdmlhbFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFN0cmluZ1R5cGUmIHN0cmluZywKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBTdHJpbmcgcmVz
dWx0ID0gV1RGOjp0cnlNYWtlU3RyaW5nKHN0cmluZywgc3RyaW5ncy4uLik7CisgICAgU3RyaW5n
IHJlc3VsdCA9IHRyeU1ha2VTdHJpbmcoc3RyaW5nLCBzdHJpbmdzLi4uKTsKICAgICBpZiAoVU5M
SUtFTFkoIXJlc3VsdCB8fCAhSlNTdHJpbmc6OmlzVmFsaWRMZW5ndGgocmVzdWx0Lmxlbmd0aCgp
KSkpCiAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwog
ICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgV1RGTW92ZShyZXN1bHQpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuY3BwCmluZGV4IDJiNTQwNGUuLmY0MDc0
MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmNwcApAQCAtMzEsNyAr
MzEsNyBAQCB2b2lkIHJlaWZ5U3RhdGljQWNjZXNzb3IoVk0mIHZtLCBjb25zdCBIYXNoVGFibGVW
YWx1ZSYgdmFsdWUsIEpTT2JqZWN0JiB0aGlzT2JqZQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpOwogICAgIEdldHRlclNldHRlciog
YWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0KTsKICAgICBp
ZiAodmFsdWUuYWNjZXNzb3JHZXR0ZXIoKSkgewotICAgICAgICBTdHJpbmcgZ2V0dGVyTmFtZSA9
IFdURjo6dHJ5TWFrZVN0cmluZyhBU0NJSUxpdGVyYWwoImdldCAiKSwgU3RyaW5nKCpwcm9wZXJ0
eU5hbWUucHVibGljTmFtZSgpKSk7CisgICAgICAgIFN0cmluZyBnZXR0ZXJOYW1lID0gdHJ5TWFr
ZVN0cmluZyhBU0NJSUxpdGVyYWwoImdldCAiKSwgU3RyaW5nKCpwcm9wZXJ0eU5hbWUucHVibGlj
TmFtZSgpKSk7CiAgICAgICAgIGlmICghZ2V0dGVyTmFtZSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcih2bSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5hdHRy
aWJ1dGVzKCkgJiBCdWlsdGluCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PYmplY3RQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T2JqZWN0UHJvdG90eXBlLmNwcAppbmRleCA2MTVhMWU3Li42OWQzMTNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKQEAgLTMzNyw3
ICszMzcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1Rv
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIAogICAgICAgICBTdHJpbmcgdGFnID0gdGhpc09iamVj
dC0+bWV0aG9kVGFibGUodm0pLT50b1N0cmluZ05hbWUodGhpc09iamVjdCwgZXhlYyk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgIFN0cmluZyBuZXdT
dHJpbmcgPSBXVEY6OnRyeU1ha2VTdHJpbmcoIltvYmplY3QgIiwgV1RGTW92ZSh0YWcpLCAiXSIp
OworICAgICAgICBTdHJpbmcgbmV3U3RyaW5nID0gdHJ5TWFrZVN0cmluZygiW29iamVjdCAiLCBX
VEZNb3ZlKHRhZyksICJdIik7CiAgICAgICAgIGlmICghbmV3U3RyaW5nKQogICAgICAgICAgICAg
cmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMDA1Njg4
ZC4uYzMwOWFiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxNi0xMi0xMiAgSkYgQmFzdGllbiAg
PGpmYmFzdGllbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gVHVybiB0cnlNYWtlU3RyaW5n
KCksIG1ha2VTdHJpbmcoKSBpbnRvIHZhcmlhZGljIHRlbXBsYXRlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3MTQyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSSB3cm90ZSB0aGlzIHBhdGNoIHdoaWxl
IGltcHJvdmluZyBXZWJBc3NlbWJseSdzIGVycm9yIG1lc3NhZ2VzLCBhbmQgb25seSBmb3VuZCB0
aGlzIGJ1ZyBhZnRlcndhZHMuIE15IGltcGxlbWVudGF0aW9uIGRvZXMgdGhlIGJhcmUgbWluaW11
bSB0byBtYWtlIHRoaXMgY29kZSB2YXJpYWRpYyB3aXRob3V0IGNoYW5naW5nIGJlaGF2aW9yLiBJ
IHRoaW5rIGl0J3MgYmV0dGVyIHRvIGdvIHdpdGggdGhpcyBiYWJ5IHN0ZXAgZmlyc3QsIGFuZCBp
bXByb3ZlIHRoZSBjb2RlIGxhdGVyLiBOb3RhYmxlLCBmb3IgbXkgV2ViQXNzZW1ibHkgcGF0Y2gg
SSBhbHNvIHRhdWdodCB0aGUgY29kZSB0byBoYW5kbGUgaW50ZWdlcnMgYW5kIG90aGVyIHR5cGVz
IChpbmNsdWRpbmcgV2ViQXNzZW1ibHkgdHlwZXMpLiBBIGZvbGxvdy11cCBjb3VsZCByZWx5IG9u
IEFETCBtYWdpYyB0byBwcmV0dHktZm9ybWF0IHRoZXNlIG90aGVyIHR5cGVzLgorCisgICAgICAg
ICogd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaDoKKyAgICAgICAgKFdURjo6c3VtV2l0aE92
ZXJmbG93KTogVGhpcyB1bmNvbmRpdGlvbmFsbHkgZG9lcyB0aGUgc3VtIGZvciBhbGwgaW5wdXRz
LCB3aGljaCB0aGUgY29tcGlsZXIgaXMgbW9yZSBsaWtlbHkgdG8gYXBwcmVjaWF0ZSAoYmVjYXVz
ZSBpdCdzIHRoZSBjb21tb24gY2FzZSkgY29tcGFyZWQgdG8gdGVzdGluZyBmb3Igb3ZlcmZsb3cg
YW5kIGJhaWxpbmcgb24gZWFjaCBhZGRpdGlvbgorICAgICAgICAoV1RGOjphcmU4Qml0KTogYXJl
OiB0aGUgcGx1cmFsIG9mIGlzIQorICAgICAgICAoV1RGOjptYWtlU3RyaW5nQWNjdW11bGF0b3Ip
OiBhY2N1bXVsYXRlIHN0cmluZ3MKKyAgICAgICAgKFdURjo6dHJ5TWFrZVN0cmluZ0Zyb21BZGFw
dGVycyk6IGEgc21hbGwgaGVscGVyIHdoaWNoIGNyZWF0ZXMgdGhlIHN0cmluZyBhZGFwdGVycwor
ICAgICAgICAoV1RGOjp0cnlNYWtlU3RyaW5nKTogZXhwb3NlIG91dCBvZiBXVEYsIHNpbmNlIGl0
J3MgcGFydCBvZiB0aGlzIGZpbGUncyB1c2VkIEFQSQorICAgICAgICAoV1RGOjptYWtlU3RyaW5n
KTogbWFrZSBpdCB2YXJpYWRpYworCiAyMDE2LTEyLTEyICBDb21taXQgUXVldWUgIDxjb21taXQt
cXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjA5
NzAzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5o
IGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCmluZGV4IDc3ZjM0ZGYu
LjQ1N2RhNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5h
dGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmgKQEAgLTE0
MSw3ICsxNDEsNyBAQCBwdWJsaWM6CiAgICAgICAgIHdoaWxlIChtX2NoYXJhY3RlcnNbbGVuZ3Ro
XSkKICAgICAgICAgICAgICsrbGVuZ3RoOwogCi0gICAgICAgIGlmIChsZW5ndGggPiBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCisgICAgICAgIGlmIChsZW5ndGggPiBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpIC8vIEZJWE1FCiAgICAgICAgICAgICBD
UkFTSCgpOwogCiAgICAgICAgIG1fbGVuZ3RoID0gbGVuZ3RoOwpAQCAtMTUwLDcgKzE1MCw3IEBA
IHB1YmxpYzoKICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsg
fQogICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIE5PX1JF
VFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCB3cml0ZVRvKExDaGFyKikgY29uc3QKKyAgICBOT19SRVRV
Uk5fRFVFX1RPX0NSQVNIIHZvaWQgd3JpdGVUbyhMQ2hhciopIGNvbnN0IC8vIEZJWE1FCiAgICAg
ewogICAgICAgICBDUkFTSCgpOwogICAgIH0KQEAgLTI1OSw3ICsyNTksNyBAQCBwdWJsaWM6CiAg
ICAgfQogfTsKIAotaW5saW5lIHZvaWQgc3VtV2l0aE92ZXJmbG93KHVuc2lnbmVkJiB0b3RhbCwg
dW5zaWduZWQgYWRkZW5kLCBib29sJiBvdmVyZmxvdykKK2lubGluZSB2b2lkIHN1bVdpdGhPdmVy
Zmxvdyhib29sJiBvdmVyZmxvdywgdW5zaWduZWQmIHRvdGFsLCB1bnNpZ25lZCBhZGRlbmQpCiB7
CiAgICAgdW5zaWduZWQgb2xkVG90YWwgPSB0b3RhbDsKICAgICB0b3RhbCA9IG9sZFRvdGFsICsg
YWRkZW5kOwpAQCAtMjY3LDMwOCArMjY3LDU3IEBAIGlubGluZSB2b2lkIHN1bVdpdGhPdmVyZmxv
dyh1bnNpZ25lZCYgdG90YWwsIHVuc2lnbmVkIGFkZGVuZCwgYm9vbCYgb3ZlcmZsb3cpCiAgICAg
ICAgIG92ZXJmbG93ID0gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEs
IHR5cGVuYW1lIFN0cmluZ1R5cGUyPgotU3RyaW5nIHRyeU1ha2VTdHJpbmcoU3RyaW5nVHlwZTEg
c3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMikKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFVuc2ln
bmVkPgoraW5saW5lIHZvaWQgc3VtV2l0aE92ZXJmbG93KGJvb2wmIG92ZXJmbG93LCB1bnNpZ25l
ZCYgdG90YWwsIHVuc2lnbmVkIGFkZGVuZCwgVW5zaWduZWQgLi4uYWRkZW5kcykKIHsKLSAgICBT
dHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3RyaW5nMSk7Ci0gICAgU3Ry
aW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKHN0cmluZzIpOwotCi0gICAgaWYg
KGFkYXB0ZXIxLmxlbmd0aCgpICYmICFhZGFwdGVyMi5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJu
IGFkYXB0ZXIxLnRvU3RyaW5nKCk7Ci0gICAgaWYgKCFhZGFwdGVyMS5sZW5ndGgoKSAmJiBhZGFw
dGVyMi5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIGFkYXB0ZXIyLnRvU3RyaW5nKCk7Ci0KLSAg
ICBib29sIG92ZXJmbG93ID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYWRhcHRlcjEu
bGVuZ3RoKCk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjIubGVuZ3RoKCks
IG92ZXJmbG93KTsKLSAgICBpZiAob3ZlcmZsb3cpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LQotICAgIGlmIChhZGFwdGVyMS5pczhCaXQoKSAmJiBhZGFwdGVyMi5pczhCaXQoKSkgewotICAg
ICAgICBMQ2hhciogYnVmZmVyOwotICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1w
bCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwot
ICAgICAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0K
LSAgICAgICAgTENoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICAgICAgYWRhcHRlcjEud3JpdGVU
byhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgICAg
IGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLQotICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1
bHRJbXBsKTsKLSAgICB9Ci0KLSAgICBVQ2hhciogYnVmZmVyOwotICAgIFJlZlB0cjxTdHJpbmdJ
bXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5n
dGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICByZXR1cm4gU3RyaW5n
KCk7Ci0KLSAgICBVQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgIGFkYXB0ZXIxLndyaXRlVG8o
cmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjIu
d3JpdGVUbyhyZXN1bHQpOwotCi0gICAgcmV0dXJuIFdURk1vdmUocmVzdWx0SW1wbCk7CisgICAg
dW5zaWduZWQgb2xkVG90YWwgPSB0b3RhbDsKKyAgICB0b3RhbCA9IG9sZFRvdGFsICsgYWRkZW5k
OworICAgIGlmICh0b3RhbCA8IG9sZFRvdGFsKQorICAgICAgICBvdmVyZmxvdyA9IHRydWU7Cisg
ICAgc3VtV2l0aE92ZXJmbG93KG92ZXJmbG93LCB0b3RhbCwgYWRkZW5kcy4uLik7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5h
bWUgU3RyaW5nVHlwZTM+Ci1TdHJpbmcgdHJ5TWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcx
LCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczKQordGVtcGxhdGU8dHlw
ZW5hbWUgQWRhcHRlcj4KK2lubGluZSBib29sIGFyZThCaXQoQWRhcHRlciBhZGFwdGVyKQogewot
ICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBhZGFwdGVyMShzdHJpbmcxKTsKLSAg
ICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRhcHRlcjIoc3RyaW5nMik7Ci0gICAg
U3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTM+IGFkYXB0ZXIzKHN0cmluZzMpOwotCi0gICAg
Ym9vbCBvdmVyZmxvdyA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIxLmxl
bmd0aCgpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIyLmxlbmd0aCgpLCBv
dmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjMubGVuZ3RoKCks
IG92ZXJmbG93KTsKLSAgICBpZiAob3ZlcmZsb3cpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LQotICAgIGlmIChhZGFwdGVyMS5pczhCaXQoKSAmJiBhZGFwdGVyMi5pczhCaXQoKSAmJiBhZGFw
dGVyMy5pczhCaXQoKSkgewotICAgICAgICBMQ2hhciogYnVmZmVyOwotICAgICAgICBSZWZQdHI8
U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgICAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICAgICAgTENoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAg
ICAgICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRl
cjEubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAg
cmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMy53cml0ZVRvKHJl
c3VsdCk7Ci0KLSAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0SW1wbCk7Ci0gICAgfQotCi0g
ICAgVUNoYXIqIGJ1ZmZlciA9IDA7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwg
PSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAg
ICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIFVDaGFy
KiByZXN1bHQgPSBidWZmZXI7Ci0gICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgIHJl
c3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7
Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgIGFkYXB0ZXIzLndyaXRlVG8o
cmVzdWx0KTsKLQotICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdEltcGwpOworICAgIHJldHVybiBh
ZGFwdGVyLmlzOEJpdCgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlw
ZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdU
eXBlND4KLVN0cmluZyB0cnlNYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5
cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdGVyLCB0eXBlbmFtZS4uLiBBZGFwdGVycz4KK2lubGluZSBi
b29sIGFyZThCaXQoQWRhcHRlciBhZGFwdGVyLCBBZGFwdGVycyAuLi5hZGFwdGVycykKIHsKLSAg
ICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3RyaW5nMSk7Ci0gICAg
U3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKHN0cmluZzIpOwotICAgIFN0
cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUzPiBhZGFwdGVyMyhzdHJpbmczKTsKLSAgICBTdHJp
bmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlND4gYWRhcHRlcjQoc3RyaW5nNCk7Ci0KLSAgICBib29s
IG92ZXJmbG93ID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYWRhcHRlcjEubGVuZ3Ro
KCk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjIubGVuZ3RoKCksIG92ZXJm
bG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyMy5sZW5ndGgoKSwgb3Zl
cmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI0Lmxlbmd0aCgpLCBv
dmVyZmxvdyk7Ci0gICAgaWYgKG92ZXJmbG93KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0K
LSAgICBpZiAoYWRhcHRlcjEuaXM4Qml0KCkgJiYgYWRhcHRlcjIuaXM4Qml0KCkgJiYgYWRhcHRl
cjMuaXM4Qml0KCkgJiYgYWRhcHRlcjQuaXM4Qml0KCkpIHsKLSAgICAgICAgTENoYXIqIGJ1ZmZl
cjsKLSAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0
cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAgaWYgKCFyZXN1
bHRJbXBsKQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgICAgIExDaGFyKiBy
ZXN1bHQgPSBidWZmZXI7Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICAg
ICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMi53cml0ZVRv
KHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICAgICAg
YWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjMubGVu
Z3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKLQotICAgICAgICByZXR1
cm4gV1RGTW92ZShyZXN1bHRJbXBsKTsKLSAgICB9Ci0KLSAgICBVQ2hhciogYnVmZmVyOwotICAg
IFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBVQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgIGFk
YXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7
Ci0gICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMi5s
ZW5ndGgoKTsKLSAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFk
YXB0ZXIzLmxlbmd0aCgpOwotICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKLQotICAgIHJl
dHVybiBXVEZNb3ZlKHJlc3VsdEltcGwpOworICAgIHJldHVybiBhZGFwdGVyLmlzOEJpdCgpICYm
IGFyZThCaXQoYWRhcHRlcnMuLi4pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBl
MSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBT
dHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTU+Ci1TdHJpbmcgdHJ5TWFrZVN0cmluZyhT
dHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJp
bmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBTdHJpbmdUeXBlNSBzdHJpbmc1KQordGVtcGxhdGU8
dHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUgQWRhcHRlcj4KK2lubGluZSB2b2lkIG1ha2VT
dHJpbmdBY2N1bXVsYXRvcihSZXN1bHRUeXBlKiByZXN1bHQsIEFkYXB0ZXIgYWRhcHRlcikKIHsK
LSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3RyaW5nMSk7Ci0g
ICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKHN0cmluZzIpOwotICAg
IFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUzPiBhZGFwdGVyMyhzdHJpbmczKTsKLSAgICBT
dHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlND4gYWRhcHRlcjQoc3RyaW5nNCk7Ci0gICAgU3Ry
aW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTU+IGFkYXB0ZXI1KHN0cmluZzUpOwotCi0gICAgYm9v
bCBvdmVyZmxvdyA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIxLmxlbmd0
aCgpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIyLmxlbmd0aCgpLCBvdmVy
Zmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjMubGVuZ3RoKCksIG92
ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNC5sZW5ndGgoKSwg
b3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI1Lmxlbmd0aCgp
LCBvdmVyZmxvdyk7Ci0gICAgaWYgKG92ZXJmbG93KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0KLSAgICBpZiAoYWRhcHRlcjEuaXM4Qml0KCkgJiYgYWRhcHRlcjIuaXM4Qml0KCkgJiYgYWRh
cHRlcjMuaXM4Qml0KCkgJiYgYWRhcHRlcjQuaXM4Qml0KCkgJiYgYWRhcHRlcjUuaXM4Qml0KCkp
IHsKLSAgICAgICAgTENoYXIqIGJ1ZmZlcjsKLSAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJl
c3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVm
ZmVyKTsKLSAgICAgICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwotCi0gICAgICAgIExDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAgICAgIGFkYXB0ZXIx
LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwot
ICAgICAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFw
dGVyMi5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwotICAgICAg
ICByZXN1bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI0LndyaXRlVG8o
cmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI0Lmxlbmd0aCgpOwotICAgICAgICBh
ZGFwdGVyNS53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0
SW1wbCk7Ci0gICAgfQotCi0gICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICBSZWZQdHI8U3RyaW5nSW1w
bD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3Ro
LCBidWZmZXIpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotCi0gICAgVUNoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICBhZGFwdGVyMS53cml0ZVRvKHJl
c3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIGFkYXB0ZXIyLndy
aXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAgYWRh
cHRlcjMud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsK
LSAgICBhZGFwdGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI0Lmxl
bmd0aCgpOwotICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKLQotICAgIHJldHVybiBXVEZN
b3ZlKHJlc3VsdEltcGwpOworICAgIGFkYXB0ZXIud3JpdGVUbyhyZXN1bHQpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1l
IFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTUs
IHR5cGVuYW1lIFN0cmluZ1R5cGU2PgotU3RyaW5nIHRyeU1ha2VTdHJpbmcoU3RyaW5nVHlwZTEg
c3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5n
VHlwZTQgc3RyaW5nNCwgU3RyaW5nVHlwZTUgc3RyaW5nNSwgU3RyaW5nVHlwZTYgc3RyaW5nNikK
K3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lIEFkYXB0ZXIsIHR5cGVuYW1l
Li4uIEFkYXB0ZXJzPgoraW5saW5lIHZvaWQgbWFrZVN0cmluZ0FjY3VtdWxhdG9yKFJlc3VsdFR5
cGUqIHJlc3VsdCwgQWRhcHRlciBhZGFwdGVyLCBBZGFwdGVycyAuLi5hZGFwdGVycykKIHsKLSAg
ICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3RyaW5nMSk7Ci0gICAg
U3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKHN0cmluZzIpOwotICAgIFN0
cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUzPiBhZGFwdGVyMyhzdHJpbmczKTsKLSAgICBTdHJp
bmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlND4gYWRhcHRlcjQoc3RyaW5nNCk7Ci0gICAgU3RyaW5n
VHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTU+IGFkYXB0ZXI1KHN0cmluZzUpOwotICAgIFN0cmluZ1R5
cGVBZGFwdGVyPFN0cmluZ1R5cGU2PiBhZGFwdGVyNihzdHJpbmc2KTsKLQotICAgIGJvb2wgb3Zl
cmZsb3cgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhZGFwdGVyMS5sZW5ndGgoKTsK
LSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyMi5sZW5ndGgoKSwgb3ZlcmZsb3cp
OwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIzLmxlbmd0aCgpLCBvdmVyZmxv
dyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjQubGVuZ3RoKCksIG92ZXJm
bG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNS5sZW5ndGgoKSwgb3Zl
cmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI2Lmxlbmd0aCgpLCBv
dmVyZmxvdyk7Ci0gICAgaWYgKG92ZXJmbG93KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0K
LSAgICBpZiAoYWRhcHRlcjEuaXM4Qml0KCkgJiYgYWRhcHRlcjIuaXM4Qml0KCkgJiYgYWRhcHRl
cjMuaXM4Qml0KCkgJiYgYWRhcHRlcjQuaXM4Qml0KCkgJiYgYWRhcHRlcjUuaXM4Qml0KCkgJiYg
YWRhcHRlcjYuaXM4Qml0KCkpIHsKLSAgICAgICAgTENoYXIqIGJ1ZmZlcjsKLSAgICAgICAgUmVm
UHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRp
YWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgICAgIExDaGFyKiByZXN1bHQgPSBidWZmZXI7
Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFk
YXB0ZXIxLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAg
ICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjMud3JpdGVU
byhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7Ci0gICAgICAg
IGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI0Lmxl
bmd0aCgpOwotICAgICAgICBhZGFwdGVyNS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3Vs
dCArPSBhZGFwdGVyNS5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjYud3JpdGVUbyhyZXN1bHQp
OwotCi0gICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdEltcGwpOwotICAgIH0KLQotICAgIFVD
aGFyKiBidWZmZXI7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJ
bXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIXJl
c3VsdEltcGwpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIFVDaGFyKiByZXN1bHQg
PSBidWZmZXI7Ci0gICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBh
ZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVz
dWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsK
LSAgICByZXN1bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjQud3JpdGVUbyhy
ZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyNC5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNS53
cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI1Lmxlbmd0aCgpOwotICAgIGFk
YXB0ZXI2LndyaXRlVG8ocmVzdWx0KTsKLQotICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdEltcGwp
OworICAgIGFkYXB0ZXIud3JpdGVUbyhyZXN1bHQpOworICAgIG1ha2VTdHJpbmdBY2N1bXVsYXRv
cihyZXN1bHQgKyBhZGFwdGVyLmxlbmd0aCgpLCBhZGFwdGVycy4uLik7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3Ry
aW5nVHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5cGU0LCB0eXBlbmFtZSBTdHJpbmdUeXBlNSwgdHlw
ZW5hbWUgU3RyaW5nVHlwZTYsIHR5cGVuYW1lIFN0cmluZ1R5cGU3PgotU3RyaW5nIHRyeU1ha2VT
dHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlw
ZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3RyaW5nNCwgU3RyaW5nVHlwZTUgc3RyaW5nNSwgU3Ry
aW5nVHlwZTYgc3RyaW5nNiwgU3RyaW5nVHlwZTcgc3RyaW5nNykKK3RlbXBsYXRlPHR5cGVuYW1l
IFN0cmluZ1R5cGVBZGFwdGVyLCB0eXBlbmFtZS4uLiBTdHJpbmdUeXBlQWRhcHRlcnM+CitTdHJp
bmcgdHJ5TWFrZVN0cmluZ0Zyb21BZGFwdGVycyhTdHJpbmdUeXBlQWRhcHRlciBhZGFwdGVyLCBT
dHJpbmdUeXBlQWRhcHRlcnMgLi4uYWRhcHRlcnMpCiB7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8
U3RyaW5nVHlwZTE+IGFkYXB0ZXIxKHN0cmluZzEpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0
cmluZ1R5cGUyPiBhZGFwdGVyMihzdHJpbmcyKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJp
bmdUeXBlMz4gYWRhcHRlcjMoc3RyaW5nMyk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5n
VHlwZTQ+IGFkYXB0ZXI0KHN0cmluZzQpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5
cGU1PiBhZGFwdGVyNShzdHJpbmc1KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBl
Nj4gYWRhcHRlcjYoc3RyaW5nNik7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTc+
IGFkYXB0ZXI3KHN0cmluZzcpOwotCiAgICAgYm9vbCBvdmVyZmxvdyA9IGZhbHNlOwotICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhs
ZW5ndGgsIGFkYXB0ZXIyLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93
KGxlbmd0aCwgYWRhcHRlcjMubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZs
b3cobGVuZ3RoLCBhZGFwdGVyNC5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVy
ZmxvdyhsZW5ndGgsIGFkYXB0ZXI1Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92
ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjYubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRo
T3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNy5sZW5ndGgoKSwgb3ZlcmZsb3cpOworICAgIHVuc2ln
bmVkIGxlbmd0aCA9IGFkYXB0ZXIubGVuZ3RoKCk7CisgICAgc3VtV2l0aE92ZXJmbG93KG92ZXJm
bG93LCBsZW5ndGgsIGFkYXB0ZXJzLmxlbmd0aCgpLi4uKTsKICAgICBpZiAob3ZlcmZsb3cpCiAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIGlmIChhZGFwdGVyMS5pczhCaXQoKSAmJiBh
ZGFwdGVyMi5pczhCaXQoKSAmJiBhZGFwdGVyMy5pczhCaXQoKSAmJiBhZGFwdGVyNC5pczhCaXQo
KSAmJiBhZGFwdGVyNS5pczhCaXQoKSAmJiBhZGFwdGVyNi5pczhCaXQoKSAmJiBhZGFwdGVyNy5p
czhCaXQoKSkgeworICAgIGlmIChhcmU4Qml0KGFkYXB0ZXIsIGFkYXB0ZXJzLi4uKSkgewogICAg
ICAgICBMQ2hhciogYnVmZmVyOwogICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1w
bCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwog
ICAgICAgICBpZiAoIXJlc3VsdEltcGwpCiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAK
LSAgICAgICAgTENoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICAgICAgYWRhcHRlcjEud3JpdGVU
byhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgICAg
IGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxl
bmd0aCgpOwotICAgICAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3Vs
dCArPSBhZGFwdGVyMy5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQp
OwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI1
LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI1Lmxlbmd0aCgpOwot
ICAgICAgICBhZGFwdGVyNi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFw
dGVyNi5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjcud3JpdGVUbyhyZXN1bHQpOworICAgICAg
ICBtYWtlU3RyaW5nQWNjdW11bGF0b3IoYnVmZmVyLCBhZGFwdGVyLCBhZGFwdGVycy4uLik7CiAK
ICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0SW1wbCk7CiAgICAgfQpAQCAtNTc4LDI1NSAr
MzI3LDI4IEBAIFN0cmluZyB0cnlNYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmlu
Z1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluCiAgICAgaWYgKCFyZXN1bHRJbXBsKQog
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBVQ2hhciogcmVzdWx0ID0gYnVmZmVyOwot
ICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVu
Z3RoKCk7Ci0gICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFw
dGVyMi5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0
ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKLSAg
ICByZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1
bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyNS5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNi53cml0
ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI2Lmxlbmd0aCgpOwotICAgIGFkYXB0
ZXI3LndyaXRlVG8ocmVzdWx0KTsKKyAgICBtYWtlU3RyaW5nQWNjdW11bGF0b3IoYnVmZmVyLCBh
ZGFwdGVyLCBhZGFwdGVycy4uLik7CiAKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHRJbXBsKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUy
LCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0
cmluZ1R5cGU1LCB0eXBlbmFtZSBTdHJpbmdUeXBlNiwgdHlwZW5hbWUgU3RyaW5nVHlwZTcsIHR5
cGVuYW1lIFN0cmluZ1R5cGU4PgotU3RyaW5nIHRyeU1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3Ry
aW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5nVHlw
ZTQgc3RyaW5nNCwgU3RyaW5nVHlwZTUgc3RyaW5nNSwgU3RyaW5nVHlwZTYgc3RyaW5nNiwgU3Ry
aW5nVHlwZTcgc3RyaW5nNywgU3RyaW5nVHlwZTggc3RyaW5nOCkKK3RlbXBsYXRlPHR5cGVuYW1l
Li4uIFN0cmluZ1R5cGVzPgorU3RyaW5nIHRyeU1ha2VTdHJpbmcoU3RyaW5nVHlwZXMgLi4uc3Ry
aW5ncykKIHsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3Ry
aW5nMSk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKHN0cmlu
ZzIpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUzPiBhZGFwdGVyMyhzdHJpbmcz
KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlND4gYWRhcHRlcjQoc3RyaW5nNCk7
Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTU+IGFkYXB0ZXI1KHN0cmluZzUpOwot
ICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU2PiBhZGFwdGVyNihzdHJpbmc2KTsKLSAg
ICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNz4gYWRhcHRlcjcoc3RyaW5nNyk7Ci0gICAg
U3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTg+IGFkYXB0ZXI4KHN0cmluZzgpOwotCi0gICAg
Ym9vbCBvdmVyZmxvdyA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIxLmxl
bmd0aCgpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIyLmxlbmd0aCgpLCBv
dmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjMubGVuZ3RoKCks
IG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNC5sZW5ndGgo
KSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI1Lmxlbmd0
aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjYubGVu
Z3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNy5s
ZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI4
Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgaWYgKG92ZXJmbG93KQotICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0KLSAgICBpZiAoYWRhcHRlcjEuaXM4Qml0KCkgJiYgYWRhcHRlcjIuaXM4Qml0
KCkgJiYgYWRhcHRlcjMuaXM4Qml0KCkgJiYgYWRhcHRlcjQuaXM4Qml0KCkgJiYgYWRhcHRlcjUu
aXM4Qml0KCkgJiYgYWRhcHRlcjYuaXM4Qml0KCkgJiYgYWRhcHRlcjcuaXM4Qml0KCkgJiYgYWRh
cHRlcjguaXM4Qml0KCkpIHsKLSAgICAgICAgTENoYXIqIGJ1ZmZlcjsKLSAgICAgICAgUmVmUHRy
PFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxp
emVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgICAgIExDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0g
ICAgICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0
ZXIxLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAg
IHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjMud3JpdGVUbyhy
ZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7Ci0gICAgICAgIGFk
YXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI0Lmxlbmd0
aCgpOwotICAgICAgICBhZGFwdGVyNS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCAr
PSBhZGFwdGVyNS5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjYud3JpdGVUbyhyZXN1bHQpOwot
ICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjYubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI3Lndy
aXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI3Lmxlbmd0aCgpOwotICAg
ICAgICBhZGFwdGVyOC53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICAgICAgcmV0dXJuIFdURk1vdmUo
cmVzdWx0SW1wbCk7Ci0gICAgfQotCi0gICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICBSZWZQdHI8U3Ry
aW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQo
bGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotCi0gICAgVUNoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICBhZGFwdGVyMS53cml0
ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIGFkYXB0
ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0g
ICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5n
dGgoKTsKLSAgICBhZGFwdGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0
ZXI0Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQg
Kz0gYWRhcHRlcjUubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjYud3JpdGVUbyhyZXN1bHQpOwotICAg
IHJlc3VsdCArPSBhZGFwdGVyNi5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNy53cml0ZVRvKHJlc3Vs
dCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI3Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI4LndyaXRl
VG8ocmVzdWx0KTsKLQotICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdEltcGwpOworICAgIHJldHVy
biB0cnlNYWtlU3RyaW5nRnJvbUFkYXB0ZXJzKFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGVz
PihzdHJpbmdzKS4uLik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBl
bmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5
cGU0LCB0eXBlbmFtZSBTdHJpbmdUeXBlNSwgdHlwZW5hbWUgU3RyaW5nVHlwZTYsIHR5cGVuYW1l
IFN0cmluZ1R5cGU3LCB0eXBlbmFtZSBTdHJpbmdUeXBlOCwgdHlwZW5hbWUgU3RyaW5nVHlwZTk+
Ci1TdHJpbmcgdHJ5TWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBz
dHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBTdHJpbmdU
eXBlNSBzdHJpbmc1LCBTdHJpbmdUeXBlNiBzdHJpbmc2LCBTdHJpbmdUeXBlNyBzdHJpbmc3LCBT
dHJpbmdUeXBlOCBzdHJpbmc4LCBTdHJpbmdUeXBlOSBzdHJpbmc5KQotewotICAgIFN0cmluZ1R5
cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBhZGFwdGVyMShzdHJpbmcxKTsKLSAgICBTdHJpbmdUeXBl
QWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRhcHRlcjIoc3RyaW5nMik7Ci0gICAgU3RyaW5nVHlwZUFk
YXB0ZXI8U3RyaW5nVHlwZTM+IGFkYXB0ZXIzKHN0cmluZzMpOwotICAgIFN0cmluZ1R5cGVBZGFw
dGVyPFN0cmluZ1R5cGU0PiBhZGFwdGVyNChzdHJpbmc0KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRl
cjxTdHJpbmdUeXBlNT4gYWRhcHRlcjUoc3RyaW5nNSk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8
U3RyaW5nVHlwZTY+IGFkYXB0ZXI2KHN0cmluZzYpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0
cmluZ1R5cGU3PiBhZGFwdGVyNyhzdHJpbmc3KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJp
bmdUeXBlOD4gYWRhcHRlcjgoc3RyaW5nOCk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5n
VHlwZTk+IGFkYXB0ZXI5KHN0cmluZzkpOwotCi0gICAgYm9vbCBvdmVyZmxvdyA9IGZhbHNlOwot
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIHN1bVdpdGhPdmVy
ZmxvdyhsZW5ndGgsIGFkYXB0ZXIyLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92
ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjMubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRo
T3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNC5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdp
dGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI1Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3Vt
V2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjYubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBz
dW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNy5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAg
IHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI4Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0g
ICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjkubGVuZ3RoKCksIG92ZXJmbG93KTsK
LSAgICBpZiAob3ZlcmZsb3cpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmIChh
ZGFwdGVyMS5pczhCaXQoKSAmJiBhZGFwdGVyMi5pczhCaXQoKSAmJiBhZGFwdGVyMy5pczhCaXQo
KSAmJiBhZGFwdGVyNC5pczhCaXQoKSAmJiBhZGFwdGVyNS5pczhCaXQoKSAmJiBhZGFwdGVyNi5p
czhCaXQoKSAmJiBhZGFwdGVyNy5pczhCaXQoKSAmJiBhZGFwdGVyOC5pczhCaXQoKSAmJiBhZGFw
dGVyOS5pczhCaXQoKSkgewotICAgICAgICBMQ2hhciogYnVmZmVyOwotICAgICAgICBSZWZQdHI8
U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgICAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICAgICAgTENoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAg
ICAgICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRl
cjEubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAg
cmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMy53cml0ZVRvKHJl
c3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsKLSAgICAgICAgYWRh
cHRlcjQud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3Ro
KCk7Ci0gICAgICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9
IGFkYXB0ZXI1Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNi53cml0ZVRvKHJlc3VsdCk7Ci0g
ICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNi5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjcud3Jp
dGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjcubGVuZ3RoKCk7Ci0gICAg
ICAgIGFkYXB0ZXI4LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI4
Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyOS53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICAgICAg
cmV0dXJuIFdURk1vdmUocmVzdWx0SW1wbCk7Ci0gICAgfQotCi0gICAgVUNoYXIqIGJ1ZmZlcjsK
LSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0
ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgVUNoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAg
ICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0
aCgpOwotICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRl
cjIubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCAr
PSBhZGFwdGVyMy5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0gICAg
cmVzdWx0ICs9IGFkYXB0ZXI0Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0
KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjUubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjYud3JpdGVU
byhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyNi5sZW5ndGgoKTsKLSAgICBhZGFwdGVy
Ny53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI3Lmxlbmd0aCgpOwotICAg
IGFkYXB0ZXI4LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjgubGVuZ3Ro
KCk7Ci0gICAgYWRhcHRlcjkud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgcmV0dXJuIFdURk1vdmUo
cmVzdWx0SW1wbCk7Ci19Ci0KLQogLy8gQ29udmVuaWVuY2Ugb25seS4KLXRlbXBsYXRlPHR5cGVu
YW1lIFN0cmluZ1R5cGUxPgotU3RyaW5nIG1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSkK
LXsKLSAgICByZXR1cm4gU3RyaW5nKHN0cmluZzEpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBT
dHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTI+Ci1TdHJpbmcgbWFrZVN0cmluZyhTdHJp
bmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyKQotewotICAgIFN0cmluZyByZXN1
bHQgPSB0cnlNYWtlU3RyaW5nKHN0cmluZzEsIHN0cmluZzIpOwotICAgIGlmICghcmVzdWx0KQot
ICAgICAgICBDUkFTSCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlw
ZTM+Ci1TdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBz
dHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczKQotewotICAgIFN0cmluZyByZXN1bHQgPSB0cnlN
YWtlU3RyaW5nKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMpOwotICAgIGlmICghcmVzdWx0KQot
ICAgICAgICBDUkFTSCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlw
ZTMsIHR5cGVuYW1lIFN0cmluZ1R5cGU0PgotU3RyaW5nIG1ha2VTdHJpbmcoU3RyaW5nVHlwZTEg
c3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5n
VHlwZTQgc3RyaW5nNCkKLXsKLSAgICBTdHJpbmcgcmVzdWx0ID0gdHJ5TWFrZVN0cmluZyhzdHJp
bmcxLCBzdHJpbmcyLCBzdHJpbmczLCBzdHJpbmc0KTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAg
ICAgQ1JBU0goKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBT
dHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0
eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTU+Ci1TdHJpbmcgbWFrZVN0
cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBl
MyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBTdHJpbmdUeXBlNSBzdHJpbmc1KQotewot
ICAgIFN0cmluZyByZXN1bHQgPSB0cnlNYWtlU3RyaW5nKHN0cmluZzEsIHN0cmluZzIsIHN0cmlu
ZzMsIHN0cmluZzQsIHN0cmluZzUpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICBDUkFTSCgp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUx
LCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0
cmluZ1R5cGU0LCB0eXBlbmFtZSBTdHJpbmdUeXBlNSwgdHlwZW5hbWUgU3RyaW5nVHlwZTY+Ci1T
dHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcy
LCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBTdHJpbmdUeXBlNSBz
dHJpbmc1LCBTdHJpbmdUeXBlNiBzdHJpbmc2KQotewotICAgIFN0cmluZyByZXN1bHQgPSB0cnlN
YWtlU3RyaW5nKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMsIHN0cmluZzQsIHN0cmluZzUsIHN0
cmluZzYpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICBDUkFTSCgpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJp
bmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5cGU0LCB0eXBl
bmFtZSBTdHJpbmdUeXBlNSwgdHlwZW5hbWUgU3RyaW5nVHlwZTYsIHR5cGVuYW1lIFN0cmluZ1R5
cGU3PgotU3RyaW5nIG1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIg
c3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3RyaW5nNCwgU3RyaW5n
VHlwZTUgc3RyaW5nNSwgU3RyaW5nVHlwZTYgc3RyaW5nNiwgU3RyaW5nVHlwZTcgc3RyaW5nNykK
LXsKLSAgICBTdHJpbmcgcmVzdWx0ID0gdHJ5TWFrZVN0cmluZyhzdHJpbmcxLCBzdHJpbmcyLCBz
dHJpbmczLCBzdHJpbmc0LCBzdHJpbmc1LCBzdHJpbmc2LCBzdHJpbmc3KTsKLSAgICBpZiAoIXJl
c3VsdCkKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0
cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTUsIHR5
cGVuYW1lIFN0cmluZ1R5cGU2LCB0eXBlbmFtZSBTdHJpbmdUeXBlNywgdHlwZW5hbWUgU3RyaW5n
VHlwZTg+Ci1TdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBl
MiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBTdHJp
bmdUeXBlNSBzdHJpbmc1LCBTdHJpbmdUeXBlNiBzdHJpbmc2LCBTdHJpbmdUeXBlNyBzdHJpbmc3
LCBTdHJpbmdUeXBlOCBzdHJpbmc4KQordGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZT4KK1N0
cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGUgc3RyaW5nKQogewotICAgIFN0cmluZyByZXN1bHQg
PSB0cnlNYWtlU3RyaW5nKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMsIHN0cmluZzQsIHN0cmlu
ZzUsIHN0cmluZzYsIHN0cmluZzcsIHN0cmluZzgpOwotICAgIGlmICghcmVzdWx0KQotICAgICAg
ICBDUkFTSCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIFN0cmluZyhzdHJpbmcp
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlw
ZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUg
U3RyaW5nVHlwZTUsIHR5cGVuYW1lIFN0cmluZ1R5cGU2LCB0eXBlbmFtZSBTdHJpbmdUeXBlNywg
dHlwZW5hbWUgU3RyaW5nVHlwZTgsIHR5cGVuYW1lIFN0cmluZ1R5cGU5PgotU3RyaW5nIG1ha2VT
dHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlw
ZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3RyaW5nNCwgU3RyaW5nVHlwZTUgc3RyaW5nNSwgU3Ry
aW5nVHlwZTYgc3RyaW5nNiwgU3RyaW5nVHlwZTcgc3RyaW5nNywgU3RyaW5nVHlwZTggc3RyaW5n
OCwgU3RyaW5nVHlwZTkgc3RyaW5nOSkKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFN0cmluZ1R5cGVz
PgorU3RyaW5nIG1ha2VTdHJpbmcoU3RyaW5nVHlwZXMuLi4gc3RyaW5ncykKIHsKLSAgICBTdHJp
bmcgcmVzdWx0ID0gdHJ5TWFrZVN0cmluZyhzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczLCBzdHJp
bmc0LCBzdHJpbmc1LCBzdHJpbmc2LCBzdHJpbmc3LCBzdHJpbmc4LCBzdHJpbmc5KTsKKyAgICBT
dHJpbmcgcmVzdWx0ID0gdHJ5TWFrZVN0cmluZyhzdHJpbmdzLi4uKTsKICAgICBpZiAoIXJlc3Vs
dCkKICAgICAgICAgQ1JBU0goKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtODM1LDYgKzM1Nyw3
IEBAIFN0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0
cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcg
V1RGOjptYWtlU3RyaW5nOwordXNpbmcgV1RGOjp0cnlNYWtlU3RyaW5nOwogCiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nT3BlcmF0b3JzLmg+CiAjZW5kaWYKLS0gCjIuMTAuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296991</attachid>
            <date>2016-12-12 22:58:00 -0800</date>
            <delta_ts>2016-12-13 10:38:28 -0800</delta_ts>
            <desc>patch</desc>
            <filename>0001-makeString.patch</filename>
            <type>text/plain</type>
            <size>30619</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSA1MjI5Y2ZmOWUzODBkZjM4ZDE2YTE2ZDg0MjA2YWRmNjRiNDc2MDJlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBNb24sIDEyIERlYyAyMDE2IDE3OjU2OjU3IC0wODAwClN1YmplY3Q6IFtQQVRDSF0gbWFrZVN0
cmluZzwuLi4+CgotLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAg
ICAgICAgICAgfCAgMTQgKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdC
dWlsZGVyLmggICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3Vw
LmNwcCAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0UHJvdG90eXBlLmNwcCB8ICAgMiArLQogU291cmNlL1dURi9DaGFuZ2VMb2cgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAyNiArCiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0Nv
bmNhdGVuYXRlLmggICAgICAgICAgIHwgNTU5ICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDYgZmls
ZXMgY2hhbmdlZCwgODQgaW5zZXJ0aW9ucygrKSwgNTIxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCmluZGV4IDY4ZWJiMmIuLjgyZjE4NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE2LTEyLTEyICBKRiBCYXN0aWVuICA8amZiYXN0aWVu
QGFwcGxlLmNvbT4KKworICAgICAgICBbV1RGXSBUdXJuIHRyeU1ha2VTdHJpbmcoKSwgbWFrZVN0
cmluZygpIGludG8gdmFyaWFkaWMgdGVtcGxhdGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDcxNDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmdCdWlsZGVyLmg6CisgICAg
ICAgIChKU0M6OmpzTWFrZU5vbnRyaXZpYWxTdHJpbmcpOiByZW1vdmUgV1RGOjogcHJlZml4LCBp
dCBpc24ndCBuZWVkZWQgYW55bW9yZQorICAgICAgICAqIHJ1bnRpbWUvTG9va3VwLmNwcDoKKyAg
ICAgICAgKEpTQzo6cmVpZnlTdGF0aWNBY2Nlc3Nvcik6IHJlbW92ZSBXVEY6OiBwcmVmaXgsIGl0
IGlzbid0IG5lZWRlZCBhbnltb3JlCisgICAgICAgICogcnVudGltZS9PYmplY3RQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpvYmplY3RQcm90b0Z1bmNUb1N0cmluZyk6IHJlbW92ZSBXVEY6
OiBwcmVmaXgsIGl0IGlzbid0IG5lZWRlZCBhbnltb3JlCisKIDIwMTYtMTItMTIgIE1pY2hhZWwg
U2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgRlRMOiBEdW1waW5nIGRpc2Fz
c2VtYmx5IHJlcXVpcmVzIHRoYXQgY29kZSBvcmlnaW4gaXMgc2V0IHdoZW4gbWFraW5nIHBvbHlt
b3JwaGljIHRhaWwgY2FsbHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZ0J1aWxkZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nQnVpbGRlci5oCmluZGV4IGY3YmFjY2EuLjg4YWQ2ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nQnVpbGRlci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nQnVpbGRlci5oCkBAIC0xMzAsNyArMTMwLDcg
QEAgaW5saW5lIEpTVmFsdWUganNNYWtlTm9udHJpdmlhbFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFN0cmluZ1R5cGUmIHN0cmluZywKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBTdHJpbmcgcmVz
dWx0ID0gV1RGOjp0cnlNYWtlU3RyaW5nKHN0cmluZywgc3RyaW5ncy4uLik7CisgICAgU3RyaW5n
IHJlc3VsdCA9IHRyeU1ha2VTdHJpbmcoc3RyaW5nLCBzdHJpbmdzLi4uKTsKICAgICBpZiAoVU5M
SUtFTFkoIXJlc3VsdCB8fCAhSlNTdHJpbmc6OmlzVmFsaWRMZW5ndGgocmVzdWx0Lmxlbmd0aCgp
KSkpCiAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwog
ICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgV1RGTW92ZShyZXN1bHQpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuY3BwCmluZGV4IDJiNTQwNGUuLmY0MDc0
MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmNwcApAQCAtMzEsNyAr
MzEsNyBAQCB2b2lkIHJlaWZ5U3RhdGljQWNjZXNzb3IoVk0mIHZtLCBjb25zdCBIYXNoVGFibGVW
YWx1ZSYgdmFsdWUsIEpTT2JqZWN0JiB0aGlzT2JqZQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpOwogICAgIEdldHRlclNldHRlciog
YWNjZXNzb3IgPSBHZXR0ZXJTZXR0ZXI6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0KTsKICAgICBp
ZiAodmFsdWUuYWNjZXNzb3JHZXR0ZXIoKSkgewotICAgICAgICBTdHJpbmcgZ2V0dGVyTmFtZSA9
IFdURjo6dHJ5TWFrZVN0cmluZyhBU0NJSUxpdGVyYWwoImdldCAiKSwgU3RyaW5nKCpwcm9wZXJ0
eU5hbWUucHVibGljTmFtZSgpKSk7CisgICAgICAgIFN0cmluZyBnZXR0ZXJOYW1lID0gdHJ5TWFr
ZVN0cmluZyhBU0NJSUxpdGVyYWwoImdldCAiKSwgU3RyaW5nKCpwcm9wZXJ0eU5hbWUucHVibGlj
TmFtZSgpKSk7CiAgICAgICAgIGlmICghZ2V0dGVyTmFtZSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgYWNjZXNzb3ItPnNldEdldHRlcih2bSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5hdHRy
aWJ1dGVzKCkgJiBCdWlsdGluCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PYmplY3RQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T2JqZWN0UHJvdG90eXBlLmNwcAppbmRleCA2MTVhMWU3Li42OWQzMTNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3RvdHlwZS5jcHAKQEAgLTMzNyw3
ICszMzcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG9iamVjdFByb3RvRnVuY1Rv
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIAogICAgICAgICBTdHJpbmcgdGFnID0gdGhpc09iamVj
dC0+bWV0aG9kVGFibGUodm0pLT50b1N0cmluZ05hbWUodGhpc09iamVjdCwgZXhlYyk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgIFN0cmluZyBuZXdT
dHJpbmcgPSBXVEY6OnRyeU1ha2VTdHJpbmcoIltvYmplY3QgIiwgV1RGTW92ZSh0YWcpLCAiXSIp
OworICAgICAgICBTdHJpbmcgbmV3U3RyaW5nID0gdHJ5TWFrZVN0cmluZygiW29iamVjdCAiLCBX
VEZNb3ZlKHRhZyksICJdIik7CiAgICAgICAgIGlmICghbmV3U3RyaW5nKQogICAgICAgICAgICAg
cmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMDA1Njg4
ZC4uYmQ5ODljZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxNi0xMi0xMiAgSkYgQmFzdGllbiAg
PGpmYmFzdGllbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gVHVybiB0cnlNYWtlU3RyaW5n
KCksIG1ha2VTdHJpbmcoKSBpbnRvIHZhcmlhZGljIHRlbXBsYXRlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3MTQyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSSB3cm90ZSB0aGlzIHBhdGNoIHdoaWxl
IGltcHJvdmluZyBXZWJBc3NlbWJseSdzIGVycm9yIG1lc3NhZ2VzLAorICAgICAgICBhbmQgb25s
eSBmb3VuZCB0aGlzIGJ1ZyBhZnRlcndhcmRzLiBNeSBpbXBsZW1lbnRhdGlvbiBkb2VzIHRoZQor
ICAgICAgICBiYXJlIG1pbmltdW0gdG8gbWFrZSB0aGlzIGNvZGUgdmFyaWFkaWMgd2l0aG91dCBj
aGFuZ2luZworICAgICAgICBiZWhhdmlvci4gSSB0aGluayBpdCdzIGJldHRlciB0byBnbyB3aXRo
IHRoaXMgYmFieSBzdGVwIGZpcnN0LCBhbmQKKyAgICAgICAgaW1wcm92ZSB0aGUgY29kZSBsYXRl
ci4KKworICAgICAgICBOb3RhYmxlLCBmb3IgbXkgV2ViQXNzZW1ibHkgcGF0Y2ggSSBhbHNvIHRh
dWdodCB0aGUgY29kZSB0byBoYW5kbGUKKyAgICAgICAgaW50ZWdlcnMgYW5kIG90aGVyIHR5cGVz
IChpbmNsdWRpbmcgV2ViQXNzZW1ibHkgdHlwZXMpLiBBCisgICAgICAgIGZvbGxvdy11cCBjb3Vs
ZCByZWx5IG9uIEFETCBtYWdpYyB0byBwcmV0dHktZm9ybWF0IHRoZXNlIG90aGVyCisgICAgICAg
IHR5cGVzLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaDoKKyAgICAg
ICAgKFdURjo6c3VtV2l0aE92ZXJmbG93KTogVGhpcyB1bmNvbmRpdGlvbmFsbHkgZG9lcyB0aGUg
c3VtIGZvciBhbGwgaW5wdXRzLCB3aGljaCB0aGUgY29tcGlsZXIgaXMgbW9yZSBsaWtlbHkgdG8g
YXBwcmVjaWF0ZSAoYmVjYXVzZSBpdCdzIHRoZSBjb21tb24gY2FzZSkgY29tcGFyZWQgdG8gdGVz
dGluZyBmb3Igb3ZlcmZsb3cgYW5kIGJhaWxpbmcgb24gZWFjaCBhZGRpdGlvbgorICAgICAgICAo
V1RGOjphcmU4Qml0KTogYXJlOiB0aGUgcGx1cmFsIG9mIGlzIQorICAgICAgICAoV1RGOjptYWtl
U3RyaW5nQWNjdW11bGF0b3IpOiBhY2N1bXVsYXRlIHN0cmluZ3MKKyAgICAgICAgKFdURjo6dHJ5
TWFrZVN0cmluZ0Zyb21BZGFwdGVycyk6IGEgc21hbGwgaGVscGVyIHdoaWNoIGNyZWF0ZXMgdGhl
IHN0cmluZyBhZGFwdGVycworICAgICAgICAoV1RGOjp0cnlNYWtlU3RyaW5nKTogZXhwb3NlIG91
dCBvZiBXVEYsIHNpbmNlIGl0J3MgcGFydCBvZiB0aGlzIGZpbGUncyB1c2VkIEFQSQorICAgICAg
ICAoV1RGOjptYWtlU3RyaW5nKTogbWFrZSBpdCB2YXJpYWRpYworCiAyMDE2LTEyLTEyICBDb21t
aXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMjA5NzAzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdDb25jYXRlbmF0ZS5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0
ZS5oCmluZGV4IDc3ZjM0ZGYuLmFmZmI3ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3Rl
eHQvU3RyaW5nQ29uY2F0ZW5hdGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0Nv
bmNhdGVuYXRlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEw
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xNDEsNyArMTQxLDcgQEAgcHVibGljOgogICAgICAgICB3aGlsZSAo
bV9jaGFyYWN0ZXJzW2xlbmd0aF0pCiAgICAgICAgICAgICArK2xlbmd0aDsKIAotICAgICAgICBp
ZiAobGVuZ3RoID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQorICAgICAg
ICBpZiAobGVuZ3RoID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKSAvLyBG
SVhNRSB0aGlzIGlzIHNpbGx5IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjU3OTAKICAgICAgICAgICAgIENSQVNIKCk7CiAKICAgICAgICAgbV9sZW5ndGggPSBsZW5n
dGg7CkBAIC0xNTIsNyArMTUyLDcgQEAgcHVibGljOgogCiAgICAgTk9fUkVUVVJOX0RVRV9UT19D
UkFTSCB2b2lkIHdyaXRlVG8oTENoYXIqKSBjb25zdAogICAgIHsKLSAgICAgICAgQ1JBU0goKTsK
KyAgICAgICAgQ1JBU0goKTsgLy8gRklYTUUgbWFrZSB0aGlzIGEgY29tcGlsZS10aW1lIGZhaWx1
cmUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTc5MQogICAgIH0K
IAogICAgIHZvaWQgd3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pIGNvbnN0CkBAIC0yNTksNyAr
MjU5LDcgQEAgcHVibGljOgogICAgIH0KIH07CiAKLWlubGluZSB2b2lkIHN1bVdpdGhPdmVyZmxv
dyh1bnNpZ25lZCYgdG90YWwsIHVuc2lnbmVkIGFkZGVuZCwgYm9vbCYgb3ZlcmZsb3cpCitpbmxp
bmUgdm9pZCBzdW1XaXRoT3ZlcmZsb3coYm9vbCYgb3ZlcmZsb3csIHVuc2lnbmVkJiB0b3RhbCwg
dW5zaWduZWQgYWRkZW5kKQogewogICAgIHVuc2lnbmVkIG9sZFRvdGFsID0gdG90YWw7CiAgICAg
dG90YWwgPSBvbGRUb3RhbCArIGFkZGVuZDsKQEAgLTI2NywzODEgKzI2Nyw1NyBAQCBpbmxpbmUg
dm9pZCBzdW1XaXRoT3ZlcmZsb3codW5zaWduZWQmIHRvdGFsLCB1bnNpZ25lZCBhZGRlbmQsIGJv
b2wmIG92ZXJmbG93KQogICAgICAgICBvdmVyZmxvdyA9IHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMj4KLVN0cmluZyB0cnlNYWtl
U3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIpCi17Ci0gICAg
U3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTE+IGFkYXB0ZXIxKHN0cmluZzEpOwotICAgIFN0
cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFwdGVyMihzdHJpbmcyKTsKLQotICAgIGlm
IChhZGFwdGVyMS5sZW5ndGgoKSAmJiAhYWRhcHRlcjIubGVuZ3RoKCkpCi0gICAgICAgIHJldHVy
biBhZGFwdGVyMS50b1N0cmluZygpOwotICAgIGlmICghYWRhcHRlcjEubGVuZ3RoKCkgJiYgYWRh
cHRlcjIubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBhZGFwdGVyMi50b1N0cmluZygpOwotCi0g
ICAgYm9vbCBvdmVyZmxvdyA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIx
Lmxlbmd0aCgpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIyLmxlbmd0aCgp
LCBvdmVyZmxvdyk7Ci0gICAgaWYgKG92ZXJmbG93KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0KLSAgICBpZiAoYWRhcHRlcjEuaXM4Qml0KCkgJiYgYWRhcHRlcjIuaXM4Qml0KCkpIHsKLSAg
ICAgICAgTENoYXIqIGJ1ZmZlcjsKLSAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdElt
cGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsK
LSAgICAgICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
Ci0gICAgICAgIExDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRl
VG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgICAg
ICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICAgICAgcmV0dXJuIFdURk1vdmUocmVz
dWx0SW1wbCk7Ci0gICAgfQotCi0gICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICBSZWZQdHI8U3RyaW5n
SW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVu
Z3RoLCBidWZmZXIpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwotCi0gICAgVUNoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICBhZGFwdGVyMS53cml0ZVRv
KHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIGFkYXB0ZXIy
LndyaXRlVG8ocmVzdWx0KTsKLQotICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdEltcGwpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5
cGVuYW1lIFN0cmluZ1R5cGUzPgotU3RyaW5nIHRyeU1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3Ry
aW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMykKK3RlbXBsYXRl
PHR5cGVuYW1lLi4uIFVuc2lnbmVkPgoraW5saW5lIHZvaWQgc3VtV2l0aE92ZXJmbG93KGJvb2wm
IG92ZXJmbG93LCB1bnNpZ25lZCYgdG90YWwsIHVuc2lnbmVkIGFkZGVuZCwgVW5zaWduZWQgLi4u
YWRkZW5kcykKIHsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEo
c3RyaW5nMSk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKHN0
cmluZzIpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUzPiBhZGFwdGVyMyhzdHJp
bmczKTsKLQotICAgIGJvb2wgb3ZlcmZsb3cgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBsZW5ndGgg
PSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVy
Mi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0
ZXIzLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgaWYgKG92ZXJmbG93KQotICAgICAgICByZXR1
cm4gU3RyaW5nKCk7Ci0KLSAgICBpZiAoYWRhcHRlcjEuaXM4Qml0KCkgJiYgYWRhcHRlcjIuaXM4
Qml0KCkgJiYgYWRhcHRlcjMuaXM4Qml0KCkpIHsKLSAgICAgICAgTENoYXIqIGJ1ZmZlcjsKLSAg
ICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVh
dGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAgaWYgKCFyZXN1bHRJbXBs
KQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgICAgIExDaGFyKiByZXN1bHQg
PSBidWZmZXI7Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVz
dWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3Vs
dCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRl
cjMud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdEltcGwp
OwotICAgIH0KLQotICAgIFVDaGFyKiBidWZmZXIgPSAwOwotICAgIFJlZlB0cjxTdHJpbmdJbXBs
PiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgs
IGJ1ZmZlcik7Ci0gICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0KLSAgICBVQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVz
dWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjIud3Jp
dGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICBhZGFw
dGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShyZXN1bHRJbXBsKTsK
KyAgICB1bnNpZ25lZCBvbGRUb3RhbCA9IHRvdGFsOworICAgIHRvdGFsID0gb2xkVG90YWwgKyBh
ZGRlbmQ7CisgICAgaWYgKHRvdGFsIDwgb2xkVG90YWwpCisgICAgICAgIG92ZXJmbG93ID0gdHJ1
ZTsKKyAgICBzdW1XaXRoT3ZlcmZsb3cob3ZlcmZsb3csIHRvdGFsLCBhZGRlbmRzLi4uKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0
eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQ+Ci1TdHJpbmcgdHJ5TWFr
ZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdU
eXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0KQordGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRlcj4KK2lubGluZSBib29sIGFyZThCaXQoQWRhcHRlciBhZGFwdGVyKQogewotICAgIFN0cmlu
Z1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBhZGFwdGVyMShzdHJpbmcxKTsKLSAgICBTdHJpbmdU
eXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRhcHRlcjIoc3RyaW5nMik7Ci0gICAgU3RyaW5nVHlw
ZUFkYXB0ZXI8U3RyaW5nVHlwZTM+IGFkYXB0ZXIzKHN0cmluZzMpOwotICAgIFN0cmluZ1R5cGVB
ZGFwdGVyPFN0cmluZ1R5cGU0PiBhZGFwdGVyNChzdHJpbmc0KTsKLQotICAgIGJvb2wgb3ZlcmZs
b3cgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAg
ICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyMi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwot
ICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIzLmxlbmd0aCgpLCBvdmVyZmxvdyk7
Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjQubGVuZ3RoKCksIG92ZXJmbG93
KTsKLSAgICBpZiAob3ZlcmZsb3cpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlm
IChhZGFwdGVyMS5pczhCaXQoKSAmJiBhZGFwdGVyMi5pczhCaXQoKSAmJiBhZGFwdGVyMy5pczhC
aXQoKSAmJiBhZGFwdGVyNC5pczhCaXQoKSkgewotICAgICAgICBMQ2hhciogYnVmZmVyOwotICAg
ICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0
ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgICAgICBpZiAoIXJlc3VsdEltcGwp
Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICAgICAgTENoYXIqIHJlc3VsdCA9
IGJ1ZmZlcjsKLSAgICAgICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1
bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0
KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVy
My53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsK
LSAgICAgICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgICAgIHJldHVybiBXVEZN
b3ZlKHJlc3VsdEltcGwpOwotICAgIH0KLQotICAgIFVDaGFyKiBidWZmZXI7Ci0gICAgUmVmUHRy
PFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxp
emVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLQotICAgIFVDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAgYWRhcHRlcjEu
d3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBh
ZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgp
OwotICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjMu
bGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgcmV0dXJuIFdU
Rk1vdmUocmVzdWx0SW1wbCk7CisgICAgcmV0dXJuIGFkYXB0ZXIuaXM4Qml0KCk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5h
bWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5cGU0LCB0eXBlbmFtZSBTdHJpbmdUeXBl
NT4KLVN0cmluZyB0cnlNYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUy
IHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQsIFN0cmlu
Z1R5cGU1IHN0cmluZzUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdGVyLCB0eXBlbmFtZS4uLiBB
ZGFwdGVycz4KK2lubGluZSBib29sIGFyZThCaXQoQWRhcHRlciBhZGFwdGVyLCBBZGFwdGVycyAu
Li5hZGFwdGVycykKIHsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRl
cjEoc3RyaW5nMSk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIy
KHN0cmluZzIpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUzPiBhZGFwdGVyMyhz
dHJpbmczKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlND4gYWRhcHRlcjQoc3Ry
aW5nNCk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTU+IGFkYXB0ZXI1KHN0cmlu
ZzUpOwotCi0gICAgYm9vbCBvdmVyZmxvdyA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIy
Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRl
cjMubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFw
dGVyNC5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFk
YXB0ZXI1Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgaWYgKG92ZXJmbG93KQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBpZiAoYWRhcHRlcjEuaXM4Qml0KCkgJiYgYWRhcHRlcjIu
aXM4Qml0KCkgJiYgYWRhcHRlcjMuaXM4Qml0KCkgJiYgYWRhcHRlcjQuaXM4Qml0KCkgJiYgYWRh
cHRlcjUuaXM4Qml0KCkpIHsKLSAgICAgICAgTENoYXIqIGJ1ZmZlcjsKLSAgICAgICAgUmVmUHRy
PFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxp
emVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgICAgIExDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0g
ICAgICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0
ZXIxLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAg
IHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjMud3JpdGVUbyhy
ZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7Ci0gICAgICAgIGFk
YXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI0Lmxlbmd0
aCgpOwotICAgICAgICBhZGFwdGVyNS53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICAgICAgcmV0dXJu
IFdURk1vdmUocmVzdWx0SW1wbCk7Ci0gICAgfQotCi0gICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICBS
ZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5p
dGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotCi0gICAgVUNoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICBhZGFw
dGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwot
ICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjIubGVu
Z3RoKCk7Ci0gICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFw
dGVyMy5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0
ICs9IGFkYXB0ZXI0Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKLQot
ICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdEltcGwpOworICAgIHJldHVybiBhZGFwdGVyLmlzOEJp
dCgpICYmIGFyZThCaXQoYWRhcHRlcnMuLi4pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJp
bmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBl
bmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTUsIHR5cGVuYW1lIFN0cmluZ1R5
cGU2PgotU3RyaW5nIHRyeU1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlw
ZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3RyaW5nNCwgU3Ry
aW5nVHlwZTUgc3RyaW5nNSwgU3RyaW5nVHlwZTYgc3RyaW5nNikKK3RlbXBsYXRlPHR5cGVuYW1l
IFJlc3VsdFR5cGUsIHR5cGVuYW1lIEFkYXB0ZXI+CitpbmxpbmUgdm9pZCBtYWtlU3RyaW5nQWNj
dW11bGF0b3IoUmVzdWx0VHlwZSogcmVzdWx0LCBBZGFwdGVyIGFkYXB0ZXIpCiB7Ci0gICAgU3Ry
aW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTE+IGFkYXB0ZXIxKHN0cmluZzEpOwotICAgIFN0cmlu
Z1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFwdGVyMihzdHJpbmcyKTsKLSAgICBTdHJpbmdU
eXBlQWRhcHRlcjxTdHJpbmdUeXBlMz4gYWRhcHRlcjMoc3RyaW5nMyk7Ci0gICAgU3RyaW5nVHlw
ZUFkYXB0ZXI8U3RyaW5nVHlwZTQ+IGFkYXB0ZXI0KHN0cmluZzQpOwotICAgIFN0cmluZ1R5cGVB
ZGFwdGVyPFN0cmluZ1R5cGU1PiBhZGFwdGVyNShzdHJpbmc1KTsKLSAgICBTdHJpbmdUeXBlQWRh
cHRlcjxTdHJpbmdUeXBlNj4gYWRhcHRlcjYoc3RyaW5nNik7Ci0KLSAgICBib29sIG92ZXJmbG93
ID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAg
c3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjIubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAg
ICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyMy5sZW5ndGgoKSwgb3ZlcmZsb3cpOwot
ICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI0Lmxlbmd0aCgpLCBvdmVyZmxvdyk7
Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjUubGVuZ3RoKCksIG92ZXJmbG93
KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNi5sZW5ndGgoKSwgb3ZlcmZs
b3cpOwotICAgIGlmIChvdmVyZmxvdykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAg
aWYgKGFkYXB0ZXIxLmlzOEJpdCgpICYmIGFkYXB0ZXIyLmlzOEJpdCgpICYmIGFkYXB0ZXIzLmlz
OEJpdCgpICYmIGFkYXB0ZXI0LmlzOEJpdCgpICYmIGFkYXB0ZXI1LmlzOEJpdCgpICYmIGFkYXB0
ZXI2LmlzOEJpdCgpKSB7Ci0gICAgICAgIExDaGFyKiBidWZmZXI7Ci0gICAgICAgIFJlZlB0cjxT
dHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLQotICAgICAgICBMQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAg
ICAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVy
MS5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICBy
ZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVz
dWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgICAgICBhZGFw
dGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNC5sZW5ndGgo
KTsKLSAgICAgICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0g
YWRhcHRlcjUubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI2LndyaXRlVG8ocmVzdWx0KTsKLQot
ICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHRJbXBsKTsKLSAgICB9Ci0KLSAgICBVQ2hhciog
YnVmZmVyOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6
dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFyZXN1bHRJ
bXBsKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBVQ2hhciogcmVzdWx0ID0gYnVm
ZmVyOwotICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRl
cjEubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCAr
PSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAg
cmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0
KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjUud3JpdGVU
byhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyNS5sZW5ndGgoKTsKLSAgICBhZGFwdGVy
Ni53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShyZXN1bHRJbXBsKTsKKyAg
ICBhZGFwdGVyLndyaXRlVG8ocmVzdWx0KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5n
VHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5h
bWUgU3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1LCB0eXBlbmFtZSBTdHJpbmdUeXBl
NiwgdHlwZW5hbWUgU3RyaW5nVHlwZTc+Ci1TdHJpbmcgdHJ5TWFrZVN0cmluZyhTdHJpbmdUeXBl
MSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJp
bmdUeXBlNCBzdHJpbmc0LCBTdHJpbmdUeXBlNSBzdHJpbmc1LCBTdHJpbmdUeXBlNiBzdHJpbmc2
LCBTdHJpbmdUeXBlNyBzdHJpbmc3KQordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlw
ZW5hbWUgQWRhcHRlciwgdHlwZW5hbWUuLi4gQWRhcHRlcnM+CitpbmxpbmUgdm9pZCBtYWtlU3Ry
aW5nQWNjdW11bGF0b3IoUmVzdWx0VHlwZSogcmVzdWx0LCBBZGFwdGVyIGFkYXB0ZXIsIEFkYXB0
ZXJzIC4uLmFkYXB0ZXJzKQogewotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBh
ZGFwdGVyMShzdHJpbmcxKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRh
cHRlcjIoc3RyaW5nMik7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTM+IGFkYXB0
ZXIzKHN0cmluZzMpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU0PiBhZGFwdGVy
NChzdHJpbmc0KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNT4gYWRhcHRlcjUo
c3RyaW5nNSk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTY+IGFkYXB0ZXI2KHN0
cmluZzYpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU3PiBhZGFwdGVyNyhzdHJp
bmc3KTsKLQotICAgIGJvb2wgb3ZlcmZsb3cgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBsZW5ndGgg
PSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVy
Mi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0
ZXIzLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRh
cHRlcjQubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBh
ZGFwdGVyNS5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgs
IGFkYXB0ZXI2Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0
aCwgYWRhcHRlcjcubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBpZiAob3ZlcmZsb3cpCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmIChhZGFwdGVyMS5pczhCaXQoKSAmJiBhZGFw
dGVyMi5pczhCaXQoKSAmJiBhZGFwdGVyMy5pczhCaXQoKSAmJiBhZGFwdGVyNC5pczhCaXQoKSAm
JiBhZGFwdGVyNS5pczhCaXQoKSAmJiBhZGFwdGVyNi5pczhCaXQoKSAmJiBhZGFwdGVyNy5pczhC
aXQoKSkgewotICAgICAgICBMQ2hhciogYnVmZmVyOwotICAgICAgICBSZWZQdHI8U3RyaW5nSW1w
bD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3Ro
LCBidWZmZXIpOwotICAgICAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0KLSAgICAgICAgTENoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICAgICAgYWRh
cHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3Ro
KCk7Ci0gICAgICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9
IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0g
ICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjQud3Jp
dGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3RoKCk7Ci0gICAg
ICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI1
Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJl
c3VsdCArPSBhZGFwdGVyNi5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjcud3JpdGVUbyhyZXN1
bHQpOwotCi0gICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdEltcGwpOwotICAgIH0KLQotICAg
IFVDaGFyKiBidWZmZXI7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJp
bmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAo
IXJlc3VsdEltcGwpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIFVDaGFyKiByZXN1
bHQgPSBidWZmZXI7Ci0gICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCAr
PSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAg
cmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0
KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjQud3JpdGVU
byhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyNC5sZW5ndGgoKTsKLSAgICBhZGFwdGVy
NS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI1Lmxlbmd0aCgpOwotICAg
IGFkYXB0ZXI2LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjYubGVuZ3Ro
KCk7Ci0gICAgYWRhcHRlcjcud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgcmV0dXJuIFdURk1vdmUo
cmVzdWx0SW1wbCk7CisgICAgYWRhcHRlci53cml0ZVRvKHJlc3VsdCk7CisgICAgbWFrZVN0cmlu
Z0FjY3VtdWxhdG9yKHJlc3VsdCArIGFkYXB0ZXIubGVuZ3RoKCksIGFkYXB0ZXJzLi4uKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0
eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0cmlu
Z1R5cGU1LCB0eXBlbmFtZSBTdHJpbmdUeXBlNiwgdHlwZW5hbWUgU3RyaW5nVHlwZTcsIHR5cGVu
YW1lIFN0cmluZ1R5cGU4PgotU3RyaW5nIHRyeU1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5n
MSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQg
c3RyaW5nNCwgU3RyaW5nVHlwZTUgc3RyaW5nNSwgU3RyaW5nVHlwZTYgc3RyaW5nNiwgU3RyaW5n
VHlwZTcgc3RyaW5nNywgU3RyaW5nVHlwZTggc3RyaW5nOCkKK3RlbXBsYXRlPHR5cGVuYW1lIFN0
cmluZ1R5cGVBZGFwdGVyLCB0eXBlbmFtZS4uLiBTdHJpbmdUeXBlQWRhcHRlcnM+CitTdHJpbmcg
dHJ5TWFrZVN0cmluZ0Zyb21BZGFwdGVycyhTdHJpbmdUeXBlQWRhcHRlciBhZGFwdGVyLCBTdHJp
bmdUeXBlQWRhcHRlcnMgLi4uYWRhcHRlcnMpCiB7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3Ry
aW5nVHlwZTE+IGFkYXB0ZXIxKHN0cmluZzEpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmlu
Z1R5cGUyPiBhZGFwdGVyMihzdHJpbmcyKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdU
eXBlMz4gYWRhcHRlcjMoc3RyaW5nMyk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlw
ZTQ+IGFkYXB0ZXI0KHN0cmluZzQpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU1
PiBhZGFwdGVyNShzdHJpbmc1KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNj4g
YWRhcHRlcjYoc3RyaW5nNik7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTc+IGFk
YXB0ZXI3KHN0cmluZzcpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU4PiBhZGFw
dGVyOChzdHJpbmc4KTsKLQogICAgIGJvb2wgb3ZlcmZsb3cgPSBmYWxzZTsKLSAgICB1bnNpZ25l
ZCBsZW5ndGggPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3Ro
LCBhZGFwdGVyMi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5n
dGgsIGFkYXB0ZXIzLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxl
bmd0aCwgYWRhcHRlcjQubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3co
bGVuZ3RoLCBhZGFwdGVyNS5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxv
dyhsZW5ndGgsIGFkYXB0ZXI2Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJm
bG93KGxlbmd0aCwgYWRhcHRlcjcubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3Zl
cmZsb3cobGVuZ3RoLCBhZGFwdGVyOC5sZW5ndGgoKSwgb3ZlcmZsb3cpOworICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGFkYXB0ZXIubGVuZ3RoKCk7CisgICAgc3VtV2l0aE92ZXJmbG93KG92ZXJmbG93
LCBsZW5ndGgsIGFkYXB0ZXJzLmxlbmd0aCgpLi4uKTsKICAgICBpZiAob3ZlcmZsb3cpCiAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIGlmIChhZGFwdGVyMS5pczhCaXQoKSAmJiBhZGFw
dGVyMi5pczhCaXQoKSAmJiBhZGFwdGVyMy5pczhCaXQoKSAmJiBhZGFwdGVyNC5pczhCaXQoKSAm
JiBhZGFwdGVyNS5pczhCaXQoKSAmJiBhZGFwdGVyNi5pczhCaXQoKSAmJiBhZGFwdGVyNy5pczhC
aXQoKSAmJiBhZGFwdGVyOC5pczhCaXQoKSkgeworICAgIGlmIChhcmU4Qml0KGFkYXB0ZXIsIGFk
YXB0ZXJzLi4uKSkgewogICAgICAgICBMQ2hhciogYnVmZmVyOwogICAgICAgICBSZWZQdHI8U3Ry
aW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQo
bGVuZ3RoLCBidWZmZXIpOwogICAgICAgICBpZiAoIXJlc3VsdEltcGwpCiAgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiAKLSAgICAgICAgTENoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICAg
ICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjEu
bGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVz
dWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3Vs
dCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRl
cjQud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3RoKCk7
Ci0gICAgICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFk
YXB0ZXI1Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNi53cml0ZVRvKHJlc3VsdCk7Ci0gICAg
ICAgIHJlc3VsdCArPSBhZGFwdGVyNi5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjcud3JpdGVU
byhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjcubGVuZ3RoKCk7Ci0gICAgICAg
IGFkYXB0ZXI4LndyaXRlVG8ocmVzdWx0KTsKKyAgICAgICAgbWFrZVN0cmluZ0FjY3VtdWxhdG9y
KGJ1ZmZlciwgYWRhcHRlciwgYWRhcHRlcnMuLi4pOwogCiAgICAgICAgIHJldHVybiBXVEZNb3Zl
KHJlc3VsdEltcGwpOwogICAgIH0KQEAgLTY1MSwxODIgKzMyNywyOCBAQCBTdHJpbmcgdHJ5TWFr
ZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdU
eXBlMyBzdHJpbgogICAgIGlmICghcmVzdWx0SW1wbCkKICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwogCi0gICAgVUNoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICBhZGFwdGVyMS53cml0ZVRvKHJl
c3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIGFkYXB0ZXIyLndy
aXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAgYWRh
cHRlcjMud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsK
LSAgICBhZGFwdGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI0Lmxl
bmd0aCgpOwotICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRh
cHRlcjUubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjYud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3Vs
dCArPSBhZGFwdGVyNi5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNy53cml0ZVRvKHJlc3VsdCk7Ci0g
ICAgcmVzdWx0ICs9IGFkYXB0ZXI3Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI4LndyaXRlVG8ocmVz
dWx0KTsKKyAgICBtYWtlU3RyaW5nQWNjdW11bGF0b3IoYnVmZmVyLCBhZGFwdGVyLCBhZGFwdGVy
cy4uLik7CiAKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHRJbXBsKTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJp
bmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1LCB0eXBl
bmFtZSBTdHJpbmdUeXBlNiwgdHlwZW5hbWUgU3RyaW5nVHlwZTcsIHR5cGVuYW1lIFN0cmluZ1R5
cGU4LCB0eXBlbmFtZSBTdHJpbmdUeXBlOT4KLVN0cmluZyB0cnlNYWtlU3RyaW5nKFN0cmluZ1R5
cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0
cmluZ1R5cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5cGU2IHN0cmlu
ZzYsIFN0cmluZ1R5cGU3IHN0cmluZzcsIFN0cmluZ1R5cGU4IHN0cmluZzgsIFN0cmluZ1R5cGU5
IHN0cmluZzkpCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBTdHJpbmdUeXBlcz4KK1N0cmluZyB0cnlN
YWtlU3RyaW5nKFN0cmluZ1R5cGVzIC4uLnN0cmluZ3MpCiB7Ci0gICAgU3RyaW5nVHlwZUFkYXB0
ZXI8U3RyaW5nVHlwZTE+IGFkYXB0ZXIxKHN0cmluZzEpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVy
PFN0cmluZ1R5cGUyPiBhZGFwdGVyMihzdHJpbmcyKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxT
dHJpbmdUeXBlMz4gYWRhcHRlcjMoc3RyaW5nMyk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3Ry
aW5nVHlwZTQ+IGFkYXB0ZXI0KHN0cmluZzQpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmlu
Z1R5cGU1PiBhZGFwdGVyNShzdHJpbmc1KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdU
eXBlNj4gYWRhcHRlcjYoc3RyaW5nNik7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlw
ZTc+IGFkYXB0ZXI3KHN0cmluZzcpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU4
PiBhZGFwdGVyOChzdHJpbmc4KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlOT4g
YWRhcHRlcjkoc3RyaW5nOSk7Ci0KLSAgICBib29sIG92ZXJmbG93ID0gZmFsc2U7Ci0gICAgdW5z
aWduZWQgbGVuZ3RoID0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxl
bmd0aCwgYWRhcHRlcjIubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3co
bGVuZ3RoLCBhZGFwdGVyMy5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxv
dyhsZW5ndGgsIGFkYXB0ZXI0Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJm
bG93KGxlbmd0aCwgYWRhcHRlcjUubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3Zl
cmZsb3cobGVuZ3RoLCBhZGFwdGVyNi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhP
dmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI3Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0
aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjgubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1X
aXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyOS5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIGlm
IChvdmVyZmxvdykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgaWYgKGFkYXB0ZXIx
LmlzOEJpdCgpICYmIGFkYXB0ZXIyLmlzOEJpdCgpICYmIGFkYXB0ZXIzLmlzOEJpdCgpICYmIGFk
YXB0ZXI0LmlzOEJpdCgpICYmIGFkYXB0ZXI1LmlzOEJpdCgpICYmIGFkYXB0ZXI2LmlzOEJpdCgp
ICYmIGFkYXB0ZXI3LmlzOEJpdCgpICYmIGFkYXB0ZXI4LmlzOEJpdCgpICYmIGFkYXB0ZXI5Lmlz
OEJpdCgpKSB7Ci0gICAgICAgIExDaGFyKiBidWZmZXI7Ci0gICAgICAgIFJlZlB0cjxTdHJpbmdJ
bXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5n
dGgsIGJ1ZmZlcik7Ci0gICAgICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLQotICAgICAgICBMQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgICAgICBh
ZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5n
dGgoKTsKLSAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQg
Kz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsK
LSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNC53
cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNC5sZW5ndGgoKTsKLSAg
ICAgICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRl
cjUubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI2LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAg
cmVzdWx0ICs9IGFkYXB0ZXI2Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNy53cml0ZVRvKHJl
c3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNy5sZW5ndGgoKTsKLSAgICAgICAgYWRh
cHRlcjgud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjgubGVuZ3Ro
KCk7Ci0gICAgICAgIGFkYXB0ZXI5LndyaXRlVG8ocmVzdWx0KTsKLQotICAgICAgICByZXR1cm4g
V1RGTW92ZShyZXN1bHRJbXBsKTsKLSAgICB9Ci0KLSAgICBVQ2hhciogYnVmZmVyOwotICAgIFJl
ZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0
aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBVQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgIGFkYXB0
ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0g
ICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5n
dGgoKTsKLSAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0
ZXIzLmxlbmd0aCgpOwotICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQg
Kz0gYWRhcHRlcjQubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1bHQpOwotICAg
IHJlc3VsdCArPSBhZGFwdGVyNS5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNi53cml0ZVRvKHJlc3Vs
dCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI2Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI3LndyaXRl
VG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjcubGVuZ3RoKCk7Ci0gICAgYWRhcHRl
cjgud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyOC5sZW5ndGgoKTsKLSAg
ICBhZGFwdGVyOS53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShyZXN1bHRJ
bXBsKTsKKyAgICByZXR1cm4gdHJ5TWFrZVN0cmluZ0Zyb21BZGFwdGVycyhTdHJpbmdUeXBlQWRh
cHRlcjxTdHJpbmdUeXBlcz4oc3RyaW5ncykuLi4pOwogfQogCi0KIC8vIENvbnZlbmllbmNlIG9u
bHkuCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMT4KLVN0cmluZyBtYWtlU3RyaW5nKFN0
cmluZ1R5cGUxIHN0cmluZzEpCi17Ci0gICAgcmV0dXJuIFN0cmluZyhzdHJpbmcxKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyPgotU3Ry
aW5nIG1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMikK
LXsKLSAgICBTdHJpbmcgcmVzdWx0ID0gdHJ5TWFrZVN0cmluZyhzdHJpbmcxLCBzdHJpbmcyKTsK
LSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIs
IHR5cGVuYW1lIFN0cmluZ1R5cGUzPgotU3RyaW5nIG1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3Ry
aW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMykKLXsKLSAgICBT
dHJpbmcgcmVzdWx0ID0gdHJ5TWFrZVN0cmluZyhzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczKTsK
LSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIs
IHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlND4KLVN0cmluZyBtYWtl
U3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5
cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQpCi17Ci0gICAgU3RyaW5nIHJlc3VsdCA9
IHRyeU1ha2VTdHJpbmcoc3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMywgc3RyaW5nNCk7Ci0gICAg
aWYgKCFyZXN1bHQpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBl
bmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5
cGU1PgotU3RyaW5nIG1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIg
c3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3RyaW5nNCwgU3RyaW5n
VHlwZTUgc3RyaW5nNSkKLXsKLSAgICBTdHJpbmcgcmVzdWx0ID0gdHJ5TWFrZVN0cmluZyhzdHJp
bmcxLCBzdHJpbmcyLCBzdHJpbmczLCBzdHJpbmc0LCBzdHJpbmc1KTsKLSAgICBpZiAoIXJlc3Vs
dCkKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmlu
Z1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTUsIHR5cGVu
YW1lIFN0cmluZ1R5cGU2PgotU3RyaW5nIG1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwg
U3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3Ry
aW5nNCwgU3RyaW5nVHlwZTUgc3RyaW5nNSwgU3RyaW5nVHlwZTYgc3RyaW5nNikKLXsKLSAgICBT
dHJpbmcgcmVzdWx0ID0gdHJ5TWFrZVN0cmluZyhzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczLCBz
dHJpbmc0LCBzdHJpbmc1LCBzdHJpbmc2KTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgQ1JB
U0goKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdU
eXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFt
ZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTUsIHR5cGVuYW1lIFN0cmluZ1R5cGU2
LCB0eXBlbmFtZSBTdHJpbmdUeXBlNz4KLVN0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0
cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5
cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5cGU2IHN0cmluZzYsIFN0
cmluZ1R5cGU3IHN0cmluZzcpCi17Ci0gICAgU3RyaW5nIHJlc3VsdCA9IHRyeU1ha2VTdHJpbmco
c3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMywgc3RyaW5nNCwgc3RyaW5nNSwgc3RyaW5nNiwgc3Ry
aW5nNyk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmlu
Z1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQsIHR5cGVu
YW1lIFN0cmluZ1R5cGU1LCB0eXBlbmFtZSBTdHJpbmdUeXBlNiwgdHlwZW5hbWUgU3RyaW5nVHlw
ZTcsIHR5cGVuYW1lIFN0cmluZ1R5cGU4PgotU3RyaW5nIG1ha2VTdHJpbmcoU3RyaW5nVHlwZTEg
c3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5n
VHlwZTQgc3RyaW5nNCwgU3RyaW5nVHlwZTUgc3RyaW5nNSwgU3RyaW5nVHlwZTYgc3RyaW5nNiwg
U3RyaW5nVHlwZTcgc3RyaW5nNywgU3RyaW5nVHlwZTggc3RyaW5nOCkKK3RlbXBsYXRlPHR5cGVu
YW1lIFN0cmluZ1R5cGU+CitTdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlIHN0cmluZykKIHsK
LSAgICBTdHJpbmcgcmVzdWx0ID0gdHJ5TWFrZVN0cmluZyhzdHJpbmcxLCBzdHJpbmcyLCBzdHJp
bmczLCBzdHJpbmc0LCBzdHJpbmc1LCBzdHJpbmc2LCBzdHJpbmc3LCBzdHJpbmc4KTsKLSAgICBp
ZiAoIXJlc3VsdCkKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiBTdHJpbmcoc3RyaW5nKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEs
IHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3Ry
aW5nVHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1LCB0eXBlbmFtZSBTdHJpbmdUeXBlNiwgdHlw
ZW5hbWUgU3RyaW5nVHlwZTcsIHR5cGVuYW1lIFN0cmluZ1R5cGU4LCB0eXBlbmFtZSBTdHJpbmdU
eXBlOT4KLVN0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUy
IHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQsIFN0cmlu
Z1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5cGU2IHN0cmluZzYsIFN0cmluZ1R5cGU3IHN0cmluZzcs
IFN0cmluZ1R5cGU4IHN0cmluZzgsIFN0cmluZ1R5cGU5IHN0cmluZzkpCit0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBTdHJpbmdUeXBlcz4KK1N0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGVzLi4uIHN0
cmluZ3MpCiB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IHRyeU1ha2VTdHJpbmcoc3RyaW5nMSwgc3Ry
aW5nMiwgc3RyaW5nMywgc3RyaW5nNCwgc3RyaW5nNSwgc3RyaW5nNiwgc3RyaW5nNywgc3RyaW5n
OCwgc3RyaW5nOSk7CisgICAgU3RyaW5nIHJlc3VsdCA9IHRyeU1ha2VTdHJpbmcoc3RyaW5ncy4u
Lik7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIENSQVNIKCk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKQEAgLTgzNSw2ICszNTcsNyBAQCBTdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJp
bmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLAogfSAvLyBuYW1l
c3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6bWFrZVN0cmluZzsKK3VzaW5nIFdURjo6dHJ5TWFrZVN0
cmluZzsKIAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ09wZXJhdG9ycy5oPgogI2VuZGlmCi0t
IAoyLjEwLjEKCg==
</data>
<flag name="review"
          id="319345"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297023</attachid>
            <date>2016-12-13 10:38:28 -0800</date>
            <delta_ts>2016-12-13 11:15:39 -0800</delta_ts>
            <desc>patch</desc>
            <filename>0001-makeString.patch</filename>
            <type>text/plain</type>
            <size>30635</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSAwM2IzYjFhYmJiMjIyOTY5MTRkZjg4Y2EzOWUyOWE2ZjVmZTIwZTRmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBNb24sIDEyIERlYyAyMDE2IDE3OjU2OjU3IC0wODAwClN1YmplY3Q6IFtQQVRDSF0gbWFrZVN0
cmluZzwuLi4+CgotLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAg
ICAgICAgICAgfCAgMTQgKwogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdC
dWlsZGVyLmggICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3Vw
LmNwcCAgICAgICAgICB8ICAgMiArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2Jq
ZWN0UHJvdG90eXBlLmNwcCB8ICAgMiArLQogU291cmNlL1dURi9DaGFuZ2VMb2cgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAyOSArKwogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdD
b25jYXRlbmF0ZS5oICAgICAgICAgICB8IDU1OSArKy0tLS0tLS0tLS0tLS0tLS0tLS0tCiA2IGZp
bGVzIGNoYW5nZWQsIDg3IGluc2VydGlvbnMoKyksIDUyMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwppbmRleCA2OGViYjJiLi4zMmJlODVkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxNi0xMi0xMiAgSkYgQmFzdGllbiAgPGpmYmFzdGll
bkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dURl0gVHVybiB0cnlNYWtlU3RyaW5nKCksIG1ha2VT
dHJpbmcoKSBpbnRvIHZhcmlhZGljIHRlbXBsYXRlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3MTQyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWFy
ayBMYW0uCisKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nQnVpbGRlci5oOgorICAgICAgICAo
SlNDOjpqc01ha2VOb250cml2aWFsU3RyaW5nKTogcmVtb3ZlIFdURjo6IHByZWZpeCwgaXQgaXNu
J3QgbmVlZGVkIGFueW1vcmUKKyAgICAgICAgKiBydW50aW1lL0xvb2t1cC5jcHA6CisgICAgICAg
IChKU0M6OnJlaWZ5U3RhdGljQWNjZXNzb3IpOiByZW1vdmUgV1RGOjogcHJlZml4LCBpdCBpc24n
dCBuZWVkZWQgYW55bW9yZQorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcDoK
KyAgICAgICAgKEpTQzo6b2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcpOiByZW1vdmUgV1RGOjogcHJl
Zml4LCBpdCBpc24ndCBuZWVkZWQgYW55bW9yZQorCiAyMDE2LTEyLTEyICBNaWNoYWVsIFNhYm9m
ZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIEZUTDogRHVtcGluZyBkaXNhc3NlbWJs
eSByZXF1aXJlcyB0aGF0IGNvZGUgb3JpZ2luIGlzIHNldCB3aGVuIG1ha2luZyBwb2x5bW9ycGhp
YyB0YWlsIGNhbGxzLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTdHJpbmdCdWlsZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Z0J1aWxkZXIuaAppbmRleCBmN2JhY2NhLi44OGFkNmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0J1aWxkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0J1aWxkZXIuaApAQCAtMTMwLDcgKzEzMCw3IEBAIGlu
bGluZSBKU1ZhbHVlIGpzTWFrZU5vbnRyaXZpYWxTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBTdHJpbmdUeXBlJiBzdHJpbmcsCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgU3RyaW5nIHJlc3VsdCA9
IFdURjo6dHJ5TWFrZVN0cmluZyhzdHJpbmcsIHN0cmluZ3MuLi4pOworICAgIFN0cmluZyByZXN1
bHQgPSB0cnlNYWtlU3RyaW5nKHN0cmluZywgc3RyaW5ncy4uLik7CiAgICAgaWYgKFVOTElLRUxZ
KCFyZXN1bHQgfHwgIUpTU3RyaW5nOjppc1ZhbGlkTGVuZ3RoKHJlc3VsdC5sZW5ndGgoKSkpKQog
ICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKICAgICBy
ZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIFdURk1vdmUocmVzdWx0KSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9va3VwLmNwcAppbmRleCAyYjU0MDRlLi5mNDA3NDBlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5jcHAKQEAgLTMxLDcgKzMxLDcg
QEAgdm9pZCByZWlmeVN0YXRpY0FjY2Vzc29yKFZNJiB2bSwgY29uc3QgSGFzaFRhYmxlVmFsdWUm
IHZhbHVlLCBKU09iamVjdCYgdGhpc09iamUKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKTsKICAgICBHZXR0ZXJTZXR0ZXIqIGFjY2Vz
c29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKHZh
bHVlLmFjY2Vzc29yR2V0dGVyKCkpIHsKLSAgICAgICAgU3RyaW5nIGdldHRlck5hbWUgPSBXVEY6
OnRyeU1ha2VTdHJpbmcoQVNDSUlMaXRlcmFsKCJnZXQgIiksIFN0cmluZygqcHJvcGVydHlOYW1l
LnB1YmxpY05hbWUoKSkpOworICAgICAgICBTdHJpbmcgZ2V0dGVyTmFtZSA9IHRyeU1ha2VTdHJp
bmcoQVNDSUlMaXRlcmFsKCJnZXQgIiksIFN0cmluZygqcHJvcGVydHlOYW1lLnB1YmxpY05hbWUo
KSkpOwogICAgICAgICBpZiAoIWdldHRlck5hbWUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIodm0sIGdsb2JhbE9iamVjdCwgdmFsdWUuYXR0cmlidXRl
cygpICYgQnVpbHRpbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T2JqZWN0UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVj
dFByb3RvdHlwZS5jcHAKaW5kZXggNjE1YTFlNy4uNjlkMzEzZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm90b3R5cGUuY3BwCkBAIC0zMzcsNyArMzM3
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBvYmplY3RQcm90b0Z1bmNUb1N0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMpCiAKICAgICAgICAgU3RyaW5nIHRhZyA9IHRoaXNPYmplY3QtPm1l
dGhvZFRhYmxlKHZtKS0+dG9TdHJpbmdOYW1lKHRoaXNPYmplY3QsIGV4ZWMpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICBTdHJpbmcgbmV3U3RyaW5n
ID0gV1RGOjp0cnlNYWtlU3RyaW5nKCJbb2JqZWN0ICIsIFdURk1vdmUodGFnKSwgIl0iKTsKKyAg
ICAgICAgU3RyaW5nIG5ld1N0cmluZyA9IHRyeU1ha2VTdHJpbmcoIltvYmplY3QgIiwgV1RGTW92
ZSh0YWcpLCAiXSIpOwogICAgICAgICBpZiAoIW5ld1N0cmluZykKICAgICAgICAgICAgIHJldHVy
biB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDAwNTY4OGQuLjUy
NjUyZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTYtMTItMTIgIEpGIEJhc3RpZW4gIDxqZmJh
c3RpZW5AYXBwbGUuY29tPgorCisgICAgICAgIFtXVEZdIFR1cm4gdHJ5TWFrZVN0cmluZygpLCBt
YWtlU3RyaW5nKCkgaW50byB2YXJpYWRpYyB0ZW1wbGF0ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzE0MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE1hcmsgTGFtLgorCisgICAgICAgIEkgd3JvdGUgdGhpcyBwYXRjaCB3aGlsZSBpbXByb3Zpbmcg
V2ViQXNzZW1ibHkncyBlcnJvciBtZXNzYWdlcywKKyAgICAgICAgYW5kIG9ubHkgZm91bmQgdGhp
cyBidWcgYWZ0ZXJ3YXJkcy4gTXkgaW1wbGVtZW50YXRpb24gZG9lcyB0aGUKKyAgICAgICAgYmFy
ZSBtaW5pbXVtIHRvIG1ha2UgdGhpcyBjb2RlIHZhcmlhZGljIHdpdGhvdXQgY2hhbmdpbmcKKyAg
ICAgICAgYmVoYXZpb3IuIEkgdGhpbmsgaXQncyBiZXR0ZXIgdG8gZ28gd2l0aCB0aGlzIGJhYnkg
c3RlcCBmaXJzdCwgYW5kCisgICAgICAgIGltcHJvdmUgdGhlIGNvZGUgbGF0ZXIuCisKKyAgICAg
ICAgTm90YWJsZSwgZm9yIG15IFdlYkFzc2VtYmx5IHBhdGNoIEkgYWxzbyB0YXVnaHQgdGhlIGNv
ZGUgdG8gaGFuZGxlCisgICAgICAgIGludGVnZXJzIGFuZCBvdGhlciB0eXBlcyAoaW5jbHVkaW5n
IFdlYkFzc2VtYmx5IHR5cGVzKS4gQQorICAgICAgICBmb2xsb3ctdXAgY291bGQgcmVseSBvbiBB
REwgbWFnaWMgdG8gcHJldHR5LWZvcm1hdCB0aGVzZSBvdGhlcgorICAgICAgICB0eXBlcy4KKwor
ICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg6CisgICAgICAgIChXVEY6OnN1
bVdpdGhPdmVyZmxvdyk6IFRoaXMgdW5jb25kaXRpb25hbGx5IGRvZXMgdGhlIHN1bSBmb3IgYWxs
CisgICAgICAgIGlucHV0cywgd2hpY2ggdGhlIGNvbXBpbGVyIGlzIG1vcmUgbGlrZWx5IHRvIGFw
cHJlY2lhdGUgKGJlY2F1c2UKKyAgICAgICAgaXQncyB0aGUgY29tbW9uIGNhc2UpIGNvbXBhcmVk
IHRvIHRlc3RpbmcgZm9yIG92ZXJmbG93IGFuZCBiYWlsaW5nCisgICAgICAgIG9uIGVhY2ggYWRk
aXRpb24KKyAgICAgICAgKFdURjo6YXJlOEJpdCk6IGFyZTogdGhlIHBsdXJhbCBvZiBpcyEKKyAg
ICAgICAgKFdURjo6bWFrZVN0cmluZ0FjY3VtdWxhdG9yKTogYWNjdW11bGF0ZSBzdHJpbmdzCisg
ICAgICAgIChXVEY6OnRyeU1ha2VTdHJpbmdGcm9tQWRhcHRlcnMpOiBhIHNtYWxsIGhlbHBlciB3
aGljaCBjcmVhdGVzIHRoZSBzdHJpbmcgYWRhcHRlcnMKKyAgICAgICAgKFdURjo6dHJ5TWFrZVN0
cmluZyk6IGV4cG9zZSBvdXQgb2YgV1RGLCBzaW5jZSBpdCdzIHBhcnQgb2YgdGhpcyBmaWxlJ3Mg
dXNlZCBBUEkKKyAgICAgICAgKFdURjo6bWFrZVN0cmluZyk6IG1ha2UgaXQgdmFyaWFkaWMKKwog
MjAxNi0xMi0xMiAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIwOTcwMy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nQ29uY2F0ZW5hdGUuaAppbmRleCA3N2YzNGRmLi5hZmZiN2UxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmgKKysrIGIvU291cmNlL1dURi93
dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQxLDcgKzE0MSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgd2hpbGUgKG1fY2hhcmFjdGVyc1tsZW5ndGhdKQogICAgICAgICAgICAgKytsZW5n
dGg7CiAKLSAgICAgICAgaWYgKGxlbmd0aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSkKKyAgICAgICAgaWYgKGxlbmd0aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKSkgLy8gRklYTUUgdGhpcyBpcyBzaWxseSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzkwCiAgICAgICAgICAgICBDUkFTSCgpOwogCiAgICAgICAg
IG1fbGVuZ3RoID0gbGVuZ3RoOwpAQCAtMTUyLDcgKzE1Miw3IEBAIHB1YmxpYzoKIAogICAgIE5P
X1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCB3cml0ZVRvKExDaGFyKikgY29uc3QKICAgICB7Ci0g
ICAgICAgIENSQVNIKCk7CisgICAgICAgIENSQVNIKCk7IC8vIEZJWE1FIG1ha2UgdGhpcyBhIGNv
bXBpbGUtdGltZSBmYWlsdXJlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjU3OTEKICAgICB9CiAKICAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKSBj
b25zdApAQCAtMjU5LDcgKzI1OSw3IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi1pbmxpbmUgdm9p
ZCBzdW1XaXRoT3ZlcmZsb3codW5zaWduZWQmIHRvdGFsLCB1bnNpZ25lZCBhZGRlbmQsIGJvb2wm
IG92ZXJmbG93KQoraW5saW5lIHZvaWQgc3VtV2l0aE92ZXJmbG93KGJvb2wmIG92ZXJmbG93LCB1
bnNpZ25lZCYgdG90YWwsIHVuc2lnbmVkIGFkZGVuZCkKIHsKICAgICB1bnNpZ25lZCBvbGRUb3Rh
bCA9IHRvdGFsOwogICAgIHRvdGFsID0gb2xkVG90YWwgKyBhZGRlbmQ7CkBAIC0yNjcsMzgxICsy
NjcsNTcgQEAgaW5saW5lIHZvaWQgc3VtV2l0aE92ZXJmbG93KHVuc2lnbmVkJiB0b3RhbCwgdW5z
aWduZWQgYWRkZW5kLCBib29sJiBvdmVyZmxvdykKICAgICAgICAgb3ZlcmZsb3cgPSB0cnVlOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTI+
Ci1TdHJpbmcgdHJ5TWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBz
dHJpbmcyKQotewotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBhZGFwdGVyMShz
dHJpbmcxKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRhcHRlcjIoc3Ry
aW5nMik7Ci0KLSAgICBpZiAoYWRhcHRlcjEubGVuZ3RoKCkgJiYgIWFkYXB0ZXIyLmxlbmd0aCgp
KQotICAgICAgICByZXR1cm4gYWRhcHRlcjEudG9TdHJpbmcoKTsKLSAgICBpZiAoIWFkYXB0ZXIx
Lmxlbmd0aCgpICYmIGFkYXB0ZXIyLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gYWRhcHRlcjIu
dG9TdHJpbmcoKTsKLQotICAgIGJvb2wgb3ZlcmZsb3cgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBs
ZW5ndGggPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBh
ZGFwdGVyMi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIGlmIChvdmVyZmxvdykKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotCi0gICAgaWYgKGFkYXB0ZXIxLmlzOEJpdCgpICYmIGFkYXB0ZXIy
LmlzOEJpdCgpKSB7Ci0gICAgICAgIExDaGFyKiBidWZmZXI7Ci0gICAgICAgIFJlZlB0cjxTdHJp
bmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChs
ZW5ndGgsIGJ1ZmZlcik7Ci0gICAgICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKLQotICAgICAgICBMQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgICAg
ICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMS5s
ZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgICAgIHJl
dHVybiBXVEZNb3ZlKHJlc3VsdEltcGwpOwotICAgIH0KLQotICAgIFVDaGFyKiBidWZmZXI7Ci0g
ICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVV
bmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIFVDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAg
YWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgo
KTsKLSAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShy
ZXN1bHRJbXBsKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1l
IFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMz4KLVN0cmluZyB0cnlNYWtlU3RyaW5n
KFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0
cmluZzMpCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBVbnNpZ25lZD4KK2lubGluZSB2b2lkIHN1bVdp
dGhPdmVyZmxvdyhib29sJiBvdmVyZmxvdywgdW5zaWduZWQmIHRvdGFsLCB1bnNpZ25lZCBhZGRl
bmQsIFVuc2lnbmVkIC4uLmFkZGVuZHMpCiB7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5n
VHlwZTE+IGFkYXB0ZXIxKHN0cmluZzEpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5
cGUyPiBhZGFwdGVyMihzdHJpbmcyKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBl
Mz4gYWRhcHRlcjMoc3RyaW5nMyk7Ci0KLSAgICBib29sIG92ZXJmbG93ID0gZmFsc2U7Ci0gICAg
dW5zaWduZWQgbGVuZ3RoID0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgc3VtV2l0aE92ZXJmbG93
KGxlbmd0aCwgYWRhcHRlcjIubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZs
b3cobGVuZ3RoLCBhZGFwdGVyMy5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIGlmIChvdmVyZmxv
dykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgaWYgKGFkYXB0ZXIxLmlzOEJpdCgp
ICYmIGFkYXB0ZXIyLmlzOEJpdCgpICYmIGFkYXB0ZXIzLmlzOEJpdCgpKSB7Ci0gICAgICAgIExD
aGFyKiBidWZmZXI7Ci0gICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3Ry
aW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgICAg
IGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgICAg
ICBMQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgICAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3Vs
dCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRl
cjIud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7
Ci0gICAgICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLQotICAgICAgICByZXR1cm4gV1RG
TW92ZShyZXN1bHRJbXBsKTsKLSAgICB9Ci0KLSAgICBVQ2hhciogYnVmZmVyID0gMDsKLSAgICBS
ZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5p
dGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotCi0gICAgVUNoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICBhZGFw
dGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwot
ICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjIubGVu
Z3RoKCk7Ci0gICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgcmV0dXJuIFdURk1v
dmUocmVzdWx0SW1wbCk7CisgICAgdW5zaWduZWQgb2xkVG90YWwgPSB0b3RhbDsKKyAgICB0b3Rh
bCA9IG9sZFRvdGFsICsgYWRkZW5kOworICAgIGlmICh0b3RhbCA8IG9sZFRvdGFsKQorICAgICAg
ICBvdmVyZmxvdyA9IHRydWU7CisgICAgc3VtV2l0aE92ZXJmbG93KG92ZXJmbG93LCB0b3RhbCwg
YWRkZW5kcy4uLik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFt
ZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5cGU0
PgotU3RyaW5nIHRyeU1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIg
c3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3RyaW5nNCkKK3RlbXBs
YXRlPHR5cGVuYW1lIEFkYXB0ZXI+CitpbmxpbmUgYm9vbCBhcmU4Qml0KEFkYXB0ZXIgYWRhcHRl
cikKIHsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3RyaW5n
MSk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKHN0cmluZzIp
OwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUzPiBhZGFwdGVyMyhzdHJpbmczKTsK
LSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlND4gYWRhcHRlcjQoc3RyaW5nNCk7Ci0K
LSAgICBib29sIG92ZXJmbG93ID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYWRhcHRl
cjEubGVuZ3RoKCk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjIubGVuZ3Ro
KCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyMy5sZW5n
dGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI0Lmxl
bmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgaWYgKG92ZXJmbG93KQotICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7Ci0KLSAgICBpZiAoYWRhcHRlcjEuaXM4Qml0KCkgJiYgYWRhcHRlcjIuaXM4Qml0KCkg
JiYgYWRhcHRlcjMuaXM4Qml0KCkgJiYgYWRhcHRlcjQuaXM4Qml0KCkpIHsKLSAgICAgICAgTENo
YXIqIGJ1ZmZlcjsKLSAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJp
bmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAg
aWYgKCFyZXN1bHRJbXBsKQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgICAg
IExDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0
KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVy
Mi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsK
LSAgICAgICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRh
cHRlcjMubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKLQotICAg
ICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHRJbXBsKTsKLSAgICB9Ci0KLSAgICBVQ2hhciogYnVm
ZmVyOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFyZXN1bHRJbXBs
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBVQ2hhciogcmVzdWx0ID0gYnVmZmVy
OwotICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjEu
bGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBh
ZGFwdGVyMi5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVz
dWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsK
LQotICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdEltcGwpOworICAgIHJldHVybiBhZGFwdGVyLmlz
OEJpdCgpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3Ry
aW5nVHlwZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlw
ZW5hbWUgU3RyaW5nVHlwZTU+Ci1TdHJpbmcgdHJ5TWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJp
bmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBl
NCBzdHJpbmc0LCBTdHJpbmdUeXBlNSBzdHJpbmc1KQordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRl
ciwgdHlwZW5hbWUuLi4gQWRhcHRlcnM+CitpbmxpbmUgYm9vbCBhcmU4Qml0KEFkYXB0ZXIgYWRh
cHRlciwgQWRhcHRlcnMgLi4uYWRhcHRlcnMpCiB7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3Ry
aW5nVHlwZTE+IGFkYXB0ZXIxKHN0cmluZzEpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmlu
Z1R5cGUyPiBhZGFwdGVyMihzdHJpbmcyKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdU
eXBlMz4gYWRhcHRlcjMoc3RyaW5nMyk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlw
ZTQ+IGFkYXB0ZXI0KHN0cmluZzQpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU1
PiBhZGFwdGVyNShzdHJpbmc1KTsKLQotICAgIGJvb2wgb3ZlcmZsb3cgPSBmYWxzZTsKLSAgICB1
bnNpZ25lZCBsZW5ndGggPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBzdW1XaXRoT3ZlcmZsb3co
bGVuZ3RoLCBhZGFwdGVyMi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxv
dyhsZW5ndGgsIGFkYXB0ZXIzLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJm
bG93KGxlbmd0aCwgYWRhcHRlcjQubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3Zl
cmZsb3cobGVuZ3RoLCBhZGFwdGVyNS5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIGlmIChvdmVy
ZmxvdykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgaWYgKGFkYXB0ZXIxLmlzOEJp
dCgpICYmIGFkYXB0ZXIyLmlzOEJpdCgpICYmIGFkYXB0ZXIzLmlzOEJpdCgpICYmIGFkYXB0ZXI0
LmlzOEJpdCgpICYmIGFkYXB0ZXI1LmlzOEJpdCgpKSB7Ci0gICAgICAgIExDaGFyKiBidWZmZXI7
Ci0gICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgICAgIGlmICghcmVzdWx0
SW1wbCkKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgICAgICBMQ2hhciogcmVz
dWx0ID0gYnVmZmVyOwotICAgICAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAg
IHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhy
ZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAgICAgIGFk
YXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0
aCgpOwotICAgICAgICBhZGFwdGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCAr
PSBhZGFwdGVyNC5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1bHQpOwot
Ci0gICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdEltcGwpOwotICAgIH0KLQotICAgIFVDaGFy
KiBidWZmZXI7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBs
Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIXJlc3Vs
dEltcGwpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIFVDaGFyKiByZXN1bHQgPSBi
dWZmZXI7Ci0gICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFw
dGVyMS5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0
ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAg
ICByZXN1bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1
bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyNC5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNS53cml0
ZVRvKHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShyZXN1bHRJbXBsKTsKKyAgICByZXR1
cm4gYWRhcHRlci5pczhCaXQoKSAmJiBhcmU4Qml0KGFkYXB0ZXJzLi4uKTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBT
dHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1LCB0
eXBlbmFtZSBTdHJpbmdUeXBlNj4KLVN0cmluZyB0cnlNYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0
cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5
cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5cGU2IHN0cmluZzYpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBlLCB0eXBlbmFtZSBBZGFwdGVyPgoraW5saW5lIHZv
aWQgbWFrZVN0cmluZ0FjY3VtdWxhdG9yKFJlc3VsdFR5cGUqIHJlc3VsdCwgQWRhcHRlciBhZGFw
dGVyKQogewotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBhZGFwdGVyMShzdHJp
bmcxKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRhcHRlcjIoc3RyaW5n
Mik7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTM+IGFkYXB0ZXIzKHN0cmluZzMp
OwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU0PiBhZGFwdGVyNChzdHJpbmc0KTsK
LSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNT4gYWRhcHRlcjUoc3RyaW5nNSk7Ci0g
ICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTY+IGFkYXB0ZXI2KHN0cmluZzYpOwotCi0g
ICAgYm9vbCBvdmVyZmxvdyA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIx
Lmxlbmd0aCgpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIyLmxlbmd0aCgp
LCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjMubGVuZ3Ro
KCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNC5sZW5n
dGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI1Lmxl
bmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjYu
bGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBpZiAob3ZlcmZsb3cpCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKLQotICAgIGlmIChhZGFwdGVyMS5pczhCaXQoKSAmJiBhZGFwdGVyMi5pczhCaXQo
KSAmJiBhZGFwdGVyMy5pczhCaXQoKSAmJiBhZGFwdGVyNC5pczhCaXQoKSAmJiBhZGFwdGVyNS5p
czhCaXQoKSAmJiBhZGFwdGVyNi5pczhCaXQoKSkgewotICAgICAgICBMQ2hhciogYnVmZmVyOwot
ICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgICAgICBpZiAoIXJlc3VsdElt
cGwpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICAgICAgTENoYXIqIHJlc3Vs
dCA9IGJ1ZmZlcjsKLSAgICAgICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICBy
ZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVz
dWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgICAgICBhZGFw
dGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgo
KTsKLSAgICAgICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0g
YWRhcHRlcjQubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKLSAg
ICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI1Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNi53cml0
ZVRvKHJlc3VsdCk7Ci0KLSAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0SW1wbCk7Ci0gICAg
fQotCi0gICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1w
bCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwot
ICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgVUNo
YXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAg
cmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0
KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjMud3JpdGVU
byhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsKLSAgICBhZGFwdGVy
NC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI0Lmxlbmd0aCgpOwotICAg
IGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjUubGVuZ3Ro
KCk7Ci0gICAgYWRhcHRlcjYud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgcmV0dXJuIFdURk1vdmUo
cmVzdWx0SW1wbCk7CisgICAgYWRhcHRlci53cml0ZVRvKHJlc3VsdCk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3Ry
aW5nVHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5cGU0LCB0eXBlbmFtZSBTdHJpbmdUeXBlNSwgdHlw
ZW5hbWUgU3RyaW5nVHlwZTYsIHR5cGVuYW1lIFN0cmluZ1R5cGU3PgotU3RyaW5nIHRyeU1ha2VT
dHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlw
ZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3RyaW5nNCwgU3RyaW5nVHlwZTUgc3RyaW5nNSwgU3Ry
aW5nVHlwZTYgc3RyaW5nNiwgU3RyaW5nVHlwZTcgc3RyaW5nNykKK3RlbXBsYXRlPHR5cGVuYW1l
IFJlc3VsdFR5cGUsIHR5cGVuYW1lIEFkYXB0ZXIsIHR5cGVuYW1lLi4uIEFkYXB0ZXJzPgoraW5s
aW5lIHZvaWQgbWFrZVN0cmluZ0FjY3VtdWxhdG9yKFJlc3VsdFR5cGUqIHJlc3VsdCwgQWRhcHRl
ciBhZGFwdGVyLCBBZGFwdGVycyAuLi5hZGFwdGVycykKIHsKLSAgICBTdHJpbmdUeXBlQWRhcHRl
cjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3RyaW5nMSk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8
U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKHN0cmluZzIpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0
cmluZ1R5cGUzPiBhZGFwdGVyMyhzdHJpbmczKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJp
bmdUeXBlND4gYWRhcHRlcjQoc3RyaW5nNCk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5n
VHlwZTU+IGFkYXB0ZXI1KHN0cmluZzUpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5
cGU2PiBhZGFwdGVyNihzdHJpbmc2KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBl
Nz4gYWRhcHRlcjcoc3RyaW5nNyk7Ci0KLSAgICBib29sIG92ZXJmbG93ID0gZmFsc2U7Ci0gICAg
dW5zaWduZWQgbGVuZ3RoID0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgc3VtV2l0aE92ZXJmbG93
KGxlbmd0aCwgYWRhcHRlcjIubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZs
b3cobGVuZ3RoLCBhZGFwdGVyMy5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVy
ZmxvdyhsZW5ndGgsIGFkYXB0ZXI0Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92
ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjUubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRo
T3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdp
dGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI3Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgaWYg
KG92ZXJmbG93KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBpZiAoYWRhcHRlcjEu
aXM4Qml0KCkgJiYgYWRhcHRlcjIuaXM4Qml0KCkgJiYgYWRhcHRlcjMuaXM4Qml0KCkgJiYgYWRh
cHRlcjQuaXM4Qml0KCkgJiYgYWRhcHRlcjUuaXM4Qml0KCkgJiYgYWRhcHRlcjYuaXM4Qml0KCkg
JiYgYWRhcHRlcjcuaXM4Qml0KCkpIHsKLSAgICAgICAgTENoYXIqIGJ1ZmZlcjsKLSAgICAgICAg
UmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAgaWYgKCFyZXN1bHRJbXBsKQotICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgICAgIExDaGFyKiByZXN1bHQgPSBidWZm
ZXI7Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9
IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0g
ICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjMud3Jp
dGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7Ci0gICAg
ICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI0
Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJl
c3VsdCArPSBhZGFwdGVyNS5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjYud3JpdGVUbyhyZXN1
bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjYubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0
ZXI3LndyaXRlVG8ocmVzdWx0KTsKLQotICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHRJbXBs
KTsKLSAgICB9Ci0KLSAgICBVQ2hhciogYnVmZmVyOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBy
ZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1
ZmZlcik7Ci0gICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0K
LSAgICBVQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0
KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjIud3JpdGVU
byhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICBhZGFwdGVy
My53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAg
IGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3Ro
KCk7Ci0gICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVy
NS5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9
IGFkYXB0ZXI2Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI3LndyaXRlVG8ocmVzdWx0KTsKLQotICAg
IHJldHVybiBXVEZNb3ZlKHJlc3VsdEltcGwpOworICAgIGFkYXB0ZXIud3JpdGVUbyhyZXN1bHQp
OworICAgIG1ha2VTdHJpbmdBY2N1bXVsYXRvcihyZXN1bHQgKyBhZGFwdGVyLmxlbmd0aCgpLCBh
ZGFwdGVycy4uLik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFt
ZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5cGU0
LCB0eXBlbmFtZSBTdHJpbmdUeXBlNSwgdHlwZW5hbWUgU3RyaW5nVHlwZTYsIHR5cGVuYW1lIFN0
cmluZ1R5cGU3LCB0eXBlbmFtZSBTdHJpbmdUeXBlOD4KLVN0cmluZyB0cnlNYWtlU3RyaW5nKFN0
cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmlu
ZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5cGU2
IHN0cmluZzYsIFN0cmluZ1R5cGU3IHN0cmluZzcsIFN0cmluZ1R5cGU4IHN0cmluZzgpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlQWRhcHRlciwgdHlwZW5hbWUuLi4gU3RyaW5nVHlwZUFk
YXB0ZXJzPgorU3RyaW5nIHRyeU1ha2VTdHJpbmdGcm9tQWRhcHRlcnMoU3RyaW5nVHlwZUFkYXB0
ZXIgYWRhcHRlciwgU3RyaW5nVHlwZUFkYXB0ZXJzIC4uLmFkYXB0ZXJzKQogewotICAgIFN0cmlu
Z1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBhZGFwdGVyMShzdHJpbmcxKTsKLSAgICBTdHJpbmdU
eXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRhcHRlcjIoc3RyaW5nMik7Ci0gICAgU3RyaW5nVHlw
ZUFkYXB0ZXI8U3RyaW5nVHlwZTM+IGFkYXB0ZXIzKHN0cmluZzMpOwotICAgIFN0cmluZ1R5cGVB
ZGFwdGVyPFN0cmluZ1R5cGU0PiBhZGFwdGVyNChzdHJpbmc0KTsKLSAgICBTdHJpbmdUeXBlQWRh
cHRlcjxTdHJpbmdUeXBlNT4gYWRhcHRlcjUoc3RyaW5nNSk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0
ZXI8U3RyaW5nVHlwZTY+IGFkYXB0ZXI2KHN0cmluZzYpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVy
PFN0cmluZ1R5cGU3PiBhZGFwdGVyNyhzdHJpbmc3KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxT
dHJpbmdUeXBlOD4gYWRhcHRlcjgoc3RyaW5nOCk7Ci0KICAgICBib29sIG92ZXJmbG93ID0gZmFs
c2U7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgc3VtV2l0
aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjIubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1X
aXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyMy5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1
bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI0Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAg
c3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjUubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAg
ICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwot
ICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI3Lmxlbmd0aCgpLCBvdmVyZmxvdyk7
Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjgubGVuZ3RoKCksIG92ZXJmbG93
KTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBhZGFwdGVyLmxlbmd0aCgpOworICAgIHN1bVdpdGhP
dmVyZmxvdyhvdmVyZmxvdywgbGVuZ3RoLCBhZGFwdGVycy5sZW5ndGgoKS4uLik7CiAgICAgaWYg
KG92ZXJmbG93KQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBpZiAoYWRhcHRlcjEu
aXM4Qml0KCkgJiYgYWRhcHRlcjIuaXM4Qml0KCkgJiYgYWRhcHRlcjMuaXM4Qml0KCkgJiYgYWRh
cHRlcjQuaXM4Qml0KCkgJiYgYWRhcHRlcjUuaXM4Qml0KCkgJiYgYWRhcHRlcjYuaXM4Qml0KCkg
JiYgYWRhcHRlcjcuaXM4Qml0KCkgJiYgYWRhcHRlcjguaXM4Qml0KCkpIHsKKyAgICBpZiAoYXJl
OEJpdChhZGFwdGVyLCBhZGFwdGVycy4uLikpIHsKICAgICAgICAgTENoYXIqIGJ1ZmZlcjsKICAg
ICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVh
dGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKICAgICAgICAgaWYgKCFyZXN1bHRJbXBs
KQogICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgICAgIExDaGFyKiByZXN1bHQg
PSBidWZmZXI7Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVz
dWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3Vs
dCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRl
cjMud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7
Ci0gICAgICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFk
YXB0ZXI0Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNS53cml0ZVRvKHJlc3VsdCk7Ci0gICAg
ICAgIHJlc3VsdCArPSBhZGFwdGVyNS5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjYud3JpdGVU
byhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjYubGVuZ3RoKCk7Ci0gICAgICAg
IGFkYXB0ZXI3LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI3Lmxl
bmd0aCgpOwotICAgICAgICBhZGFwdGVyOC53cml0ZVRvKHJlc3VsdCk7CisgICAgICAgIG1ha2VT
dHJpbmdBY2N1bXVsYXRvcihidWZmZXIsIGFkYXB0ZXIsIGFkYXB0ZXJzLi4uKTsKIAogICAgICAg
ICByZXR1cm4gV1RGTW92ZShyZXN1bHRJbXBsKTsKICAgICB9CkBAIC02NTEsMTgyICszMjcsMjgg
QEAgU3RyaW5nIHRyeU1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIg
c3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW4KICAgICBpZiAoIXJlc3VsdEltcGwpCiAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKIAotICAgIFVDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAgYWRh
cHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsK
LSAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxl
bmd0aCgpOwotICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRh
cHRlcjMubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3Vs
dCArPSBhZGFwdGVyNC5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNS53cml0ZVRvKHJlc3VsdCk7Ci0g
ICAgcmVzdWx0ICs9IGFkYXB0ZXI1Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI2LndyaXRlVG8ocmVz
dWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjYubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjcud3Jp
dGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyNy5sZW5ndGgoKTsKLSAgICBhZGFw
dGVyOC53cml0ZVRvKHJlc3VsdCk7CisgICAgbWFrZVN0cmluZ0FjY3VtdWxhdG9yKGJ1ZmZlciwg
YWRhcHRlciwgYWRhcHRlcnMuLi4pOwogCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0SW1wbCk7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBl
MiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5cGU0LCB0eXBlbmFtZSBT
dHJpbmdUeXBlNSwgdHlwZW5hbWUgU3RyaW5nVHlwZTYsIHR5cGVuYW1lIFN0cmluZ1R5cGU3LCB0
eXBlbmFtZSBTdHJpbmdUeXBlOCwgdHlwZW5hbWUgU3RyaW5nVHlwZTk+Ci1TdHJpbmcgdHJ5TWFr
ZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdU
eXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBTdHJpbmdUeXBlNSBzdHJpbmc1LCBT
dHJpbmdUeXBlNiBzdHJpbmc2LCBTdHJpbmdUeXBlNyBzdHJpbmc3LCBTdHJpbmdUeXBlOCBzdHJp
bmc4LCBTdHJpbmdUeXBlOSBzdHJpbmc5KQordGVtcGxhdGU8dHlwZW5hbWUuLi4gU3RyaW5nVHlw
ZXM+CitTdHJpbmcgdHJ5TWFrZVN0cmluZyhTdHJpbmdUeXBlcyAuLi5zdHJpbmdzKQogewotICAg
IFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBhZGFwdGVyMShzdHJpbmcxKTsKLSAgICBT
dHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRhcHRlcjIoc3RyaW5nMik7Ci0gICAgU3Ry
aW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTM+IGFkYXB0ZXIzKHN0cmluZzMpOwotICAgIFN0cmlu
Z1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU0PiBhZGFwdGVyNChzdHJpbmc0KTsKLSAgICBTdHJpbmdU
eXBlQWRhcHRlcjxTdHJpbmdUeXBlNT4gYWRhcHRlcjUoc3RyaW5nNSk7Ci0gICAgU3RyaW5nVHlw
ZUFkYXB0ZXI8U3RyaW5nVHlwZTY+IGFkYXB0ZXI2KHN0cmluZzYpOwotICAgIFN0cmluZ1R5cGVB
ZGFwdGVyPFN0cmluZ1R5cGU3PiBhZGFwdGVyNyhzdHJpbmc3KTsKLSAgICBTdHJpbmdUeXBlQWRh
cHRlcjxTdHJpbmdUeXBlOD4gYWRhcHRlcjgoc3RyaW5nOCk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0
ZXI8U3RyaW5nVHlwZTk+IGFkYXB0ZXI5KHN0cmluZzkpOwotCi0gICAgYm9vbCBvdmVyZmxvdyA9
IGZhbHNlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIHN1
bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIyLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAg
c3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjMubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAg
ICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNC5sZW5ndGgoKSwgb3ZlcmZsb3cpOwot
ICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI1Lmxlbmd0aCgpLCBvdmVyZmxvdyk7
Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjYubGVuZ3RoKCksIG92ZXJmbG93
KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNy5sZW5ndGgoKSwgb3ZlcmZs
b3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI4Lmxlbmd0aCgpLCBvdmVy
Zmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjkubGVuZ3RoKCksIG92
ZXJmbG93KTsKLSAgICBpZiAob3ZlcmZsb3cpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQot
ICAgIGlmIChhZGFwdGVyMS5pczhCaXQoKSAmJiBhZGFwdGVyMi5pczhCaXQoKSAmJiBhZGFwdGVy
My5pczhCaXQoKSAmJiBhZGFwdGVyNC5pczhCaXQoKSAmJiBhZGFwdGVyNS5pczhCaXQoKSAmJiBh
ZGFwdGVyNi5pczhCaXQoKSAmJiBhZGFwdGVyNy5pczhCaXQoKSAmJiBhZGFwdGVyOC5pczhCaXQo
KSAmJiBhZGFwdGVyOS5pczhCaXQoKSkgewotICAgICAgICBMQ2hhciogYnVmZmVyOwotICAgICAg
ICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgICAgICBpZiAoIXJlc3VsdEltcGwpCi0g
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICAgICAgTENoYXIqIHJlc3VsdCA9IGJ1
ZmZlcjsKLSAgICAgICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQg
Kz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsK
LSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMy53
cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsKLSAg
ICAgICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRl
cjQubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAg
cmVzdWx0ICs9IGFkYXB0ZXI1Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNi53cml0ZVRvKHJl
c3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNi5sZW5ndGgoKTsKLSAgICAgICAgYWRh
cHRlcjcud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjcubGVuZ3Ro
KCk7Ci0gICAgICAgIGFkYXB0ZXI4LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9
IGFkYXB0ZXI4Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyOS53cml0ZVRvKHJlc3VsdCk7Ci0K
LSAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0SW1wbCk7Ci0gICAgfQotCi0gICAgVUNoYXIq
IGJ1ZmZlcjsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghcmVzdWx0
SW1wbCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgVUNoYXIqIHJlc3VsdCA9IGJ1
ZmZlcjsKLSAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0
ZXIxLmxlbmd0aCgpOwotICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQg
Kz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwotICAg
IHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNC53cml0ZVRvKHJlc3Vs
dCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI0Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI1LndyaXRl
VG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjUubGVuZ3RoKCk7Ci0gICAgYWRhcHRl
cjYud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyNi5sZW5ndGgoKTsKLSAg
ICBhZGFwdGVyNy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI3Lmxlbmd0
aCgpOwotICAgIGFkYXB0ZXI4LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRl
cjgubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjkud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgcmV0dXJu
IFdURk1vdmUocmVzdWx0SW1wbCk7CisgICAgcmV0dXJuIHRyeU1ha2VTdHJpbmdGcm9tQWRhcHRl
cnMoU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZXM+KHN0cmluZ3MpLi4uKTsKIH0KIAotCiAv
LyBDb252ZW5pZW5jZSBvbmx5LgotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTE+Ci1TdHJp
bmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxKQotewotICAgIHJldHVybiBTdHJpbmco
c3RyaW5nMSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBT
dHJpbmdUeXBlMj4KLVN0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmlu
Z1R5cGUyIHN0cmluZzIpCi17Ci0gICAgU3RyaW5nIHJlc3VsdCA9IHRyeU1ha2VTdHJpbmcoc3Ry
aW5nMSwgc3RyaW5nMik7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIENSQVNIKCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVu
YW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMz4KLVN0cmluZyBtYWtlU3RyaW5n
KFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0
cmluZzMpCi17Ci0gICAgU3RyaW5nIHJlc3VsdCA9IHRyeU1ha2VTdHJpbmcoc3RyaW5nMSwgc3Ry
aW5nMiwgc3RyaW5nMyk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIENSQVNIKCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVu
YW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlw
ZTQ+Ci1TdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBz
dHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0KQotewotICAg
IFN0cmluZyByZXN1bHQgPSB0cnlNYWtlU3RyaW5nKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMs
IHN0cmluZzQpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICBDUkFTSCgpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBT
dHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5cGU0LCB0
eXBlbmFtZSBTdHJpbmdUeXBlNT4KLVN0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmlu
ZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0
IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmluZzUpCi17Ci0gICAgU3RyaW5nIHJlc3VsdCA9IHRy
eU1ha2VTdHJpbmcoc3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMywgc3RyaW5nNCwgc3RyaW5nNSk7
Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUy
LCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0
cmluZ1R5cGU1LCB0eXBlbmFtZSBTdHJpbmdUeXBlNj4KLVN0cmluZyBtYWtlU3RyaW5nKFN0cmlu
Z1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMs
IFN0cmluZ1R5cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5cGU2IHN0
cmluZzYpCi17Ci0gICAgU3RyaW5nIHJlc3VsdCA9IHRyeU1ha2VTdHJpbmcoc3RyaW5nMSwgc3Ry
aW5nMiwgc3RyaW5nMywgc3RyaW5nNCwgc3RyaW5nNSwgc3RyaW5nNik7Ci0gICAgaWYgKCFyZXN1
bHQpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJp
bmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1LCB0eXBl
bmFtZSBTdHJpbmdUeXBlNiwgdHlwZW5hbWUgU3RyaW5nVHlwZTc+Ci1TdHJpbmcgbWFrZVN0cmlu
ZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBz
dHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBTdHJpbmdUeXBlNSBzdHJpbmc1LCBTdHJpbmdU
eXBlNiBzdHJpbmc2LCBTdHJpbmdUeXBlNyBzdHJpbmc3KQotewotICAgIFN0cmluZyByZXN1bHQg
PSB0cnlNYWtlU3RyaW5nKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMsIHN0cmluZzQsIHN0cmlu
ZzUsIHN0cmluZzYsIHN0cmluZzcpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICBDUkFTSCgp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUx
LCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0
cmluZ1R5cGU0LCB0eXBlbmFtZSBTdHJpbmdUeXBlNSwgdHlwZW5hbWUgU3RyaW5nVHlwZTYsIHR5
cGVuYW1lIFN0cmluZ1R5cGU3LCB0eXBlbmFtZSBTdHJpbmdUeXBlOD4KLVN0cmluZyBtYWtlU3Ry
aW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUz
IHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0cmlu
Z1R5cGU2IHN0cmluZzYsIFN0cmluZ1R5cGU3IHN0cmluZzcsIFN0cmluZ1R5cGU4IHN0cmluZzgp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlPgorU3RyaW5nIG1ha2VTdHJpbmcoU3RyaW5n
VHlwZSBzdHJpbmcpCiB7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IHRyeU1ha2VTdHJpbmcoc3RyaW5n
MSwgc3RyaW5nMiwgc3RyaW5nMywgc3RyaW5nNCwgc3RyaW5nNSwgc3RyaW5nNiwgc3RyaW5nNywg
c3RyaW5nOCk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICByZXR1cm4gU3RyaW5nKHN0cmluZyk7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlw
ZTMsIHR5cGVuYW1lIFN0cmluZ1R5cGU0LCB0eXBlbmFtZSBTdHJpbmdUeXBlNSwgdHlwZW5hbWUg
U3RyaW5nVHlwZTYsIHR5cGVuYW1lIFN0cmluZ1R5cGU3LCB0eXBlbmFtZSBTdHJpbmdUeXBlOCwg
dHlwZW5hbWUgU3RyaW5nVHlwZTk+Ci1TdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJp
bmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBl
NCBzdHJpbmc0LCBTdHJpbmdUeXBlNSBzdHJpbmc1LCBTdHJpbmdUeXBlNiBzdHJpbmc2LCBTdHJp
bmdUeXBlNyBzdHJpbmc3LCBTdHJpbmdUeXBlOCBzdHJpbmc4LCBTdHJpbmdUeXBlOSBzdHJpbmc5
KQordGVtcGxhdGU8dHlwZW5hbWUuLi4gU3RyaW5nVHlwZXM+CitTdHJpbmcgbWFrZVN0cmluZyhT
dHJpbmdUeXBlcy4uLiBzdHJpbmdzKQogewotICAgIFN0cmluZyByZXN1bHQgPSB0cnlNYWtlU3Ry
aW5nKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMsIHN0cmluZzQsIHN0cmluZzUsIHN0cmluZzYs
IHN0cmluZzcsIHN0cmluZzgsIHN0cmluZzkpOworICAgIFN0cmluZyByZXN1bHQgPSB0cnlNYWtl
U3RyaW5nKHN0cmluZ3MuLi4pOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICBDUkFTSCgpOwog
ICAgIHJldHVybiByZXN1bHQ7CkBAIC04MzUsNiArMzU3LDcgQEAgU3RyaW5nIG1ha2VTdHJpbmco
U3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3Ry
aW5nMywKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6Om1ha2VTdHJpbmc7Cit1c2lu
ZyBXVEY6OnRyeU1ha2VTdHJpbmc7CiAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdPcGVyYXRv
cnMuaD4KICNlbmRpZgotLSAKMi4xMC4xCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>