<?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>208731</bug_id>
          
          <creation_ts>2020-03-06 12:43:56 -0800</creation_ts>
          <short_desc>Fix some issues in the ARM64 moveConditionallyAfterFloatingPointCompare() and moveDoubleConditionallyAfterFloatingPointCompare().</short_desc>
          <delta_ts>2022-09-17 17:23:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=208736</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=208738</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>ddkilzer</cc>
    
    <cc>fpizlo</cc>
    
    <cc>iseenoface</cc>
    
    <cc>justin_michaud</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1626811</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-03-06 12:43:56 -0800</bug_when>
    <thetext>Details to follow in the ChangeLog.

&lt;rdar://problem/59222568&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626831</commentid>
    <comment_count>1</comment_count>
      <attachid>392762</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-03-06 13:08:02 -0800</bug_when>
    <thetext>Created attachment 392762
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626862</commentid>
    <comment_count>2</comment_count>
      <attachid>392762</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-06 14:05:42 -0800</bug_when>
    <thetext>Comment on attachment 392762
proposed patch.

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

&gt; Source/JavaScriptCore/assembler/MacroAssemblerARM64.h:2030
&gt;          if (cond == DoubleNotEqual) {

can you file a bug that DoubleNotEqual really means DoubleNotEqualAndNotUnordered?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626871</commentid>
    <comment_count>3</comment_count>
      <attachid>392762</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-06 14:19:17 -0800</bug_when>
    <thetext>Comment on attachment 392762
proposed patch.

there is more to be done here. We&apos;re calling it &quot;cmov&quot;, but we&apos;re now implementing it as select. Is that ok?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626877</commentid>
    <comment_count>4</comment_count>
      <attachid>392762</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-06 14:30:33 -0800</bug_when>
    <thetext>Comment on attachment 392762
proposed patch.

Since these moveConditionally are really select, maybe we should rename it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626883</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-03-06 14:51:29 -0800</bug_when>
    <thetext>Thanks for the review.

Filed the following for the naming issues:
1. https://bugs.webkit.org/show_bug.cgi?id=208736 Add &quot;AndOrdered&quot; to the names of ordered DoubleConditions.
2. https://bugs.webkit.org/show_bug.cgi?id=208738 Consider renaming moveConditionally... MacroAssembler emitters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627002</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-03-06 17:17:43 -0800</bug_when>
    <thetext>Landed in r258038: &lt;http://trac.webkit.org/r258038&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627164</commentid>
    <comment_count>7</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2020-03-06 21:54:04 -0800</bug_when>
    <thetext>(In reply to Mark Lam from comment #6)
&gt; Landed in r258038: &lt;http://trac.webkit.org/r258038&gt;.

This caused a build failure on Windows 10 build bots:

C:\cygwin\home\buildbot\worker\win10-debug\build\Source\JavaScriptCore\assembler\testmasm.cpp(532): error C2220: the following warning is treated as an error [C:\cygwin\home\buildbot\worker\win10-debug\build\WebKitBuild\Debug\Source\JavaScriptCore\shell\testmasmLib.vcxproj]
C:\cygwin\home\buildbot\worker\win10-debug\build\Source\JavaScriptCore\assembler\testmasm.cpp(532): warning C4715: &apos;``anonymous namespace&apos;::testCompareDouble&apos;::`2&apos;::&lt;lambda_3&gt;::operator()&apos;: not all control paths return a value [C:\cygwin\home\buildbot\worker\win10-debug\build\WebKitBuild\Debug\Source\JavaScriptCore\shell\testmasmLib.vcxproj]
C:\cygwin\home\buildbot\worker\win10-debug\build\Source\JavaScriptCore\assembler\testmasm.cpp(603): warning C4715: &apos;``anonymous namespace&apos;::testCompareDoubleSameArg&apos;::`2&apos;::&lt;lambda_3&gt;::operator()&apos;: not all control paths return a value [C:\cygwin\home\buildbot\worker\win10-debug\build\WebKitBuild\Debug\Source\JavaScriptCore\shell\testmasmLib.vcxproj]
C:\cygwin\home\buildbot\worker\win10-debug\build\Source\JavaScriptCore\assembler\testmasm.cpp(727): warning C4715: &apos;``anonymous namespace&apos;::testMoveConditionallyFloatingPoint&lt;double,unsigned int&gt;&apos;::`2&apos;::&lt;lambda_1&gt;::operator()&apos;: not all control paths return a value [C:\cygwin\home\buildbot\worker\win10-debug\build\WebKitBuild\Debug\Source\JavaScriptCore\shell\testmasmLib.vcxproj]
C:\cygwin\home\buildbot\worker\win10-debug\build\Source\JavaScriptCore\assembler\testmasm.cpp(727): warning C4715: &apos;``anonymous namespace&apos;::testMoveConditionallyFloatingPoint&lt;float,unsigned int&gt;&apos;::`2&apos;::&lt;lambda_1&gt;::operator()&apos;: not all control paths return a value [C:\cygwin\home\buildbot\worker\win10-debug\build\WebKitBuild\Debug\Source\JavaScriptCore\shell\testmasmLib.vcxproj]
C:\cygwin\home\buildbot\worker\win10-debug\build\Source\JavaScriptCore\assembler\testmasm.cpp(727): warning C4715: &apos;``anonymous namespace&apos;::testMoveConditionallyFloatingPoint&lt;double,double&gt;&apos;::`2&apos;::&lt;lambda_1&gt;::operator()&apos;: not all control paths return a value [C:\cygwin\home\buildbot\worker\win10-debug\build\WebKitBuild\Debug\Source\JavaScriptCore\shell\testmasmLib.vcxproj]
C:\cygwin\home\buildbot\worker\win10-debug\build\Source\JavaScriptCore\assembler\testmasm.cpp(1299): warning C4715: &apos;``anonymous namespace&apos;::testMoveConditionallyFloatingPointSameArg&lt;double,unsigned int&gt;&apos;::`2&apos;::&lt;lambda_1&gt;::operator()&apos;: not all control paths return a value [C:\cygwin\home\buildbot\worker\win10-debug\build\WebKitBuild\Debug\Source\JavaScriptCore\shell\testmasmLib.vcxproj]
C:\cygwin\home\buildbot\worker\win10-debug\build\Source\JavaScriptCore\assembler\testmasm.cpp(727): warning C4715: &apos;``anonymous namespace&apos;::testMoveConditionallyFloatingPoint&lt;float,double&gt;&apos;::`2&apos;::&lt;lambda_1&gt;::operator()&apos;: not all control paths return a value [C:\cygwin\home\buildbot\worker\win10-debug\build\WebKitBuild\Debug\Source\JavaScriptCore\shell\testmasmLib.vcxproj]
C:\cygwin\home\buildbot\worker\win10-debug\build\Source\JavaScriptCore\assembler\testmasm.cpp(1299): warning C4715: &apos;``anonymous namespace&apos;::testMoveConditionallyFloatingPointSameArg&lt;float,unsigned int&gt;&apos;::`2&apos;::&lt;lambda_1&gt;::operator()&apos;: not all control paths return a value [C:\cygwin\home\buildbot\worker\win10-debug\build\WebKitBuild\Debug\Source\JavaScriptCore\shell\testmasmLib.vcxproj]
C:\cygwin\home\buildbot\worker\win10-debug\build\Source\JavaScriptCore\assembler\testmasm.cpp(1299): warning C4715: &apos;``anonymous namespace&apos;::testMoveConditionallyFloatingPointSameArg&lt;float,double&gt;&apos;::`2&apos;::&lt;lambda_1&gt;::operator()&apos;: not all control paths return a value [C:\cygwin\home\buildbot\worker\win10-debug\build\WebKitBuild\Debug\Source\JavaScriptCore\shell\testmasmLib.vcxproj]
C:\cygwin\home\buildbot\worker\win10-debug\build\Source\JavaScriptCore\assembler\testmasm.cpp(1299): warning C4715: &apos;``anonymous namespace&apos;::testMoveConditionallyFloatingPointSameArg&lt;double,double&gt;&apos;::`2&apos;::&lt;lambda_1&gt;::operator()&apos;: not all control paths return a value [C:\cygwin\home\buildbot\worker\win10-debug\build\WebKitBuild\Debug\Source\JavaScriptCore\shell\testmasmLib.vcxproj]

&lt;https://build.webkit.org/builders/Apple%20Win%2010%20Debug%20%28Build%29/builds/11014/steps/compile-webkit/logs/stdio&gt;

Committed r258062: &lt;http://trac.webkit.org/r258062&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392762</attachid>
            <date>2020-03-06 13:08:02 -0800</date>
            <delta_ts>2020-03-06 14:30:33 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-208731.patch</filename>
            <type>text/plain</type>
            <size>51798</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjU4MDIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBA
CisyMDIwLTAzLTA2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBG
aXggc29tZSBpc3N1ZXMgaW4gdGhlIEFSTTY0IG1vdmVDb25kaXRpb25hbGx5QWZ0ZXJGbG9hdGlu
Z1BvaW50Q29tcGFyZSgpIGFuZCBtb3ZlRG91YmxlQ29uZGl0aW9uYWxseUFmdGVyRmxvYXRpbmdQ
b2ludENvbXBhcmUoKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwODczMQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTkyMjI1Njg+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQm90aCB0aGUgQVJNNjQg
bW92ZUNvbmRpdGlvbmFsbHlBZnRlckZsb2F0aW5nUG9pbnRDb21wYXJlKCkgYW5kCisgICAgICAg
IG1vdmVEb3VibGVDb25kaXRpb25hbGx5QWZ0ZXJGbG9hdGluZ1BvaW50Q29tcGFyZSgpIGhhZCB0
aGUgZm9sbG93aW5nIGlzc3VlczoKKworICAgICAgICAxLiBGb3IgdGhlIERvdWJsZU5vdEVxdWFs
IGNvbmRpdGlvbiwgdGhleSBmYWlsIHRvIHNldCB0aGUgcmVzdWx0IHJlZ2lzdGVyIGlmCisgICAg
ICAgICAgIG9uZSBvciBib3RoIG9mIHRoZSBjb21wYXJpc29uIG9wZXJhbmRzIGlzIGEgTmFOLgor
CisgICAgICAgIDIuIEZvciB0aGUgRG91YmxlRXF1YWxPclVub3JkZXJlZCBjb25kaXRpb24sIHRo
ZXkgY2FuIGNsb2JiZXIgdGhlIGVsc2UgY2FzZQorICAgICAgICAgICBpbnB1dCByZWdpc3RlciBp
ZiBvbmUgb2YgdGhlIGNvbXBhcmlzb24gb3BlcmFuZHMgaXMgYSBOYU4uCisKKyAgICAgICAgVGhp
cyBwYXRjaCBmaXhlcyBib3RoIG9mIHRoZXNlLCBhbmQgZXhoYXVzdGl2ZSB0ZXN0bWFzbSB0ZXN0
IGNhc2VzIGZvciBhZmZlY3RlZAorICAgICAgICBNYWNyb0Fzc2VtYmxlciBpbnN0cnVjdGlvbiBl
bWl0dGVycyB1c2luZyB0aGVzZSBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJBUk02NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpt
b3ZlQ29uZGl0aW9uYWxseUFmdGVyRmxvYXRpbmdQb2ludENvbXBhcmUpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojptb3ZlRG91YmxlQ29uZGl0aW9uYWxseUFmdGVyRmxvYXRp
bmdQb2ludENvbXBhcmUpOgorICAgICAgICAqIGFzc2VtYmxlci90ZXN0bWFzbS5jcHA6CisgICAg
ICAgIChKU0M6OnRlc3RDb21wYXJlRG91YmxlKToKKyAgICAgICAgKEpTQzo6dGVzdENvbXBhcmVE
b3VibGVTYW1lQXJnKToKKyAgICAgICAgKEpTQzo6dGVzdE1vdmVDb25kaXRpb25hbGx5RmxvYXRp
bmdQb2ludCk6CisgICAgICAgIChKU0M6OnRlc3RNb3ZlQ29uZGl0aW9uYWxseURvdWJsZTIpOgor
ICAgICAgICAoSlNDOjp0ZXN0TW92ZUNvbmRpdGlvbmFsbHlEb3VibGUzKToKKyAgICAgICAgKEpT
Qzo6dGVzdE1vdmVDb25kaXRpb25hbGx5RG91YmxlM0Rlc3RTYW1lQXNUaGVuQ2FzZSk6CisgICAg
ICAgIChKU0M6OnRlc3RNb3ZlQ29uZGl0aW9uYWxseURvdWJsZTNEZXN0U2FtZUFzRWxzZUNhc2Up
OgorICAgICAgICAoSlNDOjp0ZXN0TW92ZUNvbmRpdGlvbmFsbHlGbG9hdDIpOgorICAgICAgICAo
SlNDOjp0ZXN0TW92ZUNvbmRpdGlvbmFsbHlGbG9hdDMpOgorICAgICAgICAoSlNDOjp0ZXN0TW92
ZUNvbmRpdGlvbmFsbHlGbG9hdDNEZXN0U2FtZUFzVGhlbkNhc2UpOgorICAgICAgICAoSlNDOjp0
ZXN0TW92ZUNvbmRpdGlvbmFsbHlGbG9hdDNEZXN0U2FtZUFzRWxzZUNhc2UpOgorICAgICAgICAo
SlNDOjp0ZXN0TW92ZURvdWJsZUNvbmRpdGlvbmFsbHlEb3VibGUpOgorICAgICAgICAoSlNDOjp0
ZXN0TW92ZURvdWJsZUNvbmRpdGlvbmFsbHlEb3VibGVEZXN0U2FtZUFzVGhlbkNhc2UpOgorICAg
ICAgICAoSlNDOjp0ZXN0TW92ZURvdWJsZUNvbmRpdGlvbmFsbHlEb3VibGVEZXN0U2FtZUFzRWxz
ZUNhc2UpOgorICAgICAgICAoSlNDOjp0ZXN0TW92ZURvdWJsZUNvbmRpdGlvbmFsbHlGbG9hdCk6
CisgICAgICAgIChKU0M6OnRlc3RNb3ZlRG91YmxlQ29uZGl0aW9uYWxseUZsb2F0RGVzdFNhbWVB
c1RoZW5DYXNlKToKKyAgICAgICAgKEpTQzo6dGVzdE1vdmVEb3VibGVDb25kaXRpb25hbGx5Rmxv
YXREZXN0U2FtZUFzRWxzZUNhc2UpOgorICAgICAgICAoSlNDOjp0ZXN0TW92ZUNvbmRpdGlvbmFs
bHlGbG9hdGluZ1BvaW50U2FtZUFyZyk6CisgICAgICAgIChKU0M6OnRlc3RNb3ZlQ29uZGl0aW9u
YWxseURvdWJsZTJTYW1lQXJnKToKKyAgICAgICAgKEpTQzo6dGVzdE1vdmVDb25kaXRpb25hbGx5
RG91YmxlM1NhbWVBcmcpOgorICAgICAgICAoSlNDOjp0ZXN0TW92ZUNvbmRpdGlvbmFsbHlGbG9h
dDJTYW1lQXJnKToKKyAgICAgICAgKEpTQzo6dGVzdE1vdmVDb25kaXRpb25hbGx5RmxvYXQzU2Ft
ZUFyZyk6CisgICAgICAgIChKU0M6OnRlc3RNb3ZlRG91YmxlQ29uZGl0aW9uYWxseURvdWJsZVNh
bWVBcmcpOgorICAgICAgICAoSlNDOjp0ZXN0TW92ZURvdWJsZUNvbmRpdGlvbmFsbHlGbG9hdFNh
bWVBcmcpOgorICAgICAgICAoSlNDOjpydW4pOgorCiAyMDIwLTAzLTA1ICBQYXVsbyBNYXRvcyAg
PHBtYXRvc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtKU0NPbmx5XSAzMi1iaXRzIHdhcm5pbmcg
b24gbWVtc2V0IG9mIEpTVmFsdWUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAyNTc5NDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjAyOCwxOCArMjAyOCwzNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBt
b3ZlQ29uZGl0aW9uYWxseUFmdGVyRmxvYXRpbmdQb2ludENvbXBhcmUoRG91YmxlQ29uZGl0aW9u
IGNvbmQsIFJlZ2lzdGVySUQgdGhlbkNhc2UsIFJlZ2lzdGVySUQgZWxzZUNhc2UsIFJlZ2lzdGVy
SUQgZGVzdCkKICAgICB7CiAgICAgICAgIGlmIChjb25kID09IERvdWJsZU5vdEVxdWFsKSB7Ci0g
ICAgICAgICAgICBKdW1wIHVub3JkZXJlZCA9IG1ha2VCcmFuY2goQXNzZW1ibGVyOjpDb25kaXRp
b25WUyk7Ci0gICAgICAgICAgICBtX2Fzc2VtYmxlci5jc2VsPGRhdGFzaXplPihkZXN0LCB0aGVu
Q2FzZSwgZWxzZUNhc2UsIEFzc2VtYmxlcjo6Q29uZGl0aW9uTkUpOwotICAgICAgICAgICAgdW5v
cmRlcmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICBpZiAoZGVzdCA9PSB0aGVuQ2FzZSkgewor
ICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjb21wYXJlIGlzIHVub3JkZXJlZCwgZWxzZUNhc2Ug
aXMgY29waWVkIHRvIHRoZW5DYXNlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAvLyBuZXh0IGNz
ZWwgaGFzIGFsbCBhcmd1bWVudHMgZXF1YWwgdG8gZWxzZUNhc2UuCisgICAgICAgICAgICAgICAg
Ly8gSWYgdGhlIGNvbXBhcmUgaXMgb3JkZXJlZCwgZGVzdCBpcyB1bmNoYW5nZWQgYW5kIE5FIGRl
Y2lkZXMKKyAgICAgICAgICAgICAgICAvLyB3aGF0IHZhbHVlIHRvIHNldC4KKyAgICAgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5jc2VsPGRhdGFzaXplPih0aGVuQ2FzZSwgZWxzZUNhc2UsIHRoZW5D
YXNlLCBBc3NlbWJsZXI6OkNvbmRpdGlvbk5FKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5jc2VsPGRhdGFzaXplPihkZXN0LCB0aGVuQ2FzZSwgZWxzZUNhc2UsIEFzc2VtYmxlcjo6Q29u
ZGl0aW9uTkUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtb3ZlKGVs
c2VDYXNlLCBkZXN0KTsKKyAgICAgICAgICAgICAgICBKdW1wIHVub3JkZXJlZCA9IG1ha2VCcmFu
Y2goQXNzZW1ibGVyOjpDb25kaXRpb25WUyk7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIu
Y3NlbDxkYXRhc2l6ZT4oZGVzdCwgdGhlbkNhc2UsIGVsc2VDYXNlLCBBc3NlbWJsZXI6OkNvbmRp
dGlvbk5FKTsKKyAgICAgICAgICAgICAgICB1bm9yZGVyZWQubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAoY29uZCA9
PSBEb3VibGVFcXVhbE9yVW5vcmRlcmVkKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgY29tcGFy
ZSBpcyB1bm9yZGVyZWQsIHRoZW5DYXNlIGlzIGNvcGllZCB0byBlbHNlQ2FzZSBhbmQgdGhlCi0g
ICAgICAgICAgICAvLyBuZXh0IGNzZWwgaGFzIGFsbCBhcmd1bWVudHMgZXF1YWwgdG8gdGhlbkNh
c2UuCi0gICAgICAgICAgICAvLyBJZiB0aGUgY29tcGFyZSBpcyBvcmRlcmVkLCBkZXN0IGlzIHVu
Y2hhbmdlZCBhbmQgRVEgZGVjaWRlcwotICAgICAgICAgICAgLy8gd2hhdCB2YWx1ZSB0byBzZXQu
Ci0gICAgICAgICAgICBtX2Fzc2VtYmxlci5jc2VsPGRhdGFzaXplPihlbHNlQ2FzZSwgdGhlbkNh
c2UsIGVsc2VDYXNlLCBBc3NlbWJsZXI6OkNvbmRpdGlvblZTKTsKLSAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmNzZWw8ZGF0YXNpemU+KGRlc3QsIHRoZW5DYXNlLCBlbHNlQ2FzZSwgQXNzZW1ibGVy
OjpDb25kaXRpb25FUSk7CisgICAgICAgICAgICBpZiAoZGVzdCA9PSBlbHNlQ2FzZSkgeworICAg
ICAgICAgICAgICAgIC8vIElmIHRoZSBjb21wYXJlIGlzIHVub3JkZXJlZCwgdGhlbkNhc2UgaXMg
Y29waWVkIHRvIGVsc2VDYXNlIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAvLyBuZXh0IGNzZWwg
aGFzIGFsbCBhcmd1bWVudHMgZXF1YWwgdG8gdGhlbkNhc2UuCisgICAgICAgICAgICAgICAgLy8g
SWYgdGhlIGNvbXBhcmUgaXMgb3JkZXJlZCwgZGVzdCBpcyB1bmNoYW5nZWQgYW5kIEVRIGRlY2lk
ZXMKKyAgICAgICAgICAgICAgICAvLyB3aGF0IHZhbHVlIHRvIHNldC4KKyAgICAgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5jc2VsPGRhdGFzaXplPihlbHNlQ2FzZSwgdGhlbkNhc2UsIGVsc2VDYXNl
LCBBc3NlbWJsZXI6OkNvbmRpdGlvblZTKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5j
c2VsPGRhdGFzaXplPihkZXN0LCB0aGVuQ2FzZSwgZWxzZUNhc2UsIEFzc2VtYmxlcjo6Q29uZGl0
aW9uRVEpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtb3ZlKHRoZW5D
YXNlLCBkZXN0KTsKKyAgICAgICAgICAgICAgICBKdW1wIHVub3JkZXJlZCA9IG1ha2VCcmFuY2go
QXNzZW1ibGVyOjpDb25kaXRpb25WUyk7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuY3Nl
bDxkYXRhc2l6ZT4oZGVzdCwgdGhlbkNhc2UsIGVsc2VDYXNlLCBBc3NlbWJsZXI6OkNvbmRpdGlv
bkVRKTsKKyAgICAgICAgICAgICAgICB1bm9yZGVyZWQubGluayh0aGlzKTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBtX2Fzc2VtYmxlci5j
c2VsPGRhdGFzaXplPihkZXN0LCB0aGVuQ2FzZSwgZWxzZUNhc2UsIEFSTTY0Q29uZGl0aW9uKGNv
bmQpKTsKQEAgLTIwNDksMTggKzIwNjYsMzUgQEAgcHVibGljOgogICAgIHZvaWQgbW92ZURvdWJs
ZUNvbmRpdGlvbmFsbHlBZnRlckZsb2F0aW5nUG9pbnRDb21wYXJlKERvdWJsZUNvbmRpdGlvbiBj
b25kLCBGUFJlZ2lzdGVySUQgdGhlbkNhc2UsIEZQUmVnaXN0ZXJJRCBlbHNlQ2FzZSwgRlBSZWdp
c3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBpZiAoY29uZCA9PSBEb3VibGVOb3RFcXVhbCkg
ewotICAgICAgICAgICAgSnVtcCB1bm9yZGVyZWQgPSBtYWtlQnJhbmNoKEFzc2VtYmxlcjo6Q29u
ZGl0aW9uVlMpOwotICAgICAgICAgICAgbV9hc3NlbWJsZXIuZmNzZWw8ZGF0YXNpemU+KGRlc3Qs
IHRoZW5DYXNlLCBlbHNlQ2FzZSwgQXNzZW1ibGVyOjpDb25kaXRpb25ORSk7Ci0gICAgICAgICAg
ICB1bm9yZGVyZWQubGluayh0aGlzKTsKKyAgICAgICAgICAgIGlmIChkZXN0ID09IHRoZW5DYXNl
KSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNvbXBhcmUgaXMgdW5vcmRlcmVkLCBlbHNl
Q2FzZSBpcyBjb3BpZWQgdG8gdGhlbkNhc2UgYW5kIHRoZQorICAgICAgICAgICAgICAgIC8vIG5l
eHQgZmNzZWwgaGFzIGFsbCBhcmd1bWVudHMgZXF1YWwgdG8gZWxzZUNhc2UuCisgICAgICAgICAg
ICAgICAgLy8gSWYgdGhlIGNvbXBhcmUgaXMgb3JkZXJlZCwgZGVzdCBpcyB1bmNoYW5nZWQgYW5k
IE5FIGRlY2lkZXMKKyAgICAgICAgICAgICAgICAvLyB3aGF0IHZhbHVlIHRvIHNldC4KKyAgICAg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5mY3NlbDxkYXRhc2l6ZT4odGhlbkNhc2UsIGVsc2VDYXNl
LCB0aGVuQ2FzZSwgQXNzZW1ibGVyOjpDb25kaXRpb25WUyk7CisgICAgICAgICAgICAgICAgbV9h
c3NlbWJsZXIuZmNzZWw8ZGF0YXNpemU+KGRlc3QsIHRoZW5DYXNlLCBlbHNlQ2FzZSwgQXNzZW1i
bGVyOjpDb25kaXRpb25ORSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmZtb3Y8NjQ+KGRlc3QsIGVsc2VDYXNlKTsKKyAgICAgICAgICAgICAgICBK
dW1wIHVub3JkZXJlZCA9IG1ha2VCcmFuY2goQXNzZW1ibGVyOjpDb25kaXRpb25WUyk7CisgICAg
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuZmNzZWw8ZGF0YXNpemU+KGRlc3QsIHRoZW5DYXNlLCBl
bHNlQ2FzZSwgQXNzZW1ibGVyOjpDb25kaXRpb25ORSk7CisgICAgICAgICAgICAgICAgdW5vcmRl
cmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKGNvbmQgPT0gRG91YmxlRXF1YWxPclVub3JkZXJlZCkgewotICAg
ICAgICAgICAgLy8gSWYgdGhlIGNvbXBhcmUgaXMgdW5vcmRlcmVkLCB0aGVuQ2FzZSBpcyBjb3Bp
ZWQgdG8gZWxzZUNhc2UgYW5kIHRoZQotICAgICAgICAgICAgLy8gbmV4dCBjc2VsIGhhcyBhbGwg
YXJndW1lbnRzIGVxdWFsIHRvIHRoZW5DYXNlLgotICAgICAgICAgICAgLy8gSWYgdGhlIGNvbXBh
cmUgaXMgb3JkZXJlZCwgZGVzdCBpcyB1bmNoYW5nZWQgYW5kIEVRIGRlY2lkZXMKLSAgICAgICAg
ICAgIC8vIHdoYXQgdmFsdWUgdG8gc2V0LgotICAgICAgICAgICAgbV9hc3NlbWJsZXIuZmNzZWw8
ZGF0YXNpemU+KGVsc2VDYXNlLCB0aGVuQ2FzZSwgZWxzZUNhc2UsIEFzc2VtYmxlcjo6Q29uZGl0
aW9uVlMpOwotICAgICAgICAgICAgbV9hc3NlbWJsZXIuZmNzZWw8ZGF0YXNpemU+KGRlc3QsIHRo
ZW5DYXNlLCBlbHNlQ2FzZSwgQXNzZW1ibGVyOjpDb25kaXRpb25FUSk7CisgICAgICAgICAgICBp
ZiAoZGVzdCA9PSBlbHNlQ2FzZSkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjb21wYXJl
IGlzIHVub3JkZXJlZCwgdGhlbkNhc2UgaXMgY29waWVkIHRvIGVsc2VDYXNlIGFuZCB0aGUKKyAg
ICAgICAgICAgICAgICAvLyBuZXh0IGNzZWwgaGFzIGFsbCBhcmd1bWVudHMgZXF1YWwgdG8gdGhl
bkNhc2UuCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNvbXBhcmUgaXMgb3JkZXJlZCwgZGVz
dCBpcyB1bmNoYW5nZWQgYW5kIEVRIGRlY2lkZXMKKyAgICAgICAgICAgICAgICAvLyB3aGF0IHZh
bHVlIHRvIHNldC4KKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5mY3NlbDxkYXRhc2l6ZT4o
ZWxzZUNhc2UsIHRoZW5DYXNlLCBlbHNlQ2FzZSwgQXNzZW1ibGVyOjpDb25kaXRpb25WUyk7Cisg
ICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuZmNzZWw8ZGF0YXNpemU+KGRlc3QsIHRoZW5DYXNl
LCBlbHNlQ2FzZSwgQXNzZW1ibGVyOjpDb25kaXRpb25FUSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmZtb3Y8NjQ+KGRlc3QsIHRoZW5DYXNlKTsK
KyAgICAgICAgICAgICAgICBKdW1wIHVub3JkZXJlZCA9IG1ha2VCcmFuY2goQXNzZW1ibGVyOjpD
b25kaXRpb25WUyk7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuZmNzZWw8ZGF0YXNpemU+
KGRlc3QsIHRoZW5DYXNlLCBlbHNlQ2FzZSwgQXNzZW1ibGVyOjpDb25kaXRpb25FUSk7CisgICAg
ICAgICAgICAgICAgdW5vcmRlcmVkLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbV9hc3NlbWJsZXIuZmNzZWw8ZGF0YXNp
emU+KGRlc3QsIHRoZW5DYXNlLCBlbHNlQ2FzZSwgQVJNNjRDb25kaXRpb24oY29uZCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAJKHJldmlz
aW9uIDI1Nzk0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTksMTYgKzQ5OSwxMTcgQEAgdm9pZCB0ZXN0Q29tcGFy
ZURvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RAogICAgICAgICBqaXQucmV0KCk7CiAgICAgfSk7CiAK
KyAgICBhdXRvIGV4cGVjdGVkUmVzdWx0ID0gWyYsIGNvbmRpdGlvbl0gKGRvdWJsZSBhLCBkb3Vi
bGUgYikgLT4gaW50IHsKKyAgICAgICAgYXV0byBpc1Vub3JkZXJlZCA9IFtdIChkb3VibGUgeCkg
eworICAgICAgICAgICAgcmV0dXJuIHggIT0geDsKKyAgICAgICAgfTsKKyAgICAgICAgc3dpdGNo
IChjb25kaXRpb24pIHsKKyAgICAgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWw6
CisgICAgICAgICAgICByZXR1cm4gIWlzVW5vcmRlcmVkKGEpICYmICFpc1Vub3JkZXJlZChiKSAm
JiAoYSA9PSBiKTsKKyAgICAgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWw6
CisgICAgICAgICAgICByZXR1cm4gIWlzVW5vcmRlcmVkKGEpICYmICFpc1Vub3JkZXJlZChiKSAm
JiAoYSAhPSBiKTsKKyAgICAgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRo
YW46CisgICAgICAgICAgICByZXR1cm4gIWlzVW5vcmRlcmVkKGEpICYmICFpc1Vub3JkZXJlZChi
KSAmJiAoYSA+IGIpOworICAgICAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVy
VGhhbk9yRXF1YWw6CisgICAgICAgICAgICByZXR1cm4gIWlzVW5vcmRlcmVkKGEpICYmICFpc1Vu
b3JkZXJlZChiKSAmJiAoYSA+PSBiKTsKKyAgICAgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6RG91
YmxlTGVzc1RoYW46CisgICAgICAgICAgICByZXR1cm4gIWlzVW5vcmRlcmVkKGEpICYmICFpc1Vu
b3JkZXJlZChiKSAmJiAoYSA8IGIpOworICAgICAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpEb3Vi
bGVMZXNzVGhhbk9yRXF1YWw6CisgICAgICAgICAgICByZXR1cm4gIWlzVW5vcmRlcmVkKGEpICYm
ICFpc1Vub3JkZXJlZChiKSAmJiAoYSA8PSBiKTsKKyAgICAgICAgY2FzZSBNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlRXF1YWxPclVub3JkZXJlZDoKKyAgICAgICAgICAgIHJldHVybiBpc1Vub3JkZXJl
ZChhKSB8fCBpc1Vub3JkZXJlZChiKSB8fCAoYSA9PSBiKTsKKyAgICAgICAgY2FzZSBNYWNyb0Fz
c2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZDoKKyAgICAgICAgICAgIHJldHVybiBp
c1Vub3JkZXJlZChhKSB8fCBpc1Vub3JkZXJlZChiKSB8fCAoYSAhPSBiKTsKKyAgICAgICAgY2Fz
ZSBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZDoKKyAgICAgICAg
ICAgIHJldHVybiBpc1Vub3JkZXJlZChhKSB8fCBpc1Vub3JkZXJlZChiKSB8fCAoYSA+IGIpOwor
ICAgICAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVu
b3JkZXJlZDoKKyAgICAgICAgICAgIHJldHVybiBpc1Vub3JkZXJlZChhKSB8fCBpc1Vub3JkZXJl
ZChiKSB8fCAoYSA+PSBiKTsKKyAgICAgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVz
c1RoYW5PclVub3JkZXJlZDoKKyAgICAgICAgICAgIHJldHVybiBpc1Vub3JkZXJlZChhKSB8fCBp
c1Vub3JkZXJlZChiKSB8fCAoYSA8IGIpOworICAgICAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpE
b3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZDoKKyAgICAgICAgICAgIHJldHVybiBpc1Vu
b3JkZXJlZChhKSB8fCBpc1Vub3JkZXJlZChiKSB8fCAoYSA8PSBiKTsKKyAgICAgICAgfSAvLyBz
d2l0Y2gKKyAgICB9OworCiAgICAgYXV0byBvcGVyYW5kcyA9IGRvdWJsZU9wZXJhbmRzKCk7CiAg
ICAgZm9yIChhdXRvIGEgOiBvcGVyYW5kcykgewogICAgICAgICBmb3IgKGF1dG8gYiA6IG9wZXJh
bmRzKSB7CiAgICAgICAgICAgICBhcmcxID0gYTsKICAgICAgICAgICAgIGFyZzIgPSBiOwotICAg
ICAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oY29tcGFyZURvdWJsZSksIGludm9rZTxpbnQ+
KGNvbXBhcmVEb3VibGVHZW5lcmljKSk7CisgICAgICAgICAgICBDSEVDS19FUShpbnZva2U8aW50
Pihjb21wYXJlRG91YmxlKSwgZXhwZWN0ZWRSZXN1bHQoYSwgYikpOworICAgICAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludD4oY29tcGFyZURvdWJsZUdlbmVyaWMpLCBleHBlY3RlZFJlc3VsdChh
LCBiKSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKK3ZvaWQgdGVzdENvbXBhcmVEb3VibGVTYW1l
QXJnKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24gY29uZGl0aW9uKQoreworICAgIGRv
dWJsZSBhcmcxID0gMDsKKworICAgIGF1dG8gY29tcGFyZURvdWJsZSA9IGNvbXBpbGUoWyYsIGNv
bmRpdGlvbl0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgIGVtaXRGdW5jdGlvblByb2xv
Z3VlKGppdCk7CisKKyAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKCZhcmcxKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKC0xKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAg
ICAgICBqaXQuY29tcGFyZURvdWJsZShjb25kaXRpb24sIEZQUkluZm86OmZwUmVnVDAsIEZQUklu
Zm86OmZwUmVnVDAsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICBlbWl0RnVu
Y3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICBqaXQucmV0KCk7CisgICAgfSk7CisKKyAgICBh
dXRvIGNvbXBhcmVEb3VibGVHZW5lcmljID0gY29tcGlsZShbJiwgY29uZGl0aW9uXSAoQ0NhbGxI
ZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAg
ICAgICBqaXQubG9hZERvdWJsZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmFyZzEpLCBG
UFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoMSksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgYXV0byBqdW1wID0g
aml0LmJyYW5jaERvdWJsZShjb25kaXRpb24sIEZQUkluZm86OmZwUmVnVDAsIEZQUkluZm86OmZw
UmVnVDApOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSwg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBqdW1wLmxpbmsoJmppdCk7CisKKyAg
ICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgaml0LnJldCgpOworICAg
IH0pOworCisgICAgYXV0byBleHBlY3RlZFJlc3VsdCA9IFsmLCBjb25kaXRpb25dIChkb3VibGUg
YSkgLT4gaW50IHsKKyAgICAgICAgYXV0byBpc1Vub3JkZXJlZCA9IFtdIChkb3VibGUgeCkgewor
ICAgICAgICAgICAgcmV0dXJuIHggIT0geDsKKyAgICAgICAgfTsKKyAgICAgICAgc3dpdGNoIChj
b25kaXRpb24pIHsKKyAgICAgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWw6Cisg
ICAgICAgICAgICByZXR1cm4gIWlzVW5vcmRlcmVkKGEpICYmIChhID09IGEpOworICAgICAgICBj
YXNlIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbDoKKyAgICAgICAgICAgIHJldHVybiAh
aXNVbm9yZGVyZWQoYSkgJiYgKGEgIT0gYSk7CisgICAgICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6
OkRvdWJsZUdyZWF0ZXJUaGFuOgorICAgICAgICAgICAgcmV0dXJuICFpc1Vub3JkZXJlZChhKSAm
JiAoYSA+IGEpOworICAgICAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhh
bk9yRXF1YWw6CisgICAgICAgICAgICByZXR1cm4gIWlzVW5vcmRlcmVkKGEpICYmIChhID49IGEp
OworICAgICAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbjoKKyAgICAgICAg
ICAgIHJldHVybiAhaXNVbm9yZGVyZWQoYSkgJiYgKGEgPCBhKTsKKyAgICAgICAgY2FzZSBNYWNy
b0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsOgorICAgICAgICAgICAgcmV0dXJuICFp
c1Vub3JkZXJlZChhKSAmJiAoYSA8PSBhKTsKKyAgICAgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6
RG91YmxlRXF1YWxPclVub3JkZXJlZDoKKyAgICAgICAgICAgIHJldHVybiBpc1Vub3JkZXJlZChh
KSB8fCAoYSA9PSBhKTsKKyAgICAgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1
YWxPclVub3JkZXJlZDoKKyAgICAgICAgICAgIHJldHVybiBpc1Vub3JkZXJlZChhKSB8fCAoYSAh
PSBhKTsKKyAgICAgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PclVu
b3JkZXJlZDoKKyAgICAgICAgICAgIHJldHVybiBpc1Vub3JkZXJlZChhKSB8fCAoYSA+IGEpOwor
ICAgICAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVu
b3JkZXJlZDoKKyAgICAgICAgICAgIHJldHVybiBpc1Vub3JkZXJlZChhKSB8fCAoYSA+PSBhKTsK
KyAgICAgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PclVub3JkZXJlZDoK
KyAgICAgICAgICAgIHJldHVybiBpc1Vub3JkZXJlZChhKSB8fCAoYSA8IGEpOworICAgICAgICBj
YXNlIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZDoKKyAg
ICAgICAgICAgIHJldHVybiBpc1Vub3JkZXJlZChhKSB8fCAoYSA8PSBhKTsKKyAgICAgICAgfSAv
LyBzd2l0Y2gKKyAgICB9OworCisgICAgYXV0byBvcGVyYW5kcyA9IGRvdWJsZU9wZXJhbmRzKCk7
CisgICAgZm9yIChhdXRvIGEgOiBvcGVyYW5kcykgeworICAgICAgICBhcmcxID0gYTsKKyAgICAg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oY29tcGFyZURvdWJsZSksIGV4cGVjdGVkUmVzdWx0KGEp
KTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludD4oY29tcGFyZURvdWJsZUdlbmVyaWMpLCBl
eHBlY3RlZFJlc3VsdChhKSk7CisgICAgfQorfQorCiB2b2lkIHRlc3RNdWwzMldpdGhJbW1lZGlh
dGVzKCkKIHsKICAgICBmb3IgKGF1dG8gaW1tZWRpYXRlIDogaW50MzJPcGVyYW5kcygpKSB7CkBA
IC01ODYsNyArNjg3LDc2OCBAQCB2b2lkIHRlc3RDb21wYXJlRmxvYXQoTWFjcm9Bc3NlbWJsZXI6
OkRvCiAgICAgICAgIH0KICAgICB9CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBDUFUoWDg2KSB8fCBD
UFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCisKKyNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQp
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFNlbGVjdGlvblR5cGU+Cit2b2lkIHRl
c3RNb3ZlQ29uZGl0aW9uYWxseUZsb2F0aW5nUG9pbnQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNv
bmRpdGlvbiBjb25kaXRpb24sIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRy
VGFnPiYgdGVzdENvZGUsIFQmIGFyZzEsIFQmIGFyZzIsIGNvbnN0IFZlY3RvcjxUPiBvcGVyYW5k
cywgU2VsZWN0aW9uVHlwZSBzZWxlY3Rpb25BLCBTZWxlY3Rpb25UeXBlIHNlbGVjdGlvbkIpCit7
CisgICAgYXV0byBleHBlY3RlZFJlc3VsdCA9IFsmLCBjb25kaXRpb25dIChUIGEsIFQgYikgLT4g
U2VsZWN0aW9uVHlwZSB7CisgICAgICAgIGF1dG8gaXNVbm9yZGVyZWQgPSBbXSAoZG91YmxlIHgp
IHsKKyAgICAgICAgICAgIHJldHVybiB4ICE9IHg7CisgICAgICAgIH07CisgICAgICAgIHN3aXRj
aCAoY29uZGl0aW9uKSB7CisgICAgICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFs
OgorICAgICAgICAgICAgcmV0dXJuICFpc1Vub3JkZXJlZChhKSAmJiAhaXNVbm9yZGVyZWQoYikg
JiYgKGEgPT0gYikgPyBzZWxlY3Rpb25BIDogc2VsZWN0aW9uQjsKKyAgICAgICAgY2FzZSBNYWNy
b0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWw6CisgICAgICAgICAgICByZXR1cm4gIWlzVW5vcmRl
cmVkKGEpICYmICFpc1Vub3JkZXJlZChiKSAmJiAoYSAhPSBiKSA/IHNlbGVjdGlvbkEgOiBzZWxl
Y3Rpb25COworICAgICAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbjoK
KyAgICAgICAgICAgIHJldHVybiAhaXNVbm9yZGVyZWQoYSkgJiYgIWlzVW5vcmRlcmVkKGIpICYm
IChhID4gYikgPyBzZWxlY3Rpb25BIDogc2VsZWN0aW9uQjsKKyAgICAgICAgY2FzZSBNYWNyb0Fz
c2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsOgorICAgICAgICAgICAgcmV0dXJuICFp
c1Vub3JkZXJlZChhKSAmJiAhaXNVbm9yZGVyZWQoYikgJiYgKGEgPj0gYikgPyBzZWxlY3Rpb25B
IDogc2VsZWN0aW9uQjsKKyAgICAgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1Ro
YW46CisgICAgICAgICAgICByZXR1cm4gIWlzVW5vcmRlcmVkKGEpICYmICFpc1Vub3JkZXJlZChi
KSAmJiAoYSA8IGIpID8gc2VsZWN0aW9uQSA6IHNlbGVjdGlvbkI7CisgICAgICAgIGNhc2UgTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbDoKKyAgICAgICAgICAgIHJldHVybiAh
aXNVbm9yZGVyZWQoYSkgJiYgIWlzVW5vcmRlcmVkKGIpICYmIChhIDw9IGIpID8gc2VsZWN0aW9u
QSA6IHNlbGVjdGlvbkI7CisgICAgICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFs
T3JVbm9yZGVyZWQ6CisgICAgICAgICAgICByZXR1cm4gaXNVbm9yZGVyZWQoYSkgfHwgaXNVbm9y
ZGVyZWQoYikgfHwgKGEgPT0gYikgPyBzZWxlY3Rpb25BIDogc2VsZWN0aW9uQjsKKyAgICAgICAg
Y2FzZSBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxPclVub3JkZXJlZDoKKyAgICAgICAg
ICAgIHJldHVybiBpc1Vub3JkZXJlZChhKSB8fCBpc1Vub3JkZXJlZChiKSB8fCAoYSAhPSBiKSA/
IHNlbGVjdGlvbkEgOiBzZWxlY3Rpb25COworICAgICAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpE
b3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkOgorICAgICAgICAgICAgcmV0dXJuIGlzVW5vcmRl
cmVkKGEpIHx8IGlzVW5vcmRlcmVkKGIpIHx8IChhID4gYikgPyBzZWxlY3Rpb25BIDogc2VsZWN0
aW9uQjsKKyAgICAgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVx
dWFsT3JVbm9yZGVyZWQ6CisgICAgICAgICAgICByZXR1cm4gaXNVbm9yZGVyZWQoYSkgfHwgaXNV
bm9yZGVyZWQoYikgfHwgKGEgPj0gYikgPyBzZWxlY3Rpb25BIDogc2VsZWN0aW9uQjsKKyAgICAg
ICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PclVub3JkZXJlZDoKKyAgICAg
ICAgICAgIHJldHVybiBpc1Vub3JkZXJlZChhKSB8fCBpc1Vub3JkZXJlZChiKSB8fCAoYSA8IGIp
ID8gc2VsZWN0aW9uQSA6IHNlbGVjdGlvbkI7CisgICAgICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6
OkRvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkOgorICAgICAgICAgICAgcmV0dXJuIGlz
VW5vcmRlcmVkKGEpIHx8IGlzVW5vcmRlcmVkKGIpIHx8IChhIDw9IGIpID8gc2VsZWN0aW9uQSA6
IHNlbGVjdGlvbkI7CisgICAgICAgIH0gLy8gc3dpdGNoCisgICAgfTsKKworICAgIGZvciAoYXV0
byBhIDogb3BlcmFuZHMpIHsKKyAgICAgICAgZm9yIChhdXRvIGIgOiBvcGVyYW5kcykgeworICAg
ICAgICAgICAgYXJnMSA9IGE7CisgICAgICAgICAgICBhcmcyID0gYjsKKyAgICAgICAgICAgIENI
RUNLX0VRKGludm9rZTxTZWxlY3Rpb25UeXBlPih0ZXN0Q29kZSksIGV4cGVjdGVkUmVzdWx0KGEs
IGIpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0TW92ZUNvbmRpdGlvbmFsbHlE
b3VibGUyKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24gY29uZGl0aW9uKQoreworICAg
IGRvdWJsZSBhcmcxID0gMDsKKyAgICBkb3VibGUgYXJnMiA9IDA7CisgICAgdW5zaWduZWQgc2Vs
ZWN0aW9uQSA9IDQyOworICAgIHVuc2lnbmVkIHNlbGVjdGlvbkIgPSAxNzsKKworICAgIGF1dG8g
dGVzdENvZGUgPSBjb21waWxlKFsmLCBjb25kaXRpb25dIChDQ2FsbEhlbHBlcnMmIGppdCkgewor
ICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgIEdQUlJlZyBkZXN0
R1BSID0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFI7CisgICAgICAgIEdQUlJlZyBzZWxlY3Rpb25B
R1BSID0gR1BSSW5mbzo6YXJndW1lbnRHUFIyOworICAgICAgICBSRUxFQVNFX0FTU0VSVChkZXN0
R1BSICE9IHNlbGVjdGlvbkFHUFIpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihzZWxlY3Rpb25BKSwgc2VsZWN0aW9uQUdQUik7CisgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNlbGVjdGlvbkIpLCBkZXN0R1BSKTsKKworICAg
ICAgICBqaXQubG9hZERvdWJsZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmFyZzEpLCBG
UFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKCZhcmcyKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgIGppdC5tb3Zl
Q29uZGl0aW9uYWxseURvdWJsZShjb25kaXRpb24sIEZQUkluZm86OmZwUmVnVDAsIEZQUkluZm86
OmZwUmVnVDEsIHNlbGVjdGlvbkFHUFIsIGRlc3RHUFIpOworCisgICAgICAgIGVtaXRGdW5jdGlv
bkVwaWxvZ3VlKGppdCk7CisgICAgICAgIGppdC5yZXQoKTsKKyAgICB9KTsKKworICAgIHRlc3RN
b3ZlQ29uZGl0aW9uYWxseUZsb2F0aW5nUG9pbnQoY29uZGl0aW9uLCB0ZXN0Q29kZSwgYXJnMSwg
YXJnMiwgZG91YmxlT3BlcmFuZHMoKSwgc2VsZWN0aW9uQSwgc2VsZWN0aW9uQik7Cit9CisKK3Zv
aWQgdGVzdE1vdmVDb25kaXRpb25hbGx5RG91YmxlMyhNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29u
ZGl0aW9uIGNvbmRpdGlvbikKK3sKKyAgICBkb3VibGUgYXJnMSA9IDA7CisgICAgZG91YmxlIGFy
ZzIgPSAwOworICAgIHVuc2lnbmVkIHNlbGVjdGlvbkEgPSA0MjsKKyAgICB1bnNpZ25lZCBzZWxl
Y3Rpb25CID0gMTc7CisgICAgdW5zaWduZWQgY29ycnVwdGVkU2VsZWN0aW9uQSA9IDB4YmJhZDAw
MGE7CisgICAgdW5zaWduZWQgY29ycnVwdGVkU2VsZWN0aW9uQiA9IDB4YmJhZDAwMGI7CisKKyAg
ICBhdXRvIHRlc3RDb2RlID0gY29tcGlsZShbJiwgY29uZGl0aW9uXSAoQ0NhbGxIZWxwZXJzJiBq
aXQpIHsKKyAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICBHUFJS
ZWcgZGVzdEdQUiA9IEdQUkluZm86OnJldHVyblZhbHVlR1BSOworICAgICAgICBHUFJSZWcgc2Vs
ZWN0aW9uQUdQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMjsKKyAgICAgICAgR1BSUmVnIHNlbGVj
dGlvbkJHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjM7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGRlc3RHUFIgIT0gc2VsZWN0aW9uQUdQUik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRlc3RH
UFIgIT0gc2VsZWN0aW9uQkdQUik7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKHNlbGVjdGlvbkEpLCBzZWxlY3Rpb25BR1BSKTsKKyAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2VsZWN0aW9uQiksIHNlbGVjdGlvbkJHUFIpOwor
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtMSksIGRlc3RHUFIp
OworCisgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigm
YXJnMSksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBqaXQubG9hZERvdWJsZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoJmFyZzIpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAg
aml0Lm1vdmVDb25kaXRpb25hbGx5RG91YmxlKGNvbmRpdGlvbiwgRlBSSW5mbzo6ZnBSZWdUMCwg
RlBSSW5mbzo6ZnBSZWdUMSwgc2VsZWN0aW9uQUdQUiwgc2VsZWN0aW9uQkdQUiwgZGVzdEdQUik7
CisKKyAgICAgICAgYXV0byBhSXNVbmNoYW5nZWQgPSBqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJz
OjpFcXVhbCwgc2VsZWN0aW9uQUdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2VsZWN0
aW9uQSkpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjb3Jy
dXB0ZWRTZWxlY3Rpb25BKSwgZGVzdEdQUik7CisgICAgICAgIGFJc1VuY2hhbmdlZC5saW5rKCZq
aXQpOworCisgICAgICAgIGF1dG8gYklzVW5jaGFuZ2VkID0gaml0LmJyYW5jaDMyKENDYWxsSGVs
cGVyczo6RXF1YWwsIHNlbGVjdGlvbkJHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNl
bGVjdGlvbkIpKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
Y29ycnVwdGVkU2VsZWN0aW9uQiksIGRlc3RHUFIpOworICAgICAgICBiSXNVbmNoYW5nZWQubGlu
aygmaml0KTsKKworICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICBq
aXQucmV0KCk7CisgICAgfSk7CisKKyAgICB0ZXN0TW92ZUNvbmRpdGlvbmFsbHlGbG9hdGluZ1Bv
aW50KGNvbmRpdGlvbiwgdGVzdENvZGUsIGFyZzEsIGFyZzIsIGRvdWJsZU9wZXJhbmRzKCksIHNl
bGVjdGlvbkEsIHNlbGVjdGlvbkIpOworfQorCit2b2lkIHRlc3RNb3ZlQ29uZGl0aW9uYWxseURv
dWJsZTNEZXN0U2FtZUFzVGhlbkNhc2UoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBj
b25kaXRpb24pCit7CisgICAgZG91YmxlIGFyZzEgPSAwOworICAgIGRvdWJsZSBhcmcyID0gMDsK
KyAgICB1bnNpZ25lZCBzZWxlY3Rpb25BID0gNDI7CisgICAgdW5zaWduZWQgc2VsZWN0aW9uQiA9
IDE3OworICAgIHVuc2lnbmVkIGNvcnJ1cHRlZFNlbGVjdGlvbkIgPSAweGJiYWQwMDBiOworCisg
ICAgYXV0byB0ZXN0Q29kZSA9IGNvbXBpbGUoWyYsIGNvbmRpdGlvbl0gKENDYWxsSGVscGVycyYg
aml0KSB7CisgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgR1BS
UmVnIGRlc3RHUFIgPSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjsKKyAgICAgICAgR1BSUmVnIHNl
bGVjdGlvbkFHUFIgPSBkZXN0R1BSOworICAgICAgICBHUFJSZWcgc2VsZWN0aW9uQkdQUiA9IEdQ
UkluZm86OmFyZ3VtZW50R1BSMzsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGVzdEdQUiA9PSBz
ZWxlY3Rpb25BR1BSKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGVzdEdQUiAhPSBzZWxlY3Rp
b25CR1BSKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2Vs
ZWN0aW9uQSksIHNlbGVjdGlvbkFHUFIpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihzZWxlY3Rpb25CKSwgc2VsZWN0aW9uQkdQUik7CisKKyAgICAgICAgaml0
LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZhcmcxKSwgRlBSSW5mbzo6
ZnBSZWdUMCk7CisgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cigmYXJnMiksIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICBqaXQubW92ZUNvbmRpdGlv
bmFsbHlEb3VibGUoY29uZGl0aW9uLCBGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1Qx
LCBzZWxlY3Rpb25BR1BSLCBzZWxlY3Rpb25CR1BSLCBkZXN0R1BSKTsKKworICAgICAgICBhdXRv
IGJJc1VuY2hhbmdlZCA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBzZWxlY3Rp
b25CR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzZWxlY3Rpb25CKSk7CisgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNvcnJ1cHRlZFNlbGVjdGlvbkIp
LCBkZXN0R1BSKTsKKyAgICAgICAgYklzVW5jaGFuZ2VkLmxpbmsoJmppdCk7CisKKyAgICAgICAg
ZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgaml0LnJldCgpOworICAgIH0pOwor
CisgICAgdGVzdE1vdmVDb25kaXRpb25hbGx5RmxvYXRpbmdQb2ludChjb25kaXRpb24sIHRlc3RD
b2RlLCBhcmcxLCBhcmcyLCBkb3VibGVPcGVyYW5kcygpLCBzZWxlY3Rpb25BLCBzZWxlY3Rpb25C
KTsKK30KKwordm9pZCB0ZXN0TW92ZUNvbmRpdGlvbmFsbHlEb3VibGUzRGVzdFNhbWVBc0Vsc2VD
YXNlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24gY29uZGl0aW9uKQoreworICAgIGRv
dWJsZSBhcmcxID0gMDsKKyAgICBkb3VibGUgYXJnMiA9IDA7CisgICAgdW5zaWduZWQgc2VsZWN0
aW9uQSA9IDQyOworICAgIHVuc2lnbmVkIHNlbGVjdGlvbkIgPSAxNzsKKyAgICB1bnNpZ25lZCBj
b3JydXB0ZWRTZWxlY3Rpb25BID0gMHhiYmFkMDAwYTsKKworICAgIGF1dG8gdGVzdENvZGUgPSBj
b21waWxlKFsmLCBjb25kaXRpb25dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICBlbWl0
RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgIEdQUlJlZyBkZXN0R1BSID0gR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFI7CisgICAgICAgIEdQUlJlZyBzZWxlY3Rpb25BR1BSID0gR1BSSW5m
bzo6YXJndW1lbnRHUFIyOworICAgICAgICBHUFJSZWcgc2VsZWN0aW9uQkdQUiA9IGRlc3RHUFI7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRlc3RHUFIgIT0gc2VsZWN0aW9uQUdQUik7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGRlc3RHUFIgPT0gc2VsZWN0aW9uQkdQUik7CisgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNlbGVjdGlvbkEpLCBzZWxlY3Rpb25B
R1BSKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2VsZWN0
aW9uQiksIHNlbGVjdGlvbkJHUFIpOworCisgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cigmYXJnMSksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBq
aXQubG9hZERvdWJsZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmFyZzIpLCBGUFJJbmZv
OjpmcFJlZ1QxKTsKKyAgICAgICAgaml0Lm1vdmVDb25kaXRpb25hbGx5RG91YmxlKGNvbmRpdGlv
biwgRlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMSwgc2VsZWN0aW9uQUdQUiwgc2Vs
ZWN0aW9uQkdQUiwgZGVzdEdQUik7CisKKyAgICAgICAgYXV0byBhSXNVbmNoYW5nZWQgPSBqaXQu
YnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgc2VsZWN0aW9uQUdQUiwgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoc2VsZWN0aW9uQSkpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihjb3JydXB0ZWRTZWxlY3Rpb25BKSwgZGVzdEdQUik7CisgICAgICAg
IGFJc1VuY2hhbmdlZC5saW5rKCZqaXQpOworCisgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3Vl
KGppdCk7CisgICAgICAgIGppdC5yZXQoKTsKKyAgICB9KTsKKworICAgIHRlc3RNb3ZlQ29uZGl0
aW9uYWxseUZsb2F0aW5nUG9pbnQoY29uZGl0aW9uLCB0ZXN0Q29kZSwgYXJnMSwgYXJnMiwgZG91
YmxlT3BlcmFuZHMoKSwgc2VsZWN0aW9uQSwgc2VsZWN0aW9uQik7Cit9CisKK3ZvaWQgdGVzdE1v
dmVDb25kaXRpb25hbGx5RmxvYXQyKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24gY29u
ZGl0aW9uKQoreworICAgIGZsb2F0IGFyZzEgPSAwOworICAgIGZsb2F0IGFyZzIgPSAwOworICAg
IHVuc2lnbmVkIHNlbGVjdGlvbkEgPSA0MjsKKyAgICB1bnNpZ25lZCBzZWxlY3Rpb25CID0gMTc7
CisKKyAgICBhdXRvIHRlc3RDb2RlID0gY29tcGlsZShbJiwgY29uZGl0aW9uXSAoQ0NhbGxIZWxw
ZXJzJiBqaXQpIHsKKyAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAg
ICBHUFJSZWcgZGVzdEdQUiA9IEdQUkluZm86OnJldHVyblZhbHVlR1BSOworICAgICAgICBHUFJS
ZWcgc2VsZWN0aW9uQUdQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMjsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoZGVzdEdQUiAhPSBzZWxlY3Rpb25BR1BSKTsKKyAgICAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2VsZWN0aW9uQSksIHNlbGVjdGlvbkFHUFIpOworICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzZWxlY3Rpb25CKSwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgIGppdC5sb2FkRmxvYXQoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKCZhcmcxKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgIGpp
dC5sb2FkRmxvYXQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZhcmcyKSwgRlBSSW5mbzo6
ZnBSZWdUMSk7CisgICAgICAgIGppdC5tb3ZlQ29uZGl0aW9uYWxseUZsb2F0KGNvbmRpdGlvbiwg
RlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMSwgc2VsZWN0aW9uQUdQUiwgZGVzdEdQ
Uik7CisKKyAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgaml0LnJl
dCgpOworICAgIH0pOworCisgICAgdGVzdE1vdmVDb25kaXRpb25hbGx5RmxvYXRpbmdQb2ludChj
b25kaXRpb24sIHRlc3RDb2RlLCBhcmcxLCBhcmcyLCBmbG9hdE9wZXJhbmRzKCksIHNlbGVjdGlv
bkEsIHNlbGVjdGlvbkIpOworfQorCit2b2lkIHRlc3RNb3ZlQ29uZGl0aW9uYWxseUZsb2F0MyhN
YWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbikKK3sKKyAgICBmbG9hdCBh
cmcxID0gMDsKKyAgICBmbG9hdCBhcmcyID0gMDsKKyAgICB1bnNpZ25lZCBzZWxlY3Rpb25BID0g
NDI7CisgICAgdW5zaWduZWQgc2VsZWN0aW9uQiA9IDE3OworICAgIHVuc2lnbmVkIGNvcnJ1cHRl
ZFNlbGVjdGlvbkEgPSAweGJiYWQwMDBhOworICAgIHVuc2lnbmVkIGNvcnJ1cHRlZFNlbGVjdGlv
bkIgPSAweGJiYWQwMDBiOworCisgICAgYXV0byB0ZXN0Q29kZSA9IGNvbXBpbGUoWyYsIGNvbmRp
dGlvbl0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3Vl
KGppdCk7CisKKyAgICAgICAgR1BSUmVnIGRlc3RHUFIgPSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UjsKKyAgICAgICAgR1BSUmVnIHNlbGVjdGlvbkFHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjI7
CisgICAgICAgIEdQUlJlZyBzZWxlY3Rpb25CR1BSID0gR1BSSW5mbzo6YXJndW1lbnRHUFIzOwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChkZXN0R1BSICE9IHNlbGVjdGlvbkFHUFIpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChkZXN0R1BSICE9IHNlbGVjdGlvbkJHUFIpOworICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzZWxlY3Rpb25BKSwgc2VsZWN0aW9uQUdQ
Uik7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNlbGVjdGlv
bkIpLCBzZWxlY3Rpb25CR1BSKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoLTEpLCBkZXN0R1BSKTsKKworICAgICAgICBqaXQubG9hZEZsb2F0KENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cigmYXJnMSksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBq
aXQubG9hZEZsb2F0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmYXJnMiksIEZQUkluZm86
OmZwUmVnVDEpOworICAgICAgICBqaXQubW92ZUNvbmRpdGlvbmFsbHlGbG9hdChjb25kaXRpb24s
IEZQUkluZm86OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDEsIHNlbGVjdGlvbkFHUFIsIHNlbGVj
dGlvbkJHUFIsIGRlc3RHUFIpOworCisgICAgICAgIGF1dG8gYUlzVW5jaGFuZ2VkID0gaml0LmJy
YW5jaDMyKENDYWxsSGVscGVyczo6RXF1YWwsIHNlbGVjdGlvbkFHUFIsIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKHNlbGVjdGlvbkEpKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoY29ycnVwdGVkU2VsZWN0aW9uQSksIGRlc3RHUFIpOworICAgICAgICBh
SXNVbmNoYW5nZWQubGluaygmaml0KTsKKworICAgICAgICBhdXRvIGJJc1VuY2hhbmdlZCA9IGpp
dC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBzZWxlY3Rpb25CR1BSLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihzZWxlY3Rpb25CKSk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKGNvcnJ1cHRlZFNlbGVjdGlvbkIpLCBkZXN0R1BSKTsKKyAgICAg
ICAgYklzVW5jaGFuZ2VkLmxpbmsoJmppdCk7CisKKyAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9n
dWUoaml0KTsKKyAgICAgICAgaml0LnJldCgpOworICAgIH0pOworCisgICAgdGVzdE1vdmVDb25k
aXRpb25hbGx5RmxvYXRpbmdQb2ludChjb25kaXRpb24sIHRlc3RDb2RlLCBhcmcxLCBhcmcyLCBm
bG9hdE9wZXJhbmRzKCksIHNlbGVjdGlvbkEsIHNlbGVjdGlvbkIpOworfQorCit2b2lkIHRlc3RN
b3ZlQ29uZGl0aW9uYWxseUZsb2F0M0Rlc3RTYW1lQXNUaGVuQ2FzZShNYWNyb0Fzc2VtYmxlcjo6
RG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbikKK3sKKyAgICBmbG9hdCBhcmcxID0gMDsKKyAgICBm
bG9hdCBhcmcyID0gMDsKKyAgICB1bnNpZ25lZCBzZWxlY3Rpb25BID0gNDI7CisgICAgdW5zaWdu
ZWQgc2VsZWN0aW9uQiA9IDE3OworICAgIHVuc2lnbmVkIGNvcnJ1cHRlZFNlbGVjdGlvbkIgPSAw
eGJiYWQwMDBiOworCisgICAgYXV0byB0ZXN0Q29kZSA9IGNvbXBpbGUoWyYsIGNvbmRpdGlvbl0g
KENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7
CisKKyAgICAgICAgR1BSUmVnIGRlc3RHUFIgPSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjsKKyAg
ICAgICAgR1BSUmVnIHNlbGVjdGlvbkFHUFIgPSBkZXN0R1BSOworICAgICAgICBHUFJSZWcgc2Vs
ZWN0aW9uQkdQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMzsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoZGVzdEdQUiA9PSBzZWxlY3Rpb25BR1BSKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGVz
dEdQUiAhPSBzZWxlY3Rpb25CR1BSKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoc2VsZWN0aW9uQSksIHNlbGVjdGlvbkFHUFIpOworICAgICAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzZWxlY3Rpb25CKSwgc2VsZWN0aW9uQkdQUik7
CisKKyAgICAgICAgaml0LmxvYWRGbG9hdChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmFy
ZzEpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWRGbG9hdChDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoJmFyZzIpLCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgaml0
Lm1vdmVDb25kaXRpb25hbGx5RmxvYXQoY29uZGl0aW9uLCBGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJ
bmZvOjpmcFJlZ1QxLCBzZWxlY3Rpb25BR1BSLCBzZWxlY3Rpb25CR1BSLCBkZXN0R1BSKTsKKwor
ICAgICAgICBhdXRvIGJJc1VuY2hhbmdlZCA9IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkVx
dWFsLCBzZWxlY3Rpb25CR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzZWxlY3Rpb25C
KSk7CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNvcnJ1cHRl
ZFNlbGVjdGlvbkIpLCBkZXN0R1BSKTsKKyAgICAgICAgYklzVW5jaGFuZ2VkLmxpbmsoJmppdCk7
CisKKyAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgaml0LnJldCgp
OworICAgIH0pOworCisgICAgdGVzdE1vdmVDb25kaXRpb25hbGx5RmxvYXRpbmdQb2ludChjb25k
aXRpb24sIHRlc3RDb2RlLCBhcmcxLCBhcmcyLCBmbG9hdE9wZXJhbmRzKCksIHNlbGVjdGlvbkEs
IHNlbGVjdGlvbkIpOworfQorCit2b2lkIHRlc3RNb3ZlQ29uZGl0aW9uYWxseUZsb2F0M0Rlc3RT
YW1lQXNFbHNlQ2FzZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbikK
K3sKKyAgICBmbG9hdCBhcmcxID0gMDsKKyAgICBmbG9hdCBhcmcyID0gMDsKKyAgICB1bnNpZ25l
ZCBzZWxlY3Rpb25BID0gNDI7CisgICAgdW5zaWduZWQgc2VsZWN0aW9uQiA9IDE3OworICAgIHVu
c2lnbmVkIGNvcnJ1cHRlZFNlbGVjdGlvbkEgPSAweGJiYWQwMDBhOworCisgICAgYXV0byB0ZXN0
Q29kZSA9IGNvbXBpbGUoWyYsIGNvbmRpdGlvbl0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAg
ICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgR1BSUmVnIGRlc3RHUFIg
PSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjsKKyAgICAgICAgR1BSUmVnIHNlbGVjdGlvbkFHUFIg
PSBHUFJJbmZvOjphcmd1bWVudEdQUjI7CisgICAgICAgIEdQUlJlZyBzZWxlY3Rpb25CR1BSID0g
ZGVzdEdQUjsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGVzdEdQUiAhPSBzZWxlY3Rpb25BR1BS
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGVzdEdQUiA9PSBzZWxlY3Rpb25CR1BSKTsKKyAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2VsZWN0aW9uQSksIHNl
bGVjdGlvbkFHUFIpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihzZWxlY3Rpb25CKSwgc2VsZWN0aW9uQkdQUik7CisKKyAgICAgICAgaml0LmxvYWRGbG9hdChD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmFyZzEpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAg
ICAgICAgaml0LmxvYWRGbG9hdChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmFyZzIpLCBG
UFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgaml0Lm1vdmVDb25kaXRpb25hbGx5RmxvYXQoY29u
ZGl0aW9uLCBGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QxLCBzZWxlY3Rpb25BR1BS
LCBzZWxlY3Rpb25CR1BSLCBkZXN0R1BSKTsKKworICAgICAgICBhdXRvIGFJc1VuY2hhbmdlZCA9
IGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkVxdWFsLCBzZWxlY3Rpb25BR1BSLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihzZWxlY3Rpb25BKSk7CisgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKGNvcnJ1cHRlZFNlbGVjdGlvbkEpLCBkZXN0R1BSKTsKKyAg
ICAgICAgYUlzVW5jaGFuZ2VkLmxpbmsoJmppdCk7CisKKyAgICAgICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoaml0KTsKKyAgICAgICAgaml0LnJldCgpOworICAgIH0pOworCisgICAgdGVzdE1vdmVD
b25kaXRpb25hbGx5RmxvYXRpbmdQb2ludChjb25kaXRpb24sIHRlc3RDb2RlLCBhcmcxLCBhcmcy
LCBmbG9hdE9wZXJhbmRzKCksIHNlbGVjdGlvbkEsIHNlbGVjdGlvbkIpOworfQorCit2b2lkIHRl
c3RNb3ZlRG91YmxlQ29uZGl0aW9uYWxseURvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29u
ZGl0aW9uIGNvbmRpdGlvbikKK3sKKyAgICBkb3VibGUgYXJnMSA9IDA7CisgICAgZG91YmxlIGFy
ZzIgPSAwOworICAgIGRvdWJsZSBzZWxlY3Rpb25BID0gNDIuMDsKKyAgICBkb3VibGUgc2VsZWN0
aW9uQiA9IDE3LjA7CisgICAgZG91YmxlIGNvcnJ1cHRlZFNlbGVjdGlvbkEgPSA1NTU1NTsKKyAg
ICBkb3VibGUgY29ycnVwdGVkU2VsZWN0aW9uQiA9IDY2NjY2OworCisgICAgYXV0byB0ZXN0Q29k
ZSA9IGNvbXBpbGUoWyYsIGNvbmRpdGlvbl0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAg
IGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgRlBSUmVnIGRlc3RGUFIgPSBG
UFJJbmZvOjpyZXR1cm5WYWx1ZUZQUjsKKyAgICAgICAgRlBSUmVnIHNlbGVjdGlvbkFGUFIgPSBG
UFJJbmZvOjpmcFJlZ1QxOworICAgICAgICBGUFJSZWcgc2VsZWN0aW9uQkZQUiA9IEZQUkluZm86
OmZwUmVnVDI7CisgICAgICAgIEZQUlJlZyBhcmcxRlBSID0gRlBSSW5mbzo6ZnBSZWdUMzsKKyAg
ICAgICAgRlBSUmVnIGFyZzJGUFIgPSBGUFJJbmZvOjpmcFJlZ1Q0OworCisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGRlc3RGUFIgIT0gc2VsZWN0aW9uQUZQUik7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGRlc3RGUFIgIT0gc2VsZWN0aW9uQkZQUik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRl
c3RGUFIgIT0gYXJnMUZQUik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRlc3RGUFIgIT0gYXJn
MkZQUik7CisKKyAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKCZhcmcxKSwgYXJnMUZQUik7CisgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cigmYXJnMiksIGFyZzJGUFIpOworICAgICAgICBqaXQubG9hZERvdWJs
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnNlbGVjdGlvbkEpLCBzZWxlY3Rpb25BRlBS
KTsKKyAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZz
ZWxlY3Rpb25CKSwgc2VsZWN0aW9uQkZQUik7CisgICAgICAgIGppdC5tb3ZlRG91YmxlQ29uZGl0
aW9uYWxseURvdWJsZShjb25kaXRpb24sIGFyZzFGUFIsIGFyZzJGUFIsIHNlbGVjdGlvbkFGUFIs
IHNlbGVjdGlvbkJGUFIsIGRlc3RGUFIpOworCisgICAgICAgIEZQUlJlZyB0ZW1wRlBSID0gRlBS
SW5mbzo6ZnBSZWdUNTsKKyAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKCZzZWxlY3Rpb25BKSwgdGVtcEZQUik7CisgICAgICAgIGF1dG8gYUlzVW5jaGFu
Z2VkID0gaml0LmJyYW5jaERvdWJsZShDQ2FsbEhlbHBlcnM6OkRvdWJsZUVxdWFsLCBzZWxlY3Rp
b25BRlBSLCB0ZW1wRlBSKTsKKyAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKCZjb3JydXB0ZWRTZWxlY3Rpb25BKSwgZGVzdEZQUik7CisgICAgICAgIGFJ
c1VuY2hhbmdlZC5saW5rKCZqaXQpOworCisgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cigmc2VsZWN0aW9uQiksIHRlbXBGUFIpOworICAgICAgICBhdXRv
IGJJc1VuY2hhbmdlZCA9IGppdC5icmFuY2hEb3VibGUoQ0NhbGxIZWxwZXJzOjpEb3VibGVFcXVh
bCwgc2VsZWN0aW9uQkZQUiwgdGVtcEZQUik7CisgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cigmY29ycnVwdGVkU2VsZWN0aW9uQiksIGRlc3RGUFIpOwor
ICAgICAgICBiSXNVbmNoYW5nZWQubGluaygmaml0KTsKKworICAgICAgICBlbWl0RnVuY3Rpb25F
cGlsb2d1ZShqaXQpOworICAgICAgICBqaXQucmV0KCk7CisgICAgfSk7CisKKyAgICB0ZXN0TW92
ZUNvbmRpdGlvbmFsbHlGbG9hdGluZ1BvaW50KGNvbmRpdGlvbiwgdGVzdENvZGUsIGFyZzEsIGFy
ZzIsIGRvdWJsZU9wZXJhbmRzKCksIHNlbGVjdGlvbkEsIHNlbGVjdGlvbkIpOworfQorCit2b2lk
IHRlc3RNb3ZlRG91YmxlQ29uZGl0aW9uYWxseURvdWJsZURlc3RTYW1lQXNUaGVuQ2FzZShNYWNy
b0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbikKK3sKKyAgICBkb3VibGUgYXJn
MSA9IDA7CisgICAgZG91YmxlIGFyZzIgPSAwOworICAgIGRvdWJsZSBzZWxlY3Rpb25BID0gNDIu
MDsKKyAgICBkb3VibGUgc2VsZWN0aW9uQiA9IDE3LjA7CisgICAgZG91YmxlIGNvcnJ1cHRlZFNl
bGVjdGlvbkIgPSA2NjY2NjsKKworICAgIGF1dG8gdGVzdENvZGUgPSBjb21waWxlKFsmLCBjb25k
aXRpb25dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1
ZShqaXQpOworCisgICAgICAgIEZQUlJlZyBkZXN0RlBSID0gRlBSSW5mbzo6cmV0dXJuVmFsdWVG
UFI7CisgICAgICAgIEZQUlJlZyBzZWxlY3Rpb25BRlBSID0gZGVzdEZQUjsKKyAgICAgICAgRlBS
UmVnIHNlbGVjdGlvbkJGUFIgPSBGUFJJbmZvOjpmcFJlZ1QyOworICAgICAgICBGUFJSZWcgYXJn
MUZQUiA9IEZQUkluZm86OmZwUmVnVDM7CisgICAgICAgIEZQUlJlZyBhcmcyRlBSID0gRlBSSW5m
bzo6ZnBSZWdUNDsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChkZXN0RlBSID09IHNlbGVjdGlv
bkFGUFIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChkZXN0RlBSICE9IHNlbGVjdGlvbkJGUFIp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVChkZXN0RlBSICE9IGFyZzFGUFIpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChkZXN0RlBSICE9IGFyZzJGUFIpOworCisgICAgICAgIGppdC5sb2FkRG91
YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmYXJnMSksIGFyZzFGUFIpOworICAgICAg
ICBqaXQubG9hZERvdWJsZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmFyZzIpLCBhcmcy
RlBSKTsKKyAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KCZzZWxlY3Rpb25BKSwgc2VsZWN0aW9uQUZQUik7CisgICAgICAgIGppdC5sb2FkRG91YmxlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmc2VsZWN0aW9uQiksIHNlbGVjdGlvbkJGUFIpOwor
ICAgICAgICBqaXQubW92ZURvdWJsZUNvbmRpdGlvbmFsbHlEb3VibGUoY29uZGl0aW9uLCBhcmcx
RlBSLCBhcmcyRlBSLCBzZWxlY3Rpb25BRlBSLCBzZWxlY3Rpb25CRlBSLCBkZXN0RlBSKTsKKwor
ICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IEZQUkluZm86OmZwUmVnVDU7CisgICAgICAgIGppdC5s
b2FkRG91YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmc2VsZWN0aW9uQiksIHRlbXBG
UFIpOworICAgICAgICBhdXRvIGJJc1VuY2hhbmdlZCA9IGppdC5icmFuY2hEb3VibGUoQ0NhbGxI
ZWxwZXJzOjpEb3VibGVFcXVhbCwgc2VsZWN0aW9uQkZQUiwgdGVtcEZQUik7CisgICAgICAgIGpp
dC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY29ycnVwdGVkU2VsZWN0
aW9uQiksIGRlc3RGUFIpOworICAgICAgICBiSXNVbmNoYW5nZWQubGluaygmaml0KTsKKworICAg
ICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICBqaXQucmV0KCk7CisgICAg
fSk7CisKKyAgICB0ZXN0TW92ZUNvbmRpdGlvbmFsbHlGbG9hdGluZ1BvaW50KGNvbmRpdGlvbiwg
dGVzdENvZGUsIGFyZzEsIGFyZzIsIGRvdWJsZU9wZXJhbmRzKCksIHNlbGVjdGlvbkEsIHNlbGVj
dGlvbkIpOworfQorCit2b2lkIHRlc3RNb3ZlRG91YmxlQ29uZGl0aW9uYWxseURvdWJsZURlc3RT
YW1lQXNFbHNlQ2FzZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbikK
K3sKKyAgICBkb3VibGUgYXJnMSA9IDA7CisgICAgZG91YmxlIGFyZzIgPSAwOworICAgIGRvdWJs
ZSBzZWxlY3Rpb25BID0gNDIuMDsKKyAgICBkb3VibGUgc2VsZWN0aW9uQiA9IDE3LjA7CisgICAg
ZG91YmxlIGNvcnJ1cHRlZFNlbGVjdGlvbkEgPSA1NTU1NTsKKworICAgIGF1dG8gdGVzdENvZGUg
PSBjb21waWxlKFsmLCBjb25kaXRpb25dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICBl
bWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgIEZQUlJlZyBkZXN0RlBSID0gRlBS
SW5mbzo6cmV0dXJuVmFsdWVGUFI7CisgICAgICAgIEZQUlJlZyBzZWxlY3Rpb25BRlBSID0gRlBS
SW5mbzo6ZnBSZWdUMTsKKyAgICAgICAgRlBSUmVnIHNlbGVjdGlvbkJGUFIgPSBkZXN0RlBSOwor
ICAgICAgICBGUFJSZWcgYXJnMUZQUiA9IEZQUkluZm86OmZwUmVnVDM7CisgICAgICAgIEZQUlJl
ZyBhcmcyRlBSID0gRlBSSW5mbzo6ZnBSZWdUNDsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVChk
ZXN0RlBSICE9IHNlbGVjdGlvbkFGUFIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChkZXN0RlBS
ID09IHNlbGVjdGlvbkJGUFIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChkZXN0RlBSICE9IGFy
ZzFGUFIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChkZXN0RlBSICE9IGFyZzJGUFIpOworCisg
ICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmYXJnMSks
IGFyZzFGUFIpOworICAgICAgICBqaXQubG9hZERvdWJsZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoJmFyZzIpLCBhcmcyRlBSKTsKKyAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKCZzZWxlY3Rpb25BKSwgc2VsZWN0aW9uQUZQUik7CisgICAgICAg
IGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmc2VsZWN0aW9uQiks
IHNlbGVjdGlvbkJGUFIpOworICAgICAgICBqaXQubW92ZURvdWJsZUNvbmRpdGlvbmFsbHlEb3Vi
bGUoY29uZGl0aW9uLCBhcmcxRlBSLCBhcmcyRlBSLCBzZWxlY3Rpb25BRlBSLCBzZWxlY3Rpb25C
RlBSLCBkZXN0RlBSKTsKKworICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IEZQUkluZm86OmZwUmVn
VDU7CisgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigm
c2VsZWN0aW9uQSksIHRlbXBGUFIpOworICAgICAgICBhdXRvIGFJc1VuY2hhbmdlZCA9IGppdC5i
cmFuY2hEb3VibGUoQ0NhbGxIZWxwZXJzOjpEb3VibGVFcXVhbCwgc2VsZWN0aW9uQUZQUiwgdGVt
cEZQUik7CisgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cigmY29ycnVwdGVkU2VsZWN0aW9uQSksIGRlc3RGUFIpOworICAgICAgICBhSXNVbmNoYW5nZWQu
bGluaygmaml0KTsKKworICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAg
ICBqaXQucmV0KCk7CisgICAgfSk7CisKKyAgICB0ZXN0TW92ZUNvbmRpdGlvbmFsbHlGbG9hdGlu
Z1BvaW50KGNvbmRpdGlvbiwgdGVzdENvZGUsIGFyZzEsIGFyZzIsIGRvdWJsZU9wZXJhbmRzKCks
IHNlbGVjdGlvbkEsIHNlbGVjdGlvbkIpOworfQorCit2b2lkIHRlc3RNb3ZlRG91YmxlQ29uZGl0
aW9uYWxseUZsb2F0KE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24gY29uZGl0aW9uKQor
eworICAgIGZsb2F0IGFyZzEgPSAwOworICAgIGZsb2F0IGFyZzIgPSAwOworICAgIGRvdWJsZSBz
ZWxlY3Rpb25BID0gNDIuMDsKKyAgICBkb3VibGUgc2VsZWN0aW9uQiA9IDE3LjA7CisgICAgZG91
YmxlIGNvcnJ1cHRlZFNlbGVjdGlvbkEgPSA1NTU1NTsKKyAgICBkb3VibGUgY29ycnVwdGVkU2Vs
ZWN0aW9uQiA9IDY2NjY2OworCisgICAgYXV0byB0ZXN0Q29kZSA9IGNvbXBpbGUoWyYsIGNvbmRp
dGlvbl0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3Vl
KGppdCk7CisKKyAgICAgICAgRlBSUmVnIGRlc3RGUFIgPSBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQ
UjsKKyAgICAgICAgRlBSUmVnIHNlbGVjdGlvbkFGUFIgPSBGUFJJbmZvOjpmcFJlZ1QxOworICAg
ICAgICBGUFJSZWcgc2VsZWN0aW9uQkZQUiA9IEZQUkluZm86OmZwUmVnVDI7CisgICAgICAgIEZQ
UlJlZyBhcmcxRlBSID0gRlBSSW5mbzo6ZnBSZWdUMzsKKyAgICAgICAgRlBSUmVnIGFyZzJGUFIg
PSBGUFJJbmZvOjpmcFJlZ1Q0OworCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRlc3RGUFIgIT0g
c2VsZWN0aW9uQUZQUik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRlc3RGUFIgIT0gc2VsZWN0
aW9uQkZQUik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRlc3RGUFIgIT0gYXJnMUZQUik7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGRlc3RGUFIgIT0gYXJnMkZQUik7CisKKyAgICAgICAgaml0
LmxvYWRGbG9hdChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmFyZzEpLCBhcmcxRlBSKTsK
KyAgICAgICAgaml0LmxvYWRGbG9hdChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmFyZzIp
LCBhcmcyRlBSKTsKKyAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKCZzZWxlY3Rpb25BKSwgc2VsZWN0aW9uQUZQUik7CisgICAgICAgIGppdC5sb2FkRG91
YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmc2VsZWN0aW9uQiksIHNlbGVjdGlvbkJG
UFIpOworICAgICAgICBqaXQubW92ZURvdWJsZUNvbmRpdGlvbmFsbHlGbG9hdChjb25kaXRpb24s
IGFyZzFGUFIsIGFyZzJGUFIsIHNlbGVjdGlvbkFGUFIsIHNlbGVjdGlvbkJGUFIsIGRlc3RGUFIp
OworCisgICAgICAgIEZQUlJlZyB0ZW1wRlBSID0gRlBSSW5mbzo6ZnBSZWdUNTsKKyAgICAgICAg
aml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZzZWxlY3Rpb25BKSwg
dGVtcEZQUik7CisgICAgICAgIGF1dG8gYUlzVW5jaGFuZ2VkID0gaml0LmJyYW5jaERvdWJsZShD
Q2FsbEhlbHBlcnM6OkRvdWJsZUVxdWFsLCBzZWxlY3Rpb25BRlBSLCB0ZW1wRlBSKTsKKyAgICAg
ICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZjb3JydXB0ZWRT
ZWxlY3Rpb25BKSwgZGVzdEZQUik7CisgICAgICAgIGFJc1VuY2hhbmdlZC5saW5rKCZqaXQpOwor
CisgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmc2Vs
ZWN0aW9uQiksIHRlbXBGUFIpOworICAgICAgICBhdXRvIGJJc1VuY2hhbmdlZCA9IGppdC5icmFu
Y2hEb3VibGUoQ0NhbGxIZWxwZXJzOjpEb3VibGVFcXVhbCwgc2VsZWN0aW9uQkZQUiwgdGVtcEZQ
Uik7CisgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigm
Y29ycnVwdGVkU2VsZWN0aW9uQiksIGRlc3RGUFIpOworICAgICAgICBiSXNVbmNoYW5nZWQubGlu
aygmaml0KTsKKworICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICBq
aXQucmV0KCk7CisgICAgfSk7CisKKyAgICB0ZXN0TW92ZUNvbmRpdGlvbmFsbHlGbG9hdGluZ1Bv
aW50KGNvbmRpdGlvbiwgdGVzdENvZGUsIGFyZzEsIGFyZzIsIGZsb2F0T3BlcmFuZHMoKSwgc2Vs
ZWN0aW9uQSwgc2VsZWN0aW9uQik7Cit9CisKK3ZvaWQgdGVzdE1vdmVEb3VibGVDb25kaXRpb25h
bGx5RmxvYXREZXN0U2FtZUFzVGhlbkNhc2UoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlv
biBjb25kaXRpb24pCit7CisgICAgZmxvYXQgYXJnMSA9IDA7CisgICAgZmxvYXQgYXJnMiA9IDA7
CisgICAgZG91YmxlIHNlbGVjdGlvbkEgPSA0Mi4wOworICAgIGRvdWJsZSBzZWxlY3Rpb25CID0g
MTcuMDsKKyAgICBkb3VibGUgY29ycnVwdGVkU2VsZWN0aW9uQiA9IDY2NjY2OworCisgICAgYXV0
byB0ZXN0Q29kZSA9IGNvbXBpbGUoWyYsIGNvbmRpdGlvbl0gKENDYWxsSGVscGVycyYgaml0KSB7
CisgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgRlBSUmVnIGRl
c3RGUFIgPSBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUjsKKyAgICAgICAgRlBSUmVnIHNlbGVjdGlv
bkFGUFIgPSBkZXN0RlBSOworICAgICAgICBGUFJSZWcgc2VsZWN0aW9uQkZQUiA9IEZQUkluZm86
OmZwUmVnVDI7CisgICAgICAgIEZQUlJlZyBhcmcxRlBSID0gRlBSSW5mbzo6ZnBSZWdUMzsKKyAg
ICAgICAgRlBSUmVnIGFyZzJGUFIgPSBGUFJJbmZvOjpmcFJlZ1Q0OworCisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGRlc3RGUFIgPT0gc2VsZWN0aW9uQUZQUik7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGRlc3RGUFIgIT0gc2VsZWN0aW9uQkZQUik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRl
c3RGUFIgIT0gYXJnMUZQUik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRlc3RGUFIgIT0gYXJn
MkZQUik7CisKKyAgICAgICAgaml0LmxvYWRGbG9hdChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoJmFyZzEpLCBhcmcxRlBSKTsKKyAgICAgICAgaml0LmxvYWRGbG9hdChDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoJmFyZzIpLCBhcmcyRlBSKTsKKyAgICAgICAgaml0LmxvYWREb3VibGUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZzZWxlY3Rpb25BKSwgc2VsZWN0aW9uQUZQUik7
CisgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmc2Vs
ZWN0aW9uQiksIHNlbGVjdGlvbkJGUFIpOworICAgICAgICBqaXQubW92ZURvdWJsZUNvbmRpdGlv
bmFsbHlGbG9hdChjb25kaXRpb24sIGFyZzFGUFIsIGFyZzJGUFIsIHNlbGVjdGlvbkFGUFIsIHNl
bGVjdGlvbkJGUFIsIGRlc3RGUFIpOworCisgICAgICAgIEZQUlJlZyB0ZW1wRlBSID0gRlBSSW5m
bzo6ZnBSZWdUNTsKKyAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKCZzZWxlY3Rpb25CKSwgdGVtcEZQUik7CisgICAgICAgIGF1dG8gYklzVW5jaGFuZ2Vk
ID0gaml0LmJyYW5jaERvdWJsZShDQ2FsbEhlbHBlcnM6OkRvdWJsZUVxdWFsLCBzZWxlY3Rpb25C
RlBSLCB0ZW1wRlBSKTsKKyAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKCZjb3JydXB0ZWRTZWxlY3Rpb25CKSwgZGVzdEZQUik7CisgICAgICAgIGJJc1Vu
Y2hhbmdlZC5saW5rKCZqaXQpOworCisgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7
CisgICAgICAgIGppdC5yZXQoKTsKKyAgICB9KTsKKworICAgIHRlc3RNb3ZlQ29uZGl0aW9uYWxs
eUZsb2F0aW5nUG9pbnQoY29uZGl0aW9uLCB0ZXN0Q29kZSwgYXJnMSwgYXJnMiwgZmxvYXRPcGVy
YW5kcygpLCBzZWxlY3Rpb25BLCBzZWxlY3Rpb25CKTsKK30KKwordm9pZCB0ZXN0TW92ZURvdWJs
ZUNvbmRpdGlvbmFsbHlGbG9hdERlc3RTYW1lQXNFbHNlQ2FzZShNYWNyb0Fzc2VtYmxlcjo6RG91
YmxlQ29uZGl0aW9uIGNvbmRpdGlvbikKK3sKKyAgICBmbG9hdCBhcmcxID0gMDsKKyAgICBmbG9h
dCBhcmcyID0gMDsKKyAgICBkb3VibGUgc2VsZWN0aW9uQSA9IDQyLjA7CisgICAgZG91YmxlIHNl
bGVjdGlvbkIgPSAxNy4wOworICAgIGRvdWJsZSBjb3JydXB0ZWRTZWxlY3Rpb25BID0gNTU1NTU7
CisKKyAgICBhdXRvIHRlc3RDb2RlID0gY29tcGlsZShbJiwgY29uZGl0aW9uXSAoQ0NhbGxIZWxw
ZXJzJiBqaXQpIHsKKyAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAg
ICBGUFJSZWcgZGVzdEZQUiA9IEZQUkluZm86OnJldHVyblZhbHVlRlBSOworICAgICAgICBGUFJS
ZWcgc2VsZWN0aW9uQUZQUiA9IEZQUkluZm86OmZwUmVnVDE7CisgICAgICAgIEZQUlJlZyBzZWxl
Y3Rpb25CRlBSID0gZGVzdEZQUjsKKyAgICAgICAgRlBSUmVnIGFyZzFGUFIgPSBGUFJJbmZvOjpm
cFJlZ1QzOworICAgICAgICBGUFJSZWcgYXJnMkZQUiA9IEZQUkluZm86OmZwUmVnVDQ7CisKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoZGVzdEZQUiAhPSBzZWxlY3Rpb25BRlBSKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoZGVzdEZQUiA9PSBzZWxlY3Rpb25CRlBSKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoZGVzdEZQUiAhPSBhcmcxRlBSKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGVz
dEZQUiAhPSBhcmcyRlBSKTsKKworICAgICAgICBqaXQubG9hZEZsb2F0KENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cigmYXJnMSksIGFyZzFGUFIpOworICAgICAgICBqaXQubG9hZEZsb2F0KEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmYXJnMiksIGFyZzJGUFIpOworICAgICAgICBqaXQu
bG9hZERvdWJsZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnNlbGVjdGlvbkEpLCBzZWxl
Y3Rpb25BRlBSKTsKKyAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKCZzZWxlY3Rpb25CKSwgc2VsZWN0aW9uQkZQUik7CisgICAgICAgIGppdC5tb3ZlRG91
YmxlQ29uZGl0aW9uYWxseUZsb2F0KGNvbmRpdGlvbiwgYXJnMUZQUiwgYXJnMkZQUiwgc2VsZWN0
aW9uQUZQUiwgc2VsZWN0aW9uQkZQUiwgZGVzdEZQUik7CisKKyAgICAgICAgRlBSUmVnIHRlbXBG
UFIgPSBGUFJJbmZvOjpmcFJlZ1Q1OworICAgICAgICBqaXQubG9hZERvdWJsZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoJnNlbGVjdGlvbkEpLCB0ZW1wRlBSKTsKKyAgICAgICAgYXV0byBh
SXNVbmNoYW5nZWQgPSBqaXQuYnJhbmNoRG91YmxlKENDYWxsSGVscGVyczo6RG91YmxlRXF1YWws
IHNlbGVjdGlvbkFGUFIsIHRlbXBGUFIpOworICAgICAgICBqaXQubG9hZERvdWJsZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoJmNvcnJ1cHRlZFNlbGVjdGlvbkEpLCBkZXN0RlBSKTsKKyAg
ICAgICAgYUlzVW5jaGFuZ2VkLmxpbmsoJmppdCk7CisKKyAgICAgICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoaml0KTsKKyAgICAgICAgaml0LnJldCgpOworICAgIH0pOworCisgICAgdGVzdE1vdmVD
b25kaXRpb25hbGx5RmxvYXRpbmdQb2ludChjb25kaXRpb24sIHRlc3RDb2RlLCBhcmcxLCBhcmcy
LCBmbG9hdE9wZXJhbmRzKCksIHNlbGVjdGlvbkEsIHNlbGVjdGlvbkIpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBTZWxlY3Rpb25UeXBlPgordm9pZCB0ZXN0TW92ZUNvbmRp
dGlvbmFsbHlGbG9hdGluZ1BvaW50U2FtZUFyZyhNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0
aW9uIGNvbmRpdGlvbiwgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+
JiB0ZXN0Q29kZSwgVCYgYXJnMSwgY29uc3QgVmVjdG9yPFQ+IG9wZXJhbmRzLCBTZWxlY3Rpb25U
eXBlIHNlbGVjdGlvbkEsIFNlbGVjdGlvblR5cGUgc2VsZWN0aW9uQikKK3sKKyAgICBhdXRvIGV4
cGVjdGVkUmVzdWx0ID0gWyYsIGNvbmRpdGlvbl0gKFQgYSkgLT4gU2VsZWN0aW9uVHlwZSB7Cisg
ICAgICAgIGF1dG8gaXNVbm9yZGVyZWQgPSBbXSAoZG91YmxlIHgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB4ICE9IHg7CisgICAgICAgIH07CisgICAgICAgIHN3aXRjaCAoY29uZGl0aW9uKSB7Cisg
ICAgICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsOgorICAgICAgICAgICAgcmV0
dXJuICFpc1Vub3JkZXJlZChhKSAmJiAoYSA9PSBhKSA/IHNlbGVjdGlvbkEgOiBzZWxlY3Rpb25C
OworICAgICAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbDoKKyAgICAgICAg
ICAgIHJldHVybiAhaXNVbm9yZGVyZWQoYSkgJiYgKGEgIT0gYSkgPyBzZWxlY3Rpb25BIDogc2Vs
ZWN0aW9uQjsKKyAgICAgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW46
CisgICAgICAgICAgICByZXR1cm4gIWlzVW5vcmRlcmVkKGEpICYmIChhID4gYSkgPyBzZWxlY3Rp
b25BIDogc2VsZWN0aW9uQjsKKyAgICAgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3Jl
YXRlclRoYW5PckVxdWFsOgorICAgICAgICAgICAgcmV0dXJuICFpc1Vub3JkZXJlZChhKSAmJiAo
YSA+PSBhKSA/IHNlbGVjdGlvbkEgOiBzZWxlY3Rpb25COworICAgICAgICBjYXNlIE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVMZXNzVGhhbjoKKyAgICAgICAgICAgIHJldHVybiAhaXNVbm9yZGVyZWQo
YSkgJiYgKGEgPCBhKSA/IHNlbGVjdGlvbkEgOiBzZWxlY3Rpb25COworICAgICAgICBjYXNlIE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWw6CisgICAgICAgICAgICByZXR1cm4g
IWlzVW5vcmRlcmVkKGEpICYmIChhIDw9IGEpID8gc2VsZWN0aW9uQSA6IHNlbGVjdGlvbkI7Cisg
ICAgICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsT3JVbm9yZGVyZWQ6CisgICAg
ICAgICAgICByZXR1cm4gaXNVbm9yZGVyZWQoYSkgfHwgKGEgPT0gYSkgPyBzZWxlY3Rpb25BIDog
c2VsZWN0aW9uQjsKKyAgICAgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWxP
clVub3JkZXJlZDoKKyAgICAgICAgICAgIHJldHVybiBpc1Vub3JkZXJlZChhKSB8fCAoYSAhPSBh
KSA/IHNlbGVjdGlvbkEgOiBzZWxlY3Rpb25COworICAgICAgICBjYXNlIE1hY3JvQXNzZW1ibGVy
OjpEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkOgorICAgICAgICAgICAgcmV0dXJuIGlzVW5v
cmRlcmVkKGEpIHx8IChhID4gYSkgPyBzZWxlY3Rpb25BIDogc2VsZWN0aW9uQjsKKyAgICAgICAg
Y2FzZSBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQ6
CisgICAgICAgICAgICByZXR1cm4gaXNVbm9yZGVyZWQoYSkgfHwgKGEgPj0gYSkgPyBzZWxlY3Rp
b25BIDogc2VsZWN0aW9uQjsKKyAgICAgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVz
c1RoYW5PclVub3JkZXJlZDoKKyAgICAgICAgICAgIHJldHVybiBpc1Vub3JkZXJlZChhKSB8fCAo
YSA8IGEpID8gc2VsZWN0aW9uQSA6IHNlbGVjdGlvbkI7CisgICAgICAgIGNhc2UgTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkOgorICAgICAgICAgICAgcmV0
dXJuIGlzVW5vcmRlcmVkKGEpIHx8IChhIDw9IGEpID8gc2VsZWN0aW9uQSA6IHNlbGVjdGlvbkI7
CisgICAgICAgIH0gLy8gc3dpdGNoCisgICAgfTsKKworICAgIGZvciAoYXV0byBhIDogb3BlcmFu
ZHMpIHsKKyAgICAgICAgYXJnMSA9IGE7CisgICAgICAgIENIRUNLX0VRKGludm9rZTxTZWxlY3Rp
b25UeXBlPih0ZXN0Q29kZSksIGV4cGVjdGVkUmVzdWx0KGEpKTsKKyAgICB9Cit9CisKK3ZvaWQg
dGVzdE1vdmVDb25kaXRpb25hbGx5RG91YmxlMlNhbWVBcmcoTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUNvbmRpdGlvbiBjb25kaXRpb24pCit7CisgICAgZG91YmxlIGFyZzEgPSAwOworICAgIHVuc2ln
bmVkIHNlbGVjdGlvbkEgPSA0MjsKKyAgICB1bnNpZ25lZCBzZWxlY3Rpb25CID0gMTc7CisKKyAg
ICBhdXRvIHRlc3RDb2RlID0gY29tcGlsZShbJiwgY29uZGl0aW9uXSAoQ0NhbGxIZWxwZXJzJiBq
aXQpIHsKKyAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICBHUFJS
ZWcgc2VsZWN0aW9uQUdQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMjsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIgIT0gc2VsZWN0aW9uQUdQUik7CisgICAg
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNlbGVjdGlvbkEpLCBzZWxl
Y3Rpb25BR1BSKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
c2VsZWN0aW9uQiksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICBqaXQubG9h
ZERvdWJsZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmFyZzEpLCBGUFJJbmZvOjpmcFJl
Z1QwKTsKKyAgICAgICAgaml0Lm1vdmVDb25kaXRpb25hbGx5RG91YmxlKGNvbmRpdGlvbiwgRlBS
SW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMCwgc2VsZWN0aW9uQUdQUiwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7Cisg
ICAgICAgIGppdC5yZXQoKTsKKyAgICB9KTsKKworICAgIHRlc3RNb3ZlQ29uZGl0aW9uYWxseUZs
b2F0aW5nUG9pbnRTYW1lQXJnKGNvbmRpdGlvbiwgdGVzdENvZGUsIGFyZzEsIGRvdWJsZU9wZXJh
bmRzKCksIHNlbGVjdGlvbkEsIHNlbGVjdGlvbkIpOworfQorCit2b2lkIHRlc3RNb3ZlQ29uZGl0
aW9uYWxseURvdWJsZTNTYW1lQXJnKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24gY29u
ZGl0aW9uKQoreworICAgIGRvdWJsZSBhcmcxID0gMDsKKyAgICB1bnNpZ25lZCBzZWxlY3Rpb25B
ID0gNDI7CisgICAgdW5zaWduZWQgc2VsZWN0aW9uQiA9IDE3OworCisgICAgYXV0byB0ZXN0Q29k
ZSA9IGNvbXBpbGUoWyYsIGNvbmRpdGlvbl0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAg
IGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgR1BSUmVnIHNlbGVjdGlvbkFH
UFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjI7CisgICAgICAgIEdQUlJlZyBzZWxlY3Rpb25CR1BS
ID0gR1BSSW5mbzo6YXJndW1lbnRHUFIzOworICAgICAgICBSRUxFQVNFX0FTU0VSVChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiAhPSBzZWxlY3Rpb25BR1BSKTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIgIT0gc2VsZWN0aW9uQkdQUik7CisgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNlbGVjdGlvbkEpLCBzZWxlY3Rpb25B
R1BSKTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2VsZWN0
aW9uQiksIHNlbGVjdGlvbkJHUFIpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigtMSksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICBqaXQu
bG9hZERvdWJsZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmFyZzEpLCBGUFJJbmZvOjpm
cFJlZ1QwKTsKKyAgICAgICAgaml0Lm1vdmVDb25kaXRpb25hbGx5RG91YmxlKGNvbmRpdGlvbiwg
RlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMCwgc2VsZWN0aW9uQUdQUiwgc2VsZWN0
aW9uQkdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgIGVtaXRGdW5jdGlv
bkVwaWxvZ3VlKGppdCk7CisgICAgICAgIGppdC5yZXQoKTsKKyAgICB9KTsKKworICAgIHRlc3RN
b3ZlQ29uZGl0aW9uYWxseUZsb2F0aW5nUG9pbnRTYW1lQXJnKGNvbmRpdGlvbiwgdGVzdENvZGUs
IGFyZzEsIGRvdWJsZU9wZXJhbmRzKCksIHNlbGVjdGlvbkEsIHNlbGVjdGlvbkIpOworfQorCit2
b2lkIHRlc3RNb3ZlQ29uZGl0aW9uYWxseUZsb2F0MlNhbWVBcmcoTWFjcm9Bc3NlbWJsZXI6OkRv
dWJsZUNvbmRpdGlvbiBjb25kaXRpb24pCit7CisgICAgZmxvYXQgYXJnMSA9IDA7CisgICAgdW5z
aWduZWQgc2VsZWN0aW9uQSA9IDQyOworICAgIHVuc2lnbmVkIHNlbGVjdGlvbkIgPSAxNzsKKwor
ICAgIGF1dG8gdGVzdENvZGUgPSBjb21waWxlKFsmLCBjb25kaXRpb25dIChDQ2FsbEhlbHBlcnMm
IGppdCkgeworICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgIEdQ
UlJlZyBzZWxlY3Rpb25BR1BSID0gR1BSSW5mbzo6YXJndW1lbnRHUFIyOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiAhPSBzZWxlY3Rpb25BR1BSKTsKKyAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2VsZWN0aW9uQSksIHNl
bGVjdGlvbkFHUFIpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihzZWxlY3Rpb25CKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgIGppdC5s
b2FkRmxvYXQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZhcmcxKSwgRlBSSW5mbzo6ZnBS
ZWdUMCk7CisgICAgICAgIGppdC5tb3ZlQ29uZGl0aW9uYWxseUZsb2F0KGNvbmRpdGlvbiwgRlBS
SW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdUMCwgc2VsZWN0aW9uQUdQUiwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7Cisg
ICAgICAgIGppdC5yZXQoKTsKKyAgICB9KTsKKworICAgIHRlc3RNb3ZlQ29uZGl0aW9uYWxseUZs
b2F0aW5nUG9pbnRTYW1lQXJnKGNvbmRpdGlvbiwgdGVzdENvZGUsIGFyZzEsIGZsb2F0T3BlcmFu
ZHMoKSwgc2VsZWN0aW9uQSwgc2VsZWN0aW9uQik7Cit9CisKK3ZvaWQgdGVzdE1vdmVDb25kaXRp
b25hbGx5RmxvYXQzU2FtZUFyZyhNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmRp
dGlvbikKK3sKKyAgICBmbG9hdCBhcmcxID0gMDsKKyAgICB1bnNpZ25lZCBzZWxlY3Rpb25BID0g
NDI7CisgICAgdW5zaWduZWQgc2VsZWN0aW9uQiA9IDE3OworCisgICAgYXV0byB0ZXN0Q29kZSA9
IGNvbXBpbGUoWyYsIGNvbmRpdGlvbl0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgIGVt
aXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgR1BSUmVnIHNlbGVjdGlvbkFHUFIg
PSBHUFJJbmZvOjphcmd1bWVudEdQUjI7CisgICAgICAgIEdQUlJlZyBzZWxlY3Rpb25CR1BSID0g
R1BSSW5mbzo6YXJndW1lbnRHUFIzOworICAgICAgICBSRUxFQVNFX0FTU0VSVChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiAhPSBzZWxlY3Rpb25BR1BSKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIgIT0gc2VsZWN0aW9uQkdQUik7CisgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNlbGVjdGlvbkEpLCBzZWxlY3Rpb25BR1BS
KTsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2VsZWN0aW9u
QiksIHNlbGVjdGlvbkJHUFIpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigtMSksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICBqaXQubG9h
ZEZsb2F0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmYXJnMSksIEZQUkluZm86OmZwUmVn
VDApOworICAgICAgICBqaXQubW92ZUNvbmRpdGlvbmFsbHlGbG9hdChjb25kaXRpb24sIEZQUklu
Zm86OmZwUmVnVDAsIEZQUkluZm86OmZwUmVnVDAsIHNlbGVjdGlvbkFHUFIsIHNlbGVjdGlvbkJH
UFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICBlbWl0RnVuY3Rpb25FcGls
b2d1ZShqaXQpOworICAgICAgICBqaXQucmV0KCk7CisgICAgfSk7CisKKyAgICB0ZXN0TW92ZUNv
bmRpdGlvbmFsbHlGbG9hdGluZ1BvaW50U2FtZUFyZyhjb25kaXRpb24sIHRlc3RDb2RlLCBhcmcx
LCBmbG9hdE9wZXJhbmRzKCksIHNlbGVjdGlvbkEsIHNlbGVjdGlvbkIpOworfQorCit2b2lkIHRl
c3RNb3ZlRG91YmxlQ29uZGl0aW9uYWxseURvdWJsZVNhbWVBcmcoTWFjcm9Bc3NlbWJsZXI6OkRv
dWJsZUNvbmRpdGlvbiBjb25kaXRpb24pCit7CisgICAgZG91YmxlIGFyZzEgPSAwOworICAgIGRv
dWJsZSBzZWxlY3Rpb25BID0gNDIuMDsKKyAgICBkb3VibGUgc2VsZWN0aW9uQiA9IDE3LjA7CisK
KyAgICBhdXRvIHRlc3RDb2RlID0gY29tcGlsZShbJiwgY29uZGl0aW9uXSAoQ0NhbGxIZWxwZXJz
JiBqaXQpIHsKKyAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICBq
aXQubG9hZERvdWJsZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmFyZzEpLCBGUFJJbmZv
OjpmcFJlZ1QwKTsKKyAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKCZzZWxlY3Rpb25BKSwgRlBSSW5mbzo6ZnBSZWdUMik7CisgICAgICAgIGppdC5sb2Fk
RG91YmxlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmc2VsZWN0aW9uQiksIEZQUkluZm86
OmZwUmVnVDMpOworICAgICAgICBqaXQubW92ZURvdWJsZUNvbmRpdGlvbmFsbHlEb3VibGUoY29u
ZGl0aW9uLCBGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJlZ1QwLCBGUFJJbmZvOjpmcFJl
Z1QyLCBGUFJJbmZvOjpmcFJlZ1QzLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisKKyAgICAg
ICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgaml0LnJldCgpOworICAgIH0p
OworCisgICAgdGVzdE1vdmVDb25kaXRpb25hbGx5RmxvYXRpbmdQb2ludFNhbWVBcmcoY29uZGl0
aW9uLCB0ZXN0Q29kZSwgYXJnMSwgZG91YmxlT3BlcmFuZHMoKSwgc2VsZWN0aW9uQSwgc2VsZWN0
aW9uQik7Cit9CisKK3ZvaWQgdGVzdE1vdmVEb3VibGVDb25kaXRpb25hbGx5RmxvYXRTYW1lQXJn
KE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24gY29uZGl0aW9uKQoreworICAgIGZsb2F0
IGFyZzEgPSAwOworICAgIGRvdWJsZSBzZWxlY3Rpb25BID0gNDIuMDsKKyAgICBkb3VibGUgc2Vs
ZWN0aW9uQiA9IDE3LjA7CisKKyAgICBhdXRvIHRlc3RDb2RlID0gY29tcGlsZShbJiwgY29uZGl0
aW9uXSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUo
aml0KTsKKworICAgICAgICBqaXQubG9hZEZsb2F0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cigmYXJnMSksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBqaXQubG9hZERvdWJsZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnNlbGVjdGlvbkEpLCBGUFJJbmZvOjpmcFJlZ1QyKTsK
KyAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZzZWxl
Y3Rpb25CKSwgRlBSSW5mbzo6ZnBSZWdUMyk7CisgICAgICAgIGppdC5tb3ZlRG91YmxlQ29uZGl0
aW9uYWxseUZsb2F0KGNvbmRpdGlvbiwgRlBSSW5mbzo6ZnBSZWdUMCwgRlBSSW5mbzo6ZnBSZWdU
MCwgRlBSSW5mbzo6ZnBSZWdUMiwgRlBSSW5mbzo6ZnBSZWdUMywgRlBSSW5mbzo6cmV0dXJuVmFs
dWVGUFIpOworCisgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgIGpp
dC5yZXQoKTsKKyAgICB9KTsKKworICAgIHRlc3RNb3ZlQ29uZGl0aW9uYWxseUZsb2F0aW5nUG9p
bnRTYW1lQXJnKGNvbmRpdGlvbiwgdGVzdENvZGUsIGFyZzEsIGZsb2F0T3BlcmFuZHMoKSwgc2Vs
ZWN0aW9uQSwgc2VsZWN0aW9uQik7Cit9CisKKyNlbmRpZiAvLyBDUFUoWDg2XzY0KSB8fCBDUFUo
QVJNNjQpCiAKICNpZiBFTkFCTEUoTUFTTV9QUk9CRSkKIHZvaWQgdGVzdFByb2JlUmVhZHNBcmd1
bWVudFJlZ2lzdGVycygpCkBAIC0xMzM3LDE4ICsyMTk5LDI1IEBAIHZvaWQgcnVuKGNvbnN0IGNo
YXIqIGZpbHRlcikKICAgICAvLyByZXNldCB0byBjaGVjayBhIGNvbnZlcnNpb24gcmVzdWx0CiAg
ICAgUlVOKHRlc3RCcmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoMTIzLCAxMjMpKTsKIAotICAg
IFJVTih0ZXN0Q29tcGFyZURvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpKTsKLSAg
ICBSVU4odGVzdENvbXBhcmVEb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsKSk7
Ci0gICAgUlVOKHRlc3RDb21wYXJlRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVy
VGhhbikpOwotICAgIFJVTih0ZXN0Q29tcGFyZURvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
R3JlYXRlclRoYW5PckVxdWFsKSk7Ci0gICAgUlVOKHRlc3RDb21wYXJlRG91YmxlKE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVMZXNzVGhhbikpOwotICAgIFJVTih0ZXN0Q29tcGFyZURvdWJsZShNYWNy
b0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsKSk7Ci0gICAgUlVOKHRlc3RDb21wYXJl
RG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbE9yVW5vcmRlcmVkKSk7Ci0gICAgUlVO
KHRlc3RDb21wYXJlRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRl
cmVkKSk7Ci0gICAgUlVOKHRlc3RDb21wYXJlRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpEb3VibGVH
cmVhdGVyVGhhbk9yVW5vcmRlcmVkKSk7Ci0gICAgUlVOKHRlc3RDb21wYXJlRG91YmxlKE1hY3Jv
QXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCkpOwotICAgIFJV
Tih0ZXN0Q29tcGFyZURvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PclVub3Jk
ZXJlZCkpOwotICAgIFJVTih0ZXN0Q29tcGFyZURvdWJsZShNYWNyb0Fzc2VtYmxlcjo6RG91Ymxl
TGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQpKTsKKyNkZWZpbmUgRk9SX0VBQ0hfRE9VQkxFX0NP
TkRJVElPTl9SVU4oX190ZXN0KSBcCisgICAgZG8geyBcCisgICAgICAgIFJVTihfX3Rlc3QoTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZUVxdWFsKSk7IFwKKyAgICAgICAgUlVOKF9fdGVzdChNYWNyb0Fz
c2VtYmxlcjo6RG91YmxlTm90RXF1YWwpKTsgXAorICAgICAgICBSVU4oX190ZXN0KE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbikpOyBcCisgICAgICAgIFJVTihfX3Rlc3QoTWFjcm9B
c3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCkpOyBcCisgICAgICAgIFJVTihfX3Rl
c3QoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSk7IFwKKyAgICAgICAgUlVOKF9fdGVz
dChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsKSk7IFwKKyAgICAgICAgUlVO
KF9fdGVzdChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWxPclVub3JkZXJlZCkpOyBcCisgICAg
ICAgIFJVTihfX3Rlc3QoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQp
KTsgXAorICAgICAgICBSVU4oX190ZXN0KE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhh
bk9yVW5vcmRlcmVkKSk7IFwKKyAgICAgICAgUlVOKF9fdGVzdChNYWNyb0Fzc2VtYmxlcjo6RG91
YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQpKTsgXAorICAgICAgICBSVU4oX190ZXN0
KE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKSk7IFwKKyAgICAgICAg
UlVOKF9fdGVzdChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVy
ZWQpKTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCisgICAgRk9SX0VBQ0hfRE9VQkxFX0NPTkRJ
VElPTl9SVU4odGVzdENvbXBhcmVEb3VibGUpOworICAgIEZPUl9FQUNIX0RPVUJMRV9DT05ESVRJ
T05fUlVOKHRlc3RDb21wYXJlRG91YmxlU2FtZUFyZyk7CisKICAgICBSVU4odGVzdE11bDMyV2l0
aEltbWVkaWF0ZXMoKSk7CiAKICNpZiBDUFUoWDg2XzY0KQpAQCAtMTM2NSwxOCArMjIzNCwzMyBA
QCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAjZW5kaWYKIAogI2lmIENQVShYODYpIHx8
IENQVShYODZfNjQpIHx8IENQVShBUk02NCkKLSAgICBSVU4odGVzdENvbXBhcmVGbG9hdChNYWNy
b0Fzc2VtYmxlcjo6RG91YmxlRXF1YWwpKTsKLSAgICBSVU4odGVzdENvbXBhcmVGbG9hdChNYWNy
b0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWwpKTsKLSAgICBSVU4odGVzdENvbXBhcmVGbG9hdChN
YWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW4pKTsKLSAgICBSVU4odGVzdENvbXBhcmVG
bG9hdChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsKSk7Ci0gICAgUlVO
KHRlc3RDb21wYXJlRmxvYXQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuKSk7Ci0gICAg
UlVOKHRlc3RDb21wYXJlRmxvYXQoTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVh
bCkpOwotICAgIFJVTih0ZXN0Q29tcGFyZUZsb2F0KE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVh
bE9yVW5vcmRlcmVkKSk7Ci0gICAgUlVOKHRlc3RDb21wYXJlRmxvYXQoTWFjcm9Bc3NlbWJsZXI6
OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQpKTsKLSAgICBSVU4odGVzdENvbXBhcmVGbG9hdChN
YWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCkpOwotICAgIFJVTih0
ZXN0Q29tcGFyZUZsb2F0KE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxP
clVub3JkZXJlZCkpOwotICAgIFJVTih0ZXN0Q29tcGFyZUZsb2F0KE1hY3JvQXNzZW1ibGVyOjpE
b3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKSk7Ci0gICAgUlVOKHRlc3RDb21wYXJlRmxvYXQoTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKSk7CisgICAgRk9S
X0VBQ0hfRE9VQkxFX0NPTkRJVElPTl9SVU4odGVzdENvbXBhcmVGbG9hdCk7CisjZW5kaWYKKwor
I2lmIENQVShYODZfNjQpIHx8IENQVShBUk02NCkKKyAgICAvLyBDb21wYXJpbmcgMiBkaWZmZXJl
bnQgcmVnaXN0ZXJzLgorICAgIEZPUl9FQUNIX0RPVUJMRV9DT05ESVRJT05fUlVOKHRlc3RNb3Zl
Q29uZGl0aW9uYWxseURvdWJsZTIpOworICAgIEZPUl9FQUNIX0RPVUJMRV9DT05ESVRJT05fUlVO
KHRlc3RNb3ZlQ29uZGl0aW9uYWxseURvdWJsZTMpOworICAgIEZPUl9FQUNIX0RPVUJMRV9DT05E
SVRJT05fUlVOKHRlc3RNb3ZlQ29uZGl0aW9uYWxseURvdWJsZTNEZXN0U2FtZUFzVGhlbkNhc2Up
OworICAgIEZPUl9FQUNIX0RPVUJMRV9DT05ESVRJT05fUlVOKHRlc3RNb3ZlQ29uZGl0aW9uYWxs
eURvdWJsZTNEZXN0U2FtZUFzRWxzZUNhc2UpOworICAgIEZPUl9FQUNIX0RPVUJMRV9DT05ESVRJ
T05fUlVOKHRlc3RNb3ZlQ29uZGl0aW9uYWxseUZsb2F0Mik7CisgICAgRk9SX0VBQ0hfRE9VQkxF
X0NPTkRJVElPTl9SVU4odGVzdE1vdmVDb25kaXRpb25hbGx5RmxvYXQzKTsKKyAgICBGT1JfRUFD
SF9ET1VCTEVfQ09ORElUSU9OX1JVTih0ZXN0TW92ZUNvbmRpdGlvbmFsbHlGbG9hdDNEZXN0U2Ft
ZUFzVGhlbkNhc2UpOworICAgIEZPUl9FQUNIX0RPVUJMRV9DT05ESVRJT05fUlVOKHRlc3RNb3Zl
Q29uZGl0aW9uYWxseUZsb2F0M0Rlc3RTYW1lQXNFbHNlQ2FzZSk7CisgICAgRk9SX0VBQ0hfRE9V
QkxFX0NPTkRJVElPTl9SVU4odGVzdE1vdmVEb3VibGVDb25kaXRpb25hbGx5RG91YmxlKTsKKyAg
ICBGT1JfRUFDSF9ET1VCTEVfQ09ORElUSU9OX1JVTih0ZXN0TW92ZURvdWJsZUNvbmRpdGlvbmFs
bHlEb3VibGVEZXN0U2FtZUFzVGhlbkNhc2UpOworICAgIEZPUl9FQUNIX0RPVUJMRV9DT05ESVRJ
T05fUlVOKHRlc3RNb3ZlRG91YmxlQ29uZGl0aW9uYWxseURvdWJsZURlc3RTYW1lQXNFbHNlQ2Fz
ZSk7CisgICAgRk9SX0VBQ0hfRE9VQkxFX0NPTkRJVElPTl9SVU4odGVzdE1vdmVEb3VibGVDb25k
aXRpb25hbGx5RmxvYXQpOworICAgIEZPUl9FQUNIX0RPVUJMRV9DT05ESVRJT05fUlVOKHRlc3RN
b3ZlRG91YmxlQ29uZGl0aW9uYWxseUZsb2F0RGVzdFNhbWVBc1RoZW5DYXNlKTsKKyAgICBGT1Jf
RUFDSF9ET1VCTEVfQ09ORElUSU9OX1JVTih0ZXN0TW92ZURvdWJsZUNvbmRpdGlvbmFsbHlGbG9h
dERlc3RTYW1lQXNFbHNlQ2FzZSk7CisKKyAgICAvLyBDb21wYXJpbmcgdGhlIHNhbWUgcmVnaXN0
ZXIgYWdhaW5zdCBpdHNlbGYuCisgICAgRk9SX0VBQ0hfRE9VQkxFX0NPTkRJVElPTl9SVU4odGVz
dE1vdmVDb25kaXRpb25hbGx5RG91YmxlMlNhbWVBcmcpOworICAgIEZPUl9FQUNIX0RPVUJMRV9D
T05ESVRJT05fUlVOKHRlc3RNb3ZlQ29uZGl0aW9uYWxseURvdWJsZTNTYW1lQXJnKTsKKyAgICBG
T1JfRUFDSF9ET1VCTEVfQ09ORElUSU9OX1JVTih0ZXN0TW92ZUNvbmRpdGlvbmFsbHlGbG9hdDJT
YW1lQXJnKTsKKyAgICBGT1JfRUFDSF9ET1VCTEVfQ09ORElUSU9OX1JVTih0ZXN0TW92ZUNvbmRp
dGlvbmFsbHlGbG9hdDNTYW1lQXJnKTsKKyAgICBGT1JfRUFDSF9ET1VCTEVfQ09ORElUSU9OX1JV
Tih0ZXN0TW92ZURvdWJsZUNvbmRpdGlvbmFsbHlEb3VibGVTYW1lQXJnKTsKKyAgICBGT1JfRUFD
SF9ET1VCTEVfQ09ORElUSU9OX1JVTih0ZXN0TW92ZURvdWJsZUNvbmRpdGlvbmFsbHlGbG9hdFNh
bWVBcmcpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUFTTV9QUk9CRSkK
</data>
<flag name="review"
          id="408154"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>