<?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>129235</bug_id>
          
          <creation_ts>2014-02-23 12:56:35 -0800</creation_ts>
          <short_desc>Use variadic templates to reduce the line count of wtf/text/StringConcatenate.h</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>DUPLICATE</resolution>
          <dup_id>147142</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mrowe</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>983736</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-02-23 12:56:35 -0800</bug_when>
    <thetext>Use variadic templates to reduce the line count of wtf/text/StringConcatenate.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983737</commentid>
    <comment_count>1</comment_count>
      <attachid>225012</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-02-23 12:59:00 -0800</bug_when>
    <thetext>Created attachment 225012
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983738</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-23 13:00:49 -0800</bug_when>
    <thetext>Attachment 225012 did not pass style-queue:


ERROR: Source/WTF/wtf/text/StringConcatenate.h:518:  Do not use &apos;using namespace TryMakeStringDetails;&apos;.  [build/using_namespace] [4]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983739</commentid>
    <comment_count>3</comment_count>
      <attachid>225013</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-02-23 13:01:28 -0800</bug_when>
    <thetext>Created attachment 225013
Just the new code

Adding a file with just new code, as the diff is a bit hard to read.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983740</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-02-23 13:02:49 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 225012 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/WTF/wtf/text/StringConcatenate.h:518:  Do not use &apos;using namespace TryMakeStringDetails;&apos;.  [build/using_namespace] [4]

I don&apos;t think this should be an error. The using namespace declaration is used inside a function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>985834</commentid>
    <comment_count>5</comment_count>
      <attachid>225523</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-02-28 20:06:04 -0800</bug_when>
    <thetext>Created attachment 225523
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001321</commentid>
    <comment_count>6</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-04-16 14:03:19 -0700</bug_when>
    <thetext>This doesn&apos;t seem to work on Windows. Sometimes we run into problems with char*/wchar_t* 

Example error:

     WebSocketFrame.cpp
     1&gt;C:\cygwin\home\buildbot\WebKit\WebKitBuild\Release\include\private\wtf/text/StringConcatenate.h(521): error C2079: &apos;adaptedStrings&apos; uses undefined class &apos;std::tuple&lt;WTF::StringTypeAdapter&lt;StringType1&gt;,WTF::StringTypeAdapter&lt;const char*&gt;&gt;&apos;
                 with
                 [
                     StringType1=WTF::StringAppend&lt;const char *,WTF::String&gt;
                 ] (..\Modules\websockets\WebSocketFrame.cpp)
                 C:\cygwin\home\buildbot\WebKit\WebKitBuild\Release\include\private\wtf/text/StringOperators.h(38) : see reference to function template instantiation &apos;WTF::PassRefPtr&lt;WTF::StringImpl&gt; WTF::tryMakeString&lt;StringType1,StringType2&gt;(StringType1,StringType2)&apos; being compiled
                 with
                 [
                     StringType1=WTF::StringAppend&lt;const char *,WTF::String&gt;
         ,            StringType2=const char *
                 ]
                 C:\cygwin\home\buildbot\WebKit\WebKitBuild\Release\include\private\wtf/text/StringOperators.h(37) : while compiling class template member function &apos;WTF::StringAppend&lt;WTF::StringAppend&lt;const char *,WTF::String&gt;,const char *&gt;::operator WTF::String(void) const&apos;
                 ..\Modules\websockets\WebSocketFrame.cpp(99) : see reference to function template instantiation &apos;WTF::StringAppend&lt;WTF::StringAppend&lt;const char *,WTF::String&gt;,const char *&gt;::operator WTF::String(void) const&apos; being compiled
                 ..\Modules\websockets\WebSocketFrame.cpp(99) : see reference to class template instantiation &apos;WTF::StringAppend&lt;WTF::StringAppend&lt;const char *,WTF::String&gt;,const char *&gt;&apos; being compiled
     1&gt;C:\cygwin\home\buildbot\WebKit\WebKitBuild\Release\include\private\wtf/text/StringConcatenate.h(521): error C2078: too many initializers (..\Modules\websockets\WebSocketFrame.cpp)
     1&gt;C:\cygwin\home\buildbot\WebKit\WebKitBuild\Release\include\private\wtf/text/StringConcatenate.h(521): error C2440: &apos;initializing&apos; : cannot convert from &apos;const char *&apos; to &apos;int&apos; (..\Modules\websockets\WebSocketFrame.cpp)
                 There is no context in which this conversion is possible
     1&gt;C:\cygwin\home\buildbot\WebKit\WebKitBuild\Release\include\private\wtf/text/StringConcatenate.h(522): error C2783: &apos;WTF::PassRefPtr&lt;WTF::StringImpl&gt; WTF::TryMakeStringDetails::tryMakeStringTuple(Tuple)&apos; : could not deduce template argument for &apos;Indicies&apos; (..\Modules\websockets\WebSocketFrame.cpp)
                 C:\cygwin\home\buildbot\WebKit\WebKitBuild\Release\include\private\wtf/text/StringConcatenate.h(509) : see declaration of &apos;WTF::TryMakeStringDetails::tryMakeStringTuple&apos;
     1&gt;C:\cygwin\home\buildbot\WebKit\WebKitBuild\Release\include\private\wtf/text/StringConcatenate.h(522): error C2780: &apos;WTF::PassRefPtr&lt;WTF::StringImpl&gt; WTF::TryMakeStringDetails::tryMakeStringTuple(Tuple &amp;&amp;,std::index_sequence&lt;Index...&gt;)&apos; : expects 2 arguments - 1 provided (..\Modules\websockets\WebSocketFrame.cpp)
                 C:\cygwin\home\buildbot\WebKit\WebKitBuild\Release\include\private\wtf/text/StringConcatenate.h(503) : see declaration of &apos;WTF::TryMakeStringDetails::tryMakeStringTuple&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019546</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2014-06-30 20:20:07 -0700</bug_when>
    <thetext>I wrote up a very similar patch this evening since I wasn&apos;t aware of this one. I don&apos;t think it&apos;s necessary to use std::tuple for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174273</commentid>
    <comment_count>8</comment_count>
      <attachid>225523</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-13 18:47:48 -0700</bug_when>
    <thetext>Comment on attachment 225523
Patch

This patch doesn&apos;t apply anymore, but it looks like it would be useful. Put up a rebaselined patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1194603</commentid>
    <comment_count>9</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-05-18 20:57:06 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 225523 [details]
&gt; Patch
&gt; 
&gt; This patch doesn&apos;t apply anymore, but it looks like it would be useful. Put
&gt; up a rebaselined patch!

+1!

And I think our Windows builds can handle this now...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260346</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-12-15 16:22:31 -0800</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 147142 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225012</attachid>
            <date>2014-02-23 12:59:00 -0800</date>
            <delta_ts>2014-02-28 20:06:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-129235-20140223125901.patch</filename>
            <type>text/plain</type>
            <size>34528</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNjQ1NTgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE0LTAyLTIzICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgVXNlIHZhcmlhZGljIHRlbXBsYXRlcyB0byByZWR1Y2UgdGhl
IGxpbmUgY291bnQgb2Ygd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MjM1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdDb25j
YXRlbmF0ZS5oOgorICAgICAgICAoV1RGOjpUcnlNYWtlU3RyaW5nRGV0YWlsczo6c3VtV2l0aE92
ZXJmbG93SW1wbCk6CisgICAgICAgIChXVEY6OlRyeU1ha2VTdHJpbmdEZXRhaWxzOjpzdW1XaXRo
T3ZlcmZsb3cpOgorICAgICAgICAoV1RGOjpUcnlNYWtlU3RyaW5nRGV0YWlsczo6aXM4Qml0SW1w
bCk6CisgICAgICAgIChXVEY6OlRyeU1ha2VTdHJpbmdEZXRhaWxzOjppczhCaXQpOgorICAgICAg
ICAoV1RGOjpUcnlNYWtlU3RyaW5nRGV0YWlsczo6d3JpdGVCdWZmZXJJbXBsKToKKyAgICAgICAg
KFdURjo6VHJ5TWFrZVN0cmluZ0RldGFpbHM6OndyaXRlQnVmZmVyKToKKyAgICAgICAgSGVscGVy
cyB0byByZWN1cnNpdmVseSBwZXJmb3JtIHRoZSBuZWVkZWQgb3BlcmF0aW9ucyBvbiBvbiBlYWNo
IHN0cmluZyBpbiB0aGUgc2VyaWVzLgorCisgICAgICAgIChXVEY6OnRyeU1ha2VTdHJpbmcpOgor
ICAgICAgICAoV1RGOjptYWtlU3RyaW5nKToKKyAgICAgICAgQ29udmVydCB0cnlNYWtlU3RyaW5n
IGFuZCBtYWtlU3RyaW5nIGludG8gdmFyaWFkaWMgdGVtcGxhdGUgZnVuY3Rpb25zIHRvIHJlZHVj
ZSBjb2RlCisgICAgICAgIGR1cGxpY2F0aW9uLgorCiAyMDE0LTAyLTIxICBCZW5qYW1pbiBQb3Vs
YWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBqc0RvY3VtZW50UHJvdG90eXBl
RnVuY3Rpb25HZXRFbGVtZW50QnlJZCBzaG91bGQgbm90IGNyZWF0ZSBhbiBBdG9taWNTdHJpbmcg
Zm9yIHRoZSBmdW5jdGlvbiBhcmd1bWVudApJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdDb25jYXRlbmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
Q29uY2F0ZW5hdGUuaAkocmV2aXNpb24gMTY0NTUwKQorKysgU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdDb25jYXRlbmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSwxMCBAQCBwdWJs
aWM6CiAgICAgICAgICpkZXN0aW5hdGlvbiA9IG1fYnVmZmVyOwogICAgIH0KIAotICAgIHZvaWQg
d3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pIHsgKmRlc3RpbmF0aW9uID0gbV9idWZmZXI7IH0K
KyAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgKmRl
c3RpbmF0aW9uID0gbV9idWZmZXI7CisgICAgfQogCiBwcml2YXRlOgogICAgIHVuc2lnbmVkIGNo
YXIgbV9idWZmZXI7CkBAIC04NCw3ICs4NywxMCBAQCBwdWJsaWM6CiAgICAgICAgICpkZXN0aW5h
dGlvbiA9IG1fYnVmZmVyOwogICAgIH0KIAotICAgIHZvaWQgd3JpdGVUbyhVQ2hhciogZGVzdGlu
YXRpb24pIHsgKmRlc3RpbmF0aW9uID0gbV9idWZmZXI7IH0KKyAgICB2b2lkIHdyaXRlVG8oVUNo
YXIqIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgKmRlc3RpbmF0aW9uID0gbV9idWZmZXI7
CisgICAgfQogCiBwcml2YXRlOgogICAgIExDaGFyIG1fYnVmZmVyOwpAQCAtMTA4LDcgKzExNCwx
MCBAQCBwdWJsaWM6CiAgICAgICAgICpkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PExDaGFyPiht
X2J1ZmZlcik7CiAgICAgfQogCi0gICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikg
eyAqZGVzdGluYXRpb24gPSBtX2J1ZmZlcjsgfQorICAgIHZvaWQgd3JpdGVUbyhVQ2hhciogZGVz
dGluYXRpb24pCisgICAgeworICAgICAgICAqZGVzdGluYXRpb24gPSBtX2J1ZmZlcjsKKyAgICB9
CiAKIHByaXZhdGU6CiAgICAgVUNoYXIgbV9idWZmZXI7CkBAIC00MTYsNDYzICs0MjUsMTEzIEBA
IHByaXZhdGU6CiAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nPiBtX2FkYXB0ZXI7CiB9Owog
Ci1pbmxpbmUgdm9pZCBzdW1XaXRoT3ZlcmZsb3codW5zaWduZWQmIHRvdGFsLCB1bnNpZ25lZCBh
ZGRlbmQsIGJvb2wmIG92ZXJmbG93KQorbmFtZXNwYWNlIFRyeU1ha2VTdHJpbmdEZXRhaWxzIHsK
KworaW5saW5lIHZvaWQgc3VtV2l0aE92ZXJmbG93SW1wbCh1bnNpZ25lZCYsIGJvb2wmKQogewot
ICAgIHVuc2lnbmVkIG9sZFRvdGFsID0gdG90YWw7Ci0gICAgdG90YWwgPSBvbGRUb3RhbCArIGFk
ZGVuZDsKLSAgICBpZiAodG90YWwgPCBvbGRUb3RhbCkKLSAgICAgICAgb3ZlcmZsb3cgPSB0cnVl
OworICAgIC8vIEVuZCBvZiB0aGUgbGluZS4KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5n
VHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyPgotUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB0cnlN
YWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBBZGFwdGVkU3RyaW5nLCB0eXBlbmFtZS4uLiBBZGFwdGVkU3RyaW5nUmVz
dD4KK2lubGluZSB2b2lkIHN1bVdpdGhPdmVyZmxvd0ltcGwodW5zaWduZWQmIHRvdGFsLCBib29s
JiBvdmVyZmxvdywgQWRhcHRlZFN0cmluZyBhZGFwdGVkU3RyaW5nLCBBZGFwdGVkU3RyaW5nUmVz
dC4uLiByZXN0KQogewotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBhZGFwdGVy
MShzdHJpbmcxKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRhcHRlcjIo
c3RyaW5nMik7Ci0KLSAgICBib29sIG92ZXJmbG93ID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgbGVu
Z3RoID0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRh
cHRlcjIubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBpZiAob3ZlcmZsb3cpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgaWYgKGFkYXB0ZXIxLmlzOEJpdCgpICYmIGFkYXB0ZXIyLmlzOEJpdCgp
KSB7Ci0gICAgICAgIExDaGFyKiBidWZmZXI7Ci0gICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBy
ZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1
ZmZlcik7Ci0gICAgICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgICAgIHJldHVybiAwOwot
Ci0gICAgICAgIExDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRl
VG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgICAg
ICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdEltcGwu
cmVsZWFzZSgpOworICAgIHVuc2lnbmVkIG9sZFRvdGFsID0gdG90YWw7CisgICAgdG90YWwgPSBv
bGRUb3RhbCArIGFkYXB0ZWRTdHJpbmcubGVuZ3RoKCk7CisgICAgaWYgKHRvdGFsIDwgb2xkVG90
YWwpIHsKKyAgICAgICAgb3ZlcmZsb3cgPSB0cnVlOworICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9
IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAg
IGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBVQ2hhciogcmVzdWx0
ID0gYnVmZmVyOwotICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0g
YWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotCi0gICAg
cmV0dXJuIHJlc3VsdEltcGwucmVsZWFzZSgpOworICAgIHN1bVdpdGhPdmVyZmxvd0ltcGwodG90
YWwsIG92ZXJmbG93LCByZXN0Li4uKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlw
ZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMz4KLVBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gdHJ5TWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdU
eXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczKQordGVtcGxhdGU8dHlwZW5hbWUgVHVw
bGUsIHNpemVfdC4uLiBJbmRleD4KK2lubGluZSB2b2lkIHN1bVdpdGhPdmVyZmxvdyh1bnNpZ25l
ZCYgdG90YWwsIGJvb2wmIG92ZXJmbG93LCBUdXBsZSYmIHN0cmluZ3MsIHN0ZDo6aW5kZXhfc2Vx
dWVuY2U8SW5kZXguLi4+KQogewotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBh
ZGFwdGVyMShzdHJpbmcxKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRh
cHRlcjIoc3RyaW5nMik7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTM+IGFkYXB0
ZXIzKHN0cmluZzMpOwotCi0gICAgYm9vbCBvdmVyZmxvdyA9IGZhbHNlOwotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgs
IGFkYXB0ZXIyLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0
aCwgYWRhcHRlcjMubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBpZiAob3ZlcmZsb3cpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgaWYgKGFkYXB0ZXIxLmlzOEJpdCgpICYmIGFkYXB0ZXIyLmlz
OEJpdCgpICYmIGFkYXB0ZXIzLmlzOEJpdCgpKSB7Ci0gICAgICAgIExDaGFyKiBidWZmZXI7Ci0g
ICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgICAgIGlmICghcmVzdWx0SW1w
bCkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIExDaGFyKiByZXN1bHQgPSBidWZm
ZXI7Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9
IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0g
ICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjMud3Jp
dGVUbyhyZXN1bHQpOwotCi0gICAgICAgIHJldHVybiByZXN1bHRJbXBsLnJlbGVhc2UoKTsKLSAg
ICB9Ci0KLSAgICBVQ2hhciogYnVmZmVyID0gMDsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVz
dWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZm
ZXIpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBVQ2hh
ciogcmVzdWx0ID0gYnVmZmVyOwotICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICBy
ZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQp
OwotICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMy53cml0ZVRv
KHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0SW1wbC5yZWxlYXNlKCk7CisgICAgc3VtV2l0
aE92ZXJmbG93SW1wbCh0b3RhbCwgb3ZlcmZsb3csIHN0ZDo6Z2V0PEluZGV4PihzdHJpbmdzKS4u
Lik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdU
eXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5cGU0PgotUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiB0cnlNYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmlu
Z1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUdXBsZSwgdHlwZW5hbWUgSW5kaWNpZXMgPSBzdGQ6Om1ha2Vf
aW5kZXhfc2VxdWVuY2U8c3RkOjp0dXBsZV9zaXplPFR1cGxlPjo6dmFsdWU+PgoraW5saW5lIHZv
aWQgc3VtV2l0aE92ZXJmbG93KHVuc2lnbmVkJiB0b3RhbCwgYm9vbCYgb3ZlcmZsb3csIFR1cGxl
IHN0cmluZ3MpCiB7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTE+IGFkYXB0ZXIx
KHN0cmluZzEpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFwdGVyMihz
dHJpbmcyKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMz4gYWRhcHRlcjMoc3Ry
aW5nMyk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTQ+IGFkYXB0ZXI0KHN0cmlu
ZzQpOwotCi0gICAgYm9vbCBvdmVyZmxvdyA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIy
Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRl
cjMubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFw
dGVyNC5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIGlmIChvdmVyZmxvdykKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBpZiAoYWRhcHRlcjEuaXM4Qml0KCkgJiYgYWRhcHRlcjIuaXM4Qml0KCkg
JiYgYWRhcHRlcjMuaXM4Qml0KCkgJiYgYWRhcHRlcjQuaXM4Qml0KCkpIHsKLSAgICAgICAgTENo
YXIqIGJ1ZmZlcjsKLSAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJp
bmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAg
aWYgKCFyZXN1bHRJbXBsKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgTENoYXIq
IHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICAgICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAg
ICAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIyLndyaXRl
VG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgICAg
ICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMy5s
ZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgICAgIHJl
dHVybiByZXN1bHRJbXBsLnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBVQ2hhciogYnVmZmVyOwot
ICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRl
VW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFyZXN1bHRJbXBsKQotICAg
ICAgICByZXR1cm4gMDsKKyAgICBzdW1XaXRoT3ZlcmZsb3codG90YWwsIG92ZXJmbG93LCBzdGQ6
OmZvcndhcmQ8VHVwbGU+KHN0cmluZ3MpLCBJbmRpY2llcygpKTsKK30KIAotICAgIFVDaGFyKiBy
ZXN1bHQgPSBidWZmZXI7Ci0gICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3Vs
dCArPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0g
ICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVz
dWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjQud3Jp
dGVUbyhyZXN1bHQpOwogCi0gICAgcmV0dXJuIHJlc3VsdEltcGwucmVsZWFzZSgpOworaW5saW5l
IGJvb2wgaXM4Qml0SW1wbCgpCit7CisgICAgLy8gRW5kIG9mIHRoZSBsaW5lLgorICAgIHJldHVy
biB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3Ry
aW5nVHlwZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlw
ZW5hbWUgU3RyaW5nVHlwZTU+Ci1QYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHRyeU1ha2VTdHJpbmco
U3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3Ry
aW5nMywgU3RyaW5nVHlwZTQgc3RyaW5nNCwgU3RyaW5nVHlwZTUgc3RyaW5nNSkKK3RlbXBsYXRl
PHR5cGVuYW1lIEFkYXB0ZWRTdHJpbmcsIHR5cGVuYW1lLi4uIEFkYXB0ZWRTdHJpbmdSZXN0Pgor
aW5saW5lIGJvb2wgaXM4Qml0SW1wbChBZGFwdGVkU3RyaW5nIGFkYXB0ZWRTdHJpbmcsIEFkYXB0
ZWRTdHJpbmdSZXN0Li4uIHJlc3QpCiB7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlw
ZTE+IGFkYXB0ZXIxKHN0cmluZzEpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUy
PiBhZGFwdGVyMihzdHJpbmcyKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMz4g
YWRhcHRlcjMoc3RyaW5nMyk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTQ+IGFk
YXB0ZXI0KHN0cmluZzQpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU1PiBhZGFw
dGVyNShzdHJpbmc1KTsKLQotICAgIGJvb2wgb3ZlcmZsb3cgPSBmYWxzZTsKLSAgICB1bnNpZ25l
ZCBsZW5ndGggPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3Ro
LCBhZGFwdGVyMi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5n
dGgsIGFkYXB0ZXIzLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxl
bmd0aCwgYWRhcHRlcjQubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3co
bGVuZ3RoLCBhZGFwdGVyNS5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIGlmIChvdmVyZmxvdykK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoYWRhcHRlcjEuaXM4Qml0KCkgJiYgYWRhcHRl
cjIuaXM4Qml0KCkgJiYgYWRhcHRlcjMuaXM4Qml0KCkgJiYgYWRhcHRlcjQuaXM4Qml0KCkgJiYg
YWRhcHRlcjUuaXM4Qml0KCkpIHsKLSAgICAgICAgTENoYXIqIGJ1ZmZlcjsKLSAgICAgICAgUmVm
UHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRp
YWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgTENoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICAg
ICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjEu
bGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVz
dWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3Vs
dCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRl
cjQud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3RoKCk7
Ci0gICAgICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKLQotICAgICAgICByZXR1cm4gcmVz
dWx0SW1wbC5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICBSZWZQ
dHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlh
bGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBVQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgIGFkYXB0ZXIxLndyaXRl
VG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgYWRhcHRl
cjIud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAg
ICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0
aCgpOwotICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRl
cjQubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgcmV0dXJu
IHJlc3VsdEltcGwucmVsZWFzZSgpOworICAgIHJldHVybiBhZGFwdGVkU3RyaW5nLmlzOEJpdCgp
ICYmIGlzOEJpdEltcGwocmVzdC4uLik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5
cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1l
IFN0cmluZ1R5cGU0LCB0eXBlbmFtZSBTdHJpbmdUeXBlNSwgdHlwZW5hbWUgU3RyaW5nVHlwZTY+
Ci1QYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHRyeU1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5n
MSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQg
c3RyaW5nNCwgU3RyaW5nVHlwZTUgc3RyaW5nNSwgU3RyaW5nVHlwZTYgc3RyaW5nNikKK3RlbXBs
YXRlPHR5cGVuYW1lIFR1cGxlLCBzaXplX3QuLi4gSW5kZXg+CitpbmxpbmUgYm9vbCBpczhCaXQo
VHVwbGUmJiBzdHJpbmdzLCBzdGQ6OmluZGV4X3NlcXVlbmNlPEluZGV4Li4uPikKIHsKLSAgICBT
dHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3RyaW5nMSk7Ci0gICAgU3Ry
aW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKHN0cmluZzIpOwotICAgIFN0cmlu
Z1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUzPiBhZGFwdGVyMyhzdHJpbmczKTsKLSAgICBTdHJpbmdU
eXBlQWRhcHRlcjxTdHJpbmdUeXBlND4gYWRhcHRlcjQoc3RyaW5nNCk7Ci0gICAgU3RyaW5nVHlw
ZUFkYXB0ZXI8U3RyaW5nVHlwZTU+IGFkYXB0ZXI1KHN0cmluZzUpOwotICAgIFN0cmluZ1R5cGVB
ZGFwdGVyPFN0cmluZ1R5cGU2PiBhZGFwdGVyNihzdHJpbmc2KTsKLQotICAgIGJvb2wgb3ZlcmZs
b3cgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAg
ICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyMi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwot
ICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIzLmxlbmd0aCgpLCBvdmVyZmxvdyk7
Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjQubGVuZ3RoKCksIG92ZXJmbG93
KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNS5sZW5ndGgoKSwgb3ZlcmZs
b3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI2Lmxlbmd0aCgpLCBvdmVy
Zmxvdyk7Ci0gICAgaWYgKG92ZXJmbG93KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChh
ZGFwdGVyMS5pczhCaXQoKSAmJiBhZGFwdGVyMi5pczhCaXQoKSAmJiBhZGFwdGVyMy5pczhCaXQo
KSAmJiBhZGFwdGVyNC5pczhCaXQoKSAmJiBhZGFwdGVyNS5pczhCaXQoKSAmJiBhZGFwdGVyNi5p
czhCaXQoKSkgewotICAgICAgICBMQ2hhciogYnVmZmVyOwotICAgICAgICBSZWZQdHI8U3RyaW5n
SW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVu
Z3RoLCBidWZmZXIpOwotICAgICAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgICAgICByZXR1
cm4gMDsKLQotICAgICAgICBMQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgICAgICBhZGFwdGVy
MS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsK
LSAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRh
cHRlcjIubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAgICAg
ICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNC53cml0ZVRv
KHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNC5sZW5ndGgoKTsKLSAgICAgICAg
YWRhcHRlcjUud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjUubGVu
Z3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI2LndyaXRlVG8ocmVzdWx0KTsKLQotICAgICAgICByZXR1
cm4gcmVzdWx0SW1wbC5yZWxlYXNlKCk7ICAgICAgICAKLSAgICB9Ci0KLSAgICBVQ2hhciogYnVm
ZmVyOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFyZXN1bHRJbXBs
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFVDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAg
YWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgo
KTsKLSAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIy
Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0g
YWRhcHRlcjMubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQpOwotICAgIHJl
c3VsdCArPSBhZGFwdGVyNC5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNS53cml0ZVRvKHJlc3VsdCk7
Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI1Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI2LndyaXRlVG8o
cmVzdWx0KTsKLQotICAgIHJldHVybiByZXN1bHRJbXBsLnJlbGVhc2UoKTsKKyAgICByZXR1cm4g
aXM4Qml0SW1wbChzdGQ6OmdldDxJbmRleD4oc3RyaW5ncykuLi4pOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmlu
Z1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTUsIHR5cGVu
YW1lIFN0cmluZ1R5cGU2LCB0eXBlbmFtZSBTdHJpbmdUeXBlNz4KLVBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4gdHJ5TWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJp
bmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBTdHJpbmdUeXBl
NSBzdHJpbmc1LCBTdHJpbmdUeXBlNiBzdHJpbmc2LCBTdHJpbmdUeXBlNyBzdHJpbmc3KQordGVt
cGxhdGU8dHlwZW5hbWUgVHVwbGUsIHR5cGVuYW1lIEluZGljaWVzID0gc3RkOjptYWtlX2luZGV4
X3NlcXVlbmNlPHN0ZDo6dHVwbGVfc2l6ZTxUdXBsZT46OnZhbHVlPj4KK2lubGluZSBib29sIGlz
OEJpdChUdXBsZSBzdHJpbmdzKQogewotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUx
PiBhZGFwdGVyMShzdHJpbmcxKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4g
YWRhcHRlcjIoc3RyaW5nMik7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTM+IGFk
YXB0ZXIzKHN0cmluZzMpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU0PiBhZGFw
dGVyNChzdHJpbmc0KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNT4gYWRhcHRl
cjUoc3RyaW5nNSk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTY+IGFkYXB0ZXI2
KHN0cmluZzYpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU3PiBhZGFwdGVyNyhz
dHJpbmc3KTsKLQotICAgIGJvb2wgb3ZlcmZsb3cgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBsZW5n
dGggPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFw
dGVyMi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFk
YXB0ZXIzLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwg
YWRhcHRlcjQubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3Ro
LCBhZGFwdGVyNS5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5n
dGgsIGFkYXB0ZXI2Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxl
bmd0aCwgYWRhcHRlcjcubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBpZiAob3ZlcmZsb3cpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGFkYXB0ZXIxLmlzOEJpdCgpICYmIGFkYXB0ZXIy
LmlzOEJpdCgpICYmIGFkYXB0ZXIzLmlzOEJpdCgpICYmIGFkYXB0ZXI0LmlzOEJpdCgpICYmIGFk
YXB0ZXI1LmlzOEJpdCgpICYmIGFkYXB0ZXI2LmlzOEJpdCgpICYmIGFkYXB0ZXI3LmlzOEJpdCgp
KSB7Ci0gICAgICAgIExDaGFyKiBidWZmZXI7Ci0gICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBy
ZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1
ZmZlcik7Ci0gICAgICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgICAgIHJldHVybiAwOwot
Ci0gICAgICAgIExDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRl
VG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgICAg
ICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMi5s
ZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1
bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0
KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI0Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVy
NS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNS5sZW5ndGgoKTsK
LSAgICAgICAgYWRhcHRlcjYud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRh
cHRlcjYubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI3LndyaXRlVG8ocmVzdWx0KTsKLQotICAg
ICAgICByZXR1cm4gcmVzdWx0SW1wbC5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgVUNoYXIqIGJ1
ZmZlcjsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgIGlmICghcmVzdWx0SW1w
bCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGlzOEJpdChzdGQ6OmZvcndhcmQ8VHVw
bGU+KHN0cmluZ3MpLCBJbmRpY2llcygpKTsKK30KIAotICAgIFVDaGFyKiByZXN1bHQgPSBidWZm
ZXI7Ci0gICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVy
MS5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9
IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAgICBy
ZXN1bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQp
OwotICAgIHJlc3VsdCArPSBhZGFwdGVyNC5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNS53cml0ZVRv
KHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI1Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI2
LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjYubGVuZ3RoKCk7Ci0gICAg
YWRhcHRlcjcud3JpdGVUbyhyZXN1bHQpOwogCi0gICAgcmV0dXJuIHJlc3VsdEltcGwucmVsZWFz
ZSgpOwordGVtcGxhdGU8dHlwZW5hbWUgQnVmZmVyVHlwZT4KK2lubGluZSB2b2lkIHdyaXRlQnVm
ZmVySW1wbChCdWZmZXJUeXBlKQoreworICAgIC8vIEVuZCBvZiB0aGUgbGluZS4KIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFt
ZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1
LCB0eXBlbmFtZSBTdHJpbmdUeXBlNiwgdHlwZW5hbWUgU3RyaW5nVHlwZTcsIHR5cGVuYW1lIFN0
cmluZ1R5cGU4PgotUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB0cnlNYWtlU3RyaW5nKFN0cmluZ1R5
cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0
cmluZ1R5cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5cGU2IHN0cmlu
ZzYsIFN0cmluZ1R5cGU3IHN0cmluZzcsIFN0cmluZ1R5cGU4IHN0cmluZzgpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBCdWZmZXJUeXBlLCB0eXBlbmFtZSBBZGFwdGVkU3RyaW5nLCB0eXBlbmFtZS4uLiBB
ZGFwdGVkU3RyaW5nUmVzdD4KK2lubGluZSB2b2lkIHdyaXRlQnVmZmVySW1wbChCdWZmZXJUeXBl
IGJ1ZmZlciwgQWRhcHRlZFN0cmluZyBhZGFwdGVkU3RyaW5nLCBBZGFwdGVkU3RyaW5nUmVzdC4u
LiByZXN0KQogewotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBhZGFwdGVyMShz
dHJpbmcxKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRhcHRlcjIoc3Ry
aW5nMik7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTM+IGFkYXB0ZXIzKHN0cmlu
ZzMpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU0PiBhZGFwdGVyNChzdHJpbmc0
KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNT4gYWRhcHRlcjUoc3RyaW5nNSk7
Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTY+IGFkYXB0ZXI2KHN0cmluZzYpOwot
ICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU3PiBhZGFwdGVyNyhzdHJpbmc3KTsKLSAg
ICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlOD4gYWRhcHRlcjgoc3RyaW5nOCk7Ci0KLSAg
ICBib29sIG92ZXJmbG93ID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYWRhcHRlcjEu
bGVuZ3RoKCk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjIubGVuZ3RoKCks
IG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyMy5sZW5ndGgo
KSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI0Lmxlbmd0
aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjUubGVu
Z3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNi5s
ZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI3
Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRl
cjgubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBpZiAob3ZlcmZsb3cpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgaWYgKGFkYXB0ZXIxLmlzOEJpdCgpICYmIGFkYXB0ZXIyLmlzOEJpdCgpICYm
IGFkYXB0ZXIzLmlzOEJpdCgpICYmIGFkYXB0ZXI0LmlzOEJpdCgpICYmIGFkYXB0ZXI1LmlzOEJp
dCgpICYmIGFkYXB0ZXI2LmlzOEJpdCgpICYmIGFkYXB0ZXI3LmlzOEJpdCgpICYmIGFkYXB0ZXI4
LmlzOEJpdCgpKSB7Ci0gICAgICAgIExDaGFyKiBidWZmZXI7Ci0gICAgICAgIFJlZlB0cjxTdHJp
bmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChs
ZW5ndGgsIGJ1ZmZlcik7Ci0gICAgICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgICAgIHJl
dHVybiAwOworICAgIGFkYXB0ZWRTdHJpbmcud3JpdGVUbyhidWZmZXIpOworICAgIGJ1ZmZlciAr
PSBhZGFwdGVkU3RyaW5nLmxlbmd0aCgpOwogCi0gICAgICAgIExDaGFyKiByZXN1bHQgPSBidWZm
ZXI7Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9
IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0g
ICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjMud3Jp
dGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7Ci0gICAg
ICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI0
Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJl
c3VsdCArPSBhZGFwdGVyNS5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjYud3JpdGVUbyhyZXN1
bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjYubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0
ZXI3LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI3Lmxlbmd0aCgp
OwotICAgICAgICBhZGFwdGVyOC53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICAgICAgcmV0dXJuIHJl
c3VsdEltcGwucmVsZWFzZSgpOwotICAgIH0KLQotICAgIFVDaGFyKiBidWZmZXI7Ci0gICAgUmVm
UHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRp
YWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgIHJl
dHVybiAwOworICAgIHdyaXRlQnVmZmVySW1wbChidWZmZXIsIHJlc3QuLi4pOworfQogCi0gICAg
VUNoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0g
ICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVz
dWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjMud3Jp
dGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsKLSAgICBhZGFw
dGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI0Lmxlbmd0aCgpOwot
ICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjUubGVu
Z3RoKCk7Ci0gICAgYWRhcHRlcjYud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFw
dGVyNi5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0
ICs9IGFkYXB0ZXI3Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI4LndyaXRlVG8ocmVzdWx0KTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIEJ1ZmZlclR5cGUsIHR5cGVuYW1lIFR1cGxlLCBzaXplX3QuLi4gSW5k
ZXg+CitpbmxpbmUgdm9pZCB3cml0ZUJ1ZmZlcihCdWZmZXJUeXBlIGJ1ZmZlciwgVHVwbGUmJiBz
dHJpbmdzLCBzdGQ6OmluZGV4X3NlcXVlbmNlPEluZGV4Li4uPikKK3sKKyAgICB3cml0ZUJ1ZmZl
ckltcGwoYnVmZmVyLCBzdGQ6OmdldDxJbmRleD4oc3RyaW5ncykuLi4pOworfQogCi0gICAgcmV0
dXJuIHJlc3VsdEltcGwucmVsZWFzZSgpOwordGVtcGxhdGU8dHlwZW5hbWUgQnVmZmVyVHlwZSwg
dHlwZW5hbWUgVHVwbGUsIHR5cGVuYW1lIEluZGljaWVzID0gc3RkOjptYWtlX2luZGV4X3NlcXVl
bmNlPHN0ZDo6dHVwbGVfc2l6ZTxUdXBsZT46OnZhbHVlPj4KK2lubGluZSB2b2lkIHdyaXRlQnVm
ZmVyKEJ1ZmZlclR5cGUgYnVmZmVyLCBUdXBsZSBzdHJpbmdzKQoreworICAgIHdyaXRlQnVmZmVy
KGJ1ZmZlciwgc3RkOjpmb3J3YXJkPFR1cGxlPihzdHJpbmdzKSwgSW5kaWNpZXMoKSk7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlw
ZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5cGU0LCB0eXBlbmFtZSBTdHJpbmdU
eXBlNSwgdHlwZW5hbWUgU3RyaW5nVHlwZTYsIHR5cGVuYW1lIFN0cmluZ1R5cGU3LCB0eXBlbmFt
ZSBTdHJpbmdUeXBlOCwgdHlwZW5hbWUgU3RyaW5nVHlwZTk+Ci1QYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IHRyeU1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5n
MiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3RyaW5nNCwgU3RyaW5nVHlwZTUg
c3RyaW5nNSwgU3RyaW5nVHlwZTYgc3RyaW5nNiwgU3RyaW5nVHlwZTcgc3RyaW5nNywgU3RyaW5n
VHlwZTggc3RyaW5nOCwgU3RyaW5nVHlwZTkgc3RyaW5nOSkKK30gLy8gbmFtZXNwYWNlIFRyeU1h
a2VTdHJpbmdEZXRhaWxzCisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFN0cmluZ1R5cGVzPgorUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiB0cnlNYWtlU3RyaW5nKFN0cmluZ1R5cGVzLi4uIHN0cmluZ3Mp
CiB7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTE+IGFkYXB0ZXIxKHN0cmluZzEp
OwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFwdGVyMihzdHJpbmcyKTsK
LSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMz4gYWRhcHRlcjMoc3RyaW5nMyk7Ci0g
ICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTQ+IGFkYXB0ZXI0KHN0cmluZzQpOwotICAg
IFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU1PiBhZGFwdGVyNShzdHJpbmc1KTsKLSAgICBT
dHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNj4gYWRhcHRlcjYoc3RyaW5nNik7Ci0gICAgU3Ry
aW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTc+IGFkYXB0ZXI3KHN0cmluZzcpOwotICAgIFN0cmlu
Z1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU4PiBhZGFwdGVyOChzdHJpbmc4KTsKLSAgICBTdHJpbmdU
eXBlQWRhcHRlcjxTdHJpbmdUeXBlOT4gYWRhcHRlcjkoc3RyaW5nOSk7CisgICAgdXNpbmcgbmFt
ZXNwYWNlIFRyeU1ha2VTdHJpbmdEZXRhaWxzOworCisgICAgc3RkOjp0dXBsZTxTdHJpbmdUeXBl
QWRhcHRlcjxTdHJpbmdUeXBlcz4uLi4+IGFkYXB0ZWRTdHJpbmdzKHN0cmluZ3MuLi4pOwogCiAg
ICAgYm9vbCBvdmVyZmxvdyA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIx
Lmxlbmd0aCgpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIyLmxlbmd0aCgp
LCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjMubGVuZ3Ro
KCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNC5sZW5n
dGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI1Lmxl
bmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjYu
bGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVy
Ny5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0
ZXI4Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRh
cHRlcjkubGVuZ3RoKCksIG92ZXJmbG93KTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSAwOworICAg
IHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIG92ZXJmbG93LCBhZGFwdGVkU3RyaW5ncyk7CiAgICAg
aWYgKG92ZXJmbG93KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICBpZiAoYWRhcHRlcjEuaXM4Qml0KCkgJiYgYWRhcHRlcjIuaXM4Qml0KCkgJiYgYWRh
cHRlcjMuaXM4Qml0KCkgJiYgYWRhcHRlcjQuaXM4Qml0KCkgJiYgYWRhcHRlcjUuaXM4Qml0KCkg
JiYgYWRhcHRlcjYuaXM4Qml0KCkgJiYgYWRhcHRlcjcuaXM4Qml0KCkgJiYgYWRhcHRlcjguaXM4
Qml0KCkgJiYgYWRhcHRlcjkuaXM4Qml0KCkpIHsKKyAgICBpZiAoaXM4Qml0KGFkYXB0ZWRTdHJp
bmdzKSkgewogICAgICAgICBMQ2hhciogYnVmZmVyOwogICAgICAgICBSZWZQdHI8U3RyaW5nSW1w
bD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3Ro
LCBidWZmZXIpOwogICAgICAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgIExDaGFyKiByZXN1bHQg
PSBidWZmZXI7Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVz
dWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3Vs
dCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRl
cjMud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7
Ci0gICAgICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFk
YXB0ZXI0Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNS53cml0ZVRvKHJlc3VsdCk7Ci0gICAg
ICAgIHJlc3VsdCArPSBhZGFwdGVyNS5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjYud3JpdGVU
byhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjYubGVuZ3RoKCk7Ci0gICAgICAg
IGFkYXB0ZXI3LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI3Lmxl
bmd0aCgpOwotICAgICAgICBhZGFwdGVyOC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3Vs
dCArPSBhZGFwdGVyOC5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjkud3JpdGVUbyhyZXN1bHQp
OworICAgICAgICB3cml0ZUJ1ZmZlcihidWZmZXIsIGFkYXB0ZWRTdHJpbmdzKTsKIAogICAgICAg
ICByZXR1cm4gcmVzdWx0SW1wbC5yZWxlYXNlKCk7CiAgICAgfQpAQCAtODgwLDEwNSArNTM5LDIz
IEBAIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdHJ5TWFrZVN0cmluZyhTdHIKICAgICBVQ2hhciog
YnVmZmVyOwogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6
dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CiAgICAgaWYgKCFyZXN1bHRJ
bXBsKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFVDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0g
ICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5n
dGgoKTsKLSAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0
ZXIyLmxlbmd0aCgpOwotICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQg
Kz0gYWRhcHRlcjMubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQpOwotICAg
IHJlc3VsdCArPSBhZGFwdGVyNC5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNS53cml0ZVRvKHJlc3Vs
dCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI1Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI2LndyaXRl
VG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjYubGVuZ3RoKCk7Ci0gICAgYWRhcHRl
cjcud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyNy5sZW5ndGgoKTsKLSAg
ICBhZGFwdGVyOC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI4Lmxlbmd0
aCgpOwotICAgIGFkYXB0ZXI5LndyaXRlVG8ocmVzdWx0KTsKLQotICAgIHJldHVybiByZXN1bHRJ
bXBsLnJlbGVhc2UoKTsKLX0KLQotCi0vLyBDb252ZW5pZW5jZSBvbmx5LgotdGVtcGxhdGU8dHlw
ZW5hbWUgU3RyaW5nVHlwZTE+Ci1TdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcx
KQotewotICAgIHJldHVybiBTdHJpbmcoc3RyaW5nMSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMj4KLVN0cmluZyBtYWtlU3RyaW5nKFN0
cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIpCi17Ci0gICAgUmVmUHRyPFN0
cmluZ0ltcGw+IHJlc3VsdEltcGwgPSB0cnlNYWtlU3RyaW5nKHN0cmluZzEsIHN0cmluZzIpOwot
ICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gcmVzdWx0
SW1wbC5yZWxlYXNlKCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBl
bmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTM+Ci1TdHJpbmcgbWFrZVN0cmlu
ZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBz
dHJpbmczKQotewotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gdHJ5TWFrZVN0
cmluZyhzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczKTsKLSAgICBpZiAoIXJlc3VsdEltcGwpCi0g
ICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIHJlc3VsdEltcGwucmVsZWFzZSgpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVu
YW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlND4KLVN0cmluZyBtYWtlU3RyaW5n
KFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0
cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQpCi17Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJl
c3VsdEltcGwgPSB0cnlNYWtlU3RyaW5nKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMsIHN0cmlu
ZzQpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4g
cmVzdWx0SW1wbC5yZWxlYXNlKCk7Ci19CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1l
IFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTU+
Ci1TdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJp
bmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBTdHJpbmdUeXBl
NSBzdHJpbmc1KQotewotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gdHJ5TWFr
ZVN0cmluZyhzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczLCBzdHJpbmc0LCBzdHJpbmc1KTsKLSAg
ICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIHJlc3VsdElt
cGwucmVsZWFzZSgpOwotfQorICAgIHdyaXRlQnVmZmVyKGJ1ZmZlciwgYWRhcHRlZFN0cmluZ3Mp
OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIs
IHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3Ry
aW5nVHlwZTUsIHR5cGVuYW1lIFN0cmluZ1R5cGU2PgotU3RyaW5nIG1ha2VTdHJpbmcoU3RyaW5n
VHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywg
U3RyaW5nVHlwZTQgc3RyaW5nNCwgU3RyaW5nVHlwZTUgc3RyaW5nNSwgU3RyaW5nVHlwZTYgc3Ry
aW5nNikKLXsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IHRyeU1ha2VTdHJp
bmcoc3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMywgc3RyaW5nNCwgc3RyaW5nNSwgc3RyaW5nNik7
Ci0gICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICBDUkFTSCgpOwogICAgIHJldHVybiByZXN1
bHRJbXBsLnJlbGVhc2UoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5
cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5n
VHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1LCB0eXBlbmFtZSBTdHJpbmdUeXBlNiwgdHlwZW5h
bWUgU3RyaW5nVHlwZTc+Ci1TdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBT
dHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJp
bmc0LCBTdHJpbmdUeXBlNSBzdHJpbmc1LCBTdHJpbmdUeXBlNiBzdHJpbmc2LCBTdHJpbmdUeXBl
NyBzdHJpbmc3KQordGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZT4KK1N0cmluZyBtYWtlU3Ry
aW5nKFN0cmluZ1R5cGUgc3RyaW5nKQogewotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJ
bXBsID0gdHJ5TWFrZVN0cmluZyhzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczLCBzdHJpbmc0LCBz
dHJpbmc1LCBzdHJpbmc2LCBzdHJpbmc3KTsKLSAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAg
IENSQVNIKCk7Ci0gICAgcmV0dXJuIHJlc3VsdEltcGwucmVsZWFzZSgpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0
cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTUsIHR5
cGVuYW1lIFN0cmluZ1R5cGU2LCB0eXBlbmFtZSBTdHJpbmdUeXBlNywgdHlwZW5hbWUgU3RyaW5n
VHlwZTg+Ci1TdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBl
MiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBTdHJp
bmdUeXBlNSBzdHJpbmc1LCBTdHJpbmdUeXBlNiBzdHJpbmc2LCBTdHJpbmdUeXBlNyBzdHJpbmc3
LCBTdHJpbmdUeXBlOCBzdHJpbmc4KQotewotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJ
bXBsID0gdHJ5TWFrZVN0cmluZyhzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczLCBzdHJpbmc0LCBz
dHJpbmc1LCBzdHJpbmc2LCBzdHJpbmc3LCBzdHJpbmc4KTsKLSAgICBpZiAoIXJlc3VsdEltcGwp
Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIHJlc3VsdEltcGwucmVsZWFzZSgpOworICAg
IHJldHVybiBTdHJpbmcoc3RyaW5nKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlw
ZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUg
U3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1LCB0eXBlbmFtZSBTdHJpbmdUeXBlNiwg
dHlwZW5hbWUgU3RyaW5nVHlwZTcsIHR5cGVuYW1lIFN0cmluZ1R5cGU4LCB0eXBlbmFtZSBTdHJp
bmdUeXBlOT4KLVN0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5
cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQsIFN0
cmluZ1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5cGU2IHN0cmluZzYsIFN0cmluZ1R5cGU3IHN0cmlu
ZzcsIFN0cmluZ1R5cGU4IHN0cmluZzgsIFN0cmluZ1R5cGU5IHN0cmluZzkpCit0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBTdHJpbmdUeXBlcz4KK1N0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGVzLi4u
IHN0cmluZ3MpCiB7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSB0cnlNYWtl
U3RyaW5nKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMsIHN0cmluZzQsIHN0cmluZzUsIHN0cmlu
ZzYsIHN0cmluZzcsIHN0cmluZzgsIHN0cmluZzkpOworICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBy
ZXN1bHRJbXBsID0gdHJ5TWFrZVN0cmluZyhzdHJpbmdzLi4uKTsKICAgICBpZiAoIXJlc3VsdElt
cGwpCiAgICAgICAgIENSQVNIKCk7CiAgICAgcmV0dXJuIHJlc3VsdEltcGwucmVsZWFzZSgpOwpJ
bmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2
aXNpb24gMTY0NTU4KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTUgQEAKKzIwMTQtMDItMjMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAg
ICAgICBVc2UgdmFyaWFkaWMgdGVtcGxhdGVzIHRvIHJlZHVjZSB0aGUgbGluZSBjb3VudCBvZiB3
dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkyMzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0
cmluZ0NvbmNhdGVuYXRlLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNU
KToKKyAgICAgICAgQWRkIGJhc2ljIHRlc3QgZm9yIFN0cmluZ0NvbmNhdGVuYXRlLmNwcC4KKwog
MjAxNC0wMi0yMyAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IFtBU2FuXSBBZGQgSlNDOjpERkc6OnByZXBhcmVPU1JFbnRyeSgpIHRvIGlnbm9yZSBsaXN0Cklu
ZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTY0NTUwKQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTExMCw2ICsxMTAsNyBAQAogCQk3NkUxODJEQTE1NDc1NTAxMDBGMUZBREQg
LyogV2lsbFNlbmRTdWJtaXRFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3NkUxODJEOTE1NDc1NTAxMDBGMUZBREQgLyogV2lsbFNlbmRTdWJt
aXRFdmVudC5jcHAgKi87IH07CiAJCTc2RTE4MkREMTU0NzU2OTEwMEYxRkFERCAvKiBXaWxsU2Vu
ZFN1Ym1pdEV2ZW50X0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3NkUxODJEQzE1NDc1NjkxMDBGMUZBREQgLyogV2lsbFNlbmRTdWJtaXRF
dmVudF9CdW5kbGUuY3BwICovOyB9OwogCQk3NkUxODJERjE1NDc2N0U2MDBGMUZBREQgLyogYXV0
by1zdWJtaXR0aW5nLWZvcm0uaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3NkUxODJERTE1NDc1QTgzMDBGMUZBREQgLyogYXV0by1zdWJt
aXR0aW5nLWZvcm0uaHRtbCAqLzsgfTsKKwkJN0M0OTAyQTUxOEI5OEREOTAwN0Q5Mjk4IC8qIFN0
cmluZ0NvbmNhdGVuYXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDNDkwMkEzMThCOThERDkwMDdEOTI5OCAvKiBTdHJpbmdDb25jYXRlbmF0ZS5j
cHAgKi87IH07CiAJCTdDNzRENDJGMTg4MjI4RjMwMEU1RUQ1NyAvKiBTdHJpbmdWaWV3LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNzRENDJEMTg4
MjI4RjMwMEU1RUQ1NyAvKiBTdHJpbmdWaWV3LmNwcCAqLzsgfTsKIAkJN0M4RERBQUIxNzM1REVF
RTAwRUE1QUMwIC8qIENsb3NlVGhlblRlcm1pbmF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzhEREFBOTE3MzVERTFEMDBFQTVBQzAgLyogQ2xv
c2VUaGVuVGVybWluYXRlLmNwcCAqLzsgfTsKIAkJN0M5RUQ5OEIxN0ExOUY0QjAwRTREQzMzIC8q
IGF0dHJpYnV0ZWRTdHJpbmdTdHJpa2V0aHJvdWdoLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M5RUQ5OEExN0ExOUQwNjAwRTREQzMz
IC8qIGF0dHJpYnV0ZWRTdHJpbmdTdHJpa2V0aHJvdWdoLmh0bWwgKi87IH07CkBAIC00MzUsNiAr
NDM2LDcgQEAKIAkJNzZFMTgyRDkxNTQ3NTUwMTAwRjFGQUREIC8qIFdpbGxTZW5kU3VibWl0RXZl
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2lsbFNlbmRTdWJt
aXRFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc2RTE4MkRDMTU0NzU2
OTEwMEYxRkFERCAvKiBXaWxsU2VuZFN1Ym1pdEV2ZW50X0J1bmRsZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXaWxsU2VuZFN1Ym1pdEV2ZW50X0J1bmRsZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc2RTE4MkRFMTU0NzVBODMwMEYxRkFERCAv
KiBhdXRvLXN1Ym1pdHRpbmctZm9ybS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0g
ImF1dG8tc3VibWl0dGluZy1mb3JtLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3QzQ5MDJBMzE4Qjk4REQ5MDA3RDkyOTggLyogU3RyaW5nQ29uY2F0ZW5hdGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RyaW5nQ29uY2F0ZW5hdGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qzc0RDQyRDE4ODIyOEYzMDBFNUVENTcgLyog
U3RyaW5nVmlldy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJp
bmdWaWV3LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M4RERBQTkxNzM1REUx
RDAwRUE1QUMwIC8qIENsb3NlVGhlblRlcm1pbmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBD
bG9zZVRoZW5UZXJtaW5hdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzlF
RDk4QTE3QTE5RDA2MDBFNERDMzMgLyogYXR0cmlidXRlZFN0cmluZ1N0cmlrZXRocm91Z2guaHRt
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
aHRtbDsgcGF0aCA9IGF0dHJpYnV0ZWRTdHJpbmdTdHJpa2V0aHJvdWdoLmh0bWw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NjEsNiArODYzLDcgQEAKIAkJCQk5M0FCQTgwODE2RERB
QjkxMDAyREIyRkEgLyogU3RyaW5nSGFzaGVyLmNwcCAqLywKIAkJCQkyNkYxQjQ0MzE1Q0E0MzRG
MDBEMUU0QkYgLyogU3RyaW5nSW1wbC5jcHAgKi8sCiAJCQkJQzAxMzYzQzcxM0MzOTk3MzAwRUYz
OTY0IC8qIFN0cmluZ09wZXJhdG9ycy5jcHAgKi8sCisJCQkJN0M0OTAyQTMxOEI5OEREOTAwN0Q5
Mjk4IC8qIFN0cmluZ0NvbmNhdGVuYXRlLmNwcCAqLywKIAkJCQk3Qzc0RDQyRDE4ODIyOEYzMDBF
NUVENTcgLyogU3RyaW5nVmlldy5jcHAgKi8sCiAJCQkJMEJDRDg1NjkxNDg1Qzk4QjAwRUEyMDAz
IC8qIFRlbXBvcmFyeUNoYW5nZS5jcHAgKi8sCiAJCQkJQkM1NUY1RjgxNEFENzhFRTAwNDg0QkUx
IC8qIFZlY3Rvci5jcHAgKi8sCkBAIC0xMTU3LDYgKzExNjAsNyBAQAogCQkJCUE3QTk2NkRCMTQw
RUNDQzgwMDVFRjlCNCAvKiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTE0MkIyNzExNTE3Qzg4QjAwQzMyQjE5IC8qIENvbnRleHRNZW51Q2FuQ29w
eVVSTC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUY2RjNGMjkxMTMzNDJGRUIwMEE2QkYxOSAvKiBD
b29raWVNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdDNDkwMkE1MThCOThERDkwMDdE
OTI5OCAvKiBTdHJpbmdDb25jYXRlbmF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUJDM0RF
RjE4OTlCRTZEMDA0RjA2MjYgLyogTmF2aWdhdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTI2
QTJDNzJGMTVFMkU3M0MwMDVCMUExNCAvKiBDU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTI5QUI4QUExMTY0QzczNTgwMEQ0OUJFQyAvKiBDdXN0b21Qcm90b2NvbHNUZXN0Lm1tIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdDb25j
YXRlbmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
U3RyaW5nQ29uY2F0ZW5hdGUuY3BwCShyZXZpc2lvbiAwKQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvU3RyaW5nQ29uY2F0ZW5hdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJX
VEZTdHJpbmdVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0
ZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgVGVzdFdl
YktpdEFQSSB7CisKK1RFU1QoV1RGLCBTdHJpbmdDb25jYXRlbmF0ZSkKK3sKKyAgICBTdHJpbmcg
c3RyaW5nKCJTdHJpbmciKTsKKyAgICBBdG9taWNTdHJpbmcgYXRvbWljU3RyaW5nKCJBdG9taWNT
dHJpbmciKTsKKyAgICBBU0NJSUxpdGVyYWwgbGl0ZXJhbCgiQVNDSUlMaXRlcmFsIik7CisKKyAg
ICBBU1NFUlRfRVEoImFiIiwgbWFrZVN0cmluZygiYSIsICJiIikpOworICAgIEFTU0VSVF9FUSgi
YWIiLCBtYWtlU3RyaW5nKCdhJywgJ2InKSk7CisgICAgQVNTRVJUX0VRKCJhYiIsIG1ha2VTdHJp
bmcoImEiLCAnYicpKTsKKyAgICBBU1NFUlRfRVEoImFiIiwgbWFrZVN0cmluZygnYScsICJiIikp
OworCisgICAgQVNTRVJUX0VRKCJTdHJpbmdhIiwgbWFrZVN0cmluZyhzdHJpbmcsICJhIikpOwor
ICAgIEFTU0VSVF9FUSgiQXRvbWljU3RyaW5nYSIsIG1ha2VTdHJpbmcoYXRvbWljU3RyaW5nLCAi
YSIpKTsKKyAgICBBU1NFUlRfRVEoIkFTQ0lJTGl0ZXJhbGEiLCBtYWtlU3RyaW5nKGxpdGVyYWws
ICJhIikpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>225013</attachid>
            <date>2014-02-23 13:01:28 -0800</date>
            <delta_ts>2014-02-23 13:01:57 -0800</delta_ts>
            <desc>Just the new code</desc>
            <filename>JustTheNew.cpp</filename>
            <type>text/plain</type>
            <size>3762</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">bmFtZXNwYWNlIFRyeU1ha2VTdHJpbmdEZXRhaWxzIHsKCmlubGluZSB2b2lkIHN1bVdpdGhPdmVy
Zmxvd0ltcGwodW5zaWduZWQmLCBib29sJikKewogICAgLy8gRW5kIG9mIHRoZSBsaW5lLgp9Cgp0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdGVkU3RyaW5nLCB0eXBlbmFtZS4uLiBBZGFwdGVkU3RyaW5n
UmVzdD4KaW5saW5lIHZvaWQgc3VtV2l0aE92ZXJmbG93SW1wbCh1bnNpZ25lZCYgdG90YWwsIGJv
b2wmIG92ZXJmbG93LCBBZGFwdGVkU3RyaW5nIGFkYXB0ZWRTdHJpbmcsIEFkYXB0ZWRTdHJpbmdS
ZXN0Li4uIHJlc3QpCnsKICAgIHVuc2lnbmVkIG9sZFRvdGFsID0gdG90YWw7CiAgICB0b3RhbCA9
IG9sZFRvdGFsICsgYWRhcHRlZFN0cmluZy5sZW5ndGgoKTsKICAgIGlmICh0b3RhbCA8IG9sZFRv
dGFsKSB7CiAgICAgICAgb3ZlcmZsb3cgPSB0cnVlOwogICAgICAgIHJldHVybjsKICAgIH0KCiAg
ICBzdW1XaXRoT3ZlcmZsb3dJbXBsKHRvdGFsLCBvdmVyZmxvdywgcmVzdC4uLik7Cn0KCnRlbXBs
YXRlPHR5cGVuYW1lIFR1cGxlLCBzaXplX3QuLi4gSW5kZXg+CmlubGluZSB2b2lkIHN1bVdpdGhP
dmVyZmxvdyh1bnNpZ25lZCYgdG90YWwsIGJvb2wmIG92ZXJmbG93LCBUdXBsZSYmIHN0cmluZ3Ms
IHN0ZDo6aW5kZXhfc2VxdWVuY2U8SW5kZXguLi4+KQp7CiAgICBzdW1XaXRoT3ZlcmZsb3dJbXBs
KHRvdGFsLCBvdmVyZmxvdywgc3RkOjpnZXQ8SW5kZXg+KHN0cmluZ3MpLi4uKTsKfQoKdGVtcGxh
dGU8dHlwZW5hbWUgVHVwbGUsIHR5cGVuYW1lIEluZGljaWVzID0gc3RkOjptYWtlX2luZGV4X3Nl
cXVlbmNlPHN0ZDo6dHVwbGVfc2l6ZTxUdXBsZT46OnZhbHVlPj4KaW5saW5lIHZvaWQgc3VtV2l0
aE92ZXJmbG93KHVuc2lnbmVkJiB0b3RhbCwgYm9vbCYgb3ZlcmZsb3csIFR1cGxlIHN0cmluZ3Mp
CnsKICAgIHN1bVdpdGhPdmVyZmxvdyh0b3RhbCwgb3ZlcmZsb3csIHN0ZDo6Zm9yd2FyZDxUdXBs
ZT4oc3RyaW5ncyksIEluZGljaWVzKCkpOwp9CgoKaW5saW5lIGJvb2wgaXM4Qml0SW1wbCgpCnsK
ICAgIC8vIEVuZCBvZiB0aGUgbGluZS4KICAgIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdGVkU3RyaW5nLCB0eXBlbmFtZS4uLiBBZGFwdGVkU3RyaW5nUmVzdD4KaW5saW5l
IGJvb2wgaXM4Qml0SW1wbChBZGFwdGVkU3RyaW5nIGFkYXB0ZWRTdHJpbmcsIEFkYXB0ZWRTdHJp
bmdSZXN0Li4uIHJlc3QpCnsKICAgIHJldHVybiBhZGFwdGVkU3RyaW5nLmlzOEJpdCgpICYmIGlz
OEJpdEltcGwocmVzdC4uLik7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFR1cGxlLCBzaXplX3QuLi4g
SW5kZXg+CmlubGluZSBib29sIGlzOEJpdChUdXBsZSYmIHN0cmluZ3MsIHN0ZDo6aW5kZXhfc2Vx
dWVuY2U8SW5kZXguLi4+KQp7CiAgICByZXR1cm4gaXM4Qml0SW1wbChzdGQ6OmdldDxJbmRleD4o
c3RyaW5ncykuLi4pOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUdXBsZSwgdHlwZW5hbWUgSW5kaWNp
ZXMgPSBzdGQ6Om1ha2VfaW5kZXhfc2VxdWVuY2U8c3RkOjp0dXBsZV9zaXplPFR1cGxlPjo6dmFs
dWU+PgppbmxpbmUgYm9vbCBpczhCaXQoVHVwbGUgc3RyaW5ncykKewogICAgcmV0dXJuIGlzOEJp
dChzdGQ6OmZvcndhcmQ8VHVwbGU+KHN0cmluZ3MpLCBJbmRpY2llcygpKTsKfQoKCnRlbXBsYXRl
PHR5cGVuYW1lIEJ1ZmZlclR5cGU+CmlubGluZSB2b2lkIHdyaXRlQnVmZmVySW1wbChCdWZmZXJU
eXBlKQp7CiAgICAvLyBFbmQgb2YgdGhlIGxpbmUuCn0KCnRlbXBsYXRlPHR5cGVuYW1lIEJ1ZmZl
clR5cGUsIHR5cGVuYW1lIEFkYXB0ZWRTdHJpbmcsIHR5cGVuYW1lLi4uIEFkYXB0ZWRTdHJpbmdS
ZXN0PgppbmxpbmUgdm9pZCB3cml0ZUJ1ZmZlckltcGwoQnVmZmVyVHlwZSBidWZmZXIsIEFkYXB0
ZWRTdHJpbmcgYWRhcHRlZFN0cmluZywgQWRhcHRlZFN0cmluZ1Jlc3QuLi4gcmVzdCkKewogICAg
YWRhcHRlZFN0cmluZy53cml0ZVRvKGJ1ZmZlcik7CiAgICBidWZmZXIgKz0gYWRhcHRlZFN0cmlu
Zy5sZW5ndGgoKTsKCiAgICB3cml0ZUJ1ZmZlckltcGwoYnVmZmVyLCByZXN0Li4uKTsKfQoKdGVt
cGxhdGU8dHlwZW5hbWUgQnVmZmVyVHlwZSwgdHlwZW5hbWUgVHVwbGUsIHNpemVfdC4uLiBJbmRl
eD4KaW5saW5lIHZvaWQgd3JpdGVCdWZmZXIoQnVmZmVyVHlwZSBidWZmZXIsIFR1cGxlJiYgc3Ry
aW5ncywgc3RkOjppbmRleF9zZXF1ZW5jZTxJbmRleC4uLj4pCnsKICAgIHdyaXRlQnVmZmVySW1w
bChidWZmZXIsIHN0ZDo6Z2V0PEluZGV4PihzdHJpbmdzKS4uLik7Cn0KCnRlbXBsYXRlPHR5cGVu
YW1lIEJ1ZmZlclR5cGUsIHR5cGVuYW1lIFR1cGxlLCB0eXBlbmFtZSBJbmRpY2llcyA9IHN0ZDo6
bWFrZV9pbmRleF9zZXF1ZW5jZTxzdGQ6OnR1cGxlX3NpemU8VHVwbGU+Ojp2YWx1ZT4+CmlubGlu
ZSB2b2lkIHdyaXRlQnVmZmVyKEJ1ZmZlclR5cGUgYnVmZmVyLCBUdXBsZSBzdHJpbmdzKQp7CiAg
ICB3cml0ZUJ1ZmZlcihidWZmZXIsIHN0ZDo6Zm9yd2FyZDxUdXBsZT4oc3RyaW5ncyksIEluZGlj
aWVzKCkpOwp9Cgp9IC8vIG5hbWVzcGFjZSBUcnlNYWtlU3RyaW5nRGV0YWlscwoKdGVtcGxhdGU8
dHlwZW5hbWUuLi4gU3RyaW5nVHlwZXM+ClBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdHJ5TWFrZVN0
cmluZyhTdHJpbmdUeXBlcy4uLiBzdHJpbmdzKQp7CiAgICB1c2luZyBuYW1lc3BhY2UgVHJ5TWFr
ZVN0cmluZ0RldGFpbHM7CgogICAgc3RkOjp0dXBsZTxTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdU
eXBlcz4uLi4+IGFkYXB0ZWRTdHJpbmdzKHN0cmluZ3MuLi4pOwoKICAgIGJvb2wgb3ZlcmZsb3cg
PSBmYWxzZTsKICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CiAgICBzdW1XaXRoT3ZlcmZsb3cobGVu
Z3RoLCBvdmVyZmxvdywgYWRhcHRlZFN0cmluZ3MpOwogICAgaWYgKG92ZXJmbG93KQogICAgICAg
IHJldHVybiBudWxscHRyOwoKICAgIGlmIChpczhCaXQoYWRhcHRlZFN0cmluZ3MpKSB7CiAgICAg
ICAgTENoYXIqIGJ1ZmZlcjsKICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9
IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwogICAg
ICAgIGlmICghcmVzdWx0SW1wbCkKICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CgogICAgICAg
IHdyaXRlQnVmZmVyKGJ1ZmZlciwgYWRhcHRlZFN0cmluZ3MpOwoKICAgICAgICByZXR1cm4gcmVz
dWx0SW1wbC5yZWxlYXNlKCk7CiAgICB9CgogICAgVUNoYXIqIGJ1ZmZlcjsKICAgIFJlZlB0cjxT
dHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZChsZW5ndGgsIGJ1ZmZlcik7CiAgICBpZiAoIXJlc3VsdEltcGwpCiAgICAgICAgcmV0dXJuIG51
bGxwdHI7CgogICAgd3JpdGVCdWZmZXIoYnVmZmVyLCBhZGFwdGVkU3RyaW5ncyk7CgogICAgcmV0
dXJuIHJlc3VsdEltcGwucmVsZWFzZSgpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBl
PgpTdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlIHN0cmluZykKewogICAgcmV0dXJuIFN0cmlu
ZyhzdHJpbmcpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBTdHJpbmdUeXBlcz4KU3RyaW5nIG1h
a2VTdHJpbmcoU3RyaW5nVHlwZXMuLi4gc3RyaW5ncykKewogICAgUmVmUHRyPFN0cmluZ0ltcGw+
IHJlc3VsdEltcGwgPSB0cnlNYWtlU3RyaW5nKHN0cmluZ3MuLi4pOwogICAgaWYgKCFyZXN1bHRJ
bXBsKQogICAgICAgIENSQVNIKCk7CiAgICByZXR1cm4gcmVzdWx0SW1wbC5yZWxlYXNlKCk7Cn0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225523</attachid>
            <date>2014-02-28 20:06:04 -0800</date>
            <delta_ts>2016-03-13 18:47:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-129235-20140228200602.patch</filename>
            <type>text/plain</type>
            <size>26820</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNjQ5MDUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE0LTAyLTI4ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgVXNlIHZhcmlhZGljIHRlbXBsYXRlcyB0byByZWR1Y2UgdGhl
IGxpbmUgY291bnQgb2Ygd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MjM1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdDb25j
YXRlbmF0ZS5oOgorICAgICAgICAoV1RGOjpUcnlNYWtlU3RyaW5nRGV0YWlsczo6c3VtV2l0aE92
ZXJmbG93KToKKyAgICAgICAgKFdURjo6VHJ5TWFrZVN0cmluZ0RldGFpbHM6OmlzOEJpdCk6Cisg
ICAgICAgIChXVEY6OlRyeU1ha2VTdHJpbmdEZXRhaWxzOjp3cml0ZUJ1ZmZlcik6CisgICAgICAg
IEhlbHBlcnMgdG8gcmVjdXJzaXZlbHkgcGVyZm9ybSB0aGUgbmVlZGVkIG9wZXJhdGlvbnMgb24g
b24gZWFjaCBzdHJpbmcgaW4gdGhlIHNlcmllcy4KKworICAgICAgICAoV1RGOjpUcnlNYWtlU3Ry
aW5nRGV0YWlsczo6dHJ5TWFrZVN0cmluZ0ltcGwpOgorICAgICAgICAoV1RGOjpUcnlNYWtlU3Ry
aW5nRGV0YWlsczo6dHJ5TWFrZVN0cmluZ1R1cGxlKToKKyAgICAgICAgKFdURjo6dHJ5TWFrZVN0
cmluZyk6CisgICAgICAgIChXVEY6Om1ha2VTdHJpbmcpOgorICAgICAgICBDb252ZXJ0IHRyeU1h
a2VTdHJpbmcgYW5kIG1ha2VTdHJpbmcgaW50byB2YXJpYWRpYyB0ZW1wbGF0ZSBmdW5jdGlvbnMg
dG8gcmVkdWNlIGNvZGUKKyAgICAgICAgZHVwbGljYXRpb24uCisKIDIwMTQtMDItMjYgIEdhdmlu
IEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIEZhc3RNYWxs
b2Mgc2hvdWxkIHVzZSB2bV9wYWdlX3NoaWZ0IGludGVhZCBvZiBQQUdFX1NISUZULgpJbmRleDog
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaAkocmV2aXNpb24gMTY0OTAyKQor
KysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MSw3ICs2MSwxMCBAQCBwdWJsaWM6CiAgICAgICAgICpkZXN0aW5hdGlvbiA9IG1fYnVm
ZmVyOwogICAgIH0KIAotICAgIHZvaWQgd3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pIHsgKmRl
c3RpbmF0aW9uID0gbV9idWZmZXI7IH0KKyAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0
aW9uKQorICAgIHsKKyAgICAgICAgKmRlc3RpbmF0aW9uID0gbV9idWZmZXI7CisgICAgfQogCiBw
cml2YXRlOgogICAgIHVuc2lnbmVkIGNoYXIgbV9idWZmZXI7CkBAIC04NCw3ICs4NywxMCBAQCBw
dWJsaWM6CiAgICAgICAgICpkZXN0aW5hdGlvbiA9IG1fYnVmZmVyOwogICAgIH0KIAotICAgIHZv
aWQgd3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pIHsgKmRlc3RpbmF0aW9uID0gbV9idWZmZXI7
IH0KKyAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAg
KmRlc3RpbmF0aW9uID0gbV9idWZmZXI7CisgICAgfQogCiBwcml2YXRlOgogICAgIExDaGFyIG1f
YnVmZmVyOwpAQCAtMTA4LDcgKzExNCwxMCBAQCBwdWJsaWM6CiAgICAgICAgICpkZXN0aW5hdGlv
biA9IHN0YXRpY19jYXN0PExDaGFyPihtX2J1ZmZlcik7CiAgICAgfQogCi0gICAgdm9pZCB3cml0
ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikgeyAqZGVzdGluYXRpb24gPSBtX2J1ZmZlcjsgfQorICAg
IHZvaWQgd3JpdGVUbyhVQ2hhciogZGVzdGluYXRpb24pCisgICAgeworICAgICAgICAqZGVzdGlu
YXRpb24gPSBtX2J1ZmZlcjsKKyAgICB9CiAKIHByaXZhdGU6CiAgICAgVUNoYXIgbV9idWZmZXI7
CkBAIC00MTYsNDYzICs0MjUsNjYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmdUeXBlQWRhcHRlcjxT
dHJpbmc+IG1fYWRhcHRlcjsKIH07CiAKLWlubGluZSB2b2lkIHN1bVdpdGhPdmVyZmxvdyh1bnNp
Z25lZCYgdG90YWwsIHVuc2lnbmVkIGFkZGVuZCwgYm9vbCYgb3ZlcmZsb3cpCi17Ci0gICAgdW5z
aWduZWQgb2xkVG90YWwgPSB0b3RhbDsKLSAgICB0b3RhbCA9IG9sZFRvdGFsICsgYWRkZW5kOwot
ICAgIGlmICh0b3RhbCA8IG9sZFRvdGFsKQotICAgICAgICBvdmVyZmxvdyA9IHRydWU7Ci19Citu
YW1lc3BhY2UgVHJ5TWFrZVN0cmluZ0RldGFpbHMgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBTdHJp
bmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTI+Ci1QYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHRy
eU1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMikKK2lu
bGluZSB2b2lkIHN1bVdpdGhPdmVyZmxvdyh1bnNpZ25lZCYsIGJvb2wmKQogewotICAgIFN0cmlu
Z1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBhZGFwdGVyMShzdHJpbmcxKTsKLSAgICBTdHJpbmdU
eXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRhcHRlcjIoc3RyaW5nMik7Ci0KLSAgICBib29sIG92
ZXJmbG93ID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYWRhcHRlcjEubGVuZ3RoKCk7
Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjIubGVuZ3RoKCksIG92ZXJmbG93
KTsKLSAgICBpZiAob3ZlcmZsb3cpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGFkYXB0
ZXIxLmlzOEJpdCgpICYmIGFkYXB0ZXIyLmlzOEJpdCgpKSB7Ci0gICAgICAgIExDaGFyKiBidWZm
ZXI7Ci0gICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6
dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgICAgIGlmICghcmVz
dWx0SW1wbCkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIExDaGFyKiByZXN1bHQg
PSBidWZmZXI7Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVz
dWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3Vs
dCk7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdEltcGwucmVsZWFzZSgpOwotICAgIH0KLQotICAg
IFVDaGFyKiBidWZmZXI7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJp
bmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAo
IXJlc3VsdEltcGwpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgVUNoYXIqIHJlc3VsdCA9IGJ1
ZmZlcjsKLSAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0
ZXIxLmxlbmd0aCgpOwotICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLQotICAgIHJldHVy
biByZXN1bHRJbXBsLnJlbGVhc2UoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlw
ZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMz4KLVBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gdHJ5TWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdU
eXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczKQordGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRlZFN0cmluZywgdHlwZW5hbWUuLi4gQWRhcHRlZFN0cmluZ1Jlc3Q+CitpbmxpbmUgdm9pZCBz
dW1XaXRoT3ZlcmZsb3codW5zaWduZWQmIHRvdGFsLCBib29sJiBvdmVyZmxvdywgQWRhcHRlZFN0
cmluZyBhZGFwdGVkU3RyaW5nLCBBZGFwdGVkU3RyaW5nUmVzdC4uLiByZXN0KQogewotICAgIFN0
cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBhZGFwdGVyMShzdHJpbmcxKTsKLSAgICBTdHJp
bmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRhcHRlcjIoc3RyaW5nMik7Ci0gICAgU3RyaW5n
VHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTM+IGFkYXB0ZXIzKHN0cmluZzMpOwotCi0gICAgYm9vbCBv
dmVyZmxvdyA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIxLmxlbmd0aCgp
OwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIyLmxlbmd0aCgpLCBvdmVyZmxv
dyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjMubGVuZ3RoKCksIG92ZXJm
bG93KTsKLSAgICBpZiAob3ZlcmZsb3cpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGFk
YXB0ZXIxLmlzOEJpdCgpICYmIGFkYXB0ZXIyLmlzOEJpdCgpICYmIGFkYXB0ZXIzLmlzOEJpdCgp
KSB7Ci0gICAgICAgIExDaGFyKiBidWZmZXI7Ci0gICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBy
ZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1
ZmZlcik7Ci0gICAgICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgICAgIHJldHVybiAwOwot
Ci0gICAgICAgIExDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRl
VG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgICAg
ICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMi5s
ZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgICAgIHJl
dHVybiByZXN1bHRJbXBsLnJlbGVhc2UoKTsKKyAgICB1bnNpZ25lZCBvbGRUb3RhbCA9IHRvdGFs
OworICAgIHRvdGFsID0gb2xkVG90YWwgKyBhZGFwdGVkU3RyaW5nLmxlbmd0aCgpOworICAgIGlm
ICh0b3RhbCA8IG9sZFRvdGFsKSB7CisgICAgICAgIG92ZXJmbG93ID0gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIFVDaGFyKiBidWZmZXIgPSAwOwotICAgIFJlZlB0cjxTdHJp
bmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChs
ZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIFVDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1
bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMi53cml0
ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgIGFkYXB0
ZXIzLndyaXRlVG8ocmVzdWx0KTsKLQotICAgIHJldHVybiByZXN1bHRJbXBsLnJlbGVhc2UoKTsK
KyAgICBzdW1XaXRoT3ZlcmZsb3codG90YWwsIG92ZXJmbG93LCByZXN0Li4uKTsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFt
ZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQ+Ci1QYXNzUmVmUHRyPFN0cmluZ0lt
cGw+IHRyeU1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5n
MiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3RyaW5nNCkKK2lubGluZSBib29s
IGlzOEJpdCgpCiB7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTE+IGFkYXB0ZXIx
KHN0cmluZzEpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFwdGVyMihz
dHJpbmcyKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMz4gYWRhcHRlcjMoc3Ry
aW5nMyk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTQ+IGFkYXB0ZXI0KHN0cmlu
ZzQpOwotCi0gICAgYm9vbCBvdmVyZmxvdyA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIy
Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRl
cjMubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFw
dGVyNC5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIGlmIChvdmVyZmxvdykKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBpZiAoYWRhcHRlcjEuaXM4Qml0KCkgJiYgYWRhcHRlcjIuaXM4Qml0KCkg
JiYgYWRhcHRlcjMuaXM4Qml0KCkgJiYgYWRhcHRlcjQuaXM4Qml0KCkpIHsKLSAgICAgICAgTENo
YXIqIGJ1ZmZlcjsKLSAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJp
bmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAg
aWYgKCFyZXN1bHRJbXBsKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgTENoYXIq
IHJlc3VsdCA9IGJ1ZmZlcjsKLSAgICAgICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAg
ICAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIyLndyaXRl
VG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgICAg
ICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMy5s
ZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgICAgIHJl
dHVybiByZXN1bHRJbXBsLnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBVQ2hhciogYnVmZmVyOwot
ICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRl
VW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFyZXN1bHRJbXBsKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIFVDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAgYWRhcHRl
cjEud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAg
ICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0
aCgpOwotICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRl
cjMubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQpOwotCi0gICAgcmV0dXJu
IHJlc3VsdEltcGwucmVsZWFzZSgpOworICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmlu
Z1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTU+Ci1QYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IHRyeU1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3Ry
aW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3RyaW5n
NCwgU3RyaW5nVHlwZTUgc3RyaW5nNSkKK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0ZWRTdHJpbmcs
IHR5cGVuYW1lLi4uIEFkYXB0ZWRTdHJpbmdSZXN0PgoraW5saW5lIGJvb2wgaXM4Qml0KEFkYXB0
ZWRTdHJpbmcgYWRhcHRlZFN0cmluZywgQWRhcHRlZFN0cmluZ1Jlc3QuLi4gcmVzdCkKIHsKLSAg
ICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3RyaW5nMSk7Ci0gICAg
U3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKHN0cmluZzIpOwotICAgIFN0
cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUzPiBhZGFwdGVyMyhzdHJpbmczKTsKLSAgICBTdHJp
bmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlND4gYWRhcHRlcjQoc3RyaW5nNCk7Ci0gICAgU3RyaW5n
VHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTU+IGFkYXB0ZXI1KHN0cmluZzUpOwotCi0gICAgYm9vbCBv
dmVyZmxvdyA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIxLmxlbmd0aCgp
OwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIyLmxlbmd0aCgpLCBvdmVyZmxv
dyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjMubGVuZ3RoKCksIG92ZXJm
bG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNC5sZW5ndGgoKSwgb3Zl
cmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI1Lmxlbmd0aCgpLCBv
dmVyZmxvdyk7Ci0gICAgaWYgKG92ZXJmbG93KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlm
IChhZGFwdGVyMS5pczhCaXQoKSAmJiBhZGFwdGVyMi5pczhCaXQoKSAmJiBhZGFwdGVyMy5pczhC
aXQoKSAmJiBhZGFwdGVyNC5pczhCaXQoKSAmJiBhZGFwdGVyNS5pczhCaXQoKSkgewotICAgICAg
ICBMQ2hhciogYnVmZmVyOwotICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9
IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAg
ICAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBM
Q2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgICAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7
Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjIu
d3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0g
ICAgICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0
ZXIzLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAg
IHJlc3VsdCArPSBhZGFwdGVyNC5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjUud3JpdGVUbyhy
ZXN1bHQpOwotCi0gICAgICAgIHJldHVybiByZXN1bHRJbXBsLnJlbGVhc2UoKTsKLSAgICB9Ci0K
LSAgICBVQ2hhciogYnVmZmVyOwotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0g
U3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAg
aWYgKCFyZXN1bHRJbXBsKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFVDaGFyKiByZXN1bHQg
PSBidWZmZXI7Ci0gICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBh
ZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVz
dWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsK
LSAgICByZXN1bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjQud3JpdGVUbyhy
ZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyNC5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNS53
cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0SW1wbC5yZWxlYXNlKCk7CisgICAg
cmV0dXJuIGFkYXB0ZWRTdHJpbmcuaXM4Qml0KCkgJiYgaXM4Qml0KHJlc3QuLi4pOwogfQogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVu
YW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlw
ZTUsIHR5cGVuYW1lIFN0cmluZ1R5cGU2PgotUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB0cnlNYWtl
U3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5
cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0
cmluZ1R5cGU2IHN0cmluZzYpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCdWZmZXJUeXBlPgoraW5saW5l
IHZvaWQgd3JpdGVCdWZmZXIoQnVmZmVyVHlwZSkKIHsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxT
dHJpbmdUeXBlMT4gYWRhcHRlcjEoc3RyaW5nMSk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3Ry
aW5nVHlwZTI+IGFkYXB0ZXIyKHN0cmluZzIpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmlu
Z1R5cGUzPiBhZGFwdGVyMyhzdHJpbmczKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdU
eXBlND4gYWRhcHRlcjQoc3RyaW5nNCk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlw
ZTU+IGFkYXB0ZXI1KHN0cmluZzUpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU2
PiBhZGFwdGVyNihzdHJpbmc2KTsKLQotICAgIGJvb2wgb3ZlcmZsb3cgPSBmYWxzZTsKLSAgICB1
bnNpZ25lZCBsZW5ndGggPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBzdW1XaXRoT3ZlcmZsb3co
bGVuZ3RoLCBhZGFwdGVyMi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxv
dyhsZW5ndGgsIGFkYXB0ZXIzLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJm
bG93KGxlbmd0aCwgYWRhcHRlcjQubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3Zl
cmZsb3cobGVuZ3RoLCBhZGFwdGVyNS5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhP
dmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI2Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgaWYgKG92
ZXJmbG93KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChhZGFwdGVyMS5pczhCaXQoKSAm
JiBhZGFwdGVyMi5pczhCaXQoKSAmJiBhZGFwdGVyMy5pczhCaXQoKSAmJiBhZGFwdGVyNC5pczhC
aXQoKSAmJiBhZGFwdGVyNS5pczhCaXQoKSAmJiBhZGFwdGVyNi5pczhCaXQoKSkgewotICAgICAg
ICBMQ2hhciogYnVmZmVyOwotICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9
IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAg
ICAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBM
Q2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgICAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7
Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjIu
d3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0g
ICAgICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0
ZXIzLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAg
IHJlc3VsdCArPSBhZGFwdGVyNC5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjUud3JpdGVUbyhy
ZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjUubGVuZ3RoKCk7Ci0gICAgICAgIGFk
YXB0ZXI2LndyaXRlVG8ocmVzdWx0KTsKLQotICAgICAgICByZXR1cm4gcmVzdWx0SW1wbC5yZWxl
YXNlKCk7ICAgICAgICAKLSAgICB9Ci0KLSAgICBVQ2hhciogYnVmZmVyOwotICAgIFJlZlB0cjxT
dHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIFVDaGFyKiByZXN1bHQgPSBidWZmZXI7Ci0gICAgYWRhcHRlcjEud3JpdGVUbyhy
ZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBhZGFwdGVyMi53
cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIyLmxlbmd0aCgpOwotICAgIGFk
YXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7
Ci0gICAgYWRhcHRlcjQud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyNC5s
ZW5ndGgoKTsKLSAgICBhZGFwdGVyNS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFk
YXB0ZXI1Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI2LndyaXRlVG8ocmVzdWx0KTsKLQotICAgIHJl
dHVybiByZXN1bHRJbXBsLnJlbGVhc2UoKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5n
VHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5h
bWUgU3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1LCB0eXBlbmFtZSBTdHJpbmdUeXBl
NiwgdHlwZW5hbWUgU3RyaW5nVHlwZTc+Ci1QYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHRyeU1ha2VT
dHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlw
ZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3RyaW5nNCwgU3RyaW5nVHlwZTUgc3RyaW5nNSwgU3Ry
aW5nVHlwZTYgc3RyaW5nNiwgU3RyaW5nVHlwZTcgc3RyaW5nNykKLXsKLSAgICBTdHJpbmdUeXBl
QWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3RyaW5nMSk7Ci0gICAgU3RyaW5nVHlwZUFk
YXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKHN0cmluZzIpOwotICAgIFN0cmluZ1R5cGVBZGFw
dGVyPFN0cmluZ1R5cGUzPiBhZGFwdGVyMyhzdHJpbmczKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRl
cjxTdHJpbmdUeXBlND4gYWRhcHRlcjQoc3RyaW5nNCk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8
U3RyaW5nVHlwZTU+IGFkYXB0ZXI1KHN0cmluZzUpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0
cmluZ1R5cGU2PiBhZGFwdGVyNihzdHJpbmc2KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJp
bmdUeXBlNz4gYWRhcHRlcjcoc3RyaW5nNyk7Ci0KLSAgICBib29sIG92ZXJmbG93ID0gZmFsc2U7
Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgc3VtV2l0aE92
ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjIubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRo
T3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyMy5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdp
dGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI0Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3Vt
V2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjUubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBz
dW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAg
IHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI3Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0g
ICAgaWYgKG92ZXJmbG93KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChhZGFwdGVyMS5p
czhCaXQoKSAmJiBhZGFwdGVyMi5pczhCaXQoKSAmJiBhZGFwdGVyMy5pczhCaXQoKSAmJiBhZGFw
dGVyNC5pczhCaXQoKSAmJiBhZGFwdGVyNS5pczhCaXQoKSAmJiBhZGFwdGVyNi5pczhCaXQoKSAm
JiBhZGFwdGVyNy5pczhCaXQoKSkgewotICAgICAgICBMQ2hhciogYnVmZmVyOwotICAgICAgICBS
ZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5p
dGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgICAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAg
ICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBMQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAg
ICAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVy
MS5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICBy
ZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVz
dWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgICAgICBhZGFw
dGVyNC53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNC5sZW5ndGgo
KTsKLSAgICAgICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0g
YWRhcHRlcjUubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI2LndyaXRlVG8ocmVzdWx0KTsKLSAg
ICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI2Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNy53cml0
ZVRvKHJlc3VsdCk7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdEltcGwucmVsZWFzZSgpOwotICAg
IH0KLQotICAgIFVDaGFyKiBidWZmZXI7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdElt
cGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsK
LSAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgVUNoYXIqIHJl
c3VsdCA9IGJ1ZmZlcjsKLSAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0
ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAg
ICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1
bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNC53cml0
ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI0Lmxlbmd0aCgpOwotICAgIGFkYXB0
ZXI1LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjUubGVuZ3RoKCk7Ci0g
ICAgYWRhcHRlcjYud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyNi5sZW5n
dGgoKTsKLSAgICBhZGFwdGVyNy53cml0ZVRvKHJlc3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0
SW1wbC5yZWxlYXNlKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBl
bmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5
cGU0LCB0eXBlbmFtZSBTdHJpbmdUeXBlNSwgdHlwZW5hbWUgU3RyaW5nVHlwZTYsIHR5cGVuYW1l
IFN0cmluZ1R5cGU3LCB0eXBlbmFtZSBTdHJpbmdUeXBlOD4KLVBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gdHJ5TWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcy
LCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBTdHJpbmdUeXBlNSBz
dHJpbmc1LCBTdHJpbmdUeXBlNiBzdHJpbmc2LCBTdHJpbmdUeXBlNyBzdHJpbmc3LCBTdHJpbmdU
eXBlOCBzdHJpbmc4KQordGVtcGxhdGU8dHlwZW5hbWUgQnVmZmVyVHlwZSwgdHlwZW5hbWUgQWRh
cHRlZFN0cmluZywgdHlwZW5hbWUuLi4gQWRhcHRlZFN0cmluZ1Jlc3Q+CitpbmxpbmUgdm9pZCB3
cml0ZUJ1ZmZlcihCdWZmZXJUeXBlIGJ1ZmZlciwgQWRhcHRlZFN0cmluZyBhZGFwdGVkU3RyaW5n
LCBBZGFwdGVkU3RyaW5nUmVzdC4uLiByZXN0KQogewotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0
cmluZ1R5cGUxPiBhZGFwdGVyMShzdHJpbmcxKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJp
bmdUeXBlMj4gYWRhcHRlcjIoc3RyaW5nMik7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5n
VHlwZTM+IGFkYXB0ZXIzKHN0cmluZzMpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5
cGU0PiBhZGFwdGVyNChzdHJpbmc0KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBl
NT4gYWRhcHRlcjUoc3RyaW5nNSk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTY+
IGFkYXB0ZXI2KHN0cmluZzYpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGU3PiBh
ZGFwdGVyNyhzdHJpbmc3KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlOD4gYWRh
cHRlcjgoc3RyaW5nOCk7Ci0KLSAgICBib29sIG92ZXJmbG93ID0gZmFsc2U7Ci0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0
aCwgYWRhcHRlcjIubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZsb3cobGVu
Z3RoLCBhZGFwdGVyMy5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVyZmxvdyhs
ZW5ndGgsIGFkYXB0ZXI0Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92ZXJmbG93
KGxlbmd0aCwgYWRhcHRlcjUubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRoT3ZlcmZs
b3cobGVuZ3RoLCBhZGFwdGVyNi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVy
ZmxvdyhsZW5ndGgsIGFkYXB0ZXI3Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92
ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjgubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBpZiAob3Zl
cmZsb3cpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGFkYXB0ZXIxLmlzOEJpdCgpICYm
IGFkYXB0ZXIyLmlzOEJpdCgpICYmIGFkYXB0ZXIzLmlzOEJpdCgpICYmIGFkYXB0ZXI0LmlzOEJp
dCgpICYmIGFkYXB0ZXI1LmlzOEJpdCgpICYmIGFkYXB0ZXI2LmlzOEJpdCgpICYmIGFkYXB0ZXI3
LmlzOEJpdCgpICYmIGFkYXB0ZXI4LmlzOEJpdCgpKSB7Ci0gICAgICAgIExDaGFyKiBidWZmZXI7
Ci0gICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgICAgIGlmICghcmVzdWx0
SW1wbCkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIExDaGFyKiByZXN1bHQgPSBi
dWZmZXI7Ci0gICAgICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0
ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7
Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjMu
d3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjMubGVuZ3RoKCk7Ci0g
ICAgICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0
ZXI0Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAg
IHJlc3VsdCArPSBhZGFwdGVyNS5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRlcjYud3JpdGVUbyhy
ZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjYubGVuZ3RoKCk7Ci0gICAgICAgIGFk
YXB0ZXI3LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI3Lmxlbmd0
aCgpOwotICAgICAgICBhZGFwdGVyOC53cml0ZVRvKHJlc3VsdCk7CisgICAgYWRhcHRlZFN0cmlu
Zy53cml0ZVRvKGJ1ZmZlcik7CisgICAgYnVmZmVyICs9IGFkYXB0ZWRTdHJpbmcubGVuZ3RoKCk7
CiAKLSAgICAgICAgcmV0dXJuIHJlc3VsdEltcGwucmVsZWFzZSgpOwotICAgIH0KLQotICAgIFVD
aGFyKiBidWZmZXI7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJ
bXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICBpZiAoIXJl
c3VsdEltcGwpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgVUNoYXIqIHJlc3VsdCA9IGJ1ZmZl
cjsKLSAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIx
Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0g
YWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwotICAgIHJl
c3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNC53cml0ZVRvKHJlc3VsdCk7
Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI0Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI1LndyaXRlVG8o
cmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjUubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjYu
d3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyNi5sZW5ndGgoKTsKLSAgICBh
ZGFwdGVyNy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXI3Lmxlbmd0aCgp
OwotICAgIGFkYXB0ZXI4LndyaXRlVG8ocmVzdWx0KTsKLQotICAgIHJldHVybiByZXN1bHRJbXBs
LnJlbGVhc2UoKTsKKyAgICB3cml0ZUJ1ZmZlcihidWZmZXIsIHJlc3QuLi4pOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1l
IFN0cmluZ1R5cGUzLCB0eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTUs
IHR5cGVuYW1lIFN0cmluZ1R5cGU2LCB0eXBlbmFtZSBTdHJpbmdUeXBlNywgdHlwZW5hbWUgU3Ry
aW5nVHlwZTgsIHR5cGVuYW1lIFN0cmluZ1R5cGU5PgotUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB0
cnlNYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0
cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmlu
ZzUsIFN0cmluZ1R5cGU2IHN0cmluZzYsIFN0cmluZ1R5cGU3IHN0cmluZzcsIFN0cmluZ1R5cGU4
IHN0cmluZzgsIFN0cmluZ1R5cGU5IHN0cmluZzkpCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBZGFw
dGVkU3RyaW5nVHlwZXM+CitQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHRyeU1ha2VTdHJpbmdJbXBs
KEFkYXB0ZWRTdHJpbmdUeXBlcy4uLiBhZGFwdGVkU3RyaW5ncykKIHsKLSAgICBTdHJpbmdUeXBl
QWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3RyaW5nMSk7Ci0gICAgU3RyaW5nVHlwZUFk
YXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKHN0cmluZzIpOwotICAgIFN0cmluZ1R5cGVBZGFw
dGVyPFN0cmluZ1R5cGUzPiBhZGFwdGVyMyhzdHJpbmczKTsKLSAgICBTdHJpbmdUeXBlQWRhcHRl
cjxTdHJpbmdUeXBlND4gYWRhcHRlcjQoc3RyaW5nNCk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8
U3RyaW5nVHlwZTU+IGFkYXB0ZXI1KHN0cmluZzUpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0
cmluZ1R5cGU2PiBhZGFwdGVyNihzdHJpbmc2KTsKLSAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJp
bmdUeXBlNz4gYWRhcHRlcjcoc3RyaW5nNyk7Ci0gICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5n
VHlwZTg+IGFkYXB0ZXI4KHN0cmluZzgpOwotICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5
cGU5PiBhZGFwdGVyOShzdHJpbmc5KTsKLQogICAgIGJvb2wgb3ZlcmZsb3cgPSBmYWxzZTsKLSAg
ICB1bnNpZ25lZCBsZW5ndGggPSBhZGFwdGVyMS5sZW5ndGgoKTsKLSAgICBzdW1XaXRoT3ZlcmZs
b3cobGVuZ3RoLCBhZGFwdGVyMi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdpdGhPdmVy
ZmxvdyhsZW5ndGgsIGFkYXB0ZXIzLmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3VtV2l0aE92
ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjQubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBzdW1XaXRo
T3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNS5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAgIHN1bVdp
dGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI2Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Ci0gICAgc3Vt
V2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjcubGVuZ3RoKCksIG92ZXJmbG93KTsKLSAgICBz
dW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyOC5sZW5ndGgoKSwgb3ZlcmZsb3cpOwotICAg
IHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI5Lmxlbmd0aCgpLCBvdmVyZmxvdyk7Cisg
ICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKKyAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBvdmVy
ZmxvdywgYWRhcHRlZFN0cmluZ3MuLi4pOwogICAgIGlmIChvdmVyZmxvdykKLSAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKGFkYXB0ZXIxLmlzOEJp
dCgpICYmIGFkYXB0ZXIyLmlzOEJpdCgpICYmIGFkYXB0ZXIzLmlzOEJpdCgpICYmIGFkYXB0ZXI0
LmlzOEJpdCgpICYmIGFkYXB0ZXI1LmlzOEJpdCgpICYmIGFkYXB0ZXI2LmlzOEJpdCgpICYmIGFk
YXB0ZXI3LmlzOEJpdCgpICYmIGFkYXB0ZXI4LmlzOEJpdCgpICYmIGFkYXB0ZXI5LmlzOEJpdCgp
KSB7CisgICAgaWYgKGlzOEJpdChhZGFwdGVkU3RyaW5ncy4uLikpIHsKICAgICAgICAgTENoYXIq
IGJ1ZmZlcjsKICAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJ
bXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKICAgICAgICAgaWYg
KCFyZXN1bHRJbXBsKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgICAgICBMQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgICAgICBhZGFw
dGVyMS53cml0ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgo
KTsKLSAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0g
YWRhcHRlcjIubGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKLSAg
ICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNC53cml0
ZVRvKHJlc3VsdCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNC5sZW5ndGgoKTsKLSAgICAg
ICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjUu
bGVuZ3RoKCk7Ci0gICAgICAgIGFkYXB0ZXI2LndyaXRlVG8ocmVzdWx0KTsKLSAgICAgICAgcmVz
dWx0ICs9IGFkYXB0ZXI2Lmxlbmd0aCgpOwotICAgICAgICBhZGFwdGVyNy53cml0ZVRvKHJlc3Vs
dCk7Ci0gICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNy5sZW5ndGgoKTsKLSAgICAgICAgYWRhcHRl
cjgud3JpdGVUbyhyZXN1bHQpOwotICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjgubGVuZ3RoKCk7
Ci0gICAgICAgIGFkYXB0ZXI5LndyaXRlVG8ocmVzdWx0KTsKKyAgICAgICAgd3JpdGVCdWZmZXIo
YnVmZmVyLCBhZGFwdGVkU3RyaW5ncy4uLik7CiAKICAgICAgICAgcmV0dXJuIHJlc3VsdEltcGwu
cmVsZWFzZSgpOwogICAgIH0KQEAgLTg4MCwxMDUgKzQ5Miw0MiBAQCBQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IHRyeU1ha2VTdHJpbmcoU3RyCiAgICAgVUNoYXIqIGJ1ZmZlcjsKICAgICBSZWZQdHI8
U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQobGVuZ3RoLCBidWZmZXIpOwogICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICBVQ2hhciogcmVzdWx0ID0gYnVmZmVyOwotICAgIGFkYXB0ZXIxLndyaXRlVG8o
cmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjIu
d3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKLSAgICBh
ZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgp
OwotICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKLSAgICByZXN1bHQgKz0gYWRhcHRlcjQu
bGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1bHQpOwotICAgIHJlc3VsdCArPSBh
ZGFwdGVyNS5sZW5ndGgoKTsKLSAgICBhZGFwdGVyNi53cml0ZVRvKHJlc3VsdCk7Ci0gICAgcmVz
dWx0ICs9IGFkYXB0ZXI2Lmxlbmd0aCgpOwotICAgIGFkYXB0ZXI3LndyaXRlVG8ocmVzdWx0KTsK
LSAgICByZXN1bHQgKz0gYWRhcHRlcjcubGVuZ3RoKCk7Ci0gICAgYWRhcHRlcjgud3JpdGVUbyhy
ZXN1bHQpOwotICAgIHJlc3VsdCArPSBhZGFwdGVyOC5sZW5ndGgoKTsKLSAgICBhZGFwdGVyOS53
cml0ZVRvKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIHJl
c3VsdEltcGwucmVsZWFzZSgpOwotfQotCi0KLS8vIENvbnZlbmllbmNlIG9ubHkuCi10ZW1wbGF0
ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMT4KLVN0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0
cmluZzEpCi17Ci0gICAgcmV0dXJuIFN0cmluZyhzdHJpbmcxKTsKLX0KKyAgICB3cml0ZUJ1ZmZl
cihidWZmZXIsIGFkYXB0ZWRTdHJpbmdzLi4uKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5n
VHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyPgotU3RyaW5nIG1ha2VTdHJpbmcoU3RyaW5nVHlw
ZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMikKLXsKLSAgICBSZWZQdHI8U3RyaW5nSW1w
bD4gcmVzdWx0SW1wbCA9IHRyeU1ha2VTdHJpbmcoc3RyaW5nMSwgc3RyaW5nMik7Ci0gICAgaWYg
KCFyZXN1bHRJbXBsKQotICAgICAgICBDUkFTSCgpOwogICAgIHJldHVybiByZXN1bHRJbXBsLnJl
bGVhc2UoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0
cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMz4KLVN0cmluZyBtYWtlU3RyaW5nKFN0cmlu
Z1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUdXBsZSwgc2l6ZV90Li4uIEluZGV4PgoraW5saW5lIFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gdHJ5TWFrZVN0cmluZ1R1cGxlKFR1cGxlJiYgYWRhcHRlZFN0cmlu
Z3MsIHN0ZDo6aW5kZXhfc2VxdWVuY2U8SW5kZXguLi4+KQogewotICAgIFJlZlB0cjxTdHJpbmdJ
bXBsPiByZXN1bHRJbXBsID0gdHJ5TWFrZVN0cmluZyhzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmcz
KTsKLSAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIHJl
c3VsdEltcGwucmVsZWFzZSgpOworICAgIHJldHVybiB0cnlNYWtlU3RyaW5nSW1wbChzdGQ6Omdl
dDxJbmRleD4oYWRhcHRlZFN0cmluZ3MpLi4uKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgU3Ry
aW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlw
ZW5hbWUgU3RyaW5nVHlwZTQ+Ci1TdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcx
LCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBz
dHJpbmc0KQordGVtcGxhdGU8dHlwZW5hbWUgVHVwbGUsIHR5cGVuYW1lIEluZGljaWVzID0gc3Rk
OjptYWtlX2luZGV4X3NlcXVlbmNlPHN0ZDo6dHVwbGVfc2l6ZTxUdXBsZT46OnZhbHVlPj4KK2lu
bGluZSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHRyeU1ha2VTdHJpbmdUdXBsZShUdXBsZSBhZGFw
dGVkU3RyaW5ncykKIHsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IHRyeU1h
a2VTdHJpbmcoc3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMywgc3RyaW5nNCk7Ci0gICAgaWYgKCFy
ZXN1bHRJbXBsKQotICAgICAgICBDUkFTSCgpOwotICAgIHJldHVybiByZXN1bHRJbXBsLnJlbGVh
c2UoKTsKKyAgICByZXR1cm4gdHJ5TWFrZVN0cmluZ1R1cGxlKHN0ZDo6Zm9yd2FyZDxUdXBsZT4o
YWRhcHRlZFN0cmluZ3MpLCBJbmRpY2llcygpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgU3Ry
aW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlw
ZW5hbWUgU3RyaW5nVHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1PgotU3RyaW5nIG1ha2VTdHJp
bmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMg
c3RyaW5nMywgU3RyaW5nVHlwZTQgc3RyaW5nNCwgU3RyaW5nVHlwZTUgc3RyaW5nNSkKLXsKLSAg
ICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IHRyeU1ha2VTdHJpbmcoc3RyaW5nMSwg
c3RyaW5nMiwgc3RyaW5nMywgc3RyaW5nNCwgc3RyaW5nNSk7Ci0gICAgaWYgKCFyZXN1bHRJbXBs
KQotICAgICAgICBDUkFTSCgpOwotICAgIHJldHVybiByZXN1bHRJbXBsLnJlbGVhc2UoKTsKLX0K
K30gLy8gbmFtZXNwYWNlIFRyeU1ha2VTdHJpbmdEZXRhaWxzCiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMs
IHR5cGVuYW1lIFN0cmluZ1R5cGU0LCB0eXBlbmFtZSBTdHJpbmdUeXBlNSwgdHlwZW5hbWUgU3Ry
aW5nVHlwZTY+Ci1TdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdU
eXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBT
dHJpbmdUeXBlNSBzdHJpbmc1LCBTdHJpbmdUeXBlNiBzdHJpbmc2KQordGVtcGxhdGU8dHlwZW5h
bWUuLi4gU3RyaW5nVHlwZXM+CitQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHRyeU1ha2VTdHJpbmco
U3RyaW5nVHlwZXMuLi4gc3RyaW5ncykKIHsKLSAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0
SW1wbCA9IHRyeU1ha2VTdHJpbmcoc3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMywgc3RyaW5nNCwg
c3RyaW5nNSwgc3RyaW5nNik7Ci0gICAgaWYgKCFyZXN1bHRJbXBsKQotICAgICAgICBDUkFTSCgp
OwotICAgIHJldHVybiByZXN1bHRJbXBsLnJlbGVhc2UoKTsKLX0KKyAgICBzdGF0aWNfYXNzZXJ0
KHNpemVvZi4uLihzdHJpbmdzKSA+IDEsICJEb24ndCB1c2UgdHJ5TWFrZVN0cmluZyB3aXRoIG9u
bHkgb25lIHBhcmFtZXRlci4iKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5
cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5n
VHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1LCB0eXBlbmFtZSBTdHJpbmdUeXBlNiwgdHlwZW5h
bWUgU3RyaW5nVHlwZTc+Ci1TdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBT
dHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJp
bmc0LCBTdHJpbmdUeXBlNSBzdHJpbmc1LCBTdHJpbmdUeXBlNiBzdHJpbmc2LCBTdHJpbmdUeXBl
NyBzdHJpbmc3KQotewotICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gdHJ5TWFr
ZVN0cmluZyhzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczLCBzdHJpbmc0LCBzdHJpbmc1LCBzdHJp
bmc2LCBzdHJpbmc3KTsKLSAgICBpZiAoIXJlc3VsdEltcGwpCi0gICAgICAgIENSQVNIKCk7Ci0g
ICAgcmV0dXJuIHJlc3VsdEltcGwucmVsZWFzZSgpOworICAgIHN0ZDo6dHVwbGU8U3RyaW5nVHlw
ZUFkYXB0ZXI8U3RyaW5nVHlwZXM+Li4uPiBhZGFwdGVkU3RyaW5ncyhzdHJpbmdzLi4uKTsKKyAg
ICByZXR1cm4gVHJ5TWFrZVN0cmluZ0RldGFpbHM6OnRyeU1ha2VTdHJpbmdUdXBsZShhZGFwdGVk
U3RyaW5ncyk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBT
dHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5cGU0LCB0
eXBlbmFtZSBTdHJpbmdUeXBlNSwgdHlwZW5hbWUgU3RyaW5nVHlwZTYsIHR5cGVuYW1lIFN0cmlu
Z1R5cGU3LCB0eXBlbmFtZSBTdHJpbmdUeXBlOD4KLVN0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5
cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0
cmluZ1R5cGU0IHN0cmluZzQsIFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5cGU2IHN0cmlu
ZzYsIFN0cmluZ1R5cGU3IHN0cmluZzcsIFN0cmluZ1R5cGU4IHN0cmluZzgpCit0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBTdHJpbmdUeXBlcz4KK1N0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGVzLi4u
IHN0cmluZ3MpCiB7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSB0cnlNYWtl
U3RyaW5nKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMsIHN0cmluZzQsIHN0cmluZzUsIHN0cmlu
ZzYsIHN0cmluZzcsIHN0cmluZzgpOwotICAgIGlmICghcmVzdWx0SW1wbCkKLSAgICAgICAgQ1JB
U0goKTsKLSAgICByZXR1cm4gcmVzdWx0SW1wbC5yZWxlYXNlKCk7Ci19CisgICAgc3RhdGljX2Fz
c2VydChzaXplb2YuLi4oc3RyaW5ncykgPiAxLCAiRG9uJ3QgdXNlIG1ha2VTdHJpbmcgd2l0aCBv
bmx5IG9uZSBwYXJhbWV0ZXIuIik7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0
eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0cmlu
Z1R5cGU0LCB0eXBlbmFtZSBTdHJpbmdUeXBlNSwgdHlwZW5hbWUgU3RyaW5nVHlwZTYsIHR5cGVu
YW1lIFN0cmluZ1R5cGU3LCB0eXBlbmFtZSBTdHJpbmdUeXBlOCwgdHlwZW5hbWUgU3RyaW5nVHlw
ZTk+Ci1TdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBz
dHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBTdHJpbmdU
eXBlNSBzdHJpbmc1LCBTdHJpbmdUeXBlNiBzdHJpbmc2LCBTdHJpbmdUeXBlNyBzdHJpbmc3LCBT
dHJpbmdUeXBlOCBzdHJpbmc4LCBTdHJpbmdUeXBlOSBzdHJpbmc5KQotewotICAgIFJlZlB0cjxT
dHJpbmdJbXBsPiByZXN1bHRJbXBsID0gdHJ5TWFrZVN0cmluZyhzdHJpbmcxLCBzdHJpbmcyLCBz
dHJpbmczLCBzdHJpbmc0LCBzdHJpbmc1LCBzdHJpbmc2LCBzdHJpbmc3LCBzdHJpbmc4LCBzdHJp
bmc5KTsKKyAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IHRyeU1ha2VTdHJpbmco
c3RyaW5ncy4uLik7CiAgICAgaWYgKCFyZXN1bHRJbXBsKQogICAgICAgICBDUkFTSCgpOwogICAg
IHJldHVybiByZXN1bHRJbXBsLnJlbGVhc2UoKTsK
</data>
<flag name="review"
          id="249670"
          type_id="1"
          status="-"
          setter="joepeck"
    />
          </attachment>
      

    </bug>

</bugzilla>