<?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>23715</bug_id>
          
          <creation_ts>2009-02-03 14:39:54 -0800</creation_ts>
          <short_desc>Simplify MacroAssember interface.</short_desc>
          <delta_ts>2009-02-03 18:02:44 -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>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>108172</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-02-03 14:39:54 -0800</bug_when>
    <thetext>One big candidate are all the branch &amp; other conditional operations.  By parameterizing these methods on the comparison operation, we can significantly reduce replication of code, and simplify the code generation interface.

Another trivial fix is to stop the Scale of BaseIndex addresses as being passed as multiplicands (1,2,4,8), and instead use a plain enum (0,1,2,3).  This is likely more useful encoding, and can be more trivial converted to a multiplicand where necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108173</commentid>
    <comment_count>1</comment_count>
      <attachid>27293</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-02-03 14:49:41 -0800</bug_when>
    <thetext>Created attachment 27293
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108186</commentid>
    <comment_count>2</comment_count>
      <attachid>27293</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-02-03 15:20:41 -0800</bug_when>
    <thetext>Comment on attachment 27293
The patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108187</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2009-02-03 15:21:15 -0800</bug_when>
    <thetext>Our style guidelines say that &quot;jcc&quot; should be &quot;jCC&quot; and &quot;setcc&quot; should be &quot;setCC&quot;.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108228</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-02-03 18:02:44 -0800</bug_when>
    <thetext>Sending        JavaScriptCore/ChangeLog
Sending        JavaScriptCore/assembler/MacroAssembler.h
Sending        JavaScriptCore/assembler/X86Assembler.h
Sending        JavaScriptCore/jit/JIT.cpp
Sending        JavaScriptCore/jit/JITArithmetic.cpp
Sending        JavaScriptCore/jit/JITCall.cpp
Sending        JavaScriptCore/jit/JITInlineMethods.h
Sending        JavaScriptCore/jit/JITPropertyAccess.cpp
Sending        JavaScriptCore/runtime/RegExp.cpp
Sending        JavaScriptCore/wrec/WRECGenerator.cpp
Transmitting file data ..........
Committed revision 40562.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27293</attachid>
            <date>2009-02-03 14:49:41 -0800</date>
            <delta_ts>2009-02-03 15:20:41 -0800</delta_ts>
            <desc>The patch</desc>
            <filename>patch.macroup1.txt</filename>
            <type>text/plain</type>
            <size>110733</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQwNTQ3
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTE3IEBACisyMDA5LTAy
LTAzICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MTUKKworICAgICAgICBTaW1wbGlmeSBNYWNyb0Fz
c2VtYmxlciBpbnRlcmZhY2UsIGJ5IGNvbWJpbmluZyBjb21wYXJpc29uIG1ldGhvZHMuCisgICAg
ICAgIFNlcHJhdGUgb3BlcmF0aW9ucyBhcmUgY29tYmluZWQgYXMgZm9sbG93czoKKyAgICAgICAg
ICAgIGp6MzIvam56MzIvanpQdHIvam56UHRyIC0+IGJyYW5jaFRlc3QzMi9icmFuY2hUZXN0UHRy
LAorICAgICAgICAgICAgaiooQWRkfE11bHxTdWIpMzIvaiooQWRkfE11bHxTdWIpUHRyIC0+IGJy
YW5jaChBZGR8TXVsfFN1YikzMi9icmFuY2goQWRkfE11bHxTdWIpUHRyCisgICAgICAgICAgICBq
KjMyL2oqUHRyIChhbGwgb3RoZXIgdHdvIG9wIGNvbWJwYXJpc29ucykgLT4gYnJhbmNoMzIvYnJu
YWNoUHRyCisgICAgICAgICAgICBzZXQqMzIgLT4gc2V0MzIKKworICAgICAgICBBbHNvLCByZXBy
ZXNlbnQgdGhlIFNjYWxlIG9mIEJhc2VJbmRleCBhZGRyZXNzZXMgYXMgYSBwbGFpbiBlbnVtICgw
LDEsMiwzKSwKKyAgICAgICAgaW5zdGVhZCBvZiBhcyBtdWx0aXBsaWNhbmRzICgxLDIsNCw4KS4K
KworICAgICAgICBUaGlzIHBhdGNoIHNpbmdpZmljYW50bHkgcmVkdWNlcyByZXBsaWNhdGlvbiBv
ZiBjb2RlLCBhbmQgaW5jcmVhc2VzIGZ1bmN0aW9uYWxpdHkgc3VwcG9ydGVkCisgICAgICAgIGJ5
IHRoZSBNYWNyb0Fzc2VtYmxlci4gIE5vIHBlcmZvcm1hbmNlIGltcGFjdC4KKworICAgICAgICAq
IGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
cjo6KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFB0cik6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpicmFuY2hQdHJXaXRoUGF0Y2gpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
cjo6YnJhbmNoMTYpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdFB0
cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0MzIpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoQWRkUHRyKToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXI6OmJyYW5jaEFkZDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6
OmJyYW5jaE11bDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFN1YlB0
cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpicmFuY2hTdWIzMik6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpzZXQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyOjpzZXRUZXN0MzIpOgorICAgICAgICAqIGFzc2VtYmxlci9YODZBc3NlbWJsZXIuaDoKKyAg
ICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjopOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6
OmpjY1JlbDMyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpzZXRjY09wY29kZSk6Cisg
ICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6Y21wcV9tcik6CisgICAgICAgIChKU0M6Olg4NkFz
c2VtYmxlcjo6c2V0Y2Nfcik6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6c2V0ZV9yKToK
KyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpzZXRuZV9yKToKKyAgICAgICAgKEpTQzo6WDg2
QXNzZW1ibGVyOjpqbmUpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmplKToKKyAgICAg
ICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpqbCk6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6
amIpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmpsZSk6CisgICAgICAgIChKU0M6Olg4
NkFzc2VtYmxlcjo6amJlKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpqZ2UpOgorICAg
ICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmpnKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVy
OjpqYSk6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6amFlKToKKyAgICAgICAgKEpTQzo6
WDg2QXNzZW1ibGVyOjpqbyk6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6anApOgorICAg
ICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmpzKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVy
OjpqY2MpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6Olg4Nkluc3RydWN0aW9uRm9ybWF0
dGVyOjpwdXRNb2RSbVNpYik6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93U2Ny
aXB0Q2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgor
ICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKEpT
Qzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVDVElNYWNoaW5lVHJhbXBvbGluZXMpOgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGljLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlRmFzdEFyaXRoX29wX2xzaGlmdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZUZhc3RBcml0aF9vcF9tb2QpOgorICAgICAgICAoSlNDOjpK
SVQ6OmNvbXBpbGVGYXN0QXJpdGhfb3BfcG9zdF9pbmMpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVGYXN0QXJpdGhfb3BfcG9zdF9kZWMpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVG
YXN0QXJpdGhfb3BfcHJlX2luYyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUZhc3RBcml0
aF9vcF9wcmVfZGVjKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQmluYXJ5QXJpdGhPcCk6
CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUZhc3RBcml0aF9vcF9hZGQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmNvbXBpbGVGYXN0QXJpdGhfb3BfbXVsKToKKyAgICAgICAgKiBqaXQvSklUQ2Fs
bC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lTWV0
aG9kcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmNoZWNrU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0SnVtcElmSlNDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SnVtcElm
Tm90SlNDZWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SnVtcElmSW1tZWRpYXRlTnVtYmVy
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SnVtcElmTm90SW1tZWRpYXRlTnVtYmVyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0SnVtcElmSW1tZWRpYXRlSW50ZWdlcik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZUludGVnZXIpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZUp1bXBJZlplcm8pOgorICAgICAgICAqIGpp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUdldEJ5
SWRIb3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlUHV0QnlJZEhvdFBhdGgpOgor
ICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24pOgorICAg
ICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8pOgorICAgICAgICAoSlND
OjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICogcnVudGltZS9SZWdFeHAuY3Bw
OgorICAgICAgICAoSlNDOjpSZWdFeHA6Om1hdGNoKToKKyAgICAgICAgKiB3cmVjL1dSRUNHZW5l
cmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXUkVDOjpHZW5lcmF0b3I6OmdlbmVyYXRlRW50ZXIp
OgorICAgICAgICAoSlNDOjpXUkVDOjpHZW5lcmF0b3I6OmdlbmVyYXRlSW5jcmVtZW50SW5kZXgp
OgorICAgICAgICAoSlNDOjpXUkVDOjpHZW5lcmF0b3I6OmdlbmVyYXRlTG9hZENoYXJhY3Rlcik6
CisgICAgICAgIChKU0M6OldSRUM6OkdlbmVyYXRvcjo6Z2VuZXJhdGVKdW1wSWZOb3RFbmRPZklu
cHV0KToKKyAgICAgICAgKEpTQzo6V1JFQzo6R2VuZXJhdG9yOjpnZW5lcmF0ZUJhY2tyZWZlcmVu
Y2VRdWFudGlmaWVyKToKKyAgICAgICAgKEpTQzo6V1JFQzo6R2VuZXJhdG9yOjpnZW5lcmF0ZU5v
bkdyZWVkeVF1YW50aWZpZXIpOgorICAgICAgICAoSlNDOjpXUkVDOjpHZW5lcmF0b3I6OmdlbmVy
YXRlR3JlZWR5UXVhbnRpZmllcik6CisgICAgICAgIChKU0M6OldSRUM6OkdlbmVyYXRvcjo6Z2Vu
ZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyUGFpcik6CisgICAgICAgIChKU0M6OldSRUM6OkdlbmVyYXRv
cjo6Z2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyKToKKyAgICAgICAgKEpTQzo6V1JFQzo6R2VuZXJh
dG9yOjpnZW5lcmF0ZUNoYXJhY3RlckNsYXNzSW52ZXJ0ZWRSYW5nZSk6CisgICAgICAgIChKU0M6
OldSRUM6OkdlbmVyYXRvcjo6Z2VuZXJhdGVDaGFyYWN0ZXJDbGFzc0ludmVydGVkKToKKyAgICAg
ICAgKEpTQzo6V1JFQzo6R2VuZXJhdG9yOjpnZW5lcmF0ZUFzc2VydGlvbkJPTCk6CisgICAgICAg
IChKU0M6OldSRUM6OkdlbmVyYXRvcjo6Z2VuZXJhdGVBc3NlcnRpb25FT0wpOgorICAgICAgICAo
SlNDOjpXUkVDOjpHZW5lcmF0b3I6OmdlbmVyYXRlQXNzZXJ0aW9uV29yZEJvdW5kYXJ5KToKKyAg
ICAgICAgKEpTQzo6V1JFQzo6R2VuZXJhdG9yOjpnZW5lcmF0ZUJhY2tyZWZlcmVuY2UpOgorCiAy
MDA5LTAyLTAzICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBUb3IgQXJuZSBWZXN0YsO4LgpJbmRleDogYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJ
KHJldmlzaW9uIDQwNTIxKQorKysgYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDEwICs0NywxMCBAQCBwdWJsaWM6CiAKICAgICAvLyBOb3RlOiBkbyBub3Qg
cmVseSBvbiB2YWx1ZXMgaW4gdGhpcyBlbnVtLCB0aGVzZSB3aWxsIGNoYW5nZSAodG8gMC4uMyku
CiAgICAgZW51bSBTY2FsZSB7Ci0gICAgICAgIFRpbWVzT25lID0gMSwKLSAgICAgICAgVGltZXNU
d28gPSAyLAotICAgICAgICBUaW1lc0ZvdXIgPSA0LAotICAgICAgICBUaW1lc0VpZ2h0ID0gOCwK
KyAgICAgICAgVGltZXNPbmUsCisgICAgICAgIFRpbWVzVHdvLAorICAgICAgICBUaW1lc0ZvdXIs
CisgICAgICAgIFRpbWVzRWlnaHQsCiAjaWYgUExBVEZPUk0oWDg2KQogICAgICAgICBTY2FsZVB0
ciA9IFRpbWVzRm91cgogI2VuZGlmCkBAIC01OSw2ICs1OSwyMSBAQCBwdWJsaWM6CiAjZW5kaWYK
ICAgICB9OwogCisgICAgdHlwZWRlZiBYODZBc3NlbWJsZXI6OkNvbmRpdGlvbiBDb25kaXRpb247
CisgICAgc3RhdGljIGNvbnN0IENvbmRpdGlvbiBFcXVhbCA9IFg4NkFzc2VtYmxlcjo6Q29uZGl0
aW9uRTsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIE5vdEVxdWFsID0gWDg2QXNzZW1ibGVy
OjpDb25kaXRpb25ORTsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIEFib3ZlID0gWDg2QXNz
ZW1ibGVyOjpDb25kaXRpb25BOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gQWJvdmVPckVx
dWFsID0gWDg2QXNzZW1ibGVyOjpDb25kaXRpb25BRTsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0
aW9uIEJlbG93ID0gWDg2QXNzZW1ibGVyOjpDb25kaXRpb25COworICAgIHN0YXRpYyBjb25zdCBD
b25kaXRpb24gQmVsb3dPckVxdWFsID0gWDg2QXNzZW1ibGVyOjpDb25kaXRpb25CRTsKKyAgICBz
dGF0aWMgY29uc3QgQ29uZGl0aW9uIEdyZWF0ZXJUaGFuID0gWDg2QXNzZW1ibGVyOjpDb25kaXRp
b25HOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gR3JlYXRlclRoYW5PckVxdWFsID0gWDg2
QXNzZW1ibGVyOjpDb25kaXRpb25HRTsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIExlc3NU
aGFuID0gWDg2QXNzZW1ibGVyOjpDb25kaXRpb25MOworICAgIHN0YXRpYyBjb25zdCBDb25kaXRp
b24gTGVzc1RoYW5PckVxdWFsID0gWDg2QXNzZW1ibGVyOjpDb25kaXRpb25MRTsKKyAgICBzdGF0
aWMgY29uc3QgQ29uZGl0aW9uIE92ZXJmbG93ID0gWDg2QXNzZW1ibGVyOjpDb25kaXRpb25POwor
ICAgIHN0YXRpYyBjb25zdCBDb25kaXRpb24gWmVybyA9IFg4NkFzc2VtYmxlcjo6Q29uZGl0aW9u
RTsKKyAgICBzdGF0aWMgY29uc3QgQ29uZGl0aW9uIE5vblplcm8gPSBYODZBc3NlbWJsZXI6OkNv
bmRpdGlvbk5FOworCiAgICAgTWFjcm9Bc3NlbWJsZXIoKQogICAgIHsKICAgICB9CkBAIC0xMDky
LDY0NCArMTEwNywyNDAgQEAgcHVibGljOgogICAgIC8vIGp6IGFuZCBqbnogdGVzdCB3aGV0aGVy
IHRoZSBmaXJzdCBvcGVyYW5kIGlzIGVxdWFsIHRvIHplcm8sIGFuZCB0YWtlCiAgICAgLy8gYW4g
b3B0aW9uYWwgc2Vjb25kIG9wZXJhbmQgb2YgYSBtYXNrIHVuZGVyIHdoaWNoIHRvIHBlcmZvcm0g
dGhlIHRlc3QuCiAKLXByaXZhdGU6Ci0gICAgdm9pZCBjb21wYXJlSW1tMzJGb3JCcmFuY2goUmVn
aXN0ZXJJRCBsZWZ0LCBpbnQzMl90IHJpZ2h0KQotICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIu
Y21wbF9pcihyaWdodCwgbGVmdCk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21wYXJlSW1tMzJGb3JC
cmFuY2hFcXVhbGl0eShSZWdpc3RlcklEIHJlZywgaW50MzJfdCBpbW0pCi0gICAgewotICAgICAg
ICBpZiAoIWltbSkKLSAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX3JyKHJlZywgcmVnKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9pcihpbW0sIHJlZyk7
Ci0gICAgfQotCi0gICAgdm9pZCBjb21wYXJlSW1tMzJGb3JCcmFuY2hFcXVhbGl0eShBZGRyZXNz
IGFkZHJlc3MsIGludDMyX3QgaW1tKQotICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9p
bShpbW0sIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOwotICAgIH0KLQotICAgIHZvaWQg
dGVzdEltbTMyKFJlZ2lzdGVySUQgcmVnLCBJbW0zMiBtYXNrKQotICAgIHsKLSAgICAgICAgLy8g
aWYgd2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgbG93IHNldmVuIGJpdHMsIHRoaXMgY2Fu
IGJlIHRlc3RlZCB3aXRoIGEgdGVzdGIKLSAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSkK
LSAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX3JyKHJlZywgcmVnKTsKLSAgICAgICAgZWxz
ZSBpZiAoKG1hc2subV92YWx1ZSAmIH4weDdmKSA9PSAwKQotICAgICAgICAgICAgbV9hc3NlbWJs
ZXIudGVzdGJfaThyKG1hc2subV92YWx1ZSwgcmVnKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbV9hc3NlbWJsZXIudGVzdGxfaTMycihtYXNrLm1fdmFsdWUsIHJlZyk7Ci0gICAgfQotCi0g
ICAgdm9pZCB0ZXN0SW1tMzIoQWRkcmVzcyBhZGRyZXNzLCBJbW0zMiBtYXNrKQotICAgIHsKLSAg
ICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSkKLSAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNt
cGxfaW0oMCwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX2kzMm0obWFzay5tX3ZhbHVlLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlKTsKLSAgICB9Ci0KLSAgICB2b2lkIHRlc3RJbW0zMihCYXNlSW5k
ZXggYWRkcmVzcywgSW1tMzIgbWFzaykKLSAgICB7Ci0gICAgICAgIGlmIChtYXNrLm1fdmFsdWUg
PT0gLTEpCi0gICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2ltKDAsIGFkZHJlc3Mub2Zmc2V0
LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9pMzJtKG1hc2subV92YWx1ZSwgYWRk
cmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7
Ci0gICAgfQotCi0jaWYgUExBVEZPUk0oWDg2XzY0KQotICAgIHZvaWQgY29tcGFyZUltbTY0Rm9y
QnJhbmNoKFJlZ2lzdGVySUQgbGVmdCwgaW50MzJfdCByaWdodCkKLSAgICB7Ci0gICAgICAgIG1f
YXNzZW1ibGVyLmNtcHFfaXIocmlnaHQsIGxlZnQpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGFy
ZUltbTY0Rm9yQnJhbmNoRXF1YWxpdHkoUmVnaXN0ZXJJRCByZWcsIGludDMyX3QgaW1tKQotICAg
IHsKLSAgICAgICAgaWYgKCFpbW0pCi0gICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0cV9ycihy
ZWcsIHJlZyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcHFfaXIo
aW1tLCByZWcpOwotICAgIH0KLQotICAgIHZvaWQgdGVzdEltbTY0KFJlZ2lzdGVySUQgcmVnLCBJ
bW0zMiBtYXNrKQotICAgIHsKLSAgICAgICAgLy8gaWYgd2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBp
biB0aGUgbG93IHNldmVuIGJpdHMsIHRoaXMgY2FuIGJlIHRlc3RlZCB3aXRoIGEgdGVzdGIKLSAg
ICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSkKLSAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRl
c3RxX3JyKHJlZywgcmVnKTsKLSAgICAgICAgZWxzZSBpZiAoKG1hc2subV92YWx1ZSAmIH4weDdm
KSA9PSAwKQotICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdGJfaThyKG1hc2subV92YWx1ZSwg
cmVnKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9hc3NlbWJsZXIudGVzdHFfaTMyciht
YXNrLm1fdmFsdWUsIHJlZyk7Ci0gICAgfQotCi0gICAgdm9pZCB0ZXN0SW1tNjQoQWRkcmVzcyBh
ZGRyZXNzLCBJbW0zMiBtYXNrKQotICAgIHsKLSAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAt
MSkKLSAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcHFfaW0oMCwgYWRkcmVzcy5vZmZzZXQsIGFk
ZHJlc3MuYmFzZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3Rx
X2kzMm0obWFzay5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKLSAgICB9
Ci0KLSAgICB2b2lkIHRlc3RJbW02NChCYXNlSW5kZXggYWRkcmVzcywgSW1tMzIgbWFzaykKLSAg
ICB7Ci0gICAgICAgIGlmIChtYXNrLm1fdmFsdWUgPT0gLTEpCi0gICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5jbXBxX2ltKDAsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5k
ZXgsIGFkZHJlc3Muc2NhbGUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2Fzc2VtYmxl
ci50ZXN0cV9pMzJtKG1hc2subV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwg
YWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7Ci0gICAgfQotI2VuZGlmCi0KIHB1YmxpYzoK
LSAgICBKdW1wIGphMzIoUmVnaXN0ZXJJRCBsZWZ0LCBJbW0zMiByaWdodCkKLSAgICB7Ci0gICAg
ICAgIGNvbXBhcmVJbW0zMkZvckJyYW5jaChsZWZ0LCByaWdodC5tX3ZhbHVlKTsKLSAgICAgICAg
cmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuamEoKSk7Ci0gICAgfQotICAgIAotICAgIEp1bXAgamFl
UHRyKFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKLSAgICB7Ci0jaWYgUExBVEZP
Uk0oWDg2XzY0KQotICAgICAgICBtX2Fzc2VtYmxlci5jbXBxX3JyKHJpZ2h0LCBsZWZ0KTsKLSAg
ICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuamFlKCkpOwotI2Vsc2UKLSAgICAgICAgcmV0
dXJuIGphZTMyKGxlZnQsIHJpZ2h0KTsKLSNlbmRpZgotICAgIH0KLQotICAgIEp1bXAgamFlUHRy
KFJlZ2lzdGVySUQgcmVnLCBJbW1QdHIgcHRyKQotICAgIHsKLSNpZiBQTEFURk9STShYODZfNjQp
Ci0gICAgICAgIGludHB0cl90IGltbSA9IHB0ci5hc0ludHB0cigpOwotICAgICAgICBpZiAoQ0FO
X1NJR05fRVhURU5EXzMyXzY0KGltbSkpIHsKLSAgICAgICAgICAgIGNvbXBhcmVJbW02NEZvckJy
YW5jaChyZWcsIGltbSk7Ci0gICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qYWUo
KSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtb3ZlKHB0ciwgc2NyYXRjaFJlZ2lz
dGVyKTsKLSAgICAgICAgICAgIHJldHVybiBqYWVQdHIocmVnLCBzY3JhdGNoUmVnaXN0ZXIpOwot
ICAgICAgICB9Ci0jZWxzZQotICAgICAgICByZXR1cm4gamFlMzIocmVnLCBJbW0zMihwdHIpKTsK
LSNlbmRpZgotICAgIH0KLQotICAgIEp1bXAgamFlMzIoUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3Rl
cklEIHJpZ2h0KQotICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9ycihyaWdodCwgbGVm
dCk7Ci0gICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmphZSgpKTsKLSAgICB9Ci0KLSAg
ICBKdW1wIGphZTMyKFJlZ2lzdGVySUQgbGVmdCwgSW1tMzIgcmlnaHQpCi0gICAgewotICAgICAg
ICBjb21wYXJlSW1tMzJGb3JCcmFuY2gobGVmdCwgcmlnaHQubV92YWx1ZSk7Ci0gICAgICAgIHJl
dHVybiBKdW1wKG1fYXNzZW1ibGVyLmphZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgSnVtcCBqYWUz
MihSZWdpc3RlcklEIGxlZnQsIEFkZHJlc3MgcmlnaHQpCi0gICAgewotICAgICAgICBtX2Fzc2Vt
Ymxlci5jbXBsX21yKHJpZ2h0Lm9mZnNldCwgcmlnaHQuYmFzZSwgbGVmdCk7Ci0gICAgICAgIHJl
dHVybiBKdW1wKG1fYXNzZW1ibGVyLmphZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgSnVtcCBqYWUz
MihBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCi0gICAgewotICAgICAgICBtX2Fzc2Vt
Ymxlci5jbXBsX3JtKHJpZ2h0LCBsZWZ0Lm9mZnNldCwgbGVmdC5iYXNlKTsKLSAgICAgICAgcmV0
dXJuIEp1bXAobV9hc3NlbWJsZXIuamFlKCkpOwotICAgIH0KLSAgICAKLSAgICBKdW1wIGpiUHRy
KFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKLSAgICB7Ci0jaWYgUExBVEZPUk0o
WDg2XzY0KQotICAgICAgICBtX2Fzc2VtYmxlci5jbXBxX3JyKHJpZ2h0LCBsZWZ0KTsKLSAgICAg
ICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuamIoKSk7Ci0jZWxzZQotICAgICAgICByZXR1cm4g
amIzMihsZWZ0LCByaWdodCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBKdW1wIGpiUHRyKFJlZ2lz
dGVySUQgcmVnLCBJbW1QdHIgcHRyKQotICAgIHsKLSNpZiBQTEFURk9STShYODZfNjQpCi0gICAg
ICAgIGludHB0cl90IGltbSA9IHB0ci5hc0ludHB0cigpOwotICAgICAgICBpZiAoQ0FOX1NJR05f
RVhURU5EXzMyXzY0KGltbSkpIHsKLSAgICAgICAgICAgIGNvbXBhcmVJbW02NEZvckJyYW5jaChy
ZWcsIGltbSk7Ci0gICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qYigpKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1vdmUocHRyLCBzY3JhdGNoUmVnaXN0ZXIpOwot
ICAgICAgICAgICAgcmV0dXJuIGpiUHRyKHJlZywgc2NyYXRjaFJlZ2lzdGVyKTsKLSAgICAgICAg
fQotI2Vsc2UKLSAgICAgICAgcmV0dXJuIGpiMzIocmVnLCBJbW0zMihwdHIpKTsKLSNlbmRpZgot
ICAgIH0KLQotICAgIEp1bXAgamIzMihSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQp
Ci0gICAgewotICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX3JyKHJpZ2h0LCBsZWZ0KTsKLSAgICAg
ICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuamIoKSk7Ci0gICAgfQotCi0gICAgSnVtcCBqYjMy
KFJlZ2lzdGVySUQgbGVmdCwgSW1tMzIgcmlnaHQpCi0gICAgewotICAgICAgICBjb21wYXJlSW1t
MzJGb3JCcmFuY2gobGVmdCwgcmlnaHQubV92YWx1ZSk7Ci0gICAgICAgIHJldHVybiBKdW1wKG1f
YXNzZW1ibGVyLmpiKCkpOwotICAgIH0KLSAgICAKLSAgICBKdW1wIGpiMzIoUmVnaXN0ZXJJRCBs
ZWZ0LCBBZGRyZXNzIHJpZ2h0KQotICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9tcihy
aWdodC5vZmZzZXQsIHJpZ2h0LmJhc2UsIGxlZnQpOwotICAgICAgICByZXR1cm4gSnVtcChtX2Fz
c2VtYmxlci5qYigpKTsKLSAgICB9Ci0gICAgCi0gICAgSnVtcCBqZVB0cihSZWdpc3RlcklEIG9w
MSwgUmVnaXN0ZXJJRCBvcDIpCi0gICAgewotI2lmIFBMQVRGT1JNKFg4Nl82NCkKLSAgICAgICAg
bV9hc3NlbWJsZXIuY21wcV9ycihvcDEsIG9wMik7Ci0gICAgICAgIHJldHVybiBKdW1wKG1fYXNz
ZW1ibGVyLmplKCkpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIGplMzIob3AxLCBvcDIpOwotI2Vu
ZGlmCi0gICAgfQotCi0gICAgSnVtcCBqZVB0cihSZWdpc3RlcklEIHJlZywgQWRkcmVzcyBhZGRy
ZXNzKQotICAgIHsKLSNpZiBQTEFURk9STShYODZfNjQpCi0gICAgICAgIG1fYXNzZW1ibGVyLmNt
cHFfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKLSNlbHNlCi0gICAgICAg
IG1fYXNzZW1ibGVyLmNtcGxfcm0ocmVnLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsK
LSNlbmRpZgotICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKLSAgICB9Ci0K
LSAgICBKdW1wIGplUHRyKFJlZ2lzdGVySUQgcmVnLCBJbW1QdHIgcHRyKQotICAgIHsKLSNpZiBQ
TEFURk9STShYODZfNjQpCi0gICAgICAgIGludHB0cl90IGltbSA9IHB0ci5hc0ludHB0cigpOwot
ICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzMyXzY0KGltbSkpIHsKLSAgICAgICAgICAgIGNv
bXBhcmVJbW02NEZvckJyYW5jaEVxdWFsaXR5KHJlZywgaW1tKTsKLSAgICAgICAgICAgIHJldHVy
biBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
bW92ZShwdHIsIHNjcmF0Y2hSZWdpc3Rlcik7Ci0gICAgICAgICAgICByZXR1cm4gamVQdHIoc2Ny
YXRjaFJlZ2lzdGVyLCByZWcpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICByZXR1cm4gamUz
MihyZWcsIEltbTMyKHB0cikpOwotI2VuZGlmCi0gICAgfQotCi0gICAgSnVtcCBqZVB0cihBZGRy
ZXNzIGFkZHJlc3MsIEltbVB0ciBpbW0pCi0gICAgewotI2lmIFBMQVRGT1JNKFg4Nl82NCkKLSAg
ICAgICAgbW92ZShpbW0sIHNjcmF0Y2hSZWdpc3Rlcik7Ci0gICAgICAgIHJldHVybiBqZVB0cihz
Y3JhdGNoUmVnaXN0ZXIsIGFkZHJlc3MpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIGplMzIoYWRk
cmVzcywgSW1tMzIoaW1tKSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBKdW1wIGplMzIoUmVnaXN0
ZXJJRCBvcDEsIFJlZ2lzdGVySUQgb3AyKQotICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIuY21w
bF9ycihvcDEsIG9wMik7Ci0gICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOwot
ICAgIH0KLSAgICAKLSAgICBKdW1wIGplMzIoQWRkcmVzcyBvcDEsIFJlZ2lzdGVySUQgb3AyKQot
ICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9tcihvcDEub2Zmc2V0LCBvcDEuYmFzZSwg
b3AyKTsKLSAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuamUoKSk7Ci0gICAgfQotICAg
IAotICAgIEp1bXAgamUzMihSZWdpc3RlcklEIHJlZywgSW1tMzIgaW1tKQotICAgIHsKLSAgICAg
ICAgY29tcGFyZUltbTMyRm9yQnJhbmNoRXF1YWxpdHkocmVnLCBpbW0ubV92YWx1ZSk7Ci0gICAg
ICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOwotICAgIH0KLQotICAgIEp1bXAgamUz
MihBZGRyZXNzIGFkZHJlc3MsIEltbTMyIGltbSkKLSAgICB7Ci0gICAgICAgIGNvbXBhcmVJbW0z
MkZvckJyYW5jaEVxdWFsaXR5KGFkZHJlc3MsIGltbS5tX3ZhbHVlKTsKLSAgICAgICAgcmV0dXJu
IEp1bXAobV9hc3NlbWJsZXIuamUoKSk7Ci0gICAgfQotICAgIAotICAgIEp1bXAgamUxNihSZWdp
c3RlcklEIG9wMSwgQmFzZUluZGV4IG9wMikKLSAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmNt
cHdfcm0ob3AxLCBvcDIub2Zmc2V0LCBvcDIuYmFzZSwgb3AyLmluZGV4LCBvcDIuc2NhbGUpOwot
ICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qZSgpKTsKLSAgICB9Ci0gICAgCi0gICAg
SnVtcCBqZzMyKFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKLSAgICB7Ci0gICAg
ICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIocmlnaHQsIGxlZnQpOwotICAgICAgICByZXR1cm4gSnVt
cChtX2Fzc2VtYmxlci5qZygpKTsKLSAgICB9Ci0KLSAgICBKdW1wIGpnMzIoUmVnaXN0ZXJJRCBy
ZWcsIEFkZHJlc3MgYWRkcmVzcykKLSAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfbXIo
YWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgcmVnKTsKLSAgICAgICAgcmV0dXJuIEp1bXAo
bV9hc3NlbWJsZXIuamcoKSk7Ci0gICAgfQotCi0gICAgSnVtcCBqZ2VQdHIoUmVnaXN0ZXJJRCBs
ZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIEp1bXAgYnJhbmNoUHRyKENvbmRpdGlvbiBjb25k
LCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCiAgICAgewogI2lmIFBMQVRGT1JN
KFg4Nl82NCkKICAgICAgICAgbV9hc3NlbWJsZXIuY21wcV9ycihyaWdodCwgbGVmdCk7Ci0gICAg
ICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpnZSgpKTsKKyAgICAgICAgcmV0dXJuIEp1bXAo
bV9hc3NlbWJsZXIuamNjKGNvbmQpKTsKICNlbHNlCi0gICAgICAgIHJldHVybiBqZ2UzMihsZWZ0
LCByaWdodCk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBsZWZ0LCByaWdodCk7CiAj
ZW5kaWYKICAgICB9CiAKLSAgICBKdW1wIGpnZVB0cihSZWdpc3RlcklEIHJlZywgSW1tUHRyIHB0
cikKKyAgICBKdW1wIGJyYW5jaFB0cihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBJ
bW1QdHIgcmlnaHQpCiAgICAgewogI2lmIFBMQVRGT1JNKFg4Nl82NCkKLSAgICAgICAgaW50cHRy
X3QgaW1tID0gcHRyLmFzSW50cHRyKCk7CisgICAgICAgIGludHB0cl90IGltbSA9IHJpZ2h0LmFz
SW50cHRyKCk7CiAgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfMzJfNjQoaW1tKSkgewotICAg
ICAgICAgICAgY29tcGFyZUltbTY0Rm9yQnJhbmNoKHJlZywgaW1tKTsKLSAgICAgICAgICAgIHJl
dHVybiBKdW1wKG1fYXNzZW1ibGVyLmpnZSgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIG1vdmUocHRyLCBzY3JhdGNoUmVnaXN0ZXIpOwotICAgICAgICAgICAgcmV0dXJuIGpnZVB0
cihyZWcsIHNjcmF0Y2hSZWdpc3Rlcik7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIHJldHVy
biBqZ2UzMihyZWcsIEltbTMyKHB0cikpOwotI2VuZGlmCi0gICAgfQotCi0gICAgSnVtcCBqZ2Uz
MihSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCi0gICAgewotICAgICAgICBtX2Fz
c2VtYmxlci5jbXBsX3JyKHJpZ2h0LCBsZWZ0KTsKLSAgICAgICAgcmV0dXJuIEp1bXAobV9hc3Nl
bWJsZXIuamdlKCkpOwotICAgIH0KLQotICAgIEp1bXAgamdlMzIoUmVnaXN0ZXJJRCBsZWZ0LCBJ
bW0zMiByaWdodCkKLSAgICB7Ci0gICAgICAgIGNvbXBhcmVJbW0zMkZvckJyYW5jaChsZWZ0LCBy
aWdodC5tX3ZhbHVlKTsKLSAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuamdlKCkpOwot
ICAgIH0KLQotICAgIEp1bXAgamxQdHIoUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0
KQotICAgIHsKLSNpZiBQTEFURk9STShYODZfNjQpCi0gICAgICAgIG1fYXNzZW1ibGVyLmNtcHFf
cnIocmlnaHQsIGxlZnQpOwotICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbCgpKTsK
LSNlbHNlCi0gICAgICAgIHJldHVybiBqbDMyKGxlZnQsIHJpZ2h0KTsKLSNlbmRpZgotICAgIH0K
LQotICAgIEp1bXAgamxQdHIoUmVnaXN0ZXJJRCByZWcsIEltbVB0ciBwdHIpCi0gICAgewotI2lm
IFBMQVRGT1JNKFg4Nl82NCkKLSAgICAgICAgaW50cHRyX3QgaW1tID0gcHRyLmFzSW50cHRyKCk7
Ci0gICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfMzJfNjQoaW1tKSkgewotICAgICAgICAgICAg
Y29tcGFyZUltbTY0Rm9yQnJhbmNoKHJlZywgaW1tKTsKLSAgICAgICAgICAgIHJldHVybiBKdW1w
KG1fYXNzZW1ibGVyLmpsKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbW92ZShw
dHIsIHNjcmF0Y2hSZWdpc3Rlcik7Ci0gICAgICAgICAgICByZXR1cm4gamxQdHIocmVnLCBzY3Jh
dGNoUmVnaXN0ZXIpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICByZXR1cm4gamwzMihyZWcs
IEltbTMyKHB0cikpOwotI2VuZGlmCi0gICAgfQotCi0gICAgSnVtcCBqbDMyKFJlZ2lzdGVySUQg
bGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKLSAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmNtcGxf
cnIocmlnaHQsIGxlZnQpOwotICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbCgpKTsK
LSAgICB9Ci0gICAgCi0gICAgSnVtcCBqbDMyKFJlZ2lzdGVySUQgbGVmdCwgSW1tMzIgcmlnaHQp
Ci0gICAgewotICAgICAgICBjb21wYXJlSW1tMzJGb3JCcmFuY2gobGVmdCwgcmlnaHQubV92YWx1
ZSk7Ci0gICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpsKCkpOwotICAgIH0KLQotICAg
IEp1bXAgamxlUHRyKFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKLSAgICB7Ci0j
aWYgUExBVEZPUk0oWDg2XzY0KQotICAgICAgICBtX2Fzc2VtYmxlci5jbXBxX3JyKHJpZ2h0LCBs
ZWZ0KTsKLSAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuamxlKCkpOwotI2Vsc2UKLSAg
ICAgICAgcmV0dXJuIGpsZTMyKGxlZnQsIHJpZ2h0KTsKLSNlbmRpZgotICAgIH0KLQotICAgIEp1
bXAgamxlUHRyKFJlZ2lzdGVySUQgcmVnLCBJbW1QdHIgcHRyKQotICAgIHsKLSNpZiBQTEFURk9S
TShYODZfNjQpCi0gICAgICAgIGludHB0cl90IGltbSA9IHB0ci5hc0ludHB0cigpOwotICAgICAg
ICBpZiAoQ0FOX1NJR05fRVhURU5EXzMyXzY0KGltbSkpIHsKLSAgICAgICAgICAgIGNvbXBhcmVJ
bW02NEZvckJyYW5jaChyZWcsIGltbSk7Ci0gICAgICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2Vt
Ymxlci5qbGUoKSk7CisgICAgICAgICAgICBpZiAoIWltbSkKKyAgICAgICAgICAgICAgICBtX2Fz
c2VtYmxlci50ZXN0cV9ycihsZWZ0LCBsZWZ0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5jbXBxX2lyKGltbSwgbGVmdCk7CisgICAgICAgICAgICByZXR1
cm4gSnVtcChtX2Fzc2VtYmxlci5qY2MoY29uZCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgbW92ZShwdHIsIHNjcmF0Y2hSZWdpc3Rlcik7Ci0gICAgICAgICAgICByZXR1cm4gamxl
UHRyKHJlZywgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1vdmUocmlnaHQsIHNjcmF0
Y2hSZWdpc3Rlcik7CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKGNvbmQsIGxlZnQsIHNj
cmF0Y2hSZWdpc3Rlcik7CiAgICAgICAgIH0KICNlbHNlCi0gICAgICAgIHJldHVybiBqbGUzMihy
ZWcsIEltbTMyKHB0cikpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgbGVmdCwgSW1t
MzIocmlnaHQpKTsKICNlbmRpZgogICAgIH0KIAotICAgIEp1bXAgamxlMzIoUmVnaXN0ZXJJRCBs
ZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQotICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9y
cihyaWdodCwgbGVmdCk7Ci0gICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpsZSgpKTsK
LSAgICB9Ci0gICAgCi0gICAgSnVtcCBqbGUzMihSZWdpc3RlcklEIGxlZnQsIEltbTMyIHJpZ2h0
KQotICAgIHsKLSAgICAgICAgY29tcGFyZUltbTMyRm9yQnJhbmNoKGxlZnQsIHJpZ2h0Lm1fdmFs
dWUpOwotICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbGUoKSk7Ci0gICAgfQotCi0g
ICAgSnVtcCBqbmVQdHIoUmVnaXN0ZXJJRCBvcDEsIFJlZ2lzdGVySUQgb3AyKQorICAgIEp1bXAg
YnJhbmNoUHRyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEFkZHJlc3MgcmlnaHQp
CiAgICAgewogI2lmIFBMQVRGT1JNKFg4Nl82NCkKLSAgICAgICAgbV9hc3NlbWJsZXIuY21wcV9y
cihvcDEsIG9wMik7Ci0gICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuY21wcV9tcihyaWdodC5vZmZzZXQsIHJpZ2h0LmJhc2UsIGxlZnQp
OworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qY2MoY29uZCkpOwogI2Vsc2UKLSAg
ICAgICAgcmV0dXJuIGpuZTMyKG9wMSwgb3AyKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNv
bmQsIGxlZnQsIHJpZ2h0KTsKICNlbmRpZgogICAgIH0KIAotICAgIEp1bXAgam5lUHRyKFJlZ2lz
dGVySUQgcmVnLCBBZGRyZXNzIGFkZHJlc3MpCisgICAgSnVtcCBicmFuY2hQdHIoQ29uZGl0aW9u
IGNvbmQsIEFic29sdXRlQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQogICAgIHsKICNp
ZiBQTEFURk9STShYODZfNjQpCi0gICAgICAgIG1fYXNzZW1ibGVyLmNtcHFfcm0ocmVnLCBhZGRy
ZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgbW92ZShJbW1QdHIobGVmdC5tX3B0
ciksIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBicmFuY2hQdHIoY29uZCwgQWRk
cmVzcyhzY3JhdGNoUmVnaXN0ZXIpLCByaWdodCk7CiAjZWxzZQotICAgICAgICBtX2Fzc2VtYmxl
ci5jbXBsX3JtKHJlZywgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgIG1f
YXNzZW1ibGVyLmNtcGxfcm0ocmlnaHQsIGxlZnQubV9wdHIpOworICAgICAgICByZXR1cm4gSnVt
cChtX2Fzc2VtYmxlci5qY2MoY29uZCkpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBKdW1wKG1f
YXNzZW1ibGVyLmpuZSgpKTsKICAgICB9CiAKLSAgICBKdW1wIGpuZVB0cihSZWdpc3RlcklEIHJl
ZywgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgSnVtcCBicmFuY2hQdHIoQ29uZGl0aW9u
IGNvbmQsIEFkZHJlc3MgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKICAgICB7CiAjaWYgUExBVEZP
Uk0oWDg2XzY0KQotICAgICAgICBtb3ZlKEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJl
Z2lzdGVyKTsKLSAgICAgICAgcmV0dXJuIGpuZVB0cihyZWcsIEFkZHJlc3Moc2NyYXRjaFJlZ2lz
dGVyKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcHFfcm0ocmlnaHQsIGxlZnQub2Zmc2V0LCBs
ZWZ0LmJhc2UpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qY2MoY29uZCkpOwog
I2Vsc2UKLSAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9ybShyZWcsIGFkZHJlc3MubV9wdHIpOwot
ICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSk7CisgICAgICAgIHJldHVybiBi
cmFuY2gzMihjb25kLCBsZWZ0LCByaWdodCk7CiAjZW5kaWYKICAgICB9CiAKLSAgICBKdW1wIGpu
ZVB0cihSZWdpc3RlcklEIHJlZywgSW1tUHRyIHB0cikKKyAgICBKdW1wIGJyYW5jaFB0cihDb25k
aXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBJbW1QdHIgcmlnaHQpCiAgICAgewogI2lmIFBMQVRG
T1JNKFg4Nl82NCkKLSAgICAgICAgaW50cHRyX3QgaW1tID0gcHRyLmFzSW50cHRyKCk7Ci0gICAg
ICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfMzJfNjQoaW1tKSkgewotICAgICAgICAgICAgY29tcGFy
ZUltbTY0Rm9yQnJhbmNoRXF1YWxpdHkocmVnLCBpbW0pOwotICAgICAgICAgICAgcmV0dXJuIEp1
bXAobV9hc3NlbWJsZXIuam5lKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbW92
ZShwdHIsIHNjcmF0Y2hSZWdpc3Rlcik7Ci0gICAgICAgICAgICByZXR1cm4gam5lUHRyKHNjcmF0
Y2hSZWdpc3RlciwgcmVnKTsKLSAgICAgICAgfQorICAgICAgICBtb3ZlKHJpZ2h0LCBzY3JhdGNo
UmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gYnJhbmNoUHRyKGNvbmQsIGxlZnQsIHNjcmF0Y2hS
ZWdpc3Rlcik7CiAjZWxzZQotICAgICAgICByZXR1cm4gam5lMzIocmVnLCBJbW0zMihwdHIpKTsK
LSNlbmRpZgotICAgIH0KLQotICAgIEp1bXAgam5lUHRyKEFkZHJlc3MgYWRkcmVzcywgSW1tUHRy
IGltbSkKLSAgICB7Ci0jaWYgUExBVEZPUk0oWDg2XzY0KQotICAgICAgICBtb3ZlKGltbSwgc2Ny
YXRjaFJlZ2lzdGVyKTsKLSAgICAgICAgcmV0dXJuIGpuZVB0cihzY3JhdGNoUmVnaXN0ZXIsIGFk
ZHJlc3MpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIGpuZTMyKGFkZHJlc3MsIEltbTMyKGltbSkp
OworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgbGVmdCwgSW1tMzIocmlnaHQpKTsKICNl
bmRpZgogICAgIH0KIAogI2lmICFQTEFURk9STShYODZfNjQpCi0gICAgSnVtcCBqbmVQdHIoQWJz
b2x1dGVBZGRyZXNzIGFkZHJlc3MsIEltbVB0ciBpbW0pCisgICAgSnVtcCBicmFuY2hQdHIoQ29u
ZGl0aW9uIGNvbmQsIEFic29sdXRlQWRkcmVzcyBsZWZ0LCBJbW1QdHIgcmlnaHQpCiAgICAgewot
ICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2ltKGltbS5hc0ludHB0cigpLCBhZGRyZXNzLm1fcHRy
KTsKLSAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam5lKCkpOworICAgICAgICBtX2Fz
c2VtYmxlci5jbXBsX2ltKHJpZ2h0LmFzSW50cHRyKCksIGxlZnQubV9wdHIpOworICAgICAgICBy
ZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qY2MoY29uZCkpOwogICAgIH0KICNlbmRpZgogCi0gICAg
SnVtcCBqbmVQdHJXaXRoUGF0Y2goUmVnaXN0ZXJJRCByZWcsIERhdGFMYWJlbFB0ciYgZGF0YUxh
YmVsLCBJbW1QdHIgaW5pdGlhbFZhbHVlID0gSW1tUHRyKDApKQorICAgIEp1bXAgYnJhbmNoUHRy
V2l0aFBhdGNoKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIERhdGFMYWJlbFB0ciYg
ZGF0YUxhYmVsLCBJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUgPSBJbW1QdHIoMCkpCiAgICAgewog
I2lmIFBMQVRGT1JNKFg4Nl82NCkKLSAgICAgICAgbV9hc3NlbWJsZXIubW92cV9pNjRyKGluaXRp
YWxWYWx1ZS5hc0ludHB0cigpLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxl
ci5tb3ZxX2k2NHIoaW5pdGlhbFJpZ2h0VmFsdWUuYXNJbnRwdHIoKSwgc2NyYXRjaFJlZ2lzdGVy
KTsKICAgICAgICAgZGF0YUxhYmVsID0gRGF0YUxhYmVsUHRyKHRoaXMpOwotICAgICAgICByZXR1
cm4gam5lUHRyKHNjcmF0Y2hSZWdpc3RlciwgcmVnKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFB0
cihjb25kLCBsZWZ0LCBzY3JhdGNoUmVnaXN0ZXIpOwogI2Vsc2UKLSAgICAgICAgbV9hc3NlbWJs
ZXIuY21wbF9pcl9mb3JjZTMyKGluaXRpYWxWYWx1ZS5hc0ludHB0cigpLCByZWcpOworICAgICAg
ICBtX2Fzc2VtYmxlci5jbXBsX2lyX2ZvcmNlMzIoaW5pdGlhbFJpZ2h0VmFsdWUuYXNJbnRwdHIo
KSwgbGVmdCk7CiAgICAgICAgIGRhdGFMYWJlbCA9IERhdGFMYWJlbFB0cih0aGlzKTsKLSAgICAg
ICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam5lKCkpOworICAgICAgICByZXR1cm4gSnVtcCht
X2Fzc2VtYmxlci5qY2MoY29uZCkpOwogI2VuZGlmCiAgICAgfQogCi0gICAgSnVtcCBqbmVQdHJX
aXRoUGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBEYXRhTGFiZWxQdHImIGRhdGFMYWJlbCwgSW1tUHRy
IGluaXRpYWxWYWx1ZSA9IEltbVB0cigwKSkKKyAgICBKdW1wIGJyYW5jaFB0cldpdGhQYXRjaChD
b25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBEYXRhTGFiZWxQdHImIGRhdGFMYWJlbCwgSW1t
UHRyIGluaXRpYWxSaWdodFZhbHVlID0gSW1tUHRyKDApKQogICAgIHsKICNpZiBQTEFURk9STShY
ODZfNjQpCi0gICAgICAgIG1fYXNzZW1ibGVyLm1vdnFfaTY0cihpbml0aWFsVmFsdWUuYXNJbnRw
dHIoKSwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92cV9pNjRyKGlu
aXRpYWxSaWdodFZhbHVlLmFzSW50cHRyKCksIHNjcmF0Y2hSZWdpc3Rlcik7CiAgICAgICAgIGRh
dGFMYWJlbCA9IERhdGFMYWJlbFB0cih0aGlzKTsKLSAgICAgICAgcmV0dXJuIGpuZVB0cihzY3Jh
dGNoUmVnaXN0ZXIsIGFkZHJlc3MpOworICAgICAgICByZXR1cm4gYnJhbmNoUHRyKGNvbmQsIGxl
ZnQsIHNjcmF0Y2hSZWdpc3Rlcik7CiAjZWxzZQotICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2lt
X2ZvcmNlMzIoaW5pdGlhbFZhbHVlLmFzSW50cHRyKCksIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNz
LmJhc2UpOworICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2ltX2ZvcmNlMzIoaW5pdGlhbFJpZ2h0
VmFsdWUuYXNJbnRwdHIoKSwgbGVmdC5vZmZzZXQsIGxlZnQuYmFzZSk7CiAgICAgICAgIGRhdGFM
YWJlbCA9IERhdGFMYWJlbFB0cih0aGlzKTsKLSAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJs
ZXIuam5lKCkpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qY2MoY29uZCkpOwog
I2VuZGlmCiAgICAgfQogCi0gICAgSnVtcCBqbmUzMihSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJ
RCBvcDIpCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0
LCBSZWdpc3RlcklEIHJpZ2h0KQogICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9ycihv
cDEsIG9wMik7Ci0gICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKTsKLSAgICB9
Ci0KLSAgICBKdW1wIGpuZTMyKFJlZ2lzdGVySUQgcmVnLCBJbW0zMiBpbW0pCi0gICAgewotICAg
ICAgICBjb21wYXJlSW1tMzJGb3JCcmFuY2hFcXVhbGl0eShyZWcsIGltbS5tX3ZhbHVlKTsKLSAg
ICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam5lKCkpOworICAgICAgICBtX2Fzc2VtYmxl
ci5jbXBsX3JyKHJpZ2h0LCBsZWZ0KTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIu
amNjKGNvbmQpKTsKICAgICB9CiAKLSAgICBKdW1wIGpuZTMyKEFkZHJlc3MgYWRkcmVzcywgSW1t
MzIgaW1tKQorICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVm
dCwgSW1tMzIgcmlnaHQpCiAgICAgewotICAgICAgICBjb21wYXJlSW1tMzJGb3JCcmFuY2hFcXVh
bGl0eShhZGRyZXNzLCBpbW0ubV92YWx1ZSk7Ci0gICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1i
bGVyLmpuZSgpKTsKKyAgICAgICAgaWYgKCgoY29uZCA9PSBFcXVhbCkgfHwgKGNvbmQgPT0gTm90
RXF1YWwpKSAmJiAhcmlnaHQubV92YWx1ZSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3Rs
X3JyKGxlZnQsIGxlZnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5j
bXBsX2lyKHJpZ2h0Lm1fdmFsdWUsIGxlZnQpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2Vt
Ymxlci5qY2MoY29uZCkpOwogICAgIH0KICAgICAKLSAgICBKdW1wIGpuZTMyKEFkZHJlc3MgYWRk
cmVzcywgUmVnaXN0ZXJJRCByZWcpCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCBsZWZ0LCBBZGRyZXNzIHJpZ2h0KQogICAgIHsKLSAgICAgICAgbV9hc3NlbWJs
ZXIuY21wbF9ybShyZWcsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOwotICAgICAgICBy
ZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcGxf
bXIocmlnaHQub2Zmc2V0LCByaWdodC5iYXNlLCBsZWZ0KTsKKyAgICAgICAgcmV0dXJuIEp1bXAo
bV9hc3NlbWJsZXIuamNjKGNvbmQpKTsKICAgICB9CiAgICAgCi0gICAgSnVtcCBqbnpQdHIoUmVn
aXN0ZXJJRCByZWcsIFJlZ2lzdGVySUQgbWFzaykKLSAgICB7Ci0jaWYgUExBVEZPUk0oWDg2XzY0
KQotICAgICAgICBtX2Fzc2VtYmxlci50ZXN0cV9ycihyZWcsIG1hc2spOwotICAgICAgICByZXR1
cm4gSnVtcChtX2Fzc2VtYmxlci5qbmUoKSk7Ci0jZWxzZQotICAgICAgICByZXR1cm4gam56MzIo
cmVnLCBtYXNrKTsKLSNlbmRpZgotICAgIH0KLQotICAgIEp1bXAgam56UHRyKFJlZ2lzdGVySUQg
cmVnLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpKQotICAgIHsKLSNpZiBQTEFURk9STShYODZfNjQp
Ci0gICAgICAgIHRlc3RJbW02NChyZWcsIG1hc2spOwotICAgICAgICByZXR1cm4gSnVtcChtX2Fz
c2VtYmxlci5qbmUoKSk7Ci0jZWxzZQotICAgICAgICByZXR1cm4gam56MzIocmVnLCBtYXNrKTsK
LSNlbmRpZgotICAgIH0KLQotICAgIEp1bXAgam56UHRyKFJlZ2lzdGVySUQgcmVnLCBJbW1QdHIg
bWFzaykKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIFJl
Z2lzdGVySUQgcmlnaHQpCiAgICAgewotI2lmIFBMQVRGT1JNKFg4Nl82NCkKLSAgICAgICAgbW92
ZShtYXNrLCBzY3JhdGNoUmVnaXN0ZXIpOwotICAgICAgICBtX2Fzc2VtYmxlci50ZXN0cV9ycihz
Y3JhdGNoUmVnaXN0ZXIsIHJlZyk7Ci0gICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpu
ZSgpKTsKLSNlbHNlCi0gICAgICAgIHJldHVybiBqbnozMihyZWcsIEltbTMyKG1hc2spKTsKLSNl
bmRpZgotICAgIH0KLQotICAgIEp1bXAgam56UHRyKEFkZHJlc3MgYWRkcmVzcywgSW1tMzIgbWFz
ayA9IEltbTMyKC0xKSkKLSAgICB7Ci0jaWYgUExBVEZPUk0oWDg2XzY0KQotICAgICAgICB0ZXN0
SW1tNjQoYWRkcmVzcywgbWFzayk7Ci0gICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpu
ZSgpKTsKLSNlbHNlCi0gICAgICAgIHJldHVybiBqbnozMihhZGRyZXNzLCBtYXNrKTsKLSNlbmRp
ZgotICAgIH0KLQotICAgIEp1bXAgam56MzIoUmVnaXN0ZXJJRCByZWcsIFJlZ2lzdGVySUQgbWFz
aykKLSAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX3JyKHJlZywgbWFzayk7Ci0gICAg
ICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpuZSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
Y21wbF9ybShyaWdodCwgbGVmdC5vZmZzZXQsIGxlZnQuYmFzZSk7CisgICAgICAgIHJldHVybiBK
dW1wKG1fYXNzZW1ibGVyLmpjYyhjb25kKSk7CiAgICAgfQotCi0gICAgSnVtcCBqbnozMihSZWdp
c3RlcklEIHJlZywgSW1tMzIgbWFzayA9IEltbTMyKC0xKSkKKyAgICAKKyAgICBKdW1wIGJyYW5j
aDMyKENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIEltbTMyIHJpZ2h0KQogICAgIHsKLSAg
ICAgICAgdGVzdEltbTMyKHJlZywgbWFzayk7Ci0gICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1i
bGVyLmpuZSgpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9pbShyaWdodC5tX3ZhbHVlLCBs
ZWZ0Lm9mZnNldCwgbGVmdC5iYXNlKTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIu
amNjKGNvbmQpKTsKICAgICB9CiAKLSAgICBKdW1wIGpuejMyKEFkZHJlc3MgYWRkcmVzcywgSW1t
MzIgbWFzayA9IEltbTMyKC0xKSkKKyAgICBKdW1wIGJyYW5jaDE2KENvbmRpdGlvbiBjb25kLCBC
YXNlSW5kZXggbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKICAgICB7Ci0gICAgICAgIHRlc3RJbW0z
MihhZGRyZXNzLCBtYXNrKTsKLSAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam5lKCkp
OworICAgICAgICBtX2Fzc2VtYmxlci5jbXB3X3JtKHJpZ2h0LCBsZWZ0Lm9mZnNldCwgbGVmdC5i
YXNlLCBsZWZ0LmluZGV4LCBsZWZ0LnNjYWxlKTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3Nl
bWJsZXIuamNjKGNvbmQpKTsKICAgICB9CiAKLSAgICBKdW1wIGp6UHRyKFJlZ2lzdGVySUQgcmVn
LCBSZWdpc3RlcklEIG1hc2spCisgICAgSnVtcCBicmFuY2hUZXN0UHRyKENvbmRpdGlvbiBjb25k
LCBSZWdpc3RlcklEIHJlZywgUmVnaXN0ZXJJRCBtYXNrKQogICAgIHsKICNpZiBQTEFURk9STShY
ODZfNjQpCiAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RxX3JyKHJlZywgbWFzayk7Ci0gICAgICAg
IHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmplKCkpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fz
c2VtYmxlci5qY2MoY29uZCkpOwogI2Vsc2UKLSAgICAgICAgcmV0dXJuIGp6MzIocmVnLCBtYXNr
KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3QzMihjb25kLCByZWcsIG1hc2spOwogI2VuZGlm
CiAgICAgfQogCi0gICAgSnVtcCBqelB0cihSZWdpc3RlcklEIHJlZywgSW1tMzIgbWFzayA9IElt
bTMyKC0xKSkKKyAgICBKdW1wIGJyYW5jaFRlc3RQdHIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVy
SUQgcmVnLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpKQogICAgIHsKICNpZiBQTEFURk9STShYODZf
NjQpCi0gICAgICAgIHRlc3RJbW02NChyZWcsIG1hc2spOwotICAgICAgICByZXR1cm4gSnVtcCht
X2Fzc2VtYmxlci5qZSgpKTsKLSNlbHNlCi0gICAgICAgIHJldHVybiBqejMyKHJlZywgbWFzayk7
Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBKdW1wIGp6UHRyKFJlZ2lzdGVySUQgcmVnLCBJbW1QdHIg
bWFzaykKLSAgICB7Ci0jaWYgUExBVEZPUk0oWDg2XzY0KQotICAgICAgICBtb3ZlKG1hc2ssIHNj
cmF0Y2hSZWdpc3Rlcik7Ci0gICAgICAgIG1fYXNzZW1ibGVyLnRlc3RxX3JyKHNjcmF0Y2hSZWdp
c3RlciwgcmVnKTsKLSAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisgICAg
ICAgIC8vIGlmIHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGxvdyBzZXZlbiBiaXRzLCB0
aGlzIGNhbiBiZSB0ZXN0ZWQgd2l0aCBhIHRlc3RiCisgICAgICAgIGlmIChtYXNrLm1fdmFsdWUg
PT0gLTEpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0cV9ycihyZWcsIHJlZyk7CisgICAg
ICAgIGVsc2UgaWYgKChtYXNrLm1fdmFsdWUgJiB+MHg3ZikgPT0gMCkKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnRlc3RiX2k4cihtYXNrLm1fdmFsdWUsIHJlZyk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RxX2kzMnIobWFzay5tX3ZhbHVlLCByZWcpOworICAg
ICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qY2MoY29uZCkpOwogI2Vsc2UKLSAgICAgICAg
cmV0dXJuIGp6MzIocmVnLCBJbW0zMihtYXNrKSk7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0
MzIoY29uZCwgcmVnLCBtYXNrKTsKICNlbmRpZgogICAgIH0KIAotICAgIEp1bXAganpQdHIoQWRk
cmVzcyBhZGRyZXNzLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpKQorICAgIEp1bXAgYnJhbmNoVGVz
dFB0cihDb25kaXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBJbW0zMiBtYXNrID0gSW1tMzIo
LTEpKQogICAgIHsKICNpZiBQTEFURk9STShYODZfNjQpCi0gICAgICAgIHRlc3RJbW02NChhZGRy
ZXNzLCBtYXNrKTsKLSAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisgICAg
ICAgIGlmIChtYXNrLm1fdmFsdWUgPT0gLTEpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBx
X2ltKDAsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci50ZXN0cV9pMzJtKG1hc2subV92YWx1ZSwgYWRkcmVzcy5vZmZz
ZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpjYyhj
b25kKSk7CiAjZWxzZQotICAgICAgICByZXR1cm4ganozMihhZGRyZXNzLCBtYXNrKTsKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaFRlc3QzMihjb25kLCBhZGRyZXNzLCBtYXNrKTsKICNlbmRpZgogICAg
IH0KIAotICAgIEp1bXAganpQdHIoQmFzZUluZGV4IGFkZHJlc3MsIEltbTMyIG1hc2sgPSBJbW0z
MigtMSkpCisgICAgSnVtcCBicmFuY2hUZXN0UHRyKENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXgg
YWRkcmVzcywgSW1tMzIgbWFzayA9IEltbTMyKC0xKSkKICAgICB7CiAjaWYgUExBVEZPUk0oWDg2
XzY0KQotICAgICAgICB0ZXN0SW1tNjQoYWRkcmVzcywgbWFzayk7Ci0gICAgICAgIHJldHVybiBK
dW1wKG1fYXNzZW1ibGVyLmplKCkpOworICAgICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0xKQor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wcV9pbSgwLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVz
cy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbV9hc3NlbWJsZXIudGVzdHFfaTMybShtYXNrLm1fdmFsdWUsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworICAgICAg
ICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qY2MoY29uZCkpOwogI2Vsc2UKLSAgICAgICAgcmV0
dXJuIGp6MzIoYWRkcmVzcywgbWFzayk7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0MzIoY29u
ZCwgYWRkcmVzcywgbWFzayk7CiAjZW5kaWYKICAgICB9CiAKLSAgICBKdW1wIGp6MzIoUmVnaXN0
ZXJJRCByZWcsIFJlZ2lzdGVySUQgbWFzaykKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRp
b24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFJlZ2lzdGVySUQgbWFzaykKICAgICB7CisgICAgICAg
IEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CiAgICAgICAgIG1f
YXNzZW1ibGVyLnRlc3RsX3JyKHJlZywgbWFzayk7Ci0gICAgICAgIHJldHVybiBKdW1wKG1fYXNz
ZW1ibGVyLmplKCkpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qY2MoY29uZCkp
OwogICAgIH0KIAotICAgIEp1bXAganozMihSZWdpc3RlcklEIHJlZywgSW1tMzIgbWFzayA9IElt
bTMyKC0xKSkKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCByZWcsIEltbTMyIG1hc2sgPSBJbW0zMigtMSkpCiAgICAgewotICAgICAgICB0ZXN0SW1tMzIo
cmVnLCBtYXNrKTsKLSAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisgICAg
ICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAg
IC8vIGlmIHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGxvdyBzZXZlbiBiaXRzLCB0aGlz
IGNhbiBiZSB0ZXN0ZWQgd2l0aCBhIHRlc3RiCisgICAgICAgIGlmIChtYXNrLm1fdmFsdWUgPT0g
LTEpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9ycihyZWcsIHJlZyk7CisgICAgICAg
IGVsc2UgaWYgKChtYXNrLm1fdmFsdWUgJiB+MHg3ZikgPT0gMCkKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLnRlc3RiX2k4cihtYXNrLm1fdmFsdWUsIHJlZyk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX2kzMnIobWFzay5tX3ZhbHVlLCByZWcpOworICAgICAg
ICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qY2MoY29uZCkpOwogICAgIH0KIAotICAgIEp1bXAg
anozMihBZGRyZXNzIGFkZHJlc3MsIEltbTMyIG1hc2sgPSBJbW0zMigtMSkpCisgICAgSnVtcCBi
cmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgYWRkcmVzcywgSW1tMzIgbWFzayA9
IEltbTMyKC0xKSkKICAgICB7Ci0gICAgICAgIHRlc3RJbW0zMihhZGRyZXNzLCBtYXNrKTsKLSAg
ICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisgICAgICAgIEFTU0VSVCgoY29u
ZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIGlmIChtYXNrLm1fdmFs
dWUgPT0gLTEpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2ltKDAsIGFkZHJlc3Mub2Zm
c2V0LCBhZGRyZXNzLmJhc2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci50ZXN0bF9pMzJtKG1hc2subV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7
CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpjYyhjb25kKSk7CiAgICAgfQogCi0g
ICAgSnVtcCBqejMyKEJhc2VJbmRleCBhZGRyZXNzLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpKQor
ICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggYWRkcmVzcywg
SW1tMzIgbWFzayA9IEltbTMyKC0xKSkKICAgICB7Ci0gICAgICAgIHRlc3RJbW0zMihhZGRyZXNz
LCBtYXNrKTsKLSAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisgICAgICAg
IEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIGlm
IChtYXNrLm1fdmFsdWUgPT0gLTEpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2ltKDAs
IGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2Nh
bGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci50ZXN0bF9pMzJtKG1h
c2subV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwg
YWRkcmVzcy5zY2FsZSk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpjYyhjb25k
KSk7CiAgICAgfQogCiAgICAgSnVtcCBqdW1wKCkKQEAgLTE3NTgsNDkgKzEzNjksMzQgQEAgcHVi
bGljOgogICAgIC8vICAgICAvLyAuLi4KICAgICAvLyAgICAgam5lMzIocmVnMSwgcmVnMikubGlu
a1RvKHRvcE9mTG9vcCk7CiAKLSAgICB2b2lkIGphZTMyKFJlZ2lzdGVySUQgbGVmdCwgQWRkcmVz
cyByaWdodCwgTGFiZWwgdGFyZ2V0KQorICAgIHZvaWQgYnJhbmNoUHRyKENvbmRpdGlvbiBjb25k
LCBSZWdpc3RlcklEIG9wMSwgSW1tUHRyIGltbSwgTGFiZWwgdGFyZ2V0KQogICAgIHsKLSAgICAg
ICAgamFlMzIobGVmdCwgcmlnaHQpLmxpbmtUbyh0YXJnZXQsIHRoaXMpOworICAgICAgICBicmFu
Y2hQdHIoY29uZCwgb3AxLCBpbW0pLmxpbmtUbyh0YXJnZXQsIHRoaXMpOwogICAgIH0KIAotICAg
IHZvaWQgamUzMihSZWdpc3RlcklEIG9wMSwgSW1tMzIgaW1tLCBMYWJlbCB0YXJnZXQpCisgICAg
dm9pZCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBvcDEsIFJlZ2lzdGVySUQg
b3AyLCBMYWJlbCB0YXJnZXQpCiAgICAgewotICAgICAgICBqZTMyKG9wMSwgaW1tKS5saW5rVG8o
dGFyZ2V0LCB0aGlzKTsKKyAgICAgICAgYnJhbmNoMzIoY29uZCwgb3AxLCBvcDIpLmxpbmtUbyh0
YXJnZXQsIHRoaXMpOwogICAgIH0KIAotICAgIHZvaWQgamUxNihSZWdpc3RlcklEIG9wMSwgQmFz
ZUluZGV4IG9wMiwgTGFiZWwgdGFyZ2V0KQorICAgIHZvaWQgYnJhbmNoMzIoQ29uZGl0aW9uIGNv
bmQsIFJlZ2lzdGVySUQgb3AxLCBJbW0zMiBpbW0sIExhYmVsIHRhcmdldCkKICAgICB7Ci0gICAg
ICAgIGplMTYob3AxLCBvcDIpLmxpbmtUbyh0YXJnZXQsIHRoaXMpOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGpsMzIoUmVnaXN0ZXJJRCBsZWZ0LCBJbW0zMiByaWdodCwgTGFiZWwgdGFyZ2V0KQot
ICAgIHsKLSAgICAgICAgamwzMihsZWZ0LCByaWdodCkubGlua1RvKHRhcmdldCwgdGhpcyk7Ci0g
ICAgfQotICAgIAotICAgIHZvaWQgamxlMzIoUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJp
Z2h0LCBMYWJlbCB0YXJnZXQpCi0gICAgewotICAgICAgICBqbGUzMihsZWZ0LCByaWdodCkubGlu
a1RvKHRhcmdldCwgdGhpcyk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgam5lUHRyKFJlZ2lzdGVy
SUQgb3AxLCBJbW1QdHIgaW1tLCBMYWJlbCB0YXJnZXQpCi0gICAgewotICAgICAgICBqbmVQdHIo
b3AxLCBpbW0pLmxpbmtUbyh0YXJnZXQsIHRoaXMpOworICAgICAgICBicmFuY2gzMihjb25kLCBv
cDEsIGltbSkubGlua1RvKHRhcmdldCwgdGhpcyk7CiAgICAgfQogCi0gICAgdm9pZCBqbmUzMihS
ZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIExhYmVsIHRhcmdldCkKKyAgICB2b2lkIGJy
YW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEFkZHJlc3MgcmlnaHQsIExh
YmVsIHRhcmdldCkKICAgICB7Ci0gICAgICAgIGpuZTMyKG9wMSwgb3AyKS5saW5rVG8odGFyZ2V0
LCB0aGlzKTsKKyAgICAgICAgYnJhbmNoMzIoY29uZCwgbGVmdCwgcmlnaHQpLmxpbmtUbyh0YXJn
ZXQsIHRoaXMpOwogICAgIH0KIAotICAgIHZvaWQgam5lMzIoUmVnaXN0ZXJJRCBvcDEsIEltbTMy
IGltbSwgTGFiZWwgdGFyZ2V0KQorICAgIHZvaWQgYnJhbmNoMTYoQ29uZGl0aW9uIGNvbmQsIEJh
c2VJbmRleCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBMYWJlbCB0YXJnZXQpCiAgICAgewotICAg
ICAgICBqbmUzMihvcDEsIGltbSkubGlua1RvKHRhcmdldCwgdGhpcyk7CisgICAgICAgIGJyYW5j
aDE2KGNvbmQsIGxlZnQsIHJpZ2h0KS5saW5rVG8odGFyZ2V0LCB0aGlzKTsKICAgICB9Ci0KLSAg
ICB2b2lkIGp6UHRyKFJlZ2lzdGVySUQgcmVnLCBMYWJlbCB0YXJnZXQpCisgICAgCisgICAgdm9p
ZCBicmFuY2hUZXN0UHRyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHJlZywgTGFiZWwgdGFy
Z2V0KQogICAgIHsKLSAgICAgICAganpQdHIocmVnKS5saW5rVG8odGFyZ2V0LCB0aGlzKTsKKyAg
ICAgICAgYnJhbmNoVGVzdFB0cihjb25kLCByZWcpLmxpbmtUbyh0YXJnZXQsIHRoaXMpOwogICAg
IH0KIAogICAgIHZvaWQganVtcChMYWJlbCB0YXJnZXQpCkBAIC0xODMwLDcwICsxNDI2LDYwIEBA
IHB1YmxpYzoKICAgICAvLyAqIGpvIG9wZXJhdGlvbnMgYnJhbmNoIGlmIHRoZSAoc2lnbmVkKSBh
cml0aG1ldGljCiAgICAgLy8gICBvcGVyYXRpb24gY2F1c2VkIGFuIG92ZXJmbG93IHRvIG9jY3Vy
LgogCi0gICAgSnVtcCBqbnpTdWJQdHIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCi0gICAg
ewotICAgICAgICBzdWJQdHIoaW1tLCBkZXN0KTsKLSAgICAgICAgcmV0dXJuIEp1bXAobV9hc3Nl
bWJsZXIuam5lKCkpOwotICAgIH0KLSAgICAKLSAgICBKdW1wIGpuelN1YjMyKEltbTMyIGltbSwg
UmVnaXN0ZXJJRCBkZXN0KQotICAgIHsKLSAgICAgICAgc3ViMzIoaW1tLCBkZXN0KTsKLSAgICAg
ICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam5lKCkpOwotICAgIH0KLSAgICAKLSAgICBKdW1w
IGpvQWRkUHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgSnVtcCBicmFu
Y2hBZGRQdHIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CiAgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cpIHx8IChjb25kID09IFpl
cm8pIHx8IChjb25kID09IE5vblplcm8pKTsKICAgICAgICAgYWRkUHRyKHNyYywgZGVzdCk7Ci0g
ICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpvKCkpOworICAgICAgICByZXR1cm4gSnVt
cChtX2Fzc2VtYmxlci5qY2MoY29uZCkpOwogICAgIH0KICAgICAKLSAgICBKdW1wIGpvQWRkMzIo
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICBKdW1wIGJyYW5jaEFkZDMyKENv
bmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKKyAg
ICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29u
ZCA9PSBOb25aZXJvKSk7CiAgICAgICAgIGFkZDMyKHNyYywgZGVzdCk7Ci0gICAgICAgIHJldHVy
biBKdW1wKG1fYXNzZW1ibGVyLmpvKCkpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxl
ci5qY2MoY29uZCkpOwogICAgIH0KICAgICAKLSAgICBKdW1wIGpvQWRkMzIoSW1tMzIgaW1tLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgSnVtcCBicmFuY2hBZGQzMihDb25kaXRpb24gY29uZCwgSW1t
MzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0g
T3ZlcmZsb3cpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKICAgICAg
ICAgYWRkMzIoaW1tLCBkZXN0KTsKLSAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam8o
KSk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpjYyhjb25kKSk7CiAgICAgfQog
ICAgIAotICAgIEp1bXAgam9NdWwzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIEp1bXAgYnJhbmNoTXVsMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCiAgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cpIHx8
IChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKICAgICAgICAgbXVsMzIoc3Jj
LCBkZXN0KTsKLSAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam8oKSk7CisgICAgICAg
IHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpjYyhjb25kKSk7CiAgICAgfQogICAgIAotICAgIEp1
bXAgam9NdWwzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgSnVtcCBicmFuY2hNdWwzMihDb25kaXRpb24gY29uZCwgSW1tMzIgaW1tLCBSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IE92
ZXJmbG93KSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CiAgICAgICAg
IG11bDMyKGltbSwgc3JjLCBkZXN0KTsKLSAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIu
am8oKSk7Ci0gICAgfQotICAgIAotICAgIEp1bXAgam9TdWIzMihSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBkZXN0KQotICAgIHsKLSAgICAgICAgc3ViMzIoc3JjLCBkZXN0KTsKLSAgICAgICAg
cmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam8oKSk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNz
ZW1ibGVyLmpjYyhjb25kKSk7CiAgICAgfQogICAgIAotICAgIEp1bXAgam9TdWIzMihJbW0zMiBp
bW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICBKdW1wIGJyYW5jaFN1YlB0cihDb25kaXRpb24gY29u
ZCwgSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewotICAgICAgICBzdWIzMihpbW0s
IGRlc3QpOwotICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbygpKTsKKyAgICAgICAg
QVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBO
b25aZXJvKSk7CisgICAgICAgIHN1YlB0cihpbW0sIGRlc3QpOworICAgICAgICByZXR1cm4gSnVt
cChtX2Fzc2VtYmxlci5qY2MoY29uZCkpOwogICAgIH0KICAgICAKLSAgICBKdW1wIGp6U3ViUHRy
KEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIEp1bXAgYnJhbmNoU3ViMzIoQ29uZGl0
aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewotICAgICAg
ICBzdWJQdHIoaW1tLCBkZXN0KTsKLSAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuamUo
KSk7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gWmVybykg
fHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAgICBzdWIzMihzcmMsIGRlc3QpOworICAgICAg
ICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qY2MoY29uZCkpOwogICAgIH0KICAgICAKLSAgICBK
dW1wIGp6U3ViMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgSnVtcCBicmFuY2hT
dWIzMihDb25kaXRpb24gY29uZCwgSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewor
ICAgICAgICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cpIHx8IChjb25kID09IFplcm8pIHx8IChj
b25kID09IE5vblplcm8pKTsKICAgICAgICAgc3ViMzIoaW1tLCBkZXN0KTsKLSAgICAgICAgcmV0
dXJuIEp1bXAobV9hc3NlbWJsZXIuamUoKSk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1i
bGVyLmpjYyhjb25kKSk7CiAgICAgfQogICAgIAogCkBAIC0xOTY1LDQ5ICsxNTUxLDM0IEBAIHB1
YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIucmV0KCk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRl
MzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgc3JjRGVzdCkKKyAgICB2b2lkIHNldDMyKENv
bmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVy
SUQgZGVzdCkKICAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIoc3JjRGVzdCwgc3Jj
KTsKLSAgICAgICAgbV9hc3NlbWJsZXIuc2V0ZV9yKHNyY0Rlc3QpOwotICAgICAgICBtX2Fzc2Vt
Ymxlci5tb3Z6YmxfcnIoc3JjRGVzdCwgc3JjRGVzdCk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRl
MzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyY0Rlc3QpCi0gICAgewotICAgICAgICBjb21wYXJl
SW1tMzJGb3JCcmFuY2hFcXVhbGl0eShzcmNEZXN0LCBpbW0ubV92YWx1ZSk7Ci0gICAgICAgIG1f
YXNzZW1ibGVyLnNldGVfcihzcmNEZXN0KTsKLSAgICAgICAgbV9hc3NlbWJsZXIubW92emJsX3Jy
KHNyY0Rlc3QsIHNyY0Rlc3QpOwotICAgIH0KLQotICAgIHZvaWQgc2V0bmUzMihSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBzcmNEZXN0KQotICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIuY21w
bF9ycihzcmNEZXN0LCBzcmMpOwotICAgICAgICBtX2Fzc2VtYmxlci5zZXRuZV9yKHNyY0Rlc3Qp
OwotICAgICAgICBtX2Fzc2VtYmxlci5tb3Z6YmxfcnIoc3JjRGVzdCwgc3JjRGVzdCk7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmNtcGxfcnIocmlnaHQsIGxlZnQpOworICAgICAgICBtX2Fzc2VtYmxl
ci5zZXRjY19yKGNvbmQsIGRlc3QpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3Z6YmxfcnIoZGVz
dCwgZGVzdCk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRuZTMyKEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBzcmNEZXN0KQorICAgIHZvaWQgc2V0MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVm
dCwgSW1tMzIgcmlnaHQsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIGNvbXBhcmVJ
bW0zMkZvckJyYW5jaEVxdWFsaXR5KHNyY0Rlc3QsIGltbS5tX3ZhbHVlKTsKLSAgICAgICAgbV9h
c3NlbWJsZXIuc2V0bmVfcihzcmNEZXN0KTsKLSAgICAgICAgbV9hc3NlbWJsZXIubW92emJsX3Jy
KHNyY0Rlc3QsIHNyY0Rlc3QpOworICAgICAgICBpZiAoKChjb25kID09IEVxdWFsKSB8fCAoY29u
ZCA9PSBOb3RFcXVhbCkpICYmICFyaWdodC5tX3ZhbHVlKQorICAgICAgICAgICAgbV9hc3NlbWJs
ZXIudGVzdGxfcnIobGVmdCwgbGVmdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmNtcGxfaXIocmlnaHQubV92YWx1ZSwgbGVmdCk7CisgICAgICAgIG1fYXNzZW1ibGVy
LnNldGNjX3IoY29uZCwgZGVzdCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdnpibF9ycihkZXN0
LCBkZXN0KTsKICAgICB9CiAKICAgICAvLyBGSVhNRToKICAgICAvLyBUaGUgbWFzayBzaG91bGQg
YmUgb3B0aW9uYWwuLi4gcGFlcmhhcHMgdGhlIGFyZ3VtZW50IG9yZGVyIHNob3VsZCBiZQogICAg
IC8vIGRlc3Qtc3JjLCBvcGVyYXRpb25zIGFsd2F5cyBoYXZlIGEgZGVzdD8gLi4uIHBvc3NpYmx5
IG5vdCB0cnVlLCBjb25zaWRlcmluZwogICAgIC8vIGFzbSBvcHMgbGlrZSB0ZXN0LCBvciBwc2V1
ZG8gb3BzIGxpa2UgcG9wKCkuCi0gICAgdm9pZCBzZXRuejMyKEFkZHJlc3MgYWRkcmVzcywgSW1t
MzIgbWFzaywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgc2V0VGVzdDMyKENvbmRpdGlvbiBj
b25kLCBBZGRyZXNzIGFkZHJlc3MsIEltbTMyIG1hc2ssIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7
Ci0gICAgICAgIHRlc3RJbW0zMihhZGRyZXNzLCBtYXNrKTsKLSAgICAgICAgbV9hc3NlbWJsZXIu
c2V0bnpfcihkZXN0KTsKLSAgICAgICAgbV9hc3NlbWJsZXIubW92emJsX3JyKGRlc3QsIGRlc3Qp
OwotICAgIH0KLQotICAgIHZvaWQgc2V0ejMyKEFkZHJlc3MgYWRkcmVzcywgSW1tMzIgbWFzaywg
UmVnaXN0ZXJJRCBkZXN0KQotICAgIHsKLSAgICAgICAgdGVzdEltbTMyKGFkZHJlc3MsIG1hc2sp
OwotICAgICAgICBtX2Fzc2VtYmxlci5zZXR6X3IoZGVzdCk7CisgICAgICAgIGlmIChtYXNrLm1f
dmFsdWUgPT0gLTEpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2ltKDAsIGFkZHJlc3Mu
b2Zmc2V0LCBhZGRyZXNzLmJhc2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci50ZXN0bF9pMzJtKG1hc2subV92YWx1ZSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFz
ZSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnNldGNjX3IoY29uZCwgZGVzdCk7CiAgICAgICAgIG1f
YXNzZW1ibGVyLm1vdnpibF9ycihkZXN0LCBkZXN0KTsKICAgICB9CiB9OwpJbmRleDogYXNzZW1i
bGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFzc2VtYmxlci9YODZBc3NlbWJsZXIu
aAkocmV2aXNpb24gNDA1MjEpCisrKyBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg0LDYgKzg0LDI5IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFg4Njo6WE1NUmVn
aXN0ZXJJRCBYTU1SZWdpc3RlcklEOwogCiAgICAgdHlwZWRlZiBlbnVtIHsKKyAgICAgICAgQ29u
ZGl0aW9uTywKKyAgICAgICAgQ29uZGl0aW9uTk8sCisgICAgICAgIENvbmRpdGlvbkIsCisgICAg
ICAgIENvbmRpdGlvbkFFLAorICAgICAgICBDb25kaXRpb25FLAorICAgICAgICBDb25kaXRpb25O
RSwKKyAgICAgICAgQ29uZGl0aW9uQkUsCisgICAgICAgIENvbmRpdGlvbkEsCisgICAgICAgIENv
bmRpdGlvblMsCisgICAgICAgIENvbmRpdGlvbk5TLAorICAgICAgICBDb25kaXRpb25QLAorICAg
ICAgICBDb25kaXRpb25OUCwKKyAgICAgICAgQ29uZGl0aW9uTCwKKyAgICAgICAgQ29uZGl0aW9u
R0UsCisgICAgICAgIENvbmRpdGlvbkxFLAorICAgICAgICBDb25kaXRpb25HLAorCisgICAgICAg
IENvbmRpdGlvbkMgID0gQ29uZGl0aW9uQiwKKyAgICAgICAgQ29uZGl0aW9uTkMgPSBDb25kaXRp
b25BRSwKKyAgICB9IENvbmRpdGlvbjsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIGVudW0gewog
ICAgICAgICBPUF9BRERfRXZHdiAgICAgICAgICAgICAgICAgICAgID0gMHgwMSwKICAgICAgICAg
T1BfQUREX0d2RXYgICAgICAgICAgICAgICAgICAgICA9IDB4MDMsCiAgICAgICAgIE9QX09SX0V2
R3YgICAgICAgICAgICAgICAgICAgICAgPSAweDA5LApAQCAtMTQ3LDI3ICsxNzAsMjQgQEAgcHVi
bGljOgogICAgICAgICBPUDJfU1VCU0RfVnNkV3NkICAgID0gMHg1QywKICAgICAgICAgT1AyX01P
VkRfVmRFZCAgICAgICA9IDB4NkUsCiAgICAgICAgIE9QMl9NT1ZEX0VkVmQgICAgICAgPSAweDdF
LAotICAgICAgICBPUDJfSk9fcmVsMzIgICAgICAgID0gMHg4MCwKLSAgICAgICAgT1AyX0pCX3Jl
bDMyICAgICAgICA9IDB4ODIsCi0gICAgICAgIE9QMl9KQUVfcmVsMzIgICAgICAgPSAweDgzLAot
ICAgICAgICBPUDJfSkVfcmVsMzIgICAgICAgID0gMHg4NCwKLSAgICAgICAgT1AyX0pORV9yZWwz
MiAgICAgICA9IDB4ODUsCi0gICAgICAgIE9QMl9KQkVfcmVsMzIgICAgICAgPSAweDg2LAotICAg
ICAgICBPUDJfSkFfcmVsMzIgICAgICAgID0gMHg4NywKLSAgICAgICAgT1AyX0pTX3JlbDMyICAg
ICAgICA9IDB4ODgsCi0gICAgICAgIE9QMl9KUF9yZWwzMiAgICAgICAgPSAweDhBLAotICAgICAg
ICBPUDJfSkxfcmVsMzIgICAgICAgID0gMHg4QywKLSAgICAgICAgT1AyX0pHRV9yZWwzMiAgICAg
ICA9IDB4OEQsCi0gICAgICAgIE9QMl9KTEVfcmVsMzIgICAgICAgPSAweDhFLAotICAgICAgICBP
UDJfSkdfcmVsMzIgICAgICAgID0gMHg4RiwKLSAgICAgICAgT1BfU0VURSAgICAgICAgICAgICA9
IDB4OTQsCi0gICAgICAgIE9QX1NFVE5FICAgICAgICAgICAgPSAweDk1LAorICAgICAgICBPUDJf
SkNDX3JlbDMyICAgICAgID0gMHg4MCwKKyAgICAgICAgT1BfU0VUQ0MgICAgICAgICAgICA9IDB4
OTAsCiAgICAgICAgIE9QMl9JTVVMX0d2RXYgICAgICAgPSAweEFGLAogICAgICAgICBPUDJfTU9W
WlhfR3ZFYiAgICAgID0gMHhCNiwKICAgICAgICAgT1AyX01PVlpYX0d2RXcgICAgICA9IDB4Qjcs
CiAgICAgICAgIE9QMl9QRVhUUldfR2RVZEliICAgPSAweEM1LAogICAgIH0gVHdvQnl0ZU9wY29k
ZUlEOwogCisgICAgVHdvQnl0ZU9wY29kZUlEIGpjY1JlbDMyKENvbmRpdGlvbiBjb25kKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIChUd29CeXRlT3Bjb2RlSUQpKE9QMl9KQ0NfcmVsMzIgKyBjb25k
KTsKKyAgICB9CisKKyAgICBUd29CeXRlT3Bjb2RlSUQgc2V0Y2NPcGNvZGUoQ29uZGl0aW9uIGNv
bmQpCisgICAgeworICAgICAgICByZXR1cm4gKFR3b0J5dGVPcGNvZGVJRCkoT1BfU0VUQ0MgKyBj
b25kKTsKKyAgICB9CisKICAgICB0eXBlZGVmIGVudW0gewogICAgICAgICBHUk9VUDFfT1BfQURE
ID0gMCwKICAgICAgICAgR1JPVVAxX09QX09SICA9IDEsCkBAIC0xOTIsOSArMjEyLDYgQEAgcHVi
bGljOgogICAgICAgICBHUk9VUDExX01PViA9IDAsCiAgICAgfSBHcm91cE9wY29kZUlEOwogICAg
IAotICAgIC8vIE9wYXF1ZSBsYWJlbCB0eXBlcwotICAgIAotcHJpdmF0ZToKICAgICBjbGFzcyBY
ODZJbnN0cnVjdGlvbkZvcm1hdHRlcjsKIHB1YmxpYzoKIApAQCAtNjQwLDYgKzY1NywxMSBAQCBw
dWJsaWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcDY0KE9QX0NNUF9Fdkd2LCBzcmMs
IGJhc2UsIG9mZnNldCk7CiAgICAgfQogCisgICAgdm9pZCBjbXBxX21yKGludCBvZmZzZXQsIFJl
Z2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRl
ci5vbmVCeXRlT3A2NChPUF9DTVBfR3ZFdiwgc3JjLCBiYXNlLCBvZmZzZXQpOworICAgIH0KKwog
ICAgIHZvaWQgY21wcV9pcihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKICAgICB7CiAgICAgICAg
IGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7CkBAIC03NTAsOSArNzcyLDE0IEBAIHB1
YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOwogICAgIH0KIAorICAg
IHZvaWQgc2V0Y2NfcihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBkc3QpCisgICAgeworICAg
ICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A4KHNldGNjT3Bjb2RlKGNvbmQpLCAoR3JvdXBPcGNv
ZGVJRCkwLCBkc3QpOworICAgIH0KKwogICAgIHZvaWQgc2V0ZV9yKFJlZ2lzdGVySUQgZHN0KQog
ICAgIHsKLSAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wOChPUF9TRVRFLCAoR3JvdXBPcGNv
ZGVJRCkwLCBkc3QpOworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3A4KHNldGNjT3Bjb2Rl
KENvbmRpdGlvbkUpLCAoR3JvdXBPcGNvZGVJRCkwLCBkc3QpOwogICAgIH0KIAogICAgIHZvaWQg
c2V0el9yKFJlZ2lzdGVySUQgZHN0KQpAQCAtNzYyLDcgKzc4OSw3IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgc2V0bmVfcihSZWdpc3RlcklEIGRzdCkKICAgICB7Ci0gICAgICAgIG1fZm9ybWF0dGVy
LnR3b0J5dGVPcDgoT1BfU0VUTkUsIChHcm91cE9wY29kZUlEKTAsIGRzdCk7CisgICAgICAgIG1f
Zm9ybWF0dGVyLnR3b0J5dGVPcDgoc2V0Y2NPcGNvZGUoQ29uZGl0aW9uTkUpLCAoR3JvdXBPcGNv
ZGVJRCkwLCBkc3QpOwogICAgIH0KIAogICAgIHZvaWQgc2V0bnpfcihSZWdpc3RlcklEIGRzdCkK
QEAgLTk4MSw3ICsxMDA4LDcgQEAgcHVibGljOgogCiAgICAgSm1wU3JjIGpuZSgpCiAgICAgewot
ICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0pORV9yZWwzMik7CisgICAgICAgIG1f
Zm9ybWF0dGVyLnR3b0J5dGVPcChqY2NSZWwzMihDb25kaXRpb25ORSkpOwogICAgICAgICByZXR1
cm4gbV9mb3JtYXR0ZXIuaW1tZWRpYXRlUmVsMzIoKTsKICAgICB9CiAgICAgCkBAIC05OTIsNzMg
KzEwMTksNzkgQEAgcHVibGljOgogCiAgICAgSm1wU3JjIGplKCkKICAgICB7Ci0gICAgICAgIG1f
Zm9ybWF0dGVyLnR3b0J5dGVPcChPUDJfSkVfcmVsMzIpOworICAgICAgICBtX2Zvcm1hdHRlci50
d29CeXRlT3AoamNjUmVsMzIoQ29uZGl0aW9uRSkpOwogICAgICAgICByZXR1cm4gbV9mb3JtYXR0
ZXIuaW1tZWRpYXRlUmVsMzIoKTsKICAgICB9CiAgICAgCiAgICAgSm1wU3JjIGpsKCkKICAgICB7
Ci0gICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChPUDJfSkxfcmVsMzIpOworICAgICAgICBt
X2Zvcm1hdHRlci50d29CeXRlT3AoamNjUmVsMzIoQ29uZGl0aW9uTCkpOwogICAgICAgICByZXR1
cm4gbV9mb3JtYXR0ZXIuaW1tZWRpYXRlUmVsMzIoKTsKICAgICB9CiAgICAgCiAgICAgSm1wU3Jj
IGpiKCkKICAgICB7Ci0gICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChPUDJfSkJfcmVsMzIp
OworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoamNjUmVsMzIoQ29uZGl0aW9uQikpOwog
ICAgICAgICByZXR1cm4gbV9mb3JtYXR0ZXIuaW1tZWRpYXRlUmVsMzIoKTsKICAgICB9CiAgICAg
CiAgICAgSm1wU3JjIGpsZSgpCiAgICAgewotICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3Ao
T1AyX0pMRV9yZWwzMik7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChqY2NSZWwzMihD
b25kaXRpb25MRSkpOwogICAgICAgICByZXR1cm4gbV9mb3JtYXR0ZXIuaW1tZWRpYXRlUmVsMzIo
KTsKICAgICB9CiAgICAgCiAgICAgSm1wU3JjIGpiZSgpCiAgICAgewotICAgICAgICBtX2Zvcm1h
dHRlci50d29CeXRlT3AoT1AyX0pCRV9yZWwzMik7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5
dGVPcChqY2NSZWwzMihDb25kaXRpb25CRSkpOwogICAgICAgICByZXR1cm4gbV9mb3JtYXR0ZXIu
aW1tZWRpYXRlUmVsMzIoKTsKICAgICB9CiAgICAgCiAgICAgSm1wU3JjIGpnZSgpCiAgICAgewot
ICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0pHRV9yZWwzMik7CisgICAgICAgIG1f
Zm9ybWF0dGVyLnR3b0J5dGVPcChqY2NSZWwzMihDb25kaXRpb25HRSkpOwogICAgICAgICByZXR1
cm4gbV9mb3JtYXR0ZXIuaW1tZWRpYXRlUmVsMzIoKTsKICAgICB9CiAKICAgICBKbXBTcmMgamco
KQogICAgIHsKLSAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKE9QMl9KR19yZWwzMik7Cisg
ICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChqY2NSZWwzMihDb25kaXRpb25HKSk7CiAgICAg
ICAgIHJldHVybiBtX2Zvcm1hdHRlci5pbW1lZGlhdGVSZWwzMigpOwogICAgIH0KIAogICAgIEpt
cFNyYyBqYSgpCiAgICAgewotICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0pBX3Jl
bDMyKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKGpjY1JlbDMyKENvbmRpdGlvbkEp
KTsKICAgICAgICAgcmV0dXJuIG1fZm9ybWF0dGVyLmltbWVkaWF0ZVJlbDMyKCk7CiAgICAgfQog
ICAgIAogICAgIEptcFNyYyBqYWUoKQogICAgIHsKLSAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0
ZU9wKE9QMl9KQUVfcmVsMzIpOworICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoamNjUmVs
MzIoQ29uZGl0aW9uQUUpKTsKICAgICAgICAgcmV0dXJuIG1fZm9ybWF0dGVyLmltbWVkaWF0ZVJl
bDMyKCk7CiAgICAgfQogICAgIAogICAgIEptcFNyYyBqbygpCiAgICAgewotICAgICAgICBtX2Zv
cm1hdHRlci50d29CeXRlT3AoT1AyX0pPX3JlbDMyKTsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdv
Qnl0ZU9wKGpjY1JlbDMyKENvbmRpdGlvbk8pKTsKICAgICAgICAgcmV0dXJuIG1fZm9ybWF0dGVy
LmltbWVkaWF0ZVJlbDMyKCk7CiAgICAgfQogCiAgICAgSm1wU3JjIGpwKCkKICAgICB7Ci0gICAg
ICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChPUDJfSlBfcmVsMzIpOworICAgICAgICBtX2Zvcm1h
dHRlci50d29CeXRlT3AoamNjUmVsMzIoQ29uZGl0aW9uUCkpOwogICAgICAgICByZXR1cm4gbV9m
b3JtYXR0ZXIuaW1tZWRpYXRlUmVsMzIoKTsKICAgICB9CiAgICAgCiAgICAgSm1wU3JjIGpzKCkK
ICAgICB7Ci0gICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChPUDJfSlNfcmVsMzIpOworICAg
ICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoamNjUmVsMzIoQ29uZGl0aW9uUykpOworICAgICAg
ICByZXR1cm4gbV9mb3JtYXR0ZXIuaW1tZWRpYXRlUmVsMzIoKTsKKyAgICB9CisKKyAgICBKbXBT
cmMgamNjKENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0
ZU9wKGpjY1JlbDMyKGNvbmQpKTsKICAgICAgICAgcmV0dXJuIG1fZm9ybWF0dGVyLmltbWVkaWF0
ZVJlbDMyKCk7CiAgICAgfQogCkBAIC0xNjAxLDEzICsxNjM0LDggQEAgcHJpdmF0ZToKICAgICAg
ICAgewogICAgICAgICAgICAgQVNTRVJUKG1vZGUgIT0gTW9kUm1SZWdpc3Rlcik7CiAKLSAgICAg
ICAgICAgIC8vIEVuY29kZSBzYWNsZSBvZiAoMSwyLDQsOCkgLT4gKDAsMSwyLDMpCi0gICAgICAg
ICAgICBpbnQgc2hpZnQgPSAwOwotICAgICAgICAgICAgd2hpbGUgKHNjYWxlID4+PSAxKQotICAg
ICAgICAgICAgICAgIHNoaWZ0Kys7Ci0KICAgICAgICAgICAgIHB1dE1vZFJtKG1vZGUsIHJlZywg
aGFzU2liKTsKLSAgICAgICAgICAgIG1fYnVmZmVyLnB1dEJ5dGVVbmNoZWNrZWQoKHNoaWZ0IDw8
IDYpIHwgKChpbmRleCAmIDcpIDw8IDMpIHwgKGJhc2UgJiA3KSk7CisgICAgICAgICAgICBtX2J1
ZmZlci5wdXRCeXRlVW5jaGVja2VkKChzY2FsZSA8PCA2KSB8ICgoaW5kZXggJiA3KSA8PCAzKSB8
IChiYXNlICYgNykpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCByZWdpc3Rlck1vZFJNKGlu
dCByZWcsIFJlZ2lzdGVySUQgcm0pCkluZGV4OiBqaXQvSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBq
aXQvSklULmNwcAkocmV2aXNpb24gNDA1MjEpCisrKyBqaXQvSklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjM4LDkgKzIzOCw5IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShJbnN0cnVj
dGlvbioKICAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmSW1tZWRpYXRlTnVtYmVyKFg4Njo6ZWN4
KSk7CiAKICAgICBpZiAodHlwZSA9PSBPcFN0cmljdEVxKQotICAgICAgICBzZXRlMzIoWDg2Ojpl
ZHgsIFg4Njo6ZWF4KTsKKyAgICAgICAgc2V0MzIoRXF1YWwsIFg4Njo6ZWR4LCBYODY6OmVheCwg
WDg2OjplYXgpOwogICAgIGVsc2UKLSAgICAgICAgc2V0bmUzMihYODY6OmVkeCwgWDg2OjplYXgp
OworICAgICAgICBzZXQzMihOb3RFcXVhbCwgWDg2OjplZHgsIFg4Njo6ZWF4LCBYODY6OmVheCk7
CiAgICAgZW1pdFRhZ0FzQm9vbEltbWVkaWF0ZShYODY6OmVheCk7CiAjZWxzZQogICAgIGJvb2wg
bmVnYXRlZCA9ICh0eXBlID09IE9wTlN0cmljdEVxKTsKQEAgLTI0OCw3ICsyNDgsNyBAQCB2b2lk
IEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoSW5zdHJ1Y3Rpb24qCiAgICAgLy8gQ2hlY2sgdGhhdCBi
b3RoIGFyZSBpbW1lZGlhdGVzLCBpZiBzbyBjaGVjayBpZiB0aGV5J3JlIGVxdWFsCiAgICAgSnVt
cCBmaXJzdE5vdEltbWVkaWF0ZSA9IGVtaXRKdW1wSWZKU0NlbGwoWDg2OjplYXgpOwogICAgIEp1
bXAgc2Vjb25kTm90SW1tZWRpYXRlID0gZW1pdEp1bXBJZkpTQ2VsbChYODY6OmVkeCk7Ci0gICAg
SnVtcCBib3RoV2VyZUltbWVkaWF0ZXNCdXROb3RFcXVhbCA9IGpuZVB0cihYODY6OmVkeCwgWDg2
OjplYXgpOworICAgIEp1bXAgYm90aFdlcmVJbW1lZGlhdGVzQnV0Tm90RXF1YWwgPSBicmFuY2hQ
dHIoTm90RXF1YWwsIFg4Njo6ZWR4LCBYODY6OmVheCk7CiAKICAgICAvLyBUaGV5IGFyZSBlcXVh
bCAtIHNldCB0aGUgcmVzdWx0IHRvIHRydWUuIChPciBmYWxzZSwgaWYgbmVnYXRlZCkuCiAgICAg
bW92ZShJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzQm9vbGVhbighbmVnYXRlZCkpKSwgWDg2
OjplYXgpOwpAQCAtMjU5LDEzICsyNTksMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVx
KEluc3RydWN0aW9uKgogICAgIC8vIG90aGVyd2lzZSB0aGVzZSB2YWx1ZXMgYXJlIG5vdCBlcXVh
bC4KICAgICBmaXJzdE5vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwogICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZkpTQ2VsbChYODY6OmVkeCk7Ci0gICAgYWRkU2xvd0Nhc2UoamVQdHIoWDg2OjplZHgsIElt
bVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoanMwKCkpKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5j
aFB0cihFcXVhbCwgWDg2OjplZHgsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoanMwKCkpKSkp
OwogICAgIEp1bXAgZmlyc3RXYXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKICAgICAvLyBlYXgg
d2FzIGFuIGltbWVkaWF0ZSwgYnV0IGVkeCB3YXNuJ3QuCiAgICAgLy8gSWYgZWF4IGlzIDAganVt
cCB0byBhIHNsb3cgY2FzZSwgb3RoZXJ3aXNlIHRoZXNlIHZhbHVlcyBhcmUgbm90IGVxdWFsLgog
ICAgIHNlY29uZE5vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGplUHRy
KFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzMCgpKSkpKTsKKyAgICBhZGRT
bG93Q2FzZShicmFuY2hQdHIoRXF1YWwsIFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5j
b2RlKGpzMCgpKSkpKTsKIAogICAgIC8vIFdlIGdldCBoZXJlIGlmIHRoZSB0d28gdmFsdWVzIGFy
ZSBkaWZmZXJlbnQgaW1tZWRpYXRlcywgb3Igb25lIGlzIDAgYW5kIHRoZSBvdGhlciBpcyBhIEpT
Q2VsbC4KICAgICAvLyBWYWVsdWVzIGFyZSBub3QgZXF1YWwsIHNldCB0aGUgcmVzdWx0IHRvIGZh
bHNlLgpAQCAtMjgxLDcgKzI4MSw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShJbnN0
cnVjdGlvbioKIAogdm9pZCBKSVQ6OmVtaXRTbG93U2NyaXB0Q2hlY2soKQogewotICAgIEp1bXAg
c2tpcFRpbWVvdXQgPSBqbnpTdWIzMihJbW0zMigxKSwgdGltZW91dENoZWNrUmVnaXN0ZXIpOwor
ICAgIEp1bXAgc2tpcFRpbWVvdXQgPSBicmFuY2hTdWIzMihOb25aZXJvLCBJbW0zMigxKSwgdGlt
ZW91dENoZWNrUmVnaXN0ZXIpOwogICAgIGVtaXRDVElDYWxsKEludGVycHJldGVyOjpjdGlfdGlt
ZW91dF9jaGVjayk7CiAgICAgbW92ZShYODY6OmVheCwgdGltZW91dENoZWNrUmVnaXN0ZXIpOwog
ICAgIHNraXBUaW1lb3V0LmxpbmsodGhpcyk7CkBAIC0zNzksMTIgKzM3OSwxMiBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAjZWxzZQogICAgICAgICAgICAgICAgIGludDMy
X3Qgb3AyaW1tID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oSlNJbW1lZGlhdGU6OnJhd1ZhbHVlKGdl
dENvbnN0YW50T3BlcmFuZChvcDIpKSk7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICBhZGRKdW1w
KGpsMzIoWDg2OjplYXgsIEltbTMyKG9wMmltbSkpLCB0YXJnZXQgKyAzKTsKKyAgICAgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKExlc3NUaGFuLCBYODY6OmVheCwgSW1tMzIob3AyaW1tKSks
IHRhcmdldCArIDMpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIFg4Njo6ZWF4LCBvcDIsIFg4Njo6ZWR4KTsKICAgICAg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKFg4Njo6ZWF4
KTsKICAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2Vy
KFg4Njo6ZWR4KTsKLSAgICAgICAgICAgICAgICBhZGRKdW1wKGpsMzIoWDg2OjplYXgsIFg4Njo6
ZWR4KSwgdGFyZ2V0ICsgMyk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihMZXNz
VGhhbiwgWDg2OjplYXgsIFg4Njo6ZWR4KSwgdGFyZ2V0ICsgMyk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9sb29wX2lmX2xlc3MpOwogICAgICAgICB9CkBAIC00
MDIsMTIgKzQwMiwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAjZWxz
ZQogICAgICAgICAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4o
SlNJbW1lZGlhdGU6OnJhd1ZhbHVlKGdldENvbnN0YW50T3BlcmFuZChvcDIpKSk7CiAjZW5kaWYK
LSAgICAgICAgICAgICAgICBhZGRKdW1wKGpsZTMyKFg4Njo6ZWF4LCBJbW0zMihvcDJpbW0pKSwg
dGFyZ2V0ICsgMyk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihMZXNzVGhhbk9y
RXF1YWwsIFg4Njo6ZWF4LCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0ICsgMyk7CiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwg
WDg2OjplYXgsIG9wMiwgWDg2OjplZHgpOwogICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEltbWVkaWF0ZUludGVnZXIoWDg2OjplYXgpOwogICAgICAgICAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIoWDg2OjplZHgpOwotICAgICAgICAgICAg
ICAgIGFkZEp1bXAoamxlMzIoWDg2OjplYXgsIFg4Njo6ZWR4KSwgdGFyZ2V0ICsgMyk7CisgICAg
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIFg4Njo6ZWF4LCBY
ODY6OmVkeCksIHRhcmdldCArIDMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfbG9vcF9pZl9sZXNzKTsKICAgICAgICAgfQpAQCAtNDQ0LDEyICs0NDQsMTIgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSkpLCBYODY6
OmVkeCk7CiAgICAgICAgICAgICBzdWIzMihBZGRyZXNzKFg4Njo6ZWF4LCBGSUVMRF9PRkZTRVQo
U3RydWN0dXJlLCBtX3R5cGVJbmZvLm1fdHlwZSkpLCBYODY6OmVieCk7CiAgICAgICAgICAgICBz
dWIzMihBZGRyZXNzKFg4Njo6ZWN4LCBGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZv
Lm1fdHlwZSkpLCBYODY6OmVieCk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqbmUzMihBZGRy
ZXNzKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvLm1fdHlwZSkp
LCBYODY6OmVieCkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IEFkZHJlc3MoWDg2OjplZHgsIEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8ubV90
eXBlKSksIFg4Njo6ZWJ4KSk7CiAKICAgICAgICAgICAgIC8vIGNoZWNrIHRoYXQgYmFzZVZhbCdz
IGZsYWdzIGluY2x1ZGUgSW1wbGVtZW50c0hhc0luc3RhbmNlIGJ1dCBub3QgT3ZlcnJpZGVzSGFz
SW5zdGFuY2UKICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKFg4Njo6ZWN4LCBGSUVMRF9PRkZT
RVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvLm1fZmxhZ3MpKSwgWDg2OjplY3gpOwogICAgICAgICAg
ICAgYW5kMzIoSW1tMzIoSW1wbGVtZW50c0hhc0luc3RhbmNlIHwgT3ZlcnJpZGVzSGFzSW5zdGFu
Y2UpLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqbmUzMihYODY6OmVjeCwg
SW1tMzIoSW1wbGVtZW50c0hhc0luc3RhbmNlKSkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIFg4Njo6ZWN4LCBJbW0zMihJbXBsZW1lbnRzSGFzSW5zdGFuY2Up
KSk7CiAKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCwgWDg2OjplY3gpOyAvLyByZWxvYWQgdmFsdWUKICAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCwg
WDg2OjplZHgpOyAvLyByZWxvYWQgcHJvdG8KQEAgLTQ2Myw5ICs0NjMsOSBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoWDg2
OjplY3gsIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSksIFg4Njo6ZWN4KTsKICAg
ICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhYODY6OmVjeCwgRklFTERfT0ZGU0VUKFN0cnVjdHVy
ZSwgbV9wcm90b3R5cGUpKSwgWDg2OjplY3gpOwogCi0gICAgICAgICAgICBKdW1wIGV4aXQgPSBq
ZVB0cihYODY6OmVjeCwgWDg2OjplZHgpOworICAgICAgICAgICAgSnVtcCBleGl0ID0gYnJhbmNo
UHRyKEVxdWFsLCBYODY6OmVjeCwgWDg2OjplZHgpOwogCi0gICAgICAgICAgICBqbmVQdHIoWDg2
OjplY3gsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoanNOdWxsKCkpKSwgbG9vcCk7CisgICAg
ICAgICAgICBicmFuY2hQdHIoTm90RXF1YWwsIFg4Njo6ZWN4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6
ZW5jb2RlKGpzTnVsbCgpKSksIGxvb3ApOwogCiAgICAgICAgICAgICBtb3ZlKEltbVB0cihKU1Zh
bHVlUHRyOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpLCBYODY6OmVheCk7CiAKQEAgLTU5Miw3
ICs1OTIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAKICAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVheCk7CiAgICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MoWDg2OjplYXgsIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJl
KSksIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGpuZTMyKEFkZHJlc3MoWDg2
OjplY3gsIEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8pICsgRklFTERfT0ZGU0VU
KFR5cGVJbmZvLCBtX3R5cGUpKSwgSW1tMzIoT2JqZWN0VHlwZSkpKTsKKyAgICAgICAgICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKFg4Njo6ZWN4LCBGSUVMRF9PRkZT
RVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvKSArIEZJRUxEX09GRlNFVChUeXBlSW5mbywgbV90eXBl
KSksIEltbTMyKE9iamVjdFR5cGUpKSk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2Nv
bnN0cnVjdF92ZXJpZnkpOwogICAgICAgICB9CkBAIC02MTEsMTEgKzYxMSwxMSBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBlbWl0RmFzdEFyaXRoSW1t
VG9JbnQoWDg2OjplZHgpOwogI2VuZGlmCiAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoWDg2OjplYXgpOwotICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoam5lUHRyKEFkZHJl
c3MoWDg2OjplYXgpLCBJbW1QdHIobV9pbnRlcnByZXRlci0+bV9qc0FycmF5VnB0cikpKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhYODY6OmVh
eCksIEltbVB0cihtX2ludGVycHJldGVyLT5tX2pzQXJyYXlWcHRyKSkpOwogCiAgICAgICAgICAg
ICAvLyBUaGlzIGlzIGFuIGFycmF5OyBnZXQgdGhlIG1fc3RvcmFnZSBwb2ludGVyIGludG8gZWN4
LCB0aGVuIGNoZWNrIGlmIHRoZSBpbmRleCBpcyBiZWxvdyB0aGUgZmFzdCBjdXRvZmYKICAgICAg
ICAgICAgIGxvYWRQdHIoQWRkcmVzcyhYODY6OmVheCwgRklFTERfT0ZGU0VUKEpTQXJyYXksIG1f
c3RvcmFnZSkpLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqYWUzMihYODY6
OmVkeCwgQWRkcmVzcyhYODY6OmVheCwgRklFTERfT0ZGU0VUKEpTQXJyYXksIG1fZmFzdEFjY2Vz
c0N1dG9mZikpKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1
YWwsIFg4Njo6ZWR4LCBBZGRyZXNzKFg4Njo6ZWF4LCBGSUVMRF9PRkZTRVQoSlNBcnJheSwgbV9m
YXN0QWNjZXNzQ3V0b2ZmKSkpKTsKIAogICAgICAgICAgICAgLy8gR2V0IHRoZSB2YWx1ZSBmcm9t
IHRoZSB2ZWN0b3IKICAgICAgICAgICAgIGxvYWRQdHIoQmFzZUluZGV4KFg4Njo6ZWN4LCBYODY6
OmVkeCwgU2NhbGVQdHIsIEZJRUxEX09GRlNFVChBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSks
IFg4Njo6ZWF4KTsKQEAgLTY0NCwxNyArNjQ0LDE3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKCkKICAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhJbW1Ub0ludChYODY6OmVkeCk7
CiAjZW5kaWYKICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVh
eCk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqbmVQdHIoQWRkcmVzcyhYODY6OmVheCksIElt
bVB0cihtX2ludGVycHJldGVyLT5tX2pzQXJyYXlWcHRyKSkpOworICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKFg4Njo6ZWF4KSwgSW1tUHRyKG1faW50
ZXJwcmV0ZXItPm1fanNBcnJheVZwdHIpKSk7CiAKICAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4g
YXJyYXk7IGdldCB0aGUgbV9zdG9yYWdlIHBvaW50ZXIgaW50byBlY3gsIHRoZW4gY2hlY2sgaWYg
dGhlIGluZGV4IGlzIGJlbG93IHRoZSBmYXN0IGN1dG9mZgogICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKFg4Njo6ZWF4LCBGSUVMRF9PRkZTRVQoSlNBcnJheSwgbV9zdG9yYWdlKSksIFg4Njo6
ZWN4KTsKLSAgICAgICAgICAgIEp1bXAgaW5GYXN0VmVjdG9yID0gamIzMihYODY6OmVkeCwgQWRk
cmVzcyhYODY6OmVheCwgRklFTERfT0ZGU0VUKEpTQXJyYXksIG1fZmFzdEFjY2Vzc0N1dG9mZikp
KTsKKyAgICAgICAgICAgIEp1bXAgaW5GYXN0VmVjdG9yID0gYnJhbmNoMzIoQmVsb3csIFg4Njo6
ZWR4LCBBZGRyZXNzKFg4Njo6ZWF4LCBGSUVMRF9PRkZTRVQoSlNBcnJheSwgbV9mYXN0QWNjZXNz
Q3V0b2ZmKSkpOwogICAgICAgICAgICAgLy8gTm87IG9oIHdlbGwsIGNoZWNrIGlmIHRoZSBhY2Nl
c3MgaWYgd2l0aGluIHRoZSB2ZWN0b3IgLSBpZiBzbywgd2UgbWF5IHN0aWxsIGJlIG9rYXkuCi0g
ICAgICAgICAgICBhZGRTbG93Q2FzZShqYWUzMihYODY6OmVkeCwgQWRkcmVzcyhYODY6OmVjeCwg
RklFTERfT0ZGU0VUKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JMZW5ndGgpKSkpOworICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBYODY6OmVkeCwgQWRkcmVzcyhY
ODY6OmVjeCwgRklFTERfT0ZGU0VUKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JMZW5ndGgpKSkpOwog
CiAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgd3JpdGUgdG8gdGhlIHNsb3cgcGFydCBvZiB0aGUg
dmVjdG9yOyBmaXJzdCwgd2UgaGF2ZSB0byBjaGVjayBpZiB0aGlzIHdvdWxkIGJlIHRoZSBmaXJz
dCB3cml0ZSB0byB0aGlzIGxvY2F0aW9uLgogICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCBi
ZSBhYmxlIHRvIGhhbmRsZSBpbml0aWFsIHdyaXRlIHRvIGFycmF5OyBpbmNyZW1lbnQgdGhlIHRo
ZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGFycmF5LCBhbmQgcG90ZW50aWFsbHkgdXBkYXRlIGZh
c3QgYWNjZXNzIGN1dG9mZi4gCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShqelB0cihCYXNlSW5k
ZXgoWDg2OjplY3gsIFg4Njo6ZWR4LCBTY2FsZVB0ciwgRklFTERfT0ZGU0VUKEFycmF5U3RvcmFn
ZSwgbV92ZWN0b3JbMF0pKSkpOworICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0
cihaZXJvLCBCYXNlSW5kZXgoWDg2OjplY3gsIFg4Njo6ZWR4LCBTY2FsZVB0ciwgRklFTERfT0ZG
U0VUKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSkpOwogCiAgICAgICAgICAgICAvLyBBbGwg
Z29vZCAtIHB1dCB0aGUgdmFsdWUgaW50byB0aGUgYXJyYXkuCiAgICAgICAgICAgICBpbkZhc3RW
ZWN0b3IubGluayh0aGlzKTsKQEAgLTY2OSwxMSArNjY5LDExIEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4KTsKIAotICAgICAg
ICAgICAgSnVtcCBpc1plcm8gPSBqZVB0cihYODY6OmVheCwgSW1tUHRyKEpTVmFsdWVQdHI6OmVu
Y29kZShqczAoKSkpKTsKKyAgICAgICAgICAgIEp1bXAgaXNaZXJvID0gYnJhbmNoUHRyKEVxdWFs
LCBYODY6OmVheCwgSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShqczAoKSkpKTsKICAgICAgICAg
ICAgIGFkZEp1bXAoZW1pdEp1bXBJZkltbWVkaWF0ZUludGVnZXIoWDg2OjplYXgpLCB0YXJnZXQg
KyAyKTsKIAotICAgICAgICAgICAgYWRkSnVtcChqZVB0cihYODY6OmVheCwgSW1tUHRyKEpTVmFs
dWVQdHI6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSksIHRhcmdldCArIDIpOwotICAgICAgICAg
ICAgYWRkU2xvd0Nhc2Uoam5lUHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2Rl
KGpzQm9vbGVhbihmYWxzZSkpKSkpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hQdHIoRXF1
YWwsIFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkp
KSwgdGFyZ2V0ICsgMik7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1
YWwsIFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkp
KSkpOwogCiAgICAgICAgICAgICBpc1plcm8ubGluayh0aGlzKTsKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2xvb3BfaWZfdHJ1ZSk7CkBAIC03MTEsNyArNzExLDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAgICAgLy8gQ2hlY2sgU3RydWN0dXJlIG9m
IGdsb2JhbCBvYmplY3QKICAgICAgICAgICAgIG1vdmUoSW1tUHRyKGdsb2JhbE9iamVjdCksIFg4
Njo6ZWF4KTsKICAgICAgICAgICAgIGxvYWRQdHIoc3RydWN0dXJlQWRkcmVzcywgWDg2OjplZHgp
OwotICAgICAgICAgICAgSnVtcCBub01hdGNoID0gam5lUHRyKFg4Njo6ZWR4LCBBZGRyZXNzKFg4
Njo6ZWF4LCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSkpKTsgLy8gU3RydWN0dXJl
cyBkb24ndCBtYXRjaAorICAgICAgICAgICAgSnVtcCBub01hdGNoID0gYnJhbmNoUHRyKE5vdEVx
dWFsLCBYODY6OmVkeCwgQWRkcmVzcyhYODY6OmVheCwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9z
dHJ1Y3R1cmUpKSk7IC8vIFN0cnVjdHVyZXMgZG9uJ3QgbWF0Y2gKIAogICAgICAgICAgICAgLy8g
TG9hZCBjYWNoZWQgcHJvcGVydHkKICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhYODY6OmVh
eCwgRklFTERfT0ZGU0VUKEpTR2xvYmFsT2JqZWN0LCBtX3Byb3BlcnR5U3RvcmFnZSkpLCBYODY6
OmVheCk7CkBAIC03NDcsMTkgKzc0NywxOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcygpCiAjZWxzZQogICAgICAgICAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gc3RhdGljX2Nh
c3Q8aW50MzJfdD4oSlNJbW1lZGlhdGU6OnJhd1ZhbHVlKGdldENvbnN0YW50T3BlcmFuZChvcDIp
KSk7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICBhZGRKdW1wKGpnZTMyKFg4Njo6ZWF4LCBJbW0z
MihvcDJpbW0pKSwgdGFyZ2V0ICsgMyk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2gz
MihHcmVhdGVyVGhhbk9yRXF1YWwsIFg4Njo6ZWF4LCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0ICsg
Myk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKG9wMSwgWDg2OjplYXgsIG9wMiwgWDg2OjplZHgpOwogICAgICAgICAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIoWDg2OjplYXgpOwogICAgICAg
ICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIoWDg2OjplZHgp
OwotICAgICAgICAgICAgICAgIGFkZEp1bXAoamdlMzIoWDg2OjplYXgsIFg4Njo6ZWR4KSwgdGFy
Z2V0ICsgMyk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2gzMihHcmVhdGVyVGhhbk9y
RXF1YWwsIFg4Njo6ZWF4LCBYODY6OmVkeCksIHRhcmdldCArIDMpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3Bfam5sZXNzKTsKICAgICAgICAgfQogICAgICAgICBj
YXNlIG9wX25vdDogewogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCBYODY6OmVheCk7CiAgICAgICAgICAgICB4b3JQdHIo
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oSlNJbW1lZGlhdGU6OkZ1bGxUYWdUeXBlQm9vbCkp
LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqbnpQdHIoWDg2OjplYXgsIElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH5KU0ltbWVkaWF0ZTo6RXh0ZW5kZWRQYXlsb2FkQml0
Qm9vbFZhbHVlKSkpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoTm9u
WmVybywgWDg2OjplYXgsIEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH5KU0ltbWVkaWF0ZTo6
RXh0ZW5kZWRQYXlsb2FkQml0Qm9vbFZhbHVlKSkpKTsKICAgICAgICAgICAgIHhvclB0cihJbW0z
MihzdGF0aWNfY2FzdDxpbnQzMl90PihKU0ltbWVkaWF0ZTo6RnVsbFRhZ1R5cGVCb29sIHwgSlNJ
bW1lZGlhdGU6OkV4dGVuZGVkUGF5bG9hZEJpdEJvb2xWYWx1ZSkpLCBYODY6OmVheCk7CiAgICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bfbm90KTsKQEAgLTc2OCwxMSArNzY4
LDExIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIHVu
c2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQsIFg4Njo6ZWF4KTsKIAotICAgICAgICAgICAgYWRkSnVtcChqZVB0cihYODY6OmVheCwgSW1t
UHRyKEpTVmFsdWVQdHI6OmVuY29kZShqczAoKSkpKSwgdGFyZ2V0ICsgMik7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgWDg2OjplYXgsIEltbVB0cihKU1ZhbHVlUHRyOjpl
bmNvZGUoanMwKCkpKSksIHRhcmdldCArIDIpOwogICAgICAgICAgICAgSnVtcCBpc05vblplcm8g
PSBlbWl0SnVtcElmSW1tZWRpYXRlSW50ZWdlcihYODY6OmVheCk7CiAKLSAgICAgICAgICAgIGFk
ZEp1bXAoamVQdHIoWDg2OjplYXgsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFu
KGZhbHNlKSkpKSwgdGFyZ2V0ICsgMik7Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqbmVQdHIo
WDg2OjplYXgsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSkpKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBYODY6OmVheCwgSW1tUHRyKEpT
VmFsdWVQdHI6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSkpLCB0YXJnZXQgKyAyKTsKKyAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgWDg2OjplYXgsIEltbVB0cihK
U1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSkpKTsKIAogICAgICAgICAgICAgaXNO
b25aZXJvLmxpbmsodGhpcyk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9qZmFsc2UpOwpA
QCAtNzg2LDEzICs3ODYsMTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQog
CiAgICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCiAgICAgICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MoWDg2OjplYXgsIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSks
IFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGFkZEp1bXAoam56MzIoQWRkcmVzcyhYODY6OmVjeCwg
RklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX2ZsYWdzKSksIEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0ICsgMik7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaFRlc3QzMihOb25aZXJvLCBBZGRyZXNzKFg4Njo6ZWN4LCBGSUVMRF9PRkZTRVQoU3RydWN0
dXJlLCBtX3R5cGVJbmZvLm1fZmxhZ3MpKSwgSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkp
LCB0YXJnZXQgKyAyKTsKICAgICAgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgp
OwogCiAgICAgICAgICAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRl
ZmluZWQgJiBudWxsCiAgICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwogICAgICAg
ICAgICAgYW5kUHRyKEltbTMyKH5KU0ltbWVkaWF0ZTo6RXh0ZW5kZWRUYWdCaXRVbmRlZmluZWQp
LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBhZGRKdW1wKGplUHRyKFg4Njo6ZWF4LCBJbW1QdHIo
SlNWYWx1ZVB0cjo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJnZXQgKyAyKTsgICAgICAgICAgICAK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBYODY6OmVheCwgSW1tUHRyKEpT
VmFsdWVQdHI6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0ICsgMik7ICAgICAgICAgICAgCiAK
ICAgICAgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwogICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfamVxX251bGwpOwpAQCAtODA2LDEzICs4MDYsMTMgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlTWFpblBhc3MoKQogCiAgICAgICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIEpT
Q2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1
Y3R1cmUuCiAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoWDg2OjplYXgsIEZJRUxEX09GRlNF
VChKU0NlbGwsIG1fc3RydWN0dXJlKSksIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGFkZEp1bXAo
anozMihBZGRyZXNzKFg4Njo6ZWN4LCBGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZv
Lm1fZmxhZ3MpKSwgSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQgKyAyKTsK
KyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKFplcm8sIEFkZHJlc3MoWDg2OjplY3gs
IEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8ubV9mbGFncykpLCBJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCArIDIpOwogICAgICAgICAgICAgSnVtcCB3YXNO
b3RJbW1lZGlhdGUgPSBqdW1wKCk7CiAKICAgICAgICAgICAgIC8vIE5vdyBoYW5kbGUgdGhlIGlt
bWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKICAgICAgICAgICAgIGlzSW1tZWRpYXRl
LmxpbmsodGhpcyk7CiAgICAgICAgICAgICBhbmRQdHIoSW1tMzIofkpTSW1tZWRpYXRlOjpFeHRl
bmRlZFRhZ0JpdFVuZGVmaW5lZCksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGFkZEp1bXAoam5l
UHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0YXJn
ZXQgKyAyKTsgICAgICAgICAgICAKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVx
dWFsLCBYODY6OmVheCwgSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29kZShqc051bGwoKSkpKSwgdGFy
Z2V0ICsgMik7ICAgICAgICAgICAgCiAKICAgICAgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5r
KHRoaXMpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bfam5lcV9udWxsKTsKQEAgLTg0Miw3
ICs4NDIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIGNh
c2Ugb3BfZXE6IHsKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kLCBYODY6OmVkeCk7CiAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bW1lZGlhdGVJbnRlZ2VycyhYODY6OmVheCwgWDg2OjplZHgsIFg4Njo6ZWN4KTsKLSAgICAgICAg
ICAgIHNldGUzMihYODY6OmVkeCwgWDg2OjplYXgpOworICAgICAgICAgICAgc2V0MzIoRXF1YWws
IFg4Njo6ZWR4LCBYODY6OmVheCwgWDg2OjplYXgpOwogICAgICAgICAgICAgZW1pdFRhZ0FzQm9v
bEltbWVkaWF0ZShYODY6OmVheCk7CiAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfZXEpOwpAQCAtODk0LDExICs4OTQsMTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
TWFpblBhc3MoKQogICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgWDg2OjplYXgpOwogCi0gICAgICAgICAgICBK
dW1wIGlzWmVybyA9IGplUHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGpz
MCgpKSkpOworICAgICAgICAgICAgSnVtcCBpc1plcm8gPSBicmFuY2hQdHIoRXF1YWwsIFg4Njo6
ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5jb2RlKGpzMCgpKSkpOwogICAgICAgICAgICAgYWRk
SnVtcChlbWl0SnVtcElmSW1tZWRpYXRlSW50ZWdlcihYODY6OmVheCksIHRhcmdldCArIDIpOwog
Ci0gICAgICAgICAgICBhZGRKdW1wKGplUHRyKFg4Njo6ZWF4LCBJbW1QdHIoSlNWYWx1ZVB0cjo6
ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpKSwgdGFyZ2V0ICsgMik7Ci0gICAgICAgICAgICBhZGRT
bG93Q2FzZShqbmVQdHIoWDg2OjplYXgsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29s
ZWFuKGZhbHNlKSkpKSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgWDg2
OjplYXgsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSkpLCB0YXJn
ZXQgKyAyKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgWDg2
OjplYXgsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpKSk7CiAK
ICAgICAgICAgICAgIGlzWmVyby5saW5rKHRoaXMpOwogICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfanRydWUpOwpAQCAtOTA3LDcgKzkwNyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1h
aW5QYXNzKCkKICAgICAgICAgY2FzZSBvcF9uZXE6IHsKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kLCBYODY6OmVkeCk7CiAgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VycyhYODY6OmVheCwgWDg2OjplZHgs
IFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIHNldG5lMzIoWDg2OjplZHgsIFg4Njo6ZWF4KTsKKyAg
ICAgICAgICAgIHNldDMyKE5vdEVxdWFsLCBYODY6OmVkeCwgWDg2OjplYXgsIFg4Njo6ZWF4KTsK
ICAgICAgICAgICAgIGVtaXRUYWdBc0Jvb2xJbW1lZGlhdGUoWDg2OjplYXgpOwogCiAgICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpOwpAQCAtOTczLDcgKzk3Myw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNz
KCkKICAgICAgICAgICAgIGVtaXRQdXRKSVRTdHViQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCAxLCBYODY6OmVjeCk7CiAgICAgICAgICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgICAg
ICAgICAgZW1pdENUSUNhbGwoSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXh0X3BuYW1lKTsKLSAgICAg
ICAgICAgIEp1bXAgZW5kT2ZJdGVyID0ganpQdHIoWDg2OjplYXgpOworICAgICAgICAgICAgSnVt
cCBlbmRPZkl0ZXIgPSBicmFuY2hUZXN0UHRyKFplcm8sIFg4Njo6ZWF4KTsKICAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7
CiAgICAgICAgICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0ICsgMyk7CiAgICAgICAgICAgICBl
bmRPZkl0ZXIubGluayh0aGlzKTsKQEAgLTEwMTIsNyArMTAxMiw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKFg4Njo6ZWF4LCBzcmNWUmVnKTsKICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhY
ODY6OmVheCwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpKSwgWDg2OjplY3gpOwot
ICAgICAgICAgICAgYWRkU2xvd0Nhc2Uoam5lMzIoQWRkcmVzcyhYODY6OmVjeCwgRklFTERfT0ZG
U0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX3R5cGUpKSwgSW1tMzIoTnVtYmVyVHlwZSkpKTsK
KyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKFg4Njo6
ZWN4LCBGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvLm1fdHlwZSkpLCBJbW0zMihO
dW1iZXJUeXBlKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICB3YXNJbW1lZGlhdGUubGlu
ayh0aGlzKTsKIApAQCAtMTE0MiwxNCArMTE0MiwxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVNYWluUGFzcygpCiAgICAgICAgICAgICBKdW1wIGlzSW1tZWRpYXRlID0gZW1pdEp1bXBJZk5v
dEpTQ2VsbChYODY6OmVheCk7CiAKICAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhYODY6OmVh
eCwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpKSwgWDg2OjplY3gpOwotICAgICAg
ICAgICAgc2V0bnozMihBZGRyZXNzKFg4Njo6ZWN4LCBGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBt
X3R5cGVJbmZvLm1fZmxhZ3MpKSwgSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCksIFg4Njo6
ZWF4KTsKKyAgICAgICAgICAgIHNldFRlc3QzMihOb25aZXJvLCBBZGRyZXNzKFg4Njo6ZWN4LCBG
SUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvLm1fZmxhZ3MpKSwgSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCksIFg4Njo6ZWF4KTsKIAogICAgICAgICAgICAgSnVtcCB3YXNOb3RJ
bW1lZGlhdGUgPSBqdW1wKCk7CiAKICAgICAgICAgICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7
CiAKICAgICAgICAgICAgIGFuZFB0cihJbW0zMih+SlNJbW1lZGlhdGU6OkV4dGVuZGVkVGFnQml0
VW5kZWZpbmVkKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgc2V0ZTMyKEltbTMyKEpTSW1tZWRp
YXRlOjpGdWxsVGFnVHlwZU51bGwpLCBYODY6OmVheCk7CisgICAgICAgICAgICBzZXQzMihFcXVh
bCwgWDg2OjplYXgsIEltbTMyKEpTSW1tZWRpYXRlOjpGdWxsVGFnVHlwZU51bGwpLCBYODY6OmVh
eCk7CiAKICAgICAgICAgICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwogCkBAIC0xMTY2
LDE0ICsxMTY2LDE0IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAg
ICAgICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBlbWl0SnVtcElmTm90SlNDZWxsKFg4Njo6ZWF4KTsK
IAogICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKFg4Njo6ZWF4LCBGSUVMRF9PRkZTRVQoSlND
ZWxsLCBtX3N0cnVjdHVyZSkpLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBzZXR6MzIoQWRkcmVz
cyhYODY6OmVjeCwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX2ZsYWdzKSks
IEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpLCBYODY6OmVheCk7CisgICAgICAgICAgICBz
ZXRUZXN0MzIoWmVybywgQWRkcmVzcyhYODY6OmVjeCwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwg
bV90eXBlSW5mby5tX2ZsYWdzKSksIEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpLCBYODY6
OmVheCk7CiAKICAgICAgICAgICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwogCiAg
ICAgICAgICAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwogCiAgICAgICAgICAgICBhbmRQdHIo
SW1tMzIofkpTSW1tZWRpYXRlOjpFeHRlbmRlZFRhZ0JpdFVuZGVmaW5lZCksIFg4Njo6ZWF4KTsK
LSAgICAgICAgICAgIHNldG5lMzIoSW1tMzIoSlNJbW1lZGlhdGU6OkZ1bGxUYWdUeXBlTnVsbCks
IFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIHNldDMyKE5vdEVxdWFsLCBYODY6OmVheCwgSW1tMzIo
SlNJbW1lZGlhdGU6OkZ1bGxUYWdUeXBlTnVsbCksIFg4Njo6ZWF4KTsKIAogICAgICAgICAgICAg
d2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CiAKQEAgLTEyMTcsMTMgKzEyMTcsMTMgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogCiAgICAgICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoWDg2OjplYXgpOwogICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KFg4Njo6ZWF4LCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSkpLCBYODY6OmVkeCk7
Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqbnozMihBZGRyZXNzKFg4Njo6ZWR4LCBGSUVMRF9P
RkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvLm1fZmxhZ3MpKSwgSW1tMzIoTmVlZHNUaGlzQ29u
dmVyc2lvbikpKTsKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihOb25aZXJv
LCBBZGRyZXNzKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvLm1f
ZmxhZ3MpKSwgSW1tMzIoTmVlZHNUaGlzQ29udmVyc2lvbikpKTsKIAogICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfY29udmVydF90aGlzKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3By
b2ZpbGVfd2lsbF9jYWxsOiB7CiAgICAgICAgICAgICBlbWl0R2V0Q1RJUGFyYW0oU1RVQl9BUkdT
X3Byb2ZpbGVyUmVmZXJlbmNlLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBKdW1wIG5vUHJvZmls
ZXIgPSBqelB0cihBZGRyZXNzKFg4Njo6ZWF4KSk7CisgICAgICAgICAgICBKdW1wIG5vUHJvZmls
ZXIgPSBicmFuY2hUZXN0UHRyKFplcm8sIEFkZHJlc3MoWDg2OjplYXgpKTsKICAgICAgICAgICAg
IGVtaXRQdXRKSVRTdHViQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kLCAxLCBYODY6OmVheCk7CiAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChJbnRl
cnByZXRlcjo6Y3RpX29wX3Byb2ZpbGVfd2lsbF9jYWxsKTsKICAgICAgICAgICAgIG5vUHJvZmls
ZXIubGluayh0aGlzKTsKQEAgLTEyMzIsNyArMTIzMiw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKCkKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfZGlkX2Nh
bGw6IHsKICAgICAgICAgICAgIGVtaXRHZXRDVElQYXJhbShTVFVCX0FSR1NfcHJvZmlsZXJSZWZl
cmVuY2UsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEp1bXAgbm9Qcm9maWxlciA9IGp6UHRyKEFk
ZHJlc3MoWDg2OjplYXgpKTsKKyAgICAgICAgICAgIEp1bXAgbm9Qcm9maWxlciA9IGJyYW5jaFRl
c3RQdHIoWmVybywgQWRkcmVzcyhYODY6OmVheCkpOwogICAgICAgICAgICAgZW1pdFB1dEpJVFN0
dWJBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IDEsIFg4Njo6ZWF4KTsKICAgICAgICAgICAgIGVtaXRDVElDYWxsKEludGVycHJldGVyOjpjdGlf
b3BfcHJvZmlsZV9kaWRfY2FsbCk7CiAgICAgICAgICAgICBub1Byb2ZpbGVyLmxpbmsodGhpcyk7
CkBAIC0xMzI3LDEyICsxMzI3LDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNl
cygpCiAgICAgICAgICAgICAvLyBUaGlzIGlzIHNsb3cgY2FzZSB0aGF0IGhhbmRsZXMgYWNjZXNz
ZXMgdG8gYXJyYXlzIGFib3ZlIHRoZSBmYXN0IGN1dC1vZmYuCiAgICAgICAgICAgICAvLyBGaXJz
dCwgY2hlY2sgaWYgdGhpcyBpcyBhbiBhY2Nlc3MgdG8gdGhlIHZlY3RvcgogICAgICAgICAgICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOwotICAgICAgICAgICAgamFlMzIoWDg2OjplZHgsIEFkZHJlc3Mo
WDg2OjplY3gsIEZJRUxEX09GRlNFVChBcnJheVN0b3JhZ2UsIG1fdmVjdG9yTGVuZ3RoKSksIGJl
Z2luR2V0QnlWYWxTbG93KTsKKyAgICAgICAgICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgWDg2
OjplZHgsIEFkZHJlc3MoWDg2OjplY3gsIEZJRUxEX09GRlNFVChBcnJheVN0b3JhZ2UsIG1fdmVj
dG9yTGVuZ3RoKSksIGJlZ2luR2V0QnlWYWxTbG93KTsKIAogICAgICAgICAgICAgLy8gb2theSwg
bWlzc2VkIHRoZSBmYXN0IHJlZ2lvbiwgYnV0IGl0IGlzIHN0aWxsIGluIHRoZSB2ZWN0b3IuICBH
ZXQgdGhlIHZhbHVlLgogICAgICAgICAgICAgbG9hZFB0cihCYXNlSW5kZXgoWDg2OjplY3gsIFg4
Njo6ZWR4LCBTY2FsZVB0ciwgRklFTERfT0ZGU0VUKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0p
KSwgWDg2OjplY3gpOwogICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgdmFsdWUgbG9h
ZGVkIGlzIHplcm87IGlmIHNvIHdlIG5lZWQgdG8gcmV0dXJuIHVuZGVmaW5lZC4KLSAgICAgICAg
ICAgIGp6UHRyKFg4Njo6ZWN4LCBiZWdpbkdldEJ5VmFsU2xvdyk7CisgICAgICAgICAgICBicmFu
Y2hUZXN0UHRyKFplcm8sIFg4Njo6ZWN4LCBiZWdpbkdldEJ5VmFsU2xvdyk7CiAgICAgICAgICAg
ICBtb3ZlKFg4Njo6ZWN4LCBYODY6OmVheCk7CiAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4KTsKIApAQCAt
MTM1OCwxNCArMTM1OCwxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQog
ICAgICAgICAgICAgICAgIGVtaXRQdXRKSVRTdHViQXJnKFg4Njo6ZWF4LCAxKTsKICAgICAgICAg
ICAgICAgICBlbWl0UHV0SklUU3R1YkFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIob3AyLCAyLCBYODY6
OmVjeCk7CiAgICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoSW50ZXJwcmV0ZXI6OmN0aV9vcF9s
b29wX2lmX2xlc3MpOwotICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGpuejMyKFg4
Njo6ZWF4KSwgdGFyZ2V0ICsgMyk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKE5vblplcm8sIFg4Njo6ZWF4KSwgdGFyZ2V0ICsgMyk7CiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKICAgICAgICAg
ICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgICAgICAgICAgICAgZW1pdFB1dEpJVFN0
dWJBcmcoWDg2OjplYXgsIDEpOwogICAgICAgICAgICAgICAgIGVtaXRQdXRKSVRTdHViQXJnKFg4
Njo6ZWR4LCAyKTsKICAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChJbnRlcnByZXRlcjo6Y3Rp
X29wX2xvb3BfaWZfbGVzcyk7Ci0gICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3Qoam56
MzIoWDg2OjplYXgpLCB0YXJnZXQgKyAzKTsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgWDg2OjplYXgpLCB0YXJnZXQgKyAzKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2xvb3BfaWZfbGVzcyk7CiAgICAg
ICAgIH0KQEAgLTEzODUsMTQgKzEzODUsMTQgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xv
d0Nhc2VzKCkKICAgICAgICAgICAgICAgICBlbWl0UHV0SklUU3R1YkFyZyhYODY6OmVheCwgMSk7
CiAgICAgICAgICAgICAgICAgZW1pdFB1dEpJVFN0dWJBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIDIsIFg4Njo6ZWN4KTsKICAgICAgICAgICAg
ICAgICBlbWl0Q1RJQ2FsbChJbnRlcnByZXRlcjo6Y3RpX29wX2xvb3BfaWZfbGVzc2VxKTsKLSAg
ICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqbnozMihYODY6OmVheCksIHRhcmdldCAr
IDMpOworICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25a
ZXJvLCBYODY6OmVheCksIHRhcmdldCArIDMpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgICAgICAgICAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOwogICAgICAgICAgICAgICAgIGVtaXRQdXRKSVRTdHViQXJnKFg4Njo6ZWF4LCAx
KTsKICAgICAgICAgICAgICAgICBlbWl0UHV0SklUU3R1YkFyZyhYODY6OmVkeCwgMik7CiAgICAg
ICAgICAgICAgICAgZW1pdENUSUNhbGwoSW50ZXJwcmV0ZXI6OmN0aV9vcF9sb29wX2lmX2xlc3Nl
cSk7Ci0gICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3Qoam56MzIoWDg2OjplYXgpLCB0
YXJnZXQgKyAzKTsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoTm9uWmVybywgWDg2OjplYXgpLCB0YXJnZXQgKyAzKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2xvb3BfaWZfbGVzc2VxKTsKICAgICAgICAgfQpAQCAtMTQz
MCw3ICsxNDMwLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAg
ICAgICAgIGVtaXRQdXRKSVRTdHViQXJnKFg4Njo6ZWF4LCAxKTsKICAgICAgICAgICAgIGVtaXRD
VElDYWxsKEludGVycHJldGVyOjpjdGlfb3BfanRydWUpOwogICAgICAgICAgICAgdW5zaWduZWQg
dGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGVt
aXRKdW1wU2xvd1RvSG90KGpuejMyKFg4Njo6ZWF4KSwgdGFyZ2V0ICsgMik7CisgICAgICAgICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgWDg2OjplYXgpLCB0YXJn
ZXQgKyAyKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2xvb3BfaWZfdHJ1ZSk7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBvcF9wcmVfZGVjOiB7CkBAIC0xNDQ1LDE0ICsxNDQ1LDE0IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAgICAgICAgZW1p
dFB1dEpJVFN0dWJBcmcoWDg2OjplYXgsIDEpOwogICAgICAgICAgICAgICAgIGVtaXRQdXRKSVRT
dHViQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
LCAyLCBYODY6OmVjeCk7CiAgICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoSW50ZXJwcmV0ZXI6
OmN0aV9vcF9qbGVzcyk7Ci0gICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanozMihY
ODY6OmVheCksIHRhcmdldCArIDMpOworICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90
KGJyYW5jaFRlc3QzMihaZXJvLCBYODY6OmVheCksIHRhcmdldCArIDMpOwogICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgICAgICAg
ICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogICAgICAgICAgICAgICAgIGVtaXRQdXRKSVRTdHVi
QXJnKFg4Njo6ZWF4LCAxKTsKICAgICAgICAgICAgICAgICBlbWl0UHV0SklUU3R1YkFyZyhYODY6
OmVkeCwgMik7CiAgICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoSW50ZXJwcmV0ZXI6OmN0aV9v
cF9qbGVzcyk7Ci0gICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanozMihYODY6OmVh
eCksIHRhcmdldCArIDMpOworICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihaZXJvLCBYODY6OmVheCksIHRhcmdldCArIDMpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgTkVYVF9PUENPREUob3Bfam5sZXNzKTsKICAgICAgICAgfQpAQCAtMTQ2OSw3ICsx
NDY5LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgICAg
IGVtaXRQdXRKSVRTdHViQXJnKFg4Njo6ZWF4LCAxKTsKICAgICAgICAgICAgIGVtaXRDVElDYWxs
KEludGVycHJldGVyOjpjdGlfb3BfanRydWUpOwogICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGVtaXRKdW1w
U2xvd1RvSG90KGp6MzIoWDg2OjplYXgpLCB0YXJnZXQgKyAyKTsgLy8gaW52ZXJ0ZWQhCisgICAg
ICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgWDg2OjplYXgpLCB0
YXJnZXQgKyAyKTsgLy8gaW52ZXJ0ZWQhCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9qZmFs
c2UpOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcG9zdF9pbmM6IHsKQEAgLTE0OTIsNyAr
MTQ5Miw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgICAg
ICBlbWl0UHV0SklUU3R1YkFyZyhYODY6OmVheCwgMSk7CiAgICAgICAgICAgICBlbWl0Q1RJQ2Fs
bChJbnRlcnByZXRlcjo6Y3RpX29wX2p0cnVlKTsKICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdChqbnozMihYODY6OmVheCksIHRhcmdldCArIDIpOworICAgICAgICAgICAgZW1p
dEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIFg4Njo6ZWF4KSwgdGFyZ2V0ICsg
Mik7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9qdHJ1ZSk7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBvcF9wb3N0X2RlYzogewpAQCAtMTYzOSw3ICsxNjM5LDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlKCkKICAgICAgICAgZW1pdEdldENUSVBhcmFtKFNUVUJfQVJHU19yZWdpc3Rl
ckZpbGUsIFg4Njo6ZWF4KTsKICAgICAgICAgYWRkUHRyKEltbTMyKG1fY29kZUJsb2NrLT5tX251
bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
WDg2OjplZHgpOwogICAgICAgICAKLSAgICAgICAgc2xvd1JlZ2lzdGVyRmlsZUNoZWNrID0gamcz
MihYODY6OmVkeCwgQWRkcmVzcyhYODY6OmVheCwgRklFTERfT0ZGU0VUKFJlZ2lzdGVyRmlsZSwg
bV9lbmQpKSk7CisgICAgICAgIHNsb3dSZWdpc3RlckZpbGVDaGVjayA9IGJyYW5jaDMyKEdyZWF0
ZXJUaGFuLCBYODY6OmVkeCwgQWRkcmVzcyhYODY6OmVheCwgRklFTERfT0ZGU0VUKFJlZ2lzdGVy
RmlsZSwgbV9lbmQpKSk7CiAgICAgICAgIGFmdGVyUmVnaXN0ZXJGaWxlQ2hlY2sgPSBsYWJlbCgp
OwogICAgIH0KIApAQCAtMTc1MywxMyArMTc1MywxMyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVDVElNYWNoaW5lVHJhbXBvCiAKICAgICAvLyBDaGVjayBlYXggaXMgYW4gYXJyYXkKICAgICBK
dW1wIGFycmF5X2ZhaWx1cmVDYXNlczEgPSBlbWl0SnVtcElmTm90SlNDZWxsKFg4Njo6ZWF4KTsK
LSAgICBKdW1wIGFycmF5X2ZhaWx1cmVDYXNlczIgPSBqbmVQdHIoQWRkcmVzcyhYODY6OmVheCks
IEltbVB0cihtX2ludGVycHJldGVyLT5tX2pzQXJyYXlWcHRyKSk7CisgICAgSnVtcCBhcnJheV9m
YWlsdXJlQ2FzZXMyID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKFg4Njo6ZWF4KSwgSW1t
UHRyKG1faW50ZXJwcmV0ZXItPm1fanNBcnJheVZwdHIpKTsKIAogICAgIC8vIENoZWNrcyBvdXQg
b2theSEgLSBnZXQgdGhlIGxlbmd0aCBmcm9tIHRoZSBzdG9yYWdlCiAgICAgbG9hZFB0cihBZGRy
ZXNzKFg4Njo6ZWF4LCBGSUVMRF9PRkZTRVQoSlNBcnJheSwgbV9zdG9yYWdlKSksIFg4Njo6ZWF4
KTsKICAgICBsb2FkMzIoQWRkcmVzcyhYODY6OmVheCwgRklFTERfT0ZGU0VUKEFycmF5U3RvcmFn
ZSwgbV9sZW5ndGgpKSwgWDg2OjplYXgpOwogCi0gICAgSnVtcCBhcnJheV9mYWlsdXJlQ2FzZXMz
ID0gamEzMihYODY6OmVheCwgSW1tMzIoSlNJbW1lZGlhdGU6Om1heEltbWVkaWF0ZUludCkpOwor
ICAgIEp1bXAgYXJyYXlfZmFpbHVyZUNhc2VzMyA9IGJyYW5jaDMyKEFib3ZlLCBYODY6OmVheCwg
SW1tMzIoSlNJbW1lZGlhdGU6Om1heEltbWVkaWF0ZUludCkpOwogCiAgICAgLy8gWDg2OjplYXgg
Y29udGFpbnMgYSA2NCBiaXQgdmFsdWUgKGlzIHBvc2l0aXZlLCBpcyB6ZXJvIGV4dGVuZGVkKSBz
byB3ZSBkb24ndCBuZWVkIHNpZ24gZXh0ZW5kIGhlcmUuCiAgICAgZW1pdEZhc3RBcml0aEludFRv
SW1tTm9DaGVjayhYODY6OmVheCwgWDg2OjplYXgpOwpAQCAtMTc3MSwxMyArMTc3MSwxMyBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAKICAgICAvLyBDaGVjayBl
YXggaXMgYSBzdHJpbmcKICAgICBKdW1wIHN0cmluZ19mYWlsdXJlQ2FzZXMxID0gZW1pdEp1bXBJ
Zk5vdEpTQ2VsbChYODY6OmVheCk7Ci0gICAgSnVtcCBzdHJpbmdfZmFpbHVyZUNhc2VzMiA9IGpu
ZVB0cihBZGRyZXNzKFg4Njo6ZWF4KSwgSW1tUHRyKG1faW50ZXJwcmV0ZXItPm1fanNTdHJpbmdW
cHRyKSk7CisgICAgSnVtcCBzdHJpbmdfZmFpbHVyZUNhc2VzMiA9IGJyYW5jaFB0cihOb3RFcXVh
bCwgQWRkcmVzcyhYODY6OmVheCksIEltbVB0cihtX2ludGVycHJldGVyLT5tX2pzU3RyaW5nVnB0
cikpOwogCiAgICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhl
IFVzdHJpbmcuCiAgICAgbG9hZFB0cihBZGRyZXNzKFg4Njo6ZWF4LCBGSUVMRF9PRkZTRVQoSlNT
dHJpbmcsIG1fdmFsdWUpICsgRklFTERfT0ZGU0VUKFVTdHJpbmcsIG1fcmVwKSksIFg4Njo6ZWF4
KTsKICAgICBsb2FkMzIoQWRkcmVzcyhYODY6OmVheCwgRklFTERfT0ZGU0VUKFVTdHJpbmc6OlJl
cCwgbGVuKSksIFg4Njo6ZWF4KTsKIAotICAgIEp1bXAgc3RyaW5nX2ZhaWx1cmVDYXNlczMgPSBq
YTMyKFg4Njo6ZWF4LCBJbW0zMihKU0ltbWVkaWF0ZTo6bWF4SW1tZWRpYXRlSW50KSk7CisgICAg
SnVtcCBzdHJpbmdfZmFpbHVyZUNhc2VzMyA9IGJyYW5jaDMyKEFib3ZlLCBYODY6OmVheCwgSW1t
MzIoSlNJbW1lZGlhdGU6Om1heEltbWVkaWF0ZUludCkpOwogCiAgICAgLy8gWDg2OjplYXggY29u
dGFpbnMgYSA2NCBiaXQgdmFsdWUgKGlzIHBvc2l0aXZlLCBpcyB6ZXJvIGV4dGVuZGVkKSBzbyB3
ZSBkb24ndCBuZWVkIHNpZ24gZXh0ZW5kIGhlcmUuCiAgICAgZW1pdEZhc3RBcml0aEludFRvSW1t
Tm9DaGVjayhYODY6OmVheCwgWDg2OjplYXgpOwpAQCAtMTc5Miw3ICsxNzkyLDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wbwogICAgIC8vIExvYWQgdGhlIGNhbGxl
ZSBDb2RlQmxvY2sqIGludG8gZWF4CiAgICAgbG9hZFB0cihBZGRyZXNzKFg4Njo6ZWN4LCBGSUVM
RF9PRkZTRVQoSlNGdW5jdGlvbiwgbV9ib2R5KSksIFg4Njo6ZWF4KTsKICAgICBsb2FkUHRyKEFk
ZHJlc3MoWDg2OjplYXgsIEZJRUxEX09GRlNFVChGdW5jdGlvbkJvZHlOb2RlLCBtX2NvZGUpKSwg
WDg2OjplYXgpOwotICAgIEp1bXAgaGFzQ29kZUJsb2NrMSA9IGpuelB0cihYODY6OmVheCk7Cisg
ICAgSnVtcCBoYXNDb2RlQmxvY2sxID0gYnJhbmNoVGVzdFB0cihOb25aZXJvLCBYODY6OmVheCk7
CiAgICAgcG9wKFg4Njo6ZWJ4KTsKICAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKICAg
ICBKdW1wIGNhbGxKU0Z1bmN0aW9uMSA9IGNhbGwoKTsKQEAgLTE4MDIsNyArMTgwMiw3IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KICAgICBoYXNDb2RlQmxvY2sx
LmxpbmsodGhpcyk7CiAKICAgICAvLyBDaGVjayBhcmdDb3VudCBtYXRjaGVzIGNhbGxlZSBhcml0
eS4KLSAgICBKdW1wIGFyaXR5Q2hlY2tPa2F5MSA9IGplMzIoQWRkcmVzcyhYODY6OmVheCwgRklF
TERfT0ZGU0VUKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKSksIFg4Njo6ZWR4KTsKKyAgICBK
dW1wIGFyaXR5Q2hlY2tPa2F5MSA9IGJyYW5jaDMyKEVxdWFsLCBBZGRyZXNzKFg4Njo6ZWF4LCBG
SUVMRF9PRkZTRVQoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpKSwgWDg2OjplZHgpOwogICAg
IHBvcChYODY6OmVieCk7CiAgICAgZW1pdFB1dEpJVFN0dWJBcmcoWDg2OjplYngsIDIpOwogICAg
IGVtaXRQdXRKSVRTdHViQXJnKFg4Njo6ZWF4LCA0KTsKQEAgLTE4MjksNyArMTgyOSw3IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KICAgICAvLyBMb2FkIHRoZSBj
YWxsZWUgQ29kZUJsb2NrKiBpbnRvIGVheAogICAgIGxvYWRQdHIoQWRkcmVzcyhYODY6OmVjeCwg
RklFTERfT0ZGU0VUKEpTRnVuY3Rpb24sIG1fYm9keSkpLCBYODY6OmVheCk7CiAgICAgbG9hZFB0
cihBZGRyZXNzKFg4Njo6ZWF4LCBGSUVMRF9PRkZTRVQoRnVuY3Rpb25Cb2R5Tm9kZSwgbV9jb2Rl
KSksIFg4Njo6ZWF4KTsKLSAgICBKdW1wIGhhc0NvZGVCbG9jazIgPSBqbnpQdHIoWDg2OjplYXgp
OworICAgIEp1bXAgaGFzQ29kZUJsb2NrMiA9IGJyYW5jaFRlc3RQdHIoTm9uWmVybywgWDg2Ojpl
YXgpOwogICAgIHBvcChYODY6OmVieCk7CiAgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7
CiAgICAgSnVtcCBjYWxsSlNGdW5jdGlvbjIgPSBjYWxsKCk7CkBAIC0xODM5LDcgKzE4MzksNyBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAgaGFzQ29kZUJs
b2NrMi5saW5rKHRoaXMpOwogCiAgICAgLy8gQ2hlY2sgYXJnQ291bnQgbWF0Y2hlcyBjYWxsZWUg
YXJpdHkuCi0gICAgSnVtcCBhcml0eUNoZWNrT2theTIgPSBqZTMyKEFkZHJlc3MoWDg2OjplYXgs
IEZJRUxEX09GRlNFVChDb2RlQmxvY2ssIG1fbnVtUGFyYW1ldGVycykpLCBYODY6OmVkeCk7Cisg
ICAgSnVtcCBhcml0eUNoZWNrT2theTIgPSBicmFuY2gzMihFcXVhbCwgQWRkcmVzcyhYODY6OmVh
eCwgRklFTERfT0ZGU0VUKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKSksIFg4Njo6ZWR4KTsK
ICAgICBwb3AoWDg2OjplYngpOwogICAgIGVtaXRQdXRKSVRTdHViQXJnKFg4Njo6ZWJ4LCAyKTsK
ICAgICBlbWl0UHV0SklUU3R1YkFyZyhYODY6OmVheCwgNCk7CkBAIC0xODY2LDcgKzE4NjYsNyBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAgLy8gTG9hZCB0
aGUgY2FsbGVlIENvZGVCbG9jayogaW50byBlYXgKICAgICBsb2FkUHRyKEFkZHJlc3MoWDg2Ojpl
Y3gsIEZJRUxEX09GRlNFVChKU0Z1bmN0aW9uLCBtX2JvZHkpKSwgWDg2OjplYXgpOwogICAgIGxv
YWRQdHIoQWRkcmVzcyhYODY6OmVheCwgRklFTERfT0ZGU0VUKEZ1bmN0aW9uQm9keU5vZGUsIG1f
Y29kZSkpLCBYODY6OmVheCk7Ci0gICAgSnVtcCBoYXNDb2RlQmxvY2szID0gam56UHRyKFg4Njo6
ZWF4KTsKKyAgICBKdW1wIGhhc0NvZGVCbG9jazMgPSBicmFuY2hUZXN0UHRyKE5vblplcm8sIFg4
Njo6ZWF4KTsKICAgICBwb3AoWDg2OjplYngpOwogICAgIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5j
ZSgpOwogICAgIEp1bXAgY2FsbEpTRnVuY3Rpb24zID0gY2FsbCgpOwpAQCAtMTg3Niw3ICsxODc2
LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wbwogICAgIGhhc0Nv
ZGVCbG9jazMubGluayh0aGlzKTsKIAogICAgIC8vIENoZWNrIGFyZ0NvdW50IG1hdGNoZXMgY2Fs
bGVlIGFyaXR5LgotICAgIEp1bXAgYXJpdHlDaGVja09rYXkzID0gamUzMihBZGRyZXNzKFg4Njo6
ZWF4LCBGSUVMRF9PRkZTRVQoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpKSwgWDg2OjplZHgp
OworICAgIEp1bXAgYXJpdHlDaGVja09rYXkzID0gYnJhbmNoMzIoRXF1YWwsIEFkZHJlc3MoWDg2
OjplYXgsIEZJRUxEX09GRlNFVChDb2RlQmxvY2ssIG1fbnVtUGFyYW1ldGVycykpLCBYODY6OmVk
eCk7CiAgICAgcG9wKFg4Njo6ZWJ4KTsKICAgICBlbWl0UHV0SklUU3R1YkFyZyhYODY6OmVieCwg
Mik7CiAgICAgZW1pdFB1dEpJVFN0dWJBcmcoWDg2OjplYXgsIDQpOwpJbmRleDogaml0L0pJVEFy
aXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGppdC9KSVRBcml0aG1ldGljLmNwcAkocmV2aXNp
b24gNDA1MjEpCisrKyBqaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYx
LDcgKzYxLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVGYXN0QXJpdGhfb3BfbHNoaWZ0KHVucwogI2Vu
ZGlmCiAgICAgbHNoaWZ0MzIoWDg2OjplY3gsIFg4Njo6ZWF4KTsKICNpZiAhVVNFKEFMVEVSTkFU
RV9KU0lNTUVESUFURSkKLSAgICBhZGRTbG93Q2FzZShqb0FkZDMyKFg4Njo6ZWF4LCBYODY6OmVh
eCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBYODY6OmVheCwgWDg2
OjplYXgpKTsKICAgICBzaWduRXh0ZW5kMzJUb1B0cihYODY6OmVheCwgWDg2OjplYXgpOwogI2Vu
ZGlmCiAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4LCBYODY6OmVheCk7
CkBAIC0xOTIsNyArMTkyLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVGYXN0QXJpdGhfb3BfbW9kKHVu
c2lnbgogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIoWDg2OjplYXgp
OwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIoWDg2OjplY3gpOwog
I2lmIFVTRShBTFRFUk5BVEVfSlNJTU1FRElBVEUpCi0gICAgYWRkU2xvd0Nhc2UoamVQdHIoWDg2
OjplY3gsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoanMwKCkpKSkpOworICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFB0cihFcXVhbCwgWDg2OjplY3gsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUo
anMwKCkpKSkpOwogICAgIG1vZDMyKFg4Njo6ZWN4LCBYODY6OmVheCwgWDg2OjplZHgpOwogI2Vs
c2UKICAgICBlbWl0RmFzdEFyaXRoRGVUYWdJbW1lZGlhdGUoWDg2OjplYXgpOwpAQCAtMjMwLDEw
ICsyMzAsMTAgQEAgdm9pZCBKSVQ6OmNvbXBpbGVGYXN0QXJpdGhfb3BfcG9zdF9pbmModQogICAg
IG1vdmUoWDg2OjplYXgsIFg4Njo6ZWR4KTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1l
ZGlhdGVJbnRlZ2VyKFg4Njo6ZWF4KTsKICNpZiBVU0UoQUxURVJOQVRFX0pTSU1NRURJQVRFKQot
ICAgIGFkZFNsb3dDYXNlKGpvQWRkMzIoSW1tMzIoMSksIFg4Njo6ZWR4KSk7CisgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIEltbTMyKDEpLCBYODY6OmVkeCkpOwogICAgIGVt
aXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2soWDg2OjplZHgsIFg4Njo6ZWR4KTsKICNlbHNlCi0g
ICAgYWRkU2xvd0Nhc2Uoam9BZGQzMihJbW0zMigxIDw8IEpTSW1tZWRpYXRlOjpJbnRlZ2VyUGF5
bG9hZFNoaWZ0KSwgWDg2OjplZHgpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVy
ZmxvdywgSW1tMzIoMSA8PCBKU0ltbWVkaWF0ZTo6SW50ZWdlclBheWxvYWRTaGlmdCksIFg4Njo6
ZWR4KSk7CiAgICAgc2lnbkV4dGVuZDMyVG9QdHIoWDg2OjplZHgsIFg4Njo6ZWR4KTsKICNlbmRp
ZgogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBYODY6OmVkeCk7CkBAIC0yNTUs
MTAgKzI1NSwxMCBAQCB2b2lkIEpJVDo6Y29tcGlsZUZhc3RBcml0aF9vcF9wb3N0X2RlYyh1CiAg
ICAgbW92ZShYODY6OmVheCwgWDg2OjplZHgpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElt
bWVkaWF0ZUludGVnZXIoWDg2OjplYXgpOwogI2lmIFVTRShBTFRFUk5BVEVfSlNJTU1FRElBVEUp
Ci0gICAgYWRkU2xvd0Nhc2Uoam9TdWIzMihJbW0zMigxKSwgWDg2OjplZHgpKTsKKyAgICBhZGRT
bG93Q2FzZShicmFuY2hTdWIzMihaZXJvLCBJbW0zMigxKSwgWDg2OjplZHgpKTsKICAgICBlbWl0
RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKFg4Njo6ZWR4LCBYODY6OmVkeCk7CiAjZWxzZQotICAg
IGFkZFNsb3dDYXNlKGpvU3ViMzIoSW1tMzIoMSA8PCBKU0ltbWVkaWF0ZTo6SW50ZWdlclBheWxv
YWRTaGlmdCksIFg4Njo6ZWR4KSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoWmVybywg
SW1tMzIoMSA8PCBKU0ltbWVkaWF0ZTo6SW50ZWdlclBheWxvYWRTaGlmdCksIFg4Njo6ZWR4KSk7
CiAgICAgc2lnbkV4dGVuZDMyVG9QdHIoWDg2OjplZHgsIFg4Njo6ZWR4KTsKICNlbmRpZgogICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBYODY6OmVkeCk7CkBAIC0yNzksMTAgKzI3
OSwxMCBAQCB2b2lkIEpJVDo6Y29tcGlsZUZhc3RBcml0aF9vcF9wcmVfaW5jKHVuCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIFg4Njo6ZWF4KTsKICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKFg4Njo6ZWF4KTsKICNpZiBVU0UoQUxURVJOQVRFX0pT
SU1NRURJQVRFKQotICAgIGFkZFNsb3dDYXNlKGpvQWRkMzIoSW1tMzIoMSksIFg4Njo6ZWF4KSk7
CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIEltbTMyKDEpLCBYODY6OmVh
eCkpOwogICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2soWDg2OjplYXgsIFg4Njo6ZWF4
KTsKICNlbHNlCi0gICAgYWRkU2xvd0Nhc2Uoam9BZGQzMihJbW0zMigxIDw8IEpTSW1tZWRpYXRl
OjpJbnRlZ2VyUGF5bG9hZFNoaWZ0KSwgWDg2OjplYXgpKTsKKyAgICBhZGRTbG93Q2FzZShicmFu
Y2hBZGQzMihPdmVyZmxvdywgSW1tMzIoMSA8PCBKU0ltbWVkaWF0ZTo6SW50ZWdlclBheWxvYWRT
aGlmdCksIFg4Njo6ZWF4KSk7CiAgICAgc2lnbkV4dGVuZDMyVG9QdHIoWDg2OjplYXgsIFg4Njo6
ZWF4KTsKICNlbmRpZgogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKQEAgLTMw
MywxMCArMzAzLDEwIEBAIHZvaWQgSklUOjpjb21waWxlRmFzdEFyaXRoX29wX3ByZV9kZWModW4K
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgWDg2OjplYXgpOwogICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIoWDg2OjplYXgpOwogI2lmIFVTRShBTFRF
Uk5BVEVfSlNJTU1FRElBVEUpCi0gICAgYWRkU2xvd0Nhc2Uoam9TdWIzMihJbW0zMigxKSwgWDg2
OjplYXgpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihaZXJvLCBJbW0zMigxKSwgWDg2
OjplYXgpKTsKICAgICBlbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKFg4Njo6ZWF4LCBYODY6
OmVheCk7CiAjZWxzZQotICAgIGFkZFNsb3dDYXNlKGpvU3ViMzIoSW1tMzIoMSA8PCBKU0ltbWVk
aWF0ZTo6SW50ZWdlclBheWxvYWRTaGlmdCksIFg4Njo6ZWF4KSk7CisgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoU3ViMzIoWmVybywgSW1tMzIoMSA8PCBKU0ltbWVkaWF0ZTo6SW50ZWdlclBheWxvYWRT
aGlmdCksIFg4Njo6ZWF4KSk7CiAgICAgc2lnbkV4dGVuZDMyVG9QdHIoWDg2OjplYXgsIFg4Njo6
ZWF4KTsKICNlbmRpZgogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKQEAgLTM4
MSwxMyArMzgxLDEzIEBAIHZvaWQgSklUOjpjb21waWxlQmluYXJ5QXJpdGhPcChPcGNvZGVJRCAK
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKFg4Njo6ZWF4KTsKICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKFg4Njo6ZWR4KTsKICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfYWRkKQotICAgICAgICBhZGRTbG93Q2FzZShqb0FkZDMyKFg4Njo6
ZWR4LCBYODY6OmVheCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxv
dywgWDg2OjplZHgsIFg4Njo6ZWF4KSk7CiAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3Bfc3Vi
KQotICAgICAgICBhZGRTbG93Q2FzZShqb1N1YjMyKFg4Njo6ZWR4LCBYODY6OmVheCkpOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihaZXJvLCBYODY6OmVkeCwgWDg2OjplYXgpKTsK
ICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX211bCk7Ci0gICAgICAg
IGFkZFNsb3dDYXNlKGpvTXVsMzIoWDg2OjplZHgsIFg4Njo6ZWF4KSk7Ci0gICAgICAgIGFkZFNs
b3dDYXNlKGp6MzIoWDg2OjplYXgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoTXVsMzIo
T3ZlcmZsb3csIFg4Njo6ZWR4LCBYODY6OmVheCkpOworICAgICAgICBhZGRTbG93Q2FzZShicmFu
Y2hUZXN0MzIoWmVybywgWDg2OjplYXgpKTsKICAgICB9CiAgICAgZW1pdEZhc3RBcml0aEludFRv
SW1tTm9DaGVjayhYODY6OmVheCwgWDg2OjplYXgpOwogfQpAQCAtNDcyLDEyICs0NzIsMTIgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVGYXN0QXJpdGhfb3BfYWRkKEluc3RydQogICAgIGlmIChpc09wZXJh
bmRDb25zdGFudEltbWVkaWF0ZUludChvcDEpKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AyLCBYODY6OmVheCk7CiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVk
aWF0ZUludGVnZXIoWDg2OjplYXgpOwotICAgICAgICBhZGRTbG93Q2FzZShqb0FkZDMyKEltbTMy
KGdldENvbnN0YW50T3BlcmFuZEltbWVkaWF0ZUludChvcDEpKSwgWDg2OjplYXgpKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIEltbTMyKGdldENvbnN0YW50T3Bl
cmFuZEltbWVkaWF0ZUludChvcDEpKSwgWDg2OjplYXgpKTsKICAgICAgICAgZW1pdEZhc3RBcml0
aEludFRvSW1tTm9DaGVjayhYODY6OmVheCwgWDg2OjplYXgpOwogICAgIH0gZWxzZSBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgewogICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKG9wMSwgWDg2OjplYXgpOwogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bW1lZGlhdGVJbnRlZ2VyKFg4Njo6ZWF4KTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoam9BZGQzMihJ
bW0zMihnZXRDb25zdGFudE9wZXJhbmRJbW1lZGlhdGVJbnQob3AyKSksIFg4Njo6ZWF4KSk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCBJbW0zMihnZXRDb25zdGFu
dE9wZXJhbmRJbW1lZGlhdGVJbnQob3AyKSksIFg4Njo6ZWF4KSk7CiAgICAgICAgIGVtaXRGYXN0
QXJpdGhJbnRUb0ltbU5vQ2hlY2soWDg2OjplYXgsIFg4Njo6ZWF4KTsKICAgICB9IGVsc2UKICAg
ICAgICAgY29tcGlsZUJpbmFyeUFyaXRoT3Aob3BfYWRkLCByZXN1bHQsIG9wMSwgb3AyLCB0eXBl
cyk7CkBAIC01MjEsMTIgKzUyMSwxMiBAQCB2b2lkIEpJVDo6Y29tcGlsZUZhc3RBcml0aF9vcF9t
dWwoSW5zdHJ1CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMSkgJiYg
KCh2YWx1ZSA9IGdldENvbnN0YW50T3BlcmFuZEltbWVkaWF0ZUludChvcDEpKSA+IDApKSB7CiAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBYODY6OmVheCk7CiAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIoWDg2OjplYXgpOwotICAgICAgICBh
ZGRTbG93Q2FzZShqb011bDMyKEltbTMyKHZhbHVlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KSk7Cisg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaE11bDMyKE92ZXJmbG93LCBJbW0zMih2YWx1ZSksIFg4
Njo6ZWF4LCBYODY6OmVheCkpOwogICAgICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUo
WDg2OjplYXgsIFg4Njo6ZWF4KTsKICAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1t
ZWRpYXRlSW50KG9wMikgJiYgKCh2YWx1ZSA9IGdldENvbnN0YW50T3BlcmFuZEltbWVkaWF0ZUlu
dChvcDIpKSA+IDApKSB7CiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBYODY6
OmVheCk7CiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIoWDg2
OjplYXgpOwotICAgICAgICBhZGRTbG93Q2FzZShqb011bDMyKEltbTMyKHZhbHVlKSwgWDg2Ojpl
YXgsIFg4Njo6ZWF4KSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaE11bDMyKE92ZXJmbG93
LCBJbW0zMih2YWx1ZSksIFg4Njo6ZWF4LCBYODY6OmVheCkpOwogICAgICAgICBlbWl0RmFzdEFy
aXRoUmVUYWdJbW1lZGlhdGUoWDg2OjplYXgsIFg4Njo6ZWF4KTsKICAgICB9IGVsc2UKICAgICAg
ICAgY29tcGlsZUJpbmFyeUFyaXRoT3Aob3BfbXVsLCByZXN1bHQsIG9wMSwgb3AyLCB0eXBlcyk7
CkBAIC04NjAsMTMgKzg2MCwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZUZhc3RBcml0aF9vcF9hZGQo
SW5zdHJ1CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMSkpIHsKICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIFg4Njo6ZWF4KTsKICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50ZWdlcihYODY6OmVheCk7Ci0gICAgICAgIGFk
ZFNsb3dDYXNlKGpvQWRkMzIoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kSW1tZWRpYXRlSW50KG9w
MSkgPDwgSlNJbW1lZGlhdGU6OkludGVnZXJQYXlsb2FkU2hpZnQpLCBYODY6OmVheCkpOworICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgSW1tMzIoZ2V0Q29uc3RhbnRP
cGVyYW5kSW1tZWRpYXRlSW50KG9wMSkgPDwgSlNJbW1lZGlhdGU6OkludGVnZXJQYXlsb2FkU2hp
ZnQpLCBYODY6OmVheCkpOwogICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihYODY6OmVheCwgWDg2
OjplYXgpOwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCk7CiAgICAgfSBl
bHNlIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDIpKSB7CiAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBYODY6OmVheCk7CiAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIoWDg2OjplYXgpOwotICAgICAgICBhZGRTbG93Q2Fz
ZShqb0FkZDMyKEltbTMyKGdldENvbnN0YW50T3BlcmFuZEltbWVkaWF0ZUludChvcDIpIDw8IEpT
SW1tZWRpYXRlOjpJbnRlZ2VyUGF5bG9hZFNoaWZ0KSwgWDg2OjplYXgpKTsKKyAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIEltbTMyKGdldENvbnN0YW50T3BlcmFuZElt
bWVkaWF0ZUludChvcDIpIDw8IEpTSW1tZWRpYXRlOjpJbnRlZ2VyUGF5bG9hZFNoaWZ0KSwgWDg2
OjplYXgpKTsKICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoWDg2OjplYXgsIFg4Njo6ZWF4KTsK
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOwogICAgIH0gZWxzZSB7CkBA
IC05MjQsNyArOTI0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVGYXN0QXJpdGhfb3BfbXVsKEluc3Ry
dQogICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgWDg2OjplYXgpOwogICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKFg4Njo6ZWF4KTsKICAgICAg
ICAgZW1pdEZhc3RBcml0aERlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKLSAgICAgICAgYWRkU2xv
d0Nhc2Uoam9NdWwzMihJbW0zMih2YWx1ZSksIFg4Njo6ZWF4LCBYODY6OmVheCkpOworICAgICAg
ICBhZGRTbG93Q2FzZShicmFuY2hNdWwzMihPdmVyZmxvdywgSW1tMzIodmFsdWUpLCBYODY6OmVh
eCwgWDg2OjplYXgpKTsKICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoWDg2OjplYXgsIFg4Njo6
ZWF4KTsKICAgICAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4LCBYODY6
OmVheCk7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsKQEAgLTkzMiw3
ICs5MzIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUZhc3RBcml0aF9vcF9tdWwoSW5zdHJ1CiAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBYODY6OmVheCk7CiAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIoWDg2OjplYXgpOwogICAgICAgICBlbWl0
RmFzdEFyaXRoRGVUYWdJbW1lZGlhdGUoWDg2OjplYXgpOwotICAgICAgICBhZGRTbG93Q2FzZShq
b011bDMyKEltbTMyKHZhbHVlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KSk7CisgICAgICAgIGFkZFNs
b3dDYXNlKGJyYW5jaE11bDMyKE92ZXJmbG93LCBJbW0zMih2YWx1ZSksIFg4Njo6ZWF4LCBYODY6
OmVheCkpOwogICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihYODY6OmVheCwgWDg2OjplYXgpOwog
ICAgICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUoWDg2OjplYXgsIFg4Njo6ZWF4KTsK
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOwpJbmRleDogaml0L0pJVENh
bGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gNDA1MjEpCisr
KyBqaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAgICAgICAgIGNvbXBpbGVPcENh
bGxFdmFsU2V0dXBBcmdzKGluc3RydWN0aW9uKTsKIAogICAgICAgICBlbWl0Q1RJQ2FsbChJbnRl
cnByZXRlcjo6Y3RpX29wX2NhbGxfZXZhbCk7Ci0gICAgICAgIHdhc0V2YWwgPSBqbmVQdHIoWDg2
OjplYXgsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoanNJbXBvc3NpYmxlVmFsdWUoKSkpKTsK
KyAgICAgICAgd2FzRXZhbCA9IGJyYW5jaFB0cihOb3RFcXVhbCwgWDg2OjplYXgsIEltbVB0cihK
U1ZhbHVlUHRyOjplbmNvZGUoanNJbXBvc3NpYmxlVmFsdWUoKSkpKTsKICAgICB9CiAKICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgWDg2OjplY3gpOwpAQCAtMTQ1LDcgKzE0NSw3
IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUkKIAogICAgIC8vIENo
ZWNrIGZvciBKU0Z1bmN0aW9ucy4KICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoWDg2
OjplY3gpOwotICAgIGFkZFNsb3dDYXNlKGpuZVB0cihBZGRyZXNzKFg4Njo6ZWN4KSwgSW1tUHRy
KG1faW50ZXJwcmV0ZXItPm1fanNGdW5jdGlvblZwdHIpKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKFg4Njo6ZWN4KSwgSW1tUHRyKG1faW50ZXJwcmV0ZXIt
Pm1fanNGdW5jdGlvblZwdHIpKSk7CiAKICAgICAvLyBGaXJzdCwgaW4gdGhlIGNhc2Ugb2YgYSBj
b25zdHJ1Y3QsIGFsbG9jYXRlIHRoZSBuZXcgb2JqZWN0LgogICAgIGlmIChvcGNvZGVJRCA9PSBv
cF9jb25zdHJ1Y3QpIHsKQEAgLTIwNywxNCArMjA3LDE0IEBAIHZvaWQgSklUOjpjb21waWxlT3BD
YWxsKE9wY29kZUlEIG9wY29kZUkKICAgICAgICAgY29tcGlsZU9wQ2FsbEV2YWxTZXR1cEFyZ3Mo
aW5zdHJ1Y3Rpb24pOwogCiAgICAgICAgIGVtaXRDVElDYWxsKEludGVycHJldGVyOjpjdGlfb3Bf
Y2FsbF9ldmFsKTsKLSAgICAgICAgd2FzRXZhbCA9IGpuZVB0cihYODY6OmVheCwgSW1tUHRyKEpT
VmFsdWVQdHI6OmVuY29kZShqc0ltcG9zc2libGVWYWx1ZSgpKSkpOworICAgICAgICB3YXNFdmFs
ID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBYODY6OmVheCwgSW1tUHRyKEpTVmFsdWVQdHI6OmVuY29k
ZShqc0ltcG9zc2libGVWYWx1ZSgpKSkpOwogICAgIH0KIAogICAgIC8vIFRoaXMgcGxhbnRzIGEg
Y2hlY2sgZm9yIGEgY2FjaGVkIEpTRnVuY3Rpb24gdmFsdWUsIHNvIHdlIGNhbiBwbGFudCBhIGZh
c3QgbGluayB0byB0aGUgY2FsbGVlLgogICAgIC8vIFRoaXMgZGVsaWJlcmF0ZWx5IGxlYXZlcyB0
aGUgY2FsbGVlIGluIGVjeCwgdXNlZCB3aGVuIHNldHRpbmcgdXAgdGhlIHN0YWNrIGZyYW1lIGJl
bG93CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIFg4Njo6ZWN4KTsKICAgICBE
YXRhTGFiZWxQdHIgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKLSAgICBKdW1wIGp1bXBU
b1Nsb3cgPSBqbmVQdHJXaXRoUGF0Y2goWDg2OjplY3gsIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9u
Q2hlY2ssIEltbVB0cihKU1ZhbHVlUHRyOjplbmNvZGUoanNJbXBvc3NpYmxlVmFsdWUoKSkpKTsK
KyAgICBKdW1wIGp1bXBUb1Nsb3cgPSBicmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIFg4Njo6
ZWN4LCBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrLCBJbW1QdHIoSlNWYWx1ZVB0cjo6ZW5j
b2RlKGpzSW1wb3NzaWJsZVZhbHVlKCkpKSk7CiAgICAgYWRkU2xvd0Nhc2UoanVtcFRvU2xvdyk7
CiAgICAgQVNTRVJUKGRpZmZlcmVuY2VCZXR3ZWVuKGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hl
Y2ssIGp1bXBUb1Nsb3cpID09IHBhdGNoT2Zmc2V0T3BDYWxsQ29tcGFyZVRvSnVtcCk7CiAgICAg
bV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90
UGF0aEJlZ2luID0gYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKQEAgLTI3Miw3ICsyNzIs
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKEluc3RydWN0CiAKICAgICAvLyBG
YXN0IGNoZWNrIGZvciBKUyBmdW5jdGlvbi4KICAgICBKdW1wIGNhbGxMaW5rRmFpbE5vdE9iamVj
dCA9IGVtaXRKdW1wSWZOb3RKU0NlbGwoWDg2OjplY3gpOwotICAgIEp1bXAgY2FsbExpbmtGYWls
Tm90SlNGdW5jdGlvbiA9IGpuZVB0cihBZGRyZXNzKFg4Njo6ZWN4KSwgSW1tUHRyKG1faW50ZXJw
cmV0ZXItPm1fanNGdW5jdGlvblZwdHIpKTsKKyAgICBKdW1wIGNhbGxMaW5rRmFpbE5vdEpTRnVu
Y3Rpb24gPSBicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MoWDg2OjplY3gpLCBJbW1QdHIobV9p
bnRlcnByZXRlci0+bV9qc0Z1bmN0aW9uVnB0cikpOwogCiAgICAgLy8gRmlyc3QsIGluIHRoZSBj
YXNlIG9mIGEgY29uc3RydWN0LCBhbGxvY2F0ZSB0aGUgbmV3IG9iamVjdC4KICAgICBpZiAob3Bj
b2RlSUQgPT0gb3BfY29uc3RydWN0KSB7CkBAIC0zMDQsNyArMzA0LDcgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGxTbG93Q2FzZShJbnN0cnVjdAogCiAgICAgLy8gQ2hlY2sgZm9yIEpTRnVuY3Rp
b25zLgogICAgIEp1bXAgaXNOb3RPYmplY3QgPSBlbWl0SnVtcElmTm90SlNDZWxsKFg4Njo6ZWN4
KTsKLSAgICBKdW1wIGlzSlNGdW5jdGlvbiA9IGplUHRyKEFkZHJlc3MoWDg2OjplY3gpLCBJbW1Q
dHIobV9pbnRlcnByZXRlci0+bV9qc0Z1bmN0aW9uVnB0cikpOworICAgIEp1bXAgaXNKU0Z1bmN0
aW9uID0gYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKFg4Njo6ZWN4KSwgSW1tUHRyKG1faW50ZXJw
cmV0ZXItPm1fanNGdW5jdGlvblZwdHIpKTsKIAogICAgIC8vIFRoaXMgaGFuZGxlcyBob3N0IGZ1
bmN0aW9ucwogICAgIGlzTm90T2JqZWN0LmxpbmsodGhpcyk7CkluZGV4OiBqaXQvSklUSW5saW5l
TWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGppdC9KSVRJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9u
IDQwNTIxKQorKysgaml0L0pJVElubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjU4
LDE1ICsyNTgsMTUgQEAgQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0Q1RJQ2FsbAog
CiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmNoZWNrU3RydWN0dXJlKFJlZ2lzdGVySUQg
cmVnLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICByZXR1cm4gam5lUHRyKEFkZHJlc3Mo
cmVnLCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSkpLCBJbW1QdHIoc3RydWN0dXJl
KSk7CisgICAgcmV0dXJuIGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWcsIEZJRUxEX09G
RlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSksIEltbVB0cihzdHJ1Y3R1cmUpKTsKIH0KIAogQUxX
QVlTX0lOTElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmSlNDZWxsKFJlZ2lzdGVySUQgcmVn
KQogewogI2lmIFVTRShBTFRFUk5BVEVfSlNJTU1FRElBVEUpCi0gICAgcmV0dXJuIGp6UHRyKHJl
ZywgdGFnTWFza1JlZ2lzdGVyKTsKKyAgICByZXR1cm4gYnJhbmNoVGVzdFB0cihaZXJvLCByZWcs
IHRhZ01hc2tSZWdpc3Rlcik7CiAjZWxzZQotICAgIHJldHVybiBqejMyKHJlZywgSW1tMzIoSlNJ
bW1lZGlhdGU6OlRhZ01hc2spKTsKKyAgICByZXR1cm4gYnJhbmNoVGVzdDMyKFplcm8sIHJlZywg
SW1tMzIoSlNJbW1lZGlhdGU6OlRhZ01hc2spKTsKICNlbmRpZgogfQogCkBAIC0yODUsOSArMjg1
LDkgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZQogQUxXQVlTX0lO
TElORSBKSVQ6Okp1bXAgSklUOjplbWl0SnVtcElmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnKQog
ewogI2lmIFVTRShBTFRFUk5BVEVfSlNJTU1FRElBVEUpCi0gICAgcmV0dXJuIGpuelB0cihyZWcs
IHRhZ01hc2tSZWdpc3Rlcik7CisgICAgcmV0dXJuIGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVn
LCB0YWdNYXNrUmVnaXN0ZXIpOwogI2Vsc2UKLSAgICByZXR1cm4gam56MzIocmVnLCBJbW0zMihK
U0ltbWVkaWF0ZTo6VGFnTWFzaykpOworICAgIHJldHVybiBicmFuY2hUZXN0MzIoTm9uWmVybywg
cmVnLCBJbW0zMihKU0ltbWVkaWF0ZTo6VGFnTWFzaykpOwogI2VuZGlmCiB9CiAKQEAgLTMxMSwy
OSArMzExLDI5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmxpbmtTbG93Q2FzZUlmTm8KICNp
ZiBVU0UoQUxURVJOQVRFX0pTSU1NRURJQVRFKQogQUxXQVlTX0lOTElORSBKSVQ6Okp1bXAgSklU
OjplbWl0SnVtcElmSW1tZWRpYXRlTnVtYmVyKFJlZ2lzdGVySUQgcmVnKQogewotICAgIHJldHVy
biBqbnpQdHIocmVnLCB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgIHJldHVybiBicmFuY2hU
ZXN0UHRyKE5vblplcm8sIHJlZywgdGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKIH0KIEFMV0FZU19J
TkxJTkUgSklUOjpKdW1wIEpJVDo6ZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihSZWdpc3Rl
cklEIHJlZykKIHsKLSAgICByZXR1cm4ganpQdHIocmVnLCB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
OworICAgIHJldHVybiBicmFuY2hUZXN0UHRyKFplcm8sIHJlZywgdGFnVHlwZU51bWJlclJlZ2lz
dGVyKTsKIH0KICNlbmRpZgogCiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1w
SWZJbW1lZGlhdGVJbnRlZ2VyKFJlZ2lzdGVySUQgcmVnKQogewogI2lmIFVTRShBTFRFUk5BVEVf
SlNJTU1FRElBVEUpCi0gICAgcmV0dXJuIGphZVB0cihyZWcsIHRhZ1R5cGVOdW1iZXJSZWdpc3Rl
cik7CisgICAgcmV0dXJuIGJyYW5jaFB0cihBYm92ZU9yRXF1YWwsIHJlZywgdGFnVHlwZU51bWJl
clJlZ2lzdGVyKTsKICNlbHNlCi0gICAgcmV0dXJuIGpuejMyKHJlZywgSW1tMzIoSlNJbW1lZGlh
dGU6OlRhZ1R5cGVOdW1iZXIpKTsKKyAgICByZXR1cm4gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJl
ZywgSW1tMzIoSlNJbW1lZGlhdGU6OlRhZ1R5cGVOdW1iZXIpKTsKICNlbmRpZgogfQogCiBBTFdB
WVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKFJl
Z2lzdGVySUQgcmVnKQogewogI2lmIFVTRShBTFRFUk5BVEVfSlNJTU1FRElBVEUpCi0gICAgcmV0
dXJuIGpiUHRyKHJlZywgdGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAgICByZXR1cm4gYnJhbmNo
UHRyKEJlbG93LCByZWcsIHRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAjZWxzZQotICAgIHJldHVy
biBqejMyKHJlZywgSW1tMzIoSlNJbW1lZGlhdGU6OlRhZ1R5cGVOdW1iZXIpKTsKKyAgICByZXR1
cm4gYnJhbmNoVGVzdDMyKFplcm8sIHJlZywgSW1tMzIoSlNJbW1lZGlhdGU6OlRhZ1R5cGVOdW1i
ZXIpKTsKICNlbmRpZgogfQogCkBAIC0zNjIsNyArMzYyLDcgQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEZhc3RBcml0aERlVAogCiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVt
aXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZUp1bXBJZlplcm8oUmVnaXN0ZXJJRCByZWcpCiB7Ci0g
ICAgcmV0dXJuIGp6U3ViUHRyKEltbTMyKEpTSW1tZWRpYXRlOjpUYWdUeXBlTnVtYmVyKSwgcmVn
KTsKKyAgICByZXR1cm4gYnJhbmNoU3ViUHRyKFplcm8sIEltbTMyKEpTSW1tZWRpYXRlOjpUYWdU
eXBlTnVtYmVyKSwgcmVnKTsKIH0KICNlbmRpZgogCkluZGV4OiBqaXQvSklUUHJvcGVydHlBY2Nl
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9u
IDQwNTIxKQorKysgaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAzLDcgKzEwMyw3IEBAIHZvaWQgSklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgoaW50IHJlc3UK
ICAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW3Byb3BlcnR5QWNjZXNzSW5zdHJ1
Y3Rpb25JbmRleF0uaG90UGF0aEJlZ2luID0gaG90UGF0aEJlZ2luOwogCiAgICAgRGF0YUxhYmVs
UHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsKLSAgICBKdW1wIHN0cnVjdHVyZUNoZWNrID0gam5lUHRy
V2l0aFBhdGNoKEFkZHJlc3MoWDg2OjplYXgsIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0
dXJlKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUpKSk7CisgICAgSnVtcCBzdHJ1Y3R1cmVDaGVj
ayA9IGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgQWRkcmVzcyhYODY6OmVheCwgRklFTERf
T0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpKSwgc3RydWN0dXJlVG9Db21wYXJlLCBJbW1QdHIo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSkpKTsK
ICAgICBhZGRTbG93Q2FzZShzdHJ1Y3R1cmVDaGVjayk7CiAgICAgQVNTRVJUKGRpZmZlcmVuY2VC
ZXR3ZWVuKGhvdFBhdGhCZWdpbiwgc3RydWN0dXJlVG9Db21wYXJlKSA9PSBwYXRjaE9mZnNldEdl
dEJ5SWRTdHJ1Y3R1cmUpOwogICAgIEFTU0VSVChkaWZmZXJlbmNlQmV0d2Vlbihob3RQYXRoQmVn
aW4sIHN0cnVjdHVyZUNoZWNrKSA9PSBwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNl
KTsKQEAgLTE1OSw3ICsxNTksNyBAQCB2b2lkIEpJVDo6Y29tcGlsZVB1dEJ5SWRIb3RQYXRoKGlu
dCBiYXNlCiAKICAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgZm9sbG93aW5nIGluc3Ry
dWN0aW9uIHBsYW50cyBhIDMyYml0IGltbWVkaWF0ZSwgaW4gb3JkZXIgdGhhdCBpdCBjYW4gYmUg
cGF0Y2hlZCBvdmVyLgogICAgIERhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7Ci0gICAg
YWRkU2xvd0Nhc2Uoam5lUHRyV2l0aFBhdGNoKEFkZHJlc3MoWDg2OjplYXgsIEZJRUxEX09GRlNF
VChKU0NlbGwsIG1fc3RydWN0dXJlKSksIHN0cnVjdHVyZVRvQ29tcGFyZSwgSW1tUHRyKHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUpKSkpOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgQWRkcmVzcyhYODY6OmVh
eCwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpKSwgc3RydWN0dXJlVG9Db21wYXJl
LCBJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVj
dHVyZSkpKSk7CiAgICAgQVNTRVJUKGRpZmZlcmVuY2VCZXR3ZWVuKGhvdFBhdGhCZWdpbiwgc3Ry
dWN0dXJlVG9Db21wYXJlKSA9PSBwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUpOwogCiAgICAg
Ly8gUGxhbnQgYSBsb2FkIGZyb20gYSBib2d1cyBvZnNldCBpbiB0aGUgb2JqZWN0J3MgcHJvcGVy
dHkgbWFwOyB3ZSB3aWxsIHBhdGNoIHRoaXMgbGF0ZXIsIGlmIGl0IGlzIHRvIGJlIHVzZWQuCkBA
IC0xOTgsMjYgKzE5OCwyNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNp
dGlvCiAgICAgSnVtcExpc3QgZmFpbHVyZUNhc2VzOwogICAgIC8vIENoZWNrIGVheCBpcyBhbiBv
YmplY3Qgb2YgdGhlIHJpZ2h0IFN0cnVjdHVyZS4KICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKGVt
aXRKdW1wSWZOb3RKU0NlbGwoWDg2OjplYXgpKTsKLSAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKGpu
ZVB0cihBZGRyZXNzKFg4Njo6ZWF4LCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSkp
LCBJbW1QdHIob2xkU3RydWN0dXJlKSkpOworICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoYnJhbmNo
UHRyKE5vdEVxdWFsLCBBZGRyZXNzKFg4Njo6ZWF4LCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0
cnVjdHVyZSkpLCBJbW1QdHIob2xkU3RydWN0dXJlKSkpOwogICAgIEp1bXBMaXN0IHN1Y2Nlc3ND
YXNlczsKIAogICAgIC8vICBlY3ggPSBiYXNlT2JqZWN0CiAgICAgbG9hZFB0cihBZGRyZXNzKFg4
Njo6ZWF4LCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSkpLCBYODY6OmVjeCk7CiAg
ICAgLy8gcHJvdG8oZWN4KSA9IGJhc2VPYmplY3QtPnN0cnVjdHVyZSgpLT5wcm90b3R5cGUoKQot
ICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoam5lMzIoQWRkcmVzcyhYODY6OmVjeCwgRklFTERfT0ZG
U0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mbykgKyBGSUVMRF9PRkZTRVQoVHlwZUluZm8sIG1fdHlw
ZSkpLCBJbW0zMihPYmplY3RUeXBlKSkpOworICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoYnJhbmNo
MzIoTm90RXF1YWwsIEFkZHJlc3MoWDg2OjplY3gsIEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1f
dHlwZUluZm8pICsgRklFTERfT0ZGU0VUKFR5cGVJbmZvLCBtX3R5cGUpKSwgSW1tMzIoT2JqZWN0
VHlwZSkpKTsKIAogICAgIGxvYWRQdHIoQWRkcmVzcyhYODY6OmVjeCwgRklFTERfT0ZGU0VUKFN0
cnVjdHVyZSwgbV9wcm90b3R5cGUpKSwgWDg2OjplY3gpOwogICAgIAogICAgIC8vIGVjeCA9IGJh
c2VPYmplY3QtPm1fc3RydWN0dXJlCiAgICAgZm9yIChSZWZQdHI8U3RydWN0dXJlPiogaXQgPSBj
aGFpbi0+aGVhZCgpOyAqaXQ7ICsraXQpIHsKICAgICAgICAgLy8gbnVsbCBjaGVjayB0aGUgcHJv
dG90eXBlCi0gICAgICAgIHN1Y2Nlc3NDYXNlcy5hcHBlbmQoamVQdHIoWDg2OjplY3gsIEltbVB0
cihKU1ZhbHVlUHRyOjplbmNvZGUoanNOdWxsKCkpKSkpOworICAgICAgICBzdWNjZXNzQ2FzZXMu
YXBwZW5kKGJyYW5jaFB0cihFcXVhbCwgWDg2OjplY3gsIEltbVB0cihKU1ZhbHVlUHRyOjplbmNv
ZGUoanNOdWxsKCkpKSkpOwogCiAgICAgICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUgaWQKLSAg
ICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChqbmVQdHIoQWRkcmVzcyhYODY6OmVjeCwgRklFTERf
T0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpKSwgSW1tUHRyKGl0LT5nZXQoKSkpKTsKKyAgICAg
ICAgZmFpbHVyZUNhc2VzLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MoWDg2Ojpl
Y3gsIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSksIEltbVB0cihpdC0+Z2V0KCkp
KSk7CiAgICAgICAgIAogICAgICAgICBsb2FkUHRyKEFkZHJlc3MoWDg2OjplY3gsIEZJRUxEX09G
RlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSksIFg4Njo6ZWN4KTsKLSAgICAgICAgZmFpbHVyZUNh
c2VzLmFwcGVuZChqbmUzMihBZGRyZXNzKFg4Njo6ZWN4LCBGSUVMRF9PRkZTRVQoU3RydWN0dXJl
LCBtX3R5cGVJbmZvKSArIEZJRUxEX09GRlNFVChUeXBlSW5mbywgbV90eXBlKSksIEltbTMyKE9i
amVjdFR5cGUpKSk7CisgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1
YWwsIEFkZHJlc3MoWDg2OjplY3gsIEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8p
ICsgRklFTERfT0ZGU0VUKFR5cGVJbmZvLCBtX3R5cGUpKSwgSW1tMzIoT2JqZWN0VHlwZSkpKTsK
ICAgICAgICAgbG9hZFB0cihBZGRyZXNzKFg4Njo6ZWN4LCBGSUVMRF9PRkZTRVQoU3RydWN0dXJl
LCBtX3Byb3RvdHlwZSkpLCBYODY6OmVjeCk7CiAgICAgfQogCkBAIC0zMTMsMTMgKzMxMywxMyBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAgICAgSnVtcDo6cGF0
Y2gocmV0dXJuQWRkcmVzcywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0
aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbCkpOwogCiAgICAgLy8gQ2hlY2sgZWF4IGlzIGFuIGFy
cmF5Ci0gICAgSnVtcCBmYWlsdXJlQ2FzZXMxID0gam5lUHRyKEFkZHJlc3MoWDg2OjplYXgpLCBJ
bW1QdHIobV9pbnRlcnByZXRlci0+bV9qc0FycmF5VnB0cikpOworICAgIEp1bXAgZmFpbHVyZUNh
c2VzMSA9IGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhYODY6OmVheCksIEltbVB0cihtX2lu
dGVycHJldGVyLT5tX2pzQXJyYXlWcHRyKSk7CiAKICAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0g
Z2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgc3RvcmFnZQogICAgIGxvYWRQdHIoQWRkcmVzcyhYODY6
OmVheCwgRklFTERfT0ZGU0VUKEpTQXJyYXksIG1fc3RvcmFnZSkpLCBYODY6OmVjeCk7CiAgICAg
bG9hZDMyKEFkZHJlc3MoWDg2OjplY3gsIEZJRUxEX09GRlNFVChBcnJheVN0b3JhZ2UsIG1fbGVu
Z3RoKSksIFg4Njo6ZWN4KTsKIAotICAgIEp1bXAgZmFpbHVyZUNhc2VzMiA9IGphMzIoWDg2Ojpl
Y3gsIEltbTMyKEpTSW1tZWRpYXRlOjptYXhJbW1lZGlhdGVJbnQpKTsKKyAgICBKdW1wIGZhaWx1
cmVDYXNlczIgPSBicmFuY2gzMihBYm92ZSwgWDg2OjplY3gsIEltbTMyKEpTSW1tZWRpYXRlOjpt
YXhJbW1lZGlhdGVJbnQpKTsKIAogICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2soWDg2
OjplY3gsIFg4Njo6ZWF4KTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CkBAIC0zODUsOSAr
Mzg1LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKFN0cgogICAgIFN0
cnVjdHVyZSoqIHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MgPSAmKHByb3RvT2JqZWN0LT5tX3N0
cnVjdHVyZSk7CiAjaWYgUExBVEZPUk0oWDg2XzY0KQogICAgIG1vdmUoSW1tUHRyKHByb3RvdHlw
ZVN0cnVjdHVyZSksIFg4Njo6ZWJ4KTsKLSAgICBKdW1wIGZhaWx1cmVDYXNlczIgPSBqbmVQdHIo
WDg2OjplYngsIEFic29sdXRlQWRkcmVzcyhwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzKSk7Cisg
ICAgSnVtcCBmYWlsdXJlQ2FzZXMyID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJl
c3MocHJvdG90eXBlU3RydWN0dXJlQWRkcmVzcyksIFg4Njo6ZWJ4KTsKICNlbHNlCi0gICAgSnVt
cCBmYWlsdXJlQ2FzZXMyID0gam5lUHRyKEFic29sdXRlQWRkcmVzcyhwcm90b3R5cGVTdHJ1Y3R1
cmVBZGRyZXNzKSwgSW1tUHRyKHByb3RvdHlwZVN0cnVjdHVyZSkpOworICAgIEp1bXAgZmFpbHVy
ZUNhc2VzMiA9IGJyYW5jaFB0cihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHByb3RvdHlwZVN0
cnVjdHVyZUFkZHJlc3MpLCBJbW1QdHIocHJvdG90eXBlU3RydWN0dXJlKSk7CiAjZW5kaWYKIAog
ICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXREaXJlY3RPZmZzZXQKQEAgLTQyNiw3ICs0MjYs
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3RyCiAKICAgICAvLyBD
aGVjayB0aGUgcHJvdG90eXBlIG9iamVjdCdzIFN0cnVjdHVyZSBoYWQgbm90IGNoYW5nZWQuCiAg
ICAgU3RydWN0dXJlKiogcHJvdG90eXBlU3RydWN0dXJlQWRkcmVzcyA9ICYocHJvdG9PYmplY3Qt
Pm1fc3RydWN0dXJlKTsKLSAgICBKdW1wIGZhaWx1cmVDYXNlczMgPSBqbmVQdHIoQWJzb2x1dGVB
ZGRyZXNzKHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MpLCBJbW1QdHIocHJvdG90eXBlU3RydWN0
dXJlKSk7CisgICAgSnVtcCBmYWlsdXJlQ2FzZXMzID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBYnNv
bHV0ZUFkZHJlc3MocHJvdG90eXBlU3RydWN0dXJlQWRkcmVzcyksIEltbVB0cihwcm90b3R5cGVT
dHJ1Y3R1cmUpKTsKIAogICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXREaXJlY3RPZmZzZXQK
ICAgICBsb2FkUHRyKEFkZHJlc3MoWDg2OjplZHgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1Zh
bHVlUHRyKSksIFg4Njo6ZWF4KTsKQEAgLTQ5Miw5ICs0OTIsOSBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0CiAgICAgU3RydWN0dXJlKiogcHJvdG90eXBlU3RydWN0
dXJlQWRkcmVzcyA9ICYocHJvdG9PYmplY3QtPm1fc3RydWN0dXJlKTsKICNpZiBQTEFURk9STShY
ODZfNjQpCiAgICAgbW92ZShJbW1QdHIocHJvdG90eXBlU3RydWN0dXJlKSwgWDg2OjplYngpOwot
ICAgIEp1bXAgZmFpbHVyZUNhc2VzMiA9IGpuZVB0cihYODY6OmVieCwgQWJzb2x1dGVBZGRyZXNz
KHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MpKTsKKyAgICBKdW1wIGZhaWx1cmVDYXNlczIgPSBi
cmFuY2hQdHIoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhwcm90b3R5cGVTdHJ1Y3R1cmVBZGRy
ZXNzKSwgWDg2OjplYngpOwogI2Vsc2UKLSAgICBKdW1wIGZhaWx1cmVDYXNlczIgPSBqbmVQdHIo
QWJzb2x1dGVBZGRyZXNzKHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MpLCBJbW1QdHIocHJvdG90
eXBlU3RydWN0dXJlKSk7CisgICAgSnVtcCBmYWlsdXJlQ2FzZXMyID0gYnJhbmNoUHRyKE5vdEVx
dWFsLCBBYnNvbHV0ZUFkZHJlc3MocHJvdG90eXBlU3RydWN0dXJlQWRkcmVzcyksIEltbVB0cihw
cm90b3R5cGVTdHJ1Y3R1cmUpKTsKICNlbmRpZgogCiAgICAgLy8gQ2hlY2tzIG91dCBva2F5ISAt
IGdldERpcmVjdE9mZnNldApAQCAtNTQ0LDkgKzU0NCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUdldEJ5SWRDaGFpbkxpc3QKICAgICAgICAgU3RydWN0dXJlKiogcHJvdG90eXBlU3RydWN0
dXJlQWRkcmVzcyA9ICYocHJvdG9PYmplY3QtPm1fc3RydWN0dXJlKTsKICNpZiBQTEFURk9STShY
ODZfNjQpCiAgICAgICAgIG1vdmUoSW1tUHRyKGN1cnJTdHJ1Y3R1cmUpLCBYODY6OmVieCk7Ci0g
ICAgICAgIGJ1Y2tldHNPZkZhaWwuYXBwZW5kKGpuZVB0cihYODY6OmVieCwgQWJzb2x1dGVBZGRy
ZXNzKHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MpKSk7CisgICAgICAgIGJ1Y2tldHNPZkZhaWwu
YXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHByb3RvdHlwZVN0cnVj
dHVyZUFkZHJlc3MpLCBYODY6OmVieCkpOwogI2Vsc2UKLSAgICAgICAgYnVja2V0c09mRmFpbC5h
cHBlbmQoam5lUHRyKEFic29sdXRlQWRkcmVzcyhwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzKSwg
SW1tUHRyKGN1cnJTdHJ1Y3R1cmUpKSk7CisgICAgICAgIGJ1Y2tldHNPZkZhaWwuYXBwZW5kKGJy
YW5jaFB0cihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHByb3RvdHlwZVN0cnVjdHVyZUFkZHJl
c3MpLCBJbW1QdHIoY3VyclN0cnVjdHVyZSkpKTsKICNlbmRpZgogICAgIH0KICAgICBBU1NFUlQo
cHJvdG9PYmplY3QpOwpAQCAtNjAzLDkgKzYwMyw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUdldEJ5SWRDaGFpbihTdHIKICAgICAgICAgU3RydWN0dXJlKiogcHJvdG90eXBlU3RydWN0dXJl
QWRkcmVzcyA9ICYocHJvdG9PYmplY3QtPm1fc3RydWN0dXJlKTsKICNpZiBQTEFURk9STShYODZf
NjQpCiAgICAgICAgIG1vdmUoSW1tUHRyKGN1cnJTdHJ1Y3R1cmUpLCBYODY6OmVieCk7Ci0gICAg
ICAgIGJ1Y2tldHNPZkZhaWwuYXBwZW5kKGpuZVB0cihYODY6OmVieCwgQWJzb2x1dGVBZGRyZXNz
KHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MpKSk7CisgICAgICAgIGJ1Y2tldHNPZkZhaWwuYXBw
ZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHByb3RvdHlwZVN0cnVjdHVy
ZUFkZHJlc3MpLCBYODY6OmVieCkpOwogI2Vsc2UKLSAgICAgICAgYnVja2V0c09mRmFpbC5hcHBl
bmQoam5lUHRyKEFic29sdXRlQWRkcmVzcyhwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzKSwgSW1t
UHRyKGN1cnJTdHJ1Y3R1cmUpKSk7CisgICAgICAgIGJ1Y2tldHNPZkZhaWwuYXBwZW5kKGJyYW5j
aFB0cihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3Mp
LCBJbW1QdHIoY3VyclN0cnVjdHVyZSkpKTsKICNlbmRpZgogICAgIH0KICAgICBBU1NFUlQocHJv
dG9PYmplY3QpOwpAQCAtNjUzLDkgKzY1Myw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5SWRDaGFpbihTdHIKICAgICAgICAgU3RydWN0dXJlKiogcHJvdG90eXBlU3RydWN0dXJlQWRk
cmVzcyA9ICYocHJvdG9PYmplY3QtPm1fc3RydWN0dXJlKTsKICNpZiBQTEFURk9STShYODZfNjQp
CiAgICAgICAgIG1vdmUoSW1tUHRyKGN1cnJTdHJ1Y3R1cmUpLCBYODY6OmVieCk7Ci0gICAgICAg
IGJ1Y2tldHNPZkZhaWwuYXBwZW5kKGpuZVB0cihYODY6OmVieCwgQWJzb2x1dGVBZGRyZXNzKHBy
b3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MpKSk7CisgICAgICAgIGJ1Y2tldHNPZkZhaWwuYXBwZW5k
KGJyYW5jaFB0cihOb3RFcXVhbCwgWDg2OjplYngsIEFic29sdXRlQWRkcmVzcyhwcm90b3R5cGVT
dHJ1Y3R1cmVBZGRyZXNzKSkpOwogI2Vsc2UKLSAgICAgICAgYnVja2V0c09mRmFpbC5hcHBlbmQo
am5lUHRyKEFic29sdXRlQWRkcmVzcyhwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzKSwgSW1tUHRy
KGN1cnJTdHJ1Y3R1cmUpKSk7CisgICAgICAgIGJ1Y2tldHNPZkZhaWwuYXBwZW5kKGJyYW5jaFB0
cihOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MpLCBJ
bW1QdHIoY3VyclN0cnVjdHVyZSkpKTsKICNlbmRpZgogICAgIH0KICAgICBBU1NFUlQocHJvdG9P
YmplY3QpOwpJbmRleDogcnVudGltZS9SZWdFeHAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJ1bnRpbWUv
UmVnRXhwLmNwcAkocmV2aXNpb24gNDA1MjEpCisrKyBydW50aW1lL1JlZ0V4cC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyMyw2ICsxMjMsNyBAQCBpbnQgUmVnRXhwOjptYXRjaChjb25zdCBVU3Ry
aW5nJiBzLCBpbnQgCiAgICAgaWYgKG1fd3JlY0Z1bmN0aW9uKSB7CiAgICAgICAgIGludCBvZmZz
ZXRWZWN0b3JTaXplID0gKG1fbnVtU3VicGF0dGVybnMgKyAxKSAqIDI7CiAgICAgICAgIGludCog
b2Zmc2V0VmVjdG9yID0gbmV3IGludCBbb2Zmc2V0VmVjdG9yU2l6ZV07CisgICAgICAgIEFTU0VS
VChvZmZzZXRWZWN0b3IpOwogICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG9mZnNldFZlY3Rv
clNpemU7ICsraikKICAgICAgICAgICAgIG9mZnNldFZlY3RvcltqXSA9IC0xOwogCkluZGV4OiB3
cmVjL1dSRUNHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdyZWMvV1JFQ0dlbmVyYXRvci5j
cHAJKHJldmlzaW9uIDQwNTIxKQorKysgd3JlYy9XUkVDR2VuZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjcsMTMgKzY3LDYgQEAgdm9pZCBHZW5lcmF0b3I6OmdlbmVyYXRlRW50ZXIoKQog
ICAgIHBlZWsob3V0cHV0LCAzKTsKICNlbmRpZgogI2VuZGlmCi0KLSNpZm5kZWYgTkRFQlVHCi0g
ICAgLy8gQVNTRVJUIHRoYXQgdGhlIG91dHB1dCByZWdpc3RlciBpcyBub3QgbnVsbC4KLSAgICBK
dW1wIG91dHB1dE5vdE51bGwgPSBqbnpQdHIob3V0cHV0KTsKLSAgICBicmVha3BvaW50KCk7Ci0g
ICAgb3V0cHV0Tm90TnVsbC5saW5rKHRoaXMpOwotI2VuZGlmCiB9CiAKIHZvaWQgR2VuZXJhdG9y
OjpnZW5lcmF0ZVJldHVyblN1Y2Nlc3MoKQpAQCAtMTAwLDE0ICs5MywxNCBAQCB2b2lkIEdlbmVy
YXRvcjo6Z2VuZXJhdGVJbmNyZW1lbnRJbmRleChKCiB7CiAgICAgcGVlayhpbmRleCk7CiAgICAg
aWYgKGZhaWx1cmUpCi0gICAgICAgICpmYWlsdXJlID0gamUzMihsZW5ndGgsIGluZGV4KTsKKyAg
ICAgICAgKmZhaWx1cmUgPSBicmFuY2gzMihFcXVhbCwgbGVuZ3RoLCBpbmRleCk7CiAgICAgYWRk
MzIoSW1tMzIoMSksIGluZGV4KTsKICAgICBwb2tlKGluZGV4KTsKIH0KIAogdm9pZCBHZW5lcmF0
b3I6OmdlbmVyYXRlTG9hZENoYXJhY3RlcihKdW1wTGlzdCYgZmFpbHVyZXMpCiB7Ci0gICAgZmFp
bHVyZXMuYXBwZW5kKGplMzIobGVuZ3RoLCBpbmRleCkpOworICAgIGZhaWx1cmVzLmFwcGVuZChi
cmFuY2gzMihFcXVhbCwgbGVuZ3RoLCBpbmRleCkpOwogICAgIGxvYWQxNihCYXNlSW5kZXgoaW5w
dXQsIGluZGV4LCBUaW1lc1R3byksIGNoYXJhY3Rlcik7CiB9CiAKQEAgLTExNSw3ICsxMDgsNyBA
QCB2b2lkIEdlbmVyYXRvcjo6Z2VuZXJhdGVMb2FkQ2hhcmFjdGVyKEp1CiAvLyB3ZXJlIHBhcnQg
b2YgdGhlIGlucHV0IHN0cmluZy4KIHZvaWQgR2VuZXJhdG9yOjpnZW5lcmF0ZUp1bXBJZk5vdEVu
ZE9mSW5wdXQoTGFiZWwgdGFyZ2V0KQogewotICAgIGpsZTMyKGluZGV4LCBsZW5ndGgsIHRhcmdl
dCk7CisgICAgYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCBpbmRleCwgbGVuZ3RoLCB0YXJnZXQp
OwogfQogCiB2b2lkIEdlbmVyYXRvcjo6Z2VuZXJhdGVSZXR1cm5GYWlsdXJlKCkKQEAgLTE0NSw3
ICsxMzgsNyBAQCB2b2lkIEdlbmVyYXRvcjo6Z2VuZXJhdGVCYWNrcmVmZXJlbmNlUXVhCiAgICAg
R2VuZXJhdGVCYWNrcmVmZXJlbmNlRnVuY3RvciBmdW5jdG9yKHN1YnBhdHRlcm5JZCk7CiAKICAg
ICBsb2FkMzIoQWRkcmVzcyhvdXRwdXQsICgyICogc3VicGF0dGVybklkKSAqIHNpemVvZihpbnQp
KSwgY2hhcmFjdGVyKTsKLSAgICBKdW1wIHNraXBJZkVtcHR5ID0gamUzMihBZGRyZXNzKG91dHB1
dCwgKCgyICogc3VicGF0dGVybklkKSArIDEpICogc2l6ZW9mKGludCkpLCBjaGFyYWN0ZXIpOwor
ICAgIEp1bXAgc2tpcElmRW1wdHkgPSBicmFuY2gzMihFcXVhbCwgQWRkcmVzcyhvdXRwdXQsICgo
MiAqIHN1YnBhdHRlcm5JZCkgKyAxKSAqIHNpemVvZihpbnQpKSwgY2hhcmFjdGVyKTsKIAogICAg
IEFTU0VSVChxdWFudGlmaWVyVHlwZSA9PSBRdWFudGlmaWVyOjpHcmVlZHkgfHwgcXVhbnRpZmll
clR5cGUgPT0gUXVhbnRpZmllcjo6Tm9uR3JlZWR5KTsKICAgICBpZiAocXVhbnRpZmllclR5cGUg
PT0gUXVhbnRpZmllcjo6R3JlZWR5KQpAQCAtMTc1LDcgKzE2OCw3IEBAIHZvaWQgR2VuZXJhdG9y
OjpnZW5lcmF0ZU5vbkdyZWVkeVF1YW50aWYKICAgICBMYWJlbCBhbHRlcm5hdGl2ZUZhaWxlZCh0
aGlzKTsKICAgICBwb3AoaW5kZXgpOwogICAgIGlmIChtYXggIT0gUXVhbnRpZmllcjo6SW5maW5p
dHkpCi0gICAgICAgIGplMzIocmVwZWF0Q291bnQsIEltbTMyKG1heCksIHF1YW50aWZpZXJGYWls
ZWQpOworICAgICAgICBicmFuY2gzMihFcXVhbCwgcmVwZWF0Q291bnQsIEltbTMyKG1heCksIHF1
YW50aWZpZXJGYWlsZWQpOwogCiAgICAgLy8gKDEpIFJlYWQgYW4gYXRvbS4KICAgICBpZiAobWlu
KQpAQCAtMTg3LDcgKzE4MCw3IEBAIHZvaWQgR2VuZXJhdG9yOjpnZW5lcmF0ZU5vbkdyZWVkeVF1
YW50aWYKICAgICAKICAgICAvLyAoMikgS2VlcCByZWFkaW5nIGlmIHdlJ3JlIHVuZGVyIHRoZSBt
aW5pbXVtLgogICAgIGlmIChtaW4gPiAxKQotICAgICAgICBqbDMyKHJlcGVhdENvdW50LCBJbW0z
MihtaW4pLCByZWFkQXRvbSk7CisgICAgICAgIGJyYW5jaDMyKExlc3NUaGFuLCByZXBlYXRDb3Vu
dCwgSW1tMzIobWluKSwgcmVhZEF0b20pOwogCiAgICAgLy8gKDMpIFRlc3QgdGhlIHJlc3Qgb2Yg
dGhlIGFsdGVybmF0aXZlLgogICAgIGlmICghbWluKQpAQCAtMjIxLDcgKzIxNCw3IEBAIHZvaWQg
R2VuZXJhdG9yOjpnZW5lcmF0ZUdyZWVkeVF1YW50aWZpZXIKICAgICBlbHNlIGlmIChtYXggPT0g
MSkKICAgICAgICAgZG9uZVJlYWRpbmdBdG9tc0xpc3QuYXBwZW5kKGp1bXAoKSk7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIGpuZTMyKHJlcGVhdENvdW50LCBJbW0zMihtYXgpLCByZWFkQXRvbSk7Cisg
ICAgICAgIGJyYW5jaDMyKE5vdEVxdWFsLCByZXBlYXRDb3VudCwgSW1tMzIobWF4KSwgcmVhZEF0
b20pOwogICAgICAgICBkb25lUmVhZGluZ0F0b21zTGlzdC5hcHBlbmQoanVtcCgpKTsKICAgICB9
CiAKQEAgLTIzOCw3ICsyMzEsNyBAQCB2b2lkIEdlbmVyYXRvcjo6Z2VuZXJhdGVHcmVlZHlRdWFu
dGlmaWVyCiAKICAgICAvLyAoMikgVmVyaWZ5IHRoYXQgd2UgaGF2ZSBlbm91Z2ggYXRvbXMuCiAg
ICAgZG9uZVJlYWRpbmdBdG9tc0xpc3QubGluayh0aGlzKTsKLSAgICBqbDMyKHJlcGVhdENvdW50
LCBJbW0zMihtaW4pLCBxdWFudGlmaWVyRmFpbGVkKTsKKyAgICBicmFuY2gzMihMZXNzVGhhbiwg
cmVwZWF0Q291bnQsIEltbTMyKG1pbiksIHF1YW50aWZpZXJGYWlsZWQpOwogCiAgICAgLy8gKDMp
IFRlc3QgdGhlIHJlc3Qgb2YgdGhlIGFsdGVybmF0aXZlLgogICAgIHB1c2goaW5kZXgpOwpAQCAt
Mjc3LDcgKzI3MCw3IEBAIGJvb2wgR2VuZXJhdG9yOjpnZW5lcmF0ZVBhdHRlcm5DaGFyYWN0ZXIK
IAogICAgIC8vIE9wdGltaXN0aWNhbGx5IGNvbnN1bWUgMiBjaGFyYWN0ZXJzLgogICAgIGFkZDMy
KEltbTMyKDIpLCBpbmRleCk7Ci0gICAgZmFpbHVyZXMuYXBwZW5kKGpnMzIoaW5kZXgsIGxlbmd0
aCkpOworICAgIGZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihHcmVhdGVyVGhhbiwgaW5kZXgsIGxl
bmd0aCkpOwogCiAgICAgLy8gTG9hZCB0aGUgY2hhcmFjdGVycyB3ZSBqdXN0IGNvbnN1bWVkLCBv
ZmZzZXQgLTIgY2hhcmFjdGVycyBmcm9tIGluZGV4LgogICAgIGxvYWQzMihCYXNlSW5kZXgoaW5w
dXQsIGluZGV4LCBUaW1lc1R3bywgLTIgKiAyKSwgY2hhcmFjdGVyKTsKQEAgLTMwNiw3ICsyOTks
NyBAQCBib29sIEdlbmVyYXRvcjo6Z2VuZXJhdGVQYXR0ZXJuQ2hhcmFjdGVyCiAgICAgfQogICAg
IGludCBwYWlyID0gY2gxIHwgKGNoMiA8PCAxNik7CiAKLSAgICBmYWlsdXJlcy5hcHBlbmQoam5l
MzIoY2hhcmFjdGVyLCBJbW0zMihwYWlyKSkpOworICAgIGZhaWx1cmVzLmFwcGVuZChicmFuY2gz
MihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihwYWlyKSkpOwogICAgIHJldHVybiB0cnVlOwog
fQogCkBAIC0zMjgsMTQgKzMyMSwxNCBAQCB2b2lkIEdlbmVyYXRvcjo6Z2VuZXJhdGVQYXR0ZXJu
Q2hhcmFjdGVyCiAgICAgICAgICAgICBjaCB8PSAzMjsKICAgICAgICAgfSBlbHNlIGlmICghaXNB
U0NJSShjaCkgJiYgKChsb3dlciA9IFVuaWNvZGU6OnRvTG93ZXIoY2gpKSAhPSAodXBwZXIgPSBV
bmljb2RlOjp0b1VwcGVyKGNoKSkpKSB7CiAgICAgICAgICAgICAvLyBoYW5kbGUgdW5pY29kZSBj
YXNlIHNlbnRpdGl2ZSBjaGFyYWN0ZXJzIC0gYnJhbmNoIHRvIHN1Y2Nlc3Mgb24gdXBwZXIKLSAg
ICAgICAgICAgIGlzVXBwZXIgPSBqZTMyKGNoYXJhY3RlciwgSW1tMzIodXBwZXIpKTsKKyAgICAg
ICAgICAgIGlzVXBwZXIgPSBicmFuY2gzMihFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMih1cHBlcikp
OwogICAgICAgICAgICAgaGFzVXBwZXIgPSB0cnVlOwogICAgICAgICAgICAgY2ggPSBsb3dlcjsK
ICAgICAgICAgfQogICAgIH0KICAgICAKICAgICAvLyBjaGVja3MgZm9yIGNoLCBvciBsb3dlciBj
YXNlIHZlcnNpb24gb2YgY2gsIGlmIGluc2Vuc2l0aXZlCi0gICAgZmFpbHVyZXMuYXBwZW5kKGpu
ZTMyKGNoYXJhY3RlciwgSW1tMzIoKHVuc2lnbmVkIHNob3J0KWNoKSkpOworICAgIGZhaWx1cmVz
LmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMigodW5zaWduZWQgc2hv
cnQpY2gpKSk7CiAKICAgICBpZiAobV9wYXJzZXIuaWdub3JlQ2FzZSgpICYmIGhhc1VwcGVyKSB7
CiAgICAgICAgIC8vIGZvciB1bmljb2RlIGNhc2UgaW5zZW5zaXRpdmUgbWF0Y2hlcywgYnJhbmNo
IGhlcmUgaWYgdXBwZXIgbWF0Y2hlcy4KQEAgLTM1NywzMyArMzUwLDMzIEBAIHZvaWQgR2VuZXJh
dG9yOjpnZW5lcmF0ZUNoYXJhY3RlckNsYXNzSW4KICAgICAgICAgLy8gY2hlY2sgaWYgdGhlcmUg
YXJlIGFueSByYW5nZXMgb3IgbWF0Y2hlcyBiZWxvdyBsby4gIElmIG5vdCwganVzdCBqbCB0byBm
YWlsdXJlIC0KICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW55dGhpbmcgZWxzZSB0byBjaGVjaywg
Y2hlY2sgdGhhdCBmaXJzdCwgaWYgaXQgZmFsbHMgdGhyb3VnaCBqbXAgdG8gZmFpbHVyZS4KICAg
ICAgICAgaWYgKCgqbWF0Y2hJbmRleCA8IG1hdGNoQ291bnQpICYmIChtYXRjaGVzWyptYXRjaElu
ZGV4XSA8IGxvKSkgewotICAgICAgICAgICAgSnVtcCBsb09yQWJvdmUgPSBqZ2UzMihjaGFyYWN0
ZXIsIEltbTMyKCh1bnNpZ25lZCBzaG9ydClsbykpOworICAgICAgICAgICAgSnVtcCBsb09yQWJv
dmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoKHVuc2ln
bmVkIHNob3J0KWxvKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIGdlbmVyYXRlIGNv
ZGUgZm9yIGFsbCByYW5nZXMgYmVmb3JlIHRoaXMgb25lCiAgICAgICAgICAgICBpZiAod2hpY2gp
CiAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDaGFyYWN0ZXJDbGFzc0ludmVydGVkUmFuZ2UoZmFp
bHVyZXMsIG1hdGNoRGVzdCwgcmFuZ2VzLCB3aGljaCwgbWF0Y2hJbmRleCwgbWF0Y2hlcywgbWF0
Y2hDb3VudCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAg
ICBtYXRjaERlc3QuYXBwZW5kKGplMzIoY2hhcmFjdGVyLCBJbW0zMigodW5zaWduZWQgc2hvcnQp
bWF0Y2hlc1sqbWF0Y2hJbmRleF0pKSk7CisgICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVu
ZChicmFuY2gzMihFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMigodW5zaWduZWQgc2hvcnQpbWF0Y2hl
c1sqbWF0Y2hJbmRleF0pKSk7CiAgICAgICAgICAgICAgICAgKysqbWF0Y2hJbmRleDsKICAgICAg
ICAgICAgIH0gd2hpbGUgKCgqbWF0Y2hJbmRleCA8IG1hdGNoQ291bnQpICYmIChtYXRjaGVzWypt
YXRjaEluZGV4XSA8IGxvKSk7CiAgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQoanVtcCgpKTsK
IAogICAgICAgICAgICAgbG9PckFib3ZlLmxpbmsodGhpcyk7CiAgICAgICAgIH0gZWxzZSBpZiAo
d2hpY2gpIHsKLSAgICAgICAgICAgIEp1bXAgbG9PckFib3ZlID0gamdlMzIoY2hhcmFjdGVyLCBJ
bW0zMigodW5zaWduZWQgc2hvcnQpbG8pKTsKKyAgICAgICAgICAgIEp1bXAgbG9PckFib3ZlID0g
YnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKCh1bnNpZ25lZCBz
aG9ydClsbykpOwogCiAgICAgICAgICAgICBnZW5lcmF0ZUNoYXJhY3RlckNsYXNzSW52ZXJ0ZWRS
YW5nZShmYWlsdXJlcywgbWF0Y2hEZXN0LCByYW5nZXMsIHdoaWNoLCBtYXRjaEluZGV4LCBtYXRj
aGVzLCBtYXRjaENvdW50KTsKICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChqdW1wKCkpOwog
CiAgICAgICAgICAgICBsb09yQWJvdmUubGluayh0aGlzKTsKICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBmYWlsdXJlcy5hcHBlbmQoamwzMihjaGFyYWN0ZXIsIEltbTMyKCh1bnNpZ25lZCBz
aG9ydClsbykpKTsKKyAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihMZXNzVGhh
biwgY2hhcmFjdGVyLCBJbW0zMigodW5zaWduZWQgc2hvcnQpbG8pKSk7CiAKICAgICAgICAgd2hp
bGUgKCgqbWF0Y2hJbmRleCA8IG1hdGNoQ291bnQpICYmIChtYXRjaGVzWyptYXRjaEluZGV4XSA8
PSBoaSkpCiAgICAgICAgICAgICArKyptYXRjaEluZGV4OwogCi0gICAgICAgIG1hdGNoRGVzdC5h
cHBlbmQoamxlMzIoY2hhcmFjdGVyLCBJbW0zMigodW5zaWduZWQgc2hvcnQpaGkpKSk7CisgICAg
ICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCBjaGFyYWN0ZXIs
IEltbTMyKCh1bnNpZ25lZCBzaG9ydCloaSkpKTsKICAgICAgICAgLy8gZmFsbCB0aHJvdWdoIHRv
IGhlcmUsIHRoZSB2YWx1ZSBpcyBhYm92ZSBoaS4KIAogICAgICAgICAvLyBzaHVmZmxlIGFsb25n
ICYgbG9vcCBhcm91bmQgaWYgdGhlcmUgYXJlIGFueSBtb3JlIG1hdGNoZXMgdG8gaGFuZGxlLgpA
QCAtMzk3LDEyICszOTAsMTIgQEAgdm9pZCBHZW5lcmF0b3I6OmdlbmVyYXRlQ2hhcmFjdGVyQ2xh
c3NJbgogewogICAgIEp1bXAgdW5pY29kZUZhaWw7CiAgICAgaWYgKGNoYXJDbGFzcy5udW1NYXRj
aGVzVW5pY29kZSB8fCBjaGFyQ2xhc3MubnVtUmFuZ2VzVW5pY29kZSkgewotICAgICAgICBKdW1w
IGlzQXNjaWkgPSBqbGUzMihjaGFyYWN0ZXIsIEltbTMyKDB4N2YpKTsKKyAgICAgICAgSnVtcCBp
c0FzY2lpID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKDB4N2Yp
KTsKICAgICAKICAgICAgICAgaWYgKGNoYXJDbGFzcy5udW1NYXRjaGVzVW5pY29kZSkgewogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoYXJDbGFzcy5udW1NYXRjaGVzVW5p
Y29kZTsgKytpKSB7CiAgICAgICAgICAgICAgICAgVUNoYXIgY2ggPSBjaGFyQ2xhc3MubWF0Y2hl
c1VuaWNvZGVbaV07Ci0gICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChqZTMyKGNoYXJh
Y3RlciwgSW1tMzIoY2gpKSk7CisgICAgICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChicmFu
Y2gzMihFcXVhbCwgY2hhcmFjdGVyLCBJbW0zMihjaCkpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICAKQEAgLTQxMSw4ICs0MDQsOCBAQCB2b2lkIEdlbmVyYXRvcjo6Z2VuZXJh
dGVDaGFyYWN0ZXJDbGFzc0luCiAgICAgICAgICAgICAgICAgVUNoYXIgbG8gPSBjaGFyQ2xhc3Mu
cmFuZ2VzVW5pY29kZVtpXS5iZWdpbjsKICAgICAgICAgICAgICAgICBVQ2hhciBoaSA9IGNoYXJD
bGFzcy5yYW5nZXNVbmljb2RlW2ldLmVuZDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBKdW1wIGJlbG93ID0gamwzMihjaGFyYWN0ZXIsIEltbTMyKGxvKSk7Ci0gICAgICAgICAg
ICAgICAgbWF0Y2hEZXN0LmFwcGVuZChqbGUzMihjaGFyYWN0ZXIsIEltbTMyKGhpKSkpOworICAg
ICAgICAgICAgICAgIEp1bXAgYmVsb3cgPSBicmFuY2gzMihMZXNzVGhhbiwgY2hhcmFjdGVyLCBJ
bW0zMihsbykpOworICAgICAgICAgICAgICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNoMzIoTGVz
c1RoYW5PckVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKGhpKSkpOwogICAgICAgICAgICAgICAgIGJl
bG93LmxpbmsodGhpcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQyNiw3ICs0MTks
NyBAQCB2b2lkIEdlbmVyYXRvcjo6Z2VuZXJhdGVDaGFyYWN0ZXJDbGFzc0luCiAgICAgICAgIEp1
bXBMaXN0IGZhaWx1cmVzOyAKICAgICAgICAgZ2VuZXJhdGVDaGFyYWN0ZXJDbGFzc0ludmVydGVk
UmFuZ2UoZmFpbHVyZXMsIG1hdGNoRGVzdCwgY2hhckNsYXNzLnJhbmdlcywgY2hhckNsYXNzLm51
bVJhbmdlcywgJm1hdGNoSW5kZXgsIGNoYXJDbGFzcy5tYXRjaGVzLCBjaGFyQ2xhc3MubnVtTWF0
Y2hlcyk7CiAgICAgICAgIHdoaWxlIChtYXRjaEluZGV4IDwgY2hhckNsYXNzLm51bU1hdGNoZXMp
Ci0gICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5kKGplMzIoY2hhcmFjdGVyLCBJbW0zMigodW5z
aWduZWQgc2hvcnQpY2hhckNsYXNzLm1hdGNoZXNbbWF0Y2hJbmRleCsrXSkpKTsKKyAgICAgICAg
ICAgIG1hdGNoRGVzdC5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGNoYXJhY3RlciwgSW1tMzIoKHVu
c2lnbmVkIHNob3J0KWNoYXJDbGFzcy5tYXRjaGVzW21hdGNoSW5kZXgrK10pKSk7CiAKICAgICAg
ICAgZmFpbHVyZXMubGluayh0aGlzKTsKICAgICB9IGVsc2UgaWYgKGNoYXJDbGFzcy5udW1NYXRj
aGVzKSB7CkBAIC00NDMsMTMgKzQzNiwxMyBAQCB2b2lkIEdlbmVyYXRvcjo6Z2VuZXJhdGVDaGFy
YWN0ZXJDbGFzc0luCiAgICAgICAgICAgICAgICAgaWYgKGlzQVNDSUlVcHBlcihjaCkpCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbWF0
Y2hEZXN0LmFwcGVuZChqZTMyKGNoYXJhY3RlciwgSW1tMzIoKHVuc2lnbmVkIHNob3J0KWNoKSkp
OworICAgICAgICAgICAgbWF0Y2hEZXN0LmFwcGVuZChicmFuY2gzMihFcXVhbCwgY2hhcmFjdGVy
LCBJbW0zMigodW5zaWduZWQgc2hvcnQpY2gpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
dW5zaWduZWQgY291bnRBWmF6ID0gbWF0Y2hlc0FaYXouc2l6ZSgpKSB7CiAgICAgICAgICAgICBv
cjMyKEltbTMyKDMyKSwgY2hhcmFjdGVyKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjb3VudEFaYXo7ICsraSkKLSAgICAgICAgICAgICAgICBtYXRjaERlc3QuYXBwZW5k
KGplMzIoY2hhcmFjdGVyLCBJbW0zMihtYXRjaGVzQVpheltpXSkpKTsKKyAgICAgICAgICAgICAg
ICBtYXRjaERlc3QuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBjaGFyYWN0ZXIsIEltbTMyKG1hdGNo
ZXNBWmF6W2ldKSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MzMsNyArNTI2LDcgQEAgdm9p
ZCBHZW5lcmF0b3I6OmdlbmVyYXRlQXNzZXJ0aW9uQk9MKEp1bQogICAgICAgICBKdW1wTGlzdCBw
cmV2aW91c0lzTmV3bGluZTsKIAogICAgICAgICAvLyBiZWdpbiBvZiBpbnB1dCA9PSBzdWNjZXNz
Ci0gICAgICAgIHByZXZpb3VzSXNOZXdsaW5lLmFwcGVuZChqZTMyKGluZGV4LCBJbW0zMigwKSkp
OworICAgICAgICBwcmV2aW91c0lzTmV3bGluZS5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIGluZGV4
LCBJbW0zMigwKSkpOwogCiAgICAgICAgIC8vIG5vdyBjaGVjayBwcmV2IGNoYXIgYWdhaW5zdCBu
ZXdsaW5lIGNoYXJhY3RlcnMuCiAgICAgICAgIGxvYWQxNihCYXNlSW5kZXgoaW5wdXQsIGluZGV4
LCBUaW1lc1R3bywgLTIpLCBjaGFyYWN0ZXIpOwpAQCAtNTQzLDcgKzUzNiw3IEBAIHZvaWQgR2Vu
ZXJhdG9yOjpnZW5lcmF0ZUFzc2VydGlvbkJPTChKdW0KIAogICAgICAgICBwcmV2aW91c0lzTmV3
bGluZS5saW5rKHRoaXMpOwogICAgIH0gZWxzZQotICAgICAgICBmYWlsdXJlcy5hcHBlbmQoam5l
MzIoaW5kZXgsIEltbTMyKDApKSk7CisgICAgICAgIGZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihO
b3RFcXVhbCwgaW5kZXgsIEltbTMyKDApKSk7CiB9CiAKIHZvaWQgR2VuZXJhdG9yOjpnZW5lcmF0
ZUFzc2VydGlvbkVPTChKdW1wTGlzdCYgZmFpbHVyZXMpCkBAIC01NTYsNyArNTQ5LDcgQEAgdm9p
ZCBHZW5lcmF0b3I6OmdlbmVyYXRlQXNzZXJ0aW9uRU9MKEp1bQogICAgICAgICBmYWlsdXJlcy5h
cHBlbmQoanVtcCgpKTsKICAgICAgICAgbmV4dElzTmV3bGluZS5saW5rKHRoaXMpOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGZhaWx1cmVzLmFwcGVuZChqbmUzMihsZW5ndGgsIGluZGV4KSk7Cisg
ICAgICAgIGZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgbGVuZ3RoLCBpbmRleCkp
OwogICAgIH0KIH0KIApAQCAtNTY4LDcgKzU2MSw3IEBAIHZvaWQgR2VuZXJhdG9yOjpnZW5lcmF0
ZUFzc2VydGlvbldvcmRCb3UKICAgICAvLyAoMSkgQ2hlY2sgaWYgdGhlIHByZXZpb3VzIHZhbHVl
IHdhcyBhIHdvcmQgY2hhcgogCiAgICAgLy8gKDEuMSkgY2hlY2sgZm9yIGJlZ2luIG9mIGlucHV0
Ci0gICAgSnVtcCBhdEJlZ2luID0gamUzMihpbmRleCwgSW1tMzIoMCkpOworICAgIEp1bXAgYXRC
ZWdpbiA9IGJyYW5jaDMyKEVxdWFsLCBpbmRleCwgSW1tMzIoMCkpOwogICAgIC8vICgxLjIpIGxv
YWQgdGhlIGxhc3QgY2hhciwgYW5kIGNoY2sgaWYgaXMgd29yZCBjaGFyYWN0ZXIKICAgICBsb2Fk
MTYoQmFzZUluZGV4KGlucHV0LCBpbmRleCwgVGltZXNUd28sIC0yKSwgY2hhcmFjdGVyKTsKICAg
ICBKdW1wTGlzdCBwcmV2aW91c0lzV29yZDsKQEAgLTYyNSwxNCArNjE4LDE0IEBAIHZvaWQgR2Vu
ZXJhdG9yOjpnZW5lcmF0ZUJhY2tyZWZlcmVuY2UoSnUKICAgICBza2lwSW5jcmVtZW50Lmxpbmso
dGhpcyk7CiAKICAgICAvLyBjaGVjayBpZiB3ZSdyZSBhdCB0aGUgZW5kIG9mIGJhY2tyZWYgKGlm
IHdlIGFyZSwgc3VjY2VzcyEpCi0gICAgSnVtcCBlbmRPZkJhY2tSZWYgPSBqZTMyKEFkZHJlc3Mo
b3V0cHV0LCAoKDIgKiBzdWJwYXR0ZXJuSWQpICsgMSkgKiBzaXplb2YoaW50KSksIHJlcGVhdENv
dW50KTsKKyAgICBKdW1wIGVuZE9mQmFja1JlZiA9IGJyYW5jaDMyKEVxdWFsLCBBZGRyZXNzKG91
dHB1dCwgKCgyICogc3VicGF0dGVybklkKSArIDEpICogc2l6ZW9mKGludCkpLCByZXBlYXRDb3Vu
dCk7CiAKICAgICBsb2FkMTYoQmFzZUluZGV4KGlucHV0LCByZXBlYXRDb3VudCwgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzVHdvKSwgY2hhcmFjdGVyKTsKIAogICAgIC8vIGNoZWNrIGlmIHdlJ3ZlIHJ1
biBvdXQgb2YgaW5wdXQgKHRoaXMgd291bGQgYmUgYSBjYW4gbydmYWlsKQotICAgIEp1bXAgZW5k
T2ZJbnB1dCA9IGplMzIobGVuZ3RoLCBpbmRleCk7CisgICAgSnVtcCBlbmRPZklucHV0ID0gYnJh
bmNoMzIoRXF1YWwsIGxlbmd0aCwgaW5kZXgpOwogCi0gICAgamUxNihjaGFyYWN0ZXIsIEJhc2VJ
bmRleChpbnB1dCwgaW5kZXgsIFRpbWVzVHdvKSwgdG9wT2ZMb29wKTsKKyAgICBicmFuY2gxNihF
cXVhbCwgQmFzZUluZGV4KGlucHV0LCBpbmRleCwgVGltZXNUd28pLCBjaGFyYWN0ZXIsIHRvcE9m
TG9vcCk7CiAKICAgICBlbmRPZklucHV0LmxpbmsodGhpcyk7CiAK
</data>
<flag name="review"
          id="13162"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>