<?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>72348</bug_id>
          
          <creation_ts>2011-11-14 20:15:50 -0800</creation_ts>
          <short_desc>DFG::SpeculativeJIT and DFG::JITCodeGenerator should be combined</short_desc>
          <delta_ts>2011-11-14 23:05:00 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>72347</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>502601</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-14 20:15:50 -0800</bug_when>
    <thetext>The separation between these two classes made sense when there was a DFG:NonSpeculativeJIT.  But there isn&apos;t one anymore, and the separation is getting in the way of further progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502603</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-14 20:17:00 -0800</bug_when>
    <thetext>This blocks https://bugs.webkit.org/show_bug.cgi?id=72347 because that bug requires that the appendCallWithXYZ methods know about speculation checks.  Those methods are currently in JITCodeGenerator.  It&apos;s probably best if we just move everything out of JITCodeGenerator and into SpeculativeJIT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502609</commentid>
    <comment_count>2</comment_count>
      <attachid>115090</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-14 20:34:54 -0800</bug_when>
    <thetext>Created attachment 115090
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502610</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-14 20:37:31 -0800</bug_when>
    <thetext>Attachment 115090 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/fast/js/script-tests/dfg-inlin...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:1285:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:1877:  Missing space inside { }.  [whitespace/braces] [5]
Total errors found: 2 in 7 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>502611</commentid>
    <comment_count>4</comment_count>
      <attachid>115090</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-11-14 20:39:32 -0800</bug_when>
    <thetext>Comment on attachment 115090
the patch

Attachment 115090 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10486195</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502612</commentid>
    <comment_count>5</comment_count>
      <attachid>115090</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-11-14 20:40:38 -0800</bug_when>
    <thetext>Comment on attachment 115090
the patch

Attachment 115090 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10484184</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502615</commentid>
    <comment_count>6</comment_count>
      <attachid>115091</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-14 20:41:28 -0800</bug_when>
    <thetext>Created attachment 115091
the patch

Fixed some build systems.

Fixed style.

Fixed a merge goof where my previous patch was removing some LayoutTest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502656</commentid>
    <comment_count>7</comment_count>
      <attachid>115091</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-11-14 22:58:46 -0800</bug_when>
    <thetext>Comment on attachment 115091
the patch

Attachment 115091 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10485233</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502662</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-14 23:04:25 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/100244</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502663</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-14 23:05:00 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 115091 [details])
&gt; Attachment 115091 [details] did not pass qt-ews (qt):
&gt; Output: http://queues.webkit.org/results/10485233

I&apos;m assuming this was just due to JSValueOperand not being forward-declared in SpeculativeJIT.h.  Watching the bots to make sure this is the case...</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115090</attachid>
            <date>2011-11-14 20:34:54 -0800</date>
            <delta_ts>2011-11-14 20:41:28 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>killcodegen_patch_1.diff</filename>
            <type>text/plain</type>
            <size>445844</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwMjM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5NCBA
QAorMjAxMS0xMS0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRzo6U3BlY3VsYXRpdmVKSVQgYW5kIERGRzo6SklUQ29kZUdlbmVyYXRvciBzaG91bGQgYmUg
Y29tYmluZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTcyMzQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAor
ICAgICAgICBNb3ZlZCBhbGwgb2YgSklUQ29kZUdlbmVyYXRvciBpbnRvIFNwZWN1bGF0aXZlSklU
LgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZH
SklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZHSklU
Q29kZUdlbmVyYXRvcjY0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGls
ZXIuY3BwOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlD
YWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUNhY2hlUHV0QnlJRCk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y2xlYXJHZW5lcmF0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6dXNlQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpp
c1N0cmljdEludDMyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6aXNLbm93
bkludGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppc0tub3duTnVt
ZXJpYyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmlzS25vd25DZWxsKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6aXNLbm93bk5vdENlbGwpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppc0tub3duTm90SW50ZWdlcik6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmlzS25vd25Ob3ROdW1iZXIpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppc0tub3duQm9vbGVhbik6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6Om1hcmtDZWxsQ2FyZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGFyZSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpE
Rkc6OmRhdGFGb3JtYXRTdHJpbmcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tDb25zaXN0
ZW5jeSk6CisgICAgICAgIChKU0M6OkRGRzo6R1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3JhcnkpOgor
ICAgICAgICAoSlNDOjpERkc6OkdQUlRlbXBvcmFyeTo6YWRvcHQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkZQUlRlbXBvcmFyeTo6RlBSVGVtcG9yYXJ5KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXQpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpsb2NrKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6dW5sb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y2FuUmV1c2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpyZXVz
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFsbG9jYXRlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dHJ5QWxsb2NhdGUpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpmcHJBbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmlzRmlsbGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6aXNGaWxsZWREb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojp1c2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNo
R1BSKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2lsZW50U3BpbGxHUFIp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzaWxlbnRTcGlsbEZQUik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNpbGVudEZpbGxHUFIpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzaWxlbnRGaWxsRlBSKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Ym94RG91YmxlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dW5ib3hEb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpzcGlsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmlzQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppc0pT
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppc0ludDMyQ29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppc0RvdWJsZUNvbnN0
YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6aXNOdW1iZXJDb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmlzQm9vbGVhbkNvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6aXNGdW5jdGlvbkNvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dmFsdWVPZkludDMyQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1ZU9mTnVtYmVyQ29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjphZGRyZXNzT2ZEb3Vi
bGVDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnZhbHVlT2ZK
U0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dmFsdWVPZkJv
b2xlYW5Db25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnZhbHVl
T2ZGdW5jdGlvbkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
aXNOdWxsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppZGVu
dGlmaWVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Zmx1c2hSZWdpc3Rl
cnMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppc0ZsdXNoZWQpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1ZU9mSlNDb25zdGFudEFzSW1tUHRy
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Yml0T3ApOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzaGlmdE9wKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZGV0ZWN0UGVlcEhvbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjphZGRyZXNzT2ZDYWxsRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OnRhZ09mQ2FsbERhdGEpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpwYXlsb2FkT2ZDYWxsRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmludGVnZXJSZXN1bHQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpub1Jlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNlbGxS
ZXN1bHQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpib29sZWFuUmVzdWx0
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6anNWYWx1ZVJlc3VsdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnN0b3JhZ2VSZXN1bHQpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpkb3VibGVSZXN1bHQpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjppbml0Q29uc3RhbnRJbmZvKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6cmVzZXRDYWxsQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6YWRkQ2FsbEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6c2V0dXBBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpzZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNldHVwVHdvU3R1YkFyZ3MpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzZXR1cFN0dWJBcmd1bWVudHMpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2tTZXRSZXN1bHQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzZXR1cFJl
c3VsdHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjphcHBlbmRDYWxsU2V0
UmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YWRkQnJhbmNoKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bGlua0JyYW5jaGVzKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YmxvY2spOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjaGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6QnJhbmNoUmVjb3JkOjpCcmFuY2hSZWNvcmQpOgorICAgICAgICAoSlND
OjpERkc6OkludGVnZXJPcGVyYW5kOjpJbnRlZ2VyT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6SW50ZWdlck9wZXJhbmQ6On5JbnRlZ2VyT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6
SW50ZWdlck9wZXJhbmQ6OmluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpJbnRlZ2VyT3BlcmFu
ZDo6Zm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZHOjpJbnRlZ2VyT3BlcmFuZDo6Z3ByKToKKyAg
ICAgICAgKEpTQzo6REZHOjpJbnRlZ2VyT3BlcmFuZDo6dXNlKToKKyAgICAgICAgKEpTQzo6REZH
OjpEb3VibGVPcGVyYW5kOjpEb3VibGVPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpEb3Vi
bGVPcGVyYW5kOjp+RG91YmxlT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6RG91YmxlT3Bl
cmFuZDo6aW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkRvdWJsZU9wZXJhbmQ6OmZwcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6RG91YmxlT3BlcmFuZDo6dXNlKToKKyAgICAgICAgKEpTQzo6REZH
OjpKU1ZhbHVlT3BlcmFuZDo6SlNWYWx1ZU9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OkpT
VmFsdWVPcGVyYW5kOjp+SlNWYWx1ZU9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFs
dWVPcGVyYW5kOjppbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6Omdw
cik6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OmpzVmFsdWVSZWdzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3BlcmFuZDo6aXNEb3VibGUpOgorICAgICAgICAoSlND
OjpERkc6OkpTVmFsdWVPcGVyYW5kOjpmaWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVl
T3BlcmFuZDo6dGFnR1BSKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3BlcmFuZDo6cGF5
bG9hZEdQUik6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OmZwcik6CisgICAg
ICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnVzZSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3RvcmFnZU9wZXJhbmQ6OlN0b3JhZ2VPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9y
YWdlT3BlcmFuZDo6flN0b3JhZ2VPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdl
T3BlcmFuZDo6aW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjpncHIp
OgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjp1c2UpOgorICAgICAgICAoSlND
OjpERkc6OkdQUlRlbXBvcmFyeTo6fkdQUlRlbXBvcmFyeSk6CisgICAgICAgIChKU0M6OkRGRzo6
R1BSVGVtcG9yYXJ5OjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OkZQUlRlbXBvcmFyeTo6fkZQ
UlRlbXBvcmFyeSk6CisgICAgICAgIChKU0M6OkRGRzo6RlBSVGVtcG9yYXJ5OjpmcHIpOgorICAg
ICAgICAoSlNDOjpERkc6OkZQUlRlbXBvcmFyeTo6RlBSVGVtcG9yYXJ5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpHUFJSZXN1bHQ6OkdQUlJlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6R1BSUmVz
dWx0Mjo6R1BSUmVzdWx0Mik6CisgICAgICAgIChKU0M6OkRGRzo6RlBSUmVzdWx0OjpGUFJSZXN1
bHQpOgorICAgICAgICAoSlNDOjpERkc6OkZQUlJlc3VsdDo6bG9ja2VkUmVzdWx0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6ZmlsbEludGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpmaWxsRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Zmls
bEpTVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxh
dGl2ZVZhbHVlVG9OdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZVZhbHVlVG9JbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6Om5vblNwZWN1bGF0aXZlVUludDMyVG9OdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUtub3duQ29uc3RhbnRBcml0aE9wKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVCYXNpY0FyaXRo
T3ApOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldE1ldGhvZCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21w
YXJlTnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0
aXZlUGVlcGhvbGVCcmFuY2hOdWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVT
dHJpY3RFcSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0
aXZlTm9uUGVlcGhvbGVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2VyKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVVJbnQzMlRvTnVtYmVy
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVLbm93
bkNvbnN0YW50QXJpdGhPcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5v
blNwZWN1bGF0aXZlQmFzaWNBcml0aE9wKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y2FjaGVkR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNhY2hlZFB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNo
ZWRHZXRNZXRob2QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGFyZU51bGwpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJh
bmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVO
b25QZWVwaG9sZUNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlU3RyaWN0RXEpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogcnVudGltZS9K
U0Z1bmN0aW9uLmg6CisKIDIwMTEtMTEtMTQgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNv
bT4KIAogICAgICAgICBTdGFydCBtaWdyYXRpbmcgdHlwZWQgYXJyYXkgaW1wbCB0eXBlcyB0byBX
VEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMDAyMzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzI4LDEwICszMjgsOCBAQAogCQk4NjcwNEI4ODEy
REJBMzM3MDBBOUZFN0IgLyogWWFyclBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODY3MDRCODExMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXJz
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQk4NjcwNEI4OTEy
REJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY3MDRCODIxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQ
YXR0ZXJuLmNwcCAqLzsgfTsKIAkJODY3MDRCOEExMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0
ZXJuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Njcw
NEI4MzEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk4Njg4MEYxQzE0MzI4QkI5MDBCMDhENDIg
LyogREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODgwRjE4MTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdKSVRD
b2RlR2VuZXJhdG9yMzJfNjQuY3BwICovOyB9OwogCQk4Njg4MEYxRTE0MzI4QkI5MDBCMDhENDIg
LyogREZHSklUQ29tcGlsZXJJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Njg4MEYxQTE0MzI4QkI5MDBCMDhENDIgLyogREZHSklU
Q29tcGlsZXJJbmxpbmVNZXRob2RzLmggKi87IH07CiAJCTg2ODgwRjFGMTQzMjhCQjkwMEIwOEQ0
MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODgwRjFCMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcCAqLzsgfTsKLQkJODY4ODBGNDQxNDM1MzFBODAwQjA4RDQyIC8q
IERGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4Njg4MEY0MzE0MzUzMUE3MDBCMDhENDIgLyogREZHSklUQ29kZUdl
bmVyYXRvcjY0LmNwcCAqLzsgfTsKIAkJODY4ODBGNEQxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gODY4ODBGNEMxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwICovOyB9OwogCQk4NjhCRkEwODExN0NFRkQxMDBCOTA4QjEgLyogQXRvbWljU3RyaW5nLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2OEJGQTAw
MTE3Q0VGRDEwMEI5MDhCMSAvKiBBdG9taWNTdHJpbmcuY3BwICovOyB9OwogCQk4NjhCRkEwOTEx
N0NFRkQxMDBCOTA4QjEgLyogQXRvbWljU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjhCRkEwMTExN0NFRkQxMDBCOTA4QjEgLyogQXRvbWlj
U3RyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTM4NCw4ICszODIsNiBAQAogCQk4NkVDOURDNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2Vu
ZXJhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDg2RUM5REI2MTMyOERGODIwMDJCMkFENyAvKiBERkdHZW5lcmF0aW9uSW5mby5oICovOyB9
OwogCQk4NkVDOURDNzEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQzlEQjcxMzI4REY4MjAwMkIy
QUQ3IC8qIERGR0dyYXBoLmNwcCAqLzsgfTsKIAkJODZFQzlEQzgxMzI4REY4MjAwMkIyQUQ3IC8q
IERGR0dyYXBoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NkVDOURCODEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguaCAqLzsgfTsKLQkJODZFQzlE
QzkxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJVENvZGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQzlEQjkxMzI4REY4MjAwMkIy
QUQ3IC8qIERGR0pJVENvZGVHZW5lcmF0b3IuY3BwICovOyB9OwotCQk4NkVDOURDQTEzMjhERjgy
MDAyQjJBRDcgLyogREZHSklUQ29kZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQzlEQkExMzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJ
VENvZGVHZW5lcmF0b3IuaCAqLzsgfTsKIAkJODZFQzlEQ0IxMzI4REY4MjAwMkIyQUQ3IC8qIERG
R0pJVENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDg2RUM5REJCMTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb21waWxlci5jcHAgKi87
IH07CiAJCTg2RUM5RENDMTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb21waWxlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQzlEQkMxMzI4REY4
MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmggKi87IH07CiAJCTg2RUM5RENGMTMyOERGODIw
MDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUM5REJGMTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRp
b25zLmNwcCAqLzsgfTsKQEAgLTExMTIsMTAgKzExMDgsOCBAQAogCQk4NjcwNEI4MzEyREJBMzM3
MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gWWFyclBhdHRlcm4uaDsgcGF0aCA9IHlhcnIvWWFyclBhdHRlcm4uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODY3RkMzNUYxMUI3NjM5NTAwMjUxMDVFIC8qIEphdmFTY3JpcHRD
b3JlLkpTVkFMVUUzMl82NG9ubHkuZXhwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5leHBvcnRzOyBw
YXRoID0gSmF2YVNjcmlwdENvcmUuSlNWQUxVRTMyXzY0b25seS5leHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTg2N0ZDMzYxMTFCNzYzOTUwMDI1MTA1RSAvKiBKYXZhU2NyaXB0Q29y
ZS5KU1ZBTFVFNjRvbmx5LmV4cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuZXhwb3J0czsgcGF0aCA9
IEphdmFTY3JpcHRDb3JlLkpTVkFMVUU2NG9ubHkuZXhwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk4Njg4MEYxODE0MzI4QkI5MDBCMDhENDIgLyogREZHSklUQ29kZUdlbmVyYXRvcjMy
XzY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0pJVENvZGVH
ZW5lcmF0b3IzMl82NC5jcHA7IHBhdGggPSBkZmcvREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY4ODBGMUExNDMyOEJCOTAwQjA4RDQy
IC8qIERGR0pJVENvbXBpbGVySW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdKSVRDb21waWxlcklubGluZU1ldGhvZHMuaDsgcGF0aCA9IGRmZy9ERkdK
SVRDb21waWxlcklubGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODY4ODBGMUIxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHA7IHBhdGggPSBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTg2ODgwRjQzMTQzNTMxQTcwMEIwOEQ0MiAvKiBERkdKSVRDb2Rl
R2VuZXJhdG9yNjQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
SklUQ29kZUdlbmVyYXRvcjY0LmNwcDsgcGF0aCA9IGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yNjQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4Njg4MEY0QzE0MzUzQjIxMDBCMDhE
NDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDsgcGF0aCA9IGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY4QkZBMDAxMTdD
RUZEMTAwQjkwOEIxIC8qIEF0b21pY1N0cmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBBdG9taWNTdHJpbmcuY3BwOyBwYXRoID0gdGV4dC9BdG9taWNTdHJpbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjhCRkEwMTExN0NFRkQxMDBCOTA4
QjEgLyogQXRvbWljU3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEF0
b21pY1N0cmluZy5oOyBwYXRoID0gdGV4dC9BdG9taWNTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTExNjksOCArMTE2Myw2IEBACiAJCTg2RUM5REI2MTMyOERGODIwMDJC
MkFENyAvKiBERkdHZW5lcmF0aW9uSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdHZW5lcmF0aW9uSW5mby5oOyBwYXRoID0gZGZnL0RGR0dlbmVyYXRpb25JbmZvLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2RUM5REI3MTMyOERGODIwMDJCMkFENyAv
KiBERkdHcmFwaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdH
cmFwaC5jcHA7IHBhdGggPSBkZmcvREZHR3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4NkVDOURCODEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHR3JhcGguaDsgcGF0aCA9IGRmZy9ERkdHcmFwaC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NkVDOURCOTEzMjhERjgyMDAyQjJBRDcg
LyogREZHSklUQ29kZUdlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdKSVRDb2RlR2VuZXJhdG9yLmNwcDsgcGF0aCA9IGRmZy9ERkdKSVRDb2RlR2Vu
ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODZFQzlEQkExMzI4REY4
MjAwMkIyQUQ3IC8qIERGR0pJVENvZGVHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHSklUQ29kZUdlbmVyYXRvci5oOyBwYXRoID0gZGZnL0RGR0pJVENvZGVH
ZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZFQzlEQkIxMzI4REY4
MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0pJVENvbXBpbGVyLmNwcDsgcGF0aCA9IGRmZy9ERkdKSVRDb21waWxl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2RUM5REJDMTMyOERGODIwMDJC
MkFENyAvKiBERkdKSVRDb21waWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdKSVRDb21waWxlci5oOyBwYXRoID0gZGZnL0RGR0pJVENvbXBpbGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2RUM5REJGMTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVy
YXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09wZXJh
dGlvbnMuY3BwOyBwYXRoID0gZGZnL0RGR09wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjMzMiwxMCArMjMyNCw2IEBACiAJCQkJODZFQzlEQjcxMzI4REY4MjAw
MkIyQUQ3IC8qIERGR0dyYXBoLmNwcCAqLywKIAkJCQk4NkVDOURCODEzMjhERjgyMDAyQjJBRDcg
LyogREZHR3JhcGguaCAqLywKIAkJCQkwRkQ4MkVGMzE0MjMwNzM5MDAxNzlDOTQgLyogREZHSW50
cmluc2ljLmggKi8sCi0JCQkJODZFQzlEQjkxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJVENvZGVH
ZW5lcmF0b3IuY3BwICovLAotCQkJCTg2RUM5REJBMTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRD
b2RlR2VuZXJhdG9yLmggKi8sCi0JCQkJODY4ODBGMTgxNDMyOEJCOTAwQjA4RDQyIC8qIERGR0pJ
VENvZGVHZW5lcmF0b3IzMl82NC5jcHAgKi8sCi0JCQkJODY4ODBGNDMxNDM1MzFBNzAwQjA4RDQy
IC8qIERGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHAgKi8sCiAJCQkJODZFQzlEQkIxMzI4REY4MjAw
MkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmNwcCAqLywKIAkJCQk4NkVDOURCQzEzMjhERjgyMDAy
QjJBRDcgLyogREZHSklUQ29tcGlsZXIuaCAqLywKIAkJCQk4Njg4MEYxQTE0MzI4QkI5MDBCMDhE
NDIgLyogREZHSklUQ29tcGlsZXJJbmxpbmVNZXRob2RzLmggKi8sCkBAIC0yNjA5LDcgKzI1OTcs
NiBAQAogCQkJCTg2RUM5REM1MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQzYxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVy
YXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDODEzMjhERjgyMDAyQjJBRDcg
LyogREZHR3JhcGguaCBpbiBIZWFkZXJzICovLAotCQkJCTg2RUM5RENBMTMyOERGODIwMDJCMkFE
NyAvKiBERkdKSVRDb2RlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDQzEz
MjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
RUNBM0VBMTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NDJFMzEzNjEzNEZGMEE2MDBBRkFEQjUgLyogSGFuZGxlSGVhcC5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zMzAxLDcgKzMyODgsNiBAQAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBEZWJ1
Z2dlckNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDNDEzMjhERjgyMDAy
QjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlE
QzcxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTg2
RUM5REM5MTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb2RlR2VuZXJhdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg2RUM5RENCMTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb21waWxlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDRjEzMjhERjgyMDAyQjJBRDcgLyogREZHT3Bl
cmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOUREMjEzMjhERjgyMDAyQjJBRDcg
LyogREZHU3BlY3VsYXRpdmVKSVQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zNDYzLDkgKzM0NDks
NyBAQAogCQkJCTFBMDgyNzc5MTQyMTY4RDcwMDkwQ0NBQyAvKiBCaW5hcnlTZW1hcGhvcmUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwNDU2QjExNDI3RkI5NTAwMzdEQTY4IC8qIEFsbG9jYXRp
b25TcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkZBOUU5MTE0MkJCQjJFMDAxNzczQjcg
LyogSlNCb3VuZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTg2ODgwRjFDMTQzMjhC
QjkwMEIwOEQ0MiAvKiBERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODY4ODBGMUYxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJODY4ODBGNDQxNDM1MzFBODAwQjA4RDQyIC8qIERGR0pJ
VENvZGVHZW5lcmF0b3I2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEY0RDE0MzUzQjIx
MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogSGV1cmlzdGljcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjYyMDE3OTE0M0ZDRDQ4MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdl
bmVyYXRvcjMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHAJKHJldmlzaW9uIDEwMDIzNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxMzcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIEludGVs
IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRG
R0pJVENvZGVHZW5lcmF0b3IuaCIKLQotI2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAi
REZHSklUQ29tcGlsZXJJbmxpbmVNZXRob2RzLmgiCi0jaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVK
SVQuaCIKLSNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKLQotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0KLUdQUlJlZyBKSVRDb2RlR2VuZXJh
dG9yOjpmaWxsSW50ZWdlcihOb2RlSW5kZXggbm9kZUluZGV4LCBEYXRhRm9ybWF0JiByZXR1cm5G
b3JtYXQpCi17Ci0gICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgR2Vu
ZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0K
LSAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXROb25lKSB7Ci0gICAg
ICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwotCi0gICAgICAgIGlmIChub2RlLmhhc0NvbnN0
YW50KCkpIHsKLSAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIs
IFNwaWxsT3JkZXJDb25zdGFudCk7Ci0gICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5v
ZGVJbmRleCkpCi0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1t
MzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4KSksIGdwcik7Ci0gICAgICAgICAgICBl
bHNlIGlmIChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpCi0gICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBB
U1NFUlQoaXNKU0NvbnN0YW50KG5vZGVJbmRleCkpOwotICAgICAgICAgICAgICAgIEpTVmFsdWUg
anNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAg
bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoanNWYWx1ZS5wYXlsb2FkKCkpLCBncHIp
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGlu
Zm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SlMgfHwgaW5mby5zcGlsbEZvcm1hdCgpID09
IERhdGFGb3JtYXRKU0ludGVnZXIpOwotICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZp
cnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwotICAgICAgICAgICAgbV9qaXQubG9h
ZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKGdwcik7Ci0gICAgICAgIHJldHVybkZv
cm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwotICAgICAgICByZXR1cm4gZ3ByOwotICAgIH0KLQot
ICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7Ci0gICAgY2FzZSBEYXRhRm9ybWF0
Tm9uZToKLSAgICAgICAgLy8gU2hvdWxkIGhhdmUgZmlsbGVkLCBhYm92ZS4KLSAgICBjYXNlIERh
dGFGb3JtYXRKU0RvdWJsZToKLSAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6Ci0gICAgY2FzZSBE
YXRhRm9ybWF0SlM6Ci0gICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKLSAgICBjYXNlIERhdGFGb3Jt
YXRKU0NlbGw6Ci0gICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoKLSAgICBjYXNlIERhdGFGb3Jt
YXRKU0Jvb2xlYW46Ci0gICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFnZToKLSAgICAgICAgLy8gU2hv
dWxkIG9ubHkgYmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGlmIHdlIGtub3cgdGhpcyBvcGVyYW5k
IHRvIGJlIGludGVnZXIuCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgY2Fz
ZSBEYXRhRm9ybWF0SlNJbnRlZ2VyOiB7Ci0gICAgICAgIEdQUlJlZyB0YWdHUFIgPSBpbmZvLnRh
Z0dQUigpOwotICAgICAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IGluZm8ucGF5bG9hZEdQUigpOwot
ICAgICAgICBtX2dwcnMubG9jayh0YWdHUFIpOwotICAgICAgICBtX2ppdC5qaXRBc3NlcnRJc0pT
SW50MzIodGFnR1BSKTsKLSAgICAgICAgbV9ncHJzLnVubG9jayh0YWdHUFIpOwotICAgICAgICBt
X2dwcnMubG9jayhwYXlsb2FkR1BSKTsKLSAgICAgICAgbV9ncHJzLnJlbGVhc2UodGFnR1BSKTsK
LSAgICAgICAgbV9ncHJzLnJlbGVhc2UocGF5bG9hZEdQUik7Ci0gICAgICAgIG1fZ3Bycy5yZXRh
aW4ocGF5bG9hZEdQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySW50ZWdlcik7Ci0gICAg
ICAgIGluZm8uZmlsbEludGVnZXIocGF5bG9hZEdQUik7Ci0gICAgICAgIHJldHVybkZvcm1hdCA9
IERhdGFGb3JtYXRJbnRlZ2VyOwotICAgICAgICByZXR1cm4gcGF5bG9hZEdQUjsKLSAgICB9Ci0K
LSAgICBjYXNlIERhdGFGb3JtYXRJbnRlZ2VyOiB7Ci0gICAgICAgIEdQUlJlZyBncHIgPSBpbmZv
LmdwcigpOwotICAgICAgICBtX2dwcnMubG9jayhncHIpOwotICAgICAgICBtX2ppdC5qaXRBc3Nl
cnRJc0ludDMyKGdwcik7Ci0gICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2Vy
OwotICAgICAgICByZXR1cm4gZ3ByOwotICAgIH0KLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gSW52YWxpZEdQUlJlZzsKLX0KLQotRlBSUmVnIEpJVENvZGVH
ZW5lcmF0b3I6OmZpbGxEb3VibGUoTm9kZUluZGV4IG5vZGVJbmRleCkKLXsKLSAgICBOb2RlJiBu
b2RlID0gYXQobm9kZUluZGV4KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
ID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1f
Z2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKLQotICAgIGlmIChpbmZvLnJlZ2lzdGVy
Rm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpIHsKLQotICAgICAgICBpZiAobm9kZS5oYXNDb25z
dGFudCgpKSB7Ci0gICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpIHsK
LSAgICAgICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIG5vdCBiZSByZWFjaGFibGU/Ci0gICAg
ICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7Ci0gICAgICAgICAgICAgICAgbV9q
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUlu
ZGV4KSksIGdwcik7Ci0gICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxS
ZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxJ
bnRlZ2VyKGdwcik7Ci0gICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkgewotICAgICAgICAgICAgICAg
IEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWRE
b3VibGUoYWRkcmVzc09mRG91YmxlQ29uc3RhbnQobm9kZUluZGV4KSwgZnByKTsKLSAgICAgICAg
ICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91
YmxlKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZnByOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAv
LyBGSVhNRTogc2hvdWxkIG5vdCBiZSByZWFjaGFibGU/Ci0gICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBEYXRhRm9ybWF0IHNwaWxsRm9ybWF0ID0gaW5mby5zcGlsbEZvcm1hdCgpOwotICAgICAg
ICAgICAgQVNTRVJUKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKLSAgICAgICAgICAgIGlm
IChzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SlNEb3VibGUpIHsKLSAgICAgICAgICAgICAgICBG
UFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91
YmxlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGZwcik7Ci0gICAg
ICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRl
clNwaWxsZWQpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBmcHI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEZQUlJl
ZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJ
bnRlZ2VyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBKSVRDb21waWxl
cjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRh
ZykpOwotICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0Zv
cih2aXJ0dWFsUmVnaXN0ZXIpLCBmcHIpOwotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
aGFzVW5ib3hlZERvdWJsZSA9IG1faml0Lmp1bXAoKTsKLQotICAgICAgICAgICAgaXNJbnRlZ2Vy
LmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKEpJ
VENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGZwcik7Ci0KLSAgICAgICAg
ICAgIGhhc1VuYm94ZWREb3VibGUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgbV9mcHJzLnJl
dGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwotICAgICAgICAg
ICAgaW5mby5maWxsRG91YmxlKGZwcik7Ci0gICAgICAgICAgICByZXR1cm4gZnByOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKLSAgICBj
YXNlIERhdGFGb3JtYXROb25lOgotICAgICAgICAvLyBTaG91bGQgaGF2ZSBmaWxsZWQsIGFib3Zl
LgotICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgot
ICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFu
OgotICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6Ci0gICAgICAgIC8vIFNob3VsZCBvbmx5IGJl
IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBpZiB3ZSBrbm93IHRoaXMgb3BlcmFuZCB0byBiZSBudW1l
cmljLgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIGNhc2UgRGF0YUZvcm1h
dEpTSW50ZWdlcjoKLSAgICBjYXNlIERhdGFGb3JtYXRKUzogewotICAgICAgICBHUFJSZWcgdGFn
R1BSID0gaW5mby50YWdHUFIoKTsKLSAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBpbmZvLnBh
eWxvYWRHUFIoKTsKLSAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7Ci0gICAgICAg
IG1fZ3Bycy5sb2NrKHRhZ0dQUik7Ci0gICAgICAgIG1fZ3Bycy5sb2NrKHBheWxvYWRHUFIpOwot
Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhc1VuYm94ZWREb3VibGU7Ci0KLSAgICAgICAg
aWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0SlNJbnRlZ2VyKSB7Ci0gICAg
ICAgICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKLSAgICAgICAgICAg
IG1faml0LmppdEFzc2VydElzSlNEb3VibGUodGFnR1BSKTsKLSAgICAgICAgICAgIHVuYm94RG91
YmxlKHRhZ0dQUiwgcGF5bG9hZEdQUiwgZnByLCBzY3JhdGNoLmZwcigpKTsKLSAgICAgICAgICAg
IGhhc1VuYm94ZWREb3VibGUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgICAgICBpc0ludGVnZXIu
bGluaygmbV9qaXQpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9E
b3VibGUocGF5bG9hZEdQUiwgZnByKTsKLQotICAgICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1h
dCgpICE9IERhdGFGb3JtYXRKU0ludGVnZXIpCi0gICAgICAgICAgICBoYXNVbmJveGVkRG91Ymxl
LmxpbmsoJm1faml0KTsKLQotICAgICAgICBtX2dwcnMucmVsZWFzZSh0YWdHUFIpOwotICAgICAg
ICBtX2dwcnMucmVsZWFzZShwYXlsb2FkR1BSKTsKLSAgICAgICAgbV9ncHJzLnVubG9jayh0YWdH
UFIpOwotICAgICAgICBtX2dwcnMudW5sb2NrKHBheWxvYWRHUFIpOwotICAgICAgICBtX2ZwcnMu
cmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKLSAgICAgICAg
aW5mby5maWxsRG91YmxlKGZwcik7Ci0gICAgICAgIGluZm8ua2lsbFNwaWxsZWQoKTsKLSAgICAg
ICAgcmV0dXJuIGZwcjsKLSAgICB9Ci0KLSAgICBjYXNlIERhdGFGb3JtYXRJbnRlZ2VyOiB7Ci0g
ICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICBHUFJSZWcgZ3ByID0g
aW5mby5ncHIoKTsKLSAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKLSAgICAgICAgbV9qaXQuY29u
dmVydEludDMyVG9Eb3VibGUoZ3ByLCBmcHIpOwotICAgICAgICBtX2dwcnMudW5sb2NrKGdwcik7
Ci0gICAgICAgIHJldHVybiBmcHI7Ci0gICAgfQotCi0gICAgY2FzZSBEYXRhRm9ybWF0SlNEb3Vi
bGU6IAotICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZTogewotICAgICAgICBGUFJSZWcgZnByID0g
aW5mby5mcHIoKTsKLSAgICAgICAgbV9mcHJzLmxvY2soZnByKTsKLSAgICAgICAgcmV0dXJuIGZw
cjsKLSAgICB9Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IEludmFsaWRGUFJSZWc7Ci19Ci0KLWJvb2wgSklUQ29kZUdlbmVyYXRvcjo6ZmlsbEpTVmFsdWUo
Tm9kZUluZGV4IG5vZGVJbmRleCwgR1BSUmVnJiB0YWdHUFIsIEdQUlJlZyYgcGF5bG9hZEdQUiwg
RlBSUmVnJiBmcHIpCi17Ci0gICAgLy8gRklYTUU6IEZvciBkb3VibGUgd2UgY291bGQgZmlsbCB3
aXRoIGEgRlBSLgotICAgIFVOVVNFRF9QQVJBTShmcHIpOwotCi0gICAgTm9kZSYgbm9kZSA9IGF0
KG5vZGVJbmRleCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUu
dmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRp
b25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0KLSAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3Jt
YXQoKSkgewotICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKLQotICAgICAgICBpZiAobm9kZS5o
YXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRl
eCkpIHsKLSAgICAgICAgICAgICAgICB0YWdHUFIgPSBhbGxvY2F0ZSgpOwotICAgICAgICAgICAg
ICAgIHBheWxvYWRHUFIgPSBhbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1faml0LmVtaXRM
b2FkKG5vZGVJbmRleCwgdGFnR1BSLCBwYXlsb2FkR1BSKTsKLSAgICAgICAgICAgICAgICBpbmZv
LmZpbGxKU1ZhbHVlKHRhZ0dQUiwgcGF5bG9hZEdQUiwgRGF0YUZvcm1hdEpTSW50ZWdlcik7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRhZ0dQUiA9IGFsbG9jYXRlKCk7
Ci0gICAgICAgICAgICAgICAgcGF5bG9hZEdQUiA9IGFsbG9jYXRlKCk7Ci0gICAgICAgICAgICAg
ICAgbV9qaXQuZW1pdExvYWQobm9kZUluZGV4LCB0YWdHUFIsIHBheWxvYWRHUFIpOwotICAgICAg
ICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUodGFnR1BSLCBwYXlsb2FkR1BSLCBEYXRhRm9ybWF0
SlMpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtX2dwcnMucmV0YWluKHRhZ0dQUiwg
dmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAgICAgICAgICAgbV9ncHJz
LnJldGFpbihwYXlsb2FkR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBEYXRhRm9ybWF0IHNwaWxsRm9ybWF0ID0g
aW5mby5zcGlsbEZvcm1hdCgpOwotICAgICAgICAgICAgQVNTRVJUKHNwaWxsRm9ybWF0ICYgRGF0
YUZvcm1hdEpTKTsKLSAgICAgICAgICAgIHRhZ0dQUiA9IGFsbG9jYXRlKCk7Ci0gICAgICAgICAg
ICBwYXlsb2FkR1BSID0gYWxsb2NhdGUoKTsKLSAgICAgICAgICAgIG1faml0LmVtaXRMb2FkKG5v
ZGVJbmRleCwgdGFnR1BSLCBwYXlsb2FkR1BSKTsKLSAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4o
dGFnR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKLSAgICAgICAgICAg
IG1fZ3Bycy5yZXRhaW4ocGF5bG9hZEdQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3Bp
bGxlZCk7Ci0gICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKHRhZ0dQUiwgcGF5bG9hZEdQUiwg
c3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdEpTRG91YmxlID8gRGF0YUZvcm1hdEpTIDogc3BpbGxG
b3JtYXQpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
Y2FzZSBEYXRhRm9ybWF0SW50ZWdlcjoKLSAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgotICAgIGNh
c2UgRGF0YUZvcm1hdEJvb2xlYW46IHsKLSAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7
Ci0gICAgICAgIC8vIElmIHRoZSByZWdpc3RlciBoYXMgYWxyZWFkeSBiZWVuIGxvY2tlZCB3ZSBu
ZWVkIHRvIHRha2UgYSBjb3B5LgotICAgICAgICBpZiAobV9ncHJzLmlzTG9ja2VkKGdwcikpIHsK
LSAgICAgICAgICAgIHBheWxvYWRHUFIgPSBhbGxvY2F0ZSgpOwotICAgICAgICAgICAgbV9qaXQu
bW92ZShncHIsIHBheWxvYWRHUFIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGF5
bG9hZEdQUiA9IGdwcjsKLSAgICAgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7Ci0gICAgICAgIH0K
LSAgICAgICAgdGFnR1BSID0gYWxsb2NhdGUoKTsKLSAgICAgICAgdWludDMyX3QgdGFnID0gSlNW
YWx1ZTo6RW1wdHlWYWx1ZVRhZzsKLSAgICAgICAgRGF0YUZvcm1hdCBmaWxsRm9ybWF0ID0gRGF0
YUZvcm1hdEpTOwotICAgICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewotICAg
ICAgICBjYXNlIERhdGFGb3JtYXRJbnRlZ2VyOgotICAgICAgICAgICAgdGFnID0gSlNWYWx1ZTo6
SW50MzJUYWc7Ci0gICAgICAgICAgICBmaWxsRm9ybWF0ID0gRGF0YUZvcm1hdEpTSW50ZWdlcjsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgotICAgICAg
ICAgICAgdGFnID0gSlNWYWx1ZTo6Q2VsbFRhZzsKLSAgICAgICAgICAgIGZpbGxGb3JtYXQgPSBE
YXRhRm9ybWF0SlNDZWxsOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRGF0YUZv
cm1hdEJvb2xlYW46Ci0gICAgICAgICAgICB0YWcgPSBKU1ZhbHVlOjpCb29sZWFuVGFnOwotICAg
ICAgICAgICAgZmlsbEZvcm1hdCA9IERhdGFGb3JtYXRKU0Jvb2xlYW47Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tMzIodGFnKSwgdGFnR1BSKTsKLSAgICAgICAgbV9ncHJzLnJlbGVhc2UoZ3ByKTsKLSAg
ICAgICAgbV9ncHJzLnJldGFpbih0YWdHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckpT
KTsKLSAgICAgICAgbV9ncHJzLnJldGFpbihwYXlsb2FkR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNw
aWxsT3JkZXJKUyk7Ci0gICAgICAgIGluZm8uZmlsbEpTVmFsdWUodGFnR1BSLCBwYXlsb2FkR1BS
LCBmaWxsRm9ybWF0KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgY2FzZSBE
YXRhRm9ybWF0SlNEb3VibGU6Ci0gICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOiB7Ci0gICAgICAg
IEZQUlJlZyBvbGRGUFIgPSBpbmZvLmZwcigpOwotICAgICAgICBtX2ZwcnMubG9jayhvbGRGUFIp
OwotICAgICAgICB0YWdHUFIgPSBhbGxvY2F0ZSgpOwotICAgICAgICBwYXlsb2FkR1BSID0gYWxs
b2NhdGUoKTsKLSAgICAgICAgYm94RG91YmxlKG9sZEZQUiwgdGFnR1BSLCBwYXlsb2FkR1BSKTsK
LSAgICAgICAgbV9mcHJzLnVubG9jayhvbGRGUFIpOwotICAgICAgICBtX2ZwcnMucmVsZWFzZShv
bGRGUFIpOwotICAgICAgICBtX2dwcnMucmV0YWluKHRhZ0dQUiwgdmlydHVhbFJlZ2lzdGVyLCBT
cGlsbE9yZGVySlMpOwotICAgICAgICBtX2dwcnMucmV0YWluKHBheWxvYWRHUFIsIHZpcnR1YWxS
ZWdpc3RlciwgU3BpbGxPcmRlckpTKTsKLSAgICAgICAgaW5mby5maWxsSlNWYWx1ZSh0YWdHUFIs
IHBheWxvYWRHUFIsIERhdGFGb3JtYXRKUyk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIGNhc2UgRGF0YUZvcm1hdEpTOgotICAgIGNhc2UgRGF0YUZvcm1hdEpTSW50ZWdlcjoK
LSAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFu
OiB7Ci0gICAgICAgIHRhZ0dQUiA9IGluZm8udGFnR1BSKCk7Ci0gICAgICAgIHBheWxvYWRHUFIg
PSBpbmZvLnBheWxvYWRHUFIoKTsKLSAgICAgICAgbV9ncHJzLmxvY2sodGFnR1BSKTsKLSAgICAg
ICAgbV9ncHJzLmxvY2socGF5bG9hZEdQUik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICAgICAgCi0gICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFnZToKLSAgICAgICAgLy8gdGhpcyB0
eXBlIGN1cnJlbnRseSBuZXZlciBvY2N1cnMKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKE5v
ZGUmIG5vZGUpCi17Ci0gICAgaWYgKGlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQxKCkpKSB7Ci0g
ICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAg
b3AxLmZpbGwoKTsKLSAgICAgICAgaWYgKG9wMS5pc0RvdWJsZSgpKSB7Ci0gICAgICAgICAgICBG
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlRG91
YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigpKTsKLSAgICAgICAgICAgIGRvdWJsZVJlc3VsdChy
ZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcywgb3AxKTsKLSAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIG9wMSwgZmFsc2UpOwotICAgICAgICAgICAgbV9q
aXQubW92ZShvcDEudGFnR1BSKCksIHJlc3VsdFRhZy5ncHIoKSk7Ci0gICAgICAgICAgICBtX2pp
dC5tb3ZlKG9wMS5wYXlsb2FkR1BSKCksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAgICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG1f
Y29tcGlsZUluZGV4KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
SlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIEdQUlRlbXBvcmFy
eSByZXN1bHRUYWcodGhpcywgb3AxKTsKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0
aGlzLCBvcDEsIGZhbHNlKTsKLQotICAgIEFTU0VSVCghaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hp
bGQxKCkpKTsKLSAgICBBU1NFUlQoIWlzTnVtYmVyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpOwot
Ci0gICAgR1BSUmVnIHRhZ0dQUiA9IG9wMS50YWdHUFIoKTsKLSAgICBHUFJSZWcgcGF5bG9hZEdQ
UiA9IG9wMS5wYXlsb2FkR1BSKCk7Ci0gICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHJlc3VsdFRh
Zy5ncHIoKTsKLSAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3By
KCk7Ci0gICAgb3AxLnVzZSgpOwotCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0g
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpJbnQzMlRhZykpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vbk51bWVyaWMg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCB0YWdHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKTsKLQotICAgIC8vIEZpcnN0LCBpZiB3ZSBn
ZXQgaGVyZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVlCi0gICAgSklUQ29t
cGlsZXI6Okp1bXAgaGFzVW5ib3hlZERvdWJsZSA9IG1faml0Lmp1bXAoKTsKLQotICAgIC8vIE5l
eHQgaGFuZGxlIGNlbGxzICgmIG90aGVyIEpTIGltbWVkaWF0ZXMpCi0gICAgbm9uTnVtZXJpYy5s
aW5rKCZtX2ppdCk7Ci0gICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0VGFnR1BSLCBy
ZXN1bHRQYXlsb2FkR1BSKTsKLSAgICBjYWxsT3BlcmF0aW9uKGRmZ0NvbnZlcnRKU1ZhbHVlVG9O
dW1iZXIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSLCB0YWdHUFIsIHBheWxvYWRHUFIpOwotICAg
IGJveERvdWJsZShGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgcmVzdWx0VGFnR1BSLCByZXN1bHRQ
YXlsb2FkR1BSKTsKLSAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFRhZ0dQUiwgcmVz
dWx0UGF5bG9hZEdQUik7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgaGFzQ2FsbGVkVG9OdW1iZXIg
PSBtX2ppdC5qdW1wKCk7Ci0gICAgCi0gICAgLy8gRmluYWxseSwgaGFuZGxlIGludGVnZXJzLgot
ICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7Ci0gICAgaGFzVW5ib3hlZERvdWJsZS5saW5rKCZt
X2ppdCk7Ci0gICAgbV9qaXQubW92ZSh0YWdHUFIsIHJlc3VsdFRhZ0dQUik7Ci0gICAgbV9qaXQu
bW92ZShwYXlsb2FkR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICBoYXNDYWxsZWRUb051bWJl
ci5saW5rKCZtX2ppdCk7Ci0gICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBh
eWxvYWRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwot
fQotCi12b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlVmFsdWVUb0ludDMyKE5v
ZGUmIG5vZGUpCi17Ci0gICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkp
OwotCi0gICAgaWYgKGlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKSB7Ci0gICAgICAgIElu
dGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwotICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVz
dWx0LmdwcigpKTsKLSAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGls
ZUluZGV4KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdlbmVyYXRpb25JbmZvJiBj
aGlsZEluZm8gPSBtX2dlbmVyYXRpb25JbmZvW2F0KG5vZGUuY2hpbGQxKCkpLnZpcnR1YWxSZWdp
c3RlcigpXTsKLSAgICBpZiAoY2hpbGRJbmZvLmlzSlNEb3VibGUoKSkgewotICAgICAgICBEb3Vi
bGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgRlBSUmVnIGZwciA9IG9wMS5mcHIoKTsKLSAgICAgICAg
R1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgb3AxLnVzZSgpOwotICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCB0cnVuY2F0ZWRUb0ludGVnZXIgPSBtX2ppdC5icmFuY2hUcnVuY2F0
ZURvdWJsZVRvSW50MzIoZnByLCBncHIsIEpJVENvbXBpbGVyOjpCcmFuY2hJZlRydW5jYXRlU3Vj
Y2Vzc2Z1bCk7Ci0KLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoZ3ByKTsKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbih0b0ludDMyLCBncHIsIGZwcik7Ci0gICAgICAgIHNpbGVudEZpbGxB
bGxSZWdpc3RlcnMoZ3ByKTsKLQotICAgICAgICB0cnVuY2F0ZWRUb0ludGVnZXIubGluaygmbV9q
aXQpOwotICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwciwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxk
cmVuQ2FsbGVkRXhwbGljaXRseSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBKU1Zh
bHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKLSAgICBHUFJSZWcgdGFnR1BSID0gb3AxLnRhZ0dQUigpOwotICAgIEdQUlJl
ZyBwYXlsb2FkR1BSID0gb3AxLnBheWxvYWRHUFIoKTsKLSAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOwotICAgIG9wMS51c2UoKTsKLQotICAgIEpJVENvbXBpbGVyOjpKdW1wIGlz
SW50ZWdlciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdGFnR1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKLQotICAgIC8vIEZpcnN0IGhhbmRsZSBu
b24taW50ZWdlcnMKLSAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAg
IGNhbGxPcGVyYXRpb24oZGZnQ29udmVydEpTVmFsdWVUb0ludDMyLCBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgdGFnR1BSLCBwYXlsb2FkR1BSKTsKLSAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwotICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVz
dWx0R1BSKTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBoYXNDYWxsZWRUb0ludDMyID0gbV9qaXQu
anVtcCgpOwotCi0gICAgLy8gVGhlbiBoYW5kbGUgaW50ZWdlcnMuCi0gICAgaXNJbnRlZ2VyLmxp
bmsoJm1faml0KTsKLSAgICBtX2ppdC5tb3ZlKHBheWxvYWRHUFIsIHJlc3VsdEdQUik7Ci0gICAg
aGFzQ2FsbGVkVG9JbnQzMi5saW5rKCZtX2ppdCk7Ci0gICAgaW50ZWdlclJlc3VsdChyZXN1bHRH
UFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwotfQotCi12
b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlVUludDMyVG9OdW1iZXIoTm9kZSYg
bm9kZSkKLXsKLSAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0g
ICAgRlBSVGVtcG9yYXJ5IGJveGVyKHRoaXMpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWco
dGhpcywgb3AxKTsKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAgICAg
ICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgcG9zaXRpdmUgPSBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCBvcDEuZ3ByKCksIFRydXN0ZWRJbW0zMigw
KSk7Ci0gICAgICAgIAotICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKG9wMS5ncHIoKSwg
Ym94ZXIuZnByKCkpOwotICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIo
JnR3b1RvVGhlMzIpLCByZXN1bHRQYXlsb2FkLmdwcigpKTsgLy8gcmV1c2UgcmVzdWx0UGF5bG9h
ZCByZWdpc3RlciBoZXJlLgotICAgIG1faml0LmFkZERvdWJsZShKSVRDb21waWxlcjo6QWRkcmVz
cyhyZXN1bHRQYXlsb2FkLmdwcigpLCAwKSwgYm94ZXIuZnByKCkpOwotICAgICAgICAKLSAgICBi
b3hEb3VibGUoYm94ZXIuZnByKCksIHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIo
KSk7Ci0gICAgICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7
Ci0gICAgICAgIAotICAgIHBvc2l0aXZlLmxpbmsoJm1faml0KTsKLSAgICAgICAgCi0gICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZXN1bHRUYWcuZ3ByKCkp
OwotICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpKTsKLSAgICAg
ICAgCi0gICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0KLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRh
Zy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwotfQotCi12b2lk
IEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlS25vd25Db25zdGFudEFyaXRoT3AoTm9k
ZVR5cGUgb3AsIE5vZGVJbmRleCByZWdDaGlsZCwgTm9kZUluZGV4IGltbUNoaWxkLCBib29sIGNv
bW11dGUpCi17Ci0gICAgSlNWYWx1ZU9wZXJhbmQgcmVnQXJnKHRoaXMsIHJlZ0NoaWxkKTsKLSAg
ICByZWdBcmcuZmlsbCgpOwotICAgIAotICAgIGlmIChyZWdBcmcuaXNEb3VibGUoKSkgewotICAg
ICAgICBGUFJSZWcgcmVnQXJnRlBSID0gcmVnQXJnLmZwcigpOwotICAgICAgICBGUFJUZW1wb3Jh
cnkgaW1tKHRoaXMpOwotICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHJlZ0FyZyk7
Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICBGUFJSZWcgaW1t
RlBSID0gaW1tLmZwcigpOwotICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcmVzdWx0LmZwcigp
OwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgIHVz
ZShyZWdDaGlsZCk7Ci0gICAgICAgIHVzZShpbW1DaGlsZCk7Ci0KLSAgICAgICAgaW50MzJfdCBp
bW0zMiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KGltbUNoaWxkKTsKLSAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tMzIoaW1tMzIpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgbV9qaXQuY29udmVy
dEludDMyVG9Eb3VibGUoc2NyYXRjaEdQUiwgaW1tRlBSKTsKLQotICAgICAgICBzd2l0Y2ggKG9w
KSB7Ci0gICAgICAgIGNhc2UgVmFsdWVBZGQ6Ci0gICAgICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAg
ICAgICAgICBtX2ppdC5hZGREb3VibGUocmVnQXJnRlBSLCBpbW1GUFIsIHJlc3VsdEZQUik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhTdWI6Ci0gICAg
ICAgICAgICBtX2ppdC5zdWJEb3VibGUocmVnQXJnRlBSLCBpbW1GUFIsIHJlc3VsdEZQUik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBkb3VibGVS
ZXN1bHQocmVzdWx0RlBSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNp
dGx5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdQUlJlZyByZWdBcmdUYWdHUFIg
PSByZWdBcmcudGFnR1BSKCk7Ci0gICAgR1BSUmVnIHJlZ0FyZ1BheWxvYWRHUFIgPSByZWdBcmcu
cGF5bG9hZEdQUigpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcywgcmVnQXJnKTsK
LSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzLCByZWdBcmcsIGZhbHNlKTsKLSAg
ICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0VGFnLmdwcigpOwotICAgIEdQUlJlZyByZXN1
bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKLSAgICBGUFJUZW1wb3JhcnkgdG1w
MSh0aGlzKTsKLSAgICBGUFJUZW1wb3JhcnkgdG1wMih0aGlzKTsKLSAgICBGUFJSZWcgdG1wMUZQ
UiA9IHRtcDEuZnByKCk7Ci0gICAgRlBSUmVnIHRtcDJGUFIgPSB0bXAyLmZwcigpOwotICAgIHVz
ZShyZWdDaGlsZCk7Ci0gICAgdXNlKGltbUNoaWxkKTsKLQotICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5vdEludDsKLSAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KGltbUNoaWxk
KTsKLQotICAgIGlmICghaXNLbm93bk51bWVyaWMocmVnQ2hpbGQpKQotICAgICAgICBub3RJbnQg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlZ0FyZ1RhZ0dQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6
Okp1bXAgb3ZlcmZsb3c7Ci0KLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBWYWx1ZUFkZDoK
LSAgICBjYXNlIEFyaXRoQWRkOgotICAgICAgICBvdmVyZmxvdyA9IG1faml0LmJyYW5jaEFkZDMy
KE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgcmVnQXJnUGF5bG9hZEdQUiwgSW1tMzIoaW1tKSwg
cmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBjYXNlIEFy
aXRoU3ViOgotICAgICAgICBvdmVyZmxvdyA9IG1faml0LmJyYW5jaFN1YjMyKE1hY3JvQXNzZW1i
bGVyOjpPdmVyZmxvdywgcmVnQXJnUGF5bG9hZEdQUiwgSW1tMzIoaW1tKSwgcmVzdWx0UGF5bG9h
ZEdQUik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlc3VsdFRhZ0dQUik7Ci0gICAgSklUQ29tcGlsZXI6Okp1
bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAgICAKLSAgICBvdmVyZmxvdy5saW5rKCZtX2ppdCk7
Ci0gICAgLy8gZmlyc3QgZGVhbCB3aXRoIG92ZXJmbG93IGNhc2UKLSAgICBtX2ppdC5jb252ZXJ0
SW50MzJUb0RvdWJsZShyZWdBcmdQYXlsb2FkR1BSLCB0bXAyRlBSKTsKLSAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW0zMihpbW0pLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICBtX2ppdC5jb252ZXJ0
SW50MzJUb0RvdWJsZShyZXN1bHRQYXlsb2FkR1BSLCB0bXAxRlBSKTsKLSAgICBzd2l0Y2ggKG9w
KSB7Ci0gICAgY2FzZSBWYWx1ZUFkZDoKLSAgICBjYXNlIEFyaXRoQWRkOgotICAgICAgICBtX2pp
dC5hZGREb3VibGUodG1wMUZQUiwgdG1wMkZQUik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAK
LSAgICBjYXNlIEFyaXRoU3ViOgotICAgICAgICBtX2ppdC5zdWJEb3VibGUodG1wMUZQUiwgdG1w
MkZQUik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgZGVmYXVsdDoKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIAotICAgIEpJVENvbXBpbGVyOjpK
dW1wIGRvbmVDYXNlQ29udmVydGVkVG9JbnQ7Ci0gICAgCi0gICAgaWYgKG9wID09IFZhbHVlQWRk
KSB7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0gICAgICAg
IG1faml0LmJyYW5jaENvbnZlcnREb3VibGVUb0ludDMyKHRtcDJGUFIsIHJlc3VsdFBheWxvYWRH
UFIsIGZhaWx1cmVDYXNlcywgdG1wMUZQUik7Ci0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVzdWx0VGFnR1BSKTsKLSAgICAgICAgZG9uZUNhc2VD
b252ZXJ0ZWRUb0ludCA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIGZhaWx1cmVD
YXNlcy5saW5rKCZtX2ppdCk7Ci0gICAgfQotICAgIAotICAgIGJveERvdWJsZSh0bXAyRlBSLCBy
ZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAgICAKLSAgICBpZiAoIWlzS25v
d25OdW1lcmljKHJlZ0NoaWxkKSkgewotICAgICAgICBBU1NFUlQobm90SW50LmlzU2V0KCkpOwot
ICAgICAgICBBU1NFUlQob3AgPT0gVmFsdWVBZGQpOwotICAgICAgICAgICAgCi0gICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGRvbmVDYXNlV2FzTnVtYmVyID0gbV9qaXQuanVtcCgpOwotICAgICAg
ICAgICAgCi0gICAgICAgIG5vdEludC5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BS
KTsKLSAgICAgICAgaWYgKGNvbW11dGUpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblZhbHVlQWRkTm90TnVtYmVyLCByZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpJbW0zMihpbW0pLCByZWdBcmdUYWdHUFIsIHJlZ0FyZ1BheWxvYWRHUFIp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVl
QWRkTm90TnVtYmVyLCByZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIHJlZ0FyZ1RhZ0dQ
UiwgcmVnQXJnUGF5bG9hZEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGltbSkpOwotICAgICAg
ICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUik7
Ci0gICAgICAgICAgICAKLSAgICAgICAgZG9uZUNhc2VXYXNOdW1iZXIubGluaygmbV9qaXQpOwot
ICAgIH0KLSAgICAKLSAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICBpZiAoZG9uZUNhc2VDb252
ZXJ0ZWRUb0ludC5pc1NldCgpKQotICAgICAgICBkb25lQ2FzZUNvbnZlcnRlZFRvSW50Lmxpbmso
Jm1faml0KTsKLQotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2Fk
R1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLX0KLQot
dm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZUJhc2ljQXJpdGhPcChOb2RlVHlw
ZSBvcCwgTm9kZSAmbm9kZSkKLXsKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOwotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGlsZDIoKSk7
Ci0gICAgYXJnMS5maWxsKCk7Ci0gICAgYXJnMi5maWxsKCk7Ci0KLSAgICBpZiAoYXJnMS5pc0Rv
dWJsZSgpICYmIGFyZzIuaXNEb3VibGUoKSkgewotICAgICAgICBGUFJSZWcgYXJnMUZQUiA9IGFy
ZzEuZnByKCk7Ci0gICAgICAgIEZQUlJlZyBhcmcyRlBSID0gYXJnMi5mcHIoKTsKLSAgICAgICAg
RlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBhcmcxKTsKLSAgICAgICAgYXJnMS51c2UoKTsKLSAg
ICAgICAgYXJnMi51c2UoKTsKLSAgICAgICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIFZh
bHVlQWRkOgotICAgICAgICBjYXNlIEFyaXRoQWRkOgotICAgICAgICAgICAgbV9qaXQuYWRkRG91
YmxlKGFyZzFGUFIsIGFyZzJGUFIsIHJlc3VsdC5mcHIoKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoU3ViOgotICAgICAgICAgICAgbV9qaXQu
c3ViRG91YmxlKGFyZzFGUFIsIGFyZzJGUFIsIHJlc3VsdC5mcHIoKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoTXVsOgotICAgICAgICAgICAg
bV9qaXQubXVsRG91YmxlKGFyZzFGUFIsIGFyZzJGUFIsIHJlc3VsdC5mcHIoKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBkb3VibGVSZXN1bHQo
cmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEZQUlRlbXBvcmFyeSB0bXAxKHRoaXMp
OwotICAgIEZQUlRlbXBvcmFyeSB0bXAyKHRoaXMpOwotICAgIEZQUlJlZyB0bXAxRlBSID0gdG1w
MS5mcHIoKTsKLSAgICBGUFJSZWcgdG1wMkZQUiA9IHRtcDIuZnByKCk7Ci0gICAgCi0gICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzLCBhcmcxLmlzRG91YmxlKCkgPyBhcmcyIDogYXJnMSk7
Ci0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcywgYXJnMS5pc0RvdWJsZSgpID8g
YXJnMiA6IGFyZzEsIGZhbHNlKTsKLSAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0VGFn
LmdwcigpOwotICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIo
KTsKLQotICAgIEdQUlJlZyBhcmcxVGFnR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICBHUFJSZWcg
YXJnMVBheWxvYWRHUFIgPSBJbnZhbGlkR1BSUmVnOwotICAgIEdQUlJlZyBhcmcyVGFnR1BSID0g
SW52YWxpZEdQUlJlZzsKLSAgICBHUFJSZWcgYXJnMlBheWxvYWRHUFIgPSBJbnZhbGlkR1BSUmVn
OwotICAgIEdQUlRlbXBvcmFyeSB0bXBUYWcodGhpcyk7Ci0gICAgR1BSVGVtcG9yYXJ5IHRtcFBh
eWxvYWQodGhpcyk7Ci0KLSAgICBpZiAoYXJnMS5pc0RvdWJsZSgpKSB7Ci0gICAgICAgIGFyZzFU
YWdHUFIgPSB0bXBUYWcuZ3ByKCk7Ci0gICAgICAgIGFyZzFQYXlsb2FkR1BSID0gdG1wUGF5bG9h
ZC5ncHIoKTsKLSAgICAgICAgYm94RG91YmxlKGFyZzEuZnByKCksIGFyZzFUYWdHUFIsIGFyZzFQ
YXlsb2FkR1BSKTsKLSAgICAgICAgYXJnMlRhZ0dQUiA9IGFyZzIudGFnR1BSKCk7Ci0gICAgICAg
IGFyZzJQYXlsb2FkR1BSID0gYXJnMi5wYXlsb2FkR1BSKCk7Ci0gICAgfSBlbHNlIGlmIChhcmcy
LmlzRG91YmxlKCkpIHsKLSAgICAgICAgYXJnMVRhZ0dQUiA9IGFyZzEudGFnR1BSKCk7Ci0gICAg
ICAgIGFyZzFQYXlsb2FkR1BSID0gYXJnMS5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIGFyZzJUYWdH
UFIgPSB0bXBUYWcuZ3ByKCk7Ci0gICAgICAgIGFyZzJQYXlsb2FkR1BSID0gdG1wUGF5bG9hZC5n
cHIoKTsKLSAgICAgICAgYm94RG91YmxlKGFyZzIuZnByKCksIGFyZzJUYWdHUFIsIGFyZzJQYXls
b2FkR1BSKTsKLSAgICB9IGVsc2UgewotICAgICAgICBhcmcxVGFnR1BSID0gYXJnMS50YWdHUFIo
KTsKLSAgICAgICAgYXJnMVBheWxvYWRHUFIgPSBhcmcxLnBheWxvYWRHUFIoKTsKLSAgICAgICAg
YXJnMlRhZ0dQUiA9IGFyZzIudGFnR1BSKCk7Ci0gICAgICAgIGFyZzJQYXlsb2FkR1BSID0gYXJn
Mi5wYXlsb2FkR1BSKCk7Ci0gICAgfQotCi0gICAgYXJnMS51c2UoKTsKLSAgICBhcmcyLnVzZSgp
OwotICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1wIGNoaWxkMU5vdEludDsKLSAgICBKSVRDb21w
aWxlcjo6SnVtcCBjaGlsZDJOb3RJbnQ7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IG92ZXJm
bG93OwotICAgIAotICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKSkpCi0gICAg
ICAgIGNoaWxkMU5vdEludCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgYXJnMVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0KLSAgICBp
ZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKQotICAgICAgICBjaGlsZDJOb3RJbnQg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGFyZzJUYWdHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwotICAgIAotICAgIHN3aXRjaCAob3ApIHsK
LSAgICBjYXNlIFZhbHVlQWRkOgotICAgIGNhc2UgQXJpdGhBZGQ6IHsKLSAgICAgICAgb3ZlcmZs
b3cuYXBwZW5kKG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgYXJn
MVBheWxvYWRHUFIsIGFyZzJQYXlsb2FkR1BSLCByZXN1bHRQYXlsb2FkR1BSKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBBcml0aFN1YjogewotICAgICAgICBv
dmVyZmxvdy5hcHBlbmQobV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93
LCBhcmcxUGF5bG9hZEdQUiwgYXJnMlBheWxvYWRHUFIsIHJlc3VsdFBheWxvYWRHUFIpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIEFyaXRoTXVsOiB7Ci0gICAg
ICAgIG92ZXJmbG93LmFwcGVuZChtX2ppdC5icmFuY2hNdWwzMihNYWNyb0Fzc2VtYmxlcjo6T3Zl
cmZsb3csIGFyZzFQYXlsb2FkR1BSLCBhcmcyUGF5bG9hZEdQUiwgcmVzdWx0UGF5bG9hZEdQUikp
OwotICAgICAgICBvdmVyZmxvdy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCByZXN1bHRQYXlsb2FkR1BSKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICAgICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
fQotICAgIAotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwg
cmVzdWx0VGFnR1BSKTsKLSAgICAgICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1f
aml0Lmp1bXAoKTsKLSAgICAKLSAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgaGF2ZUZQUkFyZ3Vt
ZW50czsKLQotICAgIG92ZXJmbG93LmxpbmsoJm1faml0KTsKLSAgICAgICAgCi0gICAgLy8gYm90
aCBhcmd1bWVudHMgYXJlIGludGVnZXJzCi0gICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUo
YXJnMVBheWxvYWRHUFIsIHRtcDFGUFIpOwotICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91Ymxl
KGFyZzJQYXlsb2FkR1BSLCB0bXAyRlBSKTsKLSAgICAgICAgCi0gICAgaGF2ZUZQUkFyZ3VtZW50
cy5hcHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICAgICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXBM
aXN0IG5vdE51bWJlcnM7Ci0gICAgICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1wIGNoaWxkMk5v
dEludDI7Ci0gICAgICAgIAotICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKSkp
IHsKLSAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgIGNoaWxkMU5v
dEludC5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duTnVt
ZXJpYyhub2RlLmNoaWxkMSgpKSkgewotICAgICAgICAgICAgQVNTRVJUKG9wID09IFZhbHVlQWRk
KTsKLSAgICAgICAgICAgIG5vdE51bWJlcnMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGFyZzFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpM
b3dlc3RUYWcpKSk7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgaWYgKGFyZzEuaXNEb3VibGUo
KSkKLSAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoYXJnMS5mcHIoKSwgdG1wMUZQUik7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHVuYm94RG91YmxlKGFyZzFUYWdHUFIsIGFyZzFQYXls
b2FkR1BSLCB0bXAxRlBSLCBzY3JhdGNoLmZwcigpKTsKLSAgICAgICAgICAgIAotICAgICAgICAv
LyBjaGlsZDEgaXMgY29udmVydGVkIHRvIGEgZG91YmxlOyBjaGlsZDIgbWF5IGVpdGhlciBiZSBh
biBpbnQgb3IKLSAgICAgICAgLy8gYSBib3hlZCBkb3VibGUKLSAgICAgICAgICAgIAotICAgICAg
ICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7Ci0gICAgICAgICAgICBpZiAo
aXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDIoKSkpCi0gICAgICAgICAgICAgICAgY2hpbGQyTm90
SW50MiA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnMlRhZ0dQ
UiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0gICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICBBU1NFUlQob3AgPT0gVmFsdWVBZGQpOwotICAgICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIGNoaWxkMklzSW50ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLCBhcmcyVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
KTsKLSAgICAgICAgICAgICAgICBub3ROdW1iZXJzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBhcmcyVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6TG93ZXN0VGFnKSkpOwotICAgICAgICAgICAgICAgIGNoaWxkMk5vdEludDIgPSBtX2ppdC5q
dW1wKCk7Ci0gICAgICAgICAgICAgICAgY2hpbGQySXNJbnQubGluaygmbV9qaXQpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgLy8gY2hpbGQgMiBpcyBk
ZWZpbml0ZWx5IGFuIGludGVnZXIKLSAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUo
YXJnMlBheWxvYWRHUFIsIHRtcDJGUFIpOwotICAgICAgICAgICAgCi0gICAgICAgIGhhdmVGUFJB
cmd1bWVudHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgfQotICAgICAgICAKLSAgICBpZiAo
IWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSBz
Y3JhdGNoKHRoaXMpOwotICAgICAgICBjaGlsZDJOb3RJbnQubGluaygmbV9qaXQpOwotICAgICAg
ICAgICAgCi0gICAgICAgIGlmICghaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDIoKSkpIHsKLSAg
ICAgICAgICAgIEFTU0VSVChvcCA9PSBWYWx1ZUFkZCk7Ci0gICAgICAgICAgICBub3ROdW1iZXJz
LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBhcmcy
VGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwotICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgLy8gY2hpbGQxIGlzIGRlZmluaXRlbHkgYW4gaW50ZWdlciwg
YW5kIGNoaWxkIDIgaXMgZGVmaW5pdGVseSBub3QKLSAgICAgICAgbV9qaXQuY29udmVydEludDMy
VG9Eb3VibGUoYXJnMVBheWxvYWRHUFIsIHRtcDFGUFIpOwotICAgICAgICAgICAgCi0gICAgICAg
IGlmIChjaGlsZDJOb3RJbnQyLmlzU2V0KCkpCi0gICAgICAgICAgICBjaGlsZDJOb3RJbnQyLmxp
bmsoJm1faml0KTsKLSAgICAgICAgICAgIAotICAgICAgICBpZiAoYXJnMi5pc0RvdWJsZSgpKQot
ICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShhcmcyLmZwcigpLCB0bXAyRlBSKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgdW5ib3hEb3VibGUoYXJnMlRhZ0dQUiwgYXJnMlBheWxvYWRH
UFIsIHRtcDJGUFIsIHNjcmF0Y2guZnByKCkpOwotICAgIH0KLSAgICAgICAgCi0gICAgaGF2ZUZQ
UkFyZ3VtZW50cy5saW5rKCZtX2ppdCk7Ci0gICAgICAgIAotICAgIHN3aXRjaCAob3ApIHsKLSAg
ICBjYXNlIFZhbHVlQWRkOgotICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAgICAgIG1faml0LmFkZERv
dWJsZSh0bXAyRlBSLCB0bXAxRlBSKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAg
ICBjYXNlIEFyaXRoU3ViOgotICAgICAgICBtX2ppdC5zdWJEb3VibGUodG1wMkZQUiwgdG1wMUZQ
Uik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgY2FzZSBBcml0aE11bDoKLSAg
ICAgICAgbV9qaXQubXVsRG91YmxlKHRtcDJGUFIsIHRtcDFGUFIpOwotICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIH0KLSAgICAKLSAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lQ2FzZUNvbnZlcnRlZFRv
SW50OwotICAgIAotICAgIGlmIChvcCA9PSBWYWx1ZUFkZCkgewotICAgICAgICBKSVRDb21waWxl
cjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwotICAgICAgICBtX2ppdC5icmFuY2hDb252ZXJ0RG91
YmxlVG9JbnQzMih0bXAxRlBSLCByZXN1bHRQYXlsb2FkR1BSLCBmYWlsdXJlQ2FzZXMsIHRtcDJG
UFIpOwotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyks
IHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgIAotICAgICAgICBkb25lQ2FzZUNvbnZlcnRlZFRvSW50
ID0gbV9qaXQuanVtcCgpOwotICAgICAgICAKLSAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmsoJm1f
aml0KTsKLSAgICB9Ci0gICAgICAgIAotICAgIGJveERvdWJsZSh0bXAxRlBSLCByZXN1bHRUYWdH
UFIsIHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAgICAKLSAgICBpZiAoIW5vdE51bWJlcnMuZW1w
dHkoKSkgewotICAgICAgICBBU1NFUlQob3AgPT0gVmFsdWVBZGQpOwotICAgICAgICAgICAgCi0g
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmVDYXNlV2FzTnVtYmVyID0gbV9qaXQuanVtcCgp
OwotICAgICAgICAgICAgCi0gICAgICAgIG5vdE51bWJlcnMubGluaygmbV9qaXQpOwotICAgICAg
ICAgICAgCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFRhZ0dQUiwgcmVz
dWx0UGF5bG9hZEdQUik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVBZGRO
b3ROdW1iZXIsIHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgYXJnMVRhZ0dQUiwgYXJn
MVBheWxvYWRHUFIsIGFyZzJUYWdHUFIsIGFyZzJQYXlsb2FkR1BSKTsKLSAgICAgICAgc2lsZW50
RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwotCi0gICAg
ICAgIGRvbmVDYXNlV2FzTnVtYmVyLmxpbmsoJm1faml0KTsKLSAgICB9Ci0gICAgCi0gICAgZG9u
ZS5saW5rKCZtX2ppdCk7Ci0gICAgaWYgKGRvbmVDYXNlQ29udmVydGVkVG9JbnQuaXNTZXQoKSkK
LSAgICAgICAgZG9uZUNhc2VDb252ZXJ0ZWRUb0ludC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIAot
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBtX2NvbXBp
bGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLX0KLQotSklUQ29tcGlsZXI6
OkNhbGwgSklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkR2V0QnlJZChHUFJSZWcgYmFzZVBheWxvYWRH
UFIsIEdQUlJlZyByZXN1bHRUYWdHUFIsIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSLCBHUFJSZWcg
c2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAg
c2xvd1BhdGhUYXJnZXQsIE5vZGVUeXBlIG5vZGVUeXBlKQotewotICAgIEFTU0VSVChub2RlVHlw
ZSA9PSBHZXRCeUlkIHx8IG5vZGVUeXBlID09IEdldE1ldGhvZCk7Ci0KLSAgICBtX2ppdC5iZWdp
blVuaW50ZXJydXB0ZWRTZXF1ZW5jZSgpOwotICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIg
c3RydWN0dXJlVG9Db21wYXJlOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIHN0cnVjdHVyZUNoZWNr
ID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29t
cGlsZXI6OkFkZHJlc3MoYmFzZVBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCBzdHJ1Y3R1cmVUb0NvbXBhcmUsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KC0xKSkpOwotICAgIG1faml0LmVuZFVuaW50ZXJydXB0ZWRTZXF1ZW5j
ZSgpOwotICAgIAotICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZVBh
eWxvYWRHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgcmVzdWx0UGF5
bG9hZEdQUik7Ci0gICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbENvbXBhY3QgdGFnTG9hZFdpdGhQ
YXRjaCA9IG1faml0LmxvYWQzMldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEpJVENvbXBp
bGVyOjpBZGRyZXNzKHJlc3VsdFBheWxvYWRHUFIsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSksIHJlc3VsdFRhZ0dQUik7Ci0gICAgSklUQ29tcGls
ZXI6OkRhdGFMYWJlbENvbXBhY3QgcGF5bG9hZExvYWRXaXRoUGF0Y2ggPSBtX2ppdC5sb2FkMzJX
aXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRQ
YXlsb2FkR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6Okp1
bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLQotICAgIHN0cnVjdHVyZUNoZWNrLmxpbmsoJm1faml0
KTsKLSAgICAKLSAgICBpZiAoc2xvd1BhdGhUYXJnZXQuaXNTZXQoKSkKLSAgICAgICAgc2xvd1Bh
dGhUYXJnZXQubGluaygmbV9qaXQpOwotICAgIAotICAgIEpJVENvbXBpbGVyOjpMYWJlbCBzbG93
Q2FzZSA9IG1faml0LmxhYmVsKCk7Ci0KLSAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1
bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwotICAgIEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0
aW9uQ2FsbCA9IGNhbGxPcGVyYXRpb24obm9kZVR5cGUgPT0gR2V0QnlJZCA/IG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSA6IG9wZXJhdGlvbkdldE1ldGhvZE9wdGltaXplLCByZXN1bHRUYWdHUFIs
IHJlc3VsdFBheWxvYWRHUFIsIGJhc2VQYXlsb2FkR1BSLCBpZGVudGlmaWVyKGlkZW50aWZpZXJO
dW1iZXIpKTsKLSAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0
UGF5bG9hZEdQUik7Ci0gICAgCi0gICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgCi0gICAgSklU
Q29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1faml0LmxhYmVsKCk7Ci0KLSAgICBtX2ppdC5h
ZGRQcm9wZXJ0eUFjY2VzcyhQcm9wZXJ0eUFjY2Vzc1JlY29yZChzdHJ1Y3R1cmVUb0NvbXBhcmUs
IGZ1bmN0aW9uQ2FsbCwgc3RydWN0dXJlQ2hlY2ssIHRhZ0xvYWRXaXRoUGF0Y2gsIHBheWxvYWRM
b2FkV2l0aFBhdGNoLCBzbG93Q2FzZSwgZG9uZUxhYmVsLCBzYWZlQ2FzdDxpbnQ4X3Q+KGJhc2VQ
YXlsb2FkR1BSKSwgc2FmZUNhc3Q8aW50OF90PihyZXN1bHRUYWdHUFIpLCBzYWZlQ2FzdDxpbnQ4
X3Q+KHJlc3VsdFBheWxvYWRHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpKSk7Ci0g
ICAgCi0gICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKLX0KLQotdm9pZCBKSVRDb2RlR2VuZXJhdG9y
OjpjYWNoZWRQdXRCeUlkKEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHZhbHVlVGFnR1BS
LCBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSLCBOb2RlSW5kZXggdmFsdWVJbmRleCwgR1BSUmVnIHNj
cmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQgcHV0S2luZCwgSklU
Q29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQpCi17Ci0gICAgbV9qaXQuYmVnaW5VbmludGVy
cnVwdGVkU2VxdWVuY2UoKTsKLSAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRyIHN0cnVjdHVy
ZVRvQ29tcGFyZTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBzdHJ1Y3R1cmVDaGVjayA9IG1faml0
LmJyYW5jaFB0cldpdGhQYXRjaChKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpB
ZGRyZXNzKGJhc2VQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0
dXJlVG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0
PHZvaWQqPigtMSkpKTsKLSAgICBtX2ppdC5lbmRVbmludGVycnVwdGVkU2VxdWVuY2UoKTsKLQot
ICAgIHdyaXRlQmFycmllcihiYXNlUGF5bG9hZEdQUiwgdmFsdWVUYWdHUFIsIHZhbHVlSW5kZXgs
IFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoR1BSKTsKLQotICAgIG1faml0
LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZVBheWxvYWRHUFIsIEpTT2JqZWN0Ojpv
ZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7Ci0gICAgSklUQ29tcGlsZXI6
OkRhdGFMYWJlbDMyIHRhZ1N0b3JlV2l0aFBhdGNoID0gbV9qaXQuc3RvcmUzMldpdGhBZGRyZXNz
T2Zmc2V0UGF0Y2godmFsdWVUYWdHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIs
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwot
ICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWwzMiBwYXlsb2FkU3RvcmVXaXRoUGF0Y2ggPSBtX2pp
dC5zdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCh2YWx1ZVBheWxvYWRHUFIsIEpJVENvbXBp
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKLQotICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUg
PSBtX2ppdC5qdW1wKCk7Ci0KLSAgICBzdHJ1Y3R1cmVDaGVjay5saW5rKCZtX2ppdCk7Ci0KLSAg
ICBpZiAoc2xvd1BhdGhUYXJnZXQuaXNTZXQoKSkKLSAgICAgICAgc2xvd1BhdGhUYXJnZXQubGlu
aygmbV9qaXQpOwotCi0gICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dDYXNlID0gbV9qaXQubGFi
ZWwoKTsKLQotICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwotICAg
IFZfREZHT3BlcmF0aW9uX0VKQ0kgb3B0aW1pemVkQ2FsbDsKLSAgICBpZiAobV9qaXQuc3RyaWN0
TW9kZUZvcihhdChtX2NvbXBpbGVJbmRleCkuY29kZU9yaWdpbikpIHsKLSAgICAgICAgaWYgKHB1
dEtpbmQgPT0gRGlyZWN0KQotICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb3B0
aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCi0gICAgICAgICAgICBvcHRpbWl6ZWRD
YWxsID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmlj
dE9wdGltaXplOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wdGltaXplZENhbGwsIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIs
IGJhc2VQYXlsb2FkR1BSLCBpZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpKTsKLSAgICBzaWxl
bnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwotCi0gICAgZG9uZS5saW5rKCZtX2pp
dCk7Ci0gICAgSklUQ29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1faml0LmxhYmVsKCk7Ci0K
LSAgICBtX2ppdC5hZGRQcm9wZXJ0eUFjY2VzcyhQcm9wZXJ0eUFjY2Vzc1JlY29yZChzdHJ1Y3R1
cmVUb0NvbXBhcmUsIGZ1bmN0aW9uQ2FsbCwgc3RydWN0dXJlQ2hlY2ssIEpJVENvbXBpbGVyOjpE
YXRhTGFiZWxDb21wYWN0KHRhZ1N0b3JlV2l0aFBhdGNoLmxhYmVsKCkpLCBKSVRDb21waWxlcjo6
RGF0YUxhYmVsQ29tcGFjdChwYXlsb2FkU3RvcmVXaXRoUGF0Y2gubGFiZWwoKSksIHNsb3dDYXNl
LCBkb25lTGFiZWwsIHNhZmVDYXN0PGludDhfdD4oYmFzZVBheWxvYWRHUFIpLCBzYWZlQ2FzdDxp
bnQ4X3Q+KHZhbHVlVGFnR1BSKSwgc2FmZUNhc3Q8aW50OF90Pih2YWx1ZVBheWxvYWRHUFIpLCBz
YWZlQ2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpKSk7Ci19Ci0KLXZvaWQgSklUQ29kZUdlbmVyYXRv
cjo6Y2FjaGVkR2V0TWV0aG9kKEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHJlc3VsdFRh
Z0dQUiwgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCkKLXsK
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBzbG93Q2FsbDsKLSAgICBKSVRDb21waWxlcjo6RGF0YUxh
YmVsUHRyIHN0cnVjdFRvQ29tcGFyZSwgcHJvdG9PYmosIHByb3RvU3RydWN0VG9Db21wYXJlLCBw
dXRGdW5jdGlvbjsKLSAgICAKLSAgICAvLyBtX2ppdC5lbWl0TG9hZFBheWxvYWQoYmFzZUluZGV4
LCBzY3JhdGNoR1BSKTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCB3cm9uZ1N0cnVjdHVyZSA9IG1f
aml0LmJyYW5jaFB0cldpdGhQYXRjaChKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVy
OjpBZGRyZXNzKGJhc2VQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3Ry
dWN0VG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0
PHZvaWQqPigtMSkpKTsKLSAgICBwcm90b09iaiA9IG1faml0Lm1vdmVXaXRoUGF0Y2goSklUQ29t
cGlsZXI6OlRydXN0ZWRJbW1QdHIoMCksIHJlc3VsdFBheWxvYWRHUFIpOwotICAgIEpJVENvbXBp
bGVyOjpKdW1wIHdyb25nUHJvdG9TdHJ1Y3R1cmUgPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2go
SklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRQYXlsb2Fk
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcHJvdG9TdHJ1Y3RUb0NvbXBhcmUsIEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSkpOwot
ICAgIAotICAgIHB1dEZ1bmN0aW9uID0gbV9qaXQubW92ZVdpdGhQYXRjaChKSVRDb21waWxlcjo6
VHJ1c3RlZEltbVB0cigwKSwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlc3VsdFRhZ0dQUik7Ci0gICAgCi0gICAgSklU
Q29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAgICAKLSAgICB3cm9uZ1N0cnVj
dHVyZS5saW5rKCZtX2ppdCk7Ci0gICAgd3JvbmdQcm90b1N0cnVjdHVyZS5saW5rKCZtX2ppdCk7
Ci0gICAgCi0gICAgc2xvd0NhbGwgPSBjYWNoZWRHZXRCeUlkKGJhc2VQYXlsb2FkR1BSLCByZXN1
bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIHNjcmF0Y2hHUFIsIGlkZW50aWZpZXJOdW1iZXIs
IHNsb3dQYXRoVGFyZ2V0LCBHZXRNZXRob2QpOwotICAgIAotICAgIGRvbmUubGluaygmbV9qaXQp
OwotICAgIAotICAgIG1faml0LmFkZE1ldGhvZEdldChzbG93Q2FsbCwgc3RydWN0VG9Db21wYXJl
LCBwcm90b09iaiwgcHJvdG9TdHJ1Y3RUb0NvbXBhcmUsIHB1dEZ1bmN0aW9uKTsKLX0KLQotdm9p
ZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGwo
Tm9kZUluZGV4IG9wZXJhbmQsIGJvb2wgaW52ZXJ0KQotewotICAgIEpTVmFsdWVPcGVyYW5kIGFy
Zyh0aGlzLCBvcGVyYW5kKTsKLSAgICBHUFJSZWcgYXJnVGFnR1BSID0gYXJnLnRhZ0dQUigpOwot
ICAgIEdQUlJlZyBhcmdQYXlsb2FkR1BSID0gYXJnLnBheWxvYWRHUFIoKTsKLQotICAgIEdQUlRl
bXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIGFyZywgZmFsc2UpOwotICAgIEdQUlJlZyByZXN1
bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKLQotICAgIEpJVENvbXBpbGVyOjpK
dW1wIG5vdENlbGw7Ci0gICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kKSkKLSAgICAgICAgbm90
Q2VsbCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnVGFnR1BS
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwotICAgIAotICAgIG1faml0LmxvYWRQ
dHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYXJnUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIHJlc3VsdFBheWxvYWRHUFIpOwotICAgIG1faml0LnRlc3Q4KGludmVydCA/IEpJ
VENvbXBpbGVyOjpaZXJvIDogSklUQ29tcGlsZXI6Ok5vblplcm8sIEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHJlc3VsdFBheWxvYWRHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSwgcmVzdWx0
UGF5bG9hZEdQUik7Ci0gICAgCi0gICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kKSkgewotICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwotICAgICAgICAKLSAg
ICAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIC8vIG51bGwgb3IgdW5kZWZpbmVk
PwotICAgICAgICBDT01QSUxFX0FTU0VSVCgoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnIHwgMSkgPT0g
SlNWYWx1ZTo6TnVsbFRhZywgVW5kZWZpbmVkVGFnX09SXzFfRVFVQUxTX051bGxUYWcpOwotICAg
ICAgICBtX2ppdC5tb3ZlKGFyZ1RhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgICAgIG1f
aml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAgbV9q
aXQuY29tcGFyZTMyKGludmVydCA/IEpJVENvbXBpbGVyOjpOb3RFcXVhbCA6IEpJVENvbXBpbGVy
OjpFcXVhbCwgcmVzdWx0UGF5bG9hZEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcp
LCByZXN1bHRQYXlsb2FkR1BSKTsKLQotICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICB9
Ci0gICAgCi0gICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRl
eCk7Ci19Ci0KLXZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaE51bGwoTm9kZUluZGV4IG9wZXJhbmQsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIGJv
b2wgaW52ZXJ0KQotewotICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgp
OwotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2VuQmxvY2tJbmRleCgpOwot
ICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRha2VuQmxvY2tJbmRleCgp
OwotICAgIAotICAgIGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEpKSB7Ci0gICAgICAgIGludmVy
dCA9ICFpbnZlcnQ7Ci0gICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47Ci0gICAgICAgIHRh
a2VuID0gbm90VGFrZW47Ci0gICAgICAgIG5vdFRha2VuID0gdG1wOwotICAgIH0KLQotICAgIEpT
VmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBvcGVyYW5kKTsKLSAgICBHUFJSZWcgYXJnVGFnR1BSID0g
YXJnLnRhZ0dQUigpOwotICAgIEdQUlJlZyBhcmdQYXlsb2FkR1BSID0gYXJnLnBheWxvYWRHUFIo
KTsKLSAgICAKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGFyZyk7Ci0gICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAKLSAgICBKSVRDb21waWxlcjo6SnVtcCBu
b3RDZWxsOwotICAgIAotICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZCkpCi0gICAgICAgIG5v
dENlbGwgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGFyZ1RhZ0dQ
UiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKLSAgICAKLSAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGFyZ1BheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCByZXN1bHRHUFIpOwotICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0OChp
bnZlcnQgPyBKSVRDb21waWxlcjo6WmVybyA6IEpJVENvbXBpbGVyOjpOb25aZXJvLCBKSVRDb21w
aWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRh
a2VuKTsKLSAgICAKLSAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQpKSB7Ci0gICAgICAgIGFk
ZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKLSAgICAgICAgCi0gICAgICAgIG5vdENl
bGwubGluaygmbV9qaXQpOwotICAgICAgICAvLyBudWxsIG9yIHVuZGVmaW5lZD8KLSAgICAgICAg
Q09NUElMRV9BU1NFUlQoKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyB8IDEpID09IEpTVmFsdWU6Ok51
bGxUYWcsIFVuZGVmaW5lZFRhZ19PUl8xX0VRVUFMU19OdWxsVGFnKTsKLSAgICAgICAgbV9qaXQu
bW92ZShhcmdUYWdHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZElt
bTMyKDEpLCByZXN1bHRHUFIpOwotICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoMzIoaW52
ZXJ0ID8gSklUQ29tcGlsZXI6Ok5vdEVxdWFsIDogSklUQ29tcGlsZXI6OkVxdWFsLCByZXN1bHRH
UFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykpLCB0YWtlbik7
Ci0gICAgfQotICAgIAotICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQotICAgICAg
ICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7Ci19Ci0KLWJvb2wgSklUQ29kZUdl
bmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChOb2RlJiBub2RlLCBOb2RlSW5kZXgg
b3BlcmFuZCwgYm9vbCBpbnZlcnQpCi17Ci0gICAgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCA9
IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7Ci0gICAgaWYgKGJyYW5jaE5vZGVJbmRleCAhPSBOb05v
ZGUpIHsKLSAgICAgICAgQVNTRVJUKG5vZGUuYWRqdXN0ZWRSZWZDb3VudCgpID09IDEpOwotICAg
ICAgICAKLSAgICAgICAgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwob3BlcmFuZCwg
YnJhbmNoTm9kZUluZGV4LCBpbnZlcnQpOwotICAgIAotICAgICAgICB1c2Uobm9kZS5jaGlsZDEo
KSk7Ci0gICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAgbV9jb21waWxlSW5kZXgg
PSBicmFuY2hOb2RlSW5kZXg7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgCi0gICAgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsKG9wZXJhbmQs
IGludmVydCk7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEpJVENvZGVHZW5l
cmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2goTm9kZSYgbm9kZSwgTm9kZUluZGV4
IGJyYW5jaE5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQotewotICAgIE5vZGUmIGJyYW5j
aE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFu
Y2hOb2RlLnRha2VuQmxvY2tJbmRleCgpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFu
Y2hOb2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwotCi0gICAgSklUQ29tcGlsZXI6OlJlc3VsdENv
bmRpdGlvbiBjYWxsUmVzdWx0Q29uZGl0aW9uID0gSklUQ29tcGlsZXI6Ok5vblplcm87Ci0KLSAg
ICAvLyBUaGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRvIHRoZSB0YWtlbiBibG9j
ay4KLSAgICAvLyBJZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2ggdGFrZW4gd2l0aCBub3RUYWtlbiAm
IGludmVydCB0aGUgYnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBjYW4gZmFsbCB0aHJvdWdoLgotICAg
IGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEpKSB7Ci0gICAgICAgIGNvbmQgPSBKSVRDb21waWxl
cjo6aW52ZXJ0KGNvbmQpOwotICAgICAgICBjYWxsUmVzdWx0Q29uZGl0aW9uID0gSklUQ29tcGls
ZXI6Olplcm87Ci0gICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47Ci0gICAgICAgIHRha2Vu
ID0gbm90VGFrZW47Ci0gICAgICAgIG5vdFRha2VuID0gdG1wOwotICAgIH0KLQotICAgIEpTVmFs
dWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQg
YXJnMih0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICBHUFJSZWcgYXJnMVRhZ0dQUiA9IGFyZzEu
dGFnR1BSKCk7Ci0gICAgR1BSUmVnIGFyZzFQYXlsb2FkR1BSID0gYXJnMS5wYXlsb2FkR1BSKCk7
Ci0gICAgR1BSUmVnIGFyZzJUYWdHUFIgPSBhcmcyLnRhZ0dQUigpOwotICAgIEdQUlJlZyBhcmcy
UGF5bG9hZEdQUiA9IGFyZzIucGF5bG9hZEdQUigpOwotICAgIAotICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBzbG93UGF0aDsKLSAgICAKLSAgICBpZiAoaXNLbm93bk5vdEludGVnZXIobm9kZS5j
aGlsZDEoKSkgfHwgaXNLbm93bk5vdEludGVnZXIobm9kZS5jaGlsZDIoKSkpIHsKLSAgICAgICAg
R1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKLQotICAgICAgICBhcmcxLnVzZSgpOwotICAgICAgICBhcmcyLnVzZSgpOwotCi0g
ICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24oaGVscGVyRnVu
Y3Rpb24sIHJlc3VsdEdQUiwgYXJnMVRhZ0dQUiwgYXJnMVBheWxvYWRHUFIsIGFyZzJUYWdHUFIs
IGFyZzJQYXlsb2FkR1BSKTsKLQotICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDMy
KGNhbGxSZXN1bHRDb25kaXRpb24sIHJlc3VsdEdQUiksIHRha2VuKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOwotICAgIAotICAgICAgICBhcmcxLnVzZSgpOwotICAgICAgICBh
cmcyLnVzZSgpOwotCi0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKSkp
Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBhcmcxVGFnR1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkludDMyVGFnKSkpOwotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQy
KCkpKQotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgYXJnMlRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpJbnQzMlRhZykpKTsKLSAgICAKLSAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5j
aDMyKGNvbmQsIGFyZzFQYXlsb2FkR1BSLCBhcmcyUGF5bG9hZEdQUiksIHRha2VuKTsKLSAgICAK
LSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSB8fCAhaXNLbm93bklu
dGVnZXIobm9kZS5jaGlsZDIoKSkpIHsKLSAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1w
KCksIG5vdFRha2VuKTsKLSAgICAKLSAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsK
LSAgICAKLSAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0g
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uKGhlbHBlckZ1bmN0aW9uLCByZXN1bHRHUFIsIGFyZzFU
YWdHUFIsIGFyZzFQYXlsb2FkR1BSLCBhcmcyVGFnR1BSLCBhcmcyUGF5bG9hZEdQUik7Ci0gICAg
ICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAg
ICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3QzMihjYWxsUmVzdWx0Q29uZGl0aW9u
LCByZXN1bHRHUFIpLCB0YWtlbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobm90VGFr
ZW4gIT0gKG1fYmxvY2sgKyAxKSkKLSAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90
VGFrZW4pOwotfQotCi12b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlTm9uUGVl
cGhvbGVDb21wYXJlKE5vZGUmIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKLXsKLSAgICBKU1Zh
bHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIEpTVmFsdWVPcGVyYW5k
IGFyZzIodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgR1BSUmVnIGFyZzFUYWdHUFIgPSBhcmcx
LnRhZ0dQUigpOwotICAgIEdQUlJlZyBhcmcxUGF5bG9hZEdQUiA9IGFyZzEucGF5bG9hZEdQUigp
OwotICAgIEdQUlJlZyBhcmcyVGFnR1BSID0gYXJnMi50YWdHUFIoKTsKLSAgICBHUFJSZWcgYXJn
MlBheWxvYWRHUFIgPSBhcmcyLnBheWxvYWRHUFIoKTsKLSAgICAKLSAgICBKSVRDb21waWxlcjo6
SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgCi0gICAgaWYgKGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUu
Y2hpbGQxKCkpIHx8IGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7Ci0gICAgICAg
IEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BS
ID0gcmVzdWx0LmdwcigpOwotICAgIAotICAgICAgICBhcmcxLnVzZSgpOwotICAgICAgICBhcmcy
LnVzZSgpOwotCi0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRp
b24oaGVscGVyRnVuY3Rpb24sIHJlc3VsdFBheWxvYWRHUFIsIGFyZzFUYWdHUFIsIGFyZzFQYXls
b2FkR1BSLCBhcmcyVGFnR1BSLCBhcmcyUGF5bG9hZEdQUik7Ci0gICAgICAgIAotICAgICAgICBi
b29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHRQYXlsb2FkKHRoaXMsIGFyZzEsIGZhbHNlKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdFBh
eWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOwotCi0gICAgICAgIGFyZzEudXNlKCk7Ci0g
ICAgICAgIGFyZzIudXNlKCk7Ci0gICAgCi0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9k
ZS5jaGlsZDEoKSkpCi0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBhcmcxVGFnR1BSLCBKSVRDb21waWxlcjo6VHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOwotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2Vy
KG5vZGUuY2hpbGQyKCkpKQotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnMlRhZ0dQUiwgSklUQ29tcGlsZXI6OlRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKLQotICAgICAgICBtX2ppdC5jb21wYXJl
MzIoY29uZCwgYXJnMVBheWxvYWRHUFIsIGFyZzJQYXlsb2FkR1BSLCByZXN1bHRQYXlsb2FkR1BS
KTsKLSAgICAKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSB8fCAh
aXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKSkpIHsKLSAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIGhhdmVSZXN1bHQgPSBtX2ppdC5qdW1wKCk7Ci0gICAgCi0gICAgICAgICAgICBzbG93
UGF0aC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIAotICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxS
ZWdpc3RlcnMocmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKGhl
bHBlckZ1bmN0aW9uLCByZXN1bHRQYXlsb2FkR1BSLCBhcmcxVGFnR1BSLCBhcmcxUGF5bG9hZEdQ
UiwgYXJnMlRhZ0dQUiwgYXJnMlBheWxvYWRHUFIpOwotICAgICAgICAgICAgc2lsZW50RmlsbEFs
bFJlZ2lzdGVycyhyZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAgCi0gICAgICAgICAgICBtX2pp
dC5hbmRQdHIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAgCi0g
ICAgICAgICAgICBoYXZlUmVzdWx0LmxpbmsoJm1faml0KTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCwg
VXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLSAgICB9Ci19Ci0KLXZvaWQgSklUQ29kZUdl
bmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKE5vZGUmIG5vZGUsIE5vZGVJ
bmRleCBicmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52ZXJ0KQotewotICAgIE5vZGUmIGJyYW5jaE5v
ZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hO
b2RlLnRha2VuQmxvY2tJbmRleCgpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hO
b2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwotCi0gICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlv
biB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCi0gICAgLy8gSWYgdGFrZW4gaXMgbmV4
dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRp
b24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KLSAgICBpZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAx
KSkgewotICAgICAgICBpbnZlcnQgPSAhaW52ZXJ0OwotICAgICAgICBCbG9ja0luZGV4IHRtcCA9
IHRha2VuOwotICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwotICAgICAgICBub3RUYWtlbiA9IHRt
cDsKLSAgICB9Ci0gICAgCi0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAg
IEdQUlJlZyBhcmcxVGFnR1BSID0gYXJnMS50YWdHUFIoKTsKLSAgICBHUFJSZWcgYXJnMVBheWxv
YWRHUFIgPSBhcmcxLnBheWxvYWRHUFIoKTsKLSAgICBHUFJSZWcgYXJnMlRhZ0dQUiA9IGFyZzIu
dGFnR1BSKCk7Ci0gICAgR1BSUmVnIGFyZzJQYXlsb2FkR1BSID0gYXJnMi5wYXlsb2FkR1BSKCk7
Ci0gICAgCi0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcywgYXJnMSwgZmFsc2Up
OwotICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKLSAg
ICAKLSAgICBhcmcxLnVzZSgpOwotICAgIGFyZzIudXNlKCk7Ci0gICAgCi0gICAgaWYgKGlzS25v
d25DZWxsKG5vZGUuY2hpbGQxKCkpICYmIGlzS25vd25DZWxsKG5vZGUuY2hpbGQyKCkpKSB7Ci0g
ICAgICAgIC8vIHNlZSBpZiB3ZSBnZXQgbHVja3k6IGlmIHRoZSBhcmd1bWVudHMgYXJlIGNlbGxz
IGFuZCB0aGV5IHJlZmVyZW5jZSB0aGUgc2FtZQotICAgICAgICAvLyBjZWxsLCB0aGVuIHRoZXkg
bXVzdCBiZSBzdHJpY3RseSBlcXVhbC4KLSAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0
cihKSVRDb21waWxlcjo6RXF1YWwsIGFyZzFQYXlsb2FkR1BSLCBhcmcyUGF5bG9hZEdQUiksIGlu
dmVydCA/IG5vdFRha2VuIDogdGFrZW4pOwotICAgICAgICAKLSAgICAgICAgc2lsZW50U3BpbGxB
bGxSZWdpc3RlcnMocmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbCwgcmVzdWx0UGF5bG9hZEdQUiwgYXJnMVRhZ0dQUiwg
YXJnMVBheWxvYWRHUFIsIGFyZzJUYWdHUFIsIGFyZzJQYXlsb2FkR1BSKTsKLSAgICAgICAgc2ls
ZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAgCi0gICAgICAg
IGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0MzIoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Ok5vblpl
cm8gOiBKSVRDb21waWxlcjo6WmVybywgcmVzdWx0UGF5bG9hZEdQUiksIHRha2VuKTsKLSAgICB9
IGVsc2UgewotICAgICAgICAvLyBGSVhNRTogQWRkIGZhc3QgcGF0aHMgZm9yIHR3b0NlbGxzLCBu
dW1iZXIgZXRjLgotCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFBheWxv
YWRHUFIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwg
cmVzdWx0UGF5bG9hZEdQUiwgYXJnMVRhZ0dQUiwgYXJnMVBheWxvYWRHUFIsIGFyZzJUYWdHUFIs
IGFyZzJQYXlsb2FkR1BSKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRQ
YXlsb2FkR1BSKTsKLSAgICAgICAgCi0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0
MzIoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Olplcm8gOiBKSVRDb21waWxlcjo6Tm9uWmVybywgcmVz
dWx0UGF5bG9hZEdQUiksIHRha2VuKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG5vdFRha2VuICE9
IChtX2Jsb2NrICsgMSkpCi0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2Vu
KTsKLX0KLQotdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xl
U3RyaWN0RXEoTm9kZSYgbm9kZSwgYm9vbCBpbnZlcnQpCi17Ci0gICAgSlNWYWx1ZU9wZXJhbmQg
YXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMs
IG5vZGUuY2hpbGQyKCkpOwotICAgIEdQUlJlZyBhcmcxVGFnR1BSID0gYXJnMS50YWdHUFIoKTsK
LSAgICBHUFJSZWcgYXJnMVBheWxvYWRHUFIgPSBhcmcxLnBheWxvYWRHUFIoKTsKLSAgICBHUFJS
ZWcgYXJnMlRhZ0dQUiA9IGFyZzIudGFnR1BSKCk7Ci0gICAgR1BSUmVnIGFyZzJQYXlsb2FkR1BS
ID0gYXJnMi5wYXlsb2FkR1BSKCk7Ci0gICAgCi0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxv
YWQodGhpcywgYXJnMSwgZmFsc2UpOwotICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVz
dWx0UGF5bG9hZC5ncHIoKTsKLSAgICAKLSAgICBhcmcxLnVzZSgpOwotICAgIGFyZzIudXNlKCk7
Ci0gICAgCi0gICAgaWYgKGlzS25vd25DZWxsKG5vZGUuY2hpbGQxKCkpICYmIGlzS25vd25DZWxs
KG5vZGUuY2hpbGQyKCkpKSB7Ci0gICAgICAgIC8vIHNlZSBpZiB3ZSBnZXQgbHVja3k6IGlmIHRo
ZSBhcmd1bWVudHMgYXJlIGNlbGxzIGFuZCB0aGV5IHJlZmVyZW5jZSB0aGUgc2FtZQotICAgICAg
ICAvLyBjZWxsLCB0aGVuIHRoZXkgbXVzdCBiZSBzdHJpY3RseSBlcXVhbC4KLSAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgbm90RXF1YWxDYXNlID0gbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVy
OjpOb3RFcXVhbCwgYXJnMVBheWxvYWRHUFIsIGFyZzJQYXlsb2FkR1BSKTsKLSAgICAgICAgCi0g
ICAgICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMighaW52ZXJ0KSwgcmVz
dWx0UGF5bG9hZEdQUik7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5q
dW1wKCk7Ci0KLSAgICAgICAgbm90RXF1YWxDYXNlLmxpbmsoJm1faml0KTsKLSAgICAgICAgCi0g
ICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcUNlbGwsIHJlc3VsdFBheWxv
YWRHUFIsIGFyZzFUYWdHUFIsIGFyZzFQYXlsb2FkR1BSLCBhcmcyVGFnR1BSLCBhcmcyUGF5bG9h
ZEdQUik7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0UGF5bG9hZEdQUik7
Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5hbmRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0z
MigxKSwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgICAgIAotICAgICAgICBkb25lLmxpbmsoJm1f
aml0KTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBGSVhNRTogQWRkIGZhc3QgcGF0aHMuCi0K
LSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0UGF5bG9hZEdQUik7Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZXN1bHRQYXlsb2Fk
R1BSLCBhcmcxVGFnR1BSLCBhcmcxUGF5bG9hZEdQUiwgYXJnMlRhZ0dQUiwgYXJnMlBheWxvYWRH
UFIpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFBheWxvYWRHUFIpOwot
ICAgICAgICAKLSAgICAgICAgbV9qaXQuYW5kUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIo
MSksIHJlc3VsdFBheWxvYWRHUFIpOwotICAgIH0KLQotICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0
UGF5bG9hZEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
Ci19Ci0KLXZvaWQgSklUQ29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoTm9kZSYgbm9kZSkKLXsKLSAg
ICBQX0RGR09wZXJhdGlvbl9FIHNsb3dDYWxsRnVuY3Rpb247Ci0KLSAgICBpZiAobm9kZS5vcCA9
PSBDYWxsKSB7Ci0gICAgICAgIHNsb3dDYWxsRnVuY3Rpb24gPSBvcGVyYXRpb25MaW5rQ2FsbDsK
LSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQobm9kZS5vcCA9PSBDb25zdHJ1Y3QpOwotICAg
ICAgICBzbG93Q2FsbEZ1bmN0aW9uID0gb3BlcmF0aW9uTGlua0NvbnN0cnVjdDsKLSAgICB9Ci0K
LSAgICAvLyBGb3IgY29uc3RydWN0b3JzLCB0aGUgdGhpcyBhcmd1bWVudCBpcyBub3QgcGFzc2Vk
IGJ1dCB3ZSBoYXZlIHRvIG1ha2Ugc3BhY2UKLSAgICAvLyBmb3IgaXQuCi0gICAgaW50IGR1bW15
VGhpc0FyZ3VtZW50ID0gbm9kZS5vcCA9PSBDYWxsID8gMCA6IDE7Ci0KLSAgICBDYWxsTGlua0lu
Zm86OkNhbGxUeXBlIGNhbGxUeXBlID0gbm9kZS5vcCA9PSBDYWxsID8gQ2FsbExpbmtJbmZvOjpD
YWxsIDogQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3Q7Ci0KLSAgICBOb2RlSW5kZXggY2FsbGVlTm9k
ZUluZGV4ID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgp
XTsKLSAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywgY2FsbGVlTm9kZUluZGV4KTsKLSAg
ICBHUFJSZWcgY2FsbGVlVGFnR1BSID0gY2FsbGVlLnRhZ0dQUigpOwotICAgIEdQUlJlZyBjYWxs
ZWVQYXlsb2FkR1BSID0gY2FsbGVlLnBheWxvYWRHUFIoKTsKLSAgICB1c2UoY2FsbGVlTm9kZUlu
ZGV4KTsKLQotICAgIC8vIHRoZSBjYWxsIGluc3RydWN0aW9uJ3MgZmlyc3QgY2hpbGQgaXMgZWl0
aGVyIHRoZSBmdW5jdGlvbiAobm9ybWFsIGNhbGwpIG9yIHRoZQotICAgIC8vIHJlY2VpdmVyICht
ZXRob2QgY2FsbCkuIHN1YnNlcXVlbnQgY2hpbGRyZW4gYXJlIHRoZSBhcmd1bWVudHMuCi0gICAg
aW50IG51bUFyZ3MgPSBub2RlLm51bUNoaWxkcmVuKCkgLSAxOwotCi0gICAgLy8gRm9yIGNvbnN0
cnVjdG9ycywgdGhlIHRoaXMgYXJndW1lbnQgaXMgbm90IHBhc3NlZCBidXQgd2UgaGF2ZSB0byBt
YWtlIHNwYWNlCi0gICAgLy8gZm9yIGl0LgotICAgIGludCBudW1QYXNzZWRBcmdzID0gbnVtQXJn
cyArIGR1bW15VGhpc0FyZ3VtZW50OwotCi0gICAgLy8gYW1vdW50IG9mIHN0dWZmIChpbiB1bml0
cyBvZiBzaXplb2YoUmVnaXN0ZXIpKSB0aGF0IHdlIG5lZWQgdG8gcGxhY2UgYXQgdGhlCi0gICAg
Ly8gdG9wIG9mIHRoZSBKUyBzdGFjay4KLSAgICBpbnQgY2FsbERhdGFTaXplID0gMDsKLQotICAg
IC8vIGZpcnN0IHRoZXJlIGFyZSB0aGUgYXJndW1lbnRzCi0gICAgY2FsbERhdGFTaXplICs9IG51
bVBhc3NlZEFyZ3M7Ci0KLSAgICAvLyBhbmQgdGhlbiB0aGVyZSBpcyB0aGUgY2FsbCBmcmFtZSBo
ZWFkZXIKLSAgICBjYWxsRGF0YVNpemUgKz0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJT
aXplOwotCi0gICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG51
bVBhc3NlZEFyZ3MpLCBwYXlsb2FkT2ZDYWxsRGF0YShSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291
bnQpKTsKLSAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6SW50MzJUYWcpLCB0YWdPZkNhbGxEYXRhKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3Vu
dCkpOwotICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBwYXls
b2FkT2ZDYWxsRGF0YShSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lKSk7Ci0gICAgbV9qaXQuc3Rv
cmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdP
ZkNhbGxEYXRhKFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUpKTsKLQotICAgIGZvciAoaW50IGFy
Z0lkeCA9IDA7IGFyZ0lkeCA8IG51bUFyZ3M7IGFyZ0lkeCsrKSB7Ci0gICAgICAgIE5vZGVJbmRl
eCBhcmdOb2RlSW5kZXggPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJz
dENoaWxkKCkgKyAxICsgYXJnSWR4XTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMs
IGFyZ05vZGVJbmRleCk7Ci0gICAgICAgIEdQUlJlZyBhcmdUYWdHUFIgPSBhcmcudGFnR1BSKCk7
Ci0gICAgICAgIEdQUlJlZyBhcmdQYXlsb2FkR1BSID0gYXJnLnBheWxvYWRHUFIoKTsKLSAgICAg
ICAgdXNlKGFyZ05vZGVJbmRleCk7Ci0KLSAgICAgICAgbV9qaXQuc3RvcmUzMihhcmdUYWdHUFIs
IHRhZ09mQ2FsbERhdGEoLWNhbGxEYXRhU2l6ZSArIGFyZ0lkeCArIGR1bW15VGhpc0FyZ3VtZW50
KSk7Ci0gICAgICAgIG1faml0LnN0b3JlMzIoYXJnUGF5bG9hZEdQUiwgcGF5bG9hZE9mQ2FsbERh
dGEoLWNhbGxEYXRhU2l6ZSArIGFyZ0lkeCArIGR1bW15VGhpc0FyZ3VtZW50KSk7Ci0gICAgfQot
Ci0gICAgbV9qaXQuc3RvcmUzMihjYWxsZWVUYWdHUFIsIHRhZ09mQ2FsbERhdGEoUmVnaXN0ZXJG
aWxlOjpDYWxsZWUpKTsKLSAgICBtX2ppdC5zdG9yZTMyKGNhbGxlZVBheWxvYWRHUFIsIHBheWxv
YWRPZkNhbGxEYXRhKFJlZ2lzdGVyRmlsZTo6Q2FsbGVlKSk7Ci0KLSAgICBmbHVzaFJlZ2lzdGVy
cygpOwotCi0gICAgR1BSUmVzdWx0IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0gICAgR1BSUmVzdWx0
MiByZXN1bHRUYWcodGhpcyk7Ci0gICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHRQ
YXlsb2FkLmdwcigpOwotICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7
Ci0KLSAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAgSklU
Q29tcGlsZXI6Okp1bXAgc2xvd1BhdGg7Ci0KLSAgICBzbG93UGF0aCA9IG1faml0LmJyYW5jaFB0
cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZVBheWxvYWRHUFIsIHRh
cmdldFRvQ2hlY2spOwotICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
Y2FsbGVlUGF5bG9hZEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGVDaGFp
bikpLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICBtX2ppdC5zdG9yZVB0cihyZXN1bHRQYXlsb2Fk
R1BSLCBwYXlsb2FkT2ZDYWxsRGF0YShSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pKTsKLSAgICBt
X2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZyksIHRhZ09mQ2FsbERhdGEoUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKSk7Ci0KLSAgICBtX2pp
dC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICog
c2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLQotICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKLSAgICBtX2ppdC5u
b3RpZnlDYWxsKGZhc3RDYWxsLCBhdChtX2NvbXBpbGVJbmRleCkuY29kZU9yaWdpbik7Ci0KLSAg
ICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwotCi0gICAgc2xvd1BhdGgu
bGluaygmbV9qaXQpOwotCi0gICAgbV9qaXQuYWRkUHRyKEltbTMyKG1faml0LmNvZGVCbG9jaygp
LT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBtX2ppdC5wb2tlKEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBt
X2ppdC5hZGRGYXN0RXhjZXB0aW9uQ2hlY2sobV9qaXQuYXBwZW5kQ2FsbChzbG93Q2FsbEZ1bmN0
aW9uKSwgYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pOwotICAgIG1faml0LmFkZFB0cihJ
bW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIG1faml0Lm5vdGlmeUNh
bGwobV9qaXQuY2FsbChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIGF0KG1fY29tcGlsZUluZGV4
KS5jb2RlT3JpZ2luKTsKLQotICAgIGRvbmUubGluaygmbV9qaXQpOwotCi0gICAgc2V0dXBSZXN1
bHRzKHJlc3VsdFBheWxvYWRHUFIsIHJlc3VsdFRhZ0dQUik7Ci0KLSAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3Jt
YXRKUywgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLQotICAgIG1faml0LmFkZEpTQ2Fs
bChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGNhbGxUeXBlLCBhdChtX2NvbXBp
bGVJbmRleCkuY29kZU9yaWdpbik7Ci19Ci0KLSNlbmRpZgotCi19IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCi0KLSNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b2RlR2VuZXJhdG9yNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29kZUdlbmVyYXRvcjY0LmNwcAkocmV2aXNpb24gMTAwMjM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDEzMTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiREZHSklUQ29kZUdl
bmVyYXRvci5oIgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJERkdKSVRDb21w
aWxlcklubGluZU1ldGhvZHMuaCIKLSNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgotI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewot
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLQotR1BSUmVnIEpJVENvZGVHZW5lcmF0b3I6OmZpbGxJbnRl
Z2VyKE5vZGVJbmRleCBub2RlSW5kZXgsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCkKLXsKLSAg
ICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICBHZW5lcmF0aW9uSW5mbyYg
aW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKLQotICAgIGlmIChpbmZv
LnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpIHsKLSAgICAgICAgR1BSUmVnIGdw
ciA9IGFsbG9jYXRlKCk7Ci0KLSAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewotICAg
ICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNv
bnN0YW50KTsKLSAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSkgewot
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJ
bnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCBncHIpOwotICAgICAgICAgICAgICAgIGluZm8uZmls
bEludGVnZXIoZ3ByKTsKLSAgICAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0
SW50ZWdlcjsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ3ByOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkgewotICAgICAgICAgICAg
ICAgIEpTVmFsdWUganNWYWx1ZSA9IGpzTnVtYmVyKHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2Rl
SW5kZXgpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1Q
dHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAg
ICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgp
OwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1Zh
bHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SW50ZWdlcikgewotICAgICAg
ICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxs
ZWQpOwotICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZp
cnR1YWxSZWdpc3RlciksIGdwcik7Ci0gICAgICAgICAgICAvLyBUYWcgaXQsIHNpbmNlIGZpbGxJ
bnRlZ2VyKCkgaXMgdXNlZCB3aGVuIHdlIHdhbnQgYSBib3hlZCBpbnRlZ2VyLgotICAgICAgICAg
ICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBE
YXRhRm9ybWF0SlMgfHwgaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRKU0ludGVnZXIp
OwotICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxP
cmRlclNwaWxsZWQpOwotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRk
cmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
U2luY2Ugd2Ugc3RhdGljYWxseSBrbm93IHRoYXQgd2UncmUgZmlsbGluZyBhbiBpbnRlZ2VyLCBh
bmQgdmFsdWVzCi0gICAgICAgIC8vIGluIHRoZSBSZWdpc3RlckZpbGUgYXJlIGJveGVkLCB0aGlz
IG11c3QgYmUgRGF0YUZvcm1hdEpTSW50ZWdlci4KLSAgICAgICAgLy8gV2Ugd2lsbCBjaGVjayB0
aGlzIHdpdGggYSBqaXRBc3NlcnQgYmVsb3cuCi0gICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3By
LCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKLSAgICAgICAgdW5sb2NrKGdwcik7Ci0gICAgfQotCi0g
ICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKLSAgICBjYXNlIERhdGFGb3JtYXRO
b25lOgotICAgICAgICAvLyBTaG91bGQgaGF2ZSBmaWxsZWQsIGFib3ZlLgotICAgIGNhc2UgRGF0
YUZvcm1hdEpTRG91YmxlOgotICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToKLSAgICBjYXNlIERh
dGFGb3JtYXRKUzoKLSAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgotICAgIGNhc2UgRGF0YUZvcm1h
dEpTQ2VsbDoKLSAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgotICAgIGNhc2UgRGF0YUZvcm1h
dEpTQm9vbGVhbjoKLSAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdlOgotICAgICAgICAvLyBTaG91
bGQgb25seSBiZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gaWYgd2Uga25vdyB0aGlzIG9wZXJhbmQg
dG8gYmUgaW50ZWdlci4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICBjYXNl
IERhdGFGb3JtYXRKU0ludGVnZXI6IHsKLSAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7
Ci0gICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7Ci0gICAgICAgIG1faml0LmppdEFzc2VydElzSlNJ
bnQzMihncHIpOwotICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SlNJbnRlZ2VyOwot
ICAgICAgICByZXR1cm4gZ3ByOwotICAgIH0KLQotICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6
IHsKLSAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7Ci0gICAgICAgIG1fZ3Bycy5sb2Nr
KGdwcik7Ci0gICAgICAgIG1faml0LmppdEFzc2VydElzSW50MzIoZ3ByKTsKLSAgICAgICAgcmV0
dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7Ci0gICAgICAgIHJldHVybiBncHI7Ci0gICAg
fQotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBJbnZhbGlk
R1BSUmVnOwotfQotCi1GUFJSZWcgSklUQ29kZUdlbmVyYXRvcjo6ZmlsbERvdWJsZShOb2RlSW5k
ZXggbm9kZUluZGV4KQotewotICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOwot
ICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0
ZXJdOwotCi0gICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSkg
ewotICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBHUFJSZWcg
Z3ByID0gYWxsb2NhdGUoKTsKLSAgICAgICAgCi0gICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0
YW50KG5vZGVJbmRleCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIG5vdCBi
ZSByZWFjaGFibGU/Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4KSksIGdwcik7Ci0gICAgICAgICAg
ICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0
YW50KTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKGdwcik7Ci0gICAgICAgICAg
ICAgICAgdW5sb2NrKGdwcik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyQ29uc3Rh
bnQobm9kZUluZGV4KSkgewotICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0
ZSgpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihy
ZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldERvdWJsZVRvSW50cHRyKHZhbHVlT2ZO
dW1iZXJDb25zdGFudChub2RlSW5kZXgpKSkpLCBncHIpOwotICAgICAgICAgICAgICAgIG1faml0
Lm1vdmVQdHJUb0RvdWJsZShncHIsIGZwcik7Ci0gICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7
Ci0KLSAgICAgICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBT
cGlsbE9yZGVyRG91YmxlKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZnByOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIG5vdCBiZSByZWFjaGFibGU/Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICBK
U1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwotICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUo
anNWYWx1ZSkpLCBncHIpOwotICAgICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0
dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgaW5mby5m
aWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKUyk7Ci0gICAgICAgICAgICAgICAgdW5sb2NrKGdw
cik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBEYXRhRm9y
bWF0IHNwaWxsRm9ybWF0ID0gaW5mby5zcGlsbEZvcm1hdCgpOwotICAgICAgICAgICAgc3dpdGNo
IChzcGlsbEZvcm1hdCkgewotICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOiB7Ci0g
ICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7Ci0gICAgICAgICAgICAg
ICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpLCBmcHIpOwotICAgICAgICAgICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVn
aXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbERvdWJs
ZShmcHIpOwotICAgICAgICAgICAgICAgIHJldHVybiBmcHI7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIERhdGFGb3JtYXRJbnRlZ2VyOiB7Ci0gICAg
ICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxP
cmRlclNwaWxsZWQpOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6
YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwotICAgICAgICAgICAgICAgIGluZm8u
ZmlsbEludGVnZXIoZ3ByKTsKLSAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKLSAgICAgICAgCi0gICAgICAg
ICAgICAgICAgQVNTRVJUKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKLSAgICAgICAgICAg
ICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxl
ZCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zv
cih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFs
dWUoZ3ByLCBzcGlsbEZvcm1hdCk7Ci0gICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewotICAgIGNhc2UgRGF0YUZvcm1hdE5v
bmU6Ci0gICAgICAgIC8vIFNob3VsZCBoYXZlIGZpbGxlZCwgYWJvdmUuCi0gICAgY2FzZSBEYXRh
Rm9ybWF0Q2VsbDoKLSAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6Ci0gICAgY2FzZSBEYXRhRm9y
bWF0Qm9vbGVhbjoKLSAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46Ci0gICAgY2FzZSBEYXRh
Rm9ybWF0U3RvcmFnZToKLSAgICAgICAgLy8gU2hvdWxkIG9ubHkgYmUgY2FsbGluZyB0aGlzIGZ1
bmN0aW9uIGlmIHdlIGtub3cgdGhpcyBvcGVyYW5kIHRvIGJlIG51bWVyaWMuCi0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgY2FzZSBEYXRhRm9ybWF0SlM6IHsKLSAgICAgICAg
R1BSUmVnIGpzVmFsdWVHcHIgPSBpbmZvLmdwcigpOwotICAgICAgICBtX2dwcnMubG9jayhqc1Zh
bHVlR3ByKTsKLSAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7Ci0gICAgICAgIEdQ
UlJlZyB0ZW1wR3ByID0gYWxsb2NhdGUoKTsgLy8gRklYTUU6IGNhbiB3ZSBza2lwIHRoaXMgYWxs
b2NhdGlvbiBvbiB0aGUgbGFzdCB1c2Ugb2YgdGhlIHZpcnR1YWwgcmVnaXN0ZXI/Ci0KLSAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3Rlcik7Ci0KLSAgICAgICAgbV9qaXQuaml0QXNzZXJ0SXNKU0RvdWJsZShqc1ZhbHVlR3By
KTsKLQotICAgICAgICAvLyBGaXJzdCwgaWYgd2UgZ2V0IGhlcmUgd2UgaGF2ZSBhIGRvdWJsZSBl
bmNvZGVkIGFzIGEgSlNWYWx1ZQotICAgICAgICBtX2ppdC5tb3ZlKGpzVmFsdWVHcHIsIHRlbXBH
cHIpOwotICAgICAgICB1bmJveERvdWJsZSh0ZW1wR3ByLCBmcHIpOwotICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBoYXNVbmJveGVkRG91YmxlID0gbV9qaXQuanVtcCgpOwotCi0gICAgICAgIC8v
IEZpbmFsbHksIGhhbmRsZSBpbnRlZ2Vycy4KLSAgICAgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0
KTsKLSAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUoanNWYWx1ZUdwciwgZnByKTsK
LSAgICAgICAgaGFzVW5ib3hlZERvdWJsZS5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgbV9ncHJz
LnJlbGVhc2UoanNWYWx1ZUdwcik7Ci0gICAgICAgIG1fZ3Bycy51bmxvY2soanNWYWx1ZUdwcik7
Ci0gICAgICAgIG1fZ3Bycy51bmxvY2sodGVtcEdwcik7Ci0gICAgICAgIG1fZnBycy5yZXRhaW4o
ZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwotICAgICAgICBpbmZvLmZp
bGxEb3VibGUoZnByKTsKLSAgICAgICAgaW5mby5raWxsU3BpbGxlZCgpOwotICAgICAgICByZXR1
cm4gZnByOwotICAgIH0KLQotICAgIGNhc2UgRGF0YUZvcm1hdEpTSW50ZWdlcjoKLSAgICBjYXNl
IERhdGFGb3JtYXRJbnRlZ2VyOiB7Ci0gICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgp
OwotICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKLSAgICAgICAgbV9ncHJzLmxvY2so
Z3ByKTsKLSAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUoZ3ByLCBmcHIpOwotICAg
ICAgICBtX2dwcnMudW5sb2NrKGdwcik7Ci0gICAgICAgIHJldHVybiBmcHI7Ci0gICAgfQotCi0g
ICAgLy8gVW5ib3ggdGhlIGRvdWJsZQotICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOiB7Ci0g
ICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwotICAgICAgICBGUFJSZWcgZnByID0gZnBy
QWxsb2NhdGUoKTsKLSAgICAgICAgaWYgKG1fZ3Bycy5pc0xvY2tlZChncHIpKSB7Ci0gICAgICAg
ICAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3QgdHJhbXBsZSBncHIgaWYgaXQgaXMgaW4gdXNlLgot
ICAgICAgICAgICAgR1BSUmVnIHRlbXAgPSBhbGxvY2F0ZSgpOwotICAgICAgICAgICAgbV9qaXQu
bW92ZShncHIsIHRlbXApOwotICAgICAgICAgICAgdW5ib3hEb3VibGUodGVtcCwgZnByKTsKLSAg
ICAgICAgICAgIHVubG9jayh0ZW1wKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB1bmJv
eERvdWJsZShncHIsIGZwcik7Ci0KLSAgICAgICAgbV9ncHJzLnJlbGVhc2UoZ3ByKTsKLSAgICAg
ICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7
Ci0KLSAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7Ci0gICAgICAgIHJldHVybiBmcHI7Ci0g
ICAgfQotCi0gICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOiB7Ci0gICAgICAgIEZQUlJlZyBmcHIg
PSBpbmZvLmZwcigpOwotICAgICAgICBtX2ZwcnMubG9jayhmcHIpOwotICAgICAgICByZXR1cm4g
ZnByOwotICAgIH0KLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gSW52YWxpZEZQUlJlZzsKLX0KLQotR1BSUmVnIEpJVENvZGVHZW5lcmF0b3I6OmZpbGxKU1Zh
bHVlKE5vZGVJbmRleCBub2RlSW5kZXgpCi17Ci0gICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRl
eCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJl
Z2lzdGVyKCk7Ci0gICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3Zp
cnR1YWxSZWdpc3Rlcl07Ci0KLSAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewot
ICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKLSAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRl
KCk7Ci0KLSAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgaWYg
KGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKSB7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxs
SlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOwotICAgICAgICAgICAgICAgIEpTVmFs
dWUganNWYWx1ZSA9IGpzTnVtYmVyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpOwot
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVl
OjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChpc051bWJl
ckNvbnN0YW50KG5vZGVJbmRleCkpIHsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVl
KGdwciwgRGF0YUZvcm1hdEpTRG91YmxlKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFs
dWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5k
ZXgpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIo
SlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAg
ICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwot
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVl
OjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFs
dWUoZ3ByLCBEYXRhRm9ybWF0SlMpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtX2dw
cnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgRGF0YUZvcm1hdCBzcGlsbEZvcm1hdCA9IGluZm8u
c3BpbGxGb3JtYXQoKTsKLSAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVn
aXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKLSAgICAgICAgICAgIGlmIChzcGlsbEZvcm1hdCA9
PSBEYXRhRm9ybWF0SW50ZWdlcikgewotICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRD
b21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwotICAgICAgICAgICAg
ICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsKLSAg
ICAgICAgICAgICAgICBzcGlsbEZvcm1hdCA9IERhdGFGb3JtYXRKU0ludGVnZXI7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKLSAgICAgICAgICAgICAgICBpZiAo
c3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSkgewotICAgICAgICAgICAgICAgICAgICAv
LyBOZWVkIHRvIGJveCB0aGUgZG91YmxlLCBzaW5jZSB3ZSB3YW50IGEgSlNWYWx1ZS4KLSAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuc3ViUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciwgZ3ByKTsKLSAgICAgICAgICAgICAgICAgICAgc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0SlNE
b3VibGU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIEFTU0VS
VChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgc3BpbGxGb3JtYXQpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBncHI7Ci0gICAgfQotCi0gICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjogewotICAg
ICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKLSAgICAgICAgLy8gSWYgdGhlIHJlZ2lzdGVy
IGhhcyBhbHJlYWR5IGJlZW4gbG9ja2VkIHdlIG5lZWQgdG8gdGFrZSBhIGNvcHkuCi0gICAgICAg
IC8vIElmIG5vdCwgd2UnbGwgemVybyBleHRlbmQgaW4gcGxhY2UsIHNvIG1hcmsgb24gdGhlIGlu
Zm8gdGhhdCB0aGlzIGlzIG5vdyB0eXBlIERhdGFGb3JtYXRJbnRlZ2VyLCBub3QgRGF0YUZvcm1h
dEpTSW50ZWdlci4KLSAgICAgICAgaWYgKG1fZ3Bycy5pc0xvY2tlZChncHIpKSB7Ci0gICAgICAg
ICAgICBHUFJSZWcgcmVzdWx0ID0gYWxsb2NhdGUoKTsKLSAgICAgICAgICAgIG1faml0Lm9yUHRy
KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByLCByZXN1bHQpOwotICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgICBtX2dwcnMubG9jayhncHIpOwot
ICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7
Ci0gICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKLSAg
ICAgICAgcmV0dXJuIGdwcjsKLSAgICB9Ci0KLSAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6IHsK
LSAgICAgICAgRlBSUmVnIGZwciA9IGluZm8uZnByKCk7Ci0gICAgICAgIEdQUlJlZyBncHIgPSBi
b3hEb3VibGUoZnByKTsKLQotICAgICAgICAvLyBVcGRhdGUgYWxsIGluZm8KLSAgICAgICAgaW5m
by5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0RvdWJsZSk7Ci0gICAgICAgIG1fZnBycy5y
ZWxlYXNlKGZwcik7Ci0gICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIs
IFNwaWxsT3JkZXJKUyk7Ci0KLSAgICAgICAgcmV0dXJuIGdwcjsKLSAgICB9Ci0KLSAgICBjYXNl
IERhdGFGb3JtYXRDZWxsOgotICAgICAgICAvLyBObyByZXRhZyByZXF1aXJlZCBvbiBKU1ZBTFVF
NjQhCi0gICAgY2FzZSBEYXRhRm9ybWF0SlM6Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlNJbnRlZ2Vy
OgotICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOgotICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2Vs
bDoKLSAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46IHsKLSAgICAgICAgR1BSUmVnIGdwciA9
IGluZm8uZ3ByKCk7Ci0gICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7Ci0gICAgICAgIHJldHVybiBn
cHI7Ci0gICAgfQotICAgICAgICAKLSAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgotICAgIGNh
c2UgRGF0YUZvcm1hdFN0b3JhZ2U6Ci0gICAgICAgIC8vIHRoaXMgdHlwZSBjdXJyZW50bHkgbmV2
ZXIgb2NjdXJzCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOwotfQotCi12b2lk
IEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlVmFsdWVUb051bWJlcihOb2RlJiBub2Rl
KQotewotICAgIGlmIChpc0tub3duTnVtZXJpYyhub2RlLmNoaWxkMSgpKSkgewotICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgb3AxKTsKLSAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJl
c3VsdC5ncHIoKSk7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBp
bGVJbmRleCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBKU1ZhbHVlT3BlcmFuZCBv
cDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
LSAgICAKLSAgICBBU1NFUlQoIWlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSk7Ci0gICAg
QVNTRVJUKCFpc051bWJlckNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKTsKLSAgICAKLSAgICBHUFJS
ZWcganNWYWx1ZUdwciA9IG9wMS5ncHIoKTsKLSAgICBHUFJSZWcgZ3ByID0gcmVzdWx0Lmdwcigp
OwotICAgIG9wMS51c2UoKTsKLQotICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIG5v
bk51bWVyaWMgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBqc1Zh
bHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotCi0gICAgLy8gRmlyc3Qs
IGlmIHdlIGdldCBoZXJlIHdlIGhhdmUgYSBkb3VibGUgZW5jb2RlZCBhcyBhIEpTVmFsdWUKLSAg
ICBtX2ppdC5tb3ZlKGpzVmFsdWVHcHIsIGdwcik7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgaGFz
VW5ib3hlZERvdWJsZSA9IG1faml0Lmp1bXAoKTsKLQotICAgIC8vIE5leHQgaGFuZGxlIGNlbGxz
ICgmIG90aGVyIEpTIGltbWVkaWF0ZXMpCi0gICAgbm9uTnVtZXJpYy5saW5rKCZtX2ppdCk7Ci0g
ICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoZ3ByKTsKLSAgICBjYWxsT3BlcmF0aW9uKGRmZ0Nv
bnZlcnRKU1ZhbHVlVG9OdW1iZXIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBqc1ZhbHVlR3By
KTsKLSAgICBib3hEb3VibGUoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIGdwcik7Ci0gICAgc2ls
ZW50RmlsbEFsbFJlZ2lzdGVycyhncHIpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhc0NhbGxl
ZFRvTnVtYmVyID0gbV9qaXQuanVtcCgpOwotICAgIAotICAgIC8vIEZpbmFsbHksIGhhbmRsZSBp
bnRlZ2Vycy4KLSAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwotICAgIG1faml0Lm9yUHRyKEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwganNWYWx1ZUdwciwgZ3ByKTsKLSAgICBoYXNV
bmJveGVkRG91YmxlLmxpbmsoJm1faml0KTsKLSAgICBoYXNDYWxsZWRUb051bWJlci5saW5rKCZt
X2ppdCk7Ci0gICAgCi0gICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUlu
ZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwotfQotCi12b2lkIEpJVENvZGVHZW5l
cmF0b3I6Om5vblNwZWN1bGF0aXZlVmFsdWVUb0ludDMyKE5vZGUmIG5vZGUpCi17Ci0gICAgQVNT
RVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpOwotICAgIAotICAgIGlmIChpc0tu
b3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSkgewotICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywg
b3AxKTsKLSAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAg
ICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgR2VuZXJhdGlvbkluZm8mIGNoaWxkSW5mbyA9IG1f
Z2VuZXJhdGlvbkluZm9bYXQobm9kZS5jaGlsZDEoKSkudmlydHVhbFJlZ2lzdGVyKCldOwotICAg
IGlmIChjaGlsZEluZm8uaXNKU0RvdWJsZSgpKSB7Ci0gICAgICAgIERvdWJsZU9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwotICAgICAgICBGUFJSZWcgZnByID0gb3AxLmZwcigpOwotICAgICAgICBHUFJSZWcgZ3ByID0g
cmVzdWx0LmdwcigpOwotICAgICAgICBvcDEudXNlKCk7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIHRydW5jYXRlZFRvSW50ZWdlciA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQz
MihmcHIsIGdwciwgSklUQ29tcGlsZXI6OkJyYW5jaElmVHJ1bmNhdGVTdWNjZXNzZnVsKTsKLSAg
ICAgICAgCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKGdwcik7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24odG9JbnQzMiwgZ3ByLCBmcHIpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVn
aXN0ZXJzKGdwcik7Ci0gICAgICAgIAotICAgICAgICB0cnVuY2F0ZWRUb0ludGVnZXIubGluaygm
bV9qaXQpOwotICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwciwgbV9jb21waWxlSW5kZXgsIFVzZUNo
aWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgb3AxKTsKLSAgICBHUFJSZWcganNWYWx1ZUdwciA9IG9wMS5ncHIo
KTsKLSAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgIG9wMS51c2UoKTsK
LQotICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpOwotCi0gICAgLy8gRmlyc3QgaGFuZGxlIG5vbi1pbnRlZ2VycwotICAgIHNp
bGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgY2FsbE9wZXJhdGlvbihkZmdD
b252ZXJ0SlNWYWx1ZVRvSW50MzIsIHJlc3VsdEdQUiwganNWYWx1ZUdwcik7Ci0gICAgc2lsZW50
RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhc0Nh
bGxlZFRvSW50MzIgPSBtX2ppdC5qdW1wKCk7Ci0KLSAgICAvLyBUaGVuIGhhbmRsZSBpbnRlZ2Vy
cy4KLSAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwotICAgIG1faml0Lnplcm9FeHRlbmQzMlRv
UHRyKGpzVmFsdWVHcHIsIHJlc3VsdEdQUik7Ci0gICAgaGFzQ2FsbGVkVG9JbnQzMi5saW5rKCZt
X2ppdCk7Ci0gICAgaW50ZWdlclJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VD
aGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwotfQotCi12b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5v
blNwZWN1bGF0aXZlVUludDMyVG9OdW1iZXIoTm9kZSYgbm9kZSkKLXsKLSAgICBJbnRlZ2VyT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgRlBSVGVtcG9yYXJ5IGJveGVyKHRo
aXMpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKLSAgICAKLSAgICBKSVRD
b21waWxlcjo6SnVtcCBwb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpH
cmVhdGVyVGhhbk9yRXF1YWwsIG9wMS5ncHIoKSwgVHJ1c3RlZEltbTMyKDApKTsKLSAgICAKLSAg
ICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShvcDEuZ3ByKCksIGJveGVyLmZwcigpKTsKLSAg
ICBtX2ppdC5hZGREb3VibGUoSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcygmdHdvVG9UaGUz
MiksIGJveGVyLmZwcigpKTsKLSAgICAKLSAgICBib3hEb3VibGUoYm94ZXIuZnByKCksIHJlc3Vs
dC5ncHIoKSk7Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAo
KTsKLSAgICAKLSAgICBwb3NpdGl2ZS5saW5rKCZtX2ppdCk7Ci0gICAgCi0gICAgbV9qaXQub3JQ
dHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBvcDEuZ3ByKCksIHJlc3VsdC5ncHIo
KSk7Ci0gICAgCi0gICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgCi0gICAganNWYWx1ZVJlc3Vs
dChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKLX0KLQotdm9pZCBKSVRDb2RlR2VuZXJh
dG9yOjpub25TcGVjdWxhdGl2ZUtub3duQ29uc3RhbnRBcml0aE9wKE5vZGVUeXBlIG9wLCBOb2Rl
SW5kZXggcmVnQ2hpbGQsIE5vZGVJbmRleCBpbW1DaGlsZCwgYm9vbCBjb21tdXRlKQotewotICAg
IEpTVmFsdWVPcGVyYW5kIHJlZ0FyZyh0aGlzLCByZWdDaGlsZCk7Ci0gICAgR1BSUmVnIHJlZ0Fy
Z0dQUiA9IHJlZ0FyZy5ncHIoKTsKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgRlBSVGVtcG9yYXJ5IHRtcDEo
dGhpcyk7Ci0gICAgRlBSVGVtcG9yYXJ5IHRtcDIodGhpcyk7Ci0gICAgRlBSUmVnIHRtcDFGUFIg
PSB0bXAxLmZwcigpOwotICAgIEZQUlJlZyB0bXAyRlBSID0gdG1wMi5mcHIoKTsKLSAgICAKLSAg
ICByZWdBcmcudXNlKCk7Ci0gICAgdXNlKGltbUNoaWxkKTsKLQotICAgIEpJVENvbXBpbGVyOjpK
dW1wIG5vdEludDsKLSAgICAKLSAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50
KGltbUNoaWxkKTsKLSAgICAgICAgCi0gICAgaWYgKCFpc0tub3duSW50ZWdlcihyZWdDaGlsZCkp
Ci0gICAgICAgIG5vdEludCA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3cs
IHJlZ0FyZ0dQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAKLSAgICBK
SVRDb21waWxlcjo6SnVtcCBvdmVyZmxvdzsKLSAgICAKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAg
Y2FzZSBWYWx1ZUFkZDoKLSAgICBjYXNlIEFyaXRoQWRkOgotICAgICAgICBvdmVyZmxvdyA9IG1f
aml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgcmVnQXJnR1BSLCBJbW0z
MihpbW0pLCByZXN1bHRHUFIpOwotICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgY2FzZSBB
cml0aFN1YjoKLSAgICAgICAgb3ZlcmZsb3cgPSBtX2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2Vt
Ymxlcjo6T3ZlcmZsb3csIHJlZ0FyZ0dQUiwgSW1tMzIoaW1tKSwgcmVzdWx0R1BSKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIH0KLSAgICAKLSAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIsIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgCi0gICAgb3ZlcmZsb3cubGluaygmbV9qaXQpOwot
ICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdE51bWJlcjsKLSAgICAKLSAgICAvLyBmaXJz
dCBkZWFsIHdpdGggb3ZlcmZsb3cgY2FzZQotICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91Ymxl
KHJlZ0FyZ0dQUiwgdG1wMkZQUik7Ci0gICAgCi0gICAgLy8gbm93IGRlYWwgd2l0aCBub3QtaW50
IGNhc2UsIGlmIGFwcGxpY2FibGUKLSAgICBpZiAoIWlzS25vd25JbnRlZ2VyKHJlZ0NoaWxkKSkg
ewotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBoYXZlVmFsdWUgPSBtX2ppdC5qdW1wKCk7Ci0g
ICAgICAgIAotICAgICAgICBub3RJbnQubGluaygmbV9qaXQpOwotICAgICAgICAKLSAgICAgICAg
aWYgKCFpc0tub3duTnVtZXJpYyhyZWdDaGlsZCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChvcCA9
PSBWYWx1ZUFkZCk7Ci0gICAgICAgICAgICBub3ROdW1iZXIgPSBtX2ppdC5icmFuY2hUZXN0UHRy
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZWdBcmdHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3Rlcik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1faml0Lm1vdmUocmVnQXJn
R1BSLCByZXN1bHRHUFIpOwotICAgICAgICBtX2ppdC5hZGRQdHIoR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyLCByZXN1bHRHUFIpOwotICAgICAgICBtX2ppdC5tb3ZlUHRyVG9Eb3VibGUo
cmVzdWx0R1BSLCB0bXAyRlBSKTsKLSAgICAgICAgCi0gICAgICAgIGhhdmVWYWx1ZS5saW5rKCZt
X2ppdCk7Ci0gICAgfQotICAgIAotICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0
cihyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldERvdWJsZVRvSW50cHRyKHZhbHVl
T2ZOdW1iZXJDb25zdGFudChpbW1DaGlsZCkpKSksIHJlc3VsdEdQUik7Ci0gICAgbV9qaXQubW92
ZVB0clRvRG91YmxlKHJlc3VsdEdQUiwgdG1wMUZQUik7Ci0gICAgc3dpdGNoIChvcCkgewotICAg
IGNhc2UgVmFsdWVBZGQ6Ci0gICAgY2FzZSBBcml0aEFkZDoKLSAgICAgICAgbV9qaXQuYWRkRG91
YmxlKHRtcDFGUFIsIHRtcDJGUFIpOwotICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgY2Fz
ZSBBcml0aFN1YjoKLSAgICAgICAgbV9qaXQuc3ViRG91YmxlKHRtcDFGUFIsIHRtcDJGUFIpOwot
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICAKLSAgICBKSVRDb21waWxlcjo6SnVtcCBkb25l
Q2FzZUNvbnZlcnRlZFRvSW50OwotICAgIAotICAgIGlmIChvcCA9PSBWYWx1ZUFkZCkgewotICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOwotICAgICAgICBtX2ppdC5i
cmFuY2hDb252ZXJ0RG91YmxlVG9JbnQzMih0bXAyRlBSLCByZXN1bHRHUFIsIGZhaWx1cmVDYXNl
cywgdG1wMUZQUik7Ci0gICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIGRvbmVDYXNlQ29udmVydGVk
VG9JbnQgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAgICBmYWlsdXJlQ2FzZXMubGlu
aygmbV9qaXQpOwotICAgIH0KLSAgICAKLSAgICBtX2ppdC5tb3ZlRG91YmxlVG9QdHIodG1wMkZQ
UiwgcmVzdWx0R1BSKTsKLSAgICBtX2ppdC5zdWJQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyLCByZXN1bHRHUFIpOwotICAgICAgICAKLSAgICBpZiAoIWlzS25vd25OdW1lcmljKHJl
Z0NoaWxkKSkgewotICAgICAgICBBU1NFUlQobm90TnVtYmVyLmlzU2V0KCkpOwotICAgICAgICBB
U1NFUlQob3AgPT0gVmFsdWVBZGQpOwotICAgICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIGRvbmVDYXNlV2FzTnVtYmVyID0gbV9qaXQuanVtcCgpOwotICAgICAgICAgICAgCi0g
ICAgICAgIG5vdE51bWJlci5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgc2ls
ZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgaWYgKGNvbW11dGUpCi0g
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVlQWRkTm90TnVtYmVyLCByZXN1
bHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihpbW0pLCByZWdBcmdHUFIpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVlQWRkTm90TnVtYmVy
LCByZXN1bHRHUFIsIHJlZ0FyZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGltbSkpOwotICAg
ICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgZG9uZUNhc2VXYXNOdW1iZXIubGluaygmbV9qaXQpOwotICAgIH0KLSAgICAKLSAgICBk
b25lLmxpbmsoJm1faml0KTsKLSAgICBpZiAoZG9uZUNhc2VDb252ZXJ0ZWRUb0ludC5pc1NldCgp
KQotICAgICAgICBkb25lQ2FzZUNvbnZlcnRlZFRvSW50LmxpbmsoJm1faml0KTsKLSAgICAgICAg
Ci0gICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOwotfQotCi12b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1
bGF0aXZlQmFzaWNBcml0aE9wKE5vZGVUeXBlIG9wLCBOb2RlICZub2RlKQotewotICAgIEpTVmFs
dWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQg
YXJnMih0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAKLSAgICBGUFJUZW1wb3JhcnkgdG1wMSh0
aGlzKTsKLSAgICBGUFJUZW1wb3JhcnkgdG1wMih0aGlzKTsKLSAgICBGUFJSZWcgdG1wMUZQUiA9
IHRtcDEuZnByKCk7Ci0gICAgRlBSUmVnIHRtcDJGUFIgPSB0bXAyLmZwcigpOwotICAgIAotICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAgICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEu
Z3ByKCk7Ci0gICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwotICAgIAotICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgCi0gICAgYXJnMS51c2UoKTsKLSAgICBh
cmcyLnVzZSgpOwotICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1wIGNoaWxkMU5vdEludDsKLSAg
ICBKSVRDb21waWxlcjo6SnVtcCBjaGlsZDJOb3RJbnQ7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXBM
aXN0IG92ZXJmbG93OwotICAgIAotICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEo
KSkpCi0gICAgICAgIGNoaWxkMU5vdEludCA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6QmVsb3csIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0gICAg
aWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkKLSAgICAgICAgY2hpbGQyTm90SW50
ID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMkdQUiwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAg
Y2FzZSBWYWx1ZUFkZDoKLSAgICBjYXNlIEFyaXRoQWRkOiB7Ci0gICAgICAgIG92ZXJmbG93LmFw
cGVuZChtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIGFyZzFHUFIs
IGFyZzJHUFIsIHJlc3VsdEdQUikpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAot
ICAgIGNhc2UgQXJpdGhTdWI6IHsKLSAgICAgICAgb3ZlcmZsb3cuYXBwZW5kKG1faml0LmJyYW5j
aFN1YjMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0
R1BSKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBBcml0aE11
bDogewotICAgICAgICBvdmVyZmxvdy5hcHBlbmQobV9qaXQuYnJhbmNoTXVsMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok92ZXJmbG93LCBhcmcxR1BSLCBhcmcyR1BSLCByZXN1bHRHUFIpKTsKLSAgICAgICAg
b3ZlcmZsb3cuYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywg
cmVzdWx0R1BSKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgCi0gICAgZGVmYXVs
dDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIAotICAgIG1faml0
Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0R1BSKTsKLSAgICAg
ICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAgICAKLSAg
ICBKSVRDb21waWxlcjo6SnVtcExpc3QgaGF2ZUZQUkFyZ3VtZW50czsKLQotICAgIG92ZXJmbG93
LmxpbmsoJm1faml0KTsKLSAgICAgICAgCi0gICAgLy8gYm90aCBhcmd1bWVudHMgYXJlIGludGVn
ZXJzCi0gICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUoYXJnMUdQUiwgdG1wMUZQUik7Ci0g
ICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUoYXJnMkdQUiwgdG1wMkZQUik7Ci0gICAgICAg
IAotICAgIGhhdmVGUFJBcmd1bWVudHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgIAot
ICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBub3ROdW1iZXJzOwotICAgICAgICAKLSAgICBKSVRD
b21waWxlcjo6SnVtcCBjaGlsZDJOb3RJbnQyOwotICAgICAgICAKLSAgICBpZiAoIWlzS25vd25J
bnRlZ2VyKG5vZGUuY2hpbGQxKCkpKSB7Ci0gICAgICAgIGNoaWxkMU5vdEludC5saW5rKCZtX2pp
dCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duTnVtZXJpYyhub2RlLmNoaWxk
MSgpKSkgewotICAgICAgICAgICAgQVNTRVJUKG9wID09IFZhbHVlQWRkKTsKLSAgICAgICAgICAg
IG5vdE51bWJlcnMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgbV9qaXQubW92ZShhcmcxR1BSLCByZXN1bHRHUFIpOwot
ICAgICAgICB1bmJveERvdWJsZShyZXN1bHRHUFIsIHRtcDFGUFIpOwotICAgICAgICAgICAgCi0g
ICAgICAgIC8vIGNoaWxkMSBpcyBjb252ZXJ0ZWQgdG8gYSBkb3VibGU7IGNoaWxkMiBtYXkgZWl0
aGVyIGJlIGFuIGludCBvcgotICAgICAgICAvLyBhIGJveGVkIGRvdWJsZQotICAgICAgICAgICAg
Ci0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKSkpIHsKLSAgICAgICAg
ICAgIGlmIChpc0tub3duTnVtZXJpYyhub2RlLmNoaWxkMigpKSkKLSAgICAgICAgICAgICAgICBj
aGlsZDJOb3RJbnQyID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJn
MkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgIEFTU0VSVChvcCA9PSBWYWx1ZUFkZCk7Ci0gICAgICAgICAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgY2hpbGQySXNJbnQgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyKTsKLSAgICAgICAgICAgICAgICBub3ROdW1iZXJzLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgICAgICBjaGlsZDJOb3RJbnQyID0gbV9qaXQuanVt
cCgpOwotICAgICAgICAgICAgICAgIGNoaWxkMklzSW50LmxpbmsoJm1faml0KTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIC8vIGNoaWxkIDIgaXMgZGVm
aW5pdGVseSBhbiBpbnRlZ2VyCi0gICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGFy
ZzJHUFIsIHRtcDJGUFIpOwotICAgICAgICAgICAgCi0gICAgICAgIGhhdmVGUFJBcmd1bWVudHMu
YXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgfQotICAgICAgICAKLSAgICBpZiAoIWlzS25vd25J
bnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7Ci0gICAgICAgIGNoaWxkMk5vdEludC5saW5rKCZtX2pp
dCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duTnVtZXJpYyhub2RlLmNoaWxk
MigpKSkgewotICAgICAgICAgICAgQVNTRVJUKG9wID09IFZhbHVlQWRkKTsKLSAgICAgICAgICAg
IG5vdE51bWJlcnMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgLy8gY2hpbGQxIGlzIGRlZmluaXRlbHkgYW4gaW50ZWdl
ciwgYW5kIGNoaWxkIDIgaXMgZGVmaW5pdGVseSBub3QKLSAgICAgICAgICAgIAotICAgICAgICBt
X2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShhcmcxR1BSLCB0bXAxRlBSKTsKLSAgICAgICAgICAg
IAotICAgICAgICBpZiAoY2hpbGQyTm90SW50Mi5pc1NldCgpKQotICAgICAgICAgICAgY2hpbGQy
Tm90SW50Mi5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgbV9qaXQubW92ZShh
cmcyR1BSLCByZXN1bHRHUFIpOwotICAgICAgICB1bmJveERvdWJsZShyZXN1bHRHUFIsIHRtcDJG
UFIpOwotICAgIH0KLSAgICAgICAgCi0gICAgaGF2ZUZQUkFyZ3VtZW50cy5saW5rKCZtX2ppdCk7
Ci0gICAgICAgIAotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIFZhbHVlQWRkOgotICAgIGNh
c2UgQXJpdGhBZGQ6Ci0gICAgICAgIG1faml0LmFkZERvdWJsZSh0bXAyRlBSLCB0bXAxRlBSKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICBjYXNlIEFyaXRoU3ViOgotICAgICAg
ICBtX2ppdC5zdWJEb3VibGUodG1wMkZQUiwgdG1wMUZQUik7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgCi0gICAgY2FzZSBBcml0aE11bDoKLSAgICAgICAgbV9qaXQubXVsRG91YmxlKHRt
cDJGUFIsIHRtcDFGUFIpOwotICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICAKLSAgICBKSVRD
b21waWxlcjo6SnVtcCBkb25lQ2FzZUNvbnZlcnRlZFRvSW50OwotICAgIAotICAgIGlmIChvcCA9
PSBWYWx1ZUFkZCkgewotICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2Vz
OwotICAgICAgICBtX2ppdC5icmFuY2hDb252ZXJ0RG91YmxlVG9JbnQzMih0bXAxRlBSLCByZXN1
bHRHUFIsIGZhaWx1cmVDYXNlcywgdG1wMkZQUik7Ci0gICAgICAgIG1faml0Lm9yUHRyKEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAg
IGRvbmVDYXNlQ29udmVydGVkVG9JbnQgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAg
ICBmYWlsdXJlQ2FzZXMubGluaygmbV9qaXQpOwotICAgIH0KLSAgICAgICAgCi0gICAgYm94RG91
YmxlKHRtcDFGUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgIGlmICghbm90TnVtYmVycy5l
bXB0eSgpKSB7Ci0gICAgICAgIEFTU0VSVChvcCA9PSBWYWx1ZUFkZCk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZUNhc2VXYXNOdW1iZXIgPSBtX2ppdC5qdW1w
KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgbm90TnVtYmVycy5saW5rKCZtX2ppdCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlciwgcmVzdWx0R1BS
LCBhcmcxR1BSLCBhcmcyR1BSKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1
bHRHUFIpOwotCi0gICAgICAgIGRvbmVDYXNlV2FzTnVtYmVyLmxpbmsoJm1faml0KTsKLSAgICB9
Ci0gICAgCi0gICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgaWYgKGRvbmVDYXNlQ29udmVydGVk
VG9JbnQuaXNTZXQoKSkKLSAgICAgICAgZG9uZUNhc2VDb252ZXJ0ZWRUb0ludC5saW5rKCZtX2pp
dCk7Ci0gICAgICAgIAotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRl
eCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLX0KLQotSklUQ29tcGlsZXI6OkNhbGwg
SklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkR2V0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJl
c3VsdEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJ
VENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0LCBOb2RlVHlwZSBub2RlVHlwZSkKLXsKLSAg
ICBBU1NFUlQobm9kZVR5cGUgPT0gR2V0QnlJZCB8fCBub2RlVHlwZSA9PSBHZXRNZXRob2QpOwot
Ci0gICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7Ci0gICAg
SklUQ29tcGlsZXI6Okp1bXAgc3RydWN0dXJlQ2hlY2sgPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0
Y2goSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRDb21waWxl
cjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpKTsKLSAgICAKLSAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0Ojpv
ZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKLSAgICBKSVRDb21waWxlcjo6
RGF0YUxhYmVsQ29tcGFjdCBsb2FkV2l0aFBhdGNoID0gbV9qaXQubG9hZFB0cldpdGhDb21wYWN0
QWRkcmVzc09mZnNldFBhdGNoKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgMCksIHJl
c3VsdEdQUik7Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAo
KTsKLQotICAgIHN0cnVjdHVyZUNoZWNrLmxpbmsoJm1faml0KTsKLSAgICAKLSAgICBpZiAoc2xv
d1BhdGhUYXJnZXQuaXNTZXQoKSkKLSAgICAgICAgc2xvd1BhdGhUYXJnZXQubGluaygmbV9qaXQp
OwotICAgIAotICAgIEpJVENvbXBpbGVyOjpMYWJlbCBzbG93Q2FzZSA9IG1faml0LmxhYmVsKCk7
Ci0KLSAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCA9IGNhbGxPcGVyYXRpb24obm9kZVR5cGUgPT0gR2V0QnlJ
ZCA/IG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSA6IG9wZXJhdGlvbkdldE1ldGhvZE9wdGltaXpl
LCByZXN1bHRHUFIsIGJhc2VHUFIsIGlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpOwotICAg
IHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAKLSAgICBkb25lLmxpbmso
Jm1faml0KTsKLSAgICAKLSAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQu
bGFiZWwoKTsKLQotICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKFByb3BlcnR5QWNjZXNzUmVj
b3JkKHN0cnVjdHVyZVRvQ29tcGFyZSwgZnVuY3Rpb25DYWxsLCBzdHJ1Y3R1cmVDaGVjaywgbG9h
ZFdpdGhQYXRjaCwgc2xvd0Nhc2UsIGRvbmVMYWJlbCwgc2FmZUNhc3Q8aW50OF90PihiYXNlR1BS
KSwgc2FmZUNhc3Q8aW50OF90PihyZXN1bHRHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHNjcmF0Y2hH
UFIpKSk7Ci0gICAgCi0gICAgaWYgKHNjcmF0Y2hHUFIgIT0gcmVzdWx0R1BSICYmIHNjcmF0Y2hH
UFIgIT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgdW5sb2NrKHNjcmF0Y2hHUFIpOwotICAgIAot
ICAgIHJldHVybiBmdW5jdGlvbkNhbGw7Ci19Ci0KLXZvaWQgSklUQ29kZUdlbmVyYXRvcjo6Y2Fj
aGVkUHV0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHZhbHVlR1BSLCBOb2RlSW5kZXggdmFs
dWVJbmRleCwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1
dEtpbmQgcHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQpCi17Ci0gICAg
Ci0gICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7Ci0gICAg
SklUQ29tcGlsZXI6Okp1bXAgc3RydWN0dXJlQ2hlY2sgPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0
Y2goSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRDb21waWxl
cjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpKTsKLQotICAgIHdy
aXRlQmFycmllcihiYXNlR1BSLCB2YWx1ZUdQUiwgdmFsdWVJbmRleCwgV3JpdGVCYXJyaWVyRm9y
UHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hHUFIpOwotCi0gICAgbV9qaXQubG9hZFB0cihKSVRDb21w
aWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2Uo
KSksIHNjcmF0Y2hHUFIpOwotICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWwzMiBzdG9yZVdpdGhQ
YXRjaCA9IG1faml0LnN0b3JlUHRyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCh2YWx1ZUdQUiwgSklU
Q29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgMCkpOwotCi0gICAgSklUQ29tcGlsZXI6Okp1
bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLQotICAgIHN0cnVjdHVyZUNoZWNrLmxpbmsoJm1faml0
KTsKLQotICAgIGlmIChzbG93UGF0aFRhcmdldC5pc1NldCgpKQotICAgICAgICBzbG93UGF0aFRh
cmdldC5saW5rKCZtX2ppdCk7Ci0KLSAgICBKSVRDb21waWxlcjo6TGFiZWwgc2xvd0Nhc2UgPSBt
X2ppdC5sYWJlbCgpOwotCi0gICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJl
Zyk7Ci0gICAgVl9ERkdPcGVyYXRpb25fRUpDSSBvcHRpbWl6ZWRDYWxsOwotICAgIGlmIChtX2pp
dC5zdHJpY3RNb2RlRm9yKGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luKSkgewotICAgICAg
ICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCi0gICAgICAgICAgICBvcHRpbWl6ZWRDYWxsID0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKLSAgICAgICAgICAgIG9w
dGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlk
Tm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0aW9u
Q2FsbCA9IGNhbGxPcGVyYXRpb24ob3B0aW1pemVkQ2FsbCwgdmFsdWVHUFIsIGJhc2VHUFIsIGlk
ZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpOwotICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMo
SW52YWxpZEdQUlJlZyk7Ci0KLSAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICBKSVRDb21waWxl
cjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKLQotICAgIG1faml0LmFkZFByb3Bl
cnR5QWNjZXNzKFByb3BlcnR5QWNjZXNzUmVjb3JkKHN0cnVjdHVyZVRvQ29tcGFyZSwgZnVuY3Rp
b25DYWxsLCBzdHJ1Y3R1cmVDaGVjaywgSklUQ29tcGlsZXI6OkRhdGFMYWJlbENvbXBhY3Qoc3Rv
cmVXaXRoUGF0Y2gubGFiZWwoKSksIHNsb3dDYXNlLCBkb25lTGFiZWwsIHNhZmVDYXN0PGludDhf
dD4oYmFzZUdQUiksIHNhZmVDYXN0PGludDhfdD4odmFsdWVHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+
KHNjcmF0Y2hHUFIpKSk7Ci19Ci0KLXZvaWQgSklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkR2V0TWV0
aG9kKEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgcmVzdWx0R1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJn
ZXQpCi17Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGw7Ci0gICAgSklUQ29tcGlsZXI6
OkRhdGFMYWJlbFB0ciBzdHJ1Y3RUb0NvbXBhcmUsIHByb3RvT2JqLCBwcm90b1N0cnVjdFRvQ29t
cGFyZSwgcHV0RnVuY3Rpb247Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgd3JvbmdTdHJ1
Y3R1cmUgPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBK
SVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
c3RydWN0VG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9j
YXN0PHZvaWQqPigtMSkpKTsKLSAgICBwcm90b09iaiA9IG1faml0Lm1vdmVXaXRoUGF0Y2goSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoMCksIHJlc3VsdEdQUik7Ci0gICAgSklUQ29tcGlsZXI6
Okp1bXAgd3JvbmdQcm90b1N0cnVjdHVyZSA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChKSVRD
b21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHByb3RvU3RydWN0VG9Db21wYXJlLCBKSVRDb21waWxlcjo6
VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpKTsKLSAgICAKLSAgICBw
dXRGdW5jdGlvbiA9IG1faml0Lm1vdmVXaXRoUGF0Y2goSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1Q
dHIoMCksIHJlc3VsdEdQUik7Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1f
aml0Lmp1bXAoKTsKLSAgICAKLSAgICB3cm9uZ1N0cnVjdHVyZS5saW5rKCZtX2ppdCk7Ci0gICAg
d3JvbmdQcm90b1N0cnVjdHVyZS5saW5rKCZtX2ppdCk7Ci0gICAgCi0gICAgc2xvd0NhbGwgPSBj
YWNoZWRHZXRCeUlkKGJhc2VHUFIsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgaWRlbnRpZmllck51
bWJlciwgc2xvd1BhdGhUYXJnZXQsIEdldE1ldGhvZCk7Ci0gICAgCi0gICAgZG9uZS5saW5rKCZt
X2ppdCk7Ci0gICAgCi0gICAgbV9qaXQuYWRkTWV0aG9kR2V0KHNsb3dDYWxsLCBzdHJ1Y3RUb0Nv
bXBhcmUsIHByb3RvT2JqLCBwcm90b1N0cnVjdFRvQ29tcGFyZSwgcHV0RnVuY3Rpb24pOwotfQot
Ci12b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJl
TnVsbChOb2RlSW5kZXggb3BlcmFuZCwgYm9vbCBpbnZlcnQpCi17Ci0gICAgSlNWYWx1ZU9wZXJh
bmQgYXJnKHRoaXMsIG9wZXJhbmQpOwotICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7Ci0g
ICAgCi0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBhcmcpOwotICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2Vs
bDsKLSAgICAKLSAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQpKQotICAgICAgICBub3RDZWxs
ID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgYXJnR1BSLCBH
UFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotICAgIAotICAgIG1faml0LmxvYWRQdHIoSklUQ29t
cGlsZXI6OkFkZHJlc3MoYXJnR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVzdWx0
R1BSKTsKLSAgICBtX2ppdC50ZXN0OChpbnZlcnQgPyBKSVRDb21waWxlcjo6WmVybyA6IEpJVENv
bXBpbGVyOjpOb25aZXJvLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVy
ZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKLSAgICAKLSAgICBpZiAoIWlzS25vd25D
ZWxsKG9wZXJhbmQpKSB7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5q
dW1wKCk7Ci0gICAgICAgIAotICAgICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKLSAgICAgICAg
Ci0gICAgICAgIG1faml0Lm1vdmUoYXJnR1BSLCByZXN1bHRHUFIpOwotICAgICAgICBtX2ppdC5h
bmRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVzdWx0
R1BSKTsKLSAgICAgICAgbV9qaXQuY29tcGFyZVB0cihpbnZlcnQgPyBKSVRDb21waWxlcjo6Tm90
RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1YWwsIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW0zMihWYWx1ZU51bGwpLCByZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAgICAgZG9uZS5s
aW5rKCZtX2ppdCk7Ci0gICAgfQotICAgIAotICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZh
bHVlRmFsc2UpLCByZXN1bHRHUFIpOwotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2Nv
bXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7Ci19Ci0KLXZvaWQgSklUQ29kZUdlbmVy
YXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoTm9kZUluZGV4IG9wZXJhbmQs
IE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52ZXJ0KQotewotICAgIE5vZGUmIGJy
YW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBi
cmFuY2hOb2RlLnRha2VuQmxvY2tJbmRleCgpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBi
cmFuY2hOb2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwotICAgIAotICAgIGlmICh0YWtlbiA9PSAo
bV9ibG9jayArIDEpKSB7Ci0gICAgICAgIGludmVydCA9ICFpbnZlcnQ7Ci0gICAgICAgIEJsb2Nr
SW5kZXggdG1wID0gdGFrZW47Ci0gICAgICAgIHRha2VuID0gbm90VGFrZW47Ci0gICAgICAgIG5v
dFRha2VuID0gdG1wOwotICAgIH0KLQotICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBvcGVy
YW5kKTsKLSAgICBHUFJSZWcgYXJnR1BSID0gYXJnLmdwcigpOwotICAgIAotICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgYXJnKTsKLSAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOwotICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENlbGw7Ci0gICAgCi0gICAgaWYg
KCFpc0tub3duQ2VsbChvcGVyYW5kKSkKLSAgICAgICAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRl
c3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGFyZ0dQUiwgR1BSSW5mbzo6dGFnTWFza1Jl
Z2lzdGVyKTsKLSAgICAKLSAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGFy
Z0dQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlc3VsdEdQUik7Ci0gICAgYWRkQnJh
bmNoKG1faml0LmJyYW5jaFRlc3Q4KGludmVydCA/IEpJVENvbXBpbGVyOjpaZXJvIDogSklUQ29t
cGlsZXI6Ok5vblplcm8sIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgU3RydWN0dXJl
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFrZW4pOwotICAgIAotICAgIGlmICghaXNLbm93bkNlbGwo
b3BlcmFuZCkpIHsKLSAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOwot
ICAgICAgICAKLSAgICAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIAotICAgICAg
ICBtX2ppdC5tb3ZlKGFyZ0dQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQuYW5kUHRyKEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQUik7Ci0g
ICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Ok5v
dEVxdWFsIDogSklUQ29tcGlsZXI6OkVxdWFsLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSwgdGFrZW4pOwot
ICAgIH0KLSAgICAKLSAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKLSAgICAgICAg
YWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOwotfQotCi1ib29sIEpJVENvZGVHZW5l
cmF0b3I6Om5vblNwZWN1bGF0aXZlQ29tcGFyZU51bGwoTm9kZSYgbm9kZSwgTm9kZUluZGV4IG9w
ZXJhbmQsIGJvb2wgaW52ZXJ0KQotewotICAgIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXggPSBk
ZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwotICAgIGlmIChicmFuY2hOb2RlSW5kZXggIT0gTm9Ob2Rl
KSB7Ci0gICAgICAgIEFTU0VSVChub2RlLmFkanVzdGVkUmVmQ291bnQoKSA9PSAxKTsKLSAgICAg
ICAgCi0gICAgICAgIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKG9wZXJhbmQsIGJy
YW5jaE5vZGVJbmRleCwgaW52ZXJ0KTsKLSAgICAKLSAgICAgICAgdXNlKG5vZGUuY2hpbGQxKCkp
OwotICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIG1fY29tcGlsZUluZGV4ID0g
YnJhbmNoTm9kZUluZGV4OwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICAgIAotICAgIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbChvcGVyYW5kLCBp
bnZlcnQpOwotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBKSVRDb2RlR2VuZXJh
dG9yOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUmIG5vZGUsIE5vZGVJbmRleCBi
cmFuY2hOb2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQs
IFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKLXsKLSAgICBOb2RlJiBicmFuY2hO
b2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNo
Tm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNo
Tm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKLQotICAgIEpJVENvbXBpbGVyOjpSZXN1bHRDb25k
aXRpb24gY2FsbFJlc3VsdENvbmRpdGlvbiA9IEpJVENvbXBpbGVyOjpOb25aZXJvOwotCi0gICAg
Ly8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2su
Ci0gICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBp
bnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KLSAgICBp
ZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkgewotICAgICAgICBjb25kID0gSklUQ29tcGlsZXI6
OmludmVydChjb25kKTsKLSAgICAgICAgY2FsbFJlc3VsdENvbmRpdGlvbiA9IEpJVENvbXBpbGVy
OjpaZXJvOwotICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOwotICAgICAgICB0YWtlbiA9
IG5vdFRha2VuOwotICAgICAgICBub3RUYWtlbiA9IHRtcDsKLSAgICB9Ci0KLSAgICBKU1ZhbHVl
T3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIEpTVmFsdWVPcGVyYW5kIGFy
ZzIodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigp
OwotICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKLSAgICAKLSAgICBKSVRDb21waWxl
cjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgCi0gICAgaWYgKGlzS25vd25Ob3RJbnRlZ2VyKG5v
ZGUuY2hpbGQxKCkpIHx8IGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7Ci0gICAg
ICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7Ci0gICAgCi0gICAgICAgIGFyZzEudXNlKCk7Ci0gICAgICAgIGFyZzIudXNl
KCk7Ci0gICAgCi0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRp
b24oaGVscGVyRnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUik7Ci0KLSAgICAg
ICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3QzMihjYWxsUmVzdWx0Q29uZGl0aW9uLCByZXN1
bHRHUFIpLCB0YWtlbik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBhcmcyKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
LSAgICAKLSAgICAgICAgYXJnMS51c2UoKTsKLSAgICAgICAgYXJnMi51c2UoKTsKLSAgICAKLSAg
ICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSkKLSAgICAgICAgICAgIHNs
b3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcx
R1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAgICAgICAgaWYgKCFpc0tu
b3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCht
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAgICAKLSAgICAgICAgYWRkQnJhbmNoKG1faml0LmJy
YW5jaDMyKGNvbmQsIGFyZzFHUFIsIGFyZzJHUFIpLCB0YWtlbik7Ci0gICAgCi0gICAgICAgIGlm
ICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUu
Y2hpbGQyKCkpKSB7Ci0gICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtl
bik7Ci0gICAgCi0gICAgICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7Ci0gICAgCi0gICAg
ICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbihoZWxwZXJGdW5jdGlvbiwgcmVzdWx0R1BSLCBhcmcxR1BSLCBhcmcyR1BS
KTsKLSAgICAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAg
ICAgCi0gICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDMyKGNhbGxSZXN1bHRD
b25kaXRpb24sIHJlc3VsdEdQUiksIHRha2VuKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
IChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQotICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVt
cCgpLCBub3RUYWtlbik7Ci19Ci0KLXZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRp
dmVOb25QZWVwaG9sZUNvbXBhcmUoTm9kZSYgbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9u
YWxDb25kaXRpb24gY29uZCwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQotewot
ICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgSlNWYWx1
ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICBHUFJSZWcgYXJnMUdQUiA9
IGFyZzEuZ3ByKCk7Ci0gICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwotICAgIAotICAg
IEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKLSAgICAKLSAgICBpZiAoaXNLbm93bk5v
dEludGVnZXIobm9kZS5jaGlsZDEoKSkgfHwgaXNLbm93bk5vdEludGVnZXIobm9kZS5jaGlsZDIo
KSkpIHsKLSAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAKLSAgICAgICAgYXJnMS51c2UoKTsKLSAgICAg
ICAgYXJnMi51c2UoKTsKLSAgICAKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihoZWxwZXJGdW5jdGlvbiwgcmVzdWx0R1BSLCBhcmcxR1BSLCBhcmcyR1BS
KTsKLSAgICAgICAgCi0gICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxl
SW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBhcmcyKTsK
LSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLQotICAgICAgICBhcmcx
LnVzZSgpOwotICAgICAgICBhcmcyLnVzZSgpOwotICAgIAotICAgICAgICBpZiAoIWlzS25vd25J
bnRlZ2VyKG5vZGUuY2hpbGQxKCkpKQotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlcikpOwotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hp
bGQyKCkpKQotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
cikpOwotICAgIAotICAgICAgICBtX2ppdC5jb21wYXJlMzIoY29uZCwgYXJnMUdQUiwgYXJnMkdQ
UiwgcmVzdWx0R1BSKTsKLSAgICAKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNo
aWxkMSgpKSB8fCAhaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKSkpIHsKLSAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIGhhdmVSZXN1bHQgPSBtX2ppdC5qdW1wKCk7Ci0gICAgCi0gICAg
ICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIAotICAgICAgICAgICAgc2ls
ZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRp
b24oaGVscGVyRnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUik7Ci0gICAgICAg
ICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAg
ICAgICAgbV9qaXQuYW5kUHRyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKLSAgICAgICAg
Ci0gICAgICAgICAgICBoYXZlUmVzdWx0LmxpbmsoJm1faml0KTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdEdQ
Uik7Ci0gICAgICAgIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxl
SW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
Ci0gICAgfQotfQotCi12b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhv
bGVTdHJpY3RFcShOb2RlJiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBib29sIGlu
dmVydCkKLXsKLSAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAg
ICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICBC
bG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKLQot
ICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8gdGhlIHRha2VuIGJs
b2NrLgotICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRha2Vu
ICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91Z2guCi0g
ICAgaWYgKHRha2VuID09IChtX2Jsb2NrICsgMSkpIHsKLSAgICAgICAgaW52ZXJ0ID0gIWludmVy
dDsKLSAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKLSAgICAgICAgdGFrZW4gPSBub3RU
YWtlbjsKLSAgICAgICAgbm90VGFrZW4gPSB0bXA7Ci0gICAgfQotICAgIAotICAgIEpTVmFsdWVP
cGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYXJn
Mih0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEuZ3ByKCk7
Ci0gICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwotICAgIAotICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7Ci0gICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAg
ICAKLSAgICBhcmcxLnVzZSgpOwotICAgIGFyZzIudXNlKCk7Ci0gICAgCi0gICAgaWYgKGlzS25v
d25DZWxsKG5vZGUuY2hpbGQxKCkpICYmIGlzS25vd25DZWxsKG5vZGUuY2hpbGQyKCkpKSB7Ci0g
ICAgICAgIC8vIHNlZSBpZiB3ZSBnZXQgbHVja3k6IGlmIHRoZSBhcmd1bWVudHMgYXJlIGNlbGxz
IGFuZCB0aGV5IHJlZmVyZW5jZSB0aGUgc2FtZQotICAgICAgICAvLyBjZWxsLCB0aGVuIHRoZXkg
bXVzdCBiZSBzdHJpY3RseSBlcXVhbC4KLSAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0
cihKSVRDb21waWxlcjo6RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIpLCBpbnZlcnQgPyBub3RUYWtl
biA6IHRha2VuKTsKLSAgICAgICAgCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJl
c3VsdEdQUik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
Q2VsbCwgcmVzdWx0R1BSLCBhcmcxR1BSLCBhcmcyR1BSKTsKLSAgICAgICAgc2lsZW50RmlsbEFs
bFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAgICAgYWRkQnJhbmNoKG1faml0
LmJyYW5jaFRlc3QzMihpbnZlcnQgPyBKSVRDb21waWxlcjo6Tm9uWmVybyA6IEpJVENvbXBpbGVy
OjpaZXJvLCByZXN1bHRHUFIpLCB0YWtlbik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9qaXQu
b3JQdHIoYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIHR3b0NlbGxzQ2FzZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29t
cGlsZXI6Olplcm8sIHJlc3VsdEdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKLSAgICAg
ICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG51bWJlckNhc2UgPSBtX2ppdC5icmFuY2hU
ZXN0UHRyKEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHRHUFIsIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3Rlcik7Ci0gICAgICAgIAotICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNo
MzIoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Ok5vdEVxdWFsIDogSklUQ29tcGlsZXI6OkVxdWFsLCBh
cmcxR1BSLCBhcmcyR1BSKSwgdGFrZW4pOwotICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgp
LCBub3RUYWtlbik7Ci0gICAgICAgIAotICAgICAgICB0d29DZWxsc0Nhc2UubGluaygmbV9qaXQp
OwotICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwg
YXJnMUdQUiwgYXJnMkdQUiksIGludmVydCA/IG5vdFRha2VuIDogdGFrZW4pOwotICAgICAgICAK
LSAgICAgICAgbnVtYmVyQ2FzZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIAotICAgICAgICBzaWxl
bnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVzdWx0R1BSLCBhcmcxR1BSLCBhcmcyR1BSKTsKLSAg
ICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAg
ICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3QzMihpbnZlcnQgPyBKSVRDb21waWxlcjo6WmVy
byA6IEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1bHRHUFIpLCB0YWtlbik7Ci0gICAgfQotICAg
IAotICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQotICAgICAgICBhZGRCcmFuY2go
bV9qaXQuanVtcCgpLCBub3RUYWtlbik7Ci19Ci0KLXZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9u
U3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0cmljdEVxKE5vZGUmIG5vZGUsIGJvb2wgaW52ZXJ0KQot
ewotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgSlNW
YWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICBHUFJSZWcgYXJnMUdQ
UiA9IGFyZzEuZ3ByKCk7Ci0gICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwotICAgIAot
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKLSAgICAKLSAgICBhcmcxLnVzZSgpOwotICAgIGFyZzIudXNlKCk7Ci0gICAg
Ci0gICAgaWYgKGlzS25vd25DZWxsKG5vZGUuY2hpbGQxKCkpICYmIGlzS25vd25DZWxsKG5vZGUu
Y2hpbGQyKCkpKSB7Ci0gICAgICAgIC8vIHNlZSBpZiB3ZSBnZXQgbHVja3k6IGlmIHRoZSBhcmd1
bWVudHMgYXJlIGNlbGxzIGFuZCB0aGV5IHJlZmVyZW5jZSB0aGUgc2FtZQotICAgICAgICAvLyBj
ZWxsLCB0aGVuIHRoZXkgbXVzdCBiZSBzdHJpY3RseSBlcXVhbC4KLSAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgbm90RXF1YWxDYXNlID0gbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RF
cXVhbCwgYXJnMUdQUiwgYXJnMkdQUik7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5tb3ZlKEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oIWludmVy
dCkpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRv
bmUgPSBtX2ppdC5qdW1wKCk7Ci0KLSAgICAgICAgbm90RXF1YWxDYXNlLmxpbmsoJm1faml0KTsK
LSAgICAgICAgCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbCwgcmVzdWx0
R1BSLCBhcmcxR1BSLCBhcmcyR1BSKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhy
ZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQuYW5kUHRyKEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0Lm9yMzIoSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAg
ICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1faml0Lm9yUHRy
KGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCB0d29DZWxsc0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVy
OjpaZXJvLCByZXN1bHRHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7Ci0gICAgICAgIAot
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBudW1iZXJDYXNlID0gbV9qaXQuYnJhbmNoVGVzdFB0
cihKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0R1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQuY29tcGFyZTMyKGludmVydCA/IEpJ
VENvbXBpbGVyOjpOb3RFcXVhbCA6IEpJVENvbXBpbGVyOjpFcXVhbCwgYXJnMUdQUiwgYXJnMkdQ
UiwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUx
ID0gbV9qaXQuanVtcCgpOwotICAgICAgICAKLSAgICAgICAgdHdvQ2VsbHNDYXNlLmxpbmsoJm1f
aml0KTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90RXF1YWxDYXNlID0gbV9qaXQuYnJh
bmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUik7Ci0gICAgICAg
IAotICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oIWludmVydCkpKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUyID0gbV9qaXQuanVtcCgpOwotICAgICAgICAKLSAg
ICAgICAgbnVtYmVyQ2FzZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIG5vdEVxdWFsQ2FzZS5saW5r
KCZtX2ppdCk7Ci0gICAgICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1
bHRHUFIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwg
cmVzdWx0R1BSLCBhcmcxR1BSLCBhcmcyR1BSKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lz
dGVycyhyZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQuYW5kUHRyKEpJVENvbXBp
bGVyOjpUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7Ci0KLSAgICAgICAgZG9uZTEubGluaygm
bV9qaXQpOwotCi0gICAgICAgIG1faml0Lm9yMzIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIGRvbmUyLmxpbmsoJm1f
aml0KTsKLSAgICB9Ci0gICAgCi0gICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGls
ZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkp
OwotfQotCi12b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5vZGUpCi17Ci0g
ICAgUF9ERkdPcGVyYXRpb25fRSBzbG93Q2FsbEZ1bmN0aW9uOwotCi0gICAgaWYgKG5vZGUub3Ag
PT0gQ2FsbCkKLSAgICAgICAgc2xvd0NhbGxGdW5jdGlvbiA9IG9wZXJhdGlvbkxpbmtDYWxsOwot
ICAgIGVsc2UgewotICAgICAgICBBU1NFUlQobm9kZS5vcCA9PSBDb25zdHJ1Y3QpOwotICAgICAg
ICBzbG93Q2FsbEZ1bmN0aW9uID0gb3BlcmF0aW9uTGlua0NvbnN0cnVjdDsKLSAgICB9Ci0KLSAg
ICAvLyBGb3IgY29uc3RydWN0b3JzLCB0aGUgdGhpcyBhcmd1bWVudCBpcyBub3QgcGFzc2VkIGJ1
dCB3ZSBoYXZlIHRvIG1ha2Ugc3BhY2UKLSAgICAvLyBmb3IgaXQuCi0gICAgaW50IGR1bW15VGhp
c0FyZ3VtZW50ID0gbm9kZS5vcCA9PSBDYWxsID8gMCA6IDE7Ci0gICAgCi0gICAgQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBjYWxsVHlwZSA9IG5vZGUub3AgPT0gQ2FsbCA/IENhbGxMaW5rSW5mbzo6
Q2FsbCA6IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0OwotICAgIAotICAgIE5vZGVJbmRleCBjYWxs
ZWVOb2RlSW5kZXggPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENo
aWxkKCldOwotICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVOb2RlSW5kZXgp
OwotICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7Ci0gICAgdXNlKGNhbGxlZU5v
ZGVJbmRleCk7Ci0gICAgCi0gICAgLy8gdGhlIGNhbGwgaW5zdHJ1Y3Rpb24ncyBmaXJzdCBjaGls
ZCBpcyBlaXRoZXIgdGhlIGZ1bmN0aW9uIChub3JtYWwgY2FsbCkgb3IgdGhlCi0gICAgLy8gcmVj
ZWl2ZXIgKG1ldGhvZCBjYWxsKS4gc3Vic2VxdWVudCBjaGlsZHJlbiBhcmUgdGhlIGFyZ3VtZW50
cy4KLSAgICBpbnQgbnVtQXJncyA9IG5vZGUubnVtQ2hpbGRyZW4oKSAtIDE7Ci0gICAgCi0gICAg
aW50IG51bVBhc3NlZEFyZ3MgPSBudW1BcmdzICsgZHVtbXlUaGlzQXJndW1lbnQ7Ci0gICAgCi0g
ICAgLy8gYW1vdW50IG9mIHN0dWZmIChpbiB1bml0cyBvZiBzaXplb2YoUmVnaXN0ZXIpKSB0aGF0
IHdlIG5lZWQgdG8gcGxhY2UgYXQgdGhlCi0gICAgLy8gdG9wIG9mIHRoZSBKUyBzdGFjay4KLSAg
ICBpbnQgY2FsbERhdGFTaXplID0gMDsKLQotICAgIC8vIGZpcnN0IHRoZXJlIGFyZSB0aGUgYXJn
dW1lbnRzCi0gICAgY2FsbERhdGFTaXplICs9IG51bVBhc3NlZEFyZ3M7Ci0gICAgCi0gICAgLy8g
YW5kIHRoZW4gdGhlcmUgaXMgdGhlIGNhbGwgZnJhbWUgaGVhZGVyCi0gICAgY2FsbERhdGFTaXpl
ICs9IFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICAKLSAgICBtX2ppdC5z
dG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIobnVtUGFzc2VkQXJncykpKSwgYWRkcmVzc09mQ2FsbERhdGEoUmVnaXN0ZXJGaWxlOjpB
cmd1bWVudENvdW50KSk7Ci0gICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIGFkZHJlc3NPZkNhbGxEYXRhKFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUpKTsKLSAg
ICAKLSAgICBmb3IgKGludCBhcmdJZHggPSAwOyBhcmdJZHggPCBudW1BcmdzOyBhcmdJZHgrKykg
ewotICAgICAgICBOb2RlSW5kZXggYXJnTm9kZUluZGV4ID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFy
Z0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpICsgMSArIGFyZ0lkeF07Ci0gICAgICAgIEpTVmFs
dWVPcGVyYW5kIGFyZyh0aGlzLCBhcmdOb2RlSW5kZXgpOwotICAgICAgICBHUFJSZWcgYXJnR1BS
ID0gYXJnLmdwcigpOwotICAgICAgICB1c2UoYXJnTm9kZUluZGV4KTsKLSAgICAgICAgCi0gICAg
ICAgIG1faml0LnN0b3JlUHRyKGFyZ0dQUiwgYWRkcmVzc09mQ2FsbERhdGEoLWNhbGxEYXRhU2l6
ZSArIGFyZ0lkeCArIGR1bW15VGhpc0FyZ3VtZW50KSk7Ci0gICAgfQotICAgIAotICAgIG1faml0
LnN0b3JlUHRyKGNhbGxlZUdQUiwgYWRkcmVzc09mQ2FsbERhdGEoUmVnaXN0ZXJGaWxlOjpDYWxs
ZWUpKTsKLSAgICAKLSAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgIAotICAgIEdQUlJlc3VsdCBy
ZXN1bHQodGhpcyk7Ci0gICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLQotICAg
IEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICBKSVRDb21waWxl
cjo6SnVtcCBzbG93UGF0aDsKLSAgICAKLSAgICBzbG93UGF0aCA9IG1faml0LmJyYW5jaFB0cldp
dGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9DaGVj
aywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
KSkpKTsKLSAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNhbGxlZUdQ
UiwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGVDaGFpbikpLCByZXN1bHRHUFIp
OwotICAgIG1faml0LnN0b3JlUHRyKHJlc3VsdEdQUiwgYWRkcmVzc09mQ2FsbERhdGEoUmVnaXN0
ZXJGaWxlOjpTY29wZUNoYWluKSk7Ci0KLSAgICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29k
ZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBmYXN0
Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7Ci0gICAgbV9qaXQubm90aWZ5Q2FsbChmYXN0Q2FsbCwg
YXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pOwotICAgIAotICAgIEpJVENvbXBpbGVyOjpK
dW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgCi0gICAgc2xvd1BhdGgubGluaygmbV9qaXQp
OwotICAgIAotICAgIG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1D
YWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgc2xv
d0NhbGwgPSBtX2ppdC5hZGRGYXN0RXhjZXB0aW9uQ2hlY2sobV9qaXQuYXBwZW5kQ2FsbChzbG93
Q2FsbEZ1bmN0aW9uKSwgYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pOwotICAgIG1faml0
LmFkZFB0cihJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIG1faml0
Lm5vdGlmeUNhbGwobV9qaXQuY2FsbChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIGF0KG1fY29t
cGlsZUluZGV4KS5jb2RlT3JpZ2luKTsKLSAgICAKLSAgICBkb25lLmxpbmsoJm1faml0KTsKLSAg
ICAKLSAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwot
ICAgIAotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZv
cm1hdEpTLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwotICAgIAotICAgIG1faml0LmFk
ZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGNhbGxUeXBlLCBhdCht
X2NvbXBpbGVJbmRleCkuY29kZU9yaWdpbik7Ci19Ci0KLSNlbmRpZgotCi19IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCi0KLSNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxMDAyMzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDc1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJERkdKSVRDb2RlR2Vu
ZXJhdG9yLmgiCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotI2luY2x1ZGUgIkRGR0pJVENvbXBp
bGVySW5saW5lTWV0aG9kcy5oIgotI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCi0jaW5j
bHVkZSAiTGlua0J1ZmZlci5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0K
LWNvbnN0IGRvdWJsZSBKSVRDb2RlR2VuZXJhdG9yOjp0d29Ub1RoZTMyID0gKGRvdWJsZSkweDEw
MDAwMDAwMHVsbDsKLQotdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpjbGVhckdlbmVyYXRpb25JbmZv
KCkKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9nZW5lcmF0aW9uSW5mby5zaXpl
KCk7ICsraSkKLSAgICAgICAgbV9nZW5lcmF0aW9uSW5mb1tpXSA9IEdlbmVyYXRpb25JbmZvKCk7
Ci0gICAgbV9ncHJzID0gUmVnaXN0ZXJCYW5rPEdQUkluZm8+KCk7Ci0gICAgbV9mcHJzID0gUmVn
aXN0ZXJCYW5rPEZQUkluZm8+KCk7Ci19Ci0KLUdQUlJlZyBKSVRDb2RlR2VuZXJhdG9yOjpmaWxs
U3RvcmFnZShOb2RlSW5kZXggbm9kZUluZGV4KQotewotICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5n
cmFwaCgpW25vZGVJbmRleF07Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9
IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dl
bmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0gICAgCi0gICAgc3dpdGNoIChpbmZvLnJl
Z2lzdGVyRm9ybWF0KCkpIHsKLSAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7Ci0gICAgICAgIEdQ
UlJlZyBncHIgPSBhbGxvY2F0ZSgpOwotICAgICAgICBBU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgp
ID09IERhdGFGb3JtYXRTdG9yYWdlKTsKLSAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1
YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7Ci0gICAgICAgIGlu
Zm8uZmlsbFN0b3JhZ2UoZ3ByKTsKLSAgICAgICAgcmV0dXJuIGdwcjsKLSAgICB9Ci0gICAgICAg
IAotICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6IHsKLSAgICAgICAgR1BSUmVnIGdwciA9IGlu
Zm8uZ3ByKCk7Ci0gICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7Ci0gICAgICAgIHJldHVybiBncHI7
Ci0gICAgfQotICAgICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIEludmFsaWRHUFJSZWc7Ci19Ci0KLXZvaWQg
SklUQ29kZUdlbmVyYXRvcjo6dXNlQ2hpbGRyZW4oTm9kZSYgbm9kZSkKLXsKLSAgICBpZiAobm9k
ZS5vcCAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHgg
PSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUu
bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKLSAgICAgICAgICAgIHVzZShtX2ppdC5ncmFwaCgp
Lm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKLSAgICB9IGVsc2UgewotICAgICAgICBOb2Rl
SW5kZXggY2hpbGQxID0gbm9kZS5jaGlsZDEoKTsKLSAgICAgICAgaWYgKGNoaWxkMSA9PSBOb05v
ZGUpIHsKLSAgICAgICAgICAgIEFTU0VSVChub2RlLmNoaWxkMigpID09IE5vTm9kZSAmJiBub2Rl
LmNoaWxkMygpID09IE5vTm9kZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgdXNlKGNoaWxkMSk7Ci0gICAgICAgIAotICAgICAgICBOb2RlSW5kZXggY2hpbGQyID0g
bm9kZS5jaGlsZDIoKTsKLSAgICAgICAgaWYgKGNoaWxkMiA9PSBOb05vZGUpIHsKLSAgICAgICAg
ICAgIEFTU0VSVChub2RlLmNoaWxkMygpID09IE5vTm9kZSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgdXNlKGNoaWxkMik7Ci0gICAgICAgIAotICAgICAgICBOb2Rl
SW5kZXggY2hpbGQzID0gbm9kZS5jaGlsZDMoKTsKLSAgICAgICAgaWYgKGNoaWxkMyA9PSBOb05v
ZGUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHVzZShjaGlsZDMpOwotICAgIH0KLX0K
LQotYm9vbCBKSVRDb2RlR2VuZXJhdG9yOjppc1N0cmljdEludDMyKE5vZGVJbmRleCBub2RlSW5k
ZXgpCi17Ci0gICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAKLSAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhd
OwotICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tub2RlLnZpcnR1
YWxSZWdpc3RlcigpXTsKLSAgICAKLSAgICByZXR1cm4gaW5mby5yZWdpc3RlckZvcm1hdCgpID09
IERhdGFGb3JtYXRJbnRlZ2VyOwotfQotCi1ib29sIEpJVENvZGVHZW5lcmF0b3I6OmlzS25vd25J
bnRlZ2VyKE5vZGVJbmRleCBub2RlSW5kZXgpCi17Ci0gICAgaWYgKGlzSW50MzJDb25zdGFudChu
b2RlSW5kZXgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIE5vZGUmIG5vZGUgPSBtX2pp
dC5ncmFwaCgpW25vZGVJbmRleF07Ci0gICAgCi0gICAgaWYgKG5vZGUuaGFzSW50MzJSZXN1bHQo
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgR2VuZXJhdGlvbkluZm8mIGluZm8g
PSBtX2dlbmVyYXRpb25JbmZvW25vZGUudmlydHVhbFJlZ2lzdGVyKCldOwotCi0gICAgcmV0dXJu
IGluZm8uaXNKU0ludGVnZXIoKTsKLX0KLQotYm9vbCBKSVRDb2RlR2VuZXJhdG9yOjppc0tub3du
TnVtZXJpYyhOb2RlSW5kZXggbm9kZUluZGV4KQotewotICAgIGlmIChpc0ludDMyQ29uc3RhbnQo
bm9kZUluZGV4KSB8fCBpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKLSAg
ICAKLSAgICBpZiAobm9kZS5oYXNOdW1iZXJSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgCi0gICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW25vZGUu
dmlydHVhbFJlZ2lzdGVyKCldOwotCi0gICAgcmV0dXJuIGluZm8uaXNKU0ludGVnZXIoKSB8fCBp
bmZvLmlzSlNEb3VibGUoKTsKLX0KLQotYm9vbCBKSVRDb2RlR2VuZXJhdG9yOjppc0tub3duQ2Vs
bChOb2RlSW5kZXggbm9kZUluZGV4KQotewotICAgIHJldHVybiBtX2dlbmVyYXRpb25JbmZvW21f
aml0LmdyYXBoKClbbm9kZUluZGV4XS52aXJ0dWFsUmVnaXN0ZXIoKV0uaXNKU0NlbGwoKTsKLX0K
LQotYm9vbCBKSVRDb2RlR2VuZXJhdG9yOjppc0tub3duTm90Q2VsbChOb2RlSW5kZXggbm9kZUlu
ZGV4KQotewotICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7
Ci0gICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdp
c3Rlcl07Ci0gICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSAmJiAhdmFsdWVPZkpTQ29uc3RhbnQo
bm9kZUluZGV4KS5pc0NlbGwoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuICEo
aW5mby5pc0pTQ2VsbCgpIHx8IGluZm8uaXNVbmtub3duSlMoKSk7Ci19Ci0KLWJvb2wgSklUQ29k
ZUdlbmVyYXRvcjo6aXNLbm93bk5vdEludGVnZXIoTm9kZUluZGV4IG5vZGVJbmRleCkKLXsKLSAg
ICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOwotICAgIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOwotICAgIEdlbmVy
YXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwotICAg
IAotICAgIHJldHVybiBpbmZvLmlzSlNEb3VibGUoKSB8fCBpbmZvLmlzSlNDZWxsKCkgfHwgaW5m
by5pc0pTQm9vbGVhbigpCi0gICAgICAgIHx8IChub2RlLmhhc0NvbnN0YW50KCkgJiYgIXZhbHVl
T2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuaXNJbnQzMigpKTsKLX0KLQotYm9vbCBKSVRDb2RlR2Vu
ZXJhdG9yOjppc0tub3duTm90TnVtYmVyKE5vZGVJbmRleCBub2RlSW5kZXgpCi17Ci0gICAgTm9k
ZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICBHZW5lcmF0aW9u
SW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKLSAgICAKLSAg
ICByZXR1cm4gKCFpbmZvLmlzSlNEb3VibGUoKSAmJiAhaW5mby5pc0pTSW50ZWdlcigpICYmICFp
bmZvLmlzVW5rbm93bkpTKCkpCi0gICAgICAgIHx8IChub2RlLmhhc0NvbnN0YW50KCkgJiYgIWlz
TnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSk7Ci19Ci0KLWJvb2wgSklUQ29kZUdlbmVyYXRvcjo6
aXNLbm93bkJvb2xlYW4oTm9kZUluZGV4IG5vZGVJbmRleCkKLXsKLSAgICBOb2RlJiBub2RlID0g
bV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOwotICAgIGlmIChub2RlLmhhc0Jvb2xlYW5SZXN1bHQo
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgaWYgKGlzQm9vbGVhbkNvbnN0YW50
KG5vZGVJbmRleCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOwotICAgIEdlbmVy
YXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwotICAg
IAotICAgIHJldHVybiBpbmZvLmlzSlNCb29sZWFuKCk7Ci19Ci0KLXZvaWQgSklUQ29kZUdlbmVy
YXRvcjo6d3JpdGVCYXJyaWVyKE1hY3JvQXNzZW1ibGVyJiBqaXQsIEdQUlJlZyBvd25lciwgR1BS
UmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2lu
ZCkKLXsKLSAgICBVTlVTRURfUEFSQU0oaml0KTsKLSAgICBVTlVTRURfUEFSQU0ob3duZXIpOwot
ICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMSk7Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gyKTsK
LSAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7Ci0gICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gx
KTsKLSAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaDIpOwotICAgIEFTU0VSVChzY3JhdGNoMSAh
PSBzY3JhdGNoMik7Ci0KLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAg
SklUQ29tcGlsZXI6OmVtaXRDb3VudChqaXQsIFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRDb3Vu
dGVyRm9yKHVzZUtpbmQpKTsKLSNlbmRpZgotICAgIG1hcmtDZWxsQ2FyZChqaXQsIG93bmVyLCBz
Y3JhdGNoMSwgc2NyYXRjaDIpOwotfQotCi12b2lkIEpJVENvZGVHZW5lcmF0b3I6Om1hcmtDZWxs
Q2FyZChNYWNyb0Fzc2VtYmxlciYgaml0LCBHUFJSZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNoMSwg
R1BSUmVnIHNjcmF0Y2gyKQotewotICAgIFVOVVNFRF9QQVJBTShqaXQpOwotICAgIFVOVVNFRF9Q
QVJBTShvd25lcik7Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gxKTsKLSAgICBVTlVTRURfUEFS
QU0oc2NyYXRjaDIpOwotICAgIAotI2lmIEVOQUJMRShHR0MpCi0gICAgaml0Lm1vdmUob3duZXIs
IHNjcmF0Y2gxKTsKLSAgICBqaXQuYW5kUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQz
Ml90PihNYXJrZWRCbG9jazo6YmxvY2tNYXNrKSksIHNjcmF0Y2gxKTsKLSAgICBqaXQubW92ZShv
d25lciwgc2NyYXRjaDIpOwotICAgIC8vIGNvbnN1bWUgYWRkaXRpb25hbCA4IGJpdHMgYXMgd2Un
cmUgdXNpbmcgYW4gYXBwcm94aW1hdGUgZmlsdGVyCi0gICAgaml0LnJzaGlmdDMyKFRydXN0ZWRJ
bW0zMihNYXJrZWRCbG9jazo6YXRvbVNoaWZ0ICsgOCksIHNjcmF0Y2gyKTsKLSAgICBqaXQuYW5k
UHRyKFRydXN0ZWRJbW0zMihNYXJrZWRCbG9jazo6YXRvbU1hc2sgPj4gOCksIHNjcmF0Y2gyKTsK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmaWx0ZXIgPSBqaXQuYnJhbmNoVGVzdDgoTWFjcm9B
c3NlbWJsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaDEsIHNjcmF0
Y2gyLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZk1hcmtz
KCkpKTsKLSAgICBqaXQubW92ZShvd25lciwgc2NyYXRjaDIpOwotICAgIGppdC5yc2hpZnQzMihU
cnVzdGVkSW1tMzIoTWFya2VkQmxvY2s6OmNhcmRTaGlmdCksIHNjcmF0Y2gyKTsKLSAgICBqaXQu
YW5kUHRyKFRydXN0ZWRJbW0zMihNYXJrZWRCbG9jazo6Y2FyZE1hc2spLCBzY3JhdGNoMik7Ci0g
ICAgaml0LnN0b3JlOChUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c2NyYXRjaDEsIHNjcmF0Y2gyLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUsIE1hcmtlZEJsb2Nr
OjpvZmZzZXRPZkNhcmRzKCkpKTsKLSAgICBmaWx0ZXIubGluaygmaml0KTsKLSNlbmRpZgotfQot
Ci12b2lkIEpJVENvZGVHZW5lcmF0b3I6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQ
UlJlZyB2YWx1ZUdQUiwgTm9kZUluZGV4IHZhbHVlSW5kZXgsIFdyaXRlQmFycmllclVzZUtpbmQg
dXNlS2luZCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKG93bmVyR1BSKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWVHUFIpOwotICAgIFVOVVNF
RF9QQVJBTShzY3JhdGNoMSk7Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gyKTsKLSAgICBVTlVT
RURfUEFSQU0odXNlS2luZCk7Ci0KLSAgICBpZiAoaXNLbm93bk5vdENlbGwodmFsdWVJbmRleCkp
Ci0gICAgICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykK
LSAgICBKSVRDb21waWxlcjo6ZW1pdENvdW50KG1faml0LCBXcml0ZUJhcnJpZXJDb3VudGVyczo6
aml0Q291bnRlckZvcih1c2VLaW5kKSk7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShHR0MpCi0gICAg
R1BSVGVtcG9yYXJ5IHRlbXAxOwotICAgIEdQUlRlbXBvcmFyeSB0ZW1wMjsKLSAgICBpZiAoc2Ny
YXRjaDEgPT0gSW52YWxpZEdQUlJlZykgewotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaEdQ
Uih0aGlzKTsKLSAgICAgICAgdGVtcDEuYWRvcHQoc2NyYXRjaEdQUik7Ci0gICAgICAgIHNjcmF0
Y2gxID0gdGVtcDEuZ3ByKCk7Ci0gICAgfQotICAgIGlmIChzY3JhdGNoMiA9PSBJbnZhbGlkR1BS
UmVnKSB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoR1BSKHRoaXMpOwotICAgICAgICB0
ZW1wMi5hZG9wdChzY3JhdGNoR1BSKTsKLSAgICAgICAgc2NyYXRjaDIgPSB0ZW1wMi5ncHIoKTsK
LSAgICB9Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgcmhzTm90Q2VsbDsKLSAgICBib29s
IGhhZENlbGxDaGVjayA9IGZhbHNlOwotICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVJbmRleCkg
JiYgIWlzQ2VsbFByZWRpY3Rpb24obV9qaXQuZ2V0UHJlZGljdGlvbih2YWx1ZUluZGV4KSkpIHsK
LSAgICAgICAgaGFkQ2VsbENoZWNrID0gdHJ1ZTsKLSAgICAgICAgcmhzTm90Q2VsbCA9IG1faml0
LmJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7Ci0gICAgfQotCi0gICAgbWFya0NlbGxDYXJkKG1f
aml0LCBvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKLQotICAgIGlmIChoYWRDZWxsQ2hl
Y2spCi0gICAgICAgIHJoc05vdENlbGwubGluaygmbV9qaXQpOwotI2VuZGlmCi19Ci0KLXZvaWQg
SklUQ29kZUdlbmVyYXRvcjo6d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgSlNDZWxsKiB2
YWx1ZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJl
ZyBzY3JhdGNoMikKLXsKLSAgICBVTlVTRURfUEFSQU0ob3duZXJHUFIpOwotICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gxKTsKLSAgICBVTlVTRURfUEFS
QU0oc2NyYXRjaDIpOwotICAgIFVOVVNFRF9QQVJBTSh1c2VLaW5kKTsKLSAgICAKLSAgICBpZiAo
SGVhcDo6aXNNYXJrZWQodmFsdWUpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFCTEUoV1JJ
VEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgSklUQ29tcGlsZXI6OmVtaXRDb3VudChtX2ppdCwg
V3JpdGVCYXJyaWVyQ291bnRlcnM6OmppdENvdW50ZXJGb3IodXNlS2luZCkpOwotI2VuZGlmCi0K
LSNpZiBFTkFCTEUoR0dDKQotICAgIEdQUlRlbXBvcmFyeSB0ZW1wMTsKLSAgICBHUFJUZW1wb3Jh
cnkgdGVtcDI7Ci0gICAgaWYgKHNjcmF0Y2gxID09IEludmFsaWRHUFJSZWcpIHsKLSAgICAgICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2hHUFIodGhpcyk7Ci0gICAgICAgIHRlbXAxLmFkb3B0KHNjcmF0
Y2hHUFIpOwotICAgICAgICBzY3JhdGNoMSA9IHRlbXAxLmdwcigpOwotICAgIH0KLSAgICBpZiAo
c2NyYXRjaDIgPT0gSW52YWxpZEdQUlJlZykgewotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aEdQUih0aGlzKTsKLSAgICAgICAgdGVtcDIuYWRvcHQoc2NyYXRjaEdQUik7Ci0gICAgICAgIHNj
cmF0Y2gyID0gdGVtcDIuZ3ByKCk7Ci0gICAgfQotCi0gICAgbWFya0NlbGxDYXJkKG1faml0LCBv
d25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKLSNlbmRpZgotfQotCi12b2lkIEpJVENvZGVH
ZW5lcmF0b3I6OndyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBHUFJSZWcgdmFsdWVHUFIsIE5v
ZGVJbmRleCB2YWx1ZUluZGV4LCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQsIEdQUlJlZyBz
Y3JhdGNoKQotewotICAgIFVOVVNFRF9QQVJBTShvd25lcik7Ci0gICAgVU5VU0VEX1BBUkFNKHZh
bHVlR1BSKTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaCk7Ci0gICAgVU5VU0VEX1BBUkFNKHVz
ZUtpbmQpOwotCi0gICAgaWYgKGlzS25vd25Ob3RDZWxsKHZhbHVlSW5kZXgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgSklUQ29t
cGlsZXI6OmVtaXRDb3VudChtX2ppdCwgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmppdENvdW50ZXJG
b3IodXNlS2luZCkpOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoR0dDKQotICAgIEpJVENvbXBpbGVy
OjpKdW1wIHJoc05vdENlbGw7Ci0gICAgYm9vbCBoYWRDZWxsQ2hlY2sgPSBmYWxzZTsKLSAgICBp
ZiAoIWlzS25vd25DZWxsKHZhbHVlSW5kZXgpICYmICFpc0NlbGxQcmVkaWN0aW9uKG1faml0Lmdl
dFByZWRpY3Rpb24odmFsdWVJbmRleCkpKSB7Ci0gICAgICAgIGhhZENlbGxDaGVjayA9IHRydWU7
Ci0gICAgICAgIHJoc05vdENlbGwgPSBtX2ppdC5icmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOwot
ICAgIH0KLSAgICAKLSAgICBHUFJUZW1wb3JhcnkgdGVtcDsKLSAgICBpZiAoc2NyYXRjaCA9PSBJ
bnZhbGlkR1BSUmVnKSB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoR1BSKHRoaXMpOwot
ICAgICAgICB0ZW1wLmFkb3B0KHNjcmF0Y2hHUFIpOwotICAgICAgICBzY3JhdGNoID0gdGVtcC5n
cHIoKTsKLSAgICB9Ci0KLSAgICB1aW50OF90KiBjYXJkQWRkcmVzcyA9IEhlYXA6OmFkZHJlc3NP
ZkNhcmRGb3Iob3duZXIpOwotICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1Q
dHIoY2FyZEFkZHJlc3MpLCBzY3JhdGNoKTsKLSAgICBtX2ppdC5zdG9yZTgoSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW0zMigxKSwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaCkpOwotCi0gICAg
aWYgKGhhZENlbGxDaGVjaykKLSAgICAgICAgcmhzTm90Q2VsbC5saW5rKCZtX2ppdCk7Ci0jZW5k
aWYKLX0KLQotYm9vbCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZUNvbXBhcmUoTm9k
ZSYgbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgU19ERkdP
cGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQotewotICAgIE5vZGVJbmRleCBicmFuY2hOb2Rl
SW5kZXggPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwotICAgIGlmIChicmFuY2hOb2RlSW5kZXgg
IT0gTm9Ob2RlKSB7Ci0gICAgICAgIEFTU0VSVChub2RlLmFkanVzdGVkUmVmQ291bnQoKSA9PSAx
KTsKLSAgICAgICAgCi0gICAgICAgIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gobm9kZSwg
YnJhbmNoTm9kZUluZGV4LCBjb25kLCBoZWxwZXJGdW5jdGlvbik7Ci0gICAgCi0gICAgICAgIG1f
Y29tcGlsZUluZGV4ID0gYnJhbmNoTm9kZUluZGV4OwotICAgICAgICAKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIAotICAgIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJl
KG5vZGUsIGNvbmQsIGhlbHBlckZ1bmN0aW9uKTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVTdHJpY3RFcShOb2RlJiBu
b2RlLCBib29sIGludmVydCkKLXsKLSAgICBpZiAoIWludmVydCAmJiAoaXNLbm93bk51bWVyaWMo
bm9kZS5jaGlsZDEoKSkgfHwgaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDIoKSkpKQotICAgICAg
ICByZXR1cm4gbm9uU3BlY3VsYXRpdmVDb21wYXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxKTsKLSAgICAKLSAgICBOb2RlSW5kZXggYnJhbmNo
Tm9kZUluZGV4ID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKLSAgICBpZiAoYnJhbmNoTm9kZUlu
ZGV4ICE9IE5vTm9kZSkgewotICAgICAgICBBU1NFUlQobm9kZS5hZGp1c3RlZFJlZkNvdW50KCkg
PT0gMSk7Ci0gICAgICAgIAotICAgICAgICBub25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEo
bm9kZSwgYnJhbmNoTm9kZUluZGV4LCBpbnZlcnQpOwotICAgIAotICAgICAgICBtX2NvbXBpbGVJ
bmRleCA9IGJyYW5jaE5vZGVJbmRleDsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICAKLSAgICBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlU3RyaWN0RXEobm9kZSwg
aW52ZXJ0KTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi1z
dGF0aWMgY29uc3QgY2hhciogZGF0YUZvcm1hdFN0cmluZyhEYXRhRm9ybWF0IGZvcm1hdCkKLXsK
LSAgICAvLyBUaGVzZSB2YWx1ZXMgY29ycmVzcG9uZCB0byB0aGUgRGF0YUZvcm1hdCBlbnVtLgot
ICAgIGNvbnN0IGNoYXIqIHN0cmluZ3NbXSA9IHsKLSAgICAgICAgIlsgIF0iLAotICAgICAgICAi
WyBpXSIsCi0gICAgICAgICJbIGRdIiwKLSAgICAgICAgIlsgY10iLAotICAgICAgICAiRXJyISIs
Ci0gICAgICAgICJFcnIhIiwKLSAgICAgICAgIkVyciEiLAotICAgICAgICAiRXJyISIsCi0gICAg
ICAgICJbSiBdIiwKLSAgICAgICAgIltKaV0iLAotICAgICAgICAiW0pkXSIsCi0gICAgICAgICJb
SmNdIiwKLSAgICAgICAgIkVyciEiLAotICAgICAgICAiRXJyISIsCi0gICAgICAgICJFcnIhIiwK
LSAgICAgICAgIkVyciEiLAotICAgIH07Ci0gICAgcmV0dXJuIHN0cmluZ3NbZm9ybWF0XTsKLX0K
LQotdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpkdW1wKGNvbnN0IGNoYXIqIGxhYmVsKQotewotICAg
IGlmIChsYWJlbCkKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICI8JXM+XG4iLCBsYWJlbCk7Ci0K
LSAgICBmcHJpbnRmKHN0ZGVyciwgIiAgZ3ByczpcbiIpOwotICAgIG1fZ3Bycy5kdW1wKCk7Ci0g
ICAgZnByaW50ZihzdGRlcnIsICIgIGZwcnM6XG4iKTsKLSAgICBtX2ZwcnMuZHVtcCgpOwotICAg
IGZwcmludGYoc3RkZXJyLCAiICBWaXJ0dWFsUmVnaXN0ZXJzOlxuIik7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fZ2VuZXJhdGlvbkluZm8uc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
R2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW2ldOwotICAgICAgICBpZiAo
aW5mby5hbGl2ZSgpKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICAgJSAzZDolcyVz
IiwgaSwgZGF0YUZvcm1hdFN0cmluZyhpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpLCBkYXRhRm9ybWF0
U3RyaW5nKGluZm8uc3BpbGxGb3JtYXQoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiAgICAlIDNkOltfX11bX19dIiwgaSk7Ci0gICAgICAgIGlmIChpbmZv
LnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkKLSAgICAgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiOmZwciVkXG4iLCBpbmZvLmZwcigpKTsKLSAgICAgICAgZWxzZSBpZiAoaW5m
by5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXROb25lCi0jaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICAgICAgICAgICYmICEoaW5mby5yZWdpc3RlckZvcm1hdCgpICYgRGF0YUZvcm1hdEpT
KQotI2VuZGlmCi0gICAgICAgICAgICApIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigp
ICE9IEludmFsaWRHUFJSZWcpOwotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICI6JXNcbiIs
IEdQUkluZm86OmRlYnVnTmFtZShpbmZvLmdwcigpKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwotICAgIH0KLSAgICBpZiAobGFiZWwpCi0gICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiPC8lcz5cbiIsIGxhYmVsKTsKLX0KLSNlbmRpZgotCi0KLSNp
ZiBERkdfRU5BQkxFKENPTlNJU1RFTkNZX0NIRUNLKQotdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpj
aGVja0NvbnNpc3RlbmN5KCkKLXsKLSAgICBib29sIGZhaWxlZCA9IGZhbHNlOwotCi0gICAgZm9y
IChncHJfaXRlcmF0b3IgaXRlciA9IG1fZ3Bycy5iZWdpbigpOyBpdGVyICE9IG1fZ3Bycy5lbmQo
KTsgKytpdGVyKSB7Ci0gICAgICAgIGlmIChpdGVyLmlzTG9ja2VkKCkpIHsKLSAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiREZHX0NPTlNJU1RFTkNZX0NIRUNLIGZhaWxlZDogZ3ByICVzIGlz
IGxvY2tlZC5cbiIsIGl0ZXIuZGVidWdOYW1lKCkpOwotICAgICAgICAgICAgZmFpbGVkID0gdHJ1
ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBmb3IgKGZwcl9pdGVyYXRvciBpdGVyID0gbV9mcHJz
LmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKGl0
ZXIuaXNMb2NrZWQoKSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJERkdfQ09OU0lT
VEVOQ1lfQ0hFQ0sgZmFpbGVkOiBmcHIgJXMgaXMgbG9ja2VkLlxuIiwgaXRlci5kZWJ1Z05hbWUo
KSk7Ci0gICAgICAgICAgICBmYWlsZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ2VuZXJhdGlvbkluZm8uc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IChWaXJ0dWFsUmVnaXN0
ZXIpaTsKLSAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3Zp
cnR1YWxSZWdpc3Rlcl07Ci0gICAgICAgIGlmICghaW5mby5hbGl2ZSgpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7Ci0gICAg
ICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBEYXRhRm9ybWF0SlM6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTSW50ZWdlcjoKLSAgICAg
ICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2Vs
bDoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOgotI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCi0gICAgICAgICAgICBicmVhazsKLSNlbmRpZgotICAgICAgICBjYXNlIERhdGFGb3JtYXRJ
bnRlZ2VyOgotICAgICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgotICAgICAgICBjYXNlIERhdGFG
b3JtYXRCb29sZWFuOgotICAgICAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdlOiB7Ci0gICAgICAg
ICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKLSAgICAgICAgICAgIEFTU0VSVChncHIgIT0g
SW52YWxpZEdQUlJlZyk7Ci0gICAgICAgICAgICBpZiAobV9ncHJzLm5hbWUoZ3ByKSAhPSB2aXJ0
dWFsUmVnaXN0ZXIpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRGR19DT05T
SVNURU5DWV9DSEVDSyBmYWlsZWQ6IG5hbWUgbWlzbWF0Y2ggZm9yIHZpcnR1YWwgcmVnaXN0ZXIg
JWQgKGdwciAlcykuXG4iLCB2aXJ0dWFsUmVnaXN0ZXIsIEdQUkluZm86OmRlYnVnTmFtZShncHIp
KTsKLSAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOiB7
Ci0gICAgICAgICAgICBGUFJSZWcgZnByID0gaW5mby5mcHIoKTsKLSAgICAgICAgICAgIEFTU0VS
VChmcHIgIT0gSW52YWxpZEZQUlJlZyk7Ci0gICAgICAgICAgICBpZiAobV9mcHJzLm5hbWUoZnBy
KSAhPSB2aXJ0dWFsUmVnaXN0ZXIpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IkRGR19DT05TSVNURU5DWV9DSEVDSyBmYWlsZWQ6IG5hbWUgbWlzbWF0Y2ggZm9yIHZpcnR1YWwg
cmVnaXN0ZXIgJWQgKGZwciAlcykuXG4iLCB2aXJ0dWFsUmVnaXN0ZXIsIEZQUkluZm86OmRlYnVn
TmFtZShmcHIpKTsKLSAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IGZvciAoZ3ByX2l0ZXJhdG9yIGl0ZXIgPSBtX2dwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2dwcnMu
ZW5kKCk7ICsraXRlcikgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
ID0gaXRlci5uYW1lKCk7Ci0gICAgICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXIgPT0gSW52YWxpZFZp
cnR1YWxSZWdpc3RlcikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIEdlbmVyYXRp
b25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgIGlmIChpdGVyLnJlZ0lEKCkgIT0gaW5mby5ncHIoKSkgewot
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJERkdfQ09OU0lTVEVOQ1lfQ0hFQ0sgZmFpbGVk
OiBuYW1lIG1pc21hdGNoIGZvciBncHIgJXMgKHZpcnR1YWwgcmVnaXN0ZXIgJWQpLlxuIiwgaXRl
ci5kZWJ1Z05hbWUoKSwgdmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGZhaWxlZCA9IHRy
dWU7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGlmICghKGluZm8ucmVnaXN0ZXJGb3JtYXQo
KSAmIERhdGFGb3JtYXRKUykpIHsKLSAgICAgICAgICAgIGlmIChpdGVyLnJlZ0lEKCkgIT0gaW5m
by5ncHIoKSkgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiREZHX0NPTlNJU1RF
TkNZX0NIRUNLIGZhaWxlZDogbmFtZSBtaXNtYXRjaCBmb3IgZ3ByICVzICh2aXJ0dWFsIHJlZ2lz
dGVyICVkKS5cbiIsIGl0ZXIuZGVidWdOYW1lKCksIHZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAg
ICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGlmIChpdGVyLnJlZ0lEKCkgIT0gaW5mby50YWdHUFIoKSAmJiBpdGVyLnJl
Z0lEKCkgIT0gaW5mby5wYXlsb2FkR1BSKCkpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkRGR19DT05TSVNURU5DWV9DSEVDSyBmYWlsZWQ6IG5hbWUgbWlzbWF0Y2ggZm9yIGdw
ciAlcyAodmlydHVhbCByZWdpc3RlciAlZCkuXG4iLCBpdGVyLmRlYnVnTmFtZSgpLCB2aXJ0dWFs
UmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSNlbmRpZgotICAgIH0KLQotICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIg
PSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgewotICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gaXRlci5uYW1lKCk7Ci0gICAgICAg
IGlmICh2aXJ0dWFsUmVnaXN0ZXIgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0
aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwotICAgICAgICBpZiAoaXRlci5yZWdJRCgpICE9IGlu
Zm8uZnByKCkpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiREZHX0NPTlNJU1RFTkNZ
X0NIRUNLIGZhaWxlZDogbmFtZSBtaXNtYXRjaCBmb3IgZnByICVzICh2aXJ0dWFsIHJlZ2lzdGVy
ICVkKS5cbiIsIGl0ZXIuZGVidWdOYW1lKCksIHZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgICAg
ICBmYWlsZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGZhaWxlZCkgewot
ICAgICAgICBkdW1wKCk7Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotfQotI2VuZGlmCi0KLUdQ
UlRlbXBvcmFyeTo6R1BSVGVtcG9yYXJ5KCkKLSAgICA6IG1faml0KDApCi0gICAgLCBtX2dwcihJ
bnZhbGlkR1BSUmVnKQotewotfQotCi1HUFJUZW1wb3Jhcnk6OkdQUlRlbXBvcmFyeShKSVRDb2Rl
R2VuZXJhdG9yKiBqaXQpCi0gICAgOiBtX2ppdChqaXQpCi0gICAgLCBtX2dwcihJbnZhbGlkR1BS
UmVnKQotewotI2lmIENQVShYODYpCi0gICAgLy8gd2UgY3VycmVudHkgbGF6aWx5IGFsbG9jYXRl
IHRoZSByZWcsIGFzIHRoZSBudW1iZXIgb2YgcmVncyBvbiBYODYgaXMgbGltaXRlZC4KLSNlbHNl
Ci0gICAgbV9ncHIgPSBtX2ppdC0+YWxsb2NhdGUoKTsKLSNlbmRpZgotfQotCi1HUFJUZW1wb3Jh
cnk6OkdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKiBqaXQsIEdQUlJlZyBzcGVjaWZpYykK
LSAgICA6IG1faml0KGppdCkKLSAgICAsIG1fZ3ByKEludmFsaWRHUFJSZWcpCi17Ci0gICAgbV9n
cHIgPSBtX2ppdC0+YWxsb2NhdGUoc3BlY2lmaWMpOwotfQotCi1HUFJUZW1wb3Jhcnk6OkdQUlRl
bXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKiBqaXQsIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kJiBv
cDEpCi0gICAgOiBtX2ppdChqaXQpCi0gICAgLCBtX2dwcihJbnZhbGlkR1BSUmVnKQotewotICAg
IGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AxLmluZGV4KCkpKQotICAgICAgICBtX2dwciA9IG1faml0
LT5yZXVzZShvcDEuZ3ByKCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9ncHIgPSBtX2ppdC0+YWxs
b2NhdGUoKTsKLX0KLQotR1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRv
ciogaml0LCBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCYgb3AxLCBTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZCYgb3AyKQotICAgIDogbV9qaXQoaml0KQotICAgICwgbV9ncHIoSW52YWxpZEdQUlJlZykK
LXsKLSAgICBpZiAobV9qaXQtPmNhblJldXNlKG9wMS5pbmRleCgpKSkKLSAgICAgICAgbV9ncHIg
PSBtX2ppdC0+cmV1c2Uob3AxLmdwcigpKTsKLSAgICBlbHNlIGlmIChtX2ppdC0+Y2FuUmV1c2Uo
b3AyLmluZGV4KCkpKQotICAgICAgICBtX2dwciA9IG1faml0LT5yZXVzZShvcDIuZ3ByKCkpOwot
ICAgIGVsc2UKLSAgICAgICAgbV9ncHIgPSBtX2ppdC0+YWxsb2NhdGUoKTsKLX0KLQotR1BSVGVt
cG9yYXJ5OjpHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciogaml0LCBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQmIG9wMSkKLSAgICA6IG1faml0KGppdCkKLSAgICAsIG1fZ3ByKEludmFs
aWRHUFJSZWcpCi17Ci0gICAgaWYgKG1faml0LT5jYW5SZXVzZShvcDEuaW5kZXgoKSkpCi0gICAg
ICAgIG1fZ3ByID0gbV9qaXQtPnJldXNlKG9wMS5ncHIoKSk7Ci0gICAgZWxzZQotICAgICAgICBt
X2dwciA9IG1faml0LT5hbGxvY2F0ZSgpOwotfQotCi1HUFJUZW1wb3Jhcnk6OkdQUlRlbXBvcmFy
eShKSVRDb2RlR2VuZXJhdG9yKiBqaXQsIEludGVnZXJPcGVyYW5kJiBvcDEpCi0gICAgOiBtX2pp
dChqaXQpCi0gICAgLCBtX2dwcihJbnZhbGlkR1BSUmVnKQotewotICAgIGlmIChtX2ppdC0+Y2Fu
UmV1c2Uob3AxLmluZGV4KCkpKQotICAgICAgICBtX2dwciA9IG1faml0LT5yZXVzZShvcDEuZ3By
KCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9ncHIgPSBtX2ppdC0+YWxsb2NhdGUoKTsKLX0KLQot
R1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciogaml0LCBJbnRlZ2Vy
T3BlcmFuZCYgb3AxLCBJbnRlZ2VyT3BlcmFuZCYgb3AyKQotICAgIDogbV9qaXQoaml0KQotICAg
ICwgbV9ncHIoSW52YWxpZEdQUlJlZykKLXsKLSAgICBpZiAobV9qaXQtPmNhblJldXNlKG9wMS5p
bmRleCgpKSkKLSAgICAgICAgbV9ncHIgPSBtX2ppdC0+cmV1c2Uob3AxLmdwcigpKTsKLSAgICBl
bHNlIGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AyLmluZGV4KCkpKQotICAgICAgICBtX2dwciA9IG1f
aml0LT5yZXVzZShvcDIuZ3ByKCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9ncHIgPSBtX2ppdC0+
YWxsb2NhdGUoKTsKLX0KLQotR1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVy
YXRvciogaml0LCBTcGVjdWxhdGVDZWxsT3BlcmFuZCYgb3AxKQotICAgIDogbV9qaXQoaml0KQot
ICAgICwgbV9ncHIoSW52YWxpZEdQUlJlZykKLXsKLSAgICBpZiAobV9qaXQtPmNhblJldXNlKG9w
MS5pbmRleCgpKSkKLSAgICAgICAgbV9ncHIgPSBtX2ppdC0+cmV1c2Uob3AxLmdwcigpKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fZ3ByID0gbV9qaXQtPmFsbG9jYXRlKCk7Ci19Ci0KLUdQUlRlbXBv
cmFyeTo6R1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqIGppdCwgU3BlY3VsYXRlQm9vbGVh
bk9wZXJhbmQmIG9wMSkKLSAgICA6IG1faml0KGppdCkKLSAgICAsIG1fZ3ByKEludmFsaWRHUFJS
ZWcpCi17Ci0gICAgaWYgKG1faml0LT5jYW5SZXVzZShvcDEuaW5kZXgoKSkpCi0gICAgICAgIG1f
Z3ByID0gbV9qaXQtPnJldXNlKG9wMS5ncHIoKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2dwciA9
IG1faml0LT5hbGxvY2F0ZSgpOwotfQotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLUdQUlRlbXBvcmFy
eTo6R1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqIGppdCwgSlNWYWx1ZU9wZXJhbmQmIG9w
MSkKLSAgICA6IG1faml0KGppdCkKLSAgICAsIG1fZ3ByKEludmFsaWRHUFJSZWcpCi17Ci0gICAg
aWYgKG1faml0LT5jYW5SZXVzZShvcDEuaW5kZXgoKSkpCi0gICAgICAgIG1fZ3ByID0gbV9qaXQt
PnJldXNlKG9wMS5ncHIoKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2dwciA9IG1faml0LT5hbGxv
Y2F0ZSgpOwotfQotI2Vsc2UKLUdQUlRlbXBvcmFyeTo6R1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5l
cmF0b3IqIGppdCwgSlNWYWx1ZU9wZXJhbmQmIG9wMSwgYm9vbCB0YWcpCi0gICAgOiBtX2ppdChq
aXQpCi0gICAgLCBtX2dwcihJbnZhbGlkR1BSUmVnKQotewotICAgIGlmICghb3AxLmlzRG91Ymxl
KCkgJiYgbV9qaXQtPmNhblJldXNlKG9wMS5pbmRleCgpKSkKLSAgICAgICAgbV9ncHIgPSBtX2pp
dC0+cmV1c2UodGFnID8gb3AxLnRhZ0dQUigpIDogb3AxLnBheWxvYWRHUFIoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBtX2dwciA9IG1faml0LT5hbGxvY2F0ZSgpOwotfQotI2VuZGlmCi0KLUdQUlRl
bXBvcmFyeTo6R1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqIGppdCwgU3RvcmFnZU9wZXJh
bmQmIG9wMSkKLSAgICA6IG1faml0KGppdCkKLSAgICAsIG1fZ3ByKEludmFsaWRHUFJSZWcpCi17
Ci0gICAgaWYgKG1faml0LT5jYW5SZXVzZShvcDEuaW5kZXgoKSkpCi0gICAgICAgIG1fZ3ByID0g
bV9qaXQtPnJldXNlKG9wMS5ncHIoKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2dwciA9IG1faml0
LT5hbGxvY2F0ZSgpOwotfQotCi12b2lkIEdQUlRlbXBvcmFyeTo6YWRvcHQoR1BSVGVtcG9yYXJ5
JiBvdGhlcikKLXsKLSAgICBBU1NFUlQoIW1faml0KTsKLSAgICBBU1NFUlQobV9ncHIgPT0gSW52
YWxpZEdQUlJlZyk7Ci0gICAgQVNTRVJUKG90aGVyLm1faml0KTsKLSAgICBBU1NFUlQob3RoZXIu
bV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAgbV9qaXQgPSBvdGhlci5tX2ppdDsKLSAgICBt
X2dwciA9IG90aGVyLm1fZ3ByOwotICAgIG90aGVyLm1faml0ID0gMDsKLSAgICBvdGhlci5tX2dw
ciA9IEludmFsaWRHUFJSZWc7Ci19Ci0KLUZQUlRlbXBvcmFyeTo6RlBSVGVtcG9yYXJ5KEpJVENv
ZGVHZW5lcmF0b3IqIGppdCkKLSAgICA6IG1faml0KGppdCkKLSAgICAsIG1fZnByKEludmFsaWRG
UFJSZWcpCi17Ci0gICAgbV9mcHIgPSBtX2ppdC0+ZnByQWxsb2NhdGUoKTsKLX0KLQotRlBSVGVt
cG9yYXJ5OjpGUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciogaml0LCBEb3VibGVPcGVyYW5k
JiBvcDEpCi0gICAgOiBtX2ppdChqaXQpCi0gICAgLCBtX2ZwcihJbnZhbGlkRlBSUmVnKQotewot
ICAgIGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AxLmluZGV4KCkpKQotICAgICAgICBtX2ZwciA9IG1f
aml0LT5yZXVzZShvcDEuZnByKCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9mcHIgPSBtX2ppdC0+
ZnByQWxsb2NhdGUoKTsKLX0KLQotRlBSVGVtcG9yYXJ5OjpGUFJUZW1wb3JhcnkoSklUQ29kZUdl
bmVyYXRvciogaml0LCBEb3VibGVPcGVyYW5kJiBvcDEsIERvdWJsZU9wZXJhbmQmIG9wMikKLSAg
ICA6IG1faml0KGppdCkKLSAgICAsIG1fZnByKEludmFsaWRGUFJSZWcpCi17Ci0gICAgaWYgKG1f
aml0LT5jYW5SZXVzZShvcDEuaW5kZXgoKSkpCi0gICAgICAgIG1fZnByID0gbV9qaXQtPnJldXNl
KG9wMS5mcHIoKSk7Ci0gICAgZWxzZSBpZiAobV9qaXQtPmNhblJldXNlKG9wMi5pbmRleCgpKSkK
LSAgICAgICAgbV9mcHIgPSBtX2ppdC0+cmV1c2Uob3AyLmZwcigpKTsKLSAgICBlbHNlCi0gICAg
ICAgIG1fZnByID0gbV9qaXQtPmZwckFsbG9jYXRlKCk7Ci19Ci0KLUZQUlRlbXBvcmFyeTo6RlBS
VGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqIGppdCwgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCYg
b3AxKQotICAgIDogbV9qaXQoaml0KQotICAgICwgbV9mcHIoSW52YWxpZEZQUlJlZykKLXsKLSAg
ICBpZiAobV9qaXQtPmNhblJldXNlKG9wMS5pbmRleCgpKSkKLSAgICAgICAgbV9mcHIgPSBtX2pp
dC0+cmV1c2Uob3AxLmZwcigpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fZnByID0gbV9qaXQtPmZw
ckFsbG9jYXRlKCk7Ci19Ci0KLUZQUlRlbXBvcmFyeTo6RlBSVGVtcG9yYXJ5KEpJVENvZGVHZW5l
cmF0b3IqIGppdCwgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCYgb3AxLCBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kJiBvcDIpCi0gICAgOiBtX2ppdChqaXQpCi0gICAgLCBtX2ZwcihJbnZhbGlkRlBSUmVn
KQotewotICAgIGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AxLmluZGV4KCkpKQotICAgICAgICBtX2Zw
ciA9IG1faml0LT5yZXVzZShvcDEuZnByKCkpOwotICAgIGVsc2UgaWYgKG1faml0LT5jYW5SZXVz
ZShvcDIuaW5kZXgoKSkpCi0gICAgICAgIG1fZnByID0gbV9qaXQtPnJldXNlKG9wMi5mcHIoKSk7
Ci0gICAgZWxzZQotICAgICAgICBtX2ZwciA9IG1faml0LT5mcHJBbGxvY2F0ZSgpOwotfQotCi0j
aWYgVVNFKEpTVkFMVUUzMl82NCkKLUZQUlRlbXBvcmFyeTo6RlBSVGVtcG9yYXJ5KEpJVENvZGVH
ZW5lcmF0b3IqIGppdCwgSlNWYWx1ZU9wZXJhbmQmIG9wMSkKLSAgICA6IG1faml0KGppdCkKLSAg
ICAsIG1fZnByKEludmFsaWRGUFJSZWcpCi17Ci0gICAgaWYgKG9wMS5pc0RvdWJsZSgpICYmIG1f
aml0LT5jYW5SZXVzZShvcDEuaW5kZXgoKSkpCi0gICAgICAgIG1fZnByID0gbV9qaXQtPnJldXNl
KG9wMS5mcHIoKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2ZwciA9IG1faml0LT5mcHJBbGxvY2F0
ZSgpOwotfQotI2VuZGlmCi0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3Iu
aAkocmV2aXNpb24gMTAwMjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjE5MyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgREZHSklUQ29k
ZUdlbmVyYXRvcl9oCi0jZGVmaW5lIERGR0pJVENvZGVHZW5lcmF0b3JfaAotCi0jaWYgRU5BQkxF
KERGR19KSVQpCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlIDxkZmcvREZHR2Vu
ZXJhdGlvbkluZm8uaD4KLSNpbmNsdWRlIDxkZmcvREZHR3JhcGguaD4KLSNpbmNsdWRlIDxkZmcv
REZHSklUQ29tcGlsZXIuaD4KLSNpbmNsdWRlIDxkZmcvREZHTm9kZS5oPgotI2luY2x1ZGUgPGRm
Zy9ERkdPcGVyYXRpb25zLmg+Ci0jaW5jbHVkZSA8ZGZnL0RGR1JlZ2lzdGVyQmFuay5oPgotCi1u
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLWNsYXNzIFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kOwotY2xhc3MgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kOwotY2xhc3MgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZDsKLWNsYXNzIFNwZWN1bGF0ZUNlbGxPcGVyYW5kOwotY2xhc3MgU3Bl
Y3VsYXRlQm9vbGVhbk9wZXJhbmQ7Ci0KLQotLy8gPT09IEpJVENvZGVHZW5lcmF0b3IgPT09Ci0v
LwotLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBjb21tb24gaW5mcmFzdHJ1Y3R1cmUgdXNlZCBieSB0
aGUgc3BlY3VsYXRpdmUgJgotLy8gbm9uLXNwZWN1bGF0aXZlIEpJVHMuIFByb3ZpZGVzIGNvbW1v
biBtZWNoYW5pc21zIGZvciB2aXJ0dWFsIGFuZAotLy8gcGh5c2ljYWwgcmVnaXN0ZXIgbWFuYWdl
bWVudCwgY2FsbHMgb3V0IGZyb20gSklUIGNvZGUgdG8gaGVscGVyCi0vLyBmdW5jdGlvbnMsIGV0
Yy4KLWNsYXNzIEpJVENvZGVHZW5lcmF0b3IgewotcHJvdGVjdGVkOgotICAgIHR5cGVkZWYgSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW0zMiBUcnVzdGVkSW1tMzI7Ci0gICAgdHlwZWRlZiBKSVRDb21w
aWxlcjo6SW1tMzIgSW1tMzI7Ci0gICAgdHlwZWRlZiBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0
ciBUcnVzdGVkSW1tUHRyOwotICAgIHR5cGVkZWYgSklUQ29tcGlsZXI6OkltbVB0ciBJbW1QdHI7
Ci0KLSAgICAvLyBUaGVzZSBjb25zdGFudHMgYXJlIHVzZWQgdG8gc2V0IHByaW9yaXRpZXMgZm9y
IHNwaWxsIG9yZGVyIGZvcgotICAgIC8vIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuCi0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBlbnVtIFNwaWxsT3JkZXIgewotICAgICAgICBTcGlsbE9yZGVyQ29u
c3RhbnQgPSAxLCAvLyBubyBzcGlsbCwgYW5kIGNoZWFwIGZpbGwKLSAgICAgICAgU3BpbGxPcmRl
clNwaWxsZWQgID0gMiwgLy8gbm8gc3BpbGwKLSAgICAgICAgU3BpbGxPcmRlckpTICAgICAgID0g
NCwgLy8gbmVlZHMgc3BpbGwKLSAgICAgICAgU3BpbGxPcmRlckNlbGwgICAgID0gNCwgLy8gbmVl
ZHMgc3BpbGwKLSAgICAgICAgU3BpbGxPcmRlclN0b3JhZ2UgID0gNCwgLy8gbmVlZHMgc3BpbGwK
LSAgICAgICAgU3BpbGxPcmRlckludGVnZXIgID0gNSwgLy8gbmVlZHMgc3BpbGwgYW5kIGJveAot
ICAgICAgICBTcGlsbE9yZGVyQm9vbGVhbiAgPSA1LCAvLyBuZWVkcyBzcGlsbCBhbmQgYm94Ci0g
ICAgICAgIFNwaWxsT3JkZXJEb3VibGUgICA9IDYsIC8vIG5lZWRzIHNwaWxsIGFuZCBjb252ZXJ0
Ci0gICAgfTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgZW51bSBTcGlsbE9yZGVyIHsK
LSAgICAgICAgU3BpbGxPcmRlckNvbnN0YW50ID0gMSwgLy8gbm8gc3BpbGwsIGFuZCBjaGVhcCBm
aWxsCi0gICAgICAgIFNwaWxsT3JkZXJTcGlsbGVkICA9IDIsIC8vIG5vIHNwaWxsCi0gICAgICAg
IFNwaWxsT3JkZXJKUyAgICAgICA9IDQsIC8vIG5lZWRzIHNwaWxsCi0gICAgICAgIFNwaWxsT3Jk
ZXJTdG9yYWdlICA9IDQsIC8vIG5lZWRzIHNwaWxsCi0gICAgICAgIFNwaWxsT3JkZXJEb3VibGUg
ICA9IDQsIC8vIG5lZWRzIHNwaWxsCi0gICAgICAgIFNwaWxsT3JkZXJJbnRlZ2VyICA9IDUsIC8v
IG5lZWRzIHNwaWxsIGFuZCBib3gKLSAgICAgICAgU3BpbGxPcmRlckNlbGwgICAgID0gNSwgLy8g
bmVlZHMgc3BpbGwgYW5kIGJveAotICAgICAgICBTcGlsbE9yZGVyQm9vbGVhbiAgPSA1LCAvLyBu
ZWVkcyBzcGlsbCBhbmQgYm94Ci0gICAgfTsKLSNlbmRpZgotCi0gICAgZW51bSBVc2VDaGlsZHJl
bk1vZGUgeyBDYWxsVXNlQ2hpbGRyZW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSB9Owot
ICAgIAotICAgIHN0YXRpYyBjb25zdCBkb3VibGUgdHdvVG9UaGUzMjsKLQotcHVibGljOgotICAg
IE5vZGUmIGF0KE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9q
aXQuZ3JhcGgoKVtub2RlSW5kZXhdOwotICAgIH0KLSAgICAKLSAgICBHUFJSZWcgZmlsbEludGVn
ZXIoTm9kZUluZGV4LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpOwotICAgIEZQUlJlZyBmaWxs
RG91YmxlKE5vZGVJbmRleCk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBHUFJSZWcgZmlsbEpT
VmFsdWUoTm9kZUluZGV4KTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgYm9vbCBmaWxs
SlNWYWx1ZShOb2RlSW5kZXgsIEdQUlJlZyYsIEdQUlJlZyYsIEZQUlJlZyYpOwotI2VuZGlmCi0g
ICAgR1BSUmVnIGZpbGxTdG9yYWdlKE5vZGVJbmRleCk7Ci0KLSAgICAvLyBsb2NrIGFuZCB1bmxv
Y2sgR1BSICYgRlBSIHJlZ2lzdGVycy4KLSAgICB2b2lkIGxvY2soR1BSUmVnIHJlZykKLSAgICB7
Ci0gICAgICAgIG1fZ3Bycy5sb2NrKHJlZyk7Ci0gICAgfQotICAgIHZvaWQgbG9jayhGUFJSZWcg
cmVnKQotICAgIHsKLSAgICAgICAgbV9mcHJzLmxvY2socmVnKTsKLSAgICB9Ci0gICAgdm9pZCB1
bmxvY2soR1BSUmVnIHJlZykKLSAgICB7Ci0gICAgICAgIG1fZ3Bycy51bmxvY2socmVnKTsKLSAg
ICB9Ci0gICAgdm9pZCB1bmxvY2soRlBSUmVnIHJlZykKLSAgICB7Ci0gICAgICAgIG1fZnBycy51
bmxvY2socmVnKTsKLSAgICB9Ci0KLSAgICAvLyBVc2VkIHRvIGNoZWNrIHdoZXRoZXIgYSBjaGls
ZCBub2RlIGlzIG9uIGl0cyBsYXN0IHVzZSwKLSAgICAvLyBhbmQgaXRzIG1hY2hpbmUgcmVnaXN0
ZXJzIG1heSBiZSByZXVzZWQuCi0gICAgYm9vbCBjYW5SZXVzZShOb2RlSW5kZXggbm9kZUluZGV4
KQotICAgIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGF0KG5v
ZGVJbmRleCkudmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZv
ID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwotICAgICAgICByZXR1cm4gaW5m
by5jYW5SZXVzZSgpOwotICAgIH0KLSAgICBHUFJSZWcgcmV1c2UoR1BSUmVnIHJlZykKLSAgICB7
Ci0gICAgICAgIG1fZ3Bycy5sb2NrKHJlZyk7Ci0gICAgICAgIHJldHVybiByZWc7Ci0gICAgfQot
ICAgIEZQUlJlZyByZXVzZShGUFJSZWcgcmVnKQotICAgIHsKLSAgICAgICAgbV9mcHJzLmxvY2so
cmVnKTsKLSAgICAgICAgcmV0dXJuIHJlZzsKLSAgICB9Ci0KLSAgICAvLyBBbGxvY2F0ZSBhIGdw
ci9mcHIuCi0gICAgR1BSUmVnIGFsbG9jYXRlKCkKLSAgICB7Ci0gICAgICAgIFZpcnR1YWxSZWdp
c3RlciBzcGlsbE1lOwotICAgICAgICBHUFJSZWcgZ3ByID0gbV9ncHJzLmFsbG9jYXRlKHNwaWxs
TWUpOwotICAgICAgICBpZiAoc3BpbGxNZSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKSB7Ci0j
aWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0g
bV9nZW5lcmF0aW9uSW5mb1tzcGlsbE1lXTsKLSAgICAgICAgICAgIEFTU0VSVChpbmZvLnJlZ2lz
dGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdEpTRG91YmxlKTsKLSAgICAgICAgICAgIGlmICgoaW5m
by5yZWdpc3RlckZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKSkKLSAgICAgICAgICAgICAgICBtX2dw
cnMucmVsZWFzZShpbmZvLnRhZ0dQUigpID09IGdwciA/IGluZm8ucGF5bG9hZEdQUigpIDogaW5m
by50YWdHUFIoKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHNwaWxsKHNwaWxsTWUpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBncHI7Ci0gICAgfQotICAgIEdQUlJlZyBhbGxvY2F0ZShHUFJS
ZWcgc3BlY2lmaWMpCi0gICAgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxNZSA9IG1f
Z3Bycy5hbGxvY2F0ZVNwZWNpZmljKHNwZWNpZmljKTsKLSAgICAgICAgaWYgKHNwaWxsTWUgIT0g
SW52YWxpZFZpcnR1YWxSZWdpc3RlcikgewotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAg
ICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bc3BpbGxNZV07Ci0g
ICAgICAgICAgICBBU1NFUlQoaW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXRKU0Rv
dWJsZSk7Ci0gICAgICAgICAgICBpZiAoKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAmIERhdGFGb3Jt
YXRKUykpCi0gICAgICAgICAgICAgICAgbV9ncHJzLnJlbGVhc2UoaW5mby50YWdHUFIoKSA9PSBz
cGVjaWZpYyA/IGluZm8ucGF5bG9hZEdQUigpIDogaW5mby50YWdHUFIoKSk7Ci0jZW5kaWYKLSAg
ICAgICAgICAgIHNwaWxsKHNwaWxsTWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzcGVj
aWZpYzsKLSAgICB9Ci0gICAgR1BSUmVnIHRyeUFsbG9jYXRlKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2dwcnMudHJ5QWxsb2NhdGUoKTsKLSAgICB9Ci0gICAgRlBSUmVnIGZwckFsbG9jYXRl
KCkKLSAgICB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcGlsbE1lOwotICAgICAgICBGUFJS
ZWcgZnByID0gbV9mcHJzLmFsbG9jYXRlKHNwaWxsTWUpOwotICAgICAgICBpZiAoc3BpbGxNZSAh
PSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQotICAgICAgICAgICAgc3BpbGwoc3BpbGxNZSk7Ci0g
ICAgICAgIHJldHVybiBmcHI7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgd2hldGhlciBhIFZpcnR1
YWxSZWdzaXRlciBpcyBjdXJyZW50bHkgaW4gYSBtYWNoaW5lIHJlZ2lzdGVyLgotICAgIC8vIFdl
IHVzZSB0aGlzIHdoZW4gZmlsbGluZyBvcGVyYW5kcyB0byBmaWxsIHRob3NlIHRoYXQgYXJlIGFs
cmVhZHkgaW4KLSAgICAvLyBtYWNoaW5lIHJlZ2lzdGVycyBmaXJzdCAoYnkgbG9ja2luZyBWaXJ0
dWFsUmVnc2l0ZXJzIHRoYXQgYXJlIGFscmVhZHkKLSAgICAvLyBpbiBtYWNoaW5lIHJlZ2lzdGVy
IGJlZm9yZSBmaWxsaW5nIHRob3NlIHRoYXQgYXJlIG5vdCB3ZSBhdHRlbXB0IHRvCi0gICAgLy8g
YXZvaWQgc3BpbGxpbmcgdmFsdWVzIHdlIHdpbGwgbmVlZCBpbW1lZGlhdGVseSkuCi0gICAgYm9v
bCBpc0ZpbGxlZChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGF0KG5vZGVJbmRleCkudmlydHVhbFJlZ2lzdGVyKCk7
Ci0gICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFs
UmVnaXN0ZXJdOwotICAgICAgICByZXR1cm4gaW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFG
b3JtYXROb25lOwotICAgIH0KLSAgICBib29sIGlzRmlsbGVkRG91YmxlKE5vZGVJbmRleCBub2Rl
SW5kZXgpCi0gICAgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0g
YXQobm9kZUluZGV4KS52aXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgR2VuZXJhdGlvbkluZm8m
IGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0gICAgICAgIHJldHVy
biBpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZTsKLSAgICB9Ci0KLSAg
ICAvLyBDYWxsZWQgb24gYW4gb3BlcmFuZCBvbmNlIGl0IGhhcyBiZWVuIGNvbnN1bWVkIGJ5IGEg
cGFyZW50IG5vZGUuCi0gICAgdm9pZCB1c2UoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0g
ICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBhdChub2RlSW5kZXgpLnZp
cnR1YWxSZWdpc3RlcigpOwotICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJh
dGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKLQotICAgICAgICAvLyB1c2UoKSByZXR1cm5zIHRy
dWUgd2hlbiB0aGUgdmFsdWUgYmVjb21lcyBkZWFkLCBhbmQgYW55Ci0gICAgICAgIC8vIGFzc29j
aWF0ZWQgcmVzb3VyY2VzIG1heSBiZSBmcmVlZC4KLSAgICAgICAgaWYgKCFpbmZvLnVzZSgpKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vIFJlbGVhc2UgdGhlIGFzc29jaWF0ZWQg
bWFjaGluZSByZWdpc3RlcnMuCi0gICAgICAgIERhdGFGb3JtYXQgcmVnaXN0ZXJGb3JtYXQgPSBp
bmZvLnJlZ2lzdGVyRm9ybWF0KCk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgaWYgKHJl
Z2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpCi0gICAgICAgICAgICBtX2ZwcnMucmVs
ZWFzZShpbmZvLmZwcigpKTsKLSAgICAgICAgZWxzZSBpZiAocmVnaXN0ZXJGb3JtYXQgIT0gRGF0
YUZvcm1hdE5vbmUpCi0gICAgICAgICAgICBtX2dwcnMucmVsZWFzZShpbmZvLmdwcigpKTsKLSNl
bGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRh
Rm9ybWF0RG91YmxlIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRKU0RvdWJsZSkKLSAg
ICAgICAgICAgIG1fZnBycy5yZWxlYXNlKGluZm8uZnByKCkpOwotICAgICAgICBlbHNlIGlmIChy
ZWdpc3RlckZvcm1hdCAmIERhdGFGb3JtYXRKUykgewotICAgICAgICAgICAgbV9ncHJzLnJlbGVh
c2UoaW5mby50YWdHUFIoKSk7Ci0gICAgICAgICAgICBtX2dwcnMucmVsZWFzZShpbmZvLnBheWxv
YWRHUFIoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocmVnaXN0ZXJGb3JtYXQgIT0gRGF0YUZvcm1h
dE5vbmUpCi0gICAgICAgICAgICBtX2dwcnMucmVsZWFzZShpbmZvLmdwcigpKTsKLSNlbmRpZgot
ICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIG1hcmtDZWxsQ2FyZChNYWNyb0Fzc2VtYmxlciYsIEdQ
UlJlZyBvd25lckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIpOwot
ICAgIHN0YXRpYyB2b2lkIHdyaXRlQmFycmllcihNYWNyb0Fzc2VtYmxlciYsIEdQUlJlZyBvd25l
ckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIFdyaXRlQmFycmll
clVzZUtpbmQpOwotCi0gICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBHUFJS
ZWcgdmFsdWVHUFIsIE5vZGVJbmRleCB2YWx1ZUluZGV4LCBXcml0ZUJhcnJpZXJVc2VLaW5kLCBH
UFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgc2NyYXRjaEdQUjIgPSBJ
bnZhbGlkR1BSUmVnKTsKLSAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEpT
Q2VsbCogdmFsdWUsIFdyaXRlQmFycmllclVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoR1BSMSA9IElu
dmFsaWRHUFJSZWcsIEdQUlJlZyBzY3JhdGNoR1BSMiA9IEludmFsaWRHUFJSZWcpOwotICAgIHZv
aWQgd3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIEdQUlJlZyB2YWx1ZUdQUiwgTm9kZUluZGV4
IHZhbHVlSW5kZXgsIFdyaXRlQmFycmllclVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoR1BSMSA9IElu
dmFsaWRHUFJSZWcpOwotCi0gICAgc3RhdGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKEdQUlJl
ZyBwcmVzZXJ2ZTEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUyID0gSW52YWxpZEdQ
UlJlZywgR1BSUmVnIHByZXNlcnZlMyA9IEludmFsaWRHUFJSZWcpCi0gICAgewotICAgICAgICBp
ZiAocHJlc2VydmUxICE9IEdQUkluZm86OnJlZ1QwICYmIHByZXNlcnZlMiAhPSBHUFJJbmZvOjpy
ZWdUMCAmJiBwcmVzZXJ2ZTMgIT0gR1BSSW5mbzo6cmVnVDApCi0gICAgICAgICAgICByZXR1cm4g
R1BSSW5mbzo6cmVnVDA7Ci0KLSAgICAgICAgaWYgKHByZXNlcnZlMSAhPSBHUFJJbmZvOjpyZWdU
MSAmJiBwcmVzZXJ2ZTIgIT0gR1BSSW5mbzo6cmVnVDEgJiYgcHJlc2VydmUzICE9IEdQUkluZm86
OnJlZ1QxKQotICAgICAgICAgICAgcmV0dXJuIEdQUkluZm86OnJlZ1QxOwotCi0gICAgICAgIGlm
IChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDIgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJl
Z1QyICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMikKLSAgICAgICAgICAgIHJldHVybiBH
UFJJbmZvOjpyZWdUMjsKLQotICAgICAgICByZXR1cm4gR1BSSW5mbzo6cmVnVDM7Ci0gICAgfQot
Ci1wcm90ZWN0ZWQ6Ci0gICAgSklUQ29kZUdlbmVyYXRvcihKSVRDb21waWxlciYgaml0KQotICAg
ICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX2NvbXBpbGVJbmRleCgwKQotICAgICAgICAs
IG1fZ2VuZXJhdGlvbkluZm8obV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJz
KQotICAgICAgICAsIG1fYmxvY2tIZWFkcyhqaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCkpCi0g
ICAgewotICAgIH0KLSAgICAKLSAgICB2b2lkIGNsZWFyR2VuZXJhdGlvbkluZm8oKTsKLQotICAg
IC8vIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgd2hlbiBnZW5lcmF0aW5nICd1bmV4cGVjdGVkJwot
ICAgIC8vIGNhbGxzIG91dCBmcm9tIEpJVCBjb2RlIHRvIEMrKyBoZWxwZXIgcm91dGluZXMgLQot
ICAgIC8vIHRoZXkgc3BpbGwgYWxsIGxpdmUgdmFsdWVzIHRvIHRoZSBhcHByb3ByaWF0ZQotICAg
IC8vIHNsb3RzIGluIHRoZSBSZWdpc3RlckZpbGUgd2l0aG91dCBjaGFuZ2luZyBhbnkgc3RhdGUK
LSAgICAvLyBpbiB0aGUgR2VuZXJhdGlvbkluZm8uCi0gICAgdm9pZCBzaWxlbnRTcGlsbEdQUihW
aXJ0dWFsUmVnaXN0ZXIgc3BpbGxNZSwgR1BSUmVnIHNvdXJjZSkKLSAgICB7Ci0gICAgICAgIEdl
bmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tzcGlsbE1lXTsKLSAgICAgICAg
QVNTRVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSk7Ci0gICAgICAg
IEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdERvdWJsZSk7Ci0KLSAg
ICAgICAgaWYgKCFpbmZvLm5lZWRzU3BpbGwoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBEYXRhRm9ybWF0IHJlZ2lzdGVyRm9ybWF0ID0gaW5mby5yZWdpc3RlckZvcm1hdCgpOwot
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gc291cmNl
KTsKLSAgICAgICAgaWYgKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKQotICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMihzb3VyY2UsIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNw
aWxsTWUpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3Jt
YXQgJiBEYXRhRm9ybWF0SlMgfHwgcmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwgfHwg
cmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdFN0b3JhZ2UpOwotICAgICAgICAgICAgbV9qaXQu
c3RvcmVQdHIoc291cmNlLCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSk7Ci0gICAg
ICAgIH0KLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGlmIChyZWdpc3RlckZvcm1h
dCAmIERhdGFGb3JtYXRKUykgewotICAgICAgICAgICAgQVNTRVJUKGluZm8udGFnR1BSKCkgPT0g
c291cmNlIHx8IGluZm8ucGF5bG9hZEdQUigpID09IHNvdXJjZSk7Ci0gICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKHNvdXJjZSwgc291cmNlID09IGluZm8udGFnR1BSKCkgPyBKSVRDb21waWxlcjo6
dGFnRm9yKHNwaWxsTWUpIDogSklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSkpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gc291cmNlKTsK
LSAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc291cmNlLCBKSVRDb21waWxlcjo6cGF5bG9hZEZv
cihzcGlsbE1lKSk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgIH0KLSAgICB2b2lkIHNpbGVudFNw
aWxsRlBSKFZpcnR1YWxSZWdpc3RlciBzcGlsbE1lLCBGUFJSZWcgc291cmNlKQotICAgIHsKLSAg
ICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3NwaWxsTWVdOwot
ICAgICAgICBBU1NFUlQoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUp
OwotCi0gICAgICAgIGlmICghaW5mby5uZWVkc1NwaWxsKCkpIHsKLSAgICAgICAgICAgIC8vIGl0
J3MgZWl0aGVyIGEgY29uc3RhbnQgb3IgaXQncyBhbHJlYWR5IGJlZW4gc3BpbGxlZAotICAgICAg
ICAgICAgQVNTRVJUKGF0KGluZm8ubm9kZUluZGV4KCkpLmhhc0NvbnN0YW50KCkgfHwgaW5mby5z
cGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXROb25lKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gaXQncyBuZWl0aGVyIGEgY29uc3RhbnQgbm9y
IGhhcyBpdCBiZWVuIHNwaWxsZWQuCi0gICAgICAgIEFTU0VSVCghYXQoaW5mby5ub2RlSW5kZXgo
KSkuaGFzQ29uc3RhbnQoKSk7Ci0gICAgICAgIEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgPT0g
RGF0YUZvcm1hdE5vbmUpOwotICAgICAgICBBU1NFUlQoaW5mby5mcHIoKSA9PSBzb3VyY2UpOwot
Ci0gICAgICAgIG1faml0LnN0b3JlRG91YmxlKHNvdXJjZSwgSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3Ioc3BpbGxNZSkpOwotICAgIH0KLQotICAgIHZvaWQgc2lsZW50RmlsbEdQUihWaXJ0dWFsUmVn
aXN0ZXIgc3BpbGxNZSwgR1BSUmVnIHRhcmdldCkKLSAgICB7Ci0gICAgICAgIEdlbmVyYXRpb25J
bmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tzcGlsbE1lXTsKLQotICAgICAgICBOb2RlSW5k
ZXggbm9kZUluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0
KG5vZGVJbmRleCk7Ci0gICAgICAgIEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0
YUZvcm1hdE5vbmUpOwotICAgICAgICBBU1NFUlQoaW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERh
dGFGb3JtYXREb3VibGUpOwotICAgICAgICBEYXRhRm9ybWF0IHJlZ2lzdGVyRm9ybWF0ID0gaW5m
by5yZWdpc3RlckZvcm1hdCgpOwotCi0gICAgICAgIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRh
Rm9ybWF0SW50ZWdlcikgewotICAgICAgICAgICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gdGFyZ2V0
KTsKLSAgICAgICAgICAgIEFTU0VSVChpc0pTSW50ZWdlcihpbmZvLnJlZ2lzdGVyRm9ybWF0KCkp
KTsKLSAgICAgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpOwotICAgICAgICAgICAgICAgIG1f
aml0Lm1vdmUoSW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4KSksIHRhcmdldCk7
Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29t
cGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSksIHRhcmdldCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRh
Rm9ybWF0Qm9vbGVhbikgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgICAgICBBU1NF
UlQoaW5mby5ncHIoKSA9PSB0YXJnZXQpOwotICAgICAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3Rh
bnQoKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChpc0Jvb2xlYW5Db25zdGFudChub2RlSW5k
ZXgpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKEltbTMyKHZhbHVlT2ZCb29sZWFuQ29u
c3RhbnQobm9kZUluZGV4KSksIHRhcmdldCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSksIHRh
cmdldCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCkgewotICAgICAgICAgICAgQVNT
RVJUKGluZm8uZ3ByKCkgPT0gdGFyZ2V0KTsKLSAgICAgICAgICAgIGlmIChub2RlLmlzQ29uc3Rh
bnQoKSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFu
dChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZS5pc0NlbGwoKSk7Ci0g
ICAgICAgICAgICAgICAgbV9qaXQubW92ZShJbW1QdHIodmFsdWUuYXNDZWxsKCkpLCB0YXJnZXQp
OwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRD
b21waWxlcjo6cGF5bG9hZEZvcihzcGlsbE1lKSwgdGFyZ2V0KTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0
U3RvcmFnZSkgewotICAgICAgICAgICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gdGFyZ2V0KTsKLSAg
ICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSks
IHRhcmdldCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NF
UlQocmVnaXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHRhcmdldCk7Ci0gICAgICAgIGlmIChub2RlLmhh
c0NvbnN0YW50KCkpCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlT2ZKU0NvbnN0YW50QXNJ
bW1QdHIobm9kZUluZGV4KSwgdGFyZ2V0KTsKLSAgICAgICAgZWxzZSBpZiAoaW5mby5zcGlsbEZv
cm1hdCgpID09IERhdGFGb3JtYXRJbnRlZ2VyKSB7Ci0gICAgICAgICAgICBBU1NFUlQocmVnaXN0
ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcik7Ci0gICAgICAgICAgICBtX2ppdC5sb2Fk
MzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSksIHRhcmdldCk7Ci0gICAgICAgICAg
ICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHRhcmdldCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUp
IHsKLSAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SlNEb3Vi
bGUpOwotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihz
cGlsbE1lKSwgdGFyZ2V0KTsKLSAgICAgICAgICAgIG1faml0LnN1YlB0cihHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIHRhcmdldCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
bV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSwgdGFyZ2V0KTsK
LSNlbHNlCi0gICAgICAgIEFTU0VSVChpbmZvLnRhZ0dQUigpID09IHRhcmdldCB8fCBpbmZvLnBh
eWxvYWRHUFIoKSA9PSB0YXJnZXQpOwotICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7
Ci0gICAgICAgICAgICBKU1ZhbHVlIHYgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwot
ICAgICAgICAgICAgbV9qaXQubW92ZShpbmZvLnRhZ0dQUigpID09IHRhcmdldCA/IEltbTMyKHYu
dGFnKCkpIDogSW1tMzIodi5wYXlsb2FkKCkpLCB0YXJnZXQpOwotICAgICAgICB9IGVsc2UgaWYg
KGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SW50ZWdlcikgewotICAgICAgICAgICAg
QVNTRVJUKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRKU0ludGVnZXIpOwotICAgICAgICAg
ICAgaWYgKGluZm8ucGF5bG9hZEdQUigpID09IHRhcmdldCkgCi0gICAgICAgICAgICAgICAgbV9q
aXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpLCB0YXJnZXQpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSwgdGFyZ2V0KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBt
X2ppdC5sb2FkMzIoaW5mby50YWdHUFIoKSA9PSB0YXJnZXQgPyBKSVRDb21waWxlcjo6dGFnRm9y
KHNwaWxsTWUpIDogSklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSksIHRhcmdldCk7Ci0j
ZW5kaWYKLSAgICB9Ci0KLSAgICB2b2lkIHNpbGVudEZpbGxGUFIoVmlydHVhbFJlZ2lzdGVyIHNw
aWxsTWUsIEdQUlJlZyBjYW5UcmFtcGxlLCBGUFJSZWcgdGFyZ2V0KQotICAgIHsKLSAgICAgICAg
R2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3NwaWxsTWVdOwotICAgICAg
ICBBU1NFUlQoaW5mby5mcHIoKSA9PSB0YXJnZXQpOwotCi0gICAgICAgIE5vZGVJbmRleCBub2Rl
SW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIE5v
ZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgICAgICBBU1NFUlQoaW5mby5yZWdpc3RlckZv
cm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpOwotCi0gICAgICAgIGlmIChub2RlLmhhc0NvbnN0
YW50KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkp
OwotICAgICAgICAgICAgbV9qaXQubW92ZShJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPih2YWx1
ZU9mTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkpLCBjYW5UcmFtcGxlKTsKLSAgICAgICAgICAg
IG1faml0Lm1vdmVQdHJUb0RvdWJsZShjYW5UcmFtcGxlLCB0YXJnZXQpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaW5mby5zcGlsbEZvcm1h
dCgpICE9IERhdGFGb3JtYXROb25lICYmIGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0
RG91YmxlKSB7Ci0gICAgICAgICAgICAvLyBpdCB3YXMgYWxyZWFkeSBzcGlsbGVkIHByZXZpb3Vz
bHkgYW5kIG5vdCBhcyBhIGRvdWJsZSwgd2hpY2ggbWVhbnMgd2UgbmVlZCB1bmJveGluZy4KLSAg
ICAgICAgICAgIEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpOwotICAg
ICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSwg
Y2FuVHJhbXBsZSk7Ci0gICAgICAgICAgICB1bmJveERvdWJsZShjYW5UcmFtcGxlLCB0YXJnZXQp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9qaXQubG9hZERv
dWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSwgdGFyZ2V0KTsKLSNlbGlmIFVT
RShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIFVOVVNFRF9QQVJBTShjYW5UcmFtcGxlKTsKLSAgICAg
ICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlIHx8IGlu
Zm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SlNEb3VibGUpOwotICAgICAgICBtX2pp
dC5lbWl0TG9hZERvdWJsZShub2RlSW5kZXgsIHRhcmdldCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAg
ICB2b2lkIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEdQUlJlZyBleGNsdWRlLCBHUFJSZWcgZXhj
bHVkZTIgPSBJbnZhbGlkR1BSUmVnKQotICAgIHsKLSAgICAgICAgZm9yIChncHJfaXRlcmF0b3Ig
aXRlciA9IG1fZ3Bycy5iZWdpbigpOyBpdGVyICE9IG1fZ3Bycy5lbmQoKTsgKytpdGVyKSB7Ci0g
ICAgICAgICAgICBHUFJSZWcgZ3ByID0gaXRlci5yZWdJRCgpOwotICAgICAgICAgICAgaWYgKGl0
ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgJiYgZ3ByICE9IGV4Y2x1ZGUgJiYg
Z3ByICE9IGV4Y2x1ZGUyKQotICAgICAgICAgICAgICAgIHNpbGVudFNwaWxsR1BSKGl0ZXIubmFt
ZSgpLCBncHIpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBt
X2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAg
ICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAgICAg
ICAgICAgc2lsZW50U3BpbGxGUFIoaXRlci5uYW1lKCksIGl0ZXIucmVnSUQoKSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgdm9pZCBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhGUFJSZWcgZXhjbHVk
ZSkKLSAgICB7Ci0gICAgICAgIGZvciAoZ3ByX2l0ZXJhdG9yIGl0ZXIgPSBtX2dwcnMuYmVnaW4o
KTsgaXRlciAhPSBtX2dwcnMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAgaWYgKGl0ZXIu
bmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgc2lsZW50
U3BpbGxHUFIoaXRlci5uYW1lKCksIGl0ZXIucmVnSUQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
Zm9yIChmcHJfaXRlcmF0b3IgaXRlciA9IG1fZnBycy5iZWdpbigpOyBpdGVyICE9IG1fZnBycy5l
bmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBGUFJSZWcgZnByID0gaXRlci5yZWdJRCgpOwot
ICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgJiYg
ZnByICE9IGV4Y2x1ZGUpCi0gICAgICAgICAgICAgICAgc2lsZW50U3BpbGxGUFIoaXRlci5uYW1l
KCksIGZwcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIHNpbGVudEZpbGxBbGxSZWdp
c3RlcnMoR1BSUmVnIGV4Y2x1ZGUsIEdQUlJlZyBleGNsdWRlMiA9IEludmFsaWRHUFJSZWcpCi0g
ICAgewotICAgICAgICBHUFJSZWcgY2FuVHJhbXBsZSA9IEdQUkluZm86OnJlZ1QwOwotICAgICAg
ICBpZiAoZXhjbHVkZSA9PSBHUFJJbmZvOjpyZWdUMCkKLSAgICAgICAgICAgIGNhblRyYW1wbGUg
PSBHUFJJbmZvOjpyZWdUMTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0
ZXIgPSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgewotICAg
ICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAg
ICAgICAgICAgICAgc2lsZW50RmlsbEZQUihpdGVyLm5hbWUoKSwgY2FuVHJhbXBsZSwgaXRlci5y
ZWdJRCgpKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGdwcl9pdGVyYXRvciBpdGVyID0gbV9n
cHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9ncHJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAg
IEdQUlJlZyBncHIgPSBpdGVyLnJlZ0lEKCk7Ci0gICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkg
IT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlciAmJiBncHIgIT0gZXhjbHVkZSAmJiBncHIgIT0gZXhj
bHVkZTIpCi0gICAgICAgICAgICAgICAgc2lsZW50RmlsbEdQUihpdGVyLm5hbWUoKSwgZ3ByKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICB2b2lkIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoRlBSUmVn
IGV4Y2x1ZGUpCi0gICAgewotICAgICAgICBHUFJSZWcgY2FuVHJhbXBsZSA9IEdQUkluZm86OnJl
Z1QwOwotICAgICAgICAKLSAgICAgICAgZm9yIChmcHJfaXRlcmF0b3IgaXRlciA9IG1fZnBycy5i
ZWdpbigpOyBpdGVyICE9IG1fZnBycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBGUFJS
ZWcgZnByID0gaXRlci5yZWdJRCgpOwotICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IElu
dmFsaWRWaXJ0dWFsUmVnaXN0ZXIgJiYgZnByICE9IGV4Y2x1ZGUpCi0gICAgICAgICAgICAgICAg
c2lsZW50RmlsbEZQUihpdGVyLm5hbWUoKSwgY2FuVHJhbXBsZSwgZnByKTsKLSAgICAgICAgfQot
ICAgICAgICBmb3IgKGdwcl9pdGVyYXRvciBpdGVyID0gbV9ncHJzLmJlZ2luKCk7IGl0ZXIgIT0g
bV9ncHJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJ
bnZhbGlkVmlydHVhbFJlZ2lzdGVyKQotICAgICAgICAgICAgICAgIHNpbGVudEZpbGxHUFIoaXRl
ci5uYW1lKCksIGl0ZXIucmVnSUQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGVz
ZSBtZXRob2RzIGNvbnZlcnQgYmV0d2VlbiBkb3VibGVzLCBhbmQgZG91YmxlcyBib3hlZCBhbmQg
SlNWYWx1ZXMuCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBHUFJSZWcgYm94RG91YmxlKEZQUlJl
ZyBmcHIsIEdQUlJlZyBncHIpCi0gICAgewotICAgICAgICByZXR1cm4gbV9qaXQuYm94RG91Ymxl
KGZwciwgZ3ByKTsKLSAgICB9Ci0gICAgRlBSUmVnIHVuYm94RG91YmxlKEdQUlJlZyBncHIsIEZQ
UlJlZyBmcHIpCi0gICAgewotICAgICAgICByZXR1cm4gbV9qaXQudW5ib3hEb3VibGUoZ3ByLCBm
cHIpOwotICAgIH0KLSAgICBHUFJSZWcgYm94RG91YmxlKEZQUlJlZyBmcHIpCi0gICAgewotICAg
ICAgICByZXR1cm4gYm94RG91YmxlKGZwciwgYWxsb2NhdGUoKSk7Ci0gICAgfQotI2VsaWYgVVNF
KEpTVkFMVUUzMl82NCkKLSAgICB2b2lkIGJveERvdWJsZShGUFJSZWcgZnByLCBHUFJSZWcgdGFn
R1BSLCBHUFJSZWcgcGF5bG9hZEdQUikKLSAgICB7Ci0gICAgICAgIG1faml0LmJveERvdWJsZShm
cHIsIHRhZ0dQUiwgcGF5bG9hZEdQUik7Ci0gICAgfQotICAgIHZvaWQgdW5ib3hEb3VibGUoR1BS
UmVnIHRhZ0dQUiwgR1BSUmVnIHBheWxvYWRHUFIsIEZQUlJlZyBmcHIsIEZQUlJlZyBzY3JhdGNo
RlBSKQotICAgIHsKLSAgICAgICAgbV9qaXQudW5ib3hEb3VibGUodGFnR1BSLCBwYXlsb2FkR1BS
LCBmcHIsIHNjcmF0Y2hGUFIpOwotICAgIH0KLSNlbmRpZgotCi0gICAgLy8gU3BpbGwgYSBWaXJ0
dWFsUmVnaXN0ZXIgdG8gdGhlIFJlZ2lzdGVyRmlsZS4KLSAgICB2b2lkIHNwaWxsKFZpcnR1YWxS
ZWdpc3RlciBzcGlsbE1lKQotICAgIHsKLSAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBt
X2dlbmVyYXRpb25JbmZvW3NwaWxsTWVdOwotCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAg
ICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSkgLy8gaXQgaGFz
IGJlZW4gc3BpbGxlZC4gSlMgdmFsdWVzIHdoaWNoIGhhdmUgdHdvIEdQUnMgY2FuIHJlYWNoIGhl
cmUKLSAgICAgICAgICAgIHJldHVybjsKLSNlbmRpZgotICAgICAgICAvLyBDaGVjayB0aGUgR2Vu
ZXJhdGlvbkluZm8gdG8gc2VlIGlmIHRoaXMgdmFsdWUgbmVlZCB3cml0aW5nCi0gICAgICAgIC8v
IHRvIHRoZSBSZWdpc3RlckZpbGUgLSBpZiBub3QsIG1hcmsgaXQgYXMgc3BpbGxlZCAmIHJldHVy
bi4KLSAgICAgICAgaWYgKCFpbmZvLm5lZWRzU3BpbGwoKSkgewotICAgICAgICAgICAgaW5mby5z
ZXRTcGlsbGVkKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBE
YXRhRm9ybWF0IHNwaWxsRm9ybWF0ID0gaW5mby5yZWdpc3RlckZvcm1hdCgpOwotICAgICAgICBz
d2l0Y2ggKHNwaWxsRm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6IHsK
LSAgICAgICAgICAgIC8vIFRoaXMgaXMgc3BlY2lhbCwgc2luY2UgaXQncyBub3QgYSBKUyB2YWx1
ZSAtIGFzIGluIGl0J3Mgbm90IHZpc2libGUgdG8gSlMKLSAgICAgICAgICAgIC8vIGNvZGUuCi0g
ICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihpbmZvLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVz
c0ZvcihzcGlsbE1lKSk7Ci0gICAgICAgICAgICBpbmZvLnNwaWxsKERhdGFGb3JtYXRTdG9yYWdl
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOiB7Ci0gICAgICAgICAgICBtX2ppdC5zdG9y
ZURvdWJsZShpbmZvLmZwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSk7Ci0g
ICAgICAgICAgICBpbmZvLnNwaWxsKERhdGFGb3JtYXREb3VibGUpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50
ZWdlcjogewotICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihpbmZvLmdwcigpLCBKSVRDb21waWxl
cjo6cGF5bG9hZEZvcihzcGlsbE1lKSk7Ci0gICAgICAgICAgICBpbmZvLnNwaWxsKERhdGFGb3Jt
YXRJbnRlZ2VyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgaGFuZGxlcyBKU1ZhbHVl
cywgaW50MzJzLCBhbmQgY2VsbHMuCi0gICAgICAgICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgPT0g
RGF0YUZvcm1hdENlbGwgfHwgc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBHUFJSZWcgcmVnID0gaW5mby5ncHIoKTsKLSAgICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gYm94IGludDMyIGFuZCBjZWxsIHZhbHVlcyAuLi4KLSAgICAgICAgICAgIC8v
IGJ1dCBvbiBKU1ZBTFVFNjQgYm94aW5nIGEgY2VsbCBpcyBhIG5vLW9wIQotICAgICAgICAgICAg
aWYgKHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKQotICAgICAgICAgICAgICAgIG1f
aml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgLy8gU3BpbGwgdGhlIHZhbHVlLCBhbmQgcmVjb3JkIGl0IGFzIHNw
aWxsZWQgaW4gaXRzIGJveGVkIGZvcm0uCi0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWcs
IEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKLSAgICAgICAgICAgIGluZm8uc3Bp
bGwoKERhdGFGb3JtYXQpKHNwaWxsRm9ybWF0IHwgRGF0YUZvcm1hdEpTKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBjYXNlIERhdGFGb3Jt
YXREb3VibGU6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOiB7Ci0gICAgICAgICAg
ICAvLyBPbiBKU1ZBTFVFMzJfNjQgYm94aW5nIGEgZG91YmxlIGlzIGEgbm8tb3AuCi0gICAgICAg
ICAgICBtX2ppdC5zdG9yZURvdWJsZShpbmZvLmZwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zv
cihzcGlsbE1lKSk7Ci0gICAgICAgICAgICBpbmZvLnNwaWxsKERhdGFGb3JtYXRKU0RvdWJsZSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgY29kZSBoYW5kbGVzIEpTVmFsdWVzLCBpbnQzMnMsIGNl
bGxzIGFuZCBib29sZWFucy4KLSAgICAgICAgICAgIEFTU0VSVChzcGlsbEZvcm1hdCA9PSBEYXRh
Rm9ybWF0SW50ZWdlciB8fCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCB8fCBzcGlsbEZv
cm1hdCA9PSBEYXRhRm9ybWF0Qm9vbGVhbiB8fCAoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMp
KTsKLQotICAgICAgICAgICAgaWYgKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSB7IC8vIEpT
VmFsdWUKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKGluZm8udGFnR1BSKCksIEpJVENv
bXBpbGVyOjp0YWdGb3Ioc3BpbGxNZSkpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIo
aW5mby5wYXlsb2FkR1BSKCksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpKTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHJlZyA9IGluZm8uZ3By
KCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihyZWcsIEpJVENvbXBpbGVyOjpwYXls
b2FkRm9yKHNwaWxsTWUpKTsKLSAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGJveCBpbnQz
MnMsIGJvb2xlYW5zIGFuZCBjZWxscy4KLSAgICAgICAgICAgICAgICBpZiAoc3BpbGxGb3JtYXQg
PT0gRGF0YUZvcm1hdEludGVnZXIpCi0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgSklUQ29tcGlsZXI6OnRhZ0ZvcihzcGls
bE1lKSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1h
dENlbGwpCi0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpLCBKSVRDb21waWxlcjo6dGFnRm9yKHNwaWxsTWUpKTsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLCBKSVRDb21waWxlcjo6dGFnRm9yKHNwaWxsTWUpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGluZm8uc3BpbGwoKERhdGFGb3JtYXQpKHNwaWxs
Rm9ybWF0IHwgRGF0YUZvcm1hdEpTKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAg
ICAgICAgfQotICAgIH0KLSAgICAKLSAgICBib29sIGlzU3RyaWN0SW50MzIoTm9kZUluZGV4KTsK
LSAgICAKLSAgICBib29sIGlzS25vd25JbnRlZ2VyKE5vZGVJbmRleCk7Ci0gICAgYm9vbCBpc0tu
b3duTnVtZXJpYyhOb2RlSW5kZXgpOwotICAgIGJvb2wgaXNLbm93bkNlbGwoTm9kZUluZGV4KTsK
LSAgICAKLSAgICBib29sIGlzS25vd25Ob3RJbnRlZ2VyKE5vZGVJbmRleCk7Ci0gICAgYm9vbCBp
c0tub3duTm90TnVtYmVyKE5vZGVJbmRleCk7Ci0KLSAgICBib29sIGlzS25vd25Cb29sZWFuKE5v
ZGVJbmRleCk7Ci0KLSAgICBib29sIGlzS25vd25Ob3RDZWxsKE5vZGVJbmRleCk7Ci0gICAgCi0g
ICAgLy8gQ2hlY2tzL2FjY2Vzc29ycyBmb3IgY29uc3RhbnQgdmFsdWVzLgotICAgIGJvb2wgaXND
b25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5pc0NvbnN0YW50KG5v
ZGVJbmRleCk7IH0KLSAgICBib29sIGlzSlNDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7
IHJldHVybiBtX2ppdC5pc0pTQ29uc3RhbnQobm9kZUluZGV4KTsgfQotICAgIGJvb2wgaXNJbnQz
MkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LmlzSW50MzJDb25z
dGFudChub2RlSW5kZXgpOyB9Ci0gICAgYm9vbCBpc0RvdWJsZUNvbnN0YW50KE5vZGVJbmRleCBu
b2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LmlzRG91YmxlQ29uc3RhbnQobm9kZUluZGV4KTsgfQot
ICAgIGJvb2wgaXNOdW1iZXJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBt
X2ppdC5pc051bWJlckNvbnN0YW50KG5vZGVJbmRleCk7IH0KLSAgICBib29sIGlzQm9vbGVhbkNv
bnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LmlzQm9vbGVhbkNvbnN0
YW50KG5vZGVJbmRleCk7IH0KLSAgICBib29sIGlzRnVuY3Rpb25Db25zdGFudChOb2RlSW5kZXgg
bm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5pc0Z1bmN0aW9uQ29uc3RhbnQobm9kZUluZGV4KTsg
fQotICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkg
eyByZXR1cm4gbV9qaXQudmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4KTsgfQotICAgIGRv
dWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4g
bV9qaXQudmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGVJbmRleCk7IH0KLSNpZiBVU0UoSlNWQUxV
RTMyXzY0KQotICAgIHZvaWQqIGFkZHJlc3NPZkRvdWJsZUNvbnN0YW50KE5vZGVJbmRleCBub2Rl
SW5kZXgpIHsgcmV0dXJuIG1faml0LmFkZHJlc3NPZkRvdWJsZUNvbnN0YW50KG5vZGVJbmRleCk7
IH0KLSNlbmRpZgotICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJ
bmRleCkgeyByZXR1cm4gbV9qaXQudmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsgfQotICAg
IGJvb2wgdmFsdWVPZkJvb2xlYW5Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVy
biBtX2ppdC52YWx1ZU9mQm9vbGVhbkNvbnN0YW50KG5vZGVJbmRleCk7IH0KLSAgICBKU0Z1bmN0
aW9uKiB2YWx1ZU9mRnVuY3Rpb25Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVy
biBtX2ppdC52YWx1ZU9mRnVuY3Rpb25Db25zdGFudChub2RlSW5kZXgpOyB9Ci0gICAgYm9vbCBp
c051bGxDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgaWYgKCFp
c0NvbnN0YW50KG5vZGVJbmRleCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmlzTnVsbCgpOwotICAgIH0KLQot
ICAgIElkZW50aWZpZXIqIGlkZW50aWZpZXIodW5zaWduZWQgaW5kZXgpCi0gICAgewotICAgICAg
ICByZXR1cm4gJm1faml0LmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKGluZGV4KTsKLSAgICB9Ci0K
LSAgICAvLyBTcGlsbCBhbGwgVmlydHVhbFJlZ2lzdGVycyBiYWNrIHRvIHRoZSBSZWdpc3RlckZp
bGUuCi0gICAgdm9pZCBmbHVzaFJlZ2lzdGVycygpCi0gICAgewotICAgICAgICBmb3IgKGdwcl9p
dGVyYXRvciBpdGVyID0gbV9ncHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9ncHJzLmVuZCgpOyArK2l0
ZXIpIHsKLSAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKSB7Ci0gICAgICAgICAgICAgICAgc3BpbGwoaXRlci5uYW1lKCkpOwotICAgICAgICAgICAg
ICAgIGl0ZXIucmVsZWFzZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZv
ciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5k
KCk7ICsraXRlcikgewotICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0
dWFsUmVnaXN0ZXIpIHsKLSAgICAgICAgICAgICAgICBzcGlsbChpdGVyLm5hbWUoKSk7Ci0gICAg
ICAgICAgICAgICAgaXRlci5yZWxlYXNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgLy8gVXNlZCB0byBBU1NFUlQgZmx1c2hSZWdpc3Rl
cnMoKSBoYXMgYmVlbiBjYWxsZWQgcHJpb3IgdG8KLSAgICAvLyBjYWxsaW5nIG91dCBmcm9tIEpJ
VCBjb2RlIHRvIGEgQyBoZWxwZXIgZnVuY3Rpb24uCi0gICAgYm9vbCBpc0ZsdXNoZWQoKQotICAg
IHsKLSAgICAgICAgZm9yIChncHJfaXRlcmF0b3IgaXRlciA9IG1fZ3Bycy5iZWdpbigpOyBpdGVy
ICE9IG1fZ3Bycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkg
IT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChmcHJfaXRlcmF0b3IgaXRlciA9IG1fZnBycy5iZWdp
bigpOyBpdGVyICE9IG1fZnBycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAoaXRl
ci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotI2VuZGlm
Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIgdmFsdWVP
ZkpTQ29uc3RhbnRBc0ltbVB0cihOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAg
cmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlT2ZKU0Nv
bnN0YW50KG5vZGVJbmRleCkpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIC8vIEhlbHBlciBmdW5j
dGlvbnMgdG8gZW5hYmxlIGNvZGUgc2hhcmluZyBpbiBpbXBsZW1lbnRhdGlvbnMgb2YgYml0L3No
aWZ0IG9wcy4KLSAgICB2b2lkIGJpdE9wKE5vZGVUeXBlIG9wLCBpbnQzMl90IGltbSwgR1BSUmVn
IG9wMSwgR1BSUmVnIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAob3ApIHsKLSAgICAg
ICAgY2FzZSBCaXRBbmQ6Ci0gICAgICAgICAgICBtX2ppdC5hbmQzMihJbW0zMihpbW0pLCBvcDEs
IHJlc3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCaXRPcjoKLSAgICAg
ICAgICAgIG1faml0Lm9yMzIoSW1tMzIoaW1tKSwgb3AxLCByZXN1bHQpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQml0WG9yOgotICAgICAgICAgICAgbV9qaXQueG9yMzIoSW1t
MzIoaW1tKSwgb3AxLCByZXN1bHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICB2b2lkIGJpdE9wKE5vZGVUeXBlIG9wLCBHUFJSZWcgb3AxLCBHUFJSZWcgb3AyLCBHUFJS
ZWcgcmVzdWx0KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEJp
dEFuZDoKLSAgICAgICAgICAgIG1faml0LmFuZDMyKG9wMSwgb3AyLCByZXN1bHQpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQml0T3I6Ci0gICAgICAgICAgICBtX2ppdC5vcjMy
KG9wMSwgb3AyLCByZXN1bHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQml0
WG9yOgotICAgICAgICAgICAgbV9qaXQueG9yMzIob3AxLCBvcDIsIHJlc3VsdCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICB9Ci0gICAgfQotICAgIHZvaWQgc2hpZnRPcChOb2RlVHlwZSBvcCwg
R1BSUmVnIG9wMSwgaW50MzJfdCBzaGlmdEFtb3VudCwgR1BSUmVnIHJlc3VsdCkKLSAgICB7Ci0g
ICAgICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBCaXRSU2hpZnQ6Ci0gICAgICAgICAg
ICBtX2ppdC5yc2hpZnQzMihvcDEsIEltbTMyKHNoaWZ0QW1vdW50KSwgcmVzdWx0KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAgICAgICAgIG1faml0
LmxzaGlmdDMyKG9wMSwgSW1tMzIoc2hpZnRBbW91bnQpLCByZXN1bHQpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQml0VVJTaGlmdDoKLSAgICAgICAgICAgIG1faml0LnVyc2hp
ZnQzMihvcDEsIEltbTMyKHNoaWZ0QW1vdW50KSwgcmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgdm9pZCBzaGlmdE9wKE5vZGVUeXBlIG9wLCBHUFJSZWcgb3Ax
LCBHUFJSZWcgc2hpZnRBbW91bnQsIEdQUlJlZyByZXN1bHQpCi0gICAgewotICAgICAgICBzd2l0
Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgQml0UlNoaWZ0OgotICAgICAgICAgICAgbV9qaXQucnNo
aWZ0MzIob3AxLCBzaGlmdEFtb3VudCwgcmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAgICAgICAgIG1faml0LmxzaGlmdDMyKG9wMSwgc2hp
ZnRBbW91bnQsIHJlc3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCaXRV
UlNoaWZ0OgotICAgICAgICAgICAgbV9qaXQudXJzaGlmdDMyKG9wMSwgc2hpZnRBbW91bnQsIHJl
c3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIFJl
dHVybnMgdGhlIG5vZGUgaW5kZXggb2YgdGhlIGJyYW5jaCBub2RlIGlmIHBlZXBob2xlIGlzIG9r
YXksIE5vTm9kZSBvdGhlcndpc2UuCi0gICAgTm9kZUluZGV4IGRldGVjdFBlZXBIb2xlQnJhbmNo
KCkKLSAgICB7Ci0gICAgICAgIE5vZGVJbmRleCBsYXN0Tm9kZUluZGV4ID0gbV9qaXQuZ3JhcGgo
KS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+ZW5kIC0gMTsKLQotICAgICAgICAvLyBDaGVjayB0aGF0IG5v
IGludGVydmVuaW5nIG5vZGVzIHdpbGwgYmUgZ2VuZXJhdGVkLgotICAgICAgICBmb3IgKE5vZGVJ
bmRleCBpbmRleCA9IG1fY29tcGlsZUluZGV4ICsgMTsgaW5kZXggPCBsYXN0Tm9kZUluZGV4OyAr
K2luZGV4KSB7Ci0gICAgICAgICAgICBpZiAoYXQoaW5kZXgpLnNob3VsZEdlbmVyYXRlKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENo
ZWNrIGlmIHRoZSBsYXN0Tm9kZSBpcyBhIGJyYW5jaCBvbiB0aGlzIG5vZGUuCi0gICAgICAgIE5v
ZGUmIGxhc3ROb2RlID0gYXQobGFzdE5vZGVJbmRleCk7Ci0gICAgICAgIHJldHVybiBsYXN0Tm9k
ZS5vcCA9PSBCcmFuY2ggJiYgbGFzdE5vZGUuY2hpbGQxKCkgPT0gbV9jb21waWxlSW5kZXggPyBs
YXN0Tm9kZUluZGV4IDogTm9Ob2RlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIG5vblNwZWN1bGF0
aXZlVmFsdWVUb051bWJlcihOb2RlJik7Ci0gICAgdm9pZCBub25TcGVjdWxhdGl2ZVZhbHVlVG9J
bnQzMihOb2RlJik7Ci0gICAgdm9pZCBub25TcGVjdWxhdGl2ZVVJbnQzMlRvTnVtYmVyKE5vZGUm
KTsKLQotICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVLbm93bkNvbnN0YW50QXJpdGhPcChOb2RlVHlw
ZSBvcCwgTm9kZUluZGV4IHJlZ0NoaWxkLCBOb2RlSW5kZXggaW1tQ2hpbGQsIGJvb2wgY29tbXV0
ZSk7Ci0gICAgdm9pZCBub25TcGVjdWxhdGl2ZUJhc2ljQXJpdGhPcChOb2RlVHlwZSBvcCwgTm9k
ZSYpOwotICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fj
aGVkR2V0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIHNjcmF0
Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQ
YXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwgTm9kZVR5cGUgPSBHZXRCeUlkKTsKLSAg
ICB2b2lkIGNhY2hlZFB1dEJ5SWQoR1BSUmVnIGJhc2UsIEdQUlJlZyB2YWx1ZSwgTm9kZUluZGV4
IHZhbHVlSW5kZXgsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LCBQdXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVy
OjpKdW1wKCkpOwotICAgIHZvaWQgY2FjaGVkR2V0TWV0aG9kKEdQUlJlZyBiYXNlR1BSLCBHUFJS
ZWcgcmVzdWx0R1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgp
KTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FjaGVk
R2V0QnlJZChHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyByZXN1bHRUYWdHUFIsIEdQUlJl
ZyByZXN1bHRQYXlsb2FkR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6
SnVtcCgpLCBOb2RlVHlwZSA9IEdldEJ5SWQpOwotICAgIHZvaWQgY2FjaGVkUHV0QnlJZChHUFJS
ZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwgR1BSUmVnIHZhbHVlUGF5bG9h
ZEdQUiwgTm9kZUluZGV4IHZhbHVlSW5kZXgsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdl
dCA9IEpJVENvbXBpbGVyOjpKdW1wKCkpOwotICAgIHZvaWQgY2FjaGVkR2V0TWV0aG9kKEdQUlJl
ZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHJlc3VsdFRhZ0dQUiwgR1BSUmVnIHJlc3VsdFBheWxv
YWRHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRD
b21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCkpOwotI2Vu
ZGlmCi0KLSAgICB2b2lkIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbChOb2Rl
SW5kZXggb3BlcmFuZCwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7Ci0gICAgdm9pZCBub25TcGVjdWxh
dGl2ZVBlZXBob2xlQnJhbmNoTnVsbChOb2RlSW5kZXggb3BlcmFuZCwgTm9kZUluZGV4IGJyYW5j
aE5vZGVJbmRleCwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7Ci0gICAgYm9vbCBub25TcGVjdWxhdGl2
ZUNvbXBhcmVOdWxsKE5vZGUmLCBOb2RlSW5kZXggb3BlcmFuZCwgYm9vbCBpbnZlcnQgPSBmYWxz
ZSk7Ci0gICAgCi0gICAgdm9pZCBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUmLCBO
b2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRp
dGlvbiwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKTsKLSAgICB2b2lkIG5vblNw
ZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKE5vZGUmLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRp
b25hbENvbmRpdGlvbiwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKTsKLSAgICBi
b29sIG5vblNwZWN1bGF0aXZlQ29tcGFyZShOb2RlJiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9u
YWxDb25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7Ci0gICAgCi0g
ICAgdm9pZCBub25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEoTm9kZSYsIE5vZGVJbmRleCBi
cmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwotICAgIHZvaWQgbm9uU3BlY3Vs
YXRpdmVOb25QZWVwaG9sZVN0cmljdEVxKE5vZGUmLCBib29sIGludmVydCA9IGZhbHNlKTsKLSAg
ICBib29sIG5vblNwZWN1bGF0aXZlU3RyaWN0RXEoTm9kZSYsIGJvb2wgaW52ZXJ0ID0gZmFsc2Up
OwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFkZHJlc3NPZkNhbGxEYXRhKGlu
dCBpZHgpCi0gICAgewotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIChtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVS
ZWdpc3RlcnMgKyBpZHgpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSk7Ci0g
ICAgfQotCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MgdGFnT2ZDYWxsRGF0YShpbnQgaWR4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAobV9qaXQuY29k
ZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICsgaWR4KSAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnRhZykpOwotICAgIH0KLQotICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIHBh
eWxvYWRPZkNhbGxEYXRhKGludCBpZHgpCi0gICAgewotICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIChtX2ppdC5jb2RlQmxv
Y2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKyBpZHgpICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMucGF5bG9hZCkpOwotICAgIH0KLSNlbmRpZgotCi0gICAgdm9pZCBlbWl0Q2FsbChOb2Rl
Jik7Ci0gICAgCi0gICAgLy8gQ2FsbGVkIG9uY2UgYSBub2RlIGhhcyBjb21wbGV0ZWQgY29kZSBn
ZW5lcmF0aW9uIGJ1dCBwcmlvciB0byBzZXR0aW5nCi0gICAgLy8gaXRzIHJlc3VsdCwgdG8gZnJl
ZSB1cCBpdHMgY2hpbGRyZW4uIChUaGlzIG11c3QgaGFwcGVuIHByaW9yIHRvIHNldHRpbmcKLSAg
ICAvLyB0aGUgbm9kZXMgcmVzdWx0LCBzaW5jZSB0aGUgbm9kZSBtYXkgaGF2ZSB0aGUgc2FtZSBW
aXJ0dWFsUmVnaXN0ZXIgYXMKLSAgICAvLyBhIGNoaWxkLCBhbmQgYXMgc3VjaCB3aWxsIHVzZSB0
aGUgc2FtZSBHZW5lcmF0aW9JbmZvKS4KLSAgICB2b2lkIHVzZUNoaWxkcmVuKE5vZGUmKTsKLQot
ICAgIC8vIFRoZXNlIG1ldGhvZCBjYWxsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdGhlIEdlbmVyYXRp
b25JbmZvCi0gICAgLy8gdG8gZGVzY3JpYmUgdGhlIHJlc3VsdCBvZiBhbiBvcGVyYXRpb24uCi0g
ICAgdm9pZCBpbnRlZ2VyUmVzdWx0KEdQUlJlZyByZWcsIE5vZGVJbmRleCBub2RlSW5kZXgsIERh
dGFGb3JtYXQgZm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXIsIFVzZUNoaWxkcmVuTW9kZSBtb2Rl
ID0gQ2FsbFVzZUNoaWxkcmVuKQotICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJ
bmRleCk7Ci0gICAgICAgIGlmIChtb2RlID09IENhbGxVc2VDaGlsZHJlbikKLSAgICAgICAgICAg
IHVzZUNoaWxkcmVuKG5vZGUpOwotCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOwotICAgICAgICBHZW5lcmF0aW9uSW5mbyYg
aW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKLQotICAgICAgICBpZiAo
Zm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKSB7Ci0gICAgICAgICAgICBtX2ppdC5qaXRBc3Nl
cnRJc0ludDMyKHJlZyk7Ci0gICAgICAgICAgICBtX2dwcnMucmV0YWluKHJlZywgdmlydHVhbFJl
Z2lzdGVyLCBTcGlsbE9yZGVySW50ZWdlcik7Ci0gICAgICAgICAgICBpbmZvLmluaXRJbnRlZ2Vy
KG5vZGVJbmRleCwgbm9kZS5yZWZDb3VudCgpLCByZWcpOwotICAgICAgICB9IGVsc2UgewotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXRK
U0ludGVnZXIpOwotICAgICAgICAgICAgbV9qaXQuaml0QXNzZXJ0SXNKU0ludDMyKHJlZyk7Ci0g
ICAgICAgICAgICBtX2dwcnMucmV0YWluKHJlZywgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVy
SlMpOwotICAgICAgICAgICAgaW5mby5pbml0SlNWYWx1ZShub2RlSW5kZXgsIG5vZGUucmVmQ291
bnQoKSwgcmVnLCBmb3JtYXQpOwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9Ci0gICAgdm9p
ZCBpbnRlZ2VyUmVzdWx0KEdQUlJlZyByZWcsIE5vZGVJbmRleCBub2RlSW5kZXgsIFVzZUNoaWxk
cmVuTW9kZSBtb2RlKQotICAgIHsKLSAgICAgICAgaW50ZWdlclJlc3VsdChyZWcsIG5vZGVJbmRl
eCwgRGF0YUZvcm1hdEludGVnZXIsIG1vZGUpOwotICAgIH0KLSAgICB2b2lkIG5vUmVzdWx0KE5v
ZGVJbmRleCBub2RlSW5kZXgsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVu
KQotICAgIHsKLSAgICAgICAgaWYgKG1vZGUgPT0gVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4
KTsKLSAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7Ci0gICAgfQotICAgIHZvaWQgY2VsbFJlc3Vs
dChHUFJSZWcgcmVnLCBOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9
IENhbGxVc2VDaGlsZHJlbikKLSAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5k
ZXgpOwotICAgICAgICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4pCi0gICAgICAgICAgICB1
c2VDaGlsZHJlbihub2RlKTsKLQotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgbV9ncHJzLnJldGFpbihyZWcs
IHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNlbGwpOwotICAgICAgICBHZW5lcmF0aW9uSW5m
byYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKLSAgICAgICAgaW5m
by5pbml0Q2VsbChub2RlSW5kZXgsIG5vZGUucmVmQ291bnQoKSwgcmVnKTsKLSAgICB9Ci0gICAg
dm9pZCBib29sZWFuUmVzdWx0KEdQUlJlZyByZWcsIE5vZGVJbmRleCBub2RlSW5kZXgsIFVzZUNo
aWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVuKQotICAgIHsKLSAgICAgICAgTm9kZSYg
bm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgICAgIGlmIChtb2RlID09IENhbGxVc2VDaGlsZHJl
bikKLSAgICAgICAgICAgIHVzZUNoaWxkcmVuKG5vZGUpOwotCi0gICAgICAgIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOwotICAgICAgICBt
X2dwcnMucmV0YWluKHJlZywgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQm9vbGVhbik7Ci0g
ICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVn
aXN0ZXJdOwotICAgICAgICBpbmZvLmluaXRCb29sZWFuKG5vZGVJbmRleCwgbm9kZS5yZWZDb3Vu
dCgpLCByZWcpOwotICAgIH0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHZvaWQganNWYWx1ZVJl
c3VsdChHUFJSZWcgcmVnLCBOb2RlSW5kZXggbm9kZUluZGV4LCBEYXRhRm9ybWF0IGZvcm1hdCA9
IERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCi0g
ICAgewotICAgICAgICBpZiAoZm9ybWF0ID09IERhdGFGb3JtYXRKU0ludGVnZXIpCi0gICAgICAg
ICAgICBtX2ppdC5qaXRBc3NlcnRJc0pTSW50MzIocmVnKTsKLSAgICAgICAgCi0gICAgICAgIE5v
ZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgICAgICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hp
bGRyZW4pCi0gICAgICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKLQotICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAg
ICAgbV9ncHJzLnJldGFpbihyZWcsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckpTKTsKLSAg
ICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdp
c3Rlcl07Ci0gICAgICAgIGluZm8uaW5pdEpTVmFsdWUobm9kZUluZGV4LCBub2RlLnJlZkNvdW50
KCksIHJlZywgZm9ybWF0KTsKLSAgICB9Ci0gICAgdm9pZCBqc1ZhbHVlUmVzdWx0KEdQUlJlZyBy
ZWcsIE5vZGVJbmRleCBub2RlSW5kZXgsIFVzZUNoaWxkcmVuTW9kZSBtb2RlKQotICAgIHsKLSAg
ICAgICAganNWYWx1ZVJlc3VsdChyZWcsIG5vZGVJbmRleCwgRGF0YUZvcm1hdEpTLCBtb2RlKTsK
LSAgICB9Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIHZvaWQganNWYWx1ZVJlc3VsdChH
UFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9hZCwgTm9kZUluZGV4IG5vZGVJbmRleCwgRGF0YUZvcm1h
dCBmb3JtYXQgPSBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNo
aWxkcmVuKQotICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAg
ICAgIGlmIChtb2RlID09IENhbGxVc2VDaGlsZHJlbikKLSAgICAgICAgICAgIHVzZUNoaWxkcmVu
KG5vZGUpOwotCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2Rl
LnZpcnR1YWxSZWdpc3RlcigpOwotICAgICAgICBtX2dwcnMucmV0YWluKHRhZywgdmlydHVhbFJl
Z2lzdGVyLCBTcGlsbE9yZGVySlMpOwotICAgICAgICBtX2dwcnMucmV0YWluKHBheWxvYWQsIHZp
cnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckpTKTsKLSAgICAgICAgR2VuZXJhdGlvbkluZm8mIGlu
Zm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0gICAgICAgIGluZm8uaW5p
dEpTVmFsdWUobm9kZUluZGV4LCBub2RlLnJlZkNvdW50KCksIHRhZywgcGF5bG9hZCwgZm9ybWF0
KTsKLSAgICB9Ci0gICAgdm9pZCBqc1ZhbHVlUmVzdWx0KEdQUlJlZyB0YWcsIEdQUlJlZyBwYXls
b2FkLCBOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VDaGlsZHJlbk1vZGUgbW9kZSkKLSAgICB7Ci0g
ICAgICAgIGpzVmFsdWVSZXN1bHQodGFnLCBwYXlsb2FkLCBub2RlSW5kZXgsIERhdGFGb3JtYXRK
UywgbW9kZSk7Ci0gICAgfQotI2VuZGlmCi0gICAgdm9pZCBzdG9yYWdlUmVzdWx0KEdQUlJlZyBy
ZWcsIE5vZGVJbmRleCBub2RlSW5kZXgsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNo
aWxkcmVuKQotICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAg
ICAgIGlmIChtb2RlID09IENhbGxVc2VDaGlsZHJlbikKLSAgICAgICAgICAgIHVzZUNoaWxkcmVu
KG5vZGUpOwotICAgICAgICAKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgIG1fZ3Bycy5yZXRhaW4ocmVnLCB2
aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTdG9yYWdlKTsKLSAgICAgICAgR2VuZXJhdGlvbklu
Zm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0gICAgICAgIGlu
Zm8uaW5pdFN0b3JhZ2Uobm9kZUluZGV4LCBub2RlLnJlZkNvdW50KCksIHJlZyk7Ci0gICAgfQot
ICAgIHZvaWQgZG91YmxlUmVzdWx0KEZQUlJlZyByZWcsIE5vZGVJbmRleCBub2RlSW5kZXgsIFVz
ZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVuKQotICAgIHsKLSAgICAgICAgTm9k
ZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgICAgIGlmIChtb2RlID09IENhbGxVc2VDaGls
ZHJlbikKLSAgICAgICAgICAgIHVzZUNoaWxkcmVuKG5vZGUpOwotCi0gICAgICAgIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOwotICAgICAg
ICBtX2ZwcnMucmV0YWluKHJlZywgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsK
LSAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxS
ZWdpc3Rlcl07Ci0gICAgICAgIGluZm8uaW5pdERvdWJsZShub2RlSW5kZXgsIG5vZGUucmVmQ291
bnQoKSwgcmVnKTsKLSAgICB9Ci0gICAgdm9pZCBpbml0Q29uc3RhbnRJbmZvKE5vZGVJbmRleCBu
b2RlSW5kZXgpCi0gICAgewotICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRl
eCkgfHwgaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpIHx8IGlzSlNDb25zdGFudChub2RlSW5k
ZXgpKTsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgICAgIG1fZ2Vu
ZXJhdGlvbkluZm9bbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKV0uaW5pdENvbnN0YW50KG5vZGVJbmRl
eCwgbm9kZS5yZWZDb3VudCgpKTsKLSAgICB9Ci0KLSAgICAvLyBUaGVzZSBtZXRob2RzIHVzZWQg
dG8gc29ydCBhcmd1bWVudHMgaW50byB0aGUgY29ycmVjdCByZWdpc3RlcnMuCi0gICAgLy8gT24g
WDg2IHdlIHVzZSBjZGVjbCBjYWxsaW5nIGNvbnZlbnRpb25zLCB3aGljaCBwYXNzIGFsbCBhcmd1
bWVudHMgb24gdGhlCi0gICAgLy8gc3RhY2suIE9uIG90aGVyIGFyY2hpdGVjdHVyZXMgd2UgbWF5
IG5lZWQgdG8gc29ydCB2YWx1ZXMgaW50byB0aGUKLSAgICAvLyBjb3JyZWN0IHJlZ2lzdGVycy4K
LSNpZiAhTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUwotICAgIHVuc2lnbmVkIG1fY2FsbEFy
Z3VtZW50SW5kZXg7Ci0gICAgdm9pZCByZXNldENhbGxBcmd1bWVudHMoKSB7IG1fY2FsbEFyZ3Vt
ZW50SW5kZXggPSAwOyB9Ci0KLSAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSB1c2luZyBpbnRlcm5h
bGx5IHRvIGltcGxlbWVudCB0aGUgY2FsbE9wZXJhdGlvbiBtZXRob2RzLgotICAgIHZvaWQgYWRk
Q2FsbEFyZ3VtZW50KEdQUlJlZyB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIG1faml0LnBva2UodmFs
dWUsIG1fY2FsbEFyZ3VtZW50SW5kZXgrKyk7Ci0gICAgfQotICAgIHZvaWQgYWRkQ2FsbEFyZ3Vt
ZW50KFRydXN0ZWRJbW0zMiBpbW0pCi0gICAgewotICAgICAgICBtX2ppdC5wb2tlKGltbSwgbV9j
YWxsQXJndW1lbnRJbmRleCsrKTsKLSAgICB9Ci0gICAgdm9pZCBhZGRDYWxsQXJndW1lbnQoVHJ1
c3RlZEltbVB0ciBwb2ludGVyKQotICAgIHsKLSAgICAgICAgbV9qaXQucG9rZShwb2ludGVyLCBt
X2NhbGxBcmd1bWVudEluZGV4KyspOwotICAgIH0KLSAgICB2b2lkIGFkZENhbGxBcmd1bWVudChG
UFJSZWcgdmFsdWUpCi0gICAgewotICAgICAgICBtX2ppdC5zdG9yZURvdWJsZSh2YWx1ZSwgSklU
Q29tcGlsZXI6OkFkZHJlc3MoSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX2Nh
bGxBcmd1bWVudEluZGV4ICogc2l6ZW9mKHZvaWQqKSkpOwotICAgICAgICBtX2NhbGxBcmd1bWVu
dEluZGV4ICs9IHNpemVvZihkb3VibGUpIC8gc2l6ZW9mKHZvaWQqKTsKLSAgICB9Ci0KLSAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHMoRlBSUmVnIGFyZzEpCi0gICAgewotICAg
ICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKLSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzEp
OwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50cyhGUFJSZWcg
YXJnMSwgRlBSUmVnIGFyZzIpCi0gICAgewotICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsK
LSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzEpOwotICAgICAgICBhZGRDYWxsQXJndW1lbnQo
YXJnMik7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzRXhl
Y1N0YXRlKCkKLSAgICB7Ci0gICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOwotICAgICAgICBh
ZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIH0KLQotICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFy
ZzEpCi0gICAgewotICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKLSAgICAgICAgYWRkQ2Fs
bEFyZ3VtZW50KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgYWRkQ2FsbEFy
Z3VtZW50KGFyZzEpOwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0ciBhcmcxKQotICAgIHsKLSAgICAgICAgcmVz
ZXRDYWxsQXJndW1lbnRzKCk7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsKLSAgICB9Ci0K
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJl
ZyBhcmcxLCBHUFJSZWcgYXJnMikKLSAgICB7Ci0gICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygp
OwotICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwot
ICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChh
cmcyKTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBUcnVzdGVkSW1tUHRyIGFyZzIpCi0gICAgewotICAgICAg
ICByZXNldENhbGxBcmd1bWVudHMoKTsKLSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzEpOwotICAg
ICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMik7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSB2
b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIgYXJnMSwgVHJ1c3Rl
ZEltbTMyIGFyZzIpCi0gICAgewotICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKLSAgICAg
ICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAg
YWRkQ2FsbEFyZ3VtZW50KGFyZzEpOwotICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMik7Ci0g
ICAgfQotCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShUcnVzdGVkSW1tUHRyIGFyZzEsIFRydXN0ZWRJbW1QdHIgYXJnMikKLSAgICB7Ci0gICAgICAg
IHJlc2V0Q2FsbEFyZ3VtZW50cygpOwotICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7Ci0gICAg
ICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwg
R1BSUmVnIGFyZzMpCi0gICAgewotICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKLSAgICAg
ICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAg
YWRkQ2FsbEFyZ3VtZW50KGFyZzEpOwotICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMik7Ci0g
ICAgICAgIGFkZENhbGxBcmd1bWVudChhcmczKTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJn
MiwgVHJ1c3RlZEltbVB0ciBhcmczKQotICAgIHsKLSAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRz
KCk7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7
Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsKLSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50
KGFyZzIpOwotICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMyk7Ci0gICAgfQotCi0gICAgQUxX
QVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczLCBHUFJSZWcgYXJnNCkKLSAgICB7Ci0gICAgICAgIHJl
c2V0Q2FsbEFyZ3VtZW50cygpOwotICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7Ci0gICAgICAg
IGFkZENhbGxBcmd1bWVudChhcmcyKTsKLSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMpOwot
ICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnNCk7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElO
RSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFy
ZzIsIEdQUlJlZyBhcmczLCBUcnVzdGVkSW1tUHRyIGFyZzQpCi0gICAgewotICAgICAgICByZXNl
dENhbGxBcmd1bWVudHMoKTsKLSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzEpOwotICAgICAgICBh
ZGRDYWxsQXJndW1lbnQoYXJnMik7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChhcmczKTsKLSAg
ICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzQpOwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
LCBUcnVzdGVkSW1tMzIgYXJnMywgVHJ1c3RlZEltbTMyIGFyZzQpCi0gICAgewotICAgICAgICBy
ZXNldENhbGxBcmd1bWVudHMoKTsKLSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzEpOwotICAgICAg
ICBhZGRDYWxsQXJndW1lbnQoYXJnMik7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChhcmczKTsK
LSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzQpOwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFyZzEsIFRy
dXN0ZWRJbW0zMiBhcmcyLCBHUFJSZWcgYXJnMywgR1BSUmVnIGFyZzQpCi0gICAgewotICAgICAg
ICByZXNldENhbGxBcmd1bWVudHMoKTsKLSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzEpOwotICAg
ICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMik7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcz
KTsKLSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzQpOwotICAgIH0KLQotICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyLCBHUFJSZWcgYXJnMywgR1BSUmVnIGFyZzQsIEdQUlJlZyBhcmc1KQotICAgIHsKLSAg
ICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsK
LSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzIpOwotICAgICAgICBhZGRDYWxsQXJndW1lbnQo
YXJnMyk7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc0KTsKLSAgICAgICAgYWRkQ2FsbEFy
Z3VtZW50KGFyZzUpOwotICAgIH0KLSNlbmRpZiAvLyAhTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lT
VEVSUwotICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIHN1aXRhYmxlIGZvciBhbnkgY2FsbGluZyBj
b252ZW50aW9uIHRoYXQgcHJvdmlkZXMgZm9yCi0gICAgLy8gYXQgbGVhc3QgNCBhcmd1bWVudCBy
ZWdpc3RlcnMsIGUuZy4gWDg2XzY0LCBBUk12Ny4KLSNpZiBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVH
SVNURVJTID49IDQKLSAgICB0ZW1wbGF0ZTxHUFJSZWcgZGVzdEEsIEdQUlJlZyBkZXN0Qj4KLSAg
ICB2b2lkIHNldHVwVHdvU3R1YkFyZ3MoR1BSUmVnIHNyY0EsIEdQUlJlZyBzcmNCKQotICAgIHsK
LSAgICAgICAgLy8gQXNzdW1pbmcgdGhhdCBzcmNBICE9IHNyY0IsIHRoZXJlIGFyZSA3IGludGVy
ZXN0aW5nIHN0YXRlcyB0aGUgcmVnaXN0ZXJzIG1heSBiZSBpbjoKLSAgICAgICAgLy8gKDEpIGJv
dGggYXJlIGFscmVhZHkgaW4gYXJnIHJlZ3MsIHRoZSByaWdodCB3YXkgYXJvdW5kLgotICAgICAg
ICAvLyAoMikgYm90aCBhcmUgYWxyZWFkeSBpbiBhcmcgcmVncywgdGhlIHdyb25nIHdheSBhcm91
bmQuCi0gICAgICAgIC8vICgzKSBuZWl0aGVyIGFyZSBjdXJyZW50bHkgaW4gYXJnIHJlZ2lzdGVy
cy4KLSAgICAgICAgLy8gKDQpIHNyY0EgaW4gaW4gaXRzIGNvcnJlY3QgcmVnLgotICAgICAgICAv
LyAoNSkgc3JjQSBpbiBpbiB0aGUgaW5jb3JyZWN0IHJlZy4KLSAgICAgICAgLy8gKDYpIHNyY0Ig
aW4gaW4gaXRzIGNvcnJlY3QgcmVnLgotICAgICAgICAvLyAoNykgc3JjQiBpbiBpbiB0aGUgaW5j
b3JyZWN0IHJlZy4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhlIHRyaXZpYWwgYXBwcm9hY2gg
aXMgdG8gc2ltcGx5IGVtaXQgdHdvIG1vdmVzLCB0byBwdXQgc3JjQSBpbiBwbGFjZSB0aGVuIHNy
Y0IgaW4KLSAgICAgICAgLy8gcGxhY2UgKHRoZSBNYWNyb0Fzc2VtYmxlciB3aWxsIG9taXQgcmVk
dW5kYW50IG1vdmVzKS4gVGhpcyBhcHBvcmFjaCB3aWxsIGJlIHNhZmUgaW4KLSAgICAgICAgLy8g
Y2FzZXMgMSwgMywgNCwgNSwgNiwgYW5kIGluIGNhc2VzIHdoZXJlIHNyY0E9PXNyY0IuIFRoZSB0
d28gcHJvYmxlbSBjYXNlcyBhcmUgMgotICAgICAgICAvLyAocmVxdWlyZXMgYSBzd2FwKSBhbmQg
NyAobXVzdCBtb3ZlIHNyY0IgZmlyc3QsIHRvIGF2b2lkIHRyYW1wbGluZy4pCi0KLSAgICAgICAg
aWYgKHNyY0IgIT0gZGVzdEEpIHsKLSAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgZWFzeSBjYXNl
cyAtIHR3byBzaW1wbGUgbW92ZXMuCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKHNyY0EsIGRlc3RB
KTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoc3JjQiwgZGVzdEIpOwotICAgICAgICB9IGVsc2Ug
aWYgKHNyY0EgIT0gZGVzdEIpIHsKLSAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgbm9uLXN3YXAg
Y2FzZSAtIGp1c3QgcHV0IHNyY0IgaW4gcGxhY2UgZmlyc3QuCi0gICAgICAgICAgICBtX2ppdC5t
b3ZlKHNyY0IsIGRlc3RCKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoc3JjQSwgZGVzdEEpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1faml0LnN3YXAoZGVzdEEsIGRlc3RCKTsKLSAg
ICB9Ci0jaWYgQ1BVKFg4Nl82NCkKLSAgICB0ZW1wbGF0ZTxGUFJSZWcgZGVzdEEsIEZQUlJlZyBk
ZXN0Qj4KLSAgICB2b2lkIHNldHVwVHdvU3R1YkFyZ3MoRlBSUmVnIHNyY0EsIEZQUlJlZyBzcmNC
KQotICAgIHsKLSAgICAgICAgLy8gQXNzdW1pbmcgdGhhdCBzcmNBICE9IHNyY0IsIHRoZXJlIGFy
ZSA3IGludGVyZXN0aW5nIHN0YXRlcyB0aGUgcmVnaXN0ZXJzIG1heSBiZSBpbjoKLSAgICAgICAg
Ly8gKDEpIGJvdGggYXJlIGFscmVhZHkgaW4gYXJnIHJlZ3MsIHRoZSByaWdodCB3YXkgYXJvdW5k
LgotICAgICAgICAvLyAoMikgYm90aCBhcmUgYWxyZWFkeSBpbiBhcmcgcmVncywgdGhlIHdyb25n
IHdheSBhcm91bmQuCi0gICAgICAgIC8vICgzKSBuZWl0aGVyIGFyZSBjdXJyZW50bHkgaW4gYXJn
IHJlZ2lzdGVycy4KLSAgICAgICAgLy8gKDQpIHNyY0EgaW4gaW4gaXRzIGNvcnJlY3QgcmVnLgot
ICAgICAgICAvLyAoNSkgc3JjQSBpbiBpbiB0aGUgaW5jb3JyZWN0IHJlZy4KLSAgICAgICAgLy8g
KDYpIHNyY0IgaW4gaW4gaXRzIGNvcnJlY3QgcmVnLgotICAgICAgICAvLyAoNykgc3JjQiBpbiBp
biB0aGUgaW5jb3JyZWN0IHJlZy4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhlIHRyaXZpYWwg
YXBwcm9hY2ggaXMgdG8gc2ltcGx5IGVtaXQgdHdvIG1vdmVzLCB0byBwdXQgc3JjQSBpbiBwbGFj
ZSB0aGVuIHNyY0IgaW4KLSAgICAgICAgLy8gcGxhY2UgKHRoZSBNYWNyb0Fzc2VtYmxlciB3aWxs
IG9taXQgcmVkdW5kYW50IG1vdmVzKS4gVGhpcyBhcHBvcmFjaCB3aWxsIGJlIHNhZmUgaW4KLSAg
ICAgICAgLy8gY2FzZXMgMSwgMywgNCwgNSwgNiwgYW5kIGluIGNhc2VzIHdoZXJlIHNyY0E9PXNy
Y0IuIFRoZSB0d28gcHJvYmxlbSBjYXNlcyBhcmUgMgotICAgICAgICAvLyAocmVxdWlyZXMgYSBz
d2FwKSBhbmQgNyAobXVzdCBtb3ZlIHNyY0IgZmlyc3QsIHRvIGF2b2lkIHRyYW1wbGluZy4pCi0K
LSAgICAgICAgaWYgKHNyY0IgIT0gZGVzdEEpIHsKLSAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUg
ZWFzeSBjYXNlcyAtIHR3byBzaW1wbGUgbW92ZXMuCi0gICAgICAgICAgICBtX2ppdC5tb3ZlRG91
YmxlKHNyY0EsIGRlc3RBKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoc3JjQiwgZGVz
dEIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBp
ZiAoc3JjQSAhPSBkZXN0QikgewotICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBub24tc3dhcCBj
YXNlIC0ganVzdCBwdXQgc3JjQiBpbiBwbGFjZSBmaXJzdC4KLSAgICAgICAgICAgIG1faml0Lm1v
dmVEb3VibGUoc3JjQiwgZGVzdEIpOwotICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShzcmNB
LCBkZXN0QSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NF
UlQoc3JjQiA9PSBkZXN0QSAmJiBzcmNBID09IGRlc3RCKTsKLSAgICAgICAgLy8gTmVlZCB0byBz
d2FwOyBwaWNrIGEgdGVtcG9yYXJ5IHJlZ2lzdGVyLgotICAgICAgICBGUFJSZWcgdGVtcDsKLSAg
ICAgICAgaWYgKGRlc3RBICE9IEZQUkluZm86OmFyZ3VtZW50RlBSMyAmJiBkZXN0QSAhPSBGUFJJ
bmZvOjphcmd1bWVudEZQUjMpCi0gICAgICAgICAgICB0ZW1wID0gRlBSSW5mbzo6YXJndW1lbnRG
UFIzOwotICAgICAgICBlbHNlIGlmIChkZXN0QSAhPSBGUFJJbmZvOjphcmd1bWVudEZQUjIgJiYg
ZGVzdEEgIT0gRlBSSW5mbzo6YXJndW1lbnRGUFIyKQotICAgICAgICAgICAgdGVtcCA9IEZQUklu
Zm86OmFyZ3VtZW50RlBSMjsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoZGVz
dEEgIT0gRlBSSW5mbzo6YXJndW1lbnRGUFIxICYmIGRlc3RBICE9IEZQUkluZm86OmFyZ3VtZW50
RlBSMSk7Ci0gICAgICAgICAgICB0ZW1wID0gRlBSSW5mbzo6YXJndW1lbnRGUFIxOwotICAgICAg
ICB9Ci0gICAgICAgIG1faml0Lm1vdmVEb3VibGUoZGVzdEEsIHRlbXApOwotICAgICAgICBtX2pp
dC5tb3ZlRG91YmxlKGRlc3RCLCBkZXN0QSk7Ci0gICAgICAgIG1faml0Lm1vdmVEb3VibGUodGVt
cCwgZGVzdEIpOwotICAgIH0KLSNlbmRpZgotICAgIHZvaWQgc2V0dXBTdHViQXJndW1lbnRzKEdQ
UlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKLSAgICB7Ci0gICAgICAgIHNldHVwVHdvU3R1YkFyZ3M8
R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjI+KGFyZzEsIGFyZzIp
OwotICAgIH0KLSAgICB2b2lkIHNldHVwU3R1YkFyZ3VtZW50cyhHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIsIEdQUlJlZyBhcmczKQotICAgIHsKLSAgICAgICAgLy8gSWYgbmVpdGhlciBvZiBhcmcy
L2FyZzMgYXJlIGluIG91ciB3YXksIHRoZW4gd2UgY2FuIG1vdmUgYXJnMSBpbnRvIHBsYWNlLgot
ICAgICAgICAvLyBUaGVuIHdlIGNhbiB1c2Ugc2V0dXBUd29TdHViQXJncyB0byBmaXggYXJnMi9h
cmczLgotICAgICAgICBpZiAoYXJnMiAhPSBHUFJJbmZvOjphcmd1bWVudEdQUjEgJiYgYXJnMyAh
PSBHUFJJbmZvOjphcmd1bWVudEdQUjEpIHsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoYXJnMSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAgICAgIHNldHVwVHdvU3R1YkFyZ3M8R1BS
SW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjM+KGFyZzIsIGFyZzMpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgbmVpdGhlciBv
ZiBhcmcxL2FyZzMgYXJlIGluIG91ciB3YXksIHRoZW4gd2UgY2FuIG1vdmUgYXJnMiBpbnRvIHBs
YWNlLgotICAgICAgICAvLyBUaGVuIHdlIGNhbiB1c2Ugc2V0dXBUd29TdHViQXJncyB0byBmaXgg
YXJnMS9hcmczLgotICAgICAgICBpZiAoYXJnMSAhPSBHUFJJbmZvOjphcmd1bWVudEdQUjIgJiYg
YXJnMyAhPSBHUFJJbmZvOjphcmd1bWVudEdQUjIpIHsKLSAgICAgICAgICAgIG1faml0Lm1vdmUo
YXJnMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKLSAgICAgICAgICAgIHNldHVwVHdvU3R1YkFy
Z3M8R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjM+KGFyZzEsIGFy
ZzMpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgbmVp
dGhlciBvZiBhcmcxL2FyZzIgYXJlIGluIG91ciB3YXksIHRoZW4gd2UgY2FuIG1vdmUgYXJnMyBp
bnRvIHBsYWNlLgotICAgICAgICAvLyBUaGVuIHdlIGNhbiB1c2Ugc2V0dXBUd29TdHViQXJncyB0
byBmaXggYXJnMS9hcmcyLgotICAgICAgICBpZiAoYXJnMSAhPSBHUFJJbmZvOjphcmd1bWVudEdQ
UjMgJiYgYXJnMiAhPSBHUFJJbmZvOjphcmd1bWVudEdQUjMpIHsKLSAgICAgICAgICAgIG1faml0
Lm1vdmUoYXJnMywgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKLSAgICAgICAgICAgIHNldHVwVHdv
U3R1YkFyZ3M8R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjphcmd1bWVudEdQUjI+KGFy
ZzEsIGFyZzIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
SWYgd2UgZ2V0IGhlcmUsIHdlIGhhdmVuJ3QgYmVlbiBhYmxlIHRvIG1vdmUgYW55IG9mIGFyZzEv
YXJnMi9hcmczLgotICAgICAgICAvLyBTaW5jZSBhbGwgdGhyZWUgYXJlIGJsb2NrZWQsIHRoZW4g
YWxsIHRocmVlIG11c3QgYWxyZWFkeSBiZSBpbiB0aGUgYXJndW1lbnQgcmVnaXN0ZXIuCi0gICAg
ICAgIC8vIEJ1dCBhcmUgdGhleSBpbiB0aGUgcmlnaHQgb25lcz8KLQotICAgICAgICAvLyBGaXJz
dCwgZW5zdXJlIGFyZzEgaXMgaW4gcGxhY2UuCi0gICAgICAgIGlmIChhcmcxICE9IEdQUkluZm86
OmFyZ3VtZW50R1BSMSkgewotICAgICAgICAgICAgbV9qaXQuc3dhcChhcmcxLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpOwotCi0gICAgICAgICAgICAvLyBJZiBhcmcxIHdhc24ndCBpbiBhcmd1bWVu
dEdQUjEsIG9uZSBvZiBhcmcyL2FyZzMgbXVzdCBiZS4KLSAgICAgICAgICAgIEFTU0VSVChhcmcy
ID09IEdQUkluZm86OmFyZ3VtZW50R1BSMSB8fCBhcmczID09IEdQUkluZm86OmFyZ3VtZW50R1BS
MSk7Ci0gICAgICAgICAgICAvLyBJZiBhcmcyIHdhcyBpbiBhcmd1bWVudEdQUjEgaXQgbm8gbG9u
Z2VyIGlzIChkdWUgdG8gdGhlIHN3YXApLgotICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGFyZzMg
bXVzdCBoYXZlIGJlZW4uIE1hcmsgaGltIGFzIG1vdmVkLgotICAgICAgICAgICAgaWYgKGFyZzIg
PT0gR1BSSW5mbzo6YXJndW1lbnRHUFIxKQotICAgICAgICAgICAgICAgIGFyZzIgPSBhcmcxOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGFyZzMgPSBhcmcxOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gRWl0aGVyIGFyZzIgJiBhcmczIG5lZWQgc3dhcHBpbmcsIG9yIHdlJ3Jl
IGFsbCBkb25lLgotICAgICAgICBBU1NFUlQoKGFyZzIgPT0gR1BSSW5mbzo6YXJndW1lbnRHUFIy
IHx8IGFyZzMgPT0gR1BSSW5mbzo6YXJndW1lbnRHUFIzKQotICAgICAgICAgICAgfHwgKGFyZzIg
PT0gR1BSSW5mbzo6YXJndW1lbnRHUFIzIHx8IGFyZzMgPT0gR1BSSW5mbzo6YXJndW1lbnRHUFIy
KSk7Ci0KLSAgICAgICAgaWYgKGFyZzIgIT0gR1BSSW5mbzo6YXJndW1lbnRHUFIyKQotICAgICAg
ICAgICAgbV9qaXQuc3dhcChHUFJJbmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50
R1BSMyk7Ci0gICAgfQotCi0jaWYgQ1BVKFg4Nl82NCkKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
c2V0dXBBcmd1bWVudHMoRlBSUmVnIGFyZzEpCi0gICAgewotICAgICAgICBtX2ppdC5tb3ZlRG91
YmxlKGFyZzEsIEZQUkluZm86OmFyZ3VtZW50RlBSMCk7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lO
TElORSB2b2lkIHNldHVwQXJndW1lbnRzKEZQUlJlZyBhcmcxLCBGUFJSZWcgYXJnMikKLSAgICB7
Ci0gICAgICAgIHNldHVwVHdvU3R1YkFyZ3M8RlBSSW5mbzo6YXJndW1lbnRGUFIwLCBGUFJJbmZv
Ojphcmd1bWVudEZQUjE+KGFyZzEsIGFyZzIpOwotICAgIH0KLSNlbHNlCi0gICAgQUxXQVlTX0lO
TElORSB2b2lkIHNldHVwQXJndW1lbnRzKEZQUlJlZyBhcmcxKQotICAgIHsKLSAgICAgICAgbV9q
aXQuYXNzZW1ibGVyKCkudm1vdihHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSwgYXJnMSk7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJn
dW1lbnRzKEZQUlJlZyBhcmcxLCBGUFJSZWcgYXJnMikKLSAgICB7Ci0gICAgICAgIG1faml0LmFz
c2VtYmxlcigpLnZtb3YoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEsIGFyZzEpOwotICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS52bW92KEdQUkluZm86OmFyZ3Vt
ZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIzLCBhcmcyKTsKLSAgICB9Ci0jZW5kaWYKLQot
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpCi0gICAgewot
ICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApOwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEpCi0gICAgewotICAgICAgICBtX2ppdC5tb3Zl
KGFyZzEsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIG1faml0Lm1vdmUoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgfQotCi0g
ICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVk
SW1tUHRyIGFyZzEpCi0gICAgewotICAgICAgICBtX2ppdC5tb3ZlKGFyZzEsIEdQUkluZm86OmFy
Z3VtZW50R1BSMSk7Ci0gICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSB2
b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIp
Ci0gICAgewotICAgICAgICBzZXR1cFN0dWJBcmd1bWVudHMoYXJnMSwgYXJnMik7Ci0gICAgICAg
IG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgVHJ1c3RlZEltbVB0ciBhcmcyKQotICAgIHsKLSAgICAg
ICAgbV9qaXQubW92ZShhcmcxLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgICAgICBtX2pp
dC5tb3ZlKGFyZzIsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgICAgIG1faml0Lm1vdmUo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAg
fQotCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShU
cnVzdGVkSW1tUHRyIGFyZzEsIEdQUlJlZyBhcmcyKQotICAgIHsKLSAgICAgICAgbV9qaXQubW92
ZShhcmcyLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOyAvLyBNb3ZlIHRoaXMgZmlyc3QsIHNvIHNl
dHRpbmcgYXJnMSBkb2VzIG5vdCB0cmFtcGxlIQotICAgICAgICBtX2ppdC5tb3ZlKGFyZzEsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgfQotCi0gICAgQUxXQVlT
X0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIgYXJn
MSwgVHJ1c3RlZEltbTMyIGFyZzIpCi0gICAgewotICAgICAgICBtX2ppdC5tb3ZlKGFyZzEsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIG1faml0Lm1vdmUoYXJnMiwgR1BSSW5mbzo6
YXJndW1lbnRHUFIyKTsKLSAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIgYXJnMSwgVHJ1
c3RlZEltbVB0ciBhcmcyKQotICAgIHsKLSAgICAgICAgbV9qaXQubW92ZShhcmcxLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjEpOwotICAgICAgICBtX2ppdC5tb3ZlKGFyZzIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMik7Ci0gICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSB2b2lk
IHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQ
UlJlZyBhcmczKQotICAgIHsKLSAgICAgICAgc2V0dXBTdHViQXJndW1lbnRzKGFyZzEsIGFyZzIs
IGFyZzMpOwotICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBz
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBUcnVz
dGVkSW1tMzIgYXJnMykKLSAgICB7Ci0gICAgICAgIHNldHVwU3R1YkFyZ3VtZW50cyhhcmcxLCBh
cmcyKTsKLSAgICAgICAgbV9qaXQubW92ZShhcmczLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwot
ICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApOwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBUcnVzdGVkSW1tUHRy
IGFyZzMpCi0gICAgewotICAgICAgICBzZXR1cFN0dWJBcmd1bWVudHMoYXJnMSwgYXJnMik7Ci0g
ICAgICAgIG1faml0Lm1vdmUoYXJnMywgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKLSAgICAgICAg
bV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKFRydXN0ZWRJbW0zMiBhcmcxLCBUcnVzdGVkSW1tMzIgYXJnMiwgR1BSUmVnIGFy
ZzMpCi0gICAgewotICAgICAgICBtX2ppdC5tb3ZlKGFyZzEsIEdQUkluZm86OmFyZ3VtZW50R1BS
MSk7Ci0gICAgICAgIG1faml0Lm1vdmUoYXJnMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKLSAg
ICAgICAgbV9qaXQubW92ZShhcmczLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwotICAgICAgICBt
X2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOwotICAgIH0KLQotI2VuZGlmIC8vIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgPj0g
NAotICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIHN1aXRhYmxlIGZvciBhbnkgY2FsbGluZyBjb252
ZW50aW9uIHRoYXQgcHJvdmlkZXMgZm9yCi0gICAgLy8gZXhhY3RseSA0IGFyZ3VtZW50IHJlZ2lz
dGVycywgZS5nLiBBUk12Ny4KLSNpZiBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTID09IDQK
LSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJl
ZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMsIEdQUlJlZyBhcmc0KQotICAgIHsKLSAg
ICAgICAgbV9qaXQucG9rZShhcmc0KTsKLSAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBz
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBUcnVz
dGVkSW1tMzIgYXJnMywgVHJ1c3RlZEltbTMyIGFyZzQpCi0gICAgewotICAgICAgICBtX2ppdC5w
b2tlKGFyZzQpOwotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJn
MiwgYXJnMyk7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIgYXJnMSwgVHJ1c3RlZEltbTMyIGFyZzIsIEdQUlJl
ZyBhcmczLCBHUFJSZWcgYXJnNCkKLSAgICB7Ci0gICAgICAgIG1faml0LnBva2UoYXJnNCk7Ci0g
ICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKLSAg
ICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMsIFRydXN0ZWRJbW1QdHIgYXJn
NCkKLSAgICB7Ci0gICAgICAgIG1faml0LnBva2UoYXJnNCk7Ci0gICAgICAgIHNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKLSAgICB9Ci0KLSAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJS
ZWcgYXJnMiwgR1BSUmVnIGFyZzMsIEdQUlJlZyBhcmc0LCBHUFJSZWcgYXJnNSkKLSAgICB7Ci0g
ICAgICAgIG1faml0LnBva2UoYXJnNSwgMSk7Ci0gICAgICAgIG1faml0LnBva2UoYXJnNCk7Ci0g
ICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKLSAg
ICB9Ci0jZW5kaWYgLy8gTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyA9PSA0Ci0KLSAgICAv
LyBUaGVzZSBtZXRob2RzIGFkZCBjYWxscyB0byBDKysgaGVscGVyIGZ1bmN0aW9ucy4KLSAgICAv
LyBUaGVzZSBtZXRob2RzIGFyZSBicm9hZGx5IHZhbHVlIHJlcHJlc2VudGF0aW9uIHNwZWNpZmlj
IChpLmUuCi0gICAgLy8gZGVhbCB3aXRoIHRoZSBmYWN0IHRoYXQgYSBKU1ZhbHVlIG1heSBiZSBw
YXNzZWQgaW4gb25lIG9yIHR3bwotICAgIC8vIG1hY2hpbmUgcmVnaXN0ZXJzLCBhbmQgZGVsZWdh
dGUgdGhlIGNhbGxpbmcgY29udmVudGlvbiBzcGVjaWZpYwotICAgIC8vIGRlY2lzaW9uIGFzIHRv
IGhvdyB0byBmaWxsIHRoZSByZWdzaXRlcnMgdG8gc2V0dXBBcmd1bWVudHMqIG1ldGhvZHMuCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
REZHT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgdm9pZCogcG9pbnRlcikK
LSAgICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRy
KHBvaW50ZXIpKTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFpfREZHT3BlcmF0aW9uX0Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBGUFJSZWcgYXJnMSkKLSAgICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzKGFyZzEpOwotICAg
ICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gbV9qaXQuYXBwZW5kQ2FsbChvcGVyYXRpb24p
OwotICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIGNhbGw7Ci0gICAgfQotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUdJIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIGFyZzEsIElkZW50aWZpZXIqIGlkZW50aWZpZXIpCi0gICAgewotICAg
ICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihpZGVu
dGlmaWVyKSk7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKLSAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IElkZW50aWZpZXIqIGlkZW50aWZpZXIpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihpZGVudGlmaWVyKSk7Ci0gICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsK
LSAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlv
bl9FQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQotICAgIHsKLSAgICAg
ICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwotICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7Ci0g
ICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25f
RVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgdm9pZCogcG9pbnRlciwgc2l6ZV90IHNpemUp
Ci0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0
cihwb2ludGVyKSwgVHJ1c3RlZEltbVB0cihzaXplKSk7Ci0gICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKLSAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FU1Mg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBpbnQgc3RhcnRDb25zdGFudCwgaW50IG51bUNvbnN0
YW50cykKLSAgICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShJbW0zMihz
dGFydENvbnN0YW50KSwgSW1tMzIobnVtQ29uc3RhbnRzKSk7Ci0gICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKLSAg
ICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9F
UFAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgdm9pZCogcG9pbnRlcikK
LSAgICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVk
SW1tUHRyKHBvaW50ZXIpKTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwotICAgIH0KLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDSSBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBJZGVudGlmaWVyKiBpZGVudGlmaWVyKQotICAgIHsKLSAg
ICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoaWRl
bnRpZmllcikpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQotICAgIHsKLSAgICAgICAgc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7Ci0gICAgfQotICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVAgb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKLSAgICB7Ci0gICAgICAgIHNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwotICAgIH0KLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0Ugb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0KQotICAgIHsKLSAgICAgICAgc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUo
KTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQo
b3BlcmF0aW9uLCByZXN1bHQpOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKENfREZHT3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IGFyZzEpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7
Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0KTsKLSAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihDX0RGR09wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
YXJnMSwgSlNDZWxsKiBjZWxsKQotICAgIHsKLSAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoY2VsbCkpOwotICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7Ci0gICAg
fQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19ERkdPcGVyYXRpb25fRUog
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKLSAgICB7Ci0gICAgICAgIHNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwotICAgIH0K
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZHT3BlcmF0aW9uX0VKSiBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKLSAgICB7
Ci0gICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKLSAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
REZHT3BlcmF0aW9uX0VQUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBH
UFJSZWcgYXJnMikKLSAgICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShh
cmcxLCBhcmcyKTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIEdQUlJlZyBhcmcxLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIgaW1tKQotICAgIHsKLSAgICAg
ICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIE1hY3JvQXNzZW1ibGVyOjpJbW1Q
dHIoc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KEpTVmFsdWU6OmVuY29kZShqc051bWJlcihpbW0u
bV92YWx1ZSkpKSkpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyIGltbSwgR1BSUmVnIGFyZzIpCi0gICAgewotICAg
ICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihz
dGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGltbS5tX3Zh
bHVlKSkpKSwgYXJnMik7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKLSAgICB9Ci0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCi0gICAgewotICAgICAgICBzZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7Ci0gICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKLSAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FSlBQ
IG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCB2b2lkKiBwb2ludGVyKQotICAg
IHsKLSAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIFRydXN0
ZWRJbW1QdHIocG9pbnRlcikpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhvcGVyYXRpb24pOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFZfREZHT3BlcmF0aW9uX0VKQ0kgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIsIElkZW50aWZpZXIqIGlkZW50aWZpZXIpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZEltbVB0cihpZGVudGlmaWVyKSk7
Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7
Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRp
b25fRUpKSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMp
Ci0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwg
YXJnMyk7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvbik7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdP
cGVyYXRpb25fRVBaSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVn
IGFyZzMpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwg
YXJnMiwgYXJnMyk7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvbik7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Vl9ERkdPcGVyYXRpb25fRUFaSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwg
R1BSUmVnIGFyZzMpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSwgYXJnMiwgYXJnMyk7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvbik7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oVl9ERkdPcGVyYXRpb25fRUNKSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMiwgR1BSUmVnIGFyZzMpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oRF9ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBGUFJSZWcgcmVzdWx0LCBH
UFJSZWcgYXJnMSkKLSAgICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShh
cmcxKTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHQpOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKERfREZHT3BlcmF0aW9uX0REIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgRlBS
UmVnIGFyZzEsIEZQUlJlZyBhcmcyKQotICAgIHsKLSAgICAgICAgc2V0dXBBcmd1bWVudHMoYXJn
MSwgYXJnMik7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0KTsKLSAgICB9Ci0jZWxzZQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oWl9ERkdPcGVyYXRpb25fRCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEZQUlJlZyBhcmcx
KQotICAgIHsKLSAgICAgICAgc2V0dXBBcmd1bWVudHMoYXJnMSk7Ci0gICAgICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5hcHBlbmRDYWxsKG9wZXJhdGlvbik7Ci0gICAgICAgIG1f
aml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHQpOwot
ICAgICAgICByZXR1cm4gY2FsbDsKLSAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQ
UlJlZyByZXN1bHRQYXlsb2FkLCB2b2lkKiBwb2ludGVyKQotICAgIHsKLSAgICAgICAgc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwotICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRh
ZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCB2b2lkKiBwb2ludGVyKQotICAg
IHsKLSAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1Q
dHIocG9pbnRlcikpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7Ci0gICAgfQot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUdJIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBh
cmcxLCBJZGVudGlmaWVyKiBpZGVudGlmaWVyKQotICAgIHsKLSAgICAgICAgc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllcikpOwotICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEpCi0gICAgewotICAgICAgICBz
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7Ci0gICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwg
cmVzdWx0VGFnKTsKLSAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0RGR09wZXJhdGlvbl9FSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1
bHRQYXlsb2FkLCBJZGVudGlmaWVyKiBpZGVudGlmaWVyKQotICAgIHsKLSAgICAgICAgc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllcikpOwotICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEpCi0gICAgewotICAgICAgICBz
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7Ci0gICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwg
cmVzdWx0VGFnKTsKLSAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihK
X0RGR09wZXJhdGlvbl9FUFMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVz
dWx0UGF5bG9hZCwgdm9pZCogcG9pbnRlciwgc2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICBz
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihwb2ludGVyKSwgVHJ1c3Rl
ZEltbVB0cihzaXplKSk7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKLSAgICB9
Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FU1Mg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgaW50IHN0
YXJ0Q29uc3RhbnQsIGludCBudW1Db25zdGFudHMpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyKHN0YXJ0Q29uc3RhbnQpLCBUcnVzdGVkSW1t
MzIobnVtQ29uc3RhbnRzKSk7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKLSAg
ICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9F
SlAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BS
UmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgdm9pZCogcG9pbnRlcikKLSAgICB7Ci0g
ICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxUGF5bG9hZCwgYXJnMVRhZywg
SW1tUHRyKHBvaW50ZXIpKTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwotICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VK
UCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJS
ZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMikKLSAgICB7Ci0gICAg
ICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxUGF5bG9hZCwgYXJnMVRhZywgYXJn
Mik7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKLSAgICB9Ci0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0kgb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIElkZW50
aWZpZXIqIGlkZW50aWZpZXIpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihpZGVudGlmaWVyKSk7Ci0gICAgICAgIHJldHVybiBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5
bG9hZCwgcmVzdWx0VGFnKTsKLSAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihKX0RGR09wZXJhdGlvbl9FSkEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJS
ZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BS
UmVnIGFyZzIpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MVBheWxvYWQsIGFyZzFUYWcsIGFyZzIpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRh
Zyk7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9h
ZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCkKLSAgICB7Ci0gICAgICAgIHNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxUGF5bG9hZCwgYXJnMVRhZyk7Ci0gICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKLSAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkK
LSAgICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7Ci0gICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
KTsKLSAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJh
dGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQotICAgIHsKLSAg
ICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwotICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdPcGVyYXRp
b25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEpTQ2VsbCogY2Vs
bCkKLSAgICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVz
dGVkSW1tUHRyKGNlbGwpKTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwotICAgIH0KLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZHT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCkKLSAgICB7Ci0gICAg
ICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxUGF5bG9hZCwgYXJnMVRhZyk7Ci0g
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0KTsKLSAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihTX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXls
b2FkKQotICAgIHsKLSAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzFQYXls
b2FkLCBhcmcxVGFnLCBhcmcyUGF5bG9hZCwgYXJnMlRhZyk7Ci0gICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKLSAg
ICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9F
Skogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BS
UmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBh
cmcyUGF5bG9hZCkKLSAgICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShh
cmcxUGF5bG9hZCwgYXJnMVRhZywgYXJnMlBheWxvYWQsIGFyZzJUYWcpOwotICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dFBheWxvYWQsIHJlc3VsdFRhZyk7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywg
R1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQs
IE1hY3JvQXNzZW1ibGVyOjpJbW0zMiBpbW0pCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMVBheWxvYWQsIGFyZzFUYWcsIGltbSwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSk7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKLSAg
ICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9F
Skogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgTWFj
cm9Bc3NlbWJsZXI6OkltbTMyIGltbSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9h
ZCkKLSAgICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShpbW0sIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIGFyZzJQYXlsb2FkLCBhcmcyVGFnKTsKLSAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzJUYWcs
IEdQUlJlZyBhcmcyUGF5bG9hZCkKLSAgICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBhcmcyUGF5bG9hZCwgYXJnMlRhZyk7Ci0gICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9h
ZCwgcmVzdWx0VGFnKTsKLSAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihWX0RGR09wZXJhdGlvbl9FSlBQIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBh
cmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIsIHZvaWQqIHBvaW50ZXIpCi0gICAgewotICAgICAgICBz
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMVBheWxvYWQsIGFyZzFUYWcsIGFyZzIsIFRy
dXN0ZWRJbW1QdHIocG9pbnRlcikpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhvcGVyYXRpb24pOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VKQ0kgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMVRhZywg
R1BSUmVnIGFyZzFQYXlsb2FkLCBHUFJSZWcgYXJnMiwgSWRlbnRpZmllciogaWRlbnRpZmllcikK
LSAgICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxUGF5bG9hZCwg
YXJnMVRhZywgYXJnMiwgVHJ1c3RlZEltbVB0cihpZGVudGlmaWVyKSk7Ci0gICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Ci0gICAgfQotICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUNKSiBvcGVyYXRp
b24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMlRhZywgR1BSUmVnIGFyZzJQYXlsb2FkLCBHUFJS
ZWcgYXJnM1RhZywgR1BSUmVnIGFyZzNQYXlsb2FkKQotICAgIHsKLSAgICAgICAgc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzJQYXlsb2FkLCBhcmcyVGFnLCBhcmczUGF5bG9h
ZCwgYXJnM1RhZyk7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvbik7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Vl9ERkdPcGVyYXRpb25fRVBaSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwg
R1BSUmVnIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKLSAgICB7Ci0gICAgICAgIHNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczUGF5bG9hZCwgYXJnM1RhZyk7
Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7
Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRp
b25fRUFaSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzNU
YWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKLSAgICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczUGF5bG9hZCwgYXJnM1RhZyk7Ci0gICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7Ci0gICAgfQotCi0g
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihEX0RGR09wZXJhdGlvbl9FSiBvcGVy
YXRpb24sIEZQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQp
Ci0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMVBheWxvYWQs
IGFyZzFUYWcpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7Ci0gICAgfQotCi0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihEX0RGR09wZXJhdGlvbl9ERCBvcGVyYXRpb24sIEZQUlJlZyByZXN1
bHQsIEZQUlJlZyBhcmcxLCBGUFJSZWcgYXJnMikKLSAgICB7Ci0gICAgICAgIHNldHVwQXJndW1l
bnRzKGFyZzEsIGFyZzIpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICAvLyBUaGVzZSBtZXRob2RzIGFk
ZCBjYWxsIGluc3RydWN0aW9ucywgd2l0aCBvcHRpb25hbCBleGNlcHRpb24gY2hlY2tzICYgc2V0
dGluZyByZXN1bHRzLgotICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1faml0LmFkZEV4Y2VwdGlvbkNoZWNrKG1faml0LmFwcGVuZENhbGwoZnVuY3Rpb24pLCBh
dChtX2NvbXBpbGVJbmRleCkuY29kZU9yaWdpbik7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25Q
dHImIGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0KQotICAgIHsKLSAgICAgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwotICAg
ICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHQpOwotICAgICAg
ICByZXR1cm4gY2FsbDsKLSAgICB9Ci0gICAgdm9pZCBzZXR1cFJlc3VsdHMoR1BSUmVnIGRlc3RB
LCBHUFJSZWcgZGVzdEIpCi0gICAgewotICAgICAgICBHUFJSZWcgc3JjQSA9IEdQUkluZm86OnJl
dHVyblZhbHVlR1BSOwotICAgICAgICBHUFJSZWcgc3JjQiA9IEdQUkluZm86OnJldHVyblZhbHVl
R1BSMjsKLQotICAgICAgICBpZiAoc3JjQiAhPSBkZXN0QSkgewotICAgICAgICAgICAgLy8gSGFu
ZGxlIHRoZSBlYXN5IGNhc2VzIC0gdHdvIHNpbXBsZSBtb3Zlcy4KLSAgICAgICAgICAgIG1faml0
Lm1vdmUoc3JjQSwgZGVzdEEpOwotICAgICAgICAgICAgbV9qaXQubW92ZShzcmNCLCBkZXN0Qik7
Ci0gICAgICAgIH0gZWxzZSBpZiAoc3JjQSAhPSBkZXN0QikgewotICAgICAgICAgICAgLy8gSGFu
ZGxlIHRoZSBub24tc3dhcCBjYXNlIC0ganVzdCBwdXQgc3JjQiBpbiBwbGFjZSBmaXJzdC4KLSAg
ICAgICAgICAgIG1faml0Lm1vdmUoc3JjQiwgZGVzdEIpOwotICAgICAgICAgICAgbV9qaXQubW92
ZShzcmNBLCBkZXN0QSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9qaXQuc3dhcChk
ZXN0QSwgZGVzdEIpOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgR1BS
UmVnIHJlc3VsdDEsIEdQUlJlZyByZXN1bHQyKQotICAgIHsKLSAgICAgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwotICAg
ICAgICBzZXR1cFJlc3VsdHMocmVzdWx0MSwgcmVzdWx0Mik7Ci0gICAgICAgIHJldHVybiBjYWxs
OwotICAgIH0KLSNpZiBDUFUoWDg2KQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uLCBG
UFJSZWcgcmVzdWx0KQotICAgIHsKLSAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwotICAgICAgICBtX2ppdC5hc3Nl
bWJsZXIoKS5mc3RwbCgwLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAg
ICAgICBtX2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwg
cmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIGNhbGw7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uLCBGUFJS
ZWcgcmVzdWx0KQotICAgIHsKLSAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IG1faml0
LmFwcGVuZENhbGwoZnVuY3Rpb24pOwotICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5mc3RwbCgw
LCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICBtX2ppdC5sb2Fk
RG91YmxlKEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVzdWx0KTsKLSAgICAg
ICAgcmV0dXJuIGNhbGw7Ci0gICAgfQotI2VsaWYgQ1BVKEFSTSkKLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9u
UHRyJiBmdW5jdGlvbiwgRlBSUmVnIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKLSAg
ICAgICAgbV9qaXQuYXNzZW1ibGVyKCkudm1vdihyZXN1bHQsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwotICAgICAgICByZXR1cm4gY2FsbDsKLSAg
ICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5j
dGlvblB0ciYgZnVuY3Rpb24sIEZQUlJlZyByZXN1bHQpCi0gICAgewotICAgICAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsID0gbV9qaXQuYXBwZW5kQ2FsbChmdW5jdGlvbik7Ci0gICAgICAgIG1f
aml0LmFzc2VtYmxlcigpLnZtb3YocmVzdWx0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSAgICAgICAgcmV0dXJuIGNhbGw7Ci0gICAgfQotI2Vs
c2UKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgRlBSUmVnIHJlc3VsdCkKLSAgICB7
Ci0gICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKGZ1bmN0aW9uKTsKLSAgICAgICAgbV9qaXQubW92ZURvdWJsZShGUFJJbmZvOjpyZXR1
cm5WYWx1ZUZQUiwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIGNhbGw7Ci0gICAgfQotICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHImIGZ1
bmN0aW9uLCBGUFJSZWcgcmVzdWx0KQotICAgIHsKLSAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbCA9IG1faml0LmFwcGVuZENhbGwoZnVuY3Rpb24pOwotICAgICAgICBtX2ppdC5tb3ZlRG91
YmxlKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCByZXN1bHQpOwotICAgICAgICByZXR1cm4gY2Fs
bDsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHZvaWQgYWRkQnJhbmNoKGNvbnN0IE1hY3JvQXNzZW1i
bGVyOjpKdW1wJiBqdW1wLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQotICAgIHsKLSAgICAgICAg
bV9icmFuY2hlcy5hcHBlbmQoQnJhbmNoUmVjb3JkKGp1bXAsIGRlc3RpbmF0aW9uKSk7Ci0gICAg
fQotCi0gICAgdm9pZCBsaW5rQnJhbmNoZXMoKQotICAgIHsKLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2JyYW5jaGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBCcmFuY2hS
ZWNvcmQmIGJyYW5jaCA9IG1fYnJhbmNoZXNbaV07Ci0gICAgICAgICAgICBicmFuY2guanVtcC5s
aW5rVG8obV9ibG9ja0hlYWRzW2JyYW5jaC5kZXN0aW5hdGlvbl0sICZtX2ppdCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBCYXNpY0Jsb2NrKiBibG9jaygpCi0gICAgewotICAgICAgICByZXR1
cm4gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS5nZXQoKTsKLSAgICB9Ci0KLSNpZm5k
ZWYgTkRFQlVHCi0gICAgdm9pZCBkdW1wKGNvbnN0IGNoYXIqIGxhYmVsID0gMCk7Ci0jZW5kaWYK
LQotI2lmIERGR19FTkFCTEUoQ09OU0lTVEVOQ1lfQ0hFQ0spCi0gICAgdm9pZCBjaGVja0NvbnNp
c3RlbmN5KCk7Ci0jZWxzZQotICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpIHt9Ci0jZW5kaWYK
LQotICAgIC8vIFRoZSBKSVQsIHdoaWxlIGFsc28gcHJvdmlkZXMgTWFjcm9Bc3NlbWJsZXIgZnVu
Y3Rpb25hbGl0eS4KLSAgICBKSVRDb21waWxlciYgbV9qaXQ7Ci0gICAgLy8gVGhlIGN1cnJlbnQg
bm9kZSBiZWluZyBnZW5lcmF0ZWQuCi0gICAgQmxvY2tJbmRleCBtX2Jsb2NrOwotICAgIE5vZGVJ
bmRleCBtX2NvbXBpbGVJbmRleDsKLSAgICAvLyBWaXJ0dWFsIGFuZCBwaHlzaWNhbCByZWdpc3Rl
ciBtYXBzLgotICAgIFZlY3RvcjxHZW5lcmF0aW9uSW5mbywgMzI+IG1fZ2VuZXJhdGlvbkluZm87
Ci0gICAgUmVnaXN0ZXJCYW5rPEdQUkluZm8+IG1fZ3ByczsKLSAgICBSZWdpc3RlckJhbms8RlBS
SW5mbz4gbV9mcHJzOwotCi0gICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpMYWJlbD4gbV9ibG9j
a0hlYWRzOwotICAgIHN0cnVjdCBCcmFuY2hSZWNvcmQgewotICAgICAgICBCcmFuY2hSZWNvcmQo
TWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKLSAgICAg
ICAgICAgIDoganVtcChqdW1wKQotICAgICAgICAgICAgLCBkZXN0aW5hdGlvbihkZXN0aW5hdGlv
bikKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
anVtcDsKLSAgICAgICAgQmxvY2tJbmRleCBkZXN0aW5hdGlvbjsKLSAgICB9OwotICAgIFZlY3Rv
cjxCcmFuY2hSZWNvcmQsIDg+IG1fYnJhbmNoZXM7Ci19OwotCi0vLyA9PT0gT3BlcmFuZCB0eXBl
cyA9PT0KLS8vCi0vLyBJbnRlZ2VyT3BlcmFuZCwgRG91YmxlT3BlcmFuZCBhbmQgSlNWYWx1ZU9w
ZXJhbmQuCi0vLwotLy8gVGhlc2UgY2xhc3NlcyBhcmUgdXNlZCB0byBsb2NrIHRoZSBvcGVyYW5k
cyB0byBhIG5vZGUgaW50byBtYWNoaW5lCi0vLyByZWdpc3RlcnMuIFRoZXNlIGNsYXNzZXMgaW1w
bGVtZW50IG9mIHBhdHRlcm4gb2YgbG9ja2luZyBhIHZhbHVlCi0vLyBpbnRvIHJlZ2lzdGVyIGF0
IHRoZSBwb2ludCBvZiBjb25zdHJ1Y3Rpb24gb25seSBpZiBpdCBpcyBhbHJlYWR5IGluCi0vLyBy
ZWdpc3RlcnMsIGFuZCBvdGhlcndpc2UgbG9hZGluZyBpdCBsYXppbHkgYXQgdGhlIHBvaW50IGl0
IGlzIGZpcnN0Ci0vLyB1c2VkLiBXZSBkbyBzbyBpbiBvcmRlciB0byBhdHRlbXB0IHRvIGF2b2lk
IHNwaWxsaW5nIG9uZSBvcGVyYW5kCi0vLyBpbiBvcmRlciB0byBtYWtlIHNwYWNlIGF2YWlsYWJs
ZSBmb3IgYW5vdGhlci4KLQotY2xhc3MgSW50ZWdlck9wZXJhbmQgewotcHVibGljOgotICAgIGV4
cGxpY2l0IEludGVnZXJPcGVyYW5kKEpJVENvZGVHZW5lcmF0b3IqIGppdCwgTm9kZUluZGV4IGlu
ZGV4KQotICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX2luZGV4KGluZGV4KQotICAg
ICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCi0jaWZuZGVmIE5ERUJVRwotICAg
ICAgICAsIG1fZm9ybWF0KERhdGFGb3JtYXROb25lKQotI2VuZGlmCi0gICAgewotICAgICAgICBB
U1NFUlQobV9qaXQpOwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChpbmRleCkpCi0gICAgICAg
ICAgICBncHIoKTsKLSAgICB9Ci0KLSAgICB+SW50ZWdlck9wZXJhbmQoKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKG1fZ3ByT3JJbnZhbGlkICE9IEludmFsaWRHUFJSZWcpOwotICAgICAgICBtX2pp
dC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKLSAgICB9Ci0KLSAgICBOb2RlSW5kZXggaW5kZXgo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW5kZXg7Ci0gICAgfQotCi0gICAgRGF0
YUZvcm1hdCBmb3JtYXQoKQotICAgIHsKLSAgICAgICAgZ3ByKCk7IC8vIG1fZm9ybWF0IGlzIHNl
dCB3aGVuIG1fZ3ByIGlzIGxvY2tlZC4KLSAgICAgICAgQVNTRVJUKG1fZm9ybWF0ID09IERhdGFG
b3JtYXRJbnRlZ2VyIHx8IG1fZm9ybWF0ID09IERhdGFGb3JtYXRKU0ludGVnZXIpOwotICAgICAg
ICByZXR1cm4gbV9mb3JtYXQ7Ci0gICAgfQotCi0gICAgR1BSUmVnIGdwcigpCi0gICAgewotICAg
ICAgICBpZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAgIG1f
Z3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxJbnRlZ2VyKGluZGV4KCksIG1fZm9ybWF0KTsKLSAg
ICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHVzZSgp
Ci0gICAgewotICAgICAgICBtX2ppdC0+dXNlKG1faW5kZXgpOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBKSVRDb2RlR2VuZXJhdG9yKiBtX2ppdDsKLSAgICBOb2RlSW5kZXggbV9pbmRleDsKLSAg
ICBHUFJSZWcgbV9ncHJPckludmFsaWQ7Ci0gICAgRGF0YUZvcm1hdCBtX2Zvcm1hdDsKLX07Ci0K
LWNsYXNzIERvdWJsZU9wZXJhbmQgewotcHVibGljOgotICAgIGV4cGxpY2l0IERvdWJsZU9wZXJh
bmQoSklUQ29kZUdlbmVyYXRvciogaml0LCBOb2RlSW5kZXggaW5kZXgpCi0gICAgICAgIDogbV9q
aXQoaml0KQotICAgICAgICAsIG1faW5kZXgoaW5kZXgpCi0gICAgICAgICwgbV9mcHJPckludmFs
aWQoSW52YWxpZEZQUlJlZykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2ppdCk7Ci0gICAgICAg
IGlmIChqaXQtPmlzRmlsbGVkRG91YmxlKGluZGV4KSkKLSAgICAgICAgICAgIGZwcigpOwotICAg
IH0KLQotICAgIH5Eb3VibGVPcGVyYW5kKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2Zwck9y
SW52YWxpZCAhPSBJbnZhbGlkRlBSUmVnKTsKLSAgICAgICAgbV9qaXQtPnVubG9jayhtX2Zwck9y
SW52YWxpZCk7Ci0gICAgfQotCi0gICAgTm9kZUluZGV4IGluZGV4KCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2luZGV4OwotICAgIH0KLQotICAgIEZQUlJlZyBmcHIoKQotICAgIHsK
LSAgICAgICAgaWYgKG1fZnByT3JJbnZhbGlkID09IEludmFsaWRGUFJSZWcpCi0gICAgICAgICAg
ICBtX2Zwck9ySW52YWxpZCA9IG1faml0LT5maWxsRG91YmxlKGluZGV4KCkpOwotICAgICAgICBy
ZXR1cm4gbV9mcHJPckludmFsaWQ7Ci0gICAgfQotICAgIAotICAgIHZvaWQgdXNlKCkKLSAgICB7
Ci0gICAgICAgIG1faml0LT51c2UobV9pbmRleCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpJ
VENvZGVHZW5lcmF0b3IqIG1faml0OwotICAgIE5vZGVJbmRleCBtX2luZGV4OwotICAgIEZQUlJl
ZyBtX2Zwck9ySW52YWxpZDsKLX07Ci0KLWNsYXNzIEpTVmFsdWVPcGVyYW5kIHsKLXB1YmxpYzoK
LSAgICBleHBsaWNpdCBKU1ZhbHVlT3BlcmFuZChKSVRDb2RlR2VuZXJhdG9yKiBqaXQsIE5vZGVJ
bmRleCBpbmRleCkKLSAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9pbmRleChpbmRl
eCkKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRH
UFJSZWcpCi0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICAsIG1faXNEb3VibGUoZmFs
c2UpCi0jZW5kaWYKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2ppdCk7Ci0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQoaW5kZXgpKQotICAgICAgICAgICAgZ3By
KCk7Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBtX3JlZ2lzdGVyLnBhaXIudGFn
R1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgbV9yZWdpc3Rlci5wYWlyLnBheWxvYWRHUFIg
PSBJbnZhbGlkR1BSUmVnOwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChpbmRleCkpCi0gICAg
ICAgICAgICBmaWxsKCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICB+SlNWYWx1ZU9wZXJhbmQoKQot
ICAgIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBBU1NFUlQobV9ncHJPckludmFsaWQg
IT0gSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIG1faml0LT51bmxvY2sobV9ncHJPckludmFsaWQp
OwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgaWYgKG1faXNEb3VibGUpIHsKLSAg
ICAgICAgICAgIEFTU0VSVChtX3JlZ2lzdGVyLmZwciAhPSBJbnZhbGlkRlBSUmVnKTsKLSAgICAg
ICAgICAgIG1faml0LT51bmxvY2sobV9yZWdpc3Rlci5mcHIpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgQVNTRVJUKG1fcmVnaXN0ZXIucGFpci50YWdHUFIgIT0gSW52YWxpZEdQUlJl
ZyAmJiBtX3JlZ2lzdGVyLnBhaXIucGF5bG9hZEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKLSAgICAg
ICAgICAgIG1faml0LT51bmxvY2sobV9yZWdpc3Rlci5wYWlyLnRhZ0dQUik7Ci0gICAgICAgICAg
ICBtX2ppdC0+dW5sb2NrKG1fcmVnaXN0ZXIucGFpci5wYXlsb2FkR1BSKTsKLSAgICAgICAgfQot
I2VuZGlmCi0gICAgfQotCi0gICAgTm9kZUluZGV4IGluZGV4KCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2luZGV4OwotICAgIH0KLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgR1BS
UmVnIGdwcigpCi0gICAgewotICAgICAgICBpZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQ
UlJlZykKLSAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxKU1ZhbHVlKGlu
ZGV4KCkpOwotICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7Ci0gICAgfQotICAgIEpTVmFs
dWVSZWdzIGpzVmFsdWVSZWdzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlUmVncyhn
cHIoKSk7Ci0gICAgfQotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBib29sIGlzRG91Ymxl
KCkgeyByZXR1cm4gbV9pc0RvdWJsZTsgfQotCi0gICAgdm9pZCBmaWxsKCkKLSAgICB7Ci0gICAg
ICAgIGlmIChtX3JlZ2lzdGVyLnBhaXIudGFnR1BSID09IEludmFsaWRHUFJSZWcgJiYgbV9yZWdp
c3Rlci5wYWlyLnBheWxvYWRHUFIgPT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAgIG1faXNE
b3VibGUgPSAhbV9qaXQtPmZpbGxKU1ZhbHVlKGluZGV4KCksIG1fcmVnaXN0ZXIucGFpci50YWdH
UFIsIG1fcmVnaXN0ZXIucGFpci5wYXlsb2FkR1BSLCBtX3JlZ2lzdGVyLmZwcik7Ci0gICAgfQot
Ci0gICAgR1BSUmVnIHRhZ0dQUigpCi0gICAgewotICAgICAgICBmaWxsKCk7Ci0gICAgICAgIEFT
U0VSVCghbV9pc0RvdWJsZSk7Ci0gICAgICAgIHJldHVybiBtX3JlZ2lzdGVyLnBhaXIudGFnR1BS
OwotICAgIH0KLQotICAgIEdQUlJlZyBwYXlsb2FkR1BSKCkKLSAgICB7Ci0gICAgICAgIGZpbGwo
KTsKLSAgICAgICAgQVNTRVJUKCFtX2lzRG91YmxlKTsKLSAgICAgICAgcmV0dXJuIG1fcmVnaXN0
ZXIucGFpci5wYXlsb2FkR1BSOwotICAgIH0KLQotICAgIEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdz
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlUmVncyh0YWdHUFIoKSwgcGF5bG9hZEdQ
UigpKTsKLSAgICB9Ci0KLSAgICBGUFJSZWcgZnByKCkKLSAgICB7Ci0gICAgICAgIGZpbGwoKTsK
LSAgICAgICAgQVNTRVJUKG1faXNEb3VibGUpOwotICAgICAgICByZXR1cm4gbV9yZWdpc3Rlci5m
cHI7Ci0gICAgfQotI2VuZGlmCi0KLSAgICB2b2lkIHVzZSgpCi0gICAgewotICAgICAgICBtX2pp
dC0+dXNlKG1faW5kZXgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKSVRDb2RlR2VuZXJhdG9y
KiBtX2ppdDsKLSAgICBOb2RlSW5kZXggbV9pbmRleDsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAg
IEdQUlJlZyBtX2dwck9ySW52YWxpZDsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgdW5p
b24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgR1BSUmVnIHRhZ0dQUjsKLSAgICAg
ICAgICAgIEdQUlJlZyBwYXlsb2FkR1BSOwotICAgICAgICB9IHBhaXI7Ci0gICAgICAgIEZQUlJl
ZyBmcHI7Ci0gICAgfSBtX3JlZ2lzdGVyOwotICAgIGJvb2wgbV9pc0RvdWJsZTsKLSNlbmRpZgot
fTsKLQotY2xhc3MgU3RvcmFnZU9wZXJhbmQgewotcHVibGljOgotICAgIGV4cGxpY2l0IFN0b3Jh
Z2VPcGVyYW5kKEpJVENvZGVHZW5lcmF0b3IqIGppdCwgTm9kZUluZGV4IGluZGV4KQotICAgICAg
ICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1fZ3By
T3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCi0gICAgewotICAgICAgICBBU1NFUlQobV9qaXQpOwot
ICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChpbmRleCkpCi0gICAgICAgICAgICBncHIoKTsKLSAg
ICB9Ci0gICAgCi0gICAgflN0b3JhZ2VPcGVyYW5kKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCht
X2dwck9ySW52YWxpZCAhPSBJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgbV9qaXQtPnVubG9jayht
X2dwck9ySW52YWxpZCk7Ci0gICAgfQotICAgIAotICAgIE5vZGVJbmRleCBpbmRleCgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9pbmRleDsKLSAgICB9Ci0gICAgCi0gICAgR1BSUmVn
IGdwcigpCi0gICAgewotICAgICAgICBpZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJl
ZykKLSAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTdG9yYWdlKGluZGV4
KCkpOwotICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgdXNlKCkKLSAgICB7Ci0gICAgICAgIG1faml0LT51c2UobV9pbmRleCk7Ci0gICAgfQotICAg
IAotcHJpdmF0ZToKLSAgICBKSVRDb2RlR2VuZXJhdG9yKiBtX2ppdDsKLSAgICBOb2RlSW5kZXgg
bV9pbmRleDsKLSAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7Ci19OwotCi0KLS8vID09PSBUZW1w
b3JhcmllcyA9PT0KLS8vCi0vLyBUaGVzZSBjbGFzc2VzIGFyZSB1c2VkIHRvIGFsbG9jYXRlIHRl
bXBvcmFyeSByZWdpc3RlcnMuCi0vLyBBIG1lY2hhbmlzbSBpcyBwcm92aWRlZCB0byBhdHRlbXB0
IHRvIHJldXNlIHRoZSByZWdpc3RlcnMKLS8vIGN1cnJlbnRseSBhbGxvY2F0ZWQgdG8gY2hpbGQg
bm9kZXMgd2hvc2UgdmFsdWUgaXMgY29uc3VtZWQKLS8vIGJ5LCBhbmQgbm90IGxpdmUgYWZ0ZXIs
IHRoaXMgb3BlcmF0aW9uLgotCi1jbGFzcyBHUFJUZW1wb3JhcnkgewotcHVibGljOgotICAgIEdQ
UlRlbXBvcmFyeSgpOwotICAgIEdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKik7Ci0gICAg
R1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqLCBHUFJSZWcgc3BlY2lmaWMpOwotICAgIEdQ
UlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKiwgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQmKTsK
LSAgICBHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciosIFNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kJiwgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQmKTsKLSAgICBHUFJUZW1wb3JhcnkoSklUQ29k
ZUdlbmVyYXRvciosIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCYpOwotICAgIEdQUlRlbXBv
cmFyeShKSVRDb2RlR2VuZXJhdG9yKiwgSW50ZWdlck9wZXJhbmQmKTsKLSAgICBHUFJUZW1wb3Jh
cnkoSklUQ29kZUdlbmVyYXRvciosIEludGVnZXJPcGVyYW5kJiwgSW50ZWdlck9wZXJhbmQmKTsK
LSAgICBHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciosIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
Jik7Ci0gICAgR1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqLCBTcGVjdWxhdGVCb29sZWFu
T3BlcmFuZCYpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgR1BSVGVtcG9yYXJ5KEpJVENvZGVH
ZW5lcmF0b3IqLCBKU1ZhbHVlT3BlcmFuZCYpOwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAg
ICBHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciosIEpTVmFsdWVPcGVyYW5kJiwgYm9vbCB0
YWcgPSB0cnVlKTsKLSNlbmRpZgotICAgIEdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKiwg
U3RvcmFnZU9wZXJhbmQmKTsKLQotICAgIHZvaWQgYWRvcHQoR1BSVGVtcG9yYXJ5Jik7Ci0KLSAg
ICB+R1BSVGVtcG9yYXJ5KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2ppdCAmJiBtX2dwciAhPSBJ
bnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9qaXQtPnVubG9jayhncHIoKSk7Ci0gICAgfQot
Ci0gICAgR1BSUmVnIGdwcigpCi0gICAgewotICAgICAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhh
dmUgbGF6eSBhbGxvY2F0aW9uLgotICAgICAgICBpZiAobV9qaXQgJiYgbV9ncHIgPT0gSW52YWxp
ZEdQUlJlZykKLSAgICAgICAgICAgIG1fZ3ByID0gbV9qaXQtPmFsbG9jYXRlKCk7Ci0gICAgICAg
IHJldHVybiBtX2dwcjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSklUQ29kZUdlbmVyYXRvciog
bV9qaXQ7Ci0gICAgR1BSUmVnIG1fZ3ByOwotfTsKLQotY2xhc3MgRlBSVGVtcG9yYXJ5IHsKLXB1
YmxpYzoKLSAgICBGUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciopOwotICAgIEZQUlRlbXBv
cmFyeShKSVRDb2RlR2VuZXJhdG9yKiwgRG91YmxlT3BlcmFuZCYpOwotICAgIEZQUlRlbXBvcmFy
eShKSVRDb2RlR2VuZXJhdG9yKiwgRG91YmxlT3BlcmFuZCYsIERvdWJsZU9wZXJhbmQmKTsKLSAg
ICBGUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciosIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQm
KTsKLSAgICBGUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciosIFNwZWN1bGF0ZURvdWJsZU9w
ZXJhbmQmLCBTcGVjdWxhdGVEb3VibGVPcGVyYW5kJik7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkK
LSAgICBGUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciosIEpTVmFsdWVPcGVyYW5kJik7Ci0j
ZW5kaWYKLQotICAgIH5GUFJUZW1wb3JhcnkoKQotICAgIHsKLSAgICAgICAgbV9qaXQtPnVubG9j
ayhmcHIoKSk7Ci0gICAgfQotCi0gICAgRlBSUmVnIGZwcigpIGNvbnN0Ci0gICAgewotICAgICAg
ICBBU1NFUlQobV9mcHIgIT0gSW52YWxpZEZQUlJlZyk7Ci0gICAgICAgIHJldHVybiBtX2ZwcjsK
LSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBGUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciog
aml0LCBGUFJSZWcgbG9ja2VkRlBSKQotICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBt
X2Zwcihsb2NrZWRGUFIpCi0gICAgewotICAgIH0KLQotcHJpdmF0ZToKLSAgICBKSVRDb2RlR2Vu
ZXJhdG9yKiBtX2ppdDsKLSAgICBGUFJSZWcgbV9mcHI7Ci19OwotCi0KLS8vID09PSBSZXN1bHRz
ID09PQotLy8KLS8vIFRoZXNlIGNsYXNzZXMgbG9jayB0aGUgcmVzdWx0IG9mIGEgY2FsbCB0byBh
IEMrKyBoZWxwZXIgZnVuY3Rpb24uCi0KLWNsYXNzIEdQUlJlc3VsdCA6IHB1YmxpYyBHUFJUZW1w
b3JhcnkgewotcHVibGljOgotICAgIEdQUlJlc3VsdChKSVRDb2RlR2VuZXJhdG9yKiBqaXQpCi0g
ICAgICAgIDogR1BSVGVtcG9yYXJ5KGppdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpCi0gICAg
ewotICAgIH0KLX07Ci0KLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotY2xhc3MgR1BSUmVzdWx0MiA6
IHB1YmxpYyBHUFJUZW1wb3JhcnkgewotcHVibGljOgotICAgIEdQUlJlc3VsdDIoSklUQ29kZUdl
bmVyYXRvciogaml0KQotICAgICAgICA6IEdQUlRlbXBvcmFyeShqaXQsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSMikKLSAgICB7Ci0gICAgfQotfTsKLSNlbmRpZgotCi1jbGFzcyBGUFJSZXN1bHQg
OiBwdWJsaWMgRlBSVGVtcG9yYXJ5IHsKLXB1YmxpYzoKLSAgICBGUFJSZXN1bHQoSklUQ29kZUdl
bmVyYXRvciogaml0KQotICAgICAgICA6IEZQUlRlbXBvcmFyeShqaXQsIGxvY2tlZFJlc3VsdChq
aXQpKQotICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIEZQUlJlZyBsb2NrZWRS
ZXN1bHQoSklUQ29kZUdlbmVyYXRvciogaml0KQotICAgIHsKLSAgICAgICAgaml0LT5sb2NrKEZQ
UkluZm86OnJldHVyblZhbHVlRlBSKTsKLSAgICAgICAgcmV0dXJuIEZQUkluZm86OnJldHVyblZh
bHVlRlBSOwotICAgIH0KLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlm
Ci0jZW5kaWYKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5jcHAJKHJldmlzaW9uIDEwMDIzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAjaWYg
RU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJERkdK
SVRDb2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyLmgiCiAjaW5j
bHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1JlZ2lzdGVyQmFuay5oIgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxMDAy
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotI2luY2x1
ZGUgIkRGR0pJVENvZGVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5o
IgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5j
bHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgpAQCAtMTE4LDcgKzExOCw3IEBAIHN0YXRpYyB2b2lkIGdl
bmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIKICAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNo
ID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKHNjcmF0Y2hHUFIgPT0gSW52YWxpZEdQUlJlZykgewot
ICAgICAgICBzY3JhdGNoR1BSID0gSklUQ29kZUdlbmVyYXRvcjo6c2VsZWN0U2NyYXRjaEdQUihi
YXNlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6
OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgc3R1YkppdC5w
dXNoKHNjcmF0Y2hHUFIpOwogICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IHRydWU7CiAg
ICAgfQpAQCAtMTc2LDcgKzE3Niw3IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVj
U3RhdGUqIGUKICAgICAgICAgTWFjcm9Bc3NlbWJsZXIgc3R1YkppdDsKICAgICAgICAgCiAgICAg
ICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcpIHsKLSAgICAgICAgICAgIHNjcmF0
Y2hHUFIgPSBKSVRDb2RlR2VuZXJhdG9yOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNj
cmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIHN0dWJKaXQucHVzaChz
Y3JhdGNoR1BSKTsKICAgICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKICAg
ICAgICAgfQpAQCAtNTQxLDcgKzU0MSw3IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJRChF
eGVjU3RhdGUqIGUKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBmYWlsdXJl
Q2FzZXM7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFs
aWRHUFJSZWcpIHsKLSAgICAgICAgICAgICAgICBzY3JhdGNoR1BSID0gSklUQ29kZUdlbmVyYXRv
cjo6c2VsZWN0U2NyYXRjaEdQUihiYXNlR1BSLCB2YWx1ZUdQUik7CisgICAgICAgICAgICAgICAg
c2NyYXRjaEdQUiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZh
bHVlR1BSKTsKICAgICAgICAgICAgICAgICBzdHViSml0LnB1c2goc2NyYXRjaEdQUik7CiAgICAg
ICAgICAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOwogICAgICAgICAgICAgfQpA
QCAtNTU3LDkgKzU1Nyw5IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUq
IGUKIAogI2lmIEVOQUJMRShHR0MpIHx8IEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykK
ICAgICAgICAgICAgIC8vIE11c3QgYWx3YXlzIGVtaXQgdGhpcyB3cml0ZSBiYXJyaWVyIGFzIHRo
ZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBpdHNlbGYgcmVxdWlyZXMgaXQKLSAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoMiA9IEpJVENvZGVHZW5lcmF0b3I6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQ
UiwgdmFsdWVHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0g
U3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFsdWVHUFIsIHNjcmF0
Y2hHUFIpOwogICAgICAgICAgICAgc3R1YkppdC5wdXNoKHNjcmF0Y2gyKTsKLSAgICAgICAgICAg
IEpJVENvZGVHZW5lcmF0b3I6OndyaXRlQmFycmllcihzdHViSml0LCBiYXNlR1BSLCBzY3JhdGNo
R1BSLCBzY3JhdGNoMiwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOworICAgICAgICAg
ICAgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihzdHViSml0LCBiYXNlR1BSLCBzY3JhdGNo
R1BSLCBzY3JhdGNoMiwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOwogICAgICAgICAg
ICAgc3R1YkppdC5wb3Aoc2NyYXRjaDIpOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNp
b24gMTAwMjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsMTMzNCBAQCBzdGF0aWMgZG91
YmxlIERGR19PUEVSQVRJT04gZm1vZEFzREZHT3BlCiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQog
CitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2VyKE5vZGVJbmRleCBub2RlSW5kZXgs
IERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCkKK3sKKyAgICBOb2RlJiBub2RlID0gYXQobm9kZUlu
ZGV4KTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFs
UmVnaXN0ZXIoKTsKKyAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9b
dmlydHVhbFJlZ2lzdGVyXTsKKworICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0
YUZvcm1hdE5vbmUpIHsKKyAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CisKKyAgICAg
ICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgbV9ncHJzLnJldGFpbihn
cHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKKyAgICAgICAgICAgIGlm
IChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSkKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgpKSwg
Z3ByKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkK
KyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZUluZGV4KSk7CisgICAg
ICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihqc1Zh
bHVlLnBheWxvYWQoKSksIGdwcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBBU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRKUyB8fCBp
bmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcik7CisgICAgICAgICAgICBt
X2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Cisg
ICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJl
Z2lzdGVyKSwgZ3ByKTsKKyAgICAgICAgfQorCisgICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3By
KTsKKyAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CisgICAgICAgIHJl
dHVybiBncHI7CisgICAgfQorCisgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsK
KyAgICBjYXNlIERhdGFGb3JtYXROb25lOgorICAgICAgICAvLyBTaG91bGQgaGF2ZSBmaWxsZWQs
IGFib3ZlLgorICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOgorICAgIGNhc2UgRGF0YUZvcm1h
dERvdWJsZToKKyAgICBjYXNlIERhdGFGb3JtYXRKUzoKKyAgICBjYXNlIERhdGFGb3JtYXRDZWxs
OgorICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKKyAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFu
OgorICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoKKyAgICBjYXNlIERhdGFGb3JtYXRTdG9y
YWdlOgorICAgICAgICAvLyBTaG91bGQgb25seSBiZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gaWYg
d2Uga25vdyB0aGlzIG9wZXJhbmQgdG8gYmUgaW50ZWdlci4KKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisKKyAgICBjYXNlIERhdGFGb3JtYXRKU0ludGVnZXI6IHsKKyAgICAgICAgR1BS
UmVnIHRhZ0dQUiA9IGluZm8udGFnR1BSKCk7CisgICAgICAgIEdQUlJlZyBwYXlsb2FkR1BSID0g
aW5mby5wYXlsb2FkR1BSKCk7CisgICAgICAgIG1fZ3Bycy5sb2NrKHRhZ0dQUik7CisgICAgICAg
IG1faml0LmppdEFzc2VydElzSlNJbnQzMih0YWdHUFIpOworICAgICAgICBtX2dwcnMudW5sb2Nr
KHRhZ0dQUik7CisgICAgICAgIG1fZ3Bycy5sb2NrKHBheWxvYWRHUFIpOworICAgICAgICBtX2dw
cnMucmVsZWFzZSh0YWdHUFIpOworICAgICAgICBtX2dwcnMucmVsZWFzZShwYXlsb2FkR1BSKTsK
KyAgICAgICAgbV9ncHJzLnJldGFpbihwYXlsb2FkR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxs
T3JkZXJJbnRlZ2VyKTsKKyAgICAgICAgaW5mby5maWxsSW50ZWdlcihwYXlsb2FkR1BSKTsKKyAg
ICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CisgICAgICAgIHJldHVybiBw
YXlsb2FkR1BSOworICAgIH0KKworICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6IHsKKyAgICAg
ICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CisgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7Cisg
ICAgICAgIG1faml0LmppdEFzc2VydElzSW50MzIoZ3ByKTsKKyAgICAgICAgcmV0dXJuRm9ybWF0
ID0gRGF0YUZvcm1hdEludGVnZXI7CisgICAgICAgIHJldHVybiBncHI7CisgICAgfQorICAgIH0K
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOwor
fQorCitGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUluZGV4IG5vZGVJbmRl
eCkKK3sKKyAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBHZW5lcmF0
aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKworICAg
IGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpIHsKKworICAgICAg
ICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0
YW50KG5vZGVJbmRleCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIG5vdCBi
ZSByZWFjaGFibGU/CisgICAgICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7Cisg
ICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZklu
dDMyQ29uc3RhbnQobm9kZUluZGV4KSksIGdwcik7CisgICAgICAgICAgICAgICAgbV9ncHJzLnJl
dGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKKyAgICAgICAg
ICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKGdwcik7CisgICAgICAgICAgICAgICAgdW5sb2NrKGdw
cik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkg
eworICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOworICAgICAgICAg
ICAgICAgIG1faml0LmxvYWREb3VibGUoYWRkcmVzc09mRG91YmxlQ29uc3RhbnQobm9kZUluZGV4
KSwgZnByKTsKKyAgICAgICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lz
dGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUo
ZnByKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZnByOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIG5vdCBiZSByZWFjaGFibGU/CisgICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBEYXRhRm9ybWF0IHNwaWxsRm9ybWF0ID0gaW5mby5zcGls
bEZvcm1hdCgpOworICAgICAgICAgICAgQVNTRVJUKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpT
KTsKKyAgICAgICAgICAgIGlmIChzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SlNEb3VibGUpIHsK
KyAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKKyAgICAgICAgICAg
ICAgICBtX2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdp
c3RlciksIGZwcik7CisgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxS
ZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbERv
dWJsZShmcHIpOworICAgICAgICAgICAgICAgIHJldHVybiBmcHI7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOworICAgICAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpJbnQzMlRhZykpOworICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRD
b21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBmcHIpOworICAgICAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgaGFzVW5ib3hlZERvdWJsZSA9IG1faml0Lmp1bXAoKTsKKworICAg
ICAgICAgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIG1faml0LmNvbnZl
cnRJbnQzMlRvRG91YmxlKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3Rlciks
IGZwcik7CisKKyAgICAgICAgICAgIGhhc1VuYm94ZWREb3VibGUubGluaygmbV9qaXQpOworICAg
ICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNw
aWxsZWQpOworICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgICAgICBy
ZXR1cm4gZnByOworICAgICAgICB9CisgICAgfQorCisgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVy
Rm9ybWF0KCkpIHsKKyAgICBjYXNlIERhdGFGb3JtYXROb25lOgorICAgICAgICAvLyBTaG91bGQg
aGF2ZSBmaWxsZWQsIGFib3ZlLgorICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6CisgICAgY2FzZSBE
YXRhRm9ybWF0SlNDZWxsOgorICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46CisgICAgY2FzZSBE
YXRhRm9ybWF0SlNCb29sZWFuOgorICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6CisgICAgICAg
IC8vIFNob3VsZCBvbmx5IGJlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBpZiB3ZSBrbm93IHRoaXMg
b3BlcmFuZCB0byBiZSBudW1lcmljLgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKwor
ICAgIGNhc2UgRGF0YUZvcm1hdEpTSW50ZWdlcjoKKyAgICBjYXNlIERhdGFGb3JtYXRKUzogewor
ICAgICAgICBHUFJSZWcgdGFnR1BSID0gaW5mby50YWdHUFIoKTsKKyAgICAgICAgR1BSUmVnIHBh
eWxvYWRHUFIgPSBpbmZvLnBheWxvYWRHUFIoKTsKKyAgICAgICAgRlBSUmVnIGZwciA9IGZwckFs
bG9jYXRlKCk7CisgICAgICAgIG1fZ3Bycy5sb2NrKHRhZ0dQUik7CisgICAgICAgIG1fZ3Bycy5s
b2NrKHBheWxvYWRHUFIpOworCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhc1VuYm94ZWRE
b3VibGU7CisKKyAgICAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0
SlNJbnRlZ2VyKSB7CisgICAgICAgICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJU
YWcpKTsKKyAgICAgICAgICAgIG1faml0LmppdEFzc2VydElzSlNEb3VibGUodGFnR1BSKTsKKyAg
ICAgICAgICAgIHVuYm94RG91YmxlKHRhZ0dQUiwgcGF5bG9hZEdQUiwgZnByLCBzY3JhdGNoLmZw
cigpKTsKKyAgICAgICAgICAgIGhhc1VuYm94ZWREb3VibGUgPSBtX2ppdC5qdW1wKCk7CisgICAg
ICAgICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOworICAgICAgICB9CisKKyAgICAgICAgbV9q
aXQuY29udmVydEludDMyVG9Eb3VibGUocGF5bG9hZEdQUiwgZnByKTsKKworICAgICAgICBpZiAo
aW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXRKU0ludGVnZXIpCisgICAgICAgICAg
ICBoYXNVbmJveGVkRG91YmxlLmxpbmsoJm1faml0KTsKKworICAgICAgICBtX2dwcnMucmVsZWFz
ZSh0YWdHUFIpOworICAgICAgICBtX2dwcnMucmVsZWFzZShwYXlsb2FkR1BSKTsKKyAgICAgICAg
bV9ncHJzLnVubG9jayh0YWdHUFIpOworICAgICAgICBtX2dwcnMudW5sb2NrKHBheWxvYWRHUFIp
OworICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVy
RG91YmxlKTsKKyAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgIGluZm8ua2ls
bFNwaWxsZWQoKTsKKyAgICAgICAgcmV0dXJuIGZwcjsKKyAgICB9CisKKyAgICBjYXNlIERhdGFG
b3JtYXRJbnRlZ2VyOiB7CisgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOworICAg
ICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKKyAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsK
KyAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUoZ3ByLCBmcHIpOworICAgICAgICBt
X2dwcnMudW5sb2NrKGdwcik7CisgICAgICAgIHJldHVybiBmcHI7CisgICAgfQorCisgICAgY2Fz
ZSBEYXRhRm9ybWF0SlNEb3VibGU6IAorICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZTogeworICAg
ICAgICBGUFJSZWcgZnByID0gaW5mby5mcHIoKTsKKyAgICAgICAgbV9mcHJzLmxvY2soZnByKTsK
KyAgICAgICAgcmV0dXJuIGZwcjsKKyAgICB9CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIEludmFsaWRGUFJSZWc7Cit9CisKK2Jvb2wgU3BlY3VsYXRpdmVK
SVQ6OmZpbGxKU1ZhbHVlKE5vZGVJbmRleCBub2RlSW5kZXgsIEdQUlJlZyYgdGFnR1BSLCBHUFJS
ZWcmIHBheWxvYWRHUFIsIEZQUlJlZyYgZnByKQoreworICAgIC8vIEZJWE1FOiBGb3IgZG91Ymxl
IHdlIGNvdWxkIGZpbGwgd2l0aCBhIEZQUi4KKyAgICBVTlVTRURfUEFSQU0oZnByKTsKKworICAg
IE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgIEdlbmVyYXRpb25JbmZvJiBp
bmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworCisgICAgc3dpdGNoIChp
bmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKKyAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7CisKKyAg
ICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgaWYgKGlzSW50MzJD
b25zdGFudChub2RlSW5kZXgpKSB7CisgICAgICAgICAgICAgICAgdGFnR1BSID0gYWxsb2NhdGUo
KTsKKyAgICAgICAgICAgICAgICBwYXlsb2FkR1BSID0gYWxsb2NhdGUoKTsKKyAgICAgICAgICAg
ICAgICBtX2ppdC5lbWl0TG9hZChub2RlSW5kZXgsIHRhZ0dQUiwgcGF5bG9hZEdQUik7CisgICAg
ICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSh0YWdHUFIsIHBheWxvYWRHUFIsIERhdGFGb3Jt
YXRKU0ludGVnZXIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0YWdH
UFIgPSBhbGxvY2F0ZSgpOworICAgICAgICAgICAgICAgIHBheWxvYWRHUFIgPSBhbGxvY2F0ZSgp
OworICAgICAgICAgICAgICAgIG1faml0LmVtaXRMb2FkKG5vZGVJbmRleCwgdGFnR1BSLCBwYXls
b2FkR1BSKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKHRhZ0dQUiwgcGF5bG9h
ZEdQUiwgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9ncHJz
LnJldGFpbih0YWdHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKKyAg
ICAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocGF5bG9hZEdQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGls
bE9yZGVyQ29uc3RhbnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgRGF0YUZvcm1h
dCBzcGlsbEZvcm1hdCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKKyAgICAgICAgICAgIEFTU0VSVChz
cGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICB0YWdHUFIgPSBhbGxvY2F0
ZSgpOworICAgICAgICAgICAgcGF5bG9hZEdQUiA9IGFsbG9jYXRlKCk7CisgICAgICAgICAgICBt
X2ppdC5lbWl0TG9hZChub2RlSW5kZXgsIHRhZ0dQUiwgcGF5bG9hZEdQUik7CisgICAgICAgICAg
ICBtX2dwcnMucmV0YWluKHRhZ0dQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxl
ZCk7CisgICAgICAgICAgICBtX2dwcnMucmV0YWluKHBheWxvYWRHUFIsIHZpcnR1YWxSZWdpc3Rl
ciwgU3BpbGxPcmRlclNwaWxsZWQpOworICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSh0YWdH
UFIsIHBheWxvYWRHUFIsIHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRKU0RvdWJsZSA/IERhdGFG
b3JtYXRKUyA6IHNwaWxsRm9ybWF0KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6CisgICAgY2FzZSBEYXRhRm9y
bWF0Q2VsbDoKKyAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOiB7CisgICAgICAgIEdQUlJlZyBn
cHIgPSBpbmZvLmdwcigpOworICAgICAgICAvLyBJZiB0aGUgcmVnaXN0ZXIgaGFzIGFscmVhZHkg
YmVlbiBsb2NrZWQgd2UgbmVlZCB0byB0YWtlIGEgY29weS4KKyAgICAgICAgaWYgKG1fZ3Bycy5p
c0xvY2tlZChncHIpKSB7CisgICAgICAgICAgICBwYXlsb2FkR1BSID0gYWxsb2NhdGUoKTsKKyAg
ICAgICAgICAgIG1faml0Lm1vdmUoZ3ByLCBwYXlsb2FkR1BSKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHBheWxvYWRHUFIgPSBncHI7CisgICAgICAgICAgICBtX2dwcnMubG9jayhn
cHIpOworICAgICAgICB9CisgICAgICAgIHRhZ0dQUiA9IGFsbG9jYXRlKCk7CisgICAgICAgIHVp
bnQzMl90IHRhZyA9IEpTVmFsdWU6OkVtcHR5VmFsdWVUYWc7CisgICAgICAgIERhdGFGb3JtYXQg
ZmlsbEZvcm1hdCA9IERhdGFGb3JtYXRKUzsKKyAgICAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVy
Rm9ybWF0KCkpIHsKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjoKKyAgICAgICAgICAg
IHRhZyA9IEpTVmFsdWU6OkludDMyVGFnOworICAgICAgICAgICAgZmlsbEZvcm1hdCA9IERhdGFG
b3JtYXRKU0ludGVnZXI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEYXRhRm9y
bWF0Q2VsbDoKKyAgICAgICAgICAgIHRhZyA9IEpTVmFsdWU6OkNlbGxUYWc7CisgICAgICAgICAg
ICBmaWxsRm9ybWF0ID0gRGF0YUZvcm1hdEpTQ2VsbDsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgorICAgICAgICAgICAgdGFnID0gSlNWYWx1ZTo6
Qm9vbGVhblRhZzsKKyAgICAgICAgICAgIGZpbGxGb3JtYXQgPSBEYXRhRm9ybWF0SlNCb29sZWFu
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKHRhZyksIHRhZ0dQUik7CisgICAgICAgIG1fZ3Bycy5y
ZWxlYXNlKGdwcik7CisgICAgICAgIG1fZ3Bycy5yZXRhaW4odGFnR1BSLCB2aXJ0dWFsUmVnaXN0
ZXIsIFNwaWxsT3JkZXJKUyk7CisgICAgICAgIG1fZ3Bycy5yZXRhaW4ocGF5bG9hZEdQUiwgdmly
dHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKHRh
Z0dQUiwgcGF5bG9hZEdQUiwgZmlsbEZvcm1hdCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOgorICAgIGNhc2UgRGF0YUZvcm1hdERv
dWJsZTogeworICAgICAgICBGUFJSZWcgb2xkRlBSID0gaW5mby5mcHIoKTsKKyAgICAgICAgbV9m
cHJzLmxvY2sob2xkRlBSKTsKKyAgICAgICAgdGFnR1BSID0gYWxsb2NhdGUoKTsKKyAgICAgICAg
cGF5bG9hZEdQUiA9IGFsbG9jYXRlKCk7CisgICAgICAgIGJveERvdWJsZShvbGRGUFIsIHRhZ0dQ
UiwgcGF5bG9hZEdQUik7CisgICAgICAgIG1fZnBycy51bmxvY2sob2xkRlBSKTsKKyAgICAgICAg
bV9mcHJzLnJlbGVhc2Uob2xkRlBSKTsKKyAgICAgICAgbV9ncHJzLnJldGFpbih0YWdHUFIsIHZp
cnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckpTKTsKKyAgICAgICAgbV9ncHJzLnJldGFpbihwYXls
b2FkR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7CisgICAgICAgIGluZm8uZmls
bEpTVmFsdWUodGFnR1BSLCBwYXlsb2FkR1BSLCBEYXRhRm9ybWF0SlMpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjYXNlIERhdGFGb3JtYXRKUzoKKyAgICBjYXNlIERhdGFG
b3JtYXRKU0ludGVnZXI6CisgICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgorICAgIGNhc2UgRGF0
YUZvcm1hdEpTQm9vbGVhbjogeworICAgICAgICB0YWdHUFIgPSBpbmZvLnRhZ0dQUigpOworICAg
ICAgICBwYXlsb2FkR1BSID0gaW5mby5wYXlsb2FkR1BSKCk7CisgICAgICAgIG1fZ3Bycy5sb2Nr
KHRhZ0dQUik7CisgICAgICAgIG1fZ3Bycy5sb2NrKHBheWxvYWRHUFIpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6Cisg
ICAgICAgIC8vIHRoaXMgdHlwZSBjdXJyZW50bHkgbmV2ZXIgb2NjdXJzCisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVZh
bHVlVG9OdW1iZXIoTm9kZSYgbm9kZSkKK3sKKyAgICBpZiAoaXNLbm93bk51bWVyaWMobm9kZS5j
aGlsZDEoKSkpIHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOworICAgICAgICBvcDEuZmlsbCgpOworICAgICAgICBpZiAob3AxLmlzRG91YmxlKCkpIHsK
KyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAgICAg
IG1faml0Lm1vdmVEb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAg
ZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzLCBvcDEpOworICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcywgb3AxLCBmYWxzZSk7Cisg
ICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS50YWdHUFIoKSwgcmVzdWx0VGFnLmdwcigpKTsKKyAg
ICAgICAgICAgIG1faml0Lm1vdmUob3AxLnBheWxvYWRHUFIoKSwgcmVzdWx0UGF5bG9hZC5ncHIo
KSk7CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5
bG9hZC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Cisg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzLCBvcDEpOworICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHRQYXlsb2FkKHRoaXMsIG9wMSwgZmFsc2UpOworCisgICAgQVNTRVJUKCFpc0ludDMyQ29u
c3RhbnQobm9kZS5jaGlsZDEoKSkpOworICAgIEFTU0VSVCghaXNOdW1iZXJDb25zdGFudChub2Rl
LmNoaWxkMSgpKSk7CisKKyAgICBHUFJSZWcgdGFnR1BSID0gb3AxLnRhZ0dQUigpOworICAgIEdQ
UlJlZyBwYXlsb2FkR1BSID0gb3AxLnBheWxvYWRHUFIoKTsKKyAgICBHUFJSZWcgcmVzdWx0VGFn
R1BSID0gcmVzdWx0VGFnLmdwcigpOworICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVz
dWx0UGF5bG9hZC5ncHIoKTsKKyAgICBvcDEudXNlKCk7CisKKyAgICBKSVRDb21waWxlcjo6SnVt
cCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHRhZ0dQ
UiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CisgICAgSklUQ29tcGlsZXI6Okp1
bXAgbm9uTnVtZXJpYyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpOworCisgICAgLy8g
Rmlyc3QsIGlmIHdlIGdldCBoZXJlIHdlIGhhdmUgYSBkb3VibGUgZW5jb2RlZCBhcyBhIEpTVmFs
dWUKKyAgICBKSVRDb21waWxlcjo6SnVtcCBoYXNVbmJveGVkRG91YmxlID0gbV9qaXQuanVtcCgp
OworCisgICAgLy8gTmV4dCBoYW5kbGUgY2VsbHMgKCYgb3RoZXIgSlMgaW1tZWRpYXRlcykKKyAg
ICBub25OdW1lcmljLmxpbmsoJm1faml0KTsKKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhy
ZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpOworICAgIGNhbGxPcGVyYXRpb24oZGZnQ29u
dmVydEpTVmFsdWVUb051bWJlciwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIHRhZ0dQUiwgcGF5
bG9hZEdQUik7CisgICAgYm94RG91YmxlKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCByZXN1bHRU
YWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpOworICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVz
dWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBoYXND
YWxsZWRUb051bWJlciA9IG1faml0Lmp1bXAoKTsKKyAgICAKKyAgICAvLyBGaW5hbGx5LCBoYW5k
bGUgaW50ZWdlcnMuCisgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKKyAgICBoYXNVbmJveGVk
RG91YmxlLmxpbmsoJm1faml0KTsKKyAgICBtX2ppdC5tb3ZlKHRhZ0dQUiwgcmVzdWx0VGFnR1BS
KTsKKyAgICBtX2ppdC5tb3ZlKHBheWxvYWRHUFIsIHJlc3VsdFBheWxvYWRHUFIpOworICAgIGhh
c0NhbGxlZFRvTnVtYmVyLmxpbmsoJm1faml0KTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRh
Z0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVk
RXhwbGljaXRseSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFs
dWVUb0ludDMyKE5vZGUmIG5vZGUpCit7CisgICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9k
ZS5jaGlsZDEoKSkpOworCisgICAgaWYgKGlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKSB7
CisgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAgICAgICBtX2ppdC5tb3ZlKG9w
MS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdlbmVy
YXRpb25JbmZvJiBjaGlsZEluZm8gPSBtX2dlbmVyYXRpb25JbmZvW2F0KG5vZGUuY2hpbGQxKCkp
LnZpcnR1YWxSZWdpc3RlcigpXTsKKyAgICBpZiAoY2hpbGRJbmZvLmlzSlNEb3VibGUoKSkgewor
ICAgICAgICBEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgRlBSUmVnIGZwciA9IG9wMS5mcHIo
KTsKKyAgICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgb3AxLnVzZSgp
OworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCB0cnVuY2F0ZWRUb0ludGVnZXIgPSBtX2ppdC5i
cmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoZnByLCBncHIsIEpJVENvbXBpbGVyOjpCcmFuY2hJ
ZlRydW5jYXRlU3VjY2Vzc2Z1bCk7CisKKyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMo
Z3ByKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbih0b0ludDMyLCBncHIsIGZwcik7CisgICAgICAg
IHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoZ3ByKTsKKworICAgICAgICB0cnVuY2F0ZWRUb0ludGVn
ZXIubGluaygmbV9qaXQpOworICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwciwgbV9jb21waWxlSW5k
ZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgdGFnR1BSID0gb3AxLnRhZ0dQUigp
OworICAgIEdQUlJlZyBwYXlsb2FkR1BSID0gb3AxLnBheWxvYWRHUFIoKTsKKyAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgIG9wMS51c2UoKTsKKworICAgIEpJVENvbXBp
bGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKworICAgIC8vIEZp
cnN0IGhhbmRsZSBub24taW50ZWdlcnMKKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1
bHRHUFIpOworICAgIGNhbGxPcGVyYXRpb24oZGZnQ29udmVydEpTVmFsdWVUb0ludDMyLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgdGFnR1BSLCBwYXlsb2FkR1BSKTsKKyAgICBtX2ppdC5tb3Zl
KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgIHNpbGVudEZpbGxBbGxS
ZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBoYXNDYWxsZWRUb0lu
dDMyID0gbV9qaXQuanVtcCgpOworCisgICAgLy8gVGhlbiBoYW5kbGUgaW50ZWdlcnMuCisgICAg
aXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKKyAgICBtX2ppdC5tb3ZlKHBheWxvYWRHUFIsIHJlc3Vs
dEdQUik7CisgICAgaGFzQ2FsbGVkVG9JbnQzMi5saW5rKCZtX2ppdCk7CisgICAgaW50ZWdlclJl
c3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVVJbnQzMlRvTnVt
YmVyKE5vZGUmIG5vZGUpCit7CisgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOworICAgIEZQUlRlbXBvcmFyeSBib3hlcih0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0VGFnKHRoaXMsIG9wMSk7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhp
cyk7CisgICAgICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIHBvc2l0aXZlID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgb3AxLmdwcigpLCBUcnVz
dGVkSW1tMzIoMCkpOworICAgICAgICAKKyAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShv
cDEuZ3ByKCksIGJveGVyLmZwcigpKTsKKyAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tUHRyKCZ0d29Ub1RoZTMyKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7IC8vIHJldXNlIHJl
c3VsdFBheWxvYWQgcmVnaXN0ZXIgaGVyZS4KKyAgICBtX2ppdC5hZGREb3VibGUoSklUQ29tcGls
ZXI6OkFkZHJlc3MocmVzdWx0UGF5bG9hZC5ncHIoKSwgMCksIGJveGVyLmZwcigpKTsKKyAgICAg
ICAgCisgICAgYm94RG91YmxlKGJveGVyLmZwcigpLCByZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBh
eWxvYWQuZ3ByKCkpOworICAgICAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9q
aXQuanVtcCgpOworICAgICAgICAKKyAgICBwb3NpdGl2ZS5saW5rKCZtX2ppdCk7CisgICAgICAg
IAorICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVzdWx0
VGFnLmdwcigpKTsKKyAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIo
KSk7CisgICAgICAgIAorICAgIGRvbmUubGluaygmbV9qaXQpOworCisgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsK
K30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVLbm93bkNvbnN0YW50QXJp
dGhPcChOb2RlVHlwZSBvcCwgTm9kZUluZGV4IHJlZ0NoaWxkLCBOb2RlSW5kZXggaW1tQ2hpbGQs
IGJvb2wgY29tbXV0ZSkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCByZWdBcmcodGhpcywgcmVnQ2hp
bGQpOworICAgIHJlZ0FyZy5maWxsKCk7CisgICAgCisgICAgaWYgKHJlZ0FyZy5pc0RvdWJsZSgp
KSB7CisgICAgICAgIEZQUlJlZyByZWdBcmdGUFIgPSByZWdBcmcuZnByKCk7CisgICAgICAgIEZQ
UlRlbXBvcmFyeSBpbW0odGhpcyk7CisgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywg
cmVnQXJnKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgIEZQ
UlJlZyBpbW1GUFIgPSBpbW0uZnByKCk7CisgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1
bHQuZnByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAg
ICAgICAgdXNlKHJlZ0NoaWxkKTsKKyAgICAgICAgdXNlKGltbUNoaWxkKTsKKworICAgICAgICBp
bnQzMl90IGltbTMyID0gdmFsdWVPZkludDMyQ29uc3RhbnQoaW1tQ2hpbGQpOworICAgICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihpbW0zMiksIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2pp
dC5jb252ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNoR1BSLCBpbW1GUFIpOworCisgICAgICAgIHN3
aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICAgICAgY2FzZSBBcml0aEFk
ZDoKKyAgICAgICAgICAgIG1faml0LmFkZERvdWJsZShyZWdBcmdGUFIsIGltbUZQUiwgcmVzdWx0
RlBSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aFN1
YjoKKyAgICAgICAgICAgIG1faml0LnN1YkRvdWJsZShyZWdBcmdGUFIsIGltbUZQUiwgcmVzdWx0
RlBSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGRvdWJsZVJlc3VsdChyZXN1bHRGUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxl
ZEV4cGxpY2l0bHkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR1BSUmVnIHJlZ0Fy
Z1RhZ0dQUiA9IHJlZ0FyZy50YWdHUFIoKTsKKyAgICBHUFJSZWcgcmVnQXJnUGF5bG9hZEdQUiA9
IHJlZ0FyZy5wYXlsb2FkR1BSKCk7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzLCBy
ZWdBcmcpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIHJlZ0FyZywgZmFs
c2UpOworICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7CisgICAgR1BS
UmVnIHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOworICAgIEZQUlRlbXBv
cmFyeSB0bXAxKHRoaXMpOworICAgIEZQUlRlbXBvcmFyeSB0bXAyKHRoaXMpOworICAgIEZQUlJl
ZyB0bXAxRlBSID0gdG1wMS5mcHIoKTsKKyAgICBGUFJSZWcgdG1wMkZQUiA9IHRtcDIuZnByKCk7
CisgICAgdXNlKHJlZ0NoaWxkKTsKKyAgICB1c2UoaW1tQ2hpbGQpOworCisgICAgSklUQ29tcGls
ZXI6Okp1bXAgbm90SW50OworICAgIGludDMyX3QgaW1tID0gdmFsdWVPZkludDMyQ29uc3RhbnQo
aW1tQ2hpbGQpOworCisgICAgaWYgKCFpc0tub3duTnVtZXJpYyhyZWdDaGlsZCkpCisgICAgICAg
IG5vdEludCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVnQXJn
VGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICAKKyAgICBKSVRD
b21waWxlcjo6SnVtcCBvdmVyZmxvdzsKKworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIFZh
bHVlQWRkOgorICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIG92ZXJmbG93ID0gbV9qaXQuYnJh
bmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCByZWdBcmdQYXlsb2FkR1BSLCBJbW0z
MihpbW0pLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAg
IGNhc2UgQXJpdGhTdWI6CisgICAgICAgIG92ZXJmbG93ID0gbV9qaXQuYnJhbmNoU3ViMzIoTWFj
cm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCByZWdBcmdQYXlsb2FkR1BSLCBJbW0zMihpbW0pLCByZXN1
bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVzdWx0VGFnR1BSKTsKKyAgICBKSVRDb21w
aWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgIAorICAgIG92ZXJmbG93Lmxpbmso
Jm1faml0KTsKKyAgICAvLyBmaXJzdCBkZWFsIHdpdGggb3ZlcmZsb3cgY2FzZQorICAgIG1faml0
LmNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ0FyZ1BheWxvYWRHUFIsIHRtcDJGUFIpOworICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbTMyKGltbSksIHJlc3VsdFBheWxvYWRHUFIpOworICAgIG1faml0
LmNvbnZlcnRJbnQzMlRvRG91YmxlKHJlc3VsdFBheWxvYWRHUFIsIHRtcDFGUFIpOworICAgIHN3
aXRjaCAob3ApIHsKKyAgICBjYXNlIFZhbHVlQWRkOgorICAgIGNhc2UgQXJpdGhBZGQ6CisgICAg
ICAgIG1faml0LmFkZERvdWJsZSh0bXAxRlBSLCB0bXAyRlBSKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgIAorICAgIGNhc2UgQXJpdGhTdWI6CisgICAgICAgIG1faml0LnN1YkRvdWJsZSh0bXAx
RlBSLCB0bXAyRlBSKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgSklUQ29t
cGlsZXI6Okp1bXAgZG9uZUNhc2VDb252ZXJ0ZWRUb0ludDsKKyAgICAKKyAgICBpZiAob3AgPT0g
VmFsdWVBZGQpIHsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsK
KyAgICAgICAgbV9qaXQuYnJhbmNoQ29udmVydERvdWJsZVRvSW50MzIodG1wMkZQUiwgcmVzdWx0
UGF5bG9hZEdQUiwgZmFpbHVyZUNhc2VzLCB0bXAxRlBSKTsKKyAgICAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZXN1bHRUYWdHUFIpOworICAgICAgICBk
b25lQ2FzZUNvbnZlcnRlZFRvSW50ID0gbV9qaXQuanVtcCgpOworICAgICAgICAKKyAgICAgICAg
ZmFpbHVyZUNhc2VzLmxpbmsoJm1faml0KTsKKyAgICB9CisgICAgCisgICAgYm94RG91YmxlKHRt
cDJGUFIsIHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAgIAorICAgIGlm
ICghaXNLbm93bk51bWVyaWMocmVnQ2hpbGQpKSB7CisgICAgICAgIEFTU0VSVChub3RJbnQuaXNT
ZXQoKSk7CisgICAgICAgIEFTU0VSVChvcCA9PSBWYWx1ZUFkZCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZUNhc2VXYXNOdW1iZXIgPSBtX2ppdC5qdW1wKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgbm90SW50LmxpbmsoJm1faml0KTsKKyAgICAgICAgICAg
IAorICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBh
eWxvYWRHUFIpOworICAgICAgICBpZiAoY29tbXV0ZSkKKyAgICAgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uVmFsdWVBZGROb3ROdW1iZXIsIHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9h
ZEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGltbSksIHJlZ0FyZ1RhZ0dQUiwgcmVnQXJnUGF5
bG9hZEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uVmFsdWVBZGROb3ROdW1iZXIsIHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgcmVn
QXJnVGFnR1BSLCByZWdBcmdQYXlsb2FkR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoaW1tKSk7
CisgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0VGFnR1BSLCByZXN1bHRQYXls
b2FkR1BSKTsKKyAgICAgICAgICAgIAorICAgICAgICBkb25lQ2FzZVdhc051bWJlci5saW5rKCZt
X2ppdCk7CisgICAgfQorICAgIAorICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIGlmIChkb25l
Q2FzZUNvbnZlcnRlZFRvSW50LmlzU2V0KCkpCisgICAgICAgIGRvbmVDYXNlQ29udmVydGVkVG9J
bnQubGluaygmbV9qaXQpOworCisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3Vs
dFBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkp
OworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUJhc2ljQXJpdGhPcChO
b2RlVHlwZSBvcCwgTm9kZSAmbm9kZSkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGls
ZDIoKSk7CisgICAgYXJnMS5maWxsKCk7CisgICAgYXJnMi5maWxsKCk7CisKKyAgICBpZiAoYXJn
MS5pc0RvdWJsZSgpICYmIGFyZzIuaXNEb3VibGUoKSkgeworICAgICAgICBGUFJSZWcgYXJnMUZQ
UiA9IGFyZzEuZnByKCk7CisgICAgICAgIEZQUlJlZyBhcmcyRlBSID0gYXJnMi5mcHIoKTsKKyAg
ICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBhcmcxKTsKKyAgICAgICAgYXJnMS51c2Uo
KTsKKyAgICAgICAgYXJnMi51c2UoKTsKKyAgICAgICAgc3dpdGNoIChvcCkgeworICAgICAgICBj
YXNlIFZhbHVlQWRkOgorICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICAgICAgbV9qaXQu
YWRkRG91YmxlKGFyZzFGUFIsIGFyZzJGUFIsIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoU3ViOgorICAgICAgICAgICAg
bV9qaXQuc3ViRG91YmxlKGFyZzFGUFIsIGFyZzJGUFIsIHJlc3VsdC5mcHIoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoTXVsOgorICAgICAg
ICAgICAgbV9qaXQubXVsRG91YmxlKGFyZzFGUFIsIGFyZzJGUFIsIHJlc3VsdC5mcHIoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAgICAgICBkb3VibGVS
ZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBs
aWNpdGx5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEZQUlRlbXBvcmFyeSB0bXAx
KHRoaXMpOworICAgIEZQUlRlbXBvcmFyeSB0bXAyKHRoaXMpOworICAgIEZQUlJlZyB0bXAxRlBS
ID0gdG1wMS5mcHIoKTsKKyAgICBGUFJSZWcgdG1wMkZQUiA9IHRtcDIuZnByKCk7CisgICAgCisg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzLCBhcmcxLmlzRG91YmxlKCkgPyBhcmcyIDog
YXJnMSk7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcywgYXJnMS5pc0RvdWJs
ZSgpID8gYXJnMiA6IGFyZzEsIGZhbHNlKTsKKyAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gcmVz
dWx0VGFnLmdwcigpOworICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9h
ZC5ncHIoKTsKKworICAgIEdQUlJlZyBhcmcxVGFnR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBH
UFJSZWcgYXJnMVBheWxvYWRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIEdQUlJlZyBhcmcyVGFn
R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBHUFJSZWcgYXJnMlBheWxvYWRHUFIgPSBJbnZhbGlk
R1BSUmVnOworICAgIEdQUlRlbXBvcmFyeSB0bXBUYWcodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5
IHRtcFBheWxvYWQodGhpcyk7CisKKyAgICBpZiAoYXJnMS5pc0RvdWJsZSgpKSB7CisgICAgICAg
IGFyZzFUYWdHUFIgPSB0bXBUYWcuZ3ByKCk7CisgICAgICAgIGFyZzFQYXlsb2FkR1BSID0gdG1w
UGF5bG9hZC5ncHIoKTsKKyAgICAgICAgYm94RG91YmxlKGFyZzEuZnByKCksIGFyZzFUYWdHUFIs
IGFyZzFQYXlsb2FkR1BSKTsKKyAgICAgICAgYXJnMlRhZ0dQUiA9IGFyZzIudGFnR1BSKCk7Cisg
ICAgICAgIGFyZzJQYXlsb2FkR1BSID0gYXJnMi5wYXlsb2FkR1BSKCk7CisgICAgfSBlbHNlIGlm
IChhcmcyLmlzRG91YmxlKCkpIHsKKyAgICAgICAgYXJnMVRhZ0dQUiA9IGFyZzEudGFnR1BSKCk7
CisgICAgICAgIGFyZzFQYXlsb2FkR1BSID0gYXJnMS5wYXlsb2FkR1BSKCk7CisgICAgICAgIGFy
ZzJUYWdHUFIgPSB0bXBUYWcuZ3ByKCk7CisgICAgICAgIGFyZzJQYXlsb2FkR1BSID0gdG1wUGF5
bG9hZC5ncHIoKTsKKyAgICAgICAgYm94RG91YmxlKGFyZzIuZnByKCksIGFyZzJUYWdHUFIsIGFy
ZzJQYXlsb2FkR1BSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhcmcxVGFnR1BSID0gYXJnMS50
YWdHUFIoKTsKKyAgICAgICAgYXJnMVBheWxvYWRHUFIgPSBhcmcxLnBheWxvYWRHUFIoKTsKKyAg
ICAgICAgYXJnMlRhZ0dQUiA9IGFyZzIudGFnR1BSKCk7CisgICAgICAgIGFyZzJQYXlsb2FkR1BS
ID0gYXJnMi5wYXlsb2FkR1BSKCk7CisgICAgfQorCisgICAgYXJnMS51c2UoKTsKKyAgICBhcmcy
LnVzZSgpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIGNoaWxkMU5vdEludDsKKyAgICBK
SVRDb21waWxlcjo6SnVtcCBjaGlsZDJOb3RJbnQ7CisgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0
IG92ZXJmbG93OworICAgIAorICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKSkp
CisgICAgICAgIGNoaWxkMU5vdEludCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgYXJnMVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CisK
KyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKQorICAgICAgICBjaGlsZDJO
b3RJbnQgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGFyZzJUYWdH
UFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOworICAgIAorICAgIHN3aXRjaCAo
b3ApIHsKKyAgICBjYXNlIFZhbHVlQWRkOgorICAgIGNhc2UgQXJpdGhBZGQ6IHsKKyAgICAgICAg
b3ZlcmZsb3cuYXBwZW5kKG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxv
dywgYXJnMVBheWxvYWRHUFIsIGFyZzJQYXlsb2FkR1BSLCByZXN1bHRQYXlsb2FkR1BSKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBcml0aFN1YjogeworICAg
ICAgICBvdmVyZmxvdy5hcHBlbmQobV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92
ZXJmbG93LCBhcmcxUGF5bG9hZEdQUiwgYXJnMlBheWxvYWRHUFIsIHJlc3VsdFBheWxvYWRHUFIp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFyaXRoTXVsOiB7
CisgICAgICAgIG92ZXJmbG93LmFwcGVuZChtX2ppdC5icmFuY2hNdWwzMihNYWNyb0Fzc2VtYmxl
cjo6T3ZlcmZsb3csIGFyZzFQYXlsb2FkR1BSLCBhcmcyUGF5bG9hZEdQUiwgcmVzdWx0UGF5bG9h
ZEdQUikpOworICAgICAgICBvdmVyZmxvdy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCByZXN1bHRQYXlsb2FkR1BSKSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorICAgIAorICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMy
VGFnKSwgcmVzdWx0VGFnR1BSKTsKKyAgICAgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9u
ZSA9IG1faml0Lmp1bXAoKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgaGF2ZUZQ
UkFyZ3VtZW50czsKKworICAgIG92ZXJmbG93LmxpbmsoJm1faml0KTsKKyAgICAgICAgCisgICAg
Ly8gYm90aCBhcmd1bWVudHMgYXJlIGludGVnZXJzCisgICAgbV9qaXQuY29udmVydEludDMyVG9E
b3VibGUoYXJnMVBheWxvYWRHUFIsIHRtcDFGUFIpOworICAgIG1faml0LmNvbnZlcnRJbnQzMlRv
RG91YmxlKGFyZzJQYXlsb2FkR1BSLCB0bXAyRlBSKTsKKyAgICAgICAgCisgICAgaGF2ZUZQUkFy
Z3VtZW50cy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgCisgICAgSklUQ29tcGlsZXI6
Okp1bXBMaXN0IG5vdE51bWJlcnM7CisgICAgICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIGNo
aWxkMk5vdEludDI7CisgICAgICAgIAorICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGls
ZDEoKSkpIHsKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgIGNo
aWxkMU5vdEludC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKCFpc0tu
b3duTnVtZXJpYyhub2RlLmNoaWxkMSgpKSkgeworICAgICAgICAgICAgQVNTRVJUKG9wID09IFZh
bHVlQWRkKTsKKyAgICAgICAgICAgIG5vdE51bWJlcnMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGFyZzFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpMb3dlc3RUYWcpKSk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgaWYgKGFyZzEuaXNE
b3VibGUoKSkKKyAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoYXJnMS5mcHIoKSwgdG1wMUZQ
Uik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHVuYm94RG91YmxlKGFyZzFUYWdHUFIsIGFy
ZzFQYXlsb2FkR1BSLCB0bXAxRlBSLCBzY3JhdGNoLmZwcigpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAvLyBjaGlsZDEgaXMgY29udmVydGVkIHRvIGEgZG91YmxlOyBjaGlsZDIgbWF5IGVpdGhl
ciBiZSBhbiBpbnQgb3IKKyAgICAgICAgLy8gYSBib3hlZCBkb3VibGUKKyAgICAgICAgICAgIAor
ICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAg
ICBpZiAoaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDIoKSkpCisgICAgICAgICAgICAgICAgY2hp
bGQyTm90SW50MiA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJn
MlRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQob3AgPT0gVmFsdWVBZGQpOworICAgICAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGNoaWxkMklzSW50ID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCBhcmcyVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50
MzJUYWcpKTsKKyAgICAgICAgICAgICAgICBub3ROdW1iZXJzLmFwcGVuZChtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBhcmcyVGFnR1BSLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAgICAgICAgICAgICAgIGNoaWxkMk5vdEludDIgPSBt
X2ppdC5qdW1wKCk7CisgICAgICAgICAgICAgICAgY2hpbGQySXNJbnQubGluaygmbV9qaXQpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgLy8gY2hpbGQg
MiBpcyBkZWZpbml0ZWx5IGFuIGludGVnZXIKKyAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9E
b3VibGUoYXJnMlBheWxvYWRHUFIsIHRtcDJGUFIpOworICAgICAgICAgICAgCisgICAgICAgIGhh
dmVGUFJBcmd1bWVudHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgfQorICAgICAgICAKKyAg
ICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgIEZQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMpOworICAgICAgICBjaGlsZDJOb3RJbnQubGluaygmbV9qaXQpOwor
ICAgICAgICAgICAgCisgICAgICAgIGlmICghaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDIoKSkp
IHsKKyAgICAgICAgICAgIEFTU0VSVChvcCA9PSBWYWx1ZUFkZCk7CisgICAgICAgICAgICBub3RO
dW1iZXJzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBhcmcyVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgLy8gY2hpbGQxIGlzIGRlZmluaXRlbHkgYW4gaW50
ZWdlciwgYW5kIGNoaWxkIDIgaXMgZGVmaW5pdGVseSBub3QKKyAgICAgICAgbV9qaXQuY29udmVy
dEludDMyVG9Eb3VibGUoYXJnMVBheWxvYWRHUFIsIHRtcDFGUFIpOworICAgICAgICAgICAgCisg
ICAgICAgIGlmIChjaGlsZDJOb3RJbnQyLmlzU2V0KCkpCisgICAgICAgICAgICBjaGlsZDJOb3RJ
bnQyLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIAorICAgICAgICBpZiAoYXJnMi5pc0RvdWJs
ZSgpKQorICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShhcmcyLmZwcigpLCB0bXAyRlBSKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgdW5ib3hEb3VibGUoYXJnMlRhZ0dQUiwgYXJnMlBh
eWxvYWRHUFIsIHRtcDJGUFIsIHNjcmF0Y2guZnByKCkpOworICAgIH0KKyAgICAgICAgCisgICAg
aGF2ZUZQUkFyZ3VtZW50cy5saW5rKCZtX2ppdCk7CisgICAgICAgIAorICAgIHN3aXRjaCAob3Ap
IHsKKyAgICBjYXNlIFZhbHVlQWRkOgorICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIG1faml0
LmFkZERvdWJsZSh0bXAyRlBSLCB0bXAxRlBSKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICBjYXNlIEFyaXRoU3ViOgorICAgICAgICBtX2ppdC5zdWJEb3VibGUodG1wMkZQUiwg
dG1wMUZQUik7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBBcml0aE11
bDoKKyAgICAgICAgbV9qaXQubXVsRG91YmxlKHRtcDJGUFIsIHRtcDFGUFIpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lQ2FzZUNvbnZl
cnRlZFRvSW50OworICAgIAorICAgIGlmIChvcCA9PSBWYWx1ZUFkZCkgeworICAgICAgICBKSVRD
b21waWxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOworICAgICAgICBtX2ppdC5icmFuY2hDb252
ZXJ0RG91YmxlVG9JbnQzMih0bXAxRlBSLCByZXN1bHRQYXlsb2FkR1BSLCBmYWlsdXJlQ2FzZXMs
IHRtcDJGUFIpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQz
MlRhZyksIHJlc3VsdFRhZ0dQUik7CisgICAgICAgIAorICAgICAgICBkb25lQ2FzZUNvbnZlcnRl
ZFRvSW50ID0gbV9qaXQuanVtcCgpOworICAgICAgICAKKyAgICAgICAgZmFpbHVyZUNhc2VzLmxp
bmsoJm1faml0KTsKKyAgICB9CisgICAgICAgIAorICAgIGJveERvdWJsZSh0bXAxRlBSLCByZXN1
bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICAKKyAgICBpZiAoIW5vdE51bWJl
cnMuZW1wdHkoKSkgeworICAgICAgICBBU1NFUlQob3AgPT0gVmFsdWVBZGQpOworICAgICAgICAg
ICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmVDYXNlV2FzTnVtYmVyID0gbV9qaXQu
anVtcCgpOworICAgICAgICAgICAgCisgICAgICAgIG5vdE51bWJlcnMubGluaygmbV9qaXQpOwor
ICAgICAgICAgICAgCisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFRhZ0dQ
UiwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFs
dWVBZGROb3ROdW1iZXIsIHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgYXJnMVRhZ0dQ
UiwgYXJnMVBheWxvYWRHUFIsIGFyZzJUYWdHUFIsIGFyZzJQYXlsb2FkR1BSKTsKKyAgICAgICAg
c2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwor
CisgICAgICAgIGRvbmVDYXNlV2FzTnVtYmVyLmxpbmsoJm1faml0KTsKKyAgICB9CisgICAgCisg
ICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgaWYgKGRvbmVDYXNlQ29udmVydGVkVG9JbnQuaXNT
ZXQoKSkKKyAgICAgICAgZG9uZUNhc2VDb252ZXJ0ZWRUb0ludC5saW5rKCZtX2ppdCk7CisgICAg
ICAgIAorICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBt
X2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKK30KKworSklUQ29t
cGlsZXI6OkNhbGwgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQoR1BSUmVnIGJhc2VQYXls
b2FkR1BSLCBHUFJSZWcgcmVzdWx0VGFnR1BSLCBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiwgR1BS
UmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpK
dW1wIHNsb3dQYXRoVGFyZ2V0LCBOb2RlVHlwZSBub2RlVHlwZSkKK3sKKyAgICBBU1NFUlQobm9k
ZVR5cGUgPT0gR2V0QnlJZCB8fCBub2RlVHlwZSA9PSBHZXRNZXRob2QpOworCisgICAgbV9qaXQu
YmVnaW5VbmludGVycnVwdGVkU2VxdWVuY2UoKTsKKyAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVs
UHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBzdHJ1Y3R1cmVD
aGVjayA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJ
VENvbXBpbGVyOjpBZGRyZXNzKGJhc2VQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZWlu
dGVycHJldF9jYXN0PHZvaWQqPigtMSkpKTsKKyAgICBtX2ppdC5lbmRVbmludGVycnVwdGVkU2Vx
dWVuY2UoKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJh
c2VQYXlsb2FkR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSksIHJlc3Vs
dFBheWxvYWRHUFIpOworICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0IHRhZ0xvYWRX
aXRoUGF0Y2ggPSBtX2ppdC5sb2FkMzJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChKSVRD
b21waWxlcjo6QWRkcmVzcyhyZXN1bHRQYXlsb2FkR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOworICAgIEpJVENv
bXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0IHBheWxvYWRMb2FkV2l0aFBhdGNoID0gbV9qaXQubG9h
ZDMyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goSklUQ29tcGlsZXI6OkFkZHJlc3MocmVz
dWx0UGF5bG9hZEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWRHUFIpOworICAgIAorICAgIEpJVENvbXBpbGVy
OjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICBzdHJ1Y3R1cmVDaGVjay5saW5rKCZt
X2ppdCk7CisgICAgCisgICAgaWYgKHNsb3dQYXRoVGFyZ2V0LmlzU2V0KCkpCisgICAgICAgIHNs
b3dQYXRoVGFyZ2V0LmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6TGFiZWwg
c2xvd0Nhc2UgPSBtX2ppdC5sYWJlbCgpOworCisgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMo
cmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBm
dW5jdGlvbkNhbGwgPSBjYWxsT3BlcmF0aW9uKG5vZGVUeXBlID09IEdldEJ5SWQgPyBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUgOiBvcGVyYXRpb25HZXRNZXRob2RPcHRpbWl6ZSwgcmVzdWx0VGFn
R1BSLCByZXN1bHRQYXlsb2FkR1BSLCBiYXNlUGF5bG9hZEdQUiwgaWRlbnRpZmllcihpZGVudGlm
aWVyTnVtYmVyKSk7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRUYWdHUFIsIHJl
c3VsdFBheWxvYWRHUFIpOworICAgIAorICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIAorICAg
IEpJVENvbXBpbGVyOjpMYWJlbCBkb25lTGFiZWwgPSBtX2ppdC5sYWJlbCgpOworCisgICAgbV9q
aXQuYWRkUHJvcGVydHlBY2Nlc3MoUHJvcGVydHlBY2Nlc3NSZWNvcmQoc3RydWN0dXJlVG9Db21w
YXJlLCBmdW5jdGlvbkNhbGwsIHN0cnVjdHVyZUNoZWNrLCB0YWdMb2FkV2l0aFBhdGNoLCBwYXls
b2FkTG9hZFdpdGhQYXRjaCwgc2xvd0Nhc2UsIGRvbmVMYWJlbCwgc2FmZUNhc3Q8aW50OF90Pihi
YXNlUGF5bG9hZEdQUiksIHNhZmVDYXN0PGludDhfdD4ocmVzdWx0VGFnR1BSKSwgc2FmZUNhc3Q8
aW50OF90PihyZXN1bHRQYXlsb2FkR1BSKSwgc2FmZUNhc3Q8aW50OF90PihzY3JhdGNoR1BSKSkp
OworICAgIAorICAgIHJldHVybiBmdW5jdGlvbkNhbGw7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNhY2hlZFB1dEJ5SWQoR1BSUmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcgdmFsdWVUYWdH
UFIsIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIsIE5vZGVJbmRleCB2YWx1ZUluZGV4LCBHUFJSZWcg
c2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCBwdXRLaW5kLCBK
SVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCkKK3sKKyAgICBtX2ppdC5iZWdpblVuaW50
ZXJydXB0ZWRTZXF1ZW5jZSgpOworICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0
dXJlVG9Db21wYXJlOworICAgIEpJVENvbXBpbGVyOjpKdW1wIHN0cnVjdHVyZUNoZWNrID0gbV9q
aXQuYnJhbmNoUHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6
OkFkZHJlc3MoYmFzZVBheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1
Y3R1cmVUb0NvbXBhcmUsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KC0xKSkpOworICAgIG1faml0LmVuZFVuaW50ZXJydXB0ZWRTZXF1ZW5jZSgpOwor
CisgICAgd3JpdGVCYXJyaWVyKGJhc2VQYXlsb2FkR1BSLCB2YWx1ZVRhZ0dQUiwgdmFsdWVJbmRl
eCwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hHUFIpOworCisgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlUGF5bG9hZEdQUiwgSlNPYmplY3Q6
Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkpLCBzY3JhdGNoR1BSKTsKKyAgICBKSVRDb21waWxl
cjo6RGF0YUxhYmVsMzIgdGFnU3RvcmVXaXRoUGF0Y2ggPSBtX2ppdC5zdG9yZTMyV2l0aEFkZHJl
c3NPZmZzZXRQYXRjaCh2YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQ
UiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7
CisgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbDMyIHBheWxvYWRTdG9yZVdpdGhQYXRjaCA9IG1f
aml0LnN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVlUGF5bG9hZEdQUiwgSklUQ29t
cGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9u
ZSA9IG1faml0Lmp1bXAoKTsKKworICAgIHN0cnVjdHVyZUNoZWNrLmxpbmsoJm1faml0KTsKKwor
ICAgIGlmIChzbG93UGF0aFRhcmdldC5pc1NldCgpKQorICAgICAgICBzbG93UGF0aFRhcmdldC5s
aW5rKCZtX2ppdCk7CisKKyAgICBKSVRDb21waWxlcjo6TGFiZWwgc2xvd0Nhc2UgPSBtX2ppdC5s
YWJlbCgpOworCisgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7Cisg
ICAgVl9ERkdPcGVyYXRpb25fRUpDSSBvcHRpbWl6ZWRDYWxsOworICAgIGlmIChtX2ppdC5zdHJp
Y3RNb2RlRm9yKGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luKSkgeworICAgICAgICBpZiAo
cHV0S2luZCA9PSBEaXJlY3QpCisgICAgICAgICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlCisgICAgICAgICAgICBv
cHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKKyAgICAgICAgICAgIG9wdGltaXpl
ZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkTm9uU3Ry
aWN0T3B0aW1pemU7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCA9
IGNhbGxPcGVyYXRpb24ob3B0aW1pemVkQ2FsbCwgdmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQ
UiwgYmFzZVBheWxvYWRHUFIsIGlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpOworICAgIHNp
bGVudEZpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CisKKyAgICBkb25lLmxpbmsoJm1f
aml0KTsKKyAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsK
KworICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKFByb3BlcnR5QWNjZXNzUmVjb3JkKHN0cnVj
dHVyZVRvQ29tcGFyZSwgZnVuY3Rpb25DYWxsLCBzdHJ1Y3R1cmVDaGVjaywgSklUQ29tcGlsZXI6
OkRhdGFMYWJlbENvbXBhY3QodGFnU3RvcmVXaXRoUGF0Y2gubGFiZWwoKSksIEpJVENvbXBpbGVy
OjpEYXRhTGFiZWxDb21wYWN0KHBheWxvYWRTdG9yZVdpdGhQYXRjaC5sYWJlbCgpKSwgc2xvd0Nh
c2UsIGRvbmVMYWJlbCwgc2FmZUNhc3Q8aW50OF90PihiYXNlUGF5bG9hZEdQUiksIHNhZmVDYXN0
PGludDhfdD4odmFsdWVUYWdHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHZhbHVlUGF5bG9hZEdQUiks
IHNhZmVDYXN0PGludDhfdD4oc2NyYXRjaEdQUikpKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y2FjaGVkR2V0TWV0aG9kKEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHJlc3VsdFRh
Z0dQUiwgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCkKK3sK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBzbG93Q2FsbDsKKyAgICBKSVRDb21waWxlcjo6RGF0YUxh
YmVsUHRyIHN0cnVjdFRvQ29tcGFyZSwgcHJvdG9PYmosIHByb3RvU3RydWN0VG9Db21wYXJlLCBw
dXRGdW5jdGlvbjsKKyAgICAKKyAgICAvLyBtX2ppdC5lbWl0TG9hZFBheWxvYWQoYmFzZUluZGV4
LCBzY3JhdGNoR1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCB3cm9uZ1N0cnVjdHVyZSA9IG1f
aml0LmJyYW5jaFB0cldpdGhQYXRjaChKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVy
OjpBZGRyZXNzKGJhc2VQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3Ry
dWN0VG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0
PHZvaWQqPigtMSkpKTsKKyAgICBwcm90b09iaiA9IG1faml0Lm1vdmVXaXRoUGF0Y2goSklUQ29t
cGlsZXI6OlRydXN0ZWRJbW1QdHIoMCksIHJlc3VsdFBheWxvYWRHUFIpOworICAgIEpJVENvbXBp
bGVyOjpKdW1wIHdyb25nUHJvdG9TdHJ1Y3R1cmUgPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2go
SklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRQYXlsb2Fk
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcHJvdG9TdHJ1Y3RUb0NvbXBhcmUsIEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSkpOwor
ICAgIAorICAgIHB1dEZ1bmN0aW9uID0gbV9qaXQubW92ZVdpdGhQYXRjaChKSVRDb21waWxlcjo6
VHJ1c3RlZEltbVB0cigwKSwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlc3VsdFRhZ0dQUik7CisgICAgCisgICAgSklU
Q29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAKKyAgICB3cm9uZ1N0cnVj
dHVyZS5saW5rKCZtX2ppdCk7CisgICAgd3JvbmdQcm90b1N0cnVjdHVyZS5saW5rKCZtX2ppdCk7
CisgICAgCisgICAgc2xvd0NhbGwgPSBjYWNoZWRHZXRCeUlkKGJhc2VQYXlsb2FkR1BSLCByZXN1
bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIHNjcmF0Y2hHUFIsIGlkZW50aWZpZXJOdW1iZXIs
IHNsb3dQYXRoVGFyZ2V0LCBHZXRNZXRob2QpOworICAgIAorICAgIGRvbmUubGluaygmbV9qaXQp
OworICAgIAorICAgIG1faml0LmFkZE1ldGhvZEdldChzbG93Q2FsbCwgc3RydWN0VG9Db21wYXJl
LCBwcm90b09iaiwgcHJvdG9TdHJ1Y3RUb0NvbXBhcmUsIHB1dEZ1bmN0aW9uKTsKK30KKwordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsKE5v
ZGVJbmRleCBvcGVyYW5kLCBib29sIGludmVydCkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmco
dGhpcywgb3BlcmFuZCk7CisgICAgR1BSUmVnIGFyZ1RhZ0dQUiA9IGFyZy50YWdHUFIoKTsKKyAg
ICBHUFJSZWcgYXJnUGF5bG9hZEdQUiA9IGFyZy5wYXlsb2FkR1BSKCk7CisKKyAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzLCBhcmcsIGZhbHNlKTsKKyAgICBHUFJSZWcgcmVzdWx0
UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7CisKKyAgICBKSVRDb21waWxlcjo6SnVt
cCBub3RDZWxsOworICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZCkpCisgICAgICAgIG5vdENl
bGwgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGFyZ1RhZ0dQUiwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjpBZGRyZXNzKGFyZ1BheWxvYWRHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICBtX2ppdC50ZXN0OChpbnZlcnQgPyBKSVRD
b21waWxlcjo6WmVybyA6IEpJVENvbXBpbGVyOjpOb25aZXJvLCBKSVRDb21waWxlcjo6QWRkcmVz
cyhyZXN1bHRQYXlsb2FkR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCksIHJlc3VsdFBh
eWxvYWRHUFIpOworICAgIAorICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZCkpIHsKKyAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgCisgICAg
ICAgIG5vdENlbGwubGluaygmbV9qaXQpOworICAgICAgICAvLyBudWxsIG9yIHVuZGVmaW5lZD8K
KyAgICAgICAgQ09NUElMRV9BU1NFUlQoKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyB8IDEpID09IEpT
VmFsdWU6Ok51bGxUYWcsIFVuZGVmaW5lZFRhZ19PUl8xX0VRVUFMU19OdWxsVGFnKTsKKyAgICAg
ICAgbV9qaXQubW92ZShhcmdUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICBtX2pp
dC5vcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAgIG1faml0
LmNvbXBhcmUzMihpbnZlcnQgPyBKSVRDb21waWxlcjo6Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6
RXF1YWwsIHJlc3VsdFBheWxvYWRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSwg
cmVzdWx0UGF5bG9hZEdQUik7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgfQor
ICAgIAorICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0UGF5bG9hZEdQUiwgbV9jb21waWxlSW5kZXgp
OworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNo
TnVsbChOb2RlSW5kZXggb3BlcmFuZCwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgYm9vbCBp
bnZlcnQpCit7CisgICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Cisg
ICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAg
QmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7Cisg
ICAgCisgICAgaWYgKHRha2VuID09IChtX2Jsb2NrICsgMSkpIHsKKyAgICAgICAgaW52ZXJ0ID0g
IWludmVydDsKKyAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAgdGFrZW4g
PSBub3RUYWtlbjsKKyAgICAgICAgbm90VGFrZW4gPSB0bXA7CisgICAgfQorCisgICAgSlNWYWx1
ZU9wZXJhbmQgYXJnKHRoaXMsIG9wZXJhbmQpOworICAgIEdQUlJlZyBhcmdUYWdHUFIgPSBhcmcu
dGFnR1BSKCk7CisgICAgR1BSUmVnIGFyZ1BheWxvYWRHUFIgPSBhcmcucGF5bG9hZEdQUigpOwor
ICAgIAorICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYXJnKTsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdENl
bGw7CisgICAgCisgICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kKSkKKyAgICAgICAgbm90Q2Vs
bCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnVGFnR1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOworICAgIAorICAgIG1faml0LmxvYWRQdHIo
SklUQ29tcGlsZXI6OkFkZHJlc3MoYXJnUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIHJlc3VsdEdQUik7CisgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3Q4KGludmVy
dCA/IEpJVENvbXBpbGVyOjpaZXJvIDogSklUQ29tcGlsZXI6Ok5vblplcm8sIEpJVENvbXBpbGVy
OjpBZGRyZXNzKHJlc3VsdEdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBK
SVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFrZW4p
OworICAgIAorICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZCkpIHsKKyAgICAgICAgYWRkQnJh
bmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOworICAgICAgICAKKyAgICAgICAgbm90Q2VsbC5s
aW5rKCZtX2ppdCk7CisgICAgICAgIC8vIG51bGwgb3IgdW5kZWZpbmVkPworICAgICAgICBDT01Q
SUxFX0FTU0VSVCgoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnIHwgMSkgPT0gSlNWYWx1ZTo6TnVsbFRh
ZywgVW5kZWZpbmVkVGFnX09SXzFfRVFVQUxTX051bGxUYWcpOworICAgICAgICBtX2ppdC5tb3Zl
KGFyZ1RhZ0dQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIo
MSksIHJlc3VsdEdQUik7CisgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihpbnZlcnQg
PyBKSVRDb21waWxlcjo6Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1YWwsIHJlc3VsdEdQUiwg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSksIHRha2VuKTsKKyAg
ICB9CisgICAgCisgICAgaWYgKG5vdFRha2VuICE9IChtX2Jsb2NrICsgMSkpCisgICAgICAgIGFk
ZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKK30KKworYm9vbCBTcGVjdWxhdGl2ZUpJ
VDo6bm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChOb2RlJiBub2RlLCBOb2RlSW5kZXggb3BlcmFu
ZCwgYm9vbCBpbnZlcnQpCit7CisgICAgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCA9IGRldGVj
dFBlZXBIb2xlQnJhbmNoKCk7CisgICAgaWYgKGJyYW5jaE5vZGVJbmRleCAhPSBOb05vZGUpIHsK
KyAgICAgICAgQVNTRVJUKG5vZGUuYWRqdXN0ZWRSZWZDb3VudCgpID09IDEpOworICAgICAgICAK
KyAgICAgICAgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwob3BlcmFuZCwgYnJhbmNo
Tm9kZUluZGV4LCBpbnZlcnQpOworICAgIAorICAgICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKKyAgICAgICAgbV9jb21waWxlSW5kZXggPSBicmFu
Y2hOb2RlSW5kZXg7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsKG9wZXJhbmQsIGludmVy
dCk7CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hO
b2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfREZH
T3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKK3sKKyAgICBOb2RlJiBicmFuY2hOb2RlID0g
YXQoYnJhbmNoTm9kZUluZGV4KTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50
YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5u
b3RUYWtlbkJsb2NrSW5kZXgoKTsKKworICAgIEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24g
Y2FsbFJlc3VsdENvbmRpdGlvbiA9IEpJVENvbXBpbGVyOjpOb25aZXJvOworCisgICAgLy8gVGhl
IGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCisgICAg
Ly8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQg
dGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KKyAgICBpZiAodGFr
ZW4gPT0gKG1fYmxvY2sgKyAxKSkgeworICAgICAgICBjb25kID0gSklUQ29tcGlsZXI6OmludmVy
dChjb25kKTsKKyAgICAgICAgY2FsbFJlc3VsdENvbmRpdGlvbiA9IEpJVENvbXBpbGVyOjpaZXJv
OworICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOworICAgICAgICB0YWtlbiA9IG5vdFRh
a2VuOworICAgICAgICBub3RUYWtlbiA9IHRtcDsKKyAgICB9CisKKyAgICBKU1ZhbHVlT3BlcmFu
ZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhp
cywgbm9kZS5jaGlsZDIoKSk7CisgICAgR1BSUmVnIGFyZzFUYWdHUFIgPSBhcmcxLnRhZ0dQUigp
OworICAgIEdQUlJlZyBhcmcxUGF5bG9hZEdQUiA9IGFyZzEucGF5bG9hZEdQUigpOworICAgIEdQ
UlJlZyBhcmcyVGFnR1BSID0gYXJnMi50YWdHUFIoKTsKKyAgICBHUFJSZWcgYXJnMlBheWxvYWRH
UFIgPSBhcmcyLnBheWxvYWRHUFIoKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qg
c2xvd1BhdGg7CisgICAgCisgICAgaWYgKGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQxKCkp
IHx8IGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgIEdQUlJlc3Vs
dCByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICAgICAgYXJnMS51c2UoKTsKKyAgICAgICAgYXJnMi51c2UoKTsKKworICAgICAgICBm
bHVzaFJlZ2lzdGVycygpOworICAgICAgICBjYWxsT3BlcmF0aW9uKGhlbHBlckZ1bmN0aW9uLCBy
ZXN1bHRHUFIsIGFyZzFUYWdHUFIsIGFyZzFQYXlsb2FkR1BSLCBhcmcyVGFnR1BSLCBhcmcyUGF5
bG9hZEdQUik7CisKKyAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3QzMihjYWxsUmVz
dWx0Q29uZGl0aW9uLCByZXN1bHRHUFIpLCB0YWtlbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKyAgICAKKyAgICAgICAgYXJnMS51c2UoKTsKKyAgICAgICAgYXJnMi51c2Uo
KTsKKworICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKQorICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgYXJnMVRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQz
MlRhZykpKTsKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkKKyAg
ICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIGFyZzJUYWdHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
SW50MzJUYWcpKSk7CisgICAgCisgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihjb25k
LCBhcmcxUGF5bG9hZEdQUiwgYXJnMlBheWxvYWRHUFIpLCB0YWtlbik7CisgICAgCisgICAgICAg
IGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5v
ZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RU
YWtlbik7CisgICAgCisgICAgICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CisgICAgCisg
ICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbihoZWxwZXJGdW5jdGlvbiwgcmVzdWx0R1BSLCBhcmcxVGFnR1BSLCBh
cmcxUGF5bG9hZEdQUiwgYXJnMlRhZ0dQUiwgYXJnMlBheWxvYWRHUFIpOworICAgICAgICAgICAg
c2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgICAg
IGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0MzIoY2FsbFJlc3VsdENvbmRpdGlvbiwgcmVzdWx0
R1BSKSwgdGFrZW4pOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG5vdFRha2VuICE9ICht
X2Jsb2NrICsgMSkpCisgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsK
K30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBh
cmUoTm9kZSYgbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwg
U19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQoreworICAgIEpTVmFsdWVPcGVyYW5k
IGFyZzEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlz
LCBub2RlLmNoaWxkMigpKTsKKyAgICBHUFJSZWcgYXJnMVRhZ0dQUiA9IGFyZzEudGFnR1BSKCk7
CisgICAgR1BSUmVnIGFyZzFQYXlsb2FkR1BSID0gYXJnMS5wYXlsb2FkR1BSKCk7CisgICAgR1BS
UmVnIGFyZzJUYWdHUFIgPSBhcmcyLnRhZ0dQUigpOworICAgIEdQUlJlZyBhcmcyUGF5bG9hZEdQ
UiA9IGFyZzIucGF5bG9hZEdQUigpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBz
bG93UGF0aDsKKyAgICAKKyAgICBpZiAoaXNLbm93bk5vdEludGVnZXIobm9kZS5jaGlsZDEoKSkg
fHwgaXNLbm93bk5vdEludGVnZXIobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgR1BSUmVzdWx0
IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHQu
Z3ByKCk7CisgICAgCisgICAgICAgIGFyZzEudXNlKCk7CisgICAgICAgIGFyZzIudXNlKCk7CisK
KyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihoZWxwZXJG
dW5jdGlvbiwgcmVzdWx0UGF5bG9hZEdQUiwgYXJnMVRhZ0dQUiwgYXJnMVBheWxvYWRHUFIsIGFy
ZzJUYWdHUFIsIGFyZzJQYXlsb2FkR1BSKTsKKyAgICAgICAgCisgICAgICAgIGJvb2xlYW5SZXN1
bHQocmVzdWx0UGF5bG9hZEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhw
bGljaXRseSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxv
YWQodGhpcywgYXJnMSwgZmFsc2UpOworICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9
IHJlc3VsdFBheWxvYWQuZ3ByKCk7CisKKyAgICAgICAgYXJnMS51c2UoKTsKKyAgICAgICAgYXJn
Mi51c2UoKTsKKyAgICAKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgp
KSkKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIGFyZzFUYWdHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6SW50MzJUYWcpKSk7CisgICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGls
ZDIoKSkpCisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBhcmcyVGFnR1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkludDMyVGFnKSkpOworCisgICAgICAgIG1faml0LmNvbXBhcmUzMihjb25kLCBh
cmcxUGF5bG9hZEdQUiwgYXJnMlBheWxvYWRHUFIsIHJlc3VsdFBheWxvYWRHUFIpOworICAgIAor
ICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpIHx8ICFpc0tub3duSW50
ZWdlcihub2RlLmNoaWxkMigpKSkgeworICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaGF2
ZVJlc3VsdCA9IG1faml0Lmp1bXAoKTsKKyAgICAKKyAgICAgICAgICAgIHNsb3dQYXRoLmxpbmso
Jm1faml0KTsKKyAgICAgICAgCisgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhy
ZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oaGVscGVyRnVuY3Rp
b24sIHJlc3VsdFBheWxvYWRHUFIsIGFyZzFUYWdHUFIsIGFyZzFQYXlsb2FkR1BSLCBhcmcyVGFn
R1BSLCBhcmcyUGF5bG9hZEdQUik7CisgICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJz
KHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICAKKyAgICAgICAgICAgIG1faml0LmFuZFB0cihU
cnVzdGVkSW1tMzIoMSksIHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICAKKyAgICAgICAgICAg
IGhhdmVSZXN1bHQubGluaygmbV9qaXQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBi
b29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOworICAgIH0KK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9u
U3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hO
b2RlSW5kZXgsIGJvb2wgaW52ZXJ0KQoreworICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFu
Y2hOb2RlSW5kZXgpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2VuQmxv
Y2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRha2Vu
QmxvY2tJbmRleCgpOworCisgICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5j
aCB0byB0aGUgdGFrZW4gYmxvY2suCisgICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRh
a2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2UgY2Fu
IGZhbGwgdGhyb3VnaC4KKyAgICBpZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkgeworICAgICAg
ICBpbnZlcnQgPSAhaW52ZXJ0OworICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOworICAg
ICAgICB0YWtlbiA9IG5vdFRha2VuOworICAgICAgICBub3RUYWtlbiA9IHRtcDsKKyAgICB9Cisg
ICAgCisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBK
U1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIEdQUlJlZyBhcmcx
VGFnR1BSID0gYXJnMS50YWdHUFIoKTsKKyAgICBHUFJSZWcgYXJnMVBheWxvYWRHUFIgPSBhcmcx
LnBheWxvYWRHUFIoKTsKKyAgICBHUFJSZWcgYXJnMlRhZ0dQUiA9IGFyZzIudGFnR1BSKCk7Cisg
ICAgR1BSUmVnIGFyZzJQYXlsb2FkR1BSID0gYXJnMi5wYXlsb2FkR1BSKCk7CisgICAgCisgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcywgYXJnMSwgZmFsc2UpOworICAgIEdQUlJl
ZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKKyAgICAKKyAgICBhcmcx
LnVzZSgpOworICAgIGFyZzIudXNlKCk7CisgICAgCisgICAgaWYgKGlzS25vd25DZWxsKG5vZGUu
Y2hpbGQxKCkpICYmIGlzS25vd25DZWxsKG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgIC8vIHNl
ZSBpZiB3ZSBnZXQgbHVja3k6IGlmIHRoZSBhcmd1bWVudHMgYXJlIGNlbGxzIGFuZCB0aGV5IHJl
ZmVyZW5jZSB0aGUgc2FtZQorICAgICAgICAvLyBjZWxsLCB0aGVuIHRoZXkgbXVzdCBiZSBzdHJp
Y3RseSBlcXVhbC4KKyAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxl
cjo6RXF1YWwsIGFyZzFQYXlsb2FkR1BSLCBhcmcyUGF5bG9hZEdQUiksIGludmVydCA/IG5vdFRh
a2VuIDogdGFrZW4pOworICAgICAgICAKKyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMo
cmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxQ2VsbCwgcmVzdWx0UGF5bG9hZEdQUiwgYXJnMVRhZ0dQUiwgYXJnMVBheWxvYWRH
UFIsIGFyZzJUYWdHUFIsIGFyZzJQYXlsb2FkR1BSKTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJl
Z2lzdGVycyhyZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgCisgICAgICAgIGFkZEJyYW5jaCht
X2ppdC5icmFuY2hUZXN0MzIoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Ok5vblplcm8gOiBKSVRDb21w
aWxlcjo6WmVybywgcmVzdWx0UGF5bG9hZEdQUiksIHRha2VuKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICAvLyBGSVhNRTogQWRkIGZhc3QgcGF0aHMgZm9yIHR3b0NlbGxzLCBudW1iZXIgZXRjLgor
CisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFBheWxvYWRHUFIpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVzdWx0UGF5bG9h
ZEdQUiwgYXJnMVRhZ0dQUiwgYXJnMVBheWxvYWRHUFIsIGFyZzJUYWdHUFIsIGFyZzJQYXlsb2Fk
R1BSKTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRQYXlsb2FkR1BSKTsK
KyAgICAgICAgCisgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0MzIoaW52ZXJ0ID8g
SklUQ29tcGlsZXI6Olplcm8gOiBKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0UGF5bG9hZEdQ
UiksIHRha2VuKTsKKyAgICB9CisgICAgCisgICAgaWYgKG5vdFRha2VuICE9IChtX2Jsb2NrICsg
MSkpCisgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKK30KKwordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0cmljdEVxKE5vZGUm
IG5vZGUsIGJvb2wgaW52ZXJ0KQoreworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMigp
KTsKKyAgICBHUFJSZWcgYXJnMVRhZ0dQUiA9IGFyZzEudGFnR1BSKCk7CisgICAgR1BSUmVnIGFy
ZzFQYXlsb2FkR1BSID0gYXJnMS5wYXlsb2FkR1BSKCk7CisgICAgR1BSUmVnIGFyZzJUYWdHUFIg
PSBhcmcyLnRhZ0dQUigpOworICAgIEdQUlJlZyBhcmcyUGF5bG9hZEdQUiA9IGFyZzIucGF5bG9h
ZEdQUigpOworICAgIAorICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIGFyZzEs
IGZhbHNlKTsKKyAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3By
KCk7CisgICAgCisgICAgYXJnMS51c2UoKTsKKyAgICBhcmcyLnVzZSgpOworICAgIAorICAgIGlm
IChpc0tub3duQ2VsbChub2RlLmNoaWxkMSgpKSAmJiBpc0tub3duQ2VsbChub2RlLmNoaWxkMigp
KSkgeworICAgICAgICAvLyBzZWUgaWYgd2UgZ2V0IGx1Y2t5OiBpZiB0aGUgYXJndW1lbnRzIGFy
ZSBjZWxscyBhbmQgdGhleSByZWZlcmVuY2UgdGhlIHNhbWUKKyAgICAgICAgLy8gY2VsbCwgdGhl
biB0aGV5IG11c3QgYmUgc3RyaWN0bHkgZXF1YWwuCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5vdEVxdWFsQ2FzZSA9IG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIGFy
ZzFQYXlsb2FkR1BSLCBhcmcyUGF5bG9hZEdQUik7CisgICAgICAgIAorICAgICAgICBtX2ppdC5t
b3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoIWludmVydCksIHJlc3VsdFBheWxvYWRHUFIp
OworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworCisgICAg
ICAgIG5vdEVxdWFsQ2FzZS5saW5rKCZtX2ppdCk7CisgICAgICAgIAorICAgICAgICBzaWxlbnRT
cGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsLCByZXN1bHRQYXlsb2FkR1BSLCBhcmcxVGFn
R1BSLCBhcmcxUGF5bG9hZEdQUiwgYXJnMlRhZ0dQUiwgYXJnMlBheWxvYWRHUFIpOworICAgICAg
ICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICAKKyAg
ICAgICAgbV9qaXQuYW5kUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoMSksIHJlc3VsdFBh
eWxvYWRHUFIpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gRklYTUU6IEFkZCBmYXN0IHBhdGhzLgorCisgICAgICAgIHNpbGVu
dFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVzdWx0UGF5bG9hZEdQUiwgYXJnMVRhZ0dQ
UiwgYXJnMVBheWxvYWRHUFIsIGFyZzJUYWdHUFIsIGFyZzJQYXlsb2FkR1BSKTsKKyAgICAgICAg
c2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgCisgICAg
ICAgIG1faml0LmFuZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQYXls
b2FkR1BSKTsKKyAgICB9CisKKyAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG1f
Y29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworfQorCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlJiBub2RlKQoreworICAgIFBfREZHT3BlcmF0aW9u
X0Ugc2xvd0NhbGxGdW5jdGlvbjsKKworICAgIGlmIChub2RlLm9wID09IENhbGwpIHsKKyAgICAg
ICAgc2xvd0NhbGxGdW5jdGlvbiA9IG9wZXJhdGlvbkxpbmtDYWxsOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIEFTU0VSVChub2RlLm9wID09IENvbnN0cnVjdCk7CisgICAgICAgIHNsb3dDYWxsRnVu
Y3Rpb24gPSBvcGVyYXRpb25MaW5rQ29uc3RydWN0OworICAgIH0KKworICAgIC8vIEZvciBjb25z
dHJ1Y3RvcnMsIHRoZSB0aGlzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8g
bWFrZSBzcGFjZQorICAgIC8vIGZvciBpdC4KKyAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBu
b2RlLm9wID09IENhbGwgPyAwIDogMTsKKworICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2Fs
bFR5cGUgPSBub2RlLm9wID09IENhbGwgPyBDYWxsTGlua0luZm86OkNhbGwgOiBDYWxsTGlua0lu
Zm86OkNvbnN0cnVjdDsKKworICAgIE5vZGVJbmRleCBjYWxsZWVOb2RlSW5kZXggPSBtX2ppdC5n
cmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCldOworICAgIEpTVmFsdWVP
cGVyYW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVOb2RlSW5kZXgpOworICAgIEdQUlJlZyBjYWxsZWVU
YWdHUFIgPSBjYWxsZWUudGFnR1BSKCk7CisgICAgR1BSUmVnIGNhbGxlZVBheWxvYWRHUFIgPSBj
YWxsZWUucGF5bG9hZEdQUigpOworICAgIHVzZShjYWxsZWVOb2RlSW5kZXgpOworCisgICAgLy8g
dGhlIGNhbGwgaW5zdHJ1Y3Rpb24ncyBmaXJzdCBjaGlsZCBpcyBlaXRoZXIgdGhlIGZ1bmN0aW9u
IChub3JtYWwgY2FsbCkgb3IgdGhlCisgICAgLy8gcmVjZWl2ZXIgKG1ldGhvZCBjYWxsKS4gc3Vi
c2VxdWVudCBjaGlsZHJlbiBhcmUgdGhlIGFyZ3VtZW50cy4KKyAgICBpbnQgbnVtQXJncyA9IG5v
ZGUubnVtQ2hpbGRyZW4oKSAtIDE7CisKKyAgICAvLyBGb3IgY29uc3RydWN0b3JzLCB0aGUgdGhp
cyBhcmd1bWVudCBpcyBub3QgcGFzc2VkIGJ1dCB3ZSBoYXZlIHRvIG1ha2Ugc3BhY2UKKyAgICAv
LyBmb3IgaXQuCisgICAgaW50IG51bVBhc3NlZEFyZ3MgPSBudW1BcmdzICsgZHVtbXlUaGlzQXJn
dW1lbnQ7CisKKyAgICAvLyBhbW91bnQgb2Ygc3R1ZmYgKGluIHVuaXRzIG9mIHNpemVvZihSZWdp
c3RlcikpIHRoYXQgd2UgbmVlZCB0byBwbGFjZSBhdCB0aGUKKyAgICAvLyB0b3Agb2YgdGhlIEpT
IHN0YWNrLgorICAgIGludCBjYWxsRGF0YVNpemUgPSAwOworCisgICAgLy8gZmlyc3QgdGhlcmUg
YXJlIHRoZSBhcmd1bWVudHMKKyAgICBjYWxsRGF0YVNpemUgKz0gbnVtUGFzc2VkQXJnczsKKwor
ICAgIC8vIGFuZCB0aGVuIHRoZXJlIGlzIHRoZSBjYWxsIGZyYW1lIGhlYWRlcgorICAgIGNhbGxE
YXRhU2l6ZSArPSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CisKKyAgICBtX2pp
dC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtUGFzc2VkQXJncyksIHBh
eWxvYWRPZkNhbGxEYXRhKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkpOworICAgIG1faml0
LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyks
IHRhZ09mQ2FsbERhdGEoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSk7CisgICAgbV9qaXQu
c3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHBheWxvYWRPZkNhbGxEYXRhKFJl
Z2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUpKTsKKyAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ09mQ2FsbERhdGEoUmVnaXN0
ZXJGaWxlOjpDYWxsZXJGcmFtZSkpOworCisgICAgZm9yIChpbnQgYXJnSWR4ID0gMDsgYXJnSWR4
IDwgbnVtQXJnczsgYXJnSWR4KyspIHsKKyAgICAgICAgTm9kZUluZGV4IGFyZ05vZGVJbmRleCA9
IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIDEgKyBh
cmdJZHhdOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJnTm9kZUluZGV4KTsK
KyAgICAgICAgR1BSUmVnIGFyZ1RhZ0dQUiA9IGFyZy50YWdHUFIoKTsKKyAgICAgICAgR1BSUmVn
IGFyZ1BheWxvYWRHUFIgPSBhcmcucGF5bG9hZEdQUigpOworICAgICAgICB1c2UoYXJnTm9kZUlu
ZGV4KTsKKworICAgICAgICBtX2ppdC5zdG9yZTMyKGFyZ1RhZ0dQUiwgdGFnT2ZDYWxsRGF0YSgt
Y2FsbERhdGFTaXplICsgYXJnSWR4ICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKKyAgICAgICAgbV9q
aXQuc3RvcmUzMihhcmdQYXlsb2FkR1BSLCBwYXlsb2FkT2ZDYWxsRGF0YSgtY2FsbERhdGFTaXpl
ICsgYXJnSWR4ICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKKyAgICB9CisKKyAgICBtX2ppdC5zdG9y
ZTMyKGNhbGxlZVRhZ0dQUiwgdGFnT2ZDYWxsRGF0YShSZWdpc3RlckZpbGU6OkNhbGxlZSkpOwor
ICAgIG1faml0LnN0b3JlMzIoY2FsbGVlUGF5bG9hZEdQUiwgcGF5bG9hZE9mQ2FsbERhdGEoUmVn
aXN0ZXJGaWxlOjpDYWxsZWUpKTsKKworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICBHUFJS
ZXN1bHQgcmVzdWx0UGF5bG9hZCh0aGlzKTsKKyAgICBHUFJSZXN1bHQyIHJlc3VsdFRhZyh0aGlz
KTsKKyAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7Cisg
ICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHJlc3VsdFRhZy5ncHIoKTsKKworICAgIEpJVENvbXBp
bGVyOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBz
bG93UGF0aDsKKworICAgIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgY2FsbGVlUGF5bG9hZEdQUiwgdGFyZ2V0VG9DaGVjayk7Cisg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjYWxsZWVQYXlsb2FkR1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZUNoYWluKSksIHJlc3VsdFBheWxv
YWRHUFIpOworICAgIG1faml0LnN0b3JlUHRyKHJlc3VsdFBheWxvYWRHUFIsIHBheWxvYWRPZkNh
bGxEYXRhKFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikpOworICAgIG1faml0LnN0b3JlMzIoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnT2ZDYWxsRGF0
YShSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pKTsKKworICAgIG1faml0LmFkZFB0cihJbW0zMiht
X2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworCisgICAgSklUQ29tcGlsZXI6OkNhbGwg
ZmFzdENhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOworICAgIG1faml0Lm5vdGlmeUNhbGwoZmFzdENh
bGwsIGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luKTsKKworICAgIEpJVENvbXBpbGVyOjpK
dW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CisK
KyAgICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVn
aXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIG1faml0LnBva2UoR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBzbG93Q2FsbCA9IG1faml0LmFkZEZhc3RFeGNl
cHRpb25DaGVjayhtX2ppdC5hcHBlbmRDYWxsKHNsb3dDYWxsRnVuY3Rpb24pLCBhdChtX2NvbXBp
bGVJbmRleCkuY29kZU9yaWdpbik7CisgICAgbV9qaXQuYWRkUHRyKEltbTMyKG1faml0LmNvZGVC
bG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgbV9qaXQubm90aWZ5Q2FsbChtX2ppdC5jYWxsKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKSwgYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pOwor
CisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAgICBzZXR1cFJlc3VsdHMocmVzdWx0UGF5bG9h
ZEdQUiwgcmVzdWx0VGFnR1BSKTsKKworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCBy
ZXN1bHRQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTLCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOworCisgICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxsLCBzbG93
Q2FsbCwgdGFyZ2V0VG9DaGVjaywgY2FsbFR5cGUsIGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3Jp
Z2luKTsKK30KKwogdGVtcGxhdGU8Ym9vbCBzdHJpY3Q+CiBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbChOb2RlSW5kZXggbm9kZUluZGV4LCBEYXRhRm9ybWF0
JiByZXR1cm5Gb3JtYXQpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDEwMDIzNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDYgKzM0LDEyNzkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiAj
aWYgVVNFKEpTVkFMVUU2NCkKIAorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcihO
b2RlSW5kZXggbm9kZUluZGV4LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpCit7CisgICAgTm9k
ZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgR2VuZXJhdGlvbkluZm8mIGluZm8g
PSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisKKyAgICBpZiAoaW5mby5yZWdp
c3RlckZvcm1hdCgpID09IERhdGFGb3JtYXROb25lKSB7CisgICAgICAgIEdQUlJlZyBncHIgPSBh
bGxvY2F0ZSgpOworCisgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAg
ICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFu
dCk7CisgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpIHsKKyAgICAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJD
b25zdGFudChub2RlSW5kZXgpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRl
Z2VyKGdwcik7CisgICAgICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVn
ZXI7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdwcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpIHsKKyAgICAgICAgICAgICAgICBK
U1ZhbHVlIGpzVmFsdWUgPSBqc051bWJlcih2YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4
KSk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpT
VmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZUluZGV4KSk7CisgICAgICAgICAg
ICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKKyAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6
ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlm
IChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEludGVnZXIpIHsKKyAgICAgICAgICAg
IG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsK
KyAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFs
UmVnaXN0ZXIpLCBncHIpOworICAgICAgICAgICAgLy8gVGFnIGl0LCBzaW5jZSBmaWxsSW50ZWdl
cigpIGlzIHVzZWQgd2hlbiB3ZSB3YW50IGEgYm94ZWQgaW50ZWdlci4KKyAgICAgICAgICAgIG1f
aml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZv
cm1hdEpTIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKKyAg
ICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJT
cGlsbGVkKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNpbmNl
IHdlIHN0YXRpY2FsbHkga25vdyB0aGF0IHdlJ3JlIGZpbGxpbmcgYW4gaW50ZWdlciwgYW5kIHZh
bHVlcworICAgICAgICAvLyBpbiB0aGUgUmVnaXN0ZXJGaWxlIGFyZSBib3hlZCwgdGhpcyBtdXN0
IGJlIERhdGFGb3JtYXRKU0ludGVnZXIuCisgICAgICAgIC8vIFdlIHdpbGwgY2hlY2sgdGhpcyB3
aXRoIGEgaml0QXNzZXJ0IGJlbG93LgorICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0
YUZvcm1hdEpTSW50ZWdlcik7CisgICAgICAgIHVubG9jayhncHIpOworICAgIH0KKworICAgIHN3
aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CisgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZToK
KyAgICAgICAgLy8gU2hvdWxkIGhhdmUgZmlsbGVkLCBhYm92ZS4KKyAgICBjYXNlIERhdGFGb3Jt
YXRKU0RvdWJsZToKKyAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CisgICAgY2FzZSBEYXRhRm9y
bWF0SlM6CisgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKKyAgICBjYXNlIERhdGFGb3JtYXRKU0Nl
bGw6CisgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoKKyAgICBjYXNlIERhdGFGb3JtYXRKU0Jv
b2xlYW46CisgICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFnZToKKyAgICAgICAgLy8gU2hvdWxkIG9u
bHkgYmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGlmIHdlIGtub3cgdGhpcyBvcGVyYW5kIHRvIGJl
IGludGVnZXIuCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgY2FzZSBEYXRh
Rm9ybWF0SlNJbnRlZ2VyOiB7CisgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOworICAg
ICAgICBtX2dwcnMubG9jayhncHIpOworICAgICAgICBtX2ppdC5qaXRBc3NlcnRJc0pTSW50MzIo
Z3ByKTsKKyAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEpTSW50ZWdlcjsKKyAgICAg
ICAgcmV0dXJuIGdwcjsKKyAgICB9CisKKyAgICBjYXNlIERhdGFGb3JtYXRJbnRlZ2VyOiB7Cisg
ICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOworICAgICAgICBtX2dwcnMubG9jayhncHIp
OworICAgICAgICBtX2ppdC5qaXRBc3NlcnRJc0ludDMyKGdwcik7CisgICAgICAgIHJldHVybkZv
cm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOworICAgICAgICByZXR1cm4gZ3ByOworICAgIH0KKyAg
ICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gSW52YWxpZEdQUlJl
ZzsKK30KKworRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbmRleCBub2Rl
SW5kZXgpCit7CisgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgR2Vu
ZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisK
KyAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXROb25lKSB7CisgICAg
ICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIEdQUlJlZyBncHIgPSBh
bGxvY2F0ZSgpOworICAgICAgICAKKyAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9k
ZUluZGV4KSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIHJlYWNo
YWJsZT8KKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2
YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBt
X2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwor
ICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAgICAgICAgICB1
bmxvY2soZ3ByKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChub2Rl
SW5kZXgpKSB7CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7Cisg
ICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0RG91YmxlVG9JbnRwdHIodmFsdWVPZk51bWJlckNv
bnN0YW50KG5vZGVJbmRleCkpKSksIGdwcik7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZVB0
clRvRG91YmxlKGdwciwgZnByKTsKKyAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKKworICAg
ICAgICAgICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3Jk
ZXJEb3VibGUpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIpOworICAgICAg
ICAgICAgICAgIHJldHVybiBmcHI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIHJlYWNoYWJsZT8KKyAgICAgICAgICAgICAgICBB
U1NFUlQoaXNKU0NvbnN0YW50KG5vZGVJbmRleCkpOworICAgICAgICAgICAgICAgIEpTVmFsdWUg
anNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAg
bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1ZhbHVl
KSksIGdwcik7CisgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1Zh
bHVlKGdwciwgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgc3Bp
bGxGb3JtYXQgPSBpbmZvLnNwaWxsRm9ybWF0KCk7CisgICAgICAgICAgICBzd2l0Y2ggKHNwaWxs
Rm9ybWF0KSB7CisgICAgICAgICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6IHsKKyAgICAgICAg
ICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKKyAgICAgICAgICAgICAgICBtX2pp
dC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGZw
cik7CisgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3Rlciwg
U3BpbGxPcmRlckRvdWJsZSk7CisgICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZwcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6IHsKKyAgICAgICAgICAg
ICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3Bp
bGxlZCk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjphZGRyZXNz
Rm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAgICAgICAgICAgaW5mby5maWxsSW50
ZWdlcihncHIpOworICAgICAgICAgICAgICAgIHVubG9jayhncHIpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOworICAgICAgICAKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgICAgIG1f
Z3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKKyAg
ICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1
YWxSZWdpc3RlciksIGdwcik7CisgICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIs
IHNwaWxsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRj
aCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CisgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZToKKyAg
ICAgICAgLy8gU2hvdWxkIGhhdmUgZmlsbGVkLCBhYm92ZS4KKyAgICBjYXNlIERhdGFGb3JtYXRD
ZWxsOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKKyAgICBjYXNlIERhdGFGb3JtYXRCb29s
ZWFuOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoKKyAgICBjYXNlIERhdGFGb3JtYXRT
dG9yYWdlOgorICAgICAgICAvLyBTaG91bGQgb25seSBiZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24g
aWYgd2Uga25vdyB0aGlzIG9wZXJhbmQgdG8gYmUgbnVtZXJpYy4KKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisKKyAgICBjYXNlIERhdGFGb3JtYXRKUzogeworICAgICAgICBHUFJSZWcg
anNWYWx1ZUdwciA9IGluZm8uZ3ByKCk7CisgICAgICAgIG1fZ3Bycy5sb2NrKGpzVmFsdWVHcHIp
OworICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKKyAgICAgICAgR1BSUmVnIHRl
bXBHcHIgPSBhbGxvY2F0ZSgpOyAvLyBGSVhNRTogY2FuIHdlIHNraXAgdGhpcyBhbGxvY2F0aW9u
IG9uIHRoZSBsYXN0IHVzZSBvZiB0aGUgdmlydHVhbCByZWdpc3Rlcj8KKworICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KTsKKworICAgICAgICBtX2ppdC5qaXRBc3NlcnRJc0pTRG91YmxlKGpzVmFsdWVHcHIpOworCisg
ICAgICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQg
YXMgYSBKU1ZhbHVlCisgICAgICAgIG1faml0Lm1vdmUoanNWYWx1ZUdwciwgdGVtcEdwcik7Cisg
ICAgICAgIHVuYm94RG91YmxlKHRlbXBHcHIsIGZwcik7CisgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIGhhc1VuYm94ZWREb3VibGUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICAgICAgLy8gRmluYWxs
eSwgaGFuZGxlIGludGVnZXJzLgorICAgICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOworICAg
ICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShqc1ZhbHVlR3ByLCBmcHIpOworICAgICAg
ICBoYXNVbmJveGVkRG91YmxlLmxpbmsoJm1faml0KTsKKworICAgICAgICBtX2dwcnMucmVsZWFz
ZShqc1ZhbHVlR3ByKTsKKyAgICAgICAgbV9ncHJzLnVubG9jayhqc1ZhbHVlR3ByKTsKKyAgICAg
ICAgbV9ncHJzLnVubG9jayh0ZW1wR3ByKTsKKyAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZp
cnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7CisgICAgICAgIGluZm8uZmlsbERvdWJs
ZShmcHIpOworICAgICAgICBpbmZvLmtpbGxTcGlsbGVkKCk7CisgICAgICAgIHJldHVybiBmcHI7
CisgICAgfQorCisgICAgY2FzZSBEYXRhRm9ybWF0SlNJbnRlZ2VyOgorICAgIGNhc2UgRGF0YUZv
cm1hdEludGVnZXI6IHsKKyAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7CisgICAg
ICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOworICAgICAgICBtX2dwcnMubG9jayhncHIpOwor
ICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShncHIsIGZwcik7CisgICAgICAgIG1f
Z3Bycy51bmxvY2soZ3ByKTsKKyAgICAgICAgcmV0dXJuIGZwcjsKKyAgICB9CisKKyAgICAvLyBV
bmJveCB0aGUgZG91YmxlCisgICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6IHsKKyAgICAgICAg
R1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CisgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0
ZSgpOworICAgICAgICBpZiAobV9ncHJzLmlzTG9ja2VkKGdwcikpIHsKKyAgICAgICAgICAgIC8v
IE1ha2Ugc3VyZSB3ZSBkb24ndCB0cmFtcGxlIGdwciBpZiBpdCBpcyBpbiB1c2UuCisgICAgICAg
ICAgICBHUFJSZWcgdGVtcCA9IGFsbG9jYXRlKCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKGdw
ciwgdGVtcCk7CisgICAgICAgICAgICB1bmJveERvdWJsZSh0ZW1wLCBmcHIpOworICAgICAgICAg
ICAgdW5sb2NrKHRlbXApOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHVuYm94RG91Ymxl
KGdwciwgZnByKTsKKworICAgICAgICBtX2dwcnMucmVsZWFzZShncHIpOworICAgICAgICBtX2Zw
cnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKKworICAg
ICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgcmV0dXJuIGZwcjsKKyAgICB9CisK
KyAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6IHsKKyAgICAgICAgRlBSUmVnIGZwciA9IGluZm8u
ZnByKCk7CisgICAgICAgIG1fZnBycy5sb2NrKGZwcik7CisgICAgICAgIHJldHVybiBmcHI7Cisg
ICAgfQorICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBJbnZh
bGlkRlBSUmVnOworfQorCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKE5vZGVJ
bmRleCBub2RlSW5kZXgpCit7CisgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CisgICAg
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7
CisgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdp
c3Rlcl07CisKKyAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgeworICAgIGNhc2Ug
RGF0YUZvcm1hdE5vbmU6IHsKKyAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CisKKyAg
ICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgaWYgKGlzSW50MzJD
b25zdGFudChub2RlSW5kZXgpKSB7CisgICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShn
cHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOworICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1
ZSA9IGpzTnVtYmVyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpOworICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUo
anNWYWx1ZSkpLCBncHIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc051bWJlckNvbnN0YW50
KG5vZGVJbmRleCkpIHsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0
YUZvcm1hdEpTRG91YmxlKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUoSlNWYWx1
ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKTsKKyAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6
ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChub2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBK
U1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOworICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUo
anNWYWx1ZSkpLCBncHIpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBE
YXRhRm9ybWF0SlMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2dwcnMucmV0YWlu
KGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgRGF0YUZvcm1hdCBzcGlsbEZvcm1hdCA9IGluZm8uc3BpbGxGb3Jt
YXQoKTsKKyAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNw
aWxsT3JkZXJTcGlsbGVkKTsKKyAgICAgICAgICAgIGlmIChzcGlsbEZvcm1hdCA9PSBEYXRhRm9y
bWF0SW50ZWdlcikgeworICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6
YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOworICAgICAgICAgICAgICAgIG1faml0
Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsKKyAgICAgICAgICAg
ICAgICBzcGlsbEZvcm1hdCA9IERhdGFGb3JtYXRKU0ludGVnZXI7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBpZiAoc3BpbGxGb3Jt
YXQgPT0gRGF0YUZvcm1hdERvdWJsZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBOZWVkIHRv
IGJveCB0aGUgZG91YmxlLCBzaW5jZSB3ZSB3YW50IGEgSlNWYWx1ZS4KKyAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuc3ViUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsK
KyAgICAgICAgICAgICAgICAgICAgc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0SlNEb3VibGU7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzcGlsbEZv
cm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbmZvLmZp
bGxKU1ZhbHVlKGdwciwgc3BpbGxGb3JtYXQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBn
cHI7CisgICAgfQorCisgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjogeworICAgICAgICBHUFJS
ZWcgZ3ByID0gaW5mby5ncHIoKTsKKyAgICAgICAgLy8gSWYgdGhlIHJlZ2lzdGVyIGhhcyBhbHJl
YWR5IGJlZW4gbG9ja2VkIHdlIG5lZWQgdG8gdGFrZSBhIGNvcHkuCisgICAgICAgIC8vIElmIG5v
dCwgd2UnbGwgemVybyBleHRlbmQgaW4gcGxhY2UsIHNvIG1hcmsgb24gdGhlIGluZm8gdGhhdCB0
aGlzIGlzIG5vdyB0eXBlIERhdGFGb3JtYXRJbnRlZ2VyLCBub3QgRGF0YUZvcm1hdEpTSW50ZWdl
ci4KKyAgICAgICAgaWYgKG1fZ3Bycy5pc0xvY2tlZChncHIpKSB7CisgICAgICAgICAgICBHUFJS
ZWcgcmVzdWx0ID0gYWxsb2NhdGUoKTsKKyAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBtX2dwcnMubG9jayhncHIpOworICAgICAgICBt
X2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CisgICAgICAg
IGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKKyAgICAgICAgcmV0
dXJuIGdwcjsKKyAgICB9CisKKyAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6IHsKKyAgICAgICAg
RlBSUmVnIGZwciA9IGluZm8uZnByKCk7CisgICAgICAgIEdQUlJlZyBncHIgPSBib3hEb3VibGUo
ZnByKTsKKworICAgICAgICAvLyBVcGRhdGUgYWxsIGluZm8KKyAgICAgICAgaW5mby5maWxsSlNW
YWx1ZShncHIsIERhdGFGb3JtYXRKU0RvdWJsZSk7CisgICAgICAgIG1fZnBycy5yZWxlYXNlKGZw
cik7CisgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3Jk
ZXJKUyk7CisKKyAgICAgICAgcmV0dXJuIGdwcjsKKyAgICB9CisKKyAgICBjYXNlIERhdGFGb3Jt
YXRDZWxsOgorICAgICAgICAvLyBObyByZXRhZyByZXF1aXJlZCBvbiBKU1ZBTFVFNjQhCisgICAg
Y2FzZSBEYXRhRm9ybWF0SlM6CisgICAgY2FzZSBEYXRhRm9ybWF0SlNJbnRlZ2VyOgorICAgIGNh
c2UgRGF0YUZvcm1hdEpTRG91YmxlOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKKyAgICBj
YXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46IHsKKyAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3By
KCk7CisgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CisgICAgICAgIHJldHVybiBncHI7CisgICAg
fQorICAgICAgICAKKyAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgorICAgIGNhc2UgRGF0YUZv
cm1hdFN0b3JhZ2U6CisgICAgICAgIC8vIHRoaXMgdHlwZSBjdXJyZW50bHkgbmV2ZXIgb2NjdXJz
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOworfQorCit2b2lkIFNwZWN1bGF0
aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVlVG9OdW1iZXIoTm9kZSYgbm9kZSkKK3sKKyAgICBp
ZiAoaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIG9wMSk7CisgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkp
OworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgCisgICAg
QVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpOworICAgIEFTU0VSVCghaXNO
dW1iZXJDb25zdGFudChub2RlLmNoaWxkMSgpKSk7CisgICAgCisgICAgR1BSUmVnIGpzVmFsdWVH
cHIgPSBvcDEuZ3ByKCk7CisgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKKyAgICBvcDEu
dXNlKCk7CisKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBub25OdW1lcmljID0g
bV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywganNWYWx1ZUdwciwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKworICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQg
aGVyZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVlCisgICAgbV9qaXQubW92
ZShqc1ZhbHVlR3ByLCBncHIpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhc1VuYm94ZWREb3Vi
bGUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICAvLyBOZXh0IGhhbmRsZSBjZWxscyAoJiBvdGhlciBK
UyBpbW1lZGlhdGVzKQorICAgIG5vbk51bWVyaWMubGluaygmbV9qaXQpOworICAgIHNpbGVudFNw
aWxsQWxsUmVnaXN0ZXJzKGdwcik7CisgICAgY2FsbE9wZXJhdGlvbihkZmdDb252ZXJ0SlNWYWx1
ZVRvTnVtYmVyLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwganNWYWx1ZUdwcik7CisgICAgYm94
RG91YmxlKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBncHIpOworICAgIHNpbGVudEZpbGxBbGxS
ZWdpc3RlcnMoZ3ByKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBoYXNDYWxsZWRUb051bWJlciA9
IG1faml0Lmp1bXAoKTsKKyAgICAKKyAgICAvLyBGaW5hbGx5LCBoYW5kbGUgaW50ZWdlcnMuCisg
ICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKKyAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIGpzVmFsdWVHcHIsIGdwcik7CisgICAgaGFzVW5ib3hlZERvdWJs
ZS5saW5rKCZtX2ppdCk7CisgICAgaGFzQ2FsbGVkVG9OdW1iZXIubGluaygmbV9qaXQpOworICAg
IAorICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hp
bGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3Bl
Y3VsYXRpdmVWYWx1ZVRvSW50MzIoTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlQoIWlzSW50MzJD
b25zdGFudChub2RlLmNoaWxkMSgpKSk7CisgICAgCisgICAgaWYgKGlzS25vd25JbnRlZ2VyKG5v
ZGUuY2hpbGQxKCkpKSB7CisgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOworICAgICAg
ICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgaW50ZWdlclJl
c3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBHZW5lcmF0aW9uSW5mbyYgY2hpbGRJbmZvID0gbV9nZW5lcmF0aW9uSW5m
b1thdChub2RlLmNoaWxkMSgpKS52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgaWYgKGNoaWxkSW5m
by5pc0pTRG91YmxlKCkpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgIEZQ
UlJlZyBmcHIgPSBvcDEuZnByKCk7CisgICAgICAgIEdQUlJlZyBncHIgPSByZXN1bHQuZ3ByKCk7
CisgICAgICAgIG9wMS51c2UoKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgdHJ1bmNhdGVk
VG9JbnRlZ2VyID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBK
SVRDb21waWxlcjo6QnJhbmNoSWZUcnVuY2F0ZVN1Y2Nlc3NmdWwpOworICAgICAgICAKKyAgICAg
ICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoZ3ByKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbih0
b0ludDMyLCBncHIsIGZwcik7CisgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoZ3ByKTsK
KyAgICAgICAgCisgICAgICAgIHRydW5jYXRlZFRvSW50ZWdlci5saW5rKCZtX2ppdCk7CisgICAg
ICAgIGludGVnZXJSZXN1bHQoZ3ByLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRF
eHBsaWNpdGx5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBvcDEpOworICAgIEdQUlJlZyBqc1ZhbHVlR3ByID0gb3AxLmdwcigpOworICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgb3AxLnVzZSgpOworCisgICAgSklUQ29t
cGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7
CisKKyAgICAvLyBGaXJzdCBoYW5kbGUgbm9uLWludGVnZXJzCisgICAgc2lsZW50U3BpbGxBbGxS
ZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKGRmZ0NvbnZlcnRKU1ZhbHVl
VG9JbnQzMiwgcmVzdWx0R1BSLCBqc1ZhbHVlR3ByKTsKKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0
ZXJzKHJlc3VsdEdQUik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgaGFzQ2FsbGVkVG9JbnQzMiA9
IG1faml0Lmp1bXAoKTsKKworICAgIC8vIFRoZW4gaGFuZGxlIGludGVnZXJzLgorICAgIGlzSW50
ZWdlci5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoanNWYWx1ZUdw
ciwgcmVzdWx0R1BSKTsKKyAgICBoYXNDYWxsZWRUb0ludDMyLmxpbmsoJm1faml0KTsKKyAgICBp
bnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVk
RXhwbGljaXRseSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVUlu
dDMyVG9OdW1iZXIoTm9kZSYgbm9kZSkKK3sKKyAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEoKSk7CisgICAgRlBSVGVtcG9yYXJ5IGJveGVyKHRoaXMpOworICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBw
b3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1
YWwsIG9wMS5ncHIoKSwgVHJ1c3RlZEltbTMyKDApKTsKKyAgICAKKyAgICBtX2ppdC5jb252ZXJ0
SW50MzJUb0RvdWJsZShvcDEuZ3ByKCksIGJveGVyLmZwcigpKTsKKyAgICBtX2ppdC5hZGREb3Vi
bGUoSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcygmdHdvVG9UaGUzMiksIGJveGVyLmZwcigp
KTsKKyAgICAKKyAgICBib3hEb3VibGUoYm94ZXIuZnByKCksIHJlc3VsdC5ncHIoKSk7CisgICAg
CisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAKKyAgICBw
b3NpdGl2ZS5saW5rKCZtX2ppdCk7CisgICAgCisgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyLCBvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgCisgICAg
ZG9uZS5saW5rKCZtX2ppdCk7CisgICAgCisgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCks
IG1fY29tcGlsZUluZGV4KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVLbm93bkNvbnN0YW50QXJpdGhPcChOb2RlVHlwZSBvcCwgTm9kZUluZGV4IHJlZ0NoaWxkLCBO
b2RlSW5kZXggaW1tQ2hpbGQsIGJvb2wgY29tbXV0ZSkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCBy
ZWdBcmcodGhpcywgcmVnQ2hpbGQpOworICAgIEdQUlJlZyByZWdBcmdHUFIgPSByZWdBcmcuZ3By
KCk7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworICAgIEZQUlRlbXBvcmFyeSB0bXAxKHRoaXMpOworICAgIEZQUlRl
bXBvcmFyeSB0bXAyKHRoaXMpOworICAgIEZQUlJlZyB0bXAxRlBSID0gdG1wMS5mcHIoKTsKKyAg
ICBGUFJSZWcgdG1wMkZQUiA9IHRtcDIuZnByKCk7CisgICAgCisgICAgcmVnQXJnLnVzZSgpOwor
ICAgIHVzZShpbW1DaGlsZCk7CisKKyAgICBKSVRDb21waWxlcjo6SnVtcCBub3RJbnQ7CisgICAg
CisgICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50MzJDb25zdGFudChpbW1DaGlsZCk7CisgICAg
ICAgIAorICAgIGlmICghaXNLbm93bkludGVnZXIocmVnQ2hpbGQpKQorICAgICAgICBub3RJbnQg
PSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCByZWdBcmdHUFIsIEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAg
b3ZlcmZsb3c7CisgICAgCisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgVmFsdWVBZGQ6Cisg
ICAgY2FzZSBBcml0aEFkZDoKKyAgICAgICAgb3ZlcmZsb3cgPSBtX2ppdC5icmFuY2hBZGQzMihN
YWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIHJlZ0FyZ0dQUiwgSW1tMzIoaW1tKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgQXJpdGhTdWI6CisgICAgICAg
IG92ZXJmbG93ID0gbV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBy
ZWdBcmdHUFIsIEltbTMyKGltbSksIHJlc3VsdEdQUik7CisgICAgICAgIGJyZWFrOworICAgICAg
ICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cisg
ICAgCisgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZXN1
bHRHUFIpOworICAgICAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVt
cCgpOworICAgIAorICAgIG92ZXJmbG93LmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBKSVRDb21w
aWxlcjo6SnVtcCBub3ROdW1iZXI7CisgICAgCisgICAgLy8gZmlyc3QgZGVhbCB3aXRoIG92ZXJm
bG93IGNhc2UKKyAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShyZWdBcmdHUFIsIHRtcDJG
UFIpOworICAgIAorICAgIC8vIG5vdyBkZWFsIHdpdGggbm90LWludCBjYXNlLCBpZiBhcHBsaWNh
YmxlCisgICAgaWYgKCFpc0tub3duSW50ZWdlcihyZWdDaGlsZCkpIHsKKyAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgaGF2ZVZhbHVlID0gbV9qaXQuanVtcCgpOworICAgICAgICAKKyAgICAgICAg
bm90SW50LmxpbmsoJm1faml0KTsKKyAgICAgICAgCisgICAgICAgIGlmICghaXNLbm93bk51bWVy
aWMocmVnQ2hpbGQpKSB7CisgICAgICAgICAgICBBU1NFUlQob3AgPT0gVmFsdWVBZGQpOworICAg
ICAgICAgICAgbm90TnVtYmVyID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6
WmVybywgcmVnQXJnR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBtX2ppdC5tb3ZlKHJlZ0FyZ0dQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgbV9qaXQuYWRkUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVz
dWx0R1BSKTsKKyAgICAgICAgbV9qaXQubW92ZVB0clRvRG91YmxlKHJlc3VsdEdQUiwgdG1wMkZQ
Uik7CisgICAgICAgIAorICAgICAgICBoYXZlVmFsdWUubGluaygmbV9qaXQpOworICAgIH0KKyAg
ICAKKyAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4ocmVpbnRlcnByZXREb3VibGVUb0ludHB0cih2YWx1ZU9mTnVtYmVyQ29uc3RhbnQo
aW1tQ2hpbGQpKSkpLCByZXN1bHRHUFIpOworICAgIG1faml0Lm1vdmVQdHJUb0RvdWJsZShyZXN1
bHRHUFIsIHRtcDFGUFIpOworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIFZhbHVlQWRkOgor
ICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIG1faml0LmFkZERvdWJsZSh0bXAxRlBSLCB0bXAy
RlBSKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgQXJpdGhTdWI6CisgICAg
ICAgIG1faml0LnN1YkRvdWJsZSh0bXAxRlBSLCB0bXAyRlBSKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CisgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZUNhc2VDb252ZXJ0ZWRUb0lu
dDsKKyAgICAKKyAgICBpZiAob3AgPT0gVmFsdWVBZGQpIHsKKyAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKKyAgICAgICAgbV9qaXQuYnJhbmNoQ29udmVydERvdWJs
ZVRvSW50MzIodG1wMkZQUiwgcmVzdWx0R1BSLCBmYWlsdXJlQ2FzZXMsIHRtcDFGUFIpOworICAg
ICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdEdQ
Uik7CisgICAgICAgIAorICAgICAgICBkb25lQ2FzZUNvbnZlcnRlZFRvSW50ID0gbV9qaXQuanVt
cCgpOworICAgICAgICAKKyAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmsoJm1faml0KTsKKyAgICB9
CisgICAgCisgICAgbV9qaXQubW92ZURvdWJsZVRvUHRyKHRtcDJGUFIsIHJlc3VsdEdQUik7Cisg
ICAgbV9qaXQuc3ViUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0R1BS
KTsKKyAgICAgICAgCisgICAgaWYgKCFpc0tub3duTnVtZXJpYyhyZWdDaGlsZCkpIHsKKyAgICAg
ICAgQVNTRVJUKG5vdE51bWJlci5pc1NldCgpKTsKKyAgICAgICAgQVNTRVJUKG9wID09IFZhbHVl
QWRkKTsKKyAgICAgICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lQ2FzZVdh
c051bWJlciA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgIAorICAgICAgICBub3ROdW1iZXIu
bGluaygmbV9qaXQpOworICAgICAgICAgICAgCisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzKHJlc3VsdEdQUik7CisgICAgICAgIGlmIChjb21tdXRlKQorICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlciwgcmVzdWx0R1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6SW1tMzIoaW1tKSwgcmVnQXJnR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlciwgcmVzdWx0R1BSLCByZWdB
cmdHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihpbW0pKTsKKyAgICAgICAgc2lsZW50RmlsbEFs
bFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICAgICAgCisgICAgICAgIGRvbmVDYXNlV2Fz
TnVtYmVyLmxpbmsoJm1faml0KTsKKyAgICB9CisgICAgCisgICAgZG9uZS5saW5rKCZtX2ppdCk7
CisgICAgaWYgKGRvbmVDYXNlQ29udmVydGVkVG9JbnQuaXNTZXQoKSkKKyAgICAgICAgZG9uZUNh
c2VDb252ZXJ0ZWRUb0ludC5saW5rKCZtX2ppdCk7CisgICAgICAgIAorICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5
KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVCYXNpY0FyaXRoT3Ao
Tm9kZVR5cGUgb3AsIE5vZGUgJm5vZGUpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hp
bGQyKCkpOworICAgIAorICAgIEZQUlRlbXBvcmFyeSB0bXAxKHRoaXMpOworICAgIEZQUlRlbXBv
cmFyeSB0bXAyKHRoaXMpOworICAgIEZQUlJlZyB0bXAxRlBSID0gdG1wMS5mcHIoKTsKKyAgICBG
UFJSZWcgdG1wMkZQUiA9IHRtcDIuZnByKCk7CisgICAgCisgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKKworICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKKyAgICBHUFJSZWcg
YXJnMkdQUiA9IGFyZzIuZ3ByKCk7CisgICAgCisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKyAgICAKKyAgICBhcmcxLnVzZSgpOworICAgIGFyZzIudXNlKCk7CisgICAgCisg
ICAgSklUQ29tcGlsZXI6Okp1bXAgY2hpbGQxTm90SW50OworICAgIEpJVENvbXBpbGVyOjpKdW1w
IGNoaWxkMk5vdEludDsKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgb3ZlcmZsb3c7CisgICAg
CisgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgY2hpbGQx
Tm90SW50ID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMUdQUiwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICBpZiAoIWlzS25vd25JbnRlZ2Vy
KG5vZGUuY2hpbGQyKCkpKQorICAgICAgICBjaGlsZDJOb3RJbnQgPSBtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIpOworICAgIAorICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIFZhbHVlQWRkOgorICAg
IGNhc2UgQXJpdGhBZGQ6IHsKKyAgICAgICAgb3ZlcmZsb3cuYXBwZW5kKG1faml0LmJyYW5jaEFk
ZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BS
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBcml0aFN1Yjog
eworICAgICAgICBvdmVyZmxvdy5hcHBlbmQobV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJs
ZXI6Ok92ZXJmbG93LCBhcmcxR1BSLCBhcmcyR1BSLCByZXN1bHRHUFIpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFyaXRoTXVsOiB7CisgICAgICAgIG92ZXJm
bG93LmFwcGVuZChtX2ppdC5icmFuY2hNdWwzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIGFy
ZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUikpOworICAgICAgICBvdmVyZmxvdy5hcHBlbmQobV9q
aXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRHUFIpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICBKSVRDb21waWxl
cjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBoYXZlRlBSQXJndW1lbnRzOworCisgICAgb3ZlcmZsb3cubGluaygmbV9qaXQpOworICAg
ICAgICAKKyAgICAvLyBib3RoIGFyZ3VtZW50cyBhcmUgaW50ZWdlcnMKKyAgICBtX2ppdC5jb252
ZXJ0SW50MzJUb0RvdWJsZShhcmcxR1BSLCB0bXAxRlBSKTsKKyAgICBtX2ppdC5jb252ZXJ0SW50
MzJUb0RvdWJsZShhcmcyR1BSLCB0bXAyRlBSKTsKKyAgICAgICAgCisgICAgaGF2ZUZQUkFyZ3Vt
ZW50cy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgCisgICAgSklUQ29tcGlsZXI6Okp1
bXBMaXN0IG5vdE51bWJlcnM7CisgICAgICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIGNoaWxk
Mk5vdEludDI7CisgICAgICAgIAorICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEo
KSkpIHsKKyAgICAgICAgY2hpbGQxTm90SW50LmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIAor
ICAgICAgICBpZiAoIWlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQxKCkpKSB7CisgICAgICAgICAg
ICBBU1NFUlQob3AgPT0gVmFsdWVBZGQpOworICAgICAgICAgICAgbm90TnVtYmVycy5hcHBlbmQo
bV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgYXJnMUdQUiwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBtX2ppdC5tb3ZlKGFyZzFHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHVuYm94RG91Ymxl
KHJlc3VsdEdQUiwgdG1wMUZQUik7CisgICAgICAgICAgICAKKyAgICAgICAgLy8gY2hpbGQxIGlz
IGNvbnZlcnRlZCB0byBhIGRvdWJsZTsgY2hpbGQyIG1heSBlaXRoZXIgYmUgYW4gaW50IG9yCisg
ICAgICAgIC8vIGEgYm94ZWQgZG91YmxlCisgICAgICAgICAgICAKKyAgICAgICAgaWYgKCFpc0tu
b3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkgeworICAgICAgICAgICAgaWYgKGlzS25vd25OdW1l
cmljKG5vZGUuY2hpbGQyKCkpKQorICAgICAgICAgICAgICAgIGNoaWxkMk5vdEludDIgPSBtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKG9wID09IFZhbHVlQWRkKTsKKyAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBjaGlsZDJJc0ludCA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICAg
ICAgICAgIG5vdE51bWJlcnMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAg
ICAgICAgICAgICAgIGNoaWxkMk5vdEludDIgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgICAgICAg
ICAgY2hpbGQySXNJbnQubGluaygmbV9qaXQpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgLy8gY2hpbGQgMiBpcyBkZWZpbml0ZWx5IGFuIGludGVnZXIK
KyAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUoYXJnMkdQUiwgdG1wMkZQUik7Cisg
ICAgICAgICAgICAKKyAgICAgICAgaGF2ZUZQUkFyZ3VtZW50cy5hcHBlbmQobV9qaXQuanVtcCgp
KTsKKyAgICB9CisgICAgICAgIAorICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIo
KSkpIHsKKyAgICAgICAgY2hpbGQyTm90SW50LmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIAor
ICAgICAgICBpZiAoIWlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAg
ICBBU1NFUlQob3AgPT0gVmFsdWVBZGQpOworICAgICAgICAgICAgbm90TnVtYmVycy5hcHBlbmQo
bV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgYXJnMkdQUiwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAvLyBjaGlsZDEgaXMgZGVmaW5pdGVseSBhbiBpbnRlZ2VyLCBhbmQgY2hpbGQgMiBpcyBk
ZWZpbml0ZWx5IG5vdAorICAgICAgICAgICAgCisgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRv
RG91YmxlKGFyZzFHUFIsIHRtcDFGUFIpOworICAgICAgICAgICAgCisgICAgICAgIGlmIChjaGls
ZDJOb3RJbnQyLmlzU2V0KCkpCisgICAgICAgICAgICBjaGlsZDJOb3RJbnQyLmxpbmsoJm1faml0
KTsKKyAgICAgICAgICAgIAorICAgICAgICBtX2ppdC5tb3ZlKGFyZzJHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgIHVuYm94RG91YmxlKHJlc3VsdEdQUiwgdG1wMkZQUik7CisgICAgfQorICAgICAg
ICAKKyAgICBoYXZlRlBSQXJndW1lbnRzLmxpbmsoJm1faml0KTsKKyAgICAgICAgCisgICAgc3dp
dGNoIChvcCkgeworICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgY2FzZSBBcml0aEFkZDoKKyAgICAg
ICAgbV9qaXQuYWRkRG91YmxlKHRtcDJGUFIsIHRtcDFGUFIpOworICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgIGNhc2UgQXJpdGhTdWI6CisgICAgICAgIG1faml0LnN1YkRvdWJsZSh0
bXAyRlBSLCB0bXAxRlBSKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IEFyaXRoTXVsOgorICAgICAgICBtX2ppdC5tdWxEb3VibGUodG1wMkZQUiwgdG1wMUZQUik7Cisg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmVD
YXNlQ29udmVydGVkVG9JbnQ7CisgICAgCisgICAgaWYgKG9wID09IFZhbHVlQWRkKSB7CisgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7CisgICAgICAgIG1faml0LmJy
YW5jaENvbnZlcnREb3VibGVUb0ludDMyKHRtcDFGUFIsIHJlc3VsdEdQUiwgZmFpbHVyZUNhc2Vz
LCB0bXAyRlBSKTsKKyAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgZG9uZUNhc2VDb252ZXJ0ZWRU
b0ludCA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgCisgICAgICAgIGZhaWx1cmVDYXNlcy5saW5r
KCZtX2ppdCk7CisgICAgfQorICAgICAgICAKKyAgICBib3hEb3VibGUodG1wMUZQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgCisgICAgaWYgKCFub3ROdW1iZXJzLmVtcHR5KCkpIHsKKyAgICAgICAg
QVNTRVJUKG9wID09IFZhbHVlQWRkKTsKKyAgICAgICAgICAgIAorICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBkb25lQ2FzZVdhc051bWJlciA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgIAor
ICAgICAgICBub3ROdW1iZXJzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIAorICAgICAgICBz
aWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblZhbHVlQWRkTm90TnVtYmVyLCByZXN1bHRHUFIsIGFyZzFHUFIsIGFyZzJHUFIp
OworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisKKyAgICAgICAg
ZG9uZUNhc2VXYXNOdW1iZXIubGluaygmbV9qaXQpOworICAgIH0KKyAgICAKKyAgICBkb25lLmxp
bmsoJm1faml0KTsKKyAgICBpZiAoZG9uZUNhc2VDb252ZXJ0ZWRUb0ludC5pc1NldCgpKQorICAg
ICAgICBkb25lQ2FzZUNvbnZlcnRlZFRvSW50LmxpbmsoJm1faml0KTsKKyAgICAgICAgCisgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxl
ZEV4cGxpY2l0bHkpOworfQorCitKSVRDb21waWxlcjo6Q2FsbCBTcGVjdWxhdGl2ZUpJVDo6Y2Fj
aGVkR2V0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIHNjcmF0
Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQ
YXRoVGFyZ2V0LCBOb2RlVHlwZSBub2RlVHlwZSkKK3sKKyAgICBBU1NFUlQobm9kZVR5cGUgPT0g
R2V0QnlJZCB8fCBub2RlVHlwZSA9PSBHZXRNZXRob2QpOworCisgICAgSklUQ29tcGlsZXI6OkRh
dGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgc3Ry
dWN0dXJlQ2hlY2sgPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goSklUQ29tcGlsZXI6Ok5vdEVx
dWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZWlu
dGVycHJldF9jYXN0PHZvaWQqPigtMSkpKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkUHRyKEpJVENv
bXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFn
ZSgpKSwgcmVzdWx0R1BSKTsKKyAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdCBsb2Fk
V2l0aFBhdGNoID0gbV9qaXQubG9hZFB0cldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEpJ
VENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgMCksIHJlc3VsdEdQUik7CisgICAgCisgICAg
SklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgIHN0cnVjdHVyZUNo
ZWNrLmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBpZiAoc2xvd1BhdGhUYXJnZXQuaXNTZXQoKSkK
KyAgICAgICAgc2xvd1BhdGhUYXJnZXQubGluaygmbV9qaXQpOworICAgIAorICAgIEpJVENvbXBp
bGVyOjpMYWJlbCBzbG93Q2FzZSA9IG1faml0LmxhYmVsKCk7CisKKyAgICBzaWxlbnRTcGlsbEFs
bFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgIEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0aW9uQ2Fs
bCA9IGNhbGxPcGVyYXRpb24obm9kZVR5cGUgPT0gR2V0QnlJZCA/IG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSA6IG9wZXJhdGlvbkdldE1ldGhvZE9wdGltaXplLCByZXN1bHRHUFIsIGJhc2VHUFIs
IGlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpOworICAgIHNpbGVudEZpbGxBbGxSZWdpc3Rl
cnMocmVzdWx0R1BSKTsKKyAgICAKKyAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBK
SVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKKworICAgIG1faml0
LmFkZFByb3BlcnR5QWNjZXNzKFByb3BlcnR5QWNjZXNzUmVjb3JkKHN0cnVjdHVyZVRvQ29tcGFy
ZSwgZnVuY3Rpb25DYWxsLCBzdHJ1Y3R1cmVDaGVjaywgbG9hZFdpdGhQYXRjaCwgc2xvd0Nhc2Us
IGRvbmVMYWJlbCwgc2FmZUNhc3Q8aW50OF90PihiYXNlR1BSKSwgc2FmZUNhc3Q8aW50OF90Pihy
ZXN1bHRHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpKSk7CisgICAgCisgICAgaWYg
KHNjcmF0Y2hHUFIgIT0gcmVzdWx0R1BSICYmIHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgdW5sb2NrKHNjcmF0Y2hHUFIpOworICAgIAorICAgIHJldHVybiBmdW5jdGlvbkNh
bGw7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoR1BSUmVnIGJhc2VH
UFIsIEdQUlJlZyB2YWx1ZUdQUiwgTm9kZUluZGV4IHZhbHVlSW5kZXgsIEdQUlJlZyBzY3JhdGNo
R1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJVENvbXBp
bGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0KQoreworICAgIAorICAgIEpJVENvbXBpbGVyOjpEYXRh
TGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOworICAgIEpJVENvbXBpbGVyOjpKdW1wIHN0cnVj
dHVyZUNoZWNrID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpOb3RFcXVh
bCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oLTEpKSk7CisKKyAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFs
dWVHUFIsIHZhbHVlSW5kZXgsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNo
R1BSKTsKKworICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkpLCBzY3JhdGNoR1BSKTsKKyAgICBK
SVRDb21waWxlcjo6RGF0YUxhYmVsMzIgc3RvcmVXaXRoUGF0Y2ggPSBtX2ppdC5zdG9yZVB0cldp
dGhBZGRyZXNzT2Zmc2V0UGF0Y2godmFsdWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0
Y2hHUFIsIDApKTsKKworICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7
CisKKyAgICBzdHJ1Y3R1cmVDaGVjay5saW5rKCZtX2ppdCk7CisKKyAgICBpZiAoc2xvd1BhdGhU
YXJnZXQuaXNTZXQoKSkKKyAgICAgICAgc2xvd1BhdGhUYXJnZXQubGluaygmbV9qaXQpOworCisg
ICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dDYXNlID0gbV9qaXQubGFiZWwoKTsKKworICAgIHNp
bGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAgIFZfREZHT3BlcmF0aW9u
X0VKQ0kgb3B0aW1pemVkQ2FsbDsKKyAgICBpZiAobV9qaXQuc3RyaWN0TW9kZUZvcihhdChtX2Nv
bXBpbGVJbmRleCkuY29kZU9yaWdpbikpIHsKKyAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0
KQorICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9w
ZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAo
cHV0S2luZCA9PSBEaXJlY3QpCisgICAgICAgICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOworICAg
IH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
dGltaXplZENhbGwsIHZhbHVlR1BSLCBiYXNlR1BSLCBpZGVudGlmaWVyKGlkZW50aWZpZXJOdW1i
ZXIpKTsKKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworCisgICAg
ZG9uZS5saW5rKCZtX2ppdCk7CisgICAgSklUQ29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1f
aml0LmxhYmVsKCk7CisKKyAgICBtX2ppdC5hZGRQcm9wZXJ0eUFjY2VzcyhQcm9wZXJ0eUFjY2Vz
c1JlY29yZChzdHJ1Y3R1cmVUb0NvbXBhcmUsIGZ1bmN0aW9uQ2FsbCwgc3RydWN0dXJlQ2hlY2ss
IEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0KHN0b3JlV2l0aFBhdGNoLmxhYmVsKCkpLCBz
bG93Q2FzZSwgZG9uZUxhYmVsLCBzYWZlQ2FzdDxpbnQ4X3Q+KGJhc2VHUFIpLCBzYWZlQ2FzdDxp
bnQ4X3Q+KHZhbHVlR1BSKSwgc2FmZUNhc3Q8aW50OF90PihzY3JhdGNoR1BSKSkpOworfQorCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRNZXRob2QoR1BSUmVnIGJhc2VHUFIsIEdQUlJl
ZyByZXN1bHRHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCkKK3sKKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBzbG93Q2FsbDsKKyAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRyIHN0cnVjdFRvQ29t
cGFyZSwgcHJvdG9PYmosIHByb3RvU3RydWN0VG9Db21wYXJlLCBwdXRGdW5jdGlvbjsKKyAgICAK
KyAgICBKSVRDb21waWxlcjo6SnVtcCB3cm9uZ1N0cnVjdHVyZSA9IG1faml0LmJyYW5jaFB0cldp
dGhQYXRjaChKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3RUb0NvbXBhcmUsIEpJVENvbXBp
bGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSkpOworICAgIHBy
b3RvT2JqID0gbV9qaXQubW92ZVdpdGhQYXRjaChKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cigw
KSwgcmVzdWx0R1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCB3cm9uZ1Byb3RvU3RydWN0dXJl
ID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29t
cGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcHJv
dG9TdHJ1Y3RUb0NvbXBhcmUsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KC0xKSkpOworICAgIAorICAgIHB1dEZ1bmN0aW9uID0gbV9qaXQubW92ZVdp
dGhQYXRjaChKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cigwKSwgcmVzdWx0R1BSKTsKKyAgICAK
KyAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgIAorICAgIHdy
b25nU3RydWN0dXJlLmxpbmsoJm1faml0KTsKKyAgICB3cm9uZ1Byb3RvU3RydWN0dXJlLmxpbmso
Jm1faml0KTsKKyAgICAKKyAgICBzbG93Q2FsbCA9IGNhY2hlZEdldEJ5SWQoYmFzZUdQUiwgcmVz
dWx0R1BSLCBzY3JhdGNoR1BSLCBpZGVudGlmaWVyTnVtYmVyLCBzbG93UGF0aFRhcmdldCwgR2V0
TWV0aG9kKTsKKyAgICAKKyAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBtX2ppdC5h
ZGRNZXRob2RHZXQoc2xvd0NhbGwsIHN0cnVjdFRvQ29tcGFyZSwgcHJvdG9PYmosIHByb3RvU3Ry
dWN0VG9Db21wYXJlLCBwdXRGdW5jdGlvbik7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5v
blNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbChOb2RlSW5kZXggb3BlcmFuZCwgYm9v
bCBpbnZlcnQpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIG9wZXJhbmQpOworICAg
IEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7CisgICAgCisgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBhcmcpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAg
CisgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbDsKKyAgICAKKyAgICBpZiAoIWlzS25vd25D
ZWxsKG9wZXJhbmQpKQorICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgYXJnR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwor
ICAgIAorICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYXJnR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBtX2ppdC50ZXN0OChpbnZl
cnQgPyBKSVRDb21waWxlcjo6WmVybyA6IEpJVENvbXBpbGVyOjpOb25aZXJvLCBKSVRDb21waWxl
cjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSwgcmVzdWx0
R1BSKTsKKyAgICAKKyAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQpKSB7CisgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIAorICAgICAgICBu
b3RDZWxsLmxpbmsoJm1faml0KTsKKyAgICAgICAgCisgICAgICAgIG1faml0Lm1vdmUoYXJnR1BS
LCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5hbmRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQuY29tcGFy
ZVB0cihpbnZlcnQgPyBKSVRDb21waWxlcjo6Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1YWws
IHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihWYWx1ZU51bGwpLCByZXN1bHRH
UFIpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgfQorICAgIAor
ICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9v
bGVhbik7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVC
cmFuY2hOdWxsKE5vZGVJbmRleCBvcGVyYW5kLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBi
b29sIGludmVydCkKK3sKKyAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4
KTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsK
KyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgo
KTsKKyAgICAKKyAgICBpZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkgeworICAgICAgICBpbnZl
cnQgPSAhaW52ZXJ0OworICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOworICAgICAgICB0
YWtlbiA9IG5vdFRha2VuOworICAgICAgICBub3RUYWtlbiA9IHRtcDsKKyAgICB9CisKKyAgICBK
U1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgb3BlcmFuZCk7CisgICAgR1BSUmVnIGFyZ0dQUiA9IGFy
Zy5ncHIoKTsKKyAgICAKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGFyZyk7CisgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6
SnVtcCBub3RDZWxsOworICAgIAorICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZCkpCisgICAg
ICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCBhcmdHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgCisgICAgbV9qaXQubG9h
ZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhhcmdHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCByZXN1bHRHUFIpOworICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0OChpbnZlcnQg
PyBKSVRDb21waWxlcjo6WmVybyA6IEpJVENvbXBpbGVyOjpOb25aZXJvLCBKSVRDb21waWxlcjo6
QWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRha2VuKTsK
KyAgICAKKyAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQpKSB7CisgICAgICAgIGFkZEJyYW5j
aChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKKyAgICAgICAgCisgICAgICAgIG5vdENlbGwubGlu
aygmbV9qaXQpOworICAgICAgICAKKyAgICAgICAgbV9qaXQubW92ZShhcmdHUFIsIHJlc3VsdEdQ
Uik7CisgICAgICAgIG1faml0LmFuZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKH5UYWdC
aXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNo
UHRyKGludmVydCA/IEpJVENvbXBpbGVyOjpOb3RFcXVhbCA6IEpJVENvbXBpbGVyOjpFcXVhbCwg
cmVzdWx0R1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZv
aWQqPihWYWx1ZU51bGwpKSksIHRha2VuKTsKKyAgICB9CisgICAgCisgICAgaWYgKG5vdFRha2Vu
ICE9IChtX2Jsb2NrICsgMSkpCisgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRh
a2VuKTsKK30KKworYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21wYXJlTnVs
bChOb2RlJiBub2RlLCBOb2RlSW5kZXggb3BlcmFuZCwgYm9vbCBpbnZlcnQpCit7CisgICAgTm9k
ZUluZGV4IGJyYW5jaE5vZGVJbmRleCA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CisgICAgaWYg
KGJyYW5jaE5vZGVJbmRleCAhPSBOb05vZGUpIHsKKyAgICAgICAgQVNTRVJUKG5vZGUuYWRqdXN0
ZWRSZWZDb3VudCgpID09IDEpOworICAgICAgICAKKyAgICAgICAgbm9uU3BlY3VsYXRpdmVQZWVw
aG9sZUJyYW5jaE51bGwob3BlcmFuZCwgYnJhbmNoTm9kZUluZGV4LCBpbnZlcnQpOworICAgIAor
ICAgICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsK
KyAgICAgICAgbV9jb21waWxlSW5kZXggPSBicmFuY2hOb2RlSW5kZXg7CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgbm9uU3BlY3VsYXRpdmVOb25QZWVw
aG9sZUNvbXBhcmVOdWxsKG9wZXJhbmQsIGludmVydCk7CisgICAgCisgICAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNo
KE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlv
bikKK3sKKyAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKKyAgICBC
bG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9j
a0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKworICAg
IEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY2FsbFJlc3VsdENvbmRpdGlvbiA9IEpJVENv
bXBpbGVyOjpOb25aZXJvOworCisgICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJy
YW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCisgICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNo
IHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2Ug
Y2FuIGZhbGwgdGhyb3VnaC4KKyAgICBpZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkgeworICAg
ICAgICBjb25kID0gSklUQ29tcGlsZXI6OmludmVydChjb25kKTsKKyAgICAgICAgY2FsbFJlc3Vs
dENvbmRpdGlvbiA9IEpJVENvbXBpbGVyOjpaZXJvOworICAgICAgICBCbG9ja0luZGV4IHRtcCA9
IHRha2VuOworICAgICAgICB0YWtlbiA9IG5vdFRha2VuOworICAgICAgICBub3RUYWtlbiA9IHRt
cDsKKyAgICB9CisKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgR1BS
UmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOworICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIo
KTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgCisgICAg
aWYgKGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQxKCkpIHx8IGlzS25vd25Ob3RJbnRlZ2Vy
KG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgCisgICAgICAgIGFyZzEu
dXNlKCk7CisgICAgICAgIGFyZzIudXNlKCk7CisgICAgCisgICAgICAgIGZsdXNoUmVnaXN0ZXJz
KCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24oaGVscGVyRnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJn
MUdQUiwgYXJnMkdQUik7CisKKyAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3QzMihj
YWxsUmVzdWx0Q29uZGl0aW9uLCByZXN1bHRHUFIpLCB0YWtlbik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBhcmcyKTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAKKyAgICAgICAgYXJnMS51c2UoKTsKKyAgICAg
ICAgYXJnMi51c2UoKTsKKyAgICAKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNo
aWxkMSgpKSkKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpKTsKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkKKyAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJl
bG93LCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAKKyAg
ICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKGNvbmQsIGFyZzFHUFIsIGFyZzJHUFIpLCB0
YWtlbik7CisgICAgCisgICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKSkg
fHwgIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBhZGRCcmFu
Y2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CisgICAgCisgICAgICAgICAgICBzbG93UGF0aC5s
aW5rKCZtX2ppdCk7CisgICAgCisgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhy
ZXN1bHRHUFIpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihoZWxwZXJGdW5jdGlvbiwgcmVz
dWx0R1BSLCBhcmcxR1BSLCBhcmcyR1BSKTsKKyAgICAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdp
c3RlcnMocmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQu
YnJhbmNoVGVzdDMyKGNhbGxSZXN1bHRDb25kaXRpb24sIHJlc3VsdEdQUiksIHRha2VuKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQorICAg
ICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7Cit9CisKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKE5vZGUmIG5vZGUsIE1h
Y3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9uX0VK
SiBoZWxwZXJGdW5jdGlvbikKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGlsZDIoKSk7
CisgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOworICAgIEdQUlJlZyBhcmcyR1BSID0g
YXJnMi5ncHIoKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Cisg
ICAgCisgICAgaWYgKGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQxKCkpIHx8IGlzS25vd25O
b3RJbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhp
cyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgCisgICAg
ICAgIGFyZzEudXNlKCk7CisgICAgICAgIGFyZzIudXNlKCk7CisgICAgCisgICAgICAgIGZsdXNo
UmVnaXN0ZXJzKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24oaGVscGVyRnVuY3Rpb24sIHJlc3Vs
dEdQUiwgYXJnMUdQUiwgYXJnMkdQUik7CisgICAgICAgIAorICAgICAgICBtX2ppdC5vcjMyKFRy
dXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGls
ZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgYXJnMik7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgYXJnMS51c2UoKTsKKyAgICAgICAgYXJnMi51c2UoKTsKKyAgICAK
KyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgICAg
IHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBh
cmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgaWYgKCFp
c0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAKKyAgICAgICAgbV9qaXQuY29tcGFyZTMy
KGNvbmQsIGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7CisgICAgCisgICAgICAgIGlmICgh
aXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hp
bGQyKCkpKSB7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBoYXZlUmVzdWx0ID0gbV9q
aXQuanVtcCgpOworICAgIAorICAgICAgICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOworICAg
ICAgICAKKyAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Cisg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uKGhlbHBlckZ1bmN0aW9uLCByZXN1bHRHUFIsIGFyZzFH
UFIsIGFyZzJHUFIpOworICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRH
UFIpOworICAgICAgICAKKyAgICAgICAgICAgIG1faml0LmFuZFB0cihUcnVzdGVkSW1tMzIoMSks
IHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICAgICAgaGF2ZVJlc3VsdC5saW5rKCZtX2pp
dCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMy
KFZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGls
ZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgIH0KK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFu
Y2hOb2RlSW5kZXgsIGJvb2wgaW52ZXJ0KQoreworICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChi
cmFuY2hOb2RlSW5kZXgpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2Vu
QmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRh
a2VuQmxvY2tJbmRleCgpOworCisgICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJy
YW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCisgICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNo
IHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2Ug
Y2FuIGZhbGwgdGhyb3VnaC4KKyAgICBpZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkgeworICAg
ICAgICBpbnZlcnQgPSAhaW52ZXJ0OworICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOwor
ICAgICAgICB0YWtlbiA9IG5vdFRha2VuOworICAgICAgICBub3RUYWtlbiA9IHRtcDsKKyAgICB9
CisgICAgCisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAg
ICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIEdQUlJlZyBh
cmcxR1BSID0gYXJnMS5ncHIoKTsKKyAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7Cisg
ICAgCisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworICAgIAorICAgIGFyZzEudXNlKCk7CisgICAgYXJnMi51c2UoKTsK
KyAgICAKKyAgICBpZiAoaXNLbm93bkNlbGwobm9kZS5jaGlsZDEoKSkgJiYgaXNLbm93bkNlbGwo
bm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgLy8gc2VlIGlmIHdlIGdldCBsdWNreTogaWYgdGhl
IGFyZ3VtZW50cyBhcmUgY2VsbHMgYW5kIHRoZXkgcmVmZXJlbmNlIHRoZSBzYW1lCisgICAgICAg
IC8vIGNlbGwsIHRoZW4gdGhleSBtdXN0IGJlIHN0cmljdGx5IGVxdWFsLgorICAgICAgICBhZGRC
cmFuY2gobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgYXJnMUdQUiwgYXJnMkdQ
UiksIGludmVydCA/IG5vdFRha2VuIDogdGFrZW4pOworICAgICAgICAKKyAgICAgICAgc2lsZW50
U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlU3RyaWN0RXFDZWxsLCByZXN1bHRHUFIsIGFyZzFHUFIsIGFyZzJHUFIpOwor
ICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAgIAorICAg
ICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDMyKGludmVydCA/IEpJVENvbXBpbGVyOjpO
b25aZXJvIDogSklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdEdQUiksIHRha2VuKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBtX2ppdC5vclB0cihhcmcxR1BSLCBhcmcyR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgdHdvQ2VsbHNDYXNlID0gbV9qaXQu
YnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6WmVybywgcmVzdWx0R1BSLCBHUFJJbmZvOjp0YWdN
YXNrUmVnaXN0ZXIpOworICAgICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbnVtYmVy
Q2FzZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdEdQ
UiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgCisgICAgICAgIGFk
ZEJyYW5jaChtX2ppdC5icmFuY2gzMihpbnZlcnQgPyBKSVRDb21waWxlcjo6Tm90RXF1YWwgOiBK
SVRDb21waWxlcjo6RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIpLCB0YWtlbik7CisgICAgICAgIGFk
ZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKKyAgICAgICAgCisgICAgICAgIHR3b0Nl
bGxzQ2FzZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIo
SklUQ29tcGlsZXI6OkVxdWFsLCBhcmcxR1BSLCBhcmcyR1BSKSwgaW52ZXJ0ID8gbm90VGFrZW4g
OiB0YWtlbik7CisgICAgICAgIAorICAgICAgICBudW1iZXJDYXNlLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgCisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZXN1bHRHUFIsIGFy
ZzFHUFIsIGFyZzJHUFIpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQ
Uik7CisgICAgICAgIAorICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDMyKGludmVy
dCA/IEpJVENvbXBpbGVyOjpaZXJvIDogSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiks
IHRha2VuKTsKKyAgICB9CisgICAgCisgICAgaWYgKG5vdFRha2VuICE9IChtX2Jsb2NrICsgMSkp
CisgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKK30KKwordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0cmljdEVxKE5vZGUmIG5v
ZGUsIGJvb2wgaW52ZXJ0KQoreworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5j
aGlsZDEoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMigpKTsK
KyAgICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEuZ3ByKCk7CisgICAgR1BSUmVnIGFyZzJHUFIgPSBh
cmcyLmdwcigpOworICAgIAorICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAKKyAgICBhcmcxLnVzZSgpOworICAg
IGFyZzIudXNlKCk7CisgICAgCisgICAgaWYgKGlzS25vd25DZWxsKG5vZGUuY2hpbGQxKCkpICYm
IGlzS25vd25DZWxsKG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgIC8vIHNlZSBpZiB3ZSBnZXQg
bHVja3k6IGlmIHRoZSBhcmd1bWVudHMgYXJlIGNlbGxzIGFuZCB0aGV5IHJlZmVyZW5jZSB0aGUg
c2FtZQorICAgICAgICAvLyBjZWxsLCB0aGVuIHRoZXkgbXVzdCBiZSBzdHJpY3RseSBlcXVhbC4K
KyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90RXF1YWxDYXNlID0gbV9qaXQuYnJhbmNoUHRy
KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUik7CisgICAgICAgIAorICAg
ICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4oIWludmVydCkpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICAgICAgbm90RXF1YWxD
YXNlLmxpbmsoJm1faml0KTsKKyAgICAgICAgCisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzKHJlc3VsdEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0
cmljdEVxQ2VsbCwgcmVzdWx0R1BSLCBhcmcxR1BSLCBhcmcyR1BSKTsKKyAgICAgICAgc2lsZW50
RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgbV9qaXQuYW5k
UHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIG1f
aml0Lm9yMzIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIG1faml0Lm9yUHRyKGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7CisgICAgICAg
IAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcCB0d29DZWxsc0Nhc2UgPSBtX2ppdC5icmFuY2hU
ZXN0UHRyKEpJVENvbXBpbGVyOjpaZXJvLCByZXN1bHRHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdp
c3Rlcik7CisgICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBudW1iZXJDYXNlID0g
bV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0R1BSLCBHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICAKKyAgICAgICAgbV9qaXQuY29t
cGFyZTMyKGludmVydCA/IEpJVENvbXBpbGVyOjpOb3RFcXVhbCA6IEpJVENvbXBpbGVyOjpFcXVh
bCwgYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIGRvbmUxID0gbV9qaXQuanVtcCgpOworICAgICAgICAKKyAgICAgICAgdHdv
Q2VsbHNDYXNlLmxpbmsoJm1faml0KTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90RXF1
YWxDYXNlID0gbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgYXJnMUdQUiwg
YXJnMkdQUik7CisgICAgICAgIAorICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oIWludmVydCkpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUyID0gbV9qaXQuanVt
cCgpOworICAgICAgICAKKyAgICAgICAgbnVtYmVyQ2FzZS5saW5rKCZtX2ppdCk7CisgICAgICAg
IG5vdEVxdWFsQ2FzZS5saW5rKCZtX2ppdCk7CisgICAgICAgIAorICAgICAgICBzaWxlbnRTcGls
bEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVTdHJpY3RFcSwgcmVzdWx0R1BSLCBhcmcxR1BSLCBhcmcyR1BSKTsKKyAgICAgICAg
c2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgbV9q
aXQuYW5kUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisKKyAg
ICAgICAgZG9uZTEubGluaygmbV9qaXQpOworCisgICAgICAgIG1faml0Lm9yMzIoSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAg
ICAgIGRvbmUyLmxpbmsoJm1faml0KTsKKyAgICB9CisgICAgCisgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChO
b2RlJiBub2RlKQoreworICAgIFBfREZHT3BlcmF0aW9uX0Ugc2xvd0NhbGxGdW5jdGlvbjsKKwor
ICAgIGlmIChub2RlLm9wID09IENhbGwpCisgICAgICAgIHNsb3dDYWxsRnVuY3Rpb24gPSBvcGVy
YXRpb25MaW5rQ2FsbDsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG5vZGUub3AgPT0gQ29u
c3RydWN0KTsKKyAgICAgICAgc2xvd0NhbGxGdW5jdGlvbiA9IG9wZXJhdGlvbkxpbmtDb25zdHJ1
Y3Q7CisgICAgfQorCisgICAgLy8gRm9yIGNvbnN0cnVjdG9ycywgdGhlIHRoaXMgYXJndW1lbnQg
aXMgbm90IHBhc3NlZCBidXQgd2UgaGF2ZSB0byBtYWtlIHNwYWNlCisgICAgLy8gZm9yIGl0Lgor
ICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IG5vZGUub3AgPT0gQ2FsbCA/IDAgOiAxOworICAg
IAorICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBub2RlLm9wID09IENhbGwg
PyBDYWxsTGlua0luZm86OkNhbGwgOiBDYWxsTGlua0luZm86OkNvbnN0cnVjdDsKKyAgICAKKyAg
ICBOb2RlSW5kZXggY2FsbGVlTm9kZUluZGV4ID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxk
cmVuW25vZGUuZmlyc3RDaGlsZCgpXTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywg
Y2FsbGVlTm9kZUluZGV4KTsKKyAgICBHUFJSZWcgY2FsbGVlR1BSID0gY2FsbGVlLmdwcigpOwor
ICAgIHVzZShjYWxsZWVOb2RlSW5kZXgpOworICAgIAorICAgIC8vIHRoZSBjYWxsIGluc3RydWN0
aW9uJ3MgZmlyc3QgY2hpbGQgaXMgZWl0aGVyIHRoZSBmdW5jdGlvbiAobm9ybWFsIGNhbGwpIG9y
IHRoZQorICAgIC8vIHJlY2VpdmVyIChtZXRob2QgY2FsbCkuIHN1YnNlcXVlbnQgY2hpbGRyZW4g
YXJlIHRoZSBhcmd1bWVudHMuCisgICAgaW50IG51bUFyZ3MgPSBub2RlLm51bUNoaWxkcmVuKCkg
LSAxOworICAgIAorICAgIGludCBudW1QYXNzZWRBcmdzID0gbnVtQXJncyArIGR1bW15VGhpc0Fy
Z3VtZW50OworICAgIAorICAgIC8vIGFtb3VudCBvZiBzdHVmZiAoaW4gdW5pdHMgb2Ygc2l6ZW9m
KFJlZ2lzdGVyKSkgdGhhdCB3ZSBuZWVkIHRvIHBsYWNlIGF0IHRoZQorICAgIC8vIHRvcCBvZiB0
aGUgSlMgc3RhY2suCisgICAgaW50IGNhbGxEYXRhU2l6ZSA9IDA7CisKKyAgICAvLyBmaXJzdCB0
aGVyZSBhcmUgdGhlIGFyZ3VtZW50cworICAgIGNhbGxEYXRhU2l6ZSArPSBudW1QYXNzZWRBcmdz
OworICAgIAorICAgIC8vIGFuZCB0aGVuIHRoZXJlIGlzIHRoZSBjYWxsIGZyYW1lIGhlYWRlcgor
ICAgIGNhbGxEYXRhU2l6ZSArPSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7Cisg
ICAgCisgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG51bVBhc3NlZEFyZ3MpKSksIGFkZHJlc3NPZkNhbGxEYXRh
KFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkpOworICAgIG1faml0LnN0b3JlUHRyKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBhZGRyZXNzT2ZDYWxsRGF0YShSZWdpc3RlckZpbGU6OkNh
bGxlckZyYW1lKSk7CisgICAgCisgICAgZm9yIChpbnQgYXJnSWR4ID0gMDsgYXJnSWR4IDwgbnVt
QXJnczsgYXJnSWR4KyspIHsKKyAgICAgICAgTm9kZUluZGV4IGFyZ05vZGVJbmRleCA9IG1faml0
LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIDEgKyBhcmdJZHhd
OworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJnTm9kZUluZGV4KTsKKyAgICAg
ICAgR1BSUmVnIGFyZ0dQUiA9IGFyZy5ncHIoKTsKKyAgICAgICAgdXNlKGFyZ05vZGVJbmRleCk7
CisgICAgICAgIAorICAgICAgICBtX2ppdC5zdG9yZVB0cihhcmdHUFIsIGFkZHJlc3NPZkNhbGxE
YXRhKC1jYWxsRGF0YVNpemUgKyBhcmdJZHggKyBkdW1teVRoaXNBcmd1bWVudCkpOworICAgIH0K
KyAgICAKKyAgICBtX2ppdC5zdG9yZVB0cihjYWxsZWVHUFIsIGFkZHJlc3NPZkNhbGxEYXRhKFJl
Z2lzdGVyRmlsZTo6Q2FsbGVlKSk7CisgICAgCisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAK
KyAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7
CisgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGg7CisgICAgCisgICAgc2xvd1BhdGggPSBt
X2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVH
UFIsIHRhcmdldFRvQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKCkpKSk7CisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhjYWxsZWVHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlQ2hh
aW4pKSwgcmVzdWx0R1BSKTsKKyAgICBtX2ppdC5zdG9yZVB0cihyZXN1bHRHUFIsIGFkZHJlc3NP
ZkNhbGxEYXRhKFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikpOworCisgICAgbV9qaXQuYWRkUHRy
KEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihS
ZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgCisgICAgSklUQ29t
cGlsZXI6OkNhbGwgZmFzdENhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOworICAgIG1faml0Lm5vdGlm
eUNhbGwoZmFzdENhbGwsIGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luKTsKKyAgICAKKyAg
ICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgIAorICAgIHNsb3dQ
YXRoLmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29k
ZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIEpJVENv
bXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQuYWRkRmFzdEV4Y2VwdGlvbkNoZWNrKG1faml0
LmFwcGVuZENhbGwoc2xvd0NhbGxGdW5jdGlvbiksIGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3Jp
Z2luKTsKKyAgICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2Fs
bGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyKTsKKyAgICBtX2ppdC5ub3RpZnlDYWxsKG1faml0LmNhbGwoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpLCBhdChtX2NvbXBpbGVJbmRleCkuY29kZU9yaWdpbik7CisgICAgCisgICAgZG9uZS5s
aW5rKCZtX2ppdCk7CisgICAgCisgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgcmVzdWx0R1BSKTsKKyAgICAKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21w
aWxlSW5kZXgsIERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAg
ICAKKyAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNr
LCBjYWxsVHlwZSwgYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pOworfQorCiB0ZW1wbGF0
ZTxib29sIHN0cmljdD4KIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludElu
dGVybmFsKE5vZGVJbmRleCBub2RlSW5kZXgsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCkKIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCShyZXZpc2lvbiAxMDAyMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTggKzI0LDczMyBAQAogICov
CiAKICNpbmNsdWRlICJjb25maWcuaCIKLQogI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgi
Ci0jaW5jbHVkZSAiSlNCeXRlQXJyYXkuaCIKIAogI2lmIEVOQUJMRShERkdfSklUKQogCi0jaWYg
VVNFKEpTVkFMVUUzMl82NCkKICNpbmNsdWRlICJERkdKSVRDb21waWxlcklubGluZU1ldGhvZHMu
aCIKLSNlbmRpZgorI2luY2x1ZGUgIkpTQnl0ZUFycmF5LmgiCisjaW5jbHVkZSAiTGlua0J1ZmZl
ci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK2NvbnN0IGRvdWJsZSBT
cGVjdWxhdGl2ZUpJVDo6dHdvVG9UaGUzMiA9IChkb3VibGUpMHgxMDAwMDAwMDB1bGw7CisKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNsZWFyR2VuZXJhdGlvbkluZm8oKQoreworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2dlbmVyYXRpb25JbmZvLnNpemUoKTsgKytpKQorICAgICAgICBt
X2dlbmVyYXRpb25JbmZvW2ldID0gR2VuZXJhdGlvbkluZm8oKTsKKyAgICBtX2dwcnMgPSBSZWdp
c3RlckJhbms8R1BSSW5mbz4oKTsKKyAgICBtX2ZwcnMgPSBSZWdpc3RlckJhbms8RlBSSW5mbz4o
KTsKK30KKworR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZShOb2RlSW5kZXggbm9k
ZUluZGV4KQoreworICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVy
KCk7CisgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxS
ZWdpc3Rlcl07CisgICAgCisgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKKyAg
ICBjYXNlIERhdGFGb3JtYXROb25lOiB7CisgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgp
OworICAgICAgICBBU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRTdG9yYWdl
KTsKKyAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRl
clNwaWxsZWQpOworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAgIGluZm8uZmlsbFN0b3JhZ2UoZ3ByKTsK
KyAgICAgICAgcmV0dXJuIGdwcjsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgRGF0YUZvcm1h
dFN0b3JhZ2U6IHsKKyAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CisgICAgICAgIG1f
Z3Bycy5sb2NrKGdwcik7CisgICAgICAgIHJldHVybiBncHI7CisgICAgfQorICAgICAgICAKKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisg
ICAgcmV0dXJuIEludmFsaWRHUFJSZWc7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnVzZUNo
aWxkcmVuKE5vZGUmIG5vZGUpCit7CisgICAgaWYgKG5vZGUub3AgJiBOb2RlSGFzVmFyQXJncykg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNo
aWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4
KyspCisgICAgICAgICAgICB1c2UobV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxk
SWR4XSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTm9kZUluZGV4IGNoaWxkMSA9IG5vZGUuY2hp
bGQxKCk7CisgICAgICAgIGlmIChjaGlsZDEgPT0gTm9Ob2RlKSB7CisgICAgICAgICAgICBBU1NF
UlQobm9kZS5jaGlsZDIoKSA9PSBOb05vZGUgJiYgbm9kZS5jaGlsZDMoKSA9PSBOb05vZGUpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHVzZShjaGlsZDEpOworICAg
ICAgICAKKyAgICAgICAgTm9kZUluZGV4IGNoaWxkMiA9IG5vZGUuY2hpbGQyKCk7CisgICAgICAg
IGlmIChjaGlsZDIgPT0gTm9Ob2RlKSB7CisgICAgICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDMo
KSA9PSBOb05vZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHVz
ZShjaGlsZDIpOworICAgICAgICAKKyAgICAgICAgTm9kZUluZGV4IGNoaWxkMyA9IG5vZGUuY2hp
bGQzKCk7CisgICAgICAgIGlmIChjaGlsZDMgPT0gTm9Ob2RlKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB1c2UoY2hpbGQzKTsKKyAgICB9Cit9CisKK2Jvb2wgU3BlY3VsYXRpdmVKSVQ6
OmlzU3RyaWN0SW50MzIoTm9kZUluZGV4IG5vZGVJbmRleCkKK3sKKyAgICBpZiAoaXNJbnQzMkNv
bnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIE5vZGUm
IG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAgR2VuZXJhdGlvbkluZm8mIGlu
Zm8gPSBtX2dlbmVyYXRpb25JbmZvW25vZGUudmlydHVhbFJlZ2lzdGVyKCldOworICAgIAorICAg
IHJldHVybiBpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEludGVnZXI7Cit9CisK
K2Jvb2wgU3BlY3VsYXRpdmVKSVQ6OmlzS25vd25JbnRlZ2VyKE5vZGVJbmRleCBub2RlSW5kZXgp
Cit7CisgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAg
CisgICAgaWYgKG5vZGUuaGFzSW50MzJSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgCisgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW25vZGUudmly
dHVhbFJlZ2lzdGVyKCldOworCisgICAgcmV0dXJuIGluZm8uaXNKU0ludGVnZXIoKTsKK30KKwor
Ym9vbCBTcGVjdWxhdGl2ZUpJVDo6aXNLbm93bk51bWVyaWMoTm9kZUluZGV4IG5vZGVJbmRleCkK
K3sKKyAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkgfHwgaXNOdW1iZXJDb25zdGFu
dChub2RlSW5kZXgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIE5vZGUmIG5vZGUgPSBt
X2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAgCisgICAgaWYgKG5vZGUuaGFzTnVtYmVyUmVz
dWx0KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIEdlbmVyYXRpb25JbmZvJiBp
bmZvID0gbV9nZW5lcmF0aW9uSW5mb1tub2RlLnZpcnR1YWxSZWdpc3RlcigpXTsKKworICAgIHJl
dHVybiBpbmZvLmlzSlNJbnRlZ2VyKCkgfHwgaW5mby5pc0pTRG91YmxlKCk7Cit9CisKK2Jvb2wg
U3BlY3VsYXRpdmVKSVQ6OmlzS25vd25DZWxsKE5vZGVJbmRleCBub2RlSW5kZXgpCit7CisgICAg
cmV0dXJuIG1fZ2VuZXJhdGlvbkluZm9bbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdLnZpcnR1YWxS
ZWdpc3RlcigpXS5pc0pTQ2VsbCgpOworfQorCitib29sIFNwZWN1bGF0aXZlSklUOjppc0tub3du
Tm90Q2VsbChOb2RlSW5kZXggbm9kZUluZGV4KQoreworICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5n
cmFwaCgpW25vZGVJbmRleF07CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9
IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dl
bmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQo
KSAmJiAhdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5pc0NlbGwoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuICEoaW5mby5pc0pTQ2VsbCgpIHx8IGluZm8uaXNVbmtub3du
SlMoKSk7Cit9CisKK2Jvb2wgU3BlY3VsYXRpdmVKSVQ6OmlzS25vd25Ob3RJbnRlZ2VyKE5vZGVJ
bmRleCBub2RlSW5kZXgpCit7CisgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUlu
ZGV4XTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFs
UmVnaXN0ZXIoKTsKKyAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9b
dmlydHVhbFJlZ2lzdGVyXTsKKyAgICAKKyAgICByZXR1cm4gaW5mby5pc0pTRG91YmxlKCkgfHwg
aW5mby5pc0pTQ2VsbCgpIHx8IGluZm8uaXNKU0Jvb2xlYW4oKQorICAgICAgICB8fCAobm9kZS5o
YXNDb25zdGFudCgpICYmICF2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmlzSW50MzIoKSk7
Cit9CisKK2Jvb2wgU3BlY3VsYXRpdmVKSVQ6OmlzS25vd25Ob3ROdW1iZXIoTm9kZUluZGV4IG5v
ZGVJbmRleCkKK3sKKyAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOwor
ICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3Rl
cigpOworICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFs
UmVnaXN0ZXJdOworICAgIAorICAgIHJldHVybiAoIWluZm8uaXNKU0RvdWJsZSgpICYmICFpbmZv
LmlzSlNJbnRlZ2VyKCkgJiYgIWluZm8uaXNVbmtub3duSlMoKSkKKyAgICAgICAgfHwgKG5vZGUu
aGFzQ29uc3RhbnQoKSAmJiAhaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKTsKK30KKworYm9v
bCBTcGVjdWxhdGl2ZUpJVDo6aXNLbm93bkJvb2xlYW4oTm9kZUluZGV4IG5vZGVJbmRleCkKK3sK
KyAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOworICAgIGlmIChub2Rl
Lmhhc0Jvb2xlYW5SZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYg
KGlzQm9vbGVhbkNvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IAorICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdp
c3RlcigpOworICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0
dWFsUmVnaXN0ZXJdOworICAgIAorICAgIHJldHVybiBpbmZvLmlzSlNCb29sZWFuKCk7Cit9CisK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihNYWNyb0Fzc2VtYmxlciYgaml0LCBH
UFJSZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyLCBXcml0ZUJhcnJp
ZXJVc2VLaW5kIHVzZUtpbmQpCit7CisgICAgVU5VU0VEX1BBUkFNKGppdCk7CisgICAgVU5VU0VE
X1BBUkFNKG93bmVyKTsKKyAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDEpOworICAgIFVOVVNFRF9Q
QVJBTShzY3JhdGNoMik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOworICAgIEFTU0VSVChv
d25lciAhPSBzY3JhdGNoMSk7CisgICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gyKTsKKyAgICBB
U1NFUlQoc2NyYXRjaDEgIT0gc2NyYXRjaDIpOworCisjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJf
UFJPRklMSU5HKQorICAgIEpJVENvbXBpbGVyOjplbWl0Q291bnQoaml0LCBXcml0ZUJhcnJpZXJD
b3VudGVyczo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7CisjZW5kaWYKKyAgICBtYXJrQ2VsbENh
cmQoaml0LCBvd25lciwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKK30KKwordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6bWFya0NlbGxDYXJkKE1hY3JvQXNzZW1ibGVyJiBqaXQsIEdQUlJlZyBvd25lciwgR1BS
UmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit7CisgICAgVU5VU0VEX1BBUkFNKGppdCk7
CisgICAgVU5VU0VEX1BBUkFNKG93bmVyKTsKKyAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDEpOwor
ICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMik7CisgICAgCisjaWYgRU5BQkxFKEdHQykKKyAgICBq
aXQubW92ZShvd25lciwgc2NyYXRjaDEpOworICAgIGppdC5hbmRQdHIoVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KE1hcmtlZEJsb2NrOjpibG9ja01hc2spKSwgc2NyYXRjaDEpOwor
ICAgIGppdC5tb3ZlKG93bmVyLCBzY3JhdGNoMik7CisgICAgLy8gY29uc3VtZSBhZGRpdGlvbmFs
IDggYml0cyBhcyB3ZSdyZSB1c2luZyBhbiBhcHByb3hpbWF0ZSBmaWx0ZXIKKyAgICBqaXQucnNo
aWZ0MzIoVHJ1c3RlZEltbTMyKE1hcmtlZEJsb2NrOjphdG9tU2hpZnQgKyA4KSwgc2NyYXRjaDIp
OworICAgIGppdC5hbmRQdHIoVHJ1c3RlZEltbTMyKE1hcmtlZEJsb2NrOjphdG9tTWFzayA+PiA4
KSwgc2NyYXRjaDIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZpbHRlciA9IGppdC5icmFu
Y2hUZXN0OChNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
Y3JhdGNoMSwgc2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSwgTWFya2VkQmxvY2s6
Om9mZnNldE9mTWFya3MoKSkpOworICAgIGppdC5tb3ZlKG93bmVyLCBzY3JhdGNoMik7CisgICAg
aml0LnJzaGlmdDMyKFRydXN0ZWRJbW0zMihNYXJrZWRCbG9jazo6Y2FyZFNoaWZ0KSwgc2NyYXRj
aDIpOworICAgIGppdC5hbmRQdHIoVHJ1c3RlZEltbTMyKE1hcmtlZEJsb2NrOjpjYXJkTWFzayks
IHNjcmF0Y2gyKTsKKyAgICBqaXQuc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzY3JhdGNoMSwgc2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09u
ZSwgTWFya2VkQmxvY2s6Om9mZnNldE9mQ2FyZHMoKSkpOworICAgIGZpbHRlci5saW5rKCZqaXQp
OworI2VuZGlmCit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcg
b3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgTm9kZUluZGV4IHZhbHVlSW5kZXgsIFdyaXRlQmFy
cmllclVzZUtpbmQgdXNlS2luZCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit7
CisgICAgVU5VU0VEX1BBUkFNKG93bmVyR1BSKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWVHUFIp
OworICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMSk7CisgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gy
KTsKKyAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7CisKKyAgICBpZiAoaXNLbm93bk5vdENlbGwo
dmFsdWVJbmRleCkpCisgICAgICAgIHJldHVybjsKKworI2lmIEVOQUJMRShXUklURV9CQVJSSUVS
X1BST0ZJTElORykKKyAgICBKSVRDb21waWxlcjo6ZW1pdENvdW50KG1faml0LCBXcml0ZUJhcnJp
ZXJDb3VudGVyczo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7CisjZW5kaWYKKworI2lmIEVOQUJM
RShHR0MpCisgICAgR1BSVGVtcG9yYXJ5IHRlbXAxOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wMjsK
KyAgICBpZiAoc2NyYXRjaDEgPT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaEdQUih0aGlzKTsKKyAgICAgICAgdGVtcDEuYWRvcHQoc2NyYXRjaEdQUik7Cisg
ICAgICAgIHNjcmF0Y2gxID0gdGVtcDEuZ3ByKCk7CisgICAgfQorICAgIGlmIChzY3JhdGNoMiA9
PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoR1BSKHRoaXMp
OworICAgICAgICB0ZW1wMi5hZG9wdChzY3JhdGNoR1BSKTsKKyAgICAgICAgc2NyYXRjaDIgPSB0
ZW1wMi5ncHIoKTsKKyAgICB9CisgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgcmhzTm90Q2Vs
bDsKKyAgICBib29sIGhhZENlbGxDaGVjayA9IGZhbHNlOworICAgIGlmICghaXNLbm93bkNlbGwo
dmFsdWVJbmRleCkgJiYgIWlzQ2VsbFByZWRpY3Rpb24obV9qaXQuZ2V0UHJlZGljdGlvbih2YWx1
ZUluZGV4KSkpIHsKKyAgICAgICAgaGFkQ2VsbENoZWNrID0gdHJ1ZTsKKyAgICAgICAgcmhzTm90
Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgfQorCisgICAgbWFy
a0NlbGxDYXJkKG1faml0LCBvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKKworICAgIGlm
IChoYWRDZWxsQ2hlY2spCisgICAgICAgIHJoc05vdENlbGwubGluaygmbV9qaXQpOworI2VuZGlm
Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIs
IEpTQ2VsbCogdmFsdWUsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCwgR1BSUmVnIHNjcmF0
Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit7CisgICAgVU5VU0VEX1BBUkFNKG93bmVyR1BSKTsKKyAg
ICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMSk7CisgICAg
VU5VU0VEX1BBUkFNKHNjcmF0Y2gyKTsKKyAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7CisgICAg
CisgICAgaWYgKEhlYXA6OmlzTWFya2VkKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuOworCisjaWYg
RU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQorICAgIEpJVENvbXBpbGVyOjplbWl0Q291
bnQobV9qaXQsIFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRDb3VudGVyRm9yKHVzZUtpbmQpKTsK
KyNlbmRpZgorCisjaWYgRU5BQkxFKEdHQykKKyAgICBHUFJUZW1wb3JhcnkgdGVtcDE7CisgICAg
R1BSVGVtcG9yYXJ5IHRlbXAyOworICAgIGlmIChzY3JhdGNoMSA9PSBJbnZhbGlkR1BSUmVnKSB7
CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoR1BSKHRoaXMpOworICAgICAgICB0ZW1wMS5h
ZG9wdChzY3JhdGNoR1BSKTsKKyAgICAgICAgc2NyYXRjaDEgPSB0ZW1wMS5ncHIoKTsKKyAgICB9
CisgICAgaWYgKHNjcmF0Y2gyID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2hHUFIodGhpcyk7CisgICAgICAgIHRlbXAyLmFkb3B0KHNjcmF0Y2hHUFIpOwor
ICAgICAgICBzY3JhdGNoMiA9IHRlbXAyLmdwcigpOworICAgIH0KKworICAgIG1hcmtDZWxsQ2Fy
ZChtX2ppdCwgb3duZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisjZW5kaWYKK30KKwordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIEdQUlJlZyB2YWx1
ZUdQUiwgTm9kZUluZGV4IHZhbHVlSW5kZXgsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCwg
R1BSUmVnIHNjcmF0Y2gpCit7CisgICAgVU5VU0VEX1BBUkFNKG93bmVyKTsKKyAgICBVTlVTRURf
UEFSQU0odmFsdWVHUFIpOworICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsKKyAgICBVTlVTRURf
UEFSQU0odXNlS2luZCk7CisKKyAgICBpZiAoaXNLbm93bk5vdENlbGwodmFsdWVJbmRleCkpCisg
ICAgICAgIHJldHVybjsKKworI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKKyAg
ICBKSVRDb21waWxlcjo6ZW1pdENvdW50KG1faml0LCBXcml0ZUJhcnJpZXJDb3VudGVyczo6aml0
Q291bnRlckZvcih1c2VLaW5kKSk7CisjZW5kaWYKKworI2lmIEVOQUJMRShHR0MpCisgICAgSklU
Q29tcGlsZXI6Okp1bXAgcmhzTm90Q2VsbDsKKyAgICBib29sIGhhZENlbGxDaGVjayA9IGZhbHNl
OworICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVJbmRleCkgJiYgIWlzQ2VsbFByZWRpY3Rpb24o
bV9qaXQuZ2V0UHJlZGljdGlvbih2YWx1ZUluZGV4KSkpIHsKKyAgICAgICAgaGFkQ2VsbENoZWNr
ID0gdHJ1ZTsKKyAgICAgICAgcmhzTm90Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2VsbCh2YWx1
ZUdQUik7CisgICAgfQorICAgIAorICAgIEdQUlRlbXBvcmFyeSB0ZW1wOworICAgIGlmIChzY3Jh
dGNoID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2hHUFIo
dGhpcyk7CisgICAgICAgIHRlbXAuYWRvcHQoc2NyYXRjaEdQUik7CisgICAgICAgIHNjcmF0Y2gg
PSB0ZW1wLmdwcigpOworICAgIH0KKworICAgIHVpbnQ4X3QqIGNhcmRBZGRyZXNzID0gSGVhcDo6
YWRkcmVzc09mQ2FyZEZvcihvd25lcik7CisgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1
c3RlZEltbVB0cihjYXJkQWRkcmVzcyksIHNjcmF0Y2gpOworICAgIG1faml0LnN0b3JlOChKSVRD
b21waWxlcjo6VHJ1c3RlZEltbTMyKDEpLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoKSk7
CisKKyAgICBpZiAoaGFkQ2VsbENoZWNrKQorICAgICAgICByaHNOb3RDZWxsLmxpbmsoJm1faml0
KTsKKyNlbmRpZgorfQorCitib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBh
cmUoTm9kZSYgbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwg
U19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQoreworICAgIE5vZGVJbmRleCBicmFu
Y2hOb2RlSW5kZXggPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOworICAgIGlmIChicmFuY2hOb2Rl
SW5kZXggIT0gTm9Ob2RlKSB7CisgICAgICAgIEFTU0VSVChub2RlLmFkanVzdGVkUmVmQ291bnQo
KSA9PSAxKTsKKyAgICAgICAgCisgICAgICAgIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2go
bm9kZSwgYnJhbmNoTm9kZUluZGV4LCBjb25kLCBoZWxwZXJGdW5jdGlvbik7CisgICAgCisgICAg
ICAgIG1fY29tcGlsZUluZGV4ID0gYnJhbmNoTm9kZUluZGV4OworICAgICAgICAKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVD
b21wYXJlKG5vZGUsIGNvbmQsIGhlbHBlckZ1bmN0aW9uKTsKKyAgICAKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlU3RyaWN0RXEoTm9k
ZSYgbm9kZSwgYm9vbCBpbnZlcnQpCit7CisgICAgaWYgKCFpbnZlcnQgJiYgKGlzS25vd25OdW1l
cmljKG5vZGUuY2hpbGQxKCkpIHx8IGlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQyKCkpKSkKKyAg
ICAgICAgcmV0dXJuIG5vblNwZWN1bGF0aXZlQ29tcGFyZShub2RlLCBNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSk7CisgICAgCisgICAgTm9kZUluZGV4IGJy
YW5jaE5vZGVJbmRleCA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CisgICAgaWYgKGJyYW5jaE5v
ZGVJbmRleCAhPSBOb05vZGUpIHsKKyAgICAgICAgQVNTRVJUKG5vZGUuYWRqdXN0ZWRSZWZDb3Vu
dCgpID09IDEpOworICAgICAgICAKKyAgICAgICAgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmlj
dEVxKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgaW52ZXJ0KTsKKyAgICAKKyAgICAgICAgbV9jb21w
aWxlSW5kZXggPSBicmFuY2hOb2RlSW5kZXg7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0cmljdEVxKG5v
ZGUsIGludmVydCk7CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCisjaWZuZGVmIE5ERUJV
Rworc3RhdGljIGNvbnN0IGNoYXIqIGRhdGFGb3JtYXRTdHJpbmcoRGF0YUZvcm1hdCBmb3JtYXQp
Cit7CisgICAgLy8gVGhlc2UgdmFsdWVzIGNvcnJlc3BvbmQgdG8gdGhlIERhdGFGb3JtYXQgZW51
bS4KKyAgICBjb25zdCBjaGFyKiBzdHJpbmdzW10gPSB7CisgICAgICAgICJbICBdIiwKKyAgICAg
ICAgIlsgaV0iLAorICAgICAgICAiWyBkXSIsCisgICAgICAgICJbIGNdIiwKKyAgICAgICAgIkVy
ciEiLAorICAgICAgICAiRXJyISIsCisgICAgICAgICJFcnIhIiwKKyAgICAgICAgIkVyciEiLAor
ICAgICAgICAiW0ogXSIsCisgICAgICAgICJbSmldIiwKKyAgICAgICAgIltKZF0iLAorICAgICAg
ICAiW0pjXSIsCisgICAgICAgICJFcnIhIiwKKyAgICAgICAgIkVyciEiLAorICAgICAgICAiRXJy
ISIsCisgICAgICAgICJFcnIhIiwKKyAgICB9OworICAgIHJldHVybiBzdHJpbmdzW2Zvcm1hdF07
Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmR1bXAoY29uc3QgY2hhciogbGFiZWwpCit7Cisg
ICAgaWYgKGxhYmVsKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIjwlcz5cbiIsIGxhYmVsKTsK
KworICAgIGZwcmludGYoc3RkZXJyLCAiICBncHJzOlxuIik7CisgICAgbV9ncHJzLmR1bXAoKTsK
KyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgZnByczpcbiIpOworICAgIG1fZnBycy5kdW1wKCk7Cisg
ICAgZnByaW50ZihzdGRlcnIsICIgIFZpcnR1YWxSZWdpc3RlcnM6XG4iKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9nZW5lcmF0aW9uSW5mby5zaXplKCk7ICsraSkgeworICAgICAg
ICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9baV07CisgICAgICAgIGlm
IChpbmZvLmFsaXZlKCkpCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICAlIDNkOiVz
JXMiLCBpLCBkYXRhRm9ybWF0U3RyaW5nKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSksIGRhdGFGb3Jt
YXRTdHJpbmcoaW5mby5zcGlsbEZvcm1hdCgpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiICAgICUgM2Q6W19fXVtfX10iLCBpKTsKKyAgICAgICAgaWYgKGlu
Zm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQorICAgICAgICAgICAgZnBy
aW50ZihzdGRlcnIsICI6ZnByJWRcbiIsIGluZm8uZnByKCkpOworICAgICAgICBlbHNlIGlmIChp
bmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUKKyNpZiBVU0UoSlNWQUxVRTMy
XzY0KQorICAgICAgICAgICAgJiYgIShpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgJiBEYXRhRm9ybWF0
SlMpCisjZW5kaWYKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgQVNTRVJUKGluZm8uZ3By
KCkgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIjolc1xu
IiwgR1BSSW5mbzo6ZGVidWdOYW1lKGluZm8uZ3ByKCkpKTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgICAgfQorICAgIGlmIChsYWJlbCkKKyAg
ICAgICAgZnByaW50ZihzdGRlcnIsICI8LyVzPlxuIiwgbGFiZWwpOworfQorI2VuZGlmCisKKwor
I2lmIERGR19FTkFCTEUoQ09OU0lTVEVOQ1lfQ0hFQ0spCit2b2lkIFNwZWN1bGF0aXZlSklUOjpj
aGVja0NvbnNpc3RlbmN5KCkKK3sKKyAgICBib29sIGZhaWxlZCA9IGZhbHNlOworCisgICAgZm9y
IChncHJfaXRlcmF0b3IgaXRlciA9IG1fZ3Bycy5iZWdpbigpOyBpdGVyICE9IG1fZ3Bycy5lbmQo
KTsgKytpdGVyKSB7CisgICAgICAgIGlmIChpdGVyLmlzTG9ja2VkKCkpIHsKKyAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiREZHX0NPTlNJU1RFTkNZX0NIRUNLIGZhaWxlZDogZ3ByICVzIGlz
IGxvY2tlZC5cbiIsIGl0ZXIuZGVidWdOYW1lKCkpOworICAgICAgICAgICAgZmFpbGVkID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGZwcl9pdGVyYXRvciBpdGVyID0gbV9mcHJz
LmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0
ZXIuaXNMb2NrZWQoKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJERkdfQ09OU0lT
VEVOQ1lfQ0hFQ0sgZmFpbGVkOiBmcHIgJXMgaXMgbG9ja2VkLlxuIiwgaXRlci5kZWJ1Z05hbWUo
KSk7CisgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ2VuZXJhdGlvbkluZm8uc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IChWaXJ0dWFsUmVnaXN0
ZXIpaTsKKyAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3Zp
cnR1YWxSZWdpc3Rlcl07CisgICAgICAgIGlmICghaW5mby5hbGl2ZSgpKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CisgICAg
ICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBEYXRhRm9ybWF0SlM6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTSW50ZWdlcjoKKyAgICAg
ICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2Vs
bDoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOgorI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICBjYXNlIERhdGFGb3JtYXRJ
bnRlZ2VyOgorICAgICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgorICAgICAgICBjYXNlIERhdGFG
b3JtYXRCb29sZWFuOgorICAgICAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdlOiB7CisgICAgICAg
ICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKKyAgICAgICAgICAgIEFTU0VSVChncHIgIT0g
SW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICBpZiAobV9ncHJzLm5hbWUoZ3ByKSAhPSB2aXJ0
dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRGR19DT05T
SVNURU5DWV9DSEVDSyBmYWlsZWQ6IG5hbWUgbWlzbWF0Y2ggZm9yIHZpcnR1YWwgcmVnaXN0ZXIg
JWQgKGdwciAlcykuXG4iLCB2aXJ0dWFsUmVnaXN0ZXIsIEdQUkluZm86OmRlYnVnTmFtZShncHIp
KTsKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOiB7
CisgICAgICAgICAgICBGUFJSZWcgZnByID0gaW5mby5mcHIoKTsKKyAgICAgICAgICAgIEFTU0VS
VChmcHIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICBpZiAobV9mcHJzLm5hbWUoZnBy
KSAhPSB2aXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IkRGR19DT05TSVNURU5DWV9DSEVDSyBmYWlsZWQ6IG5hbWUgbWlzbWF0Y2ggZm9yIHZpcnR1YWwg
cmVnaXN0ZXIgJWQgKGZwciAlcykuXG4iLCB2aXJ0dWFsUmVnaXN0ZXIsIEZQUkluZm86OmRlYnVn
TmFtZShmcHIpKTsKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IGZvciAoZ3ByX2l0ZXJhdG9yIGl0ZXIgPSBtX2dwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2dwcnMu
ZW5kKCk7ICsraXRlcikgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
ID0gaXRlci5uYW1lKCk7CisgICAgICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXIgPT0gSW52YWxpZFZp
cnR1YWxSZWdpc3RlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEdlbmVyYXRp
b25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgICAgIGlmIChpdGVyLnJlZ0lEKCkgIT0gaW5mby5ncHIoKSkgewor
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJERkdfQ09OU0lTVEVOQ1lfQ0hFQ0sgZmFpbGVk
OiBuYW1lIG1pc21hdGNoIGZvciBncHIgJXMgKHZpcnR1YWwgcmVnaXN0ZXIgJWQpLlxuIiwgaXRl
ci5kZWJ1Z05hbWUoKSwgdmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGZhaWxlZCA9IHRy
dWU7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIGlmICghKGluZm8ucmVnaXN0ZXJGb3JtYXQo
KSAmIERhdGFGb3JtYXRKUykpIHsKKyAgICAgICAgICAgIGlmIChpdGVyLnJlZ0lEKCkgIT0gaW5m
by5ncHIoKSkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiREZHX0NPTlNJU1RF
TkNZX0NIRUNLIGZhaWxlZDogbmFtZSBtaXNtYXRjaCBmb3IgZ3ByICVzICh2aXJ0dWFsIHJlZ2lz
dGVyICVkKS5cbiIsIGl0ZXIuZGVidWdOYW1lKCksIHZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAg
ICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGlmIChpdGVyLnJlZ0lEKCkgIT0gaW5mby50YWdHUFIoKSAmJiBpdGVyLnJl
Z0lEKCkgIT0gaW5mby5wYXlsb2FkR1BSKCkpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkRGR19DT05TSVNURU5DWV9DSEVDSyBmYWlsZWQ6IG5hbWUgbWlzbWF0Y2ggZm9yIGdw
ciAlcyAodmlydHVhbCByZWdpc3RlciAlZCkuXG4iLCBpdGVyLmRlYnVnTmFtZSgpLCB2aXJ0dWFs
UmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIg
PSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgeworICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gaXRlci5uYW1lKCk7CisgICAgICAg
IGlmICh2aXJ0dWFsUmVnaXN0ZXIgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0
aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgICAgICBpZiAoaXRlci5yZWdJRCgpICE9IGlu
Zm8uZnByKCkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiREZHX0NPTlNJU1RFTkNZ
X0NIRUNLIGZhaWxlZDogbmFtZSBtaXNtYXRjaCBmb3IgZnByICVzICh2aXJ0dWFsIHJlZ2lzdGVy
ICVkKS5cbiIsIGl0ZXIuZGVidWdOYW1lKCksIHZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgICAg
ICBmYWlsZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZhaWxlZCkgewor
ICAgICAgICBkdW1wKCk7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorfQorI2VuZGlmCisKK0dQ
UlRlbXBvcmFyeTo6R1BSVGVtcG9yYXJ5KCkKKyAgICA6IG1faml0KDApCisgICAgLCBtX2dwcihJ
bnZhbGlkR1BSUmVnKQoreworfQorCitHUFJUZW1wb3Jhcnk6OkdQUlRlbXBvcmFyeShTcGVjdWxh
dGl2ZUpJVCogaml0KQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9ncHIoSW52YWxpZEdQUlJl
ZykKK3sKKyNpZiBDUFUoWDg2KQorICAgIC8vIHdlIGN1cnJlbnR5IGxhemlseSBhbGxvY2F0ZSB0
aGUgcmVnLCBhcyB0aGUgbnVtYmVyIG9mIHJlZ3Mgb24gWDg2IGlzIGxpbWl0ZWQuCisjZWxzZQor
ICAgIG1fZ3ByID0gbV9qaXQtPmFsbG9jYXRlKCk7CisjZW5kaWYKK30KKworR1BSVGVtcG9yYXJ5
OjpHUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgR1BSUmVnIHNwZWNpZmljKQorICAg
IDogbV9qaXQoaml0KQorICAgICwgbV9ncHIoSW52YWxpZEdQUlJlZykKK3sKKyAgICBtX2dwciA9
IG1faml0LT5hbGxvY2F0ZShzcGVjaWZpYyk7Cit9CisKK0dQUlRlbXBvcmFyeTo6R1BSVGVtcG9y
YXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQsIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kJiBvcDEpCisg
ICAgOiBtX2ppdChqaXQpCisgICAgLCBtX2dwcihJbnZhbGlkR1BSUmVnKQoreworICAgIGlmICht
X2ppdC0+Y2FuUmV1c2Uob3AxLmluZGV4KCkpKQorICAgICAgICBtX2dwciA9IG1faml0LT5yZXVz
ZShvcDEuZ3ByKCkpOworICAgIGVsc2UKKyAgICAgICAgbV9ncHIgPSBtX2ppdC0+YWxsb2NhdGUo
KTsKK30KKworR1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQmIG9wMSwgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQmIG9w
MikKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fZ3ByKEludmFsaWRHUFJSZWcpCit7CisgICAg
aWYgKG1faml0LT5jYW5SZXVzZShvcDEuaW5kZXgoKSkpCisgICAgICAgIG1fZ3ByID0gbV9qaXQt
PnJldXNlKG9wMS5ncHIoKSk7CisgICAgZWxzZSBpZiAobV9qaXQtPmNhblJldXNlKG9wMi5pbmRl
eCgpKSkKKyAgICAgICAgbV9ncHIgPSBtX2ppdC0+cmV1c2Uob3AyLmdwcigpKTsKKyAgICBlbHNl
CisgICAgICAgIG1fZ3ByID0gbV9qaXQtPmFsbG9jYXRlKCk7Cit9CisKK0dQUlRlbXBvcmFyeTo6
R1BSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQsIFNwZWN1bGF0ZVN0cmljdEludDMyT3Bl
cmFuZCYgb3AxKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9ncHIoSW52YWxpZEdQUlJlZykK
K3sKKyAgICBpZiAobV9qaXQtPmNhblJldXNlKG9wMS5pbmRleCgpKSkKKyAgICAgICAgbV9ncHIg
PSBtX2ppdC0+cmV1c2Uob3AxLmdwcigpKTsKKyAgICBlbHNlCisgICAgICAgIG1fZ3ByID0gbV9q
aXQtPmFsbG9jYXRlKCk7Cit9CisKK0dQUlRlbXBvcmFyeTo6R1BSVGVtcG9yYXJ5KFNwZWN1bGF0
aXZlSklUKiBqaXQsIEludGVnZXJPcGVyYW5kJiBvcDEpCisgICAgOiBtX2ppdChqaXQpCisgICAg
LCBtX2dwcihJbnZhbGlkR1BSUmVnKQoreworICAgIGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AxLmlu
ZGV4KCkpKQorICAgICAgICBtX2dwciA9IG1faml0LT5yZXVzZShvcDEuZ3ByKCkpOworICAgIGVs
c2UKKyAgICAgICAgbV9ncHIgPSBtX2ppdC0+YWxsb2NhdGUoKTsKK30KKworR1BSVGVtcG9yYXJ5
OjpHUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgSW50ZWdlck9wZXJhbmQmIG9wMSwg
SW50ZWdlck9wZXJhbmQmIG9wMikKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fZ3ByKEludmFs
aWRHUFJSZWcpCit7CisgICAgaWYgKG1faml0LT5jYW5SZXVzZShvcDEuaW5kZXgoKSkpCisgICAg
ICAgIG1fZ3ByID0gbV9qaXQtPnJldXNlKG9wMS5ncHIoKSk7CisgICAgZWxzZSBpZiAobV9qaXQt
PmNhblJldXNlKG9wMi5pbmRleCgpKSkKKyAgICAgICAgbV9ncHIgPSBtX2ppdC0+cmV1c2Uob3Ay
LmdwcigpKTsKKyAgICBlbHNlCisgICAgICAgIG1fZ3ByID0gbV9qaXQtPmFsbG9jYXRlKCk7Cit9
CisKK0dQUlRlbXBvcmFyeTo6R1BSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQsIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kJiBvcDEpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX2dwcihJbnZh
bGlkR1BSUmVnKQoreworICAgIGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AxLmluZGV4KCkpKQorICAg
ICAgICBtX2dwciA9IG1faml0LT5yZXVzZShvcDEuZ3ByKCkpOworICAgIGVsc2UKKyAgICAgICAg
bV9ncHIgPSBtX2ppdC0+YWxsb2NhdGUoKTsKK30KKworR1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3Jh
cnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQmIG9wMSkKKyAg
ICA6IG1faml0KGppdCkKKyAgICAsIG1fZ3ByKEludmFsaWRHUFJSZWcpCit7CisgICAgaWYgKG1f
aml0LT5jYW5SZXVzZShvcDEuaW5kZXgoKSkpCisgICAgICAgIG1fZ3ByID0gbV9qaXQtPnJldXNl
KG9wMS5ncHIoKSk7CisgICAgZWxzZQorICAgICAgICBtX2dwciA9IG1faml0LT5hbGxvY2F0ZSgp
OworfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKK0dQUlRlbXBvcmFyeTo6R1BSVGVtcG9yYXJ5KFNw
ZWN1bGF0aXZlSklUKiBqaXQsIEpTVmFsdWVPcGVyYW5kJiBvcDEpCisgICAgOiBtX2ppdChqaXQp
CisgICAgLCBtX2dwcihJbnZhbGlkR1BSUmVnKQoreworICAgIGlmIChtX2ppdC0+Y2FuUmV1c2Uo
b3AxLmluZGV4KCkpKQorICAgICAgICBtX2dwciA9IG1faml0LT5yZXVzZShvcDEuZ3ByKCkpOwor
ICAgIGVsc2UKKyAgICAgICAgbV9ncHIgPSBtX2ppdC0+YWxsb2NhdGUoKTsKK30KKyNlbHNlCitH
UFJUZW1wb3Jhcnk6OkdQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBKU1ZhbHVlT3Bl
cmFuZCYgb3AxLCBib29sIHRhZykKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fZ3ByKEludmFs
aWRHUFJSZWcpCit7CisgICAgaWYgKCFvcDEuaXNEb3VibGUoKSAmJiBtX2ppdC0+Y2FuUmV1c2Uo
b3AxLmluZGV4KCkpKQorICAgICAgICBtX2dwciA9IG1faml0LT5yZXVzZSh0YWcgPyBvcDEudGFn
R1BSKCkgOiBvcDEucGF5bG9hZEdQUigpKTsKKyAgICBlbHNlCisgICAgICAgIG1fZ3ByID0gbV9q
aXQtPmFsbG9jYXRlKCk7Cit9CisjZW5kaWYKKworR1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3Jhcnko
U3BlY3VsYXRpdmVKSVQqIGppdCwgU3RvcmFnZU9wZXJhbmQmIG9wMSkKKyAgICA6IG1faml0KGpp
dCkKKyAgICAsIG1fZ3ByKEludmFsaWRHUFJSZWcpCit7CisgICAgaWYgKG1faml0LT5jYW5SZXVz
ZShvcDEuaW5kZXgoKSkpCisgICAgICAgIG1fZ3ByID0gbV9qaXQtPnJldXNlKG9wMS5ncHIoKSk7
CisgICAgZWxzZQorICAgICAgICBtX2dwciA9IG1faml0LT5hbGxvY2F0ZSgpOworfQorCit2b2lk
IEdQUlRlbXBvcmFyeTo6YWRvcHQoR1BSVGVtcG9yYXJ5JiBvdGhlcikKK3sKKyAgICBBU1NFUlQo
IW1faml0KTsKKyAgICBBU1NFUlQobV9ncHIgPT0gSW52YWxpZEdQUlJlZyk7CisgICAgQVNTRVJU
KG90aGVyLm1faml0KTsKKyAgICBBU1NFUlQob3RoZXIubV9ncHIgIT0gSW52YWxpZEdQUlJlZyk7
CisgICAgbV9qaXQgPSBvdGhlci5tX2ppdDsKKyAgICBtX2dwciA9IG90aGVyLm1fZ3ByOworICAg
IG90aGVyLm1faml0ID0gMDsKKyAgICBvdGhlci5tX2dwciA9IEludmFsaWRHUFJSZWc7Cit9CisK
K0ZQUlRlbXBvcmFyeTo6RlBSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAgOiBt
X2ppdChqaXQpCisgICAgLCBtX2ZwcihJbnZhbGlkRlBSUmVnKQoreworICAgIG1fZnByID0gbV9q
aXQtPmZwckFsbG9jYXRlKCk7Cit9CisKK0ZQUlRlbXBvcmFyeTo6RlBSVGVtcG9yYXJ5KFNwZWN1
bGF0aXZlSklUKiBqaXQsIERvdWJsZU9wZXJhbmQmIG9wMSkKKyAgICA6IG1faml0KGppdCkKKyAg
ICAsIG1fZnByKEludmFsaWRGUFJSZWcpCit7CisgICAgaWYgKG1faml0LT5jYW5SZXVzZShvcDEu
aW5kZXgoKSkpCisgICAgICAgIG1fZnByID0gbV9qaXQtPnJldXNlKG9wMS5mcHIoKSk7CisgICAg
ZWxzZQorICAgICAgICBtX2ZwciA9IG1faml0LT5mcHJBbGxvY2F0ZSgpOworfQorCitGUFJUZW1w
b3Jhcnk6OkZQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBEb3VibGVPcGVyYW5kJiBv
cDEsIERvdWJsZU9wZXJhbmQmIG9wMikKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fZnByKElu
dmFsaWRGUFJSZWcpCit7CisgICAgaWYgKG1faml0LT5jYW5SZXVzZShvcDEuaW5kZXgoKSkpCisg
ICAgICAgIG1fZnByID0gbV9qaXQtPnJldXNlKG9wMS5mcHIoKSk7CisgICAgZWxzZSBpZiAobV9q
aXQtPmNhblJldXNlKG9wMi5pbmRleCgpKSkKKyAgICAgICAgbV9mcHIgPSBtX2ppdC0+cmV1c2Uo
b3AyLmZwcigpKTsKKyAgICBlbHNlCisgICAgICAgIG1fZnByID0gbV9qaXQtPmZwckFsbG9jYXRl
KCk7Cit9CisKK0ZQUlRlbXBvcmFyeTo6RlBSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQs
IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQmIG9wMSkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1f
ZnByKEludmFsaWRGUFJSZWcpCit7CisgICAgaWYgKG1faml0LT5jYW5SZXVzZShvcDEuaW5kZXgo
KSkpCisgICAgICAgIG1fZnByID0gbV9qaXQtPnJldXNlKG9wMS5mcHIoKSk7CisgICAgZWxzZQor
ICAgICAgICBtX2ZwciA9IG1faml0LT5mcHJBbGxvY2F0ZSgpOworfQorCitGUFJUZW1wb3Jhcnk6
OkZQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBTcGVjdWxhdGVEb3VibGVPcGVyYW5k
JiBvcDEsIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQmIG9wMikKKyAgICA6IG1faml0KGppdCkKKyAg
ICAsIG1fZnByKEludmFsaWRGUFJSZWcpCit7CisgICAgaWYgKG1faml0LT5jYW5SZXVzZShvcDEu
aW5kZXgoKSkpCisgICAgICAgIG1fZnByID0gbV9qaXQtPnJldXNlKG9wMS5mcHIoKSk7CisgICAg
ZWxzZSBpZiAobV9qaXQtPmNhblJldXNlKG9wMi5pbmRleCgpKSkKKyAgICAgICAgbV9mcHIgPSBt
X2ppdC0+cmV1c2Uob3AyLmZwcigpKTsKKyAgICBlbHNlCisgICAgICAgIG1fZnByID0gbV9qaXQt
PmZwckFsbG9jYXRlKCk7Cit9CisKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorRlBSVGVtcG9yYXJ5
OjpGUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgSlNWYWx1ZU9wZXJhbmQmIG9wMSkK
KyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fZnByKEludmFsaWRGUFJSZWcpCit7CisgICAgaWYg
KG9wMS5pc0RvdWJsZSgpICYmIG1faml0LT5jYW5SZXVzZShvcDEuaW5kZXgoKSkpCisgICAgICAg
IG1fZnByID0gbV9qaXQtPnJldXNlKG9wMS5mcHIoKSk7CisgICAgZWxzZQorICAgICAgICBtX2Zw
ciA9IG1faml0LT5mcHJBbGxvY2F0ZSgpOworfQorI2VuZGlmCisKICNpZm5kZWYgTkRFQlVHCiB2
b2lkIFZhbHVlU291cmNlOjpkdW1wKEZJTEUqIG91dCkgY29uc3QKIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDEwMDIz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDIxIEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNp
bmNsdWRlICJERkdBYnN0cmFjdFN0YXRlLmgiCi0jaW5jbHVkZSAiREZHSklUQ29kZUdlbmVyYXRv
ci5oIgorI2luY2x1ZGUgIkRGR0dlbmVyYXRpb25JbmZvLmgiCisjaW5jbHVkZSAiREZHSklUQ29t
cGlsZXIuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0LmgiCisjaW5jbHVkZSAiREZHT3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIlZhbHVlUmVjb3ZlcnkuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCiBjbGFzcyBTcGVjdWxhdGl2ZUpJVDsKK2NsYXNzIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kOworY2xhc3MgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kOworY2xhc3MgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZDsKK2NsYXNzIFNwZWN1bGF0ZUNlbGxPcGVyYW5kOworY2xhc3Mg
U3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ7CisKIAogZW51bSBWYWx1ZVNvdXJjZUtpbmQgewogICAg
IFNvdXJjZU5vdFNldCwKQEAgLTEyNSwxNCArMTMzLDIxMiBAQCBwcml2YXRlOgogLy8gYSBzcGVj
dWxhdGl2ZSBjaGVjayBoYXMgZmFpbGVkLiBUaGlzIGFsbG93cyB0aGUgU3BlY3VsYXRpdmVKSVQK
IC8vIHRvIHByb3BhZ2F0ZSB0eXBlIGluZm9ybWF0aW9uIChpbmNsdWRpbmcgaW5mb3JtYXRpb24g
dGhhdCBoYXMKIC8vIG9ubHkgc3BlY3VsYXRpdmVseSBiZWVuIGFzc2VydGVkKSB0aHJvdWdoIHRo
ZSBkYXRhZmxvdy4KLWNsYXNzIFNwZWN1bGF0aXZlSklUIDogcHVibGljIEpJVENvZGVHZW5lcmF0
b3IgeworY2xhc3MgU3BlY3VsYXRpdmVKSVQgewogICAgIGZyaWVuZCBzdHJ1Y3QgT1NSRXhpdDsK
K3ByaXZhdGU6CisgICAgdHlwZWRlZiBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyIFRydXN0ZWRJ
bW0zMjsKKyAgICB0eXBlZGVmIEpJVENvbXBpbGVyOjpJbW0zMiBJbW0zMjsKKyAgICB0eXBlZGVm
IEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyIFRydXN0ZWRJbW1QdHI7CisgICAgdHlwZWRlZiBK
SVRDb21waWxlcjo6SW1tUHRyIEltbVB0cjsKKworICAgIC8vIFRoZXNlIGNvbnN0YW50cyBhcmUg
dXNlZCB0byBzZXQgcHJpb3JpdGllcyBmb3Igc3BpbGwgb3JkZXIgZm9yCisgICAgLy8gdGhlIHJl
Z2lzdGVyIGFsbG9jYXRvci4KKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGVudW0gU3BpbGxPcmRl
ciB7CisgICAgICAgIFNwaWxsT3JkZXJDb25zdGFudCA9IDEsIC8vIG5vIHNwaWxsLCBhbmQgY2hl
YXAgZmlsbAorICAgICAgICBTcGlsbE9yZGVyU3BpbGxlZCAgPSAyLCAvLyBubyBzcGlsbAorICAg
ICAgICBTcGlsbE9yZGVySlMgICAgICAgPSA0LCAvLyBuZWVkcyBzcGlsbAorICAgICAgICBTcGls
bE9yZGVyQ2VsbCAgICAgPSA0LCAvLyBuZWVkcyBzcGlsbAorICAgICAgICBTcGlsbE9yZGVyU3Rv
cmFnZSAgPSA0LCAvLyBuZWVkcyBzcGlsbAorICAgICAgICBTcGlsbE9yZGVySW50ZWdlciAgPSA1
LCAvLyBuZWVkcyBzcGlsbCBhbmQgYm94CisgICAgICAgIFNwaWxsT3JkZXJCb29sZWFuICA9IDUs
IC8vIG5lZWRzIHNwaWxsIGFuZCBib3gKKyAgICAgICAgU3BpbGxPcmRlckRvdWJsZSAgID0gNiwg
Ly8gbmVlZHMgc3BpbGwgYW5kIGNvbnZlcnQKKyAgICB9OworI2VsaWYgVVNFKEpTVkFMVUUzMl82
NCkKKyAgICBlbnVtIFNwaWxsT3JkZXIgeworICAgICAgICBTcGlsbE9yZGVyQ29uc3RhbnQgPSAx
LCAvLyBubyBzcGlsbCwgYW5kIGNoZWFwIGZpbGwKKyAgICAgICAgU3BpbGxPcmRlclNwaWxsZWQg
ID0gMiwgLy8gbm8gc3BpbGwKKyAgICAgICAgU3BpbGxPcmRlckpTICAgICAgID0gNCwgLy8gbmVl
ZHMgc3BpbGwKKyAgICAgICAgU3BpbGxPcmRlclN0b3JhZ2UgID0gNCwgLy8gbmVlZHMgc3BpbGwK
KyAgICAgICAgU3BpbGxPcmRlckRvdWJsZSAgID0gNCwgLy8gbmVlZHMgc3BpbGwKKyAgICAgICAg
U3BpbGxPcmRlckludGVnZXIgID0gNSwgLy8gbmVlZHMgc3BpbGwgYW5kIGJveAorICAgICAgICBT
cGlsbE9yZGVyQ2VsbCAgICAgPSA1LCAvLyBuZWVkcyBzcGlsbCBhbmQgYm94CisgICAgICAgIFNw
aWxsT3JkZXJCb29sZWFuICA9IDUsIC8vIG5lZWRzIHNwaWxsIGFuZCBib3gKKyAgICB9OworI2Vu
ZGlmCisKKyAgICBlbnVtIFVzZUNoaWxkcmVuTW9kZSB7IENhbGxVc2VDaGlsZHJlbiwgVXNlQ2hp
bGRyZW5DYWxsZWRFeHBsaWNpdGx5IH07CisgICAgCisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSB0
d29Ub1RoZTMyOworCiBwdWJsaWM6CiAgICAgU3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsZXImKTsK
IAogICAgIGJvb2wgY29tcGlsZSgpOwogICAgIHZvaWQgbGlua09TUkVudHJpZXMoTGlua0J1ZmZl
ciYpOwogCisgICAgTm9kZSYgYXQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAgfQorICAgIAorICAgIEdQUlJl
ZyBmaWxsSW50ZWdlcihOb2RlSW5kZXgsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCk7CisgICAg
RlBSUmVnIGZpbGxEb3VibGUoTm9kZUluZGV4KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEdQ
UlJlZyBmaWxsSlNWYWx1ZShOb2RlSW5kZXgpOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICBib29sIGZpbGxKU1ZhbHVlKE5vZGVJbmRleCwgR1BSUmVnJiwgR1BSUmVnJiwgRlBSUmVnJik7
CisjZW5kaWYKKyAgICBHUFJSZWcgZmlsbFN0b3JhZ2UoTm9kZUluZGV4KTsKKworICAgIC8vIGxv
Y2sgYW5kIHVubG9jayBHUFIgJiBGUFIgcmVnaXN0ZXJzLgorICAgIHZvaWQgbG9jayhHUFJSZWcg
cmVnKQorICAgIHsKKyAgICAgICAgbV9ncHJzLmxvY2socmVnKTsKKyAgICB9CisgICAgdm9pZCBs
b2NrKEZQUlJlZyByZWcpCisgICAgeworICAgICAgICBtX2ZwcnMubG9jayhyZWcpOworICAgIH0K
KyAgICB2b2lkIHVubG9jayhHUFJSZWcgcmVnKQorICAgIHsKKyAgICAgICAgbV9ncHJzLnVubG9j
ayhyZWcpOworICAgIH0KKyAgICB2b2lkIHVubG9jayhGUFJSZWcgcmVnKQorICAgIHsKKyAgICAg
ICAgbV9mcHJzLnVubG9jayhyZWcpOworICAgIH0KKworICAgIC8vIFVzZWQgdG8gY2hlY2sgd2hl
dGhlciBhIGNoaWxkIG5vZGUgaXMgb24gaXRzIGxhc3QgdXNlLAorICAgIC8vIGFuZCBpdHMgbWFj
aGluZSByZWdpc3RlcnMgbWF5IGJlIHJldXNlZC4KKyAgICBib29sIGNhblJldXNlKE5vZGVJbmRl
eCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyID0gYXQobm9kZUluZGV4KS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgR2VuZXJhdGlv
bkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAg
IHJldHVybiBpbmZvLmNhblJldXNlKCk7CisgICAgfQorICAgIEdQUlJlZyByZXVzZShHUFJSZWcg
cmVnKQorICAgIHsKKyAgICAgICAgbV9ncHJzLmxvY2socmVnKTsKKyAgICAgICAgcmV0dXJuIHJl
ZzsKKyAgICB9CisgICAgRlBSUmVnIHJldXNlKEZQUlJlZyByZWcpCisgICAgeworICAgICAgICBt
X2ZwcnMubG9jayhyZWcpOworICAgICAgICByZXR1cm4gcmVnOworICAgIH0KKworICAgIC8vIEFs
bG9jYXRlIGEgZ3ByL2Zwci4KKyAgICBHUFJSZWcgYWxsb2NhdGUoKQorICAgIHsKKyAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHNwaWxsTWU7CisgICAgICAgIEdQUlJlZyBncHIgPSBtX2dwcnMuYWxs
b2NhdGUoc3BpbGxNZSk7CisgICAgICAgIGlmIChzcGlsbE1lICE9IEludmFsaWRWaXJ0dWFsUmVn
aXN0ZXIpIHsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAgICAgR2VuZXJhdGlvbklu
Zm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3NwaWxsTWVdOworICAgICAgICAgICAgQVNTRVJU
KGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0SlNEb3VibGUpOworICAgICAgICAg
ICAgaWYgKChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpKQorICAgICAgICAg
ICAgICAgIG1fZ3Bycy5yZWxlYXNlKGluZm8udGFnR1BSKCkgPT0gZ3ByID8gaW5mby5wYXlsb2Fk
R1BSKCkgOiBpbmZvLnRhZ0dQUigpKTsKKyNlbmRpZgorICAgICAgICAgICAgc3BpbGwoc3BpbGxN
ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGdwcjsKKyAgICB9CisgICAgR1BSUmVnIGFs
bG9jYXRlKEdQUlJlZyBzcGVjaWZpYykKKyAgICB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBz
cGlsbE1lID0gbV9ncHJzLmFsbG9jYXRlU3BlY2lmaWMoc3BlY2lmaWMpOworICAgICAgICBpZiAo
c3BpbGxNZSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKSB7CisjaWYgVVNFKEpTVkFMVUUzMl82
NCkKKyAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tz
cGlsbE1lXTsKKyAgICAgICAgICAgIEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0
YUZvcm1hdEpTRG91YmxlKTsKKyAgICAgICAgICAgIGlmICgoaW5mby5yZWdpc3RlckZvcm1hdCgp
ICYgRGF0YUZvcm1hdEpTKSkKKyAgICAgICAgICAgICAgICBtX2dwcnMucmVsZWFzZShpbmZvLnRh
Z0dQUigpID09IHNwZWNpZmljID8gaW5mby5wYXlsb2FkR1BSKCkgOiBpbmZvLnRhZ0dQUigpKTsK
KyNlbmRpZgorICAgICAgICAgICAgc3BpbGwoc3BpbGxNZSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHNwZWNpZmljOworICAgIH0KKyAgICBHUFJSZWcgdHJ5QWxsb2NhdGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fZ3Bycy50cnlBbGxvY2F0ZSgpOworICAgIH0KKyAgICBGUFJSZWcg
ZnByQWxsb2NhdGUoKQorICAgIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNwaWxsTWU7Cisg
ICAgICAgIEZQUlJlZyBmcHIgPSBtX2ZwcnMuYWxsb2NhdGUoc3BpbGxNZSk7CisgICAgICAgIGlm
IChzcGlsbE1lICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICAgICBzcGlsbChz
cGlsbE1lKTsKKyAgICAgICAgcmV0dXJuIGZwcjsKKyAgICB9CisKKyAgICAvLyBDaGVjayB3aGV0
aGVyIGEgVmlydHVhbFJlZ3NpdGVyIGlzIGN1cnJlbnRseSBpbiBhIG1hY2hpbmUgcmVnaXN0ZXIu
CisgICAgLy8gV2UgdXNlIHRoaXMgd2hlbiBmaWxsaW5nIG9wZXJhbmRzIHRvIGZpbGwgdGhvc2Ug
dGhhdCBhcmUgYWxyZWFkeSBpbgorICAgIC8vIG1hY2hpbmUgcmVnaXN0ZXJzIGZpcnN0IChieSBs
b2NraW5nIFZpcnR1YWxSZWdzaXRlcnMgdGhhdCBhcmUgYWxyZWFkeQorICAgIC8vIGluIG1hY2hp
bmUgcmVnaXN0ZXIgYmVmb3JlIGZpbGxpbmcgdGhvc2UgdGhhdCBhcmUgbm90IHdlIGF0dGVtcHQg
dG8KKyAgICAvLyBhdm9pZCBzcGlsbGluZyB2YWx1ZXMgd2Ugd2lsbCBuZWVkIGltbWVkaWF0ZWx5
KS4KKyAgICBib29sIGlzRmlsbGVkKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gYXQobm9kZUluZGV4KS52aXJ0dWFs
UmVnaXN0ZXIoKTsKKyAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25J
bmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAgIHJldHVybiBpbmZvLnJlZ2lzdGVyRm9ybWF0
KCkgIT0gRGF0YUZvcm1hdE5vbmU7CisgICAgfQorICAgIGJvb2wgaXNGaWxsZWREb3VibGUoTm9k
ZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIgPSBhdChub2RlSW5kZXgpLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBHZW5l
cmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKyAg
ICAgICAgcmV0dXJuIGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlOwor
ICAgIH0KKworICAgIC8vIENhbGxlZCBvbiBhbiBvcGVyYW5kIG9uY2UgaXQgaGFzIGJlZW4gY29u
c3VtZWQgYnkgYSBwYXJlbnQgbm9kZS4KKyAgICB2b2lkIHVzZShOb2RlSW5kZXggbm9kZUluZGV4
KQorICAgIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGF0KG5v
ZGVJbmRleCkudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZv
ID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworCisgICAgICAgIC8vIHVzZSgp
IHJldHVybnMgdHJ1ZSB3aGVuIHRoZSB2YWx1ZSBiZWNvbWVzIGRlYWQsIGFuZCBhbnkKKyAgICAg
ICAgLy8gYXNzb2NpYXRlZCByZXNvdXJjZXMgbWF5IGJlIGZyZWVkLgorICAgICAgICBpZiAoIWlu
Zm8udXNlKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gUmVsZWFzZSB0aGUg
YXNzb2NpYXRlZCBtYWNoaW5lIHJlZ2lzdGVycy4KKyAgICAgICAgRGF0YUZvcm1hdCByZWdpc3Rl
ckZvcm1hdCA9IGluZm8ucmVnaXN0ZXJGb3JtYXQoKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
ICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSkKKyAgICAgICAgICAg
IG1fZnBycy5yZWxlYXNlKGluZm8uZnByKCkpOworICAgICAgICBlbHNlIGlmIChyZWdpc3RlckZv
cm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSkKKyAgICAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKGluZm8u
Z3ByKCkpOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgaWYgKHJlZ2lzdGVyRm9y
bWF0ID09IERhdGFGb3JtYXREb3VibGUgfHwgcmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEpT
RG91YmxlKQorICAgICAgICAgICAgbV9mcHJzLnJlbGVhc2UoaW5mby5mcHIoKSk7CisgICAgICAg
IGVsc2UgaWYgKHJlZ2lzdGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSB7CisgICAgICAgICAgICBt
X2dwcnMucmVsZWFzZShpbmZvLnRhZ0dQUigpKTsKKyAgICAgICAgICAgIG1fZ3Bycy5yZWxlYXNl
KGluZm8ucGF5bG9hZEdQUigpKTsKKyAgICAgICAgfSBlbHNlIGlmIChyZWdpc3RlckZvcm1hdCAh
PSBEYXRhRm9ybWF0Tm9uZSkKKyAgICAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKGluZm8uZ3ByKCkp
OworI2VuZGlmCisgICAgfQorCisgICAgc3RhdGljIHZvaWQgbWFya0NlbGxDYXJkKE1hY3JvQXNz
ZW1ibGVyJiwgR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3Jh
dGNoR1BSMik7CisgICAgc3RhdGljIHZvaWQgd3JpdGVCYXJyaWVyKE1hY3JvQXNzZW1ibGVyJiwg
R1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwg
V3JpdGVCYXJyaWVyVXNlS2luZCk7CisKKyAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3du
ZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgTm9kZUluZGV4IHZhbHVlSW5kZXgsIFdyaXRlQmFycmll
clVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoR1BSMSA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBzY3Jh
dGNoR1BSMiA9IEludmFsaWRHUFJSZWcpOworICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBv
d25lckdQUiwgSlNDZWxsKiB2YWx1ZSwgV3JpdGVCYXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0
Y2hHUFIxID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJl
Zyk7CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgR1BSUmVnIHZhbHVlR1BS
LCBOb2RlSW5kZXggdmFsdWVJbmRleCwgV3JpdGVCYXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0
Y2hHUFIxID0gSW52YWxpZEdQUlJlZyk7CisKKyAgICBzdGF0aWMgR1BSUmVnIHNlbGVjdFNjcmF0
Y2hHUFIoR1BSUmVnIHByZXNlcnZlMSA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTIg
PSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUzID0gSW52YWxpZEdQUlJlZykKKyAgICB7
CisgICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDAgJiYgcHJlc2VydmUyICE9
IEdQUkluZm86OnJlZ1QwICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMCkKKyAgICAgICAg
ICAgIHJldHVybiBHUFJJbmZvOjpyZWdUMDsKKworICAgICAgICBpZiAocHJlc2VydmUxICE9IEdQ
UkluZm86OnJlZ1QxICYmIHByZXNlcnZlMiAhPSBHUFJJbmZvOjpyZWdUMSAmJiBwcmVzZXJ2ZTMg
IT0gR1BSSW5mbzo6cmVnVDEpCisgICAgICAgICAgICByZXR1cm4gR1BSSW5mbzo6cmVnVDE7CisK
KyAgICAgICAgaWYgKHByZXNlcnZlMSAhPSBHUFJJbmZvOjpyZWdUMiAmJiBwcmVzZXJ2ZTIgIT0g
R1BSSW5mbzo6cmVnVDIgJiYgcHJlc2VydmUzICE9IEdQUkluZm86OnJlZ1QyKQorICAgICAgICAg
ICAgcmV0dXJuIEdQUkluZm86OnJlZ1QyOworCisgICAgICAgIHJldHVybiBHUFJJbmZvOjpyZWdU
MzsKKyAgICB9CisKICAgICAvLyBDYWxsZWQgYnkgdGhlIHNwZWN1bGF0aXZlIG9wZXJhbmQgdHlw
ZXMsIGJlbG93LCB0byBmaWxsIG9wZXJhbmQgdG8KICAgICAvLyBtYWNoaW5lIHJlZ2lzdGVycywg
aW1wbGljaXRseSBnZW5lcmF0aW5nIHNwZWN1bGF0aW9uIGNoZWNrcyBhcyBuZWVkZWQuCiAgICAg
R1BSUmVnIGZpbGxTcGVjdWxhdGVJbnQoTm9kZUluZGV4LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3Jt
YXQpOwpAQCAtMTQyLDEzICszNDgsMTUzNCBAQCBwdWJsaWM6CiAgICAgR1BSUmVnIGZpbGxTcGVj
dWxhdGVCb29sZWFuKE5vZGVJbmRleCk7CiAKIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIEpJ
VENvZGVHZW5lcmF0b3I7Ci0gICAgCiAgICAgdm9pZCBjb21waWxlKE5vZGUmKTsKICAgICB2b2lk
IGNvbXBpbGVNb3ZIaW50KE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGUoQmFzaWNCbG9jayYpOwog
Ci0gICAgdm9pZCBjaGVja0FyZ3VtZW50VHlwZXMoKTsKKyAgICB2b2lkIGNoZWNrQXJndW1lbnRU
eXBlcygpOworCisgICAgdm9pZCBjbGVhckdlbmVyYXRpb25JbmZvKCk7CisKKyAgICAvLyBUaGVz
ZSBtZXRob2RzIGFyZSB1c2VkIHdoZW4gZ2VuZXJhdGluZyAndW5leHBlY3RlZCcKKyAgICAvLyBj
YWxscyBvdXQgZnJvbSBKSVQgY29kZSB0byBDKysgaGVscGVyIHJvdXRpbmVzIC0KKyAgICAvLyB0
aGV5IHNwaWxsIGFsbCBsaXZlIHZhbHVlcyB0byB0aGUgYXBwcm9wcmlhdGUKKyAgICAvLyBzbG90
cyBpbiB0aGUgUmVnaXN0ZXJGaWxlIHdpdGhvdXQgY2hhbmdpbmcgYW55IHN0YXRlCisgICAgLy8g
aW4gdGhlIEdlbmVyYXRpb25JbmZvLgorICAgIHZvaWQgc2lsZW50U3BpbGxHUFIoVmlydHVhbFJl
Z2lzdGVyIHNwaWxsTWUsIEdQUlJlZyBzb3VyY2UpCisgICAgeworICAgICAgICBHZW5lcmF0aW9u
SW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bc3BpbGxNZV07CisgICAgICAgIEFTU0VSVChp
bmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpOworICAgICAgICBBU1NFUlQo
aW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXREb3VibGUpOworCisgICAgICAgIGlm
ICghaW5mby5uZWVkc1NwaWxsKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgRGF0
YUZvcm1hdCByZWdpc3RlckZvcm1hdCA9IGluZm8ucmVnaXN0ZXJGb3JtYXQoKTsKKworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHNvdXJjZSk7CisgICAg
ICAgIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKKyAgICAgICAgICAg
IG1faml0LnN0b3JlMzIoc291cmNlLCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ICYgRGF0
YUZvcm1hdEpTIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRDZWxsIHx8IHJlZ2lzdGVy
Rm9ybWF0ID09IERhdGFGb3JtYXRTdG9yYWdlKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRy
KHNvdXJjZSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOworICAgICAgICB9Cisj
ZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgJiBEYXRh
Rm9ybWF0SlMpIHsKKyAgICAgICAgICAgIEFTU0VSVChpbmZvLnRhZ0dQUigpID09IHNvdXJjZSB8
fCBpbmZvLnBheWxvYWRHUFIoKSA9PSBzb3VyY2UpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUz
Mihzb3VyY2UsIHNvdXJjZSA9PSBpbmZvLnRhZ0dQUigpID8gSklUQ29tcGlsZXI6OnRhZ0Zvcihz
cGlsbE1lKSA6IEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHNvdXJjZSk7CisgICAgICAg
ICAgICBtX2ppdC5zdG9yZTMyKHNvdXJjZSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxN
ZSkpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisgICAgdm9pZCBzaWxlbnRTcGlsbEZQUihW
aXJ0dWFsUmVnaXN0ZXIgc3BpbGxNZSwgRlBSUmVnIHNvdXJjZSkKKyAgICB7CisgICAgICAgIEdl
bmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tzcGlsbE1lXTsKKyAgICAgICAg
QVNTRVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKTsKKworICAg
ICAgICBpZiAoIWluZm8ubmVlZHNTcGlsbCgpKSB7CisgICAgICAgICAgICAvLyBpdCdzIGVpdGhl
ciBhIGNvbnN0YW50IG9yIGl0J3MgYWxyZWFkeSBiZWVuIHNwaWxsZWQKKyAgICAgICAgICAgIEFT
U0VSVChhdChpbmZvLm5vZGVJbmRleCgpKS5oYXNDb25zdGFudCgpIHx8IGluZm8uc3BpbGxGb3Jt
YXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIGl0J3MgbmVpdGhlciBhIGNvbnN0YW50IG5vciBoYXMgaXQg
YmVlbiBzcGlsbGVkLgorICAgICAgICBBU1NFUlQoIWF0KGluZm8ubm9kZUluZGV4KCkpLmhhc0Nv
bnN0YW50KCkpOworICAgICAgICBBU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3Jt
YXROb25lKTsKKyAgICAgICAgQVNTRVJUKGluZm8uZnByKCkgPT0gc291cmNlKTsKKworICAgICAg
ICBtX2ppdC5zdG9yZURvdWJsZShzb3VyY2UsIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxs
TWUpKTsKKyAgICB9CisKKyAgICB2b2lkIHNpbGVudEZpbGxHUFIoVmlydHVhbFJlZ2lzdGVyIHNw
aWxsTWUsIEdQUlJlZyB0YXJnZXQpCisgICAgeworICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5m
byA9IG1fZ2VuZXJhdGlvbkluZm9bc3BpbGxNZV07CisKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJ
bmRleCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5k
ZXgpOworICAgICAgICBBU1NFUlQoaW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXRO
b25lKTsKKyAgICAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0
RG91YmxlKTsKKyAgICAgICAgRGF0YUZvcm1hdCByZWdpc3RlckZvcm1hdCA9IGluZm8ucmVnaXN0
ZXJGb3JtYXQoKTsKKworICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdElu
dGVnZXIpIHsKKyAgICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHRhcmdldCk7CisgICAg
ICAgICAgICBBU1NFUlQoaXNKU0ludGVnZXIoaW5mby5yZWdpc3RlckZvcm1hdCgpKSk7CisgICAg
ICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJU
KGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3Zl
KEltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCB0YXJnZXQpOworICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpw
YXlsb2FkRm9yKHNwaWxsTWUpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEJv
b2xlYW4pIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAgICAgQVNTRVJUKGluZm8u
Z3ByKCkgPT0gdGFyZ2V0KTsKKyAgICAgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsK
KyAgICAgICAgICAgICAgICBBU1NFUlQoaXNCb29sZWFuQ29uc3RhbnQobm9kZUluZGV4KSk7Cisg
ICAgICAgICAgICAgICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KG5v
ZGVJbmRleCkpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
bV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpLCB0YXJnZXQpOwor
I2VuZGlmCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVn
aXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwpIHsKKyAgICAgICAgICAgIEFTU0VSVChpbmZv
LmdwcigpID09IHRhcmdldCk7CisgICAgICAgICAgICBpZiAobm9kZS5pc0NvbnN0YW50KCkpIHsK
KyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUlu
ZGV4KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFsdWUuaXNDZWxsKCkpOworICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUoSW1tUHRyKHZhbHVlLmFzQ2VsbCgpKSwgdGFyZ2V0KTsKKyAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6
OnBheWxvYWRGb3Ioc3BpbGxNZSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdFN0b3JhZ2Up
IHsKKyAgICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHRhcmdldCk7CisgICAgICAgICAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpLCB0YXJnZXQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKHJlZ2lz
dGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBB
U1NFUlQoaW5mby5ncHIoKSA9PSB0YXJnZXQpOworICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFu
dCgpKQorICAgICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZU9mSlNDb25zdGFudEFzSW1tUHRyKG5v
ZGVJbmRleCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSA9
PSBEYXRhRm9ybWF0SW50ZWdlcikgeworICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0
ID09IERhdGFGb3JtYXRKU0ludGVnZXIpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENv
bXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpLCB0YXJnZXQpOworICAgICAgICAgICAgbV9qaXQu
b3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCB0YXJnZXQpOworICAgICAgICB9
IGVsc2UgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7CisgICAg
ICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEpTRG91YmxlKTsKKyAg
ICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSks
IHRhcmdldCk7CisgICAgICAgICAgICBtX2ppdC5zdWJQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSksIHRhcmdldCk7CisjZWxzZQor
ICAgICAgICBBU1NFUlQoaW5mby50YWdHUFIoKSA9PSB0YXJnZXQgfHwgaW5mby5wYXlsb2FkR1BS
KCkgPT0gdGFyZ2V0KTsKKyAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgeworICAgICAg
ICAgICAgSlNWYWx1ZSB2ID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUoaW5mby50YWdHUFIoKSA9PSB0YXJnZXQgPyBJbW0zMih2LnRhZygpKSA6
IEltbTMyKHYucGF5bG9hZCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChpbmZvLnNw
aWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEludGVnZXIpIHsKKyAgICAgICAgICAgIEFTU0VSVChy
ZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKKyAgICAgICAgICAgIGlmIChp
bmZvLnBheWxvYWRHUFIoKSA9PSB0YXJnZXQpIAorICAgICAgICAgICAgICAgIG1faml0LmxvYWQz
MihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihzcGlsbE1lKSwgdGFyZ2V0KTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZyksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9qaXQubG9h
ZDMyKGluZm8udGFnR1BSKCkgPT0gdGFyZ2V0ID8gSklUQ29tcGlsZXI6OnRhZ0ZvcihzcGlsbE1l
KSA6IEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpLCB0YXJnZXQpOworI2VuZGlmCisg
ICAgfQorCisgICAgdm9pZCBzaWxlbnRGaWxsRlBSKFZpcnR1YWxSZWdpc3RlciBzcGlsbE1lLCBH
UFJSZWcgY2FuVHJhbXBsZSwgRlBSUmVnIHRhcmdldCkKKyAgICB7CisgICAgICAgIEdlbmVyYXRp
b25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tzcGlsbE1lXTsKKyAgICAgICAgQVNTRVJU
KGluZm8uZnByKCkgPT0gdGFyZ2V0KTsKKworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0g
aW5mby5ub2RlSW5kZXgoKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBOb2RlJiBub2Rl
ID0gYXQobm9kZUluZGV4KTsKKyAgICAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9
PSBEYXRhRm9ybWF0RG91YmxlKTsKKworICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7
CisgICAgICAgICAgICBBU1NFUlQoaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKTsKKyAgICAg
ICAgICAgIG1faml0Lm1vdmUoSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4odmFsdWVPZk51bWJl
ckNvbnN0YW50KG5vZGVJbmRleCkpKSwgY2FuVHJhbXBsZSk7CisgICAgICAgICAgICBtX2ppdC5t
b3ZlUHRyVG9Eb3VibGUoY2FuVHJhbXBsZSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSAhPSBE
YXRhRm9ybWF0Tm9uZSAmJiBpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdERvdWJsZSkg
eworICAgICAgICAgICAgLy8gaXQgd2FzIGFscmVhZHkgc3BpbGxlZCBwcmV2aW91c2x5IGFuZCBu
b3QgYXMgYSBkb3VibGUsIHdoaWNoIG1lYW5zIHdlIG5lZWQgdW5ib3hpbmcuCisgICAgICAgICAg
ICBBU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAg
IG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSksIGNhblRyYW1w
bGUpOworICAgICAgICAgICAgdW5ib3hEb3VibGUoY2FuVHJhbXBsZSwgdGFyZ2V0KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1faml0LmxvYWREb3VibGUoSklU
Q29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSksIHRhcmdldCk7CisjZWxpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgICAgICBVTlVTRURfUEFSQU0oY2FuVHJhbXBsZSk7CisgICAgICAgIEFTU0VS
VChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSB8fCBpbmZvLnJlZ2lz
dGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEpTRG91YmxlKTsKKyAgICAgICAgbV9qaXQuZW1pdExv
YWREb3VibGUobm9kZUluZGV4LCB0YXJnZXQpOworI2VuZGlmCisgICAgfQorCisgICAgdm9pZCBz
aWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhHUFJSZWcgZXhjbHVkZSwgR1BSUmVnIGV4Y2x1ZGUyID0g
SW52YWxpZEdQUlJlZykKKyAgICB7CisgICAgICAgIGZvciAoZ3ByX2l0ZXJhdG9yIGl0ZXIgPSBt
X2dwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2dwcnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAg
ICAgR1BSUmVnIGdwciA9IGl0ZXIucmVnSUQoKTsKKyAgICAgICAgICAgIGlmIChpdGVyLm5hbWUo
KSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyICYmIGdwciAhPSBleGNsdWRlICYmIGdwciAhPSBl
eGNsdWRlMikKKyAgICAgICAgICAgICAgICBzaWxlbnRTcGlsbEdQUihpdGVyLm5hbWUoKSwgZ3By
KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGZwcl9pdGVyYXRvciBpdGVyID0gbV9mcHJzLmJl
Z2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIGlmIChp
dGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAgICAgICAgIHNp
bGVudFNwaWxsRlBSKGl0ZXIubmFtZSgpLCBpdGVyLnJlZ0lEKCkpOworICAgICAgICB9CisgICAg
fQorICAgIHZvaWQgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoRlBSUmVnIGV4Y2x1ZGUpCisgICAg
eworICAgICAgICBmb3IgKGdwcl9pdGVyYXRvciBpdGVyID0gbV9ncHJzLmJlZ2luKCk7IGl0ZXIg
IT0gbV9ncHJzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAh
PSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAgICAgICAgIHNpbGVudFNwaWxsR1BS
KGl0ZXIubmFtZSgpLCBpdGVyLnJlZ0lEKCkpOworICAgICAgICB9CisgICAgICAgIGZvciAoZnBy
X2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsr
aXRlcikgeworICAgICAgICAgICAgRlBSUmVnIGZwciA9IGl0ZXIucmVnSUQoKTsKKyAgICAgICAg
ICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyICYmIGZwciAhPSBl
eGNsdWRlKQorICAgICAgICAgICAgICAgIHNpbGVudFNwaWxsRlBSKGl0ZXIubmFtZSgpLCBmcHIp
OworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEdQ
UlJlZyBleGNsdWRlLCBHUFJSZWcgZXhjbHVkZTIgPSBJbnZhbGlkR1BSUmVnKQorICAgIHsKKyAg
ICAgICAgR1BSUmVnIGNhblRyYW1wbGUgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICAgICAgaWYgKGV4
Y2x1ZGUgPT0gR1BSSW5mbzo6cmVnVDApCisgICAgICAgICAgICBjYW5UcmFtcGxlID0gR1BSSW5m
bzo6cmVnVDE7CisgICAgICAgIAorICAgICAgICBmb3IgKGZwcl9pdGVyYXRvciBpdGVyID0gbV9m
cHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAg
IGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAgICAg
ICAgIHNpbGVudEZpbGxGUFIoaXRlci5uYW1lKCksIGNhblRyYW1wbGUsIGl0ZXIucmVnSUQoKSk7
CisgICAgICAgIH0KKyAgICAgICAgZm9yIChncHJfaXRlcmF0b3IgaXRlciA9IG1fZ3Bycy5iZWdp
bigpOyBpdGVyICE9IG1fZ3Bycy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgICAgICBHUFJSZWcg
Z3ByID0gaXRlci5yZWdJRCgpOworICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFs
aWRWaXJ0dWFsUmVnaXN0ZXIgJiYgZ3ByICE9IGV4Y2x1ZGUgJiYgZ3ByICE9IGV4Y2x1ZGUyKQor
ICAgICAgICAgICAgICAgIHNpbGVudEZpbGxHUFIoaXRlci5uYW1lKCksIGdwcik7CisgICAgICAg
IH0KKyAgICB9CisgICAgdm9pZCBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEZQUlJlZyBleGNsdWRl
KQorICAgIHsKKyAgICAgICAgR1BSUmVnIGNhblRyYW1wbGUgPSBHUFJJbmZvOjpyZWdUMDsKKyAg
ICAgICAgCisgICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsg
aXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgRlBSUmVnIGZwciA9
IGl0ZXIucmVnSUQoKTsKKyAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmly
dHVhbFJlZ2lzdGVyICYmIGZwciAhPSBleGNsdWRlKQorICAgICAgICAgICAgICAgIHNpbGVudEZp
bGxGUFIoaXRlci5uYW1lKCksIGNhblRyYW1wbGUsIGZwcik7CisgICAgICAgIH0KKyAgICAgICAg
Zm9yIChncHJfaXRlcmF0b3IgaXRlciA9IG1fZ3Bycy5iZWdpbigpOyBpdGVyICE9IG1fZ3Bycy5l
bmQoKTsgKytpdGVyKSB7CisgICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZp
cnR1YWxSZWdpc3RlcikKKyAgICAgICAgICAgICAgICBzaWxlbnRGaWxsR1BSKGl0ZXIubmFtZSgp
LCBpdGVyLnJlZ0lEKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9k
cyBjb252ZXJ0IGJldHdlZW4gZG91YmxlcywgYW5kIGRvdWJsZXMgYm94ZWQgYW5kIEpTVmFsdWVz
LgorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgR1BSUmVnIGJveERvdWJsZShGUFJSZWcgZnByLCBH
UFJSZWcgZ3ByKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faml0LmJveERvdWJsZShmcHIsIGdw
cik7CisgICAgfQorICAgIEZQUlJlZyB1bmJveERvdWJsZShHUFJSZWcgZ3ByLCBGUFJSZWcgZnBy
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faml0LnVuYm94RG91YmxlKGdwciwgZnByKTsKKyAg
ICB9CisgICAgR1BSUmVnIGJveERvdWJsZShGUFJSZWcgZnByKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGJveERvdWJsZShmcHIsIGFsbG9jYXRlKCkpOworICAgIH0KKyNlbGlmIFVTRShKU1ZBTFVF
MzJfNjQpCisgICAgdm9pZCBib3hEb3VibGUoRlBSUmVnIGZwciwgR1BSUmVnIHRhZ0dQUiwgR1BS
UmVnIHBheWxvYWRHUFIpCisgICAgeworICAgICAgICBtX2ppdC5ib3hEb3VibGUoZnByLCB0YWdH
UFIsIHBheWxvYWRHUFIpOworICAgIH0KKyAgICB2b2lkIHVuYm94RG91YmxlKEdQUlJlZyB0YWdH
UFIsIEdQUlJlZyBwYXlsb2FkR1BSLCBGUFJSZWcgZnByLCBGUFJSZWcgc2NyYXRjaEZQUikKKyAg
ICB7CisgICAgICAgIG1faml0LnVuYm94RG91YmxlKHRhZ0dQUiwgcGF5bG9hZEdQUiwgZnByLCBz
Y3JhdGNoRlBSKTsKKyAgICB9CisjZW5kaWYKKworICAgIC8vIFNwaWxsIGEgVmlydHVhbFJlZ2lz
dGVyIHRvIHRoZSBSZWdpc3RlckZpbGUuCisgICAgdm9pZCBzcGlsbChWaXJ0dWFsUmVnaXN0ZXIg
c3BpbGxNZSkKKyAgICB7CisgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0
aW9uSW5mb1tzcGlsbE1lXTsKKworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIGlmIChp
bmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpIC8vIGl0IGhhcyBiZWVuIHNw
aWxsZWQuIEpTIHZhbHVlcyB3aGljaCBoYXZlIHR3byBHUFJzIGNhbiByZWFjaCBoZXJlCisgICAg
ICAgICAgICByZXR1cm47CisjZW5kaWYKKyAgICAgICAgLy8gQ2hlY2sgdGhlIEdlbmVyYXRpb25J
bmZvIHRvIHNlZSBpZiB0aGlzIHZhbHVlIG5lZWQgd3JpdGluZworICAgICAgICAvLyB0byB0aGUg
UmVnaXN0ZXJGaWxlIC0gaWYgbm90LCBtYXJrIGl0IGFzIHNwaWxsZWQgJiByZXR1cm4uCisgICAg
ICAgIGlmICghaW5mby5uZWVkc1NwaWxsKCkpIHsKKyAgICAgICAgICAgIGluZm8uc2V0U3BpbGxl
ZCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgRGF0YUZvcm1h
dCBzcGlsbEZvcm1hdCA9IGluZm8ucmVnaXN0ZXJGb3JtYXQoKTsKKyAgICAgICAgc3dpdGNoIChz
cGlsbEZvcm1hdCkgeworICAgICAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdlOiB7CisgICAgICAg
ICAgICAvLyBUaGlzIGlzIHNwZWNpYWwsIHNpbmNlIGl0J3Mgbm90IGEgSlMgdmFsdWUgLSBhcyBp
biBpdCdzIG5vdCB2aXNpYmxlIHRvIEpTCisgICAgICAgICAgICAvLyBjb2RlLgorICAgICAgICAg
ICAgbV9qaXQuc3RvcmVQdHIoaW5mby5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3Bp
bGxNZSkpOworICAgICAgICAgICAgaW5mby5zcGlsbChEYXRhRm9ybWF0U3RvcmFnZSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAg
IGNhc2UgRGF0YUZvcm1hdERvdWJsZTogeworICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUo
aW5mby5mcHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOworICAgICAgICAg
ICAgaW5mby5zcGlsbChEYXRhRm9ybWF0RG91YmxlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6IHsK
KyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoaW5mby5ncHIoKSwgSklUQ29tcGlsZXI6OnBheWxv
YWRGb3Ioc3BpbGxNZSkpOworICAgICAgICAgICAgaW5mby5zcGlsbChEYXRhRm9ybWF0SW50ZWdl
cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGhhbmRsZXMgSlNWYWx1ZXMsIGludDMy
cywgYW5kIGNlbGxzLgorICAgICAgICAgICAgQVNTRVJUKHNwaWxsRm9ybWF0ID09IERhdGFGb3Jt
YXRDZWxsIHx8IHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgR1BSUmVnIHJlZyA9IGluZm8uZ3ByKCk7CisgICAgICAgICAgICAvLyBXZSBuZWVk
IHRvIGJveCBpbnQzMiBhbmQgY2VsbCB2YWx1ZXMgLi4uCisgICAgICAgICAgICAvLyBidXQgb24g
SlNWQUxVRTY0IGJveGluZyBhIGNlbGwgaXMgYSBuby1vcCEKKyAgICAgICAgICAgIGlmIChzcGls
bEZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKKyAgICAgICAgICAgICAgICBtX2ppdC5vclB0
cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZyk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIFNwaWxsIHRoZSB2YWx1ZSwgYW5kIHJlY29yZCBpdCBhcyBzcGlsbGVkIGlu
IGl0cyBib3hlZCBmb3JtLgorICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIocmVnLCBKSVRDb21w
aWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSk7CisgICAgICAgICAgICBpbmZvLnNwaWxsKChEYXRh
Rm9ybWF0KShzcGlsbEZvcm1hdCB8IERhdGFGb3JtYXRKUykpOworICAgICAgICAgICAgcmV0dXJu
OworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0RG91Ymxl
OgorICAgICAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZTogeworICAgICAgICAgICAgLy8gT24g
SlNWQUxVRTMyXzY0IGJveGluZyBhIGRvdWJsZSBpcyBhIG5vLW9wLgorICAgICAgICAgICAgbV9q
aXQuc3RvcmVEb3VibGUoaW5mby5mcHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxN
ZSkpOworICAgICAgICAgICAgaW5mby5zcGlsbChEYXRhRm9ybWF0SlNEb3VibGUpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAv
LyBUaGUgZm9sbG93aW5nIGNvZGUgaGFuZGxlcyBKU1ZhbHVlcywgaW50MzJzLCBjZWxscyBhbmQg
Ym9vbGVhbnMuCisgICAgICAgICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdElu
dGVnZXIgfHwgc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwgfHwgc3BpbGxGb3JtYXQgPT0g
RGF0YUZvcm1hdEJvb2xlYW4gfHwgKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSk7CisKKyAg
ICAgICAgICAgIGlmIChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUykgeyAvLyBKU1ZhbHVlCisg
ICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihpbmZvLnRhZ0dQUigpLCBKSVRDb21waWxlcjo6
dGFnRm9yKHNwaWxsTWUpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKGluZm8ucGF5
bG9hZEdQUigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihzcGlsbE1lKSk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEdQUlJlZyByZWcgPSBpbmZvLmdwcigpOworICAg
ICAgICAgICAgICAgIG1faml0LnN0b3JlMzIocmVnLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihz
cGlsbE1lKSk7CisgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBib3ggaW50MzJzLCBib29s
ZWFucyBhbmQgY2VsbHMuCisgICAgICAgICAgICAgICAgaWYgKHNwaWxsRm9ybWF0ID09IERhdGFG
b3JtYXRJbnRlZ2VyKQorICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIEpJVENvbXBpbGVyOjp0YWdGb3Ioc3BpbGxNZSkpOwor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRDZWxsKQor
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSwgSklUQ29tcGlsZXI6OnRhZ0ZvcihzcGlsbE1lKSk7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpCb29sZWFuVGFnKSwgSklUQ29tcGlsZXI6OnRhZ0ZvcihzcGlsbE1lKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpbmZvLnNwaWxsKChEYXRhRm9ybWF0KShzcGlsbEZvcm1hdCB8
IERhdGFGb3JtYXRKUykpOworICAgICAgICAgICAgcmV0dXJuOworI2VuZGlmCisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgYm9vbCBpc1N0cmljdEludDMyKE5vZGVJbmRleCk7CisgICAgCisg
ICAgYm9vbCBpc0tub3duSW50ZWdlcihOb2RlSW5kZXgpOworICAgIGJvb2wgaXNLbm93bk51bWVy
aWMoTm9kZUluZGV4KTsKKyAgICBib29sIGlzS25vd25DZWxsKE5vZGVJbmRleCk7CisgICAgCisg
ICAgYm9vbCBpc0tub3duTm90SW50ZWdlcihOb2RlSW5kZXgpOworICAgIGJvb2wgaXNLbm93bk5v
dE51bWJlcihOb2RlSW5kZXgpOworCisgICAgYm9vbCBpc0tub3duQm9vbGVhbihOb2RlSW5kZXgp
OworCisgICAgYm9vbCBpc0tub3duTm90Q2VsbChOb2RlSW5kZXgpOworICAgIAorICAgIC8vIENo
ZWNrcy9hY2Nlc3NvcnMgZm9yIGNvbnN0YW50IHZhbHVlcy4KKyAgICBib29sIGlzQ29uc3RhbnQo
Tm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuaXNDb25zdGFudChub2RlSW5kZXgp
OyB9CisgICAgYm9vbCBpc0pTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4g
bV9qaXQuaXNKU0NvbnN0YW50KG5vZGVJbmRleCk7IH0KKyAgICBib29sIGlzSW50MzJDb25zdGFu
dChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5pc0ludDMyQ29uc3RhbnQobm9k
ZUluZGV4KTsgfQorICAgIGJvb2wgaXNEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4
KSB7IHJldHVybiBtX2ppdC5pc0RvdWJsZUNvbnN0YW50KG5vZGVJbmRleCk7IH0KKyAgICBib29s
IGlzTnVtYmVyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuaXNO
dW1iZXJDb25zdGFudChub2RlSW5kZXgpOyB9CisgICAgYm9vbCBpc0Jvb2xlYW5Db25zdGFudChO
b2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5pc0Jvb2xlYW5Db25zdGFudChub2Rl
SW5kZXgpOyB9CisgICAgYm9vbCBpc0Z1bmN0aW9uQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRl
eCkgeyByZXR1cm4gbV9qaXQuaXNGdW5jdGlvbkNvbnN0YW50KG5vZGVJbmRleCk7IH0KKyAgICBp
bnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJu
IG1faml0LnZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCk7IH0KKyAgICBkb3VibGUgdmFs
dWVPZk51bWJlckNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LnZh
bHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpOyB9CisjaWYgVVNFKEpTVkFMVUUzMl82NCkK
KyAgICB2b2lkKiBhZGRyZXNzT2ZEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7
IHJldHVybiBtX2ppdC5hZGRyZXNzT2ZEb3VibGVDb25zdGFudChub2RlSW5kZXgpOyB9CisjZW5k
aWYKKyAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsg
cmV0dXJuIG1faml0LnZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7IH0KKyAgICBib29sIHZh
bHVlT2ZCb29sZWFuQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQu
dmFsdWVPZkJvb2xlYW5Db25zdGFudChub2RlSW5kZXgpOyB9CisgICAgSlNGdW5jdGlvbiogdmFs
dWVPZkZ1bmN0aW9uQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQu
dmFsdWVPZkZ1bmN0aW9uQ29uc3RhbnQobm9kZUluZGV4KTsgfQorICAgIGJvb2wgaXNOdWxsQ29u
c3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIGlmICghaXNDb25zdGFu
dChub2RlSW5kZXgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4g
dmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5pc051bGwoKTsKKyAgICB9CisKKyAgICBJZGVu
dGlmaWVyKiBpZGVudGlmaWVyKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJu
ICZtX2ppdC5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihpbmRleCk7CisgICAgfQorCisgICAgLy8g
U3BpbGwgYWxsIFZpcnR1YWxSZWdpc3RlcnMgYmFjayB0byB0aGUgUmVnaXN0ZXJGaWxlLgorICAg
IHZvaWQgZmx1c2hSZWdpc3RlcnMoKQorICAgIHsKKyAgICAgICAgZm9yIChncHJfaXRlcmF0b3Ig
aXRlciA9IG1fZ3Bycy5iZWdpbigpOyBpdGVyICE9IG1fZ3Bycy5lbmQoKTsgKytpdGVyKSB7Cisg
ICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcikgewor
ICAgICAgICAgICAgICAgIHNwaWxsKGl0ZXIubmFtZSgpKTsKKyAgICAgICAgICAgICAgICBpdGVy
LnJlbGVhc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKGZwcl9p
dGVyYXRvciBpdGVyID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0
ZXIpIHsKKyAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKSB7CisgICAgICAgICAgICAgICAgc3BpbGwoaXRlci5uYW1lKCkpOworICAgICAgICAgICAg
ICAgIGl0ZXIucmVsZWFzZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisj
aWZuZGVmIE5ERUJVRworICAgIC8vIFVzZWQgdG8gQVNTRVJUIGZsdXNoUmVnaXN0ZXJzKCkgaGFz
IGJlZW4gY2FsbGVkIHByaW9yIHRvCisgICAgLy8gY2FsbGluZyBvdXQgZnJvbSBKSVQgY29kZSB0
byBhIEMgaGVscGVyIGZ1bmN0aW9uLgorICAgIGJvb2wgaXNGbHVzaGVkKCkKKyAgICB7CisgICAg
ICAgIGZvciAoZ3ByX2l0ZXJhdG9yIGl0ZXIgPSBtX2dwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2dw
cnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFs
aWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsgaXRl
ciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgp
ICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyNlbmRpZgorCisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyIHZhbHVlT2ZKU0NvbnN0
YW50QXNJbW1QdHIoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZSh2YWx1ZU9mSlNDb25zdGFudChu
b2RlSW5kZXgpKSk7CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb25zIHRv
IGVuYWJsZSBjb2RlIHNoYXJpbmcgaW4gaW1wbGVtZW50YXRpb25zIG9mIGJpdC9zaGlmdCBvcHMu
CisgICAgdm9pZCBiaXRPcChOb2RlVHlwZSBvcCwgaW50MzJfdCBpbW0sIEdQUlJlZyBvcDEsIEdQ
UlJlZyByZXN1bHQpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2Ug
Qml0QW5kOgorICAgICAgICAgICAgbV9qaXQuYW5kMzIoSW1tMzIoaW1tKSwgb3AxLCByZXN1bHQp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQml0T3I6CisgICAgICAgICAgICBt
X2ppdC5vcjMyKEltbTMyKGltbSksIG9wMSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgICAgIG1faml0LnhvcjMyKEltbTMyKGltbSks
IG9wMSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9p
ZCBiaXRPcChOb2RlVHlwZSBvcCwgR1BSUmVnIG9wMSwgR1BSUmVnIG9wMiwgR1BSUmVnIHJlc3Vs
dCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBCaXRBbmQ6Cisg
ICAgICAgICAgICBtX2ppdC5hbmQzMihvcDEsIG9wMiwgcmVzdWx0KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEJpdE9yOgorICAgICAgICAgICAgbV9qaXQub3IzMihvcDEsIG9w
MiwgcmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJpdFhvcjoKKyAg
ICAgICAgICAgIG1faml0LnhvcjMyKG9wMSwgb3AyLCByZXN1bHQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICB2b2lkIHNoaWZ0T3AoTm9kZVR5cGUgb3AsIEdQUlJlZyBv
cDEsIGludDMyX3Qgc2hpZnRBbW91bnQsIEdQUlJlZyByZXN1bHQpCisgICAgeworICAgICAgICBz
d2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgQml0UlNoaWZ0OgorICAgICAgICAgICAgbV9qaXQu
cnNoaWZ0MzIob3AxLCBJbW0zMihzaGlmdEFtb3VudCksIHJlc3VsdCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CisgICAgICAgICAgICBtX2ppdC5sc2hpZnQz
MihvcDEsIEltbTMyKHNoaWZ0QW1vdW50KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6CisgICAgICAgICAgICBtX2ppdC51cnNoaWZ0MzIob3Ax
LCBJbW0zMihzaGlmdEFtb3VudCksIHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9
CisgICAgfQorICAgIHZvaWQgc2hpZnRPcChOb2RlVHlwZSBvcCwgR1BSUmVnIG9wMSwgR1BSUmVn
IHNoaWZ0QW1vdW50LCBHUFJSZWcgcmVzdWx0KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCkg
eworICAgICAgICBjYXNlIEJpdFJTaGlmdDoKKyAgICAgICAgICAgIG1faml0LnJzaGlmdDMyKG9w
MSwgc2hpZnRBbW91bnQsIHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBCaXRMU2hpZnQ6CisgICAgICAgICAgICBtX2ppdC5sc2hpZnQzMihvcDEsIHNoaWZ0QW1vdW50
LCByZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQml0VVJTaGlmdDoK
KyAgICAgICAgICAgIG1faml0LnVyc2hpZnQzMihvcDEsIHNoaWZ0QW1vdW50LCByZXN1bHQpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBSZXR1cm5zIHRo
ZSBub2RlIGluZGV4IG9mIHRoZSBicmFuY2ggbm9kZSBpZiBwZWVwaG9sZSBpcyBva2F5LCBOb05v
ZGUgb3RoZXJ3aXNlLgorICAgIE5vZGVJbmRleCBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpCisgICAg
eworICAgICAgICBOb2RlSW5kZXggbGFzdE5vZGVJbmRleCA9IG1faml0LmdyYXBoKCkubV9ibG9j
a3NbbV9ibG9ja10tPmVuZCAtIDE7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBubyBpbnRlcnZl
bmluZyBub2RlcyB3aWxsIGJlIGdlbmVyYXRlZC4KKyAgICAgICAgZm9yIChOb2RlSW5kZXggaW5k
ZXggPSBtX2NvbXBpbGVJbmRleCArIDE7IGluZGV4IDwgbGFzdE5vZGVJbmRleDsgKytpbmRleCkg
eworICAgICAgICAgICAgaWYgKGF0KGluZGV4KS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVjayBpZiB0
aGUgbGFzdE5vZGUgaXMgYSBicmFuY2ggb24gdGhpcyBub2RlLgorICAgICAgICBOb2RlJiBsYXN0
Tm9kZSA9IGF0KGxhc3ROb2RlSW5kZXgpOworICAgICAgICByZXR1cm4gbGFzdE5vZGUub3AgPT0g
QnJhbmNoICYmIGxhc3ROb2RlLmNoaWxkMSgpID09IG1fY29tcGlsZUluZGV4ID8gbGFzdE5vZGVJ
bmRleCA6IE5vTm9kZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBub25TcGVjdWxhdGl2ZVZhbHVl
VG9OdW1iZXIoTm9kZSYpOworICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIoTm9k
ZSYpOworICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVVSW50MzJUb051bWJlcihOb2RlJik7CisKKyAg
ICB2b2lkIG5vblNwZWN1bGF0aXZlS25vd25Db25zdGFudEFyaXRoT3AoTm9kZVR5cGUgb3AsIE5v
ZGVJbmRleCByZWdDaGlsZCwgTm9kZUluZGV4IGltbUNoaWxkLCBib29sIGNvbW11dGUpOworICAg
IHZvaWQgbm9uU3BlY3VsYXRpdmVCYXNpY0FyaXRoT3AoTm9kZVR5cGUgb3AsIE5vZGUmKTsKKyAg
ICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhY2hlZEdldEJ5
SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdl
dCA9IEpJVENvbXBpbGVyOjpKdW1wKCksIE5vZGVUeXBlID0gR2V0QnlJZCk7CisgICAgdm9pZCBj
YWNoZWRQdXRCeUlkKEdQUlJlZyBiYXNlLCBHUFJSZWcgdmFsdWUsIE5vZGVJbmRleCB2YWx1ZUlu
ZGV4LCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2lu
ZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgp
KTsKKyAgICB2b2lkIGNhY2hlZEdldE1ldGhvZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3Vs
dEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENv
bXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CisjZWxp
ZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhY2hlZEdldEJ5SWQo
R1BSUmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcgcmVzdWx0VGFnR1BSLCBHUFJSZWcgcmVzdWx0
UGF5bG9hZEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwg
Tm9kZVR5cGUgPSBHZXRCeUlkKTsKKyAgICB2b2lkIGNhY2hlZFB1dEJ5SWQoR1BSUmVnIGJhc2VQ
YXlsb2FkR1BSLCBHUFJSZWcgdmFsdWVUYWdHUFIsIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIsIE5v
ZGVJbmRleCB2YWx1ZUluZGV4LCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciwgUHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRD
b21waWxlcjo6SnVtcCgpKTsKKyAgICB2b2lkIGNhY2hlZEdldE1ldGhvZChHUFJSZWcgYmFzZVBh
eWxvYWRHUFIsIEdQUlJlZyByZXN1bHRUYWdHUFIsIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSLCBH
UFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6
Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpKTsKKyNlbmRpZgorCisg
ICAgdm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGwoTm9kZUluZGV4IG9w
ZXJhbmQsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOworICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVw
aG9sZUJyYW5jaE51bGwoTm9kZUluZGV4IG9wZXJhbmQsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5k
ZXgsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOworICAgIGJvb2wgbm9uU3BlY3VsYXRpdmVDb21wYXJl
TnVsbChOb2RlJiwgTm9kZUluZGV4IG9wZXJhbmQsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOworICAg
IAorICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlJiwgTm9kZUluZGV4
IGJyYW5jaE5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNf
REZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7CisgICAgdm9pZCBub25TcGVjdWxhdGl2
ZU5vblBlZXBob2xlQ29tcGFyZShOb2RlJiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25k
aXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7CisgICAgYm9vbCBub25T
cGVjdWxhdGl2ZUNvbXBhcmUoTm9kZSYsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0
aW9uLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOworICAgIAorICAgIHZvaWQg
bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKE5vZGUmLCBOb2RlSW5kZXggYnJhbmNoTm9k
ZUluZGV4LCBib29sIGludmVydCA9IGZhbHNlKTsKKyAgICB2b2lkIG5vblNwZWN1bGF0aXZlTm9u
UGVlcGhvbGVTdHJpY3RFcShOb2RlJiwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CisgICAgYm9vbCBu
b25TcGVjdWxhdGl2ZVN0cmljdEVxKE5vZGUmLCBib29sIGludmVydCA9IGZhbHNlKTsKKyAgICAK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhZGRyZXNzT2ZDYWxsRGF0YShpbnQgaWR4KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCAobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJz
ICsgaWR4KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAgIH0KKwor
I2lmIFVTRShKU1ZBTFVFMzJfNjQpICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIHRh
Z09mQ2FsbERhdGEoaW50IGlkeCkKKyAgICB7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgKG1faml0LmNvZGVCbG9jaygp
LT5tX251bUNhbGxlZVJlZ2lzdGVycyArIGlkeCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihS
ZWdpc3RlcikpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy50YWcpKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBwYXlsb2FkT2ZD
YWxsRGF0YShpbnQgaWR4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAobV9qaXQuY29kZUJsb2NrKCktPm1f
bnVtQ2FsbGVlUmVnaXN0ZXJzICsgaWR4KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpKTsKKyAgICB9CisjZW5kaWYKKworICAgIHZvaWQgZW1pdENhbGwoTm9kZSYpOworICAg
IAorICAgIC8vIENhbGxlZCBvbmNlIGEgbm9kZSBoYXMgY29tcGxldGVkIGNvZGUgZ2VuZXJhdGlv
biBidXQgcHJpb3IgdG8gc2V0dGluZworICAgIC8vIGl0cyByZXN1bHQsIHRvIGZyZWUgdXAgaXRz
IGNoaWxkcmVuLiAoVGhpcyBtdXN0IGhhcHBlbiBwcmlvciB0byBzZXR0aW5nCisgICAgLy8gdGhl
IG5vZGVzIHJlc3VsdCwgc2luY2UgdGhlIG5vZGUgbWF5IGhhdmUgdGhlIHNhbWUgVmlydHVhbFJl
Z2lzdGVyIGFzCisgICAgLy8gYSBjaGlsZCwgYW5kIGFzIHN1Y2ggd2lsbCB1c2UgdGhlIHNhbWUg
R2VuZXJhdGlvSW5mbykuCisgICAgdm9pZCB1c2VDaGlsZHJlbihOb2RlJik7CisKKyAgICAvLyBU
aGVzZSBtZXRob2QgY2FsbGVkIHRvIGluaXRpYWxpemUgdGhlIHRoZSBHZW5lcmF0aW9uSW5mbwor
ICAgIC8vIHRvIGRlc2NyaWJlIHRoZSByZXN1bHQgb2YgYW4gb3BlcmF0aW9uLgorICAgIHZvaWQg
aW50ZWdlclJlc3VsdChHUFJSZWcgcmVnLCBOb2RlSW5kZXggbm9kZUluZGV4LCBEYXRhRm9ybWF0
IGZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyLCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxV
c2VDaGlsZHJlbikKKyAgICB7CisgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwor
ICAgICAgICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4pCisgICAgICAgICAgICB1c2VDaGls
ZHJlbihub2RlKTsKKworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0g
bm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBt
X2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisKKyAgICAgICAgaWYgKGZvcm1hdCA9
PSBEYXRhRm9ybWF0SW50ZWdlcikgeworICAgICAgICAgICAgbV9qaXQuaml0QXNzZXJ0SXNJbnQz
MihyZWcpOworICAgICAgICAgICAgbV9ncHJzLnJldGFpbihyZWcsIHZpcnR1YWxSZWdpc3Rlciwg
U3BpbGxPcmRlckludGVnZXIpOworICAgICAgICAgICAgaW5mby5pbml0SW50ZWdlcihub2RlSW5k
ZXgsIG5vZGUucmVmQ291bnQoKSwgcmVnKTsKKyAgICAgICAgfSBlbHNlIHsKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgICAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlNJbnRlZ2Vy
KTsKKyAgICAgICAgICAgIG1faml0LmppdEFzc2VydElzSlNJbnQzMihyZWcpOworICAgICAgICAg
ICAgbV9ncHJzLnJldGFpbihyZWcsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckpTKTsKKyAg
ICAgICAgICAgIGluZm8uaW5pdEpTVmFsdWUobm9kZUluZGV4LCBub2RlLnJlZkNvdW50KCksIHJl
ZywgZm9ybWF0KTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgfQorICAgIHZvaWQgaW50ZWdl
clJlc3VsdChHUFJSZWcgcmVnLCBOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VDaGlsZHJlbk1vZGUg
bW9kZSkKKyAgICB7CisgICAgICAgIGludGVnZXJSZXN1bHQocmVnLCBub2RlSW5kZXgsIERhdGFG
b3JtYXRJbnRlZ2VyLCBtb2RlKTsKKyAgICB9CisgICAgdm9pZCBub1Jlc3VsdChOb2RlSW5kZXgg
bm9kZUluZGV4LCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKKyAgICB7
CisgICAgICAgIGlmIChtb2RlID09IFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CisgICAg
ICAgIHVzZUNoaWxkcmVuKG5vZGUpOworICAgIH0KKyAgICB2b2lkIGNlbGxSZXN1bHQoR1BSUmVn
IHJlZywgTm9kZUluZGV4IG5vZGVJbmRleCwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNl
Q2hpbGRyZW4pCisgICAgeworICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKKyAg
ICAgICAgaWYgKG1vZGUgPT0gQ2FsbFVzZUNoaWxkcmVuKQorICAgICAgICAgICAgdXNlQ2hpbGRy
ZW4obm9kZSk7CisKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5v
ZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIG1fZ3Bycy5yZXRhaW4ocmVnLCB2aXJ0dWFs
UmVnaXN0ZXIsIFNwaWxsT3JkZXJDZWxsKTsKKyAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8g
PSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAgIGluZm8uaW5pdENl
bGwobm9kZUluZGV4LCBub2RlLnJlZkNvdW50KCksIHJlZyk7CisgICAgfQorICAgIHZvaWQgYm9v
bGVhblJlc3VsdChHUFJSZWcgcmVnLCBOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VDaGlsZHJlbk1v
ZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKKyAgICB7CisgICAgICAgIE5vZGUmIG5vZGUgPSBh
dChub2RlSW5kZXgpOworICAgICAgICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4pCisgICAg
ICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKKworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgbV9ncHJzLnJl
dGFpbihyZWcsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckJvb2xlYW4pOworICAgICAgICBH
ZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsK
KyAgICAgICAgaW5mby5pbml0Qm9vbGVhbihub2RlSW5kZXgsIG5vZGUucmVmQ291bnQoKSwgcmVn
KTsKKyAgICB9CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICB2b2lkIGpzVmFsdWVSZXN1bHQoR1BS
UmVnIHJlZywgTm9kZUluZGV4IG5vZGVJbmRleCwgRGF0YUZvcm1hdCBmb3JtYXQgPSBEYXRhRm9y
bWF0SlMsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVuKQorICAgIHsKKyAg
ICAgICAgaWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlNJbnRlZ2VyKQorICAgICAgICAgICAgbV9q
aXQuaml0QXNzZXJ0SXNKU0ludDMyKHJlZyk7CisgICAgICAgIAorICAgICAgICBOb2RlJiBub2Rl
ID0gYXQobm9kZUluZGV4KTsKKyAgICAgICAgaWYgKG1vZGUgPT0gQ2FsbFVzZUNoaWxkcmVuKQor
ICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7CisKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIG1fZ3By
cy5yZXRhaW4ocmVnLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7CisgICAgICAgIEdl
bmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwor
ICAgICAgICBpbmZvLmluaXRKU1ZhbHVlKG5vZGVJbmRleCwgbm9kZS5yZWZDb3VudCgpLCByZWcs
IGZvcm1hdCk7CisgICAgfQorICAgIHZvaWQganNWYWx1ZVJlc3VsdChHUFJSZWcgcmVnLCBOb2Rl
SW5kZXggbm9kZUluZGV4LCBVc2VDaGlsZHJlbk1vZGUgbW9kZSkKKyAgICB7CisgICAgICAgIGpz
VmFsdWVSZXN1bHQocmVnLCBub2RlSW5kZXgsIERhdGFGb3JtYXRKUywgbW9kZSk7CisgICAgfQor
I2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICB2b2lkIGpzVmFsdWVSZXN1bHQoR1BSUmVnIHRh
ZywgR1BSUmVnIHBheWxvYWQsIE5vZGVJbmRleCBub2RlSW5kZXgsIERhdGFGb3JtYXQgZm9ybWF0
ID0gRGF0YUZvcm1hdEpTLCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikK
KyAgICB7CisgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOworICAgICAgICBpZiAo
bW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4pCisgICAgICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsK
KworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFs
UmVnaXN0ZXIoKTsKKyAgICAgICAgbV9ncHJzLnJldGFpbih0YWcsIHZpcnR1YWxSZWdpc3Rlciwg
U3BpbGxPcmRlckpTKTsKKyAgICAgICAgbV9ncHJzLnJldGFpbihwYXlsb2FkLCB2aXJ0dWFsUmVn
aXN0ZXIsIFNwaWxsT3JkZXJKUyk7CisgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9n
ZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgICAgICBpbmZvLmluaXRKU1ZhbHVl
KG5vZGVJbmRleCwgbm9kZS5yZWZDb3VudCgpLCB0YWcsIHBheWxvYWQsIGZvcm1hdCk7CisgICAg
fQorICAgIHZvaWQganNWYWx1ZVJlc3VsdChHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9hZCwgTm9k
ZUluZGV4IG5vZGVJbmRleCwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUpCisgICAgeworICAgICAgICBq
c1ZhbHVlUmVzdWx0KHRhZywgcGF5bG9hZCwgbm9kZUluZGV4LCBEYXRhRm9ybWF0SlMsIG1vZGUp
OworICAgIH0KKyNlbmRpZgorICAgIHZvaWQgc3RvcmFnZVJlc3VsdChHUFJSZWcgcmVnLCBOb2Rl
SW5kZXggbm9kZUluZGV4LCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikK
KyAgICB7CisgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOworICAgICAgICBpZiAo
bW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4pCisgICAgICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsK
KyAgICAgICAgCisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2Rl
LnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBtX2dwcnMucmV0YWluKHJlZywgdmlydHVhbFJl
Z2lzdGVyLCBTcGlsbE9yZGVyU3RvcmFnZSk7CisgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZv
ID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgICAgICBpbmZvLmluaXRT
dG9yYWdlKG5vZGVJbmRleCwgbm9kZS5yZWZDb3VudCgpLCByZWcpOworICAgIH0KKyAgICB2b2lk
IGRvdWJsZVJlc3VsdChGUFJSZWcgcmVnLCBOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VDaGlsZHJl
bk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKKyAgICB7CisgICAgICAgIE5vZGUmIG5vZGUg
PSBhdChub2RlSW5kZXgpOworICAgICAgICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4pCisg
ICAgICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKKworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgbV9mcHJz
LnJldGFpbihyZWcsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7CisgICAgICAg
IEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJd
OworICAgICAgICBpbmZvLmluaXREb3VibGUobm9kZUluZGV4LCBub2RlLnJlZkNvdW50KCksIHJl
Zyk7CisgICAgfQorICAgIHZvaWQgaW5pdENvbnN0YW50SW5mbyhOb2RlSW5kZXggbm9kZUluZGV4
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpIHx8IGlz
TnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSB8fCBpc0pTQ29uc3RhbnQobm9kZUluZGV4KSk7Cisg
ICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOworICAgICAgICBtX2dlbmVyYXRpb25J
bmZvW25vZGUudmlydHVhbFJlZ2lzdGVyKCldLmluaXRDb25zdGFudChub2RlSW5kZXgsIG5vZGUu
cmVmQ291bnQoKSk7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyB1c2VkIHRvIHNvcnQg
YXJndW1lbnRzIGludG8gdGhlIGNvcnJlY3QgcmVnaXN0ZXJzLgorICAgIC8vIE9uIFg4NiB3ZSB1
c2UgY2RlY2wgY2FsbGluZyBjb252ZW50aW9ucywgd2hpY2ggcGFzcyBhbGwgYXJndW1lbnRzIG9u
IHRoZQorICAgIC8vIHN0YWNrLiBPbiBvdGhlciBhcmNoaXRlY3R1cmVzIHdlIG1heSBuZWVkIHRv
IHNvcnQgdmFsdWVzIGludG8gdGhlCisgICAgLy8gY29ycmVjdCByZWdpc3RlcnMuCisjaWYgIU5V
TUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMKKyAgICB1bnNpZ25lZCBtX2NhbGxBcmd1bWVudElu
ZGV4OworICAgIHZvaWQgcmVzZXRDYWxsQXJndW1lbnRzKCkgeyBtX2NhbGxBcmd1bWVudEluZGV4
ID0gMDsgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgdXNpbmcgaW50ZXJuYWxseSB0byBp
bXBsZW1lbnQgdGhlIGNhbGxPcGVyYXRpb24gbWV0aG9kcy4KKyAgICB2b2lkIGFkZENhbGxBcmd1
bWVudChHUFJSZWcgdmFsdWUpCisgICAgeworICAgICAgICBtX2ppdC5wb2tlKHZhbHVlLCBtX2Nh
bGxBcmd1bWVudEluZGV4KyspOworICAgIH0KKyAgICB2b2lkIGFkZENhbGxBcmd1bWVudChUcnVz
dGVkSW1tMzIgaW1tKQorICAgIHsKKyAgICAgICAgbV9qaXQucG9rZShpbW0sIG1fY2FsbEFyZ3Vt
ZW50SW5kZXgrKyk7CisgICAgfQorICAgIHZvaWQgYWRkQ2FsbEFyZ3VtZW50KFRydXN0ZWRJbW1Q
dHIgcG9pbnRlcikKKyAgICB7CisgICAgICAgIG1faml0LnBva2UocG9pbnRlciwgbV9jYWxsQXJn
dW1lbnRJbmRleCsrKTsKKyAgICB9CisgICAgdm9pZCBhZGRDYWxsQXJndW1lbnQoRlBSUmVnIHZh
bHVlKQorICAgIHsKKyAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUodmFsdWUsIEpJVENvbXBpbGVy
OjpBZGRyZXNzKEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9jYWxsQXJndW1l
bnRJbmRleCAqIHNpemVvZih2b2lkKikpKTsKKyAgICAgICAgbV9jYWxsQXJndW1lbnRJbmRleCAr
PSBzaXplb2YoZG91YmxlKSAvIHNpemVvZih2b2lkKik7CisgICAgfQorCisgICAgQUxXQVlTX0lO
TElORSB2b2lkIHNldHVwQXJndW1lbnRzKEZQUlJlZyBhcmcxKQorICAgIHsKKyAgICAgICAgcmVz
ZXRDYWxsQXJndW1lbnRzKCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsKKyAgICB9
CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHMoRlBSUmVnIGFyZzEsIEZQ
UlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CisgICAgICAg
IGFkZENhbGxBcmd1bWVudChhcmcxKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzIpOwor
ICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgp
CisgICAgeworICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKKyAgICAgICAgYWRkQ2FsbEFy
Z3VtZW50KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxKQorICAg
IHsKKyAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVu
dChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChh
cmcxKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIgYXJnMSkKKyAgICB7CisgICAgICAgIHJlc2V0Q2FsbEFy
Z3VtZW50cygpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7CisgICAgfQorCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKKyAgICAg
ICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAg
YWRkQ2FsbEFyZ3VtZW50KGFyZzEpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMik7Cisg
ICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShHUFJSZWcgYXJnMSwgVHJ1c3RlZEltbVB0ciBhcmcyKQorICAgIHsKKyAgICAgICAgcmVzZXRD
YWxsQXJndW1lbnRzKCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3Rlcik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsKKyAgICAgICAgYWRk
Q2FsbEFyZ3VtZW50KGFyZzIpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFyZzEsIFRydXN0ZWRJbW0zMiBh
cmcyKQorICAgIHsKKyAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CisgICAgICAgIGFkZENh
bGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGFkZENhbGxB
cmd1bWVudChhcmcxKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzIpOworICAgIH0KKwor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3Rl
ZEltbVB0ciBhcmcxLCBUcnVzdGVkSW1tUHRyIGFyZzIpCisgICAgeworICAgICAgICByZXNldENh
bGxBcmd1bWVudHMoKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzEpOworICAgICAgICBhZGRD
YWxsQXJndW1lbnQoYXJnMik7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBh
cmczKQorICAgIHsKKyAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CisgICAgICAgIGFkZENh
bGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGFkZENhbGxB
cmd1bWVudChhcmcxKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzIpOworICAgICAgICBh
ZGRDYWxsQXJndW1lbnQoYXJnMyk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIFRydXN0
ZWRJbW1QdHIgYXJnMykKKyAgICB7CisgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOworICAg
ICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAg
ICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsK
KyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBh
cmcyLCBHUFJSZWcgYXJnMywgR1BSUmVnIGFyZzQpCisgICAgeworICAgICAgICByZXNldENhbGxB
cmd1bWVudHMoKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzEpOworICAgICAgICBhZGRDYWxs
QXJndW1lbnQoYXJnMik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmczKTsKKyAgICAgICAg
YWRkQ2FsbEFyZ3VtZW50KGFyZzQpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBz
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJS
ZWcgYXJnMywgVHJ1c3RlZEltbVB0ciBhcmc0KQorICAgIHsKKyAgICAgICAgcmVzZXRDYWxsQXJn
dW1lbnRzKCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3Rlcik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsKKyAgICAgICAgYWRkQ2FsbEFy
Z3VtZW50KGFyZzIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMyk7CisgICAgICAgIGFk
ZENhbGxBcmd1bWVudChhcmc0KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3Rl
ZEltbTMyIGFyZzMsIFRydXN0ZWRJbW0zMiBhcmc0KQorICAgIHsKKyAgICAgICAgcmVzZXRDYWxs
QXJndW1lbnRzKCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3Rlcik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsKKyAgICAgICAgYWRkQ2Fs
bEFyZ3VtZW50KGFyZzIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMyk7CisgICAgICAg
IGFkZENhbGxBcmd1bWVudChhcmc0KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMiBhcmcxLCBUcnVzdGVkSW1t
MzIgYXJnMiwgR1BSUmVnIGFyZzMsIEdQUlJlZyBhcmc0KQorICAgIHsKKyAgICAgICAgcmVzZXRD
YWxsQXJndW1lbnRzKCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3Rlcik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsKKyAgICAgICAgYWRk
Q2FsbEFyZ3VtZW50KGFyZzIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMyk7CisgICAg
ICAgIGFkZENhbGxBcmd1bWVudChhcmc0KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwg
R1BSUmVnIGFyZzMsIEdQUlJlZyBhcmc0LCBHUFJSZWcgYXJnNSkKKyAgICB7CisgICAgICAgIHJl
c2V0Q2FsbEFyZ3VtZW50cygpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7CisgICAgICAg
IGFkZENhbGxBcmd1bWVudChhcmcyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMpOwor
ICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnNCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChh
cmc1KTsKKyAgICB9CisjZW5kaWYgLy8gIU5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMKKyAg
ICAvLyBUaGVzZSBtZXRob2RzIGFyZSBzdWl0YWJsZSBmb3IgYW55IGNhbGxpbmcgY29udmVudGlv
biB0aGF0IHByb3ZpZGVzIGZvcgorICAgIC8vIGF0IGxlYXN0IDQgYXJndW1lbnQgcmVnaXN0ZXJz
LCBlLmcuIFg4Nl82NCwgQVJNdjcuCisjaWYgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyA+
PSA0CisgICAgdGVtcGxhdGU8R1BSUmVnIGRlc3RBLCBHUFJSZWcgZGVzdEI+CisgICAgdm9pZCBz
ZXR1cFR3b1N0dWJBcmdzKEdQUlJlZyBzcmNBLCBHUFJSZWcgc3JjQikKKyAgICB7CisgICAgICAg
IC8vIEFzc3VtaW5nIHRoYXQgc3JjQSAhPSBzcmNCLCB0aGVyZSBhcmUgNyBpbnRlcmVzdGluZyBz
dGF0ZXMgdGhlIHJlZ2lzdGVycyBtYXkgYmUgaW46CisgICAgICAgIC8vICgxKSBib3RoIGFyZSBh
bHJlYWR5IGluIGFyZyByZWdzLCB0aGUgcmlnaHQgd2F5IGFyb3VuZC4KKyAgICAgICAgLy8gKDIp
IGJvdGggYXJlIGFscmVhZHkgaW4gYXJnIHJlZ3MsIHRoZSB3cm9uZyB3YXkgYXJvdW5kLgorICAg
ICAgICAvLyAoMykgbmVpdGhlciBhcmUgY3VycmVudGx5IGluIGFyZyByZWdpc3RlcnMuCisgICAg
ICAgIC8vICg0KSBzcmNBIGluIGluIGl0cyBjb3JyZWN0IHJlZy4KKyAgICAgICAgLy8gKDUpIHNy
Y0EgaW4gaW4gdGhlIGluY29ycmVjdCByZWcuCisgICAgICAgIC8vICg2KSBzcmNCIGluIGluIGl0
cyBjb3JyZWN0IHJlZy4KKyAgICAgICAgLy8gKDcpIHNyY0IgaW4gaW4gdGhlIGluY29ycmVjdCBy
ZWcuCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSB0cml2aWFsIGFwcHJvYWNoIGlzIHRvIHNp
bXBseSBlbWl0IHR3byBtb3ZlcywgdG8gcHV0IHNyY0EgaW4gcGxhY2UgdGhlbiBzcmNCIGluCisg
ICAgICAgIC8vIHBsYWNlICh0aGUgTWFjcm9Bc3NlbWJsZXIgd2lsbCBvbWl0IHJlZHVuZGFudCBt
b3ZlcykuIFRoaXMgYXBwb3JhY2ggd2lsbCBiZSBzYWZlIGluCisgICAgICAgIC8vIGNhc2VzIDEs
IDMsIDQsIDUsIDYsIGFuZCBpbiBjYXNlcyB3aGVyZSBzcmNBPT1zcmNCLiBUaGUgdHdvIHByb2Js
ZW0gY2FzZXMgYXJlIDIKKyAgICAgICAgLy8gKHJlcXVpcmVzIGEgc3dhcCkgYW5kIDcgKG11c3Qg
bW92ZSBzcmNCIGZpcnN0LCB0byBhdm9pZCB0cmFtcGxpbmcuKQorCisgICAgICAgIGlmIChzcmNC
ICE9IGRlc3RBKSB7CisgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGVhc3kgY2FzZXMgLSB0d28g
c2ltcGxlIG1vdmVzLgorICAgICAgICAgICAgbV9qaXQubW92ZShzcmNBLCBkZXN0QSk7CisgICAg
ICAgICAgICBtX2ppdC5tb3ZlKHNyY0IsIGRlc3RCKTsKKyAgICAgICAgfSBlbHNlIGlmIChzcmNB
ICE9IGRlc3RCKSB7CisgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIG5vbi1zd2FwIGNhc2UgLSBq
dXN0IHB1dCBzcmNCIGluIHBsYWNlIGZpcnN0LgorICAgICAgICAgICAgbV9qaXQubW92ZShzcmNC
LCBkZXN0Qik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKHNyY0EsIGRlc3RBKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBtX2ppdC5zd2FwKGRlc3RBLCBkZXN0Qik7CisgICAgfQorI2lm
IENQVShYODZfNjQpCisgICAgdGVtcGxhdGU8RlBSUmVnIGRlc3RBLCBGUFJSZWcgZGVzdEI+Cisg
ICAgdm9pZCBzZXR1cFR3b1N0dWJBcmdzKEZQUlJlZyBzcmNBLCBGUFJSZWcgc3JjQikKKyAgICB7
CisgICAgICAgIC8vIEFzc3VtaW5nIHRoYXQgc3JjQSAhPSBzcmNCLCB0aGVyZSBhcmUgNyBpbnRl
cmVzdGluZyBzdGF0ZXMgdGhlIHJlZ2lzdGVycyBtYXkgYmUgaW46CisgICAgICAgIC8vICgxKSBi
b3RoIGFyZSBhbHJlYWR5IGluIGFyZyByZWdzLCB0aGUgcmlnaHQgd2F5IGFyb3VuZC4KKyAgICAg
ICAgLy8gKDIpIGJvdGggYXJlIGFscmVhZHkgaW4gYXJnIHJlZ3MsIHRoZSB3cm9uZyB3YXkgYXJv
dW5kLgorICAgICAgICAvLyAoMykgbmVpdGhlciBhcmUgY3VycmVudGx5IGluIGFyZyByZWdpc3Rl
cnMuCisgICAgICAgIC8vICg0KSBzcmNBIGluIGluIGl0cyBjb3JyZWN0IHJlZy4KKyAgICAgICAg
Ly8gKDUpIHNyY0EgaW4gaW4gdGhlIGluY29ycmVjdCByZWcuCisgICAgICAgIC8vICg2KSBzcmNC
IGluIGluIGl0cyBjb3JyZWN0IHJlZy4KKyAgICAgICAgLy8gKDcpIHNyY0IgaW4gaW4gdGhlIGlu
Y29ycmVjdCByZWcuCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSB0cml2aWFsIGFwcHJvYWNo
IGlzIHRvIHNpbXBseSBlbWl0IHR3byBtb3ZlcywgdG8gcHV0IHNyY0EgaW4gcGxhY2UgdGhlbiBz
cmNCIGluCisgICAgICAgIC8vIHBsYWNlICh0aGUgTWFjcm9Bc3NlbWJsZXIgd2lsbCBvbWl0IHJl
ZHVuZGFudCBtb3ZlcykuIFRoaXMgYXBwb3JhY2ggd2lsbCBiZSBzYWZlIGluCisgICAgICAgIC8v
IGNhc2VzIDEsIDMsIDQsIDUsIDYsIGFuZCBpbiBjYXNlcyB3aGVyZSBzcmNBPT1zcmNCLiBUaGUg
dHdvIHByb2JsZW0gY2FzZXMgYXJlIDIKKyAgICAgICAgLy8gKHJlcXVpcmVzIGEgc3dhcCkgYW5k
IDcgKG11c3QgbW92ZSBzcmNCIGZpcnN0LCB0byBhdm9pZCB0cmFtcGxpbmcuKQorCisgICAgICAg
IGlmIChzcmNCICE9IGRlc3RBKSB7CisgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGVhc3kgY2Fz
ZXMgLSB0d28gc2ltcGxlIG1vdmVzLgorICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShzcmNB
LCBkZXN0QSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKHNyY0IsIGRlc3RCKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHNyY0Eg
IT0gZGVzdEIpIHsKKyAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgbm9uLXN3YXAgY2FzZSAtIGp1
c3QgcHV0IHNyY0IgaW4gcGxhY2UgZmlyc3QuCisgICAgICAgICAgICBtX2ppdC5tb3ZlRG91Ymxl
KHNyY0IsIGRlc3RCKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoc3JjQSwgZGVzdEEp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKHNyY0Ig
PT0gZGVzdEEgJiYgc3JjQSA9PSBkZXN0Qik7CisgICAgICAgIC8vIE5lZWQgdG8gc3dhcDsgcGlj
ayBhIHRlbXBvcmFyeSByZWdpc3Rlci4KKyAgICAgICAgRlBSUmVnIHRlbXA7CisgICAgICAgIGlm
IChkZXN0QSAhPSBGUFJJbmZvOjphcmd1bWVudEZQUjMgJiYgZGVzdEEgIT0gRlBSSW5mbzo6YXJn
dW1lbnRGUFIzKQorICAgICAgICAgICAgdGVtcCA9IEZQUkluZm86OmFyZ3VtZW50RlBSMzsKKyAg
ICAgICAgZWxzZSBpZiAoZGVzdEEgIT0gRlBSSW5mbzo6YXJndW1lbnRGUFIyICYmIGRlc3RBICE9
IEZQUkluZm86OmFyZ3VtZW50RlBSMikKKyAgICAgICAgICAgIHRlbXAgPSBGUFJJbmZvOjphcmd1
bWVudEZQUjI7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGRlc3RBICE9IEZQ
UkluZm86OmFyZ3VtZW50RlBSMSAmJiBkZXN0QSAhPSBGUFJJbmZvOjphcmd1bWVudEZQUjEpOwor
ICAgICAgICAgICAgdGVtcCA9IEZQUkluZm86OmFyZ3VtZW50RlBSMTsKKyAgICAgICAgfQorICAg
ICAgICBtX2ppdC5tb3ZlRG91YmxlKGRlc3RBLCB0ZW1wKTsKKyAgICAgICAgbV9qaXQubW92ZURv
dWJsZShkZXN0QiwgZGVzdEEpOworICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKHRlbXAsIGRlc3RC
KTsKKyAgICB9CisjZW5kaWYKKyAgICB2b2lkIHNldHVwU3R1YkFyZ3VtZW50cyhHUFJSZWcgYXJn
MSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBzZXR1cFR3b1N0dWJBcmdzPEdQUkluZm86
OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyPihhcmcxLCBhcmcyKTsKKyAgICB9
CisgICAgdm9pZCBzZXR1cFN0dWJBcmd1bWVudHMoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBH
UFJSZWcgYXJnMykKKyAgICB7CisgICAgICAgIC8vIElmIG5laXRoZXIgb2YgYXJnMi9hcmczIGFy
ZSBpbiBvdXIgd2F5LCB0aGVuIHdlIGNhbiBtb3ZlIGFyZzEgaW50byBwbGFjZS4KKyAgICAgICAg
Ly8gVGhlbiB3ZSBjYW4gdXNlIHNldHVwVHdvU3R1YkFyZ3MgdG8gZml4IGFyZzIvYXJnMy4KKyAg
ICAgICAgaWYgKGFyZzIgIT0gR1BSSW5mbzo6YXJndW1lbnRHUFIxICYmIGFyZzMgIT0gR1BSSW5m
bzo6YXJndW1lbnRHUFIxKSB7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKGFyZzEsIEdQUkluZm86
OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBzZXR1cFR3b1N0dWJBcmdzPEdQUkluZm86OmFy
Z3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIzPihhcmcyLCBhcmczKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIG5laXRoZXIgb2YgYXJnMS9h
cmczIGFyZSBpbiBvdXIgd2F5LCB0aGVuIHdlIGNhbiBtb3ZlIGFyZzIgaW50byBwbGFjZS4KKyAg
ICAgICAgLy8gVGhlbiB3ZSBjYW4gdXNlIHNldHVwVHdvU3R1YkFyZ3MgdG8gZml4IGFyZzEvYXJn
My4KKyAgICAgICAgaWYgKGFyZzEgIT0gR1BSSW5mbzo6YXJndW1lbnRHUFIyICYmIGFyZzMgIT0g
R1BSSW5mbzo6YXJndW1lbnRHUFIyKSB7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKGFyZzIsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgICAgICAgICBzZXR1cFR3b1N0dWJBcmdzPEdQUklu
Zm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzPihhcmcxLCBhcmczKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIG5laXRoZXIgb2Yg
YXJnMS9hcmcyIGFyZSBpbiBvdXIgd2F5LCB0aGVuIHdlIGNhbiBtb3ZlIGFyZzMgaW50byBwbGFj
ZS4KKyAgICAgICAgLy8gVGhlbiB3ZSBjYW4gdXNlIHNldHVwVHdvU3R1YkFyZ3MgdG8gZml4IGFy
ZzEvYXJnMi4KKyAgICAgICAgaWYgKGFyZzEgIT0gR1BSSW5mbzo6YXJndW1lbnRHUFIzICYmIGFy
ZzIgIT0gR1BSSW5mbzo6YXJndW1lbnRHUFIzKSB7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKGFy
ZzMsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgICAgICAgICBzZXR1cFR3b1N0dWJBcmdz
PEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyPihhcmcxLCBhcmcy
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHdlIGdl
dCBoZXJlLCB3ZSBoYXZlbid0IGJlZW4gYWJsZSB0byBtb3ZlIGFueSBvZiBhcmcxL2FyZzIvYXJn
My4KKyAgICAgICAgLy8gU2luY2UgYWxsIHRocmVlIGFyZSBibG9ja2VkLCB0aGVuIGFsbCB0aHJl
ZSBtdXN0IGFscmVhZHkgYmUgaW4gdGhlIGFyZ3VtZW50IHJlZ2lzdGVyLgorICAgICAgICAvLyBC
dXQgYXJlIHRoZXkgaW4gdGhlIHJpZ2h0IG9uZXM/CisKKyAgICAgICAgLy8gRmlyc3QsIGVuc3Vy
ZSBhcmcxIGlzIGluIHBsYWNlLgorICAgICAgICBpZiAoYXJnMSAhPSBHUFJJbmZvOjphcmd1bWVu
dEdQUjEpIHsKKyAgICAgICAgICAgIG1faml0LnN3YXAoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIxKTsKKworICAgICAgICAgICAgLy8gSWYgYXJnMSB3YXNuJ3QgaW4gYXJndW1lbnRHUFIxLCBv
bmUgb2YgYXJnMi9hcmczIG11c3QgYmUuCisgICAgICAgICAgICBBU1NFUlQoYXJnMiA9PSBHUFJJ
bmZvOjphcmd1bWVudEdQUjEgfHwgYXJnMyA9PSBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAg
ICAgICAgICAgLy8gSWYgYXJnMiB3YXMgaW4gYXJndW1lbnRHUFIxIGl0IG5vIGxvbmdlciBpcyAo
ZHVlIHRvIHRoZSBzd2FwKS4KKyAgICAgICAgICAgIC8vIE90aGVyd2lzZSBhcmczIG11c3QgaGF2
ZSBiZWVuLiBNYXJrIGhpbSBhcyBtb3ZlZC4KKyAgICAgICAgICAgIGlmIChhcmcyID09IEdQUklu
Zm86OmFyZ3VtZW50R1BSMSkKKyAgICAgICAgICAgICAgICBhcmcyID0gYXJnMTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmczID0gYXJnMTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIEVpdGhlciBhcmcyICYgYXJnMyBuZWVkIHN3YXBwaW5nLCBvciB3ZSdyZSBhbGwgZG9u
ZS4KKyAgICAgICAgQVNTRVJUKChhcmcyID09IEdQUkluZm86OmFyZ3VtZW50R1BSMiB8fCBhcmcz
ID09IEdQUkluZm86OmFyZ3VtZW50R1BSMykKKyAgICAgICAgICAgIHx8IChhcmcyID09IEdQUklu
Zm86OmFyZ3VtZW50R1BSMyB8fCBhcmczID09IEdQUkluZm86OmFyZ3VtZW50R1BSMikpOworCisg
ICAgICAgIGlmIChhcmcyICE9IEdQUkluZm86OmFyZ3VtZW50R1BSMikKKyAgICAgICAgICAgIG1f
aml0LnN3YXAoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjMpOwor
ICAgIH0KKworI2lmIENQVShYODZfNjQpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJn
dW1lbnRzKEZQUlJlZyBhcmcxKQorICAgIHsKKyAgICAgICAgbV9qaXQubW92ZURvdWJsZShhcmcx
LCBGUFJJbmZvOjphcmd1bWVudEZQUjApOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBzZXR1cEFyZ3VtZW50cyhGUFJSZWcgYXJnMSwgRlBSUmVnIGFyZzIpCisgICAgeworICAgICAg
ICBzZXR1cFR3b1N0dWJBcmdzPEZQUkluZm86OmFyZ3VtZW50RlBSMCwgRlBSSW5mbzo6YXJndW1l
bnRGUFIxPihhcmcxLCBhcmcyKTsKKyAgICB9CisjZWxzZQorICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBzZXR1cEFyZ3VtZW50cyhGUFJSZWcgYXJnMSkKKyAgICB7CisgICAgICAgIG1faml0LmFzc2Vt
YmxlcigpLnZtb3YoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEs
IGFyZzEpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50cyhG
UFJSZWcgYXJnMSwgRlBSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5hc3NlbWJsZXIo
KS52bW92KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBhcmcx
KTsKKyAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkudm1vdihHUFJJbmZvOjphcmd1bWVudEdQUjIs
IEdQUkluZm86OmFyZ3VtZW50R1BSMywgYXJnMik7CisgICAgfQorI2VuZGlmCisKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKQorICAgIHsKKyAgICAgICAg
bV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKEdQUlJlZyBhcmcxKQorICAgIHsKKyAgICAgICAgbV9qaXQubW92ZShhcmcxLCBH
UFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIH0KKworICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0ciBh
cmcxKQorICAgIHsKKyAgICAgICAgbV9qaXQubW92ZShhcmcxLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsK
KyAgICAgICAgc2V0dXBTdHViQXJndW1lbnRzKGFyZzEsIGFyZzIpOworICAgICAgICBtX2ppdC5t
b3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwor
ICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoR1BSUmVnIGFyZzEsIFRydXN0ZWRJbW1QdHIgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0
Lm1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbV9qaXQubW92ZShh
cmcyLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIH0KKworICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZElt
bVB0ciBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0Lm1vdmUoYXJnMiwg
R1BSSW5mbzo6YXJndW1lbnRHUFIyKTsgLy8gTW92ZSB0aGlzIGZpcnN0LCBzbyBzZXR0aW5nIGFy
ZzEgZG9lcyBub3QgdHJhbXBsZSEKKyAgICAgICAgbV9qaXQubW92ZShhcmcxLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFyZzEsIFRydXN0
ZWRJbW0zMiBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQubW92ZShhcmcxLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpOworICAgICAgICBtX2ppdC5tb3ZlKGFyZzIsIEdQUkluZm86OmFyZ3VtZW50
R1BSMik7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyIGFyZzEsIFRydXN0ZWRJbW1Q
dHIgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0Lm1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKTsKKyAgICAgICAgbV9qaXQubW92ZShhcmcyLCBHUFJJbmZvOjphcmd1bWVudEdQUjIp
OworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJn
MykKKyAgICB7CisgICAgICAgIHNldHVwU3R1YkFyZ3VtZW50cyhhcmcxLCBhcmcyLCBhcmczKTsK
KyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3RlZEltbTMy
IGFyZzMpCisgICAgeworICAgICAgICBzZXR1cFN0dWJBcmd1bWVudHMoYXJnMSwgYXJnMik7Cisg
ICAgICAgIG1faml0Lm1vdmUoYXJnMywgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICAgICAg
bV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3RlZEltbVB0ciBhcmczKQor
ICAgIHsKKyAgICAgICAgc2V0dXBTdHViQXJndW1lbnRzKGFyZzEsIGFyZzIpOworICAgICAgICBt
X2ppdC5tb3ZlKGFyZzMsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgICAgIG1faml0Lm1v
dmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Cisg
ICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShUcnVzdGVkSW1tMzIgYXJnMSwgVHJ1c3RlZEltbTMyIGFyZzIsIEdQUlJlZyBhcmczKQorICAg
IHsKKyAgICAgICAgbV9qaXQubW92ZShhcmcxLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAg
ICAgICBtX2ppdC5tb3ZlKGFyZzIsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgICAgIG1f
aml0Lm1vdmUoYXJnMywgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICAgICAgbV9qaXQubW92
ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAg
ICB9CisKKyNlbmRpZiAvLyBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTID49IDQKKyAgICAv
LyBUaGVzZSBtZXRob2RzIGFyZSBzdWl0YWJsZSBmb3IgYW55IGNhbGxpbmcgY29udmVudGlvbiB0
aGF0IHByb3ZpZGVzIGZvcgorICAgIC8vIGV4YWN0bHkgNCBhcmd1bWVudCByZWdpc3RlcnMsIGUu
Zy4gQVJNdjcuCisjaWYgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyA9PSA0CisgICAgQUxX
QVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczLCBHUFJSZWcgYXJnNCkKKyAgICB7CisgICAgICAgIG1f
aml0LnBva2UoYXJnNCk7CisgICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcx
LCBhcmcyLCBhcmczKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3RlZEltbTMy
IGFyZzMsIFRydXN0ZWRJbW0zMiBhcmc0KQorICAgIHsKKyAgICAgICAgbV9qaXQucG9rZShhcmc0
KTsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMp
OworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoVHJ1c3RlZEltbTMyIGFyZzEsIFRydXN0ZWRJbW0zMiBhcmcyLCBHUFJSZWcgYXJnMywg
R1BSUmVnIGFyZzQpCisgICAgeworICAgICAgICBtX2ppdC5wb2tlKGFyZzQpOworICAgICAgICBz
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CisgICAgfQorCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczLCBUcnVzdGVkSW1tUHRyIGFyZzQpCisgICAg
eworICAgICAgICBtX2ppdC5wb2tlKGFyZzQpOworICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2
b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIs
IEdQUlJlZyBhcmczLCBHUFJSZWcgYXJnNCwgR1BSUmVnIGFyZzUpCisgICAgeworICAgICAgICBt
X2ppdC5wb2tlKGFyZzUsIDEpOworICAgICAgICBtX2ppdC5wb2tlKGFyZzQpOworICAgICAgICBz
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CisgICAgfQorI2Vu
ZGlmIC8vIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgPT0gNAorCisgICAgLy8gVGhlc2Ug
bWV0aG9kcyBhZGQgY2FsbHMgdG8gQysrIGhlbHBlciBmdW5jdGlvbnMuCisgICAgLy8gVGhlc2Ug
bWV0aG9kcyBhcmUgYnJvYWRseSB2YWx1ZSByZXByZXNlbnRhdGlvbiBzcGVjaWZpYyAoaS5lLgor
ICAgIC8vIGRlYWwgd2l0aCB0aGUgZmFjdCB0aGF0IGEgSlNWYWx1ZSBtYXkgYmUgcGFzc2VkIGlu
IG9uZSBvciB0d28KKyAgICAvLyBtYWNoaW5lIHJlZ2lzdGVycywgYW5kIGRlbGVnYXRlIHRoZSBj
YWxsaW5nIGNvbnZlbnRpb24gc3BlY2lmaWMKKyAgICAvLyBkZWNpc2lvbiBhcyB0byBob3cgdG8g
ZmlsbCB0aGUgcmVnc2l0ZXJzIHRvIHNldHVwQXJndW1lbnRzKiBtZXRob2RzLgorI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIHZvaWQqIHBvaW50ZXIpCisgICAgewor
ICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihwb2ludGVy
KSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihaX0RGR09wZXJhdGlvbl9EIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgRlBSUmVn
IGFyZzEpCisgICAgeworICAgICAgICBzZXR1cEFyZ3VtZW50cyhhcmcxKTsKKyAgICAgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbCA9IG1faml0LmFwcGVuZENhbGwob3BlcmF0aW9uKTsKKyAgICAg
ICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3Vs
dCk7CisgICAgICAgIHJldHVybiBjYWxsOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VHSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBhcmcxLCBJZGVudGlmaWVyKiBpZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllcikp
OworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9ERkdPcGVyYXRpb25fRUkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBJZGVudGlm
aWVyKiBpZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllcikpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUEgb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICB7CisgICAgICAgIHNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQUyBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQorICAgIHsK
KyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIocG9pbnRl
ciksIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVNTIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgaW50IHN0YXJ0Q29uc3RhbnQsIGludCBudW1Db25zdGFudHMpCisg
ICAgeworICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoSW1tMzIoc3RhcnRDb25z
dGFudCksIEltbTMyKG51bUNvbnN0YW50cykpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVBQIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIHZvaWQqIHBvaW50ZXIpCisgICAgewor
ICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihw
b2ludGVyKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0kgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBHUFJSZWcgYXJnMSwgSWRlbnRpZmllciogaWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIHNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGlkZW50aWZpZXIp
KTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQo
b3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJl
ZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgeworICAgICAgICBzZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYXJnMSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCkKKyAgICB7CisgICAgICAgIHNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CisgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihD
X0RGR09wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQor
ICAgIHsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOworICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19E
RkdPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEpT
Q2VsbCogY2VsbCkKKyAgICB7CisgICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShh
cmcxLCBUcnVzdGVkSW1tUHRyKGNlbGwpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZHT3BlcmF0aW9uX0VKIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgeworICAgICAgICBzZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAg
ICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJh
dGlvbl9FUFAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFy
ZzIpCisgICAgeworICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJn
Mik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgYXJnMSwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyIGltbSkKKyAgICB7CisgICAgICAgIHNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKHN0YXRp
Y19jYXN0PGNvbnN0IHZvaWQqPihKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoaW1tLm1fdmFsdWUp
KSkpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIE1h
Y3JvQXNzZW1ibGVyOjpJbW0zMiBpbW0sIEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoc3RhdGljX2Nh
c3Q8Y29uc3Qgdm9pZCo+KEpTVmFsdWU6OmVuY29kZShqc051bWJlcihpbW0ubV92YWx1ZSkpKSks
IGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUNKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpQUCBvcGVyYXRp
b24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKKyAgICB7CisgICAg
ICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1tUHRy
KHBvaW50ZXIpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uKTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihW
X0RGR09wZXJhdGlvbl9FSkNJIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBJ
ZGVudGlmaWVyKiBpZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGFyZzEsIGFyZzIsIFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllcikpOworICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworICAgIH0K
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VKSkog
b3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQorICAgIHsK
KyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwor
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwor
ICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9u
X0VQWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQor
ICAgIHsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFy
ZzMpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRp
b24pOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3Bl
cmF0aW9uX0VBWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBh
cmczKQorICAgIHsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFy
ZzIsIGFyZzMpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhv
cGVyYXRpb24pOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZf
REZHT3BlcmF0aW9uX0VDSkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQ
UlJlZyBhcmczKQorICAgIHsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIGFyZzIsIGFyZzMpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhvcGVyYXRpb24pOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKERfREZHT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgR1BSUmVnIGFy
ZzEpCisgICAgeworICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7Cisg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihEX0RGR09wZXJhdGlvbl9ERCBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEZQUlJlZyBhcmcx
LCBGUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIHNldHVwQXJndW1lbnRzKGFyZzEsIGFyZzIp
OworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
CisgICAgfQorI2Vsc2UKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfREZH
T3BlcmF0aW9uX0Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSkKKyAgICB7
CisgICAgICAgIHNldHVwQXJndW1lbnRzKGFyZzEpOworICAgICAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsID0gbV9qaXQuYXBwZW5kQ2FsbChvcGVyYXRpb24pOworICAgICAgICBtX2ppdC56ZXJv
RXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKKyAgICAgICAg
cmV0dXJuIGNhbGw7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9ERkdPcGVyYXRpb25fRVAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVz
dWx0UGF5bG9hZCwgdm9pZCogcG9pbnRlcikKKyAgICB7CisgICAgICAgIHNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsKKyAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXls
b2FkLCByZXN1bHRUYWcpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfREZHT3BlcmF0aW9uX0VQUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJl
ZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgdm9pZCogcG9pbnRlcikKKyAgICB7CisgICAg
ICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKHBvaW50
ZXIpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOworICAgIH0KKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VHSSBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgSWRl
bnRpZmllciogaWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGlkZW50aWZpZXIpKTsKKyAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQ
YXlsb2FkLCByZXN1bHRUYWcpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BS
UmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxKQorICAgIHsKKyAgICAgICAgc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRh
Zyk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRUkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9h
ZCwgSWRlbnRpZmllciogaWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIHNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGlkZW50aWZpZXIpKTsKKyAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQ
YXlsb2FkLCByZXN1bHRUYWcpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfREZHT3BlcmF0aW9uX0VBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BS
UmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxKQorICAgIHsKKyAgICAgICAgc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRh
Zyk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxv
YWQsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIocG9pbnRlciksIFRydXN0ZWRJbW1QdHIo
c2l6ZSkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CisgICAgfQorICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVNTIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIGludCBzdGFydENvbnN0
YW50LCBpbnQgbnVtQ29uc3RhbnRzKQorICAgIHsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKFRydXN0ZWRJbW0zMihzdGFydENvbnN0YW50KSwgVHJ1c3RlZEltbTMyKG51bUNv
bnN0YW50cykpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CisgICAgfQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpQIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcx
VGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIHZvaWQqIHBvaW50ZXIpCisgICAgeworICAgICAgICBz
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMVBheWxvYWQsIGFyZzFUYWcsIEltbVB0cihw
b2ludGVyKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKKyAgICB9CisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSlAgb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzFU
YWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBzZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMVBheWxvYWQsIGFyZzFUYWcsIGFyZzIpOworICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUNJIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCBJZGVudGlmaWVyKiBp
ZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllcikpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJl
c3VsdFRhZyk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9E
RkdPcGVyYXRpb25fRUpBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3Vs
dFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcy
KQorICAgIHsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzFQYXlsb2Fk
LCBhcmcxVGFnLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOworICAg
IH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VK
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJl
ZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCisgICAgeworICAgICAgICBzZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYXJnMVBheWxvYWQsIGFyZzFUYWcpOworICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBh
eWxvYWQsIHJlc3VsdFRhZyk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oQ19ERkdPcGVyYXRpb25fRSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQpCisgICAgewor
ICAgICAgICBzZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOworICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAg
fQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdPcGVyYXRpb25fRUMg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICB7CisgICAgICAgIHNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0K
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VDQyBv
cGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU0NlbGwqIGNlbGwpCisgICAg
eworICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0
cihjZWxsKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihTX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCisgICAgeworICAgICAgICBzZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMVBheWxvYWQsIGFyZzFUYWcpOworICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19ERkdP
cGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQ
UlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCkKKyAg
ICB7CisgICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxUGF5bG9hZCwgYXJn
MVRhZywgYXJnMlBheWxvYWQsIGFyZzJUYWcpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpKIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcx
VGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxv
YWQpCisgICAgeworICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMVBheWxv
YWQsIGFyZzFUYWcsIGFyZzJQYXlsb2FkLCBhcmcyVGFnKTsKKyAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2Fk
LCByZXN1bHRUYWcpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyBy
ZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBNYWNyb0Fz
c2VtYmxlcjo6SW1tMzIgaW1tKQorICAgIHsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBpbW0sIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZykpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CisgICAgfQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpKIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIE1hY3JvQXNzZW1i
bGVyOjpJbW0zMiBpbW0sIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQpCisgICAg
eworICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoaW1tLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6SW50MzJUYWcpLCBhcmcyUGF5bG9hZCwgYXJnMlRhZyk7CisgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
UGF5bG9hZCwgcmVzdWx0VGFnKTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBH
UFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcg
YXJnMlBheWxvYWQpCisgICAgeworICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSwgYXJnMlBheWxvYWQsIGFyZzJUYWcpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3Vs
dFRhZyk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdP
cGVyYXRpb25fRUpQUCBvcGVyYXRpb24sIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxv
YWQsIEdQUlJlZyBhcmcyLCB2b2lkKiBwb2ludGVyKQorICAgIHsKKyAgICAgICAgc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBhcmcyLCBUcnVzdGVkSW1t
UHRyKHBvaW50ZXIpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uKTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihWX0RGR09wZXJhdGlvbl9FSkNJIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBh
cmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIsIElkZW50aWZpZXIqIGlkZW50aWZpZXIpCisgICAgewor
ICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMVBheWxvYWQsIGFyZzFUYWcs
IGFyZzIsIFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllcikpOworICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworICAgIH0KKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDSkogb3BlcmF0aW9uLCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCwgR1BSUmVnIGFyZzNU
YWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKKyAgICB7CisgICAgICAgIHNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxLCBhcmcyUGF5bG9hZCwgYXJnMlRhZywgYXJnM1BheWxvYWQsIGFyZzNU
YWcpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRp
b24pOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3Bl
cmF0aW9uX0VQWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBh
cmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQpCisgICAgeworICAgICAgICBzZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnM1BheWxvYWQsIGFyZzNUYWcpOworICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworICAgIH0K
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VBWkog
b3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczVGFnLCBHUFJS
ZWcgYXJnM1BheWxvYWQpCisgICAgeworICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoYXJnMSwgYXJnMiwgYXJnM1BheWxvYWQsIGFyZzNUYWcpOworICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworICAgIH0KKworICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRF9ERkdPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBG
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQorICAgIHsK
KyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzFQYXlsb2FkLCBhcmcxVGFn
KTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQo
b3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKworICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oRF9ERkdPcGVyYXRpb25fREQgb3BlcmF0aW9uLCBGUFJSZWcgcmVzdWx0LCBGUFJS
ZWcgYXJnMSwgRlBSUmVnIGFyZzIpCisgICAgeworICAgICAgICBzZXR1cEFyZ3VtZW50cyhhcmcx
LCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOworICAgIH0KKyNlbmRpZgorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhZGQgY2FsbCBp
bnN0cnVjdGlvbnMsIHdpdGggb3B0aW9uYWwgZXhjZXB0aW9uIGNoZWNrcyAmIHNldHRpbmcgcmVz
dWx0cy4KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBtX2pp
dC5hZGRFeGNlcHRpb25DaGVjayhtX2ppdC5hcHBlbmRDYWxsKGZ1bmN0aW9uKSwgYXQobV9jb21w
aWxlSW5kZXgpLmNvZGVPcmlnaW4pOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5j
dGlvbiwgR1BSUmVnIHJlc3VsdCkKKyAgICB7CisgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKKyAgICAgICAgbV9q
aXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJu
IGNhbGw7CisgICAgfQorICAgIHZvaWQgc2V0dXBSZXN1bHRzKEdQUlJlZyBkZXN0QSwgR1BSUmVn
IGRlc3RCKQorICAgIHsKKyAgICAgICAgR1BSUmVnIHNyY0EgPSBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUjsKKyAgICAgICAgR1BSUmVnIHNyY0IgPSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjI7CisK
KyAgICAgICAgaWYgKHNyY0IgIT0gZGVzdEEpIHsKKyAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUg
ZWFzeSBjYXNlcyAtIHR3byBzaW1wbGUgbW92ZXMuCisgICAgICAgICAgICBtX2ppdC5tb3ZlKHNy
Y0EsIGRlc3RBKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoc3JjQiwgZGVzdEIpOworICAgICAg
ICB9IGVsc2UgaWYgKHNyY0EgIT0gZGVzdEIpIHsKKyAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUg
bm9uLXN3YXAgY2FzZSAtIGp1c3QgcHV0IHNyY0IgaW4gcGxhY2UgZmlyc3QuCisgICAgICAgICAg
ICBtX2ppdC5tb3ZlKHNyY0IsIGRlc3RCKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoc3JjQSwg
ZGVzdEEpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1faml0LnN3YXAoZGVzdEEsIGRl
c3RCKTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIEdQUlJlZyByZXN1
bHQxLCBHUFJSZWcgcmVzdWx0MikKKyAgICB7CisgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKKyAgICAgICAgc2V0
dXBSZXN1bHRzKHJlc3VsdDEsIHJlc3VsdDIpOworICAgICAgICByZXR1cm4gY2FsbDsKKyAgICB9
CisjaWYgQ1BVKFg4NikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgRlBSUmVnIHJl
c3VsdCkKKyAgICB7CisgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKKyAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCku
ZnN0cGwoMCwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgbV9q
aXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlc3VsdCk7
CisgICAgICAgIHJldHVybiBjYWxsOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBl
bmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgRlBSUmVnIHJlc3Vs
dCkKKyAgICB7CisgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5hcHBlbmRD
YWxsKGZ1bmN0aW9uKTsKKyAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkuZnN0cGwoMCwgSklUQ29t
cGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQubG9hZERvdWJsZShK
SVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlc3VsdCk7CisgICAgICAgIHJldHVy
biBjYWxsOworICAgIH0KKyNlbGlmIENQVShBUk0pCisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciYgZnVu
Y3Rpb24sIEZQUlJlZyByZXN1bHQpCisgICAgeworICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CisgICAgICAgIG1f
aml0LmFzc2VtYmxlcigpLnZtb3YocmVzdWx0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAgICAgICAgcmV0dXJuIGNhbGw7CisgICAgfQorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHIm
IGZ1bmN0aW9uLCBGUFJSZWcgcmVzdWx0KQorICAgIHsKKyAgICAgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbCA9IG1faml0LmFwcGVuZENhbGwoZnVuY3Rpb24pOworICAgICAgICBtX2ppdC5hc3Nl
bWJsZXIoKS52bW92KHJlc3VsdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSMik7CisgICAgICAgIHJldHVybiBjYWxsOworICAgIH0KKyNlbHNlCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChj
b25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIEZQUlJlZyByZXN1bHQpCisgICAgeworICAgICAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhm
dW5jdGlvbik7CisgICAgICAgIG1faml0Lm1vdmVEb3VibGUoRlBSSW5mbzo6cmV0dXJuVmFsdWVG
UFIsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiBjYWxsOworICAgIH0KKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwg
RlBSUmVnIHJlc3VsdCkKKyAgICB7CisgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBt
X2ppdC5hcHBlbmRDYWxsKGZ1bmN0aW9uKTsKKyAgICAgICAgbV9qaXQubW92ZURvdWJsZShGUFJJ
bmZvOjpyZXR1cm5WYWx1ZUZQUiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIGNhbGw7CisgICAg
fQorI2VuZGlmCisKKyAgICB2b2lkIGFkZEJyYW5jaChjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCYganVtcCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIG1fYnJhbmNo
ZXMuYXBwZW5kKEJyYW5jaFJlY29yZChqdW1wLCBkZXN0aW5hdGlvbikpOworICAgIH0KKworICAg
IHZvaWQgbGlua0JyYW5jaGVzKCkKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9icmFuY2hlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgQnJhbmNoUmVjb3JkJiBi
cmFuY2ggPSBtX2JyYW5jaGVzW2ldOworICAgICAgICAgICAgYnJhbmNoLmp1bXAubGlua1RvKG1f
YmxvY2tIZWFkc1ticmFuY2guZGVzdGluYXRpb25dLCAmbV9qaXQpOworICAgICAgICB9CisgICAg
fQorCisgICAgQmFzaWNCbG9jayogYmxvY2soKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faml0
LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10uZ2V0KCk7CisgICAgfQorCisjaWZuZGVmIE5ERUJV
RworICAgIHZvaWQgZHVtcChjb25zdCBjaGFyKiBsYWJlbCA9IDApOworI2VuZGlmCisKKyNpZiBE
RkdfRU5BQkxFKENPTlNJU1RFTkNZX0NIRUNLKQorICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgp
OworI2Vsc2UKKyAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKSB7fQorI2VuZGlmCiAKICAgICBi
b29sIGlzSW50ZWdlcihOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKQEAgLTI5NSw2ICsyMDIy
LDI5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tvcGVyYW5kXTsKICAg
ICB9CiAgICAgCisgICAgLy8gVGhlIEpJVCwgd2hpbGUgYWxzbyBwcm92aWRlcyBNYWNyb0Fzc2Vt
YmxlciBmdW5jdGlvbmFsaXR5LgorICAgIEpJVENvbXBpbGVyJiBtX2ppdDsKKyAgICAvLyBUaGUg
Y3VycmVudCBub2RlIGJlaW5nIGdlbmVyYXRlZC4KKyAgICBCbG9ja0luZGV4IG1fYmxvY2s7Cisg
ICAgTm9kZUluZGV4IG1fY29tcGlsZUluZGV4OworICAgIC8vIFZpcnR1YWwgYW5kIHBoeXNpY2Fs
IHJlZ2lzdGVyIG1hcHMuCisgICAgVmVjdG9yPEdlbmVyYXRpb25JbmZvLCAzMj4gbV9nZW5lcmF0
aW9uSW5mbzsKKyAgICBSZWdpc3RlckJhbms8R1BSSW5mbz4gbV9ncHJzOworICAgIFJlZ2lzdGVy
QmFuazxGUFJJbmZvPiBtX2ZwcnM7CisKKyAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6OkxhYmVs
PiBtX2Jsb2NrSGVhZHM7CisgICAgc3RydWN0IEJyYW5jaFJlY29yZCB7CisgICAgICAgIEJyYW5j
aFJlY29yZChNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9u
KQorICAgICAgICAgICAgOiBqdW1wKGp1bXApCisgICAgICAgICAgICAsIGRlc3RpbmF0aW9uKGRl
c3RpbmF0aW9uKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBqdW1wOworICAgICAgICBCbG9ja0luZGV4IGRlc3RpbmF0aW9uOworICAgIH07Cisg
ICAgVmVjdG9yPEJyYW5jaFJlY29yZCwgOD4gbV9icmFuY2hlczsKKwogICAgIFZlY3RvcjxWYWx1
ZVNvdXJjZSwgMD4gbV9hcmd1bWVudHM7CiAgICAgVmVjdG9yPFZhbHVlU291cmNlLCAwPiBtX3Zh
cmlhYmxlczsKICAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKQEAgLTMxMSwxNSArMjA2MSwzOTUg
QEAgcHJpdmF0ZToKIH07CiAKIAorLy8gPT09IE9wZXJhbmQgdHlwZXMgPT09CisvLworLy8gSW50
ZWdlck9wZXJhbmQsIERvdWJsZU9wZXJhbmQgYW5kIEpTVmFsdWVPcGVyYW5kLgorLy8KKy8vIFRo
ZXNlIGNsYXNzZXMgYXJlIHVzZWQgdG8gbG9jayB0aGUgb3BlcmFuZHMgdG8gYSBub2RlIGludG8g
bWFjaGluZQorLy8gcmVnaXN0ZXJzLiBUaGVzZSBjbGFzc2VzIGltcGxlbWVudCBvZiBwYXR0ZXJu
IG9mIGxvY2tpbmcgYSB2YWx1ZQorLy8gaW50byByZWdpc3RlciBhdCB0aGUgcG9pbnQgb2YgY29u
c3RydWN0aW9uIG9ubHkgaWYgaXQgaXMgYWxyZWFkeSBpbgorLy8gcmVnaXN0ZXJzLCBhbmQgb3Ro
ZXJ3aXNlIGxvYWRpbmcgaXQgbGF6aWx5IGF0IHRoZSBwb2ludCBpdCBpcyBmaXJzdAorLy8gdXNl
ZC4gV2UgZG8gc28gaW4gb3JkZXIgdG8gYXR0ZW1wdCB0byBhdm9pZCBzcGlsbGluZyBvbmUgb3Bl
cmFuZAorLy8gaW4gb3JkZXIgdG8gbWFrZSBzcGFjZSBhdmFpbGFibGUgZm9yIGFub3RoZXIuCisK
K2NsYXNzIEludGVnZXJPcGVyYW5kIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBJbnRlZ2VyT3Bl
cmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBOb2RlSW5kZXggaW5kZXgpCisgICAgICAgIDogbV9q
aXQoaml0KQorICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9ncHJPckludmFs
aWQoSW52YWxpZEdQUlJlZykKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICwgbV9mb3JtYXQoRGF0
YUZvcm1hdE5vbmUpCisjZW5kaWYKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2ppdCk7CisgICAg
ICAgIGlmIChqaXQtPmlzRmlsbGVkKGluZGV4KSkKKyAgICAgICAgICAgIGdwcigpOworICAgIH0K
KworICAgIH5JbnRlZ2VyT3BlcmFuZCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9ncHJPcklu
dmFsaWQgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIG1faml0LT51bmxvY2sobV9ncHJPcklu
dmFsaWQpOworICAgIH0KKworICAgIE5vZGVJbmRleCBpbmRleCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9pbmRleDsKKyAgICB9CisKKyAgICBEYXRhRm9ybWF0IGZvcm1hdCgpCisg
ICAgeworICAgICAgICBncHIoKTsgLy8gbV9mb3JtYXQgaXMgc2V0IHdoZW4gbV9ncHIgaXMgbG9j
a2VkLgorICAgICAgICBBU1NFUlQobV9mb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIgfHwgbV9m
b3JtYXQgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcik7CisgICAgICAgIHJldHVybiBtX2Zvcm1hdDsK
KyAgICB9CisKKyAgICBHUFJSZWcgZ3ByKCkKKyAgICB7CisgICAgICAgIGlmIChtX2dwck9ySW52
YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2pp
dC0+ZmlsbEludGVnZXIoaW5kZXgoKSwgbV9mb3JtYXQpOworICAgICAgICByZXR1cm4gbV9ncHJP
ckludmFsaWQ7CisgICAgfQorICAgIAorICAgIHZvaWQgdXNlKCkKKyAgICB7CisgICAgICAgIG1f
aml0LT51c2UobV9pbmRleCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFNwZWN1bGF0aXZlSklU
KiBtX2ppdDsKKyAgICBOb2RlSW5kZXggbV9pbmRleDsKKyAgICBHUFJSZWcgbV9ncHJPckludmFs
aWQ7CisgICAgRGF0YUZvcm1hdCBtX2Zvcm1hdDsKK307CisKK2NsYXNzIERvdWJsZU9wZXJhbmQg
eworcHVibGljOgorICAgIGV4cGxpY2l0IERvdWJsZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGpp
dCwgTm9kZUluZGV4IGluZGV4KQorICAgICAgICA6IG1faml0KGppdCkKKyAgICAgICAgLCBtX2lu
ZGV4KGluZGV4KQorICAgICAgICAsIG1fZnByT3JJbnZhbGlkKEludmFsaWRGUFJSZWcpCisgICAg
eworICAgICAgICBBU1NFUlQobV9qaXQpOworICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZERvdWJs
ZShpbmRleCkpCisgICAgICAgICAgICBmcHIoKTsKKyAgICB9CisKKyAgICB+RG91YmxlT3BlcmFu
ZCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9mcHJPckludmFsaWQgIT0gSW52YWxpZEZQUlJl
Zyk7CisgICAgICAgIG1faml0LT51bmxvY2sobV9mcHJPckludmFsaWQpOworICAgIH0KKworICAg
IE5vZGVJbmRleCBpbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbmRleDsK
KyAgICB9CisKKyAgICBGUFJSZWcgZnByKCkKKyAgICB7CisgICAgICAgIGlmIChtX2Zwck9ySW52
YWxpZCA9PSBJbnZhbGlkRlBSUmVnKQorICAgICAgICAgICAgbV9mcHJPckludmFsaWQgPSBtX2pp
dC0+ZmlsbERvdWJsZShpbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIG1fZnByT3JJbnZhbGlkOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHVzZSgpCisgICAgeworICAgICAgICBtX2ppdC0+dXNlKG1f
aW5kZXgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Cisg
ICAgTm9kZUluZGV4IG1faW5kZXg7CisgICAgRlBSUmVnIG1fZnByT3JJbnZhbGlkOworfTsKKwor
Y2xhc3MgSlNWYWx1ZU9wZXJhbmQgeworcHVibGljOgorICAgIGV4cGxpY2l0IEpTVmFsdWVPcGVy
YW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIE5vZGVJbmRleCBpbmRleCkKKyAgICAgICAgOiBtX2pp
dChqaXQpCisgICAgICAgICwgbV9pbmRleChpbmRleCkKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
ICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCisjZWxpZiBVU0UoSlNWQUxVRTMy
XzY0KQorICAgICAgICAsIG1faXNEb3VibGUoZmFsc2UpCisjZW5kaWYKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX2ppdCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgaWYgKGppdC0+aXNG
aWxsZWQoaW5kZXgpKQorICAgICAgICAgICAgZ3ByKCk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0
KQorICAgICAgICBtX3JlZ2lzdGVyLnBhaXIudGFnR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAg
ICAgbV9yZWdpc3Rlci5wYWlyLnBheWxvYWRHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICBp
ZiAoaml0LT5pc0ZpbGxlZChpbmRleCkpCisgICAgICAgICAgICBmaWxsKCk7CisjZW5kaWYKKyAg
ICB9CisKKyAgICB+SlNWYWx1ZU9wZXJhbmQoKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgICAgICBBU1NFUlQobV9ncHJPckludmFsaWQgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAg
IG1faml0LT51bmxvY2sobV9ncHJPckludmFsaWQpOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkK
KyAgICAgICAgaWYgKG1faXNEb3VibGUpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3JlZ2lzdGVy
LmZwciAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAgICAgIG1faml0LT51bmxvY2sobV9yZWdp
c3Rlci5mcHIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKG1fcmVnaXN0
ZXIucGFpci50YWdHUFIgIT0gSW52YWxpZEdQUlJlZyAmJiBtX3JlZ2lzdGVyLnBhaXIucGF5bG9h
ZEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgICAgIG1faml0LT51bmxvY2sobV9yZWdp
c3Rlci5wYWlyLnRhZ0dQUik7CisgICAgICAgICAgICBtX2ppdC0+dW5sb2NrKG1fcmVnaXN0ZXIu
cGFpci5wYXlsb2FkR1BSKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAgTm9kZUlu
ZGV4IGluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2luZGV4OworICAgIH0K
KworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgR1BSUmVnIGdwcigpCisgICAgeworICAgICAgICBp
ZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG1fZ3ByT3JJ
bnZhbGlkID0gbV9qaXQtPmZpbGxKU1ZhbHVlKGluZGV4KCkpOworICAgICAgICByZXR1cm4gbV9n
cHJPckludmFsaWQ7CisgICAgfQorICAgIEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU1ZhbHVlUmVncyhncHIoKSk7CisgICAgfQorI2VsaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICBib29sIGlzRG91YmxlKCkgeyByZXR1cm4gbV9pc0RvdWJsZTsgfQor
CisgICAgdm9pZCBmaWxsKCkKKyAgICB7CisgICAgICAgIGlmIChtX3JlZ2lzdGVyLnBhaXIudGFn
R1BSID09IEludmFsaWRHUFJSZWcgJiYgbV9yZWdpc3Rlci5wYWlyLnBheWxvYWRHUFIgPT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG1faXNEb3VibGUgPSAhbV9qaXQtPmZpbGxKU1ZhbHVl
KGluZGV4KCksIG1fcmVnaXN0ZXIucGFpci50YWdHUFIsIG1fcmVnaXN0ZXIucGFpci5wYXlsb2Fk
R1BSLCBtX3JlZ2lzdGVyLmZwcik7CisgICAgfQorCisgICAgR1BSUmVnIHRhZ0dQUigpCisgICAg
eworICAgICAgICBmaWxsKCk7CisgICAgICAgIEFTU0VSVCghbV9pc0RvdWJsZSk7CisgICAgICAg
IHJldHVybiBtX3JlZ2lzdGVyLnBhaXIudGFnR1BSOworICAgIH0KKworICAgIEdQUlJlZyBwYXls
b2FkR1BSKCkKKyAgICB7CisgICAgICAgIGZpbGwoKTsKKyAgICAgICAgQVNTRVJUKCFtX2lzRG91
YmxlKTsKKyAgICAgICAgcmV0dXJuIG1fcmVnaXN0ZXIucGFpci5wYXlsb2FkR1BSOworICAgIH0K
KworICAgIEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U1ZhbHVlUmVncyh0YWdHUFIoKSwgcGF5bG9hZEdQUigpKTsKKyAgICB9CisKKyAgICBGUFJSZWcg
ZnByKCkKKyAgICB7CisgICAgICAgIGZpbGwoKTsKKyAgICAgICAgQVNTRVJUKG1faXNEb3VibGUp
OworICAgICAgICByZXR1cm4gbV9yZWdpc3Rlci5mcHI7CisgICAgfQorI2VuZGlmCisKKyAgICB2
b2lkIHVzZSgpCisgICAgeworICAgICAgICBtX2ppdC0+dXNlKG1faW5kZXgpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7CisgICAgTm9kZUluZGV4IG1faW5k
ZXg7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CisjZWxp
ZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAg
ICAgICAgIEdQUlJlZyB0YWdHUFI7CisgICAgICAgICAgICBHUFJSZWcgcGF5bG9hZEdQUjsKKyAg
ICAgICAgfSBwYWlyOworICAgICAgICBGUFJSZWcgZnByOworICAgIH0gbV9yZWdpc3RlcjsKKyAg
ICBib29sIG1faXNEb3VibGU7CisjZW5kaWYKK307CisKK2NsYXNzIFN0b3JhZ2VPcGVyYW5kIHsK
K3B1YmxpYzoKKyAgICBleHBsaWNpdCBTdG9yYWdlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0
LCBOb2RlSW5kZXggaW5kZXgpCisgICAgICAgIDogbV9qaXQoaml0KQorICAgICAgICAsIG1faW5k
ZXgoaW5kZXgpCisgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX2ppdCk7CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKGluZGV4
KSkKKyAgICAgICAgICAgIGdwcigpOworICAgIH0KKyAgICAKKyAgICB+U3RvcmFnZU9wZXJhbmQo
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3ByT3JJbnZhbGlkICE9IEludmFsaWRHUFJSZWcp
OworICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKKyAgICB9CisgICAgCisg
ICAgTm9kZUluZGV4IGluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2luZGV4
OworICAgIH0KKyAgICAKKyAgICBHUFJSZWcgZ3ByKCkKKyAgICB7CisgICAgICAgIGlmIChtX2dw
ck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgbV9ncHJPckludmFsaWQg
PSBtX2ppdC0+ZmlsbFN0b3JhZ2UoaW5kZXgoKSk7CisgICAgICAgIHJldHVybiBtX2dwck9ySW52
YWxpZDsKKyAgICB9CisgICAgCisgICAgdm9pZCB1c2UoKQorICAgIHsKKyAgICAgICAgbV9qaXQt
PnVzZShtX2luZGV4KTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFNwZWN1bGF0aXZlSklU
KiBtX2ppdDsKKyAgICBOb2RlSW5kZXggbV9pbmRleDsKKyAgICBHUFJSZWcgbV9ncHJPckludmFs
aWQ7Cit9OworCisKKy8vID09PSBUZW1wb3JhcmllcyA9PT0KKy8vCisvLyBUaGVzZSBjbGFzc2Vz
IGFyZSB1c2VkIHRvIGFsbG9jYXRlIHRlbXBvcmFyeSByZWdpc3RlcnMuCisvLyBBIG1lY2hhbmlz
bSBpcyBwcm92aWRlZCB0byBhdHRlbXB0IHRvIHJldXNlIHRoZSByZWdpc3RlcnMKKy8vIGN1cnJl
bnRseSBhbGxvY2F0ZWQgdG8gY2hpbGQgbm9kZXMgd2hvc2UgdmFsdWUgaXMgY29uc3VtZWQKKy8v
IGJ5LCBhbmQgbm90IGxpdmUgYWZ0ZXIsIHRoaXMgb3BlcmF0aW9uLgorCitjbGFzcyBHUFJUZW1w
b3JhcnkgeworcHVibGljOgorICAgIEdQUlRlbXBvcmFyeSgpOworICAgIEdQUlRlbXBvcmFyeShT
cGVjdWxhdGl2ZUpJVCopOworICAgIEdQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIEdQUlJl
ZyBzcGVjaWZpYyk7CisgICAgR1BSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQmKTsKKyAgICBHUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCYsIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kJik7CisgICAgR1BS
VGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kJik7
CisgICAgR1BSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgSW50ZWdlck9wZXJhbmQmKTsKKyAg
ICBHUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBJbnRlZ2VyT3BlcmFuZCYsIEludGVnZXJP
cGVyYW5kJik7CisgICAgR1BSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQmKTsKKyAgICBHUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBTcGVjdWxhdGVC
b29sZWFuT3BlcmFuZCYpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgR1BSVGVtcG9yYXJ5KFNw
ZWN1bGF0aXZlSklUKiwgSlNWYWx1ZU9wZXJhbmQmKTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQp
CisgICAgR1BSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgSlNWYWx1ZU9wZXJhbmQmLCBib29s
IHRhZyA9IHRydWUpOworI2VuZGlmCisgICAgR1BSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwg
U3RvcmFnZU9wZXJhbmQmKTsKKworICAgIHZvaWQgYWRvcHQoR1BSVGVtcG9yYXJ5Jik7CisKKyAg
ICB+R1BSVGVtcG9yYXJ5KCkKKyAgICB7CisgICAgICAgIGlmIChtX2ppdCAmJiBtX2dwciAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgbV9qaXQtPnVubG9jayhncHIoKSk7CisgICAgfQor
CisgICAgR1BSUmVnIGdwcigpCisgICAgeworICAgICAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhh
dmUgbGF6eSBhbGxvY2F0aW9uLgorICAgICAgICBpZiAobV9qaXQgJiYgbV9ncHIgPT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgICAgIG1fZ3ByID0gbV9qaXQtPmFsbG9jYXRlKCk7CisgICAgICAg
IHJldHVybiBtX2dwcjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgU3BlY3VsYXRpdmVKSVQqIG1f
aml0OworICAgIEdQUlJlZyBtX2dwcjsKK307CisKK2NsYXNzIEZQUlRlbXBvcmFyeSB7CitwdWJs
aWM6CisgICAgRlBSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKik7CisgICAgRlBSVGVtcG9yYXJ5
KFNwZWN1bGF0aXZlSklUKiwgRG91YmxlT3BlcmFuZCYpOworICAgIEZQUlRlbXBvcmFyeShTcGVj
dWxhdGl2ZUpJVCosIERvdWJsZU9wZXJhbmQmLCBEb3VibGVPcGVyYW5kJik7CisgICAgRlBSVGVt
cG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCYpOworICAgIEZQ
UlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQmLCBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kJik7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBGUFJUZW1w
b3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBKU1ZhbHVlT3BlcmFuZCYpOworI2VuZGlmCisKKyAgICB+
RlBSVGVtcG9yYXJ5KCkKKyAgICB7CisgICAgICAgIG1faml0LT51bmxvY2soZnByKCkpOworICAg
IH0KKworICAgIEZQUlJlZyBmcHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZnBy
ICE9IEludmFsaWRGUFJSZWcpOworICAgICAgICByZXR1cm4gbV9mcHI7CisgICAgfQorCitwcm90
ZWN0ZWQ6CisgICAgRlBSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQsIEZQUlJlZyBsb2Nr
ZWRGUFIpCisgICAgICAgIDogbV9qaXQoaml0KQorICAgICAgICAsIG1fZnByKGxvY2tlZEZQUikK
KyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKKyAg
ICBGUFJSZWcgbV9mcHI7Cit9OworCisKKy8vID09PSBSZXN1bHRzID09PQorLy8KKy8vIFRoZXNl
IGNsYXNzZXMgbG9jayB0aGUgcmVzdWx0IG9mIGEgY2FsbCB0byBhIEMrKyBoZWxwZXIgZnVuY3Rp
b24uCisKK2NsYXNzIEdQUlJlc3VsdCA6IHB1YmxpYyBHUFJUZW1wb3JhcnkgeworcHVibGljOgor
ICAgIEdQUlJlc3VsdChTcGVjdWxhdGl2ZUpJVCogaml0KQorICAgICAgICA6IEdQUlRlbXBvcmFy
eShqaXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKQorICAgIHsKKyAgICB9Cit9OworCisjaWYg
VVNFKEpTVkFMVUUzMl82NCkKK2NsYXNzIEdQUlJlc3VsdDIgOiBwdWJsaWMgR1BSVGVtcG9yYXJ5
IHsKK3B1YmxpYzoKKyAgICBHUFJSZXN1bHQyKFNwZWN1bGF0aXZlSklUKiBqaXQpCisgICAgICAg
IDogR1BSVGVtcG9yYXJ5KGppdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKQorICAgIHsKKyAg
ICB9Cit9OworI2VuZGlmCisKK2NsYXNzIEZQUlJlc3VsdCA6IHB1YmxpYyBGUFJUZW1wb3Jhcnkg
eworcHVibGljOgorICAgIEZQUlJlc3VsdChTcGVjdWxhdGl2ZUpJVCogaml0KQorICAgICAgICA6
IEZQUlRlbXBvcmFyeShqaXQsIGxvY2tlZFJlc3VsdChqaXQpKQorICAgIHsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgc3RhdGljIEZQUlJlZyBsb2NrZWRSZXN1bHQoU3BlY3VsYXRpdmVKSVQqIGpp
dCkKKyAgICB7CisgICAgICAgIGppdC0+bG9jayhGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Cisg
ICAgICAgIHJldHVybiBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUjsKKyAgICB9Cit9OworCisKIC8v
ID09PSBTcGVjdWxhdGl2ZSBPcGVyYW5kIHR5cGVzID09PQogLy8KIC8vIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kLCBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgYW5kIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kLgogLy8KIC8vIFRoZXNlIGFyZSB1c2VkIHRvIGxvY2sgdGhlIG9wZXJhbmRzIHRvIGEg
bm9kZSBpbnRvIG1hY2hpbmUgcmVnaXN0ZXJzIHdpdGhpbiB0aGUKLS8vIFNwZWN1bGF0aXZlSklU
LiBUaGUgY2xhc3NlcyBvcGVyYXRlIGxpa2UgdGhvc2UgcHJvdmlkZWQgYnkgdGhlIEpJVENvZGVH
ZW5lcmF0b3IsCi0vLyBob3dldmVyIHRoZXNlIHdpbGwgcGVyZm9ybSBhIHNwZWN1bGF0aXZlIGNo
ZWNrIGZvciBhIG1vcmUgcmVzdHJpY3RpdmUgdHlwZSB0aGFuCi0vLyB3ZSBjYW4gc3RhdGljYWxs
eSBkZXRlcm1pbmUgdGhlIG9wZXJhbmQgdG8gaGF2ZS4gSWYgdGhlIG9wZXJhbmQgZG9lcyBub3Qg
aGF2ZQotLy8gdGhlIHJlcXVlc3RlZCB0eXBlLCBhIGJhaWwtb3V0IHRvIHRoZSBub24tc3BlY3Vs
YXRpdmUgcGF0aCB3aWxsIGJlIHRha2VuLgorLy8gU3BlY3VsYXRpdmVKSVQuIFRoZSBjbGFzc2Vz
IG9wZXJhdGUgbGlrZSB0aG9zZSBhYm92ZSwgaG93ZXZlciB0aGVzZSB3aWxsCisvLyBwZXJmb3Jt
IGEgc3BlY3VsYXRpdmUgY2hlY2sgZm9yIGEgbW9yZSByZXN0cmljdGl2ZSB0eXBlIHRoYW4gd2Ug
Y2FuIHN0YXRpY2FsbHkKKy8vIGRldGVybWluZSB0aGUgb3BlcmFuZCB0byBoYXZlLiBJZiB0aGUg
b3BlcmFuZCBkb2VzIG5vdCBoYXZlIHRoZSByZXF1ZXN0ZWQgdHlwZSwKKy8vIGEgYmFpbC1vdXQg
dG8gdGhlIG5vbi1zcGVjdWxhdGl2ZSBwYXRoIHdpbGwgYmUgdGFrZW4uCiAKIGNsYXNzIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIHsKIHB1YmxpYzoKQEAgLTUyOCw4ICsyNjU4LDExIEBAIHByaXZh
dGU6CiB9OwogCiBpbmxpbmUgU3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJVENvbXBp
bGVyJiBqaXQpCi0gICAgOiBKSVRDb2RlR2VuZXJhdG9yKGppdCkKLSAgICAsIG1fY29tcGlsZU9r
YXkodHJ1ZSkKKyAgICA6IG1fY29tcGlsZU9rYXkodHJ1ZSkKKyAgICAsIG1faml0KGppdCkKKyAg
ICAsIG1fY29tcGlsZUluZGV4KDApCisgICAgLCBtX2dlbmVyYXRpb25JbmZvKG1faml0LmNvZGVC
bG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycykKKyAgICAsIG1fYmxvY2tIZWFkcyhqaXQuZ3Jh
cGgoKS5tX2Jsb2Nrcy5zaXplKCkpCiAgICAgLCBtX2FyZ3VtZW50cyhqaXQuY29kZUJsb2NrKCkt
Pm1fbnVtUGFyYW1ldGVycykKICAgICAsIG1fdmFyaWFibGVzKGppdC5ncmFwaCgpLm1fbG9jYWxW
YXJzKQogICAgICwgbV9sYXN0U2V0T3BlcmFuZChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1h
eCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAko
cmV2aXNpb24gMTAwMjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5j
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIGNsYXNzIFNvdXJjZUNvZGU7CiAgICAgY2xhc3MgVlB0ckhhY2tFeGVjdXRhYmxlOwogICAg
IG5hbWVzcGFjZSBERkcgewotICAgIGNsYXNzIEpJVENvZGVHZW5lcmF0b3I7CisgICAgY2xhc3Mg
U3BlY3VsYXRpdmVKSVQ7CiAgICAgY2xhc3MgSklUQ29tcGlsZXI7CiAgICAgfQogCkBAIC00Nyw3
ICs0Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgSlNGdW5jdGlvbiA6IHB1Ymxp
YyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKLSAgICAgICAg
ZnJpZW5kIGNsYXNzIERGRzo6SklUQ29kZUdlbmVyYXRvcjsKKyAgICAgICAgZnJpZW5kIGNsYXNz
IERGRzo6U3BlY3VsYXRpdmVKSVQ7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBERkc6OkpJVENvbXBp
bGVyOwogICAgICAgICBmcmllbmQgY2xhc3MgSlNHbG9iYWxEYXRhOwogCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9kZmctaW5saW5lLWFyZ3VtZW50cy1pbnQzMi5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9kZmctaW5saW5l
LWFyZ3VtZW50cy1pbnQzMi5qcwkocmV2aXNpb24gMTAwMjM1KQorKysgTGF5b3V0VGVzdHMvZmFz
dC9qcy9zY3JpcHQtdGVzdHMvZGZnLWlubGluZS1hcmd1bWVudHMtaW50MzIuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMzAgKzEsMiBAQAogZGVzY3JpcHRpb24oCiAiVGhpcyB0ZXN0cyB0aGF0IGlu
bGluaW5nIHByZXNlcnZlcyBmdW5jdGlvbi5hcmd1bWVudHMgZnVuY3Rpb25hbGl0eSBpZiB0aGUg
YXJndW1lbnRzIHdlcmUgcmVwcmVzZW50ZWQgYXMgdW5ib3hlZCBpbnQzMi4iCi0pOwotCi1mdW5j
dGlvbiBmb28oKSB7Ci0gICAgcmV0dXJuIGJhci5hcmd1bWVudHM7Ci19Ci0KLWZ1bmN0aW9uIGJh
cihhLGIsYykgewotICAgIHJldHVybiBmb28oYSxiLGMpOwotfQotCi1mdW5jdGlvbiBiYXooYSxi
LGMpIHsKLSAgICByZXR1cm4gYmFyKGEsYixjKTsKLX0KLQotZnVuY3Rpb24gYXJnc1RvU3RyKGFy
Z3MpIHsKLSAgICB2YXIgc3RyID0gYXJncyArICI6ICI7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBhcmdzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChpKQotICAgICAgICAgICAgc3RyICs9
ICIsICI7Ci0gICAgICAgIHN0ciArPSBhcmdzW2ldOwotICAgIH0KLSAgICByZXR1cm4gc3RyOwot
fQotCi1mb3IgKHZhciBfX2kgPSAwOyBfX2kgPCAyMDA7ICsrX19pKQotICAgIHNob3VsZEJlKCJh
cmdzVG9TdHIoYmF6KF9faSArIDEsIF9faSArIDIsIF9faSArIDMpKSIsICJcIltvYmplY3QgQXJn
dW1lbnRzXTogIiArIChfX2kgKyAxKSArICIsICIgKyAoX19pICsgMikgKyAiLCAiICsgKF9faSAr
IDMpICsgIlwiIik7Ci0KLXZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwo=
</data>
<flag name="commit-queue"
          id="113914"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115091</attachid>
            <date>2011-11-14 20:41:28 -0800</date>
            <delta_ts>2011-11-14 22:58:46 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>killcodegen_patch_2.diff</filename>
            <type>text/plain</type>
            <size>446759</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwMjM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5NyBA
QAorMjAxMS0xMS0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRzo6U3BlY3VsYXRpdmVKSVQgYW5kIERGRzo6SklUQ29kZUdlbmVyYXRvciBzaG91bGQgYmUg
Y29tYmluZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTcyMzQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAor
ICAgICAgICBNb3ZlZCBhbGwgb2YgSklUQ29kZUdlbmVyYXRvciBpbnRvIFNwZWN1bGF0aXZlSklU
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlz
dC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0
b3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmg6IFJl
bW92ZWQuCisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKiBkZmcvREZHUmVwYXRj
aC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Z2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1Yik6
CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6REZH
Ojp0cnlDYWNoZVB1dEJ5SUQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNsZWFyR2VuZXJhdGlvbkluZm8p
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnVzZUNoaWxkcmVuKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6aXNTdHJpY3RJbnQzMik6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmlzS25vd25JbnRlZ2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6aXNLbm93bk51bWVyaWMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjppc0tub3duQ2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmlzS25vd25Ob3RDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
aXNLbm93bk5vdEludGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpp
c0tub3duTm90TnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6aXNL
bm93bkJvb2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp3cml0ZUJh
cnJpZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjptYXJrQ2VsbENhcmQp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUNvbXBh
cmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVN0
cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpkYXRhRm9ybWF0U3RyaW5nKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNoZWNrQ29uc2lzdGVuY3kpOgorICAgICAgICAoSlNDOjpERkc6OkdQUlRl
bXBvcmFyeTo6R1BSVGVtcG9yYXJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpHUFJUZW1wb3Jhcnk6
OmFkb3B0KToKKyAgICAgICAgKEpTQzo6REZHOjpGUFJUZW1wb3Jhcnk6OkZQUlRlbXBvcmFyeSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmF0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
bG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnVubG9jayk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhblJldXNlKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6cmV1c2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnRy
eUFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZnByQWxsb2Nh
dGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppc0ZpbGxlZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmlzRmlsbGVkRG91YmxlKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OnNpbGVudFNwaWxsR1BSKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6c2lsZW50U3BpbGxGUFIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpzaWxlbnRGaWxsR1BSKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2ls
ZW50RmlsbEZQUik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNpbGVudFNw
aWxsQWxsUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2ls
ZW50RmlsbEFsbFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmJveERvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnVuYm94RG91
YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BpbGwpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppc0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6aXNKU0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6aXNJbnQzMkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6aXNEb3VibGVDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmlzTnVtYmVyQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjppc0Jvb2xlYW5Db25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmlzRnVuY3Rpb25Db25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OnZhbHVlT2ZJbnQzMkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6dmFsdWVPZk51bWJlckNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6YWRkcmVzc09mRG91YmxlQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjp2YWx1ZU9mSlNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OnZhbHVlT2ZCb29sZWFuQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1ZU9mRnVuY3Rpb25Db25zdGFudCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmlzTnVsbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6aWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmZsdXNoUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6aXNGbHVzaGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
dmFsdWVPZkpTQ29uc3RhbnRBc0ltbVB0cik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmJpdE9wKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2hpZnRP
cCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmRldGVjdFBlZXBIb2xlQnJh
bmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YWRkcmVzc09mQ2FsbERh
dGEpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0YWdPZkNhbGxEYXRhKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6cGF5bG9hZE9mQ2FsbERhdGEpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppbnRlZ2VyUmVzdWx0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9SZXN1bHQpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjZWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Ym9vbGVhblJlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmpzVmFsdWVSZXN1bHQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpzdG9yYWdlUmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZG91
YmxlUmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6aW5pdENvbnN0
YW50SW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnJlc2V0Q2FsbEFy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFkZENhbGxBcmd1
bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNldHVwQXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2V0dXBBcmd1bWVudHNFeGVj
U3RhdGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzZXR1
cFR3b1N0dWJBcmdzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2V0dXBT
dHViQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9w
ZXJhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjph
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6c2V0dXBSZXN1bHRzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6YXBwZW5kQ2FsbFNldFJlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmFkZEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmxpbmtCcmFuY2hlcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmJs
b2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tDb25zaXN0ZW5j
eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OkJyYW5jaFJlY29yZDo6QnJh
bmNoUmVjb3JkKToKKyAgICAgICAgKEpTQzo6REZHOjpJbnRlZ2VyT3BlcmFuZDo6SW50ZWdlck9w
ZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OkludGVnZXJPcGVyYW5kOjp+SW50ZWdlck9wZXJh
bmQpOgorICAgICAgICAoSlNDOjpERkc6OkludGVnZXJPcGVyYW5kOjppbmRleCk6CisgICAgICAg
IChKU0M6OkRGRzo6SW50ZWdlck9wZXJhbmQ6OmZvcm1hdCk6CisgICAgICAgIChKU0M6OkRGRzo6
SW50ZWdlck9wZXJhbmQ6Omdwcik6CisgICAgICAgIChKU0M6OkRGRzo6SW50ZWdlck9wZXJhbmQ6
OnVzZSk6CisgICAgICAgIChKU0M6OkRGRzo6RG91YmxlT3BlcmFuZDo6RG91YmxlT3BlcmFuZCk6
CisgICAgICAgIChKU0M6OkRGRzo6RG91YmxlT3BlcmFuZDo6fkRvdWJsZU9wZXJhbmQpOgorICAg
ICAgICAoSlNDOjpERkc6OkRvdWJsZU9wZXJhbmQ6OmluZGV4KToKKyAgICAgICAgKEpTQzo6REZH
OjpEb3VibGVPcGVyYW5kOjpmcHIpOgorICAgICAgICAoSlNDOjpERkc6OkRvdWJsZU9wZXJhbmQ6
OnVzZSk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OkpTVmFsdWVPcGVyYW5k
KToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3BlcmFuZDo6fkpTVmFsdWVPcGVyYW5kKToK
KyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3BlcmFuZDo6aW5kZXgpOgorICAgICAgICAoSlND
OjpERkc6OkpTVmFsdWVPcGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVP
cGVyYW5kOjpqc1ZhbHVlUmVncyk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6
OmlzRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3BlcmFuZDo6ZmlsbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnRhZ0dQUik6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnBheWxvYWRHUFIpOgorICAgICAgICAoSlNDOjpERkc6OkpT
VmFsdWVPcGVyYW5kOjpmcHIpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVPcGVyYW5kOjp1
c2UpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjpTdG9yYWdlT3BlcmFuZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6On5TdG9yYWdlT3BlcmFuZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OmluZGV4KToKKyAgICAgICAgKEpTQzo6
REZHOjpTdG9yYWdlT3BlcmFuZDo6Z3ByKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3Bl
cmFuZDo6dXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpHUFJUZW1wb3Jhcnk6On5HUFJUZW1wb3Jh
cnkpOgorICAgICAgICAoSlNDOjpERkc6OkdQUlRlbXBvcmFyeTo6Z3ByKToKKyAgICAgICAgKEpT
Qzo6REZHOjpGUFJUZW1wb3Jhcnk6On5GUFJUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6
OkZQUlRlbXBvcmFyeTo6ZnByKToKKyAgICAgICAgKEpTQzo6REZHOjpGUFJUZW1wb3Jhcnk6OkZQ
UlRlbXBvcmFyeSk6CisgICAgICAgIChKU0M6OkRGRzo6R1BSUmVzdWx0OjpHUFJSZXN1bHQpOgor
ICAgICAgICAoSlNDOjpERkc6OkdQUlJlc3VsdDI6OkdQUlJlc3VsdDIpOgorICAgICAgICAoSlND
OjpERkc6OkZQUlJlc3VsdDo6RlBSUmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpGUFJSZXN1
bHQ6OmxvY2tlZFJlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OlNw
ZWN1bGF0aXZlSklUKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2VyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvTnVtYmVyKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVVJbnQzMlRvTnVt
YmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVL
bm93bkNvbnN0YW50QXJpdGhPcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
Om5vblNwZWN1bGF0aXZlQmFzaWNBcml0aE9wKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNhY2hlZFB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
YWNoZWRHZXRNZXRob2QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25T
cGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGwpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGFyZU51bGwpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xl
QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRp
dmVOb25QZWVwaG9sZUNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpub25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlU3RyaWN0RXEpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpmaWxsSW50ZWdlcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxE
b3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFsdWVU
b051bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0
aXZlVmFsdWVUb0ludDMyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9u
U3BlY3VsYXRpdmVVSW50MzJUb051bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6Om5vblNwZWN1bGF0aXZlS25vd25Db25zdGFudEFyaXRoT3ApOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZUJhc2ljQXJpdGhPcCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0TWV0aG9kKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9s
ZUJyYW5jaE51bGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZUNvbXBhcmVOdWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVw
aG9sZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENh
bGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorCiAyMDExLTExLTE0ICBPbGl2
ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgU3RhcnQgbWlncmF0aW5nIHR5
cGVkIGFycmF5IGltcGwgdHlwZXMgdG8gV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAxMDAyMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDYgQEAgU0VUKEphdmFTY3Jp
cHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHQ29ycmVjdGFibGVKdW1wUG9pbnQuY3BwCiAgICAg
ZGZnL0RGR0RyaXZlci5jcHAKICAgICBkZmcvREZHR3JhcGguY3BwCi0gICAgZGZnL0RGR0pJVENv
ZGVHZW5lcmF0b3IuY3BwCi0gICAgZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHAKLSAg
ICBkZmcvREZHSklUQ29kZUdlbmVyYXRvcjY0LmNwcAogICAgIGRmZy9ERkdKSVRDb21waWxlci5j
cHAKICAgICBkZmcvREZHT1NSRW50cnkuY3BwCiAgICAgZGZnL0RGR09TUkV4aXQuY3BwCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTAw
MjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtp
bmcgY29weSkKQEAgLTEzMCwxMCArMTMwLDYgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdJbnRyaW5zaWMuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2Vu
ZXJhdG9yMzJfNjQuY3BwIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVH
ZW5lcmF0b3I2NC5jcHAgXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdl
bmVyYXRvci5jcHAgXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVy
YXRvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVySW5saW5lTWV0aG9kcy5oIFwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxMDAyMzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtODksOSArODksNiBAQCBT
T1VSQ0VTICs9IFwKICAgICBkZmcvREZHQ29ycmVjdGFibGVKdW1wUG9pbnQuY3BwIFwKICAgICBk
ZmcvREZHRHJpdmVyLmNwcCBcCiAgICAgZGZnL0RGR0dyYXBoLmNwcCBcCi0gICAgZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuY3BwIFwKLSAgICBkZmcvREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNw
cCBcCi0gICAgZGZnL0RGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHAgXAogICAgIGRmZy9ERkdKSVRD
b21waWxlci5jcHAgXAogICAgIGRmZy9ERkdPcGVyYXRpb25zLmNwcCBcCiAgICAgZGZnL0RGR09T
UkVudHJ5LmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTAwMjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMyOCwxMCArMzI4LDggQEAKIAkJ
ODY3MDRCODgxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXJzZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NzA0QjgxMTJEQkEzMzcwMEE5RkU3QiAv
KiBZYXJyUGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJ
ODY3MDRCODkxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2NzA0QjgyMTJEQkEzMzcwMEE5RkU3
QiAvKiBZYXJyUGF0dGVybi5jcHAgKi87IH07CiAJCTg2NzA0QjhBMTJEQkEzMzcwMEE5RkU3QiAv
KiBZYXJyUGF0dGVybi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODY3MDRCODMxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJODY4ODBGMUMxNDMyOEJC
OTAwQjA4RDQyIC8qIERGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Njg4MEYxODE0MzI4QkI5MDBCMDhENDIg
LyogREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcCAqLzsgfTsKIAkJODY4ODBGMUUxNDMyOEJC
OTAwQjA4RDQyIC8qIERGR0pJVENvbXBpbGVySW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4ODBGMUExNDMyOEJCOTAwQjA4RDQy
IC8qIERGR0pJVENvbXBpbGVySW5saW5lTWV0aG9kcy5oICovOyB9OwogCQk4Njg4MEYxRjE0MzI4
QkI5MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Njg4MEYxQjE0MzI4QkI5MDBCMDhENDIg
LyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgKi87IH07Ci0JCTg2ODgwRjQ0MTQzNTMxQTgw
MEIwOEQ0MiAvKiBERkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4ODBGNDMxNDM1MzFBNzAwQjA4RDQyIC8qIERG
R0pJVENvZGVHZW5lcmF0b3I2NC5jcHAgKi87IH07CiAJCTg2ODgwRjREMTQzNTNCMjEwMEIwOEQ0
MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcCAqLzsgfTsKIAkJODY4QkZBMDgxMTdDRUZEMTAwQjkwOEIxIC8qIEF0b21p
Y1N0cmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NjhCRkEwMDExN0NFRkQxMDBCOTA4QjEgLyogQXRvbWljU3RyaW5nLmNwcCAqLzsgfTsKIAkJ
ODY4QkZBMDkxMTdDRUZEMTAwQjkwOEIxIC8qIEF0b21pY1N0cmluZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY4QkZBMDExMTdDRUZEMTAwQjkwOEIx
IC8qIEF0b21pY1N0cmluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0zODQsOCArMzgyLDYgQEAKIAkJODZFQzlEQzYxMzI4REY4MjAwMkIyQUQ3
IC8qIERGR0dlbmVyYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NkVDOURCNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbklu
Zm8uaCAqLzsgfTsKIAkJODZFQzlEQzcxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUM5REI3MTMy
OERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgKi87IH07CiAJCTg2RUM5REM4MTMyOERGODIw
MDJCMkFENyAvKiBERkdHcmFwaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODZFQzlEQjgxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmggKi87IH07
Ci0JCTg2RUM5REM5MTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb2RlR2VuZXJhdG9yLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUM5REI5MTMy
OERGODIwMDJCMkFENyAvKiBERkdKSVRDb2RlR2VuZXJhdG9yLmNwcCAqLzsgfTsKLQkJODZFQzlE
Q0ExMzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJVENvZGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUM5REJBMTMyOERGODIwMDJCMkFE
NyAvKiBERkdKSVRDb2RlR2VuZXJhdG9yLmggKi87IH07CiAJCTg2RUM5RENCMTMyOERGODIwMDJC
MkFENyAvKiBERkdKSVRDb21waWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NkVDOURCQjEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGls
ZXIuY3BwICovOyB9OwogCQk4NkVDOURDQzEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGls
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUM5
REJDMTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb21waWxlci5oICovOyB9OwogCQk4NkVDOURD
RjEzMjhERjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVDOURCRjEzMjhERjgyMDAyQjJBRDcgLyog
REZHT3BlcmF0aW9ucy5jcHAgKi87IH07CkBAIC0xMTEyLDEwICsxMTA4LDggQEAKIAkJODY3MDRC
ODMxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFlhcnJQYXR0ZXJuLmg7IHBhdGggPSB5YXJyL1lhcnJQYXR0ZXJuLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2N0ZDMzVGMTFCNzYzOTUwMDI1MTA1RSAvKiBK
YXZhU2NyaXB0Q29yZS5KU1ZBTFVFMzJfNjRvbmx5LmV4cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
ZXhwb3J0czsgcGF0aCA9IEphdmFTY3JpcHRDb3JlLkpTVkFMVUUzMl82NG9ubHkuZXhwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjdGQzM2MTExQjc2Mzk1MDAyNTEwNUUgLyogSmF2
YVNjcmlwdENvcmUuSlNWQUxVRTY0b25seS5leHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmV4cG9y
dHM7IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5KU1ZBTFVFNjRvbmx5LmV4cDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJODY4ODBGMTgxNDMyOEJCOTAwQjA4RDQyIC8qIERGR0pJVENvZGVH
ZW5lcmF0b3IzMl82NC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwOyBwYXRoID0gZGZnL0RGR0pJVENvZGVHZW5lcmF0
b3IzMl82NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2ODgwRjFBMTQzMjhC
QjkwMEIwOEQ0MiAvKiBERkdKSVRDb21waWxlcklubGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSklUQ29tcGlsZXJJbmxpbmVNZXRob2RzLmg7IHBhdGgg
PSBkZmcvREZHSklUQ29tcGlsZXJJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTg2ODgwRjFCMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwOyBwYXRoID0gZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4Njg4MEY0MzE0MzUzMUE3MDBCMDhENDIgLyog
REZHSklUQ29kZUdlbmVyYXRvcjY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHA7IHBhdGggPSBkZmcvREZHSklUQ29kZUdl
bmVyYXRvcjY0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY4ODBGNEMxNDM1
M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA7IHBhdGggPSBkZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2
OEJGQTAwMTE3Q0VGRDEwMEI5MDhCMSAvKiBBdG9taWNTdHJpbmcuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQXRvbWljU3RyaW5nLmNwcDsgcGF0aCA9IHRleHQvQXRv
bWljU3RyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY4QkZBMDExMTdD
RUZEMTAwQjkwOEIxIC8qIEF0b21pY1N0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBdG9taWNTdHJpbmcuaDsgcGF0aCA9IHRleHQvQXRvbWljU3RyaW5nLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTY5LDggKzExNjMsNiBAQAogCQk4NkVDOURCNjEz
MjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHR2VuZXJhdGlvbkluZm8uaDsgcGF0aCA9IGRmZy9ERkdHZW5lcmF0
aW9uSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkVDOURCNzEzMjhERjgy
MDAyQjJBRDcgLyogREZHR3JhcGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHR3JhcGguY3BwOyBwYXRoID0gZGZnL0RGR0dyYXBoLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODZFQzlEQjgxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0dyYXBoLmg7IHBhdGggPSBkZmcv
REZHR3JhcGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODZFQzlEQjkxMzI4REY4
MjAwMkIyQUQ3IC8qIERGR0pJVENvZGVHZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHSklUQ29kZUdlbmVyYXRvci5jcHA7IHBhdGggPSBkZmcvREZH
SklUQ29kZUdlbmVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg2RUM5
REJBMTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb2RlR2VuZXJhdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0pJVENvZGVHZW5lcmF0b3IuaDsgcGF0aCA9IGRmZy9E
RkdKSVRDb2RlR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2RUM5
REJCMTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb21waWxlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdKSVRDb21waWxlci5jcHA7IHBhdGggPSBkZmcvREZH
SklUQ29tcGlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkVDOURCQzEz
MjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHSklUQ29tcGlsZXIuaDsgcGF0aCA9IGRmZy9ERkdKSVRDb21waWxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkVDOURCRjEzMjhERjgyMDAyQjJBRDcg
LyogREZHT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdPcGVyYXRpb25zLmNwcDsgcGF0aCA9IGRmZy9ERkdPcGVyYXRpb25zLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzMzIsMTAgKzIzMjQsNiBAQAogCQkJCTg2RUM5REI3
MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgKi8sCiAJCQkJODZFQzlEQjgxMzI4REY4
MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmggKi8sCiAJCQkJMEZEODJFRjMxNDIzMDczOTAwMTc5Qzk0
IC8qIERGR0ludHJpbnNpYy5oICovLAotCQkJCTg2RUM5REI5MTMyOERGODIwMDJCMkFENyAvKiBE
RkdKSVRDb2RlR2VuZXJhdG9yLmNwcCAqLywKLQkJCQk4NkVDOURCQTEzMjhERjgyMDAyQjJBRDcg
LyogREZHSklUQ29kZUdlbmVyYXRvci5oICovLAotCQkJCTg2ODgwRjE4MTQzMjhCQjkwMEIwOEQ0
MiAvKiBERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwICovLAotCQkJCTg2ODgwRjQzMTQzNTMx
QTcwMEIwOEQ0MiAvKiBERkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwICovLAogCQkJCTg2RUM5REJC
MTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb21waWxlci5jcHAgKi8sCiAJCQkJODZFQzlEQkMx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmggKi8sCiAJCQkJODY4ODBGMUExNDMy
OEJCOTAwQjA4RDQyIC8qIERGR0pJVENvbXBpbGVySW5saW5lTWV0aG9kcy5oICovLApAQCAtMjYw
OSw3ICsyNTk3LDYgQEAKIAkJCQk4NkVDOURDNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNv
ZGVQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM2MTMyOERGODIwMDJCMkFENyAv
KiBERkdHZW5lcmF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQzgxMzI4REY4
MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmggaW4gSGVhZGVycyAqLywKLQkJCQk4NkVDOURDQTEzMjhE
RjgyMDAyQjJBRDcgLyogREZHSklUQ29kZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZFQzlEQ0MxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NkVDQTNFQTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQyRTMxMzYxMzRGRjBBNjAwQUZBREI1IC8qIEhhbmRsZUhlYXAuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzMwMSw3ICszMjg4LDYgQEAKIAkJCQkxNDk1NTlFRTBERENEREY3MDA2NDgw
ODcgLyogRGVidWdnZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzQx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTg2RUM5REM3MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQk4NkVDOURDOTEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29kZUdlbmVyYXRvci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDQjEzMjhERjgyMDAyQjJBRDcgLyogREZHSklU
Q29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQ0YxMzI4REY4MjAwMkIyQUQ3
IC8qIERGR09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlERDIxMzI4REY4
MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzQ2
Myw5ICszNDQ5LDcgQEAKIAkJCQkxQTA4Mjc3OTE0MjE2OEQ3MDA5MENDQUMgLyogQmluYXJ5U2Vt
YXBob3JlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDQ1NkIxMTQyN0ZCOTUwMDM3REE2OCAv
KiBBbGxvY2F0aW9uU3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZGQTlFOTExNDJCQkIy
RTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk4Njg4
MEYxQzE0MzI4QkI5MDBCMDhENDIgLyogREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTg2ODgwRjFGMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTg2ODgwRjQ0MTQzNTMxQTgwMEIwOEQ0
MiAvKiBERkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4ODBG
NEQxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZFMjI4RUUxNDM2QUIyQzAwMTk2QzQ4IC8qIEhldXJpc3RpY3MuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY2MjAxNzkxNDNGQ0Q0ODAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3Rh
dGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwCShyZXZpc2lvbiAxMDAyMzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTM3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJERkdKSVRDb2RlR2VuZXJhdG9yLmgiCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQot
I2luY2x1ZGUgIkRGR0pJVENvbXBpbGVySW5saW5lTWV0aG9kcy5oIgotI2luY2x1ZGUgIkRGR1Nw
ZWN1bGF0aXZlSklULmgiCi0jaW5jbHVkZSAiTGlua0J1ZmZlci5oIgotCi1uYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7Ci0KLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotCi1HUFJSZWcgSklU
Q29kZUdlbmVyYXRvcjo6ZmlsbEludGVnZXIoTm9kZUluZGV4IG5vZGVJbmRleCwgRGF0YUZvcm1h
dCYgcmV0dXJuRm9ybWF0KQotewotICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3Rlcigp
OwotICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVn
aXN0ZXJdOwotCi0gICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Tm9u
ZSkgewotICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKLQotICAgICAgICBpZiAobm9k
ZS5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVh
bFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAgICAgICAgICAgaWYgKGlzSW50MzJD
b25zdGFudChub2RlSW5kZXgpKQotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCBncHIpOwotICAg
ICAgICAgICAgZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKQotICAgICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAgICAgICAg
ICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwotICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGpzVmFsdWUucGF5bG9h
ZCgpKSwgZ3ByKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEpTIHx8IGluZm8uc3BpbGxG
b3JtYXQoKSA9PSBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKLSAgICAgICAgICAgIG1fZ3Bycy5yZXRh
aW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKLSAgICAgICAgICAg
IG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBn
cHIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5mby5maWxsSW50ZWdlcihncHIpOwotICAgICAg
ICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKLSAgICAgICAgcmV0dXJuIGdwcjsK
LSAgICB9Ci0KLSAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewotICAgIGNhc2Ug
RGF0YUZvcm1hdE5vbmU6Ci0gICAgICAgIC8vIFNob3VsZCBoYXZlIGZpbGxlZCwgYWJvdmUuCi0g
ICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6Ci0gICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgot
ICAgIGNhc2UgRGF0YUZvcm1hdEpTOgotICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6Ci0gICAgY2Fz
ZSBEYXRhRm9ybWF0SlNDZWxsOgotICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46Ci0gICAgY2Fz
ZSBEYXRhRm9ybWF0SlNCb29sZWFuOgotICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6Ci0gICAg
ICAgIC8vIFNob3VsZCBvbmx5IGJlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBpZiB3ZSBrbm93IHRo
aXMgb3BlcmFuZCB0byBiZSBpbnRlZ2VyLgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LQotICAgIGNhc2UgRGF0YUZvcm1hdEpTSW50ZWdlcjogewotICAgICAgICBHUFJSZWcgdGFnR1BS
ID0gaW5mby50YWdHUFIoKTsKLSAgICAgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBpbmZvLnBheWxv
YWRHUFIoKTsKLSAgICAgICAgbV9ncHJzLmxvY2sodGFnR1BSKTsKLSAgICAgICAgbV9qaXQuaml0
QXNzZXJ0SXNKU0ludDMyKHRhZ0dQUik7Ci0gICAgICAgIG1fZ3Bycy51bmxvY2sodGFnR1BSKTsK
LSAgICAgICAgbV9ncHJzLmxvY2socGF5bG9hZEdQUik7Ci0gICAgICAgIG1fZ3Bycy5yZWxlYXNl
KHRhZ0dQUik7Ci0gICAgICAgIG1fZ3Bycy5yZWxlYXNlKHBheWxvYWRHUFIpOwotICAgICAgICBt
X2dwcnMucmV0YWluKHBheWxvYWRHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckludGVn
ZXIpOwotICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKHBheWxvYWRHUFIpOwotICAgICAgICByZXR1
cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKLSAgICAgICAgcmV0dXJuIHBheWxvYWRHUFI7
Ci0gICAgfQotCi0gICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjogewotICAgICAgICBHUFJSZWcg
Z3ByID0gaW5mby5ncHIoKTsKLSAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKLSAgICAgICAgbV9q
aXQuaml0QXNzZXJ0SXNJbnQzMihncHIpOwotICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9y
bWF0SW50ZWdlcjsKLSAgICAgICAgcmV0dXJuIGdwcjsKLSAgICB9Ci0gICAgfQotCi0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEludmFsaWRHUFJSZWc7Ci19Ci0KLUZQUlJl
ZyBKSVRDb2RlR2VuZXJhdG9yOjpmaWxsRG91YmxlKE5vZGVJbmRleCBub2RlSW5kZXgpCi17Ci0g
ICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgR2VuZXJhdGlvbkluZm8m
IGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0KLSAgICBpZiAoaW5m
by5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXROb25lKSB7Ci0KLSAgICAgICAgaWYgKG5v
ZGUuaGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2Rl
SW5kZXgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCBub3QgYmUgcmVhY2hh
YmxlPwotICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwotICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0
YW50KG5vZGVJbmRleCkpLCBncHIpOwotICAgICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3By
LCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7Ci0gICAgICAgICAgICAgICAg
aW5mby5maWxsSW50ZWdlcihncHIpOwotICAgICAgICAgICAgICAgIHVubG9jayhncHIpOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpIHsKLSAgICAg
ICAgICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKLSAgICAgICAgICAgICAgICBt
X2ppdC5sb2FkRG91YmxlKGFkZHJlc3NPZkRvdWJsZUNvbnN0YW50KG5vZGVJbmRleCksIGZwcik7
Ci0gICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3Bp
bGxPcmRlckRvdWJsZSk7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZwcjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgLy8gRklYTUU6IHNob3VsZCBub3QgYmUgcmVhY2hhYmxlPwotICAgICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgRGF0YUZvcm1hdCBzcGlsbEZvcm1hdCA9IGluZm8uc3BpbGxGb3JtYXQo
KTsKLSAgICAgICAgICAgIEFTU0VSVChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7Ci0gICAg
ICAgICAgICBpZiAoc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdEpTRG91YmxlKSB7Ci0gICAgICAg
ICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7Ci0gICAgICAgICAgICAgICAgbV9q
aXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBm
cHIpOwotICAgICAgICAgICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIs
IFNwaWxsT3JkZXJTcGlsbGVkKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnBy
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZnByOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKLSAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
SklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6SW50MzJUYWcpKTsKLSAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZnByKTsKLSAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIGhhc1VuYm94ZWREb3VibGUgPSBtX2ppdC5qdW1wKCk7Ci0KLSAgICAgICAgICAg
IGlzSW50ZWdlci5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJU
b0RvdWJsZShKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBmcHIpOwot
Ci0gICAgICAgICAgICBoYXNVbmJveGVkRG91YmxlLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAg
IG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsK
LSAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIpOwotICAgICAgICAgICAgcmV0dXJuIGZw
cjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgp
KSB7Ci0gICAgY2FzZSBEYXRhRm9ybWF0Tm9uZToKLSAgICAgICAgLy8gU2hvdWxkIGhhdmUgZmls
bGVkLCBhYm92ZS4KLSAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgotICAgIGNhc2UgRGF0YUZvcm1h
dEpTQ2VsbDoKLSAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgotICAgIGNhc2UgRGF0YUZvcm1h
dEpTQm9vbGVhbjoKLSAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdlOgotICAgICAgICAvLyBTaG91
bGQgb25seSBiZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gaWYgd2Uga25vdyB0aGlzIG9wZXJhbmQg
dG8gYmUgbnVtZXJpYy4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICBjYXNl
IERhdGFGb3JtYXRKU0ludGVnZXI6Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlM6IHsKLSAgICAgICAg
R1BSUmVnIHRhZ0dQUiA9IGluZm8udGFnR1BSKCk7Ci0gICAgICAgIEdQUlJlZyBwYXlsb2FkR1BS
ID0gaW5mby5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgp
OwotICAgICAgICBtX2dwcnMubG9jayh0YWdHUFIpOwotICAgICAgICBtX2dwcnMubG9jayhwYXls
b2FkR1BSKTsKLQotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBoYXNVbmJveGVkRG91YmxlOwot
Ci0gICAgICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdEpTSW50ZWdl
cikgewotICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0g
ICAgICAgICAgICBtX2ppdC5qaXRBc3NlcnRJc0pTRG91YmxlKHRhZ0dQUik7Ci0gICAgICAgICAg
ICB1bmJveERvdWJsZSh0YWdHUFIsIHBheWxvYWRHUFIsIGZwciwgc2NyYXRjaC5mcHIoKSk7Ci0g
ICAgICAgICAgICBoYXNVbmJveGVkRG91YmxlID0gbV9qaXQuanVtcCgpOwotICAgICAgICAgICAg
aXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKLSAgICAgICAgfQotCi0gICAgICAgIG1faml0LmNvbnZl
cnRJbnQzMlRvRG91YmxlKHBheWxvYWRHUFIsIGZwcik7Ci0KLSAgICAgICAgaWYgKGluZm8ucmVn
aXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0SlNJbnRlZ2VyKQotICAgICAgICAgICAgaGFzVW5i
b3hlZERvdWJsZS5saW5rKCZtX2ppdCk7Ci0KLSAgICAgICAgbV9ncHJzLnJlbGVhc2UodGFnR1BS
KTsKLSAgICAgICAgbV9ncHJzLnJlbGVhc2UocGF5bG9hZEdQUik7Ci0gICAgICAgIG1fZ3Bycy51
bmxvY2sodGFnR1BSKTsKLSAgICAgICAgbV9ncHJzLnVubG9jayhwYXlsb2FkR1BSKTsKLSAgICAg
ICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7
Ci0gICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIpOwotICAgICAgICBpbmZvLmtpbGxTcGlsbGVk
KCk7Ci0gICAgICAgIHJldHVybiBmcHI7Ci0gICAgfQotCi0gICAgY2FzZSBEYXRhRm9ybWF0SW50
ZWdlcjogewotICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKLSAgICAgICAgR1BS
UmVnIGdwciA9IGluZm8uZ3ByKCk7Ci0gICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7Ci0gICAgICAg
IG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGdwciwgZnByKTsKLSAgICAgICAgbV9ncHJzLnVu
bG9jayhncHIpOwotICAgICAgICByZXR1cm4gZnByOwotICAgIH0KLQotICAgIGNhc2UgRGF0YUZv
cm1hdEpTRG91YmxlOiAKLSAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6IHsKLSAgICAgICAgRlBS
UmVnIGZwciA9IGluZm8uZnByKCk7Ci0gICAgICAgIG1fZnBycy5sb2NrKGZwcik7Ci0gICAgICAg
IHJldHVybiBmcHI7Ci0gICAgfQotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiBJbnZhbGlkRlBSUmVnOwotfQotCi1ib29sIEpJVENvZGVHZW5lcmF0b3I6OmZp
bGxKU1ZhbHVlKE5vZGVJbmRleCBub2RlSW5kZXgsIEdQUlJlZyYgdGFnR1BSLCBHUFJSZWcmIHBh
eWxvYWRHUFIsIEZQUlJlZyYgZnByKQotewotICAgIC8vIEZJWE1FOiBGb3IgZG91YmxlIHdlIGNv
dWxkIGZpbGwgd2l0aCBhIEZQUi4KLSAgICBVTlVTRURfUEFSQU0oZnByKTsKLQotICAgIE5vZGUm
IG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOwotICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0g
bV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwotCi0gICAgc3dpdGNoIChpbmZvLnJl
Z2lzdGVyRm9ybWF0KCkpIHsKLSAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7Ci0KLSAgICAgICAg
aWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFu
dChub2RlSW5kZXgpKSB7Ci0gICAgICAgICAgICAgICAgdGFnR1BSID0gYWxsb2NhdGUoKTsKLSAg
ICAgICAgICAgICAgICBwYXlsb2FkR1BSID0gYWxsb2NhdGUoKTsKLSAgICAgICAgICAgICAgICBt
X2ppdC5lbWl0TG9hZChub2RlSW5kZXgsIHRhZ0dQUiwgcGF5bG9hZEdQUik7Ci0gICAgICAgICAg
ICAgICAgaW5mby5maWxsSlNWYWx1ZSh0YWdHUFIsIHBheWxvYWRHUFIsIERhdGFGb3JtYXRKU0lu
dGVnZXIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0YWdHUFIgPSBh
bGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIHBheWxvYWRHUFIgPSBhbGxvY2F0ZSgpOwotICAg
ICAgICAgICAgICAgIG1faml0LmVtaXRMb2FkKG5vZGVJbmRleCwgdGFnR1BSLCBwYXlsb2FkR1BS
KTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKHRhZ0dQUiwgcGF5bG9hZEdQUiwg
RGF0YUZvcm1hdEpTKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbV9ncHJzLnJldGFp
bih0YWdHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAg
ICAgIG1fZ3Bycy5yZXRhaW4ocGF5bG9hZEdQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVy
Q29uc3RhbnQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgRGF0YUZvcm1hdCBzcGls
bEZvcm1hdCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKLSAgICAgICAgICAgIEFTU0VSVChzcGlsbEZv
cm1hdCAmIERhdGFGb3JtYXRKUyk7Ci0gICAgICAgICAgICB0YWdHUFIgPSBhbGxvY2F0ZSgpOwot
ICAgICAgICAgICAgcGF5bG9hZEdQUiA9IGFsbG9jYXRlKCk7Ci0gICAgICAgICAgICBtX2ppdC5l
bWl0TG9hZChub2RlSW5kZXgsIHRhZ0dQUiwgcGF5bG9hZEdQUik7Ci0gICAgICAgICAgICBtX2dw
cnMucmV0YWluKHRhZ0dQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0g
ICAgICAgICAgICBtX2dwcnMucmV0YWluKHBheWxvYWRHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3Bp
bGxPcmRlclNwaWxsZWQpOwotICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSh0YWdHUFIsIHBh
eWxvYWRHUFIsIHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRKU0RvdWJsZSA/IERhdGFGb3JtYXRK
UyA6IHNwaWxsRm9ybWF0KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6Ci0gICAgY2FzZSBEYXRhRm9ybWF0Q2Vs
bDoKLSAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOiB7Ci0gICAgICAgIEdQUlJlZyBncHIgPSBp
bmZvLmdwcigpOwotICAgICAgICAvLyBJZiB0aGUgcmVnaXN0ZXIgaGFzIGFscmVhZHkgYmVlbiBs
b2NrZWQgd2UgbmVlZCB0byB0YWtlIGEgY29weS4KLSAgICAgICAgaWYgKG1fZ3Bycy5pc0xvY2tl
ZChncHIpKSB7Ci0gICAgICAgICAgICBwYXlsb2FkR1BSID0gYWxsb2NhdGUoKTsKLSAgICAgICAg
ICAgIG1faml0Lm1vdmUoZ3ByLCBwYXlsb2FkR1BSKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHBheWxvYWRHUFIgPSBncHI7Ci0gICAgICAgICAgICBtX2dwcnMubG9jayhncHIpOwot
ICAgICAgICB9Ci0gICAgICAgIHRhZ0dQUiA9IGFsbG9jYXRlKCk7Ci0gICAgICAgIHVpbnQzMl90
IHRhZyA9IEpTVmFsdWU6OkVtcHR5VmFsdWVUYWc7Ci0gICAgICAgIERhdGFGb3JtYXQgZmlsbEZv
cm1hdCA9IERhdGFGb3JtYXRKUzsKLSAgICAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0
KCkpIHsKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjoKLSAgICAgICAgICAgIHRhZyA9
IEpTVmFsdWU6OkludDMyVGFnOwotICAgICAgICAgICAgZmlsbEZvcm1hdCA9IERhdGFGb3JtYXRK
U0ludGVnZXI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0Q2Vs
bDoKLSAgICAgICAgICAgIHRhZyA9IEpTVmFsdWU6OkNlbGxUYWc7Ci0gICAgICAgICAgICBmaWxs
Rm9ybWF0ID0gRGF0YUZvcm1hdEpTQ2VsbDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIERhdGFGb3JtYXRCb29sZWFuOgotICAgICAgICAgICAgdGFnID0gSlNWYWx1ZTo6Qm9vbGVh
blRhZzsKLSAgICAgICAgICAgIGZpbGxGb3JtYXQgPSBEYXRhRm9ybWF0SlNCb29sZWFuOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbTMyKHRhZyksIHRhZ0dQUik7Ci0gICAgICAgIG1fZ3Bycy5yZWxlYXNl
KGdwcik7Ci0gICAgICAgIG1fZ3Bycy5yZXRhaW4odGFnR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNw
aWxsT3JkZXJKUyk7Ci0gICAgICAgIG1fZ3Bycy5yZXRhaW4ocGF5bG9hZEdQUiwgdmlydHVhbFJl
Z2lzdGVyLCBTcGlsbE9yZGVySlMpOwotICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKHRhZ0dQUiwg
cGF5bG9hZEdQUiwgZmlsbEZvcm1hdCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOgotICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZTog
ewotICAgICAgICBGUFJSZWcgb2xkRlBSID0gaW5mby5mcHIoKTsKLSAgICAgICAgbV9mcHJzLmxv
Y2sob2xkRlBSKTsKLSAgICAgICAgdGFnR1BSID0gYWxsb2NhdGUoKTsKLSAgICAgICAgcGF5bG9h
ZEdQUiA9IGFsbG9jYXRlKCk7Ci0gICAgICAgIGJveERvdWJsZShvbGRGUFIsIHRhZ0dQUiwgcGF5
bG9hZEdQUik7Ci0gICAgICAgIG1fZnBycy51bmxvY2sob2xkRlBSKTsKLSAgICAgICAgbV9mcHJz
LnJlbGVhc2Uob2xkRlBSKTsKLSAgICAgICAgbV9ncHJzLnJldGFpbih0YWdHUFIsIHZpcnR1YWxS
ZWdpc3RlciwgU3BpbGxPcmRlckpTKTsKLSAgICAgICAgbV9ncHJzLnJldGFpbihwYXlsb2FkR1BS
LCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7Ci0gICAgICAgIGluZm8uZmlsbEpTVmFs
dWUodGFnR1BSLCBwYXlsb2FkR1BSLCBEYXRhRm9ybWF0SlMpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBjYXNlIERhdGFGb3JtYXRKUzoKLSAgICBjYXNlIERhdGFGb3JtYXRK
U0ludGVnZXI6Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgotICAgIGNhc2UgRGF0YUZvcm1h
dEpTQm9vbGVhbjogewotICAgICAgICB0YWdHUFIgPSBpbmZvLnRhZ0dQUigpOwotICAgICAgICBw
YXlsb2FkR1BSID0gaW5mby5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIG1fZ3Bycy5sb2NrKHRhZ0dQ
Uik7Ci0gICAgICAgIG1fZ3Bycy5sb2NrKHBheWxvYWRHUFIpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6Ci0gICAgICAg
IC8vIHRoaXMgdHlwZSBjdXJyZW50bHkgbmV2ZXIgb2NjdXJzCi0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlVmFsdWVU
b051bWJlcihOb2RlJiBub2RlKQotewotICAgIGlmIChpc0tub3duTnVtZXJpYyhub2RlLmNoaWxk
MSgpKSkgewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7
Ci0gICAgICAgIG9wMS5maWxsKCk7Ci0gICAgICAgIGlmIChvcDEuaXNEb3VibGUoKSkgewotICAg
ICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwotICAgICAgICAgICAgbV9q
aXQubW92ZURvdWJsZShvcDEuZnByKCksIHJlc3VsdC5mcHIoKSk7Ci0gICAgICAgICAgICBkb3Vi
bGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMsIG9wMSk7Ci0gICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzLCBvcDEsIGZhbHNlKTsKLSAgICAg
ICAgICAgIG1faml0Lm1vdmUob3AxLnRhZ0dQUigpLCByZXN1bHRUYWcuZ3ByKCkpOwotICAgICAg
ICAgICAgbV9qaXQubW92ZShvcDEucGF5bG9hZEdQUigpLCByZXN1bHRQYXlsb2FkLmdwcigpKTsK
LSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2Fk
LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMsIG9wMSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dFBheWxvYWQodGhpcywgb3AxLCBmYWxzZSk7Ci0KLSAgICBBU1NFUlQoIWlzSW50MzJDb25zdGFu
dChub2RlLmNoaWxkMSgpKSk7Ci0gICAgQVNTRVJUKCFpc051bWJlckNvbnN0YW50KG5vZGUuY2hp
bGQxKCkpKTsKLQotICAgIEdQUlJlZyB0YWdHUFIgPSBvcDEudGFnR1BSKCk7Ci0gICAgR1BSUmVn
IHBheWxvYWRHUFIgPSBvcDEucGF5bG9hZEdQUigpOwotICAgIEdQUlJlZyByZXN1bHRUYWdHUFIg
PSByZXN1bHRUYWcuZ3ByKCk7Ci0gICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHRQ
YXlsb2FkLmdwcigpOwotICAgIG9wMS51c2UoKTsKLQotICAgIEpJVENvbXBpbGVyOjpKdW1wIGlz
SW50ZWdlciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdGFnR1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBu
b25OdW1lcmljID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
dGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSk7Ci0KLSAgICAvLyBGaXJz
dCwgaWYgd2UgZ2V0IGhlcmUgd2UgaGF2ZSBhIGRvdWJsZSBlbmNvZGVkIGFzIGEgSlNWYWx1ZQot
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhc1VuYm94ZWREb3VibGUgPSBtX2ppdC5qdW1wKCk7Ci0K
LSAgICAvLyBOZXh0IGhhbmRsZSBjZWxscyAoJiBvdGhlciBKUyBpbW1lZGlhdGVzKQotICAgIG5v
bk51bWVyaWMubGluaygmbV9qaXQpOwotICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgY2FsbE9wZXJhdGlvbihkZmdDb252ZXJ0
SlNWYWx1ZVRvTnVtYmVyLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgdGFnR1BSLCBwYXlsb2Fk
R1BSKTsKLSAgICBib3hEb3VibGUoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIHJlc3VsdFRhZ0dQ
UiwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRU
YWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhc0NhbGxl
ZFRvTnVtYmVyID0gbV9qaXQuanVtcCgpOwotICAgIAotICAgIC8vIEZpbmFsbHksIGhhbmRsZSBp
bnRlZ2Vycy4KLSAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwotICAgIGhhc1VuYm94ZWREb3Vi
bGUubGluaygmbV9qaXQpOwotICAgIG1faml0Lm1vdmUodGFnR1BSLCByZXN1bHRUYWdHUFIpOwot
ICAgIG1faml0Lm1vdmUocGF5bG9hZEdQUiwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgaGFzQ2Fs
bGVkVG9OdW1iZXIubGluaygmbV9qaXQpOwotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BS
LCByZXN1bHRQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBs
aWNpdGx5KTsKLX0KLQotdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVZhbHVl
VG9JbnQzMihOb2RlJiBub2RlKQotewotICAgIEFTU0VSVCghaXNJbnQzMkNvbnN0YW50KG5vZGUu
Y2hpbGQxKCkpKTsKLQotICAgIGlmIChpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSkgewot
ICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKLSAgICAgICAgbV9qaXQubW92ZShvcDEu
Z3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHZW5lcmF0
aW9uSW5mbyYgY2hpbGRJbmZvID0gbV9nZW5lcmF0aW9uSW5mb1thdChub2RlLmNoaWxkMSgpKS52
aXJ0dWFsUmVnaXN0ZXIoKV07Ci0gICAgaWYgKGNoaWxkSW5mby5pc0pTRG91YmxlKCkpIHsKLSAg
ICAgICAgRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIEZQUlJlZyBmcHIgPSBvcDEuZnByKCk7
Ci0gICAgICAgIEdQUlJlZyBncHIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIG9wMS51c2UoKTsK
LSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgdHJ1bmNhdGVkVG9JbnRlZ2VyID0gbV9qaXQuYnJh
bmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBKSVRDb21waWxlcjo6QnJhbmNoSWZU
cnVuY2F0ZVN1Y2Nlc3NmdWwpOwotCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKGdw
cik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24odG9JbnQzMiwgZ3ByLCBmcHIpOwotICAgICAgICBz
aWxlbnRGaWxsQWxsUmVnaXN0ZXJzKGdwcik7Ci0KLSAgICAgICAgdHJ1bmNhdGVkVG9JbnRlZ2Vy
LmxpbmsoJm1faml0KTsKLSAgICAgICAgaW50ZWdlclJlc3VsdChncHIsIG1fY29tcGlsZUluZGV4
LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgR1BSUmVnIHRhZ0dQUiA9IG9wMS50YWdHUFIoKTsK
LSAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7Ci0gICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICBvcDEudXNlKCk7Ci0KLSAgICBKSVRDb21waWxl
cjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0KLSAgICAvLyBGaXJz
dCBoYW5kbGUgbm9uLWludGVnZXJzCi0gICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0
R1BSKTsKLSAgICBjYWxsT3BlcmF0aW9uKGRmZ0NvbnZlcnRKU1ZhbHVlVG9JbnQzMiwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIsIHRhZ0dQUiwgcGF5bG9hZEdQUik7Ci0gICAgbV9qaXQubW92ZShH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKLSAgICBzaWxlbnRGaWxsQWxsUmVn
aXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgaGFzQ2FsbGVkVG9JbnQz
MiA9IG1faml0Lmp1bXAoKTsKLQotICAgIC8vIFRoZW4gaGFuZGxlIGludGVnZXJzLgotICAgIGlz
SW50ZWdlci5saW5rKCZtX2ppdCk7Ci0gICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRH
UFIpOwotICAgIGhhc0NhbGxlZFRvSW50MzIubGluaygmbV9qaXQpOwotICAgIGludGVnZXJSZXN1
bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5
KTsKLX0KLQotdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVVJbnQzMlRvTnVt
YmVyKE5vZGUmIG5vZGUpCi17Ci0gICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOwotICAgIEZQUlRlbXBvcmFyeSBib3hlcih0aGlzKTsKLSAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0VGFnKHRoaXMsIG9wMSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhp
cyk7Ci0gICAgICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1wIHBvc2l0aXZlID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgb3AxLmdwcigpLCBUcnVz
dGVkSW1tMzIoMCkpOwotICAgICAgICAKLSAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShv
cDEuZ3ByKCksIGJveGVyLmZwcigpKTsKLSAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tUHRyKCZ0d29Ub1RoZTMyKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7IC8vIHJldXNlIHJl
c3VsdFBheWxvYWQgcmVnaXN0ZXIgaGVyZS4KLSAgICBtX2ppdC5hZGREb3VibGUoSklUQ29tcGls
ZXI6OkFkZHJlc3MocmVzdWx0UGF5bG9hZC5ncHIoKSwgMCksIGJveGVyLmZwcigpKTsKLSAgICAg
ICAgCi0gICAgYm94RG91YmxlKGJveGVyLmZwcigpLCByZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBh
eWxvYWQuZ3ByKCkpOwotICAgICAgICAKLSAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9q
aXQuanVtcCgpOwotICAgICAgICAKLSAgICBwb3NpdGl2ZS5saW5rKCZtX2ppdCk7Ci0gICAgICAg
IAotICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVzdWx0
VGFnLmdwcigpKTsKLSAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIo
KSk7Ci0gICAgICAgIAotICAgIGRvbmUubGluaygmbV9qaXQpOwotCi0gICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsK
LX0KLQotdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZUtub3duQ29uc3RhbnRB
cml0aE9wKE5vZGVUeXBlIG9wLCBOb2RlSW5kZXggcmVnQ2hpbGQsIE5vZGVJbmRleCBpbW1DaGls
ZCwgYm9vbCBjb21tdXRlKQotewotICAgIEpTVmFsdWVPcGVyYW5kIHJlZ0FyZyh0aGlzLCByZWdD
aGlsZCk7Ci0gICAgcmVnQXJnLmZpbGwoKTsKLSAgICAKLSAgICBpZiAocmVnQXJnLmlzRG91Ymxl
KCkpIHsKLSAgICAgICAgRlBSUmVnIHJlZ0FyZ0ZQUiA9IHJlZ0FyZy5mcHIoKTsKLSAgICAgICAg
RlBSVGVtcG9yYXJ5IGltbSh0aGlzKTsKLSAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
LCByZWdBcmcpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAg
RlBSUmVnIGltbUZQUiA9IGltbS5mcHIoKTsKLSAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJl
c3VsdC5mcHIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwot
ICAgICAgICB1c2UocmVnQ2hpbGQpOwotICAgICAgICB1c2UoaW1tQ2hpbGQpOwotCi0gICAgICAg
IGludDMyX3QgaW1tMzIgPSB2YWx1ZU9mSW50MzJDb25zdGFudChpbW1DaGlsZCk7Ci0gICAgICAg
IG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKGltbTMyKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIG1f
aml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHNjcmF0Y2hHUFIsIGltbUZQUik7Ci0KLSAgICAgICAg
c3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIFZhbHVlQWRkOgotICAgICAgICBjYXNlIEFyaXRo
QWRkOgotICAgICAgICAgICAgbV9qaXQuYWRkRG91YmxlKHJlZ0FyZ0ZQUiwgaW1tRlBSLCByZXN1
bHRGUFIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBjYXNlIEFyaXRo
U3ViOgotICAgICAgICAgICAgbV9qaXQuc3ViRG91YmxlKHJlZ0FyZ0ZQUiwgaW1tRlBSLCByZXN1
bHRGUFIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZG91YmxlUmVzdWx0KHJlc3VsdEZQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2Fs
bGVkRXhwbGljaXRseSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHUFJSZWcgcmVn
QXJnVGFnR1BSID0gcmVnQXJnLnRhZ0dQUigpOwotICAgIEdQUlJlZyByZWdBcmdQYXlsb2FkR1BS
ID0gcmVnQXJnLnBheWxvYWRHUFIoKTsKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMs
IHJlZ0FyZyk7Ci0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcywgcmVnQXJnLCBm
YWxzZSk7Ci0gICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHJlc3VsdFRhZy5ncHIoKTsKLSAgICBH
UFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7Ci0gICAgRlBSVGVt
cG9yYXJ5IHRtcDEodGhpcyk7Ci0gICAgRlBSVGVtcG9yYXJ5IHRtcDIodGhpcyk7Ci0gICAgRlBS
UmVnIHRtcDFGUFIgPSB0bXAxLmZwcigpOwotICAgIEZQUlJlZyB0bXAyRlBSID0gdG1wMi5mcHIo
KTsKLSAgICB1c2UocmVnQ2hpbGQpOwotICAgIHVzZShpbW1DaGlsZCk7Ci0KLSAgICBKSVRDb21w
aWxlcjo6SnVtcCBub3RJbnQ7Ci0gICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50MzJDb25zdGFu
dChpbW1DaGlsZCk7Ci0KLSAgICBpZiAoIWlzS25vd25OdW1lcmljKHJlZ0NoaWxkKSkKLSAgICAg
ICAgbm90SW50ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZWdB
cmdUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwotICAgIAotICAgIEpJ
VENvbXBpbGVyOjpKdW1wIG92ZXJmbG93OwotCi0gICAgc3dpdGNoIChvcCkgewotICAgIGNhc2Ug
VmFsdWVBZGQ6Ci0gICAgY2FzZSBBcml0aEFkZDoKLSAgICAgICAgb3ZlcmZsb3cgPSBtX2ppdC5i
cmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIHJlZ0FyZ1BheWxvYWRHUFIsIElt
bTMyKGltbSksIHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAgICBicmVhazsKLSAgICAgICAgCi0g
ICAgY2FzZSBBcml0aFN1YjoKLSAgICAgICAgb3ZlcmZsb3cgPSBtX2ppdC5icmFuY2hTdWIzMihN
YWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIHJlZ0FyZ1BheWxvYWRHUFIsIEltbTMyKGltbSksIHJl
c3VsdFBheWxvYWRHUFIpOwotICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZXN1bHRUYWdHUFIpOwotICAgIEpJVENv
bXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgCi0gICAgb3ZlcmZsb3cubGlu
aygmbV9qaXQpOwotICAgIC8vIGZpcnN0IGRlYWwgd2l0aCBvdmVyZmxvdyBjYXNlCi0gICAgbV9q
aXQuY29udmVydEludDMyVG9Eb3VibGUocmVnQXJnUGF5bG9hZEdQUiwgdG1wMkZQUik7Ci0gICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tMzIoaW1tKSwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgbV9q
aXQuY29udmVydEludDMyVG9Eb3VibGUocmVzdWx0UGF5bG9hZEdQUiwgdG1wMUZQUik7Ci0gICAg
c3dpdGNoIChvcCkgewotICAgIGNhc2UgVmFsdWVBZGQ6Ci0gICAgY2FzZSBBcml0aEFkZDoKLSAg
ICAgICAgbV9qaXQuYWRkRG91YmxlKHRtcDFGUFIsIHRtcDJGUFIpOwotICAgICAgICBicmVhazsK
LSAgICAgICAgCi0gICAgY2FzZSBBcml0aFN1YjoKLSAgICAgICAgbV9qaXQuc3ViRG91YmxlKHRt
cDFGUFIsIHRtcDJGUFIpOwotICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICAKLSAgICBKSVRD
b21waWxlcjo6SnVtcCBkb25lQ2FzZUNvbnZlcnRlZFRvSW50OwotICAgIAotICAgIGlmIChvcCA9
PSBWYWx1ZUFkZCkgewotICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2Vz
OwotICAgICAgICBtX2ppdC5icmFuY2hDb252ZXJ0RG91YmxlVG9JbnQzMih0bXAyRlBSLCByZXN1
bHRQYXlsb2FkR1BSLCBmYWlsdXJlQ2FzZXMsIHRtcDFGUFIpOwotICAgICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAg
IGRvbmVDYXNlQ29udmVydGVkVG9JbnQgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgIAotICAgICAg
ICBmYWlsdXJlQ2FzZXMubGluaygmbV9qaXQpOwotICAgIH0KLSAgICAKLSAgICBib3hEb3VibGUo
dG1wMkZQUiwgcmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAgCi0gICAg
aWYgKCFpc0tub3duTnVtZXJpYyhyZWdDaGlsZCkpIHsKLSAgICAgICAgQVNTRVJUKG5vdEludC5p
c1NldCgpKTsKLSAgICAgICAgQVNTRVJUKG9wID09IFZhbHVlQWRkKTsKLSAgICAgICAgICAgIAot
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lQ2FzZVdhc051bWJlciA9IG1faml0Lmp1bXAo
KTsKLSAgICAgICAgICAgIAotICAgICAgICBub3RJbnQubGluaygmbV9qaXQpOwotICAgICAgICAg
ICAgCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0
UGF5bG9hZEdQUik7Ci0gICAgICAgIGlmIChjb21tdXRlKQotICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlciwgcmVzdWx0VGFnR1BSLCByZXN1bHRQYXls
b2FkR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoaW1tKSwgcmVnQXJnVGFnR1BSLCByZWdBcmdQ
YXlsb2FkR1BSKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25WYWx1ZUFkZE5vdE51bWJlciwgcmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBy
ZWdBcmdUYWdHUFIsIHJlZ0FyZ1BheWxvYWRHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihpbW0p
KTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBh
eWxvYWRHUFIpOwotICAgICAgICAgICAgCi0gICAgICAgIGRvbmVDYXNlV2FzTnVtYmVyLmxpbmso
Jm1faml0KTsKLSAgICB9Ci0gICAgCi0gICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgaWYgKGRv
bmVDYXNlQ29udmVydGVkVG9JbnQuaXNTZXQoKSkKLSAgICAgICAgZG9uZUNhc2VDb252ZXJ0ZWRU
b0ludC5saW5rKCZtX2ppdCk7Ci0KLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwgcmVz
dWx0UGF5bG9hZEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRs
eSk7Ci19Ci0KLXZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVCYXNpY0FyaXRo
T3AoTm9kZVR5cGUgb3AsIE5vZGUgJm5vZGUpCi17Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUu
Y2hpbGQyKCkpOwotICAgIGFyZzEuZmlsbCgpOwotICAgIGFyZzIuZmlsbCgpOwotCi0gICAgaWYg
KGFyZzEuaXNEb3VibGUoKSAmJiBhcmcyLmlzRG91YmxlKCkpIHsKLSAgICAgICAgRlBSUmVnIGFy
ZzFGUFIgPSBhcmcxLmZwcigpOwotICAgICAgICBGUFJSZWcgYXJnMkZQUiA9IGFyZzIuZnByKCk7
Ci0gICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYXJnMSk7Ci0gICAgICAgIGFyZzEu
dXNlKCk7Ci0gICAgICAgIGFyZzIudXNlKCk7Ci0gICAgICAgIHN3aXRjaCAob3ApIHsKLSAgICAg
ICAgY2FzZSBWYWx1ZUFkZDoKLSAgICAgICAgY2FzZSBBcml0aEFkZDoKLSAgICAgICAgICAgIG1f
aml0LmFkZERvdWJsZShhcmcxRlBSLCBhcmcyRlBSLCByZXN1bHQuZnByKCkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aFN1YjoKLSAgICAgICAg
ICAgIG1faml0LnN1YkRvdWJsZShhcmcxRlBSLCBhcmcyRlBSLCByZXN1bHQuZnByKCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aE11bDoKLSAg
ICAgICAgICAgIG1faml0Lm11bERvdWJsZShhcmcxRlBSLCBhcmcyRlBSLCByZXN1bHQuZnByKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZG91
YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVk
RXhwbGljaXRseSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBGUFJUZW1wb3Jhcnkg
dG1wMSh0aGlzKTsKLSAgICBGUFJUZW1wb3JhcnkgdG1wMih0aGlzKTsKLSAgICBGUFJSZWcgdG1w
MUZQUiA9IHRtcDEuZnByKCk7Ci0gICAgRlBSUmVnIHRtcDJGUFIgPSB0bXAyLmZwcigpOwotICAg
IAotICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcywgYXJnMS5pc0RvdWJsZSgpID8gYXJn
MiA6IGFyZzEpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIGFyZzEuaXNE
b3VibGUoKSA/IGFyZzIgOiBhcmcxLCBmYWxzZSk7Ci0gICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9
IHJlc3VsdFRhZy5ncHIoKTsKLSAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBh
eWxvYWQuZ3ByKCk7Ci0KLSAgICBHUFJSZWcgYXJnMVRhZ0dQUiA9IEludmFsaWRHUFJSZWc7Ci0g
ICAgR1BSUmVnIGFyZzFQYXlsb2FkR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICBHUFJSZWcgYXJn
MlRhZ0dQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgR1BSUmVnIGFyZzJQYXlsb2FkR1BSID0gSW52
YWxpZEdQUlJlZzsKLSAgICBHUFJUZW1wb3JhcnkgdG1wVGFnKHRoaXMpOwotICAgIEdQUlRlbXBv
cmFyeSB0bXBQYXlsb2FkKHRoaXMpOwotCi0gICAgaWYgKGFyZzEuaXNEb3VibGUoKSkgewotICAg
ICAgICBhcmcxVGFnR1BSID0gdG1wVGFnLmdwcigpOwotICAgICAgICBhcmcxUGF5bG9hZEdQUiA9
IHRtcFBheWxvYWQuZ3ByKCk7Ci0gICAgICAgIGJveERvdWJsZShhcmcxLmZwcigpLCBhcmcxVGFn
R1BSLCBhcmcxUGF5bG9hZEdQUik7Ci0gICAgICAgIGFyZzJUYWdHUFIgPSBhcmcyLnRhZ0dQUigp
OwotICAgICAgICBhcmcyUGF5bG9hZEdQUiA9IGFyZzIucGF5bG9hZEdQUigpOwotICAgIH0gZWxz
ZSBpZiAoYXJnMi5pc0RvdWJsZSgpKSB7Ci0gICAgICAgIGFyZzFUYWdHUFIgPSBhcmcxLnRhZ0dQ
UigpOwotICAgICAgICBhcmcxUGF5bG9hZEdQUiA9IGFyZzEucGF5bG9hZEdQUigpOwotICAgICAg
ICBhcmcyVGFnR1BSID0gdG1wVGFnLmdwcigpOwotICAgICAgICBhcmcyUGF5bG9hZEdQUiA9IHRt
cFBheWxvYWQuZ3ByKCk7Ci0gICAgICAgIGJveERvdWJsZShhcmcyLmZwcigpLCBhcmcyVGFnR1BS
LCBhcmcyUGF5bG9hZEdQUik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXJnMVRhZ0dQUiA9IGFy
ZzEudGFnR1BSKCk7Ci0gICAgICAgIGFyZzFQYXlsb2FkR1BSID0gYXJnMS5wYXlsb2FkR1BSKCk7
Ci0gICAgICAgIGFyZzJUYWdHUFIgPSBhcmcyLnRhZ0dQUigpOwotICAgICAgICBhcmcyUGF5bG9h
ZEdQUiA9IGFyZzIucGF5bG9hZEdQUigpOwotICAgIH0KLQotICAgIGFyZzEudXNlKCk7Ci0gICAg
YXJnMi51c2UoKTsKLSAgICAKLSAgICBKSVRDb21waWxlcjo6SnVtcCBjaGlsZDFOb3RJbnQ7Ci0g
ICAgSklUQ29tcGlsZXI6Okp1bXAgY2hpbGQyTm90SW50OwotICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBvdmVyZmxvdzsKLSAgICAKLSAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQx
KCkpKQotICAgICAgICBjaGlsZDFOb3RJbnQgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIGFyZzFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykp
OwotCi0gICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkKLSAgICAgICAgY2hp
bGQyTm90SW50ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBhcmcy
VGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKLSAgICAKLSAgICBzd2l0
Y2ggKG9wKSB7Ci0gICAgY2FzZSBWYWx1ZUFkZDoKLSAgICBjYXNlIEFyaXRoQWRkOiB7Ci0gICAg
ICAgIG92ZXJmbG93LmFwcGVuZChtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3Zl
cmZsb3csIGFyZzFQYXlsb2FkR1BSLCBhcmcyUGF5bG9hZEdQUiwgcmVzdWx0UGF5bG9hZEdQUikp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgQXJpdGhTdWI6IHsK
LSAgICAgICAgb3ZlcmZsb3cuYXBwZW5kKG1faml0LmJyYW5jaFN1YjMyKE1hY3JvQXNzZW1ibGVy
OjpPdmVyZmxvdywgYXJnMVBheWxvYWRHUFIsIGFyZzJQYXlsb2FkR1BSLCByZXN1bHRQYXlsb2Fk
R1BSKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBBcml0aE11
bDogewotICAgICAgICBvdmVyZmxvdy5hcHBlbmQobV9qaXQuYnJhbmNoTXVsMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok92ZXJmbG93LCBhcmcxUGF5bG9hZEdQUiwgYXJnMlBheWxvYWRHUFIsIHJlc3VsdFBh
eWxvYWRHUFIpKTsKLSAgICAgICAgb3ZlcmZsb3cuYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0UGF5bG9hZEdQUikpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIH0KLSAgICAKLSAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZyksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGhh
dmVGUFJBcmd1bWVudHM7Ci0KLSAgICBvdmVyZmxvdy5saW5rKCZtX2ppdCk7Ci0gICAgICAgIAot
ICAgIC8vIGJvdGggYXJndW1lbnRzIGFyZSBpbnRlZ2VycwotICAgIG1faml0LmNvbnZlcnRJbnQz
MlRvRG91YmxlKGFyZzFQYXlsb2FkR1BSLCB0bXAxRlBSKTsKLSAgICBtX2ppdC5jb252ZXJ0SW50
MzJUb0RvdWJsZShhcmcyUGF5bG9hZEdQUiwgdG1wMkZQUik7Ci0gICAgICAgIAotICAgIGhhdmVG
UFJBcmd1bWVudHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Ci0gICAgICAgIAotICAgIEpJVENvbXBp
bGVyOjpKdW1wTGlzdCBub3ROdW1iZXJzOwotICAgICAgICAKLSAgICBKSVRDb21waWxlcjo6SnVt
cCBjaGlsZDJOb3RJbnQyOwotICAgICAgICAKLSAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUu
Y2hpbGQxKCkpKSB7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAg
ICBjaGlsZDFOb3RJbnQubGluaygmbV9qaXQpOwotICAgICAgICAgICAgCi0gICAgICAgIGlmICgh
aXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDEoKSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChvcCA9
PSBWYWx1ZUFkZCk7Ci0gICAgICAgICAgICBub3ROdW1iZXJzLmFwcGVuZChtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBhcmcxVGFnR1BSLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwotICAgICAgICB9Ci0gICAgCi0gICAgICAgIGlmIChhcmcx
LmlzRG91YmxlKCkpCi0gICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKGFyZzEuZnByKCksIHRt
cDFGUFIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB1bmJveERvdWJsZShhcmcxVGFnR1BS
LCBhcmcxUGF5bG9hZEdQUiwgdG1wMUZQUiwgc2NyYXRjaC5mcHIoKSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgLy8gY2hpbGQxIGlzIGNvbnZlcnRlZCB0byBhIGRvdWJsZTsgY2hpbGQyIG1heSBl
aXRoZXIgYmUgYW4gaW50IG9yCi0gICAgICAgIC8vIGEgYm94ZWQgZG91YmxlCi0gICAgICAgICAg
ICAKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkgewotICAgICAg
ICAgICAgaWYgKGlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQyKCkpKQotICAgICAgICAgICAgICAg
IGNoaWxkMk5vdEludDIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IGFyZzJUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwotICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG9wID09IFZhbHVlQWRkKTsKLSAgICAg
ICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBjaGlsZDJJc0ludCA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgYXJnMlRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkludDMyVGFnKSk7Ci0gICAgICAgICAgICAgICAgbm90TnVtYmVycy5hcHBlbmQobV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgYXJnMlRhZ0dQUiwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKLSAgICAgICAgICAgICAgICBjaGlsZDJOb3RJbnQy
ID0gbV9qaXQuanVtcCgpOwotICAgICAgICAgICAgICAgIGNoaWxkMklzSW50LmxpbmsoJm1faml0
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIC8vIGNo
aWxkIDIgaXMgZGVmaW5pdGVseSBhbiBpbnRlZ2VyCi0gICAgICAgIG1faml0LmNvbnZlcnRJbnQz
MlRvRG91YmxlKGFyZzJQYXlsb2FkR1BSLCB0bXAyRlBSKTsKLSAgICAgICAgICAgIAotICAgICAg
ICBoYXZlRlBSQXJndW1lbnRzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwotICAgIH0KLSAgICAgICAg
Ci0gICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkgewotICAgICAgICBGUFJU
ZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgY2hpbGQyTm90SW50LmxpbmsoJm1faml0
KTsKLSAgICAgICAgICAgIAotICAgICAgICBpZiAoIWlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQy
KCkpKSB7Ci0gICAgICAgICAgICBBU1NFUlQob3AgPT0gVmFsdWVBZGQpOwotICAgICAgICAgICAg
bm90TnVtYmVycy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgYXJnMlRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKLSAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIC8vIGNoaWxkMSBpcyBkZWZpbml0ZWx5IGFu
IGludGVnZXIsIGFuZCBjaGlsZCAyIGlzIGRlZmluaXRlbHkgbm90Ci0gICAgICAgIG1faml0LmNv
bnZlcnRJbnQzMlRvRG91YmxlKGFyZzFQYXlsb2FkR1BSLCB0bXAxRlBSKTsKLSAgICAgICAgICAg
IAotICAgICAgICBpZiAoY2hpbGQyTm90SW50Mi5pc1NldCgpKQotICAgICAgICAgICAgY2hpbGQy
Tm90SW50Mi5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKGFyZzIuaXNE
b3VibGUoKSkKLSAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoYXJnMi5mcHIoKSwgdG1wMkZQ
Uik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHVuYm94RG91YmxlKGFyZzJUYWdHUFIsIGFy
ZzJQYXlsb2FkR1BSLCB0bXAyRlBSLCBzY3JhdGNoLmZwcigpKTsKLSAgICB9Ci0gICAgICAgIAot
ICAgIGhhdmVGUFJBcmd1bWVudHMubGluaygmbV9qaXQpOwotICAgICAgICAKLSAgICBzd2l0Y2gg
KG9wKSB7Ci0gICAgY2FzZSBWYWx1ZUFkZDoKLSAgICBjYXNlIEFyaXRoQWRkOgotICAgICAgICBt
X2ppdC5hZGREb3VibGUodG1wMkZQUiwgdG1wMUZQUik7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgY2FzZSBBcml0aFN1YjoKLSAgICAgICAgbV9qaXQuc3ViRG91YmxlKHRtcDJG
UFIsIHRtcDFGUFIpOwotICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgIGNhc2UgQXJp
dGhNdWw6Ci0gICAgICAgIG1faml0Lm11bERvdWJsZSh0bXAyRlBSLCB0bXAxRlBSKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZUNhc2VD
b252ZXJ0ZWRUb0ludDsKLSAgICAKLSAgICBpZiAob3AgPT0gVmFsdWVBZGQpIHsKLSAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKLSAgICAgICAgbV9qaXQuYnJhbmNo
Q29udmVydERvdWJsZVRvSW50MzIodG1wMUZQUiwgcmVzdWx0UGF5bG9hZEdQUiwgZmFpbHVyZUNh
c2VzLCB0bXAyRlBSKTsKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
SW50MzJUYWcpLCByZXN1bHRUYWdHUFIpOwotICAgICAgICAKLSAgICAgICAgZG9uZUNhc2VDb252
ZXJ0ZWRUb0ludCA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIGZhaWx1cmVDYXNl
cy5saW5rKCZtX2ppdCk7Ci0gICAgfQotICAgICAgICAKLSAgICBib3hEb3VibGUodG1wMUZQUiwg
cmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAgCi0gICAgaWYgKCFub3RO
dW1iZXJzLmVtcHR5KCkpIHsKLSAgICAgICAgQVNTRVJUKG9wID09IFZhbHVlQWRkKTsKLSAgICAg
ICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lQ2FzZVdhc051bWJlciA9IG1f
aml0Lmp1bXAoKTsKLSAgICAgICAgICAgIAotICAgICAgICBub3ROdW1iZXJzLmxpbmsoJm1faml0
KTsKLSAgICAgICAgICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRU
YWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blZhbHVlQWRkTm90TnVtYmVyLCByZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIGFyZzFU
YWdHUFIsIGFyZzFQYXlsb2FkR1BSLCBhcmcyVGFnR1BSLCBhcmcyUGF5bG9hZEdQUik7Ci0gICAg
ICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BS
KTsKLQotICAgICAgICBkb25lQ2FzZVdhc051bWJlci5saW5rKCZtX2ppdCk7Ci0gICAgfQotICAg
IAotICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgIGlmIChkb25lQ2FzZUNvbnZlcnRlZFRvSW50
LmlzU2V0KCkpCi0gICAgICAgIGRvbmVDYXNlQ29udmVydGVkVG9JbnQubGluaygmbV9qaXQpOwot
ICAgICAgICAKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQ
UiwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Ci19Ci0KLUpJ
VENvbXBpbGVyOjpDYWxsIEpJVENvZGVHZW5lcmF0b3I6OmNhY2hlZEdldEJ5SWQoR1BSUmVnIGJh
c2VQYXlsb2FkR1BSLCBHUFJSZWcgcmVzdWx0VGFnR1BSLCBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQ
UiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBp
bGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0LCBOb2RlVHlwZSBub2RlVHlwZSkKLXsKLSAgICBBU1NF
UlQobm9kZVR5cGUgPT0gR2V0QnlJZCB8fCBub2RlVHlwZSA9PSBHZXRNZXRob2QpOwotCi0gICAg
bV9qaXQuYmVnaW5VbmludGVycnVwdGVkU2VxdWVuY2UoKTsKLSAgICBKSVRDb21waWxlcjo6RGF0
YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBzdHJ1
Y3R1cmVDaGVjayA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChKSVRDb21waWxlcjo6Tm90RXF1
YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0
cihyZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpKTsKLSAgICBtX2ppdC5lbmRVbmludGVycnVw
dGVkU2VxdWVuY2UoKTsKLSAgICAKLSAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKGJhc2VQYXlsb2FkR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSks
IHJlc3VsdFBheWxvYWRHUFIpOwotICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0IHRh
Z0xvYWRXaXRoUGF0Y2ggPSBtX2ppdC5sb2FkMzJXaXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRj
aChKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRQYXlsb2FkR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpLCByZXN1bHRUYWdHUFIpOwotICAg
IEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0IHBheWxvYWRMb2FkV2l0aFBhdGNoID0gbV9q
aXQubG9hZDMyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0UGF0Y2goSklUQ29tcGlsZXI6OkFkZHJl
c3MocmVzdWx0UGF5bG9hZEdQUiwgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWRHUFIpOwotICAgIAotICAgIEpJVENv
bXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0KLSAgICBzdHJ1Y3R1cmVDaGVjay5s
aW5rKCZtX2ppdCk7Ci0gICAgCi0gICAgaWYgKHNsb3dQYXRoVGFyZ2V0LmlzU2V0KCkpCi0gICAg
ICAgIHNsb3dQYXRoVGFyZ2V0LmxpbmsoJm1faml0KTsKLSAgICAKLSAgICBKSVRDb21waWxlcjo6
TGFiZWwgc2xvd0Nhc2UgPSBtX2ppdC5sYWJlbCgpOwotCi0gICAgc2lsZW50U3BpbGxBbGxSZWdp
c3RlcnMocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxsT3BlcmF0aW9uKG5vZGVUeXBlID09IEdldEJ5SWQgPyBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUgOiBvcGVyYXRpb25HZXRNZXRob2RPcHRpbWl6ZSwgcmVz
dWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBiYXNlUGF5bG9hZEdQUiwgaWRlbnRpZmllcihp
ZGVudGlmaWVyTnVtYmVyKSk7Ci0gICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRUYWdH
UFIsIHJlc3VsdFBheWxvYWRHUFIpOwotICAgIAotICAgIGRvbmUubGluaygmbV9qaXQpOwotICAg
IAotICAgIEpJVENvbXBpbGVyOjpMYWJlbCBkb25lTGFiZWwgPSBtX2ppdC5sYWJlbCgpOwotCi0g
ICAgbV9qaXQuYWRkUHJvcGVydHlBY2Nlc3MoUHJvcGVydHlBY2Nlc3NSZWNvcmQoc3RydWN0dXJl
VG9Db21wYXJlLCBmdW5jdGlvbkNhbGwsIHN0cnVjdHVyZUNoZWNrLCB0YWdMb2FkV2l0aFBhdGNo
LCBwYXlsb2FkTG9hZFdpdGhQYXRjaCwgc2xvd0Nhc2UsIGRvbmVMYWJlbCwgc2FmZUNhc3Q8aW50
OF90PihiYXNlUGF5bG9hZEdQUiksIHNhZmVDYXN0PGludDhfdD4ocmVzdWx0VGFnR1BSKSwgc2Fm
ZUNhc3Q8aW50OF90PihyZXN1bHRQYXlsb2FkR1BSKSwgc2FmZUNhc3Q8aW50OF90PihzY3JhdGNo
R1BSKSkpOwotICAgIAotICAgIHJldHVybiBmdW5jdGlvbkNhbGw7Ci19Ci0KLXZvaWQgSklUQ29k
ZUdlbmVyYXRvcjo6Y2FjaGVkUHV0QnlJZChHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyB2
YWx1ZVRhZ0dQUiwgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiwgTm9kZUluZGV4IHZhbHVlSW5kZXgs
IEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kIHB1
dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0KQotewotICAgIG1faml0LmJl
Z2luVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKCk7Ci0gICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0
ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgc3RydWN0dXJlQ2hl
Y2sgPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRD
b21waWxlcjo6QWRkcmVzcyhiYXNlUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oLTEpKSk7Ci0gICAgbV9qaXQuZW5kVW5pbnRlcnJ1cHRlZFNlcXVl
bmNlKCk7Ci0KLSAgICB3cml0ZUJhcnJpZXIoYmFzZVBheWxvYWRHUFIsIHZhbHVlVGFnR1BSLCB2
YWx1ZUluZGV4LCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaEdQUik7Ci0K
LSAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VQYXlsb2FkR1BSLCBK
U09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSksIHNjcmF0Y2hHUFIpOwotICAgIEpJ
VENvbXBpbGVyOjpEYXRhTGFiZWwzMiB0YWdTdG9yZVdpdGhQYXRjaCA9IG1faml0LnN0b3JlMzJX
aXRoQWRkcmVzc09mZnNldFBhdGNoKHZhbHVlVGFnR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhz
Y3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnRhZykpKTsKLSAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsMzIgcGF5bG9hZFN0b3JlV2l0aFBh
dGNoID0gbV9qaXQuc3RvcmUzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2godmFsdWVQYXlsb2FkR1BS
LCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2Rl
ZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0KLSAgICBKSVRDb21waWxlcjo6
SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwotCi0gICAgc3RydWN0dXJlQ2hlY2subGluaygmbV9q
aXQpOwotCi0gICAgaWYgKHNsb3dQYXRoVGFyZ2V0LmlzU2V0KCkpCi0gICAgICAgIHNsb3dQYXRo
VGFyZ2V0LmxpbmsoJm1faml0KTsKLQotICAgIEpJVENvbXBpbGVyOjpMYWJlbCBzbG93Q2FzZSA9
IG1faml0LmxhYmVsKCk7Ci0KLSAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BS
UmVnKTsKLSAgICBWX0RGR09wZXJhdGlvbl9FSkNJIG9wdGltaXplZENhbGw7Ci0gICAgaWYgKG1f
aml0LnN0cmljdE1vZGVGb3IoYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pKSB7Ci0gICAg
ICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKLSAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQotICAgICAgICAgICAg
b3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5
SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgZnVuY3Rp
b25DYWxsID0gY2FsbE9wZXJhdGlvbihvcHRpbWl6ZWRDYWxsLCB2YWx1ZVRhZ0dQUiwgdmFsdWVQ
YXlsb2FkR1BSLCBiYXNlUGF5bG9hZEdQUiwgaWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKSk7
Ci0gICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKLQotICAgIGRvbmUu
bGluaygmbV9qaXQpOwotICAgIEpJVENvbXBpbGVyOjpMYWJlbCBkb25lTGFiZWwgPSBtX2ppdC5s
YWJlbCgpOwotCi0gICAgbV9qaXQuYWRkUHJvcGVydHlBY2Nlc3MoUHJvcGVydHlBY2Nlc3NSZWNv
cmQoc3RydWN0dXJlVG9Db21wYXJlLCBmdW5jdGlvbkNhbGwsIHN0cnVjdHVyZUNoZWNrLCBKSVRD
b21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdCh0YWdTdG9yZVdpdGhQYXRjaC5sYWJlbCgpKSwgSklU
Q29tcGlsZXI6OkRhdGFMYWJlbENvbXBhY3QocGF5bG9hZFN0b3JlV2l0aFBhdGNoLmxhYmVsKCkp
LCBzbG93Q2FzZSwgZG9uZUxhYmVsLCBzYWZlQ2FzdDxpbnQ4X3Q+KGJhc2VQYXlsb2FkR1BSKSwg
c2FmZUNhc3Q8aW50OF90Pih2YWx1ZVRhZ0dQUiksIHNhZmVDYXN0PGludDhfdD4odmFsdWVQYXls
b2FkR1BSKSwgc2FmZUNhc3Q8aW50OF90PihzY3JhdGNoR1BSKSkpOwotfQotCi12b2lkIEpJVENv
ZGVHZW5lcmF0b3I6OmNhY2hlZEdldE1ldGhvZChHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJl
ZyByZXN1bHRUYWdHUFIsIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSLCBHUFJSZWcgc2NyYXRjaEdQ
UiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhU
YXJnZXQpCi17Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGw7Ci0gICAgSklUQ29tcGls
ZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3RUb0NvbXBhcmUsIHByb3RvT2JqLCBwcm90b1N0cnVjdFRv
Q29tcGFyZSwgcHV0RnVuY3Rpb247Ci0gICAgCi0gICAgLy8gbV9qaXQuZW1pdExvYWRQYXlsb2Fk
KGJhc2VJbmRleCwgc2NyYXRjaEdQUik7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgd3JvbmdTdHJ1
Y3R1cmUgPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBK
SVRDb21waWxlcjo6QWRkcmVzcyhiYXNlUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIHN0cnVjdFRvQ29tcGFyZSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oLTEpKSk7Ci0gICAgcHJvdG9PYmogPSBtX2ppdC5tb3ZlV2l0aFBh
dGNoKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAg
ICBKSVRDb21waWxlcjo6SnVtcCB3cm9uZ1Byb3RvU3RydWN0dXJlID0gbV9qaXQuYnJhbmNoUHRy
V2l0aFBhdGNoKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVz
dWx0UGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHByb3RvU3RydWN0VG9D
b21wYXJlLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQq
PigtMSkpKTsKLSAgICAKLSAgICBwdXRGdW5jdGlvbiA9IG1faml0Lm1vdmVXaXRoUGF0Y2goSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoMCksIHJlc3VsdFBheWxvYWRHUFIpOwotICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZXN1bHRUYWdHUFIpOwotICAg
IAotICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgCi0gICAg
d3JvbmdTdHJ1Y3R1cmUubGluaygmbV9qaXQpOwotICAgIHdyb25nUHJvdG9TdHJ1Y3R1cmUubGlu
aygmbV9qaXQpOwotICAgIAotICAgIHNsb3dDYWxsID0gY2FjaGVkR2V0QnlJZChiYXNlUGF5bG9h
ZEdQUiwgcmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBzY3JhdGNoR1BSLCBpZGVudGlm
aWVyTnVtYmVyLCBzbG93UGF0aFRhcmdldCwgR2V0TWV0aG9kKTsKLSAgICAKLSAgICBkb25lLmxp
bmsoJm1faml0KTsKLSAgICAKLSAgICBtX2ppdC5hZGRNZXRob2RHZXQoc2xvd0NhbGwsIHN0cnVj
dFRvQ29tcGFyZSwgcHJvdG9PYmosIHByb3RvU3RydWN0VG9Db21wYXJlLCBwdXRGdW5jdGlvbik7
Ci19Ci0KLXZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNv
bXBhcmVOdWxsKE5vZGVJbmRleCBvcGVyYW5kLCBib29sIGludmVydCkKLXsKLSAgICBKU1ZhbHVl
T3BlcmFuZCBhcmcodGhpcywgb3BlcmFuZCk7Ci0gICAgR1BSUmVnIGFyZ1RhZ0dQUiA9IGFyZy50
YWdHUFIoKTsKLSAgICBHUFJSZWcgYXJnUGF5bG9hZEdQUiA9IGFyZy5wYXlsb2FkR1BSKCk7Ci0K
LSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzLCBhcmcsIGZhbHNlKTsKLSAgICBH
UFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7Ci0KLSAgICBKSVRD
b21waWxlcjo6SnVtcCBub3RDZWxsOwotICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZCkpCi0g
ICAgICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IGFyZ1RhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKLSAgICAKLSAgICBt
X2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGFyZ1BheWxvYWRHUFIsIEpTQ2VsbDo6
c3RydWN0dXJlT2Zmc2V0KCkpLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICBtX2ppdC50ZXN0OChp
bnZlcnQgPyBKSVRDb21waWxlcjo6WmVybyA6IEpJVENvbXBpbGVyOjpOb25aZXJvLCBKSVRDb21w
aWxlcjo6QWRkcmVzcyhyZXN1bHRQYXlsb2FkR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCksIHJlc3VsdFBheWxvYWRHUFIpOwotICAgIAotICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFu
ZCkpIHsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAg
ICAgICAgCi0gICAgICAgIG5vdENlbGwubGluaygmbV9qaXQpOwotICAgICAgICAvLyBudWxsIG9y
IHVuZGVmaW5lZD8KLSAgICAgICAgQ09NUElMRV9BU1NFUlQoKEpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyB8IDEpID09IEpTVmFsdWU6Ok51bGxUYWcsIFVuZGVmaW5lZFRhZ19PUl8xX0VRVUFMU19OdWxs
VGFnKTsKLSAgICAgICAgbV9qaXQubW92ZShhcmdUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwot
ICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0UGF5bG9hZEdQUik7Ci0g
ICAgICAgIG1faml0LmNvbXBhcmUzMihpbnZlcnQgPyBKSVRDb21waWxlcjo6Tm90RXF1YWwgOiBK
SVRDb21waWxlcjo6RXF1YWwsIHJlc3VsdFBheWxvYWRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpOdWxsVGFnKSwgcmVzdWx0UGF5bG9hZEdQUik7Ci0KLSAgICAgICAgZG9uZS5saW5rKCZtX2pp
dCk7Ci0gICAgfQotICAgIAotICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0UGF5bG9hZEdQUiwgbV9j
b21waWxlSW5kZXgpOwotfQotCi12b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZl
UGVlcGhvbGVCcmFuY2hOdWxsKE5vZGVJbmRleCBvcGVyYW5kLCBOb2RlSW5kZXggYnJhbmNoTm9k
ZUluZGV4LCBib29sIGludmVydCkKLXsKLSAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNo
Tm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2Nr
SW5kZXgoKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJs
b2NrSW5kZXgoKTsKLSAgICAKLSAgICBpZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkgewotICAg
ICAgICBpbnZlcnQgPSAhaW52ZXJ0OwotICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOwot
ICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwotICAgICAgICBub3RUYWtlbiA9IHRtcDsKLSAgICB9
Ci0KLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgb3BlcmFuZCk7Ci0gICAgR1BSUmVnIGFy
Z1RhZ0dQUiA9IGFyZy50YWdHUFIoKTsKLSAgICBHUFJSZWcgYXJnUGF5bG9hZEdQUiA9IGFyZy5w
YXlsb2FkR1BSKCk7Ci0gICAgCi0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBhcmcpOwot
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgCi0gICAgSklUQ29tcGls
ZXI6Okp1bXAgbm90Q2VsbDsKLSAgICAKLSAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQpKQot
ICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBhcmdUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7Ci0gICAgCi0gICAg
bV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhhcmdQYXlsb2FkR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKLSAgICBhZGRCcmFuY2gobV9qaXQuYnJh
bmNoVGVzdDgoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Olplcm8gOiBKSVRDb21waWxlcjo6Tm9uWmVy
bywgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpLCB0YWtlbik7Ci0gICAgCi0gICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kKSkgewot
ICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7Ci0gICAgICAgIAotICAg
ICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKLSAgICAgICAgLy8gbnVsbCBvciB1bmRlZmluZWQ/
Ci0gICAgICAgIENPTVBJTEVfQVNTRVJUKChKU1ZhbHVlOjpVbmRlZmluZWRUYWcgfCAxKSA9PSBK
U1ZhbHVlOjpOdWxsVGFnLCBVbmRlZmluZWRUYWdfT1JfMV9FUVVBTFNfTnVsbFRhZyk7Ci0gICAg
ICAgIG1faml0Lm1vdmUoYXJnVGFnR1BSLCByZXN1bHRHUFIpOwotICAgICAgICBtX2ppdC5vcjMy
KFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgYWRkQnJhbmNoKG1faml0LmJy
YW5jaDMyKGludmVydCA/IEpJVENvbXBpbGVyOjpOb3RFcXVhbCA6IEpJVENvbXBpbGVyOjpFcXVh
bCwgcmVzdWx0R1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcp
KSwgdGFrZW4pOwotICAgIH0KLSAgICAKLSAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAx
KSkKLSAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOwotfQotCi1ib29s
IEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlQ29tcGFyZU51bGwoTm9kZSYgbm9kZSwg
Tm9kZUluZGV4IG9wZXJhbmQsIGJvb2wgaW52ZXJ0KQotewotICAgIE5vZGVJbmRleCBicmFuY2hO
b2RlSW5kZXggPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwotICAgIGlmIChicmFuY2hOb2RlSW5k
ZXggIT0gTm9Ob2RlKSB7Ci0gICAgICAgIEFTU0VSVChub2RlLmFkanVzdGVkUmVmQ291bnQoKSA9
PSAxKTsKLSAgICAgICAgCi0gICAgICAgIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxs
KG9wZXJhbmQsIGJyYW5jaE5vZGVJbmRleCwgaW52ZXJ0KTsKLSAgICAKLSAgICAgICAgdXNlKG5v
ZGUuY2hpbGQxKCkpOwotICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIG1fY29t
cGlsZUluZGV4ID0gYnJhbmNoTm9kZUluZGV4OwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotICAgIAotICAgIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVs
bChvcGVyYW5kLCBpbnZlcnQpOwotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBK
SVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUmIG5vZGUs
IE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKLXsKLSAgICBO
b2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRh
a2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICBCbG9ja0luZGV4IG5vdFRh
a2VuID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKLQotICAgIEpJVENvbXBpbGVy
OjpSZXN1bHRDb25kaXRpb24gY2FsbFJlc3VsdENvbmRpdGlvbiA9IEpJVENvbXBpbGVyOjpOb25a
ZXJvOwotCi0gICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUg
dGFrZW4gYmxvY2suCi0gICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGgg
bm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhy
b3VnaC4KLSAgICBpZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkgewotICAgICAgICBjb25kID0g
SklUQ29tcGlsZXI6OmludmVydChjb25kKTsKLSAgICAgICAgY2FsbFJlc3VsdENvbmRpdGlvbiA9
IEpJVENvbXBpbGVyOjpaZXJvOwotICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOwotICAg
ICAgICB0YWtlbiA9IG5vdFRha2VuOwotICAgICAgICBub3RUYWtlbiA9IHRtcDsKLSAgICB9Ci0K
LSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIEpTVmFs
dWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgR1BSUmVnIGFyZzFUYWdH
UFIgPSBhcmcxLnRhZ0dQUigpOwotICAgIEdQUlJlZyBhcmcxUGF5bG9hZEdQUiA9IGFyZzEucGF5
bG9hZEdQUigpOwotICAgIEdQUlJlZyBhcmcyVGFnR1BSID0gYXJnMi50YWdHUFIoKTsKLSAgICBH
UFJSZWcgYXJnMlBheWxvYWRHUFIgPSBhcmcyLnBheWxvYWRHUFIoKTsKLSAgICAKLSAgICBKSVRD
b21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgCi0gICAgaWYgKGlzS25vd25Ob3RJbnRl
Z2VyKG5vZGUuY2hpbGQxKCkpIHx8IGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7
Ci0gICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7Ci0KLSAgICAgICAgYXJnMS51c2UoKTsKLSAgICAgICAgYXJnMi51
c2UoKTsKLQotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBjYWxsT3BlcmF0aW9u
KGhlbHBlckZ1bmN0aW9uLCByZXN1bHRHUFIsIGFyZzFUYWdHUFIsIGFyZzFQYXlsb2FkR1BSLCBh
cmcyVGFnR1BSLCBhcmcyUGF5bG9hZEdQUik7Ci0KLSAgICAgICAgYWRkQnJhbmNoKG1faml0LmJy
YW5jaFRlc3QzMihjYWxsUmVzdWx0Q29uZGl0aW9uLCByZXN1bHRHUFIpLCB0YWtlbik7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAKLSAgICAgICAgYXJnMS51c2UoKTsK
LSAgICAgICAgYXJnMi51c2UoKTsKLQotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUu
Y2hpbGQxKCkpKQotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnMVRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihu
b2RlLmNoaWxkMigpKSkKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGFyZzJUYWdHUFIsIEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7Ci0gICAgCi0gICAgICAgIGFkZEJyYW5jaCht
X2ppdC5icmFuY2gzMihjb25kLCBhcmcxUGF5bG9hZEdQUiwgYXJnMlBheWxvYWRHUFIpLCB0YWtl
bik7Ci0gICAgCi0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKSkgfHwg
IWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7Ci0gICAgICAgICAgICBhZGRCcmFuY2go
bV9qaXQuanVtcCgpLCBub3RUYWtlbik7Ci0gICAgCi0gICAgICAgICAgICBzbG93UGF0aC5saW5r
KCZtX2ppdCk7Ci0gICAgCi0gICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1
bHRHUFIpOwotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihoZWxwZXJGdW5jdGlvbiwgcmVzdWx0
R1BSLCBhcmcxVGFnR1BSLCBhcmcxUGF5bG9hZEdQUiwgYXJnMlRhZ0dQUiwgYXJnMlBheWxvYWRH
UFIpOwotICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAg
ICAgICAKLSAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0MzIoY2FsbFJlc3Vs
dENvbmRpdGlvbiwgcmVzdWx0R1BSKSwgdGFrZW4pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKG5vdFRha2VuICE9IChtX2Jsb2NrICsgMSkpCi0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5q
dW1wKCksIG5vdFRha2VuKTsKLX0KLQotdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxh
dGl2ZU5vblBlZXBob2xlQ29tcGFyZShOb2RlJiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRp
b25hbENvbmRpdGlvbiBjb25kLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCi17
Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICBKU1Zh
bHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgIEdQUlJlZyBhcmcxVGFn
R1BSID0gYXJnMS50YWdHUFIoKTsKLSAgICBHUFJSZWcgYXJnMVBheWxvYWRHUFIgPSBhcmcxLnBh
eWxvYWRHUFIoKTsKLSAgICBHUFJSZWcgYXJnMlRhZ0dQUiA9IGFyZzIudGFnR1BSKCk7Ci0gICAg
R1BSUmVnIGFyZzJQYXlsb2FkR1BSID0gYXJnMi5wYXlsb2FkR1BSKCk7Ci0gICAgCi0gICAgSklU
Q29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIAotICAgIGlmIChpc0tub3duTm90SW50
ZWdlcihub2RlLmNoaWxkMSgpKSB8fCBpc0tub3duTm90SW50ZWdlcihub2RlLmNoaWxkMigpKSkg
ewotICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVzdWx0
UGF5bG9hZEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICAKLSAgICAgICAgYXJnMS51c2UoKTsKLSAg
ICAgICAgYXJnMi51c2UoKTsKLQotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uKGhlbHBlckZ1bmN0aW9uLCByZXN1bHRQYXlsb2FkR1BSLCBhcmcxVGFnR1BS
LCBhcmcxUGF5bG9hZEdQUiwgYXJnMlRhZ0dQUiwgYXJnMlBheWxvYWRHUFIpOwotICAgICAgICAK
LSAgICAgICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCwg
VXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLSAgICB9IGVsc2UgewotICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzLCBhcmcxLCBmYWxzZSk7Ci0gICAgICAgIEdQUlJl
ZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKLQotICAgICAgICBhcmcx
LnVzZSgpOwotICAgICAgICBhcmcyLnVzZSgpOwotICAgIAotICAgICAgICBpZiAoIWlzS25vd25J
bnRlZ2VyKG5vZGUuY2hpbGQxKCkpKQotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnMVRhZ0dQUiwgSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKLSAgICAgICAgaWYgKCFpc0tu
b3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCht
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGFyZzJUYWdHUFIsIEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7Ci0KLSAgICAgICAgbV9q
aXQuY29tcGFyZTMyKGNvbmQsIGFyZzFQYXlsb2FkR1BSLCBhcmcyUGF5bG9hZEdQUiwgcmVzdWx0
UGF5bG9hZEdQUik7Ci0gICAgCi0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGls
ZDEoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7Ci0gICAgICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBoYXZlUmVzdWx0ID0gbV9qaXQuanVtcCgpOwotICAgIAotICAgICAg
ICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwotICAgICAgICAKLSAgICAgICAgICAgIHNpbGVu
dFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAgICAgICAgY2FsbE9w
ZXJhdGlvbihoZWxwZXJGdW5jdGlvbiwgcmVzdWx0UGF5bG9hZEdQUiwgYXJnMVRhZ0dQUiwgYXJn
MVBheWxvYWRHUFIsIGFyZzJUYWdHUFIsIGFyZzJQYXlsb2FkR1BSKTsKLSAgICAgICAgICAgIHNp
bGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgICAgIAotICAgICAg
ICAgICAgbV9qaXQuYW5kUHRyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0UGF5bG9hZEdQUik7Ci0g
ICAgICAgIAotICAgICAgICAgICAgaGF2ZVJlc3VsdC5saW5rKCZtX2ppdCk7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0UGF5bG9hZEdQUiwgbV9jb21w
aWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Ci0gICAgfQotfQotCi12b2lk
IEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RFcShOb2RlJiBu
b2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBib29sIGludmVydCkKLXsKLSAgICBOb2Rl
JiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRha2Vu
ID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2Vu
ID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKLQotICAgIC8vIFRoZSBicmFuY2gg
aW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8gdGhlIHRha2VuIGJsb2NrLgotICAgIC8vIElmIHRh
a2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRha2VuICYgaW52ZXJ0IHRoZSBicmFu
Y2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91Z2guCi0gICAgaWYgKHRha2VuID09ICht
X2Jsb2NrICsgMSkpIHsKLSAgICAgICAgaW52ZXJ0ID0gIWludmVydDsKLSAgICAgICAgQmxvY2tJ
bmRleCB0bXAgPSB0YWtlbjsKLSAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKLSAgICAgICAgbm90
VGFrZW4gPSB0bXA7Ci0gICAgfQotICAgIAotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywg
bm9kZS5jaGlsZDEoKSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxk
MigpKTsKLSAgICBHUFJSZWcgYXJnMVRhZ0dQUiA9IGFyZzEudGFnR1BSKCk7Ci0gICAgR1BSUmVn
IGFyZzFQYXlsb2FkR1BSID0gYXJnMS5wYXlsb2FkR1BSKCk7Ci0gICAgR1BSUmVnIGFyZzJUYWdH
UFIgPSBhcmcyLnRhZ0dQUigpOwotICAgIEdQUlJlZyBhcmcyUGF5bG9hZEdQUiA9IGFyZzIucGF5
bG9hZEdQUigpOwotICAgIAotICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIGFy
ZzEsIGZhbHNlKTsKLSAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQu
Z3ByKCk7Ci0gICAgCi0gICAgYXJnMS51c2UoKTsKLSAgICBhcmcyLnVzZSgpOwotICAgIAotICAg
IGlmIChpc0tub3duQ2VsbChub2RlLmNoaWxkMSgpKSAmJiBpc0tub3duQ2VsbChub2RlLmNoaWxk
MigpKSkgewotICAgICAgICAvLyBzZWUgaWYgd2UgZ2V0IGx1Y2t5OiBpZiB0aGUgYXJndW1lbnRz
IGFyZSBjZWxscyBhbmQgdGhleSByZWZlcmVuY2UgdGhlIHNhbWUKLSAgICAgICAgLy8gY2VsbCwg
dGhlbiB0aGV5IG11c3QgYmUgc3RyaWN0bHkgZXF1YWwuCi0gICAgICAgIGFkZEJyYW5jaChtX2pp
dC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBhcmcxUGF5bG9hZEdQUiwgYXJnMlBheWxv
YWRHUFIpLCBpbnZlcnQgPyBub3RUYWtlbiA6IHRha2VuKTsKLSAgICAgICAgCi0gICAgICAgIHNp
bGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcUNlbGwsIHJlc3VsdFBheWxvYWRHUFIsIGFy
ZzFUYWdHUFIsIGFyZzFQYXlsb2FkR1BSLCBhcmcyVGFnR1BSLCBhcmcyUGF5bG9hZEdQUik7Ci0g
ICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgICAg
IAotICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDMyKGludmVydCA/IEpJVENvbXBp
bGVyOjpOb25aZXJvIDogSklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdFBheWxvYWRHUFIpLCB0YWtl
bik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRklYTUU6IEFkZCBmYXN0IHBhdGhzIGZvciB0
d29DZWxscywgbnVtYmVyIGV0Yy4KLQotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhy
ZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
U3RyaWN0RXEsIHJlc3VsdFBheWxvYWRHUFIsIGFyZzFUYWdHUFIsIGFyZzFQYXlsb2FkR1BSLCBh
cmcyVGFnR1BSLCBhcmcyUGF5bG9hZEdQUik7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3Rl
cnMocmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgICAgIAotICAgICAgICBhZGRCcmFuY2gobV9qaXQu
YnJhbmNoVGVzdDMyKGludmVydCA/IEpJVENvbXBpbGVyOjpaZXJvIDogSklUQ29tcGlsZXI6Ok5v
blplcm8sIHJlc3VsdFBheWxvYWRHUFIpLCB0YWtlbik7Ci0gICAgfQotICAgIAotICAgIGlmIChu
b3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQotICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgp
LCBub3RUYWtlbik7Ci19Ci0KLXZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVO
b25QZWVwaG9sZVN0cmljdEVxKE5vZGUmIG5vZGUsIGJvb2wgaW52ZXJ0KQotewotICAgIEpTVmFs
dWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQg
YXJnMih0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICBHUFJSZWcgYXJnMVRhZ0dQUiA9IGFyZzEu
dGFnR1BSKCk7Ci0gICAgR1BSUmVnIGFyZzFQYXlsb2FkR1BSID0gYXJnMS5wYXlsb2FkR1BSKCk7
Ci0gICAgR1BSUmVnIGFyZzJUYWdHUFIgPSBhcmcyLnRhZ0dQUigpOwotICAgIEdQUlJlZyBhcmcy
UGF5bG9hZEdQUiA9IGFyZzIucGF5bG9hZEdQUigpOwotICAgIAotICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHRQYXlsb2FkKHRoaXMsIGFyZzEsIGZhbHNlKTsKLSAgICBHUFJSZWcgcmVzdWx0UGF5bG9h
ZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7Ci0gICAgCi0gICAgYXJnMS51c2UoKTsKLSAgICBh
cmcyLnVzZSgpOwotICAgIAotICAgIGlmIChpc0tub3duQ2VsbChub2RlLmNoaWxkMSgpKSAmJiBp
c0tub3duQ2VsbChub2RlLmNoaWxkMigpKSkgewotICAgICAgICAvLyBzZWUgaWYgd2UgZ2V0IGx1
Y2t5OiBpZiB0aGUgYXJndW1lbnRzIGFyZSBjZWxscyBhbmQgdGhleSByZWZlcmVuY2UgdGhlIHNh
bWUKLSAgICAgICAgLy8gY2VsbCwgdGhlbiB0aGV5IG11c3QgYmUgc3RyaWN0bHkgZXF1YWwuCi0g
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEVxdWFsQ2FzZSA9IG1faml0LmJyYW5jaFB0cihK
SVRDb21waWxlcjo6Tm90RXF1YWwsIGFyZzFQYXlsb2FkR1BSLCBhcmcyUGF5bG9hZEdQUik7Ci0g
ICAgICAgIAotICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoIWlu
dmVydCksIHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25l
ID0gbV9qaXQuanVtcCgpOwotCi0gICAgICAgIG5vdEVxdWFsQ2FzZS5saW5rKCZtX2ppdCk7Ci0g
ICAgICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRQYXlsb2FkR1BS
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsLCBy
ZXN1bHRQYXlsb2FkR1BSLCBhcmcxVGFnR1BSLCBhcmcxUGF5bG9hZEdQUiwgYXJnMlRhZ0dQUiwg
YXJnMlBheWxvYWRHUFIpOwotICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFBh
eWxvYWRHUFIpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQuYW5kUHRyKEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tMzIoMSksIHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAgICAKLSAgICAgICAgZG9u
ZS5saW5rKCZtX2ppdCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRklYTUU6IEFkZCBmYXN0
IHBhdGhzLgotCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFBheWxvYWRH
UFIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVz
dWx0UGF5bG9hZEdQUiwgYXJnMVRhZ0dQUiwgYXJnMVBheWxvYWRHUFIsIGFyZzJUYWdHUFIsIGFy
ZzJQYXlsb2FkR1BSKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRQYXls
b2FkR1BSKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LmFuZFB0cihKSVRDb21waWxlcjo6VHJ1
c3RlZEltbTMyKDEpLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICB9Ci0KLSAgICBib29sZWFuUmVz
dWx0KHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4
cGxpY2l0bHkpOwotfQotCi12b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5v
ZGUpCi17Ci0gICAgUF9ERkdPcGVyYXRpb25fRSBzbG93Q2FsbEZ1bmN0aW9uOwotCi0gICAgaWYg
KG5vZGUub3AgPT0gQ2FsbCkgewotICAgICAgICBzbG93Q2FsbEZ1bmN0aW9uID0gb3BlcmF0aW9u
TGlua0NhbGw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG5vZGUub3AgPT0gQ29uc3Ry
dWN0KTsKLSAgICAgICAgc2xvd0NhbGxGdW5jdGlvbiA9IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3Q7
Ci0gICAgfQotCi0gICAgLy8gRm9yIGNvbnN0cnVjdG9ycywgdGhlIHRoaXMgYXJndW1lbnQgaXMg
bm90IHBhc3NlZCBidXQgd2UgaGF2ZSB0byBtYWtlIHNwYWNlCi0gICAgLy8gZm9yIGl0LgotICAg
IGludCBkdW1teVRoaXNBcmd1bWVudCA9IG5vZGUub3AgPT0gQ2FsbCA/IDAgOiAxOwotCi0gICAg
Q2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZSA9IG5vZGUub3AgPT0gQ2FsbCA/IENhbGxM
aW5rSW5mbzo6Q2FsbCA6IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0OwotCi0gICAgTm9kZUluZGV4
IGNhbGxlZU5vZGVJbmRleCA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZp
cnN0Q2hpbGQoKV07Ci0gICAgSlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNhbGxlZU5vZGVJ
bmRleCk7Ci0gICAgR1BSUmVnIGNhbGxlZVRhZ0dQUiA9IGNhbGxlZS50YWdHUFIoKTsKLSAgICBH
UFJSZWcgY2FsbGVlUGF5bG9hZEdQUiA9IGNhbGxlZS5wYXlsb2FkR1BSKCk7Ci0gICAgdXNlKGNh
bGxlZU5vZGVJbmRleCk7Ci0KLSAgICAvLyB0aGUgY2FsbCBpbnN0cnVjdGlvbidzIGZpcnN0IGNo
aWxkIGlzIGVpdGhlciB0aGUgZnVuY3Rpb24gKG5vcm1hbCBjYWxsKSBvciB0aGUKLSAgICAvLyBy
ZWNlaXZlciAobWV0aG9kIGNhbGwpLiBzdWJzZXF1ZW50IGNoaWxkcmVuIGFyZSB0aGUgYXJndW1l
bnRzLgotICAgIGludCBudW1BcmdzID0gbm9kZS5udW1DaGlsZHJlbigpIC0gMTsKLQotICAgIC8v
IEZvciBjb25zdHJ1Y3RvcnMsIHRoZSB0aGlzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdl
IGhhdmUgdG8gbWFrZSBzcGFjZQotICAgIC8vIGZvciBpdC4KLSAgICBpbnQgbnVtUGFzc2VkQXJn
cyA9IG51bUFyZ3MgKyBkdW1teVRoaXNBcmd1bWVudDsKLQotICAgIC8vIGFtb3VudCBvZiBzdHVm
ZiAoaW4gdW5pdHMgb2Ygc2l6ZW9mKFJlZ2lzdGVyKSkgdGhhdCB3ZSBuZWVkIHRvIHBsYWNlIGF0
IHRoZQotICAgIC8vIHRvcCBvZiB0aGUgSlMgc3RhY2suCi0gICAgaW50IGNhbGxEYXRhU2l6ZSA9
IDA7Ci0KLSAgICAvLyBmaXJzdCB0aGVyZSBhcmUgdGhlIGFyZ3VtZW50cwotICAgIGNhbGxEYXRh
U2l6ZSArPSBudW1QYXNzZWRBcmdzOwotCi0gICAgLy8gYW5kIHRoZW4gdGhlcmUgaXMgdGhlIGNh
bGwgZnJhbWUgaGVhZGVyCi0gICAgY2FsbERhdGFTaXplICs9IFJlZ2lzdGVyRmlsZTo6Q2FsbEZy
YW1lSGVhZGVyU2l6ZTsKLQotICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihudW1QYXNzZWRBcmdzKSwgcGF5bG9hZE9mQ2FsbERhdGEoUmVnaXN0ZXJGaWxlOjpB
cmd1bWVudENvdW50KSk7Ci0gICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgdGFnT2ZDYWxsRGF0YShSZWdpc3RlckZpbGU6OkFy
Z3VtZW50Q291bnQpKTsKLSAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgcGF5bG9hZE9mQ2FsbERhdGEoUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSkpOwotICAg
IG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSwgdGFnT2ZDYWxsRGF0YShSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lKSk7Ci0KLSAgICBm
b3IgKGludCBhcmdJZHggPSAwOyBhcmdJZHggPCBudW1BcmdzOyBhcmdJZHgrKykgewotICAgICAg
ICBOb2RlSW5kZXggYXJnTm9kZUluZGV4ID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVu
W25vZGUuZmlyc3RDaGlsZCgpICsgMSArIGFyZ0lkeF07Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5k
IGFyZyh0aGlzLCBhcmdOb2RlSW5kZXgpOwotICAgICAgICBHUFJSZWcgYXJnVGFnR1BSID0gYXJn
LnRhZ0dQUigpOwotICAgICAgICBHUFJSZWcgYXJnUGF5bG9hZEdQUiA9IGFyZy5wYXlsb2FkR1BS
KCk7Ci0gICAgICAgIHVzZShhcmdOb2RlSW5kZXgpOwotCi0gICAgICAgIG1faml0LnN0b3JlMzIo
YXJnVGFnR1BSLCB0YWdPZkNhbGxEYXRhKC1jYWxsRGF0YVNpemUgKyBhcmdJZHggKyBkdW1teVRo
aXNBcmd1bWVudCkpOwotICAgICAgICBtX2ppdC5zdG9yZTMyKGFyZ1BheWxvYWRHUFIsIHBheWxv
YWRPZkNhbGxEYXRhKC1jYWxsRGF0YVNpemUgKyBhcmdJZHggKyBkdW1teVRoaXNBcmd1bWVudCkp
OwotICAgIH0KLQotICAgIG1faml0LnN0b3JlMzIoY2FsbGVlVGFnR1BSLCB0YWdPZkNhbGxEYXRh
KFJlZ2lzdGVyRmlsZTo6Q2FsbGVlKSk7Ci0gICAgbV9qaXQuc3RvcmUzMihjYWxsZWVQYXlsb2Fk
R1BSLCBwYXlsb2FkT2ZDYWxsRGF0YShSZWdpc3RlckZpbGU6OkNhbGxlZSkpOwotCi0gICAgZmx1
c2hSZWdpc3RlcnMoKTsKLQotICAgIEdQUlJlc3VsdCByZXN1bHRQYXlsb2FkKHRoaXMpOwotICAg
IEdQUlJlc3VsdDIgcmVzdWx0VGFnKHRoaXMpOwotICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BS
ID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKLSAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0
VGFnLmdwcigpOwotCi0gICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNr
OwotICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoOwotCi0gICAgc2xvd1BhdGggPSBtX2pp
dC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVQYXls
b2FkR1BSLCB0YXJnZXRUb0NoZWNrKTsKLSAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGNhbGxlZVBheWxvYWRHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBt
X3Njb3BlQ2hhaW4pKSwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgbV9qaXQuc3RvcmVQdHIocmVz
dWx0UGF5bG9hZEdQUiwgcGF5bG9hZE9mQ2FsbERhdGEoUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWlu
KSk7Ci0gICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpLCB0YWdPZkNhbGxEYXRhKFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikpOwot
Ci0gICAgbV9qaXQuYWRkUHRyKEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJl
Z2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7
Ci0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBmYXN0Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7Ci0g
ICAgbV9qaXQubm90aWZ5Q2FsbChmYXN0Q2FsbCwgYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmln
aW4pOwotCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLQotICAg
IHNsb3dQYXRoLmxpbmsoJm1faml0KTsKLQotICAgIG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5j
b2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgbV9q
aXQucG9rZShHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIEpJVENvbXBpbGVyOjpDYWxsIHNs
b3dDYWxsID0gbV9qaXQuYWRkRmFzdEV4Y2VwdGlvbkNoZWNrKG1faml0LmFwcGVuZENhbGwoc2xv
d0NhbGxGdW5jdGlvbiksIGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luKTsKLSAgICBtX2pp
dC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICog
c2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBtX2pp
dC5ub3RpZnlDYWxsKG1faml0LmNhbGwoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBhdChtX2Nv
bXBpbGVJbmRleCkuY29kZU9yaWdpbik7Ci0KLSAgICBkb25lLmxpbmsoJm1faml0KTsKLQotICAg
IHNldHVwUmVzdWx0cyhyZXN1bHRQYXlsb2FkR1BSLCByZXN1bHRUYWdHUFIpOwotCi0gICAganNW
YWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4
LCBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Ci0KLSAgICBtX2pp
dC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBjYWxsVHlwZSwg
YXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pOwotfQotCi0jZW5kaWYKLQotfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29kZUdlbmVyYXRvcjY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHAJKHJldmlzaW9uIDEwMDIzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMzE2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRG
R0pJVENvZGVHZW5lcmF0b3IuaCIKLQotI2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAi
REZHSklUQ29tcGlsZXJJbmxpbmVNZXRob2RzLmgiCi0jaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVK
SVQuaCIKLSNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0KLUdQUlJlZyBKSVRDb2RlR2VuZXJhdG9y
OjpmaWxsSW50ZWdlcihOb2RlSW5kZXggbm9kZUluZGV4LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3Jt
YXQpCi17Ci0gICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgR2VuZXJh
dGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0KLSAg
ICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXROb25lKSB7Ci0gICAgICAg
IEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwotCi0gICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50
KCkpIHsKLSAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNw
aWxsT3JkZXJDb25zdGFudCk7Ci0gICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGVJ
bmRleCkpIHsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0z
Mih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgpKSwgZ3ByKTsKLSAgICAgICAgICAgICAg
ICBpbmZvLmZpbGxJbnRlZ2VyKGdwcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0g
RGF0YUZvcm1hdEludGVnZXI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdwcjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpIHsKLSAg
ICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBqc051bWJlcih2YWx1ZU9mTnVtYmVyQ29u
c3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZUluZGV4
KSk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQo
bm9kZUluZGV4KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJ
bW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEludGVnZXIp
IHsKLSAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxs
T3JkZXJTcGlsbGVkKTsKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5
bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwotICAgICAgICAgICAgLy8gVGFnIGl0LCBz
aW5jZSBmaWxsSW50ZWdlcigpIGlzIHVzZWQgd2hlbiB3ZSB3YW50IGEgYm94ZWQgaW50ZWdlci4K
LSAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwg
Z3ByKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmZvLnNwaWxsRm9y
bWF0KCkgPT0gRGF0YUZvcm1hdEpTIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0
SlNJbnRlZ2VyKTsKLSAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0
ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29t
cGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIFNpbmNlIHdlIHN0YXRpY2FsbHkga25vdyB0aGF0IHdlJ3JlIGZpbGxpbmcgYW4g
aW50ZWdlciwgYW5kIHZhbHVlcwotICAgICAgICAvLyBpbiB0aGUgUmVnaXN0ZXJGaWxlIGFyZSBi
b3hlZCwgdGhpcyBtdXN0IGJlIERhdGFGb3JtYXRKU0ludGVnZXIuCi0gICAgICAgIC8vIFdlIHdp
bGwgY2hlY2sgdGhpcyB3aXRoIGEgaml0QXNzZXJ0IGJlbG93LgotICAgICAgICBpbmZvLmZpbGxK
U1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7Ci0gICAgICAgIHVubG9jayhncHIpOwot
ICAgIH0KLQotICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7Ci0gICAgY2FzZSBE
YXRhRm9ybWF0Tm9uZToKLSAgICAgICAgLy8gU2hvdWxkIGhhdmUgZmlsbGVkLCBhYm92ZS4KLSAg
ICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZToKLSAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6Ci0g
ICAgY2FzZSBEYXRhRm9ybWF0SlM6Ci0gICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKLSAgICBjYXNl
IERhdGFGb3JtYXRKU0NlbGw6Ci0gICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoKLSAgICBjYXNl
IERhdGFGb3JtYXRKU0Jvb2xlYW46Ci0gICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFnZToKLSAgICAg
ICAgLy8gU2hvdWxkIG9ubHkgYmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGlmIHdlIGtub3cgdGhp
cyBvcGVyYW5kIHRvIGJlIGludGVnZXIuCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlNJbnRlZ2VyOiB7Ci0gICAgICAgIEdQUlJlZyBncHIgPSBp
bmZvLmdwcigpOwotICAgICAgICBtX2dwcnMubG9jayhncHIpOwotICAgICAgICBtX2ppdC5qaXRB
c3NlcnRJc0pTSW50MzIoZ3ByKTsKLSAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEpT
SW50ZWdlcjsKLSAgICAgICAgcmV0dXJuIGdwcjsKLSAgICB9Ci0KLSAgICBjYXNlIERhdGFGb3Jt
YXRJbnRlZ2VyOiB7Ci0gICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwotICAgICAgICBt
X2dwcnMubG9jayhncHIpOwotICAgICAgICBtX2ppdC5qaXRBc3NlcnRJc0ludDMyKGdwcik7Ci0g
ICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwotICAgICAgICByZXR1cm4g
Z3ByOwotICAgIH0KLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gSW52YWxpZEdQUlJlZzsKLX0KLQotRlBSUmVnIEpJVENvZGVHZW5lcmF0b3I6OmZpbGxEb3Vi
bGUoTm9kZUluZGV4IG5vZGVJbmRleCkKLXsKLSAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVn
aXN0ZXIoKTsKLSAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmly
dHVhbFJlZ2lzdGVyXTsKLQotICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZv
cm1hdE5vbmUpIHsKLSAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewotICAgICAgICAg
ICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7Ci0gICAgICAgIAotICAgICAgICAgICAgaWYgKGlz
SW50MzJDb25zdGFudChub2RlSW5kZXgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IHNo
b3VsZCBub3QgYmUgcmVhY2hhYmxlPwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCBncHIpOwot
ICAgICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxs
T3JkZXJDb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcihncHIpOwot
ICAgICAgICAgICAgICAgIHVubG9jayhncHIpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChpc051
bWJlckNvbnN0YW50KG5vZGVJbmRleCkpIHsKLSAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0g
ZnByQWxsb2NhdGUoKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXREb3VibGVUb0ludHB0
cih2YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkpKSwgZ3ByKTsKLSAgICAgICAgICAg
ICAgICBtX2ppdC5tb3ZlUHRyVG9Eb3VibGUoZ3ByLCBmcHIpOwotICAgICAgICAgICAgICAgIHVu
bG9jayhncHIpOwotCi0gICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxS
ZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsRG91
YmxlKGZwcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZwcjsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCBub3QgYmUgcmVhY2hhYmxlPwot
ICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAg
ICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsK
LSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1
ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKLSAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWlu
KGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAgICAgICAgICAg
ICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlMpOwotICAgICAgICAgICAgICAg
IHVubG9jayhncHIpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgRGF0YUZvcm1hdCBzcGlsbEZvcm1hdCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKLSAgICAgICAg
ICAgIHN3aXRjaCAoc3BpbGxGb3JtYXQpIHsKLSAgICAgICAgICAgIGNhc2UgRGF0YUZvcm1hdERv
dWJsZTogewotICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAg
ICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iodmly
dHVhbFJlZ2lzdGVyKSwgZnByKTsKLSAgICAgICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwg
dmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKLSAgICAgICAgICAgICAgICBpbmZv
LmZpbGxEb3VibGUoZnByKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZnByOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdl
cjogewotICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0
ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklU
Q29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKLSAgICAgICAgICAg
ICAgICBpbmZvLmZpbGxJbnRlZ2VyKGdwcik7Ci0gICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7Ci0gICAgICAg
IAotICAgICAgICAgICAgICAgIEFTU0VSVChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7Ci0g
ICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxP
cmRlclNwaWxsZWQpOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKLSAgICAgICAgICAgICAgICBpbmZv
LmZpbGxKU1ZhbHVlKGdwciwgc3BpbGxGb3JtYXQpOwotICAgICAgICAgICAgICAgIHVubG9jayhn
cHIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKLSAgICBjYXNlIERh
dGFGb3JtYXROb25lOgotICAgICAgICAvLyBTaG91bGQgaGF2ZSBmaWxsZWQsIGFib3ZlLgotICAg
IGNhc2UgRGF0YUZvcm1hdENlbGw6Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgotICAgIGNh
c2UgRGF0YUZvcm1hdEJvb2xlYW46Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOgotICAg
IGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6Ci0gICAgICAgIC8vIFNob3VsZCBvbmx5IGJlIGNhbGxp
bmcgdGhpcyBmdW5jdGlvbiBpZiB3ZSBrbm93IHRoaXMgb3BlcmFuZCB0byBiZSBudW1lcmljLgot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIGNhc2UgRGF0YUZvcm1hdEpTOiB7
Ci0gICAgICAgIEdQUlJlZyBqc1ZhbHVlR3ByID0gaW5mby5ncHIoKTsKLSAgICAgICAgbV9ncHJz
LmxvY2soanNWYWx1ZUdwcik7Ci0gICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwot
ICAgICAgICBHUFJSZWcgdGVtcEdwciA9IGFsbG9jYXRlKCk7IC8vIEZJWE1FOiBjYW4gd2Ugc2tp
cCB0aGlzIGFsbG9jYXRpb24gb24gdGhlIGxhc3QgdXNlIG9mIHRoZSB2aXJ0dWFsIHJlZ2lzdGVy
PwotCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpOwotCi0gICAgICAgIG1faml0LmppdEFzc2VydElzSlNEb3VibGUo
anNWYWx1ZUdwcik7Ci0KLSAgICAgICAgLy8gRmlyc3QsIGlmIHdlIGdldCBoZXJlIHdlIGhhdmUg
YSBkb3VibGUgZW5jb2RlZCBhcyBhIEpTVmFsdWUKLSAgICAgICAgbV9qaXQubW92ZShqc1ZhbHVl
R3ByLCB0ZW1wR3ByKTsKLSAgICAgICAgdW5ib3hEb3VibGUodGVtcEdwciwgZnByKTsKLSAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgaGFzVW5ib3hlZERvdWJsZSA9IG1faml0Lmp1bXAoKTsKLQot
ICAgICAgICAvLyBGaW5hbGx5LCBoYW5kbGUgaW50ZWdlcnMuCi0gICAgICAgIGlzSW50ZWdlci5s
aW5rKCZtX2ppdCk7Ci0gICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGpzVmFsdWVH
cHIsIGZwcik7Ci0gICAgICAgIGhhc1VuYm94ZWREb3VibGUubGluaygmbV9qaXQpOwotCi0gICAg
ICAgIG1fZ3Bycy5yZWxlYXNlKGpzVmFsdWVHcHIpOwotICAgICAgICBtX2dwcnMudW5sb2NrKGpz
VmFsdWVHcHIpOwotICAgICAgICBtX2dwcnMudW5sb2NrKHRlbXBHcHIpOwotICAgICAgICBtX2Zw
cnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKLSAgICAg
ICAgaW5mby5maWxsRG91YmxlKGZwcik7Ci0gICAgICAgIGluZm8ua2lsbFNwaWxsZWQoKTsKLSAg
ICAgICAgcmV0dXJuIGZwcjsKLSAgICB9Ci0KLSAgICBjYXNlIERhdGFGb3JtYXRKU0ludGVnZXI6
Ci0gICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjogewotICAgICAgICBGUFJSZWcgZnByID0gZnBy
QWxsb2NhdGUoKTsKLSAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7Ci0gICAgICAgIG1f
Z3Bycy5sb2NrKGdwcik7Ci0gICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGdwciwg
ZnByKTsKLSAgICAgICAgbV9ncHJzLnVubG9jayhncHIpOwotICAgICAgICByZXR1cm4gZnByOwot
ICAgIH0KLQotICAgIC8vIFVuYm94IHRoZSBkb3VibGUKLSAgICBjYXNlIERhdGFGb3JtYXRKU0Rv
dWJsZTogewotICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKLSAgICAgICAgRlBSUmVn
IGZwciA9IGZwckFsbG9jYXRlKCk7Ci0gICAgICAgIGlmIChtX2dwcnMuaXNMb2NrZWQoZ3ByKSkg
ewotICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IHRyYW1wbGUgZ3ByIGlmIGl0IGlz
IGluIHVzZS4KLSAgICAgICAgICAgIEdQUlJlZyB0ZW1wID0gYWxsb2NhdGUoKTsKLSAgICAgICAg
ICAgIG1faml0Lm1vdmUoZ3ByLCB0ZW1wKTsKLSAgICAgICAgICAgIHVuYm94RG91YmxlKHRlbXAs
IGZwcik7Ci0gICAgICAgICAgICB1bmxvY2sodGVtcCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgdW5ib3hEb3VibGUoZ3ByLCBmcHIpOwotCi0gICAgICAgIG1fZ3Bycy5yZWxlYXNlKGdw
cik7Ci0gICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3Jk
ZXJEb3VibGUpOwotCi0gICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIpOwotICAgICAgICByZXR1
cm4gZnByOwotICAgIH0KLQotICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZTogewotICAgICAgICBG
UFJSZWcgZnByID0gaW5mby5mcHIoKTsKLSAgICAgICAgbV9mcHJzLmxvY2soZnByKTsKLSAgICAg
ICAgcmV0dXJuIGZwcjsKLSAgICB9Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIEludmFsaWRGUFJSZWc7Ci19Ci0KLUdQUlJlZyBKSVRDb2RlR2VuZXJhdG9y
OjpmaWxsSlNWYWx1ZShOb2RlSW5kZXggbm9kZUluZGV4KQotewotICAgIE5vZGUmIG5vZGUgPSBh
dChub2RlSW5kZXgpOwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2Rl
LnZpcnR1YWxSZWdpc3RlcigpOwotICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0
aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwotCi0gICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9y
bWF0KCkpIHsKLSAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7Ci0gICAgICAgIEdQUlJlZyBncHIg
PSBhbGxvY2F0ZSgpOwotCi0gICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKLSAgICAg
ICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSkgewotICAgICAgICAgICAgICAg
IGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKLSAgICAgICAgICAg
ICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBqc051bWJlcih2YWx1ZU9mSW50MzJDb25zdGFudChub2Rl
SW5kZXgpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1Q
dHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKSB7Ci0gICAgICAgICAgICAgICAgaW5mby5m
aWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0RvdWJsZSk7Ci0gICAgICAgICAgICAgICAgSlNW
YWx1ZSBqc1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZU9mTnVtYmVyQ29uc3Rh
bnQobm9kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZUluZGV4KSk7
Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9k
ZUluZGV4KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1Q
dHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKLSAgICAgICAgICAgICAgICBpbmZv
LmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0
YW50KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIERhdGFGb3JtYXQgc3BpbGxGb3Jt
YXQgPSBpbmZvLnNwaWxsRm9ybWF0KCk7Ci0gICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwg
dmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgICAgICBpZiAoc3Bp
bGxGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpIHsKLSAgICAgICAgICAgICAgICBtX2ppdC5s
b2FkMzIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKLSAg
ICAgICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IGdwcik7Ci0gICAgICAgICAgICAgICAgc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0SlNJbnRlZ2Vy
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7Ci0gICAgICAgICAg
ICAgICAgaWYgKHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gTmVlZCB0byBib3ggdGhlIGRvdWJsZSwgc2luY2Ugd2Ugd2FudCBhIEpTVmFs
dWUuCi0gICAgICAgICAgICAgICAgICAgIG1faml0LnN1YlB0cihHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIsIGdwcik7Ci0gICAgICAgICAgICAgICAgICAgIHNwaWxsRm9ybWF0ID0gRGF0
YUZvcm1hdEpTRG91YmxlOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIHNwaWxsRm9ybWF0KTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gZ3ByOwotICAgIH0KLQotICAgIGNhc2UgRGF0YUZvcm1hdEludGVn
ZXI6IHsKLSAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7Ci0gICAgICAgIC8vIElmIHRo
ZSByZWdpc3RlciBoYXMgYWxyZWFkeSBiZWVuIGxvY2tlZCB3ZSBuZWVkIHRvIHRha2UgYSBjb3B5
LgotICAgICAgICAvLyBJZiBub3QsIHdlJ2xsIHplcm8gZXh0ZW5kIGluIHBsYWNlLCBzbyBtYXJr
IG9uIHRoZSBpbmZvIHRoYXQgdGhpcyBpcyBub3cgdHlwZSBEYXRhRm9ybWF0SW50ZWdlciwgbm90
IERhdGFGb3JtYXRKU0ludGVnZXIuCi0gICAgICAgIGlmIChtX2dwcnMuaXNMb2NrZWQoZ3ByKSkg
ewotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IGFsbG9jYXRlKCk7Ci0gICAgICAgICAgICBt
X2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwciwgcmVzdWx0KTsK
LSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgICAgbV9ncHJzLmxv
Y2soZ3ByKTsKLSAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyLCBncHIpOwotICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTSW50
ZWdlcik7Ci0gICAgICAgIHJldHVybiBncHI7Ci0gICAgfQotCi0gICAgY2FzZSBEYXRhRm9ybWF0
RG91YmxlOiB7Ci0gICAgICAgIEZQUlJlZyBmcHIgPSBpbmZvLmZwcigpOwotICAgICAgICBHUFJS
ZWcgZ3ByID0gYm94RG91YmxlKGZwcik7Ci0KLSAgICAgICAgLy8gVXBkYXRlIGFsbCBpbmZvCi0g
ICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNEb3VibGUpOwotICAgICAg
ICBtX2ZwcnMucmVsZWFzZShmcHIpOwotICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVh
bFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOwotCi0gICAgICAgIHJldHVybiBncHI7Ci0gICAgfQot
Ci0gICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKLSAgICAgICAgLy8gTm8gcmV0YWcgcmVxdWlyZWQg
b24gSlNWQUxVRTY0IQotICAgIGNhc2UgRGF0YUZvcm1hdEpTOgotICAgIGNhc2UgRGF0YUZvcm1h
dEpTSW50ZWdlcjoKLSAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZToKLSAgICBjYXNlIERhdGFG
b3JtYXRKU0NlbGw6Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOiB7Ci0gICAgICAgIEdQ
UlJlZyBncHIgPSBpbmZvLmdwcigpOwotICAgICAgICBtX2dwcnMubG9jayhncHIpOwotICAgICAg
ICByZXR1cm4gZ3ByOwotICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVh
bjoKLSAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdlOgotICAgICAgICAvLyB0aGlzIHR5cGUgY3Vy
cmVudGx5IG5ldmVyIG9jY3VycwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9
Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gSW52YWxpZEdQUlJlZzsK
LX0KLQotdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVZhbHVlVG9OdW1iZXIo
Tm9kZSYgbm9kZSkKLXsKLSAgICBpZiAoaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDEoKSkpIHsK
LSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7Ci0gICAgICAgIG1faml0Lm1vdmUob3Ax
LmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSlNWYWx1
ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7Ci0gICAgCi0gICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEo
KSkpOwotICAgIEFTU0VSVCghaXNOdW1iZXJDb25zdGFudChub2RlLmNoaWxkMSgpKSk7Ci0gICAg
Ci0gICAgR1BSUmVnIGpzVmFsdWVHcHIgPSBvcDEuZ3ByKCk7Ci0gICAgR1BSUmVnIGdwciA9IHJl
c3VsdC5ncHIoKTsKLSAgICBvcDEudXNlKCk7Ci0KLSAgICBKSVRDb21waWxlcjo6SnVtcCBpc0lu
dGVnZXIgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwganNW
YWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICBKSVRDb21waWxl
cjo6SnVtcCBub25OdW1lcmljID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6
WmVybywganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLQotICAg
IC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQgYXMgYSBK
U1ZhbHVlCi0gICAgbV9qaXQubW92ZShqc1ZhbHVlR3ByLCBncHIpOwotICAgIEpJVENvbXBpbGVy
OjpKdW1wIGhhc1VuYm94ZWREb3VibGUgPSBtX2ppdC5qdW1wKCk7Ci0KLSAgICAvLyBOZXh0IGhh
bmRsZSBjZWxscyAoJiBvdGhlciBKUyBpbW1lZGlhdGVzKQotICAgIG5vbk51bWVyaWMubGluaygm
bV9qaXQpOwotICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKGdwcik7Ci0gICAgY2FsbE9wZXJh
dGlvbihkZmdDb252ZXJ0SlNWYWx1ZVRvTnVtYmVyLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwg
anNWYWx1ZUdwcik7Ci0gICAgYm94RG91YmxlKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBncHIp
OwotICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoZ3ByKTsKLSAgICBKSVRDb21waWxlcjo6SnVt
cCBoYXNDYWxsZWRUb051bWJlciA9IG1faml0Lmp1bXAoKTsKLSAgICAKLSAgICAvLyBGaW5hbGx5
LCBoYW5kbGUgaW50ZWdlcnMuCi0gICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKLSAgICBtX2pp
dC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGpzVmFsdWVHcHIsIGdwcik7
Ci0gICAgaGFzVW5ib3hlZERvdWJsZS5saW5rKCZtX2ppdCk7Ci0gICAgaGFzQ2FsbGVkVG9OdW1i
ZXIubGluaygmbV9qaXQpOwotICAgIAotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBt
X2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLX0KLQotdm9pZCBK
SVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVZhbHVlVG9JbnQzMihOb2RlJiBub2RlKQot
ewotICAgIEFTU0VSVCghaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKTsKLSAgICAKLSAg
ICBpZiAoaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKSkpIHsKLSAgICAgICAgSW50ZWdlck9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIG9wMSk7Ci0gICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3By
KCkpOwotICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIEdlbmVyYXRpb25JbmZvJiBjaGls
ZEluZm8gPSBtX2dlbmVyYXRpb25JbmZvW2F0KG5vZGUuY2hpbGQxKCkpLnZpcnR1YWxSZWdpc3Rl
cigpXTsKLSAgICBpZiAoY2hpbGRJbmZvLmlzSlNEb3VibGUoKSkgewotICAgICAgICBEb3VibGVP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKLSAgICAgICAgRlBSUmVnIGZwciA9IG9wMS5mcHIoKTsKLSAgICAgICAgR1BS
UmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgb3AxLnVzZSgpOwotICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCB0cnVuY2F0ZWRUb0ludGVnZXIgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURv
dWJsZVRvSW50MzIoZnByLCBncHIsIEpJVENvbXBpbGVyOjpCcmFuY2hJZlRydW5jYXRlU3VjY2Vz
c2Z1bCk7Ci0gICAgICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhncHIpOwot
ICAgICAgICBjYWxsT3BlcmF0aW9uKHRvSW50MzIsIGdwciwgZnByKTsKLSAgICAgICAgc2lsZW50
RmlsbEFsbFJlZ2lzdGVycyhncHIpOwotICAgICAgICAKLSAgICAgICAgdHJ1bmNhdGVkVG9JbnRl
Z2VyLmxpbmsoJm1faml0KTsKLSAgICAgICAgaW50ZWdlclJlc3VsdChncHIsIG1fY29tcGlsZUlu
ZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIAotICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7Ci0gICAgR1BSUmVnIGpzVmFsdWVHcHIg
PSBvcDEuZ3ByKCk7Ci0gICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICBv
cDEudXNlKCk7Ci0KLSAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwganNWYWx1ZUdwciwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLQotICAgIC8vIEZpcnN0IGhhbmRsZSBub24taW50ZWdl
cnMKLSAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgIGNhbGxPcGVy
YXRpb24oZGZnQ29udmVydEpTVmFsdWVUb0ludDMyLCByZXN1bHRHUFIsIGpzVmFsdWVHcHIpOwot
ICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICBKSVRDb21waWxlcjo6
SnVtcCBoYXNDYWxsZWRUb0ludDMyID0gbV9qaXQuanVtcCgpOwotCi0gICAgLy8gVGhlbiBoYW5k
bGUgaW50ZWdlcnMuCi0gICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKLSAgICBtX2ppdC56ZXJv
RXh0ZW5kMzJUb1B0cihqc1ZhbHVlR3ByLCByZXN1bHRHUFIpOwotICAgIGhhc0NhbGxlZFRvSW50
MzIubGluaygmbV9qaXQpOwotICAgIGludGVnZXJSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJ
bmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLX0KLQotdm9pZCBKSVRDb2RlR2Vu
ZXJhdG9yOjpub25TcGVjdWxhdGl2ZVVJbnQzMlRvTnVtYmVyKE5vZGUmIG5vZGUpCi17Ci0gICAg
SW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIEZQUlRlbXBvcmFy
eSBib3hlcih0aGlzKTsKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7Ci0gICAg
Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgcG9zaXRpdmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCBvcDEuZ3ByKCksIFRydXN0ZWRJbW0zMigwKSk7
Ci0gICAgCi0gICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUob3AxLmdwcigpLCBib3hlci5m
cHIoKSk7Ci0gICAgbV9qaXQuYWRkRG91YmxlKEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3Mo
JnR3b1RvVGhlMzIpLCBib3hlci5mcHIoKSk7Ci0gICAgCi0gICAgYm94RG91YmxlKGJveGVyLmZw
cigpLCByZXN1bHQuZ3ByKCkpOwotICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBt
X2ppdC5qdW1wKCk7Ci0gICAgCi0gICAgcG9zaXRpdmUubGluaygmbV9qaXQpOwotICAgIAotICAg
IG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgb3AxLmdwcigpLCBy
ZXN1bHQuZ3ByKCkpOwotICAgIAotICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgIAotICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci19Ci0KLXZvaWQgSklU
Q29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVLbm93bkNvbnN0YW50QXJpdGhPcChOb2RlVHlw
ZSBvcCwgTm9kZUluZGV4IHJlZ0NoaWxkLCBOb2RlSW5kZXggaW1tQ2hpbGQsIGJvb2wgY29tbXV0
ZSkKLXsKLSAgICBKU1ZhbHVlT3BlcmFuZCByZWdBcmcodGhpcywgcmVnQ2hpbGQpOwotICAgIEdQ
UlJlZyByZWdBcmdHUFIgPSByZWdBcmcuZ3ByKCk7Ci0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKLSAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgIEZQUlRlbXBv
cmFyeSB0bXAxKHRoaXMpOwotICAgIEZQUlRlbXBvcmFyeSB0bXAyKHRoaXMpOwotICAgIEZQUlJl
ZyB0bXAxRlBSID0gdG1wMS5mcHIoKTsKLSAgICBGUFJSZWcgdG1wMkZQUiA9IHRtcDIuZnByKCk7
Ci0gICAgCi0gICAgcmVnQXJnLnVzZSgpOwotICAgIHVzZShpbW1DaGlsZCk7Ci0KLSAgICBKSVRD
b21waWxlcjo6SnVtcCBub3RJbnQ7Ci0gICAgCi0gICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50
MzJDb25zdGFudChpbW1DaGlsZCk7Ci0gICAgICAgIAotICAgIGlmICghaXNLbm93bkludGVnZXIo
cmVnQ2hpbGQpKQotICAgICAgICBub3RJbnQgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCByZWdBcmdHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0g
ICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXAgb3ZlcmZsb3c7Ci0gICAgCi0gICAgc3dpdGNoIChv
cCkgewotICAgIGNhc2UgVmFsdWVBZGQ6Ci0gICAgY2FzZSBBcml0aEFkZDoKLSAgICAgICAgb3Zl
cmZsb3cgPSBtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIHJlZ0Fy
Z0dQUiwgSW1tMzIoaW1tKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAot
ICAgIGNhc2UgQXJpdGhTdWI6Ci0gICAgICAgIG92ZXJmbG93ID0gbV9qaXQuYnJhbmNoU3ViMzIo
TWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCByZWdBcmdHUFIsIEltbTMyKGltbSksIHJlc3VsdEdQ
Uik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZXN1bHRHUFIpOwotICAgICAgICAKLSAgICBKSVRDb21w
aWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwotICAgIAotICAgIG92ZXJmbG93Lmxpbmso
Jm1faml0KTsKLSAgICAKLSAgICBKSVRDb21waWxlcjo6SnVtcCBub3ROdW1iZXI7Ci0gICAgCi0g
ICAgLy8gZmlyc3QgZGVhbCB3aXRoIG92ZXJmbG93IGNhc2UKLSAgICBtX2ppdC5jb252ZXJ0SW50
MzJUb0RvdWJsZShyZWdBcmdHUFIsIHRtcDJGUFIpOwotICAgIAotICAgIC8vIG5vdyBkZWFsIHdp
dGggbm90LWludCBjYXNlLCBpZiBhcHBsaWNhYmxlCi0gICAgaWYgKCFpc0tub3duSW50ZWdlcihy
ZWdDaGlsZCkpIHsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaGF2ZVZhbHVlID0gbV9qaXQu
anVtcCgpOwotICAgICAgICAKLSAgICAgICAgbm90SW50LmxpbmsoJm1faml0KTsKLSAgICAgICAg
Ci0gICAgICAgIGlmICghaXNLbm93bk51bWVyaWMocmVnQ2hpbGQpKSB7Ci0gICAgICAgICAgICBB
U1NFUlQob3AgPT0gVmFsdWVBZGQpOwotICAgICAgICAgICAgbm90TnVtYmVyID0gbV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVnQXJnR1BSLCBHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5t
b3ZlKHJlZ0FyZ0dQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQuYWRkUHRyKEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0R1BSKTsKLSAgICAgICAgbV9qaXQubW92ZVB0
clRvRG91YmxlKHJlc3VsdEdQUiwgdG1wMkZQUik7Ci0gICAgICAgIAotICAgICAgICBoYXZlVmFs
dWUubGluaygmbV9qaXQpOwotICAgIH0KLSAgICAKLSAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXREb3VibGVUb0lu
dHB0cih2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoaW1tQ2hpbGQpKSkpLCByZXN1bHRHUFIpOwotICAg
IG1faml0Lm1vdmVQdHJUb0RvdWJsZShyZXN1bHRHUFIsIHRtcDFGUFIpOwotICAgIHN3aXRjaCAo
b3ApIHsKLSAgICBjYXNlIFZhbHVlQWRkOgotICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAgICAgIG1f
aml0LmFkZERvdWJsZSh0bXAxRlBSLCB0bXAyRlBSKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAg
IAotICAgIGNhc2UgQXJpdGhTdWI6Ci0gICAgICAgIG1faml0LnN1YkRvdWJsZSh0bXAxRlBSLCB0
bXAyRlBSKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6
Okp1bXAgZG9uZUNhc2VDb252ZXJ0ZWRUb0ludDsKLSAgICAKLSAgICBpZiAob3AgPT0gVmFsdWVB
ZGQpIHsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKLSAgICAg
ICAgbV9qaXQuYnJhbmNoQ29udmVydERvdWJsZVRvSW50MzIodG1wMkZQUiwgcmVzdWx0R1BSLCBm
YWlsdXJlQ2FzZXMsIHRtcDFGUFIpOwotICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAgICBkb25lQ2Fz
ZUNvbnZlcnRlZFRvSW50ID0gbV9qaXQuanVtcCgpOwotICAgICAgICAKLSAgICAgICAgZmFpbHVy
ZUNhc2VzLmxpbmsoJm1faml0KTsKLSAgICB9Ci0gICAgCi0gICAgbV9qaXQubW92ZURvdWJsZVRv
UHRyKHRtcDJGUFIsIHJlc3VsdEdQUik7Ci0gICAgbV9qaXQuc3ViUHRyKEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgaWYgKCFpc0tub3du
TnVtZXJpYyhyZWdDaGlsZCkpIHsKLSAgICAgICAgQVNTRVJUKG5vdE51bWJlci5pc1NldCgpKTsK
LSAgICAgICAgQVNTRVJUKG9wID09IFZhbHVlQWRkKTsKLSAgICAgICAgICAgIAotICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBkb25lQ2FzZVdhc051bWJlciA9IG1faml0Lmp1bXAoKTsKLSAgICAg
ICAgICAgIAotICAgICAgICBub3ROdW1iZXIubGluaygmbV9qaXQpOwotICAgICAgICAgICAgCi0g
ICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgIGlmIChj
b21tdXRlKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZUFkZE5vdE51
bWJlciwgcmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoaW1tKSwgcmVnQXJnR1BSKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZUFk
ZE5vdE51bWJlciwgcmVzdWx0R1BSLCByZWdBcmdHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihp
bW0pKTsKLSAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAg
ICAgICAgCi0gICAgICAgIGRvbmVDYXNlV2FzTnVtYmVyLmxpbmsoJm1faml0KTsKLSAgICB9Ci0g
ICAgCi0gICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgaWYgKGRvbmVDYXNlQ29udmVydGVkVG9J
bnQuaXNTZXQoKSkKLSAgICAgICAgZG9uZUNhc2VDb252ZXJ0ZWRUb0ludC5saW5rKCZtX2ppdCk7
Ci0gICAgICAgIAotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwg
VXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLX0KLQotdm9pZCBKSVRDb2RlR2VuZXJhdG9y
Ojpub25TcGVjdWxhdGl2ZUJhc2ljQXJpdGhPcChOb2RlVHlwZSBvcCwgTm9kZSAmbm9kZSkKLXsK
LSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIEpTVmFs
dWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgCi0gICAgRlBSVGVtcG9y
YXJ5IHRtcDEodGhpcyk7Ci0gICAgRlBSVGVtcG9yYXJ5IHRtcDIodGhpcyk7Ci0gICAgRlBSUmVn
IHRtcDFGUFIgPSB0bXAxLmZwcigpOwotICAgIEZQUlJlZyB0bXAyRlBSID0gdG1wMi5mcHIoKTsK
LSAgICAKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotCi0gICAgR1BSUmVnIGFyZzFH
UFIgPSBhcmcxLmdwcigpOwotICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKLSAgICAK
LSAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgIAotICAgIGFyZzEudXNl
KCk7Ci0gICAgYXJnMi51c2UoKTsKLSAgICAKLSAgICBKSVRDb21waWxlcjo6SnVtcCBjaGlsZDFO
b3RJbnQ7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgY2hpbGQyTm90SW50OwotICAgIEpJVENvbXBp
bGVyOjpKdW1wTGlzdCBvdmVyZmxvdzsKLSAgICAKLSAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5v
ZGUuY2hpbGQxKCkpKQotICAgICAgICBjaGlsZDFOb3RJbnQgPSBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpOwotICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKSkpCi0gICAgICAgIGNo
aWxkMk5vdEludCA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJH
UFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0gICAgCi0gICAgc3dpdGNoIChv
cCkgewotICAgIGNhc2UgVmFsdWVBZGQ6Ci0gICAgY2FzZSBBcml0aEFkZDogewotICAgICAgICBv
dmVyZmxvdy5hcHBlbmQobV9qaXQuYnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93
LCBhcmcxR1BSLCBhcmcyR1BSLCByZXN1bHRHUFIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgICAgICAKLSAgICBjYXNlIEFyaXRoU3ViOiB7Ci0gICAgICAgIG92ZXJmbG93LmFwcGVuZCht
X2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIGFyZzFHUFIsIGFyZzJH
UFIsIHJlc3VsdEdQUikpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAotICAgIGNh
c2UgQXJpdGhNdWw6IHsKLSAgICAgICAgb3ZlcmZsb3cuYXBwZW5kKG1faml0LmJyYW5jaE11bDMy
KE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BSKSk7
Ci0gICAgICAgIG92ZXJmbG93LmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIHJlc3VsdEdQUikpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICAK
LSAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdEdQ
Uik7Ci0gICAgICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7
Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGhhdmVGUFJBcmd1bWVudHM7Ci0KLSAg
ICBvdmVyZmxvdy5saW5rKCZtX2ppdCk7Ci0gICAgICAgIAotICAgIC8vIGJvdGggYXJndW1lbnRz
IGFyZSBpbnRlZ2VycwotICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGFyZzFHUFIsIHRt
cDFGUFIpOwotICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGFyZzJHUFIsIHRtcDJGUFIp
OwotICAgICAgICAKLSAgICBoYXZlRlBSQXJndW1lbnRzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwot
ICAgICAgICAKLSAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgbm90TnVtYmVyczsKLSAgICAgICAg
Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgY2hpbGQyTm90SW50MjsKLSAgICAgICAgCi0gICAgaWYg
KCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSkgewotICAgICAgICBjaGlsZDFOb3RJbnQu
bGluaygmbV9qaXQpOwotICAgICAgICAgICAgCi0gICAgICAgIGlmICghaXNLbm93bk51bWVyaWMo
bm9kZS5jaGlsZDEoKSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChvcCA9PSBWYWx1ZUFkZCk7Ci0g
ICAgICAgICAgICBub3ROdW1iZXJzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsK
LSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIG1faml0Lm1vdmUoYXJnMUdQUiwgcmVz
dWx0R1BSKTsKLSAgICAgICAgdW5ib3hEb3VibGUocmVzdWx0R1BSLCB0bXAxRlBSKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAvLyBjaGlsZDEgaXMgY29udmVydGVkIHRvIGEgZG91YmxlOyBjaGls
ZDIgbWF5IGVpdGhlciBiZSBhbiBpbnQgb3IKLSAgICAgICAgLy8gYSBib3hlZCBkb3VibGUKLSAg
ICAgICAgICAgIAotICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7
Ci0gICAgICAgICAgICBpZiAoaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDIoKSkpCi0gICAgICAg
ICAgICAgICAgY2hpbGQyTm90SW50MiA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7Ci0gICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQob3AgPT0gVmFsdWVBZGQpOwotICAg
ICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGNoaWxkMklzSW50ID0gbV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlcik7Ci0gICAgICAgICAgICAgICAgbm90TnVtYmVycy5hcHBlbmQobV9q
aXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgYXJnMkdQUiwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7Ci0gICAgICAgICAgICAgICAgY2hpbGQyTm90SW50MiA9
IG1faml0Lmp1bXAoKTsKLSAgICAgICAgICAgICAgICBjaGlsZDJJc0ludC5saW5rKCZtX2ppdCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAvLyBjaGls
ZCAyIGlzIGRlZmluaXRlbHkgYW4gaW50ZWdlcgotICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJU
b0RvdWJsZShhcmcyR1BSLCB0bXAyRlBSKTsKLSAgICAgICAgICAgIAotICAgICAgICBoYXZlRlBS
QXJndW1lbnRzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwotICAgIH0KLSAgICAgICAgCi0gICAgaWYg
KCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkgewotICAgICAgICBjaGlsZDJOb3RJbnQu
bGluaygmbV9qaXQpOwotICAgICAgICAgICAgCi0gICAgICAgIGlmICghaXNLbm93bk51bWVyaWMo
bm9kZS5jaGlsZDIoKSkpIHsKLSAgICAgICAgICAgIEFTU0VSVChvcCA9PSBWYWx1ZUFkZCk7Ci0g
ICAgICAgICAgICBub3ROdW1iZXJzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsK
LSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIC8vIGNoaWxkMSBpcyBkZWZpbml0ZWx5
IGFuIGludGVnZXIsIGFuZCBjaGlsZCAyIGlzIGRlZmluaXRlbHkgbm90Ci0gICAgICAgICAgICAK
LSAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUoYXJnMUdQUiwgdG1wMUZQUik7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgaWYgKGNoaWxkMk5vdEludDIuaXNTZXQoKSkKLSAgICAgICAg
ICAgIGNoaWxkMk5vdEludDIubGluaygmbV9qaXQpOwotICAgICAgICAgICAgCi0gICAgICAgIG1f
aml0Lm1vdmUoYXJnMkdQUiwgcmVzdWx0R1BSKTsKLSAgICAgICAgdW5ib3hEb3VibGUocmVzdWx0
R1BSLCB0bXAyRlBSKTsKLSAgICB9Ci0gICAgICAgIAotICAgIGhhdmVGUFJBcmd1bWVudHMubGlu
aygmbV9qaXQpOwotICAgICAgICAKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBWYWx1ZUFk
ZDoKLSAgICBjYXNlIEFyaXRoQWRkOgotICAgICAgICBtX2ppdC5hZGREb3VibGUodG1wMkZQUiwg
dG1wMUZQUik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgY2FzZSBBcml0aFN1
YjoKLSAgICAgICAgbV9qaXQuc3ViRG91YmxlKHRtcDJGUFIsIHRtcDFGUFIpOwotICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIAotICAgIGNhc2UgQXJpdGhNdWw6Ci0gICAgICAgIG1faml0Lm11
bERvdWJsZSh0bXAyRlBSLCB0bXAxRlBSKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAK
LSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAg
Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZUNhc2VDb252ZXJ0ZWRUb0ludDsKLSAgICAKLSAg
ICBpZiAob3AgPT0gVmFsdWVBZGQpIHsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGZh
aWx1cmVDYXNlczsKLSAgICAgICAgbV9qaXQuYnJhbmNoQ29udmVydERvdWJsZVRvSW50MzIodG1w
MUZQUiwgcmVzdWx0R1BSLCBmYWlsdXJlQ2FzZXMsIHRtcDJGUFIpOwotICAgICAgICBtX2ppdC5v
clB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdEdQUik7Ci0gICAgICAg
IAotICAgICAgICBkb25lQ2FzZUNvbnZlcnRlZFRvSW50ID0gbV9qaXQuanVtcCgpOwotICAgICAg
ICAKLSAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmsoJm1faml0KTsKLSAgICB9Ci0gICAgICAgIAot
ICAgIGJveERvdWJsZSh0bXAxRlBSLCByZXN1bHRHUFIpOwotICAgICAgICAKLSAgICBpZiAoIW5v
dE51bWJlcnMuZW1wdHkoKSkgewotICAgICAgICBBU1NFUlQob3AgPT0gVmFsdWVBZGQpOwotICAg
ICAgICAgICAgCi0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmVDYXNlV2FzTnVtYmVyID0g
bV9qaXQuanVtcCgpOwotICAgICAgICAgICAgCi0gICAgICAgIG5vdE51bWJlcnMubGluaygmbV9q
aXQpOwotICAgICAgICAgICAgCi0gICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dEdQUik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVBZGROb3ROdW1iZXIs
IHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUik7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdp
c3RlcnMocmVzdWx0R1BSKTsKLQotICAgICAgICBkb25lQ2FzZVdhc051bWJlci5saW5rKCZtX2pp
dCk7Ci0gICAgfQotICAgIAotICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgIGlmIChkb25lQ2Fz
ZUNvbnZlcnRlZFRvSW50LmlzU2V0KCkpCi0gICAgICAgIGRvbmVDYXNlQ29udmVydGVkVG9JbnQu
bGluaygmbV9qaXQpOwotICAgICAgICAKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9j
b21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Ci19Ci0KLUpJVENvbXBp
bGVyOjpDYWxsIEpJVENvZGVHZW5lcmF0b3I6OmNhY2hlZEdldEJ5SWQoR1BSUmVnIGJhc2VHUFIs
IEdQUlJlZyByZXN1bHRHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCwgTm9kZVR5cGUgbm9kZVR5
cGUpCi17Ci0gICAgQVNTRVJUKG5vZGVUeXBlID09IEdldEJ5SWQgfHwgbm9kZVR5cGUgPT0gR2V0
TWV0aG9kKTsKLQotICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21w
YXJlOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIHN0cnVjdHVyZUNoZWNrID0gbV9qaXQuYnJhbmNo
UHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKSk7
Ci0gICAgCi0gICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7Ci0gICAgSklU
Q29tcGlsZXI6OkRhdGFMYWJlbENvbXBhY3QgbG9hZFdpdGhQYXRjaCA9IG1faml0LmxvYWRQdHJX
aXRoQ29tcGFjdEFkZHJlc3NPZmZzZXRQYXRjaChKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRH
UFIsIDApLCByZXN1bHRHUFIpOwotICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBt
X2ppdC5qdW1wKCk7Ci0KLSAgICBzdHJ1Y3R1cmVDaGVjay5saW5rKCZtX2ppdCk7Ci0gICAgCi0g
ICAgaWYgKHNsb3dQYXRoVGFyZ2V0LmlzU2V0KCkpCi0gICAgICAgIHNsb3dQYXRoVGFyZ2V0Lmxp
bmsoJm1faml0KTsKLSAgICAKLSAgICBKSVRDb21waWxlcjo6TGFiZWwgc2xvd0Nhc2UgPSBtX2pp
dC5sYWJlbCgpOwotCi0gICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAg
ICBKSVRDb21waWxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxsT3BlcmF0aW9uKG5vZGVUeXBl
ID09IEdldEJ5SWQgPyBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUgOiBvcGVyYXRpb25HZXRNZXRo
b2RPcHRpbWl6ZSwgcmVzdWx0R1BSLCBiYXNlR1BSLCBpZGVudGlmaWVyKGlkZW50aWZpZXJOdW1i
ZXIpKTsKLSAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgCi0gICAg
ZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6OkxhYmVsIGRvbmVMYWJl
bCA9IG1faml0LmxhYmVsKCk7Ci0KLSAgICBtX2ppdC5hZGRQcm9wZXJ0eUFjY2VzcyhQcm9wZXJ0
eUFjY2Vzc1JlY29yZChzdHJ1Y3R1cmVUb0NvbXBhcmUsIGZ1bmN0aW9uQ2FsbCwgc3RydWN0dXJl
Q2hlY2ssIGxvYWRXaXRoUGF0Y2gsIHNsb3dDYXNlLCBkb25lTGFiZWwsIHNhZmVDYXN0PGludDhf
dD4oYmFzZUdQUiksIHNhZmVDYXN0PGludDhfdD4ocmVzdWx0R1BSKSwgc2FmZUNhc3Q8aW50OF90
PihzY3JhdGNoR1BSKSkpOwotICAgIAotICAgIGlmIChzY3JhdGNoR1BSICE9IHJlc3VsdEdQUiAm
JiBzY3JhdGNoR1BSICE9IEludmFsaWRHUFJSZWcpCi0gICAgICAgIHVubG9jayhzY3JhdGNoR1BS
KTsKLSAgICAKLSAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwotfQotCi12b2lkIEpJVENvZGVHZW5l
cmF0b3I6OmNhY2hlZFB1dEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgTm9k
ZUluZGV4IHZhbHVlSW5kZXgsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0
KQotewotICAgIAotICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21w
YXJlOwotICAgIEpJVENvbXBpbGVyOjpKdW1wIHN0cnVjdHVyZUNoZWNrID0gbV9qaXQuYnJhbmNo
UHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKSk7
Ci0KLSAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIsIHZhbHVlSW5kZXgsIFdyaXRl
QmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoR1BSKTsKLQotICAgIG1faml0LmxvYWRQ
dHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mUHJvcGVy
dHlTdG9yYWdlKCkpLCBzY3JhdGNoR1BSKTsKLSAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsMzIg
c3RvcmVXaXRoUGF0Y2ggPSBtX2ppdC5zdG9yZVB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2godmFs
dWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIDApKTsKLQotICAgIEpJVENv
bXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0KLSAgICBzdHJ1Y3R1cmVDaGVjay5s
aW5rKCZtX2ppdCk7Ci0KLSAgICBpZiAoc2xvd1BhdGhUYXJnZXQuaXNTZXQoKSkKLSAgICAgICAg
c2xvd1BhdGhUYXJnZXQubGluaygmbV9qaXQpOwotCi0gICAgSklUQ29tcGlsZXI6OkxhYmVsIHNs
b3dDYXNlID0gbV9qaXQubGFiZWwoKTsKLQotICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKElu
dmFsaWRHUFJSZWcpOwotICAgIFZfREZHT3BlcmF0aW9uX0VKQ0kgb3B0aW1pemVkQ2FsbDsKLSAg
ICBpZiAobV9qaXQuc3RyaWN0TW9kZUZvcihhdChtX2NvbXBpbGVJbmRleCkuY29kZU9yaWdpbikp
IHsKLSAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQotICAgICAgICAgICAgb3B0aW1pemVk
Q2FsbCA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRp
bWl6ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCi0gICAg
ICAgICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9w
dGltaXplOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0
aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBmdW5jdGlvbkNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wdGltaXplZENhbGwsIHZhbHVlR1BSLCBi
YXNlR1BSLCBpZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpKTsKLSAgICBzaWxlbnRGaWxsQWxs
UmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwotCi0gICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAg
SklUQ29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1faml0LmxhYmVsKCk7Ci0KLSAgICBtX2pp
dC5hZGRQcm9wZXJ0eUFjY2VzcyhQcm9wZXJ0eUFjY2Vzc1JlY29yZChzdHJ1Y3R1cmVUb0NvbXBh
cmUsIGZ1bmN0aW9uQ2FsbCwgc3RydWN0dXJlQ2hlY2ssIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxD
b21wYWN0KHN0b3JlV2l0aFBhdGNoLmxhYmVsKCkpLCBzbG93Q2FzZSwgZG9uZUxhYmVsLCBzYWZl
Q2FzdDxpbnQ4X3Q+KGJhc2VHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHZhbHVlR1BSKSwgc2FmZUNh
c3Q8aW50OF90PihzY3JhdGNoR1BSKSkpOwotfQotCi12b2lkIEpJVENvZGVHZW5lcmF0b3I6OmNh
Y2hlZEdldE1ldGhvZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIHNj
cmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNs
b3dQYXRoVGFyZ2V0KQotewotICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsOwotICAgIEpJ
VENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0VG9Db21wYXJlLCBwcm90b09iaiwgcHJvdG9T
dHJ1Y3RUb0NvbXBhcmUsIHB1dEZ1bmN0aW9uOwotICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1w
IHdyb25nU3RydWN0dXJlID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpO
b3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIHN0cnVjdFRvQ29tcGFyZSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKSk7Ci0gICAgcHJvdG9PYmogPSBtX2ppdC5tb3ZlV2l0
aFBhdGNoKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKDApLCByZXN1bHRHUFIpOwotICAgIEpJ
VENvbXBpbGVyOjpKdW1wIHdyb25nUHJvdG9TdHJ1Y3R1cmUgPSBtX2ppdC5icmFuY2hQdHJXaXRo
UGF0Y2goSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBwcm90b1N0cnVjdFRvQ29tcGFyZSwgSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKSk7Ci0g
ICAgCi0gICAgcHV0RnVuY3Rpb24gPSBtX2ppdC5tb3ZlV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tUHRyKDApLCByZXN1bHRHUFIpOwotICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgCi0gICAgd3JvbmdTdHJ1Y3R1cmUubGluaygmbV9q
aXQpOwotICAgIHdyb25nUHJvdG9TdHJ1Y3R1cmUubGluaygmbV9qaXQpOwotICAgIAotICAgIHNs
b3dDYWxsID0gY2FjaGVkR2V0QnlJZChiYXNlR1BSLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIGlk
ZW50aWZpZXJOdW1iZXIsIHNsb3dQYXRoVGFyZ2V0LCBHZXRNZXRob2QpOwotICAgIAotICAgIGRv
bmUubGluaygmbV9qaXQpOwotICAgIAotICAgIG1faml0LmFkZE1ldGhvZEdldChzbG93Q2FsbCwg
c3RydWN0VG9Db21wYXJlLCBwcm90b09iaiwgcHJvdG9TdHJ1Y3RUb0NvbXBhcmUsIHB1dEZ1bmN0
aW9uKTsKLX0KLQotdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZU5vblBlZXBo
b2xlQ29tcGFyZU51bGwoTm9kZUluZGV4IG9wZXJhbmQsIGJvb2wgaW52ZXJ0KQotewotICAgIEpT
VmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBvcGVyYW5kKTsKLSAgICBHUFJSZWcgYXJnR1BSID0gYXJn
LmdwcigpOwotICAgIAotICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYXJnKTsKLSAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgIAotICAgIEpJVENvbXBpbGVyOjpK
dW1wIG5vdENlbGw7Ci0gICAgCi0gICAgaWYgKCFpc0tub3duQ2VsbChvcGVyYW5kKSkKLSAgICAg
ICAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8s
IGFyZ0dQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKLSAgICAKLSAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGFyZ0dQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksIHJlc3VsdEdQUik7Ci0gICAgbV9qaXQudGVzdDgoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Olpl
cm8gOiBKSVRDb21waWxlcjo6Tm9uWmVybywgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BS
LCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCksIHJlc3VsdEdQUik7Ci0gICAgCi0gICAgaWYg
KCFpc0tub3duQ2VsbChvcGVyYW5kKSkgewotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25l
ID0gbV9qaXQuanVtcCgpOwotICAgICAgICAKLSAgICAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7
Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5tb3ZlKGFyZ0dQUiwgcmVzdWx0R1BSKTsKLSAgICAg
ICAgbV9qaXQuYW5kUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5l
ZCksIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0LmNvbXBhcmVQdHIoaW52ZXJ0ID8gSklUQ29t
cGlsZXI6Ok5vdEVxdWFsIDogSklUQ29tcGlsZXI6OkVxdWFsLCByZXN1bHRHUFIsIEpJVENvbXBp
bGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVOdWxsKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAg
ICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgIH0KLSAgICAKLSAgICBtX2ppdC5vcjMyKFRydXN0
ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwotfQotCi12b2lkIEpJ
VENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKE5vZGVJbmRl
eCBvcGVyYW5kLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBib29sIGludmVydCkKLXsKLSAg
ICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4
IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKLSAgICBCbG9ja0luZGV4IG5v
dFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKLSAgICAKLSAgICBpZiAo
dGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkgewotICAgICAgICBpbnZlcnQgPSAhaW52ZXJ0OwotICAg
ICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOwotICAgICAgICB0YWtlbiA9IG5vdFRha2VuOwot
ICAgICAgICBub3RUYWtlbiA9IHRtcDsKLSAgICB9Ci0KLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmco
dGhpcywgb3BlcmFuZCk7Ci0gICAgR1BSUmVnIGFyZ0dQUiA9IGFyZy5ncHIoKTsKLSAgICAKLSAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGFyZyk7Ci0gICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKLSAgICAKLSAgICBKSVRDb21waWxlcjo6SnVtcCBub3RDZWxsOwotICAg
IAotICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZCkpCi0gICAgICAgIG5vdENlbGwgPSBtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBhcmdHUFIsIEdQUkluZm86
OnRhZ01hc2tSZWdpc3Rlcik7Ci0gICAgCi0gICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6
QWRkcmVzcyhhcmdHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZXN1bHRHUFIpOwot
ICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0OChpbnZlcnQgPyBKSVRDb21waWxlcjo6WmVy
byA6IEpJVENvbXBpbGVyOjpOb25aZXJvLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIs
IFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRha2VuKTsKLSAgICAKLSAgICBpZiAoIWlz
S25vd25DZWxsKG9wZXJhbmQpKSB7Ci0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5v
dFRha2VuKTsKLSAgICAgICAgCi0gICAgICAgIG5vdENlbGwubGluaygmbV9qaXQpOwotICAgICAg
ICAKLSAgICAgICAgbV9qaXQubW92ZShhcmdHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgIG1faml0
LmFuZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1
bHRHUFIpOwotICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKGludmVydCA/IEpJVENv
bXBpbGVyOjpOb3RFcXVhbCA6IEpJVENvbXBpbGVyOjpFcXVhbCwgcmVzdWx0R1BSLCBKSVRDb21w
aWxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSks
IHRha2VuKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG5vdFRha2VuICE9IChtX2Jsb2NrICsgMSkp
Ci0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKLX0KLQotYm9vbCBK
SVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKE5vZGUmIG5vZGUsIE5v
ZGVJbmRleCBvcGVyYW5kLCBib29sIGludmVydCkKLXsKLSAgICBOb2RlSW5kZXggYnJhbmNoTm9k
ZUluZGV4ID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKLSAgICBpZiAoYnJhbmNoTm9kZUluZGV4
ICE9IE5vTm9kZSkgewotICAgICAgICBBU1NFUlQobm9kZS5hZGp1c3RlZFJlZkNvdW50KCkgPT0g
MSk7Ci0gICAgICAgIAotICAgICAgICBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbChv
cGVyYW5kLCBicmFuY2hOb2RlSW5kZXgsIGludmVydCk7Ci0gICAgCi0gICAgICAgIHVzZShub2Rl
LmNoaWxkMSgpKTsKLSAgICAgICAgdXNlKG5vZGUuY2hpbGQyKCkpOwotICAgICAgICBtX2NvbXBp
bGVJbmRleCA9IGJyYW5jaE5vZGVJbmRleDsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICAKLSAgICBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGwo
b3BlcmFuZCwgaW52ZXJ0KTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSklU
Q29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlJiBub2RlLCBO
b2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRp
dGlvbiBjb25kLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCi17Ci0gICAgTm9k
ZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgQmxvY2tJbmRleCB0YWtl
biA9IGJyYW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtl
biA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7Ci0KLSAgICBKSVRDb21waWxlcjo6
UmVzdWx0Q29uZGl0aW9uIGNhbGxSZXN1bHRDb25kaXRpb24gPSBKSVRDb21waWxlcjo6Tm9uWmVy
bzsKLQotICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8gdGhlIHRh
a2VuIGJsb2NrLgotICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5v
dFRha2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91
Z2guCi0gICAgaWYgKHRha2VuID09IChtX2Jsb2NrICsgMSkpIHsKLSAgICAgICAgY29uZCA9IEpJ
VENvbXBpbGVyOjppbnZlcnQoY29uZCk7Ci0gICAgICAgIGNhbGxSZXN1bHRDb25kaXRpb24gPSBK
SVRDb21waWxlcjo6WmVybzsKLSAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKLSAgICAg
ICAgdGFrZW4gPSBub3RUYWtlbjsKLSAgICAgICAgbm90VGFrZW4gPSB0bXA7Ci0gICAgfQotCi0g
ICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICBKU1ZhbHVl
T3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgIEdQUlJlZyBhcmcxR1BSID0g
YXJnMS5ncHIoKTsKLSAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7Ci0gICAgCi0gICAg
SklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIAotICAgIGlmIChpc0tub3duTm90
SW50ZWdlcihub2RlLmNoaWxkMSgpKSB8fCBpc0tub3duTm90SW50ZWdlcihub2RlLmNoaWxkMigp
KSkgewotICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgIAotICAgICAgICBhcmcxLnVzZSgpOwotICAgICAg
ICBhcmcyLnVzZSgpOwotICAgIAotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uKGhlbHBlckZ1bmN0aW9uLCByZXN1bHRHUFIsIGFyZzFHUFIsIGFyZzJHUFIp
OwotCi0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0MzIoY2FsbFJlc3VsdENvbmRp
dGlvbiwgcmVzdWx0R1BSKSwgdGFrZW4pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgYXJnMik7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7Ci0gICAgCi0gICAgICAgIGFyZzEudXNlKCk7Ci0gICAgICAgIGFyZzIudXNlKCk7
Ci0gICAgCi0gICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKSkpCi0gICAg
ICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpC
ZWxvdywgYXJnMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7Ci0gICAgICAg
IGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKSkpCi0gICAgICAgICAgICBzbG93UGF0
aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMkdQUiwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7Ci0gICAgCi0gICAgICAgIGFkZEJyYW5j
aChtX2ppdC5icmFuY2gzMihjb25kLCBhcmcxR1BSLCBhcmcyR1BSKSwgdGFrZW4pOwotICAgIAot
ICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpIHx8ICFpc0tub3duSW50
ZWdlcihub2RlLmNoaWxkMigpKSkgewotICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAo
KSwgbm90VGFrZW4pOwotICAgIAotICAgICAgICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwot
ICAgIAotICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb24oaGVscGVyRnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJnMUdQ
UiwgYXJnMkdQUik7Ci0gICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQ
Uik7Ci0gICAgICAgIAotICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFRlc3QzMihj
YWxsUmVzdWx0Q29uZGl0aW9uLCByZXN1bHRHUFIpLCB0YWtlbik7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKLSAgICAgICAgYWRkQnJhbmNo
KG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOwotfQotCi12b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5v
blNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKE5vZGUmIG5vZGUsIE1hY3JvQXNzZW1ibGVy
OjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5j
dGlvbikKLXsKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwot
ICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgR1BSUmVn
IGFyZzFHUFIgPSBhcmcxLmdwcigpOwotICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsK
LSAgICAKLSAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgCi0gICAgaWYg
KGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQxKCkpIHx8IGlzS25vd25Ob3RJbnRlZ2VyKG5v
ZGUuY2hpbGQyKCkpKSB7Ci0gICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgCi0gICAgICAgIGFyZzEudXNl
KCk7Ci0gICAgICAgIGFyZzIudXNlKCk7Ci0gICAgCi0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24oaGVscGVyRnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJnMUdQ
UiwgYXJnMkdQUik7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIs
IG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4
cGxpY2l0bHkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgYXJnMik7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0KLSAg
ICAgICAgYXJnMS51c2UoKTsKLSAgICAgICAgYXJnMi51c2UoKTsKLSAgICAKLSAgICAgICAgaWYg
KCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSkKLSAgICAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcxR1BSLCBHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAgICAgICAgaWYgKCFpc0tub3duSW50ZWdl
cihub2RlLmNoaWxkMigpKSkKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpKTsKLSAgICAKLSAgICAgICAgbV9qaXQuY29tcGFyZTMyKGNvbmQsIGFyZzFH
UFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7Ci0gICAgCi0gICAgICAgIGlmICghaXNLbm93bkludGVn
ZXIobm9kZS5jaGlsZDEoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7Ci0g
ICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBoYXZlUmVzdWx0ID0gbV9qaXQuanVtcCgpOwot
ICAgIAotICAgICAgICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwotICAgICAgICAKLSAgICAg
ICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBj
YWxsT3BlcmF0aW9uKGhlbHBlckZ1bmN0aW9uLCByZXN1bHRHUFIsIGFyZzFHUFIsIGFyZzJHUFIp
OwotICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAg
ICAKLSAgICAgICAgICAgIG1faml0LmFuZFB0cihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7
Ci0gICAgICAgIAotICAgICAgICAgICAgaGF2ZVJlc3VsdC5saW5rKCZtX2ppdCk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2Up
LCByZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIs
IG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4
cGxpY2l0bHkpOwotICAgIH0KLX0KLQotdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxh
dGl2ZVBlZXBob2xlU3RyaWN0RXEoTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRl
eCwgYm9vbCBpbnZlcnQpCi17Ci0gICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJ
bmRleCk7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9ja0luZGV4
KCk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0lu
ZGV4KCk7Ci0KLSAgICAvLyBUaGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRvIHRo
ZSB0YWtlbiBibG9jay4KLSAgICAvLyBJZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2ggdGFrZW4gd2l0
aCBub3RUYWtlbiAmIGludmVydCB0aGUgYnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBjYW4gZmFsbCB0
aHJvdWdoLgotICAgIGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEpKSB7Ci0gICAgICAgIGludmVy
dCA9ICFpbnZlcnQ7Ci0gICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47Ci0gICAgICAgIHRh
a2VuID0gbm90VGFrZW47Ci0gICAgICAgIG5vdFRha2VuID0gdG1wOwotICAgIH0KLSAgICAKLSAg
ICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgIEpTVmFsdWVP
cGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgR1BSUmVnIGFyZzFHUFIgPSBh
cmcxLmdwcigpOwotICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKLSAgICAKLSAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7Ci0gICAgCi0gICAgYXJnMS51c2UoKTsKLSAgICBhcmcyLnVzZSgpOwotICAgIAotICAg
IGlmIChpc0tub3duQ2VsbChub2RlLmNoaWxkMSgpKSAmJiBpc0tub3duQ2VsbChub2RlLmNoaWxk
MigpKSkgewotICAgICAgICAvLyBzZWUgaWYgd2UgZ2V0IGx1Y2t5OiBpZiB0aGUgYXJndW1lbnRz
IGFyZSBjZWxscyBhbmQgdGhleSByZWZlcmVuY2UgdGhlIHNhbWUKLSAgICAgICAgLy8gY2VsbCwg
dGhlbiB0aGV5IG11c3QgYmUgc3RyaWN0bHkgZXF1YWwuCi0gICAgICAgIGFkZEJyYW5jaChtX2pp
dC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBhcmcxR1BSLCBhcmcyR1BSKSwgaW52ZXJ0
ID8gbm90VGFrZW4gOiB0YWtlbik7Ci0gICAgICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJl
Z2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpY3RFcUNlbGwsIHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUik7Ci0gICAgICAgIHNp
bGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIGFkZEJy
YW5jaChtX2ppdC5icmFuY2hUZXN0MzIoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Ok5vblplcm8gOiBK
SVRDb21waWxlcjo6WmVybywgcmVzdWx0R1BSKSwgdGFrZW4pOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIG1faml0Lm9yUHRyKGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgIAot
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCB0d29DZWxsc0Nhc2UgPSBtX2ppdC5icmFuY2hUZXN0
UHRyKEpJVENvbXBpbGVyOjpaZXJvLCByZXN1bHRHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rl
cik7Ci0gICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBudW1iZXJDYXNlID0gbV9q
aXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0R1BSLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwotICAgICAgICAKLSAgICAgICAgYWRkQnJhbmNoKG1f
aml0LmJyYW5jaDMyKGludmVydCA/IEpJVENvbXBpbGVyOjpOb3RFcXVhbCA6IEpJVENvbXBpbGVy
OjpFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUiksIHRha2VuKTsKLSAgICAgICAgYWRkQnJhbmNoKG1f
aml0Lmp1bXAoKSwgbm90VGFrZW4pOwotICAgICAgICAKLSAgICAgICAgdHdvQ2VsbHNDYXNlLmxp
bmsoJm1faml0KTsKLSAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxl
cjo6RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIpLCBpbnZlcnQgPyBub3RUYWtlbiA6IHRha2VuKTsK
LSAgICAgICAgCi0gICAgICAgIG51bWJlckNhc2UubGluaygmbV9qaXQpOwotICAgICAgICAKLSAg
ICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJn
MkdQUik7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAg
ICAgCi0gICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0MzIoaW52ZXJ0ID8gSklUQ29t
cGlsZXI6Olplcm8gOiBKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0R1BSKSwgdGFrZW4pOwot
ICAgIH0KLSAgICAKLSAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKLSAgICAgICAg
YWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOwotfQotCi12b2lkIEpJVENvZGVHZW5l
cmF0b3I6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RFcShOb2RlJiBub2RlLCBib29s
IGludmVydCkKLXsKLSAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwotICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgR1BS
UmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwotICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIo
KTsKLSAgICAKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgCi0gICAgYXJnMS51c2UoKTsKLSAgICBhcmcyLnVz
ZSgpOwotICAgIAotICAgIGlmIChpc0tub3duQ2VsbChub2RlLmNoaWxkMSgpKSAmJiBpc0tub3du
Q2VsbChub2RlLmNoaWxkMigpKSkgewotICAgICAgICAvLyBzZWUgaWYgd2UgZ2V0IGx1Y2t5OiBp
ZiB0aGUgYXJndW1lbnRzIGFyZSBjZWxscyBhbmQgdGhleSByZWZlcmVuY2UgdGhlIHNhbWUKLSAg
ICAgICAgLy8gY2VsbCwgdGhlbiB0aGV5IG11c3QgYmUgc3RyaWN0bHkgZXF1YWwuCi0gICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIG5vdEVxdWFsQ2FzZSA9IG1faml0LmJyYW5jaFB0cihKSVRDb21w
aWxlcjo6Tm90RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIpOwotICAgICAgICAKLSAgICAgICAgbV9q
aXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKCFpbnZlcnQpKSksIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwotCi0gICAgICAgIG5vdEVxdWFsQ2FzZS5saW5r
KCZtX2ppdCk7Ci0gICAgICAgIAotICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1
bHRHUFIpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcUNl
bGwsIHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUik7Ci0gICAgICAgIHNpbGVudEZpbGxBbGxS
ZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LmFuZFB0cihKSVRD
b21waWxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwotICAgICAgICBtX2ppdC5vcjMy
KEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Ci0gICAg
ICAgIAotICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBt
X2ppdC5vclB0cihhcmcxR1BSLCBhcmcyR1BSLCByZXN1bHRHUFIpOwotICAgICAgICAKLSAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgdHdvQ2VsbHNDYXNlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihK
SVRDb21waWxlcjo6WmVybywgcmVzdWx0R1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwot
ICAgICAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbnVtYmVyQ2FzZSA9IG1faml0LmJy
YW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdEdQUiwgR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LmNvbXBhcmUzMihp
bnZlcnQgPyBKSVRDb21waWxlcjo6Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6RXF1YWwsIGFyZzFH
UFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBkb25lMSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgICAgIHR3b0NlbGxzQ2Fz
ZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEVxdWFsQ2FzZSA9
IG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIp
OwotICAgICAgICAKLSAgICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0
cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKCFpbnZlcnQpKSksIHJlc3VsdEdQUik7Ci0gICAg
ICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lMiA9IG1faml0Lmp1bXAoKTsKLSAg
ICAgICAgCi0gICAgICAgIG51bWJlckNhc2UubGluaygmbV9qaXQpOwotICAgICAgICBub3RFcXVh
bENhc2UubGluaygmbV9qaXQpOwotICAgICAgICAKLSAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdp
c3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
U3RyaWN0RXEsIHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUik7Ci0gICAgICAgIHNpbGVudEZp
bGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LmFuZFB0
cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwotCi0gICAgICAgIGRv
bmUxLmxpbmsoJm1faml0KTsKLQotICAgICAgICBtX2ppdC5vcjMyKEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdEdQUik7Ci0gICAgICAgIAotICAgICAgICBkb25l
Mi5saW5rKCZtX2ppdCk7Ci0gICAgfQotICAgIAotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BS
LCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxsZWRF
eHBsaWNpdGx5KTsKLX0KLQotdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChOb2RlJiBu
b2RlKQotewotICAgIFBfREZHT3BlcmF0aW9uX0Ugc2xvd0NhbGxGdW5jdGlvbjsKLQotICAgIGlm
IChub2RlLm9wID09IENhbGwpCi0gICAgICAgIHNsb3dDYWxsRnVuY3Rpb24gPSBvcGVyYXRpb25M
aW5rQ2FsbDsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKG5vZGUub3AgPT0gQ29uc3RydWN0
KTsKLSAgICAgICAgc2xvd0NhbGxGdW5jdGlvbiA9IG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3Q7Ci0g
ICAgfQotCi0gICAgLy8gRm9yIGNvbnN0cnVjdG9ycywgdGhlIHRoaXMgYXJndW1lbnQgaXMgbm90
IHBhc3NlZCBidXQgd2UgaGF2ZSB0byBtYWtlIHNwYWNlCi0gICAgLy8gZm9yIGl0LgotICAgIGlu
dCBkdW1teVRoaXNBcmd1bWVudCA9IG5vZGUub3AgPT0gQ2FsbCA/IDAgOiAxOwotICAgIAotICAg
IENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBub2RlLm9wID09IENhbGwgPyBDYWxs
TGlua0luZm86OkNhbGwgOiBDYWxsTGlua0luZm86OkNvbnN0cnVjdDsKLSAgICAKLSAgICBOb2Rl
SW5kZXggY2FsbGVlTm9kZUluZGV4ID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25v
ZGUuZmlyc3RDaGlsZCgpXTsKLSAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywgY2FsbGVl
Tm9kZUluZGV4KTsKLSAgICBHUFJSZWcgY2FsbGVlR1BSID0gY2FsbGVlLmdwcigpOwotICAgIHVz
ZShjYWxsZWVOb2RlSW5kZXgpOwotICAgIAotICAgIC8vIHRoZSBjYWxsIGluc3RydWN0aW9uJ3Mg
Zmlyc3QgY2hpbGQgaXMgZWl0aGVyIHRoZSBmdW5jdGlvbiAobm9ybWFsIGNhbGwpIG9yIHRoZQot
ICAgIC8vIHJlY2VpdmVyIChtZXRob2QgY2FsbCkuIHN1YnNlcXVlbnQgY2hpbGRyZW4gYXJlIHRo
ZSBhcmd1bWVudHMuCi0gICAgaW50IG51bUFyZ3MgPSBub2RlLm51bUNoaWxkcmVuKCkgLSAxOwot
ICAgIAotICAgIGludCBudW1QYXNzZWRBcmdzID0gbnVtQXJncyArIGR1bW15VGhpc0FyZ3VtZW50
OwotICAgIAotICAgIC8vIGFtb3VudCBvZiBzdHVmZiAoaW4gdW5pdHMgb2Ygc2l6ZW9mKFJlZ2lz
dGVyKSkgdGhhdCB3ZSBuZWVkIHRvIHBsYWNlIGF0IHRoZQotICAgIC8vIHRvcCBvZiB0aGUgSlMg
c3RhY2suCi0gICAgaW50IGNhbGxEYXRhU2l6ZSA9IDA7Ci0KLSAgICAvLyBmaXJzdCB0aGVyZSBh
cmUgdGhlIGFyZ3VtZW50cwotICAgIGNhbGxEYXRhU2l6ZSArPSBudW1QYXNzZWRBcmdzOwotICAg
IAotICAgIC8vIGFuZCB0aGVuIHRoZXJlIGlzIHRoZSBjYWxsIGZyYW1lIGhlYWRlcgotICAgIGNh
bGxEYXRhU2l6ZSArPSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7Ci0gICAgCi0g
ICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKG51bVBhc3NlZEFyZ3MpKSksIGFkZHJlc3NPZkNhbGxEYXRhKFJlZ2lz
dGVyRmlsZTo6QXJndW1lbnRDb3VudCkpOwotICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBhZGRyZXNzT2ZDYWxsRGF0YShSZWdpc3RlckZpbGU6OkNhbGxlckZy
YW1lKSk7Ci0gICAgCi0gICAgZm9yIChpbnQgYXJnSWR4ID0gMDsgYXJnSWR4IDwgbnVtQXJnczsg
YXJnSWR4KyspIHsKLSAgICAgICAgTm9kZUluZGV4IGFyZ05vZGVJbmRleCA9IG1faml0LmdyYXBo
KCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIDEgKyBhcmdJZHhdOwotICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJnTm9kZUluZGV4KTsKLSAgICAgICAgR1BS
UmVnIGFyZ0dQUiA9IGFyZy5ncHIoKTsKLSAgICAgICAgdXNlKGFyZ05vZGVJbmRleCk7Ci0gICAg
ICAgIAotICAgICAgICBtX2ppdC5zdG9yZVB0cihhcmdHUFIsIGFkZHJlc3NPZkNhbGxEYXRhKC1j
YWxsRGF0YVNpemUgKyBhcmdJZHggKyBkdW1teVRoaXNBcmd1bWVudCkpOwotICAgIH0KLSAgICAK
LSAgICBtX2ppdC5zdG9yZVB0cihjYWxsZWVHUFIsIGFkZHJlc3NPZkNhbGxEYXRhKFJlZ2lzdGVy
RmlsZTo6Q2FsbGVlKSk7Ci0gICAgCi0gICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAKLSAgICBH
UFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7Ci0KLSAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAg
SklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGg7Ci0gICAgCi0gICAgc2xvd1BhdGggPSBtX2ppdC5i
cmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRh
cmdldFRvQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKCkpKSk7Ci0gICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhjYWxsZWVHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlQ2hhaW4pKSwg
cmVzdWx0R1BSKTsKLSAgICBtX2ppdC5zdG9yZVB0cihyZXN1bHRHUFIsIGFkZHJlc3NPZkNhbGxE
YXRhKFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikpOwotCi0gICAgbV9qaXQuYWRkUHRyKEltbTMy
KG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3Rl
cikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgCi0gICAgSklUQ29tcGlsZXI6
OkNhbGwgZmFzdENhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOwotICAgIG1faml0Lm5vdGlmeUNhbGwo
ZmFzdENhbGwsIGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luKTsKLSAgICAKLSAgICBKSVRD
b21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwotICAgIAotICAgIHNsb3dQYXRoLmxp
bmsoJm1faml0KTsKLSAgICAKLSAgICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2Nr
KCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIEpJVENvbXBpbGVy
OjpDYWxsIHNsb3dDYWxsID0gbV9qaXQuYWRkRmFzdEV4Y2VwdGlvbkNoZWNrKG1faml0LmFwcGVu
ZENhbGwoc2xvd0NhbGxGdW5jdGlvbiksIGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luKTsK
LSAgICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVn
aXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsK
LSAgICBtX2ppdC5ub3RpZnlDYWxsKG1faml0LmNhbGwoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
LCBhdChtX2NvbXBpbGVJbmRleCkuY29kZU9yaWdpbik7Ci0gICAgCi0gICAgZG9uZS5saW5rKCZt
X2ppdCk7Ci0gICAgCi0gICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVz
dWx0R1BSKTsKLSAgICAKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5k
ZXgsIERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLSAgICAKLSAg
ICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBjYWxs
VHlwZSwgYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pOwotfQotCi0jZW5kaWYKLQotfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTAwMjM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw3NTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiREZH
SklUQ29kZUdlbmVyYXRvci5oIgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJE
RkdKSVRDb21waWxlcklubGluZU1ldGhvZHMuaCIKLSNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJ
VC5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewotCi1jb25zdCBkb3VibGUgSklUQ29kZUdlbmVyYXRvcjo6dHdvVG9UaGUzMiA9IChk
b3VibGUpMHgxMDAwMDAwMDB1bGw7Ci0KLXZvaWQgSklUQ29kZUdlbmVyYXRvcjo6Y2xlYXJHZW5l
cmF0aW9uSW5mbygpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ2VuZXJhdGlv
bkluZm8uc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fZ2VuZXJhdGlvbkluZm9baV0gPSBHZW5lcmF0
aW9uSW5mbygpOwotICAgIG1fZ3BycyA9IFJlZ2lzdGVyQmFuazxHUFJJbmZvPigpOwotICAgIG1f
ZnBycyA9IFJlZ2lzdGVyQmFuazxGUFJJbmZvPigpOwotfQotCi1HUFJSZWcgSklUQ29kZUdlbmVy
YXRvcjo6ZmlsbFN0b3JhZ2UoTm9kZUluZGV4IG5vZGVJbmRleCkKLXsKLSAgICBOb2RlJiBub2Rl
ID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOwotICAgIEdlbmVyYXRpb25JbmZvJiBp
bmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwotICAgIAotICAgIHN3aXRj
aCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7Ci0gICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogewot
ICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKLSAgICAgICAgQVNTRVJUKGluZm8uc3Bp
bGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0U3RvcmFnZSk7Ci0gICAgICAgIG1fZ3Bycy5yZXRhaW4o
Z3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKLSAgICAgICAgbV9qaXQu
bG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwot
ICAgICAgICBpbmZvLmZpbGxTdG9yYWdlKGdwcik7Ci0gICAgICAgIHJldHVybiBncHI7Ci0gICAg
fQotICAgICAgICAKLSAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdlOiB7Ci0gICAgICAgIEdQUlJl
ZyBncHIgPSBpbmZvLmdwcigpOwotICAgICAgICBtX2dwcnMubG9jayhncHIpOwotICAgICAgICBy
ZXR1cm4gZ3ByOwotICAgIH0KLSAgICAgICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOwot
fQotCi12b2lkIEpJVENvZGVHZW5lcmF0b3I6OnVzZUNoaWxkcmVuKE5vZGUmIG5vZGUpCi17Ci0g
ICAgaWYgKG5vZGUub3AgJiBOb2RlSGFzVmFyQXJncykgewotICAgICAgICBmb3IgKHVuc2lnbmVk
IGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxk
KCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCi0gICAgICAgICAgICB1c2UobV9q
aXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgTm9kZUluZGV4IGNoaWxkMSA9IG5vZGUuY2hpbGQxKCk7Ci0gICAgICAgIGlmIChjaGls
ZDEgPT0gTm9Ob2RlKSB7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDIoKSA9PSBOb05v
ZGUgJiYgbm9kZS5jaGlsZDMoKSA9PSBOb05vZGUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIHVzZShjaGlsZDEpOwotICAgICAgICAKLSAgICAgICAgTm9kZUluZGV4
IGNoaWxkMiA9IG5vZGUuY2hpbGQyKCk7Ci0gICAgICAgIGlmIChjaGlsZDIgPT0gTm9Ob2RlKSB7
Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDMoKSA9PSBOb05vZGUpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHVzZShjaGlsZDIpOwotICAgICAgICAKLSAg
ICAgICAgTm9kZUluZGV4IGNoaWxkMyA9IG5vZGUuY2hpbGQzKCk7Ci0gICAgICAgIGlmIChjaGls
ZDMgPT0gTm9Ob2RlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB1c2UoY2hpbGQzKTsK
LSAgICB9Ci19Ci0KLWJvb2wgSklUQ29kZUdlbmVyYXRvcjo6aXNTdHJpY3RJbnQzMihOb2RlSW5k
ZXggbm9kZUluZGV4KQotewotICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClb
bm9kZUluZGV4XTsKLSAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9b
bm9kZS52aXJ0dWFsUmVnaXN0ZXIoKV07Ci0gICAgCi0gICAgcmV0dXJuIGluZm8ucmVnaXN0ZXJG
b3JtYXQoKSA9PSBEYXRhRm9ybWF0SW50ZWdlcjsKLX0KLQotYm9vbCBKSVRDb2RlR2VuZXJhdG9y
Ojppc0tub3duSW50ZWdlcihOb2RlSW5kZXggbm9kZUluZGV4KQotewotICAgIGlmIChpc0ludDMy
Q29uc3RhbnQobm9kZUluZGV4KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBOb2RlJiBu
b2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOwotICAgIAotICAgIGlmIChub2RlLmhhc0lu
dDMyUmVzdWx0KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIEdlbmVyYXRpb25J
bmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tub2RlLnZpcnR1YWxSZWdpc3RlcigpXTsKLQot
ICAgIHJldHVybiBpbmZvLmlzSlNJbnRlZ2VyKCk7Ci19Ci0KLWJvb2wgSklUQ29kZUdlbmVyYXRv
cjo6aXNLbm93bk51bWVyaWMoTm9kZUluZGV4IG5vZGVJbmRleCkKLXsKLSAgICBpZiAoaXNJbnQz
MkNvbnN0YW50KG5vZGVJbmRleCkgfHwgaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJ
bmRleF07Ci0gICAgCi0gICAgaWYgKG5vZGUuaGFzTnVtYmVyUmVzdWx0KCkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIAotICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9u
SW5mb1tub2RlLnZpcnR1YWxSZWdpc3RlcigpXTsKLQotICAgIHJldHVybiBpbmZvLmlzSlNJbnRl
Z2VyKCkgfHwgaW5mby5pc0pTRG91YmxlKCk7Ci19Ci0KLWJvb2wgSklUQ29kZUdlbmVyYXRvcjo6
aXNLbm93bkNlbGwoTm9kZUluZGV4IG5vZGVJbmRleCkKLXsKLSAgICByZXR1cm4gbV9nZW5lcmF0
aW9uSW5mb1ttX2ppdC5ncmFwaCgpW25vZGVJbmRleF0udmlydHVhbFJlZ2lzdGVyKCldLmlzSlND
ZWxsKCk7Ci19Ci0KLWJvb2wgSklUQ29kZUdlbmVyYXRvcjo6aXNLbm93bk5vdENlbGwoTm9kZUlu
ZGV4IG5vZGVJbmRleCkKLXsKLSAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5k
ZXhdOwotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxS
ZWdpc3RlcigpOwotICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2
aXJ0dWFsUmVnaXN0ZXJdOwotICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkgJiYgIXZhbHVlT2ZK
U0NvbnN0YW50KG5vZGVJbmRleCkuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IHJldHVybiAhKGluZm8uaXNKU0NlbGwoKSB8fCBpbmZvLmlzVW5rbm93bkpTKCkpOwotfQotCi1i
b29sIEpJVENvZGVHZW5lcmF0b3I6OmlzS25vd25Ob3RJbnRlZ2VyKE5vZGVJbmRleCBub2RlSW5k
ZXgpCi17Ci0gICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsK
LSAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lz
dGVyXTsKLSAgICAKLSAgICByZXR1cm4gaW5mby5pc0pTRG91YmxlKCkgfHwgaW5mby5pc0pTQ2Vs
bCgpIHx8IGluZm8uaXNKU0Jvb2xlYW4oKQotICAgICAgICB8fCAobm9kZS5oYXNDb25zdGFudCgp
ICYmICF2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmlzSW50MzIoKSk7Ci19Ci0KLWJvb2wg
SklUQ29kZUdlbmVyYXRvcjo6aXNLbm93bk5vdE51bWJlcihOb2RlSW5kZXggbm9kZUluZGV4KQot
ewotICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAg
R2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07
Ci0gICAgCi0gICAgcmV0dXJuICghaW5mby5pc0pTRG91YmxlKCkgJiYgIWluZm8uaXNKU0ludGVn
ZXIoKSAmJiAhaW5mby5pc1Vua25vd25KUygpKQotICAgICAgICB8fCAobm9kZS5oYXNDb25zdGFu
dCgpICYmICFpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpOwotfQotCi1ib29sIEpJVENvZGVH
ZW5lcmF0b3I6OmlzS25vd25Cb29sZWFuKE5vZGVJbmRleCBub2RlSW5kZXgpCi17Ci0gICAgTm9k
ZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKLSAgICBpZiAobm9kZS5oYXNCb29s
ZWFuUmVzdWx0KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIGlmIChpc0Jvb2xl
YW5Db25zdGFudChub2RlSW5kZXgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsK
LSAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lz
dGVyXTsKLSAgICAKLSAgICByZXR1cm4gaW5mby5pc0pTQm9vbGVhbigpOwotfQotCi12b2lkIEpJ
VENvZGVHZW5lcmF0b3I6OndyaXRlQmFycmllcihNYWNyb0Fzc2VtYmxlciYgaml0LCBHUFJSZWcg
b3duZXIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJVc2VL
aW5kIHVzZUtpbmQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGppdCk7Ci0gICAgVU5VU0VEX1BBUkFN
KG93bmVyKTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDEpOwotICAgIFVOVVNFRF9QQVJBTShz
Y3JhdGNoMik7Ci0gICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOwotICAgIEFTU0VSVChvd25lciAh
PSBzY3JhdGNoMSk7Ci0gICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gyKTsKLSAgICBBU1NFUlQo
c2NyYXRjaDEgIT0gc2NyYXRjaDIpOwotCi0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklM
SU5HKQotICAgIEpJVENvbXBpbGVyOjplbWl0Q291bnQoaml0LCBXcml0ZUJhcnJpZXJDb3VudGVy
czo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7Ci0jZW5kaWYKLSAgICBtYXJrQ2VsbENhcmQoaml0
LCBvd25lciwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKLX0KLQotdm9pZCBKSVRDb2RlR2VuZXJhdG9y
OjptYXJrQ2VsbENhcmQoTWFjcm9Bc3NlbWJsZXImIGppdCwgR1BSUmVnIG93bmVyLCBHUFJSZWcg
c2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKLXsKLSAgICBVTlVTRURfUEFSQU0oaml0KTsKLSAg
ICBVTlVTRURfUEFSQU0ob3duZXIpOwotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHNjcmF0Y2gyKTsKLSAgICAKLSNpZiBFTkFCTEUoR0dDKQotICAgIGppdC5t
b3ZlKG93bmVyLCBzY3JhdGNoMSk7Ci0gICAgaml0LmFuZFB0cihUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oTWFya2VkQmxvY2s6OmJsb2NrTWFzaykpLCBzY3JhdGNoMSk7Ci0gICAg
aml0Lm1vdmUob3duZXIsIHNjcmF0Y2gyKTsKLSAgICAvLyBjb25zdW1lIGFkZGl0aW9uYWwgOCBi
aXRzIGFzIHdlJ3JlIHVzaW5nIGFuIGFwcHJveGltYXRlIGZpbHRlcgotICAgIGppdC5yc2hpZnQz
MihUcnVzdGVkSW1tMzIoTWFya2VkQmxvY2s6OmF0b21TaGlmdCArIDgpLCBzY3JhdGNoMik7Ci0g
ICAgaml0LmFuZFB0cihUcnVzdGVkSW1tMzIoTWFya2VkQmxvY2s6OmF0b21NYXNrID4+IDgpLCBz
Y3JhdGNoMik7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmlsdGVyID0gaml0LmJyYW5jaFRl
c3Q4KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0
Y2gxLCBzY3JhdGNoMiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lLCBNYXJrZWRCbG9jazo6b2Zm
c2V0T2ZNYXJrcygpKSk7Ci0gICAgaml0Lm1vdmUob3duZXIsIHNjcmF0Y2gyKTsKLSAgICBqaXQu
cnNoaWZ0MzIoVHJ1c3RlZEltbTMyKE1hcmtlZEJsb2NrOjpjYXJkU2hpZnQpLCBzY3JhdGNoMik7
Ci0gICAgaml0LmFuZFB0cihUcnVzdGVkSW1tMzIoTWFya2VkQmxvY2s6OmNhcmRNYXNrKSwgc2Ny
YXRjaDIpOwotICAgIGppdC5zdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHNjcmF0Y2gxLCBzY3JhdGNoMiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lLCBN
YXJrZWRCbG9jazo6b2Zmc2V0T2ZDYXJkcygpKSk7Ci0gICAgZmlsdGVyLmxpbmsoJmppdCk7Ci0j
ZW5kaWYKLX0KLQotdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93
bmVyR1BSLCBHUFJSZWcgdmFsdWVHUFIsIE5vZGVJbmRleCB2YWx1ZUluZGV4LCBXcml0ZUJhcnJp
ZXJVc2VLaW5kIHVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQotewot
ICAgIFVOVVNFRF9QQVJBTShvd25lckdQUik7Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlR1BSKTsK
LSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDEpOwotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMik7
Ci0gICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOwotCi0gICAgaWYgKGlzS25vd25Ob3RDZWxsKHZh
bHVlSW5kZXgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9Q
Uk9GSUxJTkcpCi0gICAgSklUQ29tcGlsZXI6OmVtaXRDb3VudChtX2ppdCwgV3JpdGVCYXJyaWVy
Q291bnRlcnM6OmppdENvdW50ZXJGb3IodXNlS2luZCkpOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUo
R0dDKQotICAgIEdQUlRlbXBvcmFyeSB0ZW1wMTsKLSAgICBHUFJUZW1wb3JhcnkgdGVtcDI7Ci0g
ICAgaWYgKHNjcmF0Y2gxID09IEludmFsaWRHUFJSZWcpIHsKLSAgICAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2hHUFIodGhpcyk7Ci0gICAgICAgIHRlbXAxLmFkb3B0KHNjcmF0Y2hHUFIpOwotICAg
ICAgICBzY3JhdGNoMSA9IHRlbXAxLmdwcigpOwotICAgIH0KLSAgICBpZiAoc2NyYXRjaDIgPT0g
SW52YWxpZEdQUlJlZykgewotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaEdQUih0aGlzKTsK
LSAgICAgICAgdGVtcDIuYWRvcHQoc2NyYXRjaEdQUik7Ci0gICAgICAgIHNjcmF0Y2gyID0gdGVt
cDIuZ3ByKCk7Ci0gICAgfQotICAgIAotICAgIEpJVENvbXBpbGVyOjpKdW1wIHJoc05vdENlbGw7
Ci0gICAgYm9vbCBoYWRDZWxsQ2hlY2sgPSBmYWxzZTsKLSAgICBpZiAoIWlzS25vd25DZWxsKHZh
bHVlSW5kZXgpICYmICFpc0NlbGxQcmVkaWN0aW9uKG1faml0LmdldFByZWRpY3Rpb24odmFsdWVJ
bmRleCkpKSB7Ci0gICAgICAgIGhhZENlbGxDaGVjayA9IHRydWU7Ci0gICAgICAgIHJoc05vdENl
bGwgPSBtX2ppdC5icmFuY2hJZk5vdENlbGwodmFsdWVHUFIpOwotICAgIH0KLQotICAgIG1hcmtD
ZWxsQ2FyZChtX2ppdCwgb3duZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7Ci0KLSAgICBpZiAo
aGFkQ2VsbENoZWNrKQotICAgICAgICByaHNOb3RDZWxsLmxpbmsoJm1faml0KTsKLSNlbmRpZgot
fQotCi12b2lkIEpJVENvZGVHZW5lcmF0b3I6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIs
IEpTQ2VsbCogdmFsdWUsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCwgR1BSUmVnIHNjcmF0
Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKG93bmVyR1BSKTsKLSAg
ICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHNjcmF0Y2gyKTsKLSAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7Ci0gICAg
Ci0gICAgaWYgKEhlYXA6OmlzTWFya2VkKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYg
RU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgIEpJVENvbXBpbGVyOjplbWl0Q291
bnQobV9qaXQsIFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRDb3VudGVyRm9yKHVzZUtpbmQpKTsK
LSNlbmRpZgotCi0jaWYgRU5BQkxFKEdHQykKLSAgICBHUFJUZW1wb3JhcnkgdGVtcDE7Ci0gICAg
R1BSVGVtcG9yYXJ5IHRlbXAyOwotICAgIGlmIChzY3JhdGNoMSA9PSBJbnZhbGlkR1BSUmVnKSB7
Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoR1BSKHRoaXMpOwotICAgICAgICB0ZW1wMS5h
ZG9wdChzY3JhdGNoR1BSKTsKLSAgICAgICAgc2NyYXRjaDEgPSB0ZW1wMS5ncHIoKTsKLSAgICB9
Ci0gICAgaWYgKHNjcmF0Y2gyID09IEludmFsaWRHUFJSZWcpIHsKLSAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2hHUFIodGhpcyk7Ci0gICAgICAgIHRlbXAyLmFkb3B0KHNjcmF0Y2hHUFIpOwot
ICAgICAgICBzY3JhdGNoMiA9IHRlbXAyLmdwcigpOwotICAgIH0KLQotICAgIG1hcmtDZWxsQ2Fy
ZChtX2ppdCwgb3duZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBKSVRDb2RlR2VuZXJhdG9yOjp3cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgR1BSUmVnIHZh
bHVlR1BSLCBOb2RlSW5kZXggdmFsdWVJbmRleCwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5k
LCBHUFJSZWcgc2NyYXRjaCkKLXsKLSAgICBVTlVTRURfUEFSQU0ob3duZXIpOwotICAgIFVOVVNF
RF9QQVJBTSh2YWx1ZUdQUik7Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gpOwotICAgIFVOVVNF
RF9QQVJBTSh1c2VLaW5kKTsKLQotICAgIGlmIChpc0tub3duTm90Q2VsbCh2YWx1ZUluZGV4KSkK
LSAgICAgICAgcmV0dXJuOwotCi0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQot
ICAgIEpJVENvbXBpbGVyOjplbWl0Q291bnQobV9qaXQsIFdyaXRlQmFycmllckNvdW50ZXJzOjpq
aXRDb3VudGVyRm9yKHVzZUtpbmQpKTsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKEdHQykKLSAgICBK
SVRDb21waWxlcjo6SnVtcCByaHNOb3RDZWxsOwotICAgIGJvb2wgaGFkQ2VsbENoZWNrID0gZmFs
c2U7Ci0gICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZUluZGV4KSAmJiAhaXNDZWxsUHJlZGljdGlv
bihtX2ppdC5nZXRQcmVkaWN0aW9uKHZhbHVlSW5kZXgpKSkgewotICAgICAgICBoYWRDZWxsQ2hl
Y2sgPSB0cnVlOwotICAgICAgICByaHNOb3RDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKHZh
bHVlR1BSKTsKLSAgICB9Ci0gICAgCi0gICAgR1BSVGVtcG9yYXJ5IHRlbXA7Ci0gICAgaWYgKHNj
cmF0Y2ggPT0gSW52YWxpZEdQUlJlZykgewotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaEdQ
Uih0aGlzKTsKLSAgICAgICAgdGVtcC5hZG9wdChzY3JhdGNoR1BSKTsKLSAgICAgICAgc2NyYXRj
aCA9IHRlbXAuZ3ByKCk7Ci0gICAgfQotCi0gICAgdWludDhfdCogY2FyZEFkZHJlc3MgPSBIZWFw
OjphZGRyZXNzT2ZDYXJkRm9yKG93bmVyKTsKLSAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tUHRyKGNhcmRBZGRyZXNzKSwgc2NyYXRjaCk7Ci0gICAgbV9qaXQuc3RvcmU4KEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoMSksIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2gp
KTsKLQotICAgIGlmIChoYWRDZWxsQ2hlY2spCi0gICAgICAgIHJoc05vdENlbGwubGluaygmbV9q
aXQpOwotI2VuZGlmCi19Ci0KLWJvb2wgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVD
b21wYXJlKE5vZGUmIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmQsIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKLXsKLSAgICBOb2RlSW5kZXgg
YnJhbmNoTm9kZUluZGV4ID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKLSAgICBpZiAoYnJhbmNo
Tm9kZUluZGV4ICE9IE5vTm9kZSkgewotICAgICAgICBBU1NFUlQobm9kZS5hZGp1c3RlZFJlZkNv
dW50KCkgPT0gMSk7Ci0gICAgICAgIAotICAgICAgICBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJh
bmNoKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgY29uZCwgaGVscGVyRnVuY3Rpb24pOwotICAgIAot
ICAgICAgICBtX2NvbXBpbGVJbmRleCA9IGJyYW5jaE5vZGVJbmRleDsKLSAgICAgICAgCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBub25TcGVjdWxhdGl2ZU5vblBlZXBo
b2xlQ29tcGFyZShub2RlLCBjb25kLCBoZWxwZXJGdW5jdGlvbik7Ci0gICAgCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlU3RyaWN0
RXEoTm9kZSYgbm9kZSwgYm9vbCBpbnZlcnQpCi17Ci0gICAgaWYgKCFpbnZlcnQgJiYgKGlzS25v
d25OdW1lcmljKG5vZGUuY2hpbGQxKCkpIHx8IGlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQyKCkp
KSkKLSAgICAgICAgcmV0dXJuIG5vblNwZWN1bGF0aXZlQ29tcGFyZShub2RlLCBNYWNyb0Fzc2Vt
Ymxlcjo6RXF1YWwsIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSk7Ci0gICAgCi0gICAgTm9kZUlu
ZGV4IGJyYW5jaE5vZGVJbmRleCA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7Ci0gICAgaWYgKGJy
YW5jaE5vZGVJbmRleCAhPSBOb05vZGUpIHsKLSAgICAgICAgQVNTRVJUKG5vZGUuYWRqdXN0ZWRS
ZWZDb3VudCgpID09IDEpOwotICAgICAgICAKLSAgICAgICAgbm9uU3BlY3VsYXRpdmVQZWVwaG9s
ZVN0cmljdEVxKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgaW52ZXJ0KTsKLSAgICAKLSAgICAgICAg
bV9jb21waWxlSW5kZXggPSBicmFuY2hOb2RlSW5kZXg7Ci0gICAgICAgIAotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0cmlj
dEVxKG5vZGUsIGludmVydCk7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jaWZuZGVm
IE5ERUJVRwotc3RhdGljIGNvbnN0IGNoYXIqIGRhdGFGb3JtYXRTdHJpbmcoRGF0YUZvcm1hdCBm
b3JtYXQpCi17Ci0gICAgLy8gVGhlc2UgdmFsdWVzIGNvcnJlc3BvbmQgdG8gdGhlIERhdGFGb3Jt
YXQgZW51bS4KLSAgICBjb25zdCBjaGFyKiBzdHJpbmdzW10gPSB7Ci0gICAgICAgICJbICBdIiwK
LSAgICAgICAgIlsgaV0iLAotICAgICAgICAiWyBkXSIsCi0gICAgICAgICJbIGNdIiwKLSAgICAg
ICAgIkVyciEiLAotICAgICAgICAiRXJyISIsCi0gICAgICAgICJFcnIhIiwKLSAgICAgICAgIkVy
ciEiLAotICAgICAgICAiW0ogXSIsCi0gICAgICAgICJbSmldIiwKLSAgICAgICAgIltKZF0iLAot
ICAgICAgICAiW0pjXSIsCi0gICAgICAgICJFcnIhIiwKLSAgICAgICAgIkVyciEiLAotICAgICAg
ICAiRXJyISIsCi0gICAgICAgICJFcnIhIiwKLSAgICB9OwotICAgIHJldHVybiBzdHJpbmdzW2Zv
cm1hdF07Ci19Ci0KLXZvaWQgSklUQ29kZUdlbmVyYXRvcjo6ZHVtcChjb25zdCBjaGFyKiBsYWJl
bCkKLXsKLSAgICBpZiAobGFiZWwpCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiPCVzPlxuIiwg
bGFiZWwpOwotCi0gICAgZnByaW50ZihzdGRlcnIsICIgIGdwcnM6XG4iKTsKLSAgICBtX2dwcnMu
ZHVtcCgpOwotICAgIGZwcmludGYoc3RkZXJyLCAiICBmcHJzOlxuIik7Ci0gICAgbV9mcHJzLmR1
bXAoKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIiAgVmlydHVhbFJlZ2lzdGVyczpcbiIpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dlbmVyYXRpb25JbmZvLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tpXTsKLSAg
ICAgICAgaWYgKGluZm8uYWxpdmUoKSkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAg
ICUgM2Q6JXMlcyIsIGksIGRhdGFGb3JtYXRTdHJpbmcoaW5mby5yZWdpc3RlckZvcm1hdCgpKSwg
ZGF0YUZvcm1hdFN0cmluZyhpbmZvLnNwaWxsRm9ybWF0KCkpKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICAgJSAzZDpbX19dW19fXSIsIGkpOwotICAgICAg
ICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpCi0gICAgICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIjpmcHIlZFxuIiwgaW5mby5mcHIoKSk7Ci0gICAgICAgIGVs
c2UgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZQotI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCi0gICAgICAgICAgICAmJiAhKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAmIERh
dGFGb3JtYXRKUykKLSNlbmRpZgotICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
aW5mby5ncHIoKSAhPSBJbnZhbGlkR1BSUmVnKTsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiOiVzXG4iLCBHUFJJbmZvOjpkZWJ1Z05hbWUoaW5mby5ncHIoKSkpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKLSAgICB9Ci0gICAgaWYgKGxh
YmVsKQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIjwvJXM+XG4iLCBsYWJlbCk7Ci19Ci0jZW5k
aWYKLQotCi0jaWYgREZHX0VOQUJMRShDT05TSVNURU5DWV9DSEVDSykKLXZvaWQgSklUQ29kZUdl
bmVyYXRvcjo6Y2hlY2tDb25zaXN0ZW5jeSgpCi17Ci0gICAgYm9vbCBmYWlsZWQgPSBmYWxzZTsK
LQotICAgIGZvciAoZ3ByX2l0ZXJhdG9yIGl0ZXIgPSBtX2dwcnMuYmVnaW4oKTsgaXRlciAhPSBt
X2dwcnMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBpZiAoaXRlci5pc0xvY2tlZCgpKSB7Ci0g
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRGR19DT05TSVNURU5DWV9DSEVDSyBmYWlsZWQ6
IGdwciAlcyBpcyBsb2NrZWQuXG4iLCBpdGVyLmRlYnVnTmFtZSgpKTsKLSAgICAgICAgICAgIGZh
aWxlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZm9yIChmcHJfaXRlcmF0b3IgaXRl
ciA9IG1fZnBycy5iZWdpbigpOyBpdGVyICE9IG1fZnBycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAg
ICAgIGlmIChpdGVyLmlzTG9ja2VkKCkpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
REZHX0NPTlNJU1RFTkNZX0NIRUNLIGZhaWxlZDogZnByICVzIGlzIGxvY2tlZC5cbiIsIGl0ZXIu
ZGVidWdOYW1lKCkpOwotICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dlbmVyYXRpb25JbmZvLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSAoVmly
dHVhbFJlZ2lzdGVyKWk7Ci0gICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0
aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwotICAgICAgICBpZiAoIWluZm8uYWxpdmUoKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQo
KSkgewotICAgICAgICBjYXNlIERhdGFGb3JtYXROb25lOgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTOgotICAgICAgICBjYXNlIERhdGFGb3JtYXRKU0ludGVn
ZXI6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOgotICAgICAgICBjYXNlIERhdGFG
b3JtYXRKU0NlbGw6Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoKLSNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICAgICAgY2FzZSBE
YXRhRm9ybWF0SW50ZWdlcjoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKLSAgICAgICAg
Y2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFnZTog
ewotICAgICAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7Ci0gICAgICAgICAgICBBU1NF
UlQoZ3ByICE9IEludmFsaWRHUFJSZWcpOwotICAgICAgICAgICAgaWYgKG1fZ3Bycy5uYW1lKGdw
cikgIT0gdmlydHVhbFJlZ2lzdGVyKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJERkdfQ09OU0lTVEVOQ1lfQ0hFQ0sgZmFpbGVkOiBuYW1lIG1pc21hdGNoIGZvciB2aXJ0dWFs
IHJlZ2lzdGVyICVkIChncHIgJXMpLlxuIiwgdmlydHVhbFJlZ2lzdGVyLCBHUFJJbmZvOjpkZWJ1
Z05hbWUoZ3ByKSk7Ci0gICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgRGF0YUZvcm1h
dERvdWJsZTogewotICAgICAgICAgICAgRlBSUmVnIGZwciA9IGluZm8uZnByKCk7Ci0gICAgICAg
ICAgICBBU1NFUlQoZnByICE9IEludmFsaWRGUFJSZWcpOwotICAgICAgICAgICAgaWYgKG1fZnBy
cy5uYW1lKGZwcikgIT0gdmlydHVhbFJlZ2lzdGVyKSB7Ci0gICAgICAgICAgICAgICAgZnByaW50
ZihzdGRlcnIsICJERkdfQ09OU0lTVEVOQ1lfQ0hFQ0sgZmFpbGVkOiBuYW1lIG1pc21hdGNoIGZv
ciB2aXJ0dWFsIHJlZ2lzdGVyICVkIChmcHIgJXMpLlxuIiwgdmlydHVhbFJlZ2lzdGVyLCBGUFJJ
bmZvOjpkZWJ1Z05hbWUoZnByKSk7Ci0gICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBmb3IgKGdwcl9pdGVyYXRvciBpdGVyID0gbV9ncHJzLmJlZ2luKCk7IGl0ZXIg
IT0gbV9ncHJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlciA9IGl0ZXIubmFtZSgpOwotICAgICAgICBpZiAodmlydHVhbFJlZ2lzdGVyID09
IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVy
XTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBpZiAoaXRlci5yZWdJRCgpICE9IGluZm8u
Z3ByKCkpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiREZHX0NPTlNJU1RFTkNZX0NI
RUNLIGZhaWxlZDogbmFtZSBtaXNtYXRjaCBmb3IgZ3ByICVzICh2aXJ0dWFsIHJlZ2lzdGVyICVk
KS5cbiIsIGl0ZXIuZGVidWdOYW1lKCksIHZpcnR1YWxSZWdpc3Rlcik7Ci0gICAgICAgICAgICBm
YWlsZWQgPSB0cnVlOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBpZiAoIShpbmZvLnJlZ2lz
dGVyRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpKSB7Ci0gICAgICAgICAgICBpZiAoaXRlci5yZWdJ
RCgpICE9IGluZm8uZ3ByKCkpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRG
R19DT05TSVNURU5DWV9DSEVDSyBmYWlsZWQ6IG5hbWUgbWlzbWF0Y2ggZm9yIGdwciAlcyAodmly
dHVhbCByZWdpc3RlciAlZCkuXG4iLCBpdGVyLmRlYnVnTmFtZSgpLCB2aXJ0dWFsUmVnaXN0ZXIp
OwotICAgICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoaXRlci5yZWdJRCgpICE9IGluZm8udGFnR1BSKCkg
JiYgaXRlci5yZWdJRCgpICE9IGluZm8ucGF5bG9hZEdQUigpKSB7Ci0gICAgICAgICAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJERkdfQ09OU0lTVEVOQ1lfQ0hFQ0sgZmFpbGVkOiBuYW1lIG1pc21h
dGNoIGZvciBncHIgJXMgKHZpcnR1YWwgcmVnaXN0ZXIgJWQpLlxuIiwgaXRlci5kZWJ1Z05hbWUo
KSwgdmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBmb3IgKGZwcl9pdGVy
YXRvciBpdGVyID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0ZXIp
IHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGl0ZXIubmFtZSgp
OwotICAgICAgICBpZiAodmlydHVhbFJlZ2lzdGVyID09IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9
IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKLSAgICAgICAgaWYgKGl0ZXIucmVn
SUQoKSAhPSBpbmZvLmZwcigpKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRGR19D
T05TSVNURU5DWV9DSEVDSyBmYWlsZWQ6IG5hbWUgbWlzbWF0Y2ggZm9yIGZwciAlcyAodmlydHVh
bCByZWdpc3RlciAlZCkuXG4iLCBpdGVyLmRlYnVnTmFtZSgpLCB2aXJ0dWFsUmVnaXN0ZXIpOwot
ICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChm
YWlsZWQpIHsKLSAgICAgICAgZHVtcCgpOwotICAgICAgICBDUkFTSCgpOwotICAgIH0KLX0KLSNl
bmRpZgotCi1HUFJUZW1wb3Jhcnk6OkdQUlRlbXBvcmFyeSgpCi0gICAgOiBtX2ppdCgwKQotICAg
ICwgbV9ncHIoSW52YWxpZEdQUlJlZykKLXsKLX0KLQotR1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3Jh
cnkoSklUQ29kZUdlbmVyYXRvciogaml0KQotICAgIDogbV9qaXQoaml0KQotICAgICwgbV9ncHIo
SW52YWxpZEdQUlJlZykKLXsKLSNpZiBDUFUoWDg2KQotICAgIC8vIHdlIGN1cnJlbnR5IGxhemls
eSBhbGxvY2F0ZSB0aGUgcmVnLCBhcyB0aGUgbnVtYmVyIG9mIHJlZ3Mgb24gWDg2IGlzIGxpbWl0
ZWQuCi0jZWxzZQotICAgIG1fZ3ByID0gbV9qaXQtPmFsbG9jYXRlKCk7Ci0jZW5kaWYKLX0KLQot
R1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciogaml0LCBHUFJSZWcg
c3BlY2lmaWMpCi0gICAgOiBtX2ppdChqaXQpCi0gICAgLCBtX2dwcihJbnZhbGlkR1BSUmVnKQot
ewotICAgIG1fZ3ByID0gbV9qaXQtPmFsbG9jYXRlKHNwZWNpZmljKTsKLX0KLQotR1BSVGVtcG9y
YXJ5OjpHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciogaml0LCBTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZCYgb3AxKQotICAgIDogbV9qaXQoaml0KQotICAgICwgbV9ncHIoSW52YWxpZEdQUlJl
ZykKLXsKLSAgICBpZiAobV9qaXQtPmNhblJldXNlKG9wMS5pbmRleCgpKSkKLSAgICAgICAgbV9n
cHIgPSBtX2ppdC0+cmV1c2Uob3AxLmdwcigpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fZ3ByID0g
bV9qaXQtPmFsbG9jYXRlKCk7Ci19Ci0KLUdQUlRlbXBvcmFyeTo6R1BSVGVtcG9yYXJ5KEpJVENv
ZGVHZW5lcmF0b3IqIGppdCwgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQmIG9wMSwgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQmIG9wMikKLSAgICA6IG1faml0KGppdCkKLSAgICAsIG1fZ3ByKEludmFs
aWRHUFJSZWcpCi17Ci0gICAgaWYgKG1faml0LT5jYW5SZXVzZShvcDEuaW5kZXgoKSkpCi0gICAg
ICAgIG1fZ3ByID0gbV9qaXQtPnJldXNlKG9wMS5ncHIoKSk7Ci0gICAgZWxzZSBpZiAobV9qaXQt
PmNhblJldXNlKG9wMi5pbmRleCgpKSkKLSAgICAgICAgbV9ncHIgPSBtX2ppdC0+cmV1c2Uob3Ay
LmdwcigpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fZ3ByID0gbV9qaXQtPmFsbG9jYXRlKCk7Ci19
Ci0KLUdQUlRlbXBvcmFyeTo6R1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqIGppdCwgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kJiBvcDEpCi0gICAgOiBtX2ppdChqaXQpCi0gICAgLCBt
X2dwcihJbnZhbGlkR1BSUmVnKQotewotICAgIGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AxLmluZGV4
KCkpKQotICAgICAgICBtX2dwciA9IG1faml0LT5yZXVzZShvcDEuZ3ByKCkpOwotICAgIGVsc2UK
LSAgICAgICAgbV9ncHIgPSBtX2ppdC0+YWxsb2NhdGUoKTsKLX0KLQotR1BSVGVtcG9yYXJ5OjpH
UFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciogaml0LCBJbnRlZ2VyT3BlcmFuZCYgb3AxKQot
ICAgIDogbV9qaXQoaml0KQotICAgICwgbV9ncHIoSW52YWxpZEdQUlJlZykKLXsKLSAgICBpZiAo
bV9qaXQtPmNhblJldXNlKG9wMS5pbmRleCgpKSkKLSAgICAgICAgbV9ncHIgPSBtX2ppdC0+cmV1
c2Uob3AxLmdwcigpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fZ3ByID0gbV9qaXQtPmFsbG9jYXRl
KCk7Ci19Ci0KLUdQUlRlbXBvcmFyeTo6R1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqIGpp
dCwgSW50ZWdlck9wZXJhbmQmIG9wMSwgSW50ZWdlck9wZXJhbmQmIG9wMikKLSAgICA6IG1faml0
KGppdCkKLSAgICAsIG1fZ3ByKEludmFsaWRHUFJSZWcpCi17Ci0gICAgaWYgKG1faml0LT5jYW5S
ZXVzZShvcDEuaW5kZXgoKSkpCi0gICAgICAgIG1fZ3ByID0gbV9qaXQtPnJldXNlKG9wMS5ncHIo
KSk7Ci0gICAgZWxzZSBpZiAobV9qaXQtPmNhblJldXNlKG9wMi5pbmRleCgpKSkKLSAgICAgICAg
bV9ncHIgPSBtX2ppdC0+cmV1c2Uob3AyLmdwcigpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fZ3By
ID0gbV9qaXQtPmFsbG9jYXRlKCk7Ci19Ci0KLUdQUlRlbXBvcmFyeTo6R1BSVGVtcG9yYXJ5KEpJ
VENvZGVHZW5lcmF0b3IqIGppdCwgU3BlY3VsYXRlQ2VsbE9wZXJhbmQmIG9wMSkKLSAgICA6IG1f
aml0KGppdCkKLSAgICAsIG1fZ3ByKEludmFsaWRHUFJSZWcpCi17Ci0gICAgaWYgKG1faml0LT5j
YW5SZXVzZShvcDEuaW5kZXgoKSkpCi0gICAgICAgIG1fZ3ByID0gbV9qaXQtPnJldXNlKG9wMS5n
cHIoKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2dwciA9IG1faml0LT5hbGxvY2F0ZSgpOwotfQot
Ci1HUFJUZW1wb3Jhcnk6OkdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKiBqaXQsIFNwZWN1
bGF0ZUJvb2xlYW5PcGVyYW5kJiBvcDEpCi0gICAgOiBtX2ppdChqaXQpCi0gICAgLCBtX2dwcihJ
bnZhbGlkR1BSUmVnKQotewotICAgIGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AxLmluZGV4KCkpKQot
ICAgICAgICBtX2dwciA9IG1faml0LT5yZXVzZShvcDEuZ3ByKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9ncHIgPSBtX2ppdC0+YWxsb2NhdGUoKTsKLX0KLQotI2lmIFVTRShKU1ZBTFVFNjQpCi1H
UFJUZW1wb3Jhcnk6OkdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKiBqaXQsIEpTVmFsdWVP
cGVyYW5kJiBvcDEpCi0gICAgOiBtX2ppdChqaXQpCi0gICAgLCBtX2dwcihJbnZhbGlkR1BSUmVn
KQotewotICAgIGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AxLmluZGV4KCkpKQotICAgICAgICBtX2dw
ciA9IG1faml0LT5yZXVzZShvcDEuZ3ByKCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9ncHIgPSBt
X2ppdC0+YWxsb2NhdGUoKTsKLX0KLSNlbHNlCi1HUFJUZW1wb3Jhcnk6OkdQUlRlbXBvcmFyeShK
SVRDb2RlR2VuZXJhdG9yKiBqaXQsIEpTVmFsdWVPcGVyYW5kJiBvcDEsIGJvb2wgdGFnKQotICAg
IDogbV9qaXQoaml0KQotICAgICwgbV9ncHIoSW52YWxpZEdQUlJlZykKLXsKLSAgICBpZiAoIW9w
MS5pc0RvdWJsZSgpICYmIG1faml0LT5jYW5SZXVzZShvcDEuaW5kZXgoKSkpCi0gICAgICAgIG1f
Z3ByID0gbV9qaXQtPnJldXNlKHRhZyA/IG9wMS50YWdHUFIoKSA6IG9wMS5wYXlsb2FkR1BSKCkp
OwotICAgIGVsc2UKLSAgICAgICAgbV9ncHIgPSBtX2ppdC0+YWxsb2NhdGUoKTsKLX0KLSNlbmRp
ZgotCi1HUFJUZW1wb3Jhcnk6OkdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKiBqaXQsIFN0
b3JhZ2VPcGVyYW5kJiBvcDEpCi0gICAgOiBtX2ppdChqaXQpCi0gICAgLCBtX2dwcihJbnZhbGlk
R1BSUmVnKQotewotICAgIGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AxLmluZGV4KCkpKQotICAgICAg
ICBtX2dwciA9IG1faml0LT5yZXVzZShvcDEuZ3ByKCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9n
cHIgPSBtX2ppdC0+YWxsb2NhdGUoKTsKLX0KLQotdm9pZCBHUFJUZW1wb3Jhcnk6OmFkb3B0KEdQ
UlRlbXBvcmFyeSYgb3RoZXIpCi17Ci0gICAgQVNTRVJUKCFtX2ppdCk7Ci0gICAgQVNTRVJUKG1f
Z3ByID09IEludmFsaWRHUFJSZWcpOwotICAgIEFTU0VSVChvdGhlci5tX2ppdCk7Ci0gICAgQVNT
RVJUKG90aGVyLm1fZ3ByICE9IEludmFsaWRHUFJSZWcpOwotICAgIG1faml0ID0gb3RoZXIubV9q
aXQ7Ci0gICAgbV9ncHIgPSBvdGhlci5tX2dwcjsKLSAgICBvdGhlci5tX2ppdCA9IDA7Ci0gICAg
b3RoZXIubV9ncHIgPSBJbnZhbGlkR1BSUmVnOwotfQotCi1GUFJUZW1wb3Jhcnk6OkZQUlRlbXBv
cmFyeShKSVRDb2RlR2VuZXJhdG9yKiBqaXQpCi0gICAgOiBtX2ppdChqaXQpCi0gICAgLCBtX2Zw
cihJbnZhbGlkRlBSUmVnKQotewotICAgIG1fZnByID0gbV9qaXQtPmZwckFsbG9jYXRlKCk7Ci19
Ci0KLUZQUlRlbXBvcmFyeTo6RlBSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqIGppdCwgRG91
YmxlT3BlcmFuZCYgb3AxKQotICAgIDogbV9qaXQoaml0KQotICAgICwgbV9mcHIoSW52YWxpZEZQ
UlJlZykKLXsKLSAgICBpZiAobV9qaXQtPmNhblJldXNlKG9wMS5pbmRleCgpKSkKLSAgICAgICAg
bV9mcHIgPSBtX2ppdC0+cmV1c2Uob3AxLmZwcigpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fZnBy
ID0gbV9qaXQtPmZwckFsbG9jYXRlKCk7Ci19Ci0KLUZQUlRlbXBvcmFyeTo6RlBSVGVtcG9yYXJ5
KEpJVENvZGVHZW5lcmF0b3IqIGppdCwgRG91YmxlT3BlcmFuZCYgb3AxLCBEb3VibGVPcGVyYW5k
JiBvcDIpCi0gICAgOiBtX2ppdChqaXQpCi0gICAgLCBtX2ZwcihJbnZhbGlkRlBSUmVnKQotewot
ICAgIGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AxLmluZGV4KCkpKQotICAgICAgICBtX2ZwciA9IG1f
aml0LT5yZXVzZShvcDEuZnByKCkpOwotICAgIGVsc2UgaWYgKG1faml0LT5jYW5SZXVzZShvcDIu
aW5kZXgoKSkpCi0gICAgICAgIG1fZnByID0gbV9qaXQtPnJldXNlKG9wMi5mcHIoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBtX2ZwciA9IG1faml0LT5mcHJBbGxvY2F0ZSgpOwotfQotCi1GUFJUZW1w
b3Jhcnk6OkZQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKiBqaXQsIFNwZWN1bGF0ZURvdWJs
ZU9wZXJhbmQmIG9wMSkKLSAgICA6IG1faml0KGppdCkKLSAgICAsIG1fZnByKEludmFsaWRGUFJS
ZWcpCi17Ci0gICAgaWYgKG1faml0LT5jYW5SZXVzZShvcDEuaW5kZXgoKSkpCi0gICAgICAgIG1f
ZnByID0gbV9qaXQtPnJldXNlKG9wMS5mcHIoKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2ZwciA9
IG1faml0LT5mcHJBbGxvY2F0ZSgpOwotfQotCi1GUFJUZW1wb3Jhcnk6OkZQUlRlbXBvcmFyeShK
SVRDb2RlR2VuZXJhdG9yKiBqaXQsIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQmIG9wMSwgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCYgb3AyKQotICAgIDogbV9qaXQoaml0KQotICAgICwgbV9mcHIoSW52
YWxpZEZQUlJlZykKLXsKLSAgICBpZiAobV9qaXQtPmNhblJldXNlKG9wMS5pbmRleCgpKSkKLSAg
ICAgICAgbV9mcHIgPSBtX2ppdC0+cmV1c2Uob3AxLmZwcigpKTsKLSAgICBlbHNlIGlmIChtX2pp
dC0+Y2FuUmV1c2Uob3AyLmluZGV4KCkpKQotICAgICAgICBtX2ZwciA9IG1faml0LT5yZXVzZShv
cDIuZnByKCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9mcHIgPSBtX2ppdC0+ZnByQWxsb2NhdGUo
KTsKLX0KLQotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi1GUFJUZW1wb3Jhcnk6OkZQUlRlbXBvcmFy
eShKSVRDb2RlR2VuZXJhdG9yKiBqaXQsIEpTVmFsdWVPcGVyYW5kJiBvcDEpCi0gICAgOiBtX2pp
dChqaXQpCi0gICAgLCBtX2ZwcihJbnZhbGlkRlBSUmVnKQotewotICAgIGlmIChvcDEuaXNEb3Vi
bGUoKSAmJiBtX2ppdC0+Y2FuUmV1c2Uob3AxLmluZGV4KCkpKQotICAgICAgICBtX2ZwciA9IG1f
aml0LT5yZXVzZShvcDEuZnByKCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9mcHIgPSBtX2ppdC0+
ZnByQWxsb2NhdGUoKTsKLX0KLSNlbmRpZgotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCi0K
LSNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2Rl
R2VuZXJhdG9yLmgJKHJldmlzaW9uIDEwMDIzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIxOTMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVm
IERGR0pJVENvZGVHZW5lcmF0b3JfaAotI2RlZmluZSBERkdKSVRDb2RlR2VuZXJhdG9yX2gKLQot
I2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSA8
ZGZnL0RGR0dlbmVyYXRpb25JbmZvLmg+Ci0jaW5jbHVkZSA8ZGZnL0RGR0dyYXBoLmg+Ci0jaW5j
bHVkZSA8ZGZnL0RGR0pJVENvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8ZGZnL0RGR05vZGUuaD4KLSNp
bmNsdWRlIDxkZmcvREZHT3BlcmF0aW9ucy5oPgotI2luY2x1ZGUgPGRmZy9ERkdSZWdpc3RlckJh
bmsuaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi1jbGFzcyBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZDsKLWNsYXNzIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZDsKLWNs
YXNzIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQ7Ci1jbGFzcyBTcGVjdWxhdGVDZWxsT3BlcmFuZDsK
LWNsYXNzIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kOwotCi0KLS8vID09PSBKSVRDb2RlR2VuZXJh
dG9yID09PQotLy8KLS8vIFRoaXMgY2xhc3MgcHJvdmlkZXMgY29tbW9uIGluZnJhc3RydWN0dXJl
IHVzZWQgYnkgdGhlIHNwZWN1bGF0aXZlICYKLS8vIG5vbi1zcGVjdWxhdGl2ZSBKSVRzLiBQcm92
aWRlcyBjb21tb24gbWVjaGFuaXNtcyBmb3IgdmlydHVhbCBhbmQKLS8vIHBoeXNpY2FsIHJlZ2lz
dGVyIG1hbmFnZW1lbnQsIGNhbGxzIG91dCBmcm9tIEpJVCBjb2RlIHRvIGhlbHBlcgotLy8gZnVu
Y3Rpb25zLCBldGMuCi1jbGFzcyBKSVRDb2RlR2VuZXJhdG9yIHsKLXByb3RlY3RlZDoKLSAgICB0
eXBlZGVmIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIgVHJ1c3RlZEltbTMyOwotICAgIHR5cGVk
ZWYgSklUQ29tcGlsZXI6OkltbTMyIEltbTMyOwotICAgIHR5cGVkZWYgSklUQ29tcGlsZXI6OlRy
dXN0ZWRJbW1QdHIgVHJ1c3RlZEltbVB0cjsKLSAgICB0eXBlZGVmIEpJVENvbXBpbGVyOjpJbW1Q
dHIgSW1tUHRyOwotCi0gICAgLy8gVGhlc2UgY29uc3RhbnRzIGFyZSB1c2VkIHRvIHNldCBwcmlv
cml0aWVzIGZvciBzcGlsbCBvcmRlciBmb3IKLSAgICAvLyB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9y
LgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW51bSBTcGlsbE9yZGVyIHsKLSAgICAgICAgU3Bp
bGxPcmRlckNvbnN0YW50ID0gMSwgLy8gbm8gc3BpbGwsIGFuZCBjaGVhcCBmaWxsCi0gICAgICAg
IFNwaWxsT3JkZXJTcGlsbGVkICA9IDIsIC8vIG5vIHNwaWxsCi0gICAgICAgIFNwaWxsT3JkZXJK
UyAgICAgICA9IDQsIC8vIG5lZWRzIHNwaWxsCi0gICAgICAgIFNwaWxsT3JkZXJDZWxsICAgICA9
IDQsIC8vIG5lZWRzIHNwaWxsCi0gICAgICAgIFNwaWxsT3JkZXJTdG9yYWdlICA9IDQsIC8vIG5l
ZWRzIHNwaWxsCi0gICAgICAgIFNwaWxsT3JkZXJJbnRlZ2VyICA9IDUsIC8vIG5lZWRzIHNwaWxs
IGFuZCBib3gKLSAgICAgICAgU3BpbGxPcmRlckJvb2xlYW4gID0gNSwgLy8gbmVlZHMgc3BpbGwg
YW5kIGJveAotICAgICAgICBTcGlsbE9yZGVyRG91YmxlICAgPSA2LCAvLyBuZWVkcyBzcGlsbCBh
bmQgY29udmVydAotICAgIH07Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGVudW0gU3Bp
bGxPcmRlciB7Ci0gICAgICAgIFNwaWxsT3JkZXJDb25zdGFudCA9IDEsIC8vIG5vIHNwaWxsLCBh
bmQgY2hlYXAgZmlsbAotICAgICAgICBTcGlsbE9yZGVyU3BpbGxlZCAgPSAyLCAvLyBubyBzcGls
bAotICAgICAgICBTcGlsbE9yZGVySlMgICAgICAgPSA0LCAvLyBuZWVkcyBzcGlsbAotICAgICAg
ICBTcGlsbE9yZGVyU3RvcmFnZSAgPSA0LCAvLyBuZWVkcyBzcGlsbAotICAgICAgICBTcGlsbE9y
ZGVyRG91YmxlICAgPSA0LCAvLyBuZWVkcyBzcGlsbAotICAgICAgICBTcGlsbE9yZGVySW50ZWdl
ciAgPSA1LCAvLyBuZWVkcyBzcGlsbCBhbmQgYm94Ci0gICAgICAgIFNwaWxsT3JkZXJDZWxsICAg
ICA9IDUsIC8vIG5lZWRzIHNwaWxsIGFuZCBib3gKLSAgICAgICAgU3BpbGxPcmRlckJvb2xlYW4g
ID0gNSwgLy8gbmVlZHMgc3BpbGwgYW5kIGJveAotICAgIH07Ci0jZW5kaWYKLQotICAgIGVudW0g
VXNlQ2hpbGRyZW5Nb2RlIHsgQ2FsbFVzZUNoaWxkcmVuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxp
Y2l0bHkgfTsKLSAgICAKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIHR3b1RvVGhlMzI7Ci0KLXB1
YmxpYzoKLSAgICBOb2RlJiBhdChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKLSAgICB9Ci0gICAgCi0gICAgR1BSUmVn
IGZpbGxJbnRlZ2VyKE5vZGVJbmRleCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KTsKLSAgICBG
UFJSZWcgZmlsbERvdWJsZShOb2RlSW5kZXgpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgR1BS
UmVnIGZpbGxKU1ZhbHVlKE5vZGVJbmRleCk7Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
IGJvb2wgZmlsbEpTVmFsdWUoTm9kZUluZGV4LCBHUFJSZWcmLCBHUFJSZWcmLCBGUFJSZWcmKTsK
LSNlbmRpZgotICAgIEdQUlJlZyBmaWxsU3RvcmFnZShOb2RlSW5kZXgpOwotCi0gICAgLy8gbG9j
ayBhbmQgdW5sb2NrIEdQUiAmIEZQUiByZWdpc3RlcnMuCi0gICAgdm9pZCBsb2NrKEdQUlJlZyBy
ZWcpCi0gICAgewotICAgICAgICBtX2dwcnMubG9jayhyZWcpOwotICAgIH0KLSAgICB2b2lkIGxv
Y2soRlBSUmVnIHJlZykKLSAgICB7Ci0gICAgICAgIG1fZnBycy5sb2NrKHJlZyk7Ci0gICAgfQot
ICAgIHZvaWQgdW5sb2NrKEdQUlJlZyByZWcpCi0gICAgewotICAgICAgICBtX2dwcnMudW5sb2Nr
KHJlZyk7Ci0gICAgfQotICAgIHZvaWQgdW5sb2NrKEZQUlJlZyByZWcpCi0gICAgewotICAgICAg
ICBtX2ZwcnMudW5sb2NrKHJlZyk7Ci0gICAgfQotCi0gICAgLy8gVXNlZCB0byBjaGVjayB3aGV0
aGVyIGEgY2hpbGQgbm9kZSBpcyBvbiBpdHMgbGFzdCB1c2UsCi0gICAgLy8gYW5kIGl0cyBtYWNo
aW5lIHJlZ2lzdGVycyBtYXkgYmUgcmV1c2VkLgotICAgIGJvb2wgY2FuUmV1c2UoTm9kZUluZGV4
IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIgPSBhdChub2RlSW5kZXgpLnZpcnR1YWxSZWdpc3RlcigpOwotICAgICAgICBHZW5lcmF0aW9u
SW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKLSAgICAgICAg
cmV0dXJuIGluZm8uY2FuUmV1c2UoKTsKLSAgICB9Ci0gICAgR1BSUmVnIHJldXNlKEdQUlJlZyBy
ZWcpCi0gICAgewotICAgICAgICBtX2dwcnMubG9jayhyZWcpOwotICAgICAgICByZXR1cm4gcmVn
OwotICAgIH0KLSAgICBGUFJSZWcgcmV1c2UoRlBSUmVnIHJlZykKLSAgICB7Ci0gICAgICAgIG1f
ZnBycy5sb2NrKHJlZyk7Ci0gICAgICAgIHJldHVybiByZWc7Ci0gICAgfQotCi0gICAgLy8gQWxs
b2NhdGUgYSBncHIvZnByLgotICAgIEdQUlJlZyBhbGxvY2F0ZSgpCi0gICAgewotICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3BpbGxNZTsKLSAgICAgICAgR1BSUmVnIGdwciA9IG1fZ3Bycy5hbGxv
Y2F0ZShzcGlsbE1lKTsKLSAgICAgICAgaWYgKHNwaWxsTWUgIT0gSW52YWxpZFZpcnR1YWxSZWdp
c3RlcikgewotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgICAgICBHZW5lcmF0aW9uSW5m
byYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bc3BpbGxNZV07Ci0gICAgICAgICAgICBBU1NFUlQo
aW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXRKU0RvdWJsZSk7Ci0gICAgICAgICAg
ICBpZiAoKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAmIERhdGFGb3JtYXRKUykpCi0gICAgICAgICAg
ICAgICAgbV9ncHJzLnJlbGVhc2UoaW5mby50YWdHUFIoKSA9PSBncHIgPyBpbmZvLnBheWxvYWRH
UFIoKSA6IGluZm8udGFnR1BSKCkpOwotI2VuZGlmCi0gICAgICAgICAgICBzcGlsbChzcGlsbE1l
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZ3ByOwotICAgIH0KLSAgICBHUFJSZWcgYWxs
b2NhdGUoR1BSUmVnIHNwZWNpZmljKQotICAgIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNw
aWxsTWUgPSBtX2dwcnMuYWxsb2NhdGVTcGVjaWZpYyhzcGVjaWZpYyk7Ci0gICAgICAgIGlmIChz
cGlsbE1lICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpIHsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0
KQotICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3Nw
aWxsTWVdOwotICAgICAgICAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRh
Rm9ybWF0SlNEb3VibGUpOwotICAgICAgICAgICAgaWYgKChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkg
JiBEYXRhRm9ybWF0SlMpKQotICAgICAgICAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKGluZm8udGFn
R1BSKCkgPT0gc3BlY2lmaWMgPyBpbmZvLnBheWxvYWRHUFIoKSA6IGluZm8udGFnR1BSKCkpOwot
I2VuZGlmCi0gICAgICAgICAgICBzcGlsbChzcGlsbE1lKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gc3BlY2lmaWM7Ci0gICAgfQotICAgIEdQUlJlZyB0cnlBbGxvY2F0ZSgpCi0gICAgewot
ICAgICAgICByZXR1cm4gbV9ncHJzLnRyeUFsbG9jYXRlKCk7Ci0gICAgfQotICAgIEZQUlJlZyBm
cHJBbGxvY2F0ZSgpCi0gICAgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxNZTsKLSAg
ICAgICAgRlBSUmVnIGZwciA9IG1fZnBycy5hbGxvY2F0ZShzcGlsbE1lKTsKLSAgICAgICAgaWYg
KHNwaWxsTWUgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAgICAgIHNwaWxsKHNw
aWxsTWUpOwotICAgICAgICByZXR1cm4gZnByOwotICAgIH0KLQotICAgIC8vIENoZWNrIHdoZXRo
ZXIgYSBWaXJ0dWFsUmVnc2l0ZXIgaXMgY3VycmVudGx5IGluIGEgbWFjaGluZSByZWdpc3Rlci4K
LSAgICAvLyBXZSB1c2UgdGhpcyB3aGVuIGZpbGxpbmcgb3BlcmFuZHMgdG8gZmlsbCB0aG9zZSB0
aGF0IGFyZSBhbHJlYWR5IGluCi0gICAgLy8gbWFjaGluZSByZWdpc3RlcnMgZmlyc3QgKGJ5IGxv
Y2tpbmcgVmlydHVhbFJlZ3NpdGVycyB0aGF0IGFyZSBhbHJlYWR5Ci0gICAgLy8gaW4gbWFjaGlu
ZSByZWdpc3RlciBiZWZvcmUgZmlsbGluZyB0aG9zZSB0aGF0IGFyZSBub3Qgd2UgYXR0ZW1wdCB0
bwotICAgIC8vIGF2b2lkIHNwaWxsaW5nIHZhbHVlcyB3ZSB3aWxsIG5lZWQgaW1tZWRpYXRlbHkp
LgotICAgIGJvb2wgaXNGaWxsZWQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBhdChub2RlSW5kZXgpLnZpcnR1YWxS
ZWdpc3RlcigpOwotICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbklu
Zm9bdmlydHVhbFJlZ2lzdGVyXTsKLSAgICAgICAgcmV0dXJuIGluZm8ucmVnaXN0ZXJGb3JtYXQo
KSAhPSBEYXRhRm9ybWF0Tm9uZTsKLSAgICB9Ci0gICAgYm9vbCBpc0ZpbGxlZERvdWJsZShOb2Rl
SW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlciA9IGF0KG5vZGVJbmRleCkudmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgIEdlbmVy
YXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwotICAg
ICAgICByZXR1cm4gaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGU7Ci0g
ICAgfQotCi0gICAgLy8gQ2FsbGVkIG9uIGFuIG9wZXJhbmQgb25jZSBpdCBoYXMgYmVlbiBjb25z
dW1lZCBieSBhIHBhcmVudCBub2RlLgotICAgIHZvaWQgdXNlKE5vZGVJbmRleCBub2RlSW5kZXgp
Ci0gICAgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gYXQobm9k
ZUluZGV4KS52aXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8g
PSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0KLSAgICAgICAgLy8gdXNlKCkg
cmV0dXJucyB0cnVlIHdoZW4gdGhlIHZhbHVlIGJlY29tZXMgZGVhZCwgYW5kIGFueQotICAgICAg
ICAvLyBhc3NvY2lhdGVkIHJlc291cmNlcyBtYXkgYmUgZnJlZWQuCi0gICAgICAgIGlmICghaW5m
by51c2UoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBSZWxlYXNlIHRoZSBh
c3NvY2lhdGVkIG1hY2hpbmUgcmVnaXN0ZXJzLgotICAgICAgICBEYXRhRm9ybWF0IHJlZ2lzdGVy
Rm9ybWF0ID0gaW5mby5yZWdpc3RlckZvcm1hdCgpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0RG91YmxlKQotICAgICAgICAgICAg
bV9mcHJzLnJlbGVhc2UoaW5mby5mcHIoKSk7Ci0gICAgICAgIGVsc2UgaWYgKHJlZ2lzdGVyRm9y
bWF0ICE9IERhdGFGb3JtYXROb25lKQotICAgICAgICAgICAgbV9ncHJzLnJlbGVhc2UoaW5mby5n
cHIoKSk7Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBpZiAocmVnaXN0ZXJGb3Jt
YXQgPT0gRGF0YUZvcm1hdERvdWJsZSB8fCByZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SlNE
b3VibGUpCi0gICAgICAgICAgICBtX2ZwcnMucmVsZWFzZShpbmZvLmZwcigpKTsKLSAgICAgICAg
ZWxzZSBpZiAocmVnaXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHsKLSAgICAgICAgICAgIG1f
Z3Bycy5yZWxlYXNlKGluZm8udGFnR1BSKCkpOwotICAgICAgICAgICAgbV9ncHJzLnJlbGVhc2Uo
aW5mby5wYXlsb2FkR1BSKCkpOwotICAgICAgICB9IGVsc2UgaWYgKHJlZ2lzdGVyRm9ybWF0ICE9
IERhdGFGb3JtYXROb25lKQotICAgICAgICAgICAgbV9ncHJzLnJlbGVhc2UoaW5mby5ncHIoKSk7
Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBtYXJrQ2VsbENhcmQoTWFjcm9Bc3Nl
bWJsZXImLCBHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0
Y2hHUFIyKTsKLSAgICBzdGF0aWMgdm9pZCB3cml0ZUJhcnJpZXIoTWFjcm9Bc3NlbWJsZXImLCBH
UFJSZWcgb3duZXJHUFIsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBX
cml0ZUJhcnJpZXJVc2VLaW5kKTsKLQotICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25l
ckdQUiwgR1BSUmVnIHZhbHVlR1BSLCBOb2RlSW5kZXggdmFsdWVJbmRleCwgV3JpdGVCYXJyaWVy
VXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHNjcmF0
Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7Ci0gICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93
bmVyR1BSLCBKU0NlbGwqIHZhbHVlLCBXcml0ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRj
aEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVn
KTsKLSAgICB2b2lkIHdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBHUFJSZWcgdmFsdWVHUFIs
IE5vZGVJbmRleCB2YWx1ZUluZGV4LCBXcml0ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRj
aEdQUjEgPSBJbnZhbGlkR1BSUmVnKTsKLQotICAgIHN0YXRpYyBHUFJSZWcgc2VsZWN0U2NyYXRj
aEdQUihHUFJSZWcgcHJlc2VydmUxID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlMiA9
IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTMgPSBJbnZhbGlkR1BSUmVnKQotICAgIHsK
LSAgICAgICAgaWYgKHByZXNlcnZlMSAhPSBHUFJJbmZvOjpyZWdUMCAmJiBwcmVzZXJ2ZTIgIT0g
R1BSSW5mbzo6cmVnVDAgJiYgcHJlc2VydmUzICE9IEdQUkluZm86OnJlZ1QwKQotICAgICAgICAg
ICAgcmV0dXJuIEdQUkluZm86OnJlZ1QwOwotCi0gICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BS
SW5mbzo6cmVnVDEgJiYgcHJlc2VydmUyICE9IEdQUkluZm86OnJlZ1QxICYmIHByZXNlcnZlMyAh
PSBHUFJJbmZvOjpyZWdUMSkKLSAgICAgICAgICAgIHJldHVybiBHUFJJbmZvOjpyZWdUMTsKLQot
ICAgICAgICBpZiAocHJlc2VydmUxICE9IEdQUkluZm86OnJlZ1QyICYmIHByZXNlcnZlMiAhPSBH
UFJJbmZvOjpyZWdUMiAmJiBwcmVzZXJ2ZTMgIT0gR1BSSW5mbzo6cmVnVDIpCi0gICAgICAgICAg
ICByZXR1cm4gR1BSSW5mbzo6cmVnVDI7Ci0KLSAgICAgICAgcmV0dXJuIEdQUkluZm86OnJlZ1Qz
OwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIEpJVENvZGVHZW5lcmF0b3IoSklUQ29tcGlsZXIm
IGppdCkKLSAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9jb21waWxlSW5kZXgoMCkK
LSAgICAgICAgLCBtX2dlbmVyYXRpb25JbmZvKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxl
ZVJlZ2lzdGVycykKLSAgICAgICAgLCBtX2Jsb2NrSGVhZHMoaml0LmdyYXBoKCkubV9ibG9ja3Mu
c2l6ZSgpKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjbGVhckdlbmVyYXRpb25JbmZv
KCk7Ci0KLSAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIHdoZW4gZ2VuZXJhdGluZyAndW5l
eHBlY3RlZCcKLSAgICAvLyBjYWxscyBvdXQgZnJvbSBKSVQgY29kZSB0byBDKysgaGVscGVyIHJv
dXRpbmVzIC0KLSAgICAvLyB0aGV5IHNwaWxsIGFsbCBsaXZlIHZhbHVlcyB0byB0aGUgYXBwcm9w
cmlhdGUKLSAgICAvLyBzbG90cyBpbiB0aGUgUmVnaXN0ZXJGaWxlIHdpdGhvdXQgY2hhbmdpbmcg
YW55IHN0YXRlCi0gICAgLy8gaW4gdGhlIEdlbmVyYXRpb25JbmZvLgotICAgIHZvaWQgc2lsZW50
U3BpbGxHUFIoVmlydHVhbFJlZ2lzdGVyIHNwaWxsTWUsIEdQUlJlZyBzb3VyY2UpCi0gICAgewot
ICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bc3BpbGxNZV07
Ci0gICAgICAgIEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUp
OwotICAgICAgICBBU1NFUlQoaW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXREb3Vi
bGUpOwotCi0gICAgICAgIGlmICghaW5mby5uZWVkc1NwaWxsKCkpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgRGF0YUZvcm1hdCByZWdpc3RlckZvcm1hdCA9IGluZm8ucmVnaXN0ZXJG
b3JtYXQoKTsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIEFTU0VSVChpbmZvLmdwcigp
ID09IHNvdXJjZSk7Ci0gICAgICAgIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SW50
ZWdlcikKLSAgICAgICAgICAgIG1faml0LnN0b3JlMzIoc291cmNlLCBKSVRDb21waWxlcjo6YWRk
cmVzc0ZvcihzcGlsbE1lKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKHJl
Z2lzdGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpTIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3Jt
YXRDZWxsIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRTdG9yYWdlKTsKLSAgICAgICAg
ICAgIG1faml0LnN0b3JlUHRyKHNvdXJjZSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxN
ZSkpOwotICAgICAgICB9Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBpZiAocmVn
aXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmZvLnRh
Z0dQUigpID09IHNvdXJjZSB8fCBpbmZvLnBheWxvYWRHUFIoKSA9PSBzb3VyY2UpOwotICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihzb3VyY2UsIHNvdXJjZSA9PSBpbmZvLnRhZ0dQUigpID8gSklU
Q29tcGlsZXI6OnRhZ0ZvcihzcGlsbE1lKSA6IEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxs
TWUpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09
IHNvdXJjZSk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNvdXJjZSwgSklUQ29tcGlsZXI6
OnBheWxvYWRGb3Ioc3BpbGxNZSkpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0gICAgdm9p
ZCBzaWxlbnRTcGlsbEZQUihWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxNZSwgRlBSUmVnIHNvdXJjZSkK
LSAgICB7Ci0gICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tz
cGlsbE1lXTsKLSAgICAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9y
bWF0RG91YmxlKTsKLQotICAgICAgICBpZiAoIWluZm8ubmVlZHNTcGlsbCgpKSB7Ci0gICAgICAg
ICAgICAvLyBpdCdzIGVpdGhlciBhIGNvbnN0YW50IG9yIGl0J3MgYWxyZWFkeSBiZWVuIHNwaWxs
ZWQKLSAgICAgICAgICAgIEFTU0VSVChhdChpbmZvLm5vZGVJbmRleCgpKS5oYXNDb25zdGFudCgp
IHx8IGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIGl0J3MgbmVpdGhlciBhIGNv
bnN0YW50IG5vciBoYXMgaXQgYmVlbiBzcGlsbGVkLgotICAgICAgICBBU1NFUlQoIWF0KGluZm8u
bm9kZUluZGV4KCkpLmhhc0NvbnN0YW50KCkpOwotICAgICAgICBBU1NFUlQoaW5mby5zcGlsbEZv
cm1hdCgpID09IERhdGFGb3JtYXROb25lKTsKLSAgICAgICAgQVNTRVJUKGluZm8uZnByKCkgPT0g
c291cmNlKTsKLQotICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShzb3VyY2UsIEpJVENvbXBpbGVy
OjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNpbGVudEZpbGxHUFIo
VmlydHVhbFJlZ2lzdGVyIHNwaWxsTWUsIEdQUlJlZyB0YXJnZXQpCi0gICAgewotICAgICAgICBH
ZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bc3BpbGxNZV07Ci0KLSAgICAg
ICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7Ci0gICAgICAgIE5vZGUm
IG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgICAgICBBU1NFUlQoaW5mby5yZWdpc3RlckZvcm1h
dCgpICE9IERhdGFGb3JtYXROb25lKTsKLSAgICAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJGb3Jt
YXQoKSAhPSBEYXRhRm9ybWF0RG91YmxlKTsKLSAgICAgICAgRGF0YUZvcm1hdCByZWdpc3RlckZv
cm1hdCA9IGluZm8ucmVnaXN0ZXJGb3JtYXQoKTsKLQotICAgICAgICBpZiAocmVnaXN0ZXJGb3Jt
YXQgPT0gRGF0YUZvcm1hdEludGVnZXIpIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigp
ID09IHRhcmdldCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXNKU0ludGVnZXIoaW5mby5yZWdpc3Rl
ckZvcm1hdCgpKSk7Ci0gICAgICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAg
ICAgICAgICBtX2ppdC5tb3ZlKEltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkp
LCB0YXJnZXQpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9qaXQubG9h
ZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpLCB0YXJnZXQpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAocmVnaXN0ZXJGb3Jt
YXQgPT0gRGF0YUZvcm1hdEJvb2xlYW4pIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAg
ICAgICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gdGFyZ2V0KTsKLSAgICAgICAgICAgIGlmIChub2Rl
Lmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoaXNCb29sZWFuQ29uc3Rh
bnQobm9kZUluZGV4KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9m
Qm9vbGVhbkNvbnN0YW50KG5vZGVJbmRleCkpLCB0YXJnZXQpOwotICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNw
aWxsTWUpLCB0YXJnZXQpOwotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwpIHsKLSAgICAg
ICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHRhcmdldCk7Ci0gICAgICAgICAgICBpZiAobm9k
ZS5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVP
ZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKLSAgICAgICAgICAgICAgICBBU1NFUlQodmFsdWUuaXND
ZWxsKCkpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoSW1tUHRyKHZhbHVlLmFzQ2VsbCgp
KSwgdGFyZ2V0KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSksIHRhcmdldCk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0g
RGF0YUZvcm1hdFN0b3JhZ2UpIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHRh
cmdldCk7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KHNwaWxsTWUpLCB0YXJnZXQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgICAgICBBU1NFUlQoaW5mby5ncHIoKSA9PSB0YXJnZXQpOwotICAgICAgICBp
ZiAobm9kZS5oYXNDb25zdGFudCgpKQotICAgICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZU9mSlND
b25zdGFudEFzSW1tUHRyKG5vZGVJbmRleCksIHRhcmdldCk7Ci0gICAgICAgIGVsc2UgaWYgKGlu
Zm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SW50ZWdlcikgewotICAgICAgICAgICAgQVNT
RVJUKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRKU0ludGVnZXIpOwotICAgICAgICAgICAg
bV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpLCB0YXJnZXQpOwot
ICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCB0
YXJnZXQpOwotICAgICAgICB9IGVsc2UgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9y
bWF0RG91YmxlKSB7Ci0gICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZv
cm1hdEpTRG91YmxlKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFk
ZHJlc3NGb3Ioc3BpbGxNZSksIHRhcmdldCk7Ci0gICAgICAgICAgICBtX2ppdC5zdWJQdHIoR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCB0YXJnZXQpOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSks
IHRhcmdldCk7Ci0jZWxzZQotICAgICAgICBBU1NFUlQoaW5mby50YWdHUFIoKSA9PSB0YXJnZXQg
fHwgaW5mby5wYXlsb2FkR1BSKCkgPT0gdGFyZ2V0KTsKLSAgICAgICAgaWYgKG5vZGUuaGFzQ29u
c3RhbnQoKSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2ID0gdmFsdWVPZkpTQ29uc3RhbnQobm9k
ZUluZGV4KTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoaW5mby50YWdHUFIoKSA9PSB0YXJnZXQg
PyBJbW0zMih2LnRhZygpKSA6IEltbTMyKHYucGF5bG9hZCgpKSwgdGFyZ2V0KTsKLSAgICAgICAg
fSBlbHNlIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEludGVnZXIpIHsKLSAg
ICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsK
LSAgICAgICAgICAgIGlmIChpbmZvLnBheWxvYWRHUFIoKSA9PSB0YXJnZXQpIAotICAgICAgICAg
ICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihzcGlsbE1lKSwgdGFy
Z2V0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhcmdldCk7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgbV9qaXQubG9hZDMyKGluZm8udGFnR1BSKCkgPT0gdGFyZ2V0ID8gSklUQ29tcGls
ZXI6OnRhZ0ZvcihzcGlsbE1lKSA6IEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpLCB0
YXJnZXQpOwotI2VuZGlmCi0gICAgfQotCi0gICAgdm9pZCBzaWxlbnRGaWxsRlBSKFZpcnR1YWxS
ZWdpc3RlciBzcGlsbE1lLCBHUFJSZWcgY2FuVHJhbXBsZSwgRlBSUmVnIHRhcmdldCkKLSAgICB7
Ci0gICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tzcGlsbE1l
XTsKLSAgICAgICAgQVNTRVJUKGluZm8uZnByKCkgPT0gdGFyZ2V0KTsKLQotICAgICAgICBOb2Rl
SW5kZXggbm9kZUluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICAgICAgQVNTRVJUKGluZm8u
cmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKTsKLQotICAgICAgICBpZiAobm9k
ZS5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNOdW1iZXJDb25zdGFudChu
b2RlSW5kZXgpKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoSW1tUHRyKGJpdHdpc2VfY2FzdDx2
b2lkKj4odmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGVJbmRleCkpKSwgY2FuVHJhbXBsZSk7Ci0g
ICAgICAgICAgICBtX2ppdC5tb3ZlUHRyVG9Eb3VibGUoY2FuVHJhbXBsZSwgdGFyZ2V0KTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGluZm8u
c3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSAmJiBpbmZvLnNwaWxsRm9ybWF0KCkgIT0g
RGF0YUZvcm1hdERvdWJsZSkgewotICAgICAgICAgICAgLy8gaXQgd2FzIGFscmVhZHkgc3BpbGxl
ZCBwcmV2aW91c2x5IGFuZCBub3QgYXMgYSBkb3VibGUsIHdoaWNoIG1lYW5zIHdlIG5lZWQgdW5i
b3hpbmcuCi0gICAgICAgICAgICBBU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpICYgRGF0YUZvcm1h
dEpTKTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Io
c3BpbGxNZSksIGNhblRyYW1wbGUpOwotICAgICAgICAgICAgdW5ib3hEb3VibGUoY2FuVHJhbXBs
ZSwgdGFyZ2V0KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG1f
aml0LmxvYWREb3VibGUoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSksIHRhcmdldCk7
Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICBVTlVTRURfUEFSQU0oY2FuVHJhbXBs
ZSk7Ci0gICAgICAgIEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERv
dWJsZSB8fCBpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEpTRG91YmxlKTsKLSAg
ICAgICAgbV9qaXQuZW1pdExvYWREb3VibGUobm9kZUluZGV4LCB0YXJnZXQpOwotI2VuZGlmCi0g
ICAgfQotCi0gICAgdm9pZCBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhHUFJSZWcgZXhjbHVkZSwg
R1BSUmVnIGV4Y2x1ZGUyID0gSW52YWxpZEdQUlJlZykKLSAgICB7Ci0gICAgICAgIGZvciAoZ3By
X2l0ZXJhdG9yIGl0ZXIgPSBtX2dwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2dwcnMuZW5kKCk7ICsr
aXRlcikgewotICAgICAgICAgICAgR1BSUmVnIGdwciA9IGl0ZXIucmVnSUQoKTsKLSAgICAgICAg
ICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyICYmIGdwciAhPSBl
eGNsdWRlICYmIGdwciAhPSBleGNsdWRlMikKLSAgICAgICAgICAgICAgICBzaWxlbnRTcGlsbEdQ
UihpdGVyLm5hbWUoKSwgZ3ByKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGZwcl9pdGVyYXRv
ciBpdGVyID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsK
LSAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQot
ICAgICAgICAgICAgICAgIHNpbGVudFNwaWxsRlBSKGl0ZXIubmFtZSgpLCBpdGVyLnJlZ0lEKCkp
OwotICAgICAgICB9Ci0gICAgfQotICAgIHZvaWQgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoRlBS
UmVnIGV4Y2x1ZGUpCi0gICAgewotICAgICAgICBmb3IgKGdwcl9pdGVyYXRvciBpdGVyID0gbV9n
cHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9ncHJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAg
IGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQotICAgICAgICAgICAg
ICAgIHNpbGVudFNwaWxsR1BSKGl0ZXIubmFtZSgpLCBpdGVyLnJlZ0lEKCkpOwotICAgICAgICB9
Ci0gICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAh
PSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAgRlBSUmVnIGZwciA9IGl0ZXIu
cmVnSUQoKTsKLSAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJl
Z2lzdGVyICYmIGZwciAhPSBleGNsdWRlKQotICAgICAgICAgICAgICAgIHNpbGVudFNwaWxsRlBS
KGl0ZXIubmFtZSgpLCBmcHIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBzaWxlbnRG
aWxsQWxsUmVnaXN0ZXJzKEdQUlJlZyBleGNsdWRlLCBHUFJSZWcgZXhjbHVkZTIgPSBJbnZhbGlk
R1BSUmVnKQotICAgIHsKLSAgICAgICAgR1BSUmVnIGNhblRyYW1wbGUgPSBHUFJJbmZvOjpyZWdU
MDsKLSAgICAgICAgaWYgKGV4Y2x1ZGUgPT0gR1BSSW5mbzo6cmVnVDApCi0gICAgICAgICAgICBj
YW5UcmFtcGxlID0gR1BSSW5mbzo6cmVnVDE7Ci0gICAgICAgIAotICAgICAgICBmb3IgKGZwcl9p
dGVyYXRvciBpdGVyID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0
ZXIpIHsKLSAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKQotICAgICAgICAgICAgICAgIHNpbGVudEZpbGxGUFIoaXRlci5uYW1lKCksIGNhblRyYW1w
bGUsIGl0ZXIucmVnSUQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChncHJfaXRlcmF0b3Ig
aXRlciA9IG1fZ3Bycy5iZWdpbigpOyBpdGVyICE9IG1fZ3Bycy5lbmQoKTsgKytpdGVyKSB7Ci0g
ICAgICAgICAgICBHUFJSZWcgZ3ByID0gaXRlci5yZWdJRCgpOwotICAgICAgICAgICAgaWYgKGl0
ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgJiYgZ3ByICE9IGV4Y2x1ZGUgJiYg
Z3ByICE9IGV4Y2x1ZGUyKQotICAgICAgICAgICAgICAgIHNpbGVudEZpbGxHUFIoaXRlci5uYW1l
KCksIGdwcik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgdm9pZCBzaWxlbnRGaWxsQWxsUmVnaXN0
ZXJzKEZQUlJlZyBleGNsdWRlKQotICAgIHsKLSAgICAgICAgR1BSUmVnIGNhblRyYW1wbGUgPSBH
UFJJbmZvOjpyZWdUMDsKLSAgICAgICAgCi0gICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIg
PSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgewotICAgICAg
ICAgICAgRlBSUmVnIGZwciA9IGl0ZXIucmVnSUQoKTsKLSAgICAgICAgICAgIGlmIChpdGVyLm5h
bWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyICYmIGZwciAhPSBleGNsdWRlKQotICAgICAg
ICAgICAgICAgIHNpbGVudEZpbGxGUFIoaXRlci5uYW1lKCksIGNhblRyYW1wbGUsIGZwcik7Ci0g
ICAgICAgIH0KLSAgICAgICAgZm9yIChncHJfaXRlcmF0b3IgaXRlciA9IG1fZ3Bycy5iZWdpbigp
OyBpdGVyICE9IG1fZ3Bycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAoaXRlci5u
YW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAgICAgICAgICBzaWxlbnRG
aWxsR1BSKGl0ZXIubmFtZSgpLCBpdGVyLnJlZ0lEKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgLy8gVGhlc2UgbWV0aG9kcyBjb252ZXJ0IGJldHdlZW4gZG91YmxlcywgYW5kIGRvdWJsZXMg
Ym94ZWQgYW5kIEpTVmFsdWVzLgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgR1BSUmVnIGJveERv
dWJsZShGUFJSZWcgZnByLCBHUFJSZWcgZ3ByKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faml0
LmJveERvdWJsZShmcHIsIGdwcik7Ci0gICAgfQotICAgIEZQUlJlZyB1bmJveERvdWJsZShHUFJS
ZWcgZ3ByLCBGUFJSZWcgZnByKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faml0LnVuYm94RG91
YmxlKGdwciwgZnByKTsKLSAgICB9Ci0gICAgR1BSUmVnIGJveERvdWJsZShGUFJSZWcgZnByKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGJveERvdWJsZShmcHIsIGFsbG9jYXRlKCkpOwotICAgIH0K
LSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgdm9pZCBib3hEb3VibGUoRlBSUmVnIGZwciwg
R1BSUmVnIHRhZ0dQUiwgR1BSUmVnIHBheWxvYWRHUFIpCi0gICAgewotICAgICAgICBtX2ppdC5i
b3hEb3VibGUoZnByLCB0YWdHUFIsIHBheWxvYWRHUFIpOwotICAgIH0KLSAgICB2b2lkIHVuYm94
RG91YmxlKEdQUlJlZyB0YWdHUFIsIEdQUlJlZyBwYXlsb2FkR1BSLCBGUFJSZWcgZnByLCBGUFJS
ZWcgc2NyYXRjaEZQUikKLSAgICB7Ci0gICAgICAgIG1faml0LnVuYm94RG91YmxlKHRhZ0dQUiwg
cGF5bG9hZEdQUiwgZnByLCBzY3JhdGNoRlBSKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIC8vIFNw
aWxsIGEgVmlydHVhbFJlZ2lzdGVyIHRvIHRoZSBSZWdpc3RlckZpbGUuCi0gICAgdm9pZCBzcGls
bChWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxNZSkKLSAgICB7Ci0gICAgICAgIEdlbmVyYXRpb25JbmZv
JiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tzcGlsbE1lXTsKLQotI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCi0gICAgICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUp
IC8vIGl0IGhhcyBiZWVuIHNwaWxsZWQuIEpTIHZhbHVlcyB3aGljaCBoYXZlIHR3byBHUFJzIGNh
biByZWFjaCBoZXJlCi0gICAgICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICAgICAgLy8gQ2hl
Y2sgdGhlIEdlbmVyYXRpb25JbmZvIHRvIHNlZSBpZiB0aGlzIHZhbHVlIG5lZWQgd3JpdGluZwot
ICAgICAgICAvLyB0byB0aGUgUmVnaXN0ZXJGaWxlIC0gaWYgbm90LCBtYXJrIGl0IGFzIHNwaWxs
ZWQgJiByZXR1cm4uCi0gICAgICAgIGlmICghaW5mby5uZWVkc1NwaWxsKCkpIHsKLSAgICAgICAg
ICAgIGluZm8uc2V0U3BpbGxlZCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgRGF0YUZvcm1hdCBzcGlsbEZvcm1hdCA9IGluZm8ucmVnaXN0ZXJGb3JtYXQoKTsK
LSAgICAgICAgc3dpdGNoIChzcGlsbEZvcm1hdCkgewotICAgICAgICBjYXNlIERhdGFGb3JtYXRT
dG9yYWdlOiB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIHNwZWNpYWwsIHNpbmNlIGl0J3Mgbm90
IGEgSlMgdmFsdWUgLSBhcyBpbiBpdCdzIG5vdCB2aXNpYmxlIHRvIEpTCi0gICAgICAgICAgICAv
LyBjb2RlLgotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoaW5mby5ncHIoKSwgSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOwotICAgICAgICAgICAgaW5mby5zcGlsbChEYXRhRm9y
bWF0U3RvcmFnZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZTogewotICAgICAgICAgICAg
bV9qaXQuc3RvcmVEb3VibGUoaW5mby5mcHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3Bp
bGxNZSkpOwotICAgICAgICAgICAgaW5mby5zcGlsbChEYXRhRm9ybWF0RG91YmxlKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRGF0
YUZvcm1hdEludGVnZXI6IHsKLSAgICAgICAgICAgIG1faml0LnN0b3JlMzIoaW5mby5ncHIoKSwg
SklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSkpOwotICAgICAgICAgICAgaW5mby5zcGls
bChEYXRhRm9ybWF0SW50ZWdlcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGhhbmRs
ZXMgSlNWYWx1ZXMsIGludDMycywgYW5kIGNlbGxzLgotICAgICAgICAgICAgQVNTRVJUKHNwaWxs
Rm9ybWF0ID09IERhdGFGb3JtYXRDZWxsIHx8IHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIHJlZyA9IGluZm8uZ3ByKCk7Ci0gICAg
ICAgICAgICAvLyBXZSBuZWVkIHRvIGJveCBpbnQzMiBhbmQgY2VsbCB2YWx1ZXMgLi4uCi0gICAg
ICAgICAgICAvLyBidXQgb24gSlNWQUxVRTY0IGJveGluZyBhIGNlbGwgaXMgYSBuby1vcCEKLSAg
ICAgICAgICAgIGlmIChzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKLSAgICAgICAg
ICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZyk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFNwaWxsIHRoZSB2YWx1ZSwgYW5kIHJlY29y
ZCBpdCBhcyBzcGlsbGVkIGluIGl0cyBib3hlZCBmb3JtLgotICAgICAgICAgICAgbV9qaXQuc3Rv
cmVQdHIocmVnLCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSk7Ci0gICAgICAgICAg
ICBpbmZvLnNwaWxsKChEYXRhRm9ybWF0KShzcGlsbEZvcm1hdCB8IERhdGFGb3JtYXRKUykpOwot
ICAgICAgICAgICAgcmV0dXJuOwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgY2Fz
ZSBEYXRhRm9ybWF0RG91YmxlOgotICAgICAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZTogewot
ICAgICAgICAgICAgLy8gT24gSlNWQUxVRTMyXzY0IGJveGluZyBhIGRvdWJsZSBpcyBhIG5vLW9w
LgotICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUoaW5mby5mcHIoKSwgSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOwotICAgICAgICAgICAgaW5mby5zcGlsbChEYXRhRm9ybWF0
SlNEb3VibGUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgaGFuZGxlcyBKU1ZhbHVlcywg
aW50MzJzLCBjZWxscyBhbmQgYm9vbGVhbnMuCi0gICAgICAgICAgICBBU1NFUlQoc3BpbGxGb3Jt
YXQgPT0gRGF0YUZvcm1hdEludGVnZXIgfHwgc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwg
fHwgc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdEJvb2xlYW4gfHwgKHNwaWxsRm9ybWF0ICYgRGF0
YUZvcm1hdEpTKSk7Ci0KLSAgICAgICAgICAgIGlmIChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRK
UykgeyAvLyBKU1ZhbHVlCi0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihpbmZvLnRhZ0dQ
UigpLCBKSVRDb21waWxlcjo6dGFnRm9yKHNwaWxsTWUpKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKGluZm8ucGF5bG9hZEdQUigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihzcGls
bE1lKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEdQUlJlZyByZWcg
PSBpbmZvLmdwcigpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIocmVnLCBKSVRDb21w
aWxlcjo6cGF5bG9hZEZvcihzcGlsbE1lKSk7Ci0gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0
byBib3ggaW50MzJzLCBib29sZWFucyBhbmQgY2VsbHMuCi0gICAgICAgICAgICAgICAgaWYgKHNw
aWxsRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKQotICAgICAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIEpJVENvbXBpbGVyOjp0
YWdGb3Ioc3BpbGxNZSkpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNwaWxsRm9ybWF0ID09
IERhdGFGb3JtYXRDZWxsKQotICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgSklUQ29tcGlsZXI6OnRhZ0ZvcihzcGlsbE1lKSk7
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMy
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgSklUQ29tcGlsZXI6OnRhZ0Zvcihz
cGlsbE1lKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbmZvLnNwaWxsKChEYXRhRm9y
bWF0KShzcGlsbEZvcm1hdCB8IERhdGFGb3JtYXRKUykpOwotICAgICAgICAgICAgcmV0dXJuOwot
I2VuZGlmCi0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc1N0cmljdEludDMyKE5v
ZGVJbmRleCk7Ci0gICAgCi0gICAgYm9vbCBpc0tub3duSW50ZWdlcihOb2RlSW5kZXgpOwotICAg
IGJvb2wgaXNLbm93bk51bWVyaWMoTm9kZUluZGV4KTsKLSAgICBib29sIGlzS25vd25DZWxsKE5v
ZGVJbmRleCk7Ci0gICAgCi0gICAgYm9vbCBpc0tub3duTm90SW50ZWdlcihOb2RlSW5kZXgpOwot
ICAgIGJvb2wgaXNLbm93bk5vdE51bWJlcihOb2RlSW5kZXgpOwotCi0gICAgYm9vbCBpc0tub3du
Qm9vbGVhbihOb2RlSW5kZXgpOwotCi0gICAgYm9vbCBpc0tub3duTm90Q2VsbChOb2RlSW5kZXgp
OwotICAgIAotICAgIC8vIENoZWNrcy9hY2Nlc3NvcnMgZm9yIGNvbnN0YW50IHZhbHVlcy4KLSAg
ICBib29sIGlzQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuaXND
b25zdGFudChub2RlSW5kZXgpOyB9Ci0gICAgYm9vbCBpc0pTQ29uc3RhbnQoTm9kZUluZGV4IG5v
ZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuaXNKU0NvbnN0YW50KG5vZGVJbmRleCk7IH0KLSAgICBi
b29sIGlzSW50MzJDb25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5p
c0ludDMyQ29uc3RhbnQobm9kZUluZGV4KTsgfQotICAgIGJvb2wgaXNEb3VibGVDb25zdGFudChO
b2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5pc0RvdWJsZUNvbnN0YW50KG5vZGVJ
bmRleCk7IH0KLSAgICBib29sIGlzTnVtYmVyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkg
eyByZXR1cm4gbV9qaXQuaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpOyB9Ci0gICAgYm9vbCBp
c0Jvb2xlYW5Db25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5pc0Jv
b2xlYW5Db25zdGFudChub2RlSW5kZXgpOyB9Ci0gICAgYm9vbCBpc0Z1bmN0aW9uQ29uc3RhbnQo
Tm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuaXNGdW5jdGlvbkNvbnN0YW50KG5v
ZGVJbmRleCk7IH0KLSAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGVJbmRleCBu
b2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LnZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCk7
IH0KLSAgICBkb3VibGUgdmFsdWVPZk51bWJlckNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgp
IHsgcmV0dXJuIG1faml0LnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpOyB9Ci0jaWYg
VVNFKEpTVkFMVUUzMl82NCkKLSAgICB2b2lkKiBhZGRyZXNzT2ZEb3VibGVDb25zdGFudChOb2Rl
SW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5hZGRyZXNzT2ZEb3VibGVDb25zdGFudChu
b2RlSW5kZXgpOyB9Ci0jZW5kaWYKLSAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KE5vZGVJ
bmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1faml0LnZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRl
eCk7IH0KLSAgICBib29sIHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRl
eCkgeyByZXR1cm4gbV9qaXQudmFsdWVPZkJvb2xlYW5Db25zdGFudChub2RlSW5kZXgpOyB9Ci0g
ICAgSlNGdW5jdGlvbiogdmFsdWVPZkZ1bmN0aW9uQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRl
eCkgeyByZXR1cm4gbV9qaXQudmFsdWVPZkZ1bmN0aW9uQ29uc3RhbnQobm9kZUluZGV4KTsgfQot
ICAgIGJvb2wgaXNOdWxsQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAg
ICAgIGlmICghaXNDb25zdGFudChub2RlSW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5pc051bGwoKTsK
LSAgICB9Ci0KLSAgICBJZGVudGlmaWVyKiBpZGVudGlmaWVyKHVuc2lnbmVkIGluZGV4KQotICAg
IHsKLSAgICAgICAgcmV0dXJuICZtX2ppdC5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihpbmRleCk7
Ci0gICAgfQotCi0gICAgLy8gU3BpbGwgYWxsIFZpcnR1YWxSZWdpc3RlcnMgYmFjayB0byB0aGUg
UmVnaXN0ZXJGaWxlLgotICAgIHZvaWQgZmx1c2hSZWdpc3RlcnMoKQotICAgIHsKLSAgICAgICAg
Zm9yIChncHJfaXRlcmF0b3IgaXRlciA9IG1fZ3Bycy5iZWdpbigpOyBpdGVyICE9IG1fZ3Bycy5l
bmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZp
cnR1YWxSZWdpc3RlcikgewotICAgICAgICAgICAgICAgIHNwaWxsKGl0ZXIubmFtZSgpKTsKLSAg
ICAgICAgICAgICAgICBpdGVyLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBmb3IgKGZwcl9pdGVyYXRvciBpdGVyID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0g
bV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJ
bnZhbGlkVmlydHVhbFJlZ2lzdGVyKSB7Ci0gICAgICAgICAgICAgICAgc3BpbGwoaXRlci5uYW1l
KCkpOwotICAgICAgICAgICAgICAgIGl0ZXIucmVsZWFzZSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgIC8vIFVzZWQgdG8gQVNTRVJUIGZs
dXNoUmVnaXN0ZXJzKCkgaGFzIGJlZW4gY2FsbGVkIHByaW9yIHRvCi0gICAgLy8gY2FsbGluZyBv
dXQgZnJvbSBKSVQgY29kZSB0byBhIEMgaGVscGVyIGZ1bmN0aW9uLgotICAgIGJvb2wgaXNGbHVz
aGVkKCkKLSAgICB7Ci0gICAgICAgIGZvciAoZ3ByX2l0ZXJhdG9yIGl0ZXIgPSBtX2dwcnMuYmVn
aW4oKTsgaXRlciAhPSBtX2dwcnMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAgaWYgKGl0
ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBt
X2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAg
ICAgaWYgKGl0ZXIubmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSNlbmRpZgotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SW1t
UHRyIHZhbHVlT2ZKU0NvbnN0YW50QXNJbW1QdHIoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZSh2
YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpKSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICAvLyBI
ZWxwZXIgZnVuY3Rpb25zIHRvIGVuYWJsZSBjb2RlIHNoYXJpbmcgaW4gaW1wbGVtZW50YXRpb25z
IG9mIGJpdC9zaGlmdCBvcHMuCi0gICAgdm9pZCBiaXRPcChOb2RlVHlwZSBvcCwgaW50MzJfdCBp
bW0sIEdQUlJlZyBvcDEsIEdQUlJlZyByZXN1bHQpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG9w
KSB7Ci0gICAgICAgIGNhc2UgQml0QW5kOgotICAgICAgICAgICAgbV9qaXQuYW5kMzIoSW1tMzIo
aW1tKSwgb3AxLCByZXN1bHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQml0
T3I6Ci0gICAgICAgICAgICBtX2ppdC5vcjMyKEltbTMyKGltbSksIG9wMSwgcmVzdWx0KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJpdFhvcjoKLSAgICAgICAgICAgIG1faml0
LnhvcjMyKEltbTMyKGltbSksIG9wMSwgcmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgdm9pZCBiaXRPcChOb2RlVHlwZSBvcCwgR1BSUmVnIG9wMSwgR1BSUmVn
IG9wMiwgR1BSUmVnIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAob3ApIHsKLSAgICAg
ICAgY2FzZSBCaXRBbmQ6Ci0gICAgICAgICAgICBtX2ppdC5hbmQzMihvcDEsIG9wMiwgcmVzdWx0
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJpdE9yOgotICAgICAgICAgICAg
bV9qaXQub3IzMihvcDEsIG9wMiwgcmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEJpdFhvcjoKLSAgICAgICAgICAgIG1faml0LnhvcjMyKG9wMSwgb3AyLCByZXN1bHQp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICB2b2lkIHNoaWZ0T3AoTm9k
ZVR5cGUgb3AsIEdQUlJlZyBvcDEsIGludDMyX3Qgc2hpZnRBbW91bnQsIEdQUlJlZyByZXN1bHQp
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgQml0UlNoaWZ0Ogot
ICAgICAgICAgICAgbV9qaXQucnNoaWZ0MzIob3AxLCBJbW0zMihzaGlmdEFtb3VudCksIHJlc3Vs
dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCaXRMU2hpZnQ6Ci0gICAgICAg
ICAgICBtX2ppdC5sc2hpZnQzMihvcDEsIEltbTMyKHNoaWZ0QW1vdW50KSwgcmVzdWx0KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6Ci0gICAgICAgICAgICBt
X2ppdC51cnNoaWZ0MzIob3AxLCBJbW0zMihzaGlmdEFtb3VudCksIHJlc3VsdCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICB9Ci0gICAgfQotICAgIHZvaWQgc2hpZnRPcChOb2RlVHlwZSBvcCwg
R1BSUmVnIG9wMSwgR1BSUmVnIHNoaWZ0QW1vdW50LCBHUFJSZWcgcmVzdWx0KQotICAgIHsKLSAg
ICAgICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEJpdFJTaGlmdDoKLSAgICAgICAgICAg
IG1faml0LnJzaGlmdDMyKG9wMSwgc2hpZnRBbW91bnQsIHJlc3VsdCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBCaXRMU2hpZnQ6Ci0gICAgICAgICAgICBtX2ppdC5sc2hpZnQz
MihvcDEsIHNoaWZ0QW1vdW50LCByZXN1bHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQml0VVJTaGlmdDoKLSAgICAgICAgICAgIG1faml0LnVyc2hpZnQzMihvcDEsIHNoaWZ0
QW1vdW50LCByZXN1bHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAK
LSAgICAvLyBSZXR1cm5zIHRoZSBub2RlIGluZGV4IG9mIHRoZSBicmFuY2ggbm9kZSBpZiBwZWVw
aG9sZSBpcyBva2F5LCBOb05vZGUgb3RoZXJ3aXNlLgotICAgIE5vZGVJbmRleCBkZXRlY3RQZWVw
SG9sZUJyYW5jaCgpCi0gICAgewotICAgICAgICBOb2RlSW5kZXggbGFzdE5vZGVJbmRleCA9IG1f
aml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmVuZCAtIDE7Ci0KLSAgICAgICAgLy8gQ2hl
Y2sgdGhhdCBubyBpbnRlcnZlbmluZyBub2RlcyB3aWxsIGJlIGdlbmVyYXRlZC4KLSAgICAgICAg
Zm9yIChOb2RlSW5kZXggaW5kZXggPSBtX2NvbXBpbGVJbmRleCArIDE7IGluZGV4IDwgbGFzdE5v
ZGVJbmRleDsgKytpbmRleCkgewotICAgICAgICAgICAgaWYgKGF0KGluZGV4KS5zaG91bGRHZW5l
cmF0ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBDaGVjayBpZiB0aGUgbGFzdE5vZGUgaXMgYSBicmFuY2ggb24gdGhpcyBub2RlLgot
ICAgICAgICBOb2RlJiBsYXN0Tm9kZSA9IGF0KGxhc3ROb2RlSW5kZXgpOwotICAgICAgICByZXR1
cm4gbGFzdE5vZGUub3AgPT0gQnJhbmNoICYmIGxhc3ROb2RlLmNoaWxkMSgpID09IG1fY29tcGls
ZUluZGV4ID8gbGFzdE5vZGVJbmRleCA6IE5vTm9kZTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBu
b25TcGVjdWxhdGl2ZVZhbHVlVG9OdW1iZXIoTm9kZSYpOwotICAgIHZvaWQgbm9uU3BlY3VsYXRp
dmVWYWx1ZVRvSW50MzIoTm9kZSYpOwotICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVVSW50MzJUb051
bWJlcihOb2RlJik7Ci0KLSAgICB2b2lkIG5vblNwZWN1bGF0aXZlS25vd25Db25zdGFudEFyaXRo
T3AoTm9kZVR5cGUgb3AsIE5vZGVJbmRleCByZWdDaGlsZCwgTm9kZUluZGV4IGltbUNoaWxkLCBi
b29sIGNvbW11dGUpOwotICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVCYXNpY0FyaXRoT3AoTm9kZVR5
cGUgb3AsIE5vZGUmKTsKLSAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhY2hlZEdldEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRHUFIsIEdQ
UlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6
SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCksIE5vZGVUeXBlID0gR2V0
QnlJZCk7Ci0gICAgdm9pZCBjYWNoZWRQdXRCeUlkKEdQUlJlZyBiYXNlLCBHUFJSZWcgdmFsdWUs
IE5vZGVJbmRleCB2YWx1ZUluZGV4LCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciwgUHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBK
SVRDb21waWxlcjo6SnVtcCgpKTsKLSAgICB2b2lkIGNhY2hlZEdldE1ldGhvZChHUFJSZWcgYmFz
ZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGls
ZXI6Okp1bXAoKSk7Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhY2hlZEdldEJ5SWQoR1BSUmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcgcmVzdWx0VGFn
R1BSLCBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklU
Q29tcGlsZXI6Okp1bXAoKSwgTm9kZVR5cGUgPSBHZXRCeUlkKTsKLSAgICB2b2lkIGNhY2hlZFB1
dEJ5SWQoR1BSUmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcgdmFsdWVUYWdHUFIsIEdQUlJlZyB2
YWx1ZVBheWxvYWRHUFIsIE5vZGVJbmRleCB2YWx1ZUluZGV4LCBHUFJSZWcgc2NyYXRjaEdQUiwg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xv
d1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpKTsKLSAgICB2b2lkIGNhY2hlZEdldE1l
dGhvZChHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyByZXN1bHRUYWdHUFIsIEdQUlJlZyBy
ZXN1bHRQYXlsb2FkR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVt
cCgpKTsKLSNlbmRpZgotCi0gICAgdm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFy
ZU51bGwoTm9kZUluZGV4IG9wZXJhbmQsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwotICAgIHZvaWQg
bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoTm9kZUluZGV4IG9wZXJhbmQsIE5vZGVJ
bmRleCBicmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwotICAgIGJvb2wgbm9u
U3BlY3VsYXRpdmVDb21wYXJlTnVsbChOb2RlJiwgTm9kZUluZGV4IG9wZXJhbmQsIGJvb2wgaW52
ZXJ0ID0gZmFsc2UpOwotICAgIAotICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5j
aChOb2RlJiwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0
aW9uYWxDb25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7Ci0gICAg
dm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShOb2RlJiwgTWFjcm9Bc3NlbWJs
ZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlv
bik7Ci0gICAgYm9vbCBub25TcGVjdWxhdGl2ZUNvbXBhcmUoTm9kZSYsIE1hY3JvQXNzZW1ibGVy
OjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24p
OwotICAgIAotICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKE5vZGUmLCBO
b2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBib29sIGludmVydCA9IGZhbHNlKTsKLSAgICB2b2lk
IG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJpY3RFcShOb2RlJiwgYm9vbCBpbnZlcnQgPSBm
YWxzZSk7Ci0gICAgYm9vbCBub25TcGVjdWxhdGl2ZVN0cmljdEVxKE5vZGUmLCBib29sIGludmVy
dCA9IGZhbHNlKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhZGRyZXNzT2ZD
YWxsRGF0YShpbnQgaWR4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAobV9qaXQuY29kZUJsb2NrKCktPm1f
bnVtQ2FsbGVlUmVnaXN0ZXJzICsgaWR4KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSkpOwotICAgIH0KLQotI2lmIFVTRShKU1ZBTFVFMzJfNjQpICAgIAotICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzIHRhZ09mQ2FsbERhdGEoaW50IGlkeCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
KG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyArIGlkeCkgKiBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKLSAgICB9Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyBwYXlsb2FkT2ZDYWxsRGF0YShpbnQgaWR4KQotICAgIHsKLSAgICAgICAgcmV0dXJu
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAobV9q
aXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICsgaWR4KSAqIHN0YXRpY19jYXN0
PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVz
Y3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHZvaWQgZW1p
dENhbGwoTm9kZSYpOwotICAgIAotICAgIC8vIENhbGxlZCBvbmNlIGEgbm9kZSBoYXMgY29tcGxl
dGVkIGNvZGUgZ2VuZXJhdGlvbiBidXQgcHJpb3IgdG8gc2V0dGluZwotICAgIC8vIGl0cyByZXN1
bHQsIHRvIGZyZWUgdXAgaXRzIGNoaWxkcmVuLiAoVGhpcyBtdXN0IGhhcHBlbiBwcmlvciB0byBz
ZXR0aW5nCi0gICAgLy8gdGhlIG5vZGVzIHJlc3VsdCwgc2luY2UgdGhlIG5vZGUgbWF5IGhhdmUg
dGhlIHNhbWUgVmlydHVhbFJlZ2lzdGVyIGFzCi0gICAgLy8gYSBjaGlsZCwgYW5kIGFzIHN1Y2gg
d2lsbCB1c2UgdGhlIHNhbWUgR2VuZXJhdGlvSW5mbykuCi0gICAgdm9pZCB1c2VDaGlsZHJlbihO
b2RlJik7Ci0KLSAgICAvLyBUaGVzZSBtZXRob2QgY2FsbGVkIHRvIGluaXRpYWxpemUgdGhlIHRo
ZSBHZW5lcmF0aW9uSW5mbwotICAgIC8vIHRvIGRlc2NyaWJlIHRoZSByZXN1bHQgb2YgYW4gb3Bl
cmF0aW9uLgotICAgIHZvaWQgaW50ZWdlclJlc3VsdChHUFJSZWcgcmVnLCBOb2RlSW5kZXggbm9k
ZUluZGV4LCBEYXRhRm9ybWF0IGZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyLCBVc2VDaGlsZHJl
bk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKLSAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUg
PSBhdChub2RlSW5kZXgpOwotICAgICAgICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4pCi0g
ICAgICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKLQotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgR2VuZXJh
dGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0KLSAg
ICAgICAgaWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikgewotICAgICAgICAgICAgbV9q
aXQuaml0QXNzZXJ0SXNJbnQzMihyZWcpOwotICAgICAgICAgICAgbV9ncHJzLnJldGFpbihyZWcs
IHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckludGVnZXIpOwotICAgICAgICAgICAgaW5mby5p
bml0SW50ZWdlcihub2RlSW5kZXgsIG5vZGUucmVmQ291bnQoKSwgcmVnKTsKLSAgICAgICAgfSBl
bHNlIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBE
YXRhRm9ybWF0SlNJbnRlZ2VyKTsKLSAgICAgICAgICAgIG1faml0LmppdEFzc2VydElzSlNJbnQz
MihyZWcpOwotICAgICAgICAgICAgbV9ncHJzLnJldGFpbihyZWcsIHZpcnR1YWxSZWdpc3Rlciwg
U3BpbGxPcmRlckpTKTsKLSAgICAgICAgICAgIGluZm8uaW5pdEpTVmFsdWUobm9kZUluZGV4LCBu
b2RlLnJlZkNvdW50KCksIHJlZywgZm9ybWF0KTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0g
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAg
fQotICAgIHZvaWQgaW50ZWdlclJlc3VsdChHUFJSZWcgcmVnLCBOb2RlSW5kZXggbm9kZUluZGV4
LCBVc2VDaGlsZHJlbk1vZGUgbW9kZSkKLSAgICB7Ci0gICAgICAgIGludGVnZXJSZXN1bHQocmVn
LCBub2RlSW5kZXgsIERhdGFGb3JtYXRJbnRlZ2VyLCBtb2RlKTsKLSAgICB9Ci0gICAgdm9pZCBu
b1Jlc3VsdChOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxV
c2VDaGlsZHJlbikKLSAgICB7Ci0gICAgICAgIGlmIChtb2RlID09IFVzZUNoaWxkcmVuQ2FsbGVk
RXhwbGljaXRseSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0
KG5vZGVJbmRleCk7Ci0gICAgICAgIHVzZUNoaWxkcmVuKG5vZGUpOwotICAgIH0KLSAgICB2b2lk
IGNlbGxSZXN1bHQoR1BSUmVnIHJlZywgTm9kZUluZGV4IG5vZGVJbmRleCwgVXNlQ2hpbGRyZW5N
b2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCi0gICAgewotICAgICAgICBOb2RlJiBub2RlID0g
YXQobm9kZUluZGV4KTsKLSAgICAgICAgaWYgKG1vZGUgPT0gQ2FsbFVzZUNoaWxkcmVuKQotICAg
ICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7Ci0KLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgIG1fZ3Bycy5y
ZXRhaW4ocmVnLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDZWxsKTsKLSAgICAgICAgR2Vu
ZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0g
ICAgICAgIGluZm8uaW5pdENlbGwobm9kZUluZGV4LCBub2RlLnJlZkNvdW50KCksIHJlZyk7Ci0g
ICAgfQotICAgIHZvaWQgYm9vbGVhblJlc3VsdChHUFJSZWcgcmVnLCBOb2RlSW5kZXggbm9kZUlu
ZGV4LCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKLSAgICB7Ci0gICAg
ICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgICAgICBpZiAobW9kZSA9PSBDYWxs
VXNlQ2hpbGRyZW4pCi0gICAgICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKLQotICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsK
LSAgICAgICAgbV9ncHJzLnJldGFpbihyZWcsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckJv
b2xlYW4pOwotICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9b
dmlydHVhbFJlZ2lzdGVyXTsKLSAgICAgICAgaW5mby5pbml0Qm9vbGVhbihub2RlSW5kZXgsIG5v
ZGUucmVmQ291bnQoKSwgcmVnKTsKLSAgICB9Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICB2b2lk
IGpzVmFsdWVSZXN1bHQoR1BSUmVnIHJlZywgTm9kZUluZGV4IG5vZGVJbmRleCwgRGF0YUZvcm1h
dCBmb3JtYXQgPSBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNo
aWxkcmVuKQotICAgIHsKLSAgICAgICAgaWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlNJbnRlZ2Vy
KQotICAgICAgICAgICAgbV9qaXQuaml0QXNzZXJ0SXNKU0ludDMyKHJlZyk7Ci0gICAgICAgIAot
ICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKLSAgICAgICAgaWYgKG1vZGUgPT0g
Q2FsbFVzZUNoaWxkcmVuKQotICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7Ci0KLSAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVy
KCk7Ci0gICAgICAgIG1fZ3Bycy5yZXRhaW4ocmVnLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3Jk
ZXJKUyk7Ci0gICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2
aXJ0dWFsUmVnaXN0ZXJdOwotICAgICAgICBpbmZvLmluaXRKU1ZhbHVlKG5vZGVJbmRleCwgbm9k
ZS5yZWZDb3VudCgpLCByZWcsIGZvcm1hdCk7Ci0gICAgfQotICAgIHZvaWQganNWYWx1ZVJlc3Vs
dChHUFJSZWcgcmVnLCBOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VDaGlsZHJlbk1vZGUgbW9kZSkK
LSAgICB7Ci0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVnLCBub2RlSW5kZXgsIERhdGFGb3JtYXRK
UywgbW9kZSk7Ci0gICAgfQotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICB2b2lkIGpzVmFs
dWVSZXN1bHQoR1BSUmVnIHRhZywgR1BSUmVnIHBheWxvYWQsIE5vZGVJbmRleCBub2RlSW5kZXgs
IERhdGFGb3JtYXQgZm9ybWF0ID0gRGF0YUZvcm1hdEpTLCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9
IENhbGxVc2VDaGlsZHJlbikKLSAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5k
ZXgpOwotICAgICAgICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4pCi0gICAgICAgICAgICB1
c2VDaGlsZHJlbihub2RlKTsKLQotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgbV9ncHJzLnJldGFpbih0YWcs
IHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckpTKTsKLSAgICAgICAgbV9ncHJzLnJldGFpbihw
YXlsb2FkLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7Ci0gICAgICAgIEdlbmVyYXRp
b25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwotICAgICAg
ICBpbmZvLmluaXRKU1ZhbHVlKG5vZGVJbmRleCwgbm9kZS5yZWZDb3VudCgpLCB0YWcsIHBheWxv
YWQsIGZvcm1hdCk7Ci0gICAgfQotICAgIHZvaWQganNWYWx1ZVJlc3VsdChHUFJSZWcgdGFnLCBH
UFJSZWcgcGF5bG9hZCwgTm9kZUluZGV4IG5vZGVJbmRleCwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUp
Ci0gICAgewotICAgICAgICBqc1ZhbHVlUmVzdWx0KHRhZywgcGF5bG9hZCwgbm9kZUluZGV4LCBE
YXRhRm9ybWF0SlMsIG1vZGUpOwotICAgIH0KLSNlbmRpZgotICAgIHZvaWQgc3RvcmFnZVJlc3Vs
dChHUFJSZWcgcmVnLCBOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9
IENhbGxVc2VDaGlsZHJlbikKLSAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5k
ZXgpOwotICAgICAgICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4pCi0gICAgICAgICAgICB1
c2VDaGlsZHJlbihub2RlKTsKLSAgICAgICAgCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0
dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOwotICAgICAgICBtX2dwcnMucmV0
YWluKHJlZywgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3RvcmFnZSk7Ci0gICAgICAgIEdl
bmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwot
ICAgICAgICBpbmZvLmluaXRTdG9yYWdlKG5vZGVJbmRleCwgbm9kZS5yZWZDb3VudCgpLCByZWcp
OwotICAgIH0KLSAgICB2b2lkIGRvdWJsZVJlc3VsdChGUFJSZWcgcmVnLCBOb2RlSW5kZXggbm9k
ZUluZGV4LCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKLSAgICB7Ci0g
ICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAgICAgICBpZiAobW9kZSA9PSBD
YWxsVXNlQ2hpbGRyZW4pCi0gICAgICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKLQotICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIo
KTsKLSAgICAgICAgbV9mcHJzLnJldGFpbihyZWcsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRl
ckRvdWJsZSk7Ci0gICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5m
b1t2aXJ0dWFsUmVnaXN0ZXJdOwotICAgICAgICBpbmZvLmluaXREb3VibGUobm9kZUluZGV4LCBu
b2RlLnJlZkNvdW50KCksIHJlZyk7Ci0gICAgfQotICAgIHZvaWQgaW5pdENvbnN0YW50SW5mbyhO
b2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFu
dChub2RlSW5kZXgpIHx8IGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSB8fCBpc0pTQ29uc3Rh
bnQobm9kZUluZGV4KSk7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwotICAg
ICAgICBtX2dlbmVyYXRpb25JbmZvW25vZGUudmlydHVhbFJlZ2lzdGVyKCldLmluaXRDb25zdGFu
dChub2RlSW5kZXgsIG5vZGUucmVmQ291bnQoKSk7Ci0gICAgfQotCi0gICAgLy8gVGhlc2UgbWV0
aG9kcyB1c2VkIHRvIHNvcnQgYXJndW1lbnRzIGludG8gdGhlIGNvcnJlY3QgcmVnaXN0ZXJzLgot
ICAgIC8vIE9uIFg4NiB3ZSB1c2UgY2RlY2wgY2FsbGluZyBjb252ZW50aW9ucywgd2hpY2ggcGFz
cyBhbGwgYXJndW1lbnRzIG9uIHRoZQotICAgIC8vIHN0YWNrLiBPbiBvdGhlciBhcmNoaXRlY3R1
cmVzIHdlIG1heSBuZWVkIHRvIHNvcnQgdmFsdWVzIGludG8gdGhlCi0gICAgLy8gY29ycmVjdCBy
ZWdpc3RlcnMuCi0jaWYgIU5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMKLSAgICB1bnNpZ25l
ZCBtX2NhbGxBcmd1bWVudEluZGV4OwotICAgIHZvaWQgcmVzZXRDYWxsQXJndW1lbnRzKCkgeyBt
X2NhbGxBcmd1bWVudEluZGV4ID0gMDsgfQotCi0gICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgdXNp
bmcgaW50ZXJuYWxseSB0byBpbXBsZW1lbnQgdGhlIGNhbGxPcGVyYXRpb24gbWV0aG9kcy4KLSAg
ICB2b2lkIGFkZENhbGxBcmd1bWVudChHUFJSZWcgdmFsdWUpCi0gICAgewotICAgICAgICBtX2pp
dC5wb2tlKHZhbHVlLCBtX2NhbGxBcmd1bWVudEluZGV4KyspOwotICAgIH0KLSAgICB2b2lkIGFk
ZENhbGxBcmd1bWVudChUcnVzdGVkSW1tMzIgaW1tKQotICAgIHsKLSAgICAgICAgbV9qaXQucG9r
ZShpbW0sIG1fY2FsbEFyZ3VtZW50SW5kZXgrKyk7Ci0gICAgfQotICAgIHZvaWQgYWRkQ2FsbEFy
Z3VtZW50KFRydXN0ZWRJbW1QdHIgcG9pbnRlcikKLSAgICB7Ci0gICAgICAgIG1faml0LnBva2Uo
cG9pbnRlciwgbV9jYWxsQXJndW1lbnRJbmRleCsrKTsKLSAgICB9Ci0gICAgdm9pZCBhZGRDYWxs
QXJndW1lbnQoRlBSUmVnIHZhbHVlKQotICAgIHsKLSAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUo
dmFsdWUsIEpJVENvbXBpbGVyOjpBZGRyZXNzKEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdp
c3RlciwgbV9jYWxsQXJndW1lbnRJbmRleCAqIHNpemVvZih2b2lkKikpKTsKLSAgICAgICAgbV9j
YWxsQXJndW1lbnRJbmRleCArPSBzaXplb2YoZG91YmxlKSAvIHNpemVvZih2b2lkKik7Ci0gICAg
fQotCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzKEZQUlJlZyBhcmcxKQot
ICAgIHsKLSAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7Ci0gICAgICAgIGFkZENhbGxBcmd1
bWVudChhcmcxKTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVu
dHMoRlBSUmVnIGFyZzEsIEZQUlJlZyBhcmcyKQotICAgIHsKLSAgICAgICAgcmVzZXRDYWxsQXJn
dW1lbnRzKCk7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsKLSAgICAgICAgYWRkQ2Fs
bEFyZ3VtZW50KGFyZzIpOwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFy
Z3VtZW50c0V4ZWNTdGF0ZSgpCi0gICAgewotICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsK
LSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAg
ICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KEdQUlJlZyBhcmcxKQotICAgIHsKLSAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7Ci0gICAg
ICAgIGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAg
IGFkZENhbGxBcmd1bWVudChhcmcxKTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIgYXJnMSkKLSAgICB7Ci0g
ICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOwotICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7
Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCi0gICAgewotICAgICAgICByZXNldENhbGxB
cmd1bWVudHMoKTsKLSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKTsKLSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzEpOwotICAgICAgICBhZGRDYWxs
QXJndW1lbnQoYXJnMik7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgVHJ1c3RlZEltbVB0ciBhcmcyKQotICAg
IHsKLSAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVu
dChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChh
cmcxKTsKLSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzIpOwotICAgIH0KLQotICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFy
ZzEsIFRydXN0ZWRJbW0zMiBhcmcyKQotICAgIHsKLSAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRz
KCk7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7
Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsKLSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50
KGFyZzIpOwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0ciBhcmcxLCBUcnVzdGVkSW1tUHRyIGFyZzIpCi0gICAg
ewotICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKLSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFy
ZzEpOwotICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMik7Ci0gICAgfQotCi0gICAgQUxXQVlT
X0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIsIEdQUlJlZyBhcmczKQotICAgIHsKLSAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRz
KCk7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7
Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsKLSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50
KGFyZzIpOwotICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMyk7Ci0gICAgfQotCi0gICAgQUxX
QVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIsIFRydXN0ZWRJbW1QdHIgYXJnMykKLSAgICB7Ci0gICAgICAgIHJlc2V0Q2Fs
bEFyZ3VtZW50cygpOwotICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpOwotICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7Ci0gICAgICAgIGFkZENh
bGxBcmd1bWVudChhcmcyKTsKLSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMpOwotICAgIH0K
LQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BS
UmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMywgR1BSUmVnIGFyZzQpCi0gICAgewot
ICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKLSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzEp
OwotICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMik7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVu
dChhcmczKTsKLSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzQpOwotICAgIH0KLQotICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEs
IEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMywgVHJ1c3RlZEltbVB0ciBhcmc0KQotICAgIHsKLSAg
ICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsK
LSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzIpOwotICAgICAgICBhZGRDYWxsQXJndW1lbnQo
YXJnMyk7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc0KTsKLSAgICB9Ci0KLSAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBH
UFJSZWcgYXJnMiwgVHJ1c3RlZEltbTMyIGFyZzMsIFRydXN0ZWRJbW0zMiBhcmc0KQotICAgIHsK
LSAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcx
KTsKLSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzIpOwotICAgICAgICBhZGRDYWxsQXJndW1l
bnQoYXJnMyk7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc0KTsKLSAgICB9Ci0KLSAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0z
MiBhcmcxLCBUcnVzdGVkSW1tMzIgYXJnMiwgR1BSUmVnIGFyZzMsIEdQUlJlZyBhcmc0KQotICAg
IHsKLSAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVu
dChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChh
cmcxKTsKLSAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzIpOwotICAgICAgICBhZGRDYWxsQXJn
dW1lbnQoYXJnMyk7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc0KTsKLSAgICB9Ci0KLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMsIEdQUlJlZyBhcmc0LCBHUFJSZWcgYXJnNSkK
LSAgICB7Ci0gICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOwotICAgICAgICBhZGRDYWxsQXJn
dW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICBhZGRDYWxsQXJndW1l
bnQoYXJnMSk7Ci0gICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsKLSAgICAgICAgYWRkQ2Fs
bEFyZ3VtZW50KGFyZzMpOwotICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnNCk7Ci0gICAgICAg
IGFkZENhbGxBcmd1bWVudChhcmc1KTsKLSAgICB9Ci0jZW5kaWYgLy8gIU5VTUJFUl9PRl9BUkdV
TUVOVF9SRUdJU1RFUlMKLSAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBzdWl0YWJsZSBmb3IgYW55
IGNhbGxpbmcgY29udmVudGlvbiB0aGF0IHByb3ZpZGVzIGZvcgotICAgIC8vIGF0IGxlYXN0IDQg
YXJndW1lbnQgcmVnaXN0ZXJzLCBlLmcuIFg4Nl82NCwgQVJNdjcuCi0jaWYgTlVNQkVSX09GX0FS
R1VNRU5UX1JFR0lTVEVSUyA+PSA0Ci0gICAgdGVtcGxhdGU8R1BSUmVnIGRlc3RBLCBHUFJSZWcg
ZGVzdEI+Ci0gICAgdm9pZCBzZXR1cFR3b1N0dWJBcmdzKEdQUlJlZyBzcmNBLCBHUFJSZWcgc3Jj
QikKLSAgICB7Ci0gICAgICAgIC8vIEFzc3VtaW5nIHRoYXQgc3JjQSAhPSBzcmNCLCB0aGVyZSBh
cmUgNyBpbnRlcmVzdGluZyBzdGF0ZXMgdGhlIHJlZ2lzdGVycyBtYXkgYmUgaW46Ci0gICAgICAg
IC8vICgxKSBib3RoIGFyZSBhbHJlYWR5IGluIGFyZyByZWdzLCB0aGUgcmlnaHQgd2F5IGFyb3Vu
ZC4KLSAgICAgICAgLy8gKDIpIGJvdGggYXJlIGFscmVhZHkgaW4gYXJnIHJlZ3MsIHRoZSB3cm9u
ZyB3YXkgYXJvdW5kLgotICAgICAgICAvLyAoMykgbmVpdGhlciBhcmUgY3VycmVudGx5IGluIGFy
ZyByZWdpc3RlcnMuCi0gICAgICAgIC8vICg0KSBzcmNBIGluIGluIGl0cyBjb3JyZWN0IHJlZy4K
LSAgICAgICAgLy8gKDUpIHNyY0EgaW4gaW4gdGhlIGluY29ycmVjdCByZWcuCi0gICAgICAgIC8v
ICg2KSBzcmNCIGluIGluIGl0cyBjb3JyZWN0IHJlZy4KLSAgICAgICAgLy8gKDcpIHNyY0IgaW4g
aW4gdGhlIGluY29ycmVjdCByZWcuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoZSB0cml2aWFs
IGFwcHJvYWNoIGlzIHRvIHNpbXBseSBlbWl0IHR3byBtb3ZlcywgdG8gcHV0IHNyY0EgaW4gcGxh
Y2UgdGhlbiBzcmNCIGluCi0gICAgICAgIC8vIHBsYWNlICh0aGUgTWFjcm9Bc3NlbWJsZXIgd2ls
bCBvbWl0IHJlZHVuZGFudCBtb3ZlcykuIFRoaXMgYXBwb3JhY2ggd2lsbCBiZSBzYWZlIGluCi0g
ICAgICAgIC8vIGNhc2VzIDEsIDMsIDQsIDUsIDYsIGFuZCBpbiBjYXNlcyB3aGVyZSBzcmNBPT1z
cmNCLiBUaGUgdHdvIHByb2JsZW0gY2FzZXMgYXJlIDIKLSAgICAgICAgLy8gKHJlcXVpcmVzIGEg
c3dhcCkgYW5kIDcgKG11c3QgbW92ZSBzcmNCIGZpcnN0LCB0byBhdm9pZCB0cmFtcGxpbmcuKQot
Ci0gICAgICAgIGlmIChzcmNCICE9IGRlc3RBKSB7Ci0gICAgICAgICAgICAvLyBIYW5kbGUgdGhl
IGVhc3kgY2FzZXMgLSB0d28gc2ltcGxlIG1vdmVzLgotICAgICAgICAgICAgbV9qaXQubW92ZShz
cmNBLCBkZXN0QSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKHNyY0IsIGRlc3RCKTsKLSAgICAg
ICAgfSBlbHNlIGlmIChzcmNBICE9IGRlc3RCKSB7Ci0gICAgICAgICAgICAvLyBIYW5kbGUgdGhl
IG5vbi1zd2FwIGNhc2UgLSBqdXN0IHB1dCBzcmNCIGluIHBsYWNlIGZpcnN0LgotICAgICAgICAg
ICAgbV9qaXQubW92ZShzcmNCLCBkZXN0Qik7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKHNyY0Es
IGRlc3RBKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2ppdC5zd2FwKGRlc3RBLCBk
ZXN0Qik7Ci0gICAgfQotI2lmIENQVShYODZfNjQpCi0gICAgdGVtcGxhdGU8RlBSUmVnIGRlc3RB
LCBGUFJSZWcgZGVzdEI+Ci0gICAgdm9pZCBzZXR1cFR3b1N0dWJBcmdzKEZQUlJlZyBzcmNBLCBG
UFJSZWcgc3JjQikKLSAgICB7Ci0gICAgICAgIC8vIEFzc3VtaW5nIHRoYXQgc3JjQSAhPSBzcmNC
LCB0aGVyZSBhcmUgNyBpbnRlcmVzdGluZyBzdGF0ZXMgdGhlIHJlZ2lzdGVycyBtYXkgYmUgaW46
Ci0gICAgICAgIC8vICgxKSBib3RoIGFyZSBhbHJlYWR5IGluIGFyZyByZWdzLCB0aGUgcmlnaHQg
d2F5IGFyb3VuZC4KLSAgICAgICAgLy8gKDIpIGJvdGggYXJlIGFscmVhZHkgaW4gYXJnIHJlZ3Ms
IHRoZSB3cm9uZyB3YXkgYXJvdW5kLgotICAgICAgICAvLyAoMykgbmVpdGhlciBhcmUgY3VycmVu
dGx5IGluIGFyZyByZWdpc3RlcnMuCi0gICAgICAgIC8vICg0KSBzcmNBIGluIGluIGl0cyBjb3Jy
ZWN0IHJlZy4KLSAgICAgICAgLy8gKDUpIHNyY0EgaW4gaW4gdGhlIGluY29ycmVjdCByZWcuCi0g
ICAgICAgIC8vICg2KSBzcmNCIGluIGluIGl0cyBjb3JyZWN0IHJlZy4KLSAgICAgICAgLy8gKDcp
IHNyY0IgaW4gaW4gdGhlIGluY29ycmVjdCByZWcuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRo
ZSB0cml2aWFsIGFwcHJvYWNoIGlzIHRvIHNpbXBseSBlbWl0IHR3byBtb3ZlcywgdG8gcHV0IHNy
Y0EgaW4gcGxhY2UgdGhlbiBzcmNCIGluCi0gICAgICAgIC8vIHBsYWNlICh0aGUgTWFjcm9Bc3Nl
bWJsZXIgd2lsbCBvbWl0IHJlZHVuZGFudCBtb3ZlcykuIFRoaXMgYXBwb3JhY2ggd2lsbCBiZSBz
YWZlIGluCi0gICAgICAgIC8vIGNhc2VzIDEsIDMsIDQsIDUsIDYsIGFuZCBpbiBjYXNlcyB3aGVy
ZSBzcmNBPT1zcmNCLiBUaGUgdHdvIHByb2JsZW0gY2FzZXMgYXJlIDIKLSAgICAgICAgLy8gKHJl
cXVpcmVzIGEgc3dhcCkgYW5kIDcgKG11c3QgbW92ZSBzcmNCIGZpcnN0LCB0byBhdm9pZCB0cmFt
cGxpbmcuKQotCi0gICAgICAgIGlmIChzcmNCICE9IGRlc3RBKSB7Ci0gICAgICAgICAgICAvLyBI
YW5kbGUgdGhlIGVhc3kgY2FzZXMgLSB0d28gc2ltcGxlIG1vdmVzLgotICAgICAgICAgICAgbV9q
aXQubW92ZURvdWJsZShzcmNBLCBkZXN0QSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlRG91Ymxl
KHNyY0IsIGRlc3RCKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgaWYgKHNyY0EgIT0gZGVzdEIpIHsKLSAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUg
bm9uLXN3YXAgY2FzZSAtIGp1c3QgcHV0IHNyY0IgaW4gcGxhY2UgZmlyc3QuCi0gICAgICAgICAg
ICBtX2ppdC5tb3ZlRG91YmxlKHNyY0IsIGRlc3RCKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmVE
b3VibGUoc3JjQSwgZGVzdEEpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgQVNTRVJUKHNyY0IgPT0gZGVzdEEgJiYgc3JjQSA9PSBkZXN0Qik7Ci0gICAgICAgIC8v
IE5lZWQgdG8gc3dhcDsgcGljayBhIHRlbXBvcmFyeSByZWdpc3Rlci4KLSAgICAgICAgRlBSUmVn
IHRlbXA7Ci0gICAgICAgIGlmIChkZXN0QSAhPSBGUFJJbmZvOjphcmd1bWVudEZQUjMgJiYgZGVz
dEEgIT0gRlBSSW5mbzo6YXJndW1lbnRGUFIzKQotICAgICAgICAgICAgdGVtcCA9IEZQUkluZm86
OmFyZ3VtZW50RlBSMzsKLSAgICAgICAgZWxzZSBpZiAoZGVzdEEgIT0gRlBSSW5mbzo6YXJndW1l
bnRGUFIyICYmIGRlc3RBICE9IEZQUkluZm86OmFyZ3VtZW50RlBSMikKLSAgICAgICAgICAgIHRl
bXAgPSBGUFJJbmZvOjphcmd1bWVudEZQUjI7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
QVNTRVJUKGRlc3RBICE9IEZQUkluZm86OmFyZ3VtZW50RlBSMSAmJiBkZXN0QSAhPSBGUFJJbmZv
Ojphcmd1bWVudEZQUjEpOwotICAgICAgICAgICAgdGVtcCA9IEZQUkluZm86OmFyZ3VtZW50RlBS
MTsKLSAgICAgICAgfQotICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKGRlc3RBLCB0ZW1wKTsKLSAg
ICAgICAgbV9qaXQubW92ZURvdWJsZShkZXN0QiwgZGVzdEEpOwotICAgICAgICBtX2ppdC5tb3Zl
RG91YmxlKHRlbXAsIGRlc3RCKTsKLSAgICB9Ci0jZW5kaWYKLSAgICB2b2lkIHNldHVwU3R1YkFy
Z3VtZW50cyhHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCi0gICAgewotICAgICAgICBzZXR1cFR3
b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyPihh
cmcxLCBhcmcyKTsKLSAgICB9Ci0gICAgdm9pZCBzZXR1cFN0dWJBcmd1bWVudHMoR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKLSAgICB7Ci0gICAgICAgIC8vIElmIG5laXRo
ZXIgb2YgYXJnMi9hcmczIGFyZSBpbiBvdXIgd2F5LCB0aGVuIHdlIGNhbiBtb3ZlIGFyZzEgaW50
byBwbGFjZS4KLSAgICAgICAgLy8gVGhlbiB3ZSBjYW4gdXNlIHNldHVwVHdvU3R1YkFyZ3MgdG8g
Zml4IGFyZzIvYXJnMy4KLSAgICAgICAgaWYgKGFyZzIgIT0gR1BSSW5mbzo6YXJndW1lbnRHUFIx
ICYmIGFyZzMgIT0gR1BSSW5mbzo6YXJndW1lbnRHUFIxKSB7Ci0gICAgICAgICAgICBtX2ppdC5t
b3ZlKGFyZzEsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgICAgICAgICBzZXR1cFR3b1N0
dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIzPihhcmcy
LCBhcmczKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElm
IG5laXRoZXIgb2YgYXJnMS9hcmczIGFyZSBpbiBvdXIgd2F5LCB0aGVuIHdlIGNhbiBtb3ZlIGFy
ZzIgaW50byBwbGFjZS4KLSAgICAgICAgLy8gVGhlbiB3ZSBjYW4gdXNlIHNldHVwVHdvU3R1YkFy
Z3MgdG8gZml4IGFyZzEvYXJnMy4KLSAgICAgICAgaWYgKGFyZzEgIT0gR1BSSW5mbzo6YXJndW1l
bnRHUFIyICYmIGFyZzMgIT0gR1BSSW5mbzo6YXJndW1lbnRHUFIyKSB7Ci0gICAgICAgICAgICBt
X2ppdC5tb3ZlKGFyZzIsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgICAgICAgICBzZXR1
cFR3b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIz
PihhcmcxLCBhcmczKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIElmIG5laXRoZXIgb2YgYXJnMS9hcmcyIGFyZSBpbiBvdXIgd2F5LCB0aGVuIHdlIGNhbiBt
b3ZlIGFyZzMgaW50byBwbGFjZS4KLSAgICAgICAgLy8gVGhlbiB3ZSBjYW4gdXNlIHNldHVwVHdv
U3R1YkFyZ3MgdG8gZml4IGFyZzEvYXJnMi4KLSAgICAgICAgaWYgKGFyZzEgIT0gR1BSSW5mbzo6
YXJndW1lbnRHUFIzICYmIGFyZzIgIT0gR1BSSW5mbzo6YXJndW1lbnRHUFIzKSB7Ci0gICAgICAg
ICAgICBtX2ppdC5tb3ZlKGFyZzMsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7Ci0gICAgICAgICAg
ICBzZXR1cFR3b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIyPihhcmcxLCBhcmcyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIElmIHdlIGdldCBoZXJlLCB3ZSBoYXZlbid0IGJlZW4gYWJsZSB0byBtb3ZlIGFu
eSBvZiBhcmcxL2FyZzIvYXJnMy4KLSAgICAgICAgLy8gU2luY2UgYWxsIHRocmVlIGFyZSBibG9j
a2VkLCB0aGVuIGFsbCB0aHJlZSBtdXN0IGFscmVhZHkgYmUgaW4gdGhlIGFyZ3VtZW50IHJlZ2lz
dGVyLgotICAgICAgICAvLyBCdXQgYXJlIHRoZXkgaW4gdGhlIHJpZ2h0IG9uZXM/Ci0KLSAgICAg
ICAgLy8gRmlyc3QsIGVuc3VyZSBhcmcxIGlzIGluIHBsYWNlLgotICAgICAgICBpZiAoYXJnMSAh
PSBHUFJJbmZvOjphcmd1bWVudEdQUjEpIHsKLSAgICAgICAgICAgIG1faml0LnN3YXAoYXJnMSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLQotICAgICAgICAgICAgLy8gSWYgYXJnMSB3YXNuJ3Qg
aW4gYXJndW1lbnRHUFIxLCBvbmUgb2YgYXJnMi9hcmczIG11c3QgYmUuCi0gICAgICAgICAgICBB
U1NFUlQoYXJnMiA9PSBHUFJJbmZvOjphcmd1bWVudEdQUjEgfHwgYXJnMyA9PSBHUFJJbmZvOjph
cmd1bWVudEdQUjEpOwotICAgICAgICAgICAgLy8gSWYgYXJnMiB3YXMgaW4gYXJndW1lbnRHUFIx
IGl0IG5vIGxvbmdlciBpcyAoZHVlIHRvIHRoZSBzd2FwKS4KLSAgICAgICAgICAgIC8vIE90aGVy
d2lzZSBhcmczIG11c3QgaGF2ZSBiZWVuLiBNYXJrIGhpbSBhcyBtb3ZlZC4KLSAgICAgICAgICAg
IGlmIChhcmcyID09IEdQUkluZm86OmFyZ3VtZW50R1BSMSkKLSAgICAgICAgICAgICAgICBhcmcy
ID0gYXJnMTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhcmczID0gYXJnMTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIEVpdGhlciBhcmcyICYgYXJnMyBuZWVkIHN3YXBwaW5n
LCBvciB3ZSdyZSBhbGwgZG9uZS4KLSAgICAgICAgQVNTRVJUKChhcmcyID09IEdQUkluZm86OmFy
Z3VtZW50R1BSMiB8fCBhcmczID09IEdQUkluZm86OmFyZ3VtZW50R1BSMykKLSAgICAgICAgICAg
IHx8IChhcmcyID09IEdQUkluZm86OmFyZ3VtZW50R1BSMyB8fCBhcmczID09IEdQUkluZm86OmFy
Z3VtZW50R1BSMikpOwotCi0gICAgICAgIGlmIChhcmcyICE9IEdQUkluZm86OmFyZ3VtZW50R1BS
MikKLSAgICAgICAgICAgIG1faml0LnN3YXAoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjMpOwotICAgIH0KLQotI2lmIENQVShYODZfNjQpCi0gICAgQUxXQVlTX0lO
TElORSB2b2lkIHNldHVwQXJndW1lbnRzKEZQUlJlZyBhcmcxKQotICAgIHsKLSAgICAgICAgbV9q
aXQubW92ZURvdWJsZShhcmcxLCBGUFJJbmZvOjphcmd1bWVudEZQUjApOwotICAgIH0KLQotICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50cyhGUFJSZWcgYXJnMSwgRlBSUmVnIGFy
ZzIpCi0gICAgewotICAgICAgICBzZXR1cFR3b1N0dWJBcmdzPEZQUkluZm86OmFyZ3VtZW50RlBS
MCwgRlBSSW5mbzo6YXJndW1lbnRGUFIxPihhcmcxLCBhcmcyKTsKLSAgICB9Ci0jZWxzZQotICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50cyhGUFJSZWcgYXJnMSkKLSAgICB7Ci0g
ICAgICAgIG1faml0LmFzc2VtYmxlcigpLnZtb3YoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEsIGFyZzEpOwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBzZXR1cEFyZ3VtZW50cyhGUFJSZWcgYXJnMSwgRlBSUmVnIGFyZzIpCi0gICAgewotICAgICAg
ICBtX2ppdC5hc3NlbWJsZXIoKS52bW92KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6
YXJndW1lbnRHUFIxLCBhcmcxKTsKLSAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkudm1vdihHUFJJ
bmZvOjphcmd1bWVudEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BSMywgYXJnMik7Ci0gICAgfQot
I2VuZGlmCi0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUo
KQotICAgIHsKLSAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxKQotICAgIHsKLSAgICAgICAg
bV9qaXQubW92ZShhcmcxLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgICAgICBtX2ppdC5t
b3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwot
ICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoVHJ1c3RlZEltbVB0ciBhcmcxKQotICAgIHsKLSAgICAgICAgbV9qaXQubW92ZShhcmcxLCBH
UFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIH0KLQotICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQ
UlJlZyBhcmcyKQotICAgIHsKLSAgICAgICAgc2V0dXBTdHViQXJndW1lbnRzKGFyZzEsIGFyZzIp
OwotICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIFRydXN0ZWRJbW1QdHIgYXJnMikKLSAg
ICB7Ci0gICAgICAgIG1faml0Lm1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAg
ICAgICAgbV9qaXQubW92ZShhcmcyLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOwotICAgICAgICBt
X2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoVHJ1c3RlZEltbVB0ciBhcmcxLCBHUFJSZWcgYXJnMikKLSAgICB7Ci0gICAgICAg
IG1faml0Lm1vdmUoYXJnMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsgLy8gTW92ZSB0aGlzIGZp
cnN0LCBzbyBzZXR0aW5nIGFyZzEgZG9lcyBub3QgdHJhbXBsZSEKLSAgICAgICAgbV9qaXQubW92
ZShhcmcxLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgICAgICBtX2ppdC5tb3ZlKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIH0KLQot
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3Rl
ZEltbTMyIGFyZzEsIFRydXN0ZWRJbW0zMiBhcmcyKQotICAgIHsKLSAgICAgICAgbV9qaXQubW92
ZShhcmcxLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgICAgICBtX2ppdC5tb3ZlKGFyZzIs
IEdQUkluZm86OmFyZ3VtZW50R1BSMik7Ci0gICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgfQotCi0gICAgQUxX
QVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRy
IGFyZzEsIFRydXN0ZWRJbW1QdHIgYXJnMikKLSAgICB7Ci0gICAgICAgIG1faml0Lm1vdmUoYXJn
MSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICAgICAgbV9qaXQubW92ZShhcmcyLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjIpOwotICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIH0KLQotICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyLCBHUFJSZWcgYXJnMykKLSAgICB7Ci0gICAgICAgIHNldHVwU3R1YkFyZ3VtZW50cyhh
cmcxLCBhcmcyLCBhcmczKTsKLSAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMiwgVHJ1c3RlZEltbTMyIGFyZzMpCi0gICAgewotICAgICAgICBzZXR1cFN0dWJBcmd1bWVu
dHMoYXJnMSwgYXJnMik7Ci0gICAgICAgIG1faml0Lm1vdmUoYXJnMywgR1BSSW5mbzo6YXJndW1l
bnRHUFIzKTsKLSAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1
c3RlZEltbVB0ciBhcmczKQotICAgIHsKLSAgICAgICAgc2V0dXBTdHViQXJndW1lbnRzKGFyZzEs
IGFyZzIpOwotICAgICAgICBtX2ppdC5tb3ZlKGFyZzMsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7
Ci0gICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tMzIgYXJnMSwgVHJ1c3RlZEltbTMyIGFyZzIs
IEdQUlJlZyBhcmczKQotICAgIHsKLSAgICAgICAgbV9qaXQubW92ZShhcmcxLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpOwotICAgICAgICBtX2ppdC5tb3ZlKGFyZzIsIEdQUkluZm86OmFyZ3VtZW50
R1BSMik7Ci0gICAgICAgIG1faml0Lm1vdmUoYXJnMywgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsK
LSAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKLSAgICB9Ci0KLSNlbmRpZiAvLyBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVH
SVNURVJTID49IDQKLSAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBzdWl0YWJsZSBmb3IgYW55IGNh
bGxpbmcgY29udmVudGlvbiB0aGF0IHByb3ZpZGVzIGZvcgotICAgIC8vIGV4YWN0bHkgNCBhcmd1
bWVudCByZWdpc3RlcnMsIGUuZy4gQVJNdjcuCi0jaWYgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lT
VEVSUyA9PSA0Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczLCBHUFJSZWcgYXJnNCkK
LSAgICB7Ci0gICAgICAgIG1faml0LnBva2UoYXJnNCk7Ci0gICAgICAgIHNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMiwgVHJ1c3RlZEltbTMyIGFyZzMsIFRydXN0ZWRJbW0zMiBhcmc0KQotICAgIHsKLSAgICAg
ICAgbV9qaXQucG9rZShhcmc0KTsKLSAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGFyZzEsIGFyZzIsIGFyZzMpOwotICAgIH0KLQotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFyZzEsIFRydXN0ZWRJbW0zMiBh
cmcyLCBHUFJSZWcgYXJnMywgR1BSUmVnIGFyZzQpCi0gICAgewotICAgICAgICBtX2ppdC5wb2tl
KGFyZzQpOwotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwg
YXJnMyk7Ci0gICAgfQotCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczLCBUcnVzdGVk
SW1tUHRyIGFyZzQpCi0gICAgewotICAgICAgICBtX2ppdC5wb2tlKGFyZzQpOwotICAgICAgICBz
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7Ci0gICAgfQotCi0g
ICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczLCBHUFJSZWcgYXJnNCwgR1BSUmVnIGFyZzUp
Ci0gICAgewotICAgICAgICBtX2ppdC5wb2tlKGFyZzUsIDEpOwotICAgICAgICBtX2ppdC5wb2tl
KGFyZzQpOwotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwg
YXJnMyk7Ci0gICAgfQotI2VuZGlmIC8vIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgPT0g
NAotCi0gICAgLy8gVGhlc2UgbWV0aG9kcyBhZGQgY2FsbHMgdG8gQysrIGhlbHBlciBmdW5jdGlv
bnMuCi0gICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgYnJvYWRseSB2YWx1ZSByZXByZXNlbnRhdGlv
biBzcGVjaWZpYyAoaS5lLgotICAgIC8vIGRlYWwgd2l0aCB0aGUgZmFjdCB0aGF0IGEgSlNWYWx1
ZSBtYXkgYmUgcGFzc2VkIGluIG9uZSBvciB0d28KLSAgICAvLyBtYWNoaW5lIHJlZ2lzdGVycywg
YW5kIGRlbGVnYXRlIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gc3BlY2lmaWMKLSAgICAvLyBkZWNp
c2lvbiBhcyB0byBob3cgdG8gZmlsbCB0aGUgcmVnc2l0ZXJzIHRvIHNldHVwQXJndW1lbnRzKiBt
ZXRob2RzLgotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIHZvaWQq
IHBvaW50ZXIpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1
c3RlZEltbVB0cihwb2ludGVyKSk7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKLSAgICB9Ci0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihaX0RGR09wZXJhdGlvbl9EIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgRlBSUmVnIGFyZzEpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50cyhh
cmcxKTsKLSAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IG1faml0LmFwcGVuZENhbGwo
b3BlcmF0aW9uKTsKLSAgICAgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsIHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBjYWxsOwotICAgIH0KLSAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VHSSBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBJZGVudGlmaWVyKiBpZGVudGlmaWVyKQot
ICAgIHsKLSAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJ
bW1QdHIoaWRlbnRpZmllcikpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7Ci0gICAgfQotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUkgb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBJZGVudGlmaWVyKiBpZGVudGlmaWVyKQotICAgIHsKLSAgICAgICAgc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllcikpOwotICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9E
RkdPcGVyYXRpb25fRUEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKLSAg
ICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKLSAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZH
T3BlcmF0aW9uX0VQUyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIHZvaWQqIHBvaW50ZXIsIHNp
emVfdCBzaXplKQotICAgIHsKLSAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRy
dXN0ZWRJbW1QdHIocG9pbnRlciksIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwotICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dCk7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRVNTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgaW50IHN0YXJ0Q29uc3RhbnQsIGlu
dCBudW1Db25zdGFudHMpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoSW1tMzIoc3RhcnRDb25zdGFudCksIEltbTMyKG51bUNvbnN0YW50cykpOwotICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdP
cGVyYXRpb25fRVBQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIHZvaWQq
IHBvaW50ZXIpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSwgVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKLSAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0kgb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgSWRlbnRpZmllciogaWRlbnRpZmllcikK
LSAgICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVk
SW1tUHRyKGlkZW50aWZpZXIpKTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwotICAgIH0KLSAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKQSBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKLSAgICB7Ci0gICAgICAgIHNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKLSAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwot
ICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9u
X0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCi0gICAgewotICAgICAg
ICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7Ci0gICAgICAgIHJldHVybiBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKLSAg
ICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9F
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRz
RXhlY1N0YXRlKCk7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKLSAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIEdQUlJlZyBhcmcxKQotICAgIHsKLSAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZzEpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1Nl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oQ19ERkdPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgR1BSUmVnIGFyZzEsIEpTQ2VsbCogY2VsbCkKLSAgICB7Ci0gICAgICAgIHNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGNlbGwpKTsKLSAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZHT3Bl
cmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCi0gICAgewot
ICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7Ci0gICAgICAgIHJldHVy
biBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
KTsKLSAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0RGR09wZXJh
dGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFy
ZzIpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJn
Mik7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKLSAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FUFAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzIpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgYXJnMik7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKLSAgICB9Ci0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyIGltbSkKLSAg
ICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBNYWNyb0Fzc2Vt
Ymxlcjo6SW1tUHRyKHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPihKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIoaW1tLm1fdmFsdWUpKSkpKTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwotICAgIH0KLSAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMiBpbW0sIEdQUlJlZyBhcmcyKQot
ICAgIHsKLSAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKE1hY3JvQXNzZW1ibGVy
OjpJbW1QdHIoc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihpbW0ubV92YWx1ZSkpKSksIGFyZzIpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7Ci0gICAgfQotICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUNKIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQotICAgIHsKLSAgICAg
ICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwotICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dCk7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVy
YXRpb25fRUpQUCBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgdm9pZCogcG9p
bnRlcikKLSAgICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBh
cmcyLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKLSAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FSkNJIG9wZXJhdGlvbiwgR1BSUmVnIGFy
ZzEsIEdQUlJlZyBhcmcyLCBJZGVudGlmaWVyKiBpZGVudGlmaWVyKQotICAgIHsKLSAgICAgICAg
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIFRydXN0ZWRJbW1QdHIoaWRl
bnRpZmllcikpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhv
cGVyYXRpb24pOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZf
REZHT3BlcmF0aW9uX0VKSkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQ
UlJlZyBhcmczKQotICAgIHsKLSAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIGFyZzIsIGFyZzMpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhvcGVyYXRpb24pOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFZfREZHT3BlcmF0aW9uX0VQWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFy
ZzIsIEdQUlJlZyBhcmczKQotICAgIHsKLSAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhvcGVyYXRpb24pOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VBWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIsIEdQUlJlZyBhcmczKQotICAgIHsKLSAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDSkogb3BlcmF0aW9uLCBHUFJSZWcgYXJn
MSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQotICAgIHsKLSAgICAgICAgc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOwotICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwotICAgIH0KLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKERfREZHT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgRlBSUmVn
IHJlc3VsdCwgR1BSUmVnIGFyZzEpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSk7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKLSAgICB9Ci0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihEX0RGR09wZXJhdGlvbl9ERCBvcGVyYXRpb24sIEZQUlJlZyBy
ZXN1bHQsIEZQUlJlZyBhcmcxLCBGUFJSZWcgYXJnMikKLSAgICB7Ci0gICAgICAgIHNldHVwQXJn
dW1lbnRzKGFyZzEsIGFyZzIpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7Ci0gICAgfQotI2Vsc2UKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFpfREZHT3BlcmF0aW9uX0Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBG
UFJSZWcgYXJnMSkKLSAgICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzKGFyZzEpOwotICAgICAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gbV9qaXQuYXBwZW5kQ2FsbChvcGVyYXRpb24pOwot
ICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
cmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIGNhbGw7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVAgb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgdm9pZCogcG9pbnRlcikKLSAgICB7Ci0gICAg
ICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsK
LSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwotICAgIH0KLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQUCBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgdm9pZCogcG9p
bnRlcikKLSAgICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBU
cnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcp
OwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0
aW9uX0VHSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2Fk
LCBHUFJSZWcgYXJnMSwgSWRlbnRpZmllciogaWRlbnRpZmllcikKLSAgICB7Ci0gICAgICAgIHNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGlkZW50aWZpZXIp
KTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQo
b3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwotICAgIH0KLSAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxKQotICAgIHsK
LSAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwotICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dFBheWxvYWQsIHJlc3VsdFRhZyk7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBH
UFJSZWcgcmVzdWx0UGF5bG9hZCwgSWRlbnRpZmllciogaWRlbnRpZmllcikKLSAgICB7Ci0gICAg
ICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGlkZW50aWZpZXIp
KTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQo
b3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwotICAgIH0KLSAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VBIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxKQotICAgIHsK
LSAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwotICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dFBheWxvYWQsIHJlc3VsdFRhZyk7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxP
cGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywg
R1BSUmVnIHJlc3VsdFBheWxvYWQsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQotICAgIHsK
LSAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIocG9pbnRl
ciksIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRh
Zyk7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRVNTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxv
YWQsIGludCBzdGFydENvbnN0YW50LCBpbnQgbnVtQ29uc3RhbnRzKQotICAgIHsKLSAgICAgICAg
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihzdGFydENvbnN0YW50KSwg
VHJ1c3RlZEltbTMyKG51bUNvbnN0YW50cykpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3Vs
dFRhZyk7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdP
cGVyYXRpb25fRUpQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBh
eWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIHZvaWQqIHBvaW50ZXIp
Ci0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMVBheWxvYWQs
IGFyZzFUYWcsIEltbVB0cihwb2ludGVyKSk7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0
VGFnKTsKLSAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09w
ZXJhdGlvbl9FSlAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5
bG9hZCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIpCi0g
ICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMVBheWxvYWQsIGFy
ZzFUYWcsIGFyZzIpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7Ci0gICAgfQot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUNJIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBh
cmcxLCBJZGVudGlmaWVyKiBpZGVudGlmaWVyKQotICAgIHsKLSAgICAgICAgc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllcikpOwotICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBh
eWxvYWQsIEdQUlJlZyBhcmcyKQotICAgIHsKLSAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBhcmcyKTsKLSAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2Fk
LCByZXN1bHRUYWcpOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KEpfREZHT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJl
c3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCi0gICAgewot
ICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMVBheWxvYWQsIGFyZzFUYWcp
OwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7Ci0gICAgfQotICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdPcGVyYXRpb25fRSBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwotICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Q19ERkdPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkK
LSAgICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKLSAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9u
LCByZXN1bHQpOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENf
REZHT3BlcmF0aW9uX0VDQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBK
U0NlbGwqIGNlbGwpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSwgVHJ1c3RlZEltbVB0cihjZWxsKSk7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKLSAgICB9Ci0gICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCi0g
ICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMVBheWxvYWQsIGFy
ZzFUYWcpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oU19ERkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzJUYWcsIEdQUlJl
ZyBhcmcyUGF5bG9hZCkKLSAgICB7Ci0gICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxUGF5bG9hZCwgYXJnMVRhZywgYXJnMlBheWxvYWQsIGFyZzJUYWcpOwotICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdP
cGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBh
eWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyVGFn
LCBHUFJSZWcgYXJnMlBheWxvYWQpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMVBheWxvYWQsIGFyZzFUYWcsIGFyZzJQYXlsb2FkLCBhcmcyVGFnKTsKLSAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFy
ZzFQYXlsb2FkLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIgaW1tKQotICAgIHsKLSAgICAgICAgc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBpbW0sIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3Vs
dFRhZyk7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdP
cGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBh
eWxvYWQsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMiBpbW0sIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcg
YXJnMlBheWxvYWQpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
aW1tLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBhcmcyUGF5bG9hZCwgYXJnMlRh
Zyk7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKLSAgICB9Ci0gICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMlBheWxvYWQsIGFyZzJUYWcpOwotICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpQUCBvcGVyYXRpb24sIEdQUlJlZyBhcmcxVGFn
LCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyLCB2b2lkKiBwb2ludGVyKQotICAgIHsK
LSAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzFQYXlsb2FkLCBhcmcxVGFn
LCBhcmcyLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKLSAgICB9Ci0gICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FSkNJIG9wZXJhdGlvbiwgR1BSUmVn
IGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIsIElkZW50aWZpZXIqIGlk
ZW50aWZpZXIpCi0gICAgewotICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MVBheWxvYWQsIGFyZzFUYWcsIGFyZzIsIFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllcikpOwotICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwotICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VD
Skogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5
bG9hZCwgR1BSUmVnIGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKLSAgICB7Ci0gICAgICAg
IHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyUGF5bG9hZCwgYXJnMlRhZywg
YXJnM1BheWxvYWQsIGFyZzNUYWcpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhvcGVyYXRpb24pOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VQWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQpCi0gICAgewotICAg
ICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnM1BheWxvYWQs
IGFyZzNUYWcpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhv
cGVyYXRpb24pOwotICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZf
REZHT3BlcmF0aW9uX0VBWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQ
UlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQpCi0gICAgewotICAgICAgICBzZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnM1BheWxvYWQsIGFyZzNUYWcpOwot
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwot
ICAgIH0KLQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRF9ERkdPcGVyYXRp
b25fRUogb3BlcmF0aW9uLCBGUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFy
ZzFQYXlsb2FkKQotICAgIHsKLSAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzFQYXlsb2FkLCBhcmcxVGFnKTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwotICAgIH0KLQotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRF9ERkdPcGVyYXRpb25fREQgb3BlcmF0aW9uLCBG
UFJSZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSwgRlBSUmVnIGFyZzIpCi0gICAgewotICAgICAgICBz
ZXR1cEFyZ3VtZW50cyhhcmcxLCBhcmcyKTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRS
ZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwotICAgIH0KLSNlbmRpZgotCi0gICAgLy8gVGhlc2Ug
bWV0aG9kcyBhZGQgY2FsbCBpbnN0cnVjdGlvbnMsIHdpdGggb3B0aW9uYWwgZXhjZXB0aW9uIGNo
ZWNrcyAmIHNldHRpbmcgcmVzdWx0cy4KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2ppdC5hZGRFeGNlcHRpb25DaGVjayhtX2ppdC5hcHBlbmRDYWxsKGZ1
bmN0aW9uKSwgYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pOwotICAgIH0KLSAgICBKSVRD
b21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KGNvbnN0
IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0
aW9uKTsKLSAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0
KTsKLSAgICAgICAgcmV0dXJuIGNhbGw7Ci0gICAgfQotICAgIHZvaWQgc2V0dXBSZXN1bHRzKEdQ
UlJlZyBkZXN0QSwgR1BSUmVnIGRlc3RCKQotICAgIHsKLSAgICAgICAgR1BSUmVnIHNyY0EgPSBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjsKLSAgICAgICAgR1BSUmVnIHNyY0IgPSBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUjI7Ci0KLSAgICAgICAgaWYgKHNyY0IgIT0gZGVzdEEpIHsKLSAgICAgICAg
ICAgIC8vIEhhbmRsZSB0aGUgZWFzeSBjYXNlcyAtIHR3byBzaW1wbGUgbW92ZXMuCi0gICAgICAg
ICAgICBtX2ppdC5tb3ZlKHNyY0EsIGRlc3RBKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoc3Jj
QiwgZGVzdEIpOwotICAgICAgICB9IGVsc2UgaWYgKHNyY0EgIT0gZGVzdEIpIHsKLSAgICAgICAg
ICAgIC8vIEhhbmRsZSB0aGUgbm9uLXN3YXAgY2FzZSAtIGp1c3QgcHV0IHNyY0IgaW4gcGxhY2Ug
Zmlyc3QuCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKHNyY0IsIGRlc3RCKTsKLSAgICAgICAgICAg
IG1faml0Lm1vdmUoc3JjQSwgZGVzdEEpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1f
aml0LnN3YXAoZGVzdEEsIGRlc3RCKTsKLSAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciYgZnVu
Y3Rpb24sIEdQUlJlZyByZXN1bHQxLCBHUFJSZWcgcmVzdWx0MikKLSAgICB7Ci0gICAgICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0
aW9uKTsKLSAgICAgICAgc2V0dXBSZXN1bHRzKHJlc3VsdDEsIHJlc3VsdDIpOwotICAgICAgICBy
ZXR1cm4gY2FsbDsKLSAgICB9Ci0jaWYgQ1BVKFg4NikKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyJiBm
dW5jdGlvbiwgRlBSUmVnIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKLSAgICAgICAg
bV9qaXQuYXNzZW1ibGVyKCkuZnN0cGwoMCwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKLSAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIsIHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBjYWxsOwotICAgIH0KLSAgICBKSVRD
b21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5j
dGlvbiwgRlBSUmVnIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGwgPSBtX2ppdC5hcHBlbmRDYWxsKGZ1bmN0aW9uKTsKLSAgICAgICAgbV9qaXQuYXNzZW1ibGVy
KCkuZnN0cGwoMCwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAg
bV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlc3Vs
dCk7Ci0gICAgICAgIHJldHVybiBjYWxsOwotICAgIH0KLSNlbGlmIENQVShBUk0pCi0gICAgSklU
Q29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChjb25z
dCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIEZQUlJlZyByZXN1bHQpCi0gICAgewotICAgICAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5j
dGlvbik7Ci0gICAgICAgIG1faml0LmFzc2VtYmxlcigpLnZtb3YocmVzdWx0LCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKLSAgICAgICAgcmV0dXJu
IGNhbGw7Ci0gICAgfQotICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQo
Y29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uLCBGUFJSZWcgcmVzdWx0KQotICAgIHsKLSAgICAg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IG1faml0LmFwcGVuZENhbGwoZnVuY3Rpb24pOwot
ICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS52bW92KHJlc3VsdCwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAgICAgIHJldHVybiBjYWxsOwot
ICAgIH0KLSNlbHNlCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIEZQUlJlZyByZXN1
bHQpCi0gICAgewotICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7Ci0gICAgICAgIG1faml0Lm1vdmVEb3VibGUoRlBS
SW5mbzo6cmV0dXJuVmFsdWVGUFIsIHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBjYWxsOwotICAg
IH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0
aW9uUHRyJiBmdW5jdGlvbiwgRlBSUmVnIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5hcHBlbmRDYWxsKGZ1bmN0aW9uKTsKLSAgICAgICAgbV9q
aXQubW92ZURvdWJsZShGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgcmVzdWx0KTsKLSAgICAgICAg
cmV0dXJuIGNhbGw7Ci0gICAgfQotI2VuZGlmCi0KLSAgICB2b2lkIGFkZEJyYW5jaChjb25zdCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCYganVtcCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKLSAgICB7
Ci0gICAgICAgIG1fYnJhbmNoZXMuYXBwZW5kKEJyYW5jaFJlY29yZChqdW1wLCBkZXN0aW5hdGlv
bikpOwotICAgIH0KLQotICAgIHZvaWQgbGlua0JyYW5jaGVzKCkKLSAgICB7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9icmFuY2hlcy5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgQnJhbmNoUmVjb3JkJiBicmFuY2ggPSBtX2JyYW5jaGVzW2ldOwotICAgICAgICAgICAgYnJh
bmNoLmp1bXAubGlua1RvKG1fYmxvY2tIZWFkc1ticmFuY2guZGVzdGluYXRpb25dLCAmbV9qaXQp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQmFzaWNCbG9jayogYmxvY2soKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10uZ2V0KCk7Ci0gICAg
fQotCi0jaWZuZGVmIE5ERUJVRwotICAgIHZvaWQgZHVtcChjb25zdCBjaGFyKiBsYWJlbCA9IDAp
OwotI2VuZGlmCi0KLSNpZiBERkdfRU5BQkxFKENPTlNJU1RFTkNZX0NIRUNLKQotICAgIHZvaWQg
Y2hlY2tDb25zaXN0ZW5jeSgpOwotI2Vsc2UKLSAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKSB7
fQotI2VuZGlmCi0KLSAgICAvLyBUaGUgSklULCB3aGlsZSBhbHNvIHByb3ZpZGVzIE1hY3JvQXNz
ZW1ibGVyIGZ1bmN0aW9uYWxpdHkuCi0gICAgSklUQ29tcGlsZXImIG1faml0OwotICAgIC8vIFRo
ZSBjdXJyZW50IG5vZGUgYmVpbmcgZ2VuZXJhdGVkLgotICAgIEJsb2NrSW5kZXggbV9ibG9jazsK
LSAgICBOb2RlSW5kZXggbV9jb21waWxlSW5kZXg7Ci0gICAgLy8gVmlydHVhbCBhbmQgcGh5c2lj
YWwgcmVnaXN0ZXIgbWFwcy4KLSAgICBWZWN0b3I8R2VuZXJhdGlvbkluZm8sIDMyPiBtX2dlbmVy
YXRpb25JbmZvOwotICAgIFJlZ2lzdGVyQmFuazxHUFJJbmZvPiBtX2dwcnM7Ci0gICAgUmVnaXN0
ZXJCYW5rPEZQUkluZm8+IG1fZnByczsKLQotICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWw+IG1fYmxvY2tIZWFkczsKLSAgICBzdHJ1Y3QgQnJhbmNoUmVjb3JkIHsKLSAgICAgICAgQnJh
bmNoUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXAsIEJsb2NrSW5kZXggZGVzdGluYXRp
b24pCi0gICAgICAgICAgICA6IGp1bXAoanVtcCkKLSAgICAgICAgICAgICwgZGVzdGluYXRpb24o
ZGVzdGluYXRpb24pCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGp1bXA7Ci0gICAgICAgIEJsb2NrSW5kZXggZGVzdGluYXRpb247Ci0gICAgfTsK
LSAgICBWZWN0b3I8QnJhbmNoUmVjb3JkLCA4PiBtX2JyYW5jaGVzOwotfTsKLQotLy8gPT09IE9w
ZXJhbmQgdHlwZXMgPT09Ci0vLwotLy8gSW50ZWdlck9wZXJhbmQsIERvdWJsZU9wZXJhbmQgYW5k
IEpTVmFsdWVPcGVyYW5kLgotLy8KLS8vIFRoZXNlIGNsYXNzZXMgYXJlIHVzZWQgdG8gbG9jayB0
aGUgb3BlcmFuZHMgdG8gYSBub2RlIGludG8gbWFjaGluZQotLy8gcmVnaXN0ZXJzLiBUaGVzZSBj
bGFzc2VzIGltcGxlbWVudCBvZiBwYXR0ZXJuIG9mIGxvY2tpbmcgYSB2YWx1ZQotLy8gaW50byBy
ZWdpc3RlciBhdCB0aGUgcG9pbnQgb2YgY29uc3RydWN0aW9uIG9ubHkgaWYgaXQgaXMgYWxyZWFk
eSBpbgotLy8gcmVnaXN0ZXJzLCBhbmQgb3RoZXJ3aXNlIGxvYWRpbmcgaXQgbGF6aWx5IGF0IHRo
ZSBwb2ludCBpdCBpcyBmaXJzdAotLy8gdXNlZC4gV2UgZG8gc28gaW4gb3JkZXIgdG8gYXR0ZW1w
dCB0byBhdm9pZCBzcGlsbGluZyBvbmUgb3BlcmFuZAotLy8gaW4gb3JkZXIgdG8gbWFrZSBzcGFj
ZSBhdmFpbGFibGUgZm9yIGFub3RoZXIuCi0KLWNsYXNzIEludGVnZXJPcGVyYW5kIHsKLXB1Ymxp
YzoKLSAgICBleHBsaWNpdCBJbnRlZ2VyT3BlcmFuZChKSVRDb2RlR2VuZXJhdG9yKiBqaXQsIE5v
ZGVJbmRleCBpbmRleCkKLSAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9pbmRleChp
bmRleCkKLSAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQotI2lmbmRlZiBO
REVCVUcKLSAgICAgICAgLCBtX2Zvcm1hdChEYXRhRm9ybWF0Tm9uZSkKLSNlbmRpZgotICAgIHsK
LSAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQoaW5kZXgp
KQotICAgICAgICAgICAgZ3ByKCk7Ci0gICAgfQotCi0gICAgfkludGVnZXJPcGVyYW5kKCkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChtX2dwck9ySW52YWxpZCAhPSBJbnZhbGlkR1BSUmVnKTsKLSAg
ICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7Ci0gICAgfQotCi0gICAgTm9kZUlu
ZGV4IGluZGV4KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2luZGV4OwotICAgIH0K
LQotICAgIERhdGFGb3JtYXQgZm9ybWF0KCkKLSAgICB7Ci0gICAgICAgIGdwcigpOyAvLyBtX2Zv
cm1hdCBpcyBzZXQgd2hlbiBtX2dwciBpcyBsb2NrZWQuCi0gICAgICAgIEFTU0VSVChtX2Zvcm1h
dCA9PSBEYXRhRm9ybWF0SW50ZWdlciB8fCBtX2Zvcm1hdCA9PSBEYXRhRm9ybWF0SlNJbnRlZ2Vy
KTsKLSAgICAgICAgcmV0dXJuIG1fZm9ybWF0OwotICAgIH0KLQotICAgIEdQUlJlZyBncHIoKQot
ICAgIHsKLSAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IEludmFsaWRHUFJSZWcpCi0gICAg
ICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsSW50ZWdlcihpbmRleCgpLCBtX2Zv
cm1hdCk7Ci0gICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCB1c2UoKQotICAgIHsKLSAgICAgICAgbV9qaXQtPnVzZShtX2luZGV4KTsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgSklUQ29kZUdlbmVyYXRvciogbV9qaXQ7Ci0gICAgTm9kZUluZGV4IG1f
aW5kZXg7Ci0gICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwotICAgIERhdGFGb3JtYXQgbV9mb3Jt
YXQ7Ci19OwotCi1jbGFzcyBEb3VibGVPcGVyYW5kIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBE
b3VibGVPcGVyYW5kKEpJVENvZGVHZW5lcmF0b3IqIGppdCwgTm9kZUluZGV4IGluZGV4KQotICAg
ICAgICA6IG1faml0KGppdCkKLSAgICAgICAgLCBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1f
ZnByT3JJbnZhbGlkKEludmFsaWRGUFJSZWcpCi0gICAgewotICAgICAgICBBU1NFUlQobV9qaXQp
OwotICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZERvdWJsZShpbmRleCkpCi0gICAgICAgICAgICBm
cHIoKTsKLSAgICB9Ci0KLSAgICB+RG91YmxlT3BlcmFuZCgpCi0gICAgewotICAgICAgICBBU1NF
UlQobV9mcHJPckludmFsaWQgIT0gSW52YWxpZEZQUlJlZyk7Ci0gICAgICAgIG1faml0LT51bmxv
Y2sobV9mcHJPckludmFsaWQpOwotICAgIH0KLQotICAgIE5vZGVJbmRleCBpbmRleCgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9pbmRleDsKLSAgICB9Ci0KLSAgICBGUFJSZWcgZnBy
KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2Zwck9ySW52YWxpZCA9PSBJbnZhbGlkRlBSUmVnKQot
ICAgICAgICAgICAgbV9mcHJPckludmFsaWQgPSBtX2ppdC0+ZmlsbERvdWJsZShpbmRleCgpKTsK
LSAgICAgICAgcmV0dXJuIG1fZnByT3JJbnZhbGlkOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHVz
ZSgpCi0gICAgewotICAgICAgICBtX2ppdC0+dXNlKG1faW5kZXgpOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBKSVRDb2RlR2VuZXJhdG9yKiBtX2ppdDsKLSAgICBOb2RlSW5kZXggbV9pbmRleDsK
LSAgICBGUFJSZWcgbV9mcHJPckludmFsaWQ7Ci19OwotCi1jbGFzcyBKU1ZhbHVlT3BlcmFuZCB7
Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgSlNWYWx1ZU9wZXJhbmQoSklUQ29kZUdlbmVyYXRvciog
aml0LCBOb2RlSW5kZXggaW5kZXgpCi0gICAgICAgIDogbV9qaXQoaml0KQotICAgICAgICAsIG1f
aW5kZXgoaW5kZXgpCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgLCBtX2dwck9ySW52YWxp
ZChJbnZhbGlkR1BSUmVnKQotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgLCBtX2lz
RG91YmxlKGZhbHNlKQotI2VuZGlmCi0gICAgewotICAgICAgICBBU1NFUlQobV9qaXQpOwotI2lm
IFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKGluZGV4KSkKLSAgICAg
ICAgICAgIGdwcigpOwotI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgbV9yZWdpc3Rl
ci5wYWlyLnRhZ0dQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAgIG1fcmVnaXN0ZXIucGFpci5w
YXlsb2FkR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQoaW5k
ZXgpKQotICAgICAgICAgICAgZmlsbCgpOwotI2VuZGlmCi0gICAgfQotCi0gICAgfkpTVmFsdWVP
cGVyYW5kKCkKLSAgICB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgQVNTRVJUKG1fZ3By
T3JJbnZhbGlkICE9IEludmFsaWRHUFJSZWcpOwotICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3By
T3JJbnZhbGlkKTsKLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGlmIChtX2lzRG91
YmxlKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9yZWdpc3Rlci5mcHIgIT0gSW52YWxpZEZQUlJl
Zyk7Ci0gICAgICAgICAgICBtX2ppdC0+dW5sb2NrKG1fcmVnaXN0ZXIuZnByKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3JlZ2lzdGVyLnBhaXIudGFnR1BSICE9IElu
dmFsaWRHUFJSZWcgJiYgbV9yZWdpc3Rlci5wYWlyLnBheWxvYWRHUFIgIT0gSW52YWxpZEdQUlJl
Zyk7Ci0gICAgICAgICAgICBtX2ppdC0+dW5sb2NrKG1fcmVnaXN0ZXIucGFpci50YWdHUFIpOwot
ICAgICAgICAgICAgbV9qaXQtPnVubG9jayhtX3JlZ2lzdGVyLnBhaXIucGF5bG9hZEdQUik7Ci0g
ICAgICAgIH0KLSNlbmRpZgotICAgIH0KLQotICAgIE5vZGVJbmRleCBpbmRleCgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gbV9pbmRleDsKLSAgICB9Ci0KLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIEdQUlJlZyBncHIoKQotICAgIHsKLSAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09
IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxs
SlNWYWx1ZShpbmRleCgpKTsKLSAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwotICAgIH0K
LSAgICBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncygpCi0gICAgewotICAgICAgICByZXR1cm4gSlNW
YWx1ZVJlZ3MoZ3ByKCkpOwotICAgIH0KLSNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgYm9v
bCBpc0RvdWJsZSgpIHsgcmV0dXJuIG1faXNEb3VibGU7IH0KLQotICAgIHZvaWQgZmlsbCgpCi0g
ICAgewotICAgICAgICBpZiAobV9yZWdpc3Rlci5wYWlyLnRhZ0dQUiA9PSBJbnZhbGlkR1BSUmVn
ICYmIG1fcmVnaXN0ZXIucGFpci5wYXlsb2FkR1BSID09IEludmFsaWRHUFJSZWcpCi0gICAgICAg
ICAgICBtX2lzRG91YmxlID0gIW1faml0LT5maWxsSlNWYWx1ZShpbmRleCgpLCBtX3JlZ2lzdGVy
LnBhaXIudGFnR1BSLCBtX3JlZ2lzdGVyLnBhaXIucGF5bG9hZEdQUiwgbV9yZWdpc3Rlci5mcHIp
OwotICAgIH0KLQotICAgIEdQUlJlZyB0YWdHUFIoKQotICAgIHsKLSAgICAgICAgZmlsbCgpOwot
ICAgICAgICBBU1NFUlQoIW1faXNEb3VibGUpOwotICAgICAgICByZXR1cm4gbV9yZWdpc3Rlci5w
YWlyLnRhZ0dQUjsKLSAgICB9Ci0KLSAgICBHUFJSZWcgcGF5bG9hZEdQUigpCi0gICAgewotICAg
ICAgICBmaWxsKCk7Ci0gICAgICAgIEFTU0VSVCghbV9pc0RvdWJsZSk7Ci0gICAgICAgIHJldHVy
biBtX3JlZ2lzdGVyLnBhaXIucGF5bG9hZEdQUjsKLSAgICB9Ci0KLSAgICBKU1ZhbHVlUmVncyBq
c1ZhbHVlUmVncygpCi0gICAgewotICAgICAgICByZXR1cm4gSlNWYWx1ZVJlZ3ModGFnR1BSKCks
IHBheWxvYWRHUFIoKSk7Ci0gICAgfQotCi0gICAgRlBSUmVnIGZwcigpCi0gICAgewotICAgICAg
ICBmaWxsKCk7Ci0gICAgICAgIEFTU0VSVChtX2lzRG91YmxlKTsKLSAgICAgICAgcmV0dXJuIG1f
cmVnaXN0ZXIuZnByOwotICAgIH0KLSNlbmRpZgotCi0gICAgdm9pZCB1c2UoKQotICAgIHsKLSAg
ICAgICAgbV9qaXQtPnVzZShtX2luZGV4KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgSklUQ29k
ZUdlbmVyYXRvciogbV9qaXQ7Ci0gICAgTm9kZUluZGV4IG1faW5kZXg7Ci0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7Ci0jZWxpZiBVU0UoSlNWQUxVRTMyXzY0
KQotICAgIHVuaW9uIHsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIEdQUlJlZyB0YWdH
UFI7Ci0gICAgICAgICAgICBHUFJSZWcgcGF5bG9hZEdQUjsKLSAgICAgICAgfSBwYWlyOwotICAg
ICAgICBGUFJSZWcgZnByOwotICAgIH0gbV9yZWdpc3RlcjsKLSAgICBib29sIG1faXNEb3VibGU7
Ci0jZW5kaWYKLX07Ci0KLWNsYXNzIFN0b3JhZ2VPcGVyYW5kIHsKLXB1YmxpYzoKLSAgICBleHBs
aWNpdCBTdG9yYWdlT3BlcmFuZChKSVRDb2RlR2VuZXJhdG9yKiBqaXQsIE5vZGVJbmRleCBpbmRl
eCkKLSAgICAgICAgOiBtX2ppdChqaXQpCi0gICAgICAgICwgbV9pbmRleChpbmRleCkKLSAgICAg
ICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KG1faml0KTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQoaW5kZXgpKQotICAgICAgICAgICAg
Z3ByKCk7Ci0gICAgfQotICAgIAotICAgIH5TdG9yYWdlT3BlcmFuZCgpCi0gICAgewotICAgICAg
ICBBU1NFUlQobV9ncHJPckludmFsaWQgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIG1faml0
LT51bmxvY2sobV9ncHJPckludmFsaWQpOwotICAgIH0KLSAgICAKLSAgICBOb2RlSW5kZXggaW5k
ZXgoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW5kZXg7Ci0gICAgfQotICAgIAot
ICAgIEdQUlJlZyBncHIoKQotICAgIHsKLSAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IElu
dmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3Rv
cmFnZShpbmRleCgpKTsKLSAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIHVzZSgpCi0gICAgewotICAgICAgICBtX2ppdC0+dXNlKG1faW5kZXgpOwot
ICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgSklUQ29kZUdlbmVyYXRvciogbV9qaXQ7Ci0gICAg
Tm9kZUluZGV4IG1faW5kZXg7Ci0gICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwotfTsKLQotCi0v
LyA9PT0gVGVtcG9yYXJpZXMgPT09Ci0vLwotLy8gVGhlc2UgY2xhc3NlcyBhcmUgdXNlZCB0byBh
bGxvY2F0ZSB0ZW1wb3JhcnkgcmVnaXN0ZXJzLgotLy8gQSBtZWNoYW5pc20gaXMgcHJvdmlkZWQg
dG8gYXR0ZW1wdCB0byByZXVzZSB0aGUgcmVnaXN0ZXJzCi0vLyBjdXJyZW50bHkgYWxsb2NhdGVk
IHRvIGNoaWxkIG5vZGVzIHdob3NlIHZhbHVlIGlzIGNvbnN1bWVkCi0vLyBieSwgYW5kIG5vdCBs
aXZlIGFmdGVyLCB0aGlzIG9wZXJhdGlvbi4KLQotY2xhc3MgR1BSVGVtcG9yYXJ5IHsKLXB1Ymxp
YzoKLSAgICBHUFJUZW1wb3JhcnkoKTsKLSAgICBHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRv
ciopOwotICAgIEdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKiwgR1BSUmVnIHNwZWNpZmlj
KTsKLSAgICBHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciosIFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kJik7Ci0gICAgR1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqLCBTcGVjdWxhdGVJ
bnRlZ2VyT3BlcmFuZCYsIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kJik7Ci0gICAgR1BSVGVtcG9y
YXJ5KEpJVENvZGVHZW5lcmF0b3IqLCBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQmKTsKLSAg
ICBHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciosIEludGVnZXJPcGVyYW5kJik7Ci0gICAg
R1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqLCBJbnRlZ2VyT3BlcmFuZCYsIEludGVnZXJP
cGVyYW5kJik7Ci0gICAgR1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqLCBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCYpOwotICAgIEdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKiwgU3BlY3Vs
YXRlQm9vbGVhbk9wZXJhbmQmKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEdQUlRlbXBvcmFy
eShKSVRDb2RlR2VuZXJhdG9yKiwgSlNWYWx1ZU9wZXJhbmQmKTsKLSNlbGlmIFVTRShKU1ZBTFVF
MzJfNjQpCi0gICAgR1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqLCBKU1ZhbHVlT3BlcmFu
ZCYsIGJvb2wgdGFnID0gdHJ1ZSk7Ci0jZW5kaWYKLSAgICBHUFJUZW1wb3JhcnkoSklUQ29kZUdl
bmVyYXRvciosIFN0b3JhZ2VPcGVyYW5kJik7Ci0KLSAgICB2b2lkIGFkb3B0KEdQUlRlbXBvcmFy
eSYpOwotCi0gICAgfkdQUlRlbXBvcmFyeSgpCi0gICAgewotICAgICAgICBpZiAobV9qaXQgJiYg
bV9ncHIgIT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAgIG1faml0LT51bmxvY2soZ3ByKCkp
OwotICAgIH0KLQotICAgIEdQUlJlZyBncHIoKQotICAgIHsKLSAgICAgICAgLy8gSW4gc29tZSBj
YXNlcyB3ZSBoYXZlIGxhenkgYWxsb2NhdGlvbi4KLSAgICAgICAgaWYgKG1faml0ICYmIG1fZ3By
ID09IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2dwciA9IG1faml0LT5hbGxvY2F0ZSgp
OwotICAgICAgICByZXR1cm4gbV9ncHI7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpJVENvZGVH
ZW5lcmF0b3IqIG1faml0OwotICAgIEdQUlJlZyBtX2dwcjsKLX07Ci0KLWNsYXNzIEZQUlRlbXBv
cmFyeSB7Ci1wdWJsaWM6Ci0gICAgRlBSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqKTsKLSAg
ICBGUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciosIERvdWJsZU9wZXJhbmQmKTsKLSAgICBG
UFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciosIERvdWJsZU9wZXJhbmQmLCBEb3VibGVPcGVy
YW5kJik7Ci0gICAgRlBSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqLCBTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kJik7Ci0gICAgRlBSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqLCBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kJiwgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCYpOwotI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCi0gICAgRlBSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqLCBKU1ZhbHVlT3Bl
cmFuZCYpOwotI2VuZGlmCi0KLSAgICB+RlBSVGVtcG9yYXJ5KCkKLSAgICB7Ci0gICAgICAgIG1f
aml0LT51bmxvY2soZnByKCkpOwotICAgIH0KLQotICAgIEZQUlJlZyBmcHIoKSBjb25zdAotICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fZnByICE9IEludmFsaWRGUFJSZWcpOwotICAgICAgICByZXR1
cm4gbV9mcHI7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgRlBSVGVtcG9yYXJ5KEpJVENvZGVH
ZW5lcmF0b3IqIGppdCwgRlBSUmVnIGxvY2tlZEZQUikKLSAgICAgICAgOiBtX2ppdChqaXQpCi0g
ICAgICAgICwgbV9mcHIobG9ja2VkRlBSKQotICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
SklUQ29kZUdlbmVyYXRvciogbV9qaXQ7Ci0gICAgRlBSUmVnIG1fZnByOwotfTsKLQotCi0vLyA9
PT0gUmVzdWx0cyA9PT0KLS8vCi0vLyBUaGVzZSBjbGFzc2VzIGxvY2sgdGhlIHJlc3VsdCBvZiBh
IGNhbGwgdG8gYSBDKysgaGVscGVyIGZ1bmN0aW9uLgotCi1jbGFzcyBHUFJSZXN1bHQgOiBwdWJs
aWMgR1BSVGVtcG9yYXJ5IHsKLXB1YmxpYzoKLSAgICBHUFJSZXN1bHQoSklUQ29kZUdlbmVyYXRv
ciogaml0KQotICAgICAgICA6IEdQUlRlbXBvcmFyeShqaXQsIEdQUkluZm86OnJldHVyblZhbHVl
R1BSKQotICAgIHsKLSAgICB9Ci19OwotCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLWNsYXNzIEdQ
UlJlc3VsdDIgOiBwdWJsaWMgR1BSVGVtcG9yYXJ5IHsKLXB1YmxpYzoKLSAgICBHUFJSZXN1bHQy
KEpJVENvZGVHZW5lcmF0b3IqIGppdCkKLSAgICAgICAgOiBHUFJUZW1wb3Jhcnkoaml0LCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUjIpCi0gICAgewotICAgIH0KLX07Ci0jZW5kaWYKLQotY2xhc3Mg
RlBSUmVzdWx0IDogcHVibGljIEZQUlRlbXBvcmFyeSB7Ci1wdWJsaWM6Ci0gICAgRlBSUmVzdWx0
KEpJVENvZGVHZW5lcmF0b3IqIGppdCkKLSAgICAgICAgOiBGUFJUZW1wb3Jhcnkoaml0LCBsb2Nr
ZWRSZXN1bHQoaml0KSkKLSAgICB7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBGUFJS
ZWcgbG9ja2VkUmVzdWx0KEpJVENvZGVHZW5lcmF0b3IqIGppdCkKLSAgICB7Ci0gICAgICAgIGpp
dC0+bG9jayhGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Ci0gICAgICAgIHJldHVybiBGUFJJbmZv
OjpyZXR1cm5WYWx1ZUZQUjsKLSAgICB9Ci19OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
Ci0KLSNlbmRpZgotI2VuZGlmCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxMDAyMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjks
NiBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5j
bHVkZSAiREZHSklUQ29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXRDb21waWxl
ci5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJERkdSZWdpc3RlckJh
bmsuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2
aXNpb24gMTAwMjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQp
CiAKLSNpbmNsdWRlICJERkdKSVRDb2RlR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiREZHU3BlY3Vs
YXRpdmVKSVQuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKQEAgLTExOCw3ICsxMTgsNyBAQCBzdGF0
aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViCiAgICAgYm9vbCBuZWVkVG9SZXN0
b3JlU2NyYXRjaCA9IGZhbHNlOwogICAgIAogICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRH
UFJSZWcpIHsKLSAgICAgICAgc2NyYXRjaEdQUiA9IEpJVENvZGVHZW5lcmF0b3I6OnNlbGVjdFNj
cmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2NyYXRjaEdQUiA9IFNwZWN1
bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQUik7CiAgICAgICAg
IHN0dWJKaXQucHVzaChzY3JhdGNoR1BSKTsKICAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2gg
PSB0cnVlOwogICAgIH0KQEAgLTE3Niw3ICsxNzYsNyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdl
dEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyIHN0dWJKaXQ7CiAgICAg
ICAgIAogICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7Ci0gICAgICAg
ICAgICBzY3JhdGNoR1BSID0gSklUQ29kZUdlbmVyYXRvcjo6c2VsZWN0U2NyYXRjaEdQUihiYXNl
R1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc2NyYXRjaEdQUiA9IFNwZWN1bGF0aXZlSklU
OjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgICAgICBzdHVi
Sml0LnB1c2goc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9
IHRydWU7CiAgICAgICAgIH0KQEAgLTU0MSw3ICs1NDEsNyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNo
ZVB1dEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgZmFpbHVyZUNhc2VzOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc2NyYXRjaEdQ
UiA9PSBJbnZhbGlkR1BSUmVnKSB7Ci0gICAgICAgICAgICAgICAgc2NyYXRjaEdQUiA9IEpJVENv
ZGVHZW5lcmF0b3I6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgdmFsdWVHUFIpOworICAgICAg
ICAgICAgICAgIHNjcmF0Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRjaEdQUihi
YXNlR1BSLCB2YWx1ZUdQUik7CiAgICAgICAgICAgICAgICAgc3R1YkppdC5wdXNoKHNjcmF0Y2hH
UFIpOwogICAgICAgICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKICAgICAg
ICAgICAgIH0KQEAgLTU1Nyw5ICs1NTcsOSBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQo
RXhlY1N0YXRlKiBlCiAKICNpZiBFTkFCTEUoR0dDKSB8fCBFTkFCTEUoV1JJVEVfQkFSUklFUl9Q
Uk9GSUxJTkcpCiAgICAgICAgICAgICAvLyBNdXN0IGFsd2F5cyBlbWl0IHRoaXMgd3JpdGUgYmFy
cmllciBhcyB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb24gaXRzZWxmIHJlcXVpcmVzIGl0Ci0gICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBKSVRDb2RlR2VuZXJhdG9yOjpzZWxlY3RTY3JhdGNo
R1BSKGJhc2VHUFIsIHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoMiA9IFNwZWN1bGF0aXZlSklUOjpzZWxlY3RTY3JhdGNoR1BSKGJhc2VHUFIsIHZhbHVl
R1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIHN0dWJKaXQucHVzaChzY3JhdGNoMik7Ci0g
ICAgICAgICAgICBKSVRDb2RlR2VuZXJhdG9yOjp3cml0ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQ
Uiwgc2NyYXRjaEdQUiwgc2NyYXRjaDIsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsK
KyAgICAgICAgICAgIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoc3R1YkppdCwgYmFzZUdQ
Uiwgc2NyYXRjaEdQUiwgc2NyYXRjaDIsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsK
ICAgICAgICAgICAgIHN0dWJKaXQucG9wKHNjcmF0Y2gyKTsKICNlbmRpZgogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAJKHJldmlzaW9uIDEwMDIzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDEzMzQgQEAg
c3RhdGljIGRvdWJsZSBERkdfT1BFUkFUSU9OIGZtb2RBc0RGR09wZQogCiAjaWYgVVNFKEpTVkFM
VUUzMl82NCkKIAorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcihOb2RlSW5kZXgg
bm9kZUluZGV4LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpCit7CisgICAgTm9kZSYgbm9kZSA9
IGF0KG5vZGVJbmRleCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5v
ZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVy
YXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisKKyAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1h
dCgpID09IERhdGFGb3JtYXROb25lKSB7CisgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgp
OworCisgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIG1fZ3By
cy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CisgICAg
ICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgICAgICAgICAg
bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9k
ZUluZGV4KSksIGdwcik7CisgICAgICAgICAgICBlbHNlIGlmIChpc051bWJlckNvbnN0YW50KG5v
ZGVJbmRleCkpCisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KG5vZGVJbmRl
eCkpOworICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50
KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
SW1tMzIoanNWYWx1ZS5wYXlsb2FkKCkpLCBncHIpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9y
bWF0SlMgfHwgaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRKU0ludGVnZXIpOworICAg
ICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNw
aWxsZWQpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9y
KHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAgIH0KKworICAgICAgICBpbmZvLmZpbGxJ
bnRlZ2VyKGdwcik7CisgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwor
ICAgICAgICByZXR1cm4gZ3ByOworICAgIH0KKworICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZv
cm1hdCgpKSB7CisgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZToKKyAgICAgICAgLy8gU2hvdWxkIGhh
dmUgZmlsbGVkLCBhYm92ZS4KKyAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZToKKyAgICBjYXNl
IERhdGFGb3JtYXREb3VibGU6CisgICAgY2FzZSBEYXRhRm9ybWF0SlM6CisgICAgY2FzZSBEYXRh
Rm9ybWF0Q2VsbDoKKyAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6CisgICAgY2FzZSBEYXRhRm9y
bWF0Qm9vbGVhbjoKKyAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46CisgICAgY2FzZSBEYXRh
Rm9ybWF0U3RvcmFnZToKKyAgICAgICAgLy8gU2hvdWxkIG9ubHkgYmUgY2FsbGluZyB0aGlzIGZ1
bmN0aW9uIGlmIHdlIGtub3cgdGhpcyBvcGVyYW5kIHRvIGJlIGludGVnZXIuCisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgY2FzZSBEYXRhRm9ybWF0SlNJbnRlZ2VyOiB7Cisg
ICAgICAgIEdQUlJlZyB0YWdHUFIgPSBpbmZvLnRhZ0dQUigpOworICAgICAgICBHUFJSZWcgcGF5
bG9hZEdQUiA9IGluZm8ucGF5bG9hZEdQUigpOworICAgICAgICBtX2dwcnMubG9jayh0YWdHUFIp
OworICAgICAgICBtX2ppdC5qaXRBc3NlcnRJc0pTSW50MzIodGFnR1BSKTsKKyAgICAgICAgbV9n
cHJzLnVubG9jayh0YWdHUFIpOworICAgICAgICBtX2dwcnMubG9jayhwYXlsb2FkR1BSKTsKKyAg
ICAgICAgbV9ncHJzLnJlbGVhc2UodGFnR1BSKTsKKyAgICAgICAgbV9ncHJzLnJlbGVhc2UocGF5
bG9hZEdQUik7CisgICAgICAgIG1fZ3Bycy5yZXRhaW4ocGF5bG9hZEdQUiwgdmlydHVhbFJlZ2lz
dGVyLCBTcGlsbE9yZGVySW50ZWdlcik7CisgICAgICAgIGluZm8uZmlsbEludGVnZXIocGF5bG9h
ZEdQUik7CisgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOworICAgICAg
ICByZXR1cm4gcGF5bG9hZEdQUjsKKyAgICB9CisKKyAgICBjYXNlIERhdGFGb3JtYXRJbnRlZ2Vy
OiB7CisgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOworICAgICAgICBtX2dwcnMubG9j
ayhncHIpOworICAgICAgICBtX2ppdC5qaXRBc3NlcnRJc0ludDMyKGdwcik7CisgICAgICAgIHJl
dHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOworICAgICAgICByZXR1cm4gZ3ByOworICAg
IH0KKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gSW52YWxp
ZEdQUlJlZzsKK30KKworRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbmRl
eCBub2RlSW5kZXgpCit7CisgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7Cisg
ICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rl
cl07CisKKyAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXROb25lKSB7
CisKKyAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgaWYgKGlz
SW50MzJDb25zdGFudChub2RlSW5kZXgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IHNo
b3VsZCBub3QgYmUgcmVhY2hhYmxlPworICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxv
Y2F0ZSgpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMy
KHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCBncHIpOworICAgICAgICAgICAgICAg
IG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7
CisgICAgICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcihncHIpOworICAgICAgICAgICAgICAg
IHVubG9jayhncHIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc051bWJlckNvbnN0YW50KG5v
ZGVJbmRleCkpIHsKKyAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKGFkZHJlc3NPZkRvdWJsZUNvbnN0YW50
KG5vZGVJbmRleCksIGZwcik7CisgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZp
cnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7CisgICAgICAgICAgICAgICAgaW5mby5m
aWxsRG91YmxlKGZwcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZwcjsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCBub3QgYmUgcmVhY2hh
YmxlPworICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgRGF0YUZvcm1hdCBzcGlsbEZvcm1hdCA9
IGluZm8uc3BpbGxGb3JtYXQoKTsKKyAgICAgICAgICAgIEFTU0VSVChzcGlsbEZvcm1hdCAmIERh
dGFGb3JtYXRKUyk7CisgICAgICAgICAgICBpZiAoc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdEpT
RG91YmxlKSB7CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7Cisg
ICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2
aXJ0dWFsUmVnaXN0ZXIpLCBmcHIpOworICAgICAgICAgICAgICAgIG1fZnBycy5yZXRhaW4oZnBy
LCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKKyAgICAgICAgICAgICAgICBp
bmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZnByOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKKyAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRE
b3VibGUoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZnByKTsKKyAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhc1VuYm94ZWREb3VibGUgPSBtX2ppdC5qdW1w
KCk7CisKKyAgICAgICAgICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBt
X2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFs
UmVnaXN0ZXIpLCBmcHIpOworCisgICAgICAgICAgICBoYXNVbmJveGVkRG91YmxlLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNw
aWxsT3JkZXJTcGlsbGVkKTsKKyAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIpOworICAg
ICAgICAgICAgcmV0dXJuIGZwcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN3aXRjaCAoaW5m
by5yZWdpc3RlckZvcm1hdCgpKSB7CisgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZToKKyAgICAgICAg
Ly8gU2hvdWxkIGhhdmUgZmlsbGVkLCBhYm92ZS4KKyAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgor
ICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKKyAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgor
ICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoKKyAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdl
OgorICAgICAgICAvLyBTaG91bGQgb25seSBiZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gaWYgd2Ug
a25vdyB0aGlzIG9wZXJhbmQgdG8gYmUgbnVtZXJpYy4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisKKyAgICBjYXNlIERhdGFGb3JtYXRKU0ludGVnZXI6CisgICAgY2FzZSBEYXRhRm9y
bWF0SlM6IHsKKyAgICAgICAgR1BSUmVnIHRhZ0dQUiA9IGluZm8udGFnR1BSKCk7CisgICAgICAg
IEdQUlJlZyBwYXlsb2FkR1BSID0gaW5mby5wYXlsb2FkR1BSKCk7CisgICAgICAgIEZQUlJlZyBm
cHIgPSBmcHJBbGxvY2F0ZSgpOworICAgICAgICBtX2dwcnMubG9jayh0YWdHUFIpOworICAgICAg
ICBtX2dwcnMubG9jayhwYXlsb2FkR1BSKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBo
YXNVbmJveGVkRG91YmxlOworCisgICAgICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0g
RGF0YUZvcm1hdEpTSW50ZWdlcikgeworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcyk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkludDMyVGFnKSk7CisgICAgICAgICAgICBtX2ppdC5qaXRBc3NlcnRJc0pTRG91YmxlKHRh
Z0dQUik7CisgICAgICAgICAgICB1bmJveERvdWJsZSh0YWdHUFIsIHBheWxvYWRHUFIsIGZwciwg
c2NyYXRjaC5mcHIoKSk7CisgICAgICAgICAgICBoYXNVbmJveGVkRG91YmxlID0gbV9qaXQuanVt
cCgpOworICAgICAgICAgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKKyAgICAgICAgfQorCisg
ICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBheWxvYWRHUFIsIGZwcik7CisKKyAg
ICAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0SlNJbnRlZ2VyKQor
ICAgICAgICAgICAgaGFzVW5ib3hlZERvdWJsZS5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgbV9n
cHJzLnJlbGVhc2UodGFnR1BSKTsKKyAgICAgICAgbV9ncHJzLnJlbGVhc2UocGF5bG9hZEdQUik7
CisgICAgICAgIG1fZ3Bycy51bmxvY2sodGFnR1BSKTsKKyAgICAgICAgbV9ncHJzLnVubG9jayhw
YXlsb2FkR1BSKTsKKyAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3Rlciwg
U3BpbGxPcmRlckRvdWJsZSk7CisgICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIpOworICAgICAg
ICBpbmZvLmtpbGxTcGlsbGVkKCk7CisgICAgICAgIHJldHVybiBmcHI7CisgICAgfQorCisgICAg
Y2FzZSBEYXRhRm9ybWF0SW50ZWdlcjogeworICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2Nh
dGUoKTsKKyAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CisgICAgICAgIG1fZ3Bycy5s
b2NrKGdwcik7CisgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGdwciwgZnByKTsK
KyAgICAgICAgbV9ncHJzLnVubG9jayhncHIpOworICAgICAgICByZXR1cm4gZnByOworICAgIH0K
KworICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOiAKKyAgICBjYXNlIERhdGFGb3JtYXREb3Vi
bGU6IHsKKyAgICAgICAgRlBSUmVnIGZwciA9IGluZm8uZnByKCk7CisgICAgICAgIG1fZnBycy5s
b2NrKGZwcik7CisgICAgICAgIHJldHVybiBmcHI7CisgICAgfQorICAgIH0KKworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBJbnZhbGlkRlBSUmVnOworfQorCitib29sIFNw
ZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShOb2RlSW5kZXggbm9kZUluZGV4LCBHUFJSZWcmIHRh
Z0dQUiwgR1BSUmVnJiBwYXlsb2FkR1BSLCBGUFJSZWcmIGZwcikKK3sKKyAgICAvLyBGSVhNRTog
Rm9yIGRvdWJsZSB3ZSBjb3VsZCBmaWxsIHdpdGggYSBGUFIuCisgICAgVU5VU0VEX1BBUkFNKGZw
cik7CisKKyAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBHZW5lcmF0
aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKworICAg
IHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CisgICAgY2FzZSBEYXRhRm9ybWF0Tm9u
ZTogeworCisgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIGlm
IChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSkgeworICAgICAgICAgICAgICAgIHRhZ0dQUiA9
IGFsbG9jYXRlKCk7CisgICAgICAgICAgICAgICAgcGF5bG9hZEdQUiA9IGFsbG9jYXRlKCk7Cisg
ICAgICAgICAgICAgICAgbV9qaXQuZW1pdExvYWQobm9kZUluZGV4LCB0YWdHUFIsIHBheWxvYWRH
UFIpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUodGFnR1BSLCBwYXlsb2FkR1BS
LCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgdGFnR1BSID0gYWxsb2NhdGUoKTsKKyAgICAgICAgICAgICAgICBwYXlsb2FkR1BSID0g
YWxsb2NhdGUoKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5lbWl0TG9hZChub2RlSW5kZXgsIHRh
Z0dQUiwgcGF5bG9hZEdQUik7CisgICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSh0YWdH
UFIsIHBheWxvYWRHUFIsIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIG1fZ3Bycy5yZXRhaW4odGFnR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25z
dGFudCk7CisgICAgICAgICAgICBtX2dwcnMucmV0YWluKHBheWxvYWRHUFIsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IERhdGFGb3JtYXQgc3BpbGxGb3JtYXQgPSBpbmZvLnNwaWxsRm9ybWF0KCk7CisgICAgICAgICAg
ICBBU1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgdGFnR1BS
ID0gYWxsb2NhdGUoKTsKKyAgICAgICAgICAgIHBheWxvYWRHUFIgPSBhbGxvY2F0ZSgpOworICAg
ICAgICAgICAgbV9qaXQuZW1pdExvYWQobm9kZUluZGV4LCB0YWdHUFIsIHBheWxvYWRHUFIpOwor
ICAgICAgICAgICAgbV9ncHJzLnJldGFpbih0YWdHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxP
cmRlclNwaWxsZWQpOworICAgICAgICAgICAgbV9ncHJzLnJldGFpbihwYXlsb2FkR1BSLCB2aXJ0
dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKKyAgICAgICAgICAgIGluZm8uZmlsbEpT
VmFsdWUodGFnR1BSLCBwYXlsb2FkR1BSLCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SlNEb3Vi
bGUgPyBEYXRhRm9ybWF0SlMgOiBzcGlsbEZvcm1hdCk7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjYXNlIERhdGFGb3JtYXRJbnRlZ2VyOgorICAgIGNh
c2UgRGF0YUZvcm1hdENlbGw6CisgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjogeworICAgICAg
ICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKKyAgICAgICAgLy8gSWYgdGhlIHJlZ2lzdGVyIGhh
cyBhbHJlYWR5IGJlZW4gbG9ja2VkIHdlIG5lZWQgdG8gdGFrZSBhIGNvcHkuCisgICAgICAgIGlm
IChtX2dwcnMuaXNMb2NrZWQoZ3ByKSkgeworICAgICAgICAgICAgcGF5bG9hZEdQUiA9IGFsbG9j
YXRlKCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKGdwciwgcGF5bG9hZEdQUik7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBwYXlsb2FkR1BSID0gZ3ByOworICAgICAgICAgICAgbV9n
cHJzLmxvY2soZ3ByKTsKKyAgICAgICAgfQorICAgICAgICB0YWdHUFIgPSBhbGxvY2F0ZSgpOwor
ICAgICAgICB1aW50MzJfdCB0YWcgPSBKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnOworICAgICAgICBE
YXRhRm9ybWF0IGZpbGxGb3JtYXQgPSBEYXRhRm9ybWF0SlM7CisgICAgICAgIHN3aXRjaCAoaW5m
by5yZWdpc3RlckZvcm1hdCgpKSB7CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6Cisg
ICAgICAgICAgICB0YWcgPSBKU1ZhbHVlOjpJbnQzMlRhZzsKKyAgICAgICAgICAgIGZpbGxGb3Jt
YXQgPSBEYXRhRm9ybWF0SlNJbnRlZ2VyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRGF0YUZvcm1hdENlbGw6CisgICAgICAgICAgICB0YWcgPSBKU1ZhbHVlOjpDZWxsVGFnOwor
ICAgICAgICAgICAgZmlsbEZvcm1hdCA9IERhdGFGb3JtYXRKU0NlbGw7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoKKyAgICAgICAgICAgIHRhZyA9
IEpTVmFsdWU6OkJvb2xlYW5UYWc7CisgICAgICAgICAgICBmaWxsRm9ybWF0ID0gRGF0YUZvcm1h
dEpTQm9vbGVhbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMih0YWcpLCB0YWdHUFIpOworICAgICAg
ICBtX2dwcnMucmVsZWFzZShncHIpOworICAgICAgICBtX2dwcnMucmV0YWluKHRhZ0dQUiwgdmly
dHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOworICAgICAgICBtX2dwcnMucmV0YWluKHBheWxv
YWRHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckpTKTsKKyAgICAgICAgaW5mby5maWxs
SlNWYWx1ZSh0YWdHUFIsIHBheWxvYWRHUFIsIGZpbGxGb3JtYXQpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZToKKyAgICBjYXNlIERh
dGFGb3JtYXREb3VibGU6IHsKKyAgICAgICAgRlBSUmVnIG9sZEZQUiA9IGluZm8uZnByKCk7Cisg
ICAgICAgIG1fZnBycy5sb2NrKG9sZEZQUik7CisgICAgICAgIHRhZ0dQUiA9IGFsbG9jYXRlKCk7
CisgICAgICAgIHBheWxvYWRHUFIgPSBhbGxvY2F0ZSgpOworICAgICAgICBib3hEb3VibGUob2xk
RlBSLCB0YWdHUFIsIHBheWxvYWRHUFIpOworICAgICAgICBtX2ZwcnMudW5sb2NrKG9sZEZQUik7
CisgICAgICAgIG1fZnBycy5yZWxlYXNlKG9sZEZQUik7CisgICAgICAgIG1fZ3Bycy5yZXRhaW4o
dGFnR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7CisgICAgICAgIG1fZ3Bycy5y
ZXRhaW4ocGF5bG9hZEdQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOworICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKHRhZ0dQUiwgcGF5bG9hZEdQUiwgRGF0YUZvcm1hdEpTKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY2FzZSBEYXRhRm9ybWF0SlM6CisgICAg
Y2FzZSBEYXRhRm9ybWF0SlNJbnRlZ2VyOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKKyAg
ICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46IHsKKyAgICAgICAgdGFnR1BSID0gaW5mby50YWdH
UFIoKTsKKyAgICAgICAgcGF5bG9hZEdQUiA9IGluZm8ucGF5bG9hZEdQUigpOworICAgICAgICBt
X2dwcnMubG9jayh0YWdHUFIpOworICAgICAgICBtX2dwcnMubG9jayhwYXlsb2FkR1BSKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIERhdGFGb3JtYXRT
dG9yYWdlOgorICAgICAgICAvLyB0aGlzIHR5cGUgY3VycmVudGx5IG5ldmVyIG9jY3VycworICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3Bl
Y3VsYXRpdmVWYWx1ZVRvTnVtYmVyKE5vZGUmIG5vZGUpCit7CisgICAgaWYgKGlzS25vd25OdW1l
cmljKG5vZGUuY2hpbGQxKCkpKSB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKKyAgICAgICAgb3AxLmZpbGwoKTsKKyAgICAgICAgaWYgKG9wMS5pc0Rv
dWJsZSgpKSB7CisgICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7Cisg
ICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAg
ICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcywg
b3AxKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIG9wMSwg
ZmFsc2UpOworICAgICAgICAgICAgbV9qaXQubW92ZShvcDEudGFnR1BSKCksIHJlc3VsdFRhZy5n
cHIoKSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5wYXlsb2FkR1BSKCksIHJlc3VsdFBh
eWxvYWQuZ3ByKCkpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCks
IHJlc3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcywgb3AxKTsKKyAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzLCBvcDEsIGZhbHNlKTsKKworICAgIEFTU0VSVCgh
aXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKTsKKyAgICBBU1NFUlQoIWlzTnVtYmVyQ29u
c3RhbnQobm9kZS5jaGlsZDEoKSkpOworCisgICAgR1BSUmVnIHRhZ0dQUiA9IG9wMS50YWdHUFIo
KTsKKyAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7CisgICAgR1BSUmVn
IHJlc3VsdFRhZ0dQUiA9IHJlc3VsdFRhZy5ncHIoKTsKKyAgICBHUFJSZWcgcmVzdWx0UGF5bG9h
ZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7CisgICAgb3AxLnVzZSgpOworCisgICAgSklUQ29t
cGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOworICAgIEpJVENv
bXBpbGVyOjpKdW1wIG5vbk51bWVyaWMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKTsK
KworICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQg
YXMgYSBKU1ZhbHVlCisgICAgSklUQ29tcGlsZXI6Okp1bXAgaGFzVW5ib3hlZERvdWJsZSA9IG1f
aml0Lmp1bXAoKTsKKworICAgIC8vIE5leHQgaGFuZGxlIGNlbGxzICgmIG90aGVyIEpTIGltbWVk
aWF0ZXMpCisgICAgbm9uTnVtZXJpYy5saW5rKCZtX2ppdCk7CisgICAgc2lsZW50U3BpbGxBbGxS
ZWdpc3RlcnMocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICBjYWxsT3BlcmF0
aW9uKGRmZ0NvbnZlcnRKU1ZhbHVlVG9OdW1iZXIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSLCB0
YWdHUFIsIHBheWxvYWRHUFIpOworICAgIGJveERvdWJsZShGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQ
UiwgcmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICBzaWxlbnRGaWxsQWxsUmVn
aXN0ZXJzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAgSklUQ29tcGlsZXI6
Okp1bXAgaGFzQ2FsbGVkVG9OdW1iZXIgPSBtX2ppdC5qdW1wKCk7CisgICAgCisgICAgLy8gRmlu
YWxseSwgaGFuZGxlIGludGVnZXJzLgorICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7CisgICAg
aGFzVW5ib3hlZERvdWJsZS5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQubW92ZSh0YWdHUFIsIHJl
c3VsdFRhZ0dQUik7CisgICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRQYXlsb2FkR1BS
KTsKKyAgICBoYXNDYWxsZWRUb051bWJlci5saW5rKCZtX2ppdCk7CisgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGls
ZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVj
dWxhdGl2ZVZhbHVlVG9JbnQzMihOb2RlJiBub2RlKQoreworICAgIEFTU0VSVCghaXNJbnQzMkNv
bnN0YW50KG5vZGUuY2hpbGQxKCkpKTsKKworICAgIGlmIChpc0tub3duSW50ZWdlcihub2RlLmNo
aWxkMSgpKSkgeworICAgICAgICBJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEo
KSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAgbV9q
aXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIGludGVnZXJSZXN1bHQo
cmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBHZW5lcmF0aW9uSW5mbyYgY2hpbGRJbmZvID0gbV9nZW5lcmF0aW9uSW5mb1thdChub2Rl
LmNoaWxkMSgpKS52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgaWYgKGNoaWxkSW5mby5pc0pTRG91
YmxlKCkpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7
CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgIEZQUlJlZyBmcHIg
PSBvcDEuZnByKCk7CisgICAgICAgIEdQUlJlZyBncHIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAg
IG9wMS51c2UoKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgdHJ1bmNhdGVkVG9JbnRlZ2Vy
ID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwgZ3ByLCBKSVRDb21waWxl
cjo6QnJhbmNoSWZUcnVuY2F0ZVN1Y2Nlc3NmdWwpOworCisgICAgICAgIHNpbGVudFNwaWxsQWxs
UmVnaXN0ZXJzKGdwcik7CisgICAgICAgIGNhbGxPcGVyYXRpb24odG9JbnQzMiwgZ3ByLCBmcHIp
OworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKGdwcik7CisKKyAgICAgICAgdHJ1bmNh
dGVkVG9JbnRlZ2VyLmxpbmsoJm1faml0KTsKKyAgICAgICAgaW50ZWdlclJlc3VsdChncHIsIG1f
Y29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgR1BSUmVnIHRhZ0dQUiA9IG9w
MS50YWdHUFIoKTsKKyAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICBvcDEudXNlKCk7CisKKyAg
ICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CisK
KyAgICAvLyBGaXJzdCBoYW5kbGUgbm9uLWludGVnZXJzCisgICAgc2lsZW50U3BpbGxBbGxSZWdp
c3RlcnMocmVzdWx0R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKGRmZ0NvbnZlcnRKU1ZhbHVlVG9J
bnQzMiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHRhZ0dQUiwgcGF5bG9hZEdQUik7CisgICAg
bV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICBzaWxl
bnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgaGFz
Q2FsbGVkVG9JbnQzMiA9IG1faml0Lmp1bXAoKTsKKworICAgIC8vIFRoZW4gaGFuZGxlIGludGVn
ZXJzLgorICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQubW92ZShwYXlsb2Fk
R1BSLCByZXN1bHRHUFIpOworICAgIGhhc0NhbGxlZFRvSW50MzIubGluaygmbV9qaXQpOworICAg
IGludGVnZXJSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxs
ZWRFeHBsaWNpdGx5KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVV
SW50MzJUb051bWJlcihOb2RlJiBub2RlKQoreworICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKKyAgICBGUFJUZW1wb3JhcnkgYm94ZXIodGhpcyk7CisgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzLCBvcDEpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQ
YXlsb2FkKHRoaXMpOworICAgICAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBwb3NpdGl2ZSA9
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIG9wMS5n
cHIoKSwgVHJ1c3RlZEltbTMyKDApKTsKKyAgICAgICAgCisgICAgbV9qaXQuY29udmVydEludDMy
VG9Eb3VibGUob3AxLmdwcigpLCBib3hlci5mcHIoKSk7CisgICAgbV9qaXQubW92ZShKSVRDb21w
aWxlcjo6VHJ1c3RlZEltbVB0cigmdHdvVG9UaGUzMiksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOyAv
LyByZXVzZSByZXN1bHRQYXlsb2FkIHJlZ2lzdGVyIGhlcmUuCisgICAgbV9qaXQuYWRkRG91Ymxl
KEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdFBheWxvYWQuZ3ByKCksIDApLCBib3hlci5mcHIo
KSk7CisgICAgICAgIAorICAgIGJveERvdWJsZShib3hlci5mcHIoKSwgcmVzdWx0VGFnLmdwcigp
LCByZXN1bHRQYXlsb2FkLmdwcigpKTsKKyAgICAgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAg
ZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgCisgICAgcG9zaXRpdmUubGluaygmbV9qaXQp
OworICAgICAgICAKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRh
ZyksIHJlc3VsdFRhZy5ncHIoKSk7CisgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdFBh
eWxvYWQuZ3ByKCkpOworICAgICAgICAKKyAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBtX2NvbXBp
bGVJbmRleCk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlS25vd25D
b25zdGFudEFyaXRoT3AoTm9kZVR5cGUgb3AsIE5vZGVJbmRleCByZWdDaGlsZCwgTm9kZUluZGV4
IGltbUNoaWxkLCBib29sIGNvbW11dGUpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgcmVnQXJnKHRo
aXMsIHJlZ0NoaWxkKTsKKyAgICByZWdBcmcuZmlsbCgpOworICAgIAorICAgIGlmIChyZWdBcmcu
aXNEb3VibGUoKSkgeworICAgICAgICBGUFJSZWcgcmVnQXJnRlBSID0gcmVnQXJnLmZwcigpOwor
ICAgICAgICBGUFJUZW1wb3JhcnkgaW1tKHRoaXMpOworICAgICAgICBGUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIHJlZ0FyZyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwor
ICAgICAgICBGUFJSZWcgaW1tRlBSID0gaW1tLmZwcigpOworICAgICAgICBGUFJSZWcgcmVzdWx0
RlBSID0gcmVzdWx0LmZwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2gu
Z3ByKCk7CisgICAgICAgIHVzZShyZWdDaGlsZCk7CisgICAgICAgIHVzZShpbW1DaGlsZCk7CisK
KyAgICAgICAgaW50MzJfdCBpbW0zMiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KGltbUNoaWxkKTsK
KyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoaW1tMzIpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUoc2NyYXRjaEdQUiwgaW1tRlBSKTsKKwor
ICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgICAgIGNh
c2UgQXJpdGhBZGQ6CisgICAgICAgICAgICBtX2ppdC5hZGREb3VibGUocmVnQXJnRlBSLCBpbW1G
UFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIGNh
c2UgQXJpdGhTdWI6CisgICAgICAgICAgICBtX2ppdC5zdWJEb3VibGUocmVnQXJnRlBSLCBpbW1G
UFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0K
KworICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0RlBSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hp
bGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdQ
UlJlZyByZWdBcmdUYWdHUFIgPSByZWdBcmcudGFnR1BSKCk7CisgICAgR1BSUmVnIHJlZ0FyZ1Bh
eWxvYWRHUFIgPSByZWdBcmcucGF5bG9hZEdQUigpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHRU
YWcodGhpcywgcmVnQXJnKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzLCBy
ZWdBcmcsIGZhbHNlKTsKKyAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0VGFnLmdwcigp
OworICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKKyAg
ICBGUFJUZW1wb3JhcnkgdG1wMSh0aGlzKTsKKyAgICBGUFJUZW1wb3JhcnkgdG1wMih0aGlzKTsK
KyAgICBGUFJSZWcgdG1wMUZQUiA9IHRtcDEuZnByKCk7CisgICAgRlBSUmVnIHRtcDJGUFIgPSB0
bXAyLmZwcigpOworICAgIHVzZShyZWdDaGlsZCk7CisgICAgdXNlKGltbUNoaWxkKTsKKworICAg
IEpJVENvbXBpbGVyOjpKdW1wIG5vdEludDsKKyAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQz
MkNvbnN0YW50KGltbUNoaWxkKTsKKworICAgIGlmICghaXNLbm93bk51bWVyaWMocmVnQ2hpbGQp
KQorICAgICAgICBub3RJbnQgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIHJlZ0FyZ1RhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CisgICAg
CisgICAgSklUQ29tcGlsZXI6Okp1bXAgb3ZlcmZsb3c7CisKKyAgICBzd2l0Y2ggKG9wKSB7Cisg
ICAgY2FzZSBWYWx1ZUFkZDoKKyAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBvdmVyZmxvdyA9
IG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgcmVnQXJnUGF5bG9h
ZEdQUiwgSW1tMzIoaW1tKSwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAgIGJyZWFrOworICAg
ICAgICAKKyAgICBjYXNlIEFyaXRoU3ViOgorICAgICAgICBvdmVyZmxvdyA9IG1faml0LmJyYW5j
aFN1YjMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgcmVnQXJnUGF5bG9hZEdQUiwgSW1tMzIo
aW1tKSwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlc3VsdFRhZ0dQUik7Cisg
ICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAKKyAgICBvdmVy
Zmxvdy5saW5rKCZtX2ppdCk7CisgICAgLy8gZmlyc3QgZGVhbCB3aXRoIG92ZXJmbG93IGNhc2UK
KyAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShyZWdBcmdQYXlsb2FkR1BSLCB0bXAyRlBS
KTsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihpbW0pLCByZXN1bHRQYXlsb2FkR1BSKTsK
KyAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShyZXN1bHRQYXlsb2FkR1BSLCB0bXAxRlBS
KTsKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICBjYXNlIEFyaXRo
QWRkOgorICAgICAgICBtX2ppdC5hZGREb3VibGUodG1wMUZQUiwgdG1wMkZQUik7CisgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIEFyaXRoU3ViOgorICAgICAgICBtX2ppdC5zdWJE
b3VibGUodG1wMUZQUiwgdG1wMkZQUik7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAor
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmVDYXNlQ29udmVydGVkVG9JbnQ7CisgICAgCisgICAg
aWYgKG9wID09IFZhbHVlQWRkKSB7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBmYWls
dXJlQ2FzZXM7CisgICAgICAgIG1faml0LmJyYW5jaENvbnZlcnREb3VibGVUb0ludDMyKHRtcDJG
UFIsIHJlc3VsdFBheWxvYWRHUFIsIGZhaWx1cmVDYXNlcywgdG1wMUZQUik7CisgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVzdWx0VGFnR1BSKTsK
KyAgICAgICAgZG9uZUNhc2VDb252ZXJ0ZWRUb0ludCA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAg
CisgICAgICAgIGZhaWx1cmVDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgfQorICAgIAorICAgIGJv
eERvdWJsZSh0bXAyRlBSLCByZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpOworICAgICAg
ICAKKyAgICBpZiAoIWlzS25vd25OdW1lcmljKHJlZ0NoaWxkKSkgeworICAgICAgICBBU1NFUlQo
bm90SW50LmlzU2V0KCkpOworICAgICAgICBBU1NFUlQob3AgPT0gVmFsdWVBZGQpOworICAgICAg
ICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmVDYXNlV2FzTnVtYmVyID0gbV9q
aXQuanVtcCgpOworICAgICAgICAgICAgCisgICAgICAgIG5vdEludC5saW5rKCZtX2ppdCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0VGFnR1BS
LCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgaWYgKGNvbW11dGUpCisgICAgICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVlQWRkTm90TnVtYmVyLCByZXN1bHRUYWdHUFIsIHJl
c3VsdFBheWxvYWRHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihpbW0pLCByZWdBcmdUYWdHUFIs
IHJlZ0FyZ1BheWxvYWRHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblZhbHVlQWRkTm90TnVtYmVyLCByZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxv
YWRHUFIsIHJlZ0FyZ1RhZ0dQUiwgcmVnQXJnUGF5bG9hZEdQUiwgTWFjcm9Bc3NlbWJsZXI6Oklt
bTMyKGltbSkpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdFRhZ0dQUiwg
cmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAgICAgICAKKyAgICAgICAgZG9uZUNhc2VXYXNOdW1i
ZXIubGluaygmbV9qaXQpOworICAgIH0KKyAgICAKKyAgICBkb25lLmxpbmsoJm1faml0KTsKKyAg
ICBpZiAoZG9uZUNhc2VDb252ZXJ0ZWRUb0ludC5pc1NldCgpKQorICAgICAgICBkb25lQ2FzZUNv
bnZlcnRlZFRvSW50LmxpbmsoJm1faml0KTsKKworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFn
R1BSLCByZXN1bHRQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRF
eHBsaWNpdGx5KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVCYXNp
Y0FyaXRoT3AoTm9kZVR5cGUgb3AsIE5vZGUgJm5vZGUpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQg
YXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMs
IG5vZGUuY2hpbGQyKCkpOworICAgIGFyZzEuZmlsbCgpOworICAgIGFyZzIuZmlsbCgpOworCisg
ICAgaWYgKGFyZzEuaXNEb3VibGUoKSAmJiBhcmcyLmlzRG91YmxlKCkpIHsKKyAgICAgICAgRlBS
UmVnIGFyZzFGUFIgPSBhcmcxLmZwcigpOworICAgICAgICBGUFJSZWcgYXJnMkZQUiA9IGFyZzIu
ZnByKCk7CisgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYXJnMSk7CisgICAgICAg
IGFyZzEudXNlKCk7CisgICAgICAgIGFyZzIudXNlKCk7CisgICAgICAgIHN3aXRjaCAob3ApIHsK
KyAgICAgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICAgICAgY2FzZSBBcml0aEFkZDoKKyAgICAgICAg
ICAgIG1faml0LmFkZERvdWJsZShhcmcxRlBSLCBhcmcyRlBSLCByZXN1bHQuZnByKCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aFN1YjoKKyAg
ICAgICAgICAgIG1faml0LnN1YkRvdWJsZShhcmcxRlBSLCBhcmcyRlBSLCByZXN1bHQuZnByKCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aE11
bDoKKyAgICAgICAgICAgIG1faml0Lm11bERvdWJsZShhcmcxRlBSLCBhcmcyRlBSLCByZXN1bHQu
ZnByKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAg
ICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVu
Q2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGUFJUZW1w
b3JhcnkgdG1wMSh0aGlzKTsKKyAgICBGUFJUZW1wb3JhcnkgdG1wMih0aGlzKTsKKyAgICBGUFJS
ZWcgdG1wMUZQUiA9IHRtcDEuZnByKCk7CisgICAgRlBSUmVnIHRtcDJGUFIgPSB0bXAyLmZwcigp
OworICAgIAorICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcywgYXJnMS5pc0RvdWJsZSgp
ID8gYXJnMiA6IGFyZzEpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIGFy
ZzEuaXNEb3VibGUoKSA/IGFyZzIgOiBhcmcxLCBmYWxzZSk7CisgICAgR1BSUmVnIHJlc3VsdFRh
Z0dQUiA9IHJlc3VsdFRhZy5ncHIoKTsKKyAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJl
c3VsdFBheWxvYWQuZ3ByKCk7CisKKyAgICBHUFJSZWcgYXJnMVRhZ0dQUiA9IEludmFsaWRHUFJS
ZWc7CisgICAgR1BSUmVnIGFyZzFQYXlsb2FkR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBHUFJS
ZWcgYXJnMlRhZ0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgR1BSUmVnIGFyZzJQYXlsb2FkR1BS
ID0gSW52YWxpZEdQUlJlZzsKKyAgICBHUFJUZW1wb3JhcnkgdG1wVGFnKHRoaXMpOworICAgIEdQ
UlRlbXBvcmFyeSB0bXBQYXlsb2FkKHRoaXMpOworCisgICAgaWYgKGFyZzEuaXNEb3VibGUoKSkg
eworICAgICAgICBhcmcxVGFnR1BSID0gdG1wVGFnLmdwcigpOworICAgICAgICBhcmcxUGF5bG9h
ZEdQUiA9IHRtcFBheWxvYWQuZ3ByKCk7CisgICAgICAgIGJveERvdWJsZShhcmcxLmZwcigpLCBh
cmcxVGFnR1BSLCBhcmcxUGF5bG9hZEdQUik7CisgICAgICAgIGFyZzJUYWdHUFIgPSBhcmcyLnRh
Z0dQUigpOworICAgICAgICBhcmcyUGF5bG9hZEdQUiA9IGFyZzIucGF5bG9hZEdQUigpOworICAg
IH0gZWxzZSBpZiAoYXJnMi5pc0RvdWJsZSgpKSB7CisgICAgICAgIGFyZzFUYWdHUFIgPSBhcmcx
LnRhZ0dQUigpOworICAgICAgICBhcmcxUGF5bG9hZEdQUiA9IGFyZzEucGF5bG9hZEdQUigpOwor
ICAgICAgICBhcmcyVGFnR1BSID0gdG1wVGFnLmdwcigpOworICAgICAgICBhcmcyUGF5bG9hZEdQ
UiA9IHRtcFBheWxvYWQuZ3ByKCk7CisgICAgICAgIGJveERvdWJsZShhcmcyLmZwcigpLCBhcmcy
VGFnR1BSLCBhcmcyUGF5bG9hZEdQUik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXJnMVRhZ0dQ
UiA9IGFyZzEudGFnR1BSKCk7CisgICAgICAgIGFyZzFQYXlsb2FkR1BSID0gYXJnMS5wYXlsb2Fk
R1BSKCk7CisgICAgICAgIGFyZzJUYWdHUFIgPSBhcmcyLnRhZ0dQUigpOworICAgICAgICBhcmcy
UGF5bG9hZEdQUiA9IGFyZzIucGF5bG9hZEdQUigpOworICAgIH0KKworICAgIGFyZzEudXNlKCk7
CisgICAgYXJnMi51c2UoKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBjaGlsZDFOb3RJ
bnQ7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgY2hpbGQyTm90SW50OworICAgIEpJVENvbXBpbGVy
OjpKdW1wTGlzdCBvdmVyZmxvdzsKKyAgICAKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUu
Y2hpbGQxKCkpKQorICAgICAgICBjaGlsZDFOb3RJbnQgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIGFyZzFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQz
MlRhZykpOworCisgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkKKyAgICAg
ICAgY2hpbGQyTm90SW50ID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBhcmcyVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICAKKyAg
ICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICBjYXNlIEFyaXRoQWRkOiB7
CisgICAgICAgIG92ZXJmbG93LmFwcGVuZChtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxl
cjo6T3ZlcmZsb3csIGFyZzFQYXlsb2FkR1BSLCBhcmcyUGF5bG9hZEdQUiwgcmVzdWx0UGF5bG9h
ZEdQUikpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJpdGhT
dWI6IHsKKyAgICAgICAgb3ZlcmZsb3cuYXBwZW5kKG1faml0LmJyYW5jaFN1YjMyKE1hY3JvQXNz
ZW1ibGVyOjpPdmVyZmxvdywgYXJnMVBheWxvYWRHUFIsIGFyZzJQYXlsb2FkR1BSLCByZXN1bHRQ
YXlsb2FkR1BSKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBB
cml0aE11bDogeworICAgICAgICBvdmVyZmxvdy5hcHBlbmQobV9qaXQuYnJhbmNoTXVsMzIoTWFj
cm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBhcmcxUGF5bG9hZEdQUiwgYXJnMlBheWxvYWRHUFIsIHJl
c3VsdFBheWxvYWRHUFIpKTsKKyAgICAgICAgb3ZlcmZsb3cuYXBwZW5kKG1faml0LmJyYW5jaFRl
c3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0UGF5bG9hZEdQUikpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpJbnQzMlRhZyksIHJlc3VsdFRhZ0dQUik7CisgICAgICAgIAorICAgIEpJVENvbXBpbGVy
OjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXBM
aXN0IGhhdmVGUFJBcmd1bWVudHM7CisKKyAgICBvdmVyZmxvdy5saW5rKCZtX2ppdCk7CisgICAg
ICAgIAorICAgIC8vIGJvdGggYXJndW1lbnRzIGFyZSBpbnRlZ2VycworICAgIG1faml0LmNvbnZl
cnRJbnQzMlRvRG91YmxlKGFyZzFQYXlsb2FkR1BSLCB0bXAxRlBSKTsKKyAgICBtX2ppdC5jb252
ZXJ0SW50MzJUb0RvdWJsZShhcmcyUGF5bG9hZEdQUiwgdG1wMkZQUik7CisgICAgICAgIAorICAg
IGhhdmVGUFJBcmd1bWVudHMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgIAorICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCBub3ROdW1iZXJzOworICAgICAgICAKKyAgICBKSVRDb21waWxl
cjo6SnVtcCBjaGlsZDJOb3RJbnQyOworICAgICAgICAKKyAgICBpZiAoIWlzS25vd25JbnRlZ2Vy
KG5vZGUuY2hpbGQxKCkpKSB7CisgICAgICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwor
ICAgICAgICBjaGlsZDFOb3RJbnQubGluaygmbV9qaXQpOworICAgICAgICAgICAgCisgICAgICAg
IGlmICghaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgICAgIEFTU0VS
VChvcCA9PSBWYWx1ZUFkZCk7CisgICAgICAgICAgICBub3ROdW1iZXJzLmFwcGVuZChtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBhcmcxVGFnR1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAgICAgICB9CisgICAgCisgICAgICAgIGlm
IChhcmcxLmlzRG91YmxlKCkpCisgICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKGFyZzEuZnBy
KCksIHRtcDFGUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB1bmJveERvdWJsZShhcmcx
VGFnR1BSLCBhcmcxUGF5bG9hZEdQUiwgdG1wMUZQUiwgc2NyYXRjaC5mcHIoKSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgLy8gY2hpbGQxIGlzIGNvbnZlcnRlZCB0byBhIGRvdWJsZTsgY2hpbGQy
IG1heSBlaXRoZXIgYmUgYW4gaW50IG9yCisgICAgICAgIC8vIGEgYm94ZWQgZG91YmxlCisgICAg
ICAgICAgICAKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkgewor
ICAgICAgICAgICAgaWYgKGlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQyKCkpKQorICAgICAgICAg
ICAgICAgIGNoaWxkMk5vdEludDIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIGFyZzJUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOworICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG9wID09IFZhbHVlQWRkKTsK
KyAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBjaGlsZDJJc0ludCA9IG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgYXJnMlRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSk7CisgICAgICAgICAgICAgICAgbm90TnVtYmVycy5hcHBlbmQobV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgYXJnMlRhZ0dQUiwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICAgICAgICAgICAgICBjaGlsZDJO
b3RJbnQyID0gbV9qaXQuanVtcCgpOworICAgICAgICAgICAgICAgIGNoaWxkMklzSW50Lmxpbmso
Jm1faml0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IC8vIGNoaWxkIDIgaXMgZGVmaW5pdGVseSBhbiBpbnRlZ2VyCisgICAgICAgIG1faml0LmNvbnZl
cnRJbnQzMlRvRG91YmxlKGFyZzJQYXlsb2FkR1BSLCB0bXAyRlBSKTsKKyAgICAgICAgICAgIAor
ICAgICAgICBoYXZlRlBSQXJndW1lbnRzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgIH0KKyAg
ICAgICAgCisgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkgeworICAgICAg
ICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgY2hpbGQyTm90SW50Lmxpbmso
Jm1faml0KTsKKyAgICAgICAgICAgIAorICAgICAgICBpZiAoIWlzS25vd25OdW1lcmljKG5vZGUu
Y2hpbGQyKCkpKSB7CisgICAgICAgICAgICBBU1NFUlQob3AgPT0gVmFsdWVBZGQpOworICAgICAg
ICAgICAgbm90TnVtYmVycy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgYXJnMlRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykp
KTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIC8vIGNoaWxkMSBpcyBkZWZpbml0
ZWx5IGFuIGludGVnZXIsIGFuZCBjaGlsZCAyIGlzIGRlZmluaXRlbHkgbm90CisgICAgICAgIG1f
aml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGFyZzFQYXlsb2FkR1BSLCB0bXAxRlBSKTsKKyAgICAg
ICAgICAgIAorICAgICAgICBpZiAoY2hpbGQyTm90SW50Mi5pc1NldCgpKQorICAgICAgICAgICAg
Y2hpbGQyTm90SW50Mi5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKGFy
ZzIuaXNEb3VibGUoKSkKKyAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoYXJnMi5mcHIoKSwg
dG1wMkZQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHVuYm94RG91YmxlKGFyZzJUYWdH
UFIsIGFyZzJQYXlsb2FkR1BSLCB0bXAyRlBSLCBzY3JhdGNoLmZwcigpKTsKKyAgICB9CisgICAg
ICAgIAorICAgIGhhdmVGUFJBcmd1bWVudHMubGluaygmbV9qaXQpOworICAgICAgICAKKyAgICBz
d2l0Y2ggKG9wKSB7CisgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICBjYXNlIEFyaXRoQWRkOgorICAg
ICAgICBtX2ppdC5hZGREb3VibGUodG1wMkZQUiwgdG1wMUZQUik7CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCisgICAgY2FzZSBBcml0aFN1YjoKKyAgICAgICAgbV9qaXQuc3ViRG91Ymxl
KHRtcDJGUFIsIHRtcDFGUFIpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNh
c2UgQXJpdGhNdWw6CisgICAgICAgIG1faml0Lm11bERvdWJsZSh0bXAyRlBSLCB0bXAxRlBSKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9u
ZUNhc2VDb252ZXJ0ZWRUb0ludDsKKyAgICAKKyAgICBpZiAob3AgPT0gVmFsdWVBZGQpIHsKKyAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKKyAgICAgICAgbV9qaXQu
YnJhbmNoQ29udmVydERvdWJsZVRvSW50MzIodG1wMUZQUiwgcmVzdWx0UGF5bG9hZEdQUiwgZmFp
bHVyZUNhc2VzLCB0bXAyRlBSKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6SW50MzJUYWcpLCByZXN1bHRUYWdHUFIpOworICAgICAgICAKKyAgICAgICAgZG9uZUNh
c2VDb252ZXJ0ZWRUb0ludCA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgCisgICAgICAgIGZhaWx1
cmVDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgfQorICAgICAgICAKKyAgICBib3hEb3VibGUodG1w
MUZQUiwgcmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgCisgICAgaWYg
KCFub3ROdW1iZXJzLmVtcHR5KCkpIHsKKyAgICAgICAgQVNTRVJUKG9wID09IFZhbHVlQWRkKTsK
KyAgICAgICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lQ2FzZVdhc051bWJl
ciA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgIAorICAgICAgICBub3ROdW1iZXJzLmxpbmso
Jm1faml0KTsKKyAgICAgICAgICAgIAorICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhy
ZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblZhbHVlQWRkTm90TnVtYmVyLCByZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIs
IGFyZzFUYWdHUFIsIGFyZzFQYXlsb2FkR1BSLCBhcmcyVGFnR1BSLCBhcmcyUGF5bG9hZEdQUik7
CisgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0VGFnR1BSLCByZXN1bHRQYXls
b2FkR1BSKTsKKworICAgICAgICBkb25lQ2FzZVdhc051bWJlci5saW5rKCZtX2ppdCk7CisgICAg
fQorICAgIAorICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIGlmIChkb25lQ2FzZUNvbnZlcnRl
ZFRvSW50LmlzU2V0KCkpCisgICAgICAgIGRvbmVDYXNlQ29udmVydGVkVG9JbnQubGluaygmbV9q
aXQpOworICAgICAgICAKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5
bG9hZEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Cit9
CisKK0pJVENvbXBpbGVyOjpDYWxsIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKEdQUlJl
ZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHJlc3VsdFRhZ0dQUiwgR1BSUmVnIHJlc3VsdFBheWxv
YWRHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRD
b21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCwgTm9kZVR5cGUgbm9kZVR5cGUpCit7CisgICAg
QVNTRVJUKG5vZGVUeXBlID09IEdldEJ5SWQgfHwgbm9kZVR5cGUgPT0gR2V0TWV0aG9kKTsKKwor
ICAgIG1faml0LmJlZ2luVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKCk7CisgICAgSklUQ29tcGlsZXI6
OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7CisgICAgSklUQ29tcGlsZXI6Okp1bXAg
c3RydWN0dXJlQ2hlY2sgPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goSklUQ29tcGlsZXI6Ok5v
dEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKSk7CisgICAgbV9qaXQuZW5kVW5pbnRl
cnJ1cHRlZFNlcXVlbmNlKCk7CisgICAgCisgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6
QWRkcmVzcyhiYXNlUGF5bG9hZEdQUiwgSlNPYmplY3Q6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdl
KCkpLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFj
dCB0YWdMb2FkV2l0aFBhdGNoID0gbV9qaXQubG9hZDMyV2l0aENvbXBhY3RBZGRyZXNzT2Zmc2V0
UGF0Y2goSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0UGF5bG9hZEdQUiwgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSwgcmVzdWx0VGFnR1BSKTsK
KyAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdCBwYXlsb2FkTG9hZFdpdGhQYXRjaCA9
IG1faml0LmxvYWQzMldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBhdGNoKEpJVENvbXBpbGVyOjpB
ZGRyZXNzKHJlc3VsdFBheWxvYWRHUFIsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAKKyAgICBK
SVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworCisgICAgc3RydWN0dXJlQ2hl
Y2subGluaygmbV9qaXQpOworICAgIAorICAgIGlmIChzbG93UGF0aFRhcmdldC5pc1NldCgpKQor
ICAgICAgICBzbG93UGF0aFRhcmdldC5saW5rKCZtX2ppdCk7CisgICAgCisgICAgSklUQ29tcGls
ZXI6OkxhYmVsIHNsb3dDYXNlID0gbV9qaXQubGFiZWwoKTsKKworICAgIHNpbGVudFNwaWxsQWxs
UmVnaXN0ZXJzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAgSklUQ29tcGls
ZXI6OkNhbGwgZnVuY3Rpb25DYWxsID0gY2FsbE9wZXJhdGlvbihub2RlVHlwZSA9PSBHZXRCeUlk
ID8gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplIDogb3BlcmF0aW9uR2V0TWV0aG9kT3B0aW1pemUs
IHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgYmFzZVBheWxvYWRHUFIsIGlkZW50aWZp
ZXIoaWRlbnRpZmllck51bWJlcikpOworICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0
VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAKKyAgICBkb25lLmxpbmsoJm1faml0KTsK
KyAgICAKKyAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsK
KworICAgIG1faml0LmFkZFByb3BlcnR5QWNjZXNzKFByb3BlcnR5QWNjZXNzUmVjb3JkKHN0cnVj
dHVyZVRvQ29tcGFyZSwgZnVuY3Rpb25DYWxsLCBzdHJ1Y3R1cmVDaGVjaywgdGFnTG9hZFdpdGhQ
YXRjaCwgcGF5bG9hZExvYWRXaXRoUGF0Y2gsIHNsb3dDYXNlLCBkb25lTGFiZWwsIHNhZmVDYXN0
PGludDhfdD4oYmFzZVBheWxvYWRHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHJlc3VsdFRhZ0dQUiks
IHNhZmVDYXN0PGludDhfdD4ocmVzdWx0UGF5bG9hZEdQUiksIHNhZmVDYXN0PGludDhfdD4oc2Ny
YXRjaEdQUikpKTsKKyAgICAKKyAgICByZXR1cm4gZnVuY3Rpb25DYWxsOworfQorCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVn
IHZhbHVlVGFnR1BSLCBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSLCBOb2RlSW5kZXggdmFsdWVJbmRl
eCwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQg
cHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQpCit7CisgICAgbV9qaXQu
YmVnaW5VbmludGVycnVwdGVkU2VxdWVuY2UoKTsKKyAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVs
UHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBzdHJ1Y3R1cmVD
aGVjayA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJ
VENvbXBpbGVyOjpBZGRyZXNzKGJhc2VQYXlsb2FkR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZWlu
dGVycHJldF9jYXN0PHZvaWQqPigtMSkpKTsKKyAgICBtX2ppdC5lbmRVbmludGVycnVwdGVkU2Vx
dWVuY2UoKTsKKworICAgIHdyaXRlQmFycmllcihiYXNlUGF5bG9hZEdQUiwgdmFsdWVUYWdHUFIs
IHZhbHVlSW5kZXgsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoR1BSKTsK
KworICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZVBheWxvYWRHUFIs
IEpTT2JqZWN0OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgc2NyYXRjaEdQUik7CisgICAg
SklUQ29tcGlsZXI6OkRhdGFMYWJlbDMyIHRhZ1N0b3JlV2l0aFBhdGNoID0gbV9qaXQuc3RvcmUz
MldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2godmFsdWVUYWdHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNz
KHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMudGFnKSkpOworICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWwzMiBwYXlsb2FkU3RvcmVXaXRo
UGF0Y2ggPSBtX2ppdC5zdG9yZTMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCh2YWx1ZVBheWxvYWRH
UFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKworICAgIEpJVENvbXBpbGVy
OjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICBzdHJ1Y3R1cmVDaGVjay5saW5rKCZt
X2ppdCk7CisKKyAgICBpZiAoc2xvd1BhdGhUYXJnZXQuaXNTZXQoKSkKKyAgICAgICAgc2xvd1Bh
dGhUYXJnZXQubGluaygmbV9qaXQpOworCisgICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dDYXNl
ID0gbV9qaXQubGFiZWwoKTsKKworICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRH
UFJSZWcpOworICAgIFZfREZHT3BlcmF0aW9uX0VKQ0kgb3B0aW1pemVkQ2FsbDsKKyAgICBpZiAo
bV9qaXQuc3RyaWN0TW9kZUZvcihhdChtX2NvbXBpbGVJbmRleCkuY29kZU9yaWdpbikpIHsKKyAg
ICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQorICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsK
KyAgICB9IGVsc2UgeworICAgICAgICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCisgICAgICAgICAg
ICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXpl
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0
QnlJZE5vblN0cmljdE9wdGltaXplOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBmdW5j
dGlvbkNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wdGltaXplZENhbGwsIHZhbHVlVGFnR1BSLCB2YWx1
ZVBheWxvYWRHUFIsIGJhc2VQYXlsb2FkR1BSLCBpZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIp
KTsKKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworCisgICAgZG9u
ZS5saW5rKCZtX2ppdCk7CisgICAgSklUQ29tcGlsZXI6OkxhYmVsIGRvbmVMYWJlbCA9IG1faml0
LmxhYmVsKCk7CisKKyAgICBtX2ppdC5hZGRQcm9wZXJ0eUFjY2VzcyhQcm9wZXJ0eUFjY2Vzc1Jl
Y29yZChzdHJ1Y3R1cmVUb0NvbXBhcmUsIGZ1bmN0aW9uQ2FsbCwgc3RydWN0dXJlQ2hlY2ssIEpJ
VENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0KHRhZ1N0b3JlV2l0aFBhdGNoLmxhYmVsKCkpLCBK
SVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFjdChwYXlsb2FkU3RvcmVXaXRoUGF0Y2gubGFiZWwo
KSksIHNsb3dDYXNlLCBkb25lTGFiZWwsIHNhZmVDYXN0PGludDhfdD4oYmFzZVBheWxvYWRHUFIp
LCBzYWZlQ2FzdDxpbnQ4X3Q+KHZhbHVlVGFnR1BSKSwgc2FmZUNhc3Q8aW50OF90Pih2YWx1ZVBh
eWxvYWRHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpKSk7Cit9CisKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNhY2hlZEdldE1ldGhvZChHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJl
ZyByZXN1bHRUYWdHUFIsIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSLCBHUFJSZWcgc2NyYXRjaEdQ
UiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhU
YXJnZXQpCit7CisgICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGw7CisgICAgSklUQ29tcGls
ZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3RUb0NvbXBhcmUsIHByb3RvT2JqLCBwcm90b1N0cnVjdFRv
Q29tcGFyZSwgcHV0RnVuY3Rpb247CisgICAgCisgICAgLy8gbV9qaXQuZW1pdExvYWRQYXlsb2Fk
KGJhc2VJbmRleCwgc2NyYXRjaEdQUik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgd3JvbmdTdHJ1
Y3R1cmUgPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBK
SVRDb21waWxlcjo6QWRkcmVzcyhiYXNlUGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIHN0cnVjdFRvQ29tcGFyZSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oLTEpKSk7CisgICAgcHJvdG9PYmogPSBtX2ppdC5tb3ZlV2l0aFBh
dGNoKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAg
ICBKSVRDb21waWxlcjo6SnVtcCB3cm9uZ1Byb3RvU3RydWN0dXJlID0gbV9qaXQuYnJhbmNoUHRy
V2l0aFBhdGNoKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVz
dWx0UGF5bG9hZEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHByb3RvU3RydWN0VG9D
b21wYXJlLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQq
PigtMSkpKTsKKyAgICAKKyAgICBwdXRGdW5jdGlvbiA9IG1faml0Lm1vdmVXaXRoUGF0Y2goSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoMCksIHJlc3VsdFBheWxvYWRHUFIpOworICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZXN1bHRUYWdHUFIpOworICAg
IAorICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgCisgICAg
d3JvbmdTdHJ1Y3R1cmUubGluaygmbV9qaXQpOworICAgIHdyb25nUHJvdG9TdHJ1Y3R1cmUubGlu
aygmbV9qaXQpOworICAgIAorICAgIHNsb3dDYWxsID0gY2FjaGVkR2V0QnlJZChiYXNlUGF5bG9h
ZEdQUiwgcmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBzY3JhdGNoR1BSLCBpZGVudGlm
aWVyTnVtYmVyLCBzbG93UGF0aFRhcmdldCwgR2V0TWV0aG9kKTsKKyAgICAKKyAgICBkb25lLmxp
bmsoJm1faml0KTsKKyAgICAKKyAgICBtX2ppdC5hZGRNZXRob2RHZXQoc2xvd0NhbGwsIHN0cnVj
dFRvQ29tcGFyZSwgcHJvdG9PYmosIHByb3RvU3RydWN0VG9Db21wYXJlLCBwdXRGdW5jdGlvbik7
Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21w
YXJlTnVsbChOb2RlSW5kZXggb3BlcmFuZCwgYm9vbCBpbnZlcnQpCit7CisgICAgSlNWYWx1ZU9w
ZXJhbmQgYXJnKHRoaXMsIG9wZXJhbmQpOworICAgIEdQUlJlZyBhcmdUYWdHUFIgPSBhcmcudGFn
R1BSKCk7CisgICAgR1BSUmVnIGFyZ1BheWxvYWRHUFIgPSBhcmcucGF5bG9hZEdQUigpOworCisg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcywgYXJnLCBmYWxzZSk7CisgICAgR1BS
UmVnIHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOworCisgICAgSklUQ29t
cGlsZXI6Okp1bXAgbm90Q2VsbDsKKyAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQpKQorICAg
ICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBh
cmdUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CisgICAgCisgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhhcmdQYXlsb2FkR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAgbV9qaXQudGVzdDgoaW52
ZXJ0ID8gSklUQ29tcGlsZXI6Olplcm8gOiBKSVRDb21waWxlcjo6Tm9uWmVybywgSklUQ29tcGls
ZXI6OkFkZHJlc3MocmVzdWx0UGF5bG9hZEdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQp
LCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAKKyAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQp
KSB7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAg
ICAgIAorICAgICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKKyAgICAgICAgLy8gbnVsbCBvciB1
bmRlZmluZWQ/CisgICAgICAgIENPTVBJTEVfQVNTRVJUKChKU1ZhbHVlOjpVbmRlZmluZWRUYWcg
fCAxKSA9PSBKU1ZhbHVlOjpOdWxsVGFnLCBVbmRlZmluZWRUYWdfT1JfMV9FUVVBTFNfTnVsbFRh
Zyk7CisgICAgICAgIG1faml0Lm1vdmUoYXJnVGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAg
ICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdFBheWxvYWRHUFIpOworICAg
ICAgICBtX2ppdC5jb21wYXJlMzIoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Ok5vdEVxdWFsIDogSklU
Q29tcGlsZXI6OkVxdWFsLCByZXN1bHRQYXlsb2FkR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
TnVsbFRhZyksIHJlc3VsdFBheWxvYWRHUFIpOworCisgICAgICAgIGRvbmUubGluaygmbV9qaXQp
OworICAgIH0KKyAgICAKKyAgICBib29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG1fY29t
cGlsZUluZGV4KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVw
aG9sZUJyYW5jaE51bGwoTm9kZUluZGV4IG9wZXJhbmQsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5k
ZXgsIGJvb2wgaW52ZXJ0KQoreworICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2Rl
SW5kZXgpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2VuQmxvY2tJbmRl
eCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRha2VuQmxvY2tJ
bmRleCgpOworICAgIAorICAgIGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEpKSB7CisgICAgICAg
IGludmVydCA9ICFpbnZlcnQ7CisgICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CisgICAg
ICAgIHRha2VuID0gbm90VGFrZW47CisgICAgICAgIG5vdFRha2VuID0gdG1wOworICAgIH0KKwor
ICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBvcGVyYW5kKTsKKyAgICBHUFJSZWcgYXJnVGFn
R1BSID0gYXJnLnRhZ0dQUigpOworICAgIEdQUlJlZyBhcmdQYXlsb2FkR1BSID0gYXJnLnBheWxv
YWRHUFIoKTsKKyAgICAKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGFyZyk7CisgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6
SnVtcCBub3RDZWxsOworICAgIAorICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZCkpCisgICAg
ICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGFy
Z1RhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKKyAgICAKKyAgICBtX2pp
dC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGFyZ1BheWxvYWRHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hU
ZXN0OChpbnZlcnQgPyBKSVRDb21waWxlcjo6WmVybyA6IEpJVENvbXBpbGVyOjpOb25aZXJvLCBK
SVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
KSksIHRha2VuKTsKKyAgICAKKyAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQpKSB7CisgICAg
ICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKKyAgICAgICAgCisgICAgICAg
IG5vdENlbGwubGluaygmbV9qaXQpOworICAgICAgICAvLyBudWxsIG9yIHVuZGVmaW5lZD8KKyAg
ICAgICAgQ09NUElMRV9BU1NFUlQoKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyB8IDEpID09IEpTVmFs
dWU6Ok51bGxUYWcsIFVuZGVmaW5lZFRhZ19PUl8xX0VRVUFMU19OdWxsVGFnKTsKKyAgICAgICAg
bV9qaXQubW92ZShhcmdUYWdHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0Lm9yMzIoVHJ1
c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNo
MzIoaW52ZXJ0ID8gSklUQ29tcGlsZXI6Ok5vdEVxdWFsIDogSklUQ29tcGlsZXI6OkVxdWFsLCBy
ZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykpLCB0
YWtlbik7CisgICAgfQorICAgIAorICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQor
ICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7Cit9CisKK2Jvb2wgU3Bl
Y3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGFyZU51bGwoTm9kZSYgbm9kZSwgTm9kZUlu
ZGV4IG9wZXJhbmQsIGJvb2wgaW52ZXJ0KQoreworICAgIE5vZGVJbmRleCBicmFuY2hOb2RlSW5k
ZXggPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOworICAgIGlmIChicmFuY2hOb2RlSW5kZXggIT0g
Tm9Ob2RlKSB7CisgICAgICAgIEFTU0VSVChub2RlLmFkanVzdGVkUmVmQ291bnQoKSA9PSAxKTsK
KyAgICAgICAgCisgICAgICAgIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKG9wZXJh
bmQsIGJyYW5jaE5vZGVJbmRleCwgaW52ZXJ0KTsKKyAgICAKKyAgICAgICAgdXNlKG5vZGUuY2hp
bGQxKCkpOworICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7CisgICAgICAgIG1fY29tcGlsZUlu
ZGV4ID0gYnJhbmNoTm9kZUluZGV4OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbChvcGVy
YW5kLCBpbnZlcnQpOworICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlJiBub2RlLCBOb2RlSW5k
ZXggYnJhbmNoTm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBj
b25kLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCit7CisgICAgTm9kZSYgYnJh
bmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJy
YW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJy
YW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CisKKyAgICBKSVRDb21waWxlcjo6UmVzdWx0
Q29uZGl0aW9uIGNhbGxSZXN1bHRDb25kaXRpb24gPSBKSVRDb21waWxlcjo6Tm9uWmVybzsKKwor
ICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8gdGhlIHRha2VuIGJs
b2NrLgorICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRha2Vu
ICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91Z2guCisg
ICAgaWYgKHRha2VuID09IChtX2Jsb2NrICsgMSkpIHsKKyAgICAgICAgY29uZCA9IEpJVENvbXBp
bGVyOjppbnZlcnQoY29uZCk7CisgICAgICAgIGNhbGxSZXN1bHRDb25kaXRpb24gPSBKSVRDb21w
aWxlcjo6WmVybzsKKyAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0YWtlbjsKKyAgICAgICAgdGFr
ZW4gPSBub3RUYWtlbjsKKyAgICAgICAgbm90VGFrZW4gPSB0bXA7CisgICAgfQorCisgICAgSlNW
YWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlT3BlcmFu
ZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIEdQUlJlZyBhcmcxVGFnR1BSID0gYXJn
MS50YWdHUFIoKTsKKyAgICBHUFJSZWcgYXJnMVBheWxvYWRHUFIgPSBhcmcxLnBheWxvYWRHUFIo
KTsKKyAgICBHUFJSZWcgYXJnMlRhZ0dQUiA9IGFyZzIudGFnR1BSKCk7CisgICAgR1BSUmVnIGFy
ZzJQYXlsb2FkR1BSID0gYXJnMi5wYXlsb2FkR1BSKCk7CisgICAgCisgICAgSklUQ29tcGlsZXI6
Okp1bXBMaXN0IHNsb3dQYXRoOworICAgIAorICAgIGlmIChpc0tub3duTm90SW50ZWdlcihub2Rl
LmNoaWxkMSgpKSB8fCBpc0tub3duTm90SW50ZWdlcihub2RlLmNoaWxkMigpKSkgeworICAgICAg
ICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworCisgICAgICAgIGFyZzEudXNlKCk7CisgICAgICAgIGFyZzIudXNlKCk7CisK
KyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihoZWxwZXJG
dW5jdGlvbiwgcmVzdWx0R1BSLCBhcmcxVGFnR1BSLCBhcmcxUGF5bG9hZEdQUiwgYXJnMlRhZ0dQ
UiwgYXJnMlBheWxvYWRHUFIpOworCisgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0
MzIoY2FsbFJlc3VsdENvbmRpdGlvbiwgcmVzdWx0R1BSKSwgdGFrZW4pOworICAgIH0gZWxzZSB7
CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgCisgICAgICAgIGFyZzEudXNlKCk7CisgICAgICAg
IGFyZzIudXNlKCk7CisKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgp
KSkKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIGFyZzFUYWdHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6SW50MzJUYWcpKSk7CisgICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGls
ZDIoKSkpCisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBhcmcyVGFnR1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkludDMyVGFnKSkpOworICAgIAorICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJh
bmNoMzIoY29uZCwgYXJnMVBheWxvYWRHUFIsIGFyZzJQYXlsb2FkR1BSKSwgdGFrZW4pOworICAg
IAorICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKCkpIHx8ICFpc0tub3du
SW50ZWdlcihub2RlLmNoaWxkMigpKSkgeworICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1
bXAoKSwgbm90VGFrZW4pOworICAgIAorICAgICAgICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQp
OworICAgIAorICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oaGVscGVyRnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJn
MVRhZ0dQUiwgYXJnMVBheWxvYWRHUFIsIGFyZzJUYWdHUFIsIGFyZzJQYXlsb2FkR1BSKTsKKyAg
ICAgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAgICAgCisg
ICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDMyKGNhbGxSZXN1bHRDb25kaXRp
b24sIHJlc3VsdEdQUiksIHRha2VuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChub3RU
YWtlbiAhPSAobV9ibG9jayArIDEpKQorICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBu
b3RUYWtlbik7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVl
cGhvbGVDb21wYXJlKE5vZGUmIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKK3sKKyAgICBKU1Zh
bHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5k
IGFyZzIodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgR1BSUmVnIGFyZzFUYWdHUFIgPSBhcmcx
LnRhZ0dQUigpOworICAgIEdQUlJlZyBhcmcxUGF5bG9hZEdQUiA9IGFyZzEucGF5bG9hZEdQUigp
OworICAgIEdQUlJlZyBhcmcyVGFnR1BSID0gYXJnMi50YWdHUFIoKTsKKyAgICBHUFJSZWcgYXJn
MlBheWxvYWRHUFIgPSBhcmcyLnBheWxvYWRHUFIoKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6
SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgCisgICAgaWYgKGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUu
Y2hpbGQxKCkpIHx8IGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAg
IEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BS
ID0gcmVzdWx0LmdwcigpOworICAgIAorICAgICAgICBhcmcxLnVzZSgpOworICAgICAgICBhcmcy
LnVzZSgpOworCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIGNhbGxPcGVyYXRp
b24oaGVscGVyRnVuY3Rpb24sIHJlc3VsdFBheWxvYWRHUFIsIGFyZzFUYWdHUFIsIGFyZzFQYXls
b2FkR1BSLCBhcmcyVGFnR1BSLCBhcmcyUGF5bG9hZEdQUik7CisgICAgICAgIAorICAgICAgICBi
b29sZWFuUmVzdWx0KHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHRQYXlsb2FkKHRoaXMsIGFyZzEsIGZhbHNlKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFBh
eWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOworCisgICAgICAgIGFyZzEudXNlKCk7Cisg
ICAgICAgIGFyZzIudXNlKCk7CisgICAgCisgICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9k
ZS5jaGlsZDEoKSkpCisgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBhcmcxVGFnR1BSLCBKSVRDb21waWxlcjo6VHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOworICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2Vy
KG5vZGUuY2hpbGQyKCkpKQorICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYXJnMlRhZ0dQUiwgSklUQ29tcGlsZXI6OlRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKKworICAgICAgICBtX2ppdC5jb21wYXJl
MzIoY29uZCwgYXJnMVBheWxvYWRHUFIsIGFyZzJQYXlsb2FkR1BSLCByZXN1bHRQYXlsb2FkR1BS
KTsKKyAgICAKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSB8fCAh
aXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIGhhdmVSZXN1bHQgPSBtX2ppdC5qdW1wKCk7CisgICAgCisgICAgICAgICAgICBzbG93
UGF0aC5saW5rKCZtX2ppdCk7CisgICAgICAgIAorICAgICAgICAgICAgc2lsZW50U3BpbGxBbGxS
ZWdpc3RlcnMocmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKGhl
bHBlckZ1bmN0aW9uLCByZXN1bHRQYXlsb2FkR1BSLCBhcmcxVGFnR1BSLCBhcmcxUGF5bG9hZEdQ
UiwgYXJnMlRhZ0dQUiwgYXJnMlBheWxvYWRHUFIpOworICAgICAgICAgICAgc2lsZW50RmlsbEFs
bFJlZ2lzdGVycyhyZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgCisgICAgICAgICAgICBtX2pp
dC5hbmRQdHIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgCisg
ICAgICAgICAgICBoYXZlUmVzdWx0LmxpbmsoJm1faml0KTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCwg
VXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICB9Cit9CisKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RFcShOb2RlJiBub2RlLCBOb2RlSW5k
ZXggYnJhbmNoTm9kZUluZGV4LCBib29sIGludmVydCkKK3sKKyAgICBOb2RlJiBicmFuY2hOb2Rl
ID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9k
ZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9k
ZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKworICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24g
d2lsbCBicmFuY2ggdG8gdGhlIHRha2VuIGJsb2NrLgorICAgIC8vIElmIHRha2VuIGlzIG5leHQs
IHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRha2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9u
IHNvIHdlIGNhbiBmYWxsIHRocm91Z2guCisgICAgaWYgKHRha2VuID09IChtX2Jsb2NrICsgMSkp
IHsKKyAgICAgICAgaW52ZXJ0ID0gIWludmVydDsKKyAgICAgICAgQmxvY2tJbmRleCB0bXAgPSB0
YWtlbjsKKyAgICAgICAgdGFrZW4gPSBub3RUYWtlbjsKKyAgICAgICAgbm90VGFrZW4gPSB0bXA7
CisgICAgfQorICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEo
KSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICBH
UFJSZWcgYXJnMVRhZ0dQUiA9IGFyZzEudGFnR1BSKCk7CisgICAgR1BSUmVnIGFyZzFQYXlsb2Fk
R1BSID0gYXJnMS5wYXlsb2FkR1BSKCk7CisgICAgR1BSUmVnIGFyZzJUYWdHUFIgPSBhcmcyLnRh
Z0dQUigpOworICAgIEdQUlJlZyBhcmcyUGF5bG9hZEdQUiA9IGFyZzIucGF5bG9hZEdQUigpOwor
ICAgIAorICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIGFyZzEsIGZhbHNlKTsK
KyAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7CisgICAg
CisgICAgYXJnMS51c2UoKTsKKyAgICBhcmcyLnVzZSgpOworICAgIAorICAgIGlmIChpc0tub3du
Q2VsbChub2RlLmNoaWxkMSgpKSAmJiBpc0tub3duQ2VsbChub2RlLmNoaWxkMigpKSkgeworICAg
ICAgICAvLyBzZWUgaWYgd2UgZ2V0IGx1Y2t5OiBpZiB0aGUgYXJndW1lbnRzIGFyZSBjZWxscyBh
bmQgdGhleSByZWZlcmVuY2UgdGhlIHNhbWUKKyAgICAgICAgLy8gY2VsbCwgdGhlbiB0aGV5IG11
c3QgYmUgc3RyaWN0bHkgZXF1YWwuCisgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIo
SklUQ29tcGlsZXI6OkVxdWFsLCBhcmcxUGF5bG9hZEdQUiwgYXJnMlBheWxvYWRHUFIpLCBpbnZl
cnQgPyBub3RUYWtlbiA6IHRha2VuKTsKKyAgICAgICAgCisgICAgICAgIHNpbGVudFNwaWxsQWxs
UmVnaXN0ZXJzKHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVTdHJpY3RFcUNlbGwsIHJlc3VsdFBheWxvYWRHUFIsIGFyZzFUYWdHUFIsIGFy
ZzFQYXlsb2FkR1BSLCBhcmcyVGFnR1BSLCBhcmcyUGF5bG9hZEdQUik7CisgICAgICAgIHNpbGVu
dEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAgIAorICAgICAgICBh
ZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDMyKGludmVydCA/IEpJVENvbXBpbGVyOjpOb25aZXJv
IDogSklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdFBheWxvYWRHUFIpLCB0YWtlbik7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gRklYTUU6IEFkZCBmYXN0IHBhdGhzIGZvciB0d29DZWxscywgbnVt
YmVyIGV0Yy4KKworICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRQYXlsb2Fk
R1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJl
c3VsdFBheWxvYWRHUFIsIGFyZzFUYWdHUFIsIGFyZzFQYXlsb2FkR1BSLCBhcmcyVGFnR1BSLCBh
cmcyUGF5bG9hZEdQUik7CisgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0UGF5
bG9hZEdQUik7CisgICAgICAgIAorICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDMy
KGludmVydCA/IEpJVENvbXBpbGVyOjpaZXJvIDogSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3Vs
dFBheWxvYWRHUFIpLCB0YWtlbik7CisgICAgfQorICAgIAorICAgIGlmIChub3RUYWtlbiAhPSAo
bV9ibG9jayArIDEpKQorICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7
Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVTdHJp
Y3RFcShOb2RlJiBub2RlLCBib29sIGludmVydCkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmcx
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9k
ZS5jaGlsZDIoKSk7CisgICAgR1BSUmVnIGFyZzFUYWdHUFIgPSBhcmcxLnRhZ0dQUigpOworICAg
IEdQUlJlZyBhcmcxUGF5bG9hZEdQUiA9IGFyZzEucGF5bG9hZEdQUigpOworICAgIEdQUlJlZyBh
cmcyVGFnR1BSID0gYXJnMi50YWdHUFIoKTsKKyAgICBHUFJSZWcgYXJnMlBheWxvYWRHUFIgPSBh
cmcyLnBheWxvYWRHUFIoKTsKKyAgICAKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0
aGlzLCBhcmcxLCBmYWxzZSk7CisgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHRQ
YXlsb2FkLmdwcigpOworICAgIAorICAgIGFyZzEudXNlKCk7CisgICAgYXJnMi51c2UoKTsKKyAg
ICAKKyAgICBpZiAoaXNLbm93bkNlbGwobm9kZS5jaGlsZDEoKSkgJiYgaXNLbm93bkNlbGwobm9k
ZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgLy8gc2VlIGlmIHdlIGdldCBsdWNreTogaWYgdGhlIGFy
Z3VtZW50cyBhcmUgY2VsbHMgYW5kIHRoZXkgcmVmZXJlbmNlIHRoZSBzYW1lCisgICAgICAgIC8v
IGNlbGwsIHRoZW4gdGhleSBtdXN0IGJlIHN0cmljdGx5IGVxdWFsLgorICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBub3RFcXVhbENhc2UgPSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5v
dEVxdWFsLCBhcmcxUGF5bG9hZEdQUiwgYXJnMlBheWxvYWRHUFIpOworICAgICAgICAKKyAgICAg
ICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKCFpbnZlcnQpLCByZXN1bHRQ
YXlsb2FkR1BSKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAo
KTsKKworICAgICAgICBub3RFcXVhbENhc2UubGluaygmbV9qaXQpOworICAgICAgICAKKyAgICAg
ICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbCwgcmVzdWx0UGF5bG9hZEdQ
UiwgYXJnMVRhZ0dQUiwgYXJnMVBheWxvYWRHUFIsIGFyZzJUYWdHUFIsIGFyZzJQYXlsb2FkR1BS
KTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRQYXlsb2FkR1BSKTsKKyAg
ICAgICAgCisgICAgICAgIG1faml0LmFuZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEp
LCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluaygmbV9qaXQp
OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZJWE1FOiBBZGQgZmFzdCBwYXRocy4KKworICAg
ICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlc3VsdFBheWxvYWRHUFIs
IGFyZzFUYWdHUFIsIGFyZzFQYXlsb2FkR1BSLCBhcmcyVGFnR1BSLCBhcmcyUGF5bG9hZEdQUik7
CisgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0UGF5bG9hZEdQUik7CisgICAg
ICAgIAorICAgICAgICBtX2ppdC5hbmRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMigxKSwg
cmVzdWx0UGF5bG9hZEdQUik7CisgICAgfQorCisgICAgYm9vbGVhblJlc3VsdChyZXN1bHRQYXls
b2FkR1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKK30K
Kwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSYgbm9kZSkKK3sKKyAgICBQX0RG
R09wZXJhdGlvbl9FIHNsb3dDYWxsRnVuY3Rpb247CisKKyAgICBpZiAobm9kZS5vcCA9PSBDYWxs
KQorICAgICAgICBzbG93Q2FsbEZ1bmN0aW9uID0gb3BlcmF0aW9uTGlua0NhbGw7CisgICAgZWxz
ZSB7CisgICAgICAgIEFTU0VSVChub2RlLm9wID09IENvbnN0cnVjdCk7CisgICAgICAgIHNsb3dD
YWxsRnVuY3Rpb24gPSBvcGVyYXRpb25MaW5rQ29uc3RydWN0OworICAgIH0KKworICAgIC8vIEZv
ciBjb25zdHJ1Y3RvcnMsIHRoZSB0aGlzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhh
dmUgdG8gbWFrZSBzcGFjZQorICAgIC8vIGZvciBpdC4KKyAgICBpbnQgZHVtbXlUaGlzQXJndW1l
bnQgPSBub2RlLm9wID09IENhbGwgPyAwIDogMTsKKworICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5
cGUgY2FsbFR5cGUgPSBub2RlLm9wID09IENhbGwgPyBDYWxsTGlua0luZm86OkNhbGwgOiBDYWxs
TGlua0luZm86OkNvbnN0cnVjdDsKKworICAgIE5vZGVJbmRleCBjYWxsZWVOb2RlSW5kZXggPSBt
X2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5maXJzdENoaWxkKCldOworICAgIEpT
VmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVOb2RlSW5kZXgpOworICAgIEdQUlJlZyBj
YWxsZWVUYWdHUFIgPSBjYWxsZWUudGFnR1BSKCk7CisgICAgR1BSUmVnIGNhbGxlZVBheWxvYWRH
UFIgPSBjYWxsZWUucGF5bG9hZEdQUigpOworICAgIHVzZShjYWxsZWVOb2RlSW5kZXgpOworCisg
ICAgLy8gdGhlIGNhbGwgaW5zdHJ1Y3Rpb24ncyBmaXJzdCBjaGlsZCBpcyBlaXRoZXIgdGhlIGZ1
bmN0aW9uIChub3JtYWwgY2FsbCkgb3IgdGhlCisgICAgLy8gcmVjZWl2ZXIgKG1ldGhvZCBjYWxs
KS4gc3Vic2VxdWVudCBjaGlsZHJlbiBhcmUgdGhlIGFyZ3VtZW50cy4KKyAgICBpbnQgbnVtQXJn
cyA9IG5vZGUubnVtQ2hpbGRyZW4oKSAtIDE7CisKKyAgICAvLyBGb3IgY29uc3RydWN0b3JzLCB0
aGUgdGhpcyBhcmd1bWVudCBpcyBub3QgcGFzc2VkIGJ1dCB3ZSBoYXZlIHRvIG1ha2Ugc3BhY2UK
KyAgICAvLyBmb3IgaXQuCisgICAgaW50IG51bVBhc3NlZEFyZ3MgPSBudW1BcmdzICsgZHVtbXlU
aGlzQXJndW1lbnQ7CisKKyAgICAvLyBhbW91bnQgb2Ygc3R1ZmYgKGluIHVuaXRzIG9mIHNpemVv
ZihSZWdpc3RlcikpIHRoYXQgd2UgbmVlZCB0byBwbGFjZSBhdCB0aGUKKyAgICAvLyB0b3Agb2Yg
dGhlIEpTIHN0YWNrLgorICAgIGludCBjYWxsRGF0YVNpemUgPSAwOworCisgICAgLy8gZmlyc3Qg
dGhlcmUgYXJlIHRoZSBhcmd1bWVudHMKKyAgICBjYWxsRGF0YVNpemUgKz0gbnVtUGFzc2VkQXJn
czsKKworICAgIC8vIGFuZCB0aGVuIHRoZXJlIGlzIHRoZSBjYWxsIGZyYW1lIGhlYWRlcgorICAg
IGNhbGxEYXRhU2l6ZSArPSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CisKKyAg
ICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtUGFzc2VkQXJn
cyksIHBheWxvYWRPZkNhbGxEYXRhKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkpOworICAg
IG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQz
MlRhZyksIHRhZ09mQ2FsbERhdGEoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSk7CisgICAg
bV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHBheWxvYWRPZkNhbGxE
YXRhKFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUpKTsKKyAgICBtX2ppdC5zdG9yZTMyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ09mQ2FsbERhdGEo
UmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSkpOworCisgICAgZm9yIChpbnQgYXJnSWR4ID0gMDsg
YXJnSWR4IDwgbnVtQXJnczsgYXJnSWR4KyspIHsKKyAgICAgICAgTm9kZUluZGV4IGFyZ05vZGVJ
bmRleCA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSAr
IDEgKyBhcmdJZHhdOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJnTm9kZUlu
ZGV4KTsKKyAgICAgICAgR1BSUmVnIGFyZ1RhZ0dQUiA9IGFyZy50YWdHUFIoKTsKKyAgICAgICAg
R1BSUmVnIGFyZ1BheWxvYWRHUFIgPSBhcmcucGF5bG9hZEdQUigpOworICAgICAgICB1c2UoYXJn
Tm9kZUluZGV4KTsKKworICAgICAgICBtX2ppdC5zdG9yZTMyKGFyZ1RhZ0dQUiwgdGFnT2ZDYWxs
RGF0YSgtY2FsbERhdGFTaXplICsgYXJnSWR4ICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKKyAgICAg
ICAgbV9qaXQuc3RvcmUzMihhcmdQYXlsb2FkR1BSLCBwYXlsb2FkT2ZDYWxsRGF0YSgtY2FsbERh
dGFTaXplICsgYXJnSWR4ICsgZHVtbXlUaGlzQXJndW1lbnQpKTsKKyAgICB9CisKKyAgICBtX2pp
dC5zdG9yZTMyKGNhbGxlZVRhZ0dQUiwgdGFnT2ZDYWxsRGF0YShSZWdpc3RlckZpbGU6OkNhbGxl
ZSkpOworICAgIG1faml0LnN0b3JlMzIoY2FsbGVlUGF5bG9hZEdQUiwgcGF5bG9hZE9mQ2FsbERh
dGEoUmVnaXN0ZXJGaWxlOjpDYWxsZWUpKTsKKworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAg
ICBHUFJSZXN1bHQgcmVzdWx0UGF5bG9hZCh0aGlzKTsKKyAgICBHUFJSZXN1bHQyIHJlc3VsdFRh
Zyh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3By
KCk7CisgICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHJlc3VsdFRhZy5ncHIoKTsKKworICAgIEpJ
VENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKKyAgICBKSVRDb21waWxlcjo6
SnVtcCBzbG93UGF0aDsKKworICAgIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNo
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2FsbGVlUGF5bG9hZEdQUiwgdGFyZ2V0VG9DaGVj
ayk7CisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjYWxsZWVQYXls
b2FkR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZUNoYWluKSksIHJlc3Vs
dFBheWxvYWRHUFIpOworICAgIG1faml0LnN0b3JlUHRyKHJlc3VsdFBheWxvYWRHUFIsIHBheWxv
YWRPZkNhbGxEYXRhKFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikpOworICAgIG1faml0LnN0b3Jl
MzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnT2ZD
YWxsRGF0YShSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pKTsKKworICAgIG1faml0LmFkZFB0cihJ
bW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworCisgICAgSklUQ29tcGlsZXI6
OkNhbGwgZmFzdENhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOworICAgIG1faml0Lm5vdGlmeUNhbGwo
ZmFzdENhbGwsIGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luKTsKKworICAgIEpJVENvbXBp
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICBzbG93UGF0aC5saW5rKCZtX2pp
dCk7CisKKyAgICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2Fs
bGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIG1faml0LnBva2UoR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBzbG93Q2FsbCA9IG1faml0LmFkZEZh
c3RFeGNlcHRpb25DaGVjayhtX2ppdC5hcHBlbmRDYWxsKHNsb3dDYWxsRnVuY3Rpb24pLCBhdCht
X2NvbXBpbGVJbmRleCkuY29kZU9yaWdpbik7CisgICAgbV9qaXQuYWRkUHRyKEltbTMyKG1faml0
LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgbV9qaXQubm90aWZ5Q2FsbChtX2ppdC5j
YWxsKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmln
aW4pOworCisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAgICBzZXR1cFJlc3VsdHMocmVzdWx0
UGF5bG9hZEdQUiwgcmVzdWx0VGFnR1BSKTsKKworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFn
R1BSLCByZXN1bHRQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTLCBVc2VD
aGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworCisgICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxs
LCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgY2FsbFR5cGUsIGF0KG1fY29tcGlsZUluZGV4KS5j
b2RlT3JpZ2luKTsKK30KKwogdGVtcGxhdGU8Ym9vbCBzdHJpY3Q+CiBHUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbChOb2RlSW5kZXggbm9kZUluZGV4LCBEYXRh
Rm9ybWF0JiByZXR1cm5Gb3JtYXQpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDEwMDIzNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDYgKzM0LDEyNzkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKIAorR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSW50
ZWdlcihOb2RlSW5kZXggbm9kZUluZGV4LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpCit7Cisg
ICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgR2VuZXJhdGlvbkluZm8m
IGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisKKyAgICBpZiAoaW5m
by5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXROb25lKSB7CisgICAgICAgIEdQUlJlZyBn
cHIgPSBhbGxvY2F0ZSgpOworCisgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKKyAg
ICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJD
b25zdGFudCk7CisgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpIHsK
KyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9m
SW50MzJDb25zdGFudChub2RlSW5kZXgpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZp
bGxJbnRlZ2VyKGdwcik7CisgICAgICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1h
dEludGVnZXI7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdwcjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpIHsKKyAgICAgICAgICAg
ICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBqc051bWJlcih2YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9k
ZUluZGV4KSk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1t
UHRyKEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZUluZGV4KSk7CisgICAg
ICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNW
YWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEludGVnZXIpIHsKKyAgICAg
ICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGls
bGVkKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2
aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOworICAgICAgICAgICAgLy8gVGFnIGl0LCBzaW5jZSBmaWxs
SW50ZWdlcigpIGlzIHVzZWQgd2hlbiB3ZSB3YW50IGEgYm94ZWQgaW50ZWdlci4KKyAgICAgICAg
ICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgPT0g
RGF0YUZvcm1hdEpTIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SlNJbnRlZ2Vy
KTsKKyAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxs
T3JkZXJTcGlsbGVkKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFk
ZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IFNpbmNlIHdlIHN0YXRpY2FsbHkga25vdyB0aGF0IHdlJ3JlIGZpbGxpbmcgYW4gaW50ZWdlciwg
YW5kIHZhbHVlcworICAgICAgICAvLyBpbiB0aGUgUmVnaXN0ZXJGaWxlIGFyZSBib3hlZCwgdGhp
cyBtdXN0IGJlIERhdGFGb3JtYXRKU0ludGVnZXIuCisgICAgICAgIC8vIFdlIHdpbGwgY2hlY2sg
dGhpcyB3aXRoIGEgaml0QXNzZXJ0IGJlbG93LgorICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdw
ciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CisgICAgICAgIHVubG9jayhncHIpOworICAgIH0KKwor
ICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CisgICAgY2FzZSBEYXRhRm9ybWF0
Tm9uZToKKyAgICAgICAgLy8gU2hvdWxkIGhhdmUgZmlsbGVkLCBhYm92ZS4KKyAgICBjYXNlIERh
dGFGb3JtYXRKU0RvdWJsZToKKyAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CisgICAgY2FzZSBE
YXRhRm9ybWF0SlM6CisgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKKyAgICBjYXNlIERhdGFGb3Jt
YXRKU0NlbGw6CisgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoKKyAgICBjYXNlIERhdGFGb3Jt
YXRKU0Jvb2xlYW46CisgICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFnZToKKyAgICAgICAgLy8gU2hv
dWxkIG9ubHkgYmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGlmIHdlIGtub3cgdGhpcyBvcGVyYW5k
IHRvIGJlIGludGVnZXIuCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgY2Fz
ZSBEYXRhRm9ybWF0SlNJbnRlZ2VyOiB7CisgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigp
OworICAgICAgICBtX2dwcnMubG9jayhncHIpOworICAgICAgICBtX2ppdC5qaXRBc3NlcnRJc0pT
SW50MzIoZ3ByKTsKKyAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEpTSW50ZWdlcjsK
KyAgICAgICAgcmV0dXJuIGdwcjsKKyAgICB9CisKKyAgICBjYXNlIERhdGFGb3JtYXRJbnRlZ2Vy
OiB7CisgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOworICAgICAgICBtX2dwcnMubG9j
ayhncHIpOworICAgICAgICBtX2ppdC5qaXRBc3NlcnRJc0ludDMyKGdwcik7CisgICAgICAgIHJl
dHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOworICAgICAgICByZXR1cm4gZ3ByOworICAg
IH0KKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gSW52YWxp
ZEdQUlJlZzsKK30KKworRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbmRl
eCBub2RlSW5kZXgpCit7CisgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7Cisg
ICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rl
cl07CisKKyAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXROb25lKSB7
CisgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIEdQUlJlZyBn
cHIgPSBhbGxvY2F0ZSgpOworICAgICAgICAKKyAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3Rh
bnQobm9kZUluZGV4KSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgbm90IGJl
IHJlYWNoYWJsZT8KKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJ
bW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgpKSwgZ3ByKTsKKyAgICAgICAgICAg
ICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3Rh
bnQpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAgICAg
ICAgICB1bmxvY2soZ3ByKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFu
dChub2RlSW5kZXgpKSB7CisgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRl
KCk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0RG91YmxlVG9JbnRwdHIodmFsdWVPZk51
bWJlckNvbnN0YW50KG5vZGVJbmRleCkpKSksIGdwcik7CisgICAgICAgICAgICAgICAgbV9qaXQu
bW92ZVB0clRvRG91YmxlKGdwciwgZnByKTsKKyAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsK
KworICAgICAgICAgICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNw
aWxsT3JkZXJEb3VibGUpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBmcHI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIHJlYWNoYWJsZT8KKyAgICAgICAgICAg
ICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KG5vZGVJbmRleCkpOworICAgICAgICAgICAgICAgIEpT
VmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7CisgICAgICAgICAg
ICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShq
c1ZhbHVlKSksIGdwcik7CisgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1
YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKKyAgICAgICAgICAgICAgICBpbmZvLmZp
bGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgICAgICB1bmxvY2soZ3By
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIERhdGFGb3Jt
YXQgc3BpbGxGb3JtYXQgPSBpbmZvLnNwaWxsRm9ybWF0KCk7CisgICAgICAgICAgICBzd2l0Y2gg
KHNwaWxsRm9ybWF0KSB7CisgICAgICAgICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6IHsKKyAg
ICAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rl
ciksIGZwcik7CisgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlckRvdWJsZSk7CisgICAgICAgICAgICAgICAgaW5mby5maWxsRG91Ymxl
KGZwcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZwcjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6IHsKKyAgICAg
ICAgICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9y
ZGVyU3BpbGxlZCk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAgICAgICAgICAgaW5mby5m
aWxsSW50ZWdlcihncHIpOworICAgICAgICAgICAgICAgIHVubG9jayhncHIpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOworICAgICAgICAKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAg
ICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVk
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1
ZShncHIsIHNwaWxsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CisgICAgY2FzZSBEYXRhRm9ybWF0Tm9u
ZToKKyAgICAgICAgLy8gU2hvdWxkIGhhdmUgZmlsbGVkLCBhYm92ZS4KKyAgICBjYXNlIERhdGFG
b3JtYXRDZWxsOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKKyAgICBjYXNlIERhdGFGb3Jt
YXRCb29sZWFuOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoKKyAgICBjYXNlIERhdGFG
b3JtYXRTdG9yYWdlOgorICAgICAgICAvLyBTaG91bGQgb25seSBiZSBjYWxsaW5nIHRoaXMgZnVu
Y3Rpb24gaWYgd2Uga25vdyB0aGlzIG9wZXJhbmQgdG8gYmUgbnVtZXJpYy4KKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBjYXNlIERhdGFGb3JtYXRKUzogeworICAgICAgICBH
UFJSZWcganNWYWx1ZUdwciA9IGluZm8uZ3ByKCk7CisgICAgICAgIG1fZ3Bycy5sb2NrKGpzVmFs
dWVHcHIpOworICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKKyAgICAgICAgR1BS
UmVnIHRlbXBHcHIgPSBhbGxvY2F0ZSgpOyAvLyBGSVhNRTogY2FuIHdlIHNraXAgdGhpcyBhbGxv
Y2F0aW9uIG9uIHRoZSBsYXN0IHVzZSBvZiB0aGUgdmlydHVhbCByZWdpc3Rlcj8KKworICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyKTsKKworICAgICAgICBtX2ppdC5qaXRBc3NlcnRJc0pTRG91YmxlKGpzVmFsdWVHcHIp
OworCisgICAgICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3ZSBoYXZlIGEgZG91YmxlIGVu
Y29kZWQgYXMgYSBKU1ZhbHVlCisgICAgICAgIG1faml0Lm1vdmUoanNWYWx1ZUdwciwgdGVtcEdw
cik7CisgICAgICAgIHVuYm94RG91YmxlKHRlbXBHcHIsIGZwcik7CisgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIGhhc1VuYm94ZWREb3VibGUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICAgICAgLy8g
RmluYWxseSwgaGFuZGxlIGludGVnZXJzLgorICAgICAgICBpc0ludGVnZXIubGluaygmbV9qaXQp
OworICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShqc1ZhbHVlR3ByLCBmcHIpOwor
ICAgICAgICBoYXNVbmJveGVkRG91YmxlLmxpbmsoJm1faml0KTsKKworICAgICAgICBtX2dwcnMu
cmVsZWFzZShqc1ZhbHVlR3ByKTsKKyAgICAgICAgbV9ncHJzLnVubG9jayhqc1ZhbHVlR3ByKTsK
KyAgICAgICAgbV9ncHJzLnVubG9jayh0ZW1wR3ByKTsKKyAgICAgICAgbV9mcHJzLnJldGFpbihm
cHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7CisgICAgICAgIGluZm8uZmls
bERvdWJsZShmcHIpOworICAgICAgICBpbmZvLmtpbGxTcGlsbGVkKCk7CisgICAgICAgIHJldHVy
biBmcHI7CisgICAgfQorCisgICAgY2FzZSBEYXRhRm9ybWF0SlNJbnRlZ2VyOgorICAgIGNhc2Ug
RGF0YUZvcm1hdEludGVnZXI6IHsKKyAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7
CisgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOworICAgICAgICBtX2dwcnMubG9jayhn
cHIpOworICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShncHIsIGZwcik7CisgICAg
ICAgIG1fZ3Bycy51bmxvY2soZ3ByKTsKKyAgICAgICAgcmV0dXJuIGZwcjsKKyAgICB9CisKKyAg
ICAvLyBVbmJveCB0aGUgZG91YmxlCisgICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6IHsKKyAg
ICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CisgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJB
bGxvY2F0ZSgpOworICAgICAgICBpZiAobV9ncHJzLmlzTG9ja2VkKGdwcikpIHsKKyAgICAgICAg
ICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCB0cmFtcGxlIGdwciBpZiBpdCBpcyBpbiB1c2UuCisg
ICAgICAgICAgICBHUFJSZWcgdGVtcCA9IGFsbG9jYXRlKCk7CisgICAgICAgICAgICBtX2ppdC5t
b3ZlKGdwciwgdGVtcCk7CisgICAgICAgICAgICB1bmJveERvdWJsZSh0ZW1wLCBmcHIpOworICAg
ICAgICAgICAgdW5sb2NrKHRlbXApOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHVuYm94
RG91YmxlKGdwciwgZnByKTsKKworICAgICAgICBtX2dwcnMucmVsZWFzZShncHIpOworICAgICAg
ICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsK
KworICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgcmV0dXJuIGZwcjsKKyAg
ICB9CisKKyAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6IHsKKyAgICAgICAgRlBSUmVnIGZwciA9
IGluZm8uZnByKCk7CisgICAgICAgIG1fZnBycy5sb2NrKGZwcik7CisgICAgICAgIHJldHVybiBm
cHI7CisgICAgfQorICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBJbnZhbGlkRlBSUmVnOworfQorCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVl
KE5vZGVJbmRleCBub2RlSW5kZXgpCit7CisgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lz
dGVyKCk7CisgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1
YWxSZWdpc3Rlcl07CisKKyAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgeworICAg
IGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKKyAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7
CisKKyAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgaWYgKGlz
SW50MzJDb25zdGFudChub2RlSW5kZXgpKSB7CisgICAgICAgICAgICAgICAgaW5mby5maWxsSlNW
YWx1ZShncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOworICAgICAgICAgICAgICAgIEpTVmFsdWUg
anNWYWx1ZSA9IGpzTnVtYmVyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpOworICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjpl
bmNvZGUoanNWYWx1ZSkpLCBncHIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc051bWJlckNv
bnN0YW50KG5vZGVJbmRleCkpIHsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdw
ciwgRGF0YUZvcm1hdEpTRG91YmxlKTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUo
SlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgp
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNW
YWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChub2RlSW5kZXgpKTsKKyAgICAgICAgICAg
ICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOworICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjpl
bmNvZGUoanNWYWx1ZSkpLCBncHIpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUo
Z3ByLCBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2dwcnMu
cmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgRGF0YUZvcm1hdCBzcGlsbEZvcm1hdCA9IGluZm8uc3Bp
bGxGb3JtYXQoKTsKKyAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0
ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKKyAgICAgICAgICAgIGlmIChzcGlsbEZvcm1hdCA9PSBE
YXRhRm9ybWF0SW50ZWdlcikgeworICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21w
aWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOworICAgICAgICAgICAgICAg
IG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsKKyAgICAg
ICAgICAgICAgICBzcGlsbEZvcm1hdCA9IERhdGFGb3JtYXRKU0ludGVnZXI7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFk
ZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBpZiAoc3Bp
bGxGb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBO
ZWVkIHRvIGJveCB0aGUgZG91YmxlLCBzaW5jZSB3ZSB3YW50IGEgSlNWYWx1ZS4KKyAgICAgICAg
ICAgICAgICAgICAgbV9qaXQuc3ViUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwg
Z3ByKTsKKyAgICAgICAgICAgICAgICAgICAgc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0SlNEb3Vi
bGU7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChz
cGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
bmZvLmZpbGxKU1ZhbHVlKGdwciwgc3BpbGxGb3JtYXQpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBncHI7CisgICAgfQorCisgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjogeworICAgICAg
ICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKKyAgICAgICAgLy8gSWYgdGhlIHJlZ2lzdGVyIGhh
cyBhbHJlYWR5IGJlZW4gbG9ja2VkIHdlIG5lZWQgdG8gdGFrZSBhIGNvcHkuCisgICAgICAgIC8v
IElmIG5vdCwgd2UnbGwgemVybyBleHRlbmQgaW4gcGxhY2UsIHNvIG1hcmsgb24gdGhlIGluZm8g
dGhhdCB0aGlzIGlzIG5vdyB0eXBlIERhdGFGb3JtYXRJbnRlZ2VyLCBub3QgRGF0YUZvcm1hdEpT
SW50ZWdlci4KKyAgICAgICAgaWYgKG1fZ3Bycy5pc0xvY2tlZChncHIpKSB7CisgICAgICAgICAg
ICBHUFJSZWcgcmVzdWx0ID0gYWxsb2NhdGUoKTsKKyAgICAgICAgICAgIG1faml0Lm9yUHRyKEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByLCByZXN1bHQpOworICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICBtX2dwcnMubG9jayhncHIpOworICAg
ICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7Cisg
ICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKKyAgICAg
ICAgcmV0dXJuIGdwcjsKKyAgICB9CisKKyAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6IHsKKyAg
ICAgICAgRlBSUmVnIGZwciA9IGluZm8uZnByKCk7CisgICAgICAgIEdQUlJlZyBncHIgPSBib3hE
b3VibGUoZnByKTsKKworICAgICAgICAvLyBVcGRhdGUgYWxsIGluZm8KKyAgICAgICAgaW5mby5m
aWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0RvdWJsZSk7CisgICAgICAgIG1fZnBycy5yZWxl
YXNlKGZwcik7CisgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNw
aWxsT3JkZXJKUyk7CisKKyAgICAgICAgcmV0dXJuIGdwcjsKKyAgICB9CisKKyAgICBjYXNlIERh
dGFGb3JtYXRDZWxsOgorICAgICAgICAvLyBObyByZXRhZyByZXF1aXJlZCBvbiBKU1ZBTFVFNjQh
CisgICAgY2FzZSBEYXRhRm9ybWF0SlM6CisgICAgY2FzZSBEYXRhRm9ybWF0SlNJbnRlZ2VyOgor
ICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOgorICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoK
KyAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46IHsKKyAgICAgICAgR1BSUmVnIGdwciA9IGlu
Zm8uZ3ByKCk7CisgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CisgICAgICAgIHJldHVybiBncHI7
CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgorICAgIGNhc2Ug
RGF0YUZvcm1hdFN0b3JhZ2U6CisgICAgICAgIC8vIHRoaXMgdHlwZSBjdXJyZW50bHkgbmV2ZXIg
b2NjdXJzCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOworfQorCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVlVG9OdW1iZXIoTm9kZSYgbm9kZSkKK3sK
KyAgICBpZiAoaXNLbm93bk51bWVyaWMobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIG9wMSk7CisgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQu
Z3ByKCkpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5k
ZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAg
CisgICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpOworICAgIEFTU0VS
VCghaXNOdW1iZXJDb25zdGFudChub2RlLmNoaWxkMSgpKSk7CisgICAgCisgICAgR1BSUmVnIGpz
VmFsdWVHcHIgPSBvcDEuZ3ByKCk7CisgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKKyAg
ICBvcDEudXNlKCk7CisKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwganNWYWx1ZUdwciwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBub25OdW1l
cmljID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywganNWYWx1ZUdw
ciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKworICAgIC8vIEZpcnN0LCBpZiB3
ZSBnZXQgaGVyZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVlCisgICAgbV9q
aXQubW92ZShqc1ZhbHVlR3ByLCBncHIpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhc1VuYm94
ZWREb3VibGUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICAvLyBOZXh0IGhhbmRsZSBjZWxscyAoJiBv
dGhlciBKUyBpbW1lZGlhdGVzKQorICAgIG5vbk51bWVyaWMubGluaygmbV9qaXQpOworICAgIHNp
bGVudFNwaWxsQWxsUmVnaXN0ZXJzKGdwcik7CisgICAgY2FsbE9wZXJhdGlvbihkZmdDb252ZXJ0
SlNWYWx1ZVRvTnVtYmVyLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwganNWYWx1ZUdwcik7Cisg
ICAgYm94RG91YmxlKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBncHIpOworICAgIHNpbGVudEZp
bGxBbGxSZWdpc3RlcnMoZ3ByKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBoYXNDYWxsZWRUb051
bWJlciA9IG1faml0Lmp1bXAoKTsKKyAgICAKKyAgICAvLyBGaW5hbGx5LCBoYW5kbGUgaW50ZWdl
cnMuCisgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKKyAgICBtX2ppdC5vclB0cihHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGpzVmFsdWVHcHIsIGdwcik7CisgICAgaGFzVW5ib3hl
ZERvdWJsZS5saW5rKCZtX2ppdCk7CisgICAgaGFzQ2FsbGVkVG9OdW1iZXIubGluaygmbV9qaXQp
OworICAgIAorICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwg
VXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
bm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIoTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlQoIWlz
SW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSk7CisgICAgCisgICAgaWYgKGlzS25vd25JbnRl
Z2VyKG5vZGUuY2hpbGQxKCkpKSB7CisgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwor
ICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgaW50
ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBHZW5lcmF0aW9uSW5mbyYgY2hpbGRJbmZvID0gbV9nZW5lcmF0
aW9uSW5mb1thdChub2RlLmNoaWxkMSgpKS52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgaWYgKGNo
aWxkSW5mby5pc0pTRG91YmxlKCkpIHsKKyAgICAgICAgRG91YmxlT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAg
ICAgIEZQUlJlZyBmcHIgPSBvcDEuZnByKCk7CisgICAgICAgIEdQUlJlZyBncHIgPSByZXN1bHQu
Z3ByKCk7CisgICAgICAgIG9wMS51c2UoKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgdHJ1
bmNhdGVkVG9JbnRlZ2VyID0gbV9qaXQuYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKGZwciwg
Z3ByLCBKSVRDb21waWxlcjo6QnJhbmNoSWZUcnVuY2F0ZVN1Y2Nlc3NmdWwpOworICAgICAgICAK
KyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoZ3ByKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbih0b0ludDMyLCBncHIsIGZwcik7CisgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMo
Z3ByKTsKKyAgICAgICAgCisgICAgICAgIHRydW5jYXRlZFRvSW50ZWdlci5saW5rKCZtX2ppdCk7
CisgICAgICAgIGludGVnZXJSZXN1bHQoZ3ByLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5D
YWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBKU1Zh
bHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBvcDEpOworICAgIEdQUlJlZyBqc1ZhbHVlR3ByID0gb3AxLmdwcigpOworICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgb3AxLnVzZSgpOworCisgICAg
SklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3Rlcik7CisKKyAgICAvLyBGaXJzdCBoYW5kbGUgbm9uLWludGVnZXJzCisgICAgc2lsZW50U3Bp
bGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKGRmZ0NvbnZlcnRK
U1ZhbHVlVG9JbnQzMiwgcmVzdWx0R1BSLCBqc1ZhbHVlR3ByKTsKKyAgICBzaWxlbnRGaWxsQWxs
UmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgaGFzQ2FsbGVkVG9J
bnQzMiA9IG1faml0Lmp1bXAoKTsKKworICAgIC8vIFRoZW4gaGFuZGxlIGludGVnZXJzLgorICAg
IGlzSW50ZWdlci5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoanNW
YWx1ZUdwciwgcmVzdWx0R1BSKTsKKyAgICBoYXNDYWxsZWRUb0ludDMyLmxpbmsoJm1faml0KTsK
KyAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVu
Q2FsbGVkRXhwbGljaXRseSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0
aXZlVUludDMyVG9OdW1iZXIoTm9kZSYgbm9kZSkKK3sKKyAgICBJbnRlZ2VyT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgRlBSVGVtcG9yYXJ5IGJveGVyKHRoaXMpOworICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6
SnVtcCBwb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhh
bk9yRXF1YWwsIG9wMS5ncHIoKSwgVHJ1c3RlZEltbTMyKDApKTsKKyAgICAKKyAgICBtX2ppdC5j
b252ZXJ0SW50MzJUb0RvdWJsZShvcDEuZ3ByKCksIGJveGVyLmZwcigpKTsKKyAgICBtX2ppdC5h
ZGREb3VibGUoSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcygmdHdvVG9UaGUzMiksIGJveGVy
LmZwcigpKTsKKyAgICAKKyAgICBib3hEb3VibGUoYm94ZXIuZnByKCksIHJlc3VsdC5ncHIoKSk7
CisgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAK
KyAgICBwb3NpdGl2ZS5saW5rKCZtX2ppdCk7CisgICAgCisgICAgbV9qaXQub3JQdHIoR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAg
CisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgCisgICAganNWYWx1ZVJlc3VsdChyZXN1bHQu
Z3ByKCksIG1fY29tcGlsZUluZGV4KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3Bl
Y3VsYXRpdmVLbm93bkNvbnN0YW50QXJpdGhPcChOb2RlVHlwZSBvcCwgTm9kZUluZGV4IHJlZ0No
aWxkLCBOb2RlSW5kZXggaW1tQ2hpbGQsIGJvb2wgY29tbXV0ZSkKK3sKKyAgICBKU1ZhbHVlT3Bl
cmFuZCByZWdBcmcodGhpcywgcmVnQ2hpbGQpOworICAgIEdQUlJlZyByZWdBcmdHUFIgPSByZWdB
cmcuZ3ByKCk7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgIEZQUlRlbXBvcmFyeSB0bXAxKHRoaXMpOworICAg
IEZQUlRlbXBvcmFyeSB0bXAyKHRoaXMpOworICAgIEZQUlJlZyB0bXAxRlBSID0gdG1wMS5mcHIo
KTsKKyAgICBGUFJSZWcgdG1wMkZQUiA9IHRtcDIuZnByKCk7CisgICAgCisgICAgcmVnQXJnLnVz
ZSgpOworICAgIHVzZShpbW1DaGlsZCk7CisKKyAgICBKSVRDb21waWxlcjo6SnVtcCBub3RJbnQ7
CisgICAgCisgICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50MzJDb25zdGFudChpbW1DaGlsZCk7
CisgICAgICAgIAorICAgIGlmICghaXNLbm93bkludGVnZXIocmVnQ2hpbGQpKQorICAgICAgICBu
b3RJbnQgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCByZWdBcmdHUFIs
IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgCisgICAgSklUQ29tcGlsZXI6
Okp1bXAgb3ZlcmZsb3c7CisgICAgCisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgVmFsdWVB
ZGQ6CisgICAgY2FzZSBBcml0aEFkZDoKKyAgICAgICAgb3ZlcmZsb3cgPSBtX2ppdC5icmFuY2hB
ZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIHJlZ0FyZ0dQUiwgSW1tMzIoaW1tKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgQXJpdGhTdWI6Cisg
ICAgICAgIG92ZXJmbG93ID0gbV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJm
bG93LCByZWdBcmdHUFIsIEltbTMyKGltbSksIHJlc3VsdEdQUik7CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisgICAgCisgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
LCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9q
aXQuanVtcCgpOworICAgIAorICAgIG92ZXJmbG93LmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBK
SVRDb21waWxlcjo6SnVtcCBub3ROdW1iZXI7CisgICAgCisgICAgLy8gZmlyc3QgZGVhbCB3aXRo
IG92ZXJmbG93IGNhc2UKKyAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShyZWdBcmdHUFIs
IHRtcDJGUFIpOworICAgIAorICAgIC8vIG5vdyBkZWFsIHdpdGggbm90LWludCBjYXNlLCBpZiBh
cHBsaWNhYmxlCisgICAgaWYgKCFpc0tub3duSW50ZWdlcihyZWdDaGlsZCkpIHsKKyAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgaGF2ZVZhbHVlID0gbV9qaXQuanVtcCgpOworICAgICAgICAKKyAg
ICAgICAgbm90SW50LmxpbmsoJm1faml0KTsKKyAgICAgICAgCisgICAgICAgIGlmICghaXNLbm93
bk51bWVyaWMocmVnQ2hpbGQpKSB7CisgICAgICAgICAgICBBU1NFUlQob3AgPT0gVmFsdWVBZGQp
OworICAgICAgICAgICAgbm90TnVtYmVyID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgcmVnQXJnR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2ppdC5tb3ZlKHJlZ0FyZ0dQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgbV9qaXQuYWRkUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQubW92ZVB0clRvRG91YmxlKHJlc3VsdEdQUiwg
dG1wMkZQUik7CisgICAgICAgIAorICAgICAgICBoYXZlVmFsdWUubGluaygmbV9qaXQpOworICAg
IH0KKyAgICAKKyAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXREb3VibGVUb0ludHB0cih2YWx1ZU9mTnVtYmVyQ29u
c3RhbnQoaW1tQ2hpbGQpKSkpLCByZXN1bHRHUFIpOworICAgIG1faml0Lm1vdmVQdHJUb0RvdWJs
ZShyZXN1bHRHUFIsIHRtcDFGUFIpOworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIFZhbHVl
QWRkOgorICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIG1faml0LmFkZERvdWJsZSh0bXAxRlBS
LCB0bXAyRlBSKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgQXJpdGhTdWI6
CisgICAgICAgIG1faml0LnN1YkRvdWJsZSh0bXAxRlBSLCB0bXAyRlBSKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9CisgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZUNhc2VDb252ZXJ0
ZWRUb0ludDsKKyAgICAKKyAgICBpZiAob3AgPT0gVmFsdWVBZGQpIHsKKyAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKKyAgICAgICAgbV9qaXQuYnJhbmNoQ29udmVy
dERvdWJsZVRvSW50MzIodG1wMkZQUiwgcmVzdWx0R1BSLCBmYWlsdXJlQ2FzZXMsIHRtcDFGUFIp
OworICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJl
c3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBkb25lQ2FzZUNvbnZlcnRlZFRvSW50ID0gbV9q
aXQuanVtcCgpOworICAgICAgICAKKyAgICAgICAgZmFpbHVyZUNhc2VzLmxpbmsoJm1faml0KTsK
KyAgICB9CisgICAgCisgICAgbV9qaXQubW92ZURvdWJsZVRvUHRyKHRtcDJGUFIsIHJlc3VsdEdQ
Uik7CisgICAgbV9qaXQuc3ViUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVz
dWx0R1BSKTsKKyAgICAgICAgCisgICAgaWYgKCFpc0tub3duTnVtZXJpYyhyZWdDaGlsZCkpIHsK
KyAgICAgICAgQVNTRVJUKG5vdE51bWJlci5pc1NldCgpKTsKKyAgICAgICAgQVNTRVJUKG9wID09
IFZhbHVlQWRkKTsKKyAgICAgICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25l
Q2FzZVdhc051bWJlciA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgIAorICAgICAgICBub3RO
dW1iZXIubGluaygmbV9qaXQpOworICAgICAgICAgICAgCisgICAgICAgIHNpbGVudFNwaWxsQWxs
UmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAgIGlmIChjb21tdXRlKQorICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlciwgcmVzdWx0R1BSLCBNYWNy
b0Fzc2VtYmxlcjo6SW1tMzIoaW1tKSwgcmVnQXJnR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlciwgcmVzdWx0R1BS
LCByZWdBcmdHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihpbW0pKTsKKyAgICAgICAgc2lsZW50
RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICAgICAgCisgICAgICAgIGRvbmVD
YXNlV2FzTnVtYmVyLmxpbmsoJm1faml0KTsKKyAgICB9CisgICAgCisgICAgZG9uZS5saW5rKCZt
X2ppdCk7CisgICAgaWYgKGRvbmVDYXNlQ29udmVydGVkVG9JbnQuaXNTZXQoKSkKKyAgICAgICAg
ZG9uZUNhc2VDb252ZXJ0ZWRUb0ludC5saW5rKCZtX2ppdCk7CisgICAgICAgIAorICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBs
aWNpdGx5KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVCYXNpY0Fy
aXRoT3AoTm9kZVR5cGUgb3AsIE5vZGUgJm5vZGUpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJn
MSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5v
ZGUuY2hpbGQyKCkpOworICAgIAorICAgIEZQUlRlbXBvcmFyeSB0bXAxKHRoaXMpOworICAgIEZQ
UlRlbXBvcmFyeSB0bXAyKHRoaXMpOworICAgIEZQUlJlZyB0bXAxRlBSID0gdG1wMS5mcHIoKTsK
KyAgICBGUFJSZWcgdG1wMkZQUiA9IHRtcDIuZnByKCk7CisgICAgCisgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKKworICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKKyAgICBH
UFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CisgICAgCisgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKyAgICAKKyAgICBhcmcxLnVzZSgpOworICAgIGFyZzIudXNlKCk7Cisg
ICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgY2hpbGQxTm90SW50OworICAgIEpJVENvbXBpbGVy
OjpKdW1wIGNoaWxkMk5vdEludDsKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgb3ZlcmZsb3c7
CisgICAgCisgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSkKKyAgICAgICAg
Y2hpbGQxTm90SW50ID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJn
MUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICBpZiAoIWlzS25vd25J
bnRlZ2VyKG5vZGUuY2hpbGQyKCkpKQorICAgICAgICBjaGlsZDJOb3RJbnQgPSBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpOworICAgIAorICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIFZhbHVlQWRk
OgorICAgIGNhc2UgQXJpdGhBZGQ6IHsKKyAgICAgICAgb3ZlcmZsb3cuYXBwZW5kKG1faml0LmJy
YW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgYXJnMUdQUiwgYXJnMkdQUiwgcmVz
dWx0R1BSKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBcml0
aFN1YjogeworICAgICAgICBvdmVyZmxvdy5hcHBlbmQobV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9B
c3NlbWJsZXI6Ok92ZXJmbG93LCBhcmcxR1BSLCBhcmcyR1BSLCByZXN1bHRHUFIpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFyaXRoTXVsOiB7CisgICAgICAg
IG92ZXJmbG93LmFwcGVuZChtX2ppdC5icmFuY2hNdWwzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZs
b3csIGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUikpOworICAgICAgICBvdmVyZmxvdy5hcHBl
bmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRHUFIpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgbV9qaXQub3JQdHIoR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICBKSVRD
b21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgIAorICAgIEpJVENvbXBpbGVy
OjpKdW1wTGlzdCBoYXZlRlBSQXJndW1lbnRzOworCisgICAgb3ZlcmZsb3cubGluaygmbV9qaXQp
OworICAgICAgICAKKyAgICAvLyBib3RoIGFyZ3VtZW50cyBhcmUgaW50ZWdlcnMKKyAgICBtX2pp
dC5jb252ZXJ0SW50MzJUb0RvdWJsZShhcmcxR1BSLCB0bXAxRlBSKTsKKyAgICBtX2ppdC5jb252
ZXJ0SW50MzJUb0RvdWJsZShhcmcyR1BSLCB0bXAyRlBSKTsKKyAgICAgICAgCisgICAgaGF2ZUZQ
UkFyZ3VtZW50cy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgCisgICAgSklUQ29tcGls
ZXI6Okp1bXBMaXN0IG5vdE51bWJlcnM7CisgICAgICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1w
IGNoaWxkMk5vdEludDI7CisgICAgICAgIAorICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5j
aGlsZDEoKSkpIHsKKyAgICAgICAgY2hpbGQxTm90SW50LmxpbmsoJm1faml0KTsKKyAgICAgICAg
ICAgIAorICAgICAgICBpZiAoIWlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQxKCkpKSB7CisgICAg
ICAgICAgICBBU1NFUlQob3AgPT0gVmFsdWVBZGQpOworICAgICAgICAgICAgbm90TnVtYmVycy5h
cHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgYXJnMUdQUiwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBtX2ppdC5tb3ZlKGFyZzFHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHVuYm94
RG91YmxlKHJlc3VsdEdQUiwgdG1wMUZQUik7CisgICAgICAgICAgICAKKyAgICAgICAgLy8gY2hp
bGQxIGlzIGNvbnZlcnRlZCB0byBhIGRvdWJsZTsgY2hpbGQyIG1heSBlaXRoZXIgYmUgYW4gaW50
IG9yCisgICAgICAgIC8vIGEgYm94ZWQgZG91YmxlCisgICAgICAgICAgICAKKyAgICAgICAgaWYg
KCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkgeworICAgICAgICAgICAgaWYgKGlzS25v
d25OdW1lcmljKG5vZGUuY2hpbGQyKCkpKQorICAgICAgICAgICAgICAgIGNoaWxkMk5vdEludDIg
PSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKG9wID09IFZhbHVlQWRkKTsKKyAgICAgICAgICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBjaGlsZDJJc0ludCA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAg
ICAgICAgICAgICAgIG5vdE51bWJlcnMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9B
c3NlbWJsZXI6Olplcm8sIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcikp
OworICAgICAgICAgICAgICAgIGNoaWxkMk5vdEludDIgPSBtX2ppdC5qdW1wKCk7CisgICAgICAg
ICAgICAgICAgY2hpbGQySXNJbnQubGluaygmbV9qaXQpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgLy8gY2hpbGQgMiBpcyBkZWZpbml0ZWx5IGFuIGlu
dGVnZXIKKyAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUoYXJnMkdQUiwgdG1wMkZQ
Uik7CisgICAgICAgICAgICAKKyAgICAgICAgaGF2ZUZQUkFyZ3VtZW50cy5hcHBlbmQobV9qaXQu
anVtcCgpKTsKKyAgICB9CisgICAgICAgIAorICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5j
aGlsZDIoKSkpIHsKKyAgICAgICAgY2hpbGQyTm90SW50LmxpbmsoJm1faml0KTsKKyAgICAgICAg
ICAgIAorICAgICAgICBpZiAoIWlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQyKCkpKSB7CisgICAg
ICAgICAgICBBU1NFUlQob3AgPT0gVmFsdWVBZGQpOworICAgICAgICAgICAgbm90TnVtYmVycy5h
cHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgYXJnMkdQUiwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAvLyBjaGlsZDEgaXMgZGVmaW5pdGVseSBhbiBpbnRlZ2VyLCBhbmQgY2hpbGQg
MiBpcyBkZWZpbml0ZWx5IG5vdAorICAgICAgICAgICAgCisgICAgICAgIG1faml0LmNvbnZlcnRJ
bnQzMlRvRG91YmxlKGFyZzFHUFIsIHRtcDFGUFIpOworICAgICAgICAgICAgCisgICAgICAgIGlm
IChjaGlsZDJOb3RJbnQyLmlzU2V0KCkpCisgICAgICAgICAgICBjaGlsZDJOb3RJbnQyLmxpbmso
Jm1faml0KTsKKyAgICAgICAgICAgIAorICAgICAgICBtX2ppdC5tb3ZlKGFyZzJHUFIsIHJlc3Vs
dEdQUik7CisgICAgICAgIHVuYm94RG91YmxlKHJlc3VsdEdQUiwgdG1wMkZQUik7CisgICAgfQor
ICAgICAgICAKKyAgICBoYXZlRlBSQXJndW1lbnRzLmxpbmsoJm1faml0KTsKKyAgICAgICAgCisg
ICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgY2FzZSBBcml0aEFkZDoK
KyAgICAgICAgbV9qaXQuYWRkRG91YmxlKHRtcDJGUFIsIHRtcDFGUFIpOworICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQXJpdGhTdWI6CisgICAgICAgIG1faml0LnN1YkRv
dWJsZSh0bXAyRlBSLCB0bXAxRlBSKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICBjYXNlIEFyaXRoTXVsOgorICAgICAgICBtX2ppdC5tdWxEb3VibGUodG1wMkZQUiwgdG1wMUZQ
Uik7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1w
IGRvbmVDYXNlQ29udmVydGVkVG9JbnQ7CisgICAgCisgICAgaWYgKG9wID09IFZhbHVlQWRkKSB7
CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7CisgICAgICAgIG1f
aml0LmJyYW5jaENvbnZlcnREb3VibGVUb0ludDMyKHRtcDFGUFIsIHJlc3VsdEdQUiwgZmFpbHVy
ZUNhc2VzLCB0bXAyRlBSKTsKKyAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgZG9uZUNhc2VDb252
ZXJ0ZWRUb0ludCA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgCisgICAgICAgIGZhaWx1cmVDYXNl
cy5saW5rKCZtX2ppdCk7CisgICAgfQorICAgICAgICAKKyAgICBib3hEb3VibGUodG1wMUZQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgaWYgKCFub3ROdW1iZXJzLmVtcHR5KCkpIHsKKyAg
ICAgICAgQVNTRVJUKG9wID09IFZhbHVlQWRkKTsKKyAgICAgICAgICAgIAorICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBkb25lQ2FzZVdhc051bWJlciA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAg
ICAgIAorICAgICAgICBub3ROdW1iZXJzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIAorICAg
ICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblZhbHVlQWRkTm90TnVtYmVyLCByZXN1bHRHUFIsIGFyZzFHUFIsIGFy
ZzJHUFIpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisKKyAg
ICAgICAgZG9uZUNhc2VXYXNOdW1iZXIubGluaygmbV9qaXQpOworICAgIH0KKyAgICAKKyAgICBk
b25lLmxpbmsoJm1faml0KTsKKyAgICBpZiAoZG9uZUNhc2VDb252ZXJ0ZWRUb0ludC5pc1NldCgp
KQorICAgICAgICBkb25lQ2FzZUNvbnZlcnRlZFRvSW50LmxpbmsoJm1faml0KTsKKyAgICAgICAg
CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOworfQorCitKSVRDb21waWxlcjo6Q2FsbCBTcGVjdWxhdGl2ZUpJ
VDo6Y2FjaGVkR2V0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVn
IHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1w
IHNsb3dQYXRoVGFyZ2V0LCBOb2RlVHlwZSBub2RlVHlwZSkKK3sKKyAgICBBU1NFUlQobm9kZVR5
cGUgPT0gR2V0QnlJZCB8fCBub2RlVHlwZSA9PSBHZXRNZXRob2QpOworCisgICAgSklUQ29tcGls
ZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7CisgICAgSklUQ29tcGlsZXI6Okp1
bXAgc3RydWN0dXJlQ2hlY2sgPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goSklUQ29tcGlsZXI6
Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0
cihyZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZlByb3BlcnR5
U3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsQ29tcGFj
dCBsb2FkV2l0aFBhdGNoID0gbV9qaXQubG9hZFB0cldpdGhDb21wYWN0QWRkcmVzc09mZnNldFBh
dGNoKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgMCksIHJlc3VsdEdQUik7CisgICAg
CisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgIHN0cnVj
dHVyZUNoZWNrLmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBpZiAoc2xvd1BhdGhUYXJnZXQuaXNT
ZXQoKSkKKyAgICAgICAgc2xvd1BhdGhUYXJnZXQubGluaygmbV9qaXQpOworICAgIAorICAgIEpJ
VENvbXBpbGVyOjpMYWJlbCBzbG93Q2FzZSA9IG1faml0LmxhYmVsKCk7CisKKyAgICBzaWxlbnRT
cGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgIEpJVENvbXBpbGVyOjpDYWxsIGZ1bmN0
aW9uQ2FsbCA9IGNhbGxPcGVyYXRpb24obm9kZVR5cGUgPT0gR2V0QnlJZCA/IG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSA6IG9wZXJhdGlvbkdldE1ldGhvZE9wdGltaXplLCByZXN1bHRHUFIsIGJh
c2VHUFIsIGlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcikpOworICAgIHNpbGVudEZpbGxBbGxS
ZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAKKyAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAK
KyAgICBKSVRDb21waWxlcjo6TGFiZWwgZG9uZUxhYmVsID0gbV9qaXQubGFiZWwoKTsKKworICAg
IG1faml0LmFkZFByb3BlcnR5QWNjZXNzKFByb3BlcnR5QWNjZXNzUmVjb3JkKHN0cnVjdHVyZVRv
Q29tcGFyZSwgZnVuY3Rpb25DYWxsLCBzdHJ1Y3R1cmVDaGVjaywgbG9hZFdpdGhQYXRjaCwgc2xv
d0Nhc2UsIGRvbmVMYWJlbCwgc2FmZUNhc3Q8aW50OF90PihiYXNlR1BSKSwgc2FmZUNhc3Q8aW50
OF90PihyZXN1bHRHUFIpLCBzYWZlQ2FzdDxpbnQ4X3Q+KHNjcmF0Y2hHUFIpKSk7CisgICAgCisg
ICAgaWYgKHNjcmF0Y2hHUFIgIT0gcmVzdWx0R1BSICYmIHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgdW5sb2NrKHNjcmF0Y2hHUFIpOworICAgIAorICAgIHJldHVybiBmdW5j
dGlvbkNhbGw7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoR1BSUmVn
IGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgTm9kZUluZGV4IHZhbHVlSW5kZXgsIEdQUlJlZyBz
Y3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJ
VENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0KQoreworICAgIAorICAgIEpJVENvbXBpbGVy
OjpEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOworICAgIEpJVENvbXBpbGVyOjpKdW1w
IHN0cnVjdHVyZUNoZWNrID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpO
b3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKSk7CisKKyAgICB3cml0ZUJhcnJpZXIoYmFzZUdQ
UiwgdmFsdWVHUFIsIHZhbHVlSW5kZXgsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBz
Y3JhdGNoR1BSKTsKKworICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkpLCBzY3JhdGNoR1BSKTsK
KyAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsMzIgc3RvcmVXaXRoUGF0Y2ggPSBtX2ppdC5zdG9y
ZVB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2godmFsdWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNz
KHNjcmF0Y2hHUFIsIDApKTsKKworICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5q
dW1wKCk7CisKKyAgICBzdHJ1Y3R1cmVDaGVjay5saW5rKCZtX2ppdCk7CisKKyAgICBpZiAoc2xv
d1BhdGhUYXJnZXQuaXNTZXQoKSkKKyAgICAgICAgc2xvd1BhdGhUYXJnZXQubGluaygmbV9qaXQp
OworCisgICAgSklUQ29tcGlsZXI6OkxhYmVsIHNsb3dDYXNlID0gbV9qaXQubGFiZWwoKTsKKwor
ICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAgIFZfREZHT3Bl
cmF0aW9uX0VKQ0kgb3B0aW1pemVkQ2FsbDsKKyAgICBpZiAobV9qaXQuc3RyaWN0TW9kZUZvcihh
dChtX2NvbXBpbGVJbmRleCkuY29kZU9yaWdpbikpIHsKKyAgICAgICAgaWYgKHB1dEtpbmQgPT0g
RGlyZWN0KQorICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWREaXJl
Y3RTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3B0aW1pemVkQ2Fs
bCA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBpZiAocHV0S2luZCA9PSBEaXJlY3QpCisgICAgICAgICAgICBvcHRpbWl6ZWRDYWxsID0gb3Bl
cmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXpl
OworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wdGltaXplZENhbGwsIHZhbHVlR1BSLCBiYXNlR1BSLCBpZGVudGlmaWVyKGlkZW50aWZp
ZXJOdW1iZXIpKTsKKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwor
CisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgSklUQ29tcGlsZXI6OkxhYmVsIGRvbmVMYWJl
bCA9IG1faml0LmxhYmVsKCk7CisKKyAgICBtX2ppdC5hZGRQcm9wZXJ0eUFjY2VzcyhQcm9wZXJ0
eUFjY2Vzc1JlY29yZChzdHJ1Y3R1cmVUb0NvbXBhcmUsIGZ1bmN0aW9uQ2FsbCwgc3RydWN0dXJl
Q2hlY2ssIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxDb21wYWN0KHN0b3JlV2l0aFBhdGNoLmxhYmVs
KCkpLCBzbG93Q2FzZSwgZG9uZUxhYmVsLCBzYWZlQ2FzdDxpbnQ4X3Q+KGJhc2VHUFIpLCBzYWZl
Q2FzdDxpbnQ4X3Q+KHZhbHVlR1BSKSwgc2FmZUNhc3Q8aW50OF90PihzY3JhdGNoR1BSKSkpOwor
fQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRNZXRob2QoR1BSUmVnIGJhc2VHUFIs
IEdQUlJlZyByZXN1bHRHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCkKK3sKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBzbG93Q2FsbDsKKyAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRyIHN0cnVj
dFRvQ29tcGFyZSwgcHJvdG9PYmosIHByb3RvU3RydWN0VG9Db21wYXJlLCBwdXRGdW5jdGlvbjsK
KyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCB3cm9uZ1N0cnVjdHVyZSA9IG1faml0LmJyYW5j
aFB0cldpdGhQYXRjaChKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3RUb0NvbXBhcmUsIEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSkpOwor
ICAgIHByb3RvT2JqID0gbV9qaXQubW92ZVdpdGhQYXRjaChKSVRDb21waWxlcjo6VHJ1c3RlZElt
bVB0cigwKSwgcmVzdWx0R1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCB3cm9uZ1Byb3RvU3Ry
dWN0dXJlID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwg
SklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgcHJvdG9TdHJ1Y3RUb0NvbXBhcmUsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSkpOworICAgIAorICAgIHB1dEZ1bmN0aW9uID0gbV9qaXQu
bW92ZVdpdGhQYXRjaChKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cigwKSwgcmVzdWx0R1BSKTsK
KyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgIAor
ICAgIHdyb25nU3RydWN0dXJlLmxpbmsoJm1faml0KTsKKyAgICB3cm9uZ1Byb3RvU3RydWN0dXJl
LmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBzbG93Q2FsbCA9IGNhY2hlZEdldEJ5SWQoYmFzZUdQ
UiwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBpZGVudGlmaWVyTnVtYmVyLCBzbG93UGF0aFRhcmdl
dCwgR2V0TWV0aG9kKTsKKyAgICAKKyAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBt
X2ppdC5hZGRNZXRob2RHZXQoc2xvd0NhbGwsIHN0cnVjdFRvQ29tcGFyZSwgcHJvdG9PYmosIHBy
b3RvU3RydWN0VG9Db21wYXJlLCBwdXRGdW5jdGlvbik7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlTnVsbChOb2RlSW5kZXggb3BlcmFu
ZCwgYm9vbCBpbnZlcnQpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIG9wZXJhbmQp
OworICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7CisgICAgCisgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzLCBhcmcpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90Q2VsbDsKKyAgICAKKyAgICBpZiAoIWlz
S25vd25DZWxsKG9wZXJhbmQpKQorICAgICAgICBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgYXJnR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0
ZXIpOworICAgIAorICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYXJnR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBtX2ppdC50ZXN0
OChpbnZlcnQgPyBKSVRDb21waWxlcjo6WmVybyA6IEpJVENvbXBpbGVyOjpOb25aZXJvLCBKSVRD
b21waWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSwg
cmVzdWx0R1BSKTsKKyAgICAKKyAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQpKSB7CisgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIAorICAg
ICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKKyAgICAgICAgCisgICAgICAgIG1faml0Lm1vdmUo
YXJnR1BSLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5hbmRQdHIoSklUQ29tcGlsZXI6OlRy
dXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQu
Y29tcGFyZVB0cihpbnZlcnQgPyBKSVRDb21waWxlcjo6Tm90RXF1YWwgOiBKSVRDb21waWxlcjo6
RXF1YWwsIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihWYWx1ZU51bGwpLCBy
ZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgfQor
ICAgIAorICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1h
dEpTQm9vbGVhbik7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlUGVl
cGhvbGVCcmFuY2hOdWxsKE5vZGVJbmRleCBvcGVyYW5kLCBOb2RlSW5kZXggYnJhbmNoTm9kZUlu
ZGV4LCBib29sIGludmVydCkKK3sKKyAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9k
ZUluZGV4KTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5k
ZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2Nr
SW5kZXgoKTsKKyAgICAKKyAgICBpZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkgeworICAgICAg
ICBpbnZlcnQgPSAhaW52ZXJ0OworICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRha2VuOworICAg
ICAgICB0YWtlbiA9IG5vdFRha2VuOworICAgICAgICBub3RUYWtlbiA9IHRtcDsKKyAgICB9CisK
KyAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgb3BlcmFuZCk7CisgICAgR1BSUmVnIGFyZ0dQ
UiA9IGFyZy5ncHIoKTsKKyAgICAKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGFyZyk7
CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAKKyAgICBKSVRDb21w
aWxlcjo6SnVtcCBub3RDZWxsOworICAgIAorICAgIGlmICghaXNLbm93bkNlbGwob3BlcmFuZCkp
CisgICAgICAgIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCBhcmdHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgCisgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhhcmdHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hUZXN0OChp
bnZlcnQgPyBKSVRDb21waWxlcjo6WmVybyA6IEpJVENvbXBpbGVyOjpOb25aZXJvLCBKSVRDb21w
aWxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgp
KSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRh
a2VuKTsKKyAgICAKKyAgICBpZiAoIWlzS25vd25DZWxsKG9wZXJhbmQpKSB7CisgICAgICAgIGFk
ZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKKyAgICAgICAgCisgICAgICAgIG5vdENl
bGwubGluaygmbV9qaXQpOworICAgICAgICAKKyAgICAgICAgbV9qaXQubW92ZShhcmdHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgIG1faml0LmFuZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMy
KH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOworICAgICAgICBhZGRCcmFuY2gobV9qaXQu
YnJhbmNoUHRyKGludmVydCA/IEpJVENvbXBpbGVyOjpOb3RFcXVhbCA6IEpJVENvbXBpbGVyOjpF
cXVhbCwgcmVzdWx0R1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9j
YXN0PHZvaWQqPihWYWx1ZU51bGwpKSksIHRha2VuKTsKKyAgICB9CisgICAgCisgICAgaWYgKG5v
dFRha2VuICE9IChtX2Jsb2NrICsgMSkpCisgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCks
IG5vdFRha2VuKTsKK30KKworYm9vbCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVDb21w
YXJlTnVsbChOb2RlJiBub2RlLCBOb2RlSW5kZXggb3BlcmFuZCwgYm9vbCBpbnZlcnQpCit7Cisg
ICAgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7Cisg
ICAgaWYgKGJyYW5jaE5vZGVJbmRleCAhPSBOb05vZGUpIHsKKyAgICAgICAgQVNTRVJUKG5vZGUu
YWRqdXN0ZWRSZWZDb3VudCgpID09IDEpOworICAgICAgICAKKyAgICAgICAgbm9uU3BlY3VsYXRp
dmVQZWVwaG9sZUJyYW5jaE51bGwob3BlcmFuZCwgYnJhbmNoTm9kZUluZGV4LCBpbnZlcnQpOwor
ICAgIAorICAgICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIHVzZShub2RlLmNoaWxk
MigpKTsKKyAgICAgICAgbV9jb21waWxlSW5kZXggPSBicmFuY2hOb2RlSW5kZXg7CisgICAgICAg
IAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgbm9uU3BlY3VsYXRpdmVO
b25QZWVwaG9sZUNvbXBhcmVOdWxsKG9wZXJhbmQsIGludmVydCk7CisgICAgCisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVBlZXBob2xl
QnJhbmNoKE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIE1hY3JvQXNzZW1i
bGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJG
dW5jdGlvbikKK3sKKyAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsK
KyAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAg
ICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsK
KworICAgIEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY2FsbFJlc3VsdENvbmRpdGlvbiA9
IEpJVENvbXBpbGVyOjpOb25aZXJvOworCisgICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3
aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCisgICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwg
c3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24g
c28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KKyAgICBpZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkg
eworICAgICAgICBjb25kID0gSklUQ29tcGlsZXI6OmludmVydChjb25kKTsKKyAgICAgICAgY2Fs
bFJlc3VsdENvbmRpdGlvbiA9IEpJVENvbXBpbGVyOjpaZXJvOworICAgICAgICBCbG9ja0luZGV4
IHRtcCA9IHRha2VuOworICAgICAgICB0YWtlbiA9IG5vdFRha2VuOworICAgICAgICBub3RUYWtl
biA9IHRtcDsKKyAgICB9CisKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGlsZDIoKSk7Cisg
ICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOworICAgIEdQUlJlZyBhcmcyR1BSID0gYXJn
Mi5ncHIoKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAg
CisgICAgaWYgKGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQxKCkpIHx8IGlzS25vd25Ob3RJ
bnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgCisgICAgICAg
IGFyZzEudXNlKCk7CisgICAgICAgIGFyZzIudXNlKCk7CisgICAgCisgICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24oaGVscGVyRnVuY3Rpb24sIHJlc3VsdEdQ
UiwgYXJnMUdQUiwgYXJnMkdQUik7CisKKyAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFRl
c3QzMihjYWxsUmVzdWx0Q29uZGl0aW9uLCByZXN1bHRHUFIpLCB0YWtlbik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBhcmcyKTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAKKyAgICAgICAgYXJnMS51c2UoKTsK
KyAgICAgICAgYXJnMi51c2UoKTsKKyAgICAKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihu
b2RlLmNoaWxkMSgpKSkKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIpKTsKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkK
KyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAg
ICAKKyAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaDMyKGNvbmQsIGFyZzFHUFIsIGFyZzJH
UFIpLCB0YWtlbik7CisgICAgCisgICAgICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGls
ZDEoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBh
ZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CisgICAgCisgICAgICAgICAgICBzbG93
UGF0aC5saW5rKCZtX2ppdCk7CisgICAgCisgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lz
dGVycyhyZXN1bHRHUFIpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihoZWxwZXJGdW5jdGlv
biwgcmVzdWx0R1BSLCBhcmcxR1BSLCBhcmcyR1BSKTsKKyAgICAgICAgICAgIHNpbGVudEZpbGxB
bGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgICAgICBhZGRCcmFuY2go
bV9qaXQuYnJhbmNoVGVzdDMyKGNhbGxSZXN1bHRDb25kaXRpb24sIHJlc3VsdEdQUiksIHRha2Vu
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEp
KQorICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7Cit9CisKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKE5vZGUmIG5v
ZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFNfREZHT3BlcmF0
aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGls
ZDIoKSk7CisgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOworICAgIEdQUlJlZyBhcmcy
R1BSID0gYXJnMi5ncHIoKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1Bh
dGg7CisgICAgCisgICAgaWYgKGlzS25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQxKCkpIHx8IGlz
S25vd25Ob3RJbnRlZ2VyKG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgIEdQUlJlc3VsdCByZXN1
bHQodGhpcyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAg
CisgICAgICAgIGFyZzEudXNlKCk7CisgICAgICAgIGFyZzIudXNlKCk7CisgICAgCisgICAgICAg
IGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24oaGVscGVyRnVuY3Rpb24s
IHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUik7CisgICAgICAgIAorICAgICAgICBtX2ppdC5v
cjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcywgYXJnMik7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgYXJnMS51c2UoKTsKKyAgICAgICAgYXJnMi51c2UoKTsK
KyAgICAKKyAgICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMSgpKSkKKyAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJl
bG93LCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAg
aWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMigpKSkKKyAgICAgICAgICAgIHNsb3dQYXRo
LmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcyR1BSLCBH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAKKyAgICAgICAgbV9qaXQuY29t
cGFyZTMyKGNvbmQsIGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7CisgICAgCisgICAgICAg
IGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEoKSkgfHwgIWlzS25vd25JbnRlZ2VyKG5v
ZGUuY2hpbGQyKCkpKSB7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBoYXZlUmVzdWx0
ID0gbV9qaXQuanVtcCgpOworICAgIAorICAgICAgICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQp
OworICAgICAgICAKKyAgICAgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKGhlbHBlckZ1bmN0aW9uLCByZXN1bHRHUFIs
IGFyZzFHUFIsIGFyZzJHUFIpOworICAgICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhy
ZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgICAgIG1faml0LmFuZFB0cihUcnVzdGVkSW1t
MzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICAgICAgaGF2ZVJlc3VsdC5saW5r
KCZtX2ppdCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faml0Lm9yMzIoVHJ1c3Rl
ZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgIH0KK30KKwordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKE5vZGUmIG5vZGUsIE5vZGVJbmRl
eCBicmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52ZXJ0KQoreworICAgIE5vZGUmIGJyYW5jaE5vZGUg
PSBhdChicmFuY2hOb2RlSW5kZXgpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2Rl
LnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2Rl
Lm5vdFRha2VuQmxvY2tJbmRleCgpOworCisgICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3
aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCisgICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwg
c3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24g
c28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KKyAgICBpZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkg
eworICAgICAgICBpbnZlcnQgPSAhaW52ZXJ0OworICAgICAgICBCbG9ja0luZGV4IHRtcCA9IHRh
a2VuOworICAgICAgICB0YWtlbiA9IG5vdFRha2VuOworICAgICAgICBub3RUYWtlbiA9IHRtcDsK
KyAgICB9CisgICAgCisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgIEdQ
UlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKKyAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3By
KCk7CisgICAgCisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgIAorICAgIGFyZzEudXNlKCk7CisgICAgYXJnMi51
c2UoKTsKKyAgICAKKyAgICBpZiAoaXNLbm93bkNlbGwobm9kZS5jaGlsZDEoKSkgJiYgaXNLbm93
bkNlbGwobm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgLy8gc2VlIGlmIHdlIGdldCBsdWNreTog
aWYgdGhlIGFyZ3VtZW50cyBhcmUgY2VsbHMgYW5kIHRoZXkgcmVmZXJlbmNlIHRoZSBzYW1lCisg
ICAgICAgIC8vIGNlbGwsIHRoZW4gdGhleSBtdXN0IGJlIHN0cmljdGx5IGVxdWFsLgorICAgICAg
ICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgYXJnMUdQUiwg
YXJnMkdQUiksIGludmVydCA/IG5vdFRha2VuIDogdGFrZW4pOworICAgICAgICAKKyAgICAgICAg
c2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsLCByZXN1bHRHUFIsIGFyZzFHUFIsIGFyZzJH
UFIpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAg
IAorICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDMyKGludmVydCA/IEpJVENvbXBp
bGVyOjpOb25aZXJvIDogSklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdEdQUiksIHRha2VuKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBtX2ppdC5vclB0cihhcmcxR1BSLCBhcmcyR1BSLCByZXN1bHRH
UFIpOworICAgICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgdHdvQ2VsbHNDYXNlID0g
bV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6WmVybywgcmVzdWx0R1BSLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpOworICAgICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
bnVtYmVyQ2FzZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJl
c3VsdEdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgCisgICAg
ICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2gzMihpbnZlcnQgPyBKSVRDb21waWxlcjo6Tm90RXF1
YWwgOiBKSVRDb21waWxlcjo6RXF1YWwsIGFyZzFHUFIsIGFyZzJHUFIpLCB0YWtlbik7CisgICAg
ICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKKyAgICAgICAgCisgICAgICAg
IHR3b0NlbGxzQ2FzZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFu
Y2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBhcmcxR1BSLCBhcmcyR1BSKSwgaW52ZXJ0ID8gbm90
VGFrZW4gOiB0YWtlbik7CisgICAgICAgIAorICAgICAgICBudW1iZXJDYXNlLmxpbmsoJm1faml0
KTsKKyAgICAgICAgCisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZXN1bHRH
UFIsIGFyZzFHUFIsIGFyZzJHUFIpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJl
c3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoVGVzdDMy
KGludmVydCA/IEpJVENvbXBpbGVyOjpaZXJvIDogSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3Vs
dEdQUiksIHRha2VuKTsKKyAgICB9CisgICAgCisgICAgaWYgKG5vdFRha2VuICE9IChtX2Jsb2Nr
ICsgMSkpCisgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKK30KKwor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0cmljdEVxKE5v
ZGUmIG5vZGUsIGJvb2wgaW52ZXJ0KQoreworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywg
bm9kZS5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxk
MigpKTsKKyAgICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEuZ3ByKCk7CisgICAgR1BSUmVnIGFyZzJH
UFIgPSBhcmcyLmdwcigpOworICAgIAorICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Cisg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAKKyAgICBhcmcxLnVzZSgp
OworICAgIGFyZzIudXNlKCk7CisgICAgCisgICAgaWYgKGlzS25vd25DZWxsKG5vZGUuY2hpbGQx
KCkpICYmIGlzS25vd25DZWxsKG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgIC8vIHNlZSBpZiB3
ZSBnZXQgbHVja3k6IGlmIHRoZSBhcmd1bWVudHMgYXJlIGNlbGxzIGFuZCB0aGV5IHJlZmVyZW5j
ZSB0aGUgc2FtZQorICAgICAgICAvLyBjZWxsLCB0aGVuIHRoZXkgbXVzdCBiZSBzdHJpY3RseSBl
cXVhbC4KKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90RXF1YWxDYXNlID0gbV9qaXQuYnJh
bmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUik7CisgICAgICAg
IAorICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oIWludmVydCkpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICAgICAgbm90
RXF1YWxDYXNlLmxpbmsoJm1faml0KTsKKyAgICAgICAgCisgICAgICAgIHNpbGVudFNwaWxsQWxs
UmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZVN0cmljdEVxQ2VsbCwgcmVzdWx0R1BSLCBhcmcxR1BSLCBhcmcyR1BSKTsKKyAgICAgICAg
c2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgbV9q
aXQuYW5kUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAg
ICAgIG1faml0Lm9yMzIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIG1faml0Lm9yUHRyKGFyZzFHUFIsIGFyZzJHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcCB0d29DZWxsc0Nhc2UgPSBtX2ppdC5i
cmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpaZXJvLCByZXN1bHRHUFIsIEdQUkluZm86OnRhZ01h
c2tSZWdpc3Rlcik7CisgICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBudW1iZXJD
YXNlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0R1BS
LCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICAKKyAgICAgICAgbV9q
aXQuY29tcGFyZTMyKGludmVydCA/IEpJVENvbXBpbGVyOjpOb3RFcXVhbCA6IEpJVENvbXBpbGVy
OjpFcXVhbCwgYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIGRvbmUxID0gbV9qaXQuanVtcCgpOworICAgICAgICAKKyAgICAg
ICAgdHdvQ2VsbHNDYXNlLmxpbmsoJm1faml0KTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
bm90RXF1YWxDYXNlID0gbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgYXJn
MUdQUiwgYXJnMkdQUik7CisgICAgICAgIAorICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVy
OjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oIWludmVydCkpKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUyID0gbV9q
aXQuanVtcCgpOworICAgICAgICAKKyAgICAgICAgbnVtYmVyQ2FzZS5saW5rKCZtX2ppdCk7Cisg
ICAgICAgIG5vdEVxdWFsQ2FzZS5saW5rKCZtX2ppdCk7CisgICAgICAgIAorICAgICAgICBzaWxl
bnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVzdWx0R1BSLCBhcmcxR1BSLCBhcmcyR1BSKTsKKyAg
ICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICAKKyAgICAg
ICAgbV9qaXQuYW5kUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7
CisKKyAgICAgICAgZG9uZTEubGluaygmbV9qaXQpOworCisgICAgICAgIG1faml0Lm9yMzIoSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
CisgICAgICAgIGRvbmUyLmxpbmsoJm1faml0KTsKKyAgICB9CisgICAgCisgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VD
aGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
Q2FsbChOb2RlJiBub2RlKQoreworICAgIFBfREZHT3BlcmF0aW9uX0Ugc2xvd0NhbGxGdW5jdGlv
bjsKKworICAgIGlmIChub2RlLm9wID09IENhbGwpCisgICAgICAgIHNsb3dDYWxsRnVuY3Rpb24g
PSBvcGVyYXRpb25MaW5rQ2FsbDsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG5vZGUub3Ag
PT0gQ29uc3RydWN0KTsKKyAgICAgICAgc2xvd0NhbGxGdW5jdGlvbiA9IG9wZXJhdGlvbkxpbmtD
b25zdHJ1Y3Q7CisgICAgfQorCisgICAgLy8gRm9yIGNvbnN0cnVjdG9ycywgdGhlIHRoaXMgYXJn
dW1lbnQgaXMgbm90IHBhc3NlZCBidXQgd2UgaGF2ZSB0byBtYWtlIHNwYWNlCisgICAgLy8gZm9y
IGl0LgorICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IG5vZGUub3AgPT0gQ2FsbCA/IDAgOiAx
OworICAgIAorICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBub2RlLm9wID09
IENhbGwgPyBDYWxsTGlua0luZm86OkNhbGwgOiBDYWxsTGlua0luZm86OkNvbnN0cnVjdDsKKyAg
ICAKKyAgICBOb2RlSW5kZXggY2FsbGVlTm9kZUluZGV4ID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFy
Z0NoaWxkcmVuW25vZGUuZmlyc3RDaGlsZCgpXTsKKyAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUo
dGhpcywgY2FsbGVlTm9kZUluZGV4KTsKKyAgICBHUFJSZWcgY2FsbGVlR1BSID0gY2FsbGVlLmdw
cigpOworICAgIHVzZShjYWxsZWVOb2RlSW5kZXgpOworICAgIAorICAgIC8vIHRoZSBjYWxsIGlu
c3RydWN0aW9uJ3MgZmlyc3QgY2hpbGQgaXMgZWl0aGVyIHRoZSBmdW5jdGlvbiAobm9ybWFsIGNh
bGwpIG9yIHRoZQorICAgIC8vIHJlY2VpdmVyIChtZXRob2QgY2FsbCkuIHN1YnNlcXVlbnQgY2hp
bGRyZW4gYXJlIHRoZSBhcmd1bWVudHMuCisgICAgaW50IG51bUFyZ3MgPSBub2RlLm51bUNoaWxk
cmVuKCkgLSAxOworICAgIAorICAgIGludCBudW1QYXNzZWRBcmdzID0gbnVtQXJncyArIGR1bW15
VGhpc0FyZ3VtZW50OworICAgIAorICAgIC8vIGFtb3VudCBvZiBzdHVmZiAoaW4gdW5pdHMgb2Yg
c2l6ZW9mKFJlZ2lzdGVyKSkgdGhhdCB3ZSBuZWVkIHRvIHBsYWNlIGF0IHRoZQorICAgIC8vIHRv
cCBvZiB0aGUgSlMgc3RhY2suCisgICAgaW50IGNhbGxEYXRhU2l6ZSA9IDA7CisKKyAgICAvLyBm
aXJzdCB0aGVyZSBhcmUgdGhlIGFyZ3VtZW50cworICAgIGNhbGxEYXRhU2l6ZSArPSBudW1QYXNz
ZWRBcmdzOworICAgIAorICAgIC8vIGFuZCB0aGVuIHRoZXJlIGlzIHRoZSBjYWxsIGZyYW1lIGhl
YWRlcgorICAgIGNhbGxEYXRhU2l6ZSArPSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNp
emU7CisgICAgCisgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG51bVBhc3NlZEFyZ3MpKSksIGFkZHJlc3NPZkNh
bGxEYXRhKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkpOworICAgIG1faml0LnN0b3JlUHRy
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBhZGRyZXNzT2ZDYWxsRGF0YShSZWdpc3RlckZp
bGU6OkNhbGxlckZyYW1lKSk7CisgICAgCisgICAgZm9yIChpbnQgYXJnSWR4ID0gMDsgYXJnSWR4
IDwgbnVtQXJnczsgYXJnSWR4KyspIHsKKyAgICAgICAgTm9kZUluZGV4IGFyZ05vZGVJbmRleCA9
IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKSArIDEgKyBh
cmdJZHhdOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJnTm9kZUluZGV4KTsK
KyAgICAgICAgR1BSUmVnIGFyZ0dQUiA9IGFyZy5ncHIoKTsKKyAgICAgICAgdXNlKGFyZ05vZGVJ
bmRleCk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5zdG9yZVB0cihhcmdHUFIsIGFkZHJlc3NP
ZkNhbGxEYXRhKC1jYWxsRGF0YVNpemUgKyBhcmdJZHggKyBkdW1teVRoaXNBcmd1bWVudCkpOwor
ICAgIH0KKyAgICAKKyAgICBtX2ppdC5zdG9yZVB0cihjYWxsZWVHUFIsIGFkZHJlc3NPZkNhbGxE
YXRhKFJlZ2lzdGVyRmlsZTo6Q2FsbGVlKSk7CisgICAgCisgICAgZmx1c2hSZWdpc3RlcnMoKTsK
KyAgICAKKyAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisKKyAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRyIHRhcmdldFRv
Q2hlY2s7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGg7CisgICAgCisgICAgc2xvd1Bh
dGggPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBj
YWxsZWVHUFIsIHRhcmdldFRvQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSk7CisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Nj
b3BlQ2hhaW4pKSwgcmVzdWx0R1BSKTsKKyAgICBtX2ppdC5zdG9yZVB0cihyZXN1bHRHUFIsIGFk
ZHJlc3NPZkNhbGxEYXRhKFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikpOworCisgICAgbV9qaXQu
YWRkUHRyKEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNp
emVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgZmFzdENhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOworICAgIG1faml0
Lm5vdGlmeUNhbGwoZmFzdENhbGwsIGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luKTsKKyAg
ICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgIAorICAg
IHNsb3dQYXRoLmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBtX2ppdC5hZGRQdHIoSW1tMzIobV9q
aXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSks
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAg
IEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQuYWRkRmFzdEV4Y2VwdGlvbkNoZWNr
KG1faml0LmFwcGVuZENhbGwoc2xvd0NhbGxGdW5jdGlvbiksIGF0KG1fY29tcGlsZUluZGV4KS5j
b2RlT3JpZ2luKTsKKyAgICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1f
bnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyKTsKKyAgICBtX2ppdC5ub3RpZnlDYWxsKG1faml0LmNhbGwoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpLCBhdChtX2NvbXBpbGVJbmRleCkuY29kZU9yaWdpbik7CisgICAgCisgICAg
ZG9uZS5saW5rKCZtX2ppdCk7CisgICAgCisgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwg
bV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5
KTsKKyAgICAKKyAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRU
b0NoZWNrLCBjYWxsVHlwZSwgYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pOworfQorCiB0
ZW1wbGF0ZTxib29sIHN0cmljdD4KIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZUludEludGVybmFsKE5vZGVJbmRleCBub2RlSW5kZXgsIERhdGFGb3JtYXQmIHJldHVybkZvcm1h
dCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCShyZXZpc2lvbiAxMDAyMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTggKzI0LDczMyBA
QAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLQogI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZl
SklULmgiCi0jaW5jbHVkZSAiSlNCeXRlQXJyYXkuaCIKIAogI2lmIEVOQUJMRShERkdfSklUKQog
Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKICNpbmNsdWRlICJERkdKSVRDb21waWxlcklubGluZU1l
dGhvZHMuaCIKLSNlbmRpZgorI2luY2x1ZGUgIkpTQnl0ZUFycmF5LmgiCisjaW5jbHVkZSAiTGlu
a0J1ZmZlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK2NvbnN0IGRv
dWJsZSBTcGVjdWxhdGl2ZUpJVDo6dHdvVG9UaGUzMiA9IChkb3VibGUpMHgxMDAwMDAwMDB1bGw7
CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNsZWFyR2VuZXJhdGlvbkluZm8oKQoreworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dlbmVyYXRpb25JbmZvLnNpemUoKTsgKytpKQorICAg
ICAgICBtX2dlbmVyYXRpb25JbmZvW2ldID0gR2VuZXJhdGlvbkluZm8oKTsKKyAgICBtX2dwcnMg
PSBSZWdpc3RlckJhbms8R1BSSW5mbz4oKTsKKyAgICBtX2ZwcnMgPSBSZWdpc3RlckJhbms8RlBS
SW5mbz4oKTsKK30KKworR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZShOb2RlSW5k
ZXggbm9kZUluZGV4KQoreworICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRl
eF07CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJl
Z2lzdGVyKCk7CisgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3Zp
cnR1YWxSZWdpc3Rlcl07CisgICAgCisgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkp
IHsKKyAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7CisgICAgICAgIEdQUlJlZyBncHIgPSBhbGxv
Y2F0ZSgpOworICAgICAgICBBU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRT
dG9yYWdlKTsKKyAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3Bp
bGxPcmRlclNwaWxsZWQpOworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRy
ZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAgIGluZm8uZmlsbFN0b3JhZ2Uo
Z3ByKTsKKyAgICAgICAgcmV0dXJuIGdwcjsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgRGF0
YUZvcm1hdFN0b3JhZ2U6IHsKKyAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CisgICAg
ICAgIG1fZ3Bycy5sb2NrKGdwcik7CisgICAgICAgIHJldHVybiBncHI7CisgICAgfQorICAgICAg
ICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6
OnVzZUNoaWxkcmVuKE5vZGUmIG5vZGUpCit7CisgICAgaWYgKG5vZGUub3AgJiBOb2RlSGFzVmFy
QXJncykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxk
KCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNo
aWxkSWR4KyspCisgICAgICAgICAgICB1c2UobV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTm9kZUluZGV4IGNoaWxkMSA9IG5v
ZGUuY2hpbGQxKCk7CisgICAgICAgIGlmIChjaGlsZDEgPT0gTm9Ob2RlKSB7CisgICAgICAgICAg
ICBBU1NFUlQobm9kZS5jaGlsZDIoKSA9PSBOb05vZGUgJiYgbm9kZS5jaGlsZDMoKSA9PSBOb05v
ZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHVzZShjaGlsZDEp
OworICAgICAgICAKKyAgICAgICAgTm9kZUluZGV4IGNoaWxkMiA9IG5vZGUuY2hpbGQyKCk7Cisg
ICAgICAgIGlmIChjaGlsZDIgPT0gTm9Ob2RlKSB7CisgICAgICAgICAgICBBU1NFUlQobm9kZS5j
aGlsZDMoKSA9PSBOb05vZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHVzZShjaGlsZDIpOworICAgICAgICAKKyAgICAgICAgTm9kZUluZGV4IGNoaWxkMyA9IG5v
ZGUuY2hpbGQzKCk7CisgICAgICAgIGlmIChjaGlsZDMgPT0gTm9Ob2RlKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB1c2UoY2hpbGQzKTsKKyAgICB9Cit9CisKK2Jvb2wgU3BlY3VsYXRp
dmVKSVQ6OmlzU3RyaWN0SW50MzIoTm9kZUluZGV4IG5vZGVJbmRleCkKK3sKKyAgICBpZiAoaXNJ
bnQzMkNvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAg
IE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAgR2VuZXJhdGlvbklu
Zm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW25vZGUudmlydHVhbFJlZ2lzdGVyKCldOworICAg
IAorICAgIHJldHVybiBpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEludGVnZXI7
Cit9CisKK2Jvb2wgU3BlY3VsYXRpdmVKSVQ6OmlzS25vd25JbnRlZ2VyKE5vZGVJbmRleCBub2Rl
SW5kZXgpCit7CisgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07
CisgICAgCisgICAgaWYgKG5vZGUuaGFzSW50MzJSZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgCisgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW25v
ZGUudmlydHVhbFJlZ2lzdGVyKCldOworCisgICAgcmV0dXJuIGluZm8uaXNKU0ludGVnZXIoKTsK
K30KKworYm9vbCBTcGVjdWxhdGl2ZUpJVDo6aXNLbm93bk51bWVyaWMoTm9kZUluZGV4IG5vZGVJ
bmRleCkKK3sKKyAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkgfHwgaXNOdW1iZXJD
b25zdGFudChub2RlSW5kZXgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIE5vZGUmIG5v
ZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAgCisgICAgaWYgKG5vZGUuaGFzTnVt
YmVyUmVzdWx0KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIEdlbmVyYXRpb25J
bmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tub2RlLnZpcnR1YWxSZWdpc3RlcigpXTsKKwor
ICAgIHJldHVybiBpbmZvLmlzSlNJbnRlZ2VyKCkgfHwgaW5mby5pc0pTRG91YmxlKCk7Cit9CisK
K2Jvb2wgU3BlY3VsYXRpdmVKSVQ6OmlzS25vd25DZWxsKE5vZGVJbmRleCBub2RlSW5kZXgpCit7
CisgICAgcmV0dXJuIG1fZ2VuZXJhdGlvbkluZm9bbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdLnZp
cnR1YWxSZWdpc3RlcigpXS5pc0pTQ2VsbCgpOworfQorCitib29sIFNwZWN1bGF0aXZlSklUOjpp
c0tub3duTm90Q2VsbChOb2RlSW5kZXggbm9kZUluZGV4KQoreworICAgIE5vZGUmIG5vZGUgPSBt
X2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgR2VuZXJhdGlvbkluZm8mIGluZm8g
PSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgaWYgKG5vZGUuaGFzQ29u
c3RhbnQoKSAmJiAhdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5pc0NlbGwoKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuICEoaW5mby5pc0pTQ2VsbCgpIHx8IGluZm8uaXNV
bmtub3duSlMoKSk7Cit9CisKK2Jvb2wgU3BlY3VsYXRpdmVKSVQ6OmlzS25vd25Ob3RJbnRlZ2Vy
KE5vZGVJbmRleCBub2RlSW5kZXgpCit7CisgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClb
bm9kZUluZGV4XTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52
aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlv
bkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAKKyAgICByZXR1cm4gaW5mby5pc0pTRG91Ymxl
KCkgfHwgaW5mby5pc0pTQ2VsbCgpIHx8IGluZm8uaXNKU0Jvb2xlYW4oKQorICAgICAgICB8fCAo
bm9kZS5oYXNDb25zdGFudCgpICYmICF2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmlzSW50
MzIoKSk7Cit9CisKK2Jvb2wgU3BlY3VsYXRpdmVKSVQ6OmlzS25vd25Ob3ROdW1iZXIoTm9kZUlu
ZGV4IG5vZGVJbmRleCkKK3sKKyAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5k
ZXhdOworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxS
ZWdpc3RlcigpOworICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2
aXJ0dWFsUmVnaXN0ZXJdOworICAgIAorICAgIHJldHVybiAoIWluZm8uaXNKU0RvdWJsZSgpICYm
ICFpbmZvLmlzSlNJbnRlZ2VyKCkgJiYgIWluZm8uaXNVbmtub3duSlMoKSkKKyAgICAgICAgfHwg
KG5vZGUuaGFzQ29uc3RhbnQoKSAmJiAhaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKTsKK30K
KworYm9vbCBTcGVjdWxhdGl2ZUpJVDo6aXNLbm93bkJvb2xlYW4oTm9kZUluZGV4IG5vZGVJbmRl
eCkKK3sKKyAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOworICAgIGlm
IChub2RlLmhhc0Jvb2xlYW5SZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisg
ICAgaWYgKGlzQm9vbGVhbkNvbnN0YW50KG5vZGVJbmRleCkpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIAorICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1
YWxSZWdpc3RlcigpOworICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5m
b1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgIAorICAgIHJldHVybiBpbmZvLmlzSlNCb29sZWFuKCk7
Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihNYWNyb0Fzc2VtYmxlciYg
aml0LCBHUFJSZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyLCBXcml0
ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQpCit7CisgICAgVU5VU0VEX1BBUkFNKGppdCk7CisgICAg
VU5VU0VEX1BBUkFNKG93bmVyKTsKKyAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDEpOworICAgIFVO
VVNFRF9QQVJBTShzY3JhdGNoMik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOworICAgIEFT
U0VSVChvd25lciAhPSBzY3JhdGNoMSk7CisgICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gyKTsK
KyAgICBBU1NFUlQoc2NyYXRjaDEgIT0gc2NyYXRjaDIpOworCisjaWYgRU5BQkxFKFdSSVRFX0JB
UlJJRVJfUFJPRklMSU5HKQorICAgIEpJVENvbXBpbGVyOjplbWl0Q291bnQoaml0LCBXcml0ZUJh
cnJpZXJDb3VudGVyczo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7CisjZW5kaWYKKyAgICBtYXJr
Q2VsbENhcmQoaml0LCBvd25lciwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKK30KKwordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6bWFya0NlbGxDYXJkKE1hY3JvQXNzZW1ibGVyJiBqaXQsIEdQUlJlZyBvd25l
ciwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit7CisgICAgVU5VU0VEX1BBUkFN
KGppdCk7CisgICAgVU5VU0VEX1BBUkFNKG93bmVyKTsKKyAgICBVTlVTRURfUEFSQU0oc2NyYXRj
aDEpOworICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMik7CisgICAgCisjaWYgRU5BQkxFKEdHQykK
KyAgICBqaXQubW92ZShvd25lciwgc2NyYXRjaDEpOworICAgIGppdC5hbmRQdHIoVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KE1hcmtlZEJsb2NrOjpibG9ja01hc2spKSwgc2NyYXRj
aDEpOworICAgIGppdC5tb3ZlKG93bmVyLCBzY3JhdGNoMik7CisgICAgLy8gY29uc3VtZSBhZGRp
dGlvbmFsIDggYml0cyBhcyB3ZSdyZSB1c2luZyBhbiBhcHByb3hpbWF0ZSBmaWx0ZXIKKyAgICBq
aXQucnNoaWZ0MzIoVHJ1c3RlZEltbTMyKE1hcmtlZEJsb2NrOjphdG9tU2hpZnQgKyA4KSwgc2Ny
YXRjaDIpOworICAgIGppdC5hbmRQdHIoVHJ1c3RlZEltbTMyKE1hcmtlZEJsb2NrOjphdG9tTWFz
ayA+PiA4KSwgc2NyYXRjaDIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZpbHRlciA9IGpp
dC5icmFuY2hUZXN0OChNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzY3JhdGNoMSwgc2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSwgTWFya2Vk
QmxvY2s6Om9mZnNldE9mTWFya3MoKSkpOworICAgIGppdC5tb3ZlKG93bmVyLCBzY3JhdGNoMik7
CisgICAgaml0LnJzaGlmdDMyKFRydXN0ZWRJbW0zMihNYXJrZWRCbG9jazo6Y2FyZFNoaWZ0KSwg
c2NyYXRjaDIpOworICAgIGppdC5hbmRQdHIoVHJ1c3RlZEltbTMyKE1hcmtlZEJsb2NrOjpjYXJk
TWFzayksIHNjcmF0Y2gyKTsKKyAgICBqaXQuc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoMSwgc2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc09uZSwgTWFya2VkQmxvY2s6Om9mZnNldE9mQ2FyZHMoKSkpOworICAgIGZpbHRlci5saW5r
KCZqaXQpOworI2VuZGlmCit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihH
UFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgTm9kZUluZGV4IHZhbHVlSW5kZXgsIFdy
aXRlQmFycmllclVzZUtpbmQgdXNlS2luZCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRj
aDIpCit7CisgICAgVU5VU0VEX1BBUkFNKG93bmVyR1BSKTsKKyAgICBVTlVTRURfUEFSQU0odmFs
dWVHUFIpOworICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMSk7CisgICAgVU5VU0VEX1BBUkFNKHNj
cmF0Y2gyKTsKKyAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7CisKKyAgICBpZiAoaXNLbm93bk5v
dENlbGwodmFsdWVJbmRleCkpCisgICAgICAgIHJldHVybjsKKworI2lmIEVOQUJMRShXUklURV9C
QVJSSUVSX1BST0ZJTElORykKKyAgICBKSVRDb21waWxlcjo6ZW1pdENvdW50KG1faml0LCBXcml0
ZUJhcnJpZXJDb3VudGVyczo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7CisjZW5kaWYKKworI2lm
IEVOQUJMRShHR0MpCisgICAgR1BSVGVtcG9yYXJ5IHRlbXAxOworICAgIEdQUlRlbXBvcmFyeSB0
ZW1wMjsKKyAgICBpZiAoc2NyYXRjaDEgPT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaEdQUih0aGlzKTsKKyAgICAgICAgdGVtcDEuYWRvcHQoc2NyYXRjaEdQ
Uik7CisgICAgICAgIHNjcmF0Y2gxID0gdGVtcDEuZ3ByKCk7CisgICAgfQorICAgIGlmIChzY3Jh
dGNoMiA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoR1BS
KHRoaXMpOworICAgICAgICB0ZW1wMi5hZG9wdChzY3JhdGNoR1BSKTsKKyAgICAgICAgc2NyYXRj
aDIgPSB0ZW1wMi5ncHIoKTsKKyAgICB9CisgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgcmhz
Tm90Q2VsbDsKKyAgICBib29sIGhhZENlbGxDaGVjayA9IGZhbHNlOworICAgIGlmICghaXNLbm93
bkNlbGwodmFsdWVJbmRleCkgJiYgIWlzQ2VsbFByZWRpY3Rpb24obV9qaXQuZ2V0UHJlZGljdGlv
bih2YWx1ZUluZGV4KSkpIHsKKyAgICAgICAgaGFkQ2VsbENoZWNrID0gdHJ1ZTsKKyAgICAgICAg
cmhzTm90Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2VsbCh2YWx1ZUdQUik7CisgICAgfQorCisg
ICAgbWFya0NlbGxDYXJkKG1faml0LCBvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKKwor
ICAgIGlmIChoYWRDZWxsQ2hlY2spCisgICAgICAgIHJoc05vdENlbGwubGluaygmbV9qaXQpOwor
I2VuZGlmCit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3du
ZXJHUFIsIEpTQ2VsbCogdmFsdWUsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCwgR1BSUmVn
IHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit7CisgICAgVU5VU0VEX1BBUkFNKG93bmVyR1BS
KTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMSk7
CisgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gyKTsKKyAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7
CisgICAgCisgICAgaWYgKEhlYXA6OmlzTWFya2VkKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuOwor
CisjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQorICAgIEpJVENvbXBpbGVyOjpl
bWl0Q291bnQobV9qaXQsIFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRDb3VudGVyRm9yKHVzZUtp
bmQpKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKEdHQykKKyAgICBHUFJUZW1wb3JhcnkgdGVtcDE7
CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAyOworICAgIGlmIChzY3JhdGNoMSA9PSBJbnZhbGlkR1BS
UmVnKSB7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoR1BSKHRoaXMpOworICAgICAgICB0
ZW1wMS5hZG9wdChzY3JhdGNoR1BSKTsKKyAgICAgICAgc2NyYXRjaDEgPSB0ZW1wMS5ncHIoKTsK
KyAgICB9CisgICAgaWYgKHNjcmF0Y2gyID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2hHUFIodGhpcyk7CisgICAgICAgIHRlbXAyLmFkb3B0KHNjcmF0Y2hH
UFIpOworICAgICAgICBzY3JhdGNoMiA9IHRlbXAyLmdwcigpOworICAgIH0KKworICAgIG1hcmtD
ZWxsQ2FyZChtX2ppdCwgb3duZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisjZW5kaWYKK30K
Kwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIEdQUlJl
ZyB2YWx1ZUdQUiwgTm9kZUluZGV4IHZhbHVlSW5kZXgsIFdyaXRlQmFycmllclVzZUtpbmQgdXNl
S2luZCwgR1BSUmVnIHNjcmF0Y2gpCit7CisgICAgVU5VU0VEX1BBUkFNKG93bmVyKTsKKyAgICBV
TlVTRURfUEFSQU0odmFsdWVHUFIpOworICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsKKyAgICBV
TlVTRURfUEFSQU0odXNlS2luZCk7CisKKyAgICBpZiAoaXNLbm93bk5vdENlbGwodmFsdWVJbmRl
eCkpCisgICAgICAgIHJldHVybjsKKworI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElO
RykKKyAgICBKSVRDb21waWxlcjo6ZW1pdENvdW50KG1faml0LCBXcml0ZUJhcnJpZXJDb3VudGVy
czo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7CisjZW5kaWYKKworI2lmIEVOQUJMRShHR0MpCisg
ICAgSklUQ29tcGlsZXI6Okp1bXAgcmhzTm90Q2VsbDsKKyAgICBib29sIGhhZENlbGxDaGVjayA9
IGZhbHNlOworICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVJbmRleCkgJiYgIWlzQ2VsbFByZWRp
Y3Rpb24obV9qaXQuZ2V0UHJlZGljdGlvbih2YWx1ZUluZGV4KSkpIHsKKyAgICAgICAgaGFkQ2Vs
bENoZWNrID0gdHJ1ZTsKKyAgICAgICAgcmhzTm90Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2Vs
bCh2YWx1ZUdQUik7CisgICAgfQorICAgIAorICAgIEdQUlRlbXBvcmFyeSB0ZW1wOworICAgIGlm
IChzY3JhdGNoID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2hHUFIodGhpcyk7CisgICAgICAgIHRlbXAuYWRvcHQoc2NyYXRjaEdQUik7CisgICAgICAgIHNj
cmF0Y2ggPSB0ZW1wLmdwcigpOworICAgIH0KKworICAgIHVpbnQ4X3QqIGNhcmRBZGRyZXNzID0g
SGVhcDo6YWRkcmVzc09mQ2FyZEZvcihvd25lcik7CisgICAgbV9qaXQubW92ZShKSVRDb21waWxl
cjo6VHJ1c3RlZEltbVB0cihjYXJkQWRkcmVzcyksIHNjcmF0Y2gpOworICAgIG1faml0LnN0b3Jl
OChKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEpLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3Jh
dGNoKSk7CisKKyAgICBpZiAoaGFkQ2VsbENoZWNrKQorICAgICAgICByaHNOb3RDZWxsLmxpbmso
Jm1faml0KTsKKyNlbmRpZgorfQorCitib29sIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2
ZUNvbXBhcmUoTm9kZSYgbm9kZSwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZCwgU19ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQoreworICAgIE5vZGVJbmRl
eCBicmFuY2hOb2RlSW5kZXggPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOworICAgIGlmIChicmFu
Y2hOb2RlSW5kZXggIT0gTm9Ob2RlKSB7CisgICAgICAgIEFTU0VSVChub2RlLmFkanVzdGVkUmVm
Q291bnQoKSA9PSAxKTsKKyAgICAgICAgCisgICAgICAgIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVC
cmFuY2gobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBjb25kLCBoZWxwZXJGdW5jdGlvbik7CisgICAg
CisgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYnJhbmNoTm9kZUluZGV4OworICAgICAgICAKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIG5vblNwZWN1bGF0aXZlTm9uUGVl
cGhvbGVDb21wYXJlKG5vZGUsIGNvbmQsIGhlbHBlckZ1bmN0aW9uKTsKKyAgICAKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlU3RyaWN0
RXEoTm9kZSYgbm9kZSwgYm9vbCBpbnZlcnQpCit7CisgICAgaWYgKCFpbnZlcnQgJiYgKGlzS25v
d25OdW1lcmljKG5vZGUuY2hpbGQxKCkpIHx8IGlzS25vd25OdW1lcmljKG5vZGUuY2hpbGQyKCkp
KSkKKyAgICAgICAgcmV0dXJuIG5vblNwZWN1bGF0aXZlQ29tcGFyZShub2RlLCBNYWNyb0Fzc2Vt
Ymxlcjo6RXF1YWwsIG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSk7CisgICAgCisgICAgTm9kZUlu
ZGV4IGJyYW5jaE5vZGVJbmRleCA9IGRldGVjdFBlZXBIb2xlQnJhbmNoKCk7CisgICAgaWYgKGJy
YW5jaE5vZGVJbmRleCAhPSBOb05vZGUpIHsKKyAgICAgICAgQVNTRVJUKG5vZGUuYWRqdXN0ZWRS
ZWZDb3VudCgpID09IDEpOworICAgICAgICAKKyAgICAgICAgbm9uU3BlY3VsYXRpdmVQZWVwaG9s
ZVN0cmljdEVxKG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgaW52ZXJ0KTsKKyAgICAKKyAgICAgICAg
bV9jb21waWxlSW5kZXggPSBicmFuY2hOb2RlSW5kZXg7CisgICAgICAgIAorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0cmlj
dEVxKG5vZGUsIGludmVydCk7CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCisjaWZuZGVm
IE5ERUJVRworc3RhdGljIGNvbnN0IGNoYXIqIGRhdGFGb3JtYXRTdHJpbmcoRGF0YUZvcm1hdCBm
b3JtYXQpCit7CisgICAgLy8gVGhlc2UgdmFsdWVzIGNvcnJlc3BvbmQgdG8gdGhlIERhdGFGb3Jt
YXQgZW51bS4KKyAgICBjb25zdCBjaGFyKiBzdHJpbmdzW10gPSB7CisgICAgICAgICJbICBdIiwK
KyAgICAgICAgIlsgaV0iLAorICAgICAgICAiWyBkXSIsCisgICAgICAgICJbIGNdIiwKKyAgICAg
ICAgIkVyciEiLAorICAgICAgICAiRXJyISIsCisgICAgICAgICJFcnIhIiwKKyAgICAgICAgIkVy
ciEiLAorICAgICAgICAiW0ogXSIsCisgICAgICAgICJbSmldIiwKKyAgICAgICAgIltKZF0iLAor
ICAgICAgICAiW0pjXSIsCisgICAgICAgICJFcnIhIiwKKyAgICAgICAgIkVyciEiLAorICAgICAg
ICAiRXJyISIsCisgICAgICAgICJFcnIhIiwKKyAgICB9OworICAgIHJldHVybiBzdHJpbmdzW2Zv
cm1hdF07Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmR1bXAoY29uc3QgY2hhciogbGFiZWwp
Cit7CisgICAgaWYgKGxhYmVsKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIjwlcz5cbiIsIGxh
YmVsKTsKKworICAgIGZwcmludGYoc3RkZXJyLCAiICBncHJzOlxuIik7CisgICAgbV9ncHJzLmR1
bXAoKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgZnByczpcbiIpOworICAgIG1fZnBycy5kdW1w
KCk7CisgICAgZnByaW50ZihzdGRlcnIsICIgIFZpcnR1YWxSZWdpc3RlcnM6XG4iKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9nZW5lcmF0aW9uSW5mby5zaXplKCk7ICsraSkgewor
ICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9baV07CisgICAg
ICAgIGlmIChpbmZvLmFsaXZlKCkpCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICAl
IDNkOiVzJXMiLCBpLCBkYXRhRm9ybWF0U3RyaW5nKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSksIGRh
dGFGb3JtYXRTdHJpbmcoaW5mby5zcGlsbEZvcm1hdCgpKSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICUgM2Q6W19fXVtfX10iLCBpKTsKKyAgICAgICAg
aWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQorICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICI6ZnByJWRcbiIsIGluZm8uZnByKCkpOworICAgICAgICBlbHNl
IGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUKKyNpZiBVU0UoSlNW
QUxVRTMyXzY0KQorICAgICAgICAgICAgJiYgIShpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgJiBEYXRh
Rm9ybWF0SlMpCisjZW5kaWYKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgQVNTRVJUKGlu
Zm8uZ3ByKCkgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
Ijolc1xuIiwgR1BSSW5mbzo6ZGVidWdOYW1lKGluZm8uZ3ByKCkpKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgICAgfQorICAgIGlmIChsYWJl
bCkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICI8LyVzPlxuIiwgbGFiZWwpOworfQorI2VuZGlm
CisKKworI2lmIERGR19FTkFCTEUoQ09OU0lTVEVOQ1lfQ0hFQ0spCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjaGVja0NvbnNpc3RlbmN5KCkKK3sKKyAgICBib29sIGZhaWxlZCA9IGZhbHNlOworCisg
ICAgZm9yIChncHJfaXRlcmF0b3IgaXRlciA9IG1fZ3Bycy5iZWdpbigpOyBpdGVyICE9IG1fZ3By
cy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIGlmIChpdGVyLmlzTG9ja2VkKCkpIHsKKyAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiREZHX0NPTlNJU1RFTkNZX0NIRUNLIGZhaWxlZDogZ3By
ICVzIGlzIGxvY2tlZC5cbiIsIGl0ZXIuZGVidWdOYW1lKCkpOworICAgICAgICAgICAgZmFpbGVk
ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGZwcl9pdGVyYXRvciBpdGVyID0g
bV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAg
aWYgKGl0ZXIuaXNMb2NrZWQoKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJERkdf
Q09OU0lTVEVOQ1lfQ0hFQ0sgZmFpbGVkOiBmcHIgJXMgaXMgbG9ja2VkLlxuIiwgaXRlci5kZWJ1
Z05hbWUoKSk7CisgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQor
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ2VuZXJhdGlvbkluZm8uc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IChWaXJ0dWFs
UmVnaXN0ZXIpaTsKKyAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25J
bmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAgIGlmICghaW5mby5hbGl2ZSgpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7
CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBEYXRhRm9ybWF0SlM6CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTSW50ZWdlcjoK
KyAgICAgICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6CisgICAgICAgIGNhc2UgRGF0YUZvcm1h
dEpTQ2VsbDoKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOgorI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICBjYXNlIERhdGFG
b3JtYXRJbnRlZ2VyOgorICAgICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgorICAgICAgICBjYXNl
IERhdGFGb3JtYXRCb29sZWFuOgorICAgICAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdlOiB7Cisg
ICAgICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKKyAgICAgICAgICAgIEFTU0VSVChn
cHIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICBpZiAobV9ncHJzLm5hbWUoZ3ByKSAh
PSB2aXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRG
R19DT05TSVNURU5DWV9DSEVDSyBmYWlsZWQ6IG5hbWUgbWlzbWF0Y2ggZm9yIHZpcnR1YWwgcmVn
aXN0ZXIgJWQgKGdwciAlcykuXG4iLCB2aXJ0dWFsUmVnaXN0ZXIsIEdQUkluZm86OmRlYnVnTmFt
ZShncHIpKTsKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0RG91
YmxlOiB7CisgICAgICAgICAgICBGUFJSZWcgZnByID0gaW5mby5mcHIoKTsKKyAgICAgICAgICAg
IEFTU0VSVChmcHIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICBpZiAobV9mcHJzLm5h
bWUoZnByKSAhPSB2aXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkRGR19DT05TSVNURU5DWV9DSEVDSyBmYWlsZWQ6IG5hbWUgbWlzbWF0Y2ggZm9yIHZp
cnR1YWwgcmVnaXN0ZXIgJWQgKGZwciAlcykuXG4iLCB2aXJ0dWFsUmVnaXN0ZXIsIEZQUkluZm86
OmRlYnVnTmFtZShmcHIpKTsKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIGZvciAoZ3ByX2l0ZXJhdG9yIGl0ZXIgPSBtX2dwcnMuYmVnaW4oKTsgaXRlciAhPSBt
X2dwcnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyID0gaXRlci5uYW1lKCk7CisgICAgICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXIgPT0gSW52
YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEdl
bmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGlmIChpdGVyLnJlZ0lEKCkgIT0gaW5mby5ncHIo
KSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJERkdfQ09OU0lTVEVOQ1lfQ0hFQ0sg
ZmFpbGVkOiBuYW1lIG1pc21hdGNoIGZvciBncHIgJXMgKHZpcnR1YWwgcmVnaXN0ZXIgJWQpLlxu
IiwgaXRlci5kZWJ1Z05hbWUoKSwgdmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGZhaWxl
ZCA9IHRydWU7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIGlmICghKGluZm8ucmVnaXN0ZXJG
b3JtYXQoKSAmIERhdGFGb3JtYXRKUykpIHsKKyAgICAgICAgICAgIGlmIChpdGVyLnJlZ0lEKCkg
IT0gaW5mby5ncHIoKSkgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiREZHX0NP
TlNJU1RFTkNZX0NIRUNLIGZhaWxlZDogbmFtZSBtaXNtYXRjaCBmb3IgZ3ByICVzICh2aXJ0dWFs
IHJlZ2lzdGVyICVkKS5cbiIsIGl0ZXIuZGVidWdOYW1lKCksIHZpcnR1YWxSZWdpc3Rlcik7Cisg
ICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlmIChpdGVyLnJlZ0lEKCkgIT0gaW5mby50YWdHUFIoKSAmJiBp
dGVyLnJlZ0lEKCkgIT0gaW5mby5wYXlsb2FkR1BSKCkpIHsKKyAgICAgICAgICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIkRGR19DT05TSVNURU5DWV9DSEVDSyBmYWlsZWQ6IG5hbWUgbWlzbWF0Y2gg
Zm9yIGdwciAlcyAodmlydHVhbCByZWdpc3RlciAlZCkuXG4iLCBpdGVyLmRlYnVnTmFtZSgpLCB2
aXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIGZvciAoZnByX2l0ZXJhdG9y
IGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgewor
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gaXRlci5uYW1lKCk7Cisg
ICAgICAgIGlmICh2aXJ0dWFsUmVnaXN0ZXIgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9n
ZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgICAgICBpZiAoaXRlci5yZWdJRCgp
ICE9IGluZm8uZnByKCkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiREZHX0NPTlNJ
U1RFTkNZX0NIRUNLIGZhaWxlZDogbmFtZSBtaXNtYXRjaCBmb3IgZnByICVzICh2aXJ0dWFsIHJl
Z2lzdGVyICVkKS5cbiIsIGl0ZXIuZGVidWdOYW1lKCksIHZpcnR1YWxSZWdpc3Rlcik7CisgICAg
ICAgICAgICBmYWlsZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZhaWxl
ZCkgeworICAgICAgICBkdW1wKCk7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorfQorI2VuZGlm
CisKK0dQUlRlbXBvcmFyeTo6R1BSVGVtcG9yYXJ5KCkKKyAgICA6IG1faml0KDApCisgICAgLCBt
X2dwcihJbnZhbGlkR1BSUmVnKQoreworfQorCitHUFJUZW1wb3Jhcnk6OkdQUlRlbXBvcmFyeShT
cGVjdWxhdGl2ZUpJVCogaml0KQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9ncHIoSW52YWxp
ZEdQUlJlZykKK3sKKyNpZiBDUFUoWDg2KQorICAgIC8vIHdlIGN1cnJlbnR5IGxhemlseSBhbGxv
Y2F0ZSB0aGUgcmVnLCBhcyB0aGUgbnVtYmVyIG9mIHJlZ3Mgb24gWDg2IGlzIGxpbWl0ZWQuCisj
ZWxzZQorICAgIG1fZ3ByID0gbV9qaXQtPmFsbG9jYXRlKCk7CisjZW5kaWYKK30KKworR1BSVGVt
cG9yYXJ5OjpHUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgR1BSUmVnIHNwZWNpZmlj
KQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9ncHIoSW52YWxpZEdQUlJlZykKK3sKKyAgICBt
X2dwciA9IG1faml0LT5hbGxvY2F0ZShzcGVjaWZpYyk7Cit9CisKK0dQUlRlbXBvcmFyeTo6R1BS
VGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQsIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kJiBv
cDEpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX2dwcihJbnZhbGlkR1BSUmVnKQoreworICAg
IGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AxLmluZGV4KCkpKQorICAgICAgICBtX2dwciA9IG1faml0
LT5yZXVzZShvcDEuZ3ByKCkpOworICAgIGVsc2UKKyAgICAgICAgbV9ncHIgPSBtX2ppdC0+YWxs
b2NhdGUoKTsKK30KKworR1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQq
IGppdCwgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQmIG9wMSwgU3BlY3VsYXRlSW50ZWdlck9wZXJh
bmQmIG9wMikKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fZ3ByKEludmFsaWRHUFJSZWcpCit7
CisgICAgaWYgKG1faml0LT5jYW5SZXVzZShvcDEuaW5kZXgoKSkpCisgICAgICAgIG1fZ3ByID0g
bV9qaXQtPnJldXNlKG9wMS5ncHIoKSk7CisgICAgZWxzZSBpZiAobV9qaXQtPmNhblJldXNlKG9w
Mi5pbmRleCgpKSkKKyAgICAgICAgbV9ncHIgPSBtX2ppdC0+cmV1c2Uob3AyLmdwcigpKTsKKyAg
ICBlbHNlCisgICAgICAgIG1fZ3ByID0gbV9qaXQtPmFsbG9jYXRlKCk7Cit9CisKK0dQUlRlbXBv
cmFyeTo6R1BSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQsIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCYgb3AxKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9ncHIoSW52YWxpZEdQ
UlJlZykKK3sKKyAgICBpZiAobV9qaXQtPmNhblJldXNlKG9wMS5pbmRleCgpKSkKKyAgICAgICAg
bV9ncHIgPSBtX2ppdC0+cmV1c2Uob3AxLmdwcigpKTsKKyAgICBlbHNlCisgICAgICAgIG1fZ3By
ID0gbV9qaXQtPmFsbG9jYXRlKCk7Cit9CisKK0dQUlRlbXBvcmFyeTo6R1BSVGVtcG9yYXJ5KFNw
ZWN1bGF0aXZlSklUKiBqaXQsIEludGVnZXJPcGVyYW5kJiBvcDEpCisgICAgOiBtX2ppdChqaXQp
CisgICAgLCBtX2dwcihJbnZhbGlkR1BSUmVnKQoreworICAgIGlmIChtX2ppdC0+Y2FuUmV1c2Uo
b3AxLmluZGV4KCkpKQorICAgICAgICBtX2dwciA9IG1faml0LT5yZXVzZShvcDEuZ3ByKCkpOwor
ICAgIGVsc2UKKyAgICAgICAgbV9ncHIgPSBtX2ppdC0+YWxsb2NhdGUoKTsKK30KKworR1BSVGVt
cG9yYXJ5OjpHUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgSW50ZWdlck9wZXJhbmQm
IG9wMSwgSW50ZWdlck9wZXJhbmQmIG9wMikKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fZ3By
KEludmFsaWRHUFJSZWcpCit7CisgICAgaWYgKG1faml0LT5jYW5SZXVzZShvcDEuaW5kZXgoKSkp
CisgICAgICAgIG1fZ3ByID0gbV9qaXQtPnJldXNlKG9wMS5ncHIoKSk7CisgICAgZWxzZSBpZiAo
bV9qaXQtPmNhblJldXNlKG9wMi5pbmRleCgpKSkKKyAgICAgICAgbV9ncHIgPSBtX2ppdC0+cmV1
c2Uob3AyLmdwcigpKTsKKyAgICBlbHNlCisgICAgICAgIG1fZ3ByID0gbV9qaXQtPmFsbG9jYXRl
KCk7Cit9CisKK0dQUlRlbXBvcmFyeTo6R1BSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQs
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kJiBvcDEpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX2dw
cihJbnZhbGlkR1BSUmVnKQoreworICAgIGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AxLmluZGV4KCkp
KQorICAgICAgICBtX2dwciA9IG1faml0LT5yZXVzZShvcDEuZ3ByKCkpOworICAgIGVsc2UKKyAg
ICAgICAgbV9ncHIgPSBtX2ppdC0+YWxsb2NhdGUoKTsKK30KKworR1BSVGVtcG9yYXJ5OjpHUFJU
ZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQmIG9w
MSkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fZ3ByKEludmFsaWRHUFJSZWcpCit7CisgICAg
aWYgKG1faml0LT5jYW5SZXVzZShvcDEuaW5kZXgoKSkpCisgICAgICAgIG1fZ3ByID0gbV9qaXQt
PnJldXNlKG9wMS5ncHIoKSk7CisgICAgZWxzZQorICAgICAgICBtX2dwciA9IG1faml0LT5hbGxv
Y2F0ZSgpOworfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKK0dQUlRlbXBvcmFyeTo6R1BSVGVtcG9y
YXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQsIEpTVmFsdWVPcGVyYW5kJiBvcDEpCisgICAgOiBtX2pp
dChqaXQpCisgICAgLCBtX2dwcihJbnZhbGlkR1BSUmVnKQoreworICAgIGlmIChtX2ppdC0+Y2Fu
UmV1c2Uob3AxLmluZGV4KCkpKQorICAgICAgICBtX2dwciA9IG1faml0LT5yZXVzZShvcDEuZ3By
KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9ncHIgPSBtX2ppdC0+YWxsb2NhdGUoKTsKK30KKyNl
bHNlCitHUFJUZW1wb3Jhcnk6OkdQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBKU1Zh
bHVlT3BlcmFuZCYgb3AxLCBib29sIHRhZykKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fZ3By
KEludmFsaWRHUFJSZWcpCit7CisgICAgaWYgKCFvcDEuaXNEb3VibGUoKSAmJiBtX2ppdC0+Y2Fu
UmV1c2Uob3AxLmluZGV4KCkpKQorICAgICAgICBtX2dwciA9IG1faml0LT5yZXVzZSh0YWcgPyBv
cDEudGFnR1BSKCkgOiBvcDEucGF5bG9hZEdQUigpKTsKKyAgICBlbHNlCisgICAgICAgIG1fZ3By
ID0gbV9qaXQtPmFsbG9jYXRlKCk7Cit9CisjZW5kaWYKKworR1BSVGVtcG9yYXJ5OjpHUFJUZW1w
b3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgU3RvcmFnZU9wZXJhbmQmIG9wMSkKKyAgICA6IG1f
aml0KGppdCkKKyAgICAsIG1fZ3ByKEludmFsaWRHUFJSZWcpCit7CisgICAgaWYgKG1faml0LT5j
YW5SZXVzZShvcDEuaW5kZXgoKSkpCisgICAgICAgIG1fZ3ByID0gbV9qaXQtPnJldXNlKG9wMS5n
cHIoKSk7CisgICAgZWxzZQorICAgICAgICBtX2dwciA9IG1faml0LT5hbGxvY2F0ZSgpOworfQor
Cit2b2lkIEdQUlRlbXBvcmFyeTo6YWRvcHQoR1BSVGVtcG9yYXJ5JiBvdGhlcikKK3sKKyAgICBB
U1NFUlQoIW1faml0KTsKKyAgICBBU1NFUlQobV9ncHIgPT0gSW52YWxpZEdQUlJlZyk7CisgICAg
QVNTRVJUKG90aGVyLm1faml0KTsKKyAgICBBU1NFUlQob3RoZXIubV9ncHIgIT0gSW52YWxpZEdQ
UlJlZyk7CisgICAgbV9qaXQgPSBvdGhlci5tX2ppdDsKKyAgICBtX2dwciA9IG90aGVyLm1fZ3By
OworICAgIG90aGVyLm1faml0ID0gMDsKKyAgICBvdGhlci5tX2dwciA9IEludmFsaWRHUFJSZWc7
Cit9CisKK0ZQUlRlbXBvcmFyeTo6RlBSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQpCisg
ICAgOiBtX2ppdChqaXQpCisgICAgLCBtX2ZwcihJbnZhbGlkRlBSUmVnKQoreworICAgIG1fZnBy
ID0gbV9qaXQtPmZwckFsbG9jYXRlKCk7Cit9CisKK0ZQUlRlbXBvcmFyeTo6RlBSVGVtcG9yYXJ5
KFNwZWN1bGF0aXZlSklUKiBqaXQsIERvdWJsZU9wZXJhbmQmIG9wMSkKKyAgICA6IG1faml0KGpp
dCkKKyAgICAsIG1fZnByKEludmFsaWRGUFJSZWcpCit7CisgICAgaWYgKG1faml0LT5jYW5SZXVz
ZShvcDEuaW5kZXgoKSkpCisgICAgICAgIG1fZnByID0gbV9qaXQtPnJldXNlKG9wMS5mcHIoKSk7
CisgICAgZWxzZQorICAgICAgICBtX2ZwciA9IG1faml0LT5mcHJBbGxvY2F0ZSgpOworfQorCitG
UFJUZW1wb3Jhcnk6OkZQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBEb3VibGVPcGVy
YW5kJiBvcDEsIERvdWJsZU9wZXJhbmQmIG9wMikKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1f
ZnByKEludmFsaWRGUFJSZWcpCit7CisgICAgaWYgKG1faml0LT5jYW5SZXVzZShvcDEuaW5kZXgo
KSkpCisgICAgICAgIG1fZnByID0gbV9qaXQtPnJldXNlKG9wMS5mcHIoKSk7CisgICAgZWxzZSBp
ZiAobV9qaXQtPmNhblJldXNlKG9wMi5pbmRleCgpKSkKKyAgICAgICAgbV9mcHIgPSBtX2ppdC0+
cmV1c2Uob3AyLmZwcigpKTsKKyAgICBlbHNlCisgICAgICAgIG1fZnByID0gbV9qaXQtPmZwckFs
bG9jYXRlKCk7Cit9CisKK0ZQUlRlbXBvcmFyeTo6RlBSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklU
KiBqaXQsIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQmIG9wMSkKKyAgICA6IG1faml0KGppdCkKKyAg
ICAsIG1fZnByKEludmFsaWRGUFJSZWcpCit7CisgICAgaWYgKG1faml0LT5jYW5SZXVzZShvcDEu
aW5kZXgoKSkpCisgICAgICAgIG1fZnByID0gbV9qaXQtPnJldXNlKG9wMS5mcHIoKSk7CisgICAg
ZWxzZQorICAgICAgICBtX2ZwciA9IG1faml0LT5mcHJBbGxvY2F0ZSgpOworfQorCitGUFJUZW1w
b3Jhcnk6OkZQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kJiBvcDEsIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQmIG9wMikKKyAgICA6IG1faml0KGpp
dCkKKyAgICAsIG1fZnByKEludmFsaWRGUFJSZWcpCit7CisgICAgaWYgKG1faml0LT5jYW5SZXVz
ZShvcDEuaW5kZXgoKSkpCisgICAgICAgIG1fZnByID0gbV9qaXQtPnJldXNlKG9wMS5mcHIoKSk7
CisgICAgZWxzZSBpZiAobV9qaXQtPmNhblJldXNlKG9wMi5pbmRleCgpKSkKKyAgICAgICAgbV9m
cHIgPSBtX2ppdC0+cmV1c2Uob3AyLmZwcigpKTsKKyAgICBlbHNlCisgICAgICAgIG1fZnByID0g
bV9qaXQtPmZwckFsbG9jYXRlKCk7Cit9CisKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorRlBSVGVt
cG9yYXJ5OjpGUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgSlNWYWx1ZU9wZXJhbmQm
IG9wMSkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fZnByKEludmFsaWRGUFJSZWcpCit7Cisg
ICAgaWYgKG9wMS5pc0RvdWJsZSgpICYmIG1faml0LT5jYW5SZXVzZShvcDEuaW5kZXgoKSkpCisg
ICAgICAgIG1fZnByID0gbV9qaXQtPnJldXNlKG9wMS5mcHIoKSk7CisgICAgZWxzZQorICAgICAg
ICBtX2ZwciA9IG1faml0LT5mcHJBbGxvY2F0ZSgpOworfQorI2VuZGlmCisKICNpZm5kZWYgTkRF
QlVHCiB2b2lkIFZhbHVlU291cmNlOjpkdW1wKEZJTEUqIG91dCkgY29uc3QKIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9u
IDEwMDIzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksMTMgKzI5LDIxIEBACiAjaWYgRU5BQkxFKERGR19KSVQp
CiAKICNpbmNsdWRlICJERkdBYnN0cmFjdFN0YXRlLmgiCi0jaW5jbHVkZSAiREZHSklUQ29kZUdl
bmVyYXRvci5oIgorI2luY2x1ZGUgIkRGR0dlbmVyYXRpb25JbmZvLmgiCisjaW5jbHVkZSAiREZH
SklUQ29tcGlsZXIuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0LmgiCisjaW5jbHVkZSAiREZHT3Bl
cmF0aW9ucy5oIgogI2luY2x1ZGUgIlZhbHVlUmVjb3ZlcnkuaCIKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBTcGVjdWxhdGl2ZUpJVDsKK2NsYXNzIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kOworY2xhc3MgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kOworY2xh
c3MgU3BlY3VsYXRlRG91YmxlT3BlcmFuZDsKK2NsYXNzIFNwZWN1bGF0ZUNlbGxPcGVyYW5kOwor
Y2xhc3MgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ7CisKIAogZW51bSBWYWx1ZVNvdXJjZUtpbmQg
ewogICAgIFNvdXJjZU5vdFNldCwKQEAgLTEyNSwxNCArMTMzLDIxMiBAQCBwcml2YXRlOgogLy8g
YSBzcGVjdWxhdGl2ZSBjaGVjayBoYXMgZmFpbGVkLiBUaGlzIGFsbG93cyB0aGUgU3BlY3VsYXRp
dmVKSVQKIC8vIHRvIHByb3BhZ2F0ZSB0eXBlIGluZm9ybWF0aW9uIChpbmNsdWRpbmcgaW5mb3Jt
YXRpb24gdGhhdCBoYXMKIC8vIG9ubHkgc3BlY3VsYXRpdmVseSBiZWVuIGFzc2VydGVkKSB0aHJv
dWdoIHRoZSBkYXRhZmxvdy4KLWNsYXNzIFNwZWN1bGF0aXZlSklUIDogcHVibGljIEpJVENvZGVH
ZW5lcmF0b3IgeworY2xhc3MgU3BlY3VsYXRpdmVKSVQgewogICAgIGZyaWVuZCBzdHJ1Y3QgT1NS
RXhpdDsKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyIFRy
dXN0ZWRJbW0zMjsKKyAgICB0eXBlZGVmIEpJVENvbXBpbGVyOjpJbW0zMiBJbW0zMjsKKyAgICB0
eXBlZGVmIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyIFRydXN0ZWRJbW1QdHI7CisgICAgdHlw
ZWRlZiBKSVRDb21waWxlcjo6SW1tUHRyIEltbVB0cjsKKworICAgIC8vIFRoZXNlIGNvbnN0YW50
cyBhcmUgdXNlZCB0byBzZXQgcHJpb3JpdGllcyBmb3Igc3BpbGwgb3JkZXIgZm9yCisgICAgLy8g
dGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4KKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGVudW0gU3Bp
bGxPcmRlciB7CisgICAgICAgIFNwaWxsT3JkZXJDb25zdGFudCA9IDEsIC8vIG5vIHNwaWxsLCBh
bmQgY2hlYXAgZmlsbAorICAgICAgICBTcGlsbE9yZGVyU3BpbGxlZCAgPSAyLCAvLyBubyBzcGls
bAorICAgICAgICBTcGlsbE9yZGVySlMgICAgICAgPSA0LCAvLyBuZWVkcyBzcGlsbAorICAgICAg
ICBTcGlsbE9yZGVyQ2VsbCAgICAgPSA0LCAvLyBuZWVkcyBzcGlsbAorICAgICAgICBTcGlsbE9y
ZGVyU3RvcmFnZSAgPSA0LCAvLyBuZWVkcyBzcGlsbAorICAgICAgICBTcGlsbE9yZGVySW50ZWdl
ciAgPSA1LCAvLyBuZWVkcyBzcGlsbCBhbmQgYm94CisgICAgICAgIFNwaWxsT3JkZXJCb29sZWFu
ICA9IDUsIC8vIG5lZWRzIHNwaWxsIGFuZCBib3gKKyAgICAgICAgU3BpbGxPcmRlckRvdWJsZSAg
ID0gNiwgLy8gbmVlZHMgc3BpbGwgYW5kIGNvbnZlcnQKKyAgICB9OworI2VsaWYgVVNFKEpTVkFM
VUUzMl82NCkKKyAgICBlbnVtIFNwaWxsT3JkZXIgeworICAgICAgICBTcGlsbE9yZGVyQ29uc3Rh
bnQgPSAxLCAvLyBubyBzcGlsbCwgYW5kIGNoZWFwIGZpbGwKKyAgICAgICAgU3BpbGxPcmRlclNw
aWxsZWQgID0gMiwgLy8gbm8gc3BpbGwKKyAgICAgICAgU3BpbGxPcmRlckpTICAgICAgID0gNCwg
Ly8gbmVlZHMgc3BpbGwKKyAgICAgICAgU3BpbGxPcmRlclN0b3JhZ2UgID0gNCwgLy8gbmVlZHMg
c3BpbGwKKyAgICAgICAgU3BpbGxPcmRlckRvdWJsZSAgID0gNCwgLy8gbmVlZHMgc3BpbGwKKyAg
ICAgICAgU3BpbGxPcmRlckludGVnZXIgID0gNSwgLy8gbmVlZHMgc3BpbGwgYW5kIGJveAorICAg
ICAgICBTcGlsbE9yZGVyQ2VsbCAgICAgPSA1LCAvLyBuZWVkcyBzcGlsbCBhbmQgYm94CisgICAg
ICAgIFNwaWxsT3JkZXJCb29sZWFuICA9IDUsIC8vIG5lZWRzIHNwaWxsIGFuZCBib3gKKyAgICB9
OworI2VuZGlmCisKKyAgICBlbnVtIFVzZUNoaWxkcmVuTW9kZSB7IENhbGxVc2VDaGlsZHJlbiwg
VXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5IH07CisgICAgCisgICAgc3RhdGljIGNvbnN0IGRv
dWJsZSB0d29Ub1RoZTMyOworCiBwdWJsaWM6CiAgICAgU3BlY3VsYXRpdmVKSVQoSklUQ29tcGls
ZXImKTsKIAogICAgIGJvb2wgY29tcGlsZSgpOwogICAgIHZvaWQgbGlua09TUkVudHJpZXMoTGlu
a0J1ZmZlciYpOwogCisgICAgTm9kZSYgYXQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAgfQorICAgIAorICAg
IEdQUlJlZyBmaWxsSW50ZWdlcihOb2RlSW5kZXgsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCk7
CisgICAgRlBSUmVnIGZpbGxEb3VibGUoTm9kZUluZGV4KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgIEdQUlJlZyBmaWxsSlNWYWx1ZShOb2RlSW5kZXgpOworI2VsaWYgVVNFKEpTVkFMVUUzMl82
NCkKKyAgICBib29sIGZpbGxKU1ZhbHVlKE5vZGVJbmRleCwgR1BSUmVnJiwgR1BSUmVnJiwgRlBS
UmVnJik7CisjZW5kaWYKKyAgICBHUFJSZWcgZmlsbFN0b3JhZ2UoTm9kZUluZGV4KTsKKworICAg
IC8vIGxvY2sgYW5kIHVubG9jayBHUFIgJiBGUFIgcmVnaXN0ZXJzLgorICAgIHZvaWQgbG9jayhH
UFJSZWcgcmVnKQorICAgIHsKKyAgICAgICAgbV9ncHJzLmxvY2socmVnKTsKKyAgICB9CisgICAg
dm9pZCBsb2NrKEZQUlJlZyByZWcpCisgICAgeworICAgICAgICBtX2ZwcnMubG9jayhyZWcpOwor
ICAgIH0KKyAgICB2b2lkIHVubG9jayhHUFJSZWcgcmVnKQorICAgIHsKKyAgICAgICAgbV9ncHJz
LnVubG9jayhyZWcpOworICAgIH0KKyAgICB2b2lkIHVubG9jayhGUFJSZWcgcmVnKQorICAgIHsK
KyAgICAgICAgbV9mcHJzLnVubG9jayhyZWcpOworICAgIH0KKworICAgIC8vIFVzZWQgdG8gY2hl
Y2sgd2hldGhlciBhIGNoaWxkIG5vZGUgaXMgb24gaXRzIGxhc3QgdXNlLAorICAgIC8vIGFuZCBp
dHMgbWFjaGluZSByZWdpc3RlcnMgbWF5IGJlIHJldXNlZC4KKyAgICBib29sIGNhblJldXNlKE5v
ZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyID0gYXQobm9kZUluZGV4KS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgR2Vu
ZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Cisg
ICAgICAgIHJldHVybiBpbmZvLmNhblJldXNlKCk7CisgICAgfQorICAgIEdQUlJlZyByZXVzZShH
UFJSZWcgcmVnKQorICAgIHsKKyAgICAgICAgbV9ncHJzLmxvY2socmVnKTsKKyAgICAgICAgcmV0
dXJuIHJlZzsKKyAgICB9CisgICAgRlBSUmVnIHJldXNlKEZQUlJlZyByZWcpCisgICAgeworICAg
ICAgICBtX2ZwcnMubG9jayhyZWcpOworICAgICAgICByZXR1cm4gcmVnOworICAgIH0KKworICAg
IC8vIEFsbG9jYXRlIGEgZ3ByL2Zwci4KKyAgICBHUFJSZWcgYWxsb2NhdGUoKQorICAgIHsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHNwaWxsTWU7CisgICAgICAgIEdQUlJlZyBncHIgPSBtX2dw
cnMuYWxsb2NhdGUoc3BpbGxNZSk7CisgICAgICAgIGlmIChzcGlsbE1lICE9IEludmFsaWRWaXJ0
dWFsUmVnaXN0ZXIpIHsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAgICAgR2VuZXJh
dGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3NwaWxsTWVdOworICAgICAgICAgICAg
QVNTRVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0SlNEb3VibGUpOworICAg
ICAgICAgICAgaWYgKChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpKQorICAg
ICAgICAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKGluZm8udGFnR1BSKCkgPT0gZ3ByID8gaW5mby5w
YXlsb2FkR1BSKCkgOiBpbmZvLnRhZ0dQUigpKTsKKyNlbmRpZgorICAgICAgICAgICAgc3BpbGwo
c3BpbGxNZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGdwcjsKKyAgICB9CisgICAgR1BS
UmVnIGFsbG9jYXRlKEdQUlJlZyBzcGVjaWZpYykKKyAgICB7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBzcGlsbE1lID0gbV9ncHJzLmFsbG9jYXRlU3BlY2lmaWMoc3BlY2lmaWMpOworICAgICAg
ICBpZiAoc3BpbGxNZSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKSB7CisjaWYgVVNFKEpTVkFM
VUUzMl82NCkKKyAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9u
SW5mb1tzcGlsbE1lXTsKKyAgICAgICAgICAgIEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkg
IT0gRGF0YUZvcm1hdEpTRG91YmxlKTsKKyAgICAgICAgICAgIGlmICgoaW5mby5yZWdpc3RlckZv
cm1hdCgpICYgRGF0YUZvcm1hdEpTKSkKKyAgICAgICAgICAgICAgICBtX2dwcnMucmVsZWFzZShp
bmZvLnRhZ0dQUigpID09IHNwZWNpZmljID8gaW5mby5wYXlsb2FkR1BSKCkgOiBpbmZvLnRhZ0dQ
UigpKTsKKyNlbmRpZgorICAgICAgICAgICAgc3BpbGwoc3BpbGxNZSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHNwZWNpZmljOworICAgIH0KKyAgICBHUFJSZWcgdHJ5QWxsb2NhdGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZ3Bycy50cnlBbGxvY2F0ZSgpOworICAgIH0KKyAgICBG
UFJSZWcgZnByQWxsb2NhdGUoKQorICAgIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNwaWxs
TWU7CisgICAgICAgIEZQUlJlZyBmcHIgPSBtX2ZwcnMuYWxsb2NhdGUoc3BpbGxNZSk7CisgICAg
ICAgIGlmIChzcGlsbE1lICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICAgICBz
cGlsbChzcGlsbE1lKTsKKyAgICAgICAgcmV0dXJuIGZwcjsKKyAgICB9CisKKyAgICAvLyBDaGVj
ayB3aGV0aGVyIGEgVmlydHVhbFJlZ3NpdGVyIGlzIGN1cnJlbnRseSBpbiBhIG1hY2hpbmUgcmVn
aXN0ZXIuCisgICAgLy8gV2UgdXNlIHRoaXMgd2hlbiBmaWxsaW5nIG9wZXJhbmRzIHRvIGZpbGwg
dGhvc2UgdGhhdCBhcmUgYWxyZWFkeSBpbgorICAgIC8vIG1hY2hpbmUgcmVnaXN0ZXJzIGZpcnN0
IChieSBsb2NraW5nIFZpcnR1YWxSZWdzaXRlcnMgdGhhdCBhcmUgYWxyZWFkeQorICAgIC8vIGlu
IG1hY2hpbmUgcmVnaXN0ZXIgYmVmb3JlIGZpbGxpbmcgdGhvc2UgdGhhdCBhcmUgbm90IHdlIGF0
dGVtcHQgdG8KKyAgICAvLyBhdm9pZCBzcGlsbGluZyB2YWx1ZXMgd2Ugd2lsbCBuZWVkIGltbWVk
aWF0ZWx5KS4KKyAgICBib29sIGlzRmlsbGVkKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgewor
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gYXQobm9kZUluZGV4KS52
aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVy
YXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAgIHJldHVybiBpbmZvLnJlZ2lzdGVy
Rm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmU7CisgICAgfQorICAgIGJvb2wgaXNGaWxsZWREb3Vi
bGUoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXIgPSBhdChub2RlSW5kZXgpLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAg
ICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVy
XTsKKyAgICAgICAgcmV0dXJuIGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91
YmxlOworICAgIH0KKworICAgIC8vIENhbGxlZCBvbiBhbiBvcGVyYW5kIG9uY2UgaXQgaGFzIGJl
ZW4gY29uc3VtZWQgYnkgYSBwYXJlbnQgbm9kZS4KKyAgICB2b2lkIHVzZShOb2RlSW5kZXggbm9k
ZUluZGV4KQorICAgIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9
IGF0KG5vZGVJbmRleCkudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIEdlbmVyYXRpb25JbmZv
JiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworCisgICAgICAgIC8v
IHVzZSgpIHJldHVybnMgdHJ1ZSB3aGVuIHRoZSB2YWx1ZSBiZWNvbWVzIGRlYWQsIGFuZCBhbnkK
KyAgICAgICAgLy8gYXNzb2NpYXRlZCByZXNvdXJjZXMgbWF5IGJlIGZyZWVkLgorICAgICAgICBp
ZiAoIWluZm8udXNlKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gUmVsZWFz
ZSB0aGUgYXNzb2NpYXRlZCBtYWNoaW5lIHJlZ2lzdGVycy4KKyAgICAgICAgRGF0YUZvcm1hdCBy
ZWdpc3RlckZvcm1hdCA9IGluZm8ucmVnaXN0ZXJGb3JtYXQoKTsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSkKKyAgICAg
ICAgICAgIG1fZnBycy5yZWxlYXNlKGluZm8uZnByKCkpOworICAgICAgICBlbHNlIGlmIChyZWdp
c3RlckZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSkKKyAgICAgICAgICAgIG1fZ3Bycy5yZWxlYXNl
KGluZm8uZ3ByKCkpOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgaWYgKHJlZ2lz
dGVyRm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUgfHwgcmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZv
cm1hdEpTRG91YmxlKQorICAgICAgICAgICAgbV9mcHJzLnJlbGVhc2UoaW5mby5mcHIoKSk7Cisg
ICAgICAgIGVsc2UgaWYgKHJlZ2lzdGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSB7CisgICAgICAg
ICAgICBtX2dwcnMucmVsZWFzZShpbmZvLnRhZ0dQUigpKTsKKyAgICAgICAgICAgIG1fZ3Bycy5y
ZWxlYXNlKGluZm8ucGF5bG9hZEdQUigpKTsKKyAgICAgICAgfSBlbHNlIGlmIChyZWdpc3RlckZv
cm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSkKKyAgICAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKGluZm8u
Z3ByKCkpOworI2VuZGlmCisgICAgfQorCisgICAgc3RhdGljIHZvaWQgbWFya0NlbGxDYXJkKE1h
Y3JvQXNzZW1ibGVyJiwgR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJl
ZyBzY3JhdGNoR1BSMik7CisgICAgc3RhdGljIHZvaWQgd3JpdGVCYXJyaWVyKE1hY3JvQXNzZW1i
bGVyJiwgR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNo
R1BSMiwgV3JpdGVCYXJyaWVyVXNlS2luZCk7CisKKyAgICB2b2lkIHdyaXRlQmFycmllcihHUFJS
ZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgTm9kZUluZGV4IHZhbHVlSW5kZXgsIFdyaXRl
QmFycmllclVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoR1BSMSA9IEludmFsaWRHUFJSZWcsIEdQUlJl
ZyBzY3JhdGNoR1BSMiA9IEludmFsaWRHUFJSZWcpOworICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQ
UlJlZyBvd25lckdQUiwgSlNDZWxsKiB2YWx1ZSwgV3JpdGVCYXJyaWVyVXNlS2luZCwgR1BSUmVn
IHNjcmF0Y2hHUFIxID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52YWxp
ZEdQUlJlZyk7CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgR1BSUmVnIHZh
bHVlR1BSLCBOb2RlSW5kZXggdmFsdWVJbmRleCwgV3JpdGVCYXJyaWVyVXNlS2luZCwgR1BSUmVn
IHNjcmF0Y2hHUFIxID0gSW52YWxpZEdQUlJlZyk7CisKKyAgICBzdGF0aWMgR1BSUmVnIHNlbGVj
dFNjcmF0Y2hHUFIoR1BSUmVnIHByZXNlcnZlMSA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVz
ZXJ2ZTIgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUzID0gSW52YWxpZEdQUlJlZykK
KyAgICB7CisgICAgICAgIGlmIChwcmVzZXJ2ZTEgIT0gR1BSSW5mbzo6cmVnVDAgJiYgcHJlc2Vy
dmUyICE9IEdQUkluZm86OnJlZ1QwICYmIHByZXNlcnZlMyAhPSBHUFJJbmZvOjpyZWdUMCkKKyAg
ICAgICAgICAgIHJldHVybiBHUFJJbmZvOjpyZWdUMDsKKworICAgICAgICBpZiAocHJlc2VydmUx
ICE9IEdQUkluZm86OnJlZ1QxICYmIHByZXNlcnZlMiAhPSBHUFJJbmZvOjpyZWdUMSAmJiBwcmVz
ZXJ2ZTMgIT0gR1BSSW5mbzo6cmVnVDEpCisgICAgICAgICAgICByZXR1cm4gR1BSSW5mbzo6cmVn
VDE7CisKKyAgICAgICAgaWYgKHByZXNlcnZlMSAhPSBHUFJJbmZvOjpyZWdUMiAmJiBwcmVzZXJ2
ZTIgIT0gR1BSSW5mbzo6cmVnVDIgJiYgcHJlc2VydmUzICE9IEdQUkluZm86OnJlZ1QyKQorICAg
ICAgICAgICAgcmV0dXJuIEdQUkluZm86OnJlZ1QyOworCisgICAgICAgIHJldHVybiBHUFJJbmZv
OjpyZWdUMzsKKyAgICB9CisKICAgICAvLyBDYWxsZWQgYnkgdGhlIHNwZWN1bGF0aXZlIG9wZXJh
bmQgdHlwZXMsIGJlbG93LCB0byBmaWxsIG9wZXJhbmQgdG8KICAgICAvLyBtYWNoaW5lIHJlZ2lz
dGVycywgaW1wbGljaXRseSBnZW5lcmF0aW5nIHNwZWN1bGF0aW9uIGNoZWNrcyBhcyBuZWVkZWQu
CiAgICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVJbnQoTm9kZUluZGV4LCBEYXRhRm9ybWF0JiByZXR1
cm5Gb3JtYXQpOwpAQCAtMTQyLDEzICszNDgsMTUzNCBAQCBwdWJsaWM6CiAgICAgR1BSUmVnIGZp
bGxTcGVjdWxhdGVCb29sZWFuKE5vZGVJbmRleCk7CiAKIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNs
YXNzIEpJVENvZGVHZW5lcmF0b3I7Ci0gICAgCiAgICAgdm9pZCBjb21waWxlKE5vZGUmKTsKICAg
ICB2b2lkIGNvbXBpbGVNb3ZIaW50KE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGUoQmFzaWNCbG9j
ayYpOwogCi0gICAgdm9pZCBjaGVja0FyZ3VtZW50VHlwZXMoKTsKKyAgICB2b2lkIGNoZWNrQXJn
dW1lbnRUeXBlcygpOworCisgICAgdm9pZCBjbGVhckdlbmVyYXRpb25JbmZvKCk7CisKKyAgICAv
LyBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIHdoZW4gZ2VuZXJhdGluZyAndW5leHBlY3RlZCcKKyAg
ICAvLyBjYWxscyBvdXQgZnJvbSBKSVQgY29kZSB0byBDKysgaGVscGVyIHJvdXRpbmVzIC0KKyAg
ICAvLyB0aGV5IHNwaWxsIGFsbCBsaXZlIHZhbHVlcyB0byB0aGUgYXBwcm9wcmlhdGUKKyAgICAv
LyBzbG90cyBpbiB0aGUgUmVnaXN0ZXJGaWxlIHdpdGhvdXQgY2hhbmdpbmcgYW55IHN0YXRlCisg
ICAgLy8gaW4gdGhlIEdlbmVyYXRpb25JbmZvLgorICAgIHZvaWQgc2lsZW50U3BpbGxHUFIoVmly
dHVhbFJlZ2lzdGVyIHNwaWxsTWUsIEdQUlJlZyBzb3VyY2UpCisgICAgeworICAgICAgICBHZW5l
cmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bc3BpbGxNZV07CisgICAgICAgIEFT
U0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpOworICAgICAgICBB
U1NFUlQoaW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXREb3VibGUpOworCisgICAg
ICAgIGlmICghaW5mby5uZWVkc1NwaWxsKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgRGF0YUZvcm1hdCByZWdpc3RlckZvcm1hdCA9IGluZm8ucmVnaXN0ZXJGb3JtYXQoKTsKKwor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHNvdXJjZSk7
CisgICAgICAgIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKKyAgICAg
ICAgICAgIG1faml0LnN0b3JlMzIoc291cmNlLCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGls
bE1lKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0
ICYgRGF0YUZvcm1hdEpTIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRDZWxsIHx8IHJl
Z2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRTdG9yYWdlKTsKKyAgICAgICAgICAgIG1faml0LnN0
b3JlUHRyKHNvdXJjZSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOworICAgICAg
ICB9CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQg
JiBEYXRhRm9ybWF0SlMpIHsKKyAgICAgICAgICAgIEFTU0VSVChpbmZvLnRhZ0dQUigpID09IHNv
dXJjZSB8fCBpbmZvLnBheWxvYWRHUFIoKSA9PSBzb3VyY2UpOworICAgICAgICAgICAgbV9qaXQu
c3RvcmUzMihzb3VyY2UsIHNvdXJjZSA9PSBpbmZvLnRhZ0dQUigpID8gSklUQ29tcGlsZXI6OnRh
Z0ZvcihzcGlsbE1lKSA6IEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHNvdXJjZSk7Cisg
ICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHNvdXJjZSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Io
c3BpbGxNZSkpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisgICAgdm9pZCBzaWxlbnRTcGls
bEZQUihWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxNZSwgRlBSUmVnIHNvdXJjZSkKKyAgICB7CisgICAg
ICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tzcGlsbE1lXTsKKyAg
ICAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKTsK
KworICAgICAgICBpZiAoIWluZm8ubmVlZHNTcGlsbCgpKSB7CisgICAgICAgICAgICAvLyBpdCdz
IGVpdGhlciBhIGNvbnN0YW50IG9yIGl0J3MgYWxyZWFkeSBiZWVuIHNwaWxsZWQKKyAgICAgICAg
ICAgIEFTU0VSVChhdChpbmZvLm5vZGVJbmRleCgpKS5oYXNDb25zdGFudCgpIHx8IGluZm8uc3Bp
bGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIGl0J3MgbmVpdGhlciBhIGNvbnN0YW50IG5vciBo
YXMgaXQgYmVlbiBzcGlsbGVkLgorICAgICAgICBBU1NFUlQoIWF0KGluZm8ubm9kZUluZGV4KCkp
Lmhhc0NvbnN0YW50KCkpOworICAgICAgICBBU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpID09IERh
dGFGb3JtYXROb25lKTsKKyAgICAgICAgQVNTRVJUKGluZm8uZnByKCkgPT0gc291cmNlKTsKKwor
ICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShzb3VyY2UsIEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KHNwaWxsTWUpKTsKKyAgICB9CisKKyAgICB2b2lkIHNpbGVudEZpbGxHUFIoVmlydHVhbFJlZ2lz
dGVyIHNwaWxsTWUsIEdQUlJlZyB0YXJnZXQpCisgICAgeworICAgICAgICBHZW5lcmF0aW9uSW5m
byYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bc3BpbGxNZV07CisKKyAgICAgICAgTm9kZUluZGV4
IG5vZGVJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgIE5vZGUmIG5vZGUgPSBhdChu
b2RlSW5kZXgpOworICAgICAgICBBU1NFUlQoaW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFG
b3JtYXROb25lKTsKKyAgICAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRh
Rm9ybWF0RG91YmxlKTsKKyAgICAgICAgRGF0YUZvcm1hdCByZWdpc3RlckZvcm1hdCA9IGluZm8u
cmVnaXN0ZXJGb3JtYXQoKTsKKworICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZv
cm1hdEludGVnZXIpIHsKKyAgICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHRhcmdldCk7
CisgICAgICAgICAgICBBU1NFUlQoaXNKU0ludGVnZXIoaW5mby5yZWdpc3RlckZvcm1hdCgpKSk7
CisgICAgICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBtX2pp
dC5tb3ZlKEltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCB0YXJnZXQpOwor
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBp
bGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpLCB0YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZv
cm1hdEJvb2xlYW4pIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAgICAgQVNTRVJU
KGluZm8uZ3ByKCkgPT0gdGFyZ2V0KTsKKyAgICAgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50
KCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXNCb29sZWFuQ29uc3RhbnQobm9kZUluZGV4
KSk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9mQm9vbGVhbkNvbnN0
YW50KG5vZGVJbmRleCkpLCB0YXJnZXQpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpLCB0YXJn
ZXQpOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBp
ZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwpIHsKKyAgICAgICAgICAgIEFTU0VS
VChpbmZvLmdwcigpID09IHRhcmdldCk7CisgICAgICAgICAgICBpZiAobm9kZS5pc0NvbnN0YW50
KCkpIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQo
bm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFsdWUuaXNDZWxsKCkpOworICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmUoSW1tUHRyKHZhbHVlLmFzQ2VsbCgpKSwgdGFyZ2V0KTsK
KyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29t
cGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSksIHRhcmdldCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdFN0
b3JhZ2UpIHsKKyAgICAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHRhcmdldCk7CisgICAg
ICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpLCB0
YXJnZXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJU
KHJlZ2lzdGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
ICAgICBBU1NFUlQoaW5mby5ncHIoKSA9PSB0YXJnZXQpOworICAgICAgICBpZiAobm9kZS5oYXND
b25zdGFudCgpKQorICAgICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZU9mSlNDb25zdGFudEFzSW1t
UHRyKG5vZGVJbmRleCksIHRhcmdldCk7CisgICAgICAgIGVsc2UgaWYgKGluZm8uc3BpbGxGb3Jt
YXQoKSA9PSBEYXRhRm9ybWF0SW50ZWdlcikgeworICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVy
Rm9ybWF0ID09IERhdGFGb3JtYXRKU0ludGVnZXIpOworICAgICAgICAgICAgbV9qaXQubG9hZDMy
KEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpLCB0YXJnZXQpOworICAgICAgICAgICAg
bV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCB0YXJnZXQpOworICAg
ICAgICB9IGVsc2UgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7
CisgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEpTRG91Ymxl
KTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3Bp
bGxNZSksIHRhcmdldCk7CisgICAgICAgICAgICBtX2ppdC5zdWJQdHIoR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyLCB0YXJnZXQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSksIHRhcmdldCk7Cisj
ZWxzZQorICAgICAgICBBU1NFUlQoaW5mby50YWdHUFIoKSA9PSB0YXJnZXQgfHwgaW5mby5wYXls
b2FkR1BSKCkgPT0gdGFyZ2V0KTsKKyAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewor
ICAgICAgICAgICAgSlNWYWx1ZSB2ID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKKyAg
ICAgICAgICAgIG1faml0Lm1vdmUoaW5mby50YWdHUFIoKSA9PSB0YXJnZXQgPyBJbW0zMih2LnRh
ZygpKSA6IEltbTMyKHYucGF5bG9hZCgpKSwgdGFyZ2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChp
bmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEludGVnZXIpIHsKKyAgICAgICAgICAgIEFT
U0VSVChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKKyAgICAgICAgICAg
IGlmIChpbmZvLnBheWxvYWRHUFIoKSA9PSB0YXJnZXQpIAorICAgICAgICAgICAgICAgIG1faml0
LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihzcGlsbE1lKSwgdGFyZ2V0KTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpJbnQzMlRhZyksIHRhcmdldCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9q
aXQubG9hZDMyKGluZm8udGFnR1BSKCkgPT0gdGFyZ2V0ID8gSklUQ29tcGlsZXI6OnRhZ0Zvcihz
cGlsbE1lKSA6IEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpLCB0YXJnZXQpOworI2Vu
ZGlmCisgICAgfQorCisgICAgdm9pZCBzaWxlbnRGaWxsRlBSKFZpcnR1YWxSZWdpc3RlciBzcGls
bE1lLCBHUFJSZWcgY2FuVHJhbXBsZSwgRlBSUmVnIHRhcmdldCkKKyAgICB7CisgICAgICAgIEdl
bmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tzcGlsbE1lXTsKKyAgICAgICAg
QVNTRVJUKGluZm8uZnByKCkgPT0gdGFyZ2V0KTsKKworICAgICAgICBOb2RlSW5kZXggbm9kZUlu
ZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBOb2Rl
JiBub2RlID0gYXQobm9kZUluZGV4KTsKKyAgICAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJGb3Jt
YXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKTsKKworICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFu
dCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKTsK
KyAgICAgICAgICAgIG1faml0Lm1vdmUoSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4odmFsdWVP
Zk51bWJlckNvbnN0YW50KG5vZGVJbmRleCkpKSwgY2FuVHJhbXBsZSk7CisgICAgICAgICAgICBt
X2ppdC5tb3ZlUHRyVG9Eb3VibGUoY2FuVHJhbXBsZSwgdGFyZ2V0KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGluZm8uc3BpbGxGb3JtYXQo
KSAhPSBEYXRhRm9ybWF0Tm9uZSAmJiBpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdERv
dWJsZSkgeworICAgICAgICAgICAgLy8gaXQgd2FzIGFscmVhZHkgc3BpbGxlZCBwcmV2aW91c2x5
IGFuZCBub3QgYXMgYSBkb3VibGUsIHdoaWNoIG1lYW5zIHdlIG5lZWQgdW5ib3hpbmcuCisgICAg
ICAgICAgICBBU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKTsKKyAgICAg
ICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSksIGNh
blRyYW1wbGUpOworICAgICAgICAgICAgdW5ib3hEb3VibGUoY2FuVHJhbXBsZSwgdGFyZ2V0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1faml0LmxvYWREb3Vi
bGUoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSksIHRhcmdldCk7CisjZWxpZiBVU0Uo
SlNWQUxVRTMyXzY0KQorICAgICAgICBVTlVTRURfUEFSQU0oY2FuVHJhbXBsZSk7CisgICAgICAg
IEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSB8fCBpbmZv
LnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEpTRG91YmxlKTsKKyAgICAgICAgbV9qaXQu
ZW1pdExvYWREb3VibGUobm9kZUluZGV4LCB0YXJnZXQpOworI2VuZGlmCisgICAgfQorCisgICAg
dm9pZCBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhHUFJSZWcgZXhjbHVkZSwgR1BSUmVnIGV4Y2x1
ZGUyID0gSW52YWxpZEdQUlJlZykKKyAgICB7CisgICAgICAgIGZvciAoZ3ByX2l0ZXJhdG9yIGl0
ZXIgPSBtX2dwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2dwcnMuZW5kKCk7ICsraXRlcikgeworICAg
ICAgICAgICAgR1BSUmVnIGdwciA9IGl0ZXIucmVnSUQoKTsKKyAgICAgICAgICAgIGlmIChpdGVy
Lm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyICYmIGdwciAhPSBleGNsdWRlICYmIGdw
ciAhPSBleGNsdWRlMikKKyAgICAgICAgICAgICAgICBzaWxlbnRTcGlsbEdQUihpdGVyLm5hbWUo
KSwgZ3ByKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGZwcl9pdGVyYXRvciBpdGVyID0gbV9m
cHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAg
IGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAgICAg
ICAgIHNpbGVudFNwaWxsRlBSKGl0ZXIubmFtZSgpLCBpdGVyLnJlZ0lEKCkpOworICAgICAgICB9
CisgICAgfQorICAgIHZvaWQgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoRlBSUmVnIGV4Y2x1ZGUp
CisgICAgeworICAgICAgICBmb3IgKGdwcl9pdGVyYXRvciBpdGVyID0gbV9ncHJzLmJlZ2luKCk7
IGl0ZXIgIT0gbV9ncHJzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIGlmIChpdGVyLm5h
bWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAgICAgICAgIHNpbGVudFNw
aWxsR1BSKGl0ZXIubmFtZSgpLCBpdGVyLnJlZ0lEKCkpOworICAgICAgICB9CisgICAgICAgIGZv
ciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMuYmVnaW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5k
KCk7ICsraXRlcikgeworICAgICAgICAgICAgRlBSUmVnIGZwciA9IGl0ZXIucmVnSUQoKTsKKyAg
ICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyICYmIGZw
ciAhPSBleGNsdWRlKQorICAgICAgICAgICAgICAgIHNpbGVudFNwaWxsRlBSKGl0ZXIubmFtZSgp
LCBmcHIpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzaWxlbnRGaWxsQWxsUmVnaXN0
ZXJzKEdQUlJlZyBleGNsdWRlLCBHUFJSZWcgZXhjbHVkZTIgPSBJbnZhbGlkR1BSUmVnKQorICAg
IHsKKyAgICAgICAgR1BSUmVnIGNhblRyYW1wbGUgPSBHUFJJbmZvOjpyZWdUMDsKKyAgICAgICAg
aWYgKGV4Y2x1ZGUgPT0gR1BSSW5mbzo6cmVnVDApCisgICAgICAgICAgICBjYW5UcmFtcGxlID0g
R1BSSW5mbzo6cmVnVDE7CisgICAgICAgIAorICAgICAgICBmb3IgKGZwcl9pdGVyYXRvciBpdGVy
ID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAg
ICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAg
ICAgICAgICAgIHNpbGVudEZpbGxGUFIoaXRlci5uYW1lKCksIGNhblRyYW1wbGUsIGl0ZXIucmVn
SUQoKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChncHJfaXRlcmF0b3IgaXRlciA9IG1fZ3By
cy5iZWdpbigpOyBpdGVyICE9IG1fZ3Bycy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgICAgICBH
UFJSZWcgZ3ByID0gaXRlci5yZWdJRCgpOworICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9
IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgJiYgZ3ByICE9IGV4Y2x1ZGUgJiYgZ3ByICE9IGV4Y2x1
ZGUyKQorICAgICAgICAgICAgICAgIHNpbGVudEZpbGxHUFIoaXRlci5uYW1lKCksIGdwcik7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEZQUlJlZyBl
eGNsdWRlKQorICAgIHsKKyAgICAgICAgR1BSUmVnIGNhblRyYW1wbGUgPSBHUFJJbmZvOjpyZWdU
MDsKKyAgICAgICAgCisgICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMuYmVn
aW4oKTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgRlBSUmVn
IGZwciA9IGl0ZXIucmVnSUQoKTsKKyAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyICYmIGZwciAhPSBleGNsdWRlKQorICAgICAgICAgICAgICAgIHNp
bGVudEZpbGxGUFIoaXRlci5uYW1lKCksIGNhblRyYW1wbGUsIGZwcik7CisgICAgICAgIH0KKyAg
ICAgICAgZm9yIChncHJfaXRlcmF0b3IgaXRlciA9IG1fZ3Bycy5iZWdpbigpOyBpdGVyICE9IG1f
Z3Bycy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52
YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgICAgICAgICBzaWxlbnRGaWxsR1BSKGl0ZXIu
bmFtZSgpLCBpdGVyLnJlZ0lEKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhlc2Ug
bWV0aG9kcyBjb252ZXJ0IGJldHdlZW4gZG91YmxlcywgYW5kIGRvdWJsZXMgYm94ZWQgYW5kIEpT
VmFsdWVzLgorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgR1BSUmVnIGJveERvdWJsZShGUFJSZWcg
ZnByLCBHUFJSZWcgZ3ByKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faml0LmJveERvdWJsZShm
cHIsIGdwcik7CisgICAgfQorICAgIEZQUlJlZyB1bmJveERvdWJsZShHUFJSZWcgZ3ByLCBGUFJS
ZWcgZnByKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faml0LnVuYm94RG91YmxlKGdwciwgZnBy
KTsKKyAgICB9CisgICAgR1BSUmVnIGJveERvdWJsZShGUFJSZWcgZnByKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGJveERvdWJsZShmcHIsIGFsbG9jYXRlKCkpOworICAgIH0KKyNlbGlmIFVTRShK
U1ZBTFVFMzJfNjQpCisgICAgdm9pZCBib3hEb3VibGUoRlBSUmVnIGZwciwgR1BSUmVnIHRhZ0dQ
UiwgR1BSUmVnIHBheWxvYWRHUFIpCisgICAgeworICAgICAgICBtX2ppdC5ib3hEb3VibGUoZnBy
LCB0YWdHUFIsIHBheWxvYWRHUFIpOworICAgIH0KKyAgICB2b2lkIHVuYm94RG91YmxlKEdQUlJl
ZyB0YWdHUFIsIEdQUlJlZyBwYXlsb2FkR1BSLCBGUFJSZWcgZnByLCBGUFJSZWcgc2NyYXRjaEZQ
UikKKyAgICB7CisgICAgICAgIG1faml0LnVuYm94RG91YmxlKHRhZ0dQUiwgcGF5bG9hZEdQUiwg
ZnByLCBzY3JhdGNoRlBSKTsKKyAgICB9CisjZW5kaWYKKworICAgIC8vIFNwaWxsIGEgVmlydHVh
bFJlZ2lzdGVyIHRvIHRoZSBSZWdpc3RlckZpbGUuCisgICAgdm9pZCBzcGlsbChWaXJ0dWFsUmVn
aXN0ZXIgc3BpbGxNZSkKKyAgICB7CisgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9n
ZW5lcmF0aW9uSW5mb1tzcGlsbE1lXTsKKworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAg
IGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpIC8vIGl0IGhhcyBi
ZWVuIHNwaWxsZWQuIEpTIHZhbHVlcyB3aGljaCBoYXZlIHR3byBHUFJzIGNhbiByZWFjaCBoZXJl
CisgICAgICAgICAgICByZXR1cm47CisjZW5kaWYKKyAgICAgICAgLy8gQ2hlY2sgdGhlIEdlbmVy
YXRpb25JbmZvIHRvIHNlZSBpZiB0aGlzIHZhbHVlIG5lZWQgd3JpdGluZworICAgICAgICAvLyB0
byB0aGUgUmVnaXN0ZXJGaWxlIC0gaWYgbm90LCBtYXJrIGl0IGFzIHNwaWxsZWQgJiByZXR1cm4u
CisgICAgICAgIGlmICghaW5mby5uZWVkc1NwaWxsKCkpIHsKKyAgICAgICAgICAgIGluZm8uc2V0
U3BpbGxlZCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgRGF0
YUZvcm1hdCBzcGlsbEZvcm1hdCA9IGluZm8ucmVnaXN0ZXJGb3JtYXQoKTsKKyAgICAgICAgc3dp
dGNoIChzcGlsbEZvcm1hdCkgeworICAgICAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdlOiB7Cisg
ICAgICAgICAgICAvLyBUaGlzIGlzIHNwZWNpYWwsIHNpbmNlIGl0J3Mgbm90IGEgSlMgdmFsdWUg
LSBhcyBpbiBpdCdzIG5vdCB2aXNpYmxlIHRvIEpTCisgICAgICAgICAgICAvLyBjb2RlLgorICAg
ICAgICAgICAgbV9qaXQuc3RvcmVQdHIoaW5mby5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3Ioc3BpbGxNZSkpOworICAgICAgICAgICAgaW5mby5zcGlsbChEYXRhRm9ybWF0U3RvcmFnZSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZTogeworICAgICAgICAgICAgbV9qaXQuc3RvcmVE
b3VibGUoaW5mby5mcHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOworICAg
ICAgICAgICAgaW5mby5zcGlsbChEYXRhRm9ybWF0RG91YmxlKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludGVn
ZXI6IHsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoaW5mby5ncHIoKSwgSklUQ29tcGlsZXI6
OnBheWxvYWRGb3Ioc3BpbGxNZSkpOworICAgICAgICAgICAgaW5mby5zcGlsbChEYXRhRm9ybWF0
SW50ZWdlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGhhbmRsZXMgSlNWYWx1ZXMs
IGludDMycywgYW5kIGNlbGxzLgorICAgICAgICAgICAgQVNTRVJUKHNwaWxsRm9ybWF0ID09IERh
dGFGb3JtYXRDZWxsIHx8IHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgR1BSUmVnIHJlZyA9IGluZm8uZ3ByKCk7CisgICAgICAgICAgICAvLyBX
ZSBuZWVkIHRvIGJveCBpbnQzMiBhbmQgY2VsbCB2YWx1ZXMgLi4uCisgICAgICAgICAgICAvLyBi
dXQgb24gSlNWQUxVRTY0IGJveGluZyBhIGNlbGwgaXMgYSBuby1vcCEKKyAgICAgICAgICAgIGlm
IChzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKKyAgICAgICAgICAgICAgICBtX2pp
dC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZyk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIFNwaWxsIHRoZSB2YWx1ZSwgYW5kIHJlY29yZCBpdCBhcyBzcGls
bGVkIGluIGl0cyBib3hlZCBmb3JtLgorICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIocmVnLCBK
SVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSk7CisgICAgICAgICAgICBpbmZvLnNwaWxs
KChEYXRhRm9ybWF0KShzcGlsbEZvcm1hdCB8IERhdGFGb3JtYXRKUykpOworICAgICAgICAgICAg
cmV0dXJuOworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0
RG91YmxlOgorICAgICAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZTogeworICAgICAgICAgICAg
Ly8gT24gSlNWQUxVRTMyXzY0IGJveGluZyBhIGRvdWJsZSBpcyBhIG5vLW9wLgorICAgICAgICAg
ICAgbV9qaXQuc3RvcmVEb3VibGUoaW5mby5mcHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Io
c3BpbGxNZSkpOworICAgICAgICAgICAgaW5mby5zcGlsbChEYXRhRm9ybWF0SlNEb3VibGUpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgaGFuZGxlcyBKU1ZhbHVlcywgaW50MzJzLCBjZWxs
cyBhbmQgYm9vbGVhbnMuCisgICAgICAgICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgPT0gRGF0YUZv
cm1hdEludGVnZXIgfHwgc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwgfHwgc3BpbGxGb3Jt
YXQgPT0gRGF0YUZvcm1hdEJvb2xlYW4gfHwgKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSk7
CisKKyAgICAgICAgICAgIGlmIChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUykgeyAvLyBKU1Zh
bHVlCisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihpbmZvLnRhZ0dQUigpLCBKSVRDb21w
aWxlcjo6dGFnRm9yKHNwaWxsTWUpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKGlu
Zm8ucGF5bG9hZEdQUigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihzcGlsbE1lKSk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEdQUlJlZyByZWcgPSBpbmZvLmdwcigp
OworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIocmVnLCBKSVRDb21waWxlcjo6cGF5bG9h
ZEZvcihzcGlsbE1lKSk7CisgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBib3ggaW50MzJz
LCBib29sZWFucyBhbmQgY2VsbHMuCisgICAgICAgICAgICAgICAgaWYgKHNwaWxsRm9ybWF0ID09
IERhdGFGb3JtYXRJbnRlZ2VyKQorICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIEpJVENvbXBpbGVyOjp0YWdGb3Ioc3BpbGxN
ZSkpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRD
ZWxsKQorICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSwgSklUQ29tcGlsZXI6OnRhZ0ZvcihzcGlsbE1lKSk7CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgSklUQ29tcGlsZXI6OnRhZ0ZvcihzcGlsbE1lKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpbmZvLnNwaWxsKChEYXRhRm9ybWF0KShzcGlsbEZv
cm1hdCB8IERhdGFGb3JtYXRKUykpOworICAgICAgICAgICAgcmV0dXJuOworI2VuZGlmCisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCBpc1N0cmljdEludDMyKE5vZGVJbmRleCk7Cisg
ICAgCisgICAgYm9vbCBpc0tub3duSW50ZWdlcihOb2RlSW5kZXgpOworICAgIGJvb2wgaXNLbm93
bk51bWVyaWMoTm9kZUluZGV4KTsKKyAgICBib29sIGlzS25vd25DZWxsKE5vZGVJbmRleCk7Cisg
ICAgCisgICAgYm9vbCBpc0tub3duTm90SW50ZWdlcihOb2RlSW5kZXgpOworICAgIGJvb2wgaXNL
bm93bk5vdE51bWJlcihOb2RlSW5kZXgpOworCisgICAgYm9vbCBpc0tub3duQm9vbGVhbihOb2Rl
SW5kZXgpOworCisgICAgYm9vbCBpc0tub3duTm90Q2VsbChOb2RlSW5kZXgpOworICAgIAorICAg
IC8vIENoZWNrcy9hY2Nlc3NvcnMgZm9yIGNvbnN0YW50IHZhbHVlcy4KKyAgICBib29sIGlzQ29u
c3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuaXNDb25zdGFudChub2Rl
SW5kZXgpOyB9CisgICAgYm9vbCBpc0pTQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyBy
ZXR1cm4gbV9qaXQuaXNKU0NvbnN0YW50KG5vZGVJbmRleCk7IH0KKyAgICBib29sIGlzSW50MzJD
b25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5pc0ludDMyQ29uc3Rh
bnQobm9kZUluZGV4KTsgfQorICAgIGJvb2wgaXNEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9k
ZUluZGV4KSB7IHJldHVybiBtX2ppdC5pc0RvdWJsZUNvbnN0YW50KG5vZGVJbmRleCk7IH0KKyAg
ICBib29sIGlzTnVtYmVyQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4gbV9q
aXQuaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpOyB9CisgICAgYm9vbCBpc0Jvb2xlYW5Db25z
dGFudChOb2RlSW5kZXggbm9kZUluZGV4KSB7IHJldHVybiBtX2ppdC5pc0Jvb2xlYW5Db25zdGFu
dChub2RlSW5kZXgpOyB9CisgICAgYm9vbCBpc0Z1bmN0aW9uQ29uc3RhbnQoTm9kZUluZGV4IG5v
ZGVJbmRleCkgeyByZXR1cm4gbV9qaXQuaXNGdW5jdGlvbkNvbnN0YW50KG5vZGVJbmRleCk7IH0K
KyAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsg
cmV0dXJuIG1faml0LnZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCk7IH0KKyAgICBkb3Vi
bGUgdmFsdWVPZk51bWJlckNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpIHsgcmV0dXJuIG1f
aml0LnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlSW5kZXgpOyB9CisjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICB2b2lkKiBhZGRyZXNzT2ZEb3VibGVDb25zdGFudChOb2RlSW5kZXggbm9kZUlu
ZGV4KSB7IHJldHVybiBtX2ppdC5hZGRyZXNzT2ZEb3VibGVDb25zdGFudChub2RlSW5kZXgpOyB9
CisjZW5kaWYKKyAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KE5vZGVJbmRleCBub2RlSW5k
ZXgpIHsgcmV0dXJuIG1faml0LnZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7IH0KKyAgICBi
b29sIHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4g
bV9qaXQudmFsdWVPZkJvb2xlYW5Db25zdGFudChub2RlSW5kZXgpOyB9CisgICAgSlNGdW5jdGlv
biogdmFsdWVPZkZ1bmN0aW9uQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkgeyByZXR1cm4g
bV9qaXQudmFsdWVPZkZ1bmN0aW9uQ29uc3RhbnQobm9kZUluZGV4KTsgfQorICAgIGJvb2wgaXNO
dWxsQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIGlmICghaXND
b25zdGFudChub2RlSW5kZXgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5pc051bGwoKTsKKyAgICB9CisKKyAg
ICBJZGVudGlmaWVyKiBpZGVudGlmaWVyKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAg
cmV0dXJuICZtX2ppdC5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihpbmRleCk7CisgICAgfQorCisg
ICAgLy8gU3BpbGwgYWxsIFZpcnR1YWxSZWdpc3RlcnMgYmFjayB0byB0aGUgUmVnaXN0ZXJGaWxl
LgorICAgIHZvaWQgZmx1c2hSZWdpc3RlcnMoKQorICAgIHsKKyAgICAgICAgZm9yIChncHJfaXRl
cmF0b3IgaXRlciA9IG1fZ3Bycy5iZWdpbigpOyBpdGVyICE9IG1fZ3Bycy5lbmQoKTsgKytpdGVy
KSB7CisgICAgICAgICAgICBpZiAoaXRlci5uYW1lKCkgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rl
cikgeworICAgICAgICAgICAgICAgIHNwaWxsKGl0ZXIubmFtZSgpKTsKKyAgICAgICAgICAgICAg
ICBpdGVyLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3Ig
KGZwcl9pdGVyYXRvciBpdGVyID0gbV9mcHJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9mcHJzLmVuZCgp
OyArK2l0ZXIpIHsKKyAgICAgICAgICAgIGlmIChpdGVyLm5hbWUoKSAhPSBJbnZhbGlkVmlydHVh
bFJlZ2lzdGVyKSB7CisgICAgICAgICAgICAgICAgc3BpbGwoaXRlci5uYW1lKCkpOworICAgICAg
ICAgICAgICAgIGl0ZXIucmVsZWFzZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisjaWZuZGVmIE5ERUJVRworICAgIC8vIFVzZWQgdG8gQVNTRVJUIGZsdXNoUmVnaXN0ZXJz
KCkgaGFzIGJlZW4gY2FsbGVkIHByaW9yIHRvCisgICAgLy8gY2FsbGluZyBvdXQgZnJvbSBKSVQg
Y29kZSB0byBhIEMgaGVscGVyIGZ1bmN0aW9uLgorICAgIGJvb2wgaXNGbHVzaGVkKCkKKyAgICB7
CisgICAgICAgIGZvciAoZ3ByX2l0ZXJhdG9yIGl0ZXIgPSBtX2dwcnMuYmVnaW4oKTsgaXRlciAh
PSBtX2dwcnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgaWYgKGl0ZXIubmFtZSgpICE9
IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGZvciAoZnByX2l0ZXJhdG9yIGl0ZXIgPSBtX2ZwcnMuYmVnaW4o
KTsgaXRlciAhPSBtX2ZwcnMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgaWYgKGl0ZXIu
bmFtZSgpICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyNlbmRpZgor
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyIHZhbHVlT2ZK
U0NvbnN0YW50QXNJbW1QdHIoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZSh2YWx1ZU9mSlNDb25z
dGFudChub2RlSW5kZXgpKSk7CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBIZWxwZXIgZnVuY3Rp
b25zIHRvIGVuYWJsZSBjb2RlIHNoYXJpbmcgaW4gaW1wbGVtZW50YXRpb25zIG9mIGJpdC9zaGlm
dCBvcHMuCisgICAgdm9pZCBiaXRPcChOb2RlVHlwZSBvcCwgaW50MzJfdCBpbW0sIEdQUlJlZyBv
cDEsIEdQUlJlZyByZXN1bHQpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAg
IGNhc2UgQml0QW5kOgorICAgICAgICAgICAgbV9qaXQuYW5kMzIoSW1tMzIoaW1tKSwgb3AxLCBy
ZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQml0T3I6CisgICAgICAg
ICAgICBtX2ppdC5vcjMyKEltbTMyKGltbSksIG9wMSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgICAgIG1faml0LnhvcjMyKEltbTMy
KGltbSksIG9wMSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgdm9pZCBiaXRPcChOb2RlVHlwZSBvcCwgR1BSUmVnIG9wMSwgR1BSUmVnIG9wMiwgR1BSUmVn
IHJlc3VsdCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBCaXRB
bmQ6CisgICAgICAgICAgICBtX2ppdC5hbmQzMihvcDEsIG9wMiwgcmVzdWx0KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEJpdE9yOgorICAgICAgICAgICAgbV9qaXQub3IzMihv
cDEsIG9wMiwgcmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJpdFhv
cjoKKyAgICAgICAgICAgIG1faml0LnhvcjMyKG9wMSwgb3AyLCByZXN1bHQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2b2lkIHNoaWZ0T3AoTm9kZVR5cGUgb3AsIEdQ
UlJlZyBvcDEsIGludDMyX3Qgc2hpZnRBbW91bnQsIEdQUlJlZyByZXN1bHQpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgQml0UlNoaWZ0OgorICAgICAgICAgICAg
bV9qaXQucnNoaWZ0MzIob3AxLCBJbW0zMihzaGlmdEFtb3VudCksIHJlc3VsdCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CisgICAgICAgICAgICBtX2ppdC5s
c2hpZnQzMihvcDEsIEltbTMyKHNoaWZ0QW1vdW50KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6CisgICAgICAgICAgICBtX2ppdC51cnNoaWZ0
MzIob3AxLCBJbW0zMihzaGlmdEFtb3VudCksIHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICB9CisgICAgfQorICAgIHZvaWQgc2hpZnRPcChOb2RlVHlwZSBvcCwgR1BSUmVnIG9wMSwg
R1BSUmVnIHNoaWZ0QW1vdW50LCBHUFJSZWcgcmVzdWx0KQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChvcCkgeworICAgICAgICBjYXNlIEJpdFJTaGlmdDoKKyAgICAgICAgICAgIG1faml0LnJzaGlm
dDMyKG9wMSwgc2hpZnRBbW91bnQsIHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBCaXRMU2hpZnQ6CisgICAgICAgICAgICBtX2ppdC5sc2hpZnQzMihvcDEsIHNoaWZ0
QW1vdW50LCByZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQml0VVJT
aGlmdDoKKyAgICAgICAgICAgIG1faml0LnVyc2hpZnQzMihvcDEsIHNoaWZ0QW1vdW50LCByZXN1
bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBSZXR1
cm5zIHRoZSBub2RlIGluZGV4IG9mIHRoZSBicmFuY2ggbm9kZSBpZiBwZWVwaG9sZSBpcyBva2F5
LCBOb05vZGUgb3RoZXJ3aXNlLgorICAgIE5vZGVJbmRleCBkZXRlY3RQZWVwSG9sZUJyYW5jaCgp
CisgICAgeworICAgICAgICBOb2RlSW5kZXggbGFzdE5vZGVJbmRleCA9IG1faml0LmdyYXBoKCku
bV9ibG9ja3NbbV9ibG9ja10tPmVuZCAtIDE7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBubyBp
bnRlcnZlbmluZyBub2RlcyB3aWxsIGJlIGdlbmVyYXRlZC4KKyAgICAgICAgZm9yIChOb2RlSW5k
ZXggaW5kZXggPSBtX2NvbXBpbGVJbmRleCArIDE7IGluZGV4IDwgbGFzdE5vZGVJbmRleDsgKytp
bmRleCkgeworICAgICAgICAgICAgaWYgKGF0KGluZGV4KS5zaG91bGRHZW5lcmF0ZSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVj
ayBpZiB0aGUgbGFzdE5vZGUgaXMgYSBicmFuY2ggb24gdGhpcyBub2RlLgorICAgICAgICBOb2Rl
JiBsYXN0Tm9kZSA9IGF0KGxhc3ROb2RlSW5kZXgpOworICAgICAgICByZXR1cm4gbGFzdE5vZGUu
b3AgPT0gQnJhbmNoICYmIGxhc3ROb2RlLmNoaWxkMSgpID09IG1fY29tcGlsZUluZGV4ID8gbGFz
dE5vZGVJbmRleCA6IE5vTm9kZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBub25TcGVjdWxhdGl2
ZVZhbHVlVG9OdW1iZXIoTm9kZSYpOworICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50
MzIoTm9kZSYpOworICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVVSW50MzJUb051bWJlcihOb2RlJik7
CisKKyAgICB2b2lkIG5vblNwZWN1bGF0aXZlS25vd25Db25zdGFudEFyaXRoT3AoTm9kZVR5cGUg
b3AsIE5vZGVJbmRleCByZWdDaGlsZCwgTm9kZUluZGV4IGltbUNoaWxkLCBib29sIGNvbW11dGUp
OworICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVCYXNpY0FyaXRoT3AoTm9kZVR5cGUgb3AsIE5vZGUm
KTsKKyAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhY2hl
ZEdldEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRHUFIsIEdQUlJlZyBzY3JhdGNo
R1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0
aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCksIE5vZGVUeXBlID0gR2V0QnlJZCk7CisgICAg
dm9pZCBjYWNoZWRQdXRCeUlkKEdQUlJlZyBiYXNlLCBHUFJSZWcgdmFsdWUsIE5vZGVJbmRleCB2
YWx1ZUluZGV4LCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
UHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6
SnVtcCgpKTsKKyAgICB2b2lkIGNhY2hlZEdldE1ldGhvZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVn
IHJlc3VsdEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7
CisjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhY2hlZEdl
dEJ5SWQoR1BSUmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcgcmVzdWx0VGFnR1BSLCBHUFJSZWcg
cmVzdWx0UGF5bG9hZEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1
bXAoKSwgTm9kZVR5cGUgPSBHZXRCeUlkKTsKKyAgICB2b2lkIGNhY2hlZFB1dEJ5SWQoR1BSUmVn
IGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcgdmFsdWVUYWdHUFIsIEdQUlJlZyB2YWx1ZVBheWxvYWRH
UFIsIE5vZGVJbmRleCB2YWx1ZUluZGV4LCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwgUHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQg
PSBKSVRDb21waWxlcjo6SnVtcCgpKTsKKyAgICB2b2lkIGNhY2hlZEdldE1ldGhvZChHUFJSZWcg
YmFzZVBheWxvYWRHUFIsIEdQUlJlZyByZXN1bHRUYWdHUFIsIEdQUlJlZyByZXN1bHRQYXlsb2Fk
R1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29t
cGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpKTsKKyNlbmRp
ZgorCisgICAgdm9pZCBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGwoTm9kZUlu
ZGV4IG9wZXJhbmQsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOworICAgIHZvaWQgbm9uU3BlY3VsYXRp
dmVQZWVwaG9sZUJyYW5jaE51bGwoTm9kZUluZGV4IG9wZXJhbmQsIE5vZGVJbmRleCBicmFuY2hO
b2RlSW5kZXgsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOworICAgIGJvb2wgbm9uU3BlY3VsYXRpdmVD
b21wYXJlTnVsbChOb2RlJiwgTm9kZUluZGV4IG9wZXJhbmQsIGJvb2wgaW52ZXJ0ID0gZmFsc2Up
OworICAgIAorICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlJiwgTm9k
ZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRp
b24sIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7CisgICAgdm9pZCBub25TcGVj
dWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShOb2RlJiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9u
YWxDb25kaXRpb24sIFNfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbik7CisgICAgYm9v
bCBub25TcGVjdWxhdGl2ZUNvbXBhcmUoTm9kZSYsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFs
Q29uZGl0aW9uLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pOworICAgIAorICAg
IHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKE5vZGUmLCBOb2RlSW5kZXggYnJh
bmNoTm9kZUluZGV4LCBib29sIGludmVydCA9IGZhbHNlKTsKKyAgICB2b2lkIG5vblNwZWN1bGF0
aXZlTm9uUGVlcGhvbGVTdHJpY3RFcShOb2RlJiwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CisgICAg
Ym9vbCBub25TcGVjdWxhdGl2ZVN0cmljdEVxKE5vZGUmLCBib29sIGludmVydCA9IGZhbHNlKTsK
KyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhZGRyZXNzT2ZDYWxsRGF0YShpbnQg
aWR4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVn
aXN0ZXJzICsgaWR4KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpOworICAg
IH0KKworI2lmIFVTRShKU1ZBTFVFMzJfNjQpICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzIHRhZ09mQ2FsbERhdGEoaW50IGlkeCkKKyAgICB7CisgICAgICAgIHJldHVybiBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgKG1faml0LmNvZGVC
bG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyArIGlkeCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy50YWcpKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBwYXls
b2FkT2ZDYWxsRGF0YShpbnQgaWR4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAobV9qaXQuY29kZUJsb2Nr
KCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICsgaWR4KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNC
aXRzLnBheWxvYWQpKTsKKyAgICB9CisjZW5kaWYKKworICAgIHZvaWQgZW1pdENhbGwoTm9kZSYp
OworICAgIAorICAgIC8vIENhbGxlZCBvbmNlIGEgbm9kZSBoYXMgY29tcGxldGVkIGNvZGUgZ2Vu
ZXJhdGlvbiBidXQgcHJpb3IgdG8gc2V0dGluZworICAgIC8vIGl0cyByZXN1bHQsIHRvIGZyZWUg
dXAgaXRzIGNoaWxkcmVuLiAoVGhpcyBtdXN0IGhhcHBlbiBwcmlvciB0byBzZXR0aW5nCisgICAg
Ly8gdGhlIG5vZGVzIHJlc3VsdCwgc2luY2UgdGhlIG5vZGUgbWF5IGhhdmUgdGhlIHNhbWUgVmly
dHVhbFJlZ2lzdGVyIGFzCisgICAgLy8gYSBjaGlsZCwgYW5kIGFzIHN1Y2ggd2lsbCB1c2UgdGhl
IHNhbWUgR2VuZXJhdGlvSW5mbykuCisgICAgdm9pZCB1c2VDaGlsZHJlbihOb2RlJik7CisKKyAg
ICAvLyBUaGVzZSBtZXRob2QgY2FsbGVkIHRvIGluaXRpYWxpemUgdGhlIHRoZSBHZW5lcmF0aW9u
SW5mbworICAgIC8vIHRvIGRlc2NyaWJlIHRoZSByZXN1bHQgb2YgYW4gb3BlcmF0aW9uLgorICAg
IHZvaWQgaW50ZWdlclJlc3VsdChHUFJSZWcgcmVnLCBOb2RlSW5kZXggbm9kZUluZGV4LCBEYXRh
Rm9ybWF0IGZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyLCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9
IENhbGxVc2VDaGlsZHJlbikKKyAgICB7CisgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5k
ZXgpOworICAgICAgICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4pCisgICAgICAgICAgICB1
c2VDaGlsZHJlbihub2RlKTsKKworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgR2VuZXJhdGlvbkluZm8mIGlu
Zm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisKKyAgICAgICAgaWYgKGZv
cm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikgeworICAgICAgICAgICAgbV9qaXQuaml0QXNzZXJ0
SXNJbnQzMihyZWcpOworICAgICAgICAgICAgbV9ncHJzLnJldGFpbihyZWcsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlckludGVnZXIpOworICAgICAgICAgICAgaW5mby5pbml0SW50ZWdlcihu
b2RlSW5kZXgsIG5vZGUucmVmQ291bnQoKSwgcmVnKTsKKyAgICAgICAgfSBlbHNlIHsKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlNJ
bnRlZ2VyKTsKKyAgICAgICAgICAgIG1faml0LmppdEFzc2VydElzSlNJbnQzMihyZWcpOworICAg
ICAgICAgICAgbV9ncHJzLnJldGFpbihyZWcsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckpT
KTsKKyAgICAgICAgICAgIGluZm8uaW5pdEpTVmFsdWUobm9kZUluZGV4LCBub2RlLnJlZkNvdW50
KCksIHJlZywgZm9ybWF0KTsKKyNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgfQorICAgIHZvaWQg
aW50ZWdlclJlc3VsdChHUFJSZWcgcmVnLCBOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VDaGlsZHJl
bk1vZGUgbW9kZSkKKyAgICB7CisgICAgICAgIGludGVnZXJSZXN1bHQocmVnLCBub2RlSW5kZXgs
IERhdGFGb3JtYXRJbnRlZ2VyLCBtb2RlKTsKKyAgICB9CisgICAgdm9pZCBub1Jlc3VsdChOb2Rl
SW5kZXggbm9kZUluZGV4LCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikK
KyAgICB7CisgICAgICAgIGlmIChtb2RlID09IFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7
CisgICAgICAgIHVzZUNoaWxkcmVuKG5vZGUpOworICAgIH0KKyAgICB2b2lkIGNlbGxSZXN1bHQo
R1BSUmVnIHJlZywgTm9kZUluZGV4IG5vZGVJbmRleCwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBD
YWxsVXNlQ2hpbGRyZW4pCisgICAgeworICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4
KTsKKyAgICAgICAgaWYgKG1vZGUgPT0gQ2FsbFVzZUNoaWxkcmVuKQorICAgICAgICAgICAgdXNl
Q2hpbGRyZW4obm9kZSk7CisKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIG1fZ3Bycy5yZXRhaW4ocmVnLCB2
aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDZWxsKTsKKyAgICAgICAgR2VuZXJhdGlvbkluZm8m
IGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAgIGluZm8u
aW5pdENlbGwobm9kZUluZGV4LCBub2RlLnJlZkNvdW50KCksIHJlZyk7CisgICAgfQorICAgIHZv
aWQgYm9vbGVhblJlc3VsdChHUFJSZWcgcmVnLCBOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VDaGls
ZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKKyAgICB7CisgICAgICAgIE5vZGUmIG5v
ZGUgPSBhdChub2RlSW5kZXgpOworICAgICAgICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4p
CisgICAgICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKKworICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgbV9n
cHJzLnJldGFpbihyZWcsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckJvb2xlYW4pOworICAg
ICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lz
dGVyXTsKKyAgICAgICAgaW5mby5pbml0Qm9vbGVhbihub2RlSW5kZXgsIG5vZGUucmVmQ291bnQo
KSwgcmVnKTsKKyAgICB9CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICB2b2lkIGpzVmFsdWVSZXN1
bHQoR1BSUmVnIHJlZywgTm9kZUluZGV4IG5vZGVJbmRleCwgRGF0YUZvcm1hdCBmb3JtYXQgPSBE
YXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVuKQorICAg
IHsKKyAgICAgICAgaWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlNJbnRlZ2VyKQorICAgICAgICAg
ICAgbV9qaXQuaml0QXNzZXJ0SXNKU0ludDMyKHJlZyk7CisgICAgICAgIAorICAgICAgICBOb2Rl
JiBub2RlID0gYXQobm9kZUluZGV4KTsKKyAgICAgICAgaWYgKG1vZGUgPT0gQ2FsbFVzZUNoaWxk
cmVuKQorICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7CisKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAg
IG1fZ3Bycy5yZXRhaW4ocmVnLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7CisgICAg
ICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0
ZXJdOworICAgICAgICBpbmZvLmluaXRKU1ZhbHVlKG5vZGVJbmRleCwgbm9kZS5yZWZDb3VudCgp
LCByZWcsIGZvcm1hdCk7CisgICAgfQorICAgIHZvaWQganNWYWx1ZVJlc3VsdChHUFJSZWcgcmVn
LCBOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VDaGlsZHJlbk1vZGUgbW9kZSkKKyAgICB7CisgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVnLCBub2RlSW5kZXgsIERhdGFGb3JtYXRKUywgbW9kZSk7Cisg
ICAgfQorI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICB2b2lkIGpzVmFsdWVSZXN1bHQoR1BS
UmVnIHRhZywgR1BSUmVnIHBheWxvYWQsIE5vZGVJbmRleCBub2RlSW5kZXgsIERhdGFGb3JtYXQg
Zm9ybWF0ID0gRGF0YUZvcm1hdEpTLCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGls
ZHJlbikKKyAgICB7CisgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOworICAgICAg
ICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4pCisgICAgICAgICAgICB1c2VDaGlsZHJlbihu
b2RlKTsKKworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52
aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgbV9ncHJzLnJldGFpbih0YWcsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlckpTKTsKKyAgICAgICAgbV9ncHJzLnJldGFpbihwYXlsb2FkLCB2aXJ0
dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7CisgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZv
ID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgICAgICBpbmZvLmluaXRK
U1ZhbHVlKG5vZGVJbmRleCwgbm9kZS5yZWZDb3VudCgpLCB0YWcsIHBheWxvYWQsIGZvcm1hdCk7
CisgICAgfQorICAgIHZvaWQganNWYWx1ZVJlc3VsdChHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9h
ZCwgTm9kZUluZGV4IG5vZGVJbmRleCwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUpCisgICAgeworICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHRhZywgcGF5bG9hZCwgbm9kZUluZGV4LCBEYXRhRm9ybWF0SlMs
IG1vZGUpOworICAgIH0KKyNlbmRpZgorICAgIHZvaWQgc3RvcmFnZVJlc3VsdChHUFJSZWcgcmVn
LCBOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VDaGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGls
ZHJlbikKKyAgICB7CisgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOworICAgICAg
ICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4pCisgICAgICAgICAgICB1c2VDaGlsZHJlbihu
b2RlKTsKKyAgICAgICAgCisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIg
PSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBtX2dwcnMucmV0YWluKHJlZywgdmly
dHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3RvcmFnZSk7CisgICAgICAgIEdlbmVyYXRpb25JbmZv
JiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgICAgICBpbmZv
LmluaXRTdG9yYWdlKG5vZGVJbmRleCwgbm9kZS5yZWZDb3VudCgpLCByZWcpOworICAgIH0KKyAg
ICB2b2lkIGRvdWJsZVJlc3VsdChGUFJSZWcgcmVnLCBOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VD
aGlsZHJlbk1vZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKKyAgICB7CisgICAgICAgIE5vZGUm
IG5vZGUgPSBhdChub2RlSW5kZXgpOworICAgICAgICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRy
ZW4pCisgICAgICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKKworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAg
bV9mcHJzLnJldGFpbihyZWcsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7Cisg
ICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVn
aXN0ZXJdOworICAgICAgICBpbmZvLmluaXREb3VibGUobm9kZUluZGV4LCBub2RlLnJlZkNvdW50
KCksIHJlZyk7CisgICAgfQorICAgIHZvaWQgaW5pdENvbnN0YW50SW5mbyhOb2RlSW5kZXggbm9k
ZUluZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgp
IHx8IGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSB8fCBpc0pTQ29uc3RhbnQobm9kZUluZGV4
KSk7CisgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOworICAgICAgICBtX2dlbmVy
YXRpb25JbmZvW25vZGUudmlydHVhbFJlZ2lzdGVyKCldLmluaXRDb25zdGFudChub2RlSW5kZXgs
IG5vZGUucmVmQ291bnQoKSk7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyB1c2VkIHRv
IHNvcnQgYXJndW1lbnRzIGludG8gdGhlIGNvcnJlY3QgcmVnaXN0ZXJzLgorICAgIC8vIE9uIFg4
NiB3ZSB1c2UgY2RlY2wgY2FsbGluZyBjb252ZW50aW9ucywgd2hpY2ggcGFzcyBhbGwgYXJndW1l
bnRzIG9uIHRoZQorICAgIC8vIHN0YWNrLiBPbiBvdGhlciBhcmNoaXRlY3R1cmVzIHdlIG1heSBu
ZWVkIHRvIHNvcnQgdmFsdWVzIGludG8gdGhlCisgICAgLy8gY29ycmVjdCByZWdpc3RlcnMuCisj
aWYgIU5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMKKyAgICB1bnNpZ25lZCBtX2NhbGxBcmd1
bWVudEluZGV4OworICAgIHZvaWQgcmVzZXRDYWxsQXJndW1lbnRzKCkgeyBtX2NhbGxBcmd1bWVu
dEluZGV4ID0gMDsgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgdXNpbmcgaW50ZXJuYWxs
eSB0byBpbXBsZW1lbnQgdGhlIGNhbGxPcGVyYXRpb24gbWV0aG9kcy4KKyAgICB2b2lkIGFkZENh
bGxBcmd1bWVudChHUFJSZWcgdmFsdWUpCisgICAgeworICAgICAgICBtX2ppdC5wb2tlKHZhbHVl
LCBtX2NhbGxBcmd1bWVudEluZGV4KyspOworICAgIH0KKyAgICB2b2lkIGFkZENhbGxBcmd1bWVu
dChUcnVzdGVkSW1tMzIgaW1tKQorICAgIHsKKyAgICAgICAgbV9qaXQucG9rZShpbW0sIG1fY2Fs
bEFyZ3VtZW50SW5kZXgrKyk7CisgICAgfQorICAgIHZvaWQgYWRkQ2FsbEFyZ3VtZW50KFRydXN0
ZWRJbW1QdHIgcG9pbnRlcikKKyAgICB7CisgICAgICAgIG1faml0LnBva2UocG9pbnRlciwgbV9j
YWxsQXJndW1lbnRJbmRleCsrKTsKKyAgICB9CisgICAgdm9pZCBhZGRDYWxsQXJndW1lbnQoRlBS
UmVnIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUodmFsdWUsIEpJVENv
bXBpbGVyOjpBZGRyZXNzKEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9jYWxs
QXJndW1lbnRJbmRleCAqIHNpemVvZih2b2lkKikpKTsKKyAgICAgICAgbV9jYWxsQXJndW1lbnRJ
bmRleCArPSBzaXplb2YoZG91YmxlKSAvIHNpemVvZih2b2lkKik7CisgICAgfQorCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzKEZQUlJlZyBhcmcxKQorICAgIHsKKyAgICAg
ICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsK
KyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHMoRlBSUmVnIGFy
ZzEsIEZQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7Cisg
ICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFy
ZzIpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c0V4ZWNT
dGF0ZSgpCisgICAgeworICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKKyAgICAgICAgYWRk
Q2FsbEFyZ3VtZW50KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICB9CisKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcx
KQorICAgIHsKKyAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CisgICAgICAgIGFkZENhbGxB
cmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGFkZENhbGxBcmd1
bWVudChhcmcxKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIgYXJnMSkKKyAgICB7CisgICAgICAgIHJlc2V0
Q2FsbEFyZ3VtZW50cygpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7CisgICAgfQorCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsK
KyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAg
ICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzEpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJn
Mik7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShHUFJSZWcgYXJnMSwgVHJ1c3RlZEltbVB0ciBhcmcyKQorICAgIHsKKyAgICAgICAg
cmVzZXRDYWxsQXJndW1lbnRzKCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsKKyAgICAg
ICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzIpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFyZzEsIFRydXN0ZWRJ
bW0zMiBhcmcyKQorICAgIHsKKyAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CisgICAgICAg
IGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGFk
ZENhbGxBcmd1bWVudChhcmcxKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzIpOworICAg
IH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
VHJ1c3RlZEltbVB0ciBhcmcxLCBUcnVzdGVkSW1tUHRyIGFyZzIpCisgICAgeworICAgICAgICBy
ZXNldENhbGxBcmd1bWVudHMoKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzEpOworICAgICAg
ICBhZGRDYWxsQXJndW1lbnQoYXJnMik7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lk
IHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQ
UlJlZyBhcmczKQorICAgIHsKKyAgICAgICAgcmVzZXRDYWxsQXJndW1lbnRzKCk7CisgICAgICAg
IGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGFk
ZENhbGxBcmd1bWVudChhcmcxKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzIpOworICAg
ICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMyk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2
b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIs
IFRydXN0ZWRJbW1QdHIgYXJnMykKKyAgICB7CisgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygp
OworICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwor
ICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChh
cmcyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMpOworICAgIH0KKworICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQ
UlJlZyBhcmcyLCBHUFJSZWcgYXJnMywgR1BSUmVnIGFyZzQpCisgICAgeworICAgICAgICByZXNl
dENhbGxBcmd1bWVudHMoKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzEpOworICAgICAgICBh
ZGRDYWxsQXJndW1lbnQoYXJnMik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmczKTsKKyAg
ICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzQpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
LCBHUFJSZWcgYXJnMywgVHJ1c3RlZEltbVB0ciBhcmc0KQorICAgIHsKKyAgICAgICAgcmVzZXRD
YWxsQXJndW1lbnRzKCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3Rlcik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsKKyAgICAgICAgYWRk
Q2FsbEFyZ3VtZW50KGFyZzIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMyk7CisgICAg
ICAgIGFkZENhbGxBcmd1bWVudChhcmc0KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwg
VHJ1c3RlZEltbTMyIGFyZzMsIFRydXN0ZWRJbW0zMiBhcmc0KQorICAgIHsKKyAgICAgICAgcmVz
ZXRDYWxsQXJndW1lbnRzKCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsKKyAgICAgICAg
YWRkQ2FsbEFyZ3VtZW50KGFyZzIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMyk7Cisg
ICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc0KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMiBhcmcxLCBUcnVz
dGVkSW1tMzIgYXJnMiwgR1BSUmVnIGFyZzMsIEdQUlJlZyBhcmc0KQorICAgIHsKKyAgICAgICAg
cmVzZXRDYWxsQXJndW1lbnRzKCk7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcxKTsKKyAgICAg
ICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMyk7
CisgICAgICAgIGFkZENhbGxBcmd1bWVudChhcmc0KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMiwgR1BSUmVnIGFyZzMsIEdQUlJlZyBhcmc0LCBHUFJSZWcgYXJnNSkKKyAgICB7CisgICAg
ICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7Cisg
ICAgICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFy
ZzMpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnNCk7CisgICAgICAgIGFkZENhbGxBcmd1
bWVudChhcmc1KTsKKyAgICB9CisjZW5kaWYgLy8gIU5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RF
UlMKKyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBzdWl0YWJsZSBmb3IgYW55IGNhbGxpbmcgY29u
dmVudGlvbiB0aGF0IHByb3ZpZGVzIGZvcgorICAgIC8vIGF0IGxlYXN0IDQgYXJndW1lbnQgcmVn
aXN0ZXJzLCBlLmcuIFg4Nl82NCwgQVJNdjcuCisjaWYgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lT
VEVSUyA+PSA0CisgICAgdGVtcGxhdGU8R1BSUmVnIGRlc3RBLCBHUFJSZWcgZGVzdEI+CisgICAg
dm9pZCBzZXR1cFR3b1N0dWJBcmdzKEdQUlJlZyBzcmNBLCBHUFJSZWcgc3JjQikKKyAgICB7Cisg
ICAgICAgIC8vIEFzc3VtaW5nIHRoYXQgc3JjQSAhPSBzcmNCLCB0aGVyZSBhcmUgNyBpbnRlcmVz
dGluZyBzdGF0ZXMgdGhlIHJlZ2lzdGVycyBtYXkgYmUgaW46CisgICAgICAgIC8vICgxKSBib3Ro
IGFyZSBhbHJlYWR5IGluIGFyZyByZWdzLCB0aGUgcmlnaHQgd2F5IGFyb3VuZC4KKyAgICAgICAg
Ly8gKDIpIGJvdGggYXJlIGFscmVhZHkgaW4gYXJnIHJlZ3MsIHRoZSB3cm9uZyB3YXkgYXJvdW5k
LgorICAgICAgICAvLyAoMykgbmVpdGhlciBhcmUgY3VycmVudGx5IGluIGFyZyByZWdpc3RlcnMu
CisgICAgICAgIC8vICg0KSBzcmNBIGluIGluIGl0cyBjb3JyZWN0IHJlZy4KKyAgICAgICAgLy8g
KDUpIHNyY0EgaW4gaW4gdGhlIGluY29ycmVjdCByZWcuCisgICAgICAgIC8vICg2KSBzcmNCIGlu
IGluIGl0cyBjb3JyZWN0IHJlZy4KKyAgICAgICAgLy8gKDcpIHNyY0IgaW4gaW4gdGhlIGluY29y
cmVjdCByZWcuCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSB0cml2aWFsIGFwcHJvYWNoIGlz
IHRvIHNpbXBseSBlbWl0IHR3byBtb3ZlcywgdG8gcHV0IHNyY0EgaW4gcGxhY2UgdGhlbiBzcmNC
IGluCisgICAgICAgIC8vIHBsYWNlICh0aGUgTWFjcm9Bc3NlbWJsZXIgd2lsbCBvbWl0IHJlZHVu
ZGFudCBtb3ZlcykuIFRoaXMgYXBwb3JhY2ggd2lsbCBiZSBzYWZlIGluCisgICAgICAgIC8vIGNh
c2VzIDEsIDMsIDQsIDUsIDYsIGFuZCBpbiBjYXNlcyB3aGVyZSBzcmNBPT1zcmNCLiBUaGUgdHdv
IHByb2JsZW0gY2FzZXMgYXJlIDIKKyAgICAgICAgLy8gKHJlcXVpcmVzIGEgc3dhcCkgYW5kIDcg
KG11c3QgbW92ZSBzcmNCIGZpcnN0LCB0byBhdm9pZCB0cmFtcGxpbmcuKQorCisgICAgICAgIGlm
IChzcmNCICE9IGRlc3RBKSB7CisgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGVhc3kgY2FzZXMg
LSB0d28gc2ltcGxlIG1vdmVzLgorICAgICAgICAgICAgbV9qaXQubW92ZShzcmNBLCBkZXN0QSk7
CisgICAgICAgICAgICBtX2ppdC5tb3ZlKHNyY0IsIGRlc3RCKTsKKyAgICAgICAgfSBlbHNlIGlm
IChzcmNBICE9IGRlc3RCKSB7CisgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIG5vbi1zd2FwIGNh
c2UgLSBqdXN0IHB1dCBzcmNCIGluIHBsYWNlIGZpcnN0LgorICAgICAgICAgICAgbV9qaXQubW92
ZShzcmNCLCBkZXN0Qik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKHNyY0EsIGRlc3RBKTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2ppdC5zd2FwKGRlc3RBLCBkZXN0Qik7CisgICAg
fQorI2lmIENQVShYODZfNjQpCisgICAgdGVtcGxhdGU8RlBSUmVnIGRlc3RBLCBGUFJSZWcgZGVz
dEI+CisgICAgdm9pZCBzZXR1cFR3b1N0dWJBcmdzKEZQUlJlZyBzcmNBLCBGUFJSZWcgc3JjQikK
KyAgICB7CisgICAgICAgIC8vIEFzc3VtaW5nIHRoYXQgc3JjQSAhPSBzcmNCLCB0aGVyZSBhcmUg
NyBpbnRlcmVzdGluZyBzdGF0ZXMgdGhlIHJlZ2lzdGVycyBtYXkgYmUgaW46CisgICAgICAgIC8v
ICgxKSBib3RoIGFyZSBhbHJlYWR5IGluIGFyZyByZWdzLCB0aGUgcmlnaHQgd2F5IGFyb3VuZC4K
KyAgICAgICAgLy8gKDIpIGJvdGggYXJlIGFscmVhZHkgaW4gYXJnIHJlZ3MsIHRoZSB3cm9uZyB3
YXkgYXJvdW5kLgorICAgICAgICAvLyAoMykgbmVpdGhlciBhcmUgY3VycmVudGx5IGluIGFyZyBy
ZWdpc3RlcnMuCisgICAgICAgIC8vICg0KSBzcmNBIGluIGluIGl0cyBjb3JyZWN0IHJlZy4KKyAg
ICAgICAgLy8gKDUpIHNyY0EgaW4gaW4gdGhlIGluY29ycmVjdCByZWcuCisgICAgICAgIC8vICg2
KSBzcmNCIGluIGluIGl0cyBjb3JyZWN0IHJlZy4KKyAgICAgICAgLy8gKDcpIHNyY0IgaW4gaW4g
dGhlIGluY29ycmVjdCByZWcuCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSB0cml2aWFsIGFw
cHJvYWNoIGlzIHRvIHNpbXBseSBlbWl0IHR3byBtb3ZlcywgdG8gcHV0IHNyY0EgaW4gcGxhY2Ug
dGhlbiBzcmNCIGluCisgICAgICAgIC8vIHBsYWNlICh0aGUgTWFjcm9Bc3NlbWJsZXIgd2lsbCBv
bWl0IHJlZHVuZGFudCBtb3ZlcykuIFRoaXMgYXBwb3JhY2ggd2lsbCBiZSBzYWZlIGluCisgICAg
ICAgIC8vIGNhc2VzIDEsIDMsIDQsIDUsIDYsIGFuZCBpbiBjYXNlcyB3aGVyZSBzcmNBPT1zcmNC
LiBUaGUgdHdvIHByb2JsZW0gY2FzZXMgYXJlIDIKKyAgICAgICAgLy8gKHJlcXVpcmVzIGEgc3dh
cCkgYW5kIDcgKG11c3QgbW92ZSBzcmNCIGZpcnN0LCB0byBhdm9pZCB0cmFtcGxpbmcuKQorCisg
ICAgICAgIGlmIChzcmNCICE9IGRlc3RBKSB7CisgICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGVh
c3kgY2FzZXMgLSB0d28gc2ltcGxlIG1vdmVzLgorICAgICAgICAgICAgbV9qaXQubW92ZURvdWJs
ZShzcmNBLCBkZXN0QSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKHNyY0IsIGRlc3RC
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KHNyY0EgIT0gZGVzdEIpIHsKKyAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgbm9uLXN3YXAgY2Fz
ZSAtIGp1c3QgcHV0IHNyY0IgaW4gcGxhY2UgZmlyc3QuCisgICAgICAgICAgICBtX2ppdC5tb3Zl
RG91YmxlKHNyY0IsIGRlc3RCKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoc3JjQSwg
ZGVzdEEpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJU
KHNyY0IgPT0gZGVzdEEgJiYgc3JjQSA9PSBkZXN0Qik7CisgICAgICAgIC8vIE5lZWQgdG8gc3dh
cDsgcGljayBhIHRlbXBvcmFyeSByZWdpc3Rlci4KKyAgICAgICAgRlBSUmVnIHRlbXA7CisgICAg
ICAgIGlmIChkZXN0QSAhPSBGUFJJbmZvOjphcmd1bWVudEZQUjMgJiYgZGVzdEEgIT0gRlBSSW5m
bzo6YXJndW1lbnRGUFIzKQorICAgICAgICAgICAgdGVtcCA9IEZQUkluZm86OmFyZ3VtZW50RlBS
MzsKKyAgICAgICAgZWxzZSBpZiAoZGVzdEEgIT0gRlBSSW5mbzo6YXJndW1lbnRGUFIyICYmIGRl
c3RBICE9IEZQUkluZm86OmFyZ3VtZW50RlBSMikKKyAgICAgICAgICAgIHRlbXAgPSBGUFJJbmZv
Ojphcmd1bWVudEZQUjI7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGRlc3RB
ICE9IEZQUkluZm86OmFyZ3VtZW50RlBSMSAmJiBkZXN0QSAhPSBGUFJJbmZvOjphcmd1bWVudEZQ
UjEpOworICAgICAgICAgICAgdGVtcCA9IEZQUkluZm86OmFyZ3VtZW50RlBSMTsKKyAgICAgICAg
fQorICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKGRlc3RBLCB0ZW1wKTsKKyAgICAgICAgbV9qaXQu
bW92ZURvdWJsZShkZXN0QiwgZGVzdEEpOworICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKHRlbXAs
IGRlc3RCKTsKKyAgICB9CisjZW5kaWYKKyAgICB2b2lkIHNldHVwU3R1YkFyZ3VtZW50cyhHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBzZXR1cFR3b1N0dWJBcmdzPEdQ
UkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyPihhcmcxLCBhcmcyKTsK
KyAgICB9CisgICAgdm9pZCBzZXR1cFN0dWJBcmd1bWVudHMoR1BSUmVnIGFyZzEsIEdQUlJlZyBh
cmcyLCBHUFJSZWcgYXJnMykKKyAgICB7CisgICAgICAgIC8vIElmIG5laXRoZXIgb2YgYXJnMi9h
cmczIGFyZSBpbiBvdXIgd2F5LCB0aGVuIHdlIGNhbiBtb3ZlIGFyZzEgaW50byBwbGFjZS4KKyAg
ICAgICAgLy8gVGhlbiB3ZSBjYW4gdXNlIHNldHVwVHdvU3R1YkFyZ3MgdG8gZml4IGFyZzIvYXJn
My4KKyAgICAgICAgaWYgKGFyZzIgIT0gR1BSSW5mbzo6YXJndW1lbnRHUFIxICYmIGFyZzMgIT0g
R1BSSW5mbzo6YXJndW1lbnRHUFIxKSB7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKGFyZzEsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBzZXR1cFR3b1N0dWJBcmdzPEdQUklu
Zm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIzPihhcmcyLCBhcmczKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIG5laXRoZXIgb2Yg
YXJnMS9hcmczIGFyZSBpbiBvdXIgd2F5LCB0aGVuIHdlIGNhbiBtb3ZlIGFyZzIgaW50byBwbGFj
ZS4KKyAgICAgICAgLy8gVGhlbiB3ZSBjYW4gdXNlIHNldHVwVHdvU3R1YkFyZ3MgdG8gZml4IGFy
ZzEvYXJnMy4KKyAgICAgICAgaWYgKGFyZzEgIT0gR1BSSW5mbzo6YXJndW1lbnRHUFIyICYmIGFy
ZzMgIT0gR1BSSW5mbzo6YXJndW1lbnRHUFIyKSB7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKGFy
ZzIsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgICAgICAgICBzZXR1cFR3b1N0dWJBcmdz
PEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIzPihhcmcxLCBhcmcz
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIG5laXRo
ZXIgb2YgYXJnMS9hcmcyIGFyZSBpbiBvdXIgd2F5LCB0aGVuIHdlIGNhbiBtb3ZlIGFyZzMgaW50
byBwbGFjZS4KKyAgICAgICAgLy8gVGhlbiB3ZSBjYW4gdXNlIHNldHVwVHdvU3R1YkFyZ3MgdG8g
Zml4IGFyZzEvYXJnMi4KKyAgICAgICAgaWYgKGFyZzEgIT0gR1BSSW5mbzo6YXJndW1lbnRHUFIz
ICYmIGFyZzIgIT0gR1BSSW5mbzo6YXJndW1lbnRHUFIzKSB7CisgICAgICAgICAgICBtX2ppdC5t
b3ZlKGFyZzMsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgICAgICAgICBzZXR1cFR3b1N0
dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50R1BSMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyPihhcmcx
LCBhcmcyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElm
IHdlIGdldCBoZXJlLCB3ZSBoYXZlbid0IGJlZW4gYWJsZSB0byBtb3ZlIGFueSBvZiBhcmcxL2Fy
ZzIvYXJnMy4KKyAgICAgICAgLy8gU2luY2UgYWxsIHRocmVlIGFyZSBibG9ja2VkLCB0aGVuIGFs
bCB0aHJlZSBtdXN0IGFscmVhZHkgYmUgaW4gdGhlIGFyZ3VtZW50IHJlZ2lzdGVyLgorICAgICAg
ICAvLyBCdXQgYXJlIHRoZXkgaW4gdGhlIHJpZ2h0IG9uZXM/CisKKyAgICAgICAgLy8gRmlyc3Qs
IGVuc3VyZSBhcmcxIGlzIGluIHBsYWNlLgorICAgICAgICBpZiAoYXJnMSAhPSBHUFJJbmZvOjph
cmd1bWVudEdQUjEpIHsKKyAgICAgICAgICAgIG1faml0LnN3YXAoYXJnMSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxKTsKKworICAgICAgICAgICAgLy8gSWYgYXJnMSB3YXNuJ3QgaW4gYXJndW1lbnRH
UFIxLCBvbmUgb2YgYXJnMi9hcmczIG11c3QgYmUuCisgICAgICAgICAgICBBU1NFUlQoYXJnMiA9
PSBHUFJJbmZvOjphcmd1bWVudEdQUjEgfHwgYXJnMyA9PSBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OworICAgICAgICAgICAgLy8gSWYgYXJnMiB3YXMgaW4gYXJndW1lbnRHUFIxIGl0IG5vIGxvbmdl
ciBpcyAoZHVlIHRvIHRoZSBzd2FwKS4KKyAgICAgICAgICAgIC8vIE90aGVyd2lzZSBhcmczIG11
c3QgaGF2ZSBiZWVuLiBNYXJrIGhpbSBhcyBtb3ZlZC4KKyAgICAgICAgICAgIGlmIChhcmcyID09
IEdQUkluZm86OmFyZ3VtZW50R1BSMSkKKyAgICAgICAgICAgICAgICBhcmcyID0gYXJnMTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmczID0gYXJnMTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIEVpdGhlciBhcmcyICYgYXJnMyBuZWVkIHN3YXBwaW5nLCBvciB3ZSdyZSBh
bGwgZG9uZS4KKyAgICAgICAgQVNTRVJUKChhcmcyID09IEdQUkluZm86OmFyZ3VtZW50R1BSMiB8
fCBhcmczID09IEdQUkluZm86OmFyZ3VtZW50R1BSMykKKyAgICAgICAgICAgIHx8IChhcmcyID09
IEdQUkluZm86OmFyZ3VtZW50R1BSMyB8fCBhcmczID09IEdQUkluZm86OmFyZ3VtZW50R1BSMikp
OworCisgICAgICAgIGlmIChhcmcyICE9IEdQUkluZm86OmFyZ3VtZW50R1BSMikKKyAgICAgICAg
ICAgIG1faml0LnN3YXAoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjMpOworICAgIH0KKworI2lmIENQVShYODZfNjQpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNl
dHVwQXJndW1lbnRzKEZQUlJlZyBhcmcxKQorICAgIHsKKyAgICAgICAgbV9qaXQubW92ZURvdWJs
ZShhcmcxLCBGUFJJbmZvOjphcmd1bWVudEZQUjApOworICAgIH0KKworICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBzZXR1cEFyZ3VtZW50cyhGUFJSZWcgYXJnMSwgRlBSUmVnIGFyZzIpCisgICAgewor
ICAgICAgICBzZXR1cFR3b1N0dWJBcmdzPEZQUkluZm86OmFyZ3VtZW50RlBSMCwgRlBSSW5mbzo6
YXJndW1lbnRGUFIxPihhcmcxLCBhcmcyKTsKKyAgICB9CisjZWxzZQorICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBzZXR1cEFyZ3VtZW50cyhGUFJSZWcgYXJnMSkKKyAgICB7CisgICAgICAgIG1faml0
LmFzc2VtYmxlcigpLnZtb3YoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEsIGFyZzEpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3Vt
ZW50cyhGUFJSZWcgYXJnMSwgRlBSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5hc3Nl
bWJsZXIoKS52bW92KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIx
LCBhcmcxKTsKKyAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkudm1vdihHUFJJbmZvOjphcmd1bWVu
dEdQUjIsIEdQUkluZm86OmFyZ3VtZW50R1BSMywgYXJnMik7CisgICAgfQorI2VuZGlmCisKKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKQorICAgIHsKKyAg
ICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxKQorICAgIHsKKyAgICAgICAgbV9qaXQubW92ZShh
cmcxLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIH0KKworICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZElt
bVB0ciBhcmcxKQorICAgIHsKKyAgICAgICAgbV9qaXQubW92ZShhcmcxLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQor
ICAgIHsKKyAgICAgICAgc2V0dXBTdHViQXJndW1lbnRzKGFyZzEsIGFyZzIpOworICAgICAgICBt
X2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoR1BSUmVnIGFyZzEsIFRydXN0ZWRJbW1QdHIgYXJnMikKKyAgICB7CisgICAgICAg
IG1faml0Lm1vdmUoYXJnMSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbV9qaXQu
bW92ZShhcmcyLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAgICBtX2ppdC5tb3ZlKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIH0K
KworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1
c3RlZEltbVB0ciBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0Lm1vdmUo
YXJnMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsgLy8gTW92ZSB0aGlzIGZpcnN0LCBzbyBzZXR0
aW5nIGFyZzEgZG9lcyBub3QgdHJhbXBsZSEKKyAgICAgICAgbV9qaXQubW92ZShhcmcxLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIH0KKworICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFyZzEs
IFRydXN0ZWRJbW0zMiBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQubW92ZShhcmcxLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBtX2ppdC5tb3ZlKGFyZzIsIEdQUkluZm86OmFy
Z3VtZW50R1BSMik7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2
b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyIGFyZzEsIFRydXN0
ZWRJbW1QdHIgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0Lm1vdmUoYXJnMSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbV9qaXQubW92ZShhcmcyLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjIpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBz
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJS
ZWcgYXJnMykKKyAgICB7CisgICAgICAgIHNldHVwU3R1YkFyZ3VtZW50cyhhcmcxLCBhcmcyLCBh
cmczKTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3Rl
ZEltbTMyIGFyZzMpCisgICAgeworICAgICAgICBzZXR1cFN0dWJBcmd1bWVudHMoYXJnMSwgYXJn
Mik7CisgICAgICAgIG1faml0Lm1vdmUoYXJnMywgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAg
ICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3RlZEltbVB0ciBh
cmczKQorICAgIHsKKyAgICAgICAgc2V0dXBTdHViQXJndW1lbnRzKGFyZzEsIGFyZzIpOworICAg
ICAgICBtX2ppdC5tb3ZlKGFyZzMsIEdQUkluZm86OmFyZ3VtZW50R1BSMyk7CisgICAgICAgIG1f
aml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShUcnVzdGVkSW1tMzIgYXJnMSwgVHJ1c3RlZEltbTMyIGFyZzIsIEdQUlJlZyBhcmcz
KQorICAgIHsKKyAgICAgICAgbV9qaXQubW92ZShhcmcxLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OworICAgICAgICBtX2ppdC5tb3ZlKGFyZzIsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAg
ICAgIG1faml0Lm1vdmUoYXJnMywgR1BSSW5mbzo6YXJndW1lbnRHUFIzKTsKKyAgICAgICAgbV9q
aXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKKyAgICB9CisKKyNlbmRpZiAvLyBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTID49IDQK
KyAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSBzdWl0YWJsZSBmb3IgYW55IGNhbGxpbmcgY29udmVu
dGlvbiB0aGF0IHByb3ZpZGVzIGZvcgorICAgIC8vIGV4YWN0bHkgNCBhcmd1bWVudCByZWdpc3Rl
cnMsIGUuZy4gQVJNdjcuCisjaWYgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyA9PSA0Cisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcg
YXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczLCBHUFJSZWcgYXJnNCkKKyAgICB7CisgICAg
ICAgIG1faml0LnBva2UoYXJnNCk7CisgICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBhcmcyLCBhcmczKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgVHJ1c3Rl
ZEltbTMyIGFyZzMsIFRydXN0ZWRJbW0zMiBhcmc0KQorICAgIHsKKyAgICAgICAgbV9qaXQucG9r
ZShhcmc0KTsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIs
IGFyZzMpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoVHJ1c3RlZEltbTMyIGFyZzEsIFRydXN0ZWRJbW0zMiBhcmcyLCBHUFJSZWcg
YXJnMywgR1BSUmVnIGFyZzQpCisgICAgeworICAgICAgICBtX2ppdC5wb2tlKGFyZzQpOworICAg
ICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CisgICAg
fQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShH
UFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczLCBUcnVzdGVkSW1tUHRyIGFyZzQp
CisgICAgeworICAgICAgICBtX2ppdC5wb2tlKGFyZzQpOworICAgICAgICBzZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CisgICAgfQorCisgICAgQUxXQVlTX0lO
TElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShHUFJSZWcgYXJnMSwgR1BSUmVn
IGFyZzIsIEdQUlJlZyBhcmczLCBHUFJSZWcgYXJnNCwgR1BSUmVnIGFyZzUpCisgICAgeworICAg
ICAgICBtX2ppdC5wb2tlKGFyZzUsIDEpOworICAgICAgICBtX2ppdC5wb2tlKGFyZzQpOworICAg
ICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CisgICAg
fQorI2VuZGlmIC8vIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgPT0gNAorCisgICAgLy8g
VGhlc2UgbWV0aG9kcyBhZGQgY2FsbHMgdG8gQysrIGhlbHBlciBmdW5jdGlvbnMuCisgICAgLy8g
VGhlc2UgbWV0aG9kcyBhcmUgYnJvYWRseSB2YWx1ZSByZXByZXNlbnRhdGlvbiBzcGVjaWZpYyAo
aS5lLgorICAgIC8vIGRlYWwgd2l0aCB0aGUgZmFjdCB0aGF0IGEgSlNWYWx1ZSBtYXkgYmUgcGFz
c2VkIGluIG9uZSBvciB0d28KKyAgICAvLyBtYWNoaW5lIHJlZ2lzdGVycywgYW5kIGRlbGVnYXRl
IHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gc3BlY2lmaWMKKyAgICAvLyBkZWNpc2lvbiBhcyB0byBo
b3cgdG8gZmlsbCB0aGUgcmVnc2l0ZXJzIHRvIHNldHVwQXJndW1lbnRzKiBtZXRob2RzLgorI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RG
R09wZXJhdGlvbl9FUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIHZvaWQqIHBvaW50ZXIpCisg
ICAgeworICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihw
b2ludGVyKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihaX0RGR09wZXJhdGlvbl9EIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
RlBSUmVnIGFyZzEpCisgICAgeworICAgICAgICBzZXR1cEFyZ3VtZW50cyhhcmcxKTsKKyAgICAg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IG1faml0LmFwcGVuZENhbGwob3BlcmF0aW9uKTsK
KyAgICAgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IHJlc3VsdCk7CisgICAgICAgIHJldHVybiBjYWxsOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VHSSBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIEdQUlJlZyBhcmcxLCBJZGVudGlmaWVyKiBpZGVudGlmaWVyKQorICAgIHsKKyAgICAg
ICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoaWRlbnRp
ZmllcikpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBJ
ZGVudGlmaWVyKiBpZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllcikpOworICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7Cisg
ICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25f
RUEgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICB7CisgICAgICAg
IHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKKyAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAg
IH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQ
UyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQor
ICAgIHsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIo
cG9pbnRlciksIFRydXN0ZWRJbW1QdHIoc2l6ZSkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVNTIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgaW50IHN0YXJ0Q29uc3RhbnQsIGludCBudW1Db25zdGFu
dHMpCisgICAgeworICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoSW1tMzIoc3Rh
cnRDb25zdGFudCksIEltbTMyKG51bUNvbnN0YW50cykpOworICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAg
fQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVBQ
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIHZvaWQqIHBvaW50ZXIpCisg
ICAgeworICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZElt
bVB0cihwb2ludGVyKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0kgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBHUFJSZWcgYXJnMSwgSWRlbnRpZmllciogaWRlbnRpZmllcikKKyAgICB7CisgICAg
ICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGlkZW50
aWZpZXIpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRS
ZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKQSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIHNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQIG9wZXJhdGlv
biwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgeworICAgICAgICBzZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0RGR09wZXJhdGlvbl9FIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCkKKyAgICB7CisgICAgICAgIHNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7
CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihDX0RGR09wZXJhdGlvbl9FQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxKQorICAgIHsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwor
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oQ19ERkdPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFy
ZzEsIEpTQ2VsbCogY2VsbCkKKyAgICB7CisgICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGNlbGwpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0K
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZHT3BlcmF0aW9uX0VKIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgeworICAgICAgICBzZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9Cisg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihTX0RGR09wZXJhdGlvbl9FSkogb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgewor
ICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RG
R09wZXJhdGlvbl9FUFAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIpCisgICAgeworICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSkogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBHUFJSZWcgYXJnMSwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyIGltbSkKKyAgICB7CisgICAgICAg
IHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRy
KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPihKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoaW1tLm1f
dmFsdWUpKSkpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1
bHQsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMiBpbW0sIEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAg
ICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoc3Rh
dGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KEpTVmFsdWU6OmVuY29kZShqc051bWJlcihpbW0ubV92YWx1
ZSkpKSksIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUNKIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9ERkdPcGVyYXRpb25fRUpQUCBv
cGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgdm9pZCogcG9pbnRlcikKKyAgICB7
CisgICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVk
SW1tUHRyKHBvaW50ZXIpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uKTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihWX0RGR09wZXJhdGlvbl9FSkNJIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBh
cmcyLCBJZGVudGlmaWVyKiBpZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllcikpOwor
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwor
ICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9u
X0VKSkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQor
ICAgIHsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFy
ZzMpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRp
b24pOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3Bl
cmF0aW9uX0VQWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBh
cmczKQorICAgIHsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFy
ZzIsIGFyZzMpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhv
cGVyYXRpb24pOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZf
REZHT3BlcmF0aW9uX0VBWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQ
UlJlZyBhcmczKQorICAgIHsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIGFyZzIsIGFyZzMpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhvcGVyYXRpb24pOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFZfREZHT3BlcmF0aW9uX0VDSkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFy
ZzIsIEdQUlJlZyBhcmczKQorICAgIHsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZzEsIGFyZzIsIGFyZzMpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhvcGVyYXRpb24pOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKERfREZHT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgR1BS
UmVnIGFyZzEpCisgICAgeworICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0
KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihEX0RGR09wZXJhdGlvbl9ERCBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEZQUlJl
ZyBhcmcxLCBGUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIHNldHVwQXJndW1lbnRzKGFyZzEs
IGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdCk7CisgICAgfQorI2Vsc2UKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFpfREZHT3BlcmF0aW9uX0Qgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBGUFJSZWcgYXJnMSkK
KyAgICB7CisgICAgICAgIHNldHVwQXJndW1lbnRzKGFyZzEpOworICAgICAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsID0gbV9qaXQuYXBwZW5kQ2FsbChvcGVyYXRpb24pOworICAgICAgICBtX2pp
dC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKKyAg
ICAgICAgcmV0dXJuIGNhbGw7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9ERkdPcGVyYXRpb25fRVAgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJS
ZWcgcmVzdWx0UGF5bG9hZCwgdm9pZCogcG9pbnRlcikKKyAgICB7CisgICAgICAgIHNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsKKyAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHRQYXlsb2FkLCByZXN1bHRUYWcpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQUCBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcs
IEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgdm9pZCogcG9pbnRlcikKKyAgICB7
CisgICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRy
KHBvaW50ZXIpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOworICAgIH0KKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VHSSBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJn
MSwgSWRlbnRpZmllciogaWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIHNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGlkZW50aWZpZXIpKTsKKyAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VQIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRh
ZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxKQorICAgIHsKKyAgICAgICAgc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJl
c3VsdFRhZyk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9E
RkdPcGVyYXRpb25fRUkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0
UGF5bG9hZCwgSWRlbnRpZmllciogaWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIHNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGlkZW50aWZpZXIpKTsKKyAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRh
ZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxKQorICAgIHsKKyAgICAgICAgc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJl
c3VsdFRhZyk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9E
RkdPcGVyYXRpb25fRVBTIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3Vs
dFBheWxvYWQsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIocG9pbnRlciksIFRydXN0ZWRJ
bW1QdHIoc2l6ZSkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
a1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CisgICAgfQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVNTIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIGludCBzdGFy
dENvbnN0YW50LCBpbnQgbnVtQ29uc3RhbnRzKQorICAgIHsKKyAgICAgICAgc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW0zMihzdGFydENvbnN0YW50KSwgVHJ1c3RlZEltbTMy
KG51bUNvbnN0YW50cykpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CisgICAg
fQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpQ
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJl
ZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIHZvaWQqIHBvaW50ZXIpCisgICAgeworICAg
ICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMVBheWxvYWQsIGFyZzFUYWcsIElt
bVB0cihwb2ludGVyKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKKyAgICB9
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FSlAg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVn
IGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAg
ICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMVBheWxvYWQsIGFyZzFUYWcsIGFyZzIp
OworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CisgICAgfQorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUNJIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCBJZGVudGlm
aWVyKiBpZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllcikpOworICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxv
YWQsIHJlc3VsdFRhZyk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oSl9ERkdPcGVyYXRpb25fRUpBIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVn
IHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJl
ZyBhcmcyKQorICAgIHsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzFQ
YXlsb2FkLCBhcmcxVGFnLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcp
OworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0
aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQs
IEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCisgICAgeworICAgICAgICBzZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMVBheWxvYWQsIGFyZzFUYWcpOworICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJl
c3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oQ19ERkdPcGVyYXRpb25fRSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQpCisg
ICAgeworICAgICAgICBzZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOworICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7
CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19ERkdPcGVyYXRp
b25fRUMgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICB7CisgICAg
ICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKKyAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwor
ICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9u
X0VDQyBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU0NlbGwqIGNlbGwp
CisgICAgeworICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3Rl
ZEltbVB0cihjZWxsKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihTX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCisgICAgeworICAgICAg
ICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMVBheWxvYWQsIGFyZzFUYWcpOworICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
U19ERkdPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFU
YWcsIEdQUlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9h
ZCkKKyAgICB7CisgICAgICAgIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxUGF5bG9h
ZCwgYXJnMVRhZywgYXJnMlBheWxvYWQsIGFyZzJUYWcpOworICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAg
fQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpK
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJl
ZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJn
MlBheWxvYWQpCisgICAgeworICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MVBheWxvYWQsIGFyZzFUYWcsIGFyZzJQYXlsb2FkLCBhcmcyVGFnKTsKKyAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQ
YXlsb2FkLCByZXN1bHRUYWcpOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKEpfREZHT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQ
UlJlZyByZXN1bHRQYXlsb2FkLCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkLCBN
YWNyb0Fzc2VtYmxlcjo6SW1tMzIgaW1tKQorICAgIHsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBpbW0sIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpJbnQzMlRhZykpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRhZyk7CisgICAg
fQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUpK
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIE1hY3Jv
QXNzZW1ibGVyOjpJbW0zMiBpbW0sIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQp
CisgICAgeworICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoaW1tLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBhcmcyUGF5bG9hZCwgYXJnMlRhZyk7CisgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0UGF5bG9hZCwgcmVzdWx0VGFnKTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
VGFnLCBHUFJSZWcgcmVzdWx0UGF5bG9hZCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyVGFnLCBH
UFJSZWcgYXJnMlBheWxvYWQpCisgICAgeworICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgYXJnMlBheWxvYWQsIGFyZzJUYWcpOworICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQs
IHJlc3VsdFRhZyk7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Vl9ERkdPcGVyYXRpb25fRUpQUCBvcGVyYXRpb24sIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJn
MVBheWxvYWQsIEdQUlJlZyBhcmcyLCB2b2lkKiBwb2ludGVyKQorICAgIHsKKyAgICAgICAgc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBhcmcyLCBUcnVz
dGVkSW1tUHRyKHBvaW50ZXIpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uKTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihWX0RGR09wZXJhdGlvbl9FSkNJIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzFUYWcsIEdQ
UlJlZyBhcmcxUGF5bG9hZCwgR1BSUmVnIGFyZzIsIElkZW50aWZpZXIqIGlkZW50aWZpZXIpCisg
ICAgeworICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMVBheWxvYWQsIGFy
ZzFUYWcsIGFyZzIsIFRydXN0ZWRJbW1QdHIoaWRlbnRpZmllcikpOworICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworICAgIH0KKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9uX0VDSkogb3BlcmF0aW9u
LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzJUYWcsIEdQUlJlZyBhcmcyUGF5bG9hZCwgR1BSUmVn
IGFyZzNUYWcsIEdQUlJlZyBhcmczUGF5bG9hZCkKKyAgICB7CisgICAgICAgIHNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyUGF5bG9hZCwgYXJnMlRhZywgYXJnM1BheWxvYWQs
IGFyZzNUYWcpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhv
cGVyYXRpb24pOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZf
REZHT3BlcmF0aW9uX0VQWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQ
UlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1BheWxvYWQpCisgICAgeworICAgICAgICBzZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnM1BheWxvYWQsIGFyZzNUYWcpOwor
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwor
ICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfREZHT3BlcmF0aW9u
X0VBWkogb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczVGFn
LCBHUFJSZWcgYXJnM1BheWxvYWQpCisgICAgeworICAgICAgICBzZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnM1BheWxvYWQsIGFyZzNUYWcpOworICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworICAgIH0KKworICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRF9ERkdPcGVyYXRpb25fRUogb3BlcmF0
aW9uLCBGUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQor
ICAgIHsKKyAgICAgICAgc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzFQYXlsb2FkLCBh
cmcxVGFnKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRS
ZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKworICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oRF9ERkdPcGVyYXRpb25fREQgb3BlcmF0aW9uLCBGUFJSZWcgcmVzdWx0
LCBGUFJSZWcgYXJnMSwgRlBSUmVnIGFyZzIpCisgICAgeworICAgICAgICBzZXR1cEFyZ3VtZW50
cyhhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOworICAgIH0KKyNlbmRpZgorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhZGQg
Y2FsbCBpbnN0cnVjdGlvbnMsIHdpdGggb3B0aW9uYWwgZXhjZXB0aW9uIGNoZWNrcyAmIHNldHRp
bmcgcmVzdWx0cy4KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbikKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2ppdC5hZGRFeGNlcHRpb25DaGVjayhtX2ppdC5hcHBlbmRDYWxsKGZ1bmN0aW9uKSwgYXQo
bV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRy
JiBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCkKKyAgICB7CisgICAgICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKKyAgICAg
ICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKKyAgICAgICAg
cmV0dXJuIGNhbGw7CisgICAgfQorICAgIHZvaWQgc2V0dXBSZXN1bHRzKEdQUlJlZyBkZXN0QSwg
R1BSUmVnIGRlc3RCKQorICAgIHsKKyAgICAgICAgR1BSUmVnIHNyY0EgPSBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUjsKKyAgICAgICAgR1BSUmVnIHNyY0IgPSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UjI7CisKKyAgICAgICAgaWYgKHNyY0IgIT0gZGVzdEEpIHsKKyAgICAgICAgICAgIC8vIEhhbmRs
ZSB0aGUgZWFzeSBjYXNlcyAtIHR3byBzaW1wbGUgbW92ZXMuCisgICAgICAgICAgICBtX2ppdC5t
b3ZlKHNyY0EsIGRlc3RBKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoc3JjQiwgZGVzdEIpOwor
ICAgICAgICB9IGVsc2UgaWYgKHNyY0EgIT0gZGVzdEIpIHsKKyAgICAgICAgICAgIC8vIEhhbmRs
ZSB0aGUgbm9uLXN3YXAgY2FzZSAtIGp1c3QgcHV0IHNyY0IgaW4gcGxhY2UgZmlyc3QuCisgICAg
ICAgICAgICBtX2ppdC5tb3ZlKHNyY0IsIGRlc3RCKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUo
c3JjQSwgZGVzdEEpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1faml0LnN3YXAoZGVz
dEEsIGRlc3RCKTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIEdQUlJl
ZyByZXN1bHQxLCBHUFJSZWcgcmVzdWx0MikKKyAgICB7CisgICAgICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKKyAgICAg
ICAgc2V0dXBSZXN1bHRzKHJlc3VsdDEsIHJlc3VsdDIpOworICAgICAgICByZXR1cm4gY2FsbDsK
KyAgICB9CisjaWYgQ1BVKFg4NikKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgRlBS
UmVnIHJlc3VsdCkKKyAgICB7CisgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBl
bmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKKyAgICAgICAgbV9qaXQuYXNzZW1i
bGVyKCkuZnN0cGwoMCwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAg
ICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJl
c3VsdCk7CisgICAgICAgIHJldHVybiBjYWxsOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2Fs
bCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgRlBSUmVn
IHJlc3VsdCkKKyAgICB7CisgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5h
cHBlbmRDYWxsKGZ1bmN0aW9uKTsKKyAgICAgICAgbV9qaXQuYXNzZW1ibGVyKCkuZnN0cGwoMCwg
SklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQubG9hZERv
dWJsZShKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlc3VsdCk7CisgICAgICAg
IHJldHVybiBjYWxsOworICAgIH0KKyNlbGlmIENQVShBUk0pCisgICAgSklUQ29tcGlsZXI6OkNh
bGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChjb25zdCBGdW5jdGlvblB0
ciYgZnVuY3Rpb24sIEZQUlJlZyByZXN1bHQpCisgICAgeworICAgICAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7CisgICAg
ICAgIG1faml0LmFzc2VtYmxlcigpLnZtb3YocmVzdWx0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
UiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKKyAgICAgICAgcmV0dXJuIGNhbGw7CisgICAg
fQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rp
b25QdHImIGZ1bmN0aW9uLCBGUFJSZWcgcmVzdWx0KQorICAgIHsKKyAgICAgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbCA9IG1faml0LmFwcGVuZENhbGwoZnVuY3Rpb24pOworICAgICAgICBtX2pp
dC5hc3NlbWJsZXIoKS52bW92KHJlc3VsdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSMik7CisgICAgICAgIHJldHVybiBjYWxsOworICAgIH0KKyNlbHNl
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJl
c3VsdChjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIEZQUlJlZyByZXN1bHQpCisgICAgewor
ICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhmdW5jdGlvbik7CisgICAgICAgIG1faml0Lm1vdmVEb3VibGUoRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiBjYWxsOworICAgIH0KKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5j
dGlvbiwgRlBSUmVnIHJlc3VsdCkKKyAgICB7CisgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGwgPSBtX2ppdC5hcHBlbmRDYWxsKGZ1bmN0aW9uKTsKKyAgICAgICAgbV9qaXQubW92ZURvdWJs
ZShGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIGNhbGw7
CisgICAgfQorI2VuZGlmCisKKyAgICB2b2lkIGFkZEJyYW5jaChjb25zdCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCYganVtcCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIG1f
YnJhbmNoZXMuYXBwZW5kKEJyYW5jaFJlY29yZChqdW1wLCBkZXN0aW5hdGlvbikpOworICAgIH0K
KworICAgIHZvaWQgbGlua0JyYW5jaGVzKCkKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9icmFuY2hlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgQnJhbmNoUmVj
b3JkJiBicmFuY2ggPSBtX2JyYW5jaGVzW2ldOworICAgICAgICAgICAgYnJhbmNoLmp1bXAubGlu
a1RvKG1fYmxvY2tIZWFkc1ticmFuY2guZGVzdGluYXRpb25dLCAmbV9qaXQpOworICAgICAgICB9
CisgICAgfQorCisgICAgQmFzaWNCbG9jayogYmxvY2soKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10uZ2V0KCk7CisgICAgfQorCisjaWZuZGVm
IE5ERUJVRworICAgIHZvaWQgZHVtcChjb25zdCBjaGFyKiBsYWJlbCA9IDApOworI2VuZGlmCisK
KyNpZiBERkdfRU5BQkxFKENPTlNJU1RFTkNZX0NIRUNLKQorICAgIHZvaWQgY2hlY2tDb25zaXN0
ZW5jeSgpOworI2Vsc2UKKyAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKSB7IH0KKyNlbmRpZgog
CiAgICAgYm9vbCBpc0ludGVnZXIoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CkBAIC0yOTUs
NiArMjAyMiwyOSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV92YXJpYWJsZXNbb3BlcmFu
ZF07CiAgICAgfQogICAgIAorICAgIC8vIFRoZSBKSVQsIHdoaWxlIGFsc28gcHJvdmlkZXMgTWFj
cm9Bc3NlbWJsZXIgZnVuY3Rpb25hbGl0eS4KKyAgICBKSVRDb21waWxlciYgbV9qaXQ7CisgICAg
Ly8gVGhlIGN1cnJlbnQgbm9kZSBiZWluZyBnZW5lcmF0ZWQuCisgICAgQmxvY2tJbmRleCBtX2Js
b2NrOworICAgIE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsKKyAgICAvLyBWaXJ0dWFsIGFuZCBw
aHlzaWNhbCByZWdpc3RlciBtYXBzLgorICAgIFZlY3RvcjxHZW5lcmF0aW9uSW5mbywgMzI+IG1f
Z2VuZXJhdGlvbkluZm87CisgICAgUmVnaXN0ZXJCYW5rPEdQUkluZm8+IG1fZ3ByczsKKyAgICBS
ZWdpc3RlckJhbms8RlBSSW5mbz4gbV9mcHJzOworCisgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVy
OjpMYWJlbD4gbV9ibG9ja0hlYWRzOworICAgIHN0cnVjdCBCcmFuY2hSZWNvcmQgeworICAgICAg
ICBCcmFuY2hSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcCwgQmxvY2tJbmRleCBkZXN0
aW5hdGlvbikKKyAgICAgICAgICAgIDoganVtcChqdW1wKQorICAgICAgICAgICAgLCBkZXN0aW5h
dGlvbihkZXN0aW5hdGlvbikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAganVtcDsKKyAgICAgICAgQmxvY2tJbmRleCBkZXN0aW5hdGlvbjsKKyAg
ICB9OworICAgIFZlY3RvcjxCcmFuY2hSZWNvcmQsIDg+IG1fYnJhbmNoZXM7CisKICAgICBWZWN0
b3I8VmFsdWVTb3VyY2UsIDA+IG1fYXJndW1lbnRzOwogICAgIFZlY3RvcjxWYWx1ZVNvdXJjZSwg
MD4gbV92YXJpYWJsZXM7CiAgICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7CkBAIC0zMTEsMTUgKzIw
NjEsMzk1IEBAIHByaXZhdGU6CiB9OwogCiAKKy8vID09PSBPcGVyYW5kIHR5cGVzID09PQorLy8K
Ky8vIEludGVnZXJPcGVyYW5kLCBEb3VibGVPcGVyYW5kIGFuZCBKU1ZhbHVlT3BlcmFuZC4KKy8v
CisvLyBUaGVzZSBjbGFzc2VzIGFyZSB1c2VkIHRvIGxvY2sgdGhlIG9wZXJhbmRzIHRvIGEgbm9k
ZSBpbnRvIG1hY2hpbmUKKy8vIHJlZ2lzdGVycy4gVGhlc2UgY2xhc3NlcyBpbXBsZW1lbnQgb2Yg
cGF0dGVybiBvZiBsb2NraW5nIGEgdmFsdWUKKy8vIGludG8gcmVnaXN0ZXIgYXQgdGhlIHBvaW50
IG9mIGNvbnN0cnVjdGlvbiBvbmx5IGlmIGl0IGlzIGFscmVhZHkgaW4KKy8vIHJlZ2lzdGVycywg
YW5kIG90aGVyd2lzZSBsb2FkaW5nIGl0IGxhemlseSBhdCB0aGUgcG9pbnQgaXQgaXMgZmlyc3QK
Ky8vIHVzZWQuIFdlIGRvIHNvIGluIG9yZGVyIHRvIGF0dGVtcHQgdG8gYXZvaWQgc3BpbGxpbmcg
b25lIG9wZXJhbmQKKy8vIGluIG9yZGVyIHRvIG1ha2Ugc3BhY2UgYXZhaWxhYmxlIGZvciBhbm90
aGVyLgorCitjbGFzcyBJbnRlZ2VyT3BlcmFuZCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSW50
ZWdlck9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgTm9kZUluZGV4IGluZGV4KQorICAgICAg
ICA6IG1faml0KGppdCkKKyAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fZ3By
T3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCisjaWZuZGVmIE5ERUJVRworICAgICAgICAsIG1fZm9y
bWF0KERhdGFGb3JtYXROb25lKQorI2VuZGlmCisgICAgeworICAgICAgICBBU1NFUlQobV9qaXQp
OworICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChpbmRleCkpCisgICAgICAgICAgICBncHIoKTsK
KyAgICB9CisKKyAgICB+SW50ZWdlck9wZXJhbmQoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
Z3ByT3JJbnZhbGlkICE9IEludmFsaWRHUFJSZWcpOworICAgICAgICBtX2ppdC0+dW5sb2NrKG1f
Z3ByT3JJbnZhbGlkKTsKKyAgICB9CisKKyAgICBOb2RlSW5kZXggaW5kZXgoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1faW5kZXg7CisgICAgfQorCisgICAgRGF0YUZvcm1hdCBmb3Jt
YXQoKQorICAgIHsKKyAgICAgICAgZ3ByKCk7IC8vIG1fZm9ybWF0IGlzIHNldCB3aGVuIG1fZ3By
IGlzIGxvY2tlZC4KKyAgICAgICAgQVNTRVJUKG1fZm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2Vy
IHx8IG1fZm9ybWF0ID09IERhdGFGb3JtYXRKU0ludGVnZXIpOworICAgICAgICByZXR1cm4gbV9m
b3JtYXQ7CisgICAgfQorCisgICAgR1BSUmVnIGdwcigpCisgICAgeworICAgICAgICBpZiAobV9n
cHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlk
ID0gbV9qaXQtPmZpbGxJbnRlZ2VyKGluZGV4KCksIG1fZm9ybWF0KTsKKyAgICAgICAgcmV0dXJu
IG1fZ3ByT3JJbnZhbGlkOworICAgIH0KKyAgICAKKyAgICB2b2lkIHVzZSgpCisgICAgeworICAg
ICAgICBtX2ppdC0+dXNlKG1faW5kZXgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBTcGVjdWxh
dGl2ZUpJVCogbV9qaXQ7CisgICAgTm9kZUluZGV4IG1faW5kZXg7CisgICAgR1BSUmVnIG1fZ3By
T3JJbnZhbGlkOworICAgIERhdGFGb3JtYXQgbV9mb3JtYXQ7Cit9OworCitjbGFzcyBEb3VibGVP
cGVyYW5kIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBEb3VibGVPcGVyYW5kKFNwZWN1bGF0aXZl
SklUKiBqaXQsIE5vZGVJbmRleCBpbmRleCkKKyAgICAgICAgOiBtX2ppdChqaXQpCisgICAgICAg
ICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX2Zwck9ySW52YWxpZChJbnZhbGlkRlBSUmVn
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1faml0KTsKKyAgICAgICAgaWYgKGppdC0+aXNGaWxs
ZWREb3VibGUoaW5kZXgpKQorICAgICAgICAgICAgZnByKCk7CisgICAgfQorCisgICAgfkRvdWJs
ZU9wZXJhbmQoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZnByT3JJbnZhbGlkICE9IEludmFs
aWRGUFJSZWcpOworICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZnByT3JJbnZhbGlkKTsKKyAgICB9
CisKKyAgICBOb2RlSW5kZXggaW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
aW5kZXg7CisgICAgfQorCisgICAgRlBSUmVnIGZwcigpCisgICAgeworICAgICAgICBpZiAobV9m
cHJPckludmFsaWQgPT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgICAgIG1fZnByT3JJbnZhbGlk
ID0gbV9qaXQtPmZpbGxEb3VibGUoaW5kZXgoKSk7CisgICAgICAgIHJldHVybiBtX2Zwck9ySW52
YWxpZDsKKyAgICB9CisgICAgCisgICAgdm9pZCB1c2UoKQorICAgIHsKKyAgICAgICAgbV9qaXQt
PnVzZShtX2luZGV4KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgU3BlY3VsYXRpdmVKSVQqIG1f
aml0OworICAgIE5vZGVJbmRleCBtX2luZGV4OworICAgIEZQUlJlZyBtX2Zwck9ySW52YWxpZDsK
K307CisKK2NsYXNzIEpTVmFsdWVPcGVyYW5kIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBKU1Zh
bHVlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCogaml0LCBOb2RlSW5kZXggaW5kZXgpCisgICAgICAg
IDogbV9qaXQoaml0KQorICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQorI2VsaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICAgICAgLCBtX2lzRG91YmxlKGZhbHNlKQorI2VuZGlmCisgICAgewor
ICAgICAgICBBU1NFUlQobV9qaXQpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGlmIChq
aXQtPmlzRmlsbGVkKGluZGV4KSkKKyAgICAgICAgICAgIGdwcigpOworI2VsaWYgVVNFKEpTVkFM
VUUzMl82NCkKKyAgICAgICAgbV9yZWdpc3Rlci5wYWlyLnRhZ0dQUiA9IEludmFsaWRHUFJSZWc7
CisgICAgICAgIG1fcmVnaXN0ZXIucGFpci5wYXlsb2FkR1BSID0gSW52YWxpZEdQUlJlZzsKKyAg
ICAgICAgaWYgKGppdC0+aXNGaWxsZWQoaW5kZXgpKQorICAgICAgICAgICAgZmlsbCgpOworI2Vu
ZGlmCisgICAgfQorCisgICAgfkpTVmFsdWVPcGVyYW5kKCkKKyAgICB7CisjaWYgVVNFKEpTVkFM
VUU2NCkKKyAgICAgICAgQVNTRVJUKG1fZ3ByT3JJbnZhbGlkICE9IEludmFsaWRHUFJSZWcpOwor
ICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKKyNlbGlmIFVTRShKU1ZBTFVF
MzJfNjQpCisgICAgICAgIGlmIChtX2lzRG91YmxlKSB7CisgICAgICAgICAgICBBU1NFUlQobV9y
ZWdpc3Rlci5mcHIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICBtX2ppdC0+dW5sb2Nr
KG1fcmVnaXN0ZXIuZnByKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVCht
X3JlZ2lzdGVyLnBhaXIudGFnR1BSICE9IEludmFsaWRHUFJSZWcgJiYgbV9yZWdpc3Rlci5wYWly
LnBheWxvYWRHUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICBtX2ppdC0+dW5sb2Nr
KG1fcmVnaXN0ZXIucGFpci50YWdHUFIpOworICAgICAgICAgICAgbV9qaXQtPnVubG9jayhtX3Jl
Z2lzdGVyLnBhaXIucGF5bG9hZEdQUik7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAg
IE5vZGVJbmRleCBpbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbmRleDsK
KyAgICB9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEdQUlJlZyBncHIoKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkID09IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBt
X2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsSlNWYWx1ZShpbmRleCgpKTsKKyAgICAgICAgcmV0
dXJuIG1fZ3ByT3JJbnZhbGlkOworICAgIH0KKyAgICBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncygp
CisgICAgeworICAgICAgICByZXR1cm4gSlNWYWx1ZVJlZ3MoZ3ByKCkpOworICAgIH0KKyNlbGlm
IFVTRShKU1ZBTFVFMzJfNjQpCisgICAgYm9vbCBpc0RvdWJsZSgpIHsgcmV0dXJuIG1faXNEb3Vi
bGU7IH0KKworICAgIHZvaWQgZmlsbCgpCisgICAgeworICAgICAgICBpZiAobV9yZWdpc3Rlci5w
YWlyLnRhZ0dQUiA9PSBJbnZhbGlkR1BSUmVnICYmIG1fcmVnaXN0ZXIucGFpci5wYXlsb2FkR1BS
ID09IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBtX2lzRG91YmxlID0gIW1faml0LT5maWxs
SlNWYWx1ZShpbmRleCgpLCBtX3JlZ2lzdGVyLnBhaXIudGFnR1BSLCBtX3JlZ2lzdGVyLnBhaXIu
cGF5bG9hZEdQUiwgbV9yZWdpc3Rlci5mcHIpOworICAgIH0KKworICAgIEdQUlJlZyB0YWdHUFIo
KQorICAgIHsKKyAgICAgICAgZmlsbCgpOworICAgICAgICBBU1NFUlQoIW1faXNEb3VibGUpOwor
ICAgICAgICByZXR1cm4gbV9yZWdpc3Rlci5wYWlyLnRhZ0dQUjsKKyAgICB9CisKKyAgICBHUFJS
ZWcgcGF5bG9hZEdQUigpCisgICAgeworICAgICAgICBmaWxsKCk7CisgICAgICAgIEFTU0VSVCgh
bV9pc0RvdWJsZSk7CisgICAgICAgIHJldHVybiBtX3JlZ2lzdGVyLnBhaXIucGF5bG9hZEdQUjsK
KyAgICB9CisKKyAgICBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncygpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNWYWx1ZVJlZ3ModGFnR1BSKCksIHBheWxvYWRHUFIoKSk7CisgICAgfQorCisgICAg
RlBSUmVnIGZwcigpCisgICAgeworICAgICAgICBmaWxsKCk7CisgICAgICAgIEFTU0VSVChtX2lz
RG91YmxlKTsKKyAgICAgICAgcmV0dXJuIG1fcmVnaXN0ZXIuZnByOworICAgIH0KKyNlbmRpZgor
CisgICAgdm9pZCB1c2UoKQorICAgIHsKKyAgICAgICAgbV9qaXQtPnVzZShtX2luZGV4KTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgU3BlY3VsYXRpdmVKSVQqIG1faml0OworICAgIE5vZGVJbmRl
eCBtX2luZGV4OworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlk
OworI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB7
CisgICAgICAgICAgICBHUFJSZWcgdGFnR1BSOworICAgICAgICAgICAgR1BSUmVnIHBheWxvYWRH
UFI7CisgICAgICAgIH0gcGFpcjsKKyAgICAgICAgRlBSUmVnIGZwcjsKKyAgICB9IG1fcmVnaXN0
ZXI7CisgICAgYm9vbCBtX2lzRG91YmxlOworI2VuZGlmCit9OworCitjbGFzcyBTdG9yYWdlT3Bl
cmFuZCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU3RvcmFnZU9wZXJhbmQoU3BlY3VsYXRpdmVK
SVQqIGppdCwgTm9kZUluZGV4IGluZGV4KQorICAgICAgICA6IG1faml0KGppdCkKKyAgICAgICAg
LCBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcp
CisgICAgeworICAgICAgICBBU1NFUlQobV9qaXQpOworICAgICAgICBpZiAoaml0LT5pc0ZpbGxl
ZChpbmRleCkpCisgICAgICAgICAgICBncHIoKTsKKyAgICB9CisgICAgCisgICAgflN0b3JhZ2VP
cGVyYW5kKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dwck9ySW52YWxpZCAhPSBJbnZhbGlk
R1BSUmVnKTsKKyAgICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CisgICAgfQor
ICAgIAorICAgIE5vZGVJbmRleCBpbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9pbmRleDsKKyAgICB9CisgICAgCisgICAgR1BSUmVnIGdwcigpCisgICAgeworICAgICAgICBp
ZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG1fZ3ByT3JJ
bnZhbGlkID0gbV9qaXQtPmZpbGxTdG9yYWdlKGluZGV4KCkpOworICAgICAgICByZXR1cm4gbV9n
cHJPckludmFsaWQ7CisgICAgfQorICAgIAorICAgIHZvaWQgdXNlKCkKKyAgICB7CisgICAgICAg
IG1faml0LT51c2UobV9pbmRleCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBTcGVjdWxh
dGl2ZUpJVCogbV9qaXQ7CisgICAgTm9kZUluZGV4IG1faW5kZXg7CisgICAgR1BSUmVnIG1fZ3By
T3JJbnZhbGlkOworfTsKKworCisvLyA9PT0gVGVtcG9yYXJpZXMgPT09CisvLworLy8gVGhlc2Ug
Y2xhc3NlcyBhcmUgdXNlZCB0byBhbGxvY2F0ZSB0ZW1wb3JhcnkgcmVnaXN0ZXJzLgorLy8gQSBt
ZWNoYW5pc20gaXMgcHJvdmlkZWQgdG8gYXR0ZW1wdCB0byByZXVzZSB0aGUgcmVnaXN0ZXJzCisv
LyBjdXJyZW50bHkgYWxsb2NhdGVkIHRvIGNoaWxkIG5vZGVzIHdob3NlIHZhbHVlIGlzIGNvbnN1
bWVkCisvLyBieSwgYW5kIG5vdCBsaXZlIGFmdGVyLCB0aGlzIG9wZXJhdGlvbi4KKworY2xhc3Mg
R1BSVGVtcG9yYXJ5IHsKK3B1YmxpYzoKKyAgICBHUFJUZW1wb3JhcnkoKTsKKyAgICBHUFJUZW1w
b3JhcnkoU3BlY3VsYXRpdmVKSVQqKTsKKyAgICBHUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQq
LCBHUFJSZWcgc3BlY2lmaWMpOworICAgIEdQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kJik7CisgICAgR1BSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklU
KiwgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQmLCBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCYpOwor
ICAgIEdQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIFNwZWN1bGF0ZVN0cmljdEludDMyT3Bl
cmFuZCYpOworICAgIEdQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIEludGVnZXJPcGVyYW5k
Jik7CisgICAgR1BSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgSW50ZWdlck9wZXJhbmQmLCBJ
bnRlZ2VyT3BlcmFuZCYpOworICAgIEdQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kJik7CisgICAgR1BSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgU3Bl
Y3VsYXRlQm9vbGVhbk9wZXJhbmQmKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEdQUlRlbXBv
cmFyeShTcGVjdWxhdGl2ZUpJVCosIEpTVmFsdWVPcGVyYW5kJik7CisjZWxpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgIEdQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIEpTVmFsdWVPcGVyYW5k
JiwgYm9vbCB0YWcgPSB0cnVlKTsKKyNlbmRpZgorICAgIEdQUlRlbXBvcmFyeShTcGVjdWxhdGl2
ZUpJVCosIFN0b3JhZ2VPcGVyYW5kJik7CisKKyAgICB2b2lkIGFkb3B0KEdQUlRlbXBvcmFyeSYp
OworCisgICAgfkdQUlRlbXBvcmFyeSgpCisgICAgeworICAgICAgICBpZiAobV9qaXQgJiYgbV9n
cHIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG1faml0LT51bmxvY2soZ3ByKCkpOwor
ICAgIH0KKworICAgIEdQUlJlZyBncHIoKQorICAgIHsKKyAgICAgICAgLy8gSW4gc29tZSBjYXNl
cyB3ZSBoYXZlIGxhenkgYWxsb2NhdGlvbi4KKyAgICAgICAgaWYgKG1faml0ICYmIG1fZ3ByID09
IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBtX2dwciA9IG1faml0LT5hbGxvY2F0ZSgpOwor
ICAgICAgICByZXR1cm4gbV9ncHI7CisgICAgfQorCitwcml2YXRlOgorICAgIFNwZWN1bGF0aXZl
SklUKiBtX2ppdDsKKyAgICBHUFJSZWcgbV9ncHI7Cit9OworCitjbGFzcyBGUFJUZW1wb3Jhcnkg
eworcHVibGljOgorICAgIEZQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCopOworICAgIEZQUlRl
bXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIERvdWJsZU9wZXJhbmQmKTsKKyAgICBGUFJUZW1wb3Jh
cnkoU3BlY3VsYXRpdmVKSVQqLCBEb3VibGVPcGVyYW5kJiwgRG91YmxlT3BlcmFuZCYpOworICAg
IEZQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQmKTsK
KyAgICBGUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBTcGVjdWxhdGVEb3VibGVPcGVyYW5k
JiwgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCYpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAg
RlBSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgSlNWYWx1ZU9wZXJhbmQmKTsKKyNlbmRpZgor
CisgICAgfkZQUlRlbXBvcmFyeSgpCisgICAgeworICAgICAgICBtX2ppdC0+dW5sb2NrKGZwcigp
KTsKKyAgICB9CisKKyAgICBGUFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX2ZwciAhPSBJbnZhbGlkRlBSUmVnKTsKKyAgICAgICAgcmV0dXJuIG1fZnByOworICAgIH0K
KworcHJvdGVjdGVkOgorICAgIEZQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBGUFJS
ZWcgbG9ja2VkRlBSKQorICAgICAgICA6IG1faml0KGppdCkKKyAgICAgICAgLCBtX2Zwcihsb2Nr
ZWRGUFIpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBTcGVjdWxhdGl2ZUpJVCogbV9q
aXQ7CisgICAgRlBSUmVnIG1fZnByOworfTsKKworCisvLyA9PT0gUmVzdWx0cyA9PT0KKy8vCisv
LyBUaGVzZSBjbGFzc2VzIGxvY2sgdGhlIHJlc3VsdCBvZiBhIGNhbGwgdG8gYSBDKysgaGVscGVy
IGZ1bmN0aW9uLgorCitjbGFzcyBHUFJSZXN1bHQgOiBwdWJsaWMgR1BSVGVtcG9yYXJ5IHsKK3B1
YmxpYzoKKyAgICBHUFJSZXN1bHQoU3BlY3VsYXRpdmVKSVQqIGppdCkKKyAgICAgICAgOiBHUFJU
ZW1wb3Jhcnkoaml0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikKKyAgICB7CisgICAgfQorfTsK
KworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCitjbGFzcyBHUFJSZXN1bHQyIDogcHVibGljIEdQUlRl
bXBvcmFyeSB7CitwdWJsaWM6CisgICAgR1BSUmVzdWx0MihTcGVjdWxhdGl2ZUpJVCogaml0KQor
ICAgICAgICA6IEdQUlRlbXBvcmFyeShqaXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSMikKKyAg
ICB7CisgICAgfQorfTsKKyNlbmRpZgorCitjbGFzcyBGUFJSZXN1bHQgOiBwdWJsaWMgRlBSVGVt
cG9yYXJ5IHsKK3B1YmxpYzoKKyAgICBGUFJSZXN1bHQoU3BlY3VsYXRpdmVKSVQqIGppdCkKKyAg
ICAgICAgOiBGUFJUZW1wb3Jhcnkoaml0LCBsb2NrZWRSZXN1bHQoaml0KSkKKyAgICB7CisgICAg
fQorCitwcml2YXRlOgorICAgIHN0YXRpYyBGUFJSZWcgbG9ja2VkUmVzdWx0KFNwZWN1bGF0aXZl
SklUKiBqaXQpCisgICAgeworICAgICAgICBqaXQtPmxvY2soRlBSSW5mbzo6cmV0dXJuVmFsdWVG
UFIpOworICAgICAgICByZXR1cm4gRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFI7CisgICAgfQorfTsK
KworCiAvLyA9PT0gU3BlY3VsYXRpdmUgT3BlcmFuZCB0eXBlcyA9PT0KIC8vCiAvLyBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCwgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGFuZCBTcGVjdWxh
dGVDZWxsT3BlcmFuZC4KIC8vCiAvLyBUaGVzZSBhcmUgdXNlZCB0byBsb2NrIHRoZSBvcGVyYW5k
cyB0byBhIG5vZGUgaW50byBtYWNoaW5lIHJlZ2lzdGVycyB3aXRoaW4gdGhlCi0vLyBTcGVjdWxh
dGl2ZUpJVC4gVGhlIGNsYXNzZXMgb3BlcmF0ZSBsaWtlIHRob3NlIHByb3ZpZGVkIGJ5IHRoZSBK
SVRDb2RlR2VuZXJhdG9yLAotLy8gaG93ZXZlciB0aGVzZSB3aWxsIHBlcmZvcm0gYSBzcGVjdWxh
dGl2ZSBjaGVjayBmb3IgYSBtb3JlIHJlc3RyaWN0aXZlIHR5cGUgdGhhbgotLy8gd2UgY2FuIHN0
YXRpY2FsbHkgZGV0ZXJtaW5lIHRoZSBvcGVyYW5kIHRvIGhhdmUuIElmIHRoZSBvcGVyYW5kIGRv
ZXMgbm90IGhhdmUKLS8vIHRoZSByZXF1ZXN0ZWQgdHlwZSwgYSBiYWlsLW91dCB0byB0aGUgbm9u
LXNwZWN1bGF0aXZlIHBhdGggd2lsbCBiZSB0YWtlbi4KKy8vIFNwZWN1bGF0aXZlSklULiBUaGUg
Y2xhc3NlcyBvcGVyYXRlIGxpa2UgdGhvc2UgYWJvdmUsIGhvd2V2ZXIgdGhlc2Ugd2lsbAorLy8g
cGVyZm9ybSBhIHNwZWN1bGF0aXZlIGNoZWNrIGZvciBhIG1vcmUgcmVzdHJpY3RpdmUgdHlwZSB0
aGFuIHdlIGNhbiBzdGF0aWNhbGx5CisvLyBkZXRlcm1pbmUgdGhlIG9wZXJhbmQgdG8gaGF2ZS4g
SWYgdGhlIG9wZXJhbmQgZG9lcyBub3QgaGF2ZSB0aGUgcmVxdWVzdGVkIHR5cGUsCisvLyBhIGJh
aWwtb3V0IHRvIHRoZSBub24tc3BlY3VsYXRpdmUgcGF0aCB3aWxsIGJlIHRha2VuLgogCiBjbGFz
cyBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB7CiBwdWJsaWM6CkBAIC01MjgsOCArMjY1OCwxMSBA
QCBwcml2YXRlOgogfTsKIAogaW5saW5lIFNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJVChK
SVRDb21waWxlciYgaml0KQotICAgIDogSklUQ29kZUdlbmVyYXRvcihqaXQpCi0gICAgLCBtX2Nv
bXBpbGVPa2F5KHRydWUpCisgICAgOiBtX2NvbXBpbGVPa2F5KHRydWUpCisgICAgLCBtX2ppdChq
aXQpCisgICAgLCBtX2NvbXBpbGVJbmRleCgwKQorICAgICwgbV9nZW5lcmF0aW9uSW5mbyhtX2pp
dC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMpCisgICAgLCBtX2Jsb2NrSGVhZHMo
aml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpKQogICAgICwgbV9hcmd1bWVudHMoaml0LmNvZGVC
bG9jaygpLT5tX251bVBhcmFtZXRlcnMpCiAgICAgLCBtX3ZhcmlhYmxlcyhqaXQuZ3JhcGgoKS5t
X2xvY2FsVmFycykKICAgICAsIG1fbGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0
aW9uLmgJKHJldmlzaW9uIDEwMDIzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICBjbGFzcyBTb3VyY2VDb2RlOwogICAgIGNsYXNzIFZQdHJIYWNrRXhlY3V0YWJs
ZTsKICAgICBuYW1lc3BhY2UgREZHIHsKLSAgICBjbGFzcyBKSVRDb2RlR2VuZXJhdG9yOworICAg
IGNsYXNzIFNwZWN1bGF0aXZlSklUOwogICAgIGNsYXNzIEpJVENvbXBpbGVyOwogICAgIH0KIApA
QCAtNDcsNyArNDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEpTRnVuY3Rpb24g
OiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7Ci0g
ICAgICAgIGZyaWVuZCBjbGFzcyBERkc6OkpJVENvZGVHZW5lcmF0b3I7CisgICAgICAgIGZyaWVu
ZCBjbGFzcyBERkc6OlNwZWN1bGF0aXZlSklUOwogICAgICAgICBmcmllbmQgY2xhc3MgREZHOjpK
SVRDb21waWxlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpTR2xvYmFsRGF0YTsKIAo=
</data>
<flag name="review"
          id="113915"
          type_id="1"
          status="+"
          setter="barraclough"
    />
    <flag name="commit-queue"
          id="113926"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
      

    </bug>

</bugzilla>